@mailwoman/bdc 9.1.0 → 9.3.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.
Files changed (84) hide show
  1. package/lib/env.ts +30 -0
  2. package/lib/index.ts +2 -0
  3. package/{sdk → lib/sdk}/build-bdc.ts +343 -298
  4. package/{sdk → lib/sdk}/client.ts +24 -38
  5. package/{sdk → lib/sdk}/common.ts +1 -1
  6. package/{sdk → lib/sdk}/data-collection.ts +2 -2
  7. package/{sdk → lib/sdk}/download.ts +19 -15
  8. package/{sdk → lib/sdk}/filing-dates.ts +3 -3
  9. package/{sdk → lib/sdk}/filing-landscape.ts +12 -24
  10. package/lib/sdk/index.ts +14 -0
  11. package/{sdk → lib/sdk}/list-files.ts +2 -2
  12. package/{sdk → lib/sdk}/nearest-infrastructure.ts +5 -5
  13. package/lib/sdk/parsing.ts +157 -0
  14. package/{sdk → lib/sdk}/plausibility.ts +43 -29
  15. package/out/env.d.ts +24 -0
  16. package/out/env.d.ts.map +1 -0
  17. package/out/env.js +28 -0
  18. package/out/env.js.map +1 -0
  19. package/out/index.d.ts +2 -2
  20. package/out/index.d.ts.map +1 -1
  21. package/out/index.js +2 -2
  22. package/out/index.js.map +1 -1
  23. package/out/schema.d.ts.map +1 -1
  24. package/out/schema.js.map +1 -1
  25. package/out/sdk/build-bdc.d.ts +32 -25
  26. package/out/sdk/build-bdc.d.ts.map +1 -1
  27. package/out/sdk/build-bdc.js +255 -219
  28. package/out/sdk/build-bdc.js.map +1 -1
  29. package/out/sdk/buildings.d.ts.map +1 -1
  30. package/out/sdk/buildings.js.map +1 -1
  31. package/out/sdk/client.d.ts +7 -7
  32. package/out/sdk/client.d.ts.map +1 -1
  33. package/out/sdk/client.js +17 -29
  34. package/out/sdk/client.js.map +1 -1
  35. package/out/sdk/common.d.ts +1 -1
  36. package/out/sdk/common.d.ts.map +1 -1
  37. package/out/sdk/common.js.map +1 -1
  38. package/out/sdk/data-collection.d.ts +2 -2
  39. package/out/sdk/data-collection.d.ts.map +1 -1
  40. package/out/sdk/data-collection.js.map +1 -1
  41. package/out/sdk/download.d.ts +4 -3
  42. package/out/sdk/download.d.ts.map +1 -1
  43. package/out/sdk/download.js +12 -13
  44. package/out/sdk/download.js.map +1 -1
  45. package/out/sdk/filing-dates.d.ts +3 -3
  46. package/out/sdk/filing-dates.d.ts.map +1 -1
  47. package/out/sdk/filing-dates.js +1 -1
  48. package/out/sdk/filing-dates.js.map +1 -1
  49. package/out/sdk/filing-landscape.d.ts +4 -4
  50. package/out/sdk/filing-landscape.d.ts.map +1 -1
  51. package/out/sdk/filing-landscape.js +9 -19
  52. package/out/sdk/filing-landscape.js.map +1 -1
  53. package/out/sdk/index.d.ts +14 -14
  54. package/out/sdk/index.d.ts.map +1 -1
  55. package/out/sdk/index.js +14 -14
  56. package/out/sdk/index.js.map +1 -1
  57. package/out/sdk/list-files.d.ts +2 -2
  58. package/out/sdk/list-files.d.ts.map +1 -1
  59. package/out/sdk/list-files.js +1 -1
  60. package/out/sdk/list-files.js.map +1 -1
  61. package/out/sdk/location.d.ts.map +1 -1
  62. package/out/sdk/location.js.map +1 -1
  63. package/out/sdk/nearest-infrastructure.d.ts +4 -4
  64. package/out/sdk/nearest-infrastructure.d.ts.map +1 -1
  65. package/out/sdk/nearest-infrastructure.js +2 -2
  66. package/out/sdk/nearest-infrastructure.js.map +1 -1
  67. package/out/sdk/parsing.d.ts +66 -28
  68. package/out/sdk/parsing.d.ts.map +1 -1
  69. package/out/sdk/parsing.js +103 -70
  70. package/out/sdk/parsing.js.map +1 -1
  71. package/out/sdk/plausibility.d.ts +32 -14
  72. package/out/sdk/plausibility.d.ts.map +1 -1
  73. package/out/sdk/plausibility.js +15 -20
  74. package/out/sdk/plausibility.js.map +1 -1
  75. package/out/sdk/technologies.d.ts.map +1 -1
  76. package/out/sdk/technologies.js.map +1 -1
  77. package/package.json +164 -22
  78. package/index.ts +0 -2
  79. package/sdk/index.ts +0 -14
  80. package/sdk/parsing.ts +0 -124
  81. /package/{schema.ts → lib/schema.ts} +0 -0
  82. /package/{sdk → lib/sdk}/buildings.ts +0 -0
  83. /package/{sdk → lib/sdk}/location.ts +0 -0
  84. /package/{sdk → lib/sdk}/technologies.ts +0 -0
