wrangler 0.0.0-cfd2e880 → 0.0.0-cffacf5c

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 (218) hide show
  1. package/README.md +0 -4
  2. package/bin/wrangler.js +29 -9
  3. package/miniflare-dist/index.mjs +175 -125
  4. package/package.json +29 -10
  5. package/src/__tests__/access.test.ts +25 -0
  6. package/src/__tests__/api-dev.test.ts +222 -3
  7. package/src/__tests__/api-devregistry.test.js +64 -0
  8. package/src/__tests__/api.test.ts +80 -0
  9. package/src/__tests__/configuration.test.ts +511 -374
  10. package/src/__tests__/d1.test.ts +123 -0
  11. package/src/__tests__/delete.test.ts +263 -0
  12. package/src/__tests__/deployments.test.ts +105 -0
  13. package/src/__tests__/dev.test.tsx +327 -60
  14. package/src/__tests__/generate.test.ts +207 -63
  15. package/src/__tests__/get-host-from-url.test.ts +16 -0
  16. package/src/__tests__/helpers/mock-auth-domain.ts +20 -0
  17. package/src/__tests__/helpers/mock-cfetch.ts +20 -58
  18. package/src/__tests__/helpers/mock-dialogs.ts +1 -1
  19. package/src/__tests__/helpers/mock-kv.ts +1 -1
  20. package/src/__tests__/helpers/mock-oauth-flow.ts +74 -53
  21. package/src/__tests__/helpers/mock-process.ts +8 -13
  22. package/src/__tests__/helpers/msw/blob-worker.cjs +19 -0
  23. package/src/__tests__/helpers/msw/handlers/access.ts +13 -0
  24. package/src/__tests__/helpers/msw/handlers/deployments.ts +59 -0
  25. package/src/__tests__/helpers/msw/handlers/namespaces.ts +7 -7
  26. package/src/__tests__/helpers/msw/handlers/oauth.ts +15 -20
  27. package/src/__tests__/helpers/msw/handlers/r2.ts +8 -8
  28. package/src/__tests__/helpers/msw/handlers/script.ts +75 -0
  29. package/src/__tests__/helpers/msw/handlers/user.ts +6 -6
  30. package/src/__tests__/helpers/msw/handlers/zones.ts +22 -0
  31. package/src/__tests__/helpers/msw/index.ts +19 -2
  32. package/src/__tests__/helpers/msw/read-file-sync.js +61 -0
  33. package/src/__tests__/helpers/worker-scripts/child-wrangler.toml +1 -0
  34. package/src/__tests__/helpers/{hello-world-worker.js → worker-scripts/hello-world-worker.js} +0 -0
  35. package/src/__tests__/helpers/worker-scripts/hello-world-wrangler.toml +1 -0
  36. package/src/__tests__/helpers/worker-scripts/parent-worker.js +8 -0
  37. package/src/__tests__/helpers/worker-scripts/parent-wrangler.toml +5 -0
  38. package/src/__tests__/index.test.ts +86 -65
  39. package/src/__tests__/init.test.ts +881 -308
  40. package/src/__tests__/jest.setup.ts +28 -11
  41. package/src/__tests__/kv.test.ts +655 -540
  42. package/src/__tests__/logout.test.ts +47 -0
  43. package/src/__tests__/metrics.test.ts +89 -44
  44. package/src/__tests__/middleware.scheduled.test.ts +145 -0
  45. package/src/__tests__/middleware.test.ts +727 -745
  46. package/src/__tests__/pages-deployment-tail.test.ts +884 -0
  47. package/src/__tests__/pages.test.ts +1838 -939
  48. package/src/__tests__/paths.test.ts +23 -1
  49. package/src/__tests__/publish.test.ts +1460 -736
  50. package/src/__tests__/pubsub.test.ts +211 -88
  51. package/src/__tests__/queues.test.ts +522 -0
  52. package/src/__tests__/r2.test.ts +290 -268
  53. package/src/__tests__/secret.test.ts +208 -84
  54. package/src/__tests__/tail.test.ts +243 -119
  55. package/src/__tests__/tsconfig-sanity.ts +12 -0
  56. package/src/__tests__/tsconfig.json +8 -0
  57. package/src/__tests__/tsconfig.tsbuildinfo +1 -0
  58. package/src/__tests__/type-generation.test.ts +233 -0
  59. package/src/__tests__/user.test.ts +47 -73
  60. package/src/__tests__/utils-collectKeyValues.test.ts +47 -0
  61. package/src/__tests__/whoami.test.tsx +6 -2
  62. package/src/__tests__/worker-namespace.test.ts +120 -123
  63. package/src/api/dev.ts +141 -53
  64. package/src/api/index.ts +1 -1
  65. package/src/bundle-reporter.tsx +41 -2
  66. package/src/bundle.ts +277 -154
  67. package/src/cfetch/index.ts +40 -3
  68. package/src/cfetch/internal.ts +54 -91
  69. package/src/cli.ts +3 -4
  70. package/src/config/config.ts +12 -0
  71. package/src/config/environment.ts +92 -0
  72. package/src/config/index.ts +111 -4
  73. package/src/config/validation.ts +290 -1
  74. package/src/config-cache.ts +1 -1
  75. package/src/create-worker-preview.ts +31 -6
  76. package/src/create-worker-upload-form.ts +38 -4
  77. package/src/d1/backups.tsx +223 -0
  78. package/src/d1/constants.ts +2 -0
  79. package/src/d1/create.tsx +63 -0
  80. package/src/d1/delete.tsx +56 -0
  81. package/src/d1/execute.tsx +352 -0
  82. package/src/d1/formatTimeAgo.ts +14 -0
  83. package/src/d1/index.ts +101 -0
  84. package/src/d1/list.tsx +48 -0
  85. package/src/d1/migrations/apply.tsx +196 -0
  86. package/src/d1/migrations/create.tsx +77 -0
  87. package/src/d1/migrations/helpers.ts +147 -0
  88. package/src/d1/migrations/index.tsx +3 -0
  89. package/src/d1/migrations/list.tsx +79 -0
  90. package/src/d1/migrations/options.ts +18 -0
  91. package/src/d1/options.ts +22 -0
  92. package/src/d1/types.tsx +24 -0
  93. package/src/d1/utils.ts +48 -0
  94. package/src/delete.ts +108 -0
  95. package/src/deployments.ts +83 -0
  96. package/src/deprecated/index.ts +145 -0
  97. package/src/dev/dev-vars.ts +11 -8
  98. package/src/dev/dev.tsx +115 -48
  99. package/src/dev/get-local-persistence-path.tsx +31 -0
  100. package/src/dev/local.tsx +389 -44
  101. package/src/dev/remote.tsx +288 -110
  102. package/src/dev/start-server.ts +198 -60
  103. package/src/dev/use-esbuild.ts +29 -7
  104. package/src/dev-registry.tsx +41 -0
  105. package/src/dev.tsx +193 -76
  106. package/src/dialogs.tsx +24 -10
  107. package/src/dispatch-namespace.ts +5 -4
  108. package/src/docs/index.ts +97 -0
  109. package/src/entry.ts +1 -1
  110. package/src/environment-variables/factory.ts +88 -0
  111. package/src/environment-variables/misc-variables.ts +30 -0
  112. package/src/generate/index.ts +300 -0
  113. package/src/git-client.ts +100 -7
  114. package/src/index.tsx +237 -1894
  115. package/src/init.ts +167 -51
  116. package/src/inspect.ts +47 -27
  117. package/src/is-interactive.ts +4 -0
  118. package/src/jest.d.ts +4 -0
  119. package/src/{kv.ts → kv/helpers.ts} +3 -3
  120. package/src/kv/index.ts +596 -0
  121. package/src/logger.ts +27 -8
  122. package/src/metrics/metrics-config.ts +3 -3
  123. package/src/metrics/send-event.ts +5 -1
  124. package/src/miniflare-cli/assets.ts +77 -35
  125. package/src/miniflare-cli/index.ts +22 -25
  126. package/src/miniflare-cli/tsconfig.json +9 -0
  127. package/src/miniflare-cli/tsconfig.tsbuildinfo +1 -0
  128. package/src/miniflare-cli/types.ts +11 -0
  129. package/src/module-collection.ts +9 -0
  130. package/src/pages/build.tsx +34 -2
  131. package/src/pages/constants.ts +4 -1
  132. package/src/pages/deployment-tails.tsx +284 -0
  133. package/src/pages/deployments.tsx +5 -27
  134. package/src/pages/dev.tsx +257 -103
  135. package/src/pages/errors.ts +48 -4
  136. package/src/pages/functions/buildPlugin.ts +84 -87
  137. package/src/pages/functions/buildWorker.ts +120 -110
  138. package/src/pages/functions/routes-transformation.ts +1 -14
  139. package/src/pages/functions/routes-validation.test.ts +403 -0
  140. package/src/pages/functions/routes-validation.ts +202 -0
  141. package/src/pages/functions/tsconfig.json +8 -0
  142. package/src/pages/functions/tsconfig.tsbuildinfo +1 -0
  143. package/src/pages/functions.tsx +5 -19
  144. package/src/pages/index.tsx +8 -0
  145. package/src/pages/prompt-select-project.tsx +31 -0
  146. package/src/pages/publish.tsx +121 -95
  147. package/src/pages/types.ts +1 -9
  148. package/src/pages/upload.tsx +71 -22
  149. package/src/pages/utils.ts +13 -2
  150. package/src/paths.ts +30 -4
  151. package/src/proxy.ts +375 -167
  152. package/src/publish/index.ts +270 -0
  153. package/src/{publish.ts → publish/publish.ts} +260 -80
  154. package/src/pubsub/pubsub-commands.tsx +4 -3
  155. package/src/queues/cli/commands/consumer/add.ts +71 -0
  156. package/src/queues/cli/commands/consumer/index.ts +22 -0
  157. package/src/queues/cli/commands/consumer/remove.ts +38 -0
  158. package/src/queues/cli/commands/create.ts +25 -0
  159. package/src/queues/cli/commands/delete.ts +26 -0
  160. package/src/queues/cli/commands/index.ts +36 -0
  161. package/src/queues/cli/commands/list.ts +25 -0
  162. package/src/queues/client.ts +135 -0
  163. package/src/queues/utils.ts +18 -0
  164. package/src/r2/constants.ts +4 -0
  165. package/src/{r2.ts → r2/helpers.ts} +2 -2
  166. package/src/r2/index.ts +289 -0
  167. package/src/routes.ts +140 -0
  168. package/src/secret/index.ts +379 -0
  169. package/src/sites.tsx +3 -3
  170. package/src/tail/createTail.ts +379 -0
  171. package/src/tail/index.ts +199 -300
  172. package/src/tail/printing.ts +2 -2
  173. package/src/tsconfig-sanity.ts +16 -0
  174. package/src/type-generation.ts +181 -0
  175. package/src/user/access.ts +68 -0
  176. package/src/user/auth-variables.ts +113 -0
  177. package/src/user/choose-account.tsx +1 -1
  178. package/src/user/index.ts +0 -1
  179. package/src/user/user.tsx +90 -43
  180. package/src/utils/collectKeyValues.ts +14 -0
  181. package/src/worker.ts +48 -1
  182. package/src/yargs-types.ts +24 -0
  183. package/src/zones.ts +33 -9
  184. package/templates/__tests__/pages-dev-util.test.ts +128 -0
  185. package/templates/__tests__/tsconfig-sanity.ts +12 -0
  186. package/templates/__tests__/tsconfig.json +8 -0
  187. package/templates/__tests__/tsconfig.tsbuildinfo +1 -0
  188. package/templates/d1-beta-facade.js +241 -0
  189. package/templates/facade.d.ts +14 -0
  190. package/templates/first-party-worker-module-facade.ts +4 -3
  191. package/templates/format-dev-errors.ts +7 -6
  192. package/templates/init-tests/test-jest-new-worker.js +23 -0
  193. package/templates/init-tests/test-vitest-new-worker.js +24 -0
  194. package/templates/init-tests/test-vitest-new-worker.ts +25 -0
  195. package/templates/middleware/loader-modules.ts +0 -2
  196. package/templates/middleware/loader-sw.ts +51 -31
  197. package/templates/middleware/middleware-miniflare3-json-error.ts +20 -0
  198. package/templates/middleware/middleware-scheduled.ts +2 -1
  199. package/templates/new-worker.js +1 -1
  200. package/templates/pages-dev-pipeline.ts +31 -0
  201. package/templates/pages-dev-util.ts +52 -0
  202. package/templates/pages-shim.ts +4 -1
  203. package/templates/pages-template-plugin.ts +5 -1
  204. package/templates/pages-template-worker.ts +21 -4
  205. package/templates/serve-static-assets.ts +16 -14
  206. package/templates/tsconfig-sanity.ts +11 -0
  207. package/templates/tsconfig.init.json +106 -0
  208. package/templates/tsconfig.json +5 -102
  209. package/templates/tsconfig.tsbuildinfo +1 -0
  210. package/wrangler-dist/cli.d.ts +606 -49
  211. package/wrangler-dist/cli.js +144952 -134581
  212. package/src/__tests__/helpers/msw/handlers/index.ts +0 -13
  213. package/src/environment-variables.ts +0 -35
  214. package/src/faye-websocket.d.ts +0 -6
  215. package/src/generate.ts +0 -131
  216. package/src/miniflare-cli/enum-keys.ts +0 -17
  217. package/src/preview.ts +0 -31
  218. package/src/user/env-vars.ts +0 -46
