@mailwoman/corpus 9.4.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 (981) 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/de/recipes/locale.ts +360 -0
  15. package/lib/fr/adapters/ban/adapter.ts +159 -0
  16. package/lib/fr/recipes/admin-split.ts +243 -0
  17. package/lib/fr/recipes/bare-street.ts +171 -0
  18. package/lib/fr/recipes/fragment.ts +334 -0
  19. package/lib/fr/recipes/lieudit.ts +274 -0
  20. package/lib/fr/recipes/order.ts +246 -0
  21. package/lib/fr/tools/fetch/ban.ts +289 -0
  22. package/lib/index.ts +1 -1
  23. package/lib/international/recipes/locale.ts +598 -0
  24. package/lib/jp/tools/fetch/houjin.ts +141 -0
  25. package/lib/kr/adapters/juso/label-rows.ts +259 -0
  26. package/lib/kr/adapters/localdata/align.ts +299 -0
  27. package/lib/kr/adapters/localdata/key-index.ts +185 -0
  28. package/lib/kr/adapters/localdata/permit-rows.ts +186 -0
  29. package/lib/kr/tools/fetch/juso.ts +172 -0
  30. package/lib/kr/tools/fetch/localdata.ts +206 -0
  31. package/lib/recipes/bare/postcode/eval.ts +99 -0
  32. package/lib/recipes/bare/postcode/index.ts +327 -0
  33. package/lib/recipes/country-balanced.ts +1 -1
  34. package/lib/recipes/index.ts +28 -21
  35. package/lib/recipes/intersection.ts +1 -1
  36. package/lib/recipes/po/box/cedex/au-nz.ts +82 -0
  37. package/lib/recipes/po/box/cedex/ca.ts +58 -0
  38. package/lib/recipes/po/box/cedex/fr.ts +76 -0
  39. package/lib/recipes/po/box/cedex/phrases.ts +108 -0
  40. package/lib/recipes/po/box/cedex/recipe.ts +203 -0
  41. package/lib/recipes/po/box/cedex/sources.ts +189 -0
  42. package/lib/recipes/po/box/cedex/types.ts +35 -0
  43. package/lib/recipes/po/box/cedex/us.ts +69 -0
  44. package/lib/recipes/po/box/cedex/vocabulary.ts +106 -0
  45. package/lib/recipes/po/box/cedex.ts +9 -0
  46. package/lib/recipes/po/box/index.ts +128 -0
  47. package/lib/recipes/scaffold.ts +18 -41
  48. package/lib/recipes/street/affix.ts +807 -0
  49. package/lib/recipes/sub/venue/context.ts +149 -0
  50. package/lib/recipes/sub/venue/index.ts +997 -0
  51. package/lib/recipes/sub/venue/sources.ts +739 -0
  52. package/lib/recipes/trailing-region.ts +6 -1
  53. package/lib/recipes/unit.ts +1 -1
  54. package/lib/sg/recipes/register.ts +270 -0
  55. package/lib/sg/tools/fetch/acra.ts +179 -0
  56. package/lib/south-asia/recipes/register.ts +214 -0
  57. package/lib/synthesizers/anchor-absorption.ts +1 -1
  58. package/lib/synthesizers/locale.ts +261 -0
  59. package/lib/synthesizers/street.ts +1 -1
  60. package/lib/synthesizers/utils.ts +2 -2
  61. package/lib/tools/audit.ts +3 -2
  62. package/lib/tools/corpus-stats.ts +3 -3
  63. package/lib/tools/fetch/download/index.ts +10 -0
  64. package/lib/tools/fetch/download/manifest.ts +102 -0
  65. package/lib/tools/fetch/download/network.ts +226 -0
  66. package/lib/tools/fetch/download/retry.ts +173 -0
  67. package/lib/tools/fetch/geonames/dump.ts +257 -0
  68. package/lib/tools/fetch/geonames/postal.ts +180 -0
  69. package/lib/tools/fetch/index.ts +30 -30
  70. package/lib/tools/fetch/openaddresses.ts +2 -2
  71. package/lib/tools/fetch/ourairports.ts +2 -2
  72. package/lib/tools/fetch/ppd.ts +1 -3
  73. package/lib/tools/fetch/wikidata-subvenue.ts +2 -2
  74. package/lib/tools/golden/promote.ts +340 -0
  75. package/lib/tools/golden/relabel-street/directory.ts +340 -0
  76. package/lib/tools/golden/relabel-street/index.ts +9 -0
  77. package/lib/tools/golden/relabel-street/row.ts +361 -0
  78. package/lib/tools/index.ts +10 -10
  79. package/lib/tools/ingest-csv.ts +5 -7
  80. package/lib/tools/lint/slice/vocab.ts +376 -0
  81. package/lib/tools/overlay-manifest.ts +92 -25
  82. package/lib/tools/overture-subvenue.ts +1 -1
  83. package/lib/tools/postcode-triples.ts +138 -14
  84. package/lib/tools/sub/venue/harvest.ts +234 -0
  85. package/lib/tools/sub/venue/head-nouns.ts +245 -0
  86. package/lib/tools/sub/venue/lexicon.ts +429 -0
  87. package/lib/tools/sub/venue/surfaces.ts +95 -0
  88. package/lib/tools/sub/venue/table.ts +281 -0
  89. package/lib/tools/sub/venue/wikidata.ts +85 -0
  90. package/lib/tw/tools/fetch/gcis.ts +180 -0
  91. package/lib/types.ts +1 -1
  92. package/lib/us/adapters/fcc-bdc/adapter.ts +173 -0
  93. package/lib/us/adapters/state/hi-schools/adapter.ts +160 -0
  94. package/lib/us/adapters/state/ia-contractors/adapter.ts +136 -0
  95. package/lib/us/adapters/state/ny-notaries/adapter.ts +133 -0
  96. package/lib/us/adapters/state/tx-notaries/adapter.ts +149 -0
  97. package/lib/us/adapters/tiger/adapter.ts +250 -0
  98. package/lib/us/adapters/usgov/hrsa-fqhc/adapter.ts +156 -0
  99. package/lib/us/adapters/usgov/imls-pls/adapter.ts +134 -0
  100. package/lib/us/adapters/usgov/irs-bmf/adapter.ts +145 -0
  101. package/lib/us/adapters/usgov/nad/adapter.ts +324 -0
  102. package/lib/us/adapters/usgov/nppes/adapter.ts +143 -0
  103. package/lib/us/adapters/usgov/samhsa-treatment-locator/adapter.ts +182 -0
  104. package/lib/us/tools/fetch/hrsa.ts +59 -0
  105. package/lib/us/tools/fetch/imls-pls.ts +149 -0
  106. package/lib/us/tools/fetch/nad.ts +341 -0
  107. package/lib/us/tools/fetch/nppes.ts +165 -0
  108. package/lib/us/tools/fetch/state/hi-schools.ts +161 -0
  109. package/lib/us/tools/fetch/state/sources.ts +146 -0
  110. package/lib/us/tools/fetch/tiger-full.ts +308 -0
  111. package/lib/utils/align.ts +1 -1
  112. package/lib/utils/golden.ts +12 -8
  113. package/lib/utils/wof-json.ts +7 -13
  114. package/out/adapters/geonames/adapter.d.ts +1 -1
  115. package/out/adapters/geonames/adapter.js +3 -3
  116. package/out/adapters/geonames/adapter.js.map +1 -1
  117. package/out/adapters/geonames/postal/adapter.d.ts.map +1 -0
  118. package/out/adapters/geonames/postal/adapter.js +107 -0
  119. package/out/adapters/geonames/postal/adapter.js.map +1 -0
  120. package/out/adapters/index.d.ts +16 -16
  121. package/out/adapters/index.d.ts.map +1 -1
  122. package/out/adapters/index.js +34 -32
  123. package/out/adapters/index.js.map +1 -1
  124. package/out/adapters/openaddresses/adapter.d.ts.map +1 -1
  125. package/out/adapters/openaddresses/adapter.js +4 -6
  126. package/out/adapters/openaddresses/adapter.js.map +1 -1
  127. package/out/adapters/osm/adapter.d.ts +95 -0
  128. package/out/adapters/osm/adapter.d.ts.map +1 -0
  129. package/out/adapters/osm/adapter.js +211 -0
  130. package/out/adapters/osm/adapter.js.map +1 -0
  131. package/out/adapters/overture/adapter.d.ts +10 -0
  132. package/out/adapters/overture/adapter.d.ts.map +1 -1
  133. package/out/adapters/overture/adapter.js +20 -7
  134. package/out/adapters/overture/adapter.js.map +1 -1
  135. package/out/adapters/synth-po-box/adapter.js.map +1 -1
  136. package/out/adapters/utils/index.d.ts +1 -1
  137. package/out/adapters/utils/index.d.ts.map +1 -1
  138. package/out/adapters/utils/index.js.map +1 -1
  139. package/out/adapters/wof/admin/json/adapter.d.ts +79 -0
  140. package/out/adapters/wof/admin/json/adapter.d.ts.map +1 -0
  141. package/out/adapters/wof/admin/json/adapter.js +204 -0
  142. package/out/adapters/wof/admin/json/adapter.js.map +1 -0
  143. package/out/adapters/wof/json-rows.d.ts +73 -0
  144. package/out/adapters/wof/json-rows.d.ts.map +1 -0
  145. package/out/adapters/wof/json-rows.js +115 -0
  146. package/out/adapters/wof/json-rows.js.map +1 -0
  147. package/out/adapters/wof/postalcode-json/adapter.d.ts +65 -0
  148. package/out/adapters/wof/postalcode-json/adapter.d.ts.map +1 -0
  149. package/out/adapters/wof/postalcode-json/adapter.js +167 -0
  150. package/out/adapters/wof/postalcode-json/adapter.js.map +1 -0
  151. package/out/au/adapters/gnaf/adapter.d.ts.map +1 -0
  152. package/out/au/adapters/gnaf/adapter.js +127 -0
  153. package/out/au/adapters/gnaf/adapter.js.map +1 -0
  154. package/out/au/adapters/gnaf/assemble.d.ts +65 -0
  155. package/out/au/adapters/gnaf/assemble.d.ts.map +1 -0
  156. package/out/au/adapters/gnaf/assemble.js +154 -0
  157. package/out/au/adapters/gnaf/assemble.js.map +1 -0
  158. package/out/cn/recipes/organizational-units.d.ts +36 -0
  159. package/out/cn/recipes/organizational-units.d.ts.map +1 -0
  160. package/out/cn/recipes/organizational-units.js +159 -0
  161. package/out/cn/recipes/organizational-units.js.map +1 -0
  162. package/out/cz/recipes/pcfirst-preposition.d.ts +22 -0
  163. package/out/cz/recipes/pcfirst-preposition.d.ts.map +1 -0
  164. package/out/cz/recipes/pcfirst-preposition.js +101 -0
  165. package/out/cz/recipes/pcfirst-preposition.js.map +1 -0
  166. package/out/de/recipes/locale.d.ts +44 -0
  167. package/out/de/recipes/locale.d.ts.map +1 -0
  168. package/out/de/recipes/locale.js +289 -0
  169. package/out/de/recipes/locale.js.map +1 -0
  170. package/out/env.d.ts +1 -1
  171. package/out/fr/adapters/ban/adapter.d.ts.map +1 -0
  172. package/out/fr/adapters/ban/adapter.js +123 -0
  173. package/out/fr/adapters/ban/adapter.js.map +1 -0
  174. package/out/fr/adapters/ban/street-decompose.d.ts.map +1 -0
  175. package/out/fr/adapters/ban/street-decompose.js.map +1 -0
  176. package/out/fr/recipes/admin-split.d.ts +38 -0
  177. package/out/fr/recipes/admin-split.d.ts.map +1 -0
  178. package/out/fr/recipes/admin-split.js +192 -0
  179. package/out/fr/recipes/admin-split.js.map +1 -0
  180. package/out/fr/recipes/bare-street.d.ts +28 -0
  181. package/out/fr/recipes/bare-street.d.ts.map +1 -0
  182. package/out/fr/recipes/bare-street.js +144 -0
  183. package/out/fr/recipes/bare-street.js.map +1 -0
  184. package/out/fr/recipes/fragment.d.ts +77 -0
  185. package/out/fr/recipes/fragment.d.ts.map +1 -0
  186. package/out/fr/recipes/fragment.js +277 -0
  187. package/out/fr/recipes/fragment.js.map +1 -0
  188. package/out/fr/recipes/lieudit.d.ts +32 -0
  189. package/out/fr/recipes/lieudit.d.ts.map +1 -0
  190. package/out/fr/recipes/lieudit.js +211 -0
  191. package/out/fr/recipes/lieudit.js.map +1 -0
  192. package/out/fr/recipes/order.d.ts +38 -0
  193. package/out/fr/recipes/order.d.ts.map +1 -0
  194. package/out/fr/recipes/order.js +198 -0
  195. package/out/fr/recipes/order.js.map +1 -0
  196. package/out/fr/tools/fetch/ban.d.ts +31 -0
  197. package/out/fr/tools/fetch/ban.d.ts.map +1 -0
  198. package/out/fr/tools/fetch/ban.js +239 -0
  199. package/out/fr/tools/fetch/ban.js.map +1 -0
  200. package/out/index.d.ts +1 -1
  201. package/out/index.d.ts.map +1 -1
  202. package/out/index.js +1 -1
  203. package/out/index.js.map +1 -1
  204. package/out/international/recipes/locale.d.ts +136 -0
  205. package/out/international/recipes/locale.d.ts.map +1 -0
  206. package/out/international/recipes/locale.js +458 -0
  207. package/out/international/recipes/locale.js.map +1 -0
  208. package/out/jp/adapters/wof-admin/adapter.d.ts.map +1 -0
  209. package/out/jp/adapters/wof-admin/adapter.js.map +1 -0
  210. package/out/jp/tools/fetch/houjin.d.ts +24 -0
  211. package/out/jp/tools/fetch/houjin.d.ts.map +1 -0
  212. package/out/jp/tools/fetch/houjin.js +102 -0
  213. package/out/jp/tools/fetch/houjin.js.map +1 -0
  214. package/out/kr/adapters/juso/label-rows.d.ts +76 -0
  215. package/out/kr/adapters/juso/label-rows.d.ts.map +1 -0
  216. package/out/kr/adapters/juso/label-rows.js +194 -0
  217. package/out/kr/adapters/juso/label-rows.js.map +1 -0
  218. package/out/kr/adapters/localdata/align.d.ts +43 -0
  219. package/out/kr/adapters/localdata/align.d.ts.map +1 -0
  220. package/out/kr/adapters/localdata/align.js +223 -0
  221. package/out/kr/adapters/localdata/align.js.map +1 -0
  222. package/out/kr/adapters/localdata/key-index.d.ts +71 -0
  223. package/out/kr/adapters/localdata/key-index.d.ts.map +1 -0
  224. package/out/kr/adapters/localdata/key-index.js +133 -0
  225. package/out/kr/adapters/localdata/key-index.js.map +1 -0
  226. package/out/kr/adapters/localdata/permit-rows.d.ts +66 -0
  227. package/out/kr/adapters/localdata/permit-rows.d.ts.map +1 -0
  228. package/out/kr/adapters/localdata/permit-rows.js +131 -0
  229. package/out/kr/adapters/localdata/permit-rows.js.map +1 -0
  230. package/out/kr/tools/fetch/juso.d.ts +30 -0
  231. package/out/kr/tools/fetch/juso.d.ts.map +1 -0
  232. package/out/kr/tools/fetch/juso.js +120 -0
  233. package/out/kr/tools/fetch/juso.js.map +1 -0
  234. package/out/kr/tools/fetch/localdata.d.ts +30 -0
  235. package/out/kr/tools/fetch/localdata.d.ts.map +1 -0
  236. package/out/kr/tools/fetch/localdata.js +139 -0
  237. package/out/kr/tools/fetch/localdata.js.map +1 -0
  238. package/out/nl/recipes/postcode.d.ts +26 -0
  239. package/out/nl/recipes/postcode.d.ts.map +1 -0
  240. package/out/nl/recipes/postcode.js +103 -0
  241. package/out/nl/recipes/postcode.js.map +1 -0
  242. package/out/no/recipes/fragment.d.ts +43 -0
  243. package/out/no/recipes/fragment.d.ts.map +1 -0
  244. package/out/no/recipes/fragment.js +183 -0
  245. package/out/no/recipes/fragment.js.map +1 -0
  246. package/out/no/recipes/street/index.d.ts +18 -0
  247. package/out/no/recipes/street/index.d.ts.map +1 -0
  248. package/out/no/recipes/street/index.js +72 -0
  249. package/out/no/recipes/street/index.js.map +1 -0
  250. package/out/no/recipes/street/led.d.ts +24 -0
  251. package/out/no/recipes/street/led.d.ts.map +1 -0
  252. package/out/no/recipes/street/led.js +114 -0
  253. package/out/no/recipes/street/led.js.map +1 -0
  254. package/out/recipes/bare/country.d.ts +25 -0
  255. package/out/recipes/bare/country.d.ts.map +1 -0
  256. package/out/recipes/bare/country.js +88 -0
  257. package/out/recipes/bare/country.js.map +1 -0
  258. package/out/recipes/bare/postcode/eval.d.ts +29 -0
  259. package/out/recipes/bare/postcode/eval.d.ts.map +1 -0
  260. package/out/recipes/bare/postcode/eval.js +85 -0
  261. package/out/recipes/bare/postcode/eval.js.map +1 -0
  262. package/out/recipes/bare/postcode/index.d.ts +62 -0
  263. package/out/recipes/bare/postcode/index.d.ts.map +1 -0
  264. package/out/recipes/bare/postcode/index.js +267 -0
  265. package/out/recipes/bare/postcode/index.js.map +1 -0
  266. package/out/recipes/country-balanced.js.map +1 -1
  267. package/out/recipes/index.d.ts.map +1 -1
  268. package/out/recipes/index.js +28 -21
  269. package/out/recipes/index.js.map +1 -1
  270. package/out/recipes/intersection.js.map +1 -1
  271. package/out/recipes/po/box/cedex/au-nz.d.ts +7 -0
  272. package/out/recipes/po/box/cedex/au-nz.d.ts.map +1 -0
  273. package/out/recipes/po/box/cedex/au-nz.js +56 -0
  274. package/out/recipes/po/box/cedex/au-nz.js.map +1 -0
  275. package/out/recipes/po/box/cedex/ca.d.ts +7 -0
  276. package/out/recipes/po/box/cedex/ca.d.ts.map +1 -0
  277. package/out/recipes/po/box/cedex/ca.js +38 -0
  278. package/out/recipes/po/box/cedex/ca.js.map +1 -0
  279. package/out/recipes/po/box/cedex/fr.d.ts +7 -0
  280. package/out/recipes/po/box/cedex/fr.d.ts.map +1 -0
  281. package/out/recipes/po/box/cedex/fr.js +57 -0
  282. package/out/recipes/po/box/cedex/fr.js.map +1 -0
  283. package/out/recipes/po/box/cedex/phrases.d.ts +8 -0
  284. package/out/recipes/po/box/cedex/phrases.d.ts.map +1 -0
  285. package/out/recipes/po/box/cedex/phrases.js +76 -0
  286. package/out/recipes/po/box/cedex/phrases.js.map +1 -0
  287. package/out/recipes/po/box/cedex/recipe.d.ts +9 -0
  288. package/out/recipes/po/box/cedex/recipe.d.ts.map +1 -0
  289. package/out/recipes/po/box/cedex/recipe.js +153 -0
  290. package/out/recipes/po/box/cedex/recipe.js.map +1 -0
  291. package/out/recipes/po/box/cedex/sources.d.ts +86 -0
  292. package/out/recipes/po/box/cedex/sources.d.ts.map +1 -0
  293. package/out/recipes/po/box/cedex/sources.js +143 -0
  294. package/out/recipes/po/box/cedex/sources.js.map +1 -0
  295. package/out/recipes/po/box/cedex/types.d.ts +31 -0
  296. package/out/recipes/po/box/cedex/types.d.ts.map +1 -0
  297. package/out/recipes/po/box/cedex/types.js +5 -0
  298. package/out/recipes/po/box/cedex/types.js.map +1 -0
  299. package/out/recipes/po/box/cedex/us.d.ts +7 -0
  300. package/out/recipes/po/box/cedex/us.d.ts.map +1 -0
  301. package/out/recipes/po/box/cedex/us.js +51 -0
  302. package/out/recipes/po/box/cedex/us.js.map +1 -0
  303. package/out/recipes/po/box/cedex/vocabulary.d.ts +68 -0
  304. package/out/recipes/po/box/cedex/vocabulary.d.ts.map +1 -0
  305. package/out/recipes/po/box/cedex/vocabulary.js +90 -0
  306. package/out/recipes/po/box/cedex/vocabulary.js.map +1 -0
  307. package/out/recipes/po/box/cedex.d.ts +9 -0
  308. package/out/recipes/po/box/cedex.d.ts.map +1 -0
  309. package/out/recipes/po/box/cedex.js +9 -0
  310. package/out/recipes/po/box/cedex.js.map +1 -0
  311. package/out/recipes/po/box/index.d.ts +17 -0
  312. package/out/recipes/po/box/index.d.ts.map +1 -0
  313. package/out/recipes/po/box/index.js +105 -0
  314. package/out/recipes/po/box/index.js.map +1 -0
  315. package/out/recipes/scaffold.d.ts +20 -0
  316. package/out/recipes/scaffold.d.ts.map +1 -1
  317. package/out/recipes/scaffold.js +18 -37
  318. package/out/recipes/scaffold.js.map +1 -1
  319. package/out/recipes/street/affix.d.ts +89 -0
  320. package/out/recipes/street/affix.d.ts.map +1 -0
  321. package/out/recipes/street/affix.js +565 -0
  322. package/out/recipes/street/affix.js.map +1 -0
  323. package/out/recipes/street/bare.d.ts +25 -0
  324. package/out/recipes/street/bare.d.ts.map +1 -0
  325. package/out/recipes/street/bare.js +87 -0
  326. package/out/recipes/street/bare.js.map +1 -0
  327. package/out/recipes/sub/venue/context.d.ts +29 -0
  328. package/out/recipes/sub/venue/context.d.ts.map +1 -0
  329. package/out/recipes/sub/venue/context.js +106 -0
  330. package/out/recipes/sub/venue/context.js.map +1 -0
  331. package/out/recipes/sub/venue/index.d.ts +270 -0
  332. package/out/recipes/sub/venue/index.d.ts.map +1 -0
  333. package/out/recipes/sub/venue/index.js +728 -0
  334. package/out/recipes/sub/venue/index.js.map +1 -0
  335. package/out/recipes/sub/venue/sources.d.ts +209 -0
  336. package/out/recipes/sub/venue/sources.d.ts.map +1 -0
  337. package/out/recipes/sub/venue/sources.js +555 -0
  338. package/out/recipes/sub/venue/sources.js.map +1 -0
  339. package/out/recipes/trailing-region.d.ts.map +1 -1
  340. package/out/recipes/trailing-region.js +6 -1
  341. package/out/recipes/trailing-region.js.map +1 -1
  342. package/out/recipes/unit.js.map +1 -1
  343. package/out/sg/recipes/register.d.ts +69 -0
  344. package/out/sg/recipes/register.d.ts.map +1 -0
  345. package/out/sg/recipes/register.js +211 -0
  346. package/out/sg/recipes/register.js.map +1 -0
  347. package/out/sg/tools/fetch/acra.d.ts +23 -0
  348. package/out/sg/tools/fetch/acra.d.ts.map +1 -0
  349. package/out/sg/tools/fetch/acra.js +126 -0
  350. package/out/sg/tools/fetch/acra.js.map +1 -0
  351. package/out/si/recipes/bare-village.d.ts +32 -0
  352. package/out/si/recipes/bare-village.d.ts.map +1 -0
  353. package/out/si/recipes/bare-village.js +89 -0
  354. package/out/si/recipes/bare-village.js.map +1 -0
  355. package/out/south-asia/recipes/register.d.ts +51 -0
  356. package/out/south-asia/recipes/register.d.ts.map +1 -0
  357. package/out/south-asia/recipes/register.js +154 -0
  358. package/out/south-asia/recipes/register.js.map +1 -0
  359. package/out/synthesizers/anchor-absorption.d.ts +1 -1
  360. package/out/synthesizers/anchor-absorption.d.ts.map +1 -1
  361. package/out/synthesizers/anchor-absorption.js.map +1 -1
  362. package/out/synthesizers/boundary-stress.js.map +1 -1
  363. package/out/synthesizers/house-venue.js.map +1 -1
  364. package/out/synthesizers/intersection.js.map +1 -1
  365. package/out/synthesizers/locale.d.ts +116 -0
  366. package/out/synthesizers/locale.d.ts.map +1 -0
  367. package/out/synthesizers/locale.js +150 -0
  368. package/out/synthesizers/locale.js.map +1 -0
  369. package/out/synthesizers/no-street.d.ts.map +1 -1
  370. package/out/synthesizers/no-street.js.map +1 -1
  371. package/out/synthesizers/po-box.js.map +1 -1
  372. package/out/synthesizers/street.d.ts.map +1 -1
  373. package/out/synthesizers/street.js +1 -1
  374. package/out/synthesizers/street.js.map +1 -1
  375. package/out/synthesizers/utils.js +1 -1
  376. package/out/synthesizers/utils.js.map +1 -1
  377. package/out/test-kit/corpus-recipe.d.ts.map +1 -1
  378. package/out/test-kit/corpus-recipe.js.map +1 -1
  379. package/out/tools/audit.d.ts.map +1 -1
  380. package/out/tools/audit.js +3 -2
  381. package/out/tools/audit.js.map +1 -1
  382. package/out/tools/corpus-stats.js +3 -3
  383. package/out/tools/corpus-stats.js.map +1 -1
  384. package/out/tools/fetch/download/index.d.ts +10 -0
  385. package/out/tools/fetch/download/index.d.ts.map +1 -0
  386. package/out/tools/fetch/download/index.js +10 -0
  387. package/out/tools/fetch/download/index.js.map +1 -0
  388. package/out/tools/fetch/download/manifest.d.ts +47 -0
  389. package/out/tools/fetch/download/manifest.d.ts.map +1 -0
  390. package/out/tools/fetch/download/manifest.js +74 -0
  391. package/out/tools/fetch/download/manifest.js.map +1 -0
  392. package/out/tools/fetch/download/network.d.ts +105 -0
  393. package/out/tools/fetch/download/network.d.ts.map +1 -0
  394. package/out/tools/fetch/download/network.js +130 -0
  395. package/out/tools/fetch/download/network.js.map +1 -0
  396. package/out/tools/fetch/download/retry.d.ts +45 -0
  397. package/out/tools/fetch/download/retry.d.ts.map +1 -0
  398. package/out/tools/fetch/download/retry.js +136 -0
  399. package/out/tools/fetch/download/retry.js.map +1 -0
  400. package/out/tools/fetch/geonames/dump.d.ts +91 -0
  401. package/out/tools/fetch/geonames/dump.d.ts.map +1 -0
  402. package/out/tools/fetch/geonames/dump.js +171 -0
  403. package/out/tools/fetch/geonames/dump.js.map +1 -0
  404. package/out/tools/fetch/geonames/postal.d.ts +76 -0
  405. package/out/tools/fetch/geonames/postal.d.ts.map +1 -0
  406. package/out/tools/fetch/geonames/postal.js +126 -0
  407. package/out/tools/fetch/geonames/postal.js.map +1 -0
  408. package/out/tools/fetch/index.d.ts +30 -30
  409. package/out/tools/fetch/index.d.ts.map +1 -1
  410. package/out/tools/fetch/index.js +30 -30
  411. package/out/tools/fetch/index.js.map +1 -1
  412. package/out/tools/fetch/openaddresses.d.ts +1 -1
  413. package/out/tools/fetch/openaddresses.d.ts.map +1 -1
  414. package/out/tools/fetch/openaddresses.js +1 -1
  415. package/out/tools/fetch/openaddresses.js.map +1 -1
  416. package/out/tools/fetch/ourairports.d.ts +1 -1
  417. package/out/tools/fetch/ourairports.d.ts.map +1 -1
  418. package/out/tools/fetch/ourairports.js +1 -1
  419. package/out/tools/fetch/ourairports.js.map +1 -1
  420. package/out/tools/fetch/ppd.js +1 -3
  421. package/out/tools/fetch/ppd.js.map +1 -1
  422. package/out/tools/fetch/wikidata-subvenue.d.ts +1 -1
  423. package/out/tools/fetch/wikidata-subvenue.d.ts.map +1 -1
  424. package/out/tools/fetch/wikidata-subvenue.js +1 -1
  425. package/out/tools/fetch/wikidata-subvenue.js.map +1 -1
  426. package/out/tools/golden/expand.d.ts +90 -0
  427. package/out/tools/golden/expand.d.ts.map +1 -0
  428. package/out/tools/golden/expand.js +406 -0
  429. package/out/tools/golden/expand.js.map +1 -0
  430. package/out/tools/golden/promote.d.ts +72 -0
  431. package/out/tools/golden/promote.d.ts.map +1 -0
  432. package/out/tools/golden/promote.js +243 -0
  433. package/out/tools/golden/promote.js.map +1 -0
  434. package/out/tools/golden/relabel-street/directory.d.ts +83 -0
  435. package/out/tools/golden/relabel-street/directory.d.ts.map +1 -0
  436. package/out/tools/golden/relabel-street/directory.js +216 -0
  437. package/out/tools/golden/relabel-street/directory.js.map +1 -0
  438. package/out/tools/golden/relabel-street/index.d.ts +9 -0
  439. package/out/tools/golden/relabel-street/index.d.ts.map +1 -0
  440. package/out/tools/golden/relabel-street/index.js +9 -0
  441. package/out/tools/golden/relabel-street/index.js.map +1 -0
  442. package/out/tools/golden/relabel-street/row.d.ts +121 -0
  443. package/out/tools/golden/relabel-street/row.d.ts.map +1 -0
  444. package/out/tools/golden/relabel-street/row.js +232 -0
  445. package/out/tools/golden/relabel-street/row.js.map +1 -0
  446. package/out/tools/index.d.ts +10 -10
  447. package/out/tools/index.d.ts.map +1 -1
  448. package/out/tools/index.js +10 -10
  449. package/out/tools/index.js.map +1 -1
  450. package/out/tools/ingest-csv.d.ts.map +1 -1
  451. package/out/tools/ingest-csv.js +5 -7
  452. package/out/tools/ingest-csv.js.map +1 -1
  453. package/out/tools/lint/slice/index.d.ts +93 -0
  454. package/out/tools/lint/slice/index.d.ts.map +1 -0
  455. package/out/tools/lint/slice/index.js +322 -0
  456. package/out/tools/lint/slice/index.js.map +1 -0
  457. package/out/tools/lint/slice/vocab.d.ts +90 -0
  458. package/out/tools/lint/slice/vocab.d.ts.map +1 -0
  459. package/out/tools/lint/slice/vocab.js +254 -0
  460. package/out/tools/lint/slice/vocab.js.map +1 -0
  461. package/out/tools/overlay-manifest.d.ts +56 -6
  462. package/out/tools/overlay-manifest.d.ts.map +1 -1
  463. package/out/tools/overlay-manifest.js +56 -15
  464. package/out/tools/overlay-manifest.js.map +1 -1
  465. package/out/tools/overture-subvenue.d.ts +1 -1
  466. package/out/tools/postcode-triples.d.ts +36 -0
  467. package/out/tools/postcode-triples.d.ts.map +1 -1
  468. package/out/tools/postcode-triples.js +91 -12
  469. package/out/tools/postcode-triples.js.map +1 -1
  470. package/out/tools/slice/kryptonite.d.ts +32 -0
  471. package/out/tools/slice/kryptonite.d.ts.map +1 -0
  472. package/out/tools/slice/kryptonite.js +99 -0
  473. package/out/tools/slice/kryptonite.js.map +1 -0
  474. package/out/tools/slice/translit.d.ts +51 -0
  475. package/out/tools/slice/translit.d.ts.map +1 -0
  476. package/out/tools/slice/translit.js +166 -0
  477. package/out/tools/slice/translit.js.map +1 -0
  478. package/out/tools/sub/venue/harvest.d.ts +100 -0
  479. package/out/tools/sub/venue/harvest.d.ts.map +1 -0
  480. package/out/tools/sub/venue/harvest.js +168 -0
  481. package/out/tools/sub/venue/harvest.js.map +1 -0
  482. package/out/tools/sub/venue/head-nouns.d.ts +50 -0
  483. package/out/tools/sub/venue/head-nouns.d.ts.map +1 -0
  484. package/out/tools/sub/venue/head-nouns.js.map +1 -0
  485. package/out/tools/sub/venue/lexicon.d.ts +156 -0
  486. package/out/tools/sub/venue/lexicon.d.ts.map +1 -0
  487. package/out/tools/sub/venue/lexicon.js +283 -0
  488. package/out/tools/sub/venue/lexicon.js.map +1 -0
  489. package/out/tools/sub/venue/promotions.d.ts +94 -0
  490. package/out/tools/sub/venue/promotions.d.ts.map +1 -0
  491. package/out/tools/sub/venue/promotions.js +266 -0
  492. package/out/tools/sub/venue/promotions.js.map +1 -0
  493. package/out/tools/sub/venue/surfaces.d.ts +45 -0
  494. package/out/tools/sub/venue/surfaces.d.ts.map +1 -0
  495. package/out/tools/sub/venue/surfaces.js.map +1 -0
  496. package/out/tools/sub/venue/table.d.ts +229 -0
  497. package/out/tools/sub/venue/table.d.ts.map +1 -0
  498. package/out/tools/sub/venue/table.js.map +1 -0
  499. package/out/tools/sub/venue/wikidata.d.ts +26 -0
  500. package/out/tools/sub/venue/wikidata.d.ts.map +1 -0
  501. package/out/tools/sub/venue/wikidata.js +62 -0
  502. package/out/tools/sub/venue/wikidata.js.map +1 -0
  503. package/out/tw/tools/fetch/gcis.d.ts +23 -0
  504. package/out/tw/tools/fetch/gcis.d.ts.map +1 -0
  505. package/out/tw/tools/fetch/gcis.js +135 -0
  506. package/out/tw/tools/fetch/gcis.js.map +1 -0
  507. package/out/types.d.ts +1 -1
  508. package/out/types.d.ts.map +1 -1
  509. package/out/us/adapters/fcc-bdc/adapter.d.ts.map +1 -0
  510. package/out/us/adapters/fcc-bdc/adapter.js +142 -0
  511. package/out/us/adapters/fcc-bdc/adapter.js.map +1 -0
  512. package/out/us/adapters/state/hi-schools/adapter.d.ts.map +1 -0
  513. package/out/us/adapters/state/hi-schools/adapter.js +136 -0
  514. package/out/us/adapters/state/hi-schools/adapter.js.map +1 -0
  515. package/out/us/adapters/state/hi-schools/workbook.d.ts.map +1 -0
  516. package/out/us/adapters/state/hi-schools/workbook.js.map +1 -0
  517. package/out/us/adapters/state/ia-contractors/adapter.d.ts.map +1 -0
  518. package/out/us/adapters/state/ia-contractors/adapter.js +104 -0
  519. package/out/us/adapters/state/ia-contractors/adapter.js.map +1 -0
  520. package/out/us/adapters/state/ny-notaries/adapter.d.ts.map +1 -0
  521. package/out/us/adapters/state/ny-notaries/adapter.js +112 -0
  522. package/out/us/adapters/state/ny-notaries/adapter.js.map +1 -0
  523. package/out/us/adapters/state/tx-notaries/adapter.d.ts.map +1 -0
  524. package/out/us/adapters/state/tx-notaries/adapter.js +118 -0
  525. package/out/us/adapters/state/tx-notaries/adapter.js.map +1 -0
  526. package/out/us/adapters/tiger/adapter.d.ts +55 -0
  527. package/out/us/adapters/tiger/adapter.d.ts.map +1 -0
  528. package/out/us/adapters/tiger/adapter.js +197 -0
  529. package/out/us/adapters/tiger/adapter.js.map +1 -0
  530. package/out/us/adapters/tiger/street-decompose.d.ts.map +1 -0
  531. package/out/us/adapters/tiger/street-decompose.js.map +1 -0
  532. package/out/us/adapters/usgov/hrsa-fqhc/adapter.d.ts.map +1 -0
  533. package/out/us/adapters/usgov/hrsa-fqhc/adapter.js +121 -0
  534. package/out/us/adapters/usgov/hrsa-fqhc/adapter.js.map +1 -0
  535. package/out/us/adapters/usgov/imls-pls/adapter.d.ts.map +1 -0
  536. package/out/us/adapters/usgov/imls-pls/adapter.js +106 -0
  537. package/out/us/adapters/usgov/imls-pls/adapter.js.map +1 -0
  538. package/out/us/adapters/usgov/irs-bmf/adapter.d.ts.map +1 -0
  539. package/out/us/adapters/usgov/irs-bmf/adapter.js +116 -0
  540. package/out/us/adapters/usgov/irs-bmf/adapter.js.map +1 -0
  541. package/out/us/adapters/usgov/nad/adapter.d.ts.map +1 -0
  542. package/out/us/adapters/usgov/nad/adapter.js +239 -0
  543. package/out/us/adapters/usgov/nad/adapter.js.map +1 -0
  544. package/out/us/adapters/usgov/nppes/adapter.d.ts.map +1 -0
  545. package/out/us/adapters/usgov/nppes/adapter.js +110 -0
  546. package/out/us/adapters/usgov/nppes/adapter.js.map +1 -0
  547. package/out/us/adapters/usgov/samhsa-treatment-locator/adapter.d.ts.map +1 -0
  548. package/out/us/adapters/usgov/samhsa-treatment-locator/adapter.js +143 -0
  549. package/out/us/adapters/usgov/samhsa-treatment-locator/adapter.js.map +1 -0
  550. package/out/us/fips-state.d.ts +41 -0
  551. package/out/us/fips-state.d.ts.map +1 -0
  552. package/out/us/fips-state.js +100 -0
  553. package/out/us/fips-state.js.map +1 -0
  554. package/out/us/tools/fetch/hrsa.d.ts +18 -0
  555. package/out/us/tools/fetch/hrsa.d.ts.map +1 -0
  556. package/out/us/tools/fetch/hrsa.js +46 -0
  557. package/out/us/tools/fetch/hrsa.js.map +1 -0
  558. package/out/us/tools/fetch/imls-pls.d.ts +25 -0
  559. package/out/us/tools/fetch/imls-pls.d.ts.map +1 -0
  560. package/out/us/tools/fetch/imls-pls.js +108 -0
  561. package/out/us/tools/fetch/imls-pls.js.map +1 -0
  562. package/out/us/tools/fetch/nad.d.ts +70 -0
  563. package/out/us/tools/fetch/nad.d.ts.map +1 -0
  564. package/out/us/tools/fetch/nad.js +234 -0
  565. package/out/us/tools/fetch/nad.js.map +1 -0
  566. package/out/us/tools/fetch/nppes.d.ts +26 -0
  567. package/out/us/tools/fetch/nppes.d.ts.map +1 -0
  568. package/out/us/tools/fetch/nppes.js +126 -0
  569. package/out/us/tools/fetch/nppes.js.map +1 -0
  570. package/out/us/tools/fetch/state/hi-schools.d.ts +26 -0
  571. package/out/us/tools/fetch/state/hi-schools.d.ts.map +1 -0
  572. package/out/us/tools/fetch/state/hi-schools.js +112 -0
  573. package/out/us/tools/fetch/state/hi-schools.js.map +1 -0
  574. package/out/us/tools/fetch/state/sources.d.ts +26 -0
  575. package/out/us/tools/fetch/state/sources.d.ts.map +1 -0
  576. package/out/us/tools/fetch/state/sources.js +111 -0
  577. package/out/us/tools/fetch/state/sources.js.map +1 -0
  578. package/out/us/tools/fetch/tiger-full.d.ts +22 -0
  579. package/out/us/tools/fetch/tiger-full.d.ts.map +1 -0
  580. package/out/us/tools/fetch/tiger-full.js +217 -0
  581. package/out/us/tools/fetch/tiger-full.js.map +1 -0
  582. package/out/utils/align.d.ts +1 -1
  583. package/out/utils/align.d.ts.map +1 -1
  584. package/out/utils/align.js.map +1 -1
  585. package/out/utils/golden.d.ts +7 -3
  586. package/out/utils/golden.d.ts.map +1 -1
  587. package/out/utils/golden.js +12 -8
  588. package/out/utils/golden.js.map +1 -1
  589. package/out/utils/parquet.d.ts.map +1 -1
  590. package/out/utils/split.js.map +1 -1
  591. package/out/utils/wof-json.d.ts.map +1 -1
  592. package/out/utils/wof-json.js +7 -12
  593. package/out/utils/wof-json.js.map +1 -1
  594. package/out/ve/recipes/reviewed-postcode-tail.d.ts.map +1 -0
  595. package/out/ve/recipes/reviewed-postcode-tail.js.map +1 -0
  596. package/package.json +196 -46
  597. package/lib/adapters/ban/adapter.ts +0 -190
  598. package/lib/adapters/fcc-bdc/adapter.ts +0 -174
  599. package/lib/adapters/geonames-postal/adapter.ts +0 -122
  600. package/lib/adapters/gnaf/adapter.ts +0 -149
  601. package/lib/adapters/gnaf/assemble.ts +0 -225
  602. package/lib/adapters/state-hi-schools/adapter.ts +0 -170
  603. package/lib/adapters/state-ia-contractors/adapter.ts +0 -144
  604. package/lib/adapters/state-ny-notaries/adapter.ts +0 -141
  605. package/lib/adapters/state-tx-notaries/adapter.ts +0 -157
  606. package/lib/adapters/tiger/adapter.ts +0 -252
  607. package/lib/adapters/usgov-hrsa-fqhc/adapter.ts +0 -167
  608. package/lib/adapters/usgov-imls-pls/adapter.ts +0 -143
  609. package/lib/adapters/usgov-irs-bmf/adapter.ts +0 -151
  610. package/lib/adapters/usgov-nad/adapter.ts +0 -334
  611. package/lib/adapters/usgov-nppes/adapter.ts +0 -151
  612. package/lib/adapters/usgov-samhsa-treatment-locator/adapter.ts +0 -193
  613. package/lib/adapters/wof-admin-json/adapter.ts +0 -231
  614. package/lib/adapters/wof-json-rows.ts +0 -129
  615. package/lib/adapters/wof-postalcode-json/adapter.ts +0 -176
  616. package/lib/recipes/fr-admin-split.ts +0 -243
  617. package/lib/recipes/fr-bare-street.ts +0 -171
  618. package/lib/recipes/fr-fragment.ts +0 -334
  619. package/lib/recipes/fr-lieudit.ts +0 -301
  620. package/lib/recipes/fr-order.ts +0 -246
  621. package/lib/recipes/german.ts +0 -360
  622. package/lib/recipes/locale.ts +0 -600
  623. package/lib/recipes/po-box-cedex.ts +0 -976
  624. package/lib/recipes/po-box.ts +0 -124
  625. package/lib/recipes/street-affix.ts +0 -805
  626. package/lib/recipes/sub-venue-sources.ts +0 -878
  627. package/lib/recipes/sub-venue.ts +0 -998
  628. package/lib/synthesizers/german.ts +0 -260
  629. package/lib/tools/fetch/acra-sg.ts +0 -174
  630. package/lib/tools/fetch/ban.ts +0 -289
  631. package/lib/tools/fetch/download.ts +0 -477
  632. package/lib/tools/fetch/gcis-tw.ts +0 -175
  633. package/lib/tools/fetch/geonames-dump.ts +0 -257
  634. package/lib/tools/fetch/geonames-postal.ts +0 -180
  635. package/lib/tools/fetch/houjin-jp.ts +0 -135
  636. package/lib/tools/fetch/hrsa.ts +0 -59
  637. package/lib/tools/fetch/imls-pls.ts +0 -149
  638. package/lib/tools/fetch/juso-kr.ts +0 -165
  639. package/lib/tools/fetch/localdata-kr.ts +0 -194
  640. package/lib/tools/fetch/nad.ts +0 -341
  641. package/lib/tools/fetch/nppes.ts +0 -165
  642. package/lib/tools/fetch/state-hi-schools.ts +0 -161
  643. package/lib/tools/fetch/state-sources.ts +0 -146
  644. package/lib/tools/fetch/tiger-full.ts +0 -308
  645. package/lib/tools/golden-promote.ts +0 -337
  646. package/lib/tools/golden-relabel-street.ts +0 -686
  647. package/lib/tools/lint-slice-vocab.ts +0 -388
  648. package/lib/tools/sub-venue/harvest.ts +0 -234
  649. package/lib/tools/sub-venue/head-nouns.ts +0 -245
  650. package/lib/tools/sub-venue/surfaces.ts +0 -95
  651. package/lib/tools/sub-venue/table.ts +0 -281
  652. package/lib/tools/sub-venue/wikidata.ts +0 -85
  653. package/lib/tools/sub-venue-lexicon.ts +0 -429
  654. package/out/adapters/ban/adapter.d.ts.map +0 -1
  655. package/out/adapters/ban/adapter.js +0 -149
  656. package/out/adapters/ban/adapter.js.map +0 -1
  657. package/out/adapters/ban/street-decompose.d.ts.map +0 -1
  658. package/out/adapters/ban/street-decompose.js.map +0 -1
  659. package/out/adapters/fcc-bdc/adapter.d.ts.map +0 -1
  660. package/out/adapters/fcc-bdc/adapter.js +0 -144
  661. package/out/adapters/fcc-bdc/adapter.js.map +0 -1
  662. package/out/adapters/geonames-postal/adapter.d.ts.map +0 -1
  663. package/out/adapters/geonames-postal/adapter.js +0 -107
  664. package/out/adapters/geonames-postal/adapter.js.map +0 -1
  665. package/out/adapters/gnaf/adapter.d.ts.map +0 -1
  666. package/out/adapters/gnaf/adapter.js +0 -124
  667. package/out/adapters/gnaf/adapter.js.map +0 -1
  668. package/out/adapters/gnaf/assemble.d.ts +0 -65
  669. package/out/adapters/gnaf/assemble.d.ts.map +0 -1
  670. package/out/adapters/gnaf/assemble.js +0 -154
  671. package/out/adapters/gnaf/assemble.js.map +0 -1
  672. package/out/adapters/state-hi-schools/adapter.d.ts.map +0 -1
  673. package/out/adapters/state-hi-schools/adapter.js +0 -145
  674. package/out/adapters/state-hi-schools/adapter.js.map +0 -1
  675. package/out/adapters/state-hi-schools/workbook.d.ts.map +0 -1
  676. package/out/adapters/state-hi-schools/workbook.js.map +0 -1
  677. package/out/adapters/state-ia-contractors/adapter.d.ts.map +0 -1
  678. package/out/adapters/state-ia-contractors/adapter.js +0 -111
  679. package/out/adapters/state-ia-contractors/adapter.js.map +0 -1
  680. package/out/adapters/state-ny-notaries/adapter.d.ts.map +0 -1
  681. package/out/adapters/state-ny-notaries/adapter.js +0 -119
  682. package/out/adapters/state-ny-notaries/adapter.js.map +0 -1
  683. package/out/adapters/state-tx-notaries/adapter.d.ts.map +0 -1
  684. package/out/adapters/state-tx-notaries/adapter.js +0 -125
  685. package/out/adapters/state-tx-notaries/adapter.js.map +0 -1
  686. package/out/adapters/tiger/adapter.d.ts +0 -55
  687. package/out/adapters/tiger/adapter.d.ts.map +0 -1
  688. package/out/adapters/tiger/adapter.js +0 -201
  689. package/out/adapters/tiger/adapter.js.map +0 -1
  690. package/out/adapters/tiger/street-decompose.d.ts.map +0 -1
  691. package/out/adapters/tiger/street-decompose.js.map +0 -1
  692. package/out/adapters/usgov-hrsa-fqhc/adapter.d.ts.map +0 -1
  693. package/out/adapters/usgov-hrsa-fqhc/adapter.js +0 -132
  694. package/out/adapters/usgov-hrsa-fqhc/adapter.js.map +0 -1
  695. package/out/adapters/usgov-imls-pls/adapter.d.ts.map +0 -1
  696. package/out/adapters/usgov-imls-pls/adapter.js +0 -114
  697. package/out/adapters/usgov-imls-pls/adapter.js.map +0 -1
  698. package/out/adapters/usgov-irs-bmf/adapter.d.ts.map +0 -1
  699. package/out/adapters/usgov-irs-bmf/adapter.js +0 -120
  700. package/out/adapters/usgov-irs-bmf/adapter.js.map +0 -1
  701. package/out/adapters/usgov-nad/adapter.d.ts.map +0 -1
  702. package/out/adapters/usgov-nad/adapter.js +0 -249
  703. package/out/adapters/usgov-nad/adapter.js.map +0 -1
  704. package/out/adapters/usgov-nppes/adapter.d.ts.map +0 -1
  705. package/out/adapters/usgov-nppes/adapter.js +0 -118
  706. package/out/adapters/usgov-nppes/adapter.js.map +0 -1
  707. package/out/adapters/usgov-samhsa-treatment-locator/adapter.d.ts.map +0 -1
  708. package/out/adapters/usgov-samhsa-treatment-locator/adapter.js +0 -154
  709. package/out/adapters/usgov-samhsa-treatment-locator/adapter.js.map +0 -1
  710. package/out/adapters/wof-admin-jp/adapter.d.ts.map +0 -1
  711. package/out/adapters/wof-admin-jp/adapter.js.map +0 -1
  712. package/out/adapters/wof-admin-json/adapter.d.ts +0 -79
  713. package/out/adapters/wof-admin-json/adapter.d.ts.map +0 -1
  714. package/out/adapters/wof-admin-json/adapter.js +0 -197
  715. package/out/adapters/wof-admin-json/adapter.js.map +0 -1
  716. package/out/adapters/wof-json-rows.d.ts +0 -62
  717. package/out/adapters/wof-json-rows.d.ts.map +0 -1
  718. package/out/adapters/wof-json-rows.js +0 -83
  719. package/out/adapters/wof-json-rows.js.map +0 -1
  720. package/out/adapters/wof-postalcode-json/adapter.d.ts +0 -65
  721. package/out/adapters/wof-postalcode-json/adapter.d.ts.map +0 -1
  722. package/out/adapters/wof-postalcode-json/adapter.js +0 -151
  723. package/out/adapters/wof-postalcode-json/adapter.js.map +0 -1
  724. package/out/codex/us-fips-state.d.ts +0 -41
  725. package/out/codex/us-fips-state.d.ts.map +0 -1
  726. package/out/codex/us-fips-state.js +0 -100
  727. package/out/codex/us-fips-state.js.map +0 -1
  728. package/out/recipes/bare-country.d.ts +0 -25
  729. package/out/recipes/bare-country.d.ts.map +0 -1
  730. package/out/recipes/bare-country.js +0 -88
  731. package/out/recipes/bare-country.js.map +0 -1
  732. package/out/recipes/cn-organizational-units.d.ts +0 -36
  733. package/out/recipes/cn-organizational-units.d.ts.map +0 -1
  734. package/out/recipes/cn-organizational-units.js +0 -159
  735. package/out/recipes/cn-organizational-units.js.map +0 -1
  736. package/out/recipes/cz-pcfirst-preposition.d.ts +0 -22
  737. package/out/recipes/cz-pcfirst-preposition.d.ts.map +0 -1
  738. package/out/recipes/cz-pcfirst-preposition.js +0 -101
  739. package/out/recipes/cz-pcfirst-preposition.js.map +0 -1
  740. package/out/recipes/fr-admin-split.d.ts +0 -38
  741. package/out/recipes/fr-admin-split.d.ts.map +0 -1
  742. package/out/recipes/fr-admin-split.js +0 -192
  743. package/out/recipes/fr-admin-split.js.map +0 -1
  744. package/out/recipes/fr-bare-street.d.ts +0 -28
  745. package/out/recipes/fr-bare-street.d.ts.map +0 -1
  746. package/out/recipes/fr-bare-street.js +0 -144
  747. package/out/recipes/fr-bare-street.js.map +0 -1
  748. package/out/recipes/fr-fragment.d.ts +0 -77
  749. package/out/recipes/fr-fragment.d.ts.map +0 -1
  750. package/out/recipes/fr-fragment.js +0 -277
  751. package/out/recipes/fr-fragment.js.map +0 -1
  752. package/out/recipes/fr-lieudit.d.ts +0 -32
  753. package/out/recipes/fr-lieudit.d.ts.map +0 -1
  754. package/out/recipes/fr-lieudit.js +0 -227
  755. package/out/recipes/fr-lieudit.js.map +0 -1
  756. package/out/recipes/fr-order.d.ts +0 -38
  757. package/out/recipes/fr-order.d.ts.map +0 -1
  758. package/out/recipes/fr-order.js +0 -198
  759. package/out/recipes/fr-order.js.map +0 -1
  760. package/out/recipes/german.d.ts +0 -44
  761. package/out/recipes/german.d.ts.map +0 -1
  762. package/out/recipes/german.js +0 -289
  763. package/out/recipes/german.js.map +0 -1
  764. package/out/recipes/locale.d.ts +0 -136
  765. package/out/recipes/locale.d.ts.map +0 -1
  766. package/out/recipes/locale.js +0 -460
  767. package/out/recipes/locale.js.map +0 -1
  768. package/out/recipes/nl-postcode.d.ts +0 -26
  769. package/out/recipes/nl-postcode.d.ts.map +0 -1
  770. package/out/recipes/nl-postcode.js +0 -103
  771. package/out/recipes/nl-postcode.js.map +0 -1
  772. package/out/recipes/no-fragment.d.ts +0 -43
  773. package/out/recipes/no-fragment.d.ts.map +0 -1
  774. package/out/recipes/no-fragment.js +0 -183
  775. package/out/recipes/no-fragment.js.map +0 -1
  776. package/out/recipes/no-street-led.d.ts +0 -24
  777. package/out/recipes/no-street-led.d.ts.map +0 -1
  778. package/out/recipes/no-street-led.js +0 -114
  779. package/out/recipes/no-street-led.js.map +0 -1
  780. package/out/recipes/no-street.d.ts +0 -18
  781. package/out/recipes/no-street.d.ts.map +0 -1
  782. package/out/recipes/no-street.js +0 -72
  783. package/out/recipes/no-street.js.map +0 -1
  784. package/out/recipes/po-box-cedex.d.ts +0 -38
  785. package/out/recipes/po-box-cedex.d.ts.map +0 -1
  786. package/out/recipes/po-box-cedex.js +0 -768
  787. package/out/recipes/po-box-cedex.js.map +0 -1
  788. package/out/recipes/po-box.d.ts +0 -17
  789. package/out/recipes/po-box.d.ts.map +0 -1
  790. package/out/recipes/po-box.js +0 -101
  791. package/out/recipes/po-box.js.map +0 -1
  792. package/out/recipes/reviewed-postcode-tail.d.ts.map +0 -1
  793. package/out/recipes/reviewed-postcode-tail.js.map +0 -1
  794. package/out/recipes/si-bare-village.d.ts +0 -32
  795. package/out/recipes/si-bare-village.d.ts.map +0 -1
  796. package/out/recipes/si-bare-village.js +0 -89
  797. package/out/recipes/si-bare-village.js.map +0 -1
  798. package/out/recipes/street-affix.d.ts +0 -89
  799. package/out/recipes/street-affix.d.ts.map +0 -1
  800. package/out/recipes/street-affix.js +0 -563
  801. package/out/recipes/street-affix.js.map +0 -1
  802. package/out/recipes/street-bare.d.ts +0 -25
  803. package/out/recipes/street-bare.d.ts.map +0 -1
  804. package/out/recipes/street-bare.js +0 -87
  805. package/out/recipes/street-bare.js.map +0 -1
  806. package/out/recipes/sub-venue-sources.d.ts +0 -229
  807. package/out/recipes/sub-venue-sources.d.ts.map +0 -1
  808. package/out/recipes/sub-venue-sources.js +0 -654
  809. package/out/recipes/sub-venue-sources.js.map +0 -1
  810. package/out/recipes/sub-venue.d.ts +0 -269
  811. package/out/recipes/sub-venue.d.ts.map +0 -1
  812. package/out/recipes/sub-venue.js +0 -726
  813. package/out/recipes/sub-venue.js.map +0 -1
  814. package/out/synthesizers/german.d.ts +0 -115
  815. package/out/synthesizers/german.d.ts.map +0 -1
  816. package/out/synthesizers/german.js +0 -149
  817. package/out/synthesizers/german.js.map +0 -1
  818. package/out/tools/fetch/acra-sg.d.ts +0 -23
  819. package/out/tools/fetch/acra-sg.d.ts.map +0 -1
  820. package/out/tools/fetch/acra-sg.js +0 -126
  821. package/out/tools/fetch/acra-sg.js.map +0 -1
  822. package/out/tools/fetch/ban.d.ts +0 -31
  823. package/out/tools/fetch/ban.d.ts.map +0 -1
  824. package/out/tools/fetch/ban.js +0 -239
  825. package/out/tools/fetch/ban.js.map +0 -1
  826. package/out/tools/fetch/download.d.ts +0 -182
  827. package/out/tools/fetch/download.d.ts.map +0 -1
  828. package/out/tools/fetch/download.js +0 -318
  829. package/out/tools/fetch/download.js.map +0 -1
  830. package/out/tools/fetch/gcis-tw.d.ts +0 -23
  831. package/out/tools/fetch/gcis-tw.d.ts.map +0 -1
  832. package/out/tools/fetch/gcis-tw.js +0 -135
  833. package/out/tools/fetch/gcis-tw.js.map +0 -1
  834. package/out/tools/fetch/geonames-dump.d.ts +0 -91
  835. package/out/tools/fetch/geonames-dump.d.ts.map +0 -1
  836. package/out/tools/fetch/geonames-dump.js +0 -171
  837. package/out/tools/fetch/geonames-dump.js.map +0 -1
  838. package/out/tools/fetch/geonames-postal.d.ts +0 -76
  839. package/out/tools/fetch/geonames-postal.d.ts.map +0 -1
  840. package/out/tools/fetch/geonames-postal.js +0 -126
  841. package/out/tools/fetch/geonames-postal.js.map +0 -1
  842. package/out/tools/fetch/houjin-jp.d.ts +0 -24
  843. package/out/tools/fetch/houjin-jp.d.ts.map +0 -1
  844. package/out/tools/fetch/houjin-jp.js +0 -102
  845. package/out/tools/fetch/houjin-jp.js.map +0 -1
  846. package/out/tools/fetch/hrsa.d.ts +0 -18
  847. package/out/tools/fetch/hrsa.d.ts.map +0 -1
  848. package/out/tools/fetch/hrsa.js +0 -46
  849. package/out/tools/fetch/hrsa.js.map +0 -1
  850. package/out/tools/fetch/imls-pls.d.ts +0 -25
  851. package/out/tools/fetch/imls-pls.d.ts.map +0 -1
  852. package/out/tools/fetch/imls-pls.js +0 -108
  853. package/out/tools/fetch/imls-pls.js.map +0 -1
  854. package/out/tools/fetch/juso-kr.d.ts +0 -30
  855. package/out/tools/fetch/juso-kr.d.ts.map +0 -1
  856. package/out/tools/fetch/juso-kr.js +0 -120
  857. package/out/tools/fetch/juso-kr.js.map +0 -1
  858. package/out/tools/fetch/localdata-kr.d.ts +0 -30
  859. package/out/tools/fetch/localdata-kr.d.ts.map +0 -1
  860. package/out/tools/fetch/localdata-kr.js +0 -139
  861. package/out/tools/fetch/localdata-kr.js.map +0 -1
  862. package/out/tools/fetch/nad.d.ts +0 -70
  863. package/out/tools/fetch/nad.d.ts.map +0 -1
  864. package/out/tools/fetch/nad.js +0 -234
  865. package/out/tools/fetch/nad.js.map +0 -1
  866. package/out/tools/fetch/nppes.d.ts +0 -26
  867. package/out/tools/fetch/nppes.d.ts.map +0 -1
  868. package/out/tools/fetch/nppes.js +0 -126
  869. package/out/tools/fetch/nppes.js.map +0 -1
  870. package/out/tools/fetch/state-hi-schools.d.ts +0 -26
  871. package/out/tools/fetch/state-hi-schools.d.ts.map +0 -1
  872. package/out/tools/fetch/state-hi-schools.js +0 -112
  873. package/out/tools/fetch/state-hi-schools.js.map +0 -1
  874. package/out/tools/fetch/state-sources.d.ts +0 -26
  875. package/out/tools/fetch/state-sources.d.ts.map +0 -1
  876. package/out/tools/fetch/state-sources.js +0 -111
  877. package/out/tools/fetch/state-sources.js.map +0 -1
  878. package/out/tools/fetch/tiger-full.d.ts +0 -22
  879. package/out/tools/fetch/tiger-full.d.ts.map +0 -1
  880. package/out/tools/fetch/tiger-full.js +0 -217
  881. package/out/tools/fetch/tiger-full.js.map +0 -1
  882. package/out/tools/golden-expand.d.ts +0 -90
  883. package/out/tools/golden-expand.d.ts.map +0 -1
  884. package/out/tools/golden-expand.js +0 -406
  885. package/out/tools/golden-expand.js.map +0 -1
  886. package/out/tools/golden-promote.d.ts +0 -72
  887. package/out/tools/golden-promote.d.ts.map +0 -1
  888. package/out/tools/golden-promote.js +0 -240
  889. package/out/tools/golden-promote.js.map +0 -1
  890. package/out/tools/golden-relabel-street.d.ts +0 -196
  891. package/out/tools/golden-relabel-street.d.ts.map +0 -1
  892. package/out/tools/golden-relabel-street.js +0 -439
  893. package/out/tools/golden-relabel-street.js.map +0 -1
  894. package/out/tools/lint-slice-vocab.d.ts +0 -90
  895. package/out/tools/lint-slice-vocab.d.ts.map +0 -1
  896. package/out/tools/lint-slice-vocab.js +0 -267
  897. package/out/tools/lint-slice-vocab.js.map +0 -1
  898. package/out/tools/lint-slice.d.ts +0 -93
  899. package/out/tools/lint-slice.d.ts.map +0 -1
  900. package/out/tools/lint-slice.js +0 -322
  901. package/out/tools/lint-slice.js.map +0 -1
  902. package/out/tools/slice-kryptonite.d.ts +0 -32
  903. package/out/tools/slice-kryptonite.d.ts.map +0 -1
  904. package/out/tools/slice-kryptonite.js +0 -99
  905. package/out/tools/slice-kryptonite.js.map +0 -1
  906. package/out/tools/slice-translit.d.ts +0 -51
  907. package/out/tools/slice-translit.d.ts.map +0 -1
  908. package/out/tools/slice-translit.js +0 -166
  909. package/out/tools/slice-translit.js.map +0 -1
  910. package/out/tools/sub-venue/harvest.d.ts +0 -100
  911. package/out/tools/sub-venue/harvest.d.ts.map +0 -1
  912. package/out/tools/sub-venue/harvest.js +0 -168
  913. package/out/tools/sub-venue/harvest.js.map +0 -1
  914. package/out/tools/sub-venue/head-nouns.d.ts +0 -50
  915. package/out/tools/sub-venue/head-nouns.d.ts.map +0 -1
  916. package/out/tools/sub-venue/head-nouns.js.map +0 -1
  917. package/out/tools/sub-venue/surfaces.d.ts +0 -45
  918. package/out/tools/sub-venue/surfaces.d.ts.map +0 -1
  919. package/out/tools/sub-venue/surfaces.js.map +0 -1
  920. package/out/tools/sub-venue/table.d.ts +0 -229
  921. package/out/tools/sub-venue/table.d.ts.map +0 -1
  922. package/out/tools/sub-venue/table.js.map +0 -1
  923. package/out/tools/sub-venue/wikidata.d.ts +0 -26
  924. package/out/tools/sub-venue/wikidata.d.ts.map +0 -1
  925. package/out/tools/sub-venue/wikidata.js +0 -62
  926. package/out/tools/sub-venue/wikidata.js.map +0 -1
  927. package/out/tools/sub-venue-lexicon.d.ts +0 -156
  928. package/out/tools/sub-venue-lexicon.d.ts.map +0 -1
  929. package/out/tools/sub-venue-lexicon.js +0 -283
  930. package/out/tools/sub-venue-lexicon.js.map +0 -1
  931. package/out/tools/sub-venue-promotions.d.ts +0 -94
  932. package/out/tools/sub-venue-promotions.d.ts.map +0 -1
  933. package/out/tools/sub-venue-promotions.js +0 -266
  934. package/out/tools/sub-venue-promotions.js.map +0 -1
  935. /package/lib/{recipes/cn-organizational-units.ts → cn/recipes/organizational-units.ts} +0 -0
  936. /package/lib/{recipes/cz-pcfirst-preposition.ts → cz/recipes/pcfirst-preposition.ts} +0 -0
  937. /package/lib/{adapters → fr/adapters}/ban/street-decompose.ts +0 -0
  938. /package/lib/{adapters/wof-admin-jp → jp/adapters/wof-admin}/adapter.ts +0 -0
  939. /package/lib/{recipes/nl-postcode.ts → nl/recipes/postcode.ts} +0 -0
  940. /package/lib/{recipes/no-fragment.ts → no/recipes/fragment.ts} +0 -0
  941. /package/lib/{recipes/no-street.ts → no/recipes/street/index.ts} +0 -0
  942. /package/lib/{recipes/no-street-led.ts → no/recipes/street/led.ts} +0 -0
  943. /package/lib/recipes/{bare-country.ts → bare/country.ts} +0 -0
  944. /package/lib/recipes/{street-bare.ts → street/bare.ts} +0 -0
  945. /package/lib/{recipes/si-bare-village.ts → si/recipes/bare-village.ts} +0 -0
  946. /package/lib/tools/{golden-expand.ts → golden/expand.ts} +0 -0
  947. /package/lib/tools/{lint-slice.ts → lint/slice/index.ts} +0 -0
  948. /package/lib/tools/{slice-kryptonite.ts → slice/kryptonite.ts} +0 -0
  949. /package/lib/tools/{slice-translit.ts → slice/translit.ts} +0 -0
  950. /package/lib/tools/{sub-venue-promotions.ts → sub/venue/promotions.ts} +0 -0
  951. /package/lib/{adapters/state-hi-schools → us/adapters/state/hi-schools}/workbook.ts +0 -0
  952. /package/lib/{adapters → us/adapters}/tiger/street-decompose.ts +0 -0
  953. /package/lib/{codex/us-fips-state.ts → us/fips-state.ts} +0 -0
  954. /package/lib/{recipes → ve/recipes}/reviewed-postcode-tail.ts +0 -0
  955. /package/out/adapters/{geonames-postal → geonames/postal}/adapter.d.ts +0 -0
  956. /package/out/{adapters → au/adapters}/gnaf/adapter.d.ts +0 -0
  957. /package/out/{adapters → fr/adapters}/ban/adapter.d.ts +0 -0
  958. /package/out/{adapters → fr/adapters}/ban/street-decompose.d.ts +0 -0
  959. /package/out/{adapters → fr/adapters}/ban/street-decompose.js +0 -0
  960. /package/out/{adapters/wof-admin-jp → jp/adapters/wof-admin}/adapter.d.ts +0 -0
  961. /package/out/{adapters/wof-admin-jp → jp/adapters/wof-admin}/adapter.js +0 -0
  962. /package/out/tools/{sub-venue → sub/venue}/head-nouns.js +0 -0
  963. /package/out/tools/{sub-venue → sub/venue}/surfaces.js +0 -0
  964. /package/out/tools/{sub-venue → sub/venue}/table.js +0 -0
  965. /package/out/{adapters → us/adapters}/fcc-bdc/adapter.d.ts +0 -0
  966. /package/out/{adapters/state-hi-schools → us/adapters/state/hi-schools}/adapter.d.ts +0 -0
  967. /package/out/{adapters/state-hi-schools → us/adapters/state/hi-schools}/workbook.d.ts +0 -0
  968. /package/out/{adapters/state-hi-schools → us/adapters/state/hi-schools}/workbook.js +0 -0
  969. /package/out/{adapters/state-ia-contractors → us/adapters/state/ia-contractors}/adapter.d.ts +0 -0
  970. /package/out/{adapters/state-ny-notaries → us/adapters/state/ny-notaries}/adapter.d.ts +0 -0
  971. /package/out/{adapters/state-tx-notaries → us/adapters/state/tx-notaries}/adapter.d.ts +0 -0
  972. /package/out/{adapters → us/adapters}/tiger/street-decompose.d.ts +0 -0
  973. /package/out/{adapters → us/adapters}/tiger/street-decompose.js +0 -0
  974. /package/out/{adapters/usgov-hrsa-fqhc → us/adapters/usgov/hrsa-fqhc}/adapter.d.ts +0 -0
  975. /package/out/{adapters/usgov-imls-pls → us/adapters/usgov/imls-pls}/adapter.d.ts +0 -0
  976. /package/out/{adapters/usgov-irs-bmf → us/adapters/usgov/irs-bmf}/adapter.d.ts +0 -0
  977. /package/out/{adapters/usgov-nad → us/adapters/usgov/nad}/adapter.d.ts +0 -0
  978. /package/out/{adapters/usgov-nppes → us/adapters/usgov/nppes}/adapter.d.ts +0 -0
  979. /package/out/{adapters/usgov-samhsa-treatment-locator → us/adapters/usgov/samhsa-treatment-locator}/adapter.d.ts +0 -0
  980. /package/out/{recipes → ve/recipes}/reviewed-postcode-tail.d.ts +0 -0
  981. /package/out/{recipes → ve/recipes}/reviewed-postcode-tail.js +0 -0
