@ketvietlab/ketjs 0.1.2 → 0.1.3

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 (299) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +8 -2
  3. package/dist/agent/capabilities.d.ts +1 -3
  4. package/dist/agent/capabilities.d.ts.map +1 -1
  5. package/dist/agent/capabilities.js +10 -1
  6. package/dist/agent/capabilities.js.map +1 -1
  7. package/dist/agent/permissions.d.ts +43 -1
  8. package/dist/agent/permissions.d.ts.map +1 -1
  9. package/dist/agent/permissions.js +50 -2
  10. package/dist/agent/permissions.js.map +1 -1
  11. package/dist/cli.js +246 -97
  12. package/dist/cli.js.map +1 -1
  13. package/dist/codegen/dts.d.ts.map +1 -1
  14. package/dist/codegen/dts.js +1 -0
  15. package/dist/codegen/dts.js.map +1 -1
  16. package/dist/data/changeset.d.ts +12 -0
  17. package/dist/data/changeset.d.ts.map +1 -1
  18. package/dist/data/changeset.js +73 -17
  19. package/dist/data/changeset.js.map +1 -1
  20. package/dist/data/expr.d.ts +16 -0
  21. package/dist/data/expr.d.ts.map +1 -1
  22. package/dist/data/expr.js +33 -5
  23. package/dist/data/expr.js.map +1 -1
  24. package/dist/data/fleet.d.ts +41 -1
  25. package/dist/data/fleet.d.ts.map +1 -1
  26. package/dist/data/fleet.js +100 -11
  27. package/dist/data/fleet.js.map +1 -1
  28. package/dist/data/migrate.d.ts +20 -0
  29. package/dist/data/migrate.d.ts.map +1 -1
  30. package/dist/data/migrate.js +86 -3
  31. package/dist/data/migrate.js.map +1 -1
  32. package/dist/data/physical.d.ts +5 -0
  33. package/dist/data/physical.d.ts.map +1 -0
  34. package/dist/data/physical.js +196 -0
  35. package/dist/data/physical.js.map +1 -0
  36. package/dist/data/pool.d.ts +2 -1
  37. package/dist/data/pool.d.ts.map +1 -1
  38. package/dist/data/pool.js +159 -31
  39. package/dist/data/pool.js.map +1 -1
  40. package/dist/data/query.d.ts +10 -1
  41. package/dist/data/query.d.ts.map +1 -1
  42. package/dist/data/query.js +136 -27
  43. package/dist/data/query.js.map +1 -1
  44. package/dist/data/sqlite.d.ts.map +1 -1
  45. package/dist/data/sqlite.js +350 -52
  46. package/dist/data/sqlite.js.map +1 -1
  47. package/dist/data/time.d.ts +13 -0
  48. package/dist/data/time.d.ts.map +1 -1
  49. package/dist/data/time.js +61 -17
  50. package/dist/data/time.js.map +1 -1
  51. package/dist/index.d.ts +43 -22
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +32 -16
  54. package/dist/index.js.map +1 -1
  55. package/dist/kernel/audit.d.ts +27 -0
  56. package/dist/kernel/audit.d.ts.map +1 -0
  57. package/dist/kernel/audit.js +67 -0
  58. package/dist/kernel/audit.js.map +1 -0
  59. package/dist/kernel/classification.d.ts +26 -0
  60. package/dist/kernel/classification.d.ts.map +1 -0
  61. package/dist/kernel/classification.js +73 -0
  62. package/dist/kernel/classification.js.map +1 -0
  63. package/dist/kernel/compose.d.ts +6 -2
  64. package/dist/kernel/compose.d.ts.map +1 -1
  65. package/dist/kernel/compose.js +269 -15
  66. package/dist/kernel/compose.js.map +1 -1
  67. package/dist/kernel/define.d.ts +2 -3
  68. package/dist/kernel/define.d.ts.map +1 -1
  69. package/dist/kernel/define.js +22 -12
  70. package/dist/kernel/define.js.map +1 -1
  71. package/dist/kernel/diff.d.ts.map +1 -1
  72. package/dist/kernel/diff.js +28 -4
  73. package/dist/kernel/diff.js.map +1 -1
  74. package/dist/kernel/graph.js +1 -1
  75. package/dist/kernel/graph.js.map +1 -1
  76. package/dist/kernel/i18n.d.ts +10 -1
  77. package/dist/kernel/i18n.d.ts.map +1 -1
  78. package/dist/kernel/i18n.js +34 -1
  79. package/dist/kernel/i18n.js.map +1 -1
  80. package/dist/kernel/layout.d.ts +97 -0
  81. package/dist/kernel/layout.d.ts.map +1 -1
  82. package/dist/kernel/layout.js +294 -12
  83. package/dist/kernel/layout.js.map +1 -1
  84. package/dist/kernel/menu.d.ts +33 -2
  85. package/dist/kernel/menu.d.ts.map +1 -1
  86. package/dist/kernel/menu.js +99 -7
  87. package/dist/kernel/menu.js.map +1 -1
  88. package/dist/kernel/modules.d.ts +3 -3
  89. package/dist/kernel/modules.d.ts.map +1 -1
  90. package/dist/kernel/modules.js +21 -21
  91. package/dist/kernel/modules.js.map +1 -1
  92. package/dist/kernel/permissions.d.ts +10 -0
  93. package/dist/kernel/permissions.d.ts.map +1 -0
  94. package/dist/kernel/permissions.js +365 -0
  95. package/dist/kernel/permissions.js.map +1 -0
  96. package/dist/kernel/schedule.d.ts +23 -0
  97. package/dist/kernel/schedule.d.ts.map +1 -0
  98. package/dist/kernel/schedule.js +83 -0
  99. package/dist/kernel/schedule.js.map +1 -0
  100. package/dist/kernel/types.d.ts.map +1 -1
  101. package/dist/kernel/types.js +5 -4
  102. package/dist/kernel/types.js.map +1 -1
  103. package/dist/kernel/workspace.d.ts +92 -14
  104. package/dist/kernel/workspace.d.ts.map +1 -1
  105. package/dist/kernel/workspace.js +128 -49
  106. package/dist/kernel/workspace.js.map +1 -1
  107. package/dist/pdf/assets/Inter-Bold.ttf +0 -0
  108. package/dist/pdf/assets/Inter-Regular.ttf +0 -0
  109. package/dist/pdf/assets/Inter-SemiBold.ttf +0 -0
  110. package/dist/pdf/assets/LICENSE.txt +92 -0
  111. package/dist/pdf/font.d.ts +10 -0
  112. package/dist/pdf/font.d.ts.map +1 -0
  113. package/dist/pdf/font.js +83 -0
  114. package/dist/pdf/font.js.map +1 -0
  115. package/dist/pdf/image.d.ts +8 -0
  116. package/dist/pdf/image.d.ts.map +1 -0
  117. package/dist/pdf/image.js +94 -0
  118. package/dist/pdf/image.js.map +1 -0
  119. package/dist/pdf/index.d.ts +15 -0
  120. package/dist/pdf/index.d.ts.map +1 -0
  121. package/dist/pdf/index.js +17 -0
  122. package/dist/pdf/index.js.map +1 -0
  123. package/dist/pdf/markup.d.ts +19 -0
  124. package/dist/pdf/markup.d.ts.map +1 -0
  125. package/dist/pdf/markup.js +146 -0
  126. package/dist/pdf/markup.js.map +1 -0
  127. package/dist/pdf/render.d.ts +14 -0
  128. package/dist/pdf/render.d.ts.map +1 -0
  129. package/dist/pdf/render.js +387 -0
  130. package/dist/pdf/render.js.map +1 -0
  131. package/dist/scaffold/index.js +6 -6
  132. package/dist/scaffold/index.js.map +1 -1
  133. package/dist/scaffold/templates/{app.test.ts.tmpl → deployment.test.ts.tmpl} +3 -3
  134. package/dist/scaffold/templates/ket.workspace.ts.tmpl +4 -6
  135. package/dist/scaffold/templates/module.ts.tmpl +1 -4
  136. package/dist/server/assets.d.ts +23 -0
  137. package/dist/server/assets.d.ts.map +1 -0
  138. package/dist/server/assets.js +97 -0
  139. package/dist/server/assets.js.map +1 -0
  140. package/dist/server/boot.d.ts +157 -38
  141. package/dist/server/boot.d.ts.map +1 -1
  142. package/dist/server/boot.js +360 -138
  143. package/dist/server/boot.js.map +1 -1
  144. package/dist/server/config.d.ts +30 -10
  145. package/dist/server/config.d.ts.map +1 -1
  146. package/dist/server/config.js +73 -17
  147. package/dist/server/config.js.map +1 -1
  148. package/dist/server/ctx.d.ts +10 -0
  149. package/dist/server/ctx.d.ts.map +1 -1
  150. package/dist/server/ctx.js +266 -48
  151. package/dist/server/ctx.js.map +1 -1
  152. package/dist/server/development.d.ts +10 -0
  153. package/dist/server/development.d.ts.map +1 -0
  154. package/dist/server/development.js +15 -0
  155. package/dist/server/development.js.map +1 -0
  156. package/dist/server/fn.d.ts +22 -3
  157. package/dist/server/fn.d.ts.map +1 -1
  158. package/dist/server/fn.js +116 -32
  159. package/dist/server/fn.js.map +1 -1
  160. package/dist/server/form.d.ts +33 -0
  161. package/dist/server/form.d.ts.map +1 -0
  162. package/dist/server/form.js +47 -0
  163. package/dist/server/form.js.map +1 -0
  164. package/dist/server/http.d.ts +55 -3
  165. package/dist/server/http.d.ts.map +1 -1
  166. package/dist/server/http.js +306 -22
  167. package/dist/server/http.js.map +1 -1
  168. package/dist/server/idem.d.ts +3 -2
  169. package/dist/server/idem.d.ts.map +1 -1
  170. package/dist/server/idem.js +12 -4
  171. package/dist/server/idem.js.map +1 -1
  172. package/dist/server/jobs.js +1 -1
  173. package/dist/server/jobs.js.map +1 -1
  174. package/dist/server/log/combinators.d.ts +42 -0
  175. package/dist/server/log/combinators.d.ts.map +1 -0
  176. package/dist/server/log/combinators.js +270 -0
  177. package/dist/server/log/combinators.js.map +1 -0
  178. package/dist/server/log/console.d.ts +12 -0
  179. package/dist/server/log/console.d.ts.map +1 -0
  180. package/dist/server/log/console.js +96 -0
  181. package/dist/server/log/console.js.map +1 -0
  182. package/dist/server/log/file.d.ts +11 -0
  183. package/dist/server/log/file.d.ts.map +1 -0
  184. package/dist/server/log/file.js +61 -0
  185. package/dist/server/log/file.js.map +1 -0
  186. package/dist/server/log/index.d.ts +23 -0
  187. package/dist/server/log/index.d.ts.map +1 -0
  188. package/dist/server/log/index.js +45 -0
  189. package/dist/server/log/index.js.map +1 -0
  190. package/dist/server/log/logger.d.ts +53 -0
  191. package/dist/server/log/logger.d.ts.map +1 -0
  192. package/dist/server/log/logger.js +94 -0
  193. package/dist/server/log/logger.js.map +1 -0
  194. package/dist/server/log/memory.d.ts +11 -0
  195. package/dist/server/log/memory.d.ts.map +1 -0
  196. package/dist/server/log/memory.js +25 -0
  197. package/dist/server/log/memory.js.map +1 -0
  198. package/dist/server/log/types.d.ts +112 -0
  199. package/dist/server/log/types.d.ts.map +1 -0
  200. package/dist/server/log/types.js +58 -0
  201. package/dist/server/log/types.js.map +1 -0
  202. package/dist/server/policy.d.ts +29 -0
  203. package/dist/server/policy.d.ts.map +1 -0
  204. package/dist/server/policy.js +29 -0
  205. package/dist/server/policy.js.map +1 -0
  206. package/dist/server/queue.d.ts +1 -1
  207. package/dist/server/queue.d.ts.map +1 -1
  208. package/dist/server/queue.js.map +1 -1
  209. package/dist/server/ratelimit.d.ts +48 -0
  210. package/dist/server/ratelimit.d.ts.map +1 -0
  211. package/dist/server/ratelimit.js +102 -0
  212. package/dist/server/ratelimit.js.map +1 -0
  213. package/dist/server/respond.d.ts.map +1 -1
  214. package/dist/server/respond.js +16 -1
  215. package/dist/server/respond.js.map +1 -1
  216. package/dist/server/runtime.d.ts +18 -3
  217. package/dist/server/runtime.d.ts.map +1 -1
  218. package/dist/server/runtime.js +32 -2
  219. package/dist/server/runtime.js.map +1 -1
  220. package/dist/server/schedule.d.ts +18 -0
  221. package/dist/server/schedule.d.ts.map +1 -0
  222. package/dist/server/schedule.js +70 -0
  223. package/dist/server/schedule.js.map +1 -0
  224. package/dist/server/sequence.d.ts +42 -0
  225. package/dist/server/sequence.d.ts.map +1 -0
  226. package/dist/server/sequence.js +97 -0
  227. package/dist/server/sequence.js.map +1 -0
  228. package/dist/server/session.d.ts +21 -0
  229. package/dist/server/session.d.ts.map +1 -1
  230. package/dist/server/session.js +84 -10
  231. package/dist/server/session.js.map +1 -1
  232. package/dist/server/sessionstore.d.ts +3 -1
  233. package/dist/server/sessionstore.d.ts.map +1 -1
  234. package/dist/server/sessionstore.js +7 -3
  235. package/dist/server/sessionstore.js.map +1 -1
  236. package/dist/server/storage/index.d.ts +1 -1
  237. package/dist/server/storage/index.d.ts.map +1 -1
  238. package/dist/server/storage/index.js +61 -1
  239. package/dist/server/storage/index.js.map +1 -1
  240. package/dist/server/storage/types.d.ts +8 -0
  241. package/dist/server/storage/types.d.ts.map +1 -1
  242. package/dist/server/storage/types.js +58 -0
  243. package/dist/server/storage/types.js.map +1 -1
  244. package/dist/server/tenants.d.ts +20 -18
  245. package/dist/server/tenants.d.ts.map +1 -1
  246. package/dist/server/tenants.js +133 -84
  247. package/dist/server/tenants.js.map +1 -1
  248. package/dist/server/transport/types.js +2 -2
  249. package/dist/server/transport/types.js.map +1 -1
  250. package/dist/server/worker.d.ts +19 -3
  251. package/dist/server/worker.d.ts.map +1 -1
  252. package/dist/server/worker.js +168 -21
  253. package/dist/server/worker.js.map +1 -1
  254. package/dist/testing.d.ts +26 -10
  255. package/dist/testing.d.ts.map +1 -1
  256. package/dist/testing.js +41 -14
  257. package/dist/testing.js.map +1 -1
  258. package/dist/theme/contracts.d.ts +14 -1
  259. package/dist/theme/contracts.d.ts.map +1 -1
  260. package/dist/theme/contracts.js +35 -6
  261. package/dist/theme/contracts.js.map +1 -1
  262. package/dist/theme/index.d.ts +1 -1
  263. package/dist/theme/index.d.ts.map +1 -1
  264. package/dist/theme/index.js +1 -1
  265. package/dist/theme/index.js.map +1 -1
  266. package/dist/theme/joint-runtime.d.ts +33 -0
  267. package/dist/theme/joint-runtime.d.ts.map +1 -0
  268. package/dist/theme/joint-runtime.js +121 -0
  269. package/dist/theme/joint-runtime.js.map +1 -0
  270. package/dist/theme/joints.d.ts.map +1 -1
  271. package/dist/theme/joints.js +15 -97
  272. package/dist/theme/joints.js.map +1 -1
  273. package/dist/theme/ktl/compile.d.ts +4 -0
  274. package/dist/theme/ktl/compile.d.ts.map +1 -1
  275. package/dist/theme/ktl/compile.js +54 -1
  276. package/dist/theme/ktl/compile.js.map +1 -1
  277. package/dist/theme/ktl/parser.d.ts +4 -0
  278. package/dist/theme/ktl/parser.d.ts.map +1 -1
  279. package/dist/theme/ktl/parser.js +8 -0
  280. package/dist/theme/ktl/parser.js.map +1 -1
  281. package/dist/theme/render.d.ts +8 -0
  282. package/dist/theme/render.d.ts.map +1 -1
  283. package/dist/theme/render.js +88 -118
  284. package/dist/theme/render.js.map +1 -1
  285. package/dist/theme/tokens.d.ts +6 -0
  286. package/dist/theme/tokens.d.ts.map +1 -1
  287. package/dist/theme/tokens.js +6 -0
  288. package/dist/theme/tokens.js.map +1 -1
  289. package/dist/theme/viewmodel.d.ts +24 -0
  290. package/dist/theme/viewmodel.d.ts.map +1 -1
  291. package/dist/theme/viewmodel.js +75 -6
  292. package/dist/theme/viewmodel.js.map +1 -1
  293. package/dist/types.d.ts +304 -56
  294. package/dist/types.d.ts.map +1 -1
  295. package/package.json +6 -2
  296. package/dist/kernel/apps.d.ts +0 -43
  297. package/dist/kernel/apps.d.ts.map +0 -1
  298. package/dist/kernel/apps.js +0 -234
  299. package/dist/kernel/apps.js.map +0 -1
