@bleedingdev/modern-js-app-tools 3.2.0-ultramodern.102 → 3.2.0-ultramodern.103

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 (104) hide show
  1. package/dist/cjs/baseline.js +9 -5
  2. package/dist/cjs/builder/builder-rspack/index.js +9 -5
  3. package/dist/cjs/builder/generator/adapterCopy.js +9 -5
  4. package/dist/cjs/builder/generator/createBuilderProviderConfig.js +9 -5
  5. package/dist/cjs/builder/generator/createCopyPattern.js +9 -5
  6. package/dist/cjs/builder/generator/getBuilderEnvironments.js +9 -5
  7. package/dist/cjs/builder/generator/index.js +9 -5
  8. package/dist/cjs/builder/index.js +9 -5
  9. package/dist/cjs/builder/shared/builderPlugins/adapterBasic.js +9 -5
  10. package/dist/cjs/builder/shared/builderPlugins/adapterHtml.js +10 -6
  11. package/dist/cjs/builder/shared/builderPlugins/adapterPrecompress.js +9 -5
  12. package/dist/cjs/builder/shared/builderPlugins/adapterSSR.js +9 -5
  13. package/dist/cjs/builder/shared/builderPlugins/builderHooks.js +12 -8
  14. package/dist/cjs/builder/shared/builderPlugins/index.js +9 -5
  15. package/dist/cjs/builder/shared/bundlerPlugins/HtmlAsyncChunkPlugin.js +9 -5
  16. package/dist/cjs/builder/shared/bundlerPlugins/HtmlBottomTemplate.js +12 -8
  17. package/dist/cjs/builder/shared/bundlerPlugins/RouterPlugin.js +9 -5
  18. package/dist/cjs/builder/shared/bundlerPlugins/index.js +9 -5
  19. package/dist/cjs/builder/shared/createCopyInfo.js +9 -5
  20. package/dist/cjs/builder/shared/index.js +9 -5
  21. package/dist/cjs/builder/shared/loaders/serverModuleLoader.js +12 -8
  22. package/dist/cjs/commands/build.js +9 -5
  23. package/dist/cjs/commands/deploy.js +9 -5
  24. package/dist/cjs/commands/dev.js +9 -5
  25. package/dist/cjs/commands/index.js +9 -5
  26. package/dist/cjs/commands/info.js +9 -5
  27. package/dist/cjs/commands/inspect.js +12 -8
  28. package/dist/cjs/commands/runtime.js +15 -11
  29. package/dist/cjs/commands/serve.js +9 -5
  30. package/dist/cjs/compat/hooks.js +9 -5
  31. package/dist/cjs/compat/index.js +9 -5
  32. package/dist/cjs/compat/utils.js +9 -5
  33. package/dist/cjs/config/default.js +9 -5
  34. package/dist/cjs/config/index.js +9 -5
  35. package/dist/cjs/config/initialize/index.js +9 -5
  36. package/dist/cjs/config/initialize/inits.js +9 -5
  37. package/dist/cjs/constants.js +13 -9
  38. package/dist/cjs/defineConfig.js +12 -8
  39. package/dist/cjs/esm/register-esm.js +12 -8
  40. package/dist/cjs/esm/ts-paths-loader.js +9 -5
  41. package/dist/cjs/index.js +21 -16
  42. package/dist/cjs/locale/en.js +12 -8
  43. package/dist/cjs/locale/index.js +9 -5
  44. package/dist/cjs/locale/zh.js +12 -8
  45. package/dist/cjs/plugins/analyze/constants.js +14 -10
  46. package/dist/cjs/plugins/analyze/getBundleEntry.js +9 -5
  47. package/dist/cjs/plugins/analyze/getFileSystemEntry.js +9 -5
  48. package/dist/cjs/plugins/analyze/getHtmlTemplate.js +9 -5
  49. package/dist/cjs/plugins/analyze/getServerRoutes.js +9 -5
  50. package/dist/cjs/plugins/analyze/index.js +9 -5
  51. package/dist/cjs/plugins/analyze/isDefaultExportFunction.js +9 -5
  52. package/dist/cjs/plugins/analyze/templates.js +12 -8
  53. package/dist/cjs/plugins/analyze/utils.js +9 -5
  54. package/dist/cjs/plugins/deploy/index.js +9 -5
  55. package/dist/cjs/plugins/deploy/platforms/cloudflare.js +169 -7
  56. package/dist/cjs/plugins/deploy/platforms/gh-pages.js +9 -5
  57. package/dist/cjs/plugins/deploy/platforms/netlify.js +9 -5
  58. package/dist/cjs/plugins/deploy/platforms/node.js +9 -5
  59. package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-entry.mjs +50 -5
  60. package/dist/cjs/plugins/deploy/platforms/vercel.js +9 -5
  61. package/dist/cjs/plugins/deploy/utils/generator.js +9 -5
  62. package/dist/cjs/plugins/deploy/utils/index.js +9 -5
  63. package/dist/cjs/plugins/initialize/index.js +9 -5
  64. package/dist/cjs/plugins/serverBuild.js +9 -5
  65. package/dist/cjs/plugins/serverRuntime.js +12 -8
  66. package/dist/cjs/presetUltramodern.js +9 -5
  67. package/dist/cjs/rsbuild.js +9 -5
  68. package/dist/cjs/run/index.js +9 -5
  69. package/dist/cjs/types/config/index.js +9 -5
  70. package/dist/cjs/types/index.js +9 -5
  71. package/dist/cjs/ultramodern/designSystem.js +16 -12
  72. package/dist/cjs/utils/config.js +9 -5
  73. package/dist/cjs/utils/createServer.js +14 -10
  74. package/dist/cjs/utils/env.js +9 -5
  75. package/dist/cjs/utils/generateWatchFiles.js +9 -5
  76. package/dist/cjs/utils/getConfigFile.js +9 -5
  77. package/dist/cjs/utils/getSelectedEntries.js +9 -5
  78. package/dist/cjs/utils/initAppContext.js +9 -5
  79. package/dist/cjs/utils/loadPlugins.js +9 -5
  80. package/dist/cjs/utils/printInstructions.js +9 -5
  81. package/dist/cjs/utils/register.js +9 -5
  82. package/dist/cjs/utils/restart.js +9 -5
  83. package/dist/cjs/utils/routes.js +9 -5
  84. package/dist/esm/builder/shared/builderPlugins/adapterHtml.mjs +1 -1
  85. package/dist/esm/plugins/deploy/platforms/cloudflare.mjs +160 -2
  86. package/dist/esm/plugins/deploy/platforms/templates/cloudflare-entry.mjs +50 -5
  87. package/dist/esm-node/builder/shared/builderPlugins/adapterHtml.mjs +1 -1
  88. package/dist/esm-node/plugins/deploy/platforms/cloudflare.mjs +160 -2
  89. package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-entry.mjs +50 -5
  90. package/dist/types/builder/builder-rspack/index.d.ts +1 -1
  91. package/dist/types/builder/generator/index.d.ts +1 -1
  92. package/dist/types/builder/shared/createCopyInfo.d.ts +1 -1
  93. package/dist/types/commands/inspect.d.ts +1 -1
  94. package/dist/types/locale/index.d.ts +89 -2
  95. package/dist/types/plugins/analyze/getFileSystemEntry.d.ts +2 -2
  96. package/dist/types/plugins/analyze/utils.d.ts +1 -1
  97. package/dist/types/plugins/deploy/utils/generator.d.ts +2 -2
  98. package/dist/types/plugins/deploy/utils/index.d.ts +1 -1
  99. package/dist/types/rsbuild.d.ts +1 -1
  100. package/dist/types/run/index.d.ts +1 -1
  101. package/dist/types/types/config/deploy.d.ts +48 -0
  102. package/dist/types/utils/getConfigFile.d.ts +1 -1
  103. package/dist/types/utils/loadPlugins.d.ts +2 -2
  104. package/package.json +15 -15
