reflectdb 0.1.2 → 0.2.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/README.md +483 -17
- package/dist/cjs/client/index.cjs +0 -1
- package/dist/cjs/client/storage/indexeddb.cjs +0 -1
- package/dist/cjs/core/index.cjs +0 -1
- package/dist/cjs/htmx/index.cjs +1720 -0
- package/dist/cjs/htmx/index.d.cts +760 -0
- package/dist/cjs/react/index.cjs +0 -1
- package/dist/cjs/server/drizzle.cjs +15 -4
- package/dist/cjs/server/ephemeral/index.cjs +0 -1
- package/dist/cjs/server/ephemeral/redis.cjs +0 -1
- package/dist/cjs/server/index.cjs +34 -13
- package/dist/cjs/server/index.d.cts +14 -0
- package/dist/cjs/server/storage/object/index.cjs +2284 -0
- package/dist/cjs/server/storage/object/index.d.cts +578 -0
- package/dist/cjs/svelte/index.cjs +0 -1
- package/dist/cjs/transport/bun-ws.cjs +0 -1
- package/dist/cjs/transport/polling.cjs +0 -1
- package/dist/cjs/transport/sse.cjs +52 -2
- package/dist/cjs/transport/sse.d.cts +34 -0
- package/dist/cjs/transport/ws.cjs +0 -1
- package/dist/cjs/vanilla/index.cjs +0 -1
- package/dist/client/index.js +1 -1
- package/dist/client/storage/indexeddb.js +1 -1
- package/dist/core/index.js +1 -1
- package/dist/htmx/index.d.ts +760 -0
- package/dist/htmx/index.js +297 -0
- package/dist/react/index.js +1 -1
- package/dist/server/drizzle.js +3 -2
- package/dist/server/ephemeral/index.js +1 -1
- package/dist/server/ephemeral/redis.js +1 -1
- package/dist/server/index.d.ts +14 -0
- package/dist/server/index.js +19 -6
- package/dist/server/storage/object/index.d.ts +578 -0
- package/dist/server/storage/object/index.js +2232 -0
- package/dist/shared/{esm-z1xse19c.js → esm-5ahpq25j.js} +4 -4
- package/dist/shared/esm-dcs8qa5n.js +263 -0
- package/dist/shared/esm-f11s9zpb.js +15 -0
- package/dist/shared/esm-g5h4a88j.js +9 -0
- package/dist/shared/{esm-ck88h30s.js → esm-xtkhzxg2.js} +1 -1
- package/dist/svelte/index.js +1 -1
- package/dist/transport/bun-ws.js +1 -1
- package/dist/transport/polling.js +1 -1
- package/dist/transport/sse.d.ts +34 -0
- package/dist/transport/sse.js +53 -2
- package/dist/transport/ws.js +1 -1
- package/dist/vanilla/index.js +5 -261
- package/package.json +26 -3
- package/dist/shared/esm-k7kedp3y.js +0 -4
package/dist/cjs/react/index.cjs
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
var import_node_module = require("node:module");
|
|
2
1
|
var __defProp = Object.defineProperty;
|
|
3
2
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -45,7 +44,20 @@ __export(exports_drizzle, {
|
|
|
45
44
|
drizzleTxAtomic: () => drizzleTxAtomic
|
|
46
45
|
});
|
|
47
46
|
module.exports = __toCommonJS(exports_drizzle);
|
|
48
|
-
|
|
47
|
+
|
|
48
|
+
// src/server/node-require.ts
|
|
49
|
+
var cached;
|
|
50
|
+
function nodeRequire(id) {
|
|
51
|
+
if (!cached) {
|
|
52
|
+
const proc = globalThis.process;
|
|
53
|
+
const mod = proc?.getBuiltinModule?.("node:module");
|
|
54
|
+
if (!mod?.createRequire) {
|
|
55
|
+
throw new Error(`Cannot resolve "${id}": this runtime has no CommonJS resolver (process.getBuiltinModule is unavailable). reflectdb requires Node >= 22.3 or Bun >= 1.1.30 on the server.`);
|
|
56
|
+
}
|
|
57
|
+
cached = mod.createRequire(module.filename);
|
|
58
|
+
}
|
|
59
|
+
return cached(id);
|
|
60
|
+
}
|
|
49
61
|
|
|
50
62
|
// src/server/factory.ts
|
|
51
63
|
function getByDottedPath(root, path) {
|
|
@@ -272,12 +284,11 @@ function defineTable(adapter, opts = {}) {
|
|
|
272
284
|
}
|
|
273
285
|
|
|
274
286
|
// src/server/drizzle.ts
|
|
275
|
-
var requireFn = import_node_module2.createRequire(module.filename);
|
|
276
287
|
var cachedDrizzle;
|
|
277
288
|
function loadDrizzleSync() {
|
|
278
289
|
if (cachedDrizzle === undefined) {
|
|
279
290
|
try {
|
|
280
|
-
const mod =
|
|
291
|
+
const mod = nodeRequire("drizzle-orm");
|
|
281
292
|
cachedDrizzle = { eq: mod.eq, sql: mod.sql, getTableName: mod.getTableName };
|
|
282
293
|
} catch {
|
|
283
294
|
cachedDrizzle = null;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
var import_node_module = require("node:module");
|
|
2
1
|
var __defProp = Object.defineProperty;
|
|
3
2
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -111,7 +110,20 @@ __export(exports_drizzle, {
|
|
|
111
110
|
drizzleTxAtomic: () => drizzleTxAtomic
|
|
112
111
|
});
|
|
113
112
|
module.exports = __toCommonJS(exports_drizzle);
|
|
114
|
-
|
|
113
|
+
|
|
114
|
+
// src/server/node-require.ts
|
|
115
|
+
var cached;
|
|
116
|
+
function nodeRequire(id) {
|
|
117
|
+
if (!cached) {
|
|
118
|
+
const proc = globalThis.process;
|
|
119
|
+
const mod = proc?.getBuiltinModule?.("node:module");
|
|
120
|
+
if (!mod?.createRequire) {
|
|
121
|
+
throw new Error(`Cannot resolve "${id}": this runtime has no CommonJS resolver (process.getBuiltinModule is unavailable). reflectdb requires Node >= 22.3 or Bun >= 1.1.30 on the server.`);
|
|
122
|
+
}
|
|
123
|
+
cached = mod.createRequire(module.filename);
|
|
124
|
+
}
|
|
125
|
+
return cached(id);
|
|
126
|
+
}
|
|
115
127
|
|
|
116
128
|
// src/server/factory.ts
|
|
117
129
|
function getByDottedPath(root, path) {
|
|
@@ -338,12 +350,11 @@ function defineTable(adapter, opts = {}) {
|
|
|
338
350
|
}
|
|
339
351
|
|
|
340
352
|
// src/server/drizzle.ts
|
|
341
|
-
var requireFn = import_node_module2.createRequire(module.filename);
|
|
342
353
|
var cachedDrizzle;
|
|
343
354
|
function loadDrizzleSync() {
|
|
344
355
|
if (cachedDrizzle === undefined) {
|
|
345
356
|
try {
|
|
346
|
-
const mod =
|
|
357
|
+
const mod = nodeRequire("drizzle-orm");
|
|
347
358
|
cachedDrizzle = { eq: mod.eq, sql: mod.sql, getTableName: mod.getTableName };
|
|
348
359
|
} catch {
|
|
349
360
|
cachedDrizzle = null;
|
|
@@ -1664,9 +1675,9 @@ class OpProcessor {
|
|
|
1664
1675
|
return { freshOpIds, rows };
|
|
1665
1676
|
}
|
|
1666
1677
|
async readRow(table, rowId, batchCtx) {
|
|
1667
|
-
const
|
|
1668
|
-
if (
|
|
1669
|
-
return
|
|
1678
|
+
const cached2 = batchCtx?.rows.get(OpProcessor.rowKey(table, rowId));
|
|
1679
|
+
if (cached2)
|
|
1680
|
+
return cached2;
|
|
1670
1681
|
if (!this.storage)
|
|
1671
1682
|
return { row: null, rowHlc: null, colClocks: {} };
|
|
1672
1683
|
const existing = await this.storage.getRow(table, rowId);
|
|
@@ -2516,6 +2527,18 @@ class MessageHandler {
|
|
|
2516
2527
|
storage = null;
|
|
2517
2528
|
minSchemaVersion = 0;
|
|
2518
2529
|
messageQueues = new Map;
|
|
2530
|
+
async whenIdle(clientId) {
|
|
2531
|
+
for (let i = 0;i < 100; i++) {
|
|
2532
|
+
const queue = this.messageQueues.get(clientId);
|
|
2533
|
+
if (!queue)
|
|
2534
|
+
return;
|
|
2535
|
+
await queue.catch(() => {
|
|
2536
|
+
return;
|
|
2537
|
+
});
|
|
2538
|
+
if (this.messageQueues.get(clientId) === queue)
|
|
2539
|
+
return;
|
|
2540
|
+
}
|
|
2541
|
+
}
|
|
2519
2542
|
resultCache = new ResultCache;
|
|
2520
2543
|
broadcast;
|
|
2521
2544
|
ops;
|
|
@@ -3090,11 +3113,11 @@ class MessageHandler {
|
|
|
3090
3113
|
return;
|
|
3091
3114
|
if (this.authCallback) {
|
|
3092
3115
|
try {
|
|
3093
|
-
const
|
|
3116
|
+
const cached2 = this.authCache.get(message.token);
|
|
3094
3117
|
let auth;
|
|
3095
3118
|
const now = Date.now();
|
|
3096
|
-
if (
|
|
3097
|
-
auth =
|
|
3119
|
+
if (cached2 && cached2.expiresAt > now) {
|
|
3120
|
+
auth = cached2.auth;
|
|
3098
3121
|
} else {
|
|
3099
3122
|
const req = new Request("https://sync/ops", {
|
|
3100
3123
|
headers: { authorization: `Bearer ${message.token}` }
|
|
@@ -3900,11 +3923,9 @@ function parseDuration(str) {
|
|
|
3900
3923
|
init_types();
|
|
3901
3924
|
|
|
3902
3925
|
// src/server/storage/sqlite.ts
|
|
3903
|
-
var import_node_module3 = require("node:module");
|
|
3904
|
-
var requireFn2 = import_node_module3.createRequire(module.filename);
|
|
3905
3926
|
function loadDatabase() {
|
|
3906
3927
|
try {
|
|
3907
|
-
return
|
|
3928
|
+
return nodeRequire("bun:sqlite").Database;
|
|
3908
3929
|
} catch {
|
|
3909
3930
|
throw new Error("createSqliteStorage requires the Bun runtime (bun:sqlite is unavailable). Use createPostgresStorage on Node.");
|
|
3910
3931
|
}
|
|
@@ -769,6 +769,20 @@ declare class MessageHandler<TAuth extends AuthContext = AuthContext> {
|
|
|
769
769
|
private storage;
|
|
770
770
|
private minSchemaVersion;
|
|
771
771
|
private messageQueues;
|
|
772
|
+
/**
|
|
773
|
+
* Resolves once every message queued for `clientId` has finished processing.
|
|
774
|
+
*
|
|
775
|
+
* Messages are handled on a per-client serial queue, and `onMessage` returns
|
|
776
|
+
* before that work settles — fine for a long-lived connection, where replies
|
|
777
|
+
* stream out whenever they are ready. A serverless HTTP handler has no such
|
|
778
|
+
* luxury: it must know when the replies to the request it is holding exist,
|
|
779
|
+
* or it returns an empty body and the client hangs. See the SSE transport's
|
|
780
|
+
* `serverless` mode.
|
|
781
|
+
*
|
|
782
|
+
* Never rejects: a failed message is the caller's concern via its own reply,
|
|
783
|
+
* not this barrier's.
|
|
784
|
+
*/
|
|
785
|
+
whenIdle(clientId: string): Promise<void>;
|
|
772
786
|
private resultCache;
|
|
773
787
|
private broadcast;
|
|
774
788
|
private ops;
|