@mailwoman/corpus 10.1.0 → 10.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (736) hide show
  1. package/data/licenses/cdla-permissive-2.0.md +1 -1
  2. package/lib/adapters/cordis/adapter.ts +13 -7
  3. package/lib/adapters/dedup-key.ts +1 -1
  4. package/lib/adapters/geonames/adapter.ts +1 -1
  5. package/lib/adapters/gleif/adapter.ts +17 -16
  6. package/lib/adapters/libpostal-dictionary.ts +0 -2
  7. package/lib/adapters/openaddresses/adapter.ts +4 -3
  8. package/lib/adapters/osm/adapter.ts +22 -21
  9. package/lib/adapters/po-box/adapter.ts +10 -5
  10. package/lib/adapters/registry.ts +4 -4
  11. package/lib/adapters/source-id.ts +2 -2
  12. package/lib/adapters/street-line.ts +7 -6
  13. package/lib/adapters/wof/admin/json/adapter.ts +2 -2
  14. package/lib/adapters/wof/json-rows.ts +2 -1
  15. package/lib/adapters/wof/postalcode-json/adapter.ts +6 -2
  16. package/lib/adapters.ts +5 -5
  17. package/lib/au/adapters/gnaf/adapter.ts +1 -1
  18. package/lib/be/adapters/brussels/adapter.ts +22 -22
  19. package/lib/be/adapters/vlaanderen/adapter.ts +54 -57
  20. package/lib/be/adapters/wallonie/adapter.ts +17 -17
  21. package/lib/be/tools/fetch/brussels.ts +13 -10
  22. package/lib/be/tools/fetch/wallonie.ts +8 -7
  23. package/lib/build/adapters.ts +2 -1
  24. package/lib/build/align.ts +5 -4
  25. package/lib/build/checkpoint.ts +5 -3
  26. package/lib/build/eligibility.ts +3 -3
  27. package/lib/build/types.ts +8 -6
  28. package/lib/cz/adapters/cuzk/adapter.ts +41 -38
  29. package/lib/cz/tools/fetch/cuzk.ts +42 -31
  30. package/lib/de/recipes/locale.ts +1 -1
  31. package/lib/dk/adapters/inspire/adapter.ts +38 -38
  32. package/lib/dk/tools/fetch/inspire.ts +16 -14
  33. package/lib/ee/adapters/ads/adapter.ts +26 -32
  34. package/lib/ee/tools/fetch/ads.ts +10 -8
  35. package/lib/es/adapters/bizkaia/adapter.ts +47 -47
  36. package/lib/es/adapters/catastro/adapter.ts +36 -34
  37. package/lib/es/adapters/gipuzkoa/adapter.ts +38 -45
  38. package/lib/es/adapters/navarra/adapter.ts +28 -27
  39. package/lib/es/cadastre.ts +31 -31
  40. package/lib/es/tools/fetch/bizkaia.ts +40 -36
  41. package/lib/es/tools/fetch/catastro.ts +51 -40
  42. package/lib/es/tools/fetch/gipuzkoa.ts +13 -11
  43. package/lib/es/tools/fetch/navarra.ts +33 -25
  44. package/lib/fi/adapters/ryhti/adapter.ts +22 -26
  45. package/lib/fi/tools/fetch/ryhti.ts +31 -31
  46. package/lib/fr/adapters/annuaire-education/adapter.ts +13 -11
  47. package/lib/fr/adapters/ban/adapter.ts +6 -6
  48. package/lib/fr/adapters/finess/adapter.ts +16 -15
  49. package/lib/fr/adapters/finess/voie-type.ts +4 -3
  50. package/lib/fr/insee-country.ts +2 -2
  51. package/lib/fr/recipes/lieudit.ts +8 -6
  52. package/lib/fr/tools/fetch/annuaire-education.ts +11 -8
  53. package/lib/fr/tools/fetch/ban.ts +3 -2
  54. package/lib/fr/tools/fetch/finess.ts +14 -13
  55. package/lib/inspire/address.ts +86 -78
  56. package/lib/inspire/errors.ts +9 -8
  57. package/lib/inspire/stream.ts +29 -26
  58. package/lib/international/recipes/locale.ts +13 -9
  59. package/lib/it/adapters/anac/adapter.ts +51 -46
  60. package/lib/it/tools/fetch/anac.ts +22 -25
  61. package/lib/jp/adapters/wof-admin/adapter.ts +2 -6
  62. package/lib/jp/tools/fetch/houjin.ts +3 -3
  63. package/lib/kr/adapters/localdata/permit-rows.ts +1 -1
  64. package/lib/kr/tools/fetch/juso.ts +1 -1
  65. package/lib/kr/tools/fetch/localdata.ts +2 -2
  66. package/lib/lu/adapters/bd-adresses/adapter.ts +10 -10
  67. package/lib/lu/tools/fetch/bd-adresses.ts +15 -13
  68. package/lib/lv/adapters/varis/adapter.ts +24 -23
  69. package/lib/lv/tools/fetch/varis.ts +3 -2
  70. package/lib/nl/adapters/kadaster/adapter.ts +29 -29
  71. package/lib/nl/tools/fetch/kadaster.ts +16 -12
  72. package/lib/no/adapters/matrikkelen/adapter.ts +6 -5
  73. package/lib/no/tools/fetch/matrikkelen.ts +59 -47
  74. package/lib/parquet/duckdb.ts +7 -4
  75. package/lib/parquet/readers.ts +3 -3
  76. package/lib/parquet/schema.ts +1 -1
  77. package/lib/parquet/writers.ts +3 -2
  78. package/lib/pl/adapters/emuia/adapter.ts +12 -12
  79. package/lib/pl/tools/fetch/emuia.ts +10 -9
  80. package/lib/recipes/bare/postcode.ts +1 -1
  81. package/lib/recipes/boundary-stress.ts +1 -1
  82. package/lib/recipes/house-venue.ts +7 -3
  83. package/lib/recipes/intersection.ts +2 -2
  84. package/lib/recipes/po/box/cedex/recipe.ts +3 -3
  85. package/lib/recipes/po/box/cedex/sources.ts +13 -1
  86. package/lib/recipes/scaffold.ts +31 -21
  87. package/lib/recipes/sources.ts +16 -3
  88. package/lib/recipes/street/bare.ts +2 -2
  89. package/lib/recipes/street.ts +3 -1
  90. package/lib/recipes/sub/venue/context.ts +2 -0
  91. package/lib/recipes/sub/venue/render.ts +1 -1
  92. package/lib/recipes/sub/venue/sources.ts +24 -29
  93. package/lib/recipes/sub/venue.ts +12 -18
  94. package/lib/recipes/trailing-region.ts +6 -2
  95. package/lib/recipes/unit.ts +3 -3
  96. package/lib/recipes/venue.ts +347 -0
  97. package/lib/recipes.ts +4 -2
  98. package/lib/registers.ts +8 -6
  99. package/lib/ro/adapters/retea-scolara/adapter.ts +5 -5
  100. package/lib/ro/tools/fetch/retea-scolara.ts +1 -1
  101. package/lib/runner.ts +4 -3
  102. package/lib/sg/recipes/register.ts +1 -1
  103. package/lib/sg/tools/fetch/acra.ts +3 -3
  104. package/lib/sk/adapters/inspire/adapter.ts +25 -27
  105. package/lib/sk/tools/fetch/inspire.ts +15 -14
  106. package/lib/source-register/effective-manifest.ts +3 -3
  107. package/lib/source-register/register.ts +3 -3
  108. package/lib/source-register/training-manifest.ts +1 -1
  109. package/lib/source-register/types.ts +12 -13
  110. package/lib/subvenue/promotions.ts +1 -1
  111. package/lib/subvenue/table.ts +4 -4
  112. package/lib/surfaces/locale.ts +2 -0
  113. package/lib/synthesizers/anchor-absorption.ts +2 -1
  114. package/lib/synthesizers/boundary-stress.ts +20 -26
  115. package/lib/synthesizers/house-venue.ts +26 -30
  116. package/lib/synthesizers/no-street.ts +2 -1
  117. package/lib/synthesizers/po-box.ts +6 -3
  118. package/lib/synthesizers/tail.ts +55 -0
  119. package/lib/synthesizers/utils.ts +19 -2
  120. package/lib/test-kit.ts +2 -2
  121. package/lib/tools/audit.ts +7 -5
  122. package/lib/tools/corpus-stats.ts +1 -1
  123. package/lib/tools/fetch/atom.ts +10 -10
  124. package/lib/tools/fetch/cordis.ts +11 -9
  125. package/lib/tools/fetch/download/manifest.ts +2 -1
  126. package/lib/tools/fetch/download/network.ts +4 -4
  127. package/lib/tools/fetch/download/retry.ts +4 -4
  128. package/lib/tools/fetch/geonames/dump.ts +5 -3
  129. package/lib/tools/fetch/geonames/postal.ts +2 -2
  130. package/lib/tools/fetch/gleif.ts +6 -4
  131. package/lib/tools/fetch/header.ts +8 -6
  132. package/lib/tools/fetch/inspire-addresses.ts +41 -36
  133. package/lib/tools/fetch/openaddresses.ts +1 -1
  134. package/lib/tools/fetch/vlaanderen-ad.ts +17 -17
  135. package/lib/tools/fetch/wfs-harvest.ts +39 -28
  136. package/lib/tools/fetch.ts +0 -42
  137. package/lib/tools/golden/expand.ts +8 -8
  138. package/lib/tools/golden/promote.ts +12 -8
  139. package/lib/tools/golden/relabel-street/directory.ts +7 -6
  140. package/lib/tools/golden/relabel-street/row.ts +7 -6
  141. package/lib/tools/ingest-csv.ts +3 -3
  142. package/lib/tools/jsonl-to-parquet.ts +1 -1
  143. package/lib/tools/lint/recipe-output/vocab.ts +10 -5
  144. package/lib/tools/lint/recipe-output.ts +26 -8
  145. package/lib/tools/overlay/kryptonite.ts +4 -3
  146. package/lib/tools/overlay/manifest.ts +4 -2
  147. package/lib/tools/overlay/merge-source.ts +2 -1
  148. package/lib/tools/overlay/split-slice.ts +2 -2
  149. package/lib/tools/overlay/translit.ts +6 -4
  150. package/lib/tools/overture-subvenue.ts +1 -1
  151. package/lib/tools/postcode-triples.ts +5 -4
  152. package/lib/tools/source-register/build.ts +17 -14
  153. package/lib/tools/sub/venue/lexicon.ts +4 -8
  154. package/lib/tw/tools/fetch/gcis.ts +4 -4
  155. package/lib/types.ts +4 -3
  156. package/lib/us/adapters/state/hi-schools/workbook.ts +1 -1
  157. package/lib/us/adapters/usgov/nad/adapter.ts +11 -11
  158. package/lib/us/adapters/usgov/samhsa-treatment-locator/adapter.ts +4 -4
  159. package/lib/us/fips-state.ts +2 -2
  160. package/lib/{synthesizers → us/synthesizers}/intersection.ts +12 -13
  161. package/lib/{synthesizers → us/synthesizers}/street.ts +16 -15
  162. package/lib/us/tools/fetch/imls-pls.ts +1 -1
  163. package/lib/us/tools/fetch/nad.ts +7 -7
  164. package/lib/us/tools/fetch/nppes.ts +5 -5
  165. package/lib/us/tools/fetch/state/hi-schools.ts +3 -2
  166. package/lib/us/tools/fetch/tiger-full.ts +1 -1
  167. package/lib/utils/align.ts +13 -10
  168. package/lib/utils/golden.ts +2 -2
  169. package/lib/utils/license.ts +3 -3
  170. package/lib/utils/split.ts +19 -15
  171. package/lib/utils/tokenize.ts +7 -26
  172. package/lib/utils/wof-json.ts +4 -4
  173. package/out/adapters/cordis/adapter.d.ts +5 -3
  174. package/out/adapters/cordis/adapter.d.ts.map +1 -1
  175. package/out/adapters/cordis/adapter.js +13 -7
  176. package/out/adapters/cordis/adapter.js.map +1 -1
  177. package/out/adapters/dedup-key.d.ts +1 -1
  178. package/out/adapters/dedup-key.js +1 -1
  179. package/out/adapters/geonames/adapter.js +1 -1
  180. package/out/adapters/geonames/adapter.js.map +1 -1
  181. package/out/adapters/gleif/adapter.d.ts +9 -9
  182. package/out/adapters/gleif/adapter.d.ts.map +1 -1
  183. package/out/adapters/gleif/adapter.js +15 -14
  184. package/out/adapters/gleif/adapter.js.map +1 -1
  185. package/out/adapters/libpostal-dictionary.d.ts +0 -2
  186. package/out/adapters/libpostal-dictionary.d.ts.map +1 -1
  187. package/out/adapters/libpostal-dictionary.js +0 -2
  188. package/out/adapters/libpostal-dictionary.js.map +1 -1
  189. package/out/adapters/openaddresses/adapter.d.ts +3 -2
  190. package/out/adapters/openaddresses/adapter.d.ts.map +1 -1
  191. package/out/adapters/openaddresses/adapter.js +1 -1
  192. package/out/adapters/openaddresses/adapter.js.map +1 -1
  193. package/out/adapters/osm/adapter.d.ts +17 -16
  194. package/out/adapters/osm/adapter.d.ts.map +1 -1
  195. package/out/adapters/osm/adapter.js +10 -9
  196. package/out/adapters/osm/adapter.js.map +1 -1
  197. package/out/adapters/po-box/adapter.d.ts +6 -3
  198. package/out/adapters/po-box/adapter.d.ts.map +1 -1
  199. package/out/adapters/po-box/adapter.js +4 -2
  200. package/out/adapters/po-box/adapter.js.map +1 -1
  201. package/out/adapters/registry.d.ts +3 -3
  202. package/out/adapters/registry.d.ts.map +1 -1
  203. package/out/adapters/registry.js +1 -1
  204. package/out/adapters/registry.js.map +1 -1
  205. package/out/adapters/source-id.d.ts +2 -2
  206. package/out/adapters/source-id.js +2 -2
  207. package/out/adapters/street-line.d.ts +7 -6
  208. package/out/adapters/street-line.d.ts.map +1 -1
  209. package/out/adapters/street-line.js +7 -6
  210. package/out/adapters/street-line.js.map +1 -1
  211. package/out/adapters/wof/admin/json/adapter.js +1 -1
  212. package/out/adapters/wof/admin/json/adapter.js.map +1 -1
  213. package/out/adapters/wof/json-rows.d.ts +2 -1
  214. package/out/adapters/wof/json-rows.d.ts.map +1 -1
  215. package/out/adapters/wof/json-rows.js.map +1 -1
  216. package/out/adapters/wof/postalcode-json/adapter.d.ts.map +1 -1
  217. package/out/adapters/wof/postalcode-json/adapter.js +5 -1
  218. package/out/adapters/wof/postalcode-json/adapter.js.map +1 -1
  219. package/out/adapters.d.ts +5 -5
  220. package/out/adapters.js +5 -5
  221. package/out/au/adapters/gnaf/adapter.js +1 -1
  222. package/out/au/adapters/gnaf/adapter.js.map +1 -1
  223. package/out/be/adapters/brussels/adapter.d.ts +9 -9
  224. package/out/be/adapters/brussels/adapter.d.ts.map +1 -1
  225. package/out/be/adapters/brussels/adapter.js +21 -21
  226. package/out/be/adapters/brussels/adapter.js.map +1 -1
  227. package/out/be/adapters/vlaanderen/adapter.d.ts +34 -37
  228. package/out/be/adapters/vlaanderen/adapter.d.ts.map +1 -1
  229. package/out/be/adapters/vlaanderen/adapter.js +40 -38
  230. package/out/be/adapters/vlaanderen/adapter.js.map +1 -1
  231. package/out/be/adapters/wallonie/adapter.d.ts +2 -2
  232. package/out/be/adapters/wallonie/adapter.js +17 -17
  233. package/out/be/adapters/wallonie/adapter.js.map +1 -1
  234. package/out/be/tools/fetch/brussels.d.ts +11 -8
  235. package/out/be/tools/fetch/brussels.d.ts.map +1 -1
  236. package/out/be/tools/fetch/brussels.js +10 -8
  237. package/out/be/tools/fetch/brussels.js.map +1 -1
  238. package/out/be/tools/fetch/wallonie.d.ts +6 -5
  239. package/out/be/tools/fetch/wallonie.d.ts.map +1 -1
  240. package/out/be/tools/fetch/wallonie.js +4 -4
  241. package/out/be/tools/fetch/wallonie.js.map +1 -1
  242. package/out/build/adapters.d.ts.map +1 -1
  243. package/out/build/adapters.js +2 -1
  244. package/out/build/adapters.js.map +1 -1
  245. package/out/build/align.d.ts +3 -2
  246. package/out/build/align.d.ts.map +1 -1
  247. package/out/build/align.js +2 -2
  248. package/out/build/align.js.map +1 -1
  249. package/out/build/checkpoint.d.ts +1 -1
  250. package/out/build/checkpoint.d.ts.map +1 -1
  251. package/out/build/checkpoint.js +4 -2
  252. package/out/build/checkpoint.js.map +1 -1
  253. package/out/build/eligibility.d.ts +2 -2
  254. package/out/build/eligibility.js +3 -3
  255. package/out/build/eligibility.js.map +1 -1
  256. package/out/build/types.d.ts +8 -6
  257. package/out/build/types.d.ts.map +1 -1
  258. package/out/cz/adapters/cuzk/adapter.d.ts +14 -14
  259. package/out/cz/adapters/cuzk/adapter.d.ts.map +1 -1
  260. package/out/cz/adapters/cuzk/adapter.js +38 -35
  261. package/out/cz/adapters/cuzk/adapter.js.map +1 -1
  262. package/out/cz/tools/fetch/cuzk.d.ts +31 -22
  263. package/out/cz/tools/fetch/cuzk.d.ts.map +1 -1
  264. package/out/cz/tools/fetch/cuzk.js +21 -19
  265. package/out/cz/tools/fetch/cuzk.js.map +1 -1
  266. package/out/de/recipes/locale.js +1 -1
  267. package/out/de/recipes/locale.js.map +1 -1
  268. package/out/dk/adapters/inspire/adapter.d.ts +32 -33
  269. package/out/dk/adapters/inspire/adapter.d.ts.map +1 -1
  270. package/out/dk/adapters/inspire/adapter.js +38 -38
  271. package/out/dk/adapters/inspire/adapter.js.map +1 -1
  272. package/out/dk/tools/fetch/inspire.d.ts +6 -5
  273. package/out/dk/tools/fetch/inspire.d.ts.map +1 -1
  274. package/out/dk/tools/fetch/inspire.js +15 -13
  275. package/out/dk/tools/fetch/inspire.js.map +1 -1
  276. package/out/ee/adapters/ads/adapter.d.ts +19 -26
  277. package/out/ee/adapters/ads/adapter.d.ts.map +1 -1
  278. package/out/ee/adapters/ads/adapter.js +22 -28
  279. package/out/ee/adapters/ads/adapter.js.map +1 -1
  280. package/out/ee/tools/fetch/ads.d.ts +3 -3
  281. package/out/ee/tools/fetch/ads.d.ts.map +1 -1
  282. package/out/ee/tools/fetch/ads.js +10 -8
  283. package/out/ee/tools/fetch/ads.js.map +1 -1
  284. package/out/es/adapters/bizkaia/adapter.d.ts +28 -28
  285. package/out/es/adapters/bizkaia/adapter.d.ts.map +1 -1
  286. package/out/es/adapters/bizkaia/adapter.js +43 -43
  287. package/out/es/adapters/bizkaia/adapter.js.map +1 -1
  288. package/out/es/adapters/catastro/adapter.d.ts +22 -23
  289. package/out/es/adapters/catastro/adapter.d.ts.map +1 -1
  290. package/out/es/adapters/catastro/adapter.js +35 -33
  291. package/out/es/adapters/catastro/adapter.js.map +1 -1
  292. package/out/es/adapters/gipuzkoa/adapter.d.ts +31 -38
  293. package/out/es/adapters/gipuzkoa/adapter.d.ts.map +1 -1
  294. package/out/es/adapters/gipuzkoa/adapter.js +40 -47
  295. package/out/es/adapters/gipuzkoa/adapter.js.map +1 -1
  296. package/out/es/adapters/navarra/adapter.d.ts +20 -19
  297. package/out/es/adapters/navarra/adapter.d.ts.map +1 -1
  298. package/out/es/adapters/navarra/adapter.js +23 -22
  299. package/out/es/adapters/navarra/adapter.js.map +1 -1
  300. package/out/es/cadastre.d.ts +21 -20
  301. package/out/es/cadastre.d.ts.map +1 -1
  302. package/out/es/cadastre.js +19 -21
  303. package/out/es/cadastre.js.map +1 -1
  304. package/out/es/tools/fetch/bizkaia.d.ts +28 -25
  305. package/out/es/tools/fetch/bizkaia.d.ts.map +1 -1
  306. package/out/es/tools/fetch/bizkaia.js +25 -24
  307. package/out/es/tools/fetch/bizkaia.js.map +1 -1
  308. package/out/es/tools/fetch/catastro.d.ts +28 -20
  309. package/out/es/tools/fetch/catastro.d.ts.map +1 -1
  310. package/out/es/tools/fetch/catastro.js +36 -31
  311. package/out/es/tools/fetch/catastro.js.map +1 -1
  312. package/out/es/tools/fetch/gipuzkoa.d.ts +11 -9
  313. package/out/es/tools/fetch/gipuzkoa.d.ts.map +1 -1
  314. package/out/es/tools/fetch/gipuzkoa.js +9 -8
  315. package/out/es/tools/fetch/gipuzkoa.js.map +1 -1
  316. package/out/es/tools/fetch/navarra.d.ts +20 -15
  317. package/out/es/tools/fetch/navarra.d.ts.map +1 -1
  318. package/out/es/tools/fetch/navarra.js +21 -16
  319. package/out/es/tools/fetch/navarra.js.map +1 -1
  320. package/out/fi/adapters/ryhti/adapter.d.ts +16 -20
  321. package/out/fi/adapters/ryhti/adapter.d.ts.map +1 -1
  322. package/out/fi/adapters/ryhti/adapter.js +21 -25
  323. package/out/fi/adapters/ryhti/adapter.js.map +1 -1
  324. package/out/fi/tools/fetch/ryhti.d.ts +24 -24
  325. package/out/fi/tools/fetch/ryhti.d.ts.map +1 -1
  326. package/out/fi/tools/fetch/ryhti.js +21 -24
  327. package/out/fi/tools/fetch/ryhti.js.map +1 -1
  328. package/out/fr/adapters/annuaire-education/adapter.d.ts +8 -8
  329. package/out/fr/adapters/annuaire-education/adapter.d.ts.map +1 -1
  330. package/out/fr/adapters/annuaire-education/adapter.js +13 -11
  331. package/out/fr/adapters/annuaire-education/adapter.js.map +1 -1
  332. package/out/fr/adapters/ban/adapter.d.ts +4 -4
  333. package/out/fr/adapters/ban/adapter.js +6 -6
  334. package/out/fr/adapters/ban/adapter.js.map +1 -1
  335. package/out/fr/adapters/finess/adapter.d.ts +12 -11
  336. package/out/fr/adapters/finess/adapter.d.ts.map +1 -1
  337. package/out/fr/adapters/finess/adapter.js +16 -15
  338. package/out/fr/adapters/finess/adapter.js.map +1 -1
  339. package/out/fr/adapters/finess/voie-type.d.ts +2 -2
  340. package/out/fr/adapters/finess/voie-type.d.ts.map +1 -1
  341. package/out/fr/adapters/finess/voie-type.js +4 -3
  342. package/out/fr/adapters/finess/voie-type.js.map +1 -1
  343. package/out/fr/insee-country.d.ts +2 -2
  344. package/out/fr/insee-country.js +2 -2
  345. package/out/fr/recipes/lieudit.d.ts.map +1 -1
  346. package/out/fr/recipes/lieudit.js +5 -4
  347. package/out/fr/recipes/lieudit.js.map +1 -1
  348. package/out/fr/tools/fetch/annuaire-education.d.ts +7 -4
  349. package/out/fr/tools/fetch/annuaire-education.d.ts.map +1 -1
  350. package/out/fr/tools/fetch/annuaire-education.js +9 -7
  351. package/out/fr/tools/fetch/annuaire-education.js.map +1 -1
  352. package/out/fr/tools/fetch/ban.d.ts +1 -1
  353. package/out/fr/tools/fetch/ban.d.ts.map +1 -1
  354. package/out/fr/tools/fetch/ban.js +3 -2
  355. package/out/fr/tools/fetch/ban.js.map +1 -1
  356. package/out/fr/tools/fetch/finess.d.ts +5 -5
  357. package/out/fr/tools/fetch/finess.d.ts.map +1 -1
  358. package/out/fr/tools/fetch/finess.js +13 -12
  359. package/out/fr/tools/fetch/finess.js.map +1 -1
  360. package/out/inspire/address.d.ts +62 -52
  361. package/out/inspire/address.d.ts.map +1 -1
  362. package/out/inspire/address.js +71 -60
  363. package/out/inspire/address.js.map +1 -1
  364. package/out/inspire/errors.d.ts +9 -8
  365. package/out/inspire/errors.d.ts.map +1 -1
  366. package/out/inspire/errors.js +7 -6
  367. package/out/inspire/errors.js.map +1 -1
  368. package/out/inspire/stream.d.ts +25 -22
  369. package/out/inspire/stream.d.ts.map +1 -1
  370. package/out/inspire/stream.js +10 -12
  371. package/out/inspire/stream.js.map +1 -1
  372. package/out/international/recipes/locale.d.ts +2 -2
  373. package/out/international/recipes/locale.d.ts.map +1 -1
  374. package/out/international/recipes/locale.js +11 -7
  375. package/out/international/recipes/locale.js.map +1 -1
  376. package/out/it/adapters/anac/adapter.d.ts +45 -43
  377. package/out/it/adapters/anac/adapter.d.ts.map +1 -1
  378. package/out/it/adapters/anac/adapter.js +48 -43
  379. package/out/it/adapters/anac/adapter.js.map +1 -1
  380. package/out/it/tools/fetch/anac.d.ts +16 -19
  381. package/out/it/tools/fetch/anac.d.ts.map +1 -1
  382. package/out/it/tools/fetch/anac.js +20 -23
  383. package/out/it/tools/fetch/anac.js.map +1 -1
  384. package/out/jp/adapters/wof-admin/adapter.d.ts.map +1 -1
  385. package/out/jp/adapters/wof-admin/adapter.js.map +1 -1
  386. package/out/jp/tools/fetch/houjin.js +2 -2
  387. package/out/jp/tools/fetch/houjin.js.map +1 -1
  388. package/out/kr/adapters/localdata/permit-rows.js +1 -1
  389. package/out/kr/adapters/localdata/permit-rows.js.map +1 -1
  390. package/out/kr/tools/fetch/juso.d.ts +1 -1
  391. package/out/kr/tools/fetch/localdata.d.ts +1 -1
  392. package/out/kr/tools/fetch/localdata.js +1 -1
  393. package/out/kr/tools/fetch/localdata.js.map +1 -1
  394. package/out/lu/adapters/bd-adresses/adapter.d.ts +9 -9
  395. package/out/lu/adapters/bd-adresses/adapter.js +10 -10
  396. package/out/lu/tools/fetch/bd-adresses.d.ts +11 -9
  397. package/out/lu/tools/fetch/bd-adresses.d.ts.map +1 -1
  398. package/out/lu/tools/fetch/bd-adresses.js +11 -11
  399. package/out/lu/tools/fetch/bd-adresses.js.map +1 -1
  400. package/out/lv/adapters/varis/adapter.d.ts +24 -23
  401. package/out/lv/adapters/varis/adapter.d.ts.map +1 -1
  402. package/out/lv/adapters/varis/adapter.js +24 -23
  403. package/out/lv/adapters/varis/adapter.js.map +1 -1
  404. package/out/lv/tools/fetch/varis.d.ts +2 -1
  405. package/out/lv/tools/fetch/varis.d.ts.map +1 -1
  406. package/out/lv/tools/fetch/varis.js +1 -1
  407. package/out/lv/tools/fetch/varis.js.map +1 -1
  408. package/out/nl/adapters/kadaster/adapter.d.ts +12 -12
  409. package/out/nl/adapters/kadaster/adapter.d.ts.map +1 -1
  410. package/out/nl/adapters/kadaster/adapter.js +22 -23
  411. package/out/nl/adapters/kadaster/adapter.js.map +1 -1
  412. package/out/nl/tools/fetch/kadaster.d.ts +14 -10
  413. package/out/nl/tools/fetch/kadaster.d.ts.map +1 -1
  414. package/out/nl/tools/fetch/kadaster.js +12 -9
  415. package/out/nl/tools/fetch/kadaster.js.map +1 -1
  416. package/out/no/adapters/matrikkelen/adapter.d.ts +1 -1
  417. package/out/no/adapters/matrikkelen/adapter.d.ts.map +1 -1
  418. package/out/no/adapters/matrikkelen/adapter.js +3 -3
  419. package/out/no/adapters/matrikkelen/adapter.js.map +1 -1
  420. package/out/no/tools/fetch/matrikkelen.d.ts +50 -38
  421. package/out/no/tools/fetch/matrikkelen.d.ts.map +1 -1
  422. package/out/no/tools/fetch/matrikkelen.js +44 -36
  423. package/out/no/tools/fetch/matrikkelen.js.map +1 -1
  424. package/out/parquet/duckdb.d.ts +7 -4
  425. package/out/parquet/duckdb.d.ts.map +1 -1
  426. package/out/parquet/duckdb.js +2 -1
  427. package/out/parquet/duckdb.js.map +1 -1
  428. package/out/parquet/readers.js +3 -3
  429. package/out/parquet/readers.js.map +1 -1
  430. package/out/parquet/schema.js +1 -1
  431. package/out/parquet/schema.js.map +1 -1
  432. package/out/parquet/writers.d.ts +1 -1
  433. package/out/parquet/writers.d.ts.map +1 -1
  434. package/out/parquet/writers.js +2 -1
  435. package/out/parquet/writers.js.map +1 -1
  436. package/out/pl/adapters/emuia/adapter.d.ts +8 -8
  437. package/out/pl/adapters/emuia/adapter.js +12 -12
  438. package/out/pl/adapters/emuia/adapter.js.map +1 -1
  439. package/out/pl/tools/fetch/emuia.d.ts +5 -4
  440. package/out/pl/tools/fetch/emuia.d.ts.map +1 -1
  441. package/out/pl/tools/fetch/emuia.js +10 -9
  442. package/out/pl/tools/fetch/emuia.js.map +1 -1
  443. package/out/recipes/bare/postcode.js +1 -1
  444. package/out/recipes/bare/postcode.js.map +1 -1
  445. package/out/recipes/boundary-stress.js +1 -1
  446. package/out/recipes/boundary-stress.js.map +1 -1
  447. package/out/recipes/house-venue.d.ts.map +1 -1
  448. package/out/recipes/house-venue.js +6 -3
  449. package/out/recipes/house-venue.js.map +1 -1
  450. package/out/recipes/intersection.js +2 -2
  451. package/out/recipes/intersection.js.map +1 -1
  452. package/out/recipes/po/box/cedex/recipe.js +2 -1
  453. package/out/recipes/po/box/cedex/recipe.js.map +1 -1
  454. package/out/recipes/po/box/cedex/sources.d.ts +8 -2
  455. package/out/recipes/po/box/cedex/sources.d.ts.map +1 -1
  456. package/out/recipes/po/box/cedex/sources.js +1 -1
  457. package/out/recipes/po/box/cedex/sources.js.map +1 -1
  458. package/out/recipes/scaffold.d.ts +28 -19
  459. package/out/recipes/scaffold.d.ts.map +1 -1
  460. package/out/recipes/scaffold.js +3 -2
  461. package/out/recipes/scaffold.js.map +1 -1
  462. package/out/recipes/sources.d.ts +1 -1
  463. package/out/recipes/sources.d.ts.map +1 -1
  464. package/out/recipes/sources.js +15 -2
  465. package/out/recipes/sources.js.map +1 -1
  466. package/out/recipes/street/bare.js +2 -2
  467. package/out/recipes/street/bare.js.map +1 -1
  468. package/out/recipes/street.d.ts.map +1 -1
  469. package/out/recipes/street.js +3 -1
  470. package/out/recipes/street.js.map +1 -1
  471. package/out/recipes/sub/venue/context.d.ts.map +1 -1
  472. package/out/recipes/sub/venue/context.js +2 -0
  473. package/out/recipes/sub/venue/context.js.map +1 -1
  474. package/out/recipes/sub/venue/render.js +1 -1
  475. package/out/recipes/sub/venue/render.js.map +1 -1
  476. package/out/recipes/sub/venue/sources.d.ts +6 -3
  477. package/out/recipes/sub/venue/sources.d.ts.map +1 -1
  478. package/out/recipes/sub/venue/sources.js +16 -20
  479. package/out/recipes/sub/venue/sources.js.map +1 -1
  480. package/out/recipes/sub/venue.d.ts +2 -5
  481. package/out/recipes/sub/venue.d.ts.map +1 -1
  482. package/out/recipes/sub/venue.js +10 -14
  483. package/out/recipes/sub/venue.js.map +1 -1
  484. package/out/recipes/trailing-region.d.ts.map +1 -1
  485. package/out/recipes/trailing-region.js +6 -1
  486. package/out/recipes/trailing-region.js.map +1 -1
  487. package/out/recipes/unit.js +2 -2
  488. package/out/recipes/unit.js.map +1 -1
  489. package/out/recipes/venue.d.ts +119 -0
  490. package/out/recipes/venue.d.ts.map +1 -0
  491. package/out/recipes/venue.js +245 -0
  492. package/out/recipes/venue.js.map +1 -0
  493. package/out/recipes.d.ts +1 -1
  494. package/out/recipes.d.ts.map +1 -1
  495. package/out/recipes.js +3 -1
  496. package/out/recipes.js.map +1 -1
  497. package/out/registers.d.ts +8 -6
  498. package/out/registers.d.ts.map +1 -1
  499. package/out/registers.js +8 -6
  500. package/out/registers.js.map +1 -1
  501. package/out/ro/adapters/retea-scolara/adapter.d.ts +5 -5
  502. package/out/ro/adapters/retea-scolara/adapter.js +5 -5
  503. package/out/ro/tools/fetch/retea-scolara.js +1 -1
  504. package/out/ro/tools/fetch/retea-scolara.js.map +1 -1
  505. package/out/runner.d.ts +3 -2
  506. package/out/runner.d.ts.map +1 -1
  507. package/out/runner.js +1 -1
  508. package/out/runner.js.map +1 -1
  509. package/out/sg/recipes/register.js +1 -1
  510. package/out/sg/recipes/register.js.map +1 -1
  511. package/out/sg/tools/fetch/acra.js +2 -2
  512. package/out/sg/tools/fetch/acra.js.map +1 -1
  513. package/out/sk/adapters/inspire/adapter.d.ts +5 -5
  514. package/out/sk/adapters/inspire/adapter.d.ts.map +1 -1
  515. package/out/sk/adapters/inspire/adapter.js +18 -18
  516. package/out/sk/adapters/inspire/adapter.js.map +1 -1
  517. package/out/sk/tools/fetch/inspire.d.ts +11 -10
  518. package/out/sk/tools/fetch/inspire.d.ts.map +1 -1
  519. package/out/sk/tools/fetch/inspire.js +15 -14
  520. package/out/sk/tools/fetch/inspire.js.map +1 -1
  521. package/out/source-register/effective-manifest.js +3 -3
  522. package/out/source-register/effective-manifest.js.map +1 -1
  523. package/out/source-register/register.d.ts +2 -2
  524. package/out/source-register/register.d.ts.map +1 -1
  525. package/out/source-register/register.js +2 -2
  526. package/out/source-register/register.js.map +1 -1
  527. package/out/source-register/training-manifest.d.ts +1 -1
  528. package/out/source-register/types.d.ts +12 -13
  529. package/out/source-register/types.d.ts.map +1 -1
  530. package/out/source-register/types.js +2 -2
  531. package/out/source-register/types.js.map +1 -1
  532. package/out/subvenue/promotions.d.ts +1 -1
  533. package/out/subvenue/promotions.js +1 -1
  534. package/out/subvenue/table.d.ts +4 -4
  535. package/out/subvenue/table.js +3 -3
  536. package/out/surfaces/locale.d.ts.map +1 -1
  537. package/out/surfaces/locale.js +2 -0
  538. package/out/surfaces/locale.js.map +1 -1
  539. package/out/synthesizers/anchor-absorption.d.ts +2 -1
  540. package/out/synthesizers/anchor-absorption.d.ts.map +1 -1
  541. package/out/synthesizers/anchor-absorption.js.map +1 -1
  542. package/out/synthesizers/boundary-stress.d.ts +1 -1
  543. package/out/synthesizers/boundary-stress.d.ts.map +1 -1
  544. package/out/synthesizers/boundary-stress.js +20 -23
  545. package/out/synthesizers/boundary-stress.js.map +1 -1
  546. package/out/synthesizers/house-venue.d.ts +3 -2
  547. package/out/synthesizers/house-venue.d.ts.map +1 -1
  548. package/out/synthesizers/house-venue.js +24 -26
  549. package/out/synthesizers/house-venue.js.map +1 -1
  550. package/out/synthesizers/no-street.d.ts.map +1 -1
  551. package/out/synthesizers/no-street.js.map +1 -1
  552. package/out/synthesizers/po-box.d.ts +4 -2
  553. package/out/synthesizers/po-box.d.ts.map +1 -1
  554. package/out/synthesizers/po-box.js.map +1 -1
  555. package/out/synthesizers/tail.d.ts +36 -0
  556. package/out/synthesizers/tail.d.ts.map +1 -0
  557. package/out/synthesizers/tail.js +32 -0
  558. package/out/synthesizers/tail.js.map +1 -0
  559. package/out/synthesizers/utils.d.ts +2 -1
  560. package/out/synthesizers/utils.d.ts.map +1 -1
  561. package/out/synthesizers/utils.js +17 -1
  562. package/out/synthesizers/utils.js.map +1 -1
  563. package/out/test-kit.js +2 -2
  564. package/out/test-kit.js.map +1 -1
  565. package/out/tools/audit.d.ts +2 -1
  566. package/out/tools/audit.d.ts.map +1 -1
  567. package/out/tools/audit.js +4 -3
  568. package/out/tools/audit.js.map +1 -1
  569. package/out/tools/corpus-stats.js +1 -1
  570. package/out/tools/corpus-stats.js.map +1 -1
  571. package/out/tools/fetch/atom.d.ts +8 -8
  572. package/out/tools/fetch/atom.d.ts.map +1 -1
  573. package/out/tools/fetch/atom.js +7 -8
  574. package/out/tools/fetch/atom.js.map +1 -1
  575. package/out/tools/fetch/cordis.d.ts +4 -3
  576. package/out/tools/fetch/cordis.d.ts.map +1 -1
  577. package/out/tools/fetch/cordis.js +9 -7
  578. package/out/tools/fetch/cordis.js.map +1 -1
  579. package/out/tools/fetch/download/manifest.d.ts.map +1 -1
  580. package/out/tools/fetch/download/manifest.js +2 -1
  581. package/out/tools/fetch/download/manifest.js.map +1 -1
  582. package/out/tools/fetch/download/network.d.ts +4 -4
  583. package/out/tools/fetch/download/retry.js +4 -4
  584. package/out/tools/fetch/download/retry.js.map +1 -1
  585. package/out/tools/fetch/geonames/dump.d.ts +3 -2
  586. package/out/tools/fetch/geonames/dump.d.ts.map +1 -1
  587. package/out/tools/fetch/geonames/dump.js +2 -1
  588. package/out/tools/fetch/geonames/dump.js.map +1 -1
  589. package/out/tools/fetch/geonames/postal.d.ts +2 -2
  590. package/out/tools/fetch/gleif.d.ts +3 -2
  591. package/out/tools/fetch/gleif.d.ts.map +1 -1
  592. package/out/tools/fetch/gleif.js +6 -4
  593. package/out/tools/fetch/gleif.js.map +1 -1
  594. package/out/tools/fetch/header.d.ts +7 -5
  595. package/out/tools/fetch/header.d.ts.map +1 -1
  596. package/out/tools/fetch/header.js +8 -6
  597. package/out/tools/fetch/header.js.map +1 -1
  598. package/out/tools/fetch/inspire-addresses.d.ts +32 -27
  599. package/out/tools/fetch/inspire-addresses.d.ts.map +1 -1
  600. package/out/tools/fetch/inspire-addresses.js +25 -24
  601. package/out/tools/fetch/inspire-addresses.js.map +1 -1
  602. package/out/tools/fetch/openaddresses.js +1 -1
  603. package/out/tools/fetch/openaddresses.js.map +1 -1
  604. package/out/tools/fetch/vlaanderen-ad.d.ts +5 -5
  605. package/out/tools/fetch/vlaanderen-ad.d.ts.map +1 -1
  606. package/out/tools/fetch/vlaanderen-ad.js +16 -16
  607. package/out/tools/fetch/vlaanderen-ad.js.map +1 -1
  608. package/out/tools/fetch/wfs-harvest.d.ts +26 -16
  609. package/out/tools/fetch/wfs-harvest.d.ts.map +1 -1
  610. package/out/tools/fetch/wfs-harvest.js +21 -18
  611. package/out/tools/fetch/wfs-harvest.js.map +1 -1
  612. package/out/tools/fetch.d.ts +0 -41
  613. package/out/tools/fetch.d.ts.map +1 -1
  614. package/out/tools/fetch.js +0 -41
  615. package/out/tools/fetch.js.map +1 -1
  616. package/out/tools/golden/expand.d.ts +7 -7
  617. package/out/tools/golden/expand.js +1 -1
  618. package/out/tools/golden/expand.js.map +1 -1
  619. package/out/tools/golden/promote.d.ts +2 -2
  620. package/out/tools/golden/promote.d.ts.map +1 -1
  621. package/out/tools/golden/promote.js +9 -6
  622. package/out/tools/golden/promote.js.map +1 -1
  623. package/out/tools/golden/relabel-street/directory.d.ts +4 -4
  624. package/out/tools/golden/relabel-street/directory.d.ts.map +1 -1
  625. package/out/tools/golden/relabel-street/directory.js +3 -2
  626. package/out/tools/golden/relabel-street/directory.js.map +1 -1
  627. package/out/tools/golden/relabel-street/row.d.ts +4 -3
  628. package/out/tools/golden/relabel-street/row.d.ts.map +1 -1
  629. package/out/tools/golden/relabel-street/row.js +3 -3
  630. package/out/tools/golden/relabel-street/row.js.map +1 -1
  631. package/out/tools/ingest-csv.js +3 -3
  632. package/out/tools/ingest-csv.js.map +1 -1
  633. package/out/tools/jsonl-to-parquet.d.ts +1 -1
  634. package/out/tools/lint/recipe-output/vocab.d.ts +10 -5
  635. package/out/tools/lint/recipe-output/vocab.d.ts.map +1 -1
  636. package/out/tools/lint/recipe-output/vocab.js.map +1 -1
  637. package/out/tools/lint/recipe-output.d.ts +8 -8
  638. package/out/tools/lint/recipe-output.d.ts.map +1 -1
  639. package/out/tools/lint/recipe-output.js +17 -0
  640. package/out/tools/lint/recipe-output.js.map +1 -1
  641. package/out/tools/overlay/kryptonite.d.ts +2 -2
  642. package/out/tools/overlay/kryptonite.d.ts.map +1 -1
  643. package/out/tools/overlay/kryptonite.js +2 -1
  644. package/out/tools/overlay/kryptonite.js.map +1 -1
  645. package/out/tools/overlay/manifest.d.ts +2 -1
  646. package/out/tools/overlay/manifest.d.ts.map +1 -1
  647. package/out/tools/overlay/manifest.js +2 -1
  648. package/out/tools/overlay/manifest.js.map +1 -1
  649. package/out/tools/overlay/merge-source.d.ts +2 -1
  650. package/out/tools/overlay/merge-source.d.ts.map +1 -1
  651. package/out/tools/overlay/merge-source.js.map +1 -1
  652. package/out/tools/overlay/split-slice.d.ts +1 -1
  653. package/out/tools/overlay/split-slice.js +1 -1
  654. package/out/tools/overlay/split-slice.js.map +1 -1
  655. package/out/tools/overlay/translit.d.ts +4 -3
  656. package/out/tools/overlay/translit.d.ts.map +1 -1
  657. package/out/tools/overlay/translit.js +2 -1
  658. package/out/tools/overlay/translit.js.map +1 -1
  659. package/out/tools/overture-subvenue.d.ts +1 -1
  660. package/out/tools/overture-subvenue.d.ts.map +1 -1
  661. package/out/tools/postcode-triples.d.ts +1 -1
  662. package/out/tools/postcode-triples.d.ts.map +1 -1
  663. package/out/tools/postcode-triples.js +4 -3
  664. package/out/tools/postcode-triples.js.map +1 -1
  665. package/out/tools/source-register/build.d.ts +10 -8
  666. package/out/tools/source-register/build.d.ts.map +1 -1
  667. package/out/tools/source-register/build.js +10 -8
  668. package/out/tools/source-register/build.js.map +1 -1
  669. package/out/tools/sub/venue/lexicon.d.ts +2 -6
  670. package/out/tools/sub/venue/lexicon.d.ts.map +1 -1
  671. package/out/tools/sub/venue/lexicon.js +2 -6
  672. package/out/tools/sub/venue/lexicon.js.map +1 -1
  673. package/out/tw/tools/fetch/gcis.js +3 -3
  674. package/out/tw/tools/fetch/gcis.js.map +1 -1
  675. package/out/types.d.ts +4 -3
  676. package/out/types.d.ts.map +1 -1
  677. package/out/types.js.map +1 -1
  678. package/out/us/adapters/state/hi-schools/workbook.d.ts +1 -1
  679. package/out/us/adapters/state/hi-schools/workbook.d.ts.map +1 -1
  680. package/out/us/adapters/state/hi-schools/workbook.js.map +1 -1
  681. package/out/us/adapters/usgov/nad/adapter.js +6 -6
  682. package/out/us/adapters/usgov/nad/adapter.js.map +1 -1
  683. package/out/us/adapters/usgov/samhsa-treatment-locator/adapter.js +2 -2
  684. package/out/us/adapters/usgov/samhsa-treatment-locator/adapter.js.map +1 -1
  685. package/out/us/fips-state.d.ts +2 -2
  686. package/out/us/fips-state.d.ts.map +1 -1
  687. package/out/us/fips-state.js.map +1 -1
  688. package/out/us/synthesizers/intersection.d.ts.map +1 -0
  689. package/out/{synthesizers → us/synthesizers}/intersection.js +13 -9
  690. package/out/us/synthesizers/intersection.js.map +1 -0
  691. package/out/{synthesizers → us/synthesizers}/street.d.ts +3 -2
  692. package/out/us/synthesizers/street.d.ts.map +1 -0
  693. package/out/{synthesizers → us/synthesizers}/street.js +12 -12
  694. package/out/us/synthesizers/street.js.map +1 -0
  695. package/out/us/tools/fetch/imls-pls.js +1 -1
  696. package/out/us/tools/fetch/imls-pls.js.map +1 -1
  697. package/out/us/tools/fetch/nad.d.ts +6 -6
  698. package/out/us/tools/fetch/nad.js +1 -1
  699. package/out/us/tools/fetch/nad.js.map +1 -1
  700. package/out/us/tools/fetch/nppes.js +3 -3
  701. package/out/us/tools/fetch/nppes.js.map +1 -1
  702. package/out/us/tools/fetch/state/hi-schools.d.ts +2 -1
  703. package/out/us/tools/fetch/state/hi-schools.d.ts.map +1 -1
  704. package/out/us/tools/fetch/state/hi-schools.js +1 -1
  705. package/out/us/tools/fetch/state/hi-schools.js.map +1 -1
  706. package/out/us/tools/fetch/tiger-full.js +1 -1
  707. package/out/us/tools/fetch/tiger-full.js.map +1 -1
  708. package/out/utils/align.d.ts +5 -3
  709. package/out/utils/align.d.ts.map +1 -1
  710. package/out/utils/align.js +5 -5
  711. package/out/utils/align.js.map +1 -1
  712. package/out/utils/golden.js +2 -2
  713. package/out/utils/golden.js.map +1 -1
  714. package/out/utils/license.d.ts +3 -3
  715. package/out/utils/license.d.ts.map +1 -1
  716. package/out/utils/license.js.map +1 -1
  717. package/out/utils/split.d.ts +1 -1
  718. package/out/utils/split.d.ts.map +1 -1
  719. package/out/utils/split.js +18 -14
  720. package/out/utils/split.js.map +1 -1
  721. package/out/utils/tokenize.d.ts +3 -20
  722. package/out/utils/tokenize.d.ts.map +1 -1
  723. package/out/utils/tokenize.js.map +1 -1
  724. package/out/utils/wof-json.js +3 -3
  725. package/out/utils/wof-json.js.map +1 -1
  726. package/package.json +18 -27
  727. package/lib/tools.ts +0 -31
  728. package/out/synthesizers/intersection.d.ts.map +0 -1
  729. package/out/synthesizers/intersection.js.map +0 -1
  730. package/out/synthesizers/street.d.ts.map +0 -1
  731. package/out/synthesizers/street.js.map +0 -1
  732. package/out/tools.d.ts +0 -31
  733. package/out/tools.d.ts.map +0 -1
  734. package/out/tools.js +0 -31
  735. package/out/tools.js.map +0 -1
  736. /package/out/{synthesizers → us/synthesizers}/intersection.d.ts +0 -0