@@ -10,11 +10,15 @@ var __webpack_require__ = {};
10
10
  };
11
11
  })();
12
12
  (()=>{
13
- __webpack_require__.d = (exports1, definition)=>{
14
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
15
- enumerable: true,
16
- get: definition[key]
17
- });
13
+ __webpack_require__.d = (exports1, getters, values)=>{
14
+ var define = (defs, kind)=>{
15
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
16
+ enumerable: true,
17
+ [kind]: defs[key]
18
+ });
19
+ };
20
+ define(getters, "get");
21
+ define(values, "value");
18
22
  };
19
23
  })();
20
24
  (()=>{
@@ -10,11 +10,15 @@ var __webpack_require__ = {};
10
10
  };
11
11
  })();
12
12
  (()=>{
13
- __webpack_require__.d = (exports1, definition)=>{
14
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
15
- enumerable: true,
16
- get: definition[key]
17
- });
13
+ __webpack_require__.d = (exports1, getters, values)=>{
14
+ var define = (defs, kind)=>{
15
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
16
+ enumerable: true,
17
+ [kind]: defs[key]
18
+ });
19
+ };
20
+ define(getters, "get");
21
+ define(values, "value");
18
22
  };
19
23
  })();
20
24
  (()=>{
@@ -1,11 +1,15 @@
1
1
  "use strict";
2
2
  var __webpack_require__ = {};
3
3
  (()=>{
4
- __webpack_require__.d = (exports1, definition)=>{
5
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
- enumerable: true,
7
- get: definition[key]
8
- });
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
9
13
  };
10
14
  })();
