@mailwoman/corpus 8.6.0 → 9.0.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 (310) hide show
  1. package/README.md +1 -1
  2. package/out/src/adapter.d.ts +41 -0
  3. package/out/src/adapter.d.ts.map +1 -1
  4. package/out/src/adapter.js +46 -1
  5. package/out/src/adapter.js.map +1 -1
  6. package/out/src/adapters/ban/adapter.d.ts +4 -3
  7. package/out/src/adapters/ban/adapter.d.ts.map +1 -1
  8. package/out/src/adapters/ban/adapter.js +60 -67
  9. package/out/src/adapters/ban/adapter.js.map +1 -1
  10. package/out/src/adapters/ban/street-decompose.d.ts.map +1 -1
  11. package/out/src/adapters/ban/street-decompose.js +18 -25
  12. package/out/src/adapters/ban/street-decompose.js.map +1 -1
  13. package/out/src/adapters/fcc-bdc/adapter.d.ts +0 -6
  14. package/out/src/adapters/fcc-bdc/adapter.d.ts.map +1 -1
  15. package/out/src/adapters/fcc-bdc/adapter.js +2 -24
  16. package/out/src/adapters/fcc-bdc/adapter.js.map +1 -1
  17. package/out/src/adapters/geonames/adapter.d.ts.map +1 -1
  18. package/out/src/adapters/geonames/adapter.js +70 -76
  19. package/out/src/adapters/geonames/adapter.js.map +1 -1
  20. package/out/src/adapters/geonames-postal/adapter.d.ts.map +1 -1
  21. package/out/src/adapters/geonames-postal/adapter.js +44 -49
  22. package/out/src/adapters/geonames-postal/adapter.js.map +1 -1
  23. package/out/src/adapters/gnaf/adapter.d.ts.map +1 -1
  24. package/out/src/adapters/gnaf/adapter.js +4 -7
  25. package/out/src/adapters/gnaf/adapter.js.map +1 -1
  26. package/out/src/adapters/gnaf/assemble.d.ts.map +1 -1
  27. package/out/src/adapters/gnaf/assemble.js +6 -11
  28. package/out/src/adapters/gnaf/assemble.js.map +1 -1
  29. package/out/src/adapters/openaddresses/adapter.d.ts.map +1 -1
  30. package/out/src/adapters/openaddresses/adapter.js +2 -7
  31. package/out/src/adapters/openaddresses/adapter.js.map +1 -1
  32. package/out/src/adapters/overture/adapter.d.ts.map +1 -1
  33. package/out/src/adapters/overture/adapter.js +3 -7
  34. package/out/src/adapters/overture/adapter.js.map +1 -1
  35. package/out/src/adapters/state-hi-schools/adapter.d.ts.map +1 -1
  36. package/out/src/adapters/state-hi-schools/adapter.js +55 -73
  37. package/out/src/adapters/state-hi-schools/adapter.js.map +1 -1
  38. package/out/src/adapters/state-ia-contractors/adapter.d.ts.map +1 -1
  39. package/out/src/adapters/state-ia-contractors/adapter.js +58 -76
  40. package/out/src/adapters/state-ia-contractors/adapter.js.map +1 -1
  41. package/out/src/adapters/state-ny-notaries/adapter.d.ts.map +1 -1
  42. package/out/src/adapters/state-ny-notaries/adapter.js +67 -85
  43. package/out/src/adapters/state-ny-notaries/adapter.js.map +1 -1
  44. package/out/src/adapters/state-tx-notaries/adapter.d.ts.map +1 -1
  45. package/out/src/adapters/state-tx-notaries/adapter.js +69 -87
  46. package/out/src/adapters/state-tx-notaries/adapter.js.map +1 -1
  47. package/out/src/adapters/synth-po-box/adapter.d.ts.map +1 -1
  48. package/out/src/adapters/synth-po-box/adapter.js +7 -15
  49. package/out/src/adapters/synth-po-box/adapter.js.map +1 -1
  50. package/out/src/adapters/tiger/street-decompose.d.ts.map +1 -1
  51. package/out/src/adapters/tiger/street-decompose.js +18 -27
  52. package/out/src/adapters/tiger/street-decompose.js.map +1 -1
  53. package/out/src/adapters/usgov-hrsa-fqhc/adapter.d.ts +3 -3
  54. package/out/src/adapters/usgov-hrsa-fqhc/adapter.d.ts.map +1 -1
  55. package/out/src/adapters/usgov-hrsa-fqhc/adapter.js +62 -80
  56. package/out/src/adapters/usgov-hrsa-fqhc/adapter.js.map +1 -1
  57. package/out/src/adapters/usgov-imls-pls/adapter.d.ts.map +1 -1
  58. package/out/src/adapters/usgov-imls-pls/adapter.js +60 -82
  59. package/out/src/adapters/usgov-imls-pls/adapter.js.map +1 -1
  60. package/out/src/adapters/usgov-irs-bmf/adapter.d.ts.map +1 -1
  61. package/out/src/adapters/usgov-irs-bmf/adapter.js +58 -65
  62. package/out/src/adapters/usgov-irs-bmf/adapter.js.map +1 -1
  63. package/out/src/adapters/usgov-nad/adapter.d.ts.map +1 -1
  64. package/out/src/adapters/usgov-nad/adapter.js +5 -8
  65. package/out/src/adapters/usgov-nad/adapter.js.map +1 -1
  66. package/out/src/adapters/usgov-nppes/adapter.d.ts.map +1 -1
  67. package/out/src/adapters/usgov-nppes/adapter.js +58 -76
  68. package/out/src/adapters/usgov-nppes/adapter.js.map +1 -1
  69. package/out/src/adapters/usgov-samhsa-treatment-locator/adapter.d.ts.map +1 -1
  70. package/out/src/adapters/usgov-samhsa-treatment-locator/adapter.js +51 -71
  71. package/out/src/adapters/usgov-samhsa-treatment-locator/adapter.js.map +1 -1
  72. package/out/src/adapters/wof-admin-jp/adapter.d.ts.map +1 -1
  73. package/out/src/adapters/wof-admin-jp/adapter.js +24 -6
  74. package/out/src/adapters/wof-admin-jp/adapter.js.map +1 -1
  75. package/out/src/build.d.ts.map +1 -1
  76. package/out/src/build.js +2 -1
  77. package/out/src/build.js.map +1 -1
  78. package/out/src/golden.d.ts +5 -0
  79. package/out/src/golden.d.ts.map +1 -1
  80. package/out/src/golden.js +23 -9
  81. package/out/src/golden.js.map +1 -1
  82. package/out/src/parquet-wrapper/reader.d.ts +8 -0
  83. package/out/src/parquet-wrapper/reader.d.ts.map +1 -1
  84. package/out/src/parquet-wrapper/reader.js +16 -0
  85. package/out/src/parquet-wrapper/reader.js.map +1 -1
  86. package/out/src/parquet-wrapper/schema.d.ts +4 -0
  87. package/out/src/parquet-wrapper/schema.d.ts.map +1 -1
  88. package/out/src/parquet-wrapper/schema.js.map +1 -1
  89. package/out/src/parquet.d.ts.map +1 -1
  90. package/out/src/parquet.js +2 -13
  91. package/out/src/parquet.js.map +1 -1
  92. package/out/src/shard-recipes/anchor-absorption.d.ts.map +1 -1
  93. package/out/src/shard-recipes/anchor-absorption.js +2 -1
  94. package/out/src/shard-recipes/anchor-absorption.js.map +1 -1
  95. package/out/src/shard-recipes/country-balanced.d.ts.map +1 -1
  96. package/out/src/shard-recipes/country-balanced.js +68 -60
  97. package/out/src/shard-recipes/country-balanced.js.map +1 -1
  98. package/out/src/shard-recipes/fr-fragment.d.ts.map +1 -1
  99. package/out/src/shard-recipes/fr-fragment.js +8 -5
  100. package/out/src/shard-recipes/fr-fragment.js.map +1 -1
  101. package/out/src/shard-recipes/fr-order.d.ts.map +1 -1
  102. package/out/src/shard-recipes/fr-order.js +14 -58
  103. package/out/src/shard-recipes/fr-order.js.map +1 -1
  104. package/out/src/shard-recipes/german.d.ts.map +1 -1
  105. package/out/src/shard-recipes/german.js +11 -58
  106. package/out/src/shard-recipes/german.js.map +1 -1
  107. package/out/src/shard-recipes/index.d.ts.map +1 -1
  108. package/out/src/shard-recipes/index.js +2 -0
  109. package/out/src/shard-recipes/index.js.map +1 -1
  110. package/out/src/shard-recipes/intersection.d.ts +2 -2
  111. package/out/src/shard-recipes/intersection.d.ts.map +1 -1
  112. package/out/src/shard-recipes/intersection.js +24 -62
  113. package/out/src/shard-recipes/intersection.js.map +1 -1
  114. package/out/src/shard-recipes/locale.d.ts.map +1 -1
  115. package/out/src/shard-recipes/locale.js +14 -16
  116. package/out/src/shard-recipes/locale.js.map +1 -1
  117. package/out/src/shard-recipes/no-fragment.d.ts.map +1 -1
  118. package/out/src/shard-recipes/no-fragment.js +8 -5
  119. package/out/src/shard-recipes/no-fragment.js.map +1 -1
  120. package/out/src/shard-recipes/no-street-led.d.ts.map +1 -1
  121. package/out/src/shard-recipes/no-street-led.js +8 -5
  122. package/out/src/shard-recipes/no-street-led.js.map +1 -1
  123. package/out/src/shard-recipes/po-box-cedex.d.ts +3 -3
  124. package/out/src/shard-recipes/po-box-cedex.d.ts.map +1 -1
  125. package/out/src/shard-recipes/po-box-cedex.js +51 -94
  126. package/out/src/shard-recipes/po-box-cedex.js.map +1 -1
  127. package/out/src/shard-recipes/scaffold.d.ts +59 -9
  128. package/out/src/shard-recipes/scaffold.d.ts.map +1 -1
  129. package/out/src/shard-recipes/scaffold.js +51 -30
  130. package/out/src/shard-recipes/scaffold.js.map +1 -1
  131. package/out/src/shard-recipes/street-affix.d.ts.map +1 -1
  132. package/out/src/shard-recipes/street-affix.js +56 -82
  133. package/out/src/shard-recipes/street-affix.js.map +1 -1
  134. package/out/src/shard-recipes/sub-venue-sources.d.ts +231 -0
  135. package/out/src/shard-recipes/sub-venue-sources.d.ts.map +1 -0
  136. package/out/src/shard-recipes/sub-venue-sources.js +669 -0
  137. package/out/src/shard-recipes/sub-venue-sources.js.map +1 -0
  138. package/out/src/shard-recipes/sub-venue.d.ts +269 -0
  139. package/out/src/shard-recipes/sub-venue.d.ts.map +1 -0
  140. package/out/src/shard-recipes/sub-venue.js +709 -0
  141. package/out/src/shard-recipes/sub-venue.js.map +1 -0
  142. package/out/src/shard-recipes/unit.d.ts +1 -1
  143. package/out/src/shard-recipes/unit.d.ts.map +1 -1
  144. package/out/src/shard-recipes/unit.js +22 -64
  145. package/out/src/shard-recipes/unit.js.map +1 -1
  146. package/out/src/split.d.ts +7 -0
  147. package/out/src/split.d.ts.map +1 -1
  148. package/out/src/split.js +7 -0
  149. package/out/src/split.js.map +1 -1
  150. package/out/src/synthesize.d.ts.map +1 -1
  151. package/out/src/synthesize.js +1 -12
  152. package/out/src/synthesize.js.map +1 -1
  153. package/out/src/tools/align-shard.d.ts.map +1 -1
  154. package/out/src/tools/align-shard.js +3 -7
  155. package/out/src/tools/align-shard.js.map +1 -1
  156. package/out/src/tools/audit.d.ts.map +1 -1
  157. package/out/src/tools/audit.js +4 -4
  158. package/out/src/tools/audit.js.map +1 -1
  159. package/out/src/tools/corpus-stats.d.ts +2 -2
  160. package/out/src/tools/corpus-stats.d.ts.map +1 -1
  161. package/out/src/tools/corpus-stats.js +18 -31
  162. package/out/src/tools/corpus-stats.js.map +1 -1
  163. package/out/src/tools/fetch/download.d.ts.map +1 -1
  164. package/out/src/tools/fetch/download.js +5 -6
  165. package/out/src/tools/fetch/download.js.map +1 -1
  166. package/out/src/tools/fetch/imls-pls.d.ts.map +1 -1
  167. package/out/src/tools/fetch/imls-pls.js +2 -2
  168. package/out/src/tools/fetch/imls-pls.js.map +1 -1
  169. package/out/src/tools/fetch/index.d.ts +14 -1
  170. package/out/src/tools/fetch/index.d.ts.map +1 -1
  171. package/out/src/tools/fetch/index.js +14 -1
  172. package/out/src/tools/fetch/index.js.map +1 -1
  173. package/out/src/tools/fetch/nad.d.ts +1 -1
  174. package/out/src/tools/fetch/nad.js +1 -1
  175. package/out/src/tools/fetch/nppes.d.ts.map +1 -1
  176. package/out/src/tools/fetch/nppes.js +2 -1
  177. package/out/src/tools/fetch/nppes.js.map +1 -1
  178. package/out/src/tools/fetch/openaddresses.d.ts +1 -1
  179. package/out/src/tools/fetch/openaddresses.js +1 -1
  180. package/out/src/tools/fetch/ourairports.d.ts +45 -0
  181. package/out/src/tools/fetch/ourairports.d.ts.map +1 -0
  182. package/out/src/tools/fetch/ourairports.js +123 -0
  183. package/out/src/tools/fetch/ourairports.js.map +1 -0
  184. package/out/src/tools/fetch/wikidata-subvenue.d.ts +171 -0
  185. package/out/src/tools/fetch/wikidata-subvenue.d.ts.map +1 -0
  186. package/out/src/tools/fetch/wikidata-subvenue.js +275 -0
  187. package/out/src/tools/fetch/wikidata-subvenue.js.map +1 -0
  188. package/out/src/tools/golden-expand.d.ts.map +1 -1
  189. package/out/src/tools/golden-expand.js +18 -16
  190. package/out/src/tools/golden-expand.js.map +1 -1
  191. package/out/src/tools/golden-promote.d.ts.map +1 -1
  192. package/out/src/tools/golden-promote.js +12 -6
  193. package/out/src/tools/golden-promote.js.map +1 -1
  194. package/out/src/tools/golden-relabel-street.d.ts +196 -0
  195. package/out/src/tools/golden-relabel-street.d.ts.map +1 -0
  196. package/out/src/tools/golden-relabel-street.js +513 -0
  197. package/out/src/tools/golden-relabel-street.js.map +1 -0
  198. package/out/src/tools/index.d.ts +4 -0
  199. package/out/src/tools/index.d.ts.map +1 -1
  200. package/out/src/tools/index.js +4 -0
  201. package/out/src/tools/index.js.map +1 -1
  202. package/out/src/tools/jsonl-to-parquet.d.ts.map +1 -1
  203. package/out/src/tools/jsonl-to-parquet.js +3 -2
  204. package/out/src/tools/jsonl-to-parquet.js.map +1 -1
  205. package/out/src/tools/lint-shard-vocab.d.ts.map +1 -1
  206. package/out/src/tools/lint-shard-vocab.js +3 -2
  207. package/out/src/tools/lint-shard-vocab.js.map +1 -1
  208. package/out/src/tools/lint-shard.d.ts +3 -3
  209. package/out/src/tools/lint-shard.d.ts.map +1 -1
  210. package/out/src/tools/lint-shard.js +23 -32
  211. package/out/src/tools/lint-shard.js.map +1 -1
  212. package/out/src/tools/overlay-manifest.d.ts.map +1 -1
  213. package/out/src/tools/overlay-manifest.js +2 -1
  214. package/out/src/tools/overlay-manifest.js.map +1 -1
  215. package/out/src/tools/overture-subvenue.d.ts +112 -0
  216. package/out/src/tools/overture-subvenue.d.ts.map +1 -0
  217. package/out/src/tools/overture-subvenue.js +144 -0
  218. package/out/src/tools/overture-subvenue.js.map +1 -0
  219. package/out/src/tools/shard-kryptonite.d.ts +1 -1
  220. package/out/src/tools/shard-kryptonite.d.ts.map +1 -1
  221. package/out/src/tools/shard-kryptonite.js +5 -4
  222. package/out/src/tools/shard-kryptonite.js.map +1 -1
  223. package/out/src/tools/shard-translit.d.ts +6 -3
  224. package/out/src/tools/shard-translit.d.ts.map +1 -1
  225. package/out/src/tools/shard-translit.js +8 -6
  226. package/out/src/tools/shard-translit.js.map +1 -1
  227. package/out/src/tools/sub-venue-lexicon.d.ts +507 -0
  228. package/out/src/tools/sub-venue-lexicon.d.ts.map +1 -0
  229. package/out/src/tools/sub-venue-lexicon.js +817 -0
  230. package/out/src/tools/sub-venue-lexicon.js.map +1 -0
  231. package/out/src/tools/sub-venue-promotions.d.ts +94 -0
  232. package/out/src/tools/sub-venue-promotions.d.ts.map +1 -0
  233. package/out/src/tools/sub-venue-promotions.js +266 -0
  234. package/out/src/tools/sub-venue-promotions.js.map +1 -0
  235. package/out/src/wof-json.d.ts +2 -2
  236. package/out/src/wof-json.d.ts.map +1 -1
  237. package/out/src/wof-json.js +5 -8
  238. package/out/src/wof-json.js.map +1 -1
  239. package/package.json +8 -8
  240. package/src/adapter.ts +58 -1
  241. package/src/adapters/ban/adapter.ts +55 -65
  242. package/src/adapters/ban/street-decompose.ts +17 -25
  243. package/src/adapters/fcc-bdc/adapter.ts +2 -33
  244. package/src/adapters/geonames/adapter.ts +64 -72
  245. package/src/adapters/geonames-postal/adapter.ts +42 -50
  246. package/src/adapters/gnaf/adapter.ts +4 -7
  247. package/src/adapters/gnaf/assemble.ts +6 -10
  248. package/src/adapters/openaddresses/adapter.ts +2 -7
  249. package/src/adapters/overture/adapter.ts +3 -6
  250. package/src/adapters/state-hi-schools/adapter.ts +50 -73
  251. package/src/adapters/state-ia-contractors/adapter.ts +52 -76
  252. package/src/adapters/state-ny-notaries/adapter.ts +61 -85
  253. package/src/adapters/state-tx-notaries/adapter.ts +60 -84
  254. package/src/adapters/synth-po-box/adapter.ts +7 -17
  255. package/src/adapters/tiger/street-decompose.ts +21 -31
  256. package/src/adapters/usgov-hrsa-fqhc/adapter.ts +61 -84
  257. package/src/adapters/usgov-imls-pls/adapter.ts +54 -82
  258. package/src/adapters/usgov-irs-bmf/adapter.ts +53 -63
  259. package/src/adapters/usgov-nad/adapter.ts +5 -8
  260. package/src/adapters/usgov-nppes/adapter.ts +51 -75
  261. package/src/adapters/usgov-samhsa-treatment-locator/adapter.ts +45 -71
  262. package/src/adapters/wof-admin-jp/adapter.ts +34 -8
  263. package/src/build.ts +2 -1
  264. package/src/golden.ts +24 -9
  265. package/src/parquet-wrapper/reader.ts +19 -0
  266. package/src/parquet-wrapper/schema.ts +4 -0
  267. package/src/parquet.ts +3 -16
  268. package/src/shard-recipes/anchor-absorption.ts +2 -1
  269. package/src/shard-recipes/country-balanced.ts +69 -70
  270. package/src/shard-recipes/fr-fragment.ts +10 -7
  271. package/src/shard-recipes/fr-order.ts +13 -63
  272. package/src/shard-recipes/german.ts +12 -65
  273. package/src/shard-recipes/index.ts +2 -0
  274. package/src/shard-recipes/intersection.ts +32 -60
  275. package/src/shard-recipes/locale.ts +14 -16
  276. package/src/shard-recipes/no-fragment.ts +10 -7
  277. package/src/shard-recipes/no-street-led.ts +10 -7
  278. package/src/shard-recipes/po-box-cedex.ts +68 -119
  279. package/src/shard-recipes/scaffold.ts +82 -28
  280. package/src/shard-recipes/street-affix.ts +58 -95
  281. package/src/shard-recipes/sub-venue-sources.ts +895 -0
  282. package/src/shard-recipes/sub-venue.ts +982 -0
  283. package/src/shard-recipes/unit.ts +22 -70
  284. package/src/split.ts +7 -0
  285. package/src/synthesize.ts +1 -15
  286. package/src/tools/align-shard.ts +3 -6
  287. package/src/tools/audit.ts +6 -5
  288. package/src/tools/corpus-stats.ts +25 -33
  289. package/src/tools/fetch/download.ts +7 -5
  290. package/src/tools/fetch/imls-pls.ts +2 -2
  291. package/src/tools/fetch/index.ts +14 -1
  292. package/src/tools/fetch/nad.ts +1 -1
  293. package/src/tools/fetch/nppes.ts +2 -1
  294. package/src/tools/fetch/openaddresses.ts +1 -1
  295. package/src/tools/fetch/ourairports.ts +166 -0
  296. package/src/tools/fetch/wikidata-subvenue.ts +386 -0
  297. package/src/tools/golden-expand.ts +18 -13
  298. package/src/tools/golden-promote.ts +15 -6
  299. package/src/tools/golden-relabel-street.ts +748 -0
  300. package/src/tools/index.ts +4 -0
  301. package/src/tools/jsonl-to-parquet.ts +3 -2
  302. package/src/tools/lint-shard-vocab.ts +3 -2
  303. package/src/tools/lint-shard.ts +33 -36
  304. package/src/tools/overlay-manifest.ts +2 -1
  305. package/src/tools/overture-subvenue.ts +215 -0
  306. package/src/tools/shard-kryptonite.ts +5 -4
  307. package/src/tools/shard-translit.ts +12 -7
  308. package/src/tools/sub-venue-lexicon.ts +1250 -0
  309. package/src/tools/sub-venue-promotions.ts +330 -0
  310. package/src/wof-json.ts +5 -8
