@ontrails/store 1.0.0-beta.14

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 (46) hide show
  1. package/.agents/notes/2026-04-04/handoff-202604032309-9e85a104.md +38 -0
  2. package/.turbo/turbo-build.log +1 -0
  3. package/.turbo/turbo-lint.log +3 -0
  4. package/.turbo/turbo-typecheck.log +1 -0
  5. package/CHANGELOG.md +12 -0
  6. package/README.md +213 -0
  7. package/dist/drizzle/index.d.ts +3 -0
  8. package/dist/drizzle/index.d.ts.map +1 -0
  9. package/dist/drizzle/index.js +2 -0
  10. package/dist/drizzle/index.js.map +1 -0
  11. package/dist/drizzle/runtime.d.ts +21 -0
  12. package/dist/drizzle/runtime.d.ts.map +1 -0
  13. package/dist/drizzle/runtime.js +458 -0
  14. package/dist/drizzle/runtime.js.map +1 -0
  15. package/dist/drizzle/schema.d.ts +15 -0
  16. package/dist/drizzle/schema.d.ts.map +1 -0
  17. package/dist/drizzle/schema.js +322 -0
  18. package/dist/drizzle/schema.js.map +1 -0
  19. package/dist/drizzle/types.d.ts +40 -0
  20. package/dist/drizzle/types.d.ts.map +1 -0
  21. package/dist/drizzle/types.js +2 -0
  22. package/dist/drizzle/types.js.map +1 -0
  23. package/dist/index.d.ts +3 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +2 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/store.d.ts +26 -0
  28. package/dist/store.d.ts.map +1 -0
  29. package/dist/store.js +192 -0
  30. package/dist/store.js.map +1 -0
  31. package/dist/types.d.ts +224 -0
  32. package/dist/types.d.ts.map +1 -0
  33. package/dist/types.js +2 -0
  34. package/dist/types.js.map +1 -0
  35. package/package.json +29 -0
  36. package/src/__tests__/store.test.ts +333 -0
  37. package/src/drizzle/__tests__/drizzle.test.ts +469 -0
  38. package/src/drizzle/index.ts +17 -0
  39. package/src/drizzle/runtime.ts +853 -0
  40. package/src/drizzle/schema.ts +577 -0
  41. package/src/drizzle/types.ts +70 -0
  42. package/src/index.ts +39 -0
  43. package/src/store.ts +367 -0
  44. package/src/types.ts +361 -0
  45. package/tsconfig.json +9 -0
  46. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,458 @@
