@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.
Files changed (1382) hide show
  1. package/README.md +120 -34
  2. package/data/PROVENANCE.md +623 -17
  3. package/data/address-source-register.json +14249 -0
  4. package/data/builds/v0.7.0-de-holdout/inputs.json +22 -0
  5. package/data/builds/v0.8.0-registers/inputs.json +92 -0
  6. package/data/license-decisions.json +1603 -0
  7. package/data/licenses/PROVENANCE.md +65 -0
  8. package/data/licenses/cdla-permissive-2.0.md +43 -0
  9. package/data/licenses/geonames-publication.md +34 -0
  10. package/data/licenses/licence-ouverte-2.0.md +36 -0
  11. package/data/licenses/national-address-database.md +46 -0
  12. package/data/licenses/nlod-2.0.md +90 -0
  13. package/data/licenses/sirene-publication.md +38 -0
  14. package/data/licenses/whosonfirst-licenses.md +65 -0
  15. package/data/source-resolutions.json +804 -0
  16. package/data/sub-venue-lexicon.json +1 -1
  17. package/data/training-manifests/v0.7.0-de-holdout.effective.json +477 -0
  18. package/data/training-manifests/v0.7.0-de-holdout.json +78 -0
  19. package/lib/adapters/cordis/adapter.ts +791 -0
  20. package/lib/adapters/dedup-key.ts +40 -0
  21. package/lib/adapters/errors.ts +21 -0
  22. package/lib/adapters/geonames/adapter.ts +43 -53
  23. package/lib/adapters/geonames/postal/adapter.ts +31 -37
  24. package/lib/adapters/gleif/adapter.ts +829 -0
  25. package/lib/adapters/libpostal-dictionary.ts +37 -0
  26. package/lib/adapters/openaddresses/adapter.ts +52 -55
  27. package/lib/adapters/osm/adapter.ts +162 -83
  28. package/lib/adapters/overture/adapter.ts +52 -43
  29. package/lib/adapters/po-box/adapter.ts +207 -0
  30. package/lib/adapters/registry.ts +79 -0
  31. package/lib/adapters/sha256-stream.ts +49 -0
  32. package/lib/adapters/source-id.ts +49 -0
  33. package/lib/adapters/street-line.ts +136 -0
  34. package/lib/adapters/wof/admin/json/adapter.ts +50 -35
  35. package/lib/adapters/wof/json-rows.ts +57 -26
  36. package/lib/adapters/wof/postalcode-json/adapter.ts +63 -61
  37. package/lib/adapters.ts +230 -0
  38. package/lib/au/adapters/gnaf/adapter.ts +36 -44
  39. package/lib/au/adapters/gnaf/assemble.ts +31 -51
  40. package/lib/be/adapters/brussels/adapter.ts +566 -0
  41. package/lib/be/adapters/vlaanderen/adapter.ts +667 -0
  42. package/lib/be/adapters/wallonie/adapter.ts +537 -0
  43. package/lib/be/tools/fetch/brussels.ts +242 -0
  44. package/lib/be/tools/fetch/wallonie.ts +275 -0
  45. package/lib/build/adapters.ts +111 -0
  46. package/lib/build/align.ts +365 -0
  47. package/lib/build/checkpoint.ts +133 -0
  48. package/lib/build/eligibility.ts +96 -0
  49. package/lib/build/heap.ts +53 -0
  50. package/lib/build/inputs.ts +81 -0
  51. package/lib/build/rows.ts +21 -0
  52. package/lib/build/types.ts +234 -0
  53. package/lib/build.ts +127 -315
  54. package/lib/cn/recipes/organizational-units.ts +20 -41
  55. package/lib/cz/adapters/cuzk/adapter.ts +320 -0
  56. package/lib/cz/recipes/pcfirst-preposition.ts +40 -27
  57. package/lib/cz/tools/fetch/cuzk.ts +710 -0
  58. package/lib/de/recipes/locale.ts +69 -59
  59. package/lib/directory.ts +31 -0
  60. package/lib/dk/adapters/inspire/adapter.ts +345 -0
  61. package/lib/dk/tools/fetch/inspire.ts +323 -0
  62. package/lib/ee/adapters/ads/adapter.ts +240 -0
  63. package/lib/ee/tools/fetch/ads.ts +272 -0
  64. package/lib/env.ts +6 -2
  65. package/lib/es/adapters/bizkaia/adapter.ts +388 -0
  66. package/lib/es/adapters/catastro/adapter.ts +345 -0
  67. package/lib/es/adapters/gipuzkoa/adapter.ts +256 -0
  68. package/lib/es/adapters/navarra/adapter.ts +290 -0
  69. package/lib/es/cadastre.ts +194 -0
  70. package/lib/es/tools/fetch/bizkaia.ts +752 -0
  71. package/lib/es/tools/fetch/catastro.ts +765 -0
  72. package/lib/es/tools/fetch/gipuzkoa.ts +338 -0
  73. package/lib/es/tools/fetch/navarra.ts +496 -0
  74. package/lib/fi/adapters/ryhti/adapter.ts +319 -0
  75. package/lib/fi/tools/fetch/ryhti.ts +476 -0
  76. package/lib/fingerprints.ts +154 -0
  77. package/lib/fr/adapters/annuaire-education/adapter.ts +600 -0
  78. package/lib/fr/adapters/ban/adapter.ts +87 -59
  79. package/lib/fr/adapters/finess/adapter.ts +619 -0
  80. package/lib/fr/adapters/finess/postal-lines.ts +157 -0
  81. package/lib/fr/adapters/finess/voie-type.ts +201 -0
  82. package/lib/fr/insee-country.ts +62 -0
  83. package/lib/fr/recipes/admin-split.ts +38 -60
  84. package/lib/fr/recipes/bare-street.ts +37 -50
  85. package/lib/fr/recipes/fragment.ts +59 -142
  86. package/lib/fr/recipes/lieudit.ts +111 -73
  87. package/lib/fr/recipes/order.ts +32 -59
  88. package/lib/fr/{adapters/ban/street-decompose.ts → street-decompose.ts} +4 -3
  89. package/lib/fr/tools/fetch/annuaire-education.ts +309 -0
  90. package/lib/fr/tools/fetch/ban.ts +30 -20
  91. package/lib/fr/tools/fetch/finess.ts +353 -0
  92. package/lib/gauntlet-inputs.ts +92 -0
  93. package/lib/index.ts +9 -3
  94. package/lib/inspire/address.ts +465 -0
  95. package/lib/inspire/archive.ts +44 -0
  96. package/lib/inspire/errors.ts +72 -0
  97. package/lib/inspire/stream.ts +265 -0
  98. package/lib/international/recipes/locale.ts +146 -184
  99. package/lib/it/adapters/anac/adapter.ts +527 -0
  100. package/lib/it/tools/fetch/anac.ts +391 -0
  101. package/lib/jp/adapters/wof-admin/adapter.ts +29 -23
  102. package/lib/jp/tools/fetch/houjin.ts +19 -21
  103. package/lib/kr/adapters/juso/label-rows.ts +24 -44
  104. package/lib/kr/adapters/localdata/align.ts +20 -31
  105. package/lib/kr/adapters/localdata/key-index.ts +17 -25
  106. package/lib/kr/adapters/localdata/permit-rows.ts +34 -27
  107. package/lib/kr/tools/fetch/juso.ts +19 -21
  108. package/lib/kr/tools/fetch/localdata.ts +29 -30
  109. package/lib/lu/adapters/bd-adresses/adapter.ts +240 -0
  110. package/lib/lu/tools/fetch/bd-adresses.ts +353 -0
  111. package/lib/lv/adapters/varis/adapter.ts +500 -0
  112. package/lib/lv/tools/fetch/varis.ts +215 -0
  113. package/lib/nl/adapters/kadaster/adapter.ts +386 -0
  114. package/lib/nl/recipes/postcode.ts +46 -24
  115. package/lib/nl/tools/fetch/kadaster.ts +302 -0
  116. package/lib/no/adapters/matrikkelen/adapter.ts +188 -0
  117. package/lib/no/recipes/fragment.ts +34 -58
  118. package/lib/no/recipes/street/led.ts +44 -25
  119. package/lib/no/recipes/{street/index.ts → street.ts} +29 -11
  120. package/lib/no/tools/fetch/matrikkelen.ts +531 -0
  121. package/lib/parquet/duckdb.ts +147 -0
  122. package/lib/parquet/readers.ts +86 -0
  123. package/lib/parquet/schema.ts +214 -0
  124. package/lib/parquet/shuffle.ts +59 -0
  125. package/lib/parquet/span-sql.ts +54 -0
  126. package/lib/parquet/streams.ts +113 -0
  127. package/lib/parquet/writers.ts +452 -0
  128. package/lib/pl/adapters/emuia/adapter.ts +202 -0
  129. package/lib/pl/tools/fetch/emuia.ts +361 -0
  130. package/lib/recipes/anchor-absorption.ts +30 -19
  131. package/lib/recipes/bare/country.ts +24 -32
  132. package/lib/recipes/bare/postcode/eval.ts +1 -1
  133. package/lib/recipes/bare/postcode.ts +346 -0
  134. package/lib/recipes/boundary-stress.ts +37 -20
  135. package/lib/recipes/country-balanced.ts +66 -86
  136. package/lib/recipes/house-venue.ts +36 -14
  137. package/lib/recipes/intersection.ts +84 -62
  138. package/lib/recipes/po/box/cedex/au-nz.ts +3 -3
  139. package/lib/recipes/po/box/cedex/ca.ts +3 -2
  140. package/lib/recipes/po/box/cedex/fr.ts +4 -3
  141. package/lib/recipes/po/box/cedex/phrases.ts +7 -6
  142. package/lib/recipes/po/box/cedex/recipe.ts +31 -19
  143. package/lib/recipes/po/box/cedex/sources.ts +16 -4
  144. package/lib/recipes/po/box/cedex/us.ts +7 -2
  145. package/lib/recipes/po/{box/index.ts → box.ts} +39 -18
  146. package/lib/recipes/scaffold.ts +267 -158
  147. package/lib/recipes/sources.ts +412 -0
  148. package/lib/recipes/street/affix.ts +54 -154
  149. package/lib/recipes/street/bare.ts +30 -17
  150. package/lib/recipes/street.ts +35 -9
  151. package/lib/recipes/sub/venue/context.ts +32 -23
  152. package/lib/recipes/sub/venue/render.ts +170 -0
  153. package/lib/recipes/sub/venue/sources.ts +92 -248
  154. package/lib/recipes/sub/venue.ts +795 -0
  155. package/lib/recipes/trailing-region.ts +75 -87
  156. package/lib/recipes/unit/sources.ts +44 -0
  157. package/lib/recipes/unit.ts +101 -89
  158. package/lib/recipes/venue.ts +347 -0
  159. package/lib/{recipes/index.ts → recipes.ts} +15 -11
  160. package/lib/registers.ts +280 -0
  161. package/lib/ro/adapters/retea-scolara/adapter.ts +264 -0
  162. package/lib/ro/tools/fetch/retea-scolara.ts +187 -0
  163. package/lib/runner.ts +221 -84
  164. package/lib/sg/recipes/register.ts +47 -53
  165. package/lib/sg/tools/fetch/acra.ts +23 -28
  166. package/lib/si/recipes/bare-village.ts +34 -17
  167. package/lib/sk/adapters/inspire/adapter.ts +393 -0
  168. package/lib/sk/tools/fetch/inspire.ts +403 -0
  169. package/lib/source-register/effective-manifest.ts +659 -0
  170. package/lib/source-register/register.ts +539 -0
  171. package/lib/source-register/training-manifest.ts +218 -0
  172. package/lib/source-register/types.ts +589 -0
  173. package/lib/source-register.ts +71 -0
  174. package/lib/south-asia/recipes/register.ts +45 -26
  175. package/lib/subvenue/harvest.ts +251 -0
  176. package/lib/{tools/sub/venue → subvenue}/promotions.ts +33 -70
  177. package/lib/subvenue/surfaces.ts +94 -0
  178. package/lib/subvenue/table.ts +264 -0
  179. package/lib/surfaces/locale.ts +248 -0
  180. package/lib/synthesizers/anchor-absorption.ts +56 -91
  181. package/lib/synthesizers/boundary-stress.ts +67 -155
  182. package/lib/synthesizers/house-venue.ts +65 -127
  183. package/lib/synthesizers/no-street.ts +71 -119
  184. package/lib/synthesizers/po-box.ts +93 -105
  185. package/lib/synthesizers/tail.ts +55 -0
  186. package/lib/synthesizers/utils.ts +82 -219
  187. package/lib/test-kit/corpus-recipe.ts +45 -28
  188. package/lib/test-kit.ts +116 -0
  189. package/lib/tools/align-canonical.ts +64 -0
  190. package/lib/tools/audit.ts +117 -120
  191. package/lib/tools/corpus-stats.ts +45 -31
  192. package/lib/tools/fetch/atom.ts +164 -0
  193. package/lib/tools/fetch/cordis.ts +320 -0
  194. package/lib/tools/fetch/download/manifest.ts +36 -23
  195. package/lib/tools/fetch/download/network.ts +55 -31
  196. package/lib/tools/fetch/download/retry.ts +30 -29
  197. package/lib/tools/fetch/geonames/dump.ts +75 -55
  198. package/lib/tools/fetch/geonames/postal.ts +27 -62
  199. package/lib/tools/fetch/gleif.ts +362 -0
  200. package/lib/tools/fetch/header.ts +71 -0
  201. package/lib/tools/fetch/inspire-addresses.ts +500 -0
  202. package/lib/tools/fetch/openaddresses.ts +23 -112
  203. package/lib/tools/fetch/ourairports.ts +18 -51
  204. package/lib/tools/fetch/ppd.ts +10 -8
  205. package/lib/tools/fetch/vlaanderen-ad.ts +435 -0
  206. package/lib/tools/fetch/wfs-harvest.ts +954 -0
  207. package/lib/tools/fetch/wikidata-subvenue.ts +45 -145
  208. package/lib/tools/fetch/zip-archive.ts +100 -0
  209. package/lib/tools/fetch.ts +101 -0
  210. package/lib/tools/golden/expand.ts +75 -44
  211. package/lib/tools/golden/promote.ts +47 -34
  212. package/lib/tools/golden/relabel-street/directory.ts +67 -39
  213. package/lib/tools/golden/relabel-street/row.ts +32 -109
  214. package/lib/tools/ingest-csv.ts +48 -51
  215. package/lib/tools/jsonl-to-parquet.ts +59 -98
  216. package/lib/tools/lint/recipe-output/vocab.ts +371 -0
  217. package/lib/tools/lint/{slice/index.ts → recipe-output.ts} +130 -126
  218. package/lib/tools/migrate/overlay-parquet.ts +173 -0
  219. package/lib/tools/migrate/recipe-output.ts +153 -0
  220. package/lib/tools/migrate/source-names.ts +161 -0
  221. package/lib/tools/{slice → overlay}/kryptonite.ts +47 -39
  222. package/lib/tools/overlay/manifest.ts +409 -0
  223. package/lib/tools/overlay/merge-source.ts +139 -0
  224. package/lib/tools/overlay/split-slice.ts +144 -0
  225. package/lib/tools/overlay/translit.ts +236 -0
  226. package/lib/tools/overture-subvenue.ts +18 -91
  227. package/lib/tools/postcode-triples.ts +284 -212
  228. package/lib/tools/source-register/build.ts +822 -0
  229. package/lib/tools/sub/venue/head-nouns.ts +38 -75
  230. package/lib/tools/sub/venue/lexicon.ts +71 -110
  231. package/lib/tools/sub/venue/wikidata.ts +13 -10
  232. package/lib/tw/tools/fetch/gcis.ts +21 -20
  233. package/lib/types.ts +305 -101
  234. package/lib/us/adapters/fcc-bdc/adapter.ts +26 -41
  235. package/lib/us/adapters/state/hi-schools/adapter.ts +28 -17
  236. package/lib/us/adapters/state/hi-schools/workbook.ts +8 -3
  237. package/lib/us/adapters/state/ia-contractors/adapter.ts +27 -15
  238. package/lib/us/adapters/state/ny-notaries/adapter.ts +24 -25
  239. package/lib/us/adapters/state/tx-notaries/adapter.ts +21 -15
  240. package/lib/us/adapters/tiger/adapter.ts +19 -44
  241. package/lib/us/adapters/tiger/street-decompose.ts +7 -17
  242. package/lib/us/adapters/usgov/hrsa-fqhc/adapter.ts +49 -34
  243. package/lib/us/adapters/usgov/imls-pls/adapter.ts +25 -19
  244. package/lib/us/adapters/usgov/irs-bmf/adapter.ts +32 -23
  245. package/lib/us/adapters/usgov/nad/adapter.ts +61 -122
  246. package/lib/us/adapters/usgov/nppes/adapter.ts +72 -35
  247. package/lib/us/adapters/usgov/samhsa-treatment-locator/adapter.ts +47 -34
  248. package/lib/us/fips-state.ts +19 -10
  249. package/lib/{synthesizers → us/synthesizers}/intersection.ts +45 -35
  250. package/lib/{synthesizers → us/synthesizers}/street.ts +56 -43
  251. package/lib/us/tools/fetch/hrsa.ts +7 -8
  252. package/lib/us/tools/fetch/imls-pls.ts +18 -36
  253. package/lib/us/tools/fetch/nad.ts +51 -33
  254. package/lib/us/tools/fetch/nppes.ts +27 -39
  255. package/lib/us/tools/fetch/state/hi-schools.ts +24 -17
  256. package/lib/us/tools/fetch/state/sources.ts +12 -12
  257. package/lib/us/tools/fetch/tiger-full.ts +22 -74
  258. package/lib/utils/align.ts +52 -59
  259. package/lib/utils/{slice-stats.ts → cooccurrence-stats.ts} +22 -16
  260. package/lib/utils/golden.ts +36 -51
  261. package/lib/utils/license.ts +239 -27
  262. package/lib/utils/split.ts +209 -88
  263. package/lib/utils/tokenize.ts +25 -56
  264. package/lib/utils/wof-json.ts +130 -77
  265. package/lib/{utils/index.ts → utils.ts} +0 -1
  266. package/lib/ve/recipes/reviewed-postcode-tail.ts +40 -13
  267. package/out/adapters/cordis/adapter.d.ts +326 -0
  268. package/out/adapters/cordis/adapter.d.ts.map +1 -0
  269. package/out/adapters/cordis/adapter.js +622 -0
  270. package/out/adapters/cordis/adapter.js.map +1 -0
  271. package/out/adapters/dedup-key.d.ts +30 -0
  272. package/out/adapters/dedup-key.d.ts.map +1 -0
  273. package/out/adapters/dedup-key.js +35 -0
  274. package/out/adapters/dedup-key.js.map +1 -0
  275. package/out/adapters/errors.d.ts +17 -0
  276. package/out/adapters/errors.d.ts.map +1 -0
  277. package/out/adapters/errors.js +20 -0
  278. package/out/adapters/errors.js.map +1 -0
  279. package/out/adapters/geonames/adapter.d.ts +26 -28
  280. package/out/adapters/geonames/adapter.d.ts.map +1 -1
  281. package/out/adapters/geonames/adapter.js +40 -50
  282. package/out/adapters/geonames/adapter.js.map +1 -1
  283. package/out/adapters/geonames/postal/adapter.d.ts +14 -27
  284. package/out/adapters/geonames/postal/adapter.d.ts.map +1 -1
  285. package/out/adapters/geonames/postal/adapter.js +30 -35
  286. package/out/adapters/geonames/postal/adapter.js.map +1 -1
  287. package/out/adapters/gleif/adapter.d.ts +293 -0
  288. package/out/adapters/gleif/adapter.d.ts.map +1 -0
  289. package/out/adapters/gleif/adapter.js +685 -0
  290. package/out/adapters/gleif/adapter.js.map +1 -0
  291. package/out/adapters/libpostal-dictionary.d.ts +20 -0
  292. package/out/adapters/libpostal-dictionary.d.ts.map +1 -0
  293. package/out/adapters/libpostal-dictionary.js +34 -0
  294. package/out/adapters/libpostal-dictionary.js.map +1 -0
  295. package/out/adapters/openaddresses/adapter.d.ts +29 -43
  296. package/out/adapters/openaddresses/adapter.d.ts.map +1 -1
  297. package/out/adapters/openaddresses/adapter.js +34 -46
  298. package/out/adapters/openaddresses/adapter.js.map +1 -1
  299. package/out/adapters/osm/adapter.d.ts +59 -52
  300. package/out/adapters/osm/adapter.d.ts.map +1 -1
  301. package/out/adapters/osm/adapter.js +119 -69
  302. package/out/adapters/osm/adapter.js.map +1 -1
  303. package/out/adapters/overture/adapter.d.ts +11 -37
  304. package/out/adapters/overture/adapter.d.ts.map +1 -1
  305. package/out/adapters/overture/adapter.js +45 -42
  306. package/out/adapters/overture/adapter.js.map +1 -1
  307. package/out/adapters/po-box/adapter.d.ts +66 -0
  308. package/out/adapters/po-box/adapter.d.ts.map +1 -0
  309. package/out/adapters/{synth-po-box → po-box}/adapter.js +48 -47
  310. package/out/adapters/po-box/adapter.js.map +1 -0
  311. package/out/adapters/registry.d.ts +55 -0
  312. package/out/adapters/registry.d.ts.map +1 -0
  313. package/out/adapters/registry.js +43 -0
  314. package/out/adapters/registry.js.map +1 -0
  315. package/out/adapters/sha256-stream.d.ts +26 -0
  316. package/out/adapters/sha256-stream.d.ts.map +1 -0
  317. package/out/adapters/sha256-stream.js +34 -0
  318. package/out/adapters/sha256-stream.js.map +1 -0
  319. package/out/adapters/source-id.d.ts +33 -0
  320. package/out/adapters/source-id.d.ts.map +1 -0
  321. package/out/adapters/source-id.js +42 -0
  322. package/out/adapters/source-id.js.map +1 -0
  323. package/out/adapters/street-line.d.ts +103 -0
  324. package/out/adapters/street-line.d.ts.map +1 -0
  325. package/out/adapters/street-line.js +118 -0
  326. package/out/adapters/street-line.js.map +1 -0
  327. package/out/adapters/wof/admin/json/adapter.d.ts +27 -18
  328. package/out/adapters/wof/admin/json/adapter.d.ts.map +1 -1
  329. package/out/adapters/wof/admin/json/adapter.js +48 -32
  330. package/out/adapters/wof/admin/json/adapter.js.map +1 -1
  331. package/out/adapters/wof/json-rows.d.ts +36 -19
  332. package/out/adapters/wof/json-rows.d.ts.map +1 -1
  333. package/out/adapters/wof/json-rows.js +35 -15
  334. package/out/adapters/wof/json-rows.js.map +1 -1
  335. package/out/adapters/wof/postalcode-json/adapter.d.ts +22 -38
  336. package/out/adapters/wof/postalcode-json/adapter.d.ts.map +1 -1
  337. package/out/adapters/wof/postalcode-json/adapter.js +60 -58
  338. package/out/adapters/wof/postalcode-json/adapter.js.map +1 -1
  339. package/out/adapters.d.ts +75 -0
  340. package/out/adapters.d.ts.map +1 -0
  341. package/out/adapters.js +167 -0
  342. package/out/adapters.js.map +1 -0
  343. package/out/au/adapters/gnaf/adapter.d.ts +15 -27
  344. package/out/au/adapters/gnaf/adapter.d.ts.map +1 -1
  345. package/out/au/adapters/gnaf/adapter.js +35 -43
  346. package/out/au/adapters/gnaf/adapter.js.map +1 -1
  347. package/out/au/adapters/gnaf/assemble.d.ts +15 -26
  348. package/out/au/adapters/gnaf/assemble.d.ts.map +1 -1
  349. package/out/au/adapters/gnaf/assemble.js +26 -46
  350. package/out/au/adapters/gnaf/assemble.js.map +1 -1
  351. package/out/be/adapters/brussels/adapter.d.ts +212 -0
  352. package/out/be/adapters/brussels/adapter.d.ts.map +1 -0
  353. package/out/be/adapters/brussels/adapter.js +435 -0
  354. package/out/be/adapters/brussels/adapter.js.map +1 -0
  355. package/out/be/adapters/vlaanderen/adapter.d.ts +230 -0
  356. package/out/be/adapters/vlaanderen/adapter.d.ts.map +1 -0
  357. package/out/be/adapters/vlaanderen/adapter.js +418 -0
  358. package/out/be/adapters/vlaanderen/adapter.js.map +1 -0
  359. package/out/be/adapters/wallonie/adapter.d.ts +196 -0
  360. package/out/be/adapters/wallonie/adapter.d.ts.map +1 -0
  361. package/out/be/adapters/wallonie/adapter.js +437 -0
  362. package/out/be/adapters/wallonie/adapter.js.map +1 -0
  363. package/out/be/tools/fetch/brussels.d.ts +122 -0
  364. package/out/be/tools/fetch/brussels.d.ts.map +1 -0
  365. package/out/be/tools/fetch/brussels.js +148 -0
  366. package/out/be/tools/fetch/brussels.js.map +1 -0
  367. package/out/be/tools/fetch/wallonie.d.ts +120 -0
  368. package/out/be/tools/fetch/wallonie.d.ts.map +1 -0
  369. package/out/be/tools/fetch/wallonie.js +167 -0
  370. package/out/be/tools/fetch/wallonie.js.map +1 -0
  371. package/out/build/adapters.d.ts +33 -0
  372. package/out/build/adapters.d.ts.map +1 -0
  373. package/out/build/adapters.js +69 -0
  374. package/out/build/adapters.js.map +1 -0
  375. package/out/build/align.d.ts +74 -0
  376. package/out/build/align.d.ts.map +1 -0
  377. package/out/build/align.js +226 -0
  378. package/out/build/align.js.map +1 -0
  379. package/out/build/checkpoint.d.ts +94 -0
  380. package/out/build/checkpoint.d.ts.map +1 -0
  381. package/out/build/checkpoint.js +61 -0
  382. package/out/build/checkpoint.js.map +1 -0
  383. package/out/build/eligibility.d.ts +47 -0
  384. package/out/build/eligibility.d.ts.map +1 -0
  385. package/out/build/eligibility.js +80 -0
  386. package/out/build/eligibility.js.map +1 -0
  387. package/out/build/heap.d.ts +28 -0
  388. package/out/build/heap.d.ts.map +1 -0
  389. package/out/build/heap.js +47 -0
  390. package/out/build/heap.js.map +1 -0
  391. package/out/build/inputs.d.ts +52 -0
  392. package/out/build/inputs.d.ts.map +1 -0
  393. package/out/build/inputs.js +49 -0
  394. package/out/build/inputs.js.map +1 -0
  395. package/out/build/rows.d.ts +16 -0
  396. package/out/build/rows.d.ts.map +1 -0
  397. package/out/build/rows.js +19 -0
  398. package/out/build/rows.js.map +1 -0
  399. package/out/build/types.d.ts +222 -0
  400. package/out/build/types.d.ts.map +1 -0
  401. package/out/build/types.js +34 -0
  402. package/out/build/types.js.map +1 -0
  403. package/out/build.d.ts +6 -121
  404. package/out/build.d.ts.map +1 -1
  405. package/out/build.js +112 -207
  406. package/out/build.js.map +1 -1
  407. package/out/cn/recipes/organizational-units.d.ts +5 -22
  408. package/out/cn/recipes/organizational-units.d.ts.map +1 -1
  409. package/out/cn/recipes/organizational-units.js +20 -41
  410. package/out/cn/recipes/organizational-units.js.map +1 -1
  411. package/out/cz/adapters/cuzk/adapter.d.ts +52 -0
  412. package/out/cz/adapters/cuzk/adapter.d.ts.map +1 -0
  413. package/out/cz/adapters/cuzk/adapter.js +269 -0
  414. package/out/cz/adapters/cuzk/adapter.js.map +1 -0
  415. package/out/cz/recipes/pcfirst-preposition.d.ts +7 -11
  416. package/out/cz/recipes/pcfirst-preposition.d.ts.map +1 -1
  417. package/out/cz/recipes/pcfirst-preposition.js +36 -27
  418. package/out/cz/recipes/pcfirst-preposition.js.map +1 -1
  419. package/out/cz/tools/fetch/cuzk.d.ts +281 -0
  420. package/out/cz/tools/fetch/cuzk.d.ts.map +1 -0
  421. package/out/cz/tools/fetch/cuzk.js +448 -0
  422. package/out/cz/tools/fetch/cuzk.js.map +1 -0
  423. package/out/de/recipes/locale.d.ts +24 -26
  424. package/out/de/recipes/locale.d.ts.map +1 -1
  425. package/out/de/recipes/locale.js +67 -57
  426. package/out/de/recipes/locale.js.map +1 -1
  427. package/out/directory.d.ts +20 -0
  428. package/out/directory.d.ts.map +1 -0
  429. package/out/directory.js +27 -0
  430. package/out/directory.js.map +1 -0
  431. package/out/dk/adapters/inspire/adapter.d.ts +153 -0
  432. package/out/dk/adapters/inspire/adapter.d.ts.map +1 -0
  433. package/out/dk/adapters/inspire/adapter.js +258 -0
  434. package/out/dk/adapters/inspire/adapter.js.map +1 -0
  435. package/out/dk/tools/fetch/inspire.d.ts +101 -0
  436. package/out/dk/tools/fetch/inspire.d.ts.map +1 -0
  437. package/out/dk/tools/fetch/inspire.js +232 -0
  438. package/out/dk/tools/fetch/inspire.js.map +1 -0
  439. package/out/ee/adapters/ads/adapter.d.ts +102 -0
  440. package/out/ee/adapters/ads/adapter.d.ts.map +1 -0
  441. package/out/ee/adapters/ads/adapter.js +185 -0
  442. package/out/ee/adapters/ads/adapter.js.map +1 -0
  443. package/out/ee/tools/fetch/ads.d.ts +123 -0
  444. package/out/ee/tools/fetch/ads.d.ts.map +1 -0
  445. package/out/ee/tools/fetch/ads.js +197 -0
  446. package/out/ee/tools/fetch/ads.js.map +1 -0
  447. package/out/env.d.ts +6 -2
  448. package/out/env.d.ts.map +1 -1
  449. package/out/env.js +6 -2
  450. package/out/env.js.map +1 -1
  451. package/out/es/adapters/bizkaia/adapter.d.ts +143 -0
  452. package/out/es/adapters/bizkaia/adapter.d.ts.map +1 -0
  453. package/out/es/adapters/bizkaia/adapter.js +332 -0
  454. package/out/es/adapters/bizkaia/adapter.js.map +1 -0
  455. package/out/es/adapters/catastro/adapter.d.ts +103 -0
  456. package/out/es/adapters/catastro/adapter.d.ts.map +1 -0
  457. package/out/es/adapters/catastro/adapter.js +290 -0
  458. package/out/es/adapters/catastro/adapter.js.map +1 -0
  459. package/out/es/adapters/gipuzkoa/adapter.d.ts +84 -0
  460. package/out/es/adapters/gipuzkoa/adapter.d.ts.map +1 -0
  461. package/out/es/adapters/gipuzkoa/adapter.js +218 -0
  462. package/out/es/adapters/gipuzkoa/adapter.js.map +1 -0
  463. package/out/es/adapters/navarra/adapter.d.ts +106 -0
  464. package/out/es/adapters/navarra/adapter.d.ts.map +1 -0
  465. package/out/es/adapters/navarra/adapter.js +242 -0
  466. package/out/es/adapters/navarra/adapter.js.map +1 -0
  467. package/out/es/cadastre.d.ts +110 -0
  468. package/out/es/cadastre.d.ts.map +1 -0
  469. package/out/es/cadastre.js +128 -0
  470. package/out/es/cadastre.js.map +1 -0
  471. package/out/es/tools/fetch/bizkaia.d.ts +281 -0
  472. package/out/es/tools/fetch/bizkaia.d.ts.map +1 -0
  473. package/out/es/tools/fetch/bizkaia.js +478 -0
  474. package/out/es/tools/fetch/bizkaia.js.map +1 -0
  475. package/out/es/tools/fetch/catastro.d.ts +280 -0
  476. package/out/es/tools/fetch/catastro.d.ts.map +1 -0
  477. package/out/es/tools/fetch/catastro.js +491 -0
  478. package/out/es/tools/fetch/catastro.js.map +1 -0
  479. package/out/es/tools/fetch/gipuzkoa.d.ts +164 -0
  480. package/out/es/tools/fetch/gipuzkoa.d.ts.map +1 -0
  481. package/out/es/tools/fetch/gipuzkoa.js +210 -0
  482. package/out/es/tools/fetch/gipuzkoa.js.map +1 -0
  483. package/out/es/tools/fetch/navarra.d.ts +194 -0
  484. package/out/es/tools/fetch/navarra.d.ts.map +1 -0
  485. package/out/es/tools/fetch/navarra.js +321 -0
  486. package/out/es/tools/fetch/navarra.js.map +1 -0
  487. package/out/fi/adapters/ryhti/adapter.d.ts +111 -0
  488. package/out/fi/adapters/ryhti/adapter.d.ts.map +1 -0
  489. package/out/fi/adapters/ryhti/adapter.js +240 -0
  490. package/out/fi/adapters/ryhti/adapter.js.map +1 -0
  491. package/out/fi/tools/fetch/ryhti.d.ts +206 -0
  492. package/out/fi/tools/fetch/ryhti.d.ts.map +1 -0
  493. package/out/fi/tools/fetch/ryhti.js +324 -0
  494. package/out/fi/tools/fetch/ryhti.js.map +1 -0
  495. package/out/fingerprints.d.ts +68 -0
  496. package/out/fingerprints.d.ts.map +1 -0
  497. package/out/fingerprints.js +130 -0
  498. package/out/fingerprints.js.map +1 -0
  499. package/out/fr/adapters/annuaire-education/adapter.d.ts +236 -0
  500. package/out/fr/adapters/annuaire-education/adapter.d.ts.map +1 -0
  501. package/out/fr/adapters/annuaire-education/adapter.js +477 -0
  502. package/out/fr/adapters/annuaire-education/adapter.js.map +1 -0
  503. package/out/fr/adapters/ban/adapter.d.ts +19 -25
  504. package/out/fr/adapters/ban/adapter.d.ts.map +1 -1
  505. package/out/fr/adapters/ban/adapter.js +65 -54
  506. package/out/fr/adapters/ban/adapter.js.map +1 -1
  507. package/out/fr/adapters/finess/adapter.d.ts +277 -0
  508. package/out/fr/adapters/finess/adapter.d.ts.map +1 -0
  509. package/out/fr/adapters/finess/adapter.js +520 -0
  510. package/out/fr/adapters/finess/adapter.js.map +1 -0
  511. package/out/fr/adapters/finess/postal-lines.d.ts +61 -0
  512. package/out/fr/adapters/finess/postal-lines.d.ts.map +1 -0
  513. package/out/fr/adapters/finess/postal-lines.js +114 -0
  514. package/out/fr/adapters/finess/postal-lines.js.map +1 -0
  515. package/out/fr/adapters/finess/voie-type.d.ts +77 -0
  516. package/out/fr/adapters/finess/voie-type.d.ts.map +1 -0
  517. package/out/fr/adapters/finess/voie-type.js +173 -0
  518. package/out/fr/adapters/finess/voie-type.js.map +1 -0
  519. package/out/fr/insee-country.d.ts +45 -0
  520. package/out/fr/insee-country.d.ts.map +1 -0
  521. package/out/fr/insee-country.js +60 -0
  522. package/out/fr/insee-country.js.map +1 -0
  523. package/out/fr/recipes/admin-split.d.ts +4 -27
  524. package/out/fr/recipes/admin-split.d.ts.map +1 -1
  525. package/out/fr/recipes/admin-split.js +36 -58
  526. package/out/fr/recipes/admin-split.js.map +1 -1
  527. package/out/fr/recipes/bare-street.d.ts +2 -17
  528. package/out/fr/recipes/bare-street.d.ts.map +1 -1
  529. package/out/fr/recipes/bare-street.js +35 -50
  530. package/out/fr/recipes/bare-street.js.map +1 -1
  531. package/out/fr/recipes/fragment.d.ts +6 -65
  532. package/out/fr/recipes/fragment.d.ts.map +1 -1
  533. package/out/fr/recipes/fragment.js +55 -135
  534. package/out/fr/recipes/fragment.js.map +1 -1
  535. package/out/fr/recipes/lieudit.d.ts +17 -19
  536. package/out/fr/recipes/lieudit.d.ts.map +1 -1
  537. package/out/fr/recipes/lieudit.js +89 -68
  538. package/out/fr/recipes/lieudit.js.map +1 -1
  539. package/out/fr/recipes/order.d.ts +4 -27
  540. package/out/fr/recipes/order.d.ts.map +1 -1
  541. package/out/fr/recipes/order.js +31 -58
  542. package/out/fr/recipes/order.js.map +1 -1
  543. package/out/fr/{adapters/ban/street-decompose.d.ts → street-decompose.d.ts} +3 -2
  544. package/out/fr/street-decompose.d.ts.map +1 -0
  545. package/out/fr/{adapters/ban/street-decompose.js → street-decompose.js} +4 -3
  546. package/out/fr/street-decompose.js.map +1 -0
  547. package/out/fr/tools/fetch/annuaire-education.d.ts +133 -0
  548. package/out/fr/tools/fetch/annuaire-education.d.ts.map +1 -0
  549. package/out/fr/tools/fetch/annuaire-education.js +198 -0
  550. package/out/fr/tools/fetch/annuaire-education.js.map +1 -0
  551. package/out/fr/tools/fetch/ban.d.ts +9 -7
  552. package/out/fr/tools/fetch/ban.d.ts.map +1 -1
  553. package/out/fr/tools/fetch/ban.js +29 -19
  554. package/out/fr/tools/fetch/ban.js.map +1 -1
  555. package/out/fr/tools/fetch/finess.d.ts +145 -0
  556. package/out/fr/tools/fetch/finess.d.ts.map +1 -0
  557. package/out/fr/tools/fetch/finess.js +229 -0
  558. package/out/fr/tools/fetch/finess.js.map +1 -0
  559. package/out/gauntlet-inputs.d.ts +42 -0
  560. package/out/gauntlet-inputs.d.ts.map +1 -0
  561. package/out/gauntlet-inputs.js +78 -0
  562. package/out/gauntlet-inputs.js.map +1 -0
  563. package/out/index.d.ts +9 -3
  564. package/out/index.d.ts.map +1 -1
  565. package/out/index.js +9 -3
  566. package/out/index.js.map +1 -1
  567. package/out/inspire/address.d.ts +261 -0
  568. package/out/inspire/address.d.ts.map +1 -0
  569. package/out/inspire/address.js +395 -0
  570. package/out/inspire/address.js.map +1 -0
  571. package/out/inspire/archive.d.ts +36 -0
  572. package/out/inspire/archive.d.ts.map +1 -0
  573. package/out/inspire/archive.js +42 -0
  574. package/out/inspire/archive.js.map +1 -0
  575. package/out/inspire/errors.d.ts +56 -0
  576. package/out/inspire/errors.d.ts.map +1 -0
  577. package/out/inspire/errors.js +65 -0
  578. package/out/inspire/errors.js.map +1 -0
  579. package/out/inspire/stream.d.ts +140 -0
  580. package/out/inspire/stream.d.ts.map +1 -0
  581. package/out/inspire/stream.js +123 -0
  582. package/out/inspire/stream.js.map +1 -0
  583. package/out/international/recipes/locale.d.ts +40 -86
  584. package/out/international/recipes/locale.d.ts.map +1 -1
  585. package/out/international/recipes/locale.js +122 -157
  586. package/out/international/recipes/locale.js.map +1 -1
  587. package/out/it/adapters/anac/adapter.d.ts +269 -0
  588. package/out/it/adapters/anac/adapter.d.ts.map +1 -0
  589. package/out/it/adapters/anac/adapter.js +434 -0
  590. package/out/it/adapters/anac/adapter.js.map +1 -0
  591. package/out/it/tools/fetch/anac.d.ts +171 -0
  592. package/out/it/tools/fetch/anac.d.ts.map +1 -0
  593. package/out/it/tools/fetch/anac.js +269 -0
  594. package/out/it/tools/fetch/anac.js.map +1 -0
  595. package/out/jp/adapters/wof-admin/adapter.d.ts +14 -11
  596. package/out/jp/adapters/wof-admin/adapter.d.ts.map +1 -1
  597. package/out/jp/adapters/wof-admin/adapter.js +27 -16
  598. package/out/jp/adapters/wof-admin/adapter.js.map +1 -1
  599. package/out/jp/tools/fetch/houjin.d.ts +7 -4
  600. package/out/jp/tools/fetch/houjin.d.ts.map +1 -1
  601. package/out/jp/tools/fetch/houjin.js +17 -13
  602. package/out/jp/tools/fetch/houjin.js.map +1 -1
  603. package/out/kr/adapters/juso/label-rows.d.ts +17 -31
  604. package/out/kr/adapters/juso/label-rows.d.ts.map +1 -1
  605. package/out/kr/adapters/juso/label-rows.js +19 -41
  606. package/out/kr/adapters/juso/label-rows.js.map +1 -1
  607. package/out/kr/adapters/localdata/align.d.ts +4 -16
  608. package/out/kr/adapters/localdata/align.d.ts.map +1 -1
  609. package/out/kr/adapters/localdata/align.js +19 -30
  610. package/out/kr/adapters/localdata/align.js.map +1 -1
  611. package/out/kr/adapters/localdata/key-index.d.ts +13 -22
  612. package/out/kr/adapters/localdata/key-index.d.ts.map +1 -1
  613. package/out/kr/adapters/localdata/key-index.js +15 -21
  614. package/out/kr/adapters/localdata/key-index.js.map +1 -1
  615. package/out/kr/adapters/localdata/permit-rows.d.ts +21 -14
  616. package/out/kr/adapters/localdata/permit-rows.d.ts.map +1 -1
  617. package/out/kr/adapters/localdata/permit-rows.js +31 -26
  618. package/out/kr/adapters/localdata/permit-rows.js.map +1 -1
  619. package/out/kr/tools/fetch/juso.d.ts +11 -8
  620. package/out/kr/tools/fetch/juso.d.ts.map +1 -1
  621. package/out/kr/tools/fetch/juso.js +15 -14
  622. package/out/kr/tools/fetch/juso.js.map +1 -1
  623. package/out/kr/tools/fetch/localdata.d.ts +16 -9
  624. package/out/kr/tools/fetch/localdata.d.ts.map +1 -1
  625. package/out/kr/tools/fetch/localdata.js +24 -16
  626. package/out/kr/tools/fetch/localdata.js.map +1 -1
  627. package/out/lu/adapters/bd-adresses/adapter.d.ts +109 -0
  628. package/out/lu/adapters/bd-adresses/adapter.d.ts.map +1 -0
  629. package/out/lu/adapters/bd-adresses/adapter.js +196 -0
  630. package/out/lu/adapters/bd-adresses/adapter.js.map +1 -0
  631. package/out/lu/tools/fetch/bd-adresses.d.ts +165 -0
  632. package/out/lu/tools/fetch/bd-adresses.d.ts.map +1 -0
  633. package/out/lu/tools/fetch/bd-adresses.js +223 -0
  634. package/out/lu/tools/fetch/bd-adresses.js.map +1 -0
  635. package/out/lv/adapters/varis/adapter.d.ts +284 -0
  636. package/out/lv/adapters/varis/adapter.d.ts.map +1 -0
  637. package/out/lv/adapters/varis/adapter.js +405 -0
  638. package/out/lv/adapters/varis/adapter.js.map +1 -0
  639. package/out/lv/tools/fetch/varis.d.ts +81 -0
  640. package/out/lv/tools/fetch/varis.d.ts.map +1 -0
  641. package/out/lv/tools/fetch/varis.js +133 -0
  642. package/out/lv/tools/fetch/varis.js.map +1 -0
  643. package/out/nl/adapters/kadaster/adapter.d.ts +125 -0
  644. package/out/nl/adapters/kadaster/adapter.d.ts.map +1 -0
  645. package/out/nl/adapters/kadaster/adapter.js +309 -0
  646. package/out/nl/adapters/kadaster/adapter.js.map +1 -0
  647. package/out/nl/recipes/postcode.d.ts +12 -14
  648. package/out/nl/recipes/postcode.d.ts.map +1 -1
  649. package/out/nl/recipes/postcode.js +42 -24
  650. package/out/nl/recipes/postcode.js.map +1 -1
  651. package/out/nl/tools/fetch/kadaster.d.ts +159 -0
  652. package/out/nl/tools/fetch/kadaster.d.ts.map +1 -0
  653. package/out/nl/tools/fetch/kadaster.js +182 -0
  654. package/out/nl/tools/fetch/kadaster.js.map +1 -0
  655. package/out/no/adapters/matrikkelen/adapter.d.ts +44 -0
  656. package/out/no/adapters/matrikkelen/adapter.d.ts.map +1 -0
  657. package/out/no/adapters/matrikkelen/adapter.js +143 -0
  658. package/out/no/adapters/matrikkelen/adapter.js.map +1 -0
  659. package/out/no/recipes/fragment.d.ts +1 -33
  660. package/out/no/recipes/fragment.d.ts.map +1 -1
  661. package/out/no/recipes/fragment.js +23 -57
  662. package/out/no/recipes/fragment.js.map +1 -1
  663. package/out/no/recipes/street/led.d.ts +9 -12
  664. package/out/no/recipes/street/led.d.ts.map +1 -1
  665. package/out/no/recipes/street/led.js +34 -24
  666. package/out/no/recipes/street/led.js.map +1 -1
  667. package/out/no/recipes/street.d.ts +19 -0
  668. package/out/no/recipes/street.d.ts.map +1 -0
  669. package/out/no/recipes/{street/index.js → street.js} +28 -12
  670. package/out/no/recipes/street.js.map +1 -0
  671. package/out/no/tools/fetch/matrikkelen.d.ts +263 -0
  672. package/out/no/tools/fetch/matrikkelen.d.ts.map +1 -0
  673. package/out/no/tools/fetch/matrikkelen.js +353 -0
  674. package/out/no/tools/fetch/matrikkelen.js.map +1 -0
  675. package/out/parquet/duckdb.d.ts +103 -0
  676. package/out/parquet/duckdb.d.ts.map +1 -0
  677. package/out/parquet/duckdb.js +93 -0
  678. package/out/parquet/duckdb.js.map +1 -0
  679. package/out/parquet/readers.d.ts +44 -0
  680. package/out/parquet/readers.d.ts.map +1 -0
  681. package/out/parquet/readers.js +69 -0
  682. package/out/parquet/readers.js.map +1 -0
  683. package/out/parquet/schema.d.ts +95 -0
  684. package/out/parquet/schema.d.ts.map +1 -0
  685. package/out/parquet/schema.js +157 -0
  686. package/out/parquet/schema.js.map +1 -0
  687. package/out/parquet/shuffle.d.ts +25 -0
  688. package/out/parquet/shuffle.d.ts.map +1 -0
  689. package/out/parquet/shuffle.js +44 -0
  690. package/out/parquet/shuffle.js.map +1 -0
  691. package/out/parquet/span-sql.d.ts +49 -0
  692. package/out/parquet/span-sql.d.ts.map +1 -0
  693. package/out/parquet/span-sql.js +53 -0
  694. package/out/parquet/span-sql.js.map +1 -0
  695. package/out/parquet/streams.d.ts +47 -0
  696. package/out/parquet/streams.d.ts.map +1 -0
  697. package/out/parquet/streams.js +78 -0
  698. package/out/parquet/streams.js.map +1 -0
  699. package/out/parquet/writers.d.ts +124 -0
  700. package/out/parquet/writers.d.ts.map +1 -0
  701. package/out/parquet/writers.js +252 -0
  702. package/out/parquet/writers.js.map +1 -0
  703. package/out/pl/adapters/emuia/adapter.d.ts +81 -0
  704. package/out/pl/adapters/emuia/adapter.d.ts.map +1 -0
  705. package/out/pl/adapters/emuia/adapter.js +178 -0
  706. package/out/pl/adapters/emuia/adapter.js.map +1 -0
  707. package/out/pl/tools/fetch/emuia.d.ts +166 -0
  708. package/out/pl/tools/fetch/emuia.d.ts.map +1 -0
  709. package/out/pl/tools/fetch/emuia.js +261 -0
  710. package/out/pl/tools/fetch/emuia.js.map +1 -0
  711. package/out/recipes/anchor-absorption.d.ts +9 -9
  712. package/out/recipes/anchor-absorption.d.ts.map +1 -1
  713. package/out/recipes/anchor-absorption.js +29 -19
  714. package/out/recipes/anchor-absorption.js.map +1 -1
  715. package/out/recipes/bare/country.d.ts +2 -20
  716. package/out/recipes/bare/country.d.ts.map +1 -1
  717. package/out/recipes/bare/country.js +20 -31
  718. package/out/recipes/bare/country.js.map +1 -1
  719. package/out/recipes/bare/postcode/eval.d.ts +1 -1
  720. package/out/recipes/bare/postcode/eval.js +1 -1
  721. package/out/recipes/bare/postcode.d.ts +41 -0
  722. package/out/recipes/bare/postcode.d.ts.map +1 -0
  723. package/out/recipes/bare/{postcode/index.js → postcode.js} +92 -80
  724. package/out/recipes/bare/postcode.js.map +1 -0
  725. package/out/recipes/boundary-stress.d.ts +8 -8
  726. package/out/recipes/boundary-stress.d.ts.map +1 -1
  727. package/out/recipes/boundary-stress.js +37 -20
  728. package/out/recipes/boundary-stress.js.map +1 -1
  729. package/out/recipes/country-balanced.d.ts +3 -21
  730. package/out/recipes/country-balanced.d.ts.map +1 -1
  731. package/out/recipes/country-balanced.js +58 -76
  732. package/out/recipes/country-balanced.js.map +1 -1
  733. package/out/recipes/house-venue.d.ts +8 -6
  734. package/out/recipes/house-venue.d.ts.map +1 -1
  735. package/out/recipes/house-venue.js +33 -14
  736. package/out/recipes/house-venue.js.map +1 -1
  737. package/out/recipes/intersection.d.ts +20 -20
  738. package/out/recipes/intersection.d.ts.map +1 -1
  739. package/out/recipes/intersection.js +67 -55
  740. package/out/recipes/intersection.js.map +1 -1
  741. package/out/recipes/po/box/cedex/au-nz.d.ts.map +1 -1
  742. package/out/recipes/po/box/cedex/au-nz.js +3 -3
  743. package/out/recipes/po/box/cedex/au-nz.js.map +1 -1
  744. package/out/recipes/po/box/cedex/ca.d.ts.map +1 -1
  745. package/out/recipes/po/box/cedex/ca.js +2 -2
  746. package/out/recipes/po/box/cedex/ca.js.map +1 -1
  747. package/out/recipes/po/box/cedex/fr.d.ts.map +1 -1
  748. package/out/recipes/po/box/cedex/fr.js +3 -3
  749. package/out/recipes/po/box/cedex/fr.js.map +1 -1
  750. package/out/recipes/po/box/cedex/phrases.d.ts.map +1 -1
  751. package/out/recipes/po/box/cedex/phrases.js +7 -6
  752. package/out/recipes/po/box/cedex/phrases.js.map +1 -1
  753. package/out/recipes/po/box/cedex/recipe.d.ts +1 -1
  754. package/out/recipes/po/box/cedex/recipe.d.ts.map +1 -1
  755. package/out/recipes/po/box/cedex/recipe.js +27 -16
  756. package/out/recipes/po/box/cedex/recipe.js.map +1 -1
  757. package/out/recipes/po/box/cedex/sources.d.ts +20 -14
  758. package/out/recipes/po/box/cedex/sources.d.ts.map +1 -1
  759. package/out/recipes/po/box/cedex/sources.js +2 -2
  760. package/out/recipes/po/box/cedex/sources.js.map +1 -1
  761. package/out/recipes/po/box/cedex/us.d.ts.map +1 -1
  762. package/out/recipes/po/box/cedex/us.js +5 -2
  763. package/out/recipes/po/box/cedex/us.js.map +1 -1
  764. package/out/recipes/po/box.d.ts +18 -0
  765. package/out/recipes/po/box.d.ts.map +1 -0
  766. package/out/recipes/po/{box/index.js → box.js} +37 -19
  767. package/out/recipes/po/box.js.map +1 -0
  768. package/out/recipes/scaffold.d.ts +223 -141
  769. package/out/recipes/scaffold.d.ts.map +1 -1
  770. package/out/recipes/scaffold.js +75 -65
  771. package/out/recipes/scaffold.js.map +1 -1
  772. package/out/recipes/sources.d.ts +178 -0
  773. package/out/recipes/sources.d.ts.map +1 -0
  774. package/out/recipes/sources.js +361 -0
  775. package/out/recipes/sources.js.map +1 -0
  776. package/out/recipes/street/affix.d.ts +20 -50
  777. package/out/recipes/street/affix.d.ts.map +1 -1
  778. package/out/recipes/street/affix.js +45 -133
  779. package/out/recipes/street/affix.js.map +1 -1
  780. package/out/recipes/street/bare.d.ts +9 -7
  781. package/out/recipes/street/bare.d.ts.map +1 -1
  782. package/out/recipes/street/bare.js +27 -16
  783. package/out/recipes/street/bare.js.map +1 -1
  784. package/out/recipes/street.d.ts +6 -4
  785. package/out/recipes/street.d.ts.map +1 -1
  786. package/out/recipes/street.js +32 -9
  787. package/out/recipes/street.js.map +1 -1
  788. package/out/recipes/sub/venue/context.d.ts +12 -9
  789. package/out/recipes/sub/venue/context.d.ts.map +1 -1
  790. package/out/recipes/sub/venue/context.js +23 -17
  791. package/out/recipes/sub/venue/context.js.map +1 -1
  792. package/out/recipes/sub/venue/render.d.ts +58 -0
  793. package/out/recipes/sub/venue/render.d.ts.map +1 -0
  794. package/out/recipes/sub/venue/render.js +118 -0
  795. package/out/recipes/sub/venue/render.js.map +1 -0
  796. package/out/recipes/sub/venue/sources.d.ts +53 -93
  797. package/out/recipes/sub/venue/sources.d.ts.map +1 -1
  798. package/out/recipes/sub/venue/sources.js +57 -197
  799. package/out/recipes/sub/venue/sources.js.map +1 -1
  800. package/out/recipes/sub/venue.d.ts +173 -0
  801. package/out/recipes/sub/venue.d.ts.map +1 -0
  802. package/out/recipes/sub/venue.js +558 -0
  803. package/out/recipes/sub/venue.js.map +1 -0
  804. package/out/recipes/trailing-region.d.ts +9 -61
  805. package/out/recipes/trailing-region.d.ts.map +1 -1
  806. package/out/recipes/trailing-region.js +61 -86
  807. package/out/recipes/trailing-region.js.map +1 -1
  808. package/out/recipes/unit/sources.d.ts +28 -0
  809. package/out/recipes/unit/sources.d.ts.map +1 -0
  810. package/out/recipes/unit/sources.js +30 -0
  811. package/out/recipes/unit/sources.js.map +1 -0
  812. package/out/recipes/unit.d.ts +30 -17
  813. package/out/recipes/unit.d.ts.map +1 -1
  814. package/out/recipes/unit.js +90 -79
  815. package/out/recipes/unit.js.map +1 -1
  816. package/out/recipes/venue.d.ts +119 -0
  817. package/out/recipes/venue.d.ts.map +1 -0
  818. package/out/recipes/venue.js +245 -0
  819. package/out/recipes/venue.js.map +1 -0
  820. package/out/recipes.d.ts +26 -0
  821. package/out/recipes.d.ts.map +1 -0
  822. package/out/{recipes/index.js → recipes.js} +16 -12
  823. package/out/recipes.js.map +1 -0
  824. package/out/registers.d.ts +279 -0
  825. package/out/registers.d.ts.map +1 -0
  826. package/out/registers.js +275 -0
  827. package/out/registers.js.map +1 -0
  828. package/out/ro/adapters/retea-scolara/adapter.d.ts +114 -0
  829. package/out/ro/adapters/retea-scolara/adapter.d.ts.map +1 -0
  830. package/out/ro/adapters/retea-scolara/adapter.js +209 -0
  831. package/out/ro/adapters/retea-scolara/adapter.js.map +1 -0
  832. package/out/ro/tools/fetch/retea-scolara.d.ts +69 -0
  833. package/out/ro/tools/fetch/retea-scolara.d.ts.map +1 -0
  834. package/out/ro/tools/fetch/retea-scolara.js +117 -0
  835. package/out/ro/tools/fetch/retea-scolara.js.map +1 -0
  836. package/out/runner.d.ts +121 -60
  837. package/out/runner.d.ts.map +1 -1
  838. package/out/runner.js +130 -56
  839. package/out/runner.js.map +1 -1
  840. package/out/sg/recipes/register.d.ts +18 -32
  841. package/out/sg/recipes/register.d.ts.map +1 -1
  842. package/out/sg/recipes/register.js +45 -50
  843. package/out/sg/recipes/register.js.map +1 -1
  844. package/out/sg/tools/fetch/acra.d.ts +11 -14
  845. package/out/sg/tools/fetch/acra.d.ts.map +1 -1
  846. package/out/sg/tools/fetch/acra.js +18 -21
  847. package/out/sg/tools/fetch/acra.js.map +1 -1
  848. package/out/si/recipes/bare-village.d.ts +12 -13
  849. package/out/si/recipes/bare-village.d.ts.map +1 -1
  850. package/out/si/recipes/bare-village.js +31 -17
  851. package/out/si/recipes/bare-village.js.map +1 -1
  852. package/out/sk/adapters/inspire/adapter.d.ts +119 -0
  853. package/out/sk/adapters/inspire/adapter.d.ts.map +1 -0
  854. package/out/sk/adapters/inspire/adapter.js +318 -0
  855. package/out/sk/adapters/inspire/adapter.js.map +1 -0
  856. package/out/sk/tools/fetch/inspire.d.ts +196 -0
  857. package/out/sk/tools/fetch/inspire.d.ts.map +1 -0
  858. package/out/sk/tools/fetch/inspire.js +281 -0
  859. package/out/sk/tools/fetch/inspire.js.map +1 -0
  860. package/out/source-register/effective-manifest.d.ts +355 -0
  861. package/out/source-register/effective-manifest.d.ts.map +1 -0
  862. package/out/source-register/effective-manifest.js +355 -0
  863. package/out/source-register/effective-manifest.js.map +1 -0
  864. package/out/source-register/register.d.ts +79 -0
  865. package/out/source-register/register.d.ts.map +1 -0
  866. package/out/source-register/register.js +400 -0
  867. package/out/source-register/register.js.map +1 -0
  868. package/out/source-register/training-manifest.d.ts +111 -0
  869. package/out/source-register/training-manifest.d.ts.map +1 -0
  870. package/out/source-register/training-manifest.js +120 -0
  871. package/out/source-register/training-manifest.js.map +1 -0
  872. package/out/source-register/types.d.ts +538 -0
  873. package/out/source-register/types.d.ts.map +1 -0
  874. package/out/source-register/types.js +263 -0
  875. package/out/source-register/types.js.map +1 -0
  876. package/out/source-register.d.ts +19 -0
  877. package/out/source-register.d.ts.map +1 -0
  878. package/out/source-register.js +16 -0
  879. package/out/source-register.js.map +1 -0
  880. package/out/south-asia/recipes/register.d.ts +20 -17
  881. package/out/south-asia/recipes/register.d.ts.map +1 -1
  882. package/out/south-asia/recipes/register.js +44 -24
  883. package/out/south-asia/recipes/register.js.map +1 -1
  884. package/out/subvenue/harvest.d.ts +117 -0
  885. package/out/subvenue/harvest.d.ts.map +1 -0
  886. package/out/subvenue/harvest.js +172 -0
  887. package/out/subvenue/harvest.js.map +1 -0
  888. package/out/subvenue/promotions.d.ts +65 -0
  889. package/out/subvenue/promotions.d.ts.map +1 -0
  890. package/out/{tools/sub/venue → subvenue}/promotions.js +15 -55
  891. package/out/subvenue/promotions.js.map +1 -0
  892. package/out/subvenue/surfaces.d.ts +39 -0
  893. package/out/subvenue/surfaces.d.ts.map +1 -0
  894. package/out/subvenue/surfaces.js +75 -0
  895. package/out/subvenue/surfaces.js.map +1 -0
  896. package/out/subvenue/table.d.ts +212 -0
  897. package/out/subvenue/table.d.ts.map +1 -0
  898. package/out/subvenue/table.js +94 -0
  899. package/out/subvenue/table.js.map +1 -0
  900. package/out/surfaces/locale.d.ts +113 -0
  901. package/out/surfaces/locale.d.ts.map +1 -0
  902. package/out/surfaces/locale.js +138 -0
  903. package/out/surfaces/locale.js.map +1 -0
  904. package/out/synthesizers/anchor-absorption.d.ts +22 -30
  905. package/out/synthesizers/anchor-absorption.d.ts.map +1 -1
  906. package/out/synthesizers/anchor-absorption.js +30 -85
  907. package/out/synthesizers/anchor-absorption.js.map +1 -1
  908. package/out/synthesizers/boundary-stress.d.ts +18 -49
  909. package/out/synthesizers/boundary-stress.d.ts.map +1 -1
  910. package/out/synthesizers/boundary-stress.js +45 -142
  911. package/out/synthesizers/boundary-stress.js.map +1 -1
  912. package/out/synthesizers/house-venue.d.ts +23 -25
  913. package/out/synthesizers/house-venue.d.ts.map +1 -1
  914. package/out/synthesizers/house-venue.js +47 -118
  915. package/out/synthesizers/house-venue.js.map +1 -1
  916. package/out/synthesizers/no-street.d.ts +7 -37
  917. package/out/synthesizers/no-street.d.ts.map +1 -1
  918. package/out/synthesizers/no-street.js +55 -111
  919. package/out/synthesizers/no-street.js.map +1 -1
  920. package/out/synthesizers/po-box.d.ts +48 -45
  921. package/out/synthesizers/po-box.d.ts.map +1 -1
  922. package/out/synthesizers/po-box.js +57 -97
  923. package/out/synthesizers/po-box.js.map +1 -1
  924. package/out/synthesizers/tail.d.ts +36 -0
  925. package/out/synthesizers/tail.d.ts.map +1 -0
  926. package/out/synthesizers/tail.js +32 -0
  927. package/out/synthesizers/tail.js.map +1 -0
  928. package/out/synthesizers/utils.d.ts +33 -129
  929. package/out/synthesizers/utils.d.ts.map +1 -1
  930. package/out/synthesizers/utils.js +71 -167
  931. package/out/synthesizers/utils.js.map +1 -1
  932. package/out/test-kit/corpus-recipe.d.ts +29 -23
  933. package/out/test-kit/corpus-recipe.d.ts.map +1 -1
  934. package/out/test-kit/corpus-recipe.js +28 -13
  935. package/out/test-kit/corpus-recipe.js.map +1 -1
  936. package/out/test-kit.d.ts +63 -0
  937. package/out/test-kit.d.ts.map +1 -0
  938. package/out/test-kit.js +88 -0
  939. package/out/test-kit.js.map +1 -0
  940. package/out/tools/align-canonical.d.ts +7 -0
  941. package/out/tools/align-canonical.d.ts.map +1 -0
  942. package/out/tools/align-canonical.js +52 -0
  943. package/out/tools/align-canonical.js.map +1 -0
  944. package/out/tools/audit.d.ts +19 -11
  945. package/out/tools/audit.d.ts.map +1 -1
  946. package/out/tools/audit.js +89 -97
  947. package/out/tools/audit.js.map +1 -1
  948. package/out/tools/corpus-stats.d.ts +24 -15
  949. package/out/tools/corpus-stats.d.ts.map +1 -1
  950. package/out/tools/corpus-stats.js +34 -30
  951. package/out/tools/corpus-stats.js.map +1 -1
  952. package/out/tools/fetch/atom.d.ts +115 -0
  953. package/out/tools/fetch/atom.d.ts.map +1 -0
  954. package/out/tools/fetch/atom.js +83 -0
  955. package/out/tools/fetch/atom.js.map +1 -0
  956. package/out/tools/fetch/cordis.d.ts +124 -0
  957. package/out/tools/fetch/cordis.d.ts.map +1 -0
  958. package/out/tools/fetch/cordis.js +210 -0
  959. package/out/tools/fetch/cordis.js.map +1 -0
  960. package/out/tools/fetch/download/manifest.d.ts +27 -18
  961. package/out/tools/fetch/download/manifest.d.ts.map +1 -1
  962. package/out/tools/fetch/download/manifest.js +22 -14
  963. package/out/tools/fetch/download/manifest.js.map +1 -1
  964. package/out/tools/fetch/download/network.d.ts +48 -27
  965. package/out/tools/fetch/download/network.d.ts.map +1 -1
  966. package/out/tools/fetch/download/network.js +26 -16
  967. package/out/tools/fetch/download/network.js.map +1 -1
  968. package/out/tools/fetch/download/retry.d.ts +16 -15
  969. package/out/tools/fetch/download/retry.d.ts.map +1 -1
  970. package/out/tools/fetch/download/retry.js +28 -28
  971. package/out/tools/fetch/download/retry.js.map +1 -1
  972. package/out/tools/fetch/{download/index.d.ts → download.d.ts} +1 -1
  973. package/out/tools/fetch/download.d.ts.map +1 -0
  974. package/out/tools/fetch/{download/index.js → download.js} +1 -1
  975. package/out/tools/fetch/download.js.map +1 -0
  976. package/out/tools/fetch/geonames/dump.d.ts +51 -32
  977. package/out/tools/fetch/geonames/dump.d.ts.map +1 -1
  978. package/out/tools/fetch/geonames/dump.js +54 -43
  979. package/out/tools/fetch/geonames/dump.js.map +1 -1
  980. package/out/tools/fetch/geonames/postal.d.ts +14 -49
  981. package/out/tools/fetch/geonames/postal.d.ts.map +1 -1
  982. package/out/tools/fetch/geonames/postal.js +17 -56
  983. package/out/tools/fetch/geonames/postal.js.map +1 -1
  984. package/out/tools/fetch/gleif.d.ts +138 -0
  985. package/out/tools/fetch/gleif.d.ts.map +1 -0
  986. package/out/tools/fetch/gleif.js +222 -0
  987. package/out/tools/fetch/gleif.js.map +1 -0
  988. package/out/tools/fetch/header.d.ts +43 -0
  989. package/out/tools/fetch/header.d.ts.map +1 -0
  990. package/out/tools/fetch/header.js +61 -0
  991. package/out/tools/fetch/header.js.map +1 -0
  992. package/out/tools/fetch/inspire-addresses.d.ts +254 -0
  993. package/out/tools/fetch/inspire-addresses.d.ts.map +1 -0
  994. package/out/tools/fetch/inspire-addresses.js +277 -0
  995. package/out/tools/fetch/inspire-addresses.js.map +1 -0
  996. package/out/tools/fetch/openaddresses.d.ts +1 -4
  997. package/out/tools/fetch/openaddresses.d.ts.map +1 -1
  998. package/out/tools/fetch/openaddresses.js +20 -99
  999. package/out/tools/fetch/openaddresses.js.map +1 -1
  1000. package/out/tools/fetch/ourairports.d.ts +6 -33
  1001. package/out/tools/fetch/ourairports.d.ts.map +1 -1
  1002. package/out/tools/fetch/ourairports.js +14 -47
  1003. package/out/tools/fetch/ourairports.js.map +1 -1
  1004. package/out/tools/fetch/ppd.d.ts +4 -3
  1005. package/out/tools/fetch/ppd.d.ts.map +1 -1
  1006. package/out/tools/fetch/ppd.js +10 -7
  1007. package/out/tools/fetch/ppd.js.map +1 -1
  1008. package/out/tools/fetch/vlaanderen-ad.d.ts +131 -0
  1009. package/out/tools/fetch/vlaanderen-ad.d.ts.map +1 -0
  1010. package/out/tools/fetch/vlaanderen-ad.js +293 -0
  1011. package/out/tools/fetch/vlaanderen-ad.js.map +1 -0
  1012. package/out/tools/fetch/wfs-harvest.d.ts +420 -0
  1013. package/out/tools/fetch/wfs-harvest.d.ts.map +1 -0
  1014. package/out/tools/fetch/wfs-harvest.js +525 -0
  1015. package/out/tools/fetch/wfs-harvest.js.map +1 -0
  1016. package/out/tools/fetch/wikidata-subvenue.d.ts +32 -100
  1017. package/out/tools/fetch/wikidata-subvenue.d.ts.map +1 -1
  1018. package/out/tools/fetch/wikidata-subvenue.js +27 -122
  1019. package/out/tools/fetch/wikidata-subvenue.js.map +1 -1
  1020. package/out/tools/fetch/zip-archive.d.ts +54 -0
  1021. package/out/tools/fetch/zip-archive.d.ts.map +1 -0
  1022. package/out/tools/fetch/zip-archive.js +58 -0
  1023. package/out/tools/fetch/zip-archive.js.map +1 -0
  1024. package/out/tools/fetch.d.ts +99 -0
  1025. package/out/tools/fetch.d.ts.map +1 -0
  1026. package/out/tools/fetch.js +95 -0
  1027. package/out/tools/fetch.js.map +1 -0
  1028. package/out/tools/golden/expand.d.ts +28 -13
  1029. package/out/tools/golden/expand.d.ts.map +1 -1
  1030. package/out/tools/golden/expand.js +51 -37
  1031. package/out/tools/golden/expand.js.map +1 -1
  1032. package/out/tools/golden/promote.d.ts +13 -8
  1033. package/out/tools/golden/promote.d.ts.map +1 -1
  1034. package/out/tools/golden/promote.js +38 -30
  1035. package/out/tools/golden/promote.js.map +1 -1
  1036. package/out/tools/golden/relabel-street/directory.d.ts +25 -10
  1037. package/out/tools/golden/relabel-street/directory.d.ts.map +1 -1
  1038. package/out/tools/golden/relabel-street/directory.js +44 -32
  1039. package/out/tools/golden/relabel-street/directory.js.map +1 -1
  1040. package/out/tools/golden/relabel-street/row.d.ts +18 -69
  1041. package/out/tools/golden/relabel-street/row.d.ts.map +1 -1
  1042. package/out/tools/golden/relabel-street/row.js +19 -77
  1043. package/out/tools/golden/relabel-street/row.js.map +1 -1
  1044. package/out/tools/golden/{relabel-street/index.d.ts → relabel-street.d.ts} +1 -1
  1045. package/out/tools/golden/relabel-street.d.ts.map +1 -0
  1046. package/out/tools/golden/{relabel-street/index.js → relabel-street.js} +1 -1
  1047. package/out/tools/golden/relabel-street.js.map +1 -0
  1048. package/out/tools/ingest-csv.d.ts +19 -15
  1049. package/out/tools/ingest-csv.d.ts.map +1 -1
  1050. package/out/tools/ingest-csv.js +42 -46
  1051. package/out/tools/ingest-csv.js.map +1 -1
  1052. package/out/tools/jsonl-to-parquet.d.ts +15 -28
  1053. package/out/tools/jsonl-to-parquet.d.ts.map +1 -1
  1054. package/out/tools/jsonl-to-parquet.js +49 -91
  1055. package/out/tools/jsonl-to-parquet.js.map +1 -1
  1056. package/out/tools/lint/recipe-output/vocab.d.ts +82 -0
  1057. package/out/tools/lint/recipe-output/vocab.d.ts.map +1 -0
  1058. package/out/tools/lint/{slice → recipe-output}/vocab.js +54 -69
  1059. package/out/tools/lint/recipe-output/vocab.js.map +1 -0
  1060. package/out/tools/lint/recipe-output.d.ts +73 -0
  1061. package/out/tools/lint/recipe-output.d.ts.map +1 -0
  1062. package/out/tools/lint/{slice/index.js → recipe-output.js} +93 -96
  1063. package/out/tools/lint/recipe-output.js.map +1 -0
  1064. package/out/tools/migrate/overlay-parquet.d.ts +30 -0
  1065. package/out/tools/migrate/overlay-parquet.d.ts.map +1 -0
  1066. package/out/tools/migrate/overlay-parquet.js +141 -0
  1067. package/out/tools/migrate/overlay-parquet.js.map +1 -0
  1068. package/out/tools/migrate/recipe-output.d.ts +35 -0
  1069. package/out/tools/migrate/recipe-output.d.ts.map +1 -0
  1070. package/out/tools/migrate/recipe-output.js +124 -0
  1071. package/out/tools/migrate/recipe-output.js.map +1 -0
  1072. package/out/tools/migrate/source-names.d.ts +52 -0
  1073. package/out/tools/migrate/source-names.d.ts.map +1 -0
  1074. package/out/tools/migrate/source-names.js +105 -0
  1075. package/out/tools/migrate/source-names.js.map +1 -0
  1076. package/out/tools/overlay/kryptonite.d.ts +33 -0
  1077. package/out/tools/overlay/kryptonite.d.ts.map +1 -0
  1078. package/out/tools/{slice → overlay}/kryptonite.js +39 -29
  1079. package/out/tools/overlay/kryptonite.js.map +1 -0
  1080. package/out/tools/overlay/manifest.d.ts +143 -0
  1081. package/out/tools/overlay/manifest.d.ts.map +1 -0
  1082. package/out/tools/overlay/manifest.js +261 -0
  1083. package/out/tools/overlay/manifest.js.map +1 -0
  1084. package/out/tools/overlay/merge-source.d.ts +74 -0
  1085. package/out/tools/overlay/merge-source.d.ts.map +1 -0
  1086. package/out/tools/overlay/merge-source.js +63 -0
  1087. package/out/tools/overlay/merge-source.js.map +1 -0
  1088. package/out/tools/overlay/split-slice.d.ts +66 -0
  1089. package/out/tools/overlay/split-slice.d.ts.map +1 -0
  1090. package/out/tools/overlay/split-slice.js +78 -0
  1091. package/out/tools/overlay/split-slice.js.map +1 -0
  1092. package/out/tools/overlay/translit.d.ts +55 -0
  1093. package/out/tools/overlay/translit.d.ts.map +1 -0
  1094. package/out/tools/{slice → overlay}/translit.js +61 -49
  1095. package/out/tools/overlay/translit.js.map +1 -0
  1096. package/out/tools/overture-subvenue.d.ts +17 -76
  1097. package/out/tools/overture-subvenue.d.ts.map +1 -1
  1098. package/out/tools/overture-subvenue.js +7 -74
  1099. package/out/tools/overture-subvenue.js.map +1 -1
  1100. package/out/tools/postcode-triples.d.ts +78 -127
  1101. package/out/tools/postcode-triples.d.ts.map +1 -1
  1102. package/out/tools/postcode-triples.js +200 -193
  1103. package/out/tools/postcode-triples.js.map +1 -1
  1104. package/out/tools/source-register/build.d.ts +147 -0
  1105. package/out/tools/source-register/build.d.ts.map +1 -0
  1106. package/out/tools/source-register/build.js +517 -0
  1107. package/out/tools/source-register/build.js.map +1 -0
  1108. package/out/tools/sub/venue/head-nouns.d.ts +9 -38
  1109. package/out/tools/sub/venue/head-nouns.d.ts.map +1 -1
  1110. package/out/tools/sub/venue/head-nouns.js +37 -74
  1111. package/out/tools/sub/venue/head-nouns.js.map +1 -1
  1112. package/out/tools/sub/venue/lexicon.d.ts +53 -84
  1113. package/out/tools/sub/venue/lexicon.d.ts.map +1 -1
  1114. package/out/tools/sub/venue/lexicon.js +42 -90
  1115. package/out/tools/sub/venue/lexicon.js.map +1 -1
  1116. package/out/tools/sub/venue/wikidata.d.ts +8 -6
  1117. package/out/tools/sub/venue/wikidata.d.ts.map +1 -1
  1118. package/out/tools/sub/venue/wikidata.js +12 -9
  1119. package/out/tools/sub/venue/wikidata.js.map +1 -1
  1120. package/out/tw/tools/fetch/gcis.d.ts +9 -3
  1121. package/out/tw/tools/fetch/gcis.d.ts.map +1 -1
  1122. package/out/tw/tools/fetch/gcis.js +19 -13
  1123. package/out/tw/tools/fetch/gcis.js.map +1 -1
  1124. package/out/types.d.ts +271 -101
  1125. package/out/types.d.ts.map +1 -1
  1126. package/out/types.js +133 -9
  1127. package/out/types.js.map +1 -1
  1128. package/out/us/adapters/fcc-bdc/adapter.d.ts +18 -36
  1129. package/out/us/adapters/fcc-bdc/adapter.d.ts.map +1 -1
  1130. package/out/us/adapters/fcc-bdc/adapter.js +25 -38
  1131. package/out/us/adapters/fcc-bdc/adapter.js.map +1 -1
  1132. package/out/us/adapters/state/hi-schools/adapter.d.ts +12 -11
  1133. package/out/us/adapters/state/hi-schools/adapter.d.ts.map +1 -1
  1134. package/out/us/adapters/state/hi-schools/adapter.js +26 -16
  1135. package/out/us/adapters/state/hi-schools/adapter.js.map +1 -1
  1136. package/out/us/adapters/state/hi-schools/workbook.d.ts +8 -3
  1137. package/out/us/adapters/state/hi-schools/workbook.d.ts.map +1 -1
  1138. package/out/us/adapters/state/hi-schools/workbook.js +3 -1
  1139. package/out/us/adapters/state/hi-schools/workbook.js.map +1 -1
  1140. package/out/us/adapters/state/ia-contractors/adapter.d.ts +13 -6
  1141. package/out/us/adapters/state/ia-contractors/adapter.d.ts.map +1 -1
  1142. package/out/us/adapters/state/ia-contractors/adapter.js +27 -14
  1143. package/out/us/adapters/state/ia-contractors/adapter.js.map +1 -1
  1144. package/out/us/adapters/state/ny-notaries/adapter.d.ts +7 -6
  1145. package/out/us/adapters/state/ny-notaries/adapter.d.ts.map +1 -1
  1146. package/out/us/adapters/state/ny-notaries/adapter.js +24 -22
  1147. package/out/us/adapters/state/ny-notaries/adapter.js.map +1 -1
  1148. package/out/us/adapters/state/tx-notaries/adapter.d.ts +8 -7
  1149. package/out/us/adapters/state/tx-notaries/adapter.d.ts.map +1 -1
  1150. package/out/us/adapters/state/tx-notaries/adapter.js +21 -14
  1151. package/out/us/adapters/state/tx-notaries/adapter.js.map +1 -1
  1152. package/out/us/adapters/tiger/adapter.d.ts +10 -34
  1153. package/out/us/adapters/tiger/adapter.d.ts.map +1 -1
  1154. package/out/us/adapters/tiger/adapter.js +18 -42
  1155. package/out/us/adapters/tiger/adapter.js.map +1 -1
  1156. package/out/us/adapters/tiger/street-decompose.d.ts +6 -13
  1157. package/out/us/adapters/tiger/street-decompose.d.ts.map +1 -1
  1158. package/out/us/adapters/tiger/street-decompose.js +7 -17
  1159. package/out/us/adapters/tiger/street-decompose.js.map +1 -1
  1160. package/out/us/adapters/usgov/hrsa-fqhc/adapter.d.ts +26 -20
  1161. package/out/us/adapters/usgov/hrsa-fqhc/adapter.d.ts.map +1 -1
  1162. package/out/us/adapters/usgov/hrsa-fqhc/adapter.js +41 -29
  1163. package/out/us/adapters/usgov/hrsa-fqhc/adapter.js.map +1 -1
  1164. package/out/us/adapters/usgov/imls-pls/adapter.d.ts +8 -7
  1165. package/out/us/adapters/usgov/imls-pls/adapter.d.ts.map +1 -1
  1166. package/out/us/adapters/usgov/imls-pls/adapter.js +25 -18
  1167. package/out/us/adapters/usgov/imls-pls/adapter.js.map +1 -1
  1168. package/out/us/adapters/usgov/irs-bmf/adapter.d.ts +11 -10
  1169. package/out/us/adapters/usgov/irs-bmf/adapter.d.ts.map +1 -1
  1170. package/out/us/adapters/usgov/irs-bmf/adapter.js +32 -22
  1171. package/out/us/adapters/usgov/irs-bmf/adapter.js.map +1 -1
  1172. package/out/us/adapters/usgov/nad/adapter.d.ts +11 -31
  1173. package/out/us/adapters/usgov/nad/adapter.d.ts.map +1 -1
  1174. package/out/us/adapters/usgov/nad/adapter.js +57 -111
  1175. package/out/us/adapters/usgov/nad/adapter.js.map +1 -1
  1176. package/out/us/adapters/usgov/nppes/adapter.d.ts +12 -22
  1177. package/out/us/adapters/usgov/nppes/adapter.d.ts.map +1 -1
  1178. package/out/us/adapters/usgov/nppes/adapter.js +62 -32
  1179. package/out/us/adapters/usgov/nppes/adapter.js.map +1 -1
  1180. package/out/us/adapters/usgov/samhsa-treatment-locator/adapter.d.ts +16 -15
  1181. package/out/us/adapters/usgov/samhsa-treatment-locator/adapter.d.ts.map +1 -1
  1182. package/out/us/adapters/usgov/samhsa-treatment-locator/adapter.js +38 -28
  1183. package/out/us/adapters/usgov/samhsa-treatment-locator/adapter.js.map +1 -1
  1184. package/out/us/fips-state.d.ts +19 -10
  1185. package/out/us/fips-state.d.ts.map +1 -1
  1186. package/out/us/fips-state.js +17 -8
  1187. package/out/us/fips-state.js.map +1 -1
  1188. package/out/{synthesizers → us/synthesizers}/intersection.d.ts +10 -8
  1189. package/out/us/synthesizers/intersection.d.ts.map +1 -0
  1190. package/out/{synthesizers → us/synthesizers}/intersection.js +46 -35
  1191. package/out/us/synthesizers/intersection.js.map +1 -0
  1192. package/out/{synthesizers → us/synthesizers}/street.d.ts +19 -12
  1193. package/out/us/synthesizers/street.d.ts.map +1 -0
  1194. package/out/{synthesizers → us/synthesizers}/street.js +45 -38
  1195. package/out/us/synthesizers/street.js.map +1 -0
  1196. package/out/us/tools/fetch/hrsa.d.ts +3 -3
  1197. package/out/us/tools/fetch/hrsa.d.ts.map +1 -1
  1198. package/out/us/tools/fetch/hrsa.js +6 -7
  1199. package/out/us/tools/fetch/hrsa.js.map +1 -1
  1200. package/out/us/tools/fetch/imls-pls.d.ts +5 -16
  1201. package/out/us/tools/fetch/imls-pls.d.ts.map +1 -1
  1202. package/out/us/tools/fetch/imls-pls.js +17 -34
  1203. package/out/us/tools/fetch/imls-pls.js.map +1 -1
  1204. package/out/us/tools/fetch/nad.d.ts +22 -10
  1205. package/out/us/tools/fetch/nad.d.ts.map +1 -1
  1206. package/out/us/tools/fetch/nad.js +30 -25
  1207. package/out/us/tools/fetch/nad.js.map +1 -1
  1208. package/out/us/tools/fetch/nppes.d.ts +6 -16
  1209. package/out/us/tools/fetch/nppes.d.ts.map +1 -1
  1210. package/out/us/tools/fetch/nppes.js +24 -36
  1211. package/out/us/tools/fetch/nppes.js.map +1 -1
  1212. package/out/us/tools/fetch/state/hi-schools.d.ts +9 -5
  1213. package/out/us/tools/fetch/state/hi-schools.d.ts.map +1 -1
  1214. package/out/us/tools/fetch/state/hi-schools.js +16 -14
  1215. package/out/us/tools/fetch/state/hi-schools.js.map +1 -1
  1216. package/out/us/tools/fetch/state/sources.d.ts +8 -7
  1217. package/out/us/tools/fetch/state/sources.d.ts.map +1 -1
  1218. package/out/us/tools/fetch/state/sources.js +8 -9
  1219. package/out/us/tools/fetch/state/sources.js.map +1 -1
  1220. package/out/us/tools/fetch/tiger-full.d.ts +1 -14
  1221. package/out/us/tools/fetch/tiger-full.d.ts.map +1 -1
  1222. package/out/us/tools/fetch/tiger-full.js +16 -55
  1223. package/out/us/tools/fetch/tiger-full.js.map +1 -1
  1224. package/out/utils/align.d.ts +26 -19
  1225. package/out/utils/align.d.ts.map +1 -1
  1226. package/out/utils/align.js +32 -47
  1227. package/out/utils/align.js.map +1 -1
  1228. package/out/utils/cooccurrence-stats.d.ts +58 -0
  1229. package/out/utils/cooccurrence-stats.d.ts.map +1 -0
  1230. package/out/utils/cooccurrence-stats.js +62 -0
  1231. package/out/utils/cooccurrence-stats.js.map +1 -0
  1232. package/out/utils/golden.d.ts +21 -31
  1233. package/out/utils/golden.d.ts.map +1 -1
  1234. package/out/utils/golden.js +30 -46
  1235. package/out/utils/golden.js.map +1 -1
  1236. package/out/utils/license.d.ts +159 -22
  1237. package/out/utils/license.d.ts.map +1 -1
  1238. package/out/utils/license.js +156 -26
  1239. package/out/utils/license.js.map +1 -1
  1240. package/out/utils/split.d.ts +66 -70
  1241. package/out/utils/split.d.ts.map +1 -1
  1242. package/out/utils/split.js +162 -69
  1243. package/out/utils/split.js.map +1 -1
  1244. package/out/utils/tokenize.d.ts +15 -44
  1245. package/out/utils/tokenize.d.ts.map +1 -1
  1246. package/out/utils/tokenize.js +18 -31
  1247. package/out/utils/tokenize.js.map +1 -1
  1248. package/out/utils/wof-json.d.ts +88 -62
  1249. package/out/utils/wof-json.d.ts.map +1 -1
  1250. package/out/utils/wof-json.js +77 -56
  1251. package/out/utils/wof-json.js.map +1 -1
  1252. package/out/{utils/index.js → utils.d.ts} +1 -2
  1253. package/out/utils.d.ts.map +1 -0
  1254. package/out/{utils/index.d.ts → utils.js} +1 -2
  1255. package/out/utils.js.map +1 -0
  1256. package/out/ve/recipes/reviewed-postcode-tail.d.ts +25 -7
  1257. package/out/ve/recipes/reviewed-postcode-tail.d.ts.map +1 -1
  1258. package/out/ve/recipes/reviewed-postcode-tail.js +33 -12
  1259. package/out/ve/recipes/reviewed-postcode-tail.js.map +1 -1
  1260. package/package.json +45 -488
  1261. package/lib/adapters/index.ts +0 -160
  1262. package/lib/adapters/synth-po-box/adapter.ts +0 -204
  1263. package/lib/adapters/utils/index.ts +0 -307
  1264. package/lib/recipes/bare/postcode/index.ts +0 -327
  1265. package/lib/recipes/sub/venue/index.ts +0 -997
  1266. package/lib/synthesizers/locale.ts +0 -261
  1267. package/lib/test-kit/index.ts +0 -100
  1268. package/lib/tools/align-slice.ts +0 -68
  1269. package/lib/tools/fetch/index.ts +0 -174
  1270. package/lib/tools/gb-title-case.ts +0 -69
  1271. package/lib/tools/index.ts +0 -28
  1272. package/lib/tools/lint/slice/vocab.ts +0 -376
  1273. package/lib/tools/overlay-manifest.ts +0 -215
  1274. package/lib/tools/slice/translit.ts +0 -218
  1275. package/lib/tools/sub/venue/harvest.ts +0 -234
  1276. package/lib/tools/sub/venue/surfaces.ts +0 -95
  1277. package/lib/tools/sub/venue/table.ts +0 -281
  1278. package/lib/utils/parquet.ts +0 -582
  1279. package/out/adapters/index.d.ts +0 -51
  1280. package/out/adapters/index.d.ts.map +0 -1
  1281. package/out/adapters/index.js +0 -97
  1282. package/out/adapters/index.js.map +0 -1
  1283. package/out/adapters/synth-po-box/adapter.d.ts +0 -67
  1284. package/out/adapters/synth-po-box/adapter.d.ts.map +0 -1
  1285. package/out/adapters/synth-po-box/adapter.js.map +0 -1
  1286. package/out/adapters/utils/index.d.ts +0 -191
  1287. package/out/adapters/utils/index.d.ts.map +0 -1
  1288. package/out/adapters/utils/index.js +0 -206
  1289. package/out/adapters/utils/index.js.map +0 -1
  1290. package/out/fr/adapters/ban/street-decompose.d.ts.map +0 -1
  1291. package/out/fr/adapters/ban/street-decompose.js.map +0 -1
  1292. package/out/no/recipes/street/index.d.ts +0 -18
  1293. package/out/no/recipes/street/index.d.ts.map +0 -1
  1294. package/out/no/recipes/street/index.js.map +0 -1
  1295. package/out/recipes/bare/postcode/index.d.ts +0 -62
  1296. package/out/recipes/bare/postcode/index.d.ts.map +0 -1
  1297. package/out/recipes/bare/postcode/index.js.map +0 -1
  1298. package/out/recipes/index.d.ts +0 -24
  1299. package/out/recipes/index.d.ts.map +0 -1
  1300. package/out/recipes/index.js.map +0 -1
  1301. package/out/recipes/po/box/index.d.ts +0 -17
  1302. package/out/recipes/po/box/index.d.ts.map +0 -1
  1303. package/out/recipes/po/box/index.js.map +0 -1
  1304. package/out/recipes/sub/venue/index.d.ts +0 -270
  1305. package/out/recipes/sub/venue/index.d.ts.map +0 -1
  1306. package/out/recipes/sub/venue/index.js +0 -728
  1307. package/out/recipes/sub/venue/index.js.map +0 -1
  1308. package/out/synthesizers/intersection.d.ts.map +0 -1
  1309. package/out/synthesizers/intersection.js.map +0 -1
  1310. package/out/synthesizers/locale.d.ts +0 -116
  1311. package/out/synthesizers/locale.d.ts.map +0 -1
  1312. package/out/synthesizers/locale.js +0 -150
  1313. package/out/synthesizers/locale.js.map +0 -1
  1314. package/out/synthesizers/street.d.ts.map +0 -1
  1315. package/out/synthesizers/street.js.map +0 -1
  1316. package/out/test-kit/index.d.ts +0 -48
  1317. package/out/test-kit/index.d.ts.map +0 -1
  1318. package/out/test-kit/index.js +0 -78
  1319. package/out/test-kit/index.js.map +0 -1
  1320. package/out/tools/align-slice.d.ts +0 -7
  1321. package/out/tools/align-slice.d.ts.map +0 -1
  1322. package/out/tools/align-slice.js +0 -55
  1323. package/out/tools/align-slice.js.map +0 -1
  1324. package/out/tools/fetch/download/index.d.ts.map +0 -1
  1325. package/out/tools/fetch/download/index.js.map +0 -1
  1326. package/out/tools/fetch/index.d.ts +0 -171
  1327. package/out/tools/fetch/index.d.ts.map +0 -1
  1328. package/out/tools/fetch/index.js +0 -170
  1329. package/out/tools/fetch/index.js.map +0 -1
  1330. package/out/tools/gb-title-case.d.ts +0 -2
  1331. package/out/tools/gb-title-case.d.ts.map +0 -1
  1332. package/out/tools/gb-title-case.js +0 -65
  1333. package/out/tools/gb-title-case.js.map +0 -1
  1334. package/out/tools/golden/relabel-street/index.d.ts.map +0 -1
  1335. package/out/tools/golden/relabel-street/index.js.map +0 -1
  1336. package/out/tools/index.d.ts +0 -28
  1337. package/out/tools/index.d.ts.map +0 -1
  1338. package/out/tools/index.js +0 -28
  1339. package/out/tools/index.js.map +0 -1
  1340. package/out/tools/lint/slice/index.d.ts +0 -93
  1341. package/out/tools/lint/slice/index.d.ts.map +0 -1
  1342. package/out/tools/lint/slice/index.js.map +0 -1
  1343. package/out/tools/lint/slice/vocab.d.ts +0 -90
  1344. package/out/tools/lint/slice/vocab.d.ts.map +0 -1
  1345. package/out/tools/lint/slice/vocab.js.map +0 -1
  1346. package/out/tools/overlay-manifest.d.ts +0 -89
  1347. package/out/tools/overlay-manifest.d.ts.map +0 -1
  1348. package/out/tools/overlay-manifest.js +0 -131
  1349. package/out/tools/overlay-manifest.js.map +0 -1
  1350. package/out/tools/slice/kryptonite.d.ts +0 -32
  1351. package/out/tools/slice/kryptonite.d.ts.map +0 -1
  1352. package/out/tools/slice/kryptonite.js.map +0 -1
  1353. package/out/tools/slice/translit.d.ts +0 -51
  1354. package/out/tools/slice/translit.d.ts.map +0 -1
  1355. package/out/tools/slice/translit.js.map +0 -1
  1356. package/out/tools/sub/venue/harvest.d.ts +0 -100
  1357. package/out/tools/sub/venue/harvest.d.ts.map +0 -1
  1358. package/out/tools/sub/venue/harvest.js +0 -168
  1359. package/out/tools/sub/venue/harvest.js.map +0 -1
  1360. package/out/tools/sub/venue/promotions.d.ts +0 -94
  1361. package/out/tools/sub/venue/promotions.d.ts.map +0 -1
  1362. package/out/tools/sub/venue/promotions.js.map +0 -1
  1363. package/out/tools/sub/venue/surfaces.d.ts +0 -45
  1364. package/out/tools/sub/venue/surfaces.d.ts.map +0 -1
  1365. package/out/tools/sub/venue/surfaces.js +0 -77
  1366. package/out/tools/sub/venue/surfaces.js.map +0 -1
  1367. package/out/tools/sub/venue/table.d.ts +0 -229
  1368. package/out/tools/sub/venue/table.d.ts.map +0 -1
  1369. package/out/tools/sub/venue/table.js +0 -108
  1370. package/out/tools/sub/venue/table.js.map +0 -1
  1371. package/out/utils/index.d.ts.map +0 -1
  1372. package/out/utils/index.js.map +0 -1
  1373. package/out/utils/parquet.d.ts +0 -178
  1374. package/out/utils/parquet.d.ts.map +0 -1
  1375. package/out/utils/parquet.js +0 -371
  1376. package/out/utils/parquet.js.map +0 -1
  1377. package/out/utils/slice-stats.d.ts +0 -52
  1378. package/out/utils/slice-stats.d.ts.map +0 -1
  1379. package/out/utils/slice-stats.js +0 -58
  1380. package/out/utils/slice-stats.js.map +0 -1
  1381. /package/lib/tools/fetch/{download/index.ts → download.ts} +0 -0
  1382. /package/lib/tools/golden/{relabel-street/index.ts → relabel-street.ts} +0 -0
