@empline/preflight 1.1.57 → 1.1.59

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 (48) hide show
  1. package/dist/checks/accessibility/accessibility-validation.d.ts.map +1 -1
  2. package/dist/checks/accessibility/accessibility-validation.js +217 -34
  3. package/dist/checks/accessibility/accessibility-validation.js.map +1 -1
  4. package/dist/checks/accessibility/wcag-advanced-validation.d.ts +10 -0
  5. package/dist/checks/accessibility/wcag-advanced-validation.d.ts.map +1 -0
  6. package/dist/checks/accessibility/wcag-advanced-validation.js +622 -0
  7. package/dist/checks/accessibility/wcag-advanced-validation.js.map +1 -0
  8. package/dist/checks/checkout/checkout-flow-validation.d.ts +10 -0
  9. package/dist/checks/checkout/checkout-flow-validation.d.ts.map +1 -0
  10. package/dist/checks/checkout/checkout-flow-validation.js +473 -0
  11. package/dist/checks/checkout/checkout-flow-validation.js.map +1 -0
  12. package/dist/checks/database/enum-sync-validation.d.ts +10 -0
  13. package/dist/checks/database/enum-sync-validation.d.ts.map +1 -0
  14. package/dist/checks/database/enum-sync-validation.js +409 -0
  15. package/dist/checks/database/enum-sync-validation.js.map +1 -0
  16. package/dist/checks/database/query-performance-validation.d.ts +10 -0
  17. package/dist/checks/database/query-performance-validation.d.ts.map +1 -0
  18. package/dist/checks/database/query-performance-validation.js +544 -0
  19. package/dist/checks/database/query-performance-validation.js.map +1 -0
  20. package/dist/checks/email/email-validation.d.ts +10 -0
  21. package/dist/checks/email/email-validation.d.ts.map +1 -0
  22. package/dist/checks/email/email-validation.js +456 -0
  23. package/dist/checks/email/email-validation.js.map +1 -0
  24. package/dist/checks/observability/observability-validation.d.ts +10 -0
  25. package/dist/checks/observability/observability-validation.d.ts.map +1 -0
  26. package/dist/checks/observability/observability-validation.js +448 -0
  27. package/dist/checks/observability/observability-validation.js.map +1 -0
  28. package/dist/checks/react/react-patterns-validation.d.ts +10 -0
  29. package/dist/checks/react/react-patterns-validation.d.ts.map +1 -0
  30. package/dist/checks/react/react-patterns-validation.js +559 -0
  31. package/dist/checks/react/react-patterns-validation.js.map +1 -0
  32. package/dist/checks/security/security-headers-validation.d.ts +10 -0
  33. package/dist/checks/security/security-headers-validation.d.ts.map +1 -0
  34. package/dist/checks/security/security-headers-validation.js +594 -0
  35. package/dist/checks/security/security-headers-validation.js.map +1 -0
  36. package/dist/reporters/github-reporter.d.ts +35 -0
  37. package/dist/reporters/github-reporter.d.ts.map +1 -0
  38. package/dist/reporters/github-reporter.js +397 -0
  39. package/dist/reporters/github-reporter.js.map +1 -0
  40. package/dist/reporters/html-report.d.ts +12 -0
  41. package/dist/reporters/html-report.d.ts.map +1 -0
  42. package/dist/reporters/html-report.js +469 -0
  43. package/dist/reporters/html-report.js.map +1 -0
  44. package/dist/reporters/index.d.ts +8 -0
  45. package/dist/reporters/index.d.ts.map +1 -0
  46. package/dist/reporters/index.js +18 -0
  47. package/dist/reporters/index.js.map +1 -0
  48. package/package.json +1 -1
