@storyshelf/db-sqlite 0.3.2 → 0.5.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 (73) hide show
  1. package/README.md +29 -3
  2. package/dist/better-sqlite3.d.mts +29 -0
  3. package/dist/better-sqlite3.mjs +116 -0
  4. package/dist/better-sqlite3.mjs.map +1 -0
  5. package/dist/bun-sqlite.d.mts +30 -0
  6. package/dist/bun-sqlite.mjs +120 -0
  7. package/dist/bun-sqlite.mjs.map +1 -0
  8. package/dist/d1.d.mts +38 -0
  9. package/dist/d1.mjs +108 -0
  10. package/dist/d1.mjs.map +1 -0
  11. package/dist/ddl.d.mts +14 -0
  12. package/dist/ddl.mjs +342 -0
  13. package/dist/ddl.mjs.map +1 -0
  14. package/dist/drizzle-factory.d.mts +19 -0
  15. package/dist/drizzle-factory.mjs +121 -0
  16. package/dist/drizzle-factory.mjs.map +1 -0
  17. package/dist/index.mjs +102 -36
  18. package/dist/index.mjs.map +1 -1
  19. package/dist/schema/baseline.d.mts +204 -0
  20. package/dist/schema/baseline.mjs +23 -0
  21. package/dist/schema/baseline.mjs.map +1 -0
  22. package/dist/schema/build.d.mts +405 -0
  23. package/dist/schema/build.mjs +33 -0
  24. package/dist/schema/build.mjs.map +1 -0
  25. package/dist/schema/capture-attempt.d.mts +482 -0
  26. package/dist/schema/capture-attempt.mjs +40 -0
  27. package/dist/schema/capture-attempt.mjs.map +1 -0
  28. package/dist/schema/comment.d.mts +215 -0
  29. package/dist/schema/comment.mjs +26 -0
  30. package/dist/schema/comment.mjs.map +1 -0
  31. package/dist/schema/content-refs.d.mts +95 -0
  32. package/dist/schema/content-refs.mjs +16 -0
  33. package/dist/schema/content-refs.mjs.map +1 -0
  34. package/dist/schema/label.d.mts +288 -0
  35. package/dist/schema/label.mjs +30 -0
  36. package/dist/schema/label.mjs.map +1 -0
  37. package/dist/schema/member.d.mts +140 -0
  38. package/dist/schema/member.mjs +20 -0
  39. package/dist/schema/member.mjs.map +1 -0
  40. package/dist/schema/notification.d.mts +344 -0
  41. package/dist/schema/notification.mjs +33 -0
  42. package/dist/schema/notification.mjs.map +1 -0
  43. package/dist/schema/project-group-mapping.d.mts +119 -0
  44. package/dist/schema/project-group-mapping.mjs +18 -0
  45. package/dist/schema/project-group-mapping.mjs.map +1 -0
  46. package/dist/schema/project.d.mts +358 -0
  47. package/dist/schema/project.mjs +29 -0
  48. package/dist/schema/project.mjs.map +1 -0
  49. package/dist/schema/snapshot.d.mts +487 -0
  50. package/dist/schema/snapshot.mjs +38 -0
  51. package/dist/schema/snapshot.mjs.map +1 -0
  52. package/dist/schema/status-config.d.mts +157 -0
  53. package/dist/schema/status-config.mjs +20 -0
  54. package/dist/schema/status-config.mjs.map +1 -0
  55. package/dist/schema/token.d.mts +157 -0
  56. package/dist/schema/token.mjs +21 -0
  57. package/dist/schema/token.mjs.map +1 -0
  58. package/dist/schema/user-invite.d.mts +137 -0
  59. package/dist/schema/user-invite.mjs +19 -0
  60. package/dist/schema/user-invite.mjs.map +1 -0
  61. package/dist/schema/user.d.mts +238 -0
  62. package/dist/schema/user.mjs +23 -0
  63. package/dist/schema/user.mjs.map +1 -0
  64. package/dist/schema/webhook.d.mts +157 -0
  65. package/dist/schema/webhook.mjs +20 -0
  66. package/dist/schema/webhook.mjs.map +1 -0
  67. package/dist/schema.d.mts +47 -0
  68. package/dist/schema.mjs +46 -0
  69. package/dist/schema.mjs.map +1 -0
  70. package/dist/turso.d.mts +32 -0
  71. package/dist/turso.mjs +134 -0
  72. package/dist/turso.mjs.map +1 -0
  73. package/package.json +66 -10
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-group-mapping.mjs","names":[],"sources":["../../src/schema/project-group-mapping.ts"],"sourcesContent":["import type { ProjectRole } from \"@storyshelf/core/types\";\nimport { sqliteTable, text, uniqueIndex } from \"drizzle-orm/sqlite-core\";\nimport { projects } from \"./project.ts\";\n\n/** Narrow `project_group_mappings` table definition. */\nexport const projectGroupMappings = sqliteTable(\n \"project_group_mappings\",\n {\n id: text(\"id\").primaryKey(),\n projectId: text(\"project_id\")\n .notNull()\n .references(() => projects.id, { onDelete: \"cascade\" }),\n groupName: text(\"group_name\").notNull(),\n role: text(\"role\").$type<ProjectRole>().notNull().default(\"viewer\"),\n createdAt: text(\"created_at\").notNull(),\n },\n (t) => [uniqueIndex(\"project_group_mappings_project_group_idx\").on(t.projectId, t.groupName)],\n);\n\n/** An identity-provider group to project-role mapping row. */\nexport interface ProjectGroupMapping {\n id: string;\n projectId: string;\n groupName: string;\n role: ProjectRole;\n createdAt: string;\n}\n"],"mappings":";;;;;;;AAKA,MAAa,uBAAuB,YAClC,0BACA;CACE,IAAI,KAAK,IAAI,CAAC,CAAC,WAAW;CAC1B,WAAW,KAAK,YAAY,CAAC,CAC1B,QAAQ,CAAC,CACT,iBAAiB,SAAS,IAAI,EAAE,UAAU,UAAU,CAAC;CACxD,WAAW,KAAK,YAAY,CAAC,CAAC,QAAQ;CACtC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAmB,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,QAAQ;CAClE,WAAW,KAAK,YAAY,CAAC,CAAC,QAAQ;AACxC,IACC,MAAM,CAAC,YAAY,0CAA0C,CAAC,CAAC,GAAG,EAAE,WAAW,EAAE,SAAS,CAAC,CAC9F"}
@@ -0,0 +1,358 @@
1
+ import __tsdown_shims_path from 'node:path';
2
+ import __tsdown_shims_url from 'node:url';
3
+ //#region src/schema/project.d.ts
4
+ /** Narrow `projects` table definition. */
5
+ declare const projects: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
6
+ name: "projects";
7
+ schema: undefined;
8
+ columns: {
9
+ id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
10
+ name: "id";
11
+ tableName: "projects";
12
+ dataType: "string";
13
+ columnType: "SQLiteText";
14
+ data: string;
15
+ driverParam: string;
16
+ notNull: true;
17
+ hasDefault: false;
18
+ isPrimaryKey: true;
19
+ isAutoincrement: false;
20
+ hasRuntimeDefault: false;
21
+ enumValues: [string, ...string[]];
22
+ baseColumn: never;
23
+ identity: undefined;
24
+ generated: undefined;
25
+ }, {}, {
26
+ length: number | undefined;
27
+ }>;
28
+ name: import("drizzle-orm/sqlite-core").SQLiteColumn<{
29
+ name: "name";
30
+ tableName: "projects";
31
+ dataType: "string";
32
+ columnType: "SQLiteText";
33
+ data: string;
34
+ driverParam: string;
35
+ notNull: true;
36
+ hasDefault: false;
37
+ isPrimaryKey: false;
38
+ isAutoincrement: false;
39
+ hasRuntimeDefault: false;
40
+ enumValues: [string, ...string[]];
41
+ baseColumn: never;
42
+ identity: undefined;
43
+ generated: undefined;
44
+ }, {}, {
45
+ length: number | undefined;
46
+ }>;
47
+ slug: import("drizzle-orm/sqlite-core").SQLiteColumn<{
48
+ name: "slug";
49
+ tableName: "projects";
50
+ dataType: "string";
51
+ columnType: "SQLiteText";
52
+ data: string;
53
+ driverParam: string;
54
+ notNull: true;
55
+ hasDefault: false;
56
+ isPrimaryKey: false;
57
+ isAutoincrement: false;
58
+ hasRuntimeDefault: false;
59
+ enumValues: [string, ...string[]];
60
+ baseColumn: never;
61
+ identity: undefined;
62
+ generated: undefined;
63
+ }, {}, {
64
+ length: number | undefined;
65
+ }>;
66
+ gitRepository: import("drizzle-orm/sqlite-core").SQLiteColumn<{
67
+ name: "git_repository";
68
+ tableName: "projects";
69
+ dataType: "string";
70
+ columnType: "SQLiteText";
71
+ data: string;
72
+ driverParam: string;
73
+ notNull: false;
74
+ hasDefault: false;
75
+ isPrimaryKey: false;
76
+ isAutoincrement: false;
77
+ hasRuntimeDefault: false;
78
+ enumValues: [string, ...string[]];
79
+ baseColumn: never;
80
+ identity: undefined;
81
+ generated: undefined;
82
+ }, {}, {
83
+ length: number | undefined;
84
+ }>;
85
+ gitDefaultBranch: import("drizzle-orm/sqlite-core").SQLiteColumn<{
86
+ name: "git_default_branch";
87
+ tableName: "projects";
88
+ dataType: "string";
89
+ columnType: "SQLiteText";
90
+ data: string;
91
+ driverParam: string;
92
+ notNull: true;
93
+ hasDefault: true;
94
+ isPrimaryKey: false;
95
+ isAutoincrement: false;
96
+ hasRuntimeDefault: false;
97
+ enumValues: [string, ...string[]];
98
+ baseColumn: never;
99
+ identity: undefined;
100
+ generated: undefined;
101
+ }, {}, {
102
+ length: number | undefined;
103
+ }>;
104
+ pixelThreshold: import("drizzle-orm/sqlite-core").SQLiteColumn<{
105
+ name: "pixel_threshold";
106
+ tableName: "projects";
107
+ dataType: "number";
108
+ columnType: "SQLiteReal";
109
+ data: number;
110
+ driverParam: number;
111
+ notNull: true;
112
+ hasDefault: true;
113
+ isPrimaryKey: false;
114
+ isAutoincrement: false;
115
+ hasRuntimeDefault: false;
116
+ enumValues: undefined;
117
+ baseColumn: never;
118
+ identity: undefined;
119
+ generated: undefined;
120
+ }, {}, {}>;
121
+ maxDiffRatio: import("drizzle-orm/sqlite-core").SQLiteColumn<{
122
+ name: "max_diff_ratio";
123
+ tableName: "projects";
124
+ dataType: "number";
125
+ columnType: "SQLiteReal";
126
+ data: number;
127
+ driverParam: number;
128
+ notNull: true;
129
+ hasDefault: true;
130
+ isPrimaryKey: false;
131
+ isAutoincrement: false;
132
+ hasRuntimeDefault: false;
133
+ enumValues: undefined;
134
+ baseColumn: never;
135
+ identity: undefined;
136
+ generated: undefined;
137
+ }, {}, {}>;
138
+ publicBranchRegex: import("drizzle-orm/sqlite-core").SQLiteColumn<{
139
+ name: "public_branch_regex";
140
+ tableName: "projects";
141
+ dataType: "string";
142
+ columnType: "SQLiteText";
143
+ data: string;
144
+ driverParam: string;
145
+ notNull: false;
146
+ hasDefault: false;
147
+ isPrimaryKey: false;
148
+ isAutoincrement: false;
149
+ hasRuntimeDefault: false;
150
+ enumValues: [string, ...string[]];
151
+ baseColumn: never;
152
+ identity: undefined;
153
+ generated: undefined;
154
+ }, {}, {
155
+ length: number | undefined;
156
+ }>;
157
+ storybookMeta: import("drizzle-orm/sqlite-core").SQLiteColumn<{
158
+ name: "storybook_meta";
159
+ tableName: "projects";
160
+ dataType: "string";
161
+ columnType: "SQLiteText";
162
+ data: string | null | undefined;
163
+ driverParam: string;
164
+ notNull: false;
165
+ hasDefault: true;
166
+ isPrimaryKey: false;
167
+ isAutoincrement: false;
168
+ hasRuntimeDefault: false;
169
+ enumValues: [string, ...string[]];
170
+ baseColumn: never;
171
+ identity: undefined;
172
+ generated: undefined;
173
+ }, {}, {
174
+ length: number | undefined;
175
+ $type: string | null | undefined;
176
+ }>;
177
+ executePlay: import("drizzle-orm/sqlite-core").SQLiteColumn<{
178
+ name: "execute_play";
179
+ tableName: "projects";
180
+ dataType: "boolean";
181
+ columnType: "SQLiteBoolean";
182
+ data: boolean;
183
+ driverParam: number;
184
+ notNull: true;
185
+ hasDefault: true;
186
+ isPrimaryKey: false;
187
+ isAutoincrement: false;
188
+ hasRuntimeDefault: false;
189
+ enumValues: undefined;
190
+ baseColumn: never;
191
+ identity: undefined;
192
+ generated: undefined;
193
+ }, {}, {}>;
194
+ playTimeoutMs: import("drizzle-orm/sqlite-core").SQLiteColumn<{
195
+ name: "play_timeout_ms";
196
+ tableName: "projects";
197
+ dataType: "number";
198
+ columnType: "SQLiteInteger";
199
+ data: number;
200
+ driverParam: number;
201
+ notNull: true;
202
+ hasDefault: true;
203
+ isPrimaryKey: false;
204
+ isAutoincrement: false;
205
+ hasRuntimeDefault: false;
206
+ enumValues: undefined;
207
+ baseColumn: never;
208
+ identity: undefined;
209
+ generated: undefined;
210
+ }, {}, {}>;
211
+ runA11y: import("drizzle-orm/sqlite-core").SQLiteColumn<{
212
+ name: "run_a11y";
213
+ tableName: "projects";
214
+ dataType: "boolean";
215
+ columnType: "SQLiteBoolean";
216
+ data: boolean;
217
+ driverParam: number;
218
+ notNull: true;
219
+ hasDefault: true;
220
+ isPrimaryKey: false;
221
+ isAutoincrement: false;
222
+ hasRuntimeDefault: false;
223
+ enumValues: undefined;
224
+ baseColumn: never;
225
+ identity: undefined;
226
+ generated: undefined;
227
+ }, {}, {}>;
228
+ browser: import("drizzle-orm/sqlite-core").SQLiteColumn<{
229
+ name: "browser";
230
+ tableName: "projects";
231
+ dataType: "string";
232
+ columnType: "SQLiteText";
233
+ data: string;
234
+ driverParam: string;
235
+ notNull: true;
236
+ hasDefault: true;
237
+ isPrimaryKey: false;
238
+ isAutoincrement: false;
239
+ hasRuntimeDefault: false;
240
+ enumValues: [string, ...string[]];
241
+ baseColumn: never;
242
+ identity: undefined;
243
+ generated: undefined;
244
+ }, {}, {
245
+ length: number | undefined;
246
+ }>;
247
+ viewports: import("drizzle-orm/sqlite-core").SQLiteColumn<{
248
+ name: "viewports";
249
+ tableName: "projects";
250
+ dataType: "string";
251
+ columnType: "SQLiteText";
252
+ data: string;
253
+ driverParam: string;
254
+ notNull: false;
255
+ hasDefault: false;
256
+ isPrimaryKey: false;
257
+ isAutoincrement: false;
258
+ hasRuntimeDefault: false;
259
+ enumValues: [string, ...string[]];
260
+ baseColumn: never;
261
+ identity: undefined;
262
+ generated: undefined;
263
+ }, {}, {
264
+ length: number | undefined;
265
+ }>;
266
+ automigrate: import("drizzle-orm/sqlite-core").SQLiteColumn<{
267
+ name: "automigrate";
268
+ tableName: "projects";
269
+ dataType: "boolean";
270
+ columnType: "SQLiteBoolean";
271
+ data: boolean;
272
+ driverParam: number;
273
+ notNull: true;
274
+ hasDefault: true;
275
+ isPrimaryKey: false;
276
+ isAutoincrement: false;
277
+ hasRuntimeDefault: false;
278
+ enumValues: undefined;
279
+ baseColumn: never;
280
+ identity: undefined;
281
+ generated: undefined;
282
+ }, {}, {}>;
283
+ createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
284
+ name: "created_at";
285
+ tableName: "projects";
286
+ dataType: "string";
287
+ columnType: "SQLiteText";
288
+ data: string;
289
+ driverParam: string;
290
+ notNull: true;
291
+ hasDefault: false;
292
+ isPrimaryKey: false;
293
+ isAutoincrement: false;
294
+ hasRuntimeDefault: false;
295
+ enumValues: [string, ...string[]];
296
+ baseColumn: never;
297
+ identity: undefined;
298
+ generated: undefined;
299
+ }, {}, {
300
+ length: number | undefined;
301
+ }>;
302
+ updatedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
303
+ name: "updated_at";
304
+ tableName: "projects";
305
+ dataType: "string";
306
+ columnType: "SQLiteText";
307
+ data: string;
308
+ driverParam: string;
309
+ notNull: true;
310
+ hasDefault: false;
311
+ isPrimaryKey: false;
312
+ isAutoincrement: false;
313
+ hasRuntimeDefault: false;
314
+ enumValues: [string, ...string[]];
315
+ baseColumn: never;
316
+ identity: undefined;
317
+ generated: undefined;
318
+ }, {}, {
319
+ length: number | undefined;
320
+ }>;
321
+ };
322
+ dialect: 'sqlite';
323
+ }>;
324
+ /** A project row. */
325
+ interface Project {
326
+ id: string;
327
+ name: string;
328
+ slug: string;
329
+ gitRepository: string | null;
330
+ gitDefaultBranch: string;
331
+ pixelThreshold: number;
332
+ maxDiffRatio: number;
333
+ publicBranchRegex: string | null;
334
+ storybookMeta: string | null | undefined;
335
+ executePlay: boolean;
336
+ playTimeoutMs: number;
337
+ runA11y: boolean;
338
+ browser: string;
339
+ viewports: string | null;
340
+ automigrate: boolean;
341
+ createdAt: string;
342
+ updatedAt: string;
343
+ }
344
+ /** Storybook metadata synced from a project's published Storybook. */
345
+ interface StorybookMeta {
346
+ framework?: {
347
+ name?: string;
348
+ options?: unknown;
349
+ };
350
+ addons?: string[];
351
+ storiesGlobs?: string[];
352
+ staticDirs?: string[];
353
+ packagePath?: string;
354
+ previewParameters?: Record<string, unknown>;
355
+ }
356
+ //#endregion
357
+ export { Project, StorybookMeta, projects };
358
+ //# sourceMappingURL=project.d.mts.map
@@ -0,0 +1,29 @@
1
+ import "node:path";
2
+ import "node:url";
3
+ import.meta.url;
4
+ import { integer, real, sqliteTable, text } from "drizzle-orm/sqlite-core";
5
+ //#region src/schema/project.ts
6
+ /** Narrow `projects` table definition. */
7
+ const projects = sqliteTable("projects", {
8
+ id: text("id").primaryKey(),
9
+ name: text("name").notNull(),
10
+ slug: text("slug").notNull(),
11
+ gitRepository: text("git_repository"),
12
+ gitDefaultBranch: text("git_default_branch").notNull().default("main"),
13
+ pixelThreshold: real("pixel_threshold").notNull().default(.1),
14
+ maxDiffRatio: real("max_diff_ratio").notNull().default(.01),
15
+ publicBranchRegex: text("public_branch_regex"),
16
+ storybookMeta: text("storybook_meta").$type().default(null),
17
+ executePlay: integer("execute_play", { mode: "boolean" }).notNull().default(false),
18
+ playTimeoutMs: integer("play_timeout_ms").notNull().default(1e4),
19
+ runA11y: integer("run_a11y", { mode: "boolean" }).notNull().default(false),
20
+ browser: text("browser").notNull().default("chromium"),
21
+ viewports: text("viewports"),
22
+ automigrate: integer("automigrate", { mode: "boolean" }).notNull().default(false),
23
+ createdAt: text("created_at").notNull(),
24
+ updatedAt: text("updated_at").notNull()
25
+ });
26
+ //#endregion
27
+ export { projects };
28
+
29
+ //# sourceMappingURL=project.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.mjs","names":[],"sources":["../../src/schema/project.ts"],"sourcesContent":["import { integer, real, sqliteTable, text } from \"drizzle-orm/sqlite-core\";\n\n/** Narrow `projects` table definition. */\nexport const projects = sqliteTable(\"projects\", {\n id: text(\"id\").primaryKey(),\n name: text(\"name\").notNull(),\n slug: text(\"slug\").notNull(),\n gitRepository: text(\"git_repository\"),\n gitDefaultBranch: text(\"git_default_branch\").notNull().default(\"main\"),\n pixelThreshold: real(\"pixel_threshold\").notNull().default(0.1),\n maxDiffRatio: real(\"max_diff_ratio\").notNull().default(0.01),\n publicBranchRegex: text(\"public_branch_regex\"),\n storybookMeta: text(\"storybook_meta\").$type<string | null | undefined>().default(null),\n executePlay: integer(\"execute_play\", { mode: \"boolean\" }).notNull().default(false),\n playTimeoutMs: integer(\"play_timeout_ms\").notNull().default(10_000),\n runA11y: integer(\"run_a11y\", { mode: \"boolean\" }).notNull().default(false),\n browser: text(\"browser\").notNull().default(\"chromium\"),\n viewports: text(\"viewports\"),\n automigrate: integer(\"automigrate\", { mode: \"boolean\" }).notNull().default(false),\n createdAt: text(\"created_at\").notNull(),\n updatedAt: text(\"updated_at\").notNull(),\n});\n\n/** A project row. */\nexport interface Project {\n id: string;\n name: string;\n slug: string;\n gitRepository: string | null;\n gitDefaultBranch: string;\n pixelThreshold: number;\n maxDiffRatio: number;\n publicBranchRegex: string | null;\n storybookMeta: string | null | undefined;\n executePlay: boolean;\n playTimeoutMs: number;\n runA11y: boolean;\n browser: string;\n viewports: string | null;\n automigrate: boolean;\n createdAt: string;\n updatedAt: string;\n}\n\n/** Storybook metadata synced from a project's published Storybook. */\nexport interface StorybookMeta {\n framework?: { name?: string; options?: unknown };\n addons?: string[];\n storiesGlobs?: string[];\n staticDirs?: string[];\n packagePath?: string;\n previewParameters?: Record<string, unknown>;\n}\n"],"mappings":";;;;;;AAGA,MAAa,WAAW,YAAY,YAAY;CAC9C,IAAI,KAAK,IAAI,CAAC,CAAC,WAAW;CAC1B,MAAM,KAAK,MAAM,CAAC,CAAC,QAAQ;CAC3B,MAAM,KAAK,MAAM,CAAC,CAAC,QAAQ;CAC3B,eAAe,KAAK,gBAAgB;CACpC,kBAAkB,KAAK,oBAAoB,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,MAAM;CACrE,gBAAgB,KAAK,iBAAiB,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAG;CAC7D,cAAc,KAAK,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,GAAI;CAC3D,mBAAmB,KAAK,qBAAqB;CAC7C,eAAe,KAAK,gBAAgB,CAAC,CAAC,MAAiC,CAAC,CAAC,QAAQ,IAAI;CACrF,aAAa,QAAQ,gBAAgB,EAAE,MAAM,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,KAAK;CACjF,eAAe,QAAQ,iBAAiB,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,GAAM;CAClE,SAAS,QAAQ,YAAY,EAAE,MAAM,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,KAAK;CACzE,SAAS,KAAK,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,UAAU;CACrD,WAAW,KAAK,WAAW;CAC3B,aAAa,QAAQ,eAAe,EAAE,MAAM,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,KAAK;CAChF,WAAW,KAAK,YAAY,CAAC,CAAC,QAAQ;CACtC,WAAW,KAAK,YAAY,CAAC,CAAC,QAAQ;AACxC,CAAC"}