@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
@@ -0,0 +1,126 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ *
6
+ * Re-fetch the NPPES (National Plan and Provider Enumeration System) full monthly data
7
+ * dissemination file. ~7M provider rows with venue+address data. Source for the `usgov-nppes`
8
+ * adapter. US Public Domain.
9
+ *
10
+ * The file is published monthly by CMS. This module discovers the current filename by scraping the
11
+ * NPI_Files.html index, then downloads the ZIP and extracts only the main registry CSV
12
+ * (npidata_pfile_*.csv). The smaller endpoint/othername/pl files stay zipped — we don't need them.
13
+ *
14
+ * Uses Node's built-in fetch (gzip/brotli) to parse the HTML index and download the ZIP, and
15
+ * streaming sha256 instead of sha256sum. The ZIP is unpacked with the `unzip` binary via
16
+ * `node:child_process` (no clean Node equivalent for member listing + selective extraction). NOTE:
17
+ * the old bash fetcher used `curl --continue-at -` to resume a partial download; native fetch has
18
+ * no resume, so a partial run re-downloads from the start.
19
+ *
20
+ * Invoke via `mailwoman corpus fetch nppes --out-root <path>`. Idempotent: if dest CSV exists and
21
+ * sha256 matches MANIFEST, skips download.
22
+ */
23
+ /* oxlint-disable sister-software/prefer-region-over-marks -- these markers label steps inside one
24
+ procedure, not sections of declarations. A region there folds nothing a reader wants folded. */
25
+ import { APIClient, pluckResponseData } from "@mailwoman/core/api";
26
+ import { statPath, pathExists } from "@mailwoman/core/fs/readers";
27
+ import { makeDirectories, removePathIfPresent } from "@mailwoman/core/fs/writers";
28
+ import { extractZipEntry, listZipEntries } from "@mailwoman/core/fs/zip";
29
+ import { sha256File } from "@mailwoman/core/hash";
30
+ import { basename, join } from "path-ts";
31
+ import { downloadToFile, readManifest, writeManifest } from "#tools/fetch/download";
32
+ const INDEX_URL = "https://download.cms.gov/nppes/NPI_Files.html";
33
+ const BASE_URL = "https://download.cms.gov/nppes";
34
+ const SLUG = "usgov-nppes";
35
+ /**
36
+ * Scrape the NPI_Files.html index for the latest full monthly ZIP. Full-replacement files match
37
+ * `NPPES_Data_Dissemination_<Month>_<Year>*.zip`; weekly files carry a `MMDDYY_MMDDYY` date range, which we exclude.
38
+ */
39
+ async function discoverLatestZip() {
40
+ // `responseType: "text"` — the index is HTML, scraped by regex below.
41
+ const html = await new APIClient({
42
+ displayName: "nppes-index",
43
+ retry: true,
44
+ axios: { headers: { "Accept-Encoding": "gzip, br" } },
45
+ })
46
+ .fetch({ url: INDEX_URL, responseType: "text", timeout: 60_000 })
47
+ .then(pluckResponseData);
48
+ for (const match of html.matchAll(/NPPES_Data_Dissemination_[A-Za-z]+_\d{4}[^"]*\.zip/g)) {
49
+ const name = match[0];
50
+ if (name && !/\d{6}_\d{6}/.test(name))
51
+ return name;
52
+ }
53
+ return undefined;
54
+ }
55
+ /**
56
+ * The main registry CSV (npidata_pfile_*.csv), which the archive also carries alongside a header file and a per-month
57
+ * change file.
58
+ */
59
+ async function findNpidataCSV(zipPath) {
60
+ const entries = await listZipEntries(zipPath);
61
+ return entries.find((entry) => /npidata_pfile\S+\.csv/i.test(entry.name))?.name;
62
+ }
63
+ export async function fetchNPPES(options, report) {
64
+ const destDir = join(options.outRoot, SLUG);
65
+ await makeDirectories(destDir);
66
+ const manifestPath = join(destDir, "MANIFEST.json");
67
+ report?.(`=== ${SLUG}`);
68
+ report?.(` Discovering latest full-replacement ZIP from ${INDEX_URL} ...`);
69
+ const zipFilename = await discoverLatestZip();
70
+ if (!zipFilename) {
71
+ report?.(` ✗ Could not discover ZIP filename from ${INDEX_URL}`);
72
+ return { fetched: 0, skipped: 0, failed: 1, failedCodes: [SLUG] };
73
+ }
74
+ const zipURL = `${BASE_URL}/${zipFilename}`;
75
+ const zipDest = join(destDir, zipFilename);
76
+ report?.(` Latest full file: ${zipFilename}`);
77
+ // Idempotency check: if the main CSV already exists and sha matches,
78
+ // skip re-download.
79
+ const recorded = await readManifest(manifestPath);
80
+ if (recorded?.sha256 && recorded.filename) {
81
+ const recordedPath = join(destDir, recorded.filename);
82
+ if ((await pathExists(recordedPath)) && (await sha256File(recordedPath)) === recorded.sha256) {
83
+ report?.(" ✓ Already current (sha256 matches MANIFEST) — skipping download.");
84
+ return { fetched: 0, skipped: 1, failed: 0, failedCodes: [] };
85
+ }
86
+ }
87
+ // MARK: Download ZIP (large; 60-minute timeout)
88
+ report?.(` Downloading ${zipURL} ...`);
89
+ const { bytes: zipSize } = await downloadToFile({
90
+ url: zipURL,
91
+ dest: zipDest,
92
+ timeoutMs: 3_600_000,
93
+ headers: { "Accept-Encoding": "gzip, br" },
94
+ report,
95
+ });
96
+ report?.(` Downloaded: ${(zipSize / 1024 / 1024).toFixed(1)} MB`);
97
+ // MARK: Extract only the main registry CSV (npidata_pfile_*.csv)
98
+ report?.(" Extracting npidata_pfile CSV from ZIP ...");
99
+ const csvName = await findNpidataCSV(zipDest);
100
+ if (!csvName) {
101
+ report?.(" ✗ Could not find npidata_pfile CSV inside ZIP");
102
+ return { fetched: 0, skipped: 0, failed: 1, failedCodes: [SLUG] };
103
+ }
104
+ report?.(` Extracting: ${csvName}`);
105
+ const csvDest = join(destDir, basename(csvName));
106
+ await extractZipEntry(zipDest, csvName, csvDest);
107
+ const csvSize = (await statPath(csvDest)).size;
108
+ const csvSha = await sha256File(csvDest);
109
+ report?.(` CSV size: ${(csvSize / 1024 / 1024).toFixed(1)} MB`);
110
+ // MARK: Remove the ZIP to reclaim ~1 GB
111
+ await removePathIfPresent(zipDest);
112
+ report?.(" Removed ZIP (CSV kept)");
113
+ // MARK: Write MANIFEST (records the extracted CSV, not the ZIP)
114
+ const manifest = {
115
+ source_url: zipURL,
116
+ downloaded_at: new Date().toISOString(),
117
+ filename: csvName,
118
+ sha256: csvSha,
119
+ bytes: csvSize,
120
+ };
121
+ await writeManifest(manifestPath, manifest);
122
+ report?.(` ✓ ${(csvSize / 1024 / 1024).toFixed(1)} MB sha256=${csvSha}`);
123
+ report?.(` MANIFEST written to ${manifestPath}`);
124
+ return { fetched: 1, skipped: 0, failed: 0, failedCodes: [] };
125
+ }
126
+ //# sourceMappingURL=nppes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nppes.js","sourceRoot":"","sources":["../../../lib/tools/fetch/nppes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { BaseFetchOptions, FetchSummary } from "#tools/fetch/download";
2
+ export interface FetchOpenAddressesOptions extends BaseFetchOptions {
3
+ /**
4
+ * OA country collection code. Default `ca`.
5
+ */
6
+ country?: string;
7
+ }
8
+ export declare function fetchOpenAddresses(options: FetchOpenAddressesOptions, report?: (line: string) => void): Promise<FetchSummary>;
9
+ //# sourceMappingURL=openaddresses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openaddresses.d.ts","sourceRoot":"","sources":["../../../lib/tools/fetch/openaddresses.ts"],"names":[],"mappings":"AAiEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAgC3E,MAAM,WAAW,yBAA0B,SAAQ,gBAAgB;IAClE;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB;AA0CD,wBAAsB,kBAAkB,CACvC,OAAO,EAAE,yBAAyB,EAClC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC7B,OAAO,CAAC,YAAY,CAAC,CAuMvB"}
@@ -0,0 +1,279 @@
1
+ import { APIClient, isSuccessStatus } from "@mailwoman/core/api";
2
+ /**
3
+ * @copyright Sister Software
4
+ * @license AGPL-3.0
5
+ * @author Teffen Ellis, et al.
6
+ *
7
+ * Fetch an OpenAddresses country collection from batch.openaddresses.io.
8
+ *
9
+ * Source: https://batch.openaddresses.io
10
+ * License: MIXED — OpenAddresses aggregates hundreds of upstream sources with per-source licenses
11
+ * (CC-BY, CC0, PDDL, ODbL, CC-BY-SA, and proprietary attribution-only). The per-row LICENSE filter
12
+ * in the openaddresses adapter is essential for proprietary-weights training: Tier-C rows (ODbL,
13
+ * CC-BY-SA, CC-SA) are dropped at ingest by default. This module downloads the raw collection; the
14
+ * adapter does the license filtering.
15
+ *
16
+ * Native `fetch` streams the download to disk (no curl + Python subprocess tax);
17
+ * `node:child_process` keeps the genuine shell ops it still needs (`file` magic detection +
18
+ * `gunzip` decompression, both nice/ionice-deprioritized).
19
+ *
20
+ * ## Authentication note (2026-05-18)
21
+ *
22
+ * The batch.openaddresses.io download endpoint now requires a registered account. Downloads are
23
+ * still free at the "basic" tier (GeoJSON+LD output).
24
+ *
25
+ * 1. Register at https://batch.openaddresses.io/register
26
+ * 2. Log in and go to Profile → "Create Token"
27
+ * 3. Export the token: `export OA_BATCH_TOKEN=<your-token>`
28
+ * 4. Re-run the command.
29
+ *
30
+ * The collection URL pattern (verified 2026-05-18):
31
+ *
32
+ * - `POST /api/login {username, password}` → `{token}`
33
+ * - `GET /api/job/{job_id}/output/source.geojson.gz?token={token}`
34
+ *
35
+ * Collections are downloaded as a combined GeoJSON.gz via:
36
+ *
37
+ * - `GET /api/collections/{collection_id}/download` (returns a redirect to S3)
38
+ *
39
+ * Collection IDs discovered from `/api/collections`:
40
+ *
41
+ * - `id=6 name="ca" size=2044467556` (~1.9 GiB uncompressed, verified 2026-05-18)
42
+ *
43
+ * ## Usage
44
+ *
45
+ * ```sh
46
+ * # With token (preferred). Default country: ca. Supports any OA country code (us-west, fr, …)
47
+ * OA_BATCH_TOKEN=<token> mailwoman corpus fetch openaddresses --country ca \
48
+ * --out-root $MAILWOMAN_DATA_ROOT/corpus/sources
49
+ *
50
+ * # Without token (will detect + print instructions, then report the failure):
51
+ * mailwoman corpus fetch openaddresses --country ca
52
+ * ```
53
+ */
54
+ /* oxlint-disable sister-software/prefer-region-over-marks -- these markers label steps inside one
55
+ procedure, not sections of declarations. A region there folds nothing a reader wants folded. */
56
+ import { ByteFormatter } from "@mailwoman/core/fs/formatters";
57
+ import { statPath, pathExists } from "@mailwoman/core/fs/readers";
58
+ import { openReadStream, openWriteStream, pipeline } from "@mailwoman/core/fs/streams";
59
+ import { movePath, removePathIfPresent, makeDirectories } from "@mailwoman/core/fs/writers";
60
+ import { sha256File } from "@mailwoman/core/hash";
61
+ import { runFile, spawnProcess } from "@mailwoman/core/process";
62
+ import { isoSeconds } from "@mailwoman/core/utils";
63
+ import { join } from "path-ts";
64
+ import { $private } from "#env";
65
+ import { streamDownload, writeManifest } from "#tools/fetch/download";
66
+ /**
67
+ * Bytes per KiB — the divisor for human-readable sizes, and the floor below which a "download" is an error page rather
68
+ * than data.
69
+ */
70
+ /**
71
+ * A successful fetch; anything else is an error page or a redirect we did not follow.
72
+ */
73
+ const HTTP_OK = 200;
74
+ /**
75
+ * Smallest plausible OpenAddresses slice. Below 10 KiB the file is a stub or an error body.
76
+ */
77
+ const MIN_PLAUSIBLE_SLICE_BYTES = 10_240;
78
+ const OA_BASE = "https://batch.openaddresses.io";
79
+ /**
80
+ * Collection IDs known as of 2026-05-18 (discovered via `GET /api/collections`). OA assigns stable integer IDs to each
81
+ * country collection; re-check `GET /api/collections` if a new country is needed and the ID is unknown.
82
+ */
83
+ const OA_COLLECTION_IDS = {
84
+ ca: 6,
85
+ "us-west": 4,
86
+ "us-south": 3,
87
+ "us-northeast": 2,
88
+ "us-midwest": 5,
89
+ global: 1,
90
+ };
91
+ /**
92
+ * Stream-count newlines, matching `wc -l` (memory-safe for the multi-GB collection).
93
+ */
94
+ async function countLines(path) {
95
+ let count = 0;
96
+ for await (const chunk of openReadStream(path)) {
97
+ for (const byte of chunk) {
98
+ if (byte === 0x0a) {
99
+ count++;
100
+ }
101
+ }
102
+ }
103
+ return count;
104
+ }
105
+ /**
106
+ * Decompress `src` → `dest` with the same deprioritized subprocess the old fetcher used.
107
+ */
108
+ async function gunzipToFile(src, dest) {
109
+ const child = spawnProcess("nice", ["-n", "15", "ionice", "-c", "3", "gunzip", "-c", src], {
110
+ stdio: ["ignore", "pipe", "inherit"],
111
+ });
112
+ await pipeline(child.stdout, openWriteStream(dest));
113
+ await new Promise((resolve, reject) => {
114
+ child.on("close", (code) => (code === 0 ? resolve() : reject(new Error(`gunzip exited with code ${code}`))));
115
+ child.on("error", reject);
116
+ });
117
+ }
118
+ export async function fetchOpenAddresses(options, report) {
119
+ const country = options.country ?? "ca";
120
+ const token = $private.OA_BATCH_TOKEN;
121
+ const destDir = join(options.outRoot, "openaddresses", country);
122
+ const manifestPath = join(destDir, "MANIFEST.json");
123
+ const outputFile = join(destDir, "collection.geojsonl");
124
+ const fail = (code) => ({ fetched: 0, skipped: 0, failed: 1, failedCodes: [code] });
125
+ report?.(`=== fetch openaddresses: country=${country}`);
126
+ report?.(` dest: ${destDir}`);
127
+ await makeDirectories(destDir);
128
+ // MARK: Authentication check
129
+ if (!token) {
130
+ report?.(`
131
+ ERROR: OA_BATCH_TOKEN is not set.
132
+
133
+ As of 2026-05-18, batch.openaddresses.io requires a registered (free) account
134
+ to download collection files. Data remains openly licensed — the auth gate
135
+ is there to prevent CDN abuse, not to restrict access.
136
+
137
+ Steps to get a token:
138
+ 1. Register at: https://batch.openaddresses.io/register
139
+ 2. Verify your email and log in.
140
+ 3. Go to Profile → "Create Token" → copy the token.
141
+ 4. Export it in this shell:
142
+ export OA_BATCH_TOKEN=<your-token>
143
+ 5. Re-run this command.
144
+
145
+ The Canada collection (ca) is ~2 GiB compressed / ~7 GiB uncompressed
146
+ (estimated), so budget ~20–45 minutes at typical cloud-to-host bandwidth.
147
+ `);
148
+ return fail("OA_BATCH_TOKEN");
149
+ }
150
+ // MARK: Determine collection ID
151
+ let collectionID = OA_COLLECTION_IDS[country];
152
+ if (collectionID === undefined) {
153
+ report?.(`Unknown country code '${country}'. Fetching collection list to find ID...`);
154
+ // The collections API only. The COLLECTION ARCHIVES stay on raw `fetch` — they stream multi-gigabyte
155
+ // bodies straight to disk, where response caching is nonsense and axios would buffer them in memory.
156
+ const res = await new APIClient({
157
+ displayName: "openaddresses-api",
158
+ retry: true,
159
+ axios: { headers: { Authorization: `Bearer ${token}`, "Accept-Encoding": "gzip, br" } },
160
+ })
161
+ // `validateStatus` keeps a non-2xx as a RESPONSE rather than a throw: the caller reports the status and
162
+ // returns `fail(country)`, a graceful path this must not turn into an exception.
163
+ .fetch({
164
+ url: `${OA_BASE}/api/collections`,
165
+ timeout: 30_000,
166
+ validateStatus: () => true,
167
+ });
168
+ if (!isSuccessStatus(res.status)) {
169
+ report?.(`ERROR: GET /api/collections returned HTTP ${res.status}.`);
170
+ return fail(country);
171
+ }
172
+ const collections = res.data;
173
+ const match = collections.find((item) => item.name === country);
174
+ if (match?.id === undefined) {
175
+ report?.(`ERROR: Could not find a collection named '${country}' in GET /api/collections.`);
176
+ report?.(`Available collections:`);
177
+ for (const item of collections) {
178
+ const size = (item.size ?? 0).toLocaleString();
179
+ report?.(` ${(item.name ?? "").padEnd(20)} id=${item.id} ${item.human ?? ""} size=${size} bytes`);
180
+ }
181
+ return fail(country);
182
+ }
183
+ collectionID = match.id;
184
+ report?.(` Found collection id=${collectionID} for '${country}'`);
185
+ }
186
+ // MARK: Download via the collections download endpoint (302s to S3)
187
+ report?.(` Resolving download URL for collection id=${collectionID}...`);
188
+ report?.(` Attempting authenticated download...`);
189
+ const tmpGz = join(destDir, "collection.geojsonl.gz.tmp");
190
+ const tmpRaw = join(destDir, "collection.geojsonl.tmp");
191
+ const sourceURL = `${OA_BASE}/api/collections/${collectionID}/download`;
192
+ let httpStatus = await streamDownload(sourceURL, tmpGz, {
193
+ headers: { Authorization: `Bearer ${token}` },
194
+ timeoutMs: 7_200_000,
195
+ retries: 3,
196
+ retryDelayMs: 30_000,
197
+ });
198
+ if (httpStatus !== HTTP_OK) {
199
+ // Try the geojsonl.gz directly with token as query param (alternate URL shape).
200
+ httpStatus = await streamDownload(`${OA_BASE}/api/collections/${collectionID}/geojsonl.gz?token=${token}`, tmpGz, {
201
+ timeoutMs: 7_200_000,
202
+ retries: 3,
203
+ retryDelayMs: 30_000,
204
+ });
205
+ }
206
+ if (httpStatus !== HTTP_OK) {
207
+ await removePathIfPresent(tmpGz);
208
+ report?.(`
209
+ ERROR: Download returned HTTP ${httpStatus}.
210
+
211
+ Likely causes:
212
+ 1. OA_BATCH_TOKEN is invalid or expired — re-create it at Profile → Tokens.
213
+ 2. The collection download endpoint URL has changed (this module was written
214
+ against the 2026-05-18 batch.openaddresses.io API; it may need updating).
215
+ 3. Network error or CDN outage.
216
+
217
+ Manual download (after logging in to batch.openaddresses.io):
218
+ - Navigate to https://batch.openaddresses.io/collection/${collectionID}
219
+ - Click "GeoJSON+LD" to download the collection.
220
+ - Save as: ${outputFile}
221
+
222
+ URL tried: ${OA_BASE}/api/collections/${collectionID}/download
223
+ `);
224
+ return fail(country);
225
+ }
226
+ // MARK: Decompress if the downloaded file is gzipped
227
+ const fileMagic = (await runFile("file", ["--brief", tmpGz]).catch(() => ({ stdout: "" }))).stdout;
228
+ if (/gzip|compressed/i.test(fileMagic)) {
229
+ report?.(` Decompressing gzip archive...`);
230
+ await gunzipToFile(tmpGz, tmpRaw);
231
+ await removePathIfPresent(tmpGz);
232
+ await movePath(tmpRaw, outputFile);
233
+ }
234
+ else if (/JSON|ASCII|UTF-8/i.test(fileMagic)) {
235
+ // Already line-delimited GeoJSON.
236
+ await movePath(tmpGz, outputFile);
237
+ await removePathIfPresent(tmpRaw);
238
+ }
239
+ else {
240
+ // Unknown type — keep as-is and let the operator inspect.
241
+ await movePath(tmpGz, outputFile);
242
+ report?.(` WARNING: Downloaded file type is '${fileMagic.trim()}' — may need manual decompression.`);
243
+ }
244
+ // MARK: Verify + write MANIFEST
245
+ if (!(await pathExists(outputFile))) {
246
+ report?.(`ERROR: Output file not found at ${outputFile} after download.`);
247
+ return fail(country);
248
+ }
249
+ const size = (await statPath(outputFile)).size;
250
+ if (size < MIN_PLAUSIBLE_SLICE_BYTES) {
251
+ report?.(`ERROR: File is suspiciously small (${size} bytes) — likely an error response.`);
252
+ return fail(country);
253
+ }
254
+ const sha = await sha256File(outputFile);
255
+ const rowCount = await countLines(outputFile);
256
+ const downloadedAt = isoSeconds();
257
+ const manifest = {
258
+ source_url: sourceURL,
259
+ collection_id: collectionID,
260
+ country,
261
+ filename: "collection.geojsonl",
262
+ downloaded_at: downloadedAt,
263
+ sha256: sha,
264
+ bytes: size,
265
+ row_count: rowCount,
266
+ notes: "batch.openaddresses.io requires a free registered account for downloads. License is mixed per-row; use the openaddresses adapter with allowShareAlike=false (default) to filter Tier-C rows.",
267
+ };
268
+ await writeManifest(manifestPath, manifest);
269
+ report?.(` ✓ ${ByteFormatter.formatIEC(size)} rows=${rowCount} sha256=${sha}`);
270
+ report?.(` MANIFEST written to ${manifestPath}`);
271
+ report?.(`=== done`);
272
+ report?.(`Feed to the adapter:`);
273
+ report?.(` mailwoman corpus run openaddresses \\`);
274
+ report?.(` --input ${outputFile} \\`);
275
+ report?.(` --country ${country.toUpperCase()} \\`);
276
+ report?.(` --output ${options.outRoot}`);
277
+ return { fetched: 1, skipped: 0, failed: 0, failedCodes: [] };
278
+ }
279
+ //# sourceMappingURL=openaddresses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openaddresses.js","sourceRoot":"","sources":["../../../lib/tools/fetch/openaddresses.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ *
6
+ * Fetch the OurAirports CSV dumps — the VENUE side of the sub-venue corpus arc (#35).
7
+ *
8
+ * Source : https://davidmegginson.github.io/ourairports-data/ (the project's own GitHub Pages
9
+ * mirror of the nightly export; `ourairports.com/data/` redirects here).
10
+ * License: PUBLIC DOMAIN. OurAirports places its data in the public domain and asks only for a
11
+ * courtesy credit — no attribution obligation rides on a derived slice, which makes this
12
+ * the one transport source in the arc with no licensing question at all. Tier A.
13
+ *
14
+ * ## What it is good for, and what it is not
15
+ *
16
+ * `airports.csv` is every airport on earth with ICAO/IATA codes, coordinates, `municipality`, and
17
+ * `iso_country` — 12.7 MB, ~83,000 rows as of 2026-08-04. That is the CONTAINING VENUE for a
18
+ * `<sub-venue>, <venue>, <street>, <locality>, <postcode>` corpus line, and it is better at that job
19
+ * than OSM: every row is named, the name is canonical, and `municipality` gives the locality without
20
+ * a spatial join.
21
+ *
22
+ * It carries NO interior structure. There is no terminal, concourse, gate or pier table — the
23
+ * corpus task says as much ("Good for the venue side of each pair, weaker on interior structure")
24
+ * and a row-level read confirms it. Pair it with the OSM `aeroway` extractor
25
+ * (`@mailwoman/osm/sdk`'s `extractOSMSubVenues`), which is where the sub-venue half comes from.
26
+ *
27
+ * ## Why `downloadToFile` and not `APIClient`
28
+ *
29
+ * `AGENTS.md` routes HTTP through `APIClient`, and that rule is about API REQUESTS — small bodies,
30
+ * repeated calls, rate-limited hosts. This is four static file transfers against a GitHub Pages CDN
31
+ * with no rate limit and nothing to pace, run once per refresh. It uses the same `downloadToFile`
32
+ * every other module in this `fetch/` family uses, which is where the retry and timeout live.
33
+ * The Wikidata sibling (`wikidata-subvenue.ts`) IS an API client and is built on `APIClient`
34
+ * accordingly; the split between the two is the one `AGENTS.md` draws.
35
+ *
36
+ * Invoke via `mailwoman corpus fetch ourairports --out-root <path>`.
37
+ */
38
+ import type { BaseFetchOptions, FetchSummary } from "#tools/fetch/download";
39
+ export type FetchOurAirportsOptions = BaseFetchOptions;
40
+ /**
41
+ * Download the OurAirports CSVs into `<outRoot>/ourairports/`, with a sibling `MANIFEST.json` carrying each file's
42
+ * origin URL, sha256, byte count and upstream `Last-Modified`.
43
+ */
44
+ export declare function fetchOurAirports(options: FetchOurAirportsOptions, report?: (line: string) => void): Promise<FetchSummary>;
45
+ //# sourceMappingURL=ourairports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ourairports.d.ts","sourceRoot":"","sources":["../../../lib/tools/fetch/ourairports.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAOH,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAsB3E,MAAM,MAAM,uBAAuB,GAAG,gBAAgB,CAAA;AAyCtD;;;GAGG;AACH,wBAAsB,gBAAgB,CACrC,OAAO,EAAE,uBAAuB,EAChC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC7B,OAAO,CAAC,YAAY,CAAC,CAwDvB"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ *
6
+ * Fetch the OurAirports CSV dumps — the VENUE side of the sub-venue corpus arc (#35).
7
+ *
8
+ * Source : https://davidmegginson.github.io/ourairports-data/ (the project's own GitHub Pages
9
+ * mirror of the nightly export; `ourairports.com/data/` redirects here).
10
+ * License: PUBLIC DOMAIN. OurAirports places its data in the public domain and asks only for a
11
+ * courtesy credit — no attribution obligation rides on a derived slice, which makes this
12
+ * the one transport source in the arc with no licensing question at all. Tier A.
13
+ *
14
+ * ## What it is good for, and what it is not
15
+ *
16
+ * `airports.csv` is every airport on earth with ICAO/IATA codes, coordinates, `municipality`, and
17
+ * `iso_country` — 12.7 MB, ~83,000 rows as of 2026-08-04. That is the CONTAINING VENUE for a
18
+ * `<sub-venue>, <venue>, <street>, <locality>, <postcode>` corpus line, and it is better at that job
19
+ * than OSM: every row is named, the name is canonical, and `municipality` gives the locality without
20
+ * a spatial join.
21
+ *
22
+ * It carries NO interior structure. There is no terminal, concourse, gate or pier table — the
23
+ * corpus task says as much ("Good for the venue side of each pair, weaker on interior structure")
24
+ * and a row-level read confirms it. Pair it with the OSM `aeroway` extractor
25
+ * (`@mailwoman/osm/sdk`'s `extractOSMSubVenues`), which is where the sub-venue half comes from.
26
+ *
27
+ * ## Why `downloadToFile` and not `APIClient`
28
+ *
29
+ * `AGENTS.md` routes HTTP through `APIClient`, and that rule is about API REQUESTS — small bodies,
30
+ * repeated calls, rate-limited hosts. This is four static file transfers against a GitHub Pages CDN
31
+ * with no rate limit and nothing to pace, run once per refresh. It uses the same `downloadToFile`
32
+ * every other module in this `fetch/` family uses, which is where the retry and timeout live.
33
+ * The Wikidata sibling (`wikidata-subvenue.ts`) IS an API client and is built on `APIClient`
34
+ * accordingly; the split between the two is the one `AGENTS.md` draws.
35
+ *
36
+ * Invoke via `mailwoman corpus fetch ourairports --out-root <path>`.
37
+ */
38
+ import { APIClient } from "@mailwoman/core/api";
39
+ import { makeDirectories } from "@mailwoman/core/fs/writers";
40
+ import { sha256File } from "@mailwoman/core/hash";
41
+ import { join } from "path-ts";
42
+ import { downloadToFile, writeManifest } from "#tools/fetch/download";
43
+ const SLUG = "ourairports";
44
+ /**
45
+ * The GitHub Pages mirror the project itself publishes. `ourairports.com/data/*.csv` 302s here, so pointing at the
46
+ * mirror directly saves a redirect and is the URL the project's own README gives.
47
+ */
48
+ const BASE_URL = "https://davidmegginson.github.io/ourairports-data";
49
+ /**
50
+ * The files worth having, and why each one.
51
+ *
52
+ * `airports.csv` is the payload. The other three are small joins that turn its codes into text: `countries.csv` and
53
+ * `regions.csv` expand `iso_country`/`iso_region` into names (a corpus line needs "Germany", not "DE"), and
54
+ * `runways.csv` is the only file carrying per-airport sub-structure of any kind — runway designators, which are NOT
55
+ * sub-venue designators (nobody addresses mail to a runway) but are worth having on disk as the negative class if the
56
+ * slice ever needs one.
57
+ */
58
+ const FILES = ["airports.csv", "countries.csv", "regions.csv", "runways.csv"];
59
+ /**
60
+ * Read the upstream `Last-Modified` with a HEAD. Returns `null` on any failure — provenance metadata is nice to have
61
+ * and must never fail a download that otherwise succeeded.
62
+ */
63
+ async function readLastModified(url) {
64
+ try {
65
+ const res = await new APIClient({ displayName: "ourairports", retry: true }).fetch({
66
+ url,
67
+ method: "head",
68
+ timeout: 30_000,
69
+ });
70
+ return res.headers["last-modified"] ?? null;
71
+ }
72
+ catch {
73
+ return null;
74
+ }
75
+ }
76
+ /**
77
+ * Download the OurAirports CSVs into `<outRoot>/ourairports/`, with a sibling `MANIFEST.json` carrying each file's
78
+ * origin URL, sha256, byte count and upstream `Last-Modified`.
79
+ */
80
+ export async function fetchOurAirports(options, report) {
81
+ const destDir = join(options.outRoot, SLUG);
82
+ await makeDirectories(destDir);
83
+ const entries = [];
84
+ const failedCodes = [];
85
+ let fetched = 0;
86
+ let failed = 0;
87
+ for (const filename of FILES) {
88
+ const url = `${BASE_URL}/${filename}`;
89
+ const dest = join(destDir, filename);
90
+ report?.(`=== ${SLUG} / ${filename}`);
91
+ try {
92
+ const [{ bytes }, lastModified] = await Promise.all([
93
+ downloadToFile({
94
+ url,
95
+ dest,
96
+ timeoutMs: 600_000,
97
+ retries: 2,
98
+ headers: { "Accept-Encoding": "gzip, br" },
99
+ report,
100
+ }),
101
+ readLastModified(url),
102
+ ]);
103
+ entries.push({
104
+ filename,
105
+ source_url: url,
106
+ sha256: await sha256File(dest),
107
+ bytes,
108
+ last_modified: lastModified,
109
+ });
110
+ fetched++;
111
+ }
112
+ catch (error) {
113
+ report?.(`✗ ${filename}: ${error instanceof Error ? error.message : String(error)}`);
114
+ failedCodes.push(filename);
115
+ failed++;
116
+ }
117
+ }
118
+ const manifest = {
119
+ source: "OurAirports",
120
+ base_url: BASE_URL,
121
+ license: "public domain (courtesy credit requested)",
122
+ downloaded_at: new Date().toISOString(),
123
+ files: entries,
124
+ };
125
+ await writeManifest(join(destDir, "MANIFEST.json"), manifest);
126
+ return { fetched, skipped: 0, failed, failedCodes };
127
+ }
128
+ //# sourceMappingURL=ourairports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ourairports.js","sourceRoot":"","sources":["../../../lib/tools/fetch/ourairports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface PPDExtractStats {
2
+ kept: number;
3
+ skippedSAON: number;
4
+ skippedPAON: number;
5
+ skippedNoStreet: number;
6
+ skippedNoPostcode: number;
7
+ }
8
+ /**
9
+ * Convert PPD rows (`id,price,date,postcode,type,new,tenure,PAON,SAON,street,locality,town,district,county,cat,status`
10
+ * — headerless) into OA-shaped tuple lines via `write`, applying the skip rules + title-casing. Accepts a plain array
11
+ * of rows (tests) or a streamed async source (the real 31M-row extraction).
12
+ */
13
+ export declare function extractPPDTuples(input: AsyncIterable<string[]> | Iterable<string[]>, write: (line: string) => void): Promise<PPDExtractStats>;
14
+ //# sourceMappingURL=ppd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ppd.d.ts","sourceRoot":"","sources":["../../../lib/tools/fetch/ppd.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,MAAM,CAAA;IACvB,iBAAiB,EAAE,MAAM,CAAA;CACzB;AAID;;;;GAIG;AACH,wBAAsB,gBAAgB,CACrC,KAAK,EAAE,aAAa,CAAC,MAAM,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EACnD,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC3B,OAAO,CAAC,eAAe,CAAC,CAwD1B"}