@empline/preflight 1.1.58 → 1.1.60

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 (62) hide show
  1. package/dist/checks/accessibility/accessibility-validation.d.ts.map +1 -1
  2. package/dist/checks/accessibility/accessibility-validation.js +131 -14
  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/business/auto-approval-system-validation.d.ts +25 -0
  9. package/dist/checks/business/auto-approval-system-validation.d.ts.map +1 -0
  10. package/dist/checks/business/auto-approval-system-validation.js +458 -0
  11. package/dist/checks/business/auto-approval-system-validation.js.map +1 -0
  12. package/dist/checks/business/listing-submission-flow-validation.d.ts +21 -0
  13. package/dist/checks/business/listing-submission-flow-validation.d.ts.map +1 -0
  14. package/dist/checks/business/listing-submission-flow-validation.js +394 -0
  15. package/dist/checks/business/listing-submission-flow-validation.js.map +1 -0
  16. package/dist/checks/business/multi-user-sync-validation.d.ts +21 -0
  17. package/dist/checks/business/multi-user-sync-validation.d.ts.map +1 -0
  18. package/dist/checks/business/multi-user-sync-validation.js +383 -0
  19. package/dist/checks/business/multi-user-sync-validation.js.map +1 -0
  20. package/dist/checks/consolidated/ui-spacing-standards.js +59 -0
  21. package/dist/checks/consolidated/ui-spacing-standards.js.map +1 -1
  22. package/dist/checks/data-integrity/catalog-image-protection-validation.d.ts +38 -0
  23. package/dist/checks/data-integrity/catalog-image-protection-validation.d.ts.map +1 -0
  24. package/dist/checks/data-integrity/catalog-image-protection-validation.js +368 -0
  25. package/dist/checks/data-integrity/catalog-image-protection-validation.js.map +1 -0
  26. package/dist/checks/data-integrity/image-url-validation.d.ts +22 -0
  27. package/dist/checks/data-integrity/image-url-validation.d.ts.map +1 -0
  28. package/dist/checks/data-integrity/image-url-validation.js +310 -0
  29. package/dist/checks/data-integrity/image-url-validation.js.map +1 -0
  30. package/dist/checks/database/query-performance-validation.d.ts +10 -0
  31. package/dist/checks/database/query-performance-validation.d.ts.map +1 -0
  32. package/dist/checks/database/query-performance-validation.js +544 -0
  33. package/dist/checks/database/query-performance-validation.js.map +1 -0
  34. package/dist/checks/performance/async-batch-concurrency.d.ts +10 -0
  35. package/dist/checks/performance/async-batch-concurrency.d.ts.map +1 -0
  36. package/dist/checks/performance/async-batch-concurrency.js +352 -0
  37. package/dist/checks/performance/async-batch-concurrency.js.map +1 -0
  38. package/dist/checks/react/react-patterns-validation.d.ts +10 -0
  39. package/dist/checks/react/react-patterns-validation.d.ts.map +1 -0
  40. package/dist/checks/react/react-patterns-validation.js +559 -0
  41. package/dist/checks/react/react-patterns-validation.js.map +1 -0
  42. package/dist/checks/security/deprecated-node-apis-validation.d.ts +31 -0
  43. package/dist/checks/security/deprecated-node-apis-validation.d.ts.map +1 -0
  44. package/dist/checks/security/deprecated-node-apis-validation.js +324 -0
  45. package/dist/checks/security/deprecated-node-apis-validation.js.map +1 -0
  46. package/dist/checks/security/security-headers-validation.d.ts +10 -0
  47. package/dist/checks/security/security-headers-validation.d.ts.map +1 -0
  48. package/dist/checks/security/security-headers-validation.js +594 -0
  49. package/dist/checks/security/security-headers-validation.js.map +1 -0
  50. package/dist/reporters/github-reporter.d.ts +35 -0
  51. package/dist/reporters/github-reporter.d.ts.map +1 -0
  52. package/dist/reporters/github-reporter.js +397 -0
  53. package/dist/reporters/github-reporter.js.map +1 -0
  54. package/dist/reporters/html-report.d.ts +12 -0
  55. package/dist/reporters/html-report.d.ts.map +1 -0
  56. package/dist/reporters/html-report.js +469 -0
  57. package/dist/reporters/html-report.js.map +1 -0
  58. package/dist/reporters/index.d.ts +8 -0
  59. package/dist/reporters/index.d.ts.map +1 -0
  60. package/dist/reporters/index.js +18 -0
  61. package/dist/reporters/index.js.map +1 -0
  62. package/package.json +1 -1
