@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
@@ -2,33 +2,6 @@
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
 
34
7
  import { referentialFromPopulation } from "@mailwoman/core/resolver"
@@ -36,42 +9,49 @@ import { allRows } from "@mailwoman/core/utils"
36
9
  import type { DatabaseClient } from "@mailwoman/sqlite/client"
37
10
  import type { Kysely } from "kysely"
38
11
 
39
- //#region Schema
40
-
41
12
  /**
42
- * One row of `place_importance`. Keyed by WOF place id.
13
+ * Describes one row of the `place_importance` table, keyed by WOF place id.
43
14
  */
44
15
  export interface PlaceImportanceTable {
45
16
  id: number
17
+
46
18
  /**
47
- * Population-anchored referential likelihood in [0, 1] — see {@link referentialFromPopulation}. NOT NULL because it is
48
- * always derivable: a place with no population row scores 0, which here genuinely means "no population evidence", the
49
- * same state the ranking has always treated as "no boost, never a penalty".
19
+ * The population-anchored referential likelihood in [0, 1], from {@link referentialFromPopulation}.
20
+ *
21
+ * It is never NULL.
22
+ * A place without a population row scores `0`.
23
+ *
24
+ * That score represents no population evidence, so it earns no boost or penalty.
50
25
  */
51
26
  referential: number
27
+
52
28
  /**
53
- * Fan-out-guarded Wikipedia importance in [0, 1], or NULL when this place has no surviving concordance. NULL is
54
- * ABSENCE — never coalesce it to 0 in a consumer, and never rank on it at all.
29
+ * The fan-out-guarded Wikipedia importance in [0, 1], or NULL when the place has no surviving concordance.
30
+ *
31
+ * NULL means absence, so consumers must not coalesce it to 0 or rank on it.
55
32
  */
56
33
  encyclopedic: number | null
34
+
57
35
  /**
58
- * DEPRECATED — the pre-split conflation, written by {@link blendImportance} so the bare-toponym fame consumer (#28)
59
- * keeps one cross-bearer scale. New code reads {@link PlaceImportanceTable.referential} (to rank) or
60
- * {@link PlaceImportanceTable.encyclopedic} (to display).
36
+ * Deprecated blend of the two scores, written by {@link blendImportance} for
37
+ * consumers that still need one scale.
38
+ *
39
+ * New code ranks on `referential` and displays `encyclopedic`.
61
40
  */
62
41
  importance: number
63
42
  }
64
43
 
65
44
  /**
66
- * The `place_importance` slice of a WOF admin database, for `new DatabaseClient<PlaceImportanceDatabase>(...)`.
45
+ * Types the `place_importance` table of a WOF admin database
46
+ * for `new DatabaseClient<PlaceImportanceDatabase>(...)`.
67
47
  */
68
48
  export interface PlaceImportanceDatabase {
69
49
  place_importance: PlaceImportanceTable
70
50
  }
71
51
 
72
52
  /**
73
- * The columns in declaration order. The builder's INSERT derives its column list from this, so a field added to
74
- * {@link PlaceImportanceTable} without a matching DDL column is a compile error at the insert site.
53
+ * Lists the `place_importance` columns in declaration order, each checked
54
+ * against {@link PlaceImportanceTable}.
75
55
  */