@@ -1,11 +1,13 @@
1
1
  // Migrating many databases from one manifest.
2
2
  //
3
- // Odoo lets each database install a different set of modules, so there is no single
3
+ // the domain contract lets each database install a different set of modules, so there is no single
4
4
  // schema to reason about and every fleet upgrade is N unknown migrations. Ket takes
5
5
  // the opposite position: one manifest, many databases, the same target schema
6
6
  // everywhere. Each database records the schema it is actually on, so a tenant
7
7
  // created last year and one created today converge on the same shape.
8
- import { schemaFromManifest, planMigration, renderSql } from './migrate.js';
8
+ import { isDeepStrictEqual } from 'node:util';
9
+ import { ManualMigrationRequiredError, schemaFromManifest, planMigration, renderSql } from './migrate.js';
10
+ import { physicalSchemaIssues } from './physical.js';
9
11
  export const MIGRATION_DDL = `
10
12
  CREATE TABLE IF NOT EXISTS ket_migration (
11
13
  id INTEGER PRIMARY KEY CHECK (id = 1),
@@ -20,9 +22,21 @@ CREATE TABLE IF NOT EXISTS ket_migration (
20
22
  applied_at TIMESTAMPTZ NOT NULL
21
23
  );
22
24
  `;
23
- async function readApplied(adapter) {
25
+ /** A manual migration was not eligible to advance the recorded schema. */
26
+ export class ManualMigrationConfirmationError extends Error {
27
+ code = 'E_MANUAL_MIGRATION_CONFIRMATION';
28
+ issues;
29
+ constructor(message, issues = []) {
30
+ super(issues.length ? `${message}:\n${issues.map((issue) => ` - ${issue}`).join('\n')}` : message);
31
+ this.issues = issues;
32
+ }
33
+ }
34
+ async function readApplied(adapter, ensureTable) {
24
35
  const pg = adapter.name === 'postgres';
25
- await adapter.exec(pg ? MIGRATION_DDL_PG : MIGRATION_DDL);
36
+ if (ensureTable)
37
+ await adapter.exec(pg ? MIGRATION_DDL_PG : MIGRATION_DDL);
38
+ else if (!Object.hasOwn(await adapter.introspect(), 'ket_migration'))
39
+ return null;
26
40
  const rows = await adapter.all(`SELECT schema FROM ket_migration WHERE id = 1`);
27
41
  const r = rows[0];
28
42
  return r ? JSON.parse(String(r.schema)) : null;
@@ -39,16 +53,91 @@ async function writeApplied(adapter, schema, now) {
39
53
  ]);
40
54
  }
