rivetkit 2.0.42 → 2.1.0-rc.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/{tsup/config-CLnylLYY.d.ts → browser/client.d.ts} +2127 -1910
- package/dist/browser/client.js +5182 -0
- package/dist/browser/client.js.map +1 -0
- package/dist/browser/inspector/client.d.ts +130 -0
- package/dist/browser/inspector/client.js +2854 -0
- package/dist/browser/inspector/client.js.map +1 -0
- package/dist/browser/v3-DnYObHH3.d.ts +279 -0
- package/dist/schemas/actor-inspector/v2.ts +796 -0
- package/dist/schemas/actor-inspector/v3.ts +899 -0
- package/dist/schemas/actor-persist/v4.ts +406 -0
- package/dist/schemas/client-protocol/v3.ts +554 -0
- package/dist/schemas/persist/v1.ts +781 -0
- package/dist/schemas/transport/v1.ts +697 -0
- package/dist/tsup/actor/errors.cjs +27 -3
- package/dist/tsup/actor/errors.cjs.map +1 -1
- package/dist/tsup/actor/errors.d.cts +37 -1
- package/dist/tsup/actor/errors.d.ts +37 -1
- package/dist/tsup/actor/errors.js +26 -1
- package/dist/tsup/{actor-router-consts-DzI2szci.d.cts → actor-router-consts-D29T1Z-K.d.cts} +1 -1
- package/dist/tsup/{actor-router-consts-DzI2szci.d.ts → actor-router-consts-D29T1Z-K.d.ts} +1 -1
- package/dist/tsup/chunk-424PT5DM.js +23 -0
- package/dist/tsup/chunk-424PT5DM.js.map +1 -0
- package/dist/tsup/{chunk-JDAD2YFA.js → chunk-5ESWDTHJ.js} +148 -273
- package/dist/tsup/chunk-5ESWDTHJ.js.map +1 -0
- package/dist/tsup/{chunk-FJ3KTN4V.js → chunk-6LIBPELE.js} +119 -11
- package/dist/tsup/chunk-6LIBPELE.js.map +1 -0
- package/dist/tsup/chunk-6LJAZ5R4.cjs +96 -0
- package/dist/tsup/chunk-6LJAZ5R4.cjs.map +1 -0
- package/dist/tsup/{chunk-LFVF5SCU.js → chunk-7HTNH26M.js} +126 -1
- package/dist/tsup/chunk-7HTNH26M.js.map +1 -0
- package/dist/tsup/chunk-7K4CYDGD.js +630 -0
- package/dist/tsup/chunk-7K4CYDGD.js.map +1 -0
- package/dist/tsup/{chunk-XXGJCOL6.js → chunk-A6YIZWTK.js} +2 -2
- package/dist/tsup/chunk-AIYEYMX5.cjs +630 -0
- package/dist/tsup/chunk-AIYEYMX5.cjs.map +1 -0
- package/dist/tsup/{chunk-Q6W7RJJP.js → chunk-DIGBC2VI.js} +211 -2316
- package/dist/tsup/chunk-DIGBC2VI.js.map +1 -0
- package/dist/tsup/{chunk-RZW2DNND.cjs → chunk-F6JYU5IK.cjs} +1957 -1039
- package/dist/tsup/chunk-F6JYU5IK.cjs.map +1 -0
- package/dist/tsup/chunk-HAZL2EPK.cjs +534 -0
- package/dist/tsup/chunk-HAZL2EPK.cjs.map +1 -0
- package/dist/tsup/chunk-HDQ2JUQT.cjs +23 -0
- package/dist/tsup/chunk-HDQ2JUQT.cjs.map +1 -0
- package/dist/tsup/chunk-HIDX4C5Y.cjs +1036 -0
- package/dist/tsup/chunk-HIDX4C5Y.cjs.map +1 -0
- package/dist/tsup/chunk-IVG73YCW.js +534 -0
- package/dist/tsup/chunk-IVG73YCW.js.map +1 -0
- package/dist/tsup/chunk-KJSYAUOM.js +96 -0
- package/dist/tsup/chunk-KJSYAUOM.js.map +1 -0
- package/dist/tsup/{chunk-2XQS746M.cjs → chunk-L47L3ZWJ.cjs} +127 -2
- package/dist/tsup/chunk-L47L3ZWJ.cjs.map +1 -0
- package/dist/tsup/{chunk-H4TB4X25.cjs → chunk-LW6KLR7A.cjs} +126 -18
- package/dist/tsup/chunk-LW6KLR7A.cjs.map +1 -0
- package/dist/tsup/chunk-LXUQ667X.js +2006 -0
- package/dist/tsup/chunk-LXUQ667X.js.map +1 -0
- package/dist/tsup/{chunk-GMAVRZSF.js → chunk-M2T62AZQ.js} +1790 -872
- package/dist/tsup/chunk-M2T62AZQ.js.map +1 -0
- package/dist/tsup/chunk-MZ37VV3P.js +5974 -0
- package/dist/tsup/chunk-MZ37VV3P.js.map +1 -0
- package/dist/tsup/chunk-N4KRDJ56.js +72 -0
- package/dist/tsup/chunk-N4KRDJ56.js.map +1 -0
- package/dist/tsup/chunk-NIYZDWMW.cjs +2006 -0
- package/dist/tsup/chunk-NIYZDWMW.cjs.map +1 -0
- package/dist/tsup/chunk-OMEPCQK2.js +649 -0
- package/dist/tsup/chunk-OMEPCQK2.js.map +1 -0
- package/dist/tsup/chunk-SR3KQE7Q.cjs +72 -0
- package/dist/tsup/chunk-SR3KQE7Q.cjs.map +1 -0
- package/dist/tsup/chunk-SSEP6DHP.cjs +2657 -0
- package/dist/tsup/chunk-SSEP6DHP.cjs.map +1 -0
- package/dist/tsup/chunk-T5YCUGVS.js +1036 -0
- package/dist/tsup/chunk-T5YCUGVS.js.map +1 -0
- package/dist/tsup/{chunk-EJVBH5VF.cjs → chunk-TPGXWFQT.cjs} +3 -3
- package/dist/tsup/{chunk-EJVBH5VF.cjs.map → chunk-TPGXWFQT.cjs.map} +1 -1
- package/dist/tsup/{chunk-X35U3YNX.cjs → chunk-TYLXNCA5.cjs} +214 -339
- package/dist/tsup/chunk-TYLXNCA5.cjs.map +1 -0
- package/dist/tsup/chunk-VKVNIQRQ.js +257 -0
- package/dist/tsup/chunk-VKVNIQRQ.js.map +1 -0
- package/dist/tsup/chunk-XWBAQO5H.cjs +649 -0
- package/dist/tsup/chunk-XWBAQO5H.cjs.map +1 -0
- package/dist/tsup/chunk-YQ4LDVD6.cjs +5974 -0
- package/dist/tsup/chunk-YQ4LDVD6.cjs.map +1 -0
- package/dist/tsup/chunk-ZFY5J2EP.cjs +257 -0
- package/dist/tsup/chunk-ZFY5J2EP.cjs.map +1 -0
- package/dist/tsup/client/mod.cjs +9 -10
- package/dist/tsup/client/mod.cjs.map +1 -1
- package/dist/tsup/client/mod.d.cts +11 -5
- package/dist/tsup/client/mod.d.ts +11 -5
- package/dist/tsup/client/mod.js +8 -8
- package/dist/tsup/common/log.cjs +4 -4
- package/dist/tsup/common/log.d.cts +2 -2
- package/dist/tsup/common/log.d.ts +2 -2
- package/dist/tsup/common/log.js +3 -2
- package/dist/tsup/common/websocket.cjs +5 -5
- package/dist/tsup/common/websocket.js +4 -3
- package/dist/tsup/config-BFqid9Gr.d.ts +2574 -0
- package/dist/tsup/config-BiNoIHRs.d.cts +80 -0
- package/dist/tsup/config-BiNoIHRs.d.ts +80 -0
- package/dist/tsup/{config-CZB2-W8x.d.cts → config-CAZphOS1.d.cts} +681 -355
- package/dist/tsup/db/drizzle/mod.cjs +49 -0
- package/dist/tsup/db/drizzle/mod.cjs.map +1 -0
- package/dist/tsup/db/drizzle/mod.d.cts +17 -0
- package/dist/tsup/db/drizzle/mod.d.ts +17 -0
- package/dist/tsup/db/drizzle/mod.js +49 -0
- package/dist/tsup/db/drizzle/mod.js.map +1 -0
- package/dist/tsup/db/mod.cjs +9 -0
- package/dist/tsup/db/mod.cjs.map +1 -0
- package/dist/tsup/db/mod.d.cts +9 -0
- package/dist/tsup/db/mod.d.ts +9 -0
- package/dist/tsup/db/mod.js +9 -0
- package/dist/tsup/db/mod.js.map +1 -0
- package/dist/tsup/{driver-D0QX9M11.d.ts → driver-Bxv62E2p.d.ts} +2 -2
- package/dist/tsup/{driver-q-zqG7fc.d.cts → driver-DYXwJR5D.d.cts} +2 -2
- package/dist/tsup/driver-helpers/mod.cjs +12 -6
- package/dist/tsup/driver-helpers/mod.cjs.map +1 -1
- package/dist/tsup/driver-helpers/mod.d.cts +12 -5
- package/dist/tsup/driver-helpers/mod.d.ts +12 -5
- package/dist/tsup/driver-helpers/mod.js +12 -5
- package/dist/tsup/driver-test-suite/mod.cjs +1370 -116
- package/dist/tsup/driver-test-suite/mod.cjs.map +1 -1
- package/dist/tsup/driver-test-suite/mod.d.cts +10 -4
- package/dist/tsup/driver-test-suite/mod.d.ts +10 -4
- package/dist/tsup/driver-test-suite/mod.js +2093 -838
- package/dist/tsup/driver-test-suite/mod.js.map +1 -1
- package/dist/tsup/inspector/mod.cjs +29 -3
- package/dist/tsup/inspector/mod.cjs.map +1 -1
- package/dist/tsup/inspector/mod.d.cts +124 -3
- package/dist/tsup/inspector/mod.d.ts +124 -3
- package/dist/tsup/inspector/mod.js +72 -45
- package/dist/tsup/keys-CydblqMh.d.cts +13 -0
- package/dist/tsup/keys-CydblqMh.d.ts +13 -0
- package/dist/tsup/mod.cjs +16 -10
- package/dist/tsup/mod.cjs.map +1 -1
- package/dist/tsup/mod.d.cts +26 -14
- package/dist/tsup/mod.d.ts +26 -14
- package/dist/tsup/mod.js +20 -13
- package/dist/tsup/serve-test-suite/mod.cjs +1165 -83
- package/dist/tsup/serve-test-suite/mod.cjs.map +1 -1
- package/dist/tsup/serve-test-suite/mod.js +1114 -29
- package/dist/tsup/serve-test-suite/mod.js.map +1 -1
- package/dist/tsup/test/mod.cjs +84 -11
- package/dist/tsup/test/mod.cjs.map +1 -1
- package/dist/tsup/test/mod.d.cts +10 -5
- package/dist/tsup/test/mod.d.ts +10 -5
- package/dist/tsup/test/mod.js +85 -11
- package/dist/tsup/test/mod.js.map +1 -1
- package/dist/tsup/utils.cjs +10 -4
- package/dist/tsup/utils.cjs.map +1 -1
- package/dist/tsup/utils.d.cts +72 -2
- package/dist/tsup/utils.d.ts +72 -2
- package/dist/tsup/utils.js +9 -2
- package/dist/tsup/v3-DnYObHH3.d.cts +279 -0
- package/dist/tsup/v3-DnYObHH3.d.ts +279 -0
- package/dist/tsup/workflow/mod.cjs +16 -0
- package/dist/tsup/workflow/mod.cjs.map +1 -0
- package/dist/tsup/workflow/mod.d.cts +83 -0
- package/dist/tsup/workflow/mod.d.ts +83 -0
- package/dist/tsup/workflow/mod.js +16 -0
- package/dist/tsup/workflow/mod.js.map +1 -0
- package/package.json +62 -5
- package/src/actor/config.ts +478 -68
- package/src/actor/conn/mod.ts +68 -16
- package/src/actor/conn/state-manager.ts +2 -2
- package/src/actor/contexts/action.ts +20 -12
- package/src/actor/contexts/base/actor.ts +137 -7
- package/src/actor/contexts/base/conn-init.ts +27 -7
- package/src/actor/contexts/base/conn.ts +27 -18
- package/src/actor/contexts/before-action-response.ts +9 -2
- package/src/actor/contexts/before-connect.ts +7 -2
- package/src/actor/contexts/connect.ts +9 -2
- package/src/actor/contexts/create-conn-state.ts +7 -2
- package/src/actor/contexts/create-vars.ts +16 -3
- package/src/actor/contexts/create.ts +16 -3
- package/src/actor/contexts/destroy.ts +9 -3
- package/src/actor/contexts/disconnect.ts +10 -4
- package/src/actor/contexts/index.ts +4 -3
- package/src/actor/contexts/request.ts +23 -6
- package/src/actor/contexts/run.ts +47 -0
- package/src/actor/contexts/sleep.ts +9 -3
- package/src/actor/contexts/state-change.ts +9 -3
- package/src/actor/contexts/wake.ts +9 -3
- package/src/actor/contexts/websocket.ts +23 -6
- package/src/actor/database.ts +8 -18
- package/src/actor/definition.ts +20 -6
- package/src/actor/driver.ts +32 -3
- package/src/actor/errors.ts +127 -0
- package/src/actor/instance/connection-manager.ts +183 -80
- package/src/actor/instance/event-manager.ts +26 -15
- package/src/actor/instance/keys.ts +117 -0
- package/src/actor/instance/mod.ts +784 -174
- package/src/actor/instance/queue-manager.ts +603 -0
- package/src/actor/instance/queue.ts +287 -0
- package/src/actor/instance/schedule-manager.ts +49 -7
- package/src/actor/instance/state-manager.ts +35 -11
- package/src/actor/instance/traces-driver.ts +128 -0
- package/src/actor/mod.ts +26 -2
- package/src/actor/protocol/old.ts +28 -13
- package/src/actor/protocol/serde.ts +1 -1
- package/src/actor/router-endpoints.ts +177 -21
- package/src/actor/router-websocket-endpoints.ts +18 -29
- package/src/actor/router.ts +177 -0
- package/src/actor/schema.ts +291 -0
- package/src/actor/utils.ts +40 -0
- package/src/client/actor-common.ts +1 -1
- package/src/client/actor-conn.ts +100 -33
- package/src/client/actor-handle.ts +61 -33
- package/src/client/client.ts +2 -4
- package/src/client/config.ts +1 -1
- package/src/client/mod.browser.ts +2 -0
- package/src/client/mod.ts +1 -4
- package/src/client/queue.ts +146 -0
- package/src/client/utils.ts +1 -1
- package/src/common/log.ts +1 -1
- package/src/common/utils.ts +3 -3
- package/src/db/config.ts +100 -0
- package/src/db/drizzle/mod.ts +226 -0
- package/src/db/drizzle/sqlite-core.ts +22 -0
- package/src/db/mod.ts +125 -0
- package/src/db/shared.ts +92 -0
- package/src/db/sqlite-vfs.ts +12 -0
- package/src/driver-helpers/mod.ts +1 -0
- package/src/driver-test-suite/mod.ts +69 -43
- package/src/driver-test-suite/tests/access-control.ts +218 -0
- package/src/driver-test-suite/tests/actor-db-raw.ts +73 -0
- package/src/driver-test-suite/tests/actor-db.ts +394 -0
- package/src/driver-test-suite/tests/actor-inspector.ts +259 -358
- package/src/driver-test-suite/tests/actor-kv.ts +41 -20
- package/src/driver-test-suite/tests/actor-queue.ts +324 -0
- package/src/driver-test-suite/tests/actor-run.ts +181 -0
- package/src/driver-test-suite/tests/actor-schedule.ts +5 -2
- package/src/driver-test-suite/tests/actor-sleep.ts +3 -3
- package/src/driver-test-suite/tests/actor-stateless.ts +70 -0
- package/src/driver-test-suite/tests/actor-workflow.ts +108 -0
- package/src/driver-test-suite/tests/manager-driver.ts +11 -0
- package/src/driver-test-suite/tests/raw-http-request-properties.ts +1 -1
- package/src/driver-test-suite/tests/raw-websocket.ts +12 -12
- package/src/drivers/default.ts +7 -2
- package/src/drivers/engine/actor-driver.ts +45 -37
- package/src/drivers/engine/config.ts +1 -1
- package/src/drivers/file-system/actor.ts +20 -2
- package/src/drivers/file-system/global-state.ts +569 -258
- package/src/drivers/file-system/kv-limits.ts +70 -0
- package/src/drivers/file-system/manager.ts +22 -6
- package/src/drivers/file-system/mod.ts +39 -16
- package/src/drivers/file-system/sqlite-runtime.ts +210 -0
- package/src/inspector/actor-inspector.ts +224 -102
- package/src/inspector/config.ts +1 -1
- package/src/inspector/handler.ts +102 -20
- package/src/inspector/mod.browser.ts +8 -0
- package/src/inspector/mod.ts +2 -0
- package/src/inspector/serve-ui.ts +40 -0
- package/src/inspector/transport.ts +18 -0
- package/src/inspector/utils.ts +5 -39
- package/src/manager/gateway.ts +1 -1
- package/src/manager/protocol/mod.ts +1 -1
- package/src/manager/protocol/query.ts +1 -1
- package/src/manager/router-schema.ts +1 -1
- package/src/manager/router.ts +38 -12
- package/src/manager-api/actors.ts +1 -1
- package/src/manager-api/common.ts +1 -1
- package/src/registry/config/driver.ts +1 -1
- package/src/registry/config/index.ts +212 -43
- package/src/registry/config/legacy-runner.ts +1 -1
- package/src/registry/config/runner.ts +1 -1
- package/src/registry/config/serverless.ts +1 -1
- package/src/registry/index.ts +7 -5
- package/src/remote-manager-driver/api-utils.ts +1 -1
- package/src/schemas/actor-inspector/mod.ts +1 -1
- package/src/schemas/actor-inspector/versioned.ts +195 -8
- package/src/schemas/actor-persist/versioned.ts +87 -7
- package/src/schemas/client-protocol/mod.ts +1 -1
- package/src/schemas/client-protocol/versioned.ts +127 -11
- package/src/schemas/client-protocol-zod/mod.ts +16 -1
- package/src/schemas/persist/mod.ts +1 -0
- package/src/schemas/transport/mod.ts +1 -0
- package/src/serde.ts +1 -1
- package/src/serve-test-suite/mod.ts +10 -9
- package/src/test/mod.ts +15 -56
- package/src/utils/endpoint-parser.test.ts +1 -1
- package/src/utils/endpoint-parser.ts +1 -1
- package/src/utils/env-vars.ts +12 -1
- package/src/utils/node.ts +15 -2
- package/src/utils.test.ts +34 -0
- package/src/utils.ts +140 -6
- package/src/workflow/constants.ts +2 -0
- package/src/workflow/context.ts +532 -0
- package/src/workflow/driver.ts +191 -0
- package/src/workflow/inspector.ts +268 -0
- package/src/workflow/mod.ts +122 -0
- package/dist/tsup/chunk-2IJTYN6K.cjs +0 -278
- package/dist/tsup/chunk-2IJTYN6K.cjs.map +0 -1
- package/dist/tsup/chunk-2XQS746M.cjs.map +0 -1
- package/dist/tsup/chunk-3VP5CSHV.cjs +0 -114
- package/dist/tsup/chunk-3VP5CSHV.cjs.map +0 -1
- package/dist/tsup/chunk-AQFSQMBG.js +0 -114
- package/dist/tsup/chunk-AQFSQMBG.js.map +0 -1
- package/dist/tsup/chunk-E6ZE2YEA.js +0 -664
- package/dist/tsup/chunk-E6ZE2YEA.js.map +0 -1
- package/dist/tsup/chunk-FJ3KTN4V.js.map +0 -1
- package/dist/tsup/chunk-GBENOENJ.cjs +0 -8
- package/dist/tsup/chunk-GBENOENJ.cjs.map +0 -1
- package/dist/tsup/chunk-GD7UXGOE.cjs +0 -4762
- package/dist/tsup/chunk-GD7UXGOE.cjs.map +0 -1
- package/dist/tsup/chunk-GMAVRZSF.js.map +0 -1
- package/dist/tsup/chunk-H4TB4X25.cjs.map +0 -1
- package/dist/tsup/chunk-JDAD2YFA.js.map +0 -1
- package/dist/tsup/chunk-KCOVZOPS.js +0 -1946
- package/dist/tsup/chunk-KCOVZOPS.js.map +0 -1
- package/dist/tsup/chunk-KDFWJKMJ.cjs +0 -664
- package/dist/tsup/chunk-KDFWJKMJ.cjs.map +0 -1
- package/dist/tsup/chunk-LFVF5SCU.js.map +0 -1
- package/dist/tsup/chunk-Q6W7RJJP.js.map +0 -1
- package/dist/tsup/chunk-RUW5CZ5Z.cjs +0 -1949
- package/dist/tsup/chunk-RUW5CZ5Z.cjs.map +0 -1
- package/dist/tsup/chunk-RZW2DNND.cjs.map +0 -1
- package/dist/tsup/chunk-TCOEBUUE.js +0 -278
- package/dist/tsup/chunk-TCOEBUUE.js.map +0 -1
- package/dist/tsup/chunk-X35U3YNX.cjs.map +0 -1
- package/dist/tsup/keys-Chhy4ylv.d.cts +0 -8
- package/dist/tsup/keys-Chhy4ylv.d.ts +0 -8
- package/dist/tsup/v1-Gq4avTK3.d.cts +0 -240
- package/dist/tsup/v1-Gq4avTK3.d.ts +0 -240
- /package/dist/tsup/{chunk-XXGJCOL6.js.map → chunk-A6YIZWTK.js.map} +0 -0
|
@@ -1,37 +1,157 @@
|
|
|
1
1
|
import {
|
|
2
2
|
hibernationActor,
|
|
3
3
|
logger,
|
|
4
|
+
runWithEarlyExit,
|
|
5
|
+
runWithError,
|
|
6
|
+
runWithQueueConsumer,
|
|
7
|
+
runWithTicks,
|
|
8
|
+
runWithoutHandler,
|
|
4
9
|
sleep,
|
|
5
10
|
sleepWithLongRpc,
|
|
6
11
|
sleepWithNoSleepOption,
|
|
7
12
|
sleepWithRawHttp,
|
|
8
|
-
sleepWithRawWebSocket
|
|
9
|
-
|
|
13
|
+
sleepWithRawWebSocket,
|
|
14
|
+
workflowAccessActor,
|
|
15
|
+
workflowCounterActor,
|
|
16
|
+
workflowQueueActor,
|
|
17
|
+
workflowSleepActor,
|
|
18
|
+
workflowStopTeardownActor
|
|
19
|
+
} from "../chunk-OMEPCQK2.js";
|
|
20
|
+
import "../chunk-7K4CYDGD.js";
|
|
21
|
+
import "../chunk-IVG73YCW.js";
|
|
22
|
+
import {
|
|
23
|
+
db as db2,
|
|
24
|
+
integer,
|
|
25
|
+
mod_exports,
|
|
26
|
+
sqliteTable,
|
|
27
|
+
text
|
|
28
|
+
} from "../chunk-VKVNIQRQ.js";
|
|
10
29
|
import {
|
|
11
30
|
actor,
|
|
31
|
+
event,
|
|
32
|
+
queue,
|
|
12
33
|
setup
|
|
13
|
-
} from "../chunk-
|
|
34
|
+
} from "../chunk-5ESWDTHJ.js";
|
|
14
35
|
import {
|
|
15
36
|
createFileSystemOrMemoryDriver
|
|
16
|
-
} from "../chunk-
|
|
17
|
-
import "../chunk-
|
|
18
|
-
import "../chunk-
|
|
37
|
+
} from "../chunk-MZ37VV3P.js";
|
|
38
|
+
import "../chunk-DIGBC2VI.js";
|
|
39
|
+
import "../chunk-A6YIZWTK.js";
|
|
40
|
+
import {
|
|
41
|
+
db
|
|
42
|
+
} from "../chunk-KJSYAUOM.js";
|
|
43
|
+
import "../chunk-N4KRDJ56.js";
|
|
19
44
|
import {
|
|
20
45
|
buildManagerRouter
|
|
21
|
-
} from "../chunk-
|
|
22
|
-
import "../chunk-
|
|
23
|
-
import "../chunk-
|
|
46
|
+
} from "../chunk-M2T62AZQ.js";
|
|
47
|
+
import "../chunk-LXUQ667X.js";
|
|
48
|
+
import "../chunk-T5YCUGVS.js";
|
|
49
|
+
import "../chunk-6LIBPELE.js";
|
|
24
50
|
import {
|
|
25
51
|
UserError
|
|
26
|
-
} from "../chunk-
|
|
52
|
+
} from "../chunk-7HTNH26M.js";
|
|
53
|
+
import "../chunk-424PT5DM.js";
|
|
27
54
|
|
|
28
55
|
// src/serve-test-suite/mod.ts
|
|
29
|
-
import { serve as honoServe } from "@hono/node-server";
|
|
30
|
-
import { createNodeWebSocket } from "@hono/node-ws";
|
|
31
56
|
import { createServer } from "net";
|
|
32
57
|
import { fileURLToPath } from "url";
|
|
58
|
+
import { serve as honoServe } from "@hono/node-server";
|
|
59
|
+
import { createNodeWebSocket } from "@hono/node-ws";
|
|
33
60
|
import invariant from "invariant";
|
|
34
61
|
|
|
62
|
+
// fixtures/driver-test-suite/access-control.ts
|
|
63
|
+
import { Forbidden } from "rivetkit/errors";
|
|
64
|
+
var accessControlEvents = {
|
|
65
|
+
allowedEvent: event({
|
|
66
|
+
canSubscribe: (c) => {
|
|
67
|
+
c.state.lastCanSubscribeConnId = c.conn.id;
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
}),
|
|
71
|
+
blockedEvent: event({
|
|
72
|
+
canSubscribe: (c) => {
|
|
73
|
+
c.state.lastCanSubscribeConnId = c.conn.id;
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
})
|
|
77
|
+
};
|
|
78
|
+
var accessControlQueues = {
|
|
79
|
+
allowedQueue: queue({
|
|
80
|
+
canPublish: (c) => {
|
|
81
|
+
c.state.lastCanPublishConnId = c.conn.id;
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
}),
|
|
85
|
+
blockedQueue: queue({
|
|
86
|
+
canPublish: (c) => {
|
|
87
|
+
c.state.lastCanPublishConnId = c.conn.id;
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
})
|
|
91
|
+
};
|
|
92
|
+
var accessControlActor = actor({
|
|
93
|
+
state: {
|
|
94
|
+
lastCanPublishConnId: "",
|
|
95
|
+
lastCanSubscribeConnId: ""
|
|
96
|
+
},
|
|
97
|
+
events: accessControlEvents,
|
|
98
|
+
queues: accessControlQueues,
|
|
99
|
+
onBeforeConnect: (_c, params) => {
|
|
100
|
+
if ((params == null ? void 0 : params.allowRequest) === false || (params == null ? void 0 : params.allowWebSocket) === false) {
|
|
101
|
+
throw new Forbidden();
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
onRequest(_c, request) {
|
|
105
|
+
const url = new URL(request.url);
|
|
106
|
+
if (url.pathname === "/status") {
|
|
107
|
+
return Response.json({ ok: true });
|
|
108
|
+
}
|
|
109
|
+
return new Response("Not Found", { status: 404 });
|
|
110
|
+
},
|
|
111
|
+
onWebSocket(_c, websocket) {
|
|
112
|
+
websocket.send(JSON.stringify({ type: "welcome" }));
|
|
113
|
+
},
|
|
114
|
+
actions: {
|
|
115
|
+
allowedAction: (_c, value) => {
|
|
116
|
+
return `allowed:${value}`;
|
|
117
|
+
},
|
|
118
|
+
allowedGetLastCanPublishConnId: (c) => {
|
|
119
|
+
return c.state.lastCanPublishConnId;
|
|
120
|
+
},
|
|
121
|
+
allowedGetLastCanSubscribeConnId: (c) => {
|
|
122
|
+
return c.state.lastCanSubscribeConnId;
|
|
123
|
+
},
|
|
124
|
+
allowedReceiveQueue: async (c) => {
|
|
125
|
+
const [message] = await c.queue.tryNext({
|
|
126
|
+
names: ["allowedQueue"]
|
|
127
|
+
});
|
|
128
|
+
return (message == null ? void 0 : message.body) ?? null;
|
|
129
|
+
},
|
|
130
|
+
allowedReceiveAnyQueue: async (c) => {
|
|
131
|
+
const [message] = await c.queue.tryNext();
|
|
132
|
+
return (message == null ? void 0 : message.body) ?? null;
|
|
133
|
+
},
|
|
134
|
+
allowedBroadcastAllowedEvent: (c, value) => {
|
|
135
|
+
c.broadcast("allowedEvent", { value });
|
|
136
|
+
},
|
|
137
|
+
allowedBroadcastBlockedEvent: (c, value) => {
|
|
138
|
+
c.broadcast("blockedEvent", { value });
|
|
139
|
+
},
|
|
140
|
+
allowedBroadcastUndefinedEvent: (c, value) => {
|
|
141
|
+
c.broadcast("undefinedEvent", { value });
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
var accessControlNoQueuesActor = actor({
|
|
146
|
+
state: {},
|
|
147
|
+
actions: {
|
|
148
|
+
readAnyQueue: async (c) => {
|
|
149
|
+
const [message] = await c.queue.tryNext();
|
|
150
|
+
return (message == null ? void 0 : message.body) ?? null;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
|
|
35
155
|
// fixtures/driver-test-suite/action-inputs.ts
|
|
36
156
|
var inputActor = actor({
|
|
37
157
|
createState: (c, input) => {
|
|
@@ -178,6 +298,680 @@ var promiseActor = actor({
|
|
|
178
298
|
}
|
|
179
299
|
});
|
|
180
300
|
|
|
301
|
+
// fixtures/driver-test-suite/actor-db-raw.ts
|
|
302
|
+
function firstRowValue(row) {
|
|
303
|
+
if (!row) {
|
|
304
|
+
return void 0;
|
|
305
|
+
}
|
|
306
|
+
const values = Object.values(row);
|
|
307
|
+
return values.length > 0 ? values[0] : void 0;
|
|
308
|
+
}
|
|
309
|
+
function toSafeInteger(value) {
|
|
310
|
+
if (typeof value === "bigint") {
|
|
311
|
+
return Number(value);
|
|
312
|
+
}
|
|
313
|
+
if (typeof value === "number") {
|
|
314
|
+
return Number.isFinite(value) ? Math.trunc(value) : 0;
|
|
315
|
+
}
|
|
316
|
+
if (typeof value === "string") {
|
|
317
|
+
const parsed = Number.parseInt(value, 10);
|
|
318
|
+
return Number.isFinite(parsed) ? parsed : 0;
|
|
319
|
+
}
|
|
320
|
+
return 0;
|
|
321
|
+
}
|
|
322
|
+
function normalizeRowIds(rowIds) {
|
|
323
|
+
const normalized = rowIds.map((id) => Math.trunc(id)).filter((id) => Number.isFinite(id) && id > 0);
|
|
324
|
+
return Array.from(new Set(normalized));
|
|
325
|
+
}
|
|
326
|
+
function makePayload(size) {
|
|
327
|
+
const normalizedSize = Math.max(0, Math.trunc(size));
|
|
328
|
+
return "x".repeat(normalizedSize);
|
|
329
|
+
}
|
|
330
|
+
var dbActorRaw = actor({
|
|
331
|
+
state: {
|
|
332
|
+
disconnectInsertEnabled: false,
|
|
333
|
+
disconnectInsertDelayMs: 0
|
|
334
|
+
},
|
|
335
|
+
db: db({
|
|
336
|
+
onMigrate: async (db3) => {
|
|
337
|
+
await db3.execute(`
|
|
338
|
+
CREATE TABLE IF NOT EXISTS test_data (
|
|
339
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
340
|
+
value TEXT NOT NULL,
|
|
341
|
+
payload TEXT NOT NULL DEFAULT '',
|
|
342
|
+
created_at INTEGER NOT NULL
|
|
343
|
+
)
|
|
344
|
+
`);
|
|
345
|
+
}
|
|
346
|
+
}),
|
|
347
|
+
onDisconnect: async (c) => {
|
|
348
|
+
if (!c.state.disconnectInsertEnabled) {
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
if (c.state.disconnectInsertDelayMs > 0) {
|
|
352
|
+
await new Promise(
|
|
353
|
+
(resolve) => setTimeout(resolve, c.state.disconnectInsertDelayMs)
|
|
354
|
+
);
|
|
355
|
+
}
|
|
356
|
+
await c.db.execute(
|
|
357
|
+
`INSERT INTO test_data (value, payload, created_at) VALUES ('__disconnect__', '', ${Date.now()})`
|
|
358
|
+
);
|
|
359
|
+
},
|
|
360
|
+
actions: {
|
|
361
|
+
configureDisconnectInsert: (c, enabled, delayMs) => {
|
|
362
|
+
c.state.disconnectInsertEnabled = enabled;
|
|
363
|
+
c.state.disconnectInsertDelayMs = Math.max(
|
|
364
|
+
0,
|
|
365
|
+
Math.floor(delayMs)
|
|
366
|
+
);
|
|
367
|
+
},
|
|
368
|
+
getDisconnectInsertCount: async (c) => {
|
|
369
|
+
var _a;
|
|
370
|
+
const results = await c.db.execute(
|
|
371
|
+
`SELECT COUNT(*) as count FROM test_data WHERE value = '__disconnect__'`
|
|
372
|
+
);
|
|
373
|
+
return ((_a = results[0]) == null ? void 0 : _a.count) ?? 0;
|
|
374
|
+
},
|
|
375
|
+
reset: async (c) => {
|
|
376
|
+
await c.db.execute(`DELETE FROM test_data`);
|
|
377
|
+
},
|
|
378
|
+
insertValue: async (c, value) => {
|
|
379
|
+
await c.db.execute(
|
|
380
|
+
`INSERT INTO test_data (value, payload, created_at) VALUES ('${value}', '', ${Date.now()})`
|
|
381
|
+
);
|
|
382
|
+
const results = await c.db.execute(
|
|
383
|
+
`SELECT last_insert_rowid() as id`
|
|
384
|
+
);
|
|
385
|
+
return { id: results[0].id };
|
|
386
|
+
},
|
|
387
|
+
getValues: async (c) => {
|
|
388
|
+
const results = await c.db.execute(
|
|
389
|
+
`SELECT * FROM test_data ORDER BY id`
|
|
390
|
+
);
|
|
391
|
+
return results;
|
|
392
|
+
},
|
|
393
|
+
getValue: async (c, id) => {
|
|
394
|
+
var _a;
|
|
395
|
+
const results = await c.db.execute(
|
|
396
|
+
`SELECT value FROM test_data WHERE id = ${id}`
|
|
397
|
+
);
|
|
398
|
+
return ((_a = results[0]) == null ? void 0 : _a.value) ?? null;
|
|
399
|
+
},
|
|
400
|
+
getCount: async (c) => {
|
|
401
|
+
const results = await c.db.execute(
|
|
402
|
+
`SELECT COUNT(*) as count FROM test_data`
|
|
403
|
+
);
|
|
404
|
+
return results[0].count;
|
|
405
|
+
},
|
|
406
|
+
rawSelectCount: async (c) => {
|
|
407
|
+
const results = await c.db.execute(
|
|
408
|
+
`SELECT COUNT(*) as count FROM test_data`
|
|
409
|
+
);
|
|
410
|
+
return results[0].count;
|
|
411
|
+
},
|
|
412
|
+
insertMany: async (c, count) => {
|
|
413
|
+
if (count <= 0) {
|
|
414
|
+
return { count: 0 };
|
|
415
|
+
}
|
|
416
|
+
const now = Date.now();
|
|
417
|
+
const values = [];
|
|
418
|
+
for (let i = 0; i < count; i++) {
|
|
419
|
+
values.push(`('User ${i}', '', ${now})`);
|
|
420
|
+
}
|
|
421
|
+
await c.db.execute(
|
|
422
|
+
`INSERT INTO test_data (value, payload, created_at) VALUES ${values.join(", ")}`
|
|
423
|
+
);
|
|
424
|
+
return { count };
|
|
425
|
+
},
|
|
426
|
+
updateValue: async (c, id, value) => {
|
|
427
|
+
await c.db.execute(
|
|
428
|
+
`UPDATE test_data SET value = '${value}' WHERE id = ${id}`
|
|
429
|
+
);
|
|
430
|
+
return { success: true };
|
|
431
|
+
},
|
|
432
|
+
deleteValue: async (c, id) => {
|
|
433
|
+
await c.db.execute(`DELETE FROM test_data WHERE id = ${id}`);
|
|
434
|
+
},
|
|
435
|
+
transactionCommit: async (c, value) => {
|
|
436
|
+
await c.db.execute(
|
|
437
|
+
`BEGIN; INSERT INTO test_data (value, payload, created_at) VALUES ('${value}', '', ${Date.now()}); COMMIT;`
|
|
438
|
+
);
|
|
439
|
+
},
|
|
440
|
+
transactionRollback: async (c, value) => {
|
|
441
|
+
await c.db.execute(
|
|
442
|
+
`BEGIN; INSERT INTO test_data (value, payload, created_at) VALUES ('${value}', '', ${Date.now()}); ROLLBACK;`
|
|
443
|
+
);
|
|
444
|
+
},
|
|
445
|
+
insertPayloadOfSize: async (c, size) => {
|
|
446
|
+
const payload = "x".repeat(size);
|
|
447
|
+
await c.db.execute(
|
|
448
|
+
`INSERT INTO test_data (value, payload, created_at) VALUES ('payload', '${payload}', ${Date.now()})`
|
|
449
|
+
);
|
|
450
|
+
const results = await c.db.execute(
|
|
451
|
+
`SELECT last_insert_rowid() as id`
|
|
452
|
+
);
|
|
453
|
+
return { id: results[0].id, size };
|
|
454
|
+
},
|
|
455
|
+
getPayloadSize: async (c, id) => {
|
|
456
|
+
var _a;
|
|
457
|
+
const results = await c.db.execute(
|
|
458
|
+
`SELECT length(payload) as size FROM test_data WHERE id = ${id}`
|
|
459
|
+
);
|
|
460
|
+
return ((_a = results[0]) == null ? void 0 : _a.size) ?? 0;
|
|
461
|
+
},
|
|
462
|
+
insertPayloadRows: async (c, count, payloadSize) => {
|
|
463
|
+
const normalizedCount = Math.max(0, Math.trunc(count));
|
|
464
|
+
if (normalizedCount === 0) {
|
|
465
|
+
return { count: 0 };
|
|
466
|
+
}
|
|
467
|
+
const payload = makePayload(payloadSize);
|
|
468
|
+
const now = Date.now();
|
|
469
|
+
for (let i = 0; i < normalizedCount; i++) {
|
|
470
|
+
await c.db.execute(
|
|
471
|
+
`INSERT INTO test_data (value, payload, created_at) VALUES ('bulk-${i}', '${payload}', ${now})`
|
|
472
|
+
);
|
|
473
|
+
}
|
|
474
|
+
return { count: normalizedCount };
|
|
475
|
+
},
|
|
476
|
+
roundRobinUpdateValues: async (c, rowIds, iterations) => {
|
|
477
|
+
const normalizedRowIds = normalizeRowIds(rowIds);
|
|
478
|
+
const normalizedIterations = Math.max(0, Math.trunc(iterations));
|
|
479
|
+
if (normalizedRowIds.length === 0 || normalizedIterations === 0) {
|
|
480
|
+
const emptyRows = [];
|
|
481
|
+
return emptyRows;
|
|
482
|
+
}
|
|
483
|
+
for (let i = 0; i < normalizedIterations; i++) {
|
|
484
|
+
const rowId = normalizedRowIds[i % normalizedRowIds.length] ?? 0;
|
|
485
|
+
await c.db.execute(
|
|
486
|
+
`UPDATE test_data SET value = 'v-${i}' WHERE id = ${rowId}`
|
|
487
|
+
);
|
|
488
|
+
}
|
|
489
|
+
return await c.db.execute(
|
|
490
|
+
`SELECT id, value FROM test_data WHERE id IN (${normalizedRowIds.join(",")}) ORDER BY id`
|
|
491
|
+
);
|
|
492
|
+
},
|
|
493
|
+
getPageCount: async (c) => {
|
|
494
|
+
const rows = await c.db.execute(
|
|
495
|
+
"PRAGMA page_count"
|
|
496
|
+
);
|
|
497
|
+
return toSafeInteger(firstRowValue(rows[0]));
|
|
498
|
+
},
|
|
499
|
+
vacuum: async (c) => {
|
|
500
|
+
await c.db.execute("VACUUM");
|
|
501
|
+
},
|
|
502
|
+
integrityCheck: async (c) => {
|
|
503
|
+
const rows = await c.db.execute(
|
|
504
|
+
"PRAGMA integrity_check"
|
|
505
|
+
);
|
|
506
|
+
const value = firstRowValue(rows[0]);
|
|
507
|
+
return String(value ?? "");
|
|
508
|
+
},
|
|
509
|
+
runMixedWorkload: async (c, seedCount, churnCount) => {
|
|
510
|
+
const normalizedSeedCount = Math.max(1, Math.trunc(seedCount));
|
|
511
|
+
const normalizedChurnCount = Math.max(0, Math.trunc(churnCount));
|
|
512
|
+
const now = Date.now();
|
|
513
|
+
for (let i = 0; i < normalizedSeedCount; i++) {
|
|
514
|
+
const payload = makePayload(1024 + i % 5 * 128);
|
|
515
|
+
await c.db.execute(
|
|
516
|
+
`INSERT OR REPLACE INTO test_data (id, value, payload, created_at) VALUES (${i + 1}, 'seed-${i}', '${payload}', ${now})`
|
|
517
|
+
);
|
|
518
|
+
}
|
|
519
|
+
for (let i = 0; i < normalizedChurnCount; i++) {
|
|
520
|
+
const id = i % normalizedSeedCount + 1;
|
|
521
|
+
if (i % 9 === 0) {
|
|
522
|
+
await c.db.execute(`DELETE FROM test_data WHERE id = ${id}`);
|
|
523
|
+
} else {
|
|
524
|
+
const payload = makePayload(768 + i % 7 * 96);
|
|
525
|
+
await c.db.execute(
|
|
526
|
+
`INSERT OR REPLACE INTO test_data (id, value, payload, created_at) VALUES (${id}, 'upd-${i}', '${payload}', ${now + i})`
|
|
527
|
+
);
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
},
|
|
531
|
+
repeatUpdate: async (c, id, count) => {
|
|
532
|
+
let value = "";
|
|
533
|
+
if (count <= 0) {
|
|
534
|
+
return { value };
|
|
535
|
+
}
|
|
536
|
+
const statements = ["BEGIN"];
|
|
537
|
+
for (let i = 0; i < count; i++) {
|
|
538
|
+
value = `Updated ${i}`;
|
|
539
|
+
statements.push(
|
|
540
|
+
`UPDATE test_data SET value = '${value}' WHERE id = ${id}`
|
|
541
|
+
);
|
|
542
|
+
}
|
|
543
|
+
statements.push("COMMIT");
|
|
544
|
+
await c.db.execute(statements.join("; "));
|
|
545
|
+
return { value };
|
|
546
|
+
},
|
|
547
|
+
multiStatementInsert: async (c, value) => {
|
|
548
|
+
var _a;
|
|
549
|
+
await c.db.execute(
|
|
550
|
+
`BEGIN; INSERT INTO test_data (value, payload, created_at) VALUES ('${value}', '', ${Date.now()}); UPDATE test_data SET value = '${value}-updated' WHERE id = last_insert_rowid(); COMMIT;`
|
|
551
|
+
);
|
|
552
|
+
const results = await c.db.execute(
|
|
553
|
+
`SELECT value FROM test_data ORDER BY id DESC LIMIT 1`
|
|
554
|
+
);
|
|
555
|
+
return ((_a = results[0]) == null ? void 0 : _a.value) ?? null;
|
|
556
|
+
},
|
|
557
|
+
triggerSleep: (c) => {
|
|
558
|
+
c.sleep();
|
|
559
|
+
}
|
|
560
|
+
},
|
|
561
|
+
options: {
|
|
562
|
+
sleepTimeout: 100
|
|
563
|
+
}
|
|
564
|
+
});
|
|
565
|
+
|
|
566
|
+
// fixtures/driver-test-suite/db/migrations.ts
|
|
567
|
+
var migrations = {
|
|
568
|
+
journal: {
|
|
569
|
+
entries: [
|
|
570
|
+
{
|
|
571
|
+
idx: 0,
|
|
572
|
+
when: 17e11,
|
|
573
|
+
tag: "0000_init",
|
|
574
|
+
breakpoints: false
|
|
575
|
+
}
|
|
576
|
+
]
|
|
577
|
+
},
|
|
578
|
+
migrations: {
|
|
579
|
+
m0000: `
|
|
580
|
+
CREATE TABLE IF NOT EXISTS test_data (
|
|
581
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
582
|
+
value TEXT NOT NULL,
|
|
583
|
+
payload TEXT NOT NULL DEFAULT '',
|
|
584
|
+
created_at INTEGER NOT NULL
|
|
585
|
+
);
|
|
586
|
+
`
|
|
587
|
+
}
|
|
588
|
+
};
|
|
589
|
+
|
|
590
|
+
// fixtures/driver-test-suite/db/schema.ts
|
|
591
|
+
var testData = sqliteTable("test_data", {
|
|
592
|
+
id: integer("id").primaryKey({ autoIncrement: true }),
|
|
593
|
+
value: text("value").notNull(),
|
|
594
|
+
payload: text("payload").notNull().default(""),
|
|
595
|
+
createdAt: integer("created_at").notNull()
|
|
596
|
+
});
|
|
597
|
+
var schema = {
|
|
598
|
+
testData
|
|
599
|
+
};
|
|
600
|
+
|
|
601
|
+
// fixtures/driver-test-suite/actor-db-drizzle.ts
|
|
602
|
+
function firstRowValue2(row) {
|
|
603
|
+
if (!row) {
|
|
604
|
+
return void 0;
|
|
605
|
+
}
|
|
606
|
+
const values = Object.values(row);
|
|
607
|
+
return values.length > 0 ? values[0] : void 0;
|
|
608
|
+
}
|
|
609
|
+
function toSafeInteger2(value) {
|
|
610
|
+
if (typeof value === "bigint") {
|
|
611
|
+
return Number(value);
|
|
612
|
+
}
|
|
613
|
+
if (typeof value === "number") {
|
|
614
|
+
return Number.isFinite(value) ? Math.trunc(value) : 0;
|
|
615
|
+
}
|
|
616
|
+
if (typeof value === "string") {
|
|
617
|
+
const parsed = Number.parseInt(value, 10);
|
|
618
|
+
return Number.isFinite(parsed) ? parsed : 0;
|
|
619
|
+
}
|
|
620
|
+
return 0;
|
|
621
|
+
}
|
|
622
|
+
function normalizeRowIds2(rowIds) {
|
|
623
|
+
const normalized = rowIds.map((id) => Math.trunc(id)).filter((id) => Number.isFinite(id) && id > 0);
|
|
624
|
+
return Array.from(new Set(normalized));
|
|
625
|
+
}
|
|
626
|
+
function makePayload2(size) {
|
|
627
|
+
const normalizedSize = Math.max(0, Math.trunc(size));
|
|
628
|
+
return "x".repeat(normalizedSize);
|
|
629
|
+
}
|
|
630
|
+
var dbActorDrizzle = actor({
|
|
631
|
+
state: {
|
|
632
|
+
disconnectInsertEnabled: false,
|
|
633
|
+
disconnectInsertDelayMs: 0
|
|
634
|
+
},
|
|
635
|
+
db: db2({
|
|
636
|
+
schema,
|
|
637
|
+
migrations
|
|
638
|
+
}),
|
|
639
|
+
onDisconnect: async (c) => {
|
|
640
|
+
if (!c.state.disconnectInsertEnabled) {
|
|
641
|
+
return;
|
|
642
|
+
}
|
|
643
|
+
if (c.state.disconnectInsertDelayMs > 0) {
|
|
644
|
+
await new Promise(
|
|
645
|
+
(resolve) => setTimeout(resolve, c.state.disconnectInsertDelayMs)
|
|
646
|
+
);
|
|
647
|
+
}
|
|
648
|
+
await c.db.execute(
|
|
649
|
+
`INSERT INTO test_data (value, payload, created_at) VALUES ('__disconnect__', '', ${Date.now()})`
|
|
650
|
+
);
|
|
651
|
+
},
|
|
652
|
+
actions: {
|
|
653
|
+
configureDisconnectInsert: (c, enabled, delayMs) => {
|
|
654
|
+
c.state.disconnectInsertEnabled = enabled;
|
|
655
|
+
c.state.disconnectInsertDelayMs = Math.max(
|
|
656
|
+
0,
|
|
657
|
+
Math.floor(delayMs)
|
|
658
|
+
);
|
|
659
|
+
},
|
|
660
|
+
getDisconnectInsertCount: async (c) => {
|
|
661
|
+
var _a;
|
|
662
|
+
const results = await c.db.execute(
|
|
663
|
+
`SELECT COUNT(*) as count FROM test_data WHERE value = '__disconnect__'`
|
|
664
|
+
);
|
|
665
|
+
return ((_a = results[0]) == null ? void 0 : _a.count) ?? 0;
|
|
666
|
+
},
|
|
667
|
+
reset: async (c) => {
|
|
668
|
+
await c.db.execute(`DELETE FROM test_data`);
|
|
669
|
+
},
|
|
670
|
+
insertValue: async (c, value) => {
|
|
671
|
+
await c.db.execute(
|
|
672
|
+
`INSERT INTO test_data (value, payload, created_at) VALUES ('${value}', '', ${Date.now()})`
|
|
673
|
+
);
|
|
674
|
+
const results = await c.db.execute(
|
|
675
|
+
`SELECT last_insert_rowid() as id`
|
|
676
|
+
);
|
|
677
|
+
return { id: results[0].id };
|
|
678
|
+
},
|
|
679
|
+
getValues: async (c) => {
|
|
680
|
+
const results = await c.db.execute(
|
|
681
|
+
`SELECT * FROM test_data ORDER BY id`
|
|
682
|
+
);
|
|
683
|
+
return results;
|
|
684
|
+
},
|
|
685
|
+
getValue: async (c, id) => {
|
|
686
|
+
var _a;
|
|
687
|
+
const results = await c.db.execute(
|
|
688
|
+
`SELECT value FROM test_data WHERE id = ${id}`
|
|
689
|
+
);
|
|
690
|
+
return ((_a = results[0]) == null ? void 0 : _a.value) ?? null;
|
|
691
|
+
},
|
|
692
|
+
getCount: async (c) => {
|
|
693
|
+
const results = await c.db.execute(
|
|
694
|
+
`SELECT COUNT(*) as count FROM test_data`
|
|
695
|
+
);
|
|
696
|
+
return results[0].count;
|
|
697
|
+
},
|
|
698
|
+
rawSelectCount: async (c) => {
|
|
699
|
+
var _a;
|
|
700
|
+
const results = await c.db.execute(
|
|
701
|
+
`SELECT COUNT(*) as count FROM test_data`
|
|
702
|
+
);
|
|
703
|
+
return ((_a = results[0]) == null ? void 0 : _a.count) ?? 0;
|
|
704
|
+
},
|
|
705
|
+
insertMany: async (c, count) => {
|
|
706
|
+
if (count <= 0) {
|
|
707
|
+
return { count: 0 };
|
|
708
|
+
}
|
|
709
|
+
const now = Date.now();
|
|
710
|
+
const values = [];
|
|
711
|
+
for (let i = 0; i < count; i++) {
|
|
712
|
+
values.push(`('User ${i}', '', ${now})`);
|
|
713
|
+
}
|
|
714
|
+
await c.db.execute(
|
|
715
|
+
`INSERT INTO test_data (value, payload, created_at) VALUES ${values.join(", ")}`
|
|
716
|
+
);
|
|
717
|
+
return { count };
|
|
718
|
+
},
|
|
719
|
+
updateValue: async (c, id, value) => {
|
|
720
|
+
await c.db.execute(
|
|
721
|
+
`UPDATE test_data SET value = '${value}' WHERE id = ${id}`
|
|
722
|
+
);
|
|
723
|
+
return { success: true };
|
|
724
|
+
},
|
|
725
|
+
deleteValue: async (c, id) => {
|
|
726
|
+
await c.db.execute(`DELETE FROM test_data WHERE id = ${id}`);
|
|
727
|
+
},
|
|
728
|
+
transactionCommit: async (c, value) => {
|
|
729
|
+
await c.db.execute(
|
|
730
|
+
`BEGIN; INSERT INTO test_data (value, payload, created_at) VALUES ('${value}', '', ${Date.now()}); COMMIT;`
|
|
731
|
+
);
|
|
732
|
+
},
|
|
733
|
+
transactionRollback: async (c, value) => {
|
|
734
|
+
await c.db.execute(
|
|
735
|
+
`BEGIN; INSERT INTO test_data (value, payload, created_at) VALUES ('${value}', '', ${Date.now()}); ROLLBACK;`
|
|
736
|
+
);
|
|
737
|
+
},
|
|
738
|
+
insertPayloadOfSize: async (c, size) => {
|
|
739
|
+
const payload = "x".repeat(size);
|
|
740
|
+
await c.db.execute(
|
|
741
|
+
`INSERT INTO test_data (value, payload, created_at) VALUES ('payload', '${payload}', ${Date.now()})`
|
|
742
|
+
);
|
|
743
|
+
const results = await c.db.execute(
|
|
744
|
+
`SELECT last_insert_rowid() as id`
|
|
745
|
+
);
|
|
746
|
+
return { id: results[0].id, size };
|
|
747
|
+
},
|
|
748
|
+
getPayloadSize: async (c, id) => {
|
|
749
|
+
var _a;
|
|
750
|
+
const results = await c.db.execute(
|
|
751
|
+
`SELECT length(payload) as size FROM test_data WHERE id = ${id}`
|
|
752
|
+
);
|
|
753
|
+
return ((_a = results[0]) == null ? void 0 : _a.size) ?? 0;
|
|
754
|
+
},
|
|
755
|
+
insertPayloadRows: async (c, count, payloadSize) => {
|
|
756
|
+
const normalizedCount = Math.max(0, Math.trunc(count));
|
|
757
|
+
if (normalizedCount === 0) {
|
|
758
|
+
return { count: 0 };
|
|
759
|
+
}
|
|
760
|
+
const payload = makePayload2(payloadSize);
|
|
761
|
+
const now = Date.now();
|
|
762
|
+
for (let i = 0; i < normalizedCount; i++) {
|
|
763
|
+
await c.db.execute(
|
|
764
|
+
`INSERT INTO test_data (value, payload, created_at) VALUES ('bulk-${i}', '${payload}', ${now})`
|
|
765
|
+
);
|
|
766
|
+
}
|
|
767
|
+
return { count: normalizedCount };
|
|
768
|
+
},
|
|
769
|
+
roundRobinUpdateValues: async (c, rowIds, iterations) => {
|
|
770
|
+
const normalizedRowIds = normalizeRowIds2(rowIds);
|
|
771
|
+
const normalizedIterations = Math.max(0, Math.trunc(iterations));
|
|
772
|
+
if (normalizedRowIds.length === 0 || normalizedIterations === 0) {
|
|
773
|
+
const emptyRows = [];
|
|
774
|
+
return emptyRows;
|
|
775
|
+
}
|
|
776
|
+
for (let i = 0; i < normalizedIterations; i++) {
|
|
777
|
+
const rowId = normalizedRowIds[i % normalizedRowIds.length] ?? 0;
|
|
778
|
+
await c.db.execute(
|
|
779
|
+
`UPDATE test_data SET value = 'v-${i}' WHERE id = ${rowId}`
|
|
780
|
+
);
|
|
781
|
+
}
|
|
782
|
+
return await c.db.execute(
|
|
783
|
+
`SELECT id, value FROM test_data WHERE id IN (${normalizedRowIds.join(",")}) ORDER BY id`
|
|
784
|
+
);
|
|
785
|
+
},
|
|
786
|
+
getPageCount: async (c) => {
|
|
787
|
+
const rows = await c.db.execute(
|
|
788
|
+
"PRAGMA page_count"
|
|
789
|
+
);
|
|
790
|
+
return toSafeInteger2(firstRowValue2(rows[0]));
|
|
791
|
+
},
|
|
792
|
+
vacuum: async (c) => {
|
|
793
|
+
await c.db.execute("VACUUM");
|
|
794
|
+
},
|
|
795
|
+
integrityCheck: async (c) => {
|
|
796
|
+
const rows = await c.db.execute(
|
|
797
|
+
"PRAGMA integrity_check"
|
|
798
|
+
);
|
|
799
|
+
const value = firstRowValue2(rows[0]);
|
|
800
|
+
return String(value ?? "");
|
|
801
|
+
},
|
|
802
|
+
runMixedWorkload: async (c, seedCount, churnCount) => {
|
|
803
|
+
const normalizedSeedCount = Math.max(1, Math.trunc(seedCount));
|
|
804
|
+
const normalizedChurnCount = Math.max(0, Math.trunc(churnCount));
|
|
805
|
+
const now = Date.now();
|
|
806
|
+
for (let i = 0; i < normalizedSeedCount; i++) {
|
|
807
|
+
const payload = makePayload2(1024 + i % 5 * 128);
|
|
808
|
+
await c.db.execute(
|
|
809
|
+
`INSERT OR REPLACE INTO test_data (id, value, payload, created_at) VALUES (${i + 1}, 'seed-${i}', '${payload}', ${now})`
|
|
810
|
+
);
|
|
811
|
+
}
|
|
812
|
+
for (let i = 0; i < normalizedChurnCount; i++) {
|
|
813
|
+
const id = i % normalizedSeedCount + 1;
|
|
814
|
+
if (i % 9 === 0) {
|
|
815
|
+
await c.db.execute(`DELETE FROM test_data WHERE id = ${id}`);
|
|
816
|
+
} else {
|
|
817
|
+
const payload = makePayload2(768 + i % 7 * 96);
|
|
818
|
+
await c.db.execute(
|
|
819
|
+
`INSERT OR REPLACE INTO test_data (id, value, payload, created_at) VALUES (${id}, 'upd-${i}', '${payload}', ${now + i})`
|
|
820
|
+
);
|
|
821
|
+
}
|
|
822
|
+
}
|
|
823
|
+
},
|
|
824
|
+
repeatUpdate: async (c, id, count) => {
|
|
825
|
+
let value = "";
|
|
826
|
+
if (count <= 0) {
|
|
827
|
+
return { value };
|
|
828
|
+
}
|
|
829
|
+
const statements = ["BEGIN"];
|
|
830
|
+
for (let i = 0; i < count; i++) {
|
|
831
|
+
value = `Updated ${i}`;
|
|
832
|
+
statements.push(
|
|
833
|
+
`UPDATE test_data SET value = '${value}' WHERE id = ${id}`
|
|
834
|
+
);
|
|
835
|
+
}
|
|
836
|
+
statements.push("COMMIT");
|
|
837
|
+
await c.db.execute(statements.join("; "));
|
|
838
|
+
return { value };
|
|
839
|
+
},
|
|
840
|
+
multiStatementInsert: async (c, value) => {
|
|
841
|
+
var _a;
|
|
842
|
+
await c.db.execute(
|
|
843
|
+
`BEGIN; INSERT INTO test_data (value, payload, created_at) VALUES ('${value}', '', ${Date.now()}); UPDATE test_data SET value = '${value}-updated' WHERE id = last_insert_rowid(); COMMIT;`
|
|
844
|
+
);
|
|
845
|
+
const results = await c.db.execute(
|
|
846
|
+
`SELECT value FROM test_data ORDER BY id DESC LIMIT 1`
|
|
847
|
+
);
|
|
848
|
+
return ((_a = results[0]) == null ? void 0 : _a.value) ?? null;
|
|
849
|
+
},
|
|
850
|
+
triggerSleep: (c) => {
|
|
851
|
+
c.sleep();
|
|
852
|
+
}
|
|
853
|
+
},
|
|
854
|
+
options: {
|
|
855
|
+
sleepTimeout: 100
|
|
856
|
+
}
|
|
857
|
+
});
|
|
858
|
+
|
|
859
|
+
// fixtures/driver-test-suite/db-lifecycle.ts
|
|
860
|
+
var clientActorIds = /* @__PURE__ */ new WeakMap();
|
|
861
|
+
var createCounts = /* @__PURE__ */ new Map();
|
|
862
|
+
var migrateCounts = /* @__PURE__ */ new Map();
|
|
863
|
+
var cleanupCounts = /* @__PURE__ */ new Map();
|
|
864
|
+
function increment(map, actorId) {
|
|
865
|
+
map.set(actorId, (map.get(actorId) ?? 0) + 1);
|
|
866
|
+
}
|
|
867
|
+
function getCounts(actorId) {
|
|
868
|
+
return {
|
|
869
|
+
create: createCounts.get(actorId) ?? 0,
|
|
870
|
+
migrate: migrateCounts.get(actorId) ?? 0,
|
|
871
|
+
cleanup: cleanupCounts.get(actorId) ?? 0
|
|
872
|
+
};
|
|
873
|
+
}
|
|
874
|
+
var baseProvider = db({
|
|
875
|
+
onMigrate: async (dbHandle) => {
|
|
876
|
+
await dbHandle.execute(`
|
|
877
|
+
CREATE TABLE IF NOT EXISTS lifecycle_data (
|
|
878
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
879
|
+
value TEXT NOT NULL,
|
|
880
|
+
created_at INTEGER NOT NULL
|
|
881
|
+
)
|
|
882
|
+
`);
|
|
883
|
+
}
|
|
884
|
+
});
|
|
885
|
+
var lifecycleProvider = {
|
|
886
|
+
createClient: async (ctx) => {
|
|
887
|
+
const client = await baseProvider.createClient(ctx);
|
|
888
|
+
clientActorIds.set(client, ctx.actorId);
|
|
889
|
+
increment(createCounts, ctx.actorId);
|
|
890
|
+
return client;
|
|
891
|
+
},
|
|
892
|
+
onMigrate: async (client) => {
|
|
893
|
+
const actorId = clientActorIds.get(client);
|
|
894
|
+
if (actorId) {
|
|
895
|
+
increment(migrateCounts, actorId);
|
|
896
|
+
}
|
|
897
|
+
await baseProvider.onMigrate(client);
|
|
898
|
+
},
|
|
899
|
+
onDestroy: async (client) => {
|
|
900
|
+
var _a;
|
|
901
|
+
const actorId = clientActorIds.get(client);
|
|
902
|
+
if (actorId) {
|
|
903
|
+
increment(cleanupCounts, actorId);
|
|
904
|
+
}
|
|
905
|
+
await ((_a = baseProvider.onDestroy) == null ? void 0 : _a.call(baseProvider, client));
|
|
906
|
+
}
|
|
907
|
+
};
|
|
908
|
+
var failingLifecycleProvider = {
|
|
909
|
+
createClient: async (ctx) => {
|
|
910
|
+
const client = await baseProvider.createClient(ctx);
|
|
911
|
+
clientActorIds.set(client, ctx.actorId);
|
|
912
|
+
increment(createCounts, ctx.actorId);
|
|
913
|
+
return client;
|
|
914
|
+
},
|
|
915
|
+
onMigrate: async (client) => {
|
|
916
|
+
const actorId = clientActorIds.get(client);
|
|
917
|
+
if (actorId) {
|
|
918
|
+
increment(migrateCounts, actorId);
|
|
919
|
+
}
|
|
920
|
+
throw new Error("forced migrate failure");
|
|
921
|
+
},
|
|
922
|
+
onDestroy: async (client) => {
|
|
923
|
+
var _a;
|
|
924
|
+
const actorId = clientActorIds.get(client);
|
|
925
|
+
if (actorId) {
|
|
926
|
+
increment(cleanupCounts, actorId);
|
|
927
|
+
}
|
|
928
|
+
await ((_a = baseProvider.onDestroy) == null ? void 0 : _a.call(baseProvider, client));
|
|
929
|
+
}
|
|
930
|
+
};
|
|
931
|
+
var dbLifecycle = actor({
|
|
932
|
+
db: lifecycleProvider,
|
|
933
|
+
actions: {
|
|
934
|
+
getActorId: (c) => c.actorId,
|
|
935
|
+
ping: () => "pong",
|
|
936
|
+
insertValue: async (c, value) => {
|
|
937
|
+
await c.db.execute(
|
|
938
|
+
"INSERT INTO lifecycle_data (value, created_at) VALUES (?, ?)",
|
|
939
|
+
value,
|
|
940
|
+
Date.now()
|
|
941
|
+
);
|
|
942
|
+
},
|
|
943
|
+
getCount: async (c) => {
|
|
944
|
+
var _a;
|
|
945
|
+
const results = await c.db.execute(
|
|
946
|
+
`SELECT COUNT(*) as count FROM lifecycle_data`
|
|
947
|
+
);
|
|
948
|
+
return ((_a = results[0]) == null ? void 0 : _a.count) ?? 0;
|
|
949
|
+
},
|
|
950
|
+
triggerSleep: (c) => {
|
|
951
|
+
c.sleep();
|
|
952
|
+
},
|
|
953
|
+
triggerDestroy: (c) => {
|
|
954
|
+
c.destroy();
|
|
955
|
+
}
|
|
956
|
+
},
|
|
957
|
+
options: {
|
|
958
|
+
sleepTimeout: 100
|
|
959
|
+
}
|
|
960
|
+
});
|
|
961
|
+
var dbLifecycleFailing = actor({
|
|
962
|
+
db: failingLifecycleProvider,
|
|
963
|
+
actions: {
|
|
964
|
+
ping: () => "pong"
|
|
965
|
+
}
|
|
966
|
+
});
|
|
967
|
+
var dbLifecycleObserver = actor({
|
|
968
|
+
actions: {
|
|
969
|
+
getCounts: (_c, actorId) => {
|
|
970
|
+
return getCounts(actorId);
|
|
971
|
+
}
|
|
972
|
+
}
|
|
973
|
+
});
|
|
974
|
+
|
|
181
975
|
// fixtures/driver-test-suite/actor-onstatechange.ts
|
|
182
976
|
var onStateChangeActor = actor({
|
|
183
977
|
state: {
|
|
@@ -348,6 +1142,9 @@ var counter = actor({
|
|
|
348
1142
|
},
|
|
349
1143
|
getCount: (c) => {
|
|
350
1144
|
return c.state.count;
|
|
1145
|
+
},
|
|
1146
|
+
getKey: (c) => {
|
|
1147
|
+
return c.key;
|
|
351
1148
|
}
|
|
352
1149
|
}
|
|
353
1150
|
});
|
|
@@ -504,6 +1301,41 @@ var customTimeoutActor = actor({
|
|
|
504
1301
|
}
|
|
505
1302
|
});
|
|
506
1303
|
|
|
1304
|
+
// fixtures/driver-test-suite/file-system-hibernation-cleanup.ts
|
|
1305
|
+
var fileSystemHibernationCleanupActor = actor({
|
|
1306
|
+
state: {
|
|
1307
|
+
wakeCount: 0,
|
|
1308
|
+
sleepCount: 0,
|
|
1309
|
+
disconnectWakeCounts: []
|
|
1310
|
+
},
|
|
1311
|
+
createConnState: () => ({}),
|
|
1312
|
+
onWake: (c) => {
|
|
1313
|
+
c.state.wakeCount += 1;
|
|
1314
|
+
},
|
|
1315
|
+
onSleep: (c) => {
|
|
1316
|
+
c.state.sleepCount += 1;
|
|
1317
|
+
},
|
|
1318
|
+
onDisconnect: (c, conn) => {
|
|
1319
|
+
if (conn.isHibernatable) {
|
|
1320
|
+
c.state.disconnectWakeCounts.push(c.state.wakeCount);
|
|
1321
|
+
}
|
|
1322
|
+
},
|
|
1323
|
+
actions: {
|
|
1324
|
+
ping: () => "pong",
|
|
1325
|
+
triggerSleep: (c) => {
|
|
1326
|
+
c.sleep();
|
|
1327
|
+
},
|
|
1328
|
+
getCounts: (c) => ({
|
|
1329
|
+
wakeCount: c.state.wakeCount,
|
|
1330
|
+
sleepCount: c.state.sleepCount
|
|
1331
|
+
}),
|
|
1332
|
+
getDisconnectWakeCounts: (c) => c.state.disconnectWakeCounts
|
|
1333
|
+
},
|
|
1334
|
+
options: {
|
|
1335
|
+
sleepTimeout: 500
|
|
1336
|
+
}
|
|
1337
|
+
});
|
|
1338
|
+
|
|
507
1339
|
// fixtures/driver-test-suite/inline-client.ts
|
|
508
1340
|
var inlineClientActor = actor({
|
|
509
1341
|
state: { messages: [] },
|
|
@@ -750,6 +1582,201 @@ var metadataActor = actor({
|
|
|
750
1582
|
}
|
|
751
1583
|
});
|
|
752
1584
|
|
|
1585
|
+
// fixtures/driver-test-suite/queue.ts
|
|
1586
|
+
var queueSchemas = {
|
|
1587
|
+
greeting: queue(),
|
|
1588
|
+
self: queue(),
|
|
1589
|
+
a: queue(),
|
|
1590
|
+
b: queue(),
|
|
1591
|
+
c: queue(),
|
|
1592
|
+
one: queue(),
|
|
1593
|
+
two: queue(),
|
|
1594
|
+
missing: queue(),
|
|
1595
|
+
abort: queue(),
|
|
1596
|
+
tasks: queue(),
|
|
1597
|
+
timeout: queue(),
|
|
1598
|
+
nowait: queue(),
|
|
1599
|
+
twice: queue()
|
|
1600
|
+
};
|
|
1601
|
+
var queueActor = actor({
|
|
1602
|
+
state: {},
|
|
1603
|
+
queues: queueSchemas,
|
|
1604
|
+
actions: {
|
|
1605
|
+
receiveOne: async (c, name, opts) => {
|
|
1606
|
+
const messages = await c.queue.next({
|
|
1607
|
+
names: [name],
|
|
1608
|
+
count: opts == null ? void 0 : opts.count,
|
|
1609
|
+
timeout: opts == null ? void 0 : opts.timeout
|
|
1610
|
+
});
|
|
1611
|
+
const message = messages[0];
|
|
1612
|
+
if (!message) {
|
|
1613
|
+
return null;
|
|
1614
|
+
}
|
|
1615
|
+
return { name: message.name, body: message.body };
|
|
1616
|
+
},
|
|
1617
|
+
receiveMany: async (c, names, opts) => {
|
|
1618
|
+
const messages = await c.queue.next({
|
|
1619
|
+
names,
|
|
1620
|
+
count: opts == null ? void 0 : opts.count,
|
|
1621
|
+
timeout: opts == null ? void 0 : opts.timeout
|
|
1622
|
+
});
|
|
1623
|
+
return messages.map((message) => ({
|
|
1624
|
+
name: message.name,
|
|
1625
|
+
body: message.body
|
|
1626
|
+
}));
|
|
1627
|
+
},
|
|
1628
|
+
receiveRequest: async (c, request) => {
|
|
1629
|
+
const messages = await c.queue.next(request);
|
|
1630
|
+
return messages.map((message) => ({
|
|
1631
|
+
name: message.name,
|
|
1632
|
+
body: message.body
|
|
1633
|
+
}));
|
|
1634
|
+
},
|
|
1635
|
+
tryReceiveMany: async (c, request) => {
|
|
1636
|
+
const messages = await c.queue.tryNext(request);
|
|
1637
|
+
return messages.map((message) => ({
|
|
1638
|
+
name: message.name,
|
|
1639
|
+
body: message.body
|
|
1640
|
+
}));
|
|
1641
|
+
},
|
|
1642
|
+
receiveWithIterator: async (c, name) => {
|
|
1643
|
+
for await (const message of c.queue.iter({ names: [name] })) {
|
|
1644
|
+
return { name: message.name, body: message.body };
|
|
1645
|
+
}
|
|
1646
|
+
return null;
|
|
1647
|
+
},
|
|
1648
|
+
receiveWithAsyncIterator: async (c) => {
|
|
1649
|
+
for await (const message of c.queue.iter()) {
|
|
1650
|
+
return { name: message.name, body: message.body };
|
|
1651
|
+
}
|
|
1652
|
+
return null;
|
|
1653
|
+
},
|
|
1654
|
+
sendToSelf: async (c, name, body) => {
|
|
1655
|
+
const client = c.client();
|
|
1656
|
+
const handle = client.queueActor.getForId(c.actorId);
|
|
1657
|
+
await handle.send(name, body);
|
|
1658
|
+
return true;
|
|
1659
|
+
},
|
|
1660
|
+
waitForAbort: async (c) => {
|
|
1661
|
+
setTimeout(() => {
|
|
1662
|
+
c.destroy();
|
|
1663
|
+
}, 10);
|
|
1664
|
+
await c.queue.next({ names: ["abort"], timeout: 1e4 });
|
|
1665
|
+
return true;
|
|
1666
|
+
},
|
|
1667
|
+
waitForSignalAbort: async (c) => {
|
|
1668
|
+
const controller = new AbortController();
|
|
1669
|
+
controller.abort();
|
|
1670
|
+
try {
|
|
1671
|
+
await c.queue.next({
|
|
1672
|
+
names: ["abort"],
|
|
1673
|
+
timeout: 1e4,
|
|
1674
|
+
signal: controller.signal
|
|
1675
|
+
});
|
|
1676
|
+
return { ok: false };
|
|
1677
|
+
} catch (error) {
|
|
1678
|
+
const actorError = error;
|
|
1679
|
+
return { group: actorError.group, code: actorError.code };
|
|
1680
|
+
}
|
|
1681
|
+
},
|
|
1682
|
+
waitForActorAbortWithSignal: async (c) => {
|
|
1683
|
+
const controller = new AbortController();
|
|
1684
|
+
setTimeout(() => {
|
|
1685
|
+
c.destroy();
|
|
1686
|
+
}, 10);
|
|
1687
|
+
try {
|
|
1688
|
+
await c.queue.next({
|
|
1689
|
+
names: ["abort"],
|
|
1690
|
+
timeout: 1e4,
|
|
1691
|
+
signal: controller.signal
|
|
1692
|
+
});
|
|
1693
|
+
return { ok: false };
|
|
1694
|
+
} catch (error) {
|
|
1695
|
+
const actorError = error;
|
|
1696
|
+
return { group: actorError.group, code: actorError.code };
|
|
1697
|
+
}
|
|
1698
|
+
},
|
|
1699
|
+
iterWithSignalAbort: async (c) => {
|
|
1700
|
+
const controller = new AbortController();
|
|
1701
|
+
controller.abort();
|
|
1702
|
+
for await (const _message of c.queue.iter({
|
|
1703
|
+
names: ["abort"],
|
|
1704
|
+
signal: controller.signal
|
|
1705
|
+
})) {
|
|
1706
|
+
return { ok: false };
|
|
1707
|
+
}
|
|
1708
|
+
return { ok: true };
|
|
1709
|
+
},
|
|
1710
|
+
receiveAndComplete: async (c, name) => {
|
|
1711
|
+
const messages = await c.queue.next({ names: [name], completable: true });
|
|
1712
|
+
const message = messages[0];
|
|
1713
|
+
if (!message) {
|
|
1714
|
+
return null;
|
|
1715
|
+
}
|
|
1716
|
+
await message.complete({ echo: message.body });
|
|
1717
|
+
return { name: message.name, body: message.body };
|
|
1718
|
+
},
|
|
1719
|
+
receiveWithoutComplete: async (c, name) => {
|
|
1720
|
+
const messages = await c.queue.next({ names: [name], completable: true });
|
|
1721
|
+
const message = messages[0];
|
|
1722
|
+
if (!message) {
|
|
1723
|
+
return null;
|
|
1724
|
+
}
|
|
1725
|
+
return { name: message.name, body: message.body };
|
|
1726
|
+
},
|
|
1727
|
+
receiveManualThenNextWithoutComplete: async (c, name) => {
|
|
1728
|
+
const messages = await c.queue.next({ names: [name], completable: true });
|
|
1729
|
+
const message = messages[0];
|
|
1730
|
+
if (!message) {
|
|
1731
|
+
return { ok: false, reason: "no_message" };
|
|
1732
|
+
}
|
|
1733
|
+
try {
|
|
1734
|
+
await c.queue.next({ names: [name], timeout: 0 });
|
|
1735
|
+
c.destroy();
|
|
1736
|
+
return { ok: false, reason: "next_succeeded" };
|
|
1737
|
+
} catch (error) {
|
|
1738
|
+
c.destroy();
|
|
1739
|
+
const actorError = error;
|
|
1740
|
+
return { group: actorError.group, code: actorError.code };
|
|
1741
|
+
}
|
|
1742
|
+
},
|
|
1743
|
+
receiveAndCompleteTwice: async (c, name) => {
|
|
1744
|
+
const messages = await c.queue.next({ names: [name], completable: true });
|
|
1745
|
+
const message = messages[0];
|
|
1746
|
+
if (!message) {
|
|
1747
|
+
return null;
|
|
1748
|
+
}
|
|
1749
|
+
await message.complete({ ok: true });
|
|
1750
|
+
try {
|
|
1751
|
+
await message.complete({ ok: true });
|
|
1752
|
+
return { ok: false };
|
|
1753
|
+
} catch (error) {
|
|
1754
|
+
const actorError = error;
|
|
1755
|
+
return { group: actorError.group, code: actorError.code };
|
|
1756
|
+
}
|
|
1757
|
+
},
|
|
1758
|
+
receiveWithoutCompleteMethod: async (c, name) => {
|
|
1759
|
+
const messages = await c.queue.next({ names: [name], completable: true });
|
|
1760
|
+
const message = messages[0];
|
|
1761
|
+
return {
|
|
1762
|
+
hasComplete: message !== void 0 && typeof message.complete === "function"
|
|
1763
|
+
};
|
|
1764
|
+
}
|
|
1765
|
+
}
|
|
1766
|
+
});
|
|
1767
|
+
var queueLimitedActor = actor({
|
|
1768
|
+
state: {},
|
|
1769
|
+
queues: {
|
|
1770
|
+
message: queue(),
|
|
1771
|
+
oversize: queue()
|
|
1772
|
+
},
|
|
1773
|
+
actions: {},
|
|
1774
|
+
options: {
|
|
1775
|
+
maxQueueSize: 1,
|
|
1776
|
+
maxQueueMessageSize: 64
|
|
1777
|
+
}
|
|
1778
|
+
});
|
|
1779
|
+
|
|
753
1780
|
// fixtures/driver-test-suite/raw-http.ts
|
|
754
1781
|
import { Hono } from "hono";
|
|
755
1782
|
var rawHttpActor = actor({
|
|
@@ -864,11 +1891,11 @@ var rawHttpRequestPropertiesActor = actor({
|
|
|
864
1891
|
const contentType = request.headers.get("content-type") || "";
|
|
865
1892
|
try {
|
|
866
1893
|
if (contentType.includes("application/json")) {
|
|
867
|
-
const
|
|
868
|
-
return
|
|
1894
|
+
const text2 = await request.text();
|
|
1895
|
+
return text2 ? JSON.parse(text2) : null;
|
|
869
1896
|
} else {
|
|
870
|
-
const
|
|
871
|
-
return
|
|
1897
|
+
const text2 = await request.text();
|
|
1898
|
+
return text2 || null;
|
|
872
1899
|
}
|
|
873
1900
|
} catch (error) {
|
|
874
1901
|
return null;
|
|
@@ -933,14 +1960,14 @@ var rawWebSocketActor = actor({
|
|
|
933
1960
|
})
|
|
934
1961
|
);
|
|
935
1962
|
console.log("[ACTOR] Sent welcome message");
|
|
936
|
-
websocket.addEventListener("message", (
|
|
1963
|
+
websocket.addEventListener("message", (event2) => {
|
|
937
1964
|
var _a;
|
|
938
1965
|
ctx.state.messageCount = ctx.state.messageCount + 1;
|
|
939
1966
|
console.log(
|
|
940
1967
|
`[ACTOR] Message received, total count: ${ctx.state.messageCount}, data:`,
|
|
941
|
-
|
|
1968
|
+
event2.data
|
|
942
1969
|
);
|
|
943
|
-
const data =
|
|
1970
|
+
const data = event2.data;
|
|
944
1971
|
if (typeof data === "string") {
|
|
945
1972
|
try {
|
|
946
1973
|
const parsed = JSON.parse(data);
|
|
@@ -1001,8 +2028,8 @@ var rawWebSocketActor = actor({
|
|
|
1001
2028
|
});
|
|
1002
2029
|
var rawWebSocketBinaryActor = actor({
|
|
1003
2030
|
onWebSocket(ctx, websocket) {
|
|
1004
|
-
websocket.addEventListener("message", (
|
|
1005
|
-
const data =
|
|
2031
|
+
websocket.addEventListener("message", (event2) => {
|
|
2032
|
+
const data = event2.data;
|
|
1006
2033
|
if (data instanceof ArrayBuffer || data instanceof Uint8Array) {
|
|
1007
2034
|
const bytes = new Uint8Array(data);
|
|
1008
2035
|
const reversed = new Uint8Array(bytes.length);
|
|
@@ -1125,8 +2152,8 @@ var requestAccessActor = actor({
|
|
|
1125
2152
|
requestHeaders: headers
|
|
1126
2153
|
})
|
|
1127
2154
|
);
|
|
1128
|
-
websocket.addEventListener("message", (
|
|
1129
|
-
websocket.send(
|
|
2155
|
+
websocket.addEventListener("message", (event2) => {
|
|
2156
|
+
websocket.send(event2.data);
|
|
1130
2157
|
});
|
|
1131
2158
|
},
|
|
1132
2159
|
actions: {
|
|
@@ -1223,6 +2250,33 @@ var scheduled = actor({
|
|
|
1223
2250
|
}
|
|
1224
2251
|
});
|
|
1225
2252
|
|
|
2253
|
+
// fixtures/driver-test-suite/stateless.ts
|
|
2254
|
+
var statelessActor = actor({
|
|
2255
|
+
actions: {
|
|
2256
|
+
ping: () => "pong",
|
|
2257
|
+
echo: (c, message) => message,
|
|
2258
|
+
getActorId: (c) => c.actorId,
|
|
2259
|
+
// Try to access state - should throw StateNotEnabled
|
|
2260
|
+
tryGetState: (c) => {
|
|
2261
|
+
try {
|
|
2262
|
+
const state = c.state;
|
|
2263
|
+
return { success: true, state };
|
|
2264
|
+
} catch (error) {
|
|
2265
|
+
return { success: false, error: error.message };
|
|
2266
|
+
}
|
|
2267
|
+
},
|
|
2268
|
+
// Try to access db - should throw DatabaseNotEnabled
|
|
2269
|
+
tryGetDb: (c) => {
|
|
2270
|
+
try {
|
|
2271
|
+
const db3 = c.db;
|
|
2272
|
+
return { success: true, db: db3 };
|
|
2273
|
+
} catch (error) {
|
|
2274
|
+
return { success: false, error: error.message };
|
|
2275
|
+
}
|
|
2276
|
+
}
|
|
2277
|
+
}
|
|
2278
|
+
});
|
|
2279
|
+
|
|
1226
2280
|
// fixtures/driver-test-suite/vars.ts
|
|
1227
2281
|
var staticVarActor = actor({
|
|
1228
2282
|
state: { value: 0 },
|
|
@@ -1328,6 +2382,9 @@ var registry = setup({
|
|
|
1328
2382
|
inlineClientActor,
|
|
1329
2383
|
// From kv.ts
|
|
1330
2384
|
kvActor,
|
|
2385
|
+
// From queue.ts
|
|
2386
|
+
queueActor,
|
|
2387
|
+
queueLimitedActor,
|
|
1331
2388
|
// From action-inputs.ts
|
|
1332
2389
|
inputActor,
|
|
1333
2390
|
// From action-timeout.ts
|
|
@@ -1372,9 +2429,36 @@ var registry = setup({
|
|
|
1372
2429
|
destroyObserver,
|
|
1373
2430
|
// From hibernation.ts
|
|
1374
2431
|
hibernationActor,
|
|
2432
|
+
// From file-system-hibernation-cleanup.ts
|
|
2433
|
+
fileSystemHibernationCleanupActor,
|
|
1375
2434
|
// From large-payloads.ts
|
|
1376
2435
|
largePayloadActor,
|
|
1377
|
-
largePayloadConnActor
|
|
2436
|
+
largePayloadConnActor,
|
|
2437
|
+
// From run.ts
|
|
2438
|
+
runWithTicks,
|
|
2439
|
+
runWithQueueConsumer,
|
|
2440
|
+
runWithEarlyExit,
|
|
2441
|
+
runWithError,
|
|
2442
|
+
runWithoutHandler,
|
|
2443
|
+
// From workflow.ts
|
|
2444
|
+
workflowCounterActor,
|
|
2445
|
+
workflowQueueActor,
|
|
2446
|
+
workflowAccessActor,
|
|
2447
|
+
workflowSleepActor,
|
|
2448
|
+
workflowStopTeardownActor,
|
|
2449
|
+
// From actor-db-raw.ts
|
|
2450
|
+
dbActorRaw,
|
|
2451
|
+
// From actor-db-drizzle.ts
|
|
2452
|
+
dbActorDrizzle,
|
|
2453
|
+
// From db-lifecycle.ts
|
|
2454
|
+
dbLifecycle,
|
|
2455
|
+
dbLifecycleFailing,
|
|
2456
|
+
dbLifecycleObserver,
|
|
2457
|
+
// From stateless.ts
|
|
2458
|
+
statelessActor,
|
|
2459
|
+
// From access-control.ts
|
|
2460
|
+
accessControlActor,
|
|
2461
|
+
accessControlNoQueuesActor
|
|
1378
2462
|
}
|
|
1379
2463
|
});
|
|
1380
2464
|
|
|
@@ -1428,10 +2512,9 @@ async function serveTestSuite() {
|
|
|
1428
2512
|
...registry.config.serverless,
|
|
1429
2513
|
publicEndpoint: `http://127.0.0.1:${port}`
|
|
1430
2514
|
};
|
|
1431
|
-
const driver = await createFileSystemOrMemoryDriver(
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
);
|
|
2515
|
+
const driver = await createFileSystemOrMemoryDriver(true, {
|
|
2516
|
+
path: `/tmp/rivetkit-test-suite-${crypto.randomUUID()}`
|
|
2517
|
+
});
|
|
1435
2518
|
registry.config.driver = driver;
|
|
1436
2519
|
let upgradeWebSocket;
|
|
1437
2520
|
const parsedConfig = registry.parseConfig();
|
|
@@ -1462,7 +2545,9 @@ async function serveTestSuite() {
|
|
|
1462
2545
|
namespace: "default",
|
|
1463
2546
|
runnerName: "default",
|
|
1464
2547
|
close: async () => {
|
|
1465
|
-
await new Promise(
|
|
2548
|
+
await new Promise(
|
|
2549
|
+
(resolve) => server.close(() => resolve(void 0))
|
|
2550
|
+
);
|
|
1466
2551
|
}
|
|
1467
2552
|
};
|
|
1468
2553
|
}
|