package/README.md CHANGED
@@ -82,7 +82,3 @@ For more commands and options, refer to the [documentation](https://developers.c
82
82
  ## Documentation
83
83
 
84
84
  For the latest Wrangler documentation, [click here](https://developers.cloudflare.com/workers/wrangler/).
85
-
86
- ```
87
-
88
- ```
package/bin/wrangler.js CHANGED
@@ -62,15 +62,21 @@ Consider using a Node.js version manager such as https://volta.sh/ or https://gi
62
62
  ...process.argv.slice(2),
63
63
  ],
64
64
  {
65
- stdio: "inherit",
65
+ stdio: ["inherit", "inherit", "inherit", "ipc"],
66
66
  env: {
67
67
  ...process.env,
68
68
  NODE_EXTRA_CA_CERTS: pathToCACerts,
69
69
  },
70
70
  }
71
- ).on("exit", (code) =>
72
- process.exit(code === undefined || code === null ? 0 : code)
73
- );
71
+ )
72
+ .on("exit", (code) =>
73
+ process.exit(code === undefined || code === null ? 0 : code)
74
+ )
75
+ .on("message", (message) => {
76
+ if (process.send) {
77
+ process.send(message);
78
+ }
79
+ });
74
80
  }
75
81
 
76
82
  /**
@@ -87,7 +93,15 @@ function runDelegatedWrangler() {
87
93
  } = JSON.parse(fs.readFileSync(packageJsonPath));
88
94
  const resolvedBinaryPath = path.resolve(packageJsonPath, "..", binaryPath);
89
95
 
90
- debug(`Delegating to locally-installed version of wrangler @ v${version}`);
96
+ // Make sure the user knows we're delegating to a different installation
97
+ const currentPackageJsonPath = path.resolve(__dirname, "..", "package.json");
98
+ const currentPackage = JSON.parse(fs.readFileSync(currentPackageJsonPath));
99
+ const argv = process.argv.slice(2).join(" ");
100
+ console.log(
101
+ `Delegating to locally-installed wrangler@${version} over global wrangler@${currentPackage.version}...
102
+ Run \`npx wrangler ${argv}\` to use the local version directly.
103
+ `
104
+ );
91
105
 
92
106
  // this call to `spawn` is simpler because the delegated version will do all
93
107
  // of the other work.
@@ -95,11 +109,17 @@ function runDelegatedWrangler() {
95
109
  process.execPath,
96
110
  [resolvedBinaryPath, ...process.argv.slice(2)],
97
111
  {
98
- stdio: "inherit",
112
+ stdio: ["inherit", "inherit", "inherit", "ipc"],
99
113
  }
100
- ).on("exit", (code) =>
101
- process.exit(code === undefined || code === null ? 0 : code)
102
- );
114
+ )
115
+ .on("exit", (code) =>
116
+ process.exit(code === undefined || code === null ? 0 : code)
117
+ )
118
+ .on("message", (message) => {
119
+ if (process.send) {
120
+ process.send(message);
121
+ }
122
+ });
103
123
  }
104
124
 
105
125
  /**
@@ -111,10 +111,10 @@ var require_mime = __commonJS({
111
111
  }
112
112
  });
113
113
 
114
- // ../pages-shared/src/environment-polyfills/index.ts
114
+ // ../pages-shared/environment-polyfills/index.ts
115
115
  var polyfill;
116
116
  var init_environment_polyfills = __esm({
117
- "../pages-shared/src/environment-polyfills/index.ts"() {
117
+ "../pages-shared/environment-polyfills/index.ts"() {
118
118
  polyfill = (environment) => {
119
119
  Object.entries(environment).map(([name, value]) => {
120
120
  Object.defineProperty(globalThis, name, {
@@ -128,27 +128,49 @@ var init_environment_polyfills = __esm({
128
128
  }
129
129
  });
130
130
 
131
- // ../pages-shared/src/environment-polyfills/miniflare.ts
131
+ // ../pages-shared/environment-polyfills/miniflare-tre.ts
132
+ var miniflare_tre_exports = {};
133
+ __export(miniflare_tre_exports, {
134
+ default: () => miniflare_tre_default
135
+ });
136
+ var miniflare_tre_default;
137
+ var init_miniflare_tre = __esm({
138
+ "../pages-shared/environment-polyfills/miniflare-tre.ts"() {
139
+ init_environment_polyfills();
140
+ miniflare_tre_default = async () => {
141
+ const mf = await import("@miniflare/tre");
142
+ polyfill({
143
+ fetch: mf.fetch,
144
+ Headers: mf.Headers,
145
+ Request: mf.Request,
146
+ Response: mf.Response
147
+ });
148
+ };
149
+ }
150
+ });
151
+
152
+ // ../pages-shared/environment-polyfills/miniflare.ts
132
153
  var miniflare_exports = {};
133
- import {
134
- fetch as miniflareFetch,
135
- Headers as MiniflareHeaders,
136
- Request as MiniflareRequest,
137
- Response as MiniflareResponse
138
- } from "@miniflare/core";
154
+ __export(miniflare_exports, {
155
+ default: () => miniflare_default
156
+ });
157
+ var miniflare_default;
139
158
  var init_miniflare = __esm({
140
- "../pages-shared/src/environment-polyfills/miniflare.ts"() {
159
+ "../pages-shared/environment-polyfills/miniflare.ts"() {
141
160
  init_environment_polyfills();
142
- polyfill({
143
- fetch: miniflareFetch,
144
- Headers: MiniflareHeaders,
145
- Request: MiniflareRequest,
146
- Response: MiniflareResponse
147
- });
161
+ miniflare_default = async () => {
162
+ const mf = await import("@miniflare/core");
163
+ polyfill({
164
+ fetch: mf.fetch,
165
+ Headers: mf.Headers,
166
+ Request: mf.Request,
167
+ Response: mf.Response
168
+ });
169
+ };
148
170
  }
149
171
  });
150
172
 
151
- // ../pages-shared/src/asset-server/responses.ts
173
+ // ../pages-shared/asset-server/responses.ts
152
174
  function mergeHeaders(base, extra) {
153
175
  base = new Headers(base ?? {});
154
176
  extra = new Headers(extra ?? {});
@@ -159,7 +181,7 @@ function mergeHeaders(base, extra) {
159
181
  }
160
182
  var OkResponse, MovedPermanentlyResponse, FoundResponse, NotModifiedResponse, PermanentRedirectResponse, NotFoundResponse, MethodNotAllowedResponse, NotAcceptableResponse, InternalServerErrorResponse, SeeOtherResponse, TemporaryRedirectResponse;
161
183
  var init_responses = __esm({
162
- "../pages-shared/src/asset-server/responses.ts"() {
184
+ "../pages-shared/asset-server/responses.ts"() {
163
185
  OkResponse = class extends Response {
164
186
  constructor(...[body, init]) {
165
187
  super(body, {
@@ -278,10 +300,10 @@ ${err.stack}`;
278
300
  }
279
301
  });
280
302
 
281
- // ../pages-shared/src/asset-server/rulesEngine.ts
303
+ // ../pages-shared/asset-server/rulesEngine.ts
282
304
  var ESCAPE_REGEX_CHARACTERS, escapeRegex, HOST_PLACEHOLDER_REGEX, PLACEHOLDER_REGEX2, replacer, generateRulesMatcher;
283
305
  var init_rulesEngine = __esm({
284
- "../pages-shared/src/asset-server/rulesEngine.ts"() {
306
+ "../pages-shared/asset-server/rulesEngine.ts"() {
285
307
  ESCAPE_REGEX_CHARACTERS = /[-/\\^$*+?.()|[\]{}]/g;
286
308
  escapeRegex = (str) => {
287
309
  return str.replace(ESCAPE_REGEX_CHARACTERS, "\\$&");
@@ -329,7 +351,16 @@ var init_rulesEngine = __esm({
329
351
  }
330
352
  });
331
353
 
332
- // ../pages-shared/src/asset-server/handler.ts
354
+ // ../pages-shared/asset-server/url.ts
355
+ function stringifyURLToRootRelativePathname(url) {
356
+ return `${url.pathname}${url.search}${url.hash}`;
357
+ }
358
+ var init_url = __esm({
359
+ "../pages-shared/asset-server/url.ts"() {
360
+ }
361
+ });
362
+
363
+ // ../pages-shared/asset-server/handler.ts
333
364
  var handler_exports = {};
334
365
  __export(handler_exports, {
335
366
  ANALYTICS_VERSION: () => ANALYTICS_VERSION2,
@@ -339,6 +370,7 @@ __export(handler_exports, {
339
370
  HEADERS_VERSION_V1: () => HEADERS_VERSION_V1,
340
371
  REDIRECTS_VERSION: () => REDIRECTS_VERSION2,
341
372
  generateHandler: () => generateHandler,
373
+ getResponseFromMatch: () => getResponseFromMatch,
342
374
  normaliseHeaders: () => normaliseHeaders,
343
375
  parseQualityWeightedList: () => parseQualityWeightedList
344
376
  });
@@ -409,22 +441,7 @@ async function generateHandler({
409
441
  async function generateResponse() {
410
442
  const match = staticRedirectsMatcher() || generateRedirectsMatcher()({ request })[0];
411
443
  if (match) {
412
- const { status, to } = match;
413
- const destination = new URL(to, request.url);
414
- const location = destination.origin === new URL(request.url).origin ? `${destination.pathname}${destination.search || search}${destination.hash}` : `${destination.href}${destination.search ? "" : search}${destination.hash}`;
415
- switch (status) {
416
- case 301:
417
- return new MovedPermanentlyResponse(location);
418
- case 303:
419
- return new SeeOtherResponse(location);
420
- case 307:
421
- return new TemporaryRedirectResponse(location);
422
- case 308:
423
- return new PermanentRedirectResponse(location);
424
- case 302:
425
- default:
426
- return new FoundResponse(location);
427
- }
444
+ return getResponseFromMatch(match, url);
428
445
  }
429
446
  if (!request.method.match(/^(get|head)$/i)) {
430
447
  return new MethodNotAllowedResponse();
@@ -491,34 +508,6 @@ async function generateHandler({
491
508
  ...Object.fromEntries(existingHeaders.entries()),
492
509
  ...Object.fromEntries(extraHeaders.entries())
493
510
  });
494
- const headersMatcher = generateRulesMatcher(
495
- headerRules,
496
- ({ set = {}, unset = [] }, replacements) => {
497
- const replacedSet = {};
498
- Object.keys(set).forEach((key) => {
499
- replacedSet[key] = replacer(set[key], replacements);
500
- });
501
- return {
502
- set: replacedSet,
503
- unset
504
- };
505
- }
506
- );
507
- const matches = headersMatcher({ request });
508
- const setMap = /* @__PURE__ */ new Set();
509
- matches.forEach(({ set = {}, unset = [] }) => {
510
- Object.keys(set).forEach((key) => {
511
- if (setMap.has(key.toLowerCase())) {
512
- headers.append(key, set[key]);
513
- } else {
514
- headers.set(key, set[key]);
515
- setMap.add(key.toLowerCase());
516
- }
517
- });
518
- unset.forEach((key) => {
519
- headers.delete(key);
520
- });
521
- });
522
511
  if (earlyHintsCache) {
523
512
  const preEarlyHintsHeaders = new Headers(headers);
524
513
  const earlyHintsCacheKey = `${protocol}//${host}${pathname}`;
@@ -537,8 +526,15 @@ async function generateHandler({
537
526
  (async () => {
538
527
  try {
539
528
  const links = [];
540
- const transformedResponse = new HTMLRewriter().on("link[rel=preconnect],link[rel=preload]", {
529
+ const transformedResponse = new HTMLRewriter().on("link[rel~=preconnect],link[rel~=preload]", {
541
530
  element(element) {
531
+ for (const [attributeName] of element.attributes) {
532
+ if (!ALLOWED_EARLY_HINT_LINK_ATTRIBUTES.includes(
533
+ attributeName.toLowerCase()
534
+ )) {
535
+ return;
536
+ }
537
+ }
542
538
  const href = element.getAttribute("href") || void 0;
543
539
  const rel = element.getAttribute("rel") || void 0;
544
540
  const as = element.getAttribute("as") || void 0;
@@ -568,6 +564,34 @@ async function generateHandler({
568
564
  );
569
565
  }
570
566
  }
567
+ const headersMatcher = generateRulesMatcher(
568
+ headerRules,
569
+ ({ set = {}, unset = [] }, replacements) => {
570
+ const replacedSet = {};
571
+ Object.keys(set).forEach((key) => {
572
+ replacedSet[key] = replacer(set[key], replacements);
573
+ });
574
+ return {
575
+ set: replacedSet,
576
+ unset
577
+ };
578
+ }
579
+ );
580
+ const matches = headersMatcher({ request });
581
+ const setMap = /* @__PURE__ */ new Set();
582
+ matches.forEach(({ set = {}, unset = [] }) => {
583
+ unset.forEach((key) => {
584
+ headers.delete(key);
585
+ });
586
+ Object.keys(set).forEach((key) => {
587
+ if (setMap.has(key.toLowerCase())) {
588
+ headers.append(key, set[key]);
589
+ } else {
590
+ headers.set(key, set[key]);
591
+ setMap.add(key.toLowerCase());
592
+ }
593
+ });
594
+ });
571
595
  return new Response(
572
596
  [101, 204, 205, 304].includes(response.status) ? null : response.body,
573
597
  {
@@ -696,6 +720,27 @@ async function generateHandler({
696
720
  );
697
721
  }
698
722
  }
723
+ function getResponseFromMatch({
724
+ status,
725
+ to
726
+ }, requestUrl) {
727
+ const destination = new URL(to, requestUrl);
728
+ destination.search = destination.search || requestUrl.search;
729
+ const location = destination.origin === requestUrl.origin ? stringifyURLToRootRelativePathname(destination) : destination.toString();
730
+ switch (status) {
731
+ case 301:
732
+ return new MovedPermanentlyResponse(location);
733
+ case 303:
734
+ return new SeeOtherResponse(location);
735
+ case 307:
736
+ return new TemporaryRedirectResponse(location);
737
+ case 308:
738
+ return new PermanentRedirectResponse(location);
739
+ case 302:
740
+ default:
741
+ return new FoundResponse(location);
742
+ }
743
+ }
699
744
  function parseQualityWeightedList(list = "") {
700
745
  const items = {};
701
746
  list.replace(/\s/g, "").split(",").forEach((el) => {
@@ -716,11 +761,12 @@ function isPreview(url) {
716
761
  }
717
762
  return false;
718
763
  }
719
- var ASSET_PRESERVATION_CACHE, CACHE_CONTROL_PRESERVATION, CACHE_CONTROL_BROWSER, REDIRECTS_VERSION2, HEADERS_VERSION2, HEADERS_VERSION_V1, ANALYTICS_VERSION2;
764
+ var ASSET_PRESERVATION_CACHE, CACHE_CONTROL_PRESERVATION, CACHE_CONTROL_BROWSER, REDIRECTS_VERSION2, HEADERS_VERSION2, HEADERS_VERSION_V1, ANALYTICS_VERSION2, ALLOWED_EARLY_HINT_LINK_ATTRIBUTES;
720
765
  var init_handler = __esm({
721
- "../pages-shared/src/asset-server/handler.ts"() {
766
+ "../pages-shared/asset-server/handler.ts"() {
722
767
  init_responses();
723
768
  init_rulesEngine();
769
+ init_url();
724
770
  ASSET_PRESERVATION_CACHE = "assetPreservationCache";
725
771
  CACHE_CONTROL_PRESERVATION = "public, s-maxage=604800";
726
772
  CACHE_CONTROL_BROWSER = "public, max-age=0, must-revalidate";
@@ -728,6 +774,7 @@ var init_handler = __esm({
728
774
  HEADERS_VERSION2 = 2;
729
775
  HEADERS_VERSION_V1 = 1;
730
776
  ANALYTICS_VERSION2 = 1;
777
+ ALLOWED_EARLY_HINT_LINK_ATTRIBUTES = ["rel", "as", "href"];
731
778
  }
732
779
  });
733
780
 
@@ -738,11 +785,11 @@ import {
738
785
  DurableObjectStub
739
786
  } from "@miniflare/durable-objects";
740
787
  import {
741
- Log,
742
- LogLevel,
788
+ Log as MiniflareLog,
789
+ LogLevel as MiniflareLogLevel,
743
790
  Miniflare,
744
- Response as MiniflareResponse3,
745
- Request as MiniflareRequest3
791
+ Request as MiniflareRequest,
792
+ Response as MiniflareResponse
746
793
  } from "miniflare";
747
794
 
748
795
  // ../../node_modules/yargs/lib/platform-shims/esm.mjs
@@ -5564,7 +5611,7 @@ var FatalError = class extends Error {
5564
5611
  import { existsSync, lstatSync, readFileSync as readFileSync5 } from "node:fs";
5565
5612
  import { join } from "node:path";
5566
5613
 
5567
- // ../pages-shared/src/metadata-generator/constants.ts
5614
+ // ../pages-shared/metadata-generator/constants.ts
5568
5615
  var REDIRECTS_VERSION = 1;
5569
5616
  var HEADERS_VERSION = 2;
5570
5617
  var ANALYTICS_VERSION = 1;
@@ -5578,12 +5625,13 @@ var UNSET_OPERATOR = "! ";
5578
5625
  var SPLAT_REGEX = /\*/g;
5579
5626
  var PLACEHOLDER_REGEX = /:\w+/g;
5580
5627
 
5581
- // ../pages-shared/src/metadata-generator/createMetadataObject.ts
5628
+ // ../pages-shared/metadata-generator/createMetadataObject.ts
5582
5629
  function createMetadataObject({
5583
5630
  redirects,
5584
5631
  headers,
5585
5632
  webAnalyticsToken,
5586
5633
  deploymentId,
5634
+ failOpen,
5587
5635
  logger = (_message) => {
5588
5636
  }
5589
5637
  }) {
@@ -5591,7 +5639,8 @@ function createMetadataObject({
5591
5639
  ...constructRedirects({ redirects, logger }),
5592
5640
  ...constructHeaders({ headers, logger }),
5593
5641
  ...constructWebAnalytics({ webAnalyticsToken, logger }),
5594
- deploymentId
5642
+ deploymentId,
5643
+ failOpen
5595
5644
  };
5596
5645
  }
5597
5646
  function constructRedirects({
@@ -5622,7 +5671,11 @@ function constructRedirects({
5622
5671
  for (const rule of redirects.rules) {
5623
5672
  if (!rule.from.match(SPLAT_REGEX) && !rule.from.match(PLACEHOLDER_REGEX)) {
5624
5673
  if (canCreateStaticRule) {
5625
- staticRedirects[rule.from] = { status: rule.status, to: rule.to };
5674
+ staticRedirects[rule.from] = {
5675
+ status: rule.status,
5676
+ to: rule.to,
5677
+ lineNumber: rule.lineNumber
5678
+ };
5626
5679
  continue;
5627
5680
  } else {
5628
5681
  logger(
@@ -5691,7 +5744,7 @@ function constructWebAnalytics({
5691
5744
  };
5692
5745
  }
5693
5746
 
5694
- // ../pages-shared/src/metadata-generator/validateURL.ts
5747
+ // ../pages-shared/metadata-generator/validateURL.ts
5695
5748
  var extractPathname = (path = "/", includeSearch, includeHash) => {
5696
5749
  if (!path.startsWith("/"))
5697
5750
  path = `/${path}`;
@@ -5734,7 +5787,7 @@ var validateUrl = (token, onlyRelative = false, includeSearch = false, includeHa
5734
5787
  ];
5735
5788
  };
5736
5789
 
5737
- // ../pages-shared/src/metadata-generator/parseHeaders.ts
5790
+ // ../pages-shared/metadata-generator/parseHeaders.ts
5738
5791
  var LINE_IS_PROBABLY_A_PATH = new RegExp(/^([^\s]+:\/\/|^\/)/);
5739
5792
  function parseHeaders(input) {
5740
5793
  const lines = input.split("\n");
@@ -5869,7 +5922,7 @@ function isValidRule(rule) {
5869
5922
  return Object.keys(rule.headers).length > 0 || rule.unsetHeaders.length > 0;
5870
5923
  }
5871
5924
 
5872
- // ../pages-shared/src/metadata-generator/parseRedirects.ts
5925
+ // ../pages-shared/metadata-generator/parseRedirects.ts
5873
5926
  function parseRedirects(input) {
5874
5927
  const lines = input.split("\n");
5875
5928
  const rules = [];
@@ -5964,11 +6017,6 @@ function parseRedirects(input) {
5964
6017
 
5965
6018
  // src/miniflare-cli/assets.ts
5966
6019
  var import_mime = __toESM(require_mime());
5967
- import { fetch as miniflareFetch2 } from "@miniflare/core";
5968
- import {
5969
- Response as MiniflareResponse2,
5970
- Request as MiniflareRequest2
5971
- } from "@miniflare/core";
5972
6020
  import { watch } from "chokidar";
5973
6021
 
5974
6022
  // src/pages/hash.tsx
@@ -5984,28 +6032,34 @@ var hashFile = (filepath) => {
5984
6032
 
5985
6033
  // src/miniflare-cli/assets.ts
5986
6034
  async function generateASSETSBinding(options) {
5987
- const assetsFetch = options.directory !== void 0 ? await generateAssetsFetch(options.directory, options.log) : invalidAssetsFetch;
6035
+ const assetsFetch = options.directory !== void 0 ? await generateAssetsFetch(options.directory, options.log, options.tre) : invalidAssetsFetch;
6036
+ const miniflare = options.tre ? await import("@miniflare/tre") : await import("@miniflare/core");
6037
+ const Request = miniflare.Request;
6038
+ const Response2 = miniflare.Response;
6039
+ const fetch2 = options.tre ? miniflare.fetch : (await import("@miniflare/web-sockets")).upgradingFetch;
5988
6040
  return async function(miniflareRequest) {
5989
6041
  if (options.proxyPort) {
5990
6042
  try {
5991
6043
  const url = new URL(miniflareRequest.url);
5992
6044
  url.host = `localhost:${options.proxyPort}`;
5993
- return await miniflareFetch2(url, miniflareRequest);
6045
+ const proxyRequest = new Request(url, miniflareRequest);
6046
+ if (proxyRequest.headers.get("Upgrade") === "websocket") {
6047
+ proxyRequest.headers.delete("Sec-WebSocket-Accept");
6048
+ proxyRequest.headers.delete("Sec-WebSocket-Key");
6049
+ }
6050
+ return await fetch2(proxyRequest);
5994
6051
  } catch (thrown) {
5995
6052
  options.log.error(new Error(`Could not proxy request: ${thrown}`));
5996
- return new MiniflareResponse2(
5997
- `[wrangler] Could not proxy request: ${thrown}`,
5998
- {
5999
- status: 502
6000
- }
6001
- );
6053
+ return new Response2(`[wrangler] Could not proxy request: ${thrown}`, {
6054
+ status: 502
6055
+ });
6002
6056
  }
6003
6057
  } else {
6004
6058
  try {
6005
6059
  return await assetsFetch(miniflareRequest);
6006
6060
  } catch (thrown) {
6007
6061
  options.log.error(new Error(`Could not serve static asset: ${thrown}`));
6008
- return new MiniflareResponse2(
6062
+ return new Response2(
6009
6063
  `[wrangler] Could not serve static asset: ${thrown}`,
6010
6064
  { status: 502 }
6011
6065
  );
@@ -6013,8 +6067,11 @@ async function generateASSETSBinding(options) {
6013
6067
  }
6014
6068
  };
6015
6069
  }
6016
- async function generateAssetsFetch(directory, log) {
6017
- await Promise.resolve().then(() => (init_miniflare(), miniflare_exports));
6070
+ async function generateAssetsFetch(directory, log, tre) {
6071
+ const polyfill2 = tre ? (await Promise.resolve().then(() => (init_miniflare_tre(), miniflare_tre_exports))).default : (await Promise.resolve().then(() => (init_miniflare(), miniflare_exports))).default;
6072
+ await polyfill2();
6073
+ const miniflare = tre ? await import("@miniflare/tre") : await import("@miniflare/core");
6074
+ const Request = miniflare.Request;
6018
6075
  const { generateHandler: generateHandler2, parseQualityWeightedList: parseQualityWeightedList2 } = await Promise.resolve().then(() => (init_handler(), handler_exports));
6019
6076
  const headersFile = join(directory, "_headers");
6020
6077
  const redirectsFile = join(directory, "_redirects");
@@ -6099,13 +6156,16 @@ async function generateAssetsFetch(directory, log) {
6099
6156
  );
6100
6157
  }
6101
6158
  const body = readFileSync5(filepath);
6102
- const contentType = (0, import_mime.getType)(filepath) || "application/octet-stream";
6159
+ let contentType = (0, import_mime.getType)(filepath) || "application/octet-stream";
6160
+ if (contentType.startsWith("text/") && !contentType.includes("charset")) {
6161
+ contentType = `${contentType}; charset=utf-8`;
6162
+ }
6103
6163
  return { body, contentType };
6104
6164
  }
6105
6165
  });
6106
6166
  };
6107
6167
  return async (input, init) => {
6108
- const request = new MiniflareRequest2(input, init);
6168
+ const request = new Request(input, init);
6109
6169
  return await generateResponse(request);
6110
6170
  };
6111
6171
  }
@@ -6115,18 +6175,6 @@ var invalidAssetsFetch = () => {
6115
6175
  );
6116
6176
  };
6117
6177
 
6118
- // src/miniflare-cli/enum-keys.ts
6119
- var enumObject = (e) => {
6120
- const copy = { ...e };
6121
- Object.values(e).forEach(
6122
- (value) => typeof value === "number" && delete copy[value]
6123
- );
6124
- return copy;
6125
- };
6126
- var enumKeys = (e) => {
6127
- return Object.keys(enumObject(e));
6128
- };
6129
-
6130
6178
  // src/miniflare-cli/request-context.ts
6131
6179
  var getRequestContextCheckOptions = async () => {
6132
6180
  let hasAsyncLocalStorage = true;
@@ -6147,7 +6195,7 @@ var getRequestContextCheckOptions = async () => {
6147
6195
  };
6148
6196
 
6149
6197
  // src/miniflare-cli/index.ts
6150
- var NoOpLog = class extends Log {
6198
+ var MiniflareNoOpLog = class extends MiniflareLog {
6151
6199
  log() {
6152
6200
  }
6153
6201
  error(message) {
@@ -6155,18 +6203,19 @@ var NoOpLog = class extends Log {
6155
6203
  }
6156
6204
  };
6157
6205
  async function main() {
6158
- const args = await yargs_default(hideBin(process.argv)).help(false).version(false).option("log", {
6159
- choices: enumKeys(LogLevel)
6160
- }).argv;
6161
- const logLevel = LogLevel[args.log ?? "INFO"];
6206
+ const args = await yargs_default(hideBin(process.argv)).help(false).version(false).argv;
6162
6207
  const requestContextCheckOptions = await getRequestContextCheckOptions();
6163
6208
  const config = {
6164
6209
  ...JSON.parse(args._[0] ?? "{}"),
6165
6210
  ...requestContextCheckOptions
6166
6211
  };
6167
- config.log = config.disableLogs ? new NoOpLog() : new Log(logLevel, config.logOptions);
6168
- if (logLevel > LogLevel.INFO) {
6169
- console.log("OPTIONS:\n", JSON.stringify(config, null, 2));
6212
+ let logLevelString = config.logLevel.toUpperCase();
6213
+ if (logLevelString === "LOG")
6214
+ logLevelString = "INFO";
6215
+ const logLevel = MiniflareLogLevel[logLevelString];
6216
+ config.log = logLevel === MiniflareLogLevel.NONE ? new MiniflareNoOpLog() : new MiniflareLog(logLevel, config.logOptions);
6217
+ if (logLevel === MiniflareLogLevel.DEBUG) {
6218
+ console.log("MINIFLARE OPTIONS:\n", JSON.stringify(config, null, 2));
6170
6219
  }
6171
6220
  config.bindings = {
6172
6221
  ...config.bindings,
@@ -6184,12 +6233,12 @@ async function main() {
6184
6233
  namespace.get = (id) => {
6185
6234
  const stub = new DurableObjectStub(factory, id);
6186
6235
  stub.fetch = (...reqArgs) => {
6187
- const requestFromArgs = new MiniflareRequest3(...reqArgs);
6236
+ const requestFromArgs = new MiniflareRequest(...reqArgs);
6188
6237
  const url = new URL(requestFromArgs.url);
6189
6238
  url.host = host;
6190
6239
  if (port !== void 0)
6191
6240
  url.port = port.toString();
6192
- const request = new MiniflareRequest3(
6241
+ const request = new MiniflareRequest(
6193
6242
  url.toString(),
6194
6243
  requestFromArgs
6195
6244
  );
@@ -6222,7 +6271,8 @@ async function main() {
6222
6271
  const options = {
6223
6272
  log: config.log,
6224
6273
  proxyPort: opts.proxyPort,
6225
- directory: opts.directory
6274
+ directory: opts.directory,
6275
+ tre: false
6226
6276
  };
6227
6277
  config.serviceBindings = {
6228
6278
  ...config.serviceBindings,
@@ -6248,7 +6298,7 @@ async function main() {
6248
6298
  }`,
6249
6299
  serviceBindings: {
6250
6300
  DO: async (request) => {
6251
- request = new MiniflareRequest3(request);
6301
+ request = new MiniflareRequest(request);
6252
6302
  const name = request.headers.get("x-miniflare-durable-object-name");
6253
6303
  const idString = request.headers.get(
6254
6304
  "x-miniflare-durable-object-id"
@@ -6256,7 +6306,7 @@ async function main() {
6256
6306
  request.headers.delete("x-miniflare-durable-object-name");
6257
6307
  request.headers.delete("x-miniflare-durable-object-id");
6258
6308
  if (!name || !idString) {
6259
- return new MiniflareResponse3(
6309
+ return new MiniflareResponse(
6260
6310
  "[durable-object-proxy-err] Missing `x-miniflare-durable-object-name` or `x-miniflare-durable-object-id` headers.",
6261
6311
  { status: 400 }
6262
6312
  );
@@ -6264,14 +6314,14 @@ async function main() {
6264
6314
  const namespace = await mf?.getDurableObjectNamespace(name);
6265
6315
  const id = namespace?.idFromString(idString);
6266
6316
  if (!id) {
6267
- return new MiniflareResponse3(
6317
+ return new MiniflareResponse(
6268
6318
  "[durable-object-proxy-err] Could not generate an ID. Possibly due to a mismatched DO name and ID?",
6269
6319
  { status: 500 }
6270
6320
  );
6271
6321
  }
6272
6322
  const stub = namespace?.get(id);
6273
6323
  if (!stub) {
6274
- return new MiniflareResponse3(
6324
+ return new MiniflareResponse(
6275
6325
  "[durable-object-proxy-err] Could not generate a stub. Possibly due to a mismatched DO name and ID?",
6276
6326
  { status: 500 }
6277
6327
  );
@@ -6286,7 +6336,7 @@ async function main() {
6286
6336
  }
6287
6337
  process.send && process.send(
6288
6338
  JSON.stringify({
6289
- mfPort,
6339
+ port: mfPort,
6290
6340
  ready: true,
6291
6341
  durableObjectsPort: durableObjectsMfPort
6292
6342
  })