11
15
  (()=>{
@@ -10,11 +10,15 @@ var __webpack_require__ = {};
10
10
  };
11
11
  })();
12
12
  (()=>{
13
- __webpack_require__.d = (exports1, definition)=>{
14
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
15
- enumerable: true,
16
- get: definition[key]
17
- });
13
+ __webpack_require__.d = (exports1, getters, values)=>{
14
+ var define = (defs, kind)=>{
15
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
16
+ enumerable: true,
17
+ [kind]: defs[key]
18
+ });
19
+ };
20
+ define(getters, "get");
21
+ define(values, "value");
18
22
  };
19
23
  })();
20
24
  (()=>{
@@ -1,11 +1,15 @@
1
1
  "use strict";
2
2
  var __webpack_require__ = {};
3
3
  (()=>{
4
- __webpack_require__.d = (exports1, definition)=>{
5
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
- enumerable: true,
7
- get: definition[key]
8
- });
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
9
13
  };
10
14
  })();
11
15
  (()=>{
@@ -23,9 +27,6 @@ var __webpack_require__ = {};
23
27
  })();
24
28
  var __webpack_exports__ = {};
25
29
  __webpack_require__.r(__webpack_exports__);
26
- __webpack_require__.d(__webpack_exports__, {
27
- html: ()=>html
28
- });
29
30
  const html = (partials)=>`
30
31
  <!DOCTYPE html>
31
32
  <html>
@@ -47,6 +48,9 @@ const html = (partials)=>`
47
48
 
48
49
  </html>
