wrangler 0.0.0-eaea98f7 → 0.0.0-eaf71b86c

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 (33) hide show
  1. package/README.md +5 -1
  2. package/bin/wrangler.js +0 -28
  3. package/config-schema.json +3074 -0
  4. package/package.json +66 -81
  5. package/templates/checked-fetch.js +1 -1
  6. package/templates/facade.d.ts +7 -5
  7. package/templates/gitignore +2 -4
  8. package/templates/init-tests/test-vitest-new-worker.js +1 -1
  9. package/templates/init-tests/test-vitest-new-worker.ts +1 -1
  10. package/templates/middleware/loader-modules.ts +92 -95
  11. package/templates/middleware/loader-sw.ts +4 -3
  12. package/templates/middleware/middleware-ensure-req-body-drained.ts +18 -0
  13. package/templates/middleware/middleware-miniflare3-json-error.ts +0 -1
  14. package/templates/middleware/middleware-mock-analytics-engine.d.ts +3 -0
  15. package/templates/middleware/middleware-mock-analytics-engine.ts +30 -0
  16. package/templates/middleware/middleware-scheduled.ts +15 -1
  17. package/templates/middleware/middleware-serve-static-assets.ts +7 -7
  18. package/templates/pages-dev-pipeline.ts +2 -1
  19. package/templates/pages-template-plugin.ts +2 -2
  20. package/templates/pages-template-worker.ts +1 -1
  21. package/templates/startDevWorker/InspectorProxyWorker.ts +664 -0
  22. package/templates/startDevWorker/ProxyWorker.ts +336 -0
  23. package/templates/tsconfig.init.json +4 -87
  24. package/wrangler-dist/InspectorProxyWorker.js +464 -0
  25. package/wrangler-dist/InspectorProxyWorker.js.map +6 -0
  26. package/wrangler-dist/ProxyWorker.js +241 -0
  27. package/wrangler-dist/ProxyWorker.js.map +6 -0
  28. package/wrangler-dist/cli.d.ts +24954 -228
  29. package/wrangler-dist/cli.js +140167 -73875
  30. package/Cloudflare_CA.pem +0 -18
  31. package/templates/middleware/middleware-d1-beta.d.ts +0 -3
  32. package/templates/middleware/middleware-multiworker-dev.d.ts +0 -4
  33. package/templates/middleware/middleware-multiworker-dev.ts +0 -68
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wrangler",
3
- "version": "0.0.0-eaea98f7",
3
+ "version": "0.0.0-eaf71b86c",
4
4
  "description": "Command-line interface for all things Cloudflare Workers",
5
5
  "keywords": [
6
6
  "wrangler",
@@ -47,166 +47,151 @@
47
47
  "wrangler-dist",
48
48
  "templates",
49
49
  "kv-asset-handler.js",
50
- "Cloudflare_CA.pem"
50
+ "config-schema.json"
51
51
  ],
