@riddledc/riddle-proof 0.7.138 → 0.7.140
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 +8 -0
- package/dist/{chunk-N75EAJNG.js → chunk-6VXZ6V5M.js} +73 -5
- package/dist/cli.cjs +76 -5
- package/dist/cli.js +4 -1
- package/dist/index.cjs +73 -5
- package/dist/index.js +1 -1
- package/dist/profile.cjs +73 -5
- package/dist/profile.d.cts +2 -0
- package/dist/profile.d.ts +2 -0
- package/dist/profile.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -482,6 +482,14 @@ and `click_count_value_total`.
|
|
|
482
482
|
profile carries its own hosted Riddle worker budget; an explicit CLI `--timeout`
|
|
483
483
|
still overrides the profile value for one-off runs.
|
|
484
484
|
|
|
485
|
+
Profile final viewport screenshots are full-page by default. Set
|
|
486
|
+
`target.screenshot_full_page: false`, `target.screenshotFullPage: false`, or
|
|
487
|
+
`target.screenshot_mode: "viewport"` when the automatic final screenshots
|
|
488
|
+
should capture only the current viewport, for example when fixed or sticky
|
|
489
|
+
headers make full-page captures misleading. Compact profile summaries include
|
|
490
|
+
the final screenshot count and mode when a profile sets an explicit target
|
|
491
|
+
screenshot mode.
|
|
492
|
+
|
|
485
493
|
Use `allowed_console_patterns` / `allowed_console_texts` on
|
|
486
494
|
`no_fatal_console_errors` when a negative-path profile intentionally triggers a
|
|
487
495
|
known browser console error, such as a mocked `503` that the app recovers from:
|
|
@@ -494,12 +494,18 @@ function profileScreenshotLabels(viewports) {
|
|
|
494
494
|
}
|
|
495
495
|
return labels;
|
|
496
496
|
}
|
|
497
|
-
function profileSetupSummary(viewports, actionCount, expectedActionCountByViewport) {
|
|
497
|
+
function profileSetupSummary(viewports, actionCount, expectedActionCountByViewport, finalScreenshotFullPage) {
|
|
498
|
+
const normalizedFinalScreenshotFullPage = finalScreenshotFullPage === void 0 ? void 0 : finalScreenshotFullPage !== false;
|
|
499
|
+
const finalScreenshotCount = viewports.filter((viewport) => typeof viewport.screenshot_label === "string" && viewport.screenshot_label.trim()).length;
|
|
498
500
|
return toJsonValue({
|
|
499
501
|
viewport_count: viewports.length,
|
|
500
502
|
action_count: actionCount ?? null,
|
|
503
|
+
final_screenshot_count: finalScreenshotCount,
|
|
504
|
+
final_screenshot_full_page: normalizedFinalScreenshotFullPage ?? null,
|
|
505
|
+
final_screenshot_mode: normalizedFinalScreenshotFullPage === void 0 ? null : normalizedFinalScreenshotFullPage ? "full_page" : "viewport",
|
|
501
506
|
viewports: viewports.map((viewport) => {
|
|
502
507
|
const expectedActionCount = expectedActionCountByViewport?.get(viewport.name) ?? actionCount;
|
|
508
|
+
const viewportFinalScreenshotFullPage = typeof viewport.screenshot_full_page === "boolean" ? viewport.screenshot_full_page : normalizedFinalScreenshotFullPage;
|
|
503
509
|
const results = viewport.setup_action_results || [];
|
|
504
510
|
const failed = results.filter((result) => result.ok === false && result.optional !== true);
|
|
505
511
|
const optionalFailed = results.filter((result) => result.ok === false && result.optional === true);
|
|
@@ -539,6 +545,8 @@ function profileSetupSummary(viewports, actionCount, expectedActionCountByViewpo
|
|
|
539
545
|
action_counts: profileSetupActionCounts(results),
|
|
540
546
|
frame_action_count: results.filter((result) => result.frame_selector).length,
|
|
541
547
|
frame_urls: profileSetupFrameUrls(viewport),
|
|
548
|
+
final_screenshot: viewport.screenshot_label ?? null,
|
|
549
|
+
final_screenshot_full_page: viewportFinalScreenshotFullPage ?? null,
|
|
542
550
|
setup_screenshots: profileSetupScreenshotLabels(results),
|
|
543
551
|
clicked_total: clickedItems.length,
|
|
544
552
|
clicked_truncated: clickedItems.length > clicked.length,
|
|
@@ -875,6 +883,42 @@ function normalizeSetupActions(value) {
|
|
|
875
883
|
if (!Array.isArray(value)) throw new Error("target.setup_actions must be an array.");
|
|
876
884
|
return value.map(normalizeSetupAction);
|
|
877
885
|
}
|
|
886
|
+
function normalizeTargetScreenshotFullPage(input) {
|
|
887
|
+
const directFullPage = booleanValue(valueFromOwn(
|
|
888
|
+
input,
|
|
889
|
+
"screenshot_full_page",
|
|
890
|
+
"screenshotFullPage",
|
|
891
|
+
"final_screenshot_full_page",
|
|
892
|
+
"finalScreenshotFullPage",
|
|
893
|
+
"full_page_screenshots",
|
|
894
|
+
"fullPageScreenshots"
|
|
895
|
+
));
|
|
896
|
+
const viewportOnly = booleanValue(valueFromOwn(
|
|
897
|
+
input,
|
|
898
|
+
"viewport_screenshots",
|
|
899
|
+
"viewportScreenshots",
|
|
900
|
+
"viewport_only_screenshots",
|
|
901
|
+
"viewportOnlyScreenshots"
|
|
902
|
+
));
|
|
903
|
+
const modeInput = stringFromOwn(input, "screenshot_mode", "screenshotMode", "final_screenshot_mode", "finalScreenshotMode");
|
|
904
|
+
let modeFullPage;
|
|
905
|
+
if (modeInput) {
|
|
906
|
+
const mode = modeInput.trim().toLowerCase().replace(/[-\s]+/g, "_");
|
|
907
|
+
if (mode === "full_page" || mode === "fullpage" || mode === "page" || mode === "document") {
|
|
908
|
+
modeFullPage = true;
|
|
909
|
+
} else if (mode === "viewport" || mode === "view") {
|
|
910
|
+
modeFullPage = false;
|
|
911
|
+
} else {
|
|
912
|
+
throw new Error(`target.screenshot_mode ${modeInput} is not supported. Supported modes: full_page, viewport.`);
|
|
913
|
+
}
|
|
914
|
+
}
|
|
915
|
+
const values = [directFullPage, viewportOnly === void 0 ? void 0 : !viewportOnly, modeFullPage].filter((value) => value !== void 0);
|
|
916
|
+
if (!values.length) return void 0;
|
|
917
|
+
if (values.some((value) => value !== values[0])) {
|
|
918
|
+
throw new Error("target has conflicting screenshot full_page / viewport mode options.");
|
|
919
|
+
}
|
|
920
|
+
return values[0];
|
|
921
|
+
}
|
|
878
922
|
function normalizeNetworkMock(input, index) {
|
|
879
923
|
if (!isRecord(input)) throw new Error(`target.network_mocks[${index}] must be an object.`);
|
|
880
924
|
const url = stringValue(input.url) || stringValue(input.glob) || stringValue(input.pattern);
|
|
@@ -1443,6 +1487,7 @@ function normalizeRiddleProofProfile(input, options = {}) {
|
|
|
1443
1487
|
timeout_sec: timeoutSecValue(targetInput.timeout_sec) ?? timeoutSecValue(targetInput.timeoutSec) ?? timeoutSecValue(targetInput.riddle_timeout_sec) ?? timeoutSecValue(targetInput.riddleTimeoutSec),
|
|
1444
1488
|
wait_for_selector: stringValue(targetInput.wait_for_selector) || stringValue(targetInput.waitForSelector),
|
|
1445
1489
|
wait_ms: numberValue(targetInput.wait_ms) ?? numberValue(targetInput.waitMs),
|
|
1490
|
+
screenshot_full_page: normalizeTargetScreenshotFullPage(targetInput),
|
|
1446
1491
|
setup_actions: normalizeSetupActions(targetInput.setup_actions ?? targetInput.setupActions),
|
|
1447
1492
|
network_mocks: normalizeNetworkMocks(targetInput.network_mocks ?? targetInput.networkMocks)
|
|
1448
1493
|
},
|
|
@@ -2746,7 +2791,7 @@ function assessSetupActionsFromEvidence(profile, evidence) {
|
|
|
2746
2791
|
ok: (viewport.setup_action_results || []).length >= (expectedActionCountByViewport.get(viewport.name) ?? actionCount) && (viewport.setup_action_results || []).every((result) => result.ok !== false || result.optional === true),
|
|
2747
2792
|
result_count: (viewport.setup_action_results || []).length
|
|
2748
2793
|
})),
|
|
2749
|
-
setup_summary: profileSetupSummary(viewports, actionCount, expectedActionCountByViewport),
|
|
2794
|
+
setup_summary: profileSetupSummary(viewports, actionCount, expectedActionCountByViewport, profile.target.screenshot_full_page),
|
|
2750
2795
|
failed
|
|
2751
2796
|
},
|
|
2752
2797
|
message: failed.length ? `Setup actions failed in ${failed.length} viewport action(s).` : void 0
|
|
@@ -3766,14 +3811,28 @@ function profileScreenshotLabels(viewports) {
|
|
|
3766
3811
|
}
|
|
3767
3812
|
return labels;
|
|
3768
3813
|
}
|
|
3769
|
-
function profileSetupSummary(viewports, actionCount, expectedActionCountsByViewport) {
|
|
3814
|
+
function profileSetupSummary(viewports, actionCount, expectedActionCountsByViewport, finalScreenshotFullPage) {
|
|
3815
|
+
const normalizedFinalScreenshotFullPage = finalScreenshotFullPage === undefined
|
|
3816
|
+
? undefined
|
|
3817
|
+
: finalScreenshotFullPage !== false;
|
|
3818
|
+
const finalScreenshotCount = (viewports || []).filter((viewport) => viewport && typeof viewport.screenshot_label === "string" && viewport.screenshot_label.trim()).length;
|
|
3770
3819
|
return {
|
|
3771
3820
|
viewport_count: (viewports || []).length,
|
|
3772
3821
|
action_count: actionCount ?? null,
|
|
3822
|
+
final_screenshot_count: finalScreenshotCount,
|
|
3823
|
+
final_screenshot_full_page: normalizedFinalScreenshotFullPage ?? null,
|
|
3824
|
+
final_screenshot_mode: normalizedFinalScreenshotFullPage === undefined
|
|
3825
|
+
? null
|
|
3826
|
+
: normalizedFinalScreenshotFullPage
|
|
3827
|
+
? "full_page"
|
|
3828
|
+
: "viewport",
|
|
3773
3829
|
viewports: (viewports || []).map((viewport) => {
|
|
3774
3830
|
const expectedActionCount = expectedActionCountsByViewport && expectedActionCountsByViewport[viewport.name] !== undefined
|
|
3775
3831
|
? expectedActionCountsByViewport[viewport.name]
|
|
3776
3832
|
: actionCount;
|
|
3833
|
+
const viewportFinalScreenshotFullPage = typeof viewport.screenshot_full_page === "boolean"
|
|
3834
|
+
? viewport.screenshot_full_page
|
|
3835
|
+
: normalizedFinalScreenshotFullPage;
|
|
3777
3836
|
const results = viewport.setup_action_results || [];
|
|
3778
3837
|
const failed = results.filter((result) => result && result.ok === false && result.optional !== true);
|
|
3779
3838
|
const optionalFailed = results.filter((result) => result && result.ok === false && result.optional === true);
|
|
@@ -3827,6 +3886,8 @@ function profileSetupSummary(viewports, actionCount, expectedActionCountsByViewp
|
|
|
3827
3886
|
action_counts: profileSetupActionCounts(results),
|
|
3828
3887
|
frame_action_count: results.filter((result) => result && result.frame_selector).length,
|
|
3829
3888
|
frame_urls: profileSetupFrameUrls(viewport),
|
|
3889
|
+
final_screenshot: viewport.screenshot_label || null,
|
|
3890
|
+
final_screenshot_full_page: viewportFinalScreenshotFullPage ?? null,
|
|
3830
3891
|
setup_screenshots: profileSetupScreenshotLabels(results),
|
|
3831
3892
|
clicked_total: clickedItems.length,
|
|
3832
3893
|
clicked_truncated: clickedItems.length > clicked.length,
|
|
@@ -4011,7 +4072,7 @@ function assessProfile(profile, evidence) {
|
|
|
4011
4072
|
&& (viewport.setup_action_results || []).every((result) => !result || result.ok !== false || result.optional === true),
|
|
4012
4073
|
result_count: (viewport.setup_action_results || []).length,
|
|
4013
4074
|
})),
|
|
4014
|
-
setup_summary: profileSetupSummary(viewports, actionCount, expectedActionCountsByViewport),
|
|
4075
|
+
setup_summary: profileSetupSummary(viewports, actionCount, expectedActionCountsByViewport, profile.target && profile.target.screenshot_full_page),
|
|
4015
4076
|
failed,
|
|
4016
4077
|
},
|
|
4017
4078
|
message: failed.length ? "Setup actions failed in " + failed.length + " viewport action(s)." : undefined,
|
|
@@ -6889,8 +6950,14 @@ async function captureViewport(viewport) {
|
|
|
6889
6950
|
}
|
|
6890
6951
|
}
|
|
6891
6952
|
const screenshotLabel = profileSlug + "-" + viewport.name;
|
|
6953
|
+
let screenshotFullPage = null;
|
|
6892
6954
|
try {
|
|
6893
|
-
|
|
6955
|
+
const screenshotOptions = {};
|
|
6956
|
+
if (profile.target && profile.target.screenshot_full_page !== undefined) {
|
|
6957
|
+
screenshotFullPage = profile.target.screenshot_full_page !== false;
|
|
6958
|
+
screenshotOptions.fullPage = screenshotFullPage;
|
|
6959
|
+
}
|
|
6960
|
+
if (typeof saveScreenshot === "function") await saveScreenshot(screenshotLabel, screenshotOptions);
|
|
6894
6961
|
} catch (error) {
|
|
6895
6962
|
pageErrors.push({ message: "saveScreenshot failed: " + String(error && error.message ? error.message : error).slice(0, 500) });
|
|
6896
6963
|
}
|
|
@@ -6957,6 +7024,7 @@ async function captureViewport(viewport) {
|
|
|
6957
7024
|
route_inventory: routeInventory,
|
|
6958
7025
|
setup_action_results: setupActionResults,
|
|
6959
7026
|
screenshot_label: screenshotLabel,
|
|
7027
|
+
screenshot_full_page: screenshotFullPage,
|
|
6960
7028
|
navigation_error: navigationError,
|
|
6961
7029
|
wait_error: waitError,
|
|
6962
7030
|
};
|
package/dist/cli.cjs
CHANGED
|
@@ -7431,12 +7431,18 @@ function profileScreenshotLabels(viewports) {
|
|
|
7431
7431
|
}
|
|
7432
7432
|
return labels;
|
|
7433
7433
|
}
|
|
7434
|
-
function profileSetupSummary(viewports, actionCount, expectedActionCountByViewport) {
|
|
7434
|
+
function profileSetupSummary(viewports, actionCount, expectedActionCountByViewport, finalScreenshotFullPage) {
|
|
7435
|
+
const normalizedFinalScreenshotFullPage = finalScreenshotFullPage === void 0 ? void 0 : finalScreenshotFullPage !== false;
|
|
7436
|
+
const finalScreenshotCount = viewports.filter((viewport) => typeof viewport.screenshot_label === "string" && viewport.screenshot_label.trim()).length;
|
|
7435
7437
|
return toJsonValue({
|
|
7436
7438
|
viewport_count: viewports.length,
|
|
7437
7439
|
action_count: actionCount ?? null,
|
|
7440
|
+
final_screenshot_count: finalScreenshotCount,
|
|
7441
|
+
final_screenshot_full_page: normalizedFinalScreenshotFullPage ?? null,
|
|
7442
|
+
final_screenshot_mode: normalizedFinalScreenshotFullPage === void 0 ? null : normalizedFinalScreenshotFullPage ? "full_page" : "viewport",
|
|
7438
7443
|
viewports: viewports.map((viewport) => {
|
|
7439
7444
|
const expectedActionCount = expectedActionCountByViewport?.get(viewport.name) ?? actionCount;
|
|
7445
|
+
const viewportFinalScreenshotFullPage = typeof viewport.screenshot_full_page === "boolean" ? viewport.screenshot_full_page : normalizedFinalScreenshotFullPage;
|
|
7440
7446
|
const results = viewport.setup_action_results || [];
|
|
7441
7447
|
const failed = results.filter((result) => result.ok === false && result.optional !== true);
|
|
7442
7448
|
const optionalFailed = results.filter((result) => result.ok === false && result.optional === true);
|
|
@@ -7476,6 +7482,8 @@ function profileSetupSummary(viewports, actionCount, expectedActionCountByViewpo
|
|
|
7476
7482
|
action_counts: profileSetupActionCounts(results),
|
|
7477
7483
|
frame_action_count: results.filter((result) => result.frame_selector).length,
|
|
7478
7484
|
frame_urls: profileSetupFrameUrls(viewport),
|
|
7485
|
+
final_screenshot: viewport.screenshot_label ?? null,
|
|
7486
|
+
final_screenshot_full_page: viewportFinalScreenshotFullPage ?? null,
|
|
7479
7487
|
setup_screenshots: profileSetupScreenshotLabels(results),
|
|
7480
7488
|
clicked_total: clickedItems.length,
|
|
7481
7489
|
clicked_truncated: clickedItems.length > clicked.length,
|
|
@@ -7812,6 +7820,42 @@ function normalizeSetupActions(value) {
|
|
|
7812
7820
|
if (!Array.isArray(value)) throw new Error("target.setup_actions must be an array.");
|
|
7813
7821
|
return value.map(normalizeSetupAction);
|
|
7814
7822
|
}
|
|
7823
|
+
function normalizeTargetScreenshotFullPage(input) {
|
|
7824
|
+
const directFullPage = booleanValue(valueFromOwn(
|
|
7825
|
+
input,
|
|
7826
|
+
"screenshot_full_page",
|
|
7827
|
+
"screenshotFullPage",
|
|
7828
|
+
"final_screenshot_full_page",
|
|
7829
|
+
"finalScreenshotFullPage",
|
|
7830
|
+
"full_page_screenshots",
|
|
7831
|
+
"fullPageScreenshots"
|
|
7832
|
+
));
|
|
7833
|
+
const viewportOnly = booleanValue(valueFromOwn(
|
|
7834
|
+
input,
|
|
7835
|
+
"viewport_screenshots",
|
|
7836
|
+
"viewportScreenshots",
|
|
7837
|
+
"viewport_only_screenshots",
|
|
7838
|
+
"viewportOnlyScreenshots"
|
|
7839
|
+
));
|
|
7840
|
+
const modeInput = stringFromOwn(input, "screenshot_mode", "screenshotMode", "final_screenshot_mode", "finalScreenshotMode");
|
|
7841
|
+
let modeFullPage;
|
|
7842
|
+
if (modeInput) {
|
|
7843
|
+
const mode = modeInput.trim().toLowerCase().replace(/[-\s]+/g, "_");
|
|
7844
|
+
if (mode === "full_page" || mode === "fullpage" || mode === "page" || mode === "document") {
|
|
7845
|
+
modeFullPage = true;
|
|
7846
|
+
} else if (mode === "viewport" || mode === "view") {
|
|
7847
|
+
modeFullPage = false;
|
|
7848
|
+
} else {
|
|
7849
|
+
throw new Error(`target.screenshot_mode ${modeInput} is not supported. Supported modes: full_page, viewport.`);
|
|
7850
|
+
}
|
|
7851
|
+
}
|
|
7852
|
+
const values = [directFullPage, viewportOnly === void 0 ? void 0 : !viewportOnly, modeFullPage].filter((value) => value !== void 0);
|
|
7853
|
+
if (!values.length) return void 0;
|
|
7854
|
+
if (values.some((value) => value !== values[0])) {
|
|
7855
|
+
throw new Error("target has conflicting screenshot full_page / viewport mode options.");
|
|
7856
|
+
}
|
|
7857
|
+
return values[0];
|
|
7858
|
+
}
|
|
7815
7859
|
function normalizeNetworkMock(input, index) {
|
|
7816
7860
|
if (!isRecord(input)) throw new Error(`target.network_mocks[${index}] must be an object.`);
|
|
7817
7861
|
const url = stringValue2(input.url) || stringValue2(input.glob) || stringValue2(input.pattern);
|
|
@@ -8380,6 +8424,7 @@ function normalizeRiddleProofProfile(input, options = {}) {
|
|
|
8380
8424
|
timeout_sec: timeoutSecValue(targetInput.timeout_sec) ?? timeoutSecValue(targetInput.timeoutSec) ?? timeoutSecValue(targetInput.riddle_timeout_sec) ?? timeoutSecValue(targetInput.riddleTimeoutSec),
|
|
8381
8425
|
wait_for_selector: stringValue2(targetInput.wait_for_selector) || stringValue2(targetInput.waitForSelector),
|
|
8382
8426
|
wait_ms: numberValue(targetInput.wait_ms) ?? numberValue(targetInput.waitMs),
|
|
8427
|
+
screenshot_full_page: normalizeTargetScreenshotFullPage(targetInput),
|
|
8383
8428
|
setup_actions: normalizeSetupActions(targetInput.setup_actions ?? targetInput.setupActions),
|
|
8384
8429
|
network_mocks: normalizeNetworkMocks(targetInput.network_mocks ?? targetInput.networkMocks)
|
|
8385
8430
|
},
|
|
@@ -9683,7 +9728,7 @@ function assessSetupActionsFromEvidence(profile, evidence) {
|
|
|
9683
9728
|
ok: (viewport.setup_action_results || []).length >= (expectedActionCountByViewport.get(viewport.name) ?? actionCount) && (viewport.setup_action_results || []).every((result) => result.ok !== false || result.optional === true),
|
|
9684
9729
|
result_count: (viewport.setup_action_results || []).length
|
|
9685
9730
|
})),
|
|
9686
|
-
setup_summary: profileSetupSummary(viewports, actionCount, expectedActionCountByViewport),
|
|
9731
|
+
setup_summary: profileSetupSummary(viewports, actionCount, expectedActionCountByViewport, profile.target.screenshot_full_page),
|
|
9687
9732
|
failed
|
|
9688
9733
|
},
|
|
9689
9734
|
message: failed.length ? `Setup actions failed in ${failed.length} viewport action(s).` : void 0
|
|
@@ -10687,14 +10732,28 @@ function profileScreenshotLabels(viewports) {
|
|
|
10687
10732
|
}
|
|
10688
10733
|
return labels;
|
|
10689
10734
|
}
|
|
10690
|
-
function profileSetupSummary(viewports, actionCount, expectedActionCountsByViewport) {
|
|
10735
|
+
function profileSetupSummary(viewports, actionCount, expectedActionCountsByViewport, finalScreenshotFullPage) {
|
|
10736
|
+
const normalizedFinalScreenshotFullPage = finalScreenshotFullPage === undefined
|
|
10737
|
+
? undefined
|
|
10738
|
+
: finalScreenshotFullPage !== false;
|
|
10739
|
+
const finalScreenshotCount = (viewports || []).filter((viewport) => viewport && typeof viewport.screenshot_label === "string" && viewport.screenshot_label.trim()).length;
|
|
10691
10740
|
return {
|
|
10692
10741
|
viewport_count: (viewports || []).length,
|
|
10693
10742
|
action_count: actionCount ?? null,
|
|
10743
|
+
final_screenshot_count: finalScreenshotCount,
|
|
10744
|
+
final_screenshot_full_page: normalizedFinalScreenshotFullPage ?? null,
|
|
10745
|
+
final_screenshot_mode: normalizedFinalScreenshotFullPage === undefined
|
|
10746
|
+
? null
|
|
10747
|
+
: normalizedFinalScreenshotFullPage
|
|
10748
|
+
? "full_page"
|
|
10749
|
+
: "viewport",
|
|
10694
10750
|
viewports: (viewports || []).map((viewport) => {
|
|
10695
10751
|
const expectedActionCount = expectedActionCountsByViewport && expectedActionCountsByViewport[viewport.name] !== undefined
|
|
10696
10752
|
? expectedActionCountsByViewport[viewport.name]
|
|
10697
10753
|
: actionCount;
|
|
10754
|
+
const viewportFinalScreenshotFullPage = typeof viewport.screenshot_full_page === "boolean"
|
|
10755
|
+
? viewport.screenshot_full_page
|
|
10756
|
+
: normalizedFinalScreenshotFullPage;
|
|
10698
10757
|
const results = viewport.setup_action_results || [];
|
|
10699
10758
|
const failed = results.filter((result) => result && result.ok === false && result.optional !== true);
|
|
10700
10759
|
const optionalFailed = results.filter((result) => result && result.ok === false && result.optional === true);
|
|
@@ -10748,6 +10807,8 @@ function profileSetupSummary(viewports, actionCount, expectedActionCountsByViewp
|
|
|
10748
10807
|
action_counts: profileSetupActionCounts(results),
|
|
10749
10808
|
frame_action_count: results.filter((result) => result && result.frame_selector).length,
|
|
10750
10809
|
frame_urls: profileSetupFrameUrls(viewport),
|
|
10810
|
+
final_screenshot: viewport.screenshot_label || null,
|
|
10811
|
+
final_screenshot_full_page: viewportFinalScreenshotFullPage ?? null,
|
|
10751
10812
|
setup_screenshots: profileSetupScreenshotLabels(results),
|
|
10752
10813
|
clicked_total: clickedItems.length,
|
|
10753
10814
|
clicked_truncated: clickedItems.length > clicked.length,
|
|
@@ -10932,7 +10993,7 @@ function assessProfile(profile, evidence) {
|
|
|
10932
10993
|
&& (viewport.setup_action_results || []).every((result) => !result || result.ok !== false || result.optional === true),
|
|
10933
10994
|
result_count: (viewport.setup_action_results || []).length,
|
|
10934
10995
|
})),
|
|
10935
|
-
setup_summary: profileSetupSummary(viewports, actionCount, expectedActionCountsByViewport),
|
|
10996
|
+
setup_summary: profileSetupSummary(viewports, actionCount, expectedActionCountsByViewport, profile.target && profile.target.screenshot_full_page),
|
|
10936
10997
|
failed,
|
|
10937
10998
|
},
|
|
10938
10999
|
message: failed.length ? "Setup actions failed in " + failed.length + " viewport action(s)." : undefined,
|
|
@@ -13810,8 +13871,14 @@ async function captureViewport(viewport) {
|
|
|
13810
13871
|
}
|
|
13811
13872
|
}
|
|
13812
13873
|
const screenshotLabel = profileSlug + "-" + viewport.name;
|
|
13874
|
+
let screenshotFullPage = null;
|
|
13813
13875
|
try {
|
|
13814
|
-
|
|
13876
|
+
const screenshotOptions = {};
|
|
13877
|
+
if (profile.target && profile.target.screenshot_full_page !== undefined) {
|
|
13878
|
+
screenshotFullPage = profile.target.screenshot_full_page !== false;
|
|
13879
|
+
screenshotOptions.fullPage = screenshotFullPage;
|
|
13880
|
+
}
|
|
13881
|
+
if (typeof saveScreenshot === "function") await saveScreenshot(screenshotLabel, screenshotOptions);
|
|
13815
13882
|
} catch (error) {
|
|
13816
13883
|
pageErrors.push({ message: "saveScreenshot failed: " + String(error && error.message ? error.message : error).slice(0, 500) });
|
|
13817
13884
|
}
|
|
@@ -13878,6 +13945,7 @@ async function captureViewport(viewport) {
|
|
|
13878
13945
|
route_inventory: routeInventory,
|
|
13879
13946
|
setup_action_results: setupActionResults,
|
|
13880
13947
|
screenshot_label: screenshotLabel,
|
|
13948
|
+
screenshot_full_page: screenshotFullPage,
|
|
13881
13949
|
navigation_error: navigationError,
|
|
13882
13950
|
wait_error: waitError,
|
|
13883
13951
|
};
|
|
@@ -14634,6 +14702,8 @@ function profileSetupSummaryMarkdown(result) {
|
|
|
14634
14702
|
if (!viewports.length) return [];
|
|
14635
14703
|
const declaredActions = cliFiniteNumber(setupSummary.action_count);
|
|
14636
14704
|
const totalResults = viewports.reduce((sum, viewport) => sum + (cliFiniteNumber(viewport.result_count) || 0), 0);
|
|
14705
|
+
const finalScreenshotCount = cliFiniteNumber(setupSummary.final_screenshot_count) ?? viewports.reduce((sum, viewport) => sum + (cliString(viewport.final_screenshot) || cliString(viewport.screenshot_label) ? 1 : 0), 0);
|
|
14706
|
+
const finalScreenshotMode = cliString(setupSummary.final_screenshot_mode);
|
|
14637
14707
|
const setupScreenshots = viewports.reduce((sum, viewport) => {
|
|
14638
14708
|
const labels = Array.isArray(viewport.setup_screenshots) ? viewport.setup_screenshots : [];
|
|
14639
14709
|
return sum + labels.filter((label) => typeof label === "string" && label.trim()).length;
|
|
@@ -14649,6 +14719,7 @@ function profileSetupSummaryMarkdown(result) {
|
|
|
14649
14719
|
const failedTotal = viewports.reduce((sum, viewport) => sum + (Array.isArray(viewport.failed) ? viewport.failed.length : 0), 0);
|
|
14650
14720
|
const lines = [
|
|
14651
14721
|
`- setup actions: ${declaredActions === void 0 ? "unknown" : declaredActions} declared, ${totalResults} recorded result(s) across ${viewports.length} viewport(s)`,
|
|
14722
|
+
...finalScreenshotMode ? [`- final screenshots: ${finalScreenshotCount}, mode ${finalScreenshotMode}`] : [],
|
|
14652
14723
|
`- setup screenshots: ${setupScreenshots}`,
|
|
14653
14724
|
`- clicked targets: ${clickedTotal}${failedTotal ? `; failed setup actions: ${failedTotal}` : ""}`
|
|
14654
14725
|
];
|
package/dist/cli.js
CHANGED
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
profileStatusExitCode,
|
|
13
13
|
resolveRiddleProofProfileTargetUrl,
|
|
14
14
|
resolveRiddleProofProfileTimeoutSec
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-6VXZ6V5M.js";
|
|
16
16
|
import {
|
|
17
17
|
createRiddleApiClient,
|
|
18
18
|
parseRiddleViewport
|
|
@@ -589,6 +589,8 @@ function profileSetupSummaryMarkdown(result) {
|
|
|
589
589
|
if (!viewports.length) return [];
|
|
590
590
|
const declaredActions = cliFiniteNumber(setupSummary.action_count);
|
|
591
591
|
const totalResults = viewports.reduce((sum, viewport) => sum + (cliFiniteNumber(viewport.result_count) || 0), 0);
|
|
592
|
+
const finalScreenshotCount = cliFiniteNumber(setupSummary.final_screenshot_count) ?? viewports.reduce((sum, viewport) => sum + (cliString(viewport.final_screenshot) || cliString(viewport.screenshot_label) ? 1 : 0), 0);
|
|
593
|
+
const finalScreenshotMode = cliString(setupSummary.final_screenshot_mode);
|
|
592
594
|
const setupScreenshots = viewports.reduce((sum, viewport) => {
|
|
593
595
|
const labels = Array.isArray(viewport.setup_screenshots) ? viewport.setup_screenshots : [];
|
|
594
596
|
return sum + labels.filter((label) => typeof label === "string" && label.trim()).length;
|
|
@@ -604,6 +606,7 @@ function profileSetupSummaryMarkdown(result) {
|
|
|
604
606
|
const failedTotal = viewports.reduce((sum, viewport) => sum + (Array.isArray(viewport.failed) ? viewport.failed.length : 0), 0);
|
|
605
607
|
const lines = [
|
|
606
608
|
`- setup actions: ${declaredActions === void 0 ? "unknown" : declaredActions} declared, ${totalResults} recorded result(s) across ${viewports.length} viewport(s)`,
|
|
609
|
+
...finalScreenshotMode ? [`- final screenshots: ${finalScreenshotCount}, mode ${finalScreenshotMode}`] : [],
|
|
607
610
|
`- setup screenshots: ${setupScreenshots}`,
|
|
608
611
|
`- clicked targets: ${clickedTotal}${failedTotal ? `; failed setup actions: ${failedTotal}` : ""}`
|
|
609
612
|
];
|
package/dist/index.cjs
CHANGED
|
@@ -9227,12 +9227,18 @@ function profileScreenshotLabels(viewports) {
|
|
|
9227
9227
|
}
|
|
9228
9228
|
return labels;
|
|
9229
9229
|
}
|
|
9230
|
-
function profileSetupSummary(viewports, actionCount, expectedActionCountByViewport) {
|
|
9230
|
+
function profileSetupSummary(viewports, actionCount, expectedActionCountByViewport, finalScreenshotFullPage) {
|
|
9231
|
+
const normalizedFinalScreenshotFullPage = finalScreenshotFullPage === void 0 ? void 0 : finalScreenshotFullPage !== false;
|
|
9232
|
+
const finalScreenshotCount = viewports.filter((viewport) => typeof viewport.screenshot_label === "string" && viewport.screenshot_label.trim()).length;
|
|
9231
9233
|
return toJsonValue({
|
|
9232
9234
|
viewport_count: viewports.length,
|
|
9233
9235
|
action_count: actionCount ?? null,
|
|
9236
|
+
final_screenshot_count: finalScreenshotCount,
|
|
9237
|
+
final_screenshot_full_page: normalizedFinalScreenshotFullPage ?? null,
|
|
9238
|
+
final_screenshot_mode: normalizedFinalScreenshotFullPage === void 0 ? null : normalizedFinalScreenshotFullPage ? "full_page" : "viewport",
|
|
9234
9239
|
viewports: viewports.map((viewport) => {
|
|
9235
9240
|
const expectedActionCount = expectedActionCountByViewport?.get(viewport.name) ?? actionCount;
|
|
9241
|
+
const viewportFinalScreenshotFullPage = typeof viewport.screenshot_full_page === "boolean" ? viewport.screenshot_full_page : normalizedFinalScreenshotFullPage;
|
|
9236
9242
|
const results = viewport.setup_action_results || [];
|
|
9237
9243
|
const failed = results.filter((result) => result.ok === false && result.optional !== true);
|
|
9238
9244
|
const optionalFailed = results.filter((result) => result.ok === false && result.optional === true);
|
|
@@ -9272,6 +9278,8 @@ function profileSetupSummary(viewports, actionCount, expectedActionCountByViewpo
|
|
|
9272
9278
|
action_counts: profileSetupActionCounts(results),
|
|
9273
9279
|
frame_action_count: results.filter((result) => result.frame_selector).length,
|
|
9274
9280
|
frame_urls: profileSetupFrameUrls(viewport),
|
|
9281
|
+
final_screenshot: viewport.screenshot_label ?? null,
|
|
9282
|
+
final_screenshot_full_page: viewportFinalScreenshotFullPage ?? null,
|
|
9275
9283
|
setup_screenshots: profileSetupScreenshotLabels(results),
|
|
9276
9284
|
clicked_total: clickedItems.length,
|
|
9277
9285
|
clicked_truncated: clickedItems.length > clicked.length,
|
|
@@ -9608,6 +9616,42 @@ function normalizeSetupActions(value) {
|
|
|
9608
9616
|
if (!Array.isArray(value)) throw new Error("target.setup_actions must be an array.");
|
|
9609
9617
|
return value.map(normalizeSetupAction);
|
|
9610
9618
|
}
|
|
9619
|
+
function normalizeTargetScreenshotFullPage(input) {
|
|
9620
|
+
const directFullPage = booleanValue(valueFromOwn(
|
|
9621
|
+
input,
|
|
9622
|
+
"screenshot_full_page",
|
|
9623
|
+
"screenshotFullPage",
|
|
9624
|
+
"final_screenshot_full_page",
|
|
9625
|
+
"finalScreenshotFullPage",
|
|
9626
|
+
"full_page_screenshots",
|
|
9627
|
+
"fullPageScreenshots"
|
|
9628
|
+
));
|
|
9629
|
+
const viewportOnly = booleanValue(valueFromOwn(
|
|
9630
|
+
input,
|
|
9631
|
+
"viewport_screenshots",
|
|
9632
|
+
"viewportScreenshots",
|
|
9633
|
+
"viewport_only_screenshots",
|
|
9634
|
+
"viewportOnlyScreenshots"
|
|
9635
|
+
));
|
|
9636
|
+
const modeInput = stringFromOwn(input, "screenshot_mode", "screenshotMode", "final_screenshot_mode", "finalScreenshotMode");
|
|
9637
|
+
let modeFullPage;
|
|
9638
|
+
if (modeInput) {
|
|
9639
|
+
const mode = modeInput.trim().toLowerCase().replace(/[-\s]+/g, "_");
|
|
9640
|
+
if (mode === "full_page" || mode === "fullpage" || mode === "page" || mode === "document") {
|
|
9641
|
+
modeFullPage = true;
|
|
9642
|
+
} else if (mode === "viewport" || mode === "view") {
|
|
9643
|
+
modeFullPage = false;
|
|
9644
|
+
} else {
|
|
9645
|
+
throw new Error(`target.screenshot_mode ${modeInput} is not supported. Supported modes: full_page, viewport.`);
|
|
9646
|
+
}
|
|
9647
|
+
}
|
|
9648
|
+
const values = [directFullPage, viewportOnly === void 0 ? void 0 : !viewportOnly, modeFullPage].filter((value) => value !== void 0);
|
|
9649
|
+
if (!values.length) return void 0;
|
|
9650
|
+
if (values.some((value) => value !== values[0])) {
|
|
9651
|
+
throw new Error("target has conflicting screenshot full_page / viewport mode options.");
|
|
9652
|
+
}
|
|
9653
|
+
return values[0];
|
|
9654
|
+
}
|
|
9611
9655
|
function normalizeNetworkMock(input, index) {
|
|
9612
9656
|
if (!isRecord2(input)) throw new Error(`target.network_mocks[${index}] must be an object.`);
|
|
9613
9657
|
const url = stringValue5(input.url) || stringValue5(input.glob) || stringValue5(input.pattern);
|
|
@@ -10176,6 +10220,7 @@ function normalizeRiddleProofProfile(input, options = {}) {
|
|
|
10176
10220
|
timeout_sec: timeoutSecValue(targetInput.timeout_sec) ?? timeoutSecValue(targetInput.timeoutSec) ?? timeoutSecValue(targetInput.riddle_timeout_sec) ?? timeoutSecValue(targetInput.riddleTimeoutSec),
|
|
10177
10221
|
wait_for_selector: stringValue5(targetInput.wait_for_selector) || stringValue5(targetInput.waitForSelector),
|
|
10178
10222
|
wait_ms: numberValue3(targetInput.wait_ms) ?? numberValue3(targetInput.waitMs),
|
|
10223
|
+
screenshot_full_page: normalizeTargetScreenshotFullPage(targetInput),
|
|
10179
10224
|
setup_actions: normalizeSetupActions(targetInput.setup_actions ?? targetInput.setupActions),
|
|
10180
10225
|
network_mocks: normalizeNetworkMocks(targetInput.network_mocks ?? targetInput.networkMocks)
|
|
10181
10226
|
},
|
|
@@ -11479,7 +11524,7 @@ function assessSetupActionsFromEvidence(profile, evidence) {
|
|
|
11479
11524
|
ok: (viewport.setup_action_results || []).length >= (expectedActionCountByViewport.get(viewport.name) ?? actionCount) && (viewport.setup_action_results || []).every((result) => result.ok !== false || result.optional === true),
|
|
11480
11525
|
result_count: (viewport.setup_action_results || []).length
|
|
11481
11526
|
})),
|
|
11482
|
-
setup_summary: profileSetupSummary(viewports, actionCount, expectedActionCountByViewport),
|
|
11527
|
+
setup_summary: profileSetupSummary(viewports, actionCount, expectedActionCountByViewport, profile.target.screenshot_full_page),
|
|
11483
11528
|
failed
|
|
11484
11529
|
},
|
|
11485
11530
|
message: failed.length ? `Setup actions failed in ${failed.length} viewport action(s).` : void 0
|
|
@@ -12499,14 +12544,28 @@ function profileScreenshotLabels(viewports) {
|
|
|
12499
12544
|
}
|
|
12500
12545
|
return labels;
|
|
12501
12546
|
}
|
|
12502
|
-
function profileSetupSummary(viewports, actionCount, expectedActionCountsByViewport) {
|
|
12547
|
+
function profileSetupSummary(viewports, actionCount, expectedActionCountsByViewport, finalScreenshotFullPage) {
|
|
12548
|
+
const normalizedFinalScreenshotFullPage = finalScreenshotFullPage === undefined
|
|
12549
|
+
? undefined
|
|
12550
|
+
: finalScreenshotFullPage !== false;
|
|
12551
|
+
const finalScreenshotCount = (viewports || []).filter((viewport) => viewport && typeof viewport.screenshot_label === "string" && viewport.screenshot_label.trim()).length;
|
|
12503
12552
|
return {
|
|
12504
12553
|
viewport_count: (viewports || []).length,
|
|
12505
12554
|
action_count: actionCount ?? null,
|
|
12555
|
+
final_screenshot_count: finalScreenshotCount,
|
|
12556
|
+
final_screenshot_full_page: normalizedFinalScreenshotFullPage ?? null,
|
|
12557
|
+
final_screenshot_mode: normalizedFinalScreenshotFullPage === undefined
|
|
12558
|
+
? null
|
|
12559
|
+
: normalizedFinalScreenshotFullPage
|
|
12560
|
+
? "full_page"
|
|
12561
|
+
: "viewport",
|
|
12506
12562
|
viewports: (viewports || []).map((viewport) => {
|
|
12507
12563
|
const expectedActionCount = expectedActionCountsByViewport && expectedActionCountsByViewport[viewport.name] !== undefined
|
|
12508
12564
|
? expectedActionCountsByViewport[viewport.name]
|
|
12509
12565
|
: actionCount;
|
|
12566
|
+
const viewportFinalScreenshotFullPage = typeof viewport.screenshot_full_page === "boolean"
|
|
12567
|
+
? viewport.screenshot_full_page
|
|
12568
|
+
: normalizedFinalScreenshotFullPage;
|
|
12510
12569
|
const results = viewport.setup_action_results || [];
|
|
12511
12570
|
const failed = results.filter((result) => result && result.ok === false && result.optional !== true);
|
|
12512
12571
|
const optionalFailed = results.filter((result) => result && result.ok === false && result.optional === true);
|
|
@@ -12560,6 +12619,8 @@ function profileSetupSummary(viewports, actionCount, expectedActionCountsByViewp
|
|
|
12560
12619
|
action_counts: profileSetupActionCounts(results),
|
|
12561
12620
|
frame_action_count: results.filter((result) => result && result.frame_selector).length,
|
|
12562
12621
|
frame_urls: profileSetupFrameUrls(viewport),
|
|
12622
|
+
final_screenshot: viewport.screenshot_label || null,
|
|
12623
|
+
final_screenshot_full_page: viewportFinalScreenshotFullPage ?? null,
|
|
12563
12624
|
setup_screenshots: profileSetupScreenshotLabels(results),
|
|
12564
12625
|
clicked_total: clickedItems.length,
|
|
12565
12626
|
clicked_truncated: clickedItems.length > clicked.length,
|
|
@@ -12744,7 +12805,7 @@ function assessProfile(profile, evidence) {
|
|
|
12744
12805
|
&& (viewport.setup_action_results || []).every((result) => !result || result.ok !== false || result.optional === true),
|
|
12745
12806
|
result_count: (viewport.setup_action_results || []).length,
|
|
12746
12807
|
})),
|
|
12747
|
-
setup_summary: profileSetupSummary(viewports, actionCount, expectedActionCountsByViewport),
|
|
12808
|
+
setup_summary: profileSetupSummary(viewports, actionCount, expectedActionCountsByViewport, profile.target && profile.target.screenshot_full_page),
|
|
12748
12809
|
failed,
|
|
12749
12810
|
},
|
|
12750
12811
|
message: failed.length ? "Setup actions failed in " + failed.length + " viewport action(s)." : undefined,
|
|
@@ -15622,8 +15683,14 @@ async function captureViewport(viewport) {
|
|
|
15622
15683
|
}
|
|
15623
15684
|
}
|
|
15624
15685
|
const screenshotLabel = profileSlug + "-" + viewport.name;
|
|
15686
|
+
let screenshotFullPage = null;
|
|
15625
15687
|
try {
|
|
15626
|
-
|
|
15688
|
+
const screenshotOptions = {};
|
|
15689
|
+
if (profile.target && profile.target.screenshot_full_page !== undefined) {
|
|
15690
|
+
screenshotFullPage = profile.target.screenshot_full_page !== false;
|
|
15691
|
+
screenshotOptions.fullPage = screenshotFullPage;
|
|
15692
|
+
}
|
|
15693
|
+
if (typeof saveScreenshot === "function") await saveScreenshot(screenshotLabel, screenshotOptions);
|
|
15627
15694
|
} catch (error) {
|
|
15628
15695
|
pageErrors.push({ message: "saveScreenshot failed: " + String(error && error.message ? error.message : error).slice(0, 500) });
|
|
15629
15696
|
}
|
|
@@ -15690,6 +15757,7 @@ async function captureViewport(viewport) {
|
|
|
15690
15757
|
route_inventory: routeInventory,
|
|
15691
15758
|
setup_action_results: setupActionResults,
|
|
15692
15759
|
screenshot_label: screenshotLabel,
|
|
15760
|
+
screenshot_full_page: screenshotFullPage,
|
|
15693
15761
|
navigation_error: navigationError,
|
|
15694
15762
|
wait_error: waitError,
|
|
15695
15763
|
};
|
package/dist/index.js
CHANGED
|
@@ -62,7 +62,7 @@ import {
|
|
|
62
62
|
resolveRiddleProofProfileTimeoutSec,
|
|
63
63
|
slugifyRiddleProofProfileName,
|
|
64
64
|
summarizeRiddleProofProfileResult
|
|
65
|
-
} from "./chunk-
|
|
65
|
+
} from "./chunk-6VXZ6V5M.js";
|
|
66
66
|
import {
|
|
67
67
|
DEFAULT_RIDDLE_API_BASE_URL,
|
|
68
68
|
DEFAULT_RIDDLE_API_KEY_FILE,
|
package/dist/profile.cjs
CHANGED
|
@@ -541,12 +541,18 @@ function profileScreenshotLabels(viewports) {
|
|
|
541
541
|
}
|
|
542
542
|
return labels;
|
|
543
543
|
}
|
|
544
|
-
function profileSetupSummary(viewports, actionCount, expectedActionCountByViewport) {
|
|
544
|
+
function profileSetupSummary(viewports, actionCount, expectedActionCountByViewport, finalScreenshotFullPage) {
|
|
545
|
+
const normalizedFinalScreenshotFullPage = finalScreenshotFullPage === void 0 ? void 0 : finalScreenshotFullPage !== false;
|
|
546
|
+
const finalScreenshotCount = viewports.filter((viewport) => typeof viewport.screenshot_label === "string" && viewport.screenshot_label.trim()).length;
|
|
545
547
|
return toJsonValue({
|
|
546
548
|
viewport_count: viewports.length,
|
|
547
549
|
action_count: actionCount ?? null,
|
|
550
|
+
final_screenshot_count: finalScreenshotCount,
|
|
551
|
+
final_screenshot_full_page: normalizedFinalScreenshotFullPage ?? null,
|
|
552
|
+
final_screenshot_mode: normalizedFinalScreenshotFullPage === void 0 ? null : normalizedFinalScreenshotFullPage ? "full_page" : "viewport",
|
|
548
553
|
viewports: viewports.map((viewport) => {
|
|
549
554
|
const expectedActionCount = expectedActionCountByViewport?.get(viewport.name) ?? actionCount;
|
|
555
|
+
const viewportFinalScreenshotFullPage = typeof viewport.screenshot_full_page === "boolean" ? viewport.screenshot_full_page : normalizedFinalScreenshotFullPage;
|
|
550
556
|
const results = viewport.setup_action_results || [];
|
|
551
557
|
const failed = results.filter((result) => result.ok === false && result.optional !== true);
|
|
552
558
|
const optionalFailed = results.filter((result) => result.ok === false && result.optional === true);
|
|
@@ -586,6 +592,8 @@ function profileSetupSummary(viewports, actionCount, expectedActionCountByViewpo
|
|
|
586
592
|
action_counts: profileSetupActionCounts(results),
|
|
587
593
|
frame_action_count: results.filter((result) => result.frame_selector).length,
|
|
588
594
|
frame_urls: profileSetupFrameUrls(viewport),
|
|
595
|
+
final_screenshot: viewport.screenshot_label ?? null,
|
|
596
|
+
final_screenshot_full_page: viewportFinalScreenshotFullPage ?? null,
|
|
589
597
|
setup_screenshots: profileSetupScreenshotLabels(results),
|
|
590
598
|
clicked_total: clickedItems.length,
|
|
591
599
|
clicked_truncated: clickedItems.length > clicked.length,
|
|
@@ -922,6 +930,42 @@ function normalizeSetupActions(value) {
|
|
|
922
930
|
if (!Array.isArray(value)) throw new Error("target.setup_actions must be an array.");
|
|
923
931
|
return value.map(normalizeSetupAction);
|
|
924
932
|
}
|
|
933
|
+
function normalizeTargetScreenshotFullPage(input) {
|
|
934
|
+
const directFullPage = booleanValue(valueFromOwn(
|
|
935
|
+
input,
|
|
936
|
+
"screenshot_full_page",
|
|
937
|
+
"screenshotFullPage",
|
|
938
|
+
"final_screenshot_full_page",
|
|
939
|
+
"finalScreenshotFullPage",
|
|
940
|
+
"full_page_screenshots",
|
|
941
|
+
"fullPageScreenshots"
|
|
942
|
+
));
|
|
943
|
+
const viewportOnly = booleanValue(valueFromOwn(
|
|
944
|
+
input,
|
|
945
|
+
"viewport_screenshots",
|
|
946
|
+
"viewportScreenshots",
|
|
947
|
+
"viewport_only_screenshots",
|
|
948
|
+
"viewportOnlyScreenshots"
|
|
949
|
+
));
|
|
950
|
+
const modeInput = stringFromOwn(input, "screenshot_mode", "screenshotMode", "final_screenshot_mode", "finalScreenshotMode");
|
|
951
|
+
let modeFullPage;
|
|
952
|
+
if (modeInput) {
|
|
953
|
+
const mode = modeInput.trim().toLowerCase().replace(/[-\s]+/g, "_");
|
|
954
|
+
if (mode === "full_page" || mode === "fullpage" || mode === "page" || mode === "document") {
|
|
955
|
+
modeFullPage = true;
|
|
956
|
+
} else if (mode === "viewport" || mode === "view") {
|
|
957
|
+
modeFullPage = false;
|
|
958
|
+
} else {
|
|
959
|
+
throw new Error(`target.screenshot_mode ${modeInput} is not supported. Supported modes: full_page, viewport.`);
|
|
960
|
+
}
|
|
961
|
+
}
|
|
962
|
+
const values = [directFullPage, viewportOnly === void 0 ? void 0 : !viewportOnly, modeFullPage].filter((value) => value !== void 0);
|
|
963
|
+
if (!values.length) return void 0;
|
|
964
|
+
if (values.some((value) => value !== values[0])) {
|
|
965
|
+
throw new Error("target has conflicting screenshot full_page / viewport mode options.");
|
|
966
|
+
}
|
|
967
|
+
return values[0];
|
|
968
|
+
}
|
|
925
969
|
function normalizeNetworkMock(input, index) {
|
|
926
970
|
if (!isRecord(input)) throw new Error(`target.network_mocks[${index}] must be an object.`);
|
|
927
971
|
const url = stringValue(input.url) || stringValue(input.glob) || stringValue(input.pattern);
|
|
@@ -1490,6 +1534,7 @@ function normalizeRiddleProofProfile(input, options = {}) {
|
|
|
1490
1534
|
timeout_sec: timeoutSecValue(targetInput.timeout_sec) ?? timeoutSecValue(targetInput.timeoutSec) ?? timeoutSecValue(targetInput.riddle_timeout_sec) ?? timeoutSecValue(targetInput.riddleTimeoutSec),
|
|
1491
1535
|
wait_for_selector: stringValue(targetInput.wait_for_selector) || stringValue(targetInput.waitForSelector),
|
|
1492
1536
|
wait_ms: numberValue(targetInput.wait_ms) ?? numberValue(targetInput.waitMs),
|
|
1537
|
+
screenshot_full_page: normalizeTargetScreenshotFullPage(targetInput),
|
|
1493
1538
|
setup_actions: normalizeSetupActions(targetInput.setup_actions ?? targetInput.setupActions),
|
|
1494
1539
|
network_mocks: normalizeNetworkMocks(targetInput.network_mocks ?? targetInput.networkMocks)
|
|
1495
1540
|
},
|
|
@@ -2793,7 +2838,7 @@ function assessSetupActionsFromEvidence(profile, evidence) {
|
|
|
2793
2838
|
ok: (viewport.setup_action_results || []).length >= (expectedActionCountByViewport.get(viewport.name) ?? actionCount) && (viewport.setup_action_results || []).every((result) => result.ok !== false || result.optional === true),
|
|
2794
2839
|
result_count: (viewport.setup_action_results || []).length
|
|
2795
2840
|
})),
|
|
2796
|
-
setup_summary: profileSetupSummary(viewports, actionCount, expectedActionCountByViewport),
|
|
2841
|
+
setup_summary: profileSetupSummary(viewports, actionCount, expectedActionCountByViewport, profile.target.screenshot_full_page),
|
|
2797
2842
|
failed
|
|
2798
2843
|
},
|
|
2799
2844
|
message: failed.length ? `Setup actions failed in ${failed.length} viewport action(s).` : void 0
|
|
@@ -3813,14 +3858,28 @@ function profileScreenshotLabels(viewports) {
|
|
|
3813
3858
|
}
|
|
3814
3859
|
return labels;
|
|
3815
3860
|
}
|
|
3816
|
-
function profileSetupSummary(viewports, actionCount, expectedActionCountsByViewport) {
|
|
3861
|
+
function profileSetupSummary(viewports, actionCount, expectedActionCountsByViewport, finalScreenshotFullPage) {
|
|
3862
|
+
const normalizedFinalScreenshotFullPage = finalScreenshotFullPage === undefined
|
|
3863
|
+
? undefined
|
|
3864
|
+
: finalScreenshotFullPage !== false;
|
|
3865
|
+
const finalScreenshotCount = (viewports || []).filter((viewport) => viewport && typeof viewport.screenshot_label === "string" && viewport.screenshot_label.trim()).length;
|
|
3817
3866
|
return {
|
|
3818
3867
|
viewport_count: (viewports || []).length,
|
|
3819
3868
|
action_count: actionCount ?? null,
|
|
3869
|
+
final_screenshot_count: finalScreenshotCount,
|
|
3870
|
+
final_screenshot_full_page: normalizedFinalScreenshotFullPage ?? null,
|
|
3871
|
+
final_screenshot_mode: normalizedFinalScreenshotFullPage === undefined
|
|
3872
|
+
? null
|
|
3873
|
+
: normalizedFinalScreenshotFullPage
|
|
3874
|
+
? "full_page"
|
|
3875
|
+
: "viewport",
|
|
3820
3876
|
viewports: (viewports || []).map((viewport) => {
|
|
3821
3877
|
const expectedActionCount = expectedActionCountsByViewport && expectedActionCountsByViewport[viewport.name] !== undefined
|
|
3822
3878
|
? expectedActionCountsByViewport[viewport.name]
|
|
3823
3879
|
: actionCount;
|
|
3880
|
+
const viewportFinalScreenshotFullPage = typeof viewport.screenshot_full_page === "boolean"
|
|
3881
|
+
? viewport.screenshot_full_page
|
|
3882
|
+
: normalizedFinalScreenshotFullPage;
|
|
3824
3883
|
const results = viewport.setup_action_results || [];
|
|
3825
3884
|
const failed = results.filter((result) => result && result.ok === false && result.optional !== true);
|
|
3826
3885
|
const optionalFailed = results.filter((result) => result && result.ok === false && result.optional === true);
|
|
@@ -3874,6 +3933,8 @@ function profileSetupSummary(viewports, actionCount, expectedActionCountsByViewp
|
|
|
3874
3933
|
action_counts: profileSetupActionCounts(results),
|
|
3875
3934
|
frame_action_count: results.filter((result) => result && result.frame_selector).length,
|
|
3876
3935
|
frame_urls: profileSetupFrameUrls(viewport),
|
|
3936
|
+
final_screenshot: viewport.screenshot_label || null,
|
|
3937
|
+
final_screenshot_full_page: viewportFinalScreenshotFullPage ?? null,
|
|
3877
3938
|
setup_screenshots: profileSetupScreenshotLabels(results),
|
|
3878
3939
|
clicked_total: clickedItems.length,
|
|
3879
3940
|
clicked_truncated: clickedItems.length > clicked.length,
|
|
@@ -4058,7 +4119,7 @@ function assessProfile(profile, evidence) {
|
|
|
4058
4119
|
&& (viewport.setup_action_results || []).every((result) => !result || result.ok !== false || result.optional === true),
|
|
4059
4120
|
result_count: (viewport.setup_action_results || []).length,
|
|
4060
4121
|
})),
|
|
4061
|
-
setup_summary: profileSetupSummary(viewports, actionCount, expectedActionCountsByViewport),
|
|
4122
|
+
setup_summary: profileSetupSummary(viewports, actionCount, expectedActionCountsByViewport, profile.target && profile.target.screenshot_full_page),
|
|
4062
4123
|
failed,
|
|
4063
4124
|
},
|
|
4064
4125
|
message: failed.length ? "Setup actions failed in " + failed.length + " viewport action(s)." : undefined,
|
|
@@ -6936,8 +6997,14 @@ async function captureViewport(viewport) {
|
|
|
6936
6997
|
}
|
|
6937
6998
|
}
|
|
6938
6999
|
const screenshotLabel = profileSlug + "-" + viewport.name;
|
|
7000
|
+
let screenshotFullPage = null;
|
|
6939
7001
|
try {
|
|
6940
|
-
|
|
7002
|
+
const screenshotOptions = {};
|
|
7003
|
+
if (profile.target && profile.target.screenshot_full_page !== undefined) {
|
|
7004
|
+
screenshotFullPage = profile.target.screenshot_full_page !== false;
|
|
7005
|
+
screenshotOptions.fullPage = screenshotFullPage;
|
|
7006
|
+
}
|
|
7007
|
+
if (typeof saveScreenshot === "function") await saveScreenshot(screenshotLabel, screenshotOptions);
|
|
6941
7008
|
} catch (error) {
|
|
6942
7009
|
pageErrors.push({ message: "saveScreenshot failed: " + String(error && error.message ? error.message : error).slice(0, 500) });
|
|
6943
7010
|
}
|
|
@@ -7004,6 +7071,7 @@ async function captureViewport(viewport) {
|
|
|
7004
7071
|
route_inventory: routeInventory,
|
|
7005
7072
|
setup_action_results: setupActionResults,
|
|
7006
7073
|
screenshot_label: screenshotLabel,
|
|
7074
|
+
screenshot_full_page: screenshotFullPage,
|
|
7007
7075
|
navigation_error: navigationError,
|
|
7008
7076
|
wait_error: waitError,
|
|
7009
7077
|
};
|
package/dist/profile.d.cts
CHANGED
|
@@ -203,6 +203,7 @@ interface RiddleProofProfileTarget {
|
|
|
203
203
|
timeout_sec?: number;
|
|
204
204
|
wait_for_selector?: string;
|
|
205
205
|
wait_ms?: number;
|
|
206
|
+
screenshot_full_page?: boolean;
|
|
206
207
|
setup_actions?: RiddleProofProfileSetupAction[];
|
|
207
208
|
network_mocks?: RiddleProofProfileNetworkMock[];
|
|
208
209
|
}
|
|
@@ -322,6 +323,7 @@ interface RiddleProofProfileViewportEvidence {
|
|
|
322
323
|
route_inventory?: Record<string, JsonValue>;
|
|
323
324
|
setup_action_results?: Array<Record<string, JsonValue>>;
|
|
324
325
|
screenshot_label?: string;
|
|
326
|
+
screenshot_full_page?: boolean | null;
|
|
325
327
|
navigation_error?: string;
|
|
326
328
|
wait_error?: string;
|
|
327
329
|
}
|
package/dist/profile.d.ts
CHANGED
|
@@ -203,6 +203,7 @@ interface RiddleProofProfileTarget {
|
|
|
203
203
|
timeout_sec?: number;
|
|
204
204
|
wait_for_selector?: string;
|
|
205
205
|
wait_ms?: number;
|
|
206
|
+
screenshot_full_page?: boolean;
|
|
206
207
|
setup_actions?: RiddleProofProfileSetupAction[];
|
|
207
208
|
network_mocks?: RiddleProofProfileNetworkMock[];
|
|
208
209
|
}
|
|
@@ -322,6 +323,7 @@ interface RiddleProofProfileViewportEvidence {
|
|
|
322
323
|
route_inventory?: Record<string, JsonValue>;
|
|
323
324
|
setup_action_results?: Array<Record<string, JsonValue>>;
|
|
324
325
|
screenshot_label?: string;
|
|
326
|
+
screenshot_full_page?: boolean | null;
|
|
325
327
|
navigation_error?: string;
|
|
326
328
|
wait_error?: string;
|
|
327
329
|
}
|
package/dist/profile.js
CHANGED
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
resolveRiddleProofProfileTimeoutSec,
|
|
24
24
|
slugifyRiddleProofProfileName,
|
|
25
25
|
summarizeRiddleProofProfileResult
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-6VXZ6V5M.js";
|
|
27
27
|
export {
|
|
28
28
|
RIDDLE_PROOF_PROFILE_CHECK_TYPES,
|
|
29
29
|
RIDDLE_PROOF_PROFILE_EVIDENCE_VERSION,
|