@mailwoman/corpus 2.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 +96 -0
- package/out/src/adapter.d.ts.map +1 -0
- package/out/src/adapter.js +107 -0
- package/out/src/adapter.js.map +1 -0
- package/out/src/adapters/ban/adapter.d.ts +32 -0
- package/out/src/adapters/ban/adapter.d.ts.map +1 -0
- package/out/src/adapters/ban/adapter.js +133 -0
- package/out/src/adapters/ban/adapter.js.map +1 -0
- package/out/src/adapters/fcc-bdc/adapter.d.ts +61 -0
- package/out/src/adapters/fcc-bdc/adapter.d.ts.map +1 -0
- package/out/src/adapters/fcc-bdc/adapter.js +153 -0
- package/out/src/adapters/fcc-bdc/adapter.js.map +1 -0
- package/out/src/adapters/index.d.ts +42 -0
- package/out/src/adapters/index.d.ts.map +1 -0
- package/out/src/adapters/index.js +76 -0
- package/out/src/adapters/index.js.map +1 -0
- package/out/src/adapters/openaddresses/adapter.d.ts +60 -0
- package/out/src/adapters/openaddresses/adapter.d.ts.map +1 -0
- package/out/src/adapters/openaddresses/adapter.js +174 -0
- package/out/src/adapters/openaddresses/adapter.js.map +1 -0
- package/out/src/adapters/state-ia-contractors/adapter.d.ts +23 -0
- package/out/src/adapters/state-ia-contractors/adapter.d.ts.map +1 -0
- package/out/src/adapters/state-ia-contractors/adapter.js +113 -0
- package/out/src/adapters/state-ia-contractors/adapter.js.map +1 -0
- package/out/src/adapters/state-ny-notaries/adapter.d.ts +21 -0
- package/out/src/adapters/state-ny-notaries/adapter.d.ts.map +1 -0
- package/out/src/adapters/state-ny-notaries/adapter.js +132 -0
- package/out/src/adapters/state-ny-notaries/adapter.js.map +1 -0
- package/out/src/adapters/state-tx-notaries/adapter.d.ts +22 -0
- package/out/src/adapters/state-tx-notaries/adapter.d.ts.map +1 -0
- package/out/src/adapters/state-tx-notaries/adapter.js +125 -0
- package/out/src/adapters/state-tx-notaries/adapter.js.map +1 -0
- package/out/src/adapters/tiger/adapter.d.ts +45 -0
- package/out/src/adapters/tiger/adapter.d.ts.map +1 -0
- package/out/src/adapters/tiger/adapter.js +179 -0
- package/out/src/adapters/tiger/adapter.js.map +1 -0
- package/out/src/adapters/usgov-hrsa-fqhc/adapter.d.ts +36 -0
- package/out/src/adapters/usgov-hrsa-fqhc/adapter.d.ts.map +1 -0
- package/out/src/adapters/usgov-hrsa-fqhc/adapter.js +147 -0
- package/out/src/adapters/usgov-hrsa-fqhc/adapter.js.map +1 -0
- package/out/src/adapters/usgov-imls-pls/adapter.d.ts +25 -0
- package/out/src/adapters/usgov-imls-pls/adapter.d.ts.map +1 -0
- package/out/src/adapters/usgov-imls-pls/adapter.js +118 -0
- package/out/src/adapters/usgov-imls-pls/adapter.js.map +1 -0
- package/out/src/adapters/usgov-nad/adapter.d.ts +37 -0
- package/out/src/adapters/usgov-nad/adapter.d.ts.map +1 -0
- package/out/src/adapters/usgov-nad/adapter.js +227 -0
- package/out/src/adapters/usgov-nad/adapter.js.map +1 -0
- package/out/src/adapters/usgov-nppes/adapter.d.ts +28 -0
- package/out/src/adapters/usgov-nppes/adapter.d.ts.map +1 -0
- package/out/src/adapters/usgov-nppes/adapter.js +123 -0
- package/out/src/adapters/usgov-nppes/adapter.js.map +1 -0
- package/out/src/adapters/usgov-samhsa-treatment-locator/adapter.d.ts +35 -0
- package/out/src/adapters/usgov-samhsa-treatment-locator/adapter.d.ts.map +1 -0
- package/out/src/adapters/usgov-samhsa-treatment-locator/adapter.js +162 -0
- package/out/src/adapters/usgov-samhsa-treatment-locator/adapter.js.map +1 -0
- package/out/src/adapters/wof-admin-json/adapter.d.ts +85 -0
- package/out/src/adapters/wof-admin-json/adapter.d.ts.map +1 -0
- package/out/src/adapters/wof-admin-json/adapter.js +241 -0
- package/out/src/adapters/wof-admin-json/adapter.js.map +1 -0
- package/out/src/adapters/wof-postalcode-json/adapter.d.ts +63 -0
- package/out/src/adapters/wof-postalcode-json/adapter.d.ts.map +1 -0
- package/out/src/adapters/wof-postalcode-json/adapter.js +178 -0
- package/out/src/adapters/wof-postalcode-json/adapter.js.map +1 -0
- package/out/src/align.d.ts +58 -0
- package/out/src/align.d.ts.map +1 -0
- package/out/src/align.js +139 -0
- package/out/src/align.js.map +1 -0
- package/out/src/build.d.ts +104 -0
- package/out/src/build.d.ts.map +1 -0
- package/out/src/build.js +201 -0
- package/out/src/build.js.map +1 -0
- package/out/src/codex/us-fips-state.d.ts +44 -0
- package/out/src/codex/us-fips-state.d.ts.map +1 -0
- package/out/src/codex/us-fips-state.js +105 -0
- package/out/src/codex/us-fips-state.js.map +1 -0
- package/out/src/codex/us-street-suffix.d.ts +259 -0
- package/out/src/codex/us-street-suffix.d.ts.map +1 -0
- package/out/src/codex/us-street-suffix.js +285 -0
- package/out/src/codex/us-street-suffix.js.map +1 -0
- package/out/src/format.d.ts +79 -0
- package/out/src/format.d.ts.map +1 -0
- package/out/src/format.js +151 -0
- package/out/src/format.js.map +1 -0
- package/out/src/golden.d.ts +50 -0
- package/out/src/golden.d.ts.map +1 -0
- package/out/src/golden.js +104 -0
- package/out/src/golden.js.map +1 -0
- package/out/src/index.d.ts +18 -0
- package/out/src/index.d.ts.map +1 -0
- package/out/src/index.js +18 -0
- package/out/src/index.js.map +1 -0
- package/out/src/parquet-wrapper/index.d.ts +12 -0
- package/out/src/parquet-wrapper/index.d.ts.map +1 -0
- package/out/src/parquet-wrapper/index.js +12 -0
- package/out/src/parquet-wrapper/index.js.map +1 -0
- package/out/src/parquet-wrapper/reader.d.ts +31 -0
- package/out/src/parquet-wrapper/reader.d.ts.map +1 -0
- package/out/src/parquet-wrapper/reader.js +54 -0
- package/out/src/parquet-wrapper/reader.js.map +1 -0
- package/out/src/parquet-wrapper/schema.d.ts +45 -0
- package/out/src/parquet-wrapper/schema.d.ts.map +1 -0
- package/out/src/parquet-wrapper/schema.js +55 -0
- package/out/src/parquet-wrapper/schema.js.map +1 -0
- package/out/src/parquet-wrapper/writer.d.ts +41 -0
- package/out/src/parquet-wrapper/writer.d.ts.map +1 -0
- package/out/src/parquet-wrapper/writer.js +71 -0
- package/out/src/parquet-wrapper/writer.js.map +1 -0
- package/out/src/parquet.d.ts +122 -0
- package/out/src/parquet.d.ts.map +1 -0
- package/out/src/parquet.js +220 -0
- package/out/src/parquet.js.map +1 -0
- package/out/src/runner.d.ts +100 -0
- package/out/src/runner.d.ts.map +1 -0
- package/out/src/runner.js +183 -0
- package/out/src/runner.js.map +1 -0
- package/out/src/split.d.ts +108 -0
- package/out/src/split.d.ts.map +1 -0
- package/out/src/split.js +191 -0
- package/out/src/split.js.map +1 -0
- package/out/src/synthesize.d.ts +146 -0
- package/out/src/synthesize.d.ts.map +1 -0
- package/out/src/synthesize.js +472 -0
- package/out/src/synthesize.js.map +1 -0
- package/out/src/tokenize.d.ts +47 -0
- package/out/src/tokenize.d.ts.map +1 -0
- package/out/src/tokenize.js +49 -0
- package/out/src/tokenize.js.map +1 -0
- package/out/src/types.d.ts +168 -0
- package/out/src/types.d.ts.map +1 -0
- package/out/src/types.js +19 -0
- package/out/src/types.js.map +1 -0
- package/out/src/wof-json.d.ts +105 -0
- package/out/src/wof-json.d.ts.map +1 -0
- package/out/src/wof-json.js +174 -0
- package/out/src/wof-json.js.map +1 -0
- package/package.json +36 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*
|
|
6
|
+
* Adapter registry bootstrap.
|
|
7
|
+
*
|
|
8
|
+
* Importing this module registers every built-in adapter with `defaultAdapterRegistry`. The CLI
|
|
9
|
+
* (`commands/corpus/list.tsx`, `commands/corpus/run.tsx`) imports it once at startup.
|
|
10
|
+
*
|
|
11
|
+
* Adapters under construction live in their own subdirectories (`./wof-admin-json/`, `./ban/`, ...)
|
|
12
|
+
* and are added to the `BUILTIN_ADAPTERS` list here as they come online. Tests that need a
|
|
13
|
+
* pristine registry should construct their own `InMemoryAdapterRegistry` instead of mutating the
|
|
14
|
+
* default.
|
|
15
|
+
*
|
|
16
|
+
* The WOF adapters export their canonical ids — `wof-admin` and `wof-postalcode` — so existing
|
|
17
|
+
* `mailwoman corpus build` callsites do not need to change despite the Phase 1.5.1 SQLite →
|
|
18
|
+
* JSON-bundle pivot (`./wof-admin-json/` and `./wof-postalcode-json/` directories hold the
|
|
19
|
+
* implementations; the registered ids are unchanged).
|
|
20
|
+
*/
|
|
21
|
+
import type { CorpusAdapter } from "../types.js";
|
|
22
|
+
/**
|
|
23
|
+
* Built-in adapters. Order is significant: `corpus build` iterates this list to drive every adapter
|
|
24
|
+
* in turn. Coarse-first (admin → postcode), then street-level (BAN FR, TIGER US, OpenAddresses
|
|
25
|
+
* global), then adversarial-source (FCC BDC US, HRSA FQHC US, SAMHSA Treatment Locator US).
|
|
26
|
+
*/
|
|
27
|
+
export declare const BUILTIN_ADAPTERS: readonly CorpusAdapter[];
|
|
28
|
+
export { BAN_ADAPTER_ID, banAdapter } from "./ban/adapter.js";
|
|
29
|
+
export { FCC_BDC_ADAPTER_ID, FCC_BDC_DEFAULT_LICENSE, fccBdcAdapter } from "./fcc-bdc/adapter.js";
|
|
30
|
+
export { OPENADDRESSES_ADAPTER_ID, OPENADDRESSES_DEFAULT_LICENSE, openaddressesAdapter, } from "./openaddresses/adapter.js";
|
|
31
|
+
export { STATE_IA_CONTRACTORS_ADAPTER_ID, STATE_IA_CONTRACTORS_DEFAULT_LICENSE, stateIaContractorsAdapter, } from "./state-ia-contractors/adapter.js";
|
|
32
|
+
export { STATE_NY_NOTARIES_ADAPTER_ID, STATE_NY_NOTARIES_DEFAULT_LICENSE, stateNyNotariesAdapter, } from "./state-ny-notaries/adapter.js";
|
|
33
|
+
export { STATE_TX_NOTARIES_ADAPTER_ID, STATE_TX_NOTARIES_DEFAULT_LICENSE, stateTxNotariesAdapter, } from "./state-tx-notaries/adapter.js";
|
|
34
|
+
export { TIGER_ADAPTER_ID, TIGER_DEFAULT_LICENSE, tigerAdapter } from "./tiger/adapter.js";
|
|
35
|
+
export { USGOV_HRSA_FQHC_ADAPTER_ID, USGOV_HRSA_FQHC_DEFAULT_LICENSE, usgovHrsaFqhcAdapter, } from "./usgov-hrsa-fqhc/adapter.js";
|
|
36
|
+
export { USGOV_IMLS_PLS_ADAPTER_ID, USGOV_IMLS_PLS_DEFAULT_LICENSE, usgovImlsPlsAdapter, } from "./usgov-imls-pls/adapter.js";
|
|
37
|
+
export { USGOV_NAD_ADAPTER_ID, USGOV_NAD_DEFAULT_LICENSE, usgovNadAdapter } from "./usgov-nad/adapter.js";
|
|
38
|
+
export { USGOV_NPPES_ADAPTER_ID, USGOV_NPPES_DEFAULT_LICENSE, usgovNppesAdapter } from "./usgov-nppes/adapter.js";
|
|
39
|
+
export { USGOV_SAMHSA_ADAPTER_ID, USGOV_SAMHSA_DEFAULT_LICENSE, usgovSamhsaTreatmentLocatorAdapter, } from "./usgov-samhsa-treatment-locator/adapter.js";
|
|
40
|
+
export { WOF_ADMIN_ADAPTER_ID, wofAdminAdapter } from "./wof-admin-json/adapter.js";
|
|
41
|
+
export { WOF_POSTALCODE_ADAPTER_ID, wofPostalcodeAdapter } from "./wof-postalcode-json/adapter.js";
|
|
42
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAgBhD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,aAAa,EAepD,CAAA;AAQD,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACjG,OAAO,EACN,wBAAwB,EACxB,6BAA6B,EAC7B,oBAAoB,GACpB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACN,+BAA+B,EAC/B,oCAAoC,EACpC,yBAAyB,GACzB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EACN,4BAA4B,EAC5B,iCAAiC,EACjC,sBAAsB,GACtB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EACN,4BAA4B,EAC5B,iCAAiC,EACjC,sBAAsB,GACtB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAC1F,OAAO,EACN,0BAA0B,EAC1B,+BAA+B,EAC/B,oBAAoB,GACpB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACN,yBAAyB,EACzB,8BAA8B,EAC9B,mBAAmB,GACnB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACzG,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AACjH,OAAO,EACN,uBAAuB,EACvB,4BAA4B,EAC5B,kCAAkC,GAClC,MAAM,6CAA6C,CAAA;AACpD,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AACnF,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAA"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*
|
|
6
|
+
* Adapter registry bootstrap.
|
|
7
|
+
*
|
|
8
|
+
* Importing this module registers every built-in adapter with `defaultAdapterRegistry`. The CLI
|
|
9
|
+
* (`commands/corpus/list.tsx`, `commands/corpus/run.tsx`) imports it once at startup.
|
|
10
|
+
*
|
|
11
|
+
* Adapters under construction live in their own subdirectories (`./wof-admin-json/`, `./ban/`, ...)
|
|
12
|
+
* and are added to the `BUILTIN_ADAPTERS` list here as they come online. Tests that need a
|
|
13
|
+
* pristine registry should construct their own `InMemoryAdapterRegistry` instead of mutating the
|
|
14
|
+
* default.
|
|
15
|
+
*
|
|
16
|
+
* The WOF adapters export their canonical ids — `wof-admin` and `wof-postalcode` — so existing
|
|
17
|
+
* `mailwoman corpus build` callsites do not need to change despite the Phase 1.5.1 SQLite →
|
|
18
|
+
* JSON-bundle pivot (`./wof-admin-json/` and `./wof-postalcode-json/` directories hold the
|
|
19
|
+
* implementations; the registered ids are unchanged).
|
|
20
|
+
*/
|
|
21
|
+
import { defaultAdapterRegistry } from "../adapter.js";
|
|
22
|
+
import { banAdapter } from "./ban/adapter.js";
|
|
23
|
+
import { fccBdcAdapter } from "./fcc-bdc/adapter.js";
|
|
24
|
+
import { openaddressesAdapter } from "./openaddresses/adapter.js";
|
|
25
|
+
import { stateIaContractorsAdapter } from "./state-ia-contractors/adapter.js";
|
|
26
|
+
import { stateNyNotariesAdapter } from "./state-ny-notaries/adapter.js";
|
|
27
|
+
import { stateTxNotariesAdapter } from "./state-tx-notaries/adapter.js";
|
|
28
|
+
import { tigerAdapter } from "./tiger/adapter.js";
|
|
29
|
+
import { usgovHrsaFqhcAdapter } from "./usgov-hrsa-fqhc/adapter.js";
|
|
30
|
+
import { usgovImlsPlsAdapter } from "./usgov-imls-pls/adapter.js";
|
|
31
|
+
import { usgovNadAdapter } from "./usgov-nad/adapter.js";
|
|
32
|
+
import { usgovNppesAdapter } from "./usgov-nppes/adapter.js";
|
|
33
|
+
import { usgovSamhsaTreatmentLocatorAdapter } from "./usgov-samhsa-treatment-locator/adapter.js";
|
|
34
|
+
import { wofAdminAdapter } from "./wof-admin-json/adapter.js";
|
|
35
|
+
import { wofPostalcodeAdapter } from "./wof-postalcode-json/adapter.js";
|
|
36
|
+
/**
|
|
37
|
+
* Built-in adapters. Order is significant: `corpus build` iterates this list to drive every adapter
|
|
38
|
+
* in turn. Coarse-first (admin → postcode), then street-level (BAN FR, TIGER US, OpenAddresses
|
|
39
|
+
* global), then adversarial-source (FCC BDC US, HRSA FQHC US, SAMHSA Treatment Locator US).
|
|
40
|
+
*/
|
|
41
|
+
export const BUILTIN_ADAPTERS = [
|
|
42
|
+
wofAdminAdapter,
|
|
43
|
+
wofPostalcodeAdapter,
|
|
44
|
+
banAdapter,
|
|
45
|
+
tigerAdapter,
|
|
46
|
+
openaddressesAdapter,
|
|
47
|
+
fccBdcAdapter,
|
|
48
|
+
usgovHrsaFqhcAdapter,
|
|
49
|
+
usgovSamhsaTreatmentLocatorAdapter,
|
|
50
|
+
usgovNppesAdapter,
|
|
51
|
+
usgovNadAdapter,
|
|
52
|
+
usgovImlsPlsAdapter,
|
|
53
|
+
stateIaContractorsAdapter,
|
|
54
|
+
stateTxNotariesAdapter,
|
|
55
|
+
stateNyNotariesAdapter,
|
|
56
|
+
];
|
|
57
|
+
for (const adapter of BUILTIN_ADAPTERS) {
|
|
58
|
+
if (!defaultAdapterRegistry.get(adapter.id)) {
|
|
59
|
+
defaultAdapterRegistry.register(adapter);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export { BAN_ADAPTER_ID, banAdapter } from "./ban/adapter.js";
|
|
63
|
+
export { FCC_BDC_ADAPTER_ID, FCC_BDC_DEFAULT_LICENSE, fccBdcAdapter } from "./fcc-bdc/adapter.js";
|
|
64
|
+
export { OPENADDRESSES_ADAPTER_ID, OPENADDRESSES_DEFAULT_LICENSE, openaddressesAdapter, } from "./openaddresses/adapter.js";
|
|
65
|
+
export { STATE_IA_CONTRACTORS_ADAPTER_ID, STATE_IA_CONTRACTORS_DEFAULT_LICENSE, stateIaContractorsAdapter, } from "./state-ia-contractors/adapter.js";
|
|
66
|
+
export { STATE_NY_NOTARIES_ADAPTER_ID, STATE_NY_NOTARIES_DEFAULT_LICENSE, stateNyNotariesAdapter, } from "./state-ny-notaries/adapter.js";
|
|
67
|
+
export { STATE_TX_NOTARIES_ADAPTER_ID, STATE_TX_NOTARIES_DEFAULT_LICENSE, stateTxNotariesAdapter, } from "./state-tx-notaries/adapter.js";
|
|
68
|
+
export { TIGER_ADAPTER_ID, TIGER_DEFAULT_LICENSE, tigerAdapter } from "./tiger/adapter.js";
|
|
69
|
+
export { USGOV_HRSA_FQHC_ADAPTER_ID, USGOV_HRSA_FQHC_DEFAULT_LICENSE, usgovHrsaFqhcAdapter, } from "./usgov-hrsa-fqhc/adapter.js";
|
|
70
|
+
export { USGOV_IMLS_PLS_ADAPTER_ID, USGOV_IMLS_PLS_DEFAULT_LICENSE, usgovImlsPlsAdapter, } from "./usgov-imls-pls/adapter.js";
|
|
71
|
+
export { USGOV_NAD_ADAPTER_ID, USGOV_NAD_DEFAULT_LICENSE, usgovNadAdapter } from "./usgov-nad/adapter.js";
|
|
72
|
+
export { USGOV_NPPES_ADAPTER_ID, USGOV_NPPES_DEFAULT_LICENSE, usgovNppesAdapter } from "./usgov-nppes/adapter.js";
|
|
73
|
+
export { USGOV_SAMHSA_ADAPTER_ID, USGOV_SAMHSA_DEFAULT_LICENSE, usgovSamhsaTreatmentLocatorAdapter, } from "./usgov-samhsa-treatment-locator/adapter.js";
|
|
74
|
+
export { WOF_ADMIN_ADAPTER_ID, wofAdminAdapter } from "./wof-admin-json/adapter.js";
|
|
75
|
+
export { WOF_POSTALCODE_ADAPTER_ID, wofPostalcodeAdapter } from "./wof-postalcode-json/adapter.js";
|
|
76
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*
|
|
6
|
+
* `openaddresses`: Line-delimited GeoJSON adapter for openaddresses.io exports.
|
|
7
|
+
*
|
|
8
|
+
* OpenAddresses publishes country-partitioned address dumps as either CSV or line-delimited GeoJSON
|
|
9
|
+
* (one `Feature` per line, also called ND-GeoJSON / GeoJSONL). This adapter consumes the
|
|
10
|
+
* line-delimited GeoJSON shape — it streams cleanly without holding the file in memory, which
|
|
11
|
+
* matters for the multi-gigabyte national dumps (e.g. `us-northeast.geojsonl`, ~20M rows).
|
|
12
|
+
*
|
|
13
|
+
* The collection aggregates **hundreds** of underlying sources with **per-source licenses** (city
|
|
14
|
+
* open-data portals, county GIS departments, state DOTs). The adapter therefore prefers the
|
|
15
|
+
* per-row `LICENSE` property when present and falls back to the configured `defaultLicense`. The
|
|
16
|
+
* propagated license travels with each `CanonicalRow` so downstream code can stratify, exclude,
|
|
17
|
+
* or re-attribute by license at training time.
|
|
18
|
+
*
|
|
19
|
+
* Country must be explicit (`opts.country` REQUIRED): OpenAddresses files are organized by country
|
|
20
|
+
* but the row-level data doesn't include a country code, so the adapter refuses to run without
|
|
21
|
+
* one. This matches how a `mailwoman corpus build` invocation pins each file to a country via the
|
|
22
|
+
* inputs JSON.
|
|
23
|
+
*
|
|
24
|
+
* Properties consumed (per the canonical OpenAddresses schema; both UPPERCASE and lowercase
|
|
25
|
+
* variants are accepted because legacy dumps used UPPERCASE):
|
|
26
|
+
*
|
|
27
|
+
* | Property | ComponentTag | | ------------- |
|
|
28
|
+
* -------------------------------------------------------------- | | `number` | `house_number` |
|
|
29
|
+
* | `street` | `street` | | `unit` | `unit` (if non-empty) | | `city` | `locality` | | `region` |
|
|
30
|
+
* `region` (state code for US, province for CA, etc.) | | `postcode` | `postcode` | | `LICENSE` |
|
|
31
|
+
* per-row `license` override | | `hash` / `id` | `source_id` (prefer `hash`; fall back to `id`;
|
|
32
|
+
* then synthesize)|
|
|
33
|
+
*
|
|
34
|
+
* `district` is intentionally NOT mapped — for US data it carries borough or county and would
|
|
35
|
+
* inflate alignment quarantine because postal addresses don't include it. Phase 6+ may revisit
|
|
36
|
+
* for non-US locales where district names DO appear on the envelope.
|
|
37
|
+
*/
|
|
38
|
+
import type { CorpusAdapter } from "../../types.js";
|
|
39
|
+
export declare const OPENADDRESSES_ADAPTER_ID = "openaddresses";
|
|
40
|
+
export declare const OPENADDRESSES_DEFAULT_LICENSE = "CC-BY-4.0";
|
|
41
|
+
export interface OpenaddressesAdapterOptions {
|
|
42
|
+
/**
|
|
43
|
+
* Per-row license used when a Feature lacks an explicit `LICENSE` property. Defaults to
|
|
44
|
+
* `CC-BY-4.0` — the most common license across the OpenAddresses collection. Override per dump
|
|
45
|
+
* via the runner's adapter-options passthrough.
|
|
46
|
+
*/
|
|
47
|
+
defaultLicense?: string;
|
|
48
|
+
/**
|
|
49
|
+
* When true, rows with share-alike licenses (ODbL, CC-BY-SA, CC-SA) are NOT filtered. Default
|
|
50
|
+
* false — share-alike rows are dropped per the licensing strategy (#26).
|
|
51
|
+
*/
|
|
52
|
+
allowShareAlike?: boolean;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Build an OpenAddresses adapter. The optional `defaultLicense` lets callers stamp a non-default
|
|
56
|
+
* fallback for dumps known to carry a single license throughout (e.g. a PDDL-only state slice).
|
|
57
|
+
*/
|
|
58
|
+
export declare function createOpenaddressesAdapter(opts?: OpenaddressesAdapterOptions): CorpusAdapter;
|
|
59
|
+
export declare const openaddressesAdapter: CorpusAdapter;
|
|
60
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/adapters/openaddresses/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAMH,OAAO,KAAK,EAAgC,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEjF,eAAO,MAAM,wBAAwB,kBAAkB,CAAA;AACvD,eAAO,MAAM,6BAA6B,cAAc,CAAA;AAqDxD,MAAM,WAAW,2BAA2B;IAC3C;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;CACzB;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,GAAE,2BAAgC,GAAG,aAAa,CAwFhG;AAED,eAAO,MAAM,oBAAoB,eAA+B,CAAA"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*
|
|
6
|
+
* `openaddresses`: Line-delimited GeoJSON adapter for openaddresses.io exports.
|
|
7
|
+
*
|
|
8
|
+
* OpenAddresses publishes country-partitioned address dumps as either CSV or line-delimited GeoJSON
|
|
9
|
+
* (one `Feature` per line, also called ND-GeoJSON / GeoJSONL). This adapter consumes the
|
|
10
|
+
* line-delimited GeoJSON shape — it streams cleanly without holding the file in memory, which
|
|
11
|
+
* matters for the multi-gigabyte national dumps (e.g. `us-northeast.geojsonl`, ~20M rows).
|
|
12
|
+
*
|
|
13
|
+
* The collection aggregates **hundreds** of underlying sources with **per-source licenses** (city
|
|
14
|
+
* open-data portals, county GIS departments, state DOTs). The adapter therefore prefers the
|
|
15
|
+
* per-row `LICENSE` property when present and falls back to the configured `defaultLicense`. The
|
|
16
|
+
* propagated license travels with each `CanonicalRow` so downstream code can stratify, exclude,
|
|
17
|
+
* or re-attribute by license at training time.
|
|
18
|
+
*
|
|
19
|
+
* Country must be explicit (`opts.country` REQUIRED): OpenAddresses files are organized by country
|
|
20
|
+
* but the row-level data doesn't include a country code, so the adapter refuses to run without
|
|
21
|
+
* one. This matches how a `mailwoman corpus build` invocation pins each file to a country via the
|
|
22
|
+
* inputs JSON.
|
|
23
|
+
*
|
|
24
|
+
* Properties consumed (per the canonical OpenAddresses schema; both UPPERCASE and lowercase
|
|
25
|
+
* variants are accepted because legacy dumps used UPPERCASE):
|
|
26
|
+
*
|
|
27
|
+
* | Property | ComponentTag | | ------------- |
|
|
28
|
+
* -------------------------------------------------------------- | | `number` | `house_number` |
|
|
29
|
+
* | `street` | `street` | | `unit` | `unit` (if non-empty) | | `city` | `locality` | | `region` |
|
|
30
|
+
* `region` (state code for US, province for CA, etc.) | | `postcode` | `postcode` | | `LICENSE` |
|
|
31
|
+
* per-row `license` override | | `hash` / `id` | `source_id` (prefer `hash`; fall back to `id`;
|
|
32
|
+
* then synthesize)|
|
|
33
|
+
*
|
|
34
|
+
* `district` is intentionally NOT mapped — for US data it carries borough or county and would
|
|
35
|
+
* inflate alignment quarantine because postal addresses don't include it. Phase 6+ may revisit
|
|
36
|
+
* for non-US locales where district names DO appear on the envelope.
|
|
37
|
+
*/
|
|
38
|
+
import { createReadStream } from "node:fs";
|
|
39
|
+
import { createInterface } from "node:readline";
|
|
40
|
+
import { stableSourceId } from "../../adapter.js";
|
|
41
|
+
import { formatAddress, reconcileComponents } from "../../format.js";
|
|
42
|
+
export const OPENADDRESSES_ADAPTER_ID = "openaddresses";
|
|
43
|
+
export const OPENADDRESSES_DEFAULT_LICENSE = "CC-BY-4.0";
|
|
44
|
+
/** Return a lowercase-keyed view of a Feature's properties so case variants both work. */
|
|
45
|
+
function normalizeProperties(raw) {
|
|
46
|
+
if (!raw || typeof raw !== "object")
|
|
47
|
+
return {};
|
|
48
|
+
const out = {};
|
|
49
|
+
for (const [k, v] of Object.entries(raw)) {
|
|
50
|
+
if (typeof v === "string")
|
|
51
|
+
out[k.toLowerCase()] = v;
|
|
52
|
+
else if (typeof v === "number")
|
|
53
|
+
out[k.toLowerCase()] = String(v);
|
|
54
|
+
}
|
|
55
|
+
return out;
|
|
56
|
+
}
|
|
57
|
+
/** Parse a single ND-GeoJSON line; return null for blanks, comments, or non-Feature shapes. */
|
|
58
|
+
function parseFeatureLine(line) {
|
|
59
|
+
const trimmed = line.trim();
|
|
60
|
+
if (!trimmed || trimmed.startsWith("#"))
|
|
61
|
+
return null;
|
|
62
|
+
let parsed;
|
|
63
|
+
try {
|
|
64
|
+
parsed = JSON.parse(trimmed);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
if (!parsed || typeof parsed !== "object")
|
|
70
|
+
return null;
|
|
71
|
+
const obj = parsed;
|
|
72
|
+
if (obj.type !== "Feature")
|
|
73
|
+
return null;
|
|
74
|
+
return normalizeProperties(obj.properties);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Licenses that require share-alike or create a copyleft obligation on derived works. Rows carrying
|
|
78
|
+
* any of these licenses are dropped by default because they would contaminate proprietary-weights
|
|
79
|
+
* training. Per the licensing strategy (#26).
|
|
80
|
+
*/
|
|
81
|
+
const SHARE_ALIKE_PATTERN = /^ODbL|^Open Database License|^CC-BY-SA|^CC-SA/i;
|
|
82
|
+
/**
|
|
83
|
+
* Build an OpenAddresses adapter. The optional `defaultLicense` lets callers stamp a non-default
|
|
84
|
+
* fallback for dumps known to carry a single license throughout (e.g. a PDDL-only state slice).
|
|
85
|
+
*/
|
|
86
|
+
export function createOpenaddressesAdapter(opts = {}) {
|
|
87
|
+
const defaultLicense = opts.defaultLicense ?? OPENADDRESSES_DEFAULT_LICENSE;
|
|
88
|
+
const allowShareAlike = opts.allowShareAlike ?? false;
|
|
89
|
+
return {
|
|
90
|
+
id: OPENADDRESSES_ADAPTER_ID,
|
|
91
|
+
defaultLicense,
|
|
92
|
+
description: "OpenAddresses (global): line-delimited GeoJSON dumps with per-row licenses.",
|
|
93
|
+
async *rows(adapterOpts) {
|
|
94
|
+
if (!adapterOpts.country) {
|
|
95
|
+
throw new Error("openaddresses adapter: --country is required (OpenAddresses files are country-partitioned but rows lack a country field)");
|
|
96
|
+
}
|
|
97
|
+
const country = adapterOpts.country;
|
|
98
|
+
const stream = createReadStream(adapterOpts.inputPath, { encoding: "utf8" });
|
|
99
|
+
const lines = createInterface({ input: stream, crlfDelay: Infinity });
|
|
100
|
+
let emitted = 0;
|
|
101
|
+
let shareAlikeBlocked = 0;
|
|
102
|
+
try {
|
|
103
|
+
for await (const line of lines) {
|
|
104
|
+
if (adapterOpts.signal?.aborted)
|
|
105
|
+
break;
|
|
106
|
+
if (adapterOpts.limit !== undefined && emitted >= adapterOpts.limit)
|
|
107
|
+
break;
|
|
108
|
+
const props = parseFeatureLine(line);
|
|
109
|
+
if (!props)
|
|
110
|
+
continue;
|
|
111
|
+
const houseNumber = props.number?.trim() ?? "";
|
|
112
|
+
const street = props.street?.trim() ?? "";
|
|
113
|
+
const unit = props.unit?.trim() ?? "";
|
|
114
|
+
const city = props.city?.trim() ?? "";
|
|
115
|
+
const region = props.region?.trim() ?? "";
|
|
116
|
+
const postcode = props.postcode?.trim() ?? "";
|
|
117
|
+
// A row is only useful if it has, at minimum, a street + (postcode OR locality).
|
|
118
|
+
// Pure point-only rows would land in quarantine anyway.
|
|
119
|
+
if (!street)
|
|
120
|
+
continue;
|
|
121
|
+
if (!city && !postcode)
|
|
122
|
+
continue;
|
|
123
|
+
const license = (props.license?.trim() || defaultLicense).trim();
|
|
124
|
+
if (!allowShareAlike && SHARE_ALIKE_PATTERN.test(license)) {
|
|
125
|
+
shareAlikeBlocked++;
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
const components = {};
|
|
129
|
+
if (houseNumber)
|
|
130
|
+
components.house_number = houseNumber;
|
|
131
|
+
if (street)
|
|
132
|
+
components.street = street;
|
|
133
|
+
if (unit)
|
|
134
|
+
components.unit = unit;
|
|
135
|
+
if (city)
|
|
136
|
+
components.locality = city;
|
|
137
|
+
if (region)
|
|
138
|
+
components.region = region;
|
|
139
|
+
if (postcode)
|
|
140
|
+
components.postcode = postcode;
|
|
141
|
+
const raw = formatAddress(components, country, { separator: ", " });
|
|
142
|
+
if (!raw)
|
|
143
|
+
continue;
|
|
144
|
+
const aligned = reconcileComponents(components, raw);
|
|
145
|
+
if (Object.keys(aligned).length === 0)
|
|
146
|
+
continue;
|
|
147
|
+
const sourceIdSeed = props.hash?.trim() || props.id?.trim();
|
|
148
|
+
const sourceId = sourceIdSeed
|
|
149
|
+
? `${OPENADDRESSES_ADAPTER_ID}-${sourceIdSeed}`
|
|
150
|
+
: stableSourceId(OPENADDRESSES_ADAPTER_ID, aligned);
|
|
151
|
+
yield {
|
|
152
|
+
raw,
|
|
153
|
+
components: aligned,
|
|
154
|
+
country,
|
|
155
|
+
source: OPENADDRESSES_ADAPTER_ID,
|
|
156
|
+
source_id: sourceId,
|
|
157
|
+
corpus_version: "",
|
|
158
|
+
license,
|
|
159
|
+
};
|
|
160
|
+
emitted++;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
finally {
|
|
164
|
+
lines.close();
|
|
165
|
+
stream.destroy();
|
|
166
|
+
if (shareAlikeBlocked > 0) {
|
|
167
|
+
process.stderr.write(` openaddresses: ${shareAlikeBlocked} share-alike rows dropped, ${emitted} kept\n`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
export const openaddressesAdapter = createOpenaddressesAdapter();
|
|
174
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/adapters/openaddresses/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*
|
|
6
|
+
* `state-ia-contractors`: Iowa Active Construction Contractor Registrations CSV consumer.
|
|
7
|
+
*
|
|
8
|
+
* Iowa Workforce Development publishes a public registry of active construction contractors. Each
|
|
9
|
+
* row carries a business name, street address, city/state/zip, and contact info.
|
|
10
|
+
*
|
|
11
|
+
* The adapter consumes the CSV the operator pre-downloads via `fetch-state-sources.sh`.
|
|
12
|
+
*
|
|
13
|
+
* Output: one row per contractor with `venue` (business name) and address quad `(house_number,
|
|
14
|
+
* street, locality, region, postcode)`.
|
|
15
|
+
*
|
|
16
|
+
* License: stamped `"Public Domain"` per Iowa state government open-data terms.
|
|
17
|
+
*/
|
|
18
|
+
import type { CorpusAdapter } from "../../types.js";
|
|
19
|
+
export declare const STATE_IA_CONTRACTORS_ADAPTER_ID = "state-ia-contractors";
|
|
20
|
+
export declare const STATE_IA_CONTRACTORS_DEFAULT_LICENSE = "Public Domain";
|
|
21
|
+
export declare function createStateIaContractorsAdapter(): CorpusAdapter;
|
|
22
|
+
export declare const stateIaContractorsAdapter: CorpusAdapter;
|
|
23
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
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,eAAO,MAAM,+BAA+B,yBAAyB,CAAA;AACrE,eAAO,MAAM,oCAAoC,kBAAkB,CAAA;AAwBnE,wBAAgB,+BAA+B,IAAI,aAAa,CAqF/D;AAED,eAAO,MAAM,yBAAyB,eAAoC,CAAA"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*
|
|
6
|
+
* `state-ia-contractors`: Iowa Active Construction Contractor Registrations CSV consumer.
|
|
7
|
+
*
|
|
8
|
+
* Iowa Workforce Development publishes a public registry of active construction contractors. Each
|
|
9
|
+
* row carries a business name, street address, city/state/zip, and contact info.
|
|
10
|
+
*
|
|
11
|
+
* The adapter consumes the CSV the operator pre-downloads via `fetch-state-sources.sh`.
|
|
12
|
+
*
|
|
13
|
+
* Output: one row per contractor with `venue` (business name) and address quad `(house_number,
|
|
14
|
+
* street, locality, region, postcode)`.
|
|
15
|
+
*
|
|
16
|
+
* License: stamped `"Public Domain"` per Iowa state government open-data terms.
|
|
17
|
+
*/
|
|
18
|
+
import { parse as csvParse } from "csv-parse";
|
|
19
|
+
import { createReadStream } from "node:fs";
|
|
20
|
+
import { stableSourceId } from "../../adapter.js";
|
|
21
|
+
import { lookupStateAbbreviation } from "../../codex/us-fips-state.js";
|
|
22
|
+
import { reconcileComponents } from "../../format.js";
|
|
23
|
+
export const STATE_IA_CONTRACTORS_ADAPTER_ID = "state-ia-contractors";
|
|
24
|
+
export const STATE_IA_CONTRACTORS_DEFAULT_LICENSE = "Public Domain";
|
|
25
|
+
const HOUSE_NUMBER_PREFIX = /^(\d+(?:-\d+)?[A-Za-z]?)\s+(.+)$/;
|
|
26
|
+
function splitAddress(address) {
|
|
27
|
+
const trimmed = address.trim();
|
|
28
|
+
if (!trimmed)
|
|
29
|
+
return null;
|
|
30
|
+
const m = HOUSE_NUMBER_PREFIX.exec(trimmed);
|
|
31
|
+
if (m)
|
|
32
|
+
return { house_number: m[1], street: m[2].trim() };
|
|
33
|
+
return { street: trimmed };
|
|
34
|
+
}
|
|
35
|
+
export function createStateIaContractorsAdapter() {
|
|
36
|
+
return {
|
|
37
|
+
id: STATE_IA_CONTRACTORS_ADAPTER_ID,
|
|
38
|
+
defaultLicense: STATE_IA_CONTRACTORS_DEFAULT_LICENSE,
|
|
39
|
+
description: "Iowa Active Construction Contractor Registrations — business name + full street address (public-domain).",
|
|
40
|
+
async *rows(opts) {
|
|
41
|
+
if (opts.country && opts.country !== "US") {
|
|
42
|
+
throw new Error(`state-ia-contractors adapter: only US supported, got country=${opts.country}`);
|
|
43
|
+
}
|
|
44
|
+
const stream = createReadStream(opts.inputPath, { encoding: "utf8" });
|
|
45
|
+
const parser = stream.pipe(csvParse({
|
|
46
|
+
columns: true,
|
|
47
|
+
skip_empty_lines: true,
|
|
48
|
+
relax_quotes: true,
|
|
49
|
+
relax_column_count: true,
|
|
50
|
+
}));
|
|
51
|
+
let emitted = 0;
|
|
52
|
+
try {
|
|
53
|
+
for await (const record of parser) {
|
|
54
|
+
if (opts.signal?.aborted)
|
|
55
|
+
break;
|
|
56
|
+
if (opts.limit !== undefined && emitted >= opts.limit)
|
|
57
|
+
break;
|
|
58
|
+
const businessName = (record["Business Name"] ?? "").trim();
|
|
59
|
+
const address1 = (record["Address 1"] ?? "").trim();
|
|
60
|
+
const address2 = (record["Address 2"] ?? "").trim();
|
|
61
|
+
const city = (record.City ?? "").trim();
|
|
62
|
+
const stateAbbr = (record.State ?? "").trim();
|
|
63
|
+
const zip = (record["Zip Code"] ?? "").trim();
|
|
64
|
+
if (!city || !zip)
|
|
65
|
+
continue;
|
|
66
|
+
const state = lookupStateAbbreviation(stateAbbr);
|
|
67
|
+
if (!state)
|
|
68
|
+
continue;
|
|
69
|
+
const fullAddress = [address1, address2].filter(Boolean).join(" ");
|
|
70
|
+
const split = splitAddress(fullAddress);
|
|
71
|
+
if (!split)
|
|
72
|
+
continue;
|
|
73
|
+
const venue = businessName || undefined;
|
|
74
|
+
const components = {
|
|
75
|
+
...(venue ? { venue } : {}),
|
|
76
|
+
...(split.house_number ? { house_number: split.house_number } : {}),
|
|
77
|
+
street: split.street,
|
|
78
|
+
locality: city,
|
|
79
|
+
region: state.abbreviation,
|
|
80
|
+
postcode: zip,
|
|
81
|
+
};
|
|
82
|
+
const streetPart = [split.house_number, split.street].filter(Boolean).join(" ").trim();
|
|
83
|
+
const raw = [venue, streetPart, [city, [stateAbbr, zip].filter(Boolean).join(" ")].filter(Boolean).join(", ")]
|
|
84
|
+
.filter(Boolean)
|
|
85
|
+
.join(", ");
|
|
86
|
+
const aligned = reconcileComponents(components, raw);
|
|
87
|
+
if (Object.keys(aligned).length <= 2)
|
|
88
|
+
continue;
|
|
89
|
+
const regNum = (record["Registration #"] ?? "").trim();
|
|
90
|
+
const sourceId = regNum
|
|
91
|
+
? `${STATE_IA_CONTRACTORS_ADAPTER_ID}-${regNum}`
|
|
92
|
+
: stableSourceId(STATE_IA_CONTRACTORS_ADAPTER_ID, aligned);
|
|
93
|
+
yield {
|
|
94
|
+
raw,
|
|
95
|
+
components: aligned,
|
|
96
|
+
country: "US",
|
|
97
|
+
locale: "en-US",
|
|
98
|
+
source: STATE_IA_CONTRACTORS_ADAPTER_ID,
|
|
99
|
+
source_id: sourceId,
|
|
100
|
+
corpus_version: "",
|
|
101
|
+
license: STATE_IA_CONTRACTORS_DEFAULT_LICENSE,
|
|
102
|
+
};
|
|
103
|
+
emitted++;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
finally {
|
|
107
|
+
stream.destroy();
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
export const stateIaContractorsAdapter = createStateIaContractorsAdapter();
|
|
113
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/adapters/state-ia-contractors/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*
|
|
6
|
+
* `state-ny-notaries`: New York Commissioned Notaries CSV consumer.
|
|
7
|
+
*
|
|
8
|
+
* The New York Department of State publishes a registry of commissioned notaries public. Each row
|
|
9
|
+
* optionally carries a business name and business address (~1-5% fill rate).
|
|
10
|
+
*
|
|
11
|
+
* The adapter consumes the CSV the operator pre-downloads via `fetch-state-sources.sh`. Column
|
|
12
|
+
* names match the data.ny.gov export header (note: some columns have leading spaces).
|
|
13
|
+
*
|
|
14
|
+
* License: stamped `"Public Domain"` per New York state government open-data terms.
|
|
15
|
+
*/
|
|
16
|
+
import type { CorpusAdapter } from "../../types.js";
|
|
17
|
+
export declare const STATE_NY_NOTARIES_ADAPTER_ID = "state-ny-notaries";
|
|
18
|
+
export declare const STATE_NY_NOTARIES_DEFAULT_LICENSE = "Public Domain";
|
|
19
|
+
export declare function createStateNyNotariesAdapter(): CorpusAdapter;
|
|
20
|
+
export declare const stateNyNotariesAdapter: CorpusAdapter;
|
|
21
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
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,eAAO,MAAM,4BAA4B,sBAAsB,CAAA;AAC/D,eAAO,MAAM,iCAAiC,kBAAkB,CAAA;AAoChE,wBAAgB,4BAA4B,IAAI,aAAa,CA8F5D;AAED,eAAO,MAAM,sBAAsB,eAAiC,CAAA"}
|