1
+ import { Database } from 'bun:sqlite';
2
+ import { AlreadyExistsError, InternalError, Result, ValidationError, provision, } from '@ontrails/core';
3
+ import { and, eq } from 'drizzle-orm';
4
+ import { drizzle } from 'drizzle-orm/bun-sqlite';
5
+ import { store as defineStore } from '../store.js';
6
+ import { createSqliteSchemaStatements, describeField, deriveDrizzleTables, } from './schema.js';
7
+ const defaultProvisionId = 'store';
8
+ const connectionClients = new WeakMap();
9
+ const cloneValue = (value) => structuredClone(value);
10
+ const openSqliteDatabase = (url, readOnly) => {
11
+ const client = new Database(url, readOnly ? { readonly: true } : { create: true });
12
+ client.run('PRAGMA foreign_keys = ON');
13
+ if (!readOnly) {
14
+ client.run('PRAGMA journal_mode = WAL');
15
+ client.run('PRAGMA synchronous = NORMAL');
16
+ }
17
+ return client;
18
+ };
19
+ const asError = (error) => error instanceof Error ? error : new Error(String(error));
20
+ const storeTableNames = (definition) => definition.tableNames;
21
+ const registerConnection = (connection, client) => {
22
+ connectionClients.set(connection, client);
23
+ return connection;
24
+ };
25
+ const closeConnection = (connection) => {
26
+ connectionClients.get(connection)?.close();
27
+ connectionClients.delete(connection);
28
+ };
29
+ const mapDatabaseError = (tableName, error) => {
30
+ if (error instanceof ValidationError ||
31
+ error instanceof AlreadyExistsError ||
32
+ error instanceof InternalError) {
33
+ return error;
34
+ }
35
+ // ZodError from .parse() should surface as ValidationError, not InternalError.
36
+ const resolved = asError(error);
37
+ if (resolved.name === 'ZodError') {
38
+ return new ValidationError(`Store table "${tableName}" input failed schema validation: ${resolved.message}`, { cause: resolved });
39
+ }
40
+ if (resolved.message.includes('UNIQUE constraint failed')) {
41
+ return new AlreadyExistsError(`Drizzle store insert for table "${tableName}" violated a uniqueness constraint`, { cause: resolved });
42
+ }
43
+ if (resolved.message.includes('FOREIGN KEY constraint failed')) {
44
+ return new ValidationError(`Drizzle store insert for table "${tableName}" violated a foreign key constraint`, { cause: resolved });
45
+ }
46
+ return new InternalError(`Drizzle store encountered an unexpected error for table "${tableName}": ${resolved.message}`, { cause: resolved });
47
+ };
48
+ const formatIssues = (issues) => issues.map((issue) => issue.message).join('; ');
49
+ const parseEntity = (table, value) => {
50
+ const parsed = table.schema.safeParse(value);
51
+ if (!parsed.success) {
52
+ throw new InternalError(`Drizzle store for table "${table.name}" returned an entity that does not match the schema: ${formatIssues(parsed.error.issues)}`);
53
+ }
54
+ return parsed.data;
55
+ };
56
+ const normalizeWriteInput = (input) => Object.fromEntries(Object.entries(input).filter(([, value]) => value !== undefined));
57
+ const baseFieldKind = (table, field) => describeField(field, table.schema.shape[field]).kind;
58
+ const TIMESTAMP_FIELD_NAMES = new Set([
59
+ 'createdAt',
60
+ 'updatedAt',
61
+ 'created_at',
62
+ 'updated_at',
63
+ ]);
64
+ const ID_FIELD_SUFFIX_RE = /[Ii]d$/;
65
+ /**
66
+ * Synthesize a value for a generated field during insert.
67
+ *
68
+ * The connector recognizes these conventions for generated fields:
69
+ *
70
+ * - **Primary key** (`integer` type): auto-increment, left to SQLite.
71
+ * - **Timestamp fields** (`createdAt`, `updatedAt`, `created_at`,
72
+ * `updated_at`): materialized as `new Date()` (date type) or ISO 8601
73
+ * string (text type).
74
+ * - **ID-like text fields** (name ends with `Id` or `id`): filled with
75
+ * `Bun.randomUUIDv7()`.
76
+ *
77
+ * Any other generated `text` field that does not match a recognized convention
78
+ * throws a `ValidationError` — the developer must either supply a value or
79
+ * give the field a Zod default.
80
+ *
81
+ * All other generated field types fall through to `undefined`, letting the
82
+ * schema's Zod default (if any) apply during validation.
83
+ */
84
+ const generatedTimestamp = (kind) => kind === 'date' ? new Date() : new Date().toISOString();
85
+ const generatedTextValue = (tableName, fieldName) => {
86
+ if (ID_FIELD_SUFFIX_RE.test(fieldName)) {
87
+ return Bun.randomUUIDv7();
88
+ }
89
+ throw new ValidationError(`Store table "${tableName}" has a generated text field "${fieldName}" that does not match a recognized convention (timestamp or ID field). Supply a value or add a Zod default.`);
90
+ };
91
+ const generatedValueForInsert = (table, field) => {
92
+ const fieldName = field;
93
+ const kind = baseFieldKind(table, field);
94
+ if (field === table.primaryKey && kind === 'integer') {
95
+ return undefined;
96
+ }
97
+ if (TIMESTAMP_FIELD_NAMES.has(fieldName)) {
98
+ return generatedTimestamp(kind);
99
+ }
100
+ if (kind === 'text') {
101
+ return generatedTextValue(table.name, fieldName);
102
+ }
103
+ throw new ValidationError(`Store table "${table.name}" has a generated field "${fieldName}" of unrecognized type "${kind}". Only "integer" (primary key), "text", and timestamp fields are supported as generated fields. Supply a value or add a Zod default.`);
104
+ };
105
+ const materializeGeneratedFields = (table, input) => {
106
+ const next = { ...input };
107
+ for (const field of table.generated) {
108
+ if (next[field] !== undefined) {
109
+ continue;
110
+ }
111
+ const generated = generatedValueForInsert(table, field);
112
+ if (generated !== undefined) {
113
+ next[field] = generated;
114
+ }
115
+ }
116
+ return next;
117
+ };
118
+ const validateFixturePayload = (table, input) => {
119
+ const parsed = table.fixtureSchema.safeParse(input);
120
+ if (!parsed.success) {
121
+ throw new ValidationError(`Store table "${table.name}" insert payload is invalid after generated-field materialization: ${formatIssues(parsed.error.issues)}`);
122
+ }
123
+ return normalizeWriteInput(parsed.data);
124
+ };
125
+ const applyGeneratedInsertFields = (table, input) => validateFixturePayload(table, materializeGeneratedFields(table, input));
126
+ const applyGeneratedUpdateFields = (table, input) => {
127
+ const updatedAtKey = ['updatedAt', 'updated_at'].find((key) => table.generated.includes(key));
128
+ if (!updatedAtKey) {
129
+ return normalizeWriteInput(input);
130
+ }
131
+ const kind = baseFieldKind(table, updatedAtKey);
132
+ return normalizeWriteInput({
133
+ ...input,
134
+ [updatedAtKey]: input[updatedAtKey] ??
135
+ (kind === 'date' ? new Date() : new Date().toISOString()),
136
+ });
137
+ };
138
+ const ensureNotCyclic = (visiting, tableName) => {
139
+ if (!visiting.has(tableName)) {
140
+ return;
141
+ }
142
+ throw new ValidationError(`Store definition contains a reference cycle involving "${tableName}", which the SQLite connector cannot seed automatically`);
143
+ };
144
+ const pushVisitDependencies = (stack, definition, visited, tableName) => {
145
+ const table = definition.tables[tableName];
146
+ if (table === undefined) {
147
+ return;
148
+ }
149
+ for (const target of Object.values(table.references).toReversed()) {
150
+ if (target !== undefined && !visited.has(target)) {
151
+ stack.push({ expanded: false, tableName: target });
152
+ }
153
+ }
154
+ };
155
+ const finishVisitFrame = (frame, visiting, visited, ordered) => {
156
+ visiting.delete(frame.tableName);
157
+ visited.add(frame.tableName);
158
+ ordered.push(frame.tableName);
159
+ };
160
+ const startVisitFrame = (stack, definition, visiting, visited, tableName) => {
161
+ ensureNotCyclic(visiting, tableName);
162
+ visiting.add(tableName);
163
+ stack.push({ expanded: true, tableName });
164
+ pushVisitDependencies(stack, definition, visited, tableName);
165
+ };
166
+ const visitTableForSeeding = (definition, visiting, visited, ordered, tableName) => {
167
+ const stack = [{ expanded: false, tableName }];
168
+ while (stack.length > 0) {
169
+ const frame = stack.pop();
170
+ if (frame === undefined) {
171
+ continue;
172
+ }
173
+ if (frame.expanded) {
174
+ finishVisitFrame(frame, visiting, visited, ordered);
175
+ continue;
176
+ }
177
+ if (!visited.has(frame.tableName)) {
178
+ startVisitFrame(stack, definition, visiting, visited, frame.tableName);
179
+ }
180
+ }
181
+ };
182
+ const topologicalTableOrder = (definition) => {
183
+ const visited = new Set();
184
+ const visiting = new Set();
185
+ const ordered = [];
186
+ for (const tableName of definition.tableNames) {
187
+ visitTableForSeeding(definition, visiting, visited, ordered, tableName);
188
+ }
189
+ return Object.freeze(ordered);
190
+ };
191
+ const ensureSqliteSchema = (client, definition) => {
192
+ for (const statement of createSqliteSchemaStatements(definition)) {
193
+ client.run(statement);
194
+ }
195
+ };
196
+ const primaryKeyColumn = (table, field) => table[field];
197
+ const buildFilterConditions = (drizzleTable, filters) => filters === undefined
198
+ ? []
199
+ : Object.entries(filters)
200
+ .filter(([, value]) => value !== undefined)
201
+ .map(([field, value]) => eq(primaryKeyColumn(drizzleTable, field), value));
202
+ const createReadOnlyAccessor = (definitionTable, drizzleTable, db) => ({
203
+ get(id) {
204
+ try {
205
+ const row = db
206
+ .select()
207
+ .from(drizzleTable)
208
+ .where(eq(primaryKeyColumn(drizzleTable, definitionTable.primaryKey), id))
209
+ .get();
210
+ return Promise.resolve(row === null || row === undefined
211
+ ? null
212
+ : cloneValue(parseEntity(definitionTable, row)));
213
+ }
214
+ catch (error) {
215
+ return Promise.reject(mapDatabaseError(definitionTable.name, error));
216
+ }
217
+ },
218
+ list(filters, options) {
219
+ try {
220
+ const conditions = buildFilterConditions(drizzleTable, filters);
221
+ const base = db.select().from(drizzleTable).$dynamic();
222
+ const filtered = conditions.length > 0 ? base.where(and(...conditions)) : base;
223
+ const rows = filtered
224
+ .limit(options?.limit ?? -1)
225
+ .offset(options?.offset ?? 0)
226
+ .all();
227
+ return Promise.resolve(rows.map((row) => cloneValue(parseEntity(definitionTable, row))));
228
+ }
229
+ catch (error) {
230
+ return Promise.reject(mapDatabaseError(definitionTable.name, error));
231
+ }
232
+ },
233
+ });
234
+ const createWritableAccessor = (definitionTable, drizzleTable, db) => ({
235
+ ...createReadOnlyAccessor(definitionTable, drizzleTable, db),
236
+ insert(input) {
237
+ try {
238
+ const parsed = definitionTable.insertSchema.parse(input);
239
+ const row = db
240
+ .insert(drizzleTable)
241
+ .values(applyGeneratedInsertFields(definitionTable, parsed))
242
+ .returning()
243
+ .get();
244
+ return Promise.resolve(cloneValue(parseEntity(definitionTable, row)));
245
+ }
246
+ catch (error) {
247
+ return Promise.reject(mapDatabaseError(definitionTable.name, error));
248
+ }
249
+ },
250
+ remove(id) {
251
+ try {
252
+ const deleted = db
253
+ .delete(drizzleTable)
254
+ .where(eq(primaryKeyColumn(drizzleTable, definitionTable.primaryKey), id))
255
+ .returning({
256
+ deletedId: primaryKeyColumn(drizzleTable, definitionTable.primaryKey),
257
+ })
258
+ .get();
259
+ return Promise.resolve({ deleted: deleted !== undefined });
260
+ }
261
+ catch (error) {
262
+ return Promise.reject(mapDatabaseError(definitionTable.name, error));
263
+ }
264
+ },
265
+ update(id, input) {
266
+ try {
267
+ const parsed = definitionTable.updateSchema.parse(input);
268
+ const userFields = normalizeWriteInput(parsed);
269
+ if (Object.keys(userFields).length === 0) {
270
+ return Promise.reject(new ValidationError(`Store table "${definitionTable.name}" update requires at least one field to set.`));
271
+ }
272
+ const fields = applyGeneratedUpdateFields(definitionTable, parsed);
273
+ const row = db
274
+ .update(drizzleTable)
275
+ .set(fields)
276
+ .where(eq(primaryKeyColumn(drizzleTable, definitionTable.primaryKey), id))
277
+ .returning()
278
+ .get();
279
+ return Promise.resolve(row === undefined ? null : cloneValue(parseEntity(definitionTable, row)));
280
+ }
281
+ catch (error) {
282
+ return Promise.reject(mapDatabaseError(definitionTable.name, error));
283
+ }
284
+ },
285
+ });
286
+ /** Collect non-empty fixture arrays keyed by table name. */
287
+ const collectFixtures = (definition, seed) => {
288
+ const result = new Map();
289
+ for (const tableName of definition.tableNames) {
290
+ const table = definition.tables[tableName];
291
+ if (table === undefined) {
292
+ continue;
293
+ }
294
+ const fixtures = seed?.[tableName] ?? table.fixtures;
295
+ if (fixtures.length > 0) {
296
+ result.set(tableName, fixtures);
297
+ }
298
+ }
299
+ return result;
300
+ };
301
+ /** Insert fixture rows in topological order. */
302
+ const insertFixtureRows = (definition, tables, db, fixturesByTable) => {
303
+ for (const tableName of topologicalTableOrder(definition)) {
304
+ const defTable = definition.tables[tableName];
305
+ const drizzleTable = tables[tableName];
306
+ const fixtures = fixturesByTable.get(tableName);
307
+ if (!defTable || !drizzleTable || !fixtures) {
308
+ continue;
309
+ }
310
+ for (const fixture of fixtures) {
311
+ db.insert(drizzleTable)
312
+ .values(applyGeneratedInsertFields(defTable, fixture))
313
+ .run();
314
+ }
315
+ }
316
+ };
317
+ const seedFixtures = (definition, tables, db, seed) => {
318
+ const fixturesByTable = collectFixtures(definition, seed);
319
+ if (fixturesByTable.size === 0) {
320
+ return;
321
+ }
322
+ insertFixtureRows(definition, tables, db, fixturesByTable);
323
+ };
324
+ const createReadOnlyConnection = (definition, tables, db, client) => {
325
+ const connection = {
326
+ async query(run) {
327
+ return await run({ drizzle: db, tables });
328
+ },
329
+ };
330
+ for (const tableName of storeTableNames(definition)) {
331
+ const definitionTable = definition.tables[tableName];
332
+ const drizzleTable = tables[tableName];
333
+ if (definitionTable === undefined || drizzleTable === undefined) {
334
+ continue;
335
+ }
336
+ Object.defineProperty(connection, tableName, {
337
+ enumerable: true,
338
+ value: createReadOnlyAccessor(definitionTable, drizzleTable, db),
339
+ });
340
+ }
341
+ return Object.freeze(registerConnection(connection, client));
342
+ };
343
+ const createWritableConnection = (definition, tables, db, client) => {
344
+ const connection = {
345
+ async query(run) {
346
+ return await run({ drizzle: db, tables });
347
+ },
348
+ };
349
+ for (const tableName of storeTableNames(definition)) {
350
+ const definitionTable = definition.tables[tableName];
351
+ const drizzleTable = tables[tableName];
352
+ if (definitionTable === undefined || drizzleTable === undefined) {
353
+ continue;
354
+ }
355
+ Object.defineProperty(connection, tableName, {
356
+ enumerable: true,
357
+ value: createWritableAccessor(definitionTable, drizzleTable, db),
358
+ });
359
+ }
360
+ return Object.freeze(registerConnection(connection, client));
361
+ };
362
+ const buildProvisionShape = (value, store, tables, access) => Object.freeze({
363
+ ...value,
364
+ access,
365
+ store,
366
+ tables,
367
+ });
368
+ const connectionHealth = (connection) => {
369
+ const client = connectionClients.get(connection);
370
+ if (client === undefined) {
371
+ return Result.err(new InternalError('Drizzle store connection is missing its SQLite client'));
372
+ }
373
+ try {
374
+ client.query('SELECT 1').get();
375
+ return Result.ok({ ok: true });
376
+ }
377
+ catch (error) {
378
+ return Result.err(asError(error));
379
+ }
380
+ };
381
+ /**
382
+ * Bind a store definition to a Drizzle-backed SQLite provision.
383
+ *
384
+ * The returned provision manages its own connection lifecycle. The `mock()`
385
+ * factory creates an in-memory SQLite database seeded with fixtures — callers
386
+ * who obtain a mock connection are responsible for calling `closeConnection()`
387
+ * when done, or letting the connection be garbage-collected (the underlying
388
+ * `Database` client is tracked via `WeakMap`).
389
+ *
390
+ * Note: the `search` field on `StoreTableInput` is not yet interpreted by
391
+ * this connector — it is reserved for future full-text search support.
392
+ */
393
+ export const connectDrizzle = (definition, options) => {
394
+ const tables = deriveDrizzleTables(definition);
395
+ return buildProvisionShape(provision(options.id ?? defaultProvisionId, {
396
+ create: () => {
397
+ try {
398
+ const client = openSqliteDatabase(options.url, false);
399
+ try {
400
+ ensureSqliteSchema(client, definition);
401
+ }
402
+ catch (error) {
403
+ client.close();
404
+ throw error;
405
+ }
406
+ const db = drizzle({ client, schema: tables });
407
+ return Result.ok(createWritableConnection(definition, tables, db, client));
408
+ }
409
+ catch (error) {
410
+ return Result.err(new InternalError(`Drizzle store failed to open database at "${options.url}": ${asError(error).message}`, { cause: asError(error) }));
411
+ }
412
+ },
413
+ description: options.description ??
414
+ 'Drizzle-backed writable store bound from an @ontrails/store definition.',
415
+ dispose: (connection) => {
416
+ closeConnection(connection);
417
+ },
418
+ health: connectionHealth,
419
+ mock: () => {
420
+ const client = openSqliteDatabase(':memory:', false);
421
+ try {
422
+ ensureSqliteSchema(client, definition);
423
+ const db = drizzle({ client, schema: tables });
424
+ seedFixtures(definition, tables, db, options.mockSeed);
425
+ return createWritableConnection(definition, tables, db, client);
426
+ }
427
+ catch (error) {
428
+ client.close();
429
+ throw error;
430
+ }
431
+ },
432
+ }), definition, tables, 'readwrite');
433
+ };
434
+ export const connectReadOnlyDrizzle = (definition, options) => {
435
+ const tables = deriveDrizzleTables(definition);
436
+ return buildProvisionShape(provision(options.id ?? defaultProvisionId, {
437
+ create: () => {
438
+ try {
439
+ const client = openSqliteDatabase(options.url, true);
440
+ const db = drizzle({ client, schema: tables });
441
+ return Result.ok(createReadOnlyConnection(definition, tables, db, client));
442
+ }
443
+ catch (error) {
444
+ return Result.err(new InternalError(`Drizzle read-only store failed to open database at "${options.url}": ${asError(error).message}`, { cause: asError(error) }));
445
+ }
446
+ },
447
+ description: options.description ??
448
+ 'Drizzle-backed read-only store bound from an @ontrails/store definition.',
449
+ dispose: (connection) => {
450
+ closeConnection(connection);
451
+ },
452
+ health: connectionHealth,
453
+ }), definition, tables, 'readonly');
454
+ };
455
+ export const store = (tables, options) => connectDrizzle(defineStore(tables), options);
456
+ export const readonlyStore = (tables, options) => connectReadOnlyDrizzle(defineStore(tables), options);
457
+ export const getSchema = (binding) => binding.tables;
458
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/drizzle/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { z } from 'zod';
2
+ import type { AnyStoreDefinition } from '../types.js';
3
+ import type { DrizzleStoreSchema } from './types.js';
4
+ interface SqliteFieldSpec {
5
+ readonly defaultValue?: unknown;
6
+ readonly enumValues?: readonly [string, ...string[]];
7
+ readonly kind: 'boolean' | 'date' | 'integer' | 'json' | 'real' | 'text';
8
+ readonly nullable: boolean;
9
+ readonly optional: boolean;
10
+ }
11
+ export declare const describeField: (field: string, schema: z.ZodType) => SqliteFieldSpec;
12
+ export declare const deriveDrizzleTables: <TStore extends AnyStoreDefinition>(definition: TStore) => DrizzleStoreSchema<TStore>;
13
+ export declare const createSqliteSchemaStatements: (definition: AnyStoreDefinition) => readonly string[];
14
+ export {};
15
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/drizzle/schema.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,KAAK,EAAE,kBAAkB,EAAiB,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA6BrD,UAAU,eAAe;IACvB,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IACrD,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACzE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AA4JD,eAAO,MAAM,aAAa,GACxB,OAAO,MAAM,EACb,QAAQ,CAAC,CAAC,OAAO,KAChB,eAYF,CAAC;AA+TF,eAAO,MAAM,mBAAmB,GAAI,MAAM,SAAS,kBAAkB,EACnE,YAAY,MAAM,KACjB,kBAAkB,CAAC,MAAM,CAsB3B,CAAC;AAEF,eAAO,MAAM,4BAA4B,GACvC,YAAY,kBAAkB,KAC7B,SAAS,MAAM,EAMd,CAAC"}