mailwoman 4.9.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.
- package/README.md +157 -0
- package/out/commands/registry.d.ts.map +1 -0
- package/out/commands/registry.js +382 -0
- package/out/commands/registry.js.map +1 -0
- package/out/geocode-core.d.ts.map +1 -1
- package/out/geocode-core.js +2 -1
- package/out/geocode-core.js.map +1 -1
- package/out/interp-calibration.d.ts.map +1 -1
- package/out/interp-calibration.js +11 -10
- package/out/interp-calibration.js.map +1 -1
- package/out/region-recognition.d.ts.map +1 -0
- package/out/region-recognition.js +192 -0
- package/out/region-recognition.js.map +1 -0
- package/out/runtime-pipeline.d.ts.map +1 -1
- package/out/runtime-pipeline.js +18 -1
- package/out/runtime-pipeline.js.map +1 -1
- package/out/server/GeocodeRouter.d.ts.map +1 -1
- package/out/server/GeocodeRouter.js.map +1 -1
- package/package.json +13 -11
package/README.md
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# mailwoman
|
|
2
|
+
|
|
3
|
+
**A calibrated, retrieval-augmented postal-address parser.**
|
|
4
|
+
|
|
5
|
+
Mailwoman parses free-text postal addresses into structured components (house
|
|
6
|
+
number, street, locality, region, postcode, country, …) and resolves them to
|
|
7
|
+
coordinates via a gazetteer. It is the user-facing CLI and library entry point
|
|
8
|
+
for the Mailwoman ecosystem.
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
# CLI — parse an address
|
|
12
|
+
npx mailwoman parse "1600 Amphitheatre Parkway, Mountain View, CA 94043"
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
// Library — parse programmatically
|
|
17
|
+
import { AddressParser } from "mailwoman"
|
|
18
|
+
|
|
19
|
+
const parser = new AddressParser()
|
|
20
|
+
const result = await parser.parse("1600 Amphitheatre Parkway, Mountain View, CA 94043")
|
|
21
|
+
// result.components.house_number → "1600"
|
|
22
|
+
// result.components.street → "Amphitheatre Parkway"
|
|
23
|
+
// result.components.locality → "Mountain View"
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## What it does
|
|
27
|
+
|
|
28
|
+
Mailwoman is **not** an LLM and nothing about it is generative. It is a small
|
|
29
|
+
transformer encoder (~30M params) doing BIO token classification over a 33-label
|
|
30
|
+
address schema — boring NER, which is a feature for short, structured strings.
|
|
31
|
+
|
|
32
|
+
The design splits the problem in two:
|
|
33
|
+
|
|
34
|
+
- **The model learns the grammar** — a sequence labeler trained from scratch
|
|
35
|
+
on a diverse corpus of real and synthetic addresses.
|
|
36
|
+
- **The gazetteer knows the atlas** — a provenance-tracked Who's On First
|
|
37
|
+
database that resolves parsed components to real-world places and coordinates.
|
|
38
|
+
|
|
39
|
+
Knowledge arrives at inference as _soft input features_ (anchors) — it
|
|
40
|
+
informs, never overrides. If you know RAG from the LLM world, this is RAG
|
|
41
|
+
for token classification.
|
|
42
|
+
|
|
43
|
+
## Installation
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npm install mailwoman
|
|
47
|
+
|
|
48
|
+
# For the geocoder (optional — enables `geocode` command and coordinate resolution)
|
|
49
|
+
npm install @mailwoman/resolver-wof-sqlite
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Requires Node.js ≥ 22.5.1.
|
|
53
|
+
|
|
54
|
+
## CLI
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# Parse an address
|
|
58
|
+
mailwoman parse "123 Main St, Springfield, IL 62701"
|
|
59
|
+
|
|
60
|
+
# Parse with explicit locale
|
|
61
|
+
mailwoman parse "10 Rue de la Paix, 75002 Paris" --locale fr-FR
|
|
62
|
+
|
|
63
|
+
# Geocode an address (requires @mailwoman/resolver-wof-sqlite)
|
|
64
|
+
mailwoman geocode "1600 Amphitheatre Pkwy, Mountain View, CA 94043"
|
|
65
|
+
|
|
66
|
+
# Entity resolution (dedup / cross-dataset matching)
|
|
67
|
+
mailwoman registry --sources config.json --out entities.geojson
|
|
68
|
+
|
|
69
|
+
# Interactive TUI
|
|
70
|
+
mailwoman parse --tui
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Library API
|
|
74
|
+
|
|
75
|
+
```ts
|
|
76
|
+
import { AddressParser } from "mailwoman"
|
|
77
|
+
|
|
78
|
+
const parser = new AddressParser({
|
|
79
|
+
locale: "en-US", // "en-US" | "fr-FR"
|
|
80
|
+
defaultCountry: "US", // ISO-3166 country for gazetteer scope
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
const result = await parser.parse("1600 Amphitheatre Parkway, Mountain View, CA 94043")
|
|
84
|
+
|
|
85
|
+
// Structured components
|
|
86
|
+
result.components.house_number // "1600"
|
|
87
|
+
result.components.street // "Amphitheatre Parkway"
|
|
88
|
+
result.components.locality // "Mountain View"
|
|
89
|
+
result.components.region // "CA"
|
|
90
|
+
result.components.postcode // "94043"
|
|
91
|
+
result.components.country // "US"
|
|
92
|
+
|
|
93
|
+
// Resolved coordinate (when gazetteer is available)
|
|
94
|
+
result.coordinate // { lat: 37.4224, lon: -122.0842 }
|
|
95
|
+
|
|
96
|
+
// Per-component confidence
|
|
97
|
+
result.confidence.house_number // 0.99
|
|
98
|
+
result.confidence.street // 0.95
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Configuration
|
|
102
|
+
|
|
103
|
+
```ts
|
|
104
|
+
const parser = new AddressParser({
|
|
105
|
+
locale: "en-US",
|
|
106
|
+
defaultCountry: "US",
|
|
107
|
+
calibrate: true, // Enable isotonic confidence calibration
|
|
108
|
+
normalizeCase: false, // Detect + title-case all-caps input (default: off)
|
|
109
|
+
jointReconcile: false, // Use joint decoding (default: argmax)
|
|
110
|
+
arbitrate: false, // Enable rule-vs-neural arbitration (default: off)
|
|
111
|
+
})
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Architecture
|
|
115
|
+
|
|
116
|
+
Mailwoman's runtime pipeline is a staged coordinator:
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
normalize → query-shape → locale-gate → kind-classifier → phrase-grouper → classifier → decoder
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Each stage is published as its own `@mailwoman/*` package. The `mailwoman`
|
|
123
|
+
package is the umbrella that wires them together as a single `npm install`.
|
|
124
|
+
|
|
125
|
+
## Packages
|
|
126
|
+
|
|
127
|
+
| Package | Role |
|
|
128
|
+
| --------------------------------- | -------------------------------------------------- |
|
|
129
|
+
| `mailwoman` | CLI + `AddressParser` (you are here) |
|
|
130
|
+
| `@mailwoman/core` | Types, pipeline coordinator, decoder, dictionaries |
|
|
131
|
+
| `@mailwoman/neural` | SentencePiece tokenizer + ONNX runtime |
|
|
132
|
+
| `@mailwoman/neural-weights-en-us` | Trained model bundle (en-US) |
|
|
133
|
+
| `@mailwoman/neural-weights-fr-fr` | Trained model bundle (fr-FR) |
|
|
134
|
+
| `@mailwoman/normalize` | Stage 1: input preprocessing |
|
|
135
|
+
| `@mailwoman/query-shape` | Stage 1.5: structural priors |
|
|
136
|
+
| `@mailwoman/locale-gate` | Stage 2: locale detection |
|
|
137
|
+
| `@mailwoman/kind-classifier` | Stage 2.5: query kind classification |
|
|
138
|
+
| `@mailwoman/phrase-grouper` | Stage 2.7: phrase boundary discovery |
|
|
139
|
+
| `@mailwoman/classifiers` | Rule-based classifiers |
|
|
140
|
+
| `@mailwoman/codex` | Postal reference data |
|
|
141
|
+
| `@mailwoman/corpus` | Training corpus pipeline |
|
|
142
|
+
| `@mailwoman/spatial` | Spatial utilities |
|
|
143
|
+
| `@mailwoman/formatter` | Address formatting + match key |
|
|
144
|
+
| `@mailwoman/record` | Record schema + normalizers |
|
|
145
|
+
| `@mailwoman/match` | Block → score → cluster matcher |
|
|
146
|
+
| `@mailwoman/address-id` | Stable address primary key |
|
|
147
|
+
| `@mailwoman/registry` | Entity resolution application |
|
|
148
|
+
|
|
149
|
+
## Related
|
|
150
|
+
|
|
151
|
+
- [Documentation & blog](https://mailwoman.sister.software)
|
|
152
|
+
- [What Mailwoman Is](https://mailwoman.sister.software/articles/concepts/what-mailwoman-is/)
|
|
153
|
+
- [GitHub](https://github.com/sister-software/mailwoman)
|
|
154
|
+
|
|
155
|
+
## License
|
|
156
|
+
|
|
157
|
+
[AGPL-3.0-only](https://www.gnu.org/licenses/agpl-3.0.html)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../commands/registry.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,OAAO,EAYN,KAAK,aAAa,EAGlB,MAAM,qBAAqB,CAAA;AAK5B,OAAO,GAAG,MAAM,KAAK,CAAA;AAGrB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAOrD,QAAA,MAAM,eAAe,8CAG+E,CAAA;AAEpG,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;qBA2FjB,CAAA;AAEF,OAAO,EAAE,eAAe,IAAI,IAAI,EAAE,aAAa,IAAI,OAAO,EAAE,CAAA;AAM5D;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,aAO7B,CAAA;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAC1B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,IAAI,GAAE,aAA+B,GACnC,aAAa,CAWf;AAiED;;;GAGG;AACH,UAAU,eAAe;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,OAAO,GAAG,KAAK,CAAA;IAC3B,OAAO,EAAE,aAAa,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,kGAAkG;IAClG,IAAI,CAAC,EAAE,aAAa,GAAG,SAAS,CAAA;IAChC;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AAED,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,EAAE,CAY7D;AAmJD,QAAA,MAAM,eAAe,EAAE,gBAAgB,CAAC,OAAO,aAAa,EAAE,OAAO,eAAe,CAuCnF,CAAA;AAED,eAAe,eAAe,CAAA"}
|
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* @copyright Sister Software
|
|
4
|
+
* @license AGPL-3.0
|
|
5
|
+
* @author Teffen Ellis, et al.
|
|
6
|
+
*
|
|
7
|
+
* `mailwoman registry <csv>` — the geocode-first record matcher, end to end (#613).
|
|
8
|
+
*
|
|
9
|
+
* This is the integration that runs `@mailwoman/registry`'s cascade on real data: it constructs the
|
|
10
|
+
* heavy geocoder (neural parser + WOF resolver + per-state situs/interp shards — the same wiring
|
|
11
|
+
* as `geocode`) and injects it into the matcher's `GeocodeAddress` seam, so the registry package
|
|
12
|
+
* itself never imports the runtime. Then:
|
|
13
|
+
*
|
|
14
|
+
* CSV → ingest (column-map + normalize) → geocode (the seam) → resolveEntities (block →
|
|
15
|
+
* Fellegi-Sunter score, EM-trained label-free → cluster) → GeoJSON.
|
|
16
|
+
*
|
|
17
|
+
* The thesis it grades: two rows reading `123 Main St` and `123 Main Street Apt 2` — different
|
|
18
|
+
* strings — collapse to one entity because they resolve to the same place. Blocking is
|
|
19
|
+
* geographic, not textual. Needs the weights + shards in hand, so the real run is
|
|
20
|
+
* operator-verifiable (not CI).
|
|
21
|
+
*/
|
|
22
|
+
import { Spinner } from "@inkjs/ui";
|
|
23
|
+
import { decodeAsJson } from "@mailwoman/core/decoder";
|
|
24
|
+
import { createWofResolver } from "@mailwoman/core/resolver";
|
|
25
|
+
import { NeuralAddressClassifier } from "@mailwoman/neural";
|
|
26
|
+
import { geocodeAddressVia, inferMapping, ingestRows, parseCsv, reconcileCoverage, reconciliationGeoJSON, reconciliationReport, resolveEntities, streamRows, toGeoJSON, toMapHTML, } from "@mailwoman/registry";
|
|
27
|
+
import { Text } from "ink";
|
|
28
|
+
import { readFileSync, writeFileSync } from "node:fs";
|
|
29
|
+
import { setImmediate } from "node:timers/promises";
|
|
30
|
+
import { useEffect, useState } from "react";
|
|
31
|
+
import zod from "zod";
|
|
32
|
+
import { geocodeAddress, ShardProvider } from "../geocode-core.js";
|
|
33
|
+
import { INTERP_RADIUS_CALIBRATION } from "../interp-calibration.js";
|
|
34
|
+
import { resolverDefaultCountry } from "./parse.js";
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
// CLI contract — args + options
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
const ArgumentsSchema = zod
|
|
39
|
+
.array(zod.string().describe("Path to a CSV file of contact / organization records"))
|
|
40
|
+
.optional()
|
|
41
|
+
.describe("CSV path(s). Optional when --sources is given (multi-source mode supplies the inputs).");
|
|
42
|
+
const OptionsSchema = zod.object({
|
|
43
|
+
mapping: zod
|
|
44
|
+
.string()
|
|
45
|
+
.optional()
|
|
46
|
+
.describe("Column mapping: a path to a JSON file (or inline JSON) of { id?, source?, name?, organization?, address?, " +
|
|
47
|
+
"phone?, email? }, where each field names the CSV column(s) to draw from. Merged over the base (the built-in " +
|
|
48
|
+
"default, or --infer-mapping's inference); column names are matched case-sensitively."),
|
|
49
|
+
inferMapping: zod
|
|
50
|
+
.boolean()
|
|
51
|
+
.optional()
|
|
52
|
+
.default(false)
|
|
53
|
+
.describe("Infer the column mapping from the header by keyword (best-effort — point it at any reasonably-named CSV). " +
|
|
54
|
+
"Used as the base instead of the built-in default; an explicit --mapping still merges on top. Single-CSV mode."),
|
|
55
|
+
sources: zod
|
|
56
|
+
.string()
|
|
57
|
+
.optional()
|
|
58
|
+
.describe("Multi-source mode: a path to a JSON file (or inline JSON) of [{ path, delimiter?, mapping, source?, limit? }] " +
|
|
59
|
+
"— each dataset gets its own column mapping + provenance label, all resolved into ONE entity set across " +
|
|
60
|
+
"sources with no shared key. An entity spanning ≥2 sources is a cross-dataset link. The positional CSV is " +
|
|
61
|
+
"ignored when --sources is set. Inputs are streamed as UNQUOTED delimited files (tab inferred from .tsv) — " +
|
|
62
|
+
"right for the big government TSVs; convert a quoted CSV first or use the single-CSV path for those."),
|
|
63
|
+
out: zod.string().optional().describe("Write the GeoJSON FeatureCollection here. Default: print to stdout."),
|
|
64
|
+
mapOut: zod
|
|
65
|
+
.string()
|
|
66
|
+
.optional()
|
|
67
|
+
.describe("Also write a standalone HTML map of the resolved entities here (MapLibre + the house Protomaps " +
|
|
68
|
+
"basemap). Points are sized by records-merged and colored by cross-dataset-link status. SERVE IT OVER " +
|
|
69
|
+
"localhost (e.g. `npx serve`), don't open the file directly — the basemap tiles are CORS-restricted to " +
|
|
70
|
+
"localhost + the docs domain. Pairs naturally with --sources."),
|
|
71
|
+
trainEm: zod
|
|
72
|
+
.boolean()
|
|
73
|
+
.optional()
|
|
74
|
+
.default(true)
|
|
75
|
+
.describe("Fit the Fellegi-Sunter m/u + prior to the data with EM (label-free) before scoring. --no-train-em uses the seeds."),
|
|
76
|
+
threshold: zod
|
|
77
|
+
.number()
|
|
78
|
+
.optional()
|
|
79
|
+
.default(0)
|
|
80
|
+
.describe("Link two records into one entity at or above this match weight (bits). Higher = stricter. Default 0."),
|
|
81
|
+
maxBlockSize: zod
|
|
82
|
+
.number()
|
|
83
|
+
.optional()
|
|
84
|
+
.describe("Skip + report blocks larger than this rather than scanning them (recall vs cost). Default: scan all."),
|
|
85
|
+
reconcile: zod
|
|
86
|
+
.boolean()
|
|
87
|
+
.optional()
|
|
88
|
+
.default(false)
|
|
89
|
+
.describe("Coverage reconciliation (#621): classify each resolved entity by which KIND of source its records " +
|
|
90
|
+
"span — `enrolled` (eligibility + funding), `eligible-not-enrolled` (the anti-join), or " +
|
|
91
|
+
'`funded-not-eligible`. Requires --sources where each spec carries `role: "eligibility" | "funding"`. ' +
|
|
92
|
+
"Prints a set-membership report to stdout; --out writes bucket-tagged GeoJSON, --map-out a bucket-colored " +
|
|
93
|
+
"map. A reconciliation, never a determination."),
|
|
94
|
+
source: zod.string().optional().describe("A provenance label stamped on every record (e.g. the dataset name)."),
|
|
95
|
+
locale: zod
|
|
96
|
+
.string()
|
|
97
|
+
.regex(/^[a-z]{2}(-[A-Z]{2})?$/u, "Expected a BCP-47 tag like en-US or fr-FR")
|
|
98
|
+
.optional()
|
|
99
|
+
.default("en-US")
|
|
100
|
+
.describe("Locale tag matching an installed weights package. Default en-US."),
|
|
101
|
+
defaultCountry: zod
|
|
102
|
+
.string()
|
|
103
|
+
.optional()
|
|
104
|
+
.describe("ISO-3166 country to scope the resolver. Defaults from --locale's region subtag (en-US → US)."),
|
|
105
|
+
placeCountry: zod
|
|
106
|
+
.boolean()
|
|
107
|
+
.optional()
|
|
108
|
+
.default(true)
|
|
109
|
+
.describe("The #244 coarse-placer soft country prior (on by default). --no-place-country disables it."),
|
|
110
|
+
resolveDb: zod
|
|
111
|
+
.string()
|
|
112
|
+
.optional()
|
|
113
|
+
.describe("Path to a WOF admin SQLite distribution. Defaults to $MAILWOMAN_WOF_DB; errors if neither is set."),
|
|
114
|
+
dataRoot: zod
|
|
115
|
+
.string()
|
|
116
|
+
.optional()
|
|
117
|
+
.default("/mnt/playpen/mailwoman-data")
|
|
118
|
+
.describe("Root directory for per-state address-point + interpolation shards. Default: /mnt/playpen/mailwoman-data."),
|
|
119
|
+
});
|
|
120
|
+
export { ArgumentsSchema as args, OptionsSchema as options };
|
|
121
|
+
// ---------------------------------------------------------------------------
|
|
122
|
+
// Column mapping
|
|
123
|
+
// ---------------------------------------------------------------------------
|
|
124
|
+
/**
|
|
125
|
+
* Built-in best-effort mapping for tidy contact/org CSVs. Multi-column fields are joined (so a CSV
|
|
126
|
+
* that splits the address across columns composes one string). Real datasets with bespoke headers
|
|
127
|
+
* (e.g. NPPES "Provider First Line Business Practice Location Address") pass an explicit --mapping;
|
|
128
|
+
* inferring it from the header is the #603 fast-follow.
|
|
129
|
+
*/
|
|
130
|
+
export const DEFAULT_MAPPING = {
|
|
131
|
+
id: "id",
|
|
132
|
+
name: ["name", "full_name", "first_name", "last_name"],
|
|
133
|
+
organization: ["organization", "org", "company"],
|
|
134
|
+
address: ["address", "address1", "street", "city", "state", "zip", "postal_code"],
|
|
135
|
+
phone: "phone",
|
|
136
|
+
email: "email",
|
|
137
|
+
};
|
|
138
|
+
/**
|
|
139
|
+
* Resolve --mapping (a file path or inline JSON) and merge it over `base` (default
|
|
140
|
+
* {@link DEFAULT_MAPPING}).
|
|
141
|
+
*/
|
|
142
|
+
export function loadMapping(option, source, base = DEFAULT_MAPPING) {
|
|
143
|
+
let provided = {};
|
|
144
|
+
if (option) {
|
|
145
|
+
const text = option.trim().startsWith("{") ? option : readFileSync(option, "utf8");
|
|
146
|
+
try {
|
|
147
|
+
provided = JSON.parse(text);
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
throw new Error(`--mapping is neither a readable file nor valid JSON: ${err.message}`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return { ...base, ...provided, ...(source ? { source } : {}) };
|
|
154
|
+
}
|
|
155
|
+
function resolveWofPath(options) {
|
|
156
|
+
const path = options.resolveDb ?? process.env["MAILWOMAN_WOF_DB"];
|
|
157
|
+
if (!path) {
|
|
158
|
+
throw new Error("registry needs a WOF admin SQLite path. Set $MAILWOMAN_WOF_DB or pass --resolve-db <path>.");
|
|
159
|
+
}
|
|
160
|
+
return path;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Construct the heavy geocoder once (neural parser + WOF resolver + per-state shards) and wire it
|
|
164
|
+
* into the matcher's {@link GeocodeAddress} seam. Returns the seam plus a `close` to release the DB
|
|
165
|
+
* handles. Shared by the single-CSV and multi-source paths.
|
|
166
|
+
*/
|
|
167
|
+
async function buildGeocoder(options) {
|
|
168
|
+
const wofPath = resolveWofPath(options);
|
|
169
|
+
let classifier;
|
|
170
|
+
try {
|
|
171
|
+
classifier = await NeuralAddressClassifier.loadFromWeights({ locale: options.locale });
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
throw new Error("registry requires the neural weights. Install @mailwoman/neural-weights-en-us (or a --locale match).");
|
|
175
|
+
}
|
|
176
|
+
let mod;
|
|
177
|
+
try {
|
|
178
|
+
mod = await import("@mailwoman/resolver-wof-sqlite");
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
throw new Error("registry requires `@mailwoman/resolver-wof-sqlite` to be installed.");
|
|
182
|
+
}
|
|
183
|
+
const lookup = new mod.WofSqlitePlaceLookup({ databasePath: wofPath });
|
|
184
|
+
const shardProvider = new ShardProvider(mod, options.dataRoot);
|
|
185
|
+
const shards = shardProvider.for;
|
|
186
|
+
const defaultCountry = resolverDefaultCountry(options) || undefined;
|
|
187
|
+
const resolver = createWofResolver(lookup);
|
|
188
|
+
const seam = geocodeAddressVia({
|
|
189
|
+
parse: async (raw) => decodeAsJson(await classifier.parse(raw, { postcodeRepair: true })),
|
|
190
|
+
geocode: (raw) => geocodeAddress(raw, {
|
|
191
|
+
classifier,
|
|
192
|
+
resolver,
|
|
193
|
+
shards,
|
|
194
|
+
defaultCountry,
|
|
195
|
+
interpCalibration: INTERP_RADIUS_CALIBRATION,
|
|
196
|
+
...(options.placeCountry ? {} : { placeCountry: false }),
|
|
197
|
+
}),
|
|
198
|
+
country: defaultCountry,
|
|
199
|
+
});
|
|
200
|
+
return {
|
|
201
|
+
seam,
|
|
202
|
+
close: () => {
|
|
203
|
+
shardProvider.close();
|
|
204
|
+
lookup.close();
|
|
205
|
+
},
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
/** Parse `--sources` (a file path or inline JSON) into specs. */
|
|
209
|
+
export function loadSources(option) {
|
|
210
|
+
const text = /^[[{]/.test(option.trim()) ? option : readFileSync(option, "utf8");
|
|
211
|
+
let parsed;
|
|
212
|
+
try {
|
|
213
|
+
parsed = JSON.parse(text);
|
|
214
|
+
}
|
|
215
|
+
catch (err) {
|
|
216
|
+
throw new Error(`--sources is neither a readable file nor valid JSON: ${err.message}`);
|
|
217
|
+
}
|
|
218
|
+
if (!Array.isArray(parsed) || parsed.some((s) => !s || typeof s.path !== "string")) {
|
|
219
|
+
throw new Error("--sources must be a JSON array of { path, mapping, source?, delimiter?, limit? }.");
|
|
220
|
+
}
|
|
221
|
+
return parsed;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Write the artifacts requested via `--out` (GeoJSON) and/or `--map-out` (standalone HTML map),
|
|
225
|
+
* returning the lines to append to the run summary. Returns `null` when neither is set — the signal
|
|
226
|
+
* to dump GeoJSON to stdout (the original default). Shared by both pipeline paths.
|
|
227
|
+
*/
|
|
228
|
+
function writeOutputs(geojson, options) {
|
|
229
|
+
if (!options.out && !options.mapOut)
|
|
230
|
+
return null;
|
|
231
|
+
const lines = [];
|
|
232
|
+
if (options.out) {
|
|
233
|
+
writeFileSync(options.out, JSON.stringify(geojson, null, 2));
|
|
234
|
+
lines.push(`wrote ${geojson.features.length} features → ${options.out}`);
|
|
235
|
+
}
|
|
236
|
+
if (options.mapOut) {
|
|
237
|
+
writeFileSync(options.mapOut, toMapHTML(geojson, options.source ? { title: `Mailwoman — ${options.source}` } : {}));
|
|
238
|
+
lines.push(`wrote map → ${options.mapOut} (serve over localhost to view)`);
|
|
239
|
+
}
|
|
240
|
+
return lines.join("\n");
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Multi-source mode (#618): stream each dataset under its own mapping + provenance label into ONE
|
|
244
|
+
* combined record set, geocode, resolve, and report the entities that span ≥2 sources — the
|
|
245
|
+
* cross-dataset links. No shared key required; geography is the join.
|
|
246
|
+
*/
|
|
247
|
+
async function runMultiSource(specs, options) {
|
|
248
|
+
const { seam, close } = await buildGeocoder(options);
|
|
249
|
+
try {
|
|
250
|
+
const records = [];
|
|
251
|
+
const perSource = [];
|
|
252
|
+
for (const spec of specs) {
|
|
253
|
+
const label = spec.source ?? spec.path;
|
|
254
|
+
const mapping = { ...spec.mapping, source: label };
|
|
255
|
+
let read = 0;
|
|
256
|
+
const rows = (async function* () {
|
|
257
|
+
for await (const row of streamRows(spec.path, spec.delimiter ? { delimiter: spec.delimiter } : {})) {
|
|
258
|
+
if (spec.limit !== undefined && read >= spec.limit)
|
|
259
|
+
break;
|
|
260
|
+
read++;
|
|
261
|
+
yield row;
|
|
262
|
+
}
|
|
263
|
+
})();
|
|
264
|
+
const recs = await ingestRows(rows, mapping, { geocodeAddress: seam });
|
|
265
|
+
for (const record of recs)
|
|
266
|
+
record.id = `${label}:${record.id}`; // namespace ids so cross-source ids never collide
|
|
267
|
+
records.push(...recs);
|
|
268
|
+
perSource.push(`${label} ${recs.length}`);
|
|
269
|
+
}
|
|
270
|
+
// learnedScorer:false — multi-source is CROSS-dataset link discovery (recall-oriented): the same
|
|
271
|
+
// facility under different operational names across sources is the signal we want. The default GBT is
|
|
272
|
+
// dedup-calibrated and rejects exactly that (it learned "same place + name drift = distinct"), so the
|
|
273
|
+
// cross-dataset path uses the FS spine. (Single-CSV dedup below keeps the GBT default.)
|
|
274
|
+
const result = resolveEntities(records, {
|
|
275
|
+
trainEM: options.trainEm,
|
|
276
|
+
threshold: options.threshold,
|
|
277
|
+
learnedScorer: false,
|
|
278
|
+
...(options.maxBlockSize !== undefined ? { maxBlockSize: options.maxBlockSize } : {}),
|
|
279
|
+
});
|
|
280
|
+
const geocoded = records.filter((r) => r.address?.geocode).length;
|
|
281
|
+
// Reconciliation mode (#621): classify entities by eligibility/funding role membership, via the
|
|
282
|
+
// SAME @mailwoman/registry library as scripts/record-matcher/coverage-reconciliation.ts.
|
|
283
|
+
if (options.reconcile) {
|
|
284
|
+
const labelOf = (s) => s.source ?? s.path;
|
|
285
|
+
const eligibilitySources = specs.filter((s) => s.role === "eligibility").map(labelOf);
|
|
286
|
+
const fundingSources = specs.filter((s) => s.role === "funding").map(labelOf);
|
|
287
|
+
if (!eligibilitySources.length || !fundingSources.length) {
|
|
288
|
+
throw new Error('--reconcile needs each --sources entry tagged with `role: "eligibility"` or `role: "funding"` ' +
|
|
289
|
+
"(at least one of each).");
|
|
290
|
+
}
|
|
291
|
+
const recon = reconcileCoverage(result.entities, { eligibilitySources, fundingSources });
|
|
292
|
+
const geojson = reconciliationGeoJSON(recon);
|
|
293
|
+
const report = reconciliationReport(recon, {
|
|
294
|
+
scopeNote: `Resolved BLIND across ${specs.length} sources via \`mailwoman registry --reconcile\` ` +
|
|
295
|
+
`(${perSource.join(", ")}). Eligibility: ${eligibilitySources.join(", ")}; funding/enrollment: ` +
|
|
296
|
+
`${fundingSources.join(", ")}.`,
|
|
297
|
+
scorerNote: "Scored with the Fellegi-Sunter spine (cross-dataset join, recall-oriented): the dedup-calibrated " +
|
|
298
|
+
'GBT default (#603) rejects the "same place, different operational name" pattern that IS the ' +
|
|
299
|
+
"cross-source signal, so it is pinned off here. See #655.",
|
|
300
|
+
});
|
|
301
|
+
const written = writeOutputs(geojson, options);
|
|
302
|
+
return written === null ? report : `${report}\n\n${written}`;
|
|
303
|
+
}
|
|
304
|
+
const geojson = toGeoJSON(result.entities);
|
|
305
|
+
const crossSource = result.entities.filter((e) => new Set(e.records.map((r) => r.source).filter(Boolean)).size >= 2).length;
|
|
306
|
+
const summary = `registry --sources: ${specs.length} sources (${perSource.join(", ")}) → ${records.length} records ` +
|
|
307
|
+
`(${geocoded} geocoded) → ${result.entities.length} entities; ${crossSource} span ≥2 sources (cross-dataset links)`;
|
|
308
|
+
const written = writeOutputs(geojson, options);
|
|
309
|
+
return written === null ? JSON.stringify(geojson, null, 2) : `${summary}\n${written}`;
|
|
310
|
+
}
|
|
311
|
+
finally {
|
|
312
|
+
close();
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
// ---------------------------------------------------------------------------
|
|
316
|
+
// Core
|
|
317
|
+
// ---------------------------------------------------------------------------
|
|
318
|
+
async function runRegistry(csvPath, options) {
|
|
319
|
+
if (options.reconcile) {
|
|
320
|
+
throw new Error("--reconcile is a cross-source mode: pass --sources <config.json> (each entry tagged with a " +
|
|
321
|
+
"`role`), not a single positional CSV.");
|
|
322
|
+
}
|
|
323
|
+
const rows = parseCsv(readFileSync(csvPath, "utf8"));
|
|
324
|
+
// --infer-mapping reads the header (the first row's keys) and guesses the mapping; an explicit --mapping
|
|
325
|
+
// still merges on top of it. Otherwise the base is the built-in default.
|
|
326
|
+
const base = options.inferMapping && rows[0] ? inferMapping(Object.keys(rows[0])) : DEFAULT_MAPPING;
|
|
327
|
+
const mapping = loadMapping(options.mapping, options.source, base);
|
|
328
|
+
const { seam, close } = await buildGeocoder(options);
|
|
329
|
+
try {
|
|
330
|
+
const records = await ingestRows(rows, mapping, { geocodeAddress: seam });
|
|
331
|
+
const result = resolveEntities(records, {
|
|
332
|
+
trainEM: options.trainEm,
|
|
333
|
+
threshold: options.threshold,
|
|
334
|
+
...(options.maxBlockSize !== undefined ? { maxBlockSize: options.maxBlockSize } : {}),
|
|
335
|
+
});
|
|
336
|
+
const geojson = toGeoJSON(result.entities);
|
|
337
|
+
const geocoded = records.filter((r) => r.address?.geocode).length;
|
|
338
|
+
const summary = `registry: ${rows.length} rows → ${records.length} records (${geocoded} geocoded) → ` +
|
|
339
|
+
`${result.entities.length} entities ` +
|
|
340
|
+
`(${result.candidatePairs} candidate pairs${result.droppedBlocks.length ? `, ${result.droppedBlocks.length} oversized blocks skipped` : ""})`;
|
|
341
|
+
const written = writeOutputs(geojson, options);
|
|
342
|
+
return written === null ? JSON.stringify(geojson, null, 2) : `${summary}\n${written}`;
|
|
343
|
+
}
|
|
344
|
+
finally {
|
|
345
|
+
close();
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
// ---------------------------------------------------------------------------
|
|
349
|
+
// React command component
|
|
350
|
+
// ---------------------------------------------------------------------------
|
|
351
|
+
const RegistryCommand = ({ args, options }) => {
|
|
352
|
+
const [output, setOutput] = useState();
|
|
353
|
+
const [error, setError] = useState();
|
|
354
|
+
useEffect(() => {
|
|
355
|
+
if (error) {
|
|
356
|
+
setImmediate().then(() => process.exit(1));
|
|
357
|
+
}
|
|
358
|
+
}, [error]);
|
|
359
|
+
useEffect(() => {
|
|
360
|
+
// `loadSources` can throw on a malformed config — wrap so its error routes to the same handler.
|
|
361
|
+
const task = options.sources
|
|
362
|
+
? Promise.resolve().then(() => runMultiSource(loadSources(options.sources), options))
|
|
363
|
+
: (() => {
|
|
364
|
+
const csv = args?.[0];
|
|
365
|
+
if (!csv || csv.trim().length === 0) {
|
|
366
|
+
return Promise.reject(new Error("registry requires a positional CSV path (or --sources <config.json> for multi-source). " +
|
|
367
|
+
"e.g. mailwoman registry contacts.csv --out entities.geojson"));
|
|
368
|
+
}
|
|
369
|
+
return runRegistry(csv.trim(), options);
|
|
370
|
+
})();
|
|
371
|
+
task.then(setOutput).catch((err) => setError(err.message));
|
|
372
|
+
}, [args, options]);
|
|
373
|
+
if (error) {
|
|
374
|
+
return _jsx(Text, { color: "red", children: error });
|
|
375
|
+
}
|
|
376
|
+
if (!output) {
|
|
377
|
+
return _jsx(Spinner, {});
|
|
378
|
+
}
|
|
379
|
+
return _jsx(Text, { children: output });
|
|
380
|
+
};
|
|
381
|
+
export default RegistryCommand;
|
|
382
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../commands/registry.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geocode-core.d.ts","sourceRoot":"","sources":["../geocode-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAe,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAe,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAG9G,OAAO,EAAE,KAAK,mBAAmB,EAAyC,MAAM,mBAAmB,CAAA;AACnG,OAAO,EAA2B,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAClF,OAAO,EAA8B,KAAK,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"geocode-core.d.ts","sourceRoot":"","sources":["../geocode-core.ts"],"names":[],"mappings":"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"}
|
package/out/geocode-core.js
CHANGED
|
@@ -25,6 +25,7 @@ import { existsSync } from "node:fs";
|
|
|
25
25
|
import { readReleaseManifest, resolveShardPath } from "./data-release.js";
|
|
26
26
|
import { loadDefaultPlaceCountry } from "./default-placer.js";
|
|
27
27
|
import { interpCalibrationForRegion } from "./interp-calibration.js";
|
|
28
|
+
import { recognizeUsRegions } from "./region-recognition.js";
|
|
28
29
|
/**
|
|
29
30
|
* Anchor weight for the coarse-placer's country prior. Matches the runtime-pipeline default — a
|
|
30
31
|
* whole-string country guess is broader/softer than a postcode anchor (2.0), so it blends gently.
|
|
@@ -157,7 +158,7 @@ export class ShardProvider {
|
|
|
157
158
|
* parse/resolve error — callers doing batch work should catch per-row.
|
|
158
159
|
*/
|
|
159
160
|
export async function geocodeAddress(input, deps) {
|
|
160
|
-
const tree = await deps.classifier.parse(input, { postcodeRepair: true });
|
|
161
|
+
const tree = recognizeUsRegions(await deps.classifier.parse(input, { postcodeRepair: true, normalizeCase: deps.normalizeCase ?? true }));
|
|
161
162
|
const stateSlug = regionSlugFromTree(tree);
|
|
162
163
|
const { addressPoints, interpolation } = deps.shards?.(stateSlug) ?? {};
|
|
163
164
|
const opts = {};
|
package/out/geocode-core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geocode-core.js","sourceRoot":"","sources":["../geocode-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEpC,OAAO,EAA4B,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACnG,OAAO,EAAE,uBAAuB,EAAuB,MAAM,qBAAqB,CAAA;AAClF,OAAO,EAAE,0BAA0B,EAA+B,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"geocode-core.js","sourceRoot":"","sources":["../geocode-core.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interp-calibration.d.ts","sourceRoot":"","sources":["../interp-calibration.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"interp-calibration.d.ts","sourceRoot":"","sources":["../interp-calibration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,WAAW,sBAAsB;IACtC,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAA;CACf;AAED;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,sBAgBvC,CAAA;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACzC,KAAK,EAAE,sBAAsB,EAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAClC,MAAM,CAGR"}
|
|
@@ -3,22 +3,23 @@
|
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*
|
|
6
|
-
* Per-region split-conformal multipliers for the interpolation tier's `uncertainty_m` radius
|
|
7
|
-
* Multiply the raw claimed radius (half the matched TIGER segment length) by the region's
|
|
8
|
-
* get a calibrated ~90%-coverage interval.
|
|
6
|
+
* Per-region split-conformal multipliers for the interpolation tier's `uncertainty_m` radius
|
|
7
|
+
* (#374). Multiply the raw claimed radius (half the matched TIGER segment length) by the region's
|
|
8
|
+
* factor to get a calibrated ~90%-coverage interval.
|
|
9
9
|
*
|
|
10
10
|
* #569 shipped a single 1.70 measured on Texas; the multi-region recalibration (#584) found the
|
|
11
|
-
* factor is regional — Q̂ rises monotonically with rurality, 1.44 (DC, densest) → 3.12 (AZ,
|
|
12
|
-
* This wires the per-region selection the seed table anticipated.
|
|
11
|
+
* factor is regional — Q̂ rises monotonically with rurality, 1.44 (DC, densest) → 3.12 (AZ,
|
|
12
|
+
* sprawl). This wires the per-region selection the seed table anticipated.
|
|
13
13
|
*
|
|
14
14
|
* SOURCE OF RECORD: `data/calibration/interp-radius-conformal.json` (the eval artifact + rationale,
|
|
15
|
-
* `docs/articles/evals/2026-06-14-interp-multiregion-recalibration.md`). Embedded here as a
|
|
16
|
-
* so the published package + the server ship it without a runtime data-file dependency.
|
|
17
|
-
* two in sync** — when the full 50-state sweep (followups in the JSON) fills in,
|
|
15
|
+
* `docs/articles/evals/2026-06-14-interp-multiregion-recalibration.md`). Embedded here as a
|
|
16
|
+
* constant so the published package + the server ship it without a runtime data-file dependency.
|
|
17
|
+
* **Keep the two in sync** — when the full 50-state sweep (followups in the JSON) fills in,
|
|
18
|
+
* update both.
|
|
18
19
|
*/
|
|
19
20
|
/**
|
|
20
|
-
* Measured 12-state seed table (a partial sweep; the full 50 was abandoned at the >85 °C heat
|
|
21
|
-
* Mirrors `data/calibration/interp-radius-conformal.json` (#584).
|
|
21
|
+
* Measured 12-state seed table (a partial sweep; the full 50 was abandoned at the >85 °C heat
|
|
22
|
+
* ceiling). Mirrors `data/calibration/interp-radius-conformal.json` (#584).
|
|
22
23
|
*/
|
|
23
24
|
export const INTERP_RADIUS_CALIBRATION = {
|
|
24
25
|
byRegion: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interp-calibration.js","sourceRoot":"","sources":["../interp-calibration.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"interp-calibration.js","sourceRoot":"","sources":["../interp-calibration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAYH;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAA2B;IAChE,QAAQ,EAAE;QACT,EAAE,EAAE,IAAI;QACR,EAAE,EAAE,IAAI;QACR,EAAE,EAAE,GAAG;QACP,EAAE,EAAE,IAAI;QACR,EAAE,EAAE,IAAI;QACR,EAAE,EAAE,IAAI;QACR,EAAE,EAAE,IAAI;QACR,EAAE,EAAE,IAAI;QACR,EAAE,EAAE,IAAI;QACR,EAAE,EAAE,IAAI;QACR,EAAE,EAAE,IAAI;QACR,EAAE,EAAE,IAAI;KACR;IACD,OAAO,EAAE,IAAI;CACb,CAAA;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CACzC,KAA6B,EAC7B,SAAoC;IAEpC,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC,OAAO,CAAA;IACpC,OAAO,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,IAAI,KAAK,CAAC,OAAO,CAAA;AAChE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"region-recognition.d.ts","sourceRoot":"","sources":["../region-recognition.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAe,WAAW,EAAgB,MAAM,yBAAyB,CAAA;AA2DrF;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMxD;AAuFD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,CAGjE"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*
|
|
6
|
+
* US region recognition (#642) — a rule-based parse-tree correction for the case the neural parser
|
|
7
|
+
* under-handles: a postcode-less "City, State" string. Without a postcode/street anchor the model
|
|
8
|
+
* mis-tags the state — it labels "Texas" a `locality` ("Dublin, Texas" → two localities), or
|
|
9
|
+
* merges the whole string into one locality ("Dublin, TX" / "Athens, Texas"). With no `region`
|
|
10
|
+
* node, the resolver can't scope the locality to its state, so "Dublin, Texas" resolves to the
|
|
11
|
+
* more-populous Dublin, OHIO (the #619 admin-tier >1000 km tail).
|
|
12
|
+
*
|
|
13
|
+
* This is a legitimate atlas/conventions correction: the US states are a CLOSED, known gazetteer,
|
|
14
|
+
* so we can confidently re-tag a state token the grammar missed. It restructures the affected
|
|
15
|
+
* nodes into `region → locality` NESTING, which the resolver's existing parent-scoping then
|
|
16
|
+
* constrains correctly (no resolver change). Two shapes are handled:
|
|
17
|
+
*
|
|
18
|
+
* - A `locality` whose WHOLE value is a US state → it becomes a `region`, and sibling `locality`
|
|
19
|
+
* (city) nodes are nested under it;
|
|
20
|
+
* - A `locality` whose value is a merged `"City, ST"` → split into `region(ST) → locality(City)`.
|
|
21
|
+
*
|
|
22
|
+
* US-scoped by design (the gazetteer is US states). The principled long-term fix is the model
|
|
23
|
+
* recognizing the region; this closes the gap for the bare-`City, State` class today.
|
|
24
|
+
*/
|
|
25
|
+
/** Canonical 2-letter slug for a US state/territory NAME or 2-letter abbreviation, else null. */
|
|
26
|
+
const STATE_NAME_TO_SLUG = {
|
|
27
|
+
alabama: "al",
|
|
28
|
+
alaska: "ak",
|
|
29
|
+
arizona: "az",
|
|
30
|
+
arkansas: "ar",
|
|
31
|
+
california: "ca",
|
|
32
|
+
colorado: "co",
|
|
33
|
+
connecticut: "ct",
|
|
34
|
+
delaware: "de",
|
|
35
|
+
"district of columbia": "dc",
|
|
36
|
+
florida: "fl",
|
|
37
|
+
georgia: "ga",
|
|
38
|
+
hawaii: "hi",
|
|
39
|
+
idaho: "id",
|
|
40
|
+
illinois: "il",
|
|
41
|
+
indiana: "in",
|
|
42
|
+
iowa: "ia",
|
|
43
|
+
kansas: "ks",
|
|
44
|
+
kentucky: "ky",
|
|
45
|
+
louisiana: "la",
|
|
46
|
+
maine: "me",
|
|
47
|
+
maryland: "md",
|
|
48
|
+
massachusetts: "ma",
|
|
49
|
+
michigan: "mi",
|
|
50
|
+
minnesota: "mn",
|
|
51
|
+
mississippi: "ms",
|
|
52
|
+
missouri: "mo",
|
|
53
|
+
montana: "mt",
|
|
54
|
+
nebraska: "ne",
|
|
55
|
+
nevada: "nv",
|
|
56
|
+
"new hampshire": "nh",
|
|
57
|
+
"new jersey": "nj",
|
|
58
|
+
"new mexico": "nm",
|
|
59
|
+
"new york": "ny",
|
|
60
|
+
"north carolina": "nc",
|
|
61
|
+
"north dakota": "nd",
|
|
62
|
+
ohio: "oh",
|
|
63
|
+
oklahoma: "ok",
|
|
64
|
+
oregon: "or",
|
|
65
|
+
pennsylvania: "pa",
|
|
66
|
+
"rhode island": "ri",
|
|
67
|
+
"south carolina": "sc",
|
|
68
|
+
"south dakota": "sd",
|
|
69
|
+
tennessee: "tn",
|
|
70
|
+
texas: "tx",
|
|
71
|
+
utah: "ut",
|
|
72
|
+
vermont: "vt",
|
|
73
|
+
virginia: "va",
|
|
74
|
+
washington: "wa",
|
|
75
|
+
"west virginia": "wv",
|
|
76
|
+
wisconsin: "wi",
|
|
77
|
+
wyoming: "wy",
|
|
78
|
+
"puerto rico": "pr",
|
|
79
|
+
};
|
|
80
|
+
const STATE_SLUGS = new Set(Object.values(STATE_NAME_TO_SLUG));
|
|
81
|
+
/**
|
|
82
|
+
* Is `value` exactly a US state — its full name (e.g. "Texas") or 2-letter abbreviation (e.g.
|
|
83
|
+
* "TX")? Returns the canonical 2-letter slug, else null. Whitespace/case-insensitive; rejects
|
|
84
|
+
* anything with extra tokens (so a city literally named after a state is only matched when it's the
|
|
85
|
+
* WHOLE value).
|
|
86
|
+
*/
|
|
87
|
+
export function usStateSlug(value) {
|
|
88
|
+
const v = value.trim().toLowerCase();
|
|
89
|
+
if (!v)
|
|
90
|
+
return null;
|
|
91
|
+
if (STATE_NAME_TO_SLUG[v])
|
|
92
|
+
return STATE_NAME_TO_SLUG[v];
|
|
93
|
+
if (/^[a-z]{2}$/.test(v) && STATE_SLUGS.has(v))
|
|
94
|
+
return v;
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
/** Build a region node covering the state token, carrying a (lightly-confident) provenance marker. */
|
|
98
|
+
function makeRegionNode(value, start, end, confidence) {
|
|
99
|
+
return {
|
|
100
|
+
tag: "region",
|
|
101
|
+
value,
|
|
102
|
+
start,
|
|
103
|
+
end,
|
|
104
|
+
confidence,
|
|
105
|
+
children: [],
|
|
106
|
+
metadata: { region_recognition: "us-state" },
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Correct one container (an array of sibling nodes — the tree roots, or a node's children) for the
|
|
111
|
+
* two mis-tag shapes, producing `region → locality` nesting. Returns the rewritten sibling list.
|
|
112
|
+
*/
|
|
113
|
+
function correctSiblings(siblings) {
|
|
114
|
+
// --- Pass 1: split a merged "City, ST" locality into region(ST) → locality(City). ---
|
|
115
|
+
const afterSplit = [];
|
|
116
|
+
for (const node of siblings) {
|
|
117
|
+
const split = node.tag === "locality" ? splitMergedCityState(node) : null;
|
|
118
|
+
afterSplit.push(split ?? node);
|
|
119
|
+
}
|
|
120
|
+
// --- Pass 2: a locality whose WHOLE value is a state becomes a region; sibling city localities
|
|
121
|
+
// nest under it. Only fires when there's exactly one state-name locality in the container (the
|
|
122
|
+
// unambiguous "City, State" shape) — avoids reparenting in a multi-locality list we don't model. ---
|
|
123
|
+
const stateIdxs = afterSplit
|
|
124
|
+
.map((n, i) => (n.tag === "locality" && usStateSlug(n.value) ? i : -1))
|
|
125
|
+
.filter((i) => i >= 0);
|
|
126
|
+
if (stateIdxs.length !== 1)
|
|
127
|
+
return afterSplit;
|
|
128
|
+
const si = stateIdxs[0];
|
|
129
|
+
const stateNode = afterSplit[si];
|
|
130
|
+
const region = makeRegionNode(stateNode.value, stateNode.start, stateNode.end, stateNode.confidence);
|
|
131
|
+
const out = [];
|
|
132
|
+
for (let i = 0; i < afterSplit.length; i++) {
|
|
133
|
+
if (i === si)
|
|
134
|
+
continue;
|
|
135
|
+
const n = afterSplit[i];
|
|
136
|
+
if (n.tag === "locality")
|
|
137
|
+
region.children.push(n); // nest sibling cities under the region
|
|
138
|
+
else
|
|
139
|
+
out.push(n);
|
|
140
|
+
}
|
|
141
|
+
// Only convert when there's a sibling city to nest — the unambiguous "City, State" shape. A LONE
|
|
142
|
+
// state-name locality ("Washington", "Florida") is genuinely a city in this context as often as a
|
|
143
|
+
// state, so leave it untouched rather than risk a mis-fire.
|
|
144
|
+
if (region.children.length === 0)
|
|
145
|
+
return afterSplit;
|
|
146
|
+
out.push(region);
|
|
147
|
+
return out;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Split a `locality` whose value is `"City, ST"` (state in the LAST comma segment) into region(ST)
|
|
151
|
+
* → locality(City). Returns null when the tail isn't a US state.
|
|
152
|
+
*/
|
|
153
|
+
function splitMergedCityState(node) {
|
|
154
|
+
const comma = node.value.lastIndexOf(",");
|
|
155
|
+
if (comma < 0)
|
|
156
|
+
return null;
|
|
157
|
+
const head = node.value.slice(0, comma).trim();
|
|
158
|
+
const tail = node.value.slice(comma + 1).trim();
|
|
159
|
+
const slug = usStateSlug(tail);
|
|
160
|
+
if (!slug || !head)
|
|
161
|
+
return null;
|
|
162
|
+
// Offsets: the region covers the tail's char span; the locality the head's (relative to node.start).
|
|
163
|
+
const tailStart = node.start + node.value.indexOf(tail, comma);
|
|
164
|
+
const region = makeRegionNode(tail, tailStart, node.end, node.confidence);
|
|
165
|
+
region.children.push({
|
|
166
|
+
tag: "locality",
|
|
167
|
+
value: head,
|
|
168
|
+
start: node.start,
|
|
169
|
+
end: node.start + head.length,
|
|
170
|
+
confidence: node.confidence,
|
|
171
|
+
children: node.children, // keep any real children (rare for a locality)
|
|
172
|
+
...(node.metadata ? { metadata: node.metadata } : {}),
|
|
173
|
+
});
|
|
174
|
+
return region;
|
|
175
|
+
}
|
|
176
|
+
/** Recursively correct a node's children. */
|
|
177
|
+
function correctNode(node) {
|
|
178
|
+
if (node.children.length > 0) {
|
|
179
|
+
node.children = correctSiblings(node.children).map(correctNode);
|
|
180
|
+
}
|
|
181
|
+
return node;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Recognize US regions the parser missed and restructure `"City, State"` into `region → locality`
|
|
185
|
+
* nesting so the resolver scopes the locality to its state (#642). Mutates + returns the tree. A
|
|
186
|
+
* no-op when no US state token is found mis-tagged — byte-stable for already-correct parses.
|
|
187
|
+
*/
|
|
188
|
+
export function recognizeUsRegions(tree) {
|
|
189
|
+
tree.roots = correctSiblings(tree.roots).map(correctNode);
|
|
190
|
+
return tree;
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=region-recognition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"region-recognition.js","sourceRoot":"","sources":["../region-recognition.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-pipeline.d.ts","sourceRoot":"","sources":["../runtime-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"runtime-pipeline.d.ts","sourceRoot":"","sources":["../runtime-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAEN,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,MAAM,0BAA0B,CAAA;AAUjC,MAAM,WAAW,yBAAyB;IACzC,sEAAsE;IACtE,UAAU,CAAC,EAAE,qBAAqB,CAAC,YAAY,CAAC,CAAA;IAChD,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,qBAAqB,CAAC,UAAU,CAAC,CAAA;IAC5C;;;OAGG;IACH,GAAG,CAAC,EAAE,qBAAqB,CAAC,KAAK,CAAC,CAAA;IAClC;;;;OAIG;IACH,YAAY,CAAC,EAAE,qBAAqB,CAAC,cAAc,CAAC,CAAA;IACpD;;;;OAIG;IACH,YAAY,CAAC,EAAE,qBAAqB,CAAC,cAAc,CAAC,CAAA;IACpD;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,qBAAqB,CAAC,cAAc,CAAC,CAAA;IACpD;;;;;;;;;;;;OAYG;IACH,YAAY,CAAC,EAAE,qBAAqB,CAAC,cAAc,CAAC,GAAG,KAAK,CAAA;IAC5D;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,qBAAqB,CAAC,cAAc,CAAC,CAAA;IACpD;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;CACvB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACpC,IAAI,GAAE,yBAA8B,GAClC,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,cAAc,CAAC,CAsDlE;AAKD,YAAY,EACX,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,aAAa,EACb,UAAU,EACV,cAAc,EACd,YAAY,EACZ,cAAc,EACd,cAAc,EACd,SAAS,EACT,eAAe,EACf,cAAc,EACd,qBAAqB,GACrB,MAAM,0BAA0B,CAAA;AACjC,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA"}
|
package/out/runtime-pipeline.js
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
*
|
|
14
14
|
* See `docs/articles/plan/reference/STAGES.md` for the full contract.
|
|
15
15
|
*/
|
|
16
|
+
import { solutionToProposals } from "@mailwoman/core/parser";
|
|
16
17
|
import { runPipeline, } from "@mailwoman/core/pipeline";
|
|
17
18
|
import { classifyKind as defaultClassifyKind } from "@mailwoman/kind-classifier";
|
|
18
19
|
import { detectLocale as defaultDetectLocale } from "@mailwoman/locale-gate";
|
|
@@ -20,6 +21,7 @@ import { normalize } from "@mailwoman/normalize";
|
|
|
20
21
|
import { groupPhrases as defaultGroupPhrases } from "@mailwoman/phrase-grouper";
|
|
21
22
|
import { computeQueryShape } from "@mailwoman/query-shape";
|
|
22
23
|
import { loadDefaultPlaceCountry } from "./default-placer.js";
|
|
24
|
+
import { createAddressParser } from "./utils/parser.js";
|
|
23
25
|
/**
|
|
24
26
|
* Build a runtime pipeline pre-wired with the default normalize + queryShape implementations.
|
|
25
27
|
*
|
|
@@ -31,6 +33,16 @@ import { loadDefaultPlaceCountry } from "./default-placer.js";
|
|
|
31
33
|
* locale: "en-US" })
|
|
32
34
|
*/
|
|
33
35
|
export function createRuntimePipeline(opts = {}) {
|
|
36
|
+
// Lazy v0 rule parser for arbitration (#478 inc 3). Built on first use (only when a caller passes
|
|
37
|
+
// `arbitrate: true`), so non-arbitrating pipelines pay nothing. The solved v0 output — not raw
|
|
38
|
+
// classifier firings — is the coherent "rule" source projected to proposals.
|
|
39
|
+
let v0Parser;
|
|
40
|
+
const defaultRuleProposer = async (normalizedText, locale) => {
|
|
41
|
+
v0Parser ??= createAddressParser();
|
|
42
|
+
const solutions = await v0Parser.parse(normalizedText, { locale });
|
|
43
|
+
const top = solutions[0];
|
|
44
|
+
return top ? solutionToProposals(top, "v0-rules") : [];
|
|
45
|
+
};
|
|
34
46
|
const stages = {
|
|
35
47
|
normalize,
|
|
36
48
|
computeQueryShape,
|
|
@@ -48,6 +60,9 @@ export function createRuntimePipeline(opts = {}) {
|
|
|
48
60
|
// `undefined` default is lazy-loaded on the first call (below) so the sync factory stays sync;
|
|
49
61
|
// `false` disables it. A confident in-map guess feeds the resolver's anchorPosterior re-rank.
|
|
50
62
|
placeCountry: typeof opts.placeCountry === "function" ? opts.placeCountry : undefined,
|
|
63
|
+
// Rule source for arbitration (#478 inc 3) — the lazy v0 parser above, override-able. Invoked
|
|
64
|
+
// only when a call passes `arbitrate: true`; otherwise never built.
|
|
65
|
+
ruleProposer: opts.ruleProposer ?? defaultRuleProposer,
|
|
51
66
|
// Default locale gate: rule-based from @mailwoman/locale-gate. Derives locale from
|
|
52
67
|
// QueryShape character class (CJK→ja-JP, Cyrillic→ru-RU, Arabic→ar) + known-format
|
|
53
68
|
// hits (us_zip→en-US, fr_postcode→fr-FR, uk_postcode→en-GB). Caller-hint wins when set.
|
|
@@ -65,7 +80,9 @@ export function createRuntimePipeline(opts = {}) {
|
|
|
65
80
|
if (fn)
|
|
66
81
|
stages.placeCountry = fn;
|
|
67
82
|
}
|
|
68
|
-
|
|
83
|
+
// #690: apply the factory-level normalizeCase default; a per-call runOpts value overrides it.
|
|
84
|
+
const effectiveRunOpts = opts.normalizeCase && runOpts?.normalizeCase === undefined ? { ...runOpts, normalizeCase: true } : runOpts;
|
|
85
|
+
return runPipeline(raw, stages, effectiveRunOpts);
|
|
69
86
|
};
|
|
70
87
|
}
|
|
71
88
|
//# sourceMappingURL=runtime-pipeline.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-pipeline.js","sourceRoot":"","sources":["../runtime-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACN,WAAW,GAIX,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"runtime-pipeline.js","sourceRoot":"","sources":["../runtime-pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeocodeRouter.d.ts","sourceRoot":"","sources":["../../server/GeocodeRouter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAuB,MAAM,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"GeocodeRouter.d.ts","sourceRoot":"","sources":["../../server/GeocodeRouter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAuB,MAAM,EAAE,MAAM,SAAS,CAAA;AAwOrD,eAAO,MAAM,aAAa,EAAE,MAAiB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeocodeRouter.js","sourceRoot":"","sources":["../../server/GeocodeRouter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,iBAAiB,EAAuC,MAAM,0BAA0B,CAAA;AACjG,OAAO,EAAuB,MAAM,EAAE,MAAM,SAAS,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAKpC,OAAO,EACN,cAAc,EAGd,kBAAkB,EAClB,aAAa,GACb,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAA;AAChG,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAE5C,mFAAmF;AACnF,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,6BAA6B,CAAA;AACrF,uFAAuF;AACvF,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,IAAI,GAAG,CAAC,CAAC,CAAA;AAChG,6EAA6E;AAC7E,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,MAAM,CAAC,CAAC,CAAA;AASnF,SAAS,QAAQ;IAChB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;IAC3C,IAAI,GAAG;QACN,OAAO,GAAG;aACR,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,OAAO,CAAC,CAAA;IAClB,OAAO;QACN,0DAA0D;QAC1D,kDAAkD;KAClD,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/B,CAAC;AAED,IAAI,WAAW,GAA6C,IAAI,CAAA;AAEhE,KAAK,UAAU,OAAO;IACrB,IAAI,WAAW;QAAE,OAAO,WAAW,CAAA;IACnC,WAAW,GAAG,CAAC,KAAK,IAAI,EAAE;QACzB,IAAI,SAA6C,CAAA;QACjD,IAAI,WAA4D,CAAA;QAChE,IAAI,CAAC;YACJ,SAAS,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAA;YAC7C,WAAW,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAA;QAC7D,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,CAAC,KAAK,CAAC,gFAAgF,CAAC,CAAA;YAC/F,OAAO,IAAI,CAAA;QACZ,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;QACxB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAA;YACvE,OAAO,IAAI,CAAA;QACZ,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,uBAAuB,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;QAC/F,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,oBAAoB,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;QAC9G,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAqC,CAAC,CAAA;QACzE,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;QACxD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,CAAA;IAC9D,CAAC,CAAC,EAAE,CAAA;IACJ,OAAO,WAAW,CAAA;AACnB,CAAC;AAED,SAAS,UAAU,CAAC,IAAuB,EAAE,OAAe;IAC3D,OAAO,cAAc,CAAC,OAAO,EAAE;QAC9B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG;QACvB,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,iBAAiB,EAAE,yBAAyB;KAC5C,CAAC,CAAA;AACH,CAAC;AAED,MAAM,gBAAgB,GAAG;IACxB,KAAK,EAAE,8GAA8G;CACrH,CAAA;AAED,MAAM,aAAa,GAAmB,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IACxD,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IACpF,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC,CAAA;QAC7D,OAAM;IACP,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAA;IAC5B,IAAI,CAAC,IAAI,EAAE,CAAC;QACX,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QACtC,OAAM;IACP,CAAC;IACD,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;IAC5B,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC9C,aAAa,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;QAC7D,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,aAAa,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,OAAO,CAAC,CAAA;QAC9C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,kBAAkB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;IACtG,CAAC;AACF,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"GeocodeRouter.js","sourceRoot":"","sources":["../../server/GeocodeRouter.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mailwoman",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.11.0",
|
|
4
4
|
"description": "Utilities for working with contacts for email, phone, and postal addresses.",
|
|
5
5
|
"license": "AGPL-3.0-only",
|
|
6
6
|
"contributors": [
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
"exports": {
|
|
26
26
|
"./package.json": "./package.json",
|
|
27
27
|
".": "./out/index.js",
|
|
28
|
+
"./geocode-core": "./out/geocode-core.js",
|
|
28
29
|
"./server": "./out/server/index.js",
|
|
29
30
|
"./sdk/test": "./out/sdk/test/index.js",
|
|
30
31
|
"./sdk/repo": "./out/sdk/repo.js",
|
|
@@ -33,15 +34,16 @@
|
|
|
33
34
|
"dependencies": {
|
|
34
35
|
"@fragaria/address-formatter": "^6.7.1",
|
|
35
36
|
"@inkjs/ui": "^2.0.0",
|
|
36
|
-
"@mailwoman/classifiers": "4.
|
|
37
|
-
"@mailwoman/core": "4.
|
|
38
|
-
"@mailwoman/corpus": "4.
|
|
39
|
-
"@mailwoman/kind-classifier": "4.
|
|
40
|
-
"@mailwoman/locale-gate": "4.
|
|
41
|
-
"@mailwoman/neural": "4.
|
|
42
|
-
"@mailwoman/normalize": "4.
|
|
43
|
-
"@mailwoman/phrase-grouper": "4.
|
|
44
|
-
"@mailwoman/query-shape": "4.
|
|
37
|
+
"@mailwoman/classifiers": "4.11.0",
|
|
38
|
+
"@mailwoman/core": "4.11.0",
|
|
39
|
+
"@mailwoman/corpus": "4.11.0",
|
|
40
|
+
"@mailwoman/kind-classifier": "4.11.0",
|
|
41
|
+
"@mailwoman/locale-gate": "4.11.0",
|
|
42
|
+
"@mailwoman/neural": "4.11.0",
|
|
43
|
+
"@mailwoman/normalize": "4.11.0",
|
|
44
|
+
"@mailwoman/phrase-grouper": "4.11.0",
|
|
45
|
+
"@mailwoman/query-shape": "4.11.0",
|
|
46
|
+
"@mailwoman/registry": "4.11.0",
|
|
45
47
|
"chalk": "^5.6.2",
|
|
46
48
|
"change-case": "^5.4.4",
|
|
47
49
|
"d3-scale-chromatic": "^3.1.0",
|
|
@@ -52,7 +54,7 @@
|
|
|
52
54
|
"ioredis": "^5.11.1",
|
|
53
55
|
"pastel": "^4.0.1",
|
|
54
56
|
"path-ts": "^1.0.5",
|
|
55
|
-
"piscina": "^
|
|
57
|
+
"piscina": "^5.2.0",
|
|
56
58
|
"pluralize": "^8.0.0",
|
|
57
59
|
"react": "^19.2.7",
|
|
58
60
|
"regenerate": "^1.4.2",
|