@cronn/playwright-utils 0.10.1 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.mjs +42 -25
- package/package.json +6 -6
package/dist/index.mjs
CHANGED
|
@@ -1036,32 +1036,35 @@ const ACTION_ORDER = [
|
|
|
1036
1036
|
];
|
|
1037
1037
|
const MIN_HSTS_MAX_AGE = 31536e3;
|
|
1038
1038
|
const PERMISSIONS_POLICY = "geolocation=(), microphone=(), camera=()";
|
|
1039
|
-
const
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
name: "
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1039
|
+
const API_CSP = "frame-ancestors 'none'";
|
|
1040
|
+
function recommendedCommonHeaders(csp) {
|
|
1041
|
+
return [
|
|
1042
|
+
{ name: "cache-control" },
|
|
1043
|
+
csp,
|
|
1044
|
+
{ name: "content-type" },
|
|
1045
|
+
{
|
|
1046
|
+
name: "cross-origin-opener-policy",
|
|
1047
|
+
recommended: "same-origin"
|
|
1048
|
+
},
|
|
1049
|
+
{
|
|
1050
|
+
name: "cross-origin-resource-policy",
|
|
1051
|
+
recommended: "same-origin"
|
|
1052
|
+
},
|
|
1053
|
+
{
|
|
1054
|
+
name: "strict-transport-security",
|
|
1055
|
+
recommended: `max-age=${MIN_HSTS_MAX_AGE}; includeSubDomains`,
|
|
1056
|
+
isAccepted: isStrictHsts
|
|
1057
|
+
},
|
|
1058
|
+
{
|
|
1059
|
+
name: "x-content-type-options",
|
|
1060
|
+
recommended: "nosniff"
|
|
1061
|
+
},
|
|
1062
|
+
{ name: "x-robots-tag" }
|
|
1063
|
+
];
|
|
1064
|
+
}
|
|
1062
1065
|
const DISCOURAGED_COMMON_HEADERS = ["access-control-allow-origin"];
|
|
1063
1066
|
const RECOMMENDED_DOCUMENT_HEADERS = [
|
|
1064
|
-
...
|
|
1067
|
+
...recommendedCommonHeaders({ name: "content-security-policy" }),
|
|
1065
1068
|
{
|
|
1066
1069
|
name: "permissions-policy",
|
|
1067
1070
|
recommended: PERMISSIONS_POLICY,
|
|
@@ -1076,10 +1079,15 @@ const RECOMMENDED_DOCUMENT_HEADERS = [
|
|
|
1076
1079
|
recommended: "DENY"
|
|
1077
1080
|
}
|
|
1078
1081
|
];
|
|
1082
|
+
const RECOMMENDED_API_HEADERS = recommendedCommonHeaders({
|
|
1083
|
+
name: "content-security-policy",
|
|
1084
|
+
recommended: API_CSP,
|
|
1085
|
+
isAccepted: hasApiCspDirectives
|
|
1086
|
+
});
|
|
1079
1087
|
const DISCOURAGED_DOCUMENT_HEADERS = [...DISCOURAGED_COMMON_HEADERS, "x-xss-protection"];
|
|
1080
1088
|
const RECOMMENDED_HEADERS = {
|
|
1081
1089
|
document: RECOMMENDED_DOCUMENT_HEADERS,
|
|
1082
|
-
api:
|
|
1090
|
+
api: RECOMMENDED_API_HEADERS
|
|
1083
1091
|
};
|
|
1084
1092
|
const DISCOURAGED_HEADERS = {
|
|
1085
1093
|
document: DISCOURAGED_DOCUMENT_HEADERS,
|
|
@@ -1164,6 +1172,15 @@ function isStrictHsts(value) {
|
|
|
1164
1172
|
return maxAge !== void 0 && Number(maxAge) >= MIN_HSTS_MAX_AGE && directives.includes("includesubdomains");
|
|
1165
1173
|
}
|
|
1166
1174
|
/**
|
|
1175
|
+
* Accepts a policy if it contains the recommended directives, so stricter
|
|
1176
|
+
* policies with further directives like `default-src 'none'` are accepted as
|
|
1177
|
+
* well.
|
|
1178
|
+
*/
|
|
1179
|
+
function hasApiCspDirectives(value) {
|
|
1180
|
+
const actualDirectives = normalizeValue(value).split("; ");
|
|
1181
|
+
return normalizeValue(API_CSP).split("; ").every((directive) => actualDirectives.includes(directive));
|
|
1182
|
+
}
|
|
1183
|
+
/**
|
|
1167
1184
|
* Accepts a policy if it restricts at least the recommended permissions, so
|
|
1168
1185
|
* stricter policies restricting further permissions are accepted as well.
|
|
1169
1186
|
*/
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cronn/playwright-utils",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"description": "Utilities for writing tests with Playwright",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"playwright",
|
|
@@ -37,25 +37,25 @@
|
|
|
37
37
|
"@changesets/cli": "3.0.3",
|
|
38
38
|
"@cronn/element-snapshot": "0.32.1",
|
|
39
39
|
"@cronn/playwright-file-snapshots": "2.2.2",
|
|
40
|
-
"@playwright/test": "1.
|
|
41
|
-
"@types/node": "24.19.
|
|
40
|
+
"@playwright/test": "1.64.0",
|
|
41
|
+
"@types/node": "24.19.2",
|
|
42
42
|
"@typescript/native": "npm:typescript@^7.0.2",
|
|
43
43
|
"@vitest/coverage-v8": "5.0.3",
|
|
44
44
|
"eslint": "10.12.0",
|
|
45
45
|
"eslint-config-prettier": "10.1.8",
|
|
46
46
|
"eslint-plugin-check-file": "3.3.2",
|
|
47
47
|
"eslint-plugin-unused-imports": "4.4.1",
|
|
48
|
-
"knip": "6.
|
|
48
|
+
"knip": "6.41.0",
|
|
49
49
|
"oxc-minify": "0.153.0",
|
|
50
50
|
"oxfmt": "0.72.0",
|
|
51
51
|
"publint": "0.3.25",
|
|
52
52
|
"rimraf": "6.1.3",
|
|
53
|
-
"tsdown": "0.23.
|
|
53
|
+
"tsdown": "0.23.1",
|
|
54
54
|
"turbo": "2.11.7",
|
|
55
55
|
"typescript": "npm:@typescript/typescript6@^6.0.2",
|
|
56
56
|
"typescript-eslint": "8.71.1",
|
|
57
57
|
"vitepress": "2.0.0-alpha.20",
|
|
58
|
-
"vitepress-plugin-group-icons": "1.7.
|
|
58
|
+
"vitepress-plugin-group-icons": "1.7.7",
|
|
59
59
|
"vitest": "5.0.3"
|
|
60
60
|
},
|
|
61
61
|
"peerDependencies": {
|