@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.
- package/dist/checks/accessibility/accessibility-validation.d.ts.map +1 -1
- package/dist/checks/accessibility/accessibility-validation.js +131 -14
- package/dist/checks/accessibility/accessibility-validation.js.map +1 -1
- package/dist/checks/accessibility/wcag-advanced-validation.d.ts +10 -0
- package/dist/checks/accessibility/wcag-advanced-validation.d.ts.map +1 -0
- package/dist/checks/accessibility/wcag-advanced-validation.js +622 -0
- package/dist/checks/accessibility/wcag-advanced-validation.js.map +1 -0
- package/dist/checks/business/auto-approval-system-validation.d.ts +25 -0
- package/dist/checks/business/auto-approval-system-validation.d.ts.map +1 -0
- package/dist/checks/business/auto-approval-system-validation.js +458 -0
- package/dist/checks/business/auto-approval-system-validation.js.map +1 -0
- package/dist/checks/business/listing-submission-flow-validation.d.ts +21 -0
- package/dist/checks/business/listing-submission-flow-validation.d.ts.map +1 -0
- package/dist/checks/business/listing-submission-flow-validation.js +394 -0
- package/dist/checks/business/listing-submission-flow-validation.js.map +1 -0
- package/dist/checks/business/multi-user-sync-validation.d.ts +21 -0
- package/dist/checks/business/multi-user-sync-validation.d.ts.map +1 -0
- package/dist/checks/business/multi-user-sync-validation.js +383 -0
- package/dist/checks/business/multi-user-sync-validation.js.map +1 -0
- package/dist/checks/consolidated/ui-spacing-standards.js +59 -0
- package/dist/checks/consolidated/ui-spacing-standards.js.map +1 -1
- package/dist/checks/data-integrity/catalog-image-protection-validation.d.ts +38 -0
- package/dist/checks/data-integrity/catalog-image-protection-validation.d.ts.map +1 -0
- package/dist/checks/data-integrity/catalog-image-protection-validation.js +368 -0
- package/dist/checks/data-integrity/catalog-image-protection-validation.js.map +1 -0
- package/dist/checks/data-integrity/image-url-validation.d.ts +22 -0
- package/dist/checks/data-integrity/image-url-validation.d.ts.map +1 -0
- package/dist/checks/data-integrity/image-url-validation.js +310 -0
- package/dist/checks/data-integrity/image-url-validation.js.map +1 -0
- package/dist/checks/database/query-performance-validation.d.ts +10 -0
- package/dist/checks/database/query-performance-validation.d.ts.map +1 -0
- package/dist/checks/database/query-performance-validation.js +544 -0
- package/dist/checks/database/query-performance-validation.js.map +1 -0
- package/dist/checks/performance/async-batch-concurrency.d.ts +10 -0
- package/dist/checks/performance/async-batch-concurrency.d.ts.map +1 -0
- package/dist/checks/performance/async-batch-concurrency.js +352 -0
- package/dist/checks/performance/async-batch-concurrency.js.map +1 -0
- package/dist/checks/react/react-patterns-validation.d.ts +10 -0
- package/dist/checks/react/react-patterns-validation.d.ts.map +1 -0
- package/dist/checks/react/react-patterns-validation.js +559 -0
- package/dist/checks/react/react-patterns-validation.js.map +1 -0
- package/dist/checks/security/deprecated-node-apis-validation.d.ts +31 -0
- package/dist/checks/security/deprecated-node-apis-validation.d.ts.map +1 -0
- package/dist/checks/security/deprecated-node-apis-validation.js +324 -0
- package/dist/checks/security/deprecated-node-apis-validation.js.map +1 -0
- package/dist/checks/security/security-headers-validation.d.ts +10 -0
- package/dist/checks/security/security-headers-validation.d.ts.map +1 -0
- package/dist/checks/security/security-headers-validation.js +594 -0
- package/dist/checks/security/security-headers-validation.js.map +1 -0
- package/dist/reporters/github-reporter.d.ts +35 -0
- package/dist/reporters/github-reporter.d.ts.map +1 -0
- package/dist/reporters/github-reporter.js +397 -0
- package/dist/reporters/github-reporter.js.map +1 -0
- package/dist/reporters/html-report.d.ts +12 -0
- package/dist/reporters/html-report.d.ts.map +1 -0
- package/dist/reporters/html-report.js +469 -0
- package/dist/reporters/html-report.js.map +1 -0
- package/dist/reporters/index.d.ts +8 -0
- package/dist/reporters/index.d.ts.map +1 -0
- package/dist/reporters/index.js +18 -0
- package/dist/reporters/index.js.map +1 -0
- 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"}
|