@mailwoman/corpus 9.3.0 → 10.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 (991) hide show
  1. package/README.md +16 -0
  2. package/lib/adapters/geonames/adapter.ts +3 -3
  3. package/lib/adapters/geonames/postal/adapter.ts +122 -0
  4. package/lib/adapters/index.ts +39 -32
  5. package/lib/adapters/openaddresses/adapter.ts +4 -7
  6. package/lib/adapters/osm/adapter.ts +278 -0
  7. package/lib/adapters/overture/adapter.ts +22 -7
  8. package/lib/adapters/utils/index.ts +1 -1
  9. package/lib/adapters/wof/admin/json/adapter.ts +239 -0
  10. package/lib/adapters/wof/json-rows.ts +181 -0
  11. package/lib/adapters/wof/postalcode-json/adapter.ts +196 -0
  12. package/lib/au/adapters/gnaf/adapter.ts +152 -0
  13. package/lib/au/adapters/gnaf/assemble.ts +225 -0
  14. package/lib/cz/recipes/pcfirst-preposition.ts +112 -0
  15. package/lib/de/recipes/locale.ts +360 -0
  16. package/lib/fr/adapters/ban/adapter.ts +159 -0
  17. package/lib/fr/recipes/admin-split.ts +243 -0
  18. package/lib/fr/recipes/bare-street.ts +171 -0
  19. package/lib/fr/recipes/fragment.ts +334 -0
  20. package/lib/fr/recipes/lieudit.ts +274 -0
  21. package/lib/fr/recipes/order.ts +246 -0
  22. package/lib/fr/tools/fetch/ban.ts +289 -0
  23. package/lib/index.ts +1 -1
  24. package/lib/international/recipes/locale.ts +598 -0
  25. package/lib/jp/tools/fetch/houjin.ts +141 -0
  26. package/lib/kr/adapters/juso/label-rows.ts +259 -0
  27. package/lib/kr/adapters/localdata/align.ts +299 -0
  28. package/lib/kr/adapters/localdata/key-index.ts +185 -0
  29. package/lib/kr/adapters/localdata/permit-rows.ts +186 -0
  30. package/lib/kr/tools/fetch/juso.ts +172 -0
  31. package/lib/kr/tools/fetch/localdata.ts +206 -0
  32. package/lib/nl/recipes/postcode.ts +117 -0
  33. package/lib/no/recipes/fragment.ts +213 -0
  34. package/lib/no/recipes/street/index.ts +91 -0
  35. package/lib/no/recipes/street/led.ts +135 -0
  36. package/lib/recipes/anchor-absorption.ts +2 -2
  37. package/lib/recipes/bare/country.ts +95 -0
  38. package/lib/recipes/bare/postcode/eval.ts +99 -0
  39. package/lib/recipes/bare/postcode/index.ts +327 -0
  40. package/lib/recipes/boundary-stress.ts +3 -1
  41. package/lib/recipes/country-balanced.ts +3 -2
  42. package/lib/recipes/house-venue.ts +2 -1
  43. package/lib/recipes/index.ts +28 -21
  44. package/lib/recipes/intersection.ts +3 -2
  45. package/lib/recipes/po/box/cedex/au-nz.ts +82 -0
  46. package/lib/recipes/po/box/cedex/ca.ts +58 -0
  47. package/lib/recipes/po/box/cedex/fr.ts +76 -0
  48. package/lib/recipes/po/box/cedex/phrases.ts +108 -0
  49. package/lib/recipes/po/box/cedex/recipe.ts +203 -0
  50. package/lib/recipes/po/box/cedex/sources.ts +189 -0
  51. package/lib/recipes/po/box/cedex/types.ts +35 -0
  52. package/lib/recipes/po/box/cedex/us.ts +69 -0
  53. package/lib/recipes/po/box/cedex/vocabulary.ts +106 -0
  54. package/lib/recipes/po/box/cedex.ts +9 -0
  55. package/lib/recipes/po/box/index.ts +128 -0
  56. package/lib/recipes/scaffold.ts +18 -42
  57. package/lib/recipes/street/affix.ts +807 -0
  58. package/lib/recipes/street/bare.ts +102 -0
  59. package/lib/recipes/street.ts +3 -1
  60. package/lib/recipes/sub/venue/context.ts +149 -0
  61. package/lib/recipes/sub/venue/index.ts +997 -0
  62. package/lib/recipes/sub/venue/sources.ts +739 -0
  63. package/lib/recipes/trailing-region.ts +9 -9
  64. package/lib/recipes/unit.ts +3 -3
  65. package/lib/sg/recipes/register.ts +270 -0
  66. package/lib/sg/tools/fetch/acra.ts +179 -0
  67. package/lib/si/recipes/bare-village.ts +99 -0
  68. package/lib/south-asia/recipes/register.ts +214 -0
  69. package/lib/synthesizers/anchor-absorption.ts +1 -1
  70. package/lib/synthesizers/locale.ts +261 -0
  71. package/lib/synthesizers/street.ts +1 -1
  72. package/lib/synthesizers/utils.ts +2 -2
  73. package/lib/tools/audit.ts +3 -2
  74. package/lib/tools/corpus-stats.ts +3 -3
  75. package/lib/tools/fetch/download/index.ts +10 -0
  76. package/lib/tools/fetch/download/manifest.ts +102 -0
  77. package/lib/tools/fetch/download/network.ts +226 -0
  78. package/lib/tools/fetch/download/retry.ts +173 -0
  79. package/lib/tools/fetch/geonames/dump.ts +257 -0
  80. package/lib/tools/fetch/geonames/postal.ts +180 -0
  81. package/lib/tools/fetch/index.ts +47 -20
  82. package/lib/tools/fetch/openaddresses.ts +2 -2
  83. package/lib/tools/fetch/ourairports.ts +2 -2
  84. package/lib/tools/fetch/ppd.ts +1 -3
  85. package/lib/tools/fetch/wikidata-subvenue.ts +2 -2
  86. package/lib/tools/golden/promote.ts +340 -0
  87. package/lib/tools/golden/relabel-street/directory.ts +340 -0
  88. package/lib/tools/golden/relabel-street/index.ts +9 -0
  89. package/lib/tools/golden/relabel-street/row.ts +361 -0
  90. package/lib/tools/index.ts +10 -10
  91. package/lib/tools/ingest-csv.ts +5 -7
  92. package/lib/tools/lint/slice/vocab.ts +376 -0
  93. package/lib/tools/overlay-manifest.ts +92 -25
  94. package/lib/tools/overture-subvenue.ts +1 -1
  95. package/lib/tools/postcode-triples.ts +138 -14
  96. package/lib/tools/sub/venue/harvest.ts +234 -0
  97. package/lib/tools/sub/venue/head-nouns.ts +245 -0
  98. package/lib/tools/sub/venue/lexicon.ts +429 -0
  99. package/lib/tools/sub/venue/surfaces.ts +95 -0
  100. package/lib/tools/sub/venue/table.ts +281 -0
  101. package/lib/tools/sub/venue/wikidata.ts +85 -0
  102. package/lib/tw/tools/fetch/gcis.ts +180 -0
  103. package/lib/types.ts +1 -1
  104. package/lib/us/adapters/fcc-bdc/adapter.ts +173 -0
  105. package/lib/us/adapters/state/hi-schools/adapter.ts +160 -0
  106. package/lib/us/adapters/state/ia-contractors/adapter.ts +136 -0
  107. package/lib/us/adapters/state/ny-notaries/adapter.ts +133 -0
  108. package/lib/us/adapters/state/tx-notaries/adapter.ts +149 -0
  109. package/lib/us/adapters/tiger/adapter.ts +250 -0
  110. package/lib/us/adapters/usgov/hrsa-fqhc/adapter.ts +156 -0
  111. package/lib/us/adapters/usgov/imls-pls/adapter.ts +134 -0
  112. package/lib/us/adapters/usgov/irs-bmf/adapter.ts +145 -0
  113. package/lib/us/adapters/usgov/nad/adapter.ts +324 -0
  114. package/lib/us/adapters/usgov/nppes/adapter.ts +143 -0
  115. package/lib/us/adapters/usgov/samhsa-treatment-locator/adapter.ts +182 -0
  116. package/lib/us/tools/fetch/hrsa.ts +59 -0
  117. package/lib/us/tools/fetch/imls-pls.ts +149 -0
  118. package/lib/us/tools/fetch/nad.ts +341 -0
  119. package/lib/us/tools/fetch/nppes.ts +165 -0
  120. package/lib/us/tools/fetch/state/hi-schools.ts +161 -0
  121. package/lib/us/tools/fetch/state/sources.ts +146 -0
  122. package/lib/us/tools/fetch/tiger-full.ts +308 -0
  123. package/lib/utils/align.ts +1 -1
  124. package/lib/utils/golden.ts +12 -8
  125. package/lib/utils/wof-json.ts +7 -13
  126. package/out/adapters/geonames/adapter.d.ts +1 -1
  127. package/out/adapters/geonames/adapter.js +3 -3
  128. package/out/adapters/geonames/adapter.js.map +1 -1
  129. package/out/adapters/geonames/postal/adapter.d.ts.map +1 -0
  130. package/out/adapters/geonames/postal/adapter.js +107 -0
  131. package/out/adapters/geonames/postal/adapter.js.map +1 -0
  132. package/out/adapters/index.d.ts +16 -16
  133. package/out/adapters/index.d.ts.map +1 -1
  134. package/out/adapters/index.js +34 -32
  135. package/out/adapters/index.js.map +1 -1
  136. package/out/adapters/openaddresses/adapter.d.ts.map +1 -1
  137. package/out/adapters/openaddresses/adapter.js +4 -6
  138. package/out/adapters/openaddresses/adapter.js.map +1 -1
  139. package/out/adapters/osm/adapter.d.ts +95 -0
  140. package/out/adapters/osm/adapter.d.ts.map +1 -0
  141. package/out/adapters/osm/adapter.js +211 -0
  142. package/out/adapters/osm/adapter.js.map +1 -0
  143. package/out/adapters/overture/adapter.d.ts +10 -0
  144. package/out/adapters/overture/adapter.d.ts.map +1 -1
  145. package/out/adapters/overture/adapter.js +20 -7
  146. package/out/adapters/overture/adapter.js.map +1 -1
  147. package/out/adapters/synth-po-box/adapter.js.map +1 -1
  148. package/out/adapters/utils/index.d.ts +1 -1
  149. package/out/adapters/utils/index.d.ts.map +1 -1
  150. package/out/adapters/utils/index.js.map +1 -1
  151. package/out/adapters/wof/admin/json/adapter.d.ts +79 -0
  152. package/out/adapters/wof/admin/json/adapter.d.ts.map +1 -0
  153. package/out/adapters/wof/admin/json/adapter.js +204 -0
  154. package/out/adapters/wof/admin/json/adapter.js.map +1 -0
  155. package/out/adapters/wof/json-rows.d.ts +73 -0
  156. package/out/adapters/wof/json-rows.d.ts.map +1 -0
  157. package/out/adapters/wof/json-rows.js +115 -0
  158. package/out/adapters/wof/json-rows.js.map +1 -0
  159. package/out/adapters/wof/postalcode-json/adapter.d.ts +65 -0
  160. package/out/adapters/wof/postalcode-json/adapter.d.ts.map +1 -0
  161. package/out/adapters/wof/postalcode-json/adapter.js +167 -0
  162. package/out/adapters/wof/postalcode-json/adapter.js.map +1 -0
  163. package/out/au/adapters/gnaf/adapter.d.ts.map +1 -0
  164. package/out/au/adapters/gnaf/adapter.js +127 -0
  165. package/out/au/adapters/gnaf/adapter.js.map +1 -0
  166. package/out/au/adapters/gnaf/assemble.d.ts +65 -0
  167. package/out/au/adapters/gnaf/assemble.d.ts.map +1 -0
  168. package/out/au/adapters/gnaf/assemble.js +154 -0
  169. package/out/au/adapters/gnaf/assemble.js.map +1 -0
  170. package/out/cn/recipes/organizational-units.d.ts +36 -0
  171. package/out/cn/recipes/organizational-units.d.ts.map +1 -0
  172. package/out/cn/recipes/organizational-units.js +159 -0
  173. package/out/cn/recipes/organizational-units.js.map +1 -0
  174. package/out/cz/recipes/pcfirst-preposition.d.ts +22 -0
  175. package/out/cz/recipes/pcfirst-preposition.d.ts.map +1 -0
  176. package/out/cz/recipes/pcfirst-preposition.js +101 -0
  177. package/out/cz/recipes/pcfirst-preposition.js.map +1 -0
  178. package/out/de/recipes/locale.d.ts +44 -0
  179. package/out/de/recipes/locale.d.ts.map +1 -0
  180. package/out/de/recipes/locale.js +289 -0
  181. package/out/de/recipes/locale.js.map +1 -0
  182. package/out/env.d.ts +1 -1
  183. package/out/fr/adapters/ban/adapter.d.ts.map +1 -0
  184. package/out/fr/adapters/ban/adapter.js +123 -0
  185. package/out/fr/adapters/ban/adapter.js.map +1 -0
  186. package/out/fr/adapters/ban/street-decompose.d.ts.map +1 -0
  187. package/out/fr/adapters/ban/street-decompose.js.map +1 -0
  188. package/out/fr/recipes/admin-split.d.ts +38 -0
  189. package/out/fr/recipes/admin-split.d.ts.map +1 -0
  190. package/out/fr/recipes/admin-split.js +192 -0
  191. package/out/fr/recipes/admin-split.js.map +1 -0
  192. package/out/fr/recipes/bare-street.d.ts +28 -0
  193. package/out/fr/recipes/bare-street.d.ts.map +1 -0
  194. package/out/fr/recipes/bare-street.js +144 -0
  195. package/out/fr/recipes/bare-street.js.map +1 -0
  196. package/out/fr/recipes/fragment.d.ts +77 -0
  197. package/out/fr/recipes/fragment.d.ts.map +1 -0
  198. package/out/fr/recipes/fragment.js +277 -0
  199. package/out/fr/recipes/fragment.js.map +1 -0
  200. package/out/fr/recipes/lieudit.d.ts +32 -0
  201. package/out/fr/recipes/lieudit.d.ts.map +1 -0
  202. package/out/fr/recipes/lieudit.js +211 -0
  203. package/out/fr/recipes/lieudit.js.map +1 -0
  204. package/out/fr/recipes/order.d.ts +38 -0
  205. package/out/fr/recipes/order.d.ts.map +1 -0
  206. package/out/fr/recipes/order.js +198 -0
  207. package/out/fr/recipes/order.js.map +1 -0
  208. package/out/fr/tools/fetch/ban.d.ts +31 -0
  209. package/out/fr/tools/fetch/ban.d.ts.map +1 -0
  210. package/out/fr/tools/fetch/ban.js +239 -0
  211. package/out/fr/tools/fetch/ban.js.map +1 -0
  212. package/out/index.d.ts +1 -1
  213. package/out/index.d.ts.map +1 -1
  214. package/out/index.js +1 -1
  215. package/out/index.js.map +1 -1
  216. package/out/international/recipes/locale.d.ts +136 -0
  217. package/out/international/recipes/locale.d.ts.map +1 -0
  218. package/out/international/recipes/locale.js +458 -0
  219. package/out/international/recipes/locale.js.map +1 -0
  220. package/out/jp/adapters/wof-admin/adapter.d.ts.map +1 -0
  221. package/out/jp/adapters/wof-admin/adapter.js.map +1 -0
  222. package/out/jp/tools/fetch/houjin.d.ts +24 -0
  223. package/out/jp/tools/fetch/houjin.d.ts.map +1 -0
  224. package/out/jp/tools/fetch/houjin.js +102 -0
  225. package/out/jp/tools/fetch/houjin.js.map +1 -0
  226. package/out/kr/adapters/juso/label-rows.d.ts +76 -0
  227. package/out/kr/adapters/juso/label-rows.d.ts.map +1 -0
  228. package/out/kr/adapters/juso/label-rows.js +194 -0
  229. package/out/kr/adapters/juso/label-rows.js.map +1 -0
  230. package/out/kr/adapters/localdata/align.d.ts +43 -0
  231. package/out/kr/adapters/localdata/align.d.ts.map +1 -0
  232. package/out/kr/adapters/localdata/align.js +223 -0
  233. package/out/kr/adapters/localdata/align.js.map +1 -0
  234. package/out/kr/adapters/localdata/key-index.d.ts +71 -0
  235. package/out/kr/adapters/localdata/key-index.d.ts.map +1 -0
  236. package/out/kr/adapters/localdata/key-index.js +133 -0
  237. package/out/kr/adapters/localdata/key-index.js.map +1 -0
  238. package/out/kr/adapters/localdata/permit-rows.d.ts +66 -0
  239. package/out/kr/adapters/localdata/permit-rows.d.ts.map +1 -0
  240. package/out/kr/adapters/localdata/permit-rows.js +131 -0
  241. package/out/kr/adapters/localdata/permit-rows.js.map +1 -0
  242. package/out/kr/tools/fetch/juso.d.ts +30 -0
  243. package/out/kr/tools/fetch/juso.d.ts.map +1 -0
  244. package/out/kr/tools/fetch/juso.js +120 -0
  245. package/out/kr/tools/fetch/juso.js.map +1 -0
  246. package/out/kr/tools/fetch/localdata.d.ts +30 -0
  247. package/out/kr/tools/fetch/localdata.d.ts.map +1 -0
  248. package/out/kr/tools/fetch/localdata.js +139 -0
  249. package/out/kr/tools/fetch/localdata.js.map +1 -0
  250. package/out/nl/recipes/postcode.d.ts +26 -0
  251. package/out/nl/recipes/postcode.d.ts.map +1 -0
  252. package/out/nl/recipes/postcode.js +103 -0
  253. package/out/nl/recipes/postcode.js.map +1 -0
  254. package/out/no/recipes/fragment.d.ts +43 -0
  255. package/out/no/recipes/fragment.d.ts.map +1 -0
  256. package/out/no/recipes/fragment.js +183 -0
  257. package/out/no/recipes/fragment.js.map +1 -0
  258. package/out/no/recipes/street/index.d.ts +18 -0
  259. package/out/no/recipes/street/index.d.ts.map +1 -0
  260. package/out/no/recipes/street/index.js +72 -0
  261. package/out/no/recipes/street/index.js.map +1 -0
  262. package/out/no/recipes/street/led.d.ts +24 -0
  263. package/out/no/recipes/street/led.d.ts.map +1 -0
  264. package/out/no/recipes/street/led.js +114 -0
  265. package/out/no/recipes/street/led.js.map +1 -0
  266. package/out/recipes/anchor-absorption.d.ts.map +1 -1
  267. package/out/recipes/anchor-absorption.js +2 -1
  268. package/out/recipes/anchor-absorption.js.map +1 -1
  269. package/out/recipes/bare/country.d.ts +25 -0
  270. package/out/recipes/bare/country.d.ts.map +1 -0
  271. package/out/recipes/bare/country.js +88 -0
  272. package/out/recipes/bare/country.js.map +1 -0
  273. package/out/recipes/bare/postcode/eval.d.ts +29 -0
  274. package/out/recipes/bare/postcode/eval.d.ts.map +1 -0
  275. package/out/recipes/bare/postcode/eval.js +85 -0
  276. package/out/recipes/bare/postcode/eval.js.map +1 -0
  277. package/out/recipes/bare/postcode/index.d.ts +62 -0
  278. package/out/recipes/bare/postcode/index.d.ts.map +1 -0
  279. package/out/recipes/bare/postcode/index.js +267 -0
  280. package/out/recipes/bare/postcode/index.js.map +1 -0
  281. package/out/recipes/boundary-stress.d.ts.map +1 -1
  282. package/out/recipes/boundary-stress.js +2 -1
  283. package/out/recipes/boundary-stress.js.map +1 -1
  284. package/out/recipes/country-balanced.d.ts.map +1 -1
  285. package/out/recipes/country-balanced.js +2 -1
  286. package/out/recipes/country-balanced.js.map +1 -1
  287. package/out/recipes/house-venue.d.ts.map +1 -1
  288. package/out/recipes/house-venue.js +2 -1
  289. package/out/recipes/house-venue.js.map +1 -1
  290. package/out/recipes/index.d.ts.map +1 -1
  291. package/out/recipes/index.js +28 -21
  292. package/out/recipes/index.js.map +1 -1
  293. package/out/recipes/intersection.d.ts.map +1 -1
  294. package/out/recipes/intersection.js +2 -1
  295. package/out/recipes/intersection.js.map +1 -1
  296. package/out/recipes/po/box/cedex/au-nz.d.ts +7 -0
  297. package/out/recipes/po/box/cedex/au-nz.d.ts.map +1 -0
  298. package/out/recipes/po/box/cedex/au-nz.js +56 -0
  299. package/out/recipes/po/box/cedex/au-nz.js.map +1 -0
  300. package/out/recipes/po/box/cedex/ca.d.ts +7 -0
  301. package/out/recipes/po/box/cedex/ca.d.ts.map +1 -0
  302. package/out/recipes/po/box/cedex/ca.js +38 -0
  303. package/out/recipes/po/box/cedex/ca.js.map +1 -0
  304. package/out/recipes/po/box/cedex/fr.d.ts +7 -0
  305. package/out/recipes/po/box/cedex/fr.d.ts.map +1 -0
  306. package/out/recipes/po/box/cedex/fr.js +57 -0
  307. package/out/recipes/po/box/cedex/fr.js.map +1 -0
  308. package/out/recipes/po/box/cedex/phrases.d.ts +8 -0
  309. package/out/recipes/po/box/cedex/phrases.d.ts.map +1 -0
  310. package/out/recipes/po/box/cedex/phrases.js +76 -0
  311. package/out/recipes/po/box/cedex/phrases.js.map +1 -0
  312. package/out/recipes/po/box/cedex/recipe.d.ts +9 -0
  313. package/out/recipes/po/box/cedex/recipe.d.ts.map +1 -0
  314. package/out/recipes/po/box/cedex/recipe.js +153 -0
  315. package/out/recipes/po/box/cedex/recipe.js.map +1 -0
  316. package/out/recipes/po/box/cedex/sources.d.ts +86 -0
  317. package/out/recipes/po/box/cedex/sources.d.ts.map +1 -0
  318. package/out/recipes/po/box/cedex/sources.js +143 -0
  319. package/out/recipes/po/box/cedex/sources.js.map +1 -0
  320. package/out/recipes/po/box/cedex/types.d.ts +31 -0
  321. package/out/recipes/po/box/cedex/types.d.ts.map +1 -0
  322. package/out/recipes/po/box/cedex/types.js +5 -0
  323. package/out/recipes/po/box/cedex/types.js.map +1 -0
  324. package/out/recipes/po/box/cedex/us.d.ts +7 -0
  325. package/out/recipes/po/box/cedex/us.d.ts.map +1 -0
  326. package/out/recipes/po/box/cedex/us.js +51 -0
  327. package/out/recipes/po/box/cedex/us.js.map +1 -0
  328. package/out/recipes/po/box/cedex/vocabulary.d.ts +68 -0
  329. package/out/recipes/po/box/cedex/vocabulary.d.ts.map +1 -0
  330. package/out/recipes/po/box/cedex/vocabulary.js +90 -0
  331. package/out/recipes/po/box/cedex/vocabulary.js.map +1 -0
  332. package/out/recipes/po/box/cedex.d.ts +9 -0
  333. package/out/recipes/po/box/cedex.d.ts.map +1 -0
  334. package/out/recipes/po/box/cedex.js +9 -0
  335. package/out/recipes/po/box/cedex.js.map +1 -0
  336. package/out/recipes/po/box/index.d.ts +17 -0
  337. package/out/recipes/po/box/index.d.ts.map +1 -0
  338. package/out/recipes/po/box/index.js +105 -0
  339. package/out/recipes/po/box/index.js.map +1 -0
  340. package/out/recipes/scaffold.d.ts +20 -1
  341. package/out/recipes/scaffold.d.ts.map +1 -1
  342. package/out/recipes/scaffold.js +18 -49
  343. package/out/recipes/scaffold.js.map +1 -1
  344. package/out/recipes/street/affix.d.ts +89 -0
  345. package/out/recipes/street/affix.d.ts.map +1 -0
  346. package/out/recipes/street/affix.js +565 -0
  347. package/out/recipes/street/affix.js.map +1 -0
  348. package/out/recipes/street/bare.d.ts +25 -0
  349. package/out/recipes/street/bare.d.ts.map +1 -0
  350. package/out/recipes/street/bare.js +87 -0
  351. package/out/recipes/street/bare.js.map +1 -0
  352. package/out/recipes/street.d.ts.map +1 -1
  353. package/out/recipes/street.js +2 -1
  354. package/out/recipes/street.js.map +1 -1
  355. package/out/recipes/sub/venue/context.d.ts +29 -0
  356. package/out/recipes/sub/venue/context.d.ts.map +1 -0
  357. package/out/recipes/sub/venue/context.js +106 -0
  358. package/out/recipes/sub/venue/context.js.map +1 -0
  359. package/out/recipes/sub/venue/index.d.ts +270 -0
  360. package/out/recipes/sub/venue/index.d.ts.map +1 -0
  361. package/out/recipes/sub/venue/index.js +728 -0
  362. package/out/recipes/sub/venue/index.js.map +1 -0
  363. package/out/recipes/sub/venue/sources.d.ts +209 -0
  364. package/out/recipes/sub/venue/sources.d.ts.map +1 -0
  365. package/out/recipes/sub/venue/sources.js +555 -0
  366. package/out/recipes/sub/venue/sources.js.map +1 -0
  367. package/out/recipes/trailing-region.d.ts.map +1 -1
  368. package/out/recipes/trailing-region.js +8 -2
  369. package/out/recipes/trailing-region.js.map +1 -1
  370. package/out/recipes/unit.d.ts.map +1 -1
  371. package/out/recipes/unit.js +2 -1
  372. package/out/recipes/unit.js.map +1 -1
  373. package/out/sg/recipes/register.d.ts +69 -0
  374. package/out/sg/recipes/register.d.ts.map +1 -0
  375. package/out/sg/recipes/register.js +211 -0
  376. package/out/sg/recipes/register.js.map +1 -0
  377. package/out/sg/tools/fetch/acra.d.ts +23 -0
  378. package/out/sg/tools/fetch/acra.d.ts.map +1 -0
  379. package/out/sg/tools/fetch/acra.js +126 -0
  380. package/out/sg/tools/fetch/acra.js.map +1 -0
  381. package/out/si/recipes/bare-village.d.ts +32 -0
  382. package/out/si/recipes/bare-village.d.ts.map +1 -0
  383. package/out/si/recipes/bare-village.js +89 -0
  384. package/out/si/recipes/bare-village.js.map +1 -0
  385. package/out/south-asia/recipes/register.d.ts +51 -0
  386. package/out/south-asia/recipes/register.d.ts.map +1 -0
  387. package/out/south-asia/recipes/register.js +154 -0
  388. package/out/south-asia/recipes/register.js.map +1 -0
  389. package/out/synthesizers/anchor-absorption.d.ts +1 -1
  390. package/out/synthesizers/anchor-absorption.d.ts.map +1 -1
  391. package/out/synthesizers/anchor-absorption.js.map +1 -1
  392. package/out/synthesizers/boundary-stress.js.map +1 -1
  393. package/out/synthesizers/house-venue.js.map +1 -1
  394. package/out/synthesizers/intersection.js.map +1 -1
  395. package/out/synthesizers/locale.d.ts +116 -0
  396. package/out/synthesizers/locale.d.ts.map +1 -0
  397. package/out/synthesizers/locale.js +150 -0
  398. package/out/synthesizers/locale.js.map +1 -0
  399. package/out/synthesizers/no-street.d.ts.map +1 -1
  400. package/out/synthesizers/no-street.js.map +1 -1
  401. package/out/synthesizers/po-box.js.map +1 -1
  402. package/out/synthesizers/street.d.ts.map +1 -1
  403. package/out/synthesizers/street.js +1 -1
  404. package/out/synthesizers/street.js.map +1 -1
  405. package/out/synthesizers/utils.js +1 -1
  406. package/out/synthesizers/utils.js.map +1 -1
  407. package/out/test-kit/corpus-recipe.d.ts.map +1 -1
  408. package/out/test-kit/corpus-recipe.js.map +1 -1
  409. package/out/tools/audit.d.ts.map +1 -1
  410. package/out/tools/audit.js +3 -2
  411. package/out/tools/audit.js.map +1 -1
  412. package/out/tools/corpus-stats.js +3 -3
  413. package/out/tools/corpus-stats.js.map +1 -1
  414. package/out/tools/fetch/download/index.d.ts +10 -0
  415. package/out/tools/fetch/download/index.d.ts.map +1 -0
  416. package/out/tools/fetch/download/index.js +10 -0
  417. package/out/tools/fetch/download/index.js.map +1 -0
  418. package/out/tools/fetch/download/manifest.d.ts +47 -0
  419. package/out/tools/fetch/download/manifest.d.ts.map +1 -0
  420. package/out/tools/fetch/download/manifest.js +74 -0
  421. package/out/tools/fetch/download/manifest.js.map +1 -0
  422. package/out/tools/fetch/download/network.d.ts +105 -0
  423. package/out/tools/fetch/download/network.d.ts.map +1 -0
  424. package/out/tools/fetch/download/network.js +130 -0
  425. package/out/tools/fetch/download/network.js.map +1 -0
  426. package/out/tools/fetch/download/retry.d.ts +45 -0
  427. package/out/tools/fetch/download/retry.d.ts.map +1 -0
  428. package/out/tools/fetch/download/retry.js +136 -0
  429. package/out/tools/fetch/download/retry.js.map +1 -0
  430. package/out/tools/fetch/geonames/dump.d.ts +91 -0
  431. package/out/tools/fetch/geonames/dump.d.ts.map +1 -0
  432. package/out/tools/fetch/geonames/dump.js +171 -0
  433. package/out/tools/fetch/geonames/dump.js.map +1 -0
  434. package/out/tools/fetch/geonames/postal.d.ts +76 -0
  435. package/out/tools/fetch/geonames/postal.d.ts.map +1 -0
  436. package/out/tools/fetch/geonames/postal.js +126 -0
  437. package/out/tools/fetch/geonames/postal.js.map +1 -0
  438. package/out/tools/fetch/index.d.ts +47 -20
  439. package/out/tools/fetch/index.d.ts.map +1 -1
  440. package/out/tools/fetch/index.js +47 -20
  441. package/out/tools/fetch/index.js.map +1 -1
  442. package/out/tools/fetch/openaddresses.d.ts +1 -1
  443. package/out/tools/fetch/openaddresses.d.ts.map +1 -1
  444. package/out/tools/fetch/openaddresses.js +1 -1
  445. package/out/tools/fetch/openaddresses.js.map +1 -1
  446. package/out/tools/fetch/ourairports.d.ts +1 -1
  447. package/out/tools/fetch/ourairports.d.ts.map +1 -1
  448. package/out/tools/fetch/ourairports.js +1 -1
  449. package/out/tools/fetch/ourairports.js.map +1 -1
  450. package/out/tools/fetch/ppd.js +1 -3
  451. package/out/tools/fetch/ppd.js.map +1 -1
  452. package/out/tools/fetch/wikidata-subvenue.d.ts +1 -1
  453. package/out/tools/fetch/wikidata-subvenue.d.ts.map +1 -1
  454. package/out/tools/fetch/wikidata-subvenue.js +1 -1
  455. package/out/tools/fetch/wikidata-subvenue.js.map +1 -1
  456. package/out/tools/golden/expand.d.ts +90 -0
  457. package/out/tools/golden/expand.d.ts.map +1 -0
  458. package/out/tools/golden/expand.js +406 -0
  459. package/out/tools/golden/expand.js.map +1 -0
  460. package/out/tools/golden/promote.d.ts +72 -0
  461. package/out/tools/golden/promote.d.ts.map +1 -0
  462. package/out/tools/golden/promote.js +243 -0
  463. package/out/tools/golden/promote.js.map +1 -0
  464. package/out/tools/golden/relabel-street/directory.d.ts +83 -0
  465. package/out/tools/golden/relabel-street/directory.d.ts.map +1 -0
  466. package/out/tools/golden/relabel-street/directory.js +216 -0
  467. package/out/tools/golden/relabel-street/directory.js.map +1 -0
  468. package/out/tools/golden/relabel-street/index.d.ts +9 -0
  469. package/out/tools/golden/relabel-street/index.d.ts.map +1 -0
  470. package/out/tools/golden/relabel-street/index.js +9 -0
  471. package/out/tools/golden/relabel-street/index.js.map +1 -0
  472. package/out/tools/golden/relabel-street/row.d.ts +121 -0
  473. package/out/tools/golden/relabel-street/row.d.ts.map +1 -0
  474. package/out/tools/golden/relabel-street/row.js +232 -0
  475. package/out/tools/golden/relabel-street/row.js.map +1 -0
  476. package/out/tools/index.d.ts +10 -10
  477. package/out/tools/index.d.ts.map +1 -1
  478. package/out/tools/index.js +10 -10
  479. package/out/tools/index.js.map +1 -1
  480. package/out/tools/ingest-csv.d.ts.map +1 -1
  481. package/out/tools/ingest-csv.js +5 -7
  482. package/out/tools/ingest-csv.js.map +1 -1
  483. package/out/tools/lint/slice/index.d.ts +93 -0
  484. package/out/tools/lint/slice/index.d.ts.map +1 -0
  485. package/out/tools/lint/slice/index.js +322 -0
  486. package/out/tools/lint/slice/index.js.map +1 -0
  487. package/out/tools/lint/slice/vocab.d.ts +90 -0
  488. package/out/tools/lint/slice/vocab.d.ts.map +1 -0
  489. package/out/tools/lint/slice/vocab.js +254 -0
  490. package/out/tools/lint/slice/vocab.js.map +1 -0
  491. package/out/tools/overlay-manifest.d.ts +56 -6
  492. package/out/tools/overlay-manifest.d.ts.map +1 -1
  493. package/out/tools/overlay-manifest.js +56 -15
  494. package/out/tools/overlay-manifest.js.map +1 -1
  495. package/out/tools/overture-subvenue.d.ts +1 -1
  496. package/out/tools/postcode-triples.d.ts +36 -0
  497. package/out/tools/postcode-triples.d.ts.map +1 -1
  498. package/out/tools/postcode-triples.js +91 -12
  499. package/out/tools/postcode-triples.js.map +1 -1
  500. package/out/tools/slice/kryptonite.d.ts +32 -0
  501. package/out/tools/slice/kryptonite.d.ts.map +1 -0
  502. package/out/tools/slice/kryptonite.js +99 -0
  503. package/out/tools/slice/kryptonite.js.map +1 -0
  504. package/out/tools/slice/translit.d.ts +51 -0
  505. package/out/tools/slice/translit.d.ts.map +1 -0
  506. package/out/tools/slice/translit.js +166 -0
  507. package/out/tools/slice/translit.js.map +1 -0
  508. package/out/tools/sub/venue/harvest.d.ts +100 -0
  509. package/out/tools/sub/venue/harvest.d.ts.map +1 -0
  510. package/out/tools/sub/venue/harvest.js +168 -0
  511. package/out/tools/sub/venue/harvest.js.map +1 -0
  512. package/out/tools/sub/venue/head-nouns.d.ts +50 -0
  513. package/out/tools/sub/venue/head-nouns.d.ts.map +1 -0
  514. package/out/tools/sub/venue/head-nouns.js.map +1 -0
  515. package/out/tools/sub/venue/lexicon.d.ts +156 -0
  516. package/out/tools/sub/venue/lexicon.d.ts.map +1 -0
  517. package/out/tools/sub/venue/lexicon.js +283 -0
  518. package/out/tools/sub/venue/lexicon.js.map +1 -0
  519. package/out/tools/sub/venue/promotions.d.ts +94 -0
  520. package/out/tools/sub/venue/promotions.d.ts.map +1 -0
  521. package/out/tools/sub/venue/promotions.js +266 -0
  522. package/out/tools/sub/venue/promotions.js.map +1 -0
  523. package/out/tools/sub/venue/surfaces.d.ts +45 -0
  524. package/out/tools/sub/venue/surfaces.d.ts.map +1 -0
  525. package/out/tools/sub/venue/surfaces.js.map +1 -0
  526. package/out/tools/sub/venue/table.d.ts +229 -0
  527. package/out/tools/sub/venue/table.d.ts.map +1 -0
  528. package/out/tools/sub/venue/table.js.map +1 -0
  529. package/out/tools/sub/venue/wikidata.d.ts +26 -0
  530. package/out/tools/sub/venue/wikidata.d.ts.map +1 -0
  531. package/out/tools/sub/venue/wikidata.js +62 -0
  532. package/out/tools/sub/venue/wikidata.js.map +1 -0
  533. package/out/tw/tools/fetch/gcis.d.ts +23 -0
  534. package/out/tw/tools/fetch/gcis.d.ts.map +1 -0
  535. package/out/tw/tools/fetch/gcis.js +135 -0
  536. package/out/tw/tools/fetch/gcis.js.map +1 -0
  537. package/out/types.d.ts +1 -1
  538. package/out/types.d.ts.map +1 -1
  539. package/out/us/adapters/fcc-bdc/adapter.d.ts.map +1 -0
  540. package/out/us/adapters/fcc-bdc/adapter.js +142 -0
  541. package/out/us/adapters/fcc-bdc/adapter.js.map +1 -0
  542. package/out/us/adapters/state/hi-schools/adapter.d.ts.map +1 -0
  543. package/out/us/adapters/state/hi-schools/adapter.js +136 -0
  544. package/out/us/adapters/state/hi-schools/adapter.js.map +1 -0
  545. package/out/us/adapters/state/hi-schools/workbook.d.ts.map +1 -0
  546. package/out/us/adapters/state/hi-schools/workbook.js.map +1 -0
  547. package/out/us/adapters/state/ia-contractors/adapter.d.ts.map +1 -0
  548. package/out/us/adapters/state/ia-contractors/adapter.js +104 -0
  549. package/out/us/adapters/state/ia-contractors/adapter.js.map +1 -0
  550. package/out/us/adapters/state/ny-notaries/adapter.d.ts.map +1 -0
  551. package/out/us/adapters/state/ny-notaries/adapter.js +112 -0
  552. package/out/us/adapters/state/ny-notaries/adapter.js.map +1 -0
  553. package/out/us/adapters/state/tx-notaries/adapter.d.ts.map +1 -0
  554. package/out/us/adapters/state/tx-notaries/adapter.js +118 -0
  555. package/out/us/adapters/state/tx-notaries/adapter.js.map +1 -0
  556. package/out/us/adapters/tiger/adapter.d.ts +55 -0
  557. package/out/us/adapters/tiger/adapter.d.ts.map +1 -0
  558. package/out/us/adapters/tiger/adapter.js +197 -0
  559. package/out/us/adapters/tiger/adapter.js.map +1 -0
  560. package/out/us/adapters/tiger/street-decompose.d.ts.map +1 -0
  561. package/out/us/adapters/tiger/street-decompose.js.map +1 -0
  562. package/out/us/adapters/usgov/hrsa-fqhc/adapter.d.ts.map +1 -0
  563. package/out/us/adapters/usgov/hrsa-fqhc/adapter.js +121 -0
  564. package/out/us/adapters/usgov/hrsa-fqhc/adapter.js.map +1 -0
  565. package/out/us/adapters/usgov/imls-pls/adapter.d.ts.map +1 -0
  566. package/out/us/adapters/usgov/imls-pls/adapter.js +106 -0
  567. package/out/us/adapters/usgov/imls-pls/adapter.js.map +1 -0
  568. package/out/us/adapters/usgov/irs-bmf/adapter.d.ts.map +1 -0
  569. package/out/us/adapters/usgov/irs-bmf/adapter.js +116 -0
  570. package/out/us/adapters/usgov/irs-bmf/adapter.js.map +1 -0
  571. package/out/us/adapters/usgov/nad/adapter.d.ts.map +1 -0
  572. package/out/us/adapters/usgov/nad/adapter.js +239 -0
  573. package/out/us/adapters/usgov/nad/adapter.js.map +1 -0
  574. package/out/us/adapters/usgov/nppes/adapter.d.ts.map +1 -0
  575. package/out/us/adapters/usgov/nppes/adapter.js +110 -0
  576. package/out/us/adapters/usgov/nppes/adapter.js.map +1 -0
  577. package/out/us/adapters/usgov/samhsa-treatment-locator/adapter.d.ts.map +1 -0
  578. package/out/us/adapters/usgov/samhsa-treatment-locator/adapter.js +143 -0
  579. package/out/us/adapters/usgov/samhsa-treatment-locator/adapter.js.map +1 -0
  580. package/out/us/fips-state.d.ts +41 -0
  581. package/out/us/fips-state.d.ts.map +1 -0
  582. package/out/us/fips-state.js +100 -0
  583. package/out/us/fips-state.js.map +1 -0
  584. package/out/us/tools/fetch/hrsa.d.ts +18 -0
  585. package/out/us/tools/fetch/hrsa.d.ts.map +1 -0
  586. package/out/us/tools/fetch/hrsa.js +46 -0
  587. package/out/us/tools/fetch/hrsa.js.map +1 -0
  588. package/out/us/tools/fetch/imls-pls.d.ts +25 -0
  589. package/out/us/tools/fetch/imls-pls.d.ts.map +1 -0
  590. package/out/us/tools/fetch/imls-pls.js +108 -0
  591. package/out/us/tools/fetch/imls-pls.js.map +1 -0
  592. package/out/us/tools/fetch/nad.d.ts +70 -0
  593. package/out/us/tools/fetch/nad.d.ts.map +1 -0
  594. package/out/us/tools/fetch/nad.js +234 -0
  595. package/out/us/tools/fetch/nad.js.map +1 -0
  596. package/out/us/tools/fetch/nppes.d.ts +26 -0
  597. package/out/us/tools/fetch/nppes.d.ts.map +1 -0
  598. package/out/us/tools/fetch/nppes.js +126 -0
  599. package/out/us/tools/fetch/nppes.js.map +1 -0
  600. package/out/us/tools/fetch/state/hi-schools.d.ts +26 -0
  601. package/out/us/tools/fetch/state/hi-schools.d.ts.map +1 -0
  602. package/out/us/tools/fetch/state/hi-schools.js +112 -0
  603. package/out/us/tools/fetch/state/hi-schools.js.map +1 -0
  604. package/out/us/tools/fetch/state/sources.d.ts +26 -0
  605. package/out/us/tools/fetch/state/sources.d.ts.map +1 -0
  606. package/out/us/tools/fetch/state/sources.js +111 -0
  607. package/out/us/tools/fetch/state/sources.js.map +1 -0
  608. package/out/us/tools/fetch/tiger-full.d.ts +22 -0
  609. package/out/us/tools/fetch/tiger-full.d.ts.map +1 -0
  610. package/out/us/tools/fetch/tiger-full.js +217 -0
  611. package/out/us/tools/fetch/tiger-full.js.map +1 -0
  612. package/out/utils/align.d.ts +1 -1
  613. package/out/utils/align.d.ts.map +1 -1
  614. package/out/utils/align.js.map +1 -1
  615. package/out/utils/golden.d.ts +7 -3
  616. package/out/utils/golden.d.ts.map +1 -1
  617. package/out/utils/golden.js +12 -8
  618. package/out/utils/golden.js.map +1 -1
  619. package/out/utils/parquet.d.ts.map +1 -1
  620. package/out/utils/split.js.map +1 -1
  621. package/out/utils/wof-json.d.ts.map +1 -1
  622. package/out/utils/wof-json.js +7 -12
  623. package/out/utils/wof-json.js.map +1 -1
  624. package/out/ve/recipes/reviewed-postcode-tail.d.ts.map +1 -0
  625. package/out/ve/recipes/reviewed-postcode-tail.js.map +1 -0
  626. package/package.json +196 -46
  627. package/lib/adapters/ban/adapter.ts +0 -190
  628. package/lib/adapters/fcc-bdc/adapter.ts +0 -174
  629. package/lib/adapters/geonames-postal/adapter.ts +0 -122
  630. package/lib/adapters/gnaf/adapter.ts +0 -149
  631. package/lib/adapters/gnaf/assemble.ts +0 -225
  632. package/lib/adapters/state-hi-schools/adapter.ts +0 -170
  633. package/lib/adapters/state-ia-contractors/adapter.ts +0 -144
  634. package/lib/adapters/state-ny-notaries/adapter.ts +0 -141
  635. package/lib/adapters/state-tx-notaries/adapter.ts +0 -157
  636. package/lib/adapters/tiger/adapter.ts +0 -252
  637. package/lib/adapters/usgov-hrsa-fqhc/adapter.ts +0 -167
  638. package/lib/adapters/usgov-imls-pls/adapter.ts +0 -143
  639. package/lib/adapters/usgov-irs-bmf/adapter.ts +0 -151
  640. package/lib/adapters/usgov-nad/adapter.ts +0 -334
  641. package/lib/adapters/usgov-nppes/adapter.ts +0 -151
  642. package/lib/adapters/usgov-samhsa-treatment-locator/adapter.ts +0 -193
  643. package/lib/adapters/wof-admin-json/adapter.ts +0 -231
  644. package/lib/adapters/wof-json-rows.ts +0 -129
  645. package/lib/adapters/wof-postalcode-json/adapter.ts +0 -176
  646. package/lib/name-prone-us-suffixes.ts +0 -12
  647. package/lib/recipes/bare-country.ts +0 -95
  648. package/lib/recipes/cz-pcfirst-preposition.ts +0 -111
  649. package/lib/recipes/fr-admin-split.ts +0 -242
  650. package/lib/recipes/fr-bare-street.ts +0 -170
  651. package/lib/recipes/fr-fragment.ts +0 -333
  652. package/lib/recipes/fr-lieudit.ts +0 -301
  653. package/lib/recipes/fr-order.ts +0 -245
  654. package/lib/recipes/german.ts +0 -359
  655. package/lib/recipes/locale.ts +0 -599
  656. package/lib/recipes/nl-postcode.ts +0 -115
  657. package/lib/recipes/no-fragment.ts +0 -219
  658. package/lib/recipes/no-street-led.ts +0 -141
  659. package/lib/recipes/no-street.ts +0 -90
  660. package/lib/recipes/po-box-cedex.ts +0 -976
  661. package/lib/recipes/po-box.ts +0 -123
  662. package/lib/recipes/si-bare-village.ts +0 -97
  663. package/lib/recipes/street-affix.ts +0 -804
  664. package/lib/recipes/street-bare.ts +0 -100
  665. package/lib/recipes/sub-venue-sources.ts +0 -877
  666. package/lib/recipes/sub-venue.ts +0 -997
  667. package/lib/synthesizers/german.ts +0 -260
  668. package/lib/tools/fetch/ban.ts +0 -289
  669. package/lib/tools/fetch/download.ts +0 -262
  670. package/lib/tools/fetch/geonames-dump.ts +0 -257
  671. package/lib/tools/fetch/geonames-postal.ts +0 -180
  672. package/lib/tools/fetch/hrsa.ts +0 -59
  673. package/lib/tools/fetch/imls-pls.ts +0 -149
  674. package/lib/tools/fetch/nad.ts +0 -341
  675. package/lib/tools/fetch/nppes.ts +0 -165
  676. package/lib/tools/fetch/state-hi-schools.ts +0 -161
  677. package/lib/tools/fetch/state-sources.ts +0 -146
  678. package/lib/tools/fetch/tiger-full.ts +0 -308
  679. package/lib/tools/golden-promote.ts +0 -337
  680. package/lib/tools/golden-relabel-street.ts +0 -683
  681. package/lib/tools/lint-slice-vocab.ts +0 -388
  682. package/lib/tools/sub-venue/harvest.ts +0 -234
  683. package/lib/tools/sub-venue/head-nouns.ts +0 -245
  684. package/lib/tools/sub-venue/surfaces.ts +0 -95
  685. package/lib/tools/sub-venue/table.ts +0 -281
  686. package/lib/tools/sub-venue/wikidata.ts +0 -85
  687. package/lib/tools/sub-venue-lexicon.ts +0 -429
  688. package/out/adapters/ban/adapter.d.ts.map +0 -1
  689. package/out/adapters/ban/adapter.js +0 -149
  690. package/out/adapters/ban/adapter.js.map +0 -1
  691. package/out/adapters/ban/street-decompose.d.ts.map +0 -1
  692. package/out/adapters/ban/street-decompose.js.map +0 -1
  693. package/out/adapters/fcc-bdc/adapter.d.ts.map +0 -1
  694. package/out/adapters/fcc-bdc/adapter.js +0 -144
  695. package/out/adapters/fcc-bdc/adapter.js.map +0 -1
  696. package/out/adapters/geonames-postal/adapter.d.ts.map +0 -1
  697. package/out/adapters/geonames-postal/adapter.js +0 -107
  698. package/out/adapters/geonames-postal/adapter.js.map +0 -1
  699. package/out/adapters/gnaf/adapter.d.ts.map +0 -1
  700. package/out/adapters/gnaf/adapter.js +0 -124
  701. package/out/adapters/gnaf/adapter.js.map +0 -1
  702. package/out/adapters/gnaf/assemble.d.ts +0 -65
  703. package/out/adapters/gnaf/assemble.d.ts.map +0 -1
  704. package/out/adapters/gnaf/assemble.js +0 -154
  705. package/out/adapters/gnaf/assemble.js.map +0 -1
  706. package/out/adapters/state-hi-schools/adapter.d.ts.map +0 -1
  707. package/out/adapters/state-hi-schools/adapter.js +0 -145
  708. package/out/adapters/state-hi-schools/adapter.js.map +0 -1
  709. package/out/adapters/state-hi-schools/workbook.d.ts.map +0 -1
  710. package/out/adapters/state-hi-schools/workbook.js.map +0 -1
  711. package/out/adapters/state-ia-contractors/adapter.d.ts.map +0 -1
  712. package/out/adapters/state-ia-contractors/adapter.js +0 -111
  713. package/out/adapters/state-ia-contractors/adapter.js.map +0 -1
  714. package/out/adapters/state-ny-notaries/adapter.d.ts.map +0 -1
  715. package/out/adapters/state-ny-notaries/adapter.js +0 -119
  716. package/out/adapters/state-ny-notaries/adapter.js.map +0 -1
  717. package/out/adapters/state-tx-notaries/adapter.d.ts.map +0 -1
  718. package/out/adapters/state-tx-notaries/adapter.js +0 -125
  719. package/out/adapters/state-tx-notaries/adapter.js.map +0 -1
  720. package/out/adapters/tiger/adapter.d.ts +0 -55
  721. package/out/adapters/tiger/adapter.d.ts.map +0 -1
  722. package/out/adapters/tiger/adapter.js +0 -201
  723. package/out/adapters/tiger/adapter.js.map +0 -1
  724. package/out/adapters/tiger/street-decompose.d.ts.map +0 -1
  725. package/out/adapters/tiger/street-decompose.js.map +0 -1
  726. package/out/adapters/usgov-hrsa-fqhc/adapter.d.ts.map +0 -1
  727. package/out/adapters/usgov-hrsa-fqhc/adapter.js +0 -132
  728. package/out/adapters/usgov-hrsa-fqhc/adapter.js.map +0 -1
  729. package/out/adapters/usgov-imls-pls/adapter.d.ts.map +0 -1
  730. package/out/adapters/usgov-imls-pls/adapter.js +0 -114
  731. package/out/adapters/usgov-imls-pls/adapter.js.map +0 -1
  732. package/out/adapters/usgov-irs-bmf/adapter.d.ts.map +0 -1
  733. package/out/adapters/usgov-irs-bmf/adapter.js +0 -120
  734. package/out/adapters/usgov-irs-bmf/adapter.js.map +0 -1
  735. package/out/adapters/usgov-nad/adapter.d.ts.map +0 -1
  736. package/out/adapters/usgov-nad/adapter.js +0 -249
  737. package/out/adapters/usgov-nad/adapter.js.map +0 -1
  738. package/out/adapters/usgov-nppes/adapter.d.ts.map +0 -1
  739. package/out/adapters/usgov-nppes/adapter.js +0 -118
  740. package/out/adapters/usgov-nppes/adapter.js.map +0 -1
  741. package/out/adapters/usgov-samhsa-treatment-locator/adapter.d.ts.map +0 -1
  742. package/out/adapters/usgov-samhsa-treatment-locator/adapter.js +0 -154
  743. package/out/adapters/usgov-samhsa-treatment-locator/adapter.js.map +0 -1
  744. package/out/adapters/wof-admin-jp/adapter.d.ts.map +0 -1
  745. package/out/adapters/wof-admin-jp/adapter.js.map +0 -1
  746. package/out/adapters/wof-admin-json/adapter.d.ts +0 -79
  747. package/out/adapters/wof-admin-json/adapter.d.ts.map +0 -1
  748. package/out/adapters/wof-admin-json/adapter.js +0 -197
  749. package/out/adapters/wof-admin-json/adapter.js.map +0 -1
  750. package/out/adapters/wof-json-rows.d.ts +0 -62
  751. package/out/adapters/wof-json-rows.d.ts.map +0 -1
  752. package/out/adapters/wof-json-rows.js +0 -83
  753. package/out/adapters/wof-json-rows.js.map +0 -1
  754. package/out/adapters/wof-postalcode-json/adapter.d.ts +0 -65
  755. package/out/adapters/wof-postalcode-json/adapter.d.ts.map +0 -1
  756. package/out/adapters/wof-postalcode-json/adapter.js +0 -151
  757. package/out/adapters/wof-postalcode-json/adapter.js.map +0 -1
  758. package/out/codex/us-fips-state.d.ts +0 -41
  759. package/out/codex/us-fips-state.d.ts.map +0 -1
  760. package/out/codex/us-fips-state.js +0 -100
  761. package/out/codex/us-fips-state.js.map +0 -1
  762. package/out/name-prone-us-suffixes.d.ts +0 -12
  763. package/out/name-prone-us-suffixes.d.ts.map +0 -1
  764. package/out/name-prone-us-suffixes.js +0 -12
  765. package/out/name-prone-us-suffixes.js.map +0 -1
  766. package/out/recipes/bare-country.d.ts +0 -25
  767. package/out/recipes/bare-country.d.ts.map +0 -1
  768. package/out/recipes/bare-country.js +0 -87
  769. package/out/recipes/bare-country.js.map +0 -1
  770. package/out/recipes/cn-organizational-units.d.ts +0 -36
  771. package/out/recipes/cn-organizational-units.d.ts.map +0 -1
  772. package/out/recipes/cn-organizational-units.js +0 -159
  773. package/out/recipes/cn-organizational-units.js.map +0 -1
  774. package/out/recipes/cz-pcfirst-preposition.d.ts +0 -22
  775. package/out/recipes/cz-pcfirst-preposition.d.ts.map +0 -1
  776. package/out/recipes/cz-pcfirst-preposition.js +0 -100
  777. package/out/recipes/cz-pcfirst-preposition.js.map +0 -1
  778. package/out/recipes/fr-admin-split.d.ts +0 -38
  779. package/out/recipes/fr-admin-split.d.ts.map +0 -1
  780. package/out/recipes/fr-admin-split.js +0 -192
  781. package/out/recipes/fr-admin-split.js.map +0 -1
  782. package/out/recipes/fr-bare-street.d.ts +0 -28
  783. package/out/recipes/fr-bare-street.d.ts.map +0 -1
  784. package/out/recipes/fr-bare-street.js +0 -143
  785. package/out/recipes/fr-bare-street.js.map +0 -1
  786. package/out/recipes/fr-fragment.d.ts +0 -77
  787. package/out/recipes/fr-fragment.d.ts.map +0 -1
  788. package/out/recipes/fr-fragment.js +0 -276
  789. package/out/recipes/fr-fragment.js.map +0 -1
  790. package/out/recipes/fr-lieudit.d.ts +0 -32
  791. package/out/recipes/fr-lieudit.d.ts.map +0 -1
  792. package/out/recipes/fr-lieudit.js +0 -227
  793. package/out/recipes/fr-lieudit.js.map +0 -1
  794. package/out/recipes/fr-order.d.ts +0 -38
  795. package/out/recipes/fr-order.d.ts.map +0 -1
  796. package/out/recipes/fr-order.js +0 -197
  797. package/out/recipes/fr-order.js.map +0 -1
  798. package/out/recipes/german.d.ts +0 -44
  799. package/out/recipes/german.d.ts.map +0 -1
  800. package/out/recipes/german.js +0 -288
  801. package/out/recipes/german.js.map +0 -1
  802. package/out/recipes/locale.d.ts +0 -136
  803. package/out/recipes/locale.d.ts.map +0 -1
  804. package/out/recipes/locale.js +0 -460
  805. package/out/recipes/locale.js.map +0 -1
  806. package/out/recipes/nl-postcode.d.ts +0 -26
  807. package/out/recipes/nl-postcode.d.ts.map +0 -1
  808. package/out/recipes/nl-postcode.js +0 -102
  809. package/out/recipes/nl-postcode.js.map +0 -1
  810. package/out/recipes/no-fragment.d.ts +0 -43
  811. package/out/recipes/no-fragment.d.ts.map +0 -1
  812. package/out/recipes/no-fragment.js +0 -182
  813. package/out/recipes/no-fragment.js.map +0 -1
  814. package/out/recipes/no-street-led.d.ts +0 -24
  815. package/out/recipes/no-street-led.d.ts.map +0 -1
  816. package/out/recipes/no-street-led.js +0 -113
  817. package/out/recipes/no-street-led.js.map +0 -1
  818. package/out/recipes/no-street.d.ts +0 -18
  819. package/out/recipes/no-street.d.ts.map +0 -1
  820. package/out/recipes/no-street.js +0 -71
  821. package/out/recipes/no-street.js.map +0 -1
  822. package/out/recipes/po-box-cedex.d.ts +0 -38
  823. package/out/recipes/po-box-cedex.d.ts.map +0 -1
  824. package/out/recipes/po-box-cedex.js +0 -767
  825. package/out/recipes/po-box-cedex.js.map +0 -1
  826. package/out/recipes/po-box.d.ts +0 -17
  827. package/out/recipes/po-box.d.ts.map +0 -1
  828. package/out/recipes/po-box.js +0 -100
  829. package/out/recipes/po-box.js.map +0 -1
  830. package/out/recipes/reviewed-postcode-tail.d.ts.map +0 -1
  831. package/out/recipes/reviewed-postcode-tail.js.map +0 -1
  832. package/out/recipes/si-bare-village.d.ts +0 -32
  833. package/out/recipes/si-bare-village.d.ts.map +0 -1
  834. package/out/recipes/si-bare-village.js +0 -88
  835. package/out/recipes/si-bare-village.js.map +0 -1
  836. package/out/recipes/street-affix.d.ts +0 -89
  837. package/out/recipes/street-affix.d.ts.map +0 -1
  838. package/out/recipes/street-affix.js +0 -563
  839. package/out/recipes/street-affix.js.map +0 -1
  840. package/out/recipes/street-bare.d.ts +0 -25
  841. package/out/recipes/street-bare.d.ts.map +0 -1
  842. package/out/recipes/street-bare.js +0 -86
  843. package/out/recipes/street-bare.js.map +0 -1
  844. package/out/recipes/sub-venue-sources.d.ts +0 -229
  845. package/out/recipes/sub-venue-sources.d.ts.map +0 -1
  846. package/out/recipes/sub-venue-sources.js +0 -653
  847. package/out/recipes/sub-venue-sources.js.map +0 -1
  848. package/out/recipes/sub-venue.d.ts +0 -269
  849. package/out/recipes/sub-venue.d.ts.map +0 -1
  850. package/out/recipes/sub-venue.js +0 -725
  851. package/out/recipes/sub-venue.js.map +0 -1
  852. package/out/synthesizers/german.d.ts +0 -115
  853. package/out/synthesizers/german.d.ts.map +0 -1
  854. package/out/synthesizers/german.js +0 -149
  855. package/out/synthesizers/german.js.map +0 -1
  856. package/out/tools/fetch/ban.d.ts +0 -31
  857. package/out/tools/fetch/ban.d.ts.map +0 -1
  858. package/out/tools/fetch/ban.js +0 -239
  859. package/out/tools/fetch/ban.js.map +0 -1
  860. package/out/tools/fetch/download.d.ts +0 -117
  861. package/out/tools/fetch/download.d.ts.map +0 -1
  862. package/out/tools/fetch/download.js +0 -160
  863. package/out/tools/fetch/download.js.map +0 -1
  864. package/out/tools/fetch/geonames-dump.d.ts +0 -91
  865. package/out/tools/fetch/geonames-dump.d.ts.map +0 -1
  866. package/out/tools/fetch/geonames-dump.js +0 -171
  867. package/out/tools/fetch/geonames-dump.js.map +0 -1
  868. package/out/tools/fetch/geonames-postal.d.ts +0 -76
  869. package/out/tools/fetch/geonames-postal.d.ts.map +0 -1
  870. package/out/tools/fetch/geonames-postal.js +0 -126
  871. package/out/tools/fetch/geonames-postal.js.map +0 -1
  872. package/out/tools/fetch/hrsa.d.ts +0 -18
  873. package/out/tools/fetch/hrsa.d.ts.map +0 -1
  874. package/out/tools/fetch/hrsa.js +0 -46
  875. package/out/tools/fetch/hrsa.js.map +0 -1
  876. package/out/tools/fetch/imls-pls.d.ts +0 -25
  877. package/out/tools/fetch/imls-pls.d.ts.map +0 -1
  878. package/out/tools/fetch/imls-pls.js +0 -108
  879. package/out/tools/fetch/imls-pls.js.map +0 -1
  880. package/out/tools/fetch/nad.d.ts +0 -70
  881. package/out/tools/fetch/nad.d.ts.map +0 -1
  882. package/out/tools/fetch/nad.js +0 -234
  883. package/out/tools/fetch/nad.js.map +0 -1
  884. package/out/tools/fetch/nppes.d.ts +0 -26
  885. package/out/tools/fetch/nppes.d.ts.map +0 -1
  886. package/out/tools/fetch/nppes.js +0 -126
  887. package/out/tools/fetch/nppes.js.map +0 -1
  888. package/out/tools/fetch/state-hi-schools.d.ts +0 -26
  889. package/out/tools/fetch/state-hi-schools.d.ts.map +0 -1
  890. package/out/tools/fetch/state-hi-schools.js +0 -112
  891. package/out/tools/fetch/state-hi-schools.js.map +0 -1
  892. package/out/tools/fetch/state-sources.d.ts +0 -26
  893. package/out/tools/fetch/state-sources.d.ts.map +0 -1
  894. package/out/tools/fetch/state-sources.js +0 -111
  895. package/out/tools/fetch/state-sources.js.map +0 -1
  896. package/out/tools/fetch/tiger-full.d.ts +0 -22
  897. package/out/tools/fetch/tiger-full.d.ts.map +0 -1
  898. package/out/tools/fetch/tiger-full.js +0 -217
  899. package/out/tools/fetch/tiger-full.js.map +0 -1
  900. package/out/tools/golden-expand.d.ts +0 -90
  901. package/out/tools/golden-expand.d.ts.map +0 -1
  902. package/out/tools/golden-expand.js +0 -406
  903. package/out/tools/golden-expand.js.map +0 -1
  904. package/out/tools/golden-promote.d.ts +0 -72
  905. package/out/tools/golden-promote.d.ts.map +0 -1
  906. package/out/tools/golden-promote.js +0 -240
  907. package/out/tools/golden-promote.js.map +0 -1
  908. package/out/tools/golden-relabel-street.d.ts +0 -196
  909. package/out/tools/golden-relabel-street.d.ts.map +0 -1
  910. package/out/tools/golden-relabel-street.js +0 -440
  911. package/out/tools/golden-relabel-street.js.map +0 -1
  912. package/out/tools/lint-slice-vocab.d.ts +0 -90
  913. package/out/tools/lint-slice-vocab.d.ts.map +0 -1
  914. package/out/tools/lint-slice-vocab.js +0 -267
  915. package/out/tools/lint-slice-vocab.js.map +0 -1
  916. package/out/tools/lint-slice.d.ts +0 -93
  917. package/out/tools/lint-slice.d.ts.map +0 -1
  918. package/out/tools/lint-slice.js +0 -322
  919. package/out/tools/lint-slice.js.map +0 -1
  920. package/out/tools/slice-kryptonite.d.ts +0 -32
  921. package/out/tools/slice-kryptonite.d.ts.map +0 -1
  922. package/out/tools/slice-kryptonite.js +0 -99
  923. package/out/tools/slice-kryptonite.js.map +0 -1
  924. package/out/tools/slice-translit.d.ts +0 -51
  925. package/out/tools/slice-translit.d.ts.map +0 -1
  926. package/out/tools/slice-translit.js +0 -166
  927. package/out/tools/slice-translit.js.map +0 -1
  928. package/out/tools/sub-venue/harvest.d.ts +0 -100
  929. package/out/tools/sub-venue/harvest.d.ts.map +0 -1
  930. package/out/tools/sub-venue/harvest.js +0 -168
  931. package/out/tools/sub-venue/harvest.js.map +0 -1
  932. package/out/tools/sub-venue/head-nouns.d.ts +0 -50
  933. package/out/tools/sub-venue/head-nouns.d.ts.map +0 -1
  934. package/out/tools/sub-venue/head-nouns.js.map +0 -1
  935. package/out/tools/sub-venue/surfaces.d.ts +0 -45
  936. package/out/tools/sub-venue/surfaces.d.ts.map +0 -1
  937. package/out/tools/sub-venue/surfaces.js.map +0 -1
  938. package/out/tools/sub-venue/table.d.ts +0 -229
  939. package/out/tools/sub-venue/table.d.ts.map +0 -1
  940. package/out/tools/sub-venue/table.js.map +0 -1
  941. package/out/tools/sub-venue/wikidata.d.ts +0 -26
  942. package/out/tools/sub-venue/wikidata.d.ts.map +0 -1
  943. package/out/tools/sub-venue/wikidata.js +0 -62
  944. package/out/tools/sub-venue/wikidata.js.map +0 -1
  945. package/out/tools/sub-venue-lexicon.d.ts +0 -156
  946. package/out/tools/sub-venue-lexicon.d.ts.map +0 -1
  947. package/out/tools/sub-venue-lexicon.js +0 -283
  948. package/out/tools/sub-venue-lexicon.js.map +0 -1
  949. package/out/tools/sub-venue-promotions.d.ts +0 -94
  950. package/out/tools/sub-venue-promotions.d.ts.map +0 -1
  951. package/out/tools/sub-venue-promotions.js +0 -266
  952. package/out/tools/sub-venue-promotions.js.map +0 -1
  953. /package/lib/{recipes/cn-organizational-units.ts → cn/recipes/organizational-units.ts} +0 -0
  954. /package/lib/{adapters → fr/adapters}/ban/street-decompose.ts +0 -0
  955. /package/lib/{adapters/wof-admin-jp → jp/adapters/wof-admin}/adapter.ts +0 -0
  956. /package/lib/tools/{golden-expand.ts → golden/expand.ts} +0 -0
  957. /package/lib/tools/{lint-slice.ts → lint/slice/index.ts} +0 -0
  958. /package/lib/tools/{slice-kryptonite.ts → slice/kryptonite.ts} +0 -0
  959. /package/lib/tools/{slice-translit.ts → slice/translit.ts} +0 -0
  960. /package/lib/tools/{sub-venue-promotions.ts → sub/venue/promotions.ts} +0 -0
  961. /package/lib/{adapters/state-hi-schools → us/adapters/state/hi-schools}/workbook.ts +0 -0
  962. /package/lib/{adapters → us/adapters}/tiger/street-decompose.ts +0 -0
  963. /package/lib/{codex/us-fips-state.ts → us/fips-state.ts} +0 -0
  964. /package/lib/{recipes → ve/recipes}/reviewed-postcode-tail.ts +0 -0
  965. /package/out/adapters/{geonames-postal → geonames/postal}/adapter.d.ts +0 -0
  966. /package/out/{adapters → au/adapters}/gnaf/adapter.d.ts +0 -0
  967. /package/out/{adapters → fr/adapters}/ban/adapter.d.ts +0 -0
  968. /package/out/{adapters → fr/adapters}/ban/street-decompose.d.ts +0 -0
  969. /package/out/{adapters → fr/adapters}/ban/street-decompose.js +0 -0
  970. /package/out/{adapters/wof-admin-jp → jp/adapters/wof-admin}/adapter.d.ts +0 -0
  971. /package/out/{adapters/wof-admin-jp → jp/adapters/wof-admin}/adapter.js +0 -0
  972. /package/out/tools/{sub-venue → sub/venue}/head-nouns.js +0 -0
  973. /package/out/tools/{sub-venue → sub/venue}/surfaces.js +0 -0
  974. /package/out/tools/{sub-venue → sub/venue}/table.js +0 -0
  975. /package/out/{adapters → us/adapters}/fcc-bdc/adapter.d.ts +0 -0
  976. /package/out/{adapters/state-hi-schools → us/adapters/state/hi-schools}/adapter.d.ts +0 -0
  977. /package/out/{adapters/state-hi-schools → us/adapters/state/hi-schools}/workbook.d.ts +0 -0
  978. /package/out/{adapters/state-hi-schools → us/adapters/state/hi-schools}/workbook.js +0 -0
  979. /package/out/{adapters/state-ia-contractors → us/adapters/state/ia-contractors}/adapter.d.ts +0 -0
  980. /package/out/{adapters/state-ny-notaries → us/adapters/state/ny-notaries}/adapter.d.ts +0 -0
  981. /package/out/{adapters/state-tx-notaries → us/adapters/state/tx-notaries}/adapter.d.ts +0 -0
  982. /package/out/{adapters → us/adapters}/tiger/street-decompose.d.ts +0 -0
  983. /package/out/{adapters → us/adapters}/tiger/street-decompose.js +0 -0
  984. /package/out/{adapters/usgov-hrsa-fqhc → us/adapters/usgov/hrsa-fqhc}/adapter.d.ts +0 -0
  985. /package/out/{adapters/usgov-imls-pls → us/adapters/usgov/imls-pls}/adapter.d.ts +0 -0
  986. /package/out/{adapters/usgov-irs-bmf → us/adapters/usgov/irs-bmf}/adapter.d.ts +0 -0
  987. /package/out/{adapters/usgov-nad → us/adapters/usgov/nad}/adapter.d.ts +0 -0
  988. /package/out/{adapters/usgov-nppes → us/adapters/usgov/nppes}/adapter.d.ts +0 -0
  989. /package/out/{adapters/usgov-samhsa-treatment-locator → us/adapters/usgov/samhsa-treatment-locator}/adapter.d.ts +0 -0
  990. /package/out/{recipes → ve/recipes}/reviewed-postcode-tail.d.ts +0 -0
  991. /package/out/{recipes → ve/recipes}/reviewed-postcode-tail.js +0 -0