@@ -8,8 +8,8 @@
8
8
  * over a single broadband-service claim, under the registry-backed doctrine's positive-evidence-only
9
9
  * invariant (spec §4): a BDC filing or a nearby infrastructure hit can RAISE confidence; their absence
10
10
  * can only ever read as "unknown" or "no supporting evidence found, coverage permitting" — NEVER as
11
- * "implausible." The four §7-2b acceptance gates are asserted in `plausibility.test.ts`'s
12
- * `describe("§7-2b gates")` block; this module is designed for them but doesn't assert them itself.
11
+ * "implausible." The four §7-2b acceptance criteria are asserted in `plausibility.test.ts`'s
12
+ * `describe("§7-2b criteria")` block; this module is designed for them but doesn't assert them itself.
13
13
  *
14
14
  * **Claim resolution (decision 4).** A claim's spatial key resolves two INDEPENDENT ways:
15
15
  *
@@ -24,7 +24,7 @@
24
24
  * - **Physical evidence's search center**: independent of the above — `claim.point` (or the geocoded
25
25
  * `claim.address`) directly, whenever available. A GEOID-ONLY claim (no point, no address) has NO
26
26
  * coordinate to search from: bdc.db stores no public geoid→centroid resolver (deriving one would
27
- * need the same Fabric-adjacent block-centroid machinery the vertical explicitly keeps out of reach
27
+ * need the same Fabric-adjacent block-centroid implementation the vertical explicitly keeps out of reach
28
28
  * — §2.2's boundary), so physical evidence is skipped entirely for that shape of claim. This is a
29
29
  * genuine, documented capability gap, not a missing-layer abstain: `coverage_confidence` still
30
30
  * degrades honestly (see below), but no `PlausibilityEvidence` abstain variant fits "no coordinate
@@ -88,11 +88,11 @@
88
88
  * filing coverage alone — it degrades to filing-covered → `"low"`, filing-unknown/absent →
89
89
  * `"insufficient_survey_data"`. Rationale: spec §4 frames physical co-presence as the vertical's
90
90
  * distinguishing "falsifier that only fires positively" and reserves `"high"` for genuine two-channel
91
- * corroboration (§7-2b Gate 2: "matching filing + nearby plant in covered cells… high"); a tech
91
+ * corroboration (§7-2b criterion 2: "matching filing + nearby plant in covered cells… high"); a tech
92
92
  * that structurally can never offer a second channel should not be able to claim the same top
93
93
  * confidence a fiber claim earns by actually having one available. This reading is more conservative
94
94
  * than the alternative (treating the missing axis as inert and reporting `"high"` off filing alone),
95
- * and nothing pins it: none of the four §7-2b gates exercises a no-physical-falsifier tech code.
95
+ * and nothing pins it: none of the four §7-2b criteria exercises a no-physical-falsifier tech code.
96
96
  *
97
97
  * **The per-layer coverage-resolution sanity check.** Neither bdc.db's nor poi.db's `layer_manifest`
98
98
  * records the COVERAGE-cell h3 resolution (6) that `res9ShortCellToRes6Parent` hardcodes on both sides
@@ -103,7 +103,7 @@
103
103
  * WIRED — `bdcDB`, `poi`, or both, checked independently — {@link assertLayerSpineResolution} compares that one
104
104
  * layer's recorded `spineKeys.h3.resolution` directly against the `BDC_H3_RESOLUTION` constant `pointCell` is
105
105
  * actually derived from, and throws on a mismatch, catching a layer built at a different spine resolution before it
106
- * silently mis-joins a coverage cell. This is TWO-SIDED, not gated on both layers being present together: a
106
+ * silently mis-joins a coverage cell. This is TWO-SIDED, not conditioned on both layers being present together: a
107
107
  * poi-only call still checks poi's own recorded resolution, since `readLayerCoverage`'s poi-side join key (below)
108
108
  * is derived from `BDC_H3_RESOLUTION` regardless of whether `bdcDB` is wired at all — comparing each manifest
109
109
  * against the constant, rather than the two manifests against each other, is what makes a single-layer call
@@ -112,14 +112,14 @@
112
112
  * — that gap needs the schema addition, not a runtime assertion.
113
113
  */
114
114
 
115
- import type { DatabaseClient } from "@mailwoman/core/kysley/client"
116
- import { readLayerCoverage, readLayerManifest, type LayerContractDatabase } from "@mailwoman/core/layers"
117
- import type { POILookup } from "@mailwoman/resolver-wof-sqlite/poi-lookup"
115
+ import { readLayerCoverage, readLayerManifest, type LayerContractHandle } from "@mailwoman/core/layers"
116
+ import type { Evidence } from "@mailwoman/evidence"
117
+ import type { POILookup } from "@mailwoman/resolver-wof-sqlite/poi"
118
118
  import { shortCellToInt, type H3Cell, type PointLiteral } from "@mailwoman/spatial"
119
+ import type { DatabaseClient } from "@mailwoman/sqlite/client"
119
120
  import { latLngToCell } from "h3-js"
120
- import type { Kysely } from "kysely"
121
121
 
122
- import { BDC_H3_RESOLUTION, type BDCDatabase } from "../schema.ts"
122
+ import { BDC_H3_RESOLUTION, type BDCDatabase } from "#schema"
123
123
  import {
124
124
  BDC_SPEED_BUCKET_100_1000,
125
125
  BDC_SPEED_BUCKET_25_100,
@@ -129,13 +129,13 @@ import {
129
129
  res9ShortCellToRes6Parent,
130
130
  speedBucketForDownloadSpeed,
131
131
  type ProviderFilingSummary,
132
- } from "./filing-landscape.ts"
133
- import { nearestInfrastructure, type InfrastructureHit } from "./nearest-infrastructure.ts"
132
+ } from "#sdk/filing-landscape"
133
+ import { nearestInfrastructure, type InfrastructureHit } from "#sdk/nearest-infrastructure"
134
134
  import {
135
135
  BroadbandTechnologyCategory,
136
136
  BroadbandTechnologyCategoryToCodeSet,
137
137
  BroadbandTechnologyCode,
138
- } from "./technologies.ts"
138
+ } from "#sdk/technologies"
139
139
 