@@ -8,6 +8,8 @@
8
8
  * canonical → `alignRow` → `LabeledRow` JSONL emit step. A recipe ({@link ShardRecipe}) supplies
9
9
  * only its synthesis + filter; the `mailwoman corpus shard <recipe>` command supplies the I/O.
10
10
  */
11
+ import { tryParsingJSON } from "@mailwoman/core/objects";
12
+ import { CSVSpliterator } from "spliterator";
11
13
  import { stableSourceID } from "../adapter.js";
12
14
  import { alignRow } from "../align.js";
13
15
  /**
@@ -19,50 +21,69 @@ export function shardSourceID(adapterID, parts) {
19
21
  return stableSourceID(adapterID, parts);
20
22
  }
21
23
  /**
22
- * The deterministic LCG (`s = s*1664525 + 1013904223 mod 2^32`) the street/po-box/anchor builders used. A recipe whose
23
- * legacy `.mjs` seeded this must create it here so `--seed N` is byte-reproducible.
24
- */
25
- export function makeLcg(seed) {
26
- let s = seed >>> 0;
27
- return () => {
28
- s = (s * 1_664_525 + 1_013_904_223) % 4_294_967_296;
29
- return s / 4_294_967_296;
30
- };
31
- }
32
- /**
33
- * Back-compat alias for {@link makeLcg}.
24
+ * The two seeded generators the legacy `build-*-shard` scripts used, re-exported from their home in
25
+ * `@mailwoman/core/utils` so a recipe keeps importing everything it needs from this one scaffold module.
26
+ *
27
+ * - `makeLcg` (`s = s*1664525 + 1013904223 mod 2^32`) — what the street/po-box/anchor builders seeded.
28
+ * - `makeMulberry32` — what the MAJORITY of them used (german, locale, boundary-stress, unit, fr-order, country-balanced,
29
+ * intersection, fr-admin-split, street-affix, street-bare, po-box-cedex).
30
+ *
31
+ * A recipe must seed the same one its `.mjs` did, the same way it did (usually `seed`, but some derive a per-stream
32
+ * seed), or `--seed N` stops being byte-reproducible.
34
33
  */
