@rocicorp/zero 0.7.2024120108 → 0.7.2024120400

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 (96) hide show
  1. package/out/advanced.js +1 -1
  2. package/out/{chunk-C7M3BJ3Z.js → chunk-6HXO6VMP.js} +13 -12
  3. package/out/chunk-6HXO6VMP.js.map +7 -0
  4. package/out/{chunk-YQFIGL5R.js → chunk-WJCWI5I4.js} +76 -43
  5. package/out/{chunk-YQFIGL5R.js.map → chunk-WJCWI5I4.js.map} +3 -3
  6. package/out/shared/src/asserts.d.ts +1 -1
  7. package/out/shared/src/asserts.d.ts.map +1 -1
  8. package/out/shared/src/asserts.js +2 -1
  9. package/out/shared/src/asserts.js.map +1 -1
  10. package/out/solid.js +2 -2
  11. package/out/zero-cache/src/auth/load-schema.d.ts.map +1 -1
  12. package/out/zero-cache/src/auth/load-schema.js +4 -20
  13. package/out/zero-cache/src/auth/load-schema.js.map +1 -1
  14. package/out/zero-cache/src/auth/write-authorizer.d.ts.map +1 -1
  15. package/out/zero-cache/src/auth/write-authorizer.js +7 -2
  16. package/out/zero-cache/src/auth/write-authorizer.js.map +1 -1
  17. package/out/zero-cache/src/services/change-streamer/storer.d.ts.map +1 -1
  18. package/out/zero-cache/src/services/change-streamer/storer.js +11 -6
  19. package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
  20. package/out/zero-cache/src/services/mutagen/mutagen.d.ts +2 -2
  21. package/out/zero-cache/src/services/mutagen/mutagen.d.ts.map +1 -1
  22. package/out/zero-cache/src/services/mutagen/mutagen.js +4 -3
  23. package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
  24. package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts.map +1 -1
  25. package/out/zero-cache/src/services/view-syncer/cvr-store.js +5 -3
  26. package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -1
  27. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +1 -1
  28. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +5 -2
  29. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
  30. package/out/zero-cache/src/services/view-syncer/schema/types.d.ts +5 -195
  31. package/out/zero-cache/src/services/view-syncer/schema/types.d.ts.map +1 -1
  32. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
  33. package/out/zero-cache/src/services/view-syncer/view-syncer.js +2 -2
  34. package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
  35. package/out/zero-client/src/client/context.d.ts +1 -1
  36. package/out/zero-client/src/client/context.d.ts.map +1 -1
  37. package/out/zero-client/src/client/options.d.ts +9 -14
  38. package/out/zero-client/src/client/options.d.ts.map +1 -1
  39. package/out/zero-client/src/client/zero.d.ts.map +1 -1
  40. package/out/zero-protocol/src/ast.d.ts +5 -95
  41. package/out/zero-protocol/src/ast.d.ts.map +1 -1
  42. package/out/zero-protocol/src/ast.js +7 -9
  43. package/out/zero-protocol/src/ast.js.map +1 -1
  44. package/out/zero-protocol/src/change-desired-queries.d.ts +2 -78
  45. package/out/zero-protocol/src/change-desired-queries.d.ts.map +1 -1
  46. package/out/zero-protocol/src/connect.d.ts +2 -78
  47. package/out/zero-protocol/src/connect.d.ts.map +1 -1
  48. package/out/zero-protocol/src/down.d.ts +2 -78
  49. package/out/zero-protocol/src/down.d.ts.map +1 -1
  50. package/out/zero-protocol/src/poke.d.ts +4 -156
  51. package/out/zero-protocol/src/poke.d.ts.map +1 -1
  52. package/out/zero-protocol/src/queries-patch.d.ts +3 -117
  53. package/out/zero-protocol/src/queries-patch.d.ts.map +1 -1
  54. package/out/zero-protocol/src/up.d.ts +2 -78
  55. package/out/zero-protocol/src/up.d.ts.map +1 -1
  56. package/out/zero-schema/src/build-schema.d.ts.map +1 -1
  57. package/out/zero-schema/src/build-schema.js +2 -14
  58. package/out/zero-schema/src/build-schema.js.map +1 -1
  59. package/out/zero-schema/src/compiled-permissions.d.ts +17 -459
  60. package/out/zero-schema/src/compiled-permissions.d.ts.map +1 -1
  61. package/out/zero-schema/src/normalize-table-schema.d.ts +3 -2
  62. package/out/zero-schema/src/normalize-table-schema.d.ts.map +1 -1
  63. package/out/zero-schema/src/normalize-table-schema.js +39 -13
  64. package/out/zero-schema/src/normalize-table-schema.js.map +1 -1
  65. package/out/zero-schema/src/permissions.d.ts +1 -1
  66. package/out/zero-schema/src/permissions.d.ts.map +1 -1
  67. package/out/zero-schema/src/schema-config.d.ts +15 -29
  68. package/out/zero-schema/src/schema-config.d.ts.map +1 -1
  69. package/out/zero-schema/src/schema-config.js +39 -13
  70. package/out/zero-schema/src/schema-config.js.map +1 -1
  71. package/out/zero-schema/src/table-schema.d.ts +25 -36
  72. package/out/zero-schema/src/table-schema.d.ts.map +1 -1
  73. package/out/zero-schema/src/table-schema.js.map +1 -1
  74. package/out/zero.js +2 -2
  75. package/out/zql/src/ivm/memory-source.d.ts +1 -0
  76. package/out/zql/src/ivm/memory-source.d.ts.map +1 -1
  77. package/out/zql/src/ivm/memory-source.js +9 -9
  78. package/out/zql/src/ivm/memory-source.js.map +1 -1
  79. package/out/zql/src/ivm/schema.d.ts +6 -2
  80. package/out/zql/src/ivm/schema.d.ts.map +1 -1
  81. package/out/zql/src/ivm/source.d.ts +10 -0
  82. package/out/zql/src/ivm/source.d.ts.map +1 -1
  83. package/out/zql/src/ivm/view-apply-change.js +4 -2
  84. package/out/zql/src/ivm/view-apply-change.js.map +1 -1
  85. package/out/zql/src/query/expression.d.ts +3 -2
  86. package/out/zql/src/query/expression.d.ts.map +1 -1
  87. package/out/zql/src/query/expression.js.map +1 -1
  88. package/out/zql/src/query/query-impl.d.ts +2 -2
  89. package/out/zql/src/query/query-impl.d.ts.map +1 -1
  90. package/out/zql/src/query/query-impl.js.map +1 -1
  91. package/out/zqlite/src/table-source.d.ts +1 -0
  92. package/out/zqlite/src/table-source.d.ts.map +1 -1
  93. package/out/zqlite/src/table-source.js +9 -3
  94. package/out/zqlite/src/table-source.js.map +1 -1
  95. package/package.json +2 -2
  96. package/out/chunk-C7M3BJ3Z.js.map +0 -7
