@lovrozagar/oat 0.10.0 → 0.12.0

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 (278) hide show
  1. package/README.md +25 -2006
  2. package/dist/cli.js +283 -59
  3. package/dist/config/define-config.d.ts +8 -0
  4. package/dist/config/define-config.d.ts.map +1 -1
  5. package/dist/config/define-config.js.map +1 -1
  6. package/dist/config/validate.d.ts +12 -0
  7. package/dist/config/validate.d.ts.map +1 -0
  8. package/dist/config/validate.js +86 -0
  9. package/dist/config/validate.js.map +1 -0
  10. package/dist/conformance/effects.d.ts +9 -0
  11. package/dist/conformance/effects.d.ts.map +1 -0
  12. package/dist/conformance/effects.js +276 -0
  13. package/dist/conformance/effects.js.map +1 -0
  14. package/dist/conformance/expected-failures.d.ts +18 -0
  15. package/dist/conformance/expected-failures.d.ts.map +1 -0
  16. package/dist/conformance/expected-failures.js +48 -0
  17. package/dist/conformance/expected-failures.js.map +1 -0
  18. package/dist/conformance/feature-gate.d.ts +7 -0
  19. package/dist/conformance/feature-gate.d.ts.map +1 -0
  20. package/dist/conformance/feature-gate.js +428 -0
  21. package/dist/conformance/feature-gate.js.map +1 -0
  22. package/dist/conformance/fuzz.d.ts +108 -0
  23. package/dist/conformance/fuzz.d.ts.map +1 -0
  24. package/dist/conformance/fuzz.js +246 -0
  25. package/dist/conformance/fuzz.js.map +1 -0
  26. package/dist/conformance/leaks.d.ts +10 -0
  27. package/dist/conformance/leaks.d.ts.map +1 -0
  28. package/dist/conformance/leaks.js +23 -0
  29. package/dist/conformance/leaks.js.map +1 -0
  30. package/dist/conformance/pool.d.ts +49 -0
  31. package/dist/conformance/pool.d.ts.map +1 -0
  32. package/dist/conformance/pool.js +75 -0
  33. package/dist/conformance/pool.js.map +1 -0
  34. package/dist/conformance/rate-limit.d.ts +7 -0
  35. package/dist/conformance/rate-limit.d.ts.map +1 -0
  36. package/dist/conformance/rate-limit.js +372 -0
  37. package/dist/conformance/rate-limit.js.map +1 -0
  38. package/dist/conformance/scope.d.ts +15 -0
  39. package/dist/conformance/scope.d.ts.map +1 -0
  40. package/dist/conformance/scope.js +78 -0
  41. package/dist/conformance/scope.js.map +1 -0
  42. package/dist/conformance/seed-contract.d.ts +11 -0
  43. package/dist/conformance/seed-contract.d.ts.map +1 -0
  44. package/dist/conformance/seed-contract.js +680 -0
  45. package/dist/conformance/seed-contract.js.map +1 -0
  46. package/dist/conformance/shapes.d.ts +35 -0
  47. package/dist/conformance/shapes.d.ts.map +1 -0
  48. package/dist/conformance/shapes.js +162 -0
  49. package/dist/conformance/shapes.js.map +1 -0
  50. package/dist/conformance/specs.d.ts +21 -0
  51. package/dist/conformance/specs.d.ts.map +1 -0
  52. package/dist/conformance/specs.js +306 -0
  53. package/dist/conformance/specs.js.map +1 -0
  54. package/dist/conformance/suite.d.ts +209 -0
  55. package/dist/conformance/suite.d.ts.map +1 -0
  56. package/dist/conformance/suite.js +1538 -0
  57. package/dist/conformance/suite.js.map +1 -0
  58. package/dist/conformance/unique.d.ts +7 -0
  59. package/dist/conformance/unique.d.ts.map +1 -0
  60. package/dist/conformance/unique.js +586 -0
  61. package/dist/conformance/unique.js.map +1 -0
  62. package/dist/conformance/worker.d.ts +3 -0
  63. package/dist/conformance/worker.d.ts.map +1 -0
  64. package/dist/conformance/worker.js +27 -0
  65. package/dist/conformance/worker.js.map +1 -0
  66. package/dist/index.d.ts +8 -3
  67. package/dist/index.js +5 -2
  68. package/dist/reference/defects.d.ts +71 -1
  69. package/dist/reference/defects.d.ts.map +1 -1
  70. package/dist/reference/defects.js +74 -8
  71. package/dist/reference/defects.js.map +1 -1
  72. package/dist/reference/dialect.d.ts +6 -4
  73. package/dist/reference/dialect.d.ts.map +1 -1
  74. package/dist/reference/dialect.js +1 -0
  75. package/dist/reference/dialect.js.map +1 -1
  76. package/dist/reference/http.d.ts +17 -25
  77. package/dist/reference/http.d.ts.map +1 -1
  78. package/dist/reference/http.js +574 -224
  79. package/dist/reference/http.js.map +1 -1
  80. package/dist/reference/listing.d.ts +51 -0
  81. package/dist/reference/listing.d.ts.map +1 -0
  82. package/dist/reference/listing.js +256 -0
  83. package/dist/reference/listing.js.map +1 -0
  84. package/dist/reference/model.d.ts +35 -1
  85. package/dist/reference/model.d.ts.map +1 -1
  86. package/dist/reference/model.js +42 -0
  87. package/dist/reference/model.js.map +1 -1
  88. package/dist/reference/query.d.ts +132 -43
  89. package/dist/reference/query.d.ts.map +1 -1
  90. package/dist/reference/query.js +397 -315
  91. package/dist/reference/query.js.map +1 -1
  92. package/dist/reference/shapes.d.ts +60 -0
  93. package/dist/reference/shapes.d.ts.map +1 -0
  94. package/dist/reference/shapes.js +142 -0
  95. package/dist/reference/shapes.js.map +1 -0
  96. package/dist/reference/spec.d.ts +9 -2
  97. package/dist/reference/spec.d.ts.map +1 -1
  98. package/dist/reference/spec.js +291 -71
  99. package/dist/reference/spec.js.map +1 -1
  100. package/dist/reference/store-api.d.ts +14 -43
  101. package/dist/reference/store-api.d.ts.map +1 -1
  102. package/dist/reference/store-api.js +8 -58
  103. package/dist/reference/store-api.js.map +1 -1
  104. package/dist/reference/stores/memory.d.ts +12 -15
  105. package/dist/reference/stores/memory.d.ts.map +1 -1
  106. package/dist/reference/stores/memory.js +22 -70
  107. package/dist/reference/stores/memory.js.map +1 -1
  108. package/dist/reference/stores/postgres.d.ts +11 -23
  109. package/dist/reference/stores/postgres.d.ts.map +1 -1
  110. package/dist/reference/stores/postgres.js +53 -334
  111. package/dist/reference/stores/postgres.js.map +1 -1
  112. package/dist/reference/stores/sql-compile.d.ts +36 -0
  113. package/dist/reference/stores/sql-compile.d.ts.map +1 -0
  114. package/dist/reference/stores/sql-compile.js +95 -0
  115. package/dist/reference/stores/sql-compile.js.map +1 -0
  116. package/dist/reference/stores/sqlite.d.ts +12 -27
  117. package/dist/reference/stores/sqlite.d.ts.map +1 -1
  118. package/dist/reference/stores/sqlite.js +54 -355
  119. package/dist/reference/stores/sqlite.js.map +1 -1
  120. package/dist/report/console.d.ts.map +1 -1
  121. package/dist/report/console.js +23 -9
  122. package/dist/report/console.js.map +1 -1
  123. package/dist/report/matrix.d.ts +2 -0
  124. package/dist/report/matrix.d.ts.map +1 -1
  125. package/dist/report/matrix.js +63 -10
  126. package/dist/report/matrix.js.map +1 -1
  127. package/dist/report/render.d.ts +10 -1
  128. package/dist/report/render.d.ts.map +1 -1
  129. package/dist/report/render.js +75 -13
  130. package/dist/report/render.js.map +1 -1
  131. package/dist/runtime/async.d.ts +16 -3
  132. package/dist/runtime/async.d.ts.map +1 -1
  133. package/dist/runtime/async.js +24 -19
  134. package/dist/runtime/async.js.map +1 -1
  135. package/dist/runtime/auth.d.ts +8 -9
  136. package/dist/runtime/auth.d.ts.map +1 -1
  137. package/dist/runtime/auth.js +60 -62
  138. package/dist/runtime/auth.js.map +1 -1
  139. package/dist/runtime/body.d.ts +15 -3
  140. package/dist/runtime/body.d.ts.map +1 -1
  141. package/dist/runtime/body.js +61 -12
  142. package/dist/runtime/body.js.map +1 -1
  143. package/dist/runtime/check-costs.d.ts +15 -0
  144. package/dist/runtime/check-costs.d.ts.map +1 -0
  145. package/dist/runtime/check-costs.js +114 -0
  146. package/dist/runtime/check-costs.js.map +1 -0
  147. package/dist/runtime/check-ids.d.ts +15 -0
  148. package/dist/runtime/check-ids.d.ts.map +1 -0
  149. package/dist/runtime/check-ids.js +140 -0
  150. package/dist/runtime/check-ids.js.map +1 -0
  151. package/dist/runtime/checks.d.ts +88 -20
  152. package/dist/runtime/checks.d.ts.map +1 -1
  153. package/dist/runtime/checks.js +3288 -1947
  154. package/dist/runtime/checks.js.map +1 -1
  155. package/dist/runtime/client.d.ts +112 -0
  156. package/dist/runtime/client.d.ts.map +1 -1
  157. package/dist/runtime/client.js +271 -39
  158. package/dist/runtime/client.js.map +1 -1
  159. package/dist/runtime/cookies.d.ts +16 -2
  160. package/dist/runtime/cookies.d.ts.map +1 -1
  161. package/dist/runtime/cookies.js +83 -22
  162. package/dist/runtime/cookies.js.map +1 -1
  163. package/dist/runtime/exchanges.d.ts +4 -5
  164. package/dist/runtime/exchanges.d.ts.map +1 -1
  165. package/dist/runtime/exchanges.js +33 -55
  166. package/dist/runtime/exchanges.js.map +1 -1
  167. package/dist/runtime/exit.d.ts +40 -0
  168. package/dist/runtime/exit.d.ts.map +1 -0
  169. package/dist/runtime/exit.js +48 -0
  170. package/dist/runtime/exit.js.map +1 -0
  171. package/dist/runtime/feature-gate.d.ts +0 -9
  172. package/dist/runtime/feature-gate.d.ts.map +1 -1
  173. package/dist/runtime/feature-gate.js +0 -21
  174. package/dist/runtime/feature-gate.js.map +1 -1
  175. package/dist/runtime/finding.d.ts +49 -8
  176. package/dist/runtime/finding.d.ts.map +1 -1
  177. package/dist/runtime/finding.js +51 -8
  178. package/dist/runtime/finding.js.map +1 -1
  179. package/dist/runtime/fixture.d.ts +35 -28
  180. package/dist/runtime/fixture.d.ts.map +1 -1
  181. package/dist/runtime/fixture.js +92 -731
  182. package/dist/runtime/fixture.js.map +1 -1
  183. package/dist/runtime/generate.d.ts +63 -0
  184. package/dist/runtime/generate.d.ts.map +1 -0
  185. package/dist/runtime/generate.js +635 -0
  186. package/dist/runtime/generate.js.map +1 -0
  187. package/dist/runtime/headers.d.ts +6 -0
  188. package/dist/runtime/headers.d.ts.map +1 -0
  189. package/dist/runtime/headers.js +16 -0
  190. package/dist/runtime/headers.js.map +1 -0
  191. package/dist/runtime/path.d.ts +7 -0
  192. package/dist/runtime/path.d.ts.map +1 -0
  193. package/dist/runtime/path.js +44 -0
  194. package/dist/runtime/path.js.map +1 -0
  195. package/dist/runtime/payloads.d.ts +2 -0
  196. package/dist/runtime/payloads.d.ts.map +1 -1
  197. package/dist/runtime/payloads.js +2 -1
  198. package/dist/runtime/payloads.js.map +1 -1
  199. package/dist/runtime/rate-limit.d.ts +6 -4
  200. package/dist/runtime/rate-limit.d.ts.map +1 -1
  201. package/dist/runtime/rate-limit.js +22 -33
  202. package/dist/runtime/rate-limit.js.map +1 -1
  203. package/dist/runtime/redact.d.ts +24 -0
  204. package/dist/runtime/redact.d.ts.map +1 -0
  205. package/dist/runtime/redact.js +98 -0
  206. package/dist/runtime/redact.js.map +1 -0
  207. package/dist/runtime/run.d.ts +34 -2
  208. package/dist/runtime/run.d.ts.map +1 -1
  209. package/dist/runtime/run.js +374 -138
  210. package/dist/runtime/run.js.map +1 -1
  211. package/dist/runtime/runs.d.ts +5 -0
  212. package/dist/runtime/runs.d.ts.map +1 -1
  213. package/dist/runtime/runs.js +7 -1
  214. package/dist/runtime/runs.js.map +1 -1
  215. package/dist/runtime/teardown.d.ts +17 -4
  216. package/dist/runtime/teardown.d.ts.map +1 -1
  217. package/dist/runtime/teardown.js +49 -16
  218. package/dist/runtime/teardown.js.map +1 -1
  219. package/dist/runtime/transcript.d.ts +34 -2
  220. package/dist/runtime/transcript.d.ts.map +1 -1
  221. package/dist/runtime/transcript.js +119 -24
  222. package/dist/runtime/transcript.js.map +1 -1
  223. package/dist/runtime/unique.d.ts +2 -11
  224. package/dist/runtime/unique.d.ts.map +1 -1
  225. package/dist/runtime/unique.js +27 -53
  226. package/dist/runtime/unique.js.map +1 -1
  227. package/dist/runtime/validate.d.ts +13 -2
  228. package/dist/runtime/validate.d.ts.map +1 -1
  229. package/dist/runtime/validate.js +51 -31
  230. package/dist/runtime/validate.js.map +1 -1
  231. package/dist/runtime/wait.d.ts +2 -1
  232. package/dist/runtime/wait.d.ts.map +1 -1
  233. package/dist/runtime/wait.js +2 -36
  234. package/dist/runtime/wait.js.map +1 -1
  235. package/dist/runtime/world.d.ts +24 -1
  236. package/dist/runtime/world.d.ts.map +1 -1
  237. package/dist/runtime/world.js +101 -26
  238. package/dist/runtime/world.js.map +1 -1
  239. package/dist/spec/collection.d.ts +8 -2
  240. package/dist/spec/collection.d.ts.map +1 -1
  241. package/dist/spec/collection.js +47 -7
  242. package/dist/spec/collection.js.map +1 -1
  243. package/dist/spec/extensions.d.ts +11 -1
  244. package/dist/spec/extensions.d.ts.map +1 -1
  245. package/dist/spec/extensions.js +10 -2
  246. package/dist/spec/extensions.js.map +1 -1
  247. package/dist/spec/graph.d.ts +46 -0
  248. package/dist/spec/graph.d.ts.map +1 -1
  249. package/dist/spec/graph.js +175 -11
  250. package/dist/spec/graph.js.map +1 -1
  251. package/dist/spec/load.d.ts +25 -5
  252. package/dist/spec/load.d.ts.map +1 -1
  253. package/dist/spec/load.js +160 -59
  254. package/dist/spec/load.js.map +1 -1
  255. package/dist/spec/query-capabilities.d.ts +4 -0
  256. package/dist/spec/query-capabilities.d.ts.map +1 -1
  257. package/dist/spec/query-capabilities.js +6 -0
  258. package/dist/spec/query-capabilities.js.map +1 -1
  259. package/dist/spec/schema.d.ts +20 -0
  260. package/dist/spec/schema.d.ts.map +1 -0
  261. package/dist/spec/schema.js +118 -0
  262. package/dist/spec/schema.js.map +1 -0
  263. package/dist/spec/tag-schema.d.ts +12 -0
  264. package/dist/spec/tag-schema.d.ts.map +1 -0
  265. package/dist/spec/tag-schema.js +144 -0
  266. package/dist/spec/tag-schema.js.map +1 -0
  267. package/dist/spec/types.js +17 -1
  268. package/dist/spec/types.js.map +1 -1
  269. package/docs/api.md +59 -0
  270. package/docs/assumptions.md +99 -0
  271. package/docs/checks.md +183 -0
  272. package/docs/commands.md +214 -0
  273. package/docs/configuration.md +650 -0
  274. package/docs/model.md +184 -0
  275. package/docs/reference-defects.md +94 -0
  276. package/docs/reports.md +211 -0
  277. package/docs/tags.md +403 -0
  278. package/package.json +3 -1