@@ -40,12 +40,14 @@
40
40
  * tuple that does not carry its placement teaches whichever convention the recipe happens to default to — see the
41
41
  * recipe's header for the measurement.
42
42
  */
43
+ import { officialLanguagesAlpha3, regionLanguagesAlpha3 } from "@mailwoman/codex/country";
44
+ import { foldName } from "@mailwoman/codex/normalize";
43
45
  import { dataRootPath } from "@mailwoman/core/data-root";
44
46
  import { pathExists } from "@mailwoman/core/fs/readers";
45
47
  import { DatabaseClient } from "@mailwoman/sqlite/client";
46
48
  import { join } from "path-ts";
47
49
  import { TSVSpliterator } from "spliterator";
48
- import { GEONAMES_POSTAL_COLUMNS } from "#adapters/geonames-postal/adapter";
50
+ import { GEONAMES_POSTAL_COLUMNS } from "#adapters/geonames/postal/adapter";
49
51
  import { escapeSQLString } from "#utils/parquet";
50
52
  /**
51
53
  * Where a country writes the postcode, and the locale tag its rows carry.
@@ -130,6 +132,40 @@ export function applyCountryBudget(triples, budget) {
130
132
  }
131
133
  return kept;
132
134
  }
135
+ /**
136
+ * The surfaces a REGION is written as: its preferred names in the official language(s), then in the region's
137
+ * co-official languages, then the gazetteer's own `spr.name` (the English exonym). Deduplicated, order kept.
138
+ *
139
+ * `spr.name` is the English-preferred, diacritic-stripped label, and reading it alone is the defect #1673 measured:
140
+ * 53,078 ES rows teaching `Balearic Islands` (2,872 `Andalusia`, 5,680 `Castile and Leon`) against 4 rows of `Illes
141
+ * Balears`, and every province with its accent gone (`Cordoba`, `Leon`). A Spanish user writes `Islas Baleares` or
142
+ * `Illes Balears`; the exonym stays as ONE surface among them because a user may write it too.
143
+ */
144
+ export function regionWrittenForms(sprName, names) {
145
+ const out = [];
146
+ for (const raw of [...names.official, ...names.coOfficial, sprName]) {
147
+ const name = raw.replace(PROVINCE_GENERIC, "");
148
+ if (name && !out.includes(name)) {
149
+ out.push(name);
150
+ }
151
+ }
152
+ return out;
153
+ }
154
+ /**
155
+ * The provincial generic Who's On First keeps in a province's Catalan and Asturian preferred names (`Província de
156
+ * Barcelona`, `Província d'A Coruña`). An envelope carries the name alone, so the generic is dropped and the surface
157
+ * dedupes against the Castilian one.
158
+ */
159
+ const PROVINCE_GENERIC = /^prov[ií]ncia (?:de |d')/iu;
160
+ /**
161
+ * The surface a LOCALITY is written as: the official-language preferred name that is `spr.name` with its diacritics
162
+ * restored (`Cordoba` → `Córdoba`), else the first official-language preferred name, else `spr.name`. One surface, not
163
+ * a fan-out: the region carries the multiplicity and the locality would multiply it.
164
+ */
165
+ export function localityWrittenForm(sprName, names) {
166
+ const folded = foldName(sprName);
167
+ return names.official.find((name) => foldName(name) === folded) ?? names.official[0] ?? sprName;
168
+ }
133
169
  /**
134
170
  * Read triples out of `postalcode-intl.db` by following each postcode's `parent_id` into the admin gazetteer and that
135
171
  * place's ancestry to a region.
@@ -137,6 +173,12 @@ export function applyCountryBudget(triples, budget) {
137
173
  * A postcode whose parent does not resolve, or whose parent has no region ancestor, is DROPPED rather than emitted with
138
174
  * a blank — the recipe already skips a tuple with no region, and a blank here would hide how much of the source is
139
175
  * actually reachable.
176
+ *
177
+ * One triple per REGION SURFACE (see {@link regionWrittenForms}): a Balearic postcode yields `Islas Baleares`, `Illes
178
+ * Balears` and `Balearic Islands` rows, a Zamora one `Zamora` alone. The languages come from the codex — the country's
179
+ * official languages plus the province's co-official ones — and never from the names table's own language list, whose
180
+ * "preferred" name in a language not spoken in the province is often the parent community's (`Zamora` → `Castella i
181
+ * Lleó`).
140
182
  */
141
183
  export async function readTriplesFromParentJoin(countries, options = {}) {
142
184
  const postcodeDB = options.postcodeDB ?? String(dataRootPath("wof", "postalcode-intl.db"));
@@ -146,7 +188,8 @@ export async function readTriplesFromParentJoin(countries, options = {}) {
146
188
  using db = new DatabaseClient(adminDB, { readOnly: true });
147
189
  db.exec(`ATTACH DATABASE '${escapeSQLString(postcodeDB)}' AS pc`);
148
190
  const statement = db.prepare(`
149
- SELECT p.name AS postcode, a.name AS locality, r.name AS region, c.name AS country, p.country AS cc
191
+ SELECT p.name AS postcode, a.id AS locality_id, a.name AS locality, r.id AS region_id, r.name AS region,
192
+ c.name AS country, p.country AS cc
150
193
  FROM pc.spr p
151
194
  JOIN spr a ON a.id = p.parent_id AND a.placetype IN ('locality', 'localadmin')
152
195
  JOIN ancestors anc ON anc.id = a.id AND anc.ancestor_placetype = 'region'
@@ -156,23 +199,59 @@ export async function readTriplesFromParentJoin(countries, options = {}) {
156
199
  WHERE p.country = ? AND p.parent_id > 0
157
200
  ORDER BY p.id
158
201
  `);
202
+ const preferredStatement = db.prepare(`SELECT language, name FROM names WHERE id = ? AND privateuse = 'preferred' AND language IS NOT NULL ORDER BY language, name`);
203
+ const preferredByID = new Map();
204
+ /**
205
+ * Preferred names of one place, grouped by language, read once per id.
206
+ */
207
+ const preferredNames = (id) => {
208
+ let byLanguage = preferredByID.get(id);
209
+ if (!byLanguage) {
210
+ byLanguage = new Map();
211
+ for (const row of preferredStatement.all(id)) {
212
+ const list = byLanguage.get(row.language) ?? [];
213
+ list.push(row.name);
214
+ byLanguage.set(row.language, list);
215
+ }
216
+ preferredByID.set(id, byLanguage);
217
+ }
218
+ return byLanguage;
219
+ };
220
+ const namesIn = (byLanguage, languages) => languages.flatMap((language) => byLanguage.get(language) ?? []);
159
221
  const out = [];
160
222
  for (const cc of countries) {
161
223
  const convention = POSTCODE_CONVENTIONS.get(cc);
162
224
  if (!convention)
163
225
  continue;
226
+ const officialLanguages = officialLanguagesAlpha3(cc);
164
227
  for (const row of statement.all(cc)) {
165
- if (!row["postcode"] || !row["locality"] || !row["region"])
228
+ if (!row.postcode || !row.locality || !row.region)
166
229
  continue;
167
- out.push({
168
- postcode: row["postcode"],
169
- locality: row["locality"],
170
- region: row["region"],
171
- country: row["country"] ?? "",
172
- cc,
173
- locale: convention.locale,
174
- postcodePlacement: convention.placement,
175
- });
230
+ const regionOfficial = namesIn(preferredNames(row.region_id), officialLanguages);
231
+ // The co-official table is keyed by the region's name in the first official language; a region the names
232
+ // table has no such name for is looked up by its `spr.name`, which for a monolingual country is the same string.
233
+ const regionLanguages = regionLanguagesAlpha3(cc, regionOfficial[0] ?? row.region);
234
+ const regionCoOfficialLanguages = regionLanguages.filter((language) => !officialLanguages.includes(language));
235
+ const regionNames = {
236
+ official: regionOfficial,
237
+ coOfficial: namesIn(preferredNames(row.region_id), regionCoOfficialLanguages),
238
+ };
239
+ const localityNames = {
240
+ official: namesIn(preferredNames(row.locality_id), officialLanguages),
241
+ coOfficial: [],
242
+ };
243
+ const locality = localityWrittenForm(row.locality, localityNames);
244
+ for (const region of regionWrittenForms(row.region, regionNames)) {
245
+ out.push({
246
+ postcode: row.postcode,
247
+ locality,
248
+ region,
249
+ country: row.country ?? "",
250
+ cc,
251
+ locale: convention.locale,
252
+ postcodePlacement: convention.placement,
253
+ });
254
+ }
176
255
  }
177
256
  }
178
257
  return out;
@@ -1 +1 @@
1
- {"version":3,"file":"postcode-triples.js","sourceRoot":"","sources":["../../lib/tools/postcode-triples.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"postcode-triples.js","sourceRoot":"","sources":["../../lib/tools/postcode-triples.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ *
6
+ * Build a parquet slice from the DeepSeek-generated kryptonite JSONL and emit the corpus-v0.4.0
7
+ * MANIFEST. corpus-v0.4.0 is a pure adapter-addition revision: it points at every slice from
8
+ * v0.3.0 plus the new kryptonite slice(s). No v0.3.0 bytes are touched or re-shuffled.
9
+ *
10
+ * See docs/engineering/reference/CORPUS_V0_4_0_GENERATION.md for the why; that doc also pins the
11
+ * DeepSeek model version + prompt versions used to produce the JSONL.
12
+ *
13
+ * Invoke via `mailwoman corpus slice kryptonite \
14
+ * --jsonl /data/corpus/versioned/v0.4.0/kryptonite/canonical-kryptonite.jsonl \
15
+ * --base-manifest /data/corpus/versioned/v0.3.0/corpus-v0.3.0/MANIFEST.json \
16
+ * --out-dir /data/corpus/versioned/v0.4.0`
17
+ */
18
+ export interface SliceKryptoniteOptions {
19
+ jsonl: string;
20
+ baseManifest: string;
21
+ outDir: string;
22
+ /**
23
+ * Default `"0.4.0"`.
24
+ */
25
+ corpusVersion?: string;
26
+ /**
27
+ * Default `"deepseek-kryptonite"`.
28
+ */
29
+ source?: string;
30
+ }
31
+ export declare function buildKryptoniteSlice(options: SliceKryptoniteOptions, report?: (line: string) => void): Promise<void>;
32
+ //# sourceMappingURL=kryptonite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kryptonite.d.ts","sourceRoot":"","sources":["../../../lib/tools/slice/kryptonite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAWH,MAAM,WAAW,sBAAsB;IACtC,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CACf;AAiCD,wBAAsB,oBAAoB,CACzC,OAAO,EAAE,sBAAsB,EAC/B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC7B,OAAO,CAAC,IAAI,CAAC,CA6Df"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ *
6
+ * Build a parquet slice from the DeepSeek-generated kryptonite JSONL and emit the corpus-v0.4.0
7
+ * MANIFEST. corpus-v0.4.0 is a pure adapter-addition revision: it points at every slice from
8
+ * v0.3.0 plus the new kryptonite slice(s). No v0.3.0 bytes are touched or re-shuffled.
9
+ *
10
+ * See docs/engineering/reference/CORPUS_V0_4_0_GENERATION.md for the why; that doc also pins the
11
+ * DeepSeek model version + prompt versions used to produce the JSONL.
12
+ *
13
+ * Invoke via `mailwoman corpus slice kryptonite \
14
+ * --jsonl /data/corpus/versioned/v0.4.0/kryptonite/canonical-kryptonite.jsonl \
15
+ * --base-manifest /data/corpus/versioned/v0.3.0/corpus-v0.3.0/MANIFEST.json \
16
+ * --out-dir /data/corpus/versioned/v0.4.0`
17
+ */
18
+ import { pathExists, readLocalJSONFile } from "@mailwoman/core/fs/readers";
19
+ import { writeLocalJSONFile, writeLocalTextFile, makeDirectories } from "@mailwoman/core/fs/writers";
20
+ import { join } from "path-ts";
21
+ import { JSONSpliterator } from "spliterator";
22
+ import { alignRow, PARQUET_COLUMNS, ROW_GROUP_SIZE, SLICE_COMPRESSION, writeSlices } from "#utils";
23
+ async function* canonicalRows(jsonl, corpusVersion) {
24
+ for await (const raw of JSONSpliterator.fromAsync(jsonl)) {
25
+ // Strip sidecar underscore-prefixed fields the generator left behind for debugging.
26
+ const components = raw["components"];
27
+ yield {
28
+ raw: raw["raw"],
29
+ components,
30
+ country: raw["country"] ?? "US",
31
+ locale: raw["locale"] ?? undefined,
32
+ source: raw["source"] ?? "deepseek-kryptonite",
33
+ source_id: raw["source_id"],
34
+ corpus_version: corpusVersion,
35
+ license: raw["license"] ?? "Synthetic (DeepSeek-v4-flash, AGPL-compatible)",
36
+ synth: raw["synth"],
37
+ };
38
+ }
39
+ }
40
+ async function* labeledRows(jsonl, corpusVersion, quarantineLog) {
41
+ for await (const row of canonicalRows(jsonl, corpusVersion)) {
42
+ const result = alignRow(row);
43
+ if (result.kind === "labeled") {
44
+ yield result.row;
45
+ }
46
+ else {
47
+ quarantineLog.push(`${row.source_id}\t${result.row.reason}`);
48
+ }
49
+ }
50
+ }
51
+ export async function buildKryptoniteSlice(options, report) {
52
+ const corpusVersion = options.corpusVersion ?? "0.4.0";
53
+ const source = options.source ?? "deepseek-kryptonite";
54
+ if (!(await pathExists(options.jsonl)))
55
+ throw new Error(`jsonl not found: ${options.jsonl}`);
56
+ if (!(await pathExists(options.baseManifest)))
57
+ throw new Error(`base-manifest not found: ${options.baseManifest}`);
58
+ await makeDirectories(options.outDir);
59
+ const quarantine = [];
60
+ const newManifest = await writeSlices({ train: labeledRows(options.jsonl, corpusVersion, quarantine) }, { outputDir: options.outDir, corpusVersion });
61
+ report?.(`wrote ${newManifest.total_rows} rows into ${newManifest.slices.length} slice(s); ` +
62
+ `quarantined ${quarantine.length}`);
63
+ if (quarantine.length) {
64
+ const qPath = join(options.outDir, `corpus-v${corpusVersion}`, "quarantine-kryptonite.tsv");
65
+ await writeLocalTextFile(quarantine.join("\n") + "\n", qPath);
66
+ report?.(`quarantine log → ${qPath}`);
67
+ }
68
+ // Stamp the new slice's source field for audit.ts (which prefers slice.source over
69
+ // first_source_id-prefix inference). Without this, deepseek-kryptonite IDs would have
70
+ // to match a prefix in KNOWN_SOURCE_PREFIXES — we add it there too as a belt-and-braces.
71
+ for (const sh of newManifest.slices) {
72
+ sh.source = source;
73
+ }
74
+ // Compose the final corpus-v0.4.0 manifest: every slice from base + the new slice(s).
75
+ const base = await readLocalJSONFile(options.baseManifest);
76
+ const combined = {
77
+ corpus_version: corpusVersion,
78
+ schema: PARQUET_COLUMNS,
79
+ rows_per_slice: base.rows_per_slice,
80
+ row_group_size: base.row_group_size ?? ROW_GROUP_SIZE,
81
+ slices: [...base.slices, ...newManifest.slices],
82
+ counts: {
83
+ train: base.counts.train + (newManifest.counts.train ?? 0),
84
+ val: base.counts.val,
85
+ test: base.counts.test,
86
+ },
87
+ total_rows: base.total_rows + newManifest.total_rows,
88
+ };
89
+ // Stamp source on the legacy v0.3.0 slices too, so audit's slice.source path is the
90
+ // authoritative one. v0.3.0 slices mix sources; we use the first_source_id-prefix
91
+ // inference for them (audit.ts will re-derive on its own when slice.source is absent).
92
+ const combinedPath = join(options.outDir, `corpus-v${corpusVersion}`, "MANIFEST.json");
93
+ await writeLocalJSONFile(combined, combinedPath);
94
+ report?.(`wrote combined manifest → ${combinedPath}`);
95
+ report?.(` total_rows=${combined.total_rows} (base=${base.total_rows}, added=${newManifest.total_rows})`);
96
+ report?.(` slices=${combined.slices.length} (base=${base.slices.length}, added=${newManifest.slices.length})`);
97
+ report?.(` compression=${SLICE_COMPRESSION}`);
98
+ }
99
+ //# sourceMappingURL=kryptonite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kryptonite.js","sourceRoot":"","sources":["../../../lib/tools/slice/kryptonite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ *
6
+ * Build per-script parquet slices from the DeepSeek-generated transliteration JSONL and emit the
7
+ * corpus-v0.4.0 MANIFEST that combines them with the existing kryptonite + v0.3.0 slices.
8
+ *
9
+ * Sibling to `slice-kryptonite.ts`. The two modules share the same composition pattern: take a
10
+ * base MANIFEST, append new slices, write a combined MANIFEST. Differences specific to
11
+ * transliteration:
12
+ *
13
+ * - One JSONL contains rows from N target scripts (source = `deepseek-translit-<slug>`). We bucket by
14
+ * `source` and write one slice per script so `audit.ts` can attribute each slice to its
15
+ * synthetic source without relying on filename-prefix inference.
16
+ * - Each slice is written to `train/part-translit-<slug>.parquet` (distinct from kryptonite's
17
+ * `part-0000.parquet`, which v0.4.0's first builder already produced).
18
+ * - Inherits the path-canonicalization fix flagged in Thread B's postmortem: v0.3.0 slice paths are
19
+ * rewritten from `$MAILWOMAN_DATA_ROOT/...` to `/data/...` in the combined MANIFEST so
20
+ * all paths share one container-friendly form.
21
+ *
22
+ * See docs/engineering/reference/CORPUS_V0_4_0_GENERATION.md for prompts, model, and the
23
+ * reproducibility contract.
24
+ *
25
+ * Invoke via `mailwoman corpus slice translit \
26
+ * --jsonl /data/corpus/versioned/v0.4.0/transliteration/canonical-transliteration.jsonl \
27
+ * --base-manifest /data/corpus/versioned/v0.4.0/corpus-v0.4.0/MANIFEST.json \
28
+ * --out-dir /data/corpus/versioned/v0.4.0`
29
+ */
30
+ export interface SliceTranslitOptions {
31
+ jsonl: string;
32
+ baseManifest: string;
33
+ outDir: string;
34
+ /**
35
+ * Default `"0.4.0"`.
36
+ */
37
+ corpusVersion?: string;
38
+ /**
39
+ * Default `"/data/"`.
40
+ */
41
+ canonicalPathPrefix?: string;
42
+ /**
43
+ * Prefix the base manifest's slice paths currently carry, to be rewritten to
44
+ * {@link SliceTranslitOptions.canonicalPathPrefix}. Defaults to `mailwomanDataRoot()` with a trailing slash — the
45
+ * root that WROTE those paths. Pass it explicitly when translating a manifest generated under a different
46
+ * `$MAILWOMAN_DATA_ROOT` than the one you are running with.
47
+ */
48
+ legacyPathPrefix?: string;
49
+ }
50
+ export declare function buildTranslitSlice(options: SliceTranslitOptions, report?: (line: string) => void): Promise<void>;
51
+ //# sourceMappingURL=translit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translit.d.ts","sourceRoot":"","sources":["../../../lib/tools/slice/translit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAaH,MAAM,WAAW,oBAAoB;IACpC,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;CACzB;AA0DD,wBAAsB,kBAAkB,CACvC,OAAO,EAAE,oBAAoB,EAC7B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC7B,OAAO,CAAC,IAAI,CAAC,CAgGf"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ *
6
+ * Build per-script parquet slices from the DeepSeek-generated transliteration JSONL and emit the
7
+ * corpus-v0.4.0 MANIFEST that combines them with the existing kryptonite + v0.3.0 slices.
8
+ *
9
+ * Sibling to `slice-kryptonite.ts`. The two modules share the same composition pattern: take a
10
+ * base MANIFEST, append new slices, write a combined MANIFEST. Differences specific to
11
+ * transliteration:
12
+ *
13
+ * - One JSONL contains rows from N target scripts (source = `deepseek-translit-<slug>`). We bucket by
14
+ * `source` and write one slice per script so `audit.ts` can attribute each slice to its
15
+ * synthetic source without relying on filename-prefix inference.
16
+ * - Each slice is written to `train/part-translit-<slug>.parquet` (distinct from kryptonite's
17
+ * `part-0000.parquet`, which v0.4.0's first builder already produced).
18
+ * - Inherits the path-canonicalization fix flagged in Thread B's postmortem: v0.3.0 slice paths are
19
+ * rewritten from `$MAILWOMAN_DATA_ROOT/...` to `/data/...` in the combined MANIFEST so
20
+ * all paths share one container-friendly form.
21
+ *
22
+ * See docs/engineering/reference/CORPUS_V0_4_0_GENERATION.md for prompts, model, and the
23
+ * reproducibility contract.
24
+ *
25
+ * Invoke via `mailwoman corpus slice translit \
26
+ * --jsonl /data/corpus/versioned/v0.4.0/transliteration/canonical-transliteration.jsonl \
27
+ * --base-manifest /data/corpus/versioned/v0.4.0/corpus-v0.4.0/MANIFEST.json \
28
+ * --out-dir /data/corpus/versioned/v0.4.0`
29
+ */
30
+ import { mailwomanDataRoot } from "@mailwoman/core/data-root";
31
+ import { pathExists, readLocalJSONFile, tryStat } from "@mailwoman/core/fs/readers";
32
+ import { writeLocalJSONFile, writeLocalTextFile, makeDirectories } from "@mailwoman/core/fs/writers";
33
+ import { sha256File } from "@mailwoman/core/hash";
34
+ import { join } from "path-ts";
35
+ import { JSONSpliterator } from "spliterator";
36
+ import { alignRow, PARQUET_COLUMNS, ROW_GROUP_SIZE, rowToParquet, SLICE_COMPRESSION, writeParquetRows } from "#utils";
37
+ function toCanonicalRow(raw, corpusVersion) {
38
+ return {
39
+ raw: raw["raw"],
40
+ components: raw["components"],
41
+ country: raw["country"] ?? "US",
42
+ locale: raw["locale"] ?? undefined,
43
+ source: raw["source"],
44
+ source_id: raw["source_id"],
45
+ corpus_version: corpusVersion,
46
+ license: raw["license"] ?? "Synthetic (DeepSeek-v4-flash, AGPL-compatible)",
47
+ synth: raw["synth"],
48
+ };
49
+ }
50
+ /**
51
+ * Write one slice for a single source slug. Returns the populated SliceDescriptor + a list of quarantine reasons for
52
+ * rows that failed alignment.
53
+ */
54
+ async function writeOneSlice(rows, outPath, source) {
55
+ let firstSourceID = "";
56
+ let lastSourceID = "";
57
+ for (const row of rows) {
58
+ if (firstSourceID === "") {
59
+ firstSourceID = row.source_id;
60
+ }
61
+ lastSourceID = row.source_id;
62
+ }
63
+ await writeParquetRows(rows.map(rowToParquet), outPath);
64
+ const fileStat = await tryStat(outPath);
65
+ const sha256 = await sha256File(outPath);
66
+ return {
67
+ split: "train",
68
+ path: outPath,
69
+ format: "parquet",
70
+ compression: SLICE_COMPRESSION,
71
+ rows: rows.length,
72
+ bytes: fileStat?.size ?? 0,
73
+ sha256,
74
+ first_source_id: firstSourceID,
75
+ last_source_id: lastSourceID,
76
+ // Stamp source so audit.ts attributes the slice without falling back to filename-prefix inference.
77
+ source,
78
+ };
79
+ }
80
+ function canonicalizeSlicePath(path, legacyPrefix, canonicalPrefix) {
81
+ if (path.startsWith(legacyPrefix))
82
+ return canonicalPrefix + path.slice(legacyPrefix.length);
83
+ return path;
84
+ }
85
+ export async function buildTranslitSlice(options, report) {
86
+ const corpusVersion = options.corpusVersion ?? "0.4.0";
87
+ // This is a portable manifest namespace, not a host filesystem default.
88
+ const canonicalPathPrefix = options.canonicalPathPrefix ?? "/data/";
89
+ const legacyPathPrefix = options.legacyPathPrefix ?? `${mailwomanDataRoot()}/`;
90
+ if (!(await pathExists(options.jsonl)))
91
+ throw new Error(`jsonl not found: ${options.jsonl}`);
92
+ if (!(await pathExists(options.baseManifest)))
93
+ throw new Error(`base-manifest not found: ${options.baseManifest}`);
94
+ const corpusDir = join(options.outDir, `corpus-v${corpusVersion}`);
95
+ const trainDir = join(corpusDir, "train");
96
+ await makeDirectories(trainDir);
97
+ // Bucket canonical rows by source. Quarantined rows are logged.
98
+ const buckets = new Map();
99
+ const quarantine = [];
100
+ let totalIn = 0;
101
+ for await (const raw of JSONSpliterator.fromAsync(options.jsonl)) {
102
+ totalIn++;
103
+ const canon = toCanonicalRow(raw, corpusVersion);
104
+ const result = alignRow(canon);
105
+ if (result.kind !== "labeled") {
106
+ quarantine.push(`${canon.source_id}\t${result.row.reason}`);
107
+ continue;
108
+ }
109
+ const bucket = buckets.get(canon.source);
110
+ if (bucket) {
111
+ bucket.push(result.row);
112
+ }
113
+ else {
114
+ buckets.set(canon.source, [result.row]);
115
+ }
116
+ }
117
+ report?.(`read ${totalIn} rows; ${quarantine.length} quarantined; ${buckets.size} script buckets`);
118
+ const newSlices = [];
119
+ const sortedKeys = [...buckets.keys()].toSorted();
120
+ for (const source of sortedKeys) {
121
+ const rows = buckets.get(source);
122
+ const slug = source.startsWith("deepseek-translit-") ? source.slice("deepseek-translit-".length) : source;
123
+ const outPath = join(trainDir, `part-translit-${slug}.parquet`);
124
+ const descriptor = await writeOneSlice(rows, outPath, source);
125
+ newSlices.push(descriptor);
126
+ report?.(` ${source}: ${descriptor.rows} rows → ${outPath} (${descriptor.bytes} bytes)`);
127
+ }
128
+ if (quarantine.length) {
129
+ const qPath = join(corpusDir, "quarantine-transliteration.tsv");
130
+ await writeLocalTextFile(quarantine.join("\n") + "\n", qPath);
131
+ report?.(`quarantine log → ${qPath} (${quarantine.length} rows)`);
132
+ }
133
+ // Compose final MANIFEST: rewrite base.slices paths from /mnt/playpen/... → /data/... and append
134
+ // the new translit slices. Kryptonite slice already lives in the base manifest (it was written
135
+ // there by Thread B).
136
+ const base = await readLocalJSONFile(options.baseManifest);
137
+ const rewrittenBase = base.slices.map((sh) => ({
138
+ ...sh,
139
+ path: canonicalizeSlicePath(sh.path, legacyPathPrefix, canonicalPathPrefix),
140
+ }));
141
+ const newTrainRows = newSlices.reduce((sum, sh) => sum + sh.rows, 0);
142
+ const combined = {
143
+ corpus_version: corpusVersion,
144
+ schema: PARQUET_COLUMNS,
145
+ rows_per_slice: base.rows_per_slice,
146
+ row_group_size: base.row_group_size ?? ROW_GROUP_SIZE,
147
+ slices: [...rewrittenBase, ...newSlices],
148
+ counts: {
149
+ train: base.counts.train + newTrainRows,
150
+ val: base.counts.val,
151
+ test: base.counts.test,
152
+ },
153
+ total_rows: base.total_rows + newTrainRows,
154
+ };
155
+ const combinedPath = join(corpusDir, "MANIFEST.json");
156
+ await writeLocalJSONFile(combined, combinedPath);
157
+ report?.(`wrote combined manifest → ${combinedPath}`);
158
+ report?.(` total_rows=${combined.total_rows} (base=${base.total_rows}, added=${newTrainRows})`);
159
+ report?.(` slices=${combined.slices.length} (base=${base.slices.length}, added=${newSlices.length})`);
160
+ report?.(` compression=${SLICE_COMPRESSION}`);
161
+ const pathFix = rewrittenBase.filter((s, i) => s.path !== base.slices[i].path).length;
162
+ if (pathFix > 0) {
163
+ report?.(` path-canonicalized base slices: ${pathFix} (legacy '${legacyPathPrefix}' → '${canonicalPathPrefix}')`);
164
+ }
165
+ }
166
+ //# sourceMappingURL=translit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translit.js","sourceRoot":"","sources":["../../../lib/tools/slice/translit.ts"],"names":[],"mappings":"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"}