@mailwoman/resolver-wof-sqlite 10.0.0 → 10.2.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 (477) hide show
  1. package/README.md +9 -8
  2. package/lib/address/point/interpolation.ts +45 -39
  3. package/lib/address/point/schema.ts +17 -40
  4. package/lib/address/point.ts +316 -0
  5. package/lib/{address/index.ts → address.ts} +1 -1
  6. package/lib/ancestry/backfill.ts +20 -86
  7. package/lib/{ancestry/index.ts → ancestry.ts} +19 -15
  8. package/lib/build/candidate.ts +122 -174
  9. package/lib/build/population-corrections.ts +64 -0
  10. package/lib/build/slim.ts +44 -114
  11. package/lib/candidate/alias-bags.ts +16 -17
  12. package/lib/candidate/ancestors/schema.ts +77 -61
  13. package/lib/candidate/ancestors/sidecar.ts +15 -22
  14. package/lib/candidate/country-display-names.ts +6 -20
  15. package/lib/candidate/extract-fold.ts +10 -55
  16. package/lib/candidate/fts.ts +5 -23
  17. package/lib/candidate/importance.ts +65 -68
  18. package/lib/candidate/lookup.ts +124 -415
  19. package/lib/candidate/name-roles.ts +15 -33
  20. package/lib/candidate/own-name.ts +35 -32
  21. package/lib/candidate/place-attrs.ts +20 -13
  22. package/lib/candidate/schema.ts +29 -65
  23. package/lib/candidate/scoring.ts +54 -93
  24. package/lib/capital-schema.ts +21 -17
  25. package/lib/capitals.ts +29 -27
  26. package/lib/coincident-roles.ts +85 -55
  27. package/lib/convention/schema.ts +15 -16
  28. package/lib/convention.ts +144 -0
  29. package/lib/coverage-manifest-schema.ts +40 -45
  30. package/lib/currency-backfill.ts +34 -79
  31. package/lib/env.ts +1 -1
  32. package/lib/exact-match.ts +32 -21
  33. package/lib/extracts.ts +97 -74
  34. package/lib/fst/autocomplete.ts +54 -37
  35. package/lib/fst/builder.ts +37 -41
  36. package/lib/fst/deserialize-web.ts +16 -17
  37. package/lib/fst/format.ts +41 -23
  38. package/lib/fst/freshness.ts +43 -120
  39. package/lib/fst/matcher.ts +7 -5
  40. package/lib/fst/serialize.ts +54 -74
  41. package/lib/fst/types.ts +78 -75
  42. package/lib/{fst/index.ts → fst.ts} +1 -0
  43. package/lib/fts/query.ts +5 -36
  44. package/lib/fts.ts +280 -0
  45. package/lib/geonames/aliases.ts +73 -144
  46. package/lib/geonames/postal.ts +162 -71
  47. package/lib/index.ts +9 -8
  48. package/lib/interpolation.ts +48 -100
  49. package/lib/lookup.ts +155 -270
  50. package/lib/name-score.ts +9 -7
  51. package/lib/nsul/lookup.ts +37 -54
  52. package/lib/nsul/schema.ts +16 -43
  53. package/lib/paths.ts +159 -0
  54. package/lib/place-importance-schema.ts +62 -169
  55. package/lib/poi/lookup.ts +104 -121
  56. package/lib/poi/schema.ts +42 -26
  57. package/lib/polygon-schema.ts +10 -6
  58. package/lib/postal/city/alias/lookup.ts +22 -40
  59. package/lib/postal/city/alias/schema.ts +14 -10
  60. package/lib/postal/city/candidate-schema.ts +26 -20
  61. package/lib/postcode-point-lookup.ts +8 -27
  62. package/lib/primary-preference.ts +46 -126
  63. package/lib/proximity-rerank.ts +44 -33
  64. package/lib/ranking-weights.ts +105 -78
  65. package/lib/region-keys.ts +70 -42
  66. package/lib/reverse.ts +149 -86
  67. package/lib/schema.ts +73 -50
  68. package/lib/search-fetch.ts +90 -68
  69. package/lib/sqlite/convention-source.ts +15 -23
  70. package/lib/sqlite/utils.ts +19 -22
  71. package/lib/street/centroid/schema.ts +37 -42
  72. package/lib/street/{centroid/index.ts → centroid.ts} +16 -25
  73. package/lib/street/morphology/fst/builder.ts +60 -42
  74. package/lib/street/morphology/fst/loader.ts +40 -32
  75. package/lib/street/name-lookup.ts +45 -41
  76. package/lib/street/normalize.ts +88 -219
  77. package/lib/street/segment-schema.ts +116 -43
  78. package/lib/{street/index.ts → street.ts} +1 -1
  79. package/lib/types.ts +109 -150
  80. package/lib/unified-schema.ts +29 -29
  81. package/lib/uprn/existence.ts +30 -19
  82. package/lib/uprn/lookup.ts +29 -68
  83. package/lib/uprn/schema.ts +18 -40
  84. package/lib/weights-overlay-linker.ts +236 -252
  85. package/out/address/point/interpolation.d.ts +20 -23
  86. package/out/address/point/interpolation.d.ts.map +1 -1
  87. package/out/address/point/interpolation.js +42 -39
  88. package/out/address/point/interpolation.js.map +1 -1
  89. package/out/address/point/schema.d.ts +12 -35
  90. package/out/address/point/schema.d.ts.map +1 -1
  91. package/out/address/point/schema.js +3 -19
  92. package/out/address/point/schema.js.map +1 -1
  93. package/out/address/point.d.ts +57 -0
  94. package/out/address/point.d.ts.map +1 -0
  95. package/out/address/point.js +206 -0
  96. package/out/address/point.js.map +1 -0
  97. package/out/{address/index.js → address.d.ts} +2 -2
  98. package/out/address.d.ts.map +1 -0
  99. package/out/{address/index.d.ts → address.js} +2 -2
  100. package/out/address.js.map +1 -0
  101. package/out/ancestry/backfill.d.ts +11 -64
  102. package/out/ancestry/backfill.d.ts.map +1 -1
  103. package/out/ancestry/backfill.js +14 -74
  104. package/out/ancestry/backfill.js.map +1 -1
  105. package/out/ancestry.d.ts +49 -0
  106. package/out/ancestry.d.ts.map +1 -0
  107. package/out/ancestry.js +59 -0
  108. package/out/ancestry.js.map +1 -0
  109. package/out/build/candidate.d.ts +82 -112
  110. package/out/build/candidate.d.ts.map +1 -1
  111. package/out/build/candidate.js +17 -100
  112. package/out/build/candidate.js.map +1 -1
  113. package/out/build/population-corrections.d.ts +52 -0
  114. package/out/build/population-corrections.d.ts.map +1 -0
  115. package/out/build/population-corrections.js +40 -0
  116. package/out/build/population-corrections.js.map +1 -0
  117. package/out/build/slim.d.ts +8 -44
  118. package/out/build/slim.d.ts.map +1 -1
  119. package/out/build/slim.js +33 -94
  120. package/out/build/slim.js.map +1 -1
  121. package/out/candidate/alias-bags.d.ts +6 -6
  122. package/out/candidate/alias-bags.d.ts.map +1 -1
  123. package/out/candidate/alias-bags.js +16 -17
  124. package/out/candidate/alias-bags.js.map +1 -1
  125. package/out/candidate/ancestors/schema.d.ts +73 -57
  126. package/out/candidate/ancestors/schema.d.ts.map +1 -1
  127. package/out/candidate/ancestors/schema.js +56 -48
  128. package/out/candidate/ancestors/schema.js.map +1 -1
  129. package/out/candidate/ancestors/sidecar.d.ts +3 -8
  130. package/out/candidate/ancestors/sidecar.d.ts.map +1 -1
  131. package/out/candidate/ancestors/sidecar.js +15 -22
  132. package/out/candidate/ancestors/sidecar.js.map +1 -1
  133. package/out/candidate/country-display-names.d.ts +5 -15
  134. package/out/candidate/country-display-names.d.ts.map +1 -1
  135. package/out/candidate/country-display-names.js +6 -20
  136. package/out/candidate/country-display-names.js.map +1 -1
  137. package/out/candidate/extract-fold.d.ts +7 -15
  138. package/out/candidate/extract-fold.d.ts.map +1 -1
  139. package/out/candidate/extract-fold.js +5 -47
  140. package/out/candidate/extract-fold.js.map +1 -1
  141. package/out/candidate/fts.d.ts +5 -23
  142. package/out/candidate/fts.d.ts.map +1 -1
  143. package/out/candidate/fts.js +5 -23
  144. package/out/candidate/fts.js.map +1 -1
  145. package/out/candidate/importance.d.ts +60 -65
  146. package/out/candidate/importance.d.ts.map +1 -1
  147. package/out/candidate/importance.js +56 -63
  148. package/out/candidate/importance.js.map +1 -1
  149. package/out/candidate/lookup.d.ts +18 -55
  150. package/out/candidate/lookup.d.ts.map +1 -1
  151. package/out/candidate/lookup.js +82 -385
  152. package/out/candidate/lookup.js.map +1 -1
  153. package/out/candidate/name-roles.d.ts +9 -21
  154. package/out/candidate/name-roles.d.ts.map +1 -1
  155. package/out/candidate/name-roles.js +15 -33
  156. package/out/candidate/name-roles.js.map +1 -1
  157. package/out/candidate/own-name.d.ts +23 -25
  158. package/out/candidate/own-name.d.ts.map +1 -1
  159. package/out/candidate/own-name.js +35 -32
  160. package/out/candidate/own-name.js.map +1 -1
  161. package/out/candidate/place-attrs.d.ts +20 -13
  162. package/out/candidate/place-attrs.d.ts.map +1 -1
  163. package/out/candidate/place-attrs.js +4 -5
  164. package/out/candidate/place-attrs.js.map +1 -1
  165. package/out/candidate/schema.d.ts +27 -62
  166. package/out/candidate/schema.d.ts.map +1 -1
  167. package/out/candidate/schema.js +10 -22
  168. package/out/candidate/schema.js.map +1 -1
  169. package/out/candidate/scoring.d.ts +7 -8
  170. package/out/candidate/scoring.d.ts.map +1 -1
  171. package/out/candidate/scoring.js +52 -89
  172. package/out/candidate/scoring.js.map +1 -1
  173. package/out/capital-schema.d.ts +21 -17
  174. package/out/capital-schema.d.ts.map +1 -1
  175. package/out/capital-schema.js +17 -15
  176. package/out/capital-schema.js.map +1 -1
  177. package/out/capitals.d.ts +27 -25
  178. package/out/capitals.d.ts.map +1 -1
  179. package/out/capitals.js +23 -21
  180. package/out/capitals.js.map +1 -1
  181. package/out/coincident-roles.d.ts +60 -43
  182. package/out/coincident-roles.d.ts.map +1 -1
  183. package/out/coincident-roles.js +72 -50
  184. package/out/coincident-roles.js.map +1 -1
  185. package/out/convention/schema.d.ts +14 -14
  186. package/out/convention/schema.d.ts.map +1 -1
  187. package/out/convention/schema.js +6 -4
  188. package/out/convention/schema.js.map +1 -1
  189. package/out/convention.d.ts +97 -0
  190. package/out/convention.d.ts.map +1 -0
  191. package/out/convention.js +81 -0
  192. package/out/convention.js.map +1 -0
  193. package/out/coverage-manifest-schema.d.ts +34 -39
  194. package/out/coverage-manifest-schema.d.ts.map +1 -1
  195. package/out/coverage-manifest-schema.js +25 -34
  196. package/out/coverage-manifest-schema.js.map +1 -1
  197. package/out/currency-backfill.d.ts +16 -38
  198. package/out/currency-backfill.d.ts.map +1 -1
  199. package/out/currency-backfill.js +19 -46
  200. package/out/currency-backfill.js.map +1 -1
  201. package/out/env.d.ts +1 -1
  202. package/out/env.js +1 -1
  203. package/out/exact-match.d.ts +19 -10
  204. package/out/exact-match.d.ts.map +1 -1
  205. package/out/exact-match.js +32 -21
  206. package/out/exact-match.js.map +1 -1
  207. package/out/extracts.d.ts +66 -55
  208. package/out/extracts.d.ts.map +1 -1
  209. package/out/extracts.js +63 -55
  210. package/out/extracts.js.map +1 -1
  211. package/out/fst/autocomplete.d.ts +29 -21
  212. package/out/fst/autocomplete.d.ts.map +1 -1
  213. package/out/fst/autocomplete.js +39 -28
  214. package/out/fst/autocomplete.js.map +1 -1
  215. package/out/fst/builder.d.ts.map +1 -1
  216. package/out/fst/builder.js +37 -41
  217. package/out/fst/builder.js.map +1 -1
  218. package/out/fst/deserialize-web.d.ts +4 -4
  219. package/out/fst/deserialize-web.d.ts.map +1 -1
  220. package/out/fst/deserialize-web.js +15 -16
  221. package/out/fst/deserialize-web.js.map +1 -1
  222. package/out/fst/format.d.ts +41 -23
  223. package/out/fst/format.d.ts.map +1 -1
  224. package/out/fst/format.js +41 -23
  225. package/out/fst/format.js.map +1 -1
  226. package/out/fst/freshness.d.ts +19 -81
  227. package/out/fst/freshness.d.ts.map +1 -1
  228. package/out/fst/freshness.js +31 -94
  229. package/out/fst/freshness.js.map +1 -1
  230. package/out/fst/matcher.d.ts +5 -4
  231. package/out/fst/matcher.d.ts.map +1 -1
  232. package/out/fst/matcher.js +2 -2
  233. package/out/fst/matcher.js.map +1 -1
  234. package/out/fst/serialize.d.ts +28 -28
  235. package/out/fst/serialize.d.ts.map +1 -1
  236. package/out/fst/serialize.js +53 -71
  237. package/out/fst/serialize.js.map +1 -1
  238. package/out/fst/types.d.ts +78 -74
  239. package/out/fst/types.d.ts.map +1 -1
  240. package/out/fst/types.js +1 -4
  241. package/out/fst/types.js.map +1 -1
  242. package/out/{fst/index.js → fst.d.ts} +2 -1
  243. package/out/fst.d.ts.map +1 -0
  244. package/out/{fst/index.d.ts → fst.js} +2 -1
  245. package/out/fst.js.map +1 -0
  246. package/out/fts/query.d.ts +2 -27
  247. package/out/fts/query.d.ts.map +1 -1
  248. package/out/fts/query.js +5 -36
  249. package/out/fts/query.js.map +1 -1
  250. package/out/fts.d.ts +126 -0
  251. package/out/fts.d.ts.map +1 -0
  252. package/out/fts.js +188 -0
  253. package/out/fts.js.map +1 -0
  254. package/out/geonames/aliases.d.ts +26 -62
  255. package/out/geonames/aliases.d.ts.map +1 -1
  256. package/out/geonames/aliases.js +45 -117
  257. package/out/geonames/aliases.js.map +1 -1
  258. package/out/geonames/postal.d.ts +84 -44
  259. package/out/geonames/postal.d.ts.map +1 -1
  260. package/out/geonames/postal.js +115 -73
  261. package/out/geonames/postal.js.map +1 -1
  262. package/out/{geonames/index.js → geonames.d.ts} +1 -1
  263. package/out/geonames.d.ts.map +1 -0
  264. package/out/{geonames/index.d.ts → geonames.js} +1 -1
  265. package/out/geonames.js.map +1 -0
  266. package/out/index.d.ts +9 -8
  267. package/out/index.d.ts.map +1 -1
  268. package/out/index.js +6 -5
  269. package/out/index.js.map +1 -1
  270. package/out/interpolation.d.ts +18 -55
  271. package/out/interpolation.d.ts.map +1 -1
  272. package/out/interpolation.js +27 -69
  273. package/out/interpolation.js.map +1 -1
  274. package/out/lookup.d.ts +23 -51
  275. package/out/lookup.d.ts.map +1 -1
  276. package/out/lookup.js +136 -234
  277. package/out/lookup.js.map +1 -1
  278. package/out/name-score.d.ts +2 -2
  279. package/out/name-score.d.ts.map +1 -1
  280. package/out/name-score.js +9 -7
  281. package/out/name-score.js.map +1 -1
  282. package/out/nsul/lookup.d.ts +33 -34
  283. package/out/nsul/lookup.d.ts.map +1 -1
  284. package/out/nsul/lookup.js +26 -40
  285. package/out/nsul/lookup.js.map +1 -1
  286. package/out/nsul/schema.d.ts +16 -43
  287. package/out/nsul/schema.d.ts.map +1 -1
  288. package/out/nsul/schema.js +9 -35
  289. package/out/nsul/schema.js.map +1 -1
  290. package/out/{nsul/index.d.ts → nsul.d.ts} +1 -1
  291. package/out/nsul.d.ts.map +1 -0
  292. package/out/{nsul/index.js → nsul.js} +1 -1
  293. package/out/nsul.js.map +1 -0
  294. package/out/paths.d.ts +124 -0
  295. package/out/paths.d.ts.map +1 -0
  296. package/out/paths.js +104 -0
  297. package/out/paths.js.map +1 -0
  298. package/out/place-importance-schema.d.ts +51 -143
  299. package/out/place-importance-schema.d.ts.map +1 -1
  300. package/out/place-importance-schema.js +28 -143
  301. package/out/place-importance-schema.js.map +1 -1
  302. package/out/poi/lookup.d.ts +40 -47
  303. package/out/poi/lookup.d.ts.map +1 -1
  304. package/out/poi/lookup.js +69 -96
  305. package/out/poi/lookup.js.map +1 -1
  306. package/out/poi/schema.d.ts +41 -25
  307. package/out/poi/schema.d.ts.map +1 -1
  308. package/out/poi/schema.js +25 -17
  309. package/out/poi/schema.js.map +1 -1
  310. package/out/{poi/index.js → poi.d.ts} +1 -1
  311. package/out/poi.d.ts.map +1 -0
  312. package/out/{poi/index.d.ts → poi.js} +1 -1
  313. package/out/poi.js.map +1 -0
  314. package/out/polygon-schema.d.ts +10 -6
  315. package/out/polygon-schema.d.ts.map +1 -1
  316. package/out/polygon-schema.js +2 -2
  317. package/out/polygon-schema.js.map +1 -1
  318. package/out/postal/city/alias/lookup.d.ts +20 -23
  319. package/out/postal/city/alias/lookup.d.ts.map +1 -1
  320. package/out/postal/city/alias/lookup.js +17 -30
  321. package/out/postal/city/alias/lookup.js.map +1 -1
  322. package/out/postal/city/alias/schema.d.ts +14 -10
  323. package/out/postal/city/alias/schema.d.ts.map +1 -1
  324. package/out/postal/city/alias/schema.js +10 -8
  325. package/out/postal/city/alias/schema.js.map +1 -1
  326. package/out/postal/city/candidate-schema.d.ts +25 -19
  327. package/out/postal/city/candidate-schema.d.ts.map +1 -1
  328. package/out/postal/city/candidate-schema.js +21 -17
  329. package/out/postal/city/candidate-schema.js.map +1 -1
  330. package/out/{postal/index.d.ts → postal.d.ts} +1 -1
  331. package/out/postal.d.ts.map +1 -0
  332. package/out/{postal/index.js → postal.js} +1 -1
  333. package/out/postal.js.map +1 -0
  334. package/out/postcode-point-lookup.d.ts +6 -24
  335. package/out/postcode-point-lookup.d.ts.map +1 -1
  336. package/out/postcode-point-lookup.js +5 -17
  337. package/out/postcode-point-lookup.js.map +1 -1
  338. package/out/primary-preference.d.ts +38 -92
  339. package/out/primary-preference.d.ts.map +1 -1
  340. package/out/primary-preference.js +15 -99
  341. package/out/primary-preference.js.map +1 -1
  342. package/out/proximity-rerank.d.ts +41 -30
  343. package/out/proximity-rerank.d.ts.map +1 -1
  344. package/out/proximity-rerank.js +38 -29
  345. package/out/proximity-rerank.js.map +1 -1
  346. package/out/ranking-weights.d.ts +98 -64
  347. package/out/ranking-weights.d.ts.map +1 -1
  348. package/out/ranking-weights.js +26 -25
  349. package/out/ranking-weights.js.map +1 -1
  350. package/out/region-keys.d.ts +50 -31
  351. package/out/region-keys.d.ts.map +1 -1
  352. package/out/region-keys.js +68 -40
  353. package/out/region-keys.js.map +1 -1
  354. package/out/reverse.d.ts +78 -50
  355. package/out/reverse.d.ts.map +1 -1
  356. package/out/reverse.js +98 -61
  357. package/out/reverse.js.map +1 -1
  358. package/out/schema.d.ts +72 -49
  359. package/out/schema.d.ts.map +1 -1
  360. package/out/schema.js +4 -5
  361. package/out/schema.js.map +1 -1
  362. package/out/search-fetch.d.ts +16 -12
  363. package/out/search-fetch.d.ts.map +1 -1
  364. package/out/search-fetch.js +83 -63
  365. package/out/search-fetch.js.map +1 -1
  366. package/out/sqlite/convention-source.d.ts +12 -16
  367. package/out/sqlite/convention-source.d.ts.map +1 -1
  368. package/out/sqlite/convention-source.js +13 -22
  369. package/out/sqlite/convention-source.js.map +1 -1
  370. package/out/sqlite/utils.d.ts +19 -19
  371. package/out/sqlite/utils.d.ts.map +1 -1
  372. package/out/sqlite/utils.js +14 -15
  373. package/out/sqlite/utils.js.map +1 -1
  374. package/out/street/centroid/schema.d.ts +37 -42
  375. package/out/street/centroid/schema.d.ts.map +1 -1
  376. package/out/street/centroid/schema.js +9 -21
  377. package/out/street/centroid/schema.js.map +1 -1
  378. package/out/street/centroid.d.ts +30 -0
  379. package/out/street/centroid.d.ts.map +1 -0
  380. package/out/street/{centroid/index.js → centroid.js} +13 -24
  381. package/out/street/centroid.js.map +1 -0
  382. package/out/street/morphology/fst/builder.d.ts +20 -10
  383. package/out/street/morphology/fst/builder.d.ts.map +1 -1
  384. package/out/street/morphology/fst/builder.js +44 -34
  385. package/out/street/morphology/fst/builder.js.map +1 -1
  386. package/out/street/morphology/fst/loader.d.ts +33 -26
  387. package/out/street/morphology/fst/loader.d.ts.map +1 -1
  388. package/out/street/morphology/fst/loader.js +23 -22
  389. package/out/street/morphology/fst/loader.js.map +1 -1
  390. package/out/street/name-lookup.d.ts +24 -18
  391. package/out/street/name-lookup.d.ts.map +1 -1
  392. package/out/street/name-lookup.js +34 -35
  393. package/out/street/name-lookup.js.map +1 -1
  394. package/out/street/normalize.d.ts +35 -136
  395. package/out/street/normalize.d.ts.map +1 -1
  396. package/out/street/normalize.js +77 -194
  397. package/out/street/normalize.js.map +1 -1
  398. package/out/street/segment-schema.d.ts +79 -39
  399. package/out/street/segment-schema.d.ts.map +1 -1
  400. package/out/street/segment-schema.js +71 -21
  401. package/out/street/segment-schema.js.map +1 -1
  402. package/out/{street/index.js → street.d.ts} +2 -2
  403. package/out/street.d.ts.map +1 -0
  404. package/out/{street/index.d.ts → street.js} +2 -2
  405. package/out/street.js.map +1 -0
  406. package/out/types.d.ts +84 -149
  407. package/out/types.d.ts.map +1 -1
  408. package/out/types.js +0 -6
  409. package/out/types.js.map +1 -1
  410. package/out/unified-schema.d.ts +8 -12
  411. package/out/unified-schema.d.ts.map +1 -1
  412. package/out/unified-schema.js +29 -29
  413. package/out/unified-schema.js.map +1 -1
  414. package/out/uprn/existence.d.ts +28 -17
  415. package/out/uprn/existence.d.ts.map +1 -1
  416. package/out/uprn/existence.js +26 -16
  417. package/out/uprn/existence.js.map +1 -1
  418. package/out/uprn/lookup.d.ts +14 -44
  419. package/out/uprn/lookup.d.ts.map +1 -1
  420. package/out/uprn/lookup.js +21 -57
  421. package/out/uprn/lookup.js.map +1 -1
  422. package/out/uprn/schema.d.ts +18 -40
  423. package/out/uprn/schema.d.ts.map +1 -1
  424. package/out/uprn/schema.js +10 -32
  425. package/out/uprn/schema.js.map +1 -1
  426. package/out/{uprn/index.d.ts → uprn.d.ts} +1 -1
  427. package/out/uprn.d.ts.map +1 -0
  428. package/out/{uprn/index.js → uprn.js} +1 -1
  429. package/out/uprn.js.map +1 -0
  430. package/out/weights-overlay-linker.d.ts +138 -144
  431. package/out/weights-overlay-linker.d.ts.map +1 -1
  432. package/out/weights-overlay-linker.js +105 -159
  433. package/out/weights-overlay-linker.js.map +1 -1
  434. package/package.json +91 -596
  435. package/lib/address/point/index.ts +0 -328
  436. package/lib/convention/index.ts +0 -154
  437. package/lib/fts/index.ts +0 -361
  438. package/out/address/index.d.ts.map +0 -1
  439. package/out/address/index.js.map +0 -1
  440. package/out/address/point/index.d.ts +0 -53
  441. package/out/address/point/index.d.ts.map +0 -1
  442. package/out/address/point/index.js +0 -222
  443. package/out/address/point/index.js.map +0 -1
  444. package/out/ancestry/index.d.ts +0 -45
  445. package/out/ancestry/index.d.ts.map +0 -1
  446. package/out/ancestry/index.js +0 -55
  447. package/out/ancestry/index.js.map +0 -1
  448. package/out/convention/index.d.ts +0 -106
  449. package/out/convention/index.d.ts.map +0 -1
  450. package/out/convention/index.js +0 -93
  451. package/out/convention/index.js.map +0 -1
  452. package/out/fst/index.d.ts.map +0 -1
  453. package/out/fst/index.js.map +0 -1
  454. package/out/fts/index.d.ts +0 -184
  455. package/out/fts/index.d.ts.map +0 -1
  456. package/out/fts/index.js +0 -277
  457. package/out/fts/index.js.map +0 -1
  458. package/out/geonames/index.d.ts.map +0 -1
  459. package/out/geonames/index.js.map +0 -1
  460. package/out/nsul/index.d.ts.map +0 -1
  461. package/out/nsul/index.js.map +0 -1
  462. package/out/poi/index.d.ts.map +0 -1
  463. package/out/poi/index.js.map +0 -1
  464. package/out/postal/index.d.ts.map +0 -1
  465. package/out/postal/index.js.map +0 -1
  466. package/out/street/centroid/index.d.ts +0 -40
  467. package/out/street/centroid/index.d.ts.map +0 -1
  468. package/out/street/centroid/index.js.map +0 -1
  469. package/out/street/index.d.ts.map +0 -1
  470. package/out/street/index.js.map +0 -1
  471. package/out/uprn/index.d.ts.map +0 -1
  472. package/out/uprn/index.js.map +0 -1
  473. /package/lib/{geonames/index.ts → geonames.ts} +0 -0
  474. /package/lib/{nsul/index.ts → nsul.ts} +0 -0
  475. /package/lib/{poi/index.ts → poi.ts} +0 -0
  476. /package/lib/{postal/index.ts → postal.ts} +0 -0
  477. /package/lib/{uprn/index.ts → uprn.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../../../lib/street/morphology/fst/builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAQH,OAAO,EAAE,UAAU,EAAmB,MAAM,cAAc,CAAA;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,YAAY,CAAA;AAW3D,MAAM,WAAW,4BAA4B;IAC5C;;OAEG;IACH,eAAe,EAAE,MAAM,CAAA;IACvB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CACrD;AAED,MAAM,WAAW,8BAA8B;IAC9C,OAAO,EAAE,UAAU,CAAA;IACnB,UAAU,EAAE,aAAa,CAAA;IACzB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,EAAE,CAAA;CACjB;AAuBD,wBAAsB,wBAAwB,CAC7C,IAAI,EAAE,4BAA4B,GAChC,OAAO,CAAC,8BAA8B,CAAC,CAoKzC"}
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../../../lib/street/morphology/fst/builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH,OAAO,EAAe,KAAK,eAAe,EAAE,MAAM,SAAS,CAAA;AAK3D,OAAO,EAAE,UAAU,EAAmB,MAAM,cAAc,CAAA;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,YAAY,CAAA;AAa3D,MAAM,WAAW,4BAA4B;IAC5C;;OAEG;IACH,eAAe,EAAE,eAAe,CAAA;IAChC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB;;;;;;;;;;;;;;OAcG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CACrD;AAED,MAAM,WAAW,8BAA8B;IAC9C,OAAO,EAAE,UAAU,CAAA;IACnB,UAAU,EAAE,aAAa,CAAA;IACzB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,EAAE,CAAA;CACjB;AAsBD,wBAAsB,wBAAwB,CAC7C,IAAI,EAAE,4BAA4B,GAChC,OAAO,CAAC,8BAA8B,CAAC,CA2KzC"}
@@ -5,13 +5,14 @@
5
5
  *
6
6
  * Build a street-morphology FST from libpostal's street_types dictionaries. The morphology FST maps
7
7
  * street-typing affixes (Street/Avenue/rue/Calle/Straße/...) to a single synthetic placetype
8
- * `"street_affix"` — distinct from the admin FST in source data, intent, and binary artifact.
8
+ * `"street_affix"`. Its source data and purpose differ from the admin FST.
9
+ * It also produces a separate binary artifact.
9
10
  *
10
11
  * The morphology FST closes the inference-time vacuum identified by the v0.6.1 postmortem: street
11
12
  * tokens have no admin-FST anchor, so synth-street training pushed the model toward over-emitting
12
13
  * `dependent_locality` on subcomponents. With the morphology FST, the neural decoder gets
13
14
  * positive evidence for street-typing affixes and the adjacent name tokens, plus negative
14
- * evidence away from `dependent_locality` on the same neighbours.
15
+ * evidence away from `dependent_locality` on the same neighbors.
15
16
  *
16
17
  * Design rationale + the four-layer street-supplement architecture lives in
17
18
  * `docs/articles/concepts/street-supplement-architecture.md`.
@@ -22,32 +23,34 @@
22
23
  * Output: an `FSTMatcher` ready to serialize via `serializeFST` to e.g.
23
24
  * `fst-street-morphology.bin`.
24
25
  */
25
- import { isDirectory, readLocalTextFile, statPath } from "@mailwoman/core/fs/readers";
26
- import { join } from "path-ts";
26
+ import { readLocalTextFile } from "@mailwoman/core/fs/readers";
27
+ import { isDirectory, isFile } from "@mailwoman/core/fs/readers/stat";
28
+ import { PathBuilder } from "path-ts";
27
29
  import { TextSpliterator } from "spliterator";
28
30
  import { Globerator } from "spliterator/node/fs";
29
31
  import { FSTMatcher, normalizeTokens } from "#fst/matcher";
30
32
  /**
31
- * Reserved synthetic wofID base for street-morphology entries. 32-bit unsigned, well above any realistic WOF
32
- * allocation. Reusing the same base across rebuilds keeps IDs stable for any consumer that caches them. See
33
- * [[project-schema-storage-decision]] for the reserved range policy.
33
+ * Reserved synthetic wofID base for street-morphology entries. 32-bit unsigned,
34
+ * well above any realistic WOF allocation.
35
+ *
36
+ * The same base across rebuilds keeps IDs stable for consumers that cache them.
37
+ * See [[project-schema-storage-decision]] for the reserved range policy.
34
38
  */
35
39
  const STREET_AFFIX_WOFID_BASE = 1_900_000_000;
36
40
  const STREET_TYPES_FILENAME = "street_types.txt";
37
41
  /**
38
- * Parse one `street_types.txt` line into `{ canonical, variants }`. Canonical is the first token (pre-`|`); variants
39
- * are all whitespace-stripped non-empty tokens including the canonical.
42
+ * Parse one `street_types.txt` line into `{ canonical, variants }`.
43
+ *
44
+ * Canonical is the first token (pre-`|`); variants are all whitespace-stripped
45
+ * non-empty tokens including the canonical.
40
46
  *
41
47
  * Lines with no `|` are treated as a single-form entry where canonical == variant.
42
48
  */
43
49
  function parseLine(line) {
44
50
  const trimmed = line.trim();
45
- if (!trimmed.length || trimmed.startsWith("#"))
51
+ if (!trimmed || trimmed.startsWith("#"))
46
52
  return null;
47
- const parts = trimmed
48
- .split("|")
49
- .map((s) => s.trim())
50
- .filter((s) => s.length > 0);
53
+ const parts = TextSpliterator.from(trimmed, { delimiter: "|" }).toArray();
51
54
  if (!parts.length)
52
55
  return null;
53
56
  return { canonical: parts[0], variants: parts };
@@ -55,6 +58,7 @@ function parseLine(line) {
55
58
  export async function buildStreetMorphologyFST(opts) {
56
59
  const progress = opts.onProgress ?? (() => { });
57
60
  const minVariantLength = opts.minVariantLength ?? 3;
61
+ const dictionariesDir = PathBuilder.from(opts.dictionariesDir);
58
62
  // Discover locales — either provided explicitly, or all directories containing street_types.txt.
59
63
  let locales;
60
64
  // oxlint-disable-next-line unicorn/prefer-ternary -- the else branch is a multi-line directory scan
@@ -63,33 +67,27 @@ export async function buildStreetMorphologyFST(opts) {
63
67
  }
64
68
  else {
65
69
  const entries = await Globerator.from("*", {
66
- cwd: opts.dictionariesDir,
70
+ cwd: dictionariesDir,
67
71
  absolute: false,
68
72
  onlyFiles: false,
69
73
  }).toArray();
70
74
  const localeProbes = [];
71
75
  for (const entry of entries) {
72
- const localePath = join(opts.dictionariesDir, entry);
76
+ const localePath = dictionariesDir(entry);
73
77
  if (!(await isDirectory(localePath))) {
74
78
  localeProbes.push([entry, false]);
75
79
  continue;
76
80
  }
77
- try {
78
- await statPath(join(localePath, STREET_TYPES_FILENAME));
79
- localeProbes.push([entry, true]);
80
- }
81
- catch {
82
- localeProbes.push([entry, false]);
83
- }
81
+ localeProbes.push([entry, await isFile(localePath(STREET_TYPES_FILENAME))]);
84
82
  }
85
83
  locales = localeProbes.filter(([, hasFile]) => hasFile).map(([entry]) => entry);
86
84
  }
87
85
  progress("discover", `Found ${locales.length} locales with ${STREET_TYPES_FILENAME}`);
88
- // Collect canonical → set-of-variants across all locales. Same canonical form may appear in
89
- // multiple locales (e.g. "avenue" in en/fr); we union the variant sets.
86
+ // Collect canonical → set-of-variants across all locales.
87
+ // Same canonical form may appear in multiple locales (e.g. "avenue" in en/fr); we union the variant sets.
90
88
  const canonicalToVariants = new Map();
91
89
  for (const locale of locales) {
92
- const filePath = join(opts.dictionariesDir, locale, STREET_TYPES_FILENAME);
90
+ const filePath = dictionariesDir(locale, STREET_TYPES_FILENAME);
93
91
  const content = await readLocalTextFile(filePath);
94
92
  for (const line of TextSpliterator.from(content)) {
95
93
  const parsed = parseLine(line);
@@ -103,14 +101,16 @@ export async function buildStreetMorphologyFST(opts) {
103
101
  }
104
102
  }
105
103
  progress("collect", `Collected ${canonicalToVariants.size} canonical affixes`);
106
- // Assign stable synthetic wofIDs. Sort canonicals for determinism.
104
+ // Assign stable synthetic wofIDs.
105
+ // Sort canonicals for determinism.
107
106
  const sortedCanonicals = [...canonicalToVariants.keys()].toSorted();
108
107
  const canonicalToWOFID = new Map();
109
108
  for (let i = 0; i < sortedCanonicals.length; i++) {
110
109
  canonicalToWOFID.set(sortedCanonicals[i], STREET_AFFIX_WOFID_BASE + i);
111
110
  }
112
- // Build the trie. Each variant is inserted as a token sequence pointing to its canonical's
113
- // PlaceEntry — so all variants of "avenue" (av/ave/aven/...) lead to the same terminal entry.
111
+ // Build the trie.
112
+ // Each variant is inserted as a token sequence pointing to its canonical's PlaceEntry —
113
+ // so all variants of "avenue" (av/ave/aven/...) lead to the same terminal entry.
114
114
  const nodes = [{ edges: new Map(), places: [] }];
115
115
  function insertName(tokens, entry) {
116
116
  if (!tokens.length)
@@ -141,13 +141,16 @@ export async function buildStreetMorphologyFST(opts) {
141
141
  placetype: "street_affix",
142
142
  name: canonical,
143
143
  parentChain: [],
144
- // Fixed referential score: street affixes are structurally unambiguous (Avenue is almost
145
- // never anything but street-typing). The morphology prior caps bias separately; this value
146
- // just feeds the cap formula `referential * cap`. No encyclopedic field — a street affix is
147
- // not a place and has no article; absence here is the correct statement.
144
+ // Fixed referential score: street affixes are structurally unambiguous
145
+ // (Avenue is almost never anything but street-typing).
146
+ // The morphology prior caps bias separately.
147
+ // This value just feeds the cap formula `referential * cap`.
148
+ // No encyclopedic score — a street affix is not a place and has no article.
148
149
  referential: 1,
150
+ encyclopedic: null,
149
151
  lat: 0,
150
152
  lon: 0,
153
+ crossCountryBranches: null,
151
154
  };
152
155
  for (const variant of variants) {
153
156
  const tokens = normalizeTokens(variant);
@@ -174,7 +177,14 @@ export async function buildStreetMorphologyFST(opts) {
174
177
  edgeCount,
175
178
  nameInsertions: insertCount,
176
179
  importanceMatches: 0, // No importance scoring for morphology — fixed at 1.0.
177
- sourceDB: opts.dictionariesDir,
180
+ encyclopedicMatches: null,
181
+ importanceSource: null,
182
+ sourceDB: dictionariesDir.toString(),
183
+ sourceDBMD5: null,
184
+ sourceDBBytes: null,
185
+ modelCardVersion: null,
186
+ exclusionPolicy: null,
187
+ excludedInsertions: null,
178
188
  };
179
189
  return {
180
190
  matcher,
@@ -1 +1 @@
1
- {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../../lib/street/morphology/fst/builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../../lib/street/morphology/fst/builder.ts"],"names":[],"mappings":"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"}
@@ -3,45 +3,51 @@
3
3
  * @license AGPL-3.0
4
4
  * @author Teffen Ellis, et al.
5
5
  *
6
- * Unified runtime loader for the street-morphology FST — the #1315 street-context check's signal
7
- * source, previously rebuilt from the libpostal dictionaries per process at three duplicate call
8
- * sites (runtime pipeline / parity eval / neural harness). The sealed artifact
9
- * (`fst-street-morphology.bin`, built by `mailwoman gazetteer build street-morphology`) replaces
10
- * those per-process builds; this loader is the ONE resolution ladder every node call site shares:
6
+ * Runtime loader for the street-morphology FST. The sealed artifact
7
+ * (`fst-street-morphology.bin`, built by `mailwoman gazetteer build street-morphology`) is the one
8
+ * resolution ladder every node call site shares.
11
9
  *
12
- * 1. An explicit `artifactPath` (e.g. the weights-package sibling surfaced by
13
- * `NeuralAddressClassifier.streetMorphologyPath`). When given, it is the only artifact probed.
14
- * 2. Otherwise the staged sealed artifact at `$MAILWOMAN_DATA_ROOT/wof/fst-street-morphology.bin`.
15
- * 3. Build-from-dictionaries fallback: `buildStreetMorphologyFST` over core's bundled libpostal
16
- * `street_types.txt` files — the pre-artifact behavior, kept so a missing artifact degrades to
17
- * a per-process build rather than a crash.
10
+ * 1. An explicit `artifactPath`, e.g. the weights-package sibling surfaced by
11
+ * `NeuralAddressClassifier.streetMorphologyPath`. When given, it is the only artifact probed.
12
+ * 2. Otherwise the staged sealed artifact at `$MAILWOMAN_DATA_ROOT/db/wof/fst-street-morphology.bin`.
13
+ * 3. A build-from-dictionaries fallback: `buildStreetMorphologyFST` over core's bundled libpostal
14
+ * `street_types.txt` files, kept so a missing artifact degrades to a per-process build instead
15
+ * of a crash.
18
16
  *
19
17
  * A present-but-unreadable artifact reports through `onWarn` and falls through to the build rung.
20
- * Browsers can't take the fallback (no fs) — they deserialize the same artifact via
21
- * `fst-deserialize-web.ts` (see the docs demo loader).
18
+ * Browsers cannot take the fallback because they have no filesystem API. They deserialize the same
19
+ * artifact through `fst-deserialize-web.ts` (see the docs demo loader).
22
20
  */
21
+ import type { PathBuilder, PathBuilderLike } from "path-ts";
23
22
  import type { FSTMatcher } from "#fst/matcher";
24
23
  import type { FSTProvenance } from "#fst/types";
25
24
  /**
26
- * The sealed artifact's canonical filename — identical in the data-root staging dir and as a weights-package sibling.
25
+ * The sealed artifact's canonical filename, identical in the data-root staging dir
26
+ * and as a weights-package sibling.
27
27
  */
28
28
  export declare const STREET_MORPHOLOGY_ARTIFACT_FILENAME = "fst-street-morphology.bin";
29
29
  /**
30
- * The staged artifact's default location: `$MAILWOMAN_DATA_ROOT/wof/fst-street-morphology.bin`.
30
+ * The staged artifact's default location: `$MAILWOMAN_DATA_ROOT/db/wof/fst-street-morphology.bin`.
31
31
  */
32
- export declare function defaultStreetMorphologyArtifactPath(): string;
32
+ export declare function defaultStreetMorphologyArtifactPath(): PathBuilder;
33
33
  export interface LoadStreetMorphologyFSTOpts {
34
34
  /**
35
- * Explicit artifact path (e.g. a weights-package sibling). When given it is the ONLY artifact probed — missing or
36
- * unreadable degrades straight to the dictionary build, never a throw.
35
+ * Explicit artifact path (e.g. A weights-package sibling).
36
+ *
37
+ * When given, it is the only artifact probed.
38
+ * A missing or unreadable artifact degrades straight to the dictionary build, never a throw.
37
39
  */
38
- artifactPath?: string;
40
+ artifactPath?: PathBuilderLike;
39
41
  /**
40
- * Dictionaries dir for the build fallback. Defaults to core's bundled libpostal dictionaries.
42
+ * Dictionaries dir for the build fallback.
43
+ *
44
+ * @defaultValue core's bundled libpostal dictionaries.
41
45
  */
42
- dictionariesDir?: string;
46
+ dictionariesDir?: PathBuilderLike;
43
47
  /**
44
- * Unreadable-artifact diagnostics. Defaults to silent (the caller owns its warn channel).
48
+ * Unreadable-artifact diagnostics.
49
+ *
50
+ * @defaultValue silent (the caller owns its warn channel).
45
51
  */
46
52
  onWarn?: (message: string) => void;
47
53
  }
@@ -54,14 +60,15 @@ export interface LoadedStreetMorphologyFST {
54
60
  /**
55
61
  * The artifact path when `source === "artifact"`.
56
62
  */
57
- path?: string;
63
+ path: PathBuilderLike | null;
58
64
  /**
59
- * Build provenance — read from the artifact trailer, or carried fresh off the fallback build.
65
+ * Build provenance, read from the artifact trailer or copied from the fallback build.
60
66
  */
61
- provenance?: FSTProvenance;
67
+ provenance: FSTProvenance | null;
62
68
  }
63
69
  /**
64
- * Load the street-morphology matcher: sealed artifact first, per-process dictionary build as the degrade path.
70
+ * Load the street-morphology matcher: sealed artifact first, per-process
71
+ * dictionary build as the degrade path.
65
72
  */
66
73
  export declare function loadStreetMorphologyFST(opts?: LoadStreetMorphologyFSTOpts): Promise<LoadedStreetMorphologyFST>;
67
74
  //# sourceMappingURL=loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../../lib/street/morphology/fst/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAE9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAG/C;;GAEG;AACH,eAAO,MAAM,mCAAmC,8BAA8B,CAAA;AAE9E;;GAEG;AACH,wBAAgB,mCAAmC,IAAI,MAAM,CAE5D;AAED,MAAM,WAAW,2BAA2B;IAC3C;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAClC;AAED,MAAM,WAAW,yBAAyB;IACzC,OAAO,EAAE,UAAU,CAAA;IACnB;;OAEG;IACH,MAAM,EAAE,UAAU,GAAG,OAAO,CAAA;IAC5B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,UAAU,CAAC,EAAE,aAAa,CAAA;CAC1B;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC5C,IAAI,GAAE,2BAAgC,GACpC,OAAO,CAAC,yBAAyB,CAAC,CAuBpC"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../../lib/street/morphology/fst/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAE3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAE9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAI/C;;;GAGG;AACH,eAAO,MAAM,mCAAmC,8BAA8B,CAAA;AAE9E;;GAEG;AACH,wBAAgB,mCAAmC,IAAI,WAAW,CAEjE;AAED,MAAM,WAAW,2BAA2B;IAC3C;;;;;OAKG;IACH,YAAY,CAAC,EAAE,eAAe,CAAA;IAC9B;;;;OAIG;IACH,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAClC;AAED,MAAM,WAAW,yBAAyB;IACzC,OAAO,EAAE,UAAU,CAAA;IACnB;;OAEG;IACH,MAAM,EAAE,UAAU,GAAG,OAAO,CAAA;IAC5B;;OAEG;IACH,IAAI,EAAE,eAAe,GAAG,IAAI,CAAA;IAC5B;;OAEG;IACH,UAAU,EAAE,aAAa,GAAG,IAAI,CAAA;CAChC;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC5C,IAAI,GAAE,2BAAgC,GACpC,OAAO,CAAC,yBAAyB,CAAC,CAuBpC"}
@@ -3,40 +3,41 @@
3
3
  * @license AGPL-3.0
4
4
  * @author Teffen Ellis, et al.
5
5
  *
6
- * Unified runtime loader for the street-morphology FST — the #1315 street-context check's signal
7
- * source, previously rebuilt from the libpostal dictionaries per process at three duplicate call
8
- * sites (runtime pipeline / parity eval / neural harness). The sealed artifact
9
- * (`fst-street-morphology.bin`, built by `mailwoman gazetteer build street-morphology`) replaces
10
- * those per-process builds; this loader is the ONE resolution ladder every node call site shares:
6
+ * Runtime loader for the street-morphology FST. The sealed artifact
7
+ * (`fst-street-morphology.bin`, built by `mailwoman gazetteer build street-morphology`) is the one
8
+ * resolution ladder every node call site shares.
11
9
  *
12
- * 1. An explicit `artifactPath` (e.g. the weights-package sibling surfaced by
13
- * `NeuralAddressClassifier.streetMorphologyPath`). When given, it is the only artifact probed.
14
- * 2. Otherwise the staged sealed artifact at `$MAILWOMAN_DATA_ROOT/wof/fst-street-morphology.bin`.
15
- * 3. Build-from-dictionaries fallback: `buildStreetMorphologyFST` over core's bundled libpostal
16
- * `street_types.txt` files — the pre-artifact behavior, kept so a missing artifact degrades to
17
- * a per-process build rather than a crash.
10
+ * 1. An explicit `artifactPath`, e.g. the weights-package sibling surfaced by
11
+ * `NeuralAddressClassifier.streetMorphologyPath`. When given, it is the only artifact probed.
12
+ * 2. Otherwise the staged sealed artifact at `$MAILWOMAN_DATA_ROOT/db/wof/fst-street-morphology.bin`.
13
+ * 3. A build-from-dictionaries fallback: `buildStreetMorphologyFST` over core's bundled libpostal
14
+ * `street_types.txt` files, kept so a missing artifact degrades to a per-process build instead
15
+ * of a crash.
18
16
  *
19
17
  * A present-but-unreadable artifact reports through `onWarn` and falls through to the build rung.
20
- * Browsers can't take the fallback (no fs) — they deserialize the same artifact via
21
- * `fst-deserialize-web.ts` (see the docs demo loader).
18
+ * Browsers cannot take the fallback because they have no filesystem API. They deserialize the same
19
+ * artifact through `fst-deserialize-web.ts` (see the docs demo loader).
22
20
  */
23
- import { dataRootPath } from "@mailwoman/core/data-root";
24
- import { pathExists, readLocalBuffer } from "@mailwoman/core/fs/readers";
21
+ import { readLocalBuffer } from "@mailwoman/core/fs/readers";
22
+ import { pathExists } from "@mailwoman/core/fs/readers/stat";
25
23
  import { resourceDictionaryPath } from "@mailwoman/core/paths";
26
24
  import { deserializeFST, readFSTProvenance } from "#fst/serialize";
25
+ import { wofDatabasePath } from "#paths";
27
26
  import { buildStreetMorphologyFST } from "#street/morphology/fst/builder";
28
27
  /**
29
- * The sealed artifact's canonical filename — identical in the data-root staging dir and as a weights-package sibling.
28
+ * The sealed artifact's canonical filename, identical in the data-root staging dir
29
+ * and as a weights-package sibling.
30
30
  */
31
31
  export const STREET_MORPHOLOGY_ARTIFACT_FILENAME = "fst-street-morphology.bin";
32
32
  /**
33
- * The staged artifact's default location: `$MAILWOMAN_DATA_ROOT/wof/fst-street-morphology.bin`.
33
+ * The staged artifact's default location: `$MAILWOMAN_DATA_ROOT/db/wof/fst-street-morphology.bin`.
34
34
  */
35
35
  export function defaultStreetMorphologyArtifactPath() {
36
- return String(dataRootPath("wof", STREET_MORPHOLOGY_ARTIFACT_FILENAME));
36
+ return wofDatabasePath(STREET_MORPHOLOGY_ARTIFACT_FILENAME);
37
37
  }
38
38
  /**
39
- * Load the street-morphology matcher: sealed artifact first, per-process dictionary build as the degrade path.
39
+ * Load the street-morphology matcher: sealed artifact first, per-process
40
+ * dictionary build as the degrade path.
40
41
  */
41
42
  export async function loadStreetMorphologyFST(opts = {}) {
42
43
  const warn = opts.onWarn ?? (() => { });
@@ -46,15 +47,15 @@ export async function loadStreetMorphologyFST(opts = {}) {
46
47
  const buf = await readLocalBuffer(artifactPath);
47
48
  const matcher = deserializeFST(buf);
48
49
  const provenance = readFSTProvenance(buf);
49
- return { matcher, source: "artifact", path: artifactPath, ...(provenance ? { provenance } : {}) };
50
+ return { matcher, source: "artifact", path: artifactPath, provenance };
50
51
  }
51
52
  catch (error) {
52
53
  warn(`street-morphology artifact at ${artifactPath} unreadable (${error.message}) — falling back to the dictionary build`);
53
54
  }
54
55
  }
55
56
  const built = await buildStreetMorphologyFST({
56
- dictionariesDir: opts.dictionariesDir ?? resourceDictionaryPath("libpostal"),
57
+ dictionariesDir: (opts.dictionariesDir ?? resourceDictionaryPath("libpostal")).toString(),
57
58
  });
58
- return { matcher: built.matcher, source: "built", provenance: built.provenance };
59
+ return { matcher: built.matcher, source: "built", path: null, provenance: built.provenance };
59
60
  }
60
61
  //# sourceMappingURL=loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../../lib/street/morphology/fst/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAG9D,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAElE,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAA;AAEzE;;GAEG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAG,2BAA2B,CAAA;AAE9E;;GAEG;AACH,MAAM,UAAU,mCAAmC;IAClD,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,mCAAmC,CAAC,CAAC,CAAA;AACxE,CAAC;AAkCD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC5C,IAAI,GAAgC,EAAE;IAEtC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IACtC,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,mCAAmC,EAAE,CAAA;IAE/E,IAAI,MAAM,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,YAAY,CAAC,CAAA;YAC/C,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAA;YACnC,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;YAEzC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;QAClG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CACH,iCAAiC,YAAY,gBAAiB,KAAe,CAAC,OAAO,0CAA0C,CAC/H,CAAA;QACF,CAAC;IACF,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,wBAAwB,CAAC;QAC5C,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,sBAAsB,CAAC,WAAW,CAAC;KAC5E,CAAC,CAAA;IAEF,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAA;AACjF,CAAC"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../../lib/street/morphology/fst/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAI9D,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAElE,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AACxC,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAA;AAEzE;;;GAGG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAG,2BAA2B,CAAA;AAE9E;;GAEG;AACH,MAAM,UAAU,mCAAmC;IAClD,OAAO,eAAe,CAAC,mCAAmC,CAAC,CAAA;AAC5D,CAAC;AAwCD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC5C,IAAI,GAAgC,EAAE;IAEtC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IACtC,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,mCAAmC,EAAE,CAAA;IAE/E,IAAI,MAAM,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,YAAY,CAAC,CAAA;YAC/C,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAA;YACnC,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;YAEzC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAA;QACvE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CACH,iCAAiC,YAAY,gBAAiB,KAAe,CAAC,OAAO,0CAA0C,CAC/H,CAAA;QACF,CAAC;IACF,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,wBAAwB,CAAC;QAC5C,eAAe,EAAE,CAAC,IAAI,CAAC,eAAe,IAAI,sBAAsB,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE;KACzF,CAAC,CAAA;IAEF,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAA;AAC7F,CAAC"}
@@ -3,41 +3,47 @@
3
3
  * @license AGPL-3.0
4
4
  * @author Teffen Ellis, et al.
5
5
  *
6
- * #727 stage-2 phase 4c — the SQLite backend for {@link StreetLocalityEvidence}.
6
+ * The SQLite backend for {@link StreetLocalityEvidence}.
7
7
  *
8
- * Reads a street-name index (the FR instance = BAN `street-centroids-fr.db`, a `street_centroid`
8
+ * Reads a street-name index (the FR instance is BAN `street-centroids-fr.db`, a `street_centroid`
9
9
  * table of `street_norm × locality_base × postcode` rows) and answers "does this street surface
10
- * exist as a name" for the k-best rerank. Sync-by-interface, `readOnly`, prepared statements,
11
- * graceful-degrade on a tableless extract — the same reader discipline as `AddressPointSqliteLookup`.
10
+ * exist as a name" for the k-best rerank. It is sync-by-interface and read-only, uses prepared
11
+ * statements. It also degrades gracefully on a tableless extract, following the same reader discipline as
12
+ * `AddressPointSqliteLookup`.
12
13
  *
13
- * THE FOLD CONTRACT: the surface is folded with {@link foldStreetSurface} (the shared function),
14
- * and the DB's `street_norm` column MUST have been built with that SAME fold or every hyphenated /
15
- * apostrophe'd street silently misses. The current `street-centroids-fr.db` predates the contract
16
- * fold (it folded without hyphen/apostrophe normalization); it must be REBUILT with
17
- * `foldStreetSurface` + a `street_norm` index before this backend is wired in production. Until
18
- * then this class is correct-by-construction against a fixture built with the contract fold, and
19
- * the production rebuild is a tracked BAN-sdk follow-up.
14
+ * The fold interface: the surface is folded with {@link foldStreetSurface} (the shared function),
15
+ * so the DB's `street_norm` column must have been built with that same fold or every hyphenated
16
+ * or apostrophe'd street silently misses. The column also needs a `street_norm` index before this
17
+ * backend is wired in production.
20
18
  */
21
19
  import { type StreetEvidenceScope, type StreetLocalityEvidence } from "@mailwoman/resolver";
20
+ import { SQLiteLookup } from "@mailwoman/sqlite/lookup";
21
+ import type { PathBuilderLike } from "path-ts";
22
+ import type { WOFDatabase } from "#schema";
22
23
  export interface SQLiteStreetNameLookupOpts {
23
24
  /**
24
- * ISO-2 (upper-case) countries this index answers for. Default `["FR"]` (the BAN street-centroids instance).
25
+ * ISO-2 (upper-case) countries this index answers for.
26
+ *
27
+ * @defaultValue `["FR"]` (the BAN street-centroids instance).
25
28
  */
26
29
  countries?: Iterable<string>;
27
30
  /**
28
- * Table name. Default `street_centroid`.
31
+ * Table name.
32
+ *
33
+ * @defaultValue `street_centroid`
29
34
  */
30
35
  table?: string;
31
36
  }
32
37
  /**
33
- * A {@link StreetLocalityEvidence} backed by a street-name SQLite index. Positive evidence only: any doubt (missing
34
- * table, read miss) returns `false`, so the rerank fails open to the model's ranking.
38
+ * A {@link StreetLocalityEvidence} backed by a street-name SQLite index.
39
+ *
40
+ * Positive evidence only: any doubt (missing table, read miss) returns `false`,
41
+ * so the rerank fails open to the model's ranking.
35
42
  */
36
- export declare class SQLiteStreetNameLookup implements StreetLocalityEvidence, Disposable {
43
+ export declare class SQLiteStreetNameLookup extends SQLiteLookup<WOFDatabase> implements StreetLocalityEvidence {
37
44
  #private;
38
45
  readonly countries: ReadonlySet<string>;
39
- constructor(dbPath: string, opts?: SQLiteStreetNameLookupOpts);
46
+ constructor(dbPath: PathBuilderLike, opts?: SQLiteStreetNameLookupOpts);
40
47
  hasStreetName(streetSurface: string, scope?: StreetEvidenceScope): boolean;
41
- [Symbol.dispose](): void;
42
48
  }
43
49
  //# sourceMappingURL=name-lookup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"name-lookup.d.ts","sourceRoot":"","sources":["../../lib/street/name-lookup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAqB,KAAK,mBAAmB,EAAE,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAM9G,MAAM,WAAW,0BAA0B;IAC1C;;OAEG;IACH,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC5B;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;GAGG;AACH,qBAAa,sBAAuB,YAAW,sBAAsB,EAAE,UAAU;;IAChF,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAMvC,YAAY,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,0BAA+B,EAmBhE;IAED,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAqBzE;IAED,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAEvB;CACD"}
1
+ {"version":3,"file":"name-lookup.d.ts","sourceRoot":"","sources":["../../lib/street/name-lookup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAqB,KAAK,mBAAmB,EAAE,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAE9G,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAE9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAG1C,MAAM,WAAW,0BAA0B;IAC1C;;;;OAIG;IACH,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC5B;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;;;GAKG;AACH,qBAAa,sBAAuB,SAAQ,YAAY,CAAC,WAAW,CAAE,YAAW,sBAAsB;;IACtG,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAKvC,YAAY,MAAM,EAAE,eAAe,EAAE,IAAI,GAAE,0BAA+B,EAyBzE;IAED,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAkBzE;CACD"}
@@ -3,47 +3,50 @@
3
3
  * @license AGPL-3.0
4
4
  * @author Teffen Ellis, et al.
5
5
  *
6
- * #727 stage-2 phase 4c — the SQLite backend for {@link StreetLocalityEvidence}.
6
+ * The SQLite backend for {@link StreetLocalityEvidence}.
7
7
  *
8
- * Reads a street-name index (the FR instance = BAN `street-centroids-fr.db`, a `street_centroid`
8
+ * Reads a street-name index (the FR instance is BAN `street-centroids-fr.db`, a `street_centroid`
9
9
  * table of `street_norm × locality_base × postcode` rows) and answers "does this street surface
10
- * exist as a name" for the k-best rerank. Sync-by-interface, `readOnly`, prepared statements,
11
- * graceful-degrade on a tableless extract — the same reader discipline as `AddressPointSqliteLookup`.
10
+ * exist as a name" for the k-best rerank. It is sync-by-interface and read-only, uses prepared
11
+ * statements. It also degrades gracefully on a tableless extract, following the same reader discipline as
12
+ * `AddressPointSqliteLookup`.
12
13
  *
13
- * THE FOLD CONTRACT: the surface is folded with {@link foldStreetSurface} (the shared function),
14
- * and the DB's `street_norm` column MUST have been built with that SAME fold or every hyphenated /
15
- * apostrophe'd street silently misses. The current `street-centroids-fr.db` predates the contract
16
- * fold (it folded without hyphen/apostrophe normalization); it must be REBUILT with
17
- * `foldStreetSurface` + a `street_norm` index before this backend is wired in production. Until
18
- * then this class is correct-by-construction against a fixture built with the contract fold, and
19
- * the production rebuild is a tracked BAN-sdk follow-up.
14
+ * The fold interface: the surface is folded with {@link foldStreetSurface} (the shared function),
15
+ * so the DB's `street_norm` column must have been built with that same fold or every hyphenated
16
+ * or apostrophe'd street silently misses. The column also needs a `street_norm` index before this
17
+ * backend is wired in production.
20
18
  */
21
19
  import { foldStreetSurface } from "@mailwoman/resolver";
22
- import { DatabaseClient } from "@mailwoman/sqlite/client";
20
+ import { SQLiteLookup } from "@mailwoman/sqlite/lookup";
23
21
  import { hasColumn, hasTable } from "#sqlite-utils";
24
22
  /**
25
- * A {@link StreetLocalityEvidence} backed by a street-name SQLite index. Positive evidence only: any doubt (missing
26
- * table, read miss) returns `false`, so the rerank fails open to the model's ranking.
23
+ * A {@link StreetLocalityEvidence} backed by a street-name SQLite index.
24
+ *
25
+ * Positive evidence only: any doubt (missing table, read miss) returns `false`,
26
+ * so the rerank fails open to the model's ranking.
27
27
  */
28
- export class SQLiteStreetNameLookup {
28
+ export class SQLiteStreetNameLookup extends SQLiteLookup {
29
29
  countries;
30
- #db;
31
30
  #byName;
32
31
  #byNameLocality;
33
32
  #byNamePostcode;
34
33
  constructor(dbPath, opts = {}) {
34
+ super({ databasePath: dbPath });
35
35
  this.countries = new Set([...(opts.countries ?? ["FR"])].map((c) => c.toUpperCase()));
36
- this.#db = new DatabaseClient(dbPath, { readOnly: true });
37
36
  const table = opts.table ?? "street_centroid";
38
- // Degrade gracefully on an empty/tableless extract — a no-op miss, never a crash (#568 discipline).
39
- if (hasTable(this.#db, table)) {
40
- // Prefer the #727 phase-4c `name_key` column (foldStreetSurface, indexed by `idx_sc_name` for a direct seek);
41
- // fall back to `street_norm` on a pre-rebuild extract (a skip-scan, but correct). The fold used to build
42
- // `name_key` MUST match `foldStreetSurface` here (the fold-parity contract).
43
- const keyCol = hasColumn(this.#db, table, "name_key") ? "name_key" : "street_norm";
44
- this.#byName = this.#db.prepare(`SELECT 1 FROM ${table} WHERE ${keyCol} = ? LIMIT 1`);
45
- this.#byNameLocality = this.#db.prepare(`SELECT 1 FROM ${table} WHERE ${keyCol} = ? AND locality_base = ? LIMIT 1`);
46
- this.#byNamePostcode = this.#db.prepare(`SELECT 1 FROM ${table} WHERE ${keyCol} = ? AND postcode = ? LIMIT 1`);
37
+ // Degrade gracefully on an empty or tableless extract.
38
+ // A no-op miss, never a crash.
39
+ if (hasTable(this.database, table)) {
40
+ // Prefer the `name_key` column (built with `foldStreetSurface`
41
+ // and indexed by `idx_sc_name` for a direct seek).
42
+ // On a pre-rebuild extract, `street_norm` is a correct fallback.
43
+ // It uses a skip-scan.
44
+ // The fold that built `name_key` must match `foldStreetSurface` here.
45
+ // This is the fold-parity interface.
46
+ const keyCol = hasColumn(this.database, table, "name_key") ? "name_key" : "street_norm";
47
+ this.#byName = this.database.prepare(`SELECT 1 FROM ${table} WHERE ${keyCol} = ? LIMIT 1`);
48
+ this.#byNameLocality = this.database.prepare(`SELECT 1 FROM ${table} WHERE ${keyCol} = ? AND locality_base = ? LIMIT 1`);
49
+ this.#byNamePostcode = this.database.prepare(`SELECT 1 FROM ${table} WHERE ${keyCol} = ? AND postcode = ? LIMIT 1`);
47
50
  }
48
51
  }
49
52
  hasStreetName(streetSurface, scope) {
@@ -52,20 +55,16 @@ export class SQLiteStreetNameLookup {
52
55
  const norm = foldStreetSurface(streetSurface);
53
56
  if (!norm)
54
57
  return false;
55
- // Scoped lookups tighten precision when the hypothesis carries a locality/postcode; a scoped MISS falls back to the
56
- // unscoped probe (index incompleteness in the scope column is not evidence of absence — positive-evidence rule).
57
- if (scope?.locality &&
58
- this.#byNameLocality &&
59
- this.#byNameLocality.get(norm, foldStreetSurface(scope.locality)) !== undefined) {
58
+ // Scoped lookups tighten precision when the hypothesis includes a locality/postcode.
59
+ // A scoped miss falls back to the unscoped probe.
60
+ // The scope column may be incomplete, so a miss there does not establish absence.
61
+ if (scope?.locality && this.#byNameLocality && this.#byNameLocality.get(norm, foldStreetSurface(scope.locality))) {
60
62
  return true;
61
63
  }
62
- if (scope?.postcode && this.#byNamePostcode && this.#byNamePostcode.get(norm, scope.postcode) !== undefined) {
64
+ if (scope?.postcode && this.#byNamePostcode && this.#byNamePostcode.get(norm, scope.postcode)) {
63
65
  return true;
64
66
  }
65
67
  return this.#byName.get(norm) !== undefined;
66
68
  }
67
- [Symbol.dispose]() {
68
- this.#db[Symbol.dispose]();
69
- }
70
69
  }
71
70
  //# sourceMappingURL=name-lookup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"name-lookup.js","sourceRoot":"","sources":["../../lib/street/name-lookup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,iBAAiB,EAAyD,MAAM,qBAAqB,CAAA;AAC9G,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAGzD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAanD;;;GAGG;AACH,MAAM,OAAO,sBAAsB;IACzB,SAAS,CAAqB;IAC9B,GAAG,CAA6B;IAChC,OAAO,CAAmD;IAC1D,eAAe,CAAmD;IAClE,eAAe,CAAmD;IAE3E,YAAY,MAAc,EAAE,IAAI,GAA+B,EAAE;QAChE,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;QACrF,IAAI,CAAC,GAAG,GAAG,IAAI,cAAc,CAAc,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;QACtE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,iBAAiB,CAAA;QAE7C,oGAAoG;QACpG,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;YAC/B,8GAA8G;YAC9G,yGAAyG;YACzG,6EAA6E;YAC7E,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAA;YAClF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,KAAK,UAAU,MAAM,cAAc,CAAC,CAAA;YAErF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CACtC,iBAAiB,KAAK,UAAU,MAAM,oCAAoC,CAC1E,CAAA;YAED,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,KAAK,UAAU,MAAM,+BAA+B,CAAC,CAAA;QAC/G,CAAC;IACF,CAAC;IAED,aAAa,CAAC,aAAqB,EAAE,KAA2B;QAC/D,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAA;QAC/B,MAAM,IAAI,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAA;QAE7C,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAA;QAEvB,oHAAoH;QACpH,iHAAiH;QACjH,IACC,KAAK,EAAE,QAAQ;YACf,IAAI,CAAC,eAAe;YACpB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,SAAS,EAC9E,CAAC;YACF,OAAO,IAAI,CAAA;QACZ,CAAC;QAED,IAAI,KAAK,EAAE,QAAQ,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE,CAAC;YAC7G,OAAO,IAAI,CAAA;QACZ,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS,CAAA;IAC5C,CAAC;IAED,CAAC,MAAM,CAAC,OAAO,CAAC;QACf,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAA;IAC3B,CAAC;CACD"}
1
+ {"version":3,"file":"name-lookup.js","sourceRoot":"","sources":["../../lib/street/name-lookup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,iBAAiB,EAAyD,MAAM,qBAAqB,CAAA;AAE9G,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAIvD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAiBnD;;;;;GAKG;AACH,MAAM,OAAO,sBAAuB,SAAQ,YAAyB;IAC3D,SAAS,CAAqB;IAC9B,OAAO,CAAmD;IAC1D,eAAe,CAAmD;IAClE,eAAe,CAAmD;IAE3E,YAAY,MAAuB,EAAE,IAAI,GAA+B,EAAE;QACzE,KAAK,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAA;QAC/B,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;QACrF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,iBAAiB,CAAA;QAE7C,uDAAuD;QACvD,+BAA+B;QAC/B,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;YACpC,+DAA+D;YAC/D,mDAAmD;YACnD,iEAAiE;YACjE,uBAAuB;YACvB,sEAAsE;YACtE,qCAAqC;YACrC,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAA;YACvF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,KAAK,UAAU,MAAM,cAAc,CAAC,CAAA;YAE1F,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAC3C,iBAAiB,KAAK,UAAU,MAAM,oCAAoC,CAC1E,CAAA;YAED,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAC3C,iBAAiB,KAAK,UAAU,MAAM,+BAA+B,CACrE,CAAA;QACF,CAAC;IACF,CAAC;IAED,aAAa,CAAC,aAAqB,EAAE,KAA2B;QAC/D,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAA;QAC/B,MAAM,IAAI,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAA;QAE7C,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAA;QAEvB,qFAAqF;QACrF,kDAAkD;QAClD,kFAAkF;QAClF,IAAI,KAAK,EAAE,QAAQ,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YAClH,OAAO,IAAI,CAAA;QACZ,CAAC;QAED,IAAI,KAAK,EAAE,QAAQ,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/F,OAAO,IAAI,CAAA;QACZ,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS,CAAA;IAC5C,CAAC;CACD"}