41
55
  }
56
+ /**
57
+ * Verify a physical database without applying DDL or changing its migration marker.
58
+ *
59
+ * The two comparisons answer different operational questions. `markerIssues`
60
+ * detects legacy drift even when code and `ket_migration` agree, while
61
+ * `manifestIssues` describes what keeps the catalog from satisfying the current
62
+ * deployment. Callers should require `ok` before declaring a datastore healthy.
63
+ */
64
+ export async function verifyPhysicalSchema(adapter, manifest) {
65
+ const target = schemaFromManifest(manifest);
66
+ const applied = await readApplied(adapter, false);
67
+ const markerMatchesManifest = applied !== null && isDeepStrictEqual(applied, target);
68
+ const markerIssues = applied
69
+ ? await physicalSchemaIssues(adapter, applied, applied)
70
+ : ['applied-schema marker is missing'];
71
+ const manifestIssues = markerMatchesManifest
72
+ ? [...markerIssues]
73
+ : await physicalSchemaIssues(adapter, applied ?? { version: target.version, tables: {} }, target);
74
+ return {
75
+ ok: markerMatchesManifest && markerIssues.length === 0 && manifestIssues.length === 0,
76
+ applied,
77
+ target,
78
+ markerMatchesManifest,
79
+ markerIssues,
80
+ manifestIssues,
81
+ };
82
+ }
42
83
  export async function migrateOne(adapter, manifest, o = {}) {
43
84
  const target = schemaFromManifest(manifest);
44
- const applied = await readApplied(adapter);
45
- const ops = planMigration(applied, target, { allowDestructive: o.allowDestructive ?? false });
46
- if (o.dryRun)
85
+ if (o.dryRun) {
86
+ const applied = await readApplied(adapter, false);
87
+ return planMigration(applied, target, { allowDestructive: o.allowDestructive ?? false });
88
+ }
89
+ const apply = async (tx) => {
90
+ const applied = await readApplied(tx, true);
91
+ const ops = planMigration(applied, target, { allowDestructive: o.allowDestructive ?? false });
92
+ const sql = renderSql(ops, tx);
93
+ for (const statement of sql)
94
+ await tx.exec(statement);
95
+ await writeApplied(tx, target, (o.now ?? (() => new Date().toISOString()))());
47
96
  return ops;
48
- for (const sql of renderSql(ops, adapter))
49
- await adapter.exec(sql);
50
- await writeApplied(adapter, target, (o.now ?? (() => new Date().toISOString()))());
51
- return ops;
97
+ };
98
+ // DDL and the schema marker are one unit. Without this, a failed later
99
+ // statement leaves earlier columns/indexes in place while the old marker makes
100
+ // a retry replay them and fail on duplicates.
101
+ return adapter.transaction ? apply(adapter) : adapter.tx(apply);
102
+ }
103
+ /**
104
+ * Confirm an application-owned migration after checking the physical database.
105
+ *
106
+ * Call this on the transaction-scoped adapter after the manual DDL and backfill.
107
+ * The migration marker advances in that same transaction only when every modelled
108
+ * table, column type/nullability/primary key, and named index matches `manifest`.
109
+ */
110
+ export async function confirmManualMigration(adapter, manifest, o = {}) {
111
+ const target = schemaFromManifest(manifest);
112
+ const confirm = async (tx) => {
113
+ const applied = await readApplied(tx, false);
114
+ if (!applied)
115
+ throw new ManualMigrationConfirmationError('no applied-schema marker exists; run migrateOne before confirming a manual transition');
116
+ let manual;
117
+ try {
118
+ const generated = planMigration(applied, target, { allowDestructive: true });
119
+ throw new ManualMigrationConfirmationError(generated.length
120
+ ? 'the pending schema difference contains no operation that requires a manual migration'
121
+ : 'the recorded schema already matches the target manifest');
122
+ }
123
+ catch (error) {
124
+ if (!(error instanceof ManualMigrationRequiredError))
125
+ throw error;
126
+ manual = error.ops;
127
+ }
128
+ let issues;
129
+ try {
130
+ issues = await physicalSchemaIssues(tx, applied, target);
131
+ }
132
+ catch (error) {
133
+ throw new ManualMigrationConfirmationError(error.message);
134
+ }
135
+ if (issues.length)
136
+ throw new ManualMigrationConfirmationError('the physical database does not match the target manifest; the applied-schema marker was not changed', issues);
137
+ await writeApplied(tx, target, (o.now ?? (() => new Date().toISOString()))());
138
+ return manual;
139
+ };
140
+ return adapter.transaction ? confirm(adapter) : adapter.tx(confirm);
52
141
  }