140
140
  /**
141
141
  * The three fixed-wireless codes (unlicensed/licensed/licensed-by-rule), read off
@@ -165,10 +165,29 @@ export interface PlausibilityClaim {
165
165
  export type PlausibilityAbstainReason = "requires_build_local_layer" | "requires_bdc_layer" | "insufficient_survey_data"
166
166
 
167
167
  export type PlausibilityEvidence =
168
- | { type: "filing"; filing: ProviderFilingSummary; vintage: string; corroborates: boolean }
169
- | { type: "physical_plant"; hit: InfrastructureHit }
168
+ | {
169
+ kind: "observation"
170
+ type: "filing"
171
+ source: "bdc"
172
+ vintage: string
173
+ filing: ProviderFilingSummary
174
+ corroborates: boolean
175
+ }
176
+ | { kind: "observation"; type: "physical_plant"; source: "poi"; vintage: string; hit: InfrastructureHit }
170
177
  | { type: "abstain"; reason: PlausibilityAbstainReason; layer?: string }
171
178
 
179
+ /**
180
+ * The two non-abstain variants are {@link Evidence} observations wearing their original field names, so a caller that
181
+ * already reads `.filing` keeps working while a caller that wants the shared vocabulary can narrow on `kind`. The
182
+ * abstain variant deliberately does NOT join the union: an abstain is the ABSENCE of evidence plus a reason, which
183
+ * `coverage_confidence` already reports, and minting an evidence object for "we could not look" would put a claim where
184
+ * there is none.
185
+ */
186
+ export type PlausibilitySharedEvidence =
187
+ Extract<PlausibilityEvidence, { kind: "observation" }> extends Evidence
188
+ ? Extract<PlausibilityEvidence, { kind: "observation" }>
189
+ : never
190
+
172
191
  /**
173
192
  * One evidence channel's survey-completeness state for THIS claim, WITH the reason a non-`"covered"` state applies.
174
193
  * `coverage_confidence` alone folds several genuinely different situations into the same
@@ -254,7 +273,7 @@ export interface GeocodeLike {
254
273
  */
255
274
  export interface PlausibilityPOIDeps {
256
275
  lookup: POILookup
257
- contractDB: DatabaseClient<LayerContractDatabase>
276
+ contractDB: LayerContractHandle & Pick<DatabaseClient, "destroy">
258
277
  }
259
278
 