@@ -4,51 +4,73 @@
4
4
  * Present because Postgres disagrees with SQLite in exactly the places API contracts are
5
5
  * ambiguous, which makes the pair a differential oracle rather than a redundant one:
6
6
  *
7
- * - `ORDER BY x ASC` puts NULLs **last**; SQLite puts them first.
8
- * - Types are enforced, so bad input is rejected rather than silently coerced.
7
+ * - Types are enforced, so a value is stored as its declared type, not by affinity.
9
8
  * - Collation is locale-aware, so ordering of unicode and mixed case is a real decision.
10
- * - `LIKE` is case-sensitive and `ILIKE` genuinely differs — on SQLite the two are
11
- * indistinguishable for ASCII, which makes an ilike check structurally untestable there.
9
+ * - `LIKE` and `ILIKE` are genuinely different operators rather than one with a pragma.
12
10
  *
13
11
  * Each server instance gets its own scratch database, dropped on close, so runs never collide.
14
12
  */
15
13
  import postgres from "postgres";
16
- import { ENTITIES, OVERCLAIMED_FIELD, fieldsWhere } from "../model.js";
17
- import { decodeCursor, encodeCursor, project, SqlError, splitTopLevel, stripParens, } from "../store-api.js";
14
+ import { ENTITIES } from "../model.js";
15
+ import { compileOrder, compileWhere, likeText } from "./sql-compile.js";
18
16
  const PG_TYPE = {
19
17
  boolean: "boolean",
20
18
  integer: "bigint",
21
19
  number: "double precision",
20
+ array: "text",
21
+ object: "text",
22
22
  string: "text",
23
23
  };