52
- "jest": {
53
- "coverageReporters": [
54
- "json",
55
- "html",
56
- "text",
57
- "cobertura"
58
- ],
59
- "moduleNameMapper": {
60
- "clipboardy": "<rootDir>/src/__tests__/helpers/clipboardy-mock.js",
61
- "miniflare/cli": "<rootDir>/../../node_modules/miniflare/dist/src/cli.js"
62
- },
63
- "restoreMocks": true,
64
- "setupFilesAfterEnv": [
65
- "<rootDir>/src/__tests__/jest.setup.ts"
66
- ],
67
- "testRegex": "src/__tests__/.*\\.(test|spec)\\.[jt]sx?$",
68
- "testTimeout": 50000,
69
- "transform": {
70
- "^.+\\.c?(t|j)sx?$": [
71
- "esbuild-jest",
72
- {
73
- "sourcemap": true
74
- }
75
- ]
76
- },
77
- "transformIgnorePatterns": [
78
- "node_modules/.pnpm/(?!find-up|locate-path|p-locate|p-limit|p-timeout|p-queue|yocto-queue|path-exists|execa|strip-final-newline|npm-run-path|path-key|onetime|mimic-fn|human-signals|is-stream|get-port|supports-color|pretty-bytes|npx-import)"
79
- ],
80
- "snapshotFormat": {
81
- "escapeString": true,
82
- "printBasicPrototype": true
83
- }
84
- },
85
52
  "dependencies": {
86
- "@cloudflare/kv-asset-handler": "^0.2.0",
87
53
  "@esbuild-plugins/node-globals-polyfill": "^0.2.3",
88
54
  "@esbuild-plugins/node-modules-polyfill": "^0.2.2",
89
55
  "blake3-wasm": "^2.1.5",
90
56
  "chokidar": "^3.5.3",
91
57
  "esbuild": "0.17.19",
92
- "miniflare": "3.20231025.0",
93
58
  "nanoid": "^3.3.3",
94
- "path-to-regexp": "^6.2.0",
59
+ "path-to-regexp": "^6.3.0",
60
+ "resolve": "^1.22.8",
95
61
  "resolve.exports": "^2.0.2",
96
62
  "selfsigned": "^2.0.1",
97
- "source-map": "0.6.1",
98
- "source-map-support": "0.5.21",
99
- "xxhash-wasm": "^1.0.1"
63
+ "source-map": "^0.6.1",
64
+ "unenv": "npm:unenv-nightly@2.0.0-20241009-125958-e8ea22f",
65
+ "workerd": "1.20240925.0",
66
+ "xxhash-wasm": "^1.0.1",
67
+ "@cloudflare/kv-asset-handler": "0.3.4",
68
+ "@cloudflare/workers-shared": "0.0.0-eaf71b86c",
69
+ "miniflare": "0.0.0-eaf71b86c"
100
70
  },
