@rocicorp/zero 0.25.0-canary.15 → 0.25.0-canary.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/out/shared/src/deep-merge.d.ts +6 -4
  2. package/out/shared/src/deep-merge.d.ts.map +1 -1
  3. package/out/shared/src/deep-merge.js +2 -1
  4. package/out/shared/src/deep-merge.js.map +1 -1
  5. package/out/z2s/src/compiler.d.ts.map +1 -1
  6. package/out/z2s/src/compiler.js +4 -2
  7. package/out/z2s/src/compiler.js.map +1 -1
  8. package/out/zero/package.json.js +1 -1
  9. package/out/zero/src/pg.js +4 -3
  10. package/out/zero/src/server.js +4 -3
  11. package/out/zero/src/zero.js +11 -3
  12. package/out/zero/src/zero.js.map +1 -1
  13. package/out/zero-cache/src/config/zero-config.d.ts +8 -0
  14. package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
  15. package/out/zero-cache/src/config/zero-config.js +16 -0
  16. package/out/zero-cache/src/config/zero-config.js.map +1 -1
  17. package/out/zero-cache/src/server/otel-diag-logger.d.ts.map +1 -1
  18. package/out/zero-cache/src/server/otel-diag-logger.js +1 -22
  19. package/out/zero-cache/src/server/otel-diag-logger.js.map +1 -1
  20. package/out/zero-cache/src/services/litestream/commands.js +3 -2
  21. package/out/zero-cache/src/services/litestream/commands.js.map +1 -1
  22. package/out/zero-client/src/client/crud-impl.d.ts +11 -0
  23. package/out/zero-client/src/client/crud-impl.d.ts.map +1 -0
  24. package/out/zero-client/src/client/crud-impl.js +102 -0
  25. package/out/zero-client/src/client/crud-impl.js.map +1 -0
  26. package/out/zero-client/src/client/crud.d.ts +4 -37
  27. package/out/zero-client/src/client/crud.d.ts.map +1 -1
  28. package/out/zero-client/src/client/crud.js +18 -114
  29. package/out/zero-client/src/client/crud.js.map +1 -1
  30. package/out/zero-client/src/client/custom.d.ts +2 -2
  31. package/out/zero-client/src/client/custom.d.ts.map +1 -1
  32. package/out/zero-client/src/client/custom.js +5 -43
  33. package/out/zero-client/src/client/custom.js.map +1 -1
  34. package/out/zero-client/src/client/make-replicache-mutators.d.ts.map +1 -1
  35. package/out/zero-client/src/client/make-replicache-mutators.js +4 -1
  36. package/out/zero-client/src/client/make-replicache-mutators.js.map +1 -1
  37. package/out/zero-client/src/client/version.js +1 -1
  38. package/out/zero-client/src/client/zero.d.ts +9 -7
  39. package/out/zero-client/src/client/zero.d.ts.map +1 -1
  40. package/out/zero-client/src/client/zero.js +10 -3
  41. package/out/zero-client/src/client/zero.js.map +1 -1
  42. package/out/zero-client/src/mod.d.ts +7 -6
  43. package/out/zero-client/src/mod.d.ts.map +1 -1
  44. package/out/zero-react/src/use-query.d.ts +6 -4
  45. package/out/zero-react/src/use-query.d.ts.map +1 -1
  46. package/out/zero-react/src/use-query.js +2 -1
  47. package/out/zero-react/src/use-query.js.map +1 -1
  48. package/out/zero-server/src/custom.d.ts +44 -5
  49. package/out/zero-server/src/custom.d.ts.map +1 -1
  50. package/out/zero-server/src/custom.js +96 -17
  51. package/out/zero-server/src/custom.js.map +1 -1
  52. package/out/zero-server/src/zql-database.d.ts +1 -1
  53. package/out/zero-server/src/zql-database.d.ts.map +1 -1
  54. package/out/zero-server/src/zql-database.js +5 -13
  55. package/out/zero-server/src/zql-database.js.map +1 -1
  56. package/out/zero-solid/src/solid-view.d.ts +6 -1
  57. package/out/zero-solid/src/solid-view.d.ts.map +1 -1
  58. package/out/zero-solid/src/solid-view.js +1 -32
  59. package/out/zero-solid/src/solid-view.js.map +1 -1
  60. package/out/zero-solid/src/use-query.d.ts +5 -3
  61. package/out/zero-solid/src/use-query.d.ts.map +1 -1
  62. package/out/zero-solid/src/use-query.js +5 -1
  63. package/out/zero-solid/src/use-query.js.map +1 -1
  64. package/out/zql/src/mutate/crud.d.ts +139 -0
  65. package/out/zql/src/mutate/crud.d.ts.map +1 -0
  66. package/out/zql/src/mutate/crud.js +53 -0
  67. package/out/zql/src/mutate/crud.js.map +1 -0
  68. package/out/zql/src/mutate/custom.d.ts +12 -53
  69. package/out/zql/src/mutate/custom.d.ts.map +1 -1
  70. package/out/zql/src/mutate/custom.js +1 -5
  71. package/out/zql/src/mutate/custom.js.map +1 -1
  72. package/out/zql/src/mutate/mutator-registry.d.ts +33 -32
  73. package/out/zql/src/mutate/mutator-registry.d.ts.map +1 -1
  74. package/out/zql/src/mutate/mutator-registry.js +25 -25
  75. package/out/zql/src/mutate/mutator-registry.js.map +1 -1
  76. package/out/zql/src/mutate/mutator.d.ts +42 -62
  77. package/out/zql/src/mutate/mutator.d.ts.map +1 -1
  78. package/out/zql/src/mutate/mutator.js +12 -8
  79. package/out/zql/src/mutate/mutator.js.map +1 -1
  80. package/out/zql/src/query/abstract-query.d.ts +2 -3
  81. package/out/zql/src/query/abstract-query.d.ts.map +1 -1
  82. package/out/zql/src/query/abstract-query.js +0 -3
  83. package/out/zql/src/query/abstract-query.js.map +1 -1
  84. package/out/zql/src/query/query-impl.d.ts +2 -2
  85. package/out/zql/src/query/query-impl.d.ts.map +1 -1
  86. package/out/zql/src/query/query-impl.js.map +1 -1
  87. package/out/zql/src/query/query-registry.d.ts +87 -79
  88. package/out/zql/src/query/query-registry.d.ts.map +1 -1
  89. package/out/zql/src/query/query-registry.js +44 -38
  90. package/out/zql/src/query/query-registry.js.map +1 -1
  91. package/out/zql/src/query/query.d.ts +3 -18
  92. package/out/zql/src/query/query.d.ts.map +1 -1
  93. package/out/zql/src/query/runnable-query-impl.d.ts +2 -2
  94. package/out/zql/src/query/runnable-query-impl.d.ts.map +1 -1
  95. package/out/zql/src/query/runnable-query-impl.js.map +1 -1
  96. package/out/zql/src/query/static-query.d.ts +1 -0
  97. package/out/zql/src/query/static-query.d.ts.map +1 -1
  98. package/out/zql/src/query/static-query.js +2 -2
  99. package/out/zql/src/query/static-query.js.map +1 -1
  100. package/package.json +1 -1
@@ -2,15 +2,17 @@ type Simplify<T> = {
2
2
  [K in keyof T]: T[K];
3
3
  } & {};
4
4
  type IsPlainObject<T> = T extends object ? T extends Function | readonly unknown[] ? false : true : false;
5
- type MergeValue<A, B> = IsPlainObject<A> extends true ? IsPlainObject<B> extends true ? DeepMerge<A & {}, B & {}> : B : B;
5
+ type IsLeaf<T, Leaf> = [T] extends [Leaf] ? true : false;
6
+ type MergeValue<A, B, Leaf> = IsLeaf<A, Leaf> extends true ? B : IsLeaf<B, Leaf> extends true ? B : IsPlainObject<A> extends true ? IsPlainObject<B> extends true ? DeepMerge<A & {}, B & {}, Leaf> : B : B;
6
7
  /**
7
8
  * Type-level deep merge of two object types. Properties from B override
8
9
  * properties from A. When both A[K] and B[K] are objects (not arrays or
9
10
  * functions), they are recursively merged.
10
11
  */
