@mailwoman/corpus 9.2.0 → 9.4.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 (1261) hide show
  1. package/README.md +22 -22
  2. package/data/PROVENANCE.md +7 -7
  3. package/lib/adapters/ban/adapter.ts +190 -0
  4. package/lib/adapters/ban/street-decompose.ts +66 -0
  5. package/lib/adapters/fcc-bdc/adapter.ts +174 -0
  6. package/lib/adapters/geonames/adapter.ts +199 -0
  7. package/lib/adapters/geonames-postal/adapter.ts +122 -0
  8. package/lib/adapters/gnaf/adapter.ts +149 -0
  9. package/lib/adapters/gnaf/assemble.ts +225 -0
  10. package/lib/adapters/index.ts +153 -0
  11. package/lib/adapters/openaddresses/adapter.ts +251 -0
  12. package/lib/adapters/overture/adapter.ts +162 -0
  13. package/lib/adapters/state-hi-schools/adapter.ts +170 -0
  14. package/lib/adapters/state-hi-schools/workbook.ts +35 -0
  15. package/lib/adapters/synth-po-box/adapter.ts +204 -0
  16. package/lib/adapters/tiger/adapter.ts +252 -0
  17. package/lib/adapters/tiger/street-decompose.ts +83 -0
  18. package/lib/adapters/usgov-hrsa-fqhc/adapter.ts +167 -0
  19. package/lib/adapters/usgov-imls-pls/adapter.ts +143 -0
  20. package/lib/adapters/usgov-irs-bmf/adapter.ts +151 -0
  21. package/lib/adapters/usgov-nad/adapter.ts +334 -0
  22. package/lib/adapters/usgov-nppes/adapter.ts +151 -0
  23. package/lib/adapters/usgov-samhsa-treatment-locator/adapter.ts +193 -0
  24. package/lib/adapters/utils/index.ts +307 -0
  25. package/lib/adapters/wof-admin-jp/adapter.ts +214 -0
  26. package/lib/adapters/wof-admin-json/adapter.ts +231 -0
  27. package/lib/adapters/wof-json-rows.ts +129 -0
  28. package/lib/adapters/wof-postalcode-json/adapter.ts +176 -0
  29. package/lib/build.ts +378 -0
  30. package/lib/env.ts +50 -0
  31. package/lib/index.ts +13 -0
  32. package/lib/recipes/anchor-absorption.ts +101 -0
  33. package/lib/recipes/bare-country.ts +95 -0
  34. package/lib/recipes/boundary-stress.ts +102 -0
  35. package/lib/recipes/cn-organizational-units.ts +199 -0
  36. package/lib/recipes/country-balanced.ts +510 -0
  37. package/lib/recipes/cz-pcfirst-preposition.ts +112 -0
  38. package/lib/recipes/fr-admin-split.ts +243 -0
  39. package/lib/recipes/fr-bare-street.ts +171 -0
  40. package/lib/recipes/fr-fragment.ts +334 -0
  41. package/lib/recipes/fr-lieudit.ts +301 -0
  42. package/lib/recipes/fr-order.ts +246 -0
  43. package/lib/recipes/german.ts +360 -0
  44. package/lib/recipes/house-venue.ts +93 -0
  45. package/lib/recipes/index.ts +97 -0
  46. package/lib/recipes/intersection.ts +619 -0
  47. package/lib/recipes/locale.ts +600 -0
  48. package/lib/recipes/nl-postcode.ts +117 -0
  49. package/lib/recipes/no-fragment.ts +213 -0
  50. package/lib/recipes/no-street-led.ts +135 -0
  51. package/lib/recipes/no-street.ts +91 -0
  52. package/lib/recipes/po-box-cedex.ts +976 -0
  53. package/lib/recipes/po-box.ts +124 -0
  54. package/lib/recipes/reviewed-postcode-tail.ts +190 -0
  55. package/lib/recipes/scaffold.ts +468 -0
  56. package/lib/recipes/si-bare-village.ts +99 -0
  57. package/lib/recipes/street-affix.ts +805 -0
  58. package/lib/recipes/street-bare.ts +102 -0
  59. package/lib/recipes/street.ts +83 -0
  60. package/lib/recipes/sub-venue-sources.ts +878 -0
  61. package/lib/recipes/sub-venue.ts +998 -0
  62. package/lib/recipes/trailing-region.ts +178 -0
  63. package/lib/recipes/unit.ts +304 -0
  64. package/lib/runner.ts +312 -0
  65. package/lib/synthesizers/anchor-absorption.ts +288 -0
  66. package/lib/synthesizers/boundary-stress.ts +532 -0
  67. package/lib/synthesizers/german.ts +260 -0
  68. package/lib/synthesizers/house-venue.ts +308 -0
  69. package/lib/synthesizers/intersection.ts +233 -0
  70. package/lib/synthesizers/no-street.ts +327 -0
  71. package/lib/synthesizers/po-box.ts +323 -0
  72. package/lib/synthesizers/street.ts +269 -0
  73. package/lib/synthesizers/utils.ts +993 -0
  74. package/lib/test-kit/corpus-recipe.ts +86 -0
  75. package/lib/test-kit/index.ts +100 -0
  76. package/lib/tools/align-slice.ts +68 -0
  77. package/lib/tools/audit.ts +403 -0
  78. package/lib/tools/corpus-stats.ts +136 -0
  79. package/lib/tools/fetch/acra-sg.ts +174 -0
  80. package/lib/tools/fetch/ban.ts +289 -0
  81. package/lib/tools/fetch/download.ts +477 -0
  82. package/lib/tools/fetch/gcis-tw.ts +175 -0
  83. package/lib/tools/fetch/geonames-dump.ts +257 -0
  84. package/lib/tools/fetch/geonames-postal.ts +180 -0
  85. package/lib/tools/fetch/houjin-jp.ts +135 -0
  86. package/lib/tools/fetch/hrsa.ts +59 -0
  87. package/lib/tools/fetch/imls-pls.ts +149 -0
  88. package/lib/tools/fetch/index.ts +174 -0
  89. package/lib/tools/fetch/juso-kr.ts +165 -0
  90. package/lib/tools/fetch/localdata-kr.ts +194 -0
  91. package/lib/tools/fetch/nad.ts +341 -0
  92. package/lib/tools/fetch/nppes.ts +165 -0
  93. package/lib/tools/fetch/openaddresses.ts +347 -0
  94. package/lib/tools/fetch/ourairports.ts +170 -0
  95. package/lib/tools/fetch/ppd.ts +121 -0
  96. package/lib/tools/fetch/state-hi-schools.ts +161 -0
  97. package/lib/tools/fetch/state-sources.ts +146 -0
  98. package/lib/tools/fetch/tiger-full.ts +308 -0
  99. package/lib/tools/fetch/wikidata-subvenue.ts +384 -0
  100. package/lib/tools/golden-expand.ts +574 -0
  101. package/lib/tools/golden-promote.ts +337 -0
  102. package/lib/tools/golden-relabel-street.ts +686 -0
  103. package/lib/tools/index.ts +28 -0
  104. package/lib/tools/ingest-csv.ts +378 -0
  105. package/lib/tools/jsonl-to-parquet.ts +207 -0
  106. package/lib/tools/lint-slice-vocab.ts +388 -0
  107. package/lib/tools/lint-slice.ts +496 -0
  108. package/lib/tools/overlay-manifest.ts +148 -0
  109. package/lib/tools/overture-subvenue.ts +209 -0
  110. package/lib/tools/postcode-triples.ts +363 -0
  111. package/lib/tools/slice-kryptonite.ts +137 -0
  112. package/lib/tools/slice-translit.ts +218 -0
  113. package/lib/tools/sub-venue/harvest.ts +234 -0
  114. package/lib/tools/sub-venue/head-nouns.ts +245 -0
  115. package/lib/tools/sub-venue/surfaces.ts +95 -0
  116. package/lib/tools/sub-venue/table.ts +281 -0
  117. package/lib/tools/sub-venue/wikidata.ts +85 -0
  118. package/lib/tools/sub-venue-lexicon.ts +429 -0
  119. package/lib/tools/sub-venue-promotions.ts +330 -0
  120. package/lib/types.ts +247 -0
  121. package/lib/utils/align.ts +330 -0
  122. package/lib/utils/golden.ts +189 -0
  123. package/lib/utils/index.ts +14 -0
  124. package/lib/utils/parquet.ts +582 -0
  125. package/lib/utils/slice-stats.ts +95 -0
  126. package/lib/utils/split.ts +279 -0
  127. package/lib/utils/tokenize.ts +120 -0
  128. package/lib/utils/wof-json.ts +247 -0
  129. package/out/adapters/ban/adapter.d.ts.map +1 -0
  130. package/out/adapters/ban/adapter.js +149 -0
  131. package/out/adapters/ban/adapter.js.map +1 -0
  132. package/out/adapters/ban/street-decompose.d.ts.map +1 -0
  133. package/out/adapters/ban/street-decompose.js +51 -0
  134. package/out/adapters/ban/street-decompose.js.map +1 -0
  135. package/out/adapters/fcc-bdc/adapter.d.ts.map +1 -0
  136. package/out/adapters/fcc-bdc/adapter.js +144 -0
  137. package/out/adapters/fcc-bdc/adapter.js.map +1 -0
  138. package/out/adapters/geonames/adapter.d.ts.map +1 -0
  139. package/out/adapters/geonames/adapter.js +176 -0
  140. package/out/adapters/geonames/adapter.js.map +1 -0
  141. package/out/adapters/geonames-postal/adapter.d.ts +54 -0
  142. package/out/adapters/geonames-postal/adapter.d.ts.map +1 -0
  143. package/out/adapters/geonames-postal/adapter.js +107 -0
  144. package/out/adapters/geonames-postal/adapter.js.map +1 -0
  145. package/out/adapters/gnaf/adapter.d.ts +49 -0
  146. package/out/adapters/gnaf/adapter.d.ts.map +1 -0
  147. package/out/adapters/gnaf/adapter.js +124 -0
  148. package/out/adapters/gnaf/adapter.js.map +1 -0
  149. package/out/adapters/gnaf/assemble.d.ts +65 -0
  150. package/out/adapters/gnaf/assemble.d.ts.map +1 -0
  151. package/out/adapters/gnaf/assemble.js +154 -0
  152. package/out/adapters/gnaf/assemble.js.map +1 -0
  153. package/out/adapters/index.d.ts +51 -0
  154. package/out/adapters/index.d.ts.map +1 -0
  155. package/out/adapters/index.js +95 -0
  156. package/out/adapters/index.js.map +1 -0
  157. package/out/adapters/openaddresses/adapter.d.ts.map +1 -0
  158. package/out/adapters/openaddresses/adapter.js +186 -0
  159. package/out/adapters/openaddresses/adapter.js.map +1 -0
  160. package/out/adapters/overture/adapter.d.ts +48 -0
  161. package/out/adapters/overture/adapter.d.ts.map +1 -0
  162. package/out/adapters/overture/adapter.js +125 -0
  163. package/out/adapters/overture/adapter.js.map +1 -0
  164. package/out/adapters/state-hi-schools/adapter.d.ts +46 -0
  165. package/out/adapters/state-hi-schools/adapter.d.ts.map +1 -0
  166. package/out/adapters/state-hi-schools/adapter.js +145 -0
  167. package/out/adapters/state-hi-schools/adapter.js.map +1 -0
  168. package/out/adapters/state-hi-schools/workbook.d.ts +29 -0
  169. package/out/adapters/state-hi-schools/workbook.d.ts.map +1 -0
  170. package/out/adapters/state-hi-schools/workbook.js +20 -0
  171. package/out/adapters/state-hi-schools/workbook.js.map +1 -0
  172. package/out/adapters/state-ia-contractors/adapter.d.ts.map +1 -0
  173. package/out/adapters/state-ia-contractors/adapter.js.map +1 -0
  174. package/out/adapters/state-ny-notaries/adapter.d.ts.map +1 -0
  175. package/out/adapters/state-ny-notaries/adapter.js.map +1 -0
  176. package/out/adapters/state-tx-notaries/adapter.d.ts.map +1 -0
  177. package/out/adapters/state-tx-notaries/adapter.js.map +1 -0
  178. package/out/adapters/synth-po-box/adapter.d.ts.map +1 -0
  179. package/out/adapters/synth-po-box/adapter.js +140 -0
  180. package/out/adapters/synth-po-box/adapter.js.map +1 -0
  181. package/out/adapters/tiger/adapter.d.ts +55 -0
  182. package/out/adapters/tiger/adapter.d.ts.map +1 -0
  183. package/out/adapters/tiger/adapter.js +201 -0
  184. package/out/adapters/tiger/adapter.js.map +1 -0
  185. package/out/adapters/tiger/street-decompose.d.ts.map +1 -0
  186. package/out/adapters/tiger/street-decompose.js +68 -0
  187. package/out/adapters/tiger/street-decompose.js.map +1 -0
  188. package/out/adapters/usgov-hrsa-fqhc/adapter.d.ts +56 -0
  189. package/out/adapters/usgov-hrsa-fqhc/adapter.d.ts.map +1 -0
  190. package/out/adapters/usgov-hrsa-fqhc/adapter.js +132 -0
  191. package/out/adapters/usgov-hrsa-fqhc/adapter.js.map +1 -0
  192. package/out/adapters/usgov-imls-pls/adapter.d.ts +36 -0
  193. package/out/adapters/usgov-imls-pls/adapter.d.ts.map +1 -0
  194. package/out/adapters/usgov-imls-pls/adapter.js +114 -0
  195. package/out/adapters/usgov-imls-pls/adapter.js.map +1 -0
  196. package/out/adapters/usgov-irs-bmf/adapter.d.ts +37 -0
  197. package/out/adapters/usgov-irs-bmf/adapter.d.ts.map +1 -0
  198. package/out/adapters/usgov-irs-bmf/adapter.js +120 -0
  199. package/out/adapters/usgov-irs-bmf/adapter.js.map +1 -0
  200. package/out/adapters/usgov-nad/adapter.d.ts +48 -0
  201. package/out/adapters/usgov-nad/adapter.d.ts.map +1 -0
  202. package/out/adapters/usgov-nad/adapter.js +249 -0
  203. package/out/adapters/usgov-nad/adapter.js.map +1 -0
  204. package/out/adapters/usgov-nppes/adapter.d.ts.map +1 -0
  205. package/out/adapters/usgov-nppes/adapter.js +118 -0
  206. package/out/adapters/usgov-nppes/adapter.js.map +1 -0
  207. package/out/adapters/usgov-samhsa-treatment-locator/adapter.d.ts.map +1 -0
  208. package/out/adapters/usgov-samhsa-treatment-locator/adapter.js +154 -0
  209. package/out/adapters/usgov-samhsa-treatment-locator/adapter.js.map +1 -0
  210. package/out/adapters/utils/index.d.ts +191 -0
  211. package/out/adapters/utils/index.d.ts.map +1 -0
  212. package/out/adapters/utils/index.js +206 -0
  213. package/out/adapters/utils/index.js.map +1 -0
  214. package/out/adapters/wof-admin-jp/adapter.d.ts.map +1 -0
  215. package/out/adapters/wof-admin-jp/adapter.js +161 -0
  216. package/out/adapters/wof-admin-jp/adapter.js.map +1 -0
  217. package/out/adapters/wof-admin-json/adapter.d.ts +79 -0
  218. package/out/adapters/wof-admin-json/adapter.d.ts.map +1 -0
  219. package/out/adapters/wof-admin-json/adapter.js +197 -0
  220. package/out/adapters/wof-admin-json/adapter.js.map +1 -0
  221. package/out/adapters/wof-json-rows.d.ts +62 -0
  222. package/out/adapters/wof-json-rows.d.ts.map +1 -0
  223. package/out/adapters/wof-json-rows.js +83 -0
  224. package/out/adapters/wof-json-rows.js.map +1 -0
  225. package/out/adapters/wof-postalcode-json/adapter.d.ts +65 -0
  226. package/out/adapters/wof-postalcode-json/adapter.d.ts.map +1 -0
  227. package/out/adapters/wof-postalcode-json/adapter.js +151 -0
  228. package/out/adapters/wof-postalcode-json/adapter.js.map +1 -0
  229. package/out/build.d.ts +132 -0
  230. package/out/build.d.ts.map +1 -0
  231. package/out/build.js +245 -0
  232. package/out/build.js.map +1 -0
  233. package/out/codex/us-fips-state.d.ts.map +1 -0
  234. package/out/codex/us-fips-state.js.map +1 -0
  235. package/out/env.d.ts +46 -0
  236. package/out/env.d.ts.map +1 -0
  237. package/out/env.js +46 -0
  238. package/out/env.js.map +1 -0
  239. package/out/index.d.ts +13 -0
  240. package/out/index.d.ts.map +1 -0
  241. package/out/index.js +13 -0
  242. package/out/index.js.map +1 -0
  243. package/out/recipes/anchor-absorption.d.ts +20 -0
  244. package/out/recipes/anchor-absorption.d.ts.map +1 -0
  245. package/out/recipes/anchor-absorption.js +82 -0
  246. package/out/recipes/anchor-absorption.js.map +1 -0
  247. package/out/recipes/bare-country.d.ts +25 -0
  248. package/out/recipes/bare-country.d.ts.map +1 -0
  249. package/out/recipes/bare-country.js +88 -0
  250. package/out/recipes/bare-country.js.map +1 -0
  251. package/out/recipes/boundary-stress.d.ts +20 -0
  252. package/out/recipes/boundary-stress.d.ts.map +1 -0
  253. package/out/recipes/boundary-stress.js +84 -0
  254. package/out/recipes/boundary-stress.js.map +1 -0
  255. package/out/recipes/cn-organizational-units.d.ts +36 -0
  256. package/out/recipes/cn-organizational-units.d.ts.map +1 -0
  257. package/out/recipes/cn-organizational-units.js +159 -0
  258. package/out/recipes/cn-organizational-units.js.map +1 -0
  259. package/out/recipes/country-balanced.d.ts +32 -0
  260. package/out/recipes/country-balanced.d.ts.map +1 -0
  261. package/out/recipes/country-balanced.js +394 -0
  262. package/out/recipes/country-balanced.js.map +1 -0
  263. package/out/recipes/cz-pcfirst-preposition.d.ts +22 -0
  264. package/out/recipes/cz-pcfirst-preposition.d.ts.map +1 -0
  265. package/out/recipes/cz-pcfirst-preposition.js +101 -0
  266. package/out/recipes/cz-pcfirst-preposition.js.map +1 -0
  267. package/out/recipes/fr-admin-split.d.ts +38 -0
  268. package/out/recipes/fr-admin-split.d.ts.map +1 -0
  269. package/out/recipes/fr-admin-split.js +192 -0
  270. package/out/recipes/fr-admin-split.js.map +1 -0
  271. package/out/recipes/fr-bare-street.d.ts +28 -0
  272. package/out/recipes/fr-bare-street.d.ts.map +1 -0
  273. package/out/recipes/fr-bare-street.js +144 -0
  274. package/out/recipes/fr-bare-street.js.map +1 -0
  275. package/out/recipes/fr-fragment.d.ts +77 -0
  276. package/out/recipes/fr-fragment.d.ts.map +1 -0
  277. package/out/recipes/fr-fragment.js +277 -0
  278. package/out/recipes/fr-fragment.js.map +1 -0
  279. package/out/recipes/fr-lieudit.d.ts +32 -0
  280. package/out/recipes/fr-lieudit.d.ts.map +1 -0
  281. package/out/recipes/fr-lieudit.js +227 -0
  282. package/out/recipes/fr-lieudit.js.map +1 -0
  283. package/out/recipes/fr-order.d.ts +38 -0
  284. package/out/recipes/fr-order.d.ts.map +1 -0
  285. package/out/recipes/fr-order.js +198 -0
  286. package/out/recipes/fr-order.js.map +1 -0
  287. package/out/recipes/german.d.ts +44 -0
  288. package/out/recipes/german.d.ts.map +1 -0
  289. package/out/recipes/german.js +289 -0
  290. package/out/recipes/german.js.map +1 -0
  291. package/out/recipes/house-venue.d.ts +18 -0
  292. package/out/recipes/house-venue.d.ts.map +1 -0
  293. package/out/recipes/house-venue.js +74 -0
  294. package/out/recipes/house-venue.js.map +1 -0
  295. package/out/recipes/index.d.ts +24 -0
  296. package/out/recipes/index.d.ts.map +1 -0
  297. package/out/recipes/index.js +91 -0
  298. package/out/recipes/index.js.map +1 -0
  299. package/out/recipes/intersection.d.ts +42 -0
  300. package/out/recipes/intersection.d.ts.map +1 -0
  301. package/out/recipes/intersection.js +453 -0
  302. package/out/recipes/intersection.js.map +1 -0
  303. package/out/recipes/locale.d.ts +136 -0
  304. package/out/recipes/locale.d.ts.map +1 -0
  305. package/out/recipes/locale.js +460 -0
  306. package/out/recipes/locale.js.map +1 -0
  307. package/out/recipes/nl-postcode.d.ts +26 -0
  308. package/out/recipes/nl-postcode.d.ts.map +1 -0
  309. package/out/recipes/nl-postcode.js +103 -0
  310. package/out/recipes/nl-postcode.js.map +1 -0
  311. package/out/recipes/no-fragment.d.ts +43 -0
  312. package/out/recipes/no-fragment.d.ts.map +1 -0
  313. package/out/recipes/no-fragment.js +183 -0
  314. package/out/recipes/no-fragment.js.map +1 -0
  315. package/out/recipes/no-street-led.d.ts +24 -0
  316. package/out/recipes/no-street-led.d.ts.map +1 -0
  317. package/out/recipes/no-street-led.js +114 -0
  318. package/out/recipes/no-street-led.js.map +1 -0
  319. package/out/recipes/no-street.d.ts +18 -0
  320. package/out/recipes/no-street.d.ts.map +1 -0
  321. package/out/recipes/no-street.js +72 -0
  322. package/out/recipes/no-street.js.map +1 -0
  323. package/out/recipes/po-box-cedex.d.ts +38 -0
  324. package/out/recipes/po-box-cedex.d.ts.map +1 -0
  325. package/out/recipes/po-box-cedex.js +768 -0
  326. package/out/recipes/po-box-cedex.js.map +1 -0
  327. package/out/recipes/po-box.d.ts +17 -0
  328. package/out/recipes/po-box.d.ts.map +1 -0
  329. package/out/recipes/po-box.js +101 -0
  330. package/out/recipes/po-box.js.map +1 -0
  331. package/out/recipes/reviewed-postcode-tail.d.ts +47 -0
  332. package/out/recipes/reviewed-postcode-tail.d.ts.map +1 -0
  333. package/out/recipes/reviewed-postcode-tail.js +125 -0
  334. package/out/recipes/reviewed-postcode-tail.js.map +1 -0
  335. package/out/recipes/scaffold.d.ts +323 -0
  336. package/out/recipes/scaffold.d.ts.map +1 -0
  337. package/out/recipes/scaffold.js +174 -0
  338. package/out/recipes/scaffold.js.map +1 -0
  339. package/out/recipes/si-bare-village.d.ts +32 -0
  340. package/out/recipes/si-bare-village.d.ts.map +1 -0
  341. package/out/recipes/si-bare-village.js +89 -0
  342. package/out/recipes/si-bare-village.js.map +1 -0
  343. package/out/recipes/street-affix.d.ts +89 -0
  344. package/out/recipes/street-affix.d.ts.map +1 -0
  345. package/out/recipes/street-affix.js +563 -0
  346. package/out/recipes/street-affix.js.map +1 -0
  347. package/out/recipes/street-bare.d.ts +25 -0
  348. package/out/recipes/street-bare.d.ts.map +1 -0
  349. package/out/recipes/street-bare.js +87 -0
  350. package/out/recipes/street-bare.js.map +1 -0
  351. package/out/recipes/street.d.ts +15 -0
  352. package/out/recipes/street.d.ts.map +1 -0
  353. package/out/recipes/street.js +70 -0
  354. package/out/recipes/street.js.map +1 -0
  355. package/out/recipes/sub-venue-sources.d.ts +229 -0
  356. package/out/recipes/sub-venue-sources.d.ts.map +1 -0
  357. package/out/recipes/sub-venue-sources.js +654 -0
  358. package/out/recipes/sub-venue-sources.js.map +1 -0
  359. package/out/recipes/sub-venue.d.ts +269 -0
  360. package/out/recipes/sub-venue.d.ts.map +1 -0
  361. package/out/recipes/sub-venue.js +726 -0
  362. package/out/recipes/sub-venue.js.map +1 -0
  363. package/out/recipes/trailing-region.d.ts +74 -0
  364. package/out/recipes/trailing-region.d.ts.map +1 -0
  365. package/out/recipes/trailing-region.js +158 -0
  366. package/out/recipes/trailing-region.js.map +1 -0
  367. package/out/recipes/unit.d.ts +29 -0
  368. package/out/recipes/unit.d.ts.map +1 -0
  369. package/out/recipes/unit.js +231 -0
  370. package/out/recipes/unit.js.map +1 -0
  371. package/out/runner.d.ts +130 -0
  372. package/out/runner.d.ts.map +1 -0
  373. package/out/runner.js +185 -0
  374. package/out/runner.js.map +1 -0
  375. package/out/synthesizers/anchor-absorption.d.ts +63 -0
  376. package/out/synthesizers/anchor-absorption.d.ts.map +1 -0
  377. package/out/synthesizers/anchor-absorption.js +221 -0
  378. package/out/synthesizers/anchor-absorption.js.map +1 -0
  379. package/out/synthesizers/boundary-stress.d.ts +78 -0
  380. package/out/synthesizers/boundary-stress.d.ts.map +1 -0
  381. package/out/synthesizers/boundary-stress.js +455 -0
  382. package/out/synthesizers/boundary-stress.js.map +1 -0
  383. package/out/synthesizers/german.d.ts +115 -0
  384. package/out/synthesizers/german.d.ts.map +1 -0
  385. package/out/synthesizers/german.js +149 -0
  386. package/out/synthesizers/german.js.map +1 -0
  387. package/out/synthesizers/house-venue.d.ts +56 -0
  388. package/out/synthesizers/house-venue.d.ts.map +1 -0
  389. package/out/synthesizers/house-venue.js +247 -0
  390. package/out/synthesizers/house-venue.js.map +1 -0
  391. package/out/synthesizers/intersection.d.ts +52 -0
  392. package/out/synthesizers/intersection.d.ts.map +1 -0
  393. package/out/synthesizers/intersection.js +175 -0
  394. package/out/synthesizers/intersection.js.map +1 -0
  395. package/out/synthesizers/no-street.d.ts +72 -0
  396. package/out/synthesizers/no-street.d.ts.map +1 -0
  397. package/out/synthesizers/no-street.js +262 -0
  398. package/out/synthesizers/no-street.js.map +1 -0
  399. package/out/synthesizers/po-box.d.ts +108 -0
  400. package/out/synthesizers/po-box.d.ts.map +1 -0
  401. package/out/synthesizers/po-box.js +250 -0
  402. package/out/synthesizers/po-box.js.map +1 -0
  403. package/out/synthesizers/street.d.ts +54 -0
  404. package/out/synthesizers/street.d.ts.map +1 -0
  405. package/out/synthesizers/street.js +218 -0
  406. package/out/synthesizers/street.js.map +1 -0
  407. package/out/synthesizers/utils.d.ts +241 -0
  408. package/out/synthesizers/utils.d.ts.map +1 -0
  409. package/out/synthesizers/utils.js +776 -0
  410. package/out/synthesizers/utils.js.map +1 -0
  411. package/out/test-kit/corpus-recipe.d.ts +59 -0
  412. package/out/test-kit/corpus-recipe.d.ts.map +1 -0
  413. package/out/test-kit/corpus-recipe.js +39 -0
  414. package/out/test-kit/corpus-recipe.js.map +1 -0
  415. package/out/test-kit/index.d.ts +48 -0
  416. package/out/test-kit/index.d.ts.map +1 -0
  417. package/out/test-kit/index.js +78 -0
  418. package/out/test-kit/index.js.map +1 -0
  419. package/out/tools/align-slice.d.ts +7 -0
  420. package/out/tools/align-slice.d.ts.map +1 -0
  421. package/out/tools/align-slice.js +55 -0
  422. package/out/tools/align-slice.js.map +1 -0
  423. package/out/tools/audit.d.ts +29 -0
  424. package/out/tools/audit.d.ts.map +1 -0
  425. package/out/tools/audit.js +282 -0
  426. package/out/tools/audit.js.map +1 -0
  427. package/out/tools/corpus-stats.d.ts +44 -0
  428. package/out/tools/corpus-stats.d.ts.map +1 -0
  429. package/out/tools/corpus-stats.js +102 -0
  430. package/out/tools/corpus-stats.js.map +1 -0
  431. package/out/tools/fetch/acra-sg.d.ts +23 -0
  432. package/out/tools/fetch/acra-sg.d.ts.map +1 -0
  433. package/out/tools/fetch/acra-sg.js +126 -0
  434. package/out/tools/fetch/acra-sg.js.map +1 -0
  435. package/out/tools/fetch/ban.d.ts +31 -0
  436. package/out/tools/fetch/ban.d.ts.map +1 -0
  437. package/out/tools/fetch/ban.js +239 -0
  438. package/out/tools/fetch/ban.js.map +1 -0
  439. package/out/tools/fetch/download.d.ts +182 -0
  440. package/out/tools/fetch/download.d.ts.map +1 -0
  441. package/out/tools/fetch/download.js +318 -0
  442. package/out/tools/fetch/download.js.map +1 -0
  443. package/out/tools/fetch/gcis-tw.d.ts +23 -0
  444. package/out/tools/fetch/gcis-tw.d.ts.map +1 -0
  445. package/out/tools/fetch/gcis-tw.js +135 -0
  446. package/out/tools/fetch/gcis-tw.js.map +1 -0
  447. package/out/tools/fetch/geonames-dump.d.ts +91 -0
  448. package/out/tools/fetch/geonames-dump.d.ts.map +1 -0
  449. package/out/tools/fetch/geonames-dump.js +171 -0
  450. package/out/tools/fetch/geonames-dump.js.map +1 -0
  451. package/out/tools/fetch/geonames-postal.d.ts +76 -0
  452. package/out/tools/fetch/geonames-postal.d.ts.map +1 -0
  453. package/out/tools/fetch/geonames-postal.js +126 -0
  454. package/out/tools/fetch/geonames-postal.js.map +1 -0
  455. package/out/tools/fetch/houjin-jp.d.ts +24 -0
  456. package/out/tools/fetch/houjin-jp.d.ts.map +1 -0
  457. package/out/tools/fetch/houjin-jp.js +102 -0
  458. package/out/tools/fetch/houjin-jp.js.map +1 -0
  459. package/out/tools/fetch/hrsa.d.ts +18 -0
  460. package/out/tools/fetch/hrsa.d.ts.map +1 -0
  461. package/out/tools/fetch/hrsa.js +46 -0
  462. package/out/tools/fetch/hrsa.js.map +1 -0
  463. package/out/tools/fetch/imls-pls.d.ts +25 -0
  464. package/out/tools/fetch/imls-pls.d.ts.map +1 -0
  465. package/out/tools/fetch/imls-pls.js +108 -0
  466. package/out/tools/fetch/imls-pls.js.map +1 -0
  467. package/out/tools/fetch/index.d.ts +171 -0
  468. package/out/tools/fetch/index.d.ts.map +1 -0
  469. package/out/tools/fetch/index.js +170 -0
  470. package/out/tools/fetch/index.js.map +1 -0
  471. package/out/tools/fetch/juso-kr.d.ts +30 -0
  472. package/out/tools/fetch/juso-kr.d.ts.map +1 -0
  473. package/out/tools/fetch/juso-kr.js +120 -0
  474. package/out/tools/fetch/juso-kr.js.map +1 -0
  475. package/out/tools/fetch/localdata-kr.d.ts +30 -0
  476. package/out/tools/fetch/localdata-kr.d.ts.map +1 -0
  477. package/out/tools/fetch/localdata-kr.js +139 -0
  478. package/out/tools/fetch/localdata-kr.js.map +1 -0
  479. package/out/tools/fetch/nad.d.ts +70 -0
  480. package/out/tools/fetch/nad.d.ts.map +1 -0
  481. package/out/tools/fetch/nad.js +234 -0
  482. package/out/tools/fetch/nad.js.map +1 -0
  483. package/out/tools/fetch/nppes.d.ts +26 -0
  484. package/out/tools/fetch/nppes.d.ts.map +1 -0
  485. package/out/tools/fetch/nppes.js +126 -0
  486. package/out/tools/fetch/nppes.js.map +1 -0
  487. package/out/tools/fetch/openaddresses.d.ts +9 -0
  488. package/out/tools/fetch/openaddresses.d.ts.map +1 -0
  489. package/out/tools/fetch/openaddresses.js +279 -0
  490. package/out/tools/fetch/openaddresses.js.map +1 -0
  491. package/out/tools/fetch/ourairports.d.ts +45 -0
  492. package/out/tools/fetch/ourairports.d.ts.map +1 -0
  493. package/out/tools/fetch/ourairports.js +128 -0
  494. package/out/tools/fetch/ourairports.js.map +1 -0
  495. package/out/tools/fetch/ppd.d.ts.map +1 -0
  496. package/out/tools/fetch/ppd.js +85 -0
  497. package/out/tools/fetch/ppd.js.map +1 -0
  498. package/out/tools/fetch/state-hi-schools.d.ts +26 -0
  499. package/out/tools/fetch/state-hi-schools.d.ts.map +1 -0
  500. package/out/tools/fetch/state-hi-schools.js +112 -0
  501. package/out/tools/fetch/state-hi-schools.js.map +1 -0
  502. package/out/tools/fetch/state-sources.d.ts +26 -0
  503. package/out/tools/fetch/state-sources.d.ts.map +1 -0
  504. package/out/tools/fetch/state-sources.js +111 -0
  505. package/out/tools/fetch/state-sources.js.map +1 -0
  506. package/out/tools/fetch/tiger-full.d.ts +22 -0
  507. package/out/tools/fetch/tiger-full.d.ts.map +1 -0
  508. package/out/tools/fetch/tiger-full.js +217 -0
  509. package/out/tools/fetch/tiger-full.js.map +1 -0
  510. package/out/tools/fetch/wikidata-subvenue.d.ts +171 -0
  511. package/out/tools/fetch/wikidata-subvenue.d.ts.map +1 -0
  512. package/out/tools/fetch/wikidata-subvenue.js +274 -0
  513. package/out/tools/fetch/wikidata-subvenue.js.map +1 -0
  514. package/out/tools/gb-title-case.d.ts.map +1 -0
  515. package/out/tools/gb-title-case.js.map +1 -0
  516. package/out/tools/golden-expand.d.ts +90 -0
  517. package/out/tools/golden-expand.d.ts.map +1 -0
  518. package/out/tools/golden-expand.js +406 -0
  519. package/out/tools/golden-expand.js.map +1 -0
  520. package/out/tools/golden-promote.d.ts.map +1 -0
  521. package/out/tools/golden-promote.js +240 -0
  522. package/out/tools/golden-promote.js.map +1 -0
  523. package/out/tools/golden-relabel-street.d.ts +196 -0
  524. package/out/tools/golden-relabel-street.d.ts.map +1 -0
  525. package/out/tools/golden-relabel-street.js +439 -0
  526. package/out/tools/golden-relabel-street.js.map +1 -0
  527. package/out/tools/index.d.ts +28 -0
  528. package/out/tools/index.d.ts.map +1 -0
  529. package/out/tools/index.js +28 -0
  530. package/out/tools/index.js.map +1 -0
  531. package/out/tools/ingest-csv.d.ts.map +1 -0
  532. package/out/tools/ingest-csv.js +265 -0
  533. package/out/tools/ingest-csv.js.map +1 -0
  534. package/out/tools/jsonl-to-parquet.d.ts +61 -0
  535. package/out/tools/jsonl-to-parquet.d.ts.map +1 -0
  536. package/out/tools/jsonl-to-parquet.js +150 -0
  537. package/out/tools/jsonl-to-parquet.js.map +1 -0
  538. package/out/tools/lint-slice-vocab.d.ts +90 -0
  539. package/out/tools/lint-slice-vocab.d.ts.map +1 -0
  540. package/out/tools/lint-slice-vocab.js +267 -0
  541. package/out/tools/lint-slice-vocab.js.map +1 -0
  542. package/out/tools/lint-slice.d.ts +93 -0
  543. package/out/tools/lint-slice.d.ts.map +1 -0
  544. package/out/tools/lint-slice.js +322 -0
  545. package/out/tools/lint-slice.js.map +1 -0
  546. package/out/tools/overlay-manifest.d.ts +39 -0
  547. package/out/tools/overlay-manifest.d.ts.map +1 -0
  548. package/out/tools/overlay-manifest.js +90 -0
  549. package/out/tools/overlay-manifest.js.map +1 -0
  550. package/out/tools/overture-subvenue.d.ts +112 -0
  551. package/out/tools/overture-subvenue.d.ts.map +1 -0
  552. package/out/tools/overture-subvenue.js +139 -0
  553. package/out/tools/overture-subvenue.js.map +1 -0
  554. package/out/tools/postcode-triples.d.ts +174 -0
  555. package/out/tools/postcode-triples.d.ts.map +1 -0
  556. package/out/tools/postcode-triples.js +292 -0
  557. package/out/tools/postcode-triples.js.map +1 -0
  558. package/out/tools/slice-kryptonite.d.ts +32 -0
  559. package/out/tools/slice-kryptonite.d.ts.map +1 -0
  560. package/out/tools/slice-kryptonite.js +99 -0
  561. package/out/tools/slice-kryptonite.js.map +1 -0
  562. package/out/tools/slice-translit.d.ts +51 -0
  563. package/out/tools/slice-translit.d.ts.map +1 -0
  564. package/out/tools/slice-translit.js +166 -0
  565. package/out/tools/slice-translit.js.map +1 -0
  566. package/out/tools/sub-venue/harvest.d.ts +100 -0
  567. package/out/tools/sub-venue/harvest.d.ts.map +1 -0
  568. package/out/tools/sub-venue/harvest.js +168 -0
  569. package/out/tools/sub-venue/harvest.js.map +1 -0
  570. package/out/tools/sub-venue/head-nouns.d.ts +50 -0
  571. package/out/tools/sub-venue/head-nouns.d.ts.map +1 -0
  572. package/out/tools/sub-venue/head-nouns.js +213 -0
  573. package/out/tools/sub-venue/head-nouns.js.map +1 -0
  574. package/out/tools/sub-venue/surfaces.d.ts +45 -0
  575. package/out/tools/sub-venue/surfaces.d.ts.map +1 -0
  576. package/out/tools/sub-venue/surfaces.js +77 -0
  577. package/out/tools/sub-venue/surfaces.js.map +1 -0
  578. package/out/tools/sub-venue/table.d.ts +229 -0
  579. package/out/tools/sub-venue/table.d.ts.map +1 -0
  580. package/out/tools/sub-venue/table.js +108 -0
  581. package/out/tools/sub-venue/table.js.map +1 -0
  582. package/out/tools/sub-venue/wikidata.d.ts +26 -0
  583. package/out/tools/sub-venue/wikidata.d.ts.map +1 -0
  584. package/out/tools/sub-venue/wikidata.js +62 -0
  585. package/out/tools/sub-venue/wikidata.js.map +1 -0
  586. package/out/tools/sub-venue-lexicon.d.ts +156 -0
  587. package/out/tools/sub-venue-lexicon.d.ts.map +1 -0
  588. package/out/tools/sub-venue-lexicon.js +283 -0
  589. package/out/tools/sub-venue-lexicon.js.map +1 -0
  590. package/out/tools/sub-venue-promotions.d.ts +94 -0
  591. package/out/tools/sub-venue-promotions.d.ts.map +1 -0
  592. package/out/tools/sub-venue-promotions.js +266 -0
  593. package/out/tools/sub-venue-promotions.js.map +1 -0
  594. package/out/types.d.ts +221 -0
  595. package/out/types.d.ts.map +1 -0
  596. package/out/types.js.map +1 -0
  597. package/out/utils/align.d.ts +93 -0
  598. package/out/utils/align.d.ts.map +1 -0
  599. package/out/utils/align.js +234 -0
  600. package/out/utils/align.js.map +1 -0
  601. package/out/utils/golden.d.ts +85 -0
  602. package/out/utils/golden.d.ts.map +1 -0
  603. package/out/utils/golden.js +127 -0
  604. package/out/utils/golden.js.map +1 -0
  605. package/out/utils/index.d.ts +14 -0
  606. package/out/utils/index.d.ts.map +1 -0
  607. package/out/utils/index.js +14 -0
  608. package/out/utils/index.js.map +1 -0
  609. package/out/utils/license.d.ts.map +1 -0
  610. package/out/utils/license.js.map +1 -0
  611. package/out/utils/parquet.d.ts +178 -0
  612. package/out/utils/parquet.d.ts.map +1 -0
  613. package/out/utils/parquet.js +371 -0
  614. package/out/utils/parquet.js.map +1 -0
  615. package/out/utils/slice-stats.d.ts +52 -0
  616. package/out/utils/slice-stats.d.ts.map +1 -0
  617. package/out/utils/slice-stats.js +58 -0
  618. package/out/utils/slice-stats.js.map +1 -0
  619. package/out/utils/split.d.ts +128 -0
  620. package/out/utils/split.d.ts.map +1 -0
  621. package/out/utils/split.js +204 -0
  622. package/out/utils/split.js.map +1 -0
  623. package/out/utils/tokenize.d.ts +64 -0
  624. package/out/utils/tokenize.d.ts.map +1 -0
  625. package/out/utils/tokenize.js +82 -0
  626. package/out/utils/tokenize.js.map +1 -0
  627. package/out/utils/wof-json.d.ts +113 -0
  628. package/out/utils/wof-json.d.ts.map +1 -0
  629. package/out/utils/wof-json.js +173 -0
  630. package/out/utils/wof-json.js.map +1 -0
  631. package/package.json +259 -194
  632. package/out/src/adapters/ban/adapter.d.ts.map +0 -1
  633. package/out/src/adapters/ban/adapter.js +0 -149
  634. package/out/src/adapters/ban/adapter.js.map +0 -1
  635. package/out/src/adapters/ban/street-decompose.d.ts.map +0 -1
  636. package/out/src/adapters/ban/street-decompose.js +0 -75
  637. package/out/src/adapters/ban/street-decompose.js.map +0 -1
  638. package/out/src/adapters/fcc-bdc/adapter.d.ts.map +0 -1
  639. package/out/src/adapters/fcc-bdc/adapter.js +0 -144
  640. package/out/src/adapters/fcc-bdc/adapter.js.map +0 -1
  641. package/out/src/adapters/geonames/adapter.d.ts.map +0 -1
  642. package/out/src/adapters/geonames/adapter.js +0 -176
  643. package/out/src/adapters/geonames/adapter.js.map +0 -1
  644. package/out/src/adapters/geonames-postal/adapter.d.ts +0 -41
  645. package/out/src/adapters/geonames-postal/adapter.d.ts.map +0 -1
  646. package/out/src/adapters/geonames-postal/adapter.js +0 -104
  647. package/out/src/adapters/geonames-postal/adapter.js.map +0 -1
  648. package/out/src/adapters/gnaf/adapter.d.ts +0 -49
  649. package/out/src/adapters/gnaf/adapter.d.ts.map +0 -1
  650. package/out/src/adapters/gnaf/adapter.js +0 -124
  651. package/out/src/adapters/gnaf/adapter.js.map +0 -1
  652. package/out/src/adapters/gnaf/assemble.d.ts +0 -65
  653. package/out/src/adapters/gnaf/assemble.d.ts.map +0 -1
  654. package/out/src/adapters/gnaf/assemble.js +0 -154
  655. package/out/src/adapters/gnaf/assemble.js.map +0 -1
  656. package/out/src/adapters/index.d.ts +0 -51
  657. package/out/src/adapters/index.d.ts.map +0 -1
  658. package/out/src/adapters/index.js +0 -95
  659. package/out/src/adapters/index.js.map +0 -1
  660. package/out/src/adapters/openaddresses/adapter.d.ts.map +0 -1
  661. package/out/src/adapters/openaddresses/adapter.js +0 -186
  662. package/out/src/adapters/openaddresses/adapter.js.map +0 -1
  663. package/out/src/adapters/overture/adapter.d.ts +0 -48
  664. package/out/src/adapters/overture/adapter.d.ts.map +0 -1
  665. package/out/src/adapters/overture/adapter.js +0 -125
  666. package/out/src/adapters/overture/adapter.js.map +0 -1
  667. package/out/src/adapters/state-hi-schools/adapter.d.ts +0 -47
  668. package/out/src/adapters/state-hi-schools/adapter.d.ts.map +0 -1
  669. package/out/src/adapters/state-hi-schools/adapter.js +0 -133
  670. package/out/src/adapters/state-hi-schools/adapter.js.map +0 -1
  671. package/out/src/adapters/state-ia-contractors/adapter.d.ts.map +0 -1
  672. package/out/src/adapters/state-ia-contractors/adapter.js.map +0 -1
  673. package/out/src/adapters/state-ny-notaries/adapter.d.ts.map +0 -1
  674. package/out/src/adapters/state-ny-notaries/adapter.js.map +0 -1
  675. package/out/src/adapters/state-tx-notaries/adapter.d.ts.map +0 -1
  676. package/out/src/adapters/state-tx-notaries/adapter.js.map +0 -1
  677. package/out/src/adapters/synth-po-box/adapter.d.ts.map +0 -1
  678. package/out/src/adapters/synth-po-box/adapter.js +0 -140
  679. package/out/src/adapters/synth-po-box/adapter.js.map +0 -1
  680. package/out/src/adapters/tiger/adapter.d.ts +0 -55
  681. package/out/src/adapters/tiger/adapter.d.ts.map +0 -1
  682. package/out/src/adapters/tiger/adapter.js +0 -201
  683. package/out/src/adapters/tiger/adapter.js.map +0 -1
  684. package/out/src/adapters/tiger/street-decompose.d.ts.map +0 -1
  685. package/out/src/adapters/tiger/street-decompose.js +0 -90
  686. package/out/src/adapters/tiger/street-decompose.js.map +0 -1
  687. package/out/src/adapters/usgov-hrsa-fqhc/adapter.d.ts +0 -47
  688. package/out/src/adapters/usgov-hrsa-fqhc/adapter.d.ts.map +0 -1
  689. package/out/src/adapters/usgov-hrsa-fqhc/adapter.js +0 -139
  690. package/out/src/adapters/usgov-hrsa-fqhc/adapter.js.map +0 -1
  691. package/out/src/adapters/usgov-imls-pls/adapter.d.ts +0 -36
  692. package/out/src/adapters/usgov-imls-pls/adapter.d.ts.map +0 -1
  693. package/out/src/adapters/usgov-imls-pls/adapter.js +0 -114
  694. package/out/src/adapters/usgov-imls-pls/adapter.js.map +0 -1
  695. package/out/src/adapters/usgov-irs-bmf/adapter.d.ts +0 -37
  696. package/out/src/adapters/usgov-irs-bmf/adapter.d.ts.map +0 -1
  697. package/out/src/adapters/usgov-irs-bmf/adapter.js +0 -124
  698. package/out/src/adapters/usgov-irs-bmf/adapter.js.map +0 -1
  699. package/out/src/adapters/usgov-nad/adapter.d.ts +0 -48
  700. package/out/src/adapters/usgov-nad/adapter.d.ts.map +0 -1
  701. package/out/src/adapters/usgov-nad/adapter.js +0 -252
  702. package/out/src/adapters/usgov-nad/adapter.js.map +0 -1
  703. package/out/src/adapters/usgov-nppes/adapter.d.ts.map +0 -1
  704. package/out/src/adapters/usgov-nppes/adapter.js +0 -116
  705. package/out/src/adapters/usgov-nppes/adapter.js.map +0 -1
  706. package/out/src/adapters/usgov-samhsa-treatment-locator/adapter.d.ts.map +0 -1
  707. package/out/src/adapters/usgov-samhsa-treatment-locator/adapter.js +0 -156
  708. package/out/src/adapters/usgov-samhsa-treatment-locator/adapter.js.map +0 -1
  709. package/out/src/adapters/utils/index.d.ts +0 -150
  710. package/out/src/adapters/utils/index.d.ts.map +0 -1
  711. package/out/src/adapters/utils/index.js +0 -159
  712. package/out/src/adapters/utils/index.js.map +0 -1
  713. package/out/src/adapters/wof-admin-jp/adapter.d.ts.map +0 -1
  714. package/out/src/adapters/wof-admin-jp/adapter.js +0 -164
  715. package/out/src/adapters/wof-admin-jp/adapter.js.map +0 -1
  716. package/out/src/adapters/wof-admin-json/adapter.d.ts +0 -82
  717. package/out/src/adapters/wof-admin-json/adapter.d.ts.map +0 -1
  718. package/out/src/adapters/wof-admin-json/adapter.js +0 -224
  719. package/out/src/adapters/wof-admin-json/adapter.js.map +0 -1
  720. package/out/src/adapters/wof-json-rows.d.ts +0 -32
  721. package/out/src/adapters/wof-json-rows.d.ts.map +0 -1
  722. package/out/src/adapters/wof-json-rows.js +0 -45
  723. package/out/src/adapters/wof-json-rows.js.map +0 -1
  724. package/out/src/adapters/wof-postalcode-json/adapter.d.ts +0 -65
  725. package/out/src/adapters/wof-postalcode-json/adapter.d.ts.map +0 -1
  726. package/out/src/adapters/wof-postalcode-json/adapter.js +0 -160
  727. package/out/src/adapters/wof-postalcode-json/adapter.js.map +0 -1
  728. package/out/src/build.d.ts +0 -132
  729. package/out/src/build.d.ts.map +0 -1
  730. package/out/src/build.js +0 -251
  731. package/out/src/build.js.map +0 -1
  732. package/out/src/codex/us-fips-state.d.ts.map +0 -1
  733. package/out/src/codex/us-fips-state.js.map +0 -1
  734. package/out/src/index.d.ts +0 -14
  735. package/out/src/index.d.ts.map +0 -1
  736. package/out/src/index.js +0 -14
  737. package/out/src/index.js.map +0 -1
  738. package/out/src/name-prone-us-suffixes.d.ts +0 -12
  739. package/out/src/name-prone-us-suffixes.d.ts.map +0 -1
  740. package/out/src/name-prone-us-suffixes.js +0 -12
  741. package/out/src/name-prone-us-suffixes.js.map +0 -1
  742. package/out/src/parquet-wrapper/index.d.ts +0 -9
  743. package/out/src/parquet-wrapper/index.d.ts.map +0 -1
  744. package/out/src/parquet-wrapper/index.js +0 -9
  745. package/out/src/parquet-wrapper/index.js.map +0 -1
  746. package/out/src/parquet-wrapper/reader.d.ts +0 -34
  747. package/out/src/parquet-wrapper/reader.d.ts.map +0 -1
  748. package/out/src/parquet-wrapper/reader.js +0 -69
  749. package/out/src/parquet-wrapper/reader.js.map +0 -1
  750. package/out/src/parquet-wrapper/schema.d.ts +0 -49
  751. package/out/src/parquet-wrapper/schema.d.ts.map +0 -1
  752. package/out/src/parquet-wrapper/schema.js +0 -55
  753. package/out/src/parquet-wrapper/schema.js.map +0 -1
  754. package/out/src/parquet-wrapper/writer.d.ts +0 -46
  755. package/out/src/parquet-wrapper/writer.d.ts.map +0 -1
  756. package/out/src/parquet-wrapper/writer.js +0 -76
  757. package/out/src/parquet-wrapper/writer.js.map +0 -1
  758. package/out/src/runner.d.ts +0 -126
  759. package/out/src/runner.d.ts.map +0 -1
  760. package/out/src/runner.js +0 -189
  761. package/out/src/runner.js.map +0 -1
  762. package/out/src/shard-recipes/anchor-absorption.d.ts +0 -20
  763. package/out/src/shard-recipes/anchor-absorption.d.ts.map +0 -1
  764. package/out/src/shard-recipes/anchor-absorption.js +0 -82
  765. package/out/src/shard-recipes/anchor-absorption.js.map +0 -1
  766. package/out/src/shard-recipes/bare-country.d.ts +0 -25
  767. package/out/src/shard-recipes/bare-country.d.ts.map +0 -1
  768. package/out/src/shard-recipes/bare-country.js +0 -87
  769. package/out/src/shard-recipes/bare-country.js.map +0 -1
  770. package/out/src/shard-recipes/boundary-stress.d.ts +0 -20
  771. package/out/src/shard-recipes/boundary-stress.d.ts.map +0 -1
  772. package/out/src/shard-recipes/boundary-stress.js +0 -83
  773. package/out/src/shard-recipes/boundary-stress.js.map +0 -1
  774. package/out/src/shard-recipes/country-balanced.d.ts +0 -32
  775. package/out/src/shard-recipes/country-balanced.d.ts.map +0 -1
  776. package/out/src/shard-recipes/country-balanced.js +0 -406
  777. package/out/src/shard-recipes/country-balanced.js.map +0 -1
  778. package/out/src/shard-recipes/cz-pcfirst-preposition.d.ts +0 -22
  779. package/out/src/shard-recipes/cz-pcfirst-preposition.d.ts.map +0 -1
  780. package/out/src/shard-recipes/cz-pcfirst-preposition.js +0 -100
  781. package/out/src/shard-recipes/cz-pcfirst-preposition.js.map +0 -1
  782. package/out/src/shard-recipes/fr-admin-split.d.ts +0 -38
  783. package/out/src/shard-recipes/fr-admin-split.d.ts.map +0 -1
  784. package/out/src/shard-recipes/fr-admin-split.js +0 -188
  785. package/out/src/shard-recipes/fr-admin-split.js.map +0 -1
  786. package/out/src/shard-recipes/fr-bare-street.d.ts +0 -28
  787. package/out/src/shard-recipes/fr-bare-street.d.ts.map +0 -1
  788. package/out/src/shard-recipes/fr-bare-street.js +0 -143
  789. package/out/src/shard-recipes/fr-bare-street.js.map +0 -1
  790. package/out/src/shard-recipes/fr-fragment.d.ts +0 -77
  791. package/out/src/shard-recipes/fr-fragment.d.ts.map +0 -1
  792. package/out/src/shard-recipes/fr-fragment.js +0 -276
  793. package/out/src/shard-recipes/fr-fragment.js.map +0 -1
  794. package/out/src/shard-recipes/fr-lieudit.d.ts +0 -32
  795. package/out/src/shard-recipes/fr-lieudit.d.ts.map +0 -1
  796. package/out/src/shard-recipes/fr-lieudit.js +0 -226
  797. package/out/src/shard-recipes/fr-lieudit.js.map +0 -1
  798. package/out/src/shard-recipes/fr-order.d.ts +0 -38
  799. package/out/src/shard-recipes/fr-order.d.ts.map +0 -1
  800. package/out/src/shard-recipes/fr-order.js +0 -208
  801. package/out/src/shard-recipes/fr-order.js.map +0 -1
  802. package/out/src/shard-recipes/german.d.ts +0 -23
  803. package/out/src/shard-recipes/german.d.ts.map +0 -1
  804. package/out/src/shard-recipes/german.js +0 -132
  805. package/out/src/shard-recipes/german.js.map +0 -1
  806. package/out/src/shard-recipes/house-venue.d.ts +0 -18
  807. package/out/src/shard-recipes/house-venue.d.ts.map +0 -1
  808. package/out/src/shard-recipes/house-venue.js +0 -74
  809. package/out/src/shard-recipes/house-venue.js.map +0 -1
  810. package/out/src/shard-recipes/index.d.ts +0 -24
  811. package/out/src/shard-recipes/index.d.ts.map +0 -1
  812. package/out/src/shard-recipes/index.js +0 -89
  813. package/out/src/shard-recipes/index.js.map +0 -1
  814. package/out/src/shard-recipes/intersection.d.ts +0 -42
  815. package/out/src/shard-recipes/intersection.d.ts.map +0 -1
  816. package/out/src/shard-recipes/intersection.js +0 -460
  817. package/out/src/shard-recipes/intersection.js.map +0 -1
  818. package/out/src/shard-recipes/locale.d.ts +0 -135
  819. package/out/src/shard-recipes/locale.d.ts.map +0 -1
  820. package/out/src/shard-recipes/locale.js +0 -459
  821. package/out/src/shard-recipes/locale.js.map +0 -1
  822. package/out/src/shard-recipes/nl-postcode.d.ts +0 -26
  823. package/out/src/shard-recipes/nl-postcode.d.ts.map +0 -1
  824. package/out/src/shard-recipes/nl-postcode.js +0 -102
  825. package/out/src/shard-recipes/nl-postcode.js.map +0 -1
  826. package/out/src/shard-recipes/no-fragment.d.ts +0 -43
  827. package/out/src/shard-recipes/no-fragment.d.ts.map +0 -1
  828. package/out/src/shard-recipes/no-fragment.js +0 -188
  829. package/out/src/shard-recipes/no-fragment.js.map +0 -1
  830. package/out/src/shard-recipes/no-street-led.d.ts +0 -24
  831. package/out/src/shard-recipes/no-street-led.d.ts.map +0 -1
  832. package/out/src/shard-recipes/no-street-led.js +0 -121
  833. package/out/src/shard-recipes/no-street-led.js.map +0 -1
  834. package/out/src/shard-recipes/no-street.d.ts +0 -18
  835. package/out/src/shard-recipes/no-street.d.ts.map +0 -1
  836. package/out/src/shard-recipes/no-street.js +0 -72
  837. package/out/src/shard-recipes/no-street.js.map +0 -1
  838. package/out/src/shard-recipes/po-box-cedex.d.ts +0 -38
  839. package/out/src/shard-recipes/po-box-cedex.d.ts.map +0 -1
  840. package/out/src/shard-recipes/po-box-cedex.js +0 -726
  841. package/out/src/shard-recipes/po-box-cedex.js.map +0 -1
  842. package/out/src/shard-recipes/po-box.d.ts +0 -17
  843. package/out/src/shard-recipes/po-box.d.ts.map +0 -1
  844. package/out/src/shard-recipes/po-box.js +0 -101
  845. package/out/src/shard-recipes/po-box.js.map +0 -1
  846. package/out/src/shard-recipes/reviewed-postcode-tail.d.ts +0 -47
  847. package/out/src/shard-recipes/reviewed-postcode-tail.d.ts.map +0 -1
  848. package/out/src/shard-recipes/reviewed-postcode-tail.js +0 -125
  849. package/out/src/shard-recipes/reviewed-postcode-tail.js.map +0 -1
  850. package/out/src/shard-recipes/scaffold.d.ts +0 -246
  851. package/out/src/shard-recipes/scaffold.d.ts.map +0 -1
  852. package/out/src/shard-recipes/scaffold.js +0 -137
  853. package/out/src/shard-recipes/scaffold.js.map +0 -1
  854. package/out/src/shard-recipes/si-bare-village.d.ts +0 -32
  855. package/out/src/shard-recipes/si-bare-village.d.ts.map +0 -1
  856. package/out/src/shard-recipes/si-bare-village.js +0 -88
  857. package/out/src/shard-recipes/si-bare-village.js.map +0 -1
  858. package/out/src/shard-recipes/street-affix.d.ts +0 -89
  859. package/out/src/shard-recipes/street-affix.d.ts.map +0 -1
  860. package/out/src/shard-recipes/street-affix.js +0 -578
  861. package/out/src/shard-recipes/street-affix.js.map +0 -1
  862. package/out/src/shard-recipes/street-bare.d.ts +0 -25
  863. package/out/src/shard-recipes/street-bare.d.ts.map +0 -1
  864. package/out/src/shard-recipes/street-bare.js +0 -86
  865. package/out/src/shard-recipes/street-bare.js.map +0 -1
  866. package/out/src/shard-recipes/street.d.ts +0 -15
  867. package/out/src/shard-recipes/street.d.ts.map +0 -1
  868. package/out/src/shard-recipes/street.js +0 -69
  869. package/out/src/shard-recipes/street.js.map +0 -1
  870. package/out/src/shard-recipes/sub-venue-sources.d.ts +0 -228
  871. package/out/src/shard-recipes/sub-venue-sources.d.ts.map +0 -1
  872. package/out/src/shard-recipes/sub-venue-sources.js +0 -664
  873. package/out/src/shard-recipes/sub-venue-sources.js.map +0 -1
  874. package/out/src/shard-recipes/sub-venue.d.ts +0 -269
  875. package/out/src/shard-recipes/sub-venue.d.ts.map +0 -1
  876. package/out/src/shard-recipes/sub-venue.js +0 -710
  877. package/out/src/shard-recipes/sub-venue.js.map +0 -1
  878. package/out/src/shard-recipes/trailing-region.d.ts +0 -74
  879. package/out/src/shard-recipes/trailing-region.d.ts.map +0 -1
  880. package/out/src/shard-recipes/trailing-region.js +0 -157
  881. package/out/src/shard-recipes/trailing-region.js.map +0 -1
  882. package/out/src/shard-recipes/unit.d.ts +0 -29
  883. package/out/src/shard-recipes/unit.d.ts.map +0 -1
  884. package/out/src/shard-recipes/unit.js +0 -243
  885. package/out/src/shard-recipes/unit.js.map +0 -1
  886. package/out/src/synthesizers/anchor-absorption.d.ts +0 -63
  887. package/out/src/synthesizers/anchor-absorption.d.ts.map +0 -1
  888. package/out/src/synthesizers/anchor-absorption.js +0 -223
  889. package/out/src/synthesizers/anchor-absorption.js.map +0 -1
  890. package/out/src/synthesizers/boundary-stress.d.ts +0 -78
  891. package/out/src/synthesizers/boundary-stress.d.ts.map +0 -1
  892. package/out/src/synthesizers/boundary-stress.js +0 -455
  893. package/out/src/synthesizers/boundary-stress.js.map +0 -1
  894. package/out/src/synthesizers/german.d.ts +0 -107
  895. package/out/src/synthesizers/german.d.ts.map +0 -1
  896. package/out/src/synthesizers/german.js +0 -148
  897. package/out/src/synthesizers/german.js.map +0 -1
  898. package/out/src/synthesizers/house-venue.d.ts +0 -56
  899. package/out/src/synthesizers/house-venue.d.ts.map +0 -1
  900. package/out/src/synthesizers/house-venue.js +0 -267
  901. package/out/src/synthesizers/house-venue.js.map +0 -1
  902. package/out/src/synthesizers/intersection.d.ts +0 -52
  903. package/out/src/synthesizers/intersection.d.ts.map +0 -1
  904. package/out/src/synthesizers/intersection.js +0 -175
  905. package/out/src/synthesizers/intersection.js.map +0 -1
  906. package/out/src/synthesizers/no-street.d.ts +0 -72
  907. package/out/src/synthesizers/no-street.d.ts.map +0 -1
  908. package/out/src/synthesizers/no-street.js +0 -282
  909. package/out/src/synthesizers/no-street.js.map +0 -1
  910. package/out/src/synthesizers/po-box.d.ts +0 -104
  911. package/out/src/synthesizers/po-box.d.ts.map +0 -1
  912. package/out/src/synthesizers/po-box.js +0 -266
  913. package/out/src/synthesizers/po-box.js.map +0 -1
  914. package/out/src/synthesizers/street.d.ts +0 -54
  915. package/out/src/synthesizers/street.d.ts.map +0 -1
  916. package/out/src/synthesizers/street.js +0 -221
  917. package/out/src/synthesizers/street.js.map +0 -1
  918. package/out/src/synthesizers/utils.d.ts +0 -203
  919. package/out/src/synthesizers/utils.d.ts.map +0 -1
  920. package/out/src/synthesizers/utils.js +0 -708
  921. package/out/src/synthesizers/utils.js.map +0 -1
  922. package/out/src/tools/align-shard.d.ts +0 -8
  923. package/out/src/tools/align-shard.d.ts.map +0 -1
  924. package/out/src/tools/align-shard.js +0 -56
  925. package/out/src/tools/align-shard.js.map +0 -1
  926. package/out/src/tools/audit.d.ts +0 -28
  927. package/out/src/tools/audit.d.ts.map +0 -1
  928. package/out/src/tools/audit.js +0 -285
  929. package/out/src/tools/audit.js.map +0 -1
  930. package/out/src/tools/corpus-stats.d.ts +0 -44
  931. package/out/src/tools/corpus-stats.d.ts.map +0 -1
  932. package/out/src/tools/corpus-stats.js +0 -138
  933. package/out/src/tools/corpus-stats.js.map +0 -1
  934. package/out/src/tools/fetch/ban.d.ts +0 -31
  935. package/out/src/tools/fetch/ban.d.ts.map +0 -1
  936. package/out/src/tools/fetch/ban.js +0 -239
  937. package/out/src/tools/fetch/ban.js.map +0 -1
  938. package/out/src/tools/fetch/download.d.ts +0 -78
  939. package/out/src/tools/fetch/download.d.ts.map +0 -1
  940. package/out/src/tools/fetch/download.js +0 -116
  941. package/out/src/tools/fetch/download.js.map +0 -1
  942. package/out/src/tools/fetch/geonames-dump.d.ts +0 -87
  943. package/out/src/tools/fetch/geonames-dump.d.ts.map +0 -1
  944. package/out/src/tools/fetch/geonames-dump.js +0 -178
  945. package/out/src/tools/fetch/geonames-dump.js.map +0 -1
  946. package/out/src/tools/fetch/geonames-postal.d.ts +0 -76
  947. package/out/src/tools/fetch/geonames-postal.d.ts.map +0 -1
  948. package/out/src/tools/fetch/geonames-postal.js +0 -125
  949. package/out/src/tools/fetch/geonames-postal.js.map +0 -1
  950. package/out/src/tools/fetch/hrsa.d.ts +0 -18
  951. package/out/src/tools/fetch/hrsa.d.ts.map +0 -1
  952. package/out/src/tools/fetch/hrsa.js +0 -46
  953. package/out/src/tools/fetch/hrsa.js.map +0 -1
  954. package/out/src/tools/fetch/imls-pls.d.ts +0 -25
  955. package/out/src/tools/fetch/imls-pls.d.ts.map +0 -1
  956. package/out/src/tools/fetch/imls-pls.js +0 -108
  957. package/out/src/tools/fetch/imls-pls.js.map +0 -1
  958. package/out/src/tools/fetch/index.d.ts +0 -144
  959. package/out/src/tools/fetch/index.d.ts.map +0 -1
  960. package/out/src/tools/fetch/index.js +0 -143
  961. package/out/src/tools/fetch/index.js.map +0 -1
  962. package/out/src/tools/fetch/nad.d.ts +0 -70
  963. package/out/src/tools/fetch/nad.d.ts.map +0 -1
  964. package/out/src/tools/fetch/nad.js +0 -234
  965. package/out/src/tools/fetch/nad.js.map +0 -1
  966. package/out/src/tools/fetch/nppes.d.ts +0 -26
  967. package/out/src/tools/fetch/nppes.d.ts.map +0 -1
  968. package/out/src/tools/fetch/nppes.js +0 -126
  969. package/out/src/tools/fetch/nppes.js.map +0 -1
  970. package/out/src/tools/fetch/openaddresses.d.ts +0 -61
  971. package/out/src/tools/fetch/openaddresses.d.ts.map +0 -1
  972. package/out/src/tools/fetch/openaddresses.js +0 -317
  973. package/out/src/tools/fetch/openaddresses.js.map +0 -1
  974. package/out/src/tools/fetch/ourairports.d.ts +0 -45
  975. package/out/src/tools/fetch/ourairports.d.ts.map +0 -1
  976. package/out/src/tools/fetch/ourairports.js +0 -128
  977. package/out/src/tools/fetch/ourairports.js.map +0 -1
  978. package/out/src/tools/fetch/ppd.d.ts.map +0 -1
  979. package/out/src/tools/fetch/ppd.js +0 -100
  980. package/out/src/tools/fetch/ppd.js.map +0 -1
  981. package/out/src/tools/fetch/state-hi-schools.d.ts +0 -25
  982. package/out/src/tools/fetch/state-hi-schools.d.ts.map +0 -1
  983. package/out/src/tools/fetch/state-hi-schools.js +0 -162
  984. package/out/src/tools/fetch/state-hi-schools.js.map +0 -1
  985. package/out/src/tools/fetch/state-sources.d.ts +0 -26
  986. package/out/src/tools/fetch/state-sources.d.ts.map +0 -1
  987. package/out/src/tools/fetch/state-sources.js +0 -111
  988. package/out/src/tools/fetch/state-sources.js.map +0 -1
  989. package/out/src/tools/fetch/tiger-full.d.ts +0 -42
  990. package/out/src/tools/fetch/tiger-full.d.ts.map +0 -1
  991. package/out/src/tools/fetch/tiger-full.js +0 -248
  992. package/out/src/tools/fetch/tiger-full.js.map +0 -1
  993. package/out/src/tools/fetch/wikidata-subvenue.d.ts +0 -171
  994. package/out/src/tools/fetch/wikidata-subvenue.d.ts.map +0 -1
  995. package/out/src/tools/fetch/wikidata-subvenue.js +0 -275
  996. package/out/src/tools/fetch/wikidata-subvenue.js.map +0 -1
  997. package/out/src/tools/gb-title-case.d.ts.map +0 -1
  998. package/out/src/tools/gb-title-case.js.map +0 -1
  999. package/out/src/tools/golden-expand.d.ts +0 -90
  1000. package/out/src/tools/golden-expand.d.ts.map +0 -1
  1001. package/out/src/tools/golden-expand.js +0 -413
  1002. package/out/src/tools/golden-expand.js.map +0 -1
  1003. package/out/src/tools/golden-promote.d.ts.map +0 -1
  1004. package/out/src/tools/golden-promote.js +0 -244
  1005. package/out/src/tools/golden-promote.js.map +0 -1
  1006. package/out/src/tools/golden-relabel-street.d.ts +0 -196
  1007. package/out/src/tools/golden-relabel-street.d.ts.map +0 -1
  1008. package/out/src/tools/golden-relabel-street.js +0 -440
  1009. package/out/src/tools/golden-relabel-street.js.map +0 -1
  1010. package/out/src/tools/index.d.ts +0 -28
  1011. package/out/src/tools/index.d.ts.map +0 -1
  1012. package/out/src/tools/index.js +0 -28
  1013. package/out/src/tools/index.js.map +0 -1
  1014. package/out/src/tools/ingest-csv.d.ts.map +0 -1
  1015. package/out/src/tools/ingest-csv.js +0 -296
  1016. package/out/src/tools/ingest-csv.js.map +0 -1
  1017. package/out/src/tools/jsonl-to-parquet.d.ts +0 -61
  1018. package/out/src/tools/jsonl-to-parquet.d.ts.map +0 -1
  1019. package/out/src/tools/jsonl-to-parquet.js +0 -164
  1020. package/out/src/tools/jsonl-to-parquet.js.map +0 -1
  1021. package/out/src/tools/lint-shard-vocab.d.ts +0 -90
  1022. package/out/src/tools/lint-shard-vocab.d.ts.map +0 -1
  1023. package/out/src/tools/lint-shard-vocab.js +0 -281
  1024. package/out/src/tools/lint-shard-vocab.js.map +0 -1
  1025. package/out/src/tools/lint-shard.d.ts +0 -93
  1026. package/out/src/tools/lint-shard.d.ts.map +0 -1
  1027. package/out/src/tools/lint-shard.js +0 -354
  1028. package/out/src/tools/lint-shard.js.map +0 -1
  1029. package/out/src/tools/overlay-manifest.d.ts +0 -39
  1030. package/out/src/tools/overlay-manifest.d.ts.map +0 -1
  1031. package/out/src/tools/overlay-manifest.js +0 -98
  1032. package/out/src/tools/overlay-manifest.js.map +0 -1
  1033. package/out/src/tools/overture-subvenue.d.ts +0 -112
  1034. package/out/src/tools/overture-subvenue.d.ts.map +0 -1
  1035. package/out/src/tools/overture-subvenue.js +0 -144
  1036. package/out/src/tools/overture-subvenue.js.map +0 -1
  1037. package/out/src/tools/postcode-triples.d.ts +0 -175
  1038. package/out/src/tools/postcode-triples.d.ts.map +0 -1
  1039. package/out/src/tools/postcode-triples.js +0 -304
  1040. package/out/src/tools/postcode-triples.js.map +0 -1
  1041. package/out/src/tools/shard-kryptonite.d.ts +0 -32
  1042. package/out/src/tools/shard-kryptonite.d.ts.map +0 -1
  1043. package/out/src/tools/shard-kryptonite.js +0 -100
  1044. package/out/src/tools/shard-kryptonite.js.map +0 -1
  1045. package/out/src/tools/shard-translit.d.ts +0 -51
  1046. package/out/src/tools/shard-translit.d.ts.map +0 -1
  1047. package/out/src/tools/shard-translit.js +0 -175
  1048. package/out/src/tools/shard-translit.js.map +0 -1
  1049. package/out/src/tools/sub-venue/harvest.d.ts +0 -100
  1050. package/out/src/tools/sub-venue/harvest.d.ts.map +0 -1
  1051. package/out/src/tools/sub-venue/harvest.js +0 -168
  1052. package/out/src/tools/sub-venue/harvest.js.map +0 -1
  1053. package/out/src/tools/sub-venue/head-nouns.d.ts +0 -50
  1054. package/out/src/tools/sub-venue/head-nouns.d.ts.map +0 -1
  1055. package/out/src/tools/sub-venue/head-nouns.js +0 -210
  1056. package/out/src/tools/sub-venue/head-nouns.js.map +0 -1
  1057. package/out/src/tools/sub-venue/surfaces.d.ts +0 -45
  1058. package/out/src/tools/sub-venue/surfaces.d.ts.map +0 -1
  1059. package/out/src/tools/sub-venue/surfaces.js +0 -77
  1060. package/out/src/tools/sub-venue/surfaces.js.map +0 -1
  1061. package/out/src/tools/sub-venue/table.d.ts +0 -229
  1062. package/out/src/tools/sub-venue/table.d.ts.map +0 -1
  1063. package/out/src/tools/sub-venue/table.js +0 -108
  1064. package/out/src/tools/sub-venue/table.js.map +0 -1
  1065. package/out/src/tools/sub-venue/wikidata.d.ts +0 -26
  1066. package/out/src/tools/sub-venue/wikidata.d.ts.map +0 -1
  1067. package/out/src/tools/sub-venue/wikidata.js +0 -62
  1068. package/out/src/tools/sub-venue/wikidata.js.map +0 -1
  1069. package/out/src/tools/sub-venue-lexicon.d.ts +0 -156
  1070. package/out/src/tools/sub-venue-lexicon.d.ts.map +0 -1
  1071. package/out/src/tools/sub-venue-lexicon.js +0 -282
  1072. package/out/src/tools/sub-venue-lexicon.js.map +0 -1
  1073. package/out/src/tools/sub-venue-promotions.d.ts +0 -94
  1074. package/out/src/tools/sub-venue-promotions.d.ts.map +0 -1
  1075. package/out/src/tools/sub-venue-promotions.js +0 -266
  1076. package/out/src/tools/sub-venue-promotions.js.map +0 -1
  1077. package/out/src/types.d.ts +0 -221
  1078. package/out/src/types.d.ts.map +0 -1
  1079. package/out/src/types.js.map +0 -1
  1080. package/out/src/utils/align.d.ts +0 -93
  1081. package/out/src/utils/align.d.ts.map +0 -1
  1082. package/out/src/utils/align.js +0 -234
  1083. package/out/src/utils/align.js.map +0 -1
  1084. package/out/src/utils/golden.d.ts +0 -69
  1085. package/out/src/utils/golden.d.ts.map +0 -1
  1086. package/out/src/utils/golden.js +0 -127
  1087. package/out/src/utils/golden.js.map +0 -1
  1088. package/out/src/utils/index.d.ts +0 -14
  1089. package/out/src/utils/index.d.ts.map +0 -1
  1090. package/out/src/utils/index.js +0 -14
  1091. package/out/src/utils/index.js.map +0 -1
  1092. package/out/src/utils/license.d.ts.map +0 -1
  1093. package/out/src/utils/license.js.map +0 -1
  1094. package/out/src/utils/parquet.d.ts +0 -162
  1095. package/out/src/utils/parquet.d.ts.map +0 -1
  1096. package/out/src/utils/parquet.js +0 -262
  1097. package/out/src/utils/parquet.js.map +0 -1
  1098. package/out/src/utils/split.d.ts +0 -127
  1099. package/out/src/utils/split.d.ts.map +0 -1
  1100. package/out/src/utils/split.js +0 -204
  1101. package/out/src/utils/split.js.map +0 -1
  1102. package/out/src/utils/tokenize.d.ts +0 -56
  1103. package/out/src/utils/tokenize.d.ts.map +0 -1
  1104. package/out/src/utils/tokenize.js +0 -48
  1105. package/out/src/utils/tokenize.js.map +0 -1
  1106. package/out/src/utils/wof-json.d.ts +0 -109
  1107. package/out/src/utils/wof-json.d.ts.map +0 -1
  1108. package/out/src/utils/wof-json.js +0 -173
  1109. package/out/src/utils/wof-json.js.map +0 -1
  1110. package/src/adapters/ban/adapter.ts +0 -191
  1111. package/src/adapters/ban/street-decompose.ts +0 -96
  1112. package/src/adapters/fcc-bdc/adapter.ts +0 -174
  1113. package/src/adapters/geonames/adapter.ts +0 -200
  1114. package/src/adapters/geonames-postal/adapter.ts +0 -119
  1115. package/src/adapters/gnaf/adapter.ts +0 -149
  1116. package/src/adapters/gnaf/assemble.ts +0 -226
  1117. package/src/adapters/index.ts +0 -149
  1118. package/src/adapters/openaddresses/adapter.ts +0 -251
  1119. package/src/adapters/overture/adapter.ts +0 -162
  1120. package/src/adapters/state-hi-schools/adapter.ts +0 -164
  1121. package/src/adapters/synth-po-box/adapter.ts +0 -204
  1122. package/src/adapters/tiger/adapter.ts +0 -253
  1123. package/src/adapters/tiger/street-decompose.ts +0 -111
  1124. package/src/adapters/usgov-hrsa-fqhc/adapter.ts +0 -183
  1125. package/src/adapters/usgov-imls-pls/adapter.ts +0 -143
  1126. package/src/adapters/usgov-irs-bmf/adapter.ts +0 -163
  1127. package/src/adapters/usgov-nad/adapter.ts +0 -348
  1128. package/src/adapters/usgov-nppes/adapter.ts +0 -159
  1129. package/src/adapters/usgov-samhsa-treatment-locator/adapter.ts +0 -204
  1130. package/src/adapters/utils/index.ts +0 -233
  1131. package/src/adapters/wof-admin-jp/adapter.ts +0 -216
  1132. package/src/adapters/wof-admin-json/adapter.ts +0 -256
  1133. package/src/adapters/wof-json-rows.ts +0 -79
  1134. package/src/adapters/wof-postalcode-json/adapter.ts +0 -183
  1135. package/src/build.ts +0 -386
  1136. package/src/index.ts +0 -14
  1137. package/src/name-prone-us-suffixes.ts +0 -12
  1138. package/src/parquet-wrapper/index.ts +0 -9
  1139. package/src/parquet-wrapper/reader.ts +0 -97
  1140. package/src/parquet-wrapper/schema.ts +0 -88
  1141. package/src/parquet-wrapper/writer.ts +0 -110
  1142. package/src/runner.ts +0 -317
  1143. package/src/shard-recipes/anchor-absorption.ts +0 -103
  1144. package/src/shard-recipes/bare-country.ts +0 -95
  1145. package/src/shard-recipes/boundary-stress.ts +0 -101
  1146. package/src/shard-recipes/country-balanced.ts +0 -524
  1147. package/src/shard-recipes/cz-pcfirst-preposition.ts +0 -111
  1148. package/src/shard-recipes/fr-admin-split.ts +0 -239
  1149. package/src/shard-recipes/fr-bare-street.ts +0 -170
  1150. package/src/shard-recipes/fr-fragment.ts +0 -332
  1151. package/src/shard-recipes/fr-lieudit.ts +0 -302
  1152. package/src/shard-recipes/fr-order.ts +0 -258
  1153. package/src/shard-recipes/german.ts +0 -170
  1154. package/src/shard-recipes/house-venue.ts +0 -88
  1155. package/src/shard-recipes/index.ts +0 -95
  1156. package/src/shard-recipes/intersection.ts +0 -630
  1157. package/src/shard-recipes/locale.ts +0 -599
  1158. package/src/shard-recipes/nl-postcode.ts +0 -115
  1159. package/src/shard-recipes/no-fragment.ts +0 -219
  1160. package/src/shard-recipes/no-street-led.ts +0 -143
  1161. package/src/shard-recipes/no-street.ts +0 -86
  1162. package/src/shard-recipes/po-box-cedex.ts +0 -920
  1163. package/src/shard-recipes/po-box.ts +0 -119
  1164. package/src/shard-recipes/reviewed-postcode-tail.ts +0 -189
  1165. package/src/shard-recipes/scaffold.ts +0 -360
  1166. package/src/shard-recipes/si-bare-village.ts +0 -97
  1167. package/src/shard-recipes/street-affix.ts +0 -826
  1168. package/src/shard-recipes/street-bare.ts +0 -101
  1169. package/src/shard-recipes/street.ts +0 -82
  1170. package/src/shard-recipes/sub-venue-sources.ts +0 -885
  1171. package/src/shard-recipes/sub-venue.ts +0 -984
  1172. package/src/shard-recipes/trailing-region.ts +0 -183
  1173. package/src/shard-recipes/unit.ts +0 -321
  1174. package/src/synthesizers/anchor-absorption.ts +0 -290
  1175. package/src/synthesizers/boundary-stress.ts +0 -531
  1176. package/src/synthesizers/german.ts +0 -251
  1177. package/src/synthesizers/house-venue.ts +0 -330
  1178. package/src/synthesizers/intersection.ts +0 -232
  1179. package/src/synthesizers/no-street.ts +0 -349
  1180. package/src/synthesizers/po-box.ts +0 -339
  1181. package/src/synthesizers/street.ts +0 -274
  1182. package/src/synthesizers/utils.ts +0 -903
  1183. package/src/tools/align-shard.ts +0 -70
  1184. package/src/tools/audit.ts +0 -399
  1185. package/src/tools/corpus-stats.ts +0 -184
  1186. package/src/tools/fetch/ban.ts +0 -290
  1187. package/src/tools/fetch/download.ts +0 -176
  1188. package/src/tools/fetch/geonames-dump.ts +0 -267
  1189. package/src/tools/fetch/geonames-postal.ts +0 -180
  1190. package/src/tools/fetch/hrsa.ts +0 -68
  1191. package/src/tools/fetch/imls-pls.ts +0 -158
  1192. package/src/tools/fetch/index.ts +0 -147
  1193. package/src/tools/fetch/nad.ts +0 -342
  1194. package/src/tools/fetch/nppes.ts +0 -174
  1195. package/src/tools/fetch/openaddresses.ts +0 -404
  1196. package/src/tools/fetch/ourairports.ts +0 -171
  1197. package/src/tools/fetch/ppd.ts +0 -137
  1198. package/src/tools/fetch/state-hi-schools.ts +0 -208
  1199. package/src/tools/fetch/state-sources.ts +0 -155
  1200. package/src/tools/fetch/tiger-full.ts +0 -354
  1201. package/src/tools/fetch/wikidata-subvenue.ts +0 -386
  1202. package/src/tools/golden-expand.ts +0 -584
  1203. package/src/tools/golden-promote.ts +0 -353
  1204. package/src/tools/golden-relabel-street.ts +0 -685
  1205. package/src/tools/index.ts +0 -28
  1206. package/src/tools/ingest-csv.ts +0 -422
  1207. package/src/tools/jsonl-to-parquet.ts +0 -221
  1208. package/src/tools/lint-shard-vocab.ts +0 -409
  1209. package/src/tools/lint-shard.ts +0 -543
  1210. package/src/tools/overlay-manifest.ts +0 -157
  1211. package/src/tools/overture-subvenue.ts +0 -215
  1212. package/src/tools/postcode-triples.ts +0 -375
  1213. package/src/tools/shard-kryptonite.ts +0 -139
  1214. package/src/tools/shard-translit.ts +0 -245
  1215. package/src/tools/sub-venue/harvest.ts +0 -235
  1216. package/src/tools/sub-venue/head-nouns.ts +0 -242
  1217. package/src/tools/sub-venue/surfaces.ts +0 -95
  1218. package/src/tools/sub-venue/table.ts +0 -281
  1219. package/src/tools/sub-venue/wikidata.ts +0 -85
  1220. package/src/tools/sub-venue-lexicon.ts +0 -431
  1221. package/src/tools/sub-venue-promotions.ts +0 -330
  1222. package/src/types.ts +0 -247
  1223. package/src/utils/align.ts +0 -331
  1224. package/src/utils/golden.ts +0 -176
  1225. package/src/utils/index.ts +0 -14
  1226. package/src/utils/parquet.ts +0 -391
  1227. package/src/utils/split.ts +0 -279
  1228. package/src/utils/tokenize.ts +0 -78
  1229. package/src/utils/wof-json.ts +0 -244
  1230. /package/{src → lib}/adapters/state-ia-contractors/adapter.ts +0 -0
  1231. /package/{src → lib}/adapters/state-ny-notaries/adapter.ts +0 -0
  1232. /package/{src → lib}/adapters/state-tx-notaries/adapter.ts +0 -0
  1233. /package/{src → lib}/codex/us-fips-state.ts +0 -0
  1234. /package/{src → lib}/tools/gb-title-case.ts +0 -0
  1235. /package/{src → lib}/utils/license.ts +0 -0
  1236. /package/out/{src/adapters → adapters}/ban/adapter.d.ts +0 -0
  1237. /package/out/{src/adapters → adapters}/ban/street-decompose.d.ts +0 -0
  1238. /package/out/{src/adapters → adapters}/fcc-bdc/adapter.d.ts +0 -0
  1239. /package/out/{src/adapters → adapters}/geonames/adapter.d.ts +0 -0
  1240. /package/out/{src/adapters → adapters}/openaddresses/adapter.d.ts +0 -0
  1241. /package/out/{src/adapters → adapters}/state-ia-contractors/adapter.d.ts +0 -0
  1242. /package/out/{src/adapters → adapters}/state-ia-contractors/adapter.js +0 -0
  1243. /package/out/{src/adapters → adapters}/state-ny-notaries/adapter.d.ts +0 -0
  1244. /package/out/{src/adapters → adapters}/state-ny-notaries/adapter.js +0 -0
  1245. /package/out/{src/adapters → adapters}/state-tx-notaries/adapter.d.ts +0 -0
  1246. /package/out/{src/adapters → adapters}/state-tx-notaries/adapter.js +0 -0
  1247. /package/out/{src/adapters → adapters}/synth-po-box/adapter.d.ts +0 -0
  1248. /package/out/{src/adapters → adapters}/tiger/street-decompose.d.ts +0 -0
  1249. /package/out/{src/adapters → adapters}/usgov-nppes/adapter.d.ts +0 -0
  1250. /package/out/{src/adapters → adapters}/usgov-samhsa-treatment-locator/adapter.d.ts +0 -0
  1251. /package/out/{src/adapters → adapters}/wof-admin-jp/adapter.d.ts +0 -0
  1252. /package/out/{src/codex → codex}/us-fips-state.d.ts +0 -0
  1253. /package/out/{src/codex → codex}/us-fips-state.js +0 -0
  1254. /package/out/{src/tools → tools}/fetch/ppd.d.ts +0 -0
  1255. /package/out/{src/tools → tools}/gb-title-case.d.ts +0 -0
  1256. /package/out/{src/tools → tools}/gb-title-case.js +0 -0
  1257. /package/out/{src/tools → tools}/golden-promote.d.ts +0 -0
  1258. /package/out/{src/tools → tools}/ingest-csv.d.ts +0 -0
  1259. /package/out/{src/types.js → types.js} +0 -0
  1260. /package/out/{src/utils → utils}/license.d.ts +0 -0
  1261. /package/out/{src/utils → utils}/license.js +0 -0
