@demlik/tea 0.5.0 → 0.5.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/LICENSE +1 -1
- package/dist/agent/index.d.ts +5 -5
- package/dist/agent/index.js +10 -10
- package/dist/authed-call/index.d.ts +3 -3
- package/dist/authed-call/index.js +7 -7
- package/dist/await-terminal/index.d.ts +2 -2
- package/dist/await-terminal/index.js +3 -2
- package/dist/await-terminal/index.js.map +1 -1
- package/dist/batch-window/index.d.ts +4 -4
- package/dist/batch-window/index.js +3 -3
- package/dist/cache/index.d.ts +2 -2
- package/dist/cache/index.js +4 -4
- package/dist/{chunk-PUTHY7LR.js → chunk-2KBEIGYP.js} +3 -3
- package/dist/{chunk-PUTHY7LR.js.map → chunk-2KBEIGYP.js.map} +1 -1
- package/dist/{chunk-QKUWDC4P.js → chunk-2UGTDYOK.js} +3 -3
- package/dist/{chunk-QKUWDC4P.js.map → chunk-2UGTDYOK.js.map} +1 -1
- package/dist/{chunk-ZILCH3WS.js → chunk-66S2KEQQ.js} +4 -4
- package/dist/{chunk-ZILCH3WS.js.map → chunk-66S2KEQQ.js.map} +1 -1
- package/dist/{chunk-362SZ6CS.js → chunk-A7USKARI.js} +3 -3
- package/dist/{chunk-362SZ6CS.js.map → chunk-A7USKARI.js.map} +1 -1
- package/dist/{chunk-ZT3MGQB7.js → chunk-ASX7PL2K.js} +3 -3
- package/dist/{chunk-ZT3MGQB7.js.map → chunk-ASX7PL2K.js.map} +1 -1
- package/dist/{chunk-62QBHM3T.js → chunk-AZ3NHUPD.js} +3 -3
- package/dist/{chunk-62QBHM3T.js.map → chunk-AZ3NHUPD.js.map} +1 -1
- package/dist/{chunk-7FYQGDMF.js → chunk-AZZLE7XR.js} +3 -3
- package/dist/{chunk-7FYQGDMF.js.map → chunk-AZZLE7XR.js.map} +1 -1
- package/dist/{chunk-W2S4HK7J.js → chunk-EC6FO42Q.js} +6 -6
- package/dist/{chunk-W2S4HK7J.js.map → chunk-EC6FO42Q.js.map} +1 -1
- package/dist/{chunk-T6HDAPMR.js → chunk-ERYY5P6W.js} +3 -3
- package/dist/{chunk-T6HDAPMR.js.map → chunk-ERYY5P6W.js.map} +1 -1
- package/dist/{chunk-CIDS43FH.js → chunk-IVHQCVFX.js} +3 -3
- package/dist/{chunk-CIDS43FH.js.map → chunk-IVHQCVFX.js.map} +1 -1
- package/dist/{chunk-DBOJ2UC6.js → chunk-O7ED34JH.js} +4 -2
- package/dist/chunk-O7ED34JH.js.map +1 -0
- package/dist/{chunk-LFW66IIV.js → chunk-S6Y3RNX4.js} +4 -4
- package/dist/{chunk-LFW66IIV.js.map → chunk-S6Y3RNX4.js.map} +1 -1
- package/dist/{chunk-KEFMI24G.js → chunk-UV7VCTNC.js} +7 -7
- package/dist/{chunk-KEFMI24G.js.map → chunk-UV7VCTNC.js.map} +1 -1
- package/dist/{chunk-7UU5P2CX.js → chunk-WF46FABO.js} +3 -3
- package/dist/{chunk-7UU5P2CX.js.map → chunk-WF46FABO.js.map} +1 -1
- package/dist/{chunk-KWPB6BM6.js → chunk-XMHZ44QC.js} +4 -4
- package/dist/{chunk-KWPB6BM6.js.map → chunk-XMHZ44QC.js.map} +1 -1
- package/dist/{chunk-7A74NSG4.js → chunk-XOAP3LOT.js} +3 -3
- package/dist/{chunk-7A74NSG4.js.map → chunk-XOAP3LOT.js.map} +1 -1
- package/dist/{chunk-PBAYOJJO.js → chunk-ZH454CR5.js} +9 -3
- package/dist/chunk-ZH454CR5.js.map +1 -0
- package/dist/{core-DPYOyOJv.d.ts → core-JPHsMZVB.d.ts} +1 -1
- package/dist/deadline/index.d.ts +2 -2
- package/dist/deadline/index.js +3 -3
- package/dist/do/index.d.ts +9 -9
- package/dist/do/index.js +10 -10
- package/dist/do/index.js.map +1 -1
- package/dist/{durable-effects-B0YpoCHg.d.ts → durable-effects-MRnCBCxV.d.ts} +2 -2
- package/dist/extension/index.d.ts +2 -2
- package/dist/extension/index.js +3 -3
- package/dist/extension/react.js +3 -3
- package/dist/extension/subs/index.d.ts +2 -2
- package/dist/extension/test-utils.d.ts +1 -1
- package/dist/extension/test-utils.js.map +1 -1
- package/dist/fan-out/index.d.ts +2 -2
- package/dist/idempotent-intake/index.d.ts +2 -2
- package/dist/index.d.ts +4 -4
- package/dist/index.js +2 -2
- package/dist/llm-call/index.d.ts +3 -3
- package/dist/llm-call/index.js +7 -7
- package/dist/{machine-Q_Bsm7Vu.d.ts → machine-nGXCMyHn.d.ts} +3 -3
- package/dist/machine-viz/index.d.ts +1 -1
- package/dist/machine-viz/index.js +2 -2
- package/dist/mem/index.d.ts +2 -2
- package/dist/monitored-run/index.d.ts +4 -4
- package/dist/monitored-run/index.js +5 -5
- package/dist/node/index.d.ts +2 -2
- package/dist/paginated-walk/index.d.ts +3 -3
- package/dist/paginated-walk/index.js +7 -7
- package/dist/parity/index.d.ts +2 -2
- package/dist/parity/index.js +3 -3
- package/dist/pbt/arbitraries/index.d.ts +3 -3
- package/dist/pbt/arbitraries/index.js +1 -1
- package/dist/pbt/index.d.ts +1 -1
- package/dist/pbt/index.js +4 -4
- package/dist/pbt/runners/index.d.ts +1 -1
- package/dist/pbt/runners/index.js +3 -3
- package/dist/poller/index.d.ts +3 -3
- package/dist/poller/index.js +3 -3
- package/dist/prediction/index.d.ts +1 -1
- package/dist/prediction/index.js +2 -2
- package/dist/pure/index.d.ts +1 -1
- package/dist/pure/index.js +2 -2
- package/dist/react/index.d.ts +2 -2
- package/dist/react/index.js +2 -2
- package/dist/reconciler/index.d.ts +3 -3
- package/dist/reconciler/index.js +7 -7
- package/dist/recorder/index.d.ts +2 -2
- package/dist/resilient-call/index.d.ts +2 -2
- package/dist/resilient-call/index.js +6 -6
- package/dist/retry-to-success/index.js +2 -0
- package/dist/retry-to-success/index.js.map +1 -1
- package/dist/{runtime-types-uBuVvZqa.d.ts → runtime-types-BbBq4LWo.d.ts} +2 -2
- package/dist/saga/index.d.ts +2 -2
- package/dist/snapshot/index.d.ts +1 -1
- package/dist/snapshot/index.js +3 -3
- package/dist/subs/index.d.ts +3 -3
- package/dist/subs/index.js +3 -3
- package/dist/testing/index.d.ts +2 -2
- package/dist/testing/index.js +2 -2
- package/dist/throttled-input/index.d.ts +2 -2
- package/dist/throttled-input/index.js +6 -6
- package/dist/token-refresh/index.d.ts +1 -1
- package/dist/token-refresh/index.js +3 -3
- package/dist/trace-replay/index.d.ts +2 -2
- package/dist/trace-replay/index.js +3 -3
- package/dist/{types-C6mXL9wA.d.ts → types-BMZ7IMrd.d.ts} +1 -1
- package/dist/with-deadline/index.d.ts +1 -1
- package/dist/with-deadline/index.js +2 -2
- package/dist/with-resilience/index.d.ts +2 -2
- package/dist/with-resilience/index.js +6 -6
- package/dist/with-telemetry/index.d.ts +1 -1
- package/dist/with-telemetry/index.js +2 -2
- package/dist/work-queue/adapter.d.ts +2 -2
- package/dist/work-queue/index.d.ts +3 -3
- package/dist/work-queue/index.js.map +1 -1
- package/dist/work-queue/ops.d.ts +2 -2
- package/dist/workflow/index.d.ts +3 -3
- package/package.json +12 -4
- package/dist/chunk-DBOJ2UC6.js.map +0 -1
- package/dist/chunk-PBAYOJJO.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as Cmd } from './core-
|
|
1
|
+
import { C as Cmd } from './core-JPHsMZVB.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* @demlik/tea/do — the durable pending-effects ledger (substrate primitive #1).
|
|
@@ -177,4 +177,4 @@ declare function pendingEffectsLedger<E>(restore?: {
|
|
|
177
177
|
readonly lastId?: DeliveryId;
|
|
178
178
|
}): PendingEffectsRecorder<E>;
|
|
179
179
|
|
|
180
|
-
export { type DeliveryId as D, type EffectLedgerEvent as E, type OwedEffect as O, type PendingEffectsRecorder as P, type EffectConfirmed as a, type EffectOwed as b,
|
|
180
|
+
export { type DeliveryId as D, type EffectLedgerEvent as E, type OwedEffect as O, type PendingEffectsRecorder as P, type EffectConfirmed as a, type EffectOwed as b, type PendingEffectsLedger as c, applyEffectEvent as d, emptyLedger as e, foldLedger as f, isOwed as i, pendingEffectsLedger as p, survivingEffects as s };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { R as Runtime, S as Store } from '../runtime-types-
|
|
2
|
-
import '../core-
|
|
1
|
+
import { R as Runtime, S as Store } from '../runtime-types-BbBq4LWo.js';
|
|
2
|
+
import '../core-JPHsMZVB.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Runtime bridge — expose a `@demlik/tea` runtime running in one chrome context
|
package/dist/extension/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { bridgeClient, bridgeRuntime, bridgeTabClient, passThroughMsg } from '../chunk-
|
|
1
|
+
export { bridgeClient, bridgeRuntime, bridgeTabClient, passThroughMsg } from '../chunk-IVHQCVFX.js';
|
|
2
2
|
import '../chunk-G5E74IJB.js';
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-ZH454CR5.js';
|
|
4
|
+
import '../chunk-O7ED34JH.js';
|
|
5
5
|
|
|
6
6
|
// src/extension/index.ts
|
|
7
7
|
var MALFORMED = "chromeStorageStore: stored value is not a string";
|
package/dist/extension/react.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { bridgeClient, passThroughMsg } from '../chunk-
|
|
1
|
+
import { bridgeClient, passThroughMsg } from '../chunk-IVHQCVFX.js';
|
|
2
2
|
import '../chunk-G5E74IJB.js';
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-ZH454CR5.js';
|
|
4
|
+
import '../chunk-O7ED34JH.js';
|
|
5
5
|
import { useRef, useSyncExternalStore, useEffect, useCallback, createContext, useMemo, useContext } from 'react';
|
|
6
6
|
import { jsx } from 'react/jsx-runtime';
|
|
7
7
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { S as Sub } from '../../core-
|
|
2
|
-
import { S as SubscribeHandler } from '../../types-
|
|
1
|
+
import { S as Sub } from '../../core-JPHsMZVB.js';
|
|
2
|
+
import { S as SubscribeHandler } from '../../types-BMZ7IMrd.js';
|
|
3
3
|
|
|
4
4
|
type AlarmSubData = {
|
|
5
5
|
alarmName: string;
|
|
@@ -86,7 +86,7 @@ interface FakeChrome {
|
|
|
86
86
|
* undefined if no alarm with that name exists. Mirrors the contract
|
|
87
87
|
* the `ensureQueueAlarm` SW-module-top-level helper checks ("is this
|
|
88
88
|
* alarm already present with the right period?") — see
|
|
89
|
-
*
|
|
89
|
+
* the extension's background entrypoint.
|
|
90
90
|
*/
|
|
91
91
|
get(name: string): Promise<chrome.alarms.Alarm | undefined>;
|
|
92
92
|
clear(name: string): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/extension/test-utils.ts"],"names":[],"mappings":";AA0JO,SAAS,UAAA,GAAyB;AACvC,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAqB;AAUtC,EAAA,MAAM,gBAAA,uBAAuB,GAAA,EAA2B;AACxD,EAAA,SAAS,SAAA,CAAU,GAAY,CAAA,EAAqB;AAClD,IAAA,IAAI,CAAA,KAAM,GAAG,OAAO,IAAA;AACpB,IAAA,IAAI,OAAO,CAAA,KAAM,OAAO,CAAA,EAAG,OAAO,KAAA;AAClC,IAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,MAAM,IAAA,IAAQ,CAAA,KAAM,MAAM,OAAO,KAAA;AAC9D,IAAA,OAAO,KAAK,SAAA,CAAU,CAAC,CAAA,KAAM,IAAA,CAAK,UAAU,CAAC,CAAA;AAAA,EAC/C;AACA,EAAA,SAAS,kBACP,OAAA,EACM;AACN,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,WAAW,CAAA,EAAG;AACvC,IAAA,KAAA,MAAW,QAAA,IAAY,KAAA,CAAM,IAAA,CAAK,gBAAgB,CAAA,EAAG;AACnD,MAAA,QAAA,CAAS,SAAS,OAAO,CAAA;AAAA,IAC3B;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,MAAM,IACJ,IAAA,EACkC;AAKlC,MAAA,IAAI,IAAA,KAAS,MAAA,IAAa,IAAA,KAAS,IAAA,EAAM;AACvC,QAAA,OAAO,MAAA,CAAO,YAAY,IAAI,CAAA;AAAA,MAChC;AACA,MAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,QAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA;AACvB,QAAA,OAAO,CAAA,KAAM,SAAY,EAAC,GAAI,EAAE,CAAC,IAAI,GAAG,CAAA,EAAE;AAAA,MAC5C;AACA,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACvB,QAAA,OAAO,MAAA,CAAO,WAAA;AAAA,UACZ,KAAK,OAAA,CAAQ,CAAC,MAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,GAAI,CAAC,CAAC,CAAA,EAAG,KAAK,GAAA,CAAI,CAAC,CAAC,CAAC,CAAA,GAAI,EAAG;AAAA,SAC7D;AAAA,MACF;AACA,MAAA,MAAM,MAA+B,EAAC;AACtC,MAAA,KAAA,MAAW,CAAC,CAAA,EAAG,GAAG,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG;AAC3C,QAAA,GAAA,CAAI,CAAC,IAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA;AAAA,MACvC;AACA,MAAA,OAAO,GAAA;AAAA,IACT,CAAA;AAAA,IACA,MAAM,IAAI,KAAA,EAA+C;AACvD,MAAA,MAAM,UAAwD,EAAC;AAC/D,MAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC1C,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA;AAGvB,QAAA,IAAI,SAAA,CAAU,IAAA,EAAM,CAAC,CAAA,EAAG;AACxB,QAAA,MAAM,MAAA,GAAuC,EAAE,QAAA,EAAU,CAAA,EAAE;AAC3D,QAAA,IAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,SAAU,QAAA,GAAW,IAAA;AACnC,QAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,MAAA;AACb,QAAA,IAAA,CAAK,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA,MACf;AACA,MAAA,iBAAA,CAAkB,OAAO,CAAA;AAAA,IAC3B,CAAA;AAAA,IACA,MAAM,OAAO,IAAA,EAAwC;AACnD,MAAA,MAAM,MAAM,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,GAAI,IAAA,GAAO,CAAC,IAAI,CAAA;AAC9C,MAAA,MAAM,UAAwD,EAAC;AAC/D,MAAA,KAAA,MAAW,KAAK,GAAA,EAAK;AACnB,QAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,EAAG;AAClB,QAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,EAAE,UAAU,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,EAAE;AACrC,QAAA,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,MACf;AACA,MAAA,iBAAA,CAAkB,OAAO,CAAA;AAAA,IAC3B,CAAA;AAAA,IACA,MAAM,KAAA,GAAuB;AAC3B,MAAA,MAAM,UAAwD,EAAC;AAC/D,MAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,CAAA,IAAK,IAAA,UAAc,CAAC,CAAA,GAAI,EAAE,QAAA,EAAU,CAAA,EAAE;AACtD,MAAA,IAAA,CAAK,KAAA,EAAM;AACX,MAAA,iBAAA,CAAkB,OAAO,CAAA;AAAA,IAC3B;AAAA,GACF;AAOA,EAAA,MAAM,KAAA,GAAQ,OAAA;AAcd,EAAA,MAAM,gBAAA,uBAAuB,GAAA,EAAqB;AAMlD,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAAY;AAmBpC,EAAA,MAAM,QAAA,GAAW,CACf,OAAA,EACA,MAAA,KACqB;AACrB,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,IAAI,SAAA,GAAY,KAAA;AAChB,MAAA,MAAM,YAAA,GAAe,CAAC,QAAA,KAA4B;AAChD,QAAA,IAAI,SAAA,EAAW;AACf,QAAA,SAAA,GAAY,IAAA;AACZ,QAAA,OAAA,CAAQ,QAAQ,CAAA;AAAA,MAClB,CAAA;AACA,MAAA,MAAM,QAAA,GAAW,KAAA,CAAM,IAAA,CAAK,gBAAgB,CAAA;AAC5C,MAAA,IAAI,gBAAA,GAAmB,KAAA;AACvB,MAAA,KAAA,MAAW,YAAY,QAAA,EAAU;AAC/B,QAAA,MAAM,CAAA,GAAI,QAAA,CAAS,OAAA,EAAS,MAAA,EAAQ,YAAY,CAAA;AAChD,QAAA,IAAI,CAAA,KAAM,MAAM,gBAAA,GAAmB,IAAA;AACnC,QAAA,IAAI,SAAA,EAAW;AAAA,MACjB;AACA,MAAA,IAAI,gBAAA,EAAkB;AACtB,MAAA,MAAA;AAAA,QACE,IAAI,KAAA;AAAA,UACF;AAAA;AACF,OACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,kBACJ,EAAC;AAEH,EAAA,MAAM,cAAA,GAAiB;AAAA,IACrB,YAAY,OAAA,EAAoC;AAC9C,MAAA,OAAO,QAAA,CAAS,SAAS,eAAe,CAAA;AAAA,IAC1C,CAAA;AAAA,IACA,SAAA,EAAW;AAAA,MACT,YAAY,QAAA,EAAiC;AAC3C,QAAA,gBAAA,CAAiB,IAAI,QAAQ,CAAA;AAAA,MAC/B,CAAA;AAAA,MACA,eAAe,QAAA,EAAiC;AAC9C,QAAA,gBAAA,CAAiB,OAAO,QAAQ,CAAA;AAAA,MAClC,CAAA;AAAA,MACA,YAAY,QAAA,EAAoC;AAC9C,QAAA,OAAO,gBAAA,CAAiB,IAAI,QAAQ,CAAA;AAAA,MACtC,CAAA;AAAA,MACA,YAAA,GAAwB;AACtB,QAAA,OAAO,iBAAiB,IAAA,GAAO,CAAA;AAAA,MACjC;AAAA;AACF,GACF;AAEA,EAAA,MAAM,OAAA,GAAU,cAAA;AAUhB,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,WAAA,CAAY,OAAe,OAAA,EAAoC;AAC7D,MAAA,IAAI,WAAA,CAAY,GAAA,CAAI,KAAK,CAAA,EAAG;AAC1B,QAAA,OAAO,OAAA,CAAQ,MAAA;AAAA,UACb,IAAI,KAAA;AAAA,YACF,wEAAwE,KAAK,CAAA,CAAA;AAAA;AAC/E,SACF;AAAA,MACF;AACA,MAAA,OAAO,QAAA,CAAS,SAAS,eAAe,CAAA;AAAA,IAC1C;AAAA,GACF;AAOA,EAAA,MAAM,qBAAA,uBAA4B,GAAA,EAA0B;AAC5D,EAAA,MAAM,mBAAA,uBAA0B,GAAA,EAAwB;AACxD,EAAA,MAAM,mBAAA,uBAA0B,GAAA,EAAwB;AAExD,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,GAAG,WAAA;AAAA,IACH,WAAA,EAAa;AAAA,MACX,YAAY,QAAA,EAAsC;AAChD,QAAA,qBAAA,CAAsB,IAAI,QAAQ,CAAA;AAAA,MACpC,CAAA;AAAA,MACA,eAAe,QAAA,EAAsC;AACnD,QAAA,qBAAA,CAAsB,OAAO,QAAQ,CAAA;AAAA,MACvC,CAAA;AAAA,MACA,YAAY,QAAA,EAAyC;AACnD,QAAA,OAAO,qBAAA,CAAsB,IAAI,QAAQ,CAAA;AAAA,MAC3C,CAAA;AAAA,MACA,YAAA,GAAwB;AACtB,QAAA,OAAO,sBAAsB,IAAA,GAAO,CAAA;AAAA,MACtC;AAAA,KACF;AAAA,IACA,SAAA,EAAW;AAAA,MACT,YAAY,QAAA,EAAoC;AAC9C,QAAA,mBAAA,CAAoB,IAAI,QAAQ,CAAA;AAAA,MAClC,CAAA;AAAA,MACA,eAAe,QAAA,EAAoC;AACjD,QAAA,mBAAA,CAAoB,OAAO,QAAQ,CAAA;AAAA,MACrC,CAAA;AAAA,MACA,YAAY,QAAA,EAAuC;AACjD,QAAA,OAAO,mBAAA,CAAoB,IAAI,QAAQ,CAAA;AAAA,MACzC,CAAA;AAAA,MACA,YAAA,GAAwB;AACtB,QAAA,OAAO,oBAAoB,IAAA,GAAO,CAAA;AAAA,MACpC;AAAA,KACF;AAAA,IACA,SAAA,EAAW;AAAA,MACT,YAAY,QAAA,EAAoC;AAC9C,QAAA,mBAAA,CAAoB,IAAI,QAAQ,CAAA;AAAA,MAClC,CAAA;AAAA,MACA,eAAe,QAAA,EAAoC;AACjD,QAAA,mBAAA,CAAoB,OAAO,QAAQ,CAAA;AAAA,MACrC,CAAA;AAAA,MACA,YAAY,QAAA,EAAuC;AACjD,QAAA,OAAO,mBAAA,CAAoB,IAAI,QAAQ,CAAA;AAAA,MACzC,CAAA;AAAA,MACA,YAAA,GAAwB;AACtB,QAAA,OAAO,oBAAoB,IAAA,GAAO,CAAA;AAAA,MACpC;AAAA;AACF,GACF;AAEA,EAAA,MAAM,IAAA,GAAO,QAAA;AAWb,EAAA,MAAM,QAAA,uBAAe,GAAA,EAA2C;AAChE,EAAA,MAAM,cAAA,uBAAqB,GAAA,EAAmB;AAE9C,EAAA,MAAM,MAAA,GAA+B;AAAA,IACnC,MAAA,CAAO,MAAc,SAAA,EAAgD;AACnE,MAAA,QAAA,CAAS,GAAA,CAAI,MAAM,SAAS,CAAA;AAAA,IAC9B,CAAA;AAAA,IACA,MAAM,IAAI,IAAA,EAAwD;AAChE,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA;AAC9B,MAAA,IAAI,IAAA,KAAS,QAAW,OAAO,MAAA;AAC/B,MAAA,OAAO;AAAA,QACL,IAAA;AAAA,QACA,aAAA,EAAe,KAAK,GAAA,EAAI;AAAA,QACxB,iBAAiB,IAAA,CAAK;AAAA,OACxB;AAAA,IACF,CAAA;AAAA,IACA,MAAM,MAAM,IAAA,EAAgC;AAC1C,MAAA,OAAO,QAAA,CAAS,OAAO,IAAI,CAAA;AAAA,IAC7B,CAAA;AAAA,IACA,OAAA,EAAS;AAAA,MACP,YAAY,QAAA,EAA+B;AACzC,QAAA,cAAA,CAAe,IAAI,QAAQ,CAAA;AAAA,MAC7B,CAAA;AAAA,MACA,eAAe,QAAA,EAA+B;AAC5C,QAAA,cAAA,CAAe,OAAO,QAAQ,CAAA;AAAA,MAChC,CAAA;AAAA,MACA,YAAY,QAAA,EAAkC;AAC5C,QAAA,OAAO,cAAA,CAAe,IAAI,QAAQ,CAAA;AAAA,MACpC,CAAA;AAAA,MACA,YAAA,GAAwB;AACtB,QAAA,OAAO,eAAe,IAAA,GAAO,CAAA;AAAA,MAC/B;AAAA;AACF,GACF;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS;AAAA,MACP,KAAA;AAAA,MACA,SAAA,EAAW;AAAA,QACT,YAAY,QAAA,EAAuC;AACjD,UAAA,gBAAA,CAAiB,IAAI,QAAQ,CAAA;AAAA,QAC/B,CAAA;AAAA,QACA,eAAe,QAAA,EAAuC;AACpD,UAAA,gBAAA,CAAiB,OAAO,QAAQ,CAAA;AAAA,QAClC,CAAA;AAAA,QACA,YAAY,QAAA,EAA0C;AACpD,UAAA,OAAO,gBAAA,CAAiB,IAAI,QAAQ,CAAA;AAAA,QACtC,CAAA;AAAA,QACA,YAAA,GAAwB;AACtB,UAAA,OAAO,iBAAiB,IAAA,GAAO,CAAA;AAAA,QACjC;AAAA;AACF,KACF;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,WAAA,CAAY,OAAe,OAAA,EAAoC;AAC7D,QAAA,MAAM,YAAA,GAAe;AAAA,UACnB,GAAA,EAAK,EAAE,EAAA,EAAI,KAAA;AAAM,SACnB;AACA,QAAA,OAAO,QAAA,CAAS,SAAS,YAAY,CAAA;AAAA,MACvC,CAAA;AAAA,MACA,UAAU,KAAA,EAAqB;AAC7B,QAAA,WAAA,CAAY,IAAI,KAAK,CAAA;AAAA,MACvB,CAAA;AAAA,MACA,OAAO,KAAA,EAAqB;AAC1B,QAAA,WAAA,CAAY,OAAO,KAAK,CAAA;AAAA,MAC1B,CAAA;AAAA,MACA,UAAU,IAAA,EAAoB;AAC5B,QAAA,MAAM,IAAA,GAAO,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA;AAC9B,QAAA,IAAI,SAAS,MAAA,EAAW;AAIxB,QAAA,MAAM,KAAA,GAA6B;AAAA,UACjC,IAAA;AAAA,UACA,aAAA,EAAe,KAAK,GAAA,EAAI;AAAA,UACxB,iBAAiB,IAAA,CAAK;AAAA,SACxB;AACA,QAAA,KAAA,MAAW,QAAA,IAAY,KAAA,CAAM,IAAA,CAAK,cAAc,CAAA,EAAG;AACjD,UAAA,QAAA,CAAS,KAAK,CAAA;AAAA,QAChB;AAAA,MACF,CAAA;AAAA,MACA,SAAA,GAA+B;AAC7B,QAAA,OAAO,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,IAAA,EAAM,CAAA;AAAA,MACnC,CAAA;AAAA,MACA,iBAAiB,IAAA,EAAyC;AACxD,QAAA,KAAA,MAAW,QAAA,IAAY,KAAA,CAAM,IAAA,CAAK,qBAAqB,CAAA,EAAG;AACxD,UAAA,QAAA,CAAS,IAAI,CAAA;AAAA,QACf;AAAA,MACF,CAAA;AAAA,MACA,cAAA,CACE,KAAA,EACA,UAAA,EACA,GAAA,EACM;AACN,QAAA,KAAA,MAAW,QAAA,IAAY,KAAA,CAAM,IAAA,CAAK,mBAAmB,CAAA,EAAG;AACtD,UAAA,QAAA,CAAS,KAAA,EAAO,YAAY,GAAG,CAAA;AAAA,QACjC;AAAA,MACF,CAAA;AAAA,MACA,cAAA,CACE,OACA,UAAA,EACM;AACN,QAAA,KAAA,MAAW,QAAA,IAAY,KAAA,CAAM,IAAA,CAAK,mBAAmB,CAAA,EAAG;AACtD,UAAA,QAAA,CAAS,OAAO,UAAU,CAAA;AAAA,QAC5B;AAAA,MACF;AAAA;AACF,GACF;AACF","file":"test-utils.js","sourcesContent":["/**\n * In-memory `chrome.*` mock for tests in this package and any downstream\n * consumer that wants to test against `chromeStorageStore` behavior without\n * a real chrome environment.\n *\n * Currently exposes `chrome.storage.local`, `chrome.runtime` (sendMessage +\n * onMessage), and `chrome.tabs` (sendMessage). The `runtime` and `tabs`\n * surfaces are used by the runtime-bridge tests (`bridge.ts`) to round-trip\n * envelopes between a host runtime and a surface client (sw↔surface) and\n * between a sw client and a per-tab content-script runtime (sw↔content).\n *\n * Extend additional surfaces (alarms, windows, …) only when real consumer\n * tests reach for them — earn each surface through a concrete need.\n */\n\ntype RuntimeListener = (\n message: unknown,\n sender: chrome.runtime.MessageSender,\n sendResponse: (response: unknown) => void,\n // biome-ignore lint/suspicious/noConfusingVoidType: mirrors the chrome.runtime.onMessage listener return type (boolean | undefined | void)\n) => boolean | undefined | void;\n\ntype StorageChangeListener = (\n changes: Record<string, chrome.storage.StorageChange>,\n areaName: chrome.storage.AreaName,\n) => void;\n\ntype AlarmListener = (alarm: chrome.alarms.Alarm) => void;\n\ntype TabActivatedListener = (info: chrome.tabs.OnActivatedInfo) => void;\ntype TabUpdatedListener = (\n tabId: number,\n changeInfo: chrome.tabs.OnUpdatedInfo,\n tab: chrome.tabs.Tab,\n) => void;\ntype TabRemovedListener = (\n tabId: number,\n removeInfo: chrome.tabs.OnRemovedInfo,\n) => void;\n\nexport interface FakeChrome {\n storage: {\n local: chrome.storage.StorageArea;\n /**\n * Top-level `chrome.storage.onChanged` event. Fires for ANY area; consumer\n * filters by the `areaName` arg. Real chrome semantics: every `set` /\n * `remove` / `clear` that materially changes a key emits a single\n * `changes` map keyed by the changed keys.\n */\n onChanged: {\n addListener(listener: StorageChangeListener): void;\n removeListener(listener: StorageChangeListener): void;\n hasListener(listener: StorageChangeListener): boolean;\n hasListeners(): boolean;\n };\n };\n // Subset of `typeof chrome.runtime` covered by the fake — chrome's\n // ambient typings don't export a single `Runtime` interface, so we\n // declare the surface inline. Extend when tests reach for more.\n runtime: {\n sendMessage: typeof chrome.runtime.sendMessage;\n onMessage: typeof chrome.runtime.onMessage;\n };\n tabs: {\n sendMessage: typeof chrome.tabs.sendMessage;\n /**\n * `chrome.tabs.onActivated` — fires when the active tab in a window\n * changes. The fake only models the listener registry; tests drive\n * fires via `__test.fireTabActivated(info)`.\n */\n onActivated: {\n addListener(listener: TabActivatedListener): void;\n removeListener(listener: TabActivatedListener): void;\n hasListener(listener: TabActivatedListener): boolean;\n hasListeners(): boolean;\n };\n /**\n * `chrome.tabs.onUpdated` — fires when a tab is updated (url, title,\n * status, etc.). Tests drive fires via `__test.fireTabUpdated(...)`.\n */\n onUpdated: {\n addListener(listener: TabUpdatedListener): void;\n removeListener(listener: TabUpdatedListener): void;\n hasListener(listener: TabUpdatedListener): boolean;\n hasListeners(): boolean;\n };\n /**\n * `chrome.tabs.onRemoved` — fires when a tab is closed. Tests drive\n * fires via `__test.fireTabRemoved(...)`.\n */\n onRemoved: {\n addListener(listener: TabRemovedListener): void;\n removeListener(listener: TabRemovedListener): void;\n hasListener(listener: TabRemovedListener): boolean;\n hasListeners(): boolean;\n };\n };\n /**\n * `chrome.alarms` — the MV3 periodic timer primitive. The fake tracks\n * created alarms in a Map keyed by name, models `create` (dedupe by\n * name) + `clear` (remove from map), and exposes `onAlarm` as a\n * standard listener registry. Tests drive fires via\n * `__test.fireAlarm(name)`.\n */\n alarms: {\n create(name: string, alarmInfo: chrome.alarms.AlarmCreateInfo): void;\n /**\n * `chrome.alarms.get(name)` — resolves to the Alarm shape Chrome would\n * return (with `scheduledTime` synthesized at lookup time), or\n * undefined if no alarm with that name exists. Mirrors the contract\n * the `ensureQueueAlarm` SW-module-top-level helper checks (\"is this\n * alarm already present with the right period?\") — see\n * `apps/extension/extension/entrypoints/background.ts`.\n */\n get(name: string): Promise<chrome.alarms.Alarm | undefined>;\n clear(name: string): Promise<boolean>;\n onAlarm: {\n addListener(listener: AlarmListener): void;\n removeListener(listener: AlarmListener): void;\n hasListener(listener: AlarmListener): boolean;\n hasListeners(): boolean;\n };\n };\n /**\n * Test helpers — not part of the real chrome surface. Lets tests\n * simulate a content script issuing `chrome.runtime.sendMessage` from\n * inside a specific tab (chrome auto-tags `sender.tab.id` in that\n * direction) and remove a tab so `chrome.tabs.sendMessage` rejects\n * the way real chrome does when the receiver is gone.\n */\n __test: {\n /** Simulate a content-script broadcast tagged with `sender.tab.id`. */\n sendFromTab(tabId: number, message: unknown): Promise<unknown>;\n /** Mark a tab as gone — `chrome.tabs.sendMessage(tabId, …)` will reject. */\n removeTab(tabId: number): void;\n /** Mark a tab as alive (default for any tabId that hasn't been removed). */\n addTab(tabId: number): void;\n /** Fire an alarm — invokes every onAlarm listener with `{ name, ...}`. */\n fireAlarm(name: string): void;\n /** Snapshot the alarm registry — tests assert on created/cleared alarms. */\n getAlarms(): readonly string[];\n /** Fire `chrome.tabs.onActivated` — drives every listener. */\n fireTabActivated(info: chrome.tabs.OnActivatedInfo): void;\n /** Fire `chrome.tabs.onUpdated` — drives every listener. */\n fireTabUpdated(\n tabId: number,\n changeInfo: chrome.tabs.OnUpdatedInfo,\n tab: chrome.tabs.Tab,\n ): void;\n /** Fire `chrome.tabs.onRemoved` — drives every listener. */\n fireTabRemoved(tabId: number, removeInfo: chrome.tabs.OnRemovedInfo): void;\n };\n}\n\nexport function fakeChrome(): FakeChrome {\n const data = new Map<string, unknown>();\n\n // ─── chrome.storage.onChanged — top-level event ───────────────────────\n //\n // Real chrome emits `changes` keyed by every key that actually changed\n // (oldValue / newValue present). Unchanged keys aren't included. The\n // fake mirrors that: build the change map inside set/remove/clear, fire\n // listeners only if the map is non-empty. AreaName is \"local\" here —\n // the fake only models storage.local; if a future test reaches for\n // session/sync, add a per-area fake with its own onChanged.\n const storageListeners = new Set<StorageChangeListener>();\n function deepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (typeof a !== typeof b) return false;\n if (typeof a !== \"object\" || a === null || b === null) return false;\n return JSON.stringify(a) === JSON.stringify(b);\n }\n function fireStorageChange(\n changes: Record<string, chrome.storage.StorageChange>,\n ): void {\n if (Object.keys(changes).length === 0) return;\n for (const listener of Array.from(storageListeners)) {\n listener(changes, \"local\");\n }\n }\n\n const partial = {\n async get(\n keys?: string | string[] | Record<string, unknown> | null,\n ): Promise<Record<string, unknown>> {\n // get() → all entries\n // get(\"k\") → { k: v } if present, {} otherwise\n // get([\"k1\",\"k2\"]) → { k: v } for present keys\n // get({ k: default}) → { k: v ?? default } per key\n if (keys === undefined || keys === null) {\n return Object.fromEntries(data);\n }\n if (typeof keys === \"string\") {\n const v = data.get(keys);\n return v === undefined ? {} : { [keys]: v };\n }\n if (Array.isArray(keys)) {\n return Object.fromEntries(\n keys.flatMap((k) => (data.has(k) ? [[k, data.get(k)]] : [])),\n );\n }\n const out: Record<string, unknown> = {};\n for (const [k, def] of Object.entries(keys)) {\n out[k] = data.has(k) ? data.get(k) : def;\n }\n return out;\n },\n async set(items: Record<string, unknown>): Promise<void> {\n const changes: Record<string, chrome.storage.StorageChange> = {};\n for (const [k, v] of Object.entries(items)) {\n const prev = data.get(k);\n // Real chrome only fires onChanged when the value actually\n // changes — match that to avoid spurious re-renders in tests.\n if (deepEqual(prev, v)) continue;\n const change: chrome.storage.StorageChange = { newValue: v };\n if (data.has(k)) change.oldValue = prev;\n changes[k] = change;\n data.set(k, v);\n }\n fireStorageChange(changes);\n },\n async remove(keys: string | string[]): Promise<void> {\n const arr = Array.isArray(keys) ? keys : [keys];\n const changes: Record<string, chrome.storage.StorageChange> = {};\n for (const k of arr) {\n if (!data.has(k)) continue;\n changes[k] = { oldValue: data.get(k) };\n data.delete(k);\n }\n fireStorageChange(changes);\n },\n async clear(): Promise<void> {\n const changes: Record<string, chrome.storage.StorageChange> = {};\n for (const [k, v] of data) changes[k] = { oldValue: v };\n data.clear();\n fireStorageChange(changes);\n },\n };\n\n // The full `chrome.storage.StorageArea` contract has more surface\n // (getBytesInUse, getKeys, onChanged event, setAccessLevel) than real\n // consumer tests currently exercise. The cast is local to this test util;\n // src/index.ts never casts. If a test needs more surface, implement it\n // here instead of widening the cast.\n const local = partial as unknown as chrome.storage.StorageArea;\n\n // ─── chrome.runtime — sendMessage + onMessage round-trip ───────────────\n //\n // The fake mirrors MV3 semantics that matter for the bridge:\n // - sendMessage delivers to EVERY onMessage listener in arrival order.\n // - The first listener that returns `true` (or calls sendResponse\n // synchronously) \"wins\" — its sendResponse value resolves the\n // sendMessage promise. Listeners that return false/undefined are\n // passed over.\n // - If no listener handles the message, sendMessage rejects with the\n // same shape chrome uses (\"Could not establish connection.\n // Receiving end does not exist.\"). The bridge's broadcast path\n // swallows this.\n const runtimeListeners = new Set<RuntimeListener>();\n\n // Tracks tabs that are \"alive\" from `chrome.tabs.sendMessage`'s point of\n // view. Unknown tabIds are treated as alive by default (matches the\n // common test path: assign a number, send to it). Tests can `removeTab`\n // to simulate disconnection.\n const removedTabs = new Set<number>();\n\n /**\n * Internal dispatch helper. Real chrome distinguishes:\n * - `chrome.runtime.sendMessage(msg)` — sender is the extension origin,\n * `sender.tab` is undefined; all `chrome.runtime.onMessage` listeners\n * hear it.\n * - `chrome.tabs.sendMessage(tabId, msg)` — sender is the extension\n * origin (still no `sender.tab` on the receiving end's view here, but\n * the routing is by tab); only listeners IN that tab receive it. Our\n * fake collapses to the same listener set since tests run a single\n * \"tab\" of listeners at a time. The routing assertion is enforced by\n * callers reading the envelope/tabId pair they sent.\n * - Content-script `chrome.runtime.sendMessage(msg)` (the `sendFromTab`\n * helper) — chrome auto-tags `sender.tab.id`. SW-side listeners use\n * this to filter cross-tab broadcasts.\n *\n * `sender` controls which sender object the listeners see.\n */\n const dispatch = (\n message: unknown,\n sender: chrome.runtime.MessageSender,\n ): Promise<unknown> => {\n return new Promise((resolve, reject) => {\n let responded = false;\n const sendResponse = (response: unknown): void => {\n if (responded) return;\n responded = true;\n resolve(response);\n };\n const snapshot = Array.from(runtimeListeners);\n let willRespondAsync = false;\n for (const listener of snapshot) {\n const r = listener(message, sender, sendResponse);\n if (r === true) willRespondAsync = true;\n if (responded) return;\n }\n if (willRespondAsync) return;\n reject(\n new Error(\n \"Could not establish connection. Receiving end does not exist.\",\n ),\n );\n });\n };\n\n const extensionSender: chrome.runtime.MessageSender =\n {} as chrome.runtime.MessageSender;\n\n const runtimePartial = {\n sendMessage(message: unknown): Promise<unknown> {\n return dispatch(message, extensionSender);\n },\n onMessage: {\n addListener(listener: RuntimeListener): void {\n runtimeListeners.add(listener);\n },\n removeListener(listener: RuntimeListener): void {\n runtimeListeners.delete(listener);\n },\n hasListener(listener: RuntimeListener): boolean {\n return runtimeListeners.has(listener);\n },\n hasListeners(): boolean {\n return runtimeListeners.size > 0;\n },\n },\n };\n\n const runtime = runtimePartial as unknown as FakeChrome[\"runtime\"];\n\n // ─── chrome.tabs.sendMessage — SW → content-script routing ─────────────\n //\n // Real chrome routes by tabId; the receiving content script's\n // `chrome.runtime.onMessage` fires with `sender` representing the\n // extension (no `sender.tab`). The fake collapses to the shared listener\n // set since tests run one runtime per process, but enforces the\n // \"tab gone\" reject so consumers can verify their fire-and-forget\n // posture.\n const tabsPartial = {\n sendMessage(tabId: number, message: unknown): Promise<unknown> {\n if (removedTabs.has(tabId)) {\n return Promise.reject(\n new Error(\n `Could not establish connection. Receiving end does not exist. (tabId=${tabId})`,\n ),\n );\n }\n return dispatch(message, extensionSender);\n },\n };\n\n // ─── chrome.tabs.on{Activated,Updated,Removed} — listener registries ────\n //\n // Tests drive fires via the __test helpers below. Production-code Sub\n // factories register/unregister; the fake only models the registry +\n // dispatch, not the chrome events themselves (no real tabs to observe).\n const tabActivatedListeners = new Set<TabActivatedListener>();\n const tabUpdatedListeners = new Set<TabUpdatedListener>();\n const tabRemovedListeners = new Set<TabRemovedListener>();\n\n const tabsFull = {\n ...tabsPartial,\n onActivated: {\n addListener(listener: TabActivatedListener): void {\n tabActivatedListeners.add(listener);\n },\n removeListener(listener: TabActivatedListener): void {\n tabActivatedListeners.delete(listener);\n },\n hasListener(listener: TabActivatedListener): boolean {\n return tabActivatedListeners.has(listener);\n },\n hasListeners(): boolean {\n return tabActivatedListeners.size > 0;\n },\n },\n onUpdated: {\n addListener(listener: TabUpdatedListener): void {\n tabUpdatedListeners.add(listener);\n },\n removeListener(listener: TabUpdatedListener): void {\n tabUpdatedListeners.delete(listener);\n },\n hasListener(listener: TabUpdatedListener): boolean {\n return tabUpdatedListeners.has(listener);\n },\n hasListeners(): boolean {\n return tabUpdatedListeners.size > 0;\n },\n },\n onRemoved: {\n addListener(listener: TabRemovedListener): void {\n tabRemovedListeners.add(listener);\n },\n removeListener(listener: TabRemovedListener): void {\n tabRemovedListeners.delete(listener);\n },\n hasListener(listener: TabRemovedListener): boolean {\n return tabRemovedListeners.has(listener);\n },\n hasListeners(): boolean {\n return tabRemovedListeners.size > 0;\n },\n },\n };\n\n const tabs = tabsFull as unknown as FakeChrome[\"tabs\"];\n\n // ─── chrome.alarms — listener registry + name-keyed alarm map ─────────\n //\n // create(name, info) stores `info` keyed by name (dedupe on repeat —\n // matches real chrome's behavior of replacing the prior alarm). clear()\n // removes from the map and resolves to `true` if the alarm existed,\n // `false` otherwise (matches real chrome's contract). onAlarm is a\n // standard listener registry. The fake does NOT auto-fire alarms based\n // on `periodInMinutes` — tests drive fires deterministically via\n // `__test.fireAlarm(name)`.\n const alarmMap = new Map<string, chrome.alarms.AlarmCreateInfo>();\n const alarmListeners = new Set<AlarmListener>();\n\n const alarms: FakeChrome[\"alarms\"] = {\n create(name: string, alarmInfo: chrome.alarms.AlarmCreateInfo): void {\n alarmMap.set(name, alarmInfo);\n },\n async get(name: string): Promise<chrome.alarms.Alarm | undefined> {\n const info = alarmMap.get(name);\n if (info === undefined) return undefined;\n return {\n name,\n scheduledTime: Date.now(),\n periodInMinutes: info.periodInMinutes,\n };\n },\n async clear(name: string): Promise<boolean> {\n return alarmMap.delete(name);\n },\n onAlarm: {\n addListener(listener: AlarmListener): void {\n alarmListeners.add(listener);\n },\n removeListener(listener: AlarmListener): void {\n alarmListeners.delete(listener);\n },\n hasListener(listener: AlarmListener): boolean {\n return alarmListeners.has(listener);\n },\n hasListeners(): boolean {\n return alarmListeners.size > 0;\n },\n },\n };\n\n return {\n storage: {\n local,\n onChanged: {\n addListener(listener: StorageChangeListener): void {\n storageListeners.add(listener);\n },\n removeListener(listener: StorageChangeListener): void {\n storageListeners.delete(listener);\n },\n hasListener(listener: StorageChangeListener): boolean {\n return storageListeners.has(listener);\n },\n hasListeners(): boolean {\n return storageListeners.size > 0;\n },\n },\n },\n runtime,\n tabs,\n alarms,\n __test: {\n sendFromTab(tabId: number, message: unknown): Promise<unknown> {\n const taggedSender = {\n tab: { id: tabId },\n } as chrome.runtime.MessageSender;\n return dispatch(message, taggedSender);\n },\n removeTab(tabId: number): void {\n removedTabs.add(tabId);\n },\n addTab(tabId: number): void {\n removedTabs.delete(tabId);\n },\n fireAlarm(name: string): void {\n const info = alarmMap.get(name);\n if (info === undefined) return;\n // Real chrome's Alarm shape carries `name`, `scheduledTime`, and\n // `periodInMinutes`. The fake stamps `scheduledTime` at fire time\n // and forwards the period from the create call.\n const alarm: chrome.alarms.Alarm = {\n name,\n scheduledTime: Date.now(),\n periodInMinutes: info.periodInMinutes,\n };\n for (const listener of Array.from(alarmListeners)) {\n listener(alarm);\n }\n },\n getAlarms(): readonly string[] {\n return Array.from(alarmMap.keys());\n },\n fireTabActivated(info: chrome.tabs.OnActivatedInfo): void {\n for (const listener of Array.from(tabActivatedListeners)) {\n listener(info);\n }\n },\n fireTabUpdated(\n tabId: number,\n changeInfo: chrome.tabs.OnUpdatedInfo,\n tab: chrome.tabs.Tab,\n ): void {\n for (const listener of Array.from(tabUpdatedListeners)) {\n listener(tabId, changeInfo, tab);\n }\n },\n fireTabRemoved(\n tabId: number,\n removeInfo: chrome.tabs.OnRemovedInfo,\n ): void {\n for (const listener of Array.from(tabRemovedListeners)) {\n listener(tabId, removeInfo);\n }\n },\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/extension/test-utils.ts"],"names":[],"mappings":"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","file":"test-utils.js","sourcesContent":["/**\n * In-memory `chrome.*` mock for tests in this package and any downstream\n * consumer that wants to test against `chromeStorageStore` behavior without\n * a real chrome environment.\n *\n * Currently exposes `chrome.storage.local`, `chrome.runtime` (sendMessage +\n * onMessage), and `chrome.tabs` (sendMessage). The `runtime` and `tabs`\n * surfaces are used by the runtime-bridge tests (`bridge.ts`) to round-trip\n * envelopes between a host runtime and a surface client (sw↔surface) and\n * between a sw client and a per-tab content-script runtime (sw↔content).\n *\n * Extend additional surfaces (alarms, windows, …) only when real consumer\n * tests reach for them — earn each surface through a concrete need.\n */\n\ntype RuntimeListener = (\n message: unknown,\n sender: chrome.runtime.MessageSender,\n sendResponse: (response: unknown) => void,\n // biome-ignore lint/suspicious/noConfusingVoidType: mirrors the chrome.runtime.onMessage listener return type (boolean | undefined | void)\n) => boolean | undefined | void;\n\ntype StorageChangeListener = (\n changes: Record<string, chrome.storage.StorageChange>,\n areaName: chrome.storage.AreaName,\n) => void;\n\ntype AlarmListener = (alarm: chrome.alarms.Alarm) => void;\n\ntype TabActivatedListener = (info: chrome.tabs.OnActivatedInfo) => void;\ntype TabUpdatedListener = (\n tabId: number,\n changeInfo: chrome.tabs.OnUpdatedInfo,\n tab: chrome.tabs.Tab,\n) => void;\ntype TabRemovedListener = (\n tabId: number,\n removeInfo: chrome.tabs.OnRemovedInfo,\n) => void;\n\nexport interface FakeChrome {\n storage: {\n local: chrome.storage.StorageArea;\n /**\n * Top-level `chrome.storage.onChanged` event. Fires for ANY area; consumer\n * filters by the `areaName` arg. Real chrome semantics: every `set` /\n * `remove` / `clear` that materially changes a key emits a single\n * `changes` map keyed by the changed keys.\n */\n onChanged: {\n addListener(listener: StorageChangeListener): void;\n removeListener(listener: StorageChangeListener): void;\n hasListener(listener: StorageChangeListener): boolean;\n hasListeners(): boolean;\n };\n };\n // Subset of `typeof chrome.runtime` covered by the fake — chrome's\n // ambient typings don't export a single `Runtime` interface, so we\n // declare the surface inline. Extend when tests reach for more.\n runtime: {\n sendMessage: typeof chrome.runtime.sendMessage;\n onMessage: typeof chrome.runtime.onMessage;\n };\n tabs: {\n sendMessage: typeof chrome.tabs.sendMessage;\n /**\n * `chrome.tabs.onActivated` — fires when the active tab in a window\n * changes. The fake only models the listener registry; tests drive\n * fires via `__test.fireTabActivated(info)`.\n */\n onActivated: {\n addListener(listener: TabActivatedListener): void;\n removeListener(listener: TabActivatedListener): void;\n hasListener(listener: TabActivatedListener): boolean;\n hasListeners(): boolean;\n };\n /**\n * `chrome.tabs.onUpdated` — fires when a tab is updated (url, title,\n * status, etc.). Tests drive fires via `__test.fireTabUpdated(...)`.\n */\n onUpdated: {\n addListener(listener: TabUpdatedListener): void;\n removeListener(listener: TabUpdatedListener): void;\n hasListener(listener: TabUpdatedListener): boolean;\n hasListeners(): boolean;\n };\n /**\n * `chrome.tabs.onRemoved` — fires when a tab is closed. Tests drive\n * fires via `__test.fireTabRemoved(...)`.\n */\n onRemoved: {\n addListener(listener: TabRemovedListener): void;\n removeListener(listener: TabRemovedListener): void;\n hasListener(listener: TabRemovedListener): boolean;\n hasListeners(): boolean;\n };\n };\n /**\n * `chrome.alarms` — the MV3 periodic timer primitive. The fake tracks\n * created alarms in a Map keyed by name, models `create` (dedupe by\n * name) + `clear` (remove from map), and exposes `onAlarm` as a\n * standard listener registry. Tests drive fires via\n * `__test.fireAlarm(name)`.\n */\n alarms: {\n create(name: string, alarmInfo: chrome.alarms.AlarmCreateInfo): void;\n /**\n * `chrome.alarms.get(name)` — resolves to the Alarm shape Chrome would\n * return (with `scheduledTime` synthesized at lookup time), or\n * undefined if no alarm with that name exists. Mirrors the contract\n * the `ensureQueueAlarm` SW-module-top-level helper checks (\"is this\n * alarm already present with the right period?\") — see\n * the extension's background entrypoint.\n */\n get(name: string): Promise<chrome.alarms.Alarm | undefined>;\n clear(name: string): Promise<boolean>;\n onAlarm: {\n addListener(listener: AlarmListener): void;\n removeListener(listener: AlarmListener): void;\n hasListener(listener: AlarmListener): boolean;\n hasListeners(): boolean;\n };\n };\n /**\n * Test helpers — not part of the real chrome surface. Lets tests\n * simulate a content script issuing `chrome.runtime.sendMessage` from\n * inside a specific tab (chrome auto-tags `sender.tab.id` in that\n * direction) and remove a tab so `chrome.tabs.sendMessage` rejects\n * the way real chrome does when the receiver is gone.\n */\n __test: {\n /** Simulate a content-script broadcast tagged with `sender.tab.id`. */\n sendFromTab(tabId: number, message: unknown): Promise<unknown>;\n /** Mark a tab as gone — `chrome.tabs.sendMessage(tabId, …)` will reject. */\n removeTab(tabId: number): void;\n /** Mark a tab as alive (default for any tabId that hasn't been removed). */\n addTab(tabId: number): void;\n /** Fire an alarm — invokes every onAlarm listener with `{ name, ...}`. */\n fireAlarm(name: string): void;\n /** Snapshot the alarm registry — tests assert on created/cleared alarms. */\n getAlarms(): readonly string[];\n /** Fire `chrome.tabs.onActivated` — drives every listener. */\n fireTabActivated(info: chrome.tabs.OnActivatedInfo): void;\n /** Fire `chrome.tabs.onUpdated` — drives every listener. */\n fireTabUpdated(\n tabId: number,\n changeInfo: chrome.tabs.OnUpdatedInfo,\n tab: chrome.tabs.Tab,\n ): void;\n /** Fire `chrome.tabs.onRemoved` — drives every listener. */\n fireTabRemoved(tabId: number, removeInfo: chrome.tabs.OnRemovedInfo): void;\n };\n}\n\nexport function fakeChrome(): FakeChrome {\n const data = new Map<string, unknown>();\n\n // ─── chrome.storage.onChanged — top-level event ───────────────────────\n //\n // Real chrome emits `changes` keyed by every key that actually changed\n // (oldValue / newValue present). Unchanged keys aren't included. The\n // fake mirrors that: build the change map inside set/remove/clear, fire\n // listeners only if the map is non-empty. AreaName is \"local\" here —\n // the fake only models storage.local; if a future test reaches for\n // session/sync, add a per-area fake with its own onChanged.\n const storageListeners = new Set<StorageChangeListener>();\n function deepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (typeof a !== typeof b) return false;\n if (typeof a !== \"object\" || a === null || b === null) return false;\n return JSON.stringify(a) === JSON.stringify(b);\n }\n function fireStorageChange(\n changes: Record<string, chrome.storage.StorageChange>,\n ): void {\n if (Object.keys(changes).length === 0) return;\n for (const listener of Array.from(storageListeners)) {\n listener(changes, \"local\");\n }\n }\n\n const partial = {\n async get(\n keys?: string | string[] | Record<string, unknown> | null,\n ): Promise<Record<string, unknown>> {\n // get() → all entries\n // get(\"k\") → { k: v } if present, {} otherwise\n // get([\"k1\",\"k2\"]) → { k: v } for present keys\n // get({ k: default}) → { k: v ?? default } per key\n if (keys === undefined || keys === null) {\n return Object.fromEntries(data);\n }\n if (typeof keys === \"string\") {\n const v = data.get(keys);\n return v === undefined ? {} : { [keys]: v };\n }\n if (Array.isArray(keys)) {\n return Object.fromEntries(\n keys.flatMap((k) => (data.has(k) ? [[k, data.get(k)]] : [])),\n );\n }\n const out: Record<string, unknown> = {};\n for (const [k, def] of Object.entries(keys)) {\n out[k] = data.has(k) ? data.get(k) : def;\n }\n return out;\n },\n async set(items: Record<string, unknown>): Promise<void> {\n const changes: Record<string, chrome.storage.StorageChange> = {};\n for (const [k, v] of Object.entries(items)) {\n const prev = data.get(k);\n // Real chrome only fires onChanged when the value actually\n // changes — match that to avoid spurious re-renders in tests.\n if (deepEqual(prev, v)) continue;\n const change: chrome.storage.StorageChange = { newValue: v };\n if (data.has(k)) change.oldValue = prev;\n changes[k] = change;\n data.set(k, v);\n }\n fireStorageChange(changes);\n },\n async remove(keys: string | string[]): Promise<void> {\n const arr = Array.isArray(keys) ? keys : [keys];\n const changes: Record<string, chrome.storage.StorageChange> = {};\n for (const k of arr) {\n if (!data.has(k)) continue;\n changes[k] = { oldValue: data.get(k) };\n data.delete(k);\n }\n fireStorageChange(changes);\n },\n async clear(): Promise<void> {\n const changes: Record<string, chrome.storage.StorageChange> = {};\n for (const [k, v] of data) changes[k] = { oldValue: v };\n data.clear();\n fireStorageChange(changes);\n },\n };\n\n // The full `chrome.storage.StorageArea` contract has more surface\n // (getBytesInUse, getKeys, onChanged event, setAccessLevel) than real\n // consumer tests currently exercise. The cast is local to this test util;\n // src/index.ts never casts. If a test needs more surface, implement it\n // here instead of widening the cast.\n const local = partial as unknown as chrome.storage.StorageArea;\n\n // ─── chrome.runtime — sendMessage + onMessage round-trip ───────────────\n //\n // The fake mirrors MV3 semantics that matter for the bridge:\n // - sendMessage delivers to EVERY onMessage listener in arrival order.\n // - The first listener that returns `true` (or calls sendResponse\n // synchronously) \"wins\" — its sendResponse value resolves the\n // sendMessage promise. Listeners that return false/undefined are\n // passed over.\n // - If no listener handles the message, sendMessage rejects with the\n // same shape chrome uses (\"Could not establish connection.\n // Receiving end does not exist.\"). The bridge's broadcast path\n // swallows this.\n const runtimeListeners = new Set<RuntimeListener>();\n\n // Tracks tabs that are \"alive\" from `chrome.tabs.sendMessage`'s point of\n // view. Unknown tabIds are treated as alive by default (matches the\n // common test path: assign a number, send to it). Tests can `removeTab`\n // to simulate disconnection.\n const removedTabs = new Set<number>();\n\n /**\n * Internal dispatch helper. Real chrome distinguishes:\n * - `chrome.runtime.sendMessage(msg)` — sender is the extension origin,\n * `sender.tab` is undefined; all `chrome.runtime.onMessage` listeners\n * hear it.\n * - `chrome.tabs.sendMessage(tabId, msg)` — sender is the extension\n * origin (still no `sender.tab` on the receiving end's view here, but\n * the routing is by tab); only listeners IN that tab receive it. Our\n * fake collapses to the same listener set since tests run a single\n * \"tab\" of listeners at a time. The routing assertion is enforced by\n * callers reading the envelope/tabId pair they sent.\n * - Content-script `chrome.runtime.sendMessage(msg)` (the `sendFromTab`\n * helper) — chrome auto-tags `sender.tab.id`. SW-side listeners use\n * this to filter cross-tab broadcasts.\n *\n * `sender` controls which sender object the listeners see.\n */\n const dispatch = (\n message: unknown,\n sender: chrome.runtime.MessageSender,\n ): Promise<unknown> => {\n return new Promise((resolve, reject) => {\n let responded = false;\n const sendResponse = (response: unknown): void => {\n if (responded) return;\n responded = true;\n resolve(response);\n };\n const snapshot = Array.from(runtimeListeners);\n let willRespondAsync = false;\n for (const listener of snapshot) {\n const r = listener(message, sender, sendResponse);\n if (r === true) willRespondAsync = true;\n if (responded) return;\n }\n if (willRespondAsync) return;\n reject(\n new Error(\n \"Could not establish connection. Receiving end does not exist.\",\n ),\n );\n });\n };\n\n const extensionSender: chrome.runtime.MessageSender =\n {} as chrome.runtime.MessageSender;\n\n const runtimePartial = {\n sendMessage(message: unknown): Promise<unknown> {\n return dispatch(message, extensionSender);\n },\n onMessage: {\n addListener(listener: RuntimeListener): void {\n runtimeListeners.add(listener);\n },\n removeListener(listener: RuntimeListener): void {\n runtimeListeners.delete(listener);\n },\n hasListener(listener: RuntimeListener): boolean {\n return runtimeListeners.has(listener);\n },\n hasListeners(): boolean {\n return runtimeListeners.size > 0;\n },\n },\n };\n\n const runtime = runtimePartial as unknown as FakeChrome[\"runtime\"];\n\n // ─── chrome.tabs.sendMessage — SW → content-script routing ─────────────\n //\n // Real chrome routes by tabId; the receiving content script's\n // `chrome.runtime.onMessage` fires with `sender` representing the\n // extension (no `sender.tab`). The fake collapses to the shared listener\n // set since tests run one runtime per process, but enforces the\n // \"tab gone\" reject so consumers can verify their fire-and-forget\n // posture.\n const tabsPartial = {\n sendMessage(tabId: number, message: unknown): Promise<unknown> {\n if (removedTabs.has(tabId)) {\n return Promise.reject(\n new Error(\n `Could not establish connection. Receiving end does not exist. (tabId=${tabId})`,\n ),\n );\n }\n return dispatch(message, extensionSender);\n },\n };\n\n // ─── chrome.tabs.on{Activated,Updated,Removed} — listener registries ────\n //\n // Tests drive fires via the __test helpers below. Production-code Sub\n // factories register/unregister; the fake only models the registry +\n // dispatch, not the chrome events themselves (no real tabs to observe).\n const tabActivatedListeners = new Set<TabActivatedListener>();\n const tabUpdatedListeners = new Set<TabUpdatedListener>();\n const tabRemovedListeners = new Set<TabRemovedListener>();\n\n const tabsFull = {\n ...tabsPartial,\n onActivated: {\n addListener(listener: TabActivatedListener): void {\n tabActivatedListeners.add(listener);\n },\n removeListener(listener: TabActivatedListener): void {\n tabActivatedListeners.delete(listener);\n },\n hasListener(listener: TabActivatedListener): boolean {\n return tabActivatedListeners.has(listener);\n },\n hasListeners(): boolean {\n return tabActivatedListeners.size > 0;\n },\n },\n onUpdated: {\n addListener(listener: TabUpdatedListener): void {\n tabUpdatedListeners.add(listener);\n },\n removeListener(listener: TabUpdatedListener): void {\n tabUpdatedListeners.delete(listener);\n },\n hasListener(listener: TabUpdatedListener): boolean {\n return tabUpdatedListeners.has(listener);\n },\n hasListeners(): boolean {\n return tabUpdatedListeners.size > 0;\n },\n },\n onRemoved: {\n addListener(listener: TabRemovedListener): void {\n tabRemovedListeners.add(listener);\n },\n removeListener(listener: TabRemovedListener): void {\n tabRemovedListeners.delete(listener);\n },\n hasListener(listener: TabRemovedListener): boolean {\n return tabRemovedListeners.has(listener);\n },\n hasListeners(): boolean {\n return tabRemovedListeners.size > 0;\n },\n },\n };\n\n const tabs = tabsFull as unknown as FakeChrome[\"tabs\"];\n\n // ─── chrome.alarms — listener registry + name-keyed alarm map ─────────\n //\n // create(name, info) stores `info` keyed by name (dedupe on repeat —\n // matches real chrome's behavior of replacing the prior alarm). clear()\n // removes from the map and resolves to `true` if the alarm existed,\n // `false` otherwise (matches real chrome's contract). onAlarm is a\n // standard listener registry. The fake does NOT auto-fire alarms based\n // on `periodInMinutes` — tests drive fires deterministically via\n // `__test.fireAlarm(name)`.\n const alarmMap = new Map<string, chrome.alarms.AlarmCreateInfo>();\n const alarmListeners = new Set<AlarmListener>();\n\n const alarms: FakeChrome[\"alarms\"] = {\n create(name: string, alarmInfo: chrome.alarms.AlarmCreateInfo): void {\n alarmMap.set(name, alarmInfo);\n },\n async get(name: string): Promise<chrome.alarms.Alarm | undefined> {\n const info = alarmMap.get(name);\n if (info === undefined) return undefined;\n return {\n name,\n scheduledTime: Date.now(),\n periodInMinutes: info.periodInMinutes,\n };\n },\n async clear(name: string): Promise<boolean> {\n return alarmMap.delete(name);\n },\n onAlarm: {\n addListener(listener: AlarmListener): void {\n alarmListeners.add(listener);\n },\n removeListener(listener: AlarmListener): void {\n alarmListeners.delete(listener);\n },\n hasListener(listener: AlarmListener): boolean {\n return alarmListeners.has(listener);\n },\n hasListeners(): boolean {\n return alarmListeners.size > 0;\n },\n },\n };\n\n return {\n storage: {\n local,\n onChanged: {\n addListener(listener: StorageChangeListener): void {\n storageListeners.add(listener);\n },\n removeListener(listener: StorageChangeListener): void {\n storageListeners.delete(listener);\n },\n hasListener(listener: StorageChangeListener): boolean {\n return storageListeners.has(listener);\n },\n hasListeners(): boolean {\n return storageListeners.size > 0;\n },\n },\n },\n runtime,\n tabs,\n alarms,\n __test: {\n sendFromTab(tabId: number, message: unknown): Promise<unknown> {\n const taggedSender = {\n tab: { id: tabId },\n } as chrome.runtime.MessageSender;\n return dispatch(message, taggedSender);\n },\n removeTab(tabId: number): void {\n removedTabs.add(tabId);\n },\n addTab(tabId: number): void {\n removedTabs.delete(tabId);\n },\n fireAlarm(name: string): void {\n const info = alarmMap.get(name);\n if (info === undefined) return;\n // Real chrome's Alarm shape carries `name`, `scheduledTime`, and\n // `periodInMinutes`. The fake stamps `scheduledTime` at fire time\n // and forwards the period from the create call.\n const alarm: chrome.alarms.Alarm = {\n name,\n scheduledTime: Date.now(),\n periodInMinutes: info.periodInMinutes,\n };\n for (const listener of Array.from(alarmListeners)) {\n listener(alarm);\n }\n },\n getAlarms(): readonly string[] {\n return Array.from(alarmMap.keys());\n },\n fireTabActivated(info: chrome.tabs.OnActivatedInfo): void {\n for (const listener of Array.from(tabActivatedListeners)) {\n listener(info);\n }\n },\n fireTabUpdated(\n tabId: number,\n changeInfo: chrome.tabs.OnUpdatedInfo,\n tab: chrome.tabs.Tab,\n ): void {\n for (const listener of Array.from(tabUpdatedListeners)) {\n listener(tabId, changeInfo, tab);\n }\n },\n fireTabRemoved(\n tabId: number,\n removeInfo: chrome.tabs.OnRemovedInfo,\n ): void {\n for (const listener of Array.from(tabRemovedListeners)) {\n listener(tabId, removeInfo);\n }\n },\n },\n };\n}\n"]}
|
package/dist/fan-out/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { C as Cmd,
|
|
1
|
+
import { C as Cmd, a as Port } from '../core-JPHsMZVB.js';
|
|
2
2
|
import { QueueItem } from '../work-queue/index.js';
|
|
3
|
-
import '../runtime-types-
|
|
3
|
+
import '../runtime-types-BbBq4LWo.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @demlik/tea/fan-out — scatter-gather over a bounded-concurrency work list.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { IdempotencyStore } from '../idempotency/index.js';
|
|
2
|
-
import { C as Cmd } from '../core-
|
|
2
|
+
import { C as Cmd } from '../core-JPHsMZVB.js';
|
|
3
3
|
import { QueueItem } from '../work-queue/index.js';
|
|
4
|
-
import '../runtime-types-
|
|
4
|
+
import '../runtime-types-BbBq4LWo.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* @demlik/tea/idempotent-intake — receive-once intake for webhooks / queue
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { B as BootingRuntime, C as CtxArg, S as Store, O as OnError, a as Supervision } from './runtime-types-
|
|
2
|
-
export { b as Branded,
|
|
3
|
-
import { C as Cmd, S as Sub, M as Machine } from './core-
|
|
4
|
-
export { d as ContextFree, D as DepKeyedSub, e as Dispose, f as Identity,
|
|
1
|
+
import { B as BootingRuntime, C as CtxArg, S as Store, O as OnError, a as Supervision } from './runtime-types-BbBq4LWo.js';
|
|
2
|
+
export { b as Branded, D as DispatchDiscardedError, c as DispatchSettle, d as DisposeTimeoutNotice, I as IdentityDropNotice, P as PortNameCollisionError, Q as QuiescenceTimeoutError, R as Runtime, e as RuntimeDiscardNotice, f as RuntimeDiscardedError, g as RuntimeErrorContext, h as RuntimeErrorPhase, i as RuntimeRef, j as Schema, k as SubIdCollisionError, l as SupervisionStrategy, _ as __resetPortRegistry, m as absurd, n as asReducer, o as defineMachine, p as definePort, q as noop, r as replay, s as schemaMigrate, t as tryInterpret, w as wrapDetached } from './runtime-types-BbBq4LWo.js';
|
|
3
|
+
import { C as Cmd, S as Sub, M as Machine } from './core-JPHsMZVB.js';
|
|
4
|
+
export { d as ContextFree, D as DepKeyedSub, e as Dispose, f as Identity, I as Interpret, c as InterpretDetached, N as NoCellError, g as NoCtx, a as Port, P as PortEmitter, R as Reducer, b as SubId, h as Subscribe, i as SyncReturn, T as Transitions, U as UpdateForm, j as applyCell, k as detectUpdateForm, l as foldMsgs, m as formOf, n as msgKeysOf, s as structuralHash, o as subId } from './core-JPHsMZVB.js';
|
|
5
5
|
|
|
6
6
|
interface HistoryTracker<S, M extends {
|
|
7
7
|
type: string;
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { DispatchDiscardedError, DisposeTimeoutNotice, IdentityDropNotice, PortNameCollisionError, QuiescenceTimeoutError, RuntimeDiscardNotice, RuntimeDiscardedError, SubIdCollisionError, __resetPortRegistry, absurd, asReducer, defineMachine, definePort, historyTracker, noop, replay, run, schemaMigrate, tryInterpret, wrapDetached } from './chunk-
|
|
2
|
-
export { Cmd, NoCellError, applyCell, detectUpdateForm, foldMsgs, formOf, msgKeysOf, structuralHash, subId } from './chunk-
|
|
1
|
+
export { DispatchDiscardedError, DisposeTimeoutNotice, IdentityDropNotice, PortNameCollisionError, QuiescenceTimeoutError, RuntimeDiscardNotice, RuntimeDiscardedError, SubIdCollisionError, __resetPortRegistry, absurd, asReducer, defineMachine, definePort, historyTracker, noop, replay, run, schemaMigrate, tryInterpret, wrapDetached } from './chunk-ZH454CR5.js';
|
|
2
|
+
export { Cmd, NoCellError, applyCell, detectUpdateForm, foldMsgs, formOf, msgKeysOf, structuralHash, subId } from './chunk-O7ED34JH.js';
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
package/dist/llm-call/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { C as Cmd } from '../core-
|
|
2
|
-
import { SucceedMsg, FailMsg,
|
|
1
|
+
import { C as Cmd } from '../core-JPHsMZVB.js';
|
|
2
|
+
import { RunCmd, SucceedMsg, FailMsg, ResilientState } from '../resilient-call/index.js';
|
|
3
3
|
import { RetryPolicy } from '../retry-backoff/index.js';
|
|
4
4
|
import { DeadlineExceeded, DeadlineSub } from '../deadline/index.js';
|
|
5
5
|
export { deadlineSub, subscribeDeadline } from '../deadline/index.js';
|
|
6
6
|
import '../cache/index.js';
|
|
7
|
-
import '../types-
|
|
7
|
+
import '../types-BMZ7IMrd.js';
|
|
8
8
|
import '../circuit-breaker/index.js';
|
|
9
9
|
import '../protocol-B5YmJr0d.js';
|
|
10
10
|
import '../rate-limit/index.js';
|
package/dist/llm-call/index.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
export { createLlmCall, liftLlmCall } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { createLlmCall, liftLlmCall } from '../chunk-ERYY5P6W.js';
|
|
2
|
+
import '../chunk-EC6FO42Q.js';
|
|
3
3
|
import '../chunk-JELSZN25.js';
|
|
4
|
-
export { deadlineSub, subscribeDeadline } from '../chunk-
|
|
4
|
+
export { deadlineSub, subscribeDeadline } from '../chunk-ASX7PL2K.js';
|
|
5
5
|
import '../chunk-Q2UM7BXU.js';
|
|
6
6
|
import '../chunk-S2EGRPCM.js';
|
|
7
7
|
import '../chunk-UF4MZSLT.js';
|
|
8
|
-
import '../chunk-
|
|
9
|
-
import '../chunk-
|
|
8
|
+
import '../chunk-WF46FABO.js';
|
|
9
|
+
import '../chunk-2UGTDYOK.js';
|
|
10
10
|
import '../chunk-2YFLOCWX.js';
|
|
11
11
|
import '../chunk-ZJ5AOYBH.js';
|
|
12
12
|
import '../chunk-G5E74IJB.js';
|
|
13
|
-
import '../chunk-
|
|
14
|
-
import '../chunk-
|
|
13
|
+
import '../chunk-ZH454CR5.js';
|
|
14
|
+
import '../chunk-O7ED34JH.js';
|
|
15
15
|
//# sourceMappingURL=index.js.map
|
|
16
16
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { C as Cmd,
|
|
2
|
-
import {
|
|
1
|
+
import { C as Cmd, I as Interpret, M as Machine } from './core-JPHsMZVB.js';
|
|
2
|
+
import { ModelFactory, Schema, MessageLoader, LlmCall, LlmOk, LlmErr, LlmRunCmd, LlmSucceedMsg, LlmFailMsg, LlmTimerMsg, LlmCallPorts } from './llm-call/index.js';
|
|
3
3
|
import { MonitoredRunState, RunFailure, MonitoredRunCmd } from './monitored-run/index.js';
|
|
4
4
|
import { M as MsgType } from './protocol-B5YmJr0d.js';
|
|
5
5
|
import { FanOutState } from './fan-out/index.js';
|
|
@@ -801,4 +801,4 @@ declare function liftAgent<S extends {
|
|
|
801
801
|
agent: AgentState<Stage, P, O, R>;
|
|
802
802
|
}, Stage, P extends string, O extends Record<P, unknown>, R, C extends Cmd>(state: S, [slice, cmds]: readonly [AgentState<Stage, P, O, R>, readonly C[]]): readonly [S, readonly C[]];
|
|
803
803
|
|
|
804
|
-
export { type AgentTurn as A,
|
|
804
|
+
export { type AgentTurn as A, type CompactionOutputs as B, type CompactionPolicy as C, type CompactionPurpose as D, type CompactionSummary as E, type Conversation as F, type ToolOutcome as G, type ToolRecord as H, agentBootMsg as I, agentEvents as J, agentTurnSchema as K, compactionSummarySchema as L, isAgentTurn as M, isCompactionSummary as N, liftAgent as O, mergeInterpret as P, status as Q, type SnapshotInterpret as S, type ToolCall as T, type AgentConfigCore as a, type AgentKnob as b, type AgentBootMsg as c, type AgentCmd as d, type AgentCompactErrMsg as e, type AgentCompactOkMsg as f, type AgentCompactRunCmd as g, type AgentCompactionConfig as h, type AgentConfig as i, type AgentDetachedHandlers as j, type AgentEvent as k, type AgentFailure as l, type AgentLlmErrMsg as m, type AgentLlmOkMsg as n, type AgentLlmRunCmd as o, type AgentMachineMsg as p, type AgentPorts as q, type AgentSnapshotConfig as r, type AgentState as s, type AgentStatus as t, type AgentTerminalFailure as u, type AgentTimerMsg as v, type AgentToMachine as w, type Awaiting as x, COMPACTION_PURPOSE as y, type CompactInterpret as z };
|
package/dist/mem/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { DeadlineExceeded, DeadlineSub } from '../deadline/index.js';
|
|
2
2
|
export { deadlineSub, subscribeDeadline } from '../deadline/index.js';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { I as Interpret, C as Cmd } from '../core-JPHsMZVB.js';
|
|
4
|
+
import { SnapshotWriteCmd, SnapshotState, SnapshotStore, SnapshotSavedMsg, SnapshotFailedMsg, SnapshotLoadedMsg, SnapshotLoadFailedMsg, SnapshotLoadCmd } from '../snapshot/index.js';
|
|
5
5
|
import { QueueItem } from '../work-queue/index.js';
|
|
6
|
-
import '../types-
|
|
7
|
-
import '../runtime-types-
|
|
6
|
+
import '../types-BMZ7IMrd.js';
|
|
7
|
+
import '../runtime-types-BbBq4LWo.js';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* @demlik/tea/monitored-run — a long-running operation that is BOTH staged and
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export { createMonitoredRun, liftRun } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
export { deadlineSub, subscribeDeadline } from '../chunk-
|
|
1
|
+
export { createMonitoredRun, liftRun } from '../chunk-66S2KEQQ.js';
|
|
2
|
+
import '../chunk-XMHZ44QC.js';
|
|
3
|
+
export { deadlineSub, subscribeDeadline } from '../chunk-ASX7PL2K.js';
|
|
4
4
|
import '../chunk-MU6MCIAC.js';
|
|
5
5
|
import '../chunk-FV3Z5MBE.js';
|
|
6
6
|
import '../chunk-2YFLOCWX.js';
|
|
7
|
-
import '../chunk-
|
|
8
|
-
import '../chunk-
|
|
7
|
+
import '../chunk-ZH454CR5.js';
|
|
8
|
+
import '../chunk-O7ED34JH.js';
|
|
9
9
|
//# sourceMappingURL=index.js.map
|
|
10
10
|
//# sourceMappingURL=index.js.map
|
package/dist/node/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import WebSocket from 'ws';
|
|
2
|
-
import { S as Store } from '../runtime-types-
|
|
3
|
-
import {
|
|
2
|
+
import { S as Store } from '../runtime-types-BbBq4LWo.js';
|
|
3
|
+
import { S as Sub, b as SubId } from '../core-JPHsMZVB.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @packageDocumentation
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { C as Cmd } from '../core-
|
|
1
|
+
import { C as Cmd } from '../core-JPHsMZVB.js';
|
|
2
2
|
import { PaginatorState } from '../paginator/index.js';
|
|
3
|
-
import {
|
|
3
|
+
import { RunCmd, FailMsg, SucceedMsg, CircuitConfig, RateLimitConfig, DeadlineConfig, ResilientPorts, ResilientState, ResilientTimerMsg } from '../resilient-call/index.js';
|
|
4
4
|
import { RetryPolicy } from '../retry-backoff/index.js';
|
|
5
5
|
import { DeadlineSub } from '../deadline/index.js';
|
|
6
6
|
export { deadlineSub, subscribeDeadline } from '../deadline/index.js';
|
|
7
7
|
import '../cache/index.js';
|
|
8
|
-
import '../types-
|
|
8
|
+
import '../types-BMZ7IMrd.js';
|
|
9
9
|
import '../circuit-breaker/index.js';
|
|
10
10
|
import '../protocol-B5YmJr0d.js';
|
|
11
11
|
import '../rate-limit/index.js';
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
export { PAGE_KEY, createPaginatedWalk, liftWalk } from '../chunk-
|
|
1
|
+
export { PAGE_KEY, createPaginatedWalk, liftWalk } from '../chunk-XOAP3LOT.js';
|
|
2
2
|
import '../chunk-SINXE47Y.js';
|
|
3
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-EC6FO42Q.js';
|
|
4
4
|
import '../chunk-JELSZN25.js';
|
|
5
|
-
export { deadlineSub, subscribeDeadline } from '../chunk-
|
|
5
|
+
export { deadlineSub, subscribeDeadline } from '../chunk-ASX7PL2K.js';
|
|
6
6
|
import '../chunk-Q2UM7BXU.js';
|
|
7
7
|
import '../chunk-S2EGRPCM.js';
|
|
8
8
|
import '../chunk-UF4MZSLT.js';
|
|
9
|
-
import '../chunk-
|
|
10
|
-
import '../chunk-
|
|
9
|
+
import '../chunk-WF46FABO.js';
|
|
10
|
+
import '../chunk-2UGTDYOK.js';
|
|
11
11
|
import '../chunk-2YFLOCWX.js';
|
|
12
12
|
import '../chunk-ZJ5AOYBH.js';
|
|
13
|
-
import '../chunk-
|
|
14
|
-
import '../chunk-
|
|
13
|
+
import '../chunk-ZH454CR5.js';
|
|
14
|
+
import '../chunk-O7ED34JH.js';
|
|
15
15
|
//# sourceMappingURL=index.js.map
|
|
16
16
|
//# sourceMappingURL=index.js.map
|
package/dist/parity/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { B as BootingRuntime } from '../runtime-types-
|
|
2
|
-
import { C as Cmd, S as Sub, M as Machine } from '../core-
|
|
1
|
+
import { B as BootingRuntime } from '../runtime-types-BbBq4LWo.js';
|
|
2
|
+
import { C as Cmd, S as Sub, M as Machine } from '../core-JPHsMZVB.js';
|
|
3
3
|
import { Trace, RecorderOptions } from '../recorder/index.js';
|
|
4
4
|
|
|
5
5
|
/**
|
package/dist/parity/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { recorder } from '../chunk-MUUROGIH.js';
|
|
2
|
-
import { deepEqual } from '../chunk-
|
|
2
|
+
import { deepEqual } from '../chunk-A7USKARI.js';
|
|
3
3
|
import '../chunk-EWJP3YYP.js';
|
|
4
|
-
import { replay } from '../chunk-
|
|
5
|
-
import '../chunk-
|
|
4
|
+
import { replay } from '../chunk-ZH454CR5.js';
|
|
5
|
+
import '../chunk-O7ED34JH.js';
|
|
6
6
|
|
|
7
7
|
// src/parity/index.ts
|
|
8
8
|
function recordRun(runtime, opts) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as fc from 'fast-check';
|
|
2
|
-
import { C as Cmd, S as Sub, M as Machine } from '../../core-
|
|
2
|
+
import { C as Cmd, S as Sub, M as Machine } from '../../core-JPHsMZVB.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Build a Ctx value whose every property access throws. Use as the `ctx`
|
|
@@ -116,10 +116,10 @@ declare function arbMsgSequence<M extends {
|
|
|
116
116
|
/**
|
|
117
117
|
* State-aware Msg sequence arbitrary — generates only msgs whose
|
|
118
118
|
* precondition holds in the current state. Backed by `fc.commands`
|
|
119
|
-
* internally
|
|
119
|
+
* internally. Planned for a later phase.
|
|
120
120
|
*
|
|
121
121
|
* **NOT IMPLEMENTED IN v1.** The export exists today so the surface is
|
|
122
|
-
* forward-compatible;
|
|
122
|
+
* forward-compatible; this ships in a later phase alongside
|
|
123
123
|
* shrinkers. Calling it throws.
|
|
124
124
|
*/
|
|
125
125
|
declare function arbGuidedSequence<S, M extends {
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { arbConstantMsg, arbGuidedSequence, arbMsg, arbMsgSequence, arbRecordMsg, stubCtxThrowingProxy } from '../../chunk-
|
|
1
|
+
export { arbConstantMsg, arbGuidedSequence, arbMsg, arbMsgSequence, arbRecordMsg, stubCtxThrowingProxy } from '../../chunk-AZZLE7XR.js';
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
package/dist/pbt/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { MsgArbitraryTable, arbConstantMsg, arbGuidedSequence, arbMsg, arbMsgSequence, arbRecordMsg, stubCtxThrowingProxy } from './arbitraries/index.js';
|
|
2
2
|
export { Step, foldEvents, propertyInvariant, propertyTerminates, propertyTrace } from './runners/index.js';
|
|
3
|
-
import { C as Cmd, R as Reducer, T as Transitions, U as UpdateForm } from '../core-
|
|
3
|
+
import { C as Cmd, R as Reducer, T as Transitions, U as UpdateForm } from '../core-JPHsMZVB.js';
|
|
4
4
|
import 'fast-check';
|
|
5
5
|
|
|
6
6
|
/**
|
package/dist/pbt/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { arbConstantMsg, arbGuidedSequence, arbMsg, arbMsgSequence, arbRecordMsg, stubCtxThrowingProxy } from '../chunk-
|
|
2
|
-
export { foldEvents, propertyInvariant, propertyTerminates, propertyTrace } from '../chunk-
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import { msgKeysOf } from '../chunk-
|
|
1
|
+
export { arbConstantMsg, arbGuidedSequence, arbMsg, arbMsgSequence, arbRecordMsg, stubCtxThrowingProxy } from '../chunk-AZZLE7XR.js';
|
|
2
|
+
export { foldEvents, propertyInvariant, propertyTerminates, propertyTrace } from '../chunk-S6Y3RNX4.js';
|
|
3
|
+
import '../chunk-ZH454CR5.js';
|
|
4
|
+
import { msgKeysOf } from '../chunk-O7ED34JH.js';
|
|
5
5
|
|
|
6
6
|
// src/pbt/util/msg-keys.ts
|
|
7
7
|
function msgTypeKeys(machine) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { foldEvents, propertyInvariant, propertyTerminates, propertyTrace } from '../../chunk-
|
|
2
|
-
import '../../chunk-
|
|
3
|
-
import '../../chunk-
|
|
1
|
+
export { foldEvents, propertyInvariant, propertyTerminates, propertyTrace } from '../../chunk-S6Y3RNX4.js';
|
|
2
|
+
import '../../chunk-ZH454CR5.js';
|
|
3
|
+
import '../../chunk-O7ED34JH.js';
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
package/dist/poller/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { DeadlineSub } from '../deadline/index.js';
|
|
2
2
|
import { IdempotencyStore } from '../idempotency/index.js';
|
|
3
|
-
import { C as Cmd, S as Sub } from '../core-
|
|
4
|
-
import {
|
|
5
|
-
import '../types-
|
|
3
|
+
import { C as Cmd, S as Sub } from '../core-JPHsMZVB.js';
|
|
4
|
+
import { RetryState, AnyRetryPolicy } from '../retry-backoff/index.js';
|
|
5
|
+
import '../types-BMZ7IMrd.js';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* @demlik/tea/poller — "poll a source every N ms until a predicate holds, with
|
package/dist/poller/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { deadlineSub } from '../chunk-
|
|
1
|
+
import { deadlineSub } from '../chunk-ASX7PL2K.js';
|
|
2
2
|
import { asRng, defaultRetryPolicy, initRetry, recordFailure, shouldRetry, nextDelayMs } from '../chunk-Q2UM7BXU.js';
|
|
3
3
|
import { idempotencyMemory } from '../chunk-BYQUGDD3.js';
|
|
4
4
|
import '../chunk-K575PT4S.js';
|
|
5
5
|
import '../chunk-2YFLOCWX.js';
|
|
6
|
-
import '../chunk-
|
|
7
|
-
import '../chunk-
|
|
6
|
+
import '../chunk-ZH454CR5.js';
|
|
7
|
+
import '../chunk-O7ED34JH.js';
|
|
8
8
|
|
|
9
9
|
// src/poller/index.ts
|
|
10
10
|
function pollerSubId(atMs) {
|
package/dist/prediction/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { NO_ACK, ack, initAck, nextSeq, partitionByAck, reconcile, tagSeq } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { NO_ACK, ack, initAck, nextSeq, partitionByAck, reconcile, tagSeq } from '../chunk-AZ3NHUPD.js';
|
|
2
|
+
import '../chunk-O7ED34JH.js';
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
package/dist/pure/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { Ack, AckPartition, NO_ACK, Seq, SeqTagged, ack, initAck, nextSeq, partitionByAck, reconcile, tagSeq } from '../prediction/index.js';
|
|
2
|
-
export { C as Cmd, d as ContextFree, D as DepKeyedSub, e as Dispose, f as Identity,
|
|
2
|
+
export { C as Cmd, d as ContextFree, D as DepKeyedSub, e as Dispose, f as Identity, I as Interpret, c as InterpretDetached, M as Machine, N as NoCellError, g as NoCtx, a as Port, P as PortEmitter, R as Reducer, S as Sub, b as SubId, h as Subscribe, i as SyncReturn, T as Transitions, U as UpdateForm, k as detectUpdateForm, l as foldMsgs, m as formOf, s as structuralHash, o as subId } from '../core-JPHsMZVB.js';
|
package/dist/pure/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { NO_ACK, ack, initAck, nextSeq, partitionByAck, reconcile, tagSeq } from '../chunk-
|
|
2
|
-
export { Cmd, NoCellError, detectUpdateForm, foldMsgs, formOf, structuralHash, subId } from '../chunk-
|
|
1
|
+
export { NO_ACK, ack, initAck, nextSeq, partitionByAck, reconcile, tagSeq } from '../chunk-AZ3NHUPD.js';
|
|
2
|
+
export { Cmd, NoCellError, detectUpdateForm, foldMsgs, formOf, structuralHash, subId } from '../chunk-O7ED34JH.js';
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
package/dist/react/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { S as Store, R as Runtime } from '../runtime-types-
|
|
2
|
-
import { C as Cmd, S as Sub, M as Machine } from '../core-
|
|
1
|
+
import { S as Store, R as Runtime } from '../runtime-types-BbBq4LWo.js';
|
|
2
|
+
import { C as Cmd, S as Sub, M as Machine } from '../core-JPHsMZVB.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* @packageDocumentation
|
package/dist/react/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { run } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
import { run } from '../chunk-ZH454CR5.js';
|
|
2
|
+
import '../chunk-O7ED34JH.js';
|
|
3
3
|
import { useMemo, useRef, useReducer, useSyncExternalStore, useEffect } from 'react';
|
|
4
4
|
|
|
5
5
|
function useMachine(machine, opts) {
|