@mailwoman/corpus 10.1.0 → 10.2.1

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
@@ -9,7 +9,7 @@
9
9
  * supplies the I/O.
10
10
  */
11
11
 
12
- import { pathExists } from "@mailwoman/core/fs/readers"
12
+ import { pathExists } from "@mailwoman/core/fs/readers/stat"
13
13
  import { readZipEntry } from "@mailwoman/core/fs/zip"
14
14
  import { tryParsingJSON, stringifyJSON } from "@mailwoman/core/json"
15
15
  import type { PathBuilderLike } from "path-ts"
@@ -59,9 +59,10 @@ export interface RecipeTuple {
59
59
  postcode?: string
60
60
  country?: string
61
61
  /**
62
- * Defaults to `leading` when absent.
63
62
  *
64
63
  * That matches every tuples file written before this field existed.
64
+ *
65
+ * @defaultValue `leading` when absent.
65
66
  */
66
67
  postcodePlacement?: PostcodePlacement
67
68
  /**
@@ -351,7 +352,8 @@ export function alignAndWrite(
351
352
  ): boolean {
352
353
  const aligned = alignRow(canonical as Parameters<typeof alignRow>[0])
353
354
 
354
- if (!aligned.row) return false
355
+ // A quarantined result also has a `row`, the quarantine record, so the kind decides.
356
+ if (aligned.kind !== "labeled") return false
355
357
 
356
358
  write(
357
359
  stringifyJSON({
@@ -395,26 +397,28 @@ export interface RecipeOptions {
395
397
  intlFraction?: number
396
398
  /**
397
399
  * `german`: fraction of native-order rows rendered with no commas at all.
398
- * The default is 0.3.
400
+ *
401
+ * @defaultValue `0.3`
399
402
  */
400
403
  commaFreeFraction?: number
401
404
  /**
402
405
  * `german`: fraction of rows whose `dependent_locality` is a WOF Ortsteil of the tuple's locality.
403
406
  *
404
- * The default is 0.3.
405
407
  * It is 0 when no admin database is readable.
408
+ *
409
+ * @defaultValue `0.3`
406
410
  */
407
411
  ortsteilFraction?: number
408
412
  /**
409
413
  * `german`: the WOF admin database the Ortsteil pool is read from.
410
414
  *
411
- * Default `$MAILWOMAN_DATA_ROOT/db/wof/admin-global-priority-importance.db`.
415
+ * @defaultValue `$MAILWOMAN_DATA_ROOT/db/wof/admin-global-priority-importance.db`
412
416
  */
413
417
  adminDB?: string
414
418
  /**
415
419
  * `locale`: fraction of rows that append an explicit country surface form + a `country` component.
416
420
  *
417
- * Default 0.
421
+ * @defaultValue `0`
418
422
  */
419
423
  countryFraction?: number
420
424
  /**
@@ -430,7 +434,7 @@ export interface RecipeOptions {
430
434
  /**
431
435
  * `fr-lieudit`: BAN `adresses-<dept>.csv` directory.
432
436
  *
433
- * Default `$MAILWOMAN_DATA_ROOT/corpus/sources/ban`.
437
+ * @defaultValue `$MAILWOMAN_DATA_ROOT/corpus/sources/ban`
434
438
  */
435
439
  banDir?: PathBuilderLike
436
440
  multilocaleCount?: number
@@ -449,48 +453,54 @@ export interface RecipeOptions {
449
453
  * `no-fragment` knob 3: emit N copies of each street+number row whose number has >=
450
454
  * longNumberMinDigits digits (oversample the failing long-number class).
451
455
  *
452
- * Default 1 = no boost.
456
+ * @defaultValue `1` = no boost
453
457
  */
454
458
  longNumberBoost?: number
455
459
  /**
456
460
  * `no-fragment` knob 3: minimum digit count for a number to count as "long" and be boosted.
457
461
  *
458
- * Default 3.
462
+ * @defaultValue `3`
459
463
  */
460
464
  longNumberMinDigits?: number
461
465
  /**
462
466
  * `sub-venue`: the sub-venue lexicon JSON.
463
467
  *
464
- * Default = the committed `corpus/data/sub-venue-lexicon.json`, resolved through the package manifest so it works
468
+ * @defaultValue = the committed `corpus/data/sub-venue-lexicon.json`, resolved through the package manifest so it works
465
469
  * from the source tree and from `out/`.
466
470
  */
467
471
  lexicon?: string
468
472
  /**
469
473
  * `sub-venue`: directory of `sub-venue-extract` JSONLs, one per region.
470
474
  *
471
- * Default `$MAILWOMAN_DATA_ROOT/sub-venue/extracts`.
475
+ * @defaultValue `$MAILWOMAN_DATA_ROOT/sub-venue/extracts`
472
476
  */
473
477
  extractsDir?: string
474
- /**
475
- * `sub-venue`: the `poi.db` spatial layer, read for the en-US and fr-FR venue + confound
476
- * pools (the two of poi.db's four countries this recipe has legs for).
477
- *
478
- * Default `$MAILWOMAN_DATA_ROOT/db/poi/poi.db`.
479
- */
480
- poiDB?: string
481
478
  /**
482
479
  * `sub-venue`: GB/US/FR address-context tuples jsonl.
483
480
  *
484
- * Default the house-venue v3 tuples (`$MAILWOMAN_DATA_ROOT/corpus/intermediate/house-venue-tuples-v3.jsonl`);
481
+ * @defaultValue the house-venue v3 tuples (`$MAILWOMAN_DATA_ROOT/corpus/intermediate/house-venue-tuples-v3.jsonl`);
485
482
  * DE and ES read OpenAddresses directly.
486
483
  */
487
484
  subVenueTuples?: string
488
485
  /**
489
486
  * `sub-venue`: share of emitted rows that are confound negatives.
490
487
  *
491
- * Default 0.3.
488
+ * @defaultValue `0.3`
492
489
  */
493
490
  negativeFraction?: number
491
+ /**
492
+ * `venue` and `sub-venue`: the Overture place-names Parquet file with `name`,
493
+ * `category` and `country` columns.
494
+ *
495
+ * @defaultValue the release the venue-head table is built from, under `$MAILWOMAN_DATA_ROOT/overture`
496
+ */
497
+ venueNames?: PathBuilderLike
498
+ /**
499
+ * `venue`: share of locality rows that also carry the tuple's region after the locality.
500
+ *
501
+ * @defaultValue `0.5`
502
+ */
503
+ venueRegionFraction?: number
494
504
  }
495
505
 
496
506
  /**
@@ -91,7 +91,7 @@ export interface RecipeSource {
91
91
  /**
92
92
  * Why the producer's path does not fully explain the placement.
93
93
  */
94
- note?: string
94
+ note: string | null
95
95
  }