package/out/advanced.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import "./chunk-ULOTOBTC.js";
2
2
  import {
3
3
  applyChange
4
- } from "./chunk-C7M3BJ3Z.js";
4
+ } from "./chunk-6HXO6VMP.js";
5
5
  import "./chunk-F5QR3K72.js";
6
6
  export {
7
7
  applyChange
@@ -1,7 +1,8 @@
1
1
  // ../shared/src/asserts.ts
2
2
  function assert(b, msg = "Assertion failed") {
3
3
  if (!b) {
4
- throw new Error(msg);
4
+ const msgStr = typeof msg === "string" ? msg : msg();
5
+ throw new Error(msgStr);
5
6
  }
6
7
  }
7
8
  function assertString(v) {
@@ -182,16 +183,16 @@ function applyChange(parentEntry, change, schema, relationship, format) {
182
183
  const childSchema = must(
183
184
  schema.relationships[change.child.relationshipName]
184
185
  );
185
- const childFormat = must(
186
- format.relationships[change.child.relationshipName]
187
- );
188
- applyChange(
189
- existing,
190
- change.child.change,
191
- childSchema,
192
- change.child.relationshipName,
193
- childFormat
194
- );
186
+ const childFormat = format.relationships[change.child.relationshipName];
187
+ if (childFormat !== void 0) {
188
+ applyChange(
189
+ existing,
190
+ change.child.change,
191
+ childSchema,
192
+ change.child.relationshipName,
193
+ childFormat
194
+ );
195
+ }
195
196
  break;
196
197
  }
197
198
  case "edit": {
@@ -296,4 +297,4 @@ export {
296
297
  must,
297
298
  applyChange
298
299
  };
299
- //# sourceMappingURL=chunk-C7M3BJ3Z.js.map
300
+ //# sourceMappingURL=chunk-6HXO6VMP.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../shared/src/asserts.ts", "../../shared/src/must.ts", "../../zql/src/ivm/view-apply-change.ts"],
4
+ "sourcesContent": ["export function assert(\n b: unknown,\n msg: string | (() => string) = 'Assertion failed',\n): asserts b {\n if (!b) {\n const msgStr = typeof msg === 'string' ? msg : msg();\n throw new Error(msgStr);\n }\n}\n\nexport function assertString(v: unknown): asserts v is string {\n assertType(v, 'string');\n}\n\nexport function assertNumber(v: unknown): asserts v is number {\n assertType(v, 'number');\n}\n\nexport function assertBoolean(v: unknown): asserts v is boolean {\n assertType(v, 'boolean');\n}\n\nfunction assertType(v: unknown, t: string) {\n if (typeof v !== t) {\n throwInvalidType(v, t);\n }\n}\n\nexport function assertObject(v: unknown): asserts v is Record<string, unknown> {\n if (v === null) {\n throwInvalidType(v, 'object');\n }\n assertType(v, 'object');\n}\n\nexport function assertArray(v: unknown): asserts v is unknown[] {\n if (!Array.isArray(v)) {\n throwInvalidType(v, 'array');\n }\n}\n\nexport function invalidType(v: unknown, t: string): string {\n let s = 'Invalid type: ';\n if (v === null || v === undefined) {\n s += v;\n } else {\n s += `${typeof v} \\`${v}\\``;\n }\n return s + `, expected ${t}`;\n}\n\nexport function throwInvalidType(v: unknown, t: string): never {\n throw new Error(invalidType(v, t));\n}\n\nexport function assertNotNull<T>(v: T | null): asserts v is T {\n if (v === null) {\n throw new Error('Expected non-null value');\n }\n}\n\nexport function assertUndefined<T>(\n v: T | undefined,\n msg = 'Expected undefined value',\n): asserts v is T {\n if (v !== undefined) {\n throw new Error(msg);\n }\n}\n\nexport function assertNotUndefined<T>(\n v: T | undefined,\n msg = 'Expected non undefined value',\n): asserts v is T {\n if (v === undefined) {\n throw new Error(msg);\n }\n}\n\nexport function assertInstanceof<T>(\n v: unknown,\n t: new (...args: unknown[]) => T,\n): asserts v is T {\n if (!(v instanceof t)) {\n throw new Error(`Expected instanceof ${t.name}`);\n }\n}\n\nexport function assertUint8Array(v: unknown): asserts v is Uint8Array {\n assertInstanceof(v, Uint8Array);\n}\n\nexport function unreachable(): never;\nexport function unreachable(v: never): never;\nexport function unreachable(_?: never): never {\n throw new Error('Unreachable');\n}\n\nexport function notImplemented(): never {\n throw new Error('Not implemented');\n}\n", "export function must<T>(v: T | undefined | null, msg?: string): T {\n // eslint-disable-next-line eqeqeq\n if (v == null) {\n throw new Error(msg ?? `Unexpected ${v} value`);\n }\n return v;\n}\n", "import {\n assert,\n assertArray,\n assertObject,\n assertUndefined,\n unreachable,\n} from '../../../shared/src/asserts.js';\nimport {must} from '../../../shared/src/must.js';\nimport type {Row} from '../../../zero-protocol/src/data.js';\nimport type {Change} from './change.js';\nimport type {Node, Comparator} from './data.js';\nimport type {SourceSchema} from './schema.js';\nimport type {Entry, EntryList, Format} from './view.js';\n\nexport function applyChange(\n parentEntry: Entry,\n change: Change,\n schema: SourceSchema,\n relationship: string,\n format: Format,\n) {\n if (schema.isHidden) {\n switch (change.type) {\n case 'add':\n case 'remove':\n for (const [relationship, children] of Object.entries(\n change.node.relationships,\n )) {\n const childSchema = must(schema.relationships[relationship]);\n for (const node of children) {\n applyChange(\n parentEntry,\n {type: change.type, node},\n childSchema,\n relationship,\n format,\n );\n }\n }\n return;\n case 'edit':\n // If hidden at this level it means that the hidden row was changed. If\n // the row was changed in such a way that it would change the\n // relationships then the edit would have been split into remove and\n // add.\n return;\n case 'child': {\n const childSchema = must(\n schema.relationships[change.child.relationshipName],\n );\n applyChange(\n parentEntry,\n change.child.change,\n childSchema,\n relationship,\n format,\n );\n return;\n }\n default:\n unreachable(change);\n }\n }\n\n const {singular, relationships: childFormats} = format;\n switch (change.type) {\n case 'add': {\n // TODO: Only create a new entry if we need to mutate the existing one.\n const newEntry: Entry = {\n ...change.node.row,\n };\n if (singular) {\n assertUndefined(\n parentEntry[relationship],\n 'single output already exists',\n );\n parentEntry[relationship] = newEntry;\n } else {\n const view = parentEntry[relationship];\n assertArray(view);\n const {pos, found} = binarySearch(view, newEntry, schema.compareRows);\n assert(!found, 'node already exists');\n view.splice(pos, 0, newEntry);\n }\n for (const [relationship, children] of Object.entries(\n change.node.relationships,\n )) {\n // TODO: Is there a flag to make TypeScript complain that dictionary access might be undefined?\n const childSchema = must(schema.relationships[relationship]);\n const childFormat = childFormats[relationship];\n if (childFormat === undefined) {\n continue;\n }\n\n const newView = childFormat.singular ? undefined : ([] as EntryList);\n newEntry[relationship] = newView;\n for (const node of children) {\n applyChange(\n newEntry,\n {type: 'add', node},\n childSchema,\n relationship,\n childFormat,\n );\n }\n }\n break;\n }\n case 'remove': {\n if (singular) {\n assertObject(parentEntry[relationship]);\n parentEntry[relationship] = undefined;\n } else {\n assertArray(parentEntry[relationship]);\n const view = parentEntry[relationship];\n const {pos, found} = binarySearch(\n view,\n change.node.row,\n schema.compareRows,\n );\n assert(found, 'node does not exist');\n view.splice(pos, 1);\n }\n // Needed to ensure cleanup of operator state is fully done.\n drainStreams(change.node);\n break;\n }\n case 'child': {\n let existing: Entry;\n if (singular) {\n assertObject(parentEntry[relationship]);\n existing = parentEntry[relationship];\n } else {\n assertArray(parentEntry[relationship]);\n const list = parentEntry[relationship];\n const {pos, found} = binarySearch(list, change.row, schema.compareRows);\n assert(found, 'node does not exist');\n existing = list[pos];\n }\n\n const childSchema = must(\n schema.relationships[change.child.relationshipName],\n );\n const childFormat = format.relationships[change.child.relationshipName];\n if (childFormat !== undefined) {\n applyChange(\n existing,\n change.child.change,\n childSchema,\n change.child.relationshipName,\n childFormat,\n );\n }\n break;\n }\n case 'edit': {\n if (singular) {\n assertObject(parentEntry[relationship]);\n parentEntry[relationship] = {\n ...parentEntry[relationship],\n ...change.node.row,\n };\n } else {\n assertArray(parentEntry[relationship]);\n const view = parentEntry[relationship];\n // If the order changed due to the edit, we need to remove and reinsert.\n if (schema.compareRows(change.oldNode.row, change.node.row) === 0) {\n const {pos, found} = binarySearch(\n view,\n change.oldNode.row,\n schema.compareRows,\n );\n assert(found, 'node does not exists');\n view[pos] = makeEntryPreserveRelationships(\n change.node.row,\n view[pos],\n schema.relationships,\n );\n } else {\n // Remove\n const {pos, found} = binarySearch(\n view,\n change.oldNode.row,\n schema.compareRows,\n );\n assert(found, 'node does not exists');\n const oldEntry = view[pos];\n view.splice(pos, 1);\n\n // Insert\n {\n const {pos, found} = binarySearch(\n view,\n change.node.row,\n schema.compareRows,\n );\n assert(!found, 'node already exists');\n view.splice(\n pos,\n 0,\n makeEntryPreserveRelationships(\n change.node.row,\n oldEntry,\n schema.relationships,\n ),\n );\n }\n }\n }\n break;\n }\n default:\n unreachable(change);\n }\n}\n\n// TODO: Do not return an object. It puts unnecessary pressure on the GC.\nfunction binarySearch(view: EntryList, target: Entry, comparator: Comparator) {\n let low = 0;\n let high = view.length - 1;\n while (low <= high) {\n const mid = (low + high) >>> 1;\n const comparison = comparator(view[mid] as Row, target as Row);\n if (comparison < 0) {\n low = mid + 1;\n } else if (comparison > 0) {\n high = mid - 1;\n } else {\n return {pos: mid, found: true};\n }\n }\n return {pos: low, found: false};\n}\n\nfunction makeEntryPreserveRelationships(\n row: Row,\n entry: Entry,\n relationships: {[key: string]: SourceSchema},\n): Entry {\n const result: Entry = {...row};\n for (const relationship in relationships) {\n assert(!(relationship in row), 'Relationship already exists');\n result[relationship] = entry[relationship];\n }\n return result;\n}\n\nfunction drainStreams(node: Node) {\n for (const stream of Object.values(node.relationships)) {\n for (const node of stream) {\n drainStreams(node);\n }\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["relationship", "pos", "found", "node"]
7
+ }
@@ -14,7 +14,7 @@ import {
14
14
  must,
15
15
  throwInvalidType,
16
16
  unreachable
17
- } from "./chunk-C7M3BJ3Z.js";
17
+ } from "./chunk-6HXO6VMP.js";
18
18
  import {
19
19
  __export,
20
20
  __reExport
@@ -9344,28 +9344,36 @@ function assertNoDuplicates(arr) {
9344
9344
  "Primary key must not contain duplicates"
9345
9345
  );
9346
9346
  }
9347
- function normalizePrimaryKey(arr) {
9348
- assertNoDuplicates(arr);
9349
- return arr;
9347
+ function normalizePrimaryKey(primaryKey) {
9348
+ if (typeof primaryKey === "string") {
9349
+ return [primaryKey];
9350
+ }
9351
+ assertNoDuplicates(primaryKey);
9352
+ return primaryKey;
9350
9353
  }
9351
9354
  function normalizeColumns(columns, primaryKey) {
9352
9355
  const rv = {};
9353
9356
  for (const pk of primaryKey) {
9354
9357
  const schemaValue = columns[pk];
9355
9358
  assert(schemaValue, `Primary key column "${pk}" not found`);
9356
- const { type, optional } = schemaValue;
9357
- assert(!optional, `Primary key column "${pk}" cannot be optional`);
9358
- assert(
9359
- type === "string" || type === "number" || type === "boolean",
9360
- `Primary key column "${pk}" must be a string, number, or boolean. Got ${type}`
9361
- );
9359
+ if (typeof schemaValue !== "string") {
9360
+ const { type, optional } = schemaValue;
9361
+ assert(!optional, `Primary key column "${pk}" cannot be optional`);
9362
+ assert(
9363
+ type === "string" || type === "number" || type === "boolean",
9364
+ `Primary key column "${pk}" must be a string, number, or boolean. Got ${type}`
9365
+ );
9366
+ }
9362
9367
  }
9363
9368
  for (const [name, column] of sortedEntries(columns)) {
9364
- rv[name] = normalizeSchemaValue(column);
9369
+ rv[name] = normalizeColumn(column);
9365
9370
  }
9366
9371
  return rv;
9367
9372
  }
9368
- function normalizeSchemaValue(value) {
9373
+ function normalizeColumn(value) {
9374
+ if (typeof value === "string") {
9375
+ return { type: value, optional: false };
9376
+ }
9369
9377
  return {
9370
9378
  type: value.type,
9371
9379
  optional: value.optional ?? false
@@ -9373,8 +9381,10 @@ function normalizeSchemaValue(value) {
9373
9381
  }
9374
9382
  function normalizeRelationships(relationships, tableSchemaCache) {
9375
9383
  const rv = {};
9376
- for (const [name, relationship] of sortedEntries(relationships)) {
9377
- rv[name] = normalizeRelationship(relationship, tableSchemaCache);
9384
+ if (relationships) {
9385
+ for (const [name, relationship] of sortedEntries(relationships)) {
9386
+ rv[name] = normalizeRelationship(relationship, tableSchemaCache);
9387
+ }
9378
9388
  }
9379
9389
  return rv;
9380
9390
  }
@@ -9385,13 +9395,15 @@ function normalizeRelationship(relationship, tableSchemaCache) {
9385
9395
  return normalizeJunctionRelationship(relationship, tableSchemaCache);
9386
9396
  }
9387
9397
  function normalizeFieldRelationship(relationship, tableSchemaCache) {
9398
+ const sourceField = normalizeFieldName(relationship.sourceField);
9399
+ const destField = normalizeFieldName(relationship.destField);
9388
9400
  assert(
9389
- relationship.sourceField.length === relationship.destField.length,
9401
+ sourceField.length === destField.length,
9390
9402
  "Source and destination fields must have the same length"
9391
9403
  );
9392
9404
  return {
9393
- sourceField: relationship.sourceField,
9394
- destField: relationship.destField,
9405
+ sourceField,
9406
+ destField,
9395
9407
  destSchema: normalizeLazyTableSchema(
9396
9408
  relationship.destSchema,
9397
9409
  tableSchemaCache
@@ -9413,6 +9425,20 @@ function normalizeLazyTableSchema(tableSchema, buildCache) {
9413
9425
  buildCache
9414
9426
  );
9415
9427
  }
9428
+ function normalizeFieldName(sourceField) {
9429
+ if (typeof sourceField === "string") {
9430
+ return [sourceField];
9431
+ }
9432
+ assert(sourceField.length > 0, "Expected at least one field");
9433
+ return sourceField;
9434
+ }
9435
+ function normalizeTables(tables) {
9436
+ const result = {};
9437
+ for (const [name, table] of sortedEntries(tables)) {
9438
+ result[name] = normalizeTableSchemaWithCache(table, name, /* @__PURE__ */ new Map());
9439
+ }
9440
+ return result;
9441
+ }
9416
9442
 
9417
9443
  // ../zero-schema/src/normalized-schema.ts
9418
9444
  function normalizeSchema(schema) {
@@ -9426,10 +9452,10 @@ var NormalizedSchema = class {
9426
9452
  tables;
9427
9453
  constructor(schema) {
9428
9454
  this.version = schema.version;
9429
- this.tables = normalizeTables(schema.tables);
9455
+ this.tables = normalizeTables2(schema.tables);
9430
9456
  }
9431
9457
  };
9432
- function normalizeTables(tables) {
9458
+ function normalizeTables2(tables) {
9433
9459
  const rv = {};
9434
9460
  const tableSchemaCache = /* @__PURE__ */ new Map();
9435
9461
  for (const [name, table] of sortedEntries(tables)) {
@@ -9657,7 +9683,7 @@ var simpleOperatorSchema = valita_exports.union(
9657
9683
  likeOpsSchema,
9658
9684
  inOpsSchema
9659
9685
  );
9660
- var literalReferenceSchema = valita_exports.object({
9686
+ var literalReferenceSchema = readonlyObject({
9661
9687
  type: valita_exports.literal("literal"),
9662
9688
  value: valita_exports.union(
9663
9689
  valita_exports.string(),
@@ -9667,11 +9693,11 @@ var literalReferenceSchema = valita_exports.object({
9667
9693
  readonlyArray(valita_exports.union(valita_exports.string(), valita_exports.number(), valita_exports.boolean()))
9668
9694
  )
9669
9695
  });
9670
- var columnReferenceSchema = valita_exports.object({
9696
+ var columnReferenceSchema = readonlyObject({
9671
9697
  type: valita_exports.literal("column"),
9672
9698
  name: valita_exports.string()
9673
9699
  });
9674
- var parameterReferenceSchema = valita_exports.object({
9700
+ var parameterReferenceSchema = readonlyObject({
9675
9701
  type: valita_exports.literal("static"),
9676
9702
  anchor: valita_exports.union(valita_exports.literal("authData"), valita_exports.literal("preMutationRow")),
9677
9703
  field: valita_exports.string()
@@ -9681,16 +9707,13 @@ var conditionValueSchema = valita_exports.union(
9681
9707
  columnReferenceSchema,
9682
9708
  parameterReferenceSchema
9683
9709
  );
9684
- var simpleConditionSchema = valita_exports.object({
9710
+ var simpleConditionSchema = readonlyObject({
9685
9711
  type: valita_exports.literal("simple"),
9686
9712
  op: simpleOperatorSchema,
9687
9713
  left: conditionValueSchema,
9688
9714
  right: valita_exports.union(parameterReferenceSchema, literalReferenceSchema)
9689
9715
  });
9690
- var correlatedSubqueryConditionOperatorSchema = valita_exports.union(
9691
- valita_exports.literal("EXISTS"),
9692
- valita_exports.literal("NOT EXISTS")
9693
- );
9716
+ var correlatedSubqueryConditionOperatorSchema = valita_exports.union(valita_exports.literal("EXISTS"), valita_exports.literal("NOT EXISTS"));
9694
9717
  var correlatedSubqueryConditionSchema = readonlyObject({
9695
9718
  type: valita_exports.literal("correlatedSubquery"),
9696
9719
  related: valita_exports.lazy(() => correlatedSubquerySchema),
@@ -9710,7 +9733,9 @@ var disjunctionSchema = readonlyObject({
9710
9733
  type: valita_exports.literal("or"),
9711
9734
  conditions: readonlyArray(conditionSchema)
9712
9735
  });
9713
- var compoundKeySchema = valita_exports.tuple([valita_exports.string()]).concat(valita_exports.array(valita_exports.string()));
9736
+ var compoundKeySchema = readonly(
9737
+ valita_exports.tuple([valita_exports.string()]).concat(valita_exports.array(valita_exports.string()))
9738
+ );
9714
9739
  var correlationSchema = readonlyObject({
9715
9740
  parentField: compoundKeySchema,
9716
9741
  childField: compoundKeySchema
@@ -9722,7 +9747,7 @@ var correlatedSubquerySchemaOmitSubquery = readonlyObject({
9722
9747
  var correlatedSubquerySchema = correlatedSubquerySchemaOmitSubquery.extend({
9723
9748
  subquery: valita_exports.lazy(() => astSchema)
9724
9749
  });
9725
- var astSchema = valita_exports.object({
9750
+ var astSchema = readonlyObject({
9726
9751
  schema: valita_exports.string().optional(),
9727
9752
  table: valita_exports.string(),
9728
9753
  alias: valita_exports.string().optional(),
@@ -9813,7 +9838,7 @@ function compareValuePosition(a, b) {
9813
9838
  switch (a.type) {
9814
9839
  case "literal":
9815
9840
  assert(b.type === "literal");
9816
- return compareUTF8MaybeNull(String(a.value), String(b.value));
9841
+ return compareUTF83(String(a.value), String(b.value));
9817
9842
  case "column":
9818
9843
  assert(b.type === "column");
9819
9844
  return compareUTF83(a.name, b.name);
@@ -14349,23 +14374,30 @@ var MemorySource = class {
14349
14374
  return this.#fetch(req, connection);
14350
14375
  }
14351
14376
  push(change) {
14377
+ for (const _ of this.genPush(change)) {
14378
+ }
14379
+ }
14380
+ *genPush(change) {
14352
14381
  const primaryIndex = this.#getPrimaryIndex();
14353
14382
  const { data } = primaryIndex;
14354
14383
  switch (change.type) {
14355
14384
  case "add":
14356
- if (data.has(change.row)) {
14357
- throw new Error(`Row already exists ${JSON.stringify(change)}`);
14358
- }
14385
+ assert(
14386
+ !data.has(change.row),
14387
+ () => `Row already exists ${JSON.stringify(change)}`
14388
+ );
14359
14389
  break;
14360
14390
  case "remove":
14361
- if (!data.has(change.row)) {
14362
- throw new Error(`Row not found ${JSON.stringify(change)}`);
14363
- }
14391
+ assert(
14392
+ data.has(change.row),
14393
+ () => `Row not found ${JSON.stringify(change)}`
14394
+ );
14364
14395
  break;
14365
14396
  case "edit":
14366
- if (!data.has(change.oldRow)) {
14367
- throw new Error(`Row not found ${JSON.stringify(change)}`);
14368
- }
14397
+ assert(
14398
+ data.has(change.oldRow),
14399
+ () => `Row not found ${JSON.stringify(change)}`
14400
+ );
14369
14401
  break;
14370
14402
  default:
14371
14403
  unreachable(change);
@@ -14391,6 +14423,7 @@ var MemorySource = class {
14391
14423
  if (output) {
14392
14424
  this.#overlay = { outputIndex, change };
14393
14425
  output.push(outputChange);
14426
+ yield;
14394
14427
  }
14395
14428
  }
14396
14429
  this.#overlay = void 0;
@@ -14668,7 +14701,7 @@ var ZeroContext = class {
14668
14701
  #commitListeners = /* @__PURE__ */ new Set();
14669
14702
  staticQueryParameters = void 0;
14670
14703
  constructor(tables, addQuery, batchViewUpdates) {
14671
- this.#tables = tables;
14704
+ this.#tables = normalizeTables(tables);
14672
14705
  this.#addQuery = addQuery;
14673
14706
  this.#batchViewUpdates = batchViewUpdates;
14674
14707
  }
@@ -15219,7 +15252,7 @@ function makeMessage(message, context, logLevel) {
15219
15252
  }
15220
15253
 
15221
15254
  // ../zero-client/src/client/version.ts
15222
- var version2 = "0.7.2024120108+6d0413";
15255
+ var version2 = "0.7.2024120400+c18ae6";
15223
15256
 
15224
15257
  // ../zero-client/src/client/log-options.ts
15225
15258
  var LevelFilterLogSink = class {
@@ -16873,7 +16906,7 @@ var Zero = class {
16873
16906
  }
16874
16907
  async #updateAuthToken(lc, error) {
16875
16908
  const { auth: authOption } = this.#options;
16876
- const auth = await (typeof authOption === "function" ? authOption(error) : authOption);
16909
+ const auth = await authOption?.(error);
16877
16910
  if (auth) {
16878
16911
  lc.debug?.("Got auth token");
16879
16912
  this.#rep.auth = auth;
@@ -17209,4 +17242,4 @@ export {
17209
17242
  escapeLike,
17210
17243
  Zero
17211
17244
  };
17212
- //# sourceMappingURL=chunk-YQFIGL5R.js.map
17245
+ //# sourceMappingURL=chunk-WJCWI5I4.js.map