@mailwoman/corpus 10.0.0 → 10.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +120 -34
- package/data/PROVENANCE.md +623 -17
- package/data/address-source-register.json +14249 -0
- package/data/builds/v0.7.0-de-holdout/inputs.json +22 -0
- package/data/builds/v0.8.0-registers/inputs.json +92 -0
- package/data/license-decisions.json +1603 -0
- package/data/licenses/PROVENANCE.md +65 -0
- package/data/licenses/cdla-permissive-2.0.md +43 -0
- package/data/licenses/geonames-publication.md +34 -0
- package/data/licenses/licence-ouverte-2.0.md +36 -0
- package/data/licenses/national-address-database.md +46 -0
- package/data/licenses/nlod-2.0.md +90 -0
- package/data/licenses/sirene-publication.md +38 -0
- package/data/licenses/whosonfirst-licenses.md +65 -0
- package/data/source-resolutions.json +804 -0
- package/data/sub-venue-lexicon.json +1 -1
- package/data/training-manifests/v0.7.0-de-holdout.effective.json +477 -0
- package/data/training-manifests/v0.7.0-de-holdout.json +78 -0
- package/lib/adapters/cordis/adapter.ts +791 -0
- package/lib/adapters/dedup-key.ts +40 -0
- package/lib/adapters/errors.ts +21 -0
- package/lib/adapters/geonames/adapter.ts +43 -53
- package/lib/adapters/geonames/postal/adapter.ts +31 -37
- package/lib/adapters/gleif/adapter.ts +829 -0
- package/lib/adapters/libpostal-dictionary.ts +37 -0
- package/lib/adapters/openaddresses/adapter.ts +52 -55
- package/lib/adapters/osm/adapter.ts +162 -83
- package/lib/adapters/overture/adapter.ts +52 -43
- package/lib/adapters/po-box/adapter.ts +207 -0
- package/lib/adapters/registry.ts +79 -0
- package/lib/adapters/sha256-stream.ts +49 -0
- package/lib/adapters/source-id.ts +49 -0
- package/lib/adapters/street-line.ts +136 -0
- package/lib/adapters/wof/admin/json/adapter.ts +50 -35
- package/lib/adapters/wof/json-rows.ts +57 -26
- package/lib/adapters/wof/postalcode-json/adapter.ts +63 -61
- package/lib/adapters.ts +230 -0
- package/lib/au/adapters/gnaf/adapter.ts +36 -44
- package/lib/au/adapters/gnaf/assemble.ts +31 -51
- package/lib/be/adapters/brussels/adapter.ts +566 -0
- package/lib/be/adapters/vlaanderen/adapter.ts +667 -0
- package/lib/be/adapters/wallonie/adapter.ts +537 -0
- package/lib/be/tools/fetch/brussels.ts +242 -0
- package/lib/be/tools/fetch/wallonie.ts +275 -0
- package/lib/build/adapters.ts +111 -0
- package/lib/build/align.ts +365 -0
- package/lib/build/checkpoint.ts +133 -0
- package/lib/build/eligibility.ts +96 -0
- package/lib/build/heap.ts +53 -0
- package/lib/build/inputs.ts +81 -0
- package/lib/build/rows.ts +21 -0
- package/lib/build/types.ts +234 -0
- package/lib/build.ts +127 -315
- package/lib/cn/recipes/organizational-units.ts +20 -41
- package/lib/cz/adapters/cuzk/adapter.ts +320 -0
- package/lib/cz/recipes/pcfirst-preposition.ts +40 -27
- package/lib/cz/tools/fetch/cuzk.ts +710 -0
- package/lib/de/recipes/locale.ts +69 -59
- package/lib/directory.ts +31 -0
- package/lib/dk/adapters/inspire/adapter.ts +345 -0
- package/lib/dk/tools/fetch/inspire.ts +323 -0
- package/lib/ee/adapters/ads/adapter.ts +240 -0
- package/lib/ee/tools/fetch/ads.ts +272 -0
- package/lib/env.ts +6 -2
- package/lib/es/adapters/bizkaia/adapter.ts +388 -0
- package/lib/es/adapters/catastro/adapter.ts +345 -0
- package/lib/es/adapters/gipuzkoa/adapter.ts +256 -0
- package/lib/es/adapters/navarra/adapter.ts +290 -0
- package/lib/es/cadastre.ts +194 -0
- package/lib/es/tools/fetch/bizkaia.ts +752 -0
- package/lib/es/tools/fetch/catastro.ts +765 -0
- package/lib/es/tools/fetch/gipuzkoa.ts +338 -0
- package/lib/es/tools/fetch/navarra.ts +496 -0
- package/lib/fi/adapters/ryhti/adapter.ts +319 -0
- package/lib/fi/tools/fetch/ryhti.ts +476 -0
- package/lib/fingerprints.ts +154 -0
- package/lib/fr/adapters/annuaire-education/adapter.ts +600 -0
- package/lib/fr/adapters/ban/adapter.ts +87 -59
- package/lib/fr/adapters/finess/adapter.ts +619 -0
- package/lib/fr/adapters/finess/postal-lines.ts +157 -0
- package/lib/fr/adapters/finess/voie-type.ts +201 -0
- package/lib/fr/insee-country.ts +62 -0
- package/lib/fr/recipes/admin-split.ts +38 -60
- package/lib/fr/recipes/bare-street.ts +37 -50
- package/lib/fr/recipes/fragment.ts +59 -142
- package/lib/fr/recipes/lieudit.ts +111 -73
- package/lib/fr/recipes/order.ts +32 -59
- package/lib/fr/{adapters/ban/street-decompose.ts → street-decompose.ts} +4 -3
- package/lib/fr/tools/fetch/annuaire-education.ts +309 -0
- package/lib/fr/tools/fetch/ban.ts +30 -20
- package/lib/fr/tools/fetch/finess.ts +353 -0
- package/lib/gauntlet-inputs.ts +92 -0
- package/lib/index.ts +9 -3
- package/lib/inspire/address.ts +465 -0
- package/lib/inspire/archive.ts +44 -0
- package/lib/inspire/errors.ts +72 -0
- package/lib/inspire/stream.ts +265 -0
- package/lib/international/recipes/locale.ts +146 -184
- package/lib/it/adapters/anac/adapter.ts +527 -0
- package/lib/it/tools/fetch/anac.ts +391 -0
- package/lib/jp/adapters/wof-admin/adapter.ts +29 -23
- package/lib/jp/tools/fetch/houjin.ts +19 -21
- package/lib/kr/adapters/juso/label-rows.ts +24 -44
- package/lib/kr/adapters/localdata/align.ts +20 -31
- package/lib/kr/adapters/localdata/key-index.ts +17 -25
- package/lib/kr/adapters/localdata/permit-rows.ts +34 -27
- package/lib/kr/tools/fetch/juso.ts +19 -21
- package/lib/kr/tools/fetch/localdata.ts +29 -30
- package/lib/lu/adapters/bd-adresses/adapter.ts +240 -0
- package/lib/lu/tools/fetch/bd-adresses.ts +353 -0
- package/lib/lv/adapters/varis/adapter.ts +500 -0
- package/lib/lv/tools/fetch/varis.ts +215 -0
- package/lib/nl/adapters/kadaster/adapter.ts +386 -0
- package/lib/nl/recipes/postcode.ts +46 -24
- package/lib/nl/tools/fetch/kadaster.ts +302 -0
- package/lib/no/adapters/matrikkelen/adapter.ts +188 -0
- package/lib/no/recipes/fragment.ts +34 -58
- package/lib/no/recipes/street/led.ts +44 -25
- package/lib/no/recipes/{street/index.ts → street.ts} +29 -11
- package/lib/no/tools/fetch/matrikkelen.ts +531 -0
- package/lib/parquet/duckdb.ts +147 -0
- package/lib/parquet/readers.ts +86 -0
- package/lib/parquet/schema.ts +214 -0
- package/lib/parquet/shuffle.ts +59 -0
- package/lib/parquet/span-sql.ts +54 -0
- package/lib/parquet/streams.ts +113 -0
- package/lib/parquet/writers.ts +452 -0
- package/lib/pl/adapters/emuia/adapter.ts +202 -0
- package/lib/pl/tools/fetch/emuia.ts +361 -0
- package/lib/recipes/anchor-absorption.ts +30 -19
- package/lib/recipes/bare/country.ts +24 -32
- package/lib/recipes/bare/postcode/eval.ts +1 -1
- package/lib/recipes/bare/postcode.ts +346 -0
- package/lib/recipes/boundary-stress.ts +37 -20
- package/lib/recipes/country-balanced.ts +66 -86
- package/lib/recipes/house-venue.ts +36 -14
- package/lib/recipes/intersection.ts +84 -62
- package/lib/recipes/po/box/cedex/au-nz.ts +3 -3
- package/lib/recipes/po/box/cedex/ca.ts +3 -2
- package/lib/recipes/po/box/cedex/fr.ts +4 -3
- package/lib/recipes/po/box/cedex/phrases.ts +7 -6
- package/lib/recipes/po/box/cedex/recipe.ts +31 -19
- package/lib/recipes/po/box/cedex/sources.ts +16 -4
- package/lib/recipes/po/box/cedex/us.ts +7 -2
- package/lib/recipes/po/{box/index.ts → box.ts} +39 -18
- package/lib/recipes/scaffold.ts +267 -158
- package/lib/recipes/sources.ts +412 -0
- package/lib/recipes/street/affix.ts +54 -154
- package/lib/recipes/street/bare.ts +30 -17
- package/lib/recipes/street.ts +35 -9
- package/lib/recipes/sub/venue/context.ts +32 -23
- package/lib/recipes/sub/venue/render.ts +170 -0
- package/lib/recipes/sub/venue/sources.ts +92 -248
- package/lib/recipes/sub/venue.ts +795 -0
- package/lib/recipes/trailing-region.ts +75 -87
- package/lib/recipes/unit/sources.ts +44 -0
- package/lib/recipes/unit.ts +101 -89
- package/lib/recipes/venue.ts +347 -0
- package/lib/{recipes/index.ts → recipes.ts} +15 -11
- package/lib/registers.ts +280 -0
- package/lib/ro/adapters/retea-scolara/adapter.ts +264 -0
- package/lib/ro/tools/fetch/retea-scolara.ts +187 -0
- package/lib/runner.ts +221 -84
- package/lib/sg/recipes/register.ts +47 -53
- package/lib/sg/tools/fetch/acra.ts +23 -28
- package/lib/si/recipes/bare-village.ts +34 -17
- package/lib/sk/adapters/inspire/adapter.ts +393 -0
- package/lib/sk/tools/fetch/inspire.ts +403 -0
- package/lib/source-register/effective-manifest.ts +659 -0
- package/lib/source-register/register.ts +539 -0
- package/lib/source-register/training-manifest.ts +218 -0
- package/lib/source-register/types.ts +589 -0
- package/lib/source-register.ts +71 -0
- package/lib/south-asia/recipes/register.ts +45 -26
- package/lib/subvenue/harvest.ts +251 -0
- package/lib/{tools/sub/venue → subvenue}/promotions.ts +33 -70
- package/lib/subvenue/surfaces.ts +94 -0
- package/lib/subvenue/table.ts +264 -0
- package/lib/surfaces/locale.ts +248 -0
- package/lib/synthesizers/anchor-absorption.ts +56 -91
- package/lib/synthesizers/boundary-stress.ts +67 -155
- package/lib/synthesizers/house-venue.ts +65 -127
- package/lib/synthesizers/no-street.ts +71 -119
- package/lib/synthesizers/po-box.ts +93 -105
- package/lib/synthesizers/tail.ts +55 -0
- package/lib/synthesizers/utils.ts +82 -219
- package/lib/test-kit/corpus-recipe.ts +45 -28
- package/lib/test-kit.ts +116 -0
- package/lib/tools/align-canonical.ts +64 -0
- package/lib/tools/audit.ts +117 -120
- package/lib/tools/corpus-stats.ts +45 -31
- package/lib/tools/fetch/atom.ts +164 -0
- package/lib/tools/fetch/cordis.ts +320 -0
- package/lib/tools/fetch/download/manifest.ts +36 -23
- package/lib/tools/fetch/download/network.ts +55 -31
- package/lib/tools/fetch/download/retry.ts +30 -29
- package/lib/tools/fetch/geonames/dump.ts +75 -55
- package/lib/tools/fetch/geonames/postal.ts +27 -62
- package/lib/tools/fetch/gleif.ts +362 -0
- package/lib/tools/fetch/header.ts +71 -0
- package/lib/tools/fetch/inspire-addresses.ts +500 -0
- package/lib/tools/fetch/openaddresses.ts +23 -112
- package/lib/tools/fetch/ourairports.ts +18 -51
- package/lib/tools/fetch/ppd.ts +10 -8
- package/lib/tools/fetch/vlaanderen-ad.ts +435 -0
- package/lib/tools/fetch/wfs-harvest.ts +954 -0
- package/lib/tools/fetch/wikidata-subvenue.ts +45 -145
- package/lib/tools/fetch/zip-archive.ts +100 -0
- package/lib/tools/fetch.ts +101 -0
- package/lib/tools/golden/expand.ts +75 -44
- package/lib/tools/golden/promote.ts +47 -34
- package/lib/tools/golden/relabel-street/directory.ts +67 -39
- package/lib/tools/golden/relabel-street/row.ts +32 -109
- package/lib/tools/ingest-csv.ts +48 -51
- package/lib/tools/jsonl-to-parquet.ts +59 -98
- package/lib/tools/lint/recipe-output/vocab.ts +371 -0
- package/lib/tools/lint/{slice/index.ts → recipe-output.ts} +130 -126
- package/lib/tools/migrate/overlay-parquet.ts +173 -0
- package/lib/tools/migrate/recipe-output.ts +153 -0
- package/lib/tools/migrate/source-names.ts +161 -0
- package/lib/tools/{slice → overlay}/kryptonite.ts +47 -39
- package/lib/tools/overlay/manifest.ts +409 -0
- package/lib/tools/overlay/merge-source.ts +139 -0
- package/lib/tools/overlay/split-slice.ts +144 -0
- package/lib/tools/overlay/translit.ts +236 -0
- package/lib/tools/overture-subvenue.ts +18 -91
- package/lib/tools/postcode-triples.ts +284 -212
- package/lib/tools/source-register/build.ts +822 -0
- package/lib/tools/sub/venue/head-nouns.ts +38 -75
- package/lib/tools/sub/venue/lexicon.ts +71 -110
- package/lib/tools/sub/venue/wikidata.ts +13 -10
- package/lib/tw/tools/fetch/gcis.ts +21 -20
- package/lib/types.ts +305 -101
- package/lib/us/adapters/fcc-bdc/adapter.ts +26 -41
- package/lib/us/adapters/state/hi-schools/adapter.ts +28 -17
- package/lib/us/adapters/state/hi-schools/workbook.ts +8 -3
- package/lib/us/adapters/state/ia-contractors/adapter.ts +27 -15
- package/lib/us/adapters/state/ny-notaries/adapter.ts +24 -25
- package/lib/us/adapters/state/tx-notaries/adapter.ts +21 -15
- package/lib/us/adapters/tiger/adapter.ts +19 -44
- package/lib/us/adapters/tiger/street-decompose.ts +7 -17
- package/lib/us/adapters/usgov/hrsa-fqhc/adapter.ts +49 -34
- package/lib/us/adapters/usgov/imls-pls/adapter.ts +25 -19
- package/lib/us/adapters/usgov/irs-bmf/adapter.ts +32 -23
- package/lib/us/adapters/usgov/nad/adapter.ts +61 -122
- package/lib/us/adapters/usgov/nppes/adapter.ts +72 -35
- package/lib/us/adapters/usgov/samhsa-treatment-locator/adapter.ts +47 -34
- package/lib/us/fips-state.ts +19 -10
- package/lib/{synthesizers → us/synthesizers}/intersection.ts +45 -35
- package/lib/{synthesizers → us/synthesizers}/street.ts +56 -43
- package/lib/us/tools/fetch/hrsa.ts +7 -8
- package/lib/us/tools/fetch/imls-pls.ts +18 -36
- package/lib/us/tools/fetch/nad.ts +51 -33
- package/lib/us/tools/fetch/nppes.ts +27 -39
- package/lib/us/tools/fetch/state/hi-schools.ts +24 -17
- package/lib/us/tools/fetch/state/sources.ts +12 -12
- package/lib/us/tools/fetch/tiger-full.ts +22 -74
- package/lib/utils/align.ts +52 -59
- package/lib/utils/{slice-stats.ts → cooccurrence-stats.ts} +22 -16
- package/lib/utils/golden.ts +36 -51
- package/lib/utils/license.ts +239 -27
- package/lib/utils/split.ts +209 -88
- package/lib/utils/tokenize.ts +25 -56
- package/lib/utils/wof-json.ts +130 -77
- package/lib/{utils/index.ts → utils.ts} +0 -1
- package/lib/ve/recipes/reviewed-postcode-tail.ts +40 -13
- package/out/adapters/cordis/adapter.d.ts +326 -0
- package/out/adapters/cordis/adapter.d.ts.map +1 -0
- package/out/adapters/cordis/adapter.js +622 -0
- package/out/adapters/cordis/adapter.js.map +1 -0
- package/out/adapters/dedup-key.d.ts +30 -0
- package/out/adapters/dedup-key.d.ts.map +1 -0
- package/out/adapters/dedup-key.js +35 -0
- package/out/adapters/dedup-key.js.map +1 -0
- package/out/adapters/errors.d.ts +17 -0
- package/out/adapters/errors.d.ts.map +1 -0
- package/out/adapters/errors.js +20 -0
- package/out/adapters/errors.js.map +1 -0
- package/out/adapters/geonames/adapter.d.ts +26 -28
- package/out/adapters/geonames/adapter.d.ts.map +1 -1
- package/out/adapters/geonames/adapter.js +40 -50
- package/out/adapters/geonames/adapter.js.map +1 -1
- package/out/adapters/geonames/postal/adapter.d.ts +14 -27
- package/out/adapters/geonames/postal/adapter.d.ts.map +1 -1
- package/out/adapters/geonames/postal/adapter.js +30 -35
- package/out/adapters/geonames/postal/adapter.js.map +1 -1
- package/out/adapters/gleif/adapter.d.ts +293 -0
- package/out/adapters/gleif/adapter.d.ts.map +1 -0
- package/out/adapters/gleif/adapter.js +685 -0
- package/out/adapters/gleif/adapter.js.map +1 -0
- package/out/adapters/libpostal-dictionary.d.ts +20 -0
- package/out/adapters/libpostal-dictionary.d.ts.map +1 -0
- package/out/adapters/libpostal-dictionary.js +34 -0
- package/out/adapters/libpostal-dictionary.js.map +1 -0
- package/out/adapters/openaddresses/adapter.d.ts +29 -43
- package/out/adapters/openaddresses/adapter.d.ts.map +1 -1
- package/out/adapters/openaddresses/adapter.js +34 -46
- package/out/adapters/openaddresses/adapter.js.map +1 -1
- package/out/adapters/osm/adapter.d.ts +59 -52
- package/out/adapters/osm/adapter.d.ts.map +1 -1
- package/out/adapters/osm/adapter.js +119 -69
- package/out/adapters/osm/adapter.js.map +1 -1
- package/out/adapters/overture/adapter.d.ts +11 -37
- package/out/adapters/overture/adapter.d.ts.map +1 -1
- package/out/adapters/overture/adapter.js +45 -42
- package/out/adapters/overture/adapter.js.map +1 -1
- package/out/adapters/po-box/adapter.d.ts +66 -0
- package/out/adapters/po-box/adapter.d.ts.map +1 -0
- package/out/adapters/{synth-po-box → po-box}/adapter.js +48 -47
- package/out/adapters/po-box/adapter.js.map +1 -0
- package/out/adapters/registry.d.ts +55 -0
- package/out/adapters/registry.d.ts.map +1 -0
- package/out/adapters/registry.js +43 -0
- package/out/adapters/registry.js.map +1 -0
- package/out/adapters/sha256-stream.d.ts +26 -0
- package/out/adapters/sha256-stream.d.ts.map +1 -0
- package/out/adapters/sha256-stream.js +34 -0
- package/out/adapters/sha256-stream.js.map +1 -0
- package/out/adapters/source-id.d.ts +33 -0
- package/out/adapters/source-id.d.ts.map +1 -0
- package/out/adapters/source-id.js +42 -0
- package/out/adapters/source-id.js.map +1 -0
- package/out/adapters/street-line.d.ts +103 -0
- package/out/adapters/street-line.d.ts.map +1 -0
- package/out/adapters/street-line.js +118 -0
- package/out/adapters/street-line.js.map +1 -0
- package/out/adapters/wof/admin/json/adapter.d.ts +27 -18
- package/out/adapters/wof/admin/json/adapter.d.ts.map +1 -1
- package/out/adapters/wof/admin/json/adapter.js +48 -32
- package/out/adapters/wof/admin/json/adapter.js.map +1 -1
- package/out/adapters/wof/json-rows.d.ts +36 -19
- package/out/adapters/wof/json-rows.d.ts.map +1 -1
- package/out/adapters/wof/json-rows.js +35 -15
- package/out/adapters/wof/json-rows.js.map +1 -1
- package/out/adapters/wof/postalcode-json/adapter.d.ts +22 -38
- package/out/adapters/wof/postalcode-json/adapter.d.ts.map +1 -1
- package/out/adapters/wof/postalcode-json/adapter.js +60 -58
- package/out/adapters/wof/postalcode-json/adapter.js.map +1 -1
- package/out/adapters.d.ts +75 -0
- package/out/adapters.d.ts.map +1 -0
- package/out/adapters.js +167 -0
- package/out/adapters.js.map +1 -0
- package/out/au/adapters/gnaf/adapter.d.ts +15 -27
- package/out/au/adapters/gnaf/adapter.d.ts.map +1 -1
- package/out/au/adapters/gnaf/adapter.js +35 -43
- package/out/au/adapters/gnaf/adapter.js.map +1 -1
- package/out/au/adapters/gnaf/assemble.d.ts +15 -26
- package/out/au/adapters/gnaf/assemble.d.ts.map +1 -1
- package/out/au/adapters/gnaf/assemble.js +26 -46
- package/out/au/adapters/gnaf/assemble.js.map +1 -1
- package/out/be/adapters/brussels/adapter.d.ts +212 -0
- package/out/be/adapters/brussels/adapter.d.ts.map +1 -0
- package/out/be/adapters/brussels/adapter.js +435 -0
- package/out/be/adapters/brussels/adapter.js.map +1 -0
- package/out/be/adapters/vlaanderen/adapter.d.ts +230 -0
- package/out/be/adapters/vlaanderen/adapter.d.ts.map +1 -0
- package/out/be/adapters/vlaanderen/adapter.js +418 -0
- package/out/be/adapters/vlaanderen/adapter.js.map +1 -0
- package/out/be/adapters/wallonie/adapter.d.ts +196 -0
- package/out/be/adapters/wallonie/adapter.d.ts.map +1 -0
- package/out/be/adapters/wallonie/adapter.js +437 -0
- package/out/be/adapters/wallonie/adapter.js.map +1 -0
- package/out/be/tools/fetch/brussels.d.ts +122 -0
- package/out/be/tools/fetch/brussels.d.ts.map +1 -0
- package/out/be/tools/fetch/brussels.js +148 -0
- package/out/be/tools/fetch/brussels.js.map +1 -0
- package/out/be/tools/fetch/wallonie.d.ts +120 -0
- package/out/be/tools/fetch/wallonie.d.ts.map +1 -0
- package/out/be/tools/fetch/wallonie.js +167 -0
- package/out/be/tools/fetch/wallonie.js.map +1 -0
- package/out/build/adapters.d.ts +33 -0
- package/out/build/adapters.d.ts.map +1 -0
- package/out/build/adapters.js +69 -0
- package/out/build/adapters.js.map +1 -0
- package/out/build/align.d.ts +74 -0
- package/out/build/align.d.ts.map +1 -0
- package/out/build/align.js +226 -0
- package/out/build/align.js.map +1 -0
- package/out/build/checkpoint.d.ts +94 -0
- package/out/build/checkpoint.d.ts.map +1 -0
- package/out/build/checkpoint.js +61 -0
- package/out/build/checkpoint.js.map +1 -0
- package/out/build/eligibility.d.ts +47 -0
- package/out/build/eligibility.d.ts.map +1 -0
- package/out/build/eligibility.js +80 -0
- package/out/build/eligibility.js.map +1 -0
- package/out/build/heap.d.ts +28 -0
- package/out/build/heap.d.ts.map +1 -0
- package/out/build/heap.js +47 -0
- package/out/build/heap.js.map +1 -0
- package/out/build/inputs.d.ts +52 -0
- package/out/build/inputs.d.ts.map +1 -0
- package/out/build/inputs.js +49 -0
- package/out/build/inputs.js.map +1 -0
- package/out/build/rows.d.ts +16 -0
- package/out/build/rows.d.ts.map +1 -0
- package/out/build/rows.js +19 -0
- package/out/build/rows.js.map +1 -0
- package/out/build/types.d.ts +222 -0
- package/out/build/types.d.ts.map +1 -0
- package/out/build/types.js +34 -0
- package/out/build/types.js.map +1 -0
- package/out/build.d.ts +6 -121
- package/out/build.d.ts.map +1 -1
- package/out/build.js +112 -207
- package/out/build.js.map +1 -1
- package/out/cn/recipes/organizational-units.d.ts +5 -22
- package/out/cn/recipes/organizational-units.d.ts.map +1 -1
- package/out/cn/recipes/organizational-units.js +20 -41
- package/out/cn/recipes/organizational-units.js.map +1 -1
- package/out/cz/adapters/cuzk/adapter.d.ts +52 -0
- package/out/cz/adapters/cuzk/adapter.d.ts.map +1 -0
- package/out/cz/adapters/cuzk/adapter.js +269 -0
- package/out/cz/adapters/cuzk/adapter.js.map +1 -0
- package/out/cz/recipes/pcfirst-preposition.d.ts +7 -11
- package/out/cz/recipes/pcfirst-preposition.d.ts.map +1 -1
- package/out/cz/recipes/pcfirst-preposition.js +36 -27
- package/out/cz/recipes/pcfirst-preposition.js.map +1 -1
- package/out/cz/tools/fetch/cuzk.d.ts +281 -0
- package/out/cz/tools/fetch/cuzk.d.ts.map +1 -0
- package/out/cz/tools/fetch/cuzk.js +448 -0
- package/out/cz/tools/fetch/cuzk.js.map +1 -0
- package/out/de/recipes/locale.d.ts +24 -26
- package/out/de/recipes/locale.d.ts.map +1 -1
- package/out/de/recipes/locale.js +67 -57
- package/out/de/recipes/locale.js.map +1 -1
- package/out/directory.d.ts +20 -0
- package/out/directory.d.ts.map +1 -0
- package/out/directory.js +27 -0
- package/out/directory.js.map +1 -0
- package/out/dk/adapters/inspire/adapter.d.ts +153 -0
- package/out/dk/adapters/inspire/adapter.d.ts.map +1 -0
- package/out/dk/adapters/inspire/adapter.js +258 -0
- package/out/dk/adapters/inspire/adapter.js.map +1 -0
- package/out/dk/tools/fetch/inspire.d.ts +101 -0
- package/out/dk/tools/fetch/inspire.d.ts.map +1 -0
- package/out/dk/tools/fetch/inspire.js +232 -0
- package/out/dk/tools/fetch/inspire.js.map +1 -0
- package/out/ee/adapters/ads/adapter.d.ts +102 -0
- package/out/ee/adapters/ads/adapter.d.ts.map +1 -0
- package/out/ee/adapters/ads/adapter.js +185 -0
- package/out/ee/adapters/ads/adapter.js.map +1 -0
- package/out/ee/tools/fetch/ads.d.ts +123 -0
- package/out/ee/tools/fetch/ads.d.ts.map +1 -0
- package/out/ee/tools/fetch/ads.js +197 -0
- package/out/ee/tools/fetch/ads.js.map +1 -0
- package/out/env.d.ts +6 -2
- package/out/env.d.ts.map +1 -1
- package/out/env.js +6 -2
- package/out/env.js.map +1 -1
- package/out/es/adapters/bizkaia/adapter.d.ts +143 -0
- package/out/es/adapters/bizkaia/adapter.d.ts.map +1 -0
- package/out/es/adapters/bizkaia/adapter.js +332 -0
- package/out/es/adapters/bizkaia/adapter.js.map +1 -0
- package/out/es/adapters/catastro/adapter.d.ts +103 -0
- package/out/es/adapters/catastro/adapter.d.ts.map +1 -0
- package/out/es/adapters/catastro/adapter.js +290 -0
- package/out/es/adapters/catastro/adapter.js.map +1 -0
- package/out/es/adapters/gipuzkoa/adapter.d.ts +84 -0
- package/out/es/adapters/gipuzkoa/adapter.d.ts.map +1 -0
- package/out/es/adapters/gipuzkoa/adapter.js +218 -0
- package/out/es/adapters/gipuzkoa/adapter.js.map +1 -0
- package/out/es/adapters/navarra/adapter.d.ts +106 -0
- package/out/es/adapters/navarra/adapter.d.ts.map +1 -0
- package/out/es/adapters/navarra/adapter.js +242 -0
- package/out/es/adapters/navarra/adapter.js.map +1 -0
- package/out/es/cadastre.d.ts +110 -0
- package/out/es/cadastre.d.ts.map +1 -0
- package/out/es/cadastre.js +128 -0
- package/out/es/cadastre.js.map +1 -0
- package/out/es/tools/fetch/bizkaia.d.ts +281 -0
- package/out/es/tools/fetch/bizkaia.d.ts.map +1 -0
- package/out/es/tools/fetch/bizkaia.js +478 -0
- package/out/es/tools/fetch/bizkaia.js.map +1 -0
- package/out/es/tools/fetch/catastro.d.ts +280 -0
- package/out/es/tools/fetch/catastro.d.ts.map +1 -0
- package/out/es/tools/fetch/catastro.js +491 -0
- package/out/es/tools/fetch/catastro.js.map +1 -0
- package/out/es/tools/fetch/gipuzkoa.d.ts +164 -0
- package/out/es/tools/fetch/gipuzkoa.d.ts.map +1 -0
- package/out/es/tools/fetch/gipuzkoa.js +210 -0
- package/out/es/tools/fetch/gipuzkoa.js.map +1 -0
- package/out/es/tools/fetch/navarra.d.ts +194 -0
- package/out/es/tools/fetch/navarra.d.ts.map +1 -0
- package/out/es/tools/fetch/navarra.js +321 -0
- package/out/es/tools/fetch/navarra.js.map +1 -0
- package/out/fi/adapters/ryhti/adapter.d.ts +111 -0
- package/out/fi/adapters/ryhti/adapter.d.ts.map +1 -0
- package/out/fi/adapters/ryhti/adapter.js +240 -0
- package/out/fi/adapters/ryhti/adapter.js.map +1 -0
- package/out/fi/tools/fetch/ryhti.d.ts +206 -0
- package/out/fi/tools/fetch/ryhti.d.ts.map +1 -0
- package/out/fi/tools/fetch/ryhti.js +324 -0
- package/out/fi/tools/fetch/ryhti.js.map +1 -0
- package/out/fingerprints.d.ts +68 -0
- package/out/fingerprints.d.ts.map +1 -0
- package/out/fingerprints.js +130 -0
- package/out/fingerprints.js.map +1 -0
- package/out/fr/adapters/annuaire-education/adapter.d.ts +236 -0
- package/out/fr/adapters/annuaire-education/adapter.d.ts.map +1 -0
- package/out/fr/adapters/annuaire-education/adapter.js +477 -0
- package/out/fr/adapters/annuaire-education/adapter.js.map +1 -0
- package/out/fr/adapters/ban/adapter.d.ts +19 -25
- package/out/fr/adapters/ban/adapter.d.ts.map +1 -1
- package/out/fr/adapters/ban/adapter.js +65 -54
- package/out/fr/adapters/ban/adapter.js.map +1 -1
- package/out/fr/adapters/finess/adapter.d.ts +277 -0
- package/out/fr/adapters/finess/adapter.d.ts.map +1 -0
- package/out/fr/adapters/finess/adapter.js +520 -0
- package/out/fr/adapters/finess/adapter.js.map +1 -0
- package/out/fr/adapters/finess/postal-lines.d.ts +61 -0
- package/out/fr/adapters/finess/postal-lines.d.ts.map +1 -0
- package/out/fr/adapters/finess/postal-lines.js +114 -0
- package/out/fr/adapters/finess/postal-lines.js.map +1 -0
- package/out/fr/adapters/finess/voie-type.d.ts +77 -0
- package/out/fr/adapters/finess/voie-type.d.ts.map +1 -0
- package/out/fr/adapters/finess/voie-type.js +173 -0
- package/out/fr/adapters/finess/voie-type.js.map +1 -0
- package/out/fr/insee-country.d.ts +45 -0
- package/out/fr/insee-country.d.ts.map +1 -0
- package/out/fr/insee-country.js +60 -0
- package/out/fr/insee-country.js.map +1 -0
- package/out/fr/recipes/admin-split.d.ts +4 -27
- package/out/fr/recipes/admin-split.d.ts.map +1 -1
- package/out/fr/recipes/admin-split.js +36 -58
- package/out/fr/recipes/admin-split.js.map +1 -1
- package/out/fr/recipes/bare-street.d.ts +2 -17
- package/out/fr/recipes/bare-street.d.ts.map +1 -1
- package/out/fr/recipes/bare-street.js +35 -50
- package/out/fr/recipes/bare-street.js.map +1 -1
- package/out/fr/recipes/fragment.d.ts +6 -65
- package/out/fr/recipes/fragment.d.ts.map +1 -1
- package/out/fr/recipes/fragment.js +55 -135
- package/out/fr/recipes/fragment.js.map +1 -1
- package/out/fr/recipes/lieudit.d.ts +17 -19
- package/out/fr/recipes/lieudit.d.ts.map +1 -1
- package/out/fr/recipes/lieudit.js +89 -68
- package/out/fr/recipes/lieudit.js.map +1 -1
- package/out/fr/recipes/order.d.ts +4 -27
- package/out/fr/recipes/order.d.ts.map +1 -1
- package/out/fr/recipes/order.js +31 -58
- package/out/fr/recipes/order.js.map +1 -1
- package/out/fr/{adapters/ban/street-decompose.d.ts → street-decompose.d.ts} +3 -2
- package/out/fr/street-decompose.d.ts.map +1 -0
- package/out/fr/{adapters/ban/street-decompose.js → street-decompose.js} +4 -3
- package/out/fr/street-decompose.js.map +1 -0
- package/out/fr/tools/fetch/annuaire-education.d.ts +133 -0
- package/out/fr/tools/fetch/annuaire-education.d.ts.map +1 -0
- package/out/fr/tools/fetch/annuaire-education.js +198 -0
- package/out/fr/tools/fetch/annuaire-education.js.map +1 -0
- package/out/fr/tools/fetch/ban.d.ts +9 -7
- package/out/fr/tools/fetch/ban.d.ts.map +1 -1
- package/out/fr/tools/fetch/ban.js +29 -19
- package/out/fr/tools/fetch/ban.js.map +1 -1
- package/out/fr/tools/fetch/finess.d.ts +145 -0
- package/out/fr/tools/fetch/finess.d.ts.map +1 -0
- package/out/fr/tools/fetch/finess.js +229 -0
- package/out/fr/tools/fetch/finess.js.map +1 -0
- package/out/gauntlet-inputs.d.ts +42 -0
- package/out/gauntlet-inputs.d.ts.map +1 -0
- package/out/gauntlet-inputs.js +78 -0
- package/out/gauntlet-inputs.js.map +1 -0
- package/out/index.d.ts +9 -3
- package/out/index.d.ts.map +1 -1
- package/out/index.js +9 -3
- package/out/index.js.map +1 -1
- package/out/inspire/address.d.ts +261 -0
- package/out/inspire/address.d.ts.map +1 -0
- package/out/inspire/address.js +395 -0
- package/out/inspire/address.js.map +1 -0
- package/out/inspire/archive.d.ts +36 -0
- package/out/inspire/archive.d.ts.map +1 -0
- package/out/inspire/archive.js +42 -0
- package/out/inspire/archive.js.map +1 -0
- package/out/inspire/errors.d.ts +56 -0
- package/out/inspire/errors.d.ts.map +1 -0
- package/out/inspire/errors.js +65 -0
- package/out/inspire/errors.js.map +1 -0
- package/out/inspire/stream.d.ts +140 -0
- package/out/inspire/stream.d.ts.map +1 -0
- package/out/inspire/stream.js +123 -0
- package/out/inspire/stream.js.map +1 -0
- package/out/international/recipes/locale.d.ts +40 -86
- package/out/international/recipes/locale.d.ts.map +1 -1
- package/out/international/recipes/locale.js +122 -157
- package/out/international/recipes/locale.js.map +1 -1
- package/out/it/adapters/anac/adapter.d.ts +269 -0
- package/out/it/adapters/anac/adapter.d.ts.map +1 -0
- package/out/it/adapters/anac/adapter.js +434 -0
- package/out/it/adapters/anac/adapter.js.map +1 -0
- package/out/it/tools/fetch/anac.d.ts +171 -0
- package/out/it/tools/fetch/anac.d.ts.map +1 -0
- package/out/it/tools/fetch/anac.js +269 -0
- package/out/it/tools/fetch/anac.js.map +1 -0
- package/out/jp/adapters/wof-admin/adapter.d.ts +14 -11
- package/out/jp/adapters/wof-admin/adapter.d.ts.map +1 -1
- package/out/jp/adapters/wof-admin/adapter.js +27 -16
- package/out/jp/adapters/wof-admin/adapter.js.map +1 -1
- package/out/jp/tools/fetch/houjin.d.ts +7 -4
- package/out/jp/tools/fetch/houjin.d.ts.map +1 -1
- package/out/jp/tools/fetch/houjin.js +17 -13
- package/out/jp/tools/fetch/houjin.js.map +1 -1
- package/out/kr/adapters/juso/label-rows.d.ts +17 -31
- package/out/kr/adapters/juso/label-rows.d.ts.map +1 -1
- package/out/kr/adapters/juso/label-rows.js +19 -41
- package/out/kr/adapters/juso/label-rows.js.map +1 -1
- package/out/kr/adapters/localdata/align.d.ts +4 -16
- package/out/kr/adapters/localdata/align.d.ts.map +1 -1
- package/out/kr/adapters/localdata/align.js +19 -30
- package/out/kr/adapters/localdata/align.js.map +1 -1
- package/out/kr/adapters/localdata/key-index.d.ts +13 -22
- package/out/kr/adapters/localdata/key-index.d.ts.map +1 -1
- package/out/kr/adapters/localdata/key-index.js +15 -21
- package/out/kr/adapters/localdata/key-index.js.map +1 -1
- package/out/kr/adapters/localdata/permit-rows.d.ts +21 -14
- package/out/kr/adapters/localdata/permit-rows.d.ts.map +1 -1
- package/out/kr/adapters/localdata/permit-rows.js +31 -26
- package/out/kr/adapters/localdata/permit-rows.js.map +1 -1
- package/out/kr/tools/fetch/juso.d.ts +11 -8
- package/out/kr/tools/fetch/juso.d.ts.map +1 -1
- package/out/kr/tools/fetch/juso.js +15 -14
- package/out/kr/tools/fetch/juso.js.map +1 -1
- package/out/kr/tools/fetch/localdata.d.ts +16 -9
- package/out/kr/tools/fetch/localdata.d.ts.map +1 -1
- package/out/kr/tools/fetch/localdata.js +24 -16
- package/out/kr/tools/fetch/localdata.js.map +1 -1
- package/out/lu/adapters/bd-adresses/adapter.d.ts +109 -0
- package/out/lu/adapters/bd-adresses/adapter.d.ts.map +1 -0
- package/out/lu/adapters/bd-adresses/adapter.js +196 -0
- package/out/lu/adapters/bd-adresses/adapter.js.map +1 -0
- package/out/lu/tools/fetch/bd-adresses.d.ts +165 -0
- package/out/lu/tools/fetch/bd-adresses.d.ts.map +1 -0
- package/out/lu/tools/fetch/bd-adresses.js +223 -0
- package/out/lu/tools/fetch/bd-adresses.js.map +1 -0
- package/out/lv/adapters/varis/adapter.d.ts +284 -0
- package/out/lv/adapters/varis/adapter.d.ts.map +1 -0
- package/out/lv/adapters/varis/adapter.js +405 -0
- package/out/lv/adapters/varis/adapter.js.map +1 -0
- package/out/lv/tools/fetch/varis.d.ts +81 -0
- package/out/lv/tools/fetch/varis.d.ts.map +1 -0
- package/out/lv/tools/fetch/varis.js +133 -0
- package/out/lv/tools/fetch/varis.js.map +1 -0
- package/out/nl/adapters/kadaster/adapter.d.ts +125 -0
- package/out/nl/adapters/kadaster/adapter.d.ts.map +1 -0
- package/out/nl/adapters/kadaster/adapter.js +309 -0
- package/out/nl/adapters/kadaster/adapter.js.map +1 -0
- package/out/nl/recipes/postcode.d.ts +12 -14
- package/out/nl/recipes/postcode.d.ts.map +1 -1
- package/out/nl/recipes/postcode.js +42 -24
- package/out/nl/recipes/postcode.js.map +1 -1
- package/out/nl/tools/fetch/kadaster.d.ts +159 -0
- package/out/nl/tools/fetch/kadaster.d.ts.map +1 -0
- package/out/nl/tools/fetch/kadaster.js +182 -0
- package/out/nl/tools/fetch/kadaster.js.map +1 -0
- package/out/no/adapters/matrikkelen/adapter.d.ts +44 -0
- package/out/no/adapters/matrikkelen/adapter.d.ts.map +1 -0
- package/out/no/adapters/matrikkelen/adapter.js +143 -0
- package/out/no/adapters/matrikkelen/adapter.js.map +1 -0
- package/out/no/recipes/fragment.d.ts +1 -33
- package/out/no/recipes/fragment.d.ts.map +1 -1
- package/out/no/recipes/fragment.js +23 -57
- package/out/no/recipes/fragment.js.map +1 -1
- package/out/no/recipes/street/led.d.ts +9 -12
- package/out/no/recipes/street/led.d.ts.map +1 -1
- package/out/no/recipes/street/led.js +34 -24
- package/out/no/recipes/street/led.js.map +1 -1
- package/out/no/recipes/street.d.ts +19 -0
- package/out/no/recipes/street.d.ts.map +1 -0
- package/out/no/recipes/{street/index.js → street.js} +28 -12
- package/out/no/recipes/street.js.map +1 -0
- package/out/no/tools/fetch/matrikkelen.d.ts +263 -0
- package/out/no/tools/fetch/matrikkelen.d.ts.map +1 -0
- package/out/no/tools/fetch/matrikkelen.js +353 -0
- package/out/no/tools/fetch/matrikkelen.js.map +1 -0
- package/out/parquet/duckdb.d.ts +103 -0
- package/out/parquet/duckdb.d.ts.map +1 -0
- package/out/parquet/duckdb.js +93 -0
- package/out/parquet/duckdb.js.map +1 -0
- package/out/parquet/readers.d.ts +44 -0
- package/out/parquet/readers.d.ts.map +1 -0
- package/out/parquet/readers.js +69 -0
- package/out/parquet/readers.js.map +1 -0
- package/out/parquet/schema.d.ts +95 -0
- package/out/parquet/schema.d.ts.map +1 -0
- package/out/parquet/schema.js +157 -0
- package/out/parquet/schema.js.map +1 -0
- package/out/parquet/shuffle.d.ts +25 -0
- package/out/parquet/shuffle.d.ts.map +1 -0
- package/out/parquet/shuffle.js +44 -0
- package/out/parquet/shuffle.js.map +1 -0
- package/out/parquet/span-sql.d.ts +49 -0
- package/out/parquet/span-sql.d.ts.map +1 -0
- package/out/parquet/span-sql.js +53 -0
- package/out/parquet/span-sql.js.map +1 -0
- package/out/parquet/streams.d.ts +47 -0
- package/out/parquet/streams.d.ts.map +1 -0
- package/out/parquet/streams.js +78 -0
- package/out/parquet/streams.js.map +1 -0
- package/out/parquet/writers.d.ts +124 -0
- package/out/parquet/writers.d.ts.map +1 -0
- package/out/parquet/writers.js +252 -0
- package/out/parquet/writers.js.map +1 -0
- package/out/pl/adapters/emuia/adapter.d.ts +81 -0
- package/out/pl/adapters/emuia/adapter.d.ts.map +1 -0
- package/out/pl/adapters/emuia/adapter.js +178 -0
- package/out/pl/adapters/emuia/adapter.js.map +1 -0
- package/out/pl/tools/fetch/emuia.d.ts +166 -0
- package/out/pl/tools/fetch/emuia.d.ts.map +1 -0
- package/out/pl/tools/fetch/emuia.js +261 -0
- package/out/pl/tools/fetch/emuia.js.map +1 -0
- package/out/recipes/anchor-absorption.d.ts +9 -9
- package/out/recipes/anchor-absorption.d.ts.map +1 -1
- package/out/recipes/anchor-absorption.js +29 -19
- package/out/recipes/anchor-absorption.js.map +1 -1
- package/out/recipes/bare/country.d.ts +2 -20
- package/out/recipes/bare/country.d.ts.map +1 -1
- package/out/recipes/bare/country.js +20 -31
- package/out/recipes/bare/country.js.map +1 -1
- package/out/recipes/bare/postcode/eval.d.ts +1 -1
- package/out/recipes/bare/postcode/eval.js +1 -1
- package/out/recipes/bare/postcode.d.ts +41 -0
- package/out/recipes/bare/postcode.d.ts.map +1 -0
- package/out/recipes/bare/{postcode/index.js → postcode.js} +92 -80
- package/out/recipes/bare/postcode.js.map +1 -0
- package/out/recipes/boundary-stress.d.ts +8 -8
- package/out/recipes/boundary-stress.d.ts.map +1 -1
- package/out/recipes/boundary-stress.js +37 -20
- package/out/recipes/boundary-stress.js.map +1 -1
- package/out/recipes/country-balanced.d.ts +3 -21
- package/out/recipes/country-balanced.d.ts.map +1 -1
- package/out/recipes/country-balanced.js +58 -76
- package/out/recipes/country-balanced.js.map +1 -1
- package/out/recipes/house-venue.d.ts +8 -6
- package/out/recipes/house-venue.d.ts.map +1 -1
- package/out/recipes/house-venue.js +33 -14
- package/out/recipes/house-venue.js.map +1 -1
- package/out/recipes/intersection.d.ts +20 -20
- package/out/recipes/intersection.d.ts.map +1 -1
- package/out/recipes/intersection.js +67 -55
- package/out/recipes/intersection.js.map +1 -1
- package/out/recipes/po/box/cedex/au-nz.d.ts.map +1 -1
- package/out/recipes/po/box/cedex/au-nz.js +3 -3
- package/out/recipes/po/box/cedex/au-nz.js.map +1 -1
- package/out/recipes/po/box/cedex/ca.d.ts.map +1 -1
- package/out/recipes/po/box/cedex/ca.js +2 -2
- package/out/recipes/po/box/cedex/ca.js.map +1 -1
- package/out/recipes/po/box/cedex/fr.d.ts.map +1 -1
- package/out/recipes/po/box/cedex/fr.js +3 -3
- package/out/recipes/po/box/cedex/fr.js.map +1 -1
- package/out/recipes/po/box/cedex/phrases.d.ts.map +1 -1
- package/out/recipes/po/box/cedex/phrases.js +7 -6
- package/out/recipes/po/box/cedex/phrases.js.map +1 -1
- package/out/recipes/po/box/cedex/recipe.d.ts +1 -1
- package/out/recipes/po/box/cedex/recipe.d.ts.map +1 -1
- package/out/recipes/po/box/cedex/recipe.js +27 -16
- package/out/recipes/po/box/cedex/recipe.js.map +1 -1
- package/out/recipes/po/box/cedex/sources.d.ts +20 -14
- package/out/recipes/po/box/cedex/sources.d.ts.map +1 -1
- package/out/recipes/po/box/cedex/sources.js +2 -2
- package/out/recipes/po/box/cedex/sources.js.map +1 -1
- package/out/recipes/po/box/cedex/us.d.ts.map +1 -1
- package/out/recipes/po/box/cedex/us.js +5 -2
- package/out/recipes/po/box/cedex/us.js.map +1 -1
- package/out/recipes/po/box.d.ts +18 -0
- package/out/recipes/po/box.d.ts.map +1 -0
- package/out/recipes/po/{box/index.js → box.js} +37 -19
- package/out/recipes/po/box.js.map +1 -0
- package/out/recipes/scaffold.d.ts +223 -141
- package/out/recipes/scaffold.d.ts.map +1 -1
- package/out/recipes/scaffold.js +75 -65
- package/out/recipes/scaffold.js.map +1 -1
- package/out/recipes/sources.d.ts +178 -0
- package/out/recipes/sources.d.ts.map +1 -0
- package/out/recipes/sources.js +361 -0
- package/out/recipes/sources.js.map +1 -0
- package/out/recipes/street/affix.d.ts +20 -50
- package/out/recipes/street/affix.d.ts.map +1 -1
- package/out/recipes/street/affix.js +45 -133
- package/out/recipes/street/affix.js.map +1 -1
- package/out/recipes/street/bare.d.ts +9 -7
- package/out/recipes/street/bare.d.ts.map +1 -1
- package/out/recipes/street/bare.js +27 -16
- package/out/recipes/street/bare.js.map +1 -1
- package/out/recipes/street.d.ts +6 -4
- package/out/recipes/street.d.ts.map +1 -1
- package/out/recipes/street.js +32 -9
- package/out/recipes/street.js.map +1 -1
- package/out/recipes/sub/venue/context.d.ts +12 -9
- package/out/recipes/sub/venue/context.d.ts.map +1 -1
- package/out/recipes/sub/venue/context.js +23 -17
- package/out/recipes/sub/venue/context.js.map +1 -1
- package/out/recipes/sub/venue/render.d.ts +58 -0
- package/out/recipes/sub/venue/render.d.ts.map +1 -0
- package/out/recipes/sub/venue/render.js +118 -0
- package/out/recipes/sub/venue/render.js.map +1 -0
- package/out/recipes/sub/venue/sources.d.ts +53 -93
- package/out/recipes/sub/venue/sources.d.ts.map +1 -1
- package/out/recipes/sub/venue/sources.js +57 -197
- package/out/recipes/sub/venue/sources.js.map +1 -1
- package/out/recipes/sub/venue.d.ts +173 -0
- package/out/recipes/sub/venue.d.ts.map +1 -0
- package/out/recipes/sub/venue.js +558 -0
- package/out/recipes/sub/venue.js.map +1 -0
- package/out/recipes/trailing-region.d.ts +9 -61
- package/out/recipes/trailing-region.d.ts.map +1 -1
- package/out/recipes/trailing-region.js +61 -86
- package/out/recipes/trailing-region.js.map +1 -1
- package/out/recipes/unit/sources.d.ts +28 -0
- package/out/recipes/unit/sources.d.ts.map +1 -0
- package/out/recipes/unit/sources.js +30 -0
- package/out/recipes/unit/sources.js.map +1 -0
- package/out/recipes/unit.d.ts +30 -17
- package/out/recipes/unit.d.ts.map +1 -1
- package/out/recipes/unit.js +90 -79
- package/out/recipes/unit.js.map +1 -1
- package/out/recipes/venue.d.ts +119 -0
- package/out/recipes/venue.d.ts.map +1 -0
- package/out/recipes/venue.js +245 -0
- package/out/recipes/venue.js.map +1 -0
- package/out/recipes.d.ts +26 -0
- package/out/recipes.d.ts.map +1 -0
- package/out/{recipes/index.js → recipes.js} +16 -12
- package/out/recipes.js.map +1 -0
- package/out/registers.d.ts +279 -0
- package/out/registers.d.ts.map +1 -0
- package/out/registers.js +275 -0
- package/out/registers.js.map +1 -0
- package/out/ro/adapters/retea-scolara/adapter.d.ts +114 -0
- package/out/ro/adapters/retea-scolara/adapter.d.ts.map +1 -0
- package/out/ro/adapters/retea-scolara/adapter.js +209 -0
- package/out/ro/adapters/retea-scolara/adapter.js.map +1 -0
- package/out/ro/tools/fetch/retea-scolara.d.ts +69 -0
- package/out/ro/tools/fetch/retea-scolara.d.ts.map +1 -0
- package/out/ro/tools/fetch/retea-scolara.js +117 -0
- package/out/ro/tools/fetch/retea-scolara.js.map +1 -0
- package/out/runner.d.ts +121 -60
- package/out/runner.d.ts.map +1 -1
- package/out/runner.js +130 -56
- package/out/runner.js.map +1 -1
- package/out/sg/recipes/register.d.ts +18 -32
- package/out/sg/recipes/register.d.ts.map +1 -1
- package/out/sg/recipes/register.js +45 -50
- package/out/sg/recipes/register.js.map +1 -1
- package/out/sg/tools/fetch/acra.d.ts +11 -14
- package/out/sg/tools/fetch/acra.d.ts.map +1 -1
- package/out/sg/tools/fetch/acra.js +18 -21
- package/out/sg/tools/fetch/acra.js.map +1 -1
- package/out/si/recipes/bare-village.d.ts +12 -13
- package/out/si/recipes/bare-village.d.ts.map +1 -1
- package/out/si/recipes/bare-village.js +31 -17
- package/out/si/recipes/bare-village.js.map +1 -1
- package/out/sk/adapters/inspire/adapter.d.ts +119 -0
- package/out/sk/adapters/inspire/adapter.d.ts.map +1 -0
- package/out/sk/adapters/inspire/adapter.js +318 -0
- package/out/sk/adapters/inspire/adapter.js.map +1 -0
- package/out/sk/tools/fetch/inspire.d.ts +196 -0
- package/out/sk/tools/fetch/inspire.d.ts.map +1 -0
- package/out/sk/tools/fetch/inspire.js +281 -0
- package/out/sk/tools/fetch/inspire.js.map +1 -0
- package/out/source-register/effective-manifest.d.ts +355 -0
- package/out/source-register/effective-manifest.d.ts.map +1 -0
- package/out/source-register/effective-manifest.js +355 -0
- package/out/source-register/effective-manifest.js.map +1 -0
- package/out/source-register/register.d.ts +79 -0
- package/out/source-register/register.d.ts.map +1 -0
- package/out/source-register/register.js +400 -0
- package/out/source-register/register.js.map +1 -0
- package/out/source-register/training-manifest.d.ts +111 -0
- package/out/source-register/training-manifest.d.ts.map +1 -0
- package/out/source-register/training-manifest.js +120 -0
- package/out/source-register/training-manifest.js.map +1 -0
- package/out/source-register/types.d.ts +538 -0
- package/out/source-register/types.d.ts.map +1 -0
- package/out/source-register/types.js +263 -0
- package/out/source-register/types.js.map +1 -0
- package/out/source-register.d.ts +19 -0
- package/out/source-register.d.ts.map +1 -0
- package/out/source-register.js +16 -0
- package/out/source-register.js.map +1 -0
- package/out/south-asia/recipes/register.d.ts +20 -17
- package/out/south-asia/recipes/register.d.ts.map +1 -1
- package/out/south-asia/recipes/register.js +44 -24
- package/out/south-asia/recipes/register.js.map +1 -1
- package/out/subvenue/harvest.d.ts +117 -0
- package/out/subvenue/harvest.d.ts.map +1 -0
- package/out/subvenue/harvest.js +172 -0
- package/out/subvenue/harvest.js.map +1 -0
- package/out/subvenue/promotions.d.ts +65 -0
- package/out/subvenue/promotions.d.ts.map +1 -0
- package/out/{tools/sub/venue → subvenue}/promotions.js +15 -55
- package/out/subvenue/promotions.js.map +1 -0
- package/out/subvenue/surfaces.d.ts +39 -0
- package/out/subvenue/surfaces.d.ts.map +1 -0
- package/out/subvenue/surfaces.js +75 -0
- package/out/subvenue/surfaces.js.map +1 -0
- package/out/subvenue/table.d.ts +212 -0
- package/out/subvenue/table.d.ts.map +1 -0
- package/out/subvenue/table.js +94 -0
- package/out/subvenue/table.js.map +1 -0
- package/out/surfaces/locale.d.ts +113 -0
- package/out/surfaces/locale.d.ts.map +1 -0
- package/out/surfaces/locale.js +138 -0
- package/out/surfaces/locale.js.map +1 -0
- package/out/synthesizers/anchor-absorption.d.ts +22 -30
- package/out/synthesizers/anchor-absorption.d.ts.map +1 -1
- package/out/synthesizers/anchor-absorption.js +30 -85
- package/out/synthesizers/anchor-absorption.js.map +1 -1
- package/out/synthesizers/boundary-stress.d.ts +18 -49
- package/out/synthesizers/boundary-stress.d.ts.map +1 -1
- package/out/synthesizers/boundary-stress.js +45 -142
- package/out/synthesizers/boundary-stress.js.map +1 -1
- package/out/synthesizers/house-venue.d.ts +23 -25
- package/out/synthesizers/house-venue.d.ts.map +1 -1
- package/out/synthesizers/house-venue.js +47 -118
- package/out/synthesizers/house-venue.js.map +1 -1
- package/out/synthesizers/no-street.d.ts +7 -37
- package/out/synthesizers/no-street.d.ts.map +1 -1
- package/out/synthesizers/no-street.js +55 -111
- package/out/synthesizers/no-street.js.map +1 -1
- package/out/synthesizers/po-box.d.ts +48 -45
- package/out/synthesizers/po-box.d.ts.map +1 -1
- package/out/synthesizers/po-box.js +57 -97
- package/out/synthesizers/po-box.js.map +1 -1
- package/out/synthesizers/tail.d.ts +36 -0
- package/out/synthesizers/tail.d.ts.map +1 -0
- package/out/synthesizers/tail.js +32 -0
- package/out/synthesizers/tail.js.map +1 -0
- package/out/synthesizers/utils.d.ts +33 -129
- package/out/synthesizers/utils.d.ts.map +1 -1
- package/out/synthesizers/utils.js +71 -167
- package/out/synthesizers/utils.js.map +1 -1
- package/out/test-kit/corpus-recipe.d.ts +29 -23
- package/out/test-kit/corpus-recipe.d.ts.map +1 -1
- package/out/test-kit/corpus-recipe.js +28 -13
- package/out/test-kit/corpus-recipe.js.map +1 -1
- package/out/test-kit.d.ts +63 -0
- package/out/test-kit.d.ts.map +1 -0
- package/out/test-kit.js +88 -0
- package/out/test-kit.js.map +1 -0
- package/out/tools/align-canonical.d.ts +7 -0
- package/out/tools/align-canonical.d.ts.map +1 -0
- package/out/tools/align-canonical.js +52 -0
- package/out/tools/align-canonical.js.map +1 -0
- package/out/tools/audit.d.ts +19 -11
- package/out/tools/audit.d.ts.map +1 -1
- package/out/tools/audit.js +89 -97
- package/out/tools/audit.js.map +1 -1
- package/out/tools/corpus-stats.d.ts +24 -15
- package/out/tools/corpus-stats.d.ts.map +1 -1
- package/out/tools/corpus-stats.js +34 -30
- package/out/tools/corpus-stats.js.map +1 -1
- package/out/tools/fetch/atom.d.ts +115 -0
- package/out/tools/fetch/atom.d.ts.map +1 -0
- package/out/tools/fetch/atom.js +83 -0
- package/out/tools/fetch/atom.js.map +1 -0
- package/out/tools/fetch/cordis.d.ts +124 -0
- package/out/tools/fetch/cordis.d.ts.map +1 -0
- package/out/tools/fetch/cordis.js +210 -0
- package/out/tools/fetch/cordis.js.map +1 -0
- package/out/tools/fetch/download/manifest.d.ts +27 -18
- package/out/tools/fetch/download/manifest.d.ts.map +1 -1
- package/out/tools/fetch/download/manifest.js +22 -14
- package/out/tools/fetch/download/manifest.js.map +1 -1
- package/out/tools/fetch/download/network.d.ts +48 -27
- package/out/tools/fetch/download/network.d.ts.map +1 -1
- package/out/tools/fetch/download/network.js +26 -16
- package/out/tools/fetch/download/network.js.map +1 -1
- package/out/tools/fetch/download/retry.d.ts +16 -15
- package/out/tools/fetch/download/retry.d.ts.map +1 -1
- package/out/tools/fetch/download/retry.js +28 -28
- package/out/tools/fetch/download/retry.js.map +1 -1
- package/out/tools/fetch/{download/index.d.ts → download.d.ts} +1 -1
- package/out/tools/fetch/download.d.ts.map +1 -0
- package/out/tools/fetch/{download/index.js → download.js} +1 -1
- package/out/tools/fetch/download.js.map +1 -0
- package/out/tools/fetch/geonames/dump.d.ts +51 -32
- package/out/tools/fetch/geonames/dump.d.ts.map +1 -1
- package/out/tools/fetch/geonames/dump.js +54 -43
- package/out/tools/fetch/geonames/dump.js.map +1 -1
- package/out/tools/fetch/geonames/postal.d.ts +14 -49
- package/out/tools/fetch/geonames/postal.d.ts.map +1 -1
- package/out/tools/fetch/geonames/postal.js +17 -56
- package/out/tools/fetch/geonames/postal.js.map +1 -1
- package/out/tools/fetch/gleif.d.ts +138 -0
- package/out/tools/fetch/gleif.d.ts.map +1 -0
- package/out/tools/fetch/gleif.js +222 -0
- package/out/tools/fetch/gleif.js.map +1 -0
- package/out/tools/fetch/header.d.ts +43 -0
- package/out/tools/fetch/header.d.ts.map +1 -0
- package/out/tools/fetch/header.js +61 -0
- package/out/tools/fetch/header.js.map +1 -0
- package/out/tools/fetch/inspire-addresses.d.ts +254 -0
- package/out/tools/fetch/inspire-addresses.d.ts.map +1 -0
- package/out/tools/fetch/inspire-addresses.js +277 -0
- package/out/tools/fetch/inspire-addresses.js.map +1 -0
- package/out/tools/fetch/openaddresses.d.ts +1 -4
- package/out/tools/fetch/openaddresses.d.ts.map +1 -1
- package/out/tools/fetch/openaddresses.js +20 -99
- package/out/tools/fetch/openaddresses.js.map +1 -1
- package/out/tools/fetch/ourairports.d.ts +6 -33
- package/out/tools/fetch/ourairports.d.ts.map +1 -1
- package/out/tools/fetch/ourairports.js +14 -47
- package/out/tools/fetch/ourairports.js.map +1 -1
- package/out/tools/fetch/ppd.d.ts +4 -3
- package/out/tools/fetch/ppd.d.ts.map +1 -1
- package/out/tools/fetch/ppd.js +10 -7
- package/out/tools/fetch/ppd.js.map +1 -1
- package/out/tools/fetch/vlaanderen-ad.d.ts +131 -0
- package/out/tools/fetch/vlaanderen-ad.d.ts.map +1 -0
- package/out/tools/fetch/vlaanderen-ad.js +293 -0
- package/out/tools/fetch/vlaanderen-ad.js.map +1 -0
- package/out/tools/fetch/wfs-harvest.d.ts +420 -0
- package/out/tools/fetch/wfs-harvest.d.ts.map +1 -0
- package/out/tools/fetch/wfs-harvest.js +525 -0
- package/out/tools/fetch/wfs-harvest.js.map +1 -0
- package/out/tools/fetch/wikidata-subvenue.d.ts +32 -100
- package/out/tools/fetch/wikidata-subvenue.d.ts.map +1 -1
- package/out/tools/fetch/wikidata-subvenue.js +27 -122
- package/out/tools/fetch/wikidata-subvenue.js.map +1 -1
- package/out/tools/fetch/zip-archive.d.ts +54 -0
- package/out/tools/fetch/zip-archive.d.ts.map +1 -0
- package/out/tools/fetch/zip-archive.js +58 -0
- package/out/tools/fetch/zip-archive.js.map +1 -0
- package/out/tools/fetch.d.ts +99 -0
- package/out/tools/fetch.d.ts.map +1 -0
- package/out/tools/fetch.js +95 -0
- package/out/tools/fetch.js.map +1 -0
- package/out/tools/golden/expand.d.ts +28 -13
- package/out/tools/golden/expand.d.ts.map +1 -1
- package/out/tools/golden/expand.js +51 -37
- package/out/tools/golden/expand.js.map +1 -1
- package/out/tools/golden/promote.d.ts +13 -8
- package/out/tools/golden/promote.d.ts.map +1 -1
- package/out/tools/golden/promote.js +38 -30
- package/out/tools/golden/promote.js.map +1 -1
- package/out/tools/golden/relabel-street/directory.d.ts +25 -10
- package/out/tools/golden/relabel-street/directory.d.ts.map +1 -1
- package/out/tools/golden/relabel-street/directory.js +44 -32
- package/out/tools/golden/relabel-street/directory.js.map +1 -1
- package/out/tools/golden/relabel-street/row.d.ts +18 -69
- package/out/tools/golden/relabel-street/row.d.ts.map +1 -1
- package/out/tools/golden/relabel-street/row.js +19 -77
- package/out/tools/golden/relabel-street/row.js.map +1 -1
- package/out/tools/golden/{relabel-street/index.d.ts → relabel-street.d.ts} +1 -1
- package/out/tools/golden/relabel-street.d.ts.map +1 -0
- package/out/tools/golden/{relabel-street/index.js → relabel-street.js} +1 -1
- package/out/tools/golden/relabel-street.js.map +1 -0
- package/out/tools/ingest-csv.d.ts +19 -15
- package/out/tools/ingest-csv.d.ts.map +1 -1
- package/out/tools/ingest-csv.js +42 -46
- package/out/tools/ingest-csv.js.map +1 -1
- package/out/tools/jsonl-to-parquet.d.ts +15 -28
- package/out/tools/jsonl-to-parquet.d.ts.map +1 -1
- package/out/tools/jsonl-to-parquet.js +49 -91
- package/out/tools/jsonl-to-parquet.js.map +1 -1
- package/out/tools/lint/recipe-output/vocab.d.ts +82 -0
- package/out/tools/lint/recipe-output/vocab.d.ts.map +1 -0
- package/out/tools/lint/{slice → recipe-output}/vocab.js +54 -69
- package/out/tools/lint/recipe-output/vocab.js.map +1 -0
- package/out/tools/lint/recipe-output.d.ts +73 -0
- package/out/tools/lint/recipe-output.d.ts.map +1 -0
- package/out/tools/lint/{slice/index.js → recipe-output.js} +93 -96
- package/out/tools/lint/recipe-output.js.map +1 -0
- package/out/tools/migrate/overlay-parquet.d.ts +30 -0
- package/out/tools/migrate/overlay-parquet.d.ts.map +1 -0
- package/out/tools/migrate/overlay-parquet.js +141 -0
- package/out/tools/migrate/overlay-parquet.js.map +1 -0
- package/out/tools/migrate/recipe-output.d.ts +35 -0
- package/out/tools/migrate/recipe-output.d.ts.map +1 -0
- package/out/tools/migrate/recipe-output.js +124 -0
- package/out/tools/migrate/recipe-output.js.map +1 -0
- package/out/tools/migrate/source-names.d.ts +52 -0
- package/out/tools/migrate/source-names.d.ts.map +1 -0
- package/out/tools/migrate/source-names.js +105 -0
- package/out/tools/migrate/source-names.js.map +1 -0
- package/out/tools/overlay/kryptonite.d.ts +33 -0
- package/out/tools/overlay/kryptonite.d.ts.map +1 -0
- package/out/tools/{slice → overlay}/kryptonite.js +39 -29
- package/out/tools/overlay/kryptonite.js.map +1 -0
- package/out/tools/overlay/manifest.d.ts +143 -0
- package/out/tools/overlay/manifest.d.ts.map +1 -0
- package/out/tools/overlay/manifest.js +261 -0
- package/out/tools/overlay/manifest.js.map +1 -0
- package/out/tools/overlay/merge-source.d.ts +74 -0
- package/out/tools/overlay/merge-source.d.ts.map +1 -0
- package/out/tools/overlay/merge-source.js +63 -0
- package/out/tools/overlay/merge-source.js.map +1 -0
- package/out/tools/overlay/split-slice.d.ts +66 -0
- package/out/tools/overlay/split-slice.d.ts.map +1 -0
- package/out/tools/overlay/split-slice.js +78 -0
- package/out/tools/overlay/split-slice.js.map +1 -0
- package/out/tools/overlay/translit.d.ts +55 -0
- package/out/tools/overlay/translit.d.ts.map +1 -0
- package/out/tools/{slice → overlay}/translit.js +61 -49
- package/out/tools/overlay/translit.js.map +1 -0
- package/out/tools/overture-subvenue.d.ts +17 -76
- package/out/tools/overture-subvenue.d.ts.map +1 -1
- package/out/tools/overture-subvenue.js +7 -74
- package/out/tools/overture-subvenue.js.map +1 -1
- package/out/tools/postcode-triples.d.ts +78 -127
- package/out/tools/postcode-triples.d.ts.map +1 -1
- package/out/tools/postcode-triples.js +200 -193
- package/out/tools/postcode-triples.js.map +1 -1
- package/out/tools/source-register/build.d.ts +147 -0
- package/out/tools/source-register/build.d.ts.map +1 -0
- package/out/tools/source-register/build.js +517 -0
- package/out/tools/source-register/build.js.map +1 -0
- package/out/tools/sub/venue/head-nouns.d.ts +9 -38
- package/out/tools/sub/venue/head-nouns.d.ts.map +1 -1
- package/out/tools/sub/venue/head-nouns.js +37 -74
- package/out/tools/sub/venue/head-nouns.js.map +1 -1
- package/out/tools/sub/venue/lexicon.d.ts +53 -84
- package/out/tools/sub/venue/lexicon.d.ts.map +1 -1
- package/out/tools/sub/venue/lexicon.js +42 -90
- package/out/tools/sub/venue/lexicon.js.map +1 -1
- package/out/tools/sub/venue/wikidata.d.ts +8 -6
- package/out/tools/sub/venue/wikidata.d.ts.map +1 -1
- package/out/tools/sub/venue/wikidata.js +12 -9
- package/out/tools/sub/venue/wikidata.js.map +1 -1
- package/out/tw/tools/fetch/gcis.d.ts +9 -3
- package/out/tw/tools/fetch/gcis.d.ts.map +1 -1
- package/out/tw/tools/fetch/gcis.js +19 -13
- package/out/tw/tools/fetch/gcis.js.map +1 -1
- package/out/types.d.ts +271 -101
- package/out/types.d.ts.map +1 -1
- package/out/types.js +133 -9
- package/out/types.js.map +1 -1
- package/out/us/adapters/fcc-bdc/adapter.d.ts +18 -36
- package/out/us/adapters/fcc-bdc/adapter.d.ts.map +1 -1
- package/out/us/adapters/fcc-bdc/adapter.js +25 -38
- package/out/us/adapters/fcc-bdc/adapter.js.map +1 -1
- package/out/us/adapters/state/hi-schools/adapter.d.ts +12 -11
- package/out/us/adapters/state/hi-schools/adapter.d.ts.map +1 -1
- package/out/us/adapters/state/hi-schools/adapter.js +26 -16
- package/out/us/adapters/state/hi-schools/adapter.js.map +1 -1
- package/out/us/adapters/state/hi-schools/workbook.d.ts +8 -3
- package/out/us/adapters/state/hi-schools/workbook.d.ts.map +1 -1
- package/out/us/adapters/state/hi-schools/workbook.js +3 -1
- package/out/us/adapters/state/hi-schools/workbook.js.map +1 -1
- package/out/us/adapters/state/ia-contractors/adapter.d.ts +13 -6
- package/out/us/adapters/state/ia-contractors/adapter.d.ts.map +1 -1
- package/out/us/adapters/state/ia-contractors/adapter.js +27 -14
- package/out/us/adapters/state/ia-contractors/adapter.js.map +1 -1
- package/out/us/adapters/state/ny-notaries/adapter.d.ts +7 -6
- package/out/us/adapters/state/ny-notaries/adapter.d.ts.map +1 -1
- package/out/us/adapters/state/ny-notaries/adapter.js +24 -22
- package/out/us/adapters/state/ny-notaries/adapter.js.map +1 -1
- package/out/us/adapters/state/tx-notaries/adapter.d.ts +8 -7
- package/out/us/adapters/state/tx-notaries/adapter.d.ts.map +1 -1
- package/out/us/adapters/state/tx-notaries/adapter.js +21 -14
- package/out/us/adapters/state/tx-notaries/adapter.js.map +1 -1
- package/out/us/adapters/tiger/adapter.d.ts +10 -34
- package/out/us/adapters/tiger/adapter.d.ts.map +1 -1
- package/out/us/adapters/tiger/adapter.js +18 -42
- package/out/us/adapters/tiger/adapter.js.map +1 -1
- package/out/us/adapters/tiger/street-decompose.d.ts +6 -13
- package/out/us/adapters/tiger/street-decompose.d.ts.map +1 -1
- package/out/us/adapters/tiger/street-decompose.js +7 -17
- package/out/us/adapters/tiger/street-decompose.js.map +1 -1
- package/out/us/adapters/usgov/hrsa-fqhc/adapter.d.ts +26 -20
- package/out/us/adapters/usgov/hrsa-fqhc/adapter.d.ts.map +1 -1
- package/out/us/adapters/usgov/hrsa-fqhc/adapter.js +41 -29
- package/out/us/adapters/usgov/hrsa-fqhc/adapter.js.map +1 -1
- package/out/us/adapters/usgov/imls-pls/adapter.d.ts +8 -7
- package/out/us/adapters/usgov/imls-pls/adapter.d.ts.map +1 -1
- package/out/us/adapters/usgov/imls-pls/adapter.js +25 -18
- package/out/us/adapters/usgov/imls-pls/adapter.js.map +1 -1
- package/out/us/adapters/usgov/irs-bmf/adapter.d.ts +11 -10
- package/out/us/adapters/usgov/irs-bmf/adapter.d.ts.map +1 -1
- package/out/us/adapters/usgov/irs-bmf/adapter.js +32 -22
- package/out/us/adapters/usgov/irs-bmf/adapter.js.map +1 -1
- package/out/us/adapters/usgov/nad/adapter.d.ts +11 -31
- package/out/us/adapters/usgov/nad/adapter.d.ts.map +1 -1
- package/out/us/adapters/usgov/nad/adapter.js +57 -111
- package/out/us/adapters/usgov/nad/adapter.js.map +1 -1
- package/out/us/adapters/usgov/nppes/adapter.d.ts +12 -22
- package/out/us/adapters/usgov/nppes/adapter.d.ts.map +1 -1
- package/out/us/adapters/usgov/nppes/adapter.js +62 -32
- package/out/us/adapters/usgov/nppes/adapter.js.map +1 -1
- package/out/us/adapters/usgov/samhsa-treatment-locator/adapter.d.ts +16 -15
- package/out/us/adapters/usgov/samhsa-treatment-locator/adapter.d.ts.map +1 -1
- package/out/us/adapters/usgov/samhsa-treatment-locator/adapter.js +38 -28
- package/out/us/adapters/usgov/samhsa-treatment-locator/adapter.js.map +1 -1
- package/out/us/fips-state.d.ts +19 -10
- package/out/us/fips-state.d.ts.map +1 -1
- package/out/us/fips-state.js +17 -8
- package/out/us/fips-state.js.map +1 -1
- package/out/{synthesizers → us/synthesizers}/intersection.d.ts +10 -8
- package/out/us/synthesizers/intersection.d.ts.map +1 -0
- package/out/{synthesizers → us/synthesizers}/intersection.js +46 -35
- package/out/us/synthesizers/intersection.js.map +1 -0
- package/out/{synthesizers → us/synthesizers}/street.d.ts +19 -12
- package/out/us/synthesizers/street.d.ts.map +1 -0
- package/out/{synthesizers → us/synthesizers}/street.js +45 -38
- package/out/us/synthesizers/street.js.map +1 -0
- package/out/us/tools/fetch/hrsa.d.ts +3 -3
- package/out/us/tools/fetch/hrsa.d.ts.map +1 -1
- package/out/us/tools/fetch/hrsa.js +6 -7
- package/out/us/tools/fetch/hrsa.js.map +1 -1
- package/out/us/tools/fetch/imls-pls.d.ts +5 -16
- package/out/us/tools/fetch/imls-pls.d.ts.map +1 -1
- package/out/us/tools/fetch/imls-pls.js +17 -34
- package/out/us/tools/fetch/imls-pls.js.map +1 -1
- package/out/us/tools/fetch/nad.d.ts +22 -10
- package/out/us/tools/fetch/nad.d.ts.map +1 -1
- package/out/us/tools/fetch/nad.js +30 -25
- package/out/us/tools/fetch/nad.js.map +1 -1
- package/out/us/tools/fetch/nppes.d.ts +6 -16
- package/out/us/tools/fetch/nppes.d.ts.map +1 -1
- package/out/us/tools/fetch/nppes.js +24 -36
- package/out/us/tools/fetch/nppes.js.map +1 -1
- package/out/us/tools/fetch/state/hi-schools.d.ts +9 -5
- package/out/us/tools/fetch/state/hi-schools.d.ts.map +1 -1
- package/out/us/tools/fetch/state/hi-schools.js +16 -14
- package/out/us/tools/fetch/state/hi-schools.js.map +1 -1
- package/out/us/tools/fetch/state/sources.d.ts +8 -7
- package/out/us/tools/fetch/state/sources.d.ts.map +1 -1
- package/out/us/tools/fetch/state/sources.js +8 -9
- package/out/us/tools/fetch/state/sources.js.map +1 -1
- package/out/us/tools/fetch/tiger-full.d.ts +1 -14
- package/out/us/tools/fetch/tiger-full.d.ts.map +1 -1
- package/out/us/tools/fetch/tiger-full.js +16 -55
- package/out/us/tools/fetch/tiger-full.js.map +1 -1
- package/out/utils/align.d.ts +26 -19
- package/out/utils/align.d.ts.map +1 -1
- package/out/utils/align.js +32 -47
- package/out/utils/align.js.map +1 -1
- package/out/utils/cooccurrence-stats.d.ts +58 -0
- package/out/utils/cooccurrence-stats.d.ts.map +1 -0
- package/out/utils/cooccurrence-stats.js +62 -0
- package/out/utils/cooccurrence-stats.js.map +1 -0
- package/out/utils/golden.d.ts +21 -31
- package/out/utils/golden.d.ts.map +1 -1
- package/out/utils/golden.js +30 -46
- package/out/utils/golden.js.map +1 -1
- package/out/utils/license.d.ts +159 -22
- package/out/utils/license.d.ts.map +1 -1
- package/out/utils/license.js +156 -26
- package/out/utils/license.js.map +1 -1
- package/out/utils/split.d.ts +66 -70
- package/out/utils/split.d.ts.map +1 -1
- package/out/utils/split.js +162 -69
- package/out/utils/split.js.map +1 -1
- package/out/utils/tokenize.d.ts +15 -44
- package/out/utils/tokenize.d.ts.map +1 -1
- package/out/utils/tokenize.js +18 -31
- package/out/utils/tokenize.js.map +1 -1
- package/out/utils/wof-json.d.ts +88 -62
- package/out/utils/wof-json.d.ts.map +1 -1
- package/out/utils/wof-json.js +77 -56
- package/out/utils/wof-json.js.map +1 -1
- package/out/{utils/index.js → utils.d.ts} +1 -2
- package/out/utils.d.ts.map +1 -0
- package/out/{utils/index.d.ts → utils.js} +1 -2
- package/out/utils.js.map +1 -0
- package/out/ve/recipes/reviewed-postcode-tail.d.ts +25 -7
- package/out/ve/recipes/reviewed-postcode-tail.d.ts.map +1 -1
- package/out/ve/recipes/reviewed-postcode-tail.js +33 -12
- package/out/ve/recipes/reviewed-postcode-tail.js.map +1 -1
- package/package.json +45 -488
- package/lib/adapters/index.ts +0 -160
- package/lib/adapters/synth-po-box/adapter.ts +0 -204
- package/lib/adapters/utils/index.ts +0 -307
- package/lib/recipes/bare/postcode/index.ts +0 -327
- package/lib/recipes/sub/venue/index.ts +0 -997
- package/lib/synthesizers/locale.ts +0 -261
- package/lib/test-kit/index.ts +0 -100
- package/lib/tools/align-slice.ts +0 -68
- package/lib/tools/fetch/index.ts +0 -174
- package/lib/tools/gb-title-case.ts +0 -69
- package/lib/tools/index.ts +0 -28
- package/lib/tools/lint/slice/vocab.ts +0 -376
- package/lib/tools/overlay-manifest.ts +0 -215
- package/lib/tools/slice/translit.ts +0 -218
- package/lib/tools/sub/venue/harvest.ts +0 -234
- package/lib/tools/sub/venue/surfaces.ts +0 -95
- package/lib/tools/sub/venue/table.ts +0 -281
- package/lib/utils/parquet.ts +0 -582
- package/out/adapters/index.d.ts +0 -51
- package/out/adapters/index.d.ts.map +0 -1
- package/out/adapters/index.js +0 -97
- package/out/adapters/index.js.map +0 -1
- package/out/adapters/synth-po-box/adapter.d.ts +0 -67
- package/out/adapters/synth-po-box/adapter.d.ts.map +0 -1
- package/out/adapters/synth-po-box/adapter.js.map +0 -1
- package/out/adapters/utils/index.d.ts +0 -191
- package/out/adapters/utils/index.d.ts.map +0 -1
- package/out/adapters/utils/index.js +0 -206
- package/out/adapters/utils/index.js.map +0 -1
- package/out/fr/adapters/ban/street-decompose.d.ts.map +0 -1
- package/out/fr/adapters/ban/street-decompose.js.map +0 -1
- package/out/no/recipes/street/index.d.ts +0 -18
- package/out/no/recipes/street/index.d.ts.map +0 -1
- package/out/no/recipes/street/index.js.map +0 -1
- package/out/recipes/bare/postcode/index.d.ts +0 -62
- package/out/recipes/bare/postcode/index.d.ts.map +0 -1
- package/out/recipes/bare/postcode/index.js.map +0 -1
- package/out/recipes/index.d.ts +0 -24
- package/out/recipes/index.d.ts.map +0 -1
- package/out/recipes/index.js.map +0 -1
- package/out/recipes/po/box/index.d.ts +0 -17
- package/out/recipes/po/box/index.d.ts.map +0 -1
- package/out/recipes/po/box/index.js.map +0 -1
- package/out/recipes/sub/venue/index.d.ts +0 -270
- package/out/recipes/sub/venue/index.d.ts.map +0 -1
- package/out/recipes/sub/venue/index.js +0 -728
- package/out/recipes/sub/venue/index.js.map +0 -1
- package/out/synthesizers/intersection.d.ts.map +0 -1
- package/out/synthesizers/intersection.js.map +0 -1
- package/out/synthesizers/locale.d.ts +0 -116
- package/out/synthesizers/locale.d.ts.map +0 -1
- package/out/synthesizers/locale.js +0 -150
- package/out/synthesizers/locale.js.map +0 -1
- package/out/synthesizers/street.d.ts.map +0 -1
- package/out/synthesizers/street.js.map +0 -1
- package/out/test-kit/index.d.ts +0 -48
- package/out/test-kit/index.d.ts.map +0 -1
- package/out/test-kit/index.js +0 -78
- package/out/test-kit/index.js.map +0 -1
- package/out/tools/align-slice.d.ts +0 -7
- package/out/tools/align-slice.d.ts.map +0 -1
- package/out/tools/align-slice.js +0 -55
- package/out/tools/align-slice.js.map +0 -1
- package/out/tools/fetch/download/index.d.ts.map +0 -1
- package/out/tools/fetch/download/index.js.map +0 -1
- package/out/tools/fetch/index.d.ts +0 -171
- package/out/tools/fetch/index.d.ts.map +0 -1
- package/out/tools/fetch/index.js +0 -170
- package/out/tools/fetch/index.js.map +0 -1
- package/out/tools/gb-title-case.d.ts +0 -2
- package/out/tools/gb-title-case.d.ts.map +0 -1
- package/out/tools/gb-title-case.js +0 -65
- package/out/tools/gb-title-case.js.map +0 -1
- package/out/tools/golden/relabel-street/index.d.ts.map +0 -1
- package/out/tools/golden/relabel-street/index.js.map +0 -1
- package/out/tools/index.d.ts +0 -28
- package/out/tools/index.d.ts.map +0 -1
- package/out/tools/index.js +0 -28
- package/out/tools/index.js.map +0 -1
- package/out/tools/lint/slice/index.d.ts +0 -93
- package/out/tools/lint/slice/index.d.ts.map +0 -1
- package/out/tools/lint/slice/index.js.map +0 -1
- package/out/tools/lint/slice/vocab.d.ts +0 -90
- package/out/tools/lint/slice/vocab.d.ts.map +0 -1
- package/out/tools/lint/slice/vocab.js.map +0 -1
- package/out/tools/overlay-manifest.d.ts +0 -89
- package/out/tools/overlay-manifest.d.ts.map +0 -1
- package/out/tools/overlay-manifest.js +0 -131
- package/out/tools/overlay-manifest.js.map +0 -1
- package/out/tools/slice/kryptonite.d.ts +0 -32
- package/out/tools/slice/kryptonite.d.ts.map +0 -1
- package/out/tools/slice/kryptonite.js.map +0 -1
- package/out/tools/slice/translit.d.ts +0 -51
- package/out/tools/slice/translit.d.ts.map +0 -1
- package/out/tools/slice/translit.js.map +0 -1
- package/out/tools/sub/venue/harvest.d.ts +0 -100
- package/out/tools/sub/venue/harvest.d.ts.map +0 -1
- package/out/tools/sub/venue/harvest.js +0 -168
- package/out/tools/sub/venue/harvest.js.map +0 -1
- package/out/tools/sub/venue/promotions.d.ts +0 -94
- package/out/tools/sub/venue/promotions.d.ts.map +0 -1
- package/out/tools/sub/venue/promotions.js.map +0 -1
- package/out/tools/sub/venue/surfaces.d.ts +0 -45
- package/out/tools/sub/venue/surfaces.d.ts.map +0 -1
- package/out/tools/sub/venue/surfaces.js +0 -77
- package/out/tools/sub/venue/surfaces.js.map +0 -1
- package/out/tools/sub/venue/table.d.ts +0 -229
- package/out/tools/sub/venue/table.d.ts.map +0 -1
- package/out/tools/sub/venue/table.js +0 -108
- package/out/tools/sub/venue/table.js.map +0 -1
- package/out/utils/index.d.ts.map +0 -1
- package/out/utils/index.js.map +0 -1
- package/out/utils/parquet.d.ts +0 -178
- package/out/utils/parquet.d.ts.map +0 -1
- package/out/utils/parquet.js +0 -371
- package/out/utils/parquet.js.map +0 -1
- package/out/utils/slice-stats.d.ts +0 -52
- package/out/utils/slice-stats.d.ts.map +0 -1
- package/out/utils/slice-stats.js +0 -58
- package/out/utils/slice-stats.js.map +0 -1
- /package/lib/tools/fetch/{download/index.ts → download.ts} +0 -0
- /package/lib/tools/golden/{relabel-street/index.ts → relabel-street.ts} +0 -0
|
@@ -0,0 +1,531 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*
|
|
6
|
+
* Downloads the `Matrikkelen - Adresse` CSV extracts Kartverket publishes through Geonorge.
|
|
7
|
+
*
|
|
8
|
+
* ## Two areas, because the adapter emits two jurisdictions
|
|
9
|
+
*
|
|
10
|
+
* `#no/adapters/matrikkelen/adapter` reads `kommunenummer` to decide a row's country, and
|
|
11
|
+
* municipality 2100 is Svalbard rather than the mainland. Geonorge publishes the dataset per area
|
|
12
|
+
* from one 375-entry area list, and the two entries this repository reads are `0000` `Hele landet`
|
|
13
|
+
* and `2100` `Svalbard`. The mainland extract has no Svalbard row, so taking only `0000` would
|
|
14
|
+
* leave `SJ` with no rows while the adapter still claimed to cover it.
|
|
15
|
+
*
|
|
16
|
+
* Each area is a separate archive at the dataset's conventional download path, so no download
|
|
17
|
+
* order has to be placed through Geonorge's order API:
|
|
18
|
+
*
|
|
19
|
+
* …/MatrikkelenAdresse/CSV/Basisdata_<area>_<name>_4258_MatrikkelenAdresse_CSV.zip
|
|
20
|
+
*
|
|
21
|
+
* ## Why the member is extracted
|
|
22
|
+
*
|
|
23
|
+
* The adapter opens `opts.inputPath` with `CSVSpliterator.fromAsync`. That reader takes a
|
|
24
|
+
* delimited file rather than an archive, so the member is written out beside the archive it came
|
|
25
|
+
* from. The member is `matrikkelenAdresse.csv` in every area's archive, inside a directory whose
|
|
26
|
+
* name follows the archive. Each area is written under its own area-code directory, and the
|
|
27
|
+
* publisher's own file name is kept.
|
|
28
|
+
*
|
|
29
|
+
* The archive is kept rather than removed, because its sha256 is the value the address-source
|
|
30
|
+
* register records for the publication and the member's is not.
|
|
31
|
+
*
|
|
32
|
+
* ## Freshness
|
|
33
|
+
*
|
|
34
|
+
* Geonorge serves `last-modified` and `content-length` on the archive, and a regenerated extract
|
|
35
|
+
* changes both. A skip requires a stated `last-modified`: where the service states none, both
|
|
36
|
+
* sides read `null`, an equality test would hold, and an archive of unknown age would be kept for
|
|
37
|
+
* as long as the service stayed silent.
|
|
38
|
+
*
|
|
39
|
+
* ## The header is checked on arrival
|
|
40
|
+
*
|
|
41
|
+
* A renamed column reaches the adapter as an empty string on every row rather than as an error, so
|
|
42
|
+
* the extract's header is read through the same `CSVSpliterator` the adapter uses and checked
|
|
43
|
+
* against the nine columns the adapter indexes by name. The file's first column name has a
|
|
44
|
+
* byte-order mark, and none of the nine is that column, so the check does not depend on stripping
|
|
45
|
+
* the mark.
|
|
46
|
+
*/
|
|
47
|
+
|
|
48
|
+
import { APIClient } from "@mailwoman/core/api"
|
|
49
|
+
import { ByteFormatter } from "@mailwoman/core/fs/formatters"
|
|
50
|
+
import { tryStat } from "@mailwoman/core/fs/readers/stat"
|
|
51
|
+
import { makeDirectories } from "@mailwoman/core/fs/writers"
|
|
52
|
+
import { extractZipEntry } from "@mailwoman/core/fs/zip"
|
|
53
|
+
import { sha256File } from "@mailwoman/core/hash"
|
|
54
|
+
import { PathBuilder, type PathBuilderLike } from "path-ts"
|
|
55
|
+
|
|
56
|
+
import { MATRIKKELEN_ADAPTER_ID } from "#no/adapters/matrikkelen/adapter"
|
|
57
|
+
import type { BaseFetchOptions, FetchSummary, SourceCollectionManifest, SourceManifest } from "#tools/fetch/download"
|
|
58
|
+
import { downloadToFile, loadCollectionFiles, writeManifest } from "#tools/fetch/download"
|
|
59
|
+
import { assertHeaderColumns, readDelimitedHeader } from "#tools/fetch/header"
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* One area of the dataset, as Geonorge's own area list for it spells the two parts of its file name.
|
|
63
|
+
*/
|
|
64
|
+
export interface MatrikkelenArea {
|
|
65
|
+
/**
|
|
66
|
+
* The area code.
|
|
67
|
+
* Each area is written under this directory.
|
|
68
|
+
*/
|
|
69
|
+
code: string
|
|
70
|
+
/**
|
|
71
|
+
* The area name as the download path spells it.
|
|
72
|
+
*
|
|
73
|
+
* That name differs from the list's `name`: the list calls area `0000` `Hele landet`,
|
|
74
|
+
* and the path calls it `Norge`.
|
|
75
|
+
*/
|
|
76
|
+
pathName: string
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* The areas a fetch takes when a caller gives no codes.
|
|
81
|
+
*
|
|
82
|
+
* `0000` is the mainland and `2100` is Svalbard.
|
|
83
|
+
* These are the two areas the address-source register holds rows for.
|
|
84
|
+
*
|
|
85
|
+
* Svalbard is also published as `fylke` 21.
|
|
86
|
+
* That area holds the same rows as kommune 2100.
|
|
87
|
+
*/
|
|
88
|
+
export const MATRIKKELEN_AREAS: readonly MatrikkelenArea[] = [
|
|
89
|
+
{ code: "0000", pathName: "Norge" },
|
|
90
|
+
{ code: "2100", pathName: "Svalbard" },
|
|
91
|
+
]
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* The area code of the whole-country extract.
|
|
95
|
+
* That extract holds every mainland municipality.
|
|
96
|
+
*/
|
|
97
|
+
export const MATRIKKELEN_MAINLAND_AREA = "0000"
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* The projection the CSV extracts are taken in.
|
|
101
|
+
*
|
|
102
|
+
* EPSG:4258 is the geographic projection, and it is the one the register measured.
|
|
103
|
+
* The same extract is published in EPSG:25833 and differs only in its coordinates.
|
|
104
|
+
*/
|
|
105
|
+
export const MATRIKKELEN_PROJECTION = "4258"
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* The directory the dataset's per-area archives sit in.
|
|
109
|
+
*/
|
|
110
|
+
export const MATRIKKELEN_DOWNLOAD_ROOT = "https://nedlasting.geonorge.no/geonorge/Basisdata/MatrikkelenAdresse/CSV"
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* The dataset's metadata record.
|
|
114
|
+
* That record states the elected license.
|
|
115
|
+
*/
|
|
116
|
+
export const MATRIKKELEN_METADATA_URL =
|
|
117
|
+
"https://kartkatalog.geonorge.no/api/getdata/f7df7a18-b30f-4745-bd64-d0863812350c"
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* The name of the member inside every area's archive, and of the file the adapter reads.
|
|
121
|
+
*/
|
|
122
|
+
export const MATRIKKELEN_MEMBER_FILENAME = "matrikkelenAdresse.csv"
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* The column delimiter the publisher writes.
|
|
126
|
+
*/
|
|
127
|
+
export const MATRIKKELEN_DELIMITER = ";"
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* The columns `#no/adapters/matrikkelen/adapter` reads by name.
|
|
131
|
+
*
|
|
132
|
+
* Checked against the extract's header on arrival, because a renamed column reaches
|
|
133
|
+
* the adapter as an empty string on every row rather than as an error.
|
|
134
|
+
*/
|
|
135
|
+
export const MATRIKKELEN_REQUIRED_COLUMNS: readonly string[] = [
|
|
136
|
+
"kommunenummer",
|
|
137
|
+
"adressetype",
|
|
138
|
+
"adressenavn",
|
|
139
|
+
"nummer",
|
|
140
|
+
"bokstav",
|
|
141
|
+
"adresseTekst",
|
|
142
|
+
"postnummer",
|
|
143
|
+
"poststed",
|
|
144
|
+
"adresseId",
|
|
145
|
+
]
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* The attribution CC BY 4.0 §3(a)(1) requires on a publication derived from these rows.
|
|
149
|
+
*/
|
|
150
|
+
export const MATRIKKELEN_ATTRIBUTION = "Kartverket"
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* The license the address-source register elected for this publisher.
|
|
154
|
+
*
|
|
155
|
+
* Kartverket's metadata record states CC BY 4.0 across five agreeing fields,
|
|
156
|
+
* and the adapter stamps the same identifier on every row.
|
|
157
|
+
*/
|
|
158
|
+
export const MATRIKKELEN_LICENSE = "CC-BY-4.0"
|
|
159
|
+
|
|
160
|
+
const SLUG = MATRIKKELEN_ADAPTER_ID
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* The archive's name for one area.
|
|
164
|
+
* The fetch writes the archive under this name.
|
|
165
|
+
*/
|
|
166
|
+
export function matrikkelenArchiveFilename(area: MatrikkelenArea): string {
|
|
167
|
+
return `Basisdata_${area.code}_${area.pathName}_${MATRIKKELEN_PROJECTION}_MatrikkelenAdresse_CSV.zip`
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* The archive's URL for one area.
|
|
172
|
+
*/
|
|
173
|
+
export function matrikkelenArchiveURL(area: MatrikkelenArea): string {
|
|
174
|
+
return `${MATRIKKELEN_DOWNLOAD_ROOT}/${matrikkelenArchiveFilename(area)}`
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* What one area's run recorded.
|
|
179
|
+
*
|
|
180
|
+
* `last_modified` is the service's own header and the one freshness signal it offers,
|
|
181
|
+
* so a changed value is the one reason to download that area again.
|
|
182
|
+
* `bytes` and `sha256` describe the archive.
|
|
183
|
+
*
|
|
184
|
+
* The address-source register records a digest for that artifact.
|
|
185
|
+
*/
|
|
186
|
+
export interface MatrikkelenFileManifest extends SourceManifest {
|
|
187
|
+
area_code: string
|
|
188
|
+
last_modified: string | null
|
|
189
|
+
member_filename: string
|
|
190
|
+
member_bytes: number
|
|
191
|
+
member_sha256: string
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* The recorded entry for one area, or `null` where the manifest holds none that can decide a skip.
|
|
196
|
+
*
|
|
197
|
+
* `loadCollectionFiles` reads the shared collection shape.
|
|
198
|
+
* That shape states the fields common to every source's manifest and omits this source's area fields.
|
|
199
|
+
*
|
|
200
|
+
* An entry written before those fields existed, or written with no stated `last_modified`,
|
|
201
|
+
* cannot answer whether the archive on disk is current, and this reports that as
|
|
202
|
+
* no recorded entry rather than as an entry that disagrees.
|
|
203
|
+
*/
|
|
204
|
+
export function recordedMatrikkelenArea(entry: SourceManifest | null): MatrikkelenFileManifest | null {
|
|
205
|
+
const candidate = entry as (Partial<MatrikkelenFileManifest> & SourceManifest) | null
|
|
206
|
+
|
|
207
|
+
if (!candidate) return null
|
|
208
|
+
|
|
209
|
+
const complete =
|
|
210
|
+
typeof candidate.area_code === "string" &&
|
|
211
|
+
typeof candidate.last_modified === "string" &&
|
|
212
|
+
typeof candidate.member_filename === "string" &&
|
|
213
|
+
typeof candidate.member_bytes === "number" &&
|
|
214
|
+
typeof candidate.member_sha256 === "string"
|
|
215
|
+
|
|
216
|
+
return complete ? (candidate as MatrikkelenFileManifest) : null
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* What the service's HEAD response states about one area's archive.
|
|
221
|
+
*
|
|
222
|
+
* Both fields read `null` where the header is absent, rather than an empty string or zero.
|
|
223
|
+
* An absent `last-modified` is the service declining to state a version.
|
|
224
|
+
* That differs from a version that matches the one on disk.
|
|
225
|
+
*/
|
|
226
|
+
export interface MatrikkelenPublication {
|
|
227
|
+
lastModified: string | null
|
|
228
|
+
reportedBytes: number | null
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Reads the service's HEAD response for one area.
|
|
233
|
+
*
|
|
234
|
+
* Separate from {@linkcode downloadMatrikkelen}: this request supplies the whole freshness decision.
|
|
235
|
+
* The download itself runs on global `fetch`, so a unit test cannot intercept it.
|
|
236
|
+
*/
|
|
237
|
+
export async function readMatrikkelenPublication(
|
|
238
|
+
client: Pick<APIClient, "fetch">,
|
|
239
|
+
area: MatrikkelenArea,
|
|
240
|
+
options: { signal?: AbortSignal } = {}
|
|
241
|
+
): Promise<MatrikkelenPublication> {
|
|
242
|
+
const head = await client.fetch<unknown>({
|
|
243
|
+
method: "HEAD",
|
|
244
|
+
url: matrikkelenArchiveURL(area),
|
|
245
|
+
timeout: 120_000,
|
|
246
|
+
signal: options.signal,
|
|
247
|
+
})
|
|
248
|
+
|
|
249
|
+
const reported = Number(head.headers?.["content-length"] ?? Number.NaN)
|
|
250
|
+
|
|
251
|
+
return {
|
|
252
|
+
lastModified: String(head.headers?.["last-modified"] ?? "") || null,
|
|
253
|
+
reportedBytes: Number.isFinite(reported) ? reported : null,
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Whether one area's archive and extract on disk are the ones the service currently serves.
|
|
259
|
+
*
|
|
260
|
+
* A skip requires the service to state a `last-modified` value.
|
|
261
|
+
* Where it states none, both sides read `null` and an equality test would hold.
|
|
262
|
+
*
|
|
263
|
+
* That would keep an archive of unknown age for as long as the service stayed silent.
|
|
264
|
+
*/
|
|
265
|
+
export function matrikkelenPublicationIsRecorded(
|
|
266
|
+
recorded: MatrikkelenFileManifest,
|
|
267
|
+
bytesOnDisk: number,
|
|
268
|
+
memberBytesOnDisk: number,
|
|
269
|
+
publication: MatrikkelenPublication
|
|
270
|
+
): boolean {
|
|
271
|
+
if (!publication.lastModified) return false
|
|
272
|
+
|
|
273
|
+
return (
|
|
274
|
+
recorded.last_modified === publication.lastModified &&
|
|
275
|
+
recorded.bytes === bytesOnDisk &&
|
|
276
|
+
recorded.member_bytes === memberBytesOnDisk
|
|
277
|
+
)
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* The areas for the given codes, or every area in {@linkcode MATRIKKELEN_AREAS}.
|
|
282
|
+
*
|
|
283
|
+
* @throws When the area list holds no matching area, the error states the unmatched codes.
|
|
284
|
+
* A typed code then reports itself rather than reading as a fetch of no areas.
|
|
285
|
+
*/
|
|
286
|
+
export function matrikkelenAreasFor(codes: readonly string[] | null): readonly MatrikkelenArea[] {
|
|
287
|
+
if (!codes?.length) return MATRIKKELEN_AREAS
|
|
288
|
+
|
|
289
|
+
const wanted = codes.map((code) => code.trim()).filter((code) => code.length > 0)
|
|
290
|
+
const absent = wanted.filter((code) => !MATRIKKELEN_AREAS.some((area) => area.code === code))
|
|
291
|
+
|
|
292
|
+
if (absent.length) {
|
|
293
|
+
throw new Error(
|
|
294
|
+
`${SLUG}: ${absent.join(", ")} is not an area this fetcher carries a download path for — it carries ${MATRIKKELEN_AREAS.map((area) => area.code).join(", ")}`
|
|
295
|
+
)
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
return MATRIKKELEN_AREAS.filter((area) => wanted.includes(area.code))
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* Per-invocation options.
|
|
303
|
+
*/
|
|
304
|
+
export interface DownloadMatrikkelenOptions {
|
|
305
|
+
outputDir: PathBuilderLike
|
|
306
|
+
/**
|
|
307
|
+
* The areas to take, defaulting to {@linkcode MATRIKKELEN_AREAS}.
|
|
308
|
+
*/
|
|
309
|
+
areas?: readonly MatrikkelenArea[]
|
|
310
|
+
/**
|
|
311
|
+
* Downloads each area even where the manifest's `last_modified` and byte counts still match.
|
|
312
|
+
*/
|
|
313
|
+
force?: boolean
|
|
314
|
+
retries?: number
|
|
315
|
+
retryDelayMs?: number
|
|
316
|
+
signal?: AbortSignal
|
|
317
|
+
report?: (line: string) => void
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* Downloads one area's archive, extracts the member the adapter reads and checks its header.
|
|
322
|
+
*
|
|
323
|
+
* @returns The manifest entry for the area.
|
|
324
|
+
* The collection manifest holds it.
|
|
325
|
+
*/
|
|
326
|
+
export async function downloadMatrikkelenArea(
|
|
327
|
+
client: Pick<APIClient, "fetch">,
|
|
328
|
+
area: MatrikkelenArea,
|
|
329
|
+
options: {
|
|
330
|
+
outputDir: PathBuilderLike
|
|
331
|
+
recorded?: MatrikkelenFileManifest | null
|
|
332
|
+
force?: boolean
|
|
333
|
+
retries?: number
|
|
334
|
+
retryDelayMs?: number
|
|
335
|
+
signal?: AbortSignal
|
|
336
|
+
report?: (line: string) => void
|
|
337
|
+
}
|
|
338
|
+
): Promise<{ entry: MatrikkelenFileManifest; downloaded: boolean }> {
|
|
339
|
+
const { report } = options
|
|
340
|
+
const archiveFilename = matrikkelenArchiveFilename(area)
|
|
341
|
+
const areaDir = PathBuilder.from(options.outputDir)(area.code)
|
|
342
|
+
const archivePath = areaDir(archiveFilename)
|
|
343
|
+
const memberPath = areaDir(MATRIKKELEN_MEMBER_FILENAME)
|
|
344
|
+
|
|
345
|
+
report?.(`=== ${SLUG} / ${archiveFilename}`)
|
|
346
|
+
|
|
347
|
+
const publication = await readMatrikkelenPublication(client, area, { signal: options.signal })
|
|
348
|
+
|
|
349
|
+
report?.(
|
|
350
|
+
` HEAD: ${publication.reportedBytes === null ? "no content-length" : ByteFormatter.formatIEC(publication.reportedBytes)}` +
|
|
351
|
+
`, last-modified ${publication.lastModified ?? "unstated"}`
|
|
352
|
+
)
|
|
353
|
+
|
|
354
|
+
await makeDirectories(areaDir)
|
|
355
|
+
|
|
356
|
+
const archiveStat = await tryStat(archivePath)
|
|
357
|
+
const memberStat = await tryStat(memberPath)
|
|
358
|
+
|
|
359
|
+
if (
|
|
360
|
+
!options.force &&
|
|
361
|
+
options.recorded &&
|
|
362
|
+
archiveStat &&
|
|
363
|
+
memberStat &&
|
|
364
|
+
matrikkelenPublicationIsRecorded(options.recorded, archiveStat.size, memberStat.size, publication)
|
|
365
|
+
) {
|
|
366
|
+
report?.(` present, and the service's last-modified is unchanged`)
|
|
367
|
+
|
|
368
|
+
return { entry: options.recorded, downloaded: false }
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
const { bytes } = await downloadToFile({
|
|
372
|
+
url: matrikkelenArchiveURL(area),
|
|
373
|
+
dest: archivePath,
|
|
374
|
+
retries: options.retries,
|
|
375
|
+
retryDelayMs: options.retryDelayMs,
|
|
376
|
+
report,
|
|
377
|
+
})
|
|
378
|
+
|
|
379
|
+
const sha256 = await sha256File(archivePath)
|
|
380
|
+
|
|
381
|
+
report?.(` ✓ ${ByteFormatter.formatIEC(bytes)} sha256=${sha256}`)
|
|
382
|
+
|
|
383
|
+
// The member sits inside a directory whose name follows the archive, so the selector
|
|
384
|
+
// matches the name's tail rather than the whole archive-internal path.
|
|
385
|
+
const memberBytes = await extractZipEntry(archivePath, /(?:^|\/)matrikkelenAdresse\.csv$/u, memberPath)
|
|
386
|
+
|
|
387
|
+
const header = await readDelimitedHeader(memberPath, MATRIKKELEN_DELIMITER)
|
|
388
|
+
|
|
389
|
+
assertHeaderColumns(header, MATRIKKELEN_REQUIRED_COLUMNS, `${SLUG} ${area.code} ${MATRIKKELEN_MEMBER_FILENAME}`)
|
|
390
|
+
|
|
391
|
+
const memberSHA256 = await sha256File(memberPath)
|
|
392
|
+
|
|
393
|
+
report?.(
|
|
394
|
+
` ${MATRIKKELEN_MEMBER_FILENAME}: ${ByteFormatter.formatIEC(memberBytes)} over ${header.length} columns sha256=${memberSHA256}`
|
|
395
|
+
)
|
|
396
|
+
|
|
397
|
+
return {
|
|
398
|
+
entry: {
|
|
399
|
+
source_url: matrikkelenArchiveURL(area),
|
|
400
|
+
filename: archiveFilename,
|
|
401
|
+
area_code: area.code,
|
|
402
|
+
bytes,
|
|
403
|
+
sha256,
|
|
404
|
+
last_modified: publication.lastModified,
|
|
405
|
+
member_filename: MATRIKKELEN_MEMBER_FILENAME,
|
|
406
|
+
member_bytes: memberBytes,
|
|
407
|
+
member_sha256: memberSHA256,
|
|
408
|
+
downloaded_at: new Date().toISOString(),
|
|
409
|
+
},
|
|
410
|
+
downloaded: true,
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
/**
|
|
415
|
+
* Downloads every requested area and writes the collection manifest beside them.
|
|
416
|
+
*
|
|
417
|
+
* An area that fails is counted and the rest are still taken, because the two areas are
|
|
418
|
+
* separate publications and Svalbard's 57 KiB does not depend on the mainland's 145 MiB.
|
|
419
|
+
*/
|
|
420
|
+
export async function downloadMatrikkelen(
|
|
421
|
+
client: Pick<APIClient, "fetch">,
|
|
422
|
+
options: DownloadMatrikkelenOptions
|
|
423
|
+
): Promise<FetchSummary> {
|
|
424
|
+
const { report } = options
|
|
425
|
+
const destDir = PathBuilder.from(options.outputDir)
|
|
426
|
+
const manifestPath = destDir("MANIFEST.json")
|
|
427
|
+
const areas = options.areas ?? MATRIKKELEN_AREAS
|
|
428
|
+
|
|
429
|
+
await makeDirectories(destDir)
|
|
430
|
+
|
|
431
|
+
const entries = await loadCollectionFiles(manifestPath)
|
|
432
|
+
|
|
433
|
+
let fetched = 0
|
|
434
|
+
let skipped = 0
|
|
435
|
+
const failedCodes: string[] = []
|
|
436
|
+
|
|
437
|
+
for (const area of areas) {
|
|
438
|
+
if (options.signal?.aborted) break
|
|
439
|
+
|
|
440
|
+
try {
|
|
441
|
+
const { entry, downloaded } = await downloadMatrikkelenArea(client, area, {
|
|
442
|
+
outputDir: destDir,
|
|
443
|
+
recorded: recordedMatrikkelenArea(entries.get(matrikkelenArchiveFilename(area)) ?? null),
|
|
444
|
+
force: options.force,
|
|
445
|
+
retries: options.retries,
|
|
446
|
+
retryDelayMs: options.retryDelayMs,
|
|
447
|
+
signal: options.signal,
|
|
448
|
+
report,
|
|
449
|
+
})
|
|
450
|
+
|
|
451
|
+
entries.set(entry.filename, entry)
|
|
452
|
+
|
|
453
|
+
if (downloaded) {
|
|
454
|
+
fetched += 1
|
|
455
|
+
} else {
|
|
456
|
+
skipped += 1
|
|
457
|
+
}
|
|
458
|
+
} catch (error) {
|
|
459
|
+
report?.(` ✗ ${area.code}: ${error instanceof Error ? error.message : String(error)}`)
|
|
460
|
+
|
|
461
|
+
failedCodes.push(area.code)
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
const manifest: SourceCollectionManifest = {
|
|
466
|
+
source: SLUG,
|
|
467
|
+
source_url: MATRIKKELEN_METADATA_URL,
|
|
468
|
+
license: MATRIKKELEN_LICENSE,
|
|
469
|
+
attribution: MATRIKKELEN_ATTRIBUTION,
|
|
470
|
+
downloaded_at: new Date().toISOString(),
|
|
471
|
+
// Sorted by area code, so the manifest's order is the area list's rather than the run's.
|
|
472
|
+
files: [...entries.values()].toSorted((left, right) => left.filename.localeCompare(right.filename)),
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
await writeManifest(manifestPath, manifest)
|
|
476
|
+
|
|
477
|
+
report?.(` MANIFEST written to ${manifestPath}`)
|
|
478
|
+
|
|
479
|
+
return { fetched, skipped, failed: failedCodes.length, failedCodes }
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
/**
|
|
483
|
+
* The path `#no/adapters/matrikkelen/adapter` reads for one area, given the root a fetch wrote under.
|
|
484
|
+
*
|
|
485
|
+
* The area is a parameter because the adapter covers two jurisdictions and reads one
|
|
486
|
+
* file at a time: `0000` holds Norway's rows and `2100` holds Svalbard's.
|
|
487
|
+
*/
|
|
488
|
+
export function matrikkelenInputPath(
|
|
489
|
+
outRoot: BaseFetchOptions["outRoot"],
|
|
490
|
+
areaCode: string = MATRIKKELEN_MAINLAND_AREA
|
|
491
|
+
): PathBuilderLike {
|
|
492
|
+
return outRoot(SLUG, areaCode, MATRIKKELEN_MEMBER_FILENAME)
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
/**
|
|
496
|
+
* Per-invocation options for the registry entry.
|
|
497
|
+
*/
|
|
498
|
+
export interface FetchMatrikkelenOptions extends BaseFetchOptions {
|
|
499
|
+
/**
|
|
500
|
+
* Geonorge area codes, defaulting to every area in {@linkcode MATRIKKELEN_AREAS}.
|
|
501
|
+
*/
|
|
502
|
+
areas?: readonly string[]
|
|
503
|
+
force?: boolean
|
|
504
|
+
retries?: number
|
|
505
|
+
retryDelayMs?: number
|
|
506
|
+
signal?: AbortSignal
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
/**
|
|
510
|
+
* The registry entry.
|
|
511
|
+
*/
|
|
512
|
+
export async function fetchMatrikkelen(
|
|
513
|
+
options: FetchMatrikkelenOptions,
|
|
514
|
+
report?: (line: string) => void
|
|
515
|
+
): Promise<FetchSummary> {
|
|
516
|
+
const areas = matrikkelenAreasFor(options.areas ?? null)
|
|
517
|
+
|
|
518
|
+
await using client = new APIClient({ displayName: SLUG, retry: true })
|
|
519
|
+
|
|
520
|
+
// Awaited rather than returned: `await using` disposes the client when this scope exits,
|
|
521
|
+
// and a disposed `APIClient` refuses every later request.
|
|
522
|
+
return await downloadMatrikkelen(client, {
|
|
523
|
+
outputDir: options.outRoot(SLUG),
|
|
524
|
+
areas,
|
|
525
|
+
force: options.force,
|
|
526
|
+
retries: options.retries,
|
|
527
|
+
retryDelayMs: options.retryDelayMs,
|
|
528
|
+
signal: options.signal,
|
|
529
|
+
report,
|
|
530
|
+
})
|
|
531
|
+
}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
* @file The DuckDB boundary for the parquet family — the one place that opens a connection and the two escapers every
|
|
6
|
+
* statement built here goes through.
|
|
7
|
+
*
|
|
8
|
+
* `@duckdb/node-api` is an optional peer, so the import is lazy: the native module loads only on the paths that read
|
|
9
|
+
* or write Parquet through DuckDB. A consumer that only needs the schema types never loads it.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* An open DuckDB connection, re-exported so consumers of {@link openDuckDB} can name
|
|
14
|
+
* the type without their own static dependency on the optional peer.
|
|
15
|
+
*/
|
|
16
|
+
export type { DuckDBConnection } from "@duckdb/node-api"
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* An in-memory DuckDB connection whose disposal also closes the instance behind it.
|
|
20
|
+
*
|
|
21
|
+
* Both closes are synchronous, so this is `Disposable` rather than `AsyncDisposable`,
|
|
22
|
+
* the same as {@link DatabaseClient}.
|
|
23
|
+
*/
|
|
24
|
+
export type DisposableDuckDB = import("@duckdb/node-api").DuckDBConnection & Disposable
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The share of host memory one DuckDB instance may hold.
|
|
28
|
+
*
|
|
29
|
+
* DuckDB allocates outside the V8 heap, so `--max-old-space-size` does not bound it and a query
|
|
30
|
+
* over a corpus with hundreds of millions of rows will exhaust the host rather than spill.
|
|
31
|
+
* A `COUNT(DISTINCT …)` over `v0.6.0-register-surface`'s 697,675,170 train rows did
|
|
32
|
+
* that twice on 2026-09-28, with a second corpus tool running beside it.
|
|
33
|
+
*
|
|
34
|
+
* Two instances at half the host exceed it together.
|
|
35
|
+
*
|
|
36
|
+
* That case took the machine down.
|
|
37
|
+
* A quarter admits four concurrent instances and still leaves room for the page cache the
|
|
38
|
+
* parquet reads run through and for the Node heap of each process holding a connection.
|
|
39
|
+
*
|
|
40
|
+
* Past its limit DuckDB spills to `temp_directory`.
|
|
41
|
+
* The query finishes slower.
|
|
42
|
+
* That is the failure to prefer.
|
|
43
|
+
*
|
|
44
|
+
* A caller that knows it holds the host by itself passes a larger `memoryLimitBytes`.
|
|
45
|
+
*
|
|
46
|
+
* @defaultValue a quarter because it has to bound the host rather than one query.
|
|
47
|
+
*/
|
|
48
|
+
export const DUCKDB_MEMORY_SHARE = 0.25
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Per-instance settings, applied on every connection this module opens.
|
|
52
|
+
*/
|
|
53
|
+
export interface DuckDBLimits {
|
|
54
|
+
/**
|
|
55
|
+
* Bytes one instance may hold before it spills.
|
|
56
|
+
* @defaultValue {@linkcode DUCKDB_MEMORY_SHARE} of host memory.
|
|
57
|
+
*/
|
|
58
|
+
memoryLimitBytes?: number
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Worker threads.
|
|
62
|
+
*
|
|
63
|
+
* A build phase that runs DuckDB beside other work sets this, because each thread
|
|
64
|
+
* holds its own share of the memory limit and the default takes every core.
|
|
65
|
+
*
|
|
66
|
+
* @defaultValue DuckDB's own choice.
|
|
67
|
+
*/
|
|
68
|
+
threads?: number
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Where a spill is written.
|
|
72
|
+
*
|
|
73
|
+
* The default sits under the data root rather than in the system temporary directory,
|
|
74
|
+
* because a spill from a corpus-sized query is tens of gigabytes and `/tmp` is commonly a
|
|
75
|
+
* memory-backed filesystem, where spilling to it consumes the memory the spill exists to release.
|
|
76
|
+
*
|
|
77
|
+
* @defaultValue the data root's `tmp/duckdb`.
|
|
78
|
+
*/
|
|
79
|
+
temporaryDirectory?: string
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Open an in-memory DuckDB connection, taken with `using db = await openDuckDB()`.
|
|
84
|
+
*
|
|
85
|
+
* The connection is returned directly, so it reads as a connection at every call site.
|
|
86
|
+
* Disposal closes the connection and then the instance.
|
|
87
|
+
*
|
|
88
|
+
* An open connection holds the native instance for the life of the process.
|
|
89
|
+
* A connection opened per file in a loop holds one instance per file.
|
|
90
|
+
*
|
|
91
|
+
* Every connection has a memory limit.
|
|
92
|
+
* It is set here rather than at each call site because host memory exhaustion affects
|
|
93
|
+
* every process, including processes unrelated to the query that caused it.
|
|
94
|
+
*/
|
|
95
|
+
export async function openDuckDB(limits: DuckDBLimits = {}): Promise<DisposableDuckDB> {
|
|
96
|
+
const { DuckDBInstance } = await import("@duckdb/node-api")
|
|
97
|
+
const { dataRootPath } = await import("@mailwoman/core/data-root")
|
|
98
|
+
const { ByteFormatter } = await import("@mailwoman/core/fs/formatters")
|
|
99
|
+
const { makeDirectories } = await import("@mailwoman/core/fs/writers")
|
|
100
|
+
const { totalMemoryBytes } = await import("@mailwoman/core/utils/system")
|
|
101
|
+
|
|
102
|
+
const memoryLimitBytes = limits.memoryLimitBytes ?? Math.floor(totalMemoryBytes() * DUCKDB_MEMORY_SHARE)
|
|
103
|
+
const temporaryDirectory = limits.temporaryDirectory ?? dataRootPath("tmp", "duckdb").toString()
|
|
104
|
+
|
|
105
|
+
// DuckDB writes a spill file rather than creating the directory, so a missing
|
|
106
|
+
// one turns a spill into a failed query.
|
|
107
|
+
// Created here, where the default is chosen.
|
|
108
|
+
await makeDirectories(temporaryDirectory)
|
|
109
|
+
|
|
110
|
+
const instance = await DuckDBInstance.create(":memory:", {
|
|
111
|
+
// DuckDB parses the value, so it takes a string with a unit rather than a byte count.
|
|
112
|
+
// `formatIEC` writes the binary unit DuckDB reads back verbatim; `formatSI`'s `MB`
|
|
113
|
+
// would be read as decimal megabytes and set a limit 4.9% under the one this asked for.
|
|
114
|
+
memory_limit: ByteFormatter.formatIEC(memoryLimitBytes),
|
|
115
|
+
temp_directory: temporaryDirectory,
|
|
116
|
+
...(limits.threads ? { threads: String(limits.threads) } : {}),
|
|
117
|
+
})
|
|
118
|
+
|
|
119
|
+
const connection = await instance.connect()
|
|
120
|
+
|
|
121
|
+
return Object.assign(connection, {
|
|
122
|
+
[Symbol.dispose]: () => {
|
|
123
|
+
connection.closeSync()
|
|
124
|
+
instance.closeSync()
|
|
125
|
+
},
|
|
126
|
+
})
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Escape `value` for a single-quoted SQL string literal.
|
|
131
|
+
*
|
|
132
|
+
* The caller supplies the quotes.
|
|
133
|
+
*/
|
|
134
|
+
export function escapeSQLString(value: string): string {
|
|
135
|
+
return value.replaceAll("'", "''")
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Escape `value` as a double-quoted SQL identifier, for a column name that reaches a statement from data.
|
|
140
|
+
*
|
|
141
|
+
* A projection names columns the caller chose, so the name is not a literal this module wrote.
|
|
142
|
+
* Quotes preserve a column whose name collides with a keyword — or includes a space —
|
|
143
|
+
* from re-parsing as syntax.
|
|
144
|
+
*/
|
|
145
|
+
export function escapeSQLIdentifier(value: string): string {
|
|
146
|
+
return `"${value.replaceAll('"', '""')}"`
|
|
147
|
+
}
|