tinbase 0.9.0 → 0.10.1

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 (162) hide show
  1. package/README.md +10 -9
  2. package/dist/admin/api.d.ts +62 -1
  3. package/dist/admin/api.js +209 -10
  4. package/dist/admin/api.js.map +1 -1
  5. package/dist/admin/ui.d.ts +1 -1
  6. package/dist/admin/ui.js +1548 -16
  7. package/dist/admin/ui.js.map +1 -1
  8. package/dist/auth/handler.d.ts +52 -5
  9. package/dist/auth/handler.js +147 -36
  10. package/dist/auth/handler.js.map +1 -1
  11. package/dist/auth/inbox.d.ts +4 -2
  12. package/dist/auth/inbox.js +1 -0
  13. package/dist/auth/inbox.js.map +1 -1
  14. package/dist/auth/oauth.d.ts +30 -4
  15. package/dist/auth/oauth.js +22 -6
  16. package/dist/auth/oauth.js.map +1 -1
  17. package/dist/auth/password.d.ts +5 -0
  18. package/dist/auth/password.js +7 -0
  19. package/dist/auth/password.js.map +1 -1
  20. package/dist/auth/qr.d.ts +1 -1
  21. package/dist/auth/qr.js +1 -1
  22. package/dist/auth/rate-limit.d.ts +33 -0
  23. package/dist/auth/rate-limit.js +63 -0
  24. package/dist/auth/rate-limit.js.map +1 -0
  25. package/dist/auth/redirect.d.ts +20 -0
  26. package/dist/auth/redirect.js +79 -0
  27. package/dist/auth/redirect.js.map +1 -0
  28. package/dist/auth/settings.d.ts +55 -0
  29. package/dist/auth/settings.js +116 -0
  30. package/dist/auth/settings.js.map +1 -0
  31. package/dist/auth/totp.js +1 -1
  32. package/dist/cli.js +66 -30
  33. package/dist/cli.js.map +1 -1
  34. package/dist/cron/service.d.ts +15 -2
  35. package/dist/cron/service.js +19 -2
  36. package/dist/cron/service.js.map +1 -1
  37. package/dist/db/bootstrap.d.ts +13 -6
  38. package/dist/db/bootstrap.js +26 -5
  39. package/dist/db/bootstrap.js.map +1 -1
  40. package/dist/db/database.d.ts +61 -3
  41. package/dist/db/database.js +72 -9
  42. package/dist/db/database.js.map +1 -1
  43. package/dist/db/emulated.d.ts +39 -2
  44. package/dist/db/emulated.js +39 -23
  45. package/dist/db/emulated.js.map +1 -1
  46. package/dist/db/engine.d.ts +19 -5
  47. package/dist/db/engine.js +4 -2
  48. package/dist/db/engine.js.map +1 -1
  49. package/dist/db/inspect.d.ts +6 -1
  50. package/dist/db/inspect.js +2 -1
  51. package/dist/db/inspect.js.map +1 -1
  52. package/dist/db/pglite-engine.d.ts +7 -1
  53. package/dist/db/pglite-engine.js +7 -1
  54. package/dist/db/pglite-engine.js.map +1 -1
  55. package/dist/db/pgmem-engine.d.ts +9 -3
  56. package/dist/db/pgmem-engine.js +13 -7
  57. package/dist/db/pgmem-engine.js.map +1 -1
  58. package/dist/db/schema-diff.d.ts +9 -1
  59. package/dist/db/schema-diff.js +19 -5
  60. package/dist/db/schema-diff.js.map +1 -1
  61. package/dist/db/sql-compat.d.ts +2 -2
  62. package/dist/db/sql-compat.js +2 -2
  63. package/dist/functions/deno-shim.d.ts +6 -17
  64. package/dist/functions/deno-shim.js +42 -10
  65. package/dist/functions/deno-shim.js.map +1 -1
  66. package/dist/functions/handler.d.ts +9 -4
  67. package/dist/functions/handler.js +9 -1
  68. package/dist/functions/handler.js.map +1 -1
  69. package/dist/gen-types.d.ts +6 -1
  70. package/dist/gen-types.js +53 -41
  71. package/dist/gen-types.js.map +1 -1
  72. package/dist/index.d.ts +33 -3
  73. package/dist/index.js +170 -30
  74. package/dist/index.js.map +1 -1
  75. package/dist/jwt.d.ts +4 -1
  76. package/dist/jwt.js +4 -2
  77. package/dist/jwt.js.map +1 -1
  78. package/dist/log-buffer.d.ts +7 -1
  79. package/dist/log-buffer.js +3 -0
  80. package/dist/log-buffer.js.map +1 -1
  81. package/dist/net/service.d.ts +35 -6
  82. package/dist/net/service.js +72 -17
  83. package/dist/net/service.js.map +1 -1
  84. package/dist/node/bun-server.d.ts +2 -1
  85. package/dist/node/bun-server.js +11 -1
  86. package/dist/node/bun-server.js.map +1 -1
  87. package/dist/node/bundle-function.d.ts +1 -1
  88. package/dist/node/bundle-function.js +1 -1
  89. package/dist/node/config-toml.d.ts +31 -0
  90. package/dist/node/config-toml.js +186 -0
  91. package/dist/node/config-toml.js.map +1 -0
  92. package/dist/node/db-diff.d.ts +13 -1
  93. package/dist/node/db-diff.js +3 -1
  94. package/dist/node/db-diff.js.map +1 -1
  95. package/dist/node/fs-driver.d.ts +16 -1
  96. package/dist/node/fs-driver.js +20 -1
  97. package/dist/node/fs-driver.js.map +1 -1
  98. package/dist/node/index.d.ts +2 -2
  99. package/dist/node/index.js +1 -1
  100. package/dist/node/index.js.map +1 -1
  101. package/dist/node/load-config.d.ts +80 -0
  102. package/dist/node/load-config.js +230 -0
  103. package/dist/node/load-config.js.map +1 -0
  104. package/dist/node/load-functions.d.ts +17 -2
  105. package/dist/node/load-functions.js +17 -4
  106. package/dist/node/load-functions.js.map +1 -1
  107. package/dist/node/native/database-url.d.ts +25 -0
  108. package/dist/node/native/database-url.js +38 -0
  109. package/dist/node/native/database-url.js.map +1 -0
  110. package/dist/node/native/engine.d.ts +7 -0
  111. package/dist/node/native/engine.js +63 -85
  112. package/dist/node/native/engine.js.map +1 -1
  113. package/dist/node/native/wire-engine.d.ts +16 -0
  114. package/dist/node/native/wire-engine.js +83 -0
  115. package/dist/node/native/wire-engine.js.map +1 -0
  116. package/dist/node/native/wire.d.ts +25 -8
  117. package/dist/node/native/wire.js +130 -15
  118. package/dist/node/native/wire.js.map +1 -1
  119. package/dist/node/project.d.ts +15 -1
  120. package/dist/node/project.js +19 -7
  121. package/dist/node/project.js.map +1 -1
  122. package/dist/node/server-shared.d.ts +4 -1
  123. package/dist/node/server.d.ts +11 -0
  124. package/dist/node/server.js +11 -0
  125. package/dist/node/server.js.map +1 -1
  126. package/dist/node/ws.d.ts +26 -1
  127. package/dist/node/ws.js +26 -3
  128. package/dist/node/ws.js.map +1 -1
  129. package/dist/realtime/engine.d.ts +6 -0
  130. package/dist/realtime/engine.js +45 -34
  131. package/dist/realtime/engine.js.map +1 -1
  132. package/dist/rest/build.d.ts +44 -1
  133. package/dist/rest/build.js +96 -10
  134. package/dist/rest/build.js.map +1 -1
  135. package/dist/rest/errors.d.ts +8 -0
  136. package/dist/rest/errors.js +12 -1
  137. package/dist/rest/errors.js.map +1 -1
  138. package/dist/rest/handler.d.ts +17 -1
  139. package/dist/rest/handler.js +125 -10
  140. package/dist/rest/handler.js.map +1 -1
  141. package/dist/rest/parse.d.ts +26 -1
  142. package/dist/rest/parse.js +29 -2
  143. package/dist/rest/parse.js.map +1 -1
  144. package/dist/retention/service.d.ts +3 -0
  145. package/dist/retention/service.js +3 -1
  146. package/dist/retention/service.js.map +1 -1
  147. package/dist/security.d.ts +22 -0
  148. package/dist/security.js +47 -0
  149. package/dist/security.js.map +1 -0
  150. package/dist/storage/driver.d.ts +8 -1
  151. package/dist/storage/driver.js +4 -1
  152. package/dist/storage/driver.js.map +1 -1
  153. package/dist/storage/handler.d.ts +20 -1
  154. package/dist/storage/handler.js +272 -16
  155. package/dist/storage/handler.js.map +1 -1
  156. package/dist/types.d.ts +84 -1
  157. package/dist/types.js +10 -0
  158. package/dist/types.js.map +1 -1
  159. package/dist/webhooks/service.d.ts +25 -2
  160. package/dist/webhooks/service.js +21 -3
  161. package/dist/webhooks/service.js.map +1 -1
  162. package/package.json +5 -3
