@mailwoman/corpus 8.6.0 → 9.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/README.md +1 -1
- package/out/src/adapter.d.ts +41 -0
- package/out/src/adapter.d.ts.map +1 -1
- package/out/src/adapter.js +46 -1
- package/out/src/adapter.js.map +1 -1
- package/out/src/adapters/ban/adapter.d.ts +4 -3
- package/out/src/adapters/ban/adapter.d.ts.map +1 -1
- package/out/src/adapters/ban/adapter.js +60 -67
- package/out/src/adapters/ban/adapter.js.map +1 -1
- package/out/src/adapters/ban/street-decompose.d.ts.map +1 -1
- package/out/src/adapters/ban/street-decompose.js +18 -25
- package/out/src/adapters/ban/street-decompose.js.map +1 -1
- package/out/src/adapters/fcc-bdc/adapter.d.ts +0 -6
- package/out/src/adapters/fcc-bdc/adapter.d.ts.map +1 -1
- package/out/src/adapters/fcc-bdc/adapter.js +2 -24
- 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 +70 -76
- 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 +44 -49
- package/out/src/adapters/geonames-postal/adapter.js.map +1 -1
- package/out/src/adapters/gnaf/adapter.d.ts.map +1 -1
- package/out/src/adapters/gnaf/adapter.js +4 -7
- package/out/src/adapters/gnaf/adapter.js.map +1 -1
- package/out/src/adapters/gnaf/assemble.d.ts.map +1 -1
- package/out/src/adapters/gnaf/assemble.js +6 -11
- package/out/src/adapters/gnaf/assemble.js.map +1 -1
- package/out/src/adapters/openaddresses/adapter.d.ts.map +1 -1
- package/out/src/adapters/openaddresses/adapter.js +2 -7
- 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 +3 -7
- package/out/src/adapters/overture/adapter.js.map +1 -1
- package/out/src/adapters/state-hi-schools/adapter.d.ts.map +1 -1
- package/out/src/adapters/state-hi-schools/adapter.js +55 -73
- package/out/src/adapters/state-hi-schools/adapter.js.map +1 -1
- package/out/src/adapters/state-ia-contractors/adapter.d.ts.map +1 -1
- package/out/src/adapters/state-ia-contractors/adapter.js +58 -76
- package/out/src/adapters/state-ia-contractors/adapter.js.map +1 -1
- package/out/src/adapters/state-ny-notaries/adapter.d.ts.map +1 -1
- package/out/src/adapters/state-ny-notaries/adapter.js +67 -85
- 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 +69 -87
- package/out/src/adapters/state-tx-notaries/adapter.js.map +1 -1
- package/out/src/adapters/synth-po-box/adapter.d.ts.map +1 -1
- package/out/src/adapters/synth-po-box/adapter.js +7 -15
- package/out/src/adapters/synth-po-box/adapter.js.map +1 -1
- package/out/src/adapters/tiger/street-decompose.d.ts.map +1 -1
- package/out/src/adapters/tiger/street-decompose.js +18 -27
- package/out/src/adapters/tiger/street-decompose.js.map +1 -1
- package/out/src/adapters/usgov-hrsa-fqhc/adapter.d.ts +3 -3
- package/out/src/adapters/usgov-hrsa-fqhc/adapter.d.ts.map +1 -1
- package/out/src/adapters/usgov-hrsa-fqhc/adapter.js +62 -80
- package/out/src/adapters/usgov-hrsa-fqhc/adapter.js.map +1 -1
- package/out/src/adapters/usgov-imls-pls/adapter.d.ts.map +1 -1
- package/out/src/adapters/usgov-imls-pls/adapter.js +60 -82
- 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 +58 -65
- package/out/src/adapters/usgov-irs-bmf/adapter.js.map +1 -1
- package/out/src/adapters/usgov-nad/adapter.d.ts.map +1 -1
- package/out/src/adapters/usgov-nad/adapter.js +5 -8
- package/out/src/adapters/usgov-nad/adapter.js.map +1 -1
- package/out/src/adapters/usgov-nppes/adapter.d.ts.map +1 -1
- package/out/src/adapters/usgov-nppes/adapter.js +58 -76
- 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 +51 -71
- package/out/src/adapters/usgov-samhsa-treatment-locator/adapter.js.map +1 -1
- package/out/src/adapters/wof-admin-jp/adapter.d.ts.map +1 -1
- package/out/src/adapters/wof-admin-jp/adapter.js +24 -6
- package/out/src/adapters/wof-admin-jp/adapter.js.map +1 -1
- package/out/src/build.d.ts.map +1 -1
- package/out/src/build.js +2 -1
- package/out/src/build.js.map +1 -1
- package/out/src/golden.d.ts +5 -0
- package/out/src/golden.d.ts.map +1 -1
- package/out/src/golden.js +23 -9
- package/out/src/golden.js.map +1 -1
- package/out/src/parquet-wrapper/reader.d.ts +8 -0
- package/out/src/parquet-wrapper/reader.d.ts.map +1 -1
- package/out/src/parquet-wrapper/reader.js +16 -0
- package/out/src/parquet-wrapper/reader.js.map +1 -1
- package/out/src/parquet-wrapper/schema.d.ts +4 -0
- package/out/src/parquet-wrapper/schema.d.ts.map +1 -1
- package/out/src/parquet-wrapper/schema.js.map +1 -1
- package/out/src/parquet.d.ts.map +1 -1
- package/out/src/parquet.js +2 -13
- package/out/src/parquet.js.map +1 -1
- package/out/src/shard-recipes/anchor-absorption.d.ts.map +1 -1
- package/out/src/shard-recipes/anchor-absorption.js +2 -1
- package/out/src/shard-recipes/anchor-absorption.js.map +1 -1
- package/out/src/shard-recipes/country-balanced.d.ts.map +1 -1
- package/out/src/shard-recipes/country-balanced.js +68 -60
- package/out/src/shard-recipes/country-balanced.js.map +1 -1
- package/out/src/shard-recipes/fr-fragment.d.ts.map +1 -1
- package/out/src/shard-recipes/fr-fragment.js +8 -5
- package/out/src/shard-recipes/fr-fragment.js.map +1 -1
- package/out/src/shard-recipes/fr-order.d.ts.map +1 -1
- package/out/src/shard-recipes/fr-order.js +14 -58
- package/out/src/shard-recipes/fr-order.js.map +1 -1
- package/out/src/shard-recipes/german.d.ts.map +1 -1
- package/out/src/shard-recipes/german.js +11 -58
- package/out/src/shard-recipes/german.js.map +1 -1
- package/out/src/shard-recipes/index.d.ts.map +1 -1
- package/out/src/shard-recipes/index.js +2 -0
- package/out/src/shard-recipes/index.js.map +1 -1
- package/out/src/shard-recipes/intersection.d.ts +2 -2
- package/out/src/shard-recipes/intersection.d.ts.map +1 -1
- package/out/src/shard-recipes/intersection.js +24 -62
- package/out/src/shard-recipes/intersection.js.map +1 -1
- package/out/src/shard-recipes/locale.d.ts.map +1 -1
- package/out/src/shard-recipes/locale.js +14 -16
- package/out/src/shard-recipes/locale.js.map +1 -1
- package/out/src/shard-recipes/no-fragment.d.ts.map +1 -1
- package/out/src/shard-recipes/no-fragment.js +8 -5
- package/out/src/shard-recipes/no-fragment.js.map +1 -1
- package/out/src/shard-recipes/no-street-led.d.ts.map +1 -1
- package/out/src/shard-recipes/no-street-led.js +8 -5
- package/out/src/shard-recipes/no-street-led.js.map +1 -1
- package/out/src/shard-recipes/po-box-cedex.d.ts +3 -3
- package/out/src/shard-recipes/po-box-cedex.d.ts.map +1 -1
- package/out/src/shard-recipes/po-box-cedex.js +51 -94
- package/out/src/shard-recipes/po-box-cedex.js.map +1 -1
- package/out/src/shard-recipes/scaffold.d.ts +59 -9
- package/out/src/shard-recipes/scaffold.d.ts.map +1 -1
- package/out/src/shard-recipes/scaffold.js +51 -30
- package/out/src/shard-recipes/scaffold.js.map +1 -1
- package/out/src/shard-recipes/street-affix.d.ts.map +1 -1
- package/out/src/shard-recipes/street-affix.js +56 -82
- package/out/src/shard-recipes/street-affix.js.map +1 -1
- package/out/src/shard-recipes/sub-venue-sources.d.ts +231 -0
- package/out/src/shard-recipes/sub-venue-sources.d.ts.map +1 -0
- package/out/src/shard-recipes/sub-venue-sources.js +669 -0
- package/out/src/shard-recipes/sub-venue-sources.js.map +1 -0
- package/out/src/shard-recipes/sub-venue.d.ts +269 -0
- package/out/src/shard-recipes/sub-venue.d.ts.map +1 -0
- package/out/src/shard-recipes/sub-venue.js +709 -0
- package/out/src/shard-recipes/sub-venue.js.map +1 -0
- package/out/src/shard-recipes/unit.d.ts +1 -1
- package/out/src/shard-recipes/unit.d.ts.map +1 -1
- package/out/src/shard-recipes/unit.js +22 -64
- package/out/src/shard-recipes/unit.js.map +1 -1
- package/out/src/split.d.ts +7 -0
- package/out/src/split.d.ts.map +1 -1
- package/out/src/split.js +7 -0
- package/out/src/split.js.map +1 -1
- package/out/src/synthesize.d.ts.map +1 -1
- package/out/src/synthesize.js +1 -12
- package/out/src/synthesize.js.map +1 -1
- package/out/src/tools/align-shard.d.ts.map +1 -1
- package/out/src/tools/align-shard.js +3 -7
- package/out/src/tools/align-shard.js.map +1 -1
- package/out/src/tools/audit.d.ts.map +1 -1
- package/out/src/tools/audit.js +4 -4
- package/out/src/tools/audit.js.map +1 -1
- package/out/src/tools/corpus-stats.d.ts +2 -2
- package/out/src/tools/corpus-stats.d.ts.map +1 -1
- package/out/src/tools/corpus-stats.js +18 -31
- package/out/src/tools/corpus-stats.js.map +1 -1
- package/out/src/tools/fetch/download.d.ts.map +1 -1
- package/out/src/tools/fetch/download.js +5 -6
- package/out/src/tools/fetch/download.js.map +1 -1
- package/out/src/tools/fetch/imls-pls.d.ts.map +1 -1
- package/out/src/tools/fetch/imls-pls.js +2 -2
- package/out/src/tools/fetch/imls-pls.js.map +1 -1
- package/out/src/tools/fetch/index.d.ts +14 -1
- package/out/src/tools/fetch/index.d.ts.map +1 -1
- package/out/src/tools/fetch/index.js +14 -1
- package/out/src/tools/fetch/index.js.map +1 -1
- package/out/src/tools/fetch/nad.d.ts +1 -1
- package/out/src/tools/fetch/nad.js +1 -1
- package/out/src/tools/fetch/nppes.d.ts.map +1 -1
- package/out/src/tools/fetch/nppes.js +2 -1
- package/out/src/tools/fetch/nppes.js.map +1 -1
- package/out/src/tools/fetch/openaddresses.d.ts +1 -1
- package/out/src/tools/fetch/openaddresses.js +1 -1
- package/out/src/tools/fetch/ourairports.d.ts +45 -0
- package/out/src/tools/fetch/ourairports.d.ts.map +1 -0
- package/out/src/tools/fetch/ourairports.js +123 -0
- package/out/src/tools/fetch/ourairports.js.map +1 -0
- package/out/src/tools/fetch/wikidata-subvenue.d.ts +171 -0
- package/out/src/tools/fetch/wikidata-subvenue.d.ts.map +1 -0
- package/out/src/tools/fetch/wikidata-subvenue.js +275 -0
- package/out/src/tools/fetch/wikidata-subvenue.js.map +1 -0
- package/out/src/tools/golden-expand.d.ts.map +1 -1
- package/out/src/tools/golden-expand.js +18 -16
- package/out/src/tools/golden-expand.js.map +1 -1
- package/out/src/tools/golden-promote.d.ts.map +1 -1
- package/out/src/tools/golden-promote.js +12 -6
- package/out/src/tools/golden-promote.js.map +1 -1
- package/out/src/tools/golden-relabel-street.d.ts +196 -0
- package/out/src/tools/golden-relabel-street.d.ts.map +1 -0
- package/out/src/tools/golden-relabel-street.js +513 -0
- package/out/src/tools/golden-relabel-street.js.map +1 -0
- package/out/src/tools/index.d.ts +4 -0
- package/out/src/tools/index.d.ts.map +1 -1
- package/out/src/tools/index.js +4 -0
- package/out/src/tools/index.js.map +1 -1
- package/out/src/tools/jsonl-to-parquet.d.ts.map +1 -1
- package/out/src/tools/jsonl-to-parquet.js +3 -2
- package/out/src/tools/jsonl-to-parquet.js.map +1 -1
- package/out/src/tools/lint-shard-vocab.d.ts.map +1 -1
- package/out/src/tools/lint-shard-vocab.js +3 -2
- package/out/src/tools/lint-shard-vocab.js.map +1 -1
- package/out/src/tools/lint-shard.d.ts +3 -3
- package/out/src/tools/lint-shard.d.ts.map +1 -1
- package/out/src/tools/lint-shard.js +23 -32
- package/out/src/tools/lint-shard.js.map +1 -1
- package/out/src/tools/overlay-manifest.d.ts.map +1 -1
- package/out/src/tools/overlay-manifest.js +2 -1
- package/out/src/tools/overlay-manifest.js.map +1 -1
- package/out/src/tools/overture-subvenue.d.ts +112 -0
- package/out/src/tools/overture-subvenue.d.ts.map +1 -0
- package/out/src/tools/overture-subvenue.js +144 -0
- package/out/src/tools/overture-subvenue.js.map +1 -0
- package/out/src/tools/shard-kryptonite.d.ts +1 -1
- package/out/src/tools/shard-kryptonite.d.ts.map +1 -1
- package/out/src/tools/shard-kryptonite.js +5 -4
- package/out/src/tools/shard-kryptonite.js.map +1 -1
- package/out/src/tools/shard-translit.d.ts +6 -3
- package/out/src/tools/shard-translit.d.ts.map +1 -1
- package/out/src/tools/shard-translit.js +8 -6
- package/out/src/tools/shard-translit.js.map +1 -1
- package/out/src/tools/sub-venue-lexicon.d.ts +507 -0
- package/out/src/tools/sub-venue-lexicon.d.ts.map +1 -0
- package/out/src/tools/sub-venue-lexicon.js +817 -0
- package/out/src/tools/sub-venue-lexicon.js.map +1 -0
- package/out/src/tools/sub-venue-promotions.d.ts +94 -0
- package/out/src/tools/sub-venue-promotions.d.ts.map +1 -0
- package/out/src/tools/sub-venue-promotions.js +266 -0
- package/out/src/tools/sub-venue-promotions.js.map +1 -0
- package/out/src/wof-json.d.ts +2 -2
- package/out/src/wof-json.d.ts.map +1 -1
- package/out/src/wof-json.js +5 -8
- package/out/src/wof-json.js.map +1 -1
- package/package.json +8 -8
- package/src/adapter.ts +58 -1
- package/src/adapters/ban/adapter.ts +55 -65
- package/src/adapters/ban/street-decompose.ts +17 -25
- package/src/adapters/fcc-bdc/adapter.ts +2 -33
- package/src/adapters/geonames/adapter.ts +64 -72
- package/src/adapters/geonames-postal/adapter.ts +42 -50
- package/src/adapters/gnaf/adapter.ts +4 -7
- package/src/adapters/gnaf/assemble.ts +6 -10
- package/src/adapters/openaddresses/adapter.ts +2 -7
- package/src/adapters/overture/adapter.ts +3 -6
- package/src/adapters/state-hi-schools/adapter.ts +50 -73
- package/src/adapters/state-ia-contractors/adapter.ts +52 -76
- package/src/adapters/state-ny-notaries/adapter.ts +61 -85
- package/src/adapters/state-tx-notaries/adapter.ts +60 -84
- package/src/adapters/synth-po-box/adapter.ts +7 -17
- package/src/adapters/tiger/street-decompose.ts +21 -31
- package/src/adapters/usgov-hrsa-fqhc/adapter.ts +61 -84
- package/src/adapters/usgov-imls-pls/adapter.ts +54 -82
- package/src/adapters/usgov-irs-bmf/adapter.ts +53 -63
- package/src/adapters/usgov-nad/adapter.ts +5 -8
- package/src/adapters/usgov-nppes/adapter.ts +51 -75
- package/src/adapters/usgov-samhsa-treatment-locator/adapter.ts +45 -71
- package/src/adapters/wof-admin-jp/adapter.ts +34 -8
- package/src/build.ts +2 -1
- package/src/golden.ts +24 -9
- package/src/parquet-wrapper/reader.ts +19 -0
- package/src/parquet-wrapper/schema.ts +4 -0
- package/src/parquet.ts +3 -16
- package/src/shard-recipes/anchor-absorption.ts +2 -1
- package/src/shard-recipes/country-balanced.ts +69 -70
- package/src/shard-recipes/fr-fragment.ts +10 -7
- package/src/shard-recipes/fr-order.ts +13 -63
- package/src/shard-recipes/german.ts +12 -65
- package/src/shard-recipes/index.ts +2 -0
- package/src/shard-recipes/intersection.ts +32 -60
- package/src/shard-recipes/locale.ts +14 -16
- package/src/shard-recipes/no-fragment.ts +10 -7
- package/src/shard-recipes/no-street-led.ts +10 -7
- package/src/shard-recipes/po-box-cedex.ts +68 -119
- package/src/shard-recipes/scaffold.ts +82 -28
- package/src/shard-recipes/street-affix.ts +58 -95
- package/src/shard-recipes/sub-venue-sources.ts +895 -0
- package/src/shard-recipes/sub-venue.ts +982 -0
- package/src/shard-recipes/unit.ts +22 -70
- package/src/split.ts +7 -0
- package/src/synthesize.ts +1 -15
- package/src/tools/align-shard.ts +3 -6
- package/src/tools/audit.ts +6 -5
- package/src/tools/corpus-stats.ts +25 -33
- package/src/tools/fetch/download.ts +7 -5
- package/src/tools/fetch/imls-pls.ts +2 -2
- package/src/tools/fetch/index.ts +14 -1
- package/src/tools/fetch/nad.ts +1 -1
- package/src/tools/fetch/nppes.ts +2 -1
- package/src/tools/fetch/openaddresses.ts +1 -1
- package/src/tools/fetch/ourairports.ts +166 -0
- package/src/tools/fetch/wikidata-subvenue.ts +386 -0
- package/src/tools/golden-expand.ts +18 -13
- package/src/tools/golden-promote.ts +15 -6
- package/src/tools/golden-relabel-street.ts +748 -0
- package/src/tools/index.ts +4 -0
- package/src/tools/jsonl-to-parquet.ts +3 -2
- package/src/tools/lint-shard-vocab.ts +3 -2
- package/src/tools/lint-shard.ts +33 -36
- package/src/tools/overlay-manifest.ts +2 -1
- package/src/tools/overture-subvenue.ts +215 -0
- package/src/tools/shard-kryptonite.ts +5 -4
- package/src/tools/shard-translit.ts +12 -7
- package/src/tools/sub-venue-lexicon.ts +1250 -0
- package/src/tools/sub-venue-promotions.ts +330 -0
- package/src/wof-json.ts +5 -8
|
@@ -28,9 +28,8 @@
|
|
|
28
28
|
*
|
|
29
29
|
* License: stamped `"Public Domain"` per Hawaii state government open-data terms.
|
|
30
30
|
*/
|
|
31
|
-
import {
|
|
32
|
-
import {
|
|
33
|
-
import { stableSourceID } from "../../adapter.js";
|
|
31
|
+
import { CSVSpliterator } from "spliterator";
|
|
32
|
+
import { splitStreetLine, stableSourceID } from "../../adapter.js";
|
|
34
33
|
import { lookupStateAbbreviation } from "../../codex/us-fips-state.js";
|
|
35
34
|
import { reconcileComponents } from "../../format.js";
|
|
36
35
|
/**
|
|
@@ -43,17 +42,7 @@ export const STATE_HI_SCHOOLS_ADAPTER_ID = "state-hi-schools";
|
|
|
43
42
|
* than having to look them up.
|
|
44
43
|
*/
|
|
45
44
|
export const STATE_HI_SCHOOLS_DEFAULT_LICENSE = "Public Domain";
|
|
46
|
-
const HOUSE_NUMBER_PREFIX = /^(\d+(?:-\d+)?[A-Za-z]?)\s+(.+)$/;
|
|
47
45
|
const HI_STATE_ABBR = "HI";
|
|
48
|
-
function splitAddress(address) {
|
|
49
|
-
const trimmed = address.trim();
|
|
50
|
-
if (!trimmed)
|
|
51
|
-
return null;
|
|
52
|
-
const m = HOUSE_NUMBER_PREFIX.exec(trimmed);
|
|
53
|
-
if (m)
|
|
54
|
-
return { house_number: m[1], street: m[2].trim() };
|
|
55
|
-
return { street: trimmed };
|
|
56
|
-
}
|
|
57
46
|
function normalizeZip(raw) {
|
|
58
47
|
const trimmed = raw.trim();
|
|
59
48
|
if (!trimmed)
|
|
@@ -74,71 +63,64 @@ export function createStateHiSchoolsAdapter() {
|
|
|
74
63
|
if (opts.country && opts.country !== "US") {
|
|
75
64
|
throw new Error(`state-hi-schools adapter: only US supported, got country=${opts.country}`);
|
|
76
65
|
}
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
relax_column_count: true,
|
|
83
|
-
}));
|
|
66
|
+
const rows = CSVSpliterator.fromAsync(opts.inputPath, {
|
|
67
|
+
mode: "object",
|
|
68
|
+
normalizeKeys: false,
|
|
69
|
+
enableQuoteHandling: true,
|
|
70
|
+
});
|
|
84
71
|
const state = lookupStateAbbreviation(HI_STATE_ABBR);
|
|
85
72
|
if (!state) {
|
|
86
73
|
throw new Error(`state-hi-schools adapter: HI not found in state codex (corpus bug)`);
|
|
87
74
|
}
|
|
88
75
|
let emitted = 0;
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
emitted++;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
finally {
|
|
141
|
-
stream.destroy();
|
|
76
|
+
for await (const record of rows) {
|
|
77
|
+
if (opts.signal?.aborted)
|
|
78
|
+
break;
|
|
79
|
+
if (opts.limit !== undefined && emitted >= opts.limit)
|
|
80
|
+
break;
|
|
81
|
+
const name = (record.name ?? "").trim();
|
|
82
|
+
const address = (record.address ?? "").trim();
|
|
83
|
+
const city = (record.city ?? "").trim();
|
|
84
|
+
const zip = normalizeZip(record.zip ?? "");
|
|
85
|
+
if (!name || !address || !city || !zip)
|
|
86
|
+
continue;
|
|
87
|
+
const split = splitStreetLine(address);
|
|
88
|
+
if (!split)
|
|
89
|
+
continue;
|
|
90
|
+
const components = {
|
|
91
|
+
venue: name,
|
|
92
|
+
...(split.house_number ? { house_number: split.house_number } : {}),
|
|
93
|
+
street: split.street,
|
|
94
|
+
locality: city,
|
|
95
|
+
region: state.abbreviation,
|
|
96
|
+
postcode: zip,
|
|
97
|
+
};
|
|
98
|
+
const streetPart = [split.house_number, split.street].filter(Boolean).join(" ").trim();
|
|
99
|
+
const raw = [
|
|
100
|
+
name,
|
|
101
|
+
streetPart,
|
|
102
|
+
[city, [HI_STATE_ABBR, zip].filter(Boolean).join(" ")].filter(Boolean).join(", "),
|
|
103
|
+
]
|
|
104
|
+
.filter(Boolean)
|
|
105
|
+
.join(", ");
|
|
106
|
+
const aligned = reconcileComponents(components, raw);
|
|
107
|
+
if (Object.keys(aligned).length <= 2)
|
|
108
|
+
continue;
|
|
109
|
+
const code = (record.code ?? "").toString().trim();
|
|
110
|
+
const sourceID = code
|
|
111
|
+
? `${STATE_HI_SCHOOLS_ADAPTER_ID}-${code}`
|
|
112
|
+
: stableSourceID(STATE_HI_SCHOOLS_ADAPTER_ID, aligned);
|
|
113
|
+
yield {
|
|
114
|
+
raw,
|
|
115
|
+
components: aligned,
|
|
116
|
+
country: "US",
|
|
117
|
+
locale: "en-US",
|
|
118
|
+
source: STATE_HI_SCHOOLS_ADAPTER_ID,
|
|
119
|
+
source_id: sourceID,
|
|
120
|
+
corpus_version: "",
|
|
121
|
+
license: STATE_HI_SCHOOLS_DEFAULT_LICENSE,
|
|
122
|
+
};
|
|
123
|
+
emitted++;
|
|
142
124
|
}
|
|
143
125
|
},
|
|
144
126
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/adapters/state-hi-schools/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/adapters/state-hi-schools/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAGrD;;;GAGG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,kBAAkB,CAAA;AAC7D;;;GAGG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,eAAe,CAAA;AAE/D,MAAM,aAAa,GAAG,IAAI,CAAA;AAU1B,SAAS,YAAY,CAAC,GAAW;IAChC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;IAE1B,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAA;IAEvB,uFAAuF;IACvF,wFAAwF;IACxF,2EAA2E;IAC3E,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,OAAO,EAAE,CAAA;IAEjD,OAAO,OAAO,CAAA;AACf,CAAC;AAED,MAAM,UAAU,2BAA2B;IAC1C,OAAO;QACN,EAAE,EAAE,2BAA2B;QAC/B,cAAc,EAAE,gCAAgC;QAChD,WAAW,EAAE,sGAAsG;QAEnH,KAAK,CAAC,CAAC,IAAI,CAAC,IAAoB;YAC/B,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;gBAC3C,MAAM,IAAI,KAAK,CAAC,4DAA4D,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;YAC5F,CAAC;YAED,MAAM,IAAI,GAAG,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE;gBACrD,IAAI,EAAE,QAAQ;gBACd,aAAa,EAAE,KAAK;gBACpB,mBAAmB,EAAE,IAAI;aACzB,CAAC,CAAA;YAEF,MAAM,KAAK,GAAG,uBAAuB,CAAC,aAAa,CAAC,CAAA;YAEpD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAA;YACtF,CAAC;YAED,IAAI,OAAO,GAAG,CAAC,CAAA;YAEf,IAAI,KAAK,EAAE,MAAM,MAAM,IAAI,IAAkC,EAAE,CAAC;gBAC/D,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO;oBAAE,MAAK;gBAE/B,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,IAAI,IAAI,CAAC,KAAK;oBAAE,MAAK;gBAE5D,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;gBACvC,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;gBAC7C,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;gBACvC,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAA;gBAE1C,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG;oBAAE,SAAQ;gBAEhD,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;gBAEtC,IAAI,CAAC,KAAK;oBAAE,SAAQ;gBAEpB,MAAM,UAAU,GAA+B;oBAC9C,KAAK,EAAE,IAAI;oBACX,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACnE,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,QAAQ,EAAE,IAAI;oBACd,MAAM,EAAE,KAAK,CAAC,YAAY;oBAC1B,QAAQ,EAAE,GAAG;iBACb,CAAA;gBAED,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;gBAEtF,MAAM,GAAG,GAAG;oBACX,IAAI;oBACJ,UAAU;oBACV,CAAC,IAAI,EAAE,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;iBACjF;qBACC,MAAM,CAAC,OAAO,CAAC;qBACf,IAAI,CAAC,IAAI,CAAC,CAAA;gBAEZ,MAAM,OAAO,GAAG,mBAAmB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;gBAEpD,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC;oBAAE,SAAQ;gBAE9C,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAA;gBAElD,MAAM,QAAQ,GAAG,IAAI;oBACpB,CAAC,CAAC,GAAG,2BAA2B,IAAI,IAAI,EAAE;oBAC1C,CAAC,CAAC,cAAc,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAA;gBAEvD,MAAM;oBACL,GAAG;oBACH,UAAU,EAAE,OAAO;oBACnB,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,OAAO;oBACf,MAAM,EAAE,2BAA2B;oBACnC,SAAS,EAAE,QAAQ;oBACnB,cAAc,EAAE,EAAE;oBAClB,OAAO,EAAE,gCAAgC;iBACzC,CAAA;gBAED,OAAO,EAAE,CAAA;YACV,CAAC;QACF,CAAC;KACD,CAAA;AACF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,2BAA2B,EAAE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/adapters/state-ia-contractors/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/adapters/state-ia-contractors/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,OAAO,KAAK,EAAgC,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEjF;;;GAGG;AACH,eAAO,MAAM,+BAA+B,yBAAyB,CAAA;AACrE;;;GAGG;AACH,eAAO,MAAM,oCAAoC,kBAAkB,CAAA;AAcnE,wBAAgB,+BAA+B,IAAI,aAAa,CAqF/D;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,eAAoC,CAAA"}
|
|
@@ -15,9 +15,8 @@
|
|
|
15
15
|
*
|
|
16
16
|
* License: stamped `"Public Domain"` per Iowa state government open-data terms.
|
|
17
17
|
*/
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import { stableSourceID } from "../../adapter.js";
|
|
18
|
+
import { CSVSpliterator } from "spliterator";
|
|
19
|
+
import { splitStreetLine, stableSourceID } from "../../adapter.js";
|
|
21
20
|
import { lookupStateAbbreviation } from "../../codex/us-fips-state.js";
|
|
22
21
|
import { reconcileComponents } from "../../format.js";
|
|
23
22
|
/**
|
|
@@ -30,16 +29,6 @@ export const STATE_IA_CONTRACTORS_ADAPTER_ID = "state-ia-contractors";
|
|
|
30
29
|
* than having to look them up.
|
|
31
30
|
*/
|
|
32
31
|
export const STATE_IA_CONTRACTORS_DEFAULT_LICENSE = "Public Domain";
|
|
33
|
-
const HOUSE_NUMBER_PREFIX = /^(\d+(?:-\d+)?[A-Za-z]?)\s+(.+)$/;
|
|
34
|
-
function splitAddress(address) {
|
|
35
|
-
const trimmed = address.trim();
|
|
36
|
-
if (!trimmed)
|
|
37
|
-
return null;
|
|
38
|
-
const m = HOUSE_NUMBER_PREFIX.exec(trimmed);
|
|
39
|
-
if (m)
|
|
40
|
-
return { house_number: m[1], street: m[2].trim() };
|
|
41
|
-
return { street: trimmed };
|
|
42
|
-
}
|
|
43
32
|
export function createStateIaContractorsAdapter() {
|
|
44
33
|
return {
|
|
45
34
|
id: STATE_IA_CONTRACTORS_ADAPTER_ID,
|
|
@@ -49,70 +38,63 @@ export function createStateIaContractorsAdapter() {
|
|
|
49
38
|
if (opts.country && opts.country !== "US") {
|
|
50
39
|
throw new Error(`state-ia-contractors adapter: only US supported, got country=${opts.country}`);
|
|
51
40
|
}
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
relax_column_count: true,
|
|
58
|
-
}));
|
|
41
|
+
const rows = CSVSpliterator.fromAsync(opts.inputPath, {
|
|
42
|
+
mode: "object",
|
|
43
|
+
normalizeKeys: false,
|
|
44
|
+
enableQuoteHandling: true,
|
|
45
|
+
});
|
|
59
46
|
let emitted = 0;
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
emitted++;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
finally {
|
|
115
|
-
stream.destroy();
|
|
47
|
+
for await (const record of rows) {
|
|
48
|
+
if (opts.signal?.aborted)
|
|
49
|
+
break;
|
|
50
|
+
if (opts.limit !== undefined && emitted >= opts.limit)
|
|
51
|
+
break;
|
|
52
|
+
const businessName = (record["Business Name"] ?? "").trim();
|
|
53
|
+
const address1 = (record["Address 1"] ?? "").trim();
|
|
54
|
+
const address2 = (record["Address 2"] ?? "").trim();
|
|
55
|
+
const city = (record.City ?? "").trim();
|
|
56
|
+
const stateAbbr = (record.State ?? "").trim();
|
|
57
|
+
const zip = (record["Zip Code"] ?? "").trim();
|
|
58
|
+
if (!city || !zip)
|
|
59
|
+
continue;
|
|
60
|
+
const state = lookupStateAbbreviation(stateAbbr);
|
|
61
|
+
if (!state)
|
|
62
|
+
continue;
|
|
63
|
+
const fullAddress = [address1, address2].filter(Boolean).join(" ");
|
|
64
|
+
const split = splitStreetLine(fullAddress);
|
|
65
|
+
if (!split)
|
|
66
|
+
continue;
|
|
67
|
+
const venue = businessName || undefined;
|
|
68
|
+
const components = {
|
|
69
|
+
...(venue ? { venue } : {}),
|
|
70
|
+
...(split.house_number ? { house_number: split.house_number } : {}),
|
|
71
|
+
street: split.street,
|
|
72
|
+
locality: city,
|
|
73
|
+
region: state.abbreviation,
|
|
74
|
+
postcode: zip,
|
|
75
|
+
};
|
|
76
|
+
const streetPart = [split.house_number, split.street].filter(Boolean).join(" ").trim();
|
|
77
|
+
const raw = [venue, streetPart, [city, [stateAbbr, zip].filter(Boolean).join(" ")].filter(Boolean).join(", ")]
|
|
78
|
+
.filter(Boolean)
|
|
79
|
+
.join(", ");
|
|
80
|
+
const aligned = reconcileComponents(components, raw);
|
|
81
|
+
if (Object.keys(aligned).length <= 2)
|
|
82
|
+
continue;
|
|
83
|
+
const regNum = (record["Registration #"] ?? "").trim();
|
|
84
|
+
const sourceID = regNum
|
|
85
|
+
? `${STATE_IA_CONTRACTORS_ADAPTER_ID}-${regNum}`
|
|
86
|
+
: stableSourceID(STATE_IA_CONTRACTORS_ADAPTER_ID, aligned);
|
|
87
|
+
yield {
|
|
88
|
+
raw,
|
|
89
|
+
components: aligned,
|
|
90
|
+
country: "US",
|
|
91
|
+
locale: "en-US",
|
|
92
|
+
source: STATE_IA_CONTRACTORS_ADAPTER_ID,
|
|
93
|
+
source_id: sourceID,
|
|
94
|
+
corpus_version: "",
|
|
95
|
+
license: STATE_IA_CONTRACTORS_DEFAULT_LICENSE,
|
|
96
|
+
};
|
|
97
|
+
emitted++;
|
|
116
98
|
}
|
|
117
99
|
},
|
|
118
100
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/adapters/state-ia-contractors/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/adapters/state-ia-contractors/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/adapters/state-ny-notaries/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/adapters/state-ny-notaries/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH,OAAO,KAAK,EAAgC,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEjF;;;GAGG;AACH,eAAO,MAAM,4BAA4B,sBAAsB,CAAA;AAC/D;;;GAGG;AACH,eAAO,MAAM,iCAAiC,kBAAkB,CAAA;AA0BhE,wBAAgB,4BAA4B,IAAI,aAAa,CAgG5D;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,eAAiC,CAAA"}
|
|
@@ -13,9 +13,8 @@
|
|
|
13
13
|
*
|
|
14
14
|
* License: stamped `"Public Domain"` per New York state government open-data terms.
|
|
15
15
|
*/
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import { stableSourceID } from "../../adapter.js";
|
|
16
|
+
import { CSVSpliterator } from "spliterator";
|
|
17
|
+
import { splitStreetLine, stableSourceID } from "../../adapter.js";
|
|
19
18
|
import { lookupStateAbbreviation } from "../../codex/us-fips-state.js";
|
|
20
19
|
import { reconcileComponents } from "../../format.js";
|
|
21
20
|
/**
|
|
@@ -28,16 +27,6 @@ export const STATE_NY_NOTARIES_ADAPTER_ID = "state-ny-notaries";
|
|
|
28
27
|
* than having to look them up.
|
|
29
28
|
*/
|
|
30
29
|
export const STATE_NY_NOTARIES_DEFAULT_LICENSE = "Public Domain";
|
|
31
|
-
const HOUSE_NUMBER_PREFIX = /^(\d+(?:-\d+)?[A-Za-z]?)\s+(.+)$/;
|
|
32
|
-
function splitAddress(address) {
|
|
33
|
-
const trimmed = address.trim();
|
|
34
|
-
if (!trimmed)
|
|
35
|
-
return null;
|
|
36
|
-
const m = HOUSE_NUMBER_PREFIX.exec(trimmed);
|
|
37
|
-
if (m)
|
|
38
|
-
return { house_number: m[1], street: m[2].trim() };
|
|
39
|
-
return { street: trimmed };
|
|
40
|
-
}
|
|
41
30
|
const RAW_NY_COLUMNS = [
|
|
42
31
|
"Commission Holder Name",
|
|
43
32
|
"Commission Number (UID)",
|
|
@@ -58,80 +47,73 @@ export function createStateNyNotariesAdapter() {
|
|
|
58
47
|
if (opts.country && opts.country !== "US") {
|
|
59
48
|
throw new Error(`state-ny-notaries adapter: only US supported, got country=${opts.country}`);
|
|
60
49
|
}
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
relax_column_count: true,
|
|
67
|
-
}));
|
|
50
|
+
const rows = CSVSpliterator.fromAsync(opts.inputPath, {
|
|
51
|
+
mode: "object",
|
|
52
|
+
normalizeKeys: false,
|
|
53
|
+
enableQuoteHandling: true,
|
|
54
|
+
});
|
|
68
55
|
let emitted = 0;
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
record[key.trim()] = rawRecord[key] ?? "";
|
|
79
|
-
}
|
|
80
|
-
const holderName = (record["Commission Holder Name"] ?? "").trim();
|
|
81
|
-
const businessName = (record["Business Name (if available)"] ?? "").trim();
|
|
82
|
-
const address1 = (record["Business Address 1 (if available)"] ?? "").trim();
|
|
83
|
-
const address2 = (record["Business Address 2 (if available)"] ?? "").trim();
|
|
84
|
-
const city = (record["Business City (if available)"] ?? "").trim();
|
|
85
|
-
const stateAbbr = (record["Business State (if available)"] ?? "").trim();
|
|
86
|
-
const zip = (record["Business Zip (if available)"] ?? "").trim();
|
|
87
|
-
const county = (record["Commissioned County"] ?? "").trim();
|
|
88
|
-
if (!city || !stateAbbr || !zip)
|
|
89
|
-
continue;
|
|
90
|
-
if (!address1 && !address2)
|
|
91
|
-
continue;
|
|
92
|
-
const state = lookupStateAbbreviation(stateAbbr);
|
|
93
|
-
if (!state)
|
|
94
|
-
continue;
|
|
95
|
-
const fullAddress = [address1, address2].filter(Boolean).join(" ");
|
|
96
|
-
const split = splitAddress(fullAddress);
|
|
97
|
-
if (!split)
|
|
98
|
-
continue;
|
|
99
|
-
const venue = businessName || holderName || undefined;
|
|
100
|
-
const components = {
|
|
101
|
-
...(venue ? { venue } : {}),
|
|
102
|
-
...(split.house_number ? { house_number: split.house_number } : {}),
|
|
103
|
-
street: split.street,
|
|
104
|
-
locality: city,
|
|
105
|
-
region: state.abbreviation,
|
|
106
|
-
postcode: zip,
|
|
107
|
-
...(county ? { subregion: county } : {}),
|
|
108
|
-
};
|
|
109
|
-
const streetPart = [split.house_number, split.street].filter(Boolean).join(" ").trim();
|
|
110
|
-
const raw = [venue, streetPart, [city, [stateAbbr, zip].filter(Boolean).join(" ")].filter(Boolean).join(", ")]
|
|
111
|
-
.filter(Boolean)
|
|
112
|
-
.join(", ");
|
|
113
|
-
const aligned = reconcileComponents(components, raw);
|
|
114
|
-
if (Object.keys(aligned).length <= 2)
|
|
115
|
-
continue;
|
|
116
|
-
const commNum = (record["Commission Number (UID)"] ?? "").trim();
|
|
117
|
-
const sourceID = commNum
|
|
118
|
-
? `${STATE_NY_NOTARIES_ADAPTER_ID}-${commNum}`
|
|
119
|
-
: stableSourceID(STATE_NY_NOTARIES_ADAPTER_ID, aligned);
|
|
120
|
-
yield {
|
|
121
|
-
raw,
|
|
122
|
-
components: aligned,
|
|
123
|
-
country: "US",
|
|
124
|
-
locale: "en-US",
|
|
125
|
-
source: STATE_NY_NOTARIES_ADAPTER_ID,
|
|
126
|
-
source_id: sourceID,
|
|
127
|
-
corpus_version: "",
|
|
128
|
-
license: STATE_NY_NOTARIES_DEFAULT_LICENSE,
|
|
129
|
-
};
|
|
130
|
-
emitted++;
|
|
56
|
+
for await (const rawRecord of rows) {
|
|
57
|
+
if (opts.signal?.aborted)
|
|
58
|
+
break;
|
|
59
|
+
if (opts.limit !== undefined && emitted >= opts.limit)
|
|
60
|
+
break;
|
|
61
|
+
// NY CSV has columns with leading spaces, so we normalize by trimming keys.
|
|
62
|
+
const record = {};
|
|
63
|
+
for (const key of Object.keys(rawRecord)) {
|
|
64
|
+
record[key.trim()] = rawRecord[key] ?? "";
|
|
131
65
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
66
|
+
const holderName = (record["Commission Holder Name"] ?? "").trim();
|
|
67
|
+
const businessName = (record["Business Name (if available)"] ?? "").trim();
|
|
68
|
+
const address1 = (record["Business Address 1 (if available)"] ?? "").trim();
|
|
69
|
+
const address2 = (record["Business Address 2 (if available)"] ?? "").trim();
|
|
70
|
+
const city = (record["Business City (if available)"] ?? "").trim();
|
|
71
|
+
const stateAbbr = (record["Business State (if available)"] ?? "").trim();
|
|
72
|
+
const zip = (record["Business Zip (if available)"] ?? "").trim();
|
|
73
|
+
const county = (record["Commissioned County"] ?? "").trim();
|
|
74
|
+
if (!city || !stateAbbr || !zip)
|
|
75
|
+
continue;
|
|
76
|
+
if (!address1 && !address2)
|
|
77
|
+
continue;
|
|
78
|
+
const state = lookupStateAbbreviation(stateAbbr);
|
|
79
|
+
if (!state)
|
|
80
|
+
continue;
|
|
81
|
+
const fullAddress = [address1, address2].filter(Boolean).join(" ");
|
|
82
|
+
const split = splitStreetLine(fullAddress);
|
|
83
|
+
if (!split)
|
|
84
|
+
continue;
|
|
85
|
+
const venue = businessName || holderName || undefined;
|
|
86
|
+
const components = {
|
|
87
|
+
...(venue ? { venue } : {}),
|
|
88
|
+
...(split.house_number ? { house_number: split.house_number } : {}),
|
|
89
|
+
street: split.street,
|
|
90
|
+
locality: city,
|
|
91
|
+
region: state.abbreviation,
|
|
92
|
+
postcode: zip,
|
|
93
|
+
...(county ? { subregion: county } : {}),
|
|
94
|
+
};
|
|
95
|
+
const streetPart = [split.house_number, split.street].filter(Boolean).join(" ").trim();
|
|
96
|
+
const raw = [venue, streetPart, [city, [stateAbbr, zip].filter(Boolean).join(" ")].filter(Boolean).join(", ")]
|
|
97
|
+
.filter(Boolean)
|
|
98
|
+
.join(", ");
|
|
99
|
+
const aligned = reconcileComponents(components, raw);
|
|
100
|
+
if (Object.keys(aligned).length <= 2)
|
|
101
|
+
continue;
|
|
102
|
+
const commNum = (record["Commission Number (UID)"] ?? "").trim();
|
|
103
|
+
const sourceID = commNum
|
|
104
|
+
? `${STATE_NY_NOTARIES_ADAPTER_ID}-${commNum}`
|
|
105
|
+
: stableSourceID(STATE_NY_NOTARIES_ADAPTER_ID, aligned);
|
|
106
|
+
yield {
|
|
107
|
+
raw,
|
|
108
|
+
components: aligned,
|
|
109
|
+
country: "US",
|
|
110
|
+
locale: "en-US",
|
|
111
|
+
source: STATE_NY_NOTARIES_ADAPTER_ID,
|
|
112
|
+
source_id: sourceID,
|
|
113
|
+
corpus_version: "",
|
|
114
|
+
license: STATE_NY_NOTARIES_DEFAULT_LICENSE,
|
|
115
|
+
};
|
|
116
|
+
emitted++;
|
|
135
117
|
}
|
|
136
118
|
},
|
|
137
119
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/adapters/state-ny-notaries/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/adapters/state-ny-notaries/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/adapters/state-tx-notaries/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/adapters/state-tx-notaries/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAOH,OAAO,KAAK,EAAgC,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEjF;;;GAGG;AACH,eAAO,MAAM,4BAA4B,sBAAsB,CAAA;AAC/D;;;GAGG;AACH,eAAO,MAAM,iCAAiC,kBAAkB,CAAA;AAchE,wBAAgB,4BAA4B,IAAI,aAAa,CAmG5D;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,eAAiC,CAAA"}
|