@@ -14,27 +14,26 @@
14
14
  * `@mailwoman/sqlite`'s Kysely client. The file is a published artifact and is opened read-only.
15
15
  *
16
16
  * The INSPIRE address model is normalized, so one address is a join rather than a row. The `address`
17
- * table carries the locator designators and a reference per component. The street name and the
18
- * postcode live in `thoroughfarename` and `postaldescriptor` and are reached through
19
- * `component_thoroughfarename` and `component_postaldescriptor`. Both resolve for every row of the
20
- * measured file, and a reference that does not resolve raises
17
+ * table holds the locator designators and a reference per component. The street name and the postcode
18
+ * live in `thoroughfarename` and `postaldescriptor`, reached through `component_thoroughfarename` and
19
+ * `component_postaldescriptor`. An unresolved reference raises
21
20
  * {@linkcode UnresolvedAddressComponentError} rather than yielding an address missing its street.
22
21
  *
23
- * The adapter reads `locator_designator_1_designator` as `house_number`, which already carries any
24
- * letter (`2A`, `68A`); `thoroughfarename.name_name` as `street`; `postaldescriptor.postcode` and
25
- * `postname` as `postcode` and `locality`. Denmark writes a floor and a door after the house number,
26
- * and the publisher splits them across `locator_designator_2_designator` and
27
- * `locator_designator_3_designator`; the adapter joins the two into one `unit`, because the Danish
28
- * address layout places `unit` and leaves `level` unplaced.
22
+ * The adapter reads `locator_designator_1_designator` as `house_number`. That column already holds
23
+ * any letter (`2A`, `68A`). It reads `thoroughfarename.name_name` as `street`, and
24
+ * `postaldescriptor.postcode` and `postname` as `postcode` and `locality`. Denmark writes a floor
25
+ * and a door after the house number, and the publisher splits them across
26
+ * `locator_designator_2_designator` and `locator_designator_3_designator`. The adapter joins the two
27
+ * into one `unit`, because the Danish address layout places `unit` and leaves `level` unplaced.
29
28
  *