@@ -3,51 +3,51 @@
3
3
  * @license AGPL-3.0
4
4
  * @author Teffen Ellis, et al.
5
5
  *
6
- * `overture`: Overture Maps Addresses adapter (epic #470 — the conditional corpus adapter, realized
7
- * 2026-06-20). Overture's global Addresses theme is the single-schema, well-normalized address
8
- * dataset that fixes OpenAddresses' per-country patchiness (OA dropped Spain; OA-DE omits the
9
- * Bundesland) — it even re-hosts the OA Spain data the standalone OA bucket no longer serves.
10
- *
11
- * This adapter consumes a per-country LINE-DELIMITED JSON dump of the corpus-relevant fields (`{
12
- * street, number, unit, postcode, locality }`), produced by `scripts/ingest-overture-addresses.ts
13
- * --corpus-jsonl` (which does the DuckDB / S3 heavy lifting and flattens `address_levels` → the
14
- * municipality locality). The split keeps `@mailwoman/corpus` — a RUNTIME dep of the `mailwoman`
15
- * CLI — free of the heavy native `@duckdb/node-api`; the adapter just streams JSONL line-by-line,
16
- * exactly like `openaddresses`.
17
- *
18
- * The `street` surface carries the locale's street keyword verbatim (`"CALLE JULAN"`, `"VIA
19
- * ROMA"`). We map it to `street` whole and let the downstream affix-relabel split `street_prefix`
20
- * — the same path every other source rides. This slice exists because the model was
21
- * en-us/fr-trained and never saw non-en/fr street formats (the 2026-06-19 EU parse-blocker
22
- * measured loc-correct ES 21% / IT 59% / NL 64% vs FR/US ~98%).
23
- *
24
- * `--country` is REQUIRED (the JSONL is per-country and the rows omit a country field), matching
25
- * `openaddresses`. License is Overture's CDLA-Permissive-2.0 (attribution; not share-alike).
26
- *
27
- * | Field | ComponentTag | | --------- | ---------------------------------------------- | |
28
- * `street` | `street` (keyword incl.; affix-relabel splits prefix) | | `number` | `house_number`
29
- * (skipped when "S-N"/"S/N" = sin número) | | `unit` | `unit` (if non-empty) | | `postcode`|
30
- * `postcode` | | `locality`| `locality` (Overture address_levels municipality, or postal_city) |
6
+ * `overture`: Overture Maps Addresses adapter. The `street` value keeps the locale's street keyword
7
+ * verbatim. The downstream affix-relabel step splits `street_prefix` from that value.
31
8
  */
