@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,189 +2,159 @@
2
2
  * @copyright Sister Software
3
3
  * @license AGPL-3.0
4
4
  * @author Teffen Ellis, et al.
5
- *
6
- * Build the global "candidate" lookup DB from a unified admin WOF DB — the byte-range-optimal
7
- * gazetteer the browser demo resolves against. Instead of FTS5 (whose postings for a common name
8
- * scatter across a multi-GB file → hundreds of serial range fetches), this materializes one
9
- * `WITHOUT ROWID` B-tree keyed `(name_key, country_id, region_id, placetype_id, neg_rank,
10
- * spr_id)`: every place's normalized name + distinct aliases + region abbreviations become rows,
11
- * population rank is precomputed into `neg_rank`, and the rows are bulk-loaded PRE-SORTED so a
12
- * resolve is one contiguous B-tree probe (a handful of pages → 1-2 chunk fetches, regardless of
13
- * global volume).
14
- *
15
- * Each row is DENORMALIZED — it carries the place's display `name`, centroid (`latitude`/
16
- * `longitude`), and `min/max` bbox — so a resolve is one statement, no FTS, no join to spr:
17
- * SELECT spr_id, name, latitude, longitude, min_lat, ... FROM candidate WHERE name_key = ? AND
18
- * country_id = ? AND placetype_id IN (...) [AND latitude BETWEEN ...] ORDER BY neg_rank ASC LIMIT
19
- * K; The demo cascade resolves a parsed region first (its bbox), then constrains the locality to
20
- * that bbox; `region_id` (the place's region-tier ancestor) is also carried for a future region
21
- * 2-step.
22
- *
23
- * The name_key normalizer is the SHARED {@link normalizeLocalityForKey} — the query side (the demo
24
- * resolver {@link WOFCandidateTableLookup}) MUST use the same function, the one-normalizer
25
- * discipline the address-point extract uses, so build/query stay consistent by construction.
26
- *
27
- * Measured (2026-06-20, vs the 2.6 GB full-DB FTS): ~5 M rows; ~12 range fetches per 8-query
28
- * session (the full DB needs 243); US locality 96.8% (region bbox), EU coord parity 88.6%.
29
- *
30
- * #28 adds one more denormalized field, `importance` — the toponym-fame prior that decides a BARE
31
- * city name, joined in from a separate score source by name rather than by id (see
32
- * `candidate-importance.ts`, which owns that join and explains why the id would be wrong). It is
33
- * optional: without {@link BuildCandidateOptions.importance} the column is NULL on every row, which
34
- * the consumer reads as unmeasured and ignores.
35
- *
36
- * The build also materializes the ANCESTORS SIDECAR (`candidate_ancestor` closure rows +
37
- * `candidate_interval` pre/post labels) from the source `ancestors` table — the containment
38
- * lineage behind {@link WOFCandidateTableLookup.ancestors} and the admin-coherence check.
39
- * `candidate-ancestors-schema.ts` owns the encoding decision and the DAG/absence semantics.
40
5
  */
6
+ import type { PathBuilderLike } from "path-ts";
41
7
  import type { CapitalPoint } from "#capitals";
42
- export { stageCountryDisplayNames } from "#candidate/country-display-names";
43
- export { GLOSS_EXCLUDED_PLACETYPES, GLOSS_KEY_THRESHOLD } from "#candidate/name-roles";
44
- export type { PlaceAttrs } from "#candidate/place-attrs";
8
+ /**
9
+ * Options for {@link buildCandidateTable}.
10
+ */
45
11
  export interface BuildCandidateOptions {
46
12
  /**
47
- * Source unified admin DB — needs spr, place_population, place_search, place_abbr, ancestors.
13
+ * The source WOF admin database.
14
+ *
15
+ * It must have the `spr`, `place_population`, `place_search`, `place_abbr` and `ancestors` tables.
48
16
  */
49
- input: string;
17
+ input: PathBuilderLike;
50
18
  /**
51
- * Output candidate DB path (overwritten if present).
19
+ * The candidate database to write, replacing any existing file.
52
20
  */
53
- output: string;
21
+ output: PathBuilderLike;
54
22
  /**
55
- * The capital-status reference entries (#1880) to carry in-artifact — the parsed `data/gazetteer/capitals-v1.json`
56
- * entries, passed by the CALLER because this module publishes to npm and must not read repo-root paths. Absent → the
57
- * `capital` table is not created, and the session loader falls back to the repo file where one exists.
23
+ * The capital reference entries to store in the artifact's `capital` table.
24
+ *
25
+ * The caller supplies these entries because this published module cannot read repository paths.
26
+ * The builder creates no `capital` table when the caller omits them.
27
+ *
28
+ * The capital loader then falls back to the repository's `capitals-v1.json`.
58
29
  */
59
30
  capitals?: readonly CapitalPoint[];
60
31
  /**
61
- * Optional postcode extracts (`spr` rows with `placetype='postalcode'` + real coords, e.g. postalcode-us.db) — folded
62
- * in as `postalcode` candidate rows so `findPlace(postalcode)` resolves a ZIP directly (the demo's primary postcode
63
- * path; the postcode-*.bin anchor stays the fallback). Matches the slim wof-hot.db, which took one such postcode DB.
32
+ * Postcode extract databases whose located `spr` rows become `postalcode` candidate rows.
64
33
  *
65
- * Each extract's `names` table is folded in too (#1495) — that's where the GeoNames delivery-city names live
66
- * ("Brooklyn" for 11201), and they were previously reachable only through FTS.
34
+ * Each extract's `names` table becomes aliases, such as the delivery city "Brooklyn" for 11201.
67
35
  */
68
- postcodes?: string[];
36
+ postcodes?: readonly PathBuilderLike[];
69
37
  /**
70
- * Optional LOCALITY extracts (`spr` rows with `placetype='locality'` + real coords, e.g. localities-nz-linz.db — the
71
- * #1564 NZ suburb tier) — folded through the same extract loop as the postcode extracts, staged as `locality`
72
- * candidate rows with UNMEASURED population (`neg_rank 0`: a extract row ranks behind any populated namesake and wins
73
- * only where its key is the answer). Each extract's `names` table folds as aliases, `is_primary = 0`, same as the
74
- * delivery-city pass. An extract whose `ancestors` table names an admin region for a row gives that row the region's
75
- * scope (`region_id`) plus closure rows for the region and the region's own chain above it; an extract without one
76
- * stays unscoped, as before.
38
+ * Locality extract databases whose located `spr` rows become `locality`
39
+ * candidate rows with zero population.
40
+ *
41
+ * Their `names` tables become non-primary aliases.
42
+ * When an extract's `ancestors` table gives a row's region, the row gets
43
+ * that region's scope and closure rows.
44
+ * Other rows stay unscoped.
45
+ */
46
+ localities?: readonly PathBuilderLike[];
47
+ /**
48
+ * A WOF admin database with a `place_importance` table supplies the `importance` column.
49
+ *
50
+ * Rows join on name key, country and placetype, then on the nearest centroid.
51
+ * Without this option every row's `importance` is NULL.
52
+ * Consumers treat NULL as unmeasured.
77
53
  */
78
- localities?: string[];
54
+ importance?: PathBuilderLike;
79
55
  /**
80
- * Optional WOF admin database carrying a `place_importance` table — the source of the `importance` column (#28), the
81
- * toponym-fame prior that decides the bare-city-name class. Joined by `(name_key, country, placetype)` + nearest
82
- * centroid, NOT by id; see `candidate-importance.ts` for why the id join silently drops the foreign homonyms the
83
- * prior exists to demote.
56
+ * Settings for restoring deprecated WOF places that have no successor and have a GeoNames attestation.
84
57
  *
85
- * Omit it and every row's `importance` is NULL — unmeasured, which is what the consumer's positive-evidence-only rule
86
- * already treats as "do not participate", so the artifact is byte-identical to a pre-#28 build except for the empty
87
- * column. That is the honest degradation and it is the DEFAULT: a caller with no score source must not get a
88
- * population-derived stand-in written into a column that means fame.
89
- */
90
- importance?: string;
91
- /**
92
- * Cross-source currency backfill (#1737). WOF carries deprecated-with-no-successor records for real, populated
93
- * settlements (Rochester Kent, Aldershot, Telford — 120 GB localities alone), and the currency filter correctly drops
94
- * them, leaving holes no ranking can fill. When this option is set, pass 1c resurrects a dead locality ONLY under
95
- * three conditions, positive evidence throughout: no live same-name row of any placetype near the dead record (a
96
- * distant same-name row is a NAMESAKE and does not block — Rochester, Northumberland pop 318 must not veto Rochester,
97
- * Kent); an independent GeoNames P-class attestation of the same folded name within
98
- * {@link CURRENCY_BACKFILL_RADIUS_KM}; and the attestor at or above {@link CURRENCY_BACKFILL_POP_FLOOR}. The staged
99
- * row keeps the real WOF id, name, centroid and bbox — GeoNames only ATTESTS the place and supplies the population
100
- * that lets it stand in prominence races. `countries` are judged only where `<cc>.txt` exists under `geonamesDir`;
101
- * absent dumps are skipped loudly.
58
+ * A deprecated place is restored only when no live row of the same name lies within 10 km and
59
+ * a GeoNames populated place with the same folded name and at least 1,000 people lies within 10 km.
60
+ * Countries without `<cc>.txt` under `geonamesDir` are skipped and reported.
102
61
  */
103
62
  currencyBackfill?: {
104
- geonamesDir: string;
63
+ geonamesDir: PathBuilderLike;
105
64
  countries: readonly string[];
106
65
  /**
107
- * The dead placetypes the resurrection judges; `resurrectCurrencyHoles`'s default (`locality`) when absent. The
108
- * `localadmin` widening #1746 named is admitted here once its census is read.
66
+ * The deprecated placetypes eligible for restoration.
67
+ *
68
+ * @defaultValue `locality`
109
69
  */
110
70
  deadPlacetypes?: readonly string[];
111
71
  };
112
72
  /**
113
- * Optional progress callback for CLI / test introspection.
73
+ * Receives a phase name and a message as each build step runs.
114
74
  */
115
75
  onProgress?: (phase: string, message: string) => void;
116
76
  /**
117
- * Key-count threshold for the gloss anomaly detector — {@link GLOSS_KEY_THRESHOLD} unless a test passes a
118
- * fixture-scale value. The production number is the #1730 sweep's own threshold (4,000 places at >= 50 keys).
77
+ * The key-count threshold for the gloss anomaly detector.
78
+ *
79
+ * Tests override it with a value sized for fixtures.
80
+ *
81
+ * @defaultValue {@linkcode GLOSS_KEY_THRESHOLD}
119
82
  */
120
83
  glossKeyThreshold?: number;
121
84
  }
85
+ /**
86
+ * Row and place counts from each stage of {@link buildCandidateTable}.
87
+ */
122
88
  export interface BuildCandidateResult {
123
89
  rows: number;
124
90
  places: number;
125
91
  primaries: number;
126
92
  aliases: number;
127
93
  /**
128
- * Region aliases refused because another same-country region holds the name as its official name (three pairs in the
129
- * admin artifact: `新竹市`, `嘉義市`, `충청남도`). Zero on a source without a `names` table means the rule had nothing to read,
130
- * not that no pair exists.
94
+ * The count of region aliases dropped because another region in the same
95
+ * country uses the name as its official name.
96
+ *
97
+ * The count is always zero for a source without a `names` table.
131
98
  */
132
99
  regionOfficialRefused: number;
133
100
  abbrevs: number;
134
101
  postcodes: number;
135
102
  /**
136
- * Delivery-city (and other `names`-table) aliases folded onto postcode rows — #1495. Zero here means the extracts
137
- * carried no alias names, NOT that the pass was skipped: a extract with no `names` table reports that separately
138
- * through `onProgress`.
103
+ * The count of aliases added to postcode rows from the extracts' `names` tables.
104
+ *
105
+ * An extract without a `names` table is reported through `onProgress`.
139
106
  */
140
107
  postcodeAliases: number;
141
108
  /**
142
- * Closure rows in the `candidate_ancestor` sidecar (see candidate-ancestors-schema.ts). Zero means the source
143
- * `ancestors` table contributed nothing within the resolvable placetypes — a finding, reported rather than implied.
109
+ * The count of closure rows written to the `candidate_ancestor` sidecar,
110
+ * including rows from locality extracts.
144
111
  */
145
112
  ancestorRows: number;
146
113
  /**
147
- * Places carrying at least one closure row.
114
+ * The count of places with at least one closure row.
148
115
  */
149
116
  ancestorPlaces: number;
150
117
  /**
151
- * Places that received a pre/post interval label — the canonical-parent forest's node count. Places outside it (no
152
- * recorded ancestry, extract rows, cycle-skipped) have NO label: containment against them is unverifiable, never
153
- * false.
118
+ * The count of places that received a pre/post interval label.
119
+ * It equals the node count of the canonical-parent forest.
120
+ *
121
+ * Containment against a place outside the forest is unknown.
154
122
  */
155
123
  intervalPlaces: number;
156
124
  /**
157
- * Places that took an `importance` score from the join (#28).
125
+ * The count of places that received an `importance` score.
158
126
  *
159
- * `undefined` and `0` mean different things. `undefined` is "the pass did not run" — no score source was given. A `0`
160
- * would be the source matching NOTHING, which is a finding. Never collapse the two.
127
+ * It is `null` when no score source was given.
161
128
  */
162
- importanceScored?: number;
129
+ importanceScored: number | null;
163
130
  /**
164
- * Places whose `(name_key, country, placetype)` matched a scored group but whose nearest scored centroid was outside
165
- * {@link IMPORTANCE_JOIN_RADIUS_KM} — a different town wearing the same name, refused rather than scored.
131
+ * The count of places that matched a scored group by name key, country and placetype
132
+ * but whose nearest scored centroid lay beyond {@link IMPORTANCE_JOIN_RADIUS_KM}.
166
133
  *
167
- * Worth watching across rebuilds: a jump here means the score source and the admin source have drifted apart, and the
168
- * join is being asked to guess.
134
+ * A large change between rebuilds means the score source and the admin source have diverged.
169
135
  */
170
- importanceFiltered?: number;
136
+ importanceFiltered: number | null;
171
137
  /**
172
- * Alias rows stamped `name_role = 'gloss'` — the anomaly detector's certain core (#1730).
138
+ * The count of alias rows the gloss anomaly detector stamped `name_role = 'gloss'`.
173
139
  */
174
140
  roleGloss: number;
175
141
  /**
176
- * Alias rows stamped `name_role = 'abbr'` — the variant-in-official-language provenance signal (#1730/#936).
142
+ * The count of alias rows stamped `name_role = 'abbr'`, which marks a variant in the official language.
177
143
  */
178
144
  roleAbbr: number;
179
145
  /**
180
- * Admin places whose staged key count reached {@link GLOSS_KEY_THRESHOLD} — the sweep's tail, reported so the stamped
181
- * fraction has its denominator.
146
+ * The count of admin places whose staged key count reached the gloss key threshold.
147
+ * It is the denominator for `keyTailWithRole`.
182
148
  */
183
149
  keyTailPlaces: number;
184
150
  /**
185
- * Of {@link BuildCandidateResult.keyTailPlaces}, how many carry at least one stamped role row.
151
+ * The count of places in `keyTailPlaces` with at least one stamped role row.
186
152
  */
187
153
  keyTailWithRole: number;
188
154
  }
155
+ /**
156
+ * Builds the candidate lookup database from a WOF admin database and replaces any existing output.
157
+ * The builder adds an FTS5 trigram index for fuzzy lookup.
158
+ */
189
159
  export declare function buildCandidateTable(opts: BuildCandidateOptions): Promise<BuildCandidateResult>;
190
160
  //# sourceMappingURL=candidate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"candidate.d.ts","sourceRoot":"","sources":["../../lib/build/candidate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAsBH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAO7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAA;AAC3E,OAAO,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AACtF,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAExD,MAAM,WAAW,qBAAqB;IACrC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,QAAQ,CAAC,EAAE,SAAS,YAAY,EAAE,CAAA;IAClC;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB;;;;;;;;;;OAUG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;;;;;;;;OAWG;IACH,gBAAgB,CAAC,EAAE;QAClB,WAAW,EAAE,MAAM,CAAA;QACnB,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;QAC5B;;;WAGG;QACH,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;KAClC,CAAA;IACD;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACrD;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf;;;;OAIG;IACH,qBAAqB,EAAE,MAAM,CAAA;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB;;;;OAIG;IACH,eAAe,EAAE,MAAM,CAAA;IACvB;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAA;IACpB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAA;IACtB;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAA;IACtB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,eAAe,EAAE,MAAM,CAAA;CACvB;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA+apG"}
1
+ {"version":3,"file":"candidate.d.ts","sourceRoot":"","sources":["../../lib/build/candidate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAkB9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAK7C;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACrC;;;;OAIG;IACH,KAAK,EAAE,eAAe,CAAA;IAEtB;;OAEG;IACH,MAAM,EAAE,eAAe,CAAA;IAEvB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,SAAS,YAAY,EAAE,CAAA;IAElC;;;;OAIG;IACH,SAAS,CAAC,EAAE,SAAS,eAAe,EAAE,CAAA;IAEtC;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,SAAS,eAAe,EAAE,CAAA;IAEvC;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,eAAe,CAAA;IAE5B;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE;QAClB,WAAW,EAAE,eAAe,CAAA;QAC5B,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;QAE5B;;;;WAIG;QACH,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;KAClC,CAAA;IAED;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAErD;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IAEf;;;;;OAKG;IACH,qBAAqB,EAAE,MAAM,CAAA;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IAEjB;;;;OAIG;IACH,eAAe,EAAE,MAAM,CAAA;IAEvB;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAA;IAEpB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAA;IAEtB;;;;;OAKG;IACH,cAAc,EAAE,MAAM,CAAA;IAEtB;;;;OAIG;IACH,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAE/B;;;;;OAKG;IACH,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;IAEjC;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAA;IAErB;;OAEG;IACH,eAAe,EAAE,MAAM,CAAA;CACvB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAsYpG"}
@@ -2,46 +2,13 @@
2
2
  * @copyright Sister Software
3
3
  * @license AGPL-3.0
4
4
  * @author Teffen Ellis, et al.
5
- *
6
- * Build the global "candidate" lookup DB from a unified admin WOF DB — the byte-range-optimal
7
- * gazetteer the browser demo resolves against. Instead of FTS5 (whose postings for a common name
8
- * scatter across a multi-GB file → hundreds of serial range fetches), this materializes one
9
- * `WITHOUT ROWID` B-tree keyed `(name_key, country_id, region_id, placetype_id, neg_rank,
10
- * spr_id)`: every place's normalized name + distinct aliases + region abbreviations become rows,
11
- * population rank is precomputed into `neg_rank`, and the rows are bulk-loaded PRE-SORTED so a
12
- * resolve is one contiguous B-tree probe (a handful of pages → 1-2 chunk fetches, regardless of
13
- * global volume).
14
- *
15
- * Each row is DENORMALIZED — it carries the place's display `name`, centroid (`latitude`/
16
- * `longitude`), and `min/max` bbox — so a resolve is one statement, no FTS, no join to spr:
17
- * SELECT spr_id, name, latitude, longitude, min_lat, ... FROM candidate WHERE name_key = ? AND
18
- * country_id = ? AND placetype_id IN (...) [AND latitude BETWEEN ...] ORDER BY neg_rank ASC LIMIT
19
- * K; The demo cascade resolves a parsed region first (its bbox), then constrains the locality to
20
- * that bbox; `region_id` (the place's region-tier ancestor) is also carried for a future region
21
- * 2-step.
22
- *
23
- * The name_key normalizer is the SHARED {@link normalizeLocalityForKey} — the query side (the demo
24
- * resolver {@link WOFCandidateTableLookup}) MUST use the same function, the one-normalizer
25
- * discipline the address-point extract uses, so build/query stay consistent by construction.
26
- *
27
- * Measured (2026-06-20, vs the 2.6 GB full-DB FTS): ~5 M rows; ~12 range fetches per 8-query
28
- * session (the full DB needs 243); US locality 96.8% (region bbox), EU coord parity 88.6%.
29
- *
30
- * #28 adds one more denormalized field, `importance` — the toponym-fame prior that decides a BARE
31
- * city name, joined in from a separate score source by name rather than by id (see
32
- * `candidate-importance.ts`, which owns that join and explains why the id would be wrong). It is
33
- * optional: without {@link BuildCandidateOptions.importance} the column is NULL on every row, which
34
- * the consumer reads as unmeasured and ignores.
35
- *
36
- * The build also materializes the ANCESTORS SIDECAR (`candidate_ancestor` closure rows +
37
- * `candidate_interval` pre/post labels) from the source `ancestors` table — the containment
38
- * lineage behind {@link WOFCandidateTableLookup.ancestors} and the admin-coherence check.
39
- * `candidate-ancestors-schema.ts` owns the encoding decision and the DAG/absence semantics.
40
5
  */
41
6
  import { COUNTRY_POPULATION } from "@mailwoman/codex/country";
42
- import { pathExists } from "@mailwoman/core/fs/readers";
7
+ import { pathExists } from "@mailwoman/core/fs/readers/stat";
43
8
  import { removePath } from "@mailwoman/core/fs/writers";
9
+ import { stringifyJSON } from "@mailwoman/core/json";
44
10
  import { DatabaseClient } from "@mailwoman/sqlite/client";
11
+ import { POPULATION_CORRECTIONS } from "#build/population-corrections";
45
12
  import { explodeAliasBags } from "#candidate/alias-bags";
46
13
  import { buildAncestorsSidecar } from "#candidate/ancestors/sidecar";
47
14
  import { stageCountryDisplayNames } from "#candidate/country-display-names";
@@ -53,23 +20,19 @@ import { CANDIDATE_COLUMNS, createCandidateStagingTables, createCandidateTable,
53
20
  import { createCapitalTable } from "#capital-schema";
54
21
  import { resurrectCurrencyHoles } from "#currency-backfill";
55
22
  import { normalizeLocalityForKey } from "#street/normalize";
56
- // The build's contract is this module path; the passes behind it live in `./candidate/`. Re-exported
57
- // here so a consumer never has to know which pass owns which name.
58
- export { stageCountryDisplayNames } from "#candidate/country-display-names";
59
- export { GLOSS_EXCLUDED_PLACETYPES, GLOSS_KEY_THRESHOLD } from "#candidate/name-roles";
23
+ /**
24
+ * Builds the candidate lookup database from a WOF admin database and replaces any existing output.
25
+ * The builder adds an FTS5 trigram index for fuzzy lookup.
26
+ */
60
27
  export async function buildCandidateTable(opts) {
61
28
  const progress = opts.onProgress ?? (() => { });
62
29
  if (await pathExists(opts.output)) {
63
30
  await removePath(opts.output);
64
31
  }
65
32
  using src = new DatabaseClient(opts.input, { readOnly: true });
66
- await using kdb = new DatabaseClient(opts.output);
67
- // Build-tuning pragmas (raw — Kysely doesn't model PRAGMA). The code dictionaries + the transient
68
- // staging table come from the SHARED schema DDL, so they can't drift from {@link CandidateDatabase}.
33
+ using kdb = new DatabaseClient(opts.output);
69
34
  kdb.exec("PRAGMA page_size=8192; PRAGMA journal_mode=OFF; PRAGMA synchronous=OFF; PRAGMA cache_size=-2000000;");
70
35
  await createCandidateStagingTables(kdb);
71
- // Build compact country and placetype code maps for clustered keys.
72
- // assigned here; the rows are bulk-inserted via kdb once the passes have discovered every code. ---
73
36
  const ccodes = new Map();
74
37
  const ptcodes = new Map();
75
38
  const ccID = (code) => {
@@ -90,9 +53,7 @@ export async function buildCandidateTable(opts) {
90
53
  }
91
54
  return id;
92
55
  };
93
- // Load the importance source before the only pass that sees each place.
94
- // name/country/placetype/centroid together. Absent → every row's `importance` stays NULL. ---
95
- let importance;
56
+ let importance = null;
96
57
  if (opts.importance) {
97
58
  progress("importance", `loading place_importance from ${opts.importance}`);
98
59
  importance = loadImportanceIndex(opts.importance);
@@ -100,21 +61,11 @@ export async function buildCandidateTable(opts) {
100
61
  (importance.stats.unkeyable ? `; ${importance.stats.unkeyable.toLocaleString()} unkeyable names skipped` : ""));
101
62
  }
102
63
  else {
103
- // Never a silent column of nulls: a build without a score source produces one, and the reason has
104
- // to be visible in the log rather than inferred from the artifact.
105
64
  progress("importance", "no score source given — `importance` will be NULL on every row");
106
65
  }
107
- // Derive each place's region ancestor for same-name disambiguation.
108
66
  progress("region", "loading region ancestry");
109
67
  const regionOf = new Map();
110
68
  let multiRegion = 0;
111
- // A place can carry more than one region-tier ancestor — 59 do on the 2026-08-03 artifact (42
112
- // localities, mostly Chinese places on an ambiguous boundary). One `region_id` column holds one of
113
- // them, and which one it ought to be is a real question this is not the place to answer.
114
- //
115
- // MIN is arbitrary but STABLE: an unordered pick lets the stamp for those places differ between two
116
- // builds of the same source. The count is logged because the number is expected to grow, and should
117
- // be visible rather than inferred.
118
69
  for (const r of src
119
70
  .prepare("SELECT id, MIN(ancestor_id) AS ancestor_id, COUNT(DISTINCT ancestor_id) AS n" +
120
71
  " FROM ancestors WHERE ancestor_placetype='region' GROUP BY id")
@@ -126,11 +77,7 @@ export async function buildCandidateTable(opts) {
126
77
  }
127
78
  progress("region", `${regionOf.size.toLocaleString()} places carry a region` +
128
79
  (multiRegion ? ` (${multiRegion.toLocaleString()} carry more than one; stamped with the lowest id)` : ""));
129
- // The hot path — millions of clustered rows. Kept a single positional prepared statement (the fastest
130
- // node:sqlite insert) rather than a per-row query builder. Placeholders come from CANDIDATE_COLUMNS so
131
- // the column COUNT can't drift; the positional run() args below MUST stay in CANDIDATE_COLUMNS order.
132
80
  const insStage = kdb.prepare(`INSERT INTO cand_stage VALUES (${CANDIDATE_COLUMNS.map(() => "?").join(", ")})`);
133
- // Stage primary names and attributes reused by later alias passes.
134
81
  progress("primaries", "indexing place names");
135
82
  const attrs = new Map();
136
83
  let nPrim = 0;
@@ -139,7 +86,7 @@ export async function buildCandidateTable(opts) {
139
86
  .prepare(`SELECT s.id AS id, s.name AS name, s.placetype AS placetype, s.country AS country,
140
87
  s.latitude AS lat, s.longitude AS lon,
141
88
  s.min_latitude AS mnlat, s.min_longitude AS mnlon, s.max_latitude AS mxlat, s.max_longitude AS mxlon,
142
- COALESCE(pp.population,0) AS pop
89
+ pp.population AS pop
143
90
  FROM spr s LEFT JOIN place_population pp ON pp.id = s.id
144
91
  WHERE s.is_current != 0 AND s.is_deprecated = 0`)
145
92
  .iterate()) {
@@ -147,13 +94,10 @@ export async function buildCandidateTable(opts) {
147
94
  const cid = ccID(r.country);
148
95
  const ptid = ptID(r.placetype);
149
96
  const rid = regionOf.get(sid) ?? 0;
150
- // A zero population on a COUNTRY row is a WOF absence artifact, never a real zero — 147 of 237
151
- // primary country records carried none (measured 2026-08-18, #1650), which ranked those nations
152
- // below any namesake hamlet in every prominence race ("Georgia" → Georgia VT). The codex table is
153
- // the secondary source; a country absent from it too stays at zero honestly.
154
- const wofPop = Number(r.pop) || 0;
155
- const pop = wofPop === 0 && r.placetype === "country" ? (COUNTRY_POPULATION[String(r.country ?? "")] ?? 0) : wofPop;
156
- const neg = -Math.log10(pop + 1);
97
+ const wofPop = r.pop === null || r.pop === undefined ? null : Number(r.pop);
98
+ const pop = POPULATION_CORRECTIONS[sid]?.population ??
99
+ (wofPop === null && r.placetype === "country" ? (COUNTRY_POPULATION[String(r.country ?? "")] ?? null) : wofPop);
100
+ const neg = -Math.log10((pop ?? 0) + 1);
157
101
  const name = String(r.name ?? "");
158
102
  const pkey = normalizeLocalityForKey(name);
159
103
  const lat = r.lat;
@@ -189,9 +133,6 @@ export async function buildCandidateTable(opts) {
189
133
  const stageRow = (k, a, sid, isPrimary) => {
190
134
  insStage.run(k, a.cid, a.rid, a.ptid, a.neg, sid, a.name, a.lat, a.lon, a.mnLat, a.mnLon, a.mxLat, a.mxLon, a.pop, isPrimary, a.imp, null);
191
135
  };
192
- // Stage country display names across scripts.
193
- // Never a silent zero: a runtime whose ICU lacks these locales degrades to fewer surfaces, and the count is how a
194
- // reader tells that apart from the pass not having run.
195
136
  progress("country-display-names", `${stageCountryDisplayNames({
196
137
  attrs,
197
138
  iso2ByID: new Map([...ccodes].map(([code, id]) => [id, code])),
@@ -199,8 +140,6 @@ export async function buildCandidateTable(opts) {
199
140
  stageRow,
200
141
  tx: kdb,
201
142
  }).toLocaleString()} country surfaces`);
202
- // Backfill cross-source currency before later candidate passes.
203
- // the alias pass so a resurrected place's alt names explode like any primary's. ---
204
143
  if (opts.currencyBackfill) {
205
144
  const nBackfill = await resurrectCurrencyHoles({
206
145
  src,
@@ -219,11 +158,8 @@ export async function buildCandidateTable(opts) {
219
158
  progress("currency-backfill", `${nBackfill.toLocaleString()} resurrections staged`);
220
159
  }
221
160
  else {
222
- // Never a silent absence: a build without the option leaves the deprecated-no-successor holes dead,
223
- // and the log must say so rather than leave it inferable only from a missing row.
224
161
  progress("currency-backfill", "not configured — deprecated-no-successor holes stay dead (#1737)");
225
162
  }
226
- // Stage distinct normalized aliases from alternate names.
227
163
  progress("aliases", "exploding alias bags");
228
164
  const { nAlias, keyCounts, regionOfficialRefused } = explodeAliasBags(src, kdb, attrs, stageRow, {
229
165
  regionPlacetypeID: ptID("region"),
@@ -233,7 +169,6 @@ export async function buildCandidateTable(opts) {
233
169
  (regionOfficialRefused
234
170
  ? `; ${regionOfficialRefused.toLocaleString()} region aliases refused as another region's official name`
235
171
  : ""));
236
- // Stage region abbreviations.
237
172
  let nAbbr = 0;
238
173
  kdb.exec("BEGIN");
239
174
  for (const r of src.prepare("SELECT id, abbr FROM place_abbr").iterate()) {
@@ -248,9 +183,6 @@ export async function buildCandidateTable(opts) {
248
183
  }
249
184
  kdb.exec("COMMIT");
250
185
  progress("abbrevs", `${nAbbr.toLocaleString()} abbrevs`);
251
- // Stamp each name's semantic role.
252
- // Independent of the sidecar below: this writes `cand_stage.name_role`, that writes the ancestor and
253
- // interval tables, and neither reads the other's output. Ordered by label only.
254
186
  const roles = stampNameRoles({
255
187
  src,
256
188
  out: kdb,
@@ -261,9 +193,7 @@ export async function buildCandidateTable(opts) {
261
193
  ccodes,
262
194
  progress,
263
195
  });
264
- // Stage the encoded ancestors sidecar.
265
196
  const sidecar = await buildAncestorsSidecar({ src, out: kdb, attrs, ptID, progress });
266
- // Fold postcode and locality extracts into candidate records.
267
197
  let nPostcode = 0;
268
198
  let nPostcodeAlias = 0;
269
199
  for (const pcDB of opts.postcodes ?? []) {
@@ -306,7 +236,6 @@ export async function buildCandidateTable(opts) {
306
236
  ? `; ${nLocalityScoped.toLocaleString()} carry a region scope (${nLocalityAncestor.toLocaleString()} closure rows)`
307
237
  : ""));
308
238
  }
309
- // Insert the small typed code dictionaries through Kysely.
310
239
  if (ccodes.size) {
311
240
  await kdb
312
241
  .insertInto("country_codes")
@@ -319,7 +248,6 @@ export async function buildCandidateTable(opts) {
319
248
  .values([...ptcodes].map(([placetype, id]) => ({ id, placetype })))
320
249
  .execute();
321
250
  }
322
- // Insert the small typed capital-status reference table.
323
251
  if (opts.capitals?.length) {
324
252
  await createCapitalTable(kdb);
325
253
  await kdb
@@ -329,37 +257,25 @@ export async function buildCandidateTable(opts) {
329
257
  latitude: entry.latitude,
330
258
  longitude: entry.longitude,
331
259
  level: entry.level,
332
- keys: JSON.stringify(entry.k),
260
+ keys: stringifyJSON(entry.k),
333
261
  })))
334
262
  .execute();
335
263
  progress("capitals", `${opts.capitals.length.toLocaleString()} capital-reference rows carried in-artifact`);
336
264
  }
337
- // Materialize the clustered WITHOUT ROWID table in sorted order.
338
265
  progress("cluster", "building clustered candidate table + VACUUM");
339
- // Column list + clustered-key order are sourced from CANDIDATE_COLUMNS (the first 6 ARE the PRIMARY
340
- // KEY) so the SELECT, the ORDER BY, and the table can't drift. The table comes from the shared
341
- // createCandidateTable().
342
266
  const cols = CANDIDATE_COLUMNS.join(", ");
343
267
  const keyOrder = CANDIDATE_COLUMNS.slice(0, 6).join(", ");
344
268
  await createCandidateTable(kdb);
345
- // OR IGNORE: an abbrev/alias can normalize to a place's primary key (same place, same rank) → any one
346
- // row. The bulk sorted INSERT…SELECT (clustered materialization) stays raw — a single hot bulk statement.
347
269
  kdb.exec(`INSERT OR IGNORE INTO candidate (${cols}) SELECT ${cols} FROM cand_stage ORDER BY ${keyOrder};`);
348
270
  await kdb.schema.dropTable("cand_stage").execute();
349
- // Typo-tolerant fallback index (the unified gazetteer's second mode): the exact name_key probe can't
350
- // recover misspellings, so FTS5-trigram over `name` lets the reader fuzzy-match on an exact+strip miss.
351
271
  progress("fts", "building FTS5-trigram fuzzy index");
352
272
  createCandidateFTS(kdb);
353
- // page_size MUST be set right before VACUUM: node:sqlite initializes the file at the 4096 default on
354
- // `new DatabaseSync`, so the creation-time pragma is a no-op — only a VACUUM rebuilds at the new size.
355
- // 8192 matches the sql.js-httpvfs 64 KiB request chunk cleanly (8 pages) and shallows the B-tree.
356
273
  kdb.exec("PRAGMA page_size=8192");
357
274
  kdb.exec("VACUUM");
358
275
  const { n: rows } = await kdb
359
276
  .selectFrom("candidate")
360
277
  .select((eb) => eb.fn.countAll().as("n"))
361
278
  .executeTakeFirstOrThrow();
362
- // closes the underlying `out` connection
363
279
  return {
364
280
  rows,
365
281
  places: attrs.size,
@@ -373,7 +289,8 @@ export async function buildCandidateTable(opts) {
373
289
  ancestorPlaces: sidecar.ancestorPlaces + nLocalityScoped,
374
290
  intervalPlaces: sidecar.intervalPlaces,
375
291
  ...roles,
376
- ...(importance ? { importanceScored: importance.matched, importanceFiltered: importance.refused } : {}),
292
+ importanceScored: importance ? importance.matched : null,
293
+ importanceFiltered: importance ? importance.refused : null,
377
294
  };
378
295
  }
379
296
  //# sourceMappingURL=candidate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"candidate.js","sourceRoot":"","sources":["../../lib/build/candidate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"candidate.js","sourceRoot":"","sources":["../../lib/build/candidate.ts"],"names":[],"mappings":"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"}