11
- export type DeepMerge<A, B> = Simplify<Omit<A, keyof B> & {
12
- [K in keyof B]: K extends keyof A ? MergeValue<A[K], B[K]> : B[K];
12
+ export type DeepMerge<A, B, Leaf = never> = Simplify<Omit<A, keyof B> & {
13
+ [K in keyof B]: K extends keyof A ? MergeValue<A[K], B[K], Leaf> : B[K];
13
14
  }>;
15
+ export declare function isPlainObject(value: unknown): value is Record<string, unknown>;
14
16
  /**
15
17
  * Deep merges two objects. Properties from `b` override properties from `a`.
16
18
  * Nested objects are recursively merged.
@@ -21,6 +23,6 @@ export type DeepMerge<A, B> = Simplify<Omit<A, keyof B> & {
21
23
  * as a leaf (not recursed into). Defaults to checking if the value is not a
22
24
  * plain object.
23
25
  */
24
- export declare function deepMerge<A extends Record<string, unknown>, B extends Record<string, unknown>>(a: A, b: B, isLeaf?: (value: unknown) => boolean): DeepMerge<A, B>;
26
+ export declare function deepMerge<A extends Record<string, unknown>, B extends Record<string, unknown>, Leaf = never>(a: A, b: B, isLeaf?: (value: unknown) => boolean): DeepMerge<A, B, Leaf>;
25
27
  export {};
26
28
  //# sourceMappingURL=deep-merge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"deep-merge.d.ts","sourceRoot":"","sources":["../../../../shared/src/deep-merge.ts"],"names":[],"mappings":"AACA,KAAK,QAAQ,CAAC,CAAC,IAAI;KAAE,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAC,GAAG,EAAE,CAAC;AAG/C,KAAK,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GACpC,CAAC,SAAS,QAAQ,GAAG,SAAS,OAAO,EAAE,GACrC,KAAK,GACL,IAAI,GACN,KAAK,CAAC;AAGV,KAAK,UAAU,CAAC,CAAC,EAAE,CAAC,IAClB,aAAa,CAAC,CAAC,CAAC,SAAS,IAAI,GACzB,aAAa,CAAC,CAAC,CAAC,SAAS,IAAI,GAC3B,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GACzB,CAAC,GACH,CAAC,CAAC;AAER;;;;GAIG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,QAAQ,CACpC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG;KAChB,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAClE,CACF,CAAC;AAMF;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CACvB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAEjC,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,CAAC,EACJ,MAAM,GAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAgC,GAC3D,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAyBjB"}
1
+ {"version":3,"file":"deep-merge.d.ts","sourceRoot":"","sources":["../../../../shared/src/deep-merge.ts"],"names":[],"mappings":"AACA,KAAK,QAAQ,CAAC,CAAC,IAAI;KAAE,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAC,GAAG,EAAE,CAAC;AAG/C,KAAK,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GACpC,CAAC,SAAS,QAAQ,GAAG,SAAS,OAAO,EAAE,GACrC,KAAK,GACL,IAAI,GACN,KAAK,CAAC;AAEV,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;AAEzD,KAAK,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,IACxB,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,IAAI,GACxB,CAAC,GACD,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,IAAI,GAC1B,CAAC,GACD,aAAa,CAAC,CAAC,CAAC,SAAS,IAAI,GAC3B,aAAa,CAAC,CAAC,CAAC,SAAS,IAAI,GAC3B,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,GAC/B,CAAC,GACH,CAAC,CAAC;AAEZ;;;;GAIG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,KAAK,IAAI,QAAQ,CAClD,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG;KAChB,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACxE,CACF,CAAC;AAEF,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAElC;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CACvB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,IAAI,GAAG,KAAK,EAEZ,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,CAAC,EACJ,MAAM,GAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAgC,GAC3D,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CA6BvB"}
@@ -22,6 +22,7 @@ function deepMerge(a, b, isLeaf = (v) => !isPlainObject(v)) {
22
22
  return result;
23
23
  }
24
24
  export {
25
- deepMerge
25
+ deepMerge,
26
+ isPlainObject
26
27
  };
27
28
  //# sourceMappingURL=deep-merge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deep-merge.js","sources":["../../../../shared/src/deep-merge.ts"],"sourcesContent":["// Force TypeScript to evaluate/flatten a type\ntype Simplify<T> = {[K in keyof T]: T[K]} & {};\n\n// Helper to check if T is a plain object (not array or function)\ntype IsPlainObject<T> = T extends object\n ? T extends Function | readonly unknown[]\n ? false\n : true\n : false;\n\n// Merge when both are plain objects, otherwise B wins\ntype MergeValue<A, B> =\n IsPlainObject<A> extends true\n ? IsPlainObject<B> extends true\n ? DeepMerge<A & {}, B & {}>\n : B\n : B;\n\n/**\n * Type-level deep merge of two object types. Properties from B override\n * properties from A. When both A[K] and B[K] are objects (not arrays or\n * functions), they are recursively merged.\n */\nexport type DeepMerge<A, B> = Simplify<\n Omit<A, keyof B> & {\n [K in keyof B]: K extends keyof A ? MergeValue<A[K], B[K]> : B[K];\n }\n>;\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\n/**\n * Deep merges two objects. Properties from `b` override properties from `a`.\n * Nested objects are recursively merged.\n *\n * @param a - The base object.\n * @param b - The object to merge into `a`.\n * @param isLeaf - Optional predicate to determine if a value should be treated\n * as a leaf (not recursed into). Defaults to checking if the value is not a\n * plain object.\n */\nexport function deepMerge<\n A extends Record<string, unknown>,\n B extends Record<string, unknown>,\n>(\n a: A,\n b: B,\n isLeaf: (value: unknown) => boolean = v => !isPlainObject(v),\n): DeepMerge<A, B> {\n const result: Record<string, unknown> = {};\n\n // Copy all keys from a\n for (const key of Object.keys(a)) {\n result[key] = a[key];\n }\n\n // Merge/override with keys from b\n for (const key of Object.keys(b)) {\n const aVal = a[key];\n const bVal = b[key];\n\n if (key in a && !isLeaf(aVal) && !isLeaf(bVal)) {\n result[key] = deepMerge(\n aVal as Record<string, unknown>,\n bVal as Record<string, unknown>,\n isLeaf,\n );\n } else {\n result[key] = bVal;\n }\n }\n\n return result as DeepMerge<A, B>;\n}\n"],"names":[],"mappings":"AA6BA,SAAS,cAAc,OAAkD;AACvE,SAAO,OAAO,UAAU,YAAY,UAAU;AAChD;AAYO,SAAS,UAId,GACA,GACA,SAAsC,OAAK,CAAC,cAAc,CAAC,GAC1C;AACjB,QAAM,SAAkC,CAAA;AAGxC,aAAW,OAAO,OAAO,KAAK,CAAC,GAAG;AAChC,WAAO,GAAG,IAAI,EAAE,GAAG;AAAA,EACrB;AAGA,aAAW,OAAO,OAAO,KAAK,CAAC,GAAG;AAChC,UAAM,OAAO,EAAE,GAAG;AAClB,UAAM,OAAO,EAAE,GAAG;AAElB,QAAI,OAAO,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,GAAG;AAC9C,aAAO,GAAG,IAAI;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ,OAAO;AACL,aAAO,GAAG,IAAI;AAAA,IAChB;AAAA,EACF;AAEA,SAAO;AACT;"}
1
+ {"version":3,"file":"deep-merge.js","sources":["../../../../shared/src/deep-merge.ts"],"sourcesContent":["// Force TypeScript to evaluate/flatten a type\ntype Simplify<T> = {[K in keyof T]: T[K]} & {};\n\n// Helper to check if T is a plain object (not array or function)\ntype IsPlainObject<T> = T extends object\n ? T extends Function | readonly unknown[]\n ? false\n : true\n : false;\n\ntype IsLeaf<T, Leaf> = [T] extends [Leaf] ? true : false;\n\ntype MergeValue<A, B, Leaf> =\n IsLeaf<A, Leaf> extends true\n ? B\n : IsLeaf<B, Leaf> extends true\n ? B\n : IsPlainObject<A> extends true\n ? IsPlainObject<B> extends true\n ? DeepMerge<A & {}, B & {}, Leaf>\n : B\n : B;\n\n/**\n * Type-level deep merge of two object types. Properties from B override\n * properties from A. When both A[K] and B[K] are objects (not arrays or\n * functions), they are recursively merged.\n */\nexport type DeepMerge<A, B, Leaf = never> = Simplify<\n Omit<A, keyof B> & {\n [K in keyof B]: K extends keyof A ? MergeValue<A[K], B[K], Leaf> : B[K];\n }\n>;\n\nexport function isPlainObject(\n value: unknown,\n): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\n/**\n * Deep merges two objects. Properties from `b` override properties from `a`.\n * Nested objects are recursively merged.\n *\n * @param a - The base object.\n * @param b - The object to merge into `a`.\n * @param isLeaf - Optional predicate to determine if a value should be treated\n * as a leaf (not recursed into). Defaults to checking if the value is not a\n * plain object.\n */\nexport function deepMerge<\n A extends Record<string, unknown>,\n B extends Record<string, unknown>,\n Leaf = never,\n>(\n a: A,\n b: B,\n isLeaf: (value: unknown) => boolean = v => !isPlainObject(v),\n): DeepMerge<A, B, Leaf> {\n const result: Record<string, unknown> = {};\n\n // Copy all keys from a\n for (const key of Object.keys(a)) {\n result[key] = a[key];\n }\n\n // Merge/override with keys from b\n for (const key of Object.keys(b)) {\n const aVal = a[key];\n const bVal = b[key];\n\n if (key in a && !isLeaf(aVal) && !isLeaf(bVal)) {\n result[key] = deepMerge<\n Record<string, unknown>,\n Record<string, unknown>,\n Leaf\n >(\n aVal as Record<string, unknown>,\n bVal as Record<string, unknown>,\n isLeaf,\n );\n } else {\n result[key] = bVal;\n }\n }\n\n return result as DeepMerge<A, B, Leaf>;\n}\n"],"names":[],"mappings":"AAkCO,SAAS,cACd,OACkC;AAClC,SAAO,OAAO,UAAU,YAAY,UAAU;AAChD;AAYO,SAAS,UAKd,GACA,GACA,SAAsC,OAAK,CAAC,cAAc,CAAC,GACpC;AACvB,QAAM,SAAkC,CAAA;AAGxC,aAAW,OAAO,OAAO,KAAK,CAAC,GAAG;AAChC,WAAO,GAAG,IAAI,EAAE,GAAG;AAAA,EACrB;AAGA,aAAW,OAAO,OAAO,KAAK,CAAC,GAAG;AAChC,UAAM,OAAO,EAAE,GAAG;AAClB,UAAM,OAAO,EAAE,GAAG;AAElB,QAAI,OAAO,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,GAAG;AAC9C,aAAO,GAAG,IAAI;AAAA,QAKZ;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ,OAAO;AACL,aAAO,GAAG,IAAI;AAAA,IAChB;AAAA,EACF;AAEA,SAAO;AACT;"}
@@ -1 +1 @@
1
- {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../../../z2s/src/compiler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AAQ7C,OAAO,EAAC,KAAK,SAAS,EAAC,MAAM,0BAA0B,CAAC;AAGxD,OAAO,KAAK,EACV,GAAG,EAEH,kBAAkB,EAElB,WAAW,EAEX,QAAQ,EACR,eAAe,EAEhB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAEL,KAAK,UAAU,EAChB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,gCAAgC,CAAC;AAC3D,OAAO,KAAK,EAEV,YAAY,EACb,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,2BAA2B,CAAC;AAWtD,KAAK,KAAK,GAAG;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,MAAM,EAAE,YAAY,CAAC;IAErB,MAAM,EAAE,UAAU,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAKF,wBAAgB,OAAO,CACrB,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,GAAG,EACR,MAAM,CAAC,EAAE,MAAM,GACd,QAAQ,CAgBV;AA4CD,wBAAgB,KAAK,CACnB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAC5B,QAAQ,CAWV;AAUD,wBAAgB,OAAO,CACrB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,QAAQ,GAAG,SAAS,EAC7B,KAAK,EAAE,KAAK,GACX,QAAQ,CAqBV;AAoKD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,SAAS,eAAe,EAAE,EACxC,cAAc,EAAE,SAAS,MAAM,EAAE,GAChC,CAAC,UAAU,EAAE,KAAK,KAAK,QAAQ,CAiBjC;AAED,wBAAgB,MAAM,CACpB,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,eAAe,EAC1B,KAAK,EAAE,KAAK,GACX,QAAQ,CAgCV;AAED,wBAAgB,GAAG,CACjB,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,eAAe,EAC1B,KAAK,EAAE,KAAK,GACX,QAAQ,CAMV;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,eAAe,EAC1B,KAAK,EAAE,KAAK,GACX,QAAQ,CAIV;AAwGD,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,kBAAkB,GAC/B;IACD,IAAI,EAAE,QAAQ,CAAC;IACf,mBAAmB,EAAE,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC;CAC/D,CA2BA;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,kBAAkB,GAC/B;IACD;QACE,KAAK,EAAE,KAAK,CAAC;QACb,WAAW,EAAE,WAAW,CAAC;QACzB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;KAC3B;IACD;QAAC,KAAK,EAAE,KAAK,CAAC;QAAC,WAAW,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;KAAC;CACpE,CAmBA;AAiDD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAMhE"}
1
+ {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../../../z2s/src/compiler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AAQ7C,OAAO,EAAC,KAAK,SAAS,EAAC,MAAM,0BAA0B,CAAC;AAGxD,OAAO,KAAK,EACV,GAAG,EAEH,kBAAkB,EAElB,WAAW,EAEX,QAAQ,EACR,eAAe,EAEhB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAEL,KAAK,UAAU,EAChB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,gCAAgC,CAAC;AAC3D,OAAO,KAAK,EAEV,YAAY,EACb,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,2BAA2B,CAAC;AAWtD,KAAK,KAAK,GAAG;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,MAAM,EAAE,YAAY,CAAC;IAErB,MAAM,EAAE,UAAU,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAQF,wBAAgB,OAAO,CACrB,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,GAAG,EACR,MAAM,CAAC,EAAE,MAAM,GACd,QAAQ,CAgBV;AA4CD,wBAAgB,KAAK,CACnB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAC5B,QAAQ,CAWV;AAUD,wBAAgB,OAAO,CACrB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,QAAQ,GAAG,SAAS,EAC7B,KAAK,EAAE,KAAK,GACX,QAAQ,CAqBV;AAoKD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,SAAS,eAAe,EAAE,EACxC,cAAc,EAAE,SAAS,MAAM,EAAE,GAChC,CAAC,UAAU,EAAE,KAAK,KAAK,QAAQ,CAiBjC;AAED,wBAAgB,MAAM,CACpB,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,eAAe,EAC1B,KAAK,EAAE,KAAK,GACX,QAAQ,CAgCV;AAED,wBAAgB,GAAG,CACjB,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,eAAe,EAC1B,KAAK,EAAE,KAAK,GACX,QAAQ,CAMV;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,eAAe,EAC1B,KAAK,EAAE,KAAK,GACX,QAAQ,CAIV;AAwGD,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,kBAAkB,GAC/B;IACD,IAAI,EAAE,QAAQ,CAAC;IACf,mBAAmB,EAAE,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC;CAC/D,CA2BA;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,kBAAkB,GAC/B;IACD;QACE,KAAK,EAAE,KAAK,CAAC;QACb,WAAW,EAAE,WAAW,CAAC;QACzB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;KAC3B;IACD;QAAC,KAAK,EAAE,KAAK,CAAC;QAAC,WAAW,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;KAAC;CACpE,CAmBA;AAiDD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAMhE"}
@@ -10,6 +10,8 @@ import { completeOrdering } from "../../zql/src/query/complete-ordering.js";
10
10
  import { sql, sqlConvertSingularLiteralArg, Z2S_COLLATION, sqlConvertPluralLiteralArg, sqlConvertColumnArg } from "./sql.js";
11
11
  const ZQL_RESULT_KEY = "zql_result";
12
12
  const ZQL_RESULT_KEY_IDENT = sql.ident(ZQL_RESULT_KEY);
13
+ const ZQL_RESULT_TABLE_KEY = "zql_root";
14
+ const ZQL_RESULT_TABLE_IDENT = sql.ident(ZQL_RESULT_TABLE_KEY);
13
15
  function compile(serverSchema, zqlSchema, ast, format) {
14
16
  ast = completeOrdering(
15
17
  ast,
@@ -24,8 +26,8 @@ function compile(serverSchema, zqlSchema, ast, format) {
24
26
  zql: zqlSchema.tables
25
27
  };
26
28
  return sql`SELECT
27
- ${toJSON("root", format?.singular)}::text AS ${ZQL_RESULT_KEY_IDENT}
28
- FROM (${select(spec, ast, format)}) ${sql.ident("root")}`;
29
+ ${toJSON(ZQL_RESULT_TABLE_KEY, format?.singular)}::text AS ${ZQL_RESULT_KEY_IDENT}
30
+ FROM (${select(spec, ast, format)}) ${ZQL_RESULT_TABLE_IDENT}`;
29
31
  }
30
32
  function select(spec, ast, format, correlate) {
31
33
  const table = makeTable(spec, ast.table);
@@ -1 +1 @@
1
- {"version":3,"file":"compiler.js","sources":["../../../../z2s/src/compiler.ts"],"sourcesContent":["import type {SQLQuery} from '@databases/sql';\nimport {last, zip} from '../../shared/src/arrays.ts';\nimport {assert, unreachable} from '../../shared/src/asserts.ts';\nimport {\n parse as parseBigIntJson,\n type JSONValue as BigIntJSONValue,\n} from '../../shared/src/bigint-json.ts';\nimport {hasOwn} from '../../shared/src/has-own.ts';\nimport {type JSONValue} from '../../shared/src/json.ts';\nimport {must} from '../../shared/src/must.ts';\nimport {pgToZqlStringTypeMap} from '../../zero-cache/src/types/pg-data-type.ts';\nimport type {\n AST,\n Condition,\n CorrelatedSubquery,\n CorrelatedSubqueryCondition,\n Correlation,\n LiteralReference,\n Ordering,\n SimpleCondition,\n ValuePosition,\n} from '../../zero-protocol/src/ast.ts';\nimport {\n clientToServer,\n type NameMapper,\n} from '../../zero-schema/src/name-mapper.ts';\nimport type {Schema} from '../../zero-types/src/schema.ts';\nimport type {\n ServerColumnSchema,\n ServerSchema,\n} from '../../zero-types/src/server-schema.ts';\nimport type {Format} from '../../zql/src/ivm/view.ts';\nimport {completeOrdering} from '../../zql/src/query/complete-ordering.ts';\nimport {\n sql,\n sqlConvertColumnArg,\n sqlConvertPluralLiteralArg,\n sqlConvertSingularLiteralArg,\n Z2S_COLLATION,\n type PluralLiteralType,\n} from './sql.ts';\n\ntype Table = {\n zql: string;\n alias: string;\n};\n\ntype QualifiedColumn = {\n table: Table;\n zql: string;\n};\n\ntype ServerSpec = {\n schema: ServerSchema;\n // maps zql names to server names\n mapper: NameMapper;\n};\n\nexport type Spec = {\n server: ServerSpec;\n zql: Schema['tables'];\n aliasCount: number;\n};\n\nconst ZQL_RESULT_KEY = 'zql_result';\nconst ZQL_RESULT_KEY_IDENT = sql.ident(ZQL_RESULT_KEY);\n\nexport function compile(\n serverSchema: ServerSchema,\n zqlSchema: Schema,\n ast: AST,\n format?: Format,\n): SQLQuery {\n ast = completeOrdering(\n ast,\n tableName => zqlSchema.tables[tableName].primaryKey,\n );\n const spec: Spec = {\n aliasCount: 0,\n server: {\n schema: serverSchema,\n mapper: clientToServer(zqlSchema.tables),\n },\n zql: zqlSchema.tables,\n };\n return sql`SELECT \n ${toJSON('root', format?.singular)}::text AS ${ZQL_RESULT_KEY_IDENT}\n FROM (${select(spec, ast, format)}) ${sql.ident('root')}`;\n}\n\nfunction select(\n spec: Spec,\n ast: AST,\n format: Format | undefined,\n correlate?: (childTable: Table) => SQLQuery,\n): SQLQuery {\n const table = makeTable(spec, ast.table);\n const selectionSet = related(spec, ast.related ?? [], format, table);\n const tableSchema = spec.zql[ast.table];\n const usedAliases = new Set<string>(\n ast.related?.map(r => r.subquery.alias ?? ''),\n );\n for (const column of Object.keys(tableSchema.columns)) {\n if (!usedAliases.has(column)) {\n selectionSet.push(\n selectIdent(spec.server, {\n table,\n zql: column,\n }),\n );\n }\n }\n\n let appliedWhere = false;\n function maybeWhere(test: unknown | undefined) {\n if (!test) {\n return sql``;\n }\n\n const ret = appliedWhere ? sql`AND` : sql`WHERE`;\n appliedWhere = true;\n return ret;\n }\n\n return sql`SELECT ${sql.join(selectionSet, ',')}\n FROM ${fromIdent(spec.server, table)}\n ${maybeWhere(ast.where)} ${where(spec, ast.where, table)}\n ${maybeWhere(correlate)} ${correlate ? correlate(table) : sql``}\n ${orderBy(spec, ast.orderBy, table)}\n ${limit(ast.limit, format?.singular)}`;\n}\n\nexport function limit(\n limit: number | undefined,\n singular: boolean | undefined,\n): SQLQuery {\n if (limit === 0) {\n return sql`LIMIT 0`;\n }\n if (singular) {\n return sql`LIMIT 1`;\n }\n if (limit === undefined) {\n return sql``;\n }\n return sql`LIMIT ${sqlConvertSingularLiteralArg(limit)}`;\n}\n\nfunction makeTable(spec: Spec, zql: string, alias?: string): Table {\n alias = alias ?? zql + '_' + spec.aliasCount++;\n return {\n zql,\n alias,\n };\n}\n\nexport function orderBy(\n spec: Spec,\n orderBy: Ordering | undefined,\n table: Table,\n): SQLQuery {\n if (!orderBy) {\n return sql``;\n }\n return sql`ORDER BY ${sql.join(\n orderBy.map(([col, dir]) => {\n const serverColumnSchema = getServerColumn(spec.server, table, col);\n return dir === 'asc'\n ? // Oh postgres. The table must be referred to by client name but the column by server name.\n // E.g., `SELECT server_col as client_col FROM server_table as client_table ORDER BY client_Table.server_col`\n sql`${colIdent(spec.server, {\n table,\n zql: col,\n })}${maybeCollate(serverColumnSchema)} ASC NULLS FIRST`\n : sql`${colIdent(spec.server, {\n table,\n zql: col,\n })}${maybeCollate(serverColumnSchema)} DESC NULLS LAST`;\n }),\n ', ',\n )}`;\n}\n\nfunction maybeCollate(serverColumnSchema: ServerColumnSchema): SQLQuery {\n if (serverColumnSchema.type === 'uuid' || serverColumnSchema.isEnum) {\n return sql`::text COLLATE ${sql.ident(Z2S_COLLATION)}`;\n }\n if (Object.hasOwn(pgToZqlStringTypeMap, serverColumnSchema.type)) {\n return sql` COLLATE ${sql.ident(Z2S_COLLATION)}`;\n }\n\n return sql``;\n}\n\nfunction related(\n spec: Spec,\n relationships: readonly CorrelatedSubquery[],\n format: Format | undefined,\n parentTable: Table,\n): SQLQuery[] {\n return relationships.map(relationship =>\n relationshipSubquery(\n spec,\n relationship,\n format?.relationships[must(relationship.subquery.alias)],\n parentTable,\n ),\n );\n}\n\nfunction relationshipSubquery(\n spec: Spec,\n relationship: CorrelatedSubquery,\n format: Format | undefined,\n parentTable: Table,\n): SQLQuery {\n const innerAlias = `inner_${relationship.subquery.alias}`;\n if (relationship.hidden) {\n const {join, participatingTables} = makeJunctionJoin(spec, relationship);\n const lastTable = must(last(participatingTables)).table;\n\n assert(\n relationship.subquery.related,\n 'hidden relationship must be a junction',\n );\n const nestedAst = relationship.subquery.related[0].subquery;\n const selectionSet = related(\n spec,\n nestedAst.related ?? [],\n format,\n lastTable,\n );\n const tableSchema = spec.zql[nestedAst.table];\n for (const column of Object.keys(tableSchema.columns)) {\n selectionSet.push(\n selectIdent(spec.server, {\n table: lastTable,\n zql: column,\n }),\n );\n }\n\n return sql`(\n SELECT ${toJSON(innerAlias, format?.singular)} FROM (SELECT ${sql.join(\n selectionSet,\n ',',\n )} FROM ${join} WHERE (${makeCorrelator(\n spec,\n relationship.correlation.parentField.map(f => ({\n table: parentTable,\n zql: f,\n })),\n relationship.correlation.childField,\n )(participatingTables[0].table)}) ${\n nestedAst.where\n ? sql`AND ${where(spec, nestedAst.where, lastTable)}`\n : sql``\n } ${orderBy(spec, nestedAst.orderBy, lastTable)} ${limit(\n last(participatingTables)?.limit,\n format?.singular,\n )} ) ${sql.ident(innerAlias)}\n ) as ${sql.ident(relationship.subquery.alias)}`;\n }\n\n return sql`(\n SELECT ${toJSON(innerAlias, format?.singular)} FROM (${select(\n spec,\n relationship.subquery,\n format,\n makeCorrelator(\n spec,\n relationship.correlation.parentField.map(f => ({\n table: parentTable,\n zql: f,\n })),\n relationship.correlation.childField,\n ),\n )}) ${sql.ident(innerAlias)}\n ) as ${sql.ident(relationship.subquery.alias)}`;\n}\n\nfunction where(\n spec: Spec,\n condition: Condition | undefined,\n table: Table,\n): SQLQuery {\n if (!condition) {\n return sql``;\n }\n\n switch (condition.type) {\n case 'and':\n return sql`(${sql.join(\n condition.conditions.map(c => where(spec, c, table)),\n ' AND ',\n )})`;\n case 'or':\n return sql`(${sql.join(\n condition.conditions.map(c => where(spec, c, table)),\n ' OR ',\n )})`;\n case 'correlatedSubquery':\n return exists(spec, condition, table);\n case 'simple':\n return simple(spec, condition, table);\n }\n}\n\nfunction exists(\n spec: Spec,\n condition: CorrelatedSubqueryCondition,\n parentTable: Table,\n): SQLQuery {\n switch (condition.op) {\n case 'EXISTS':\n return sql`EXISTS (${select(\n spec,\n condition.related.subquery,\n undefined,\n makeCorrelator(\n spec,\n condition.related.correlation.parentField.map(f => ({\n table: parentTable,\n zql: f,\n })),\n condition.related.correlation.childField,\n ),\n )})`;\n case 'NOT EXISTS':\n return sql`NOT EXISTS (${select(\n spec,\n condition.related.subquery,\n undefined,\n makeCorrelator(\n spec,\n condition.related.correlation.parentField.map(f => ({\n table: parentTable,\n zql: f,\n })),\n condition.related.correlation.childField,\n ),\n )})`;\n }\n}\n\nexport function makeCorrelator(\n spec: Spec,\n parentFields: readonly QualifiedColumn[],\n childZqlFields: readonly string[],\n): (childTable: Table) => SQLQuery {\n return (childTable: Table) => {\n const childFields = childZqlFields.map(zqlField => ({\n table: childTable,\n zql: zqlField,\n }));\n return sql.join(\n zip(parentFields, childFields).map(\n ([parentColumn, childColumn]) =>\n sql`${colIdent(spec.server, parentColumn)} = ${colIdent(\n spec.server,\n childColumn,\n )}`,\n ),\n ' AND ',\n );\n };\n}\n\nexport function simple(\n spec: Spec,\n condition: SimpleCondition,\n table: Table,\n): SQLQuery {\n switch (condition.op) {\n case '!=':\n case '<':\n case '<=':\n case '=':\n case '>':\n case '>=':\n case 'ILIKE':\n case 'LIKE':\n case 'NOT ILIKE':\n case 'NOT LIKE':\n return sql`${valueComparison(\n spec,\n condition.left,\n table,\n condition.right,\n false,\n )} ${sql.__dangerous__rawValue(condition.op)} ${valueComparison(\n spec,\n condition.right,\n table,\n condition.left,\n false,\n )}`;\n case 'NOT IN':\n case 'IN':\n return any(spec, condition, table);\n case 'IS':\n case 'IS NOT':\n return distinctFrom(spec, condition, table);\n }\n}\n\nexport function any(\n spec: Spec,\n condition: SimpleCondition,\n table: Table,\n): SQLQuery {\n return sql`${condition.op === 'NOT IN' ? sql`NOT` : sql``}\n (\n ${valueComparison(spec, condition.left, table, condition.right, false)} = ANY \n (${valueComparison(spec, condition.right, table, condition.left, true)})\n )`;\n}\n\nexport function distinctFrom(\n spec: Spec,\n condition: SimpleCondition,\n table: Table,\n): SQLQuery {\n return sql`${valueComparison(spec, condition.left, table, condition.right, false)} ${\n condition.op === 'IS' ? sql`IS NOT DISTINCT FROM` : sql`IS DISTINCT FROM`\n } ${valueComparison(spec, condition.right, table, condition.left, false)}`;\n}\n\nfunction valueComparison(\n spec: Spec,\n valuePos: ValuePosition,\n table: Table,\n otherValuePos: ValuePosition,\n plural: boolean,\n): SQLQuery {\n const valuePosType = valuePos.type;\n switch (valuePosType) {\n case 'column': {\n const serverColumnSchema = getServerColumn(\n spec.server,\n table,\n valuePos.name,\n );\n const qualified: QualifiedColumn = {\n table,\n zql: valuePos.name,\n };\n if (serverColumnSchema.type === 'uuid' || serverColumnSchema.isEnum) {\n return sql`${colIdent(spec.server, qualified)}::text`;\n }\n return colIdent(spec.server, qualified);\n }\n case 'literal':\n return literalValueComparison(\n spec,\n valuePos,\n table,\n otherValuePos,\n plural,\n );\n case 'static':\n throw new Error(\n 'Static parameters must be bound to a value before compiling to SQL',\n );\n default:\n unreachable(valuePosType);\n break;\n }\n}\n\nfunction literalValueComparison(\n spec: Spec,\n valuePos: LiteralReference,\n table: Table,\n otherValuePos: ValuePosition,\n plural: boolean,\n): SQLQuery {\n const otherType = otherValuePos.type;\n switch (otherType) {\n case 'column':\n return sqlConvertColumnArg(\n getServerColumn(spec.server, table, otherValuePos.name),\n valuePos.value,\n plural,\n true,\n );\n case 'literal': {\n assert(plural === Array.isArray(valuePos.value));\n if (Array.isArray(valuePos.value)) {\n if (valuePos.value.length > 0) {\n // If the array is non-empty base its type on its first\n // element\n return sqlConvertPluralLiteralArg(\n typeof valuePos.value[0] as PluralLiteralType,\n valuePos.value as PluralLiteralType[],\n );\n }\n // If the array is empty, base its type on the other value\n // position's type (as long as the other value position is non-null,\n // cannot have a null[]).\n if (otherValuePos.value !== null) {\n return sqlConvertPluralLiteralArg(\n typeof otherValuePos.value as PluralLiteralType,\n [],\n );\n }\n // If the other value position is null, it can be compared to any\n // type of empty array, chose 'string' arbitrarily.\n return sqlConvertPluralLiteralArg('string', []);\n }\n if (\n typeof valuePos.value === 'string' ||\n typeof valuePos.value === 'number' ||\n typeof valuePos.value === 'boolean'\n ) {\n return sqlConvertSingularLiteralArg(valuePos.value);\n }\n throw new Error(\n `Literal of unexpected type. ${valuePos.value} of type ${typeof valuePos.value}`,\n );\n }\n case 'static':\n throw new Error(\n 'Static parameters must be bound to a value before compiling to SQL',\n );\n default:\n unreachable(otherType);\n }\n}\n\nexport function makeJunctionJoin(\n spec: Spec,\n relationship: CorrelatedSubquery,\n): {\n join: SQLQuery;\n participatingTables: ReturnType<typeof pullTablesForJunction>;\n} {\n const participatingTables = pullTablesForJunction(spec, relationship);\n const joins: SQLQuery[] = [];\n\n for (const {table} of participatingTables) {\n if (joins.length === 0) {\n joins.push(fromIdent(spec.server, table));\n continue;\n }\n joins.push(\n sql` JOIN ${fromIdent(spec.server, table)} ON ${makeCorrelator(\n spec,\n participatingTables[joins.length].correlation.parentField.map(f => ({\n table: participatingTables[joins.length - 1].table,\n zql: f,\n })),\n participatingTables[joins.length].correlation.childField,\n )(participatingTables[joins.length].table)}`,\n );\n }\n\n return {\n join: sql`${sql.join(joins, '')}`,\n participatingTables,\n // lastTable: participatingTables[participatingTables.length - 1].table,\n // lastLimit: participatingTables[participatingTables.length - 1].limit,\n };\n}\n\nexport function pullTablesForJunction(\n spec: Spec,\n relationship: CorrelatedSubquery,\n): [\n {\n table: Table;\n correlation: Correlation;\n limit: number | undefined;\n },\n {table: Table; correlation: Correlation; limit: number | undefined},\n] {\n assert(\n relationship.subquery.related?.length === 1,\n 'Too many related tables for a junction edge',\n );\n const otherRelationship = relationship.subquery.related[0];\n assert(!otherRelationship.hidden);\n return [\n {\n table: makeTable(spec, relationship.subquery.table),\n correlation: relationship.correlation,\n limit: relationship.subquery.limit,\n },\n {\n table: makeTable(spec, otherRelationship.subquery.table),\n correlation: otherRelationship.correlation,\n limit: otherRelationship.subquery.limit,\n },\n ];\n}\n\nfunction toJSON(table: string, singular = false): SQLQuery {\n return sql`${\n singular ? sql`` : sql`COALESCE(json_agg`\n }(row_to_json(${sql.ident(table)}))${singular ? sql`` : sql`, '[]'::json)`}`;\n}\n\nfunction selectIdent(server: ServerSpec, column: QualifiedColumn): SQLQuery {\n const serverColumnSchema =\n server.schema[server.mapper.tableName(column.table.zql)][\n server.mapper.columnName(column.table.zql, column.zql)\n ];\n const serverType = serverColumnSchema.type;\n if (\n !serverColumnSchema.isEnum &&\n (serverType === 'date' ||\n serverType === 'timestamp' ||\n serverType === 'timestamp without time zone' ||\n serverType === 'timestamptz' ||\n serverType === 'timestamp with time zone')\n ) {\n if (serverColumnSchema.isArray) {\n // Map EXTRACT(EPOCH FROM ...) * 1000 over array elements\n return sql`ARRAY(SELECT EXTRACT(EPOCH FROM unnest(${colIdent(server, column)})) * 1000) as ${sql.ident(column.zql)}`;\n }\n return sql`EXTRACT(EPOCH FROM ${colIdent(server, column)}) * 1000 as ${sql.ident(column.zql)}`;\n }\n return sql`${colIdent(server, column)} as ${sql.ident(column.zql)}`;\n}\n\nfunction colIdent(server: ServerSpec, column: QualifiedColumn) {\n return sql.ident(\n column.table.alias,\n server.mapper.columnName(column.table.zql, column.zql),\n );\n}\n\nfunction fromIdent(server: ServerSpec, table: Table) {\n return sql`${sql.ident(server.mapper.tableName(table.zql))} AS ${sql.ident(table.alias)}`;\n}\n\nfunction getServerColumn(spec: ServerSpec, table: Table, zqlColumn: string) {\n return spec.schema[spec.mapper.tableName(table.zql)][\n spec.mapper.columnName(table.zql, zqlColumn)\n ];\n}\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport function extractZqlResult(pgResult: Array<any>): JSONValue {\n const bigIntJson: BigIntJSONValue = parseBigIntJson(\n pgResult[0][ZQL_RESULT_KEY],\n );\n assertJSONValue(bigIntJson);\n return bigIntJson;\n}\n\nfunction assertJSONValue(v: BigIntJSONValue): asserts v is JSONValue {\n const path = findPathToBigInt(v);\n if (path) {\n throw new Error(`Value exceeds safe Number range. ${path}`);\n }\n}\n\nfunction findPathToBigInt(v: BigIntJSONValue): string | undefined {\n const typeOfV = typeof v;\n switch (typeOfV) {\n case 'bigint':\n return ` = ${v}`;\n case 'object': {\n if (v === null) {\n return;\n }\n if (Array.isArray(v)) {\n for (let i = 0; i < v.length; i++) {\n const path = findPathToBigInt(v[i]);\n if (path) {\n return `[${i}]${path}`;\n }\n }\n return undefined;\n }\n\n const o = v as Record<string, BigIntJSONValue>;\n for (const k in o) {\n if (hasOwn(o, k)) {\n const path = findPathToBigInt(o[k]);\n if (path) {\n return `['${k}']${path}`;\n }\n }\n }\n return undefined;\n }\n case 'number':\n return undefined;\n case 'boolean':\n return undefined;\n default:\n return undefined;\n }\n}\n"],"names":["limit","orderBy","parseBigIntJson"],"mappings":"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"}
1
+ {"version":3,"file":"compiler.js","sources":["../../../../z2s/src/compiler.ts"],"sourcesContent":["import type {SQLQuery} from '@databases/sql';\nimport {last, zip} from '../../shared/src/arrays.ts';\nimport {assert, unreachable} from '../../shared/src/asserts.ts';\nimport {\n parse as parseBigIntJson,\n type JSONValue as BigIntJSONValue,\n} from '../../shared/src/bigint-json.ts';\nimport {hasOwn} from '../../shared/src/has-own.ts';\nimport {type JSONValue} from '../../shared/src/json.ts';\nimport {must} from '../../shared/src/must.ts';\nimport {pgToZqlStringTypeMap} from '../../zero-cache/src/types/pg-data-type.ts';\nimport type {\n AST,\n Condition,\n CorrelatedSubquery,\n CorrelatedSubqueryCondition,\n Correlation,\n LiteralReference,\n Ordering,\n SimpleCondition,\n ValuePosition,\n} from '../../zero-protocol/src/ast.ts';\nimport {\n clientToServer,\n type NameMapper,\n} from '../../zero-schema/src/name-mapper.ts';\nimport type {Schema} from '../../zero-types/src/schema.ts';\nimport type {\n ServerColumnSchema,\n ServerSchema,\n} from '../../zero-types/src/server-schema.ts';\nimport type {Format} from '../../zql/src/ivm/view.ts';\nimport {completeOrdering} from '../../zql/src/query/complete-ordering.ts';\nimport {\n sql,\n sqlConvertColumnArg,\n sqlConvertPluralLiteralArg,\n sqlConvertSingularLiteralArg,\n Z2S_COLLATION,\n type PluralLiteralType,\n} from './sql.ts';\n\ntype Table = {\n zql: string;\n alias: string;\n};\n\ntype QualifiedColumn = {\n table: Table;\n zql: string;\n};\n\ntype ServerSpec = {\n schema: ServerSchema;\n // maps zql names to server names\n mapper: NameMapper;\n};\n\nexport type Spec = {\n server: ServerSpec;\n zql: Schema['tables'];\n aliasCount: number;\n};\n\nconst ZQL_RESULT_KEY = 'zql_result';\nconst ZQL_RESULT_KEY_IDENT = sql.ident(ZQL_RESULT_KEY);\n\nconst ZQL_RESULT_TABLE_KEY = 'zql_root';\nconst ZQL_RESULT_TABLE_IDENT = sql.ident(ZQL_RESULT_TABLE_KEY);\n\nexport function compile(\n serverSchema: ServerSchema,\n zqlSchema: Schema,\n ast: AST,\n format?: Format,\n): SQLQuery {\n ast = completeOrdering(\n ast,\n tableName => zqlSchema.tables[tableName].primaryKey,\n );\n const spec: Spec = {\n aliasCount: 0,\n server: {\n schema: serverSchema,\n mapper: clientToServer(zqlSchema.tables),\n },\n zql: zqlSchema.tables,\n };\n return sql`SELECT \n ${toJSON(ZQL_RESULT_TABLE_KEY, format?.singular)}::text AS ${ZQL_RESULT_KEY_IDENT}\n FROM (${select(spec, ast, format)}) ${ZQL_RESULT_TABLE_IDENT}`;\n}\n\nfunction select(\n spec: Spec,\n ast: AST,\n format: Format | undefined,\n correlate?: (childTable: Table) => SQLQuery,\n): SQLQuery {\n const table = makeTable(spec, ast.table);\n const selectionSet = related(spec, ast.related ?? [], format, table);\n const tableSchema = spec.zql[ast.table];\n const usedAliases = new Set<string>(\n ast.related?.map(r => r.subquery.alias ?? ''),\n );\n for (const column of Object.keys(tableSchema.columns)) {\n if (!usedAliases.has(column)) {\n selectionSet.push(\n selectIdent(spec.server, {\n table,\n zql: column,\n }),\n );\n }\n }\n\n let appliedWhere = false;\n function maybeWhere(test: unknown | undefined) {\n if (!test) {\n return sql``;\n }\n\n const ret = appliedWhere ? sql`AND` : sql`WHERE`;\n appliedWhere = true;\n return ret;\n }\n\n return sql`SELECT ${sql.join(selectionSet, ',')}\n FROM ${fromIdent(spec.server, table)}\n ${maybeWhere(ast.where)} ${where(spec, ast.where, table)}\n ${maybeWhere(correlate)} ${correlate ? correlate(table) : sql``}\n ${orderBy(spec, ast.orderBy, table)}\n ${limit(ast.limit, format?.singular)}`;\n}\n\nexport function limit(\n limit: number | undefined,\n singular: boolean | undefined,\n): SQLQuery {\n if (limit === 0) {\n return sql`LIMIT 0`;\n }\n if (singular) {\n return sql`LIMIT 1`;\n }\n if (limit === undefined) {\n return sql``;\n }\n return sql`LIMIT ${sqlConvertSingularLiteralArg(limit)}`;\n}\n\nfunction makeTable(spec: Spec, zql: string, alias?: string): Table {\n alias = alias ?? zql + '_' + spec.aliasCount++;\n return {\n zql,\n alias,\n };\n}\n\nexport function orderBy(\n spec: Spec,\n orderBy: Ordering | undefined,\n table: Table,\n): SQLQuery {\n if (!orderBy) {\n return sql``;\n }\n return sql`ORDER BY ${sql.join(\n orderBy.map(([col, dir]) => {\n const serverColumnSchema = getServerColumn(spec.server, table, col);\n return dir === 'asc'\n ? // Oh postgres. The table must be referred to by client name but the column by server name.\n // E.g., `SELECT server_col as client_col FROM server_table as client_table ORDER BY client_Table.server_col`\n sql`${colIdent(spec.server, {\n table,\n zql: col,\n })}${maybeCollate(serverColumnSchema)} ASC NULLS FIRST`\n : sql`${colIdent(spec.server, {\n table,\n zql: col,\n })}${maybeCollate(serverColumnSchema)} DESC NULLS LAST`;\n }),\n ', ',\n )}`;\n}\n\nfunction maybeCollate(serverColumnSchema: ServerColumnSchema): SQLQuery {\n if (serverColumnSchema.type === 'uuid' || serverColumnSchema.isEnum) {\n return sql`::text COLLATE ${sql.ident(Z2S_COLLATION)}`;\n }\n if (Object.hasOwn(pgToZqlStringTypeMap, serverColumnSchema.type)) {\n return sql` COLLATE ${sql.ident(Z2S_COLLATION)}`;\n }\n\n return sql``;\n}\n\nfunction related(\n spec: Spec,\n relationships: readonly CorrelatedSubquery[],\n format: Format | undefined,\n parentTable: Table,\n): SQLQuery[] {\n return relationships.map(relationship =>\n relationshipSubquery(\n spec,\n relationship,\n format?.relationships[must(relationship.subquery.alias)],\n parentTable,\n ),\n );\n}\n\nfunction relationshipSubquery(\n spec: Spec,\n relationship: CorrelatedSubquery,\n format: Format | undefined,\n parentTable: Table,\n): SQLQuery {\n const innerAlias = `inner_${relationship.subquery.alias}`;\n if (relationship.hidden) {\n const {join, participatingTables} = makeJunctionJoin(spec, relationship);\n const lastTable = must(last(participatingTables)).table;\n\n assert(\n relationship.subquery.related,\n 'hidden relationship must be a junction',\n );\n const nestedAst = relationship.subquery.related[0].subquery;\n const selectionSet = related(\n spec,\n nestedAst.related ?? [],\n format,\n lastTable,\n );\n const tableSchema = spec.zql[nestedAst.table];\n for (const column of Object.keys(tableSchema.columns)) {\n selectionSet.push(\n selectIdent(spec.server, {\n table: lastTable,\n zql: column,\n }),\n );\n }\n\n return sql`(\n SELECT ${toJSON(innerAlias, format?.singular)} FROM (SELECT ${sql.join(\n selectionSet,\n ',',\n )} FROM ${join} WHERE (${makeCorrelator(\n spec,\n relationship.correlation.parentField.map(f => ({\n table: parentTable,\n zql: f,\n })),\n relationship.correlation.childField,\n )(participatingTables[0].table)}) ${\n nestedAst.where\n ? sql`AND ${where(spec, nestedAst.where, lastTable)}`\n : sql``\n } ${orderBy(spec, nestedAst.orderBy, lastTable)} ${limit(\n last(participatingTables)?.limit,\n format?.singular,\n )} ) ${sql.ident(innerAlias)}\n ) as ${sql.ident(relationship.subquery.alias)}`;\n }\n\n return sql`(\n SELECT ${toJSON(innerAlias, format?.singular)} FROM (${select(\n spec,\n relationship.subquery,\n format,\n makeCorrelator(\n spec,\n relationship.correlation.parentField.map(f => ({\n table: parentTable,\n zql: f,\n })),\n relationship.correlation.childField,\n ),\n )}) ${sql.ident(innerAlias)}\n ) as ${sql.ident(relationship.subquery.alias)}`;\n}\n\nfunction where(\n spec: Spec,\n condition: Condition | undefined,\n table: Table,\n): SQLQuery {\n if (!condition) {\n return sql``;\n }\n\n switch (condition.type) {\n case 'and':\n return sql`(${sql.join(\n condition.conditions.map(c => where(spec, c, table)),\n ' AND ',\n )})`;\n case 'or':\n return sql`(${sql.join(\n condition.conditions.map(c => where(spec, c, table)),\n ' OR ',\n )})`;\n case 'correlatedSubquery':\n return exists(spec, condition, table);\n case 'simple':\n return simple(spec, condition, table);\n }\n}\n\nfunction exists(\n spec: Spec,\n condition: CorrelatedSubqueryCondition,\n parentTable: Table,\n): SQLQuery {\n switch (condition.op) {\n case 'EXISTS':\n return sql`EXISTS (${select(\n spec,\n condition.related.subquery,\n undefined,\n makeCorrelator(\n spec,\n condition.related.correlation.parentField.map(f => ({\n table: parentTable,\n zql: f,\n })),\n condition.related.correlation.childField,\n ),\n )})`;\n case 'NOT EXISTS':\n return sql`NOT EXISTS (${select(\n spec,\n condition.related.subquery,\n undefined,\n makeCorrelator(\n spec,\n condition.related.correlation.parentField.map(f => ({\n table: parentTable,\n zql: f,\n })),\n condition.related.correlation.childField,\n ),\n )})`;\n }\n}\n\nexport function makeCorrelator(\n spec: Spec,\n parentFields: readonly QualifiedColumn[],\n childZqlFields: readonly string[],\n): (childTable: Table) => SQLQuery {\n return (childTable: Table) => {\n const childFields = childZqlFields.map(zqlField => ({\n table: childTable,\n zql: zqlField,\n }));\n return sql.join(\n zip(parentFields, childFields).map(\n ([parentColumn, childColumn]) =>\n sql`${colIdent(spec.server, parentColumn)} = ${colIdent(\n spec.server,\n childColumn,\n )}`,\n ),\n ' AND ',\n );\n };\n}\n\nexport function simple(\n spec: Spec,\n condition: SimpleCondition,\n table: Table,\n): SQLQuery {\n switch (condition.op) {\n case '!=':\n case '<':\n case '<=':\n case '=':\n case '>':\n case '>=':\n case 'ILIKE':\n case 'LIKE':\n case 'NOT ILIKE':\n case 'NOT LIKE':\n return sql`${valueComparison(\n spec,\n condition.left,\n table,\n condition.right,\n false,\n )} ${sql.__dangerous__rawValue(condition.op)} ${valueComparison(\n spec,\n condition.right,\n table,\n condition.left,\n false,\n )}`;\n case 'NOT IN':\n case 'IN':\n return any(spec, condition, table);\n case 'IS':\n case 'IS NOT':\n return distinctFrom(spec, condition, table);\n }\n}\n\nexport function any(\n spec: Spec,\n condition: SimpleCondition,\n table: Table,\n): SQLQuery {\n return sql`${condition.op === 'NOT IN' ? sql`NOT` : sql``}\n (\n ${valueComparison(spec, condition.left, table, condition.right, false)} = ANY \n (${valueComparison(spec, condition.right, table, condition.left, true)})\n )`;\n}\n\nexport function distinctFrom(\n spec: Spec,\n condition: SimpleCondition,\n table: Table,\n): SQLQuery {\n return sql`${valueComparison(spec, condition.left, table, condition.right, false)} ${\n condition.op === 'IS' ? sql`IS NOT DISTINCT FROM` : sql`IS DISTINCT FROM`\n } ${valueComparison(spec, condition.right, table, condition.left, false)}`;\n}\n\nfunction valueComparison(\n spec: Spec,\n valuePos: ValuePosition,\n table: Table,\n otherValuePos: ValuePosition,\n plural: boolean,\n): SQLQuery {\n const valuePosType = valuePos.type;\n switch (valuePosType) {\n case 'column': {\n const serverColumnSchema = getServerColumn(\n spec.server,\n table,\n valuePos.name,\n );\n const qualified: QualifiedColumn = {\n table,\n zql: valuePos.name,\n };\n if (serverColumnSchema.type === 'uuid' || serverColumnSchema.isEnum) {\n return sql`${colIdent(spec.server, qualified)}::text`;\n }\n return colIdent(spec.server, qualified);\n }\n case 'literal':\n return literalValueComparison(\n spec,\n valuePos,\n table,\n otherValuePos,\n plural,\n );\n case 'static':\n throw new Error(\n 'Static parameters must be bound to a value before compiling to SQL',\n );\n default:\n unreachable(valuePosType);\n break;\n }\n}\n\nfunction literalValueComparison(\n spec: Spec,\n valuePos: LiteralReference,\n table: Table,\n otherValuePos: ValuePosition,\n plural: boolean,\n): SQLQuery {\n const otherType = otherValuePos.type;\n switch (otherType) {\n case 'column':\n return sqlConvertColumnArg(\n getServerColumn(spec.server, table, otherValuePos.name),\n valuePos.value,\n plural,\n true,\n );\n case 'literal': {\n assert(plural === Array.isArray(valuePos.value));\n if (Array.isArray(valuePos.value)) {\n if (valuePos.value.length > 0) {\n // If the array is non-empty base its type on its first\n // element\n return sqlConvertPluralLiteralArg(\n typeof valuePos.value[0] as PluralLiteralType,\n valuePos.value as PluralLiteralType[],\n );\n }\n // If the array is empty, base its type on the other value\n // position's type (as long as the other value position is non-null,\n // cannot have a null[]).\n if (otherValuePos.value !== null) {\n return sqlConvertPluralLiteralArg(\n typeof otherValuePos.value as PluralLiteralType,\n [],\n );\n }\n // If the other value position is null, it can be compared to any\n // type of empty array, chose 'string' arbitrarily.\n return sqlConvertPluralLiteralArg('string', []);\n }\n if (\n typeof valuePos.value === 'string' ||\n typeof valuePos.value === 'number' ||\n typeof valuePos.value === 'boolean'\n ) {\n return sqlConvertSingularLiteralArg(valuePos.value);\n }\n throw new Error(\n `Literal of unexpected type. ${valuePos.value} of type ${typeof valuePos.value}`,\n );\n }\n case 'static':\n throw new Error(\n 'Static parameters must be bound to a value before compiling to SQL',\n );\n default:\n unreachable(otherType);\n }\n}\n\nexport function makeJunctionJoin(\n spec: Spec,\n relationship: CorrelatedSubquery,\n): {\n join: SQLQuery;\n participatingTables: ReturnType<typeof pullTablesForJunction>;\n} {\n const participatingTables = pullTablesForJunction(spec, relationship);\n const joins: SQLQuery[] = [];\n\n for (const {table} of participatingTables) {\n if (joins.length === 0) {\n joins.push(fromIdent(spec.server, table));\n continue;\n }\n joins.push(\n sql` JOIN ${fromIdent(spec.server, table)} ON ${makeCorrelator(\n spec,\n participatingTables[joins.length].correlation.parentField.map(f => ({\n table: participatingTables[joins.length - 1].table,\n zql: f,\n })),\n participatingTables[joins.length].correlation.childField,\n )(participatingTables[joins.length].table)}`,\n );\n }\n\n return {\n join: sql`${sql.join(joins, '')}`,\n participatingTables,\n // lastTable: participatingTables[participatingTables.length - 1].table,\n // lastLimit: participatingTables[participatingTables.length - 1].limit,\n };\n}\n\nexport function pullTablesForJunction(\n spec: Spec,\n relationship: CorrelatedSubquery,\n): [\n {\n table: Table;\n correlation: Correlation;\n limit: number | undefined;\n },\n {table: Table; correlation: Correlation; limit: number | undefined},\n] {\n assert(\n relationship.subquery.related?.length === 1,\n 'Too many related tables for a junction edge',\n );\n const otherRelationship = relationship.subquery.related[0];\n assert(!otherRelationship.hidden);\n return [\n {\n table: makeTable(spec, relationship.subquery.table),\n correlation: relationship.correlation,\n limit: relationship.subquery.limit,\n },\n {\n table: makeTable(spec, otherRelationship.subquery.table),\n correlation: otherRelationship.correlation,\n limit: otherRelationship.subquery.limit,\n },\n ];\n}\n\nfunction toJSON(table: string, singular = false): SQLQuery {\n return sql`${\n singular ? sql`` : sql`COALESCE(json_agg`\n }(row_to_json(${sql.ident(table)}))${singular ? sql`` : sql`, '[]'::json)`}`;\n}\n\nfunction selectIdent(server: ServerSpec, column: QualifiedColumn): SQLQuery {\n const serverColumnSchema =\n server.schema[server.mapper.tableName(column.table.zql)][\n server.mapper.columnName(column.table.zql, column.zql)\n ];\n const serverType = serverColumnSchema.type;\n if (\n !serverColumnSchema.isEnum &&\n (serverType === 'date' ||\n serverType === 'timestamp' ||\n serverType === 'timestamp without time zone' ||\n serverType === 'timestamptz' ||\n serverType === 'timestamp with time zone')\n ) {\n if (serverColumnSchema.isArray) {\n // Map EXTRACT(EPOCH FROM ...) * 1000 over array elements\n return sql`ARRAY(SELECT EXTRACT(EPOCH FROM unnest(${colIdent(server, column)})) * 1000) as ${sql.ident(column.zql)}`;\n }\n return sql`EXTRACT(EPOCH FROM ${colIdent(server, column)}) * 1000 as ${sql.ident(column.zql)}`;\n }\n return sql`${colIdent(server, column)} as ${sql.ident(column.zql)}`;\n}\n\nfunction colIdent(server: ServerSpec, column: QualifiedColumn) {\n return sql.ident(\n column.table.alias,\n server.mapper.columnName(column.table.zql, column.zql),\n );\n}\n\nfunction fromIdent(server: ServerSpec, table: Table) {\n return sql`${sql.ident(server.mapper.tableName(table.zql))} AS ${sql.ident(table.alias)}`;\n}\n\nfunction getServerColumn(spec: ServerSpec, table: Table, zqlColumn: string) {\n return spec.schema[spec.mapper.tableName(table.zql)][\n spec.mapper.columnName(table.zql, zqlColumn)\n ];\n}\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport function extractZqlResult(pgResult: Array<any>): JSONValue {\n const bigIntJson: BigIntJSONValue = parseBigIntJson(\n pgResult[0][ZQL_RESULT_KEY],\n );\n assertJSONValue(bigIntJson);\n return bigIntJson;\n}\n\nfunction assertJSONValue(v: BigIntJSONValue): asserts v is JSONValue {\n const path = findPathToBigInt(v);\n if (path) {\n throw new Error(`Value exceeds safe Number range. ${path}`);\n }\n}\n\nfunction findPathToBigInt(v: BigIntJSONValue): string | undefined {\n const typeOfV = typeof v;\n switch (typeOfV) {\n case 'bigint':\n return ` = ${v}`;\n case 'object': {\n if (v === null) {\n return;\n }\n if (Array.isArray(v)) {\n for (let i = 0; i < v.length; i++) {\n const path = findPathToBigInt(v[i]);\n if (path) {\n return `[${i}]${path}`;\n }\n }\n return undefined;\n }\n\n const o = v as Record<string, BigIntJSONValue>;\n for (const k in o) {\n if (hasOwn(o, k)) {\n const path = findPathToBigInt(o[k]);\n if (path) {\n return `['${k}']${path}`;\n }\n }\n }\n return undefined;\n }\n case 'number':\n return undefined;\n case 'boolean':\n return undefined;\n default:\n return undefined;\n }\n}\n"],"names":["limit","orderBy","parseBigIntJson"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- const version = "0.25.0-canary.15";
1
+ const version = "0.25.0-canary.18";
2
2
  const packageJson = {
3
3
  version
4
4
  };
@@ -1,6 +1,6 @@
1
1
  import { ApplicationError, isApplicationError, wrapWithApplicationError } from "../../zero-protocol/src/application-error.js";
2
- import { customMutatorKey, splitMutatorKey } from "../../zql/src/mutate/custom.js";
3
- import { TransactionImpl, makeSchemaCRUD, makeServerTransaction } from "../../zero-server/src/custom.js";
2
+ import { customMutatorKey } from "../../zql/src/mutate/custom.js";
3
+ import { CRUDMutatorFactory, TransactionImpl, makeMutateCRUD, makeSchemaCRUD, makeServerTransaction } from "../../zero-server/src/custom.js";
4
4
  import { OutOfOrderMutation, getMutation, handleMutateRequest, handleMutationRequest } from "../../zero-server/src/process-mutations.js";
5
5
  import { PushProcessor } from "../../zero-server/src/push-processor.js";
6
6
  import { handleGetQueriesRequest, handleQueryRequest, handleTransformRequest } from "../../zero-server/src/queries/process-queries.js";
@@ -8,6 +8,7 @@ import { ZQLDatabase } from "../../zero-server/src/zql-database.js";
8
8
  import { PostgresJSConnection, PostgresJsTransactionInternal, zeroPostgresJS } from "../../zero-server/src/adapters/postgresjs.js";
9
9
  export {
10
10
  ApplicationError,
11
+ CRUDMutatorFactory,
11
12
  OutOfOrderMutation,
12
13
  PostgresJSConnection,
13
14
  PostgresJsTransactionInternal,
@@ -22,9 +23,9 @@ export {
22
23
  handleQueryRequest,
23
24
  handleTransformRequest,
24
25
  isApplicationError,
26
+ makeMutateCRUD,
25
27
  makeSchemaCRUD,
26
28
  makeServerTransaction,
27
- splitMutatorKey,
28
29
  wrapWithApplicationError,
29
30
  zeroPostgresJS
30
31
  };
@@ -1,12 +1,13 @@
1
1
  import { ApplicationError, isApplicationError, wrapWithApplicationError } from "../../zero-protocol/src/application-error.js";
2
- import { customMutatorKey, splitMutatorKey } from "../../zql/src/mutate/custom.js";
3
- import { TransactionImpl, makeSchemaCRUD, makeServerTransaction } from "../../zero-server/src/custom.js";
2
+ import { customMutatorKey } from "../../zql/src/mutate/custom.js";
3
+ import { CRUDMutatorFactory, TransactionImpl, makeMutateCRUD, makeSchemaCRUD, makeServerTransaction } from "../../zero-server/src/custom.js";
4
4
  import { OutOfOrderMutation, getMutation, handleMutateRequest, handleMutationRequest } from "../../zero-server/src/process-mutations.js";
5
5
  import { PushProcessor } from "../../zero-server/src/push-processor.js";
6
6
  import { handleGetQueriesRequest, handleQueryRequest, handleTransformRequest } from "../../zero-server/src/queries/process-queries.js";
7
7
  import { ZQLDatabase } from "../../zero-server/src/zql-database.js";
8
8
  export {
9
9
  ApplicationError,
10
+ CRUDMutatorFactory,
10
11
  OutOfOrderMutation,
11
12
  PushProcessor,
12
13
  TransactionImpl,
@@ -19,9 +20,9 @@ export {
19
20
  handleQueryRequest,
20
21
  handleTransformRequest,
21
22
  isApplicationError,
23
+ makeMutateCRUD,
22
24
  makeSchemaCRUD,
23
25
  makeServerTransaction,
24
- splitMutatorKey,
25
26
  wrapWithApplicationError
26
27
  };
27
28
  //# sourceMappingURL=server.js.map
@@ -10,12 +10,13 @@ import { createSchema } from "../../zero-schema/src/builder/schema-builder.js";
10
10
  import { boolean, enumeration, json, number, string, table } from "../../zero-schema/src/builder/table-builder.js";
11
11
  import { ANYONE_CAN, ANYONE_CAN_DO_ANYTHING, NOBODY_CAN, definePermissions } from "../../zero-schema/src/permissions.js";
12
12
  import { applyChange } from "../../zql/src/ivm/view-apply-change.js";
13
- import { defineMutators, getMutator, isMutatorRegistry, mustGetMutator } from "../../zql/src/mutate/mutator-registry.js";
14
- import { defineMutator, isMutator, isMutatorDefinition } from "../../zql/src/mutate/mutator.js";
13
+ import { createCRUDBuilder } from "../../zql/src/mutate/crud.js";
14
+ import { defineMutators, defineMutatorsWithType, getMutator, isMutatorRegistry, mustGetMutator } from "../../zql/src/mutate/mutator-registry.js";
15
+ import { defineMutator, defineMutatorWithType, isMutator, isMutatorDefinition } from "../../zql/src/mutate/mutator.js";
15
16
  import { createBuilder } from "../../zql/src/query/create-builder.js";
16
17
  import { escapeLike } from "../../zql/src/query/escape-like.js";
17
18
  import { syncedQuery, syncedQueryWithContext, withValidation } from "../../zql/src/query/named.js";
18
- import { defineQueries, defineQuery, getQuery, isQueryDefinition, mustGetQuery } from "../../zql/src/query/query-registry.js";
19
+ import { defineQueries, defineQueriesWithType, defineQuery, defineQueryWithType, getQuery, isQuery, isQueryDefinition, isQueryRegistry, mustGetQuery } from "../../zql/src/query/query-registry.js";
19
20
  import { bindingsForZero, registerZeroDelegate } from "../../zero-client/src/client/bindings.js";
20
21
  import * as updateNeededReasonTypeEnum from "../../zero-client/src/client/update-needed-reason-type-enum.js";
21
22
  import { Zero } from "../../zero-client/src/client/zero.js";
@@ -32,12 +33,17 @@ export {
32
33
  bindingsForZero,
33
34
  boolean,
34
35
  createBuilder,
36
+ createCRUDBuilder,
35
37
  createSchema,
36
38
  defineMutator,
39
+ defineMutatorWithType,
37
40
  defineMutators,
41
+ defineMutatorsWithType,
38
42
  definePermissions,
39
43
  defineQueries,
44
+ defineQueriesWithType,
40
45
  defineQuery,
46
+ defineQueryWithType,
41
47
  dropAllDatabases,
42
48
  dropDatabase,
43
49
  enumeration,
@@ -48,7 +54,9 @@ export {
48
54
  isMutator,
49
55
  isMutatorDefinition,
50
56
  isMutatorRegistry,
57
+ isQuery,
51
58
  isQueryDefinition,
59
+ isQueryRegistry,
52
60
  json,
53
61
  makeIDBName,
54
62
  mustGetMutator,
@@ -1 +1 @@
1
- {"version":3,"file":"zero.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"zero.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;"}
@@ -355,6 +355,14 @@ export declare const zeroOptions: {
355
355
  type: v.Type<number>;
356
356
  desc: string[];
357
357
  };
358
+ minCheckpointPageCount: {
359
+ type: v.Optional<number>;
360
+ desc: string[];
361
+ };
362
+ maxCheckpointPageCount: {
363
+ type: v.Optional<number>;
364
+ desc: string[];
365
+ };
358
366
  incrementalBackupIntervalMinutes: {
359
367
  type: v.Type<number>;
360
368
  desc: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"zero-config.d.ts","sourceRoot":"","sources":["../../../../../zero-cache/src/config/zero-config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAEL,KAAK,MAAM,EACX,KAAK,YAAY,EAClB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,CAAC,MAAM,+BAA+B,CAAC;AASnD,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAC,SAAS,EAAC,MAAM,kCAAkC,CAAC;AAEhE,eAAO,MAAM,UAAU;;;;;;;;;CA+CtB,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;CAwBxB,CAAC;AAEF,QAAA,MAAM,cAAc;;;;;;;;;;;;;CAgCnB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,cAAc,CAAC,CAAC;AAE3D,QAAA,MAAM,oBAAoB;;;;;;;;;CAczB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAE5D,QAAA,MAAM,WAAW;;;;;;;;;;;;;CAmBhB,CAAC;AA2EF,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,WAAW,CAAC,CAAC;AAKpD,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;IAwCtB,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAGlB,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAyJhB,kBAAkB;;;;;;QASlB,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAkPpB,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgEnB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,WAAW,CAAC,CAAC;AAEpD,eAAO,MAAM,mBAAmB,UAAU,CAAC;AAI3C,wBAAgB,aAAa,CAC3B,IAAI,GAAE,IAAI,CAAC,YAAY,EAAE,eAAe,CAAM,GAC7C,UAAU,CAaZ;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,GAAE,IAAI,CAAC,YAAY,EAAE,eAAe,CAAM,GAC7C,oBAAoB,CAItB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,GAAG,SAAS,GACpD,MAAM,CAER;AAED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,UAAU,EACd,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,eAAe,CAAC,EACnD,QAAQ,EAAE,MAAM,GAAG,SAAS,WA4B7B;AAYD,wBAAgB,kBAAkB,SAEjC"}
1
+ {"version":3,"file":"zero-config.d.ts","sourceRoot":"","sources":["../../../../../zero-cache/src/config/zero-config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAEL,KAAK,MAAM,EACX,KAAK,YAAY,EAClB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,CAAC,MAAM,+BAA+B,CAAC;AASnD,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAC,SAAS,EAAC,MAAM,kCAAkC,CAAC;AAEhE,eAAO,MAAM,UAAU;;;;;;;;;CA+CtB,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;CAwBxB,CAAC;AAEF,QAAA,MAAM,cAAc;;;;;;;;;;;;;CAgCnB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,cAAc,CAAC,CAAC;AAE3D,QAAA,MAAM,oBAAoB;;;;;;;;;CAczB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAE5D,QAAA,MAAM,WAAW;;;;;;;;;;;;;CAmBhB,CAAC;AA2EF,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,WAAW,CAAC,CAAC;AAKpD,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;IAwCtB,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAGlB,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAyJhB,kBAAkB;;;;;;QASlB,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAoQpB,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgEnB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,WAAW,CAAC,CAAC;AAEpD,eAAO,MAAM,mBAAmB,UAAU,CAAC;AAI3C,wBAAgB,aAAa,CAC3B,IAAI,GAAE,IAAI,CAAC,YAAY,EAAE,eAAe,CAAM,GAC7C,UAAU,CAaZ;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,GAAE,IAAI,CAAC,YAAY,EAAE,eAAe,CAAM,GAC7C,oBAAoB,CAItB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,GAAG,SAAS,GACpD,MAAM,CAER;AAED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,UAAU,EACd,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,eAAe,CAAC,EACnD,QAAQ,EAAE,MAAM,GAAG,SAAS,WA4B7B;AAYD,wBAAgB,kBAAkB,SAEjC"}
@@ -542,6 +542,22 @@ const zeroOptions = {
542
542
  `when restoring the replica from the backup.`
543
543
  ]
544
544
  },
545
+ minCheckpointPageCount: {
546
+ type: number().optional(),
547
+ desc: [
548
+ `The WAL page count at which SQLite attempts a PASSIVE checkpoint, which`,
549
+ `transfers pages to the main database file without blocking writers.`,
550
+ `Defaults to {bold checkpointThresholdMB * 250} (since SQLite page size is 4KB).`
551
+ ]
552
+ },
553
+ maxCheckpointPageCount: {
554
+ type: number().optional(),
555
+ desc: [
556
+ `The WAL page count at which SQLite performs a RESTART checkpoint, which`,
557
+ `blocks writers until complete. Defaults to {bold minCheckpointPageCount * 10}.`,
558
+ `Set to {bold 0} to disable RESTART checkpoints entirely.`
559
+ ]
560
+ },
545
561
  incrementalBackupIntervalMinutes: {
546
562
  type: number().default(15),
547
563
  desc: [