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,48 @@
|
|
|
1
|
+
export const CLOUDFLARE_COMPATIBILITY_DATE = '2026-03-29';
|
|
2
|
+
function record(value) {
|
|
3
|
+
return value && typeof value === 'object' && !Array.isArray(value)
|
|
4
|
+
? value
|
|
5
|
+
: undefined;
|
|
6
|
+
}
|
|
7
|
+
function stringArray(value) {
|
|
8
|
+
return Array.isArray(value)
|
|
9
|
+
? value.filter((item) => typeof item === 'string')
|
|
10
|
+
: [];
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Add the current Orez Lite Durable Object contract to a Wrangler config.
|
|
14
|
+
*
|
|
15
|
+
* The caller owns routes, assets, services, and every app-specific binding.
|
|
16
|
+
*/
|
|
17
|
+
export function configureCloudflareWorker(config) {
|
|
18
|
+
config.compatibility_date = CLOUDFLARE_COMPATIBILITY_DATE;
|
|
19
|
+
config.compatibility_flags = [
|
|
20
|
+
...new Set([...stringArray(config.compatibility_flags), 'enable_request_signal']),
|
|
21
|
+
];
|
|
22
|
+
const durableObjects = record(config.durable_objects) ?? {};
|
|
23
|
+
const bindings = Array.isArray(durableObjects.bindings)
|
|
24
|
+
? durableObjects.bindings.filter((binding) => Boolean(record(binding)))
|
|
25
|
+
: [];
|
|
26
|
+
if (!bindings.some((binding) => binding.name === 'ZERO_SQL_DO' && binding.class_name === 'ZeroSqlDO')) {
|
|
27
|
+
bindings.push({ name: 'ZERO_SQL_DO', class_name: 'ZeroSqlDO' });
|
|
28
|
+
}
|
|
29
|
+
durableObjects.bindings = bindings;
|
|
30
|
+
config.durable_objects = durableObjects;
|
|
31
|
+
const migrations = Array.isArray(config.migrations)
|
|
32
|
+
? config.migrations.filter((migration) => Boolean(record(migration)))
|
|
33
|
+
: [];
|
|
34
|
+
const hasZeroSqlMigration = migrations.some((migration) => stringArray(migration.new_sqlite_classes).includes('ZeroSqlDO'));
|
|
35
|
+
if (!hasZeroSqlMigration) {
|
|
36
|
+
const tags = new Set(migrations
|
|
37
|
+
.map((migration) => migration.tag)
|
|
38
|
+
.filter((tag) => typeof tag === 'string'));
|
|
39
|
+
let tag = 'orez-lite-v1';
|
|
40
|
+
let suffix = 2;
|
|
41
|
+
while (tags.has(tag))
|
|
42
|
+
tag = `orez-lite-v${suffix++}`;
|
|
43
|
+
migrations.push({ tag, new_sqlite_classes: ['ZeroSqlDO'] });
|
|
44
|
+
}
|
|
45
|
+
config.migrations = migrations;
|
|
46
|
+
return config;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=wrangler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrangler.js","sourceRoot":"","sources":["../../src/cf-deploy/wrangler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { CompiledTransactionQueryPlan, TransactionQueryBudget } from 'orez-sync-cf-host/transaction-query';
|
|
2
|
+
import type { ExecResult, SqlStatementMetadata, TransactionQueryFormat } from 'orez-sync-executor';
|
|
3
|
+
export type ApplicationSqlQueryCompiler = (ast: unknown, format: TransactionQueryFormat) => CompiledTransactionQueryPlan | Promise<CompiledTransactionQueryPlan>;
|
|
4
|
+
export type ApplicationSqlTable = Pick<SqlStatementMetadata, 'table' | 'publicTable'> & {
|
|
5
|
+
/** capture rollback images without publishing this table to Zero clients */
|
|
6
|
+
publish?: boolean;
|
|
7
|
+
};
|
|
8
|
+
export type ApplicationSqlExecResult = ExecResult;
|
|
9
|
+
export type ApplicationSqlTransaction = {
|
|
10
|
+
exec(sql: string, params?: readonly unknown[], metadata?: SqlStatementMetadata): Promise<ApplicationSqlExecResult>;
|
|
11
|
+
query<Row extends Record<string, unknown> = Record<string, unknown>>(sql: string, params?: readonly unknown[]): Promise<Row[]>;
|
|
12
|
+
queryAst<Result = unknown>(ast: unknown, format: TransactionQueryFormat, queryName?: string): Promise<Result>;
|
|
13
|
+
registerTables(tables: readonly ApplicationSqlTable[]): Promise<void>;
|
|
14
|
+
};
|
|
15
|
+
export type ApplicationSqlTransactionWork<Value> = (tx: ApplicationSqlTransaction) => Value | Promise<Value>;
|
|
16
|
+
/**
|
|
17
|
+
* private durable object RPC protocol. the session capability is returned
|
|
18
|
+
* before it asks for ownership. waiting retries hold no durable object state,
|
|
19
|
+
* and a cancellation signal closes a queued session or rolls back an active
|
|
20
|
+
* session before rejecting work.
|
|
21
|
+
*/
|
|
22
|
+
export type ApplicationSqlSessionRpc = Disposable & {
|
|
23
|
+
begin(): Promise<boolean>;
|
|
24
|
+
query<Row extends Record<string, unknown> = Record<string, unknown>>(sql: string, params?: readonly unknown[]): Promise<Row[]>;
|
|
25
|
+
exec(sql: string, params?: readonly unknown[], metadata?: SqlStatementMetadata): Promise<ApplicationSqlExecResult>;
|
|
26
|
+
queryPlan<Result = unknown>(plan: CompiledTransactionQueryPlan, queryName?: string, queryBudget?: Partial<TransactionQueryBudget>): Promise<Result>;
|
|
27
|
+
registerTables(tables: readonly ApplicationSqlTable[]): Promise<void>;
|
|
28
|
+
commit(): Promise<void>;
|
|
29
|
+
rollback(): Promise<void>;
|
|
30
|
+
};
|
|
31
|
+
export type ApplicationSqlRpc = {
|
|
32
|
+
applicationSqlSession(sessionID: string): Promise<ApplicationSqlSessionRpc>;
|
|
33
|
+
};
|
|
34
|
+
export type ApplicationSqlDurableObjectNamespace = {
|
|
35
|
+
idFromName(name: string): unknown;
|
|
36
|
+
get(id: unknown): ApplicationSqlRpc;
|
|
37
|
+
};
|
|
38
|
+
export type ApplicationSqlClient = {
|
|
39
|
+
readonly namespace: string;
|
|
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<ApplicationSqlExecResult>;
|
|
42
|
+
registerTables(tables: readonly ApplicationSqlTable[]): Promise<void>;
|
|
43
|
+
transaction<Value>(compileQuery: ApplicationSqlQueryCompiler, work: ApplicationSqlTransactionWork<Value>, queryBudget?: Partial<TransactionQueryBudget>): Promise<Value>;
|
|
44
|
+
};
|
|
45
|
+
export type ApplicationSqlClientOptions = {
|
|
46
|
+
signal?: AbortSignal;
|
|
47
|
+
};
|
|
48
|
+
export declare function createApplicationSqlClient(durableObjects: ApplicationSqlDurableObjectNamespace, namespace: string, options?: ApplicationSqlClientOptions): ApplicationSqlClient;
|
|
49
|
+
//# sourceMappingURL=application-sql.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"application-sql.d.ts","sourceRoot":"","sources":["../../src/cf-do/application-sql.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,4BAA4B,EAC5B,sBAAsB,EACvB,MAAM,qCAAqC,CAAA;AAC5C,OAAO,KAAK,EACV,UAAU,EACV,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,oBAAoB,CAAA;AAE3B,MAAM,MAAM,2BAA2B,GAAG,CACxC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,sBAAsB,KAC3B,4BAA4B,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAAA;AAEzE,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,oBAAoB,EAAE,OAAO,GAAG,aAAa,CAAC,GAAG;IACtF,4EAA4E;IAC5E,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAAA;AAEjD,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,CACF,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,SAAS,OAAO,EAAE,EAC3B,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,OAAO,CAAC,wBAAwB,CAAC,CAAA;IACpC,KAAK,CAAC,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,SAAS,OAAO,EAAE,GAC1B,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IACjB,QAAQ,CAAC,MAAM,GAAG,OAAO,EACvB,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,sBAAsB,EAC9B,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAAA;IAClB,cAAc,CAAC,MAAM,EAAE,SAAS,mBAAmB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACtE,CAAA;AAED,MAAM,MAAM,6BAA6B,CAAC,KAAK,IAAI,CACjD,EAAE,EAAE,yBAAyB,KAC1B,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;AAE3B;;;;;GAKG;AACH,MAAM,MAAM,wBAAwB,GAAG,UAAU,GAAG;IAClD,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IACzB,KAAK,CAAC,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,SAAS,OAAO,EAAE,GAC1B,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IACjB,IAAI,CACF,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,SAAS,OAAO,EAAE,EAC3B,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,OAAO,CAAC,wBAAwB,CAAC,CAAA;IACpC,SAAS,CAAC,MAAM,GAAG,OAAO,EACxB,IAAI,EAAE,4BAA4B,EAClC,SAAS,CAAC,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,GAC5C,OAAO,CAAC,MAAM,CAAC,CAAA;IAClB,cAAc,CAAC,MAAM,EAAE,SAAS,mBAAmB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACrE,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACvB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAA;CAC5E,CAAA;AAED,MAAM,MAAM,oCAAoC,GAAG;IACjD,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IACjC,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG,iBAAiB,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,KAAK,CAAC,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,SAAS,OAAO,EAAE,GAC1B,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IACjB,IAAI,CACF,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,SAAS,OAAO,EAAE,EAC3B,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,OAAO,CAAC,wBAAwB,CAAC,CAAA;IACpC,cAAc,CAAC,MAAM,EAAE,SAAS,mBAAmB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACrE,WAAW,CAAC,KAAK,EACf,YAAY,EAAE,2BAA2B,EACzC,IAAI,EAAE,6BAA6B,CAAC,KAAK,CAAC,EAC1C,WAAW,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,GAC5C,OAAO,CAAC,KAAK,CAAC,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB,CAAA;AA2CD,wBAAgB,0BAA0B,CACxC,cAAc,EAAE,oCAAoC,EACpD,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,2BAAgC,GACxC,oBAAoB,CAgCtB"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
|
|
2
|
+
if (value !== null && value !== void 0) {
|
|
3
|
+
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
4
|
+
var dispose, inner;
|
|
5
|
+
if (async) {
|
|
6
|
+
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
7
|
+
dispose = value[Symbol.asyncDispose];
|
|
8
|
+
}
|
|
9
|
+
if (dispose === void 0) {
|
|
10
|
+
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
11
|
+
dispose = value[Symbol.dispose];
|
|
12
|
+
if (async) inner = dispose;
|
|
13
|
+
}
|
|
14
|
+
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
15
|
+
if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
|
|
16
|
+
env.stack.push({ value: value, dispose: dispose, async: async });
|
|
17
|
+
}
|
|
18
|
+
else if (async) {
|
|
19
|
+
env.stack.push({ async: true });
|
|
20
|
+
}
|
|
21
|
+
return value;
|
|
22
|
+
};
|
|
23
|
+
var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
|
|
24
|
+
return function (env) {
|
|
25
|
+
function fail(e) {
|
|
26
|
+
env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
|
|
27
|
+
env.hasError = true;
|
|
28
|
+
}
|
|
29
|
+
var r, s = 0;
|
|
30
|
+
function next() {
|
|
31
|
+
while (r = env.stack.pop()) {
|
|
32
|
+
try {
|
|
33
|
+
if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
|
|
34
|
+
if (r.dispose) {
|
|
35
|
+
var result = r.dispose.call(r.value);
|
|
36
|
+
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
|
|
37
|
+
}
|
|
38
|
+
else s |= 1;
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
fail(e);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
|
|
45
|
+
if (env.hasError) throw env.error;
|
|
46
|
+
}
|
|
47
|
+
return next();
|
|
48
|
+
};
|
|
49
|
+
})(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
50
|
+
var e = new Error(message);
|
|
51
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
52
|
+
});
|
|
53
|
+
async function withApplicationSqlSession(target, signal, work) {
|
|
54
|
+
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
55
|
+
try {
|
|
56
|
+
const session = __addDisposableResource(env_1, await target.applicationSqlSession(crypto.randomUUID()), false);
|
|
57
|
+
let rejectAbort;
|
|
58
|
+
const aborted = signal
|
|
59
|
+
? new Promise((_resolve, reject) => {
|
|
60
|
+
rejectAbort = reject;
|
|
61
|
+
})
|
|
62
|
+
: undefined;
|
|
63
|
+
void aborted?.catch(() => { });
|
|
64
|
+
const abort = () => {
|
|
65
|
+
rejectAbort?.(signal?.reason ??
|
|
66
|
+
new DOMException('application SQLite request was canceled', 'AbortError'));
|
|
67
|
+
};
|
|
68
|
+
signal?.addEventListener('abort', abort, { once: true });
|
|
69
|
+
try {
|
|
70
|
+
signal?.throwIfAborted();
|
|
71
|
+
while (!(await session.begin())) {
|
|
72
|
+
await new Promise((resolve) => setTimeout(resolve, 25));
|
|
73
|
+
signal?.throwIfAborted();
|
|
74
|
+
}
|
|
75
|
+
const pendingWork = work(session);
|
|
76
|
+
const value = aborted
|
|
77
|
+
? await Promise.race([Promise.resolve(pendingWork), aborted])
|
|
78
|
+
: await pendingWork;
|
|
79
|
+
signal?.throwIfAborted();
|
|
80
|
+
await session.commit();
|
|
81
|
+
return value;
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
await session.rollback().catch(() => { });
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
signal?.removeEventListener('abort', abort);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (e_1) {
|
|
92
|
+
env_1.error = e_1;
|
|
93
|
+
env_1.hasError = true;
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
__disposeResources(env_1);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
export function createApplicationSqlClient(durableObjects, namespace, options = {}) {
|
|
100
|
+
if (!namespace)
|
|
101
|
+
throw new TypeError('application SQLite namespace is required');
|
|
102
|
+
const target = durableObjects.get(durableObjects.idFromName(namespace));
|
|
103
|
+
return {
|
|
104
|
+
namespace,
|
|
105
|
+
query: (sql, params = []) => withApplicationSqlSession(target, options.signal, (session) => session.query(sql, params)),
|
|
106
|
+
exec: (sql, params = [], metadata) => withApplicationSqlSession(target, options.signal, (session) => session.exec(sql, params, metadata)),
|
|
107
|
+
registerTables: (tables) => withApplicationSqlSession(target, options.signal, (session) => session.registerTables(tables)),
|
|
108
|
+
async transaction(compileQuery, work, queryBudget) {
|
|
109
|
+
return withApplicationSqlSession(target, options.signal, async (session) => {
|
|
110
|
+
const tx = {
|
|
111
|
+
exec: (sql, params = [], metadata) => session.exec(sql, params, metadata),
|
|
112
|
+
query: (sql, params = []) => session.query(sql, params),
|
|
113
|
+
async queryAst(ast, format, queryName) {
|
|
114
|
+
const plan = await compileQuery(ast, format);
|
|
115
|
+
return session.queryPlan(plan, queryName, queryBudget);
|
|
116
|
+
},
|
|
117
|
+
registerTables: (tables) => session.registerTables(tables),
|
|
118
|
+
};
|
|
119
|
+
return work(tx);
|
|
120
|
+
});
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=application-sql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"application-sql.js","sourceRoot":"","sources":["../../src/cf-do/application-sql.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import type { DurableSqlStorage } from './watermark.js';
|
|
2
|
+
/** Bump whenever the generated trigger bodies or buffer shape change. */
|
|
3
|
+
export declare const CDC_SCHEMA_VERSION = 2;
|
|
4
|
+
export interface CdcTableRegistration {
|
|
5
|
+
/** Physical, flattened SQLite table name. */
|
|
6
|
+
physicalTableName: string;
|
|
7
|
+
/** Schema-qualified identity exposed in `_zero_changes`. */
|
|
8
|
+
tableName: string;
|
|
9
|
+
/** Optional known column list. The live SQLite schema remains authoritative. */
|
|
10
|
+
columns?: string[];
|
|
11
|
+
/** False captures before/after images for transaction rollback only. */
|
|
12
|
+
publish?: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* A row image in storage-journal form: one tagged string per column, carrying
|
|
16
|
+
* the value's SQLite storage class and an exact, lossless payload. This is the
|
|
17
|
+
* undo encoding, deliberately separate from the Zero wire encoding that
|
|
18
|
+
* `journalToWire` derives.
|
|
19
|
+
*/
|
|
20
|
+
export type JournalRecord = Record<string, string>;
|
|
21
|
+
export interface CapturedRowChange {
|
|
22
|
+
physicalTableName: string;
|
|
23
|
+
tableName: string;
|
|
24
|
+
op: 'INSERT' | 'UPDATE' | 'DELETE';
|
|
25
|
+
/** Zero wire image (JSON-safe; blobs as postgres bytea text). */
|
|
26
|
+
rowData: Record<string, unknown> | null;
|
|
27
|
+
oldData: Record<string, unknown> | null;
|
|
28
|
+
/** Lossless storage-journal image used only for undo. */
|
|
29
|
+
rowJournal: JournalRecord | null;
|
|
30
|
+
oldJournal: JournalRecord | null;
|
|
31
|
+
/** Exact decimal rowid text, or null for WITHOUT ROWID tables. */
|
|
32
|
+
newRowid: string | null;
|
|
33
|
+
oldRowid: string | null;
|
|
34
|
+
/** Omitted for normal published changes; false means rollback-only. */
|
|
35
|
+
publish?: boolean;
|
|
36
|
+
}
|
|
37
|
+
export interface SuspendedCdcTable {
|
|
38
|
+
physicalTableName: string;
|
|
39
|
+
tableName: string;
|
|
40
|
+
publish?: boolean;
|
|
41
|
+
}
|
|
42
|
+
/** Stable-identity and writability metadata read from the live SQLite schema. */
|
|
43
|
+
export interface TableIdentity {
|
|
44
|
+
/** rowid alias usable in SQL, or null for a WITHOUT ROWID table. */
|
|
45
|
+
rowidAlias: string | null;
|
|
46
|
+
/** The INTEGER PRIMARY KEY column, which *is* the rowid, when one exists. */
|
|
47
|
+
rowidColumn: string | null;
|
|
48
|
+
/** Declared primary-key columns in key order. */
|
|
49
|
+
keyColumns: string[];
|
|
50
|
+
/** Columns undo may write. Excludes generated columns. */
|
|
51
|
+
writableColumns: string[];
|
|
52
|
+
/** Every column captured in a row image, generated columns included. */
|
|
53
|
+
columns: string[];
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Rebuild the exact SQLite value for an undo statement. Integers and reals go
|
|
57
|
+
* back through CAST so the full int64 range and every double survive without
|
|
58
|
+
* depending on the driver's numeric binding.
|
|
59
|
+
*/
|
|
60
|
+
export declare function journalValueSqlBinding(encoded: string): {
|
|
61
|
+
expr: string;
|
|
62
|
+
params: unknown[];
|
|
63
|
+
};
|
|
64
|
+
export declare function parseJournalRecord(value: unknown): JournalRecord | null;
|
|
65
|
+
/**
|
|
66
|
+
* Read stable-identity metadata from the live schema. Returns null when the
|
|
67
|
+
* table cannot be undone row-by-row (no rowid and no primary key), which keeps
|
|
68
|
+
* capture off it entirely so the caller falls back to table snapshots.
|
|
69
|
+
*/
|
|
70
|
+
export declare function tableIdentity(sql: DurableSqlStorage, table: string): TableIdentity | null;
|
|
71
|
+
export interface TriggerDefinition {
|
|
72
|
+
name: string;
|
|
73
|
+
sql: string;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Drop every trigger on these tables and return their definitions.
|
|
77
|
+
*
|
|
78
|
+
* A restore must not fire the table's own business triggers. Undoing an INSERT
|
|
79
|
+
* with a DELETE would run its AFTER DELETE trigger and write side effects the
|
|
80
|
+
* original transaction never made, and if that side effect lands on a captured
|
|
81
|
+
* table, its CDC trigger stages a phantom change on top. Dropping only the
|
|
82
|
+
* generated CDC triggers leaves both holes open, so every trigger goes.
|
|
83
|
+
*/
|
|
84
|
+
export declare function suspendTriggers(sql: DurableSqlStorage, tables: Iterable<string>): TriggerDefinition[];
|
|
85
|
+
/** Recreate triggers suspended for a restore, verbatim. */
|
|
86
|
+
export declare function restoreTriggers(sql: DurableSqlStorage, triggers: TriggerDefinition[]): void;
|
|
87
|
+
/** The columns a restore is allowed to write. Empty when the table is gone. */
|
|
88
|
+
export declare function writableColumns(sql: DurableSqlStorage, table: string): string[];
|
|
89
|
+
/**
|
|
90
|
+
* Return physical tables whose SQLite schema may be changed by this statement.
|
|
91
|
+
* The DO compiler emits one SQLite DDL statement at a time and quotes physical
|
|
92
|
+
* names, but accepting every SQLite identifier form also covers direct /exec
|
|
93
|
+
* callers and keeps CDC independent of the compiler.
|
|
94
|
+
*/
|
|
95
|
+
export declare function schemaChangeTargets(sql: string): string[];
|
|
96
|
+
/**
|
|
97
|
+
* Transactional logical-row capture for the authoritative SQLite database.
|
|
98
|
+
*
|
|
99
|
+
* Generated AFTER triggers write full before/after row images to a staging
|
|
100
|
+
* table in the same SQLite statement as the application write. The owner
|
|
101
|
+
* drains that staging table before its storage transaction returns and moves
|
|
102
|
+
* the rows to either `_zero_changes` or `_zero_pending_changes`. Consequently
|
|
103
|
+
* a failed statement or storage transaction cannot leave an orphaned change.
|
|
104
|
+
*
|
|
105
|
+
* Every mutator of the in-memory registration cache runs inside the owner's
|
|
106
|
+
* storage transaction, so the cache can outlive an abort that rolled its SQLite
|
|
107
|
+
* side back. `reload()` re-derives the whole cache from SQLite and MUST be
|
|
108
|
+
* called on any aborted transaction; see `atomically` in worker.ts.
|
|
109
|
+
*/
|
|
110
|
+
export declare class TransactionalCdc {
|
|
111
|
+
#private;
|
|
112
|
+
private readonly sql;
|
|
113
|
+
constructor(sql: DurableSqlStorage);
|
|
114
|
+
get active(): boolean;
|
|
115
|
+
/** Force the next per-table ensure to re-read SQLite's live schema. */
|
|
116
|
+
invalidateSchema(): void;
|
|
117
|
+
/**
|
|
118
|
+
* Re-derive every cached decision from SQLite. Called after an aborted
|
|
119
|
+
* storage transaction, where SQLite rolled back the trigger and metadata
|
|
120
|
+
* writes but this object still remembers making them. Without it a table can
|
|
121
|
+
* stay "registered and verified" in memory with no trigger on disk, and every
|
|
122
|
+
* later write to it is silently uncaptured.
|
|
123
|
+
*/
|
|
124
|
+
reload(): void;
|
|
125
|
+
private loadRegistrations;
|
|
126
|
+
private ensureTables;
|
|
127
|
+
private tableExists;
|
|
128
|
+
private triggersExist;
|
|
129
|
+
private registered;
|
|
130
|
+
capturesTable(tableName: string): boolean;
|
|
131
|
+
/** True when a DDL statement must atomically suspend and rebuild CDC triggers. */
|
|
132
|
+
capturesSchemaChange(sql: string): boolean;
|
|
133
|
+
private dropTriggers;
|
|
134
|
+
/**
|
|
135
|
+
* Drop generated triggers before SQLite rewrites a captured table. SQLite
|
|
136
|
+
* refuses DROP/RENAME COLUMN while any trigger still references the old row
|
|
137
|
+
* shape. The caller must run this, the DDL, and finishSchemaChange in one
|
|
138
|
+
* storage transaction so capture is never observably disabled.
|
|
139
|
+
*/
|
|
140
|
+
beginSchemaChange(sql: string): SuspendedCdcTable[];
|
|
141
|
+
/** Re-introspect changed tables and rebuild their triggers from the live shape. */
|
|
142
|
+
finishSchemaChange(suspended: SuspendedCdcTable[]): void;
|
|
143
|
+
private installTriggers;
|
|
144
|
+
/**
|
|
145
|
+
* Ensure one table is captured. Returns false when the table does not exist
|
|
146
|
+
* or cannot be undone row-by-row, which leaves the caller on its table
|
|
147
|
+
* snapshot path rather than capturing changes it could never roll back.
|
|
148
|
+
*/
|
|
149
|
+
ensureTable(registration: CdcTableRegistration, refresh?: boolean): boolean;
|
|
150
|
+
/** Replace the captured-table set with the caller's authoritative list. */
|
|
151
|
+
syncTables(registrations: CdcTableRegistration[]): void;
|
|
152
|
+
/** Drain all changes captured by the just-completed SQLite statement. */
|
|
153
|
+
drain(): CapturedRowChange[];
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=cdc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cdc.d.ts","sourceRoot":"","sources":["../../src/cf-do/cdc.ts"],"names":[],"mappings":"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"}
|