@mailwoman/corpus 4.16.2 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/out/src/adapter.d.ts +23 -26
- package/out/src/adapter.d.ts.map +1 -1
- package/out/src/adapter.js +25 -28
- package/out/src/adapter.js.map +1 -1
- package/out/src/adapters/ban/adapter.d.ts.map +1 -1
- package/out/src/adapters/ban/adapter.js +10 -10
- package/out/src/adapters/ban/adapter.js.map +1 -1
- package/out/src/adapters/ban/street-decompose.d.ts +2 -2
- package/out/src/adapters/ban/street-decompose.d.ts.map +1 -1
- package/out/src/adapters/ban/street-decompose.js +2 -2
- package/out/src/adapters/ban/street-decompose.js.map +1 -1
- package/out/src/adapters/fcc-bdc/adapter.d.ts +2 -2
- package/out/src/adapters/fcc-bdc/adapter.d.ts.map +1 -1
- package/out/src/adapters/fcc-bdc/adapter.js +9 -9
- package/out/src/adapters/fcc-bdc/adapter.js.map +1 -1
- package/out/src/adapters/geonames/adapter.d.ts.map +1 -1
- package/out/src/adapters/geonames/adapter.js +5 -5
- package/out/src/adapters/geonames/adapter.js.map +1 -1
- package/out/src/adapters/geonames-postal/adapter.d.ts.map +1 -1
- package/out/src/adapters/geonames-postal/adapter.js +3 -3
- package/out/src/adapters/geonames-postal/adapter.js.map +1 -1
- package/out/src/adapters/gnaf/adapter.d.ts +3 -3
- package/out/src/adapters/gnaf/adapter.d.ts.map +1 -1
- package/out/src/adapters/gnaf/adapter.js +11 -10
- package/out/src/adapters/gnaf/adapter.js.map +1 -1
- package/out/src/adapters/gnaf/assemble.d.ts +4 -5
- package/out/src/adapters/gnaf/assemble.d.ts.map +1 -1
- package/out/src/adapters/gnaf/assemble.js +1 -1
- package/out/src/adapters/gnaf/assemble.js.map +1 -1
- package/out/src/adapters/index.d.ts +9 -10
- package/out/src/adapters/index.d.ts.map +1 -1
- package/out/src/adapters/index.js +13 -14
- package/out/src/adapters/index.js.map +1 -1
- package/out/src/adapters/openaddresses/adapter.d.ts +8 -10
- package/out/src/adapters/openaddresses/adapter.d.ts.map +1 -1
- package/out/src/adapters/openaddresses/adapter.js +8 -8
- package/out/src/adapters/openaddresses/adapter.js.map +1 -1
- package/out/src/adapters/overture/adapter.d.ts.map +1 -1
- package/out/src/adapters/overture/adapter.js +2 -2
- package/out/src/adapters/overture/adapter.js.map +1 -1
- package/out/src/adapters/state-hi-schools/adapter.d.ts +1 -1
- package/out/src/adapters/state-hi-schools/adapter.d.ts.map +1 -1
- package/out/src/adapters/state-hi-schools/adapter.js +6 -6
- package/out/src/adapters/state-hi-schools/adapter.js.map +1 -1
- package/out/src/adapters/state-ia-contractors/adapter.d.ts +1 -1
- package/out/src/adapters/state-ia-contractors/adapter.d.ts.map +1 -1
- package/out/src/adapters/state-ia-contractors/adapter.js +6 -6
- package/out/src/adapters/state-ia-contractors/adapter.js.map +1 -1
- package/out/src/adapters/state-ny-notaries/adapter.d.ts +1 -1
- package/out/src/adapters/state-ny-notaries/adapter.d.ts.map +1 -1
- package/out/src/adapters/state-ny-notaries/adapter.js +6 -6
- package/out/src/adapters/state-ny-notaries/adapter.js.map +1 -1
- package/out/src/adapters/state-tx-notaries/adapter.d.ts.map +1 -1
- package/out/src/adapters/state-tx-notaries/adapter.js +7 -7
- package/out/src/adapters/state-tx-notaries/adapter.js.map +1 -1
- package/out/src/adapters/synth-po-box/adapter.d.ts +9 -9
- package/out/src/adapters/synth-po-box/adapter.d.ts.map +1 -1
- package/out/src/adapters/synth-po-box/adapter.js +6 -6
- package/out/src/adapters/synth-po-box/adapter.js.map +1 -1
- package/out/src/adapters/tiger/adapter.d.ts.map +1 -1
- package/out/src/adapters/tiger/adapter.js +2 -2
- package/out/src/adapters/tiger/adapter.js.map +1 -1
- package/out/src/adapters/tiger/street-decompose.d.ts +2 -2
- package/out/src/adapters/tiger/street-decompose.d.ts.map +1 -1
- package/out/src/adapters/tiger/street-decompose.js +2 -2
- package/out/src/adapters/tiger/street-decompose.js.map +1 -1
- package/out/src/adapters/usgov-hrsa-fqhc/adapter.d.ts.map +1 -1
- package/out/src/adapters/usgov-hrsa-fqhc/adapter.js +15 -17
- package/out/src/adapters/usgov-hrsa-fqhc/adapter.js.map +1 -1
- package/out/src/adapters/usgov-imls-pls/adapter.d.ts +1 -1
- package/out/src/adapters/usgov-imls-pls/adapter.d.ts.map +1 -1
- package/out/src/adapters/usgov-imls-pls/adapter.js +6 -6
- package/out/src/adapters/usgov-imls-pls/adapter.js.map +1 -1
- package/out/src/adapters/usgov-irs-bmf/adapter.d.ts.map +1 -1
- package/out/src/adapters/usgov-irs-bmf/adapter.js +5 -5
- package/out/src/adapters/usgov-irs-bmf/adapter.js.map +1 -1
- package/out/src/adapters/usgov-nad/adapter.d.ts +2 -2
- package/out/src/adapters/usgov-nad/adapter.d.ts.map +1 -1
- package/out/src/adapters/usgov-nad/adapter.js +6 -6
- package/out/src/adapters/usgov-nad/adapter.js.map +1 -1
- package/out/src/adapters/usgov-nppes/adapter.d.ts +3 -3
- package/out/src/adapters/usgov-nppes/adapter.d.ts.map +1 -1
- package/out/src/adapters/usgov-nppes/adapter.js +7 -7
- package/out/src/adapters/usgov-nppes/adapter.js.map +1 -1
- package/out/src/adapters/usgov-samhsa-treatment-locator/adapter.d.ts.map +1 -1
- package/out/src/adapters/usgov-samhsa-treatment-locator/adapter.js +12 -12
- package/out/src/adapters/usgov-samhsa-treatment-locator/adapter.js.map +1 -1
- package/out/src/adapters/wof-admin-jp/adapter.d.ts +3 -3
- package/out/src/adapters/wof-admin-jp/adapter.d.ts.map +1 -1
- package/out/src/adapters/wof-admin-jp/adapter.js +6 -6
- package/out/src/adapters/wof-admin-jp/adapter.js.map +1 -1
- package/out/src/adapters/wof-admin-json/adapter.d.ts +17 -19
- package/out/src/adapters/wof-admin-json/adapter.d.ts.map +1 -1
- package/out/src/adapters/wof-admin-json/adapter.js +25 -28
- package/out/src/adapters/wof-admin-json/adapter.js.map +1 -1
- package/out/src/adapters/wof-postalcode-json/adapter.d.ts +8 -8
- package/out/src/adapters/wof-postalcode-json/adapter.d.ts.map +1 -1
- package/out/src/adapters/wof-postalcode-json/adapter.js +11 -11
- package/out/src/adapters/wof-postalcode-json/adapter.js.map +1 -1
- package/out/src/align.d.ts +14 -16
- package/out/src/align.d.ts.map +1 -1
- package/out/src/align.js +15 -16
- package/out/src/align.js.map +1 -1
- package/out/src/build.d.ts +13 -15
- package/out/src/build.d.ts.map +1 -1
- package/out/src/build.js +4 -5
- package/out/src/build.js.map +1 -1
- package/out/src/codex/us-fips-state.d.ts +6 -8
- package/out/src/codex/us-fips-state.d.ts.map +1 -1
- package/out/src/codex/us-fips-state.js +6 -8
- package/out/src/codex/us-fips-state.js.map +1 -1
- package/out/src/golden.d.ts.map +1 -1
- package/out/src/golden.js +1 -1
- package/out/src/golden.js.map +1 -1
- package/out/src/index.d.ts +1 -0
- package/out/src/index.d.ts.map +1 -1
- package/out/src/index.js +1 -0
- package/out/src/index.js.map +1 -1
- package/out/src/license.d.ts +5 -6
- package/out/src/license.d.ts.map +1 -1
- package/out/src/license.js +5 -6
- package/out/src/license.js.map +1 -1
- package/out/src/parquet-wrapper/reader.d.ts.map +1 -1
- package/out/src/parquet-wrapper/reader.js.map +1 -1
- package/out/src/parquet-wrapper/writer.d.ts.map +1 -1
- package/out/src/parquet-wrapper/writer.js +2 -2
- package/out/src/parquet-wrapper/writer.js.map +1 -1
- package/out/src/parquet.d.ts +16 -18
- package/out/src/parquet.d.ts.map +1 -1
- package/out/src/parquet.js +22 -23
- package/out/src/parquet.js.map +1 -1
- package/out/src/runner.d.ts +10 -10
- package/out/src/runner.d.ts.map +1 -1
- package/out/src/runner.js +8 -8
- package/out/src/runner.js.map +1 -1
- package/out/src/shard-recipes/anchor-absorption.d.ts +16 -0
- package/out/src/shard-recipes/anchor-absorption.d.ts.map +1 -0
- package/out/src/shard-recipes/anchor-absorption.js +73 -0
- package/out/src/shard-recipes/anchor-absorption.js.map +1 -0
- package/out/src/shard-recipes/boundary-stress.d.ts +16 -0
- package/out/src/shard-recipes/boundary-stress.d.ts.map +1 -0
- package/out/src/shard-recipes/boundary-stress.js +77 -0
- package/out/src/shard-recipes/boundary-stress.js.map +1 -0
- package/out/src/shard-recipes/country-balanced.d.ts +28 -0
- package/out/src/shard-recipes/country-balanced.d.ts.map +1 -0
- package/out/src/shard-recipes/country-balanced.js +370 -0
- package/out/src/shard-recipes/country-balanced.js.map +1 -0
- package/out/src/shard-recipes/fr-admin-split.d.ts +34 -0
- package/out/src/shard-recipes/fr-admin-split.d.ts.map +1 -0
- package/out/src/shard-recipes/fr-admin-split.js +175 -0
- package/out/src/shard-recipes/fr-admin-split.js.map +1 -0
- package/out/src/shard-recipes/fr-bare-street.d.ts +24 -0
- package/out/src/shard-recipes/fr-bare-street.d.ts.map +1 -0
- package/out/src/shard-recipes/fr-bare-street.js +76 -0
- package/out/src/shard-recipes/fr-bare-street.js.map +1 -0
- package/out/src/shard-recipes/fr-order.d.ts +34 -0
- package/out/src/shard-recipes/fr-order.d.ts.map +1 -0
- package/out/src/shard-recipes/fr-order.js +238 -0
- package/out/src/shard-recipes/fr-order.js.map +1 -0
- package/out/src/shard-recipes/german.d.ts +19 -0
- package/out/src/shard-recipes/german.d.ts.map +1 -0
- package/out/src/shard-recipes/german.js +170 -0
- package/out/src/shard-recipes/german.js.map +1 -0
- package/out/src/shard-recipes/house-venue.d.ts +14 -0
- package/out/src/shard-recipes/house-venue.d.ts.map +1 -0
- package/out/src/shard-recipes/house-venue.js +66 -0
- package/out/src/shard-recipes/house-venue.js.map +1 -0
- package/out/src/shard-recipes/index.d.ts +18 -0
- package/out/src/shard-recipes/index.d.ts.map +1 -0
- package/out/src/shard-recipes/index.js +58 -0
- package/out/src/shard-recipes/index.js.map +1 -0
- package/out/src/shard-recipes/intersection.d.ts +38 -0
- package/out/src/shard-recipes/intersection.d.ts.map +1 -0
- package/out/src/shard-recipes/intersection.js +473 -0
- package/out/src/shard-recipes/intersection.js.map +1 -0
- package/out/src/shard-recipes/locale.d.ts +19 -0
- package/out/src/shard-recipes/locale.d.ts.map +1 -0
- package/out/src/shard-recipes/locale.js +257 -0
- package/out/src/shard-recipes/locale.js.map +1 -0
- package/out/src/shard-recipes/no-street.d.ts +14 -0
- package/out/src/shard-recipes/no-street.d.ts.map +1 -0
- package/out/src/shard-recipes/no-street.js +66 -0
- package/out/src/shard-recipes/no-street.js.map +1 -0
- package/out/src/shard-recipes/po-box-cedex.d.ts +34 -0
- package/out/src/shard-recipes/po-box-cedex.d.ts.map +1 -0
- package/out/src/shard-recipes/po-box-cedex.js +686 -0
- package/out/src/shard-recipes/po-box-cedex.js.map +1 -0
- package/out/src/shard-recipes/po-box.d.ts +13 -0
- package/out/src/shard-recipes/po-box.d.ts.map +1 -0
- package/out/src/shard-recipes/po-box.js +93 -0
- package/out/src/shard-recipes/po-box.js.map +1 -0
- package/out/src/shard-recipes/scaffold.d.ts +104 -0
- package/out/src/shard-recipes/scaffold.d.ts.map +1 -0
- package/out/src/shard-recipes/scaffold.js +76 -0
- package/out/src/shard-recipes/scaffold.js.map +1 -0
- package/out/src/shard-recipes/street-affix.d.ts +31 -0
- package/out/src/shard-recipes/street-affix.d.ts.map +1 -0
- package/out/src/shard-recipes/street-affix.js +408 -0
- package/out/src/shard-recipes/street-affix.js.map +1 -0
- package/out/src/shard-recipes/street-bare.d.ts +21 -0
- package/out/src/shard-recipes/street-bare.d.ts.map +1 -0
- package/out/src/shard-recipes/street-bare.js +82 -0
- package/out/src/shard-recipes/street-bare.js.map +1 -0
- package/out/src/shard-recipes/street.d.ts +11 -0
- package/out/src/shard-recipes/street.d.ts.map +1 -0
- package/out/src/shard-recipes/street.js +63 -0
- package/out/src/shard-recipes/street.js.map +1 -0
- package/out/src/shard-recipes/unit.d.ts +25 -0
- package/out/src/shard-recipes/unit.d.ts.map +1 -0
- package/out/src/shard-recipes/unit.js +255 -0
- package/out/src/shard-recipes/unit.js.map +1 -0
- package/out/src/split.d.ts +23 -29
- package/out/src/split.d.ts.map +1 -1
- package/out/src/split.js +22 -29
- package/out/src/split.js.map +1 -1
- package/out/src/synthesize-anchor-absorption.d.ts +2 -3
- package/out/src/synthesize-anchor-absorption.d.ts.map +1 -1
- package/out/src/synthesize-anchor-absorption.js +2 -2
- package/out/src/synthesize-anchor-absorption.js.map +1 -1
- package/out/src/synthesize-boundary-stress.d.ts +3 -4
- package/out/src/synthesize-boundary-stress.d.ts.map +1 -1
- package/out/src/synthesize-boundary-stress.js +3 -4
- package/out/src/synthesize-boundary-stress.js.map +1 -1
- package/out/src/synthesize-german.d.ts +15 -19
- package/out/src/synthesize-german.d.ts.map +1 -1
- package/out/src/synthesize-german.js +14 -17
- package/out/src/synthesize-german.js.map +1 -1
- package/out/src/synthesize-house-venue.d.ts +2 -3
- package/out/src/synthesize-house-venue.d.ts.map +1 -1
- package/out/src/synthesize-house-venue.js +2 -3
- package/out/src/synthesize-house-venue.js.map +1 -1
- package/out/src/synthesize-intersection.d.ts +2 -2
- package/out/src/synthesize-intersection.d.ts.map +1 -1
- package/out/src/synthesize-intersection.js +4 -4
- package/out/src/synthesize-intersection.js.map +1 -1
- package/out/src/synthesize-no-street.d.ts +5 -5
- package/out/src/synthesize-no-street.d.ts.map +1 -1
- package/out/src/synthesize-no-street.js +27 -23
- package/out/src/synthesize-no-street.js.map +1 -1
- package/out/src/synthesize-po-box.d.ts +15 -17
- package/out/src/synthesize-po-box.d.ts.map +1 -1
- package/out/src/synthesize-po-box.js +27 -27
- package/out/src/synthesize-po-box.js.map +1 -1
- package/out/src/synthesize-street.d.ts +8 -9
- package/out/src/synthesize-street.d.ts.map +1 -1
- package/out/src/synthesize-street.js +3 -3
- package/out/src/synthesize-street.js.map +1 -1
- package/out/src/synthesize.d.ts +57 -66
- package/out/src/synthesize.d.ts.map +1 -1
- package/out/src/synthesize.js +56 -65
- package/out/src/synthesize.js.map +1 -1
- package/out/src/tokenize.d.ts +5 -6
- package/out/src/tokenize.d.ts.map +1 -1
- package/out/src/tokenize.js +5 -6
- package/out/src/tokenize.js.map +1 -1
- package/out/src/types.d.ts +49 -51
- package/out/src/types.d.ts.map +1 -1
- package/out/src/wof-json.d.ts +32 -34
- package/out/src/wof-json.d.ts.map +1 -1
- package/out/src/wof-json.js +23 -25
- package/out/src/wof-json.js.map +1 -1
- package/package.json +14 -14
package/out/src/adapter.d.ts
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*
|
|
11
11
|
* - `AdapterRegistry`: a tiny lookup table the CLI + build pipeline use to find adapters by id.
|
|
12
12
|
* - `InMemoryAdapterRegistry`: the default implementation.
|
|
13
|
-
* - `
|
|
13
|
+
* - `stableSourceID(adapterID, components)`: deterministic content-addressed id for adapters whose
|
|
14
14
|
* source data has no native primary key (CSV, GeoJSON).
|
|
15
15
|
* - `canonicalDedupKey(row)`: normalized signature used to drop near-identical rows during a run.
|
|
16
16
|
* Adapter-internal dedup; cross-adapter dedup is the runner's job.
|
|
@@ -24,9 +24,9 @@ import type { CanonicalRow, CorpusAdapter } from "./types.js";
|
|
|
24
24
|
/**
|
|
25
25
|
* Lookup table for corpus adapters.
|
|
26
26
|
*
|
|
27
|
-
* The CLI's `npx mailwoman corpus run <adapter-id>` resolves `<adapter-id>` against this registry;
|
|
28
|
-
*
|
|
29
|
-
*
|
|
27
|
+
* The CLI's `npx mailwoman corpus run <adapter-id>` resolves `<adapter-id>` against this registry; the same registry is
|
|
28
|
+
* iterated by the `corpus build` pipeline. Adapters do not self-register at module load — they're added explicitly so
|
|
29
|
+
* the dependency graph stays traceable.
|
|
30
30
|
*/
|
|
31
31
|
export interface AdapterRegistry {
|
|
32
32
|
/** Add an adapter. Throws if `adapter.id` is already registered. */
|
|
@@ -39,8 +39,8 @@ export interface AdapterRegistry {
|
|
|
39
39
|
ids(): readonly string[];
|
|
40
40
|
}
|
|
41
41
|
/**
|
|
42
|
-
* Default in-memory registry. The runner constructs one per invocation; the CLI re-uses a shared
|
|
43
|
-
*
|
|
42
|
+
* Default in-memory registry. The runner constructs one per invocation; the CLI re-uses a shared singleton
|
|
43
|
+
* (`defaultAdapterRegistry`) populated by `./adapters/index.ts` as adapters come online.
|
|
44
44
|
*/
|
|
45
45
|
export declare class InMemoryAdapterRegistry implements AdapterRegistry {
|
|
46
46
|
#private;
|
|
@@ -50,42 +50,39 @@ export declare class InMemoryAdapterRegistry implements AdapterRegistry {
|
|
|
50
50
|
ids(): readonly string[];
|
|
51
51
|
}
|
|
52
52
|
/**
|
|
53
|
-
* Process-wide default registry. Populated by `./adapters/index.ts` as adapters are built; imported
|
|
54
|
-
*
|
|
55
|
-
* pollution.
|
|
53
|
+
* Process-wide default registry. Populated by `./adapters/index.ts` as adapters are built; imported by the CLI. Tests
|
|
54
|
+
* should construct their own `InMemoryAdapterRegistry` to avoid cross-test pollution.
|
|
56
55
|
*/
|
|
57
56
|
export declare const defaultAdapterRegistry: InMemoryAdapterRegistry;
|
|
58
57
|
/**
|
|
59
58
|
* Deterministic content-addressed source id.
|
|
60
59
|
*
|
|
61
|
-
* For adapters whose upstream source has no native primary key (CSV rows, GeoJSON features), the
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
* dict (keys sorted, values verbatim).
|
|
60
|
+
* For adapters whose upstream source has no native primary key (CSV rows, GeoJSON features), the runner expects a
|
|
61
|
+
* stable id so dedup, holdout manifests, and resumability work across reruns. This helper produces one by hashing the
|
|
62
|
+
* adapter id and a canonical serialization of the components dict (keys sorted, values verbatim).
|
|
65
63
|
*
|
|
66
|
-
* Output format: `<
|
|
67
|
-
*
|
|
68
|
-
*
|
|
64
|
+
* Output format: `<adapterID>-<first-12-hex-chars-of-sha256>`. 48 bits of entropy is enough for ~17M rows per adapter
|
|
65
|
+
* before the expected collision count exceeds 1 (birthday paradox); adapters with more rows should extend the prefix
|
|
66
|
+
* length.
|
|
69
67
|
*/
|
|
70
|
-
export declare function
|
|
68
|
+
export declare function stableSourceID(adapterID: string, components: Partial<Record<ComponentTag, string>>): string;
|
|
71
69
|
/**
|
|
72
70
|
* Canonical dedup key for a row.
|
|
73
71
|
*
|
|
74
|
-
* Two rows that share this key are treated as duplicates and only the first wins. The key is built
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
* multiple adapters is recognized as a duplicate.
|
|
72
|
+
* Two rows that share this key are treated as duplicates and only the first wins. The key is built from `country`, the
|
|
73
|
+
* sorted `components` dict, and a normalized `raw` (lower-cased, whitespace collapsed). License and provenance fields
|
|
74
|
+
* are intentionally excluded so the same address from multiple adapters is recognized as a duplicate.
|
|
78
75
|
*
|
|
79
|
-
* Synthetic rows are never deduplicated against natural rows: `synth.method` is folded into the key
|
|
80
|
-
*
|
|
76
|
+
* Synthetic rows are never deduplicated against natural rows: `synth.method` is folded into the key when present,
|
|
77
|
+
* ensuring each augmentation variant survives.
|
|
81
78
|
*/
|
|
82
79
|
export declare function canonicalDedupKey(row: CanonicalRow): string;
|
|
83
80
|
/**
|
|
84
81
|
* Streaming SHA-256 hasher.
|
|
85
82
|
*
|
|
86
|
-
* The runner feeds every JSONL line into one of these so the per-shard checksum can be recorded in
|
|
87
|
-
*
|
|
88
|
-
*
|
|
83
|
+
* The runner feeds every JSONL line into one of these so the per-shard checksum can be recorded in `MANIFEST.json`
|
|
84
|
+
* without a second pass over the shard. Implementation is a one-line wrapper, but giving it a name keeps the runner's
|
|
85
|
+
* hash-tracking intent obvious.
|
|
89
86
|
*/
|
|
90
87
|
export interface StreamingHasher {
|
|
91
88
|
update(chunk: string | Uint8Array): void;
|
package/out/src/adapter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEzD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE7D;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC/B,oEAAoE;IACpE,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAA;IAEtC,mDAAmD;IACnD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAA;IAE1C,mDAAmD;IACnD,IAAI,IAAI,SAAS,aAAa,EAAE,CAAA;IAEhC,iDAAiD;IACjD,GAAG,IAAI,SAAS,MAAM,EAAE,CAAA;CACxB;AAED;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,eAAe;;IAG9D,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAOtC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI1C,IAAI,IAAI,SAAS,aAAa,EAAE;IAIhC,GAAG,IAAI,SAAS,MAAM,EAAE;CAGxB;AAED;;;GAGG;AACH,eAAO,MAAM,sBAAsB,yBAAgC,CAAA;AAEnE;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAM3G;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAO3D;AAED;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC/B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAA;IACxC,MAAM,IAAI,MAAM,CAAA;CAChB;AAED,gDAAgD;AAChD,wBAAgB,eAAe,IAAI,eAAe,CAmBjD"}
|
package/out/src/adapter.js
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*
|
|
11
11
|
* - `AdapterRegistry`: a tiny lookup table the CLI + build pipeline use to find adapters by id.
|
|
12
12
|
* - `InMemoryAdapterRegistry`: the default implementation.
|
|
13
|
-
* - `
|
|
13
|
+
* - `stableSourceID(adapterID, components)`: deterministic content-addressed id for adapters whose
|
|
14
14
|
* source data has no native primary key (CSV, GeoJSON).
|
|
15
15
|
* - `canonicalDedupKey(row)`: normalized signature used to drop near-identical rows during a run.
|
|
16
16
|
* Adapter-internal dedup; cross-adapter dedup is the runner's job.
|
|
@@ -21,61 +21,58 @@
|
|
|
21
21
|
*/
|
|
22
22
|
import { createHash } from "node:crypto";
|
|
23
23
|
/**
|
|
24
|
-
* Default in-memory registry. The runner constructs one per invocation; the CLI re-uses a shared
|
|
25
|
-
*
|
|
24
|
+
* Default in-memory registry. The runner constructs one per invocation; the CLI re-uses a shared singleton
|
|
25
|
+
* (`defaultAdapterRegistry`) populated by `./adapters/index.ts` as adapters come online.
|
|
26
26
|
*/
|
|
27
27
|
export class InMemoryAdapterRegistry {
|
|
28
|
-
#
|
|
28
|
+
#byID = new Map();
|
|
29
29
|
register(adapter) {
|
|
30
|
-
if (this.#
|
|
30
|
+
if (this.#byID.has(adapter.id)) {
|
|
31
31
|
throw new Error(`AdapterRegistry: id ${JSON.stringify(adapter.id)} already registered`);
|
|
32
32
|
}
|
|
33
|
-
this.#
|
|
33
|
+
this.#byID.set(adapter.id, adapter);
|
|
34
34
|
}
|
|
35
35
|
get(id) {
|
|
36
|
-
return this.#
|
|
36
|
+
return this.#byID.get(id);
|
|
37
37
|
}
|
|
38
38
|
list() {
|
|
39
|
-
return Array.from(this.#
|
|
39
|
+
return Array.from(this.#byID.values());
|
|
40
40
|
}
|
|
41
41
|
ids() {
|
|
42
|
-
return Array.from(this.#
|
|
42
|
+
return Array.from(this.#byID.keys());
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
/**
|
|
46
|
-
* Process-wide default registry. Populated by `./adapters/index.ts` as adapters are built; imported
|
|
47
|
-
*
|
|
48
|
-
* pollution.
|
|
46
|
+
* Process-wide default registry. Populated by `./adapters/index.ts` as adapters are built; imported by the CLI. Tests
|
|
47
|
+
* should construct their own `InMemoryAdapterRegistry` to avoid cross-test pollution.
|
|
49
48
|
*/
|
|
50
49
|
export const defaultAdapterRegistry = new InMemoryAdapterRegistry();
|
|
51
50
|
/**
|
|
52
51
|
* Deterministic content-addressed source id.
|
|
53
52
|
*
|
|
54
|
-
* For adapters whose upstream source has no native primary key (CSV rows, GeoJSON features), the
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
* dict (keys sorted, values verbatim).
|
|
53
|
+
* For adapters whose upstream source has no native primary key (CSV rows, GeoJSON features), the runner expects a
|
|
54
|
+
* stable id so dedup, holdout manifests, and resumability work across reruns. This helper produces one by hashing the
|
|
55
|
+
* adapter id and a canonical serialization of the components dict (keys sorted, values verbatim).
|
|
58
56
|
*
|
|
59
|
-
* Output format: `<
|
|
60
|
-
*
|
|
61
|
-
*
|
|
57
|
+
* Output format: `<adapterID>-<first-12-hex-chars-of-sha256>`. 48 bits of entropy is enough for ~17M rows per adapter
|
|
58
|
+
* before the expected collision count exceeds 1 (birthday paradox); adapters with more rows should extend the prefix
|
|
59
|
+
* length.
|
|
62
60
|
*/
|
|
63
|
-
export function
|
|
61
|
+
export function stableSourceID(adapterID, components) {
|
|
64
62
|
const sortedKeys = Object.keys(components).sort();
|
|
65
63
|
const payload = sortedKeys.map((k) => `${k}=${components[k] ?? ""}`).join("\x1f");
|
|
66
|
-
const digest = createHash("sha256").update(
|
|
67
|
-
return `${
|
|
64
|
+
const digest = createHash("sha256").update(adapterID).update("\x1e").update(payload).digest("hex");
|
|
65
|
+
return `${adapterID}-${digest.slice(0, 12)}`;
|
|
68
66
|
}
|
|
69
67
|
/**
|
|
70
68
|
* Canonical dedup key for a row.
|
|
71
69
|
*
|
|
72
|
-
* Two rows that share this key are treated as duplicates and only the first wins. The key is built
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
* multiple adapters is recognized as a duplicate.
|
|
70
|
+
* Two rows that share this key are treated as duplicates and only the first wins. The key is built from `country`, the
|
|
71
|
+
* sorted `components` dict, and a normalized `raw` (lower-cased, whitespace collapsed). License and provenance fields
|
|
72
|
+
* are intentionally excluded so the same address from multiple adapters is recognized as a duplicate.
|
|
76
73
|
*
|
|
77
|
-
* Synthetic rows are never deduplicated against natural rows: `synth.method` is folded into the key
|
|
78
|
-
*
|
|
74
|
+
* Synthetic rows are never deduplicated against natural rows: `synth.method` is folded into the key when present,
|
|
75
|
+
* ensuring each augmentation variant survives.
|
|
79
76
|
*/
|
|
80
77
|
export function canonicalDedupKey(row) {
|
|
81
78
|
const sortedKeys = Object.keys(row.components).sort();
|
package/out/src/adapter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,UAAU,EAAa,MAAM,aAAa,CAAA;AA2BnD;;;GAGG;AACH,MAAM,OAAO,uBAAuB;IACnC,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAA;IAExC,QAAQ,CAAC,OAAsB;QAC9B,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAA;QACxF,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;IACpC,CAAC;IAED,GAAG,CAAC,EAAU;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC1B,CAAC;IAED,IAAI;QACH,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;IACvC,CAAC;IAED,GAAG;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;IACrC,CAAC;CACD;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,uBAAuB,EAAE,CAAA;AAEnE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,UAAiD;IAClG,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAoB,CAAA;IACnE,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACjF,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAElG,OAAO,GAAG,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAA;AAC7C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAiB;IAClD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,EAAoB,CAAA;IACvE,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACtF,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;IACjE,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAE5D,OAAO,GAAG,GAAG,CAAC,OAAO,OAAO,OAAO,OAAO,QAAQ,GAAG,SAAS,EAAE,CAAA;AACjE,CAAC;AAcD,gDAAgD;AAChD,MAAM,UAAU,eAAe;IAC9B,MAAM,CAAC,GAAS,UAAU,CAAC,QAAQ,CAAC,CAAA;IACpC,IAAI,SAAS,GAAG,KAAK,CAAA;IACrB,IAAI,SAAS,GAAG,EAAE,CAAA;IAElB,OAAO;QACN,MAAM,CAAC,KAAK;YACX,IAAI,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;YACjF,CAAC,CAAC,MAAM,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;QACpD,CAAC;QACD,MAAM;YACL,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChB,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBAC3B,SAAS,GAAG,IAAI,CAAA;YACjB,CAAC;YAED,OAAO,SAAS,CAAA;QACjB,CAAC;KACD,CAAA;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/adapters/ban/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/adapters/ban/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAQH,OAAO,KAAK,EAAgC,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAGjF,eAAO,MAAM,cAAc,QAAQ,CAAA;AAiDnC,wBAAgB,gBAAgB,IAAI,aAAa,CAkFhD;AAED,eAAO,MAAM,UAAU,eAAqB,CAAA"}
|
|
@@ -29,15 +29,15 @@
|
|
|
29
29
|
* sits in memory. Honors `opts.limit` for fixture / smoke runs, `opts.signal` for cancellation,
|
|
30
30
|
* and `opts.country` for a self-consistency check (errors if country !== FR).
|
|
31
31
|
*/
|
|
32
|
-
import { parse as csvParse } from "csv-parse";
|
|
33
32
|
import { createReadStream } from "node:fs";
|
|
34
|
-
import {
|
|
33
|
+
import { parse as csvParse } from "csv-parse";
|
|
34
|
+
import { stableSourceID } from "../../adapter.js";
|
|
35
35
|
import { reconcileComponents } from "../../format.js";
|
|
36
36
|
import { decomposeFrStreet } from "./street-decompose.js";
|
|
37
37
|
export const BAN_ADAPTER_ID = "ban";
|
|
38
38
|
/**
|
|
39
|
-
* Compose `house_number` from `numero` + `rep`. BAN uses `rep` for repetition indices ("bis",
|
|
40
|
-
*
|
|
39
|
+
* Compose `house_number` from `numero` + `rep`. BAN uses `rep` for repetition indices ("bis", "ter", "quater") that
|
|
40
|
+
* follow the house number. Result: `"10 bis"`, `"45"`, etc.
|
|
41
41
|
*/
|
|
42
42
|
function composeHouseNumber(numero, rep) {
|
|
43
43
|
const n = numero.trim();
|
|
@@ -51,9 +51,9 @@ function composeHouseNumber(numero, rep) {
|
|
|
51
51
|
*
|
|
52
52
|
* "10 bis Avenue des Champs-Élysées, 75008 Paris" "45 Cours Lafayette, 69003 Lyon"
|
|
53
53
|
*
|
|
54
|
-
* FR convention puts postcode on the same line as the locality, comma-separated from the street.
|
|
55
|
-
*
|
|
56
|
-
*
|
|
54
|
+
* FR convention puts postcode on the same line as the locality, comma-separated from the street. The adapter renders
|
|
55
|
+
* that directly rather than relying on OpenCage's template — BAN already gives us the canonical FR strings; the
|
|
56
|
+
* template would round-trip identically.
|
|
57
57
|
*/
|
|
58
58
|
function composeRaw(house, street, postcode, locality) {
|
|
59
59
|
const parts = [];
|
|
@@ -115,16 +115,16 @@ export function createBanAdapter() {
|
|
|
115
115
|
const aligned = reconcileComponents(components, raw);
|
|
116
116
|
if (Object.keys(aligned).length === 0)
|
|
117
117
|
continue;
|
|
118
|
-
const
|
|
118
|
+
const sourceID = record.id?.trim()
|
|
119
119
|
? `${BAN_ADAPTER_ID}-${record.id.trim()}`
|
|
120
|
-
:
|
|
120
|
+
: stableSourceID(BAN_ADAPTER_ID, aligned);
|
|
121
121
|
yield {
|
|
122
122
|
raw,
|
|
123
123
|
components: aligned,
|
|
124
124
|
country: "FR",
|
|
125
125
|
locale: "fr-FR",
|
|
126
126
|
source: BAN_ADAPTER_ID,
|
|
127
|
-
source_id:
|
|
127
|
+
source_id: sourceID,
|
|
128
128
|
corpus_version: "",
|
|
129
129
|
license: "Licence Ouverte 2.0",
|
|
130
130
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/adapters/ban/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/adapters/ban/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,8 +21,8 @@ export interface DecomposedFrStreet {
|
|
|
21
21
|
/**
|
|
22
22
|
* Decompose a French street name into prefix (leading type word) and street name.
|
|
23
23
|
*
|
|
24
|
-
* If the first 1-2 tokens match a known street type (allowing for multi-word like "ancien chemin"),
|
|
25
|
-
*
|
|
24
|
+
* If the first 1-2 tokens match a known street type (allowing for multi-word like "ancien chemin"), they become the
|
|
25
|
+
* prefix. Returns `{ prefix: null, street: original }` if no match.
|
|
26
26
|
*/
|
|
27
27
|
export declare function decomposeFrStreet(fullname: string): DecomposedFrStreet;
|
|
28
28
|
//# sourceMappingURL=street-decompose.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"street-decompose.d.ts","sourceRoot":"","sources":["../../../../src/adapters/ban/street-decompose.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"street-decompose.d.ts","sourceRoot":"","sources":["../../../../src/adapters/ban/street-decompose.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AA0CH,MAAM,WAAW,kBAAkB;IAClC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;CACd;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,CA4BtE"}
|
|
@@ -50,8 +50,8 @@ const STREET_TYPES_FR = loadDictionary("street_types.txt");
|
|
|
50
50
|
/**
|
|
51
51
|
* Decompose a French street name into prefix (leading type word) and street name.
|
|
52
52
|
*
|
|
53
|
-
* If the first 1-2 tokens match a known street type (allowing for multi-word like "ancien chemin"),
|
|
54
|
-
*
|
|
53
|
+
* If the first 1-2 tokens match a known street type (allowing for multi-word like "ancien chemin"), they become the
|
|
54
|
+
* prefix. Returns `{ prefix: null, street: original }` if no match.
|
|
55
55
|
*/
|
|
56
56
|
export function decomposeFrStreet(fullname) {
|
|
57
57
|
const trimmed = fullname.trim();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"street-decompose.js","sourceRoot":"","sources":["../../../../src/adapters/ban/street-decompose.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AAEzD,SAAS,cAAc,CAAC,QAAgB;IACvC,MAAM,UAAU,GAAG;QAClB,OAAO,CAAC,SAAS,EAAE,iDAAiD,EAAE,QAAQ,CAAC;QAC/E,OAAO,CAAC,SAAS,EAAE,oDAAoD,EAAE,QAAQ,CAAC;QAClF,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,qCAAqC,EAAE,QAAQ,CAAC;KACvE,CAAA;
|
|
1
|
+
{"version":3,"file":"street-decompose.js","sourceRoot":"","sources":["../../../../src/adapters/ban/street-decompose.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,8 +44,8 @@ export declare function splitAddressPrimary(address: string): SplitAddress | nul
|
|
|
44
44
|
/**
|
|
45
45
|
* Combine `zip` + optional `zip_suffix` into the canonical USPS postcode surface form.
|
|
46
46
|
*
|
|
47
|
-
* NTIARecord doc is ambiguous about whether `zip_suffix` is the 4-digit extension alone or the full
|
|
48
|
-
*
|
|
47
|
+
* NTIARecord doc is ambiguous about whether `zip_suffix` is the 4-digit extension alone or the full ZIP+4 string. This
|
|
48
|
+
* handles both:
|
|
49
49
|
*
|
|
50
50
|
* - Bare 4-digit extension (`zip="94103"`, `zip_suffix="1234"`) → `"94103-1234"`
|
|
51
51
|
* - Already-joined form (`zip_suffix="94103-1234"`) → returned as-is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/adapters/fcc-bdc/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/adapters/fcc-bdc/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAMH,OAAO,KAAK,EAAgC,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEjF,eAAO,MAAM,kBAAkB,YAAY,CAAA;AAC3C,eAAO,MAAM,uBAAuB,kBAAkB,CAAA;AA0BtD,UAAU,YAAY;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAWxE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAWxE;AAED,uFAAuF;AACvF,wBAAgB,mBAAmB,IAAI,aAAa,CAwEnD;AAED,eAAO,MAAM,aAAa,eAAwB,CAAA"}
|
|
@@ -41,14 +41,14 @@ export const FCC_BDC_DEFAULT_LICENSE = "Public Domain";
|
|
|
41
41
|
/**
|
|
42
42
|
* Split `address_primary` into a `(house_number, street)` pair.
|
|
43
43
|
*
|
|
44
|
-
* BDC's `address_primary` follows USPS Publication 28 conventions but with hand-entry drift. The
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
44
|
+
* BDC's `address_primary` follows USPS Publication 28 conventions but with hand-entry drift. The canonical
|
|
45
|
+
* leading-digit prefix is the house number (`"123 Main St"`, `"6450 W Indian School Rd"`, even hyphenated forms `"40-12
|
|
46
|
+
* Bell Blvd"`). Anything that doesn't match the prefix shape (`"PO Box 1234"`, `"RR 2 Box 67"`, `"HC 1"`) is left as a
|
|
47
|
+
* single `street` value — the model sees the original surface form, and downstream classifiers/po-box handling can pick
|
|
48
|
+
* it up.
|
|
49
49
|
*
|
|
50
|
-
* The regex tolerates one trailing letter (`"123A Main St"`) and an optional hyphenated half
|
|
51
|
-
*
|
|
50
|
+
* The regex tolerates one trailing letter (`"123A Main St"`) and an optional hyphenated half (`"40-12"`) which is
|
|
51
|
+
* common in NYC + suburban garden-apartment numbering.
|
|
52
52
|
*/
|
|
53
53
|
const HOUSE_NUMBER_PREFIX = /^(\d+(?:-\d+)?[A-Za-z]?)\s+(.+)$/;
|
|
54
54
|
export function splitAddressPrimary(address) {
|
|
@@ -64,8 +64,8 @@ export function splitAddressPrimary(address) {
|
|
|
64
64
|
/**
|
|
65
65
|
* Combine `zip` + optional `zip_suffix` into the canonical USPS postcode surface form.
|
|
66
66
|
*
|
|
67
|
-
* NTIARecord doc is ambiguous about whether `zip_suffix` is the 4-digit extension alone or the full
|
|
68
|
-
*
|
|
67
|
+
* NTIARecord doc is ambiguous about whether `zip_suffix` is the 4-digit extension alone or the full ZIP+4 string. This
|
|
68
|
+
* handles both:
|
|
69
69
|
*
|
|
70
70
|
* - Bare 4-digit extension (`zip="94103"`, `zip_suffix="1234"`) → `"94103-1234"`
|
|
71
71
|
* - Already-joined form (`zip_suffix="94103-1234"`) → returned as-is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/adapters/fcc-bdc/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/adapters/fcc-bdc/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/adapters/geonames/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/adapters/geonames/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AASH,OAAO,KAAK,EAAgC,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEjF,eAAO,MAAM,mBAAmB,aAAa,CAAA;AAC7C,eAAO,MAAM,wBAAwB,cAAc,CAAA;AAmDnD,wBAAgB,qBAAqB,IAAI,aAAa,CAuFrD;AAED,eAAO,MAAM,eAAe,eAA0B,CAAA"}
|
|
@@ -27,10 +27,10 @@
|
|
|
27
27
|
*
|
|
28
28
|
* License: stamped `"CC-BY-4.0"` per row (GeoNames' terms); provenance is the `geonames-<id>` key.
|
|
29
29
|
*/
|
|
30
|
-
import { parse as csvParse } from "csv-parse";
|
|
31
30
|
import { createReadStream, existsSync, readFileSync } from "node:fs";
|
|
32
31
|
import { dirname, join } from "node:path";
|
|
33
|
-
import {
|
|
32
|
+
import { parse as csvParse } from "csv-parse";
|
|
33
|
+
import { stableSourceID } from "../../adapter.js";
|
|
34
34
|
import { reconcileComponents } from "../../format.js";
|
|
35
35
|
export const GEONAMES_ADAPTER_ID = "geonames";
|
|
36
36
|
export const GEONAMES_DEFAULT_LICENSE = "CC-BY-4.0";
|
|
@@ -135,15 +135,15 @@ export function createGeonamesAdapter() {
|
|
|
135
135
|
const aligned = reconcileComponents(v.comp, v.raw);
|
|
136
136
|
if (Object.keys(aligned).length === 0)
|
|
137
137
|
continue;
|
|
138
|
-
const
|
|
138
|
+
const sourceID = geonameid
|
|
139
139
|
? `${GEONAMES_ADAPTER_ID}-${geonameid}-${v.slot}`
|
|
140
|
-
:
|
|
140
|
+
: stableSourceID(GEONAMES_ADAPTER_ID, aligned);
|
|
141
141
|
yield {
|
|
142
142
|
raw: v.raw,
|
|
143
143
|
components: aligned,
|
|
144
144
|
country: cc,
|
|
145
145
|
source: GEONAMES_ADAPTER_ID,
|
|
146
|
-
source_id:
|
|
146
|
+
source_id: sourceID,
|
|
147
147
|
corpus_version: "",
|
|
148
148
|
license: GEONAMES_DEFAULT_LICENSE,
|
|
149
149
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/adapters/geonames/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/adapters/geonames/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/adapters/geonames-postal/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/adapters/geonames-postal/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAQH,OAAO,KAAK,EAAgC,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEjF,eAAO,MAAM,0BAA0B,oBAAoB,CAAA;AAC3D,eAAO,MAAM,+BAA+B,cAAc,CAAA;AAK1D,wBAAgB,2BAA2B,IAAI,aAAa,CAqE3D;AAED,eAAO,MAAM,qBAAqB,eAAgC,CAAA"}
|
|
@@ -22,9 +22,9 @@
|
|
|
22
22
|
* non-US countries; for US, the postcode-last sources are the right order. License:
|
|
23
23
|
* `"CC-BY-4.0"` per row (attribute "GeoNames").
|
|
24
24
|
*/
|
|
25
|
-
import { parse as csvParse } from "csv-parse";
|
|
26
25
|
import { createReadStream } from "node:fs";
|
|
27
|
-
import {
|
|
26
|
+
import { parse as csvParse } from "csv-parse";
|
|
27
|
+
import { stableSourceID } from "../../adapter.js";
|
|
28
28
|
import { reconcileComponents } from "../../format.js";
|
|
29
29
|
export const GEONAMES_POSTAL_ADAPTER_ID = "geonames-postal";
|
|
30
30
|
export const GEONAMES_POSTAL_DEFAULT_LICENSE = "CC-BY-4.0";
|
|
@@ -78,7 +78,7 @@ export function createGeonamesPostalAdapter() {
|
|
|
78
78
|
components: aligned,
|
|
79
79
|
country: cc,
|
|
80
80
|
source: GEONAMES_POSTAL_ADAPTER_ID,
|
|
81
|
-
source_id: `${
|
|
81
|
+
source_id: `${stableSourceID(GEONAMES_POSTAL_ADAPTER_ID, aligned)}-${v.slot}`,
|
|
82
82
|
corpus_version: "",
|
|
83
83
|
license: GEONAMES_POSTAL_DEFAULT_LICENSE,
|
|
84
84
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/adapters/geonames-postal/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/adapters/geonames-postal/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE1C,OAAO,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,WAAW,CAAA;AAE7C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAGrD,MAAM,CAAC,MAAM,0BAA0B,GAAG,iBAAiB,CAAA;AAC3D,MAAM,CAAC,MAAM,+BAA+B,GAAG,WAAW,CAAA;AAE1D,0CAA0C;AAC1C,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAW,CAAA;AAEzE,MAAM,UAAU,2BAA2B;IAC1C,OAAO;QACN,EAAE,EAAE,0BAA0B;QAC9B,cAAc,EAAE,+BAA+B;QAC/C,WAAW,EACV,8HAA8H;QAE/H,KAAK,CAAC,CAAC,IAAI,CAAC,IAAoB;YAC/B,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;YACrE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CACzB,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAC7F,CAAA;YAED,IAAI,OAAO,GAAG,CAAC,CAAA;YAEf,IAAI,CAAC;gBACJ,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,MAAiC,EAAE,CAAC;oBAC3D,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO;wBAAE,MAAK;oBAE/B,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,IAAI,IAAI,CAAC,KAAK;wBAAE,MAAK;oBAE5D,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;oBAE1C,IAAI,CAAC,EAAE;wBAAE,SAAQ;oBAEjB,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,KAAK,IAAI,CAAC,OAAO;wBAAE,SAAQ;oBAEjD,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;oBACjD,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;oBAE9C,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ;wBAAE,SAAQ;oBACpC,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;oBAEjD,oFAAoF;oBACpF,iFAAiF;oBACjF,MAAM,QAAQ,GAA2E;wBACxF,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,QAAQ,IAAI,QAAQ,EAAE,EAAE;qBAC5E,CAAA;oBAED,IAAI,MAAM,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;wBAC/D,QAAQ,CAAC,IAAI,CAAC;4BACb,IAAI,EAAE,KAAK;4BACX,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE;4BACpC,GAAG,EAAE,GAAG,QAAQ,IAAI,QAAQ,KAAK,MAAM,EAAE;yBACzC,CAAC,CAAA;oBACH,CAAC;oBAED,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;wBAC1B,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,IAAI,IAAI,CAAC,KAAK;4BAAE,MAAK;wBAC5D,MAAM,OAAO,GAAG,mBAAmB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA;wBAElD,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC;4BAAE,SAAQ;wBAC7C,MAAM;4BACL,GAAG,EAAE,CAAC,CAAC,GAAG;4BACV,UAAU,EAAE,OAAO;4BACnB,OAAO,EAAE,EAAE;4BACX,MAAM,EAAE,0BAA0B;4BAClC,SAAS,EAAE,GAAG,cAAc,CAAC,0BAA0B,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;4BAC7E,cAAc,EAAE,EAAE;4BAClB,OAAO,EAAE,+BAA+B;yBACxC,CAAA;wBACD,OAAO,EAAE,CAAA;oBACV,CAAC;gBACF,CAAC;YACF,CAAC;oBAAS,CAAC;gBACV,MAAM,CAAC,OAAO,EAAE,CAAA;YACjB,CAAC;QACF,CAAC;KACD,CAAA;AACF,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,2BAA2B,EAAE,CAAA"}
|
|
@@ -32,9 +32,9 @@ export declare const GNAF_ADAPTER_ID = "gnaf";
|
|
|
32
32
|
/** Open G-NAF is freely redistributable with attribution to Geoscape Australia (CC-BY-style). */
|
|
33
33
|
export declare const GNAF_DEFAULT_LICENSE = "CC-BY-4.0";
|
|
34
34
|
/**
|
|
35
|
-
* Build the G-NAF adapter. `inputPath` is the assembled component JSONL (see {@link ./assemble}); it
|
|
36
|
-
*
|
|
35
|
+
* Build the G-NAF adapter. `inputPath` is the assembled component JSONL (see {@link ./assemble}); it is country-pinned
|
|
36
|
+
* to AU regardless of `opts.country` (G-NAF is Australia-only).
|
|
37
37
|
*/
|
|
38
|
-
export declare function
|
|
38
|
+
export declare function createGNAFAdapter(): CorpusAdapter;
|
|
39
39
|
export declare const gnafAdapter: CorpusAdapter;
|
|
40
40
|
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/adapters/gnaf/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/adapters/gnaf/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAOH,OAAO,KAAK,EAAgC,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEjF,eAAO,MAAM,eAAe,SAAS,CAAA;AACrC,iGAAiG;AACjG,eAAO,MAAM,oBAAoB,cAAc,CAAA;AA4B/C;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,aAAa,CAoEjD;AAED,eAAO,MAAM,WAAW,eAAsB,CAAA"}
|
|
@@ -29,15 +29,15 @@
|
|
|
29
29
|
*/
|
|
30
30
|
import { createReadStream } from "node:fs";
|
|
31
31
|
import { createInterface } from "node:readline";
|
|
32
|
-
import {
|
|
32
|
+
import { stableSourceID } from "../../adapter.js";
|
|
33
33
|
import { reconcileComponents } from "../../format.js";
|
|
34
34
|
export const GNAF_ADAPTER_ID = "gnaf";
|
|
35
35
|
/** Open G-NAF is freely redistributable with attribution to Geoscape Australia (CC-BY-style). */
|
|
36
36
|
export const GNAF_DEFAULT_LICENSE = "CC-BY-4.0";
|
|
37
37
|
/**
|
|
38
|
-
* The address layouts an AU address actually arrives in. The model already handles
|
|
39
|
-
*
|
|
40
|
-
*
|
|
38
|
+
* The address layouts an AU address actually arrives in. The model already handles postcode-TRAILING (canonical); the
|
|
39
|
+
* two postcode-LEADING forms are the ones it fails, so they carry the lever. We keep the canonical form too so the
|
|
40
|
+
* retrain doesn't forget it.
|
|
41
41
|
*/
|
|
42
42
|
function renderOrders(c) {
|
|
43
43
|
const region = c.region ? ` ${c.region}` : "";
|
|
@@ -51,10 +51,10 @@ function renderOrders(c) {
|
|
|
51
51
|
];
|
|
52
52
|
}
|
|
53
53
|
/**
|
|
54
|
-
* Build the G-NAF adapter. `inputPath` is the assembled component JSONL (see {@link ./assemble}); it
|
|
55
|
-
*
|
|
54
|
+
* Build the G-NAF adapter. `inputPath` is the assembled component JSONL (see {@link ./assemble}); it is country-pinned
|
|
55
|
+
* to AU regardless of `opts.country` (G-NAF is Australia-only).
|
|
56
56
|
*/
|
|
57
|
-
export function
|
|
57
|
+
export function createGNAFAdapter() {
|
|
58
58
|
return {
|
|
59
59
|
id: GNAF_ADAPTER_ID,
|
|
60
60
|
defaultLicense: GNAF_DEFAULT_LICENSE,
|
|
@@ -63,7 +63,8 @@ export function createGnafAdapter() {
|
|
|
63
63
|
const stream = createReadStream(opts.inputPath, { encoding: "utf8" });
|
|
64
64
|
const lines = createInterface({ input: stream, crlfDelay: Infinity });
|
|
65
65
|
let emitted = 0;
|
|
66
|
-
let idx = 0;
|
|
66
|
+
let idx = 0;
|
|
67
|
+
// rotates the render order (i % 3), matching v1.9.1's rerender
|
|
67
68
|
try {
|
|
68
69
|
for await (const line of lines) {
|
|
69
70
|
if (opts.signal?.aborted)
|
|
@@ -104,7 +105,7 @@ export function createGnafAdapter() {
|
|
|
104
105
|
country: "AU",
|
|
105
106
|
locale: "en-AU",
|
|
106
107
|
source: GNAF_ADAPTER_ID,
|
|
107
|
-
source_id: `${
|
|
108
|
+
source_id: `${stableSourceID(GNAF_ADAPTER_ID, aligned)}-o${order}`,
|
|
108
109
|
corpus_version: "",
|
|
109
110
|
license: GNAF_DEFAULT_LICENSE,
|
|
110
111
|
};
|
|
@@ -118,5 +119,5 @@ export function createGnafAdapter() {
|
|
|
118
119
|
},
|
|
119
120
|
};
|
|
120
121
|
}
|
|
121
|
-
export const gnafAdapter =
|
|
122
|
+
export const gnafAdapter = createGNAFAdapter();
|
|
122
123
|
//# sourceMappingURL=adapter.js.map
|