30
- * The file carries no region column that belongs in an address. `component_adminunitname_2` and
29
+ * The file holds no region column that belongs in an address. `component_adminunitname_2` and
31
30
  * `_3` name a region and a municipality, neither of which a Danish address line states, so region
32
31
  * is left to the wof-postalcode and wof-admin cross-reference at corpus build time, as BAN's is.
33
32
  *
34
- * The address-source register records this source as `dk-property-building-1` and its license as
35
- * `unchecked-access-free-dk-klimadatastyrelsen`, whose `spdx` field reads `CC-BY-4.0` in an
36
- * `elected` state with `train` permitted. The adapter records that license on every row, and the
37
- * model card must attribute Klimadatastyrelsen.
33
+ * The address-source register lists this source as `dk-property-building-1`. Its
34
+ * `unchecked-access-free-dk-klimadatastyrelsen` license holds `CC-BY-4.0` in `spdx`, an `elected`
35
+ * state with `train` permitted. The adapter records that license on every row, and the model card
36
+ * must attribute Klimadatastyrelsen.
38
37
  *
39
38
  * The adapter streams through Kysely's `.stream()`, so the `address` table never sits in memory, and
40
39
  * orders by `objectid` so two runs over one file emit the same rows in the same order. It honors
@@ -42,9 +41,9 @@
42
41
  * Denmark proper, and Greenland and the Faroe Islands are their own jurisdictions and are absent