32
9
 
33
- import { formatAddressRow } from "@mailwoman/codex/address-format"
10
+ import { formatAddressRow } from "@mailwoman/codex/address/format"
11
+ import { COUNTRY_SURFACE_FORMS } from "@mailwoman/codex/country"
34
12
  import { tryParsingJSON } from "@mailwoman/core/json"
13
+ import { sample } from "@mailwoman/core/random"
14
+ import { mulberry32 as makeMulberry32 } from "@mailwoman/core/utils"
35
15
  import { TextSpliterator } from "spliterator"
36
16
 
37
- import { stableSourceID } from "#adapters/utils"
38
- import type { AdapterOptions, CanonicalRow, CorpusAdapter } from "#types"
17
+ import { stableSourceID } from "#adapters/source-id"
18
+ import { SourceRegister } from "#registers"
19
+ import { AddressRole, type AdapterOptions, type CanonicalRow, type CorpusAdapter, SurfaceOrigin } from "#types"
39
20
 
40
21
  /**
41
- * Registry id for this adapter. Stamped into every row it emits, so a corpus record can be traced back to the dataset
42
- * it came from.
22
+ * Registry id stamped into every row this adapter emits, so a corpus record traces back to its dataset.
43
23
  */
44
24
  export const OVERTURE_ADAPTER_ID = "overture"
