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