convex-feedback 0.2.0-beta.9 → 0.2.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.
- package/README.md +398 -7
- package/dist/.tsbuildinfo +1 -1
- package/dist/client/api.d.ts +49 -9
- package/dist/client/api.d.ts.map +1 -1
- package/dist/client/config.d.ts +1 -3
- package/dist/client/config.d.ts.map +1 -1
- package/dist/client/config.js.map +1 -1
- package/dist/client/index.d.ts +707 -15
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +243 -12
- package/dist/client/index.js.map +1 -1
- package/dist/component/_generated/api.d.ts +2 -0
- package/dist/component/_generated/api.d.ts.map +1 -1
- package/dist/component/_generated/api.js.map +1 -1
- package/dist/component/_generated/component.d.ts +222 -4
- package/dist/component/_generated/component.d.ts.map +1 -1
- package/dist/component/admin.d.ts +5 -90
- package/dist/component/admin.d.ts.map +1 -1
- package/dist/component/admin.js +59 -29
- package/dist/component/admin.js.map +1 -1
- package/dist/component/comments.d.ts +107 -15
- package/dist/component/comments.d.ts.map +1 -1
- package/dist/component/comments.js +342 -28
- package/dist/component/comments.js.map +1 -1
- package/dist/component/crons.d.ts.map +1 -1
- package/dist/component/crons.js +4 -0
- package/dist/component/crons.js.map +1 -1
- package/dist/component/entries.d.ts +119 -91
- package/dist/component/entries.d.ts.map +1 -1
- package/dist/component/entries.js +348 -29
- package/dist/component/entries.js.map +1 -1
- package/dist/component/helpers.d.ts +32 -1
- package/dist/component/helpers.d.ts.map +1 -1
- package/dist/component/helpers.js +121 -4
- package/dist/component/helpers.js.map +1 -1
- package/dist/component/migrations.d.ts +24 -0
- package/dist/component/migrations.d.ts.map +1 -1
- package/dist/component/migrations.js +318 -0
- package/dist/component/migrations.js.map +1 -1
- package/dist/component/model.d.ts +455 -120
- package/dist/component/model.d.ts.map +1 -1
- package/dist/component/model.js +70 -2
- package/dist/component/model.js.map +1 -1
- package/dist/component/reactions.d.ts +37 -0
- package/dist/component/reactions.d.ts.map +1 -0
- package/dist/component/reactions.js +52 -0
- package/dist/component/reactions.js.map +1 -0
- package/dist/component/roadmap.d.ts +10 -46
- package/dist/component/roadmap.d.ts.map +1 -1
- package/dist/component/roadmap.js +239 -21
- package/dist/component/roadmap.js.map +1 -1
- package/dist/component/schema.d.ts +33 -5
- package/dist/component/schema.d.ts.map +1 -1
- package/dist/component/schema.js +40 -4
- package/dist/component/schema.js.map +1 -1
- package/dist/react/index.d.ts +26 -238
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +65 -2
- package/dist/react/index.js.map +1 -1
- package/dist/test.d.ts +23 -5
- package/dist/test.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/client/README.md +6 -1
- package/src/client/api.ts +89 -7
- package/src/client/config.ts +1 -3
- package/src/client/index.ts +1237 -34
- package/src/component/README.md +32 -4
- package/src/component/_generated/api.ts +2 -0
- package/src/component/_generated/component.ts +290 -8
- package/src/component/admin.ts +88 -30
- package/src/component/comments.ts +405 -26
- package/src/component/crons.ts +10 -0
- package/src/component/entries.ts +388 -27
- package/src/component/helpers.ts +163 -4
- package/src/component/migrations.ts +415 -0
- package/src/component/model.ts +381 -117
- package/src/component/reactions.ts +60 -0
- package/src/component/roadmap.ts +357 -35
- package/src/component/schema.ts +40 -4
- package/src/react/README.md +5 -0
- package/src/react/index.ts +90 -3
|
@@ -1,8 +1,71 @@
|
|
|
1
1
|
import { v } from "convex/values";
|
|
2
2
|
import { internal } from "./_generated/api.js";
|
|
3
3
|
import { internalMutation } from "./_generated/server.js";
|
|
4
|
+
import { startCommentDeletion } from "./comments.js";
|
|
4
5
|
import { entryStatusFilterForStatus } from "./model.js";
|
|
5
6
|
const statusFilterMigrationBatchSize = 100;
|
|
7
|
+
const legacyCommentMigrationBatchSize = 25;
|
|
8
|
+
const legacyReactionMigrationBatchSize = 100;
|
|
9
|
+
async function scheduleLegacyCommentMigration(ctx, phase) {
|
|
10
|
+
await ctx.scheduler.runAfter(0, internal.migrations.cleanupLegacyComments, {
|
|
11
|
+
phase,
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Validate a comment's parent chain without loading the same document twice.
|
|
16
|
+
* A missing parent or an entry mismatch makes the whole subtree legacy
|
|
17
|
+
* orphan data; a pending ancestor points the migration at the existing
|
|
18
|
+
* bounded subtree cleaner.
|
|
19
|
+
*/
|
|
20
|
+
async function inspectCommentChain(ctx, comment, cache) {
|
|
21
|
+
let current = comment;
|
|
22
|
+
let remaining = Math.max(0, comment.depth) + 1;
|
|
23
|
+
while (remaining > 0) {
|
|
24
|
+
if (current.deletingAt !== undefined) {
|
|
25
|
+
return { kind: "pending", root: current };
|
|
26
|
+
}
|
|
27
|
+
if (current.deletedAt !== undefined) {
|
|
28
|
+
return { kind: "pending", root: current };
|
|
29
|
+
}
|
|
30
|
+
if (current.parentCommentId === undefined) {
|
|
31
|
+
return { kind: "valid" };
|
|
32
|
+
}
|
|
33
|
+
remaining -= 1;
|
|
34
|
+
const parentId = current.parentCommentId;
|
|
35
|
+
let parent = cache.get(parentId);
|
|
36
|
+
if (parent === undefined) {
|
|
37
|
+
parent = await ctx.db.get("comments", parentId);
|
|
38
|
+
cache.set(parentId, parent);
|
|
39
|
+
}
|
|
40
|
+
if (parent === null || parent.entryId !== comment.entryId) {
|
|
41
|
+
return { kind: "orphan" };
|
|
42
|
+
}
|
|
43
|
+
current = parent;
|
|
44
|
+
}
|
|
45
|
+
// A malformed cycle or an invalid depth is safer to remove than to leave
|
|
46
|
+
// permanently unreachable feedback data behind.
|
|
47
|
+
return { kind: "orphan" };
|
|
48
|
+
}
|
|
49
|
+
async function scheduleEntryCleanupOnce(ctx, entryId, scheduled) {
|
|
50
|
+
const key = String(entryId);
|
|
51
|
+
if (scheduled.has(key))
|
|
52
|
+
return;
|
|
53
|
+
scheduled.add(key);
|
|
54
|
+
await ctx.scheduler.runAfter(0, internal.entries.removeBatch, { entryId });
|
|
55
|
+
}
|
|
56
|
+
async function deleteLegacyReaction(ctx, reaction, comment, entry) {
|
|
57
|
+
await ctx.db.delete("reactions", reaction._id);
|
|
58
|
+
// Keep a surviving comment's denormalized count accurate when a malformed
|
|
59
|
+
// legacy reaction points at a missing entry but still names a live comment.
|
|
60
|
+
if (comment !== null &&
|
|
61
|
+
entry !== null &&
|
|
62
|
+
comment.deletingAt === undefined &&
|
|
63
|
+
comment.deletedAt === undefined) {
|
|
64
|
+
await ctx.db.patch("comments", comment._id, {
|
|
65
|
+
likeCount: Math.max(0, comment.likeCount - 1),
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
6
69
|
/**
|
|
7
70
|
* Backfills one bounded batch of legacy entries and schedules the next batch.
|
|
8
71
|
*
|
|
@@ -32,4 +95,259 @@ export const backfillStatusFilter = internalMutation({
|
|
|
32
95
|
return { updated: entries.length, hasMore };
|
|
33
96
|
},
|
|
34
97
|
});
|
|
98
|
+
/**
|
|
99
|
+
* Drain comments written by versions that used soft deletion. The migration
|
|
100
|
+
* is deliberately split into three bounded passes:
|
|
101
|
+
*
|
|
102
|
+
* 1. indexed legacy tombstones are marked for the current subtree cleaner;
|
|
103
|
+
* 2. an indexed comment sweep marks broken parent/entry references;
|
|
104
|
+
* 3. an indexed reaction sweep removes any remaining orphan reactions.
|
|
105
|
+
*
|
|
106
|
+
* Each pass schedules its continuation after committing the current batch.
|
|
107
|
+
* Re-running any phase is safe because migration markers and document deletes
|
|
108
|
+
* are idempotent, while the normal comment cleaner remains the single place
|
|
109
|
+
* that updates counters and removes descendants.
|
|
110
|
+
*/
|
|
111
|
+
export const cleanupLegacyComments = internalMutation({
|
|
112
|
+
args: {
|
|
113
|
+
phase: v.optional(v.union(v.literal("tombstones"), v.literal("comments"), v.literal("reactions"))),
|
|
114
|
+
},
|
|
115
|
+
returns: v.object({
|
|
116
|
+
phase: v.union(v.literal("tombstones"), v.literal("comments"), v.literal("reactions")),
|
|
117
|
+
processed: v.number(),
|
|
118
|
+
hasMore: v.boolean(),
|
|
119
|
+
}),
|
|
120
|
+
handler: async (ctx, args) => {
|
|
121
|
+
const phase = args.phase ?? "tombstones";
|
|
122
|
+
if (phase === "tombstones") {
|
|
123
|
+
const tombstones = await ctx.db
|
|
124
|
+
.query("comments")
|
|
125
|
+
.withIndex("by_deleted_at", (q) => q.gte("deletedAt", 0))
|
|
126
|
+
.take(legacyCommentMigrationBatchSize);
|
|
127
|
+
const scheduledRoots = new Set();
|
|
128
|
+
for (const comment of tombstones) {
|
|
129
|
+
const rootId = comment.deletionRootId ?? comment._id;
|
|
130
|
+
const root = rootId === comment._id
|
|
131
|
+
? comment
|
|
132
|
+
: await ctx.db.get("comments", rootId);
|
|
133
|
+
const deletionRoot = root ?? comment;
|
|
134
|
+
const key = String(deletionRoot._id);
|
|
135
|
+
if (scheduledRoots.has(key))
|
|
136
|
+
continue;
|
|
137
|
+
scheduledRoots.add(key);
|
|
138
|
+
await startCommentDeletion(ctx, deletionRoot, deletionRoot.deletedAt ?? deletionRoot.deletingAt ?? Date.now());
|
|
139
|
+
}
|
|
140
|
+
if (tombstones.length > 0) {
|
|
141
|
+
// Tombstone documents remain indexed until their scheduled cleaner
|
|
142
|
+
// finishes. Retry the same indexed pass so a short migration run also
|
|
143
|
+
// waits for those cleaners before moving to orphan discovery.
|
|
144
|
+
await scheduleLegacyCommentMigration(ctx, "tombstones");
|
|
145
|
+
return {
|
|
146
|
+
phase: "tombstones",
|
|
147
|
+
processed: tombstones.length,
|
|
148
|
+
hasMore: true,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
const pendingComments = await ctx.db
|
|
152
|
+
.query("comments")
|
|
153
|
+
.withIndex("by_legacy_cleanup", (q) => q.eq("legacyCleanupAt", undefined))
|
|
154
|
+
.take(1);
|
|
155
|
+
if (pendingComments.length > 0) {
|
|
156
|
+
await scheduleLegacyCommentMigration(ctx, "comments");
|
|
157
|
+
return { phase: "comments", processed: 0, hasMore: true };
|
|
158
|
+
}
|
|
159
|
+
const pendingReactions = await ctx.db
|
|
160
|
+
.query("reactions")
|
|
161
|
+
.withIndex("by_legacy_cleanup", (q) => q.eq("legacyCleanupAt", undefined))
|
|
162
|
+
.take(1);
|
|
163
|
+
if (pendingReactions.length > 0) {
|
|
164
|
+
await scheduleLegacyCommentMigration(ctx, "reactions");
|
|
165
|
+
return { phase: "reactions", processed: 0, hasMore: true };
|
|
166
|
+
}
|
|
167
|
+
return { phase: "reactions", processed: 0, hasMore: false };
|
|
168
|
+
}
|
|
169
|
+
if (phase === "comments") {
|
|
170
|
+
const page = await ctx.db
|
|
171
|
+
.query("comments")
|
|
172
|
+
.withIndex("by_legacy_cleanup", (q) => q.eq("legacyCleanupAt", undefined))
|
|
173
|
+
.take(legacyCommentMigrationBatchSize);
|
|
174
|
+
const commentCache = new Map();
|
|
175
|
+
for (const comment of page) {
|
|
176
|
+
commentCache.set(String(comment._id), comment);
|
|
177
|
+
}
|
|
178
|
+
const entryCache = new Map();
|
|
179
|
+
const scheduledRoots = new Set();
|
|
180
|
+
const scheduledEntries = new Set();
|
|
181
|
+
const markRoot = async (comment, deletionToken) => {
|
|
182
|
+
const rootId = comment.deletionRootId ?? comment._id;
|
|
183
|
+
const root = rootId === comment._id
|
|
184
|
+
? comment
|
|
185
|
+
: await ctx.db.get("comments", rootId);
|
|
186
|
+
const deletionRoot = root ?? comment;
|
|
187
|
+
const key = String(deletionRoot._id);
|
|
188
|
+
if (scheduledRoots.has(key))
|
|
189
|
+
return;
|
|
190
|
+
scheduledRoots.add(key);
|
|
191
|
+
await startCommentDeletion(ctx, deletionRoot, deletionToken ??
|
|
192
|
+
deletionRoot.deletedAt ??
|
|
193
|
+
deletionRoot.deletingAt ??
|
|
194
|
+
Date.now());
|
|
195
|
+
};
|
|
196
|
+
const getEntry = async (entryId) => {
|
|
197
|
+
const key = String(entryId);
|
|
198
|
+
const cached = entryCache.get(key);
|
|
199
|
+
if (cached !== undefined)
|
|
200
|
+
return cached;
|
|
201
|
+
const entry = await ctx.db.get("entries", entryId);
|
|
202
|
+
entryCache.set(key, entry);
|
|
203
|
+
return entry;
|
|
204
|
+
};
|
|
205
|
+
for (const comment of page) {
|
|
206
|
+
if (comment.deletedAt !== undefined ||
|
|
207
|
+
comment.deletingAt !== undefined) {
|
|
208
|
+
await markRoot(comment, comment.deletedAt ?? comment.deletingAt);
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
const entry = await getEntry(comment.entryId);
|
|
212
|
+
if (entry === null) {
|
|
213
|
+
await markRoot(comment);
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
if (entry.deletingAt !== undefined) {
|
|
217
|
+
await scheduleEntryCleanupOnce(ctx, entry._id, scheduledEntries);
|
|
218
|
+
continue;
|
|
219
|
+
}
|
|
220
|
+
const inspection = await inspectCommentChain(ctx, comment, commentCache);
|
|
221
|
+
if (inspection.kind === "orphan") {
|
|
222
|
+
await markRoot(comment);
|
|
223
|
+
}
|
|
224
|
+
else if (inspection.kind === "pending") {
|
|
225
|
+
await markRoot(inspection.root);
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
await ctx.db.patch("comments", comment._id, {
|
|
229
|
+
legacyCleanupAt: Date.now(),
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
if (page.length === 0) {
|
|
234
|
+
await scheduleLegacyCommentMigration(ctx, "reactions");
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
await scheduleLegacyCommentMigration(ctx, "comments");
|
|
238
|
+
}
|
|
239
|
+
const nextPhase = page.length === 0 ? "reactions" : "comments";
|
|
240
|
+
return {
|
|
241
|
+
phase: nextPhase,
|
|
242
|
+
processed: page.length,
|
|
243
|
+
hasMore: true,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
const page = await ctx.db
|
|
247
|
+
.query("reactions")
|
|
248
|
+
.withIndex("by_legacy_cleanup", (q) => q.eq("legacyCleanupAt", undefined))
|
|
249
|
+
.take(legacyReactionMigrationBatchSize);
|
|
250
|
+
const commentCache = new Map();
|
|
251
|
+
const entryCache = new Map();
|
|
252
|
+
const scheduledRoots = new Set();
|
|
253
|
+
const scheduledEntries = new Set();
|
|
254
|
+
const getComment = async (commentId) => {
|
|
255
|
+
const key = String(commentId);
|
|
256
|
+
const cached = commentCache.get(key);
|
|
257
|
+
if (cached !== undefined)
|
|
258
|
+
return cached;
|
|
259
|
+
const comment = await ctx.db.get("comments", commentId);
|
|
260
|
+
commentCache.set(key, comment);
|
|
261
|
+
return comment;
|
|
262
|
+
};
|
|
263
|
+
const getEntry = async (entryId) => {
|
|
264
|
+
const key = String(entryId);
|
|
265
|
+
const cached = entryCache.get(key);
|
|
266
|
+
if (cached !== undefined)
|
|
267
|
+
return cached;
|
|
268
|
+
const entry = await ctx.db.get("entries", entryId);
|
|
269
|
+
entryCache.set(key, entry);
|
|
270
|
+
return entry;
|
|
271
|
+
};
|
|
272
|
+
const markRoot = async (comment) => {
|
|
273
|
+
const rootId = comment.deletionRootId ?? comment._id;
|
|
274
|
+
const root = rootId === comment._id ? comment : await ctx.db.get("comments", rootId);
|
|
275
|
+
const deletionRoot = root ?? comment;
|
|
276
|
+
const key = String(deletionRoot._id);
|
|
277
|
+
if (scheduledRoots.has(key))
|
|
278
|
+
return;
|
|
279
|
+
scheduledRoots.add(key);
|
|
280
|
+
await startCommentDeletion(ctx, deletionRoot, deletionRoot.deletedAt ?? deletionRoot.deletingAt ?? Date.now());
|
|
281
|
+
};
|
|
282
|
+
for (const reaction of page) {
|
|
283
|
+
let comment = null;
|
|
284
|
+
let owningEntry = null;
|
|
285
|
+
let removeReaction = false;
|
|
286
|
+
if (reaction.commentId !== undefined) {
|
|
287
|
+
comment = await getComment(reaction.commentId);
|
|
288
|
+
if (comment === null) {
|
|
289
|
+
removeReaction = true;
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
owningEntry = await getEntry(comment.entryId);
|
|
293
|
+
if (owningEntry === null) {
|
|
294
|
+
removeReaction = true;
|
|
295
|
+
await markRoot(comment);
|
|
296
|
+
}
|
|
297
|
+
else if (owningEntry.deletingAt !== undefined) {
|
|
298
|
+
removeReaction = true;
|
|
299
|
+
await scheduleEntryCleanupOnce(ctx, owningEntry._id, scheduledEntries);
|
|
300
|
+
}
|
|
301
|
+
else {
|
|
302
|
+
const inspection = await inspectCommentChain(ctx, comment, commentCache);
|
|
303
|
+
if (inspection.kind === "orphan") {
|
|
304
|
+
removeReaction = true;
|
|
305
|
+
await markRoot(comment);
|
|
306
|
+
}
|
|
307
|
+
else if (inspection.kind === "pending") {
|
|
308
|
+
removeReaction = true;
|
|
309
|
+
await markRoot(inspection.root);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
if (reaction.entryId !== undefined) {
|
|
314
|
+
const reactionEntry = await getEntry(reaction.entryId);
|
|
315
|
+
if (reactionEntry === null ||
|
|
316
|
+
(owningEntry !== null && reactionEntry._id !== owningEntry._id)) {
|
|
317
|
+
removeReaction = true;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
else if (reaction.entryId !== undefined) {
|
|
322
|
+
const entry = await getEntry(reaction.entryId);
|
|
323
|
+
if (entry === null) {
|
|
324
|
+
removeReaction = true;
|
|
325
|
+
}
|
|
326
|
+
else if (entry.deletingAt !== undefined) {
|
|
327
|
+
removeReaction = true;
|
|
328
|
+
await scheduleEntryCleanupOnce(ctx, entry._id, scheduledEntries);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
removeReaction = true;
|
|
333
|
+
}
|
|
334
|
+
if (removeReaction) {
|
|
335
|
+
await deleteLegacyReaction(ctx, reaction, comment, owningEntry);
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
await ctx.db.patch("reactions", reaction._id, {
|
|
339
|
+
legacyCleanupAt: Date.now(),
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
if (page.length > 0) {
|
|
344
|
+
await scheduleLegacyCommentMigration(ctx, "reactions");
|
|
345
|
+
}
|
|
346
|
+
return {
|
|
347
|
+
phase: "reactions",
|
|
348
|
+
processed: page.length,
|
|
349
|
+
hasMore: page.length > 0,
|
|
350
|
+
};
|
|
351
|
+
},
|
|
352
|
+
});
|
|
35
353
|
//# sourceMappingURL=migrations.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/component/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,8BAA8B,GAAG,GAAG,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;IACnD,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;KACrB,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACrB,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,EAAE;aACzB,KAAK,CAAC,SAAS,CAAC;aAChB,SAAS,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;aACrE,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAExC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE;gBACvC,YAAY,EAAE,0BAA0B,CAAC,KAAK,CAAC,MAAM,CAAC;aACvD,CAAC,CAAC;QACL,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,KAAK,8BAA8B,CAAC;QAClE,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,GAAG,CAAC,SAAS,CAAC,QAAQ,CAC1B,CAAC,EACD,QAAQ,CAAC,UAAU,CAAC,oBAAoB,EACxC,EAAE,CACH,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;IAC9C,CAAC;CACF,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/component/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAGxD,MAAM,8BAA8B,GAAG,GAAG,CAAC;AAC3C,MAAM,+BAA+B,GAAG,EAAE,CAAC;AAC3C,MAAM,gCAAgC,GAAG,GAAG,CAAC;AAI7C,KAAK,UAAU,8BAA8B,CAC3C,GAAgB,EAChB,KAAkC;IAElC,MAAM,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,qBAAqB,EAAE;QACzE,KAAK;KACN,CAAC,CAAC;AACL,CAAC;AAOD;;;;;GAKG;AACH,KAAK,UAAU,mBAAmB,CAChC,GAAgB,EAChB,OAAwB,EACxB,KAA0C;IAE1C,IAAI,OAAO,GAAG,OAAO,CAAC;IACtB,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/C,OAAO,SAAS,GAAG,CAAC,EAAE,CAAC;QACrB,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACrC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC5C,CAAC;QACD,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACpC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC5C,CAAC;QACD,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YAC1C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC3B,CAAC;QAED,SAAS,IAAI,CAAC,CAAC;QACf,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC;QACzC,IAAI,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAChD,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC;YAC1D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC5B,CAAC;QACD,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;IAED,yEAAyE;IACzE,gDAAgD;IAChD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC5B,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,GAAgB,EAChB,OAA8B,EAC9B,SAAsB;IAEtB,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5B,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO;IAC/B,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnB,MAAM,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,GAAgB,EAChB,QAA0B,EAC1B,OAA+B,EAC/B,KAA4B;IAE5B,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE/C,0EAA0E;IAC1E,4EAA4E;IAC5E,IACE,OAAO,KAAK,IAAI;QAChB,KAAK,KAAK,IAAI;QACd,OAAO,CAAC,UAAU,KAAK,SAAS;QAChC,OAAO,CAAC,SAAS,KAAK,SAAS,EAC/B,CAAC;QACD,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE;YAC1C,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;SAC9C,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;IACnD,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;KACrB,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACrB,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,EAAE;aACzB,KAAK,CAAC,SAAS,CAAC;aAChB,SAAS,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;aACrE,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAExC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE;gBACvC,YAAY,EAAE,0BAA0B,CAAC,KAAK,CAAC,MAAM,CAAC;aACvD,CAAC,CAAC;QACL,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,KAAK,8BAA8B,CAAC;QAClE,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,GAAG,CAAC,SAAS,CAAC,QAAQ,CAC1B,CAAC,EACD,QAAQ,CAAC,UAAU,CAAC,oBAAoB,EACxC,EAAE,CACH,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;IAC9C,CAAC;CACF,CAAC,CAAC;AAEH;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,gBAAgB,CAAC;IACpD,IAAI,EAAE;QACJ,KAAK,EAAE,CAAC,CAAC,QAAQ,CACf,CAAC,CAAC,KAAK,CACL,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,EACvB,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EACrB,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CACvB,CACF;KACF;IACD,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,KAAK,EAAE,CAAC,CAAC,KAAK,CACZ,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,EACvB,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EACrB,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CACvB;QACD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;QACrB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;KACrB,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,YAAY,CAAC;QAEzC,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;YAC3B,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,EAAE;iBAC5B,KAAK,CAAC,UAAU,CAAC;iBACjB,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;iBACxD,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAEzC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;YACzC,KAAK,MAAM,OAAO,IAAI,UAAU,EAAE,CAAC;gBACjC,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC;gBACrD,MAAM,IAAI,GACR,MAAM,KAAK,OAAO,CAAC,GAAG;oBACpB,CAAC,CAAC,OAAO;oBACT,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBAC3C,MAAM,YAAY,GAAG,IAAI,IAAI,OAAO,CAAC;gBACrC,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;gBACrC,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,SAAS;gBACtC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACxB,MAAM,oBAAoB,CACxB,GAAG,EACH,YAAY,EACZ,YAAY,CAAC,SAAS,IAAI,YAAY,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,CAChE,CAAC;YACJ,CAAC;YAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,mEAAmE;gBACnE,sEAAsE;gBACtE,8DAA8D;gBAC9D,MAAM,8BAA8B,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;gBACxD,OAAO;oBACL,KAAK,EAAE,YAAqB;oBAC5B,SAAS,EAAE,UAAU,CAAC,MAAM;oBAC5B,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,MAAM,eAAe,GAAG,MAAM,GAAG,CAAC,EAAE;iBACjC,KAAK,CAAC,UAAU,CAAC;iBACjB,SAAS,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CACpC,CAAC,CAAC,EAAE,CAAC,iBAAiB,EAAE,SAAS,CAAC,CACnC;iBACA,IAAI,CAAC,CAAC,CAAC,CAAC;YACX,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,MAAM,8BAA8B,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;gBACtD,OAAO,EAAE,KAAK,EAAE,UAAmB,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACrE,CAAC;YAED,MAAM,gBAAgB,GAAG,MAAM,GAAG,CAAC,EAAE;iBAClC,KAAK,CAAC,WAAW,CAAC;iBAClB,SAAS,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CACpC,CAAC,CAAC,EAAE,CAAC,iBAAiB,EAAE,SAAS,CAAC,CACnC;iBACA,IAAI,CAAC,CAAC,CAAC,CAAC;YACX,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,MAAM,8BAA8B,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;gBACvD,OAAO,EAAE,KAAK,EAAE,WAAoB,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACtE,CAAC;YAED,OAAO,EAAE,KAAK,EAAE,WAAoB,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACvE,CAAC;QAED,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,EAAE;iBACtB,KAAK,CAAC,UAAU,CAAC;iBACjB,SAAS,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CACpC,CAAC,CAAC,EAAE,CAAC,iBAAiB,EAAE,SAAS,CAAC,CACnC;iBACA,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAEzC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkC,CAAC;YAC/D,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE,CAAC;gBAC3B,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;YACjD,CAAC;YACD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAiC,CAAC;YAC5D,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;YACzC,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;YAE3C,MAAM,QAAQ,GAAG,KAAK,EACpB,OAAwB,EACxB,aAAsB,EACP,EAAE;gBACjB,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC;gBACrD,MAAM,IAAI,GACR,MAAM,KAAK,OAAO,CAAC,GAAG;oBACpB,CAAC,CAAC,OAAO;oBACT,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBAC3C,MAAM,YAAY,GAAG,IAAI,IAAI,OAAO,CAAC;gBACrC,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;gBACrC,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,OAAO;gBACpC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACxB,MAAM,oBAAoB,CACxB,GAAG,EACH,YAAY,EACZ,aAAa;oBACX,YAAY,CAAC,SAAS;oBACtB,YAAY,CAAC,UAAU;oBACvB,IAAI,CAAC,GAAG,EAAE,CACb,CAAC;YACJ,CAAC,CAAC;YAEF,MAAM,QAAQ,GAAG,KAAK,EACpB,OAA8B,EACE,EAAE;gBAClC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC5B,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACnC,IAAI,MAAM,KAAK,SAAS;oBAAE,OAAO,MAAM,CAAC;gBACxC,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBACnD,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC3B,OAAO,KAAK,CAAC;YACf,CAAC,CAAC;YAEF,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE,CAAC;gBAC3B,IACE,OAAO,CAAC,SAAS,KAAK,SAAS;oBAC/B,OAAO,CAAC,UAAU,KAAK,SAAS,EAChC,CAAC;oBACD,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;oBACjE,SAAS;gBACX,CAAC;gBAED,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC9C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBACnB,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;oBACxB,SAAS;gBACX,CAAC;gBACD,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;oBACnC,MAAM,wBAAwB,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;oBACjE,SAAS;gBACX,CAAC;gBAED,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAC1C,GAAG,EACH,OAAO,EACP,YAAY,CACb,CAAC;gBACF,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACjC,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAC1B,CAAC;qBAAM,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBACzC,MAAM,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAClC,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE;wBAC1C,eAAe,EAAE,IAAI,CAAC,GAAG,EAAE;qBAC5B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,MAAM,8BAA8B,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,MAAM,8BAA8B,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YACxD,CAAC;YAED,MAAM,SAAS,GACb,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;YAC/C,OAAO;gBACL,KAAK,EAAE,SAAS;gBAChB,SAAS,EAAE,IAAI,CAAC,MAAM;gBACtB,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,EAAE;aACtB,KAAK,CAAC,WAAW,CAAC;aAClB,SAAS,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;aACzE,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC1C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkC,CAAC;QAC/D,MAAM,UAAU,GAAG,IAAI,GAAG,EAAiC,CAAC;QAC5D,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;QACzC,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;QAE3C,MAAM,UAAU,GAAG,KAAK,EACtB,SAAiC,EACA,EAAE;YACnC,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;YAC9B,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,MAAM,KAAK,SAAS;gBAAE,OAAO,MAAM,CAAC;YACxC,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YACxD,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC/B,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC;QACF,MAAM,QAAQ,GAAG,KAAK,EACpB,OAA8B,EACE,EAAE;YAClC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YAC5B,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,MAAM,KAAK,SAAS;gBAAE,OAAO,MAAM,CAAC;YACxC,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACnD,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC3B,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QACF,MAAM,QAAQ,GAAG,KAAK,EAAE,OAAwB,EAAiB,EAAE;YACjE,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC;YACrD,MAAM,IAAI,GACR,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAC1E,MAAM,YAAY,GAAG,IAAI,IAAI,OAAO,CAAC;YACrC,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO;YACpC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACxB,MAAM,oBAAoB,CACxB,GAAG,EACH,YAAY,EACZ,YAAY,CAAC,SAAS,IAAI,YAAY,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,CAChE,CAAC;QACJ,CAAC,CAAC;QAEF,KAAK,MAAM,QAAQ,IAAI,IAAI,EAAE,CAAC;YAC5B,IAAI,OAAO,GAA2B,IAAI,CAAC;YAC3C,IAAI,WAAW,GAA0B,IAAI,CAAC;YAC9C,IAAI,cAAc,GAAG,KAAK,CAAC;YAE3B,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBACrC,OAAO,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAC/C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;oBACrB,cAAc,GAAG,IAAI,CAAC;gBACxB,CAAC;qBAAM,CAAC;oBACN,WAAW,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBAC9C,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;wBACzB,cAAc,GAAG,IAAI,CAAC;wBACtB,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;oBAC1B,CAAC;yBAAM,IAAI,WAAW,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;wBAChD,cAAc,GAAG,IAAI,CAAC;wBACtB,MAAM,wBAAwB,CAC5B,GAAG,EACH,WAAW,CAAC,GAAG,EACf,gBAAgB,CACjB,CAAC;oBACJ,CAAC;yBAAM,CAAC;wBACN,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAC1C,GAAG,EACH,OAAO,EACP,YAAY,CACb,CAAC;wBACF,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;4BACjC,cAAc,GAAG,IAAI,CAAC;4BACtB,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;wBAC1B,CAAC;6BAAM,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;4BACzC,cAAc,GAAG,IAAI,CAAC;4BACtB,MAAM,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;wBAClC,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;oBACnC,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;oBACvD,IACE,aAAa,KAAK,IAAI;wBACtB,CAAC,WAAW,KAAK,IAAI,IAAI,aAAa,CAAC,GAAG,KAAK,WAAW,CAAC,GAAG,CAAC,EAC/D,CAAC;wBACD,cAAc,GAAG,IAAI,CAAC;oBACxB,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1C,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAC/C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBACnB,cAAc,GAAG,IAAI,CAAC;gBACxB,CAAC;qBAAM,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;oBAC1C,cAAc,GAAG,IAAI,CAAC;oBACtB,MAAM,wBAAwB,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;gBACnE,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,cAAc,GAAG,IAAI,CAAC;YACxB,CAAC;YAED,IAAI,cAAc,EAAE,CAAC;gBACnB,MAAM,oBAAoB,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;YAClE,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG,EAAE;oBAC5C,eAAe,EAAE,IAAI,CAAC,GAAG,EAAE;iBAC5B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,8BAA8B,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACzD,CAAC;QAED,OAAO;YACL,KAAK,EAAE,WAAoB;YAC3B,SAAS,EAAE,IAAI,CAAC,MAAM;YACtB,OAAO,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC;SACzB,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|