@mailwoman/resolver 4.16.2 → 5.1.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.
package/out/index.d.ts CHANGED
@@ -12,7 +12,7 @@
12
12
  */
13
13
  export { RemoteResolver, serializableResolveOpts } from "./remote-resolver.js";
14
14
  export type { RemoteResolverOpts, ResolveTreeRequest, ResolveTreeResponse, SerializableResolveOpts, } from "./remote-resolver.js";
15
- export { createWofResolver } from "./resolve.js";
15
+ export { createWOFResolver } from "./resolve.js";
16
16
  export { findRescoreCandidate, hasResolvedPlace } from "./span-rescore.js";
17
17
  export type { RescoreCandidate, SpanRescoreOptions } from "./span-rescore.js";
18
18
  export * from "@mailwoman/core/resolver";
package/out/index.js CHANGED
@@ -11,7 +11,7 @@
11
11
  * what used to be `@mailwoman/core/resolver`.
12
12
  */
13
13
  export { RemoteResolver, serializableResolveOpts } from "./remote-resolver.js";
14
- export { createWofResolver } from "./resolve.js";
14
+ export { createWOFResolver } from "./resolve.js";
15
15
  export { findRescoreCandidate, hasResolvedPlace } from "./span-rescore.js";
16
16
  // The type contract + placetype helpers live in core (pure types, keep core a leaf). Re-export so
17
17
  // consumers get the whole surface from `@mailwoman/resolver`.
@@ -10,7 +10,7 @@
10
10
  *
11
11
  * 1. **Multi-instance** — stateless parser nodes (the ~30 MB ONNX model) talk to ONE resolver service
12
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.
13
+ * remotely — same interface the in-process `WOFResolver` satisfies, so it's a drop-in.
14
14
  * 2. **Canary** — point it at a second resolver build (or an adapter fronting Pelias/Nominatim/BAN)
15
15
  * and diff the resolved trees through the identical contract.
16
16
  *
@@ -28,8 +28,7 @@ export type SerializableResolveOpts = Omit<ResolveOpts, "addressPoints" | "inter
28
28
  export declare function serializableResolveOpts(opts?: ResolveOpts): SerializableResolveOpts | undefined;
