@mcp-b/do-runtime 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/LICENSE +110 -0
- package/LICENSE.workerd +176 -0
- package/NOTICE +7 -0
- package/README.md +282 -0
- package/dist/backends/node-sqlite.d.ts +38 -0
- package/dist/backends/node-sqlite.js +335 -0
- package/dist/backends/node-sqlite.js.map +1 -0
- package/dist/backends/sqlite-wasm.d.ts +130 -0
- package/dist/backends/sqlite-wasm.js +259 -0
- package/dist/backends/sqlite-wasm.js.map +1 -0
- package/dist/chunks/sqlite-DFg92Tgt.js +498 -0
- package/dist/chunks/sqlite-DFg92Tgt.js.map +1 -0
- package/dist/cloudflare-workers.js +351 -0
- package/dist/cloudflare-workers.js.map +1 -0
- package/dist/conformance/host.d.ts +58 -0
- package/dist/conformance.js +18 -0
- package/dist/conformance.js.map +1 -0
- package/dist/index.js +7184 -0
- package/dist/index.js.map +1 -0
- package/dist/server/alarm-scheduler.js +513 -0
- package/dist/server/alarm-scheduler.js.map +1 -0
- package/dist/src/api/actor-state.d.ts +396 -0
- package/dist/src/api/actor.d.ts +306 -0
- package/dist/src/api/cloudflare-workers.d.ts +259 -0
- package/dist/src/api/export-loopback.d.ts +264 -0
- package/dist/src/api/global-scope.d.ts +262 -0
- package/dist/src/api/http.d.ts +52 -0
- package/dist/src/api/sql.d.ts +188 -0
- package/dist/src/api/sync-kv.d.ts +51 -0
- package/dist/src/api/web-socket.d.ts +93 -0
- package/dist/src/api/worker-loader.d.ts +354 -0
- package/dist/src/index.d.ts +130 -0
- package/dist/src/io/actor-cache.d.ts +203 -0
- package/dist/src/io/actor-id.d.ts +74 -0
- package/dist/src/io/actor-sqlite.d.ts +298 -0
- package/dist/src/io/io-channels.d.ts +191 -0
- package/dist/src/io/io-context.d.ts +451 -0
- package/dist/src/io/io-gate.d.ts +298 -0
- package/dist/src/io/worker-source.d.ts +108 -0
- package/dist/src/io/worker.d.ts +88 -0
- package/dist/src/server/actor-container.d.ts +525 -0
- package/dist/src/server/actor-id-impl.d.ts +118 -0
- package/dist/src/server/alarm-scheduler.d.ts +201 -0
- package/dist/src/server/facet-deletion.d.ts +156 -0
- package/dist/src/server/facet-tree-index.d.ts +94 -0
- package/dist/src/server/sha256.d.ts +39 -0
- package/dist/src/transport/rpc-session.d.ts +34 -0
- package/dist/src/util/sqlite-kv.d.ts +98 -0
- package/dist/src/util/sqlite-metadata.d.ts +46 -0
- package/dist/src/util/sqlite.d.ts +291 -0
- package/package.json +111 -0
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ← workerd `src/workerd/util/sqlite.{h,c++}`
|
|
3
|
+
*
|
|
4
|
+
* The SQL backend port. Upstream's seam is the same one: `server.c++` opens
|
|
5
|
+
* `<actor-id>.<facetId>.sqlite` and hands `ActorSqlite` a `SqliteDatabase`.
|
|
6
|
+
*
|
|
7
|
+
* Almost none of upstream's 3,768 lines are ours. `sqlite.{h,c++}` is workerd's
|
|
8
|
+
* binding to the SQLite C API — statement caching, the VFS, regulators, the
|
|
9
|
+
* authorizer, the memory-metering allocator. Underneath us that role is played
|
|
10
|
+
* by `node:sqlite` and sqlite-wasm, which is the storage-backend adaptation the
|
|
11
|
+
* design record sanctions: `io-gate.h` knows nothing about SQLite, `ActorSqlite`
|
|
12
|
+
* calls into it, and that seam is upstream's rather than ours.
|
|
13
|
+
*
|
|
14
|
+
* So this file is two things stacked:
|
|
15
|
+
*
|
|
16
|
+
* 1. `SqlDatabase` / `SqlDatabaseProvider` — the backend seam. `backends/`
|
|
17
|
+
* implements it, and nothing above `util/` ever sees a driver type.
|
|
18
|
+
* 2. `SqliteDatabase` — the small part of upstream's class that is genuinely
|
|
19
|
+
* ours, because the layers above call into it and a stateless exec interface
|
|
20
|
+
* cannot express it: `onRollback`, the transaction/savepoint stack it needs,
|
|
21
|
+
* `reset()` and its `ResetListener` notification, all three of which
|
|
22
|
+
* `sqlite-kv.c++` and `sqlite-metadata.c++` reach for; plus `onWrite`,
|
|
23
|
+
* `notifyWrite` and `onCriticalError`, which only `io/actor-sqlite.ts`
|
|
24
|
+
* reaches for. That last trio lives here rather than one directory up
|
|
25
|
+
* because it lives here upstream (`sqlite.h:240`, `:248`, `:267`): a
|
|
26
|
+
* callback slot is not actor knowledge, and a reader who finds `onWrite` in
|
|
27
|
+
* `sqlite.h` has to find it in this file too. Every consumer takes a
|
|
28
|
+
* `SqliteDatabase`, exactly as upstream's take a `SqliteDatabase&`.
|
|
29
|
+
*
|
|
30
|
+
* `transactionSync` is NOT here — it lives in `io/actor-sqlite.ts` as
|
|
31
|
+
* SAVEPOINT/RELEASE with a depth counter, exactly as upstream has it. Today
|
|
32
|
+
* both browser and Node adapters duplicate `BEGIN IMMEDIATE`, which is why a
|
|
33
|
+
* nested call is a live SQLite error (§2.4). Moving it inward fixes that.
|
|
34
|
+
*
|
|
35
|
+
* Not ported, because the substrate has no equivalent: the `Regulator` /
|
|
36
|
+
* authorizer machinery (there is no untrusted-SQL path in `util/`, and
|
|
37
|
+
* `api/sql.ts` owns that question); `SqliteObserver` row-count billing, whose
|
|
38
|
+
* counters are libsql `STMTSTATUS` extensions neither backend exposes;
|
|
39
|
+
* `sqlite-metering.{h,c++}`, which swaps SQLite's process-wide allocator to
|
|
40
|
+
* meter per-database memory — a C-API facility with no JS analogue; and the
|
|
41
|
+
* point-in-time-recovery APIs, a named substrate boundary in the package README.
|
|
42
|
+
*
|
|
43
|
+
* Spec: §1.4, §2.4 in docs/decisions.md.
|
|
44
|
+
*/
|
|
45
|
+
/** The four values SQLite itself accepts after public JSG-style conversion. */
|
|
46
|
+
export type SqlValue = string | number | null | Uint8Array;
|
|
47
|
+
export type SqlResult = {
|
|
48
|
+
readonly columnNames: readonly string[];
|
|
49
|
+
readonly rawRows: readonly (readonly unknown[])[];
|
|
50
|
+
/** Rows changed by this statement, including DML with `RETURNING`. */
|
|
51
|
+
readonly rowsWritten: number;
|
|
52
|
+
};
|
|
53
|
+
/** ← `SqliteDatabase::IngestResult`. */
|
|
54
|
+
export type SqlIngestResult = {
|
|
55
|
+
readonly remainder: string;
|
|
56
|
+
readonly rowsRead: number;
|
|
57
|
+
readonly rowsWritten: number;
|
|
58
|
+
readonly statementCount: number;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* One SQLite-compiled statement from the front of a SQL string.
|
|
62
|
+
*
|
|
63
|
+
* `sql` is the exact prefix SQLite consumed, including trigger bodies. Keeping
|
|
64
|
+
* that boundary on the backend is what prevents JavaScript from inventing a
|
|
65
|
+
* second, subtly different SQL grammar.
|
|
66
|
+
*/
|
|
67
|
+
export interface SqlDatabaseStatement {
|
|
68
|
+
readonly sql: string;
|
|
69
|
+
readonly parameterCount: number;
|
|
70
|
+
execute(params: readonly SqlValue[]): SqlResult;
|
|
71
|
+
close(): void;
|
|
72
|
+
}
|
|
73
|
+
export declare const SQL_WRONG_BINDINGS_MESSAGE = "Wrong number of parameter bindings for SQL query.";
|
|
74
|
+
/** ← `SQLITE_LIMIT_LENGTH`, raised from 2.2 MB to 4 MiB in workerd 2026-08-20. */
|
|
75
|
+
export declare const SQLITE_LENGTH_LIMIT: number;
|
|
76
|
+
export declare const SQLITE_TOOBIG_MESSAGE = "string or blob too big: SQLITE_TOOBIG";
|
|
77
|
+
/** The part of `sqlite3_limit(SQLITE_LIMIT_LENGTH)` visible at the JS binding seam. */
|
|
78
|
+
export declare function requireSqliteLength(value: unknown): void;
|
|
79
|
+
export declare const SQL_PRELUDE_BINDINGS_MESSAGE: string;
|
|
80
|
+
/**
|
|
81
|
+
* One open database. Synchronous exec, matching every substrate we have: in a
|
|
82
|
+
* SQLite-backed Durable Object reads return a value rather than a promise
|
|
83
|
+
* (§1.4), which is what makes the input gate cheap.
|
|
84
|
+
*/
|
|
85
|
+
export interface SqlDatabase {
|
|
86
|
+
/** Compile exactly the first statement, using SQLite's own statement boundary. */
|
|
87
|
+
prepare(sql: string): SqlDatabaseStatement;
|
|
88
|
+
exec(sql: string, params: readonly SqlValue[]): SqlResult;
|
|
89
|
+
readonly databaseSize: number;
|
|
90
|
+
/**
|
|
91
|
+
* ← `sqlite3_get_autocommit(db) == 0`, which is how upstream's
|
|
92
|
+
* `handleCriticalError` learns that SQLite rolled a transaction back on its
|
|
93
|
+
* own (`sqlite.c++:669-691`).
|
|
94
|
+
*
|
|
95
|
+
* SQLite auto-rolls-back on `SQLITE_FULL`, `SQLITE_IOERR`, `SQLITE_NOMEM` and
|
|
96
|
+
* `SQLITE_INTERRUPT`. Nothing announces it, so without this the savepoint
|
|
97
|
+
* stack above would keep believing a transaction is open and the rollback
|
|
98
|
+
* callbacks would never fire — a stale cache with nothing thrown, which is
|
|
99
|
+
* the one failure this layer must never produce.
|
|
100
|
+
*/
|
|
101
|
+
readonly inTransaction: boolean;
|
|
102
|
+
/**
|
|
103
|
+
* ← `SqliteDatabase::reset()` — "delete the underlying database file and
|
|
104
|
+
* create a new one in its place", which is how upstream implements
|
|
105
|
+
* `deleteAll()`.
|
|
106
|
+
*
|
|
107
|
+
* On the backend rather than above it because only the backend knows how to
|
|
108
|
+
* recreate its own file, and because the alternative — enumerating and
|
|
109
|
+
* dropping every table — is the fragile dance today's `storage.ts` performs,
|
|
110
|
+
* complete with an FTS5 shadow-table ordering hazard its comment documents.
|
|
111
|
+
* The `SqlDatabase` reference stays valid across the call; what changes is
|
|
112
|
+
* the file behind it.
|
|
113
|
+
*/
|
|
114
|
+
reset(): void;
|
|
115
|
+
close(): void;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Opens databases within ONE actor's storage scope. The package derives the
|
|
119
|
+
* names (`"root"`, `` `facet-${facetId}` ``); the host maps them onto files.
|
|
120
|
+
* OPFS layout knowledge stays with the host — this package never reaches for
|
|
121
|
+
* `navigator.storage`.
|
|
122
|
+
*/
|
|
123
|
+
export interface SqlDatabaseProvider {
|
|
124
|
+
open(name: string): Promise<SqlDatabase>;
|
|
125
|
+
}
|
|
126
|
+
/** A portable, host-owned image of every SQLite database in one actor storage scope. */
|
|
127
|
+
export type SqlDatabaseSnapshot = {
|
|
128
|
+
readonly version: 1;
|
|
129
|
+
readonly databases: readonly {
|
|
130
|
+
readonly name: string;
|
|
131
|
+
readonly image: Uint8Array;
|
|
132
|
+
}[];
|
|
133
|
+
};
|
|
134
|
+
/** Local backup/restore. This is deliberately not Cloudflare's time-indexed PITR service. */
|
|
135
|
+
export interface SqlDatabaseSnapshotProvider extends SqlDatabaseProvider {
|
|
136
|
+
/** Close every database opened through this provider before snapshot or placement teardown. */
|
|
137
|
+
close(): void;
|
|
138
|
+
exportSnapshot(): Promise<SqlDatabaseSnapshot>;
|
|
139
|
+
importSnapshot(snapshot: SqlDatabaseSnapshot): Promise<void>;
|
|
140
|
+
}
|
|
141
|
+
export declare function requireSafeDatabaseName(name: string): void;
|
|
142
|
+
/** Validate the complete snapshot before a backend replaces any files. */
|
|
143
|
+
export declare function requireValidSqlDatabaseSnapshot(snapshot: SqlDatabaseSnapshot): void;
|
|
144
|
+
/**
|
|
145
|
+
* ← `SqliteDatabase::QueryOptions`. The C++ regulator pointer is narrowed to
|
|
146
|
+
* a callback over the exact SQL source SQLite compiled; `api/sql.ts` owns the
|
|
147
|
+
* policy because this backend seam owns no public-API knowledge.
|
|
148
|
+
*
|
|
149
|
+
* `allowUnconfirmed`'s only destination is `onWrite(bool allowUnconfirmed)`,
|
|
150
|
+
* which fires *before* the statement executes so the automatic transaction
|
|
151
|
+
* opens first — see `isWrite` below for how a statement is known to be a write
|
|
152
|
+
* without the compiled plan upstream reads it from.
|
|
153
|
+
*/
|
|
154
|
+
export type QueryOptions = {
|
|
155
|
+
allowUnconfirmed?: boolean;
|
|
156
|
+
/** The public SQL regulator, run once against each SQLite-compiled statement. */
|
|
157
|
+
regulate?: (sql: string) => void;
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* ← the state `SqliteDatabase::onCriticalError` reports and
|
|
161
|
+
* `observedCriticalError()` latches.
|
|
162
|
+
*
|
|
163
|
+
* Raised when SQLite has rolled back an open transaction on its own. Upstream
|
|
164
|
+
* hands this to `ActorSqlite`, which treats it as fatal; §1.6 is why — a
|
|
165
|
+
* storage failure this severe destroys the object rather than being survived.
|
|
166
|
+
* Until `io/actor-sqlite.ts` wires it to `onBroken`, latching it and refusing
|
|
167
|
+
* every subsequent statement is what keeps a caller from reading through a
|
|
168
|
+
* cache that is knowingly wrong.
|
|
169
|
+
*/
|
|
170
|
+
export declare class SqliteCriticalError extends Error {
|
|
171
|
+
readonly name = "SqliteCriticalError";
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* ← `SqliteDatabase::ResetListener`.
|
|
175
|
+
*
|
|
176
|
+
* Upstream's is a base class whose constructor registers and whose destructor
|
|
177
|
+
* unregisters. JS has neither, so registration is the explicit
|
|
178
|
+
* `db.addResetListener(this)` call — the same translation Section 1 applied to
|
|
179
|
+
* every kj destructor.
|
|
180
|
+
*/
|
|
181
|
+
export interface ResetListener {
|
|
182
|
+
/** Called before the database is actually reset. */
|
|
183
|
+
beforeSqliteReset(): void;
|
|
184
|
+
}
|
|
185
|
+
/** ← `SqliteDatabase::Query::isNull(uint column)`. */
|
|
186
|
+
export declare function isNull(row: readonly unknown[], column: number): boolean;
|
|
187
|
+
/** ← `SqliteDatabase::Query::getBlob(uint column)`. Fails closed on any other column type. */
|
|
188
|
+
export declare function getBlob(row: readonly unknown[], column: number): Uint8Array;
|
|
189
|
+
/** ← `SqliteDatabase::Query::getText(uint column)`. Fails closed on any other column type. */
|
|
190
|
+
export declare function getText(row: readonly unknown[], column: number): string;
|
|
191
|
+
/**
|
|
192
|
+
* ← `SqliteDatabase::Query::getInt64(uint column)`.
|
|
193
|
+
*
|
|
194
|
+
* Narrowed to a safe integer rather than upstream's `int64_t`: a JS number
|
|
195
|
+
* cannot carry the full range, and a silently-rounded row id or alarm time is
|
|
196
|
+
* exactly the kind of corruption this layer must not produce.
|
|
197
|
+
*/
|
|
198
|
+
export declare function getInt64(row: readonly unknown[], column: number): number;
|
|
199
|
+
/**
|
|
200
|
+
* ← `SqliteDatabase`, restricted to the members `sqlite-kv` and
|
|
201
|
+
* `sqlite-metadata` actually call.
|
|
202
|
+
*
|
|
203
|
+
* The one piece of real machinery here is the transaction/savepoint stack that
|
|
204
|
+
* `onRollback()` needs. Upstream learns of a `BEGIN` / `SAVEPOINT` / `COMMIT` /
|
|
205
|
+
* `RELEASE` / `ROLLBACK` from the SQLite authorizer while the statement is
|
|
206
|
+
* being compiled (`prepareSql` fills a `ParseContext::stateChange`); we have no
|
|
207
|
+
* authorizer, so the statement text is the only source. `applyChange` below is
|
|
208
|
+
* a line-for-line port of upstream's; only where the `StateChange` comes from
|
|
209
|
+
* differs.
|
|
210
|
+
*/
|
|
211
|
+
export declare class SqliteDatabase {
|
|
212
|
+
#private;
|
|
213
|
+
constructor(backend: SqlDatabase);
|
|
214
|
+
/**
|
|
215
|
+
* Invokes the given callback whenever a query begins which may write to the
|
|
216
|
+
* database. The callback is called just before executing the query.
|
|
217
|
+
*
|
|
218
|
+
* Durable Objects uses this to automatically begin a transaction and close the
|
|
219
|
+
* output gate.
|
|
220
|
+
*
|
|
221
|
+
* Note that the write callback is NOT called before (or at any point during) a
|
|
222
|
+
* `reset()`. Use the `ResetListener` mechanism for that case.
|
|
223
|
+
*/
|
|
224
|
+
onWrite(callback: (allowUnconfirmed: boolean) => void): void;
|
|
225
|
+
/**
|
|
226
|
+
* Invokes the given callback when a "critical error" causes an automatic
|
|
227
|
+
* rollback during a transaction.
|
|
228
|
+
*
|
|
229
|
+
* See: https://www.sqlite.org/lang_transaction.html#response_to_errors_within_a_transaction
|
|
230
|
+
*
|
|
231
|
+
* Upstream passes `(errorMessage, maybeException)` and lets the caller build
|
|
232
|
+
* the exception; `#checkForAutoRollback` has already built one by the time it
|
|
233
|
+
* can tell a rollback happened, so the callback receives that.
|
|
234
|
+
*/
|
|
235
|
+
onCriticalError(callback: (exception: SqliteCriticalError) => void): void;
|
|
236
|
+
/**
|
|
237
|
+
* Invoke the onWrite() callback.
|
|
238
|
+
*
|
|
239
|
+
* "This is useful when the caller is about to execute a statement which SQLite
|
|
240
|
+
* considers read-only, but needs to be considered a write for our purposes. In
|
|
241
|
+
* particular, we use the onWrite callback to start automatic transactions, and
|
|
242
|
+
* we use the SAVEPOINT statement to implement explicit transactions. For
|
|
243
|
+
* synchronous transactions, the explicit transaction needs to be nested inside
|
|
244
|
+
* the automatic transaction, so we need to force an auto-transaction to start
|
|
245
|
+
* before the SAVEPOINT."
|
|
246
|
+
*/
|
|
247
|
+
notifyWrite(allowUnconfirmed?: boolean): void;
|
|
248
|
+
/** ← `SqliteDatabase::run`, in both its bare and its `QueryOptions` form. */
|
|
249
|
+
run(sql: string, ...bindings: SqlValue[]): SqlResult;
|
|
250
|
+
run(options: QueryOptions, sql: string, ...bindings: SqlValue[]): SqlResult;
|
|
251
|
+
/** ← `SqliteDatabase::ingestSql`: execute complete statements, retain the partial tail. */
|
|
252
|
+
ingest(sql: string, regulate?: (sql: string) => void): SqlIngestResult;
|
|
253
|
+
/**
|
|
254
|
+
* ← `SqliteDatabase::observedCriticalError()`. The named state
|
|
255
|
+
* `io/actor-sqlite.ts` wires to `onBroken`, so it does not have to re-derive
|
|
256
|
+
* the condition from an exception it caught.
|
|
257
|
+
*/
|
|
258
|
+
observedCriticalError(): SqliteCriticalError | undefined;
|
|
259
|
+
/**
|
|
260
|
+
* The guard for any read this package serves from a cache rather than from a
|
|
261
|
+
* statement. Those are the only paths a latched critical error would not
|
|
262
|
+
* already stop, and they are exactly the paths whose answer is wrong once
|
|
263
|
+
* SQLite has rolled back underneath them.
|
|
264
|
+
*/
|
|
265
|
+
assertUsable(): void;
|
|
266
|
+
get databaseSize(): number;
|
|
267
|
+
/**
|
|
268
|
+
* ← `SqliteDatabase::onRollback`.
|
|
269
|
+
*
|
|
270
|
+
* "Register a callback which shall be called if the current transaction is
|
|
271
|
+
* rolled back. If the current transaction commits, then the callback is
|
|
272
|
+
* discarded without invoking it. [...] When a rollback occurs, callbacks are
|
|
273
|
+
* invoked in the reverse of the order in which they were registered."
|
|
274
|
+
*
|
|
275
|
+
* With nothing open there is nothing that can roll back, so the callback is
|
|
276
|
+
* dropped — upstream's `if (inTransaction || !savepoints.empty())`.
|
|
277
|
+
*/
|
|
278
|
+
onRollback(callback: () => void): void;
|
|
279
|
+
addResetListener(listener: ResetListener): void;
|
|
280
|
+
removeResetListener(listener: ResetListener): void;
|
|
281
|
+
/** ← `SqliteDatabase::reset()`. */
|
|
282
|
+
reset(): void;
|
|
283
|
+
close(): void;
|
|
284
|
+
}
|
|
285
|
+
type SqliteSchemaDatabase = Pick<SqlDatabase, "exec"> | Pick<SqliteDatabase, "run">;
|
|
286
|
+
/**
|
|
287
|
+
* Returns whether a runtime-owned table exists, and refuses any present shape
|
|
288
|
+
* other than the one this release writes.
|
|
289
|
+
*/
|
|
290
|
+
export declare function hasCurrentSqliteTable(db: SqliteSchemaDatabase, name: string, createSql: string): boolean;
|
|
291
|
+
export {};
|
package/package.json
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@mcp-b/do-runtime",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Cloudflare's Durable Object runtime (workerd), ported to TypeScript: actors with input/output gates, SQLite storage, facets and alarms, running in the browser and in Node.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"actors",
|
|
7
|
+
"browser",
|
|
8
|
+
"cloudflare",
|
|
9
|
+
"durable-objects",
|
|
10
|
+
"opfs",
|
|
11
|
+
"sqlite",
|
|
12
|
+
"typescript",
|
|
13
|
+
"workerd"
|
|
14
|
+
],
|
|
15
|
+
"homepage": "https://github.com/WebMCP-org/do-runtime#readme",
|
|
16
|
+
"bugs": {
|
|
17
|
+
"url": "https://github.com/WebMCP-org/do-runtime/issues"
|
|
18
|
+
},
|
|
19
|
+
"license": "FSL-1.1-MIT",
|
|
20
|
+
"author": "Kukumis, Inc.",
|
|
21
|
+
"repository": {
|
|
22
|
+
"type": "git",
|
|
23
|
+
"url": "git+https://github.com/WebMCP-org/do-runtime.git"
|
|
24
|
+
},
|
|
25
|
+
"type": "module",
|
|
26
|
+
"types": "./dist/src/index.d.ts",
|
|
27
|
+
"files": [
|
|
28
|
+
"dist",
|
|
29
|
+
"CHANGELOG.md",
|
|
30
|
+
"LICENSE",
|
|
31
|
+
"LICENSE.workerd",
|
|
32
|
+
"NOTICE",
|
|
33
|
+
"README.md"
|
|
34
|
+
],
|
|
35
|
+
"publishConfig": {
|
|
36
|
+
"access": "public",
|
|
37
|
+
"registry": "https://registry.npmjs.org/"
|
|
38
|
+
},
|
|
39
|
+
"exports": {
|
|
40
|
+
".": {
|
|
41
|
+
"types": "./dist/src/index.d.ts",
|
|
42
|
+
"import": "./dist/index.js"
|
|
43
|
+
},
|
|
44
|
+
"./server/alarm-scheduler": {
|
|
45
|
+
"types": "./dist/src/server/alarm-scheduler.d.ts",
|
|
46
|
+
"import": "./dist/server/alarm-scheduler.js"
|
|
47
|
+
},
|
|
48
|
+
"./backends/sqlite-wasm": {
|
|
49
|
+
"types": "./dist/backends/sqlite-wasm.d.ts",
|
|
50
|
+
"import": "./dist/backends/sqlite-wasm.js"
|
|
51
|
+
},
|
|
52
|
+
"./backends/node-sqlite": {
|
|
53
|
+
"types": "./dist/backends/node-sqlite.d.ts",
|
|
54
|
+
"import": "./dist/backends/node-sqlite.js"
|
|
55
|
+
},
|
|
56
|
+
"./cloudflare-workers": {
|
|
57
|
+
"types": "./dist/src/api/cloudflare-workers.d.ts",
|
|
58
|
+
"import": "./dist/cloudflare-workers.js"
|
|
59
|
+
},
|
|
60
|
+
"./conformance": {
|
|
61
|
+
"types": "./dist/conformance/host.d.ts",
|
|
62
|
+
"import": "./dist/conformance.js"
|
|
63
|
+
},
|
|
64
|
+
"./package.json": "./package.json"
|
|
65
|
+
},
|
|
66
|
+
"dependencies": {
|
|
67
|
+
"@ungap/structured-clone": "1.3.3",
|
|
68
|
+
"capnweb": "0.10.0"
|
|
69
|
+
},
|
|
70
|
+
"devDependencies": {
|
|
71
|
+
"@arethetypeswrong/cli": "0.18.5",
|
|
72
|
+
"@changesets/cli": "^2.29.8",
|
|
73
|
+
"@cloudflare/vitest-pool-workers": "^0.18.8",
|
|
74
|
+
"@cloudflare/workers-types": "5.20260820.1",
|
|
75
|
+
"@sqlite.org/sqlite-wasm": "3.53.0-build1",
|
|
76
|
+
"@types/node": "^26.1.2",
|
|
77
|
+
"@types/ungap__structured-clone": "1.2.0",
|
|
78
|
+
"@vitest/browser-playwright": "4.1.10",
|
|
79
|
+
"playwright": "1.61.1",
|
|
80
|
+
"publint": "0.3.23",
|
|
81
|
+
"typescript": "^5.9.3",
|
|
82
|
+
"vite": "^8.1.5",
|
|
83
|
+
"vitest": "4.1.10",
|
|
84
|
+
"workerd": "1.20260820.1",
|
|
85
|
+
"wrangler": "^4.114.0"
|
|
86
|
+
},
|
|
87
|
+
"engines": {
|
|
88
|
+
"node": ">=24.11.0"
|
|
89
|
+
},
|
|
90
|
+
"scripts": {
|
|
91
|
+
"build": "pnpm build:package",
|
|
92
|
+
"typecheck": "pnpm build:package && tsc -b tsconfig.json && tsc -p conformance/tsconfig.json && tsc -p examples/extension/tsconfig.page.json && tsc -p examples/extension/tsconfig.worker.json && tsc -p examples/vibe-platform/tsconfig.page.json && tsc -p examples/vibe-platform/tsconfig.worker.json",
|
|
93
|
+
"test": "pnpm test:unit && pnpm test:conformance",
|
|
94
|
+
"examples:build": "pnpm build:package && pnpm --filter \"do-runtime-example-*\" build",
|
|
95
|
+
"test:examples": "pnpm build:package && node examples/extension/scripts/e2e.mjs && node examples/vibe-platform/scripts/e2e.mjs",
|
|
96
|
+
"test:unit": "vitest run --config vitest.unit.config.ts",
|
|
97
|
+
"test:conformance": "pnpm test:conformance-workerd && pnpm test:conformance-node && pnpm test:conformance-browser",
|
|
98
|
+
"test:conformance-workerd": "vitest run --config conformance/workerd/vitest.config.ts",
|
|
99
|
+
"test:conformance-node": "vitest run --config conformance/node/vitest.config.ts",
|
|
100
|
+
"test:conformance-browser": "vitest run --config conformance/browser/vitest.config.ts",
|
|
101
|
+
"check:oracle": "node scripts/check-workerd-oracle.mjs",
|
|
102
|
+
"check:package": "pnpm build:package && publint && attw --pack . --profile esm-only && node scripts/check-package.mjs",
|
|
103
|
+
"build:package": "node scripts/build-package.mjs && tsc -p tsconfig.publish.json && node scripts/fix-declaration-imports.mjs",
|
|
104
|
+
"changeset": "changeset",
|
|
105
|
+
"changeset:version": "changeset version",
|
|
106
|
+
"changeset:publish": "pnpm check:package && changeset publish",
|
|
107
|
+
"publish:dry": "pnpm publish --access public --dry-run",
|
|
108
|
+
"bench:node": "vitest run --config conformance/bench/vitest.node.config.ts",
|
|
109
|
+
"bench:browser": "vitest run --config conformance/bench/vitest.browser.config.ts"
|
|
110
|
+
}
|
|
111
|
+
}
|