@@ -1,197 +0,0 @@
1
- /**
2
- * @copyright Sister Software
3
- * @license AGPL-3.0
4
- * @author Teffen Ellis, et al.
5
- *
6
- * `fr-order` slice recipe — French reversed-order coverage (#560). Reads REAL OpenAddresses FR
7
- * tuples (`fr/countrywide.csv` from the cached zip), then for each row picks — by
8
- * `--reversed-fraction` (default 0.5) — whether to render in CANONICAL French order
9
- * (number-street, postcode-city) or one of four REVERSED / postcode-first variants the
10
- * v4.4.0→v0.5.0 regression exposed (the model misses house_number in every reversed one):
11
- *
12
- * - A: "47110 Sainte-Livrade-sur-Lot, 69 Allée du Bugatel" (postcode city, HN street)
13
- * - B: "Sainte-Livrade-sur-Lot, 47110, 619 Impasse de la Rose" (city, postcode, HN street)
14
- * - C: "Sainte-Livrade-sur-Lot 59 bis Rue des Ecuries 47110" (city HN street postcode — NO commas)
15
- * - D: "47110, 6 rue de la république, Sainte-Livrade-sur-Lot" (postcode, HN street, city)
16
- *
17
- * Sub-modes ride alongside order: `bis`/`ter`/`quater` ordinal suffixes in house_number, and
18
- * ALL-CAPS locality. `--golden` emits a held-out reversed-order eval slice with a different
19
- * seed.
20
- *
21
- * The inline synthesis (the OA-CSV reader, the ordinal/all-caps tables, the canonical + reversed
22
- * renderers) is ported faithfully from scripts/build-fr-order-slice.mjs. This is a
23
- * `generate`-mode recipe that still reads REAL tuples off disk — `--count` bounds the OUTPUT, not
24
- * the input. The passed `random` (the framework LCG) is consumed in the exact call order the
25
- * legacy script used.
26
- *
27
- * NOT ported (diagnostic-only, no effect on emitted bytes): the post-run `runSpanCheck` self-check
28
- * (it reads the finished file back with a separate PRNG and prints to stderr; the recipe's output
29
- * stream is still open during `run`), and the dead `renderReversed` helper (the legacy `main`
30
- * inlined the variant logic and never called it).
31
- */
32
- import { dataRootPath } from "@mailwoman/core/data-root";
33
- import { isPresent } from "@mailwoman/core/objects";
34
- import { stableSourceID } from "#adapters/utils";
35
- import { makeMulberry32, readOATuples } from "#recipes/scaffold";
36
- import { pick } from "#synthesizers/utils";
37
- import { alignRow } from "#utils";
38
- const SOURCE = { zip: dataRootPath("oa-cache", "fr__countrywide.zip"), csv: "fr/countrywide.csv" };
39
- /**
40
- * Ordinal suffixes used in French house numbers (BAN corpus), to cover the "8 bis" sub-mode.
41
- */
42
- const ORDINAL_SUFFIXES = ["bis", "ter", "quater"];
43
- /**
44
- * Probability that a row gets an ordinal suffix injected (matches the golden's ~10-15% rate).
45
- */
46
- const ORDINAL_PROB = 0.12;
47
- /**
48
- * Probability that a locality renders ALL-CAPS (another sub-mode: "SAINTE-LIVRADE-SUR-LOT").
49
- */
50
- const ALLCAPS_PROB = 0.1;
51
- /**
52
- * Stream FR tuples out of the cached OA zip. The countrywide extract is GB-scale, so this reads only as far as `limit`
53
- * distinct tuples — the `break` closes the reader and releases the archive. Only keeps rows with a house_number (the
54
- * slice's core signal) and a postcode (required for reversed-order rendering to be meaningful; it is also part of this
55
- * recipe's dedup key).
56
- */
57
- async function readTuples(limit) {
58
- return readOATuples(SOURCE, {
59
- limit,
60
- requirePostcode: true,
61
- dedupIncludesPostcode: true,
62
- extra: (fields) => fields,
63
- });
64
- }
65
- /**
66
- * Optionally augment a house_number with a French ordinal suffix ("59 bis", "4 ter"). Appended with a space so it forms
67
- * one multi-token house_number string that alignRow can still locate verbatim.
68
- */
69
- function maybeAddOrdinal(random, house_number) {
70
- if (random() >= ORDINAL_PROB)
71
- return house_number;
72
- const suffix = pick(ORDINAL_SUFFIXES, random);
73
- // Vary suffix case: "bis" (lower) vs "BIS" (upper) — a real-world split in the golden.
74
- return `${house_number} ${random() < 0.5 ? suffix : suffix.toUpperCase()}`;
75
- }
76
- /**
77
- * Render a tuple in CANONICAL French order: "9 Rue de la Promenade, 01200 Villes".
78
- */
79
- function renderCanonical(hn, street, postcode, locality) {
80
- const raw = `${hn} ${street}, ${postcode} ${locality}`;
81
- return { raw, components: { house_number: hn, street, postcode, locality } };
82
- }
83
- // Reversed layouts, a quarter each: A postcode+city then HN+street; B city, postcode, HN+street; C run-together;
84
- // D postcode, HN+street, city.
85
- const REVERSED_VARIANT_A_CUTOFF = 0.25;
86
- const REVERSED_VARIANT_B_CUTOFF = 0.5;
87
- const REVERSED_VARIANT_C_CUTOFF = 0.75;
88
- /**
89
- * Slice recipe registered with the corpus builder — see the file header for the parse behaviour it exists to exercise,
90
- * and `description` below for the surface form it generates.
91
- */
92
- export const frOrderRecipe = {
93
- name: "fr-order",
94
- description: "French reversed-order rows (#560): real OA FR tuples rendered canonical + 4 postcode-first variants",
95
- mode: "generate",
96
- options: [
97
- { flag: "--reversed-fraction <p>", description: "Fraction rendered reversed-order. Default 0.5" },
98
- { flag: "--golden", description: "Emit the held-out reversed-order eval slice" },
99
- ],
100
- async run(opts, write) {
101
- if (opts.count == null)
102
- throw new Error("fr-order recipe requires --count <N>");
103
- const count = opts.count;
104
- // Legacy build-fr-order-slice.mjs seeded mulberry32 with the raw seed: `const random = mulberry32(opts.seed)`.
105
- // (The omitted diagnostic runSpanCheck used a separate mulberry32(opts.seed + 1) — not part of generation.)
106
- const random = makeMulberry32(opts.seed);
107
- const source = opts.sourceName ?? "synth-fr-order";
108
- const reversedFraction = opts.reversedFraction ?? 0.5;
109
- // Over-read from the CSV so the dedup + filter pass can fill `count` rows.
110
- const poolLimit = Math.max(count * 8, 40_000);
111
- const pool = await readTuples(poolLimit);
112
- console.error(` ${SOURCE.csv}: ${pool.length} unique tuples (capped read)`);
113
- if (!pool.length) {
114
- throw new Error(`No FR tuples found — is ${SOURCE.zip} present?`);
115
- }
116
- let emitted = 0;
117
- let skipped = 0;
118
- let guard = 0;
119
- const N = pool.length;
120
- while (emitted < count && guard++ < count * 10) {
121
- const base = pool[Math.floor(random() * N)];
122
- const { street, postcode } = base;
123
- const locality = random() < ALLCAPS_PROB ? base.locality.toUpperCase() : base.locality;
124
- const house_number = maybeAddOrdinal(random, base.house_number);
125
- // Pick canonical vs reversed by --reversed-fraction.
126
- const isReversed = random() < reversedFraction;
127
- let rendered;
128
- if (isReversed) {
129
- const variantRoll = random();
130
- let raw;
131
- if (variantRoll < REVERSED_VARIANT_A_CUTOFF) {
132
- // Variant A: postcode+city as a unit, then HN+street
133
- raw = `${postcode} ${locality}, ${house_number} ${street}`;
134
- }
135
- else if (variantRoll < REVERSED_VARIANT_B_CUTOFF) {
136
- // Variant B: city, then postcode, then HN+street (comma-separated, postcode isolated)
137
- raw = `${locality}, ${postcode}, ${house_number} ${street}`;
138
- }
139
- else if (variantRoll < REVERSED_VARIANT_C_CUTOFF) {
140
- // Variant C: no commas — locality HN street postcode (the "run-together" format)
141
- raw = `${locality} ${house_number} ${street} ${postcode}`;
142
- }
143
- else {
144
- // Variant D: postcode, HN+street, city (reversed top-to-bottom)
145
- raw = `${postcode}, ${house_number} ${street}, ${locality}`;
146
- }
147
- rendered = { raw, components: { house_number, street, postcode, locality } };
148
- }
149
- else {
150
- rendered = renderCanonical(house_number, street, postcode, locality);
151
- }
152
- const { raw, components } = rendered;
153
- // Safety check: every component must appear verbatim in raw (alignment precondition).
154
- const componentValues = Object.values(components).filter(isPresent);
155
- if (!componentValues.every((v) => raw.includes(v))) {
156
- skipped++;
157
- continue;
158
- }
159
- // --golden: emit per-locale-f1 eval rows ({raw, components, country:"FR"}).
160
- if (opts.golden) {
161
- write(JSON.stringify({ raw, components, country: "FR" }) + "\n");
162
- emitted++;
163
- continue;
164
- }
165
- const sourceID = stableSourceID(source, {
166
- street: components.street,
167
- house_number: components.house_number,
168
- locality: components.locality,
169
- postcode: components.postcode,
170
- });
171
- const canonical = {
172
- raw,
173
- components,
174
- country: "FR",
175
- locale: "fr-FR",
176
- source,
177
- source_id: sourceID,
178
- corpus_version: "0.5.0",
179
- license: "OpenAddresses FR countrywide tuples, rendered canonical + reversed-order — see ingest SOURCE",
180
- };
181
- const aligned = alignRow(canonical);
182
- if (aligned.kind !== "labeled" || !aligned.row) {
183
- skipped++;
184
- continue;
185
- }
186
- write(JSON.stringify({
187
- ...aligned.row,
188
- synth_method: "fr-order",
189
- synth_order: isReversed ? "reversed" : "canonical",
190
- synth_base_id: null,
191
- }) + "\n");
192
- emitted++;
193
- }
194
- return { emitted, skipped };
195
- },
196
- };
197
- //# sourceMappingURL=fr-order.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fr-order.js","sourceRoot":"","sources":["../../lib/recipes/fr-order.ts"],"names":[],"mappings":"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"}
@@ -1,44 +0,0 @@
1
- /**
2
- * @copyright Sister Software
3
- * @license AGPL-3.0
4
- * @author Teffen Ellis, et al.
5
- *
6
- * `german` slice recipe — German coverage rows from REAL OpenAddresses tuples (Berlin + Saxony,
7
- * cached zips). Each sampled tuple is rendered via {@link synthesizeGermanRow} in BOTH orders —
8
- * `--intl-fraction` (default 0.4) in international order (house-first / postcode-after-city), the
9
- * rest in idiomatic German order — then aligned to BIO. Generate-mode: it builds a tuple pool
10
- * from the cached zips, then draws `--count` rows from it with the passed `random` (so the emit
11
- * stream matches the legacy reservoir-sample loop). Ported from scripts/build-german-slice.mjs.
12
- *
13
- * ORDER ROBUSTNESS (2026-06-06): mixing the two renderings stops a native-only slice from teaching
14
- * German order so well it reads the US/feed-order eval as a "collapse". See
15
- * docs/articles/evals/resolver-geo/2026-06-06-anchor-pilot.md (the order-artifact correction).
16
- *
17
- * TWO REGISTERS THE OA TUPLES DO NOT CARRY (#1946). A comma-free single line — `Neusser Str. 12 Nippes
18
- * 50733 Köln`, the dictation / one-field-form register — segments as ONE unit at stage 2, and with one
19
- * segment the placetype-pair prior never fires, so the model reads `Nippes` as a second street and the
20
- * one-value-per-tag projection deletes it. `--comma-free-fraction` renders that many native-order rows
21
- * with `" "` as the line separator. And OA rows have no district at all, so `--ortsteil-fraction` rows
22
- * borrow a WOF Ortsteil of the tuple's own locality as `dependent_locality` — 67,532 DE neighbourhoods
23
- * carry a locality ancestor in the admin database, `Köln-Nippes` among them. The German spelling is
24
- * recovered from the `names` table ({@link ortsteilSurface}): WOF's `spr.name` for DE neighbourhoods is
25
- * the ASCII-folded label (`Bocklemuend`), which no German ever types.
26
- */
27
- import { type CorpusRecipe } from "#recipes/scaffold";
28
- /**
29
- * The surface an Ortsteil is written with in an address, from WOF's rows for it.
30
- *
31
- * `spr.name` for a DE neighbourhood is the ASCII-folded label; the `names` rows in `deu` carry the German spelling
32
- * beside unrelated labels for co-located features (`Bocklemuend` → `Bocklemünd`, `Jüdischer Friedhof Bocklemünd`,
33
- * `Menara-Garten`). The German name is the one that spells the same label as `spr.name` under either of WOF's ASCII
34
- * folds ({@link foldGerman}); with none, `spr.name` stands. WOF also prefixes some Ortsteile with their city
35
- * (`Köln-Nippes`), a form no envelope carries once the city is its own line, so a leading `<locality>-` is dropped when
36
- * something is left after it.
37
- */
38
- export declare function ortsteilSurface(sprName: string, deuNames: readonly string[], locality: string): string;
39
- /**
40
- * Slice recipe registered with the corpus builder — see the file header for the parse behaviour it exists to exercise,
41
- * and `description` below for the surface form it generates.
42
- */
43
- export declare const germanRecipe: CorpusRecipe;
44
- //# sourceMappingURL=german.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"german.d.ts","sourceRoot":"","sources":["../../lib/recipes/german.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AASH,OAAO,EAAwC,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAA;AA0D3F;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOtG;AAoFD;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,YAiK1B,CAAA"}
@@ -1,288 +0,0 @@
1
- /**
2
- * @copyright Sister Software
3
- * @license AGPL-3.0
4
- * @author Teffen Ellis, et al.
5
- *
6
- * `german` slice recipe — German coverage rows from REAL OpenAddresses tuples (Berlin + Saxony,
7
- * cached zips). Each sampled tuple is rendered via {@link synthesizeGermanRow} in BOTH orders —
8
- * `--intl-fraction` (default 0.4) in international order (house-first / postcode-after-city), the
9
- * rest in idiomatic German order — then aligned to BIO. Generate-mode: it builds a tuple pool
10
- * from the cached zips, then draws `--count` rows from it with the passed `random` (so the emit
11
- * stream matches the legacy reservoir-sample loop). Ported from scripts/build-german-slice.mjs.
12
- *
13
- * ORDER ROBUSTNESS (2026-06-06): mixing the two renderings stops a native-only slice from teaching
14
- * German order so well it reads the US/feed-order eval as a "collapse". See
15
- * docs/articles/evals/resolver-geo/2026-06-06-anchor-pilot.md (the order-artifact correction).
16
- *
17
- * TWO REGISTERS THE OA TUPLES DO NOT CARRY (#1946). A comma-free single line — `Neusser Str. 12 Nippes
18
- * 50733 Köln`, the dictation / one-field-form register — segments as ONE unit at stage 2, and with one
19
- * segment the placetype-pair prior never fires, so the model reads `Nippes` as a second street and the
20
- * one-value-per-tag projection deletes it. `--comma-free-fraction` renders that many native-order rows
21
- * with `" "` as the line separator. And OA rows have no district at all, so `--ortsteil-fraction` rows
22
- * borrow a WOF Ortsteil of the tuple's own locality as `dependent_locality` — 67,532 DE neighbourhoods
23
- * carry a locality ancestor in the admin database, `Köln-Nippes` among them. The German spelling is
24
- * recovered from the `names` table ({@link ortsteilSurface}): WOF's `spr.name` for DE neighbourhoods is
25
- * the ASCII-folded label (`Bocklemuend`), which no German ever types.
26
- */
27
- import { dataRootPath } from "@mailwoman/core/data-root";
28
- import { pathExists } from "@mailwoman/core/fs/readers";
29
- import { DatabaseClient } from "@mailwoman/sqlite/client";
30
- import { stableSourceID } from "#adapters/utils";
31
- import { makeMulberry32, readZippedCSVRecords } from "#recipes/scaffold";
32
- import { synthesizeGermanRow } from "#synthesizers/german";
33
- import { alignRow } from "#utils";
34
- /**
35
- * `region` is the Bundesland the source covers. OA's REGION column is empty for DE, but the region is implied by the
36
- * per-state file — the international order needs it for the "City, Region Postcode" tail (v0.9.3 / #327). berlin.csv →
37
- * Berlin (a city-state, region==locality); sn/statewide → Sachsen.
38
- */
39
- const SOURCES = [
40
- { zip: dataRootPath("oa-cache", "de__berlin.zip"), csv: "de/berlin.csv", region: "Berlin" },
41
- { zip: dataRootPath("oa-cache", "de__sn__statewide.zip"), csv: "de/sn/statewide.csv", region: "Sachsen" },
42
- ];
43
- /**
44
- * The two ASCII spellings WOF uses for one German label, so a `names.deu` row can be matched to the `spr.name` it
45
- * spells. WOF folds `Bocklemünd` to `Bocklemuend` in one record and `Schöneberg` to `Schoneberg` in another — the
46
- * transliteration (`ö` → `oe`, `ß` → `ss`) and the plain diacritic strip (`ö` → `o`) both occur — so a match is against
47
- * either form, lower-cased.
48
- */
49
- function foldGerman(surface) {
50
- const lower = surface.toLowerCase();
51
- const stripped = lower
52
- .normalize("NFD")
53
- .replaceAll(/[\u0300-\u036F]/g, "")
54
- .replaceAll("ß", "ss");
55
- const transliterated = lower
56
- .replaceAll("ä", "ae")
57
- .replaceAll("ö", "oe")
58
- .replaceAll("ü", "ue")
59
- .replaceAll("ß", "ss")
60
- .normalize("NFD")
61
- .replaceAll(/[\u0300-\u036F]/g, "");
62
- return [transliterated, stripped];
63
- }
64
- /**
65
- * Whether two surfaces spell the same German label under either of WOF's folds.
66
- */
67
- function sameGermanLabel(left, right) {
68
- const [leftT, leftS] = foldGerman(left);
69
- const [rightT, rightS] = foldGerman(right);
70
- return leftT === rightT || leftS === rightS || leftT === rightS || leftS === rightT;
71
- }
72
- /**
73
- * The surface an Ortsteil is written with in an address, from WOF's rows for it.
74
- *
75
- * `spr.name` for a DE neighbourhood is the ASCII-folded label; the `names` rows in `deu` carry the German spelling
76
- * beside unrelated labels for co-located features (`Bocklemuend` → `Bocklemünd`, `Jüdischer Friedhof Bocklemünd`,
77
- * `Menara-Garten`). The German name is the one that spells the same label as `spr.name` under either of WOF's ASCII
78
- * folds ({@link foldGerman}); with none, `spr.name` stands. WOF also prefixes some Ortsteile with their city
79
- * (`Köln-Nippes`), a form no envelope carries once the city is its own line, so a leading `<locality>-` is dropped when
80
- * something is left after it.
81
- */
82
- export function ortsteilSurface(sprName, deuNames, locality) {
83
- const german = deuNames.find((name) => sameGermanLabel(name, sprName)) ?? sprName;
84
- const prefix = `${locality}-`;
85
- return german.toLowerCase().startsWith(prefix.toLowerCase()) && german.length > prefix.length
86
- ? german.slice(prefix.length)
87
- : german;
88
- }
89
- /**
90
- * Every current DE neighbourhood with a locality ancestor, keyed by the folded locality name → Ortsteil surfaces. Empty
91
- * when the admin database is not readable; the recipe then emits no Ortsteil rows and says so, rather than failing a
92
- * build over an optional register.
93
- */
94
- async function readOrtsteilPool(adminDB) {
95
- const pool = new Map();
96
- if (!(await pathExists(adminDB)))
97
- return pool;
98
- using db = new DatabaseClient(adminDB, { readOnly: true });
99
- const rows = await db
100
- .selectFrom("spr as s")
101
- .innerJoin("ancestors as a", "a.id", "s.id")
102
- .innerJoin("spr as p", "p.id", "a.ancestor_id")
103
- .select(["s.id as id", "s.name as name", "p.name as locality"])
104
- .where("s.country", "=", "DE")
105
- .where("s.placetype", "=", "neighbourhood")
106
- .where("s.is_current", "=", 1)
107
- .where("s.is_deprecated", "=", 0)
108
- .where("a.ancestor_placetype", "=", "locality")
109
- .execute();
110
- const deuNames = new Map();
111
- for (const row of await db
112
- .selectFrom("names")
113
- .select(["id", "name"])
114
- .where("country", "=", "DE")
115
- .where("placetype", "=", "neighbourhood")
116
- .where("language", "=", "deu")
117
- .execute()) {
118
- const list = deuNames.get(row.id) ?? [];
119
- list.push(row.name);
120
- deuNames.set(row.id, list);
121
- }
122
- for (const row of rows) {
123
- if (!row.name || !row.locality)
124
- continue;
125
- const surface = ortsteilSurface(row.name, deuNames.get(row.id) ?? [], row.locality);
126
- const key = row.locality.toLowerCase();
127
- const list = pool.get(key) ?? [];
128
- if (!list.includes(surface)) {
129
- list.push(surface);
130
- }
131
- pool.set(key, list);
132
- }
133
- return pool;
134
- }
135
- /**
136
- * Stream real German tuples out of a cached OA zip.
137
- */
138
- async function readGermanTuples(source) {
139
- const tuples = [];
140
- const seen = new Set();
141
- for await (const row of readZippedCSVRecords(source.zip, source.csv)) {
142
- const street = row.street ?? "";
143
- const locality = row.city ?? "";
144
- if (!street || !locality)
145
- continue;
146
- const house_number = row.number ?? "";
147
- const postcode = row.postcode ?? "";
148
- // OA's REGION column is empty for DE — fall back to the source's Bundesland (set per file).
149
- const region = row.region || source.region || "";
150
- const key = `${house_number}|${street}|${locality}|${postcode}`.toLowerCase();
151
- if (seen.has(key))
152
- continue;
153
- seen.add(key);
154
- tuples.push({ house_number, street, locality, region, postcode });
155
- }
156
- return tuples;
157
- }
158
- /**
159
- * Slice recipe registered with the corpus builder — see the file header for the parse behaviour it exists to exercise,
160
- * and `description` below for the surface form it generates.
161
- */
162
- export const germanRecipe = {
163
- name: "german",
164
- description: "German coverage rows from real OA tuples (Berlin/Saxony), both orders → synthesizeGermanRow",
165
- mode: "generate",
166
- options: [
167
- { flag: "--intl-fraction <f>", description: "Fraction rendered international order. Default 0.4" },
168
- {
169
- flag: "--comma-free-fraction <f>",
170
- description: "Fraction of native-order rows rendered with no commas (the single-line register, #1946). Default 0.3",
171
- },
172
- {
173
- flag: "--ortsteil-fraction <f>",
174
- description: "Fraction of rows carrying a WOF Ortsteil of the locality as dependent_locality. Default 0.3",
175
- },
176
- {
177
- flag: "--admin-db <path>",
178
- description: "WOF admin database for the Ortsteil pool. Default $MAILWOMAN_DATA_ROOT/wof/admin-global-priority-importance.db",
179
- },
180
- ],
181
- async run(opts, write) {
182
- // Emit PRNG: the legacy build-german-slice.mjs seeded mulberry32(opts.seed).
183
- const random = makeMulberry32(opts.seed);
184
- const source = opts.sourceName ?? "synth-german";
185
- const intlFraction = opts.intlFraction ?? 0.4;
186
- const commaFreeFraction = opts.commaFreeFraction ?? 0.3;
187
- const ortsteilFraction = opts.ortsteilFraction ?? 0.3;
188
- for (const [flag, value] of [
189
- ["--intl-fraction", intlFraction],
190
- ["--comma-free-fraction", commaFreeFraction],
191
- ["--ortsteil-fraction", ortsteilFraction],
192
- ]) {
193
- if (!(value >= 0 && value <= 1)) {
194
- throw new Error(`${flag} must be in [0, 1], got ${value}`);
195
- }
196
- }
197
- const adminDB = opts.adminDB ?? String(dataRootPath("wof", "admin-global-priority-importance.db"));
198
- const ortsteile = ortsteilFraction > 0 ? await readOrtsteilPool(adminDB) : new Map();
199
- if (ortsteilFraction > 0) {
200
- console.error(ortsteile.size
201
- ? ` Ortsteil pool: ${[...ortsteile.values()].reduce((n, list) => n + list.length, 0)} surfaces under ${ortsteile.size} localities (${adminDB})`
202
- : ` Ortsteil pool: none — ${adminDB} is not readable, so no row carries a dependent_locality`);
203
- }
204
- const count = opts.count ?? 4000;
205
- // Pool real tuples from every German source, then sample `count` rows from it.
206
- const pool = [];
207
- for (const s of SOURCES) {
208
- const t = await readGermanTuples(s);
209
- console.error(` ${s.csv}: ${t.length} unique tuples`);
210
- for (const x of t) {
211
- pool.push(x);
212
- } // NOT pool.push(...t) — spreading ~840K args overflows the stack
213
- }
214
- if (!pool.length) {
215
- throw new Error(`No German tuples found — are the cached zips present in ${dataRootPath("oa-cache")}?`);
216
- }
217
- let emitted = 0;
218
- let skipped = 0;
219
- let guard = 0;
220
- let withOrtsteil = 0;
221
- let commaFree = 0;
222
- const N = pool.length;
223
- while (emitted < count && guard++ < count * 6) {
224
- const drawn = pool[Math.floor(random() * N)];
225
- // Per-row order: `--intl-fraction` of rows render house-first / postcode-after-city (the US/feed
226
- // layout), the rest in idiomatic German order. Same components either way.
227
- const order = random() < intlFraction ? "international" : "native";
228
- // The two registers OA never wrote (#1946), each drawn independently of the order so every combination
229
- // occurs: an Ortsteil borrowed from the tuple's own locality, and a native line with no commas.
230
- const localOrtsteile = ortsteile.get(drawn.locality.toLowerCase());
231
- const ortsteil = localOrtsteile && random() < ortsteilFraction
232
- ? localOrtsteile[Math.floor(random() * localOrtsteile.length)]
233
- : undefined;
234
- const base = ortsteil ? { ...drawn, dependent_locality: ortsteil } : drawn;
235
- const separator = order === "native" && random() < commaFreeFraction ? " " : ", ";
236
- const synth = synthesizeGermanRow(base, { random, order, separator });
237
- if (!synth) {
238
- skipped++;
239
- continue;
240
- }
241
- // --golden: emit per-locale-f1 eval rows ({raw, components}) instead of aligned BIO. `order`
242
- // rides along so the eval can stratify native vs international.
243
- if (opts.golden) {
244
- write(JSON.stringify({ raw: synth.raw, components: synth.components, country: "DE", order }) + "\n");
245
- emitted++;
246
- continue;
247
- }
248
- const sourceID = stableSourceID(source, {
249
- street: synth.components.street,
250
- house_number: synth.components.house_number,
251
- locality: synth.components.locality,
252
- postcode: synth.components.postcode,
253
- });
254
- const canonical = {
255
- raw: synth.raw,
256
- components: synth.components,
257
- country: "DE",
258
- locale: synth.locale,
259
- source,
260
- source_id: sourceID,
261
- corpus_version: "0.4.0",
262
- license: `OpenAddresses DE (Berlin/Saxony) tuples, rendered ${order}-order — see ingest SOURCES`,
263
- };
264
- const aligned = alignRow(canonical);
265
- if (aligned.kind !== "labeled" || !aligned.row) {
266
- skipped++;
267
- continue;
268
- }
269
- write(JSON.stringify({
270
- ...aligned.row,
271
- synth_method: "german",
272
- synth_order: order,
273
- synth_separator: separator === " " ? "space" : "comma",
274
- synth_base_id: null,
275
- }) + "\n");
276
- emitted++;
277
- if (ortsteil) {
278
- withOrtsteil++;
279
- }
280
- if (separator === " ") {
281
- commaFree++;
282
- }
283
- }
284
- console.error(` emitted ${emitted}: ${withOrtsteil} with an Ortsteil, ${commaFree} comma-free`);
285
- return { emitted, skipped };
286
- },
287
- };
288
- //# sourceMappingURL=german.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"german.js","sourceRoot":"","sources":["../../lib/recipes/german.ts"],"names":[],"mappings":"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"}