@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
package/out/paths.d.ts ADDED
@@ -0,0 +1,124 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ *
6
+ * Where the databases this resolver reads live under the data root's `db/` group.
7
+ *
8
+ * Each constant is a lazy path builder: it reads `$MAILWOMAN_DATA_ROOT` when a path is requested,
9
+ * so a later environment change or a test stub is honored.
10
+ * Call it with a filename, as in `wofDatabasePath("admin-global-priority.db")`.
11
+ * A caller holding another data root uses the matching `…DatabaseRoot(dataRoot)` function.
12
+ */
13
+ import type { PathBuilder, PathBuilderLike } from "path-ts";
14
+ /**
15
+ * `<dataRoot>/db/wof`, which holds the admin, candidate and postcode databases.
16
+ */
17
+ export declare function wofDatabaseRoot(dataRoot: PathBuilderLike): PathBuilder;
18
+ /**
19
+ * `$MAILWOMAN_DATA_ROOT/db/wof`.
20
+ *
21
+ * @see {@link wofDatabaseRoot} for another data root.
22
+ */
23
+ export declare const wofDatabasePath: PathBuilder;
24
+ /**
25
+ * `<dataRoot>/db/address-points`, which holds the national rooftop address-point databases.
26
+ */
27
+ export declare function addressPointDatabaseRoot(dataRoot: PathBuilderLike): PathBuilder;
28
+ /**
29
+ * `$MAILWOMAN_DATA_ROOT/db/address-points`.
30
+ */
31
+ export declare const addressPointDatabasePath: PathBuilder;
32
+ /**
33
+ * `<dataRoot>/db/interpolation`, which holds the street-segment interpolation databases.
34
+ */
35
+ export declare function interpolationDatabaseRoot(dataRoot: PathBuilderLike): PathBuilder;
36
+ /**
37
+ * `$MAILWOMAN_DATA_ROOT/db/interpolation`.
38
+ */
39
+ export declare const interpolationDatabasePath: PathBuilder;
40
+ /**
41
+ * `<dataRoot>/db/poi`, which holds `poi.db` and its per-source builds.
42
+ */
43
+ export declare function poiDatabaseRoot(dataRoot: PathBuilderLike): PathBuilder;
44
+ /**
45
+ * `$MAILWOMAN_DATA_ROOT/db/poi`.
46
+ */
47
+ export declare const poiDatabasePath: PathBuilder;
48
+ /**
49
+ * `$MAILWOMAN_DATA_ROOT/db/uprn`, which holds the UPRN point database.
50
+ */
51
+ export declare const uprnDatabasePath: PathBuilder;
52
+ /**
53
+ * `$MAILWOMAN_DATA_ROOT/db/nsul`, which holds the NSUL postcode layer and its source vintages.
54
+ */
55
+ export declare const nsulDatabasePath: PathBuilder;
56
+ /**
57
+ * Default WOF extracts for FTS when `--wof-db` is not provided.
58
+ *
59
+ * Includes the global admin-priority extract plus postcode extracts.
60
+ * The routing in `pickExtractForPlacetype` sends each postcode query to the
61
+ * extract that claims that country.
62
+ *
63
+ * All paths are under `dataRoot`.
64
+ * It defaults to `$MAILWOMAN_DATA_ROOT`, and callers may pass `--data-root`.
65
+ * Returns a fresh array each call.
66
+ *
67
+ * Callers usually filter with `existsSync`, so missing files are skipped.
68
+ *
69
+ * This runtime list is intentionally smaller than `DEFAULT_POSTCODE_DATABASES`
70
+ * (`mailwoman/gazetteer-pipeline/index.ts`), because these databases are attached live at boot.
71
+ *
72
+ * Notes:
73
+ * - `postalcode-geonames-tail.db` now contains FI/CZ/SK/SI/DK/no/HR/PL/SE.
74
+ * - `postalcode-ni-osm.db` is build-local (ODbL, OSM `addr:postcode`) and may be absent.
75
+ * A missing file is filtered out.
76
+ * This is the only GB-claiming extract in the list.
77
+ * Code-Point Open is absent.
78
+ */
79
+ export declare function wofExtractPaths(dataRoot?: PathBuilderLike): string[];
80
+ /**
81
+ * The extract set {@link wofExtractPaths} lists, keyed by role so a caller can
82
+ * name one without indexing a tuple.
83
+ */
84
+ export interface WOFExtractPaths {
85
+ /**
86
+ * The global admin-priority extract, where every admin lookup starts.
87
+ */
88
+ adminGlobalPriority: string;
89
+ /**
90
+ * US ZIP codes.
91
+ */
92
+ postalcodeUS: string;
93
+ /**
94
+ * The nine-country namesake set FI/CZ/SK/SI/DK/no/HR/PL/SE (see {@link wofExtractPaths}).
95
+ */
96
+ postalcodeGeonamesTail: string;
97
+ /**
98
+ * The international postcode extract (FR/DE/ES/IT/NL and the other countries
99
+ * routed here by `pickExtractForPlacetype`).
100
+ */
101
+ postalcodeIntl: string;
102
+ /**
103
+ * The NL PC6 full-postcode extract from CBS via pdok (`scripts/build-postalcode-nl-pc6.ts`), the
104
+ * data the lookup's NL PC6 ladder (`"1012 LG"` → joined `"1012LG"` → 4-digit stem) resolves against.
105
+ */
106
+ postalcodeNLPC6: string;
107
+ /**
108
+ * Northern Ireland (BT) from OpenStreetMap, 4,757 of 50,032 live NI postcodes (9.5 %).
109
+ *
110
+ * It is the only coverage for the hole Code-Point Open leaves.
111
+ *
112
+ * ODbL, build-local, 2.5 MB.
113
+ * A miss on a BT code means not attested in OSM.
114
+ *
115
+ * An unknown postcode abstains, so the extract is strictly additive.
116
+ * Rebuild: `mailwoman gazetteer build postcode-ni-osm`.
117
+ */
118
+ postalcodeNIOSM: string;
119
+ }
120
+ /**
121
+ * {@link wofExtractPaths} as a record keyed by source, in the same order the runtime attaches them.
122
+ */
123
+ export declare function wofExtractPathsByName(dataRoot?: PathBuilderLike): WOFExtractPaths;
124
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../lib/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAE3D;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,eAAe,GAAG,WAAW,CAEtE;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,WAA6C,CAAA;AAE3E;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,eAAe,GAAG,WAAW,CAE/E;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,WAAsD,CAAA;AAE7F;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,eAAe,GAAG,WAAW,CAEhF;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,WAAuD,CAAA;AAE/F;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,eAAe,GAAG,WAAW,CAEtE;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,WAA6C,CAAA;AAE3E;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,WAAsD,CAAA;AAErF;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,WAAsD,CAAA;AAErF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,eAAe,CAAC,QAAQ,GAAE,eAAgC,GAAG,MAAM,EAAE,CAEpF;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC/B;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAA;IAC3B;;OAEG;IACH,YAAY,EAAE,MAAM,CAAA;IACpB;;OAEG;IACH,sBAAsB,EAAE,MAAM,CAAA;IAC9B;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAA;IACtB;;;OAGG;IACH,eAAe,EAAE,MAAM,CAAA;IACvB;;;;;;;;;;OAUG;IACH,eAAe,EAAE,MAAM,CAAA;CACvB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,GAAE,eAAgC,GAAG,eAAe,CAWjG"}
package/out/paths.js ADDED
@@ -0,0 +1,104 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ *
6
+ * Where the databases this resolver reads live under the data root's `db/` group.
7
+ *
8
+ * Each constant is a lazy path builder: it reads `$MAILWOMAN_DATA_ROOT` when a path is requested,
9
+ * so a later environment change or a test stub is honored.
10
+ * Call it with a filename, as in `wofDatabasePath("admin-global-priority.db")`.
11
+ * A caller holding another data root uses the matching `…DatabaseRoot(dataRoot)` function.
12
+ */
13
+ import { databaseRootPath, dataRootPath } from "@mailwoman/core/data-root";
14
+ /**
15
+ * `<dataRoot>/db/wof`, which holds the admin, candidate and postcode databases.
16
+ */
17
+ export function wofDatabaseRoot(dataRoot) {
18
+ return databaseRootPath(dataRoot)("wof");
19
+ }
20
+ /**
21
+ * `$MAILWOMAN_DATA_ROOT/db/wof`.
22
+ *
23
+ * @see {@link wofDatabaseRoot} for another data root.
24
+ */
25
+ export const wofDatabasePath = wofDatabaseRoot(dataRootPath());
26
+ /**
27
+ * `<dataRoot>/db/address-points`, which holds the national rooftop address-point databases.
28
+ */
29
+ export function addressPointDatabaseRoot(dataRoot) {
30
+ return databaseRootPath(dataRoot)("address-points");
31
+ }
32
+ /**
33
+ * `$MAILWOMAN_DATA_ROOT/db/address-points`.
34
+ */
35
+ export const addressPointDatabasePath = addressPointDatabaseRoot(dataRootPath());
36
+ /**
37
+ * `<dataRoot>/db/interpolation`, which holds the street-segment interpolation databases.
38
+ */
39
+ export function interpolationDatabaseRoot(dataRoot) {
40
+ return databaseRootPath(dataRoot)("interpolation");
41
+ }
42
+ /**
43
+ * `$MAILWOMAN_DATA_ROOT/db/interpolation`.
44
+ */
45
+ export const interpolationDatabasePath = interpolationDatabaseRoot(dataRootPath());
46
+ /**
47
+ * `<dataRoot>/db/poi`, which holds `poi.db` and its per-source builds.
48
+ */
49
+ export function poiDatabaseRoot(dataRoot) {
50
+ return databaseRootPath(dataRoot)("poi");
51
+ }
52
+ /**
53
+ * `$MAILWOMAN_DATA_ROOT/db/poi`.
54
+ */
55
+ export const poiDatabasePath = poiDatabaseRoot(dataRootPath());
56
+ /**
57
+ * `$MAILWOMAN_DATA_ROOT/db/uprn`, which holds the UPRN point database.
58
+ */
59
+ export const uprnDatabasePath = databaseRootPath(dataRootPath())("uprn");
60
+ /**
61
+ * `$MAILWOMAN_DATA_ROOT/db/nsul`, which holds the NSUL postcode layer and its source vintages.
62
+ */
63
+ export const nsulDatabasePath = databaseRootPath(dataRootPath())("nsul");
64
+ /**
65
+ * Default WOF extracts for FTS when `--wof-db` is not provided.
66
+ *
67
+ * Includes the global admin-priority extract plus postcode extracts.
68
+ * The routing in `pickExtractForPlacetype` sends each postcode query to the
69
+ * extract that claims that country.
70
+ *
71
+ * All paths are under `dataRoot`.
72
+ * It defaults to `$MAILWOMAN_DATA_ROOT`, and callers may pass `--data-root`.
73
+ * Returns a fresh array each call.
74
+ *
75
+ * Callers usually filter with `existsSync`, so missing files are skipped.
76
+ *
77
+ * This runtime list is intentionally smaller than `DEFAULT_POSTCODE_DATABASES`
78
+ * (`mailwoman/gazetteer-pipeline/index.ts`), because these databases are attached live at boot.
79
+ *
80
+ * Notes:
81
+ * - `postalcode-geonames-tail.db` now contains FI/CZ/SK/SI/DK/no/HR/PL/SE.
82
+ * - `postalcode-ni-osm.db` is build-local (ODbL, OSM `addr:postcode`) and may be absent.
83
+ * A missing file is filtered out.
84
+ * This is the only GB-claiming extract in the list.
85
+ * Code-Point Open is absent.
86
+ */
87
+ export function wofExtractPaths(dataRoot = dataRootPath()) {
88
+ return Object.values(wofExtractPathsByName(dataRoot));
89
+ }
90
+ /**
91
+ * {@link wofExtractPaths} as a record keyed by source, in the same order the runtime attaches them.
92
+ */
93
+ export function wofExtractPathsByName(dataRoot = dataRootPath()) {
94
+ const wof = wofDatabaseRoot(dataRoot);
95
+ return {
96
+ adminGlobalPriority: wof("admin-global-priority.db").toString(),
97
+ postalcodeUS: wof("postalcode-us.db").toString(),
98
+ postalcodeGeonamesTail: wof("postalcode-geonames-tail.db").toString(),
99
+ postalcodeIntl: wof("postalcode-intl.db").toString(),
100
+ postalcodeNLPC6: wof("postalcode-nl-pc6.db").toString(),
101
+ postalcodeNIOSM: wof("postalcode-ni-osm.db").toString(),
102
+ };
103
+ }
104
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../lib/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAG1E;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAyB;IACxD,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAA;AACzC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAgB,eAAe,CAAC,YAAY,EAAE,CAAC,CAAA;AAE3E;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,QAAyB;IACjE,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC,gBAAgB,CAAC,CAAA;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAgB,wBAAwB,CAAC,YAAY,EAAE,CAAC,CAAA;AAE7F;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAAyB;IAClE,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,CAAA;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAgB,yBAAyB,CAAC,YAAY,EAAE,CAAC,CAAA;AAE/F;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAyB;IACxD,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAA;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAgB,eAAe,CAAC,YAAY,EAAE,CAAC,CAAA;AAE3E;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAgB,gBAAgB,CAAC,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;AAErF;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAgB,gBAAgB,CAAC,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;AAErF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,eAAe,CAAC,QAAQ,GAAoB,YAAY,EAAE;IACzE,OAAO,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAA;AACtD,CAAC;AA2CD;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAQ,GAAoB,YAAY,EAAE;IAC/E,MAAM,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;IAErC,OAAO;QACN,mBAAmB,EAAE,GAAG,CAAC,0BAA0B,CAAC,CAAC,QAAQ,EAAE;QAC/D,YAAY,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE;QAChD,sBAAsB,EAAE,GAAG,CAAC,6BAA6B,CAAC,CAAC,QAAQ,EAAE;QACrE,cAAc,EAAE,GAAG,CAAC,oBAAoB,CAAC,CAAC,QAAQ,EAAE;QACpD,eAAe,EAAE,GAAG,CAAC,sBAAsB,CAAC,CAAC,QAAQ,EAAE;QACvD,eAAe,EAAE,GAAG,CAAC,sBAAsB,CAAC,CAAC,QAAQ,EAAE;KACvD,CAAA;AACF,CAAC"}
@@ -2,196 +2,108 @@
2
2
  * @copyright Sister Software
