@mailwoman/core 4.10.0 → 4.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/README.md +90 -0
  2. package/data/coarse-placer/meta.json +17 -48
  3. package/out/decoder/arbitrate-tree.d.ts +45 -0
  4. package/out/decoder/arbitrate-tree.d.ts.map +1 -0
  5. package/out/decoder/arbitrate-tree.js +97 -0
  6. package/out/decoder/arbitrate-tree.js.map +1 -0
  7. package/out/decoder/index.d.ts +2 -0
  8. package/out/decoder/index.d.ts.map +1 -1
  9. package/out/decoder/index.js +2 -0
  10. package/out/decoder/index.js.map +1 -1
  11. package/out/decoder/proposals-to-tree.d.ts +20 -1
  12. package/out/decoder/proposals-to-tree.d.ts.map +1 -1
  13. package/out/decoder/proposals-to-tree.js +37 -0
  14. package/out/decoder/proposals-to-tree.js.map +1 -1
  15. package/out/decoder/resolve-proposal-overlaps.d.ts +52 -0
  16. package/out/decoder/resolve-proposal-overlaps.d.ts.map +1 -0
  17. package/out/decoder/resolve-proposal-overlaps.js +74 -0
  18. package/out/decoder/resolve-proposal-overlaps.js.map +1 -0
  19. package/out/parser/index.d.ts +1 -0
  20. package/out/parser/index.d.ts.map +1 -1
  21. package/out/parser/index.js +1 -0
  22. package/out/parser/index.js.map +1 -1
  23. package/out/parser/proposal-pipeline.d.ts +16 -3
  24. package/out/parser/proposal-pipeline.d.ts.map +1 -1
  25. package/out/parser/proposal-pipeline.js +18 -6
  26. package/out/parser/proposal-pipeline.js.map +1 -1
  27. package/out/parser/solution-to-proposals.d.ts +28 -0
  28. package/out/parser/solution-to-proposals.d.ts.map +1 -0
  29. package/out/parser/solution-to-proposals.js +44 -0
  30. package/out/parser/solution-to-proposals.js.map +1 -0
  31. package/out/pipeline/runtime-pipeline.d.ts.map +1 -1
  32. package/out/pipeline/runtime-pipeline.js +32 -4
  33. package/out/pipeline/runtime-pipeline.js.map +1 -1
  34. package/out/pipeline/types.d.ts +30 -1
  35. package/out/pipeline/types.d.ts.map +1 -1
  36. package/out/policy/defaults.d.ts +11 -6
  37. package/out/policy/defaults.d.ts.map +1 -1
  38. package/out/policy/defaults.js +12 -7
  39. package/out/policy/defaults.js.map +1 -1
  40. package/out/policy/from-config.d.ts +14 -4
  41. package/out/policy/from-config.d.ts.map +1 -1
  42. package/out/policy/from-config.js +16 -5
  43. package/out/policy/from-config.js.map +1 -1
  44. package/out/policy/index.d.ts +1 -0
  45. package/out/policy/index.d.ts.map +1 -1
  46. package/out/policy/index.js +1 -0
  47. package/out/policy/index.js.map +1 -1
  48. package/out/policy/input-shape-router.d.ts +104 -0
  49. package/out/policy/input-shape-router.d.ts.map +1 -0
  50. package/out/policy/input-shape-router.js +88 -0
  51. package/out/policy/input-shape-router.js.map +1 -0
  52. package/out/policy/registry.d.ts +7 -3
  53. package/out/policy/registry.d.ts.map +1 -1
  54. package/out/policy/registry.js +7 -3
  55. package/out/policy/registry.js.map +1 -1
  56. package/out/resolver/remote-resolver.d.ts +4 -2
  57. package/out/resolver/remote-resolver.d.ts.map +1 -1
  58. package/out/resolver/remote-resolver.js.map +1 -1
  59. package/out/resolver/resolve.d.ts.map +1 -1
  60. package/out/resolver/resolve.js +74 -4
  61. package/out/resolver/resolve.js.map +1 -1
  62. package/out/resolver/types.d.ts +48 -9
  63. package/out/resolver/types.d.ts.map +1 -1
  64. package/out/resolver/types.js +56 -9
  65. package/out/resolver/types.js.map +1 -1
  66. package/out/utils/repo.d.ts.map +1 -1
  67. package/out/utils/repo.js +5 -4
  68. package/out/utils/repo.js.map +1 -1
  69. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../resolver/types.ts"],"names":[],"mappings":"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"}
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;;;;;;;;;;;;;;;;;;;;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"}
@@ -24,21 +24,40 @@ export const DEFAULT_PLACETYPE_MAP = {
24
24
  postcode: "postalcode",
25
25
  };
