callman-core 1.29.0 → 1.30.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 (200) hide show
  1. package/dist/ai/prompts/diagram.d.ts.map +1 -1
  2. package/dist/ai/prompts/diagram.js +24 -7
  3. package/dist/ai/prompts/diagram.js.map +1 -1
  4. package/dist/ai/types.d.ts +1 -1
  5. package/dist/ai/types.d.ts.map +1 -1
  6. package/dist/diagram/componentCatalog.d.ts +3 -0
  7. package/dist/diagram/componentCatalog.d.ts.map +1 -1
  8. package/dist/diagram/componentCatalog.js +5 -1
  9. package/dist/diagram/componentCatalog.js.map +1 -1
  10. package/dist/diagram/database/derive.d.ts +14 -0
  11. package/dist/diagram/database/derive.d.ts.map +1 -0
  12. package/dist/diagram/database/derive.js +114 -0
  13. package/dist/diagram/database/derive.js.map +1 -0
  14. package/dist/diagram/database/diff.d.ts +48 -0
  15. package/dist/diagram/database/diff.d.ts.map +1 -0
  16. package/dist/diagram/database/diff.js +109 -0
  17. package/dist/diagram/database/diff.js.map +1 -0
  18. package/dist/diagram/database/edit.d.ts +113 -0
  19. package/dist/diagram/database/edit.d.ts.map +1 -0
  20. package/dist/diagram/database/edit.js +359 -0
  21. package/dist/diagram/database/edit.js.map +1 -0
  22. package/dist/diagram/database/fromSchema.d.ts +12 -0
  23. package/dist/diagram/database/fromSchema.d.ts.map +1 -0
  24. package/dist/diagram/database/fromSchema.js +182 -0
  25. package/dist/diagram/database/fromSchema.js.map +1 -0
  26. package/dist/diagram/database/index.d.ts +9 -0
  27. package/dist/diagram/database/index.d.ts.map +1 -0
  28. package/dist/diagram/database/index.js +14 -0
  29. package/dist/diagram/database/index.js.map +1 -0
  30. package/dist/diagram/database/model.d.ts +93 -0
  31. package/dist/diagram/database/model.d.ts.map +1 -0
  32. package/dist/diagram/database/model.js +294 -0
  33. package/dist/diagram/database/model.js.map +1 -0
  34. package/dist/diagram/database/patch.d.ts +14 -0
  35. package/dist/diagram/database/patch.d.ts.map +1 -0
  36. package/dist/diagram/database/patch.js +186 -0
  37. package/dist/diagram/database/patch.js.map +1 -0
  38. package/dist/diagram/database/place.d.ts +4 -0
  39. package/dist/diagram/database/place.d.ts.map +1 -0
  40. package/dist/diagram/database/place.js +22 -0
  41. package/dist/diagram/database/place.js.map +1 -0
  42. package/dist/diagram/database/types.d.ts +50 -0
  43. package/dist/diagram/database/types.d.ts.map +1 -0
  44. package/dist/diagram/database/types.js +106 -0
  45. package/dist/diagram/database/types.js.map +1 -0
  46. package/dist/diagram/index.d.ts +1 -0
  47. package/dist/diagram/index.d.ts.map +1 -1
  48. package/dist/diagram/index.js +1 -0
  49. package/dist/diagram/index.js.map +1 -1
  50. package/dist/diagram/layout.d.ts +1 -0
  51. package/dist/diagram/layout.d.ts.map +1 -1
  52. package/dist/diagram/layout.js +2 -1
  53. package/dist/diagram/layout.js.map +1 -1
  54. package/dist/diagram/ops.d.ts +1 -1
  55. package/dist/diagram/ops.d.ts.map +1 -1
  56. package/dist/diagram/ops.js +42 -0
  57. package/dist/diagram/ops.js.map +1 -1
  58. package/dist/diagram/opsReference.d.ts +1 -1
  59. package/dist/diagram/opsReference.d.ts.map +1 -1
  60. package/dist/diagram/opsReference.js +9 -0
  61. package/dist/diagram/opsReference.js.map +1 -1
  62. package/dist/diagram/patchInput.d.ts +65 -1
  63. package/dist/diagram/patchInput.d.ts.map +1 -1
  64. package/dist/diagram/patchInput.js +414 -11
  65. package/dist/diagram/patchInput.js.map +1 -1
  66. package/dist/diagram/schema.d.ts +2 -2
  67. package/dist/diagram/schema.d.ts.map +1 -1
  68. package/dist/diagram/schema.js +3 -3
  69. package/dist/diagram/schema.js.map +1 -1
  70. package/dist/diagram/views.d.ts +13 -0
  71. package/dist/diagram/views.d.ts.map +1 -1
  72. package/dist/diagram/views.js +49 -0
  73. package/dist/diagram/views.js.map +1 -1
  74. package/dist/host/db/introspection/index.d.ts +9 -0
  75. package/dist/host/db/introspection/index.d.ts.map +1 -0
  76. package/dist/host/db/introspection/index.js +35 -0
  77. package/dist/host/db/introspection/index.js.map +1 -0
  78. package/dist/host/db/introspection/mongo.d.ts +7 -0
  79. package/dist/host/db/introspection/mongo.d.ts.map +1 -0
  80. package/dist/host/db/introspection/mongo.js +183 -0
  81. package/dist/host/db/introspection/mongo.js.map +1 -0
  82. package/dist/host/db/introspection/mssql.d.ts +6 -0
  83. package/dist/host/db/introspection/mssql.d.ts.map +1 -0
  84. package/dist/host/db/introspection/mssql.js +211 -0
  85. package/dist/host/db/introspection/mssql.js.map +1 -0
  86. package/dist/host/db/introspection/mysql.d.ts +5 -0
  87. package/dist/host/db/introspection/mysql.d.ts.map +1 -0
  88. package/dist/host/db/introspection/mysql.js +163 -0
  89. package/dist/host/db/introspection/mysql.js.map +1 -0
  90. package/dist/host/db/introspection/oracle.d.ts +12 -0
  91. package/dist/host/db/introspection/oracle.d.ts.map +1 -0
  92. package/dist/host/db/introspection/oracle.js +225 -0
  93. package/dist/host/db/introspection/oracle.js.map +1 -0
  94. package/dist/host/db/introspection/postgres.d.ts +5 -0
  95. package/dist/host/db/introspection/postgres.d.ts.map +1 -0
  96. package/dist/host/db/introspection/postgres.js +172 -0
  97. package/dist/host/db/introspection/postgres.js.map +1 -0
  98. package/dist/host/db/introspection/shared.d.ts +29 -0
  99. package/dist/host/db/introspection/shared.d.ts.map +1 -0
  100. package/dist/host/db/introspection/shared.js +119 -0
  101. package/dist/host/db/introspection/shared.js.map +1 -0
  102. package/dist/host/db/introspection/types.d.ts +58 -0
  103. package/dist/host/db/introspection/types.d.ts.map +1 -0
  104. package/dist/host/db/introspection/types.js +6 -0
  105. package/dist/host/db/introspection/types.js.map +1 -0
  106. package/dist/host/db/mongoAdapter.d.ts +1 -0
  107. package/dist/host/db/mongoAdapter.d.ts.map +1 -1
  108. package/dist/host/db/mongoAdapter.js +13 -0
  109. package/dist/host/db/mongoAdapter.js.map +1 -1
  110. package/dist/host/db/mssqlAdapter.d.ts +1 -0
  111. package/dist/host/db/mssqlAdapter.d.ts.map +1 -1
  112. package/dist/host/db/mssqlAdapter.js +3 -1
  113. package/dist/host/db/mssqlAdapter.js.map +1 -1
  114. package/dist/host/db/mysqlAdapter.d.ts +1 -0
  115. package/dist/host/db/mysqlAdapter.d.ts.map +1 -1
  116. package/dist/host/db/mysqlAdapter.js +11 -0
  117. package/dist/host/db/mysqlAdapter.js.map +1 -1
  118. package/dist/host/db/oracleAdapter.d.ts +1 -0
  119. package/dist/host/db/oracleAdapter.d.ts.map +1 -1
  120. package/dist/host/db/oracleAdapter.js +22 -0
  121. package/dist/host/db/oracleAdapter.js.map +1 -1
  122. package/dist/host/db/postgresAdapter.d.ts +1 -0
  123. package/dist/host/db/postgresAdapter.d.ts.map +1 -1
  124. package/dist/host/db/postgresAdapter.js +13 -0
  125. package/dist/host/db/postgresAdapter.js.map +1 -1
  126. package/dist/host/db/queryExecutor.d.ts +2 -1
  127. package/dist/host/db/queryExecutor.d.ts.map +1 -1
  128. package/dist/host/db/queryExecutor.js +1 -1
  129. package/dist/host/db/queryExecutor.js.map +1 -1
  130. package/dist/host/index.d.ts +7 -0
  131. package/dist/host/index.d.ts.map +1 -1
  132. package/dist/host/index.js +9 -0
  133. package/dist/host/index.js.map +1 -1
  134. package/dist-cjs/ai/prompts/diagram.js +23 -6
  135. package/dist-cjs/ai/prompts/diagram.js.map +1 -1
  136. package/dist-cjs/diagram/componentCatalog.js +5 -1
  137. package/dist-cjs/diagram/componentCatalog.js.map +1 -1
  138. package/dist-cjs/diagram/database/derive.js +119 -0
  139. package/dist-cjs/diagram/database/derive.js.map +1 -0
  140. package/dist-cjs/diagram/database/diff.js +115 -0
  141. package/dist-cjs/diagram/database/diff.js.map +1 -0
  142. package/dist-cjs/diagram/database/edit.js +366 -0
  143. package/dist-cjs/diagram/database/edit.js.map +1 -0
  144. package/dist-cjs/diagram/database/fromSchema.js +188 -0
  145. package/dist-cjs/diagram/database/fromSchema.js.map +1 -0
  146. package/dist-cjs/diagram/database/index.js +32 -0
  147. package/dist-cjs/diagram/database/index.js.map +1 -0
  148. package/dist-cjs/diagram/database/model.js +311 -0
  149. package/dist-cjs/diagram/database/model.js.map +1 -0
  150. package/dist-cjs/diagram/database/patch.js +190 -0
  151. package/dist-cjs/diagram/database/patch.js.map +1 -0
  152. package/dist-cjs/diagram/database/place.js +26 -0
  153. package/dist-cjs/diagram/database/place.js.map +1 -0
  154. package/dist-cjs/diagram/database/types.js +122 -0
  155. package/dist-cjs/diagram/database/types.js.map +1 -0
  156. package/dist-cjs/diagram/index.js +1 -0
  157. package/dist-cjs/diagram/index.js.map +1 -1
  158. package/dist-cjs/diagram/layout.js +3 -2
  159. package/dist-cjs/diagram/layout.js.map +1 -1
  160. package/dist-cjs/diagram/ops.js +42 -0
  161. package/dist-cjs/diagram/ops.js.map +1 -1
  162. package/dist-cjs/diagram/opsReference.js +9 -0
  163. package/dist-cjs/diagram/opsReference.js.map +1 -1
  164. package/dist-cjs/diagram/patchInput.js +414 -11
  165. package/dist-cjs/diagram/patchInput.js.map +1 -1
  166. package/dist-cjs/diagram/schema.js +3 -3
  167. package/dist-cjs/diagram/schema.js.map +1 -1
  168. package/dist-cjs/diagram/views.js +51 -1
  169. package/dist-cjs/diagram/views.js.map +1 -1
  170. package/dist-cjs/host/db/introspection/index.js +59 -0
  171. package/dist-cjs/host/db/introspection/index.js.map +1 -0
  172. package/dist-cjs/host/db/introspection/mongo.js +189 -0
  173. package/dist-cjs/host/db/introspection/mongo.js.map +1 -0
  174. package/dist-cjs/host/db/introspection/mssql.js +216 -0
  175. package/dist-cjs/host/db/introspection/mssql.js.map +1 -0
  176. package/dist-cjs/host/db/introspection/mysql.js +167 -0
  177. package/dist-cjs/host/db/introspection/mysql.js.map +1 -0
  178. package/dist-cjs/host/db/introspection/oracle.js +230 -0
  179. package/dist-cjs/host/db/introspection/oracle.js.map +1 -0
  180. package/dist-cjs/host/db/introspection/postgres.js +176 -0
  181. package/dist-cjs/host/db/introspection/postgres.js.map +1 -0
  182. package/dist-cjs/host/db/introspection/shared.js +133 -0
  183. package/dist-cjs/host/db/introspection/shared.js.map +1 -0
  184. package/dist-cjs/host/db/introspection/types.js +7 -0
  185. package/dist-cjs/host/db/introspection/types.js.map +1 -0
  186. package/dist-cjs/host/db/mongoAdapter.js +15 -1
  187. package/dist-cjs/host/db/mongoAdapter.js.map +1 -1
  188. package/dist-cjs/host/db/mssqlAdapter.js +5 -2
  189. package/dist-cjs/host/db/mssqlAdapter.js.map +1 -1
  190. package/dist-cjs/host/db/mysqlAdapter.js +13 -1
  191. package/dist-cjs/host/db/mysqlAdapter.js.map +1 -1
  192. package/dist-cjs/host/db/oracleAdapter.js +24 -1
  193. package/dist-cjs/host/db/oracleAdapter.js.map +1 -1
  194. package/dist-cjs/host/db/postgresAdapter.js +15 -1
  195. package/dist-cjs/host/db/postgresAdapter.js.map +1 -1
  196. package/dist-cjs/host/db/queryExecutor.js +5 -4
  197. package/dist-cjs/host/db/queryExecutor.js.map +1 -1
  198. package/dist-cjs/host/index.js +24 -1
  199. package/dist-cjs/host/index.js.map +1 -1
  200. package/package.json +1 -1
