@mailwoman/core 4.13.0 → 4.14.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.
@@ -350,7 +350,7 @@ function emptyParseTree(raw) {
350
350
  };
351
351
  }
352
352
  function placeIdPrefix(place) {
353
- // Mirror the convention used by @mailwoman/resolver-wof-sqlite (`wof:<id>`). Resolver
353
+ // Mirror the convention used by @mailwoman/core/resolver-wof-sqlite (`wof:<id>`). Resolver
354
354
  // backends that don't carry an implicit vendor in `id` get a neutral `place:` prefix.
355
355
  return typeof place.id === "number" ? "wof" : "place";
356
356
  }
@@ -1 +1 @@
1
- {"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../pipeline/reconcile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../pipeline/reconcile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAuFH,MAAM,QAAQ,GAAG;IAChB,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,SAAS,EAAE,CAAC;IACZ,iBAAiB,EAAE,GAAG;IACtB,SAAS,EAAE,EAAE;IACb,SAAS,EAAE,CAAC;CACZ,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAEzC;;;GAGG;AACH,MAAM,YAAY,GAAgC,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,oBAAoB,CAAC,CAAA;AACzG,MAAM,eAAe,GAAG,IAAI,GAAG,CAAe,YAAY,CAAC,CAAA;AAqB3D;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAAC,MAAuB;IACrD,MAAM,IAAI,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,CAAA;IAE5C,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IACtC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAClC,CAAC;IAED,uFAAuF;IACvF,oFAAoF;IACpF,oCAAoC;IACpC,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC9E,IAAI,KAAK,GAAW,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;IAEnE,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,IAAI,GAAW,EAAE,CAAA;QACvB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACf,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACrC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;gBAClF,IAAI,gBAAgB,KAAK,MAAM,CAAC,iBAAiB;oBAAE,SAAQ;gBAC3D,MAAM,OAAO,GACZ,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;oBACxB,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC;oBAC7B,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;oBAC3B,gBAAgB;oBAChB,mBAAmB,GAAG,IAAI,CAAC,SAAS,CAAA;gBACrC,IAAI,CAAC,IAAI,CAAC;oBACT,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;oBACxC,QAAQ,EAAE,IAAI,CAAC,QAAQ,GAAG,OAAO;oBACjC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG;iBACtB,CAAC,CAAA;YACH,CAAC;QACF,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAA;QAC5C,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;IACtC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAA;IAC7C,6FAA6F;IAC7F,qFAAqF;IACrF,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC/D,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAA;IAExD,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAE,CAAA;IACvB,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAA;IAEpD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IAC1D,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IAE3D,OAAO;QACN,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE;QACf,UAAU,EAAE,WAAW,CAAC,CAAC,CAAE;QAC3B,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;QAC/C,cAAc,EAAE,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC;KAC/C,CAAA;AACF,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,UAAU,CAAC,MAAuB,EAAE,IAA6B;IACzE,MAAM,SAAS,GAAG,IAAI,GAAG,EAA0B,CAAA;IACnD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC3C,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QAC5B,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;YAC3C,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACpB,CAAC;IACF,CAAC;IACD,6FAA6F;IAC7F,0FAA0F;IAC1F,8FAA8F;IAC9F,2FAA2F;IAC3F,yEAAyE;IACzE,MAAM,OAAO,GAAG,IAAI,GAAG,EAA4B,CAAA;IACnD,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;QAC3C,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACX,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IAC/B,CAAC;IACD,MAAM,KAAK,GAAqB,EAAE,CAAA;IAClC,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;IAC1D,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,GAAG,EAAiC,CAAA;IAC3D,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC3C,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QACnC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACX,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACvB,CAAC;IAED,MAAM,KAAK,GAAiB,EAAE,CAAA;IAC9B,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACvD,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;QAChF,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;QAClD,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,MAAM,CAAC,kBAAkB;gBACvC,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;gBACvF,CAAC,CAAC,EAAE,CAAA;YACL,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,KAAK,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,eAAe,EAAE,IAAI,CAAC,KAAK;oBAC3B,KAAK,EAAE,IAAI;oBACX,aAAa,EAAE,CAAC;oBAChB,SAAS,EAAE,KAAK;iBAChB,CAAC,CAAA;gBACF,SAAQ;YACT,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,eAAe,EAAE,IAAI,CAAC,KAAK;oBAC3B,KAAK;oBACL,aAAa,EAAE,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC;oBAClD,SAAS,EAAE,KAAK;iBAChB,CAAC,CAAA;YACH,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAA;AACb,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,GAAW,EAAE,IAAoC;IACrE,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;IACnD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAA;IAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAA;AAChC,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAS,mBAAmB,CAC3B,QAAsB,EACtB,SAAqB,EACrB,MAAuB,EACvB,IAA6B;IAE7B,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAA;IACrE,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAA;IAClC,IAAI,CAAC,OAAO;QAAE,OAAO,CAAC,CAAA;IACtB,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IACnD,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,IAAI,QAAQ,GAAG,CAAC,CAAA;IAChB,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,SAAQ;QAC7D,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAChD,MAAM,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;QACpD,MAAM,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAA;QACrD,IAAI,KAAK,KAAK,MAAM;YAAE,SAAQ;QAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,KAAM,CAAC,CAAA;QAC7C,KAAK,EAAE,CAAA;QACP,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,QAAQ,EAAE,CAAA;YACV,SAAQ;QACT,CAAC;QACD,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,KAAM,CAAC,EAAE,CAAC,CAAC,CAAA;QAC/D,IAAI,GAAG,EAAE,CAAC;YACT,OAAO,EAAE,CAAA;QACV,CAAC;aAAM,CAAC;YACP,OAAO,MAAM,CAAC,iBAAiB,CAAA;QAChC,CAAC;IACF,CAAC;IACD,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,CAAC,CAAA;IACzB,MAAM,UAAU,GAAG,OAAO,GAAG,KAAK,CAAA;IAClC,4FAA4F;IAC5F,mFAAmF;IACnF,2DAA2D;IAC3D,OAAO,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAA;AAC3C,CAAC;AAED,SAAS,QAAQ,CAAC,CAAkB,EAAE,CAAkB;IACvD,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAA;AAC/B,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY,CAAC,IAAU,EAAE,MAAuB,EAAE,IAA6B;IACvF,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,IAAI,UAAU,GAAG,CAAC,CAAA;IAClB,IAAI,QAAQ,GAAG,CAAC,CAAA;IAChB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;QACnC,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAA;QAC5C,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAA;IACzC,CAAC;IACD,MAAM,cAAc,GAAG,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;IAC1E,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;IAC5C,MAAM,KAAK,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,CAAA;IAC1D,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,CAAA;AAC5D,CAAC;AAED;;;GAGG;AACH,SAAS,mBAAmB,CAC3B,WAAyB,EACzB,MAAuB,EACvB,IAA6B;IAE7B,IAAI,CAAC,MAAM,CAAC,WAAW;QAAE,OAAO,CAAC,CAAA;IACjC,IAAI,GAAG,GAAG,CAAC,CAAA;IACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,mBAAmB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAE,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;QACzF,IAAI,KAAK,KAAK,MAAM,CAAC,iBAAiB;YAAE,OAAO,MAAM,CAAC,iBAAiB,CAAA;QACvE,GAAG,IAAI,KAAK,CAAA;IACb,CAAC;IACD,OAAO,GAAG,CAAA;AACX,CAAC;AAED,SAAS,SAAS,CAAC,IAAU,EAAE,GAAW;IACzC,MAAM,KAAK,GAAkB,IAAI,CAAC,WAAW;SAC3C,KAAK,EAAE;SACP,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;SAC3C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACf,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAChD,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK;QACtB,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG;QAClB,UAAU,EAAE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU;QAClD,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,WAAW;QACnB,QAAQ,EAAE,yBAAyB;QACnC,GAAG,CAAC,IAAI,CAAC,KAAK;YACb,CAAC,CAAC;gBACA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG;gBACnB,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG;gBACnB,OAAO,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE;aACxD;YACF,CAAC,CAAC,EAAE,CAAC;KACN,CAAC,CAAC,CAAA;IACJ,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAA;AACtB,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IAClC,OAAO;QACN,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE;QACxB,UAAU,EAAE,CAAC;QACb,SAAS,EAAE,EAAE;QACb,cAAc,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;KACnF,CAAA;AACF,CAAC;AAED,SAAS,aAAa,CAAC,KAAoB;IAC1C,2FAA2F;IAC3F,sFAAsF;IACtF,OAAO,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAA;AACtD,CAAC;AAED,SAAS,OAAO,CAAC,KAAa,EAAE,GAAW;IAC1C,OAAO,GAAG,KAAK,IAAI,GAAG,EAAE,CAAA;AACzB,CAAC;AAED,SAAS,IAAI,CAAI,KAAuB,EAAE,CAAS,EAAE,GAAqB;IACzE,OAAO,KAAK;SACV,KAAK,EAAE;SACP,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;SAC/B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACd,CAAC;AAED,SAAS,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AACjC,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAa;IAC5C,yFAAyF;IACzF,4FAA4F;IAC5F,iCAAiC;IACjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IACtD,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,CAAC,CAAA;IACvB,OAAO,KAAK,CAAA;AACb,CAAC;AAED,SAAS,OAAO,CAAC,MAAgB;IAChC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAA;IAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;IACjD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAA;AAChC,CAAC"}
@@ -173,8 +173,8 @@ export interface PhraseGrouper {
173
173
  * satisfies this.
174
174
  */
175
175
  /**
176
- * Structural type for the FST gazetteer matcher, compatible with @mailwoman/resolver-wof-sqlite's
177
- * FstMatcher.
176
+ * Structural type for the FST gazetteer matcher, compatible with
177
+ * @mailwoman/core/resolver-wof-sqlite's FstMatcher.
178
178
  */
179
179
  export interface FstMatcherLike {
180
180
  walk(tokens: string[]): {
@@ -2,10 +2,14 @@
2
2
  * @copyright Sister Software
3
3
  * @license AGPL-3.0
4
4
  * @author Teffen Ellis, et al.
5
+ *
6
+ * The resolver TYPE CONTRACT — `ResolverBackend`, `Resolver`, `ResolveOpts`, `ResolvedPlace`, the
7
+ * lookup interfaces, the placetype map. Pure types + tiny helpers; NO implementation, so `core`
8
+ * stays a dependency-free leaf and `core/pipeline` can compose the resolver structurally without
9
+ * a cycle. The IMPLEMENTATION (`createWofResolver`, `RemoteResolver`, span-rescore) lives in
10
+ * `@mailwoman/resolver` (#215), which depends on this + `@mailwoman/spatial` +
11
+ * `@mailwoman/codex`.
5
12
  */
6
- export { RemoteResolver, serializableResolveOpts } from "./remote-resolver.js";
7
- export type { RemoteResolverOpts, ResolveTreeRequest, ResolveTreeResponse, SerializableResolveOpts, } from "./remote-resolver.js";
8
- export { createWofResolver } from "./resolve.js";
9
- export { DEFAULT_PLACETYPE_MAP, PLACETYPE_FILTER_GROUPS, expandPlacetypeFilter } from "./types.js";
13
+ export { DEFAULT_PLACETYPE_MAP, PLACETYPE_FILTER_GROUPS, expandPlacetypeFilter, isPlacetypeFallback } from "./types.js";
10
14
  export type { AddressPointHit, AddressPointLookup, Ancestor, CoincidentLocality, InterpolatedPointHit, InterpolationLookup, PlacetypeMap, ResolveOpts, ResolvedPlace, Resolver, ResolverBackend, } from "./types.js";
11
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../resolver/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAC9E,YAAY,EACX,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,GACvB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAClG,YAAY,EACX,eAAe,EACf,kBAAkB,EAClB,QAAQ,EACR,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACX,aAAa,EACb,QAAQ,EACR,eAAe,GACf,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../resolver/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AACvH,YAAY,EACX,eAAe,EACf,kBAAkB,EAClB,QAAQ,EACR,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACX,aAAa,EACb,QAAQ,EACR,eAAe,GACf,MAAM,YAAY,CAAA"}
@@ -2,8 +2,13 @@
2
2
  * @copyright Sister Software
3
3
  * @license AGPL-3.0
4
4
  * @author Teffen Ellis, et al.
5
+ *
6
+ * The resolver TYPE CONTRACT — `ResolverBackend`, `Resolver`, `ResolveOpts`, `ResolvedPlace`, the
7
+ * lookup interfaces, the placetype map. Pure types + tiny helpers; NO implementation, so `core`
8
+ * stays a dependency-free leaf and `core/pipeline` can compose the resolver structurally without
9
+ * a cycle. The IMPLEMENTATION (`createWofResolver`, `RemoteResolver`, span-rescore) lives in
10
+ * `@mailwoman/resolver` (#215), which depends on this + `@mailwoman/spatial` +
11
+ * `@mailwoman/codex`.
5
12
  */
6
- export { RemoteResolver, serializableResolveOpts } from "./remote-resolver.js";
7
- export { createWofResolver } from "./resolve.js";
8
- export { DEFAULT_PLACETYPE_MAP, PLACETYPE_FILTER_GROUPS, expandPlacetypeFilter } from "./types.js";
13
+ export { DEFAULT_PLACETYPE_MAP, PLACETYPE_FILTER_GROUPS, expandPlacetypeFilter, isPlacetypeFallback } from "./types.js";
9
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../resolver/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAO9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../resolver/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA"}
@@ -7,7 +7,7 @@
7
7
  * lookup backend.
8
8
  *
9
9
  * The interface is deliberately decoupled from any specific resolver implementation. The first
10
- * shipped impl is `@mailwoman/resolver-wof-sqlite`, but the same contract supports a future
10
+ * shipped impl is `@mailwoman/core/resolver-wof-sqlite`, but the same contract supports a future
11
11
  * `RemoteResolver` adapter (Phase 4.4 — Pelias / BAN / Nominatim) without a public-API break.
12
12
  *
13
13
  * See `docs/plan/phases/PHASE_4_3_resolver_integration.md` for the design intent.
@@ -15,8 +15,8 @@
15
15
  import type { AddressTree, ComponentTag } from "../decoder/types.js";
16
16
  /**
17
17
  * One candidate place returned by a resolver. Mirrors the shape used by
18
- * `@mailwoman/resolver-wof-sqlite`'s `PlaceCandidate` — kept structurally compatible so a callsite
19
- * holding a `PlaceCandidate` can be passed where a `ResolvedPlace` is expected.
18
+ * `@mailwoman/core/resolver-wof-sqlite`'s `PlaceCandidate` — kept structurally compatible so a
19
+ * callsite holding a `PlaceCandidate` can be passed where a `ResolvedPlace` is expected.
20
20
  */
21
21
  export interface ResolvedPlace {
22
22
  /** Resolver-specific place identifier (e.g. WOF id). */
@@ -69,8 +69,8 @@ export interface ResolvedPlace {
69
69
  * Pull-based contract for a single resolver query. The resolver knows nothing about `AddressTree` —
70
70
  * it just answers "what place is named X, optionally constrained by Y?"
71
71
  *
72
- * Structurally compatible with `PlaceLookup` from `@mailwoman/resolver-wof-sqlite` so the latter
73
- * satisfies this interface without an adapter shim.
72
+ * Structurally compatible with `PlaceLookup` from `@mailwoman/core/resolver-wof-sqlite` so the
73
+ * latter satisfies this interface without an adapter shim.
74
74
  */
75
75
  export interface ResolverBackend {
76
76
  findPlace(query: {
@@ -316,6 +316,39 @@ export interface ResolveOpts {
316
316
  * Report: docs/articles/evals/2026-06-14-interp-radius-calibration.md.
317
317
  */
318
318
  interpolationRadiusCalibration?: number;
319
+ /**
320
+ * Span-rescore tier (#370). When set, AND the tree resolved nothing, recover a dropped/fragmented
321
+ * locality from the raw text: enumerate raw-token spans, exact-match the same-country gazetteer
322
+ * (longest-wins + postcode-consistency gate), and inject the recovered locality as a resolved
323
+ * node. Targets the EU no-result tail the model leaves when it fragments an accented locality
324
+ * token ("Grudziądz" → "Grudzi"+"dz", #555). Default-off + byte-stable when unset; never disturbs
325
+ * a tree that already resolved (the #685 brake). Validated in
326
+ * `docs/articles/evals/2026-06-23-370-span-rescore.mdx`.
327
+ */
328
+ spanRescore?: boolean;
329
+ /**
330
+ * Postcode-consistency gate radius (km) for the span-rescore tier — reject a recovered locality
331
+ * farther than this from where the postcode resolves. Only bites when the backend has postcode
332
+ * coverage (else no anchor, no gate). Default 50.
333
+ */
334
+ spanRescoreGateKm?: number;
335
+ /**
336
+ * Postcode-disambiguated locality selection (#370 "Lever A"). When set, AND a locality resolves
337
+ * far from a resolved sibling postcode, re-pick the same-named candidate (from the lookup's
338
+ * already- captured `alternatives`) nearest the postcode; if none reconciles within the gate,
339
+ * fall the coordinate back to the postcode point and flag `postcode_city_mismatch`. Targets the
340
+ * dominant failure mode on the EU/AU panel — a same-named town resolved to the wrong instance
341
+ * while the postcode that would disambiguate it sits resolved in the same tree (e.g. "06260
342
+ * Saint-Pierre" → 617 km off, postcode 06260 correct). Only bites where the backend resolved the
343
+ * postcode to a point (so it composes with postcode coverage, #193). Default-off + byte-stable
344
+ * when unset.
345
+ */
346
+ postcodeConsistency?: boolean;
347
+ /**
348
+ * Gate radius (km) for {@link postcodeConsistency} — a locality farther than this from the
349
+ * resolved postcode is re-picked or demoted. Default 50.
350
+ */
351
+ postcodeConsistencyGateKm?: number;
319
352
  hierarchyCompletion?: boolean;
320
353
  /** @deprecated Renamed to {@link hierarchyCompletion} (#405 generalized #387). Still honored. */
321
354
  cityStateFallback?: boolean;
@@ -371,9 +404,10 @@ export declare const DEFAULT_PLACETYPE_MAP: PlacetypeMap;
371
404
  * candidate (which is QA-visible). Same exact-type preference applies.
372
405
  *
373
406
  * This table is the single source of truth for that expansion, shared by every lookup backend
374
- * (`@mailwoman/resolver-wof-sqlite`, `@mailwoman/resolver-wof-wasm`, and the demo's httpvfs lookup)
375
- * so the Node and browser resolvers can't drift. Keyed by the REQUESTED placetype. Placetypes
376
- * without an entry pass through unchanged — an explicit `placetype: "borough"` query stays narrow.
407
+ * (`@mailwoman/core/resolver-wof-sqlite`, `@mailwoman/core/resolver-wof-wasm`, and the demo's
408
+ * httpvfs lookup) so the Node and browser resolvers can't drift. Keyed by the REQUESTED placetype.
409
+ * Placetypes without an entry pass through unchanged — an explicit `placetype: "borough"` query
410
+ * stays narrow.
377
411
  */
378
412
  export declare const PLACETYPE_FILTER_GROUPS: Readonly<Record<string, readonly string[]>>;
379
413
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../resolver/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAEpE;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC7B,wDAAwD;IACxD,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAA;IACZ,0FAA0F;IAC1F,SAAS,EAAE,MAAM,CAAA;IACjB,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAA;IACf,mDAAmD;IACnD,GAAG,EAAE,MAAM,CAAA;IACX,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAA;IACX,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC3B;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAA;IACb;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,UAAU,CAAA;CAC9B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC/B,SAAS,CAAC,KAAK,EAAE;QAChB,IAAI,EAAE,MAAM,CAAA;QACZ,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;QAC7B,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;QAC1B;;;;;WAKG;QACH,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,KAAK,CAAC,EAAE,MAAM,CAAA;KACd,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;IAC5B;;;;;;OAMG;IACH,uBAAuB,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,kBAAkB,EAAE,CAAA;IACxE;;;;;OAKG;IACH,SAAS,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,EAAE,CAAA;CAC3C;AAED,oGAAoG;AACpG,MAAM,WAAW,QAAQ;IACxB,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;CACZ;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACxD;;;OAGG;IACH,gBAAgB,EAAE,MAAM,CAAA;IACxB,kGAAkG;IAClG,UAAU,EAAE,MAAM,CAAA;IAClB,yFAAyF;IACzF,UAAU,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAA;IACd,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAA;CACf;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IAClC,IAAI,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,eAAe,GAAG,IAAI,CAAA;CAC7G;AAED;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACpC,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,YAAY,EAAE,IAAI,CAAA;IAClB;;;OAGG;IACH,MAAM,EAAE,eAAe,GAAG,aAAa,CAAA;IACvC,gGAAgG;IAChG,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,gGAAgG;IAChG,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAA;IAC3B,6EAA6E;IAC7E,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CACf;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IACnC,IAAI,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,oBAAoB,GAAG,IAAI,CAAA;CAC/F;AAED,MAAM,WAAW,WAAW;IAC3B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxC;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH;;;;OAIG;IACH,aAAa,CAAC,EAAE,kBAAkB,CAAA;IAClC;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,mBAAmB,CAAA;IACnC;;;;;;;;;;OAUG;IACH,8BAA8B,CAAC,EAAE,MAAM,CAAA;IACvC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,iGAAiG;IACjG,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAA;AAEhE,eAAO,MAAM,qBAAqB,EAAE,YAUnC,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAI/E,CAAA;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,IAAI,GAAG,IAAI,CAAA;AAC7D,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAAA;AAC9E,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,GAAG,MAAM,EAAE,GAAG,IAAI,CAAA;AAsB5F;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAKnG;AAED;;;;;;GAMG;AACH,MAAM,WAAW,QAAQ;IACxB,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;CACxE"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../resolver/types.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@
7
7
  * lookup backend.
8
8
  *
9
9
  * The interface is deliberately decoupled from any specific resolver implementation. The first
10
- * shipped impl is `@mailwoman/resolver-wof-sqlite`, but the same contract supports a future
10
+ * shipped impl is `@mailwoman/core/resolver-wof-sqlite`, but the same contract supports a future
11
11
  * `RemoteResolver` adapter (Phase 4.4 — Pelias / BAN / Nominatim) without a public-API break.
12
12
  *
13
13
  * See `docs/plan/phases/PHASE_4_3_resolver_integration.md` for the design intent.
@@ -50,9 +50,10 @@ export const DEFAULT_PLACETYPE_MAP = {
50
50
  * candidate (which is QA-visible). Same exact-type preference applies.
51
51
  *
52
52
  * This table is the single source of truth for that expansion, shared by every lookup backend
53
- * (`@mailwoman/resolver-wof-sqlite`, `@mailwoman/resolver-wof-wasm`, and the demo's httpvfs lookup)
54
- * so the Node and browser resolvers can't drift. Keyed by the REQUESTED placetype. Placetypes
55
- * without an entry pass through unchanged — an explicit `placetype: "borough"` query stays narrow.
53
+ * (`@mailwoman/core/resolver-wof-sqlite`, `@mailwoman/core/resolver-wof-wasm`, and the demo's
54
+ * httpvfs lookup) so the Node and browser resolvers can't drift. Keyed by the REQUESTED placetype.
55
+ * Placetypes without an entry pass through unchanged — an explicit `placetype: "borough"` query
56
+ * stays narrow.
56
57
  */
57
58
  export const PLACETYPE_FILTER_GROUPS = {
58
59
  locality: ["locality", "borough", "localadmin"],
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../resolver/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AA+UH,MAAM,CAAC,MAAM,qBAAqB,GAAiB;IAClD,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,kBAAkB,EAAE,UAAU;IAC9B,SAAS,EAAE,QAAQ;IACnB,0FAA0F;IAC1F,6FAA6F;IAC7F,2FAA2F;IAC3F,QAAQ,EAAE,YAAY;CACtB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAgD;IACnF,QAAQ,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,YAAY,CAAC;IAC/C,MAAM,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,MAAM,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC;CACjC,CAAA;AAUD,MAAM,UAAU,qBAAqB,CAAC,UAAoC;IACzE,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAA;IAC5B,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACpC,KAAK,MAAM,QAAQ,IAAI,uBAAuB,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1E,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAChD,CAAC;IACF,CAAC;IACD,OAAO,GAAG,CAAA;AACX,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,yBAAyB,GAAwB,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,CAAA;AAE9F;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CAAC,kBAA0B,EAAE,kBAA0B;IACzF,MAAM,KAAK,GAAG,uBAAuB,CAAC,kBAAkB,CAAC,CAAA;IACzD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAA;IACxB,IAAI,kBAAkB,KAAK,kBAAkB;QAAE,OAAO,KAAK,CAAA;IAC3D,OAAO,yBAAyB,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAA;AAC/F,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../resolver/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAgXH,MAAM,CAAC,MAAM,qBAAqB,GAAiB;IAClD,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,kBAAkB,EAAE,UAAU;IAC9B,SAAS,EAAE,QAAQ;IACnB,0FAA0F;IAC1F,6FAA6F;IAC7F,2FAA2F;IAC3F,QAAQ,EAAE,YAAY;CACtB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAgD;IACnF,QAAQ,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,YAAY,CAAC;IAC/C,MAAM,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,MAAM,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC;CACjC,CAAA;AAUD,MAAM,UAAU,qBAAqB,CAAC,UAAoC;IACzE,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAA;IAC5B,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACpC,KAAK,MAAM,QAAQ,IAAI,uBAAuB,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1E,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAChD,CAAC;IACF,CAAC;IACD,OAAO,GAAG,CAAA;AACX,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,yBAAyB,GAAwB,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,CAAA;AAE9F;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CAAC,kBAA0B,EAAE,kBAA0B;IACzF,MAAM,KAAK,GAAG,uBAAuB,CAAC,kBAAkB,CAAC,CAAA;IACzD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAA;IACxB,IAAI,kBAAkB,KAAK,kBAAkB;QAAE,OAAO,KAAK,CAAA;IAC3D,OAAO,yBAAyB,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAA;AAC/F,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mailwoman/core",
3
- "version": "4.13.0",
3
+ "version": "4.14.0",
4
4
  "description": "Mailwoman core: tokenization, classification primitives, solver, formatter, resources, filters, solvers, utils.",
5
5
  "license": "AGPL-3.0-only",
6
6
  "repository": {
@@ -66,7 +66,7 @@
66
66
  "pino-pretty": "^13.1.3",
67
67
  "pluralize": "^8.0.0",
68
68
  "regenerate": "^1.4.2",
69
- "spliterator": "^2.0.0",
69
+ "spliterator": "^2.2.1",
70
70
  "table": "^6.9.0"
71
71
  },
72
72
  "devDependencies": {
@@ -1,56 +0,0 @@
1
- /**
2
- * @copyright Sister Software
3
- * @license AGPL-3.0
4
- * @author Teffen Ellis, et al.
5
- *
6
- * `RemoteResolver` — the `Resolver` interface (`resolveTree`) over HTTP. The adapter the interface
7
- * docstring anticipated (Phase 4.4): a client POSTs a parsed `AddressTree` + the serializable
8
- * `ResolveOpts` to a resolver service, which owns the gazetteer + situs/interpolation shards,
9
- * runs the cascade, and returns the resolved tree. Two payoffs:
10
- *
11
- * 1. **Multi-instance** — stateless parser nodes (the ~30 MB ONNX model) talk to ONE resolver service
12
- * (the multi-GB gazetteer + shards). `parse` locally, `new RemoteResolver(...).resolveTree`
13
- * remotely — same interface the in-process `WofResolver` satisfies, so it's a drop-in.
14
- * 2. **Canary** — point it at a second resolver build (or an adapter fronting Pelias/Nominatim/BAN)
15
- * and diff the resolved trees through the identical contract.
16
- *
17
- * Pure transport: `fetch` only, no node-specific deps (runs in the browser too). The
18
- * `addressPoints` / `interpolation` opts are LIVE SQLite handles — not serializable — so they're
19
- * stripped before the POST; the resolver service supplies its own from the tree's region (the
20
- * data lives server-side, which is the whole point). All other opts (defaultCountry, calibration,
21
- * hierarchyCompletion, …) ride along.
22
- */
23
- import type { AddressTree } from "../decoder/types.js";
24
- import type { ResolveOpts, Resolver } from "./types.js";
25
- /** `ResolveOpts` minus the non-serializable live lookup handles. What actually crosses the wire. */
26
- export type SerializableResolveOpts = Omit<ResolveOpts, "addressPoints" | "interpolation">;
27
- /** Strip the live lookup handles from `ResolveOpts` so the rest can be JSON-serialized over HTTP. */
28
- export declare function serializableResolveOpts(opts?: ResolveOpts): SerializableResolveOpts | undefined;
29
- export interface RemoteResolverOpts {
30
- /**
31
- * Full URL of the resolver service's resolve-tree endpoint, e.g.
32
- * `http://resolver:7081/api/resolve-tree`.
33
- */
34
- endpoint: string;
35
- /** Injectable fetch (tests / custom agents). Defaults to the global `fetch`. */
36
- fetch?: typeof fetch;
37
- /** Per-request timeout in ms. Default 10000. */
38
- timeoutMs?: number;
39
- /** Extra headers (auth, tracing). `Content-Type: application/json` is always set. */
40
- headers?: Record<string, string>;
41
- }
42
- /** The wire request body `POST <endpoint>` expects (and the matching server handler parses). */
43
- export interface ResolveTreeRequest {
44
- tree: AddressTree;
45
- opts?: SerializableResolveOpts;
46
- }
47
- /** The wire response body the server returns. */
48
- export interface ResolveTreeResponse {
49
- tree: AddressTree;
50
- }
51
- export declare class RemoteResolver implements Resolver {
52
- #private;
53
- constructor(opts: RemoteResolverOpts);
54
- resolveTree(tree: AddressTree, opts?: ResolveOpts): Promise<AddressTree>;
55
- }
56
- //# sourceMappingURL=remote-resolver.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"remote-resolver.d.ts","sourceRoot":"","sources":["../../resolver/remote-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAEvD,oGAAoG;AACpG,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,WAAW,EAAE,eAAe,GAAG,eAAe,CAAC,CAAA;AAE1F,qGAAqG;AACrG,wBAAgB,uBAAuB,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,uBAAuB,GAAG,SAAS,CAI/F;AAED,MAAM,WAAW,kBAAkB;IAClC;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB,gFAAgF;IAChF,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;IACpB,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,qFAAqF;IACrF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC;AAED,gGAAgG;AAChG,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,WAAW,CAAA;IACjB,IAAI,CAAC,EAAE,uBAAuB,CAAA;CAC9B;AAED,iDAAiD;AACjD,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,WAAW,CAAA;CACjB;AAED,qBAAa,cAAe,YAAW,QAAQ;;gBAMlC,IAAI,EAAE,kBAAkB;IAQ9B,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;CAuB9E"}
@@ -1,68 +0,0 @@
1
- /**
2
- * @copyright Sister Software
3
- * @license AGPL-3.0
4
- * @author Teffen Ellis, et al.
5
- *
6
- * `RemoteResolver` — the `Resolver` interface (`resolveTree`) over HTTP. The adapter the interface
7
- * docstring anticipated (Phase 4.4): a client POSTs a parsed `AddressTree` + the serializable
8
- * `ResolveOpts` to a resolver service, which owns the gazetteer + situs/interpolation shards,
9
- * runs the cascade, and returns the resolved tree. Two payoffs:
10
- *
11
- * 1. **Multi-instance** — stateless parser nodes (the ~30 MB ONNX model) talk to ONE resolver service
12
- * (the multi-GB gazetteer + shards). `parse` locally, `new RemoteResolver(...).resolveTree`
13
- * remotely — same interface the in-process `WofResolver` satisfies, so it's a drop-in.
14
- * 2. **Canary** — point it at a second resolver build (or an adapter fronting Pelias/Nominatim/BAN)
15
- * and diff the resolved trees through the identical contract.
16
- *
17
- * Pure transport: `fetch` only, no node-specific deps (runs in the browser too). The
18
- * `addressPoints` / `interpolation` opts are LIVE SQLite handles — not serializable — so they're
19
- * stripped before the POST; the resolver service supplies its own from the tree's region (the
20
- * data lives server-side, which is the whole point). All other opts (defaultCountry, calibration,
21
- * hierarchyCompletion, …) ride along.
22
- */
23
- /** Strip the live lookup handles from `ResolveOpts` so the rest can be JSON-serialized over HTTP. */
24
- export function serializableResolveOpts(opts) {
25
- if (!opts)
26
- return undefined;
27
- const { addressPoints: _ap, interpolation: _ip, ...rest } = opts;
28
- return rest;
29
- }
30
- export class RemoteResolver {
31
- #endpoint;
32
- #fetch;
33
- #timeoutMs;
34
- #headers;
35
- constructor(opts) {
36
- if (!opts.endpoint)
37
- throw new Error("RemoteResolver: `endpoint` is required");
38
- this.#endpoint = opts.endpoint;
39
- this.#fetch = opts.fetch ?? globalThis.fetch;
40
- this.#timeoutMs = opts.timeoutMs ?? 10_000;
41
- this.#headers = opts.headers ?? {};
42
- }
43
- async resolveTree(tree, opts) {
44
- const controller = new AbortController();
45
- const timer = setTimeout(() => controller.abort(), this.#timeoutMs);
46
- try {
47
- const body = { tree, opts: serializableResolveOpts(opts) };
48
- const res = await this.#fetch(this.#endpoint, {
49
- method: "POST",
50
- headers: { "Content-Type": "application/json", ...this.#headers },
51
- body: JSON.stringify(body),
52
- signal: controller.signal,
53
- });
54
- if (!res.ok) {
55
- throw new Error(`RemoteResolver: ${this.#endpoint} → HTTP ${res.status} ${res.statusText}`);
56
- }
57
- const json = (await res.json());
58
- if (!json || !json.tree || !Array.isArray(json.tree.roots)) {
59
- throw new Error("RemoteResolver: malformed response (missing `tree.roots`)");
60
- }
61
- return json.tree;
62
- }
63
- finally {
64
- clearTimeout(timer);
65
- }
66
- }
67
- }
68
- //# sourceMappingURL=remote-resolver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"remote-resolver.js","sourceRoot":"","sources":["../../resolver/remote-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAQH,qGAAqG;AACrG,MAAM,UAAU,uBAAuB,CAAC,IAAkB;IACzD,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAA;IAC3B,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAA;IAChE,OAAO,IAAI,CAAA;AACZ,CAAC;AA2BD,MAAM,OAAO,cAAc;IACjB,SAAS,CAAQ;IACjB,MAAM,CAAc;IACpB,UAAU,CAAQ;IAClB,QAAQ,CAAwB;IAEzC,YAAY,IAAwB;QACnC,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;QAC7E,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC9B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAA;QAC5C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM,CAAA;QAC1C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAA;IACnC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAiB,EAAE,IAAkB;QACtD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;QACxC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;QACnE,IAAI,CAAC;YACJ,MAAM,IAAI,GAAuB,EAAE,IAAI,EAAE,IAAI,EAAE,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAA;YAC9E,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE;gBAC7C,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;gBACjE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAC1B,MAAM,EAAE,UAAU,CAAC,MAAM;aACzB,CAAC,CAAA;YACF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,CAAC,SAAS,WAAW,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAA;YAC5F,CAAC;YACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAiC,CAAA;YAC/D,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5D,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;YAC7E,CAAC;YACD,OAAO,IAAI,CAAC,IAAI,CAAA;QACjB,CAAC;gBAAS,CAAC;YACV,YAAY,CAAC,KAAK,CAAC,CAAA;QACpB,CAAC;IACF,CAAC;CACD"}
@@ -1,21 +0,0 @@
1
- /**
2
- * @copyright Sister Software
3
- * @license AGPL-3.0
4
- * @author Teffen Ellis, et al.
5
- *
6
- * `resolveTree` — walk an `AddressTree` top-down and decorate matched nodes with resolver- supplied
7
- * attribution + coordinates.
8
- *
9
- * The walk is parent-constraint-aware: when a parent node resolves to a place id, its children's
10
- * lookups are scoped to descendants of that parent. This dramatically narrows the search space
11
- * for ambiguous names — `Springfield` under a resolved `Illinois` parent resolves to the IL one,
12
- * not the MA one.
13
- */
14
- import { type Resolver, type ResolverBackend } from "./types.js";
15
- /**
16
- * Build a `Resolver` backed by a `ResolverBackend`. The backend can be any concrete impl
17
- * structurally compatible with `PlaceLookup` — e.g. `new WofSqlitePlaceLookup({ databasePath
18
- * }).asResolverBackend()` or a fake for tests.
19
- */
20
- export declare function createWofResolver(backend: ResolverBackend): Resolver;
21
- //# sourceMappingURL=resolve.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../resolver/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EASN,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,MAAM,YAAY,CAAA;AAEnB;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,QAAQ,CAEpE"}
@@ -1,463 +0,0 @@
1
- /**
2
- * @copyright Sister Software
3
- * @license AGPL-3.0
4
- * @author Teffen Ellis, et al.
5
- *
6
- * `resolveTree` — walk an `AddressTree` top-down and decorate matched nodes with resolver- supplied
7
- * attribution + coordinates.
8
- *
9
- * The walk is parent-constraint-aware: when a parent node resolves to a place id, its children's
10
- * lookups are scoped to descendants of that parent. This dramatically narrows the search space
11
- * for ambiguous names — `Springfield` under a resolved `Illinois` parent resolves to the IL one,
12
- * not the MA one.
13
- */
14
- import { DEFAULT_PLACETYPE_MAP, isPlacetypeFallback, } from "./types.js";
15
- /**
16
- * Build a `Resolver` backed by a `ResolverBackend`. The backend can be any concrete impl
17
- * structurally compatible with `PlaceLookup` — e.g. `new WofSqlitePlaceLookup({ databasePath
18
- * }).asResolverBackend()` or a fake for tests.
19
- */
20
- export function createWofResolver(backend) {
21
- return new WofResolver(backend);
22
- }
23
- /**
24
- * Pick the completion locality when an admin maps to several coincident same-name candidates
25
- * (#405). Population is the PRIMARY signal — the principal city is the populous one, and it can sit
26
- * FARTHER from the admin centroid than a tiny same-name hamlet (the Niigata case from #403).
27
- * Nearest centroid breaks a population tie; a genuine tie (same population AND distance) ABSTAINS
28
- * rather than guess.
29
- */
30
- function pickCompletion(candidates) {
31
- if (candidates.length === 0)
32
- return null;
33
- if (candidates.length === 1)
34
- return candidates[0];
35
- const ranked = [...candidates].sort((a, b) => b.population - a.population || a.distanceKm - b.distanceKm);
36
- const [first, second] = ranked;
37
- if (first.population === second.population && first.distanceKm === second.distanceKm)
38
- return null;
39
- return first;
40
- }
41
- /**
42
- * Find the first postcode value anywhere in the tree (a one-shot pre-scan; postcode and locality
43
- * are siblings, so the top-down walk wouldn't otherwise let the locality lookup see it).
44
- */
45
- function firstPostcodeValue(roots) {
46
- const stack = [...roots];
47
- while (stack.length > 0) {
48
- const n = stack.pop();
49
- if (n.tag === "postcode" && n.value.trim().length > 0)
50
- return n.value.trim();
51
- stack.push(...n.children);
52
- }
53
- return undefined;
54
- }
55
- /** Street-name component tags that, with the street node itself, reconstruct the full street string. */
56
- const STREET_NAME_TAGS = new Set(["street", "street_prefix", "street_prefix_particle", "street_suffix"]);
57
- /**
58
- * Reassemble the full street string from the street node's subtree (#483 coverage fix). The parser
59
- * nests the directional/suffix as `street_prefix`/`street_suffix` CHILDREN of `street`
60
- * (containment.ts), so `street.value` alone is the bare base name ("Sheldon" for "East Sheldon Rd")
61
- * — which misses the coordinate shards keyed on the FULL normalized name. Collect street + its
62
- * prefix/particle/suffix descendants (NOT house_number/unit, which also nest under street), order
63
- * by span offset, and join.
64
- */
65
- function assembleStreetValue(streetNode, directionalUnit) {
66
- const parts = [];
67
- const stack = [streetNode];
68
- while (stack.length > 0) {
69
- const n = stack.pop();
70
- if (STREET_NAME_TAGS.has(n.tag) && n.value.trim())
71
- parts.push(n);
72
- stack.push(...n.children);
73
- }
74
- // #718 admin-tail: a directional quadrant the model mis-tagged `unit` ("1532 Taylor Street NE" →
75
- // [unit] "NE") folds back into the street key by span order, so the situs/interp lookup matches the
76
- // shard's "taylor street northeast" (the lookup normalizer expands the abbreviation). Lookup-key
77
- // only — the parse output and admin resolution are untouched. Byte-stable when absent (undefined).
78
- if (directionalUnit && directionalUnit.value.trim())
79
- parts.push(directionalUnit);
80
- parts.sort((a, b) => a.start - b.start);
81
- return parts.map((n) => n.value.trim()).join(" ");
82
- }
83
- /**
84
- * Directional quadrant values the model sometimes emits as a `unit` node instead of inside the
85
- * street subtree (#718 admin-tail diagnostic: ~19% of the admin-fallback tail, 83% of DC). Folded
86
- * into the street lookup key by {@link assembleStreetValue}; the situs/interp lookup normalizer
87
- * expands the abbreviation ("ne" → "northeast") so the shard's full street name matches.
88
- */
89
- const STREET_DIRECTIONAL_UNITS = new Set([
90
- "n",
91
- "s",
92
- "e",
93
- "w",
94
- "ne",
95
- "nw",
96
- "se",
97
- "sw",
98
- "north",
99
- "south",
100
- "east",
101
- "west",
102
- "northeast",
103
- "northwest",
104
- "southeast",
105
- "southwest",
106
- ]);
107
- function isDirectionalUnit(value) {
108
- return STREET_DIRECTIONAL_UNITS.has(value.trim().toLowerCase().replace(/\./g, ""));
109
- }
110
- /**
111
- * Address-point tier (#476): find `street` + `house_number` in the tree (first occurrence,
112
- * depth-first), scope by the tree's postcode/locality values, and on an exact hit stamp the point
113
- * onto the STREET node's metadata. Additive only — admin resolution is never altered.
114
- */
115
- function applyAddressPoint(roots, lookup) {
116
- let street;
117
- let houseNumber;
118
- let directionalUnit;
119
- let locality;
120
- let postcode;
121
- const stack = [...roots];
122
- while (stack.length > 0) {
123
- const n = stack.pop();
124
- if (n.tag === "street" && !street)
125
- street = n;
126
- if (n.tag === "house_number" && !houseNumber)
127
- houseNumber = n;
128
- if (n.tag === "unit" && !directionalUnit && isDirectionalUnit(n.value))
129
- directionalUnit = n;
130
- if (n.tag === "locality" && !locality && n.value.trim())
131
- locality = n.value.trim();
132
- if (n.tag === "postcode" && !postcode && n.value.trim())
133
- postcode = n.value.trim();
134
- stack.push(...n.children);
135
- }
136
- if (!street || !houseNumber)
137
- return;
138
- const hit = lookup.find({
139
- street: assembleStreetValue(street, directionalUnit),
140
- number: houseNumber.value,
141
- postcode,
142
- locality,
143
- });
144
- if (!hit)
145
- return;
146
- street.metadata = {
147
- ...street.metadata,
148
- address_point: { lat: hit.lat, lon: hit.lon, source: hit.source, release: hit.release },
149
- resolution_tier: "address_point",
150
- };
151
- }
152
- /**
153
- * House-number interpolation tier (#483): the third rung, consulted ONLY when the exact
154
- * address-point tier ({@link applyAddressPoint}) did NOT already stamp the street node
155
- * (`resolution_tier === "address_point"`). That gate IS the "after the exact-point fall-through" —
156
- * an estimate never overwrites a real situs point. Postcode-scoped (no locality — the interpolators
157
- * abstain statewide without a postcode). Stamps a DISTINCT metadata key (`interpolated_point`,
158
- * never `address_point`). Additive only — admin resolution is untouched.
159
- */
160
- function applyInterpolation(roots, lookup, radiusCalibration) {
161
- let street;
162
- let houseNumber;
163
- let directionalUnit;
164
- let postcode;
165
- const stack = [...roots];
166
- while (stack.length > 0) {
167
- const n = stack.pop();
168
- if (n.tag === "street" && !street)
169
- street = n;
170
- if (n.tag === "house_number" && !houseNumber)
171
- houseNumber = n;
172
- if (n.tag === "unit" && !directionalUnit && isDirectionalUnit(n.value))
173
- directionalUnit = n;
174
- if (n.tag === "postcode" && !postcode && n.value.trim())
175
- postcode = n.value.trim();
176
- stack.push(...n.children);
177
- }
178
- if (!street || !houseNumber)
179
- return;
180
- // The fall-through gate: an exact situs point already won — never override it with an estimate.
181
- if (street.metadata?.["resolution_tier"] === "address_point")
182
- return;
183
- const hit = lookup.find({ street: assembleStreetValue(street, directionalUnit), number: houseNumber.value, postcode });
184
- if (!hit)
185
- return;
186
- // Conformal-calibrated radius when the caller supplies a multiplier (#374): the raw half-segment
187
- // heuristic underestimates the true spread (~72% coverage on Travis); ×1.70 → a 90% bound. Default
188
- // (no multiplier) keeps the raw value, byte-stable. Preserve the raw radius for transparency.
189
- const calibrated = radiusCalibration ? Math.round(hit.uncertaintyM * radiusCalibration) : hit.uncertaintyM;
190
- street.metadata = {
191
- ...street.metadata,
192
- interpolated_point: { lat: hit.lat, lon: hit.lon, source: hit.source, release: hit.release },
193
- resolution_tier: "interpolated",
194
- uncertainty_m: calibrated,
195
- ...(radiusCalibration ? { uncertainty_raw_m: hit.uncertaintyM, uncertainty_calibration: radiusCalibration } : {}),
196
- interpolation_method: hit.method,
197
- ...(hit.parityMatched !== undefined ? { parity_matched: hit.parityMatched } : {}),
198
- ...(hit.bracket !== undefined ? { interpolation_bracket: hit.bracket } : {}),
199
- };
200
- }
201
- class WofResolver {
202
- #backend;
203
- constructor(backend) {
204
- this.#backend = backend;
205
- }
206
- async resolveTree(tree, opts = {}) {
207
- const state = {
208
- lookupsRemaining: opts.maxLookups ?? 10,
209
- // Full replacement when `placetypeMap` is supplied — callers that want to extend rather
210
- // than replace should spread DEFAULT_PLACETYPE_MAP themselves.
211
- placetypeMap: opts.placetypeMap ?? DEFAULT_PLACETYPE_MAP,
212
- minWinningScore: opts.minWinningScore ?? 0,
213
- candidatesPerLookup: opts.candidatesPerLookup ?? 5,
214
- defaultCountry: opts.defaultCountry,
215
- parentFallback: opts.parentFallback ?? true,
216
- postcode: firstPostcodeValue(tree.roots),
217
- anchorPosterior: opts.anchorPosterior,
218
- anchorWeight: opts.anchorWeight ?? 2.0,
219
- hardCountry: opts.hardCountry,
220
- // Default-ON (#402): completion only fires for a dual-role region whose locality the parser
221
- // dropped, and no-ops entirely when the backend has no relation (the browser WASM resolver, or
222
- // a gazetteer without `coincident_roles`). Pass `hierarchyCompletion: false` to opt out.
223
- // `cityStateFallback` is the #387 alias that #405 generalized — still honored.
224
- hierarchyCompletion: opts.hierarchyCompletion ?? opts.cityStateFallback ?? true,
225
- includeAncestors: opts.includeAncestors ?? false,
226
- localityNodePresent: false,
227
- resolvedRegion: null,
228
- resolvedRegionNode: null,
229
- };
230
- const newRoots = [];
231
- for (const root of tree.roots) {
232
- newRoots.push(await this.#walk(root, /* parentResolved */ null, state));
233
- }
234
- // Dual-role hierarchy completion (#405/#415). Only when enabled, a region resolved, and the parser
235
- // emitted NO locality — record the dropped locality as a SECONDARY ROLE (an interpretation) on the
236
- // resolved region node, from the backend's precomputed coincident-roles relation (#403). One node,
237
- // one span, two roles — no synthesized sibling. See ResolveOpts.hierarchyCompletion.
238
- if (state.hierarchyCompletion && state.resolvedRegion && state.resolvedRegionNode && !state.localityNodePresent) {
239
- this.#completeRegionRole(state.resolvedRegion, state.resolvedRegionNode);
240
- }
241
- // Address-point tier (#476): opt-in street-level exact match. After the admin walk so the
242
- // tier can never disturb admin attribution — it only ADDS the precise coordinate. Byte-stable
243
- // when opts.addressPoints is absent.
244
- if (opts.addressPoints) {
245
- applyAddressPoint(newRoots, opts.addressPoints);
246
- }
247
- // Interpolation tier (#483): strictly AFTER the exact-point block so an estimate can never
248
- // override a real situs point (applyInterpolation also gates on resolution_tier). Opt-in;
249
- // byte-stable when opts.interpolation is absent.
250
- if (opts.interpolation) {
251
- applyInterpolation(newRoots, opts.interpolation, opts.interpolationRadiusCalibration);
252
- }
253
- return { raw: tree.raw, roots: newRoots };
254
- }
255
- /**
256
- * Record a dropped dual-role locality as a `locality` INTERPRETATION on the resolved region node
257
- * (#415, generalizes #405's synthesized node). Consults `coincidentLocalitiesFor(regionId)` (O(1)
258
- * map lookup — no distance math, no backend query), picks the principal city
259
- * ({@link pickCompletion}: population-primary, distance tiebreak, abstain on a genuine tie), and
260
- * appends an interpretation to `regionNode.interpretations`. No-op when the backend has no
261
- * relation, the region isn't a dual-role place, or it abstains. The region node's primary role
262
- * stays `region`; the locality rides alongside.
263
- */
264
- #completeRegionRole(region, regionNode) {
265
- if (typeof region.id !== "number" || !this.#backend.coincidentLocalitiesFor)
266
- return;
267
- const loc = pickCompletion(this.#backend.coincidentLocalitiesFor(region.id));
268
- if (!loc)
269
- return;
270
- const interpretation = {
271
- tag: "locality",
272
- placeId: `wof:${loc.id}`,
273
- sourceId: `${loc.placetype}:${loc.id}`,
274
- lat: loc.lat,
275
- lon: loc.lon,
276
- confidence: 0,
277
- metadata: { relationship_type: loc.relationshipType, resolver_completed: true, resolver_name: loc.name },
278
- };
279
- regionNode.interpretations = [...(regionNode.interpretations ?? []), interpretation];
280
- }
281
- async #walk(node, parentResolved, state) {
282
- // Always clone — never mutate input nodes.
283
- const decorated = { ...node, children: [] };
284
- const placetype = state.placetypeMap[node.tag];
285
- // Track locality presence for hierarchy completion (#405): completion must NOT fire if the parser
286
- // already emitted a locality node (even one that failed to resolve) — it only fills a genuine
287
- // gap. Cheap and always-on; only consulted when hierarchyCompletion is set.
288
- if (placetype === "locality")
289
- state.localityNodePresent = true;
290
- let resolved = null;
291
- if (placetype && state.lookupsRemaining > 0 && node.value.trim().length > 0) {
292
- const picked = await this.#lookupAndPick(node, placetype, parentResolved, state);
293
- if (picked) {
294
- resolved = picked.top;
295
- decorateNode(decorated, picked.top, picked.alternatives);
296
- // Lineage attachment (#404): stamp the resolved place's ancestor chain onto metadata. Opt-in
297
- // + only when the backend supplies it, so the default stays byte-identical (no extra query).
298
- if (state.includeAncestors && this.#backend.ancestors) {
299
- decorated.metadata = { ...(decorated.metadata ?? {}), ancestors: this.#backend.ancestors(picked.top.id) };
300
- }
301
- // Capture the first resolved region (place + node) for hierarchy completion — the locality
302
- // interpretation is pushed onto this node in the post-walk pass.
303
- if (placetype === "region" && state.resolvedRegion === null) {
304
- state.resolvedRegion = picked.top;
305
- state.resolvedRegionNode = decorated;
306
- }
307
- }
308
- }
309
- const carryParent = resolved ?? parentResolved;
310
- for (const child of node.children) {
311
- decorated.children.push(await this.#walk(child, carryParent, state));
312
- }
313
- return decorated;
314
- }
315
- async #lookupAndPick(node, placetype, parentResolved, state) {
316
- state.lookupsRemaining--;
317
- const query = {
318
- text: node.value,
319
- placetype,
320
- limit: state.candidatesPerLookup,
321
- };
322
- // Pass the inherited parent constraint to the backend when available — `parentId` scopes to
323
- // the resolved parent's descendants. For `country`: a resolved parent's country wins, else
324
- // fall back to the caller's `defaultCountry`. Without this top-level hint a bare "IL" over a
325
- // multi-country gazetteer fuzzy-matches a foreign place (e.g. a French region) — see the
326
- // Direction-C resolver eval.
327
- if (parentResolved && typeof parentResolved.id === "number")
328
- query.parentId = parentResolved.id;
329
- // #194: a resolved parent's country wins, then the caller's `defaultCountry`, then the confident
330
- // placer `hardCountry`. All three are a HARD candidate filter. The placer's `hardCountry` is gated
331
- // upstream on high confidence (so it only fires when the model is sure), and on a miss the node is
332
- // left UNRESOLVED rather than re-resolved globally: the off-continent rows are precisely the ones
333
- // whose locality isn't in the country's gazetteer slice, so a global retry would just re-admit the
334
- // wrong-continent guess the hard filter exists to drop ("in-region or unresolved"). Measured: a
335
- // global fallback collapses back to the soft-prior baseline (FI p90 3050, PL p90 1078); pure-hard
336
- // collapses the tail (FI 18 km, PL p99 8172→494) at a coverage-bounded recall cost.
337
- const country = parentResolved?.country ?? state.defaultCountry ?? state.hardCountry;
338
- if (country)
339
- query.country = country;
340
- // Coordinate-first: hand the sibling postcode to locality lookups so the backend can inject
341
- // postcode-proximal candidates the name-match would miss. Only for locality (the placetype both
342
- // `locality` and `dependent_locality` map to); other placetypes ignore it.
343
- if (placetype === "locality" && state.postcode)
344
- query.postcode = state.postcode;
345
- let candidates;
346
- try {
347
- candidates = await this.#backend.findPlace(query);
348
- // Parent soft-gating: `parentId` is a HARD descendant filter in the backend, which wrongly
349
- // zeroes the result when the parent resolved wrong OR the gazetteer hierarchy is incomplete
350
- // (a real locality whose `ancestors` chain is missing its region). Rather than turn a
351
- // resolvable node into an unresolved one, retry once WITHOUT the parent constraint — we
352
- // prefer a parent-scoped hit but never sacrifice recall. The country constraint is kept, so
353
- // this still can't wander to a foreign place. Same logical resolution → no extra budget.
354
- if (candidates.length === 0 && state.parentFallback && query.parentId !== undefined) {
355
- delete query.parentId;
356
- candidates = await this.#backend.findPlace(query);
357
- }
358
- }
359
- catch {
360
- // Defensive: a backend failure should not abort the whole tree walk. Leave the node with
361
- // its classifier attribution intact.
362
- return null;
363
- }
364
- if (candidates.length === 0)
365
- return null;
366
- // Postcode-anchor re-rank (#369): when a country posterior is supplied (from the address's
367
- // postcode), boost candidates by `anchorWeight * posterior[candidate.country]` and re-sort, so a
368
- // postcode that pins the country pulls the right-country place over a higher-BM25 foreign namesake
369
- // (the "Berlin DE vs Berlin US" class the #59 harness measured). No-op when `anchorPosterior` is
370
- // undefined (the default) → byte-identical resolution.
371
- //
372
- // Applied to BOTH region and locality — the two placetypes that suffer cross-country namesake/
373
- // abbreviation collisions a country posterior can break. The region case is the one #447's window
374
- // fix couldn't reach: a bare 2-letter abbreviation is shared across countries ("VT" is
375
- // both Vermont and Viterbo; "ME" both Maine and Messina), so with no country signal the score
376
- // picks the wrong one — and because resolveTree resolves region FIRST and inherits its country
377
- // down, a wrong region poisons the locality too. The postcode posterior breaks the tie at the
378
- // region, and the right country then flows to the locality. (Country/macroregion/county are
379
- // excluded: they don't exhibit this collision class and carry country via `parentId` when nested.)
380
- //
381
- // Tier-SAFE ordering: the candidate's exact-match flag is the PRIMARY key, so the country pin
382
- // never crosses the exact/partial boundary. WITHIN a tier, `score + anchorWeight * posterior`
383
- // applies the (soft) country boost. So a confident US postcode keeps the US EXACT region
384
- // ("ME" → Maine) ahead of a more-populous US PARTIAL match (Missouri) AND, within the exact
385
- // tier, ahead of a foreign exact match (Messina IT); a soft posterior still blends with score.
386
- // (A plain additive re-rank loses the tier — it isn't encoded in `score` — and flips
387
- // "ME" → Missouri / "PA" → Alabama. Backends that don't set `exactMatch` degrade to additive.)
388
- const anchorEligible = placetype === "region" || placetype === "locality";
389
- let ranked = candidates;
390
- if (state.anchorPosterior && anchorEligible && candidates.length > 1) {
391
- const post = state.anchorPosterior;
392
- const w = state.anchorWeight;
393
- ranked = [...candidates].sort((a, b) => Number(b.exactMatch ?? false) - Number(a.exactMatch ?? false) ||
394
- b.score + w * (post[b.country] ?? 0) - (a.score + w * (post[a.country] ?? 0)));
395
- }
396
- // Exact-type preference (#718): when the placetype-equivalence group let a broader admin tier
397
- // (`macroregion`/`macrocounty`) into the candidate pool, prefer a candidate of the EXACT
398
- // requested type over the macro fallback — a real `region` (US state, DE Bundesland, ES
399
- // provincia) must win over a same-name macroregion namesake, so no real region silently
400
- // downgrades to a macro. STABLE partition: exact-type candidates keep their (already-ranked)
401
- // relative order ahead of fallbacks, so the score / anchor re-rank survives WITHIN each tier.
402
- // No-op for placetypes without a macro fallback (the byte-stable default) and when every
403
- // candidate is the same tier.
404
- const hasFallbackCandidate = ranked.some((c) => isPlacetypeFallback(placetype, c.placetype));
405
- if (hasFallbackCandidate && ranked.length > 1) {
406
- ranked = [
407
- ...ranked.filter((c) => !isPlacetypeFallback(placetype, c.placetype)),
408
- ...ranked.filter((c) => isPlacetypeFallback(placetype, c.placetype)),
409
- ];
410
- }
411
- const top = ranked[0];
412
- if (top.score < state.minWinningScore)
413
- return null;
414
- // Fallback-observability (#718): if the winner is a macro-type AND no exact-type candidate
415
- // existed for this span, annotate that a broader tier stood in for the true one. Additive —
416
- // identity/coordinate are unchanged; only `metadata.resolution_quality` is stamped downstream.
417
- if (isPlacetypeFallback(placetype, top.placetype)) {
418
- top.resolutionQuality = "fallback";
419
- }
420
- return { top, alternatives: ranked.slice(1) };
421
- }
422
- }
423
- /**
424
- * Stamp a node with resolver-supplied attribution. Displaces any prior classifier `source` /
425
- * `sourceId` into `metadata.classifier_source` / `metadata.classifier_source_id` so debugging tools
426
- * can still see who made the original assertion. Surfaces the runner-up candidates on
427
- * `alternatives` so callers can disambiguate (Springfield-class failures, [#8 in the failure
428
- * catalogue]).
429
- */
430
- function decorateNode(node, resolved, alternatives) {
431
- if (node.source !== undefined || node.sourceId !== undefined) {
432
- const meta = { ...(node.metadata ?? {}) };
433
- if (node.source !== undefined)
434
- meta["classifier_source"] = node.source;
435
- if (node.sourceId !== undefined)
436
- meta["classifier_source_id"] = node.sourceId;
437
- node.metadata = meta;
438
- }
439
- node.source = "resolver";
440
- node.sourceId = `${resolved.placetype}:${resolved.id}`;
441
- node.lat = resolved.lat;
442
- node.lon = resolved.lon;
443
- node.placeId = `wof:${resolved.id}`; // v1: only WOF resolvers; the URI scheme stays this simple
444
- // Record the resolver's ranking score AND the resolved place's CANONICAL name. The name is the
445
- // gazetteer's truth for the place we picked — distinct from `node.value` (the raw input span). It
446
- // lets consumers display the canonical name and lets the end-to-end eval check the resolver chose
447
- // the right PLACE (gazetteer-name vs ground-truth) rather than merely echoing the parser's text.
448
- node.metadata = { ...(node.metadata ?? {}), resolver_score: resolved.score, resolver_name: resolved.name };
449
- // The postcode/locality conflict flag (the falsehood differentiator): the postcode pointed to a
450
- // geographically different place than the parsed city name. Surface it so callers can warn rather
451
- // than silently trust the resolved point.
452
- if (resolved.mismatch)
453
- node.metadata["postcode_city_mismatch"] = true;
454
- // Fallback-observability (#718): a broader admin tier (macroregion/macrocounty) stood in for the
455
- // true region/county because no exact-type candidate existed. Additive annotation only — the
456
- // resolved coordinate/identity above is untouched; this just lets a consumer / QA pass see it.
457
- if (resolved.resolutionQuality)
458
- node.metadata["resolution_quality"] = resolved.resolutionQuality;
459
- if (alternatives.length > 0) {
460
- node.alternatives = alternatives;
461
- }
462
- }
463
- //# sourceMappingURL=resolve.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../resolver/resolve.ts"],"names":[],"mappings":"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"}