53
142
  /**
54
143
  * Migrate every named database. One failure does not stop the fleet — the result
@@ -1 +1 @@
1
- {"version":3,"file":"fleet.js","sourceRoot":"","sources":["../../../../../../packages/ketjs/src/data/fleet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fleet.js","sourceRoot":"","sources":["../../../../../../packages/ketjs/src/data/fleet.ts"],"names":[],"mappings":"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"}
@@ -32,6 +32,13 @@ export type MigrationOp = {
32
32
  column: string;
33
33
  def: Column;
34
34
  destructive: false;
35
+ } | {
36
+ op: 'ALTER_COLUMN_NULLABILITY';
37
+ table: string;
38
+ column: string;
39
+ from: boolean;
40
+ to: boolean;
41
+ destructive: false;
35
42
  } | {
36
43
  op: 'CREATE_INDEX';
37
44
  table: string;
@@ -68,6 +75,19 @@ export declare class DestructiveMigrationError extends Error {
68
75
  ops: MigrationOp[];
69
76
  constructor(message: string, ops: MigrationOp[]);
70
77
  }
78
+ /**
79
+ * A schema difference that cannot be applied safely from the manifest alone.
80
+ *
81
+ * Required columns need a deployment-specific backfill, nullability changes need
82
+ * data inspection (and a table rebuild on SQLite), and type changes need an
83
+ * explicit conversion expression. Treating any of those as applied would make the
84
+ * migration marker disagree with the physical database.
85
+ */
86
+ export declare class ManualMigrationRequiredError extends Error {
87
+ code: string;
88
+ ops: MigrationOp[];
89
+ constructor(message: string, ops: MigrationOp[]);
90
+ }
71
91
  export declare function planMigration(prev: Schema | null, next: Schema, opts?: {
72
92
  allowDestructive?: boolean;
73
93
  }): MigrationOp[];
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../../../packages/ketjs/src/data/migrate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../../../packages/ketjs/src/data/migrate.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  // Schema is derived from the manifest, never hand-written; migrations are generated
2
2
  // as reviewable operations, never applied silently.
