@mailwoman/corpus 9.4.0 → 10.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1724) hide show
  1. package/README.md +134 -32
  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 +785 -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 +116 -0
  24. package/lib/adapters/gleif/adapter.ts +828 -0
  25. package/lib/adapters/libpostal-dictionary.ts +39 -0
  26. package/lib/adapters/openaddresses/adapter.ts +54 -61
  27. package/lib/adapters/osm/adapter.ts +356 -0
  28. package/lib/adapters/overture/adapter.ts +65 -41
  29. package/lib/adapters/po-box/adapter.ts +202 -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 +135 -0
  34. package/lib/adapters/wof/admin/json/adapter.ts +254 -0
  35. package/lib/adapters/wof/json-rows.ts +211 -0
  36. package/lib/adapters/wof/postalcode-json/adapter.ts +194 -0
  37. package/lib/adapters.ts +230 -0
  38. package/lib/au/adapters/gnaf/adapter.ts +144 -0
  39. package/lib/au/adapters/gnaf/assemble.ts +205 -0
  40. package/lib/be/adapters/brussels/adapter.ts +566 -0
  41. package/lib/be/adapters/vlaanderen/adapter.ts +670 -0
  42. package/lib/be/adapters/wallonie/adapter.ts +537 -0
  43. package/lib/be/tools/fetch/brussels.ts +239 -0
  44. package/lib/be/tools/fetch/wallonie.ts +274 -0
  45. package/lib/build/adapters.ts +110 -0
  46. package/lib/build/align.ts +364 -0
  47. package/lib/build/checkpoint.ts +131 -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 +232 -0
  53. package/lib/build.ts +127 -315
  54. package/lib/cn/recipes/organizational-units.ts +178 -0
  55. package/lib/cz/adapters/cuzk/adapter.ts +317 -0
  56. package/lib/cz/recipes/pcfirst-preposition.ts +125 -0
  57. package/lib/cz/tools/fetch/cuzk.ts +699 -0
  58. package/lib/de/recipes/locale.ts +370 -0
  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 +321 -0
  62. package/lib/ee/adapters/ads/adapter.ts +246 -0
  63. package/lib/ee/tools/fetch/ads.ts +270 -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 +343 -0
  67. package/lib/es/adapters/gipuzkoa/adapter.ts +263 -0
  68. package/lib/es/adapters/navarra/adapter.ts +289 -0
  69. package/lib/es/cadastre.ts +194 -0
  70. package/lib/es/tools/fetch/bizkaia.ts +748 -0
  71. package/lib/es/tools/fetch/catastro.ts +754 -0
  72. package/lib/es/tools/fetch/gipuzkoa.ts +336 -0
  73. package/lib/es/tools/fetch/navarra.ts +488 -0
  74. package/lib/fi/adapters/ryhti/adapter.ts +323 -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 +598 -0
  78. package/lib/fr/adapters/ban/adapter.ts +187 -0
  79. package/lib/fr/adapters/finess/adapter.ts +618 -0
  80. package/lib/fr/adapters/finess/postal-lines.ts +157 -0
  81. package/lib/fr/adapters/finess/voie-type.ts +200 -0
  82. package/lib/fr/insee-country.ts +62 -0
  83. package/lib/fr/recipes/admin-split.ts +221 -0
  84. package/lib/fr/recipes/bare-street.ts +158 -0
  85. package/lib/fr/recipes/fragment.ts +251 -0
  86. package/lib/fr/recipes/lieudit.ts +310 -0
  87. package/lib/fr/recipes/order.ts +219 -0
  88. package/lib/fr/street-decompose.ts +67 -0
  89. package/lib/fr/tools/fetch/annuaire-education.ts +306 -0
  90. package/lib/fr/tools/fetch/ban.ts +298 -0
  91. package/lib/fr/tools/fetch/finess.ts +352 -0
  92. package/lib/gauntlet-inputs.ts +92 -0
  93. package/lib/index.ts +10 -4
  94. package/lib/inspire/address.ts +457 -0
  95. package/lib/inspire/archive.ts +44 -0
  96. package/lib/inspire/errors.ts +71 -0
  97. package/lib/inspire/stream.ts +262 -0
  98. package/lib/international/recipes/locale.ts +556 -0
  99. package/lib/it/adapters/anac/adapter.ts +522 -0
  100. package/lib/it/tools/fetch/anac.ts +394 -0
  101. package/lib/jp/adapters/wof-admin/adapter.ts +224 -0
  102. package/lib/jp/tools/fetch/houjin.ts +139 -0
  103. package/lib/kr/adapters/juso/label-rows.ts +239 -0
  104. package/lib/kr/adapters/localdata/align.ts +288 -0
  105. package/lib/kr/adapters/localdata/key-index.ts +177 -0
  106. package/lib/kr/adapters/localdata/permit-rows.ts +193 -0
  107. package/lib/kr/tools/fetch/juso.ts +170 -0
  108. package/lib/kr/tools/fetch/localdata.ts +205 -0
  109. package/lib/lu/adapters/bd-adresses/adapter.ts +240 -0
  110. package/lib/lu/tools/fetch/bd-adresses.ts +351 -0
  111. package/lib/lv/adapters/varis/adapter.ts +499 -0
  112. package/lib/lv/tools/fetch/varis.ts +214 -0
  113. package/lib/nl/adapters/kadaster/adapter.ts +386 -0
  114. package/lib/nl/recipes/postcode.ts +139 -0
  115. package/lib/nl/tools/fetch/kadaster.ts +298 -0
  116. package/lib/no/adapters/matrikkelen/adapter.ts +187 -0
  117. package/lib/no/recipes/fragment.ts +189 -0
  118. package/lib/no/recipes/street/led.ts +154 -0
  119. package/lib/no/recipes/street.ts +109 -0
  120. package/lib/no/tools/fetch/matrikkelen.ts +519 -0
  121. package/lib/parquet/duckdb.ts +144 -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 +451 -0
  128. package/lib/pl/adapters/emuia/adapter.ts +202 -0
  129. package/lib/pl/tools/fetch/emuia.ts +360 -0
  130. package/lib/recipes/anchor-absorption.ts +30 -19
  131. package/lib/recipes/bare/country.ts +87 -0
  132. package/lib/recipes/bare/postcode/eval.ts +99 -0
  133. package/lib/recipes/bare/postcode.ts +346 -0
  134. package/lib/recipes/boundary-stress.ts +36 -19
  135. package/lib/recipes/country-balanced.ts +67 -87
  136. package/lib/recipes/house-venue.ts +31 -13
  137. package/lib/recipes/intersection.ts +83 -61
  138. package/lib/recipes/po/box/cedex/au-nz.ts +82 -0
  139. package/lib/recipes/po/box/cedex/ca.ts +59 -0
  140. package/lib/recipes/po/box/cedex/fr.ts +77 -0
  141. package/lib/recipes/po/box/cedex/phrases.ts +109 -0
  142. package/lib/recipes/po/box/cedex/recipe.ts +215 -0
  143. package/lib/recipes/po/box/cedex/sources.ts +189 -0
  144. package/lib/recipes/po/box/cedex/types.ts +35 -0
  145. package/lib/recipes/po/box/cedex/us.ts +74 -0
  146. package/lib/recipes/po/box/cedex/vocabulary.ts +106 -0
  147. package/lib/recipes/po/box/cedex.ts +9 -0
  148. package/lib/recipes/po/box.ts +149 -0
  149. package/lib/recipes/scaffold.ts +258 -182
  150. package/lib/recipes/sources.ts +399 -0
  151. package/lib/recipes/street/affix.ts +707 -0
  152. package/lib/recipes/street/bare.ts +115 -0
  153. package/lib/recipes/street.ts +32 -8
  154. package/lib/recipes/sub/venue/context.ts +156 -0
  155. package/lib/recipes/sub/venue/render.ts +170 -0
  156. package/lib/recipes/sub/venue/sources.ts +588 -0
  157. package/lib/recipes/sub/venue.ts +801 -0
  158. package/lib/recipes/trailing-region.ts +70 -81
  159. package/lib/recipes/unit/sources.ts +44 -0
  160. package/lib/recipes/unit.ts +102 -90
  161. package/lib/recipes.ts +106 -0
  162. package/lib/registers.ts +278 -0
  163. package/lib/ro/adapters/retea-scolara/adapter.ts +264 -0
  164. package/lib/ro/tools/fetch/retea-scolara.ts +187 -0
  165. package/lib/runner.ts +220 -84
  166. package/lib/sg/recipes/register.ts +264 -0
  167. package/lib/sg/tools/fetch/acra.ts +174 -0
  168. package/lib/si/recipes/bare-village.ts +116 -0
  169. package/lib/sk/adapters/inspire/adapter.ts +395 -0
  170. package/lib/sk/tools/fetch/inspire.ts +402 -0
  171. package/lib/source-register/effective-manifest.ts +659 -0
  172. package/lib/source-register/register.ts +539 -0
  173. package/lib/source-register/training-manifest.ts +218 -0
  174. package/lib/source-register/types.ts +590 -0
  175. package/lib/source-register.ts +71 -0
  176. package/lib/south-asia/recipes/register.ts +233 -0
  177. package/lib/subvenue/harvest.ts +251 -0
  178. package/lib/subvenue/promotions.ts +293 -0
  179. package/lib/subvenue/surfaces.ts +94 -0
  180. package/lib/subvenue/table.ts +264 -0
  181. package/lib/surfaces/locale.ts +246 -0
  182. package/lib/synthesizers/anchor-absorption.ts +55 -91
  183. package/lib/synthesizers/boundary-stress.ts +49 -131
  184. package/lib/synthesizers/house-venue.ts +44 -102
  185. package/lib/synthesizers/intersection.ts +37 -26
  186. package/lib/synthesizers/no-street.ts +70 -119
  187. package/lib/synthesizers/po-box.ts +90 -105
  188. package/lib/synthesizers/street.ts +47 -35
  189. package/lib/synthesizers/utils.ts +65 -219
  190. package/lib/test-kit/corpus-recipe.ts +45 -28
  191. package/lib/test-kit.ts +116 -0
  192. package/lib/tools/align-canonical.ts +64 -0
  193. package/lib/tools/audit.ts +114 -118
  194. package/lib/tools/corpus-stats.ts +46 -32
  195. package/lib/tools/fetch/atom.ts +164 -0
  196. package/lib/tools/fetch/cordis.ts +318 -0
  197. package/lib/tools/fetch/download/manifest.ts +114 -0
  198. package/lib/tools/fetch/download/network.ts +250 -0
  199. package/lib/tools/fetch/download/retry.ts +174 -0
  200. package/lib/tools/fetch/download.ts +4 -471
  201. package/lib/tools/fetch/geonames/dump.ts +275 -0
  202. package/lib/tools/fetch/geonames/postal.ts +145 -0
  203. package/lib/tools/fetch/gleif.ts +360 -0
  204. package/lib/tools/fetch/header.ts +69 -0
  205. package/lib/tools/fetch/inspire-addresses.ts +495 -0
  206. package/lib/tools/fetch/openaddresses.ts +20 -109
  207. package/lib/tools/fetch/ourairports.ts +16 -49
  208. package/lib/tools/fetch/ppd.ts +10 -10
  209. package/lib/tools/fetch/vlaanderen-ad.ts +435 -0
  210. package/lib/tools/fetch/wfs-harvest.ts +943 -0
  211. package/lib/tools/fetch/wikidata-subvenue.ts +43 -143
  212. package/lib/tools/fetch/zip-archive.ts +100 -0
  213. package/lib/tools/fetch.ts +143 -0
  214. package/lib/tools/golden/expand.ts +605 -0
  215. package/lib/tools/golden/promote.ts +349 -0
  216. package/lib/tools/golden/relabel-street/directory.ts +367 -0
  217. package/lib/tools/golden/relabel-street/row.ts +283 -0
  218. package/lib/tools/golden/relabel-street.ts +9 -0
  219. package/lib/tools/ingest-csv.ts +45 -50
  220. package/lib/tools/jsonl-to-parquet.ts +59 -98
  221. package/lib/tools/lint/recipe-output/vocab.ts +366 -0
  222. package/lib/tools/lint/recipe-output.ts +482 -0
  223. package/lib/tools/migrate/overlay-parquet.ts +173 -0
  224. package/lib/tools/migrate/recipe-output.ts +153 -0
  225. package/lib/tools/migrate/source-names.ts +161 -0
  226. package/lib/tools/overlay/kryptonite.ts +144 -0
  227. package/lib/tools/overlay/manifest.ts +407 -0
  228. package/lib/tools/overlay/merge-source.ts +138 -0
  229. package/lib/tools/overlay/split-slice.ts +144 -0
  230. package/lib/tools/overlay/translit.ts +234 -0
  231. package/lib/tools/overture-subvenue.ts +18 -91
  232. package/lib/tools/postcode-triples.ts +362 -167
  233. package/lib/tools/source-register/build.ts +819 -0
  234. package/lib/tools/sub/venue/head-nouns.ts +208 -0
  235. package/lib/tools/sub/venue/lexicon.ts +394 -0
  236. package/lib/tools/sub/venue/wikidata.ts +88 -0
  237. package/lib/tools.ts +31 -0
  238. package/lib/tw/tools/fetch/gcis.ts +181 -0
  239. package/lib/types.ts +304 -101
  240. package/lib/us/adapters/fcc-bdc/adapter.ts +158 -0
  241. package/lib/us/adapters/state/hi-schools/adapter.ts +171 -0
  242. package/lib/us/adapters/state/hi-schools/workbook.ts +40 -0
  243. package/lib/us/adapters/state/ia-contractors/adapter.ts +148 -0
  244. package/lib/us/adapters/state/ny-notaries/adapter.ts +132 -0
  245. package/lib/us/adapters/state/tx-notaries/adapter.ts +155 -0
  246. package/lib/us/adapters/tiger/adapter.ts +225 -0
  247. package/lib/us/adapters/tiger/street-decompose.ts +73 -0
  248. package/lib/us/adapters/usgov/hrsa-fqhc/adapter.ts +171 -0
  249. package/lib/us/adapters/usgov/imls-pls/adapter.ts +140 -0
  250. package/lib/us/adapters/usgov/irs-bmf/adapter.ts +154 -0
  251. package/lib/us/adapters/usgov/nad/adapter.ts +263 -0
  252. package/lib/us/adapters/usgov/nppes/adapter.ts +180 -0
  253. package/lib/us/adapters/usgov/samhsa-treatment-locator/adapter.ts +195 -0
  254. package/lib/us/fips-state.ts +122 -0
  255. package/lib/us/tools/fetch/hrsa.ts +58 -0
  256. package/lib/us/tools/fetch/imls-pls.ts +131 -0
  257. package/lib/us/tools/fetch/nad.ts +359 -0
  258. package/lib/us/tools/fetch/nppes.ts +153 -0
  259. package/lib/us/tools/fetch/state/hi-schools.ts +167 -0
  260. package/lib/us/tools/fetch/state/sources.ts +146 -0
  261. package/lib/us/tools/fetch/tiger-full.ts +256 -0
  262. package/lib/utils/align.ts +43 -53
  263. package/lib/utils/cooccurrence-stats.ts +101 -0
  264. package/lib/utils/golden.ts +39 -50
  265. package/lib/utils/license.ts +238 -26
  266. package/lib/utils/split.ts +205 -88
  267. package/lib/utils/tokenize.ts +22 -34
  268. package/lib/utils/wof-json.ts +134 -87
  269. package/lib/utils.ts +13 -0
  270. package/lib/ve/recipes/reviewed-postcode-tail.ts +217 -0
  271. package/out/adapters/cordis/adapter.d.ts +324 -0
  272. package/out/adapters/cordis/adapter.d.ts.map +1 -0
  273. package/out/adapters/cordis/adapter.js +616 -0
  274. package/out/adapters/cordis/adapter.js.map +1 -0
  275. package/out/adapters/dedup-key.d.ts +30 -0
  276. package/out/adapters/dedup-key.d.ts.map +1 -0
  277. package/out/adapters/dedup-key.js +35 -0
  278. package/out/adapters/dedup-key.js.map +1 -0
  279. package/out/adapters/errors.d.ts +17 -0
  280. package/out/adapters/errors.d.ts.map +1 -0
  281. package/out/adapters/errors.js +20 -0
  282. package/out/adapters/errors.js.map +1 -0
  283. package/out/adapters/geonames/adapter.d.ts +26 -28
  284. package/out/adapters/geonames/adapter.d.ts.map +1 -1
  285. package/out/adapters/geonames/adapter.js +40 -50
  286. package/out/adapters/geonames/adapter.js.map +1 -1
  287. package/out/adapters/geonames/postal/adapter.d.ts +41 -0
  288. package/out/adapters/geonames/postal/adapter.d.ts.map +1 -0
  289. package/out/adapters/geonames/postal/adapter.js +102 -0
  290. package/out/adapters/geonames/postal/adapter.js.map +1 -0
  291. package/out/adapters/gleif/adapter.d.ts +293 -0
  292. package/out/adapters/gleif/adapter.d.ts.map +1 -0
  293. package/out/adapters/gleif/adapter.js +684 -0
  294. package/out/adapters/gleif/adapter.js.map +1 -0
  295. package/out/adapters/libpostal-dictionary.d.ts +22 -0
  296. package/out/adapters/libpostal-dictionary.d.ts.map +1 -0
  297. package/out/adapters/libpostal-dictionary.js +36 -0
  298. package/out/adapters/libpostal-dictionary.js.map +1 -0
  299. package/out/adapters/openaddresses/adapter.d.ts +28 -43
  300. package/out/adapters/openaddresses/adapter.d.ts.map +1 -1
  301. package/out/adapters/openaddresses/adapter.js +37 -51
  302. package/out/adapters/openaddresses/adapter.js.map +1 -1
  303. package/out/adapters/osm/adapter.d.ts +101 -0
  304. package/out/adapters/osm/adapter.d.ts.map +1 -0
  305. package/out/adapters/osm/adapter.js +260 -0
  306. package/out/adapters/osm/adapter.js.map +1 -0
  307. package/out/adapters/overture/adapter.d.ts +14 -30
  308. package/out/adapters/overture/adapter.d.ts.map +1 -1
  309. package/out/adapters/overture/adapter.js +57 -41
  310. package/out/adapters/overture/adapter.js.map +1 -1
  311. package/out/adapters/po-box/adapter.d.ts +63 -0
  312. package/out/adapters/po-box/adapter.d.ts.map +1 -0
  313. package/out/adapters/po-box/adapter.js +139 -0
  314. package/out/adapters/po-box/adapter.js.map +1 -0
  315. package/out/adapters/registry.d.ts +55 -0
  316. package/out/adapters/registry.d.ts.map +1 -0
  317. package/out/adapters/registry.js +43 -0
  318. package/out/adapters/registry.js.map +1 -0
  319. package/out/adapters/sha256-stream.d.ts +26 -0
  320. package/out/adapters/sha256-stream.d.ts.map +1 -0
  321. package/out/adapters/sha256-stream.js +34 -0
  322. package/out/adapters/sha256-stream.js.map +1 -0
  323. package/out/adapters/source-id.d.ts +33 -0
  324. package/out/adapters/source-id.d.ts.map +1 -0
  325. package/out/adapters/source-id.js +42 -0
  326. package/out/adapters/source-id.js.map +1 -0
  327. package/out/adapters/street-line.d.ts +102 -0
  328. package/out/adapters/street-line.d.ts.map +1 -0
  329. package/out/adapters/street-line.js +117 -0
  330. package/out/adapters/street-line.js.map +1 -0
  331. package/out/adapters/wof/admin/json/adapter.d.ts +88 -0
  332. package/out/adapters/wof/admin/json/adapter.d.ts.map +1 -0
  333. package/out/adapters/wof/admin/json/adapter.js +220 -0
  334. package/out/adapters/wof/admin/json/adapter.js.map +1 -0
  335. package/out/adapters/wof/json-rows.d.ts +89 -0
  336. package/out/adapters/wof/json-rows.d.ts.map +1 -0
  337. package/out/adapters/wof/json-rows.js +135 -0
  338. package/out/adapters/wof/json-rows.js.map +1 -0
  339. package/out/adapters/wof/postalcode-json/adapter.d.ts +49 -0
  340. package/out/adapters/wof/postalcode-json/adapter.d.ts.map +1 -0
  341. package/out/adapters/wof/postalcode-json/adapter.js +165 -0
  342. package/out/adapters/wof/postalcode-json/adapter.js.map +1 -0
  343. package/out/adapters.d.ts +75 -0
  344. package/out/adapters.d.ts.map +1 -0
  345. package/out/adapters.js +167 -0
  346. package/out/adapters.js.map +1 -0
  347. package/out/au/adapters/gnaf/adapter.d.ts +37 -0
  348. package/out/au/adapters/gnaf/adapter.d.ts.map +1 -0
  349. package/out/au/adapters/gnaf/adapter.js +119 -0
  350. package/out/au/adapters/gnaf/adapter.js.map +1 -0
  351. package/out/au/adapters/gnaf/assemble.d.ts +54 -0
  352. package/out/au/adapters/gnaf/assemble.d.ts.map +1 -0
  353. package/out/au/adapters/gnaf/assemble.js +134 -0
  354. package/out/au/adapters/gnaf/assemble.js.map +1 -0
  355. package/out/be/adapters/brussels/adapter.d.ts +212 -0
  356. package/out/be/adapters/brussels/adapter.d.ts.map +1 -0
  357. package/out/be/adapters/brussels/adapter.js +435 -0
  358. package/out/be/adapters/brussels/adapter.js.map +1 -0
  359. package/out/be/adapters/vlaanderen/adapter.d.ts +233 -0
  360. package/out/be/adapters/vlaanderen/adapter.d.ts.map +1 -0
  361. package/out/be/adapters/vlaanderen/adapter.js +416 -0
  362. package/out/be/adapters/vlaanderen/adapter.js.map +1 -0
  363. package/out/be/adapters/wallonie/adapter.d.ts +196 -0
  364. package/out/be/adapters/wallonie/adapter.d.ts.map +1 -0
  365. package/out/be/adapters/wallonie/adapter.js +437 -0
  366. package/out/be/adapters/wallonie/adapter.js.map +1 -0
  367. package/out/be/tools/fetch/brussels.d.ts +119 -0
  368. package/out/be/tools/fetch/brussels.d.ts.map +1 -0
  369. package/out/be/tools/fetch/brussels.js +146 -0
  370. package/out/be/tools/fetch/brussels.js.map +1 -0
  371. package/out/be/tools/fetch/wallonie.d.ts +119 -0
  372. package/out/be/tools/fetch/wallonie.d.ts.map +1 -0
  373. package/out/be/tools/fetch/wallonie.js +167 -0
  374. package/out/be/tools/fetch/wallonie.js.map +1 -0
  375. package/out/build/adapters.d.ts +33 -0
  376. package/out/build/adapters.d.ts.map +1 -0
  377. package/out/build/adapters.js +68 -0
  378. package/out/build/adapters.js.map +1 -0
  379. package/out/build/align.d.ts +73 -0
  380. package/out/build/align.d.ts.map +1 -0
  381. package/out/build/align.js +226 -0
  382. package/out/build/align.js.map +1 -0
  383. package/out/build/checkpoint.d.ts +94 -0
  384. package/out/build/checkpoint.d.ts.map +1 -0
  385. package/out/build/checkpoint.js +59 -0
  386. package/out/build/checkpoint.js.map +1 -0
  387. package/out/build/eligibility.d.ts +47 -0
  388. package/out/build/eligibility.d.ts.map +1 -0
  389. package/out/build/eligibility.js +80 -0
  390. package/out/build/eligibility.js.map +1 -0
  391. package/out/build/heap.d.ts +28 -0
  392. package/out/build/heap.d.ts.map +1 -0
  393. package/out/build/heap.js +47 -0
  394. package/out/build/heap.js.map +1 -0
  395. package/out/build/inputs.d.ts +52 -0
  396. package/out/build/inputs.d.ts.map +1 -0
  397. package/out/build/inputs.js +49 -0
  398. package/out/build/inputs.js.map +1 -0
  399. package/out/build/rows.d.ts +16 -0
  400. package/out/build/rows.d.ts.map +1 -0
  401. package/out/build/rows.js +19 -0
  402. package/out/build/rows.js.map +1 -0
  403. package/out/build/types.d.ts +220 -0
  404. package/out/build/types.d.ts.map +1 -0
  405. package/out/build/types.js +34 -0
  406. package/out/build/types.js.map +1 -0
  407. package/out/build.d.ts +6 -121
  408. package/out/build.d.ts.map +1 -1
  409. package/out/build.js +112 -207
  410. package/out/build.js.map +1 -1
  411. package/out/cn/recipes/organizational-units.d.ts +19 -0
  412. package/out/cn/recipes/organizational-units.d.ts.map +1 -0
  413. package/out/cn/recipes/organizational-units.js +138 -0
  414. package/out/cn/recipes/organizational-units.js.map +1 -0
  415. package/out/cz/adapters/cuzk/adapter.d.ts +52 -0
  416. package/out/cz/adapters/cuzk/adapter.d.ts.map +1 -0
  417. package/out/cz/adapters/cuzk/adapter.js +266 -0
  418. package/out/cz/adapters/cuzk/adapter.js.map +1 -0
  419. package/out/cz/recipes/pcfirst-preposition.d.ts +18 -0
  420. package/out/cz/recipes/pcfirst-preposition.d.ts.map +1 -0
  421. package/out/cz/recipes/pcfirst-preposition.js +110 -0
  422. package/out/cz/recipes/pcfirst-preposition.js.map +1 -0
  423. package/out/cz/tools/fetch/cuzk.d.ts +272 -0
  424. package/out/cz/tools/fetch/cuzk.d.ts.map +1 -0
  425. package/out/cz/tools/fetch/cuzk.js +446 -0
  426. package/out/cz/tools/fetch/cuzk.js.map +1 -0
  427. package/out/de/recipes/locale.d.ts +42 -0
  428. package/out/de/recipes/locale.d.ts.map +1 -0
  429. package/out/de/recipes/locale.js +299 -0
  430. package/out/de/recipes/locale.js.map +1 -0
  431. package/out/directory.d.ts +20 -0
  432. package/out/directory.d.ts.map +1 -0
  433. package/out/directory.js +27 -0
  434. package/out/directory.js.map +1 -0
  435. package/out/dk/adapters/inspire/adapter.d.ts +154 -0
  436. package/out/dk/adapters/inspire/adapter.d.ts.map +1 -0
  437. package/out/dk/adapters/inspire/adapter.js +258 -0
  438. package/out/dk/adapters/inspire/adapter.js.map +1 -0
  439. package/out/dk/tools/fetch/inspire.d.ts +100 -0
  440. package/out/dk/tools/fetch/inspire.d.ts.map +1 -0
  441. package/out/dk/tools/fetch/inspire.js +230 -0
  442. package/out/dk/tools/fetch/inspire.js.map +1 -0
  443. package/out/ee/adapters/ads/adapter.d.ts +109 -0
  444. package/out/ee/adapters/ads/adapter.d.ts.map +1 -0
  445. package/out/ee/adapters/ads/adapter.js +191 -0
  446. package/out/ee/adapters/ads/adapter.js.map +1 -0
  447. package/out/ee/tools/fetch/ads.d.ts +123 -0
  448. package/out/ee/tools/fetch/ads.d.ts.map +1 -0
  449. package/out/ee/tools/fetch/ads.js +195 -0
  450. package/out/ee/tools/fetch/ads.js.map +1 -0
  451. package/out/env.d.ts +7 -3
  452. package/out/env.d.ts.map +1 -1
  453. package/out/env.js +6 -2
  454. package/out/env.js.map +1 -1
  455. package/out/es/adapters/bizkaia/adapter.d.ts +143 -0
  456. package/out/es/adapters/bizkaia/adapter.d.ts.map +1 -0
  457. package/out/es/adapters/bizkaia/adapter.js +332 -0
  458. package/out/es/adapters/bizkaia/adapter.js.map +1 -0
  459. package/out/es/adapters/catastro/adapter.d.ts +104 -0
  460. package/out/es/adapters/catastro/adapter.d.ts.map +1 -0
  461. package/out/es/adapters/catastro/adapter.js +288 -0
  462. package/out/es/adapters/catastro/adapter.js.map +1 -0
  463. package/out/es/adapters/gipuzkoa/adapter.d.ts +91 -0
  464. package/out/es/adapters/gipuzkoa/adapter.d.ts.map +1 -0
  465. package/out/es/adapters/gipuzkoa/adapter.js +225 -0
  466. package/out/es/adapters/gipuzkoa/adapter.js.map +1 -0
  467. package/out/es/adapters/navarra/adapter.d.ts +105 -0
  468. package/out/es/adapters/navarra/adapter.d.ts.map +1 -0
  469. package/out/es/adapters/navarra/adapter.js +241 -0
  470. package/out/es/adapters/navarra/adapter.js.map +1 -0
  471. package/out/es/cadastre.d.ts +109 -0
  472. package/out/es/cadastre.d.ts.map +1 -0
  473. package/out/es/cadastre.js +130 -0
  474. package/out/es/cadastre.js.map +1 -0
  475. package/out/es/tools/fetch/bizkaia.d.ts +278 -0
  476. package/out/es/tools/fetch/bizkaia.d.ts.map +1 -0
  477. package/out/es/tools/fetch/bizkaia.js +477 -0
  478. package/out/es/tools/fetch/bizkaia.js.map +1 -0
  479. package/out/es/tools/fetch/catastro.d.ts +272 -0
  480. package/out/es/tools/fetch/catastro.d.ts.map +1 -0
  481. package/out/es/tools/fetch/catastro.js +486 -0
  482. package/out/es/tools/fetch/catastro.js.map +1 -0
  483. package/out/es/tools/fetch/gipuzkoa.d.ts +162 -0
  484. package/out/es/tools/fetch/gipuzkoa.d.ts.map +1 -0
  485. package/out/es/tools/fetch/gipuzkoa.js +209 -0
  486. package/out/es/tools/fetch/gipuzkoa.js.map +1 -0
  487. package/out/es/tools/fetch/navarra.d.ts +189 -0
  488. package/out/es/tools/fetch/navarra.d.ts.map +1 -0
  489. package/out/es/tools/fetch/navarra.js +316 -0
  490. package/out/es/tools/fetch/navarra.js.map +1 -0
  491. package/out/fi/adapters/ryhti/adapter.d.ts +115 -0
  492. package/out/fi/adapters/ryhti/adapter.d.ts.map +1 -0
  493. package/out/fi/adapters/ryhti/adapter.js +244 -0
  494. package/out/fi/adapters/ryhti/adapter.js.map +1 -0
  495. package/out/fi/tools/fetch/ryhti.d.ts +206 -0
  496. package/out/fi/tools/fetch/ryhti.d.ts.map +1 -0
  497. package/out/fi/tools/fetch/ryhti.js +327 -0
  498. package/out/fi/tools/fetch/ryhti.js.map +1 -0
  499. package/out/fingerprints.d.ts +68 -0
  500. package/out/fingerprints.d.ts.map +1 -0
  501. package/out/fingerprints.js +130 -0
  502. package/out/fingerprints.js.map +1 -0
  503. package/out/fr/adapters/annuaire-education/adapter.d.ts +236 -0
  504. package/out/fr/adapters/annuaire-education/adapter.d.ts.map +1 -0
  505. package/out/fr/adapters/annuaire-education/adapter.js +475 -0
  506. package/out/fr/adapters/annuaire-education/adapter.js.map +1 -0
  507. package/out/fr/adapters/ban/adapter.d.ts +38 -0
  508. package/out/fr/adapters/ban/adapter.d.ts.map +1 -0
  509. package/out/fr/adapters/ban/adapter.js +134 -0
  510. package/out/fr/adapters/ban/adapter.js.map +1 -0
  511. package/out/fr/adapters/finess/adapter.d.ts +276 -0
  512. package/out/fr/adapters/finess/adapter.d.ts.map +1 -0
  513. package/out/fr/adapters/finess/adapter.js +519 -0
  514. package/out/fr/adapters/finess/adapter.js.map +1 -0
  515. package/out/fr/adapters/finess/postal-lines.d.ts +61 -0
  516. package/out/fr/adapters/finess/postal-lines.d.ts.map +1 -0
  517. package/out/fr/adapters/finess/postal-lines.js +114 -0
  518. package/out/fr/adapters/finess/postal-lines.js.map +1 -0
  519. package/out/fr/adapters/finess/voie-type.d.ts +77 -0
  520. package/out/fr/adapters/finess/voie-type.d.ts.map +1 -0
  521. package/out/fr/adapters/finess/voie-type.js +172 -0
  522. package/out/fr/adapters/finess/voie-type.js.map +1 -0
  523. package/out/fr/insee-country.d.ts +45 -0
  524. package/out/fr/insee-country.d.ts.map +1 -0
  525. package/out/fr/insee-country.js +60 -0
  526. package/out/fr/insee-country.js.map +1 -0
  527. package/out/fr/recipes/admin-split.d.ts +15 -0
  528. package/out/fr/recipes/admin-split.d.ts.map +1 -0
  529. package/out/fr/recipes/admin-split.js +170 -0
  530. package/out/fr/recipes/admin-split.js.map +1 -0
  531. package/out/fr/recipes/bare-street.d.ts +13 -0
  532. package/out/fr/recipes/bare-street.d.ts.map +1 -0
  533. package/out/fr/recipes/bare-street.js +129 -0
  534. package/out/fr/recipes/bare-street.js.map +1 -0
  535. package/out/fr/recipes/fragment.d.ts +18 -0
  536. package/out/fr/recipes/fragment.d.ts.map +1 -0
  537. package/out/fr/recipes/fragment.js +197 -0
  538. package/out/fr/recipes/fragment.js.map +1 -0
  539. package/out/fr/recipes/lieudit.d.ts +30 -0
  540. package/out/fr/recipes/lieudit.d.ts.map +1 -0
  541. package/out/fr/recipes/lieudit.js +231 -0
  542. package/out/fr/recipes/lieudit.js.map +1 -0
  543. package/out/fr/recipes/order.d.ts +15 -0
  544. package/out/fr/recipes/order.d.ts.map +1 -0
  545. package/out/fr/recipes/order.js +171 -0
  546. package/out/fr/recipes/order.js.map +1 -0
  547. package/out/fr/street-decompose.d.ts +29 -0
  548. package/out/fr/street-decompose.d.ts.map +1 -0
  549. package/out/fr/street-decompose.js +52 -0
  550. package/out/fr/street-decompose.js.map +1 -0
  551. package/out/fr/tools/fetch/annuaire-education.d.ts +130 -0
  552. package/out/fr/tools/fetch/annuaire-education.d.ts.map +1 -0
  553. package/out/fr/tools/fetch/annuaire-education.js +196 -0
  554. package/out/fr/tools/fetch/annuaire-education.js.map +1 -0
  555. package/out/fr/tools/fetch/ban.d.ts +33 -0
  556. package/out/fr/tools/fetch/ban.d.ts.map +1 -0
  557. package/out/fr/tools/fetch/ban.js +248 -0
  558. package/out/fr/tools/fetch/ban.js.map +1 -0
  559. package/out/fr/tools/fetch/finess.d.ts +145 -0
  560. package/out/fr/tools/fetch/finess.d.ts.map +1 -0
  561. package/out/fr/tools/fetch/finess.js +228 -0
  562. package/out/fr/tools/fetch/finess.js.map +1 -0
  563. package/out/gauntlet-inputs.d.ts +42 -0
  564. package/out/gauntlet-inputs.d.ts.map +1 -0
  565. package/out/gauntlet-inputs.js +78 -0
  566. package/out/gauntlet-inputs.js.map +1 -0
  567. package/out/index.d.ts +10 -4
  568. package/out/index.d.ts.map +1 -1
  569. package/out/index.js +10 -4
  570. package/out/index.js.map +1 -1
  571. package/out/inspire/address.d.ts +251 -0
  572. package/out/inspire/address.d.ts.map +1 -0
  573. package/out/inspire/address.js +384 -0
  574. package/out/inspire/address.js.map +1 -0
  575. package/out/inspire/archive.d.ts +36 -0
  576. package/out/inspire/archive.d.ts.map +1 -0
  577. package/out/inspire/archive.js +42 -0
  578. package/out/inspire/archive.js.map +1 -0
  579. package/out/inspire/errors.d.ts +55 -0
  580. package/out/inspire/errors.d.ts.map +1 -0
  581. package/out/inspire/errors.js +64 -0
  582. package/out/inspire/errors.js.map +1 -0
  583. package/out/inspire/stream.d.ts +137 -0
  584. package/out/inspire/stream.d.ts.map +1 -0
  585. package/out/inspire/stream.js +125 -0
  586. package/out/inspire/stream.js.map +1 -0
  587. package/out/international/recipes/locale.d.ts +90 -0
  588. package/out/international/recipes/locale.d.ts.map +1 -0
  589. package/out/international/recipes/locale.js +419 -0
  590. package/out/international/recipes/locale.js.map +1 -0
  591. package/out/it/adapters/anac/adapter.d.ts +267 -0
  592. package/out/it/adapters/anac/adapter.d.ts.map +1 -0
  593. package/out/it/adapters/anac/adapter.js +429 -0
  594. package/out/it/adapters/anac/adapter.js.map +1 -0
  595. package/out/it/tools/fetch/anac.d.ts +174 -0
  596. package/out/it/tools/fetch/anac.d.ts.map +1 -0
  597. package/out/it/tools/fetch/anac.js +272 -0
  598. package/out/it/tools/fetch/anac.js.map +1 -0
  599. package/out/jp/adapters/wof-admin/adapter.d.ts +68 -0
  600. package/out/jp/adapters/wof-admin/adapter.d.ts.map +1 -0
  601. package/out/jp/adapters/wof-admin/adapter.js +172 -0
  602. package/out/jp/adapters/wof-admin/adapter.js.map +1 -0
  603. package/out/jp/tools/fetch/houjin.d.ts +27 -0
  604. package/out/jp/tools/fetch/houjin.d.ts.map +1 -0
  605. package/out/jp/tools/fetch/houjin.js +106 -0
  606. package/out/jp/tools/fetch/houjin.js.map +1 -0
  607. package/out/kr/adapters/juso/label-rows.d.ts +62 -0
  608. package/out/kr/adapters/juso/label-rows.d.ts.map +1 -0
  609. package/out/kr/adapters/juso/label-rows.js +172 -0
  610. package/out/kr/adapters/juso/label-rows.js.map +1 -0
  611. package/out/kr/adapters/localdata/align.d.ts +31 -0
  612. package/out/kr/adapters/localdata/align.d.ts.map +1 -0
  613. package/out/kr/adapters/localdata/align.js +212 -0
  614. package/out/kr/adapters/localdata/align.js.map +1 -0
  615. package/out/kr/adapters/localdata/key-index.d.ts +62 -0
  616. package/out/kr/adapters/localdata/key-index.d.ts.map +1 -0
  617. package/out/kr/adapters/localdata/key-index.js +127 -0
  618. package/out/kr/adapters/localdata/key-index.js.map +1 -0
  619. package/out/kr/adapters/localdata/permit-rows.d.ts +73 -0
  620. package/out/kr/adapters/localdata/permit-rows.d.ts.map +1 -0
  621. package/out/kr/adapters/localdata/permit-rows.js +136 -0
  622. package/out/kr/adapters/localdata/permit-rows.js.map +1 -0
  623. package/out/kr/tools/fetch/juso.d.ts +33 -0
  624. package/out/kr/tools/fetch/juso.d.ts.map +1 -0
  625. package/out/kr/tools/fetch/juso.js +121 -0
  626. package/out/kr/tools/fetch/juso.js.map +1 -0
  627. package/out/kr/tools/fetch/localdata.d.ts +37 -0
  628. package/out/kr/tools/fetch/localdata.d.ts.map +1 -0
  629. package/out/kr/tools/fetch/localdata.js +147 -0
  630. package/out/kr/tools/fetch/localdata.js.map +1 -0
  631. package/out/lu/adapters/bd-adresses/adapter.d.ts +109 -0
  632. package/out/lu/adapters/bd-adresses/adapter.d.ts.map +1 -0
  633. package/out/lu/adapters/bd-adresses/adapter.js +196 -0
  634. package/out/lu/adapters/bd-adresses/adapter.js.map +1 -0
  635. package/out/lu/tools/fetch/bd-adresses.d.ts +163 -0
  636. package/out/lu/tools/fetch/bd-adresses.d.ts.map +1 -0
  637. package/out/lu/tools/fetch/bd-adresses.js +223 -0
  638. package/out/lu/tools/fetch/bd-adresses.js.map +1 -0
  639. package/out/lv/adapters/varis/adapter.d.ts +283 -0
  640. package/out/lv/adapters/varis/adapter.d.ts.map +1 -0
  641. package/out/lv/adapters/varis/adapter.js +404 -0
  642. package/out/lv/adapters/varis/adapter.js.map +1 -0
  643. package/out/lv/tools/fetch/varis.d.ts +80 -0
  644. package/out/lv/tools/fetch/varis.d.ts.map +1 -0
  645. package/out/lv/tools/fetch/varis.js +133 -0
  646. package/out/lv/tools/fetch/varis.js.map +1 -0
  647. package/out/nl/adapters/kadaster/adapter.d.ts +125 -0
  648. package/out/nl/adapters/kadaster/adapter.d.ts.map +1 -0
  649. package/out/nl/adapters/kadaster/adapter.js +310 -0
  650. package/out/nl/adapters/kadaster/adapter.js.map +1 -0
  651. package/out/nl/recipes/postcode.d.ts +24 -0
  652. package/out/nl/recipes/postcode.d.ts.map +1 -0
  653. package/out/nl/recipes/postcode.js +121 -0
  654. package/out/nl/recipes/postcode.js.map +1 -0
  655. package/out/nl/tools/fetch/kadaster.d.ts +155 -0
  656. package/out/nl/tools/fetch/kadaster.d.ts.map +1 -0
  657. package/out/nl/tools/fetch/kadaster.js +179 -0
  658. package/out/nl/tools/fetch/kadaster.js.map +1 -0
  659. package/out/no/adapters/matrikkelen/adapter.d.ts +44 -0
  660. package/out/no/adapters/matrikkelen/adapter.d.ts.map +1 -0
  661. package/out/no/adapters/matrikkelen/adapter.js +143 -0
  662. package/out/no/adapters/matrikkelen/adapter.js.map +1 -0
  663. package/out/no/recipes/fragment.d.ts +11 -0
  664. package/out/no/recipes/fragment.d.ts.map +1 -0
  665. package/out/no/recipes/fragment.js +149 -0
  666. package/out/no/recipes/fragment.js.map +1 -0
  667. package/out/no/recipes/street/led.d.ts +21 -0
  668. package/out/no/recipes/street/led.d.ts.map +1 -0
  669. package/out/no/recipes/street/led.js +124 -0
  670. package/out/no/recipes/street/led.js.map +1 -0
  671. package/out/no/recipes/street.d.ts +19 -0
  672. package/out/no/recipes/street.d.ts.map +1 -0
  673. package/out/no/recipes/street.js +88 -0
  674. package/out/no/recipes/street.js.map +1 -0
  675. package/out/no/tools/fetch/matrikkelen.d.ts +251 -0
  676. package/out/no/tools/fetch/matrikkelen.d.ts.map +1 -0
  677. package/out/no/tools/fetch/matrikkelen.js +345 -0
  678. package/out/no/tools/fetch/matrikkelen.js.map +1 -0
  679. package/out/parquet/duckdb.d.ts +100 -0
  680. package/out/parquet/duckdb.d.ts.map +1 -0
  681. package/out/parquet/duckdb.js +92 -0
  682. package/out/parquet/duckdb.js.map +1 -0
  683. package/out/parquet/readers.d.ts +44 -0
  684. package/out/parquet/readers.d.ts.map +1 -0
  685. package/out/parquet/readers.js +69 -0
  686. package/out/parquet/readers.js.map +1 -0
  687. package/out/parquet/schema.d.ts +95 -0
  688. package/out/parquet/schema.d.ts.map +1 -0
  689. package/out/parquet/schema.js +157 -0
  690. package/out/parquet/schema.js.map +1 -0
  691. package/out/parquet/shuffle.d.ts +25 -0
  692. package/out/parquet/shuffle.d.ts.map +1 -0
  693. package/out/parquet/shuffle.js +44 -0
  694. package/out/parquet/shuffle.js.map +1 -0
  695. package/out/parquet/span-sql.d.ts +49 -0
  696. package/out/parquet/span-sql.d.ts.map +1 -0
  697. package/out/parquet/span-sql.js +53 -0
  698. package/out/parquet/span-sql.js.map +1 -0
  699. package/out/parquet/streams.d.ts +47 -0
  700. package/out/parquet/streams.d.ts.map +1 -0
  701. package/out/parquet/streams.js +78 -0
  702. package/out/parquet/streams.js.map +1 -0
  703. package/out/parquet/writers.d.ts +124 -0
  704. package/out/parquet/writers.d.ts.map +1 -0
  705. package/out/parquet/writers.js +251 -0
  706. package/out/parquet/writers.js.map +1 -0
  707. package/out/pl/adapters/emuia/adapter.d.ts +81 -0
  708. package/out/pl/adapters/emuia/adapter.d.ts.map +1 -0
  709. package/out/pl/adapters/emuia/adapter.js +178 -0
  710. package/out/pl/adapters/emuia/adapter.js.map +1 -0
  711. package/out/pl/tools/fetch/emuia.d.ts +165 -0
  712. package/out/pl/tools/fetch/emuia.d.ts.map +1 -0
  713. package/out/pl/tools/fetch/emuia.js +260 -0
  714. package/out/pl/tools/fetch/emuia.js.map +1 -0
  715. package/out/recipes/anchor-absorption.d.ts +9 -9
  716. package/out/recipes/anchor-absorption.d.ts.map +1 -1
  717. package/out/recipes/anchor-absorption.js +29 -19
  718. package/out/recipes/anchor-absorption.js.map +1 -1
  719. package/out/recipes/bare/country.d.ts +7 -0
  720. package/out/recipes/bare/country.d.ts.map +1 -0
  721. package/out/recipes/bare/country.js +77 -0
  722. package/out/recipes/bare/country.js.map +1 -0
  723. package/out/recipes/bare/postcode/eval.d.ts +29 -0
  724. package/out/recipes/bare/postcode/eval.d.ts.map +1 -0
  725. package/out/recipes/bare/postcode/eval.js +85 -0
  726. package/out/recipes/bare/postcode/eval.js.map +1 -0
  727. package/out/recipes/bare/postcode.d.ts +41 -0
  728. package/out/recipes/bare/postcode.d.ts.map +1 -0
  729. package/out/recipes/bare/postcode.js +279 -0
  730. package/out/recipes/bare/postcode.js.map +1 -0
  731. package/out/recipes/boundary-stress.d.ts +8 -8
  732. package/out/recipes/boundary-stress.d.ts.map +1 -1
  733. package/out/recipes/boundary-stress.js +36 -19
  734. package/out/recipes/boundary-stress.js.map +1 -1
  735. package/out/recipes/country-balanced.d.ts +3 -21
  736. package/out/recipes/country-balanced.d.ts.map +1 -1
  737. package/out/recipes/country-balanced.js +58 -76
  738. package/out/recipes/country-balanced.js.map +1 -1
  739. package/out/recipes/house-venue.d.ts +8 -6
  740. package/out/recipes/house-venue.d.ts.map +1 -1
  741. package/out/recipes/house-venue.js +29 -13
  742. package/out/recipes/house-venue.js.map +1 -1
  743. package/out/recipes/intersection.d.ts +20 -20
  744. package/out/recipes/intersection.d.ts.map +1 -1
  745. package/out/recipes/intersection.js +65 -53
  746. package/out/recipes/intersection.js.map +1 -1
  747. package/out/recipes/po/box/cedex/au-nz.d.ts +7 -0
  748. package/out/recipes/po/box/cedex/au-nz.d.ts.map +1 -0
  749. package/out/recipes/po/box/cedex/au-nz.js +56 -0
  750. package/out/recipes/po/box/cedex/au-nz.js.map +1 -0
  751. package/out/recipes/po/box/cedex/ca.d.ts +7 -0
  752. package/out/recipes/po/box/cedex/ca.d.ts.map +1 -0
  753. package/out/recipes/po/box/cedex/ca.js +38 -0
  754. package/out/recipes/po/box/cedex/ca.js.map +1 -0
  755. package/out/recipes/po/box/cedex/fr.d.ts +7 -0
  756. package/out/recipes/po/box/cedex/fr.d.ts.map +1 -0
  757. package/out/recipes/po/box/cedex/fr.js +57 -0
  758. package/out/recipes/po/box/cedex/fr.js.map +1 -0
  759. package/out/recipes/po/box/cedex/phrases.d.ts +8 -0
  760. package/out/recipes/po/box/cedex/phrases.d.ts.map +1 -0
  761. package/out/recipes/po/box/cedex/phrases.js +77 -0
  762. package/out/recipes/po/box/cedex/phrases.js.map +1 -0
  763. package/out/recipes/po/box/cedex/recipe.d.ts +9 -0
  764. package/out/recipes/po/box/cedex/recipe.d.ts.map +1 -0
  765. package/out/recipes/po/box/cedex/recipe.js +163 -0
  766. package/out/recipes/po/box/cedex/recipe.js.map +1 -0
  767. package/out/recipes/po/box/cedex/sources.d.ts +86 -0
  768. package/out/recipes/po/box/cedex/sources.d.ts.map +1 -0
  769. package/out/recipes/po/box/cedex/sources.js +143 -0
  770. package/out/recipes/po/box/cedex/sources.js.map +1 -0
  771. package/out/recipes/po/box/cedex/types.d.ts +31 -0
  772. package/out/recipes/po/box/cedex/types.d.ts.map +1 -0
  773. package/out/recipes/po/box/cedex/types.js +5 -0
  774. package/out/recipes/po/box/cedex/types.js.map +1 -0
  775. package/out/recipes/po/box/cedex/us.d.ts +7 -0
  776. package/out/recipes/po/box/cedex/us.d.ts.map +1 -0
  777. package/out/recipes/po/box/cedex/us.js +54 -0
  778. package/out/recipes/po/box/cedex/us.js.map +1 -0
  779. package/out/recipes/po/box/cedex/vocabulary.d.ts +68 -0
  780. package/out/recipes/po/box/cedex/vocabulary.d.ts.map +1 -0
  781. package/out/recipes/po/box/cedex/vocabulary.js +90 -0
  782. package/out/recipes/po/box/cedex/vocabulary.js.map +1 -0
  783. package/out/recipes/po/box/cedex.d.ts +9 -0
  784. package/out/recipes/po/box/cedex.d.ts.map +1 -0
  785. package/out/recipes/po/box/cedex.js +9 -0
  786. package/out/recipes/po/box/cedex.js.map +1 -0
  787. package/out/recipes/po/box.d.ts +18 -0
  788. package/out/recipes/po/box.d.ts.map +1 -0
  789. package/out/recipes/po/box.js +123 -0
  790. package/out/recipes/po/box.js.map +1 -0
  791. package/out/recipes/scaffold.d.ts +214 -121
  792. package/out/recipes/scaffold.d.ts.map +1 -1
  793. package/out/recipes/scaffold.js +78 -88
  794. package/out/recipes/scaffold.js.map +1 -1
  795. package/out/recipes/sources.d.ts +178 -0
  796. package/out/recipes/sources.d.ts.map +1 -0
  797. package/out/recipes/sources.js +348 -0
  798. package/out/recipes/sources.js.map +1 -0
  799. package/out/recipes/street/affix.d.ts +59 -0
  800. package/out/recipes/street/affix.d.ts.map +1 -0
  801. package/out/recipes/street/affix.js +477 -0
  802. package/out/recipes/street/affix.js.map +1 -0
  803. package/out/recipes/street/bare.d.ts +27 -0
  804. package/out/recipes/street/bare.d.ts.map +1 -0
  805. package/out/recipes/street/bare.js +98 -0
  806. package/out/recipes/street/bare.js.map +1 -0
  807. package/out/recipes/street.d.ts +6 -4
  808. package/out/recipes/street.d.ts.map +1 -1
  809. package/out/recipes/street.js +29 -8
  810. package/out/recipes/street.js.map +1 -1
  811. package/out/recipes/sub/venue/context.d.ts +32 -0
  812. package/out/recipes/sub/venue/context.d.ts.map +1 -0
  813. package/out/recipes/sub/venue/context.js +110 -0
  814. package/out/recipes/sub/venue/context.js.map +1 -0
  815. package/out/recipes/sub/venue/render.d.ts +58 -0
  816. package/out/recipes/sub/venue/render.d.ts.map +1 -0
  817. package/out/recipes/sub/venue/render.js +118 -0
  818. package/out/recipes/sub/venue/render.js.map +1 -0
  819. package/out/recipes/sub/venue/sources.d.ts +166 -0
  820. package/out/recipes/sub/venue/sources.d.ts.map +1 -0
  821. package/out/recipes/sub/venue/sources.js +419 -0
  822. package/out/recipes/sub/venue/sources.js.map +1 -0
  823. package/out/recipes/sub/venue.d.ts +176 -0
  824. package/out/recipes/sub/venue.d.ts.map +1 -0
  825. package/out/recipes/sub/venue.js +562 -0
  826. package/out/recipes/sub/venue.js.map +1 -0
  827. package/out/recipes/trailing-region.d.ts +9 -61
  828. package/out/recipes/trailing-region.d.ts.map +1 -1
  829. package/out/recipes/trailing-region.js +56 -81
  830. package/out/recipes/trailing-region.js.map +1 -1
  831. package/out/recipes/unit/sources.d.ts +28 -0
  832. package/out/recipes/unit/sources.d.ts.map +1 -0
  833. package/out/recipes/unit/sources.js +30 -0
  834. package/out/recipes/unit/sources.js.map +1 -0
  835. package/out/recipes/unit.d.ts +30 -17
  836. package/out/recipes/unit.d.ts.map +1 -1
  837. package/out/recipes/unit.js +90 -79
  838. package/out/recipes/unit.js.map +1 -1
  839. package/out/recipes.d.ts +26 -0
  840. package/out/recipes.d.ts.map +1 -0
  841. package/out/recipes.js +100 -0
  842. package/out/recipes.js.map +1 -0
  843. package/out/registers.d.ts +277 -0
  844. package/out/registers.d.ts.map +1 -0
  845. package/out/registers.js +273 -0
  846. package/out/registers.js.map +1 -0
  847. package/out/ro/adapters/retea-scolara/adapter.d.ts +114 -0
  848. package/out/ro/adapters/retea-scolara/adapter.d.ts.map +1 -0
  849. package/out/ro/adapters/retea-scolara/adapter.js +209 -0
  850. package/out/ro/adapters/retea-scolara/adapter.js.map +1 -0
  851. package/out/ro/tools/fetch/retea-scolara.d.ts +69 -0
  852. package/out/ro/tools/fetch/retea-scolara.d.ts.map +1 -0
  853. package/out/ro/tools/fetch/retea-scolara.js +117 -0
  854. package/out/ro/tools/fetch/retea-scolara.js.map +1 -0
  855. package/out/runner.d.ts +120 -60
  856. package/out/runner.d.ts.map +1 -1
  857. package/out/runner.js +130 -56
  858. package/out/runner.js.map +1 -1
  859. package/out/sg/recipes/register.d.ts +55 -0
  860. package/out/sg/recipes/register.d.ts.map +1 -0
  861. package/out/sg/recipes/register.js +206 -0
  862. package/out/sg/recipes/register.js.map +1 -0
  863. package/out/sg/tools/fetch/acra.d.ts +20 -0
  864. package/out/sg/tools/fetch/acra.d.ts.map +1 -0
  865. package/out/sg/tools/fetch/acra.js +123 -0
  866. package/out/sg/tools/fetch/acra.js.map +1 -0
  867. package/out/si/recipes/bare-village.d.ts +31 -0
  868. package/out/si/recipes/bare-village.d.ts.map +1 -0
  869. package/out/si/recipes/bare-village.js +103 -0
  870. package/out/si/recipes/bare-village.js.map +1 -0
  871. package/out/sk/adapters/inspire/adapter.d.ts +119 -0
  872. package/out/sk/adapters/inspire/adapter.d.ts.map +1 -0
  873. package/out/sk/adapters/inspire/adapter.js +318 -0
  874. package/out/sk/adapters/inspire/adapter.js.map +1 -0
  875. package/out/sk/tools/fetch/inspire.d.ts +195 -0
  876. package/out/sk/tools/fetch/inspire.d.ts.map +1 -0
  877. package/out/sk/tools/fetch/inspire.js +280 -0
  878. package/out/sk/tools/fetch/inspire.js.map +1 -0
  879. package/out/source-register/effective-manifest.d.ts +355 -0
  880. package/out/source-register/effective-manifest.d.ts.map +1 -0
  881. package/out/source-register/effective-manifest.js +355 -0
  882. package/out/source-register/effective-manifest.js.map +1 -0
  883. package/out/source-register/register.d.ts +79 -0
  884. package/out/source-register/register.d.ts.map +1 -0
  885. package/out/source-register/register.js +400 -0
  886. package/out/source-register/register.js.map +1 -0
  887. package/out/source-register/training-manifest.d.ts +111 -0
  888. package/out/source-register/training-manifest.d.ts.map +1 -0
  889. package/out/source-register/training-manifest.js +120 -0
  890. package/out/source-register/training-manifest.js.map +1 -0
  891. package/out/source-register/types.d.ts +539 -0
  892. package/out/source-register/types.d.ts.map +1 -0
  893. package/out/source-register/types.js +263 -0
  894. package/out/source-register/types.js.map +1 -0
  895. package/out/source-register.d.ts +19 -0
  896. package/out/source-register.d.ts.map +1 -0
  897. package/out/source-register.js +16 -0
  898. package/out/source-register.js.map +1 -0
  899. package/out/south-asia/recipes/register.d.ts +54 -0
  900. package/out/south-asia/recipes/register.d.ts.map +1 -0
  901. package/out/south-asia/recipes/register.js +174 -0
  902. package/out/south-asia/recipes/register.js.map +1 -0
  903. package/out/subvenue/harvest.d.ts +117 -0
  904. package/out/subvenue/harvest.d.ts.map +1 -0
  905. package/out/subvenue/harvest.js +172 -0
  906. package/out/subvenue/harvest.js.map +1 -0
  907. package/out/subvenue/promotions.d.ts +65 -0
  908. package/out/subvenue/promotions.d.ts.map +1 -0
  909. package/out/subvenue/promotions.js +226 -0
  910. package/out/subvenue/promotions.js.map +1 -0
  911. package/out/subvenue/surfaces.d.ts +39 -0
  912. package/out/subvenue/surfaces.d.ts.map +1 -0
  913. package/out/subvenue/surfaces.js +75 -0
  914. package/out/subvenue/surfaces.js.map +1 -0
  915. package/out/subvenue/table.d.ts +212 -0
  916. package/out/subvenue/table.d.ts.map +1 -0
  917. package/out/subvenue/table.js +94 -0
  918. package/out/subvenue/table.js.map +1 -0
  919. package/out/surfaces/locale.d.ts +113 -0
  920. package/out/surfaces/locale.d.ts.map +1 -0
  921. package/out/surfaces/locale.js +136 -0
  922. package/out/surfaces/locale.js.map +1 -0
  923. package/out/synthesizers/anchor-absorption.d.ts +22 -31
  924. package/out/synthesizers/anchor-absorption.d.ts.map +1 -1
  925. package/out/synthesizers/anchor-absorption.js +30 -85
  926. package/out/synthesizers/anchor-absorption.js.map +1 -1
  927. package/out/synthesizers/boundary-stress.d.ts +17 -48
  928. package/out/synthesizers/boundary-stress.d.ts.map +1 -1
  929. package/out/synthesizers/boundary-stress.js +27 -121
  930. package/out/synthesizers/boundary-stress.js.map +1 -1
  931. package/out/synthesizers/house-venue.d.ts +22 -25
  932. package/out/synthesizers/house-venue.d.ts.map +1 -1
  933. package/out/synthesizers/house-venue.js +28 -97
  934. package/out/synthesizers/house-venue.js.map +1 -1
  935. package/out/synthesizers/intersection.d.ts +10 -8
  936. package/out/synthesizers/intersection.d.ts.map +1 -1
  937. package/out/synthesizers/intersection.js +33 -26
  938. package/out/synthesizers/intersection.js.map +1 -1
  939. package/out/synthesizers/no-street.d.ts +7 -37
  940. package/out/synthesizers/no-street.d.ts.map +1 -1
  941. package/out/synthesizers/no-street.js +55 -111
  942. package/out/synthesizers/no-street.js.map +1 -1
  943. package/out/synthesizers/po-box.d.ts +46 -45
  944. package/out/synthesizers/po-box.d.ts.map +1 -1
  945. package/out/synthesizers/po-box.js +57 -97
  946. package/out/synthesizers/po-box.js.map +1 -1
  947. package/out/synthesizers/street.d.ts +18 -12
  948. package/out/synthesizers/street.d.ts.map +1 -1
  949. package/out/synthesizers/street.js +37 -30
  950. package/out/synthesizers/street.js.map +1 -1
  951. package/out/synthesizers/utils.d.ts +32 -129
  952. package/out/synthesizers/utils.d.ts.map +1 -1
  953. package/out/synthesizers/utils.js +54 -166
  954. package/out/synthesizers/utils.js.map +1 -1
  955. package/out/test-kit/corpus-recipe.d.ts +29 -23
  956. package/out/test-kit/corpus-recipe.d.ts.map +1 -1
  957. package/out/test-kit/corpus-recipe.js +28 -13
  958. package/out/test-kit/corpus-recipe.js.map +1 -1
  959. package/out/test-kit.d.ts +63 -0
  960. package/out/test-kit.d.ts.map +1 -0
  961. package/out/test-kit.js +88 -0
  962. package/out/test-kit.js.map +1 -0
  963. package/out/tools/align-canonical.d.ts +7 -0
  964. package/out/tools/align-canonical.d.ts.map +1 -0
  965. package/out/tools/align-canonical.js +52 -0
  966. package/out/tools/align-canonical.js.map +1 -0
  967. package/out/tools/audit.d.ts +18 -11
  968. package/out/tools/audit.d.ts.map +1 -1
  969. package/out/tools/audit.js +87 -95
  970. package/out/tools/audit.js.map +1 -1
  971. package/out/tools/corpus-stats.d.ts +24 -15
  972. package/out/tools/corpus-stats.d.ts.map +1 -1
  973. package/out/tools/corpus-stats.js +35 -31
  974. package/out/tools/corpus-stats.js.map +1 -1
  975. package/out/tools/fetch/atom.d.ts +115 -0
  976. package/out/tools/fetch/atom.d.ts.map +1 -0
  977. package/out/tools/fetch/atom.js +84 -0
  978. package/out/tools/fetch/atom.js.map +1 -0
  979. package/out/tools/fetch/cordis.d.ts +123 -0
  980. package/out/tools/fetch/cordis.d.ts.map +1 -0
  981. package/out/tools/fetch/cordis.js +208 -0
  982. package/out/tools/fetch/cordis.js.map +1 -0
  983. package/out/tools/fetch/download/manifest.d.ts +56 -0
  984. package/out/tools/fetch/download/manifest.d.ts.map +1 -0
  985. package/out/tools/fetch/download/manifest.js +81 -0
  986. package/out/tools/fetch/download/manifest.js.map +1 -0
  987. package/out/tools/fetch/download/network.d.ts +126 -0
  988. package/out/tools/fetch/download/network.d.ts.map +1 -0
  989. package/out/tools/fetch/download/network.js +140 -0
  990. package/out/tools/fetch/download/network.js.map +1 -0
  991. package/out/tools/fetch/download/retry.d.ts +46 -0
  992. package/out/tools/fetch/download/retry.d.ts.map +1 -0
  993. package/out/tools/fetch/download/retry.js +136 -0
  994. package/out/tools/fetch/download/retry.js.map +1 -0
  995. package/out/tools/fetch/download.d.ts +4 -176
  996. package/out/tools/fetch/download.d.ts.map +1 -1
  997. package/out/tools/fetch/download.js +4 -312
  998. package/out/tools/fetch/download.js.map +1 -1
  999. package/out/tools/fetch/geonames/dump.d.ts +109 -0
  1000. package/out/tools/fetch/geonames/dump.d.ts.map +1 -0
  1001. package/out/tools/fetch/geonames/dump.js +181 -0
  1002. package/out/tools/fetch/geonames/dump.js.map +1 -0
  1003. package/out/tools/fetch/geonames/postal.d.ts +41 -0
  1004. package/out/tools/fetch/geonames/postal.d.ts.map +1 -0
  1005. package/out/tools/fetch/geonames/postal.js +87 -0
  1006. package/out/tools/fetch/geonames/postal.js.map +1 -0
  1007. package/out/tools/fetch/gleif.d.ts +137 -0
  1008. package/out/tools/fetch/gleif.d.ts.map +1 -0
  1009. package/out/tools/fetch/gleif.js +220 -0
  1010. package/out/tools/fetch/gleif.js.map +1 -0
  1011. package/out/tools/fetch/header.d.ts +41 -0
  1012. package/out/tools/fetch/header.d.ts.map +1 -0
  1013. package/out/tools/fetch/header.js +59 -0
  1014. package/out/tools/fetch/header.js.map +1 -0
  1015. package/out/tools/fetch/inspire-addresses.d.ts +249 -0
  1016. package/out/tools/fetch/inspire-addresses.d.ts.map +1 -0
  1017. package/out/tools/fetch/inspire-addresses.js +276 -0
  1018. package/out/tools/fetch/inspire-addresses.js.map +1 -0
  1019. package/out/tools/fetch/openaddresses.d.ts +0 -3
  1020. package/out/tools/fetch/openaddresses.d.ts.map +1 -1
  1021. package/out/tools/fetch/openaddresses.js +18 -97
  1022. package/out/tools/fetch/openaddresses.js.map +1 -1
  1023. package/out/tools/fetch/ourairports.d.ts +5 -32
  1024. package/out/tools/fetch/ourairports.d.ts.map +1 -1
  1025. package/out/tools/fetch/ourairports.js +13 -46
  1026. package/out/tools/fetch/ourairports.js.map +1 -1
  1027. package/out/tools/fetch/ppd.d.ts +4 -3
  1028. package/out/tools/fetch/ppd.d.ts.map +1 -1
  1029. package/out/tools/fetch/ppd.js +10 -9
  1030. package/out/tools/fetch/ppd.js.map +1 -1
  1031. package/out/tools/fetch/vlaanderen-ad.d.ts +131 -0
  1032. package/out/tools/fetch/vlaanderen-ad.d.ts.map +1 -0
  1033. package/out/tools/fetch/vlaanderen-ad.js +293 -0
  1034. package/out/tools/fetch/vlaanderen-ad.js.map +1 -0
  1035. package/out/tools/fetch/wfs-harvest.d.ts +410 -0
  1036. package/out/tools/fetch/wfs-harvest.d.ts.map +1 -0
  1037. package/out/tools/fetch/wfs-harvest.js +522 -0
  1038. package/out/tools/fetch/wfs-harvest.js.map +1 -0
  1039. package/out/tools/fetch/wikidata-subvenue.d.ts +31 -99
  1040. package/out/tools/fetch/wikidata-subvenue.d.ts.map +1 -1
  1041. package/out/tools/fetch/wikidata-subvenue.js +26 -121
  1042. package/out/tools/fetch/wikidata-subvenue.js.map +1 -1
  1043. package/out/tools/fetch/zip-archive.d.ts +54 -0
  1044. package/out/tools/fetch/zip-archive.d.ts.map +1 -0
  1045. package/out/tools/fetch/zip-archive.js +58 -0
  1046. package/out/tools/fetch/zip-archive.js.map +1 -0
  1047. package/out/tools/fetch.d.ts +140 -0
  1048. package/out/tools/fetch.d.ts.map +1 -0
  1049. package/out/tools/fetch.js +136 -0
  1050. package/out/tools/fetch.js.map +1 -0
  1051. package/out/tools/golden/expand.d.ts +105 -0
  1052. package/out/tools/golden/expand.d.ts.map +1 -0
  1053. package/out/tools/golden/expand.js +420 -0
  1054. package/out/tools/golden/expand.js.map +1 -0
  1055. package/out/tools/golden/promote.d.ts +77 -0
  1056. package/out/tools/golden/promote.d.ts.map +1 -0
  1057. package/out/tools/golden/promote.js +248 -0
  1058. package/out/tools/golden/promote.js.map +1 -0
  1059. package/out/tools/golden/relabel-street/directory.d.ts +98 -0
  1060. package/out/tools/golden/relabel-street/directory.d.ts.map +1 -0
  1061. package/out/tools/golden/relabel-street/directory.js +227 -0
  1062. package/out/tools/golden/relabel-street/directory.js.map +1 -0
  1063. package/out/tools/golden/relabel-street/row.d.ts +69 -0
  1064. package/out/tools/golden/relabel-street/row.d.ts.map +1 -0
  1065. package/out/tools/golden/relabel-street/row.js +174 -0
  1066. package/out/tools/golden/relabel-street/row.js.map +1 -0
  1067. package/out/tools/golden/relabel-street.d.ts +9 -0
  1068. package/out/tools/golden/relabel-street.d.ts.map +1 -0
  1069. package/out/tools/golden/relabel-street.js +9 -0
  1070. package/out/tools/golden/relabel-street.js.map +1 -0
  1071. package/out/tools/ingest-csv.d.ts +19 -15
  1072. package/out/tools/ingest-csv.d.ts.map +1 -1
  1073. package/out/tools/ingest-csv.js +39 -45
  1074. package/out/tools/ingest-csv.js.map +1 -1
  1075. package/out/tools/jsonl-to-parquet.d.ts +15 -28
  1076. package/out/tools/jsonl-to-parquet.d.ts.map +1 -1
  1077. package/out/tools/jsonl-to-parquet.js +49 -91
  1078. package/out/tools/jsonl-to-parquet.js.map +1 -1
  1079. package/out/tools/lint/recipe-output/vocab.d.ts +77 -0
  1080. package/out/tools/lint/recipe-output/vocab.d.ts.map +1 -0
  1081. package/out/tools/lint/recipe-output/vocab.js +239 -0
  1082. package/out/tools/lint/recipe-output/vocab.js.map +1 -0
  1083. package/out/tools/lint/recipe-output.d.ts +73 -0
  1084. package/out/tools/lint/recipe-output.d.ts.map +1 -0
  1085. package/out/tools/lint/recipe-output.js +302 -0
  1086. package/out/tools/lint/recipe-output.js.map +1 -0
  1087. package/out/tools/migrate/overlay-parquet.d.ts +30 -0
  1088. package/out/tools/migrate/overlay-parquet.d.ts.map +1 -0
  1089. package/out/tools/migrate/overlay-parquet.js +141 -0
  1090. package/out/tools/migrate/overlay-parquet.js.map +1 -0
  1091. package/out/tools/migrate/recipe-output.d.ts +35 -0
  1092. package/out/tools/migrate/recipe-output.d.ts.map +1 -0
  1093. package/out/tools/migrate/recipe-output.js +124 -0
  1094. package/out/tools/migrate/recipe-output.js.map +1 -0
  1095. package/out/tools/migrate/source-names.d.ts +52 -0
  1096. package/out/tools/migrate/source-names.d.ts.map +1 -0
  1097. package/out/tools/migrate/source-names.js +105 -0
  1098. package/out/tools/migrate/source-names.js.map +1 -0
  1099. package/out/tools/overlay/kryptonite.d.ts +33 -0
  1100. package/out/tools/overlay/kryptonite.d.ts.map +1 -0
  1101. package/out/tools/overlay/kryptonite.js +108 -0
  1102. package/out/tools/overlay/kryptonite.js.map +1 -0
  1103. package/out/tools/overlay/manifest.d.ts +142 -0
  1104. package/out/tools/overlay/manifest.d.ts.map +1 -0
  1105. package/out/tools/overlay/manifest.js +260 -0
  1106. package/out/tools/overlay/manifest.js.map +1 -0
  1107. package/out/tools/overlay/merge-source.d.ts +73 -0
  1108. package/out/tools/overlay/merge-source.d.ts.map +1 -0
  1109. package/out/tools/overlay/merge-source.js +63 -0
  1110. package/out/tools/overlay/merge-source.js.map +1 -0
  1111. package/out/tools/overlay/split-slice.d.ts +66 -0
  1112. package/out/tools/overlay/split-slice.d.ts.map +1 -0
  1113. package/out/tools/overlay/split-slice.js +78 -0
  1114. package/out/tools/overlay/split-slice.js.map +1 -0
  1115. package/out/tools/overlay/translit.d.ts +54 -0
  1116. package/out/tools/overlay/translit.d.ts.map +1 -0
  1117. package/out/tools/overlay/translit.js +177 -0
  1118. package/out/tools/overlay/translit.js.map +1 -0
  1119. package/out/tools/overture-subvenue.d.ts +17 -76
  1120. package/out/tools/overture-subvenue.d.ts.map +1 -1
  1121. package/out/tools/overture-subvenue.js +7 -74
  1122. package/out/tools/overture-subvenue.js.map +1 -1
  1123. package/out/tools/postcode-triples.d.ts +96 -109
  1124. package/out/tools/postcode-triples.d.ts.map +1 -1
  1125. package/out/tools/postcode-triples.js +237 -152
  1126. package/out/tools/postcode-triples.js.map +1 -1
  1127. package/out/tools/source-register/build.d.ts +145 -0
  1128. package/out/tools/source-register/build.d.ts.map +1 -0
  1129. package/out/tools/source-register/build.js +515 -0
  1130. package/out/tools/source-register/build.js.map +1 -0
  1131. package/out/tools/sub/venue/head-nouns.d.ts +21 -0
  1132. package/out/tools/sub/venue/head-nouns.d.ts.map +1 -0
  1133. package/out/tools/sub/venue/head-nouns.js +176 -0
  1134. package/out/tools/sub/venue/head-nouns.js.map +1 -0
  1135. package/out/tools/sub/venue/lexicon.d.ts +129 -0
  1136. package/out/tools/sub/venue/lexicon.d.ts.map +1 -0
  1137. package/out/tools/sub/venue/lexicon.js +239 -0
  1138. package/out/tools/sub/venue/lexicon.js.map +1 -0
  1139. package/out/tools/sub/venue/wikidata.d.ts +28 -0
  1140. package/out/tools/sub/venue/wikidata.d.ts.map +1 -0
  1141. package/out/tools/sub/venue/wikidata.js +65 -0
  1142. package/out/tools/sub/venue/wikidata.js.map +1 -0
  1143. package/out/tools.d.ts +31 -0
  1144. package/out/tools.d.ts.map +1 -0
  1145. package/out/tools.js +31 -0
  1146. package/out/tools.js.map +1 -0
  1147. package/out/tw/tools/fetch/gcis.d.ts +29 -0
  1148. package/out/tw/tools/fetch/gcis.d.ts.map +1 -0
  1149. package/out/tw/tools/fetch/gcis.js +141 -0
  1150. package/out/tw/tools/fetch/gcis.js.map +1 -0
  1151. package/out/types.d.ts +270 -101
  1152. package/out/types.d.ts.map +1 -1
  1153. package/out/types.js +133 -9
  1154. package/out/types.js.map +1 -1
  1155. package/out/us/adapters/fcc-bdc/adapter.d.ts +50 -0
  1156. package/out/us/adapters/fcc-bdc/adapter.d.ts.map +1 -0
  1157. package/out/us/adapters/fcc-bdc/adapter.js +129 -0
  1158. package/out/us/adapters/fcc-bdc/adapter.js.map +1 -0
  1159. package/out/us/adapters/state/hi-schools/adapter.d.ts +47 -0
  1160. package/out/us/adapters/state/hi-schools/adapter.d.ts.map +1 -0
  1161. package/out/us/adapters/state/hi-schools/adapter.js +146 -0
  1162. package/out/us/adapters/state/hi-schools/adapter.js.map +1 -0
  1163. package/out/us/adapters/state/hi-schools/workbook.d.ts +34 -0
  1164. package/out/us/adapters/state/hi-schools/workbook.d.ts.map +1 -0
  1165. package/out/us/adapters/state/hi-schools/workbook.js +22 -0
  1166. package/out/us/adapters/state/hi-schools/workbook.js.map +1 -0
  1167. package/out/us/adapters/state/ia-contractors/adapter.d.ts +41 -0
  1168. package/out/us/adapters/state/ia-contractors/adapter.d.ts.map +1 -0
  1169. package/out/us/adapters/state/ia-contractors/adapter.js +117 -0
  1170. package/out/us/adapters/state/ia-contractors/adapter.js.map +1 -0
  1171. package/out/us/adapters/state/ny-notaries/adapter.d.ts +33 -0
  1172. package/out/us/adapters/state/ny-notaries/adapter.d.ts.map +1 -0
  1173. package/out/us/adapters/state/ny-notaries/adapter.js +114 -0
  1174. package/out/us/adapters/state/ny-notaries/adapter.js.map +1 -0
  1175. package/out/us/adapters/state/tx-notaries/adapter.d.ts +34 -0
  1176. package/out/us/adapters/state/tx-notaries/adapter.d.ts.map +1 -0
  1177. package/out/us/adapters/state/tx-notaries/adapter.js +125 -0
  1178. package/out/us/adapters/state/tx-notaries/adapter.js.map +1 -0
  1179. package/out/us/adapters/tiger/adapter.d.ts +31 -0
  1180. package/out/us/adapters/tiger/adapter.d.ts.map +1 -0
  1181. package/out/us/adapters/tiger/adapter.js +173 -0
  1182. package/out/us/adapters/tiger/adapter.js.map +1 -0
  1183. package/out/us/adapters/tiger/street-decompose.d.ts +23 -0
  1184. package/out/us/adapters/tiger/street-decompose.d.ts.map +1 -0
  1185. package/out/us/adapters/tiger/street-decompose.js +58 -0
  1186. package/out/us/adapters/tiger/street-decompose.js.map +1 -0
  1187. package/out/us/adapters/usgov/hrsa-fqhc/adapter.d.ts +62 -0
  1188. package/out/us/adapters/usgov/hrsa-fqhc/adapter.d.ts.map +1 -0
  1189. package/out/us/adapters/usgov/hrsa-fqhc/adapter.js +133 -0
  1190. package/out/us/adapters/usgov/hrsa-fqhc/adapter.js.map +1 -0
  1191. package/out/us/adapters/usgov/imls-pls/adapter.d.ts +37 -0
  1192. package/out/us/adapters/usgov/imls-pls/adapter.d.ts.map +1 -0
  1193. package/out/us/adapters/usgov/imls-pls/adapter.js +113 -0
  1194. package/out/us/adapters/usgov/imls-pls/adapter.js.map +1 -0
  1195. package/out/us/adapters/usgov/irs-bmf/adapter.d.ts +38 -0
  1196. package/out/us/adapters/usgov/irs-bmf/adapter.d.ts.map +1 -0
  1197. package/out/us/adapters/usgov/irs-bmf/adapter.js +126 -0
  1198. package/out/us/adapters/usgov/irs-bmf/adapter.js.map +1 -0
  1199. package/out/us/adapters/usgov/nad/adapter.d.ts +28 -0
  1200. package/out/us/adapters/usgov/nad/adapter.d.ts.map +1 -0
  1201. package/out/us/adapters/usgov/nad/adapter.js +185 -0
  1202. package/out/us/adapters/usgov/nad/adapter.js.map +1 -0
  1203. package/out/us/adapters/usgov/nppes/adapter.d.ts +29 -0
  1204. package/out/us/adapters/usgov/nppes/adapter.d.ts.map +1 -0
  1205. package/out/us/adapters/usgov/nppes/adapter.js +140 -0
  1206. package/out/us/adapters/usgov/nppes/adapter.js.map +1 -0
  1207. package/out/us/adapters/usgov/samhsa-treatment-locator/adapter.d.ts +47 -0
  1208. package/out/us/adapters/usgov/samhsa-treatment-locator/adapter.d.ts.map +1 -0
  1209. package/out/us/adapters/usgov/samhsa-treatment-locator/adapter.js +153 -0
  1210. package/out/us/adapters/usgov/samhsa-treatment-locator/adapter.js.map +1 -0
  1211. package/out/us/fips-state.d.ts +50 -0
  1212. package/out/us/fips-state.d.ts.map +1 -0
  1213. package/out/us/fips-state.js +109 -0
  1214. package/out/us/fips-state.js.map +1 -0
  1215. package/out/us/tools/fetch/hrsa.d.ts +18 -0
  1216. package/out/us/tools/fetch/hrsa.d.ts.map +1 -0
  1217. package/out/us/tools/fetch/hrsa.js +45 -0
  1218. package/out/us/tools/fetch/hrsa.js.map +1 -0
  1219. package/out/us/tools/fetch/imls-pls.d.ts +14 -0
  1220. package/out/us/tools/fetch/imls-pls.d.ts.map +1 -0
  1221. package/out/us/tools/fetch/imls-pls.js +91 -0
  1222. package/out/us/tools/fetch/imls-pls.js.map +1 -0
  1223. package/out/us/tools/fetch/nad.d.ts +82 -0
  1224. package/out/us/tools/fetch/nad.d.ts.map +1 -0
  1225. package/out/us/tools/fetch/nad.js +239 -0
  1226. package/out/us/tools/fetch/nad.js.map +1 -0
  1227. package/out/us/tools/fetch/nppes.d.ts +16 -0
  1228. package/out/us/tools/fetch/nppes.d.ts.map +1 -0
  1229. package/out/us/tools/fetch/nppes.js +114 -0
  1230. package/out/us/tools/fetch/nppes.js.map +1 -0
  1231. package/out/us/tools/fetch/state/hi-schools.d.ts +29 -0
  1232. package/out/us/tools/fetch/state/hi-schools.d.ts.map +1 -0
  1233. package/out/us/tools/fetch/state/hi-schools.js +114 -0
  1234. package/out/us/tools/fetch/state/hi-schools.js.map +1 -0
  1235. package/out/us/tools/fetch/state/sources.d.ts +27 -0
  1236. package/out/us/tools/fetch/state/sources.d.ts.map +1 -0
  1237. package/out/us/tools/fetch/state/sources.js +110 -0
  1238. package/out/us/tools/fetch/state/sources.js.map +1 -0
  1239. package/out/us/tools/fetch/tiger-full.d.ts +9 -0
  1240. package/out/us/tools/fetch/tiger-full.d.ts.map +1 -0
  1241. package/out/us/tools/fetch/tiger-full.js +178 -0
  1242. package/out/us/tools/fetch/tiger-full.js.map +1 -0
  1243. package/out/utils/align.d.ts +25 -20
  1244. package/out/utils/align.d.ts.map +1 -1
  1245. package/out/utils/align.js +27 -42
  1246. package/out/utils/align.js.map +1 -1
  1247. package/out/utils/cooccurrence-stats.d.ts +58 -0
  1248. package/out/utils/cooccurrence-stats.d.ts.map +1 -0
  1249. package/out/utils/cooccurrence-stats.js +62 -0
  1250. package/out/utils/cooccurrence-stats.js.map +1 -0
  1251. package/out/utils/golden.d.ts +23 -29
  1252. package/out/utils/golden.d.ts.map +1 -1
  1253. package/out/utils/golden.js +33 -45
  1254. package/out/utils/golden.js.map +1 -1
  1255. package/out/utils/license.d.ts +158 -21
  1256. package/out/utils/license.d.ts.map +1 -1
  1257. package/out/utils/license.js +156 -26
  1258. package/out/utils/license.js.map +1 -1
  1259. package/out/utils/split.d.ts +66 -70
  1260. package/out/utils/split.d.ts.map +1 -1
  1261. package/out/utils/split.js +158 -69
  1262. package/out/utils/split.js.map +1 -1
  1263. package/out/utils/tokenize.d.ts +16 -28
  1264. package/out/utils/tokenize.d.ts.map +1 -1
  1265. package/out/utils/tokenize.js +18 -31
  1266. package/out/utils/tokenize.js.map +1 -1
  1267. package/out/utils/wof-json.d.ts +88 -62
  1268. package/out/utils/wof-json.d.ts.map +1 -1
  1269. package/out/utils/wof-json.js +81 -65
  1270. package/out/utils/wof-json.js.map +1 -1
  1271. package/out/utils.d.ts +13 -0
  1272. package/out/utils.d.ts.map +1 -0
  1273. package/out/utils.js +13 -0
  1274. package/out/utils.js.map +1 -0
  1275. package/out/ve/recipes/reviewed-postcode-tail.d.ts +65 -0
  1276. package/out/ve/recipes/reviewed-postcode-tail.d.ts.map +1 -0
  1277. package/out/ve/recipes/reviewed-postcode-tail.js +146 -0
  1278. package/out/ve/recipes/reviewed-postcode-tail.js.map +1 -0
  1279. package/package.json +46 -330
  1280. package/lib/adapters/ban/adapter.ts +0 -190
  1281. package/lib/adapters/ban/street-decompose.ts +0 -66
  1282. package/lib/adapters/fcc-bdc/adapter.ts +0 -174
  1283. package/lib/adapters/geonames-postal/adapter.ts +0 -122
  1284. package/lib/adapters/gnaf/adapter.ts +0 -149
  1285. package/lib/adapters/gnaf/assemble.ts +0 -225
  1286. package/lib/adapters/index.ts +0 -153
  1287. package/lib/adapters/state-hi-schools/adapter.ts +0 -170
  1288. package/lib/adapters/state-hi-schools/workbook.ts +0 -35
  1289. package/lib/adapters/state-ia-contractors/adapter.ts +0 -144
  1290. package/lib/adapters/state-ny-notaries/adapter.ts +0 -141
  1291. package/lib/adapters/state-tx-notaries/adapter.ts +0 -157
  1292. package/lib/adapters/synth-po-box/adapter.ts +0 -204
  1293. package/lib/adapters/tiger/adapter.ts +0 -252
  1294. package/lib/adapters/tiger/street-decompose.ts +0 -83
  1295. package/lib/adapters/usgov-hrsa-fqhc/adapter.ts +0 -167
  1296. package/lib/adapters/usgov-imls-pls/adapter.ts +0 -143
  1297. package/lib/adapters/usgov-irs-bmf/adapter.ts +0 -151
  1298. package/lib/adapters/usgov-nad/adapter.ts +0 -334
  1299. package/lib/adapters/usgov-nppes/adapter.ts +0 -151
  1300. package/lib/adapters/usgov-samhsa-treatment-locator/adapter.ts +0 -193
  1301. package/lib/adapters/utils/index.ts +0 -307
  1302. package/lib/adapters/wof-admin-jp/adapter.ts +0 -214
  1303. package/lib/adapters/wof-admin-json/adapter.ts +0 -231
  1304. package/lib/adapters/wof-json-rows.ts +0 -129
  1305. package/lib/adapters/wof-postalcode-json/adapter.ts +0 -176
  1306. package/lib/codex/us-fips-state.ts +0 -113
  1307. package/lib/recipes/bare-country.ts +0 -95
  1308. package/lib/recipes/cn-organizational-units.ts +0 -199
  1309. package/lib/recipes/cz-pcfirst-preposition.ts +0 -112
  1310. package/lib/recipes/fr-admin-split.ts +0 -243
  1311. package/lib/recipes/fr-bare-street.ts +0 -171
  1312. package/lib/recipes/fr-fragment.ts +0 -334
  1313. package/lib/recipes/fr-lieudit.ts +0 -301
  1314. package/lib/recipes/fr-order.ts +0 -246
  1315. package/lib/recipes/german.ts +0 -360
  1316. package/lib/recipes/index.ts +0 -97
  1317. package/lib/recipes/locale.ts +0 -600
  1318. package/lib/recipes/nl-postcode.ts +0 -117
  1319. package/lib/recipes/no-fragment.ts +0 -213
  1320. package/lib/recipes/no-street-led.ts +0 -135
  1321. package/lib/recipes/no-street.ts +0 -91
  1322. package/lib/recipes/po-box-cedex.ts +0 -976
  1323. package/lib/recipes/po-box.ts +0 -124
  1324. package/lib/recipes/reviewed-postcode-tail.ts +0 -190
  1325. package/lib/recipes/si-bare-village.ts +0 -99
  1326. package/lib/recipes/street-affix.ts +0 -805
  1327. package/lib/recipes/street-bare.ts +0 -102
  1328. package/lib/recipes/sub-venue-sources.ts +0 -878
  1329. package/lib/recipes/sub-venue.ts +0 -998
  1330. package/lib/synthesizers/german.ts +0 -260
  1331. package/lib/test-kit/index.ts +0 -100
  1332. package/lib/tools/align-slice.ts +0 -68
  1333. package/lib/tools/fetch/acra-sg.ts +0 -174
  1334. package/lib/tools/fetch/ban.ts +0 -289
  1335. package/lib/tools/fetch/gcis-tw.ts +0 -175
  1336. package/lib/tools/fetch/geonames-dump.ts +0 -257
  1337. package/lib/tools/fetch/geonames-postal.ts +0 -180
  1338. package/lib/tools/fetch/houjin-jp.ts +0 -135
  1339. package/lib/tools/fetch/hrsa.ts +0 -59
  1340. package/lib/tools/fetch/imls-pls.ts +0 -149
  1341. package/lib/tools/fetch/index.ts +0 -174
  1342. package/lib/tools/fetch/juso-kr.ts +0 -165
  1343. package/lib/tools/fetch/localdata-kr.ts +0 -194
  1344. package/lib/tools/fetch/nad.ts +0 -341
  1345. package/lib/tools/fetch/nppes.ts +0 -165
  1346. package/lib/tools/fetch/state-hi-schools.ts +0 -161
  1347. package/lib/tools/fetch/state-sources.ts +0 -146
  1348. package/lib/tools/fetch/tiger-full.ts +0 -308
  1349. package/lib/tools/gb-title-case.ts +0 -69
  1350. package/lib/tools/golden-expand.ts +0 -574
  1351. package/lib/tools/golden-promote.ts +0 -337
  1352. package/lib/tools/golden-relabel-street.ts +0 -686
  1353. package/lib/tools/index.ts +0 -28
  1354. package/lib/tools/lint-slice-vocab.ts +0 -388
  1355. package/lib/tools/lint-slice.ts +0 -496
  1356. package/lib/tools/overlay-manifest.ts +0 -148
  1357. package/lib/tools/slice-kryptonite.ts +0 -137
  1358. package/lib/tools/slice-translit.ts +0 -218
  1359. package/lib/tools/sub-venue/harvest.ts +0 -234
  1360. package/lib/tools/sub-venue/head-nouns.ts +0 -245
  1361. package/lib/tools/sub-venue/surfaces.ts +0 -95
  1362. package/lib/tools/sub-venue/table.ts +0 -281
  1363. package/lib/tools/sub-venue/wikidata.ts +0 -85
  1364. package/lib/tools/sub-venue-lexicon.ts +0 -429
  1365. package/lib/tools/sub-venue-promotions.ts +0 -330
  1366. package/lib/utils/index.ts +0 -14
  1367. package/lib/utils/parquet.ts +0 -582
  1368. package/lib/utils/slice-stats.ts +0 -95
  1369. package/out/adapters/ban/adapter.d.ts +0 -44
  1370. package/out/adapters/ban/adapter.d.ts.map +0 -1
  1371. package/out/adapters/ban/adapter.js +0 -149
  1372. package/out/adapters/ban/adapter.js.map +0 -1
  1373. package/out/adapters/ban/street-decompose.d.ts +0 -28
  1374. package/out/adapters/ban/street-decompose.d.ts.map +0 -1
  1375. package/out/adapters/ban/street-decompose.js +0 -51
  1376. package/out/adapters/ban/street-decompose.js.map +0 -1
  1377. package/out/adapters/fcc-bdc/adapter.d.ts +0 -68
  1378. package/out/adapters/fcc-bdc/adapter.d.ts.map +0 -1
  1379. package/out/adapters/fcc-bdc/adapter.js +0 -144
  1380. package/out/adapters/fcc-bdc/adapter.js.map +0 -1
  1381. package/out/adapters/geonames-postal/adapter.d.ts +0 -54
  1382. package/out/adapters/geonames-postal/adapter.d.ts.map +0 -1
  1383. package/out/adapters/geonames-postal/adapter.js +0 -107
  1384. package/out/adapters/geonames-postal/adapter.js.map +0 -1
  1385. package/out/adapters/gnaf/adapter.d.ts +0 -49
  1386. package/out/adapters/gnaf/adapter.d.ts.map +0 -1
  1387. package/out/adapters/gnaf/adapter.js +0 -124
  1388. package/out/adapters/gnaf/adapter.js.map +0 -1
  1389. package/out/adapters/gnaf/assemble.d.ts +0 -65
  1390. package/out/adapters/gnaf/assemble.d.ts.map +0 -1
  1391. package/out/adapters/gnaf/assemble.js +0 -154
  1392. package/out/adapters/gnaf/assemble.js.map +0 -1
  1393. package/out/adapters/index.d.ts +0 -51
  1394. package/out/adapters/index.d.ts.map +0 -1
  1395. package/out/adapters/index.js +0 -95
  1396. package/out/adapters/index.js.map +0 -1
  1397. package/out/adapters/state-hi-schools/adapter.d.ts +0 -46
  1398. package/out/adapters/state-hi-schools/adapter.d.ts.map +0 -1
  1399. package/out/adapters/state-hi-schools/adapter.js +0 -145
  1400. package/out/adapters/state-hi-schools/adapter.js.map +0 -1
  1401. package/out/adapters/state-hi-schools/workbook.d.ts +0 -29
  1402. package/out/adapters/state-hi-schools/workbook.d.ts.map +0 -1
  1403. package/out/adapters/state-hi-schools/workbook.js +0 -20
  1404. package/out/adapters/state-hi-schools/workbook.js.map +0 -1
  1405. package/out/adapters/state-ia-contractors/adapter.d.ts +0 -34
  1406. package/out/adapters/state-ia-contractors/adapter.d.ts.map +0 -1
  1407. package/out/adapters/state-ia-contractors/adapter.js +0 -111
  1408. package/out/adapters/state-ia-contractors/adapter.js.map +0 -1
  1409. package/out/adapters/state-ny-notaries/adapter.d.ts +0 -32
  1410. package/out/adapters/state-ny-notaries/adapter.d.ts.map +0 -1
  1411. package/out/adapters/state-ny-notaries/adapter.js +0 -119
  1412. package/out/adapters/state-ny-notaries/adapter.js.map +0 -1
  1413. package/out/adapters/state-tx-notaries/adapter.d.ts +0 -33
  1414. package/out/adapters/state-tx-notaries/adapter.d.ts.map +0 -1
  1415. package/out/adapters/state-tx-notaries/adapter.js +0 -125
  1416. package/out/adapters/state-tx-notaries/adapter.js.map +0 -1
  1417. package/out/adapters/synth-po-box/adapter.d.ts +0 -67
  1418. package/out/adapters/synth-po-box/adapter.d.ts.map +0 -1
  1419. package/out/adapters/synth-po-box/adapter.js +0 -140
  1420. package/out/adapters/synth-po-box/adapter.js.map +0 -1
  1421. package/out/adapters/tiger/adapter.d.ts +0 -55
  1422. package/out/adapters/tiger/adapter.d.ts.map +0 -1
  1423. package/out/adapters/tiger/adapter.js +0 -201
  1424. package/out/adapters/tiger/adapter.js.map +0 -1
  1425. package/out/adapters/tiger/street-decompose.d.ts +0 -30
  1426. package/out/adapters/tiger/street-decompose.d.ts.map +0 -1
  1427. package/out/adapters/tiger/street-decompose.js +0 -68
  1428. package/out/adapters/tiger/street-decompose.js.map +0 -1
  1429. package/out/adapters/usgov-hrsa-fqhc/adapter.d.ts +0 -56
  1430. package/out/adapters/usgov-hrsa-fqhc/adapter.d.ts.map +0 -1
  1431. package/out/adapters/usgov-hrsa-fqhc/adapter.js +0 -132
  1432. package/out/adapters/usgov-hrsa-fqhc/adapter.js.map +0 -1
  1433. package/out/adapters/usgov-imls-pls/adapter.d.ts +0 -36
  1434. package/out/adapters/usgov-imls-pls/adapter.d.ts.map +0 -1
  1435. package/out/adapters/usgov-imls-pls/adapter.js +0 -114
  1436. package/out/adapters/usgov-imls-pls/adapter.js.map +0 -1
  1437. package/out/adapters/usgov-irs-bmf/adapter.d.ts +0 -37
  1438. package/out/adapters/usgov-irs-bmf/adapter.d.ts.map +0 -1
  1439. package/out/adapters/usgov-irs-bmf/adapter.js +0 -120
  1440. package/out/adapters/usgov-irs-bmf/adapter.js.map +0 -1
  1441. package/out/adapters/usgov-nad/adapter.d.ts +0 -48
  1442. package/out/adapters/usgov-nad/adapter.d.ts.map +0 -1
  1443. package/out/adapters/usgov-nad/adapter.js +0 -249
  1444. package/out/adapters/usgov-nad/adapter.js.map +0 -1
  1445. package/out/adapters/usgov-nppes/adapter.d.ts +0 -39
  1446. package/out/adapters/usgov-nppes/adapter.d.ts.map +0 -1
  1447. package/out/adapters/usgov-nppes/adapter.js +0 -118
  1448. package/out/adapters/usgov-nppes/adapter.js.map +0 -1
  1449. package/out/adapters/usgov-samhsa-treatment-locator/adapter.d.ts +0 -46
  1450. package/out/adapters/usgov-samhsa-treatment-locator/adapter.d.ts.map +0 -1
  1451. package/out/adapters/usgov-samhsa-treatment-locator/adapter.js +0 -154
  1452. package/out/adapters/usgov-samhsa-treatment-locator/adapter.js.map +0 -1
  1453. package/out/adapters/utils/index.d.ts +0 -191
  1454. package/out/adapters/utils/index.d.ts.map +0 -1
  1455. package/out/adapters/utils/index.js +0 -206
  1456. package/out/adapters/utils/index.js.map +0 -1
  1457. package/out/adapters/wof-admin-jp/adapter.d.ts +0 -65
  1458. package/out/adapters/wof-admin-jp/adapter.d.ts.map +0 -1
  1459. package/out/adapters/wof-admin-jp/adapter.js +0 -161
  1460. package/out/adapters/wof-admin-jp/adapter.js.map +0 -1
  1461. package/out/adapters/wof-admin-json/adapter.d.ts +0 -79
  1462. package/out/adapters/wof-admin-json/adapter.d.ts.map +0 -1
  1463. package/out/adapters/wof-admin-json/adapter.js +0 -197
  1464. package/out/adapters/wof-admin-json/adapter.js.map +0 -1
  1465. package/out/adapters/wof-json-rows.d.ts +0 -62
  1466. package/out/adapters/wof-json-rows.d.ts.map +0 -1
  1467. package/out/adapters/wof-json-rows.js +0 -83
  1468. package/out/adapters/wof-json-rows.js.map +0 -1
  1469. package/out/adapters/wof-postalcode-json/adapter.d.ts +0 -65
  1470. package/out/adapters/wof-postalcode-json/adapter.d.ts.map +0 -1
  1471. package/out/adapters/wof-postalcode-json/adapter.js +0 -151
  1472. package/out/adapters/wof-postalcode-json/adapter.js.map +0 -1
  1473. package/out/codex/us-fips-state.d.ts +0 -41
  1474. package/out/codex/us-fips-state.d.ts.map +0 -1
  1475. package/out/codex/us-fips-state.js +0 -100
  1476. package/out/codex/us-fips-state.js.map +0 -1
  1477. package/out/recipes/bare-country.d.ts +0 -25
  1478. package/out/recipes/bare-country.d.ts.map +0 -1
  1479. package/out/recipes/bare-country.js +0 -88
  1480. package/out/recipes/bare-country.js.map +0 -1
  1481. package/out/recipes/cn-organizational-units.d.ts +0 -36
  1482. package/out/recipes/cn-organizational-units.d.ts.map +0 -1
  1483. package/out/recipes/cn-organizational-units.js +0 -159
  1484. package/out/recipes/cn-organizational-units.js.map +0 -1
  1485. package/out/recipes/cz-pcfirst-preposition.d.ts +0 -22
  1486. package/out/recipes/cz-pcfirst-preposition.d.ts.map +0 -1
  1487. package/out/recipes/cz-pcfirst-preposition.js +0 -101
  1488. package/out/recipes/cz-pcfirst-preposition.js.map +0 -1
  1489. package/out/recipes/fr-admin-split.d.ts +0 -38
  1490. package/out/recipes/fr-admin-split.d.ts.map +0 -1
  1491. package/out/recipes/fr-admin-split.js +0 -192
  1492. package/out/recipes/fr-admin-split.js.map +0 -1
  1493. package/out/recipes/fr-bare-street.d.ts +0 -28
  1494. package/out/recipes/fr-bare-street.d.ts.map +0 -1
  1495. package/out/recipes/fr-bare-street.js +0 -144
  1496. package/out/recipes/fr-bare-street.js.map +0 -1
  1497. package/out/recipes/fr-fragment.d.ts +0 -77
  1498. package/out/recipes/fr-fragment.d.ts.map +0 -1
  1499. package/out/recipes/fr-fragment.js +0 -277
  1500. package/out/recipes/fr-fragment.js.map +0 -1
  1501. package/out/recipes/fr-lieudit.d.ts +0 -32
  1502. package/out/recipes/fr-lieudit.d.ts.map +0 -1
  1503. package/out/recipes/fr-lieudit.js +0 -227
  1504. package/out/recipes/fr-lieudit.js.map +0 -1
  1505. package/out/recipes/fr-order.d.ts +0 -38
  1506. package/out/recipes/fr-order.d.ts.map +0 -1
  1507. package/out/recipes/fr-order.js +0 -198
  1508. package/out/recipes/fr-order.js.map +0 -1
  1509. package/out/recipes/german.d.ts +0 -44
  1510. package/out/recipes/german.d.ts.map +0 -1
  1511. package/out/recipes/german.js +0 -289
  1512. package/out/recipes/german.js.map +0 -1
  1513. package/out/recipes/index.d.ts +0 -24
  1514. package/out/recipes/index.d.ts.map +0 -1
  1515. package/out/recipes/index.js +0 -91
  1516. package/out/recipes/index.js.map +0 -1
  1517. package/out/recipes/locale.d.ts +0 -136
  1518. package/out/recipes/locale.d.ts.map +0 -1
  1519. package/out/recipes/locale.js +0 -460
  1520. package/out/recipes/locale.js.map +0 -1
  1521. package/out/recipes/nl-postcode.d.ts +0 -26
  1522. package/out/recipes/nl-postcode.d.ts.map +0 -1
  1523. package/out/recipes/nl-postcode.js +0 -103
  1524. package/out/recipes/nl-postcode.js.map +0 -1
  1525. package/out/recipes/no-fragment.d.ts +0 -43
  1526. package/out/recipes/no-fragment.d.ts.map +0 -1
  1527. package/out/recipes/no-fragment.js +0 -183
  1528. package/out/recipes/no-fragment.js.map +0 -1
  1529. package/out/recipes/no-street-led.d.ts +0 -24
  1530. package/out/recipes/no-street-led.d.ts.map +0 -1
  1531. package/out/recipes/no-street-led.js +0 -114
  1532. package/out/recipes/no-street-led.js.map +0 -1
  1533. package/out/recipes/no-street.d.ts +0 -18
  1534. package/out/recipes/no-street.d.ts.map +0 -1
  1535. package/out/recipes/no-street.js +0 -72
  1536. package/out/recipes/no-street.js.map +0 -1
  1537. package/out/recipes/po-box-cedex.d.ts +0 -38
  1538. package/out/recipes/po-box-cedex.d.ts.map +0 -1
  1539. package/out/recipes/po-box-cedex.js +0 -768
  1540. package/out/recipes/po-box-cedex.js.map +0 -1
  1541. package/out/recipes/po-box.d.ts +0 -17
  1542. package/out/recipes/po-box.d.ts.map +0 -1
  1543. package/out/recipes/po-box.js +0 -101
  1544. package/out/recipes/po-box.js.map +0 -1
  1545. package/out/recipes/reviewed-postcode-tail.d.ts +0 -47
  1546. package/out/recipes/reviewed-postcode-tail.d.ts.map +0 -1
  1547. package/out/recipes/reviewed-postcode-tail.js +0 -125
  1548. package/out/recipes/reviewed-postcode-tail.js.map +0 -1
  1549. package/out/recipes/si-bare-village.d.ts +0 -32
  1550. package/out/recipes/si-bare-village.d.ts.map +0 -1
  1551. package/out/recipes/si-bare-village.js +0 -89
  1552. package/out/recipes/si-bare-village.js.map +0 -1
  1553. package/out/recipes/street-affix.d.ts +0 -89
  1554. package/out/recipes/street-affix.d.ts.map +0 -1
  1555. package/out/recipes/street-affix.js +0 -563
  1556. package/out/recipes/street-affix.js.map +0 -1
  1557. package/out/recipes/street-bare.d.ts +0 -25
  1558. package/out/recipes/street-bare.d.ts.map +0 -1
  1559. package/out/recipes/street-bare.js +0 -87
  1560. package/out/recipes/street-bare.js.map +0 -1
  1561. package/out/recipes/sub-venue-sources.d.ts +0 -229
  1562. package/out/recipes/sub-venue-sources.d.ts.map +0 -1
  1563. package/out/recipes/sub-venue-sources.js +0 -654
  1564. package/out/recipes/sub-venue-sources.js.map +0 -1
  1565. package/out/recipes/sub-venue.d.ts +0 -269
  1566. package/out/recipes/sub-venue.d.ts.map +0 -1
  1567. package/out/recipes/sub-venue.js +0 -726
  1568. package/out/recipes/sub-venue.js.map +0 -1
  1569. package/out/synthesizers/german.d.ts +0 -115
  1570. package/out/synthesizers/german.d.ts.map +0 -1
  1571. package/out/synthesizers/german.js +0 -149
  1572. package/out/synthesizers/german.js.map +0 -1
  1573. package/out/test-kit/index.d.ts +0 -48
  1574. package/out/test-kit/index.d.ts.map +0 -1
  1575. package/out/test-kit/index.js +0 -78
  1576. package/out/test-kit/index.js.map +0 -1
  1577. package/out/tools/align-slice.d.ts +0 -7
  1578. package/out/tools/align-slice.d.ts.map +0 -1
  1579. package/out/tools/align-slice.js +0 -55
  1580. package/out/tools/align-slice.js.map +0 -1
  1581. package/out/tools/fetch/acra-sg.d.ts +0 -23
  1582. package/out/tools/fetch/acra-sg.d.ts.map +0 -1
  1583. package/out/tools/fetch/acra-sg.js +0 -126
  1584. package/out/tools/fetch/acra-sg.js.map +0 -1
  1585. package/out/tools/fetch/ban.d.ts +0 -31
  1586. package/out/tools/fetch/ban.d.ts.map +0 -1
  1587. package/out/tools/fetch/ban.js +0 -239
  1588. package/out/tools/fetch/ban.js.map +0 -1
  1589. package/out/tools/fetch/gcis-tw.d.ts +0 -23
  1590. package/out/tools/fetch/gcis-tw.d.ts.map +0 -1
  1591. package/out/tools/fetch/gcis-tw.js +0 -135
  1592. package/out/tools/fetch/gcis-tw.js.map +0 -1
  1593. package/out/tools/fetch/geonames-dump.d.ts +0 -91
  1594. package/out/tools/fetch/geonames-dump.d.ts.map +0 -1
  1595. package/out/tools/fetch/geonames-dump.js +0 -171
  1596. package/out/tools/fetch/geonames-dump.js.map +0 -1
  1597. package/out/tools/fetch/geonames-postal.d.ts +0 -76
  1598. package/out/tools/fetch/geonames-postal.d.ts.map +0 -1
  1599. package/out/tools/fetch/geonames-postal.js +0 -126
  1600. package/out/tools/fetch/geonames-postal.js.map +0 -1
  1601. package/out/tools/fetch/houjin-jp.d.ts +0 -24
  1602. package/out/tools/fetch/houjin-jp.d.ts.map +0 -1
  1603. package/out/tools/fetch/houjin-jp.js +0 -102
  1604. package/out/tools/fetch/houjin-jp.js.map +0 -1
  1605. package/out/tools/fetch/hrsa.d.ts +0 -18
  1606. package/out/tools/fetch/hrsa.d.ts.map +0 -1
  1607. package/out/tools/fetch/hrsa.js +0 -46
  1608. package/out/tools/fetch/hrsa.js.map +0 -1
  1609. package/out/tools/fetch/imls-pls.d.ts +0 -25
  1610. package/out/tools/fetch/imls-pls.d.ts.map +0 -1
  1611. package/out/tools/fetch/imls-pls.js +0 -108
  1612. package/out/tools/fetch/imls-pls.js.map +0 -1
  1613. package/out/tools/fetch/index.d.ts +0 -171
  1614. package/out/tools/fetch/index.d.ts.map +0 -1
  1615. package/out/tools/fetch/index.js +0 -170
  1616. package/out/tools/fetch/index.js.map +0 -1
  1617. package/out/tools/fetch/juso-kr.d.ts +0 -30
  1618. package/out/tools/fetch/juso-kr.d.ts.map +0 -1
  1619. package/out/tools/fetch/juso-kr.js +0 -120
  1620. package/out/tools/fetch/juso-kr.js.map +0 -1
  1621. package/out/tools/fetch/localdata-kr.d.ts +0 -30
  1622. package/out/tools/fetch/localdata-kr.d.ts.map +0 -1
  1623. package/out/tools/fetch/localdata-kr.js +0 -139
  1624. package/out/tools/fetch/localdata-kr.js.map +0 -1
  1625. package/out/tools/fetch/nad.d.ts +0 -70
  1626. package/out/tools/fetch/nad.d.ts.map +0 -1
  1627. package/out/tools/fetch/nad.js +0 -234
  1628. package/out/tools/fetch/nad.js.map +0 -1
  1629. package/out/tools/fetch/nppes.d.ts +0 -26
  1630. package/out/tools/fetch/nppes.d.ts.map +0 -1
  1631. package/out/tools/fetch/nppes.js +0 -126
  1632. package/out/tools/fetch/nppes.js.map +0 -1
  1633. package/out/tools/fetch/state-hi-schools.d.ts +0 -26
  1634. package/out/tools/fetch/state-hi-schools.d.ts.map +0 -1
  1635. package/out/tools/fetch/state-hi-schools.js +0 -112
  1636. package/out/tools/fetch/state-hi-schools.js.map +0 -1
  1637. package/out/tools/fetch/state-sources.d.ts +0 -26
  1638. package/out/tools/fetch/state-sources.d.ts.map +0 -1
  1639. package/out/tools/fetch/state-sources.js +0 -111
  1640. package/out/tools/fetch/state-sources.js.map +0 -1
  1641. package/out/tools/fetch/tiger-full.d.ts +0 -22
  1642. package/out/tools/fetch/tiger-full.d.ts.map +0 -1
  1643. package/out/tools/fetch/tiger-full.js +0 -217
  1644. package/out/tools/fetch/tiger-full.js.map +0 -1
  1645. package/out/tools/gb-title-case.d.ts +0 -2
  1646. package/out/tools/gb-title-case.d.ts.map +0 -1
  1647. package/out/tools/gb-title-case.js +0 -65
  1648. package/out/tools/gb-title-case.js.map +0 -1
  1649. package/out/tools/golden-expand.d.ts +0 -90
  1650. package/out/tools/golden-expand.d.ts.map +0 -1
  1651. package/out/tools/golden-expand.js +0 -406
  1652. package/out/tools/golden-expand.js.map +0 -1
  1653. package/out/tools/golden-promote.d.ts +0 -72
  1654. package/out/tools/golden-promote.d.ts.map +0 -1
  1655. package/out/tools/golden-promote.js +0 -240
  1656. package/out/tools/golden-promote.js.map +0 -1
  1657. package/out/tools/golden-relabel-street.d.ts +0 -196
  1658. package/out/tools/golden-relabel-street.d.ts.map +0 -1
  1659. package/out/tools/golden-relabel-street.js +0 -439
  1660. package/out/tools/golden-relabel-street.js.map +0 -1
  1661. package/out/tools/index.d.ts +0 -28
  1662. package/out/tools/index.d.ts.map +0 -1
  1663. package/out/tools/index.js +0 -28
  1664. package/out/tools/index.js.map +0 -1
  1665. package/out/tools/lint-slice-vocab.d.ts +0 -90
  1666. package/out/tools/lint-slice-vocab.d.ts.map +0 -1
  1667. package/out/tools/lint-slice-vocab.js +0 -267
  1668. package/out/tools/lint-slice-vocab.js.map +0 -1
  1669. package/out/tools/lint-slice.d.ts +0 -93
  1670. package/out/tools/lint-slice.d.ts.map +0 -1
  1671. package/out/tools/lint-slice.js +0 -322
  1672. package/out/tools/lint-slice.js.map +0 -1
  1673. package/out/tools/overlay-manifest.d.ts +0 -39
  1674. package/out/tools/overlay-manifest.d.ts.map +0 -1
  1675. package/out/tools/overlay-manifest.js +0 -90
  1676. package/out/tools/overlay-manifest.js.map +0 -1
  1677. package/out/tools/slice-kryptonite.d.ts +0 -32
  1678. package/out/tools/slice-kryptonite.d.ts.map +0 -1
  1679. package/out/tools/slice-kryptonite.js +0 -99
  1680. package/out/tools/slice-kryptonite.js.map +0 -1
  1681. package/out/tools/slice-translit.d.ts +0 -51
  1682. package/out/tools/slice-translit.d.ts.map +0 -1
  1683. package/out/tools/slice-translit.js +0 -166
  1684. package/out/tools/slice-translit.js.map +0 -1
  1685. package/out/tools/sub-venue/harvest.d.ts +0 -100
  1686. package/out/tools/sub-venue/harvest.d.ts.map +0 -1
  1687. package/out/tools/sub-venue/harvest.js +0 -168
  1688. package/out/tools/sub-venue/harvest.js.map +0 -1
  1689. package/out/tools/sub-venue/head-nouns.d.ts +0 -50
  1690. package/out/tools/sub-venue/head-nouns.d.ts.map +0 -1
  1691. package/out/tools/sub-venue/head-nouns.js +0 -213
  1692. package/out/tools/sub-venue/head-nouns.js.map +0 -1
  1693. package/out/tools/sub-venue/surfaces.d.ts +0 -45
  1694. package/out/tools/sub-venue/surfaces.d.ts.map +0 -1
  1695. package/out/tools/sub-venue/surfaces.js +0 -77
  1696. package/out/tools/sub-venue/surfaces.js.map +0 -1
  1697. package/out/tools/sub-venue/table.d.ts +0 -229
  1698. package/out/tools/sub-venue/table.d.ts.map +0 -1
  1699. package/out/tools/sub-venue/table.js +0 -108
  1700. package/out/tools/sub-venue/table.js.map +0 -1
  1701. package/out/tools/sub-venue/wikidata.d.ts +0 -26
  1702. package/out/tools/sub-venue/wikidata.d.ts.map +0 -1
  1703. package/out/tools/sub-venue/wikidata.js +0 -62
  1704. package/out/tools/sub-venue/wikidata.js.map +0 -1
  1705. package/out/tools/sub-venue-lexicon.d.ts +0 -156
  1706. package/out/tools/sub-venue-lexicon.d.ts.map +0 -1
  1707. package/out/tools/sub-venue-lexicon.js +0 -283
  1708. package/out/tools/sub-venue-lexicon.js.map +0 -1
  1709. package/out/tools/sub-venue-promotions.d.ts +0 -94
  1710. package/out/tools/sub-venue-promotions.d.ts.map +0 -1
  1711. package/out/tools/sub-venue-promotions.js +0 -266
  1712. package/out/tools/sub-venue-promotions.js.map +0 -1
  1713. package/out/utils/index.d.ts +0 -14
  1714. package/out/utils/index.d.ts.map +0 -1
  1715. package/out/utils/index.js +0 -14
  1716. package/out/utils/index.js.map +0 -1
  1717. package/out/utils/parquet.d.ts +0 -178
  1718. package/out/utils/parquet.d.ts.map +0 -1
  1719. package/out/utils/parquet.js +0 -371
  1720. package/out/utils/parquet.js.map +0 -1
  1721. package/out/utils/slice-stats.d.ts +0 -52
  1722. package/out/utils/slice-stats.d.ts.map +0 -1
  1723. package/out/utils/slice-stats.js +0 -58
  1724. package/out/utils/slice-stats.js.map +0 -1
