orez 0.5.16 → 0.5.18

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.
Files changed (44) hide show
  1. package/README.md +4 -0
  2. package/dist/cf-do/worker.d.ts.map +1 -1
  3. package/dist/cf-do/worker.js +89 -14
  4. package/dist/cf-do/worker.js.map +1 -1
  5. package/dist/sync-browser-host/generated/sqlite3-browser.wasm +0 -0
  6. package/dist/sync-browser-host/generated/sync_wasm.js +921 -0
  7. package/dist/sync-browser-host/generated/sync_wasm_bg.wasm +0 -0
  8. package/dist/sync-browser-host/host.d.ts +8 -0
  9. package/dist/sync-browser-host/host.d.ts.map +1 -0
  10. package/dist/sync-browser-host/host.js +435 -0
  11. package/dist/sync-browser-host/host.js.map +1 -0
  12. package/dist/sync-browser-host/idb-snapshot.d.ts +10 -0
  13. package/dist/sync-browser-host/idb-snapshot.d.ts.map +1 -0
  14. package/dist/sync-browser-host/idb-snapshot.js +109 -0
  15. package/dist/sync-browser-host/idb-snapshot.js.map +1 -0
  16. package/dist/sync-browser-host/index.d.ts +4 -0
  17. package/dist/sync-browser-host/index.d.ts.map +1 -0
  18. package/dist/sync-browser-host/index.js +4 -0
  19. package/dist/sync-browser-host/index.js.map +1 -0
  20. package/dist/sync-browser-host/message-port.d.ts +6 -0
  21. package/dist/sync-browser-host/message-port.d.ts.map +1 -0
  22. package/dist/sync-browser-host/message-port.js +182 -0
  23. package/dist/sync-browser-host/message-port.js.map +1 -0
  24. package/dist/sync-browser-host/sqlite-adapter.d.ts +66 -0
  25. package/dist/sync-browser-host/sqlite-adapter.d.ts.map +1 -0
  26. package/dist/sync-browser-host/sqlite-adapter.js +135 -0
  27. package/dist/sync-browser-host/sqlite-adapter.js.map +1 -0
  28. package/dist/sync-browser-host/types.d.ts +88 -0
  29. package/dist/sync-browser-host/types.d.ts.map +1 -0
  30. package/dist/sync-browser-host/types.js +12 -0
  31. package/dist/sync-browser-host/types.js.map +1 -0
  32. package/dist/test-setup.d.ts +2 -0
  33. package/dist/test-setup.d.ts.map +1 -0
  34. package/dist/test-setup.js +35 -0
  35. package/dist/test-setup.js.map +1 -0
  36. package/dist/zero-http/test-harness.d.ts +2 -6
  37. package/dist/zero-http/test-harness.d.ts.map +1 -1
  38. package/dist/zero-http/test-harness.js +4 -2
  39. package/dist/zero-http/test-harness.js.map +1 -1
  40. package/dist/zero-http/transport.d.ts +30 -4
  41. package/dist/zero-http/transport.d.ts.map +1 -1
  42. package/dist/zero-http/transport.js +411 -44
  43. package/dist/zero-http/transport.js.map +1 -1
  44. package/package.json +15 -5