3
3
  //
4
- // The Odoo lesson encoded as a rule: destructive operations are still generated so
4
+ // The the domain contract lesson encoded as a rule: destructive operations are still generated so
5
5
  // you can see them, but refused unless explicitly allowed. "Don't drop fields"
6
6
  // stops being discipline someone has to remember and becomes something the tool enforces.
7
7
  import { sqlTypeOf } from '../kernel/types.js';
@@ -9,6 +9,22 @@ export const tableNameFor = (modelKey) => modelKey
9
9
  .replace('.', '_')
10
10
  .replace(/([a-z0-9])([A-Z])/g, '$1_$2')
11
11
  .toLowerCase();
12
+ const indexCovers = (indexes, fields) => Object.values(indexes).some((index) => fields.every((field, position) => index.fields[position] === field));
13
+ const autoIndexName = (kind, seed) => {
14
+ let hash = 2166136261;
15
+ for (let index = 0; index < seed.length; index++) {
16
+ hash ^= seed.charCodeAt(index);
17
+ hash = Math.imul(hash, 16777619);
18
+ }
19
+ return `ket_${kind}_${(hash >>> 0).toString(36)}`;
20
+ };
21
+ const addAutoIndex = (indexes, name, fields) => {
22
+ let candidate = name;
23
+ let suffix = 2;
24
+ while (indexes[candidate])
25
+ candidate = `${name}_${suffix++}`;
26
+ indexes[candidate] = { fields, unique: false, by: '(framework)' };
27
+ };
12
28
  export function schemaFromManifest(manifest) {
13
29
  const tables = {};
14
30
  for (const [modelKey, model] of Object.entries(manifest.models)) {
@@ -22,7 +38,28 @@ export function schemaFromManifest(manifest) {
22
38
  target: f.target ?? null,
23
39
  };
24
40
  }
25
- tables[tableNameFor(modelKey)] = { model: modelKey, owner: model.owner, columns, indexes: model.indexes };
41
+ const indexes = Object.fromEntries(Object.entries(model.indexes).map(([name, index]) => [name, { ...index, fields: [...index.fields] }]));
42
+ if (model.scope !== 'shared') {
43
+ const fields = model.scope === 'company+branch' ? ['companyId', 'branchId'] : ['companyId'];
44
+ if (!indexCovers(indexes, fields)) {
45
+ addAutoIndex(indexes, autoIndexName('scope', modelKey), fields);
46
+ }
47
+ }
48
+ tables[tableNameFor(modelKey)] = { model: modelKey, owner: model.owner, columns, indexes };
49
+ }
50
+ for (const relations of Object.values(manifest.relations)) {
51
+ for (const relation of Object.values(relations)) {
52
+ if (relation.kind !== 'hasMany')
53
+ continue;
54
+ const target = manifest.models[relation.target];
55
+ const table = tables[tableNameFor(relation.target)];
56
+ if (!target || !table)
57
+ continue;
58
+ const fields = [...new Set([...(target.scope === 'shared' ? [] : ['companyId']), relation.by])];
59
+ if (indexCovers(table.indexes, fields))
60
+ continue;
61
+ addAutoIndex(table.indexes, autoIndexName('relation', `${relation.target}:${relation.by}`), fields);
62
+ }
26
63
  }