24
24
  function ident(name) {
25
25
  return `"${name.replace(/"/g, '""')}"`;
26
26
  }
27
- function countPgTerms(expression) {
28
- const group = /^(and|or)\((.*)\)$/s.exec(expression.trim());
29
- if (group?.[2] !== undefined) {
30
- return splitTopLevel(group[2]).reduce((sum, part) => sum + countPgTerms(part), 0);
31
- }
32
- return 1;
33
- }
34
27
  export class PgStore {
35
28
  sql;
36
29
  admin;
37
30
  dbName;
38
31
  defects;
39
- sequence = 0;
40
- constructor(sql, admin, dbName, defects) {
32
+ entities;
33
+ flavour;
34
+ constructor(sql, admin, dbName, defects, entities) {
41
35
  this.sql = sql;
42
36
  this.admin = admin;
43
37
  this.dbName = dbName;
44
38
  this.defects = defects;
39
+ this.entities = entities;
40
+ this.flavour = {
41
+ binary: (expr) => `${expr} COLLATE "C"`,
42
+ bind: (args, value) => {
43
+ args.push(value);
44
+ return `$${args.length}`;
45
+ },
46
+ bool: (value) => value,
47
+ /* Reads name the declared column. Under COLUMN_NAME_MISMATCH DDL named it otherwise,
48
+ * and Postgres refuses the read outright where SQLite might silently answer. */
49
+ column: (_entity, field) => ident(field),
50
+ hasElement: (expr, element, args) => {
51
+ args.push(element);
52
+ return `jsonb_exists(${expr}::jsonb, $${args.length})`;
53
+ },
54
+ like: (expr, segments, insensitive, args) => {
55
+ args.push(likeText(segments));
56
+ return `${expr} ${insensitive ? "ILIKE" : "LIKE"} $${args.length} ESCAPE '\\'`;
57
+ },
58
+ position: (expr, needle, caseSensitive, args) => {
59
+ args.push(needle);
60
+ return caseSensitive
61
+ ? `strpos(${expr}, $${args.length}::text)`
62
+ : `strpos(lower(${expr}), lower($${args.length}::text))`;
63
+ },
64
+ random: "random()",
65
+ toText: (expr) => `${expr}::text`,
66
+ };
45
67
  }
46
- static async create(defects) {
68
+ static async create(defects, entities = ENTITIES) {
47
69
  const dbName = `oat_ref_${process.pid}_${Date.now().toString(36)}${Math.floor(Math.random() * 1e6).toString(36)}`;
48
70
  const admin = postgres({ database: "postgres", max: 1, onnotice: () => { } });
49
71
  await admin.unsafe(`CREATE DATABASE ${ident(dbName)}`);
50
72
  const sql = postgres({ database: dbName, max: 4, onnotice: () => { } });
51
- const store = new PgStore(sql, admin, dbName, defects);
73
+ const store = new PgStore(sql, admin, dbName, defects, entities);
52
74
  await store.migrate();
53
75
  return store;
54
76
  }
@@ -64,13 +86,7 @@ export class PgStore {
64
86
  }
65
87
  }
66
88
  async migrate() {
67
- /* A case-insensitive collation that genuinely differs from the database default.
68
- *
69
- * The scratch database inherits the cluster's locale, which here is C — so `COLLATE "C"`
70
- * would be a no-op and the collation defect would be invisible. Declaring an explicit ICU
71
- * collation makes the disagreement real regardless of how the cluster was initialised. */
72
- await this.sql.unsafe(`CREATE COLLATION oat_ci (provider = icu, locale = 'und-u-ks-level2', deterministic = false)`);
73
- for (const entity of ENTITIES) {
89
+ for (const entity of this.entities) {
74
90
  const columns = entity.fields.map((field) => {
75
91
  const notNull = field.required === true ? " NOT NULL" : "";
76
92
  return `${ident(this.physical(field.name))} ${PG_TYPE[field.type]}${notNull}`;
@@ -99,19 +115,12 @@ export class PgStore {
99
115
  })
100
116
  .join(", ");
101
117
  }
102
- nextId(prefix) {
103
- this.sequence += 1;
104
- return `${prefix}_${String(this.sequence).padStart(6, "0")}`;
105
- }
106
- now() {
107
- return 1_700_000_000_000 + this.sequence * 1000;
108
- }
109
118
  async insert(entity, record) {
110
119
  const names = entity.fields.map((f) => f.name).filter((n) => record[n] !== undefined);
111
120
  const columns = names.map((n) => ident(this.physical(n))).join(", ");
112
121
  const holes = names.map((_, i) => `$${i + 1}`).join(", ");
113
122
  await this.sql.unsafe(`INSERT INTO ${ident(entity.plural)} (${columns}) VALUES (${holes})`, names.map((n) => toPg(record[n])));
114
- return (await this.byId(entity, String(record[entity.identity]))) ?? record;
123
+ return (await this.byId(entity, record[entity.identity])) ?? record;
115
124
  }
116
125
  async byId(entity, id) {
117
126
  const rows = await this.sql.unsafe(`SELECT ${this.selectList(entity)} FROM ${ident(entity.plural)} WHERE ${ident(this.physical(entity.identity))} = $1`, [id]);
@@ -119,8 +128,6 @@ export class PgStore {
119
128
  return row === undefined ? null : this.decode(entity, row);
120
129
  }
121
130
  async update(entity, id, patch) {
122
- if (this.defects.has("CONCURRENT_WRITE_LOST"))
123
- return this.readModifyWrite(entity, id, patch);
124
131
  const names = Object.keys(patch).filter((n) => entity.fields.some((f) => f.name === n));
125
132
  if (names.length > 0) {
126
133
  const assignments = names.map((n, i) => `${ident(this.physical(n))} = $${i + 1}`).join(", ");
@@ -128,29 +135,18 @@ export class PgStore {
128
135
  }
129
136
  return this.byId(entity, id);
130
137
  }
131
- /**
132
- * Reads the row, yields, then writes every column back — the `save(entity)` pattern.
133
- *
134
- * Under concurrency the second writer reinstates whatever it read before the first writer
135
- * committed, so a patch to a different field is silently reverted. The yield is what makes
136
- * the window observable rather than dependent on scheduler luck.
137
- */
138
- async readModifyWrite(entity, id, patch) {
139
- const current = await this.byId(entity, id);
140
- if (current === null)
141
- return null;
142
- await new Promise((resolve) => setTimeout(resolve, 15));
143
- const merged = { ...current, ...patch };
144
- const names = entity.fields.map((f) => f.name);
145
- const assignments = names.map((n, i) => `${ident(this.physical(n))} = $${i + 1}`).join(", ");
146
- await this.sql.unsafe(`UPDATE ${ident(entity.plural)} SET ${assignments} WHERE ${ident(this.physical(entity.identity))} = $${names.length + 1}`, [...names.map((n) => toPg(merged[n])), id]);
147
- return this.byId(entity, id);
148
- }
149
138
  async remove(entity, id) {
150
139
  await this.sql.unsafe(`DELETE FROM ${ident(entity.plural)} WHERE ${ident(this.physical(entity.identity))} = $1`, [
151
140
  id,
152
141
  ]);
153
142
  }
143
+ async select(entity, plan) {
144
+ const args = [];
145
+ const where = compileWhere(plan.where, entity, this.flavour, args);
146
+ const order = compileOrder(plan.order, plan.collation, plan.shuffleTies, entity, this.flavour);
147
+ const rows = (await this.sql.unsafe(`SELECT ${this.selectList(entity)} FROM ${ident(entity.plural)} WHERE ${where}${order}`, args));
148
+ return rows.map((row) => this.decode(entity, row));
149
+ }
154
150
  /**
155
151
  * Restores declared shapes. `bigint` arrives as a string from the wire protocol and would
156
152
  * fail its own response schema, and a NULL column must read back as null rather than absent.
@@ -164,279 +160,16 @@ export class PgStore {
164
160
  continue;
165
161
  }
166
162
  out[field.name] =
167
- field.type === "integer"
163
+ field.type === "integer" || field.type === "number"
168
164
  ? Number(raw)
169
- : field.type === "number"
170
- ? Number(raw)
171
- : field.type === "boolean"
172
- ? raw === true
165
+ : field.type === "boolean"
166
+ ? raw === true
167
+ : (field.type === "object" || field.type === "array") && typeof raw === "string"
168
+ ? JSON.parse(raw)
173
169
  : raw;
174
170
  }
175
171
  return out;
176
172
  }
177
- async query(entity, scope, params, options) {
178
- const where = [];
179
- const args = [];
180
- const hole = () => `$${args.length + 1}`;
181
- const scoped = !(this.defects.has("TENANT_LEAK_VIA_FILTER") && params.filter !== undefined);
182
- for (const parent of scoped ? entity.parents : []) {
183
- const value = scope[parent];
184
- if (value === undefined)
185
- continue;
186
- if (!entity.fields.some((f) => f.name === parent))
187
- continue;
188
- where.push(`${ident(this.physical(parent))} = ${hole()}`);
189
- args.push(value);
190
- }
191
- const soft = options.softDeleteField;
192
- if (soft !== undefined && !this.defects.has("SOFT_DELETE_LEAK")) {
193
- if (params.filter?.includes(soft) !== true) {
194
- where.push(`${ident(this.physical(soft))} IS NULL`);
195
- }
196
- }
197
- if (params.filter !== undefined && params.filter !== "") {
198
- where.push(this.compileFilter(params.filter, entity, args));
199
- }
200
- if (params.q !== undefined && params.q !== "" && !this.defects.has("SEARCH_IGNORED")) {
201
- const searchable = fieldsWhere(entity, "searchable");
202
- const tokens = params.q
203
- .split(/\s+/)
204
- .map((token) => token.trim())
205
- .filter((token) => token.length > 0);
206
- if (searchable.length > 0) {
207
- for (const token of tokens) {
208
- const clauses = searchable.map((f) => {
209
- args.push(`%${escapeLike(token)}%`);
210
- return `${ident(this.physical(f))}::text ILIKE $${args.length} ESCAPE '\\'`;
211
- });
212
- where.push(`(${clauses.join(" OR ")})`);
213
- }
214
- }
215
- }
216
- const dropNulls = [];
217
- const orderSql = this.compileOrder(params.order, entity, dropNulls);
218
- for (const field of dropNulls)
219
- where.push(`${ident(this.physical(field))} IS NOT NULL`);
220
- const whereSql = where.length > 0 ? ` WHERE ${where.join(" AND ")}` : "";
221
- const countWhere = this.defects.has("COUNT_IGNORES_FILTER") ? "" : whereSql;
222
- const countArgs = this.defects.has("COUNT_IGNORES_FILTER") ? [] : args;
223
- const countRows = (await this.sql.unsafe(`SELECT COUNT(*)::bigint AS n FROM ${ident(entity.plural)}${countWhere}`, countArgs));
224
- const total = Number(countRows[0]?.n ?? 0);
225
- const requested = params.limit ?? entity.defaultLimit;
226
- const limit = this.defects.has("LIMIT_EXCEEDS_MAX") ? requested : Math.min(requested, entity.maxLimit);
227
- let offset;
228
- let page;
229
- if (params.cursor !== undefined && params.cursor !== "") {
230
- const afterId = decodeCursor(params.cursor);
231
- /* The cursor boundary must be resolved under exactly the listing's ordering. Under the
232
- * defect it is resolved with a different collation, so the index found here is not the
233
- * index the listing would have produced and the page boundary lands elsewhere. */
234
- /* Collation "C" against the listing's locale default: the two disagree on case and on
235
- * anything non-ASCII, so the boundary resolves to a different row. */
236
- const cursorOrderSql = this.defects.has("COLLATION_INCONSISTENT")
237
- ? orderSql.replace(/(".*?")( (?:ASC|DESC))/g, "$1 COLLATE oat_ci$2")
238
- : orderSql;
239
- const ordered = (await this.sql.unsafe(`SELECT ${ident(this.physical(entity.identity))} AS id FROM ${ident(entity.plural)}${whereSql}${cursorOrderSql}`, args));
240
- const index = ordered.findIndex((r) => String(r.id) === afterId);
241
- offset = index === -1 ? 0 : index + (this.defects.has("CURSOR_DRIFT") ? 0 : 1);
242
- page = null;
243
- }
244
- else {
245
- const requestedPage = Math.max(params.page ?? 1, 1);
246
- offset = (requestedPage - 1) * limit + (this.defects.has("OFF_BY_ONE_PAGE") && requestedPage > 1 ? 1 : 0);
247
- page = requestedPage;
248
- }
249
- const limitSql = this.defects.has("LIMIT_IGNORED") ? "ALL" : String(limit);
250
- const rows = (await this.sql.unsafe(`SELECT ${this.selectList(entity)} FROM ${ident(entity.plural)}${whereSql}${orderSql} LIMIT ${limitSql} OFFSET ${offset}`, args));
251
- const effective = this.defects.has("EMPTY_RESULT_RETURNS_ALL") && rows.length === 0 && where.length > 0
252
- ? (await this.sql.unsafe(`SELECT ${this.selectList(entity)} FROM ${ident(entity.plural)}${orderSql} LIMIT ${limitSql} OFFSET ${offset}`, []))
253
- : rows;
254
- const decoded = effective.map((row) => this.decode(entity, row));
255
- const transformed = options.transform === undefined ? decoded : decoded.map((r) => options.transform?.(r) ?? r);
256
- const last = transformed.at(-1);
257
- const hasMore = this.defects.has("HASMORE_ALWAYS_FALSE") ? false : offset + decoded.length < total;
258
- return {
259
- count: this.defects.has("COUNT_ALWAYS_ZERO") ? 0 : total,
260
- hasMore,
261
- items: transformed.map((row) => project(row, params.select, this.defects.has("SELECT_IGNORED"), this.defects.has("SPEC_OVERCLAIMS_SELECTABLE") ? [OVERCLAIMED_FIELD] : [], {
262
- dropRequested: this.defects.has("SELECT_FIELD_MISSING"),
263
- identity: entity.identity,
264
- ...(entity.filterCatalog?.selectUnknown === undefined
265
- ? {}
266
- : { selectUnknown: entity.filterCatalog.selectUnknown }),
267
- })),
268
- limit,
269
- nextCursor: hasMore && last !== undefined ? encodeCursor(String(last[entity.identity])) : null,
270
- page,
271
- };
272
- }
273
- compileFilter(expression, entity, args, top = true) {
274
- if (top && entity.filterCatalog?.maxFilterConditions !== undefined) {
275
- const count = countPgTerms(expression);
276
- if (count > entity.filterCatalog.maxFilterConditions) {
277
- throw new SqlError("invalid_filter", `more than ${entity.filterCatalog.maxFilterConditions} filter conditions`);
278
- }
279
- }
280
- const trimmed = expression.trim();
281
- const hole = (value) => {
282
- args.push(value);
283
- return `$${args.length}`;
284
- };
285
- const group = /^(and|or)\((.*)\)$/s.exec(trimmed);
286
- if (group?.[1] && group[2] !== undefined) {
287
- const parts = splitTopLevel(group[2]).map((p) => this.compileFilter(p, entity, args, false));
288
- if (parts.length === 0)
289
- throw new SqlError("invalid_filter", "empty filter group");
290
- const effective = this.defects.has("FILTER_GROUP_COMBINATOR_SWAPPED")
291
- ? group[1] === "and"
292
- ? "or"
293
- : "and"
294
- : group[1];
295
- return `(${parts.join(effective === "and" ? " AND " : " OR ")})`;
296
- }
297
- const segments = trimmed.split(".");
298
- if (segments.length < 3) {
299
- throw new SqlError("invalid_filter", `malformed filter term "${trimmed}"`);
300
- }
301
- const [field, rawOp] = segments;
302
- const op = rawOp === "ne" ? "neq" : rawOp;
303
- const raw = segments.slice(2).join(".");
304
- const allowed = entity.filterCatalog?.opsByField?.[field];
305
- if (allowed !== undefined && rawOp !== undefined && !allowed.includes(rawOp) && !allowed.includes(op)) {
306
- if (this.defects.has("FILTER_ILLEGAL_OP_IGNORED"))
307
- return "TRUE";
308
- throw new SqlError("invalid_filter", `unknown operator "${rawOp}"`);
309
- }
310
- /* Under the overclaim defect the backend refuses a field the document still declares
311
- * filterable — the backend is not wrong to refuse, the document is wrong to promise. */
312
- const filterable = this.defects.has("SPEC_OVERCLAIMS_FILTERABLE")
313
- ? fieldsWhere(entity, "filterable").filter((f) => f !== OVERCLAIMED_FIELD)
314
- : fieldsWhere(entity, "filterable");
315
- if (!filterable.includes(field)) {
316
- if (this.defects.has("FILTER_IGNORED"))
317
- return "TRUE";
318
- throw new SqlError("invalid_filter", `field "${field}" is not filterable`);
319
- }
320
- const declared = entity.fields.find((f) => f.name === field);
321
- const numeric = declared?.type === "integer" || declared?.type === "number";
322
- /* Compare as text unless the column is genuinely numeric: Postgres refuses to compare a
323
- * bigint against an arbitrary string, and the grammar's values arrive untyped. Under the
324
- * defect even numeric columns go through text, which is what makes `amount > 9` miss 10. */
325
- const asText = !numeric || this.defects.has("NUMERIC_COMPARED_AS_TEXT");
326
- const ref = ident(this.physical(field));
327
- const cast = asText ? "::text" : "";
328
- switch (op) {
329
- case "eq":
330
- if (this.defects.has("FILTER_EQ_NOT_APPLIED"))
331
- return "TRUE";
332
- return `${ref}${cast} = ${hole(coerce(raw, asText ? undefined : declared))}`;
333
- case "neq":
334
- /* NULL must be re-admitted explicitly: `col <> x` is NULL, not true, for NULL rows,
335
- * so they silently vanish without the IS NULL branch. */
336
- return this.defects.has("NEQ_DROPS_NULLS")
337
- ? `${ref}${cast} <> ${hole(coerce(raw, asText ? undefined : declared))}`
338
- : `(${ref}${cast} <> ${hole(coerce(raw, asText ? undefined : declared))} OR ${ref} IS NULL)`;
339
- case "gt":
340
- return `${ref}${cast} > ${hole(coerce(raw, asText ? undefined : declared))}`;
341
- case "gte":
342
- if (this.defects.has("FILTER_GTE_IS_GT")) {
343
- return `${ref}${cast} > ${hole(coerce(raw, asText ? undefined : declared))}`;
344
- }
345
- return `${ref}${cast} >= ${hole(coerce(raw, asText ? undefined : declared))}`;
346
- case "lt":
347
- return `${ref}${cast} < ${hole(coerce(raw, asText ? undefined : declared))}`;
348
- case "lte":
349
- return `${ref}${cast} <= ${hole(coerce(raw, asText ? undefined : declared))}`;
350
- case "in":
351
- case "nin": {
352
- const members = stripParens(raw)
353
- .split(",")
354
- .map((s) => s.trim())
355
- .filter((s) => s.length > 0)
356
- .map((s) => coerce(s, asText ? undefined : declared));
357
- if (members.length === 0) {
358
- if (entity.filterCatalog?.emptyIn === "reject")
359
- throw new SqlError("invalid_filter", "empty in()");
360
- return op === "in" ? "FALSE" : "TRUE";
361
- }
362
- if (entity.filterCatalog?.maxInValues !== undefined && members.length > entity.filterCatalog.maxInValues) {
363
- throw new SqlError("invalid_filter", "in() exceeds maxInValues");
364
- }
365
- const effective = this.defects.has("FILTER_IN_FIRST_ONLY") && op === "in" && members[0] !== undefined ? [members[0]] : members;
366
- const holes = effective.map((m) => hole(m)).join(", ");
367
- return op === "in" ? `${ref}${cast} IN (${holes})` : `${ref}${cast} NOT IN (${holes})`;
368
- }
369
- case "is":
370
- if (raw === "null") {
371
- if (this.defects.has("FILTER_IS_NULL_MATCHES_ALL"))
372
- return "TRUE";
373
- return `${ref} IS NULL`;
374
- }
375
- if (raw === "notnull" || raw === "not.null")
376
- return `${ref} IS NOT NULL`;
377
- if (raw === "true")
378
- return `${ref} IS TRUE`;
379
- if (raw === "false")
380
- return `${ref} IS FALSE`;
381
- throw new SqlError("invalid_filter", `is.${raw} is not a recognised predicate`);
382
- case "contains":
383
- return `${ref}::text LIKE ${hole("%" + String(coerce(raw, undefined)) + "%")} ESCAPE '\\'`;
384
- case "like":
385
- case "ilike": {
386
- const pattern = this.defects.has("LIKE_UNESCAPED")
387
- ? raw.replace(/\*/g, "%")
388
- : escapeLike(raw).replace(/\*/g, "%");
389
- /* Postgres distinguishes these; SQLite cannot for ASCII. Honouring the distinction
390
- * is only meaningful on an engine that has it. */
391
- const operator = op === "ilike" && !this.defects.has("FILTER_ILIKE_IS_LIKE") ? "ILIKE" : "LIKE";
392
- return `${ref}${cast} ${operator} ${hole(pattern)} ESCAPE '\\'`;
393
- }
394
- default:
395
- throw new SqlError("invalid_filter", `unknown operator "${op}"`);
396
- }
397
- }
398
- compileOrder(expression, entity, dropNulls) {
399
- const terms = [];
400
- if (expression !== undefined && expression !== "") {
401
- const rawTerms = splitTopLevel(expression);
402
- const used = this.defects.has("SORT_MULTI_KEY_IGNORED") ? rawTerms.slice(0, 1) : rawTerms;
403
- for (const raw of used) {
404
- const [field, ...modifiers] = raw.split(".");
405
- /* Under the overclaim defect the backend refuses a field the document still declares
406
- * sortable — the backend is not wrong to refuse, the document is wrong to promise. */
407
- const sortable = this.defects.has("SPEC_OVERCLAIMS_SORTABLE")
408
- ? fieldsWhere(entity, "sortable").filter((f) => f !== OVERCLAIMED_FIELD)
409
- : fieldsWhere(entity, "sortable");
410
- if (field === undefined || !sortable.includes(field)) {
411
- throw new SqlError("invalid_order", `field "${field ?? ""}" is not sortable`);
412
- }
413
- const descending = modifiers.includes("desc");
414
- const nullsFirst = modifiers.includes("nullsfirst")
415
- ? true
416
- : modifiers.includes("nullslast")
417
- ? false
418
- : descending;
419
- const declared = entity.fields.find((f) => f.name === field);
420
- const numeric = declared?.type === "integer" || declared?.type === "number";
421
- const asText = numeric && (this.defects.has("NUMERIC_COMPARED_AS_TEXT") || this.defects.has("SORT_NUMERIC_AS_TEXT"));
422
- const ref = asText ? `${ident(this.physical(field))}::text` : ident(this.physical(field));
423
- terms.push(`${ref} ${descending ? "DESC" : "ASC"} NULLS ${nullsFirst ? "FIRST" : "LAST"}`);
424
- if (descending && this.defects.has("SORT_DESC_DROPS_NULLS"))
425
- dropNulls.push(field);
426
- }
427
- }
428
- if (this.defects.has("ORDER_IGNORED")) {
429
- dropNulls.length = 0;
430
- return "";
431
- }
432
- if (this.defects.has("UNSTABLE_SORT")) {
433
- terms.push("random()");
434
- }
435
- else {
436
- terms.push(`${ident(this.physical(entity.identity))} ASC`);
437
- }
438
- return terms.length > 0 ? ` ORDER BY ${terms.join(", ")}` : "";
439
- }
440
173
  }
441
174
  function toPg(value) {
442
175
  if (value === undefined)
@@ -445,18 +178,4 @@ function toPg(value) {
445
178
  return JSON.stringify(value);
446
179
  return value;
447
180
  }
448
- function coerce(raw, field) {
449
- if (raw === "null")
450
- return null;
451
- if (field?.type === "integer" || field?.type === "number") {
452
- const n = Number(raw);
453
- if (Number.isNaN(n))
454
- throw new SqlError("invalid_filter", `"${raw}" is not a number`);
455
- return n;
456
- }
457
- return raw;
458
- }
459
- function escapeLike(value) {
460
- return value.replace(/[\\%_]/g, (ch) => `\\${ch}`);
461
- }
462
181
  //# sourceMappingURL=postgres.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../../src/reference/stores/postgres.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,QAAQ,MAAM,UAAU,CAAA;AAE/B,OAAO,EAAE,QAAQ,EAAiC,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACrG,OAAO,EACN,YAAY,EACZ,YAAY,EACZ,OAAO,EAKP,QAAQ,EACR,aAAa,EACb,WAAW,GAEX,MAAM,iBAAiB,CAAA;AAOxB,MAAM,OAAO,GAAqC;IACjD,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,QAAQ;IACjB,MAAM,EAAE,kBAAkB;IAC1B,MAAM,EAAE,MAAM;CACd,CAAA;AAED,SAAS,KAAK,CAAC,IAAY;IAC1B,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAA;AACvC,CAAC;AAED,SAAS,YAAY,CAAC,UAAkB;IACvC,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAA;IAC3D,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;IAClF,CAAC;IACD,OAAO,CAAC,CAAA;AACT,CAAC;AAED,MAAM,OAAO,OAAO;IAID;IACA;IACA;IACA;IANV,QAAQ,GAAG,CAAC,CAAA;IAEpB,YACkB,GAAQ,EACR,KAAU,EACV,MAAc,EACd,OAAkB;QAHlB,QAAG,GAAH,GAAG,CAAK;QACR,UAAK,GAAL,KAAK,CAAK;QACV,WAAM,GAAN,MAAM,CAAQ;QACd,YAAO,GAAP,OAAO,CAAW;IACjC,CAAC;IAEJ,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAkB;QACrC,MAAM,MAAM,GAAG,WAAW,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAA;QACjH,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC,CAAA;QAC5E,MAAM,KAAK,CAAC,MAAM,CAAC,mBAAmB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACtD,MAAM,GAAG,GAAG,QAAQ,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC,CAAA;QACtE,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;QACtD,MAAM,KAAK,CAAC,OAAO,EAAE,CAAA;QACrB,OAAO,KAAK,CAAA;IACb,CAAC;IAED,KAAK,CAAC,KAAK;QACV,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;QAClC;8FACsF;QACtF,IAAI,CAAC;YACJ,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,2BAA2B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;QACtF,CAAC;gBAAS,CAAC;YACV,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;QACrC,CAAC;IACF,CAAC;IAEO,KAAK,CAAC,OAAO;QACpB;;;;kGAI0F;QAC1F,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,6FAA6F,CAAC,CAAA;QACpH,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAA;gBAC1D,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,EAAE,CAAA;YAC9E,CAAC,CAAC,CAAA;YACF,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CACpB,gBAAgB,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CACtH,CAAA;QACF,CAAC;IACF,CAAC;IAED,6FAA6F;IACrF,QAAQ,CAAC,IAAY;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAA;IAC/F,CAAC;IAED;;;;;;OAMG;IACK,UAAU,CAAC,MAAiB;QACnC,OAAO,MAAM,CAAC,MAAM;aAClB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACV,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpE,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAA;YAC9C,CAAC;YACD,OAAO,IAAI,CAAC,CAAC,IAAI,cAAc,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAA;QAC/C,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAA;IACb,CAAC;IAED,MAAM,CAAC,MAAc;QACpB,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAA;QAClB,OAAO,GAAG,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAA;IAC7D,CAAC;IAED,GAAG;QACF,OAAO,iBAAiB,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;IAChD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAiB,EAAE,MAAW;QAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAA;QACrF,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACpE,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzD,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CACpB,eAAe,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,OAAO,aAAa,KAAK,GAAG,EACpE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CACjC,CAAA;QACD,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAA;IAC5E,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAiB,EAAE,EAAU;QACvC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CACjC,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,EACpH,CAAC,EAAE,CAAC,CACJ,CAAA;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAoB,CAAA;QACtC,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC3D,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAiB,EAAE,EAAU,EAAE,KAAU;QACrD,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;YAAE,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,CAAC,CAAA;QAC7F,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAA;QACvF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC5F,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CACpB,UAAU,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,WAAW,UAAU,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,EACzH,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACzC,CAAA;QACF,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAC7B,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,eAAe,CAAC,MAAiB,EAAE,EAAU,EAAE,KAAU;QACtE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QAC3C,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO,IAAI,CAAA;QACjC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;QACvD,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,KAAK,EAAE,CAAA;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAC9C,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC5F,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CACpB,UAAU,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,WAAW,UAAU,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,EACzH,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAC1C,CAAA;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAiB,EAAE,EAAU;QACzC,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE;YAChH,EAAE;SACF,CAAC,CAAA;IACH,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,MAAiB,EAAE,GAAQ;QACzC,MAAM,GAAG,GAAQ,EAAE,CAAA;QACnB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAC3B,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACvC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;gBACtB,SAAQ;YACT,CAAC;YACD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBACd,KAAK,CAAC,IAAI,KAAK,SAAS;oBACvB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;oBACb,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ;wBACxB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;wBACb,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS;4BACzB,CAAC,CAAC,GAAG,KAAK,IAAI;4BACd,CAAC,CAAC,GAAG,CAAA;QACV,CAAC;QACD,OAAO,GAAG,CAAA;IACX,CAAC;IAED,KAAK,CAAC,KAAK,CACV,MAAiB,EACjB,KAA6B,EAC7B,MAAmB,EACnB,OAAqB;QAErB,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,MAAM,IAAI,GAAc,EAAE,CAAA;QAC1B,MAAM,IAAI,GAAG,GAAW,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAA;QAEhD,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAA;QAC3F,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACnD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;YAC3B,IAAI,KAAK,KAAK,SAAS;gBAAE,SAAQ;YACjC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;gBAAE,SAAQ;YAC3D,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC,CAAA;YACzD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACjB,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,CAAA;QACpC,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACjE,IAAI,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC5C,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAA;YACpD,CAAC;QACF,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAA;QAC5D,CAAC;QAED,IAAI,MAAM,CAAC,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACtF,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;YACpD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC;iBACrB,KAAK,CAAC,KAAK,CAAC;iBACZ,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;iBAC5B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;YACrC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC5B,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;wBACpC,IAAI,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;wBACnC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,MAAM,cAAc,CAAA;oBAC5E,CAAC,CAAC,CAAA;oBACF,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBACxC,CAAC;YACF,CAAC;QACF,CAAC;QAED,MAAM,SAAS,GAAa,EAAE,CAAA;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;QACnE,KAAK,MAAM,KAAK,IAAI,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CAAA;QAEvF,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QAExE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAA;QAC3E,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;QACtE,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CACvC,qCAAqC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,UAAU,EAAE,EACxE,SAAS,CACT,CAAoC,CAAA;QACrC,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;QAE1C,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,YAAY,CAAA;QACrD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;QAEtG,IAAI,MAAc,CAAA;QAClB,IAAI,IAAmB,CAAA;QACvB,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;YACzD,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YAC3C;;8FAEkF;YAClF;kFACsE;YACtE,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;gBAChE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,yBAAyB,EAAE,qBAAqB,CAAC;gBACpE,CAAC,CAAC,QAAQ,CAAA;YACX,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CACrC,UAAU,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,eAAe,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,QAAQ,GAAG,cAAc,EAAE,EAChH,IAAI,CACJ,CAAqC,CAAA;YACtC,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,CAAA;YAChE,MAAM,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAC9E,IAAI,GAAG,IAAI,CAAA;QACZ,CAAC;aAAM,CAAC;YACP,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;YACnD,MAAM,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACzG,IAAI,GAAG,aAAa,CAAA;QACrB,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC1E,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAClC,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,QAAQ,GAAG,QAAQ,UAAU,QAAQ,WAAW,MAAM,EAAE,EACzH,IAAI,CACJ,CAAqB,CAAA;QAEtB,MAAM,SAAS,GACd,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YACpF,CAAC,CAAE,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CACvB,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,QAAQ,UAAU,QAAQ,WAAW,MAAM,EAAE,EAC9G,EAAE,CACF,CAAsB;YACxB,CAAC,CAAC,IAAI,CAAA;QAER,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAA;QAChE,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QAC/G,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,KAAK,CAAA;QAElG,OAAO;YACN,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;YACxD,OAAO;YACP,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAC9B,OAAO,CACN,GAAG,EACH,MAAM,CAAC,MAAM,EACb,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAClC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,EACzE;gBACC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;gBACvD,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,GAAG,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,KAAK,SAAS;oBACpD,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;aACzD,CACD,CACD;YACD,KAAK;YACL,UAAU,EAAE,OAAO,IAAI,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;YAC9F,IAAI;SACJ,CAAA;IACF,CAAC;IAEO,aAAa,CAAC,UAAkB,EAAE,MAAiB,EAAE,IAAe,EAAE,GAAG,GAAG,IAAI;QACvF,IAAI,GAAG,IAAI,MAAM,CAAC,aAAa,EAAE,mBAAmB,KAAK,SAAS,EAAE,CAAC;YACpE,MAAM,KAAK,GAAG,YAAY,CAAC,UAAU,CAAC,CAAA;YACtC,IAAI,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,mBAAmB,EAAE,CAAC;gBACtD,MAAM,IAAI,QAAQ,CAAC,gBAAgB,EAAE,aAAa,MAAM,CAAC,aAAa,CAAC,mBAAmB,oBAAoB,CAAC,CAAA;YAChH,CAAC;QACF,CAAC;QACD,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,CAAA;QACjC,MAAM,IAAI,GAAG,CAAC,KAAc,EAAU,EAAE;YACvC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAChB,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE,CAAA;QACzB,CAAC,CAAA;QAED,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACjD,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;YAC5F,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,QAAQ,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAA;YAClF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC;gBACpE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK;oBACnB,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,KAAK;gBACR,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YACX,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAA;QACjE,CAAC;QAED,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACnC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,QAAQ,CAAC,gBAAgB,EAAE,0BAA0B,OAAO,GAAG,CAAC,CAAA;QAC3E,CAAC;QACD,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,QAAyC,CAAA;QAChE,MAAM,EAAE,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAA;QACzC,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACvC,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,EAAE,UAAU,EAAE,CAAC,KAAK,CAAC,CAAA;QACzD,IAAI,OAAO,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;YACvG,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;gBAAE,OAAO,MAAM,CAAA;YAChE,MAAM,IAAI,QAAQ,CAAC,gBAAgB,EAAE,qBAAqB,KAAK,GAAG,CAAC,CAAA;QACpE,CAAC;QAED;gGACwF;QACxF,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;YAChE,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,iBAAiB,CAAC;YAC1E,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;QACpC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;gBAAE,OAAO,MAAM,CAAA;YACrD,MAAM,IAAI,QAAQ,CAAC,gBAAgB,EAAE,UAAU,KAAK,qBAAqB,CAAC,CAAA;QAC3E,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAA;QAC5D,MAAM,OAAO,GAAG,QAAQ,EAAE,IAAI,KAAK,SAAS,IAAI,QAAQ,EAAE,IAAI,KAAK,QAAQ,CAAA;QAC3E;;oGAE4F;QAC5F,MAAM,MAAM,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;QACvE,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;QACvC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;QAEnC,QAAQ,EAAE,EAAE,CAAC;YACZ,KAAK,IAAI;gBACR,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;oBAAE,OAAO,MAAM,CAAA;gBAC5D,OAAO,GAAG,GAAG,GAAG,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAA;YAC7E,KAAK,KAAK;gBACT;yEACyD;gBACzD,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;oBACzC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE;oBACxE,CAAC,CAAC,IAAI,GAAG,GAAG,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,GAAG,WAAW,CAAA;YAC9F,KAAK,IAAI;gBACR,OAAO,GAAG,GAAG,GAAG,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAA;YAC7E,KAAK,KAAK;gBACT,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC;oBAC1C,OAAO,GAAG,GAAG,GAAG,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAA;gBAC7E,CAAC;gBACD,OAAO,GAAG,GAAG,GAAG,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAA;YAC9E,KAAK,IAAI;gBACR,OAAO,GAAG,GAAG,GAAG,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAA;YAC7E,KAAK,KAAK;gBACT,OAAO,GAAG,GAAG,GAAG,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAA;YAC9E,KAAK,IAAI,CAAC;YACV,KAAK,KAAK,CAAC,CAAC,CAAC;gBACZ,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC;qBAC9B,KAAK,CAAC,GAAG,CAAC;qBACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;qBACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;qBAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;gBACtD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC1B,IAAI,MAAM,CAAC,aAAa,EAAE,OAAO,KAAK,QAAQ;wBAAE,MAAM,IAAI,QAAQ,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAA;oBAClG,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAA;gBACtC,CAAC;gBACD,IAAI,MAAM,CAAC,aAAa,EAAE,WAAW,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;oBAC1G,MAAM,IAAI,QAAQ,CAAC,gBAAgB,EAAE,0BAA0B,CAAC,CAAA;gBACjE,CAAC;gBACD,MAAM,SAAS,GACd,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,EAAE,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;gBAC7G,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACtD,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,YAAY,KAAK,GAAG,CAAA;YACvF,CAAC;YACD,KAAK,IAAI;gBACR,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;oBACpB,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;wBAAE,OAAO,MAAM,CAAA;oBACjE,OAAO,GAAG,GAAG,UAAU,CAAA;gBACxB,CAAC;gBACD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,UAAU;oBAAE,OAAO,GAAG,GAAG,cAAc,CAAA;gBACxE,IAAI,GAAG,KAAK,MAAM;oBAAE,OAAO,GAAG,GAAG,UAAU,CAAA;gBAC3C,IAAI,GAAG,KAAK,OAAO;oBAAE,OAAO,GAAG,GAAG,WAAW,CAAA;gBAC7C,MAAM,IAAI,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,gCAAgC,CAAC,CAAA;YAChF,KAAK,UAAU;gBACd,OAAO,GAAG,GAAG,eAAe,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC,cAAc,CAAA;YAC3F,KAAK,MAAM,CAAC;YACZ,KAAK,OAAO,CAAC,CAAC,CAAC;gBACd,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;oBACjD,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;oBACzB,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;gBACtC;kEACkD;gBAClD,MAAM,QAAQ,GAAG,EAAE,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAA;gBAC/F,OAAO,GAAG,GAAG,GAAG,IAAI,IAAI,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,CAAA;YAChE,CAAC;YACD;gBACC,MAAM,IAAI,QAAQ,CAAC,gBAAgB,EAAE,qBAAqB,EAAE,GAAG,CAAC,CAAA;QAClE,CAAC;IACF,CAAC;IAEO,YAAY,CAAC,UAA8B,EAAE,MAAiB,EAAE,SAAmB;QAC1F,MAAM,KAAK,GAAa,EAAE,CAAA;QAE1B,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;YACnD,MAAM,QAAQ,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;YACzF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACxB,MAAM,CAAC,KAAK,EAAE,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBAC5C;sGACsF;gBACtF,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;oBAC5D,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,iBAAiB,CAAC;oBACxE,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;gBAClC,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBACtD,MAAM,IAAI,QAAQ,CAAC,eAAe,EAAE,UAAU,KAAK,IAAI,EAAE,mBAAmB,CAAC,CAAA;gBAC9E,CAAC;gBACD,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;gBAC7C,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC;oBAClD,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC;wBAChC,CAAC,CAAC,KAAK;wBACP,CAAC,CAAC,UAAU,CAAA;gBACd,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAA;gBAC5D,MAAM,OAAO,GAAG,QAAQ,EAAE,IAAI,KAAK,SAAS,IAAI,QAAQ,EAAE,IAAI,KAAK,QAAQ,CAAA;gBAC3E,MAAM,MAAM,GACX,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAA;gBACtG,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;gBACzF,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,UAAU,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;gBAC1F,IAAI,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;oBAAE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACnF,CAAC;QACF,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;YACvC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAA;YACpB,OAAO,EAAE,CAAA;QACV,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACvB,CAAC;aAAM,CAAC;YACP,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAA;QAC3D,CAAC;QAED,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/D,CAAC;CACD;AAED,SAAS,IAAI,CAAC,KAAc;IAC3B,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAA;IACpC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAC7E,OAAO,KAAgB,CAAA;AACxB,CAAC;AAED,SAAS,MAAM,CAAC,GAAW,EAAE,KAA2B;IACvD,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,IAAI,CAAA;IAC/B,IAAI,KAAK,EAAE,IAAI,KAAK,SAAS,IAAI,KAAK,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3D,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QACrB,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAAE,MAAM,IAAI,QAAQ,CAAC,gBAAgB,EAAE,IAAI,GAAG,mBAAmB,CAAC,CAAA;QACrF,OAAO,CAAC,CAAA;IACT,CAAC;IACD,OAAO,GAAG,CAAA;AACX,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAChC,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;AACnD,CAAC"}
1
+ {"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../../src/reference/stores/postgres.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Compiles the query AST to SQL for both SQL stores.
3
+ *
4
+ * One compiler, so SQLite and Postgres receive the same predicate. What differs is spelled by an
5
+ * `SqlFlavour`: placeholders, how a value is cast to text, how a case-sensitive pattern match is
6
+ * written, and which collation means "binary". Those are real engine differences; the meaning of
7
+ * the predicate is not.
8
+ */
9
+ import type { EntityDef } from "../model.ts";
10
+ import type { Collation, FilterNode, LikeSegment, OrderTerm } from "../query.ts";
11
+ export type SqlParam = string | number | boolean | null;
12
+ export interface SqlFlavour {
13
+ /** The expression reading a field — a quoted column, or a deliberately wrong one under a defect. */
14
+ column(entity: EntityDef, field: string): string;
15
+ /** Appends a bound argument and returns its placeholder. */
16
+ bind(args: SqlParam[], value: SqlParam): string;
17
+ /** A boolean as the engine stores it. */
18
+ bool(value: boolean): SqlParam;
19
+ toText(expr: string): string;
20
+ /** Text ordering under a binary collation. */
21
+ binary(expr: string): string;
22
+ /** A case-sensitive or case-insensitive pattern match against `segments`. */
23
+ like(expr: string, segments: LikeSegment[], insensitive: boolean, args: SqlParam[]): string;
24
+ /** Where `needle` first occurs in `expr`, 1-based, or 0 — with the engine's own case folding. */
25
+ position(expr: string, needle: string, caseSensitive: boolean, args: SqlParam[]): string;
26
+ /** Whether a JSON array column holds `element` as one of its elements. */
27
+ hasElement(expr: string, element: string, args: SqlParam[]): string;
28
+ random: string;
29
+ }
30
+ export declare function compileWhere(node: FilterNode, entity: EntityDef, flavour: SqlFlavour, args: SqlParam[]): string;
31
+ export declare function compileOrder(order: OrderTerm[], collation: Collation, shuffleTies: boolean, entity: EntityDef, flavour: SqlFlavour): string;
32
+ /** A LIKE pattern with `\` escaping, for engines whose LIKE honours ESCAPE. */
33
+ export declare function likeText(segments: LikeSegment[]): string;
34
+ /** A GLOB pattern — SQLite's case-sensitive matcher, which needs no pragma. */
35
+ export declare function globText(segments: LikeSegment[]): string;
36
+ //# sourceMappingURL=sql-compile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-compile.d.ts","sourceRoot":"","sources":["../../../src/reference/stores/sql-compile.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAsB,MAAM,aAAa,CAAA;AAEpG,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;AAEvD,MAAM,WAAW,UAAU;IAC1B,oGAAoG;IACpG,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IAChD,4DAA4D;IAC5D,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,MAAM,CAAA;IAC/C,yCAAyC;IACzC,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAAA;IAC9B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IAC5B,8CAA8C;IAC9C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IAC5B,6EAA6E;IAC7E,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAA;IAC3F,iGAAiG;IACjG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAA;IACxF,0EAA0E;IAC1E,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAA;IACnE,MAAM,EAAE,MAAM,CAAA;CACd;AAYD,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,CAsC/G;AAYD,wBAAgB,YAAY,CAC3B,KAAK,EAAE,SAAS,EAAE,EAClB,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,OAAO,EACpB,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,UAAU,GACjB,MAAM,CAkBR;AAED,+EAA+E;AAC/E,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,MAAM,CAMxD;AAED,+EAA+E;AAC/E,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,MAAM,CAMxD"}