43
42
  * from it.
44
43
  *
45
- * The measured file holds 599,999 `address` rows, which is one short of a round 600,000 against a
46
- * national register several times that size. Treat it as a possible export cap rather than as
47
- * Denmark's address count. The register's `coverage` field records the same reading.
44
+ * The measured file holds 599,999 `address` rows. That is one short of a round 600,000, while the
45
+ * national register is several times larger, so treat the file as a possible export cap rather than
46
+ * as Denmark's address count.
48
47
  */
49
48
 
50
49
  import { formatAddressRow } from "@mailwoman/codex/address/format"
@@ -66,9 +65,10 @@ export const DK_INSPIRE_ADAPTER_ID = "dk-inspire"
66
65
  /**
67
66
  * The license the address-source register elects for this source.
68
67
  *
69
- * Read from the `spdx` field of the register's `unchecked-access-free-dk-klimadatastyrelsen`
70
- * license, which the register's `dk-property-building-1` source names.
71
- * The feed's own `<rights>` says the same, but the register is what governs.
68
+ * Read from the `spdx` field of the register's `unchecked-access-free-dk-klimadatastyrelsen` license.
69
+ * The register's `dk-property-building-1` source points to it.
70
+ *
71
+ * The feed's own `<rights>` states the same, but the register is what governs.
72
72
  */