26
26
  /**
27
- * Placetype-equivalence groups for lookup FILTERING. WOF splits "city-like place" across several
28
- * placetypes `locality` (most cities), `borough` (Brooklyn, the Paris arrondissements, the London
29
- * boroughs), and `localadmin` (FR communes, US towns/townships in New England) but an address's
30
- * locality span can name ANY of them. A backend that filters a locality query to `placetype =
31
- * 'locality'` alone makes Brooklyn-the-borough (pop 2.5M) unreachable, so the fuzzy "Brooklyn Park,
32
- * MN" wins instead.
27
+ * Placetype-equivalence groups for lookup FILTERING. WOF splits a single addressing tier across
28
+ * several placetypes, but an address's span can name ANY of them. A backend that filters to the one
29
+ * "obvious" placetype makes the equivalents unreachable, so a fuzzy same-name place in the wrong
30
+ * tier wins instead.
31
+ *
32
+ * Three tiers are affected (the value of each entry is the set the SQL filter should accept; the
33
+ * FIRST entry is the canonical/requested type, which shard routing keys off):
34
+ *
35
+ * - **`locality`** — `locality` (most cities), `borough` (Brooklyn, the Paris arrondissements, the
36
+ * London boroughs), and `localadmin` (FR communes, US towns/townships in New England). Without
37
+ * the group, Brooklyn-the-borough (pop 2.5M) was unreachable and the fuzzy "Brooklyn Park, MN"
38
+ * won.
39
+ * - **`region`** — `region` + `macroregion` (#718). WOF does NOT model every country's top-level
40
+ * civil division as `region`: Italian regions (Lombardia, Veneto, Toscana…) are `macroregion`
41
+ * (their PROVINCES are `region`), and the post-2016 French régions (Île-de-France) are
42
+ * `macroregion` too. An address's `region` span names exactly those, so a `region`-only filter
43
+ * resolved them to NOTHING (confirmed against the IT/FR eval rows). US states / DE Bundesländer /
44
+ * ES provincias are genuine `region`, so the EXACT-type match is preferred in ranking (see the
45
+ * resolve.ts fallback-quality annotation) — the macro is the recall safety net, not a demotion.
46
+ * - **`county`** — `county` + `macrocounty` (#718). The `subregion` ComponentTag maps to `county` via
47
+ * {@link DEFAULT_PLACETYPE_MAP}; WOF carries `macrocounty` for FR départements-grouping / DE / GB
48
+ * tiers above the county. Proactive (no eval row exercises `subregion` today) but symmetric with
49
+ * `region` — biasing to inclusion, since a missed resolution costs more than a too-broad
50
+ * candidate (which is QA-visible). Same exact-type preference applies.
33
51
  *
34
52
  * This table is the single source of truth for that expansion, shared by every lookup backend
35
53
  * (`@mailwoman/resolver-wof-sqlite`, `@mailwoman/resolver-wof-wasm`, and the demo's httpvfs lookup)
36
- * so the Node and browser resolvers can't drift. Keyed by the REQUESTED placetype; the value is the
37
- * set the SQL filter should actually accept. Placetypes without an entry pass through unchanged —
38
- * an explicit `placetype: "borough"` query stays narrow.
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.
39
56
  */
40
57
  export const PLACETYPE_FILTER_GROUPS = {
41
58
  locality: ["locality", "borough", "localadmin"],
59
+ region: ["region", "macroregion"],
60
+ county: ["county", "macrocounty"],
42
61
  };
43
62
  export function expandPlacetypeFilter(placetypes) {
44
63
  if (!placetypes)
@@ -52,4 +71,32 @@ export function expandPlacetypeFilter(placetypes) {
52
71
  }
53
72
  return out;
54
73
  }
