@rocicorp/zero 0.26.0 → 0.26.1-canary.3

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 (41) hide show
  1. package/out/zero/package.json.js +1 -1
  2. package/out/zero-cache/src/observability/events.d.ts.map +1 -1
  3. package/out/zero-cache/src/observability/events.js +28 -9
  4. package/out/zero-cache/src/observability/events.js.map +1 -1
  5. package/out/zero-cache/src/services/change-source/pg/backfill-stream.d.ts.map +1 -1
  6. package/out/zero-cache/src/services/change-source/pg/backfill-stream.js +26 -13
  7. package/out/zero-cache/src/services/change-source/pg/backfill-stream.js.map +1 -1
  8. package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts +6 -1
  9. package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts.map +1 -1
  10. package/out/zero-cache/src/services/change-source/pg/initial-sync.js +64 -18
  11. package/out/zero-cache/src/services/change-source/pg/initial-sync.js.map +1 -1
  12. package/out/zero-cache/src/services/change-source/pg/schema/ddl.d.ts.map +1 -1
  13. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js +6 -1
  14. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js.map +1 -1
  15. package/out/zero-cache/src/services/change-source/pg/schema/init.d.ts.map +1 -1
  16. package/out/zero-cache/src/services/change-source/pg/schema/init.js +12 -8
  17. package/out/zero-cache/src/services/change-source/pg/schema/init.js.map +1 -1
  18. package/out/zero-cache/src/services/change-source/protocol/current/data.d.ts +26 -0
  19. package/out/zero-cache/src/services/change-source/protocol/current/data.d.ts.map +1 -1
  20. package/out/zero-cache/src/services/change-source/protocol/current/data.js +15 -3
  21. package/out/zero-cache/src/services/change-source/protocol/current/data.js.map +1 -1
  22. package/out/zero-cache/src/services/change-source/protocol/current/downstream.d.ts +30 -0
  23. package/out/zero-cache/src/services/change-source/protocol/current/downstream.d.ts.map +1 -1
  24. package/out/zero-cache/src/services/change-source/protocol/current.js +2 -1
  25. package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts +10 -0
  26. package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts.map +1 -1
  27. package/out/zero-cache/src/services/replicator/change-processor.d.ts +2 -0
  28. package/out/zero-cache/src/services/replicator/change-processor.d.ts.map +1 -1
  29. package/out/zero-cache/src/services/replicator/change-processor.js +8 -6
  30. package/out/zero-cache/src/services/replicator/change-processor.js.map +1 -1
  31. package/out/zero-cache/src/services/replicator/incremental-sync.d.ts.map +1 -1
  32. package/out/zero-cache/src/services/replicator/incremental-sync.js +39 -1
  33. package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -1
  34. package/out/zero-cache/src/services/replicator/replication-status.d.ts +4 -3
  35. package/out/zero-cache/src/services/replicator/replication-status.d.ts.map +1 -1
  36. package/out/zero-cache/src/services/replicator/replication-status.js +24 -9
  37. package/out/zero-cache/src/services/replicator/replication-status.js.map +1 -1
  38. package/out/zero-client/src/client/version.js +1 -1
  39. package/out/zero-events/src/status.d.ts +8 -0
  40. package/out/zero-events/src/status.d.ts.map +1 -1
  41. package/package.json +1 -1
@@ -1,22 +1,35 @@
1
1
  import { createSilentLogContext } from "../../../../shared/src/logging-test-utils.js";
2
2
  import { listIndexes, computeZqlSpecs } from "../../db/lite-tables.js";
3
- import { makeErrorDetails, publishCriticalEvent, publishEvent } from "../../observability/events.js";
3
+ import { makeErrorDetails, publishCriticalEvent } from "../../observability/events.js";
4
4
  const byKeys = (a, b) => a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0;
