@mailwoman/corpus 10.0.0 → 10.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +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 +785 -0
- package/lib/adapters/dedup-key.ts +40 -0
- package/lib/adapters/errors.ts +21 -0
- package/lib/adapters/geonames/adapter.ts +42 -52
- package/lib/adapters/geonames/postal/adapter.ts +31 -37
- package/lib/adapters/gleif/adapter.ts +828 -0
- package/lib/adapters/libpostal-dictionary.ts +39 -0
- package/lib/adapters/openaddresses/adapter.ts +51 -55
- package/lib/adapters/osm/adapter.ts +148 -70
- package/lib/adapters/overture/adapter.ts +52 -43
- package/lib/adapters/po-box/adapter.ts +202 -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 +135 -0
- package/lib/adapters/wof/admin/json/adapter.ts +48 -33
- package/lib/adapters/wof/json-rows.ts +56 -26
- package/lib/adapters/wof/postalcode-json/adapter.ts +57 -59
- package/lib/adapters.ts +230 -0
- package/lib/au/adapters/gnaf/adapter.ts +35 -43
- 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 +670 -0
- package/lib/be/adapters/wallonie/adapter.ts +537 -0
- package/lib/be/tools/fetch/brussels.ts +239 -0
- package/lib/be/tools/fetch/wallonie.ts +274 -0
- package/lib/build/adapters.ts +110 -0
- package/lib/build/align.ts +364 -0
- package/lib/build/checkpoint.ts +131 -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 +232 -0
- package/lib/build.ts +127 -315
- package/lib/cn/recipes/organizational-units.ts +20 -41
- package/lib/cz/adapters/cuzk/adapter.ts +317 -0
- package/lib/cz/recipes/pcfirst-preposition.ts +40 -27
- package/lib/cz/tools/fetch/cuzk.ts +699 -0
- package/lib/de/recipes/locale.ts +68 -58
- package/lib/directory.ts +31 -0
- package/lib/dk/adapters/inspire/adapter.ts +345 -0
- package/lib/dk/tools/fetch/inspire.ts +321 -0
- package/lib/ee/adapters/ads/adapter.ts +246 -0
- package/lib/ee/tools/fetch/ads.ts +270 -0
- package/lib/env.ts +6 -2
- package/lib/es/adapters/bizkaia/adapter.ts +388 -0
- package/lib/es/adapters/catastro/adapter.ts +343 -0
- package/lib/es/adapters/gipuzkoa/adapter.ts +263 -0
- package/lib/es/adapters/navarra/adapter.ts +289 -0
- package/lib/es/cadastre.ts +194 -0
- package/lib/es/tools/fetch/bizkaia.ts +748 -0
- package/lib/es/tools/fetch/catastro.ts +754 -0
- package/lib/es/tools/fetch/gipuzkoa.ts +336 -0
- package/lib/es/tools/fetch/navarra.ts +488 -0
- package/lib/fi/adapters/ryhti/adapter.ts +323 -0
- package/lib/fi/tools/fetch/ryhti.ts +476 -0
- package/lib/fingerprints.ts +154 -0
- package/lib/fr/adapters/annuaire-education/adapter.ts +598 -0
- package/lib/fr/adapters/ban/adapter.ts +87 -59
- package/lib/fr/adapters/finess/adapter.ts +618 -0
- package/lib/fr/adapters/finess/postal-lines.ts +157 -0
- package/lib/fr/adapters/finess/voie-type.ts +200 -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 +109 -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 +306 -0
- package/lib/fr/tools/fetch/ban.ts +28 -19
- package/lib/fr/tools/fetch/finess.ts +352 -0
- package/lib/gauntlet-inputs.ts +92 -0
- package/lib/index.ts +9 -3
- package/lib/inspire/address.ts +457 -0
- package/lib/inspire/archive.ts +44 -0
- package/lib/inspire/errors.ts +71 -0
- package/lib/inspire/stream.ts +262 -0
- package/lib/international/recipes/locale.ts +134 -176
- package/lib/it/adapters/anac/adapter.ts +522 -0
- package/lib/it/tools/fetch/anac.ts +394 -0
- package/lib/jp/adapters/wof-admin/adapter.ts +27 -17
- package/lib/jp/tools/fetch/houjin.ts +16 -18
- 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 +33 -26
- package/lib/kr/tools/fetch/juso.ts +19 -21
- package/lib/kr/tools/fetch/localdata.ts +28 -29
- package/lib/lu/adapters/bd-adresses/adapter.ts +240 -0
- package/lib/lu/tools/fetch/bd-adresses.ts +351 -0
- package/lib/lv/adapters/varis/adapter.ts +499 -0
- package/lib/lv/tools/fetch/varis.ts +214 -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 +298 -0
- package/lib/no/adapters/matrikkelen/adapter.ts +187 -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 +519 -0
- package/lib/parquet/duckdb.ts +144 -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 +451 -0
- package/lib/pl/adapters/emuia/adapter.ts +202 -0
- package/lib/pl/tools/fetch/emuia.ts +360 -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 +36 -19
- package/lib/recipes/country-balanced.ts +66 -86
- package/lib/recipes/house-venue.ts +31 -13
- package/lib/recipes/intersection.ts +82 -60
- 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 +28 -16
- package/lib/recipes/po/box/cedex/sources.ts +3 -3
- 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 +252 -153
- package/lib/recipes/sources.ts +399 -0
- package/lib/recipes/street/affix.ts +54 -154
- package/lib/recipes/street/bare.ts +28 -15
- package/lib/recipes/street.ts +32 -8
- package/lib/recipes/sub/venue/context.ts +30 -23
- package/lib/recipes/sub/venue/render.ts +170 -0
- package/lib/recipes/sub/venue/sources.ts +68 -219
- package/lib/recipes/sub/venue.ts +801 -0
- package/lib/recipes/trailing-region.ts +69 -85
- package/lib/recipes/unit/sources.ts +44 -0
- package/lib/recipes/unit.ts +101 -89
- package/lib/{recipes/index.ts → recipes.ts} +13 -11
- package/lib/registers.ts +278 -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 +220 -84
- package/lib/sg/recipes/register.ts +46 -52
- package/lib/sg/tools/fetch/acra.ts +20 -25
- package/lib/si/recipes/bare-village.ts +34 -17
- package/lib/sk/adapters/inspire/adapter.ts +395 -0
- package/lib/sk/tools/fetch/inspire.ts +402 -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 +590 -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 +246 -0
- package/lib/synthesizers/anchor-absorption.ts +55 -91
- package/lib/synthesizers/boundary-stress.ts +49 -131
- package/lib/synthesizers/house-venue.ts +44 -102
- package/lib/synthesizers/intersection.ts +37 -26
- package/lib/synthesizers/no-street.ts +70 -119
- package/lib/synthesizers/po-box.ts +90 -105
- package/lib/synthesizers/street.ts +46 -34
- package/lib/synthesizers/utils.ts +64 -218
- 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 +113 -118
- package/lib/tools/corpus-stats.ts +44 -30
- package/lib/tools/fetch/atom.ts +164 -0
- package/lib/tools/fetch/cordis.ts +318 -0
- package/lib/tools/fetch/download/manifest.ts +34 -22
- package/lib/tools/fetch/download/network.ts +55 -31
- package/lib/tools/fetch/download/retry.ts +26 -25
- package/lib/tools/fetch/geonames/dump.ts +72 -54
- package/lib/tools/fetch/geonames/postal.ts +27 -62
- package/lib/tools/fetch/gleif.ts +360 -0
- package/lib/tools/fetch/header.ts +69 -0
- package/lib/tools/fetch/inspire-addresses.ts +495 -0
- package/lib/tools/fetch/openaddresses.ts +22 -111
- 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 +943 -0
- package/lib/tools/fetch/wikidata-subvenue.ts +45 -145
- package/lib/tools/fetch/zip-archive.ts +100 -0
- package/lib/tools/fetch.ts +143 -0
- package/lib/tools/golden/expand.ts +74 -43
- package/lib/tools/golden/promote.ts +41 -32
- package/lib/tools/golden/relabel-street/directory.ts +63 -36
- package/lib/tools/golden/relabel-street/row.ts +28 -106
- package/lib/tools/ingest-csv.ts +45 -48
- package/lib/tools/jsonl-to-parquet.ts +59 -98
- package/lib/tools/lint/recipe-output/vocab.ts +366 -0
- package/lib/tools/lint/{slice/index.ts → recipe-output.ts} +107 -121
- 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 +43 -36
- package/lib/tools/overlay/manifest.ts +407 -0
- package/lib/tools/overlay/merge-source.ts +138 -0
- package/lib/tools/overlay/split-slice.ts +144 -0
- package/lib/tools/{slice → overlay}/translit.ts +74 -58
- package/lib/tools/overture-subvenue.ts +17 -90
- package/lib/tools/postcode-triples.ts +281 -210
- package/lib/tools/source-register/build.ts +819 -0
- package/lib/tools/sub/venue/head-nouns.ts +38 -75
- package/lib/tools/sub/venue/lexicon.ts +71 -106
- package/lib/tools/sub/venue/wikidata.ts +13 -10
- package/lib/tools.ts +31 -0
- package/lib/tw/tools/fetch/gcis.ts +17 -16
- package/lib/types.ts +304 -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 +7 -2
- 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 +51 -112
- package/lib/us/adapters/usgov/nppes/adapter.ts +72 -35
- package/lib/us/adapters/usgov/samhsa-treatment-locator/adapter.ts +43 -30
- package/lib/us/fips-state.ts +17 -8
- package/lib/us/tools/fetch/hrsa.ts +7 -8
- package/lib/us/tools/fetch/imls-pls.ts +17 -35
- package/lib/us/tools/fetch/nad.ts +50 -32
- package/lib/us/tools/fetch/nppes.ts +23 -35
- package/lib/us/tools/fetch/state/hi-schools.ts +22 -16
- package/lib/us/tools/fetch/state/sources.ts +12 -12
- package/lib/us/tools/fetch/tiger-full.ts +21 -73
- package/lib/utils/align.ts +42 -52
- package/lib/utils/{slice-stats.ts → cooccurrence-stats.ts} +22 -16
- package/lib/utils/golden.ts +34 -49
- package/lib/utils/license.ts +238 -26
- package/lib/utils/split.ts +205 -88
- package/lib/utils/tokenize.ts +22 -34
- package/lib/utils/wof-json.ts +129 -76
- 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 +324 -0
- package/out/adapters/cordis/adapter.d.ts.map +1 -0
- package/out/adapters/cordis/adapter.js +616 -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 +39 -49
- 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 +684 -0
- package/out/adapters/gleif/adapter.js.map +1 -0
- package/out/adapters/libpostal-dictionary.d.ts +22 -0
- package/out/adapters/libpostal-dictionary.d.ts.map +1 -0
- package/out/adapters/libpostal-dictionary.js +36 -0
- package/out/adapters/libpostal-dictionary.js.map +1 -0
- package/out/adapters/openaddresses/adapter.d.ts +28 -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 +48 -42
- package/out/adapters/osm/adapter.d.ts.map +1 -1
- package/out/adapters/osm/adapter.js +116 -67
- 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 +63 -0
- package/out/adapters/po-box/adapter.d.ts.map +1 -0
- package/out/adapters/{synth-po-box → po-box}/adapter.js +45 -46
- 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 +102 -0
- package/out/adapters/street-line.d.ts.map +1 -0
- package/out/adapters/street-line.js +117 -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 +47 -31
- package/out/adapters/wof/admin/json/adapter.js.map +1 -1
- package/out/adapters/wof/json-rows.d.ts +35 -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 +55 -57
- 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 +34 -42
- 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 +233 -0
- package/out/be/adapters/vlaanderen/adapter.d.ts.map +1 -0
- package/out/be/adapters/vlaanderen/adapter.js +416 -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 +119 -0
- package/out/be/tools/fetch/brussels.d.ts.map +1 -0
- package/out/be/tools/fetch/brussels.js +146 -0
- package/out/be/tools/fetch/brussels.js.map +1 -0
- package/out/be/tools/fetch/wallonie.d.ts +119 -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 +68 -0
- package/out/build/adapters.js.map +1 -0
- package/out/build/align.d.ts +73 -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 +59 -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 +220 -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 +266 -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 +272 -0
- package/out/cz/tools/fetch/cuzk.d.ts.map +1 -0
- package/out/cz/tools/fetch/cuzk.js +446 -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 +66 -56
- 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 +154 -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 +100 -0
- package/out/dk/tools/fetch/inspire.d.ts.map +1 -0
- package/out/dk/tools/fetch/inspire.js +230 -0
- package/out/dk/tools/fetch/inspire.js.map +1 -0
- package/out/ee/adapters/ads/adapter.d.ts +109 -0
- package/out/ee/adapters/ads/adapter.d.ts.map +1 -0
- package/out/ee/adapters/ads/adapter.js +191 -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 +195 -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 +104 -0
- package/out/es/adapters/catastro/adapter.d.ts.map +1 -0
- package/out/es/adapters/catastro/adapter.js +288 -0
- package/out/es/adapters/catastro/adapter.js.map +1 -0
- package/out/es/adapters/gipuzkoa/adapter.d.ts +91 -0
- package/out/es/adapters/gipuzkoa/adapter.d.ts.map +1 -0
- package/out/es/adapters/gipuzkoa/adapter.js +225 -0
- package/out/es/adapters/gipuzkoa/adapter.js.map +1 -0
- package/out/es/adapters/navarra/adapter.d.ts +105 -0
- package/out/es/adapters/navarra/adapter.d.ts.map +1 -0
- package/out/es/adapters/navarra/adapter.js +241 -0
- package/out/es/adapters/navarra/adapter.js.map +1 -0
- package/out/es/cadastre.d.ts +109 -0
- package/out/es/cadastre.d.ts.map +1 -0
- package/out/es/cadastre.js +130 -0
- package/out/es/cadastre.js.map +1 -0
- package/out/es/tools/fetch/bizkaia.d.ts +278 -0
- package/out/es/tools/fetch/bizkaia.d.ts.map +1 -0
- package/out/es/tools/fetch/bizkaia.js +477 -0
- package/out/es/tools/fetch/bizkaia.js.map +1 -0
- package/out/es/tools/fetch/catastro.d.ts +272 -0
- package/out/es/tools/fetch/catastro.d.ts.map +1 -0
- package/out/es/tools/fetch/catastro.js +486 -0
- package/out/es/tools/fetch/catastro.js.map +1 -0
- package/out/es/tools/fetch/gipuzkoa.d.ts +162 -0
- package/out/es/tools/fetch/gipuzkoa.d.ts.map +1 -0
- package/out/es/tools/fetch/gipuzkoa.js +209 -0
- package/out/es/tools/fetch/gipuzkoa.js.map +1 -0
- package/out/es/tools/fetch/navarra.d.ts +189 -0
- package/out/es/tools/fetch/navarra.d.ts.map +1 -0
- package/out/es/tools/fetch/navarra.js +316 -0
- package/out/es/tools/fetch/navarra.js.map +1 -0
- package/out/fi/adapters/ryhti/adapter.d.ts +115 -0
- package/out/fi/adapters/ryhti/adapter.d.ts.map +1 -0
- package/out/fi/adapters/ryhti/adapter.js +244 -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 +327 -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 +475 -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 +276 -0
- package/out/fr/adapters/finess/adapter.d.ts.map +1 -0
- package/out/fr/adapters/finess/adapter.js +519 -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 +172 -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 +88 -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 +130 -0
- package/out/fr/tools/fetch/annuaire-education.d.ts.map +1 -0
- package/out/fr/tools/fetch/annuaire-education.js +196 -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 +27 -18
- 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 +228 -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 +251 -0
- package/out/inspire/address.d.ts.map +1 -0
- package/out/inspire/address.js +384 -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 +55 -0
- package/out/inspire/errors.d.ts.map +1 -0
- package/out/inspire/errors.js +64 -0
- package/out/inspire/errors.js.map +1 -0
- package/out/inspire/stream.d.ts +137 -0
- package/out/inspire/stream.d.ts.map +1 -0
- package/out/inspire/stream.js +125 -0
- package/out/inspire/stream.js.map +1 -0
- package/out/international/recipes/locale.d.ts +38 -84
- package/out/international/recipes/locale.d.ts.map +1 -1
- package/out/international/recipes/locale.js +112 -151
- package/out/international/recipes/locale.js.map +1 -1
- package/out/it/adapters/anac/adapter.d.ts +267 -0
- package/out/it/adapters/anac/adapter.d.ts.map +1 -0
- package/out/it/adapters/anac/adapter.js +429 -0
- package/out/it/adapters/anac/adapter.js.map +1 -0
- package/out/it/tools/fetch/anac.d.ts +174 -0
- package/out/it/tools/fetch/anac.d.ts.map +1 -0
- package/out/it/tools/fetch/anac.js +272 -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 +15 -11
- 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 +30 -25
- 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 +23 -15
- 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 +163 -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 +283 -0
- package/out/lv/adapters/varis/adapter.d.ts.map +1 -0
- package/out/lv/adapters/varis/adapter.js +404 -0
- package/out/lv/adapters/varis/adapter.js.map +1 -0
- package/out/lv/tools/fetch/varis.d.ts +80 -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 +310 -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 +155 -0
- package/out/nl/tools/fetch/kadaster.d.ts.map +1 -0
- package/out/nl/tools/fetch/kadaster.js +179 -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 +251 -0
- package/out/no/tools/fetch/matrikkelen.d.ts.map +1 -0
- package/out/no/tools/fetch/matrikkelen.js +345 -0
- package/out/no/tools/fetch/matrikkelen.js.map +1 -0
- package/out/parquet/duckdb.d.ts +100 -0
- package/out/parquet/duckdb.d.ts.map +1 -0
- package/out/parquet/duckdb.js +92 -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 +251 -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 +165 -0
- package/out/pl/tools/fetch/emuia.d.ts.map +1 -0
- package/out/pl/tools/fetch/emuia.js +260 -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} +91 -79
- 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 +36 -19
- 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 +29 -13
- 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 +65 -53
- 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 +25 -15
- package/out/recipes/po/box/cedex/recipe.js.map +1 -1
- package/out/recipes/po/box/cedex/sources.d.ts +12 -12
- package/out/recipes/po/box/cedex/sources.d.ts.map +1 -1
- package/out/recipes/po/box/cedex/sources.js +1 -1
- 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 +211 -138
- package/out/recipes/scaffold.d.ts.map +1 -1
- package/out/recipes/scaffold.js +72 -63
- 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 +348 -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 +25 -14
- 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 +29 -8
- 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 +21 -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 +49 -92
- package/out/recipes/sub/venue/sources.d.ts.map +1 -1
- package/out/recipes/sub/venue/sources.js +43 -179
- package/out/recipes/sub/venue/sources.js.map +1 -1
- package/out/recipes/sub/venue.d.ts +176 -0
- package/out/recipes/sub/venue.d.ts.map +1 -0
- package/out/recipes/sub/venue.js +562 -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 +55 -85
- 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.d.ts +26 -0
- package/out/recipes.d.ts.map +1 -0
- package/out/{recipes/index.js → recipes.js} +14 -12
- package/out/recipes.js.map +1 -0
- package/out/registers.d.ts +277 -0
- package/out/registers.d.ts.map +1 -0
- package/out/registers.js +273 -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 +120 -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 +44 -49
- 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 +16 -19
- 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 +195 -0
- package/out/sk/tools/fetch/inspire.d.ts.map +1 -0
- package/out/sk/tools/fetch/inspire.js +280 -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 +539 -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 +136 -0
- package/out/surfaces/locale.js.map +1 -0
- package/out/synthesizers/anchor-absorption.d.ts +21 -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 +17 -48
- package/out/synthesizers/boundary-stress.d.ts.map +1 -1
- package/out/synthesizers/boundary-stress.js +27 -121
- package/out/synthesizers/boundary-stress.js.map +1 -1
- package/out/synthesizers/house-venue.d.ts +22 -25
- package/out/synthesizers/house-venue.d.ts.map +1 -1
- package/out/synthesizers/house-venue.js +28 -97
- package/out/synthesizers/house-venue.js.map +1 -1
- package/out/synthesizers/intersection.d.ts +10 -8
- package/out/synthesizers/intersection.d.ts.map +1 -1
- package/out/synthesizers/intersection.js +33 -26
- package/out/synthesizers/intersection.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 +46 -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/street.d.ts +18 -12
- package/out/synthesizers/street.d.ts.map +1 -1
- package/out/synthesizers/street.js +36 -29
- package/out/synthesizers/street.js.map +1 -1
- package/out/synthesizers/utils.d.ts +32 -129
- package/out/synthesizers/utils.d.ts.map +1 -1
- package/out/synthesizers/utils.js +54 -166
- 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 +18 -11
- package/out/tools/audit.d.ts.map +1 -1
- package/out/tools/audit.js +86 -95
- 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 +33 -29
- 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 +84 -0
- package/out/tools/fetch/atom.js.map +1 -0
- package/out/tools/fetch/cordis.d.ts +123 -0
- package/out/tools/fetch/cordis.d.ts.map +1 -0
- package/out/tools/fetch/cordis.js +208 -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 +20 -13
- 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 +24 -24
- 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 +50 -32
- package/out/tools/fetch/geonames/dump.d.ts.map +1 -1
- package/out/tools/fetch/geonames/dump.js +52 -42
- 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 +137 -0
- package/out/tools/fetch/gleif.d.ts.map +1 -0
- package/out/tools/fetch/gleif.js +220 -0
- package/out/tools/fetch/gleif.js.map +1 -0
- package/out/tools/fetch/header.d.ts +41 -0
- package/out/tools/fetch/header.d.ts.map +1 -0
- package/out/tools/fetch/header.js +59 -0
- package/out/tools/fetch/header.js.map +1 -0
- package/out/tools/fetch/inspire-addresses.d.ts +249 -0
- package/out/tools/fetch/inspire-addresses.d.ts.map +1 -0
- package/out/tools/fetch/inspire-addresses.js +276 -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 +19 -98
- 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 +410 -0
- package/out/tools/fetch/wfs-harvest.d.ts.map +1 -0
- package/out/tools/fetch/wfs-harvest.js +522 -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 +140 -0
- package/out/tools/fetch.d.ts.map +1 -0
- package/out/tools/fetch.js +136 -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 +50 -36
- 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 +33 -28
- package/out/tools/golden/promote.js.map +1 -1
- package/out/tools/golden/relabel-street/directory.d.ts +24 -9
- package/out/tools/golden/relabel-street/directory.d.ts.map +1 -1
- package/out/tools/golden/relabel-street/directory.js +41 -30
- package/out/tools/golden/relabel-street/directory.js.map +1 -1
- package/out/tools/golden/relabel-street/row.d.ts +17 -69
- package/out/tools/golden/relabel-street/row.d.ts.map +1 -1
- package/out/tools/golden/relabel-street/row.js +16 -74
- 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 +39 -43
- 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 +77 -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} +76 -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 +37 -28
- package/out/tools/overlay/kryptonite.js.map +1 -0
- package/out/tools/overlay/manifest.d.ts +142 -0
- package/out/tools/overlay/manifest.d.ts.map +1 -0
- package/out/tools/overlay/manifest.js +260 -0
- package/out/tools/overlay/manifest.js.map +1 -0
- package/out/tools/overlay/merge-source.d.ts +73 -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 +54 -0
- package/out/tools/overlay/translit.d.ts.map +1 -0
- package/out/tools/{slice → overlay}/translit.js +59 -48
- package/out/tools/overlay/translit.js.map +1 -0
- package/out/tools/overture-subvenue.d.ts +16 -75
- 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 +77 -126
- package/out/tools/postcode-triples.d.ts.map +1 -1
- package/out/tools/postcode-triples.js +198 -192
- package/out/tools/postcode-triples.js.map +1 -1
- package/out/tools/source-register/build.d.ts +145 -0
- package/out/tools/source-register/build.d.ts.map +1 -0
- package/out/tools/source-register/build.js +515 -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 +55 -82
- package/out/tools/sub/venue/lexicon.d.ts.map +1 -1
- package/out/tools/sub/venue/lexicon.js +43 -87
- 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/tools.d.ts +31 -0
- package/out/tools.d.ts.map +1 -0
- package/out/tools.js +31 -0
- package/out/tools.js.map +1 -0
- 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 +16 -10
- package/out/tw/tools/fetch/gcis.js.map +1 -1
- package/out/types.d.ts +270 -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 +7 -2
- 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 +51 -105
- 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 +36 -26
- package/out/us/adapters/usgov/samhsa-treatment-locator/adapter.js.map +1 -1
- package/out/us/fips-state.d.ts +17 -8
- 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/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 +16 -33
- 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 +29 -24
- 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 +21 -33
- package/out/us/tools/fetch/nppes.js.map +1 -1
- package/out/us/tools/fetch/state/hi-schools.d.ts +8 -5
- package/out/us/tools/fetch/state/hi-schools.d.ts.map +1 -1
- package/out/us/tools/fetch/state/hi-schools.js +15 -13
- 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 +15 -54
- package/out/us/tools/fetch/tiger-full.js.map +1 -1
- package/out/utils/align.d.ts +24 -19
- package/out/utils/align.d.ts.map +1 -1
- package/out/utils/align.js +27 -42
- 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 +28 -44
- package/out/utils/golden.js.map +1 -1
- package/out/utils/license.d.ts +158 -21
- 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 +158 -69
- package/out/utils/split.js.map +1 -1
- package/out/utils/tokenize.d.ts +16 -28
- 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 +76 -55
- 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 +46 -480
- 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/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/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/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
|
@@ -0,0 +1,828 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*
|
|
6
|
+
* `gleif-lei`: the GLEIF Level 1 golden copy, read for the legal and headquarters addresses of the
|
|
7
|
+
* legal entities that hold a Legal Entity Identifier.
|
|
8
|
+
*
|
|
9
|
+
* Input is the publisher's own LEI-CDF 3.1 CSV, one record per LEI, as
|
|
10
|
+
* `https://goldencopy.gleif.org` serves it zipped. `opts.inputPath` is the `.csv.zip` archive, an
|
|
11
|
+
* extracted `.csv`, or the directory `#tools/fetch/gleif` writes, in which case the newest archive
|
|
12
|
+
* by its date-prefixed name is read. The CSV member is streamed out of the archive, so the several
|
|
13
|
+
* gigabytes it decompresses to never sit on disk or in memory.
|
|
14
|
+
*
|
|
15
|
+
* ## License
|
|
16
|
+
*
|
|
17
|
+
* GLEIF's LEI Data Terms of Use, at {@linkcode GLEIF_LICENSE_URL}, read on 2026-10-03, state: "The
|
|
18
|
+
* data available through the Access Service are provided under the CC0 licence, see CC0 1.0
|
|
19
|
+
* Universal (CC0 1.0)." The Access Service is defined there as the facility that lets users "look-up
|
|
20
|
+
* and/or download individual LEIs and/or related LE-RD and/or the entire set or a subset of LEIs",
|
|
21
|
+
* which is the golden copy. GLEIF's open-data page states the same: "The data on GLEIF's website is
|
|
22
|
+
* provided under a Creative Commons (CC0) license." The same terms ask a user not to create the
|
|
23
|
+
* impression that derived data or services are provided or endorsed by GLEIF, which is why
|
|
24
|
+
* {@linkcode GLEIF_ATTRIBUTION} credits the source rather than the corpus.
|
|
25
|
+
*
|
|
26
|
+
* ## Organization addresses only
|
|
27
|
+
*
|
|
28
|
+
* The register carries legal entities, and three of its fields identify an entity that is a natural
|
|
29
|
+
* person trading in their own name. {@linkcode readGLEIFEntity} refuses each:
|
|
30
|
+
*
|
|
31
|
+
* 1. `Entity.EntityCategory` = `SOLE_PROPRIETOR`.
|
|
32
|
+
* 2. `Entity.LegalForm.EntityLegalFormCode` naming an ISO 20275 form that is a sole
|
|
33
|
+
* proprietorship, from {@linkcode GLEIF_SOLE_PROPRIETOR_LEGAL_FORMS}. A registrant can file the
|
|
34
|
+
* form without the category, and the form is the registrar's own statement of what the entity is.
|
|
35
|
+
* 3. `Entity.LegalForm.OtherLegalForm`, the free-text form a registrant writes where no ELF code
|
|
36
|
+
* fits, matching {@linkcode SOLE_PROPRIETOR_FORM_TEXT}: `SOLE TRADER`, `Ditta Individuale`,
|
|
37
|
+
* `Entreprise Individuelle`, `empresario individual`.
|
|
38
|
+
*
|
|
39
|
+
* No check on the legal name is applied. The `Surname, Firstname` test `it-anac` uses matched
|
|
40
|
+
* company names here (`Experity, Inc`, `Octante, Lda`, `Slovalco, a.s.`) on nearly every hit, and the
|
|
41
|
+
* category and form fields above are the registrant's and the LOU's own statement.
|
|
42
|
+
*
|
|
43
|
+
* `MailRouting` is never read into a row. It holds the care-of line, and on Scandinavian records it
|
|
44
|
+
* holds a person's name: `c/o Marius Vinje`. A street line that opens with a care-of marker refuses the
|
|
45
|
+
* address for the same reason.
|
|
46
|
+
*
|
|
47
|
+
* ## The street line
|
|
48
|
+
*
|
|
49
|
+
* `FirstAddressLine` holds the street and the number together, and `AddressNumber` repeats the
|
|
50
|
+
* number on a minority of records. The split follows the country's own street order.
|
|
51
|
+
* {@linkcode houseNumberLeadsStreet} reads that order from the layout `formatAddressRow` renders with.
|
|
52
|
+
* A number-first country then takes `splitStreetLine` and a number-last country `splitTrailingStreetLine`.
|
|
53
|
+
* Where the publisher's `AddressNumber` is present, the split must agree with it.
|
|
54
|
+
*
|
|
55
|
+
* Three normalizations run first. A copy of the publisher's own `City` value at the start or the end
|
|
56
|
+
* of the line is removed, because several LOUs write `WARSZAWA PUŁAWSKA 182` with `City` `Warszawa`.
|
|
57
|
+
* A civic-number marker is removed, so Romania's `Piata Presei Libere, nr. 3-5` splits to the street
|
|
58
|
+
* `Piata Presei Libere` rather than `Piata Presei Libere, nr.`. A period closing a trailing number,
|
|
59
|
+
* as Hungary writes `Bagoly utca 23.`, is removed. A whole line of the form `PO BOX 309` then
|
|
60
|
+
* becomes `po_box` rather than a street.
|
|
61
|
+
*
|
|
62
|
+
* **A line holding a digit the split could not place refuses the address**, and so does a line with
|
|
63
|
+
* no digit at all: in this register a digitless first line is as often a building (`UGLAND HOUSE`,
|
|
64
|
+
* `KYDD BUILDING`) as a street, and no field separates the two. An English ordinal inside a street name
|
|
65
|
+
* (`5TH AVENUE`) is a name rather than a number.
|
|
66
|
+
*
|
|
67
|
+
* The value the split leaves as `street` must then read as a street. It is refused where it still holds
|
|
68
|
+
* a comma (`CAVES CORPORATE CENTRE, BUILDING 2` under the Bahamas' number-last layout), where it holds
|
|
69
|
+
* a building or in-building word (`1302 DOMINION CENTRE`, `903 PLATINUM TOWER`, `APTO 2`), and where it
|
|
70
|
+
* is a generic word alone (`910 Street`). Each of those numbers a room, an office or a building, and
|
|
71
|
+
* labeling it `house_number` beside a building name labeled `street` would teach the wrong boundary.
|
|
72
|
+
*
|
|
73
|
+
* `AdditionalAddressLine.1`–`3` mix building names, districts, floors and second street lines, and
|
|
74
|
+
* no field states which, so they reach no row. The golden copy's "AddressNumberWithinBuilding" field becomes `unit` when it
|
|
75
|
+
* holds a letter, as `Suite 4` does. A bare number there would render as a second house number.
|
|
76
|
+
*
|
|
77
|
+
* ## Region
|
|
78
|
+
*
|
|
79
|
+
* `Region` is an ISO 3166-2 code such as `SK-KI`, which is not how an address writes the region.
|
|
80
|
+
* It reaches a row only where the code's suffix is the written form, which
|
|
81
|
+
* `matchSubdivisionIn` answers for the United States, Canada and Australia. A code whose
|
|
82
|
+
* country prefix differs from `Country` refuses the address as contradicting it.
|
|
83
|
+
*
|
|
84
|
+
* ## One row per address
|
|
85
|
+
*
|
|
86
|
+
* Registered agents give one address to thousands of entities. The adapter emits each rendered
|
|
87
|
+
* address once per country: the key is the address rendered without its venue, and the first
|
|
88
|
+
* entity read at that address keeps the venue. The headquarters address is read only where it
|
|
89
|
+
* differs from the legal address in some field.
|
|
90
|
+
*
|
|
91
|
+
* Only a country for which `layoutForCountry` returns a layout is emitted.
|
|
92
|
+
*
|
|
93
|
+
* The adapter honors `opts.limit`, `opts.signal` and `opts.country`, and counts every refusal in
|
|
94
|
+
* `opts.dropped`.
|
|
95
|
+
*/
|
|
96
|
+
|
|
97
|
+
import { formatAddressRow, scriptOfComponents } from "@mailwoman/codex/address/format"
|
|
98
|
+
import { type AddressScript, layoutForCountry } from "@mailwoman/codex/address/layouts"
|
|
99
|
+
import { isAlpha2CodeShape, matchSubdivisionIn } from "@mailwoman/codex/country"
|
|
100
|
+
import { readZipEntry } from "@mailwoman/core/fs/zip"
|
|
101
|
+
import { PathBuilder, type PathBuilderLike } from "path-ts"
|
|
102
|
+
import { CSVSpliterator } from "spliterator"
|
|
103
|
+
import { Globerator } from "spliterator/node/fs"
|
|
104
|
+
|
|
105
|
+
import { UnsupportedCountryError } from "#adapters/errors"
|
|
106
|
+
import { stableSourceID } from "#adapters/source-id"
|
|
107
|
+
import { splitStreetLine, splitTrailingStreetLine } from "#adapters/street-line"
|
|
108
|
+
import { FingerprintSet } from "#fingerprints"
|
|
109
|
+
import { isPlaceholderValue } from "#it/adapters/anac/adapter"
|
|
110
|
+
import { SourceRegister } from "#registers"
|
|
111
|
+
import {
|
|
112
|
+
AddressRole,
|
|
113
|
+
type AdapterOptions,
|
|
114
|
+
type CanonicalRow,
|
|
115
|
+
type CorpusAdapter,
|
|
116
|
+
countDropped,
|
|
117
|
+
SurfaceOrigin,
|
|
118
|
+
} from "#types"
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Registry id for this adapter, stamped into every row it emits.
|
|
122
|
+
*/
|
|
123
|
+
export const GLEIF_ADAPTER_ID = "gleif-lei"
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Countries whose sampled rows show a labeling defect the street split cannot detect,
|
|
127
|
+
* so none of their rows is emitted until the split handles them.
|
|
128
|
+
*
|
|
129
|
+
* - `AE`: the first address line is often an office or unit number before a building name,
|
|
130
|
+
* as in `601 سويس تاور` and `501 LE SOLARIUM`, which the split reads as a house number and a street.
|
|
131
|
+
* - `HK`: a floor such as `6F` comes out as the house number, as in `6F MANULIFE PLACE`.
|
|
132
|
+
* - `BS`: codex records the Bahamas as number-last while its published lines are number-first
|
|
133
|
+
* (`1 Montague Place`), and a `# 207` suite marker stays inside the street.
|
|
134
|
+
*/
|
|
135
|
+
export const GLEIF_UNREVIEWED_COUNTRIES: ReadonlySet<string> = new Set(["AE", "HK", "BS"])
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* The license GLEIF's LEI Data Terms of Use state for the golden copy.
|
|
139
|
+
*/
|
|
140
|
+
export const GLEIF_LICENSE = "CC0-1.0"
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* The page that states {@linkcode GLEIF_LICENSE}.
|
|
144
|
+
*/
|
|
145
|
+
export const GLEIF_LICENSE_URL = "https://www.gleif.org/en/meta/lei-data-terms-of-use"
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* The credit a model card carries.
|
|
149
|
+
*
|
|
150
|
+
* CC0 requires none.
|
|
151
|
+
* The terms ask that no derived product imply GLEIF's endorsement, so the credit
|
|
152
|
+
* states the source and claims no relationship with GLEIF.
|
|
153
|
+
*/
|
|
154
|
+
export const GLEIF_ATTRIBUTION = "Global Legal Entity Identifier Foundation (GLEIF), LEI golden copy (CC0 1.0)"
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* The publisher's file name for a Level 1 golden copy in CSV, date- and time-prefixed.
|
|
158
|
+
*/
|
|
159
|
+
export const GLEIF_ARCHIVE_PATTERN = /^\d{8}-\d{4}-gleif-goldencopy-lei2-golden-copy\.csv\.zip$/u
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* ISO 20275 Entity Legal Form codes whose form is a natural person trading in their own name.
|
|
163
|
+
*
|
|
164
|
+
* Each code is one the golden copy files under the `SOLE_PROPRIETOR` category, and each is kept
|
|
165
|
+
* because its name in GLEIF's ELF code list v1.6 (2026-02-19) states that form: `4QIE` is India's
|
|
166
|
+
* `Sole Proprietorship`, `ZVVM` Poland's `osoby fizyczne prowadzące działalność gospodarczą`,
|
|
167
|
+
* `OL20` Germany's `Einzelunternehmen, eingetragener Kaufmann`, `RV48` China's `个体工商户`.
|
|
168
|
+
* Two codes filed under the category are left out because the list describes each as a company:
|
|
169
|
+
* `HA2W` (Oman, a one-person company) and `AL8W` (Brazil, `Sociedade Limitada Unipessoal`).
|
|
170
|
+
*/
|
|
171
|
+
export const GLEIF_SOLE_PROPRIETOR_LEGAL_FORMS: ReadonlySet<string> = new Set([
|
|
172
|
+
"1CML",
|
|
173
|
+
"1SL4",
|
|
174
|
+
"2IGL",
|
|
175
|
+
"3N94",
|
|
176
|
+
"3UPJ",
|
|
177
|
+
"456Q",
|
|
178
|
+
"4QIE",
|
|
179
|
+
"4QXM",
|
|
180
|
+
"946C",
|
|
181
|
+
"95G8",
|
|
182
|
+
"9D9U",
|
|
183
|
+
"AZA0",
|
|
184
|
+
"BJ8Q",
|
|
185
|
+
"C4PZ",
|
|
186
|
+
"ECWU",
|
|
187
|
+
"EV7F",
|
|
188
|
+
"EXD7",
|
|
189
|
+
"FJQ8",
|
|
190
|
+
"FUKI",
|
|
191
|
+
"K09E",
|
|
192
|
+
"LHBB",
|
|
193
|
+
"MV4S",
|
|
194
|
+
"MXLT",
|
|
195
|
+
"NFDF",
|
|
196
|
+
"OL20",
|
|
197
|
+
"P9CF",
|
|
198
|
+
"QW8S",
|
|
199
|
+
"RV48",
|
|
200
|
+
"UR1O",
|
|
201
|
+
"VALH",
|
|
202
|
+
"W8V9",
|
|
203
|
+
"ZVVM",
|
|
204
|
+
"ZY9X",
|
|
205
|
+
])
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* The free-text legal forms that state a natural person trading in their own name.
|
|
209
|
+
*/
|
|
210
|
+
const SOLE_PROPRIETOR_FORM_TEXT =
|
|
211
|
+
/\b(?:sole\s+(?:trader|proprietor(?:ship)?)|individuals?\s+acting\s+in\s+a\s+business\s+capacity|ditta\s+individuale|impresa\s+individuale|entreprise\s+individuelle|empresario\s+individual|einzel(?:unternehmen|unternehmer(?:in)?|kauf(?:mann|frau))|enkeltmandsvirksomhed|enskild\s+(?:firma|näringsidkare)|enkeltpersonforetak|eenmanszaak|egyéni\s+vállalkozó)\b/iu
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Why an entity or one of its addresses did not become a row.
|
|
215
|
+
*/
|
|
216
|
+
export const GLEIFRefusal = {
|
|
217
|
+
/**
|
|
218
|
+
* The country is in {@link GLEIF_UNREVIEWED_COUNTRIES}.
|
|
219
|
+
*/
|
|
220
|
+
CountryUnreviewed: "country-unreviewed",
|
|
221
|
+
/**
|
|
222
|
+
* `Entity.EntityCategory` is `SOLE_PROPRIETOR`.
|
|
223
|
+
*/
|
|
224
|
+
SoleProprietorCategory: "sole-proprietor-category",
|
|
225
|
+
/**
|
|
226
|
+
* The ELF code is a sole-proprietorship form.
|
|
227
|
+
*/
|
|
228
|
+
SoleProprietorLegalForm: "sole-proprietor-legal-form",
|
|
229
|
+
/**
|
|
230
|
+
* The free-text legal form states a sole proprietorship.
|
|
231
|
+
*/
|
|
232
|
+
SoleProprietorFormText: "sole-proprietor-form-text",
|
|
233
|
+
/**
|
|
234
|
+
* The address states no country.
|
|
235
|
+
*/
|
|
236
|
+
CountryAbsent: "country-absent",
|
|
237
|
+
/**
|
|
238
|
+
* The country is not an ISO 3166-1 alpha-2 code.
|
|
239
|
+
*/
|
|
240
|
+
CountryNotAlpha2: "country-not-alpha-2",
|
|
241
|
+
/**
|
|
242
|
+
* The ISO 3166-2 region code's country prefix differs from `Country`.
|
|
243
|
+
*/
|
|
244
|
+
RegionContradictsCountry: "region-contradicts-country",
|
|
245
|
+
/**
|
|
246
|
+
* Codex holds no layout for the country, so no address line can be rendered.
|
|
247
|
+
*/
|
|
248
|
+
CountryWithoutLayout: "country-without-layout",
|
|
249
|
+
/**
|
|
250
|
+
* The address states no city.
|
|
251
|
+
*/
|
|
252
|
+
LocalityAbsent: "locality-absent",
|
|
253
|
+
/**
|
|
254
|
+
* The address states no first line.
|
|
255
|
+
*/
|
|
256
|
+
StreetLineAbsent: "street-line-absent",
|
|
257
|
+
/**
|
|
258
|
+
* The first line opens with a care-of marker, so it identifies the recipient rather than the place.
|
|
259
|
+
*/
|
|
260
|
+
CareOfLine: "care-of-line",
|
|
261
|
+
/**
|
|
262
|
+
* The first line holds no digit, so it cannot be told from a building name.
|
|
263
|
+
*/
|
|
264
|
+
StreetLineWithoutNumber: "street-line-without-number",
|
|
265
|
+
/**
|
|
266
|
+
* The first line holds a digit the split could not place as a house number.
|
|
267
|
+
*/
|
|
268
|
+
StreetNumberUnplaced: "street-number-unplaced",
|
|
269
|
+
/**
|
|
270
|
+
* The street the split left still holds a comma, so the line joins several parts
|
|
271
|
+
* (a building, a district, a floor) and the split cannot say which part is the street.
|
|
272
|
+
*/
|
|
273
|
+
StreetLineSegmented: "street-line-segmented",
|
|
274
|
+
/**
|
|
275
|
+
* The street the split left is a building or a place inside one
|
|
276
|
+
* (`PLATINUM TOWER`, `NINTH FLOOR`, `APTO`), so the number beside it numbers a room,
|
|
277
|
+
* an office or a building rather than a premise on a street.
|
|
278
|
+
*/
|
|
279
|
+
StreetHoldsPremiseWord: "street-holds-premise-word",
|
|
280
|
+
/**
|
|
281
|
+
* The street the split left is a generic word alone, as Qatar's `910 Street` leaves `Street`.
|
|
282
|
+
*/
|
|
283
|
+
StreetNameGenericOnly: "street-name-generic-only",
|
|
284
|
+
/**
|
|
285
|
+
* The split's house number disagrees with the publisher's own `AddressNumber`.
|
|
286
|
+
*/
|
|
287
|
+
StreetNumberDisagrees: "street-number-disagrees",
|
|
288
|
+
/**
|
|
289
|
+
* The components do not render under the country's layout.
|
|
290
|
+
*/
|
|
291
|
+
Unrenderable: "unrenderable",
|
|
292
|
+
/**
|
|
293
|
+
* The rendered line carries fewer than two address components besides the venue.
|
|
294
|
+
*/
|
|
295
|
+
ComponentsTooFew: "components-too-few",
|
|
296
|
+
} as const
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* One of the {@link GLEIFRefusal} reasons.
|
|
300
|
+
*/
|
|
301
|
+
export type GLEIFRefusal = (typeof GLEIFRefusal)[keyof typeof GLEIFRefusal]
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* The two address blocks a record carries for its entity.
|
|
305
|
+
*/
|
|
306
|
+
export const GLEIFAddressBlock = {
|
|
307
|
+
Legal: "LegalAddress",
|
|
308
|
+
Headquarters: "HeadquartersAddress",
|
|
309
|
+
} as const
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* One of the {@link GLEIFAddressBlock} values.
|
|
313
|
+
*/
|
|
314
|
+
export type GLEIFAddressBlock = (typeof GLEIFAddressBlock)[keyof typeof GLEIFAddressBlock]
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* One CSV record, keyed by the publisher's own column names.
|
|
318
|
+
*/
|
|
319
|
+
export type GLEIFRecord = Readonly<Record<string, string | undefined>>
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* What one address block yielded: a row, or the reason it yielded none.
|
|
323
|
+
*/
|
|
324
|
+
export type GLEIFAddressReading = { readonly admitted: CanonicalRow } | { readonly refused: GLEIFRefusal }
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* The address fields a block carries, in the order the CDF lists them.
|
|
328
|
+
*/
|
|
329
|
+
const ADDRESS_FIELDS = [
|
|
330
|
+
"FirstAddressLine",
|
|
331
|
+
"AddressNumber",
|
|
332
|
+
"AddressNumberWithinBuilding",
|
|
333
|
+
"MailRouting",
|
|
334
|
+
"AdditionalAddressLine.1",
|
|
335
|
+
"AdditionalAddressLine.2",
|
|
336
|
+
"AdditionalAddressLine.3",
|
|
337
|
+
"City",
|
|
338
|
+
"Region",
|
|
339
|
+
"Country",
|
|
340
|
+
"PostalCode",
|
|
341
|
+
] as const
|
|
342
|
+
|
|
343
|
+
/**
|
|
344
|
+
* The columns every read depends on, checked against the first record so a renamed
|
|
345
|
+
* column fails the run rather than refusing every record.
|
|
346
|
+
*/
|
|
347
|
+
const REQUIRED_COLUMNS = [
|
|
348
|
+
"LEI",
|
|
349
|
+
"Entity.LegalName",
|
|
350
|
+
"Entity.EntityCategory",
|
|
351
|
+
"Entity.LegalForm.EntityLegalFormCode",
|
|
352
|
+
"Entity.LegalForm.OtherLegalForm",
|
|
353
|
+
...ADDRESS_FIELDS.map((field) => `Entity.${GLEIFAddressBlock.Legal}.${field}`),
|
|
354
|
+
...ADDRESS_FIELDS.map((field) => `Entity.${GLEIFAddressBlock.Headquarters}.${field}`),
|
|
355
|
+
]
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* A care-of or attention marker opening a line.
|
|
359
|
+
*/
|
|
360
|
+
const CARE_OF = /^(?:c\s*\/\s*o\b|c\/-|care\s+of\b|attn\b|attention\b)/iu
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* A whole line that is a post-office box, as `PO BOX 309`, `P.O. Box 10240` or `P O BOX 472`.
|
|
364
|
+
*/
|
|
365
|
+
const PO_BOX_LINE = /^(?:p\.?\s?o\.?\s?box|post\s+office\s+box)\s*(?:no\.?\s*)?\d+[a-z]?$/iu
|
|
366
|
+
|
|
367
|
+
/**
|
|
368
|
+
* An English ordinal written in digits, which is part of a street's name rather than a premise number.
|
|
369
|
+
*/
|
|
370
|
+
const ORDINAL_TOKEN = /\b\d+(?:st|nd|rd|th)\b/giu
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* A leading house number closed by a comma, as in `49, AVENUE JOHN F. KENNEDY`.
|
|
374
|
+
*/
|
|
375
|
+
const LEADING_NUMBER_COMMA = /^(\d+(?:-\d+)?[A-Za-z]?)\s*,\s*(?=\S)/u
|
|
376
|
+
|
|
377
|
+
/**
|
|
378
|
+
* A civic-number marker before the number, as Romania's `Piata Presei Libere, nr. 3-5`
|
|
379
|
+
* and `Str Pacurari nr.128` write it, with the comma or space that precedes it.
|
|
380
|
+
*
|
|
381
|
+
* The marker must start its own token and be followed by a digit, so a street
|
|
382
|
+
* whose name ends in `NO` or `NR` keeps it.
|
|
383
|
+
*/
|
|
384
|
+
const CIVIC_MARKER = /[\s,]*(?<=^|[\s,])(?:nr|no|n°|nº)\.?\s*(?=\d)/giu
|
|
385
|
+
|
|
386
|
+
/**
|
|
387
|
+
* A word for a building or a place inside one, written in English or in the Spanish
|
|
388
|
+
* and Italian forms the offshore registers use.
|
|
389
|
+
*
|
|
390
|
+
* A street holding one is refused rather than labeled: `1302 DOMINION CENTRE`, `903 PLATINUM TOWER`,
|
|
391
|
+
* `CAVES CORPORATE CENTRE, BUILDING 2` and `APTO 2` each number a room, an office or a building.
|
|
392
|
+
*/
|
|
393
|
+
const PREMISE_WORD =
|
|
394
|
+
/\b(?:building|bldg|tower|centre|center|plaza|house|complex|chambers|palazzo|edificio|torre|floor|level|suite|room|office|unit|apto|apt|piso|block|lot|plot|box|km)\b/iu
|
|
395
|
+
|
|
396
|
+
/**
|
|
397
|
+
* A house number of zeros alone.
|
|
398
|
+
*/
|
|
399
|
+
const ZERO_NUMBER = /^0+$/u
|
|
400
|
+
|
|
401
|
+
/**
|
|
402
|
+
* A street generic standing alone, as a number-first split of `910 Street` leaves it.
|
|
403
|
+
*/
|
|
404
|
+
const GENERIC_ONLY = /^(?:street|road|avenue|st|rd|ave)\.?$/iu
|
|
405
|
+
|
|
406
|
+
/**
|
|
407
|
+
* A period closing a trailing house number, as Hungary writes `Bagoly utca 23.`.
|
|
408
|
+
*/
|
|
409
|
+
const TRAILING_NUMBER_PERIOD = /(\d[\dA-Za-z/-]*)\.$/u
|
|
410
|
+
|
|
411
|
+
/**
|
|
412
|
+
* A published value with whitespace collapsed, or an empty string for an absent or placeholder value.
|
|
413
|
+
*/
|
|
414
|
+
function fieldValue(value: string | undefined): string {
|
|
415
|
+
const trimmed = (value ?? "").replaceAll(/\s+/gu, " ").trim()
|
|
416
|
+
|
|
417
|
+
return isPlaceholderValue(trimmed) ? "" : trimmed
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
function addressField(record: GLEIFRecord, block: GLEIFAddressBlock, field: (typeof ADDRESS_FIELDS)[number]): string {
|
|
421
|
+
return fieldValue(record[`Entity.${block}.${field}`])
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
/**
|
|
425
|
+
* Whether the entity is a natural person trading in their own name, or otherwise refused whole.
|
|
426
|
+
*
|
|
427
|
+
* @returns The refusal, or `null` for an entity whose addresses may be read.
|
|
428
|
+
*/
|
|
429
|
+
export function readGLEIFEntity(record: GLEIFRecord): GLEIFRefusal | null {
|
|
430
|
+
if (fieldValue(record["Entity.EntityCategory"]).toUpperCase() === "SOLE_PROPRIETOR") {
|
|
431
|
+
return GLEIFRefusal.SoleProprietorCategory
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
if (GLEIF_SOLE_PROPRIETOR_LEGAL_FORMS.has(fieldValue(record["Entity.LegalForm.EntityLegalFormCode"]))) {
|
|
435
|
+
return GLEIFRefusal.SoleProprietorLegalForm
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
if (SOLE_PROPRIETOR_FORM_TEXT.test(fieldValue(record["Entity.LegalForm.OtherLegalForm"]))) {
|
|
439
|
+
return GLEIFRefusal.SoleProprietorFormText
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
return null
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
/**
|
|
446
|
+
* Whether the headquarters block states the same address as the legal block, field for field.
|
|
447
|
+
*/
|
|
448
|
+
export function headquartersRepeatsLegal(record: GLEIFRecord): boolean {
|
|
449
|
+
return ADDRESS_FIELDS.every(
|
|
450
|
+
(field) =>
|
|
451
|
+
addressField(record, GLEIFAddressBlock.Legal, field) ===
|
|
452
|
+
addressField(record, GLEIFAddressBlock.Headquarters, field)
|
|
453
|
+
)
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
const numberOrderCache = new Map<string, boolean | null>()
|
|
457
|
+
|
|
458
|
+
/**
|
|
459
|
+
* Whether the country's layout, in `script`, writes the house number before the street name.
|
|
460
|
+
*
|
|
461
|
+
* Read off the layout `formatAddressRow` renders with, so the split and the render cannot disagree.
|
|
462
|
+
*
|
|
463
|
+
* @returns `null` where the layout prints no street line.
|
|
464
|
+
*/
|
|
465
|
+
export function houseNumberLeadsStreet(country: string, script?: AddressScript): boolean | null {
|
|
466
|
+
const key = `${country}:${script ?? ""}`
|
|
467
|
+
const cached = numberOrderCache.get(key)
|
|
468
|
+
|
|
469
|
+
if (cached !== undefined) return cached
|
|
470
|
+
|
|
471
|
+
const probe = formatAddressRow({ house_number: "9", street: "Q" }, country, { singleLine: true, script })
|
|
472
|
+
|
|
473
|
+
const leads =
|
|
474
|
+
probe?.components.house_number && probe.components.street ? probe.raw.indexOf("9") < probe.raw.indexOf("Q") : null
|
|
475
|
+
|
|
476
|
+
numberOrderCache.set(key, leads)
|
|
477
|
+
|
|
478
|
+
return leads
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
/**
|
|
482
|
+
* The first line with a leading or trailing copy of the publisher's own city removed,
|
|
483
|
+
* a civic-number marker removed, and a period closing a trailing number removed.
|
|
484
|
+
*
|
|
485
|
+
* The city copy is removed only where it equals the `City` field, folded for case,
|
|
486
|
+
* so the publisher's record authorizes the removal rather than a place-name list.
|
|
487
|
+
*/
|
|
488
|
+
export function normalizeGLEIFStreetLine(line: string, city: string): string {
|
|
489
|
+
let work = line.replaceAll(/\s+/gu, " ").trim()
|
|
490
|
+
const foldedCity = city.replaceAll(/\s+/gu, " ").trim().toLocaleUpperCase()
|
|
491
|
+
const folded = work.toLocaleUpperCase()
|
|
492
|
+
|
|
493
|
+
if (foldedCity && folded !== foldedCity && folded.startsWith(`${foldedCity} `)) {
|
|
494
|
+
work = work.slice(foldedCity.length).replace(/^[\s,.-]+/u, "")
|
|
495
|
+
} else if (foldedCity && folded !== foldedCity && folded.endsWith(` ${foldedCity}`)) {
|
|
496
|
+
work = work.slice(0, work.length - foldedCity.length).replace(/[\s,.-]+$/u, "")
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
return work
|
|
500
|
+
.replace(/[\s,]+$/u, "")
|
|
501
|
+
.replaceAll(CIVIC_MARKER, " ")
|
|
502
|
+
.replace(TRAILING_NUMBER_PERIOD, "$1")
|
|
503
|
+
.replaceAll(/\s+/gu, " ")
|
|
504
|
+
.trim()
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
/**
|
|
508
|
+
* Read one address block into a row, or report why it yielded none.
|
|
509
|
+
*
|
|
510
|
+
* Exported because the refusal reasons are the measurement the adapter is checked by.
|
|
511
|
+
* The entity-level refusals of {@linkcode readGLEIFEntity} are the caller's to apply first.
|
|
512
|
+
*/
|
|
513
|
+
export function readGLEIFAddress(record: GLEIFRecord, block: GLEIFAddressBlock): GLEIFAddressReading {
|
|
514
|
+
// Read without the placeholder filter, because `NA` is Namibia's code rather than an absent value.
|
|
515
|
+
const country = (record[`Entity.${block}.Country`] ?? "").trim().toUpperCase()
|
|
516
|
+
|
|
517
|
+
if (!country) return { refused: GLEIFRefusal.CountryAbsent }
|
|
518
|
+
|
|
519
|
+
if (!isAlpha2CodeShape(country)) return { refused: GLEIFRefusal.CountryNotAlpha2 }
|
|
520
|
+
|
|
521
|
+
const regionCode = addressField(record, block, "Region").toUpperCase()
|
|
522
|
+
|
|
523
|
+
// ISO 3166-2:FR also codes the overseas collectivities by their own alpha-2,
|
|
524
|
+
// as `FR-PF` for French Polynesia, so that code agrees with `Country` `PF`.
|
|
525
|
+
if (regionCode && !regionCode.startsWith(`${country}-`) && regionCode !== `FR-${country}`) {
|
|
526
|
+
return { refused: GLEIFRefusal.RegionContradictsCountry }
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
if (!layoutForCountry(country)) return { refused: GLEIFRefusal.CountryWithoutLayout }
|
|
530
|
+
|
|
531
|
+
if (GLEIF_UNREVIEWED_COUNTRIES.has(country)) return { refused: GLEIFRefusal.CountryUnreviewed }
|
|
532
|
+
|
|
533
|
+
const city = addressField(record, block, "City")
|
|
534
|
+
|
|
535
|
+
if (!city) return { refused: GLEIFRefusal.LocalityAbsent }
|
|
536
|
+
|
|
537
|
+
const firstLine = addressField(record, block, "FirstAddressLine")
|
|
538
|
+
|
|
539
|
+
if (!firstLine) return { refused: GLEIFRefusal.StreetLineAbsent }
|
|
540
|
+
|
|
541
|
+
if (CARE_OF.test(firstLine)) return { refused: GLEIFRefusal.CareOfLine }
|
|
542
|
+
|
|
543
|
+
const line = normalizeGLEIFStreetLine(firstLine, city)
|
|
544
|
+
const components: CanonicalRow["components"] = {}
|
|
545
|
+
const name = fieldValue(record["Entity.LegalName"])
|
|
546
|
+
|
|
547
|
+
if (name && /\p{L}/u.test(name)) {
|
|
548
|
+
components.venue = name
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
const script = scriptOfComponents({ street: line, locality: city })
|
|
552
|
+
|
|
553
|
+
if (PO_BOX_LINE.test(line)) {
|
|
554
|
+
components.po_box = line
|
|
555
|
+
} else {
|
|
556
|
+
const placed = placeStreetNumber(line, addressField(record, block, "AddressNumber"), country, script)
|
|
557
|
+
|
|
558
|
+
if ("refused" in placed) return placed
|
|
559
|
+
|
|
560
|
+
if (placed.house_number) {
|
|
561
|
+
components.house_number = placed.house_number
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
components.street = placed.street
|
|
565
|
+
|
|
566
|
+
const unit = addressField(record, block, "AddressNumberWithinBuilding")
|
|
567
|
+
|
|
568
|
+
if (unit && /\p{L}/u.test(unit) && !unit.includes(",") && !line.includes(unit)) {
|
|
569
|
+
components.unit = unit
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
const postcode = addressField(record, block, "PostalCode")
|
|
574
|
+
|
|
575
|
+
if (postcode) {
|
|
576
|
+
components.postcode = postcode
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
components.locality = city
|
|
580
|
+
|
|
581
|
+
if (regionCode) {
|
|
582
|
+
const suffix = regionCode.slice(country.length + 1)
|
|
583
|
+
|
|
584
|
+
if (matchSubdivisionIn(country, suffix)) {
|
|
585
|
+
components.region = suffix
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
const rendered = formatAddressRow(components, country, { singleLine: true, script })
|
|
590
|
+
|
|
591
|
+
if (!rendered) return { refused: GLEIFRefusal.Unrenderable }
|
|
592
|
+
|
|
593
|
+
const { raw, components: aligned } = rendered
|
|
594
|
+
|
|
595
|
+
if (Object.keys(aligned).filter((tag) => tag !== "venue").length < 2) {
|
|
596
|
+
return { refused: GLEIFRefusal.ComponentsTooFew }
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
return {
|
|
600
|
+
admitted: {
|
|
601
|
+
raw,
|
|
602
|
+
components: aligned,
|
|
603
|
+
country,
|
|
604
|
+
source: GLEIF_ADAPTER_ID,
|
|
605
|
+
source_id: stableSourceID(GLEIF_ADAPTER_ID, { country, ...aligned }),
|
|
606
|
+
corpus_version: "",
|
|
607
|
+
license: GLEIF_LICENSE,
|
|
608
|
+
addressRole: block === GLEIFAddressBlock.Legal ? AddressRole.RegisteredOffice : AddressRole.Facility,
|
|
609
|
+
},
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
/**
|
|
614
|
+
* Split a street line into its street and house number by the country's order,
|
|
615
|
+
* checking the split against the publisher's `AddressNumber` where it states one.
|
|
616
|
+
*/
|
|
617
|
+
function placeStreetNumber(
|
|
618
|
+
line: string,
|
|
619
|
+
addressNumber: string,
|
|
620
|
+
country: string,
|
|
621
|
+
script: AddressScript | undefined
|
|
622
|
+
): { street: string; house_number?: string } | { refused: GLEIFRefusal } {
|
|
623
|
+
const unplacedDigit = (street: string): boolean => /\d/u.test(street.replaceAll(ORDINAL_TOKEN, ""))
|
|
624
|
+
|
|
625
|
+
// A number of zeros is a registrant's placeholder for none, as
|
|
626
|
+
// `ELIZABETH AVENUE AND SHIRLEY STREET` with `AddressNumber` `0` shows.
|
|
627
|
+
if (ZERO_NUMBER.test(addressNumber)) {
|
|
628
|
+
addressNumber = ""
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
if (!/\d/u.test(line)) {
|
|
632
|
+
if (!addressNumber || !/\d/u.test(addressNumber)) return { refused: GLEIFRefusal.StreetLineWithoutNumber }
|
|
633
|
+
|
|
634
|
+
// A digitless line with the number in its own column is the number's street.
|
|
635
|
+
const refusal = streetRefusal(line)
|
|
636
|
+
|
|
637
|
+
return refusal ? { refused: refusal } : { street: line, house_number: addressNumber }
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
const leads = houseNumberLeadsStreet(country, script)
|
|
641
|
+
|
|
642
|
+
if (leads === null) return { refused: GLEIFRefusal.Unrenderable }
|
|
643
|
+
|
|
644
|
+
// A number-first line may close the number with a comma, as Luxembourg's
|
|
645
|
+
// `49, AVENUE JOHN F. KENNEDY` does.
|
|
646
|
+
// The layout renders its own separator, so the comma is not carried into a component.
|
|
647
|
+
const split = leads ? splitStreetLine(line.replace(LEADING_NUMBER_COMMA, "$1 ")) : splitTrailingStreetLine(line)
|
|
648
|
+
|
|
649
|
+
if (!split?.house_number || ZERO_NUMBER.test(split.house_number) || unplacedDigit(split.street)) {
|
|
650
|
+
return { refused: GLEIFRefusal.StreetNumberUnplaced }
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
const refusal = streetRefusal(split.street)
|
|
654
|
+
|
|
655
|
+
if (refusal) return { refused: refusal }
|
|
656
|
+
|
|
657
|
+
if (addressNumber && !numberAgrees(split.house_number, addressNumber)) {
|
|
658
|
+
return { refused: GLEIFRefusal.StreetNumberDisagrees }
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
return { street: split.street, house_number: split.house_number }
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
/**
|
|
665
|
+
* Why a value about to be labeled `street` is not a street name, or `null` where it may be one.
|
|
666
|
+
*/
|
|
667
|
+
function streetRefusal(street: string): GLEIFRefusal | null {
|
|
668
|
+
if (street.includes(",")) return GLEIFRefusal.StreetLineSegmented
|
|
669
|
+
|
|
670
|
+
if (PREMISE_WORD.test(street)) return GLEIFRefusal.StreetHoldsPremiseWord
|
|
671
|
+
|
|
672
|
+
if (GENERIC_ONLY.test(street)) return GLEIFRefusal.StreetNameGenericOnly
|
|
673
|
+
|
|
674
|
+
return null
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
/**
|
|
678
|
+
* Whether a split's house number is the publisher's `AddressNumber`, or that number
|
|
679
|
+
* with a subdivision joined to it, as `1A/3` is to `1A`.
|
|
680
|
+
*/
|
|
681
|
+
function numberAgrees(split: string, published: string): boolean {
|
|
682
|
+
const a = split.toUpperCase()
|
|
683
|
+
const b = published.replaceAll(/\s+/gu, "").toUpperCase()
|
|
684
|
+
|
|
685
|
+
return a === b || a.startsWith(`${b}/`) || a.startsWith(`${b}-`)
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
/**
|
|
689
|
+
* The key one rendered address is emitted under: the country and the address rendered without its venue.
|
|
690
|
+
*/
|
|
691
|
+
function addressKey(row: CanonicalRow): string {
|
|
692
|
+
const { venue: _venue, ...address } = row.components
|
|
693
|
+
const rendered = formatAddressRow(address, row.country, { singleLine: true })
|
|
694
|
+
|
|
695
|
+
return `${row.country}\u001E${(rendered?.raw ?? row.raw).toLowerCase()}`
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
/**
|
|
699
|
+
* The slot count of the fingerprint table the address keys are held in, as a base-2 logarithm.
|
|
700
|
+
*
|
|
701
|
+
* 2^24 slots hold 11,744,051 keys at the table's load limit in 256 MiB,
|
|
702
|
+
* three times the golden copy's 3,451,350 records on 2026-10-03.
|
|
703
|
+
*/
|
|
704
|
+
const ADDRESS_KEY_SLOTS_LOG2 = 24
|
|
705
|
+
|
|
706
|
+
export function createGLEIFAdapter(): CorpusAdapter {
|
|
707
|
+
return {
|
|
708
|
+
id: GLEIF_ADAPTER_ID,
|
|
709
|
+
defaultLicense: GLEIF_LICENSE,
|
|
710
|
+
addressRole: AddressRole.RegisteredOffice,
|
|
711
|
+
register: SourceRegister.GLEIFGoldenCopy,
|
|
712
|
+
surface: SurfaceOrigin.Rendered,
|
|
713
|
+
description:
|
|
714
|
+
"GLEIF LEI golden copy (CC0): the legal and headquarters addresses of legal entities, one row per address.",
|
|
715
|
+
|
|
716
|
+
async *rows(opts: AdapterOptions): AsyncIterable<CanonicalRow> {
|
|
717
|
+
const wanted = opts.country?.toUpperCase()
|
|
718
|
+
|
|
719
|
+
if (wanted && !layoutForCountry(wanted)) {
|
|
720
|
+
throw new UnsupportedCountryError(GLEIF_ADAPTER_ID, ["any country codex holds a layout for"], wanted)
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
const emitted = new FingerprintSet(ADDRESS_KEY_SLOTS_LOG2)
|
|
724
|
+
let count = 0
|
|
725
|
+
let checkedHeader = false
|
|
726
|
+
|
|
727
|
+
for await (const record of readGLEIFRecords(opts.inputPath)) {
|
|
728
|
+
if (opts.signal?.aborted) break
|
|
729
|
+
|
|
730
|
+
if (opts.limit !== undefined && count >= opts.limit) break
|
|
731
|
+
|
|
732
|
+
if (!checkedHeader) {
|
|
733
|
+
checkedHeader = true
|
|
734
|
+
assertColumns(record, opts.inputPath)
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
const entityRefusal = readGLEIFEntity(record)
|
|
738
|
+
|
|
739
|
+
if (entityRefusal) {
|
|
740
|
+
countDropped(opts, `record:${entityRefusal}`)
|
|
741
|
+
|
|
742
|
+
continue
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
const blocks: GLEIFAddressBlock[] = [GLEIFAddressBlock.Legal]
|
|
746
|
+
|
|
747
|
+
if (headquartersRepeatsLegal(record)) {
|
|
748
|
+
countDropped(opts, "kept:headquarters-repeats-legal")
|
|
749
|
+
} else {
|
|
750
|
+
blocks.push(GLEIFAddressBlock.Headquarters)
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
for (const block of blocks) {
|
|
754
|
+
if (opts.limit !== undefined && count >= opts.limit) break
|
|
755
|
+
|
|
756
|
+
const reading = readGLEIFAddress(record, block)
|
|
757
|
+
|
|
758
|
+
if ("refused" in reading) {
|
|
759
|
+
countDropped(opts, `row:${reading.refused}`)
|
|
760
|
+
|
|
761
|
+
continue
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
const row = reading.admitted
|
|
765
|
+
|
|
766
|
+
if (wanted && row.country !== wanted) continue
|
|
767
|
+
|
|
768
|
+
if (!emitted.add(addressKey(row))) {
|
|
769
|
+
countDropped(opts, "row:address-already-emitted")
|
|
770
|
+
|
|
771
|
+
continue
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
yield row
|
|
775
|
+
|
|
776
|
+
count++
|
|
777
|
+
}
|
|
778
|
+
}
|
|
779
|
+
},
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
function assertColumns(record: GLEIFRecord, inputPath: PathBuilderLike): void {
|
|
784
|
+
const present = new Set(Object.keys(record))
|
|
785
|
+
const missing = REQUIRED_COLUMNS.filter((column) => !present.has(column))
|
|
786
|
+
|
|
787
|
+
if (!missing.length) return
|
|
788
|
+
|
|
789
|
+
throw new Error(
|
|
790
|
+
`${GLEIF_ADAPTER_ID} adapter: ${inputPath.toString()} carries none of ${missing.join(", ")}. ` +
|
|
791
|
+
`Every record would be refused. Check the publisher's LEI-CDF column names against this adapter's.`
|
|
792
|
+
)
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
/**
|
|
796
|
+
* The records under `inputPath`, which is an archive, an extracted CSV, or a directory holding archives.
|
|
797
|
+
*
|
|
798
|
+
* A directory holding no archive raises rather than yielding zero rows.
|
|
799
|
+
*/
|
|
800
|
+
async function* readGLEIFRecords(inputPath: PathBuilderLike): AsyncGenerator<GLEIFRecord> {
|
|
801
|
+
const path = await resolveGLEIFInput(inputPath)
|
|
802
|
+
const options = { normalizeKeys: false } as const
|
|
803
|
+
const source = path.basename().toLowerCase().endsWith(".zip") ? readZipEntry(path, /\.csv$/iu) : path
|
|
804
|
+
|
|
805
|
+
yield* CSVSpliterator.fromAsync<Record<string, string>>(source, options)
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
async function resolveGLEIFInput(inputPath: PathBuilderLike): Promise<PathBuilder> {
|
|
809
|
+
const path = PathBuilder.from(inputPath)
|
|
810
|
+
const name = path.basename().toLowerCase()
|
|
811
|
+
|
|
812
|
+
if (name.endsWith(".zip") || name.endsWith(".csv")) return path
|
|
813
|
+
|
|
814
|
+
const archives = (await Globerator.from("*.csv.zip", { cwd: path.toString(), absolute: false }).toSorted()).filter(
|
|
815
|
+
(archive) => GLEIF_ARCHIVE_PATTERN.test(archive)
|
|
816
|
+
)
|
|
817
|
+
|
|
818
|
+
if (!archives.length) {
|
|
819
|
+
throw new Error(`${GLEIF_ADAPTER_ID} adapter: ${path.toString()} holds no golden-copy archive`)
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
return path(archives.at(-1)!)
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
/**
|
|
826
|
+
* The configured adapter instance registered with the corpus builder.
|
|
827
|
+
*/
|
|
828
|
+
export const gleifAdapter = createGLEIFAdapter()
|