@@ -3,54 +3,24 @@
3
3
  * @license AGPL-3.0
4
4
  * @author Teffen Ellis, et al.
5
5
  *
6
- * Extract `(postcode, locality, region, country)` tuples for the `trailing-region` slice.
6
+ * Extract `(postcode, locality, region, country)` tuples for the `trailing-region` recipe.
7
7
  *
8
- * This step used to be a one-off. Its output survived — 17,908 rows at
9
- * `$MAILWOMAN_DATA_ROOT/corpus/tuples/trailing-region-structured-tuples.jsonl` — but the code that produced it did
10
- * not, so a note describing the join was the only record and it did not match what the databases contain. That is the
11
- * reason this file exists: the slice is unbuildable for a new country without it.
12
- *
13
- * ## Two sources, because one route does not reach every country
14
- *
15
- * - **`postalcode-intl.db`** carries a real `parent_id` that resolves in the admin gazetteer. Measured share of rows
16
- * with a parent: NL 97.5%, FR 90.7%, DE 66.1%, ES 34.9%, IT 27.4%; of those, 93.8–100% land on a `locality` or
17
- * `localadmin`, and the region comes from that place's own ancestry. It is the ONLY slice with this — every
18
- * `postalcode-geonames-*` and `postalcode-<cc>-overture.db` row reads `parent_id = 0`.
19
- * - **GeoNames postal exports** carry the place and admin1 NAMES in columns 3 and 4, so there is nothing to join.
20
- * `mailwoman corpus fetch geonames-postal` puts them on disk.
21
- *
22
- * A nearest-locality-centroid join was measured as the general fallback and REJECTED: scored against the `parent_id`
23
- * truth, it agreed NL 81.1% / DE 44.7% / ES 35.1% / FR 29.0% / IT 13.5%. A locality's centroid sits at its middle, so
24
- * an edge postcode is routinely nearer a neighbouring town's centroid. Do not reach for it again.
25
- *
26
- * ## The hub cap is PER COUNTRY, because a pooled one is a mixture
27
- *
28
- * A few localities act as catch-all parents — `Schwedt/Oder` claims 9,222 DE postcodes against a DE median of 1. Left
29
- * in, a handful of places dominate the slice. But the distribution differs so much by country that one threshold is
30
- * not one rule: a p99 pooled across the five countries lands at 522, which keeps 100% of ES and IT, 83% of FR, 49% of
31
- * NL and 19% of DE.
32
- *
33
- * So the bound is a QUOTA and not a threshold. A threshold DELETES a locality that exceeds it, which removes exactly
34
- * the largest cities — the places a parser most needs to have seen. A quota keeps every locality and bounds how many
35
- * of its postcodes ride along, which is the balance the cap was reaching for without the deletion.
36
- *
37
- * ## Placement is data, not a formatting choice
38
- *
39
- * Each tuple is stamped with its country's {@link PostcodePlacement}. The same digits change tag with position, so a
40
- * tuple that does not carry its placement teaches whichever convention the recipe happens to default to — see the
41
- * recipe's header for the measurement.
8
+ * Each tuple is stamped with its country's {@link PostcodePlacement}, because the same digits change tag with position.
42
9
  */