5
5
  class ReplicationStatusPublisher {
6
6
  #db;
7
+ #publish;
7
8
  #timer;
8
- constructor(db) {
9
+ constructor(db, publishFn = publishCriticalEvent) {
9
10
  this.#db = db;
11
+ this.#publish = publishFn;
10
12
  }
11
- publish(lc, stage, description, interval = 0) {
13
+ publish(lc, stage, description, interval = 0, extraState, now = /* @__PURE__ */ new Date()) {
12
14
  this.stop();
13
- publishEvent(
15
+ const event = replicationStatusEvent(
14
16
  lc,
15
- replicationStatusEvent(lc, this.#db, stage, "OK", description)
17
+ this.#db,
18
+ stage,
19
+ "OK",
20
+ description,
21
+ now
16
22
  );
23
+ if (event.state) {
24
+ event.state = {
25
+ ...event.state,
26
+ ...extraState?.()
27
+ };
28
+ }
29
+ void this.#publish(lc, event);
17
30
  if (interval) {
18
31
  this.#timer = setInterval(
19
- () => this.publish(lc, stage, description, interval),
32
+ () => this.publish(lc, stage, description, interval, extraState),
20
33
  interval
21
34
  );
22
35
  }
@@ -25,7 +38,7 @@ class ReplicationStatusPublisher {
25
38
  async publishAndThrowError(lc, stage, e) {
26
39
  this.stop();
27
40
  const event = replicationStatusError(lc, stage, "ERROR", this.#db);
28
- await publishCriticalEvent(lc, event);
41
+ await this.#publish(lc, event);
29
42
  throw e;
30
43
  }
31
44
  stop() {
@@ -51,6 +64,7 @@ function replicationStatusError(lc, stage, e, db, now = /* @__PURE__ */ new Date
51
64
  return event;
52
65
  }
53
66
  function replicationStatusEvent(lc, db, stage, status, description, now = /* @__PURE__ */ new Date()) {
67
+ const start = performance.now();
54
68
  try {
55
69
  return {
56
70
  type: "zero/events/status/replication/v1",
@@ -80,6 +94,9 @@ function replicationStatusEvent(lc, db, stage, status, description, now = /* @__
80
94
  replicaSize: 0
81
95
  }
82
96
  };
97
+ } finally {
98
+ const elapsed = (performance.now() - start).toFixed(3);
99
+ lc.debug?.(`computed schema for replication event (${elapsed} ms)`);
83
100
  }
84
101
  }
85
102
  function getReplicatedTables(db) {
@@ -88,8 +105,6 @@ function getReplicatedTables(db) {
88
105
  createSilentLogContext(),
89
106
  // avoid logging warnings about indexes
90
107
  db,
91
- // TODO: Consider exposing backfilling columns with an indication
92
- // of backfill status.
93
108
  { includeBackfillingColumns: false },
94
109
  /* @__PURE__ */ new Map(),
95
110
  fullTables
@@ -1 +1 @@
1
- {"version":3,"file":"replication-status.js","sources":["../../../../../../zero-cache/src/services/replicator/replication-status.ts"],"sourcesContent":["import type {LogContext} from '@rocicorp/logger';\nimport {createSilentLogContext} from '../../../../shared/src/logging-test-utils.ts';\nimport type {JSONObject} from '../../../../zero-events/src/json.ts';\nimport type {\n ReplicatedIndex,\n ReplicatedTable,\n ReplicationStage,\n ReplicationStatusEvent,\n Status,\n} from '../../../../zero-events/src/status.ts';\nimport type {Database} from '../../../../zqlite/src/db.ts';\nimport {computeZqlSpecs, listIndexes} from '../../db/lite-tables.ts';\nimport type {LiteTableSpec} from '../../db/specs.ts';\nimport {\n makeErrorDetails,\n publishCriticalEvent,\n publishEvent,\n} from '../../observability/events.ts';\n\nconst byKeys = (a: [string, unknown], b: [string, unknown]) =>\n a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0;\n\nexport class ReplicationStatusPublisher {\n readonly #db: Database;\n #timer: NodeJS.Timeout | undefined;\n\n constructor(db: Database) {\n this.#db = db;\n }\n\n publish(\n lc: LogContext,\n stage: ReplicationStage,\n description?: string,\n interval = 0,\n ): this {\n this.stop();\n publishEvent(\n lc,\n replicationStatusEvent(lc, this.#db, stage, 'OK', description),\n );\n\n if (interval) {\n this.#timer = setInterval(\n () => this.publish(lc, stage, description, interval),\n interval,\n );\n }\n return this;\n }\n\n async publishAndThrowError(\n lc: LogContext,\n stage: ReplicationStage,\n e: unknown,\n ): Promise<never> {\n this.stop();\n const event = replicationStatusError(lc, stage, 'ERROR', this.#db);\n await publishCriticalEvent(lc, event);\n throw e;\n }\n\n stop(): this {\n clearInterval(this.#timer);\n return this;\n }\n}\n\nexport async function publishReplicationError(\n lc: LogContext,\n stage: ReplicationStage,\n description: string,\n errorDetails?: JSONObject,\n now = new Date(),\n) {\n const event: ReplicationStatusEvent = {\n type: 'zero/events/status/replication/v1',\n component: 'replication',\n status: 'ERROR',\n stage,\n description,\n errorDetails,\n time: now.toISOString(),\n };\n await publishCriticalEvent(lc, event);\n}\n\nexport function replicationStatusError(\n lc: LogContext,\n stage: ReplicationStage,\n e: unknown,\n db?: Database,\n now = new Date(),\n) {\n const event = replicationStatusEvent(lc, db, stage, 'ERROR', String(e), now);\n event.errorDetails = makeErrorDetails(e);\n return event;\n}\n\n// Exported for testing.\nexport function replicationStatusEvent(\n lc: LogContext,\n db: Database | undefined,\n stage: ReplicationStage,\n status: Status,\n description?: string,\n now = new Date(),\n): ReplicationStatusEvent {\n try {\n return {\n type: 'zero/events/status/replication/v1',\n component: 'replication',\n status,\n stage,\n description,\n time: now.toISOString(),\n state: {\n tables: db ? getReplicatedTables(db) : [],\n indexes: db ? getReplicatedIndexes(db) : [],\n replicaSize: db ? getReplicaSize(db) : undefined,\n },\n };\n } catch (e) {\n lc.warn?.(`Unable to create full ReplicationStatusEvent`, e);\n return {\n type: 'zero/events/status/replication/v1',\n component: 'replication',\n status,\n stage,\n description,\n time: now.toISOString(),\n state: {\n tables: [],\n indexes: [],\n replicaSize: 0,\n },\n };\n }\n}\n\nfunction getReplicatedTables(db: Database): ReplicatedTable[] {\n const fullTables = new Map<string, LiteTableSpec>();\n const clientSchema = computeZqlSpecs(\n createSilentLogContext(), // avoid logging warnings about indexes\n db,\n // TODO: Consider exposing backfilling columns with an indication\n // of backfill status.\n {includeBackfillingColumns: false},\n new Map(),\n fullTables,\n );\n\n return [...fullTables.entries()].sort(byKeys).map(([table, spec]) => ({\n table,\n columns: Object.entries(spec.columns)\n .sort(byKeys)\n .map(([column, spec]) => ({\n column,\n upstreamType: spec.dataType.split('|')[0],\n clientType: clientSchema.get(table)?.zqlSpec[column]?.type ?? null,\n })),\n }));\n}\n\nfunction getReplicatedIndexes(db: Database): ReplicatedIndex[] {\n return listIndexes(db).map(({tableName: table, columns, unique}) => ({\n table,\n unique,\n columns: Object.entries(columns)\n .sort(byKeys)\n .map(([column, dir]) => ({column, dir})),\n }));\n}\n\nfunction getReplicaSize(db: Database) {\n const [{page_count: pageCount}] = db.pragma<{page_count: number}>(\n 'page_count',\n );\n const [{page_size: pageSize}] = db.pragma<{page_size: number}>('page_size');\n return pageCount * pageSize;\n}\n"],"names":["spec"],"mappings":"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"}
1
+ {"version":3,"file":"replication-status.js","sources":["../../../../../../zero-cache/src/services/replicator/replication-status.ts"],"sourcesContent":["import type {LogContext} from '@rocicorp/logger';\nimport {createSilentLogContext} from '../../../../shared/src/logging-test-utils.ts';\nimport type {JSONObject} from '../../../../zero-events/src/json.ts';\nimport type {\n ReplicatedIndex,\n ReplicatedTable,\n ReplicationStage,\n ReplicationState,\n ReplicationStatusEvent,\n Status,\n} from '../../../../zero-events/src/status.ts';\nimport type {Database} from '../../../../zqlite/src/db.ts';\nimport {computeZqlSpecs, listIndexes} from '../../db/lite-tables.ts';\nimport type {LiteTableSpec} from '../../db/specs.ts';\nimport {\n makeErrorDetails,\n publishCriticalEvent,\n} from '../../observability/events.ts';\n\nconst byKeys = (a: [string, unknown], b: [string, unknown]) =>\n a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0;\n\nexport class ReplicationStatusPublisher {\n readonly #db: Database;\n readonly #publish: typeof publishCriticalEvent;\n #timer: NodeJS.Timeout | undefined;\n\n constructor(db: Database, publishFn = publishCriticalEvent) {\n this.#db = db;\n this.#publish = publishFn;\n }\n\n publish(\n lc: LogContext,\n stage: ReplicationStage,\n description?: string,\n interval = 0,\n extraState?: () => Partial<ReplicationState>,\n now = new Date(),\n ): this {\n this.stop();\n const event = replicationStatusEvent(\n lc,\n this.#db,\n stage,\n 'OK',\n description,\n now,\n );\n if (event.state) {\n event.state = {\n ...event.state,\n ...extraState?.(),\n };\n }\n void this.#publish(lc, event);\n\n if (interval) {\n this.#timer = setInterval(\n () => this.publish(lc, stage, description, interval, extraState),\n interval,\n );\n }\n return this;\n }\n\n async publishAndThrowError(\n lc: LogContext,\n stage: ReplicationStage,\n e: unknown,\n ): Promise<never> {\n this.stop();\n const event = replicationStatusError(lc, stage, 'ERROR', this.#db);\n await this.#publish(lc, event);\n throw e;\n }\n\n stop(): this {\n clearInterval(this.#timer);\n return this;\n }\n}\n\nexport async function publishReplicationError(\n lc: LogContext,\n stage: ReplicationStage,\n description: string,\n errorDetails?: JSONObject,\n now = new Date(),\n) {\n const event: ReplicationStatusEvent = {\n type: 'zero/events/status/replication/v1',\n component: 'replication',\n status: 'ERROR',\n stage,\n description,\n errorDetails,\n time: now.toISOString(),\n };\n await publishCriticalEvent(lc, event);\n}\n\nexport function replicationStatusError(\n lc: LogContext,\n stage: ReplicationStage,\n e: unknown,\n db?: Database,\n now = new Date(),\n) {\n const event = replicationStatusEvent(lc, db, stage, 'ERROR', String(e), now);\n event.errorDetails = makeErrorDetails(e);\n return event;\n}\n\n// Exported for testing.\nexport function replicationStatusEvent(\n lc: LogContext,\n db: Database | undefined,\n stage: ReplicationStage,\n status: Status,\n description?: string,\n now = new Date(),\n): ReplicationStatusEvent {\n const start = performance.now();\n try {\n return {\n type: 'zero/events/status/replication/v1',\n component: 'replication',\n status,\n stage,\n description,\n time: now.toISOString(),\n state: {\n tables: db ? getReplicatedTables(db) : [],\n indexes: db ? getReplicatedIndexes(db) : [],\n replicaSize: db ? getReplicaSize(db) : undefined,\n },\n };\n } catch (e) {\n lc.warn?.(`Unable to create full ReplicationStatusEvent`, e);\n return {\n type: 'zero/events/status/replication/v1',\n component: 'replication',\n status,\n stage,\n description,\n time: now.toISOString(),\n state: {\n tables: [],\n indexes: [],\n replicaSize: 0,\n },\n };\n } finally {\n const elapsed = (performance.now() - start).toFixed(3);\n lc.debug?.(`computed schema for replication event (${elapsed} ms)`);\n }\n}\n\nfunction getReplicatedTables(db: Database): ReplicatedTable[] {\n const fullTables = new Map<string, LiteTableSpec>();\n const clientSchema = computeZqlSpecs(\n createSilentLogContext(), // avoid logging warnings about indexes\n db,\n {includeBackfillingColumns: false},\n new Map(),\n fullTables,\n );\n\n return [...fullTables.entries()].sort(byKeys).map(([table, spec]) => ({\n table,\n columns: Object.entries(spec.columns)\n .sort(byKeys)\n .map(([column, spec]) => ({\n column,\n upstreamType: spec.dataType.split('|')[0],\n clientType: clientSchema.get(table)?.zqlSpec[column]?.type ?? null,\n })),\n }));\n}\n\nfunction getReplicatedIndexes(db: Database): ReplicatedIndex[] {\n return listIndexes(db).map(({tableName: table, columns, unique}) => ({\n table,\n unique,\n columns: Object.entries(columns)\n .sort(byKeys)\n .map(([column, dir]) => ({column, dir})),\n }));\n}\n\nfunction getReplicaSize(db: Database) {\n const [{page_count: pageCount}] = db.pragma<{page_count: number}>(\n 'page_count',\n );\n const [{page_size: pageSize}] = db.pragma<{page_size: number}>('page_size');\n return pageCount * pageSize;\n}\n"],"names":["spec"],"mappings":";;;AAmBA,MAAM,SAAS,CAAC,GAAsB,MACpC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;AAEhC,MAAM,2BAA2B;AAAA,EAC7B;AAAA,EACA;AAAA,EACT;AAAA,EAEA,YAAY,IAAc,YAAY,sBAAsB;AAC1D,SAAK,MAAM;AACX,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,QACE,IACA,OACA,aACA,WAAW,GACX,YACA,MAAM,oBAAI,QACJ;AACN,SAAK,KAAA;AACL,UAAM,QAAQ;AAAA,MACZ;AAAA,MACA,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAEF,QAAI,MAAM,OAAO;AACf,YAAM,QAAQ;AAAA,QACZ,GAAG,MAAM;AAAA,QACT,GAAG,aAAA;AAAA,MAAa;AAAA,IAEpB;AACA,SAAK,KAAK,SAAS,IAAI,KAAK;AAE5B,QAAI,UAAU;AACZ,WAAK,SAAS;AAAA,QACZ,MAAM,KAAK,QAAQ,IAAI,OAAO,aAAa,UAAU,UAAU;AAAA,QAC/D;AAAA,MAAA;AAAA,IAEJ;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,qBACJ,IACA,OACA,GACgB;AAChB,SAAK,KAAA;AACL,UAAM,QAAQ,uBAAuB,IAAI,OAAO,SAAS,KAAK,GAAG;AACjE,UAAM,KAAK,SAAS,IAAI,KAAK;AAC7B,UAAM;AAAA,EACR;AAAA,EAEA,OAAa;AACX,kBAAc,KAAK,MAAM;AACzB,WAAO;AAAA,EACT;AACF;AAEA,eAAsB,wBACpB,IACA,OACA,aACA,cACA,MAAM,oBAAI,QACV;AACA,QAAM,QAAgC;AAAA,IACpC,MAAM;AAAA,IACN,WAAW;AAAA,IACX,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM,IAAI,YAAA;AAAA,EAAY;AAExB,QAAM,qBAAqB,IAAI,KAAK;AACtC;AAEO,SAAS,uBACd,IACA,OACA,GACA,IACA,MAAM,oBAAI,QACV;AACA,QAAM,QAAQ,uBAAuB,IAAI,IAAI,OAAO,SAAS,OAAO,CAAC,GAAG,GAAG;AAC3E,QAAM,eAAe,iBAAiB,CAAC;AACvC,SAAO;AACT;AAGO,SAAS,uBACd,IACA,IACA,OACA,QACA,aACA,MAAM,oBAAI,QACc;AACxB,QAAM,QAAQ,YAAY,IAAA;AAC1B,MAAI;AACF,WAAO;AAAA,MACL,MAAM;AAAA,MACN,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM,IAAI,YAAA;AAAA,MACV,OAAO;AAAA,QACL,QAAQ,KAAK,oBAAoB,EAAE,IAAI,CAAA;AAAA,QACvC,SAAS,KAAK,qBAAqB,EAAE,IAAI,CAAA;AAAA,QACzC,aAAa,KAAK,eAAe,EAAE,IAAI;AAAA,MAAA;AAAA,IACzC;AAAA,EAEJ,SAAS,GAAG;AACV,OAAG,OAAO,gDAAgD,CAAC;AAC3D,WAAO;AAAA,MACL,MAAM;AAAA,MACN,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM,IAAI,YAAA;AAAA,MACV,OAAO;AAAA,QACL,QAAQ,CAAA;AAAA,QACR,SAAS,CAAA;AAAA,QACT,aAAa;AAAA,MAAA;AAAA,IACf;AAAA,EAEJ,UAAA;AACE,UAAM,WAAW,YAAY,IAAA,IAAQ,OAAO,QAAQ,CAAC;AACrD,OAAG,QAAQ,0CAA0C,OAAO,MAAM;AAAA,EACpE;AACF;AAEA,SAAS,oBAAoB,IAAiC;AAC5D,QAAM,iCAAiB,IAAA;AACvB,QAAM,eAAe;AAAA,IACnB,uBAAA;AAAA;AAAA,IACA;AAAA,IACA,EAAC,2BAA2B,MAAA;AAAA,wBACxB,IAAA;AAAA,IACJ;AAAA,EAAA;AAGF,SAAO,CAAC,GAAG,WAAW,QAAA,CAAS,EAAE,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,OAAO,IAAI,OAAO;AAAA,IACpE;AAAA,IACA,SAAS,OAAO,QAAQ,KAAK,OAAO,EACjC,KAAK,MAAM,EACX,IAAI,CAAC,CAAC,QAAQA,KAAI,OAAO;AAAA,MACxB;AAAA,MACA,cAAcA,MAAK,SAAS,MAAM,GAAG,EAAE,CAAC;AAAA,MACxC,YAAY,aAAa,IAAI,KAAK,GAAG,QAAQ,MAAM,GAAG,QAAQ;AAAA,IAAA,EAC9D;AAAA,EAAA,EACJ;AACJ;AAEA,SAAS,qBAAqB,IAAiC;AAC7D,SAAO,YAAY,EAAE,EAAE,IAAI,CAAC,EAAC,WAAW,OAAO,SAAS,cAAa;AAAA,IACnE;AAAA,IACA;AAAA,IACA,SAAS,OAAO,QAAQ,OAAO,EAC5B,KAAK,MAAM,EACX,IAAI,CAAC,CAAC,QAAQ,GAAG,OAAO,EAAC,QAAQ,MAAK;AAAA,EAAA,EACzC;AACJ;AAEA,SAAS,eAAe,IAAc;AACpC,QAAM,CAAC,EAAC,YAAY,UAAA,CAAU,IAAI,GAAG;AAAA,IACnC;AAAA,EAAA;AAEF,QAAM,CAAC,EAAC,WAAW,SAAA,CAAS,IAAI,GAAG,OAA4B,WAAW;AAC1E,SAAO,YAAY;AACrB;"}
@@ -1,4 +1,4 @@
1
- const version = "0.26.0";
1
+ const version = "0.26.1-canary.3";
2
2
  export {
3
3
  version
4
4
  };
@@ -56,10 +56,18 @@ export type ReplicatedIndex = {
56
56
  columns: IndexedColumn[];
57
57
  unique: boolean;
58
58
  };
59
+ export type DownloadStatus = {
60
+ table: string;
61
+ columns: string[];
62
+ totalRows: number;
63
+ totalBytes?: number | undefined;
64
+ rows: number;
65
+ };
59
66
  export type ReplicationState = {
60
67
  tables: ReplicatedTable[];
61
68
  indexes: ReplicatedIndex[];
62
69
  replicaSize?: number | undefined;
70
+ downloadStatus?: DownloadStatus[] | undefined;
63
71
  };
64
72
  export type ReplicationStage = 'Initializing' | 'Indexing' | 'Replicating';
65
73
  export declare const REPLICATION_STATUS_EVENT_V1_TYPE = "zero/events/status/replication/v1";
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../../zero-events/src/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,WAAW,CAAC;AAE1C,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC;AAEpC,eAAO,MAAM,wBAAwB,wBAAwB,CAAC;AAE9D;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC5C,IAAI,EAAE,GAAG,OAAO,wBAAwB,GAAG,MAAM,EAAE,CAAC;IAEpD;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IAEf;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEjC,6DAA6D;IAC7D,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAE/B,sEAAsE;IACtE,YAAY,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;CACvC;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,KAAK,GAAG,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG,UAAU,GAAG,aAAa,CAAC;AAE3E,eAAO,MAAM,gCAAgC,sCACR,CAAC;AAEtC,MAAM,WAAW,sBAAuB,SAAQ,WAAW;IACzD,IAAI,EAAE,OAAO,gCAAgC,CAAC;IAC9C,SAAS,EAAE,aAAa,CAAC;IACzB,KAAK,EAAE,gBAAgB,CAAC;IACxB,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../../zero-events/src/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,WAAW,CAAC;AAE1C,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC;AAEpC,eAAO,MAAM,wBAAwB,wBAAwB,CAAC;AAE9D;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC5C,IAAI,EAAE,GAAG,OAAO,wBAAwB,GAAG,MAAM,EAAE,CAAC;IAEpD;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IAEf;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEjC,6DAA6D;IAC7D,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAE/B,sEAAsE;IACtE,YAAY,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;CACvC;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,KAAK,GAAG,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEhC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,cAAc,CAAC,EAAE,cAAc,EAAE,GAAG,SAAS,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG,UAAU,GAAG,aAAa,CAAC;AAE3E,eAAO,MAAM,gCAAgC,sCACR,CAAC;AAEtC,MAAM,WAAW,sBAAuB,SAAQ,WAAW;IACzD,IAAI,EAAE,OAAO,gCAAgC,CAAC;IAC9C,SAAS,EAAE,aAAa,CAAC;IACzB,KAAK,EAAE,gBAAgB,CAAC;IACxB,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rocicorp/zero",
3
- "version": "0.26.0",
3
+ "version": "0.26.1-canary.3",
4
4
  "description": "Zero is a web framework for serverless web development.",
5
5
  "author": "Rocicorp, Inc.",
6
6
  "repository": {