mailwoman 4.6.0 → 4.8.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geocode.d.ts","sourceRoot":"","sources":["../../commands/geocode.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAQH,OAAO,GAAG,MAAM,KAAK,CAAA;AAGrB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAOrD,QAAA,MAAM,eAAe,6BAA4E,CAAA;AACjG,OAAO,EAAE,eAAe,IAAI,IAAI,EAAE,aAAa,IAAI,OAAO,EAAE,CAAA;AAE5D,QAAA,MAAM,aAAa;;;;;;;;;;;;qBAuDjB,CAAA;AAqHF,QAAA,MAAM,cAAc,EAAE,gBAAgB,CAAC,OAAO,aAAa,EAAE,OAAO,eAAe,CAgClF,CAAA;AAED,eAAe,cAAc,CAAA"}
@@ -0,0 +1,221 @@
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 geocode "<address>" [flags]` — end-to-end street-level geocoder.
8
+ *
9
+ * Pipeline:
10
+ *
11
+ * 1. Parse the address with the neural classifier (same path as `parse` command).
12
+ * 2. Resolve admin hierarchy via `createWofResolver(WofSqlitePlaceLookup)`.
13
+ * 3. Augment with per-state address-point (situs) + interpolation shards, selected from the resolved
14
+ * region. Both are optional — absent shards degrade gracefully to admin-only.
15
+ * 4. Extract the best available coordinate + resolution tier from the resolved tree and emit a flat
16
+ * geocode result object.
17
+ *
18
+ * Resolution tiers (best → worst):
19
+ *
20
+ * - `address_point` — exact situs coordinate from the address-points shard
21
+ * - `interpolated` — house-number estimate from the interpolation shard
22
+ * - `admin` — admin centroid from the WOF gazetteer
23
+ *
24
+ * Exit-code contract:
25
+ *
26
+ * - 0 successful geocode (including admin-only degradation when shards are absent)
27
+ * - 1 bad arguments, missing required DB, or fatal parse/resolve error
28
+ */
29
+ import { Spinner } from "@inkjs/ui";
30
+ import { createWofResolver } from "@mailwoman/core/resolver";
31
+ import { NeuralAddressClassifier } from "@mailwoman/neural";
32
+ import { Text } from "ink";
33
+ import { setImmediate } from "node:timers/promises";
34
+ import { useEffect, useState } from "react";
35
+ import zod from "zod";
36
+ import { geocodeAddress, ShardProvider } from "../geocode-core.js";
37
+ import { INTERP_RADIUS_CALIBRATION } from "../interp-calibration.js";
38
+ import { resolverDefaultCountry } from "./parse.js";
39
+ // ---------------------------------------------------------------------------
40
+ // CLI contract — args + options
41
+ // ---------------------------------------------------------------------------
42
+ const ArgumentsSchema = zod.array(zod.string().describe("A formatted postal address to geocode"));
43
+ export { ArgumentsSchema as args, OptionsSchema as options };
44
+ const OptionsSchema = zod.object({
45
+ locale: zod
46
+ .string()
47
+ .regex(/^[a-z]{2}(-[A-Z]{2})?$/u, "Expected a BCP-47 tag like en-US or fr-FR")
48
+ .optional()
49
+ .default("en-US")
50
+ .describe("Locale tag matching a weights package (en-US, fr-FR). Default en-US."),
51
+ defaultCountry: zod
52
+ .string()
53
+ .optional()
54
+ .describe("ISO-3166 country to scope the WOF resolver. Defaults from --locale's region subtag (en-US → US). " +
55
+ "Pass 'none' to disable the country filter."),
56
+ resolveDb: zod
57
+ .string()
58
+ .optional()
59
+ .describe("Path to a WOF admin SQLite distribution. Defaults to $MAILWOMAN_WOF_DB; errors if neither is set."),
60
+ dataRoot: zod
61
+ .string()
62
+ .optional()
63
+ .default("/mnt/playpen/mailwoman-data")
64
+ .describe("Root directory for per-state address-point and interpolation shards. " +
65
+ "Shards are expected at <dataRoot>/address-points/address-points-us-<state>.db " +
66
+ "and <dataRoot>/interpolation/interpolation-us-<state>.db. Default: /mnt/playpen/mailwoman-data."),
67
+ addressPointsDb: zod
68
+ .string()
69
+ .optional()
70
+ .describe("Explicit path to an address-points (situs) SQLite shard. Bypasses the per-state shard selection " +
71
+ "from the resolved region. Use when you already know the right shard or are testing a specific file."),
72
+ interpolationDb: zod
73
+ .string()
74
+ .optional()
75
+ .describe("Explicit path to an interpolation SQLite shard. Bypasses the per-state shard selection. " +
76
+ "Use when you already know the right shard or are testing a specific file."),
77
+ interpCalibration: zod
78
+ .number()
79
+ .optional()
80
+ .describe("Conformal calibration multiplier for the interpolation tier's reported uncertainty_m (#374). " +
81
+ "The raw half-segment radius covers only ~72% of true errors. Default (unset): the per-region " +
82
+ "table (#584) selects by parsed region — 1.44 (DC) … 3.12 (AZ), 1.95 for unmeasured states — " +
83
+ "for a ~90% bound. Pass an explicit number to force a single multiplier everywhere (1 = raw)."),
84
+ format: zod
85
+ .enum(["json", "text"])
86
+ .optional()
87
+ .default("json")
88
+ .describe('Output format. "json" (default) emits a machine-readable object; "text" prints a human summary.'),
89
+ });
90
+ // ---------------------------------------------------------------------------
91
+ // Path helpers
92
+ // ---------------------------------------------------------------------------
93
+ function resolveWofPath(options) {
94
+ const path = options.resolveDb ?? process.env["MAILWOMAN_WOF_DB"];
95
+ if (!path) {
96
+ throw new Error("geocode needs a WOF admin SQLite path. Set $MAILWOMAN_WOF_DB or pass --resolve-db <path>. " +
97
+ "Build one with `mailwoman-wof-build-slim` + `mailwoman-wof-build-fts`.");
98
+ }
99
+ return path;
100
+ }
101
+ // ---------------------------------------------------------------------------
102
+ // Core geocode logic
103
+ // ---------------------------------------------------------------------------
104
+ async function runGeocode(input, options) {
105
+ // Resolve the WOF admin path FIRST — it's the most common missing prerequisite and the cheapest to
106
+ // check, so surface that error before the (slower) weights load. (Order matters for the CLI contract:
107
+ // a missing WOF DB must report the WOF error even when the weights are also absent.)
108
+ const wofPath = resolveWofPath(options);
109
+ // Load the neural classifier (required for street-level; weights must be present).
110
+ let classifier;
111
+ try {
112
+ classifier = await NeuralAddressClassifier.loadFromWeights({ locale: options.locale });
113
+ }
114
+ catch {
115
+ throw new Error("geocode requires the neural weights. Install @mailwoman/neural-weights-en-us (or pass --locale with installed weights).");
116
+ }
117
+ // Open the WOF admin resolver + the situs/interpolation shard provider.
118
+ let mod;
119
+ try {
120
+ mod = await import("@mailwoman/resolver-wof-sqlite");
121
+ }
122
+ catch {
123
+ throw new Error("geocode requires `@mailwoman/resolver-wof-sqlite` to be installed. " +
124
+ "Run `npm install @mailwoman/resolver-wof-sqlite` and try again.");
125
+ }
126
+ const lookup = new mod.WofSqlitePlaceLookup({ databasePath: wofPath });
127
+ const shardProvider = new ShardProvider(mod, options.dataRoot);
128
+ // Explicit --address-points-db / --interpolation-db flags override per-state selection (testing a
129
+ // specific file); an unset tier still falls back to the region-derived per-state shard.
130
+ const explicitAp = options.addressPointsDb ? new mod.AddressPointSqliteLookup(options.addressPointsDb) : undefined;
131
+ const explicitIp = options.interpolationDb
132
+ ? new mod.StreetInterpolator({ dbPath: options.interpolationDb })
133
+ : undefined;
134
+ const shards = explicitAp || explicitIp
135
+ ? (slug) => {
136
+ const base = explicitAp && explicitIp ? {} : shardProvider.for(slug);
137
+ return { addressPoints: explicitAp ?? base.addressPoints, interpolation: explicitIp ?? base.interpolation };
138
+ }
139
+ : shardProvider.for;
140
+ try {
141
+ const resolver = createWofResolver(lookup);
142
+ const result = await geocodeAddress(input, {
143
+ classifier,
144
+ resolver,
145
+ shards,
146
+ defaultCountry: resolverDefaultCountry(options) || undefined,
147
+ // Explicit --interp-calibration forces a single multiplier; unset → the per-region table (#584).
148
+ interpCalibration: options.interpCalibration ?? INTERP_RADIUS_CALIBRATION,
149
+ });
150
+ return options.format === "text" ? formatText(result) : JSON.stringify(result, null, 2);
151
+ }
152
+ finally {
153
+ explicitAp?.close();
154
+ explicitIp?.close();
155
+ shardProvider.close();
156
+ lookup.close();
157
+ }
158
+ }
159
+ // ---------------------------------------------------------------------------
160
+ // Text formatter
161
+ // ---------------------------------------------------------------------------
162
+ function formatText(result) {
163
+ const lines = [];
164
+ lines.push(`input: ${result.input}`);
165
+ lines.push(`resolution_tier: ${result.resolution_tier}`);
166
+ if (result.lat != null && result.lon != null) {
167
+ lines.push(`coordinate: ${result.lat.toFixed(6)}, ${result.lon.toFixed(6)}`);
168
+ }
169
+ else {
170
+ lines.push(`coordinate: (unresolved)`);
171
+ }
172
+ if (result.uncertainty_m != null) {
173
+ lines.push(`uncertainty_m: ${result.uncertainty_m}`);
174
+ }
175
+ if (result.locality)
176
+ lines.push(`locality: ${result.locality}`);
177
+ if (result.region)
178
+ lines.push(`region: ${result.region}`);
179
+ if (result.postcode)
180
+ lines.push(`postcode: ${result.postcode}`);
181
+ if (result.hierarchy.length > 0) {
182
+ lines.push("hierarchy:");
183
+ for (const h of result.hierarchy) {
184
+ const coord = h.lat != null ? ` (${h.lat.toFixed(4)}, ${h.lon.toFixed(4)})` : "";
185
+ const id = h.placeId ? ` [${h.placeId}]` : "";
186
+ lines.push(` ${h.tag.padEnd(20)} ${h.value}${id}${coord}`);
187
+ }
188
+ }
189
+ return lines.join("\n");
190
+ }
191
+ // ---------------------------------------------------------------------------
192
+ // React command component
193
+ // ---------------------------------------------------------------------------
194
+ const GeocodeCommand = ({ args, options }) => {
195
+ const [output, setOutput] = useState();
196
+ const [error, setError] = useState();
197
+ useEffect(() => {
198
+ if (error) {
199
+ setImmediate().then(() => process.exit(1));
200
+ }
201
+ }, [error]);
202
+ useEffect(() => {
203
+ const input = args[0];
204
+ if (!input || input.trim().length === 0) {
205
+ setError('geocode requires a positional address argument (e.g. mailwoman geocode "350 5th Ave, New York, NY")');
206
+ return;
207
+ }
208
+ runGeocode(input.trim(), options)
209
+ .then(setOutput)
210
+ .catch((err) => setError(err.message));
211
+ }, [args, options]);
212
+ if (error) {
213
+ return _jsx(Text, { color: "red", children: error });
214
+ }
215
+ if (!output) {
216
+ return _jsx(Spinner, {});
217
+ }
218
+ return _jsx(Text, { children: output });
219
+ };
220
+ export default GeocodeCommand;
221
+ //# sourceMappingURL=geocode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geocode.js","sourceRoot":"","sources":["../../commands/geocode.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reverse.d.ts","sourceRoot":"","sources":["../../commands/reverse.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAMH,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAErD,QAAA,MAAM,eAAe,6BAEuE,CAAA;AAE5F,QAAA,MAAM,aAAa;;;;;;;qBAqBjB,CAAA;AAEF,OAAO,EAAE,eAAe,IAAI,IAAI,EAAE,aAAa,IAAI,OAAO,EAAE,CAAA;AA0E5D,QAAA,MAAM,cAAc,EAAE,gBAAgB,CAAC,OAAO,aAAa,EAAE,OAAO,eAAe,CA6ClF,CAAA;AAED,eAAe,cAAc,CAAA"}
@@ -0,0 +1,144 @@
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 reverse <lat> <lon>` — resolve a WGS-84 coordinate to its containing admin hierarchy
8
+ * via the WofReverseGeocoder (#484).
9
+ *
10
+ * Falls back to the MAILWOMAN_WOF_ADMIN_DB / MAILWOMAN_WOF_POLYGONS_DB env vars when the
11
+ * corresponding flags are absent. Prints a JSON object with the resolved hierarchy and the
12
+ * containment kind (polygon | approximate) so callers can gauge result quality.
13
+ *
14
+ * Exit-code contract:
15
+ *
16
+ * - 0 successful reverse-geocode (including "open ocean" empty-hierarchy)
17
+ * - 1 bad arguments or DB path missing / wrong
18
+ */
19
+ import { Spinner } from "@inkjs/ui";
20
+ import { Text } from "ink";
21
+ import { setImmediate } from "node:timers/promises";
22
+ import { useEffect, useState } from "react";
23
+ import zod from "zod";
24
+ const ArgumentsSchema = zod
25
+ .array(zod.string())
26
+ .describe("Positional args: <lat> <lon> — WGS-84 decimal degrees (e.g. 40.7128 -74.0060).");
27
+ const OptionsSchema = zod.object({
28
+ adminDb: zod
29
+ .string()
30
+ .optional()
31
+ .describe("Path to the admin gazetteer SQLite DB (must carry the package-built place_bbox R*Tree). " +
32
+ "Defaults to $MAILWOMAN_WOF_ADMIN_DB."),
33
+ polygonsDb: zod
34
+ .string()
35
+ .optional()
36
+ .describe("Path to the polygon sidecar DB (wof-polygons.db, table polygons(id, geom)). " +
37
+ "Without it every result is containment: approximate. " +
38
+ "Defaults to $MAILWOMAN_WOF_POLYGONS_DB."),
39
+ format: zod
40
+ .enum(["json", "text"])
41
+ .optional()
42
+ .default("json")
43
+ .describe('Output format. "json" emits a machine-readable object; "text" prints a human-readable hierarchy.'),
44
+ });
45
+ export { ArgumentsSchema as args, OptionsSchema as options };
46
+ function resolveAdminDbPath(options) {
47
+ const path = options.adminDb ?? process.env["MAILWOMAN_WOF_ADMIN_DB"];
48
+ if (!path) {
49
+ throw new Error("reverse needs an admin DB path. Set $MAILWOMAN_WOF_ADMIN_DB or pass --admin-db <path>. " +
50
+ "Build one with `mailwoman-wof-build-fts <path-to-wof.db>` after building the WOF SQLite " +
51
+ "distribution with `mailwoman-wof-build-slim`.");
52
+ }
53
+ return path;
54
+ }
55
+ function resolvePolygonsDbPath(options) {
56
+ return options.polygonsDb ?? process.env["MAILWOMAN_WOF_POLYGONS_DB"];
57
+ }
58
+ async function runReverse(lat, lon, options) {
59
+ let mod;
60
+ try {
61
+ mod = await import("@mailwoman/resolver-wof-sqlite");
62
+ }
63
+ catch {
64
+ throw new Error("reverse requires `@mailwoman/resolver-wof-sqlite` to be installed. " +
65
+ "Run `npm install @mailwoman/resolver-wof-sqlite` and try again.");
66
+ }
67
+ const adminDbPath = resolveAdminDbPath(options);
68
+ const polygonDbPath = resolvePolygonsDbPath(options);
69
+ const geocoder = new mod.WofReverseGeocoder({ adminDbPath, polygonDbPath });
70
+ try {
71
+ const result = await geocoder.reverseGeocode(lat, lon);
72
+ if (options.format === "text") {
73
+ const lines = [];
74
+ lines.push(`containment: ${result.containment}`);
75
+ if (result.hierarchy.length === 0) {
76
+ lines.push("(no admin hierarchy — point may be in open ocean or outside the gazetteer coverage)");
77
+ }
78
+ else {
79
+ for (const place of result.hierarchy) {
80
+ const distStr = place.distanceKm !== undefined ? ` (~${place.distanceKm.toFixed(1)} km from centroid)` : "";
81
+ lines.push(` ${place.placetype.padEnd(16)} ${place.name} [wof:${place.id}]${distStr}`);
82
+ }
83
+ }
84
+ return lines.join("\n");
85
+ }
86
+ // JSON: emit a tidy object — the full hierarchy array + containment at the top level.
87
+ return JSON.stringify({
88
+ lat,
89
+ lon,
90
+ containment: result.containment,
91
+ hierarchy: result.hierarchy.map((p) => ({
92
+ id: p.id,
93
+ name: p.name,
94
+ placetype: p.placetype,
95
+ country: p.country,
96
+ lat: p.lat,
97
+ lon: p.lon,
98
+ ...(p.distanceKm !== undefined ? { distanceKm: p.distanceKm } : {}),
99
+ })),
100
+ }, null, 2);
101
+ }
102
+ finally {
103
+ geocoder.close();
104
+ }
105
+ }
106
+ const ReverseCommand = ({ args, options }) => {
107
+ const [output, setOutput] = useState();
108
+ const [error, setError] = useState();
109
+ useEffect(() => {
110
+ if (error) {
111
+ setImmediate().then(() => process.exit(1));
112
+ }
113
+ }, [error]);
114
+ useEffect(() => {
115
+ const rawLat = args[0];
116
+ const rawLon = args[1];
117
+ if (!rawLat || !rawLon) {
118
+ setError("reverse requires two positional arguments: <lat> <lon> (e.g. mailwoman reverse 40.7128 -74.0060)");
119
+ return;
120
+ }
121
+ const lat = Number(rawLat);
122
+ const lon = Number(rawLon);
123
+ if (!Number.isFinite(lat) || Math.abs(lat) > 90) {
124
+ setError(`Invalid latitude ${JSON.stringify(rawLat)} — must be a number in [-90, 90].`);
125
+ return;
126
+ }
127
+ if (!Number.isFinite(lon) || Math.abs(lon) > 180) {
128
+ setError(`Invalid longitude ${JSON.stringify(rawLon)} — must be a number in [-180, 180].`);
129
+ return;
130
+ }
131
+ runReverse(lat, lon, options)
132
+ .then(setOutput)
133
+ .catch((err) => setError(err.message));
134
+ }, [args, options]);
135
+ if (error) {
136
+ return _jsx(Text, { color: "red", children: error });
137
+ }
138
+ if (!output) {
139
+ return _jsx(Spinner, {});
140
+ }
141
+ return _jsx(Text, { children: output });
142
+ };
143
+ export default ReverseCommand;
144
+ //# sourceMappingURL=reverse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reverse.js","sourceRoot":"","sources":["../../commands/reverse.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../commands/serve.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AA2HrD,eAAO,MAAM,OAAO;;;;qBAAqB,CAAA;AAEzC,QAAA,MAAM,YAAY;;;;sBAAmD,CAAA;AAErE,eAAe,YAAY,CAAA"}
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../commands/serve.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AA8HrD,eAAO,MAAM,OAAO;;;;qBAAqB,CAAA;AAEzC,QAAA,MAAM,YAAY;;;;sBAAmD,CAAA;AAErE,eAAe,YAAY,CAAA"}
@@ -14,7 +14,7 @@ import * as process from "node:process";
14
14
  import { fileURLToPath } from "node:url";
15
15
  import { useEffect, useState } from "react";
16
16
  import zod from "zod";
17
- import { AddressRouter, ResolveRouter } from "../server/index.js";
17
+ import { AddressRouter, GeocodeRouter, HealthRouter, ResolveRouter } from "../server/index.js";
18
18
  const ClusterManager = ({ options: { cpus = availableParallelism() }, }) => {
19
19
  const [workers, setWorkers] = useState();
20
20
  useEffect(() => {
@@ -71,8 +71,11 @@ const WorkerStatus = ({ worker }) => {
71
71
  const ChildThread = ({ options: { port, host } }) => {
72
72
  useEffect(() => {
73
73
  const app = express();
74
- app.use(express.json());
74
+ // 2mb body cap accommodates a full /api/batch (up to MAILWOMAN_BATCH_MAX addresses).
75
+ app.use(express.json({ limit: "2mb" }));
76
+ app.use(HealthRouter);
75
77
  app.use(AddressRouter);
78
+ app.use(GeocodeRouter);
76
79
  app.use(ResolveRouter);
77
80
  // `mailwoman/server/static/` lives next to the compiled `mailwoman/out/commands/serve.js`,
78
81
  // so resolve relative to this file rather than relying on a repo-root path builder that
@@ -1 +1 @@
1
- {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../commands/serve.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../commands/serve.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,OAAO,MAAM,SAAS,CAAA;AAC7B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC/B,OAAO,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAA;AAC3D,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAE9F,MAAM,cAAc,GAAgD,CAAC,EACpE,OAAO,EAAE,EAAE,IAAI,GAAG,oBAAoB,EAAE,EAAE,GAC1C,EAAE,EAAE;IACJ,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,EAAY,CAAA;IAElD,SAAS,CAAC,GAAG,EAAE;QACd,2GAA2G;QAC3G,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QAE9D,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;YAC3C,OAAO,CAAC,GAAG,CAAC,IAAI,MAAM,MAAM,IAAI,YAAY,MAAM,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,CAAA;QACzE,CAAC,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAEV,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,OAAO,KAAC,IAAI,sCAA2B,CAAA;IACxC,CAAC;IAED,OAAO,CACN,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aAC1B,MAAC,IAAI,oCAAmB,OAAO,CAAC,GAAG,IAAQ,EAE3C,KAAC,IAAI,2BAAgB,EAEpB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACxB,KAAC,YAAY,IAAiB,MAAM,EAAE,MAAM,IAAzB,MAAM,CAAC,EAAE,CAAoB,CAChD,CAAC,IACG,CACN,CAAA;AACF,CAAC,CAAA;AAED,MAAM,YAAY,GAAiC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;IACjE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAA;IAC/C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,EAAU,CAAA;IAEhD,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QAC1C,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QACxC,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QACxC,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;QAEhD,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAC7B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACzB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC3B,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;QAEnC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;YAC5B,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;QAChC,CAAC,CAAC,CAAA;QAEF,OAAO,GAAG,EAAE;YACX,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;YAC9B,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YAC1B,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YAC5B,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;QACrC,CAAC,CAAA;IACF,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;IAEZ,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,KAAC,OAAO,IAAC,KAAK,EAAC,oBAAoB,GAAG,CAAA;IAC9C,CAAC;IAED,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,MAAC,aAAa,IAAC,OAAO,EAAC,SAAS,yBAAU,MAAM,CAAC,OAAO,CAAC,GAAG,SAAkB,CAAA;IACtF,CAAC;IAED,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,MAAC,aAAa,IAAC,OAAO,EAAC,OAAO,yBAAU,MAAM,CAAC,OAAO,CAAC,GAAG,SAAkB,CAAA;IACpF,CAAC;IAED,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,MAAC,aAAa,IAAC,OAAO,EAAC,OAAO,wBAAS,MAAM,CAAC,OAAO,CAAC,GAAG,SAAkB,CAAA;IACnF,CAAC;IAED,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QAC5B,OAAO,CACN,MAAC,aAAa,IAAC,OAAO,EAAC,MAAM,4BAChB,MAAM,CAAC,OAAO,CAAC,GAAG,QAAI,OAAO,IAC1B,CAChB,CAAA;IACF,CAAC;IAED,OAAO,CACN,MAAC,aAAa,IAAC,OAAO,EAAC,OAAO,kCACP,MAAM,UAAU,MAAM,CAAC,OAAO,CAAC,GAAG,SACzC,CAChB,CAAA;AACF,CAAC,CAAA;AAED,MAAM,WAAW,GAAgD,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;IAChG,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,GAAG,OAAO,EAAE,CAAA;QAErB,qFAAqF;QACrF,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;QACvC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QACrB,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;QACtB,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;QACtB,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;QAEtB,2FAA2F;QAC3F,wFAAwF;QACxF,kCAAkC;QAClC,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QACvD,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAEvE,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,UAAU,CAAC,CAAA;QACpD,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAA;QAEnC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE;YAC3B,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAA;QAC1C,CAAC,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IAEhB,OAAO,IAAI,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,kBAAkB,GAAG,GAAG,CAAC,MAAM,CAAC;IACrC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IAC7E,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IAC7F,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;CACnE,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,kBAAkB,CAAA;AAEzC,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,WAAW,CAAA;AAErE,eAAe,YAAY,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-release.d.ts","sourceRoot":"","sources":["../data-release.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,iGAAiG;AACjG,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAExD,4FAA4F;AAC5F,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAYhF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC/B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,mBAAmB,GAAG,IAAI,GAClC,MAAM,GAAG,IAAI,CAQf"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ *
6
+ * Versioned data-artifact addressing + atomic switchover (#485 piece 4). Shard DBs are addressed as
7
+ * `<family>/<family>-us-<slug>-<version>.db`, with a `releases.json` manifest at the data root
8
+ * pinning each family to its current version. So a new build publishes ALONGSIDE the old,
9
+ * flipping the manifest (one atomic file write) cuts traffic over, and the build provenance (the
10
+ * version) travels in the filename — "what data is deployed" is a read of one JSON.
11
+ *
12
+ * Back-compat: with no manifest (or a family unlisted) resolution falls back to the legacy
13
+ * unversioned `<family>-us-<slug>.db`, so the current national build output works unchanged.
14
+ *
15
+ * Example `releases.json`: { "address-points": "2026-05-20.0", "interpolation": "TIGER2023" }
16
+ */
17
+ import { existsSync, readFileSync } from "node:fs";
18
+ /** Read `<dataRoot>/releases.json`. Returns null (legacy mode) when absent or malformed. */
19
+ export function readReleaseManifest(dataRoot) {
20
+ try {
21
+ const raw = JSON.parse(readFileSync(`${dataRoot}/releases.json`, "utf8"));
22
+ if (!raw || typeof raw !== "object")
23
+ return null;
24
+ const out = {};
25
+ for (const [family, version] of Object.entries(raw)) {
26
+ if (typeof version === "string" && version)
27
+ out[family] = version;
28
+ }
29
+ return Object.keys(out).length > 0 ? out : null;
30
+ }
31
+ catch {
32
+ return null;
33
+ }
34
+ }
35
+ /**
36
+ * Resolve a shard's on-disk path: the manifest-pinned `<family>-us-<slug>-<version>.db` when
37
+ * present, else the legacy unversioned `<family>-us-<slug>.db`, else null if neither exists.
38
+ */
39
+ export function resolveShardPath(dataRoot, family, slug, manifest) {
40
+ const version = manifest?.[family];
41
+ if (version) {
42
+ const versioned = `${dataRoot}/${family}/${family}-us-${slug}-${version}.db`;
43
+ if (existsSync(versioned))
44
+ return versioned;
45
+ }
46
+ const legacy = `${dataRoot}/${family}/${family}-us-${slug}.db`;
47
+ return existsSync(legacy) ? legacy : null;
48
+ }
49
+ //# sourceMappingURL=data-release.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-release.js","sourceRoot":"","sources":["../data-release.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAKlD,4FAA4F;AAC5F,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IACnD,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,QAAQ,gBAAgB,EAAE,MAAM,CAAC,CAAY,CAAA;QACpF,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAA;QAChD,MAAM,GAAG,GAAwB,EAAE,CAAA;QACnC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAA8B,CAAC,EAAE,CAAC;YAChF,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO;gBAAE,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAAA;QAClE,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA;IAChD,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAA;IACZ,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC/B,QAAgB,EAChB,MAAc,EACd,IAAY,EACZ,QAAoC;IAEpC,MAAM,OAAO,GAAG,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAA;IAClC,IAAI,OAAO,EAAE,CAAC;QACb,MAAM,SAAS,GAAG,GAAG,QAAQ,IAAI,MAAM,IAAI,MAAM,OAAO,IAAI,IAAI,OAAO,KAAK,CAAA;QAC5E,IAAI,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAA;IAC5C,CAAC;IACD,MAAM,MAAM,GAAG,GAAG,QAAQ,IAAI,MAAM,IAAI,MAAM,OAAO,IAAI,KAAK,CAAA;IAC9D,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA;AAC1C,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geocode-core.d.ts","sourceRoot":"","sources":["../geocode-core.ts"],"names":[],"mappings":"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"}