43
10
 
11
+ import { officialLanguagesAlpha3, regionLanguagesAlpha3 } from "@mailwoman/codex/country"
12
+ import { foldName } from "@mailwoman/codex/normalize"
44
13
  import { dataRootPath } from "@mailwoman/core/data-root"
45
- import { pathExists } from "@mailwoman/core/fs/readers"
14
+ import { assertPathExists } from "@mailwoman/core/fs/readers"
15
+ import { wofDatabasePath } from "@mailwoman/resolver-wof-sqlite/paths"
46
16
  import type { WOFDatabase } from "@mailwoman/resolver-wof-sqlite/schema"
47
17
  import { DatabaseClient } from "@mailwoman/sqlite/client"
48
- import { join } from "path-ts"
18
+ import { PathBuilder, type PathBuilderLike } from "path-ts"
49
19
  import { TSVSpliterator } from "spliterator"
50
20
 
51
- import { GEONAMES_POSTAL_COLUMNS } from "#adapters/geonames-postal/adapter"
21
+ import { GEONAMES_POSTAL_COLUMNS } from "#adapters/geonames/postal/adapter"
22
+ import { escapeSQLString } from "#parquet/duckdb"
52
23
  import type { PostcodePlacement } from "#recipes/scaffold"
53
- import { escapeSQLString } from "#utils/parquet"
54
24
 