49
50
  `;
51
+ __webpack_require__.d(__webpack_exports__, {}, {
52
+ html: html
53
+ });
50
54
  exports.html = __webpack_exports__.html;
51
55
  for(var __rspack_i in __webpack_exports__)if (-1 === [
52
56
  "html"
@@ -10,11 +10,15 @@ var __webpack_require__ = {};
10
10
  };
11
11
  })();
12
12
  (()=>{
13
- __webpack_require__.d = (exports1, definition)=>{
14
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
15
- enumerable: true,
16
- get: definition[key]
17
- });
13
+ __webpack_require__.d = (exports1, getters, values)=>{
14
+ var define = (defs, kind)=>{
15
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
16
+ enumerable: true,
17
+ [kind]: defs[key]
18
+ });
19
+ };
20
+ define(getters, "get");
21
+ define(values, "value");
18
22
  };
19
23
  })();
20
24
  (()=>{
@@ -1,11 +1,15 @@
1
1
  "use strict";
2
2
  var __webpack_require__ = {};
3
3
  (()=>{
4
- __webpack_require__.d = (exports1, definition)=>{
5
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
- enumerable: true,
7
- get: definition[key]
8
- });
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
9
13
  };
10
14
  })();
11
15
  (()=>{
@@ -10,11 +10,15 @@ var __webpack_require__ = {};
10
10
  };
11
11
  })();
12
12
  (()=>{
13
- __webpack_require__.d = (exports1, definition)=>{
14
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
15
- enumerable: true,
16
- get: definition[key]
17
- });
13
+ __webpack_require__.d = (exports1, getters, values)=>{
14
+ var define = (defs, kind)=>{
15
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
16
+ enumerable: true,
17
+ [kind]: defs[key]
18
+ });
19
+ };
20
+ define(getters, "get");
21
+ define(values, "value");
18
22
  };
19
23
  })();
20
24
  (()=>{
@@ -50,7 +54,79 @@ const PUBLIC_ASSETS_DIRECTORY = 'public';
50
54
  const WORKER_BUNDLE_DIRECTORY = 'worker';
51
55
  const SERVER_BUNDLE_DIRECTORY = 'bundles';
52
56
  const BFF_EFFECT_WORKER_ENTRY = `${WORKER_BUNDLE_DIRECTORY}/__modern_bff_effect.js`;
53
- const getCompatibilityDate = ()=>new Date().toISOString().slice(0, 10);
57
+ const DEFAULT_COMPATIBILITY_DATE = '2026-06-02';
58
+ const COMPATIBILITY_DATE_PATTERN = /^\d{4}-\d{2}-\d{2}$/u;
59
+ const DEFAULT_SECURITY_HEADERS = {
60
+ referrerPolicy: 'strict-origin-when-cross-origin',
61
+ contentTypeOptions: 'nosniff',
62
+ permissionsPolicy: 'camera=(), geolocation=(), microphone=(), payment=(), usb=()'
63
+ };
64
+ const DEFAULT_CSP_DIRECTIVES = {
65
+ 'base-uri': [
66
+ "'self'"
67
+ ],
68
+ 'connect-src': [
69
+ "'self'",
70
+ 'https:',
71
+ 'http:',
72
+ 'wss:',
73
+ 'ws:'
74
+ ],
75
+ 'default-src': [
76
+ "'self'"
77
+ ],
78
+ 'font-src': [
79
+ "'self'",
80
+ 'data:',
81
+ 'https:',
82
+ 'http:'
83
+ ],
84
+ 'form-action': [
85
+ "'self'"
86
+ ],
87
+ 'frame-ancestors': [
88
+ "'self'"
89
+ ],
90
+ 'img-src': [
91
+ "'self'",
92
+ 'data:',
93
+ 'blob:',
94
+ 'https:',
95
+ 'http:'
96
+ ],
97
+ 'manifest-src': [
98
+ "'self'",
99
+ 'https:',
100
+ 'http:'
101
+ ],
102
+ 'object-src': [
103
+ "'none'"
104
+ ],
105
+ "script-src": [
106
+ "'self'",
107
+ "'unsafe-inline'",
108
+ "'unsafe-eval'",
109
+ 'https:',
110
+ 'http:',
111
+ 'blob:'
112
+ ],
113
+ 'style-src': [
114
+ "'self'",
115
+ "'unsafe-inline'",
116
+ 'https:',
117
+ 'http:'
118
+ ],
119
+ 'worker-src': [
120
+ "'self'",
121
+ 'blob:'
122
+ ]
123
+ };
124
+ const getCompatibilityDate = (modernConfig)=>{
125
+ const configuredDate = modernConfig.deploy?.worker?.compatibilityDate?.trim();
126
+ const compatibilityDate = configuredDate || DEFAULT_COMPATIBILITY_DATE;
127
+ if (!COMPATIBILITY_DATE_PATTERN.test(compatibilityDate)) throw new Error(`deploy.worker.compatibilityDate must use YYYY-MM-DD, received ${JSON.stringify(compatibilityDate)}.`);
128
+ return compatibilityDate;
129
+ };
54
130
  const getWorkerName = (appDirectory)=>{
55
131
  const basename = external_node_path_default().basename(appDirectory);
56
132
  return basename.replace(/[^a-zA-Z0-9-_]/g, '-') || 'modern-cloudflare-worker';
@@ -59,6 +135,91 @@ const getConfiguredWorkerName = (appDirectory, modernConfig)=>{
59
135
  const configuredName = modernConfig.deploy?.worker?.name?.trim();
60
136
  return configuredName || getWorkerName(appDirectory);
61
137
  };
138
+ const normalizeDirectiveValues = (value)=>{
139
+ const values = Array.isArray(value) ? value : [
140
+ value
141
+ ];
142
+ return [
143
+ ...new Set(values.map((entry)=>entry.trim()).filter(Boolean))
144
+ ];
145
+ };
146
+ const appendDirectiveValues = (directives, name, values)=>{
147
+ if (!values?.length) return;
148
+ directives[name] = normalizeDirectiveValues([
149
+ ...directives[name] ?? [],
150
+ ...values
151
+ ]);
152
+ };
153
+ const createContentSecurityPolicy = (config)=>{
154
+ const mode = config?.mode ?? 'report-only';
155
+ if ('off' === mode) return {
156
+ mode,
157
+ directives: {},
158
+ reason: config?.reason
159
+ };
160
+ const directives = Object.fromEntries(Object.entries(DEFAULT_CSP_DIRECTIVES).map(([name, values])=>[
161
+ name,
162
+ [
163
+ ...values
164
+ ]
165
+ ]));
166
+ for (const [name, value] of Object.entries(config?.directives ?? {}))if (false === value) delete directives[name];
167
+ else directives[name] = normalizeDirectiveValues(value);
168
+ if (config?.frameAncestors === false) delete directives['frame-ancestors'];
169
+ else if (config?.frameAncestors) directives['frame-ancestors'] = normalizeDirectiveValues(config.frameAncestors);
170
+ appendDirectiveValues(directives, "script-src", config?.additionalScriptSrc);
171
+ appendDirectiveValues(directives, 'style-src', config?.additionalStyleSrc);
172
+ appendDirectiveValues(directives, 'connect-src', config?.additionalConnectSrc);
173
+ appendDirectiveValues(directives, 'img-src', config?.additionalImgSrc);
174
+ if (config?.reportUri) directives['report-uri'] = [
175
+ config.reportUri
176
+ ];
177
+ return {
178
+ mode,
179
+ directives,
180
+ reason: config?.reason
181
+ };
182
+ };
183
+ const createNoindexPolicy = (noindex)=>{
184
+ if (false === noindex) return {
185
+ workersDev: false,
186
+ localhost: false,
187
+ previewHostnames: []
188
+ };
189
+ if (true === noindex || void 0 === noindex) return {
190
+ workersDev: true,
191
+ localhost: true,
192
+ previewHostnames: []
193
+ };
194
+ return {
195
+ workersDev: noindex.workersDev ?? true,
196
+ localhost: noindex.localhost ?? true,
197
+ previewHostnames: noindex.previewHostnames ?? [],
198
+ reason: noindex.reason
199
+ };
200
+ };
201
+ const createCloudflareWorkerSecurityPolicy = (modernConfig)=>{
202
+ const security = modernConfig.deploy?.worker?.security;
203
+ if (security?.enabled === false) return {
204
+ enabled: false,
205
+ reason: security.reason
206
+ };
207
+ return {
208
+ enabled: true,
209
+ headers: {
210
+ referrerPolicy: security?.headers?.referrerPolicy ?? DEFAULT_SECURITY_HEADERS.referrerPolicy,
211
+ contentTypeOptions: security?.headers?.contentTypeOptions ?? DEFAULT_SECURITY_HEADERS.contentTypeOptions,
212
+ permissionsPolicy: security?.headers?.permissionsPolicy ?? DEFAULT_SECURITY_HEADERS.permissionsPolicy
213
+ },
214
+ contentSecurityPolicy: createContentSecurityPolicy(security?.contentSecurityPolicy),
215
+ noindex: createNoindexPolicy(security?.noindex),
216
+ cookies: {
217
+ mutateSetCookie: false,
218
+ reason: security?.cookies?.reason ?? 'Cloudflare worker does not own application Set-Cookie headers.'
219
+ },
220
+ reason: security?.reason
221
+ };
222
+ };
62
223
  const readRouteSpec = async (outputDirectory)=>{
63
224
  const routeSpecPath = external_node_path_default().join(outputDirectory, ROUTE_SPEC_OUTPUT);
64
225
  if (!await utils_namespaceObject.fs.pathExists(routeSpecPath)) return {
@@ -114,6 +275,7 @@ const createWorkerManifest = async (outputDirectory, modernConfig)=>{
114
275
  loadableStats: LOADABLE_STATS_FILE,
115
276
  routeManifest: ROUTE_MANIFEST_FILE
116
277
  },
278
+ security: createCloudflareWorkerSecurityPolicy(modernConfig),
117
279
  bff: isEffectBff && primaryBffPrefix && effectBffWorkerExists ? {
118
280
  runtimeFramework: 'effect',
119
281
  prefix: primaryBffPrefix,
@@ -186,7 +348,7 @@ const createCloudflarePreset = ({ appContext, modernConfig })=>{
186
348
  $schema: 'node_modules/wrangler/config-schema.json',
187
349
  name: workerName,
188
350
  main: WORKER_ENTRY,
189
- compatibility_date: getCompatibilityDate(),
351
+ compatibility_date: getCompatibilityDate(modernConfig),
190
352
  compatibility_flags: [
191
353
  'nodejs_compat',
192
354
  'global_fetch_strictly_public'
@@ -10,11 +10,15 @@ var __webpack_require__ = {};
10
10
  };
11
11
  })();
12
12
  (()=>{
13
- __webpack_require__.d = (exports1, definition)=>{
14
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
15
- enumerable: true,
16
- get: definition[key]
17
- });
13
+ __webpack_require__.d = (exports1, getters, values)=>{
14
+ var define = (defs, kind)=>{
15
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
16
+ enumerable: true,
17
+ [kind]: defs[key]
18
+ });
19
+ };
20
+ define(getters, "get");
21
+ define(values, "value");
18
22
  };
19
23
  })();
20
24
  (()=>{
@@ -10,11 +10,15 @@ var __webpack_require__ = {};
10
10
  };
11
11
  })();
12
12
  (()=>{
13
- __webpack_require__.d = (exports1, definition)=>{
14
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
15
- enumerable: true,
16
- get: definition[key]
17
- });
13
+ __webpack_require__.d = (exports1, getters, values)=>{
14
+ var define = (defs, kind)=>{
15
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
16
+ enumerable: true,
17
+ [kind]: defs[key]
18
+ });
19
+ };
20
+ define(getters, "get");
21
+ define(values, "value");
18
22
  };
19
23
  })();
20
24
  (()=>{
@@ -10,11 +10,15 @@ var __webpack_require__ = {};
10
10
  };
11
11
  })();
12
12
  (()=>{
13
- __webpack_require__.d = (exports1, definition)=>{
14
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
15
- enumerable: true,
16
- get: definition[key]
17
- });
13
+ __webpack_require__.d = (exports1, getters, values)=>{
14
+ var define = (defs, kind)=>{
15
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
16
+ enumerable: true,
17
+ [kind]: defs[key]
18
+ });
19
+ };
20
+ define(getters, "get");
21
+ define(values, "value");
18
22
  };
19
23
  })();
20
24
  (()=>{
@@ -19,6 +19,50 @@ function withCorsHeaders(response) {
19
19
  statusText: response.statusText
20
20
  });
21
21
  }
22
+ function setHeaderIfEnabled(headers, name, value) {
23
+ if (false === value || 'string' != typeof value || '' === value.trim()) return;
24
+ if (!headers.has(name)) headers.set(name, value);
25
+ }
26
+ function renderContentSecurityPolicy(directives) {
27
+ return Object.entries(directives || {}).filter(([, values])=>Array.isArray(values) && values.length > 0).sort(([left], [right])=>left.localeCompare(right)).map(([name, values])=>`${name} ${values.join(' ')}`).join('; ');
28
+ }
29
+ function isHtmlResponse(response) {
30
+ return (response.headers.get('content-type') || '').includes('text/html');
31
+ }
32
+ function matchesPreviewHostname(hostname, pattern) {
33
+ const normalizedHostname = hostname.toLowerCase();
34
+ const normalizedPattern = String(pattern || '').toLowerCase();
35
+ if (!normalizedPattern) return false;
36
+ if (normalizedPattern.startsWith('*.')) return normalizedHostname.endsWith(normalizedPattern.slice(1));
37
+ return normalizedHostname === normalizedPattern;
38
+ }
39
+ function shouldNoindex(request, noindex) {
40
+ if (!noindex || false === noindex) return false;
41
+ const { hostname } = new URL(request.url);
42
+ const normalizedHostname = hostname.toLowerCase();
43
+ if (false !== noindex.localhost && ('localhost' === normalizedHostname || '127.0.0.1' === normalizedHostname || '[::1]' === normalizedHostname)) return true;
44
+ if (false !== noindex.workersDev && normalizedHostname.endsWith('.workers.dev')) return true;
45
+ return (noindex.previewHostnames || []).some((pattern)=>matchesPreviewHostname(normalizedHostname, pattern));
46
+ }
47
+ function withCloudflareSecurityHeaders(response, request) {
48
+ const security = MODERN_WORKER_MANIFEST.security;
49
+ if (!security || false === security.enabled) return response;
50
+ const headers = new Headers(response.headers);
51
+ const configuredHeaders = security.headers || {};
52
+ setHeaderIfEnabled(headers, 'referrer-policy', configuredHeaders.referrerPolicy);
53
+ setHeaderIfEnabled(headers, 'x-content-type-options', configuredHeaders.contentTypeOptions);
54
+ setHeaderIfEnabled(headers, 'permissions-policy', configuredHeaders.permissionsPolicy);
55
+ const csp = security.contentSecurityPolicy;
56
+ const cspHeader = csp?.mode === 'enforce' ? 'content-security-policy' : 'content-security-policy-report-only';
57
+ const cspValue = renderContentSecurityPolicy(csp?.directives);
58
+ if (isHtmlResponse(response) && csp?.mode !== 'off' && cspValue && !headers.has(cspHeader)) headers.set(cspHeader, cspValue);
59
+ if (shouldNoindex(request, security.noindex)) headers.set('x-robots-tag', 'noindex, nofollow');
60
+ return new Response(response.body, {
61
+ headers,
62
+ status: response.status,
63
+ statusText: response.statusText
64
+ });
65
+ }
22
66
  function createRenderableRequest(request) {
23
67
  if ('HEAD' !== request.method) return request;
24
68
  return new Request(request, {
@@ -26,13 +70,14 @@ function createRenderableRequest(request) {
26
70
  });
27
71
  }
28
72
  function finalizeResponseForRequest(response, request) {
29
- if ('HEAD' !== request.method) return response;
30
- const headers = new Headers(response.headers);
73
+ const securedResponse = withCloudflareSecurityHeaders(response, request);
74
+ if ('HEAD' !== request.method) return securedResponse;
75
+ const headers = new Headers(securedResponse.headers);
31
76
  headers.delete('content-length');
32
77
  return new Response(null, {
33
78
  headers,
34
- status: response.status,
35
- statusText: response.statusText
79
+ status: securedResponse.status,
80
+ statusText: securedResponse.statusText
36
81
  });
37
82
  }
38
83
  function isFingerprintedAssetPathname(pathname) {
@@ -434,7 +479,7 @@ async function dispatchBffRequest(request, env) {
434
479
  export default {
435
480
  async fetch (request, env, ctx) {
436
481
  const corsPreflightResponse = createCorsPreflightResponse(request);
437
- if (corsPreflightResponse) return corsPreflightResponse;
482
+ if (corsPreflightResponse) return finalizeResponseForRequest(corsPreflightResponse, request);
438
483
  const assetResponse = await fetchAsset(request, env);
439
484
  if (assetResponse) return finalizeResponseForRequest(assetResponse, request);
440
485
  const bffResponse = await dispatchBffRequest(request, env);
@@ -10,11 +10,15 @@ var __webpack_require__ = {};
10
10
  };
11
11
  })();
12
12
  (()=>{
13
- __webpack_require__.d = (exports1, definition)=>{
14
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
15
- enumerable: true,
16
- get: definition[key]
17
- });
13
+ __webpack_require__.d = (exports1, getters, values)=>{
14
+ var define = (defs, kind)=>{
15
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
16
+ enumerable: true,
17
+ [kind]: defs[key]
18
+ });
19
+ };
20
+ define(getters, "get");
21
+ define(values, "value");
18
22
  };
19
23
  })();
20
24
  (()=>{
@@ -10,11 +10,15 @@ var __webpack_require__ = {};
10
10
  };
11
11
  })();
12
12
  (()=>{
13
- __webpack_require__.d = (exports1, definition)=>{
14
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
15
- enumerable: true,
16
- get: definition[key]
17
- });
13
+ __webpack_require__.d = (exports1, getters, values)=>{
14
+ var define = (defs, kind)=>{
15
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
16
+ enumerable: true,
17
+ [kind]: defs[key]
18
+ });
19
+ };
20
+ define(getters, "get");
21
+ define(values, "value");
18
22
  };
19
23
  })();
20
24
  (()=>{
@@ -10,11 +10,15 @@ var __webpack_require__ = {};
10
10
  };
11
11
  })();
12
12
  (()=>{
13
- __webpack_require__.d = (exports1, definition)=>{
14
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
15
- enumerable: true,
16
- get: definition[key]
17
- });
13
+ __webpack_require__.d = (exports1, getters, values)=>{
14
+ var define = (defs, kind)=>{
15
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
16
+ enumerable: true,
17
+ [kind]: defs[key]
18
+ });
19
+ };
20
+ define(getters, "get");
21
+ define(values, "value");
18
22
  };
19
23
  })();
20
24
  (()=>{
@@ -1,11 +1,15 @@
1
1
  "use strict";
2
2
  var __webpack_require__ = {};
3
3
  (()=>{
4
- __webpack_require__.d = (exports1, definition)=>{
5
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
- enumerable: true,
7
- get: definition[key]
8
- });
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
9
13
  };
10
14
  })();
11
15
  (()=>{
@@ -10,11 +10,15 @@ var __webpack_require__ = {};
10
10
  };
11
11
  })();
12
12
  (()=>{
13
- __webpack_require__.d = (exports1, definition)=>{
14
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
15
- enumerable: true,
16
- get: definition[key]
17
- });
13
+ __webpack_require__.d = (exports1, getters, values)=>{
14
+ var define = (defs, kind)=>{
15
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
16
+ enumerable: true,
17
+ [kind]: defs[key]
18
+ });
19
+ };
20
+ define(getters, "get");
21
+ define(values, "value");
18
22
  };
19
23
  })();
20
24
  (()=>{