@@ -0,0 +1,768 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ *
6
+ * `po-box-cedex` slice recipe — the po_box / cedex coverage change of the parity campaign (the
7
+ * unit-slice playbook applied to the two starved tags `po_box` and `cedex`). Generate-mode,
8
+ * self-contained. Ported from scripts/build-po-box-cedex-slice.mjs.
9
+ *
10
+ * Surface vocabulary is provenance-first: US designators come from `@mailwoman/codex/us`
11
+ * (`isPOBox`, USPS Pub 28 §29); non-US leaders from the corpus `PO_BOX_LOCALE_TEMPLATES`;
12
+ * Canadian postcodes are synthesized to the `@mailwoman/codex/ca` pattern; CEDEX rides
13
+ * `@mailwoman/codex/fr` (`isCedex`); AU/NZ delivery services round-trip
14
+ * `@mailwoman/codex/{au,nz}`. Span convention: the WHOLE designator+number phrase is the `po_box`
15
+ * span, and "CEDEX 08" is a SEPARATE `cedex` span.
16
+ *
17
+ * Classes (CLASS_MIX): po-box-us, po-box-us-military (#517), pmb-us, bp-fr, cedex-fr, cp-ca-fr,
18
+ * po-box-ca-en, po-box-au (#517), po-box-nz (#517). `--golden` emits the leakage-safe holdout
19
+ * variant ({raw, components, country}); US golden = Vermont only, FR/CA/AU/NZ = a stable
20
+ * locality-hash holdout (hash%10===0).
21
+ *
22
+ * Prerequisites (read once, before the generation loop — these do NOT consume `random`): the cached
23
+ * OA zips in `$MAILWOMAN_DATA_ROOT/oa-cache`, the GeoNames Canada dump at
24
+ * `$MAILWOMAN_DATA_ROOT/geonames/CA.zip`, and the GeoNames POSTAL-CODE dumps for AU/NZ
25
+ * (`$MAILWOMAN_DATA_ROOT/geonames-postal/{AU,NZ}.zip`).
26
+ *
27
+ * Byte-fidelity: the legacy script seeded its own mulberry32 from `--seed`
28
+ * (`mulberry32(opts.seed)`); this recipe re-creates the SAME generator
29
+ * (`makeMulberry32(opts.seed)`) and preserves the synthesis call order exactly, so `--seed N`
30
+ * reproduces the legacy run byte-for-byte.
31
+ */
32
+ import { isAuDeliveryService, isAuPostcode, isAuStateAbbreviation } from "@mailwoman/codex/au";
33
+ import { FSA_LETTER_TO_PROVINCE, normalizeCaPostalCode } from "@mailwoman/codex/ca";
34
+ import { isCedex } from "@mailwoman/codex/fr";
35
+ import { isNZDeliveryService, isNZPostcode } from "@mailwoman/codex/nz";
36
+ import { isPOBox } from "@mailwoman/codex/us";
37
+ import { dataRootPath } from "@mailwoman/core/data-root";
38
+ import { pathExists } from "@mailwoman/core/fs/readers";
39
+ import { readZipEntry } from "@mailwoman/core/fs/zip";
40
+ import { mulberry32 as makeMulberry32 } from "@mailwoman/core/utils";
41
+ import { TextSpliterator, TSVSpliterator } from "spliterator";
42
+ import { readCSVRecords, readZippedCSVRecords, sliceSourceID, } from "#recipes/scaffold";
43
+ import { maybeNoisifyBoxNumber, PO_BOX_LOCALE_TEMPLATES, synthesizeMilitaryPoBoxRow, } from "#synthesizers/po-box";
44
+ import { pick, tieredNumber } from "#synthesizers/utils";
45
+ import { alignRow } from "#utils";
46
+ // ── Base-skeleton sources ────────────────────────────────────────────────────────────────────────
47
+ // Same OA cache as the unit/affix slices. US train = every NON-Vermont state; US eval = Vermont (the
48
+ // corpus defaultHoldout). FR comes from the BAN-derived countrywide extract (stride-sampled — the
49
+ // file is 2.5 GB and insee-ordered, so a head-only read would be all département 01).
50
+ const US_TRAIN_SOURCES = [
51
+ { zip: dataRootPath("oa-cache", "us__ca__berkeley.zip"), csv: "us/ca/berkeley.csv", region: "CA" },
52
+ { zip: dataRootPath("oa-cache", "us__ca__marin.zip"), csv: "us/ca/marin.csv", region: "CA" },
53
+ { zip: dataRootPath("oa-cache", "us__dc__statewide.zip"), csv: "us/dc/statewide.csv", region: "DC" },
54
+ { zip: dataRootPath("oa-cache", "us__ia__statewide.zip"), csv: "us/ia/statewide.csv", region: "IA" },
55
+ { zip: dataRootPath("oa-cache", "us__il__cook.zip"), csv: "us/il/cook.csv", region: "IL" },
56
+ { zip: dataRootPath("oa-cache", "us__mt__statewide.zip"), csv: "us/mt/statewide.csv", region: "MT" },
57
+ { zip: dataRootPath("oa-cache", "us__sd__statewide.zip"), csv: "us/sd/statewide.csv", region: "SD" },
58
+ ];
59
+ const US_EVAL_SOURCE = {
60
+ zip: dataRootPath("oa-cache", "us__vt__statewide.zip"),
61
+ csv: "us/vt/statewide.csv",
62
+ region: "VT",
63
+ };
64
+ const FR_SOURCE = { zip: dataRootPath("oa-cache", "fr__countrywide.zip"), csv: "fr/countrywide.csv" };
65
+ // GeoNames has two per-country exports with different schemas, and this recipe reads both. The MAIN
66
+ // dump (feature class + population columns) lives under `geonames/`; the POSTAL-CODE dump lives
67
+ // under `geonames-postal/`, where the directory carries the "postal" distinction the filename used
68
+ // to.
69
+ const GEONAMES_CA = dataRootPath("geonames", "CA.zip");
70
+ const GEONAMES_POSTAL_AU = { zip: dataRootPath("geonames-postal", "AU.zip"), txt: "AU.txt" };
71
+ const GEONAMES_POSTAL_NZ = { zip: dataRootPath("geonames-postal", "NZ.zip"), txt: "NZ.txt" };
72
+ /**
73
+ * ── Surface vocabulary (codex + corpus templates — see the header) ──────────────────────────────.
74
+ */
75
+ const T = Object.fromEntries(PO_BOX_LOCALE_TEMPLATES.map((t) => [t.locale, t]));
76
+ // US: the corpus en-US leaders carry the common mass; the codex-only USPS Pub-28 designators
77
+ // (Caller/Drawer/Lockbox — firm-holdout and rural forms) ride at low weight. "Box" is in both.
78
+ /**
79
+ * PO Box, P.O. Box, P.O.Box, PO BOX, POB, Post Office Box, Box.
80
+ */
81
+ const US_LEADERS_COMMON = T["en-US"].leaders;
82
+ /**
83
+ * Codex US_PO_BOX_DESIGNATORS tail.
84
+ */
85
+ const US_LEADERS_RARE = ["Caller", "Firm Caller", "Drawer", "Lockbox"];
86
+ // "#" EXCLUDED (v4.4.0 probe finding): bare "#N" is a secondary-unit designator per USPS Pub 28 and
87
+ // the shipped unit change labels it `unit` — the corpus template's po_box reading CONTRADICTS a
88
+ // shipped convention. PMB stays — a genuine commercial-mail-receiving designator, no unit collision.
89
+ /**
90
+ * PMB.
91
+ */
92
+ const US_PMB_LEADERS = T["en-US"].pmb.filter((l) => l !== "#");
93
+ /**
94
+ * BP, B.P., Boîte Postale, BP.
95
+ */
96
+ const FR_LEADERS = T["fr-FR"].leaders;
97
+ /**
98
+ * CP, C.P., Case Postale, BP, B.P.
99
+ */
100
+ const CA_FR_LEADERS = T["fr-CA"].leaders;
101
+ /**
102
+ * PO Box, P.O. Box, POB, Post Office Box.
103
+ */
104
+ const CA_EN_LEADERS = T["en-CA"].leaders;
105
+ /**
106
+ * AU (#517): codex/au is the vocabulary truth. Current designators (live auspost.com.au pages) at full weight; the
107
+ * AMAS-legacy rural/community tail rides at the same 10% rare-dial as the US Caller/Drawer tail. Every emitted phrase
108
+ * must round-trip the codex matcher (makeAuNzPoBoxPhrase).
109
+ */
110
+ const AU_LEADERS_CURRENT = ["PO Box", "P.O. Box", "Post Office Box", "GPO Box", "Locked Bag", "Private Bag"];
111
+ /**
112
+ * Codex legacy: true (recognize-only forms)
113
+ */
114
+ const AU_LEADERS_LEGACY = ["RMB", "RSD", "CMB"];
115
+ /**
116
+ * NZ (#517): the ADV358 box/bag types that carry an identifier. CMB rides rare (its "CMB B99" identifier shape is
117
+ * alpha-led, covered by makeAuNzPoBoxPhrase). Counter Delivery / Poste Restante are identifier-less counter services —
118
+ * no number to learn, excluded from synthesis.
119
+ */
120
+ const NZ_LEADERS_COMMON = ["PO Box", "Private Bag"];
121
+ const NZ_LEADERS_RARE = ["CMB"];
122
+ /**
123
+ * Canadian postcode synthesis: valid first letters per province from the codex FSA prior, interior letters per the
124
+ * codex pattern (excludes the visually ambiguous D F I O Q U). The LDU digits are random — the SHAPE is the training
125
+ * signal, not the (unknowable) live assignment.
126
+ */
127
+ const QC_FSA_LETTERS = Object.entries(FSA_LETTER_TO_PROVINCE)
128
+ .filter(([, p]) => p === "QC")
129
+ .map(([l]) => l);
130
+ // G H J
131
+ const ON_FSA_LETTERS = Object.entries(FSA_LETTER_TO_PROVINCE)
132
+ .filter(([, p]) => p === "ON")
133
+ .map(([l]) => l);
134
+ // K L M N P
135
+ const CA_INTERIOR_LETTERS = "ABCEGHJKLMNPRSTVWXYZ";
136
+ /**
137
+ * Class mix — po_box mass leans US (the production arena), cedex gets a real block, and the CA-fr class exists because
138
+ * the #511 Montréal rows ("Case Postale 200, H3A 1B9 Montréal, QC") fail today.
139
+ */
140
+ const CLASS_MIX = [
141
+ ["po-box-us", 0.27],
142
+ ["po-box-us-military", 0.05], // #517: CMR/PSC/Unit + Box, APO/FPO/DPO + AA/AE/AP — the arena's 0/3 class
143
+ ["pmb-us", 0.07],
144
+ ["bp-fr", 0.1],
145
+ ["cedex-fr", 0.17],
146
+ ["cp-ca-fr", 0.12],
147
+ ["po-box-ca-en", 0.04],
148
+ ["po-box-au", 0.12],
149
+ ["po-box-nz", 0.06],
150
+ ];
151
+ /**
152
+ * Synthetic recipient/venue prefixes — the arena's "JOHN DOE, ACME INC, …" pattern.
153
+ */
154
+ const VENUES_EN = ["John Doe", "Jane Smith", "Acme Inc", "Wayne Enterprises", "Maria Garcia", "Riverside Clinic"];
155
+ const VENUES_FR = ["Société Dupont", "Cabinet Martin", "Hôpital Central", "Mairie Annexe", "Imprimerie Moderne"];
156
+ // ── Holdout + CSV helpers ────────────────────────────────────────────────────────────────────────
157
+ /**
158
+ * Stable locality hash for the FR/CA train↔golden split (djb2; hash%10===0 → golden-only).
159
+ */
160
+ function localityHash(name) {
161
+ let h = 5381;
162
+ const s = name.toLowerCase();
163
+ for (let i = 0; i < s.length; i++) {
164
+ h = ((h << 5) + h + s.charCodeAt(i)) >>> 0;
165
+ }
166
+ return h;
167
+ }
168
+ const isHoldoutLocality = (name) => localityHash(name) % 10 === 0;
169
+ const MAX_LOCALITY_LENGTH = 40;
170
+ const cleanLocality = (loc) => loc && loc.length <= MAX_LOCALITY_LENGTH && !/\d|,/.test(loc) && !/cedex/i.test(loc);
171
+ /**
172
+ * Stream real US tuples (number/street/city/postcode) out of a cached OA zip.
173
+ */
174
+ async function readUsTuples(source) {
175
+ const tuples = [];
176
+ const seen = new Set();
177
+ for await (const row of readZippedCSVRecords(source.zip, source.csv)) {
178
+ const locality = row.city ?? "";
179
+ if (!cleanLocality(locality))
180
+ continue;
181
+ const key = locality.toLowerCase();
182
+ const street = row.street ?? "", house_number = row.number ?? "";
183
+ // One tuple per (locality, street) pair keeps the pool varied without ballooning memory.
184
+ const pairKey = `${key}|${street}`.toLowerCase();
185
+ if (seen.has(pairKey))
186
+ continue;
187
+ seen.add(pairKey);
188
+ tuples.push({ house_number, street, locality, region: source.region, postcode: row.postcode ?? "" });
189
+ }
190
+ return tuples;
191
+ }
192
+ /**
193
+ * The FR stride: keep line 3, then every 211th. Both numbers are the awk pre-filter's, kept exactly — they select which
194
+ * rows land in the slice, so changing either re-rolls the sample.
195
+ */
196
+ const FR_STRIDE = 211;
197
+ const FR_STRIDE_OFFSET = 3;
198
+ /**
199
+ * GeoNames population floor for a Canadian locality to enter the pool.
200
+ */
201
+ const CA_LOCALITY_MIN_POPULATION = 1000;
202
+ /**
203
+ * Stride-sampled FR tuples (number/street/city/postcode). The countrywide CSV is 2.5 GB and insee-ordered; `awk NR%K`
204
+ * strides the whole country instead of reading one département.
205
+ *
206
+ * The stride counts PHYSICAL lines, so a record carrying a newline inside a quoted field is two lines to the stride and
207
+ * can be halved by it. That is a sampling artefact of striding before the parse, not of the parse: whichever lines
208
+ * survive are re-assembled into records by the CSV reader, and a halved record fails the field checks below. Hence
209
+ * `skipEmpty: false` and no quote handling on the line split — a blank line still advances the count, exactly as it did
210
+ * when this was `awk NR`, and the rows the stride selects are the rows every existing FR slice was built from.
211
+ */
212
+ async function readFrTuples(limit) {
213
+ if (!(await pathExists(FR_SOURCE.zip))) {
214
+ console.error(` WARN: ${FR_SOURCE.zip} is not cached — skipping ${FR_SOURCE.csv}`);
215
+ return [];
216
+ }
217
+ const encoder = new TextEncoder();
218
+ const strided = TextSpliterator.fromAsync(readZipEntry(FR_SOURCE.zip, FR_SOURCE.csv), { skipEmpty: false })
219
+ // `index` is 0-based where awk's NR is 1-based, hence the +1: keep the header, then every 211th line at offset 3.
220
+ .filter((_line, index) => index === 0 || (index + 1) % FR_STRIDE === FR_STRIDE_OFFSET)
221
+ .take(limit + 1)
222
+ .map((line) => encoder.encode(line + "\n"));
223
+ const tuples = [];
224
+ const seen = new Set();
225
+ for await (const row of readCSVRecords(strided)) {
226
+ const locality = row.city ?? "", postcode = row.postcode ?? "", street = row.street ?? "", house_number = row.number ?? "";
227
+ if (!cleanLocality(locality) || !/^\d{5}$/.test(postcode) || !street || !house_number)
228
+ continue;
229
+ const key = `${locality}|${street}`.toLowerCase();
230
+ if (seen.has(key))
231
+ continue;
232
+ seen.add(key);
233
+ tuples.push({ house_number, street, locality, postcode });
234
+ }
235
+ return tuples;
236
+ }
237
+ /**
238
+ * Canadian locality pools from the GeoNames dump (CC-BY 4.0): feature class P, admin1 10 (Québec) / 08 (Ontario),
239
+ * population > 1000. GeoNames is the provenance-tracked source — no hand list.
240
+ */
241
+ async function readCaLocalities(admin1) {
242
+ if (!(await pathExists(GEONAMES_CA))) {
243
+ console.error(` WARN: ${GEONAMES_CA} is not cached — skipping CA localities (admin1=${admin1})`);
244
+ return [];
245
+ }
246
+ const localities = new Set();
247
+ // GeoNames main dump columns, 0-based: 1 name, 6 feature class, 8 country, 10 admin1, 14 population.
248
+ for await (const columns of TSVSpliterator.fromAsync(readZipEntry(GEONAMES_CA, "CA.txt"), { header: false })) {
249
+ if (columns[6] !== "P" || columns[8] !== "CA" || columns[10] !== admin1)
250
+ continue;
251
+ if (Number(columns[14]) <= CA_LOCALITY_MIN_POPULATION)
252
+ continue;
253
+ const name = columns[1] ?? "";
254
+ if (cleanLocality(name)) {
255
+ localities.add(name);
256
+ }
257
+ }
258
+ return [...localities];
259
+ }
260
+ /**
261
+ * Real (locality, state?, postcode) tuples from a GeoNames postal-code dump (CC-BY 4.0). Tab format: country,
262
+ * postal_code, place_name, admin1_name, admin1_code, … — for AU the admin1_code IS the postal state abbreviation
263
+ * (NSW/VIC/…), validated against the codex table; NZ has no region line so the state column is ignored. Postcodes are
264
+ * validated against the codex 4-digit shape — a dump row that fails the contract is skipped, not emitted as a junk
265
+ * label.
266
+ */
267
+ async function readPostalTuples(source, opts) {
268
+ if (!(await pathExists(source.zip))) {
269
+ console.error(` WARN: ${source.zip} is not cached — skipping ${source.txt}`);
270
+ return [];
271
+ }
272
+ const tuples = [];
273
+ const seen = new Set();
274
+ const validPostcode = opts.withState ? isAuPostcode : isNZPostcode;
275
+ // A GeoNames dump carries no header row, so every line is data.
276
+ for await (const cols of TSVSpliterator.fromAsync(readZipEntry(source.zip, source.txt), { header: false })) {
277
+ const postcode = (cols[1] ?? "").trim();
278
+ const locality = (cols[2] ?? "").trim();
279
+ const region = (cols[4] ?? "").trim();
280
+ if (!cleanLocality(locality) || !validPostcode(postcode))
281
+ continue;
282
+ if (opts.withState && !isAuStateAbbreviation(region))
283
+ continue;
284
+ const key = `${locality}|${postcode}`.toLowerCase();
285
+ if (seen.has(key))
286
+ continue;
287
+ seen.add(key);
288
+ tuples.push(opts.withState ? { locality, region, postcode } : { locality, postcode });
289
+ }
290
+ return tuples;
291
+ }
292
+ // ── Rendering helpers ────────────────────────────────────────────────────────────────────────────
293
+ // Box-number bands: 30% 1–2 digits, 40% 3 digits, 25% 4 digits, 5% 5 digits.
294
+ const BOX_TWO_DIGIT_CUTOFF = 0.3;
295
+ const BOX_THREE_DIGIT_CUTOFF = 0.7;
296
+ const BOX_FOUR_DIGIT_CUTOFF = 0.95;
297
+ /**
298
+ * Box-number distribution (mirrors the corpus defaultPickNumber bands: 70% are 1-3 digits).
299
+ */
300
+ function pickBoxNumber(random) {
301
+ return tieredNumber(random, [
302
+ { cutoff: BOX_TWO_DIGIT_CUTOFF, base: 1, span: 99 },
303
+ { cutoff: BOX_THREE_DIGIT_CUTOFF, base: 100, span: 900 },
304
+ { cutoff: BOX_FOUR_DIGIT_CUTOFF, base: 1000, span: 9000 },
305
+ { base: 10_000, span: 90_000 },
306
+ ]);
307
+ }
308
+ // Designator casing: 70% as templated, 22% UPPER, 8% lower.
309
+ const TEMPLATE_CASE_CUTOFF = 0.7;
310
+ const UPPER_CASE_CUTOFF = 0.92;
311
+ /**
312
+ * Case dial for the designator phrase: mostly template casing, sometimes UPPER, rarely lower.
313
+ */
314
+ function caseDial(random, s) {
315
+ const r = random();
316
+ if (r < TEMPLATE_CASE_CUTOFF)
317
+ return s;
318
+ if (r < UPPER_CASE_CUTOFF)
319
+ return s.toUpperCase();
320
+ return s.toLowerCase();
321
+ }
322
+ /**
323
+ * Leaders the codex PO_BOX_RE genuinely covers (everything en-US except "POB"; PMB/"#" are the corpus's CMRA forms,
324
+ * outside USPS Pub-28 §29). Used to scope the isPOBox round-trip assertion.
325
+ */
326
+ const CODEX_COVERED_LEADERS = new Set(["PO Box", "P.O. Box", "P.O.Box", "PO BOX", "Post Office Box", "Box", ...US_LEADERS_RARE].map((l) => l.toLowerCase()));
327
+ // One leader in ten comes from the rare list when the caller supplies one (shared with the AU/NZ composer).
328
+ const RARE_LEADER_SHARE = 0.1;
329
+ /**
330
+ * Compose a po_box phrase. "#" joins without a space ("#500", the golden PMB variant).
331
+ */
332
+ function makePoBoxPhrase(random, leaders, rareLeaders) {
333
+ let leader = pick(leaders, random);
334
+ if (rareLeaders && random() < RARE_LEADER_SHARE) {
335
+ leader = pick(rareLeaders, random);
336
+ }
337
+ const num = maybeNoisifyBoxNumber(pickBoxNumber(random), random);
338
+ const phrase = leader === "#" ? `#${num}` : `${caseDial(random, leader)} ${num}`;
339
+ // Codex round-trip: a phrase built from a codex-known designator and a clean id must satisfy the
340
+ // matcher (the noisy ids — commas/spaces — are corpus-designed adversarial forms the regex rightly
341
+ // rejects, so they're exempt). A failure here is a generation bug; fail loud.
342
+ if (CODEX_COVERED_LEADERS.has(leader.toLowerCase()) && /^[\dA-Za-z][\dA-Za-z-]*$/.test(num) && !isPOBox(phrase)) {
343
+ throw new Error(`generated a po_box phrase the codex matcher rejects: "${phrase}"`);
344
+ }
345
+ return phrase;
346
+ }
347
+ // CEDEX word casing: 60% CEDEX, 30% Cedex, 10% cedex; one office in five is un-numbered.
348
+ const CEDEX_UPPER_CUTOFF = 0.6;
349
+ const CEDEX_TITLE_CUTOFF = 0.9;
350
+ const CEDEX_UNNUMBERED_SHARE = 0.2;
351
+ /**
352
+ * A CEDEX designation: "CEDEX 08" / "Cedex 8" / bare "CEDEX". Shape contract = codex fr/cedex — every emitted phrase
353
+ * must satisfy isCedex, loud.
354
+ */
355
+ function makeCedex(random) {
356
+ const r = random();
357
+ const word = r < CEDEX_UPPER_CUTOFF ? "CEDEX" : r < CEDEX_TITLE_CUTOFF ? "Cedex" : "cedex";
358
+ const phrase = (() => {
359
+ if (random() < CEDEX_UNNUMBERED_SHARE)
360
+ return word; // "33077 BORDEAUX CEDEX" — un-numbered offices are common
361
+ const n = 1 + Math.floor(random() * 20);
362
+ const id = random() < 0.5 ? String(n).padStart(2, "0") : String(n);
363
+ return `${word} ${id}`;
364
+ })();
365
+ if (!isCedex(phrase))
366
+ throw new Error(`makeCedex emitted a phrase the codex matcher rejects: "${phrase}"`);
367
+ return phrase;
368
+ }
369
+ /**
370
+ * Compose an AU or NZ delivery-service phrase from the codex-sourced leaders. Same contract as makePoBoxPhrase: a
371
+ * phrase built from a codex-known designator and a clean id must round-trip the codex matcher (isAuDeliveryService /
372
+ * isNZDeliveryService) — a failure is a generation bug, loud. Noisy ids (commas / embedded spaces) are corpus-designed
373
+ * adversarial forms, exempt.
374
+ */
375
+ function makeAuNzPoBoxPhrase(random, leaders, rareLeaders, validate) {
376
+ let leader = pick(leaders, random);
377
+ if (rareLeaders && random() < RARE_LEADER_SHARE) {
378
+ leader = pick(rareLeaders, random);
379
+ }
380
+ let num = maybeNoisifyBoxNumber(pickBoxNumber(random), random);
381
+ // NZ CMB identifiers are alpha-led per the ADV358 example ("CMB B99").
382
+ if (leader === "CMB" && validate === isNZDeliveryService) {
383
+ num = `B${num}`;
384
+ }
385
+ const phrase = `${caseDial(random, leader)} ${num}`;
386
+ // The "clean id" shape differs per system: ADV358 identifiers carry no separators at all, the AU
387
+ // AMAS id (like the US one) tolerates dashes. Noisy ids outside the clean shape are exempt.
388
+ const cleanID = validate === isNZDeliveryService ? /^[\dA-Za-z]+$/ : /^[\dA-Za-z][\dA-Za-z-]*$/;
389
+ if (cleanID.test(num) && !validate(phrase)) {
390
+ throw new Error(`generated a phrase the codex matcher rejects: "${phrase}"`);
391
+ }
392
+ return phrase;
393
+ }
394
+ /**
395
+ * Synthesize a codex-valid Canadian postcode for a province's FSA letters ("H2X 3V4").
396
+ */
397
+ function makeCaPostcode(random, fsaLetters) {
398
+ const L = () => CA_INTERIOR_LETTERS[Math.floor(random() * CA_INTERIOR_LETTERS.length)];
399
+ const D = () => String(Math.floor(random() * 10));
400
+ const first = pick(fsaLetters, random);
401
+ const pc = `${first}${D()}${L()} ${D()}${L()}${D()}`;
402
+ // The codex pattern is the contract — a generation bug should fail loud, not emit junk labels.
403
+ if (!normalizeCaPostalCode(pc))
404
+ throw new Error(`generated an invalid CA postcode: ${pc}`);
405
+ return pc;
406
+ }
407
+ // ── Per-class renderers — each returns { fmt, raw, components } ──────────────────────────────────
408
+ // US layouts: 40% full (when the tuple has a postcode), 15% no-postcode, 20% bare, 15% venue, 10% label-nocomma.
409
+ const US_FULL_CUTOFF = 0.4;
410
+ const US_NO_POSTCODE_CUTOFF = 0.55;
411
+ const US_BARE_CUTOFF = 0.75;
412
+ const US_VENUE_CUTOFF = 0.9;
413
+ function renderPoBoxUs(random, t) {
414
+ const phrase = makePoBoxPhrase(random, US_LEADERS_COMMON, US_LEADERS_RARE);
415
+ const { locality: loc, region: reg, postcode: pc } = t;
416
+ const base = { po_box: phrase, locality: loc, region: reg };
417
+ const r = random();
418
+ if (r < US_FULL_CUTOFF && pc)
419
+ return { fmt: "full", raw: `${phrase}, ${loc}, ${reg} ${pc}`, components: { ...base, postcode: pc } };
420
+ if (r < US_NO_POSTCODE_CUTOFF)
421
+ return { fmt: "no-postcode", raw: `${phrase}, ${loc}, ${reg}`, components: base };
422
+ if (r < US_BARE_CUTOFF)
423
+ return { fmt: "bare", raw: phrase, components: { po_box: phrase } };
424
+ if (r < US_VENUE_CUTOFF) {
425
+ const v = pick(VENUES_EN, random);
426
+ return {
427
+ fmt: "venue",
428
+ raw: pc ? `${v}, ${phrase}, ${loc}, ${reg} ${pc}` : `${v}, ${phrase}, ${loc}, ${reg}`,
429
+ components: { venue: v, ...base, ...(pc ? { postcode: pc } : {}) },
430
+ };
431
+ }
432
+ // USPS label form: comma-less, all-caps ("PO BOX 123 BURLINGTON VT 05401").
433
+ const up = (s) => s.toUpperCase();
434
+ return {
435
+ fmt: "label-nocomma",
436
+ raw: pc ? `${up(phrase)} ${up(loc)} ${reg} ${pc}` : `${up(phrase)} ${up(loc)} ${reg}`,
437
+ components: { po_box: up(phrase), locality: up(loc), region: reg, ...(pc ? { postcode: pc } : {}) },
438
+ };
439
+ }
440
+ // PMB layouts: 50% pmb-after-street, 35% pmb-comma, 15% pmb-bare.
441
+ const PMB_AFTER_STREET_CUTOFF = 0.5;
442
+ const PMB_COMMA_CUTOFF = 0.85;
443
+ function renderPmbUs(random, t) {
444
+ const phrase = makePoBoxPhrase(random, US_PMB_LEADERS);
445
+ const { house_number: hn, street, locality: loc, region: reg, postcode: pc } = t;
446
+ const road = `${hn} ${street}`;
447
+ const components = { house_number: hn, street, po_box: phrase, locality: loc, region: reg, postcode: pc };
448
+ const r = random();
449
+ if (r < PMB_AFTER_STREET_CUTOFF)
450
+ return { fmt: "pmb-after-street", raw: `${road} ${phrase}, ${loc}, ${reg} ${pc}`, components };
451
+ if (r < PMB_COMMA_CUTOFF)
452
+ return { fmt: "pmb-comma", raw: `${road}, ${phrase}, ${loc}, ${reg} ${pc}`, components };
453
+ return { fmt: "pmb-bare", raw: `${road} ${phrase}`, components: { house_number: hn, street, po_box: phrase } };
454
+ }
455
+ // BP layouts: 45% bp-tail, 15% bp-bare, 20% bp-cedex, 20% bp-venue.
456
+ const BP_TAIL_CUTOFF = 0.45;
457
+ const BP_BARE_CUTOFF = 0.6;
458
+ const BP_CEDEX_CUTOFF = 0.8;
459
+ function renderBpFr(random, t) {
460
+ const phrase = makePoBoxPhrase(random, FR_LEADERS);
461
+ const { locality, postcode: pc } = t;
462
+ const upper = random() < 0.5;
463
+ const loc = upper ? locality.toUpperCase() : locality;
464
+ const r = random();
465
+ if (r < BP_TAIL_CUTOFF)
466
+ return {
467
+ fmt: "bp-tail",
468
+ raw: `${phrase}, ${pc} ${loc}`,
469
+ components: { po_box: phrase, postcode: pc, locality: loc },
470
+ };
471
+ if (r < BP_BARE_CUTOFF)
472
+ return { fmt: "bp-bare", raw: phrase, components: { po_box: phrase } };
473
+ if (r < BP_CEDEX_CUTOFF) {
474
+ // The institutional combo line — a BP and a CEDEX routing on the same last line.
475
+ const cedex = makeCedex(random);
476
+ const locUp = locality.toUpperCase();
477
+ return {
478
+ fmt: "bp-cedex",
479
+ raw: `${phrase}, ${pc} ${locUp} ${cedex}`,
480
+ components: { po_box: phrase, postcode: pc, locality: locUp, cedex },
481
+ };
482
+ }
483
+ const v = pick(VENUES_FR, random);
484
+ return {
485
+ fmt: "bp-venue",
486
+ raw: `${v}, ${phrase}, ${pc} ${loc}`,
487
+ components: { venue: v, po_box: phrase, postcode: pc, locality: loc },
488
+ };
489
+ }
490
+ // 60% upper-case the locality. Layouts: 40% cedex-line, 35% cedex-full, 10% cedex-golden-order, 15% cedex-venue.
491
+ const CEDEX_UPPER_LOCALITY_SHARE = 0.6;
492
+ const CEDEX_LINE_CUTOFF = 0.4;
493
+ const CEDEX_FULL_CUTOFF = 0.75;
494
+ const CEDEX_GOLDEN_ORDER_CUTOFF = 0.85;
495
+ function renderCedexFr(random, t) {
496
+ const cedex = makeCedex(random);
497
+ const { house_number: hn, street, locality, postcode: pc } = t;
498
+ const loc = random() < CEDEX_UPPER_LOCALITY_SHARE ? locality.toUpperCase() : locality;
499
+ const line = { postcode: pc, locality: loc, cedex };
500
+ const r = random();
501
+ if (r < CEDEX_LINE_CUTOFF)
502
+ return { fmt: "cedex-line", raw: `${pc} ${loc} ${cedex}`, components: line };
503
+ if (r < CEDEX_FULL_CUTOFF)
504
+ return {
505
+ fmt: "cedex-full",
506
+ raw: `${hn} ${street}, ${pc} ${loc} ${cedex}`,
507
+ components: { house_number: hn, street, ...line },
508
+ };
509
+ if (r < CEDEX_GOLDEN_ORDER_CUTOFF)
510
+ return { fmt: "cedex-golden-order", raw: `${pc} ${cedex} ${loc}`, components: line };
511
+ const v = pick(VENUES_FR, random);
512
+ return { fmt: "cedex-venue", raw: `${v}, ${pc} ${loc} ${cedex}`, components: { venue: v, ...line } };
513
+ }
514
+ // CA-FR layouts: 40% golden-order, 30% native, 15% bare, 15% venue.
515
+ const CA_FR_GOLDEN_ORDER_CUTOFF = 0.4;
516
+ const CA_FR_NATIVE_CUTOFF = 0.7;
517
+ const CA_FR_BARE_CUTOFF = 0.85;
518
+ function renderCaFr(random, loc) {
519
+ const phrase = makePoBoxPhrase(random, CA_FR_LEADERS);
520
+ const pc = makeCaPostcode(random, QC_FSA_LETTERS);
521
+ const components = { po_box: phrase, postcode: pc, locality: loc, region: "QC" };
522
+ const r = random();
523
+ // The #511 golden order: postcode BEFORE locality, region trailing.
524
+ if (r < CA_FR_GOLDEN_ORDER_CUTOFF)
525
+ return { fmt: "ca-fr-golden-order", raw: `${phrase}, ${pc} ${loc}, QC`, components };
526
+ if (r < CA_FR_NATIVE_CUTOFF)
527
+ return { fmt: "ca-fr-native", raw: `${phrase}, ${loc} QC ${pc}`, components };
528
+ if (r < CA_FR_BARE_CUTOFF)
529
+ return { fmt: "ca-fr-bare", raw: phrase, components: { po_box: phrase } };
530
+ const v = pick(VENUES_FR, random);
531
+ return { fmt: "ca-fr-venue", raw: `${v}, ${phrase}, ${loc} QC ${pc}`, components: { venue: v, ...components } };
532
+ }
533
+ // CA-EN layouts: 50% standard, 30% golden-order, 20% bare.
534
+ const CA_EN_STANDARD_CUTOFF = 0.5;
535
+ const CA_EN_GOLDEN_ORDER_CUTOFF = 0.8;
536
+ function renderCaEn(random, loc) {
537
+ const phrase = makePoBoxPhrase(random, CA_EN_LEADERS);
538
+ const pc = makeCaPostcode(random, ON_FSA_LETTERS);
539
+ const components = { po_box: phrase, locality: loc, region: "ON", postcode: pc };
540
+ const r = random();
541
+ if (r < CA_EN_STANDARD_CUTOFF)
542
+ return { fmt: "ca-en-standard", raw: `${phrase}, ${loc}, ON ${pc}`, components };
543
+ if (r < CA_EN_GOLDEN_ORDER_CUTOFF)
544
+ return { fmt: "ca-en-golden-order", raw: `${phrase}, ${pc} ${loc}, ON`, components };
545
+ return { fmt: "ca-en-bare", raw: phrase, components: { po_box: phrase } };
546
+ }
547
+ // One draw decides casing and layout: the lower 60% upper-case the locality; layouts are 45% au-standard,
548
+ // 15% au-label-nocomma, 15% au-no-postcode, 13% au-bare, 12% au-venue.
549
+ const AU_UPPER_LOCALITY_CUTOFF = 0.6;
550
+ const AU_STANDARD_CUTOFF = 0.45;
551
+ const AU_LABEL_CUTOFF = 0.6;
552
+ const AU_NO_POSTCODE_CUTOFF = 0.75;
553
+ const AU_BARE_CUTOFF = 0.88;
554
+ function renderAUPoBox(random, t) {
555
+ const phrase = makeAuNzPoBoxPhrase(random, AU_LEADERS_CURRENT, AU_LEADERS_LEGACY, isAuDeliveryService);
556
+ const { locality, region: reg, postcode: pc } = t;
557
+ const r = random();
558
+ // The guideline last line is capitals ("SYDNEY NSW 2000"); mixed case rides as a softer variant.
559
+ const loc = r < AU_UPPER_LOCALITY_CUTOFF ? locality.toUpperCase() : locality;
560
+ const base = { po_box: phrase, locality: loc, region: reg, postcode: pc };
561
+ if (r < AU_STANDARD_CUTOFF)
562
+ return { fmt: "au-standard", raw: `${phrase}, ${loc} ${reg} ${pc}`, components: base };
563
+ if (r < AU_LABEL_CUTOFF) {
564
+ // The envelope label form: comma-less, designator upper-cased ("GPO BOX 123 SYDNEY NSW 2001").
565
+ const up = phrase.toUpperCase();
566
+ return {
567
+ fmt: "au-label-nocomma",
568
+ raw: `${up} ${locality.toUpperCase()} ${reg} ${pc}`,
569
+ components: { po_box: up, locality: locality.toUpperCase(), region: reg, postcode: pc },
570
+ };
571
+ }
572
+ if (r < AU_NO_POSTCODE_CUTOFF)
573
+ return {
574
+ fmt: "au-no-postcode",
575
+ raw: `${phrase}, ${loc} ${reg}`,
576
+ components: { po_box: phrase, locality: loc, region: reg },
577
+ };
578
+ if (r < AU_BARE_CUTOFF)
579
+ return { fmt: "au-bare", raw: phrase, components: { po_box: phrase } };
580
+ const v = pick(VENUES_EN, random);
581
+ return { fmt: "au-venue", raw: `${v}, ${phrase}, ${loc} ${reg} ${pc}`, components: { venue: v, ...base } };
582
+ }
583
+ // NZ layouts: 55% nz-standard, 15% nz-no-postcode, 15% nz-bare, 15% nz-venue.
584
+ const NZ_STANDARD_CUTOFF = 0.55;
585
+ const NZ_NO_POSTCODE_CUTOFF = 0.7;
586
+ const NZ_BARE_CUTOFF = 0.85;
587
+ function renderNZPoBox(random, t) {
588
+ const phrase = makeAuNzPoBoxPhrase(random, NZ_LEADERS_COMMON, NZ_LEADERS_RARE, isNZDeliveryService);
589
+ const { locality, postcode: pc } = t;
590
+ // NZ addresses are written mixed-case ("PO Box 4099, Timaru 7942") — no region line (ADV358).
591
+ const base = { po_box: phrase, locality, postcode: pc };
592
+ const r = random();
593
+ if (r < NZ_STANDARD_CUTOFF)
594
+ return { fmt: "nz-standard", raw: `${phrase}, ${locality} ${pc}`, components: base };
595
+ if (r < NZ_NO_POSTCODE_CUTOFF)
596
+ return { fmt: "nz-no-postcode", raw: `${phrase}, ${locality}`, components: { po_box: phrase, locality } };
597
+ if (r < NZ_BARE_CUTOFF)
598
+ return { fmt: "nz-bare", raw: phrase, components: { po_box: phrase } };
599
+ const v = pick(VENUES_EN, random);
600
+ return { fmt: "nz-venue", raw: `${v}, ${phrase}, ${locality} ${pc}`, components: { venue: v, ...base } };
601
+ }
602
+ // ── Component ordering ───────────────────────────────────────────────────────────────────────────
603
+ /**
604
+ * Order components so short, collision-prone needles (2-letter regions) are located AFTER the long anchored ones —
605
+ * alignRow claims spans greedily in insertion order, and a leading "on" inside "London" must already be claimed by
606
+ * `locality` before `region: "ON"` goes looking.
607
+ */
608
+ const COMPONENT_ORDER = ["house_number", "street", "po_box", "venue", "locality", "postcode", "region", "cedex"];
609
+ function orderComponents(components) {
610
+ const out = {};
611
+ for (const k of COMPONENT_ORDER) {
612
+ const v = components[k];
613
+ if (v) {
614
+ out[k] = v;
615
+ }
616
+ }
617
+ return out;
618
+ }
619
+ /**
620
+ * Slice recipe registered with the corpus builder — see the file header for the parse behaviour it exists to exercise,
621
+ * and `description` below for the surface form it generates.
622
+ */
623
+ export const poBoxCedexRecipe = {
624
+ name: "po-box-cedex",
625
+ description: "PO box / CEDEX coverage rows (US/FR/CA/AU/NZ) — self-generated from cached OA + GeoNames pools",
626
+ mode: "generate",
627
+ options: [{ flag: "--golden", description: "Emit the leakage-safe holdout variant ({raw, components, country})" }],
628
+ async run(opts, write) {
629
+ const random = makeMulberry32(opts.seed);
630
+ const count = opts.count ?? 50_000;
631
+ const source = opts.sourceName ?? "synth-po-box-cedex";
632
+ // US pool: VT only for golden, non-VT for train (the established geographic holdout).
633
+ const usPool = [];
634
+ for (const s of opts.golden ? [US_EVAL_SOURCE] : US_TRAIN_SOURCES) {
635
+ const t = await readUsTuples(s);
636
+ console.error(` ${s.csv}: ${t.length} tuples`);
637
+ for (const x of t) {
638
+ usPool.push(x);
639
+ }
640
+ }
641
+ // FR + CA pools: stable locality-hash holdout (golden gets hash%10==0, train the rest).
642
+ const frAll = await readFrTuples(80_000);
643
+ const frPool = frAll.filter((t) => isHoldoutLocality(t.locality) === opts.golden);
644
+ console.error(` ${FR_SOURCE.csv}: ${frAll.length} tuples (${frPool.length} after holdout split)`);
645
+ const qcAll = await readCaLocalities("10");
646
+ const onAll = await readCaLocalities("08");
647
+ const qcPool = qcAll.filter((l) => isHoldoutLocality(l) === opts.golden);
648
+ const onPool = onAll.filter((l) => isHoldoutLocality(l) === opts.golden);
649
+ console.error(` GeoNames CA: QC ${qcAll.length}→${qcPool.length}, ON ${onAll.length}→${onPool.length}`);
650
+ // AU/NZ pools: same stable locality-hash holdout as FR/CA.
651
+ const auAll = (await readPostalTuples(GEONAMES_POSTAL_AU, { withState: true }));
652
+ const nzAll = (await readPostalTuples(GEONAMES_POSTAL_NZ, { withState: false }));
653
+ const auPool = auAll.filter((t) => isHoldoutLocality(t.locality) === opts.golden);
654
+ const nzPool = nzAll.filter((t) => isHoldoutLocality(t.locality) === opts.golden);
655
+ console.error(` GeoNames postal: AU ${auAll.length}→${auPool.length}, NZ ${nzAll.length}→${nzPool.length}`);
656
+ if (!usPool.length || !frPool.length || !qcPool.length || !onPool.length || !auPool.length || !nzPool.length) {
657
+ throw new Error(`A base pool is empty — check ${dataRootPath("oa-cache")}, ${GEONAMES_CA}, ${GEONAMES_POSTAL_AU.zip}, and ${GEONAMES_POSTAL_NZ.zip}.`);
658
+ }
659
+ const pickClass = (r) => {
660
+ let acc = 0;
661
+ for (const [name, w] of CLASS_MIX) {
662
+ acc += w;
663
+ if (r < acc)
664
+ return name;
665
+ }
666
+ return CLASS_MIX.at(-1)[0];
667
+ };
668
+ let emitted = 0;
669
+ let skipped = 0;
670
+ let guard = 0;
671
+ while (emitted < count && guard++ < count * 10) {
672
+ const cls = pickClass(random());
673
+ let rendered;
674
+ let country;
675
+ let locale;
676
+ if (cls === "po-box-us") {
677
+ rendered = renderPoBoxUs(random, pick(usPool, random));
678
+ country = "US";
679
+ locale = "en-US";
680
+ }
681
+ else if (cls === "pmb-us") {
682
+ const t = pick(usPool, random);
683
+ if (!t.postcode || !t.street || !t.house_number)
684
+ continue;
685
+ rendered = renderPmbUs(random, t);
686
+ country = "US";
687
+ locale = "en-US";
688
+ }
689
+ else if (cls === "bp-fr") {
690
+ rendered = renderBpFr(random, pick(frPool, random));
691
+ country = "FR";
692
+ locale = "fr-FR";
693
+ }
694
+ else if (cls === "cedex-fr") {
695
+ rendered = renderCedexFr(random, pick(frPool, random));
696
+ country = "FR";
697
+ locale = "fr-FR";
698
+ }
699
+ else if (cls === "cp-ca-fr") {
700
+ rendered = renderCaFr(random, pick(qcPool, random));
701
+ country = "CA";
702
+ locale = "fr-CA";
703
+ }
704
+ else if (cls === "po-box-au") {
705
+ rendered = renderAUPoBox(random, pick(auPool, random));
706
+ country = "AU";
707
+ locale = "en-AU";
708
+ }
709
+ else if (cls === "po-box-nz") {
710
+ rendered = renderNZPoBox(random, pick(nzPool, random));
711
+ country = "NZ";
712
+ locale = "en-NZ";
713
+ }
714
+ else if (cls === "po-box-us-military") {
715
+ // #517: self-contained (no real-tuple tail) — APO/FPO/DPO locality + AA/AE/AP region + theatre
716
+ // ZIP, codex-backed. Strip the synthesizer's `country` field (the build sets country below).
717
+ const m = synthesizeMilitaryPoBoxRow({ random });
718
+ const { country: _c, ...comps } = m.components;
719
+ rendered = { fmt: "po-box-military", raw: m.raw, components: comps };
720
+ country = "US";
721
+ locale = "en-US";
722
+ }
723
+ else {
724
+ rendered = renderCaEn(random, pick(onPool, random));
725
+ country = "CA";
726
+ locale = "en-CA";
727
+ }
728
+ const { raw, components } = rendered;
729
+ // Every component surface must survive verbatim in raw, else alignment can't label it.
730
+ if (!Object.values(components).every((s) => raw.includes(s))) {
731
+ skipped++;
732
+ continue;
733
+ }
734
+ if (opts.golden) {
735
+ write(JSON.stringify({ raw, components: orderComponents(components), country }) + "\n");
736
+ emitted++;
737
+ continue;
738
+ }
739
+ const canonical = {
740
+ raw,
741
+ components: orderComponents(components),
742
+ country,
743
+ locale,
744
+ source,
745
+ source_id: sliceSourceID(source, components),
746
+ corpus_version: "0.4.0",
747
+ license: country === "CA"
748
+ ? "GeoNames CA (CC-BY 4.0) locality skeletons + Canada Post box forms (corpus templates); postcodes synthesized to the codex CA pattern"
749
+ : country === "FR"
750
+ ? "OpenAddresses FR (BAN-derived) skeletons + La Poste BP/CEDEX forms (corpus templates, NF Z 10-011)"
751
+ : country === "AU"
752
+ ? "GeoNames AU postal dump (CC-BY 4.0) locality/state/postcode tails + Australia Post Postal Delivery Type designators (@mailwoman/codex/au)"
753
+ : country === "NZ"
754
+ ? "GeoNames NZ postal dump (CC-BY 4.0) locality/postcode tails + NZ Post ADV358 Delivery Service Types (@mailwoman/codex/nz)"
755
+ : "OpenAddresses US (non-VT) skeletons + USPS Pub-28 §29 PO-box designators (codex/corpus templates)",
756
+ };
757
+ const aligned = alignRow(canonical);
758
+ if (aligned.kind !== "labeled" || !aligned.row) {
759
+ skipped++;
760
+ continue;
761
+ }
762
+ write(JSON.stringify({ ...aligned.row, synth_method: cls, synth_base_id: null }) + "\n");
763
+ emitted++;
764
+ }
765
+ return { emitted, skipped };
766
+ },
767
+ };
768
+ //# sourceMappingURL=po-box-cedex.js.map