mythik 0.1.2 → 0.1.4

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 (104) hide show
  1. package/README.md +64 -16
  2. package/dist/actions/dispatcher.d.ts.map +1 -1
  3. package/dist/actions/dispatcher.js +21 -2
  4. package/dist/actions/dispatcher.js.map +1 -1
  5. package/dist/expressions/handlers/let.d.ts +6 -0
  6. package/dist/expressions/handlers/let.d.ts.map +1 -1
  7. package/dist/expressions/handlers/let.js +29 -4
  8. package/dist/expressions/handlers/let.js.map +1 -1
  9. package/dist/expressions/handlers/template.d.ts.map +1 -1
  10. package/dist/expressions/handlers/template.js +2 -1
  11. package/dist/expressions/handlers/template.js.map +1 -1
  12. package/dist/renderer/prop-schemas.js +1 -1
  13. package/dist/renderer/prop-schemas.js.map +1 -1
  14. package/dist/security/api-spec-validator.d.ts.map +1 -1
  15. package/dist/security/api-spec-validator.js +4 -0
  16. package/dist/security/api-spec-validator.js.map +1 -1
  17. package/dist/security/spec-validator.d.ts.map +1 -1
  18. package/dist/security/spec-validator.js +43 -31
  19. package/dist/security/spec-validator.js.map +1 -1
  20. package/dist/server.d.ts +7 -0
  21. package/dist/server.d.ts.map +1 -1
  22. package/dist/server.js +3 -0
  23. package/dist/server.js.map +1 -1
  24. package/dist/spec-stores/sql-versioned.d.ts +38 -0
  25. package/dist/spec-stores/sql-versioned.d.ts.map +1 -0
  26. package/dist/spec-stores/sql-versioned.js +186 -0
  27. package/dist/spec-stores/sql-versioned.js.map +1 -0
  28. package/dist/spec-stores/sql.d.ts +21 -0
  29. package/dist/spec-stores/sql.d.ts.map +1 -0
  30. package/dist/spec-stores/sql.js +65 -0
  31. package/dist/spec-stores/sql.js.map +1 -0
  32. package/dist/spec-stores/sqlserver-versioned.d.ts +5 -30
  33. package/dist/spec-stores/sqlserver-versioned.d.ts.map +1 -1
  34. package/dist/spec-stores/sqlserver-versioned.js +16 -245
  35. package/dist/spec-stores/sqlserver-versioned.js.map +1 -1
  36. package/dist/spec-stores/sqlserver.d.ts +4 -11
  37. package/dist/spec-stores/sqlserver.d.ts.map +1 -1
  38. package/dist/spec-stores/sqlserver.js +16 -66
  39. package/dist/spec-stores/sqlserver.js.map +1 -1
  40. package/dist/sql/ddl.d.ts +7 -0
  41. package/dist/sql/ddl.d.ts.map +1 -0
  42. package/dist/sql/ddl.js +134 -0
  43. package/dist/sql/ddl.js.map +1 -0
  44. package/dist/sql/drivers/mysql.d.ts +25 -0
  45. package/dist/sql/drivers/mysql.d.ts.map +1 -0
  46. package/dist/sql/drivers/mysql.js +329 -0
  47. package/dist/sql/drivers/mysql.js.map +1 -0
  48. package/dist/sql/drivers/postgres.d.ts +30 -0
  49. package/dist/sql/drivers/postgres.d.ts.map +1 -0
  50. package/dist/sql/drivers/postgres.js +321 -0
  51. package/dist/sql/drivers/postgres.js.map +1 -0
  52. package/dist/sql/drivers/sqlite.d.ts +28 -0
  53. package/dist/sql/drivers/sqlite.d.ts.map +1 -0
  54. package/dist/sql/drivers/sqlite.js +369 -0
  55. package/dist/sql/drivers/sqlite.js.map +1 -0
  56. package/dist/sql/drivers/sqlserver.d.ts +46 -0
  57. package/dist/sql/drivers/sqlserver.d.ts.map +1 -0
  58. package/dist/sql/drivers/sqlserver.js +405 -0
  59. package/dist/sql/drivers/sqlserver.js.map +1 -0
  60. package/dist/sql/errors.d.ts +22 -0
  61. package/dist/sql/errors.d.ts.map +1 -0
  62. package/dist/sql/errors.js +27 -0
  63. package/dist/sql/errors.js.map +1 -0
  64. package/dist/sql/factory.d.ts +3 -0
  65. package/dist/sql/factory.d.ts.map +1 -0
  66. package/dist/sql/factory.js +24 -0
  67. package/dist/sql/factory.js.map +1 -0
  68. package/dist/sql/index.d.ts +17 -0
  69. package/dist/sql/index.d.ts.map +1 -0
  70. package/dist/sql/index.js +9 -0
  71. package/dist/sql/index.js.map +1 -0
  72. package/dist/sql/named-params.d.ts +8 -0
  73. package/dist/sql/named-params.d.ts.map +1 -0
  74. package/dist/sql/named-params.js +182 -0
  75. package/dist/sql/named-params.js.map +1 -0
  76. package/dist/sql/types.d.ts +49 -0
  77. package/dist/sql/types.d.ts.map +1 -0
  78. package/dist/sql/types.js +2 -0
  79. package/dist/sql/types.js.map +1 -0
  80. package/dist/types.d.ts +1 -1
  81. package/dist/types.d.ts.map +1 -1
  82. package/docs/consumer/README.md +1 -1
  83. package/docs/consumer/WHERE-TO-LOOK.md +4 -4
  84. package/docs/consumer/ai-context-api.md +44 -0
  85. package/docs/consumer/ai-context-primitives.md +3 -0
  86. package/docs/consumer/ai-context-runtime-semantics.md +8 -3
  87. package/docs/consumer/ai-context.md +123 -39
  88. package/docs/consumer/reference-doc.md +30 -8
  89. package/docs/wiki/compiled/README.md +1 -1
  90. package/docs/wiki/compiled/_lint.md +13 -8
  91. package/docs/wiki/compiled/action-fetch.md +7 -2
  92. package/docs/wiki/compiled/concept-action-chains.md +62 -24
  93. package/docs/wiki/compiled/concept-package-layout.md +11 -9
  94. package/docs/wiki/compiled/concept-public-package-names.md +24 -13
  95. package/docs/wiki/compiled/concept-shape-animations.md +1 -1
  96. package/docs/wiki/compiled/concept-spec-stores-catalog.md +28 -16
  97. package/docs/wiki/compiled/concept-transactions.md +20 -12
  98. package/docs/wiki/compiled/expression-let-ref.md +36 -18
  99. package/docs/wiki/compiled/expression-template.md +28 -17
  100. package/docs/wiki/compiled/path-ui-loading-error.md +5 -0
  101. package/docs/wiki/compiled/pattern-fetch-vs-datasources.md +5 -0
  102. package/docs/wiki/compiled/pattern-loading-content-empty.md +3 -2
  103. package/docs/wiki/compiled/primitive-select.md +16 -2
  104. package/package.json +25 -2