27
64
  return { version: 1, tables };
28
65
  }
@@ -34,6 +71,31 @@ export class DestructiveMigrationError extends Error {
34
71
  this.ops = ops;
35
72
  }
36
73
  }
74
+ /**
75
+ * A schema difference that cannot be applied safely from the manifest alone.
76
+ *
77
+ * Required columns need a deployment-specific backfill, nullability changes need
78
+ * data inspection (and a table rebuild on SQLite), and type changes need an
79
+ * explicit conversion expression. Treating any of those as applied would make the
80
+ * migration marker disagree with the physical database.
81
+ */
82
+ export class ManualMigrationRequiredError extends Error {
83
+ code = 'E_MANUAL_MIGRATION_REQUIRED';
84
+ ops;
85
+ constructor(message, ops) {
86
+ super(message);
87
+ this.ops = ops;
88
+ }
89
+ }
90
+ const manualMigrationReason = (op) => {
91
+ if (op.op === 'ALTER_COLUMN_TYPE')
92
+ return `${op.table}.${op.column} changes type from ${op.from} to ${op.to}`;
93
+ if (op.op === 'ALTER_COLUMN_NULLABILITY')
94
+ return `${op.table}.${op.column} changes from ${op.from ? 'optional' : 'required'} to ${op.to ? 'optional' : 'required'}`;
95
+ if (op.op === 'ADD_COLUMN' && !op.def.optional)
96
+ return `${op.table}.${op.column} is a required column and existing rows need a backfill`;
97
+ return null;
98
+ };
37
99
  export function planMigration(prev, next, opts = {}) {
38
100
  const ops = [];
39
101
  const prevTables = prev?.tables ?? {};
@@ -60,6 +122,15 @@ export function planMigration(prev, next, opts = {}) {
60
122
  to: cd.base,
61
123
  destructive: true,
62
124
  });
125
+ else if (bc.optional !== cd.optional)
126
+ ops.push({
127
+ op: 'ALTER_COLUMN_NULLABILITY',
128
+ table: t,
129
+ column: c,
130
+ from: bc.optional,
131
+ to: cd.optional,
132
+ destructive: false,
133
+ });
63
134
  }
64
135
  // Indexes are dropped before the columns and created after them. Postgres
65
136
  // drops any index covering a dropped column as part of ALTER TABLE, so a
@@ -89,6 +160,15 @@ export function planMigration(prev, next, opts = {}) {
89
160
  if (!next.tables[t])
90
161
  ops.push({ op: 'DROP_TABLE', table: t, destructive: true });
91
162
  }
163
+ const manual = ops.flatMap((op) => {
164
+ const reason = manualMigrationReason(op);
165
+ return reason ? [{ op, reason }] : [];
166
+ });
167
+ if (manual.length) {
168
+ const list = manual.map(({ reason }) => ` - ${reason}`).join('\n');
169
+ throw new ManualMigrationRequiredError(`migration contains ${manual.length} operation(s) that require a hand-written data migration:\n${list}\n\n` +
170
+ 'Apply the DDL and backfill in an application-owned transaction, then call confirmManualMigration(tx, manifest). KetJS will verify the physical schema before recording it.', manual.map(({ op }) => op));
171
+ }
92
172
  const destructive = ops.filter((o) => o.destructive);