35
- export const makeRandom = makeLcg;
34
+ export { makeLcg, mulberry32 as makeMulberry32, makeLcg as makeRandom } from "@mailwoman/core/utils";
36
35
  /**
37
- * Mulberry32 — the PRNG the MAJORITY of the legacy `build-*-shard` scripts used (german, locale, boundary-stress, unit,
38
- * fr-order, country-balanced, intersection, fr-admin-split, street-affix, street-bare, po-box-cedex). A recipe must
39
- * seed it EXACTLY as its `.mjs` did (usually `seed`, but some derive a per-stream seed) to stay byte-reproducible.
36
+ * Read an in-memory CSV (an `unzip -p` buffer, say) as header-keyed records.
37
+ *
38
+ * Quote handling spans the ROW split, not only the column split: a newline inside a quoted field belongs to a single
39
+ * record, so the record boundaries can only be found by a scanner that already knows where the quotes are. Find the
40
+ * lines first and unquote afterwards and such a record splits in two — the first half short by however many columns
41
+ * followed the newline, which is how a `street` value comes to be read as `city`.
42
+ *
43
+ * Header names are lower-cased on the way in. `normalizeKeys` will not do it: it leaves an ALL CAPS header alone, and
44
+ * OpenAddresses ships `LON,LAT,NUMBER,STREET` while other extracts ship the same names lower-case. A recipe names its
45
+ * columns in lower case either way.
46
+ *
47
+ * Line breaks inside a value become single spaces. A quote-aware parse is the first thing here able to return a value
48
+ * CONTAINING one — `us/ia/statewide.csv` has 12, all unit designators like `"#2\n#2"` — and every consumer synthesizes
49
+ * one-line address text from these cells with no guard, because until that parse landed no value could carry one.
50
+ * Collapsing keeps the record (the address is fine; the source's line break is not part of it) without emitting a
51
+ * training row with a newline inside it.
52
+ *
53
+ * Only `\r` and `\n`, deliberately — NOT `\s`. Runs of spaces and tabs pass through exactly as the source wrote them
54
+ * (OA's IA extract writes `NORTH`, three spaces, `MAIN STREET`), because those could always appear and every shard
55
+ * built to date contains them. Widening this to `\s+` silently rewrites values on rows with no line break at all.
56
+ * `scaffold.test.ts` pins both halves.
40
57
  */