73
73
  export const DK_INSPIRE_DEFAULT_LICENSE = "CC-BY-4.0"
74
74
 
@@ -82,12 +82,13 @@ export const DK_INSPIRE_DEFAULT_LICENSE = "CC-BY-4.0"
82
82
  export const DK_INSPIRE_COUNTRIES: readonly string[] = ["DK"]
83
83
 
84
84
  /**
85
- * The tables the adapter reads, which it requires `gpkg_contents` to declare.
85
+ * The tables the adapter reads.
86
+ * It requires `gpkg_contents` to declare them.
86
87
  *
87
88
  * The GeoPackage declares five.
88
- * `addressareaname` is a supplementary locality that resolves for 206,416 of the 599,999 rows
89
- * and that a Danish address line does not state, and `adminunitname` holds the region
90
- * and municipality the adapter leaves to cross-reference, so neither is read.
89
+ * `addressareaname` holds a supplementary locality that a Danish address line does
90
+ * not state, and `adminunitname` holds the region and municipality the adapter
91
+ * leaves to cross-reference, so neither is read.
91
92
  */
92
93
  export const DK_INSPIRE_REQUIRED_TABLES: readonly string[] = ["address", "postaldescriptor", "thoroughfarename"]
93
94
 
@@ -116,15 +117,14 @@ export class AddressGeoPackageSchemaError extends Error {
116
117
  /**
117
118
  * Raised when an address row's component reference resolves to no row of the referenced table.
118
119
  *
119
- * Every reference resolves in the measured file.
120
- * One that does not means the database is incomplete, which is reported
121
- * rather than converted into an address missing its street.
120
+ * An unresolved reference means the database is incomplete.
121
+ * The adapter reports it rather than converting it into an address missing its street.
122
122
  */
123
123
  export class UnresolvedAddressComponentError extends Error {
124
124
  constructor(inspireID: string, column: string, reference: string | null) {
125
125
  super(
126
126
  `${DK_INSPIRE_ADAPTER_ID} adapter: address ${inspireID} carries ${column}=` +
127
- `${reference === null ? "NULL" : `"${reference}"`}, which resolves to no row.`
127
+ `${reference ? `"${reference}"` : "NULL"}, which resolves to no row.`
128
128
  )
129
129
 
130
130
  this.name = "UnresolvedAddressComponentError"
@@ -172,11 +172,10 @@ export interface AddressGeoPackageDatabase {
172
172
  * `locator_designator_3_designator` (`tv` for `til venstre`, or a number).
173
173
  * Danish writes the floor first, so the two join in that order.
174
174
  *
175
- * {@linkcode composeHouseNumber} answers the empty string when its first argument is absent,
176
- * which is right for the house-number columns it was written for and wrong here:
177
- * 967 of the measured file's rows carry a door and no floor, and passing the pair
178
- * straight through would drop every one of those doors.
179
- * The door alone is therefore the value when the floor is absent.
175
+ * {@linkcode composeHouseNumber} answers the empty string when its first argument is absent.
176
+ * That suits the house-number columns it was written for, and it would drop every
177
+ * door here: 967 measured rows have a door and no floor.
178
+ * The door is therefore the value when the floor is absent.
180
179
  *
181
180
  * @returns The joined designator, or the empty string when the publisher states neither.
182
181
  */
@@ -223,8 +222,9 @@ export function createDKInspireAdapter(): CorpusAdapter {
223
222
  throw new AddressGeoPackageSchemaError(inputPath, declared, missing)
224
223
  }
225
224
 
226
- // Left joins, deliberately: an inner join would drop an address whose component reference
227
- // does not resolve, which is the absence this adapter has to report rather than apply.
225
+ // Left joins, deliberately: an inner join would drop an address whose
226
+ // component reference does not resolve.
227
+ // That absence has to be reported rather than applied.
228
228
  const stream = db
229
229
  .selectFrom("address as a")
230
230
  .leftJoin("thoroughfarename as t", "t.inspireid", "a.component_thoroughfarename")
@@ -256,7 +256,7 @@ export function createDKInspireAdapter(): CorpusAdapter {
256
256
  // The street is the one component every address needs and every row
257
257
  // of the measured file resolves.
258
258
  // An unresolved reference is reported, never read as a missing street.
259
- if (record.street === null) {
259
+ if (!record.street) {
260
260
  throw new UnresolvedAddressComponentError(
261
261
  record.inspireid,
262
262
  "component_thoroughfarename",
@@ -264,7 +264,7 @@ export function createDKInspireAdapter(): CorpusAdapter {
264
264
  )
265
265
  }
266
266
 
267
- if (record.postcode === null && record.postname === null) {
267
+ if (!record.postcode && !record.postname) {
268
268
  throw new UnresolvedAddressComponentError(
269
269
  record.inspireid,
270
270
  "component_postaldescriptor",
@@ -20,11 +20,11 @@
20
20
  *
21
21
  * Five properties of this host were measured, and each one breaks a reader that assumes otherwise:
22
22
  *
23
- * 1. `content-length` on the feed is the gzip-compressed length. The header says 1,455 while 3,130
23
+ * 1. `content-length` on the feed is the gzip-compressed length. The header reports 1,455 while 3,130
24
24
  * bytes are delivered, so a reader that trusts it truncates the feed. Every byte count here is
25
25
  * counted off the delivered body.
26
26
  * 2. The entry's `rel="alternate"` href is a Wing FTP weblink landing page, HTTP 200 `text/html`,
27
- * 3,811 bytes. The file needs `&realfilename=DK_INSPIRE_Addresses.zip` appended, which answers
27
+ * 3,811 bytes. The file needs `&realfilename=DK_INSPIRE_Addresses.zip` appended. That query answers
28
28
  * HTTP 200 `application/zip`.
29
29
  * 3. The host ignores `Range`. `bytes=0-4095` answers HTTP 200 with no `content-range` and the whole
30
30
  * 101 MB body, so the one-byte range GET that sizes an OpenAddresses source cannot be used here.
@@ -43,7 +43,7 @@
43
43
  procedure rather than sections of declarations. A region there folds no element a reader wants folded. */
44
44
 
45
45
  import { ByteFormatter } from "@mailwoman/core/fs/formatters"
46
- import { pathExists, statPath } from "@mailwoman/core/fs/readers"
46
+ import { pathExists, statPath } from "@mailwoman/core/fs/readers/stat"
47
47
  import { makeDirectories, removePathIfPresent } from "@mailwoman/core/fs/writers"
48
48
  import { extractZipEntry, listZipEntries } from "@mailwoman/core/fs/zip"
49
49
  import { sha256File } from "@mailwoman/core/hash"
@@ -70,7 +70,7 @@ export const DK_ADDRESSES_GEOPACKAGE_MEMBER = "ad_inspire.gpkg"
70
70
  /**
71
71
  * The query parameter that turns the entry's weblink landing page into the file itself.
72
72
  *
73
- * Wing FTP serves a listing page for a weblink and the file only when the member is named.
73
+ * Wing FTP serves the file only when the request asks for the member.
74
74
  */
75
75
  const REAL_FILENAME_PARAMETER = "realfilename"
76
76
 
@@ -91,7 +91,7 @@ export interface AddressesFeedEntry {
91
91
  */
92
92
  title: string
93
93
  /**
94
- * The download URL, with the member named so the host serves the file rather than its landing page.
94
+ * The download URL, with the member in the query so the host serves the file.
95
95
  */
96
96
  downloadURL: string
97
97
  /**
@@ -106,7 +106,7 @@ export interface AddressesFeedEntry {
106
106
  * Parsed with `@mailwoman/core/html/elements` rather than matched with a pattern.
107
107
  *
108
108
  * The feed needs both of the things a pattern handles badly.
109
- * Its entry tag carries an `xml:lang` attribute, so a reader has to keep attributes.
109
+ * Its entry tag has an `xml:lang` attribute, so a reader has to keep attributes.
110
110
  *
111
111
  * Its hrefs escape the ampersand between query parameters, so a reader has to decode entities.
112
112
  *
@@ -115,7 +115,8 @@ export interface AddressesFeedEntry {
115
115
  *
116
116
  * @param xml The whole feed, 3,130 bytes, taken as one string rather than as a stream.
117
117
  * @throws When the feed holds no entry, or its entry no usable link.
118
- * A feed holding neither reads as a change at the publisher, which a caller has to see.
118
+ * A feed holding neither reads as a change at the publisher.
119
+ * A caller has to see that.
119
120
  */
120
121
  export async function readAddressesFeed(xml: string, feedURL: string): Promise<AddressesFeedEntry> {
121
122
  async function* oneChunk(): AsyncIterable<string> {
@@ -123,7 +124,7 @@ export async function readAddressesFeed(xml: string, feedURL: string): Promise<A
123
124
  }
124
125
 
125
126
  // The feed holds one entry covering the whole country, so the first is the dataset.
126
- let entry: MarkupElement | undefined
127
+ let entry: MarkupElement | null = null
127
128
 
128
129
  for await (const found of streamMarkupElements(oneChunk(), "entry", { xml: true })) {
129
130
  entry ??= found
@@ -136,8 +137,8 @@ export async function readAddressesFeed(xml: string, feedURL: string): Promise<A
136
137
  const title = childElement(entry, "title")?.text ?? ""
137
138
 
138
139
  // The alternate link is the dataset.
139
- // The same entry carries a `describedby` link to the ISO 19139 record,
140
- // and either would download as a dataset without this check.
140
+ // The same entry also has a `describedby` link to the ISO 19139 record.
141
+ // Either would download as a dataset without this check.
141
142
  const alternate = childElements(entry, "link").find(
142
143
  (link: MarkupElement) => (link.attributes.rel ?? "").toLowerCase() === "alternate"
143
144
  )
@@ -243,8 +244,9 @@ export async function fetchDKAddresses(
243
244
 
244
245
  // MARK: Download the dataset
245
246
  //
246
- // Streamed rather than buffered, and the byte count comes from the body rather than
247
- // from the entry's `length` attribute, which understates the file by 23 times.
247
+ // Streamed rather than buffered, and the byte count comes from the body
248
+ // rather than from the entry's `length` attribute.
249
+ // That attribute understates the file by 23 times.
248
250
 
249
251
  const datasetResponse = await fetch(entry.downloadURL, { redirect: "follow" })
250
252
 
@@ -256,8 +258,8 @@ export async function fetchDKAddresses(
256
258
 
257
259
  const contentType = datasetResponse.headers.get("content-type") ?? ""
258
260
 
259
- // The bare weblink href answers HTTP 200 `text/html` with a landing page,
260
- // which would otherwise be written to disk and fail later as a corrupt zip.
261
+ // The bare weblink href answers HTTP 200 `text/html` with a landing page.
262
+ // A write to disk would fail later as a corrupt zip.
261
263
  if (contentType.includes("text/html")) {
262
264
  report?.(` ✗ The dataset URL answered ${contentType}, which is the weblink's landing page rather than the file`)
263
265
 
@@ -14,39 +14,32 @@
14
14
  * GeoServer flattens the INSPIRE application schema here, so every component value arrives inline on
15
15
  * the feature's `properties` and the adapter resolves no reference. The county, the municipality, the
16
16
  * settlement unit, the address area, the thoroughfare and the postal descriptor each occupy one of six
17
- * fixed `component<n>_xlink_title` slots, and an unused slot carries the string `unpopulated` rather
18
- * than a void object. The slot a value lands in is fixed: read through `JSONSpliterator` over 1,003
19
- * features across ten windows spread through the 729,973, slot 1 is `AU.AdministrativeUnit_maakond`
20
- * on all 1,003, slot 2 is `AU.AdministrativeUnit_ov` on all 1,003 and slot 6 is
21
- * `AD.Address_PostalDescriptor` on all 1,003, whose title is five digits on all 1,003. Slots 3, 4 and
22
- * 5 hold the settlement unit (926), the address area (4) and the thoroughfare (314) or `unpopulated`.
23
- *
24
- * The field named after the INSPIRE designator holds an internal ADS code, and the house number
25
- * sits in the locator's name-spelling element. Estonia writes that ADS code in
26
- * `locator_addresslocator_designator_locatordesignator_designator` — `7_1DOW`, `7_3P4Y`, `6_0MU3` —
27
- * and 0 of 1,003 sampled values take a house-number shape. The human-readable number is in
28
- * `locator_addresslocator_name_locatorname_name_spelling_text`. The designator's own type says
29
- * `addressNumber` on the street rows, which is what makes that field tempting to read. Reading it
30
- * would stamp `7_1DOW` as the house number on all 729,973 rows.
31
- *
32
- * Which of the two the locator name is follows the feature's structure rather than the value's shape.
33
- * A feature carrying a thoroughfare or an address area writes its number there, and one carrying
34
- * neither writes the farm or building name that designates the addressable unit. Over the same 1,003
35
- * features the split is exact: 314 of 314 features with a thoroughfare carry a number-shaped locator
36
- * name, 4 of 4 with an address area do, and 685 of 685 with neither carry a name instead. The two
37
- * never co-occur. The adapter therefore reads `house_number` where a thoroughfare element exists and
38
- * `venue` where none does, so a farm name never arrives labeled as a number.
39
- *
40
- * Slots 4 and 5 carry a malformed `href`: it addresses the `AU_haldusyksused` workspace with an
17
+ * fixed `component<n>_xlink_title` slots. An unused slot holds the string `unpopulated` rather than a
18
+ * void object. The slot a value lands in is fixed: slot 1 holds the county, slot 2 the municipality,
19
+ * slot 3 the settlement unit, slot 4 the address area, slot 5 the thoroughfare and slot 6 the postal
20
+ * descriptor.
21
+ *
22
+ * The field whose name matches the INSPIRE designator holds an internal ADS code, and the house
23
+ * number sits in the locator's name-spelling element. Estonia writes that ADS code in
24
+ * `locator_addresslocator_designator_locatordesignator_designator` (`7_1DOW`, `7_3P4Y`, `6_0MU3`).
25
+ * The human-readable number is in `locator_addresslocator_name_locatorname_name_spelling_text`. The
26
+ * designator's own type states `addressNumber` on the street rows, so that field is tempting to
27
+ * read. A reader that takes it would stamp `7_1DOW` as the house number on every row.
28
+ *
29
+ * The locator name takes one of two roles, and the feature's structure decides which. A feature that
30
+ * holds a thoroughfare or an address area writes its number there, and one that holds neither writes
31
+ * the farm or building name that designates the addressable unit. The two never co-occur. The adapter
32
+ * therefore reads `house_number` where a thoroughfare element exists and `venue` where none does, so a
33
+ * farm name never arrives labeled as a number.
34
+ *
35
+ * Slots 4 and 5 hold a malformed `href`: it addresses the `AU_haldusyksused` workspace with an
41
36
  * `AD_Address` type and answers HTTP 400 `Unknown namespace [AD_Address]`. The adapter reads the slot's
42
37
  * `title` and never follows an `href`.
43
38
  *
44
- * A row with no thoroughfare element is the ordinary rural case rather than a defect: 685 of those
45
- * 1,003 features, against the whole-service share of 288,009 thoroughfare-bearing rows in 729,973,
46
- * which is 39.5%.
39
+ * A row with no thoroughfare element is the ordinary rural case rather than a defect.
47
40
  *
48
- * Maa- ja Ruumiamet's dataset record states Creative Commons CC0 1.0 in `otherConstraints`, which the
49
- * address-source register elected and records under `spdx` as `CC0-1.0`. CC0 reserves no act, so the
41
+ * Maa- ja Ruumiamet's dataset record states Creative Commons CC0 1.0 in `otherConstraints`. The
42
+ * address-source register elected that license and records it under `spdx` as `CC0-1.0`. CC0 reserves no act, so the
50
43
  * adapter stamps that label on every row and the model card needs no attribution clause, although
51
44
  * crediting the publisher stays good practice.
52
45
  *
@@ -126,7 +119,7 @@ interface ADSFeature {
126
119
  * The sentinel is compared case-insensitively because it renders an INSPIRE codelist term
127
120
  * rather than a value the publisher authored.
128
121
  */
129
- function slotValue(value: string | undefined): string {
122
+ function slotValue(value: string | null | undefined): string {
130
123
  const trimmed = (value ?? "").trim()
131
124
 
132
125
  return trimmed.toLowerCase() === UNPOPULATED ? "" : trimmed
@@ -192,8 +185,9 @@ export function createADSAdapter(): CorpusAdapter {
192
185
 
193
186
  components.street = street
194
187
  } else if (locatorName) {
195
- // With no thoroughfare the locator name is the site or building name that
196
- // designates the addressable unit, which is how a rural Estonian address works.
188
+ // With no thoroughfare the locator name is the site or building name
189
+ // that designates the addressable unit.
190
+ // That is how a rural Estonian address works.
197
191
  components.venue = locatorName
198
192
  }
199
193
 
@@ -14,7 +14,7 @@
14
14
  *
15
15
  * `#tools/fetch/inspire-addresses` owns the capabilities read and the GeoJSON page read, and
16
16
  * `#tools/fetch/wfs-harvest` owns the appending, the manifest and the resumption. This module states
17
- * what is particular to Estonia, which is four measurements taken on 2026-10-02:
17
+ * what is particular to Estonia: four measurements taken on 2026-10-02:
18
18
  *
19
19
  * 1. The payload needs no component resolution. GeoServer flattens the application schema here, so
20
20
  * each `component<n>_xlink_href` has a sibling `component<n>_xlink_title` carrying the referenced
@@ -25,14 +25,14 @@
25
25
  * `readCheckedWFSFeatureCount`, which proves the number against a page before a caller uses it,
26
26
  * and no count is written into this file.
27
27
  * 3. The service honors a sort. `ImplementsSorting` is `TRUE`, `sortBy=gml_id` answers HTTP 200 and
28
- * `sortBy=gml_id D` returns the type's last features first, which is what proves the parameter is
28
+ * `sortBy=gml_id D` returns the type's last features first. That proves the parameter is
29
29
  * applied rather than accepted and dropped. `sortBy=gml:identifier` and `sortBy=inspireId` answer
30
30
  * HTTP 400 `Illegal property name`, so the sort property is one of the flattened names.
31
31
  * 4. A `count=10000` page of `application/json` is 31,198,909 bytes and takes about 6 seconds. At
32
32
  * 729,973 features that is 73 pages and about 2.3 GB, plus three requests for the capabilities and
33
33
  * the checked count.
34
34
  *
35
- * The harvest writes one feature per line, which is what lets the adapter stream the whole extract
35
+ * The harvest writes one feature per line. The adapter can then stream the whole extract
36
36
  * without holding a page. The `FeatureCollection` envelope is dropped: its counts describe one page
37
37
  * and the manifest records them per page instead.
38
38
  */
@@ -105,8 +105,10 @@ const LICENSE = "CC0-1.0"
105
105
  * The spacing between requests.
106
106
  *
107
107
  * The service answers a 10,000-feature page in about 6 seconds, so this is not what limits the harvest.
108
- * It bounds the harvest to one request per second against a government host whose published terms
109
- * state no rate, which the shorter requests — the capabilities and the count — would otherwise exceed.
108
+ * It bounds the harvest to one request per second against a government host
109
+ * whose published terms state no rate.
110
+ *
111
+ * The shorter requests (the capabilities and the count) would otherwise exceed that rate.
110
112
  */
111
113
  const MIN_REQUEST_INTERVAL_MS = 1000
112
114
 
@@ -186,7 +188,7 @@ export async function harvestADSEE(
186
188
 
187
189
  options.report?.(` Feature count: ${featureCount.count ?? "not stated"} — ${featureCount.because}`)
188
190
 
189
- return await harvestPagedWFS({
191
+ return harvestPagedWFS({
190
192
  context: CONTEXT,
191
193
  source: SLUG,
192
194
  outputDir: options.outputDir,
@@ -246,7 +248,7 @@ export type FetchADSEEOptions = BaseFetchOptions &
246
248
  export async function fetchADSEE(options: FetchADSEEOptions, report?: (line: string) => void): Promise<FetchSummary> {
247
249
  const pageSize = options.pageSize ?? EE_ADS_PAGE_SIZE
248
250
 
249
- return await runWFSHarvest(
251
+ return runWFSHarvest(
250
252
  {
251
253
  slug: SLUG,
252
254
  outRoot: options.outRoot,
@@ -257,7 +259,7 @@ export async function fetchADSEE(options: FetchADSEEOptions, report?: (line: str
257
259
  client: options.client,
258
260
  maxPages: options.maxPages,
259
261
  harvest: async (client) =>
260
- await harvestADSEE(client, {
262
+ harvestADSEE(client, {
261
263
  outputDir: options.outRoot(SLUG),
262
264
  pageSize,
263
265
  maxPages: options.maxPages,
@@ -8,17 +8,17 @@
8
8
  *
9
9
  * The ATOM service at `https://apli.bizkaia.eus/apps/Danok/INSPIRE/addresses.xml` lists 112
10
10
  * municipality entries, one zipped GML each. Catastro's national feed links this service rather than
11
- * serving its data, which is why the publisher is a register of its own.
11
+ * serving its data. The publisher is therefore a register of its own.
12
12
  *
13
- * The archives carry addresses alone, and that is what shapes this reader. Abadiño's
13
+ * The archives hold only addresses. That shapes this reader. Abadiño's
14
14
  * `ES.BFA.AD.001.zip` holds one member, `ES.BFA.AD.gml`, whose 1,360 `ad:Address` features write
15
15
  * 4,080 `ad:component` references and not one `ad:ThoroughfareName`, `ad:PostalDescriptor` or
16
16
  * `ad:AdminUnitName` feature. Every reference is a stored-query URL on
17
17
  * `https://geo.bizkaia.eus/arcgisserverinspire/…` addressing an `adComponent.<n>` the ATOM feed never
18
- * publishes. A reader of the archive alone therefore writes every address in the province without
18
+ * publishes. A reader given only those archives therefore writes every address in the province without
19
19
  * its street, its postcode or its municipality.
20
20
  *
21
- * Those features are on the publisher's WFS, which serves the whole province in three requests. The
21
+ * Those features are on the publisher's WFS. It serves the whole province in one request per type. The
22
22
  * service answers `ad:ThoroughfareName` with `numberMatched="6921"`, `ad:PostalDescriptor` with
23
23
  * `96` and `ad:AdminUnitName` with `113`, and a `GetFeature` with `COUNT=10000` returns each type
24
24
  * whole: 6,921 thoroughfare names arrive in one 13,916,056-byte document. One request per type is
@@ -32,14 +32,14 @@
32
32
  * addresses. An unresolved reference is a value the reader asked for and could not read, and it
33
33
  * raises.
34
34
  *
35
- * Two of the publisher's own spellings decide what a row carries.
35
+ * Two of the publisher's own spellings decide what a row records.
36
36
  *
37
37
  * A thoroughfare name is a cadastral field rather than a street name:
38
38
  * `BO\TRAÑA-MATIENA(1)` is the street-type abbreviation `BO`, a backslash, the name, and the
39
39
  * street's own sequence code in parentheses. All 6,921 take that form. The row keeps the
40
40
  * abbreviation, as the Dirección General del Catastro's own rendered line does with `CL SANTIAGO
41
- * APOSTOL`, writes a space where the cadastre writes its separator, and drops the sequence code,
42
- * which is an identifier rather than part of the name.
41
+ * APOSTOL`, writes a space where the cadastre writes its separator, and drops the sequence code
42
+ * because it is an identifier rather than part of the name.
43
43
  *
44
44
  * The house number is the last of the four dot-separated fields of the designator, and the
45
45
  * designator is a cadastral code: `48.001.00026.003` is municipality 48001, street 00026 and number
@@ -57,10 +57,9 @@
57
57
  * The first three are an ordinary Spanish number, a number with a letter, and a number with a
58
58
  * *bis*, *izquierda* or *derecha* qualifier. The fourth is two fields concatenated and what its
59
59
  * second field designates is not established: it is three digits wide like the number itself, and
60
- * no document the publisher publishes says what it counts. Those 181 of 1,360 rows therefore carry the
61
- * publisher's own concatenation with its padding removed, which transcribes the designator without
62
- * interpreting it. Splitting the field on a guessed separator would state a number the cadastre does
63
- * not hold.
60
+ * no document the publisher publishes states what it counts. The row therefore writes the
61
+ * publisher's own concatenation with its padding removed. A split on a guessed separator would
62
+ * state a number the cadastre does not hold.
64
63
  *
65
64
  * The municipality is `ad:AdminUnitName` at `3rdOrder`, which is the only level the service
66
65
  * publishes: 113 of 113 of its administrative-unit features state it, and their names are padded
@@ -71,14 +70,14 @@
71
70
  * `48 001 CL\TRAÑAETXOSTE(00066) 002` for the address whose designator is `48.001.00066.002`. It
72
71
  * restates the municipality code, the street type and name, the street code zero-padded to five, and
73
72
  * the number field, and it is written inside the archive while the street itself comes from a
74
- * separate WFS document. Putting the resolved street and the composed number beside it therefore
75
- * checks that the right feature was joined, which is what the adapter's test does. The register's
73
+ * separate WFS document. The adapter's test compares the resolved street and the composed number
74
+ * against it to check that the right feature was joined. The register's
76
75
  * personal-data review reads these values as internal cadastral references rather than names, and
77
76
  * the adapter writes none of them into a row.
78
77
  *
79
78
  * No service either publisher runs was found to render a postal address for this province: the
80
- * ArcGIS layer behind the WFS exposes INSPIRE fields alone. So the number's unexplained second field
81
- * stays an open question rather than one this adapter resolved.
79
+ * ArcGIS layer behind the WFS exposes only INSPIRE fields. The number's unexplained second field
80
+ * therefore stays open.
82
81
  */
83
82
 
84
83
  import { openReadStream } from "@mailwoman/core/fs/streams"
@@ -120,26 +119,26 @@ export const ES_BIZKAIA_COUNTRIES: readonly string[] = ["ES"]
120
119
  /**
121
120
  * The license the address-source register elected for this publisher.
122
121
  *
123
- * Bizkaia names no license instrument, so no SPDX identifier is written and this records the
124
- * publisher's own words. Its INSPIRE metadata carries the controlled values `No limitations to
122
+ * Bizkaia states no license instrument, so no SPDX identifier is written and this records the
123
+ * publisher's own words. Its INSPIRE metadata states the controlled values `No limitations to
125
124
  * public access` and `No conditions to access and use`, and its feed-level `rights` adds the
126
125
  * condition that authorship and ownership of the BFA be stated as «©Bizkaiko Foru Aldundia». The
127
126
  * register records two contradictions it did not resolve: all 112 municipality entries also read
128
127
  * `Copyright (c) 2017", ES.BFA; all rights reserved`, and Catastro's national feed labels this
129
- * publisher `CC BY 3.0 ES`, which no document Bizkaia publishes names.
128
+ * publisher `CC BY 3.0 ES`. No document Bizkaia publishes states that label.
130
129
  */
131
130
  export const ES_BIZKAIA_LICENSE = "No conditions to access and use, with attribution to «©Bizkaiko Foru Aldundia»"
132
131
 
133
132
  /**
134
133
  * The member of a municipality's archive that holds the GML.
135
134
  *
136
- * Each archive ships one member, named `ES.BFA.AD.gml` whichever municipality it holds,
137
- * so the extension selects it and the archive's own name carries the municipality.
135
+ * Each archive ships one member, `ES.BFA.AD.gml` whichever municipality it holds,
136
+ * so the extension selects it and the archive's own name identifies the municipality.
138
137
  */
139
138
  const GML_MEMBER = /\.gml$/iu
140
139
 
141
140
  /**
142
- * The feature types the saved WFS documents carry, indexed before any address is read.
141
+ * The feature types in the saved WFS documents, indexed before any address is read.
143
142
  */
144
143
  const COMPONENT_ELEMENTS = [
145
144
  "ad:ThoroughfareName",
@@ -165,7 +164,7 @@ const MUNICIPALITY_LEVEL = "3rdOrder"
165
164
  const HOUSE_NUMBER_TYPE = "buildingIdentifier"
166
165
 
167
166
  /**
168
- * How many dot-separated fields a designator carries.
167
+ * How many dot-separated fields a designator has.
169
168
  *
170
169
  * Municipality, street, number: `48.001.00026.003` splits the municipality code across two.
171
170
  */
@@ -176,15 +175,16 @@ const DESIGNATOR_FIELDS = 4
176
175
  *
177
176
  * `BO\TRAÑA-MATIENA(1)` answers `BO TRAÑA-MATIENA`.
178
177
  * The backslash is the cadastre's separator between the street-type abbreviation
179
- * and the name, and the trailing parenthesis holds the street's sequence code,
180
- * which the address's own designator repeats as its third field.
178
+ * and the name, and the trailing parenthesis holds the street's sequence code.
181
179
  *
182
- * @returns The street, or undefined where the feature states no name.
180
+ * The address's own designator repeats that code as its third field.
181
+ *
182
+ * @returns The street, or null where the feature states no name.
183
183
  */
184
- export function bizkaiaStreet(feature: MarkupElement): string | undefined {
184
+ export function bizkaiaStreet(feature: MarkupElement): string | null {
185
185
  const text = thoroughfareName(feature)
186
186
 
187
- if (!text) return undefined
187
+ if (!text) return null
188
188
 
189
189
  const street = text
190
190
  .replace(/\((\d+)\)\s*$/u, "")
@@ -192,19 +192,19 @@ export function bizkaiaStreet(feature: MarkupElement): string | undefined {
192
192
  .replaceAll(/\s+/gu, " ")
193
193
  .trim()
194
194
 
195
- return street || undefined
195
+ return street || null
196
196
  }
197
197
 
198
198
  /**
199
199
  * The street's sequence code a thoroughfare feature states, as the feature writes it.
200
200
  *
201
- * The code the address's designator joins on, which is what makes the publisher's own
202
- * `ad:LocatorName` a check of the join rather than a copy of it.
201
+ * The code the address's designator joins on.
202
+ * The publisher's own `ad:LocatorName` therefore checks the join rather than copying it.
203
203
  *
204
- * @returns The digits inside the trailing parentheses, or undefined where there are none.
204
+ * @returns The digits inside the trailing parentheses, or null where there are none.
205
205
  */
206
- export function bizkaiaStreetCode(feature: MarkupElement): string | undefined {
207
- return /\((\d+)\)\s*$/u.exec(thoroughfareName(feature) ?? "")?.[1]
206
+ export function bizkaiaStreetCode(feature: MarkupElement): string | null {
207
+ return /\((\d+)\)\s*$/u.exec(thoroughfareName(feature) ?? "")?.[1] ?? null
208
208
  }
209
209
 
210
210
  /**
@@ -215,20 +215,20 @@ export function bizkaiaStreetCode(feature: MarkupElement): string | undefined {
215
215
  *
216
216
  * This module's header tabulates the four shapes it takes, with their counts.
217
217
  *
218
- * @returns The number, or undefined where the designator is absent or does not carry four fields.
218
+ * @returns The number, or null where the designator is absent or does not have four fields.
219
219
  */
220
- export function bizkaiaHouseNumber(byType: ReadonlyMap<string, readonly string[]>): string | undefined {
220
+ export function bizkaiaHouseNumber(byType: ReadonlyMap<string, readonly string[]>): string | null {
221
221
  const code = designator(byType, HOUSE_NUMBER_TYPE)
222
222
 
223
- if (!code) return undefined
223
+ if (!code) return null
224
224
 
225
225
  const fields = code.split(".")
226
226
 
227
- if (fields.length !== DESIGNATOR_FIELDS) return undefined
227
+ if (fields.length !== DESIGNATOR_FIELDS) return null
228
228
 
229
229
  const number = fields[DESIGNATOR_FIELDS - 1]!.replace(/^0+(?=.)/u, "")
230
230
 
231
- return number || undefined
231
+ return number || null
232
232
  }
233
233
 
234
234
  export function createESBizkaiaAdapter(): CorpusAdapter {
@@ -296,19 +296,19 @@ export function createESBizkaiaAdapter(): CorpusAdapter {
296
296
  }
297
297
 
298
298
  /**
299
- * One address's row, or undefined when it carries too little to render.
299
+ * One address's row, or null when it has too little to render.
300
300
  */
301
- function composeRow(address: MarkupElement, referenced: ReadonlyMap<string, MarkupElement>): CanonicalRow | undefined {
302
- const addressID = address.attributes["gml:id"]?.trim()
301
+ function composeRow(address: MarkupElement, referenced: ReadonlyMap<string, MarkupElement>): CanonicalRow | null {
302
+ const addressID = address.attributes["gml:id"]?.trim() ?? null
303
303
 
304
304
  if (voidDesignatorTypes(address).has(HOUSE_NUMBER_TYPE)) {
305
305
  throw new VoidDesignatorError(ES_BIZKAIA_ADAPTER_ID, addressID, HOUSE_NUMBER_TYPE)
306
306
  }
307
307
 
308
- let street: string | undefined
309
- let postcode: string | undefined
310
- let locality: string | undefined
311
- let settlement: string | undefined
308
+ let street: string | null = null
309
+ let postcode: string | null = null
310
+ let locality: string | null = null
311
+ let settlement: string | null = null
312
312
 
313
313
  for (const href of componentHrefs(address)) {
314
314
  const key = componentJoinKey(href)
@@ -361,8 +361,8 @@ function memberChunks(path: PathBuilderLike): AsyncIterable<string | Uint8Array>
361
361
  * The two passes read the same list, so an input holding addresses and an input holding
362
362
  * component features need not be told apart: a municipality archive contributes addresses
363
363
  * to the second pass and no feature to the first, and a saved WFS page the reverse.
364
- * Deciding by extension would be wrong on a hand-assembled input that holds both,
365
- * and the publisher's own naming distinguishes neither.
364
+ * Extension cannot decide: a hand-assembled input can hold both, and the
365
+ * publisher's own naming distinguishes neither.
366
366
  *
367
367
  * A path holding no input raises rather than yielding zero rows, so a wrong path
368
368
  * reports itself instead of reading as an empty publisher.