@@ -27,6 +27,20 @@ const BPMN_SECTION = () => [
27
27
  " 100x80, gateways 50x50, a 60px gap, one row per branch) — the app writes the BPMN XML.",
28
28
  "- EDIT mode: emit ops; new nodes need no position (the app places them after their predecessor).",
29
29
  ];
30
+ const DATABASE_SECTION = () => [
31
+ "",
32
+ "THIS IS A DATABASE DIAGRAM (an entity-relationship diagram of a database schema, not an architecture diagram):",
33
+ "- Node `type` MUST be db.table, db.view or db.collection (MongoDB). Never use catalog types here.",
34
+ "- CREATE mode: each node's `label` is the table name and `data.db` holds the schema facts:",
35
+ ' {"db": {"schema"?: "public", "columns": [{"name": "id", "dataType": "uuid", "primaryKey": true}, {"name": "email", "dataType": "varchar(255)", "unique": true}, {"name": "created_at", "dataType": "timestamp", "nullable": false}], "comment"?: "…"}}.',
36
+ " Use the database's own type names. Mark primary keys, unique columns, nullable columns, defaults and foreign-key columns (name them <parent>_id).",
37
+ "- Edges are RELATIONSHIPS: `source` is the child (foreign-key) table, `target` the parent; `data.db` names the columns and the cardinality:",
38
+ ' {"db": {"sourceColumns": ["user_id"], "targetColumns": ["id"], "cardinality": "N:1"}} (also "1:1", "1:N", "N:M"). No markers/routing needed.',
39
+ "- Sizes/positions are optional (the app sizes tables from their columns and lays the diagram out).",
40
+ "- EDIT mode: use the DATABASE OPS (addTable, addColumn, alterColumn, addRelationship, …) — they edit the schema by meaning.",
41
+ " The CURRENT DIAGRAM block is the schema view: tables with columns and keys, relationships as table.column pairs, hidden tables.",
42
+ "- Model what a real database of this domain has: keys, timestamps, status columns, junction tables for N:M, sensible types.",
43
+ ];
30
44
  const EDIT_AS_OPS_SECTION = (kind) => [
31
45
  "",
32
46
  "EDIT MODE OUTPUT (this session): do NOT re-emit the document. Respond with",
@@ -35,7 +49,7 @@ const EDIT_AS_OPS_SECTION = (kind) => [
35
49
  "without geometry — positions are the app's business. CREATE mode is unchanged: emit the",
36
50
  "whole document under `diagram` and leave `ops` null.",
37
51
  "",
38
- (0, opsReference_js_1.renderDiagramOpsReference)(kind === "bpmn" ? "bpmn" : "canvas"),
52
+ (0, opsReference_js_1.renderDiagramOpsReference)(kind === "bpmn" ? "bpmn" : kind === "database" ? "database" : "canvas"),
39
53
  ];
40
54
  const buildDiagramSystemPrompt = (options = {}) => [
41
55
  "You are a STAFF-level software/systems architect and domain expert embedded in a visual",
@@ -137,6 +151,7 @@ const buildDiagramSystemPrompt = (options = {}) => [
137
151
  " try to hand-pack children into a box; let the layout do it.",
138
152
  "- Edges may connect a child to a node outside its container, or to the container itself.",
139
153
  ...(options.diagramKind === "bpmn" ? BPMN_SECTION() : []),
154
+ ...(options.diagramKind === "database" ? DATABASE_SECTION() : []),
140
155
  ...(options.editOutput === "ops" ? EDIT_AS_OPS_SECTION(options.diagramKind) : []),
141
156
  ].join("\n");
142
157
  exports.buildDiagramSystemPrompt = buildDiagramSystemPrompt;
@@ -147,22 +162,24 @@ const buildDiagramUserPrompt = ({ instruction, mode, document, components = [],
147
162
  // Ops mode: the model sees the graph (ids, types, labels, containers,
148
163
  // connections) and never the geometry — ~70% smaller and nothing to scramble.
149
164
  const documentBlock = mode === "edit" && document
150
- ? editOutput === "ops"
151
- ? JSON.stringify((0, views_js_1.diagramGraphView)(document))
152
- : JSON.stringify(document)
165
+ ? diagramKind === "database"
166
+ ? JSON.stringify((0, views_js_1.databaseSchemaView)(document))
167
+ : editOutput === "ops"
168
+ ? JSON.stringify((0, views_js_1.diagramGraphView)(document))
169
+ : JSON.stringify(document)
153
170
  : "(none — creating a new diagram)";
154
171
  const canvasLine = canvas && (canvas.width || canvas.height)
155
172
  ? `CANVAS SIZE: ${Math.round(canvas.width ?? 0)} x ${Math.round(canvas.height ?? 0)}`
156
173
  : null;
157
174
  return [
158
175
  `MODE: ${mode}`,
159
- diagramKind === "bpmn" ? "DIAGRAM KIND: bpmn (BPMN 2.0 process; use bpmn.* types only)" : null,
176
+ diagramKind === "bpmn" ? "DIAGRAM KIND: bpmn (BPMN 2.0 process; use bpmn.* types only)" : diagramKind === "database" ? "DIAGRAM KIND: database (entity-relationship diagram; db.table / db.view / db.collection with data.db columns; relationships as edges)" : null,
160
177
  canvasLine,
161
178
  "",
162
179
  "AVAILABLE COMPONENT TYPES (type — label (category)):",
163
180
  componentLines,
164
181
  "",
165
- editOutput === "ops" ? "CURRENT DIAGRAM (edit mode; graph view — ids, types, labels, containers, connections):" : "CURRENT DIAGRAM (edit mode; full document JSON):",
182
+ diagramKind === "database" ? "CURRENT DIAGRAM (edit mode; schema view — tables, columns, keys, relationships, hidden tables):" : editOutput === "ops" ? "CURRENT DIAGRAM (edit mode; graph view — ids, types, labels, containers, connections):" : "CURRENT DIAGRAM (edit mode; full document JSON):",
166
183
  documentBlock,
167
184
  "",
168
185
  `SELECTED CELL IDS: ${selection.length ? selection.join(", ") : "(none)"}`,
@@ -1 +1 @@
1
- {"version":3,"file":"diagram.js","sourceRoot":"","sources":["../../../src/ai/prompts/diagram.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diagram.js","sourceRoot":"","sources":["../../../src/ai/prompts/diagram.ts"],"names":[],"mappings":"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"}
@@ -64,11 +64,15 @@ const searchDiagramComponents = (query) => {
64
64
  };
65
65
  exports.searchDiagramComponents = searchDiagramComponents;
66
66
  // Unknown `type`s in a document (each reported once, in first-seen order).
67
+ // A source-backed diagram brings its own vocabulary: bpmn.* on a BPMN
68
+ // diagram, db.* on a database diagram (neither lives in the catalog).
67
69
  const validateComponentTypes = (doc) => {
68
70
  const unknown = [];
69
71
  const seen = new Set();
72
+ const format = doc.source?.format;
73
+ const ownVocabulary = (type) => (format === "bpmn" && type.startsWith("bpmn.")) || (format === "database" && (type === "db.table" || type === "db.view" || type === "db.collection"));
70
74
  for (const node of doc.nodes) {
71
- if (byType.has(node.type) || seen.has(node.type))
75
+ if (byType.has(node.type) || ownVocabulary(node.type) || seen.has(node.type))
72
76
  continue;
73
77
  seen.add(node.type);
74
78
  unknown.push(node.type);
@@ -1 +1 @@
1
- {"version":3,"file":"componentCatalog.js","sourceRoot":"","sources":["../../src/diagram/componentCatalog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"componentCatalog.js","sourceRoot":"","sources":["../../src/diagram/componentCatalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ // Model → diagram: the nodes and edges a database model implies, as ops
3
+ // against the current document (mirror of bpmn/derive: what is missing is
4
+ // added, what is gone is removed, what changed is updated — positions are
5
+ // never touched except for brand-new tables, which the host lays out).
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.syncOpsFromDatabase = exports.parseDatabaseSource = void 0;
8
+ const model_js_1 = require("./model.js");
9
+ const types_js_1 = require("./types.js");
10
+ const parseDatabaseSource = (text) => (0, model_js_1.parseDatabaseModel)(text);
11
+ exports.parseDatabaseSource = parseDatabaseSource;
12
+ const sameJson = (a, b) => JSON.stringify(a ?? null) === JSON.stringify(b ?? null);
13
+ const syncOpsFromDatabase = (doc, model) => {
14
+ const ops = [];
15
+ const addedNodeIds = [];
16
+ const removedNodeIds = [];
17
+ const unpositionedNodeIds = [];
18
+ const existingNodes = new Map(doc.nodes.map((node) => [node.id, node]));
19
+ const existingEdges = new Map(doc.edges.map((edge) => [edge.id, edge]));
20
+ const wantedEntities = new Map(model.entities.map((entity) => [entity.id, entity]));
21
+ const wantedRelationships = new Map(model.relationships.map((relationship) => [relationship.id, relationship]));
22
+ // Edges of relationships that are gone (only the diagram's own database edges).
23
+ for (const edge of doc.edges) {
24
+ if (!wantedRelationships.has(edge.id) && (0, types_js_1.dbEdgeData)(edge.data))
25
+ ops.push({ op: "removeEdge", id: edge.id });
26
+ }
27
+ // Tables that are gone.
28
+ for (const node of doc.nodes) {
29
+ if ((0, types_js_1.isDatabaseType)(node.type) && !wantedEntities.has(node.id)) {
30
+ ops.push({ op: "removeNode", id: node.id, children: "lift" });
31
+ removedNodeIds.push(node.id);
32
+ }
33
+ }
34
+ for (const entity of model.entities) {
35
+ const existing = existingNodes.get(entity.id);
36
+ const type = (0, types_js_1.databaseTypeForKind)(entity.kind);
37
+ const data = { name: entity.name, ...(entity.schema ? { schema: entity.schema } : {}), kind: entity.kind, columns: entity.columns.length };
38
+ const label = (0, model_js_1.entityQualifiedName)(entity);
39
+ if (!existing) {
40
+ const node = {
41
+ id: entity.id,
42
+ type,
43
+ position: { x: 0, y: 0 },
44
+ size: (0, types_js_1.databaseEntitySize)(entity),
45
+ label,
46
+ data: { db: data },
47
+ };
48
+ ops.push({ op: "addNode", node });
49
+ addedNodeIds.push(entity.id);
50
+ unpositionedNodeIds.push(entity.id);
51
+ continue;
52
+ }
53
+ const changes = {};
54
+ if (existing.type !== type)
55
+ changes.type = type;
56
+ if ((existing.label ?? null) !== label)
57
+ changes.label = label;
58
+ const previousData = (0, types_js_1.dbNodeData)(existing.data);
59
+ if (!sameJson(previousData, data) || existing.data?.db !== undefined && existing.data.db.columnInputs !== undefined)
60
+ changes.data = { db: data };
61
+ if (Object.keys(changes).length > 0)
62
+ ops.push({ op: "updateNode", id: entity.id, changes });
63
+ // Height follows the column count; the width is the user's (only widened
64
+ // when a new column no longer fits a never-resized box).
65
+ const previousCount = previousData?.columns ?? entity.columns.length;
66
+ if (previousCount !== entity.columns.length || !previousData) {
67
+ const auto = (0, types_js_1.databaseEntitySize)(entity, Boolean(existing.collapsed));
68
+ const height = (0, types_js_1.databaseNodeHeight)(entity.columns.length, Boolean(existing.collapsed));
69
+ const width = Math.max(existing.size.width, previousData ? 0 : auto.width);
70
+ if (Math.abs(height - existing.size.height) >= 0.5 || Math.abs(width - existing.size.width) >= 0.5) {
71
+ ops.push({ op: "resizeNode", id: entity.id, size: { width, height } });
72
+ }
73
+ }
74
+ }
75
+ for (const relationship of model.relationships) {
76
+ if (!wantedEntities.has(relationship.source.entityId) || !wantedEntities.has(relationship.target.entityId))
77
+ continue;
78
+ const existing = existingEdges.get(relationship.id);
79
+ const data = {
80
+ cardinality: relationship.cardinality,
81
+ kind: relationship.kind,
82
+ sourceColumns: [...relationship.source.columnIds],
83
+ targetColumns: [...relationship.target.columnIds],
84
+ ...(relationship.name ? { name: relationship.name } : {}),
85
+ };
86
+ const markers = (0, types_js_1.markersForRelationship)(model, relationship);
87
+ if (!existing) {
88
+ const edge = {
89
+ id: relationship.id,
90
+ source: relationship.source.entityId,
91
+ target: relationship.target.entityId,
92
+ ...(relationship.label ? { label: relationship.label } : {}),
93
+ markerStart: markers.markerStart,
94
+ markerEnd: markers.markerEnd,
95
+ data: { db: data },
96
+ };
97
+ ops.push({ op: "addEdge", edge });
98
+ continue;
99
+ }
100
+ const changes = {};
101
+ if (existing.source !== relationship.source.entityId)
102
+ changes.source = relationship.source.entityId;
103
+ if (existing.target !== relationship.target.entityId)
104
+ changes.target = relationship.target.entityId;
105
+ if ((relationship.label ?? null) !== (existing.label ?? null))
106
+ changes.label = relationship.label ?? null;
107
+ if ((existing.markerStart ?? null) !== markers.markerStart)
108
+ changes.markerStart = markers.markerStart;
109
+ if ((existing.markerEnd ?? null) !== markers.markerEnd)
110
+ changes.markerEnd = markers.markerEnd;
111
+ if (!sameJson((0, types_js_1.dbEdgeData)(existing.data), data))
112
+ changes.data = { db: data };
113
+ if (Object.keys(changes).length > 0)
114
+ ops.push({ op: "updateEdge", id: relationship.id, changes });
115
+ }
116
+ return { ops, addedNodeIds, removedNodeIds, unpositionedNodeIds };
117
+ };
118
+ exports.syncOpsFromDatabase = syncOpsFromDatabase;
119
+ //# sourceMappingURL=derive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derive.js","sourceRoot":"","sources":["../../../src/diagram/database/derive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ // Schema refresh: what changed between the diagram's model and a fresh
3
+ // introspection, and a new model that applies the changes the user accepted.
4
+ // Entities match by schema.table (case-insensitive), columns by name; ids of
5
+ // matched entities and columns are kept, so nothes and edges stay put.
6
+ // Manual relationships are never touched by a refresh.
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.applyDatabaseDiff = exports.diffDatabaseSchema = exports.diffDatabaseModels = void 0;
9
+ const fromSchema_js_1 = require("./fromSchema.js");
10
+ const model_js_1 = require("./model.js");
11
+ const lower = (value) => (value ?? "").toLowerCase();
12
+ const entityKey = (entity) => lower((0, model_js_1.entityQualifiedName)(entity));
13
+ const COLUMN_FIELDS = ["dataType", "nullable", "primaryKey", "unique", "defaultValue", "autoIncrement", "comment"];
14
+ const columnFieldsDiffer = (a, b) => COLUMN_FIELDS.filter((field) => (a[field] ?? null) !== (b[field] ?? null) && !(field === "nullable" && Boolean(a.nullable) === Boolean(b.nullable)));
15
+ const relationshipKey = (relationship) => `${relationship.source.entityId}[${[...relationship.source.columnIds].sort().join(",")}]->${relationship.target.entityId}[${[...relationship.target.columnIds].sort().join(",")}]`;
16
+ const diffDatabaseModels = (current, freshInput) => {
17
+ const fresh = (0, model_js_1.cloneDatabaseModel)(freshInput);
18
+ const currentByKey = new Map(current.entities.map((entity) => [entityKey(entity), entity]));
19
+ const freshByKey = new Map(fresh.entities.map((entity) => [entityKey(entity), entity]));
20
+ const addedEntities = fresh.entities.filter((entity) => !currentByKey.has(entityKey(entity)));
21
+ const removedEntities = current.entities.filter((entity) => !freshByKey.has(entityKey(entity)));
22
+ const changedEntities = [];
23
+ for (const entity of current.entities) {
24
+ const next = freshByKey.get(entityKey(entity));
25
+ if (!next)
26
+ continue;
27
+ const change = { entityId: entity.id, name: (0, model_js_1.entityQualifiedName)(entity), addedColumns: [], removedColumns: [], changedColumns: [] };
28
+ const nextByName = new Map(next.columns.map((column) => [lower(column.name), column]));
29
+ const currentByName = new Map(entity.columns.map((column) => [lower(column.name), column]));
30
+ for (const column of next.columns)
31
+ if (!currentByName.has(lower(column.name)))
32
+ change.addedColumns.push(column);
33
+ for (const column of entity.columns) {
34
+ const after = nextByName.get(lower(column.name));
35
+ if (!after) {
36
+ change.removedColumns.push(column);
37
+ continue;
38
+ }
39
+ const fields = columnFieldsDiffer(column, after);
40
+ if (fields.length > 0)
41
+ change.changedColumns.push({ columnId: column.id, name: column.name, before: column, after, fields });
42
+ }
43
+ if (entity.kind !== next.kind)
44
+ change.kindChanged = { before: entity.kind, after: next.kind };
45
+ if ((entity.comment ?? "") !== (next.comment ?? ""))
46
+ change.commentChanged = { before: entity.comment, after: next.comment };
47
+ const pkBefore = entity.columns.filter((column) => column.primaryKey).map((column) => column.name);
48
+ const pkAfter = next.columns.filter((column) => column.primaryKey).map((column) => column.name);
49
+ if (pkBefore.join(",") !== pkAfter.join(","))
50
+ change.primaryKeyChanged = { before: pkBefore, after: pkAfter };
51
+ if (change.addedColumns.length || change.removedColumns.length || change.changedColumns.length || change.kindChanged || change.commentChanged || change.primaryKeyChanged)
52
+ changedEntities.push(change);
53
+ }
54
+ const currentFkKeys = new Set(current.relationships.filter((relationship) => relationship.kind === "foreignKey").map(relationshipKey));
55
+ const freshFkKeys = new Set(fresh.relationships.filter((relationship) => relationship.kind === "foreignKey").map(relationshipKey));
56
+ const addedRelationships = fresh.relationships.filter((relationship) => relationship.kind === "foreignKey" && !currentFkKeys.has(relationshipKey(relationship)));
57
+ const removedRelationships = current.relationships.filter((relationship) => relationship.kind === "foreignKey" && !freshFkKeys.has(relationshipKey(relationship)));
58
+ const isEmpty = addedEntities.length === 0 && removedEntities.length === 0 && changedEntities.length === 0 && addedRelationships.length === 0 && removedRelationships.length === 0;
59
+ return { addedEntities, removedEntities, changedEntities, addedRelationships, removedRelationships, fresh, isEmpty };
60
+ };
61
+ exports.diffDatabaseModels = diffDatabaseModels;
62
+ // Introspection → fresh model aligned to the current ids → diff, in one call.
63
+ const diffDatabaseSchema = (current, schema, options = {}) => (0, exports.diffDatabaseModels)(current, (0, fromSchema_js_1.databaseModelFromSchema)(schema, { ...options, previous: current }));
64
+ exports.diffDatabaseSchema = diffDatabaseSchema;
65
+ const chosen = (ids, id) => ids === undefined || ids.includes(id);
66
+ // The current model with the accepted parts of the diff applied. Kept
67
+ // entities keep their ids and column ids (the diff's fresh model is already
68
+ // aligned); dropped entities take their relationships along.
69
+ const applyDatabaseDiff = (current, diff, selection = {}) => {
70
+ const model = (0, model_js_1.cloneDatabaseModel)(current);
71
+ const freshByKey = new Map(diff.fresh.entities.map((entity) => [entityKey(entity), entity]));
72
+ const removedIds = new Set(diff.removedEntities.filter((entity) => chosen(selection.removeEntities, entity.id)).map((entity) => entity.id));
73
+ model.entities = model.entities.filter((entity) => !removedIds.has(entity.id));
74
+ for (const change of diff.changedEntities) {
75
+ if (!chosen(selection.updateEntities, change.entityId))
76
+ continue;
77
+ const index = model.entities.findIndex((entity) => entity.id === change.entityId);
78
+ const next = index >= 0 ? freshByKey.get(entityKey(model.entities[index])) : undefined;
79
+ if (index < 0 || !next)
80
+ continue;
81
+ model.entities[index] = { ...next, id: model.entities[index].id };
82
+ }
83
+ for (const entity of diff.addedEntities)
84
+ if (chosen(selection.addEntities, entity.id) && !model.entities.some((existing) => existing.id === entity.id))
85
+ model.entities.push(entity);
86
+ const entityIds = new Set(model.entities.map((entity) => entity.id));
87
+ if (selection.applyRelationships !== false) {
88
+ const removedKeys = new Set(diff.removedRelationships.map(relationshipKey));
89
+ model.relationships = model.relationships.filter((relationship) => relationship.kind === "manual" || !removedKeys.has(relationshipKey(relationship)));
90
+ for (const relationship of diff.addedRelationships) {
91
+ if (model.relationships.some((existing) => existing.id === relationship.id || relationshipKey(existing) === relationshipKey(relationship)))
92
+ continue;
93
+ model.relationships.push(relationship);
94
+ }
95
+ }
96
+ // Ends must exist; columns must exist on their entity.
97
+ model.relationships = model.relationships
98
+ .filter((relationship) => entityIds.has(relationship.source.entityId) && entityIds.has(relationship.target.entityId))
99
+ .map((relationship) => {
100
+ const source = model.entities.find((entity) => entity.id === relationship.source.entityId);
101
+ const target = model.entities.find((entity) => entity.id === relationship.target.entityId);
102
+ return {
103
+ ...relationship,
104
+ source: { entityId: source.id, columnIds: relationship.source.columnIds.filter((id) => source.columns.some((column) => column.id === id)) },
105
+ target: { entityId: target.id, columnIds: relationship.target.columnIds.filter((id) => target.columns.some((column) => column.id === id)) },
106
+ };
107
+ });
108
+ if (diff.fresh.connection)
109
+ model.connection = { ...model.connection, ...diff.fresh.connection };
110
+ if (diff.fresh.dialect)
111
+ model.dialect = diff.fresh.dialect;
112
+ return model;
113
+ };
114
+ exports.applyDatabaseDiff = applyDatabaseDiff;
115
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../src/diagram/database/diff.ts"],"names":[],"mappings":";AAAA,uEAAuE;AACvE,6EAA6E;AAC7E,6EAA6E;AAC7E,uEAAuE;AACvE,uDAAuD;;;AAEvD,mDAAuF;AAEvF,yCAA8J;AAgC9J,MAAM,KAAK,GAAG,CAAC,KAAyB,EAAU,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AACjF,MAAM,SAAS,GAAG,CAAC,MAA+C,EAAU,EAAE,CAAC,KAAK,CAAC,IAAA,8BAAmB,EAAC,MAAM,CAAC,CAAC,CAAC;AAElH,MAAM,aAAa,GAA6B,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;AAE7I,MAAM,kBAAkB,GAAG,CAAC,CAAiB,EAAE,CAAiB,EAAY,EAAE,CAC5E,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,UAAU,IAAI,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAEvJ,MAAM,eAAe,GAAG,CAAC,YAAkC,EAAU,EAAE,CACrE,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,YAAY,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAE9K,MAAM,kBAAkB,GAAG,CAAC,OAAsB,EAAE,UAAyB,EAAgB,EAAE;IACpG,MAAM,KAAK,GAAG,IAAA,6BAAkB,EAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5F,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACxF,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC9F,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAChG,MAAM,eAAe,GAA2B,EAAE,CAAC;IACnD,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,MAAM,GAAyB,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAA,8BAAmB,EAAC,MAAM,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;QAC1J,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QACvF,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QAC5F,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAAE,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChH,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YACjD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACnC,SAAS;YACX,CAAC;YACD,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACjD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;gBAAE,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/H,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;YAAE,MAAM,CAAC,WAAW,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QAC9F,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;YAAE,MAAM,CAAC,cAAc,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QAC7H,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACnG,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChG,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,MAAM,CAAC,iBAAiB,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC9G,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,iBAAiB;YAAE,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1M,CAAC;IACD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;IACvI,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;IACnI,MAAM,kBAAkB,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACjK,MAAM,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACnK,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC,CAAC;IACnL,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACvH,CAAC,CAAC;AApCW,QAAA,kBAAkB,sBAoC7B;AAEF,8EAA8E;AACvE,MAAM,kBAAkB,GAAG,CAAC,OAAsB,EAAE,MAAgB,EAAE,UAAoD,EAAE,EAAgB,EAAE,CACnJ,IAAA,0BAAkB,EAAC,OAAO,EAAE,IAAA,uCAAuB,EAAC,MAAM,EAAE,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AADrF,QAAA,kBAAkB,sBACmE;AAYlG,MAAM,MAAM,GAAG,CAAC,GAAyB,EAAE,EAAU,EAAW,EAAE,CAAC,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAEzG,sEAAsE;AACtE,4EAA4E;AAC5E,6DAA6D;AACtD,MAAM,iBAAiB,GAAG,CAAC,OAAsB,EAAE,IAAkB,EAAE,YAAmC,EAAE,EAAiB,EAAE;IACpI,MAAM,KAAK,GAAG,IAAA,6BAAkB,EAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7F,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5I,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/E,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC;YAAE,SAAS;QACjE,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClF,MAAM,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvF,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI;YAAE,SAAS;QACjC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;IACpE,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,aAAa;QAAE,IAAI,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC;YAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpL,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACrE,IAAI,SAAS,CAAC,kBAAkB,KAAK,KAAK,EAAE,CAAC;QAC3C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;QAC5E,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACtJ,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACnD,IAAI,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,YAAY,CAAC,EAAE,IAAI,eAAe,CAAC,QAAQ,CAAC,KAAK,eAAe,CAAC,YAAY,CAAC,CAAC;gBAAE,SAAS;YACrJ,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IACD,uDAAuD;IACvD,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa;SACtC,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;SACpH,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE;QACpB,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAmB,CAAC;QAC7G,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAmB,CAAC;QAC7G,OAAO;YACL,GAAG,YAAY;YACf,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE;YAC3I,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE;SAC5I,CAAC;IACJ,CAAC,CAAC,CAAC;IACL,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU;QAAE,KAAK,CAAC,UAAU,GAAG,EAAE,GAAG,KAAK,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;IAChG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO;QAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;IAC3D,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AArCW,QAAA,iBAAiB,qBAqC5B"}