@@ -0,0 +1,394 @@
1
+ #!/usr/bin/env tsx
2
+ "use strict";
3
+ /**
4
+ * Listing Submission Flow Validation Preflight
5
+ *
6
+ * Ensures the listing submission flow is properly implemented:
7
+ * 1. Confirmation page shows immediately when last card is submitted (no flash)
8
+ * 2. Optimistic UI updates are properly implemented
9
+ * 3. Submission tracking state is correct
10
+ * 4. Error handling reverts state properly
11
+ *
12
+ * This prevents UI regressions like flashing the dropzone before confirmation.
13
+ */
14
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ var desc = Object.getOwnPropertyDescriptor(m, k);
17
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
18
+ desc = { enumerable: true, get: function() { return m[k]; } };
19
+ }
20
+ Object.defineProperty(o, k2, desc);
21
+ }) : (function(o, m, k, k2) {
22
+ if (k2 === undefined) k2 = k;
23
+ o[k2] = m[k];
24
+ }));
25
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
27
+ }) : function(o, v) {
28
+ o["default"] = v;
29
+ });
30
+ var __importStar = (this && this.__importStar) || (function () {
31
+ var ownKeys = function(o) {
32
+ ownKeys = Object.getOwnPropertyNames || function (o) {
33
+ var ar = [];
34
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
35
+ return ar;
36
+ };
37
+ return ownKeys(o);
38
+ };
39
+ return function (mod) {
40
+ if (mod && mod.__esModule) return mod;
41
+ var result = {};
42
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
43
+ __setModuleDefault(result, mod);
44
+ return result;
45
+ };
46
+ })();
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.tags = exports.blocking = exports.category = exports.description = exports.name = exports.id = void 0;
49
+ exports.run = main;
50
+ const fs = __importStar(require("node:fs"));
51
+ const path = __importStar(require("node:path"));
52
+ const console_chars_1 = require("../../utils/console-chars");
53
+ const universal_progress_reporter_1 = require("../system/universal-progress-reporter");
54
+ // PREFLIGHT METADATA
55
+ exports.id = "business/listing-submission-flow-validation";
56
+ exports.name = "Listing Submission Flow Validation";
57
+ exports.description = "Validates the listing submission flow for proper UI transitions and state management";
58
+ exports.category = "business";
59
+ exports.blocking = true;
60
+ exports.tags = ["business", "submission", "ui", "state", "optimistic-update", "confirmation"];
61
+ const results = [];
62
+ const TRADING_CARD_SYSTEM_PATH = path.resolve(__dirname, "../../../../trading-card-system");
63
+ function addResult(result) {
64
+ results.push(result);
65
+ const icon = result.passed ? console_chars_1.emoji.success : (result.severity === "warning" ? console_chars_1.emoji.warning : console_chars_1.emoji.error);
66
+ const location = result.file ? ` (${result.file}${result.line ? `:${result.line}` : ""})` : "";
67
+ console.log(` ${icon} ${result.message}${location}`);
68
+ }
69
+ function fileExists(filePath) {
70
+ const fullPath = path.join(TRADING_CARD_SYSTEM_PATH, filePath);
71
+ return fs.existsSync(fullPath);
72
+ }
73
+ function fileContains(filePath, pattern) {
74
+ const fullPath = path.join(TRADING_CARD_SYSTEM_PATH, filePath);
75
+ if (!fs.existsSync(fullPath)) {
76
+ return { found: false };
77
+ }
78
+ const content = fs.readFileSync(fullPath, "utf8");
79
+ const lines = content.split("\n");
80
+ for (let i = 0; i < lines.length; i++) {
81
+ const lineContent = lines[i] || "";
82
+ const match = lineContent.match(pattern);
83
+ if (match) {
84
+ return { found: true, line: i + 1, match: match[0] };
85
+ }
86
+ }
87
+ // Check full content for multi-line patterns
88
+ const fullMatch = content.match(pattern);
89
+ if (fullMatch) {
90
+ return { found: true, match: fullMatch[0] };
91
+ }
92
+ return { found: false };
93
+ }
94
+ async function main() {
95
+ const reporter = (0, universal_progress_reporter_1.createUniversalProgressReporter)(exports.name);
96
+ console.log(`\n${console_chars_1.emoji.rocket} LISTING SUBMISSION FLOW VALIDATION PREFLIGHT`);
97
+ console.log((0, console_chars_1.createDivider)(60, "heavy"));
98
+ console.log(`${console_chars_1.emoji.info} Validating submission flow and UI transitions...\n`);
99
+ // ---
100
+ // 1. Submission Tracking Hook
101
+ // ---
102
+ console.log(`${console_chars_1.emoji.folder} Checking useSubmissionTracking hook...`);
103
+ const trackingHookPath = "app/store/listings/new/_components/useSubmissionTracking.ts";
104
+ if (!fileExists(trackingHookPath)) {
105
+ addResult({
106
+ passed: false,
107
+ message: "Missing useSubmissionTracking hook",
108
+ file: trackingHookPath,
109
+ });
110
+ }
111
+ else {
112
+ addResult({
113
+ passed: true,
114
+ message: "useSubmissionTracking hook exists",
115
+ file: trackingHookPath,
116
+ });
117
+ // Check for submittedListings state
118
+ const hasSubmittedListings = fileContains(trackingHookPath, /submittedListings/);
119
+ addResult({
120
+ passed: hasSubmittedListings.found,
121
+ message: hasSubmittedListings.found
122
+ ? "Tracks submitted listings"
123
+ : "Missing submittedListings state",
124
+ file: trackingHookPath,
125
+ line: hasSubmittedListings.line,
126
+ });
127
+ // Check for showConfirmation state
128
+ const hasShowConfirmation = fileContains(trackingHookPath, /showConfirmation/);
129
+ addResult({
130
+ passed: hasShowConfirmation.found,
131
+ message: hasShowConfirmation.found
132
+ ? "Has showConfirmation state"
133
+ : "Missing showConfirmation state",
134
+ file: trackingHookPath,
135
+ line: hasShowConfirmation.line,
136
+ });
137
+ // Check for checkAutoShowConfirmation function
138
+ const hasAutoCheck = fileContains(trackingHookPath, /checkAutoShowConfirmation/);
139
+ addResult({
140
+ passed: hasAutoCheck.found,
141
+ message: hasAutoCheck.found
142
+ ? "Has checkAutoShowConfirmation function"
143
+ : "Missing checkAutoShowConfirmation - confirmation page won't auto-show",
144
+ file: trackingHookPath,
145
+ line: hasAutoCheck.line,
146
+ });
147
+ // Check for trackSubmission function
148
+ const hasTrackSubmission = fileContains(trackingHookPath, /trackSubmission/);
149
+ addResult({
150
+ passed: hasTrackSubmission.found,
151
+ message: hasTrackSubmission.found
152
+ ? "Has trackSubmission function"
153
+ : "Missing trackSubmission - can't track successful submissions",
154
+ file: trackingHookPath,
155
+ line: hasTrackSubmission.line,
156
+ });
157
+ // Check for resetTracking function (for "Submit More")
158
+ const hasResetTracking = fileContains(trackingHookPath, /resetTracking/);
159
+ addResult({
160
+ passed: hasResetTracking.found,
161
+ message: hasResetTracking.found
162
+ ? "Has resetTracking function for 'Submit More'"
163
+ : "Missing resetTracking - 'Submit More' won't work",
164
+ file: trackingHookPath,
165
+ line: hasResetTracking.line,
166
+ });
167
+ }
168
+ // ---
169
+ // 2. NewListingClient Confirmation Logic
170
+ // ---
171
+ console.log(`\n${console_chars_1.emoji.folder} Checking NewListingClient confirmation logic...`);
172
+ const clientPath = "app/store/listings/new/NewListingClient.tsx";
173
+ if (!fileExists(clientPath)) {
174
+ addResult({
175
+ passed: false,
176
+ message: "Missing NewListingClient.tsx",
177
+ file: clientPath,
178
+ });
179
+ }
180
+ else {
181
+ // Check for shouldShowConfirmation or immediate confirmation logic
182
+ // This prevents the flash by showing confirmation immediately when cards.length === 0
183
+ const hasImmediateConfirmation = fileContains(clientPath, /shouldShowConfirmation|cardPairs.*\.length\s*===\s*0.*showConfirmation|showConfirmation.*cardPairs.*\.length\s*===\s*0/);
184
+ addResult({
185
+ passed: hasImmediateConfirmation.found,
186
+ message: hasImmediateConfirmation.found
187
+ ? "Has immediate confirmation logic (prevents flash)"
188
+ : "Missing immediate confirmation - may cause dropzone flash on last card submit",
189
+ file: clientPath,
190
+ line: hasImmediateConfirmation.line,
191
+ });
192
+ // Check for SubmissionConfirmation component usage
193
+ const usesConfirmationComponent = fileContains(clientPath, /SubmissionConfirmation/);
194
+ addResult({
195
+ passed: usesConfirmationComponent.found,
196
+ message: usesConfirmationComponent.found
197
+ ? "Uses SubmissionConfirmation component"
198
+ : "Missing SubmissionConfirmation component",
199
+ file: clientPath,
200
+ line: usesConfirmationComponent.line,
201
+ });
202
+ // Check for submissionTracking hook usage
203
+ const usesTrackingHook = fileContains(clientPath, /useSubmissionTracking\s*\(/);
204
+ addResult({
205
+ passed: usesTrackingHook.found,
206
+ message: usesTrackingHook.found
207
+ ? "Uses useSubmissionTracking hook"
208
+ : "Not using useSubmissionTracking hook",
209
+ file: clientPath,
210
+ line: usesTrackingHook.line,
211
+ });
212
+ // Check for onSubmitMore handler
213
+ const hasSubmitMore = fileContains(clientPath, /onSubmitMore|resetTracking/);
214
+ addResult({
215
+ passed: hasSubmitMore.found,
216
+ message: hasSubmitMore.found
217
+ ? "Has 'Submit More' functionality"
218
+ : "Missing 'Submit More' handler",
219
+ file: clientPath,
220
+ line: hasSubmitMore.line,
221
+ });
222
+ }
223
+ // ---
224
+ // 3. Card Pair Handlers - Optimistic Updates
225
+ // ---
226
+ console.log(`\n${console_chars_1.emoji.folder} Checking optimistic update patterns...`);
227
+ const handlersPath = "hooks/useCardPairHandlers.ts";
228
+ if (!fileExists(handlersPath)) {
229
+ addResult({
230
+ passed: false,
231
+ message: "Missing useCardPairHandlers hook",
232
+ file: handlersPath,
233
+ });
234
+ }
235
+ else {
236
+ // Check for optimistic update comment/pattern
237
+ const hasOptimisticUpdate = fileContains(handlersPath, /OPTIMISTIC|optimistic/i);
238
+ addResult({
239
+ passed: hasOptimisticUpdate.found,
240
+ message: hasOptimisticUpdate.found
241
+ ? "Uses optimistic UI updates"
242
+ : "May not use optimistic updates - UI might feel slow",
243
+ file: handlersPath,
244
+ line: hasOptimisticUpdate.line,
245
+ severity: hasOptimisticUpdate.found ? undefined : "warning",
246
+ });
247
+ // Check for state revert on failure
248
+ const hasRevertOnFailure = fileContains(handlersPath, /previousPairs|REVERT|revert/i);
249
+ addResult({
250
+ passed: hasRevertOnFailure.found,
251
+ message: hasRevertOnFailure.found
252
+ ? "Reverts state on submission failure"
253
+ : "May not revert state on failure - could lose data",
254
+ file: handlersPath,
255
+ line: hasRevertOnFailure.line,
256
+ });
257
+ // Check for onSubmissionSuccess callback
258
+ const hasSuccessCallback = fileContains(handlersPath, /onSubmissionSuccess/);
259
+ addResult({
260
+ passed: hasSuccessCallback.found,
261
+ message: hasSuccessCallback.found
262
+ ? "Calls onSubmissionSuccess callback"
263
+ : "Missing onSubmissionSuccess callback - confirmation won't track submissions",
264
+ file: handlersPath,
265
+ line: hasSuccessCallback.line,
266
+ });
267
+ // Check for error handling
268
+ const hasErrorHandling = fileContains(handlersPath, /showError|catch.*setCardPairs/);
269
+ addResult({
270
+ passed: hasErrorHandling.found,
271
+ message: hasErrorHandling.found
272
+ ? "Has error handling with user feedback"
273
+ : "May be missing error handling",
274
+ file: handlersPath,
275
+ line: hasErrorHandling.line,
276
+ });
277
+ }
278
+ // ---
279
+ // 4. SubmissionConfirmation Component
280
+ // ---
281
+ console.log(`\n${console_chars_1.emoji.folder} Checking SubmissionConfirmation component...`);
282
+ const confirmationPath = "app/store/listings/new/_components/SubmissionConfirmation.tsx";
283
+ if (!fileExists(confirmationPath)) {
284
+ addResult({
285
+ passed: false,
286
+ message: "Missing SubmissionConfirmation component",
287
+ file: confirmationPath,
288
+ });
289
+ }
290
+ else {
291
+ addResult({
292
+ passed: true,
293
+ message: "SubmissionConfirmation component exists",
294
+ file: confirmationPath,
295
+ });
296
+ // Check for submittedListings prop
297
+ const hasListingsProp = fileContains(confirmationPath, /submittedListings/);
298
+ addResult({
299
+ passed: hasListingsProp.found,
300
+ message: hasListingsProp.found
301
+ ? "Receives submittedListings prop"
302
+ : "Missing submittedListings prop",
303
+ file: confirmationPath,
304
+ line: hasListingsProp.line,
305
+ });
306
+ // Check for onSubmitMore prop
307
+ const hasSubmitMoreProp = fileContains(confirmationPath, /onSubmitMore/);
308
+ addResult({
309
+ passed: hasSubmitMoreProp.found,
310
+ message: hasSubmitMoreProp.found
311
+ ? "Has onSubmitMore callback"
312
+ : "Missing onSubmitMore - can't submit more cards",
313
+ file: confirmationPath,
314
+ line: hasSubmitMoreProp.line,
315
+ });
316
+ }
317
+ // ---
318
+ // 5. Listing Operations - API Integration
319
+ // ---
320
+ console.log(`\n${console_chars_1.emoji.folder} Checking listing submission API...`);
321
+ const listingOpsPath = "lib/listing-operations.ts";
322
+ if (fileExists(listingOpsPath)) {
323
+ // Check for submitSingleCard function
324
+ const hasSubmitSingle = fileContains(listingOpsPath, /submitSingleCard/);
325
+ addResult({
326
+ passed: hasSubmitSingle.found,
327
+ message: hasSubmitSingle.found
328
+ ? "Has submitSingleCard function"
329
+ : "Missing submitSingleCard function",
330
+ file: listingOpsPath,
331
+ line: hasSubmitSingle.line,
332
+ });
333
+ // Check for proper error response handling
334
+ const hasErrorResponse = fileContains(listingOpsPath, /success:\s*false|error:/);
335
+ addResult({
336
+ passed: hasErrorResponse.found,
337
+ message: hasErrorResponse.found
338
+ ? "Returns structured error responses"
339
+ : "May not return structured errors",
340
+ file: listingOpsPath,
341
+ line: hasErrorResponse.line,
342
+ });
343
+ }
344
+ // ---
345
+ // SUMMARY
346
+ // ---
347
+ console.log("\n" + (0, console_chars_1.createDivider)(60, "heavy"));
348
+ console.log(`${console_chars_1.emoji.chart} VALIDATION SUMMARY`);
349
+ console.log((0, console_chars_1.createDivider)(60, "heavy"));
350
+ const passed = results.filter((r) => r.passed).length;
351
+ const failed = results.filter((r) => !r.passed && r.severity !== "warning").length;
352
+ const warnings = results.filter((r) => !r.passed && r.severity === "warning").length;
353
+ const total = results.length;
354
+ console.log(`${console_chars_1.emoji.success} Passed: ${passed}/${total}`);
355
+ if (failed > 0) {
356
+ console.log(`${console_chars_1.emoji.error} Failed: ${failed}`);
357
+ }
358
+ if (warnings > 0) {
359
+ console.log(`${console_chars_1.emoji.warning} Warnings: ${warnings}`);
360
+ }
361
+ // Show summary
362
+ reporter.showSummary({
363
+ filesProcessed: total,
364
+ issuesFound: failed + warnings,
365
+ errors: failed,
366
+ warnings: warnings,
367
+ });
368
+ console.log((0, console_chars_1.createDivider)(60, "heavy"));
369
+ if (failed > 0) {
370
+ console.log(`\n${console_chars_1.emoji.error} LISTING SUBMISSION FLOW VALIDATION FAILED`);
371
+ console.log(`\n${console_chars_1.emoji.info} The submission flow may have UI issues!`);
372
+ console.log(`\n${console_chars_1.emoji.hint} To fix:`);
373
+ console.log(` 1. Ensure useSubmissionTracking has all required state and functions`);
374
+ console.log(` 2. Ensure NewListingClient shows confirmation immediately when cards.length === 0`);
375
+ console.log(` 3. Ensure optimistic updates with proper revert on failure`);
376
+ process.exit(1);
377
+ }
378
+ else if (warnings > 0) {
379
+ console.log(`\n${console_chars_1.emoji.warning} LISTING SUBMISSION FLOW VALIDATION PASSED WITH WARNINGS`);
380
+ process.exit(0);
381
+ }
382
+ else {
383
+ console.log(`\n${console_chars_1.emoji.success} LISTING SUBMISSION FLOW VALIDATION PASSED`);
384
+ process.exit(0);
385
+ }
386
+ }
387
+ // Run if called directly
388
+ if (require.main === module) {
389
+ main().catch((error) => {
390
+ console.error(`${console_chars_1.emoji.error} Fatal error:`, error);
391
+ process.exit(1);
392
+ });
393
+ }
394
+ //# sourceMappingURL=listing-submission-flow-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listing-submission-flow-validation.js","sourceRoot":"","sources":["../../../src/checks/business/listing-submission-flow-validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * Multi-User Sync Validation Preflight
4
+ *
5
+ * Ensures the real-time multi-user synchronization features are properly implemented:
6
+ * 1. Session discovery mechanism exists (finds team members' sessions)
7
+ * 2. Polling intervals are configured correctly
8
+ * 3. Remote update callbacks are wired up
9
+ * 4. Session sync hook has all required features
10
+ *
11
+ * This prevents regressions where team members can't see each other's uploads.
12
+ */
13
+ export declare const id = "business/multi-user-sync-validation";
14
+ export declare const name = "Multi-User Sync Validation";
15
+ export declare const description = "Validates real-time multi-user synchronization for team collaboration on listing uploads";
16
+ export declare const category = "business";
17
+ export declare const blocking = true;
18
+ export declare const tags: string[];
19
+ declare function main(): Promise<void>;
20
+ export { main as run };
21
+ //# sourceMappingURL=multi-user-sync-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-user-sync-validation.d.ts","sourceRoot":"","sources":["../../../src/checks/business/multi-user-sync-validation.ts"],"names":[],"mappings":";AACA;;;;;;;;;;GAUG;AASH,eAAO,MAAM,EAAE,wCAAwC,CAAC;AACxD,eAAO,MAAM,IAAI,+BAA+B,CAAC;AACjD,eAAO,MAAM,WAAW,6FACoE,CAAC;AAC7F,eAAO,MAAM,QAAQ,aAAa,CAAC;AACnC,eAAO,MAAM,QAAQ,OAAO,CAAC;AAC7B,eAAO,MAAM,IAAI,UAAsF,CAAC;AAmExG,iBAAe,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAmSnC;AAUD,OAAO,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC"}