96
96
 
97
97
  /**
@@ -107,7 +107,7 @@ function entries(
107
107
  current: `${prefix}-${tail}`,
108
108
  operation,
109
109
  producer,
110
- ...(note ? { note } : {}),
110
+ note: note || null,
111
111
  }))
112
112
  }
113
113
 
@@ -164,6 +164,7 @@ export const RECIPE_SOURCES: ReadonlyArray<RecipeSource> = [
164
164
  current: "rendered-de",
165
165
  operation: SourceOperation.Rendered,
166
166
  producer: "de/recipes/locale.ts",
167
+ note: null,
167
168
  },
168
169
  // Three tails include the word `fragment` themselves.
169
170
  // It folds into the prefix instead of repeating.
@@ -183,21 +184,33 @@ export const RECIPE_SOURCES: ReadonlyArray<RecipeSource> = [
183
184
  current: "fragment-fr",
184
185
  operation: SourceOperation.Fragment,
185
186
  producer: "fr/recipes/fragment.ts",
187
+ note: null,
186
188
  },
187
189
  {
188
190
  retired: "synth-no-fragment",
189
191
  current: "fragment-no",
190
192
  operation: SourceOperation.Fragment,
191
193
  producer: "no/recipes/fragment.ts",
194
+ note: null,
192
195
  },
193
196
  ...entries(SourceOperation.Fragment, "fragment", [
194
197
  ["fr-bare-street", "fr/recipes/bare-street.ts"],
195
198
  ["fr-bare-street-v20", "fr/recipes/bare-street.ts"],
196
199
  ["fr-bare-street-v21", "fr/recipes/bare-street.ts"],
197
200
  ["fr-bare-street-v22", "fr/recipes/bare-street.ts"],
201
+ [
202
+ "venue-bare",
203
+ "recipes/venue.ts",
204
+ "An Overture place name as the whole query. The retired spelling never reached a corpus: the recipe was written after the rename.",
205
+ ],
198
206
  ]),
199
207
  ...entries(SourceOperation.Spliced, "spliced", [
200
208
  ["unit", "recipes/unit.ts", "The unit designator and number are drawn."],
209
+ [
210
+ "venue-locality",
211
+ "recipes/venue.ts",
212
+ "The locality is drawn from the country's admin tuples. The retired spelling never reached a corpus.",
213
+ ],
201
214
  ["unit-v30", "recipes/unit.ts"],
202
215
  ["affix", "recipes/street/affix.ts"],
203
216
  ["suffix-boundary", "recipes/street/affix.ts"],
@@ -259,7 +272,7 @@ export const CARRIED_SOURCES: ReadonlyArray<string> = [
259
272
  "gnaf",
260
273
  "osm",
261
274
  // One id per country for the 2026-10-02 Geofabrik extracts, written by `corpus run osm --source-name`.
262
- // A country's OSM rows then carry their own weight, so admitting a country,
275
+ // A country's OSM rows then hold their own weight, so admitting a country,
263
276
  // admitting its OSM rows and sampling them stay three settings.
264
277
  // The September PK, VN and BD rows keep `osm`.
265
278
  "osm-ru",
@@ -22,9 +22,9 @@ import { mulberry32 as makeMulberry32 } from "@mailwoman/core/utils"
22
22
 
23
23
  import { recipeSourceID, requireRegister, type CanonicalRecipeRow, type CorpusRecipe } from "#recipes/scaffold"
24
24
  import { defaultRecipeSource } from "#recipes/sources"
25
- import { DEFAULT_US_BASES } from "#synthesizers/intersection"
26
- import { synthesizeStreetRow, type StreetBaseTuple } from "#synthesizers/street"
27
25
  import { SurfaceOrigin } from "#types"
26
+ import { DEFAULT_US_BASES } from "#us/synthesizers/intersection"
27
+ import { synthesizeStreetRow, type StreetBaseTuple } from "#us/synthesizers/street"
28
28
  import { alignRow } from "#utils"
29
29
 
30
30
  /**
@@ -12,8 +12,8 @@ import { makeLcg } from "@mailwoman/core/utils"
12
12
  import { stableSourceID } from "#adapters/source-id"
13
13
  import { alignAndWrite, readTuples, type CorpusRecipe } from "#recipes/scaffold"
14
14
  import { defaultRecipeSource } from "#recipes/sources"
15
- import { synthesizeStreetRow, type StreetBaseTuple } from "#synthesizers/street"
16
15
  import { SurfaceOrigin } from "#types"
16
+ import { synthesizeStreetRow, type StreetBaseTuple } from "#us/synthesizers/street"
17
17
 
18
18
  /**
19
19
  * The recipe draws a street name from a pool and joins it to a tuple's locality, region and postcode.
@@ -62,6 +62,8 @@ export const streetRecipe: CorpusRecipe = {
62
62
  continue
63
63
  }
64
64
 
65
+ // country-branch: `synthesizeStreetRow` renders the US layout only.
66
+ // The codex layouts in the `locale` recipe cover the rest.
65
67
  if (tuple.country !== "US") {
66
68
  skipped++
67
69
 
@@ -138,6 +138,8 @@ export function buildStreetNegatives(
138
138
  isPair = true
139
139
  }
140
140
 
141
+ // country-branch: `-gate` is a street-name suffix in British English only.
142
+ // The street-morphology FST per locale would replace it.
141
143
  if (country === "GB" && token.length >= MIN_GATE_SUFFIX_TOKEN_LENGTH && token.endsWith("gate")) {
142
144
  gateSuffix.push(tuple)
143
145
  }
@@ -150,7 +150,7 @@ export function addressGroups(country: string, tuple: LocaleBaseTuple, withStree
150
150
  let current: Group = []
151
151
 
152
152
  for (const piece of renderAddress(layout, components).pieces) {
153
- if (piece.tag === null) {
153
+ if (!piece.tag) {
154
154
  if (GROUP_BREAK.has(piece.text) && current.length) {
155
155
  groups.push(current)
156
156
  current = []
@@ -9,10 +9,9 @@ import { resolveModulePath } from "@mailwoman/core/module/resolvers"
9
9
  import { sample } from "@mailwoman/core/random"
10
10
  import { escapeRegExp } from "@mailwoman/core/strings/regexp"
11
11
  import { upperFirst } from "@mailwoman/normalize/case"
12
- import type { POIDatabase } from "@mailwoman/resolver-wof-sqlite/poi"
13
- import { DatabaseClient } from "@mailwoman/sqlite/client"
14
12
  import type { PathBuilderLike } from "path-ts"
15
13
 
14
+ import { escapeSQLString, openDuckDB } from "#parquet/duckdb"
16
15
  import { classifyIdentifier, readSubVenueJSONL } from "#subvenue/harvest"
17
16
  import { SUBVENUE_PROMOTIONS, type SubVenuePromotion } from "#subvenue/promotions"
18
17
  import type { SubVenueLexiconTable } from "#subvenue/table"
@@ -30,7 +29,7 @@ export function defaultLexiconPath(): string {
30
29
  * Reads the sub-venue lexicon and throws on invalid JSON.
31
30
  */