101
71
  "devDependencies": {
102
- "@cloudflare/eslint-config-worker": "*",
103
72
  "@cloudflare/types": "^6.18.4",
104
- "https-proxy-agent": "7.0.2",
105
- "@cloudflare/workers-types": "^4.20230914.0",
73
+ "@cloudflare/workers-types": "^4.20240925.0",
74
+ "@cspotcode/source-map-support": "0.8.1",
106
75
  "@iarna/toml": "^3.0.0",
107
- "@microsoft/api-extractor": "^7.28.3",
76
+ "@microsoft/api-extractor": "^7.47.0",
77
+ "@sentry/node": "^7.86.0",
78
+ "@sentry/types": "^7.86.0",
79
+ "@sentry/utils": "^7.86.0",
108
80
  "@types/body-parser": "^1.19.2",
109
- "@types/busboy": "^1.5.0",
110
81
  "@types/command-exists": "^1.2.0",
111
82
  "@types/express": "^4.17.13",
112
- "@types/glob-to-regexp": "0.4.1",
83
+ "@types/glob-to-regexp": "^0.4.1",
113
84
  "@types/is-ci": "^3.0.0",
114
85
  "@types/javascript-time-ago": "^2.0.3",
115
- "@types/jest": "^29.5.5",
116
- "@types/mime": "^2.0.3",
86
+ "@types/mime": "^3.0.4",
117
87
  "@types/minimatch": "^5.1.2",
118
88
  "@types/prompts": "^2.0.14",
119
- "@types/react": "^17.0.37",
89
+ "@types/react": "^18.3.3",
90
+ "@types/resolve": "^1.20.6",
120
91
  "@types/serve-static": "^1.13.10",
121
92
  "@types/shell-quote": "^1.7.2",
122
93
  "@types/signal-exit": "^3.0.1",
123
- "@types/source-map-support": "^0.5.7",
124
94
  "@types/supports-color": "^8.1.1",
125
- "@types/ws": "^8.5.3",
126
- "@types/yargs": "^17.0.10",
95
+ "@types/ws": "^8.5.7",
96
+ "@types/yargs": "^17.0.22",
97
+ "@vitest/ui": "^1.6.0",
127
98
  "@webcontainer/env": "^1.1.0",
128
99
  "body-parser": "^1.20.0",
129
- "chalk": "^2.4.2",
100
+ "chalk": "^5.2.0",
130
101
  "cli-table3": "^0.6.3",
131
102
  "clipboardy": "^3.0.0",
132
103
  "cmd-shim": "^4.1.0",
133
104
  "command-exists": "^1.2.9",
134
- "concurrently": "^7.2.2",
135
- "devtools-protocol": "^0.0.955664",
105
+ "concurrently": "^8.2.2",
106
+ "devtools-protocol": "^0.0.1182435",
136
107
  "dotenv": "^16.0.0",
137
- "esbuild-jest": "0.5.0",
108
+ "es-module-lexer": "^1.3.0",
138
109
  "execa": "^6.1.0",
139
110
  "express": "^4.18.1",
140
- "finalhandler": "^1.2.0",
141
111
  "find-up": "^6.3.0",
142
- "get-port": "^6.1.2",
143
- "glob-to-regexp": "0.4.1",
112
+ "get-port": "^7.0.0",
113
+ "glob-to-regexp": "^0.4.1",
144
114
  "http-terminator": "^3.2.0",
115
+ "https-proxy-agent": "7.0.2",
145
116
  "ignore": "^5.2.0",
146
117
  "ink": "^3.2.0",
147
118
  "ink-select-input": "^4.2.1",
148
119
  "ink-spinner": "^4.0.3",
149
120
  "ink-table": "^3.0.0",
150
- "ink-testing-library": "^2.1.0",
151
- "ink-text-input": "^4.0.3",
152
121
  "is-ci": "^3.0.1",
153
122
  "javascript-time-ago": "^2.5.4",
154
- "jest": "^29.7.0",
155
- "jest-fetch-mock": "^3.0.3",
156
- "jest-websocket-mock": "^2.5.0",
123
+ "md5-file": "5.0.0",
157
124
  "mime": "^3.0.0",
158
125
  "minimatch": "^5.1.0",
159
- "msw": "^0.49.1",
160
- "npx-import": "^1.1.3",
126
+ "mock-socket": "^9.3.1",
127
+ "msw": "^2.3.0",
161
128
  "open": "^8.4.0",
162
129
  "p-queue": "^7.2.0",
163
130
  "patch-console": "^1.0.0",
164
131
  "pretty-bytes": "^6.0.0",
165
132
  "prompts": "^2.4.2",
166
- "react": "^17.0.2",
133
+ "ps-list": "^8.1.1",
134
+ "react": "^18.3.1",
167
135
  "react-error-boundary": "^3.1.4",
168
- "remove-accents-esm": "^0.0.1",
169
136
  "semiver": "^1.1.0",
170
137
  "serve-static": "^1.15.0",
171
138
  "shell-quote": "^1.8.1",
172
139
  "shellac": "^0.8.0",
173
140
  "signal-exit": "^3.0.7",
174
- "strip-ansi": "^7.0.1",
141
+ "strip-ansi": "^7.1.0",
175
142
  "supports-color": "^9.2.2",
176
143
  "timeago.js": "^4.0.2",
177
144
  "ts-dedent": "^2.2.0",
178
- "undici": "5.20.0",
145
+ "ts-json-schema-generator": "^1.5.0",
146
+ "undici": "^5.28.4",
179
147
  "update-check": "^1.5.4",
180
- "vitest": "^0.34.4",
181
- "ws": "^8.5.0",
148
+ "vitest": "~2.1.1",
149
+ "vitest-websocket-mock": "^0.3.0",
150
+ "ws": "^8.17.1",
182
151
  "xdg-app-paths": "^8.3.0",
183
152
  "yargs": "^17.7.2",
184
153
  "yoga-layout": "file:../../vendor/yoga-layout-2.0.0-beta.1.tgz",
185
- "@cloudflare/cli": "1.0.0",
186
- "@cloudflare/pages-shared": "^0.10.1",
154
+ "@cloudflare/cli": "1.1.1",
155
+ "@cloudflare/eslint-config-worker": "1.1.0",
156
+ "@cloudflare/pages-shared": "^0.11.63",
187
157
  "@cloudflare/workers-tsconfig": "0.0.0"
188
158
  },