41
- export function makeMulberry32(seed) {
42
- let a = seed >>> 0;
43
- return () => {
44
- a = (a + 0x6d_2b_79_f5) | 0;
45
- let t = Math.imul(a ^ (a >>> 15), 1 | a);
46
- t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;
47
- return ((t ^ (t >>> 14)) >>> 0) / 4_294_967_296;
48
- };
58
+ export function* readCSVRecords(source) {
59
+ let header = null;
60
+ // `header: false` keeps the first record in the stream so this reader owns the lower-casing.
61
+ for (const cells of CSVSpliterator.from(source, { header: false, enableQuoteHandling: true })) {
62
+ if (!header) {
63
+ header = cells.map((name) => name.trim().toLowerCase());
64
+ continue;
65
+ }
66
+ const record = {};
67
+ for (let i = 0; i < header.length; i++) {
68
+ record[header[i]] = (cells[i] ?? "").replaceAll(/[\r\n]+/g, " ").trim();
69
+ }
70
+ yield record;
71
+ }
49
72
  }
50
73
  /**
51
74
  * Stream-parse a tuples JSONL file, yielding each parsed object (blank/invalid lines skipped).
52
75
  */
53
76
  export async function* readTuples(input) {
54
77
  // TextSpliterator (not JSONSpliterator) so a malformed line is SKIPPED, not thrown — the
55
- // per-line try/catch below is the tolerance this reader has always had.
78
+ // per-line tryParsingJSON below is the tolerance this reader has always had.
56
79
  const { TextSpliterator } = await import("spliterator");
57
80
  for await (const line of TextSpliterator.fromAsync(input)) {
58
81
  const trimmed = line.trim();
59
82
  if (!trimmed)
60
83
  continue;
61
- try {
62
- yield JSON.parse(trimmed);
63
- }
64
- catch {
65
- // skip malformed line
84
+ const tuple = tryParsingJSON(trimmed);
85
+ if (tuple !== null) {
86
+ yield tuple;
66
87
  }
67
88
  }
68
89
  }
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../../src/shard-recipes/scaffold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,SAAiB,EAAE,KAAyC;IACzF,OAAO,cAAc,CAAC,SAAS,EAAE,KAAwD,CAAC,CAAA;AAC3F,CAAC;AAaD;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,IAAY;IACnC,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,CAAA;IAElB,OAAO,GAAG,EAAE;QACX,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,GAAG,aAAa,CAAC,GAAG,aAAa,CAAA;QAEnD,OAAO,CAAC,GAAG,aAAa,CAAA;IACzB,CAAC,CAAA;AACF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,OAAO,CAAA;AAEjC;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IAC1C,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,CAAA;IAElB,OAAO,GAAG,EAAE;QACX,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;QAC3B,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;QACxC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QAE9C,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,aAAa,CAAA;IAChD,CAAC,CAAA;AACF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,UAAU,CAAC,KAAa;IAC9C,yFAAyF;IACzF,wEAAwE;IACxE,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;IAEvD,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;QAE3B,IAAI,CAAC,OAAO;YAAE,SAAQ;QAEtB,IAAI,CAAC;YACJ,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAe,CAAA;QACxC,CAAC;QAAC,MAAM,CAAC;YACR,sBAAsB;QACvB,CAAC;IACF,CAAC;AACF,CAAC;AAgBD;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC5B,KAA6B,EAC7B,SAA4B,EAC5B,WAAmB,EACnB,cAA6B,IAAI;IAEjC,MAAM,OAAO,GAAG,QAAQ,CAAC,SAA2C,CAAC,CAAA;IAErE,IAAI,CAAC,OAAO,CAAC,GAAG;QAAE,OAAO,KAAK,CAAA;IAC9B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,CAAA;IAEvG,OAAO,IAAI,CAAA;AACZ,CAAC"}
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../../src/shard-recipes/scaffold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,SAAiB,EAAE,KAAyC;IACzF,OAAO,cAAc,CAAC,SAAS,EAAE,KAAwD,CAAC,CAAA;AAC3F,CAAC;AAaD;;;;;;;;;;GAUG;AACH,OAAO,EAAE,OAAO,EAAE,UAAU,IAAI,cAAc,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAQpG;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,SAAS,CAAC,CAAC,cAAc,CAAC,MAAkB;IACjD,IAAI,MAAM,GAAoB,IAAI,CAAA;IAElC,6FAA6F;IAC7F,KAAK,MAAM,KAAK,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/F,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAA;YAEvD,SAAQ;QACT,CAAC;QAED,MAAM,MAAM,GAAc,EAAE,CAAA;QAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;QACzE,CAAC;QAED,MAAM,MAAM,CAAA;IACb,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,UAAU,CAAC,KAAa;IAC9C,yFAAyF;IACzF,6EAA6E;IAC7E,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;IAEvD,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;QAE3B,IAAI,CAAC,OAAO;YAAE,SAAQ;QAEtB,MAAM,KAAK,GAAG,cAAc,CAAa,OAAO,CAAC,CAAA;QAEjD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACpB,MAAM,KAAK,CAAA;QACZ,CAAC;IACF,CAAC;AACF,CAAC;AAgBD;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC5B,KAA6B,EAC7B,SAA4B,EAC5B,WAAmB,EACnB,cAA6B,IAAI;IAEjC,MAAM,OAAO,GAAG,QAAQ,CAAC,SAA2C,CAAC,CAAA;IAErE,IAAI,CAAC,OAAO,CAAC,GAAG;QAAE,OAAO,KAAK,CAAA;IAC9B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,CAAA;IAEvG,OAAO,IAAI,CAAA;AACZ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"street-affix.d.ts","sourceRoot":"","sources":["../../../src/shard-recipes/street-affix.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAkBH,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;AA6XhE;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,WAiM/B,CAAA"}
1
+ {"version":3,"file":"street-affix.d.ts","sourceRoot":"","sources":["../../../src/shard-recipes/street-affix.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAmBH,OAAO,EAAkC,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;AAuVhF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,WAiM/B,CAAA"}
@@ -28,27 +28,56 @@
28
28
  */
29
29
  import { spawnSync } from "node:child_process";
30
30
  import { DirectionalAbbreviation, lookupDirectional, matchCase, matchLeadingDirectional, matchTrailingSuffix, renderDirectional, US_STREET_SUFFIX_PREFERRED_ABBR, } from "@mailwoman/codex/us";
31
+ import { dataRootPath } from "@mailwoman/core/utils";
31
32
  import { stableSourceID } from "../adapter.js";
32
33
  import { alignRow } from "../align.js";
33
- import { makeMulberry32 } from "./scaffold.js";
34
+ import { makeMulberry32, readCSVRecords } from "./scaffold.js";
34
35
  const TRAIN_SOURCES = [
35
- { zip: "/tmp/oa-cache/us__ca__berkeley.zip", csv: "us/ca/berkeley.csv", region: "CA" },
36
- { zip: "/tmp/oa-cache/us__ca__marin.zip", csv: "us/ca/marin.csv", region: "CA" },
37
- { zip: "/tmp/oa-cache/us__dc__statewide.zip", csv: "us/dc/statewide.csv", region: "DC" },
38
- { zip: "/tmp/oa-cache/us__ia__statewide.zip", csv: "us/ia/statewide.csv", region: "IA" },
39
- { zip: "/tmp/oa-cache/us__il__cook.zip", csv: "us/il/cook.csv", region: "IL" },
40
- { zip: "/tmp/oa-cache/us__mt__statewide.zip", csv: "us/mt/statewide.csv", region: "MT" },
41
- { zip: "/tmp/oa-cache/us__sd__statewide.zip", csv: "us/sd/statewide.csv", region: "SD" },
36
+ { zip: dataRootPath("oa-cache", "us__ca__berkeley.zip"), csv: "us/ca/berkeley.csv", region: "CA" },
37
+ { zip: dataRootPath("oa-cache", "us__ca__marin.zip"), csv: "us/ca/marin.csv", region: "CA" },
38
+ { zip: dataRootPath("oa-cache", "us__dc__statewide.zip"), csv: "us/dc/statewide.csv", region: "DC" },
39
+ { zip: dataRootPath("oa-cache", "us__ia__statewide.zip"), csv: "us/ia/statewide.csv", region: "IA" },
40
+ { zip: dataRootPath("oa-cache", "us__il__cook.zip"), csv: "us/il/cook.csv", region: "IL" },
41
+ { zip: dataRootPath("oa-cache", "us__mt__statewide.zip"), csv: "us/mt/statewide.csv", region: "MT" },
42
+ { zip: dataRootPath("oa-cache", "us__sd__statewide.zip"), csv: "us/sd/statewide.csv", region: "SD" },
42
43
  ];
43
- const EVAL_SOURCE = { zip: "/tmp/oa-cache/us__vt__statewide.zip", csv: "us/vt/statewide.csv", region: "VT" };
44
+ const EVAL_SOURCE = {
45
+ zip: dataRootPath("oa-cache", "us__vt__statewide.zip"),
46
+ csv: "us/vt/statewide.csv",
47
+ region: "VT",
48
+ };
44
49
  const MULTILOCALE_SOURCES = [
45
- { zip: "/tmp/oa-cache/de__sn__statewide.zip", csv: "de/sn/statewide.csv", iso2: "DE", region: "", order: "eu" },
46
- { zip: "/tmp/oa-cache/fr__countrywide.zip", csv: "fr/countrywide.csv", iso2: "FR", region: "", order: "fr" },
47
- { zip: "/tmp/oa-cache/it__countrywide.zip", csv: "it/countrywide.csv", iso2: "IT", region: "", order: "eu" },
48
- { zip: "/tmp/oa-cache/nl__countrywide.zip", csv: "nl/countrywide.csv", iso2: "NL", region: "", order: "eu" },
50
+ {
51
+ zip: dataRootPath("oa-cache", "de__sn__statewide.zip"),
52
+ csv: "de/sn/statewide.csv",
53
+ iso2: "DE",
54
+ region: "",
55
+ order: "eu",
56
+ },
57
+ {
58
+ zip: dataRootPath("oa-cache", "fr__countrywide.zip"),
59
+ csv: "fr/countrywide.csv",
60
+ iso2: "FR",
61
+ region: "",
62
+ order: "fr",
63
+ },
64
+ {
65
+ zip: dataRootPath("oa-cache", "it__countrywide.zip"),
66
+ csv: "it/countrywide.csv",
67
+ iso2: "IT",
68
+ region: "",
69
+ order: "eu",
70
+ },
71
+ {
72
+ zip: dataRootPath("oa-cache", "nl__countrywide.zip"),
73
+ csv: "nl/countrywide.csv",
74
+ iso2: "NL",
75
+ region: "",
76
+ order: "eu",
77
+ },
49
78
  ];
50
79
  const MULTILOCALE_EVAL_SOURCES = [
51
- { zip: "/tmp/oa-cache/de__berlin.zip", csv: "de/berlin.csv", iso2: "DE", region: "", order: "eu" },
80
+ { zip: dataRootPath("oa-cache", "de__berlin.zip"), csv: "de/berlin.csv", iso2: "DE", region: "", order: "eu" },
52
81
  ];
53
82
  /**
54
83
  * ["N","E","S","W","NE","NW","SE","SW"].
@@ -58,43 +87,6 @@ const DIRECTIONAL_ABBRS = Object.values(DirectionalAbbreviation);
58
87
  * Fraction of prefix-less streets that get a synthetic directional.
59
88
  */
60
89
  const INJECT_PREFIX_PROB = 0.3;
61
- /**
62
- * Minimal RFC-4180-ish splitter (handles quoted fields).
63
- */
64
- function splitCSV(line) {
65
- const out = [];
66
- let cur = "";
67
- let inQ = false;
68
- for (let i = 0; i < line.length; i++) {
69
- const c = line[i];
70
- if (inQ) {
71
- if (c === '"') {
72
- if (line[i + 1] === '"') {
73
- cur += '"';
74
- i++;
75
- }
76
- else {
77
- inQ = false;
78
- }
79
- }
80
- else {
81
- cur += c;
82
- }
83
- }
84
- else if (c === '"') {
85
- inQ = true;
86
- }
87
- else if (c === ",") {
88
- out.push(cur);
89
- cur = "";
90
- }
91
- else {
92
- cur += c;
93
- }
94
- }
95
- out.push(cur);
96
- return out;
97
- }
98
90
  /**
99
91
  * Stream real US tuples (number/street/city/postcode) out of a cached OA zip.
100
92
  */
@@ -104,29 +96,19 @@ function readTuples(source) {
104
96
  console.error(` WARN: unzip failed for ${source.zip} (status ${r.status})`);
105
97
  return [];
106
98
  }
107
- const lines = r.stdout.toString("utf8").split(/\r?\n/);
108
- if (lines.length < 2)
109
- return [];
110
- const header = splitCSV(lines[0]).map((h) => h.trim().toLowerCase());
111
- const idx = (name) => header.indexOf(name);
112
- const iNum = idx("number"), iStreet = idx("street"), iCity = idx("city"), iPost = idx("postcode");
113
- const get = (cells, i) => (i >= 0 && i < cells.length ? (cells[i] ?? "").trim() : "");
114
99
  const tuples = [];
115
100
  const seen = new Set();
116
- for (let li = 1; li < lines.length; li++) {
117
- if (!lines[li])
118
- continue;
119
- const cells = splitCSV(lines[li]);
120
- const street = get(cells, iStreet);
121
- const locality = get(cells, iCity);
122
- const house_number = get(cells, iNum);
101
+ for (const row of readCSVRecords(r.stdout)) {
102
+ const street = row.street ?? "";
103
+ const locality = row.city ?? "";
104
+ const house_number = row.number ?? "";
123
105
  if (!street || !locality || !house_number)
124
106
  continue;
125
107
  const key = `${house_number}|${street}|${locality}`.toLowerCase();
126
108
  if (seen.has(key))
127
109
  continue;
128
110
  seen.add(key);
129
- tuples.push({ house_number, street, locality, region: source.region, postcode: get(cells, iPost) });
111
+ tuples.push({ house_number, street, locality, region: source.region, postcode: row.postcode ?? "" });
130
112
  }
131
113
  return tuples;
132
114
  }
@@ -222,8 +204,8 @@ function renderRow(random, base, street, streetComponents) {
222
204
  };
223
205
  }
224
206
  /**
225
- * Capped reader for the multi-locale BALANCE sources. The FR/IT/NL countrywide extracts are GB-scale; reading the whole
226
- * CSV blows V8's string limit, so cap the bytes with `head` (mirrors build-country-shard-balanced.mjs). Only keeps
207
+ * Capped reader for the multi-locale BALANCE sources. The FR/IT/NL countrywide extracts are GB-scale, so cap the bytes
208
+ * with `head` (mirrors build-country-shard-balanced.mjs) rather than holding a whole extract in memory. Only keeps
227
209
  * tuples that carry a POSTCODE.
228
210
  */
229
211
  function readBalanceTuples(source, limit) {
@@ -236,20 +218,12 @@ function readBalanceTuples(source, limit) {
236
218
  console.error(` WARN: unzip failed for ${source.zip} (status ${r.status})`);
237
219
  return [];
238
220
  }
239
- const lines = r.stdout.toString("utf8").split(/\r?\n/);
240
- if (lines.length < 2)
241
- return [];
242
- const header = splitCSV(lines[0]).map((h) => h.trim().toLowerCase());
243
- const idx = (n) => header.indexOf(n);
244
- const iNum = idx("number"), iStreet = idx("street"), iCity = idx("city"), iRegion = idx("region"), iPost = idx("postcode");
245
- const get = (cells, i) => (i >= 0 && i < cells.length ? (cells[i] ?? "").trim() : "");
246
221
  const tuples = [];
247
222
  const seen = new Set();
248
- for (let li = 1; li < lines.length && tuples.length < limit; li++) {
249
- if (!lines[li])
250
- continue;
251
- const cells = splitCSV(lines[li]);
252
- const street = get(cells, iStreet), locality = get(cells, iCity), house_number = get(cells, iNum), postcode = get(cells, iPost);
223
+ for (const row of readCSVRecords(r.stdout)) {
224
+ if (tuples.length >= limit)
225
+ break;
226
+ const street = row.street ?? "", locality = row.city ?? "", house_number = row.number ?? "", postcode = row.postcode ?? "";
253
227
  if (!street || !locality || !house_number || !postcode)
254
228
  continue; // postcode is required for balance
255
229
  const key = `${house_number}|${street}|${locality}`.toLowerCase();
@@ -260,7 +234,7 @@ function readBalanceTuples(source, limit) {
260
234
  house_number,
261
235
  street,
262
236
  locality,
263
- region: get(cells, iRegion) || source.region,
237
+ region: row.region || source.region,
264
238
  postcode,
265
239
  iso2: source.iso2,
266
240
  order: source.order,
@@ -312,7 +286,7 @@ export const streetAffixRecipe = {
312
286
  }
313
287
  }
314
288
  if (!pool.length) {
315
- throw new Error("No US tuples found — are the cached OA zips present in /tmp/oa-cache?");
289
+ throw new Error(`No US tuples found — are the cached OA zips present in ${dataRootPath("oa-cache")}?`);
316
290
  }
317
291
  let emitted = 0;
318
292
  let skipped = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"street-affix.js","sourceRoot":"","sources":["../../../src/shard-recipes/street-affix.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"street-affix.js","sourceRoot":"","sources":["../../../src/shard-recipes/street-affix.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,231 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ *
6
+ * The READ half of the `sub-venue` shard recipe (#35 step 4): which surfaces a locale may emit,
7
+ * what identifier follows them in that region, and which real names become the confound negatives.
8
+ * `sub-venue.ts` owns the WRITE half (line rendering + the emit loop) and the recipe registration;
9
+ * split because the two halves together run past the 750-line file cap, and this is the seam — one
10
+ * side reads disk and the ledger, the other side never touches either.
11
+ *
12
+ * Every rule in this file is a rule about EVIDENCE, and each one has a measurement behind it:
13
+ *
14
+ * - {@link promotedSurfacesFor} — a promotion names a designator, a phrase AND a locale, because the
15
+ * same token is a designator in one language and a disaster in another (`hall` is 0-of-3,273 in
16
+ * Great Britain and 35-of-40 in France).
17
+ * - {@link hasPromotedShape} — an `identifier-required` promotion is exercised only as
18
+ * `<phrase> <identifier>`. The de-DE `halle` board is the founding case: its 168-hit confound
19
+ * includes the CITY Halle (Saale), and only the identifier-bearing shape separates them.
20
+ * - {@link buildIdentifierModel} — the identifier distribution is measured per REGION, because it
21
+ * differs by country far more than the shared vocabulary suggests (GB gates 71% bare digit, ES
22
+ * 35% ranges).
23
+ * - {@link isVenueSlotName} / {@link isSignIdentifier} — the filters that keep bus-stop codes, route
24
+ * descriptions and street names out of the slots they would mislabel. Both were written FROM
25
+ * smoke output, not predicted; the docstrings name the strings that produced them.
26
+ */
27
+ import type { LocaleBaseTuple } from "../synthesize-german.ts";
28
+ import { type SubVenueLexiconTable } from "../tools/sub-venue-lexicon.ts";
29
+ import { type SubVenuePromotion } from "../tools/sub-venue-promotions.ts";
30
+ /**
31
+ * The committed lexicon, resolved through the package manifest rather than by counting `..` segments — the same file
32
+ * sits at `corpus/data/` from both the source tree and the compiled `out/` tree, and `createRequire().resolve` finds it
33
+ * from either without a `__isCompiledTree` flag of its own.
34
+ */
35
+ export declare function defaultLexiconPath(): string;
36
+ /**
37
+ * Read and parse the lexicon. Strict: a corrupt lexicon is a build failure, not a fallback.
38
+ */
39
+ export declare function readSubVenueLexicon(path?: string): SubVenueLexiconTable;
40
+ /**
41
+ * Reject a name that is a route description, a junction, or a code rather than a name: embedded `/`, `;`, `,`, `:`,
42
+ * parentheses, no letters, or a bare source code. Measured motivation, not taste — the GB extract's `platform` tier
43
+ * contributes 7,549 `other`-shaped names like `kntgwdgj` and `SPEKE HALL ROAD/HILLFOOT AVE`.
44
+ */
45
+ export declare function isCleanName(name: string): boolean;
46
+ /**
47
+ * Is this name usable as a VENUE-slot string (positive venue or negative confound venue)?
48
+ */
49
+ export declare function isVenueSlotName(name: string): boolean;
50
+ /**
51
+ * A (designator, surface) pair usable in one locale, with the shape constraint the ledger attached to it.
52
+ */
53
+ export interface PromotedSurface {
54
+ designatorID: string;
55
+ phrase: string;
56
+ /**
57
+ * Rendering form — the phrase title-cased, which is how a sign writes it.
58
+ */
59
+ surface: string;
60
+ identifierRequired: boolean;
61
+ modifierEligible: boolean;
62
+ }
63
+ /**
64
+ * Title-case a designator phrase for rendering (`flugsteig` → `Flugsteig`). Single-token by construction: every
65
+ * promoted phrase in the ledger is one word.
66
+ */
67
+ export declare function titleCase(phrase: string): string;
68
+ /**
69
+ * Word-boundary containment, script-aware enough for the Latin legs this recipe runs.
70
+ *
71
+ * The boundary matters: without it `gate` matches Briggate and `wing` matches Wingate, which is how a harvest teaches
72
+ * itself that a Yorkshire street is a sub-venue. (The lexicon's own harvest carries the same rule, and it drops the
73
+ * boundary only for Han/Kana, which has no word boundaries and no leg here.)
74
+ */
75
+ export declare function containsPhrase(lowerName: string, phrase: string): boolean;
76
+ /**
77
+ * Is `value` what a sub-venue identifier looks like on a sign — an atom, or a range of two?
78
+ *
79
+ * Applied on top of {@link USABLE_IDENTIFIER_SHAPES}, which classifies but does not bound: `WSW3687` classifies as
80
+ * `letter-digit` and is a station code.
81
+ */
82
+ export declare function isSignIdentifier(value: string): boolean;
83
+ /**
84
+ * Does a real extract name exercise `promoted` in one of the two shapes this shard teaches?
85
+ *
86
+ * Only `<phrase> <identifier>` and (English legs) `<modifier> <phrase>` qualify. That is stricter than "contains the
87
+ * phrase", and the 2026-08-05 smoke is why: the loose test put `Glasgow Clyde College - Langside Campus`, `Terminal de
88
+ * Ferry de Bilbao` and — worst — `Halle Wohnstadt Nord` into the attested pool, the last of which is a bare German
89
+ * `Halle` wearing a name where the ledger requires an identifier. A whole venue's name is not a sub-venue string, and
90
+ * an attested string that violates the promotion's own shape constraint is not attestation of it.
91
+ *
92
+ * The follower is checked with {@link classifyIdentifier} plus {@link isSignIdentifier} rather than "any following
93
+ * word": `Wohnstadt` is a word, `8` is an identifier, and the de-DE board turns on exactly that difference.
94
+ */
95
+ export declare function hasPromotedShape(lowerName: string, promoted: PromotedSurface, modifiers?: readonly string[], english?: boolean): boolean;
96
+ /**
97
+ * {@link hasPromotedShape} plus the length cap that makes a string usable AS a sub-venue span.
98
+ *
99
+ * The two are separate because the difference decides which POOL a name lands in. `navette n2 vers terminal 2g` carries
100
+ * the promoted shape and is five tokens: too long to be a sub-venue string, and disqualified from being a NEGATIVE
101
+ * precisely because it does contain the shape. It belongs to neither pool, and only splitting the test says so.
102
+ */
103
+ export declare function matchesPromotedShape(lowerName: string, promoted: PromotedSurface, modifiers?: readonly string[], english?: boolean): boolean;
104
+ /**
105
+ * The surfaces a locale may emit as `unit`.
106
+ *
107
+ * Two inputs, and the difference between them is the advisory/binding split the ledger's docstring names:
108
+ *
109
+ * - The SHIPPED English vocabulary (`neural/venue-structure.ts`, re-declared in the lexicon as `shipped: true`) is a flat
110
+ * English list with no locale gate. It is promoted-by-shipping for the English legs, because the span proposer fires
111
+ * on it there today and the eval board's target cases are drawn from it.
112
+ * - {@link SUBVENUE_PROMOTIONS} adds the localized surfaces and SUBTRACTS the rejections. A rejection of a shipped
113
+ * designator cannot un-ship it (nothing here stops the proposer firing on "Red Wing"), but it absolutely stops this
114
+ * recipe generating a positive: en-US `wing` produces negatives instead.
115
+ */
116
+ export declare function promotedSurfacesFor(locale: string, lexicon: SubVenueLexiconTable, promotions?: readonly SubVenuePromotion[]): PromotedSurface[];
117
+ /**
118
+ * The phrases REJECTED in a locale — the negatives' vocabulary.
119
+ */
120
+ export declare function rejectedPhrasesFor(locale: string, promotions?: readonly SubVenuePromotion[]): string[];
121
+ interface ShapeBucket {
122
+ shape: string;
123
+ observations: number;
124
+ examples: string[];
125
+ }
126
+ /**
127
+ * A region's identifier distributions: per designator, plus the pooled fallback.
128
+ */
129
+ export interface IdentifierModel {
130
+ byDesignator: Map<string, ShapeBucket[]>;
131
+ pooled: ShapeBucket[];
132
+ }
133
+ /**
134
+ * Build the per-region identifier model out of the lexicon's `identifierShapes`.
135
+ */
136
+ export declare function buildIdentifierModel(lexicon: SubVenueLexiconTable, region: string): IdentifierModel;
137
+ /**
138
+ * Draw one identifier for `designatorID` in this region.
139
+ *
140
+ * Own distribution when it has {@link MIN_OWN_SHAPE_OBSERVATIONS} usable observations, else the region's pooled one.
141
+ * Shapes are weighted by observation count and an example is drawn uniformly inside the chosen shape — the lexicon
142
+ * ships up to eight per shape, which is the resolution available.
143
+ */
144
+ export declare function sampleIdentifier(model: IdentifierModel, designatorID: string, random: () => number): string | null;
145
+ /**
146
+ * Per-leg pools read off disk once.
147
+ */
148
+ export interface LegPools {
149
+ context: LocaleBaseTuple[];
150
+ /**
151
+ * Real venue names for the venue slot (stations, airports, campuses; US: airports, terminals, hospitals, rail).
152
+ */
153
+ venues: string[];
154
+ /**
155
+ * Real sub-venue strings, already filtered to this locale's promoted surfaces and their shape constraint.
156
+ */
157
+ attested: string[];
158
+ /**
159
+ * Real names carrying a surface REJECTED in this locale, for the venue slot of a negative row.
160
+ */
161
+ rejectedVenues: string[];
162
+ /**
163
+ * Real names that contain a designator inside a longer proper name — "Lochaline Ferry Terminal", "Kingdom Hall". The
164
+ * whole string is `venue`; nothing in it is `unit`.
165
+ */
166
+ longerNames: string[];
167
+ /**
168
+ * Real names carrying a PROMOTED phrase in a shape the promotion does NOT cover — `Halle Rosengarten`, `PHOENIX
169
+ * Halle`, `Halle-Südstadt`. The other half of an `identifier-required` ruling, and the only thing that teaches the
170
+ * shape boundary rather than the word: de-DE has no `reject` row at all, so without this class its 168-hit confound
171
+ * (97 of them the CITY Halle) would go untaught while its 32-hit promotion got 11,000 rows.
172
+ */
173
+ unpromotedShapes: string[];
174
+ }
175
+ /**
176
+ * The name pools a source contributes. `attested` and `unpromotedShapes` come only from an extract — poi.db carries no
177
+ * `tier` and no localized names, so it cannot say which side of a shape boundary a name sits on.
178
+ */
179
+ export type NamePools = Pick<LegPools, "venues" | "attested" | "rejectedVenues" | "longerNames" | "unpromotedShapes">;
180
+ /**
181
+ * The pools a source that has nothing to say contributes — en-US has no OSM extract, and DE/ES/GB are outside poi.db's
182
+ * four countries. Empty rather than absent so a leg's merge is unconditional.
183
+ */
184
+ export declare const EMPTY_NAME_POOLS: NamePools;
185
+ /**
186
+ * What every pool reader needs to know about the leg it is reading for.
187
+ */
188
+ export interface PoolQuery {
189
+ promoted: readonly PromotedSurface[];
190
+ rejectedPhrases: readonly string[];
191
+ designatorPhrases: readonly string[];
192
+ modifiers: readonly string[];
193
+ english: boolean;
194
+ }
195
+ /**
196
+ * Read one OSM extract and split it into name pools.
197
+ */
198
+ export declare function readExtractPools(path: string, query: PoolQuery): NamePools;
199
+ /**
200
+ * Read the venue + confound pools for a country out of `poi.db`.
201
+ *
202
+ * Poi.db is FOUR COUNTRIES — US 11,521,612 / CA 794,418 / FR 721,352 / MX 644,316 — so this is reachable for en-US and
203
+ * fr-FR and nothing else, and a zero here is evidence of absence in four countries rather than in the world.
204
+ */
205
+ export declare function readPOIPools(dbPath: string, country: string, query: PoolQuery): NamePools;
206
+ /**
207
+ * Merge two sources' name pools.
208
+ */
209
+ export declare function mergeNamePools(a: NamePools, b: NamePools): NamePools;
210
+ /**
211
+ * Load the address skeletons every leg renders onto: GB / US / FR from the house-venue v3 tuples (the same 176,519 real
212
+ * rows the `synth-house-venue` shard is built from, so the two shards' address halves are drawn from one pool), DE and
213
+ * ES streamed out of OpenAddresses.
214
+ */
215
+ export declare function loadContextTuples(tuplesPath: string, seed: number): Promise<Map<string, LocaleBaseTuple[]>>;
216
+ /**
217
+ * The street-side confound classes, mined from the leg's OWN address tuples.
218
+ *
219
+ * Real streets, not invented ones. The 176,519-row context pool carries 195 GB `hall` streets, 114 GB `gate` streets,
220
+ * 134 distinct GB `-gate` single tokens and a two-figure `<modifier> <designator>` population in both GB and US — small
221
+ * absolute numbers, but every one of them a street somebody lives on, which is the property an invented list cannot
222
+ * have.
223
+ */
224
+ export interface StreetNegatives {
225
+ designator: LocaleBaseTuple[];
226
+ modifierDesignator: LocaleBaseTuple[];
227
+ gateSuffix: LocaleBaseTuple[];
228
+ }
229
+ export declare function buildStreetNegatives(context: readonly LocaleBaseTuple[], designatorPhrases: readonly string[], modifiers: readonly string[], country: string): StreetNegatives;
230
+ export {};
231
+ //# sourceMappingURL=sub-venue-sources.d.ts.map