@rocicorp/zero 0.1.2024100802 → 0.2.2024101100

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 (132) hide show
  1. package/out/replicache/src/kv/idb-store.d.ts.map +1 -1
  2. package/out/replicache/src/replicache-impl.d.ts +0 -1
  3. package/out/replicache/src/replicache-impl.d.ts.map +1 -1
  4. package/out/shared/src/browser-env.d.ts +4 -2
  5. package/out/shared/src/browser-env.d.ts.map +1 -1
  6. package/out/shared/src/h64-with-reverse.d.ts +6 -0
  7. package/out/shared/src/h64-with-reverse.d.ts.map +1 -0
  8. package/out/shared/src/h64-with-reverse.js +13 -0
  9. package/out/shared/src/h64-with-reverse.js.map +1 -0
  10. package/out/shared/src/reverse-string.d.ts +2 -0
  11. package/out/shared/src/reverse-string.d.ts.map +1 -0
  12. package/out/shared/src/reverse-string.js +8 -0
  13. package/out/shared/src/reverse-string.js.map +1 -0
  14. package/out/zero-cache/src/config/zero-config.d.ts +25 -0
  15. package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
  16. package/out/zero-cache/src/config/zero-config.js +8 -0
  17. package/out/zero-cache/src/config/zero-config.js.map +1 -1
  18. package/out/zero-cache/src/db/statements.d.ts +1 -0
  19. package/out/zero-cache/src/db/statements.d.ts.map +1 -1
  20. package/out/zero-cache/src/db/statements.js +3 -0
  21. package/out/zero-cache/src/db/statements.js.map +1 -1
  22. package/out/zero-cache/src/server/change-streamer.js +1 -1
  23. package/out/zero-cache/src/server/change-streamer.js.map +1 -1
  24. package/out/zero-cache/src/server/life-cycle.d.ts +1 -1
  25. package/out/zero-cache/src/server/life-cycle.d.ts.map +1 -1
  26. package/out/zero-cache/src/server/life-cycle.js +20 -5
  27. package/out/zero-cache/src/server/life-cycle.js.map +1 -1
  28. package/out/zero-cache/src/server/logging.d.ts.map +1 -1
  29. package/out/zero-cache/src/server/logging.js +43 -4
  30. package/out/zero-cache/src/server/logging.js.map +1 -1
  31. package/out/zero-cache/src/server/replicator.js +1 -1
  32. package/out/zero-cache/src/server/replicator.js.map +1 -1
  33. package/out/zero-cache/src/server/syncer.js +1 -1
  34. package/out/zero-cache/src/server/syncer.js.map +1 -1
  35. package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts +1 -1
  36. package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts.map +1 -1
  37. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +6 -5
  38. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js.map +1 -1
  39. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js +2 -2
  40. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -1
  41. package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts +1 -1
  42. package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts.map +1 -1
  43. package/out/zero-cache/src/services/change-streamer/pg/initial-sync.d.ts.map +1 -1
  44. package/out/zero-cache/src/services/change-streamer/pg/initial-sync.js +3 -3
  45. package/out/zero-cache/src/services/change-streamer/pg/initial-sync.js.map +1 -1
  46. package/out/zero-cache/src/services/change-streamer/pg/schema/lite.d.ts +2 -1
  47. package/out/zero-cache/src/services/change-streamer/pg/schema/lite.d.ts.map +1 -1
  48. package/out/zero-cache/src/services/change-streamer/pg/schema/lite.js +19 -67
  49. package/out/zero-cache/src/services/change-streamer/pg/schema/lite.js.map +1 -1
  50. package/out/zero-cache/src/services/dispatcher/dispatcher.d.ts.map +1 -1
  51. package/out/zero-cache/src/services/dispatcher/dispatcher.js +0 -4
  52. package/out/zero-cache/src/services/dispatcher/dispatcher.js.map +1 -1
  53. package/out/zero-cache/src/services/mutagen/mutagen.d.ts.map +1 -1
  54. package/out/zero-cache/src/services/mutagen/mutagen.js +4 -4
  55. package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
  56. package/out/zero-cache/src/services/replicator/incremental-sync.d.ts +3 -3
  57. package/out/zero-cache/src/services/replicator/incremental-sync.d.ts.map +1 -1
  58. package/out/zero-cache/src/services/replicator/incremental-sync.js +57 -32
  59. package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -1
  60. package/out/zero-cache/src/services/replicator/replicator.js +1 -1
  61. package/out/zero-cache/src/services/replicator/replicator.js.map +1 -1
  62. package/out/zero-cache/src/services/replicator/schema/change-log.d.ts +4 -4
  63. package/out/zero-cache/src/services/replicator/schema/change-log.d.ts.map +1 -1
  64. package/out/zero-cache/src/services/replicator/schema/change-log.js.map +1 -1
  65. package/out/zero-cache/src/services/running-state.js +3 -3
  66. package/out/zero-cache/src/services/running-state.js.map +1 -1
  67. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts +5 -7
  68. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +1 -1
  69. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +9 -9
  70. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
  71. package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts +9 -4
  72. package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts.map +1 -1
  73. package/out/zero-cache/src/services/view-syncer/snapshotter.js +24 -12
  74. package/out/zero-cache/src/services/view-syncer/snapshotter.js.map +1 -1
  75. package/out/zero-cache/src/types/lite.d.ts +30 -8
  76. package/out/zero-cache/src/types/lite.d.ts.map +1 -1
  77. package/out/zero-cache/src/types/lite.js +114 -15
  78. package/out/zero-cache/src/types/lite.js.map +1 -1
  79. package/out/zero-cache/src/types/pg.d.ts +21 -0
  80. package/out/zero-cache/src/types/pg.d.ts.map +1 -1
  81. package/out/zero-cache/src/types/pg.js +49 -6
  82. package/out/zero-cache/src/types/pg.js.map +1 -1
  83. package/out/zero-cache/src/types/row-key.d.ts +4 -1
  84. package/out/zero-cache/src/types/row-key.d.ts.map +1 -1
  85. package/out/zero-cache/src/types/row-key.js +5 -14
  86. package/out/zero-cache/src/types/row-key.js.map +1 -1
  87. package/out/zero-cache/src/types/streams.d.ts +2 -2
  88. package/out/zero-cache/src/types/streams.d.ts.map +1 -1
  89. package/out/zero-cache/src/types/streams.js +36 -26
  90. package/out/zero-cache/src/types/streams.js.map +1 -1
  91. package/out/zero-client/src/client/crud.d.ts +20 -18
  92. package/out/zero-client/src/client/crud.d.ts.map +1 -1
  93. package/out/zero-client/src/client/keys.d.ts +2 -2
  94. package/out/zero-client/src/client/keys.d.ts.map +1 -1
  95. package/out/zero-client/src/client/make-id-from-primary-key.d.ts +5 -0
  96. package/out/zero-client/src/client/make-id-from-primary-key.d.ts.map +1 -0
  97. package/out/zero-client/src/client/zero-poke-handler.d.ts +4 -3
  98. package/out/zero-client/src/client/zero-poke-handler.d.ts.map +1 -1
  99. package/out/zero-client/src/client/zero.d.ts +2 -2
  100. package/out/zero-client/src/client/zero.d.ts.map +1 -1
  101. package/out/zero-protocol/src/ast.d.ts.map +1 -1
  102. package/out/zero-protocol/src/ast.js +5 -8
  103. package/out/zero-protocol/src/ast.js.map +1 -1
  104. package/out/zero-protocol/src/down.d.ts +3 -3
  105. package/out/zero-protocol/src/entities-patch.d.ts +9 -9
  106. package/out/zero-protocol/src/entities-patch.d.ts.map +1 -1
  107. package/out/zero-protocol/src/entities-patch.js +5 -4
  108. package/out/zero-protocol/src/entities-patch.js.map +1 -1
  109. package/out/zero-protocol/src/poke.d.ts +6 -6
  110. package/out/zero-protocol/src/primary-key.d.ts +9 -0
  111. package/out/zero-protocol/src/primary-key.d.ts.map +1 -0
  112. package/out/zero-protocol/src/primary-key.js +7 -0
  113. package/out/zero-protocol/src/primary-key.js.map +1 -0
  114. package/out/zero-protocol/src/push.d.ts +28 -28
  115. package/out/zero-protocol/src/push.js +5 -5
  116. package/out/zero-protocol/src/push.js.map +1 -1
  117. package/out/zero-protocol/src/up.d.ts +4 -4
  118. package/out/zero.js +201 -105
  119. package/out/zero.js.map +4 -4
  120. package/out/zql/src/zql/ivm/schema.d.ts +1 -1
  121. package/out/zql/src/zql/ivm/schema.d.ts.map +1 -1
  122. package/out/zql/src/zql/ivm/schema.js.map +1 -1
  123. package/out/zqlite/src/db.js +1 -1
  124. package/out/zqlite/src/db.js.map +1 -1
  125. package/out/zqlite/src/table-source.d.ts.map +1 -1
  126. package/out/zqlite/src/table-source.js +35 -32
  127. package/out/zqlite/src/table-source.js.map +1 -1
  128. package/package.json +6 -2
  129. package/out/zero-protocol/src/entity.d.ts +0 -9
  130. package/out/zero-protocol/src/entity.d.ts.map +0 -1
  131. package/out/zero-protocol/src/entity.js +0 -8
  132. package/out/zero-protocol/src/entity.js.map +0 -1