@@ -1 +1 @@
1
- {"version":3,"file":"sqlserver-versioned.d.ts","sourceRoot":"","sources":["../../src/spec-stores/sqlserver-versioned.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,KAAK,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AACnF,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,WAAW,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAOlI,MAAM,WAAW,iCAAkC,SAAQ,wBAAwB;IACjF,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,2BAA4B,SAAQ,kBAAmB,YAAW,kBAAkB;IAC/F,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,OAAO,CAAY;gBAEf,MAAM,EAAE,iCAAiC;YAkBvC,cAAc;IAOtB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAqEzE,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA6C1D,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAuBjE,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ3C,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;CAOtC;AAED,MAAM,WAAW,+BAA+B;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,yBAA0B,YAAW,gBAAgB;IAChE,OAAO,CAAC,IAAI,CAA+B;IAC3C,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,+BAA+B;YAgBrC,OAAO;IAOf,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAmB9D,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAsB/E,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB3F,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAM7B"}
1
+ {"version":3,"file":"sqlserver-versioned.d.ts","sourceRoot":"","sources":["../../src/spec-stores/sqlserver-versioned.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAkC,MAAM,oBAAoB,CAAC;AAChH,OAAO,EAAmC,KAAK,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAEhG,MAAM,WAAW,iCAAkC,SAAQ,wBAAwB;IACjF,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,2BAA4B,SAAQ,qBAAqB;gBACxD,MAAM,EAAE,iCAAiC;CAStD;AAED,MAAM,WAAW,+BAAgC,SAAQ,IAAI,CAAC,wBAAwB,EAAE,OAAO,CAAC;IAC9F,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,yBAA0B,SAAQ,mBAAmB;gBACpD,MAAM,EAAE,+BAA+B;CAQpD"}
@@ -1,253 +1,24 @@
1
- import { SqlServerSpecStore } from './sqlserver.js';
2
- import { computePatches } from '../versioning/compute-patches.js';
3
- import { applyPatches } from '../streaming/patch.js';
4
- import { assertValidIdentifier } from '../security/identifier-guard.js';
5
- import sql from 'mssql';
6
- export class SqlServerVersionedSpecStore extends SqlServerSpecStore {
7
- versionsTable;
8
- snapshotInterval;
9
- vPool = null;
10
- vConfig;
1
+ import { SqlEnvironmentStore, SqlVersionedSpecStore } from './sql-versioned.js';
2
+ import { createSqlServerDriverFromConfig } from './sqlserver.js';
3
+ export class SqlServerVersionedSpecStore extends SqlVersionedSpecStore {
11
4
  constructor(config) {
12
- super(config);
13
- this.versionsTable = config.versionsTable ?? 'screen_versions';
14
- assertValidIdentifier(this.versionsTable, 'SqlServerVersionedSpecStore.versionsTable');
15
- this.snapshotInterval = config.snapshotInterval ?? 10;
16
- this.vConfig = {
17
- server: config.server,
18
- database: config.database,
19
- user: config.user,
20
- password: config.password,
21
- port: config.port ?? 1433,
22
- options: {
23
- trustServerCertificate: config.trustServerCertificate ?? true,
24
- trustedConnection: config.trustedConnection ?? false,
25
- },
26
- };
27
- }
28
- async getVersionPool() {
29
- if (!this.vPool) {
30
- this.vPool = await new sql.ConnectionPool(this.vConfig).connect();
31
- }
32
- return this.vPool;
33
- }
34
- async saveVersion(id, doc, meta) {
35
- const pool = await this.getVersionPool();
36
- // Get current max version
37
- const maxResult = await pool.request()
38
- .input('screen_id', sql.NVarChar, id)
39
- .query(`SELECT ISNULL(MAX(version), 0) AS maxVersion FROM [${this.versionsTable}] WHERE screen_id = @screen_id`);
40
- let currentMax = maxResult.recordset[0].maxVersion;
41
- // Lazy bootstrap: if no history, create v1 from current spec
42
- if (currentMax === 0) {
43
- let existingSpec = null;
44
- try {
45
- existingSpec = await this.load(id);
46
- }
47
- catch {
48
- // No existing spec
49
- }
50
- if (existingSpec !== null && existingSpec !== undefined) {
51
- currentMax = 1;
52
- await pool.request()
53
- .input('screen_id', sql.NVarChar, id)
54
- .input('spec', sql.NVarChar(sql.MAX), JSON.stringify(existingSpec))
55
- .input('author', sql.NVarChar, 'system')
56
- .input('source_type', sql.NVarChar, 'push')
57
- .input('description', sql.NVarChar, 'Bootstrapped from existing spec')
58
- .query(`
59
- INSERT INTO [${this.versionsTable}] (screen_id, version, is_snapshot, spec, author, source_type, description)
60
- VALUES (@screen_id, 1, 1, @spec, @author, @source_type, @description)
61
- `);
62
- }
63
- }
64
- const newVersion = currentMax + 1;
65
- const isSnapshot = newVersion === 1 || newVersion % this.snapshotInterval === 0;
66
- if (isSnapshot) {
67
- await pool.request()
68
- .input('screen_id', sql.NVarChar, id)
69
- .input('spec', sql.NVarChar(sql.MAX), JSON.stringify(doc))
70
- .input('author', sql.NVarChar, meta.author)
71
- .input('source_type', sql.NVarChar, meta.source)
72
- .input('description', sql.NVarChar, meta.description ?? null)
73
- .query(`
74
- INSERT INTO [${this.versionsTable}] (screen_id, version, is_snapshot, spec, author, source_type, description)
75
- VALUES (@screen_id, ${newVersion}, 1, @spec, @author, @source_type, @description)
76
- `);
77
- }
78
- else {
79
- const prevSpec = await this.loadVersion(id, currentMax);
80
- const patches = computePatches(prevSpec, doc);
81
- await pool.request()
82
- .input('screen_id', sql.NVarChar, id)
83
- .input('patches', sql.NVarChar(sql.MAX), JSON.stringify(patches))
84
- .input('author', sql.NVarChar, meta.author)
85
- .input('source_type', sql.NVarChar, meta.source)
86
- .input('description', sql.NVarChar, meta.description ?? null)
87
- .query(`
88
- INSERT INTO [${this.versionsTable}] (screen_id, version, is_snapshot, patches, author, source_type, description)
89
- VALUES (@screen_id, ${newVersion}, 0, @patches, @author, @source_type, @description)
90
- `);
91
- }
92
- // Update current spec in base table
93
- await this.save(id, doc);
94
- return newVersion;
95
- }
96
- async loadVersion(id, version) {
97
- const pool = await this.getVersionPool();
98
- // Find nearest snapshot at or before target version
99
- const snapshotResult = await pool.request()
100
- .input('screen_id', sql.NVarChar, id)
101
- .query(`
102
- SELECT TOP 1 version, spec FROM [${this.versionsTable}]
103
- WHERE screen_id = @screen_id AND version <= ${version} AND is_snapshot = 1
104
- ORDER BY version DESC
105
- `);
106
- if (!snapshotResult.recordset[0]) {
107
- throw new Error(`No snapshot found for "${id}" at or before v${version}`);
108
- }
109
- const snapshotVersion = snapshotResult.recordset[0].version;
110
- const snapshotSpec = typeof snapshotResult.recordset[0].spec === 'string'
111
- ? JSON.parse(snapshotResult.recordset[0].spec)
112
- : snapshotResult.recordset[0].spec;
113
- if (snapshotVersion === version) {
114
- return snapshotSpec;
115
- }
116
- // Apply patches from snapshot+1 to target version
117
- const patchResult = await pool.request()
118
- .input('screen_id', sql.NVarChar, id)
119
- .query(`
120
- SELECT version, patches FROM [${this.versionsTable}]
121
- WHERE screen_id = @screen_id AND version >= ${snapshotVersion + 1} AND version <= ${version} AND is_snapshot = 0
122
- ORDER BY version ASC
123
- `);
124
- let result = structuredClone(snapshotSpec);
125
- for (const row of patchResult.recordset) {
126
- if (row.patches) {
127
- const patches = typeof row.patches === 'string' ? JSON.parse(row.patches) : row.patches;
128
- result = applyPatches(result, patches);
129
- }
130
- }
131
- return result;
132
- }
133
- async listVersions(id, limit) {
134
- const pool = await this.getVersionPool();
135
- const limitClause = limit ? `TOP ${limit}` : '';
136
- const result = await pool.request()
137
- .input('screen_id', sql.NVarChar, id)
138
- .query(`
139
- SELECT ${limitClause} version, created_at, author, source_type, description, is_snapshot
140
- FROM [${this.versionsTable}]
141
- WHERE screen_id = @screen_id
142
- ORDER BY version DESC
143
- `);
144
- return result.recordset.map((r) => ({
145
- version: r.version,
146
- timestamp: r.created_at.toISOString(),
147
- author: r.author,
148
- source: r.source_type,
149
- description: r.description,
150
- isSnapshot: !!(r.is_snapshot),
151
- }));
152
- }
153
- async currentVersion(id) {
154
- const pool = await this.getVersionPool();
155
- const result = await pool.request()
156
- .input('screen_id', sql.NVarChar, id)
157
- .query(`SELECT ISNULL(MAX(version), 0) AS maxVersion FROM [${this.versionsTable}] WHERE screen_id = @screen_id`);
158
- return result.recordset[0].maxVersion;
159
- }
160
- async closeVersioned() {
161
- if (this.vPool) {
162
- await this.vPool.close();
163
- this.vPool = null;
164
- }
165
- await this.close();
5
+ super({
6
+ driver: createSqlServerDriverFromConfig(config),
7
+ table: config.table,
8
+ versionsTable: config.versionsTable,
9
+ snapshotInterval: config.snapshotInterval,
10
+ closeDriver: true,
11
+ });
166
12
  }
167
13
  }
168
- export class SqlServerEnvironmentStore {
169
- pool = null;
170
- sqlConfig;
171
- tableName;
14
+ export class SqlServerEnvironmentStore extends SqlEnvironmentStore {
172
15
  constructor(config) {
173
- this.tableName = config.table ?? 'screen_environments';
174
- assertValidIdentifier(this.tableName, 'SqlServerEnvironmentStore.table');
175
- this.sqlConfig = {
176
- server: config.server,
177
- database: config.database,
178
- user: config.user,
179
- password: config.password,
180
- port: config.port ?? 1433,
181
- options: {
182
- trustServerCertificate: config.trustServerCertificate ?? true,
183
- trustedConnection: config.trustedConnection ?? false,
184
- },
16
+ const sqlConfig = {
17
+ driver: createSqlServerDriverFromConfig(config),
18
+ table: config.table,
19
+ closeDriver: true,
185
20
  };
186
- }
187
- async getPool() {
188
- if (!this.pool) {
189
- this.pool = await new sql.ConnectionPool(this.sqlConfig).connect();
190
- }
191
- return this.pool;
192
- }
193
- async getEnvironments(specId) {
194
- const pool = await this.getPool();
195
- const result = await pool.request()
196
- .input('screen_id', sql.NVarChar, specId)
197
- .query(`
198
- SELECT environment, version, promoted_at, promoted_by
199
- FROM [${this.tableName}]
200
- WHERE screen_id = @screen_id
201
- ORDER BY environment
202
- `);
203
- return result.recordset.map((r) => ({
204
- name: r.environment,
205
- version: r.version,
206
- promotedAt: r.promoted_at.toISOString(),
207
- promotedBy: r.promoted_by,
208
- }));
209
- }
210
- async getEnvironment(specId, env) {
211
- const pool = await this.getPool();
212
- const result = await pool.request()
213
- .input('screen_id', sql.NVarChar, specId)
214
- .input('environment', sql.NVarChar, env)
215
- .query(`
216
- SELECT environment, version, promoted_at, promoted_by
217
- FROM [${this.tableName}]
218
- WHERE screen_id = @screen_id AND environment = @environment
219
- `);
220
- if (!result.recordset[0])
221
- return null;
222
- const r = result.recordset[0];
223
- return {
224
- name: r.environment,
225
- version: r.version,
226
- promotedAt: r.promoted_at.toISOString(),
227
- promotedBy: r.promoted_by,
228
- };
229
- }
230
- async setEnvironment(specId, env, version, author) {
231
- const pool = await this.getPool();
232
- await pool.request()
233
- .input('screen_id', sql.NVarChar, specId)
234
- .input('environment', sql.NVarChar, env)
235
- .input('promoted_by', sql.NVarChar, author)
236
- .query(`
237
- MERGE [${this.tableName}] AS target
238
- USING (SELECT @screen_id AS screen_id, @environment AS environment) AS source
239
- ON target.screen_id = source.screen_id AND target.environment = source.environment
240
- WHEN MATCHED THEN
241
- UPDATE SET version = ${version}, promoted_at = GETUTCDATE(), promoted_by = @promoted_by
242
- WHEN NOT MATCHED THEN
243
- INSERT (screen_id, environment, version, promoted_by) VALUES (@screen_id, @environment, ${version}, @promoted_by);
244
- `);
245
- }
246
- async close() {
247
- if (this.pool) {
248
- await this.pool.close();
249
- this.pool = null;
250
- }
21
+ super(sqlConfig);
251
22
  }
252
23
  }
253
24
  //# sourceMappingURL=sqlserver-versioned.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sqlserver-versioned.js","sourceRoot":"","sources":["../../src/spec-stores/sqlserver-versioned.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sqlserver-versioned.js","sourceRoot":"","sources":["../../src/spec-stores/sqlserver-versioned.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAkC,MAAM,oBAAoB,CAAC;AAChH,OAAO,EAAE,+BAA+B,EAAiC,MAAM,gBAAgB,CAAC;AAShG,MAAM,OAAO,2BAA4B,SAAQ,qBAAqB;IACpE,YAAY,MAAyC;QACnD,KAAK,CAAC;YACJ,MAAM,EAAE,+BAA+B,CAAC,MAAM,CAAC;YAC/C,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;IACL,CAAC;CACF;AAOD,MAAM,OAAO,yBAA0B,SAAQ,mBAAmB;IAChE,YAAY,MAAuC;QACjD,MAAM,SAAS,GAA8B;YAC3C,MAAM,EAAE,+BAA+B,CAAC,MAAM,CAAC;YAC/C,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,WAAW,EAAE,IAAI;SAClB,CAAC;QACF,KAAK,CAAC,SAAS,CAAC,CAAC;IACnB,CAAC;CACF"}
@@ -1,4 +1,5 @@
1
- import type { SpecStore } from '../spec-engine/types.js';
1
+ import { SqlSpecStore } from './sql.js';
2
+ import type { SqlDriver } from '../sql/index.js';
2
3
  export interface SqlServerSpecStoreConfig {
3
4
  server: string;
4
5
  database: string;
@@ -12,16 +13,8 @@ export interface SqlServerSpecStoreConfig {
12
13
  /** Table name for spec storage. Default: 'screens' */
13
14
  table?: string;
14
15
  }
15
- export declare class SqlServerSpecStore implements SpecStore {
16
- private config;
17
- private pool;
18
- private tableName;
16
+ export declare function createSqlServerDriverFromConfig(config: SqlServerSpecStoreConfig): SqlDriver;
17
+ export declare class SqlServerSpecStore extends SqlSpecStore {
19
18
  constructor(config: SqlServerSpecStoreConfig);
20
- private getPool;
21
- load(screenId: string): Promise<unknown>;
22
- save(screenId: string, spec: unknown): Promise<void>;
23
- list(): Promise<string[]>;
24
- delete(screenId: string): Promise<void>;
25
- close(): Promise<void>;
26
19
  }
27
20
  //# sourceMappingURL=sqlserver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sqlserver.d.ts","sourceRoot":"","sources":["../../src/spec-stores/sqlserver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAIzD,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kEAAkE;IAClE,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,kBAAmB,YAAW,SAAS;IAClD,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,IAAI,CAA+B;IAC3C,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,wBAAwB;YAgB9B,OAAO;IAOf,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAcxC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBpD,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAQzB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWvC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAM7B"}
1
+ {"version":3,"file":"sqlserver.d.ts","sourceRoot":"","sources":["../../src/spec-stores/sqlserver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kEAAkE;IAClE,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,wBAAwB,GAAG,SAAS,CAe3F;AAED,qBAAa,kBAAmB,SAAQ,YAAY;gBACtC,MAAM,EAAE,wBAAwB;CAO7C"}
@@ -1,13 +1,9 @@
1
- import { assertValidIdentifier } from '../security/identifier-guard.js';
2
- import sql from 'mssql';
3
- export class SqlServerSpecStore {
4
- config;
5
- pool = null;
6
- tableName;
7
- constructor(config) {
8
- this.tableName = config.table ?? 'screens';
9
- assertValidIdentifier(this.tableName, 'SqlServerSpecStore.table');
10
- this.config = {
1
+ import { SqlSpecStore } from './sql.js';
2
+ import { createSqlDriver } from '../sql/index.js';
3
+ export function createSqlServerDriverFromConfig(config) {
4
+ return createSqlDriver({
5
+ dialect: 'sqlserver',
6
+ connection: {
11
7
  server: config.server,
12
8
  database: config.database,
13
9
  user: config.user,
@@ -17,62 +13,16 @@ export class SqlServerSpecStore {
17
13
  trustServerCertificate: config.trustServerCertificate ?? true,
18
14
  trustedConnection: config.trustedConnection ?? false,
19
15
  },
20
- };
21
- }
22
- async getPool() {
23
- if (!this.pool) {
24
- this.pool = await new sql.ConnectionPool(this.config).connect();
25
- }
26
- return this.pool;
27
- }
28
- async load(screenId) {
29
- const pool = await this.getPool();
30
- const result = await pool.request()
31
- .input('id', sql.NVarChar, screenId)
32
- .query(`SELECT spec FROM [${this.tableName}] WHERE id = @id`);
33
- if (!result.recordset[0]) {
34
- throw new Error(`Spec "${screenId}" not found`);
35
- }
36
- const raw = result.recordset[0].spec;
37
- return typeof raw === 'string' ? JSON.parse(raw) : raw;
38
- }
39
- async save(screenId, spec) {
40
- const pool = await this.getPool();
41
- const specJson = JSON.stringify(spec);
42
- // MERGE for upsert: update if exists, insert if not
43
- await pool.request()
44
- .input('id', sql.NVarChar, screenId)
45
- .input('spec', sql.NVarChar(sql.MAX), specJson)
46
- .query(`
47
- MERGE [${this.tableName}] AS target
48
- USING (SELECT @id AS id) AS source
49
- ON target.id = source.id
50
- WHEN MATCHED THEN
51
- UPDATE SET spec = @spec, updated_at = GETUTCDATE(), version = version + 1
52
- WHEN NOT MATCHED THEN
53
- INSERT (id, name, spec, version, is_active) VALUES (@id, @id, @spec, 1, 1);
54
- `);
55
- }
56
- async list() {
57
- const pool = await this.getPool();
58
- const result = await pool.request()
59
- .query(`SELECT id FROM [${this.tableName}] ORDER BY id`);
60
- return result.recordset.map((r) => r.id);
61
- }
62
- async delete(screenId) {
63
- const pool = await this.getPool();
64
- const result = await pool.request()
65
- .input('id', sql.NVarChar, screenId)
66
- .query(`DELETE FROM [${this.tableName}] WHERE id = @id`);
67
- if (result.rowsAffected[0] === 0) {
68
- throw new Error(`Spec "${screenId}" not found`);
69
- }
70
- }
71
- async close() {
72
- if (this.pool) {
73
- await this.pool.close();
74
- this.pool = null;
75
- }
16
+ },
17
+ });
18
+ }
19
+ export class SqlServerSpecStore extends SqlSpecStore {
20
+ constructor(config) {
21
+ super({
22
+ driver: createSqlServerDriverFromConfig(config),
23
+ table: config.table,
24
+ closeDriver: true,
25
+ });
76
26
  }
77
27
  }
78
28
  //# sourceMappingURL=sqlserver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sqlserver.js","sourceRoot":"","sources":["../../src/spec-stores/sqlserver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sqlserver.js","sourceRoot":"","sources":["../../src/spec-stores/sqlserver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAiBlD,MAAM,UAAU,+BAA+B,CAAC,MAAgC;IAC9E,OAAO,eAAe,CAAC;QACrB,OAAO,EAAE,WAAW;QACpB,UAAU,EAAE;YACV,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI;YACzB,OAAO,EAAE;gBACP,sBAAsB,EAAE,MAAM,CAAC,sBAAsB,IAAI,IAAI;gBAC7D,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,KAAK;aACrD;SACF;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,OAAO,kBAAmB,SAAQ,YAAY;IAClD,YAAY,MAAgC;QAC1C,KAAK,CAAC;YACJ,MAAM,EAAE,+BAA+B,CAAC,MAAM,CAAC;YAC/C,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ import type { SqlDialect } from './types.js';
2
+ export type SqlStoreTable = 'screens' | 'screen_versions' | 'screen_environments';
3
+ type SqlStoreDdlByDialect = Record<SqlDialect, Record<SqlStoreTable, string>>;
4
+ export declare const SQL_STORE_DDL: SqlStoreDdlByDialect;
5
+ export declare function getSqlStoreDdl(dialect: SqlDialect): string[];
6
+ export {};
7
+ //# sourceMappingURL=ddl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ddl.d.ts","sourceRoot":"","sources":["../../src/sql/ddl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,iBAAiB,GAAG,qBAAqB,CAAC;AAElF,KAAK,oBAAoB,GAAG,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;AAE9E,eAAO,MAAM,aAAa,EAAE,oBAgI3B,CAAC;AAEF,wBAAgB,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,EAAE,CAG5D"}
@@ -0,0 +1,134 @@
1
+ export const SQL_STORE_DDL = {
2
+ sqlserver: {
3
+ screens: `IF OBJECT_ID(N'screens', N'U') IS NULL
4
+ CREATE TABLE [screens] (
5
+ [id] NVARCHAR(255) NOT NULL PRIMARY KEY,
6
+ [name] NVARCHAR(255) NOT NULL,
7
+ [spec] NVARCHAR(MAX) NOT NULL,
8
+ [version] INT NOT NULL DEFAULT 1,
9
+ [is_active] BIT NOT NULL DEFAULT 1,
10
+ [updated_at] DATETIME2 NOT NULL DEFAULT SYSUTCDATETIME()
11
+ )`,
12
+ screen_versions: `IF OBJECT_ID(N'screen_versions', N'U') IS NULL
13
+ CREATE TABLE [screen_versions] (
14
+ [id] BIGINT IDENTITY(1,1) NOT NULL PRIMARY KEY,
15
+ [screen_id] NVARCHAR(255) NOT NULL,
16
+ [version] INT NOT NULL,
17
+ [is_snapshot] BIT NOT NULL,
18
+ [spec] NVARCHAR(MAX) NULL,
19
+ [patches] NVARCHAR(MAX) NULL,
20
+ [author] NVARCHAR(255) NOT NULL,
21
+ [source_type] NVARCHAR(64) NOT NULL,
22
+ [description] NVARCHAR(MAX) NULL,
23
+ [created_at] DATETIME2 NOT NULL DEFAULT SYSUTCDATETIME(),
24
+ CONSTRAINT [UQ_screen_versions_screen_version] UNIQUE ([screen_id], [version])
25
+ )`,
26
+ screen_environments: `IF OBJECT_ID(N'screen_environments', N'U') IS NULL
27
+ CREATE TABLE [screen_environments] (
28
+ [screen_id] NVARCHAR(255) NOT NULL,
29
+ [environment] NVARCHAR(64) NOT NULL,
30
+ [version] INT NOT NULL,
31
+ [promoted_at] DATETIME2 NOT NULL DEFAULT SYSUTCDATETIME(),
32
+ [promoted_by] NVARCHAR(255) NOT NULL,
33
+ CONSTRAINT [PK_screen_environments] PRIMARY KEY ([screen_id], [environment])
34
+ )`,
35
+ },
36
+ postgres: {
37
+ screens: `CREATE TABLE IF NOT EXISTS screens (
38
+ id TEXT NOT NULL PRIMARY KEY,
39
+ name TEXT NOT NULL,
40
+ spec JSONB NOT NULL,
41
+ version INTEGER NOT NULL DEFAULT 1,
42
+ is_active BOOLEAN NOT NULL DEFAULT TRUE,
43
+ updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
44
+ )`,
45
+ screen_versions: `CREATE TABLE IF NOT EXISTS screen_versions (
46
+ id BIGSERIAL PRIMARY KEY,
47
+ screen_id TEXT NOT NULL,
48
+ version INTEGER NOT NULL,
49
+ is_snapshot BOOLEAN NOT NULL,
50
+ spec JSONB NULL,
51
+ patches JSONB NULL,
52
+ author TEXT NOT NULL,
53
+ source_type TEXT NOT NULL,
54
+ description TEXT NULL,
55
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
56
+ CONSTRAINT uq_screen_versions_screen_version UNIQUE (screen_id, version)
57
+ )`,
58
+ screen_environments: `CREATE TABLE IF NOT EXISTS screen_environments (
59
+ screen_id TEXT NOT NULL,
60
+ environment TEXT NOT NULL,
61
+ version INTEGER NOT NULL,
62
+ promoted_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
63
+ promoted_by TEXT NOT NULL,
64
+ CONSTRAINT pk_screen_environments PRIMARY KEY (screen_id, environment)
65
+ )`,
66
+ },
67
+ mysql: {
68
+ screens: `CREATE TABLE IF NOT EXISTS screens (
69
+ id VARCHAR(255) NOT NULL PRIMARY KEY,
70
+ name VARCHAR(255) NOT NULL,
71
+ spec JSON NOT NULL,
72
+ version INT NOT NULL DEFAULT 1,
73
+ is_active TINYINT(1) NOT NULL DEFAULT 1,
74
+ updated_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)
75
+ )`,
76
+ screen_versions: `CREATE TABLE IF NOT EXISTS screen_versions (
77
+ id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
78
+ screen_id VARCHAR(255) NOT NULL,
79
+ version INT NOT NULL,
80
+ is_snapshot TINYINT(1) NOT NULL,
81
+ spec JSON NULL,
82
+ patches JSON NULL,
83
+ author VARCHAR(255) NOT NULL,
84
+ source_type VARCHAR(64) NOT NULL,
85
+ description TEXT NULL,
86
+ created_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
87
+ CONSTRAINT uq_screen_versions_screen_version UNIQUE (screen_id, version)
88
+ )`,
89
+ screen_environments: `CREATE TABLE IF NOT EXISTS screen_environments (
90
+ screen_id VARCHAR(255) NOT NULL,
91
+ environment VARCHAR(64) NOT NULL,
92
+ version INT NOT NULL,
93
+ promoted_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
94
+ promoted_by VARCHAR(255) NOT NULL,
95
+ CONSTRAINT pk_screen_environments PRIMARY KEY (screen_id, environment)
96
+ )`,
97
+ },
98
+ sqlite: {
99
+ screens: `CREATE TABLE IF NOT EXISTS screens (
100
+ id TEXT NOT NULL PRIMARY KEY,
101
+ name TEXT NOT NULL,
102
+ spec TEXT NOT NULL,
103
+ version INTEGER NOT NULL DEFAULT 1,
104
+ is_active INTEGER NOT NULL DEFAULT 1,
105
+ updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP
106
+ )`,
107
+ screen_versions: `CREATE TABLE IF NOT EXISTS screen_versions (
108
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
109
+ screen_id TEXT NOT NULL,
110
+ version INTEGER NOT NULL,
111
+ is_snapshot INTEGER NOT NULL,
112
+ spec TEXT NULL,
113
+ patches TEXT NULL,
114
+ author TEXT NOT NULL,
115
+ source_type TEXT NOT NULL,
116
+ description TEXT NULL,
117
+ created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
118
+ CONSTRAINT uq_screen_versions_screen_version UNIQUE (screen_id, version)
119
+ )`,
120
+ screen_environments: `CREATE TABLE IF NOT EXISTS screen_environments (
121
+ screen_id TEXT NOT NULL,
122
+ environment TEXT NOT NULL,
123
+ version INTEGER NOT NULL,
124
+ promoted_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
125
+ promoted_by TEXT NOT NULL,
126
+ CONSTRAINT pk_screen_environments PRIMARY KEY (screen_id, environment)
127
+ )`,
128
+ },
129
+ };
130
+ export function getSqlStoreDdl(dialect) {
131
+ const ddl = SQL_STORE_DDL[dialect];
132
+ return [ddl.screens, ddl.screen_versions, ddl.screen_environments];
133
+ }
134
+ //# sourceMappingURL=ddl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ddl.js","sourceRoot":"","sources":["../../src/sql/ddl.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,aAAa,GAAyB;IACjD,SAAS,EAAE;QACT,OAAO,EAAE;;;;;;;;EAQX;QACE,eAAe,EAAE;;;;;;;;;;;;;EAanB;QACE,mBAAmB,EAAE;;;;;;;;EAQvB;KACC;IACD,QAAQ,EAAE;QACR,OAAO,EAAE;;;;;;;EAOX;QACE,eAAe,EAAE;;;;;;;;;;;;EAYnB;QACE,mBAAmB,EAAE;;;;;;;EAOvB;KACC;IACD,KAAK,EAAE;QACL,OAAO,EAAE;;;;;;;EAOX;QACE,eAAe,EAAE;;;;;;;;;;;;EAYnB;QACE,mBAAmB,EAAE;;;;;;;EAOvB;KACC;IACD,MAAM,EAAE;QACN,OAAO,EAAE;;;;;;;EAOX;QACE,eAAe,EAAE;;;;;;;;;;;;EAYnB;QACE,mBAAmB,EAAE;;;;;;;EAOvB;KACC;CACF,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,OAAmB;IAChD,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,mBAAmB,CAAC,CAAC;AACrE,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { SqlDriver, SqlDriverConfig } from '../types.js';
2
+ interface MysqlPool {
3
+ execute(statement: string, values?: readonly unknown[]): Promise<[unknown, unknown[]]>;
4
+ end(): Promise<void>;
5
+ getConnection(): Promise<MysqlConnection>;
6
+ }
7
+ interface MysqlConnection {
8
+ execute(statement: string, values?: readonly unknown[]): Promise<[unknown, unknown[]]>;
9
+ beginTransaction(): Promise<void>;
10
+ commit(): Promise<void>;
11
+ rollback(): Promise<void>;
12
+ release(): void;
13
+ }
14
+ interface MysqlModuleShape {
15
+ createPool(config?: unknown): MysqlPool;
16
+ }
17
+ type MysqlModuleImport = MysqlModuleShape & {
18
+ default?: MysqlModuleShape;
19
+ };
20
+ export interface MysqlDriverDeps {
21
+ loadMysql?: () => Promise<MysqlModuleImport>;
22
+ }
23
+ export declare function createMysqlDriver(config: SqlDriverConfig, deps?: MysqlDriverDeps): SqlDriver;
24
+ export {};
25
+ //# sourceMappingURL=mysql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql.d.ts","sourceRoot":"","sources":["../../../src/sql/drivers/mysql.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAA8D,MAAM,aAAa,CAAC;AAE1H,UAAU,SAAS;IACjB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IACvF,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACrB,aAAa,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;CAC3C;AAED,UAAU,eAAe;IACvB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IACvF,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,UAAU,gBAAgB;IACxB,UAAU,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACzC;AAED,KAAK,iBAAiB,GAAG,gBAAgB,GAAG;IAAE,OAAO,CAAC,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAE3E,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC9C;AA6HD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,GAAE,eAAoB,GAAG,SAAS,CAiPhG"}