@@ -0,0 +1,182 @@
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
+ await host.exec(request.sql, request.params);
83
+ response = { id: request.id, ok: true };
84
+ }
85
+ await reachDuringDelivery(hooks);
86
+ if (!disconnected) {
87
+ const transfer = response.ok && response.response ? [response.response.body] : undefined;
88
+ port.postMessage(response, transfer ?? []);
89
+ }
90
+ }
91
+ catch (error) {
92
+ if (!disconnected) {
93
+ port.postMessage({
94
+ id: request.id,
95
+ ok: false,
96
+ error: serializeError(error),
97
+ });
98
+ }
99
+ }
100
+ })();
101
+ });
102
+ port.start();
103
+ return disconnect;
104
+ }
105
+ export function serveBrowserSyncHostPort(host, port) {
106
+ return serveBrowserSyncHostPortInternal(host, port);
107
+ }
108
+ export function createBrowserSyncHostPortClient(port) {
109
+ let nextID = 1;
110
+ let closed = false;
111
+ const pending = new Map();
112
+ const listeners = new Set();
113
+ port.addEventListener('message', (event) => {
114
+ const message = event.data;
115
+ if ('event' in message) {
116
+ for (const listener of listeners)
117
+ listener();
118
+ return;
119
+ }
120
+ const promise = pending.get(message.id);
121
+ if (!promise)
122
+ return;
123
+ pending.delete(message.id);
124
+ if (message.ok) {
125
+ promise.resolve(message);
126
+ }
127
+ else {
128
+ const error = new Error(message.error.message);
129
+ error.name = message.error.name;
130
+ error.stack = message.error.stack;
131
+ promise.reject(error);
132
+ }
133
+ });
134
+ port.start();
135
+ function send(request) {
136
+ if (closed)
137
+ return Promise.reject(new Error('browser sync host port is closed'));
138
+ const id = nextID++;
139
+ return new Promise((resolve, reject) => {
140
+ pending.set(id, { resolve, reject });
141
+ port.postMessage({ ...request, id });
142
+ });
143
+ }
144
+ return {
145
+ async fetch(input, init) {
146
+ const request = input instanceof Request ? input : new Request(input, init);
147
+ const serialized = await serializeRequest(request);
148
+ const result = await send({ operation: 'fetch', request: serialized });
149
+ if (!result.ok || !result.response)
150
+ throw new Error('missing port response');
151
+ return deserializeResponse(result.response);
152
+ },
153
+ async query(sql, params = []) {
154
+ const result = await send({ operation: 'query', sql, params });
155
+ if (!result.ok)
156
+ throw new Error('unreachable');
157
+ return result.value;
158
+ },
159
+ async exec(sql, params = []) {
160
+ await send({ operation: 'exec', sql, params });
161
+ },
162
+ subscribe(listener) {
163
+ if (closed)
164
+ throw new Error('browser sync host port is closed');
165
+ listeners.add(listener);
166
+ return () => listeners.delete(listener);
167
+ },
168
+ close() {
169
+ if (closed)
170
+ return;
171
+ closed = true;
172
+ port.postMessage({ id: nextID++, operation: 'disconnect' });
173
+ port.close();
174
+ listeners.clear();
175
+ for (const promise of pending.values()) {
176
+ promise.reject(new Error('browser sync host port closed before response'));
177
+ }
178
+ pending.clear();
179
+ },
180
+ };
181
+ }
182
+ //# sourceMappingURL=message-port.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-port.js","sourceRoot":"","sources":["../../packages/sync-browser-host/src/message-port.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import type { MutatorSql, SyncSql } from './types.js';
2
+ import type { BedrockSqliteModule, Database } from 'bedrock-sqlite/browser';
3
+ export type WireValue = {
4
+ kind: 'null';
5
+ } | {
6
+ kind: 'integer';
7
+ value: string;
8
+ } | {
9
+ kind: 'real';
10
+ value: number;
11
+ } | {
12
+ kind: 'text';
13
+ value: string;
14
+ } | {
15
+ kind: 'blob';
16
+ value: number[];
17
+ };
18
+ export type WireRow = {
19
+ columns: string[];
20
+ values: WireValue[];
21
+ };
22
+ export interface JsSyncDb {
23
+ exec(sql: string, params: WireValue[]): void;
24
+ query(sql: string, params: WireValue[]): WireRow[];
25
+ }
26
+ export type MemfsFile = {
27
+ data: Uint8Array;
28
+ size: number;
29
+ };
30
+ export type BedrockBrowserModule = BedrockSqliteModule & {
31
+ _memfs: {
32
+ files: Record<string, MemfsFile>;
33
+ fds: Record<number, {
34
+ path: string;
35
+ pos: number;
36
+ }>;
37
+ nextFd: number;
38
+ };
39
+ };
40
+ export declare function assertConsumerSql(sql: string): void;
41
+ /** The synchronous wire-value database boundary consumed by sync-wasm. */
42
+ export declare class BedrockSyncDb implements JsSyncDb {
43
+ #private;
44
+ constructor(db: Database);
45
+ exec(sql: string, params: WireValue[]): void;
46
+ query(sql: string, params: WireValue[]): WireRow[];
47
+ }
48
+ /** Synchronous application SQL used only while the host owns the operation. */
49
+ export declare class BedrockDirectSql implements SyncSql {
50
+ private readonly db;
51
+ constructor(db: Database);
52
+ exec(sql: string, params?: readonly unknown[]): void;
53
+ query<Row extends Record<string, unknown> = Record<string, unknown>>(sql: string, params?: readonly unknown[]): Row[];
54
+ }
55
+ export declare class BedrockMutatorSql implements MutatorSql {
56
+ private readonly direct;
57
+ private readonly compileQuery;
58
+ constructor(direct: BedrockDirectSql, compileQuery: (ast: unknown) => {
59
+ sql: string;
60
+ params: WireValue[];
61
+ });
62
+ exec(sql: string, params?: readonly unknown[]): Promise<void>;
63
+ query<Row extends Record<string, unknown> = Record<string, unknown>>(sql: string, params?: readonly unknown[]): Promise<Row[]>;
64
+ queryAst<Row extends Record<string, unknown> = Record<string, unknown>>(ast: unknown): Promise<Row[]>;
65
+ }
66
+ //# sourceMappingURL=sqlite-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-adapter.d.ts","sourceRoot":"","sources":["../../packages/sync-browser-host/src/sqlite-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,135 @@
1
+ const TX_SQL = /^\s*(BEGIN|COMMIT|ROLLBACK|SAVEPOINT|RELEASE)(?=\s|;|$)/i;
2
+ const NUMBERED_PARAMETER = /\?[0-9]+/;
3
+ const MAX_SAFE = BigInt(Number.MAX_SAFE_INTEGER);
4
+ const MIN_SAFE = BigInt(Number.MIN_SAFE_INTEGER);
5
+ export function assertConsumerSql(sql) {
6
+ if (TX_SQL.test(sql)) {
7
+ throw new TypeError('transaction SQL is host-owned and forbidden');
8
+ }
9
+ if (NUMBERED_PARAMETER.test(sql)) {
10
+ throw new TypeError('numbered parameters are forbidden; use positional ? bindings');
11
+ }
12
+ }
13
+ function decodeBinding(value) {
14
+ switch (value.kind) {
15
+ case 'null':
16
+ return null;
17
+ case 'integer': {
18
+ const exact = BigInt(value.value);
19
+ return exact >= MIN_SAFE && exact <= MAX_SAFE ? Number(exact) : exact;
20
+ }
21
+ case 'real':
22
+ case 'text':
23
+ return value.value;
24
+ case 'blob':
25
+ return Uint8Array.from(value.value);
26
+ }
27
+ }
28
+ function encodeResult(value) {
29
+ if (value === null)
30
+ return { kind: 'null' };
31
+ if (typeof value === 'bigint')
32
+ return { kind: 'integer', value: value.toString() };
33
+ if (typeof value === 'number') {
34
+ return Number.isInteger(value)
35
+ ? { kind: 'integer', value: String(value) }
36
+ : { kind: 'real', value };
37
+ }
38
+ if (typeof value === 'string')
39
+ return { kind: 'text', value };
40
+ if (value instanceof ArrayBuffer) {
41
+ return { kind: 'blob', value: Array.from(new Uint8Array(value)) };
42
+ }
43
+ if (ArrayBuffer.isView(value)) {
44
+ return {
45
+ kind: 'blob',
46
+ value: Array.from(new Uint8Array(value.buffer, value.byteOffset, value.byteLength)),
47
+ };
48
+ }
49
+ throw new TypeError(`unsupported Bedrock SQLite result: ${Object.prototype.toString.call(value)}`);
50
+ }
51
+ class StatementCache {
52
+ db;
53
+ #statements = new Map();
54
+ constructor(db) {
55
+ this.db = db;
56
+ }
57
+ get(sql) {
58
+ let statement = this.#statements.get(sql);
59
+ if (!statement) {
60
+ statement = this.db.prepare(sql);
61
+ this.#statements.set(sql, statement);
62
+ }
63
+ return statement;
64
+ }
65
+ }
66
+ /** The synchronous wire-value database boundary consumed by sync-wasm. */
67
+ export class BedrockSyncDb {
68
+ #statements;
69
+ constructor(db) {
70
+ this.#statements = new StatementCache(db);
71
+ }
72
+ exec(sql, params) {
73
+ assertConsumerSql(sql);
74
+ this.#statements.get(sql).run(params.map(decodeBinding));
75
+ }
76
+ query(sql, params) {
77
+ assertConsumerSql(sql);
78
+ const statement = this.#statements.get(sql).raw();
79
+ const columns = statement.columns().map((column) => column.name);
80
+ return statement.all(params.map(decodeBinding)).map((values) => ({
81
+ columns,
82
+ values: values.map(encodeResult),
83
+ }));
84
+ }
85
+ }
86
+ /** Synchronous application SQL used only while the host owns the operation. */
87
+ export class BedrockDirectSql {
88
+ db;
89
+ constructor(db) {
90
+ this.db = db;
91
+ }
92
+ exec(sql, params = []) {
93
+ assertConsumerSql(sql);
94
+ if (params.length === 0) {
95
+ this.db.exec(sql);
96
+ return;
97
+ }
98
+ const statement = this.db.prepare(sql);
99
+ try {
100
+ statement.run([...params]);
101
+ }
102
+ finally {
103
+ statement.finalize();
104
+ }
105
+ }
106
+ query(sql, params = []) {
107
+ assertConsumerSql(sql);
108
+ const statement = this.db.prepare(sql);
109
+ try {
110
+ return statement.all([...params]);
111
+ }
112
+ finally {
113
+ statement.finalize();
114
+ }
115
+ }
116
+ }
117
+ export class BedrockMutatorSql {
118
+ direct;
119
+ compileQuery;
120
+ constructor(direct, compileQuery) {
121
+ this.direct = direct;
122
+ this.compileQuery = compileQuery;
123
+ }
124
+ async exec(sql, params = []) {
125
+ this.direct.exec(sql, params);
126
+ }
127
+ async query(sql, params = []) {
128
+ return this.direct.query(sql, params);
129
+ }
130
+ async queryAst(ast) {
131
+ const compiled = this.compileQuery(ast);
132
+ return this.direct.query(compiled.sql, compiled.params.map(decodeBinding));
133
+ }
134
+ }
135
+ //# sourceMappingURL=sqlite-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-adapter.js","sourceRoot":"","sources":["../../packages/sync-browser-host/src/sqlite-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ export type JsonPrimitive = string | number | boolean | null;
2
+ export type JsonValue = JsonPrimitive | JsonValue[] | {
3
+ [key: string]: JsonValue;
4
+ };
5
+ export type NormalizedClaims = {
6
+ userID: string;
7
+ [claim: string]: JsonValue;
8
+ };
9
+ export type ZeroSchemaConfig = {
10
+ readonly tables: Readonly<Record<string, {
11
+ readonly columns: Readonly<Record<string, {
12
+ readonly type: string;
13
+ }>>;
14
+ readonly primaryKey: readonly string[];
15
+ }>>;
16
+ };
17
+ export interface SyncSql {
18
+ exec(sql: string, params?: readonly unknown[]): void;
19
+ query<Row extends Record<string, unknown> = Record<string, unknown>>(sql: string, params?: readonly unknown[]): Row[];
20
+ }
21
+ export interface MutatorSql {
22
+ exec(sql: string, params?: readonly unknown[]): Promise<void>;
23
+ query<Row extends Record<string, unknown> = Record<string, unknown>>(sql: string, params?: readonly unknown[]): Promise<Row[]>;
24
+ queryAst<Row extends Record<string, unknown> = Record<string, unknown>>(ast: JsonValue): Promise<Row[]>;
25
+ }
26
+ export type DeferredEffect = () => void | Promise<void>;
27
+ export type MutatorContext = {
28
+ claims: NormalizedClaims;
29
+ clientID: string;
30
+ mutationID: string;
31
+ defer(effect: DeferredEffect): void;
32
+ };
33
+ export type RegisteredMutator = (tx: MutatorSql, args: JsonValue, context: MutatorContext) => void | Promise<void>;
34
+ export type MutatorRegistry = Readonly<Record<string, RegisteredMutator>>;
35
+ export declare function registerMutators<const Registry extends Record<string, RegisteredMutator>>(registry: Registry): Readonly<Registry>;
36
+ export declare class MutationApplicationError extends Error {
37
+ readonly details: string;
38
+ constructor(details: string, message?: string);
39
+ }
40
+ export type VisibilityFilter = {
41
+ sql: string;
42
+ params?: readonly JsonPrimitive[];
43
+ };
44
+ export type VisibilityConfig = {
45
+ rowLocal: boolean | ((claims: NormalizedClaims) => boolean);
46
+ filter(table: string, claims: NormalizedClaims): VisibilityFilter | undefined;
47
+ };
48
+ export type QueryResolver = (name: string, args: readonly JsonValue[], claims: NormalizedClaims) => JsonValue | Promise<JsonValue>;
49
+ export type PullCaps = {
50
+ maxChangeRows: number;
51
+ maxChangeBytes: number;
52
+ };
53
+ export type BrowserSyncHostAssets = {
54
+ sqliteWasmUrl?: string | URL;
55
+ syncWasmUrl?: string | URL;
56
+ };
57
+ export type BrowserSyncHostConfig = {
58
+ storageKey: string;
59
+ assets?: BrowserSyncHostAssets;
60
+ schema: ZeroSchemaConfig;
61
+ initialize(sql: SyncSql): void;
62
+ authenticate(request: Request): NormalizedClaims | null | Promise<NormalizedClaims | null>;
63
+ mutators: MutatorRegistry;
64
+ visibility?: VisibilityConfig;
65
+ queryAware?: boolean | ((claims: NormalizedClaims) => boolean);
66
+ resolveQuery?: QueryResolver;
67
+ queryTransformVersion?: number | ((claims: NormalizedClaims) => number);
68
+ retainChanges?: number;
69
+ caps?: Partial<PullCaps>;
70
+ onDataChanged?: () => void;
71
+ };
72
+ export interface BrowserSyncHost {
73
+ handlePull(request: Request): Promise<Response>;
74
+ handlePush(request: Request): Promise<Response>;
75
+ fetch(request: Request): Promise<Response>;
76
+ query<Row extends Record<string, unknown> = Record<string, unknown>>(sql: string, params?: readonly unknown[]): Promise<Row[]>;
77
+ exec(sql: string, params?: readonly unknown[]): Promise<void>;
78
+ subscribe(listener: () => void): () => void;
79
+ close(): Promise<void>;
80
+ }
81
+ export interface BrowserSyncHostPortClient {
82
+ fetch(input: string | URL | Request, init?: RequestInit): Promise<Response>;
83
+ query<Row extends Record<string, unknown> = Record<string, unknown>>(sql: string, params?: readonly unknown[]): Promise<Row[]>;
84
+ exec(sql: string, params?: readonly unknown[]): Promise<void>;
85
+ subscribe(listener: () => void): () => void;
86
+ close(): void;
87
+ }
88
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../packages/sync-browser-host/src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export function registerMutators(registry) {
2
+ return Object.freeze({ ...registry });
3
+ }
4
+ export class MutationApplicationError extends Error {
5
+ details;
6
+ constructor(details, message = details) {
7
+ super(message);
8
+ this.details = details;
9
+ this.name = 'MutationApplicationError';
10
+ }
11
+ }
12
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../packages/sync-browser-host/src/types.ts"],"names":[],"mappings":"AAwDA,MAAM,UAAU,gBAAgB,CAE9B,QAAkB;IAClB,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAA;AACvC,CAAC;AAED,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IAEtC;IADX,YACW,OAAe,EACxB,OAAO,GAAG,OAAO;QAEjB,KAAK,CAAC,OAAO,CAAC,CAAA;QAHL,YAAO,GAAP,OAAO,CAAQ;QAIxB,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAA;IACxC,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=test-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-setup.d.ts","sourceRoot":"","sources":["../src/test-setup.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ // node 25 defines globalThis.localStorage by default, but without a
2
+ // --localstorage-file path its methods are undefined. replicache (inside the
3
+ // zero client) feature-detects localStorage by presence and then calls
4
+ // getItem, which throws and permanently stalls query completion. node 24 has
5
+ // no localStorage at all. install a functional in-memory stub in both cases
6
+ // (same approach as takeout's on-zero testSetup) so the zero client sees a
7
+ // working Storage on every node.
8
+ if (typeof globalThis.localStorage?.getItem !== 'function') {
9
+ const store = new Map();
10
+ Object.defineProperty(globalThis, 'localStorage', {
11
+ configurable: true,
12
+ value: {
13
+ get length() {
14
+ return store.size;
15
+ },
16
+ clear() {
17
+ store.clear();
18
+ },
19
+ getItem(key) {
20
+ return store.get(String(key)) ?? null;
21
+ },
22
+ key(index) {
23
+ return [...store.keys()][index] ?? null;
24
+ },
25
+ removeItem(key) {
26
+ store.delete(String(key));
27
+ },
28
+ setItem(key, value) {
29
+ store.set(String(key), String(value));
30
+ },
31
+ },
32
+ });
33
+ }
34
+ export {};
35
+ //# sourceMappingURL=test-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-setup.js","sourceRoot":"","sources":["../src/test-setup.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,6EAA6E;AAC7E,uEAAuE;AACvE,6EAA6E;AAC7E,4EAA4E;AAC5E,2EAA2E;AAC3E,iCAAiC;AACjC,IAAI,OAAO,UAAU,CAAC,YAAY,EAAE,OAAO,KAAK,UAAU,EAAE,CAAC;IAC3D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAA;IACvC,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,cAAc,EAAE;QAChD,YAAY,EAAE,IAAI;QAClB,KAAK,EAAE;YACL,IAAI,MAAM;gBACR,OAAO,KAAK,CAAC,IAAI,CAAA;YACnB,CAAC;YACD,KAAK;gBACH,KAAK,CAAC,KAAK,EAAE,CAAA;YACf,CAAC;YACD,OAAO,CAAC,GAAW;gBACjB,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAA;YACvC,CAAC;YACD,GAAG,CAAC,KAAa;gBACf,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAA;YACzC,CAAC;YACD,UAAU,CAAC,GAAW;gBACpB,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;YAC3B,CAAC;YACD,OAAO,CAAC,GAAW,EAAE,KAAa;gBAChC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;YACvC,CAAC;SACF;KACF,CAAC,CAAA;AACJ,CAAC"}
@@ -17,11 +17,7 @@ export declare function startZeroHttpHarness(opts?: {
17
17
  rows(table: string): Row[];
18
18
  close(): Promise<void>;
19
19
  };
20
- transport: {
21
- pull(): Promise<void>;
22
- readonly connections: number;
23
- uninstall(): void;
24
- };
20
+ transport: import("./transport.js").HttpPullTransport;
25
21
  createZero(userID: string, createOpts?: {
26
22
  storageKey?: string;
27
23
  pingTimeoutMs?: number;
@@ -29,7 +25,7 @@ export declare function startZeroHttpHarness(opts?: {
29
25
  close(): Promise<void>;
30
26
  }>;
31
27
  export declare function waitForComplete<T>(view: {
32
- addListener(listener: (data: T, resultType: string) => void): () => void;
28
+ addListener(listener: (data: any, resultType: string) => void): () => void;
33
29
  }): Promise<T>;
34
30
  export declare function eventually(assertion: () => void | Promise<void>, timeout?: number): Promise<void>;
35
31
  export declare function sleep(ms: number): Promise<unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"test-harness.d.ts","sourceRoot":"","sources":["../../src/zero-http/test-harness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAErC,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AACpF,OAAO,EAAuB,KAAK,GAAG,EAAE,MAAM,aAAa,CAAA;AAK3D,MAAM,MAAM,WAAW,GAAG,IAAI,CAC5B,OAAO,qBAAqB,EAC5B,OAAO,uBAAuB,CAC/B,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAA;AAE9E,wBAAsB,oBAAoB,CAAC,IAAI,CAAC,EAAE;IAChD,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;KAAE,CAAA;IACxD,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,KAAK,OAAO,KAAK,CAAA;CACtD;;;;;;;;;;;;uBAca,MAAM,eACD;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3D,WAAW;;GAqBjB;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE;IACvC,WAAW,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;CACzE,GAAG,OAAO,CAAC,CAAC,CAAC,CAcb;AAED,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,SAAQ,iBAatF;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,oBAE/B"}
1
+ {"version":3,"file":"test-harness.d.ts","sourceRoot":"","sources":["../../src/zero-http/test-harness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAErC,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AACpF,OAAO,EAAuB,KAAK,GAAG,EAAE,MAAM,aAAa,CAAA;AAK3D,MAAM,MAAM,WAAW,GAAG,IAAI,CAC5B,OAAO,qBAAqB,EAC5B,OAAO,uBAAuB,CAC/B,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAA;AAE9E,wBAAsB,oBAAoB,CAAC,IAAI,CAAC,EAAE;IAChD,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;KAAE,CAAA;IACxD,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,KAAK,OAAO,KAAK,CAAA;CACtD;;;;;;;;uBAca,MAAM,eACD;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3D,WAAW;;GAqBjB;AAID,wBAAgB,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE;IACvC,WAAW,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;CAC3E,GAAG,OAAO,CAAC,CAAC,CAAC,CAcb;AAED,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,SAAQ,iBAatF;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,oBAE/B"}
@@ -1,13 +1,13 @@
1
1
  import { Zero } from '@rocicorp/zero';
2
2
  import { zeroHttpFixtureMutators, zeroHttpFixtureSchema } from './fixture-schema.js';
3
3
  import { startZeroHttpServer } from './server.js';
4
- import { installZeroHttpTransport } from './transport.js';
4
+ import { installHttpPullTransport } from './transport.js';
5
5
  let storageID = 0;
6
6
  export async function startZeroHttpHarness(opts) {
7
7
  const server = await startZeroHttpServer({ seed: opts?.seed });
8
8
  const baseFetch = (input, init) => globalThis.fetch(input, init);
9
9
  const transportFetch = opts?.interceptFetch ? opts.interceptFetch(baseFetch) : baseFetch;
10
- const transport = installZeroHttpTransport({
10
+ const transport = installHttpPullTransport({
11
11
  origin: server.url,
12
12
  fetch: transportFetch,
13
13
  });
@@ -38,6 +38,8 @@ export async function startZeroHttpHarness(opts) {
38
38
  },
39
39
  };
40
40
  }
41
+ // the view's listener data is Immutable<T>; results are deep-cloned to a
42
+ // plain mutable T for assertions, so the listener param is typed loosely
41
43
  export function waitForComplete(view) {
42
44
  return new Promise((resolve, reject) => {
43
45
  const timeout = setTimeout(() => reject(new Error('timed out waiting for complete query')), 5_000);
@@ -1 +1 @@
1
- {"version":3,"file":"test-harness.js","sourceRoot":"","sources":["../../src/zero-http/test-harness.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test-harness.js","sourceRoot":"","sources":["../../src/zero-http/test-harness.ts"],"names":[],"mappings":"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"}