@@ -9,10 +9,14 @@
9
9
  * browser.
10
10
  */
11
11
  import type { Database } from '../db/database.js';
12
+ /** The minimal socket surface the engine needs; any transport can supply it. */
12
13
  export interface RealtimeSocketLike {
14
+ /** send a text or binary frame to the client */
13
15
  send(data: string | Uint8Array): void;
16
+ /** close the connection with an optional WebSocket close code/reason */
14
17
  close(code?: number, reason?: string): void;
15
18
  }
19
+ /** Holds all live connections and fans database changes and broadcasts out to them. */
16
20
  export declare class RealtimeEngine {
17
21
  private db;
18
22
  private jwtSecret?;
@@ -35,7 +39,9 @@ export declare class RealtimeEngine {
35
39
  private authorizePrivate;
36
40
  /** Fan a realtime.send() database broadcast out to a topic's subscribers. */
37
41
  private dispatchDbBroadcast;
42
+ /** Wire up the CDC and database-broadcast listeners; idempotent once started. */
38
43
  start(): Promise<void>;
44
+ /** Detach listeners and close every open socket (server shutdown). */
39
45
  stop(): void;
40
46
  /** Attach a socket. Returns callbacks the transport must wire up. */
41
47
  connect(socket: RealtimeSocketLike, opts?: {
@@ -1,5 +1,6 @@
1
1
  import { quoteIdent } from '../db/database.js';
2
2
  import { verifyJwt } from '../jwt.js';
3
+ /** Holds all live connections and fans database changes and broadcasts out to them. */
3
4
  export class RealtimeEngine {
4
5
  db;
5
6
  jwtSecret;
@@ -42,7 +43,7 @@ export class RealtimeEngine {
42
43
  // read: does a SELECT policy let them see the probe row for this topic?
43
44
  const rd = await tx.query(`select count(*)::int as n from realtime.messages where topic = $1`, [subTopic]);
44
45
  const read = (rd.rows[0]?.n ?? 0) > 0;
45
- // write: does an INSERT policy let them broadcast? (last query — a
46
+ // write: does an INSERT policy let them broadcast? (last query - a
46
47
  // failure aborts the tx, which we roll back anyway)
47
48
  let write = true;
48
49
  try {
@@ -77,6 +78,7 @@ export class RealtimeEngine {
77
78
  });
78
79
  }
79
80
  }
81
+ /** Wire up the CDC and database-broadcast listeners; idempotent once started. */
80
82
  async start() {
81
83
  if (this.stopCdc)
82
84
  return;
@@ -87,10 +89,11 @@ export class RealtimeEngine {
87
89
  this.dispatchDbBroadcast(JSON.parse(payload));
88
90
  }
89
91
  catch {
90
- // malformed payload — drop
92
+ // malformed payload - drop
91
93
  }
92
94
  });
93
95
  }
96
+ /** Detach listeners and close every open socket (server shutdown). */
94
97
  stop() {
95
98
  this.stopCdc?.();
96
99
  this.stopCdc = null;
@@ -159,34 +162,42 @@ export class RealtimeEngine {
159
162
  this.reply(conn, msg, 'ok', {});
160
163
  return;
161
164
  }
162
- switch (msg.event) {
163
- case 'phx_join':
164
- await this.handleJoin(conn, msg);
165
- break;
166
- case 'phx_leave':
167
- this.leaveChannel(conn, msg.topic);
168
- this.reply(conn, msg, 'ok', {});
169
- break;
170
- case 'broadcast':
171
- this.handleBroadcast(conn, msg);
172
- break;
173
- case 'presence':
174
- this.handlePresence(conn, msg);
175
- break;
176
- case 'access_token':
177
- {
178
- // supabase-js setAuth() refreshes the subscriber's token; re-derive ctx
179
- const ctx = await this.contextFromToken(msg.payload?.access_token);
180
- const channel = conn.channels.get(msg.topic);
181
- if (channel)
182
- channel.ctx = ctx;
183
- else
184
- for (const c of conn.channels.values())
185
- c.ctx = ctx;
186
- }
187
- break;
188
- default:
189
- break;
165
+ // A handler throwing (e.g. an engine error while resolving the join's
166
+ // schema) must never become an unhandled rejection out of the floated
167
+ // onMessage call - reply with a Phoenix error and keep the socket alive.
168
+ try {
169
+ switch (msg.event) {
170
+ case 'phx_join':
171
+ await this.handleJoin(conn, msg);
172
+ break;
173
+ case 'phx_leave':
174
+ this.leaveChannel(conn, msg.topic);
175
+ this.reply(conn, msg, 'ok', {});
176
+ break;
177
+ case 'broadcast':
178
+ this.handleBroadcast(conn, msg);
179
+ break;
180
+ case 'presence':
181
+ this.handlePresence(conn, msg);
182
+ break;
183
+ case 'access_token':
184
+ {
185
+ // supabase-js setAuth() refreshes the subscriber's token; re-derive ctx
186
+ const ctx = await this.contextFromToken(msg.payload?.access_token);
187
+ const channel = conn.channels.get(msg.topic);
188
+ if (channel)
189
+ channel.ctx = ctx;
190
+ else
191
+ for (const c of conn.channels.values())
192
+ c.ctx = ctx;
193
+ }
194
+ break;
195
+ default:
196
+ break;
197
+ }
198
+ }
199
+ catch (e) {
200
+ this.reply(conn, msg, 'error', { reason: e instanceof Error ? e.message : String(e) });
190
201
  }
191
202
  }
192
203
  async handleJoin(conn, msg) {
@@ -322,7 +333,7 @@ export class RealtimeEngine {
322
333
  const ref = read(refLen);
323
334
  const topic = read(topicLen);
324
335
  const userEvent = read(eventLen);
325
- read(metaLen); // metadata — not relayed
336
+ read(metaLen); // metadata - not relayed
326
337
  const payloadBytes = bytes.subarray(offset);
327
338
  const payload = {
328
339
  type: 'broadcast',
@@ -438,11 +449,11 @@ export class RealtimeEngine {
438
449
  }));
439
450
  }
440
451
  catch {
441
- // schema went away — still deliver the event without columns
452
+ // schema went away - still deliver the event without columns
442
453
  }
443
454
  // RLS: only deliver a change to a subscriber if their role/claims would let
444
455
  // them see the row. INSERT/UPDATE are re-checked by primary key as that
445
- // subscriber; DELETE cannot be re-queried (the row is gone) — see note below.
456
+ // subscriber; DELETE cannot be re-queried (the row is gone) - see note below.
446
457
  const rlsTables = await this.db.getRlsTables(event.schema).catch(() => new Set());
447
458
  const rlsEnabled = rlsTables.has(event.table);
448
459
  const pk = rlsEnabled ? (await this.db.getSchemaInfo(event.schema)).tables.get(event.table)?.primaryKey ?? [] : [];
@@ -458,7 +469,7 @@ export class RealtimeEngine {
458
469
  // A DELETE on an RLS table can't be re-checked per row (the row is
459
470
  // gone), so we can't confirm this subscriber was allowed to see it.
460
471
  // Non-service subscribers therefore get only the primary key of the
461
- // deleted row, never the full old_record — otherwise every other
472
+ // deleted row, never the full old_record - otherwise every other
462
473
  // tenant's deleted-row contents would leak. (service_role/bypassrls and
463
474
  // non-RLS tables still get the full old_record.)
464
475
  const redactOld = event.type === 'DELETE' && rlsEnabled && channel.ctx.role !== 'service_role';
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/realtime/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/realtime/engine.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAwErC,uFAAuF;AACvF,MAAM,OAAO,cAAc;IAUf;IACA;IAVF,WAAW,GAAG,IAAI,GAAG,EAAc,CAAA;IACnC,cAAc,GAAG,CAAC,CAAA;IAClB,aAAa,GAAG,CAAC,CAAA;IACzB,0BAA0B;IAClB,QAAQ,GAAG,IAAI,GAAG,EAAsC,CAAA;IACxD,OAAO,GAAwB,IAAI,CAAA;IACnC,eAAe,GAAwB,IAAI,CAAA;IAEnD,YACU,EAAY,EACZ,SAAkB;QADlB,OAAE,GAAF,EAAE,CAAU;QACZ,cAAS,GAAT,SAAS,CAAS;IACzB,CAAC;IAEJ,oEAAoE;IAC5D,KAAK,CAAC,gBAAgB,CAAC,KAAyB;QACtD,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;QACpE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;QACrD,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;QAClD,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAA;QAC5E,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IACzB,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,gBAAgB,CAAC,QAAgB,EAAE,GAAmB;QAClE,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAC3D,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;gBACnD,kEAAkE;gBAClE,MAAM,EAAE,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAA;gBACjE,MAAM,EAAE,CAAC,KAAK,CACZ,gIAAgI,EAChI,CAAC,QAAQ,CAAC,CACX,CAAA;gBACD,2DAA2D;gBAC3D,MAAM,EAAE,CAAC,KAAK,CACZ,yHAAyH,EACzH,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAC7B,CAAA;gBACD,wEAAwE;gBACxE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,KAAK,CACvB,mEAAmE,EACnE,CAAC,QAAQ,CAAC,CACX,CAAA;gBACD,MAAM,IAAI,GAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAY,GAAG,CAAC,CAAA;gBACjD,mEAAmE;gBACnE,oDAAoD;gBACpD,IAAI,KAAK,GAAG,IAAI,CAAA;gBAChB,IAAI,CAAC;oBACH,MAAM,EAAE,CAAC,KAAK,CACZ,kIAAkI,EAClI,CAAC,QAAQ,CAAC,CACX,CAAA;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,KAAK,GAAG,KAAK,CAAA;gBACf,CAAC;gBACD,MAAM,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAA;YACpC,CAAC,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,KAAK,GAAI,CAAqD,CAAC,OAAO,CAAA;YAC5E,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAA;YACvB,mEAAmE;YACnE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;QACtC,CAAC;IACH,CAAC;IAED,6EAA6E;IACrE,mBAAmB,CAAC,GAAuD;QACjF,MAAM,IAAI,GAAG,YAAY,GAAG,CAAC,KAAK,EAAE,CAAA;QACpC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YACvE,IAAI,CAAC,OAAO;gBAAE,SAAQ;YACtB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBACd,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,KAAK,EAAE,WAAW;gBAClB,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE;gBACtE,GAAG,EAAE,IAAI;aACV,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,iFAAiF;IACjF,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,OAAO;YAAE,OAAM;QACxB,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;QACnE,0EAA0E;QAC1E,IAAI,CAAC,eAAe,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,4BAA4B,EAAE,CAAC,OAAO,EAAE,EAAE;YAC3F,IAAI,CAAC;gBACH,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAuD,CAAC,CAAA;YACrG,CAAC;YAAC,MAAM,CAAC;gBACP,2BAA2B;YAC7B,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,sEAAsE;IACtE,IAAI;QACF,IAAI,CAAC,OAAO,EAAE,EAAE,CAAA;QAChB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACnB,IAAI,CAAC,eAAe,EAAE,EAAE,CAAA;QACxB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAA;QAC3B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAA;QACpF,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAA;IAC1B,CAAC;IAED,qEAAqE;IACrE,OAAO,CAAC,MAA0B,EAAE,OAAyB,EAAE;QAI7D,MAAM,IAAI,GAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,EAAE,CAAA;QAClF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC1B,OAAO;YACL,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE;gBAClB,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YACrC,CAAC;YACD,OAAO,EAAE,GAAG,EAAE;gBACZ,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;oBAAE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;gBACxE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YAC/B,CAAC;SACF,CAAA;IACH,CAAC;IAEO,IAAI,CAAC,IAAgB,EAAE,GAAmB;QAChD,IAAI,CAAC;YACH,MAAM,OAAO,GACX,IAAI,CAAC,GAAG,KAAK,OAAO;gBAClB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC5F,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;YACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,2BAA2B;QAC7B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,IAAgB,EAAE,IAAoB,EAAE,MAAsB,EAAE,QAAiB;QAC7F,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,WAAW;YAClB,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;YAC7B,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;SAChC,CAAC,CAAA;IACJ,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,IAAgB,EAAE,IAAyB;QACrE,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YAC7B,OAAM;QACR,CAAC;QACD,IAAI,GAAmB,CAAA;QACvB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAA;YAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,gEAAgE;gBAChE,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,MAM9C,CAAA;gBACD,GAAG,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;YAChD,CAAC;iBAAM,CAAC;gBACN,GAAG,GAAG,MAAwB,CAAA;YAChC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAM;QACR,CAAC;QACD,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YACzD,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;YAC/B,OAAM;QACR,CAAC;QAED,sEAAsE;QACtE,sEAAsE;QACtE,yEAAyE;QACzE,IAAI,CAAC;YACH,QAAQ,GAAG,CAAC,KAAK,EAAE,CAAC;gBAClB,KAAK,UAAU;oBACb,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;oBAChC,MAAK;gBACP,KAAK,WAAW;oBACd,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;oBAClC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;oBAC/B,MAAK;gBACP,KAAK,WAAW;oBACd,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;oBAC/B,MAAK;gBACP,KAAK,UAAU;oBACb,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;oBAC9B,MAAK;gBACP,KAAK,cAAc;oBACjB,CAAC;wBACC,wEAAwE;wBACxE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,EAAE,YAAkC,CAAC,CAAA;wBACxF,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;wBAC5C,IAAI,OAAO;4BAAE,OAAO,CAAC,GAAG,GAAG,GAAG,CAAA;;4BACzB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;gCAAE,CAAC,CAAC,GAAG,GAAG,GAAG,CAAA;oBAC1D,CAAC;oBACD,MAAK;gBACP;oBACE,MAAK;YACT,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QACxF,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,IAAgB,EAAE,GAAmB;QAC5D,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE,CAKxC,CAAA;QAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,EAAE,YAAkC,CAAC,CAAA;QACxF,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,KAAK,IAAI,CAAA;QACzC,IAAI,YAAY,GAAG,IAAI,CAAA;QACvB,4EAA4E;QAC5E,kEAAkE;QAClE,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAClD,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;YAC/C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;YACnD,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAChB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE;oBAC7B,MAAM,EAAE,gEAAgE,GAAG,EAAE;iBAC9E,CAAC,CAAA;gBACF,OAAM;YACR,CAAC;YACD,YAAY,GAAG,KAAK,CAAC,KAAK,CAAA;QAC5B,CAAC;QAED,MAAM,QAAQ,GAAsB,EAAE,CAAA;QACtC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,gBAAgB,IAAI,EAAE,EAAE,CAAC;YACjD,MAAM,OAAO,GAAoB;gBAC/B,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE;gBACzB,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE;gBACxC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,QAAQ;gBAC/B,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,GAAG;gBACxB,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAA;YACD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACtB,IAAI,OAAO,CAAC,KAAK,KAAK,GAAG,EAAE,CAAC;gBAC1B,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;gBAC/D,CAAC;gBAAC,MAAM,CAAC;oBACP,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE;wBAC7B,MAAM,EAAE,qCAAqC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,EAAE;qBAC/E,CAAC,CAAA;oBACF,OAAM;gBACR,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,yEAAyE;gBACzE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;gBACxD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;oBACvC,MAAM,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;gBACvE,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAY;YACvB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,OAAO,EAAE,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI;YACxC,QAAQ;YACR,aAAa,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,IAAI,KAAK;YAC9C,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE,GAAG,IAAI,KAAK;YAC5C,WAAW,EAAE,MAAM,CAAC,QAAQ,EAAE,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE;YACxD,eAAe,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,IAAI,IAAI;YACjD,GAAG;YACH,OAAO,EAAE,SAAS;YAClB,YAAY;SACb,CAAA;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QAErC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;YAC1B,gBAAgB,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACrC,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1C,CAAC,CAAC;SACJ,CAAC,CAAA;QAEF,4BAA4B;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,KAAK,EAAE,gBAAgB;YACvB,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;YAC/C,GAAG,EAAE,IAAI;SACV,CAAC,CAAA;QAEF,mEAAmE;QACnE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBACd,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,KAAK,EAAE,QAAQ;gBACf,OAAO,EAAE;oBACP,MAAM,EAAE,IAAI;oBACZ,SAAS,EAAE,kBAAkB;oBAC7B,OAAO,EAAE,0BAA0B;oBACnC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;iBAC7C;gBACD,GAAG,EAAE,IAAI;aACV,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,IAAgB,EAAE,KAAa;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACxC,IAAI,CAAC,OAAO;YAAE,OAAM;QACpB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC3B,iBAAiB;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACtC,IAAI,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAE,CAAA;YAC7C,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;YACjC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC;gBAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACjD,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;gBAC3B,KAAK;gBACL,KAAK,EAAE,eAAe;gBACtB,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE;gBAChE,GAAG,EAAE,IAAI;aACV,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,YAAY,CAAC,IAAgB,EAAE,KAAiB;QACtD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;YAAE,OAAM;QAC9C,MAAM,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAA;QAC3E,IAAI,MAAM,GAAG,CAAC,CAAA;QACd,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;QACjC,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE;YAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC,CAAA;YAChE,MAAM,IAAI,GAAG,CAAA;YACb,OAAO,GAAG,CAAA;QACZ,CAAC,CAAA;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAA;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAA;QAChC,IAAI,CAAC,OAAO,CAAC,CAAA,CAAC,yBAAyB;QACvC,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAE3C,MAAM,OAAO,GAA4B;YACvC,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY;SACrF,CAAA;QACD,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;YACzB,KAAK;YACL,KAAK,EAAE,WAAW;YAClB,OAAO;YACP,GAAG,EAAE,GAAG,IAAI,IAAI;YAChB,QAAQ,EAAE,OAAO,IAAI,IAAI;SAC1B,CAAC,CAAA;IACJ,CAAC;IAEO,eAAe,CAAC,IAAgB,EAAE,GAAmB;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAC3C,IAAI,CAAC,MAAM;YAAE,OAAM;QACnB,qEAAqE;QACrE,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YAC3C,IAAI,MAAM,CAAC,YAAY,IAAI,GAAG,CAAC,GAAG;gBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAA;YAC9F,OAAM;QACR,CAAC;QACD,MAAM,WAAW,GAAI,GAAG,CAAC,OAAiC,CAAC,OAAO,CAAA;QAClE,MAAM,WAAW,GACf,WAAW,YAAY,UAAU;YAC/B,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAE,GAAG,CAAC,OAA+B,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,WAAW,CAAC;YACvG,CAAC,CAAC,IAAI,CAAA;QACV,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YAC7C,IAAI,CAAC,OAAO;gBAAE,SAAQ;YACtB,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa;gBAAE,SAAQ;YACrD,IAAI,WAAW,EAAE,CAAC;gBAChB,IAAI,CAAC;oBACH,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;gBAChC,CAAC;gBAAC,MAAM,CAAC;oBACP,2BAA2B;gBAC7B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAA;YAC7F,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,YAAY,IAAI,GAAG,CAAC,GAAG;YAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;IACrE,CAAC;IAEO,cAAc,CAAC,IAAgB,EAAE,GAAmB;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAC5C,IAAI,CAAC,OAAO;YAAE,OAAM;QACpB,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;QAE9D,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG;gBACX,GAAG,CAAE,GAAG,CAAC,OAAO,EAAE,OAAmC,IAAI,EAAE,CAAC;gBAC5D,OAAO,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;aACpC,CAAA;YACD,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YACxC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,KAAK,GAAG,IAAI,GAAG,EAAE,CAAA;gBACjB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YACrC,CAAC;YACD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;YAC/C,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACjD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE;gBAC/B,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,KAAK,EAAE,eAAe;gBACtB,OAAO,EAAE;oBACP,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE;oBACnD,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE;iBAC5D;gBACD,GAAG,EAAE,IAAI;aACV,CAAC,CAAA;YACF,IAAI,GAAG,CAAC,GAAG;gBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;YAC5C,OAAM;QACR,CAAC;QAED,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YAC1C,MAAM,KAAK,GAAG,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;YAC7C,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;gBACnB,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;gBACjC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC;oBAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;gBACrD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE;oBAC/B,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,KAAK,EAAE,eAAe;oBACtB,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE;oBAChE,GAAG,EAAE,IAAI;iBACV,CAAC,CAAA;YACJ,CAAC;YACD,IAAI,GAAG,CAAC,GAAG;gBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;QAC9C,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,KAAa,EAAE,GAAmB;QACzD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QACpD,CAAC;IACH,CAAC;IAED,yEAAyE;IAEjE,KAAK,CAAC,WAAW,CAAC,KAAe;QACvC,2DAA2D;QAC3D,IAAI,OAAO,GAAqC,EAAE,CAAA;QAClD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YACtD,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAClE,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,IAAI,EAAE,CAAC,CAAC,OAAO;aAChB,CAAC,CAAC,CAAA;QACL,CAAC;QAAC,MAAM,CAAC;YACP,6DAA6D;QAC/D,CAAC;QAED,4EAA4E;QAC5E,wEAAwE;QACxE,8EAA8E;QAC9E,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,EAAU,CAAC,CAAA;QACzF,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAC7C,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QAElH,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACpC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ;qBACzB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;qBAC5C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;gBACnB,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;oBAAE,SAAQ;gBAE9B,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;oBAAE,SAAQ;gBAEtE,mEAAmE;gBACnE,oEAAoE;gBACpE,oEAAoE;gBACpE,iEAAiE;gBACjE,wEAAwE;gBACxE,iDAAiD;gBACjD,MAAM,SAAS,GACb,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,cAAc,CAAA;gBAC9E,MAAM,SAAS,GAAG,SAAS;oBACzB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,EAAE,EAAE,CAAC;oBACpC,CAAC,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAA;gBAE1B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;oBACd,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,KAAK,EAAE,kBAAkB;oBACzB,OAAO,EAAE;wBACP,GAAG;wBACH,IAAI,EAAE;4BACJ,MAAM,EAAE,KAAK,CAAC,MAAM;4BACpB,KAAK,EAAE,KAAK,CAAC,KAAK;4BAClB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;4BACxC,SAAS,EAAE,KAAK,CAAC,IAAI;4BACrB,IAAI,EAAE,KAAK,CAAC,IAAI;4BAChB,OAAO;4BACP,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE;4BAC1B,UAAU,EAAE,SAAS;4BACrB,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI;yBAC7B;qBACF;oBACD,GAAG,EAAE,IAAI;iBACV,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACK,KAAK,CAAC,MAAM,CAAC,GAAmB,EAAE,KAAe,EAAE,UAAmB,EAAE,EAAY;QAC1F,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAA;QAC5B,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc;YAAE,OAAO,IAAI,CAAA;QAE5C,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAC,IAAI,KAAK,MAAM,CAAA;QACvD,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC,IAAI,KAAK,MAAM,CAAA,CAAC,gCAAgC;QAEhF,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAA;QACjC,MAAM,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC9D,MAAM,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QACvC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC;YAAE,OAAO,GAAG,CAAC,IAAI,KAAK,MAAM,CAAA;QAEnE,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAC/C,CAAC,CACC,iBAAiB,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAC3G,MAAM,CACP,CACF,CAAA;YACD,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,CAAkB,EAAE,CAAW;QACpD,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;YAAE,OAAO,KAAK,CAAA;QAC3D,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;YAAE,OAAO,KAAK,CAAA;QACxD,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI;YAAE,OAAO,KAAK,CAAA;QACvD,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;YACzD,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAA;QACvD,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;CACF;AAED,iFAAiF;AACjF,SAAS,MAAM,CAAC,GAA4B,EAAE,EAAY;IACxD,MAAM,GAAG,GAA4B,EAAE,CAAA;IACvC,KAAK,MAAM,CAAC,IAAI,EAAE;QAAE,IAAI,CAAC,IAAI,GAAG;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;IACjD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,GAA4B;IACtE,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAA;IACpE,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAA;IAClC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;IAEjC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QAChB,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;QAC3F,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;IACjD,CAAC;IACD,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IACrD,IAAI,EAAE,KAAK,KAAK;QAAE,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAEvD,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;IACxB,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;IAC1B,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAA;IACpD,QAAQ,EAAE,EAAE,CAAC;QACX,KAAK,IAAI;YACP,OAAO,CAAC,GAAG,CAAC,CAAA;QACd,KAAK,KAAK;YACR,OAAO,CAAC,IAAI,CAAC,CAAA;QACf,KAAK,IAAI;YACP,OAAO,CAAC,GAAG,CAAC,CAAA;QACd,KAAK,KAAK;YACR,OAAO,CAAC,IAAI,CAAC,CAAA;IACjB,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,WAAW,CAAC,MAAe,EAAE,QAAgB;IACpD,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,QAAQ,KAAK,MAAM,CAAA;IACvE,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAA;AACpC,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,mBAAmB,CAAC,KAAa,EAAE,KAAa,EAAE,OAAmB;IAC5E,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAA;IAC7B,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACpC,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACpC,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACtF,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACV,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAA;IAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAA;IAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACV,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACV,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;IACtB,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;IAC1C,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;IAC3D,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -5,11 +5,16 @@
5
5
  */
6
6
  import { type SchemaInfo } from '../db/database.js';
7
7
  import { type Cond, type ParsedQuery } from './parse.js';
8
+ /** A built SQL statement plus its bind params and an optional separate count query. */
8
9
  export interface BuiltQuery {
10
+ /** SQL text with `$n` placeholders */
9
11
  sql: string;
12
+ /** positional bind values for the placeholders */
10
13
  params: unknown[];
14
+ /** separate exact-count query, emitted only when the client asked for a count */
11
15
  countSql?: string;
12
16
  }
17
+ /** Builds SQL for one PostgREST request against a single schema's introspection. */
13
18
  export declare class QueryBuilder {
14
19
  private schema;
15
20
  private info;
@@ -24,17 +29,33 @@ export declare class QueryBuilder {
24
29
  private nextAlias;
25
30
  private qualify;
26
31
  private table;
32
+ /** Build the SELECT (with embeds/filters/order/pagination), plus an optional count query. */
27
33
  buildSelect(table: string, opts?: {
28
34
  count?: boolean;
29
35
  }): BuiltQuery;
36
+ /**
37
+ * Aggregate select: `count()`, `col.sum()`, `col.avg()`, `col.max()`,
38
+ * `col.min()`. Any non-aggregate column becomes an implicit GROUP BY key, so
39
+ * `select=author_id,views.sum()` yields one row per author. Output keys are
40
+ * the aggregate name (or the column's alias) and the grouping column names.
41
+ */
42
+ private buildAggregateSelect;
43
+ /**
44
+ * Build a multi-row INSERT, optionally with ON CONFLICT upsert semantics.
45
+ * @param opts.upsert merge-duplicates (do update) or ignore-duplicates (do nothing)
46
+ * @param opts.missingDefault emit `default` for absent columns instead of `null`
47
+ * @param opts.returning wrap in a CTE so select= can shape the returned rows
48
+ */
30
49
  buildInsert(table: string, rows: Record<string, unknown>[], opts: {
31
50
  upsert?: 'merge-duplicates' | 'ignore-duplicates';
32
51
  missingDefault?: boolean;
33
52
  returning: boolean;
34
53
  }): BuiltQuery;
54
+ /** Build an UPDATE scoped by the base filters; SET comes from the JSON body. */
35
55
  buildUpdate(table: string, body: Record<string, unknown>, opts: {
36
56
  returning: boolean;
37
57
  }): BuiltQuery;
58
+ /** Build a DELETE scoped by the base filters. */
38
59
  buildDelete(table: string, opts: {
39
60
  returning: boolean;
40
61
  }): BuiltQuery;
@@ -42,16 +63,38 @@ export declare class QueryBuilder {
42
63
  private wrapMutation;
43
64
  private buildSelectList;
44
65
  private buildEmbed;
66
+ /** Whether `columns` (order-independent) form a PK/UNIQUE key on `table`. */
67
+ private isUniqueKey;
45
68
  private findRelationship;
46
69
  private baseWhere;
70
+ /** Render one condition (leaf filter or and/or subtree) as a SQL boolean expression. */
47
71
  renderCond(cond: Cond, alias: string): string;
48
72
  private renderLogic;
73
+ /** Render the `order by` clause for the terms scoped to the given embed path (`[]` = base). */
49
74
  renderOrder(path: string[], alias: string): string;
75
+ /** Render `limit`/`offset` for the given path key (`''` = base); empty when neither is set. */
50
76
  renderLimitOffset(pathKey: string): string;
51
77
  private assertAllPathsConsumed;
52
78
  private requireColumn;
53
79
  private pushParam;
54
80
  }
55
- /** "data->a->>b" → "data"->'a'->>'b' ; numeric keys become array indexes. */
81
+ /**
82
+ * Render a (possibly JSON-arrowed) column reference: `data->a->>b` becomes
83
+ * `"data"->'a'->>'b'`; numeric keys become array indexes.
84
+ * SECURITY: the base column is quoted as an identifier and text keys are quoted
85
+ * as literals, so a hostile column/key name can't break out of the expression.
86
+ */
56
87
  export declare function renderColumnExpr(alias: string, raw: string): string;
88
+ /**
89
+ * Validate a `::type` cast against an identifier-plus-`[]` allowlist and return it.
90
+ * SECURITY: casts are interpolated raw into SQL, so this reject is the only guard
91
+ * against injection through the cast token.
92
+ * @throws ParseError when the cast is not a bare type name (optionally array).
93
+ */
94
+ export declare function sanitizeCast(cast: string): string;
95
+ /**
96
+ * Serialize a JS array into a Postgres array literal (`{a,b,...}`), recursing
97
+ * for nested arrays. Elements are double-quoted with backslash/quote escaping so
98
+ * the literal survives being bound as a parameter and cast to the target type.
99
+ */
57
100
  export declare function pgArrayLiteral(arr: unknown[]): string;
@@ -6,7 +6,9 @@
6
6
  import { quoteIdent, quoteLiteral } from '../db/database.js';
7
7
  import { ApiError } from '../types.js';
8
8
  import { FILTER_OPS, ParseError, splitTopLevel, unquote, } from './parse.js';
9
+ /** json_agg fallback for an empty result set: a literal empty JSON array. */
9
10
  const AGG_EMPTY = `'[]'::json`;
11
+ /** Builds SQL for one PostgREST request against a single schema's introspection. */
10
12
  export class QueryBuilder {
11
13
  schema;
12
14
  info;
@@ -40,9 +42,13 @@ export class QueryBuilder {
40
42
  return t;
41
43
  }
42
44
  // ── public entrypoints ────────────────────────────────────────────────
45
+ /** Build the SELECT (with embeds/filters/order/pagination), plus an optional count query. */
43
46
  buildSelect(table, opts = {}) {
44
47
  this.table(table);
45
48
  const alias = 't0';
49
+ if (this.q.select.some((i) => i.kind === 'column' && i.aggregate)) {
50
+ return this.buildAggregateSelect(table, alias, opts);
51
+ }
46
52
  const { exprs, innerConds } = this.buildSelectList(this.q.select, table, alias, []);
47
53
  const where = this.baseWhere(alias, innerConds);
48
54
  const order = this.renderOrder([], alias);
@@ -57,6 +63,54 @@ export class QueryBuilder {
57
63
  : undefined,
58
64
  };
59
65
  }
66
+ /**
67
+ * Aggregate select: `count()`, `col.sum()`, `col.avg()`, `col.max()`,
68
+ * `col.min()`. Any non-aggregate column becomes an implicit GROUP BY key, so
69
+ * `select=author_id,views.sum()` yields one row per author. Output keys are
70
+ * the aggregate name (or the column's alias) and the grouping column names.
71
+ */
72
+ buildAggregateSelect(table, alias, opts) {
73
+ const selExprs = [];
74
+ const groupExprs = [];
75
+ for (const item of this.q.select) {
76
+ if (item.kind !== 'column') {
77
+ throw new ParseError('embedded resources cannot be combined with aggregate functions');
78
+ }
79
+ if (item.name === '*') {
80
+ throw new ParseError('"*" cannot be combined with aggregate functions');
81
+ }
82
+ const cast = item.cast ? `::${sanitizeCast(item.cast)}` : '';
83
+ if (item.aggregate) {
84
+ const call = item.name === ''
85
+ ? `${item.aggregate}(*)` // bare count()
86
+ : `${item.aggregate}(${renderColumnExpr(alias, item.name)})`;
87
+ const out = item.alias ?? item.aggregate;
88
+ selExprs.push(`${call}${cast} as ${quoteIdent(out)}`);
89
+ }
90
+ else {
91
+ const expr = renderColumnExpr(alias, item.name);
92
+ const out = item.alias ?? defaultAliasFor(item.name);
93
+ selExprs.push(`${expr}${cast} as ${quoteIdent(out)}`);
94
+ groupExprs.push(expr);
95
+ }
96
+ }
97
+ const where = this.baseWhere(alias, []);
98
+ const groupBy = groupExprs.length > 0 ? ` group by ${groupExprs.join(', ')}` : '';
99
+ const body = `select ${selExprs.join(', ')} from ${this.qualify(table)} as ${quoteIdent(alias)}${where}${groupBy}`;
100
+ const core = `${body}${this.renderOrder([], alias)}${this.renderLimitOffset('')}`;
101
+ this.assertAllPathsConsumed();
102
+ return {
103
+ sql: `select coalesce(json_agg(row_to_json(_r)), ${AGG_EMPTY}) as body from (${core}) _r`,
104
+ params: [],
105
+ countSql: opts.count ? `select count(*)::int as count from (${body}) _c` : undefined,
106
+ };
107
+ }
108
+ /**
109
+ * Build a multi-row INSERT, optionally with ON CONFLICT upsert semantics.
110
+ * @param opts.upsert merge-duplicates (do update) or ignore-duplicates (do nothing)
111
+ * @param opts.missingDefault emit `default` for absent columns instead of `null`
112
+ * @param opts.returning wrap in a CTE so select= can shape the returned rows
113
+ */
60
114
  buildInsert(table, rows, opts) {
61
115
  const tinfo = this.table(table);
62
116
  if (rows.length === 0) {
@@ -108,6 +162,7 @@ export class QueryBuilder {
108
162
  return { sql: insert, params };
109
163
  return { sql: this.wrapMutation(insert, table), params };
110
164
  }
165
+ /** Build an UPDATE scoped by the base filters; SET comes from the JSON body. */
111
166
  buildUpdate(table, body, opts) {
112
167
  const tinfo = this.table(table);
113
168
  const keys = Object.keys(body);
@@ -127,6 +182,7 @@ export class QueryBuilder {
127
182
  return { sql: update.replace(/ returning \*$/, ''), params };
128
183
  return { sql: this.wrapMutation(update, table, true), params };
129
184
  }
185
+ /** Build a DELETE scoped by the base filters. */
130
186
  buildDelete(table, opts) {
131
187
  this.table(table);
132
188
  const alias = this.aliasMutations ? 't0' : '';
@@ -220,10 +276,9 @@ export class QueryBuilder {
220
276
  const limitOffset = this.renderLimitOffset(pathKey);
221
277
  const outName = embed.alias ?? embed.name;
222
278
  if (embed.spread) {
223
- if (rel.type !== 'to-one' && rel.type !== 'm2m') {
224
- // to-many spread is a newer PostgREST feature; not supported here
225
- throw new ParseError(`spread embeds are only supported for to-one relationships: ...${embed.name}`);
226
- }
279
+ // a single-valued embed (to-one, or a one-to-one reverse embed) spreads
280
+ // one row's columns; to-many / m2m aggregate each into a JSON array.
281
+ const toOne = rel.single === true;
227
282
  const exprs = children.map((c) => {
228
283
  if (c.kind !== 'column' || c.name === '*') {
229
284
  throw new ParseError('spread embeds support explicit columns only');
@@ -231,18 +286,28 @@ export class QueryBuilder {
231
286
  const expr = renderColumnExpr(childAlias, c.name);
232
287
  const cast = c.cast ? `::${sanitizeCast(c.cast)}` : '';
233
288
  const out = c.alias ?? defaultAliasFor(c.name);
234
- return `(select ${expr}${cast} from ${fromClause}${where}) as ${quoteIdent(out)}`;
289
+ return toOne
290
+ ? `(select ${expr}${cast} from ${fromClause}${where}) as ${quoteIdent(out)}`
291
+ : `coalesce((select json_agg(${expr}${cast}${order}) from ${fromClause}${where}), ${AGG_EMPTY}) as ${quoteIdent(out)}`;
235
292
  });
236
293
  const innerCond = embed.inner ? `exists (select 1 from ${fromClause}${where})` : undefined;
237
294
  return { exprs, innerCond };
238
295
  }
239
296
  const sub = `select ${childExprs.join(', ')} from ${fromClause}${where}${order}${limitOffset}`;
240
- const expr = rel.type === 'to-one'
297
+ const expr = rel.single === true
241
298
  ? `(select row_to_json(_sub) from (${sub}) _sub) as ${quoteIdent(outName)}`
242
299
  : `coalesce((select json_agg(row_to_json(_sub)) from (${sub}) _sub), ${AGG_EMPTY}) as ${quoteIdent(outName)}`;
243
300
  const innerCond = embed.inner ? `exists (select 1 from ${fromClause}${where})` : undefined;
244
301
  return { exprs: [expr], innerCond };
245
302
  }
303
+ /** Whether `columns` (order-independent) form a PK/UNIQUE key on `table`. */
304
+ isUniqueKey(table, columns) {
305
+ const t = this.info.tables.get(table);
306
+ if (!t)
307
+ return false;
308
+ const want = [...columns].sort().join('');
309
+ return t.uniqueKeys.some((key) => key.length === columns.length && [...key].sort().join('') === want);
310
+ }
246
311
  findRelationship(baseTable, embed) {
247
312
  const target = embed.name;
248
313
  const fks = this.info.foreignKeys;
@@ -250,10 +315,12 @@ export class QueryBuilder {
250
315
  for (const fk of fks) {
251
316
  if (fk.srcSchema === this.schema && fk.tgtSchema === this.schema) {
252
317
  if (fk.srcTable === baseTable && fk.tgtTable === target) {
253
- candidates.push({ type: 'to-one', fk, targetTable: target });
318
+ candidates.push({ type: 'to-one', fk, targetTable: target, single: true });
254
319
  }
255
320
  if (fk.srcTable === target && fk.tgtTable === baseTable) {
256
- candidates.push({ type: 'to-many', fk, targetTable: target });
321
+ // A reverse embed is normally one-to-many (array), but when the fk on
322
+ // the target is itself a unique key it's one-to-one -> single object.
323
+ candidates.push({ type: 'to-many', fk, targetTable: target, single: this.isUniqueKey(target, fk.srcColumns) });
257
324
  }
258
325
  }
259
326
  }
@@ -309,6 +376,7 @@ export class QueryBuilder {
309
376
  conds.push(...extraConds);
310
377
  return conds.length > 0 ? ` where ${conds.join(' and ')}` : '';
311
378
  }
379
+ /** Render one condition (leaf filter or and/or subtree) as a SQL boolean expression. */
312
380
  renderCond(cond, alias) {
313
381
  if (cond.kind === 'logic')
314
382
  return this.renderLogic(cond, alias);
@@ -321,6 +389,7 @@ export class QueryBuilder {
321
389
  const joined = `(${parts.join(` ${node.op} `)})`;
322
390
  return node.negated ? `not ${joined}` : joined;
323
391
  }
392
+ /** Render the `order by` clause for the terms scoped to the given embed path (`[]` = base). */
324
393
  renderOrder(path, alias) {
325
394
  const pathKey = path.join('.');
326
395
  const terms = this.q.order.filter((o) => o.path.join('.') === pathKey);
@@ -336,6 +405,7 @@ export class QueryBuilder {
336
405
  });
337
406
  return ` order by ${parts.join(', ')}`;
338
407
  }
408
+ /** Render `limit`/`offset` for the given path key (`''` = base); empty when neither is set. */
339
409
  renderLimitOffset(pathKey) {
340
410
  let s = '';
341
411
  const limit = this.q.limits.get(pathKey);
@@ -410,7 +480,12 @@ export class QueryBuilder {
410
480
  }
411
481
  }
412
482
  // ── shared rendering helpers ────────────────────────────────────────────
413
- /** "data->a->>b" → "data"->'a'->>'b' ; numeric keys become array indexes. */
483
+ /**
484
+ * Render a (possibly JSON-arrowed) column reference: `data->a->>b` becomes
485
+ * `"data"->'a'->>'b'`; numeric keys become array indexes.
486
+ * SECURITY: the base column is quoted as an identifier and text keys are quoted
487
+ * as literals, so a hostile column/key name can't break out of the expression.
488
+ */
414
489
  export function renderColumnExpr(alias, raw) {
415
490
  const tokens = raw.split(/(->>|->)/);
416
491
  const base = unquote(tokens[0].trim());
@@ -427,7 +502,13 @@ function defaultAliasFor(raw) {
427
502
  const tokens = raw.split(/->>|->/);
428
503
  return unquote(tokens[tokens.length - 1].trim());
429
504
  }
430
- function sanitizeCast(cast) {
505
+ /**
506
+ * Validate a `::type` cast against an identifier-plus-`[]` allowlist and return it.
507
+ * SECURITY: casts are interpolated raw into SQL, so this reject is the only guard
508
+ * against injection through the cast token.
509
+ * @throws ParseError when the cast is not a bare type name (optionally array).
510
+ */
511
+ export function sanitizeCast(cast) {
431
512
  if (!/^[a-zA-Z_][a-zA-Z0-9_ ]*(\[\])?$/.test(cast))
432
513
  throw new ParseError(`invalid cast: ${cast}`);
433
514
  return cast;
@@ -439,6 +520,11 @@ function udtToCast(udt) {
439
520
  return '';
440
521
  return `::${quoteIdent(base)}${arr ? '[]' : ''}`;
441
522
  }
523
+ /**
524
+ * Serialize a JS array into a Postgres array literal (`{a,b,...}`), recursing
525
+ * for nested arrays. Elements are double-quoted with backslash/quote escaping so
526
+ * the literal survives being bound as a parameter and cast to the target type.
527
+ */
442
528
  export function pgArrayLiteral(arr) {
443
529
  const items = arr.map((el) => {
444
530
  if (el === null || el === undefined)