45
25
  /**
46
- * License carried by this source (CDLA-Permissive-2.0), attached to each row so downstream consumers inherit the terms
47
- * rather than having to look them up.
26
+ * License assigned by this source (`cdla-Permissive-2.0`, attribution-only
27
+ * rather than share-alike), attached to every row.
48
28
  */
49
29
  export const OVERTURE_DEFAULT_LICENSE = "CDLA-Permissive-2.0"
50
30
 
31
+ const DEFAULT_COUNTRY_SEED = 20_260_922
32
+
33
+ /**
34
+ * One attested written form of a country's name.
35
+ *
36
+ * Raises rather than returning empty when the codex has no entry, so a requested
37
+ * fraction cannot silently produce no country rows.
38
+ */
39
+ function countrySurfaceForm(country: string, random: () => number): string {
40
+ const forms = COUNTRY_SURFACE_FORMS[country as keyof typeof COUNTRY_SURFACE_FORMS]
41
+
42
+ if (!forms?.length) {
43
+ throw new Error(
44
+ `No COUNTRY_SURFACE_FORMS entry for ${country} — add it to codex/country/country.ts before using --country-fraction`
45
+ )
46
+ }
47
+
48
+ return sample(forms, random)
49
+ }
50
+
51
51
  /**
52
52
  * The flattened per-row shape emitted by `ingest-overture-addresses.ts --corpus-jsonl`.
53
53
  */