74
+ /**
75
+ * Macro/broader-tier members of {@link PLACETYPE_FILTER_GROUPS} — the recall safety net a query may
76
+ * fall through to when no candidate of the EXACT requested placetype exists (#718). DELIBERATELY
77
+ * scoped to the `macro*` tiers only: the `locality` group's `borough`/`localadmin` are genuine
78
+ * peers (Brooklyn-the-borough is a first-class locality answer, #404-class), NOT fallbacks — so
79
+ * they must NOT be deprioritized or annotated. Only `macroregion`/`macrocounty` are a broader admin
80
+ * tier standing in for a true `region`/`county`.
81
+ */
82
+ const MACRO_FALLBACK_PLACETYPES = new Set(["macroregion", "macrocounty"]);
83
+ /**
84
+ * Did `candidatePlacetype` resolve `requestedPlacetype` only via a BROADER admin tier (a macro-type
85
+ * fallback within the {@link PLACETYPE_FILTER_GROUPS} expansion), rather than the exact type
86
+ * (#718)?
87
+ *
88
+ * `region` → `region` is exact (false); `region` → `macroregion` is a fallback (true). Scoped to
89
+ * the `macro*` tiers (see {@link MACRO_FALLBACK_PLACETYPES}) so the `locality` group's
90
+ * borough/localadmin peers stay exact. The resolver uses this to (a) prefer an exact-type candidate
91
+ * in ranking and (b) annotate `resolutionQuality: "fallback"` when only a macro-type matched. A
92
+ * placetype outside the requested group, or any non-macro member, is treated as exact (false).
93
+ */
94
+ export function isPlacetypeFallback(requestedPlacetype, candidatePlacetype) {
95
+ const group = PLACETYPE_FILTER_GROUPS[requestedPlacetype];
96
+ if (!group)
97
+ return false;
98
+ if (candidatePlacetype === requestedPlacetype)
99
+ return false;
100
+ return MACRO_FALLBACK_PLACETYPES.has(candidatePlacetype) && group.includes(candidatePlacetype);
101
+ }
55
102
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../resolver/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAwTH,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;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAgD;IACnF,QAAQ,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,YAAY,CAAC;CAC/C,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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../resolver/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAkUH,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 +1 @@
1
- {"version":3,"file":"repo.d.ts","sourceRoot":"","sources":["../../utils/repo.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAA6B,KAAK,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAA;AAEhF;;;;GAIG;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB,QAAQ,CAAA;AACrC,MAAM,MAAM,gBAAgB,GAAG,OAAO,gBAAgB,CAAA;AAEtD,QAAA,MAAM,aAAa,EAAG,WAAoB,CAAA;AAC1C,KAAK,aAAa,GAAG,OAAO,aAAa,CAAA;AA4BzC;;GAEG;AACH,eAAO,MAAM,mBAAmB,oDAAiE,CAAA;AAajG,eAAO,MAAM,sBAAsB,oDAAoE,CAAA;AAEvG;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,EAClD,GAAG,YAAY,EAAE,CAAC,GAChB,WAAW,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAGjE;AAED,MAAM,MAAM,eAAe,GAAG,2BAA2B,GAAG,WAAW,GAAG,UAAU,GAAG,aAAa,CAAA;AAEpG;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,CAAC,SAAS,eAAe,EAAE,CAAC,SAAS,MAAM,EAAE,EAC1F,QAAQ,EAAE,CAAC,EACX,GAAG,YAAY,EAAE,CAAC,4EAGlB;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,+BAA8B,CAAA"}
1
+ {"version":3,"file":"repo.d.ts","sourceRoot":"","sources":["../../utils/repo.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAA6B,KAAK,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAA;AAEhF;;;;GAIG;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB,QAAQ,CAAA;AACrC,MAAM,MAAM,gBAAgB,GAAG,OAAO,gBAAgB,CAAA;AAEtD,QAAA,MAAM,aAAa,EAAG,WAAoB,CAAA;AAC1C,KAAK,aAAa,GAAG,OAAO,aAAa,CAAA;AA6BzC;;GAEG;AACH,eAAO,MAAM,mBAAmB,oDAAiE,CAAA;AAajG,eAAO,MAAM,sBAAsB,oDAAoE,CAAA;AAEvG;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,EAClD,GAAG,YAAY,EAAE,CAAC,GAChB,WAAW,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAGjE;AAED,MAAM,MAAM,eAAe,GAAG,2BAA2B,GAAG,WAAW,GAAG,UAAU,GAAG,aAAa,CAAA;AAEpG;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,CAAC,SAAS,eAAe,EAAE,CAAC,SAAS,MAAM,EAAE,EAC1F,QAAQ,EAAE,CAAC,EACX,GAAG,YAAY,EAAE,CAAC,4EAGlB;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,+BAA8B,CAAA"}
package/out/utils/repo.js CHANGED
@@ -27,12 +27,13 @@ const __dirname = dirname(fileURLToPath(import.meta.url));
27
27
  * In compiled mode this file lives at `core/out/utils/repo.js` (so the PARENT of `utils` is `out/`)
28
28
  * and in source mode at `core/utils/repo.ts` (the parent is `core/`). Detect the mode by checking
29
29
  * whether the parent directory (`resolve("..")`) is `out/` — uses `basename` on the resolved path
30
- * rather than a substring match on `__dirname`, so it survives symlinks and output-directory renames.
30
+ * rather than a substring match on `__dirname`, so it survives symlinks and output-directory
31
+ * renames.
31
32
  *
32
33
  * (Earlier this checked `resolve("..", "..")`, which overshoots `out/` to `core/` and so was always
33
- * false — the compiled tree then resolved `CorePackageAbsolutePath` to `core/out` instead of `core/`,
34
- * landing dictionary reads at the nonexistent `core/out/data` and requiring an external symlink bridge
35
- * to find `core/data`. #481.)
34
+ * false — the compiled tree then resolved `CorePackageAbsolutePath` to `core/out` instead of
35
+ * `core/`, landing dictionary reads at the nonexistent `core/out/data` and requiring an external
36
+ * symlink bridge to find `core/data`. #481.)
36
37
  */
37
38
  const __isCompiledTree = basename(resolve(__dirname, "..")) === OutDirectoryName;
38
39
  const __upCount = __isCompiledTree ? PathReflection.length : PathReflection.length - 1;
@@ -1 +1 @@
1
- {"version":3,"file":"repo.js","sourceRoot":"","sources":["../../utils/repo.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,yBAAyB,EAA+B,MAAM,SAAS,CAAA;AAEhF;;;;GAIG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAA;AAGrC,MAAM,aAAa,GAAG,WAAoB,CAAA;AAG1C,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAU,CAAA;AAGxD;;GAEG;AACH,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAkD,CAAA;AAE1G;;;;;;;;;;;;GAYG;AACH,MAAM,gBAAgB,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,KAAK,gBAAgB,CAAA;AAChF,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAA;AACtF,MAAM,oBAAoB,GAAG,OAAO,CAAC,SAAS,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;AAGjG;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,yBAAyB,CAAgB,oBAAoB,CAAC,CAAA;AAEjG;;;;;;;;;GASG;AACH,MAAM,uBAAuB,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;AACtF,MAAM,CAAC,MAAM,sBAAsB,GAAG,yBAAyB,CAAgB,uBAAuB,CAAC,CAAA;AAEvG;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC/B,GAAG,YAAe;IAElB,8DAA8D;IAC9D,OAAO,mBAAmB,CAAC,gBAAgB,EAAE,GAAG,YAAY,CAAQ,CAAA;AACrE,CAAC;AAID;;;;;;GAMG;AACH,MAAM,UAAU,6BAA6B,CAC5C,QAAW,EACX,GAAG,YAAe;IAElB,OAAO,sBAAsB,CAAC,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,YAAY,CAAC,CAAA;AACjF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAA"}
1
+ {"version":3,"file":"repo.js","sourceRoot":"","sources":["../../utils/repo.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,yBAAyB,EAA+B,MAAM,SAAS,CAAA;AAEhF;;;;GAIG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAA;AAGrC,MAAM,aAAa,GAAG,WAAoB,CAAA;AAG1C,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAU,CAAA;AAGxD;;GAEG;AACH,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAkD,CAAA;AAE1G;;;;;;;;;;;;;GAaG;AACH,MAAM,gBAAgB,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,KAAK,gBAAgB,CAAA;AAChF,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAA;AACtF,MAAM,oBAAoB,GAAG,OAAO,CAAC,SAAS,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;AAGjG;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,yBAAyB,CAAgB,oBAAoB,CAAC,CAAA;AAEjG;;;;;;;;;GASG;AACH,MAAM,uBAAuB,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;AACtF,MAAM,CAAC,MAAM,sBAAsB,GAAG,yBAAyB,CAAgB,uBAAuB,CAAC,CAAA;AAEvG;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC/B,GAAG,YAAe;IAElB,8DAA8D;IAC9D,OAAO,mBAAmB,CAAC,gBAAgB,EAAE,GAAG,YAAY,CAAQ,CAAA;AACrE,CAAC;AAID;;;;;;GAMG;AACH,MAAM,UAAU,6BAA6B,CAC5C,QAAW,EACX,GAAG,YAAe;IAElB,OAAO,sBAAsB,CAAC,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,YAAY,CAAC,CAAA;AACjF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mailwoman/core",
3
- "version": "4.10.0",
3
+ "version": "4.11.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": {