76
56
  export const PLACE_IMPORTANCE_COLUMNS = [
77
57
  "id",
@@ -81,8 +61,7 @@ export const PLACE_IMPORTANCE_COLUMNS = [
81
61
  ] as const satisfies readonly (keyof PlaceImportanceTable)[]
82
62
 
83
63
  /**
84
- * Create `place_importance` at the split schema. Drops any existing table first — this is a rebuild-in-place step of
85
- * `mailwoman gazetteer importance`, never a migration.
64
+ * Drops and recreates the `place_importance` table with separate referential and encyclopedic columns.
86
65
  */
87
66
  export async function createPlaceImportanceTable(db: Kysely<PlaceImportanceDatabase>): Promise<void> {
88
67
  await db.schema.dropTable("place_importance").ifExists().execute()
@@ -96,110 +75,55 @@ export async function createPlaceImportanceTable(db: Kysely<PlaceImportanceDatab
96
75
  .execute()
97
76
  }
98
77
 
99
- //#endregion
100
-
101
- //#region The referential derivation
102
-
103
- /**
104
- * Re-exported from `@mailwoman/core/resolver`, which is where the derivation lives so that `@mailwoman/resolver`
105
- * (backend-agnostic — it cannot import this package) reads the same number. Re-exported HERE so the schema module stays
106
- * the one-stop read for the table: the column and the function that fills it are one hop apart.
107
- */
108
-
109
- //#endregion
110
-
111
- //#region The legacy blend
112
-
113
78
  /**
114
- * The most the encyclopedic channel may raise a place's blended importance above its population-anchored referential
115
- * score.
116
- *
117
- * In referential units 0.25 is 3.5 population doublings (the referential curve divides log2 by 14), so an article can
118
- * promote a place as if it were up to ~11x its recorded population — never more. The bound exists because the two
119
- * channels' scales CROSS at the article floor: merely having a Wikipedia article scores ~0.25–0.35, which exceeds the
120
- * referential score of a mid-size town, so an unbounded blend ranks a 136-person village with an article above a
121
- * 16,026-person town without one.
122
- *
123
- * The value is bracketed by two decided contests, measured on the 2026-08-24 staging build:
79
+ * Caps how far the encyclopedic score may raise a place's blended importance above its referential score.
124
80
  *
125
- * - `> 0.2282`, or bare `Whitby` stops answering Whitby GB (pop 13,130, referential 0.2729, encyclopedic 0.5496) over
126
- * Whitby CA (pop 128,377, referential 0.5011) — the #28 design case the fame prior exists to serve.
127
- * - `< 0.2790`, or bare `Tó`/`To` answers Tó PT (pop 136, referential 0.0131, encyclopedic 0.3375) over Tô BF (pop
128
- * 16,026, no article) — the `bf-gloss-to-*` board pair.
129
- *
130
- * 0.25 sits mid-interval with ~0.02 margin to each bound.
81
+ * Merely having an article scores about 0.25 to 0.35, above a mid-size town's referential score,
82
+ * so without the cap a tiny village with an article outranks a large town without one.
131
83
  */
132
84
  export const ENCYCLOPEDIC_BOOST_CAP = 0.25
133
85
 
134
86
  /**
135
- * The legacy `importance` blend — one cross-bearer fame scale for the #28 consumer, derived from the two split
136
- * channels:
137
- *
138
- * - No article → the referential score.
139
- * - No population evidence (`referential` 0) → the encyclopedic score stands alone: there is nothing to bound the
140
- * article's claim against, and a constant cap would demote every famous place WOF records no population for
141
- * (meaning-of-zero: referential 0 is "unmeasured", not "tiny").
142
- * - Both present → the encyclopedic value clamped to at most {@link ENCYCLOPEDIC_BOOST_CAP} above the referential score,
143
- * and never below it. The floor half repairs the downward inversion (the Seine-Saint-Denis suburb's weak article
144
- * scored 0.1173 and REPLACED its referential 0.4716 under the old `COALESCE`, so a 418-person Aude hamlet outranked
145
- * it 4.8x); the cap half repairs the upward one (`Tó`, above).
146
- *
147
- * Scale of the clamp on the 2026-08-24 staging build: of 628,202 article-bearing rows, 209,738 sit above the cap and
148
- * 13,888 sit below their referential floor; the 305,168 article-without-population rows pass through unchanged.
87
+ * Blends the two channels into the legacy `importance` column: the referential score
88
+ * when there is no article, only the encyclopedic score when population is unknown
89
+ * (`referential` 0), and otherwise the encyclopedic score clamped between the
90
+ * referential score and {@link ENCYCLOPEDIC_BOOST_CAP} above it.
149
91
  */
150
- export function blendImportance(referential: number, encyclopedic: number | null | undefined): number {
151
- if (encyclopedic === null || encyclopedic === undefined) return referential
92
+ export function blendImportance(referential: number, encyclopedic: number | null): number {
93
+ if (encyclopedic === null) return referential
152
94
 
153
95
  if (referential <= 0) return encyclopedic
154
96
 
155
97
  return Math.max(referential, Math.min(encyclopedic, referential + ENCYCLOPEDIC_BOOST_CAP))
156
98
  }
157
99
 
158
- //#endregion
159
-
160
- //#region Reading a database that may or may not carry the split
161
-
162
100
  /**
163
- * Where a reader's two scores came from. Recorded into the FST stamp so an artifact says, in its own provenance,
164
- * whether its encyclopedic channel is real, reconstructed, or absent.
101
+ * Source names used by {@link loadImportanceSplit}.
102
+ * The FST stamp records these values as provenance.
165
103
  */
166
104
  export const IMPORTANCE_SPLIT_SOURCES = {
167
- /**
168
- * `place_importance` carries `referential` + `encyclopedic` — the post-split build.
169
- */
170
105
  splitColumns: "split-columns",
171
- /**
172
- * `place_importance` carries only the conflated `importance`; the split was RECONSTRUCTED against `place_population`
173
- * (see {@link splitLegacyImportance}).
174
- */
106
+
175
107
  legacyReconstructed: "legacy-reconstructed",
176
- /**
177
- * No `place_importance` at all — referential from `place_population`, encyclopedic absent for every place.
178
- */
108
+
179
109
  populationOnly: "population-only",
180
- /**
181
- * Neither table. Every score is 0, and 0 here means the database carries no salience evidence whatsoever.
182
- */
110
+
183
111
  none: "none",
184
112
  } as const
185
113
 
114
+ /**
115
+ * Identifies how an {@link ImportanceSplit} was obtained, as one of the
116
+ * {@link IMPORTANCE_SPLIT_SOURCES} values.
117
+ */
186
118
  export type ImportanceSplitSource = (typeof IMPORTANCE_SPLIT_SOURCES)[keyof typeof IMPORTANCE_SPLIT_SOURCES]
187
119
 
188
120
  /**
189
- * The `SELECT` term and `LEFT JOIN` a name lookup needs in order to CARRY `encyclopedic` onto its results, probed
190
- * against `schemaName`'s `place_importance`.
121
+ * Returns the `select` term and `left join` that add `encyclopedic` to name-lookup results
122
+ * for `schemaName`, degrading to `NULL` and no join when the column is absent.
191
123
  *
192
- * THE PROBE IS A COLUMN, NOT A TABLE, and that is the whole reason this lives here rather than beside a caller's other
193
- * table probes. The pre-split table exists and holds a single conflated `importance` column whose value is a Wikipedia
194
- * score on some rows and a population proxy on others, with nothing in the row to say which — reading that as
195
- * encyclopedic would surface the exact confusion ROAD_TO_V9 §2 exists to end.
196
- *
197
- * There is deliberately no ORDER BY counterpart, and there should never be one: §2's policy is that this score is
198
- * carried and never ranked on. Without the column the select degrades to a literal `NULL` and the join is the empty
199
- * string, so a pre-split extract's query plan is byte-identical to what it was before the split. No shipped gazetteer
200
- * carries the column yet, so today that degraded form is the only one anything builds.
201
- *
202
- * Call it ONCE per extract and cache the result — it runs a `PRAGMA`, and the callers are per-keystroke hot.
124
+ * It probes for the column rather than the table, because a pre-split table's
125
+ * `importance` mixes Wikipedia and population scores.
126
+ * Cache the result per extract, since it runs a `PRAGMA` and lookups are per keystroke.
203
127
  */
204
128
  export function encyclopedicClauses<DB>(db: DatabaseClient<DB>, schemaName: string): { select: string; join: string } {
205
129
  let present: boolean
@@ -221,47 +145,26 @@ export function encyclopedicClauses<DB>(db: DatabaseClient<DB>, schemaName: stri
221
145
  }
222
146
 
223
147
  /**
224
- * The tolerance {@link splitLegacyImportance} treats as "this value reproduces the population curve". Eight ULP —
225
- * comfortably wider than the one-ULP `log2` spread measured between CPython and V8 (see that function's docstring), and
226
- * ~1e-15 absolute against scores Nominatim publishes to four decimals.
148
+ * Sets the relative tolerance within which {@link splitLegacyImportance} treats
149
+ * a value as lying on the population curve.
227
150
  */
228
151
  export const LEGACY_FALLBACK_EPSILON = 8 * Number.EPSILON
229
152
 
230
153
  /**
231
- * Split one row of a LEGACY (pre-split) `place_importance` table back into its two components.
232
- *
233
- * WHY THIS IS RECOVERABLE AT ALL. The legacy builder ran in two passes: Wikipedia scores first, then `INSERT OR IGNORE`
234
- * of `min(1, log2(1+pop/1000)/14)` for every place with a population that Wikipedia had missed. So a legacy value is a
235
- * fallback row IFF it reproduces {@link referentialFromPopulation} of that place's population — the two passes wrote
236
- * different arithmetic, and a score from Nominatim's four-decimal TSV landing on the log2 curve is a measure-zero
237
- * event.
154
+ * Splits a legacy `place_importance` value into referential and encyclopedic scores,
155
+ * treating it as a population fallback when it matches {@link referentialFromPopulation}
156
+ * within {@link LEGACY_FALLBACK_EPSILON}.
238
157
  *
239
- * THE COMPARISON IS ULP-TOLERANT, AND THAT IS NOT DEFENSIVE PADDING. The first version compared for exact bit equality,
240
- * which is correct — in the runtime that wrote the values. Cross-checking the same rule in CPython returned 166,638
241
- * 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
242
- * inputs (worked example: wof 85803233, population 21,299 — stored 0.31992193633838988953, CPython
243
- * 0.31992193633838994504, delta 5.55e-17). Bit equality would therefore INVENT 33,542 encyclopedic scores for anyone
244
- * who ported this rule to another runtime, and invented data is the failure mode this whole module exists to end. The
245
- * tolerance is a few ULP of the score's own magnitude; a genuine Wikipedia value that close to the population curve is
246
- * not distinguishable from it by any consequence.
247
- *
248
- * MEASURED, not reasoned (2026-08-06, `wof/fst-staging-2026-08-05/admin-global-priority-importance.db`): 1,543,753 rows
249
- * split **1,410,657 fallback / 133,096 encyclopedic**, and the arithmetic closes on itself — 1,410,657 + 108,861
250
- * (encyclopedic rows that ALSO have a population) = 1,519,518, which is exactly the count of `place_population` rows
251
- * with `population > 0`, i.e. every row the fallback pass could have written. The remaining 24,235 encyclopedic rows
252
- * have no population row at all. Under the exact-equality rule, Node found ZERO mismatches within one ULP, so the
253
- * tolerance changes no classification on this database — it only makes the answer runtime-independent.
254
- *
255
- * Referential is NOT read out of the legacy column under any branch — it is always re-derived from population, because
256
- * a legacy Wikipedia row overwrote whatever population would have said.
158
+ * The match allows a small tolerance because `log2` differs by an ULP across runtimes.
159
+ * Bit equality would invent encyclopedic scores.
257
160
  */
258
161
  export function splitLegacyImportance(
259
- legacy: number | undefined,
162
+ legacy: number | null,
260
163
  population: number | null | undefined
261
164
  ): { referential: number; encyclopedic?: number } {
262
- const referential = referentialFromPopulation(population)
165
+ const referential = referentialFromPopulation(population ?? null)
263
166
 
264
- if (legacy === undefined) return { referential }
167
+ if (legacy === null) return { referential }
265
168
 
266
169
  if (Math.abs(legacy - referential) <= LEGACY_FALLBACK_EPSILON * Math.max(referential, 1)) return { referential }
267
170
 
@@ -273,24 +176,23 @@ export function splitLegacyImportance(
273
176
  */
274
177
  export interface ImportanceSplit {
275
178
  /**
276
- * WOF id → referential likelihood. Sparse: absent means 0 (no population evidence).
179
+ * Referential likelihood by WOF ID, where a missing ID means 0 because only positive scores are stored.
277
180
  */
278
181
  referential: Map<number, number>
182
+
279
183
  /**
280
- * WOF id → encyclopedic importance. Sparse, and ABSENCE IS ABSENCE — never fill a 0 in.
184
+ * Encyclopedic importance by WOF ID, where a missing ID means no score and must not be filled with 0.
281
185
  */
282
186
  encyclopedic: Map<number, number>
283
187
  source: ImportanceSplitSource
188
+
284
189
  /**
285
- * Rows the legacy reconstruction attributed to the population fallback (only meaningful under
286
- * {@link IMPORTANCE_SPLIT_SOURCES.legacyReconstructed}).
190
+ * The number of legacy rows attributed to the population fallback,
191
+ * nonzero only for the `legacy-reconstructed` source.
287
192
  */
288
193
  legacyFallbackRows: number
289
194
  }
290
195
 
291
- /**
292
- * Does `table` exist in `db`, and if so which of `columns` does it have?
293
- */
294
196
  function tableColumns<DB>(db: DatabaseClient<DB>, table: string): Set<string> {
295
197
  try {
296
198
  const rows = allRows<{ name: string }>(db.prepare(`PRAGMA table_info(${table})`))
@@ -302,11 +204,7 @@ function tableColumns<DB>(db: DatabaseClient<DB>, table: string): Set<string> {
302
204
  }
303
205
 
304
206
  /**
305
- * Load both scores from a WOF admin database, whatever schema generation it is at.
306
- *
307
- * Handles all four states in {@link IMPORTANCE_SPLIT_SOURCES} so callers never branch on schema themselves — the FST
308
- * builder in particular must read the shipped population-only databases, the read-only 2026-08-05 staging database
309
- * (legacy conflated column), and post-split builds with one code path.
207
+ * Loads both importance scores from a WOF admin database, whichever schema generation it uses.
310
208
  */
311
209
  export function loadImportanceSplit<DB>(db: DatabaseClient<DB>): ImportanceSplit {
312
210
  const referential = new Map<number, number>()
@@ -334,9 +232,6 @@ export function loadImportanceSplit<DB>(db: DatabaseClient<DB>): ImportanceSplit
334
232
  const importanceColumns = tableColumns(db, "place_importance")
335
233
 
336
234
  if (importanceColumns.has("referential")) {
337
- // Post-split build: the columns ARE the contract. Referential is read verbatim rather than
338
- // re-derived, so a build that scored referential differently stays visible instead of being
339
- // silently overwritten by this reader's own formula.
340
235
  const rows = allRows<{
341
236
  id: number
342
237
  referential: number
@@ -389,5 +284,3 @@ export function loadImportanceSplit<DB>(db: DatabaseClient<DB>): ImportanceSplit
389
284
  legacyFallbackRows: 0,
390
285
  }
391
286
  }
392
-
393
- //#endregion