@civitai/blocks-react 0.9.0 → 0.10.1
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/dist/internal/mockHost.d.ts +176 -11
- package/dist/internal/mockHost.d.ts.map +1 -1
- package/dist/internal/mockHost.js +385 -36
- package/dist/internal/mockHost.js.map +1 -1
- package/dist/testing.d.ts +1 -1
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +6 -1
- package/dist/testing.js.map +1 -1
- package/package.json +1 -1
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
* a block in a cross-origin iframe and answers its `postMessage` protocol:
|
|
7
7
|
* mints a token, runs the lazy-consent round-trip, brokers the orchestrator
|
|
8
8
|
* money path (estimate → submit → poll), opens the native Buzz-purchase and
|
|
9
|
-
* resource-picker modals
|
|
10
|
-
* harness — there is no host, so this plays
|
|
9
|
+
* resource-picker modals, and serves the App-Blocks KV datastore. Locally — in
|
|
10
|
+
* a `vitest` test OR a starter's dev harness — there is no host, so this plays
|
|
11
|
+
* one.
|
|
11
12
|
*
|
|
12
13
|
* It is the portable core that the React `<Harness>` (a.k.a. `<MockHostProvider>`
|
|
13
14
|
* in `../testing`) wraps. Every block app used to hand-roll ~250 lines of this;
|
|
@@ -22,10 +23,21 @@
|
|
|
22
23
|
* `window.location.origin` (the React `<Harness>` is documented for that).
|
|
23
24
|
* 3. Dispatches a configurable `BLOCK_INIT`, then answers the full protocol.
|
|
24
25
|
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
26
|
+
* SCENARIOS (Layer 1 of the local-dev DX): the {@link MockHostOptions.generation},
|
|
27
|
+
* {@link MockHostOptions.buzz}, and {@link MockHostOptions.storage} groups let a
|
|
28
|
+
* dev simulate REAL costs, slow gens, FAILURES, an insufficient-Buzz balance,
|
|
29
|
+
* and a working KV store with a quota — entirely synthetically, so the full
|
|
30
|
+
* money / error / storage UX is exercisable locally without spending a single
|
|
31
|
+
* Buzz or touching the network. The returned {@link MockHost} exposes
|
|
32
|
+
* `setScenario()` + a `buzz` handle so a harness UI can flip scenarios
|
|
33
|
+
* mid-session.
|
|
34
|
+
*
|
|
35
|
+
* PURE + SYNTHETIC: NOT a real RS256 JWT, NO real Buzz, NO orchestrator, and
|
|
36
|
+
* — asserted by the test suite — NO network (`fetch`/`XMLHttpRequest` are never
|
|
37
|
+
* called). Only the postMessage bridge round-trips are exercised. Never import
|
|
38
|
+
* this from production code.
|
|
27
39
|
*/
|
|
28
|
-
import { type BlockContext, type BlockResourceInfo, type BlockResourcePickerType, type ColorDomain, type Theme, type ViewerInfo } from '@civitai/app-sdk/blocks';
|
|
40
|
+
import { type BlockContext, type BlockResourceInfo, type BlockResourcePickerType, type ColorDomain, type Theme, type ViewerInfo, type WorkflowBody } from '@civitai/app-sdk/blocks';
|
|
29
41
|
/**
|
|
30
42
|
* How submits resolve. `'none'` = everything succeeds; `'all'` /
|
|
31
43
|
* `'insufficient'` = every submit returns an insufficient-Buzz `failed`
|
|
@@ -40,10 +52,111 @@ export type MockHostFailMode = 'none' | 'some' | 'all' | 'insufficient';
|
|
|
40
52
|
* user-dismissed picker (→ `RESOURCE_PICKER_RESULT` with no `selected`).
|
|
41
53
|
*/
|
|
42
54
|
export type CannedPick = BlockResourceInfo;
|
|
55
|
+
/**
|
|
56
|
+
* A per-generation cost: a fixed number, or a function of the submitted
|
|
57
|
+
* {@link WorkflowBody} (so a dev can vary cost by model / step count).
|
|
58
|
+
*/
|
|
59
|
+
export type CostSpec = number | ((req: WorkflowBody) => number);
|
|
60
|
+
/**
|
|
61
|
+
* A result image url: a fixed string, or a function of the submitted body
|
|
62
|
+
* (so a dev can echo the prompt into a placeholder).
|
|
63
|
+
*/
|
|
64
|
+
export type ImageSpec = string | ((req: WorkflowBody) => string);
|
|
65
|
+
/**
|
|
66
|
+
* GENERATION scenario controls — simulate real costs, slow gens, and failures
|
|
67
|
+
* on the orchestrator money path WITHOUT a real orchestrator. All optional.
|
|
68
|
+
*/
|
|
69
|
+
export interface MockGenerationScenario {
|
|
70
|
+
/**
|
|
71
|
+
* Cost reported on `ESTIMATE_RESULT` + the succeeded snapshot. A number, or
|
|
72
|
+
* a `(body) => number`. Overrides the legacy top-level `cost`. Default `8`.
|
|
73
|
+
*/
|
|
74
|
+
costPerGen?: CostSpec;
|
|
75
|
+
/**
|
|
76
|
+
* Synthetic latency before the SUBMITTED→succeeded transition lands, in ms.
|
|
77
|
+
* A single number, or a `[min, max]` range (uniform random). Applied to the
|
|
78
|
+
* poll that flips a workflow to `succeeded`. Default `0` (immediate).
|
|
79
|
+
*/
|
|
80
|
+
latencyMs?: number | [number, number];
|
|
81
|
+
/**
|
|
82
|
+
* Probability (0..1) that any given submit fails with a generic generation
|
|
83
|
+
* error. Independent of {@link failRate}'s sibling controls. Default `0`.
|
|
84
|
+
*/
|
|
85
|
+
failRate?: number;
|
|
86
|
+
/**
|
|
87
|
+
* Force the next N submits to fail (counts down). Deterministic companion to
|
|
88
|
+
* {@link failRate} — handy for "first try fails, retry succeeds" UX tests.
|
|
89
|
+
*/
|
|
90
|
+
failNext?: number;
|
|
91
|
+
/** A single result image url (or `(body) => url`). */
|
|
92
|
+
image?: ImageSpec;
|
|
93
|
+
/**
|
|
94
|
+
* Multiple result image urls (or `(body) => url[]`). Takes precedence over
|
|
95
|
+
* {@link image} when both are set.
|
|
96
|
+
*/
|
|
97
|
+
images?: string[] | ((req: WorkflowBody) => string[]);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* BUZZ scenario controls — simulate a balance so the insufficient-Buzz / top-up
|
|
101
|
+
* UX is exercisable. The mock host treats `balance` as a spendable wallet:
|
|
102
|
+
* each succeeding generation DEBITS its cost; a submit whose cost would exceed
|
|
103
|
+
* the remaining balance resolves to an insufficient-Buzz `failed` snapshot
|
|
104
|
+
* (exercising the Top-Up CTA), and `OPEN_BUZZ_PURCHASE` REFILLS the balance.
|
|
105
|
+
*/
|
|
106
|
+
export interface MockBuzzScenario {
|
|
107
|
+
/**
|
|
108
|
+
* Simulated spendable balance. When set, generations debit against it and a
|
|
109
|
+
* gen that would exceed it returns an insufficient-Buzz outcome. When
|
|
110
|
+
* `undefined`, balance is NOT simulated (back-compat: only the legacy
|
|
111
|
+
* `failMode` drives insufficiency).
|
|
112
|
+
*/
|
|
113
|
+
balance?: number;
|
|
114
|
+
/**
|
|
115
|
+
* Force every submit down the insufficient-Buzz path regardless of balance.
|
|
116
|
+
* Equivalent to the legacy `failMode: 'insufficient'`; provided here so the
|
|
117
|
+
* insufficient UX is reachable from the `buzz` group alone.
|
|
118
|
+
*/
|
|
119
|
+
insufficient?: boolean;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* STORAGE scenario controls — drive the in-memory KV backend that answers the
|
|
123
|
+
* `APP_STORAGE_*` protocol, so the W4 KV apps (e.g. Prompt Library) can test
|
|
124
|
+
* load / quota / error states against `createMockHost` directly instead of
|
|
125
|
+
* hand-injecting a fake store.
|
|
126
|
+
*/
|
|
127
|
+
export interface MockStorageScenario {
|
|
128
|
+
/**
|
|
129
|
+
* Initial KV contents (key → JSON value) the store is seeded with. `get`
|
|
130
|
+
* returns these immediately; they count against the simulated quota.
|
|
131
|
+
*/
|
|
132
|
+
seed?: Record<string, unknown>;
|
|
133
|
+
/**
|
|
134
|
+
* Simulated per-app quota in bytes. A `set` that would cross it resolves
|
|
135
|
+
* `{ ok: false, error: 'PAYLOAD_TOO_LARGE' }` (the host doesn't leak which
|
|
136
|
+
* cap tripped). Default 50 MB.
|
|
137
|
+
*/
|
|
138
|
+
quotaBytes?: number;
|
|
139
|
+
/**
|
|
140
|
+
* Per-value byte cap. A `set` whose serialized value exceeds it resolves
|
|
141
|
+
* `{ ok: false, error: 'PAYLOAD_TOO_LARGE' }`. Default 64 KB.
|
|
142
|
+
*/
|
|
143
|
+
valueCapBytes?: number;
|
|
144
|
+
/** Simulated row ceiling reported by `getQuota`. Default 1,000,000. */
|
|
145
|
+
limitRows?: number;
|
|
146
|
+
/**
|
|
147
|
+
* Force the next N storage MUTATIONS (`set`/`delete`) to fail with a generic
|
|
148
|
+
* `STORAGE_UNAVAILABLE` error (counts down) — exercises the error UX.
|
|
149
|
+
*/
|
|
150
|
+
failNext?: number;
|
|
151
|
+
}
|
|
43
152
|
/**
|
|
44
153
|
* Drives `createMockHost`. Every field is optional with a sensible default so
|
|
45
154
|
* `createMockHost()` works out of the box. Each block configures SCENARIOS
|
|
46
155
|
* here instead of forking the host code.
|
|
156
|
+
*
|
|
157
|
+
* Backward-compatible: the legacy top-level `cost`/`failMode`/`buzzBudget`/
|
|
158
|
+
* `pollsUntilDone` knobs still work. When BOTH a legacy knob and its scenario
|
|
159
|
+
* equivalent are set, the SCENARIO wins (it's the newer, richer control).
|
|
47
160
|
*/
|
|
48
161
|
export interface MockHostOptions {
|
|
49
162
|
/**
|
|
@@ -68,10 +181,30 @@ export interface MockHostOptions {
|
|
|
68
181
|
cannedPicks?: Partial<Record<BlockResourcePickerType, CannedPick | null>>;
|
|
69
182
|
/** Number of `POLL_WORKFLOW` round-trips before a workflow succeeds. Default 2. */
|
|
70
183
|
pollsUntilDone?: number;
|
|
71
|
-
/**
|
|
184
|
+
/**
|
|
185
|
+
* The `cost.total` reported on estimate + succeeded snapshots. Default 8.
|
|
186
|
+
* @deprecated Prefer {@link MockGenerationScenario.costPerGen} on `generation`.
|
|
187
|
+
*/
|
|
72
188
|
cost?: number;
|
|
73
189
|
/** The Buzz budget reported on a granted token. Default 200. */
|
|
74
190
|
buzzBudget?: number;
|
|
191
|
+
/**
|
|
192
|
+
* GENERATION scenario: cost / latency / failure / result-image controls. See
|
|
193
|
+
* {@link MockGenerationScenario}.
|
|
194
|
+
*/
|
|
195
|
+
generation?: MockGenerationScenario;
|
|
196
|
+
/**
|
|
197
|
+
* BUZZ scenario: simulated balance + force-insufficient. See
|
|
198
|
+
* {@link MockBuzzScenario}.
|
|
199
|
+
*/
|
|
200
|
+
buzz?: MockBuzzScenario;
|
|
201
|
+
/**
|
|
202
|
+
* STORAGE scenario: in-memory KV backend (seed / quota / failNext). See
|
|
203
|
+
* {@link MockStorageScenario}. When omitted, the store starts EMPTY with the
|
|
204
|
+
* v0 defaults — `APP_STORAGE_*` is answered either way (the mock host always
|
|
205
|
+
* serves storage now).
|
|
206
|
+
*/
|
|
207
|
+
storage?: MockStorageScenario;
|
|
75
208
|
/** Host theme delivered in `BLOCK_INIT` + context. Default `'dark'`. */
|
|
76
209
|
theme?: Theme;
|
|
77
210
|
/**
|
|
@@ -122,16 +255,46 @@ export interface MockHostOptions {
|
|
|
122
255
|
*/
|
|
123
256
|
window?: Window & typeof globalThis;
|
|
124
257
|
}
|
|
125
|
-
/**
|
|
126
|
-
*
|
|
127
|
-
*
|
|
128
|
-
*
|
|
258
|
+
/**
|
|
259
|
+
* The mutable slice of {@link MockHostOptions} a harness UI can flip mid-session
|
|
260
|
+
* via {@link MockHost.setScenario}. (Identity/init-only fields like `viewer`,
|
|
261
|
+
* `context`, `theme`, and `appId` are fixed at install time — change them by
|
|
262
|
+
* re-installing.)
|
|
263
|
+
*/
|
|
264
|
+
export type MockHostScenarioPatch = Pick<MockHostOptions, 'failMode' | 'cost' | 'pollsUntilDone' | 'cannedPicks' | 'generation' | 'buzz' | 'storage'>;
|
|
265
|
+
/** Runtime Buzz-balance handle exposed on {@link MockHost.buzz}. */
|
|
266
|
+
export interface MockBuzzHandle {
|
|
267
|
+
/** Current simulated balance, or `undefined` when balance isn't simulated. */
|
|
268
|
+
getBalance: () => number | undefined;
|
|
269
|
+
/** Set (or start simulating) the balance. Pass `undefined` to stop simulating. */
|
|
270
|
+
setBalance: (n: number | undefined) => void;
|
|
271
|
+
}
|
|
272
|
+
/** Handle returned by {@link createMockHost}.
|
|
273
|
+
*
|
|
274
|
+
* Call `install()` to patch the host in; it returns the `uninstall()` that
|
|
275
|
+
* restores `window.parent` and removes timers (so the historical
|
|
276
|
+
* `const uninstall = createMockHost(opts).install()` keeps working unchanged).
|
|
277
|
+
*
|
|
278
|
+
* After install, a harness UI can drive scenarios live:
|
|
279
|
+
* - `setScenario(patch)` — merge new generation/buzz/storage/failMode controls.
|
|
280
|
+
* - `buzz.setBalance(n)` / `buzz.getBalance()` — flip the simulated wallet.
|
|
281
|
+
*
|
|
282
|
+
* `install()` is idempotent — calling it twice returns the same teardown;
|
|
283
|
+
* `uninstall()` is safe to call more than once. */
|
|
129
284
|
export interface MockHost {
|
|
130
285
|
install: () => () => void;
|
|
286
|
+
/** Merge a partial scenario into the live mock host (no re-install). */
|
|
287
|
+
setScenario: (patch: MockHostScenarioPatch) => void;
|
|
288
|
+
/** Runtime Buzz-balance control for a harness UI. */
|
|
289
|
+
buzz: MockBuzzHandle;
|
|
131
290
|
}
|
|
132
291
|
/**
|
|
133
292
|
* Reads the URL query toggles the gen-matrix dev harness uses, so a starter's
|
|
134
293
|
* dev harness keeps working with `?viewer/?consent/?fail/?theme/?pick/?pickCkpt`.
|
|
294
|
+
* Layer-1 additions: `?balance/?latency/?costPerGen/?failNext/?failRate/?seed`
|
|
295
|
+
* map onto the new scenario groups so a dev can flip insufficient-buzz /
|
|
296
|
+
* failures / latency without editing code.
|
|
297
|
+
*
|
|
135
298
|
* Returns a partial overlay applied ON TOP of explicit {@link MockHostOptions}
|
|
136
299
|
* (URL wins — it's the interactive dev knob). No-op outside a browser.
|
|
137
300
|
*/
|
|
@@ -143,9 +306,11 @@ export declare function readMockHostUrlOptions(win?: (Window & typeof globalThis
|
|
|
143
306
|
* from a node/jsdom/happy-dom test OR a browser dev harness.
|
|
144
307
|
*
|
|
145
308
|
* @example
|
|
146
|
-
* const host = createMockHost({
|
|
309
|
+
* const host = createMockHost({ generation: { failNext: 1, latencyMs: 1500 }, buzz: { balance: 5 } });
|
|
147
310
|
* const uninstall = host.install();
|
|
148
311
|
* // … drive the block / assertions …
|
|
312
|
+
* host.buzz.setBalance(0); // flip to insufficient mid-session
|
|
313
|
+
* host.setScenario({ generation: { failRate: 1 } });
|
|
149
314
|
* uninstall();
|
|
150
315
|
*/
|
|
151
316
|
export declare function createMockHost(options?: MockHostOptions): MockHost;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mockHost.d.ts","sourceRoot":"","sources":["../../src/internal/mockHost.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"mockHost.d.ts","sourceRoot":"","sources":["../../src/internal/mockHost.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
* a block in a cross-origin iframe and answers its `postMessage` protocol:
|
|
7
7
|
* mints a token, runs the lazy-consent round-trip, brokers the orchestrator
|
|
8
8
|
* money path (estimate → submit → poll), opens the native Buzz-purchase and
|
|
9
|
-
* resource-picker modals
|
|
10
|
-
* harness — there is no host, so this plays
|
|
9
|
+
* resource-picker modals, and serves the App-Blocks KV datastore. Locally — in
|
|
10
|
+
* a `vitest` test OR a starter's dev harness — there is no host, so this plays
|
|
11
|
+
* one.
|
|
11
12
|
*
|
|
12
13
|
* It is the portable core that the React `<Harness>` (a.k.a. `<MockHostProvider>`
|
|
13
14
|
* in `../testing`) wraps. Every block app used to hand-roll ~250 lines of this;
|
|
@@ -22,8 +23,19 @@
|
|
|
22
23
|
* `window.location.origin` (the React `<Harness>` is documented for that).
|
|
23
24
|
* 3. Dispatches a configurable `BLOCK_INIT`, then answers the full protocol.
|
|
24
25
|
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
26
|
+
* SCENARIOS (Layer 1 of the local-dev DX): the {@link MockHostOptions.generation},
|
|
27
|
+
* {@link MockHostOptions.buzz}, and {@link MockHostOptions.storage} groups let a
|
|
28
|
+
* dev simulate REAL costs, slow gens, FAILURES, an insufficient-Buzz balance,
|
|
29
|
+
* and a working KV store with a quota — entirely synthetically, so the full
|
|
30
|
+
* money / error / storage UX is exercisable locally without spending a single
|
|
31
|
+
* Buzz or touching the network. The returned {@link MockHost} exposes
|
|
32
|
+
* `setScenario()` + a `buzz` handle so a harness UI can flip scenarios
|
|
33
|
+
* mid-session.
|
|
34
|
+
*
|
|
35
|
+
* PURE + SYNTHETIC: NOT a real RS256 JWT, NO real Buzz, NO orchestrator, and
|
|
36
|
+
* — asserted by the test suite — NO network (`fetch`/`XMLHttpRequest` are never
|
|
37
|
+
* called). Only the postMessage bridge round-trips are exercised. Never import
|
|
38
|
+
* this from production code.
|
|
27
39
|
*/
|
|
28
40
|
import { BrowsingLevel, SFW_LEVELS, } from '@civitai/app-sdk/blocks';
|
|
29
41
|
/** The full all-levels ceiling a `red` domain projects (mirrors the server). */
|
|
@@ -34,6 +46,10 @@ const ALL_LEVELS = BrowsingLevel.PG |
|
|
|
34
46
|
BrowsingLevel.XXX;
|
|
35
47
|
const DEV_TOKEN = 'dev.mockhost.mock.jwt.NOT.A.REAL.RS256';
|
|
36
48
|
const BUDGETED_SCOPE = 'ai:write:budgeted';
|
|
49
|
+
/** v0 host storage ceilings (mirror civitai/civitai's APP_STORAGE limits). */
|
|
50
|
+
const DEFAULT_STORAGE_QUOTA_BYTES = 50 * 1024 * 1024; // 50 MB per app
|
|
51
|
+
const DEFAULT_STORAGE_VALUE_CAP_BYTES = 64 * 1024; // 64 KB per value
|
|
52
|
+
const DEFAULT_STORAGE_LIMIT_ROWS = 1_000_000;
|
|
37
53
|
const DEFAULT_CHECKPOINT_PICK = {
|
|
38
54
|
versionId: 691639,
|
|
39
55
|
modelId: 618692,
|
|
@@ -51,9 +67,24 @@ const DEFAULT_LORA_PICK = {
|
|
|
51
67
|
modelType: 'LORA',
|
|
52
68
|
};
|
|
53
69
|
const DEFAULT_VIEWER = { id: 2, username: 'dev-viewer', status: 'active' };
|
|
70
|
+
const INSUFFICIENT_BUZZ_ERROR = 'Insufficient Buzz to run this generation.';
|
|
71
|
+
const GENERIC_GEN_ERROR = 'Generation failed (simulated).';
|
|
72
|
+
/** Byte size of a JSON value as the mock store would persist it. */
|
|
73
|
+
function jsonByteSize(value) {
|
|
74
|
+
try {
|
|
75
|
+
return new TextEncoder().encode(JSON.stringify(value ?? null)).length;
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return 0;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
54
81
|
/**
|
|
55
82
|
* Reads the URL query toggles the gen-matrix dev harness uses, so a starter's
|
|
56
83
|
* dev harness keeps working with `?viewer/?consent/?fail/?theme/?pick/?pickCkpt`.
|
|
84
|
+
* Layer-1 additions: `?balance/?latency/?costPerGen/?failNext/?failRate/?seed`
|
|
85
|
+
* map onto the new scenario groups so a dev can flip insufficient-buzz /
|
|
86
|
+
* failures / latency without editing code.
|
|
87
|
+
*
|
|
57
88
|
* Returns a partial overlay applied ON TOP of explicit {@link MockHostOptions}
|
|
58
89
|
* (URL wins — it's the interactive dev knob). No-op outside a browser.
|
|
59
90
|
*/
|
|
@@ -108,6 +139,56 @@ export function readMockHostUrlOptions(win = globalThis
|
|
|
108
139
|
cannedPicks.Checkpoint = DEFAULT_CHECKPOINT_PICK;
|
|
109
140
|
out.cannedPicks = cannedPicks;
|
|
110
141
|
}
|
|
142
|
+
// --- Layer-1 scenario toggles ---
|
|
143
|
+
const generation = {};
|
|
144
|
+
const buzz = {};
|
|
145
|
+
const balance = params.get('balance');
|
|
146
|
+
if (balance !== null && balance.trim() !== '' && Number.isFinite(Number(balance))) {
|
|
147
|
+
buzz.balance = Number(balance);
|
|
148
|
+
}
|
|
149
|
+
if (params.get('insufficient') === '1' || params.get('insufficient') === 'true') {
|
|
150
|
+
buzz.insufficient = true;
|
|
151
|
+
}
|
|
152
|
+
const latency = params.get('latency');
|
|
153
|
+
if (latency !== null && latency.trim() !== '') {
|
|
154
|
+
// ?latency=2000 or ?latency=500-2000
|
|
155
|
+
const range = latency.split('-').map((s) => Number(s.trim()));
|
|
156
|
+
const lo = range[0] ?? NaN;
|
|
157
|
+
const hi = range[1] ?? NaN;
|
|
158
|
+
if (range.length === 2 && Number.isFinite(lo) && Number.isFinite(hi)) {
|
|
159
|
+
generation.latencyMs = [lo, hi];
|
|
160
|
+
}
|
|
161
|
+
else if (Number.isFinite(lo)) {
|
|
162
|
+
generation.latencyMs = lo;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
const costPerGen = params.get('costPerGen') ?? params.get('cost');
|
|
166
|
+
if (costPerGen !== null && Number.isFinite(Number(costPerGen))) {
|
|
167
|
+
generation.costPerGen = Number(costPerGen);
|
|
168
|
+
}
|
|
169
|
+
const failNext = params.get('failNext');
|
|
170
|
+
if (failNext !== null && Number.isInteger(Number(failNext))) {
|
|
171
|
+
generation.failNext = Number(failNext);
|
|
172
|
+
}
|
|
173
|
+
const failRate = params.get('failRate');
|
|
174
|
+
if (failRate !== null && Number.isFinite(Number(failRate))) {
|
|
175
|
+
generation.failRate = Number(failRate);
|
|
176
|
+
}
|
|
177
|
+
if (Object.keys(generation).length > 0)
|
|
178
|
+
out.generation = generation;
|
|
179
|
+
if (Object.keys(buzz).length > 0)
|
|
180
|
+
out.buzz = buzz;
|
|
181
|
+
const seed = params.get('seed');
|
|
182
|
+
if (seed) {
|
|
183
|
+
try {
|
|
184
|
+
const parsed = JSON.parse(seed);
|
|
185
|
+
if (parsed && typeof parsed === 'object')
|
|
186
|
+
out.storage = { seed: parsed };
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
/* ignore malformed ?seed= */
|
|
190
|
+
}
|
|
191
|
+
}
|
|
111
192
|
return out;
|
|
112
193
|
}
|
|
113
194
|
/**
|
|
@@ -117,9 +198,11 @@ export function readMockHostUrlOptions(win = globalThis
|
|
|
117
198
|
* from a node/jsdom/happy-dom test OR a browser dev harness.
|
|
118
199
|
*
|
|
119
200
|
* @example
|
|
120
|
-
* const host = createMockHost({
|
|
201
|
+
* const host = createMockHost({ generation: { failNext: 1, latencyMs: 1500 }, buzz: { balance: 5 } });
|
|
121
202
|
* const uninstall = host.install();
|
|
122
203
|
* // … drive the block / assertions …
|
|
204
|
+
* host.buzz.setBalance(0); // flip to insufficient mid-session
|
|
205
|
+
* host.setScenario({ generation: { failRate: 1 } });
|
|
123
206
|
* uninstall();
|
|
124
207
|
*/
|
|
125
208
|
export function createMockHost(options = {}) {
|
|
@@ -130,15 +213,62 @@ export function createMockHost(options = {}) {
|
|
|
130
213
|
// Bind to a non-nullable local so the `install()` closure keeps the narrowing.
|
|
131
214
|
const win = maybeWin;
|
|
132
215
|
const viewer = options.viewer === undefined ? DEFAULT_VIEWER : options.viewer;
|
|
133
|
-
const failMode = options.failMode ?? 'none';
|
|
134
|
-
const pollsUntilDone = options.pollsUntilDone ?? 2;
|
|
135
|
-
const cost = options.cost ?? 8;
|
|
136
216
|
const buzzBudget = options.buzzBudget ?? 200;
|
|
137
217
|
const theme = options.theme ?? 'dark';
|
|
138
|
-
const cannedPicks = options.cannedPicks ?? { Checkpoint: DEFAULT_CHECKPOINT_PICK, LORA: DEFAULT_LORA_PICK };
|
|
139
218
|
const blockInstanceId = options.blockInstanceId ?? 'page_mock';
|
|
140
219
|
const blockId = options.blockId ?? 'mock-block';
|
|
141
220
|
const appId = options.appId ?? 'app_dev';
|
|
221
|
+
// ---- LIVE, mutable scenario state (so setScenario / buzz.setBalance work) ----
|
|
222
|
+
// Legacy + scenario knobs are merged into one mutable record; `setScenario`
|
|
223
|
+
// rewrites these in place without re-installing.
|
|
224
|
+
let failMode = options.failMode ?? 'none';
|
|
225
|
+
let pollsUntilDone = options.pollsUntilDone ?? 2;
|
|
226
|
+
let gen = { ...(options.generation ?? {}) };
|
|
227
|
+
let buzz = { ...(options.buzz ?? {}) };
|
|
228
|
+
// Legacy `cost` feeds costPerGen unless the scenario set its own.
|
|
229
|
+
let legacyCost = options.cost ?? 8;
|
|
230
|
+
let cannedPicks = options.cannedPicks ?? { Checkpoint: DEFAULT_CHECKPOINT_PICK, LORA: DEFAULT_LORA_PICK };
|
|
231
|
+
// ---- Storage scenario (in-memory KV backend) ----
|
|
232
|
+
const storageScenario = { ...(options.storage ?? {}) };
|
|
233
|
+
const store = new Map();
|
|
234
|
+
const seedNow = new Date().toISOString();
|
|
235
|
+
for (const [k, v] of Object.entries(storageScenario.seed ?? {})) {
|
|
236
|
+
store.set(k, { value: v, updatedAt: seedNow });
|
|
237
|
+
}
|
|
238
|
+
let storageFailNext = storageScenario.failNext ?? 0;
|
|
239
|
+
const quotaBytes = storageScenario.quotaBytes ?? DEFAULT_STORAGE_QUOTA_BYTES;
|
|
240
|
+
const valueCapBytes = storageScenario.valueCapBytes ?? DEFAULT_STORAGE_VALUE_CAP_BYTES;
|
|
241
|
+
const limitRows = storageScenario.limitRows ?? DEFAULT_STORAGE_LIMIT_ROWS;
|
|
242
|
+
const usedBytes = () => {
|
|
243
|
+
let total = 0;
|
|
244
|
+
for (const [k, row] of store)
|
|
245
|
+
total += jsonByteSize(row.value) + k.length;
|
|
246
|
+
return total;
|
|
247
|
+
};
|
|
248
|
+
// Resolve a per-gen cost from the scenario (or legacy `cost`).
|
|
249
|
+
const costFor = (body) => {
|
|
250
|
+
const spec = gen.costPerGen ?? legacyCost;
|
|
251
|
+
return typeof spec === 'function' ? spec(body) : (spec ?? legacyCost);
|
|
252
|
+
};
|
|
253
|
+
const latencyFor = () => {
|
|
254
|
+
const l = gen.latencyMs;
|
|
255
|
+
if (l === undefined)
|
|
256
|
+
return 0;
|
|
257
|
+
if (Array.isArray(l)) {
|
|
258
|
+
const [min, max] = l;
|
|
259
|
+
return Math.round(min + Math.random() * Math.max(0, max - min));
|
|
260
|
+
}
|
|
261
|
+
return l;
|
|
262
|
+
};
|
|
263
|
+
const imagesFor = (workflowId, body) => {
|
|
264
|
+
if (gen.images)
|
|
265
|
+
return typeof gen.images === 'function' ? gen.images(body) : gen.images;
|
|
266
|
+
if (gen.image)
|
|
267
|
+
return [typeof gen.image === 'function' ? gen.image(body) : gen.image];
|
|
268
|
+
return [
|
|
269
|
+
`https://placehold.co/512x512/1971c2/ffffff/png?text=${encodeURIComponent(workflowId.slice(-4))}`,
|
|
270
|
+
];
|
|
271
|
+
};
|
|
142
272
|
let installed = false;
|
|
143
273
|
let teardown = () => { };
|
|
144
274
|
function install() {
|
|
@@ -150,11 +280,19 @@ export function createMockHost(options = {}) {
|
|
|
150
280
|
let consentGranted = !!options.consentGranted;
|
|
151
281
|
let tokenSerial = 0;
|
|
152
282
|
let submitCount = 0;
|
|
283
|
+
// body + cost remembered per workflow so the succeeded snapshot can echo them.
|
|
153
284
|
const workflows = new Map();
|
|
154
285
|
const timers = new Set();
|
|
155
286
|
const dispatchToBlock = (data) => {
|
|
156
287
|
win.dispatchEvent(new MessageEvent('message', { data, origin: parentOrigin }));
|
|
157
288
|
};
|
|
289
|
+
const after = (ms, fn) => {
|
|
290
|
+
const t = setTimeout(() => {
|
|
291
|
+
timers.delete(t);
|
|
292
|
+
fn();
|
|
293
|
+
}, ms);
|
|
294
|
+
timers.add(t);
|
|
295
|
+
};
|
|
158
296
|
const nextToken = () => {
|
|
159
297
|
tokenSerial += 1;
|
|
160
298
|
return {
|
|
@@ -164,14 +302,17 @@ export function createMockHost(options = {}) {
|
|
|
164
302
|
...(consentGranted ? { buzzBudget } : {}),
|
|
165
303
|
};
|
|
166
304
|
};
|
|
167
|
-
const succeededSnapshot = (workflowId) =>
|
|
168
|
-
workflowId
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
305
|
+
const succeededSnapshot = (workflowId) => {
|
|
306
|
+
const wf = workflows.get(workflowId);
|
|
307
|
+
const cost = wf?.cost ?? legacyCost;
|
|
308
|
+
const body = wf?.body ?? {};
|
|
309
|
+
return {
|
|
310
|
+
workflowId,
|
|
311
|
+
status: 'succeeded',
|
|
312
|
+
cost: { total: cost },
|
|
313
|
+
imageUrls: imagesFor(workflowId, body),
|
|
314
|
+
};
|
|
315
|
+
};
|
|
175
316
|
const parentMock = {
|
|
176
317
|
postMessage: (msg) => {
|
|
177
318
|
if (typeof msg !== 'object' ||
|
|
@@ -194,30 +335,56 @@ export function createMockHost(options = {}) {
|
|
|
194
335
|
// host-initiated TOKEN_REFRESH carrying it (the App's auto-resume
|
|
195
336
|
// depends on seeing the new scope on its token).
|
|
196
337
|
consentGranted = true;
|
|
197
|
-
|
|
338
|
+
after(0, () => {
|
|
198
339
|
dispatchToBlock({ type: 'TOKEN_REFRESH', payload: { token: nextToken() } });
|
|
199
|
-
}
|
|
200
|
-
timers.add(t);
|
|
340
|
+
});
|
|
201
341
|
return;
|
|
202
342
|
}
|
|
203
343
|
case 'REQUEST_SIGN_IN':
|
|
204
344
|
// The real host opens its login UI; nothing to reply.
|
|
205
345
|
return;
|
|
206
|
-
case 'ESTIMATE_WORKFLOW':
|
|
346
|
+
case 'ESTIMATE_WORKFLOW': {
|
|
347
|
+
const body = typed.payload?.body ?? {};
|
|
207
348
|
dispatchToBlock({
|
|
208
349
|
type: 'ESTIMATE_RESULT',
|
|
209
350
|
payload: {
|
|
210
351
|
requestId,
|
|
211
|
-
snapshot: {
|
|
352
|
+
snapshot: {
|
|
353
|
+
workflowId: 'wf_estimate',
|
|
354
|
+
status: 'pending',
|
|
355
|
+
cost: { total: costFor(body) },
|
|
356
|
+
},
|
|
212
357
|
},
|
|
213
358
|
});
|
|
214
359
|
return;
|
|
360
|
+
}
|
|
215
361
|
case 'SUBMIT_WORKFLOW': {
|
|
216
362
|
submitCount += 1;
|
|
217
|
-
const
|
|
363
|
+
const body = typed.payload?.body ?? {};
|
|
364
|
+
const cost = costFor(body);
|
|
365
|
+
// Insufficient-Buzz path: legacy failMode, the buzz scenario's
|
|
366
|
+
// force flag, OR a simulated balance that can't cover this gen.
|
|
367
|
+
const balanceSimulated = typeof buzz.balance === 'number';
|
|
368
|
+
const insufficient = failMode === 'all' ||
|
|
218
369
|
failMode === 'insufficient' ||
|
|
219
|
-
|
|
220
|
-
|
|
370
|
+
buzz.insufficient === true ||
|
|
371
|
+
(balanceSimulated && buzz.balance < cost);
|
|
372
|
+
// Generic generation failure: failNext countdown, failRate dice, or
|
|
373
|
+
// the legacy 'some' (~1 in 3) mode.
|
|
374
|
+
let genericFail = false;
|
|
375
|
+
if (!insufficient) {
|
|
376
|
+
if ((gen.failNext ?? 0) > 0) {
|
|
377
|
+
gen.failNext = gen.failNext - 1;
|
|
378
|
+
genericFail = true;
|
|
379
|
+
}
|
|
380
|
+
else if (typeof gen.failRate === 'number' && Math.random() < gen.failRate) {
|
|
381
|
+
genericFail = true;
|
|
382
|
+
}
|
|
383
|
+
else if (failMode === 'some' && submitCount % 3 === 0) {
|
|
384
|
+
genericFail = true;
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
if (insufficient) {
|
|
221
388
|
dispatchToBlock({
|
|
222
389
|
type: 'WORKFLOW_SUBMITTED',
|
|
223
390
|
payload: {
|
|
@@ -225,14 +392,31 @@ export function createMockHost(options = {}) {
|
|
|
225
392
|
snapshot: {
|
|
226
393
|
workflowId: `wf_fail_${submitCount}`,
|
|
227
394
|
status: 'failed',
|
|
228
|
-
error:
|
|
395
|
+
error: INSUFFICIENT_BUZZ_ERROR,
|
|
229
396
|
},
|
|
230
397
|
},
|
|
231
398
|
});
|
|
232
399
|
return;
|
|
233
400
|
}
|
|
401
|
+
if (genericFail) {
|
|
402
|
+
dispatchToBlock({
|
|
403
|
+
type: 'WORKFLOW_SUBMITTED',
|
|
404
|
+
payload: {
|
|
405
|
+
requestId,
|
|
406
|
+
snapshot: {
|
|
407
|
+
workflowId: `wf_fail_${submitCount}`,
|
|
408
|
+
status: 'failed',
|
|
409
|
+
error: GENERIC_GEN_ERROR,
|
|
410
|
+
},
|
|
411
|
+
},
|
|
412
|
+
});
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
415
|
+
// Success path: debit the simulated balance + remember body/cost.
|
|
416
|
+
if (balanceSimulated)
|
|
417
|
+
buzz.balance = buzz.balance - cost;
|
|
234
418
|
const workflowId = `wf_${submitCount}_${Date.now()}`;
|
|
235
|
-
workflows.set(workflowId, { polls: 0 });
|
|
419
|
+
workflows.set(workflowId, { polls: 0, cost, body });
|
|
236
420
|
dispatchToBlock({
|
|
237
421
|
type: 'WORKFLOW_SUBMITTED',
|
|
238
422
|
payload: { requestId, snapshot: { workflowId, status: 'pending' } },
|
|
@@ -245,10 +429,28 @@ export function createMockHost(options = {}) {
|
|
|
245
429
|
const polls = (wf?.polls ?? 0) + 1;
|
|
246
430
|
if (wf)
|
|
247
431
|
wf.polls = polls;
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
432
|
+
if (polls >= pollsUntilDone) {
|
|
433
|
+
// Apply synthetic latency on the terminal (succeeded) poll only.
|
|
434
|
+
const delay = latencyFor();
|
|
435
|
+
if (delay > 0) {
|
|
436
|
+
after(delay, () => dispatchToBlock({
|
|
437
|
+
type: 'WORKFLOW_STATUS',
|
|
438
|
+
payload: { requestId, snapshot: succeededSnapshot(workflowId) },
|
|
439
|
+
}));
|
|
440
|
+
}
|
|
441
|
+
else {
|
|
442
|
+
dispatchToBlock({
|
|
443
|
+
type: 'WORKFLOW_STATUS',
|
|
444
|
+
payload: { requestId, snapshot: succeededSnapshot(workflowId) },
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
else {
|
|
449
|
+
dispatchToBlock({
|
|
450
|
+
type: 'WORKFLOW_STATUS',
|
|
451
|
+
payload: { requestId, snapshot: { workflowId, status: 'processing' } },
|
|
452
|
+
});
|
|
453
|
+
}
|
|
252
454
|
return;
|
|
253
455
|
}
|
|
254
456
|
case 'CANCEL_WORKFLOW': {
|
|
@@ -260,12 +462,18 @@ export function createMockHost(options = {}) {
|
|
|
260
462
|
});
|
|
261
463
|
return;
|
|
262
464
|
}
|
|
263
|
-
case 'OPEN_BUZZ_PURCHASE':
|
|
465
|
+
case 'OPEN_BUZZ_PURCHASE': {
|
|
466
|
+
// Refill the simulated balance so the post-top-up retry succeeds.
|
|
467
|
+
const newBalance = typeof buzz.balance === 'number' ? buzz.balance + 1000 : 1000;
|
|
468
|
+
if (typeof buzz.balance === 'number')
|
|
469
|
+
buzz.balance = newBalance;
|
|
470
|
+
buzz.insufficient = false;
|
|
264
471
|
dispatchToBlock({
|
|
265
472
|
type: 'BUZZ_PURCHASE_RESULT',
|
|
266
|
-
payload: { requestId, purchased: true, newBalance
|
|
473
|
+
payload: { requestId, purchased: true, newBalance },
|
|
267
474
|
});
|
|
268
475
|
return;
|
|
476
|
+
}
|
|
269
477
|
case 'OPEN_CHECKPOINT_PICKER': {
|
|
270
478
|
const selected = cannedPicks.Checkpoint;
|
|
271
479
|
dispatchToBlock({
|
|
@@ -296,6 +504,111 @@ export function createMockHost(options = {}) {
|
|
|
296
504
|
});
|
|
297
505
|
return;
|
|
298
506
|
}
|
|
507
|
+
// ---- App Blocks KV datastore (W4) — in-memory backend ----
|
|
508
|
+
case 'APP_STORAGE_GET': {
|
|
509
|
+
const key = typed.payload?.key ?? '';
|
|
510
|
+
const row = store.get(key);
|
|
511
|
+
dispatchToBlock({
|
|
512
|
+
type: 'APP_STORAGE_GET_RESULT',
|
|
513
|
+
payload: { requestId, value: row ? row.value : null },
|
|
514
|
+
});
|
|
515
|
+
return;
|
|
516
|
+
}
|
|
517
|
+
case 'APP_STORAGE_SET': {
|
|
518
|
+
const key = typed.payload?.key ?? '';
|
|
519
|
+
const value = typed.payload?.value;
|
|
520
|
+
if (storageFailNext > 0) {
|
|
521
|
+
storageFailNext -= 1;
|
|
522
|
+
dispatchToBlock({
|
|
523
|
+
type: 'APP_STORAGE_SET_RESULT',
|
|
524
|
+
payload: { requestId, ok: false, error: 'STORAGE_UNAVAILABLE' },
|
|
525
|
+
});
|
|
526
|
+
return;
|
|
527
|
+
}
|
|
528
|
+
const sizeBytes = jsonByteSize(value);
|
|
529
|
+
if (sizeBytes > valueCapBytes) {
|
|
530
|
+
dispatchToBlock({
|
|
531
|
+
type: 'APP_STORAGE_SET_RESULT',
|
|
532
|
+
payload: { requestId, ok: false, error: 'PAYLOAD_TOO_LARGE' },
|
|
533
|
+
});
|
|
534
|
+
return;
|
|
535
|
+
}
|
|
536
|
+
// Quota check: projected usage after this upsert.
|
|
537
|
+
const existing = store.get(key);
|
|
538
|
+
const existingBytes = existing ? jsonByteSize(existing.value) + key.length : 0;
|
|
539
|
+
const projected = usedBytes() - existingBytes + sizeBytes + key.length;
|
|
540
|
+
if (projected > quotaBytes) {
|
|
541
|
+
dispatchToBlock({
|
|
542
|
+
type: 'APP_STORAGE_SET_RESULT',
|
|
543
|
+
payload: { requestId, ok: false, error: 'PAYLOAD_TOO_LARGE' },
|
|
544
|
+
});
|
|
545
|
+
return;
|
|
546
|
+
}
|
|
547
|
+
store.set(key, { value, updatedAt: new Date().toISOString() });
|
|
548
|
+
dispatchToBlock({
|
|
549
|
+
type: 'APP_STORAGE_SET_RESULT',
|
|
550
|
+
payload: { requestId, ok: true, sizeBytes },
|
|
551
|
+
});
|
|
552
|
+
return;
|
|
553
|
+
}
|
|
554
|
+
case 'APP_STORAGE_DELETE': {
|
|
555
|
+
const key = typed.payload?.key ?? '';
|
|
556
|
+
if (storageFailNext > 0) {
|
|
557
|
+
storageFailNext -= 1;
|
|
558
|
+
dispatchToBlock({
|
|
559
|
+
type: 'APP_STORAGE_DELETE_RESULT',
|
|
560
|
+
payload: { requestId, ok: false, deleted: false, error: 'STORAGE_UNAVAILABLE' },
|
|
561
|
+
});
|
|
562
|
+
return;
|
|
563
|
+
}
|
|
564
|
+
const had = store.delete(key);
|
|
565
|
+
dispatchToBlock({
|
|
566
|
+
type: 'APP_STORAGE_DELETE_RESULT',
|
|
567
|
+
payload: { requestId, ok: true, deleted: had },
|
|
568
|
+
});
|
|
569
|
+
return;
|
|
570
|
+
}
|
|
571
|
+
case 'APP_STORAGE_LIST': {
|
|
572
|
+
const prefix = typed.payload?.prefix ?? '';
|
|
573
|
+
const limit = typed.payload?.limit ?? 100;
|
|
574
|
+
const cursor = typed.payload?.cursor;
|
|
575
|
+
// Cursor = base64 of the last returned key (matches the hook's
|
|
576
|
+
// documented `nextCursor` contract).
|
|
577
|
+
const afterKey = cursor ? safeAtob(cursor) : undefined;
|
|
578
|
+
const allKeys = [...store.entries()]
|
|
579
|
+
.filter(([k]) => k.startsWith(prefix))
|
|
580
|
+
.sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));
|
|
581
|
+
const startIdx = afterKey
|
|
582
|
+
? allKeys.findIndex(([k]) => k > afterKey)
|
|
583
|
+
: 0;
|
|
584
|
+
const slice = (startIdx < 0 ? [] : allKeys.slice(startIdx)).slice(0, limit);
|
|
585
|
+
const keys = slice.map(([key, row]) => ({ key, updatedAt: row.updatedAt }));
|
|
586
|
+
const last = slice[slice.length - 1]?.[0];
|
|
587
|
+
const hasMore = last !== undefined &&
|
|
588
|
+
allKeys.findIndex(([k]) => k === last) < allKeys.length - 1;
|
|
589
|
+
dispatchToBlock({
|
|
590
|
+
type: 'APP_STORAGE_LIST_RESULT',
|
|
591
|
+
payload: {
|
|
592
|
+
requestId,
|
|
593
|
+
keys,
|
|
594
|
+
...(hasMore && last ? { nextCursor: safeBtoa(last) } : {}),
|
|
595
|
+
},
|
|
596
|
+
});
|
|
597
|
+
return;
|
|
598
|
+
}
|
|
599
|
+
case 'APP_STORAGE_QUOTA': {
|
|
600
|
+
dispatchToBlock({
|
|
601
|
+
type: 'APP_STORAGE_QUOTA_RESULT',
|
|
602
|
+
payload: {
|
|
603
|
+
requestId,
|
|
604
|
+
usedBytes: usedBytes(),
|
|
605
|
+
rowCount: store.size,
|
|
606
|
+
limitBytes: quotaBytes,
|
|
607
|
+
limitRows,
|
|
608
|
+
},
|
|
609
|
+
});
|
|
610
|
+
return;
|
|
611
|
+
}
|
|
299
612
|
default:
|
|
300
613
|
return;
|
|
301
614
|
}
|
|
@@ -337,8 +650,7 @@ export function createMockHost(options = {}) {
|
|
|
337
650
|
...(options.domain !== undefined ? { domain: options.domain } : {}),
|
|
338
651
|
...(resolvedCeiling !== undefined ? { maxBrowsingLevel: resolvedCeiling } : {}),
|
|
339
652
|
};
|
|
340
|
-
|
|
341
|
-
timers.add(initTimer);
|
|
653
|
+
after(0, () => dispatchToBlock({ type: 'BLOCK_INIT', payload: initPayload }));
|
|
342
654
|
let torn = false;
|
|
343
655
|
teardown = () => {
|
|
344
656
|
if (torn)
|
|
@@ -356,6 +668,43 @@ export function createMockHost(options = {}) {
|
|
|
356
668
|
};
|
|
357
669
|
return teardown;
|
|
358
670
|
}
|
|
359
|
-
|
|
671
|
+
function setScenario(patch) {
|
|
672
|
+
if (patch.failMode !== undefined)
|
|
673
|
+
failMode = patch.failMode;
|
|
674
|
+
if (patch.pollsUntilDone !== undefined)
|
|
675
|
+
pollsUntilDone = patch.pollsUntilDone;
|
|
676
|
+
if (patch.cost !== undefined)
|
|
677
|
+
legacyCost = patch.cost;
|
|
678
|
+
if (patch.cannedPicks !== undefined)
|
|
679
|
+
cannedPicks = patch.cannedPicks;
|
|
680
|
+
if (patch.generation !== undefined)
|
|
681
|
+
gen = { ...gen, ...patch.generation };
|
|
682
|
+
if (patch.buzz !== undefined)
|
|
683
|
+
buzz = { ...buzz, ...patch.buzz };
|
|
684
|
+
if (patch.storage !== undefined) {
|
|
685
|
+
// Only the live-tunable storage knob (`failNext`) is applied mid-session;
|
|
686
|
+
// seed/quota are install-time (re-install to change the backing store).
|
|
687
|
+
if (patch.storage.failNext !== undefined)
|
|
688
|
+
storageFailNext = patch.storage.failNext;
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
const buzzHandle = {
|
|
692
|
+
getBalance: () => buzz.balance,
|
|
693
|
+
setBalance: (n) => {
|
|
694
|
+
buzz.balance = n;
|
|
695
|
+
},
|
|
696
|
+
};
|
|
697
|
+
return { install, setScenario, buzz: buzzHandle };
|
|
698
|
+
}
|
|
699
|
+
/** btoa/atob that work in both browser + node (happy-dom + vitest). */
|
|
700
|
+
function safeBtoa(s) {
|
|
701
|
+
if (typeof btoa === 'function')
|
|
702
|
+
return btoa(s);
|
|
703
|
+
return Buffer.from(s, 'utf-8').toString('base64');
|
|
704
|
+
}
|
|
705
|
+
function safeAtob(s) {
|
|
706
|
+
if (typeof atob === 'function')
|
|
707
|
+
return atob(s);
|
|
708
|
+
return Buffer.from(s, 'base64').toString('utf-8');
|
|
360
709
|
}
|
|
361
710
|
//# sourceMappingURL=mockHost.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mockHost.js","sourceRoot":"","sources":["../../src/internal/mockHost.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mockHost.js","sourceRoot":"","sources":["../../src/internal/mockHost.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,EACL,aAAa,EACb,UAAU,GAUX,MAAM,yBAAyB,CAAC;AAEjC,gFAAgF;AAChF,MAAM,UAAU,GACd,aAAa,CAAC,EAAE;IAChB,aAAa,CAAC,IAAI;IAClB,aAAa,CAAC,CAAC;IACf,aAAa,CAAC,CAAC;IACf,aAAa,CAAC,GAAG,CAAC;AAEpB,MAAM,SAAS,GAAG,wCAAwC,CAAC;AAC3D,MAAM,cAAc,GAAG,mBAAmB,CAAC;AAE3C,8EAA8E;AAC9E,MAAM,2BAA2B,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,gBAAgB;AACtE,MAAM,+BAA+B,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,kBAAkB;AACrE,MAAM,0BAA0B,GAAG,SAAS,CAAC;AAuQ7C,MAAM,uBAAuB,GAAe;IAC1C,SAAS,EAAE,MAAM;IACjB,OAAO,EAAE,MAAM;IACf,SAAS,EAAE,cAAc;IACzB,WAAW,EAAE,KAAK;IAClB,SAAS,EAAE,UAAU;IACrB,SAAS,EAAE,YAAY;CACxB,CAAC;AAEF,MAAM,iBAAiB,GAAe;IACpC,SAAS,EAAE,MAAM;IACjB,OAAO,EAAE,MAAM;IACf,SAAS,EAAE,kBAAkB;IAC7B,WAAW,EAAE,MAAM;IACnB,SAAS,EAAE,UAAU;IACrB,SAAS,EAAE,MAAM;CAClB,CAAC;AAEF,MAAM,cAAc,GAAe,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAEvF,MAAM,uBAAuB,GAAG,2CAA2C,CAAC;AAC5E,MAAM,iBAAiB,GAAG,gCAAgC,CAAC;AAE3D,oEAAoE;AACpE,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,CAAC;QACH,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAiD,UAAsD;KACpG,MAAM;IAET,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM;QAAE,OAAO,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,GAAG,GAA6B,EAAE,CAAC;IAEzC,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,MAAM;QAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;IACvD,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,SAAS;QAAE,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC;IAEnE,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpF,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,OAAO;QAAE,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC;SACpD,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,MAAM;QAAE,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC;IAE5D,4EAA4E;IAC5E,kDAAkD;IAClD,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK;QAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;IACrF,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxC,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,QAAQ;QAAE,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAEzE,2EAA2E;IAC3E,sEAAsE;IACtE,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxC,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAC;QACrB,MAAM,WAAW,GAAgE,EAAE,CAAC;QACpF,IAAI,IAAI,KAAK,QAAQ;YAAE,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC;aAC1C,IAAI,IAAI,KAAK,MAAM;YACtB,WAAW,CAAC,IAAI,GAAG;gBACjB,SAAS,EAAE,MAAM;gBACjB,OAAO,EAAE,MAAM;gBACf,SAAS,EAAE,wBAAwB;gBACnC,WAAW,EAAE,MAAM;gBACnB,SAAS,EAAE,MAAM;gBACjB,SAAS,EAAE,MAAM;aAClB,CAAC;aACC,IAAI,IAAI;YAAE,WAAW,CAAC,IAAI,GAAG,iBAAiB,CAAC;QACpD,IAAI,QAAQ,KAAK,QAAQ;YAAE,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC;aACpD,IAAI,QAAQ;YAAE,WAAW,CAAC,UAAU,GAAG,uBAAuB,CAAC;QACpE,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC;IAChC,CAAC;IAED,mCAAmC;IACnC,MAAM,UAAU,GAA2B,EAAE,CAAC;IAC9C,MAAM,IAAI,GAAqB,EAAE,CAAC;IAElC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QAClF,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,MAAM,EAAE,CAAC;QAChF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC9C,qCAAqC;QACrC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC9D,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;QAC3B,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;QAC3B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;YACrE,UAAU,CAAC,SAAS,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAClC,CAAC;aAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;YAC/B,UAAU,CAAC,SAAS,GAAG,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClE,IAAI,UAAU,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QAC/D,UAAU,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxC,IAAI,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QAC5D,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxC,IAAI,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QAC3D,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC;IACpE,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;IAElD,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;YAC3D,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;gBAAE,GAAG,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAC3E,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;QAC/B,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,cAAc,CAAC,UAA2B,EAAE;IAC1D,MAAM,QAAQ,GACZ,OAAO,CAAC,MAAM,IAAK,UAAsD,CAAC,MAAM,CAAC;IACnF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;IACxF,CAAC;IACD,+EAA+E;IAC/E,MAAM,GAAG,GAA+B,QAAQ,CAAC;IAEjD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAC9E,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,GAAG,CAAC;IAC7C,MAAM,KAAK,GAAU,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC;IAC7C,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,WAAW,CAAC;IAC/D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,YAAY,CAAC;IAChD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,SAAS,CAAC;IAEzC,iFAAiF;IACjF,4EAA4E;IAC5E,iDAAiD;IACjD,IAAI,QAAQ,GAAqB,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC;IAC5D,IAAI,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC;IACjD,IAAI,GAAG,GAA2B,EAAE,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;IACpE,IAAI,IAAI,GAAqB,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;IACzD,kEAAkE;IAClE,IAAI,UAAU,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;IACnC,IAAI,WAAW,GACb,OAAO,CAAC,WAAW,IAAI,EAAE,UAAU,EAAE,uBAAuB,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;IAE1F,oDAAoD;IACpD,MAAM,eAAe,GAAwB,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;IAC5E,MAAM,KAAK,GAAG,IAAI,GAAG,EAAiD,CAAC;IACvE,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACzC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;QAChE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,eAAe,GAAG,eAAe,CAAC,QAAQ,IAAI,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,IAAI,2BAA2B,CAAC;IAC7E,MAAM,aAAa,GAAG,eAAe,CAAC,aAAa,IAAI,+BAA+B,CAAC;IACvF,MAAM,SAAS,GAAG,eAAe,CAAC,SAAS,IAAI,0BAA0B,CAAC;IAE1E,MAAM,SAAS,GAAG,GAAG,EAAE;QACrB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,KAAK;YAAE,KAAK,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;QAC1E,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,+DAA+D;IAC/D,MAAM,OAAO,GAAG,CAAC,IAAkB,EAAU,EAAE;QAC7C,MAAM,IAAI,GAAyB,GAAG,CAAC,UAAU,IAAI,UAAU,CAAC;QAChE,OAAO,OAAO,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,UAAU,CAAC,CAAC;IACxE,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,GAAW,EAAE;QAC9B,MAAM,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC;QACxB,IAAI,CAAC,KAAK,SAAS;YAAE,OAAO,CAAC,CAAC;QAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YACrB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,UAAkB,EAAE,IAAkB,EAAY,EAAE;QACrE,IAAI,GAAG,CAAC,MAAM;YAAE,OAAO,OAAO,GAAG,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;QACxF,IAAI,GAAG,CAAC,KAAK;YAAE,OAAO,CAAC,OAAO,GAAG,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtF,OAAO;YACL,uDAAuD,kBAAkB,CACvE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CACrB,EAAE;SACJ,CAAC;IACJ,CAAC,CAAC;IAEF,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,QAAQ,GAAe,GAAG,EAAE,GAAE,CAAC,CAAC;IAEpC,SAAS,OAAO;QACd,IAAI,SAAS;YAAE,OAAO,QAAQ,CAAC;QAC/B,SAAS,GAAG,IAAI,CAAC;QAEjB,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;QACzC,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC;QAClC,IAAI,cAAc,GAAG,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;QAC9C,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,+EAA+E;QAC/E,MAAM,SAAS,GAAG,IAAI,GAAG,EAA+D,CAAC;QACzF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAiC,CAAC;QAExD,MAAM,eAAe,GAAG,CAAC,IAAa,EAAE,EAAE;YACxC,GAAG,CAAC,aAAa,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;QACjF,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAc,EAAE,EAAE;YAC3C,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE;gBACxB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACjB,EAAE,EAAE,CAAC;YACP,CAAC,EAAE,EAAE,CAAC,CAAC;YACP,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC,CAAC;QAEF,MAAM,SAAS,GAAG,GAAiB,EAAE;YACnC,WAAW,IAAI,CAAC,CAAC;YACjB,OAAO;gBACL,GAAG,EAAE,GAAG,SAAS,IAAI,WAAW,EAAE;gBAClC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC9C,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE;gBAC3D,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1C,CAAC;QACJ,CAAC,CAAC;QAEF,MAAM,iBAAiB,GAAG,CAAC,UAAkB,EAAE,EAAE;YAC/C,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACrC,MAAM,IAAI,GAAG,EAAE,EAAE,IAAI,IAAI,UAAU,CAAC;YACpC,MAAM,IAAI,GAAG,EAAE,EAAE,IAAI,IAAK,EAAmB,CAAC;YAC9C,OAAO;gBACL,UAAU;gBACV,MAAM,EAAE,WAAoB;gBAC5B,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;gBACrB,SAAS,EAAE,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC;aACvC,CAAC;QACJ,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG;YACjB,WAAW,EAAE,CAAC,GAAY,EAAE,EAAE;gBAC5B,IACE,OAAO,GAAG,KAAK,QAAQ;oBACvB,GAAG,KAAK,IAAI;oBACZ,OAAQ,GAA0B,CAAC,IAAI,KAAK,QAAQ,EACpD,CAAC;oBACD,OAAO;gBACT,CAAC;gBACD,MAAM,KAAK,GAAG,GAab,CAAC;gBAEF,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAEnE,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC;gBAE3C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;oBACnB,KAAK,eAAe;wBAClB,eAAe,CAAC;4BACd,IAAI,EAAE,wBAAwB;4BAC9B,OAAO,EAAE,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;yBACrE,CAAC,CAAC;wBACH,OAAO;oBAET,KAAK,iBAAiB,CAAC,CAAC,CAAC;wBACvB,wDAAwD;wBACxD,kEAAkE;wBAClE,iDAAiD;wBACjD,cAAc,GAAG,IAAI,CAAC;wBACtB,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE;4BACZ,eAAe,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;wBAC9E,CAAC,CAAC,CAAC;wBACH,OAAO;oBACT,CAAC;oBAED,KAAK,iBAAiB;wBACpB,sDAAsD;wBACtD,OAAO;oBAET,KAAK,mBAAmB,CAAC,CAAC,CAAC;wBACzB,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,IAAK,EAAmB,CAAC;wBACzD,eAAe,CAAC;4BACd,IAAI,EAAE,iBAAiB;4BACvB,OAAO,EAAE;gCACP,SAAS;gCACT,QAAQ,EAAE;oCACR,UAAU,EAAE,aAAa;oCACzB,MAAM,EAAE,SAAS;oCACjB,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE;iCAC/B;6BACF;yBACF,CAAC,CAAC;wBACH,OAAO;oBACT,CAAC;oBAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;wBACvB,WAAW,IAAI,CAAC,CAAC;wBACjB,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,IAAK,EAAmB,CAAC;wBACzD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;wBAE3B,+DAA+D;wBAC/D,gEAAgE;wBAChE,MAAM,gBAAgB,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC;wBAC1D,MAAM,YAAY,GAChB,QAAQ,KAAK,KAAK;4BAClB,QAAQ,KAAK,cAAc;4BAC3B,IAAI,CAAC,YAAY,KAAK,IAAI;4BAC1B,CAAC,gBAAgB,IAAK,IAAI,CAAC,OAAkB,GAAG,IAAI,CAAC,CAAC;wBAExD,oEAAoE;wBACpE,oCAAoC;wBACpC,IAAI,WAAW,GAAG,KAAK,CAAC;wBACxB,IAAI,CAAC,YAAY,EAAE,CAAC;4BAClB,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;gCAC5B,GAAG,CAAC,QAAQ,GAAI,GAAG,CAAC,QAAmB,GAAG,CAAC,CAAC;gCAC5C,WAAW,GAAG,IAAI,CAAC;4BACrB,CAAC;iCAAM,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;gCAC5E,WAAW,GAAG,IAAI,CAAC;4BACrB,CAAC;iCAAM,IAAI,QAAQ,KAAK,MAAM,IAAI,WAAW,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gCACxD,WAAW,GAAG,IAAI,CAAC;4BACrB,CAAC;wBACH,CAAC;wBAED,IAAI,YAAY,EAAE,CAAC;4BACjB,eAAe,CAAC;gCACd,IAAI,EAAE,oBAAoB;gCAC1B,OAAO,EAAE;oCACP,SAAS;oCACT,QAAQ,EAAE;wCACR,UAAU,EAAE,WAAW,WAAW,EAAE;wCACpC,MAAM,EAAE,QAAQ;wCAChB,KAAK,EAAE,uBAAuB;qCAC/B;iCACF;6BACF,CAAC,CAAC;4BACH,OAAO;wBACT,CAAC;wBACD,IAAI,WAAW,EAAE,CAAC;4BAChB,eAAe,CAAC;gCACd,IAAI,EAAE,oBAAoB;gCAC1B,OAAO,EAAE;oCACP,SAAS;oCACT,QAAQ,EAAE;wCACR,UAAU,EAAE,WAAW,WAAW,EAAE;wCACpC,MAAM,EAAE,QAAQ;wCAChB,KAAK,EAAE,iBAAiB;qCACzB;iCACF;6BACF,CAAC,CAAC;4BACH,OAAO;wBACT,CAAC;wBAED,kEAAkE;wBAClE,IAAI,gBAAgB;4BAAE,IAAI,CAAC,OAAO,GAAI,IAAI,CAAC,OAAkB,GAAG,IAAI,CAAC;wBACrE,MAAM,UAAU,GAAG,MAAM,WAAW,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;wBACrD,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;wBACpD,eAAe,CAAC;4BACd,IAAI,EAAE,oBAAoB;4BAC1B,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE;yBACpE,CAAC,CAAC;wBACH,OAAO;oBACT,CAAC;oBAED,KAAK,eAAe,CAAC,CAAC,CAAC;wBACrB,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC;wBACnD,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;wBACrC,MAAM,KAAK,GAAG,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;wBACnC,IAAI,EAAE;4BAAE,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC;wBACzB,IAAI,KAAK,IAAI,cAAc,EAAE,CAAC;4BAC5B,iEAAiE;4BACjE,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;4BAC3B,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gCACd,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAChB,eAAe,CAAC;oCACd,IAAI,EAAE,iBAAiB;oCACvB,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,EAAE;iCAChE,CAAC,CACH,CAAC;4BACJ,CAAC;iCAAM,CAAC;gCACN,eAAe,CAAC;oCACd,IAAI,EAAE,iBAAiB;oCACvB,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,EAAE;iCAChE,CAAC,CAAC;4BACL,CAAC;wBACH,CAAC;6BAAM,CAAC;4BACN,eAAe,CAAC;gCACd,IAAI,EAAE,iBAAiB;gCACvB,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,YAAqB,EAAE,EAAE;6BAChF,CAAC,CAAC;wBACL,CAAC;wBACD,OAAO;oBACT,CAAC;oBAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;wBACvB,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC;wBACnD,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;wBAC7B,eAAe,CAAC;4BACd,IAAI,EAAE,mBAAmB;4BACzB,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE;yBACrE,CAAC,CAAC;wBACH,OAAO;oBACT,CAAC;oBAED,KAAK,oBAAoB,CAAC,CAAC,CAAC;wBAC1B,kEAAkE;wBAClE,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;wBACjF,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;4BAAE,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC;wBAChE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;wBAC1B,eAAe,CAAC;4BACd,IAAI,EAAE,sBAAsB;4BAC5B,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE;yBACpD,CAAC,CAAC;wBACH,OAAO;oBACT,CAAC;oBAED,KAAK,wBAAwB,CAAC,CAAC,CAAC;wBAC9B,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC;wBACxC,eAAe,CAAC;4BACd,IAAI,EAAE,0BAA0B;4BAChC,OAAO,EAAE;gCACP,SAAS;gCACT,GAAG,CAAC,QAAQ;oCACV,CAAC,CAAC;wCACE,QAAQ,EAAE;4CACR,SAAS,EAAE,QAAQ,CAAC,SAAS;4CAC7B,OAAO,EAAE,QAAQ,CAAC,OAAO;4CACzB,SAAS,EAAE,QAAQ,CAAC,SAAS;4CAC7B,WAAW,EAAE,QAAQ,CAAC,WAAW;4CACjC,SAAS,EAAE,QAAQ,CAAC,SAAS;yCAC9B;qCACF;oCACH,CAAC,CAAC,EAAE,CAAC;6BACR;yBACF,CAAC,CAAC;wBACH,OAAO;oBACT,CAAC;oBAED,KAAK,sBAAsB,CAAC,CAAC,CAAC;wBAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC;wBAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;wBACxD,eAAe,CAAC;4BACd,IAAI,EAAE,wBAAwB;4BAC9B,OAAO,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;yBAC1D,CAAC,CAAC;wBACH,OAAO;oBACT,CAAC;oBAED,6DAA6D;oBAC7D,KAAK,iBAAiB,CAAC,CAAC,CAAC;wBACvB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC;wBACrC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;wBAC3B,eAAe,CAAC;4BACd,IAAI,EAAE,wBAAwB;4BAC9B,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;yBACtD,CAAC,CAAC;wBACH,OAAO;oBACT,CAAC;oBAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;wBACvB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC;wBACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC;wBACnC,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;4BACxB,eAAe,IAAI,CAAC,CAAC;4BACrB,eAAe,CAAC;gCACd,IAAI,EAAE,wBAAwB;gCAC9B,OAAO,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,EAAE;6BAChE,CAAC,CAAC;4BACH,OAAO;wBACT,CAAC;wBACD,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;wBACtC,IAAI,SAAS,GAAG,aAAa,EAAE,CAAC;4BAC9B,eAAe,CAAC;gCACd,IAAI,EAAE,wBAAwB;gCAC9B,OAAO,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,EAAE;6BAC9D,CAAC,CAAC;4BACH,OAAO;wBACT,CAAC;wBACD,kDAAkD;wBAClD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;wBAChC,MAAM,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC/E,MAAM,SAAS,GAAG,SAAS,EAAE,GAAG,aAAa,GAAG,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC;wBACvE,IAAI,SAAS,GAAG,UAAU,EAAE,CAAC;4BAC3B,eAAe,CAAC;gCACd,IAAI,EAAE,wBAAwB;gCAC9B,OAAO,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,EAAE;6BAC9D,CAAC,CAAC;4BACH,OAAO;wBACT,CAAC;wBACD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;wBAC/D,eAAe,CAAC;4BACd,IAAI,EAAE,wBAAwB;4BAC9B,OAAO,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;yBAC5C,CAAC,CAAC;wBACH,OAAO;oBACT,CAAC;oBAED,KAAK,oBAAoB,CAAC,CAAC,CAAC;wBAC1B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC;wBACrC,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;4BACxB,eAAe,IAAI,CAAC,CAAC;4BACrB,eAAe,CAAC;gCACd,IAAI,EAAE,2BAA2B;gCACjC,OAAO,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,EAAE;6BAChF,CAAC,CAAC;4BACH,OAAO;wBACT,CAAC;wBACD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBAC9B,eAAe,CAAC;4BACd,IAAI,EAAE,2BAA2B;4BACjC,OAAO,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE;yBAC/C,CAAC,CAAC;wBACH,OAAO;oBACT,CAAC;oBAED,KAAK,kBAAkB,CAAC,CAAC,CAAC;wBACxB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE,CAAC;wBAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,KAAK,IAAI,GAAG,CAAC;wBAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;wBACrC,+DAA+D;wBAC/D,qCAAqC;wBACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;wBACvD,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;6BACjC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;6BACrC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBACpD,MAAM,QAAQ,GAAG,QAAQ;4BACvB,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC;4BAC1C,CAAC,CAAC,CAAC,CAAC;wBACN,MAAM,KAAK,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;wBAC5E,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;wBAC5E,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBAC1C,MAAM,OAAO,GACX,IAAI,KAAK,SAAS;4BAClB,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;wBAC9D,eAAe,CAAC;4BACd,IAAI,EAAE,yBAAyB;4BAC/B,OAAO,EAAE;gCACP,SAAS;gCACT,IAAI;gCACJ,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;6BAC3D;yBACF,CAAC,CAAC;wBACH,OAAO;oBACT,CAAC;oBAED,KAAK,mBAAmB,CAAC,CAAC,CAAC;wBACzB,eAAe,CAAC;4BACd,IAAI,EAAE,0BAA0B;4BAChC,OAAO,EAAE;gCACP,SAAS;gCACT,SAAS,EAAE,SAAS,EAAE;gCACtB,QAAQ,EAAE,KAAK,CAAC,IAAI;gCACpB,UAAU,EAAE,UAAU;gCACtB,SAAS;6BACV;yBACF,CAAC,CAAC;wBACH,OAAO;oBACT,CAAC;oBAED;wBACE,OAAO;gBACX,CAAC;YACH,CAAC;SACF,CAAC;QAEF,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE;YACnC,KAAK,EAAE,UAAU;YACjB,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QAEH,qCAAqC;QACrC,MAAM,WAAW,GAAiB,OAAO,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QAC5E,MAAM,OAAO,GAAiB,EAAE,GAAG,WAAW,EAAE,KAAK,EAAE,CAAC;QAExD,4EAA4E;QAC5E,0EAA0E;QAC1E,0EAA0E;QAC1E,mEAAmE;QACnE,MAAM,eAAe,GACnB,OAAO,CAAC,gBAAgB,KAAK,SAAS;YACpC,CAAC,CAAC,OAAO,CAAC,gBAAgB;YAC1B,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,KAAK;gBAC1B,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ;oBAC7B,CAAC,CAAC,UAAU;oBACZ,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS;wBAC5B,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK;4BACxB,CAAC,CAAC,UAAU;4BACZ,CAAC,CAAC,UAAU;wBACd,CAAC,CAAC,SAAS,CAAC;QAEtB,MAAM,WAAW,GAAqB;YACpC,eAAe;YACf,OAAO;YACP,KAAK;YACL,KAAK,EAAE,SAAS,EAAE;YAClB,OAAO;YACP,QAAQ,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE;YACrD,MAAM;YACN,KAAK;YACL,UAAU,EAAE,QAAQ;YACpB,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChF,CAAC;QAEF,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;QAE9E,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,QAAQ,GAAG,GAAG,EAAE;YACd,IAAI,IAAI;gBAAE,OAAO;YACjB,IAAI,GAAG,IAAI,CAAC;YACZ,SAAS,GAAG,KAAK,CAAC;YAClB,KAAK,MAAM,CAAC,IAAI,MAAM;gBAAE,YAAY,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE;gBACnC,KAAK,EAAE,cAAc;gBACrB,YAAY,EAAE,IAAI;gBAClB,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;QACL,CAAC,CAAC;QACF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,SAAS,WAAW,CAAC,KAA4B;QAC/C,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS;YAAE,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAC5D,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS;YAAE,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;QAC9E,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;YAAE,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC;QACtD,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;YAAE,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QACrE,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS;YAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;QAC1E,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;YAAE,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAChE,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAChC,0EAA0E;YAC1E,wEAAwE;YACxE,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS;gBAAE,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QACrF,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAmB;QACjC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO;QAC9B,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE;YAChB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACnB,CAAC;KACF,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AACpD,CAAC;AAED,uEAAuE;AACvE,SAAS,QAAQ,CAAC,CAAS;IACzB,IAAI,OAAO,IAAI,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACpD,CAAC;AACD,SAAS,QAAQ,CAAC,CAAS;IACzB,IAAI,OAAO,IAAI,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACpD,CAAC"}
|
package/dist/testing.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ import { type ReactNode } from 'react';
|
|
|
16
16
|
import { __resetTransport } from './internal/singleton.js';
|
|
17
17
|
import { type MockHostOptions } from './internal/mockHost.js';
|
|
18
18
|
export { __resetTransport as resetTransport };
|
|
19
|
-
export { createMockHost, readMockHostUrlOptions, type MockHost, type MockHostOptions, type MockHostFailMode, type CannedPick, } from './internal/mockHost.js';
|
|
19
|
+
export { createMockHost, readMockHostUrlOptions, type MockHost, type MockHostOptions, type MockHostFailMode, type MockHostScenarioPatch, type MockGenerationScenario, type MockBuzzScenario, type MockBuzzHandle, type MockStorageScenario, type CostSpec, type ImageSpec, type CannedPick, } from './internal/mockHost.js';
|
|
20
20
|
/**
|
|
21
21
|
* Builds a `MessageEvent` that mimics a parent-frame postMessage so tests can
|
|
22
22
|
* exercise `IframeTransport.handleMessage` without a real cross-frame setup.
|
package/dist/testing.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,gBAAgB,IAAI,cAAc,EAAE,CAAC;AAE9C,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,UAAU,GAChB,MAAM,wBAAwB,CAAC;AAEhC;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,CAE7E;AAOD;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,eAAe;IACnD,sDAAsD;IACtD,QAAQ,EAAE,SAAS,CAAC;IACpB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,OAAO,CAAC,EACtB,QAAQ,EACR,eAAsB,EACtB,OAAc,EACd,GAAG,OAAO,EACX,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,gBAAgB,IAAI,cAAc,EAAE,CAAC;AAE9C,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,UAAU,GAChB,MAAM,wBAAwB,CAAC;AAEhC;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,CAE7E;AAOD;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,eAAe;IACnD,sDAAsD;IACtD,QAAQ,EAAE,SAAS,CAAC;IACpB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,OAAO,CAAC,EACtB,QAAQ,EACR,eAAsB,EACtB,OAAc,EACd,GAAG,OAAO,EACX,EAAE,YAAY,2CA0Dd;AAED,+FAA+F;AAC/F,eAAO,MAAM,gBAAgB,gBAAU,CAAC"}
|
package/dist/testing.js
CHANGED
|
@@ -72,7 +72,11 @@ export function Harness({ children, applyUrlToggles = true, showLog = true, ...o
|
|
|
72
72
|
const anon = opts.viewer === null;
|
|
73
73
|
const theme = opts.theme ?? 'dark';
|
|
74
74
|
const consent = opts.consentGranted ? 'granted' : 'withheld';
|
|
75
|
-
return (_jsxs("div", { "data-harness": "true", style: { position: 'relative', width: '100vw', minHeight: '100dvh' }, children: [_jsx("main", { "data-harness-frame": "true", style: { width: '100%', minHeight: '100%'
|
|
75
|
+
return (_jsxs("div", { "data-harness": "true", style: { position: 'relative', width: '100vw', minHeight: '100dvh' }, children: [_jsx("main", { "data-harness-frame": "true", style: { width: '100%', minHeight: '100%', paddingBottom: showLog ? 56 : 0 }, children: children }), showLog && (
|
|
76
|
+
// pointerEvents:none on the wrapper so the badge's bounding box can't
|
|
77
|
+
// steal clicks from content beneath it; re-enabled on the interactive
|
|
78
|
+
// bits (summary toggles the log; pre is scrollable/selectable).
|
|
79
|
+
_jsxs("details", { style: harnessLogStyle, children: [_jsxs("summary", { style: { cursor: 'pointer', pointerEvents: 'auto' }, children: ["DEV HARNESS \u00B7 viewer=", anon ? 'anon' : 'dev-viewer', " \u00B7 consent=", consent, " \u00B7 theme=", theme, " \u00B7 outbound:", outbound.length] }), _jsx("pre", { style: { margin: 0, maxHeight: 200, overflow: 'auto', pointerEvents: 'auto' }, children: outbound.length === 0
|
|
76
80
|
? '// no outbound messages yet'
|
|
77
81
|
: outbound
|
|
78
82
|
.map((m, i) => `${i + 1}. ${m.type} ${JSON.stringify(m.payload ?? {})}`)
|
|
@@ -85,6 +89,7 @@ const harnessLogStyle = {
|
|
|
85
89
|
bottom: 8,
|
|
86
90
|
right: 8,
|
|
87
91
|
zIndex: 9999,
|
|
92
|
+
pointerEvents: 'none',
|
|
88
93
|
maxWidth: 520,
|
|
89
94
|
background: 'rgba(17,17,17,0.92)',
|
|
90
95
|
color: '#7fc',
|
package/dist/testing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EACL,cAAc,EACd,sBAAsB,GAEvB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,gBAAgB,IAAI,cAAc,EAAE,CAAC;AAE9C,OAAO,EACL,cAAc,EACd,sBAAsB,
|
|
1
|
+
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EACL,cAAc,EACd,sBAAsB,GAEvB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,gBAAgB,IAAI,cAAc,EAAE,CAAC;AAE9C,OAAO,EACL,cAAc,EACd,sBAAsB,GAYvB,MAAM,wBAAwB,CAAC;AAEhC;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAa,EAAE,MAAc;IAC7D,OAAO,IAAI,YAAY,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AACrE,CAAC;AA0BD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,OAAO,CAAC,EACtB,QAAQ,EACR,eAAe,GAAG,IAAI,EACtB,OAAO,GAAG,IAAI,EACd,GAAG,OAAO,EACG;IACb,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAgB,EAAE,CAAC,CAAC;IAC5D,yEAAyE;IACzE,0DAA0D;IAC1D,MAAM,UAAU,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAC;IACxD,IAAI,UAAU,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,eAAe,CAAC,CAAC,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,UAAU,CAAC,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,UAAU,EAAE,CAAC;IACrD,CAAC;IAED,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,IAAI,GAAG,cAAc,CAAC;YAC1B,GAAG,UAAU,CAAC,OAAQ;YACtB,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE;gBAClB,UAAU,CAAC,OAAQ,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC;gBACtC,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe;oBAAE,OAAO,CAAC,sBAAsB;gBAChE,cAAc,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9D,CAAC;SACF,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,IAAI,GAAG,UAAU,CAAC,OAAQ,CAAC;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;IAE7D,OAAO,CACL,+BAAkB,MAAM,EAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,aAI3F,qCACqB,MAAM,EACzB,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,YAE3E,QAAQ,GACJ,EACN,OAAO,IAAI;YACV,sEAAsE;YACtE,sEAAsE;YACtE,gEAAgE;YAChE,mBAAS,KAAK,EAAE,eAAe,aAC7B,mBAAS,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,2CACpC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,sBAAa,OAAO,oBAAW,KAAK,uBAC5E,QAAQ,CAAC,MAAM,IACjB,EACV,cAAK,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,YAC/E,QAAQ,CAAC,MAAM,KAAK,CAAC;4BACpB,CAAC,CAAC,6BAA6B;4BAC/B,CAAC,CAAC,QAAQ;iCACL,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;iCACvE,IAAI,CAAC,IAAI,CAAC,GACb,IACE,CACX,IACG,CACP,CAAC;AACJ,CAAC;AAED,+FAA+F;AAC/F,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAExC,MAAM,eAAe,GAAG;IACtB,QAAQ,EAAE,OAAO;IACjB,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,IAAI;IACZ,aAAa,EAAE,MAAM;IACrB,QAAQ,EAAE,GAAG;IACb,UAAU,EAAE,qBAAqB;IACjC,KAAK,EAAE,MAAM;IACb,QAAQ,EAAE,EAAE;IACZ,UAAU,EAAE,yCAAyC;IACrD,OAAO,EAAE,UAAU;IACnB,YAAY,EAAE,CAAC;CACP,CAAC"}
|