55
25
  /**
56
26
  * One extracted tuple, in the shape `readTuples` yields and the recipe consumes.
@@ -58,10 +28,9 @@ import { escapeSQLString } from "#utils/parquet"
58
28
  export interface PostcodeTriple {
59
29
  postcode: string
60
30
  /**
61
- * The segment before the locality, when the source has one. A slice whose every row begins with the locality teaches
62
- * that the first named segment IS the locality, and that flips the model's default. Measured on the v4.8.0 candidate,
63
- * which had no such segment — `Ye Three Lords, 27 Minories, London EC3N 1DE` came back `locality: "Ye Three Lords"`
64
- * with the venue and the street both gone, and 11 of its 25 regressions were venue-led rows across seven countries.
31
+ * The segment before the locality, when the source has one.
32
+ *
33
+ * A recipe output whose every row begins with the locality teaches that the first segment is the locality.
65
34
  */
66
35
  dependentLocality?: string
67
36
  locality: string
@@ -73,21 +42,27 @@ export interface PostcodeTriple {
73
42
  }
74
43
 
75
44
  /**
76
- * Where a country writes the postcode, and the locale tag its rows carry.
45
+ * The GeoNames postal column that contains the locality for a country.
77
46
  *
78
- * A country is in this table only when a gauntlet board row ATTESTS its surface. An absent country is not an oversight
79
- * to be filled in by guessing: extracting it with the wrong placement teaches a convention that country does not use,
80
- * which is worse than not teaching it at all. `LEADING_POSTCODE_COUNTRIES` in `@mailwoman/neural`'s
81
- * `placetype-pair-prior.ts` draws the same line for the same reason.
47
+ * `admin2` is the default.
48
+ * For the US it is the inverse, because column 3 is the city and admin2 the county,
49
+ * so taking the default would train counties as cities.
50
+ */
51
+ export type GeonamesLocalityColumn = "place" | "admin2"
52
+
53
+ /**
54
+ * Records where a country writes the postcode.
55
+ * It also records the locale tag in its rows.
82
56
  *
83
- * AU and ZA are the worked examples of the bar. Both look like obvious additions and neither qualifies: the board's AU
84
- * rows are bare-city (`Melbourne`, `Sydney, Australia`) and carry no postcode at all, so nothing here says where AU
85
- * writes it; and ZA's `14 Long St, Green Point, Cape Town, 8001` carries no REGION, which this slice requires — a fact
86
- * its GeoNames export agrees with, at 100% place and 0% admin1.
57
+ * A country is in this table only when a gauntlet board row attests its surface, because extracting
58
+ * an absent country with the wrong placement teaches a convention that country does not use.
87
59
  */
