orez-lite 0.9.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +12 -0
- package/dist/browser/generated/sqlite3-browser.wasm +0 -0
- package/dist/browser/generated/sync_wasm.js +922 -0
- package/dist/browser/generated/sync_wasm_bg.wasm +0 -0
- package/dist/browser/host.d.ts +10 -0
- package/dist/browser/host.d.ts.map +1 -0
- package/dist/browser/host.js +496 -0
- package/dist/browser/host.js.map +1 -0
- package/dist/browser/idb-snapshot.d.ts +11 -0
- package/dist/browser/idb-snapshot.d.ts.map +1 -0
- package/dist/browser/idb-snapshot.js +122 -0
- package/dist/browser/idb-snapshot.js.map +1 -0
- package/dist/browser/index.d.ts +5 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +5 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/message-port.d.ts +7 -0
- package/dist/browser/message-port.d.ts.map +1 -0
- package/dist/browser/message-port.js +188 -0
- package/dist/browser/message-port.js.map +1 -0
- package/dist/browser/sqlite-adapter.d.ts +53 -0
- package/dist/browser/sqlite-adapter.d.ts.map +1 -0
- package/dist/browser/sqlite-adapter.js +126 -0
- package/dist/browser/sqlite-adapter.js.map +1 -0
- package/dist/browser/types.d.ts +52 -0
- package/dist/browser/types.d.ts.map +1 -0
- package/dist/browser/types.js +2 -0
- package/dist/browser/types.js.map +1 -0
- package/dist/cf-deploy/bundle.d.ts +18 -0
- package/dist/cf-deploy/bundle.d.ts.map +1 -0
- package/dist/cf-deploy/bundle.js +273 -0
- package/dist/cf-deploy/bundle.js.map +1 -0
- package/dist/cf-deploy/config.d.ts +12 -0
- package/dist/cf-deploy/config.d.ts.map +1 -0
- package/dist/cf-deploy/config.js +11 -0
- package/dist/cf-deploy/config.js.map +1 -0
- package/dist/cf-deploy/index.d.ts +10 -0
- package/dist/cf-deploy/index.d.ts.map +1 -0
- package/dist/cf-deploy/index.js +12 -0
- package/dist/cf-deploy/index.js.map +1 -0
- package/dist/cf-deploy/leaves.d.ts +8 -0
- package/dist/cf-deploy/leaves.d.ts.map +1 -0
- package/dist/cf-deploy/leaves.js +66 -0
- package/dist/cf-deploy/leaves.js.map +1 -0
- package/dist/cf-deploy/migration.d.ts +27 -0
- package/dist/cf-deploy/migration.d.ts.map +1 -0
- package/dist/cf-deploy/migration.js +734 -0
- package/dist/cf-deploy/migration.js.map +1 -0
- package/dist/cf-deploy/nativeMigrations.d.ts +24 -0
- package/dist/cf-deploy/nativeMigrations.d.ts.map +1 -0
- package/dist/cf-deploy/nativeMigrations.js +185 -0
- package/dist/cf-deploy/nativeMigrations.js.map +1 -0
- package/dist/cf-deploy/prune.d.ts +14 -0
- package/dist/cf-deploy/prune.d.ts.map +1 -0
- package/dist/cf-deploy/prune.js +235 -0
- package/dist/cf-deploy/prune.js.map +1 -0
- package/dist/cf-deploy/readiness.d.ts +11 -0
- package/dist/cf-deploy/readiness.d.ts.map +1 -0
- package/dist/cf-deploy/readiness.js +56 -0
- package/dist/cf-deploy/readiness.js.map +1 -0
- package/dist/cf-deploy/sources.d.ts +3 -0
- package/dist/cf-deploy/sources.d.ts.map +1 -0
- package/dist/cf-deploy/sources.js +24 -0
- package/dist/cf-deploy/sources.js.map +1 -0
- package/dist/cf-deploy/wrangler.d.ts +9 -0
- package/dist/cf-deploy/wrangler.d.ts.map +1 -0
- package/dist/cf-deploy/wrangler.js +48 -0
- package/dist/cf-deploy/wrangler.js.map +1 -0
- package/dist/cf-do/application-sql.d.ts +49 -0
- package/dist/cf-do/application-sql.d.ts.map +1 -0
- package/dist/cf-do/application-sql.js +124 -0
- package/dist/cf-do/application-sql.js.map +1 -0
- package/dist/cf-do/cdc.d.ts +155 -0
- package/dist/cf-do/cdc.d.ts.map +1 -0
- package/dist/cf-do/cdc.js +723 -0
- package/dist/cf-do/cdc.js.map +1 -0
- package/dist/cf-do/cursor-pull.d.ts +27 -0
- package/dist/cf-do/cursor-pull.d.ts.map +1 -0
- package/dist/cf-do/cursor-pull.js +78 -0
- package/dist/cf-do/cursor-pull.js.map +1 -0
- package/dist/cf-do/lite-data-worker.d.ts +171 -0
- package/dist/cf-do/lite-data-worker.d.ts.map +1 -0
- package/dist/cf-do/lite-data-worker.js +685 -0
- package/dist/cf-do/lite-data-worker.js.map +1 -0
- package/dist/cf-do/namespace-backup.d.ts +85 -0
- package/dist/cf-do/namespace-backup.d.ts.map +1 -0
- package/dist/cf-do/namespace-backup.js +470 -0
- package/dist/cf-do/namespace-backup.js.map +1 -0
- package/dist/cf-do/row-undo.d.ts +36 -0
- package/dist/cf-do/row-undo.d.ts.map +1 -0
- package/dist/cf-do/row-undo.js +221 -0
- package/dist/cf-do/row-undo.js.map +1 -0
- package/dist/cf-do/tx-journal.d.ts +118 -0
- package/dist/cf-do/tx-journal.d.ts.map +1 -0
- package/dist/cf-do/tx-journal.js +717 -0
- package/dist/cf-do/tx-journal.js.map +1 -0
- package/dist/cf-do/watermark.d.ts +29 -0
- package/dist/cf-do/watermark.d.ts.map +1 -0
- package/dist/cf-do/watermark.js +105 -0
- package/dist/cf-do/watermark.js.map +1 -0
- package/dist/cf-do/worker.d.ts +282 -0
- package/dist/cf-do/worker.d.ts.map +1 -0
- package/dist/cf-do/worker.js +1999 -0
- package/dist/cf-do/worker.js.map +1 -0
- package/dist/client.d.ts +2 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +2 -0
- package/dist/client.js.map +1 -0
- package/dist/cloudflare-build.d.ts +9 -0
- package/dist/cloudflare-build.d.ts.map +1 -0
- package/dist/cloudflare-build.js +9 -0
- package/dist/cloudflare-build.js.map +1 -0
- package/dist/cloudflare-bun-wasm-loader.d.ts +2 -0
- package/dist/cloudflare-bun-wasm-loader.d.ts.map +1 -0
- package/dist/cloudflare-bun-wasm-loader.js +2 -0
- package/dist/cloudflare-bun-wasm-loader.js.map +1 -0
- package/dist/cloudflare-query-compiler.d.ts +2 -0
- package/dist/cloudflare-query-compiler.d.ts.map +1 -0
- package/dist/cloudflare-query-compiler.js +2 -0
- package/dist/cloudflare-query-compiler.js.map +1 -0
- package/dist/cloudflare-runtime.d.ts +15 -0
- package/dist/cloudflare-runtime.d.ts.map +1 -0
- package/dist/cloudflare-runtime.js +11 -0
- package/dist/cloudflare-runtime.js.map +1 -0
- package/dist/cloudflare-sync.d.ts +3 -0
- package/dist/cloudflare-sync.d.ts.map +1 -0
- package/dist/cloudflare-sync.js +3 -0
- package/dist/cloudflare-sync.js.map +1 -0
- package/dist/cloudflare-transaction-query.d.ts +2 -0
- package/dist/cloudflare-transaction-query.d.ts.map +1 -0
- package/dist/cloudflare-transaction-query.js +2 -0
- package/dist/cloudflare-transaction-query.js.map +1 -0
- package/dist/cloudflare-vite-wasm-loader.d.ts +2 -0
- package/dist/cloudflare-vite-wasm-loader.d.ts.map +1 -0
- package/dist/cloudflare-vite-wasm-loader.js +2 -0
- package/dist/cloudflare-vite-wasm-loader.js.map +1 -0
- package/dist/cloudflare.d.ts +3 -0
- package/dist/cloudflare.d.ts.map +1 -0
- package/dist/cloudflare.js +3 -0
- package/dist/cloudflare.js.map +1 -0
- package/dist/do-sql-tracking.d.ts +114 -0
- package/dist/do-sql-tracking.d.ts.map +1 -0
- package/dist/do-sql-tracking.js +280 -0
- package/dist/do-sql-tracking.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/wake.d.ts +22 -0
- package/dist/wake.d.ts.map +1 -0
- package/dist/wake.js +114 -0
- package/dist/wake.js.map +1 -0
- package/dist/worker/cf-do-shim.d.ts +53 -0
- package/dist/worker/cf-do-shim.d.ts.map +1 -0
- package/dist/worker/cf-do-shim.js +66 -0
- package/dist/worker/cf-do-shim.js.map +1 -0
- package/dist/zero-http/encrypted-column-codec.d.ts +46 -0
- package/dist/zero-http/encrypted-column-codec.d.ts.map +1 -0
- package/dist/zero-http/encrypted-column-codec.js +676 -0
- package/dist/zero-http/encrypted-column-codec.js.map +1 -0
- package/dist/zero-http/encrypted-column-conformance.d.ts +7 -0
- package/dist/zero-http/encrypted-column-conformance.d.ts.map +1 -0
- package/dist/zero-http/encrypted-column-conformance.js +161 -0
- package/dist/zero-http/encrypted-column-conformance.js.map +1 -0
- package/dist/zero-http/fixture-schema.d.ts +127 -0
- package/dist/zero-http/fixture-schema.d.ts.map +1 -0
- package/dist/zero-http/fixture-schema.js +56 -0
- package/dist/zero-http/fixture-schema.js.map +1 -0
- package/dist/zero-http/mount.d.ts +71 -0
- package/dist/zero-http/mount.d.ts.map +1 -0
- package/dist/zero-http/mount.js +594 -0
- package/dist/zero-http/mount.js.map +1 -0
- package/dist/zero-http/payload-codec.d.ts +91 -0
- package/dist/zero-http/payload-codec.d.ts.map +1 -0
- package/dist/zero-http/payload-codec.js +10 -0
- package/dist/zero-http/payload-codec.js.map +1 -0
- package/dist/zero-http/server.d.ts +16 -0
- package/dist/zero-http/server.d.ts.map +1 -0
- package/dist/zero-http/server.js +270 -0
- package/dist/zero-http/server.js.map +1 -0
- package/dist/zero-http/test-harness.d.ts +32 -0
- package/dist/zero-http/test-harness.d.ts.map +1 -0
- package/dist/zero-http/test-harness.js +77 -0
- package/dist/zero-http/test-harness.js.map +1 -0
- package/dist/zero-http/transport.d.ts +71 -0
- package/dist/zero-http/transport.d.ts.map +1 -0
- package/dist/zero-http/transport.js +1106 -0
- package/dist/zero-http/transport.js.map +1 -0
- package/package.json +116 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
const DATABASE_NAME = 'orez-sync-browser-host';
|
|
2
|
+
const DATABASE_VERSION = 1;
|
|
3
|
+
const STORE_NAME = 'snapshots';
|
|
4
|
+
const SNAPSHOT_FORMAT_VERSION = 1;
|
|
5
|
+
function requestResult(request) {
|
|
6
|
+
return new Promise((resolve, reject) => {
|
|
7
|
+
request.addEventListener('success', () => resolve(request.result), { once: true });
|
|
8
|
+
request.addEventListener('error', () => reject(request.error ?? new Error('IndexedDB request failed')), { once: true });
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
function transactionDone(transaction) {
|
|
12
|
+
return new Promise((resolve, reject) => {
|
|
13
|
+
transaction.addEventListener('complete', () => resolve(), { once: true });
|
|
14
|
+
transaction.addEventListener('abort', () => reject(transaction.error ?? new Error('IndexedDB transaction aborted')), { once: true });
|
|
15
|
+
transaction.addEventListener('error', () => reject(transaction.error ?? new Error('IndexedDB transaction failed')), { once: true });
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
async function openSnapshotDatabase() {
|
|
19
|
+
const request = indexedDB.open(DATABASE_NAME, DATABASE_VERSION);
|
|
20
|
+
request.addEventListener('upgradeneeded', () => {
|
|
21
|
+
if (!request.result.objectStoreNames.contains(STORE_NAME)) {
|
|
22
|
+
request.result.createObjectStore(STORE_NAME, { keyPath: 'storageKey' });
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
return requestResult(request);
|
|
26
|
+
}
|
|
27
|
+
export async function deleteBrowserSyncHostSnapshot(storageKey) {
|
|
28
|
+
if (!storageKey)
|
|
29
|
+
throw new TypeError('storageKey must not be empty');
|
|
30
|
+
const database = await openSnapshotDatabase();
|
|
31
|
+
try {
|
|
32
|
+
const transaction = database.transaction(STORE_NAME, 'readwrite');
|
|
33
|
+
transaction.objectStore(STORE_NAME).delete(storageKey);
|
|
34
|
+
await transactionDone(transaction);
|
|
35
|
+
}
|
|
36
|
+
finally {
|
|
37
|
+
database.close();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function validateSnapshot(value, storageKey) {
|
|
41
|
+
if (!value || typeof value !== 'object') {
|
|
42
|
+
throw new Error(`invalid browser database snapshot for ${storageKey}`);
|
|
43
|
+
}
|
|
44
|
+
const record = value;
|
|
45
|
+
if (record.storageKey !== storageKey) {
|
|
46
|
+
throw new Error(`browser database snapshot key mismatch for ${storageKey}`);
|
|
47
|
+
}
|
|
48
|
+
if (record.formatVersion !== SNAPSHOT_FORMAT_VERSION) {
|
|
49
|
+
throw new Error(`unsupported browser database snapshot format ${String(record.formatVersion)}`);
|
|
50
|
+
}
|
|
51
|
+
if (!Array.isArray(record.files)) {
|
|
52
|
+
throw new Error(`browser database snapshot has no files for ${storageKey}`);
|
|
53
|
+
}
|
|
54
|
+
const paths = new Set();
|
|
55
|
+
for (const file of record.files) {
|
|
56
|
+
if (!file ||
|
|
57
|
+
typeof file.path !== 'string' ||
|
|
58
|
+
!Number.isSafeInteger(file.size) ||
|
|
59
|
+
file.size < 0 ||
|
|
60
|
+
!(file.data instanceof ArrayBuffer) ||
|
|
61
|
+
file.size > file.data.byteLength ||
|
|
62
|
+
paths.has(file.path)) {
|
|
63
|
+
throw new Error(`invalid browser database snapshot file for ${storageKey}`);
|
|
64
|
+
}
|
|
65
|
+
paths.add(file.path);
|
|
66
|
+
}
|
|
67
|
+
return record;
|
|
68
|
+
}
|
|
69
|
+
export class IndexedDbSnapshotStore {
|
|
70
|
+
storageKey;
|
|
71
|
+
#database;
|
|
72
|
+
constructor(storageKey) {
|
|
73
|
+
this.storageKey = storageKey;
|
|
74
|
+
if (!storageKey)
|
|
75
|
+
throw new TypeError('storageKey must not be empty');
|
|
76
|
+
this.#database = openSnapshotDatabase();
|
|
77
|
+
}
|
|
78
|
+
async restore(module) {
|
|
79
|
+
const database = await this.#database;
|
|
80
|
+
const transaction = database.transaction(STORE_NAME, 'readonly');
|
|
81
|
+
const value = await requestResult(transaction.objectStore(STORE_NAME).get(this.storageKey));
|
|
82
|
+
await transactionDone(transaction);
|
|
83
|
+
if (value === undefined)
|
|
84
|
+
return false;
|
|
85
|
+
const snapshot = validateSnapshot(value, this.storageKey);
|
|
86
|
+
const files = {};
|
|
87
|
+
for (const file of snapshot.files) {
|
|
88
|
+
const data = new Uint8Array(file.data.slice(0));
|
|
89
|
+
files[file.path] = { data, size: file.size };
|
|
90
|
+
}
|
|
91
|
+
module._memfs.files = files;
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
async checkpoint(module) {
|
|
95
|
+
const files = Object.entries(module._memfs.files).map(([path, file]) => {
|
|
96
|
+
if (!Number.isSafeInteger(file.size) ||
|
|
97
|
+
file.size < 0 ||
|
|
98
|
+
file.size > file.data.length) {
|
|
99
|
+
throw new Error(`invalid Bedrock VFS file ${path}`);
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
path,
|
|
103
|
+
size: file.size,
|
|
104
|
+
data: file.data.slice(0, file.size).buffer,
|
|
105
|
+
};
|
|
106
|
+
});
|
|
107
|
+
const record = {
|
|
108
|
+
storageKey: this.storageKey,
|
|
109
|
+
formatVersion: SNAPSHOT_FORMAT_VERSION,
|
|
110
|
+
files,
|
|
111
|
+
};
|
|
112
|
+
const database = await this.#database;
|
|
113
|
+
const transaction = database.transaction(STORE_NAME, 'readwrite');
|
|
114
|
+
transaction.objectStore(STORE_NAME).put(record);
|
|
115
|
+
await transactionDone(transaction);
|
|
116
|
+
}
|
|
117
|
+
async close() {
|
|
118
|
+
;
|
|
119
|
+
(await this.#database).close();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=idb-snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idb-snapshot.js","sourceRoot":"","sources":["../../../sync-browser-host/src/idb-snapshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { createBrowserSyncHost } from './host.js';
|
|
2
|
+
export { deleteBrowserSyncHostSnapshot } from './idb-snapshot.js';
|
|
3
|
+
export { createBrowserSyncHostPortClient, serveBrowserSyncHostPort, } from './message-port.js';
|
|
4
|
+
export { visibility, type BrowserSyncHost, type BrowserSyncHostAssets, type BrowserSyncHostConfig, type BrowserSyncHostPortClient, type PullCaps, type SyncSql, type VisibilityConfig, type VisibilityExpression, type VisibilityFilter, type VisibilityOperand, type VisibilityValue, } from './types.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../sync-browser-host/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AACjD,OAAO,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAA;AACjE,OAAO,EACL,+BAA+B,EAC/B,wBAAwB,GACzB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,QAAQ,EACb,KAAK,OAAO,EACZ,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,eAAe,GACrB,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { createBrowserSyncHost } from './host.js';
|
|
2
|
+
export { deleteBrowserSyncHostSnapshot } from './idb-snapshot.js';
|
|
3
|
+
export { createBrowserSyncHostPortClient, serveBrowserSyncHostPort, } from './message-port.js';
|
|
4
|
+
export { visibility, } from './types.js';
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../sync-browser-host/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AACjD,OAAO,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAA;AACjE,OAAO,EACL,+BAA+B,EAC/B,wBAAwB,GACzB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,UAAU,GAYX,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { BrowserHostTestHooks } from './host.js';
|
|
2
|
+
import type { BrowserSyncHost, BrowserSyncHostPortClient } from './types.js';
|
|
3
|
+
import type { Schema } from '@rocicorp/zero';
|
|
4
|
+
export declare function serveBrowserSyncHostPortInternal<S extends Schema>(host: BrowserSyncHost<S>, port: MessagePort, hooks?: BrowserHostTestHooks): () => void;
|
|
5
|
+
export declare function serveBrowserSyncHostPort<S extends Schema>(host: BrowserSyncHost<S>, port: MessagePort): () => void;
|
|
6
|
+
export declare function createBrowserSyncHostPortClient(port: MessagePort): BrowserSyncHostPortClient;
|
|
7
|
+
//# sourceMappingURL=message-port.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-port.d.ts","sourceRoot":"","sources":["../../../sync-browser-host/src/message-port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAA6B,MAAM,WAAW,CAAA;AAChF,OAAO,KAAK,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAC5E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAkG5C,wBAAgB,gCAAgC,CAAC,CAAC,SAAS,MAAM,EAC/D,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,EACxB,IAAI,EAAE,WAAW,EACjB,KAAK,CAAC,EAAE,oBAAoB,GAC3B,MAAM,IAAI,CA8DZ;AAED,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,MAAM,EACvD,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,EACxB,IAAI,EAAE,WAAW,GAChB,MAAM,IAAI,CAEZ;AAED,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,WAAW,GAChB,yBAAyB,CAyE3B"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
function serializeError(error) {
|
|
2
|
+
if (error instanceof Error) {
|
|
3
|
+
return { name: error.name, message: error.message, stack: error.stack };
|
|
4
|
+
}
|
|
5
|
+
return { name: 'Error', message: String(error) };
|
|
6
|
+
}
|
|
7
|
+
async function serializeRequest(request) {
|
|
8
|
+
return {
|
|
9
|
+
url: request.url,
|
|
10
|
+
method: request.method,
|
|
11
|
+
headers: [...request.headers.entries()],
|
|
12
|
+
body: request.method === 'GET' || request.method === 'HEAD'
|
|
13
|
+
? null
|
|
14
|
+
: await request.arrayBuffer(),
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function deserializeRequest(request) {
|
|
18
|
+
return new Request(request.url, {
|
|
19
|
+
method: request.method,
|
|
20
|
+
headers: request.headers,
|
|
21
|
+
body: request.body,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
async function serializeResponse(response) {
|
|
25
|
+
return {
|
|
26
|
+
status: response.status,
|
|
27
|
+
statusText: response.statusText,
|
|
28
|
+
headers: [...response.headers.entries()],
|
|
29
|
+
body: await response.arrayBuffer(),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function deserializeResponse(response) {
|
|
33
|
+
return new Response(response.body, {
|
|
34
|
+
status: response.status,
|
|
35
|
+
statusText: response.statusText,
|
|
36
|
+
headers: response.headers,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
async function reachDuringDelivery(hooks) {
|
|
40
|
+
await hooks?.reach('during_response_delivery');
|
|
41
|
+
}
|
|
42
|
+
export function serveBrowserSyncHostPortInternal(host, port, hooks) {
|
|
43
|
+
let disconnected = false;
|
|
44
|
+
const unsubscribe = host.subscribe(() => {
|
|
45
|
+
if (!disconnected)
|
|
46
|
+
port.postMessage({ event: 'data-changed' });
|
|
47
|
+
});
|
|
48
|
+
const disconnect = () => {
|
|
49
|
+
if (disconnected)
|
|
50
|
+
return;
|
|
51
|
+
disconnected = true;
|
|
52
|
+
unsubscribe();
|
|
53
|
+
port.close();
|
|
54
|
+
};
|
|
55
|
+
port.addEventListener('message', (event) => {
|
|
56
|
+
const request = event.data;
|
|
57
|
+
if (!request || typeof request !== 'object' || typeof request.id !== 'number')
|
|
58
|
+
return;
|
|
59
|
+
if (request.operation === 'disconnect') {
|
|
60
|
+
disconnect();
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
void (async () => {
|
|
64
|
+
try {
|
|
65
|
+
let response;
|
|
66
|
+
if (request.operation === 'fetch') {
|
|
67
|
+
const result = await host.fetch(deserializeRequest(request.request));
|
|
68
|
+
response = {
|
|
69
|
+
id: request.id,
|
|
70
|
+
ok: true,
|
|
71
|
+
response: await serializeResponse(result),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
else if (request.operation === 'query') {
|
|
75
|
+
response = {
|
|
76
|
+
id: request.id,
|
|
77
|
+
ok: true,
|
|
78
|
+
value: await host.query(request.sql, request.params),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
response = {
|
|
83
|
+
id: request.id,
|
|
84
|
+
ok: true,
|
|
85
|
+
value: await host.exec(request.sql, request.params, request.metadata),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
await reachDuringDelivery(hooks);
|
|
89
|
+
if (!disconnected) {
|
|
90
|
+
const transfer = response.ok && response.response ? [response.response.body] : undefined;
|
|
91
|
+
port.postMessage(response, transfer ?? []);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
if (!disconnected) {
|
|
96
|
+
port.postMessage({
|
|
97
|
+
id: request.id,
|
|
98
|
+
ok: false,
|
|
99
|
+
error: serializeError(error),
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
})();
|
|
104
|
+
});
|
|
105
|
+
port.start();
|
|
106
|
+
return disconnect;
|
|
107
|
+
}
|
|
108
|
+
export function serveBrowserSyncHostPort(host, port) {
|
|
109
|
+
return serveBrowserSyncHostPortInternal(host, port);
|
|
110
|
+
}
|
|
111
|
+
export function createBrowserSyncHostPortClient(port) {
|
|
112
|
+
let nextID = 1;
|
|
113
|
+
let closed = false;
|
|
114
|
+
const pending = new Map();
|
|
115
|
+
const listeners = new Set();
|
|
116
|
+
port.addEventListener('message', (event) => {
|
|
117
|
+
const message = event.data;
|
|
118
|
+
if ('event' in message) {
|
|
119
|
+
for (const listener of listeners)
|
|
120
|
+
listener();
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
const promise = pending.get(message.id);
|
|
124
|
+
if (!promise)
|
|
125
|
+
return;
|
|
126
|
+
pending.delete(message.id);
|
|
127
|
+
if (message.ok) {
|
|
128
|
+
promise.resolve(message);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
const error = new Error(message.error.message);
|
|
132
|
+
error.name = message.error.name;
|
|
133
|
+
error.stack = message.error.stack;
|
|
134
|
+
promise.reject(error);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
port.start();
|
|
138
|
+
function send(request) {
|
|
139
|
+
if (closed)
|
|
140
|
+
return Promise.reject(new Error('browser sync host port is closed'));
|
|
141
|
+
const id = nextID++;
|
|
142
|
+
return new Promise((resolve, reject) => {
|
|
143
|
+
pending.set(id, { resolve, reject });
|
|
144
|
+
port.postMessage({ ...request, id });
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
async fetch(input, init) {
|
|
149
|
+
const request = input instanceof Request ? input : new Request(input, init);
|
|
150
|
+
const serialized = await serializeRequest(request);
|
|
151
|
+
const result = await send({ operation: 'fetch', request: serialized });
|
|
152
|
+
if (!result.ok || !result.response)
|
|
153
|
+
throw new Error('missing port response');
|
|
154
|
+
return deserializeResponse(result.response);
|
|
155
|
+
},
|
|
156
|
+
async query(sql, params = []) {
|
|
157
|
+
const result = await send({ operation: 'query', sql, params });
|
|
158
|
+
if (!result.ok)
|
|
159
|
+
throw new Error('unreachable');
|
|
160
|
+
return result.value;
|
|
161
|
+
},
|
|
162
|
+
async exec(sql, params = [], metadata) {
|
|
163
|
+
const result = await send({ operation: 'exec', sql, params, metadata });
|
|
164
|
+
if (!result.ok)
|
|
165
|
+
throw new Error('unreachable');
|
|
166
|
+
return result.value;
|
|
167
|
+
},
|
|
168
|
+
subscribe(listener) {
|
|
169
|
+
if (closed)
|
|
170
|
+
throw new Error('browser sync host port is closed');
|
|
171
|
+
listeners.add(listener);
|
|
172
|
+
return () => listeners.delete(listener);
|
|
173
|
+
},
|
|
174
|
+
close() {
|
|
175
|
+
if (closed)
|
|
176
|
+
return;
|
|
177
|
+
closed = true;
|
|
178
|
+
port.postMessage({ id: nextID++, operation: 'disconnect' });
|
|
179
|
+
port.close();
|
|
180
|
+
listeners.clear();
|
|
181
|
+
for (const promise of pending.values()) {
|
|
182
|
+
promise.reject(new Error('browser sync host port closed before response'));
|
|
183
|
+
}
|
|
184
|
+
pending.clear();
|
|
185
|
+
},
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=message-port.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-port.js","sourceRoot":"","sources":["../../../sync-browser-host/src/message-port.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { SyncSql } from './types.js';
|
|
2
|
+
import type { BedrockSqliteModule, Database } from 'bedrock-sqlite/browser';
|
|
3
|
+
import type { CompiledTransactionQueryPlan, TransactionQueryBudget } from 'orez-sync-cf-host/transaction-query';
|
|
4
|
+
import type { SqlWireValue, TransactionQueryFormat } from 'orez-sync-executor';
|
|
5
|
+
import type { ApplicationTransaction, ExecResult as SQLiteExecResult, SqlStatementMetadata } from 'orez-sync-executor';
|
|
6
|
+
export type WireValue = SqlWireValue;
|
|
7
|
+
export type WireRow = {
|
|
8
|
+
columns: string[];
|
|
9
|
+
values: WireValue[];
|
|
10
|
+
};
|
|
11
|
+
export interface JsSyncDb {
|
|
12
|
+
exec(sql: string, params: WireValue[]): void;
|
|
13
|
+
query(sql: string, params: WireValue[]): WireRow[];
|
|
14
|
+
}
|
|
15
|
+
export type MemfsFile = {
|
|
16
|
+
data: Uint8Array;
|
|
17
|
+
size: number;
|
|
18
|
+
};
|
|
19
|
+
export type BedrockBrowserModule = BedrockSqliteModule & {
|
|
20
|
+
_memfs: {
|
|
21
|
+
files: Record<string, MemfsFile>;
|
|
22
|
+
fds: Record<number, {
|
|
23
|
+
path: string;
|
|
24
|
+
pos: number;
|
|
25
|
+
}>;
|
|
26
|
+
nextFd: number;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
export declare function assertConsumerSql(sql: string): void;
|
|
30
|
+
/** The synchronous wire-value database boundary consumed by sync-wasm. */
|
|
31
|
+
export declare class BedrockSyncDb implements JsSyncDb {
|
|
32
|
+
#private;
|
|
33
|
+
constructor(db: Database);
|
|
34
|
+
exec(sql: string, params: WireValue[]): void;
|
|
35
|
+
query(sql: string, params: WireValue[]): WireRow[];
|
|
36
|
+
}
|
|
37
|
+
/** Synchronous application SQL used only while the host owns the operation. */
|
|
38
|
+
export declare class BedrockDirectSql implements SyncSql {
|
|
39
|
+
private readonly db;
|
|
40
|
+
constructor(db: Database);
|
|
41
|
+
exec(sql: string, params?: readonly unknown[], _metadata?: SqlStatementMetadata): SQLiteExecResult;
|
|
42
|
+
query<Row extends Record<string, unknown> = Record<string, unknown>>(sql: string, params?: readonly unknown[]): Row[];
|
|
43
|
+
}
|
|
44
|
+
export declare class BedrockMutatorSql implements ApplicationTransaction {
|
|
45
|
+
private readonly direct;
|
|
46
|
+
private readonly compileQuery;
|
|
47
|
+
private readonly queryBudget?;
|
|
48
|
+
constructor(direct: BedrockDirectSql, compileQuery: (ast: unknown, format: TransactionQueryFormat) => CompiledTransactionQueryPlan, queryBudget?: Partial<TransactionQueryBudget> | undefined);
|
|
49
|
+
exec(sql: string, params?: readonly unknown[], metadata?: SqlStatementMetadata): Promise<SQLiteExecResult>;
|
|
50
|
+
query<Row extends Record<string, unknown> = Record<string, unknown>>(sql: string, params?: readonly unknown[]): Promise<Row[]>;
|
|
51
|
+
queryAst<Result = unknown>(ast: unknown, format: TransactionQueryFormat, queryName?: string): Promise<Result>;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=sqlite-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-adapter.d.ts","sourceRoot":"","sources":["../../../sync-browser-host/src/sqlite-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { executeTransactionQueryPlan } from 'orez-sync-cf-host/transaction-query';
|
|
2
|
+
import { encodeSqlValue } from 'orez-sync-executor';
|
|
3
|
+
const TX_SQL = /^\s*(BEGIN|COMMIT|ROLLBACK|SAVEPOINT|RELEASE)(?=\s|;|$)/i;
|
|
4
|
+
const NUMBERED_PARAMETER = /\?[0-9]+/;
|
|
5
|
+
const MAX_SAFE = BigInt(Number.MAX_SAFE_INTEGER);
|
|
6
|
+
const MIN_SAFE = BigInt(Number.MIN_SAFE_INTEGER);
|
|
7
|
+
export function assertConsumerSql(sql) {
|
|
8
|
+
if (TX_SQL.test(sql)) {
|
|
9
|
+
throw new TypeError('transaction SQL is host-owned and forbidden');
|
|
10
|
+
}
|
|
11
|
+
if (NUMBERED_PARAMETER.test(sql)) {
|
|
12
|
+
throw new TypeError('numbered parameters are forbidden; use positional ? bindings');
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function decodeBinding(value) {
|
|
16
|
+
switch (value.kind) {
|
|
17
|
+
case 'null':
|
|
18
|
+
return null;
|
|
19
|
+
case 'integer': {
|
|
20
|
+
const exact = BigInt(value.value);
|
|
21
|
+
return exact >= MIN_SAFE && exact <= MAX_SAFE ? Number(exact) : exact;
|
|
22
|
+
}
|
|
23
|
+
case 'real':
|
|
24
|
+
case 'text':
|
|
25
|
+
return value.value;
|
|
26
|
+
case 'blob':
|
|
27
|
+
return Uint8Array.from(value.value);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function encodeResult(value) {
|
|
31
|
+
return encodeSqlValue(value);
|
|
32
|
+
}
|
|
33
|
+
class StatementCache {
|
|
34
|
+
db;
|
|
35
|
+
#statements = new Map();
|
|
36
|
+
constructor(db) {
|
|
37
|
+
this.db = db;
|
|
38
|
+
}
|
|
39
|
+
get(sql) {
|
|
40
|
+
let statement = this.#statements.get(sql);
|
|
41
|
+
if (!statement) {
|
|
42
|
+
statement = this.db.prepare(sql);
|
|
43
|
+
this.#statements.set(sql, statement);
|
|
44
|
+
}
|
|
45
|
+
return statement;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/** The synchronous wire-value database boundary consumed by sync-wasm. */
|
|
49
|
+
export class BedrockSyncDb {
|
|
50
|
+
#statements;
|
|
51
|
+
constructor(db) {
|
|
52
|
+
this.#statements = new StatementCache(db);
|
|
53
|
+
}
|
|
54
|
+
exec(sql, params) {
|
|
55
|
+
assertConsumerSql(sql);
|
|
56
|
+
this.#statements.get(sql).run(params.map(decodeBinding));
|
|
57
|
+
}
|
|
58
|
+
query(sql, params) {
|
|
59
|
+
assertConsumerSql(sql);
|
|
60
|
+
const statement = this.#statements.get(sql).raw();
|
|
61
|
+
const columns = statement.columns().map((column) => column.name);
|
|
62
|
+
return statement.all(params.map(decodeBinding)).map((values) => ({
|
|
63
|
+
columns,
|
|
64
|
+
values: values.map(encodeResult),
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/** Synchronous application SQL used only while the host owns the operation. */
|
|
69
|
+
export class BedrockDirectSql {
|
|
70
|
+
db;
|
|
71
|
+
constructor(db) {
|
|
72
|
+
this.db = db;
|
|
73
|
+
}
|
|
74
|
+
exec(sql, params = [], _metadata) {
|
|
75
|
+
assertConsumerSql(sql);
|
|
76
|
+
if (params.length === 0) {
|
|
77
|
+
this.db.exec(sql);
|
|
78
|
+
const statement = this.db.prepare('SELECT changes() AS changes');
|
|
79
|
+
try {
|
|
80
|
+
const result = statement.get();
|
|
81
|
+
return { changes: result.changes };
|
|
82
|
+
}
|
|
83
|
+
finally {
|
|
84
|
+
statement.finalize();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const statement = this.db.prepare(sql);
|
|
88
|
+
try {
|
|
89
|
+
return { changes: statement.run([...params]).changes };
|
|
90
|
+
}
|
|
91
|
+
finally {
|
|
92
|
+
statement.finalize();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
query(sql, params = []) {
|
|
96
|
+
assertConsumerSql(sql);
|
|
97
|
+
const statement = this.db.prepare(sql);
|
|
98
|
+
try {
|
|
99
|
+
return statement.all([...params]);
|
|
100
|
+
}
|
|
101
|
+
finally {
|
|
102
|
+
statement.finalize();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
export class BedrockMutatorSql {
|
|
107
|
+
direct;
|
|
108
|
+
compileQuery;
|
|
109
|
+
queryBudget;
|
|
110
|
+
constructor(direct, compileQuery, queryBudget) {
|
|
111
|
+
this.direct = direct;
|
|
112
|
+
this.compileQuery = compileQuery;
|
|
113
|
+
this.queryBudget = queryBudget;
|
|
114
|
+
}
|
|
115
|
+
async exec(sql, params = [], metadata) {
|
|
116
|
+
return this.direct.exec(sql, params, metadata);
|
|
117
|
+
}
|
|
118
|
+
async query(sql, params = []) {
|
|
119
|
+
return this.direct.query(sql, params);
|
|
120
|
+
}
|
|
121
|
+
async queryAst(ast, format, queryName) {
|
|
122
|
+
const compiled = this.compileQuery(ast, format);
|
|
123
|
+
return executeTransactionQueryPlan(compiled, (sql, params) => this.direct.query(sql, params), { queryName, budget: this.queryBudget });
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=sqlite-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-adapter.js","sourceRoot":"","sources":["../../../sync-browser-host/src/sqlite-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAA;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAiCnD,MAAM,MAAM,GAAG,0DAA0D,CAAA;AACzE,MAAM,kBAAkB,GAAG,UAAU,CAAA;AACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;AAChD,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;AAEhD,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,SAAS,CAAC,6CAA6C,CAAC,CAAA;IACpE,CAAC;IACD,IAAI,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,SAAS,CAAC,8DAA8D,CAAC,CAAA;IACrF,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAgB;IACrC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,IAAI,CAAA;QACb,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YACjC,OAAO,KAAK,IAAI,QAAQ,IAAI,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;QACvE,CAAC;QACD,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,KAAK,CAAA;QACpB,KAAK,MAAM;YACT,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACvC,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,cAAc,CAAC,KAAK,CAAC,CAAA;AAC9B,CAAC;AAED,MAAM,cAAc;IAGW;IAFpB,WAAW,GAAG,IAAI,GAAG,EAAqB,CAAA;IAEnD,YAA6B,EAAY;QAAZ,OAAE,GAAF,EAAE,CAAU;IAAG,CAAC;IAE7C,GAAG,CAAC,GAAW;QACb,IAAI,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACzC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAChC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;QACtC,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;CACF;AAED,0EAA0E;AAC1E,MAAM,OAAO,aAAa;IACf,WAAW,CAAgB;IAEpC,YAAY,EAAY;QACtB,IAAI,CAAC,WAAW,GAAG,IAAI,cAAc,CAAC,EAAE,CAAC,CAAA;IAC3C,CAAC;IAED,IAAI,CAAC,GAAW,EAAE,MAAmB;QACnC,iBAAiB,CAAC,GAAG,CAAC,CAAA;QACtB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAA;IAC1D,CAAC;IAED,KAAK,CAAC,GAAW,EAAE,MAAmB;QACpC,iBAAiB,CAAC,GAAG,CAAC,CAAA;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;QACjD,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAChE,OAAQ,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAiB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAChF,OAAO;YACP,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC;SACjC,CAAC,CAAC,CAAA;IACL,CAAC;CACF;AAED,+EAA+E;AAC/E,MAAM,OAAO,gBAAgB;IACE;IAA7B,YAA6B,EAAY;QAAZ,OAAE,GAAF,EAAE,CAAU;IAAG,CAAC;IAE7C,IAAI,CACF,GAAW,EACX,SAA6B,EAAE,EAC/B,SAAgC;QAEhC,iBAAiB,CAAC,GAAG,CAAC,CAAA;QACtB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACjB,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAA;YAChE,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAyB,CAAA;gBACrD,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAA;YACpC,CAAC;oBAAS,CAAC;gBACT,SAAS,CAAC,QAAQ,EAAE,CAAA;YACtB,CAAC;QACH,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACtC,IAAI,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;QACxD,CAAC;gBAAS,CAAC;YACT,SAAS,CAAC,QAAQ,EAAE,CAAA;QACtB,CAAC;IACH,CAAC;IAED,KAAK,CACH,GAAW,EACX,SAA6B,EAAE;QAE/B,iBAAiB,CAAC,GAAG,CAAC,CAAA;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACtC,IAAI,CAAC;YACH,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAU,CAAA;QAC5C,CAAC;gBAAS,CAAC;YACT,SAAS,CAAC,QAAQ,EAAE,CAAA;QACtB,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,iBAAiB;IAET;IACA;IAIA;IANnB,YACmB,MAAwB,EACxB,YAGgB,EAChB,WAA6C;QAL7C,WAAM,GAAN,MAAM,CAAkB;QACxB,iBAAY,GAAZ,YAAY,CAGI;QAChB,gBAAW,GAAX,WAAW,CAAkC;IAC7D,CAAC;IAEJ,KAAK,CAAC,IAAI,CACR,GAAW,EACX,SAA6B,EAAE,EAC/B,QAA+B;QAE/B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;IAChD,CAAC;IAED,KAAK,CAAC,KAAK,CACT,GAAW,EACX,SAA6B,EAAE;QAE/B,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAM,GAAG,EAAE,MAAM,CAAC,CAAA;IAC5C,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,GAAY,EACZ,MAA8B,EAC9B,SAAkB;QAElB,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QAC/C,OAAO,2BAA2B,CAChC,QAAQ,EACR,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,EAC/C,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,CACxC,CAAA;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { Schema } from '@rocicorp/zero';
|
|
2
|
+
import type { TransactionQueryBudget } from 'orez-sync-cf-host/transaction-query';
|
|
3
|
+
import type { AuthData, ExecResult, JsonValue, MutatorRegistry, SqlStatementMetadata, SyncExecutor, VisibilityConfig } from 'orez-sync-executor';
|
|
4
|
+
export { visibility, type VisibilityExpression, type VisibilityFilter, type VisibilityOperand, type VisibilityValue, } from 'orez-sync-cf-host/visibility';
|
|
5
|
+
export type { VisibilityConfig } from 'orez-sync-executor';
|
|
6
|
+
export interface SyncSql {
|
|
7
|
+
exec(sql: string, params?: readonly unknown[], metadata?: SqlStatementMetadata): ExecResult;
|
|
8
|
+
query<Row extends Record<string, unknown> = Record<string, unknown>>(sql: string, params?: readonly unknown[]): Row[];
|
|
9
|
+
}
|
|
10
|
+
export type PullCaps = {
|
|
11
|
+
maxChangeRows: number;
|
|
12
|
+
maxChangeBytes: number;
|
|
13
|
+
};
|
|
14
|
+
export type BrowserSyncHostAssets = {
|
|
15
|
+
sqliteWasmUrl?: string | URL;
|
|
16
|
+
syncWasmUrl?: string | URL;
|
|
17
|
+
};
|
|
18
|
+
export type BrowserSyncHostConfig<S extends Schema = Schema, A extends AuthData = AuthData> = {
|
|
19
|
+
storageKey: string;
|
|
20
|
+
assets?: BrowserSyncHostAssets;
|
|
21
|
+
schema: S;
|
|
22
|
+
initialize(sql: SyncSql): void;
|
|
23
|
+
authenticate(request: Request): A | null | Promise<A | null>;
|
|
24
|
+
authorize(request: Request, authData: A | null, namespace: string): boolean | Promise<boolean>;
|
|
25
|
+
mutators: MutatorRegistry<S>;
|
|
26
|
+
visibility?: VisibilityConfig;
|
|
27
|
+
queryAware?: boolean | ((authData: A | null) => boolean);
|
|
28
|
+
resolveQuery?: (name: string, args: readonly JsonValue[], authData: A | null) => JsonValue | Promise<JsonValue>;
|
|
29
|
+
queryTransformVersion?: number | ((authData: A | null) => number);
|
|
30
|
+
retainChanges?: number;
|
|
31
|
+
caps?: Partial<PullCaps>;
|
|
32
|
+
transactionQueryBudget?: Partial<TransactionQueryBudget>;
|
|
33
|
+
onDataChanged?: () => void;
|
|
34
|
+
};
|
|
35
|
+
export interface BrowserSyncHost<S extends Schema = Schema> {
|
|
36
|
+
readonly executor: SyncExecutor<S>;
|
|
37
|
+
handlePull(request: Request): Promise<Response>;
|
|
38
|
+
handlePush(request: Request): Promise<Response>;
|
|
39
|
+
fetch(request: Request): Promise<Response>;
|
|
40
|
+
query<Row extends Record<string, unknown> = Record<string, unknown>>(sql: string, params?: readonly unknown[]): Promise<Row[]>;
|
|
41
|
+
exec(sql: string, params?: readonly unknown[], metadata?: SqlStatementMetadata): Promise<ExecResult>;
|
|
42
|
+
subscribe(listener: () => void): () => void;
|
|
43
|
+
close(): Promise<void>;
|
|
44
|
+
}
|
|
45
|
+
export interface BrowserSyncHostPortClient {
|
|
46
|
+
fetch(input: string | URL | Request, init?: RequestInit): Promise<Response>;
|
|
47
|
+
query<Row extends Record<string, unknown> = Record<string, unknown>>(sql: string, params?: readonly unknown[]): Promise<Row[]>;
|
|
48
|
+
exec(sql: string, params?: readonly unknown[], metadata?: SqlStatementMetadata): Promise<ExecResult>;
|
|
49
|
+
subscribe(listener: () => void): () => void;
|
|
50
|
+
close(): void;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../sync-browser-host/src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../sync-browser-host/src/types.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,UAAU,GAKX,MAAM,8BAA8B,CAAA"}
|