@@ -0,0 +1,473 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.tags = exports.blocking = exports.category = exports.description = exports.name = exports.id = void 0;
38
+ exports.run = run;
39
+ /**
40
+ * Checkout Flow Validation Preflight (BLOCKING)
41
+ *
42
+ * Validates checkout flow best practices for e-commerce applications:
43
+ *
44
+ * 1. Cart Operations:
45
+ * - Add to cart validates stock availability
46
+ * - Cart updates handle concurrent modifications
47
+ * - Cart expiration/cleanup handling
48
+ *
49
+ * 2. Checkout Security:
50
+ * - Price validation on server (no client-side pricing)
51
+ * - Stock re-validation before payment
52
+ * - CSRF protection on checkout endpoints
53
+ *
54
+ * 3. Payment Integration:
55
+ * - Payment intent creation validates cart state
56
+ * - Webhook handlers for payment events
57
+ * - Idempotency for payment operations
58
+ *
59
+ * 4. Order Creation:
60
+ * - Transaction-safe order creation
61
+ * - Inventory decrement on order confirmation
62
+ * - Order confirmation emails triggered
63
+ *
64
+ * 5. Error Handling:
65
+ * - Payment failure handling
66
+ * - Stock unavailable handling
67
+ * - Network error recovery
68
+ */
69
+ const fs = __importStar(require("node:fs"));
70
+ const path = __importStar(require("node:path"));
71
+ const glob_1 = require("glob");
72
+ const console_chars_1 = require("../../utils/console-chars");
73
+ exports.id = "checkout/checkout-flow-validation";
74
+ exports.name = "Checkout Flow Validation";
75
+ exports.description = "Validates checkout flow security and best practices";
76
+ exports.category = "checkout";
77
+ exports.blocking = true;
78
+ exports.tags = ["checkout", "cart", "payment", "order", "e-commerce"];
79
+ function getLineNumber(content, index) {
80
+ return content.substring(0, index).split("\n").length;
81
+ }
82
+ async function checkCartOperations() {
83
+ const issues = [];
84
+ // Find cart-related API routes
85
+ const cartFiles = await (0, glob_1.glob)([
86
+ "app/api/cart/**/*.ts",
87
+ "app/api/*/cart/**/*.ts",
88
+ "lib/**/cart*.ts",
89
+ ], {
90
+ cwd: process.cwd(),
91
+ absolute: true,
92
+ });
93
+ if (cartFiles.length === 0) {
94
+ // No cart functionality - skip
95
+ return issues;
96
+ }
97
+ for (const file of cartFiles) {
98
+ if (!fs.existsSync(file))
99
+ continue;
100
+ const content = fs.readFileSync(file, "utf-8");
101
+ const relativePath = path.relative(process.cwd(), file);
102
+ // Check for stock validation on add to cart
103
+ if (relativePath.includes("add") || content.includes("addToCart") || content.includes("add-item")) {
104
+ const hasStockCheck = /stock|inventory|quantity|available/i.test(content);
105
+ if (!hasStockCheck) {
106
+ issues.push({
107
+ rule: "cart-stock-validation",
108
+ message: "Cart add operation may not validate stock availability",
109
+ file: relativePath,
110
+ severity: "warning",
111
+ suggestion: "Validate stock/inventory before adding items to cart",
112
+ });
113
+ }
114
+ }
115
+ // Check for optimistic update patterns without server validation
116
+ if (content.includes("optimistic") && !content.includes("revalidate")) {
117
+ issues.push({
118
+ rule: "cart-optimistic-sync",
119
+ message: "Optimistic cart updates should sync with server",
120
+ file: relativePath,
121
+ severity: "warning",
122
+ suggestion: "Ensure optimistic updates are reconciled with server state",
123
+ });
124
+ }
125
+ }
126
+ return issues;
127
+ }
128
+ async function checkCheckoutSecurity() {
129
+ const issues = [];
130
+ // Find checkout-related API routes
131
+ const checkoutFiles = await (0, glob_1.glob)([
132
+ "app/api/checkout/**/*.ts",
133
+ "app/api/*/checkout/**/*.ts",
134
+ "app/api/order/**/*.ts",
135
+ "app/api/*/order/**/*.ts",
136
+ "lib/**/checkout*.ts",
137
+ ], {
138
+ cwd: process.cwd(),
139
+ absolute: true,
140
+ });
141
+ for (const file of checkoutFiles) {
142
+ if (!fs.existsSync(file))
143
+ continue;
144
+ const content = fs.readFileSync(file, "utf-8");
145
+ const relativePath = path.relative(process.cwd(), file);
146
+ // Check for server-side price calculation
147
+ const hasClientPrice = /body\.price|body\.total|req\.body\.amount/i.test(content);
148
+ if (hasClientPrice) {
149
+ issues.push({
150
+ rule: "checkout-server-pricing",
151
+ message: "Checkout may be using client-provided prices",
152
+ file: relativePath,
153
+ severity: "error",
154
+ suggestion: "Always calculate prices on the server, never trust client-provided prices",
155
+ });
156
+ }
157
+ // Check for stock re-validation before order
158
+ if (content.includes("order") || content.includes("createOrder") || content.includes("placeOrder")) {
159
+ const hasStockRecheck = /stock|inventory|checkAvailability|validateStock/i.test(content);
160
+ if (!hasStockRecheck) {
161
+ issues.push({
162
+ rule: "checkout-stock-revalidation",
163
+ message: "Order creation may not re-validate stock availability",
164
+ file: relativePath,
165
+ severity: "warning",
166
+ suggestion: "Re-validate stock availability at order creation time",
167
+ });
168
+ }
169
+ }
170
+ // Check for transaction usage in order creation
171
+ if (content.includes("createOrder") || content.includes("placeOrder")) {
172
+ const hasTransaction = /\$transaction|transaction\(|BEGIN|COMMIT/i.test(content);
173
+ if (!hasTransaction) {
174
+ issues.push({
175
+ rule: "checkout-transaction",
176
+ message: "Order creation may not use database transactions",
177
+ file: relativePath,
178
+ severity: "warning",
179
+ suggestion: "Use database transactions for order creation to ensure data consistency",
180
+ });
181
+ }
182
+ }
183
+ }
184
+ return issues;
185
+ }
186
+ async function checkPaymentIntegration() {
187
+ const issues = [];
188
+ // Find payment-related files
189
+ const paymentFiles = await (0, glob_1.glob)([
190
+ "app/api/payment/**/*.ts",
191
+ "app/api/*/payment/**/*.ts",
192
+ "app/api/stripe/**/*.ts",
193
+ "app/api/paypal/**/*.ts",
194
+ "app/api/webhooks/**/*.ts",
195
+ "lib/**/payment*.ts",
196
+ "lib/**/stripe*.ts",
197
+ ], {
198
+ cwd: process.cwd(),
199
+ absolute: true,
200
+ });
201
+ if (paymentFiles.length === 0) {
202
+ // Check if there's any payment integration
203
+ const allFiles = await (0, glob_1.glob)("**/*.ts", { cwd: process.cwd(), ignore: ["**/node_modules/**"] });
204
+ let hasPaymentMention = false;
205
+ for (const f of allFiles.slice(0, 100)) {
206
+ const content = fs.readFileSync(path.join(process.cwd(), f), "utf-8");
207
+ if (/stripe|paypal|payment|checkout/i.test(content)) {
208
+ hasPaymentMention = true;
209
+ break;
210
+ }
211
+ }
212
+ if (!hasPaymentMention) {
213
+ // No payment functionality
214
+ return issues;
215
+ }
216
+ }
217
+ let hasWebhookHandler = false;
218
+ let hasIdempotency = false;
219
+ for (const file of paymentFiles) {
220
+ if (!fs.existsSync(file))
221
+ continue;
222
+ const content = fs.readFileSync(file, "utf-8");
223
+ const relativePath = path.relative(process.cwd(), file);
224
+ // Check for webhook handlers
225
+ if (relativePath.includes("webhook") || content.includes("constructEvent") || content.includes("verifyWebhook")) {
226
+ hasWebhookHandler = true;
227
+ // Check webhook signature verification
228
+ const hasSignatureVerification = /constructEvent|verifySignature|stripe\.webhooks|rawBody/i.test(content);
229
+ if (!hasSignatureVerification) {
230
+ issues.push({
231
+ rule: "payment-webhook-verification",
232
+ message: "Payment webhook may not verify signatures",
233
+ file: relativePath,
234
+ severity: "error",
235
+ suggestion: "Always verify webhook signatures to prevent forgery",
236
+ });
237
+ }
238
+ }
239
+ // Check for idempotency
240
+ if (content.includes("idempotency") || content.includes("Idempotency-Key") || content.includes("idempotentKey")) {
241
+ hasIdempotency = true;
242
+ }
243
+ // Check for payment intent validation
244
+ if (content.includes("paymentIntent") || content.includes("createPayment")) {
245
+ const validatesCart = /cart|order|items|validateCart/i.test(content);
246
+ if (!validatesCart) {
247
+ issues.push({
248
+ rule: "payment-cart-validation",
249
+ message: "Payment creation may not validate cart state",
250
+ file: relativePath,
251
+ severity: "warning",
252
+ suggestion: "Validate cart contents before creating payment intent",
253
+ });
254
+ }
255
+ }
256
+ }
257
+ // Check for webhook handler existence
258
+ if (!hasWebhookHandler && paymentFiles.length > 0) {
259
+ issues.push({
260
+ rule: "payment-webhook-handler",
261
+ message: "No payment webhook handler found",
262
+ file: "app/api/webhooks/",
263
+ severity: "warning",
264
+ suggestion: "Implement webhook handlers for payment events (success, failure, refund)",
265
+ });
266
+ }
267
+ // Check for idempotency
268
+ if (!hasIdempotency && paymentFiles.length > 0) {
269
+ issues.push({
270
+ rule: "payment-idempotency",
271
+ message: "Payment operations may not use idempotency keys",
272
+ file: "lib/payment",
273
+ severity: "info",
274
+ suggestion: "Use idempotency keys to prevent duplicate charges",
275
+ });
276
+ }
277
+ return issues;
278
+ }
279
+ async function checkOrderCreation() {
280
+ const issues = [];
281
+ const orderFiles = await (0, glob_1.glob)([
282
+ "app/api/order/**/*.ts",
283
+ "app/api/*/order/**/*.ts",
284
+ "lib/**/order*.ts",
285
+ ], {
286
+ cwd: process.cwd(),
287
+ absolute: true,
288
+ });
289
+ for (const file of orderFiles) {
290
+ if (!fs.existsSync(file))
291
+ continue;
292
+ const content = fs.readFileSync(file, "utf-8");
293
+ const relativePath = path.relative(process.cwd(), file);
294
+ // Check for inventory update on order
295
+ if (content.includes("create") && relativePath.includes("order")) {
296
+ const updatesInventory = /inventory|stock|decrement|quantity/i.test(content);
297
+ if (!updatesInventory) {
298
+ issues.push({
299
+ rule: "order-inventory-update",
300
+ message: "Order creation may not update inventory",
301
+ file: relativePath,
302
+ severity: "warning",
303
+ suggestion: "Decrement inventory when order is confirmed",
304
+ });
305
+ }
306
+ }
307
+ // Check for confirmation email
308
+ if (content.includes("createOrder") || content.includes("confirmOrder")) {
309
+ const sendsEmail = /email|sendEmail|mail|notification|notify/i.test(content);
310
+ if (!sendsEmail) {
311
+ issues.push({
312
+ rule: "order-confirmation-email",
313
+ message: "Order creation may not trigger confirmation email",
314
+ file: relativePath,
315
+ severity: "info",
316
+ suggestion: "Send order confirmation email to customer",
317
+ });
318
+ }
319
+ }
320
+ }
321
+ return issues;
322
+ }
323
+ async function checkErrorRecovery() {
324
+ const issues = [];
325
+ // Find checkout-related frontend components
326
+ const checkoutComponents = await (0, glob_1.glob)([
327
+ "app/**/checkout/**/*.tsx",
328
+ "components/**/checkout/**/*.tsx",
329
+ "components/**/cart/**/*.tsx",
330
+ ], {
331
+ cwd: process.cwd(),
332
+ absolute: true,
333
+ });
334
+ for (const file of checkoutComponents) {
335
+ if (!fs.existsSync(file))
336
+ continue;
337
+ const content = fs.readFileSync(file, "utf-8");
338
+ const relativePath = path.relative(process.cwd(), file);
339
+ // Check for error state handling
340
+ const hasErrorHandling = /error|Error|catch|onError|isError/i.test(content);
341
+ const hasErrorDisplay = /error\s*&&|error\s*\?|{error}|showError|errorMessage/i.test(content);
342
+ if (hasErrorHandling && !hasErrorDisplay) {
343
+ issues.push({
344
+ rule: "checkout-error-display",
345
+ message: "Checkout component handles errors but may not display them",
346
+ file: relativePath,
347
+ severity: "warning",
348
+ suggestion: "Display user-friendly error messages for checkout failures",
349
+ });
350
+ }
351
+ // Check for loading states
352
+ const hasLoadingState = /loading|isLoading|pending|submitting/i.test(content);
353
+ if (!hasLoadingState) {
354
+ issues.push({
355
+ rule: "checkout-loading-state",
356
+ message: "Checkout component may not show loading state",
357
+ file: relativePath,
358
+ severity: "info",
359
+ suggestion: "Show loading indicator during checkout submission",
360
+ });
361
+ }
362
+ // Check for retry capability
363
+ if (content.includes("payment") || content.includes("submit")) {
364
+ const hasRetry = /retry|try again|resubmit/i.test(content);
365
+ if (!hasRetry) {
366
+ issues.push({
367
+ rule: "checkout-retry-capability",
368
+ message: "Checkout may not allow retry on failure",
369
+ file: relativePath,
370
+ severity: "info",
371
+ suggestion: "Allow users to retry failed checkout attempts",
372
+ });
373
+ }
374
+ }
375
+ }
376
+ return issues;
377
+ }
378
+ async function run() {
379
+ const startTime = Date.now();
380
+ const allIssues = [];
381
+ // Run all checks
382
+ allIssues.push(...await checkCartOperations());
383
+ allIssues.push(...await checkCheckoutSecurity());
384
+ allIssues.push(...await checkPaymentIntegration());
385
+ allIssues.push(...await checkOrderCreation());
386
+ allIssues.push(...await checkErrorRecovery());
387
+ // Convert to findings
388
+ const findings = allIssues.map(issue => ({
389
+ level: issue.severity,
390
+ message: issue.message,
391
+ file: issue.file,
392
+ startLine: issue.line,
393
+ ruleId: issue.rule,
394
+ suggestion: issue.suggestion,
395
+ }));
396
+ const errors = findings.filter(f => f.level === "error");
397
+ const warnings = findings.filter(f => f.level === "warning");
398
+ const infos = findings.filter(f => f.level === "info");
399
+ return {
400
+ passed: errors.length === 0,
401
+ findings,
402
+ duration: Date.now() - startTime,
403
+ metadata: {
404
+ errors: errors.length,
405
+ warnings: warnings.length,
406
+ infos: infos.length,
407
+ },
408
+ };
409
+ }
410
+ async function main() {
411
+ console.log(`\n${console_chars_1.emoji.store} CHECKOUT FLOW VALIDATION`);
412
+ console.log((0, console_chars_1.createDivider)(65, "heavy"));
413
+ const result = await run();
414
+ const { errors, warnings, infos } = result.metadata || {};
415
+ console.log(`\n${console_chars_1.emoji.search} Checking checkout flow...`);
416
+ console.log(`\n${console_chars_1.emoji.chart} Summary:`);
417
+ console.log(` Errors: ${errors}`);
418
+ console.log(` Warnings: ${warnings}`);
419
+ console.log(` Info: ${infos}`);
420
+ if (result.findings.length === 0) {
421
+ console.log(`\n${console_chars_1.emoji.info} No checkout-related code found to validate`);
422
+ process.exit(0);
423
+ }
424
+ if (result.passed && warnings === 0) {
425
+ console.log(`\n${console_chars_1.emoji.success} CHECKOUT FLOW VALIDATION PASSED`);
426
+ console.log(`\nAll checkout best practices are followed.`);
427
+ process.exit(0);
428
+ }
429
+ // Print errors
430
+ const errorFindings = result.findings.filter(f => f.level === "error");
431
+ if (errorFindings.length > 0) {
432
+ console.log(`\n${console_chars_1.emoji.error} Errors (blocking):`);
433
+ for (const finding of errorFindings) {
434
+ console.log(`\n ${finding.file}`);
435
+ console.log(` ${finding.message}`);
436
+ if (finding.suggestion) {
437
+ console.log(` ${console_chars_1.emoji.hint} ${finding.suggestion}`);
438
+ }
439
+ }
440
+ }
441
+ // Print warnings
442
+ const warningFindings = result.findings.filter(f => f.level === "warning");
443
+ if (warningFindings.length > 0) {
444
+ console.log(`\n${console_chars_1.emoji.warning} Warnings:`);
445
+ for (const finding of warningFindings.slice(0, 10)) {
446
+ console.log(`\n ${finding.file}`);
447
+ console.log(` ${finding.message}`);
448
+ }
449
+ if (warningFindings.length > 10) {
450
+ console.log(`\n ... and ${warningFindings.length - 10} more warnings`);
451
+ }
452
+ }
453
+ console.log(`\n${console_chars_1.emoji.info} Checkout Security Best Practices:`);
454
+ console.log(` - Validate stock before adding to cart`);
455
+ console.log(` - Calculate prices on server, never trust client`);
456
+ console.log(` - Re-validate stock at order creation`);
457
+ console.log(` - Use database transactions for orders`);
458
+ console.log(` - Verify webhook signatures`);
459
+ console.log(` - Handle payment failures gracefully`);
460
+ if (!result.passed) {
461
+ console.log(`\n${console_chars_1.emoji.error} CHECKOUT FLOW VALIDATION FAILED`);
462
+ process.exit(1);
463
+ }
464
+ console.log(`\n${console_chars_1.emoji.success} CHECKOUT FLOW VALIDATION PASSED`);
465
+ process.exit(0);
466
+ }
467
+ if (require.main === module) {
468
+ main().catch((err) => {
469
+ console.error(`${console_chars_1.emoji.error} Preflight failed:`, err);
470
+ process.exit(1);
471
+ });
472
+ }
473
+ //# sourceMappingURL=checkout-flow-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkout-flow-validation.js","sourceRoot":"","sources":["../../../src/checks/checkout/checkout-flow-validation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqYA,kBAmCC;AAvaD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,4CAA8B;AAC9B,gDAAkC;AAClC,+BAA4B;AAE5B,6DAAiE;AAEpD,QAAA,EAAE,GAAG,mCAAmC,CAAC;AACzC,QAAA,IAAI,GAAG,0BAA0B,CAAC;AAClC,QAAA,WAAW,GAAG,qDAAqD,CAAC;AACpE,QAAA,QAAQ,GAAG,UAAU,CAAC;AACtB,QAAA,QAAQ,GAAG,IAAI,CAAC;AAChB,QAAA,IAAI,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;AAW3E,SAAS,aAAa,CAAC,OAAe,EAAE,KAAa;IACnD,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;AACxD,CAAC;AAED,KAAK,UAAU,mBAAmB;IAChC,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,+BAA+B;IAC/B,MAAM,SAAS,GAAG,MAAM,IAAA,WAAI,EAAC;QAC3B,sBAAsB;QACtB,wBAAwB;QACxB,iBAAiB;KAClB,EAAE;QACD,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IAEH,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,+BAA+B;QAC/B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QACnC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;QAExD,4CAA4C;QAC5C,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAClG,MAAM,aAAa,GAAG,qCAAqC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1E,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,uBAAuB;oBAC7B,OAAO,EAAE,wDAAwD;oBACjE,IAAI,EAAE,YAAY;oBAClB,QAAQ,EAAE,SAAS;oBACnB,UAAU,EAAE,sDAAsD;iBACnE,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,iEAAiE;QACjE,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACtE,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,sBAAsB;gBAC5B,OAAO,EAAE,iDAAiD;gBAC1D,IAAI,EAAE,YAAY;gBAClB,QAAQ,EAAE,SAAS;gBACnB,UAAU,EAAE,4DAA4D;aACzE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,qBAAqB;IAClC,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,mCAAmC;IACnC,MAAM,aAAa,GAAG,MAAM,IAAA,WAAI,EAAC;QAC/B,0BAA0B;QAC1B,4BAA4B;QAC5B,uBAAuB;QACvB,yBAAyB;QACzB,qBAAqB;KACtB,EAAE;QACD,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IAEH,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QACnC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;QAExD,0CAA0C;QAC1C,MAAM,cAAc,GAAG,4CAA4C,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClF,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,yBAAyB;gBAC/B,OAAO,EAAE,8CAA8C;gBACvD,IAAI,EAAE,YAAY;gBAClB,QAAQ,EAAE,OAAO;gBACjB,UAAU,EAAE,2EAA2E;aACxF,CAAC,CAAC;QACL,CAAC;QAED,6CAA6C;QAC7C,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACnG,MAAM,eAAe,GAAG,kDAAkD,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzF,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,6BAA6B;oBACnC,OAAO,EAAE,uDAAuD;oBAChE,IAAI,EAAE,YAAY;oBAClB,QAAQ,EAAE,SAAS;oBACnB,UAAU,EAAE,uDAAuD;iBACpE,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,gDAAgD;QAChD,IAAI,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACtE,MAAM,cAAc,GAAG,2CAA2C,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACjF,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,sBAAsB;oBAC5B,OAAO,EAAE,kDAAkD;oBAC3D,IAAI,EAAE,YAAY;oBAClB,QAAQ,EAAE,SAAS;oBACnB,UAAU,EAAE,yEAAyE;iBACtF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,uBAAuB;IACpC,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,6BAA6B;IAC7B,MAAM,YAAY,GAAG,MAAM,IAAA,WAAI,EAAC;QAC9B,yBAAyB;QACzB,2BAA2B;QAC3B,wBAAwB;QACxB,wBAAwB;QACxB,0BAA0B;QAC1B,oBAAoB;QACpB,mBAAmB;KACpB,EAAE;QACD,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IAEH,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,2CAA2C;QAC3C,MAAM,QAAQ,GAAG,MAAM,IAAA,WAAI,EAAC,SAAS,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;QAC/F,IAAI,iBAAiB,GAAG,KAAK,CAAC;QAC9B,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACtE,IAAI,iCAAiC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpD,iBAAiB,GAAG,IAAI,CAAC;gBACzB,MAAM;YACR,CAAC;QACH,CAAC;QAED,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,2BAA2B;YAC3B,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAC9B,IAAI,cAAc,GAAG,KAAK,CAAC;IAE3B,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QACnC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;QAExD,6BAA6B;QAC7B,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YAChH,iBAAiB,GAAG,IAAI,CAAC;YAEzB,uCAAuC;YACvC,MAAM,wBAAwB,GAAG,0DAA0D,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1G,IAAI,CAAC,wBAAwB,EAAE,CAAC;gBAC9B,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,8BAA8B;oBACpC,OAAO,EAAE,2CAA2C;oBACpD,IAAI,EAAE,YAAY;oBAClB,QAAQ,EAAE,OAAO;oBACjB,UAAU,EAAE,qDAAqD;iBAClE,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,IAAI,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YAChH,cAAc,GAAG,IAAI,CAAC;QACxB,CAAC;QAED,sCAAsC;QACtC,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YAC3E,MAAM,aAAa,GAAG,gCAAgC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrE,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,yBAAyB;oBAC/B,OAAO,EAAE,8CAA8C;oBACvD,IAAI,EAAE,YAAY;oBAClB,QAAQ,EAAE,SAAS;oBACnB,UAAU,EAAE,uDAAuD;iBACpE,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,IAAI,CAAC,iBAAiB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,yBAAyB;YAC/B,OAAO,EAAE,kCAAkC;YAC3C,IAAI,EAAE,mBAAmB;YACzB,QAAQ,EAAE,SAAS;YACnB,UAAU,EAAE,0EAA0E;SACvF,CAAC,CAAC;IACL,CAAC;IAED,wBAAwB;IACxB,IAAI,CAAC,cAAc,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,iDAAiD;YAC1D,IAAI,EAAE,aAAa;YACnB,QAAQ,EAAE,MAAM;YAChB,UAAU,EAAE,mDAAmD;SAChE,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,kBAAkB;IAC/B,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,MAAM,UAAU,GAAG,MAAM,IAAA,WAAI,EAAC;QAC5B,uBAAuB;QACvB,yBAAyB;QACzB,kBAAkB;KACnB,EAAE;QACD,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IAEH,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QACnC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;QAExD,sCAAsC;QACtC,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACjE,MAAM,gBAAgB,GAAG,qCAAqC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7E,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,wBAAwB;oBAC9B,OAAO,EAAE,yCAAyC;oBAClD,IAAI,EAAE,YAAY;oBAClB,QAAQ,EAAE,SAAS;oBACnB,UAAU,EAAE,6CAA6C;iBAC1D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,+BAA+B;QAC/B,IAAI,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACxE,MAAM,UAAU,GAAG,2CAA2C,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7E,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,0BAA0B;oBAChC,OAAO,EAAE,mDAAmD;oBAC5D,IAAI,EAAE,YAAY;oBAClB,QAAQ,EAAE,MAAM;oBAChB,UAAU,EAAE,2CAA2C;iBACxD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,kBAAkB;IAC/B,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,4CAA4C;IAC5C,MAAM,kBAAkB,GAAG,MAAM,IAAA,WAAI,EAAC;QACpC,0BAA0B;QAC1B,iCAAiC;QACjC,6BAA6B;KAC9B,EAAE;QACD,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IAEH,KAAK,MAAM,IAAI,IAAI,kBAAkB,EAAE,CAAC;QACtC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QACnC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;QAExD,iCAAiC;QACjC,MAAM,gBAAgB,GAAG,oCAAoC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5E,MAAM,eAAe,GAAG,uDAAuD,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE9F,IAAI,gBAAgB,IAAI,CAAC,eAAe,EAAE,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,wBAAwB;gBAC9B,OAAO,EAAE,4DAA4D;gBACrE,IAAI,EAAE,YAAY;gBAClB,QAAQ,EAAE,SAAS;gBACnB,UAAU,EAAE,4DAA4D;aACzE,CAAC,CAAC;QACL,CAAC;QAED,2BAA2B;QAC3B,MAAM,eAAe,GAAG,uCAAuC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9E,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,wBAAwB;gBAC9B,OAAO,EAAE,+CAA+C;gBACxD,IAAI,EAAE,YAAY;gBAClB,QAAQ,EAAE,MAAM;gBAChB,UAAU,EAAE,mDAAmD;aAChE,CAAC,CAAC;QACL,CAAC;QAED,6BAA6B;QAC7B,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9D,MAAM,QAAQ,GAAG,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3D,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,2BAA2B;oBACjC,OAAO,EAAE,yCAAyC;oBAClD,IAAI,EAAE,YAAY;oBAClB,QAAQ,EAAE,MAAM;oBAChB,UAAU,EAAE,+CAA+C;iBAC5D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,GAAG;IACvB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAoB,EAAE,CAAC;IAEtC,iBAAiB;IACjB,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,mBAAmB,EAAE,CAAC,CAAC;IAC/C,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,qBAAqB,EAAE,CAAC,CAAC;IACjD,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,uBAAuB,EAAE,CAAC,CAAC;IACnD,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,kBAAkB,EAAE,CAAC,CAAC;IAC9C,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,kBAAkB,EAAE,CAAC,CAAC;IAE9C,sBAAsB;IACtB,MAAM,QAAQ,GAAuB,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3D,KAAK,EAAE,KAAK,CAAC,QAAQ;QACrB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,SAAS,EAAE,KAAK,CAAC,IAAI;QACrB,MAAM,EAAE,KAAK,CAAC,IAAI;QAClB,UAAU,EAAE,KAAK,CAAC,UAAU;KAC7B,CAAC,CAAC,CAAC;IAEJ,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC;IAEvD,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC3B,QAAQ;QACR,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;QAChC,QAAQ,EAAE;YACR,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,QAAQ,CAAC,MAAM;YACzB,KAAK,EAAE,KAAK,CAAC,MAAM;SACpB;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,OAAO,CAAC,GAAG,CAAC,KAAK,qBAAK,CAAC,KAAK,2BAA2B,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,IAAA,6BAAa,EAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IAExC,MAAM,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC;IAC3B,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;IAE1D,OAAO,CAAC,GAAG,CAAC,KAAK,qBAAK,CAAC,MAAM,4BAA4B,CAAC,CAAC;IAE3D,OAAO,CAAC,GAAG,CAAC,KAAK,qBAAK,CAAC,KAAK,WAAW,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC;IAEjC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,qBAAK,CAAC,IAAI,6CAA6C,CAAC,CAAC;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,KAAK,qBAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,eAAe;IACf,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC;IACvE,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,qBAAK,CAAC,KAAK,qBAAqB,CAAC,CAAC;QACnD,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,QAAQ,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YACvC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,QAAQ,qBAAK,CAAC,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;IACH,CAAC;IAED,iBAAiB;IACjB,MAAM,eAAe,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IAC3E,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,qBAAK,CAAC,OAAO,YAAY,CAAC,CAAC;QAC5C,KAAK,MAAM,OAAO,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,QAAQ,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,eAAe,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,gBAAgB,eAAe,CAAC,MAAM,GAAG,EAAE,gBAAgB,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,qBAAK,CAAC,IAAI,oCAAoC,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IAEvD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,qBAAK,CAAC,KAAK,kCAAkC,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,qBAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;IAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;QAC1B,OAAO,CAAC,KAAK,CAAC,GAAG,qBAAK,CAAC,KAAK,oBAAoB,EAAE,GAAG,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ import { PreflightCheckResult } from "../../core/types";
3
+ export declare const id = "database/enum-sync-validation";
4
+ export declare const name = "Enum Sync Validation";
5
+ export declare const description = "Validates enum consistency between Prisma schema and TypeScript";
6
+ export declare const category = "database";
7
+ export declare const blocking = true;
8
+ export declare const tags: string[];
9
+ export declare function run(): Promise<PreflightCheckResult>;
10
+ //# sourceMappingURL=enum-sync-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enum-sync-validation.d.ts","sourceRoot":"","sources":["../../../src/checks/database/enum-sync-validation.ts"],"names":[],"mappings":";AA0BA,OAAO,EAAE,oBAAoB,EAAoB,MAAM,kBAAkB,CAAC;AAG1E,eAAO,MAAM,EAAE,kCAAkC,CAAC;AAClD,eAAO,MAAM,IAAI,yBAAyB,CAAC;AAC3C,eAAO,MAAM,WAAW,oEAAoE,CAAC;AAC7F,eAAO,MAAM,QAAQ,aAAa,CAAC;AACnC,eAAO,MAAM,QAAQ,OAAO,CAAC;AAC7B,eAAO,MAAM,IAAI,UAAwD,CAAC;AA+R1E,wBAAsB,GAAG,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAqEzD"}