@@ -1,26 +1,125 @@
1
- export const INTEGER = 'INTEGER';
2
- export const REAL = 'REAL';
3
- export const BLOB = 'BLOB';
4
- export const TEXT = 'TEXT';
5
- export const BOOL = 'BOOL';
1
+ import { PreciseDate } from '@google-cloud/precise-date';
2
+ import { assert } from '../../../shared/src/asserts.js';
3
+ import { stringify } from './bigint-json.js';
4
+ /**
5
+ * Creates a LiteRow from the supplied RowValue. A copy of the `row`
6
+ * is made only if a value conversion is performed.
7
+ */
8
+ export function liteRow(row) {
9
+ let copyNeeded = false;
10
+ for (const key in row) {
11
+ const val = row[key];
12
+ const liteVal = liteValue(val);
13
+ if (val !== liteVal) {
14
+ copyNeeded = true;
15
+ break;
16
+ }
17
+ }
18
+ if (!copyNeeded) {
19
+ return row;
20
+ }
21
+ // Slow path for when a conversion is needed.
22
+ return Object.fromEntries(Object.entries(row).map(([key, val]) => [key, liteValue(val)]));
23
+ }
6
24
  export function liteValues(row) {
7
- return Object.values(row).map(v => (typeof v !== 'boolean' ? v : v ? 1 : 0));
25
+ return Object.values(row).map(liteValue);
26
+ }
27
+ /**
28
+ * Postgres values types that are supported by SQLite are stored as-is.
29
+ * This includes Uint8Arrays for the `bytea` / `BLOB` type.
30
+ * * `boolean` values are converted to `0` or `1` integers.
31
+ * * `PreciseDate` values are converted to epoch microseconds.
32
+ * * JSON and Array values are stored as `JSON.stringify()` strings.
33
+ *
34
+ * Note that this currently does not handle the `bytea[]` type, but that's
35
+ * already a pretty questionable type.
36
+ */
37
+ export function liteValue(val) {
38
+ if (val instanceof Uint8Array) {
39
+ return val;
40
+ }
41
+ const obj = toLiteValue(val);
42
+ return obj && typeof obj === 'object' ? stringify(obj) : obj;
43
+ }
44
+ function toLiteValue(val) {
45
+ switch (typeof val) {
46
+ case 'string':
47
+ case 'number':
48
+ case 'bigint':
49
+ return val;
50
+ case 'boolean':
51
+ return val ? 1 : 0;
52
+ }
53
+ if (val === null) {
54
+ return val;
55
+ }
56
+ if (val instanceof PreciseDate) {
57
+ return val.getFullTime() / 1000n; // nanoseconds to microseconds
58
+ }
59
+ if (Array.isArray(val)) {
60
+ return val.map(v => toLiteValue(v));
61
+ }
62
+ assert(val.constructor?.name === 'Object', `Unexpected object type ${val.constructor?.name}`);
63
+ return val; // JSON
8
64
  }
9
65
  export function mapLiteDataTypeToZqlSchemaValue(liteDataType) {
10
66
  return { type: mapLiteDataTypeToZqlValueType(liteDataType) };
11
67
  }