159
+ "peerDependencies": {
160
+ "@cloudflare/workers-types": "^4.20240925.0"
161
+ },
162
+ "peerDependenciesMeta": {
163
+ "@cloudflare/workers-types": {
164
+ "optional": true
165
+ }
166
+ },
189
167
  "optionalDependencies": {
190
168
  "fsevents": "~2.3.2"
191
169
  },
192
170
  "engines": {
193
171
  "node": ">=16.17.0"
194
172
  },
173
+ "volta": {
174
+ "extends": "../../package.json"
175
+ },
176
+ "workers-sdk": {
177
+ "prerelease": true
178
+ },
195
179
  "scripts": {
196
180
  "assert-git-version": "node -r esbuild-register scripts/assert-git-version.ts",
197
- "build": "pnpm run clean && pnpm run bundle && pnpm run emit-types",
181
+ "build": "pnpm run clean && pnpm run bundle && pnpm run emit-types && pnpm run generate-json-schema",
198
182
  "bundle": "node -r esbuild-register scripts/bundle.ts",
199
- "check:lint": "eslint .",
183
+ "check:lint": "eslint . --max-warnings=0",
200
184
  "check:type": "tsc",
201
185
  "clean": "rimraf wrangler-dist miniflare-dist emitted-types",
202
186
  "dev": "pnpm run clean && concurrently -c black,blue --kill-others-on-fail false \"pnpm run bundle --watch\" \"pnpm run check:type --watch --preserveWatchOutput\"",
203
187
  "emit-types": "tsc -p tsconfig.emit.json && node -r esbuild-register scripts/emit-types.ts",
188
+ "generate-json-schema": "pnpm exec ts-json-schema-generator --no-type-check --path src/config/config.ts --type RawConfig --out config-schema.json",
204
189
  "start": "pnpm run bundle && cross-env NODE_OPTIONS=--enable-source-maps ./bin/wrangler.js",
205
- "test": "pnpm run assert-git-version && jest",
206
- "test:ci": "pnpm run test --coverage",
190
+ "test": "pnpm run assert-git-version && vitest",
191
+ "test:ci": "pnpm run test run",
207
192
  "test:debug": "pnpm run test --silent=false --verbose=true",
208
- "test:e2e": "vitest --test-timeout 240000 --single-thread --dir ./e2e run",
209
- "test:watch": "pnpm run test --runInBand --testTimeout=50000 --watch",
193
+ "test:e2e": "vitest -c ./e2e/vitest.config.mts",
194
+ "test:watch": "pnpm run test --testTimeout=50000 --watch",
210
195
  "type:tests": "tsc -p ./src/__tests__/tsconfig.json && tsc -p ./e2e/tsconfig.json"
211
196
  }
212
197
  }
@@ -9,7 +9,7 @@ function checkURL(request, init) {
9
9
  ? new Request(request, init)
10
10
  : request
11
11
  ).url