@@ -60,13 +60,11 @@ interface OvertureCorpusRow {
60
60
  }
61
61
 
62
62
  /**
63
- * Whether an Overture `unit` value is a secondary-unit designator — something with a digit in it, or one bare word
64
- * (`EG`, `Penthouse`) — rather than a name. Overture-SG writes the ESTATE or BUILDING name in this field (91,818 of
65
- * 142,210 rows carry a multi-word name such as `SERANGOON GARDEN ESTATE`) and the literal `NIL` on 47,407 more, where
66
- * every other country's rows carry a digit-bearing unit or nothing (DE 3,084 digit-bearing of 40,837 non-empty; NL and
67
- * ES none name-shaped). A name taught as `unit` teaches that a trailing proper name is one, which is the shape of the
68
- * `#NNN`-unit defect the corpus exists to cure. Such a value is dropped here; a register recipe that wants the building
69
- * name as a `venue` reads the JSONL itself.
63
+ * Whether an Overture `unit` value is a secondary-unit designator
64
+ * (a digit or a single bare word) rather than a name.
65
+ *
66
+ * Overture-SG puts an estate name in this field on 91,818 of 142,210 rows and the literal
67
+ * `NIL` on 47,407 more, so a name taught as `unit` would teach a trailing proper name.
70
68
  */
