@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.
Files changed (2) hide show
  1. package/dist/index.mjs +42 -25
  2. 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 RECOMMENDED_COMMON_HEADERS = [
1040
- { name: "cache-control" },
1041
- { name: "content-security-policy" },
1042
- { name: "content-type" },
1043
- {
1044
- name: "cross-origin-opener-policy",
1045
- recommended: "same-origin"
1046
- },
1047
- {
1048
- name: "cross-origin-resource-policy",
1049
- recommended: "same-origin"
1050
- },
1051
- {
1052
- name: "strict-transport-security",
1053
- recommended: `max-age=${MIN_HSTS_MAX_AGE}; includeSubDomains`,
1054
- isAccepted: isStrictHsts
1055
- },
1056
- {
1057
- name: "x-content-type-options",
1058
- recommended: "nosniff"
1059
- },
1060
- { name: "x-robots-tag" }
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
- ...RECOMMENDED_COMMON_HEADERS,
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: RECOMMENDED_COMMON_HEADERS
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.10.1",
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.63.0",
41
- "@types/node": "24.19.1",
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.39.0",
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.0",
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.6",
58
+ "vitepress-plugin-group-icons": "1.7.7",
59
59
  "vitest": "5.0.3"
60
60
  },
61
61
  "peerDependencies": {