12
- function mapLiteDataTypeToZqlValueType(liteDataType) {
13
- switch (liteDataType) {
14
- case INTEGER:
15
- return 'number';
16
- case REAL:
68
+ function mapLiteDataTypeToZqlValueType(dataType) {
69
+ const type = dataTypeToZqlValueType(dataType);
70
+ if (type === undefined) {
71
+ throw new Error(`Unsupported data type ${dataType}`);
72
+ }
73
+ return type;
74
+ }
75
+ /**
76
+ * Returns the value type for the `pgDataType` if it is supported by ZQL.
77
+ * (Note that `pgDataType` values are stored as-is in the SQLite column defs).
78
+ *
79
+ * For types not supported by ZQL, returns `undefined`.
80
+ */
81
+ export function dataTypeToZqlValueType(pgDataType) {
82
+ switch (pgDataType.toLowerCase()) {
83
+ case 'smallint':
84
+ case 'integer':
85
+ case 'int':
86
+ case 'int2':
87
+ case 'int4':
88
+ case 'int8':
89
+ case 'bigint':
90
+ case 'smallserial':
91
+ case 'serial':
92
+ case 'serial2':
93
+ case 'serial4':
94
+ case 'serial8':
95
+ case 'bigserial':
96
+ case 'decimal':
97
+ case 'numeric':
98
+ case 'real':
99
+ case 'double precision':
100
+ case 'float':
101
+ case 'float4':
102
+ case 'float8':
17
103
  return 'number';
18
- case TEXT:
104
+ case 'character':
105
+ case 'character varying':
106
+ case 'text':
107
+ case 'varchar':
19
108
  return 'string';
20
- case BOOL:
109
+ case 'bool':
110
+ case 'boolean':
21
111
  return 'boolean';
22
- default: // Note: BLOB is not supported.
23
- throw new Error(`Unsupported data type ${liteDataType}`);
112
+ // TODO: Add support for these.
113
+ // case 'bytea':
114
+ // case 'date':
115
+ // case 'time':
116
+ // case 'timestamp':
117
+ // case 'timestamp with time zone':
118
+ // case 'timestamp without time zone':
119
+ // case 'time with time zone':
120
+ // case 'time without time zone':
121
+ default:
122
+ return undefined;
24
123
  }
25
124
  }
26
125
  //# sourceMappingURL=lite.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lite.js","sourceRoot":"","sources":["../../../../../zero-cache/src/types/lite.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,OAAO,GAAG,SAAS,CAAC;AACjC,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC;AAC3B,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC;AAC3B,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC;AAC3B,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC;AAI3B,MAAM,UAAU,UAAU,CAAC,GAAa;IACtC,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,YAAoB;IAEpB,OAAO,EAAC,IAAI,EAAE,6BAA6B,CAAC,YAAY,CAAC,EAAC,CAAC;AAC7D,CAAC;AAED,SAAS,6BAA6B,CAAC,YAAoB;IACzD,QAAQ,YAAY,EAAE,CAAC;QACrB,KAAK,OAAO;YACV,OAAO,QAAQ,CAAC;QAClB,KAAK,IAAI;YACP,OAAO,QAAQ,CAAC;QAClB,KAAK,IAAI;YACP,OAAO,QAAQ,CAAC;QAClB,KAAK,IAAI;YACP,OAAO,SAAS,CAAC;QACnB,SAAS,+BAA+B;YACtC,MAAM,IAAI,KAAK,CAAC,yBAAyB,YAAY,EAAE,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"lite.js","sourceRoot":"","sources":["../../../../../zero-cache/src/types/lite.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,22 @@
1
+ import { PreciseDate } from '@google-cloud/precise-date';
1
2
  import { LogContext } from '@rocicorp/logger';
2
3
  import postgres, { type PostgresType } from 'postgres';
3
4
  import { type JSONValue } from './bigint-json.js';
4
5
  /** Registers types for the 'pg' library used by `pg-logical-replication`. */
5
6
  export declare function registerPostgresTypeParsers(): void;
7
+ declare function parseTimestamp(timestamp: string): PreciseDate;
8
+ declare function serializeTimestamp(val: unknown): string;
9
+ /**
10
+ * The (javascript) types of objects that can be returned by our configured
11
+ * Postgres clients. For initial-sync, these comes from the postgres.js client:
12
+ *
13
+ * https://github.com/porsager/postgres/blob/master/src/types.js
14
+ *
15
+ * and for the replication stream these come from the the node-postgres client:
16
+ *
17
+ * https://github.com/brianc/node-pg-types/blob/master/lib/textParsers.js
18
+ */
19
+ export type PostgresValueType = JSONValue | Uint8Array;
6
20
  /** Configures types for the Postgres.js client library (`postgres`). */
7
21
  export declare const postgresTypeConfig: () => {
8
22
  types: {
@@ -13,6 +27,12 @@ export declare const postgresTypeConfig: () => {
13
27
  serialize: typeof import("./bigint-json.js").stringify;
14
28
  parse: typeof import("./bigint-json.js").parse;
15
29
  };
30
+ date: {
31
+ to: number;
32
+ from: number[];
33
+ serialize: typeof serializeTimestamp;
34
+ parse: typeof parseTimestamp;
35
+ };
16
36
  };
17
37
  };
18
38
  export type PostgresDB = postgres.Sql<{
@@ -28,4 +48,5 @@ export declare function pgClient(lc: LogContext, connectionURI: string, options?
28
48
  json: PostgresType<JSONValue>;
29
49
  }>): PostgresDB;
30
50
  export declare const typeNameByOID: Record<number, string>;
51
+ export {};
31
52
  //# sourceMappingURL=pg.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pg.d.ts","sourceRoot":"","sources":["../../../../../zero-cache/src/types/pg.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAE5C,OAAO,QAAQ,EAAE,EAAc,KAAK,YAAY,EAAC,MAAM,UAAU,CAAC;AAElE,OAAO,EAAa,KAAK,SAAS,EAAC,MAAM,kBAAkB,CAAC;AAQ5D,6EAA6E;AAC7E,wBAAgB,2BAA2B,SAG1C;AAOD,wEAAwE;AACxE,eAAO,MAAM,kBAAkB;;;;;;;;;;CAU7B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,SAAS,CAAC;CACjB,CAAC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC,cAAc,CAAC;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,SAAS,CAAC;CACjB,CAAC,CAAC;AAEH,wBAAgB,QAAQ,CACtB,EAAE,EAAE,UAAU,EACd,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC;IACzB,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC7B,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;CAC/B,CAAC,GACD,UAAU,CAwBZ;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKhD,CAAC"}
1
+ {"version":3,"file":"pg.d.ts","sourceRoot":"","sources":["../../../../../zero-cache/src/types/pg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,4BAA4B,CAAC;AAEvD,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAE5C,OAAO,QAAQ,EAAE,EAAc,KAAK,YAAY,EAAC,MAAM,UAAU,CAAC;AAElE,OAAO,EAAa,KAAK,SAAS,EAAC,MAAM,kBAAkB,CAAC;AAY5D,6EAA6E;AAC7E,wBAAgB,2BAA2B,SAY1C;AAMD,iBAAS,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAKtD;AAED,iBAAS,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAkBhD;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,UAAU,CAAC;AAEvD,wEAAwE;AACxE,eAAO,MAAM,kBAAkB;;;;gBAMJ,MAAM;kBACc,MAAM,EAAE;;;;;gBAKvB,MAAM;kBACP,MAAM,EAAE;;;;;CAKrC,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,SAAS,CAAC;CACjB,CAAC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC,cAAc,CAAC;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,SAAS,CAAC;CACjB,CAAC,CAAC;AAEH,wBAAgB,QAAQ,CACtB,EAAE,EAAE,UAAU,EACd,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC;IACzB,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC7B,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;CAC/B,CAAC,GACD,UAAU,CAwBZ;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKhD,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { PreciseDate } from '@google-cloud/precise-date';
1
2
  import { OID } from '@postgresql-typed/oids';
2
3
  import { LogContext } from '@rocicorp/logger';
3
4
  import pg from 'pg';
@@ -5,26 +6,68 @@ import postgres, {} from 'postgres';
5
6
  import array from 'postgres-array';
6
7
  import { BigIntJSON } from './bigint-json.js';
7
8
  const { types: { builtins, setTypeParser }, } = pg;
9
+ const TIMESTAMP_TYPES = [builtins.TIMESTAMP, builtins.TIMESTAMPTZ];
10
+ const TIMESTAMP_ARRAYS = [1115 /* timestamp[] */, 1185 /* timestamptz[] */];
8
11
  const builtinsINT8ARRAY = 1016; // No definition in builtins for int8[]
9
12
  /** Registers types for the 'pg' library used by `pg-logical-replication`. */
10
13
  export function registerPostgresTypeParsers() {
11
14
  setTypeParser(builtins.INT8, val => BigInt(val));
12
15
  setTypeParser(builtinsINT8ARRAY, val => array.parse(val, val => BigInt(val)));
16
+ // For pg-logical-replication we convert timestamps directly to microseconds
17
+ // to facilitate serializing them in the Change stream.
18
+ for (const type of TIMESTAMP_TYPES) {
19
+ setTypeParser(type, parseTimestampToMicroseconds);
20
+ }
21
+ for (const type of TIMESTAMP_ARRAYS) {
22
+ setTypeParser(type, val => array.parse(val, parseTimestampToMicroseconds));
23
+ }
24
+ }
25
+ function parseTimestampToMicroseconds(timestamp) {
26
+ return parseTimestamp(timestamp).getFullTime() / 1000n;
27
+ }
28
+ function parseTimestamp(timestamp) {
29
+ // Convert from PG's time string, e.g. "1999-01-08 12:05:06+00" to "Z"
30
+ // format expected by PreciseDate.
31
+ timestamp = timestamp.replace(' ', 'T').replace('+00', '') + 'Z';
32
+ return new PreciseDate(timestamp);
33
+ }
34
+ function serializeTimestamp(val) {
35
+ switch (typeof val) {
36
+ case 'string':
37
+ return val; // Let Postgres parse it
38
+ case 'number':
39
+ return new PreciseDate(val).getFullTimeString();
40
+ // Note: Don't support bigint inputs until we decide what the semantics are (e.g. micros vs nanos)
41
+ // case 'bigint':
42
+ // return new PreciseDate(val).getFullTimeString();
43
+ default:
44
+ if (val instanceof PreciseDate) {
45
+ return val.getFullTimeString();
46
+ }
47
+ if (val instanceof Date) {
48
+ return val.toISOString();
49
+ }
50
+ }
51
+ throw new Error(`Unsupported type "${typeof val}" for timestamp: ${val}`);
13
52
  }
14
- // Type these as `number` so that Typescript doesn't complain about
15
- // referencing external types during type inference.
16
- const builtinsJSON = builtins.JSON;
17
- const builtinsJSONB = builtins.JSONB;
18
53
  /** Configures types for the Postgres.js client library (`postgres`). */
19
54
  export const postgresTypeConfig = () => ({
55
+ // Type the type IDs as `number` so that Typescript doesn't complain about
56
+ // referencing external types during type inference.
20
57
  types: {
21
58
  bigint: postgres.BigInt,
22
59
  json: {
23
- to: builtinsJSON,
24
- from: [builtinsJSON, builtinsJSONB],
60
+ to: builtins.JSON,
61
+ from: [builtins.JSON, builtins.JSONB],
25
62
  serialize: BigIntJSON.stringify,
26
63
  parse: BigIntJSON.parse,
27
64
  },
65
+ date: {
66
+ to: builtins.TIMESTAMP,
67
+ from: TIMESTAMP_TYPES,
68
+ serialize: serializeTimestamp,
69
+ parse: parseTimestamp,
70
+ },
28
71
  },
29
72
  });
30
73
  export function pgClient(lc, connectionURI, options) {
@@ -1 +1 @@
1
- {"version":3,"file":"pg.js","sourceRoot":"","sources":["../../../../../zero-cache/src/types/pg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,wBAAwB,CAAC;AAC3C,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,QAAQ,EAAE,EAAgC,MAAM,UAAU,CAAC;AAClE,OAAO,KAAK,MAAM,gBAAgB,CAAC;AACnC,OAAO,EAAC,UAAU,EAAiB,MAAM,kBAAkB,CAAC;AAE5D,MAAM,EACJ,KAAK,EAAE,EAAC,QAAQ,EAAE,aAAa,EAAC,GACjC,GAAG,EAAE,CAAC;AAEP,MAAM,iBAAiB,GAAG,IAAI,CAAC,CAAC,uCAAuC;AAEvE,6EAA6E;AAC7E,MAAM,UAAU,2BAA2B;IACzC,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,aAAa,CAAC,iBAAiB,EAAE,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,mEAAmE;AACnE,oDAAoD;AACpD,MAAM,YAAY,GAAW,QAAQ,CAAC,IAAI,CAAC;AAC3C,MAAM,aAAa,GAAW,QAAQ,CAAC,KAAK,CAAC;AAE7C,wEAAwE;AACxE,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,EAAE,CAAC,CAAC;IACvC,KAAK,EAAE;QACL,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,IAAI,EAAE;YACJ,EAAE,EAAE,YAAY;YAChB,IAAI,EAAE,CAAC,YAAY,EAAE,aAAa,CAAC;YACnC,SAAS,EAAE,UAAU,CAAC,SAAS;YAC/B,KAAK,EAAE,UAAU,CAAC,KAAK;SACxB;KACF;CACF,CAAC,CAAC;AAYH,MAAM,UAAU,QAAQ,CACtB,EAAc,EACd,aAAqB,EACrB,OAGE;IAEF,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,EAAE;QAC7B,oGAAoG;QACpG,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;YACnB,KAAK,QAAQ;gBACX,OAAO,CAAC,WAAW;YACrB,KAAK,OAAO;gBACV,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;gBACd,OAAO;YACT,KAAK,SAAS,CAAC;YACf,KAAK,WAAW;gBACd,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;gBACd,OAAO;YACT,KAAK,KAAK,CAAC;YACX,KAAK,MAAM,CAAC;YACZ;gBACE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CAAC;IACF,OAAO,QAAQ,CAAC,aAAa,EAAE;QAC7B,GAAG,kBAAkB,EAAE;QACvB,QAAQ;QACR,GAAG,OAAO;KACX,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAA2B,MAAM,CAAC,WAAW,CACrE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;IACvC,GAAG;IACH,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;CACvD,CAAC,CACH,CAAC;AAEF,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC"}
1
+ {"version":3,"file":"pg.js","sourceRoot":"","sources":["../../../../../zero-cache/src/types/pg.ts"],"names":[],"mappings":"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"}
@@ -14,8 +14,11 @@ export type RowValue = RowKey;
14
14
  /**
15
15
  * Returns the `RowKey` such that key iteration produces a sorted sequence. If the
16
16
  * keys are already sorted, the input is returned as is.
17
+ *
18
+ * Note that the value type is parameterized as `V` so that this method can be used
19
+ * for both (pg) RowKeys and LiteRowKeys.
17
20
  */
18
- export declare function normalizedKeyOrder(rowKey: RowKey): Readonly<Record<string, JSONValue>>;
21
+ export declare function normalizedKeyOrder<V>(rowKey: Readonly<Record<string, V>>): Readonly<Record<string, V>>;
19
22
  /**
20
23
  * Returns a normalized string suitable for representing a row key in a form
21
24
  * that can be used as a Map key.
@@ -1 +1 @@
1
- {"version":3,"file":"row-key.d.ts","sourceRoot":"","sources":["../../../../../zero-cache/src/types/row-key.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,SAAS,EAAC,MAAM,kBAAkB,CAAC;AAE3D,MAAM,MAAM,UAAU,GAAG;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAC,CAAC;AACpD,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AAC9D,MAAM,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAEzD,MAAM,MAAM,KAAK,GAAG,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,CAAC,CAAC;AAI9E,MAAM,MAAM,OAAO,GAAG,UAAU,CAAC;AACjC,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE9B;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,uCAahD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEhD;AAQD;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,KAAK,GAAG,MAAM,CAgB3C"}
1
+ {"version":3,"file":"row-key.d.ts","sourceRoot":"","sources":["../../../../../zero-cache/src/types/row-key.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,SAAS,EAAC,MAAM,kBAAkB,CAAC;AAE3D,MAAM,MAAM,UAAU,GAAG;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAC,CAAC;AACpD,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AAC9D,MAAM,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAEzD,MAAM,MAAM,KAAK,GAAG,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,CAAC,CAAC;AAI9E,MAAM,MAAM,OAAO,GAAG,UAAU,CAAC;AACjC,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE9B;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAClC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAa7B;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEhD;AAQD;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,KAAK,GAAG,MAAM,CAU3C"}
@@ -1,8 +1,11 @@
1
- import { h64 } from '../../../shared/src/xxhash.js';
1
+ import { h64WithReverse } from '../../../shared/src/h64-with-reverse.js';
2
2
  import { stringify } from './bigint-json.js';
3
3
  /**
4
4
  * Returns the `RowKey` such that key iteration produces a sorted sequence. If the
5
5
  * keys are already sorted, the input is returned as is.
6
+ *
7
+ * Note that the value type is parameterized as `V` so that this method can be used
8
+ * for both (pg) RowKeys and LiteRowKeys.
6
9
  */
7
10
  export function normalizedKeyOrder(rowKey) {
8
11
  let last = '';
@@ -45,20 +48,8 @@ export function rowIDHash(id) {
45
48
  return hash;
46
49
  }
47
50
  const str = stringify([id.schema, id.table, ...tuples(id.rowKey)]);
48
- // xxhash only computes 64-bit values. Run it on the forward and reverse string
49
- // to get better collision resistance.
50
- const forward = h64(str);
51
- const backward = h64(reverse(str));
52
- const full = (forward << 64n) + backward;
53
- hash = full.toString(36);
51
+ hash = h64WithReverse(str);
54
52
  rowIDHashes.set(id, hash);
55
53
  return hash;
56
54
  }
57
- function reverse(str) {
58
- let reversed = '';
59
- for (let i = str.length - 1; i >= 0; i--) {
60
- reversed += str[i];
61
- }
62
- return reversed;
63
- }
64
55
  //# sourceMappingURL=row-key.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"row-key.js","sourceRoot":"","sources":["../../../../../zero-cache/src/types/row-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,+BAA+B,CAAC;AAClD,OAAO,EAAC,SAAS,EAAiB,MAAM,kBAAkB,CAAC;AAa3D;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,IAAI,GAAG,GAAG,EAAE,CAAC;YACf,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACxE,CAAC;QACJ,CAAC;QACD,IAAI,GAAG,GAAG,CAAC;IACb,CAAC;IACD,0EAA0E;IAC1E,2DAA2D;IAC3D,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,OAAO,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,MAAM,CAAC,GAAW;IACzB,OAAO,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACxD,CAAC;AAED,MAAM,WAAW,GAAG,IAAI,OAAO,EAAiB,CAAC;AAEjD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,SAAS,CAAC,EAAS;IACjC,IAAI,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/B,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAEnE,+EAA+E;IAC/E,sCAAsC;IACtC,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC;IACzC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzB,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC1B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,OAAO,CAAC,GAAW;IAC1B,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"row-key.js","sourceRoot":"","sources":["../../../../../zero-cache/src/types/row-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAC,MAAM,yCAAyC,CAAC;AACvE,OAAO,EAAC,SAAS,EAAiB,MAAM,kBAAkB,CAAC;AAa3D;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAmC;IAEnC,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,IAAI,GAAG,GAAG,EAAE,CAAC;YACf,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACxE,CAAC;QACJ,CAAC;QACD,IAAI,GAAG,GAAG,CAAC;IACb,CAAC;IACD,0EAA0E;IAC1E,2DAA2D;IAC3D,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,OAAO,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,MAAM,CAAC,GAAW;IACzB,OAAO,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACxD,CAAC;AAED,MAAM,WAAW,GAAG,IAAI,OAAO,EAAiB,CAAC;AAEjD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,SAAS,CAAC,EAAS;IACjC,IAAI,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/B,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACnE,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAC3B,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC1B,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import type { LogContext } from '@rocicorp/logger';
2
- import * as v from '../../../shared/src/valita.js';
3
2
  import type { WebSocket } from 'ws';
3
+ import * as v from '../../../shared/src/valita.js';
4
4
  import { type JSONValue } from './bigint-json.js';
5
5
  export type Source<T> = AsyncIterable<T> & {
6
6
  /**
@@ -29,5 +29,5 @@ export type Sink<T> = {
29
29
  push(message: T): void;
30
30
  };
31
31
  export declare function streamOut<T extends JSONValue>(lc: LogContext, source: Source<T>, sink: WebSocket): Promise<void>;
32
- export declare function streamIn<T extends JSONValue>(lc: LogContext, source: WebSocket, schema: v.Type<T>): Source<T>;
32
+ export declare function streamIn<T extends JSONValue>(lc: LogContext, source: WebSocket, schema: v.Type<T>): Promise<Source<T>>;
33
33
  //# sourceMappingURL=streams.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"streams.d.ts","sourceRoot":"","sources":["../../../../../zero-cache/src/types/streams.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAEjD,OAAO,KAAK,CAAC,MAAM,+BAA+B,CAAC;AACnD,OAAO,KAAK,EAAuC,SAAS,EAAC,MAAM,IAAI,CAAC;AACxE,OAAO,EAAa,KAAK,SAAS,EAAC,MAAM,kBAAkB,CAAC;AAG5D,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG;IACzC;;;;OAIG;IACH,MAAM,EAAE,MAAM,IAAI,CAAC;IAEnB;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,aAAa,CAAC;QAAC,KAAK,EAAE,CAAC,CAAC;QAAC,QAAQ,EAAE,MAAM,IAAI,CAAA;KAAC,CAAC,GAAG,SAAS,CAAC;CACxE,CAAC;AAEF,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI;IACpB,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC;CACxB,CAAC;AAcF,wBAAsB,SAAS,CAAC,CAAC,SAAS,SAAS,EACjD,EAAE,EAAE,UAAU,EACd,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EACjB,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,IAAI,CAAC,CAsDf;AAED,wBAAgB,QAAQ,CAAC,CAAC,SAAS,SAAS,EAC1C,EAAE,EAAE,UAAU,EACd,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAChB,MAAM,CAAC,CAAC,CAAC,CAkCX"}
1
+ {"version":3,"file":"streams.d.ts","sourceRoot":"","sources":["../../../../../zero-cache/src/types/streams.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAEjD,OAAO,KAAK,EAAuC,SAAS,EAAC,MAAM,IAAI,CAAC;AAExE,OAAO,KAAK,CAAC,MAAM,+BAA+B,CAAC;AACnD,OAAO,EAAa,KAAK,SAAS,EAAC,MAAM,kBAAkB,CAAC;AAG5D,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG;IACzC;;;;OAIG;IACH,MAAM,EAAE,MAAM,IAAI,CAAC;IAEnB;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,aAAa,CAAC;QAAC,KAAK,EAAE,CAAC,CAAC;QAAC,QAAQ,EAAE,MAAM,IAAI,CAAA;KAAC,CAAC,GAAG,SAAS,CAAC;CACxE,CAAC;AAEF,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI;IACpB,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC;CACxB,CAAC;AAcF,wBAAsB,SAAS,CAAC,CAAC,SAAS,SAAS,EACjD,EAAE,EAAE,UAAU,EACd,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EACjB,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,IAAI,CAAC,CAuDf;AAED,wBAAsB,QAAQ,CAAC,CAAC,SAAS,SAAS,EAChD,EAAE,EAAE,UAAU,EACd,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAChB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAmCpB"}
@@ -1,3 +1,4 @@
1
+ import { resolver } from '@rocicorp/resolver';
1
2
  import { Queue } from '../../../shared/src/queue.js';
2
3
  import * as v from '../../../shared/src/valita.js';
3
4
  import { BigIntJSON } from './bigint-json.js';
@@ -39,6 +40,7 @@ export async function streamOut(lc, source, sink) {
39
40
  }
40
41
  }
41
42
  else {
43
+ lc.debug?.(`started synchronous outbound stream`);
42
44
  for await (const msg of source) {
43
45
  const id = ++nextID;
44
46
  const data = BigIntJSON.stringify({ msg, id });
@@ -57,7 +59,7 @@ export async function streamOut(lc, source, sink) {
57
59
  closer.close(e);
58
60
  }
59
61
  }
60
- export function streamIn(lc, source, schema) {
62
+ export async function streamIn(lc, source, schema) {
61
63
  const streamedSchema = v.object({
62
64
  msg: schema,
63
65
  id: v.number(),
@@ -84,58 +86,66 @@ export function streamIn(lc, source, schema) {
84
86
  closer.close(e);
85
87
  }
86
88
  }
89
+ await closer.connected;
87
90
  return sink;
88
91
  }
89
92
  class WebSocketCloser {
90
93
  #lc;
91
94
  #ws;
92
95
  #stream;
93
- #closeHandler;
94
- #errorHandler;
95
96
  #messageHandler;
96
- #closed = false;
97
+ #connected = resolver();
98
+ get connected() {
99
+ return this.#connected.promise;
100
+ }
97
101
  constructor(lc, ws, stream, messageHandler) {
98
102
  this.#lc = lc;
99
103
  this.#ws = ws;
100
104
  this.#stream = stream;
101
105
  this.#messageHandler = messageHandler ?? null;
102
- this.#closeHandler = e => this.#handleClose(e);
103
- this.#errorHandler = e => this.#handleError(e);
104
- ws.addEventListener('close', this.#closeHandler);
105
- ws.addEventListener('error', this.#errorHandler);
106
+ ws.addEventListener('open', this.#handleOpen);
107
+ ws.addEventListener('close', this.#handleClose);
108
+ ws.addEventListener('error', this.#handleError);
106
109
  if (this.#messageHandler) {
107
110
  ws.addEventListener('message', this.#messageHandler);
108
111
  }
112
+ switch (ws.readyState) {
113
+ case ws.CONNECTING:
114
+ break; // expected for new connections. resolve or reject in handlers.
115
+ case ws.OPEN:
116
+ this.#connected.resolve();
117
+ break;
118
+ default:
119
+ this.#connected.reject(new Error(`websocket already in state ${ws.readyState}`));
120
+ break;
121
+ }
109
122
  }
110
- #handleClose(e) {
123
+ #handleOpen = () => {
124
+ this.#lc.info?.('connected');
125
+ this.#connected.resolve();
126
+ };
127
+ #handleClose = (e) => {
111
128
  const { code, reason, wasClean } = e;
112
- this.#lc.info?.('WebSocket close event', { code, reason, wasClean });
129
+ this.#lc.info?.('connection closed', { code, reason, wasClean });
113
130
  this.close();
114
- }
115
- #handleError(e) {
116
- this.#lc.error?.('WebSocket error event', e.message, e.error);
117
- // Should we close here?
118
- }
131
+ this.#connected.reject(`connection closed with code ${code}`);
132
+ };
133
+ #handleError = ({ message, error }) => {
134
+ this.#lc.error?.('connection error', message, error);
135
+ this.#connected.reject(error);
136
+ };
119
137
  close(err) {
120
- if (this.#closed) {
121
- return;
122
- }
123
138
  if (err) {
124
139
  this.#lc.error?.(`closing stream with error`, err);
125
140
  }
126
- this.#closed = true;
127
- this.#ws.removeEventListener('close', this.#closeHandler);
128
- this.#ws.removeEventListener('error', this.#errorHandler);
129
- if (this.#messageHandler) {
130
- this.#ws.removeEventListener('message', this.#messageHandler);
131
- }
132
141
  this.#stream.cancel();
133
- if (this.#ws.readyState !== this.#ws.CLOSED) {
142
+ if (!this.closed()) {
134
143
  this.#ws.close();
135
144
  }
136
145
  }
137
146
  closed() {
138
- return this.#closed;
147
+ return (this.#ws.readyState === this.#ws.CLOSED ||
148
+ this.#ws.readyState === this.#ws.CLOSING);
139
149
  }
140
150
  }
141
151
  //# sourceMappingURL=streams.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"streams.js","sourceRoot":"","sources":["../../../../../zero-cache/src/types/streams.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"streams.js","sourceRoot":"","sources":["../../../../../zero-cache/src/types/streams.ts"],"names":[],"mappings":"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"}
@@ -1,28 +1,31 @@
1
- import type { ReadonlyJSONObject } from '../../../shared/src/json.js';
2
1
  import type { MaybePromise } from '../../../shared/src/types.js';
3
- import type { EntityID } from '../../../zero-protocol/src/entity.js';
4
- import { type CRUDMutationArg, type CRUDOp, CRUD_MUTATION_NAME, type CreateOp, type DeleteOp, type SetOp, type UpdateOp } from '../../../zero-protocol/src/push.js';
2
+ import { type PrimaryKeyValueRecord } from '../../../zero-protocol/src/primary-key.js';
3
+ import { CRUD_MUTATION_NAME, type CreateOp, type CRUDMutationArg, type CRUDOp, type DeleteOp, type SetOp, type UpdateOp } from '../../../zero-protocol/src/push.js';
5
4
  import type { Row } from '../../../zql/src/zql/ivm/data.js';
5
+ import type { PrimaryKey } from '../../../zql/src/zql/ivm/schema.js';
6
6
  import type { SchemaToRow } from '../../../zql/src/zql/query/query.js';
7
7
  import type { MutatorDefs, WriteTransaction } from './replicache-types.js';
8
8
  import type { Schema } from './zero.js';
9
- export type Parse<E extends Row> = (v: ReadonlyJSONObject) => E;
10
- export type Update<E extends Row> = Partial<E>;
9
+ export type SetValue<R extends Row, PK extends PrimaryKey> = AsPrimaryKeyValueRecord<Pick<R, PK[number]>> & Omit<R, PK[number]>;
10
+ export type CreateValue<R extends Row, PK extends PrimaryKey> = SetValue<R, PK>;
11
+ export type UpdateValue<R extends Row, PK extends PrimaryKey> = AsPrimaryKeyValueRecord<Pick<R, PK[number]>> & Partial<Omit<R, PK[number]>>;
12
+ export type DeleteID<R extends Row, PK extends PrimaryKey> = AsPrimaryKeyValueRecord<Pick<R, PK[number]>>;
13
+ type AsPrimaryKeyValueRecord<R extends Row> = R extends PrimaryKeyValueRecord ? R : never;
11
14
  /**
12
15
  * This is the type of the generated mutate.<name>.<verb> function.
13
16
  */
14
- export type EntityCRUDMutate<E extends Row> = {
15
- create: (value: E) => Promise<void>;
16
- set: (value: E) => Promise<void>;
17
- update: (value: Update<E>) => Promise<void>;
18
- delete: (id: EntityID) => Promise<void>;
17
+ export type RowCRUDMutate<R extends Row, PK extends PrimaryKey> = {
18
+ create: (value: CreateValue<R, PK>) => Promise<void>;
19
+ set: (value: SetValue<R, PK>) => Promise<void>;
20
+ update: (value: UpdateValue<R, PK>) => Promise<void>;
21
+ delete: (id: DeleteID<R, PK>) => Promise<void>;
19
22
  };
20
23
  /**
21
24
  * This is the type of the generated mutate.<name> object.
22
25
  */
23
26
  export type MakeCRUDMutate<S extends Schema> = BaseCRUDMutate<S> & CRUDBatch<S>;
24
27
  export type BaseCRUDMutate<S extends Schema> = {
25
- [K in keyof S['tables']]: EntityCRUDMutate<SchemaToRow<S['tables'][K]>>;
28
+ [K in keyof S['tables']]: RowCRUDMutate<SchemaToRow<S['tables'][K]>, S['tables'][K]['primaryKey']>;
26
29
  };
27
30
  export type CRUDBatch<S extends Schema> = <R>(body: (m: BaseCRUDMutate<S>) => MaybePromise<R>) => Promise<R>;
28
31
  type ZeroCRUDMutate = {
@@ -33,20 +36,19 @@ type ZeroCRUDMutate = {
33
36
  * queries are `issue` and `label`, then this object will have `issue` and
34
37
  * `label` properties.
35
38
  */
36
- export declare function makeCRUDMutate<S extends Schema>(schema: S, repMutate: ZeroCRUDMutate): MakeCRUDMutate<S>;
39
+ export declare function makeCRUDMutate<const S extends Schema>(schema: S, repMutate: ZeroCRUDMutate): MakeCRUDMutate<S>;
37
40
  /**
38
41
  * Creates the `{create, set, update, delete}` object for use inside a batch.
39
42
  */
40
- export declare function makeBatchCRUDMutate<E extends Row>(entityType: string, ops: CRUDOp[]): EntityCRUDMutate<E>;
43
+ export declare function makeBatchCRUDMutate<R extends Row, PK extends PrimaryKey>(tableName: string, schema: Schema, ops: CRUDOp[]): RowCRUDMutate<R, PK>;
41
44
  export type WithCRUD<MD extends MutatorDefs> = MD & {
42
45
  [CRUD_MUTATION_NAME]: CRUDMutator;
43
46
  };
44
47
  export type CRUDMutate = (crudArg: CRUDMutationArg) => Promise<void>;
45
48
  export type CRUDMutator = (tx: WriteTransaction, crudArg: CRUDMutationArg) => Promise<void>;
46
- export declare function makeCRUDMutator<S extends Schema>(_schemas: S): CRUDMutator;
47
- export declare function createImpl(tx: WriteTransaction, arg: CreateOp): Promise<void>;
48
- export declare function setImpl(tx: WriteTransaction, arg: SetOp): Promise<void>;
49
- export declare function updateImpl(tx: WriteTransaction, arg: UpdateOp): Promise<void>;
50
- export declare function deleteImpl(tx: WriteTransaction, arg: DeleteOp): Promise<void>;
49
+ export declare function makeCRUDMutator<S extends Schema>(schema: S): CRUDMutator;
50
+ export declare function setImpl(tx: WriteTransaction, arg: CreateOp | SetOp, schema: Schema): Promise<void>;
51
+ export declare function updateImpl(tx: WriteTransaction, arg: UpdateOp, schema: Schema): Promise<void>;
52
+ export declare function deleteImpl(tx: WriteTransaction, arg: DeleteOp, schema: Schema): Promise<void>;
51
53
  export {};
52
54
  //# sourceMappingURL=crud.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"crud.d.ts","sourceRoot":"","sources":["../../../../../zero-client/src/client/crud.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"crud.d.ts","sourceRoot":"","sources":["../../../../../zero-client/src/client/crud.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAC,KAAK,qBAAqB,EAAC,MAAM,2CAA2C,CAAC;AACrF,OAAO,EACL,kBAAkB,EAClB,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,MAAM,EAEX,KAAK,QAAQ,EACb,KAAK,KAAK,EACV,KAAK,QAAQ,EACd,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAC,GAAG,EAAC,MAAM,kCAAkC,CAAC;AAC1D,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,oCAAoC,CAAC;AACnE,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,qCAAqC,CAAC;AAGrE,OAAO,KAAK,EAAC,WAAW,EAAE,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AACzE,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,WAAW,CAAC;AAEtC,MAAM,MAAM,QAAQ,CAClB,CAAC,SAAS,GAAG,EACb,EAAE,SAAS,UAAU,IACnB,uBAAuB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AAEvE,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,SAAS,UAAU,IAAI,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAEhF,MAAM,MAAM,WAAW,CACrB,CAAC,SAAS,GAAG,EACb,EAAE,SAAS,UAAU,IACnB,uBAAuB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAEhF,MAAM,MAAM,QAAQ,CAClB,CAAC,SAAS,GAAG,EACb,EAAE,SAAS,UAAU,IACnB,uBAAuB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAEjD,KAAK,uBAAuB,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,qBAAqB,GACzE,CAAC,GACD,KAAK,CAAC;AAEV;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,SAAS,UAAU,IAAI;IAChE,MAAM,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,GAAG,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,MAAM,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAEhF,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,MAAM,IAAI;KAC5C,CAAC,IAAI,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,aAAa,CACrC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAC3B,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAC7B;CACF,CAAC;AAEF,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,CAAC,EAC1C,IAAI,EAAE,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,KAC5C,OAAO,CAAC,CAAC,CAAC,CAAC;AAEhB,KAAK,cAAc,GAAG;IACpB,CAAC,kBAAkB,CAAC,EAAE,UAAU,CAAC;CAClC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,CAAC,CAAC,SAAS,MAAM,EACnD,MAAM,EAAE,CAAC,EACT,SAAS,EAAE,cAAc,GACxB,cAAc,CAAC,CAAC,CAAC,CA0CnB;AAoFD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,SAAS,UAAU,EACtE,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EAAE,GACZ,aAAa,CAAC,CAAC,EAAE,EAAE,CAAC,CA2CtB;AAED,MAAM,MAAM,QAAQ,CAAC,EAAE,SAAS,WAAW,IAAI,EAAE,GAAG;IAClD,CAAC,kBAAkB,CAAC,EAAE,WAAW,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAErE,MAAM,MAAM,WAAW,GAAG,CACxB,EAAE,EAAE,gBAAgB,EACpB,OAAO,EAAE,eAAe,KACrB,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,WAAW,CAsBxE;AAiBD,wBAAsB,OAAO,CAC3B,EAAE,EAAE,gBAAgB,EACpB,GAAG,EAAE,QAAQ,GAAG,KAAK,EACrB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAsB,UAAU,CAC9B,EAAE,EAAE,gBAAgB,EACpB,GAAG,EAAE,QAAQ,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAaf;AAED,wBAAsB,UAAU,CAC9B,EAAE,EAAE,gBAAgB,EACpB,GAAG,EAAE,QAAQ,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAOf"}