3
3
  * @license AGPL-3.0
4
4
  * @author Teffen Ellis, et al.
5
- *
6
- * The TWO-SCORE SPLIT (ROAD_TO_V9 §2 R1) — typed schema, table builder, and the two derivations, in
7
- * one module so the read contract and the DDL cannot drift.
8
- *
9
- * THE POLICY THIS ENCODES, ratified 2026-08-06: **the importance of a knowledge-base article is not
10
- * the probability that this is the place the user means.** The geocoder ranks by REFERENTIAL
11
- * likelihood; encyclopedic importance is carried as data and is never the ranking key. So the one
12
- * `place_importance.importance` column — which was a Wikipedia score where the concordance join
13
- * landed and a population-derived pseudo-score everywhere else — becomes two named columns that can
14
- * never be confused for one another:
15
- *
16
- * - {@link PlaceImportanceTable.referential} — population-anchored, ALWAYS derivable, the ranking
17
- * backbone. {@link referentialFromPopulation} is the normalization the FST builder's population
18
- * fallback has always used; naming it here is the whole change.
19
- * - {@link PlaceImportanceTable.encyclopedic} — the fan-out-guarded Wikipedia join
20
- * (`importance-fanout.ts`, #1497). NULLABLE, and null means ABSENT, never "an importance of
21
- * zero": ~1.5 M of the 1.54 M rows in the 2026-08-05 build have no Wikipedia article at all, and
22
- * a consumer that reads a 0 there would be reading a fact nobody recorded.
23
- *
24
- * WHY SAINT-DENIS IS THE TEST. The Seine-Saint-Denis suburb (pop 96,128) carries encyclopedic
25
- * 0.1173; the Aude hamlet (pop 418) carries 0.5683 — the encyclopedic signal ranks the hamlet 4.8x
26
- * ABOVE the place every user means. Referentially the suburb wins by 230x on population. One score
27
- * cannot serve both readers, which is why there are two.
28
- *
29
- * THE LEGACY COLUMN STAYS, AND IS DERIVED. `importance` is written by {@link blendImportance} — the
30
- * bounded blend the bare-toponym fame consumer (#28) ranks on. It is the CONFLATION, and nothing new
31
- * should read it; new code reads the split columns.
32
5
  */
33
6
  import type { DatabaseClient } from "@mailwoman/sqlite/client";
34
7
  import type { Kysely } from "kysely";
35
8
  /**
36
- * One row of `place_importance`. Keyed by WOF place id.
9
+ * Describes one row of the `place_importance` table, keyed by WOF place id.
37
10
  */
38
11
  export interface PlaceImportanceTable {
39
12
  id: number;
40
13
  /**
41
- * Population-anchored referential likelihood in [0, 1] — see {@link referentialFromPopulation}. NOT NULL because it is
42
- * always derivable: a place with no population row scores 0, which here genuinely means "no population evidence", the
43
- * same state the ranking has always treated as "no boost, never a penalty".
14
+ * The population-anchored referential likelihood in [0, 1], from {@link referentialFromPopulation}.
15
+ *
16
+ * It is never NULL.
17
+ * A place without a population row scores `0`.
18
+ *
19
+ * That score represents no population evidence, so it earns no boost or penalty.
44
20
  */
45
21
  referential: number;
46
22
  /**
47
- * Fan-out-guarded Wikipedia importance in [0, 1], or NULL when this place has no surviving concordance. NULL is
48
- * ABSENCE — never coalesce it to 0 in a consumer, and never rank on it at all.
23
+ * The fan-out-guarded Wikipedia importance in [0, 1], or NULL when the place has no surviving concordance.
24
+ *
25
+ * NULL means absence, so consumers must not coalesce it to 0 or rank on it.
49
26
  */
50
27
  encyclopedic: number | null;
51
28
  /**
52
- * DEPRECATED — the pre-split conflation, written by {@link blendImportance} so the bare-toponym fame consumer (#28)
53
- * keeps one cross-bearer scale. New code reads {@link PlaceImportanceTable.referential} (to rank) or
54
- * {@link PlaceImportanceTable.encyclopedic} (to display).
29
+ * Deprecated blend of the two scores, written by {@link blendImportance} for
30
+ * consumers that still need one scale.
31
+ *
32
+ * New code ranks on `referential` and displays `encyclopedic`.
55
33
  */
56
34
  importance: number;
57
35
  }
58
36
  /**
59
- * The `place_importance` slice of a WOF admin database, for `new DatabaseClient<PlaceImportanceDatabase>(...)`.
37
+ * Types the `place_importance` table of a WOF admin database
38
+ * for `new DatabaseClient<PlaceImportanceDatabase>(...)`.
60
39
  */
61
40
  export interface PlaceImportanceDatabase {
62
41
  place_importance: PlaceImportanceTable;
63
42
  }
64
43
  /**
65
- * The columns in declaration order. The builder's INSERT derives its column list from this, so a field added to
66
- * {@link PlaceImportanceTable} without a matching DDL column is a compile error at the insert site.
44
+ * Lists the `place_importance` columns in declaration order, each checked
45
+ * against {@link PlaceImportanceTable}.
67
46
  */
68
47
  export declare const PLACE_IMPORTANCE_COLUMNS: readonly ["id", "referential", "encyclopedic", "importance"];
69
48
  /**
70
- * Create `place_importance` at the split schema. Drops any existing table first — this is a rebuild-in-place step of
71
- * `mailwoman gazetteer importance`, never a migration.
49
+ * Drops and recreates the `place_importance` table with separate referential and encyclopedic columns.
72
50
  */
73
51
  export declare function createPlaceImportanceTable(db: Kysely<PlaceImportanceDatabase>): Promise<void>;
74
52
  /**
75
- * Re-exported from `@mailwoman/core/resolver`, which is where the derivation lives so that `@mailwoman/resolver`
76
- * (backend-agnostic — it cannot import this package) reads the same number. Re-exported HERE so the schema module stays
77
- * the one-stop read for the table: the column and the function that fills it are one hop apart.
78
- */
79
- /**
80
- * The most the encyclopedic channel may raise a place's blended importance above its population-anchored referential
81
- * score.
53
+ * Caps how far the encyclopedic score may raise a place's blended importance above its referential score.
82
54
  *
83
- * In referential units 0.25 is 3.5 population doublings (the referential curve divides log2 by 14), so an article can
84
- * promote a place as if it were up to ~11x its recorded population — never more. The bound exists because the two
85
- * channels' scales CROSS at the article floor: merely having a Wikipedia article scores ~0.25–0.35, which exceeds the
86
- * referential score of a mid-size town, so an unbounded blend ranks a 136-person village with an article above a
87
- * 16,026-person town without one.
88
- *
89
- * The value is bracketed by two decided contests, measured on the 2026-08-24 staging build:
90
- *
91
- * - `> 0.2282`, or bare `Whitby` stops answering Whitby GB (pop 13,130, referential 0.2729, encyclopedic 0.5496) over
92
- * Whitby CA (pop 128,377, referential 0.5011) — the #28 design case the fame prior exists to serve.
93
- * - `< 0.2790`, or bare `Tó`/`To` answers Tó PT (pop 136, referential 0.0131, encyclopedic 0.3375) over Tô BF (pop
94
- * 16,026, no article) — the `bf-gloss-to-*` board pair.
95
- *
96
- * 0.25 sits mid-interval with ~0.02 margin to each bound.
55
+ * Merely having an article scores about 0.25 to 0.35, above a mid-size town's referential score,
56
+ * so without the cap a tiny village with an article outranks a large town without one.
97
57
  */
98
58
  export declare const ENCYCLOPEDIC_BOOST_CAP = 0.25;
99
59
  /**
100
- * The legacy `importance` blend — one cross-bearer fame scale for the #28 consumer, derived from the two split
101
- * channels:
102
- *
103
- * - No article → the referential score.
104
- * - No population evidence (`referential` 0) → the encyclopedic score stands alone: there is nothing to bound the
105
- * article's claim against, and a constant cap would demote every famous place WOF records no population for
106
- * (meaning-of-zero: referential 0 is "unmeasured", not "tiny").
107
- * - Both present → the encyclopedic value clamped to at most {@link ENCYCLOPEDIC_BOOST_CAP} above the referential score,
108
- * and never below it. The floor half repairs the downward inversion (the Seine-Saint-Denis suburb's weak article
109
- * scored 0.1173 and REPLACED its referential 0.4716 under the old `COALESCE`, so a 418-person Aude hamlet outranked
110
- * it 4.8x); the cap half repairs the upward one (`Tó`, above).
111
- *
112
- * Scale of the clamp on the 2026-08-24 staging build: of 628,202 article-bearing rows, 209,738 sit above the cap and
113
- * 13,888 sit below their referential floor; the 305,168 article-without-population rows pass through unchanged.
60
+ * Blends the two channels into the legacy `importance` column: the referential score
61
+ * when there is no article, only the encyclopedic score when population is unknown
62
+ * (`referential` 0), and otherwise the encyclopedic score clamped between the
63
+ * referential score and {@link ENCYCLOPEDIC_BOOST_CAP} above it.
114
64
  */
115
- export declare function blendImportance(referential: number, encyclopedic: number | null | undefined): number;
65
+ export declare function blendImportance(referential: number, encyclopedic: number | null): number;
116
66
  /**
117
- * Where a reader's two scores came from. Recorded into the FST stamp so an artifact says, in its own provenance,
118
- * whether its encyclopedic channel is real, reconstructed, or absent.
67
+ * Source names used by {@link loadImportanceSplit}.
68
+ * The FST stamp records these values as provenance.
119
69
  */
120
70
  export declare const IMPORTANCE_SPLIT_SOURCES: {
121
- /**
122
- * `place_importance` carries `referential` + `encyclopedic` — the post-split build.
123
- */
124
71
  readonly splitColumns: "split-columns";
125
- /**
126
- * `place_importance` carries only the conflated `importance`; the split was RECONSTRUCTED against `place_population`
127
- * (see {@link splitLegacyImportance}).
128
- */
129
72
  readonly legacyReconstructed: "legacy-reconstructed";
130
- /**
131
- * No `place_importance` at all — referential from `place_population`, encyclopedic absent for every place.
132
- */
133
73
  readonly populationOnly: "population-only";
134
- /**
135
- * Neither table. Every score is 0, and 0 here means the database carries no salience evidence whatsoever.
136
- */
137
74
  readonly none: "none";
138
75
  };
76
+ /**
77
+ * Identifies how an {@link ImportanceSplit} was obtained, as one of the
78
+ * {@link IMPORTANCE_SPLIT_SOURCES} values.
79
+ */
139
80
  export type ImportanceSplitSource = (typeof IMPORTANCE_SPLIT_SOURCES)[keyof typeof IMPORTANCE_SPLIT_SOURCES];
140
81
  /**
141
- * The `SELECT` term and `LEFT JOIN` a name lookup needs in order to CARRY `encyclopedic` onto its results, probed
142
- * against `schemaName`'s `place_importance`.
143
- *
144
- * THE PROBE IS A COLUMN, NOT A TABLE, and that is the whole reason this lives here rather than beside a caller's other
145
- * table probes. The pre-split table exists and holds a single conflated `importance` column whose value is a Wikipedia
146
- * score on some rows and a population proxy on others, with nothing in the row to say which — reading that as
147
- * encyclopedic would surface the exact confusion ROAD_TO_V9 §2 exists to end.
82
+ * Returns the `select` term and `left join` that add `encyclopedic` to name-lookup results
83
+ * for `schemaName`, degrading to `NULL` and no join when the column is absent.
148
84
  *
149
- * There is deliberately no ORDER BY counterpart, and there should never be one: §2's policy is that this score is
150
- * carried and never ranked on. Without the column the select degrades to a literal `NULL` and the join is the empty
151
- * string, so a pre-split extract's query plan is byte-identical to what it was before the split. No shipped gazetteer
152
- * carries the column yet, so today that degraded form is the only one anything builds.
153
- *
154
- * Call it ONCE per extract and cache the result — it runs a `PRAGMA`, and the callers are per-keystroke hot.
85
+ * It probes for the column rather than the table, because a pre-split table's
86
+ * `importance` mixes Wikipedia and population scores.
87
+ * Cache the result per extract, since it runs a `PRAGMA` and lookups are per keystroke.
155
88
  */
156
89
  export declare function encyclopedicClauses<DB>(db: DatabaseClient<DB>, schemaName: string): {
157
90
  select: string;
158
91
  join: string;
159
92
  };
160
93
  /**
161
- * The tolerance {@link splitLegacyImportance} treats as "this value reproduces the population curve". Eight ULP —
162
- * comfortably wider than the one-ULP `log2` spread measured between CPython and V8 (see that function's docstring), and
163
- * ~1e-15 absolute against scores Nominatim publishes to four decimals.
94
+ * Sets the relative tolerance within which {@link splitLegacyImportance} treats
95
+ * a value as lying on the population curve.
164
96
  */
165
97
  export declare const LEGACY_FALLBACK_EPSILON: number;
166
98
  /**
167
- * Split one row of a LEGACY (pre-split) `place_importance` table back into its two components.
168
- *
169
- * WHY THIS IS RECOVERABLE AT ALL. The legacy builder ran in two passes: Wikipedia scores first, then `INSERT OR IGNORE`
170
- * of `min(1, log2(1+pop/1000)/14)` for every place with a population that Wikipedia had missed. So a legacy value is a
171
- * fallback row IFF it reproduces {@link referentialFromPopulation} of that place's population — the two passes wrote
172
- * different arithmetic, and a score from Nominatim's four-decimal TSV landing on the log2 curve is a measure-zero
173
- * event.
99
+ * Splits a legacy `place_importance` value into referential and encyclopedic scores,
100
+ * treating it as a population fallback when it matches {@link referentialFromPopulation}
101
+ * within {@link LEGACY_FALLBACK_EPSILON}.
174
102
  *
175
- * THE COMPARISON IS ULP-TOLERANT, AND THAT IS NOT DEFENSIVE PADDING. The first version compared for exact bit equality,
176
- * which is correct — in the runtime that wrote the values. Cross-checking the same rule in CPython returned 166,638
177
- * encyclopedic rows against Node's 133,096: `math.log2` and V8's `Math.log2` disagree by one ULP on 33,542 of the 1.5 M
178
- * inputs (worked example: wof 85803233, population 21,299 — stored 0.31992193633838988953, CPython
179
- * 0.31992193633838994504, delta 5.55e-17). Bit equality would therefore INVENT 33,542 encyclopedic scores for anyone
180
- * who ported this rule to another runtime, and invented data is the failure mode this whole module exists to end. The
181
- * tolerance is a few ULP of the score's own magnitude; a genuine Wikipedia value that close to the population curve is
182
- * not distinguishable from it by any consequence.
183
- *
184
- * MEASURED, not reasoned (2026-08-06, `wof/fst-staging-2026-08-05/admin-global-priority-importance.db`): 1,543,753 rows
185
- * split **1,410,657 fallback / 133,096 encyclopedic**, and the arithmetic closes on itself — 1,410,657 + 108,861
186
- * (encyclopedic rows that ALSO have a population) = 1,519,518, which is exactly the count of `place_population` rows
187
- * with `population > 0`, i.e. every row the fallback pass could have written. The remaining 24,235 encyclopedic rows
188
- * have no population row at all. Under the exact-equality rule, Node found ZERO mismatches within one ULP, so the
189
- * tolerance changes no classification on this database — it only makes the answer runtime-independent.
190
- *
191
- * Referential is NOT read out of the legacy column under any branch — it is always re-derived from population, because
192
- * a legacy Wikipedia row overwrote whatever population would have said.
103
+ * The match allows a small tolerance because `log2` differs by an ULP across runtimes.
104
+ * Bit equality would invent encyclopedic scores.
193
105
  */
194
- export declare function splitLegacyImportance(legacy: number | undefined, population: number | null | undefined): {
106
+ export declare function splitLegacyImportance(legacy: number | null, population: number | null | undefined): {
195
107
  referential: number;
196
108
  encyclopedic?: number;
197
109
  };
@@ -200,26 +112,22 @@ export declare function splitLegacyImportance(legacy: number | undefined, popula
200
112
  */
201
113
  export interface ImportanceSplit {
202
114
  /**
203
- * WOF id → referential likelihood. Sparse: absent means 0 (no population evidence).
115
+ * Referential likelihood by WOF ID, where a missing ID means 0 because only positive scores are stored.
204
116
  */
205
117
  referential: Map<number, number>;
206
118
  /**
207
- * WOF id → encyclopedic importance. Sparse, and ABSENCE IS ABSENCE — never fill a 0 in.
119
+ * Encyclopedic importance by WOF ID, where a missing ID means no score and must not be filled with 0.
208
120
  */
209
121
  encyclopedic: Map<number, number>;
210
122
  source: ImportanceSplitSource;
211
123
  /**
212
- * Rows the legacy reconstruction attributed to the population fallback (only meaningful under
213
- * {@link IMPORTANCE_SPLIT_SOURCES.legacyReconstructed}).
124
+ * The number of legacy rows attributed to the population fallback,
125
+ * nonzero only for the `legacy-reconstructed` source.
214
126
  */
215
127
  legacyFallbackRows: number;
216
128
  }
217
129
  /**
218
- * Load both scores from a WOF admin database, whatever schema generation it is at.
219
- *
220
- * Handles all four states in {@link IMPORTANCE_SPLIT_SOURCES} so callers never branch on schema themselves — the FST
221
- * builder in particular must read the shipped population-only databases, the read-only 2026-08-05 staging database
222
- * (legacy conflated column), and post-split builds with one code path.
130
+ * Loads both importance scores from a WOF admin database, whichever schema generation it uses.
223
131
  */
224
132
  export declare function loadImportanceSplit<DB>(db: DatabaseClient<DB>): ImportanceSplit;
225
133
  //# sourceMappingURL=place-importance-schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"place-importance-schema.d.ts","sourceRoot":"","sources":["../lib/place-importance-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAIpC;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC,EAAE,EAAE,MAAM,CAAA;IACV;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;;OAGG;IACH,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACvC,gBAAgB,EAAE,oBAAoB,CAAA;CACtC;AAED;;;GAGG;AACH,eAAO,MAAM,wBAAwB,8DAKuB,CAAA;AAE5D;;;GAGG;AACH,wBAAsB,0BAA0B,CAAC,EAAE,EAAE,MAAM,CAAC,uBAAuB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAUnG;AAMD;;;;GAIG;AAMH;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,sBAAsB,OAAO,CAAA;AAE1C;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAMpG;AAMD;;;GAGG;AACH,eAAO,MAAM,wBAAwB;IACpC;;OAEG;aACH,YAAY,EAAE,eAAe;IAC7B;;;OAGG;aACH,mBAAmB,EAAE,sBAAsB;IAC3C;;OAEG;aACH,cAAc,EAAE,iBAAiB;IACjC;;OAEG;aACH,IAAI,EAAE,MAAM;CACH,CAAA;AAEV,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,OAAO,wBAAwB,CAAC,CAAA;AAE5G;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAiBpH;AAED;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,QAAqB,CAAA;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,qBAAqB,CACpC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACnC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAQhD;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B;;OAEG;IACH,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC;;OAEG;IACH,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC,MAAM,EAAE,qBAAqB,CAAA;IAC7B;;;OAGG;IACH,kBAAkB,EAAE,MAAM,CAAA;CAC1B;AAeD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,GAAG,eAAe,CAgF/E"}
1
+ {"version":3,"file":"place-importance-schema.d.ts","sourceRoot":"","sources":["../lib/place-importance-schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEpC;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC,EAAE,EAAE,MAAM,CAAA;IAEV;;;;;;;OAOG;IACH,WAAW,EAAE,MAAM,CAAA;IAEnB;;;;OAIG;IACH,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAE3B;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAA;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACvC,gBAAgB,EAAE,oBAAoB,CAAA;CACtC;AAED;;;GAGG;AACH,eAAO,MAAM,wBAAwB,8DAKuB,CAAA;AAE5D;;GAEG;AACH,wBAAsB,0BAA0B,CAAC,EAAE,EAAE,MAAM,CAAC,uBAAuB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAUnG;AAED;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,OAAO,CAAA;AAE1C;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAMxF;AAED;;;GAGG;AACH,eAAO,MAAM,wBAAwB;aACpC,YAAY,EAAE,eAAe;aAE7B,mBAAmB,EAAE,sBAAsB;aAE3C,cAAc,EAAE,iBAAiB;aAEjC,IAAI,EAAE,MAAM;CACH,CAAA;AAEV;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,OAAO,wBAAwB,CAAC,CAAA;AAE5G;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAiBpH;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB,QAAqB,CAAA;AAEzD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACpC,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACnC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAQhD;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B;;OAEG;IACH,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAEhC;;OAEG;IACH,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC,MAAM,EAAE,qBAAqB,CAAA;IAE7B;;;OAGG;IACH,kBAAkB,EAAE,MAAM,CAAA;CAC1B;AAYD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,GAAG,eAAe,CA6E/E"}