260
279
  export interface PlausibilityDeps {
@@ -295,15 +314,6 @@ const SPEED_BUCKET_RANK: Readonly<Record<string, number>> = {
295
314
  [BDC_SPEED_BUCKET_GIGABIT]: 3,
296
315
  }
297
316
 
298
- /**
299
- * `BDCDatabase extends LayerContractDatabase` structurally, but Kysely's `transaction()` makes `Kysely<DB>` INVARIANT
300
- * in `DB` — same cast idiom as `filing-landscape.ts`'s own private `asContractDB` (decision 8: reuse, never re-derive;
301
- * copied rather than imported since the original is module-private).
302
- */
303
- function asContractDB(kdb: DatabaseClient<BDCDatabase>): Kysely<LayerContractDatabase> {
304
- return kdb as unknown as Kysely<LayerContractDatabase>
305
- }
306
-
307
317
  /**
308
318
  * `true` when `filing` corroborates the claim: same `technology_code`, AND `filing.speed_bucket` ranks at or above the
309
319
  * claimed download speed's own bucket. A different tech, or a same-tech but LESSER filing, is `false` — never disproof,
@@ -373,7 +383,7 @@ function combineCoverage(
373
383
  */
374
384
  async function assertLayerSpineResolution(
375
385
  layer: "bdc" | "poi",
376
- contractDB: Kysely<LayerContractDatabase>,
386
+ contractDB: LayerContractHandle & Pick<DatabaseClient, "destroy">,
377
387
  expectedResolution: number
378
388
  ): Promise<void> {
379
389
  const manifest = await readLayerManifest(contractDB)
@@ -430,7 +440,7 @@ export async function plausibilityCheck(claim: PlausibilityClaim, deps: Plausibi
430
440
  // independently per WIRED layer, not only when both are present: a poi-only call still joins poi's coverage
431
441
  // table against a BDC_H3_RESOLUTION-derived cell (below) and must not do so unchecked.
432
442
  if (deps.bdcDB) {
433
- await assertLayerSpineResolution("bdc", asContractDB(deps.bdcDB), BDC_H3_RESOLUTION)
443
+ await assertLayerSpineResolution("bdc", deps.bdcDB, BDC_H3_RESOLUTION)
434
444
  }
435
445
 
436
446
  if (deps.poi) {
@@ -459,7 +469,9 @@ export async function plausibilityCheck(claim: PlausibilityClaim, deps: Plausibi
459
469
 
460
470
  for (const filing of landscape.filings) {
461
471
  evidence.push({
472
+ kind: "observation",
462
473
  type: "filing",
474
+ source: "bdc",
463
475
  filing,
464
476
  vintage: landscape.vintage,
465
477
  corroborates: filingCorroborates(filing, claim),
@@ -490,8 +502,10 @@ export async function plausibilityCheck(claim: PlausibilityClaim, deps: Plausibi
490
502
  categoryIDs: [...physicalCategories],
491
503
  })
492
504
 
505
+ const poiVintage = (await readLayerManifest(deps.poi.contractDB)).sourceVintage
506
+
493
507
  for (const hit of hits) {
494
- evidence.push({ type: "physical_plant", hit })
508
+ evidence.push({ kind: "observation", type: "physical_plant", source: "poi", vintage: poiVintage, hit })
495
509
  }
496
510
 
497
511
  const coverageCell = await readLayerCoverage(deps.poi.contractDB, res9ShortCellToRes6Parent(pointCell!))
package/out/env.d.ts ADDED
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ *
6
+ * The FCC Broadband Map credentials the BDC client sends.
7
+ */
8
+ import { z } from "zod";
9
+ /**
10
+ * FCC Broadband Map (BDC) public-API credentials (`bdc/lib/sdk/client.ts`) — username + hash_value header auth. Never
11
+ * log their values.
12
+ */
13
+ export declare const PrivateBDCEnvSchema: z.ZodObject<{
14
+ FCC_MAP_USERNAME: z.ZodOptional<z.ZodString>;
15
+ FCC_MAP_API_KEY: z.ZodOptional<z.ZodString>;
16
+ }, z.core.$strip>;
17
+ /**
18
+ * Live BDC credentials over core's. Never log their values.
19
+ */
20
+ export declare const $private: Record<never, never> & Record<string, never> & {
21
+ FCC_MAP_USERNAME?: string | undefined;
22
+ FCC_MAP_API_KEY?: string | undefined;
23
+ };
24
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../lib/env.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;;iBAS9B,CAAA;AAEF;;GAEG;AACH,eAAO,MAAM,QAAQ;;;CAA4C,CAAA"}
package/out/env.js ADDED
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ *
6
+ * The FCC Broadband Map credentials the BDC client sends.
7
+ */
8
+ import { $private as corePrivate, liveEnv } from "@mailwoman/core/env";
9
+ import { z } from "zod";
10
+ /**
11
+ * FCC Broadband Map (BDC) public-API credentials (`bdc/lib/sdk/client.ts`) — username + hash_value header auth. Never
12
+ * log their values.
13
+ */
14
+ export const PrivateBDCEnvSchema = z.object({
15
+ FCC_MAP_USERNAME: z.string().optional().meta({
16
+ title: "FCC Broadband Map username",
17
+ description: "Username used to authenticate to the FCC Broadband Data Collection API.",
18
+ }),
19
+ FCC_MAP_API_KEY: z.string().optional().meta({
20
+ title: "FCC Broadband Map API key",
21
+ description: "API key hash used to authenticate to the FCC Broadband Data Collection API.",
22
+ }),
23
+ });
24
+ /**
25
+ * Live BDC credentials over core's. Never log their values.
26
+ */
27
+ export const $private = liveEnv(PrivateBDCEnvSchema, corePrivate);
28
+ //# sourceMappingURL=env.js.map
package/out/env.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../lib/env.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,IAAI,WAAW,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AACtE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC;QAC5C,KAAK,EAAE,4BAA4B;QACnC,WAAW,EAAE,yEAAyE;KACtF,CAAC;IACF,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC;QAC3C,KAAK,EAAE,2BAA2B;QAClC,WAAW,EAAE,6EAA6E;KAC1F,CAAC;CACF,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,OAAO,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAA"}
package/out/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export * from "./schema.ts";
2
- export * from "./sdk/index.ts";
1
+ export * from "#schema";
2
+ export * from "#sdk/index";
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,YAAY,CAAA"}
package/out/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export * from "./schema.js";
2
- export * from "./sdk/index.js";
1
+ export * from "#schema";
2
+ export * from "#sdk/index";
3
3
  //# sourceMappingURL=index.js.map
package/out/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,YAAY,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEpC;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACpC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IACf;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,MAAM,CAAA;IACvB,6BAA6B,EAAE,MAAM,CAAA;IACrC,2BAA2B,EAAE,MAAM,CAAA;IACnC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAA;IAClB,yBAAyB,EAAE,MAAM,CAAA;IACjC;;OAEG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,WAAW,gBAAgB;IAChC;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;CAC9B;AAED,MAAM,WAAW,WAAY,SAAQ,qBAAqB;IACzD,gBAAgB,EAAE,oBAAoB,CAAA;IACtC,YAAY,EAAE,gBAAgB,CAAA;CAC9B;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,IAAI,CAAA;AAElC;;;GAGG;AACH,eAAO,MAAM,0BAA0B,IAAI,CAAA;AAE3C;;;;GAIG;AACH,wBAAsB,0BAA0B,CAAC,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBvF;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAQnF;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhF"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../lib/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEpC;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACpC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IACf;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,MAAM,CAAA;IACvB,6BAA6B,EAAE,MAAM,CAAA;IACrC,2BAA2B,EAAE,MAAM,CAAA;IACnC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAA;IAClB,yBAAyB,EAAE,MAAM,CAAA;IACjC;;OAEG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,WAAW,gBAAgB;IAChC;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;CAC9B;AAED,MAAM,WAAW,WAAY,SAAQ,qBAAqB;IACzD,gBAAgB,EAAE,oBAAoB,CAAA;IACtC,YAAY,EAAE,gBAAgB,CAAA;CAC9B;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,IAAI,CAAA;AAElC;;;GAGG;AACH,eAAO,MAAM,0BAA0B,IAAI,CAAA;AAE3C;;;;GAIG;AACH,wBAAsB,0BAA0B,CAAC,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBvF;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAQnF;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhF"}
package/out/schema.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AA+EH;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAA;AAElC;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAA;AAE3C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,EAAuB;IACvE,MAAM,EAAE,CAAC,MAAM;SACb,WAAW,CAAC,kBAAkB,CAAC;SAC/B,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SACnD,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SAC9C,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC;SAC9B,SAAS,CAAC,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SACvD,SAAS,CAAC,iBAAiB,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SAC3D,SAAS,CAAC,+BAA+B,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SACzE,SAAS,CAAC,6BAA6B,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SACvE,SAAS,CAAC,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SACvD,SAAS,CAAC,2BAA2B,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SAClE,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;SAChC,OAAO,EAAE,CAAA;IAEX,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAA;AAC3G,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,EAAuB;IACnE,MAAM,EAAE,CAAC,MAAM;SACb,WAAW,CAAC,cAAc,CAAC;SAC3B,SAAS,CAAC,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;SAC1D,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;SACxB,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC;SAC/B,SAAS,CAAC,iBAAiB,EAAE,MAAM,CAAC;SACpC,OAAO,EAAE,CAAA;AACZ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,EAAuB;IAChE,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAA;AACvG,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../lib/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AA+EH;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAA;AAElC;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAA;AAE3C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,EAAuB;IACvE,MAAM,EAAE,CAAC,MAAM;SACb,WAAW,CAAC,kBAAkB,CAAC;SAC/B,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SACnD,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SAC9C,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC;SAC9B,SAAS,CAAC,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SACvD,SAAS,CAAC,iBAAiB,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SAC3D,SAAS,CAAC,+BAA+B,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SACzE,SAAS,CAAC,6BAA6B,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SACvE,SAAS,CAAC,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SACvD,SAAS,CAAC,2BAA2B,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SAClE,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;SAChC,OAAO,EAAE,CAAA;IAEX,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAA;AAC3G,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,EAAuB;IACnE,MAAM,EAAE,CAAC,MAAM;SACb,WAAW,CAAC,cAAc,CAAC;SAC3B,SAAS,CAAC,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;SAC1D,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;SACxB,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC;SAC/B,SAAS,CAAC,iBAAiB,EAAE,MAAM,CAAC;SACpC,OAAO,EAAE,CAAA;AACZ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,EAAuB;IAChE,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAA;AACvG,CAAC"}
@@ -8,8 +8,7 @@
8
8
  *
9
9
  * Mirrors `mailwoman/gazetteer-pipeline/poi/build-poi.ts`'s shape closely: the same build-tuning
10
10
  * pragmas, the same single-pass `Map<number, number>` coverage aggregation taken during the load
11
- * (no second scan), the same {@link asContractDB} Kysely-invariance cast for the shared
12
- * `@mailwoman/core/layers` calls, and the same `writeLayerManifest` → `sealDatabase` tail.
11
+ * (no second scan), and the same `writeLayerManifest` `sealDatabase` tail.
13
12
  *
14
13
  * Two differences from that precedent, both deliberate:
15
14
  *
@@ -50,11 +49,11 @@
50
49
  * mid-build crash mustn't cost the previously-good artifact, which is exactly the failure mode
51
50
  * the house rule exists for.
52
51
  */
53
- import { DatabaseClient } from "@mailwoman/core/kysley/client";
54
52
  import type { FilerDatabase } from "@mailwoman/filer";
55
53
  import type { ProviderListRow } from "@mailwoman/filer/sdk";
56
- import type { ProviderID } from "./common.ts";
57
- import { type BDCAvailabilityRow } from "./parsing.ts";
54
+ import { DatabaseClient } from "@mailwoman/sqlite/client";
55
+ import type { ProviderID } from "#sdk/common";
56
+ import { type BDCAvailabilityRow } from "#sdk/parsing";
58
57
  /**
59
58
  * The manifest's `attribution` — names the FCC as the source, then copies the Fabric-boundary sentence verbatim from
60
59
  * `bdc/README.md`'s "CostQuest Fabric boundary" section (backticks stripped — this is plain prose, not markdown).
@@ -62,8 +61,8 @@ import { type BDCAvailabilityRow } from "./parsing.ts";
62
61
  export declare const BDC_ATTRIBUTION: string;
63
62
  export interface BuildBDCOptions {
64
63
  /**
65
- * Injected row source — the test seam (mirrors `BuildPOIOptions.rows`). When given, `csvPaths` is ignored and no
66
- * filesystem read happens.
64
+ * Injected row source — the TEST INJECTION POINT (mirrors `BuildPOIOptions.rows`). When given, `csvPaths` is ignored
65
+ * and no filesystem read happens.
67
66
  */
68
67
  rows?: Iterable<BDCAvailabilityRow> | AsyncIterable<BDCAvailabilityRow>;
69
68
  /**
@@ -95,8 +94,8 @@ export interface BuildBDCOptions {
95
94
  * Resolve a 15-char census block GEOID to its centroid. Injected so tests supply a small fixture `Map` lookup instead
96
95
  * of touching a real TIGER database; the real (CLI-wired) implementation is
97
96
  * {@linkcode createTIGERBlockCentroidLookup}, which reads `tabblock20.GEOID` (uppercase — `TIGERBlockTable`) block
98
- * geometry. Returning `undefined` for an unknown geoid is load-bearing: the materialize pass counts it in
99
- * `unknownGeoids` and skips the row — it must NEVER guess a cell.
97
+ * geometry. Returning `undefined` for an unknown geoid is required: the materialize pass counts it in `unknownGeoids`
98
+ * and skips the row — it must NEVER guess a cell.
100
99
  */
101
100
  blockCentroids: (geoid: string) => {
102
101
  lat: number;
@@ -104,9 +103,9 @@ export interface BuildBDCOptions {
104
103
  } | undefined;
105
104
  onProgress?: (message: string) => void;
106
105
  /**
107
- * Provider-list rows ({@link ProviderListRow}, `@mailwoman/filer/sdk`'s `parseProviderList`) — the test/CLI seam for
108
- * populating `bdc_provider` (2a decision 8 / 3a decision 6). When ABSENT (the default), `bdc_provider` stays empty
109
- * and the rest of the build is untouched: every code path this option touches is gated behind `if
106
+ * Provider-list rows ({@link ProviderListRow}, `@mailwoman/filer/sdk`'s `parseProviderList`) — the test/CLI injection
107
+ * point for populating `bdc_provider` (2a decision 8 / 3a decision 6). When ABSENT (the default), `bdc_provider`
108
+ * stays empty and the rest of the build is untouched: every code path this option touches is conditioned behind `if
110
109
  * (options.providers)`, so omitting it changes nothing. When present, `buildBDCDatabase` groups rows by `providerID`
111
110
  * and inserts one `bdc_provider` row per distinct provider — see {@link BuildBDCOptions.filerDB} for how the primary
112
111
  * FRN is picked when a provider carries more than one, and `schema.ts`'s `BDCProviderTable` docstring for the full
@@ -173,7 +172,7 @@ export interface BuildBDCResult {
173
172
  *
174
173
  * `csvPath` is optional and used ONLY to name the offending file in a thrown error (the direct-buffer unit tests call
175
174
  * this without one; {@linkcode readAvailabilityRowsFromCSVPaths} always supplies it). The `Number.isSafeInteger` guard
176
- * below is load-bearing, not defensive dressing: `bdc_stage.provider_id` is `INTEGER NOT NULL`, and a bare
175
+ * below is required, not defensive dressing: `bdc_stage.provider_id` is `INTEGER NOT NULL`, and a bare
177
176
  * `Number.parseInt` on a non-numeric field (a malformed/re-headered/truncated CSV) silently produces `NaN`. `NaN` binds
178
177
  * to that NOT NULL column as SQLite `NULL`, `INSERT OR IGNORE` then drops the row without a constraint error, and every
179
178
  * dropped row gets counted as `deduped` — the ENTIRE file's rows vanish silently, misreported as ordinary dedup. A
@@ -181,11 +180,18 @@ export interface BuildBDCResult {
181
180
  */
182
181
  export declare function peekProviderID(csvBuffer: Buffer, csvPath?: string): ProviderID;
183
182
  /**
184
- * Naive (vertex-average, NOT area-weighted) centroid of a GeoJSON `Polygon`/`MultiPolygon`'s EXTERIOR ring(s) only
185
- * (interior rings/holes are ignored). A known simplification, not an oversight: census blocks are small relative to a
186
- * res-9 H3 cell (~174m edge), so the vertex-average and a proper area-weighted centroid land in the same cell for all
187
- * but pathologically elongated or holed block shapes. A precise area-weighted centroid is a reasonable future upgrade
188
- * if that ever proves wrong in practice no polygon-centroid library is pulled in for this first cut.
183
+ * Area-weighted (shoelace) centroid of a GeoJSON `Polygon`/`MultiPolygon`'s EXTERIOR ring(s), area-weighted across
184
+ * rings for a MultiPolygon. Interior rings/holes are still ignored a hole moves a block's centroid far less than the
185
+ * vertex-density skew this replaces, and only 1.0% of measured blocks carry one.
186
+ *
187
+ * This REPLACED the first version's vertex-average, whose "same res-9 cell for all but pathological shapes" claim was
188
+ * falsified by measurement over every real TIGER 2020 block in LA + Orange county (118,360 blocks, 2026-08-11): the
189
+ * vertex-average landed in a different res-9 cell for 11.6% of blocks, p99 displacement 286 m (past the ~174 m cell
190
+ * edge), max 3.7 km — the tail is TIGER's elongated rural/mountain blocks, whose boundary vertices cluster on the
191
+ * squiggly natural edge and drag a vertex-average toward it.
192
+ *
193
+ * A degenerate geometry with zero total ring area (a sliver the shoelace annihilates) falls back to the vertex average
194
+ * — a weaker answer beats none, and the fallback is exactly the old behavior.
189
195
  *
190
196
  * Returns `undefined` for anything that doesn't parse as one of the two geometry types (including `null` geometry).
191
197
  */
@@ -195,16 +201,17 @@ export declare function geometryCentroid(geometryJSON: string | null): {
195
201
  } | undefined;
196
202
  /**
197
203
  * The production `blockCentroids` supplier: opens the TIGER blocks database READ-ONLY and probes `tabblock20.GEOID`
198
- * (uppercase) per lookup, decoding its GeoJSON `geometry` column via {@linkcode geometryCentroid}. Kept synchronous
199
- * `BuildBDCOptions.blockCentroids` is a plain sync function (the same sync-by-interface discipline AGENTS.md documents
200
- * for the resolver ladder), so this uses `node:sqlite`'s raw `.prepare()`/`.get()` directly rather than Kysely. The
201
- * connection is left open for the caller's process lifetime (a read-path lookup, not a build) same lifecycle as the
202
- * resolver-wof-sqlite lookups.
204
+ * (uppercase) per lookup, decoding its GeoJSON `geometry` column via {@linkcode geometryCentroid}. The factory awaits
205
+ * its read-only open; the per-lookup probe and the `BuildBDCOptions.blockCentroids` interface stay synchronous — a
206
+ * plain sync function (the same sync-by-interface discipline AGENTS.md documents for the resolver ladder), so the
207
+ * returned closure uses `node:sqlite`'s raw `.prepare()`/`.get()` directly rather than Kysely. The connection is left
208
+ * open for the caller's process lifetime (a read-path lookup, not a build) — same lifecycle as the resolver-wof-sqlite
209
+ * lookups.
203
210
  */
204
- export declare function createTIGERBlockCentroidLookup(tigerDBPath: string): (geoid: string) => {
211
+ export declare function createTIGERBlockCentroidLookup(tigerDBPath: string): Promise<(geoid: string) => {
205
212
  lat: number;
206
213
  lon: number;
207
- } | undefined;
214
+ } | undefined>;
208
215
  /**
209
216
  * Build `bdc.db`: stage (raw dedup) → materialize (resolve `h3_cell` per geoid, skip+count unknown geoids) → drop stage
210
217
  * → geoid index (index-after-load) → coverage → layer manifest → seal → atomic move-into-place. See the module
@@ -1 +1 @@
1
- {"version":3,"file":"build-bdc.d.ts","sourceRoot":"","sources":["../../sdk/build-bdc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AAOH,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAY9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAKrD,OAAO,KAAK,EAAO,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAchE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAQ5E;;;GAGG;AACH,eAAO,MAAM,eAAe,QAEqF,CAAA;AAEjH,MAAM,WAAW,eAAe;IAC/B;;;OAGG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GAAG,aAAa,CAAC,kBAAkB,CAAC,CAAA;IACvE;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAA;IACX;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B;;;;;;OAMG;IACH,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAA;IAC3E,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,aAAa,CAAC,eAAe,CAAC,CAAA;IACtE;;;;;;;;;OASG;IACH,OAAO,CAAC,EAAE,cAAc,CAAC,aAAa,CAAC,CAAA;IACvC;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,cAAc;IAC9B,GAAG,EAAE,MAAM,CAAA;IACX;;;;;;OAMG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IACf;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAA;IACrB;;;OAGG;IACH,kBAAkB,EAAE,MAAM,CAAA;CAC1B;AAsDD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,CA+B9E;AA8BD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAkCtG;AAED;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAC7C,WAAW,EAAE,MAAM,GACjB,CAAC,KAAK,EAAE,MAAM,KAAK;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAS7D;AAmHD;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CA6RxF"}
1
+ {"version":3,"file":"build-bdc.d.ts","sourceRoot":"","sources":["../../lib/sdk/build-bdc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAcH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAMrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAG3D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAgBzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAQ5E;;;GAGG;AACH,eAAO,MAAM,eAAe,QAEqF,CAAA;AAEjH,MAAM,WAAW,eAAe;IAC/B;;;OAGG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GAAG,aAAa,CAAC,kBAAkB,CAAC,CAAA;IACvE;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAA;IACX;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B;;;;;;OAMG;IACH,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAA;IAC3E,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,aAAa,CAAC,eAAe,CAAC,CAAA;IACtE;;;;;;;;;OASG;IACH,OAAO,CAAC,EAAE,cAAc,CAAC,aAAa,CAAC,CAAA;IACvC;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,cAAc;IAC9B,GAAG,EAAE,MAAM,CAAA;IACX;;;;;;OAMG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IACf;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAA;IACrB;;;OAGG;IACH,kBAAkB,EAAE,MAAM,CAAA;CAC1B;AA4CD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,CA+B9E;AAuCD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CA8DtG;AAED;;;;;;;;GAQG;AACH,wBAAsB,8BAA8B,CACnD,WAAW,EAAE,MAAM,GACjB,OAAO,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CAStE;AAsHD;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAoSxF"}