71
69
  export function unitFieldIsDesignator(value: string): boolean {
72
70
  const trimmed = value.trim()
@@ -90,6 +88,11 @@ export function createOvertureAdapter(): CorpusAdapter {
90
88
  return {
91
89
  id: OVERTURE_ADAPTER_ID,
92
90
  defaultLicense: OVERTURE_DEFAULT_LICENSE,
91
+ addressRole: AddressRole.Premise,
92
+ // Overture rows include their own `sources[].dataset` and `sources[].license`,
93
+ // so this declares the aggregator rather than asserting a national grant.
94
+ register: SourceRegister.Overture,
95
+ surface: SurfaceOrigin.Rendered,
93
96
  description: "Overture Maps Addresses (global): per-country JSONL of street/number/postcode/locality.",
94
97
 
95
98
  async *rows(opts: AdapterOptions): AsyncIterable<CanonicalRow> {
@@ -100,10 +103,10 @@ export function createOvertureAdapter(): CorpusAdapter {
100
103
  }
101
104
 
102
105
  const country = opts.country
106
+ const countryFraction = opts.countryFraction ?? 0
107
+ const random = makeMulberry32(opts.seed ?? DEFAULT_COUNTRY_SEED)
103
108
 
104
- // TextSpliterator streams string lines (parseLine keeps tolerating blank/`#`/malformed
105
- // lines by returning null); the path string lets the lib own + dispose the file handle,
106
- // including on an early `break`.
109
+ // The path string lets `TextSpliterator` own and dispose the file handle, including on an early `break`.
107
110
  const lines = TextSpliterator.fromAsync(opts.inputPath)
108
111
 
109
112
  let emitted = 0
@@ -123,7 +126,7 @@ export function createOvertureAdapter(): CorpusAdapter {
123
126
  const postcode = r.postcode?.trim() ?? ""
124
127
  const locality = r.locality?.trim() ?? ""
125
128
 
126
- // Only useful with a street + (postcode OR locality); point-only rows quarantine anyway.
129
+ // Only useful with a street + (postcode or locality); point-only rows quarantine anyway.
127
130
  if (!street) continue
128
131
 
129
132
  if (!postcode && !locality) continue
@@ -149,6 +152,12 @@ export function createOvertureAdapter(): CorpusAdapter {
149
152
  components.locality = locality
150
153
  }
151
154
 
155
+ // Overture rows are country-implicit, so the surface form goes into `components`
156
+ // and each country's layout decides where the country lands in the rendered string.
157
+ if (countryFraction > 0 && random() < countryFraction) {
158
+ components.country = countrySurfaceForm(country, random)
159
+ }
160
+
152
161
  const rendered = formatAddressRow(components, country, { singleLine: true })
153
162
 
154
163
  if (!rendered) continue
@@ -0,0 +1,207 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ *
6
+ * PO box / PMB / Apartado / BP synthesizer adapter. It emits {@linkcode PO_BOX_ADAPTER_ID}.
7
+ *
8
+ * A PO box delivery line is mutually exclusive with a street line (USPS Pub 28 / DMM 508), so rows
9
+ * are generated fresh from a tuple rather than by mutating a street row.
10
+ */
11
+
12
+ import { tryParsingJSON } from "@mailwoman/core/json"
13
+ import { makeLcg } from "@mailwoman/core/random"
14
+ import { TextSpliterator } from "spliterator"
15
+
16
+ import { stableSourceID } from "#adapters/source-id"
17
+ import { defaultRecipeSource } from "#recipes/sources"
18
+ import {
19
+ poBoxTemplateLocale,
20
+ REGION_OPTIONAL_LOCALES,
21
+ synthesizeMilitaryPoBoxRow,
22
+ synthesizePoBoxRow,
23
+ type PoBoxBaseTuple,
24
+ } from "#synthesizers/po-box"
25
+ import { AddressRole, type AdapterOptions, type CanonicalRow, type CorpusAdapter, SurfaceOrigin } from "#types"
26
+
27
+ /**
28
+ * Registry id stamped into every row this adapter emits, so a corpus record traces back to its dataset.
29
+ *
30
+ * The value comes from `RECIPE_SOURCES` because `recipes/po/box/index.ts` writes rows under the same id.
31
+ * Two producers of one id have to spell it the same way, or a rewrite of a corpus through that table
32
+ * moves the recipe's rows and leaves this adapter's behind under a name the table no longer answers for.
33
+ */
34
+ export const PO_BOX_ADAPTER_ID = defaultRecipeSource("synth-po-box")
35
+ /**
36
+ * License for synthetic PO-box rows.
37
+ *
38
+ * They inherit the terms of the real tuples used to derive them.
39
+ *
40
+ * The value is stored in each row's `license` column and read by `licenseNamedIn`,
41
+ * so it stays byte-for-byte.
42
+ */
43
+ export const PO_BOX_LICENSE = "Synthetic — derived from CC-BY / public-domain input tuples"
44
+
45
+ export interface PoBoxInputRow extends PoBoxBaseTuple {
46
+ street?: string
47
+ houseNumber?: string
48
+ }
49
+
50
+ export interface PoBoxAdapterOptions {
51
+ /**
52
+ * How many PO box variants to emit per input tuple, each picking a different leader
53
+ * (and possibly a different number or noise level); default 1.
54
+ */
55
+ variantsPerInput?: number
56
+ /**
57
+ * Probability (0..1) of emitting a PMB-with-street variant when the input has
58
+ * a street and the locale supports PMB.
59
+ *
60
+ * @defaultValue `0.15`
61
+ */
62
+ pmbRatio?: number
63
+ /**
64
+ * Deterministic seed for reproducible synthesis.
65
+ *
66
+ * @defaultValue `Date.now()`
67
+ */
68
+ seed?: number
69
+ /**
70
+ * Probability (0..1) per input tuple of additionally emitting one self-contained US
71
+ * military/diplomatic PO-box row, so military volume scales with the input stream.
72
+ *
73
+ * @defaultValue `0`
74
+ */
75
+ militaryRatio?: number
76
+ }
77
+
78
+ export function createPoBoxAdapter(opts: PoBoxAdapterOptions = {}): CorpusAdapter {
79
+ const variantsPerInput = opts.variantsPerInput ?? 1
80
+ const pmbRatio = opts.pmbRatio ?? 0.15
81
+ const militaryRatio = opts.militaryRatio ?? 0
82
+
83
+ return {
84
+ id: PO_BOX_ADAPTER_ID,
85
+ defaultLicense: PO_BOX_LICENSE,
86
+ addressRole: AddressRole.Mailing,
87
+ // No register asserts these boxes exist.
88
+ // The rows teach the shape of a post-office box line.
89
+ register: null,
90
+ surface: SurfaceOrigin.Invented,
91
+ description:
92
+ "Synthetic PO box / PMB / Apartado / Boîte Postale rows. Consumes JSONL of (locality, region, postcode, country) tuples and emits locale-appropriate PO box variants.",
93
+
94
+ async *rows(options: AdapterOptions): AsyncIterable<CanonicalRow> {
95
+ const random = makeLcg(opts.seed ?? Date.now())
96
+
97
+ // A non-throwing parse (the `skipped++` below) tolerates malformed rows,
98
+ // unlike `JSONSpliterator`, which would throw on the first bad line.
99
+ const lines = TextSpliterator.fromAsync(options.inputPath)
100
+
101
+ let emitted = 0
102
+ let skipped = 0
103
+ let militarySeq = 0
104
+
105
+ for await (const line of lines) {
106
+ if (options.signal?.aborted) break
107
+
108
+ if (options.limit !== undefined && emitted >= options.limit) break
109
+
110
+ const trimmed = line.trim()
111
+
112
+ if (!trimmed) continue
113
+
114
+ const input = tryParsingJSON<PoBoxInputRow>(trimmed)
115
+
116
+ if (!input) {
117
+ skipped++
118
+
119
+ continue
120
+ }
121
+
122
+ // Region is required except for region-less locales (NZ: `Private Bag 12, Auckland 1010` has
123
+ // no region token), where the guard must not discard the tuple as missing region.
124
+ const regionOptional = input.country ? REGION_OPTIONAL_LOCALES.has(poBoxTemplateLocale(input.country)) : false
125
+
126
+ if (!input.locality || !input.postcode || !input.country || (!input.region && !regionOptional)) {
127
+ skipped++
128
+
129
+ continue
130
+ }
131
+
132
+ if (options.country && options.country !== input.country) continue
133
+
134
+ for (let v = 0; v < variantsPerInput; v++) {
135
+ const synth = synthesizePoBoxRow(input, { random, pmbRatio })
136
+
137
+ if (!synth) continue
138
+
139
+ // Include `v` in the locality slot to vary the digest across variants;
140
+ // `stableSourceID` only accepts `ComponentTag` keys.
141
+ const sourceID = stableSourceID(PO_BOX_ADAPTER_ID, {
142
+ locality: `${input.locality}#${v}`,
143
+ region: input.region,
144
+ postcode: input.postcode,
145
+ country: input.country,
146
+ })
147
+
148
+ yield {
149
+ raw: synth.raw,
150
+ components: synth.components,
151
+ country: input.country,
152
+ locale: synth.locale,
153
+ source: PO_BOX_ADAPTER_ID,
154
+ source_id: sourceID,
155
+ corpus_version: "",
156
+ license: PO_BOX_LICENSE,
157
+ }
158
+
159
+ emitted++
160
+
161
+ if (options.limit !== undefined && emitted >= options.limit) break
162
+ }
163
+
164
+ // US military/diplomatic rows are self-contained and off by default,
165
+ // so the default random stream and output stay byte-identical.
166
+ // They are US-only and count against `limit`. country-branch: APO/FPO/DPO
167
+ // rows exist in the US postal system only.
168
+ // A postal-regime flag in the codex would replace this.
169
+ const militaryAllowed = !options.country || options.country === "US"
170
+
171
+ if (
172
+ militaryRatio > 0 &&
173
+ militaryAllowed &&
174
+ (options.limit === undefined || emitted < options.limit) &&
175
+ random() < militaryRatio
176
+ ) {
177
+ const mil = synthesizeMilitaryPoBoxRow({ random })
178
+
179
+ const sourceID = stableSourceID(PO_BOX_ADAPTER_ID, {
180
+ po_box: `${mil.components.po_box}#mil${militarySeq++}`,
181
+ locality: mil.components.locality!,
182
+ region: mil.components.region!,
183
+ postcode: mil.components.postcode!,
184
+ })
185
+
186
+ yield {
187
+ raw: mil.raw,
188
+ components: mil.components,
189
+ country: "US",
190
+ locale: mil.locale,
191
+ source: PO_BOX_ADAPTER_ID,
192
+ source_id: sourceID,
193
+ corpus_version: "",
194
+ license: PO_BOX_LICENSE,
195
+ }
196
+
197
+ emitted++
198
+ }
199
+ }
200
+ },
201
+ }
202
+ }
203
+
204
+ /**
205
+ * The configured adapter instance registered with the corpus builder.
206
+ */
207
+ export const poBoxAdapter = createPoBoxAdapter()
@@ -0,0 +1,79 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ *
6
+ * The lookup table that resolves an adapter id to its implementation.
7
+ *
8
+ * `mailwoman corpus run <adapter-id>` and the `corpus build` pipeline both resolve `<adapter-id>`
9
+ * through this registry. Adapters do not self-register at module load; `adapters.ts` adds each one
10
+ * explicitly, so the dependency graph stays traceable.
11
+ */
12
+
13
+ import { stringifyJSON } from "@mailwoman/core/json"
14
+
15
+ import type { CorpusAdapter } from "#types"
16
+
17
+ /**
18
+ * Lookup table for corpus adapters.
19
+ */
20
+ export interface AdapterRegistry {
21
+ /**
22
+ * Add an adapter.
23
+ *
24
+ * @throws If `adapter.id` is already registered.
25
+ */
26
+ register(adapter: CorpusAdapter): void
27
+
28
+ /**
29
+ * Return the adapter for `id`, or `null`.
30
+ */
31
+ get(id: string): CorpusAdapter | null
32
+
33
+ /**
34
+ * All registered adapters, in insertion order.
35
+ */
36
+ list(): readonly CorpusAdapter[]
37
+
38
+ /**
39
+ * Convenience: ids only, in insertion order.
40
+ */
41
+ ids(): readonly string[]
42
+ }
43
+
44
+ /**
45
+ * Default in-memory registry.
46
+ *
47
+ * The runner constructs one per invocation.
48
+ * The CLI re-uses {@linkcode defaultAdapterRegistry}, which `adapters.ts` populates.
49
+ */
50
+ export class InMemoryAdapterRegistry implements AdapterRegistry {
51
+ #byID = new Map<string, CorpusAdapter>()
52
+
53
+ register(adapter: CorpusAdapter): void {
54
+ if (this.#byID.has(adapter.id)) {
55
+ throw new Error(`AdapterRegistry: id ${stringifyJSON(adapter.id)} already registered`)
56
+ }
57
+
58
+ this.#byID.set(adapter.id, adapter)
59
+ }
60
+
61
+ get(id: string): CorpusAdapter | null {
62
+ return this.#byID.get(id) ?? null
63
+ }
64
+
65
+ list(): readonly CorpusAdapter[] {
66
+ return Array.from(this.#byID.values())
67
+ }
68
+
69
+ ids(): readonly string[] {
70
+ return Array.from(this.#byID.keys())
71
+ }
72
+ }
73
+
74
+ /**
75
+ * Process-wide default registry, populated by `adapters.ts`.
76
+ *
77
+ * A test constructs its own {@linkcode InMemoryAdapterRegistry} rather than mutating this one.
78
+ */
79
+ export const defaultAdapterRegistry = new InMemoryAdapterRegistry()
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ *
6
+ * The incremental digest the runner records in `manifest.json`.
7
+ */
8
+
9
+ import { createHash, type Hash } from "@mailwoman/core/hash"
10
+
11
+ /**
12
+ * A digest built from chunks rather than from one value.
13
+ *
14
+ * `@mailwoman/core/hash` covers one-shot digests with `sha256Hex` and whole-file digests with `sha256File`.
15
+ * The runner needs neither, because it hashes each jsonl line as it streams past
16
+ * and would otherwise read the file a second time for the manifest checksum.
17
+ */
18
+ export interface StreamingHasher {
19
+ update(chunk: string | Uint8Array): void
20
+ digest(): string
21
+ }
22
+
23
+ /**
24
+ * A SHA-256 {@linkcode StreamingHasher} returning a hex digest.
25
+ *
26
+ * `digest()` is idempotent and `update()` after it throws, so a caller cannot
27
+ * extend a digest it has already recorded.
28
+ */
29
+ export function streamingSha256(): StreamingHasher {
30
+ const h: Hash = createHash("sha256")
31
+ let finalized = false
32
+ let digestHex = ""
33
+
34
+ return {
35
+ update(chunk) {
36
+ if (finalized) throw new Error("streamingSha256: update() called after digest()")
37
+
38
+ h.update(chunk)
39
+ },
40
+ digest() {
41
+ if (!finalized) {
42
+ digestHex = h.digest("hex")
43
+ finalized = true
44
+ }
45
+
46
+ return digestHex
47
+ },
48
+ }
49
+ }
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ *
6
+ * The deterministic row id for a source that publishes no primary key of its own.
7
+ *
8
+ * A CSV row or GeoJSON feature often has no stable identifier. The runner still needs one, so
9
+ * deduplication and holdout manifests agree across reruns and a run can resume. These functions
10
+ * derive it by hashing the adapter id together with a canonical serialization of the row's values.
11
+ *
12
+ * The separator bytes are part of the hashed stream, so changing them changes every id in every
13
+ * built corpus.
14
+ */
15
+
16
+ import type { ComponentTag } from "@mailwoman/codex/component"
17
+ import { sha256Hex } from "@mailwoman/core/hash"
18
+
19
+ /**
20
+ * The deterministic content-addressed source id for a row, keyed by its components.
21
+ *
22
+ * The output is `<adapterID>-<first 12 hex characters of sha256>`.
23
+ * Twelve hex characters give 48 bits, about 17 million rows per adapter
24
+ * before the expected collision count passes 1.
25
+ * An adapter above that extends the prefix.
26
+ */
27
+ export function stableSourceID(adapterID: string, components: Partial<Record<ComponentTag, string>>): string {
28
+ return stableSourceIDFromParts(adapterID, components)
29
+ }
30
+
31
+ /**
32
+ * {@linkcode stableSourceID} over arbitrary disambiguator keys, such as a variant index
33
+ * or a slot number that is not a `ComponentTag`.
34
+ *
35
+ * Both functions sort and hash every key handed in, so only the key vocabulary differs.
36
+ * The narrower signature above stops an adapter from hashing a misspelled component name.
37
+ */
38
+ export function stableSourceIDFromParts(
39
+ adapterID: string,
40
+ parts: Readonly<Record<string, string | undefined>>
41
+ ): string {
42
+ const sortedKeys = Object.keys(parts).toSorted()
43
+ const payload = sortedKeys.map((k) => `${k}=${parts[k] ?? ""}`).join("\u001F")
44
+ // One `update` over the joined string rather than three chained ones — identical byte stream
45
+ // either way, but the separator has to stay inline or every id in every built corpus changes.
46
+ const digest = sha256Hex(`${adapterID}\u001E${payload}`)
47
+
48
+ return `${adapterID}-${digest.slice(0, 12)}`
49
+ }
@@ -0,0 +1,136 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ *
6
+ * This module reads a house number and a street out of the columns a publisher supplies.
7
+ *
8
+ * Publishers divide the same address two ways. Some write one street line that holds the number and
9
+ * the street together. {@linkcode splitStreetLine} separates that line for a number-first country and
10
+ * {@linkcode splitTrailingStreetLine} for a number-last one. Others write the number across
11
+ * two columns. {@linkcode composeHouseNumber} joins those. Every adapter facing either shape uses
12
+ * these, so an edge case fixed here is fixed for all of them.
13
+ *
14
+ * Which of the two split functions a country takes is `STREET_ORDERS` in
15
+ * `packages/mailwoman/tools/dev-tools/codex/street-orders.ts`, whose values reach the generated
16
+ * layouts `@mailwoman/codex/address/layouts` serves.
17
+ */
18
+
19
+ /**
20
+ * A leading house number on a US-style street line contains digits and an optional hyphenated range
21
+ * (Queens `40-12`), an optional single alpha suffix (`101A`), then whitespace, then the rest.
22
+ *
23
+ * The remainder must stay `(\S.*)` and must not become `(.+)`: `\s+` and `.` both match a tab,
24
+ * so `\s+(.+)$` lets the engine split a run of tabs between the two groups every possible way
25
+ * before failing — quadratic backtracking on attacker-shaped input.
26
+ * The required non-space start removes the overlap.
27
+ *
28
+ * Group 2 is trimmed by the caller either way, so the two forms are indistinguishable on real input.
29
+ * Only the failure cost differs.
30
+ */
31
+ export const HOUSE_NUMBER_PREFIX = /^(\d+(?:-\d+)?[A-Za-z]?)\s+(\S.*)$/
32
+
33
+ /**
34
+ * A street line split into its house number and the remainder.
35
+ */
36
+ export interface SplitStreetLine {
37
+ house_number?: string
38
+ street: string
39
+ }
40
+
41
+ /**
42
+ * Split a US-style street line on {@link HOUSE_NUMBER_PREFIX}.
43
+ *
44
+ * The US CSV sources follow USPS Publication 28 conventions with hand-entry drift.
45
+ * The leading digit run is the house number (`"123 Main St"`, `"6450 W Indian School Rd"`),
46
+ * and the regex tolerates one trailing letter (`"123A Main St"`) plus an optional
47
+ * hyphenated half (`"40-12 Bell Blvd"`, common in NYC and suburban garden-apartment
48
+ * numbering. Hawaii uses it island-wide — `"47-470 Hui Aeko Place"`).
49
+ *
50
+ * @returns `null` for blank input.
51
+ * An input that does not match the prefix shape, including `"PO Box 1234"`,
52
+ * `"RR 2 Box 67"` and `"HC 1"`, becomes a single `street` value rather than being mangled,
53
+ * so the model sees the original surface form and downstream classifiers pick it up.
54
+ * A caller that needs those forms recognized as something other than a street
55
+ * (see `usgov-irs-bmf`) tests for them before calling this.
56
+ */
57
+ export function splitStreetLine(line: string): SplitStreetLine | null {
58
+ const trimmed = line.trim()
59
+
60
+ if (!trimmed) return null
61
+
62
+ const match = HOUSE_NUMBER_PREFIX.exec(trimmed)
63
+
64
+ if (match) return { house_number: match[1], street: match[2]!.trim() }
65
+
66
+ return { street: trimmed }
67
+ }
68
+
69
+ /**
70
+ * A trailing house number on a number-last street line contains digits,
71
+ * an optional single alpha suffix written against them (`39A`), and an optional slash-
72
+ * or hyphen-joined subdivision (`2/TER`, `16/18`, `12-B`).
73
+ *
74
+ * The street and the number are separated by whitespace, a comma, or both,
75
+ * because a publisher in a number-last country may write either: Italy's ANAC release
76
+ * holds `VIA INDIPENDENZA, 41` and `VIA MAZZINI 7` in the same column.
77
+ * The separator is required, so `VIA1` stays one street name.
78
+ *
79
+ * Group 1 starts at `\S` and the lazy `.*?` is bounded by that required separator,
80
+ * so a run of whitespace between the two groups has one split rather than every possible split.
81
+ * That is the same backtracking argument {@linkcode HOUSE_NUMBER_PREFIX} records, read from the other end.
82
+ */
83
+ export const HOUSE_NUMBER_SUFFIX = /^(\S.*?)[\s,]+(\d+[A-Za-z]?(?:\s*[/-]\s*[0-9A-Za-z]{1,4})?)$/u
84
+
85
+ /**
86
+ * Split a number-last street line on {@link HOUSE_NUMBER_SUFFIX}.
87
+ *
88
+ * A number-last country writes the number after the street name.
89
+ * `STREET_ORDERS` records that order for Italy, Germany, Finland and 150 other jurisdictions.
90
+ *
91
+ * Whitespace inside the line is collapsed, and the separators inside a subdivided
92
+ * number are closed up, so `VIA PERUGIA 2 / A` yields `2/A`.
93
+ *
94
+ * @returns `null` for blank input.
95
+ * A line that ends in anything but a number becomes a single `street` value
96
+ * rather than being mangled, as `PIAZZA CASTELLO` and `VIALE ROMA SNC` do.
97
+ * A caller that treats an unplaced number inside such a line as a defect tests
98
+ * the returned `street` for a digit.
99
+ * This function leaves that decision to the caller, because a street name can legitimately hold a digit.
100
+ */
101
+ export function splitTrailingStreetLine(line: string): SplitStreetLine | null {
102
+ const trimmed = line.replaceAll(/\s+/gu, " ").trim()
103
+
104
+ if (!trimmed) return null
105
+
106
+ const match = HOUSE_NUMBER_SUFFIX.exec(trimmed)
107
+
108
+ if (!match) return { street: trimmed }
109
+
110
+ return { house_number: match[2]!.replaceAll(/\s*([/-])\s*/gu, "$1"), street: match[1]!.trim() }
111
+ }
112
+
113
+ /**
114
+ * Joins a house number to the suffix a publisher stores in its own column.
115
+ *
116
+ * Several registers split a house number across two columns: BAN writes `10`
117
+ * and `bis`, Kartverket writes `12` and `B`.
118
+ * The separator differs per publisher, so the caller states it, and the two values are
119
+ * trimmed here because a publisher's padding is not part of the number.
120
+ *
121
+ * @param number The numeric part, from the publisher's number column.
122
+ * @param suffix The letter or word that follows it, from the publisher's suffix column.
123
+ * @param separator What to place between them.
124
+ * Kartverket joins `12` and `B` as `12B`; BAN joins `10` and `bis` as `10 bis`.
125
+ * @returns The joined number, or an empty string when the numeric part is absent.
126
+ * A caller treats the empty string as a row with no house number rather than assigning it.
127
+ */
128
+ export function composeHouseNumber(number: string, suffix: string, separator = ""): string {
129
+ const trimmedNumber = number.trim()
130
+
131
+ if (!trimmedNumber) return ""
132
+
133
+ const trimmedSuffix = suffix.trim()
134
+
135
+ return trimmedSuffix ? `${trimmedNumber}${separator}${trimmedSuffix}` : trimmedNumber
136
+ }