32
31
  export async function readSubVenueLexicon(path: string = defaultLexiconPath()): Promise<SubVenueLexiconTable> {
33
- return await readLocalJSONFile<SubVenueLexiconTable>(path)
32
+ return readLocalJSONFile<SubVenueLexiconTable>(path)
34
33
  }
35
34
 
36
35
  const MAX_VENUE_NAME_LENGTH = 44
@@ -516,43 +515,39 @@ const POI_CONFOUND_CATEGORIES: readonly string[] = [
516
515
  ]
517
516
 
518
517
  /**
519
- * Reads the venue and confound name pools for one country from `poi.db`.
518
+ * Reads the venue and confound name pools for one country from the Overture place-names file,
519
+ * which holds `name`, `category` and `country` for every country the release covers.
520
520
  *
521
- * The database covers only a few countries, so an empty result may reflect missing coverage.
521
+ * The venue categories fill the `venues` pool.
522
+ * Every row of a venue or confound category is tested against the rejected phrases
523
+ * and the designator phrases, as the OSM extracts are.
522
524
  */
523
- export function readPOIPools(dbPath: PathBuilderLike, country: string, query: PoolQuery): NamePools {
524
- using db = new DatabaseClient<POIDatabase>(dbPath, { readOnly: true })
525
-
526
- const codes = db.prepare("select id, category from poi_category_codes").all() as Array<{
527
- id: number
528
- category: string
529
- }>
530
-
531
- const byName = new Map(codes.map((c) => [c.category, c.id]))
532
- const venueIDs = POI_VENUE_CATEGORIES.map((c) => byName.get(c)).filter((id): id is number => id != null)
533
- const confoundIDs = POI_CONFOUND_CATEGORIES.map((c) => byName.get(c)).filter((id): id is number => id != null)
534
- const wanted = [...venueIDs, ...confoundIDs]
535
-
536
- if (!wanted.length) throw new Error(`poi.db at ${dbPath} has none of the expected categories`)
537
-
538
- const rows = db
539
- .prepare(
540
- `select name, category_id from poi where country = ? and name is not null and category_id in (${wanted.map(() => "?").join(",")})`
541
- )
542
- .all(country, ...wanted) as Array<{ name: string; category_id: number }>
525
+ export async function readOvertureNamePools(
526
+ venueNames: PathBuilderLike,
527
+ country: string,
528
+ query: PoolQuery
529
+ ): Promise<NamePools> {
530
+ const categories = [...POI_VENUE_CATEGORIES, ...POI_CONFOUND_CATEGORIES].map((c) => `'${escapeSQLString(c)}'`)
531
+
532
+ using db = await openDuckDB({ threads: 4 })
533
+
534
+ const result = await db.runAndReadAll(
535
+ `SELECT DISTINCT name, category FROM read_parquet('${escapeSQLString(String(venueNames))}')
536
+ WHERE country = '${escapeSQLString(country)}' AND name IS NOT NULL AND category IN (${categories.join(",")})`
537
+ )
543
538
 
544
- const venueSet = new Set(venueIDs)
539
+ const venueSet = new Set(POI_VENUE_CATEGORIES)
545
540
  const venues = new Set<string>()
546
541
  const rejectedVenues = new Set<string>()
547
542
  const longerNames = new Set<string>()
548
543
 
549
- for (const row of rows) {
550
- const name = row.name.trim()
544
+ for (const [nameValue, categoryValue] of result.getRows()) {
545
+ const name = String(nameValue).trim()
551
546
 
552
547
  if (!isVenueSlotName(name)) continue
553
548
  const low = name.toLowerCase()
554
549
 
555
- if (venueSet.has(row.category_id)) {
550
+ if (venueSet.has(String(categoryValue))) {
556
551
  venues.add(name)
557
552
  }
558
553
 
@@ -12,7 +12,6 @@ import { stringifyJSON } from "@mailwoman/core/json"
12
12
  import { sample } from "@mailwoman/core/random"
13
13
  import { mulberry32 as makeMulberry32 } from "@mailwoman/core/utils"
14
14
  import { upperFirst } from "@mailwoman/normalize/case"
15
- import { poiDatabasePath } from "@mailwoman/resolver-wof-sqlite/paths"
16
15
  import type { PathBuilderLike } from "path-ts"
17
16
 
18
17
  import { recipeSourceID, type CorpusRecipe } from "#recipes/scaffold"
@@ -30,19 +29,16 @@ import {
30
29
  type PromotedSurface,
31
30
  promotedSurfacesFor,
32
31
  readExtractPools,
33
- readPOIPools,
32
+ readOvertureNamePools,
34
33
  readSubVenueLexicon,
35
34
  rejectedPhrasesFor,
36
35
  sampleIdentifier,
37
36
  } from "#recipes/sub/venue/sources"
37
+ import { DEFAULT_VENUE_NAMES } from "#recipes/venue"
38
38
  import type { SubVenueLexiconTable } from "#subvenue/table"
39
39
  import type { LocaleBaseTuple } from "#surfaces/locale"
40
40
  import { alignRow } from "#utils"
41
41
 
42
- export * from "#recipes/sub/venue/sources"
43
- export * from "#recipes/sub/venue/context"
44
- export * from "#recipes/sub/venue/render"
45
-
46
42
  // #region Plan
47
43
 
48
44
  /**
@@ -62,7 +58,7 @@ export interface SubVenueLeg {
62
58
  /**
63
59
  * The OSM extract filename under `--extracts-dir`.
64
60
  *
65
- * A leg without an extract draws its venue and confound pools from `poi.db`.
61
+ * Every leg draws venue and confound pools from the Overture place-names file as well.
66
62
  */
67
63
  extract?: string
68
64
  /**
@@ -146,7 +142,7 @@ export const SUBVENUE_LEGS: readonly SubVenueLeg[] = [
146
142
  * The region whose identifier distribution the en-US leg uses.
147
143
  *
148
144
  * The en-US leg has no OSM extract.
149
- * Its `poi.db` contains venue names without refs.
145
+ * The Overture names file carries venue names without refs.
150
146
  * The recipe borrows the identifier distribution from GB.
151
147
  */
152
148
  export const US_IDENTIFIER_REGION_BORROWED_FROM = "GB"
@@ -636,23 +632,21 @@ export function allocate(total: number, shares: readonly number[]): number[] {
636
632
  }
637
633
 
638
634
  /**
639
- * Builds one leg's name pools from its extract and `poi.db`, plus its address context.
635
+ * Builds one leg's name pools from its extract and the Overture place-names file, plus its address context.
640
636
  */
641
637
  async function buildLegPools(
642
638
  leg: SubVenueLeg,
643
639
  query: PoolQuery,
644
640
  contextByCountry: ReadonlyMap<string, LocaleBaseTuple[]>,
645
- paths: { extractsDir: PathBuilderLike; poiDB: PathBuilderLike }
641
+ paths: { extractsDir: PathBuilderLike; venueNames: PathBuilderLike }
646
642
  ): Promise<LegPools> {
647
643
  const extractPools = leg.extract
648
644
  ? await readExtractPools(`${paths.extractsDir}/${leg.extract}`, query)
649
645
  : EMPTY_NAME_POOLS
650
646
 
651
- // Only the US and FR legs have rows in poi.db.
652
- const poiPools =
653
- leg.country === "US" || leg.country === "FR" ? readPOIPools(paths.poiDB, leg.country, query) : EMPTY_NAME_POOLS
647
+ const overturePools = await readOvertureNamePools(paths.venueNames, leg.country, query)
654
648
 
655
- const names = mergeNamePools(extractPools, poiPools)
649
+ const names = mergeNamePools(extractPools, overturePools)
656
650
  let context = contextByCountry.get(leg.country) ?? []
657
651
 
658
652
  if (leg.postcodePrefixes) {
@@ -711,8 +705,8 @@ export const subVenueRecipe: CorpusRecipe = {
711
705
  description: "OSM sub-venue extract JSONLs (default: $MAILWOMAN_DATA_ROOT/sub-venue/extracts)",
712
706
  },
713
707
  {
714
- flag: "--poi-db <path>",
715
- description: "poi.db for the en-US / fr-FR pools (default: $MAILWOMAN_DATA_ROOT/db/poi/poi.db)",
708
+ flag: "--venue-names <parquet>",
709
+ description: `Overture place-names file for every leg's venue and confound pools (default ${DEFAULT_VENUE_NAMES})`,
716
710
  },
717
711
  { flag: "--sub-venue-tuples <path>", description: "GB/US/FR address-context tuples JSONL" },
718
712
  {
@@ -725,7 +719,7 @@ export const subVenueRecipe: CorpusRecipe = {
725
719
  const count = opts.count
726
720
  const negativeFraction = opts.negativeFraction ?? DEFAULT_NEGATIVE_FRACTION
727
721
  const extractsDir = opts.extractsDir ?? dataRootPath("sub-venue", "extracts")
728
- const poiDB = opts.poiDB ?? poiDatabasePath("poi.db")
722
+ const venueNames = opts.venueNames ?? DEFAULT_VENUE_NAMES
729
723
  const tuplesPath = opts.subVenueTuples ?? dataRootPath("corpus", "intermediate", "house-venue-tuples-v3.jsonl")
730
724
  const lexicon: SubVenueLexiconTable = await readSubVenueLexicon(opts.lexicon ?? defaultLexiconPath())
731
725
 
@@ -756,7 +750,7 @@ export const subVenueRecipe: CorpusRecipe = {
756
750
  english: leg.english,
757
751
  }
758
752
 
759
- const pools = await buildLegPools(leg, query, contextByCountry, { extractsDir, poiDB })
753
+ const pools = await buildLegPools(leg, query, contextByCountry, { extractsDir, venueNames })
760
754
 
761
755
  legPromoted.set(leg.locale, promoted)
762
756
  legPools.set(leg.locale, pools)
@@ -42,8 +42,13 @@ import { SurfaceOrigin } from "#types"
42
42
  function regionCodeSurface(cc: string, region: string): string | null {
43
43
  const country = cc.toUpperCase()
44
44
 
45
+ // country-branch: the codex holds region codes for CA and US only.
46
+ // The WOF admin database's `place_abbr` holds codes for ten countries
47
+ // (IT, US, ES, MX, BR, CA, AU, AE, UA, AD), and an ISO 3166-2 table would cover every country.
48
+ // The tree holds neither as a lookup yet.
45
49
  if (country === "CA") return lookupCanadianProvince(region)
46
50
 
51
+ // country-branch: see the CA branch above.
47
52
  return country === "US" ? lookupUSState(region) : null
48
53
  }
49
54
 
@@ -110,8 +115,7 @@ export const trailingRegionRecipe: CorpusRecipe = {
110
115
  const placement = (t.postcodePlacement as PostcodePlacement | undefined) ?? "leading"
111
116
  const bareLocality = postcode && placement === "after_locality" ? `${locality} ${postcode}` : locality
112
117
 
113
- const localitySegment =
114
- components["dependent_locality"] === undefined ? bareLocality : `${dependentLocality}, ${bareLocality}`
118
+ const localitySegment = components["dependent_locality"] ? `${dependentLocality}, ${bareLocality}` : bareLocality
115
119
 
116
120
  // The code alternates with the region name rather than replacing it:
117
121
  // both forms are posted and the resolver matches on the name.
@@ -133,13 +133,13 @@ const tail = (random: () => number, loc: string, reg: string, pc: string): strin
133
133
  }
134
134
 
135
135
  /**
136
- * The identifier inside a rendered unit, or `undefined` when a standalone designator
136
+ * The identifier inside a rendered unit, or `null` when a standalone designator
137
137
  * or a letter-only id has none.
138
138
  */
139
- function unitIdentifier(unit: string): string | undefined {
139
+ function unitIdentifier(unit: string): string | null {
140
140
  const last = unit.replace(/^#\s*/, "").split(/\s+/).at(-1)
141
141
 
142
- return last && /\d/.test(last) ? last : undefined
142
+ return last && /\d/.test(last) ? last : null
143
143
  }
144
144
 
145
145
  // `full-comma-bare` writes the identifier with no designator at all, the one unit surface carrying no