29
29
  export interface RemoteResolverOpts {
30
30
  /**
31
- * Full URL of the resolver service's resolve-tree endpoint, e.g.
32
- * `http://resolver:7081/api/resolve-tree`.
31
+ * Full URL of the resolver service's resolve-tree endpoint, e.g. `http://resolver:7081/api/resolve-tree`.
33
32
  */
34
33
  endpoint: string;
35
34
  /** Injectable fetch (tests / custom agents). Defaults to the global `fetch`. */
@@ -1 +1 @@
1
- {"version":3,"file":"remote-resolver.d.ts","sourceRoot":"","sources":["../remote-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAErE,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
+ {"version":3,"file":"remote-resolver.d.ts","sourceRoot":"","sources":["../remote-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAErE,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,CAK/F;AAED,MAAM,WAAW,kBAAkB;IAClC;;OAEG;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;CA2B9E"}
@@ -10,7 +10,7 @@
10
10
  *
11
11
  * 1. **Multi-instance** — stateless parser nodes (the ~30 MB ONNX model) talk to ONE resolver service
12
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.
13
+ * remotely — same interface the in-process `WOFResolver` satisfies, so it's a drop-in.
14
14
  * 2. **Canary** — point it at a second resolver build (or an adapter fronting Pelias/Nominatim/BAN)
15
15
  * and diff the resolved trees through the identical contract.
16
16
  *
@@ -1 +1 @@
1
- {"version":3,"file":"remote-resolver.js","sourceRoot":"","sources":["../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
+ {"version":3,"file":"remote-resolver.js","sourceRoot":"","sources":["../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;IAEhE,OAAO,IAAI,CAAA;AACZ,CAAC;AA0BD,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;QAEnE,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;YAEF,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;YAE/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;YAED,OAAO,IAAI,CAAC,IAAI,CAAA;QACjB,CAAC;gBAAS,CAAC;YACV,YAAY,CAAC,KAAK,CAAC,CAAA;QACpB,CAAC;IACF,CAAC;CACD"}
package/out/resolve.d.ts CHANGED
@@ -13,9 +13,8 @@
13
13
  */
14
14
  import { type Resolver, type ResolverBackend } from "@mailwoman/core/resolver";
15
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.
16
+ * Build a `Resolver` backed by a `ResolverBackend`. The backend can be any concrete impl structurally compatible with
17
+ * `PlaceLookup` — e.g. `new WOFSqlitePlaceLookup({ databasePath }).asResolverBackend()` or a fake for tests.
19
18
  */
20
- export declare function createWofResolver(backend: ResolverBackend): Resolver;
19
+ export declare function createWOFResolver(backend: ResolverBackend): Resolver;
21
20
  //# sourceMappingURL=resolve.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,EASN,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,MAAM,0BAA0B,CAAA;AAIjC;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,QAAQ,CAEpE"}
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,EASN,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,MAAM,0BAA0B,CAAA;AAKjC;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,QAAQ,CAEpE"}
package/out/resolve.js CHANGED
@@ -11,24 +11,23 @@
11
11
  * for ambiguous names — `Springfield` under a resolved `Illinois` parent resolves to the IL one,
12
12
  * not the MA one.
13
13
  */
14
+ import { matchCountry } from "@mailwoman/codex/country";
14
15
  import { isStreetDirectionalToken } from "@mailwoman/codex/us";
15
16
  import { DEFAULT_PLACETYPE_MAP, isPlacetypeFallback, } from "@mailwoman/core/resolver";
16
17
  import { haversineKm } from "@mailwoman/spatial";
17
18
  import { findRescoreCandidate, hasResolvedPlace } from "./span-rescore.js";
18
19
  /**
19
- * Build a `Resolver` backed by a `ResolverBackend`. The backend can be any concrete impl
20
- * structurally compatible with `PlaceLookup` — e.g. `new WofSqlitePlaceLookup({ databasePath
21
- * }).asResolverBackend()` or a fake for tests.
20
+ * Build a `Resolver` backed by a `ResolverBackend`. The backend can be any concrete impl structurally compatible with
21
+ * `PlaceLookup` — e.g. `new WOFSqlitePlaceLookup({ databasePath }).asResolverBackend()` or a fake for tests.
22
22
  */
23
- export function createWofResolver(backend) {
24
- return new WofResolver(backend);
23
+ export function createWOFResolver(backend) {
24
+ return new WOFResolver(backend);
25
25
  }
26
26
  /**
27
- * Pick the completion locality when an admin maps to several coincident same-name candidates
28
- * (#405). Population is the PRIMARY signal — the principal city is the populous one, and it can sit
29
- * FARTHER from the admin centroid than a tiny same-name hamlet (the Niigata case from #403).
30
- * Nearest centroid breaks a population tie; a genuine tie (same population AND distance) ABSTAINS
31
- * rather than guess.
27
+ * Pick the completion locality when an admin maps to several coincident same-name candidates (#405). Population is the
28
+ * PRIMARY signal — the principal city is the populous one, and it can sit FARTHER from the admin centroid than a tiny
29
+ * same-name hamlet (the Niigata case from #403). Nearest centroid breaks a population tie; a genuine tie (same
30
+ * population AND distance) ABSTAINS rather than guess.
32
31
  */
33
32
  function pickCompletion(candidates) {
34
33
  if (candidates.length === 0)
@@ -42,8 +41,8 @@ function pickCompletion(candidates) {
42
41
  return first;
43
42
  }
44
43
  /**
45
- * Find the first postcode value anywhere in the tree (a one-shot pre-scan; postcode and locality
46
- * are siblings, so the top-down walk wouldn't otherwise let the locality lookup see it).
44
+ * Find the first postcode value anywhere in the tree (a one-shot pre-scan; postcode and locality are siblings, so the
45
+ * top-down walk wouldn't otherwise let the locality lookup see it).
47
46
  */
48
47
  function firstPostcodeValue(roots) {
49
48
  const stack = [...roots];
@@ -58,12 +57,11 @@ function firstPostcodeValue(roots) {
58
57
  /** Street-name component tags that, with the street node itself, reconstruct the full street string. */
59
58
  const STREET_NAME_TAGS = new Set(["street", "street_prefix", "street_prefix_particle", "street_suffix"]);
60
59
  /**
61
- * Reassemble the full street string from the street node's subtree (#483 coverage fix). The parser
62
- * nests the directional/suffix as `street_prefix`/`street_suffix` CHILDREN of `street`
63
- * (containment.ts), so `street.value` alone is the bare base name ("Sheldon" for "East Sheldon Rd")
64
- * which misses the coordinate shards keyed on the FULL normalized name. Collect street + its
65
- * prefix/particle/suffix descendants (NOT house_number/unit, which also nest under street), order
66
- * by span offset, and join.
60
+ * Reassemble the full street string from the street node's subtree (#483 coverage fix). The parser nests the
61
+ * directional/suffix as `street_prefix`/`street_suffix` CHILDREN of `street` (containment.ts), so `street.value` alone
62
+ * is the bare base name ("Sheldon" for "East Sheldon Rd") — which misses the coordinate shards keyed on the FULL
63
+ * normalized name. Collect street + its prefix/particle/suffix descendants (NOT house_number/unit, which also nest
64
+ * under street), order by span offset, and join.
67
65
  */
68
66
  function assembleStreetValue(streetNode, directionalUnit) {
69
67
  const parts = [];
@@ -84,22 +82,30 @@ function assembleStreetValue(streetNode, directionalUnit) {
84
82
  return parts.map((n) => n.value.trim()).join(" ");
85
83
  }
86
84
  /**
87
- * Directional quadrant values the model sometimes emits as a `unit` node instead of inside the
88
- * street subtree (#718 admin-tail diagnostic: ~19% of the admin-fallback tail, 83% of DC). Folded
89
- * into the street lookup key by {@link assembleStreetValue}; the situs/interp lookup normalizer
90
- * expands the abbreviation ("ne" → "northeast") so the shard's full street name matches.
85
+ * Directional quadrant values the model sometimes emits as a `unit` node instead of inside the street subtree (#718
86
+ * admin-tail diagnostic: ~19% of the admin-fallback tail, 83% of DC). Folded into the street lookup key by
87
+ * {@link assembleStreetValue}; the situs/interp lookup normalizer expands the abbreviation ("ne" → "northeast") so the
88
+ * shard's full street name matches.
91
89
  */
92
90
  // The 8 USPS cardinals/intercardinals (abbrev or name) — @codex/us owns the canonical table (#215).
93
91
  const isDirectionalUnit = (value) => isStreetDirectionalToken(value.replace(/\./g, ""));
94
92
  /**
95
- * Address-point tier (#476): find `street` + `house_number` in the tree (first occurrence,
96
- * depth-first), scope by the tree's postcode/locality values, and on an exact hit stamp the point
97
- * onto the STREET node's metadata. Additive only — admin resolution is never altered.
93
+ * Address-point tier (#476): find `street` + `house_number` in the tree (first occurrence, depth-first), scope by the
94
+ * tree's postcode/locality values, and on an exact hit stamp the point onto the STREET node's metadata. Additive only —
95
+ * admin resolution is never altered.
98
96
  */
99
- function applyAddressPoint(roots, lookup) {
97
+ /**
98
+ * Half-width (degrees) of the bbox derived from a resolved locality centroid for the #247 OSM bbox fall-through. ~0.25°
99
+ * ≈ 28 km N–S — generous enough for a large metro whose centroid sits off the queried point, while the EXACT `(street,
100
+ * number)` match keeps a cross-commune collision rare. The proper fix is per-point scope backfill (the OSM association
101
+ * / point-in-polygon pass, #250); this is the coverage stopgap until then.
102
+ */
103
+ const LOCALITY_BBOX_RADIUS_DEG = 0.25;
104
+ function applyAddressPoint(roots, lookup, bboxFallback) {
100
105
  let street;
101
106
  let houseNumber;
102
107
  let directionalUnit;
108
+ let localityNode;
103
109
  let locality;
104
110
  let postcode;
105
111
  const stack = [...roots];
@@ -111,19 +117,34 @@ function applyAddressPoint(roots, lookup) {
111
117
  houseNumber = n;
112
118
  if (n.tag === "unit" && !directionalUnit && isDirectionalUnit(n.value))
113
119
  directionalUnit = n;
114
- if (n.tag === "locality" && !locality && n.value.trim())
120
+ if (n.tag === "locality" && !localityNode && n.value.trim()) {
121
+ localityNode = n;
115
122
  locality = n.value.trim();
123
+ }
116
124
  if (n.tag === "postcode" && !postcode && n.value.trim())
117
125
  postcode = n.value.trim();
118
126
  stack.push(...n.children);
119
127
  }
120
128
  if (!street || !houseNumber)
121
129
  return;
130
+ // #247 OSM bbox fall-through: when enabled (an OSM shard is wired) and the locality resolved to a
131
+ // coordinate, scope a final `(street, number)` probe by the locality's box — recovering OSM points that
132
+ // carry no postcode/locality tag of their own. US situs never enables it, so its probes are byte-identical.
133
+ let bbox;
134
+ if (bboxFallback && localityNode?.lat != null && localityNode.lon != null) {
135
+ bbox = {
136
+ minLat: localityNode.lat - LOCALITY_BBOX_RADIUS_DEG,
137
+ maxLat: localityNode.lat + LOCALITY_BBOX_RADIUS_DEG,
138
+ minLon: localityNode.lon - LOCALITY_BBOX_RADIUS_DEG,
139
+ maxLon: localityNode.lon + LOCALITY_BBOX_RADIUS_DEG,
140
+ };
141
+ }
122
142
  const hit = lookup.find({
123
143
  street: assembleStreetValue(street, directionalUnit),
124
144
  number: houseNumber.value,
125
145
  postcode,
126
146
  locality,
147
+ bbox,
127
148
  });
128
149
  if (!hit)
129
150
  return;
@@ -134,12 +155,11 @@ function applyAddressPoint(roots, lookup) {
134
155
  };
135
156
  }
136
157
  /**
137
- * House-number interpolation tier (#483): the third rung, consulted ONLY when the exact
138
- * address-point tier ({@link applyAddressPoint}) did NOT already stamp the street node
139
- * (`resolution_tier === "address_point"`). That gate IS the "after the exact-point fall-through" —
140
- * an estimate never overwrites a real situs point. Postcode-scoped (no locality the interpolators
141
- * abstain statewide without a postcode). Stamps a DISTINCT metadata key (`interpolated_point`,
142
- * never `address_point`). Additive only — admin resolution is untouched.
158
+ * House-number interpolation tier (#483): the third rung, consulted ONLY when the exact address-point tier
159
+ * ({@link applyAddressPoint}) did NOT already stamp the street node (`resolution_tier === "address_point"`). That gate
160
+ * IS the "after the exact-point fall-through" — an estimate never overwrites a real situs point. Postcode-scoped (no
161
+ * locality the interpolators abstain statewide without a postcode). Stamps a DISTINCT metadata key
162
+ * (`interpolated_point`, never `address_point`). Additive only admin resolution is untouched.
143
163
  */
144
164
  function applyInterpolation(roots, lookup, radiusCalibration) {
145
165
  let street;
@@ -183,11 +203,10 @@ function applyInterpolation(roots, lookup, radiusCalibration) {
183
203
  };
184
204
  }
185
205
  /**
186
- * Span-rescore tier (#370): opt-in last-resort locality recovery. Runs ONLY when the tree resolved
187
- * NOTHING (the #685 brake — never disturb a working coordinate). Enumerates raw-token spans, exact-
188
- * matches the same-country gazetteer (longest-wins + postcode-consistency gate; see
189
- * `span-rescore.ts`), and on a hit INJECTS a resolved `locality` node decorated exactly like a
190
- * normally-resolved one. Default-ON (#370, promoted 2026-06-25); byte-stable opt-out via
206
+ * Span-rescore tier (#370): opt-in last-resort locality recovery. Runs ONLY when the tree resolved NOTHING (the #685
207
+ * brake — never disturb a working coordinate). Enumerates raw-token spans, exact- matches the same-country gazetteer
208
+ * (longest-wins + postcode-consistency gate; see `span-rescore.ts`), and on a hit INJECTS a resolved `locality` node
209
+ * decorated exactly like a normally-resolved one. Default-ON (#370, promoted 2026-06-25); byte-stable opt-out via
191
210
  * `opts.spanRescore: false`. Async (it queries the backend), so it's awaited.
192
211
  */
193
212
  async function applySpanRescore(roots, raw, backend, opts) {
@@ -222,32 +241,31 @@ async function applySpanRescore(roots, raw, backend, opts) {
222
241
  // calibrated `confidence`, which would break the isotonic guarantee (a true calibrated 0.83 must not
223
242
  // be confused with a rescore plug-in estimate; DeepSeek 2026-06-23). true = postcode gate fired
224
243
  // (high-precision); false = ungated (no postcode→point coverage for this country, ~83%-precision).
225
- node.metadata = { ...(node.metadata ?? {}), span_rescore: true, rescore_gated: hit.gated };
244
+ node.metadata = { ...node.metadata, span_rescore: true, rescore_gated: hit.gated };
226
245
  roots.push(node);
227
246
  }
228
- /** A resolved node carries a real coordinate (placeId set + non-zero lat/lon). */
247
+ /** A resolved node carries a real coordinate (placeID set + non-zero lat/lon). */
229
248
  function isResolvedWithCoord(n) {
230
- return !!(n.placeId && typeof n.lat === "number" && typeof n.lon === "number" && (n.lat !== 0 || n.lon !== 0));
249
+ return !!(n.placeID && typeof n.lat === "number" && typeof n.lon === "number" && (n.lat !== 0 || n.lon !== 0));
231
250
  }
232
251
  /**
233
- * Postcode-disambiguated locality selection (#370 "Lever A"). The single biggest miss on the EU/AU
234
- * panel is a same-named town resolved to the WRONG instance — "06260 Saint-Pierre" lands 617 km off
235
- * — while the postcode that would disambiguate it (06260 → Alpes-Maritimes) sits resolved in the
236
- * same tree, discarded because the coordinate-picker prefers the (wrong) locality node and never
237
- * cross- checks it. This post-walk pass closes that loop, backend-agnostically and with no extra
238
- * query:
252
+ * Postcode-disambiguated locality selection (#370 "Lever A"). The single biggest miss on the EU/AU panel is a
253
+ * same-named town resolved to the WRONG instance — "06260 Saint-Pierre" lands 617 km off — while the postcode that
254
+ * would disambiguate it (06260 → Alpes-Maritimes) sits resolved in the same tree, discarded because the
255
+ * coordinate-picker prefers the (wrong) locality node and never cross- checks it. This post-walk pass closes that loop,
256
+ * backend-agnostically and with no extra query:
239
257
  *
240
- * 1. Find the resolved postcode's coordinate (the trustworthy anchor — a postcode is unambiguous
241
- * within a country in a way a town name is not).
242
- * 2. For each resolved locality node farther than `gateKm` from it: re-pick the same-named candidate
243
- * from the node's already-captured `alternatives` that is NEAREST the postcode and within the
244
- * gate. This keeps locality granularity at the CORRECT instance.
245
- * 3. If no alternative reconciles, the locality instance is unreliable — fall its coordinate back to
246
- * the postcode point (right area, the safe answer) and flag `postcode_city_mismatch`.
258
+ * 1. Find the resolved postcode's coordinate (the trustworthy anchor — a postcode is unambiguous within a country in a way
259
+ * a town name is not).
260
+ * 2. For each resolved locality node farther than `gateKm` from it: re-pick the same-named candidate from the node's
261
+ * already-captured `alternatives` that is NEAREST the postcode and within the gate. This keeps locality granularity
262
+ * at the CORRECT instance.
263
+ * 3. If no alternative reconciles, the locality instance is unreliable — fall its coordinate back to the postcode point
264
+ * (right area, the safe answer) and flag `postcode_city_mismatch`.
247
265
  *
248
- * Only fires where the postcode resolved to a point, so it composes with postcode coverage (#193) —
249
- * add a country's postcodes and this immediately disambiguates its same-named towns. Default-off
250
- * via `opts.postcodeConsistency`; byte-stable when unset.
266
+ * Only fires where the postcode resolved to a point, so it composes with postcode coverage (#193) — add a country's
267
+ * postcodes and this immediately disambiguates its same-named towns. Default-off via `opts.postcodeConsistency`;
268
+ * byte-stable when unset.
251
269
  */
252
270
  function applyPostcodeConsistency(roots, gateKm) {
253
271
  // The resolved postcode anchor (first one with a real coordinate).
@@ -293,16 +311,164 @@ function applyPostcodeConsistency(roots, gateKm) {
293
311
  };
294
312
  const rest = alts.filter((a) => a !== reconciling.a);
295
313
  decorateNode(node, reconciling.a, [displaced, ...rest]);
296
- node.metadata = { ...(node.metadata ?? {}), postcode_repicked: true };
314
+ node.metadata = { ...node.metadata, postcode_repicked: true };
297
315
  continue;
298
316
  }
299
317
  // No same-named instance near the postcode → the town is unreliable; trust the postcode's area.
300
318
  node.lat = anchor.lat;
301
319
  node.lon = anchor.lon;
302
- node.metadata = { ...(node.metadata ?? {}), postcode_city_mismatch: true, coordinate_source: "postcode_fallback" };
320
+ node.metadata = { ...node.metadata, postcode_city_mismatch: true, coordinate_source: "postcode_fallback" };
321
+ }
322
+ }
323
+ /**
324
+ * Admin descendant-consistency (#263) — the joint-consistency resolve, scoped to the admin assignment. The greedy walk
325
+ * resolves a region on its own (name + population), so "ME" picks Messina (IT) over Maine, then scopes "Portland" to
326
+ * Messina's descendants, finds nothing, and the result falls back to the region centroid (Sicily). The region's
327
+ * same-named runner-ups (Maine, Missouri, …) were already captured as `alternatives`; this pass asks the question the
328
+ * greedy order skipped — _which "ME" has a "Portland" under it?_ — and re-picks the (region, locality) pair where a
329
+ * same-named locality descends from a same-named region candidate. Geography decides; no country prior, no list.
330
+ *
331
+ * Fires ONLY for a resolved region whose child locality fell through (the unresolved-locality signal), so a
332
+ * well-resolved tree ("Springfield, IL" → Illinois, Springfield) is byte-identical. Costs one unscoped locality lookup
333
+ * per triggering pair. Needs {@link ResolverBackend.ancestors}; no-op without it. See `ResolveOpts.adminCoherence`.
334
+ */
335
+ async function applyAdminCoherence(roots, backend) {
336
+ const visit = async (node, regionAncestor) => {
337
+ const regionHere = node.tag === "region" && isResolvedWithCoord(node) ? node : regionAncestor;
338
+ if (regionHere &&
339
+ (node.tag === "locality" || node.tag === "dependent_locality") &&
340
+ !isResolvedWithCoord(node) &&
341
+ node.value.trim().length > 0) {
342
+ await reconcileAdminPair(regionHere, node, backend);
343
+ }
344
+ for (const child of node.children)
345
+ await visit(child, regionHere);
346
+ };
347
+ for (const root of roots)
348
+ await visit(root, null);
349
+ }
350
+ /**
351
+ * Re-pick a (region, locality) pair so the locality descends from the region. `alternatives` on the node are the
352
+ * `ResolvedPlace` runner-ups `decorateNode` attached (typed `unknown[]` in the decoder, which can't import resolver
353
+ * types — the cast is sound). Picks the FIRST same-named locality (already score-ordered) that descends from a
354
+ * same-named region candidate, then swaps both nodes. Leaves both untouched when no consistent pair exists (a genuinely
355
+ * un-gazetteered locality — "Portland, VT" with no Portland in Vermont — stays as the region centroid, not a foreign
356
+ * namesake).
357
+ */
358
+ async function reconcileAdminPair(regionNode, localityNode, backend) {
359
+ // EXACT region matches only: the alternatives for a 2-letter token are loose ("ME" also surfaces
360
+ // Missouri/Michigan/Mississippi as fuzzy M-state runner-ups). Restricting to exact name/alias matches
361
+ // (Maine/Messina/Medway for "ME") keeps the join honest. `exactMatch` is stamped by exactMatchTiering.
362
+ const regionCands = (regionNode.alternatives ?? []).filter((r) => r.exactMatch);
363
+ // For each exact region candidate, ask the gazetteer directly: is there a same-named locality UNDER it?
364
+ // The `parentID` scope is the descendant test (over the #832-repaired ancestors table), and it finds the
365
+ // instance regardless of its global population rank — "Springfield, ME" reaches the small Springfield in
366
+ // Maine that an unscoped top-N window would drop. First region with an exact-named descendant wins; the
367
+ // region candidates are score-ordered, so a tie breaks toward the more prominent place.
368
+ for (const region of regionCands) {
369
+ const scoped = await backend.findPlace({
370
+ text: localityNode.value,
371
+ placetype: "locality",
372
+ parentID: region.id,
373
+ limit: 3,
374
+ });
375
+ const lc = scoped.find((l) => l.exactMatch && !(l.lat === 0 && l.lon === 0));
376
+ if (lc) {
377
+ decorateNode(regionNode, region, regionCands.filter((r) => r !== region));
378
+ regionNode.metadata = { ...regionNode.metadata, admin_coherence_repicked: true };
379
+ decorateNode(localityNode, lc, scoped.filter((l) => l !== lc));
380
+ localityNode.metadata = { ...localityNode.metadata, admin_coherence_repicked: true };
381
+ return;
382
+ }
303
383
  }
384
+ // #267 follow-up: the token may name a COUNTRY whose namesake is a more-populous foreign region — "Tbilisi,
385
+ // Georgia" parses region("Georgia") → the US state, but Tbilisi descends from Georgia the COUNTRY. When no
386
+ // region candidate holds the locality, try same-named country candidates: a foreign capital under its
387
+ // country out-votes the state namesake. Needs the country + the locality's ancestry in the gazetteer (the
388
+ // #267 admin fold). The re-picked region node then carries the country place; the locality coordinate wins.
389
+ const countryCands = (await backend.findPlace({ text: regionNode.value, placetype: "country", limit: 3 })).filter((c) => c.exactMatch);
390
+ for (const country of countryCands) {
391
+ const scoped = await backend.findPlace({
392
+ text: localityNode.value,
393
+ placetype: "locality",
394
+ parentID: country.id,
395
+ limit: 3,
396
+ });
397
+ const lc = scoped.find((l) => l.exactMatch && !(l.lat === 0 && l.lon === 0));
398
+ if (lc) {
399
+ decorateNode(regionNode, country, regionCands);
400
+ regionNode.metadata = { ...regionNode.metadata, admin_coherence_repicked: true };
401
+ decorateNode(localityNode, lc, scoped.filter((l) => l !== lc));
402
+ localityNode.metadata = { ...localityNode.metadata, admin_coherence_repicked: true };
403
+ return;
404
+ }
405
+ }
406
+ }
407
+ /**
408
+ * Explicit-country coherence (#822) — the joint-consistency resolve keyed on the query's own EXPLICIT country token.
409
+ * The greedy walk resolves a locality on name + population alone, so "Vienna, Austria" picks the populous US namesake
410
+ * (Vienna WV) and IGNORES the "Austria" the address named. This pass asks the question the greedy order skipped —
411
+ * _which "Vienna" is in the country the address names?_ — and re-picks the locality to the same-named place under that
412
+ * country. The country code comes from the parser's OWN `country` emission via codex's ISO-3166 table (a name→code
413
+ * normalization of a token the model already classified, NOT a routing prior or safelist); the gazetteer's `country`
414
+ * column does the geographic confirmation. No pin, no list; generalizes to every country.
415
+ *
416
+ * Disjoint from {@link applyAdminCoherence} by the region guard: that pass owns the case where a REGION scopes the
417
+ * locality; this one fires only when the explicit country is the locality's nearest admin context (no region between),
418
+ * and then regardless of the locality's resolution state — so it covers both the resolved-but-foreign locality (Sydney
419
+ * → the greedy AU pick was wrong) and the unresolved locality the span-rescore tier would otherwise back-fill with the
420
+ * US namesake (Vienna → Vienna WV). Byte-stable when the locality already resolved in-country (the id guard) or the
421
+ * named country holds no same-named locality (the fail-safe — what also protects "Turkey, TX": no country token ⇒ no
422
+ * trigger; and an in-country lookup that finds nothing keeps the greedy result). Costs one country-scoped locality
423
+ * lookup per triggering pair. See `ResolveOpts.adminCoherence`.
424
+ */
425
+ async function applyExplicitCountryCoherence(roots, backend) {
426
+ const visit = async (node, countryToken, regionAbove) => {
427
+ const countryHere = node.tag === "country" && node.value.trim().length > 0 ? node : countryToken;
428
+ const regionHere = regionAbove || node.tag === "region" || node.tag === "subregion";
429
+ // Fire only when the explicit country is the locality's NEAREST admin context (no region/subregion between).
430
+ // When a region IS present, applyAdminCoherence + the region's `parentID` scope already disambiguate the
431
+ // locality — applying the coarse country filter there would wrongly re-pick "Springfield, IL" to the most
432
+ // populous US "Springfield". Fires regardless of the locality's resolution state, so it PRE-EMPTS the
433
+ // span-rescore tier (which would otherwise back-fill the unresolved locality with the US namesake).
434
+ if (countryHere && !regionHere && (node.tag === "locality" || node.tag === "dependent_locality")) {
435
+ await reconcileExplicitCountry(countryHere, node, backend);
436
+ }
437
+ for (const child of node.children)
438
+ await visit(child, countryHere, regionHere);
439
+ };
440
+ for (const root of roots)
441
+ await visit(root, null, false);
304
442
  }
305
- class WofResolver {
443
+ /**
444
+ * Re-pick a resolved locality to its same-named place UNDER the explicitly-named country. `matchCountry` turns the
445
+ * country token into an ISO-3166 alpha-2 (returns null for an unrecognized token → no-op); the backend then surfaces
446
+ * the in-country namesake the population-first unscoped window buried. Leaves the node untouched when the country is
447
+ * unrecognized, the named country has no exact same-named locality (the fail-safe), or the locality already resolved to
448
+ * that place (the id guard → byte-stable). The country node itself stays as the parser emitted it — the named
449
+ * well-covered countries carry no `country`-placetype row in the admin gazetteer, so there is nothing to decorate it
450
+ * with; the locality coordinate is what the re-pick fixes.
451
+ */
452
+ async function reconcileExplicitCountry(countryNode, localityNode, backend) {
453
+ const mc = matchCountry(countryNode.value);
454
+ if (!mc)
455
+ return;
456
+ const scoped = await backend.findPlace({
457
+ text: localityNode.value,
458
+ placetype: "locality",
459
+ country: mc.iso2,
460
+ limit: 3,
461
+ });
462
+ const lc = scoped.find((l) => l.exactMatch && !(l.lat === 0 && l.lon === 0));
463
+ if (!lc)
464
+ return;
465
+ // Already the in-country place? (placeID encodes the WOF id.) Then the greedy walk was right — byte-stable.
466
+ if (localityNode.placeID === `wof:${lc.id}`)
467
+ return;
468
+ decorateNode(localityNode, lc, scoped.filter((l) => l !== lc));
469
+ localityNode.metadata = { ...localityNode.metadata, explicit_country_repicked: true };
470
+ }
471
+ class WOFResolver {
306
472
  #backend;
307
473
  constructor(backend) {
308
474
  this.#backend = backend;
@@ -342,6 +508,17 @@ class WofResolver {
342
508
  if (state.hierarchyCompletion && state.resolvedRegion && state.resolvedRegionNode && !state.localityNodePresent) {
343
509
  this.#completeRegionRole(state.resolvedRegion, state.resolvedRegionNode);
344
510
  }
511
+ // Admin descendant-consistency (#263): opt-in. Re-pick a (region, locality) pair so the locality
512
+ // descends from the region — runs BEFORE postcode-consistency (it resolves the locality the postcode
513
+ // pass may then refine) and before the street tiers (which key off the postcode/street, not the admin
514
+ // coordinate this adjusts). Byte-stable when `adminCoherence` is unset.
515
+ if (opts.adminCoherence) {
516
+ await applyAdminCoherence(newRoots, this.#backend);
517
+ // #822 — same joint-consistency family, inverse trigger: an explicit country token whose resolved
518
+ // locality landed in the wrong country (the populous US namesake). Runs after the region pass so the
519
+ // two never contend (region-fallthrough vs resolved-but-foreign are disjoint locality states).
520
+ await applyExplicitCountryCoherence(newRoots, this.#backend);
521
+ }
345
522
  // Postcode-consistency (#370 "Lever A"): opt-in. After the admin walk (needs both the locality
346
523
  // and the postcode resolved) and before the street tiers (which key off the postcode/street, not
347
524
  // the locality coordinate this adjusts). Byte-stable when opts.postcodeConsistency is unset.
@@ -352,7 +529,7 @@ class WofResolver {
352
529
  // tier can never disturb admin attribution — it only ADDS the precise coordinate. Byte-stable
353
530
  // when opts.addressPoints is absent.
354
531
  if (opts.addressPoints) {
355
- applyAddressPoint(newRoots, opts.addressPoints);
532
+ applyAddressPoint(newRoots, opts.addressPoints, opts.addressPointBboxFallback);
356
533
  }
357
534
  // Interpolation tier (#483): strictly AFTER the exact-point block so an estimate can never
358
535
  // override a real situs point (applyInterpolation also gates on resolution_tier). Opt-in;
@@ -370,13 +547,12 @@ class WofResolver {
370
547
  return { raw: tree.raw, roots: newRoots };
371
548
  }
372
549
  /**
373
- * Record a dropped dual-role locality as a `locality` INTERPRETATION on the resolved region node
374
- * (#415, generalizes #405's synthesized node). Consults `coincidentLocalitiesFor(regionId)` (O(1)
375
- * map lookup no distance math, no backend query), picks the principal city
376
- * ({@link pickCompletion}: population-primary, distance tiebreak, abstain on a genuine tie), and
377
- * appends an interpretation to `regionNode.interpretations`. No-op when the backend has no
378
- * relation, the region isn't a dual-role place, or it abstains. The region node's primary role
379
- * stays `region`; the locality rides alongside.
550
+ * Record a dropped dual-role locality as a `locality` INTERPRETATION on the resolved region node (#415, generalizes
551
+ * #405's synthesized node). Consults `coincidentLocalitiesFor(regionID)` (O(1) map lookup — no distance math, no
552
+ * backend query), picks the principal city ({@link pickCompletion}: population-primary, distance tiebreak, abstain on
553
+ * a genuine tie), and appends an interpretation to `regionNode.interpretations`. No-op when the backend has no
554
+ * relation, the region isn't a dual-role place, or it abstains. The region node's primary role stays `region`; the
555
+ * locality rides alongside.
380
556
  */
381
557
  #completeRegionRole(region, regionNode) {
382
558
  if (typeof region.id !== "number" || !this.#backend.coincidentLocalitiesFor)
@@ -386,8 +562,8 @@ class WofResolver {
386
562
  return;
387
563
  const interpretation = {
388
564
  tag: "locality",
389
- placeId: `wof:${loc.id}`,
390
- sourceId: `${loc.placetype}:${loc.id}`,
565
+ placeID: `wof:${loc.id}`,
566
+ sourceID: `${loc.placetype}:${loc.id}`,
391
567
  lat: loc.lat,
392
568
  lon: loc.lon,
393
569
  confidence: 0,
@@ -413,7 +589,7 @@ class WofResolver {
413
589
  // Lineage attachment (#404): stamp the resolved place's ancestor chain onto metadata. Opt-in
414
590
  // + only when the backend supplies it, so the default stays byte-identical (no extra query).
415
591
  if (state.includeAncestors && this.#backend.ancestors) {
416
- decorated.metadata = { ...(decorated.metadata ?? {}), ancestors: this.#backend.ancestors(picked.top.id) };
592
+ decorated.metadata = { ...decorated.metadata, ancestors: this.#backend.ancestors(picked.top.id) };
417
593
  }
418
594
  // Capture the first resolved region (place + node) for hierarchy completion — the locality
419
595
  // interpretation is pushed onto this node in the post-walk pass.
@@ -436,13 +612,13 @@ class WofResolver {
436
612
  placetype,
437
613
  limit: state.candidatesPerLookup,
438
614
  };
439
- // Pass the inherited parent constraint to the backend when available — `parentId` scopes to
615
+ // Pass the inherited parent constraint to the backend when available — `parentID` scopes to
440
616
  // the resolved parent's descendants. For `country`: a resolved parent's country wins, else
441
617
  // fall back to the caller's `defaultCountry`. Without this top-level hint a bare "IL" over a
442
618
  // multi-country gazetteer fuzzy-matches a foreign place (e.g. a French region) — see the
443
619
  // Direction-C resolver eval.
444
620
  if (parentResolved && typeof parentResolved.id === "number")
445
- query.parentId = parentResolved.id;
621
+ query.parentID = parentResolved.id;
446
622
  // #194: a resolved parent's country wins, then the caller's `defaultCountry`, then the confident
447
623
  // placer `hardCountry`. All three are a HARD candidate filter. The placer's `hardCountry` is gated
448
624
  // upstream on high confidence (so it only fires when the model is sure), and on a miss the node is
@@ -451,7 +627,15 @@ class WofResolver {
451
627
  // wrong-continent guess the hard filter exists to drop ("in-region or unresolved"). Measured: a
452
628
  // global fallback collapses back to the soft-prior baseline (FI p90 3050, PL p90 1078); pure-hard
453
629
  // collapses the tail (FI 18 km, PL p99 8172→494) at a coverage-bounded recall cost.
454
- const country = parentResolved?.country ?? state.defaultCountry ?? state.hardCountry;
630
+ // #833 forward linkage: a node's own `country_hint` (an address-system recognizer's derived country —
631
+ // today `recognizeUSRegions` stamping "US" on a recognized closed-set US state) constrains THIS node's
632
+ // lookup, below a resolved parent's country but above the global defaults. It breaks the two-consistent-
633
+ // pairs tie ("Augusta, ME" → Maine, not Augusta/Messina) that pure geographic consistency cannot.
634
+ const countryHint = node.metadata?.["country_hint"];
635
+ const country = parentResolved?.country ??
636
+ (typeof countryHint === "string" ? countryHint : undefined) ??
637
+ state.defaultCountry ??
638
+ state.hardCountry;
455
639
  if (country)
456
640
  query.country = country;
457
641
  // Coordinate-first: hand the sibling postcode to locality lookups so the backend can inject
@@ -462,14 +646,14 @@ class WofResolver {
462
646
  let candidates;
463
647
  try {
464
648
  candidates = await this.#backend.findPlace(query);
465
- // Parent soft-gating: `parentId` is a HARD descendant filter in the backend, which wrongly
649
+ // Parent soft-gating: `parentID` is a HARD descendant filter in the backend, which wrongly
466
650
  // zeroes the result when the parent resolved wrong OR the gazetteer hierarchy is incomplete
467
651
  // (a real locality whose `ancestors` chain is missing its region). Rather than turn a
468
652
  // resolvable node into an unresolved one, retry once WITHOUT the parent constraint — we
469
653
  // prefer a parent-scoped hit but never sacrifice recall. The country constraint is kept, so
470
654
  // this still can't wander to a foreign place. Same logical resolution → no extra budget.
471
- if (candidates.length === 0 && state.parentFallback && query.parentId !== undefined) {
472
- delete query.parentId;
655
+ if (candidates.length === 0 && state.parentFallback && query.parentID !== undefined) {
656
+ delete query.parentID;
473
657
  candidates = await this.#backend.findPlace(query);
474
658
  }
475
659
  }
@@ -493,7 +677,7 @@ class WofResolver {
493
677
  // picks the wrong one — and because resolveTree resolves region FIRST and inherits its country
494
678
  // down, a wrong region poisons the locality too. The postcode posterior breaks the tie at the
495
679
  // region, and the right country then flows to the locality. (Country/macroregion/county are
496
- // excluded: they don't exhibit this collision class and carry country via `parentId` when nested.)
680
+ // excluded: they don't exhibit this collision class and carry country via `parentID` when nested.)
497
681
  //
498
682
  // Tier-SAFE ordering: the candidate's exact-match flag is the PRIMARY key, so the country pin
499
683
  // never crosses the exact/partial boundary. WITHIN a tier, `score + anchorWeight * posterior`
@@ -538,31 +722,30 @@ class WofResolver {
538
722
  }
539
723
  }
540
724
  /**
541
- * Stamp a node with resolver-supplied attribution. Displaces any prior classifier `source` /
542
- * `sourceId` into `metadata.classifier_source` / `metadata.classifier_source_id` so debugging tools
543
- * can still see who made the original assertion. Surfaces the runner-up candidates on
544
- * `alternatives` so callers can disambiguate (Springfield-class failures, [#8 in the failure
545
- * catalogue]).
725
+ * Stamp a node with resolver-supplied attribution. Displaces any prior classifier `source` / `sourceID` into
726
+ * `metadata.classifier_source` / `metadata.classifier_source_id` so debugging tools can still see who made the original
727
+ * assertion. Surfaces the runner-up candidates on `alternatives` so callers can disambiguate (Springfield-class
728
+ * failures, [#8 in the failure catalogue]).
546
729
  */
547
730
  function decorateNode(node, resolved, alternatives) {
548
- if (node.source !== undefined || node.sourceId !== undefined) {
549
- const meta = { ...(node.metadata ?? {}) };
731
+ if (node.source !== undefined || node.sourceID !== undefined) {
732
+ const meta = { ...node.metadata };
550
733
  if (node.source !== undefined)
551
734
  meta["classifier_source"] = node.source;
552
- if (node.sourceId !== undefined)
553
- meta["classifier_source_id"] = node.sourceId;
735
+ if (node.sourceID !== undefined)
736
+ meta["classifier_source_id"] = node.sourceID;
554
737
  node.metadata = meta;
555
738
  }
556
739
  node.source = "resolver";
557
- node.sourceId = `${resolved.placetype}:${resolved.id}`;
740
+ node.sourceID = `${resolved.placetype}:${resolved.id}`;
558
741
  node.lat = resolved.lat;
559
742
  node.lon = resolved.lon;
560
- node.placeId = `wof:${resolved.id}`; // v1: only WOF resolvers; the URI scheme stays this simple
743
+ node.placeID = `wof:${resolved.id}`; // v1: only WOF resolvers; the URI scheme stays this simple
561
744
  // Record the resolver's ranking score AND the resolved place's CANONICAL name. The name is the
562
745
  // gazetteer's truth for the place we picked — distinct from `node.value` (the raw input span). It
563
746
  // lets consumers display the canonical name and lets the end-to-end eval check the resolver chose
564
747
  // the right PLACE (gazetteer-name vs ground-truth) rather than merely echoing the parser's text.
565
- node.metadata = { ...(node.metadata ?? {}), resolver_score: resolved.score, resolver_name: resolved.name };
748
+ node.metadata = { ...node.metadata, resolver_score: resolved.score, resolver_name: resolved.name };
566
749
  // The postcode/locality conflict flag (the falsehood differentiator): the postcode pointed to a
567
750
  // geographically different place than the parsed city name. Surface it so callers can warn rather
568
751
  // than silently trust the resolved point.
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAE9D,OAAO,EAGN,qBAAqB,EAErB,mBAAmB,GAMnB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAE1E;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAwB;IACzD,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,CAAA;AAChC,CAAC;AAyCD;;;;;;GAMG;AACH,SAAS,cAAc,CAAC,UAAyC;IAChE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACxC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC,CAAC,CAAE,CAAA;IAClD,MAAM,MAAM,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAA;IACzG,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,MAAM,CAAA;IAC9B,IAAI,KAAM,CAAC,UAAU,KAAK,MAAO,CAAC,UAAU,IAAI,KAAM,CAAC,UAAU,KAAK,MAAO,CAAC,UAAU;QAAE,OAAO,IAAI,CAAA;IACrG,OAAO,KAAM,CAAA;AACd,CAAC;AAED;;;GAGG;AACH,SAAS,kBAAkB,CAAC,KAA6B;IACxD,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,CAAA;IACxB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,EAAG,CAAA;QACtB,IAAI,CAAC,CAAC,GAAG,KAAK,UAAU,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;QAC5E,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAA;IAC1B,CAAC;IACD,OAAO,SAAS,CAAA;AACjB,CAAC;AAED,wGAAwG;AACxG,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,eAAe,EAAE,wBAAwB,EAAE,eAAe,CAAC,CAAC,CAAA;AAExG;;;;;;;GAOG;AACH,SAAS,mBAAmB,CAAC,UAAuB,EAAE,eAA6B;IAClF,MAAM,KAAK,GAAkB,EAAE,CAAA;IAC/B,MAAM,KAAK,GAAG,CAAC,UAAU,CAAC,CAAA;IAC1B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,EAAG,CAAA;QACtB,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAChE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAA;IAC1B,CAAC;IACD,iGAAiG;IACjG,oGAAoG;IACpG,iGAAiG;IACjG,mGAAmG;IACnG,IAAI,eAAe,IAAI,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IAChF,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;IACvC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAClD,CAAC;AAED;;;;;GAKG;AACH,oGAAoG;AACpG,MAAM,iBAAiB,GAAG,CAAC,KAAa,EAAW,EAAE,CAAC,wBAAwB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAA;AAExG;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,KAAoB,EAAE,MAA0B;IAC1E,IAAI,MAA+B,CAAA;IACnC,IAAI,WAAoC,CAAA;IACxC,IAAI,eAAwC,CAAA;IAC5C,IAAI,QAA4B,CAAA;IAChC,IAAI,QAA4B,CAAA;IAChC,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,CAAA;IACxB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,EAAG,CAAA;QACtB,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,MAAM;YAAE,MAAM,GAAG,CAAC,CAAA;QAC7C,IAAI,CAAC,CAAC,GAAG,KAAK,cAAc,IAAI,CAAC,WAAW;YAAE,WAAW,GAAG,CAAC,CAAA;QAC7D,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,IAAI,CAAC,eAAe,IAAI,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC;YAAE,eAAe,GAAG,CAAC,CAAA;QAC3F,IAAI,CAAC,CAAC,GAAG,KAAK,UAAU,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;YAAE,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;QAClF,IAAI,CAAC,CAAC,GAAG,KAAK,UAAU,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;YAAE,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;QAClF,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAA;IAC1B,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW;QAAE,OAAM;IACnC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC;QACvB,MAAM,EAAE,mBAAmB,CAAC,MAAM,EAAE,eAAe,CAAC;QACpD,MAAM,EAAE,WAAW,CAAC,KAAK;QACzB,QAAQ;QACR,QAAQ;KACR,CAAC,CAAA;IACF,IAAI,CAAC,GAAG;QAAE,OAAM;IAChB,MAAM,CAAC,QAAQ,GAAG;QACjB,GAAG,MAAM,CAAC,QAAQ;QAClB,aAAa,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE;QACvF,eAAe,EAAE,eAAe;KAChC,CAAA;AACF,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,kBAAkB,CAAC,KAAoB,EAAE,MAA2B,EAAE,iBAA0B;IACxG,IAAI,MAA+B,CAAA;IACnC,IAAI,WAAoC,CAAA;IACxC,IAAI,eAAwC,CAAA;IAC5C,IAAI,QAA4B,CAAA;IAChC,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,CAAA;IACxB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,EAAG,CAAA;QACtB,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,MAAM;YAAE,MAAM,GAAG,CAAC,CAAA;QAC7C,IAAI,CAAC,CAAC,GAAG,KAAK,cAAc,IAAI,CAAC,WAAW;YAAE,WAAW,GAAG,CAAC,CAAA;QAC7D,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,IAAI,CAAC,eAAe,IAAI,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC;YAAE,eAAe,GAAG,CAAC,CAAA;QAC3F,IAAI,CAAC,CAAC,GAAG,KAAK,UAAU,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;YAAE,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;QAClF,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAA;IAC1B,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW;QAAE,OAAM;IACnC,gGAAgG;IAChG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,iBAAiB,CAAC,KAAK,eAAe;QAAE,OAAM;IACpE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,mBAAmB,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;IACtH,IAAI,CAAC,GAAG;QAAE,OAAM;IAChB,iGAAiG;IACjG,mGAAmG;IACnG,8FAA8F;IAC9F,MAAM,UAAU,GAAG,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAA;IAC1G,MAAM,CAAC,QAAQ,GAAG;QACjB,GAAG,MAAM,CAAC,QAAQ;QAClB,kBAAkB,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE;QAC5F,eAAe,EAAE,cAAc;QAC/B,aAAa,EAAE,UAAU;QACzB,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,GAAG,CAAC,YAAY,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjH,oBAAoB,EAAE,GAAG,CAAC,MAAM;QAChC,GAAG,CAAC,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,GAAG,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5E,CAAA;AACF,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,gBAAgB,CAC9B,KAAoB,EACpB,GAAW,EACX,OAAwB,EACxB,IAAiB;IAEjB,IAAI,gBAAgB,CAAC,KAAK,CAAC;QAAE,OAAM,CAAC,6DAA6D;IACjG,kGAAkG;IAClG,8FAA8F;IAC9F,IAAI,GAAG,CAAA;IACP,IAAI,CAAC;QACJ,GAAG,GAAG,MAAM,oBAAoB,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE;YACrD,OAAO,EAAE,IAAI,CAAC,cAAc;YAC5B,QAAQ,EAAE,kBAAkB,CAAC,KAAK,CAAC;YACnC,MAAM,EAAE,IAAI,CAAC,iBAAiB;SAC9B,CAAC,CAAA;IACH,CAAC;IAAC,MAAM,CAAC;QACR,OAAM;IACP,CAAC;IACD,IAAI,CAAC,GAAG;QAAE,OAAM;IAChB,MAAM,IAAI,GAAgB;QACzB,GAAG,EAAE,UAAU;QACf,KAAK,EAAE,GAAG,CAAC,IAAI;QACf,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,qGAAqG;QACrG,UAAU,EAAE,GAAG;QACf,QAAQ,EAAE,EAAE;KACZ,CAAA;IACD,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACjC,kGAAkG;IAClG,qGAAqG;IACrG,gGAAgG;IAChG,mGAAmG;IACnG,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,CAAC,KAAK,EAAE,CAAA;IAC1F,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACjB,CAAC;AAED,kFAAkF;AAClF,SAAS,mBAAmB,CAAC,CAAc;IAC1C,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;AAC/G,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,SAAS,wBAAwB,CAAC,KAA6B,EAAE,MAAc;IAC9E,mEAAmE;IACnE,IAAI,MAAM,GAAwC,IAAI,CAAA;IACtD,MAAM,UAAU,GAAkB,CAAC,GAAG,KAAK,CAAC,CAAA;IAC5C,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAG,CAAA;QAC3B,IAAI,CAAC,CAAC,GAAG,KAAK,UAAU,IAAI,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;YACpD,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAI,EAAE,CAAA;YACrC,MAAK;QACN,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAA;IAC/B,CAAC;IACD,IAAI,CAAC,MAAM;QAAE,OAAM,CAAC,wEAAwE;IAE5F,MAAM,KAAK,GAAkB,CAAC,GAAG,KAAK,CAAC,CAAA;IACvC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAG,CAAA;QACzB,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC,GAAG,KAAK,oBAAoB,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;YAAE,SAAQ;QAC1G,IAAI,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAI,EAAE,IAAI,CAAC,GAAI,CAAC,IAAI,MAAM;YAAE,SAAQ,CAAC,qBAAqB;QAEvG,6FAA6F;QAC7F,8FAA8F;QAC9F,0EAA0E;QAC1E,MAAM,IAAI,GAAI,IAAI,CAAC,YAA4C,IAAI,EAAE,CAAA;QACrE,MAAM,WAAW,GAAG,IAAI;aACtB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;aACzC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,MAAO,CAAC,GAAG,EAAE,MAAO,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;aAC3E,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;aAC5B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC9B,IAAI,WAAW,EAAE,CAAC;YACjB,gFAAgF;YAChF,MAAM,SAAS,GAAkB;gBAChC,EAAE,EAAE,CAAC;gBACL,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC;gBAC5D,SAAS,EAAE,UAAU;gBACrB,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO;gBAC9B,GAAG,EAAE,IAAI,CAAC,GAAI;gBACd,GAAG,EAAE,IAAI,CAAC,GAAI;gBACd,KAAK,EAAE,CAAC;aACR,CAAA;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,CAAA;YACpD,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;YACvD,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAA;YACrE,SAAQ;QACT,CAAC;QACD,gGAAgG;QAChG,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAA;QACrB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAA;QACrB,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,sBAAsB,EAAE,IAAI,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,CAAA;IACnH,CAAC;AACF,CAAC;AAED,MAAM,WAAW;IACP,QAAQ,CAAiB;IAElC,YAAY,OAAwB;QACnC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAiB,EAAE,OAAoB,EAAE;QAC1D,MAAM,KAAK,GAAoB;YAC9B,gBAAgB,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;YACvC,wFAAwF;YACxF,+DAA+D;YAC/D,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,qBAAqB;YACxD,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,CAAC;YAC1C,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,IAAI,CAAC;YAClD,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,IAAI;YAC3C,QAAQ,EAAE,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;YACxC,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,GAAG;YACtC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,4FAA4F;YAC5F,+FAA+F;YAC/F,yFAAyF;YACzF,+EAA+E;YAC/E,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI;YAC/E,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,IAAI,KAAK;YAChD,mBAAmB,EAAE,KAAK;YAC1B,cAAc,EAAE,IAAI;YACpB,kBAAkB,EAAE,IAAI;SACxB,CAAA;QAED,MAAM,QAAQ,GAAkB,EAAE,CAAA;QAClC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/B,QAAQ,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;QACxE,CAAC;QAED,mGAAmG;QACnG,mGAAmG;QACnG,mGAAmG;QACnG,qFAAqF;QACrF,IAAI,KAAK,CAAC,mBAAmB,IAAI,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,kBAAkB,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;YACjH,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAA;QACzE,CAAC;QAED,+FAA+F;QAC/F,iGAAiG;QACjG,6FAA6F;QAC7F,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC9B,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAA;QACzE,CAAC;QACD,0FAA0F;QAC1F,8FAA8F;QAC9F,qCAAqC;QACrC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;QAChD,CAAC;QACD,2FAA2F;QAC3F,0FAA0F;QAC1F,iDAAiD;QACjD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,kBAAkB,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,8BAA8B,CAAC,CAAA;QACtF,CAAC;QACD,6FAA6F;QAC7F,+FAA+F;QAC/F,mGAAmG;QACnG,yEAAyE;QACzE,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;YAChC,MAAM,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;QAChE,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;IAC1C,CAAC;IAED;;;;;;;;OAQG;IACH,mBAAmB,CAAC,MAAqB,EAAE,UAAuB;QACjE,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,uBAAuB;YAAE,OAAM;QACnF,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;QAC5E,IAAI,CAAC,GAAG;YAAE,OAAM;QAChB,MAAM,cAAc,GAAmB;YACtC,GAAG,EAAE,UAAU;YACf,OAAO,EAAE,OAAO,GAAG,CAAC,EAAE,EAAE;YACxB,QAAQ,EAAE,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,EAAE,EAAE;YACtC,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,UAAU,EAAE,CAAC;YACb,QAAQ,EAAE,EAAE,iBAAiB,EAAE,GAAG,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,CAAC,IAAI,EAAE;SACxG,CAAA;QACD,UAAU,CAAC,eAAe,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,eAAe,IAAI,EAAE,CAAC,EAAE,cAAc,CAAC,CAAA;IACrF,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAiB,EAAE,cAAoC,EAAE,KAAsB;QAC1F,2CAA2C;QAC3C,MAAM,SAAS,GAAgB,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;QAExD,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,GAAmB,CAAC,CAAA;QAC9D,kGAAkG;QAClG,8FAA8F;QAC9F,4EAA4E;QAC5E,IAAI,SAAS,KAAK,UAAU;YAAE,KAAK,CAAC,mBAAmB,GAAG,IAAI,CAAA;QAC9D,IAAI,QAAQ,GAAyB,IAAI,CAAA;QACzC,IAAI,SAAS,IAAI,KAAK,CAAC,gBAAgB,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,CAAC,CAAA;YAChF,IAAI,MAAM,EAAE,CAAC;gBACZ,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAA;gBACrB,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;gBACxD,6FAA6F;gBAC7F,6FAA6F;gBAC7F,IAAI,KAAK,CAAC,gBAAgB,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;oBACvD,SAAS,CAAC,QAAQ,GAAG,EAAE,GAAG,CAAC,SAAS,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAA;gBAC1G,CAAC;gBACD,2FAA2F;gBAC3F,iEAAiE;gBACjE,IAAI,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;oBAC7D,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC,GAAG,CAAA;oBACjC,KAAK,CAAC,kBAAkB,GAAG,SAAS,CAAA;gBACrC,CAAC;YACF,CAAC;QACF,CAAC;QAED,MAAM,WAAW,GAAG,QAAQ,IAAI,cAAc,CAAA;QAC9C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAA;QACrE,CAAC;QACD,OAAO,SAAS,CAAA;IACjB,CAAC;IAED,KAAK,CAAC,cAAc,CACnB,IAAiB,EACjB,SAAiB,EACjB,cAAoC,EACpC,KAAsB;QAEtB,KAAK,CAAC,gBAAgB,EAAE,CAAA;QAExB,MAAM,KAAK,GAAgD;YAC1D,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,SAAS;YACT,KAAK,EAAE,KAAK,CAAC,mBAAmB;SAChC,CAAA;QACD,4FAA4F;QAC5F,2FAA2F;QAC3F,6FAA6F;QAC7F,yFAAyF;QACzF,6BAA6B;QAC7B,IAAI,cAAc,IAAI,OAAO,cAAc,CAAC,EAAE,KAAK,QAAQ;YAAE,KAAK,CAAC,QAAQ,GAAG,cAAc,CAAC,EAAE,CAAA;QAC/F,iGAAiG;QACjG,mGAAmG;QACnG,mGAAmG;QACnG,kGAAkG;QAClG,mGAAmG;QACnG,gGAAgG;QAChG,kGAAkG;QAClG,oFAAoF;QACpF,MAAM,OAAO,GAAG,cAAc,EAAE,OAAO,IAAI,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,WAAW,CAAA;QACpF,IAAI,OAAO;YAAE,KAAK,CAAC,OAAO,GAAG,OAAO,CAAA;QACpC,4FAA4F;QAC5F,gGAAgG;QAChG,2EAA2E;QAC3E,IAAI,SAAS,KAAK,UAAU,IAAI,KAAK,CAAC,QAAQ;YAAE,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAA;QAE/E,IAAI,UAA2B,CAAA;QAC/B,IAAI,CAAC;YACJ,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;YACjD,2FAA2F;YAC3F,4FAA4F;YAC5F,sFAAsF;YACtF,wFAAwF;YACxF,4FAA4F;YAC5F,yFAAyF;YACzF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACrF,OAAO,KAAK,CAAC,QAAQ,CAAA;gBACrB,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;YAClD,CAAC;QACF,CAAC;QAAC,MAAM,CAAC;YACR,yFAAyF;YACzF,qCAAqC;YACrC,OAAO,IAAI,CAAA;QACZ,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA;QACxC,2FAA2F;QAC3F,iGAAiG;QACjG,mGAAmG;QACnG,iGAAiG;QACjG,uDAAuD;QACvD,EAAE;QACF,+FAA+F;QAC/F,kGAAkG;QAClG,uFAAuF;QACvF,8FAA8F;QAC9F,+FAA+F;QAC/F,8FAA8F;QAC9F,4FAA4F;QAC5F,mGAAmG;QACnG,EAAE;QACF,8FAA8F;QAC9F,8FAA8F;QAC9F,yFAAyF;QACzF,4FAA4F;QAC5F,+FAA+F;QAC/F,qFAAqF;QACrF,+FAA+F;QAC/F,MAAM,cAAc,GAAG,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,UAAU,CAAA;QACzE,IAAI,MAAM,GAAG,UAAU,CAAA;QACvB,IAAI,KAAK,CAAC,eAAe,IAAI,cAAc,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtE,MAAM,IAAI,GAAG,KAAK,CAAC,eAAe,CAAA;YAClC,MAAM,CAAC,GAAG,KAAK,CAAC,YAAY,CAAA;YAC5B,MAAM,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,CAC5B,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACR,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,KAAK,CAAC;gBAC7D,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAC9E,CAAA;QACF,CAAC;QAED,8FAA8F;QAC9F,yFAAyF;QACzF,wFAAwF;QACxF,wFAAwF;QACxF,6FAA6F;QAC7F,8FAA8F;QAC9F,yFAAyF;QACzF,8BAA8B;QAC9B,MAAM,oBAAoB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;QAC5F,IAAI,oBAAoB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/C,MAAM,GAAG;gBACR,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;gBACrE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;aACpE,CAAA;QACF,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAE,CAAA;QACtB,IAAI,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,eAAe;YAAE,OAAO,IAAI,CAAA;QAClD,2FAA2F;QAC3F,4FAA4F;QAC5F,+FAA+F;QAC/F,IAAI,mBAAmB,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACnD,GAAG,CAAC,iBAAiB,GAAG,UAAU,CAAA;QACnC,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IAC9C,CAAC;CACD;AAED;;;;;;GAMG;AACH,SAAS,YAAY,CAAC,IAAiB,EAAE,QAAuB,EAAE,YAA6B;IAC9F,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAA;QACzC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,IAAI,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAA;QACtE,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;YAAE,IAAI,CAAC,sBAAsB,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC7E,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;IACrB,CAAC;IACD,IAAI,CAAC,MAAM,GAAG,UAAU,CAAA;IACxB,IAAI,CAAC,QAAQ,GAAG,GAAG,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAA;IACtD,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAA;IACvB,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAA;IACvB,IAAI,CAAC,OAAO,GAAG,OAAO,QAAQ,CAAC,EAAE,EAAE,CAAA,CAAC,2DAA2D;IAC/F,+FAA+F;IAC/F,kGAAkG;IAClG,kGAAkG;IAClG,iGAAiG;IACjG,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,cAAc,EAAE,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAA;IAC1G,gGAAgG;IAChG,kGAAkG;IAClG,0CAA0C;IAC1C,IAAI,QAAQ,CAAC,QAAQ;QAAE,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,GAAG,IAAI,CAAA;IACrE,iGAAiG;IACjG,6FAA6F;IAC7F,+FAA+F;IAC/F,IAAI,QAAQ,CAAC,iBAAiB;QAAE,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,GAAG,QAAQ,CAAC,iBAAiB,CAAA;IAChG,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IACjC,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../resolve.ts"],"names":[],"mappings":"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"}
@@ -28,27 +28,23 @@ import type { AddressNode } from "@mailwoman/core/decoder";
28
28
  import type { ResolvedPlace, ResolverBackend } from "@mailwoman/core/resolver";
29
29
  export interface SpanRescoreOptions {
30
30
  /**
31
- * ISO-3166 alpha-2 country to constrain the gazetteer match (the parse's detected/ default
32
- * country).
31
+ * ISO-3166 alpha-2 country to constrain the gazetteer match (the parse's detected/ default country).
33
32
  */
34
33
  country?: string;
35
34
  /**
36
- * Sibling postcode — used both as the backend disambiguation hint AND the consistency-gate
37
- * anchor.
35
+ * Sibling postcode — used both as the backend disambiguation hint AND the consistency-gate anchor.
38
36
  */
39
37
  postcode?: string;
40
38
  /**
41
- * Reject a candidate whose coordinate is farther than this (km) from the postcode anchor. The
42
- * gate only fires when the postcode resolves to a point in the backend; otherwise it can't and
43
- * the match is accepted (so it never penalizes a backend without postcode coverage). 0 disables.
44
- * Default 50.
39
+ * Reject a candidate whose coordinate is farther than this (km) from the postcode anchor. The gate only fires when
40
+ * the postcode resolves to a point in the backend; otherwise it can't and the match is accepted (so it never
41
+ * penalizes a backend without postcode coverage). 0 disables. Default 50.
45
42
  */
46
43
  gateKm?: number;
47
44
  /** Max contiguous raw tokens to treat as one locality span. Default 4. */
48
45
  maxSpanTokens?: number;
49
46
  /**
50
- * Min confidence for a street/house_number/postcode node to count as a span-blocking constituent.
51
- * Default 0.7.
47
+ * Min confidence for a street/house_number/postcode node to count as a span-blocking constituent. Default 0.7.
52
48
  */
53
49
  confidentThreshold?: number;
54
50
  }
@@ -62,22 +58,20 @@ export interface RescoreCandidate {
62
58
  /** The resolved gazetteer place (decorate a node with this). */
63
59
  place: ResolvedPlace;
64
60
  /**
65
- * Whether the postcode-consistency gate FIRED for this recovery — i.e. the postcode resolved to a
66
- * point and the match was validated within `gateKm` of it. `true` = high-precision (postcode-
67
- * consistent); `false` = ungated (no postcode→point coverage for this country, so the match
68
- * wasn't geo-validated the ~83%-precision case). The caller surfaces this as
69
- * `metadata.rescore_gated` so a consumer can threshold on it WITHOUT a hidden per-country
70
- * coverage map. Deliberately NOT folded into the calibrated `confidence` that would break the
71
- * isotonic guarantee (a true calibrated 0.83 must not be confused with a rescore plug-in
72
- * estimate).
61
+ * Whether the postcode-consistency gate FIRED for this recovery — i.e. the postcode resolved to a point and the match
62
+ * was validated within `gateKm` of it. `true` = high-precision (postcode- consistent); `false` = ungated (no
63
+ * postcode→point coverage for this country, so the match wasn't geo-validated — the ~83%-precision case). The caller
64
+ * surfaces this as `metadata.rescore_gated` so a consumer can threshold on it WITHOUT a hidden per-country coverage
65
+ * map. Deliberately NOT folded into the calibrated `confidence` that would break the isotonic guarantee (a true
66
+ * calibrated 0.83 must not be confused with a rescore plug-in estimate).
73
67
  */
74
68
  gated: boolean;
75
69
  }
76
70
  /** True if any node in the tree already carries a resolved place id — the #685 brake. */
77
71
  export declare function hasResolvedPlace(roots: readonly AddressNode[]): boolean;
78
72
  /**
79
- * Find the best locality the raw text exact-matches in the gazetteer. Returns null when nothing
80
- * matches (or the postcode gate rejects every match). Callers gate on `hasResolvedPlace` first.
73
+ * Find the best locality the raw text exact-matches in the gazetteer. Returns null when nothing matches (or the
74
+ * postcode gate rejects every match). Callers gate on `hasResolvedPlace` first.
81
75
  */
82
76
  export declare function findRescoreCandidate(raw: string, roots: readonly AddressNode[], backend: ResolverBackend, opts?: SpanRescoreOptions): Promise<RescoreCandidate | null>;
83
77
  //# sourceMappingURL=span-rescore.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"span-rescore.d.ts","sourceRoot":"","sources":["../span-rescore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAG9E,MAAM,WAAW,kBAAkB;IAClC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,0EAA0E;IAC1E,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,mFAAmF;AACnF,MAAM,WAAW,gBAAgB;IAChC,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAA;IACZ,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,gEAAgE;IAChE,KAAK,EAAE,aAAa,CAAA;IACpB;;;;;;;;;OASG;IACH,KAAK,EAAE,OAAO,CAAA;CACd;AAyBD,yFAAyF;AACzF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,CAQvE;AAwBD;;;GAGG;AACH,wBAAsB,oBAAoB,CACzC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,SAAS,WAAW,EAAE,EAC7B,OAAO,EAAE,eAAe,EACxB,IAAI,GAAE,kBAAuB,GAC3B,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAoDlC"}
1
+ {"version":3,"file":"span-rescore.d.ts","sourceRoot":"","sources":["../span-rescore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAG9E,MAAM,WAAW,kBAAkB;IAClC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,0EAA0E;IAC1E,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,mFAAmF;AACnF,MAAM,WAAW,gBAAgB;IAChC,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAA;IACZ,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,gEAAgE;IAChE,KAAK,EAAE,aAAa,CAAA;IACpB;;;;;;;OAOG;IACH,KAAK,EAAE,OAAO,CAAA;CACd;AA2BD,yFAAyF;AACzF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,CAYvE;AAkCD;;;GAGG;AACH,wBAAsB,oBAAoB,CACzC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,SAAS,WAAW,EAAE,EAC7B,OAAO,EAAE,eAAe,EACxB,IAAI,GAAE,kBAAuB,GAC3B,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CA4DlC"}
@@ -46,7 +46,7 @@ export function hasResolvedPlace(roots) {
46
46
  const stack = [...roots];
47
47
  while (stack.length) {
48
48
  const n = stack.pop();
49
- if (n.placeId)
49
+ if (n.placeID)
50
50
  return true;
51
51
  if (n.children?.length)
52
52
  stack.push(...n.children);
@@ -54,15 +54,21 @@ export function hasResolvedPlace(roots) {
54
54
  return false;
55
55
  }
56
56
  /**
57
- * Char ranges of confident street/house_number/postcode constituents a locality span must not
58
- * overlap them.
57
+ * Char ranges of confident street / house_number / postcode constituents, including the street affixes (`street_prefix`
58
+ * / `street_suffix`) — a locality span must not overlap them. The affixes matter: a confident "Ave" in "350 5th Ave,
59
+ * NY" is a street suffix, not a locality, and without this guard the recovery exact-matches it against a same-named
60
+ * place ("Ave", France) and injects a bogus locality.
59
61
  */
60
62
  function confidentRanges(roots, threshold) {
61
63
  const out = [];
62
64
  const stack = [...roots];
63
65
  while (stack.length) {
64
66
  const n = stack.pop();
65
- if ((n.tag === "postcode" || n.tag === "house_number" || n.tag === "street") &&
67
+ if ((n.tag === "postcode" ||
68
+ n.tag === "house_number" ||
69
+ n.tag === "street" ||
70
+ n.tag === "street_prefix" ||
71
+ n.tag === "street_suffix") &&
66
72
  (n.confidence ?? 0) >= threshold &&
67
73
  Number.isFinite(n.start) &&
68
74
  Number.isFinite(n.end)) {
@@ -74,8 +80,8 @@ function confidentRanges(roots, threshold) {
74
80
  return out;
75
81
  }
76
82
  /**
77
- * Find the best locality the raw text exact-matches in the gazetteer. Returns null when nothing
78
- * matches (or the postcode gate rejects every match). Callers gate on `hasResolvedPlace` first.
83
+ * Find the best locality the raw text exact-matches in the gazetteer. Returns null when nothing matches (or the
84
+ * postcode gate rejects every match). Callers gate on `hasResolvedPlace` first.
79
85
  */
80
86
  export async function findRescoreCandidate(raw, roots, backend, opts = {}) {
81
87
  const gateKm = opts.gateKm ?? 50;
@@ -1 +1 @@
1
- {"version":3,"file":"span-rescore.js","sourceRoot":"","sources":["../span-rescore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"span-rescore.js","sourceRoot":"","sources":["../span-rescore.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"vitest.config.d.ts","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;;AASH,wBAiBE"}
1
+ {"version":3,"file":"vitest.config.d.ts","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;;AAUH,wBAiBE"}
@@ -1 +1 @@
1
- {"version":3,"file":"vitest.config.js","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AACzD,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,EAAE,CAAC,CAAA;AAE/E,eAAe,YAAY,CAAC;IAC3B,OAAO,EAAE;QACR,KAAK,EAAE;YACN,sFAAsF;YACtF,EAAE,IAAI,EAAE,6BAA6B,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE;YAC/E,EAAE,IAAI,EAAE,0BAA0B,EAAE,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,yBAAyB,CAAC,EAAE;YAC3F,EAAE,IAAI,EAAE,oBAAoB,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE;YACpE,EAAE,IAAI,EAAE,6BAA6B,EAAE,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,4BAA4B,CAAC,EAAE;YACjG,EAAE,IAAI,EAAE,uBAAuB,EAAE,WAAW,EAAE,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE;YAC1E,EAAE,IAAI,EAAE,2BAA2B,EAAE,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,0BAA0B,CAAC,EAAE;YAC7F,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE;SACtE;KACD;IACD,IAAI,EAAE;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,CAAC,oBAAoB,EAAE,WAAW,EAAE,YAAY,CAAC;KAC1D;CACD,CAAC,CAAA"}
1
+ {"version":3,"file":"vitest.config.js","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AACzD,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,EAAE,CAAC,CAAA;AAE/E,eAAe,YAAY,CAAC;IAC3B,OAAO,EAAE;QACR,KAAK,EAAE;YACN,sFAAsF;YACtF,EAAE,IAAI,EAAE,6BAA6B,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE;YAC/E,EAAE,IAAI,EAAE,0BAA0B,EAAE,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,yBAAyB,CAAC,EAAE;YAC3F,EAAE,IAAI,EAAE,oBAAoB,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE;YACpE,EAAE,IAAI,EAAE,6BAA6B,EAAE,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,4BAA4B,CAAC,EAAE;YACjG,EAAE,IAAI,EAAE,uBAAuB,EAAE,WAAW,EAAE,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE;YAC1E,EAAE,IAAI,EAAE,2BAA2B,EAAE,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,0BAA0B,CAAC,EAAE;YAC7F,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE;SACtE;KACD;IACD,IAAI,EAAE;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,CAAC,oBAAoB,EAAE,WAAW,EAAE,YAAY,CAAC;KAC1D;CACD,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mailwoman/resolver",
3
- "version": "4.16.2",
3
+ "version": "5.1.0",
4
4
  "description": "The address resolver: walk an AddressTree, decorate nodes with gazetteer-supplied coordinates + attribution. Backend-agnostic (any ResolverBackend), with the span-rescore + postcode-consistency levers. Lifted out of @mailwoman/core so it can depend on @mailwoman/spatial (haversine) + @mailwoman/codex (USPS directionals) instead of reinventing them; the type contract stays in core so the pipeline composes it without a cycle.",
5
5
  "license": "AGPL-3.0-only",
6
6
  "repository": {
@@ -8,24 +8,24 @@
8
8
  "url": "https://github.com/sister-software/mailwoman.git",
9
9
  "directory": "resolver"
10
10
  },
11
- "type": "module",
12
- "exports": {
13
- "./package.json": "./package.json",
14
- ".": "./out/index.js",
15
- "./span-rescore": "./out/span-rescore.js"
16
- },
17
- "dependencies": {
18
- "@mailwoman/codex": "4.16.2",
19
- "@mailwoman/core": "4.16.2",
20
- "@mailwoman/spatial": "4.16.2"
21
- },
22
11
  "files": [
23
12
  "out/**/*.js",
24
13
  "out/**/*.js.map",
25
14
  "out/**/*.d.ts",
26
15
  "out/**/*.d.ts.map"
27
16
  ],
17
+ "type": "module",
18
+ "exports": {
19
+ "./package.json": "./package.json",
20
+ ".": "./out/index.js",
21
+ "./span-rescore": "./out/span-rescore.js"
22
+ },
28
23
  "publishConfig": {
29
24
  "access": "public"
25
+ },
26
+ "dependencies": {
27
+ "@mailwoman/codex": "5.1.0",
28
+ "@mailwoman/core": "5.1.0",
29
+ "@mailwoman/spatial": "5.1.0"
30
30
  }
31
31
  }