88
- export const POSTCODE_CONVENTIONS: ReadonlyMap<string, { placement: PostcodePlacement; locale: string }> = new Map([
89
- // `Rue de l'Église, 3, 29217 Plougonvelin, Bretagne, France` and its siblings — `fr_structured`, `de_structured`,
90
- // `es_structured`, `it_structured`, `pt_structured`, `mx_supermanzana`, `nl-op4-p-r-sloterdijk`.
60
+ export const POSTCODE_CONVENTIONS: ReadonlyMap<
61
+ string,
62
+ { placement: PostcodePlacement; locale: string; localityColumn?: GeonamesLocalityColumn }
63
+ > = new Map([
64
+ // `Rue de l'Église, 3, 29217 Plougonvelin, Bretagne, France` and its siblings in
65
+ // the structured slices attest this leading placement.
91
66
  ["FR", { placement: "leading", locale: "fr-FR" }],
92
67
  ["DE", { placement: "leading", locale: "de-DE" }],
93
68
  ["ES", { placement: "leading", locale: "es-ES" }],
@@ -95,35 +70,39 @@ export const POSTCODE_CONVENTIONS: ReadonlyMap<string, { placement: PostcodePlac
95
70
  ["NL", { placement: "leading", locale: "nl-NL" }],
96
71
  ["PT", { placement: "leading", locale: "pt-PT" }],
97
72
  ["MX", { placement: "leading", locale: "es-MX" }],
98
- // `…, Barcelona 6001, Anzoátegui, Venezuela` — the four `ve_city_postcode_trailing_state` rows. No postcode source
99
- // on disk and GeoNames does not publish VE, so this entry currently yields nothing; it is here because the
100
- // placement is what makes the absence legible.
73
+ // No postcode source on disk and GeoNames does not publish VE, so this entry yields no row.
74
+ // It is here because the placement makes the absence legible.
101
75
  ["VE", { placement: "after_locality", locale: "es-VE" }],
102
- // `12 MG Road, Indiranagar, Bengaluru, Karnataka 560038, India` — three `in_*` rows, and `AGENTS.md` says the same
103
- // ("en-IN is absent BECAUSE the PIN goes last"). The one trailing placement with real data behind it.
76
+ // `12 MG Road, Indiranagar, Bengaluru, Karnataka 560038, India` — three `in_*` rows,
77
+ // the one trailing placement with real data behind it.
104
78
  ["IN", { placement: "after_region", locale: "en-IN" }],
79
+ // Attested by the four `us_city_state_postcode` board rows; `localityColumn` keeps it from training counties.
80
+ ["US", { placement: "after_region", locale: "en-US", localityColumn: "place" }],
81
+ // The two `br_*` rows list locality, region and CEP in that order.
82
+ // The default `admin2` column is right here, because BR's export writes the
83
+ // municipality in column 3 and admin2 alike.
84
+ ["BR", { placement: "after_region", locale: "pt-BR" }],
105
85
  ])
106
86
 
107
87
  /**
108
88
  * How many postcodes one locality may contribute.
109
89
  *
110
- * A quota rather than a cutoff — see the header. It bounds repetition without deleting a locality: a city with 9,222
111
- * postcodes contributes this many and stays in the slice.
90
+ * A quota rather than a cutoff: it bounds repetition without deleting a locality.
112
91
  */
113
92
  export const DEFAULT_LOCALITY_QUOTA = 24
114
93
 
115
94
  /**
116
95
  * Take at most `quota` tuples per locality, in the order they arrive.
117
96
  *
118
- * Order matters and is the caller's to choose: both readers below walk their source in id / file order, which is stable
119
- * across runs, so the same quota selects the same rows.
97
+ * Both readers walk their source in id/file order.
98
+ * That order is stable across runs, so the same quota selects the same rows.
120
99
  */
121
- export function applyLocalityQuota(
122
- triples: readonly PostcodeTriple[],
100
+ export function applyLocalityQuota<T extends { cc: string; locality: string }>(
101
+ triples: readonly T[],
123
102
  quota: number = DEFAULT_LOCALITY_QUOTA
124
- ): PostcodeTriple[] {
103
+ ): T[] {
125
104
  const seen = new Map<string, number>()
126
- const kept: PostcodeTriple[] = []
105
+ const kept: T[] = []
127
106
 
128
107
  for (const triple of triples) {
129
108
  const key = `${triple.cc} ${triple.locality}`
@@ -139,62 +118,143 @@ export function applyLocalityQuota(
139
118
  }
140
119
 
141
120
  /**
142
- * Take at most `budget` tuples per COUNTRY, in the order they arrive.
121
+ * Take at most `budget` tuples per country, in the order they arrive.
143
122
  *
144
- * A per-locality quota bounds how often one place repeats; it cannot bound a country. IN has 128,152 distinct
145
- * localities, so even at a quota of ONE it contributes 63,533 rows against 39,790 from the other seven combined — the
146
- * slice would teach the trailing surface as an Indian fact rather than a general one, and at 103,323 rows it would take
147
- * 30% of an 8,000-step run's sample budget at three reps per row.
148
- *
149
- * Applied AFTER {@link applyLocalityQuota}, so a country's budget is spent on breadth (many localities) rather than on
150
- * one city's postcode list.
123
+ * Applied after {@link applyLocalityQuota}, and spent BY region in rounds so a cap
124
+ * smaller than the source still reaches every region rather than one corner.
125
+ * `subKey` adds a second round-robin dimension so the budget spreads across `(region, subKey)`.
151
126
  */
152
- export function applyCountryBudget(
153
- triples: readonly PostcodeTriple[],
154
- budget: number | ReadonlyMap<string, number>
155
- ): PostcodeTriple[] {
156
- const spent = new Map<string, number>()
157
- const kept: PostcodeTriple[] = []
127
+ export function applyCountryBudget<T extends { cc: string; region?: string }>(
128
+ triples: readonly T[],
129
+ budget: number | ReadonlyMap<string, number>,
130
+ subKey?: (triple: T) => string
131
+ ): T[] {
132
+ const byRegion = new Map<string, T[]>()
133
+ const order: string[] = []
158
134
 
159
135
  for (const triple of triples) {
160
136
  const cap = typeof budget === "number" ? budget : budget.get(triple.cc)
161
137
 
162
138
  if (cap === undefined) continue
163
139
 
164
- const n = spent.get(triple.cc) ?? 0
140
+ const key = `${triple.cc} ${triple.region ?? ""}${subKey ? ` ${subKey(triple)}` : ""}`
141
+ const bucket = byRegion.get(key)
142
+
143
+ if (bucket) {
144
+ bucket.push(triple)
145
+ } else {
146
+ byRegion.set(key, [triple])
147
+ order.push(key)
148
+ }
149
+ }
165
150
 
166
- if (n >= cap) continue
151
+ const spent = new Map<string, number>()
152
+ const kept: T[] = []
153
+ const deepest = Math.max(0, ...[...byRegion.values()].map((bucket) => bucket.length))
167
154
 
168
- spent.set(triple.cc, n + 1)
169
- kept.push(triple)
155
+ for (let round = 0; round < deepest; round++) {
156
+ for (const key of order) {
157
+ const triple = byRegion.get(key)![round]
158
+
159
+ if (!triple) continue
160
+
161
+ const cap = typeof budget === "number" ? budget : budget.get(triple.cc)!
162
+ const n = spent.get(triple.cc) ?? 0
163
+
164
+ if (n >= cap) continue
165
+
166
+ spent.set(triple.cc, n + 1)
167
+ kept.push(triple)
168
+ }
170
169
  }
171
170
 
172
171
  return kept
173
172
  }
174
173
 
175
174
  /**
176
- * Read triples out of `postalcode-intl.db` by following each postcode's `parent_id` into the admin gazetteer and that
177
- * place's ancestry to a region.
175
+ * A place's preferred names in the languages its addresses are written in,
176
+ * read from the gazetteer's `names` table.
177
+ */
178
+ interface PreferredNames {
179
+ /**
180
+ * Preferred names in the country's official languages, in the table's order.
181
+ */
182
+ official: readonly string[]
183
+ /**
184
+ * Preferred names in the region's co-official languages.
185
+ */
186
+ coOfficial: readonly string[]
187
+ }
188
+
189
+ /**
190
+ * The surfaces a region is written as: its preferred names in the official language(s),
191
+ * then the region's co-official languages, then the gazetteer's own `spr.name`
192
+ * (the English exonym), deduplicated with order kept.
193
+ *
194
+ * An input that uses only `spr.name` teaches stripped exonyms (`Balearic Islands`, `Cordoba`)
195
+ * against the forms a user writes.
196
+ */
197
+ export function regionWrittenForms(sprName: string, names: PreferredNames): string[] {
198
+ const out: string[] = []
199
+
200
+ for (const raw of [...names.official, ...names.coOfficial, ...sprName.split(BILINGUAL_JOINED)]) {
201
+ const name = raw.trim().replace(PROVINCE_GENERIC, "")
202
+
203
+ if (name && !out.includes(name)) {
204
+ out.push(name)
205
+ }
206
+ }
207
+
208
+ return out
209
+ }
210
+
211
+ /**
212
+ * The separator Who's On First joins a region's two co-official names with.
178
213
  *
179
- * A postcode whose parent does not resolve, or whose parent has no region ancestor, is DROPPED rather than emitted with
180
- * a blank — the recipe already skips a tuple with no region, and a blank here would hide how much of the source is
181
- * actually reachable.
214
+ * Spaces are required on both sides, because a slash with no surrounding spaces appears inside single names.
215
+ */
216
+ const BILINGUAL_JOINED = / \/ /
217
+
218
+ /**
219
+ * The provincial generic Who's On First keeps in a province's Catalan and Asturian
220
+ * preferred names, dropped so the surface dedupes against the Castilian one.
221
+ */
222
+ const PROVINCE_GENERIC = /^prov[ií]ncia (?:de |d')/iu
223
+
224
+ /**
225
+ * The surface a locality is written as: the official-language preferred name matching
226
+ * `spr.name` folded, else the first official-language name, else `spr.name`.
227
+ */
228
+ export function localityWrittenForm(sprName: string, names: PreferredNames): string {
229
+ const folded = foldName(sprName)
230
+
231
+ return names.official.find((name) => foldName(name) === folded) ?? names.official[0] ?? sprName
232
+ }
233
+
234
+ /**
235
+ * Read triples out of `postalcode-intl.db` by following each postcode's `parent_id`
236
+ * into the admin gazetteer and that place's ancestry to a region.
237
+ *
238
+ * A postcode whose parent does not resolve, or whose parent has no region ancestor,
239
+ * is dropped rather than emitted with a blank.
182
240
  */
183
241
  export async function readTriplesFromParentJoin(
184
242
  countries: readonly string[],
185
- options: { postcodeDB?: string; adminDB?: string } = {}
243
+ options: { postcodeDB?: PathBuilderLike; adminDB?: PathBuilderLike } = {}
186
244
  ): Promise<PostcodeTriple[]> {
187
- const postcodeDB = options.postcodeDB ?? String(dataRootPath("wof", "postalcode-intl.db"))
188
- const adminDB = options.adminDB ?? String(dataRootPath("wof", "admin-global-priority-importance.db"))
245
+ const postcodeDB = options.postcodeDB ?? wofDatabasePath("postalcode-intl.db")
246
+ const adminDB = options.adminDB ?? wofDatabasePath("admin-global-priority-importance.db")
189
247
 
190
- if (!(await pathExists(postcodeDB)) || !(await pathExists(adminDB))) return []
248
+ await assertPathExists(postcodeDB, `readTriplesFromParentJoin: no postcode database at ${postcodeDB}`)
249
+ await assertPathExists(adminDB, `readTriplesFromParentJoin: no admin gazetteer at ${adminDB}`)
191
250
 
192
251
  using db = new DatabaseClient<WOFDatabase>(adminDB, { readOnly: true })
193
252
 
194
- db.exec(`ATTACH DATABASE '${escapeSQLString(postcodeDB)}' AS pc`)
253
+ db.exec(`ATTACH DATABASE '${escapeSQLString(postcodeDB.toString())}' AS pc`)
195
254
 
196
255
  const statement = db.prepare(`
197
- SELECT p.name AS postcode, a.name AS locality, r.name AS region, c.name AS country, p.country AS cc
256
+ SELECT p.name AS postcode, a.id AS locality_id, a.name AS locality, r.id AS region_id, r.name AS region,
257
+ c.name AS country, p.country AS cc
198
258
  FROM pc.spr p
199
259
  JOIN spr a ON a.id = p.parent_id AND a.placetype IN ('locality', 'localadmin')
200
260
  JOIN ancestors anc ON anc.id = a.id AND anc.ancestor_placetype = 'region'
@@ -205,6 +265,7 @@ export async function readTriplesFromParentJoin(
205
265
  ORDER BY p.id
206
266
  `)
207
267
 
268
+ const surfaces = createSurfaceReader(db)
208
269
  const out: PostcodeTriple[] = []
209
270
 
210
271
  for (const cc of countries) {
@@ -212,18 +273,29 @@ export async function readTriplesFromParentJoin(
212
273
 
213
274
  if (!convention) continue
214
275
 
215
- for (const row of statement.all(cc) as Array<Record<string, string>>) {
216
- if (!row["postcode"] || !row["locality"] || !row["region"]) continue
217
-
218
- out.push({
219
- postcode: row["postcode"],
220
- locality: row["locality"],
221
- region: row["region"],
222
- country: row["country"] ?? "",
223
- cc,
224
- locale: convention.locale,
225
- postcodePlacement: convention.placement,
226
- })
276
+ for (const row of statement.all(cc) as Array<{
277
+ postcode: string | null
278
+ locality_id: number
279
+ locality: string | null
280
+ region_id: number
281
+ region: string | null
282
+ country: string | null
283
+ }>) {
284
+ if (!row.postcode || !row.locality || !row.region) continue
285
+
286
+ const locality = surfaces.locality(cc, row.locality_id, row.locality)
287
+
288
+ for (const region of surfaces.region(cc, row.region_id, row.region)) {
289
+ out.push({
290
+ postcode: row.postcode,
291
+ locality,
292
+ region,
293
+ country: row.country ?? "",
294
+ cc,
295
+ locale: convention.locale,
296
+ postcodePlacement: convention.placement,
297
+ })
298
+ }
227
299
  }
228
300
  }
229
301
 
@@ -231,22 +303,157 @@ export async function readTriplesFromParentJoin(
231
303
  }
232
304
 
233
305
  /**
234
- * A predicate answering whether a name is a LOCALITY the admin gazetteer knows, for one country.
306
+ * Reads the surfaces a place is written as against one open admin gazetteer, caching each
307
+ * place's preferred names by id so a region met once per locality is read once in total.
308
+ */
309
+ interface SurfaceReader {
310
+ /**
311
+ * Every surface the region is written as, in the order {@link regionWrittenForms} defines.
312
+ */
313
+ region: (cc: string, id: number, sprName: string) => string[]
314
+ /**
315
+ * The one surface the locality is written as.
316
+ *
317
+ * See {@link localityWrittenForm} for why it is one and not a fan-out.
318
+ */
319
+ locality: (cc: string, id: number, sprName: string) => string
320
+ }
321
+
322
+ /**
323
+ * Bind {@link regionWrittenForms} and {@link localityWrittenForm} to an open gazetteer.
235
324
  *
236
- * The parent-join reader gets this for free — its query restricts the parent to `locality`/`localadmin`, so every name
237
- * it emits is one by construction. The GeoNames reader has no such guarantee, and the gap is large enough to matter:
238
- * sampling 400 rows per country against the gazetteer, the share of GeoNames place names that name a locality we know
239
- * is PT 75%, IN 62%, **MX 41%**. The Mexican misses are colonias — `Zona Centro`, `San Fernando INFONAVIT`, `FOVISSSTE
240
- * 3a Sección` — and a row teaching one of those as `locality` trains the locality/dependent_locality boundary in the
241
- * wrong direction. Dropping the row instead costs coverage and teaches nothing false, which is the better of the two.
325
+ * The languages come from the codex instead of the names table's language list.
326
+ * The table's "preferred" name may use a language not spoken in the region and may refer to the parent.
327
+ */
328
+ function createSurfaceReader(db: DatabaseClient<WOFDatabase>): SurfaceReader {
329
+ const preferredStatement = db.prepare(
330
+ `SELECT language, name FROM names WHERE id = ? AND privateuse = 'preferred' AND language IS NOT NULL ORDER BY language, name`
331
+ )
332
+
333
+ const preferredByID = new Map<number, Map<string, string[]>>()
334
+
335
+ const preferredNames = (id: number): Map<string, string[]> => {
336
+ let byLanguage = preferredByID.get(id)
337
+
338
+ if (!byLanguage) {
339
+ byLanguage = new Map()
340
+
341
+ for (const row of preferredStatement.all(id) as Array<{ language: string; name: string }>) {
342
+ const list = byLanguage.get(row.language) ?? []
343
+
344
+ list.push(row.name)
345
+ byLanguage.set(row.language, list)
346
+ }
347
+
348
+ preferredByID.set(id, byLanguage)
349
+ }
350
+
351
+ return byLanguage
352
+ }
353
+
354
+ const namesIn = (byLanguage: Map<string, string[]>, languages: readonly string[]): string[] =>
355
+ languages.flatMap((language) => byLanguage.get(language) ?? [])
356
+
357
+ return {
358
+ region(cc, id, sprName) {
359
+ const officialLanguages = officialLanguagesAlpha3(cc)
360
+ const official = namesIn(preferredNames(id), officialLanguages)
361
+ // The co-official table is keyed by the region's name in the first official language.
362
+ // A region the names table has no such name for is looked up by its `spr.name`,
363
+ // which for a monolingual country is the same string.
364
+ const regionLanguages = regionLanguagesAlpha3(cc, official[0] ?? sprName)
365
+ const coOfficialLanguages = regionLanguages.filter((language) => !officialLanguages.includes(language))
366
+
367
+ return regionWrittenForms(sprName, { official, coOfficial: namesIn(preferredNames(id), coOfficialLanguages) })
368
+ },
369
+ locality(cc, id, sprName) {
370
+ const official = namesIn(preferredNames(id), officialLanguagesAlpha3(cc))
371
+
372
+ return localityWrittenForm(sprName, { official, coOfficial: [] })
373
+ },
374
+ }
375
+ }
376
+
377
+ /**
378
+ * One extracted `(locality, region, country)` pair, carrying no postcode.
379
+ */
380
+ export type AdminPair = Omit<PostcodeTriple, "postcode" | "postcodePlacement">
381
+
382
+ /**
383
+ * Read `(locality, region, country)` pairs for a country straight from the
384
+ * admin gazetteer, with no postcode.
242
385
  *
243
- * Returns a predicate that answers `true` for everything when the gazetteer is not on disk, so a checkout without it
244
- * builds the same rows it did before rather than silently emitting none.
386
+ * Produces one pair per region surface, following {@link readTriplesFromParentJoin}.
387
+ * The reader synthesizes no postcode.
245
388
  */
246
- export async function createKnownLocalityCheck(country: string, adminDB?: string): Promise<(name: string) => boolean> {
247
- const path = adminDB ?? String(dataRootPath("wof", "admin-global-priority-importance.db"))
389
+ export async function readPairsFromAdmin(
390
+ countries: readonly string[],
391
+ options: { adminDB?: PathBuilderLike; locale?: (cc: string) => string } = {}
392
+ ): Promise<AdminPair[]> {
393
+ const adminDB = options.adminDB ?? wofDatabasePath("admin-global-priority-importance.db")
248
394
 
249
- if (!(await pathExists(path))) return () => true
395
+ await assertPathExists(adminDB, `readPairsFromAdmin: no admin gazetteer at ${adminDB}`)
396
+
397
+ using db = new DatabaseClient<WOFDatabase>(adminDB, { readOnly: true })
398
+
399
+ const statement = db.prepare(`
400
+ SELECT a.id AS locality_id, a.name AS locality, r.id AS region_id, r.name AS region, c.name AS country
401
+ FROM spr a
402
+ JOIN ancestors anc ON anc.id = a.id AND anc.ancestor_placetype = 'region'
403
+ JOIN spr r ON r.id = anc.ancestor_id
404
+ JOIN ancestors cnc ON cnc.id = a.id AND cnc.ancestor_placetype = 'country'
405
+ JOIN spr c ON c.id = cnc.ancestor_id
406
+ WHERE a.country = ? AND a.placetype IN ('locality', 'localadmin') AND a.is_current != 0 AND a.is_deprecated = 0
407
+ ORDER BY a.id
408
+ `)
409
+
410
+ const surfaces = createSurfaceReader(db)
411
+ const out: AdminPair[] = []
412
+
413
+ for (const cc of countries) {
414
+ const locale = options.locale?.(cc) ?? "und"
415
+
416
+ for (const row of statement.all(cc) as Array<{
417
+ locality_id: number
418
+ locality: string | null
419
+ region_id: number
420
+ region: string | null
421
+ country: string | null
422
+ }>) {
423
+ if (!row.locality || !row.region) continue
424
+
425
+ const locality = surfaces.locality(cc, row.locality_id, row.locality)
426
+
427
+ for (const region of surfaces.region(cc, row.region_id, row.region)) {
428
+ // A pair whose region repeats its locality adds no signal about the boundary this recipe measures.
429
+ // The recipe drops that pair, so filtering it here keeps the country budget for rows that remain.
430
+ if (region === locality) continue
431
+
432
+ out.push({ locality, region, country: row.country ?? "", cc, locale })
433
+ }
434
+ }
435
+ }
436
+
437
+ return out
438
+ }
439
+
440
+ /**
441
+ * A predicate answering whether a name is a locality the admin gazetteer knows, for one country.
442
+ *
443
+ * The parent-join reader supplies this field directly.
444
+ * The GeoNames reader requires this correction because treating a colonia as `locality`
445
+ * teaches the wrong locality/dependent_locality boundary.
446
+ *
447
+ * @throws When the gazetteer is not on disk, because a predicate that accepted every
448
+ * name would emit unfiltered rows as though the filter had run.
449
+ */
450
+ export async function createKnownLocalityCheck(
451
+ country: string,
452
+ adminDB?: PathBuilderLike
453
+ ): Promise<(name: string) => boolean> {
454
+ const path = adminDB ?? wofDatabasePath("admin-global-priority-importance.db")
455
+
456
+ await assertPathExists(path, `createKnownLocalityCheck: no admin gazetteer at ${path}`)
250
457
 
251
458
  using db = new DatabaseClient<WOFDatabase>(path, { readOnly: true })
252
459
 
@@ -260,78 +467,65 @@ export async function createKnownLocalityCheck(country: string, adminDB?: string
260
467
  }
261
468
  }
262
469
 
263
- // An empty set means the gazetteer has no localities for this country at all, which is a coverage fact about the
264
- // gazetteer rather than a verdict on the source — so check nothing rather than drop everything.
470
+ // An empty set is a coverage fact about the gazetteer rather than a verdict on the source,
471
+ // so accept every name rather than dropping everything.
265
472
  if (!names.size) return () => true
266
473
 
267
474
  return (name: string) => names.has(name.toLowerCase())
268
475
  }
269
476
 
270
477
  /**
271
- * Read triples straight out of a GeoNames `<CC>.txt` export — no join, the names are columns 3 and 4.
478
+ * Read triples straight out of a GeoNames `<CC>.txt` export, with no join.
272
479
  *
273
- * COLUMN 3 IS NOT THE LOCALITY. It is the finest-grained named place for the code, and for `560001` that is `Mahatma
274
- * Gandhi Road` — a STREET — while the city, `Bengaluru`, is column 5 (admin2). MX is the same shape (`Roma Norte` is a
275
- * colonia inside `Cuauhtémoc`) and so is PT (`Abrigada` inside `Alenquer`). Reading column 3 as the locality is how the
276
- * v4.8.0 slice came to teach street names as cities. So `admin2` is the locality, `admin1` the region, and column 3 the
277
- * DEPENDENT locality — which is also the left context the slice needs.
480
+ * `admin2` supplies the locality, `admin1` supplies the region and column 3 supplies the dependent locality.
481
+ * A locality value from column 3 taught `Mahatma Gandhi Road` as a city.
278
482
  *
279
- * WHICH COUNTRIES THIS READER CAN SERVE. It needs `admin2` (the city) and `admin1` (the region), and a country can
280
- * publish one without the other. Measured 2026-08-23 across the exports on disk:
483
+ * A country whose export lacks admin1 or admin2 yields zero from this reader.
484
+ * That result is correct and needs no fallback.
281
485
  *
282
- * | country | rows | admin1 | admin2 | usable here |
283
- * | ---------- | --------: | -----: | -----: | ------------------------------- |
284
- * | PT, MX, IN | 145k–207k | 100% | 100% | yes |
285
- * | BD, LK | 1.3k–1.8k | 100% | 100% | yes |
286
- * | PH | 2,317 | 88% | 88% | yes, 88% of rows |
287
- * | PK | 2,563 | 100% | **0%** | NO — no city column |
288
- * | TH | 903 | 100% | **1%** | NO — effectively no city column |
289
- * | ID | 81,058 | **0%** | 0% | NO — no region either |
290
- * | ZA | 3,920 | **0%** | — | NO |
291
- *
292
- * A country in the NO rows yields zero from this reader, and that is the correct outcome rather than a gap to route
293
- * around: taking column 3 as the locality is what made the v4.8.0 slice train `Mahatma Gandhi Road` as a city. If one
294
- * of them is wanted, it needs a city column from somewhere else, not a relaxed mapping.
295
- *
296
- * NOT PUBLISHED AT ALL by GeoNames, checked the same day: VE, VN, NP, MM, KH. Those are acquisition questions, and for
297
- * VE specifically OpenAddresses 404s too — see the arc retrospective.
298
- *
299
- * Three source properties a caller cannot see from a row count, all handled here. Hyphen-format countries publish each
300
- * code TWICE (`3750-000` and `3750000`, exactly 2.00× for PT and PL), so the first surface of a code wins and its twin
301
- * is dropped. Some countries populate the place but not admin1 — ZA is 100% place, 0% region — which yields nothing
302
- * this slice can use, so those rows are dropped rather than emitted with a blank region. And the "place name" is often
303
- * a SUB-locality, which {@link createKnownLocalityCheck} filters.
486
+ * Hyphen-format countries publish each code twice, so the first surface of a code wins.
304
487
  */
305
488
  export async function readTriplesFromGeonames(
306
489
  country: string,
307
- path: string,
490
+ path: PathBuilderLike,
308
491
  countryName: string,
309
492
  options: { isKnownLocality?: (name: string) => boolean } = {}
310
493
  ): Promise<PostcodeTriple[]> {
311
494
  const convention = POSTCODE_CONVENTIONS.get(country)
312
495
 
313
- if (!convention || !(await pathExists(path))) return []
496
+ if (!convention) return []
497
+
498
+ await assertPathExists(path, `readTriplesFromGeonames: no GeoNames postal export at ${path}`)
314
499
 
315
500
  const isKnownLocality = options.isKnownLocality ?? (await createKnownLocalityCheck(country))
316
501
  const out: PostcodeTriple[] = []
317
502
  const seen = new Set<string>()
318
503
 
504
+ // Which column the city sits in is a property of the country's export —
505
+ // see {@link GeonamesLocalityColumn}; the other column becomes the dependent locality,
506
+ // a sub-locality for PT/MX/IN and a county for the US.
507
+ const localityIsPlace = convention.localityColumn === "place"
508
+
319
509
  for await (const cells of TSVSpliterator.fromAsync(path, { header: false }) as AsyncIterable<string[]>) {
320
- const postcode = (cells[GEONAMES_POSTAL_COLUMNS.postcode] ?? "").trim()
321
- const dependentLocality = (cells[GEONAMES_POSTAL_COLUMNS.place] ?? "").trim()
322
- const locality = (cells[GEONAMES_POSTAL_COLUMNS.admin2Name] ?? "").trim()
323
- const region = (cells[GEONAMES_POSTAL_COLUMNS.admin1Name] ?? "").trim()
510
+ const postcode = cells[GEONAMES_POSTAL_COLUMNS.postcode] ?? ""
511
+ const place = cells[GEONAMES_POSTAL_COLUMNS.place] ?? ""
512
+ const admin2 = cells[GEONAMES_POSTAL_COLUMNS.admin2Name] ?? ""
513
+ const locality = localityIsPlace ? place : admin2
514
+ const dependentLocality = localityIsPlace ? "" : place
515
+ const region = cells[GEONAMES_POSTAL_COLUMNS.admin1Name] ?? ""
324
516
 
325
517
  if (!postcode || !locality || !region) continue
326
518
 
327
- // The check applies to the LOCALITY — admin2 — not to the fine-grained name, which is expected to be a street or
328
- // a colonia and is emitted as the dependent locality rather than dropped.
519
+ // The check applies to the locality.
520
+ // For PT/MX/IN, the other column may hold a street or colonia.
521
+ // The reader emits that value as the dependent locality instead of dropping it.
329
522
  if (!isKnownLocality(locality)) continue
330
523
 
331
- // A dependent locality that merely repeats its parent teaches a doubled segment, not a boundary.
524
+ // A dependent locality that merely repeats its parent teaches a doubled segment rather than a boundary.
332
525
  const dep = dependentLocality && dependentLocality !== locality ? dependentLocality : ""
333
526
 
334
- // The bare twin of a punctuated code carries no new fact, and keeping both doubles the country's weight.
527
+ // The bare twin of a punctuated code adds no new fact.
528
+ // Both entries would double the country's weight.
335
529
  const key = `${postcode.replaceAll("-", "")} ${locality} ${dep}`
336
530
 
337
531
  if (seen.has(key)) continue
@@ -356,8 +550,9 @@ export async function readTriplesFromGeonames(
356
550
  /**
357
551
  * Resolve a GeoNames export path under the standard fetch out-root.
358
552
  */
359
- export function geonamesPostalPath(country: string, sourcesRoot?: string): string {
360
- const root = sourcesRoot ?? String(dataRootPath("corpus", "sources"))
361
-
362
- return join(root, "geonames-postal", `${country.toUpperCase()}.txt`)
553
+ export function geonamesPostalPath(country: string, sourcesRoot?: PathBuilderLike): PathBuilder {
554
+ return PathBuilder.from(sourcesRoot ?? dataRootPath("corpus", "sources"))(
555
+ "geonames-postal",
556
+ `${country.toUpperCase()}.txt`
557
+ )
363
558
  }