93
173
  if (destructive.length && !opts.allowDestructive) {
94
174
  const list = destructive
@@ -114,6 +194,9 @@ export function renderSql(ops, adapter) {
114
194
  else if (o.op === 'ADD_COLUMN') {
115
195
  out.push(`ALTER TABLE ${q(o.table)} ADD COLUMN ${q(o.column)} ${adapter.columnSql(o.def)}`);
116
196
  }
197
+ else if (o.op === 'ALTER_COLUMN_NULLABILITY') {
198
+ throw new ManualMigrationRequiredError(`migration operation ${o.op} ${o.table}.${o.column} requires a hand-written data migration`, [o]);
199
+ }
117
200
  else if (o.op === 'CREATE_INDEX') {
118
201
  const name = `${o.table}__${o.name}`;
119
202
  out.push(`CREATE ${o.def.unique ? 'UNIQUE ' : ''}INDEX ${q(name)} ON ${q(o.table)} (${o.def.fields.map(q).join(', ')})`);
@@ -125,7 +208,7 @@ export function renderSql(ops, adapter) {
125
208
  out.push(`ALTER TABLE ${q(o.table)} DROP COLUMN ${q(o.column)}`);
126
209
  }
127
210
  else if (o.op === 'ALTER_COLUMN_TYPE') {
128
- out.push(`-- type change ${o.table}.${o.column}: ${o.from} -> ${o.to} needs a hand-written data migration`);
211
+ throw new ManualMigrationRequiredError(`migration operation ${o.op} ${o.table}.${o.column} requires a hand-written data migration`, [o]);
129
212
  }
130
213
  else {
131
214
  out.push(`DROP TABLE ${q(o.table)}`);
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../../../../packages/ketjs/src/data/migrate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../../../../packages/ketjs/src/data/migrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Adapter } from '../types.ts';
2
+ import type { Schema } from './migrate.ts';
3
+ /** Return every modelled difference between the physical database and `target`. */
4
+ export declare function physicalSchemaIssues(adapter: Adapter, previous: Schema, target: Schema): Promise<string[]>;
5
+ //# sourceMappingURL=physical.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"physical.d.ts","sourceRoot":"","sources":["../../../../../packages/ketjs/src/data/physical.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAU,MAAM,EAAE,MAAM,cAAc,CAAA;AAqKlD,mFAAmF;AACnF,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,EAAE,CAAC,CAqEnB"}
@@ -0,0 +1,196 @@
1
+ // Physical-schema verification for adopting an application-owned migration.
2
+ //
3
+ // The ordinary migration marker is intentionally declarative: it records the
4
+ // manifest KetJS actually applied. A hand-written migration is the one exception,
5
+ // and it may advance that marker only after the adapter's catalog proves every
6
+ // modelled table, column, constraint, and index is at the requested target.
7
+ const truthy = (value) => value === true || value === 1 || value === '1' || value === 't' || value === 'true' || value === 'YES';
8
+ const normalizeType = (value) => {
9
+ const type = String(value ?? '')
10
+ .trim()
11
+ .toLowerCase()
12
+ .replace(/\s+/g, ' ')
13
+ .replace(/\s+primary key$/, '');
14
+ const aliases = {
15
+ int8: 'bigint',
16
+ float8: 'double precision',
17
+ timestamptz: 'timestamp with time zone',
18
+ decimal: 'numeric',
19
+ };
20
+ return aliases[type] ?? type;
21
+ };
22
+ const expectedType = (adapter, column) => normalizeType(adapter.columnSql(column));
23
+ async function inspectSqliteTable(adapter, table) {
24
+ const q = adapter.quoteIdent;
25
+ const rows = await adapter.all(`PRAGMA table_info(${q(table)})`);
26
+ if (!rows.length)
27
+ return null;
28
+ const columns = {};
29
+ for (const row of rows) {
30
+ const name = String(row.name);
31
+ const primary = truthy(row.pk);
32
+ columns[name] = {
33
+ type: normalizeType(row.type),
34
+ // SQLite reports `notnull = 0` for a generated TEXT PRIMARY KEY. Treat the
35
+ // primary-key contract as required while checking PK identity separately.
36
+ nullable: !truthy(row.notnull) && !primary,
37
+ primary,
38
+ };
39
+ }
40
+ const indexes = {};
41
+ for (const row of await adapter.all(`PRAGMA index_list(${q(table)})`)) {
42
+ const name = String(row.name);
43
+ const fieldRows = (await adapter.all(`PRAGMA index_info(${q(name)})`)).sort((a, b) => Number(a.seqno) - Number(b.seqno));
44
+ const expression = fieldRows.some((field) => Number(field.cid) === -2);
45
+ const fields = fieldRows.map((field) => (Number(field.cid) === -2 ? '<expression>' : String(field.name)));
46
+ indexes[name] = {
47
+ fields,
48
+ unique: truthy(row.unique),
49
+ expression,
50
+ partial: truthy(row.partial),
51
+ valid: true,
52
+ ready: true,
53
+ live: true,
54
+ };
55
+ }
56
+ return { columns, indexes };
57
+ }
58
+ async function inspectPostgresTable(adapter, table) {
59
+ const rows = await adapter.all(`SELECT column_name, data_type, is_nullable
60
+ FROM information_schema.columns
61
+ WHERE table_schema = 'public' AND table_name = $1
62
+ ORDER BY ordinal_position`, [table]);
63
+ if (!rows.length)
64
+ return null;
65
+ const primary = new Set((await adapter.all(`SELECT kcu.column_name
66
+ FROM information_schema.table_constraints tc
67
+ JOIN information_schema.key_column_usage kcu
68
+ ON kcu.constraint_name = tc.constraint_name
69
+ AND kcu.constraint_schema = tc.constraint_schema
70
+ WHERE tc.table_schema = 'public'
71
+ AND tc.table_name = $1
72
+ AND tc.constraint_type = 'PRIMARY KEY'
73
+ ORDER BY kcu.ordinal_position`, [table])).map((row) => String(row.column_name)));
74
+ const columns = {};
75
+ for (const row of rows) {
76
+ const name = String(row.column_name);
77
+ columns[name] = {
78
+ type: normalizeType(row.data_type),
79
+ nullable: String(row.is_nullable).toUpperCase() === 'YES',
80
+ primary: primary.has(name),
81
+ };
82
+ }
83
+ const indexRows = await adapter.all(`SELECT index_class.relname AS index_name,
84
+ index_meta.indisunique AS is_unique,
85
+ index_meta.indpred IS NOT NULL AS is_partial,
86
+ index_meta.indisvalid AS is_valid,
87
+ index_meta.indisready AS is_ready,
88
+ index_meta.indislive AS is_live,
89
+ indexed_key.attnum = 0 AS is_expression,
90
+ attribute.attname AS column_name,
91
+ indexed_key.ordinality AS position
92
+ FROM pg_class table_class
93
+ JOIN pg_namespace namespace ON namespace.oid = table_class.relnamespace
94
+ JOIN pg_index index_meta ON index_meta.indrelid = table_class.oid
95
+ JOIN pg_class index_class ON index_class.oid = index_meta.indexrelid
96
+ JOIN LATERAL unnest(index_meta.indkey) WITH ORDINALITY AS indexed_key(attnum, ordinality) ON true
97
+ LEFT JOIN pg_attribute attribute
98
+ ON attribute.attrelid = table_class.oid AND attribute.attnum = indexed_key.attnum
99
+ WHERE namespace.nspname = 'public'
100
+ AND table_class.relname = $1
101
+ AND NOT index_meta.indisprimary
102
+ ORDER BY index_class.relname, indexed_key.ordinality`, [table]);
103
+ const indexes = {};
104
+ for (const row of indexRows) {
105
+ const name = String(row.index_name);
106
+ const expression = truthy(row.is_expression);
107
+ const index = (indexes[name] ??= {
108
+ fields: [],
109
+ unique: truthy(row.is_unique),
110
+ expression: false,
111
+ partial: truthy(row.is_partial),
112
+ valid: truthy(row.is_valid),
113
+ ready: truthy(row.is_ready),
114
+ live: truthy(row.is_live),
115
+ });
116
+ index.expression ||= expression;
117
+ index.fields[Number(row.position) - 1] = expression ? '<expression>' : String(row.column_name);
118
+ }
119
+ return { columns, indexes };
120
+ }
121
+ const inspectTable = (adapter, table) => {
122
+ if (adapter.name === 'sqlite')
123
+ return inspectSqliteTable(adapter, table);
124
+ if (adapter.name === 'postgres')
125
+ return inspectPostgresTable(adapter, table);
126
+ throw new Error(`adapter "${adapter.name}" cannot verify a physical schema safely; catalog verification supports sqlite and postgres`);
127
+ };
128
+ const describeFields = (fields) => `(${fields.join(', ')})`;
129
+ /** Return every modelled difference between the physical database and `target`. */
130
+ export async function physicalSchemaIssues(adapter, previous, target) {
131
+ const issues = [];
132
+ const tableNames = new Set([...Object.keys(previous.tables), ...Object.keys(target.tables)]);
133
+ for (const tableName of [...tableNames].sort()) {
134
+ const before = previous.tables[tableName];
135
+ const expected = target.tables[tableName];
136
+ const actual = await inspectTable(adapter, tableName);
137
+ if (!expected) {
138
+ if (actual)
139
+ issues.push(`table ${tableName} still exists; expected it to be removed`);
140
+ continue;
141
+ }
142
+ if (!actual) {
143
+ issues.push(`table ${tableName} is missing`);
144
+ continue;
145
+ }
146
+ for (const [columnName, column] of Object.entries(expected.columns)) {
147
+ const held = actual.columns[columnName];
148
+ const path = `${tableName}.${columnName}`;
149
+ if (!held) {
150
+ issues.push(`column ${path} is missing`);
151
+ continue;
152
+ }
153
+ const type = expectedType(adapter, column);
154
+ if (held.type !== type)
155
+ issues.push(`column ${path} has type ${held.type || '(none)'}; expected ${type}`);
156
+ if (held.nullable !== column.optional)
157
+ issues.push(`column ${path} is ${held.nullable ? 'nullable' : 'NOT NULL'}; expected ${column.optional ? 'nullable' : 'NOT NULL'}`);
158
+ const primary = column.base === 'id';
159
+ if (held.primary !== primary)
160
+ issues.push(`column ${path} is ${held.primary ? '' : 'not '}the expected primary key`);
161
+ }
162
+ for (const columnName of Object.keys(before?.columns ?? {})) {
163
+ if (!expected.columns[columnName] && actual.columns[columnName])
164
+ issues.push(`column ${tableName}.${columnName} still exists; expected it to be removed`);
165
+ }
166
+ for (const [name, index] of Object.entries(expected.indexes ?? {})) {
167
+ const physicalName = `${tableName}__${name}`;
168
+ const held = actual.indexes[physicalName];
169
+ if (!held) {
170
+ issues.push(`index ${physicalName} is missing`);
171
+ continue;
172
+ }
173
+ if (held.unique !== index.unique)
174
+ issues.push(`index ${physicalName} is ${held.unique ? 'unique' : 'non-unique'}; expected ${index.unique ? 'unique' : 'non-unique'}`);
175
+ if (held.expression)
176
+ issues.push(`index ${physicalName} contains expressions; expected only model fields`);
177
+ if (held.partial)
178
+ issues.push(`index ${physicalName} is partial; expected an unfiltered index`);
179
+ if (!held.valid)
180
+ issues.push(`index ${physicalName} is invalid`);
181
+ if (!held.ready)
182
+ issues.push(`index ${physicalName} is not ready for inserts`);
183
+ if (!held.live)
184
+ issues.push(`index ${physicalName} is being dropped`);
185
+ if (held.fields.join('\0') !== index.fields.join('\0'))
186
+ issues.push(`index ${physicalName} covers ${describeFields(held.fields)}; expected ${describeFields(index.fields)}`);
187
+ }
188
+ for (const name of Object.keys(before?.indexes ?? {})) {
189
+ const physicalName = `${tableName}__${name}`;
190
+ if (!expected.indexes?.[name] && actual.indexes[physicalName])
191
+ issues.push(`index ${physicalName} still exists; expected it to be removed`);
192
+ }
193
+ }
194
+ return issues;
195
+ }
196
+ //# sourceMappingURL=physical.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"physical.js","sourceRoot":"","sources":["../../../../../../packages/ketjs/src/data/physical.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import type { Adapter } from '../types.ts';
2
2
  export type PoolOptions = {
3
- create(key: string): Adapter;
3
+ /** Create a fresh adapter for this pool entry; the pool owns its open/close lifecycle. */
4
+ create(key: string): Adapter | Promise<Adapter>;
4
5
  /** How many databases may stay open at once. */
5
6
  max?: number;
6
7
  /** Close an idle database after this long. */
@@ -1 +1 @@
1
- {"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../../../../packages/ketjs/src/data/pool.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;IAC5B,gDAAgD;IAChD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB,CAAA;AAID,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACtC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACtE,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;IAC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,WAAW,GAAG,WAAW,CAiF7D"}
1
+ {"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../../../../packages/ketjs/src/data/pool.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,MAAM,MAAM,WAAW,GAAG;IACxB,0FAA0F;IAC1F,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/C,gDAAgD;IAChD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB,CAAA;AAID,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACtC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACtE,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;IAC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,WAAW,GAAG,WAAW,CAiM7D"}