12
- );
12
+ );
13
13
  if (url.port && url.port !== "443" && url.protocol === "https:") {
14
14
  if (!urls.has(url.toString())) {
15
15
  urls.add(url.toString());
@@ -1,10 +1,12 @@
1
1
  declare module "__ENTRY_POINT__" {
2
- import type { Middleware } from "./middleware/common";
3
- const worker: ExportedHandler & {
4
- middleware?: Middleware[];
5
- envWrappers: ((env: Record<string, unknown>) => Record<string, unknown>)[];
6
- };
2
+ import { Middleware } from "./middleware/common";
3
+ import { WorkerEntrypoint } from "cloudflare:workers";
4
+
5
+ export type WorkerEntrypointConstructor = typeof WorkerEntrypoint;
6
+
7
+ const worker: ExportedHandler | WorkerEntrypointConstructor;
7
8
  export default worker;
9
+ export const __INTERNAL_WRANGLER_MIDDLEWARE__: Middleware[];
8
10
  }
9
11
 
10
12
  declare module "__KV_ASSET_HANDLER__" {
@@ -166,7 +166,5 @@ dist
166
166
  .yarn/install-state.gz
167
167
  .pnp.\*
168
168
 
169
- # wrangler project
170
-
171
- .dev.vars
172
- .wrangler/
169
+ .wrangler
170
+ .DS_Store
@@ -1,5 +1,5 @@
1
+ import { afterAll, beforeAll, describe, expect, it } from "vitest";
1
2
  import { unstable_dev } from "wrangler";
2
- import { describe, expect, it, beforeAll, afterAll } from "vitest";
3
3
 
4
4
  describe("Worker", () => {
5
5
  let worker;
@@ -1,6 +1,6 @@
1
+ import { afterAll, beforeAll, describe, expect, it } from "vitest";
1
2
  import { unstable_dev } from "wrangler";
2
3
  import type { UnstableDevWorker } from "wrangler";
3
- import { describe, expect, it, beforeAll, afterAll } from "vitest";
4
4
 
5
5
  describe("Worker", () => {
6
6
  let worker: UnstableDevWorker;
@@ -1,23 +1,17 @@
1
- // // This loads all middlewares exposed on the middleware object
2
- // // and then starts the invocation chain.
3
- // // The big idea is that we can add these to the middleware export dynamically
4
- // // through wrangler, or we can potentially let users directly add them as a sort
5
- // // of "plugin" system.
1
+ // This loads all middlewares exposed on the middleware object and then starts
2
+ // the invocation chain. The big idea is that we can add these to the middleware
3
+ // export dynamically through wrangler, or we can potentially let users directly
4
+ // add them as a sort of "plugin" system.
6
5
 
7
- import {
8
- Dispatcher,
9
- Middleware,
10
- __facade_invoke__,
11
- __facade_register__,
12
- } from "./common";
6
+ import ENTRY, { __INTERNAL_WRANGLER_MIDDLEWARE__ } from "__ENTRY_POINT__";
7
+ import { __facade_invoke__, __facade_register__, Dispatcher } from "./common";
8
+ import type { WorkerEntrypointConstructor } from "__ENTRY_POINT__";
13
9
 
14
- import worker from "__ENTRY_POINT__";
15
-
16
- // We need to preserve all of the exports from the worker
10
+ // Preserve all the exports from the worker
17
11
  export * from "__ENTRY_POINT__";
18
12
 
19
13
  class __Facade_ScheduledController__ implements ScheduledController {
20
- #noRetry: ScheduledController["noRetry"];
14
+ readonly #noRetry: ScheduledController["noRetry"];
21
15
 
22
16
  constructor(
23
17
  readonly scheduledTime: number,
@@ -36,71 +30,34 @@ class __Facade_ScheduledController__ implements ScheduledController {
36
30
  }
37
31
  }
38
32
 
39
- const __facade_modules_fetch__: ExportedHandlerFetchHandler = function (
40
- request,
41
- env,
42
- ctx
43
- ) {
44
- if (worker.fetch === undefined)
45
- throw new Error("Handler does not export a fetch() function.");
46
- return worker.fetch(request, env, ctx);
47
- };
48
-
49
- function getMaskedEnv(rawEnv: unknown) {
50
- let env = rawEnv as Record<string, unknown>;
51
- if (worker.envWrappers && worker.envWrappers.length > 0) {
52
- for (const wrapFn of worker.envWrappers) {
53
- env = wrapFn(env);
54
- }
33
+ function wrapExportedHandler(worker: ExportedHandler): ExportedHandler {
34
+ // If we don't have any middleware defined, just return the handler as is
35
+ if (
36
+ __INTERNAL_WRANGLER_MIDDLEWARE__ === undefined ||
37
+ __INTERNAL_WRANGLER_MIDDLEWARE__.length === 0
38
+ ) {
39
+ return worker;
40
+ }
41
+ // Otherwise, register all middleware once
42
+ for (const middleware of __INTERNAL_WRANGLER_MIDDLEWARE__) {
43
+ __facade_register__(middleware);
55
44
  }
56
- return env;
57
- }
58
-
59
- /**
60
- * This type is here to cause a type error if a new export handler is added to
61
- * `ExportHandler` without it being included in the `facade` below.
62
- */
63
- type MissingExportHandlers = Omit<
64
- Required<ExportedHandler>,
65
- "tail" | "trace" | "scheduled" | "queue" | "test" | "email" | "fetch"
66
- >;
67
-
68
- let registeredMiddleware = false;
69
-
70
- const facade: ExportedHandler<unknown> & MissingExportHandlers = {
71
- ...(worker.tail && {
72
- tail: maskHandlerEnv(worker.tail),
73
- }),
74
- ...(worker.trace && {
75
- trace: maskHandlerEnv(worker.trace),
76
- }),
77
- ...(worker.scheduled && {
78
- scheduled: maskHandlerEnv(worker.scheduled),
79
- }),
80
- ...(worker.queue && {
81
- queue: maskHandlerEnv(worker.queue),
82
- }),
83
- ...(worker.test && {
84
- test: maskHandlerEnv(worker.test),
85
- }),
86
- ...(worker.email && {
87
- email: maskHandlerEnv(worker.email),
88
- }),
89
45
 
90
- fetch(request, rawEnv, ctx) {
91
- const env = getMaskedEnv(rawEnv);
92
- // Get the chain of middleware from the worker object
93
- if (worker.middleware && worker.middleware.length > 0) {
94
- // Make sure we only register middleware once:
95
- // https://github.com/cloudflare/workers-sdk/issues/2386#issuecomment-1614715911
96
- if (!registeredMiddleware) {
97
- registeredMiddleware = true;
98
- for (const middleware of worker.middleware) {
99
- __facade_register__(middleware);
100
- }
101
- }
46
+ const fetchDispatcher: ExportedHandlerFetchHandler = function (
47
+ request,
48
+ env,
49
+ ctx
50
+ ) {
51
+ if (worker.fetch === undefined) {
52
+ throw new Error("Handler does not export a fetch() function.");
53
+ }
54
+ return worker.fetch(request, env, ctx);
55
+ };
102
56
 
103
- const __facade_modules_dispatch__: Dispatcher = function (type, init) {
57
+ return {
58
+ ...worker,
59
+ fetch(request, env, ctx) {
60
+ const dispatcher: Dispatcher = function (type, init) {
104
61
  if (type === "scheduled" && worker.scheduled !== undefined) {
105
62
  const controller = new __Facade_ScheduledController__(
106
63
  Date.now(),
@@ -110,28 +67,68 @@ const facade: ExportedHandler<unknown> & MissingExportHandlers = {
110
67
  return worker.scheduled(controller, env, ctx);
111
68
  }
112
69
  };
70
+ return __facade_invoke__(request, env, ctx, dispatcher, fetchDispatcher);
71
+ },
72
+ };
73
+ }
74
+
75
+ function wrapWorkerEntrypoint(
76
+ klass: WorkerEntrypointConstructor
77
+ ): WorkerEntrypointConstructor {
78
+ // If we don't have any middleware defined, just return the handler as is
79
+ if (
80
+ __INTERNAL_WRANGLER_MIDDLEWARE__ === undefined ||
81
+ __INTERNAL_WRANGLER_MIDDLEWARE__.length === 0
82
+ ) {
83
+ return klass;
84
+ }
85
+ // Otherwise, register all middleware once
86
+ for (const middleware of __INTERNAL_WRANGLER_MIDDLEWARE__) {
87
+ __facade_register__(middleware);
88
+ }
113
89
 
90
+ // `extend`ing `klass` here so other RPC methods remain callable
91
+ return class extends klass {
92
+ #fetchDispatcher: ExportedHandlerFetchHandler<Record<string, unknown>> = (
93
+ request,
94
+ env,
95
+ ctx
96
+ ) => {
97
+ this.env = env;
98
+ this.ctx = ctx;
99
+ if (super.fetch === undefined) {
100
+ throw new Error("Entrypoint class does not define a fetch() function.");
101
+ }
102
+ return super.fetch(request);
103
+ };
104
+
105
+ #dispatcher: Dispatcher = (type, init) => {
106
+ if (type === "scheduled" && super.scheduled !== undefined) {
107
+ const controller = new __Facade_ScheduledController__(
108
+ Date.now(),
109
+ init.cron ?? "",
110
+ () => {}
111
+ );
112
+ return super.scheduled(controller);
113
+ }
114
+ };
115
+
116
+ fetch(request: Request<unknown, IncomingRequestCfProperties>) {
114
117
  return __facade_invoke__(
115
118
  request,
116
- env,
117
- ctx,
118
- __facade_modules_dispatch__,
119
- __facade_modules_fetch__
119
+ this.env,
120
+ this.ctx,
121
+ this.#dispatcher,
122
+ this.#fetchDispatcher
120
123
  );
121
- } else {
122
- // We didn't have any middleware so we can skip the invocation chain,
123
- // and just call the fetch handler directly
124
-
125
- // We "don't care" if this is undefined as we want to have the same behavior
126
- // as if the worker completely bypassed middleware.
127
- return __facade_modules_fetch__(request, env, ctx);
128
124
  }
129
- },
130
- };
131
-
132
- type HandlerFn<D, R> = (data: D, env: unknown, ctx: ExecutionContext) => R;
133
- function maskHandlerEnv<D, R>(handler: HandlerFn<D, R>): HandlerFn<D, R> {
134
- return (data, env, ctx) => handler(data, getMaskedEnv(env), ctx);
125
+ };
135
126
  }
136
127
 
137
- export default facade;
128
+ let WRAPPED_ENTRY: ExportedHandler | WorkerEntrypointConstructor | undefined;
129
+ if (typeof ENTRY === "object") {
130
+ WRAPPED_ENTRY = wrapExportedHandler(ENTRY);
131
+ } else if (typeof ENTRY === "function") {
132
+ WRAPPED_ENTRY = wrapWorkerEntrypoint(ENTRY);
133
+ }
134
+ export default WRAPPED_ENTRY;
@@ -1,12 +1,13 @@
1
1
  import {
2
+ __facade_invoke__,
3
+ __facade_register__,
4
+ __facade_registerInternal__,
2
5
  Awaitable,
3
6
  Dispatcher,
4
7
  IncomingRequest,
5
8
  Middleware,
6
- __facade_invoke__,
7
- __facade_register__,
8
- __facade_registerInternal__,
9
9
  } from "./common";
10
+
10
11
  export { __facade_register__, __facade_registerInternal__ };
11
12
 
12
13
  // Miniflare 2's `EventTarget` follows the spec and doesn't allow exceptions to
@@ -0,0 +1,18 @@
1
+ import type { Middleware } from "./common";
2
+
3
+ const drainBody: Middleware = async (request, env, _ctx, middlewareCtx) => {
4
+ try {
5
+ return await middlewareCtx.next(request, env);
6
+ } finally {
7
+ try {
8
+ if (request.body !== null && !request.bodyUsed) {
9
+ const reader = request.body.getReader();
10
+ while (!(await reader.read()).done) {}
11
+ }
12
+ } catch (e) {
13
+ console.error("Failed to drain the unused request body.", e);
14
+ }
15
+ }
16
+ };
17
+
18
+ export default drainBody;
@@ -30,4 +30,3 @@ const jsonError: Middleware = async (request, env, _ctx, middlewareCtx) => {
30
30
  };
31
31
 
32
32
  export default jsonError;
33
- export const wrap = undefined;
@@ -0,0 +1,3 @@
1
+ declare module "config:middleware/mock-analytics-engine" {
2
+ export const bindings: string[];
3
+ }
@@ -0,0 +1,30 @@
1
+ /// <reference path="middleware-mock-analytics-engine.d.ts"/>
2
+
3
+ import { bindings } from "config:middleware/mock-analytics-engine";
4
+ import type { Middleware } from "./common";
5
+
6
+ const bindingsEnv = Object.fromEntries(
7
+ bindings.map((binding) => [
8
+ binding,
9
+ {
10
+ writeDataPoint() {
11
+ // no op in dev
12
+ },
13
+ },
14
+ ])
15
+ ) satisfies Record<string, AnalyticsEngineDataset>;
16
+
17
+ const analyticsEngine: Middleware = async (
18
+ request,
19
+ env,
20
+ _ctx,
21
+ middlewareCtx
22
+ ) => {
23
+ // we're going to directly modify env so it maintains referential equality
24
+ for (const binding of bindings) {
25
+ env[binding] ??= bindingsEnv[binding];
26
+ }
27
+ return await middlewareCtx.next(request, env);
28
+ };
29
+
30
+ export default analyticsEngine;
@@ -9,7 +9,21 @@ const scheduled: Middleware = async (request, env, _ctx, middlewareCtx) => {
9
9
 
10
10
  return new Response("Ran scheduled event");
11
11
  }
12
- return middlewareCtx.next(request, env);
12
+
13
+ const resp = await middlewareCtx.next(request, env);
14
+
15
+ // If you open the `/__scheduled` page in a browser, the browser will automatically make a request to `/favicon.ico`.
16
+ // For scheduled Workers _without_ a fetch handler, this will result in a 500 response that clutters the log with unhelpful error messages.
17
+ // To avoid this, inject a 404 response to favicon.ico loads on the `/__scheduled` page
18
+ if (
19
+ request.headers.get("referer")?.endsWith("/__scheduled") &&
20
+ url.pathname === "/favicon.ico" &&
21
+ resp.status === 500
22
+ ) {
23
+ return new Response(null, { status: 404 });
24
+ }
25
+
26
+ return resp;
13
27
  };
14
28
 
15
29
  export default scheduled;
@@ -1,20 +1,20 @@
1
1
  /// <reference path="middleware-serve-static-assets.d.ts"/>
2
2
 
3
+ import manifest from "__STATIC_CONTENT_MANIFEST";
3
4
  import {
4
5
  getAssetFromKV,
5
- NotFoundError,
6
6
  MethodNotAllowedError,
7
+ NotFoundError,
7
8
  serveSinglePageApp,
8
9
  } from "@cloudflare/kv-asset-handler";
10
+ import { cacheControl, spaMode } from "config:middleware/serve-static-assets";
11
+ import type { Middleware } from "./common";
9
12
  import type { Options } from "@cloudflare/kv-asset-handler";
10
- import { spaMode, cacheControl } from "config:middleware/serve-static-assets";
11
13
  import type * as kvAssetHandler from "@cloudflare/kv-asset-handler";
12
- import manifest from "__STATIC_CONTENT_MANIFEST";
13
- const ASSET_MANIFEST = JSON.parse(manifest);
14
14
 
15
- import type { Middleware } from "./common";
15
+ const ASSET_MANIFEST = JSON.parse(manifest);
16
16
 
17
- const staticAssets: Middleware = async (request, env, _ctx, middlewareCtx) => {
17
+ const staticAssets: Middleware = async (request, env, ctx, middlewareCtx) => {
18
18
  let options: Partial<Options> = {
19
19
  ASSET_MANIFEST,
20
20
  ASSET_NAMESPACE: env.__STATIC_CONTENT,
@@ -27,7 +27,7 @@ const staticAssets: Middleware = async (request, env, _ctx, middlewareCtx) => {
27
27
  {
28
28
  request,
29
29
  waitUntil(promise) {
30
- return _ctx.waitUntil(promise);
30
+ return ctx.waitUntil(promise);
31
31
  },
32
32
  },
33
33
  options
@@ -1,8 +1,9 @@
1
1
  // @ts-ignore entry point will get replaced
2
2
  import worker from "__ENTRY_POINT__";
3
+ import { isRoutingRuleMatch } from "./pages-dev-util";
4
+
3
5
  // @ts-ignore entry point will get replaced
4
6
  export * from "__ENTRY_POINT__";
5
- import { isRoutingRuleMatch } from "./pages-dev-util";
6
7
 
7
8
  // @ts-ignore routes are injected
8
9
  const routes = __ROUTES__;