wrangler 0.0.0-e89ee2a5 → 0.0.0-e8aaa3930

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 (32) hide show
  1. package/README.md +26 -38
  2. package/bin/wrangler.js +0 -28
  3. package/config-schema.json +3297 -0
  4. package/package.json +59 -106
  5. package/templates/checked-fetch.js +1 -1
  6. package/templates/facade.d.ts +7 -5
  7. package/templates/gitignore +3 -0
  8. package/templates/init-tests/test-vitest-new-worker.ts +2 -2
  9. package/templates/middleware/loader-modules.ts +92 -94
  10. package/templates/middleware/middleware-ensure-req-body-drained.ts +0 -1
  11. package/templates/middleware/middleware-miniflare3-json-error.ts +0 -1
  12. package/templates/middleware/middleware-mock-analytics-engine.d.ts +3 -0
  13. package/templates/middleware/middleware-mock-analytics-engine.ts +30 -0
  14. package/templates/middleware/middleware-patch-console-prefix.d.ts +3 -0
  15. package/templates/middleware/middleware-patch-console-prefix.ts +21 -0
  16. package/templates/middleware/middleware-scheduled.ts +15 -1
  17. package/templates/middleware/middleware-serve-static-assets.ts +2 -2
  18. package/templates/pages-template-plugin.ts +2 -2
  19. package/templates/pages-template-worker.ts +1 -1
  20. package/templates/startDevWorker/InspectorProxyWorker.ts +4 -1
  21. package/templates/startDevWorker/ProxyWorker.ts +35 -25
  22. package/templates/tsconfig.init.json +4 -87
  23. package/wrangler-dist/InspectorProxyWorker.js.map +1 -1
  24. package/wrangler-dist/ProxyWorker.js +28 -24
  25. package/wrangler-dist/ProxyWorker.js.map +1 -1
  26. package/wrangler-dist/cli.d.ts +3445 -690
  27. package/wrangler-dist/cli.js +148834 -150177
  28. package/Cloudflare_CA.pem +0 -18
  29. package/templates/middleware/middleware-d1-beta.d.ts +0 -3
  30. package/templates/middleware/middleware-multiworker-dev.d.ts +0 -4
  31. package/templates/middleware/middleware-multiworker-dev.ts +0 -68
  32. package/wrangler-dist/wasm-sync.wasm +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wrangler",
3
- "version": "0.0.0-e89ee2a5",
3
+ "version": "0.0.0-e8aaa3930",
4
4
  "description": "Command-line interface for all things Cloudflare Workers",
5
5
  "keywords": [
6
6
  "wrangler",
@@ -47,180 +47,133 @@
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|strip-ansi|ansi-regex)"
79
- ],
80
- "snapshotFormat": {
81
- "escapeString": true,
82
- "printBasicPrototype": true
83
- }
84
- },
85
52
  "dependencies": {
86
- "@esbuild-plugins/node-globals-polyfill": "^0.2.3",
87
- "@esbuild-plugins/node-modules-polyfill": "^0.2.2",
88
- "blake3-wasm": "^2.1.5",
89
- "chokidar": "^3.5.3",
53
+ "@esbuild-plugins/node-globals-polyfill": "0.2.3",
54
+ "@esbuild-plugins/node-modules-polyfill": "0.2.2",
55
+ "blake3-wasm": "2.1.5",
90
56
  "esbuild": "0.17.19",
91
- "nanoid": "^3.3.3",
92
- "path-to-regexp": "^6.2.0",
93
- "resolve": "^1.22.8",
94
- "resolve.exports": "^2.0.2",
95
- "selfsigned": "^2.0.1",
96
- "source-map": "0.6.1",
97
- "xxhash-wasm": "^1.0.1",
98
- "@cloudflare/kv-asset-handler": "0.3.1",
99
- "miniflare": "3.20240320.0"
57
+ "path-to-regexp": "6.3.0",
58
+ "unenv": "npm:unenv-nightly@2.0.0-20250109-100802-88ad671",
59
+ "workerd": "1.20241230.0",
60
+ "@cloudflare/kv-asset-handler": "0.3.4",
61
+ "miniflare": "0.0.0-e8aaa3930"
100
62
  },
101
63
  "devDependencies": {
102
- "@cloudflare/ai": "^1.0.35",
103
- "@cloudflare/eslint-config-worker": "*",
104
- "@cloudflare/types": "^6.18.4",
105
- "@cloudflare/workers-types": "^4.20240320.1",
64
+ "@aws-sdk/client-s3": "^3.721.0",
65
+ "@cloudflare/types": "6.18.4",
66
+ "@cloudflare/workers-types": "^4.20241230.0",
106
67
  "@cspotcode/source-map-support": "0.8.1",
107
68
  "@iarna/toml": "^3.0.0",
108
- "@microsoft/api-extractor": "^7.28.3",
69
+ "@microsoft/api-extractor": "^7.47.0",
109
70
  "@sentry/node": "^7.86.0",
110
71
  "@sentry/types": "^7.86.0",
111
72
  "@sentry/utils": "^7.86.0",
112
- "@types/body-parser": "^1.19.2",
113
- "@types/busboy": "^1.5.0",
114
73
  "@types/command-exists": "^1.2.0",
115
- "@types/express": "^4.17.13",
116
- "@types/glob-to-regexp": "0.4.1",
74
+ "@types/glob-to-regexp": "^0.4.1",
117
75
  "@types/is-ci": "^3.0.0",
118
76
  "@types/javascript-time-ago": "^2.0.3",
119
- "@types/jest": "^29.5.5",
120
- "@types/mime": "^2.0.3",
77
+ "@types/mime": "^3.0.4",
121
78
  "@types/minimatch": "^5.1.2",
122
79
  "@types/prompts": "^2.0.14",
123
- "@types/react": "^17.0.37",
124
80
  "@types/resolve": "^1.20.6",
125
- "@types/serve-static": "^1.13.10",
126
81
  "@types/shell-quote": "^1.7.2",
127
82
  "@types/signal-exit": "^3.0.1",
128
- "@types/source-map-support": "^0.5.7",
129
83
  "@types/supports-color": "^8.1.1",
130
- "@types/ws": "^8.5.3",
131
- "@types/yargs": "^17.0.10",
84
+ "@types/ws": "^8.5.7",
85
+ "@types/yargs": "^17.0.22",
86
+ "@vitest/ui": "~2.1.8",
132
87
  "@webcontainer/env": "^1.1.0",
133
- "body-parser": "^1.20.0",
134
- "chalk": "^2.4.2",
88
+ "chalk": "^5.2.0",
89
+ "chokidar": "^4.0.1",
135
90
  "cli-table3": "^0.6.3",
136
- "clipboardy": "^3.0.0",
137
91
  "cmd-shim": "^4.1.0",
138
92
  "command-exists": "^1.2.9",
139
- "concurrently": "^7.2.2",
140
- "devtools-protocol": "^0.0.955664",
141
- "dotenv": "^16.0.0",
142
- "esbuild-jest": "0.5.0",
93
+ "concurrently": "^8.2.2",
94
+ "date-fns": "^4.1.0",
95
+ "devtools-protocol": "^0.0.1182435",
96
+ "dotenv": "^16.3.1",
143
97
  "execa": "^6.1.0",
144
- "express": "^4.18.1",
145
- "finalhandler": "^1.2.0",
146
98
  "find-up": "^6.3.0",
147
- "get-port": "^6.1.2",
148
- "glob-to-regexp": "0.4.1",
149
- "http-terminator": "^3.2.0",
99
+ "get-port": "^7.0.0",
100
+ "glob-to-regexp": "^0.4.1",
150
101
  "https-proxy-agent": "7.0.2",
151
102
  "ignore": "^5.2.0",
152
- "ink": "^3.2.0",
153
- "ink-select-input": "^4.2.1",
154
- "ink-spinner": "^4.0.3",
155
- "ink-table": "^3.0.0",
156
- "ink-testing-library": "^2.1.0",
157
- "ink-text-input": "^4.0.3",
158
103
  "is-ci": "^3.0.1",
104
+ "itty-time": "^1.0.6",
159
105
  "javascript-time-ago": "^2.5.4",
160
- "jest": "^29.7.0",
161
- "jest-fetch-mock": "^3.0.3",
162
- "jest-websocket-mock": "^2.5.0",
106
+ "md5-file": "5.0.0",
163
107
  "mime": "^3.0.0",
164
108
  "minimatch": "^5.1.0",
165
- "msw": "^0.49.1",
109
+ "mock-socket": "^9.3.1",
110
+ "msw": "2.4.3",
166
111
  "open": "^8.4.0",
167
112
  "p-queue": "^7.2.0",
168
113
  "patch-console": "^1.0.0",
169
114
  "pretty-bytes": "^6.0.0",
170
115
  "prompts": "^2.4.2",
171
- "react": "^17.0.2",
172
- "react-error-boundary": "^3.1.4",
173
- "remove-accents-esm": "^0.0.1",
116
+ "resolve": "^1.22.8",
117
+ "rimraf": "^5.0.10",
118
+ "selfsigned": "^2.0.1",
174
119
  "semiver": "^1.1.0",
175
- "serve-static": "^1.15.0",
176
120
  "shell-quote": "^1.8.1",
177
- "shellac": "^0.8.0",
178
121
  "signal-exit": "^3.0.7",
179
- "strip-ansi": "^7.0.1",
122
+ "source-map": "^0.6.1",
123
+ "strip-ansi": "^7.1.0",
180
124
  "supports-color": "^9.2.2",
181
125
  "timeago.js": "^4.0.2",
182
126
  "ts-dedent": "^2.2.0",
183
- "undici": "5.28.3",
127
+ "ts-json-schema-generator": "^1.5.0",
128
+ "undici": "^5.28.4",
184
129
  "update-check": "^1.5.4",
185
- "ws": "^8.5.0",
130
+ "vitest": "~2.1.8",
131
+ "vitest-websocket-mock": "^0.4.0",
132
+ "ws": "^8.18.0",
186
133
  "xdg-app-paths": "^8.3.0",
134
+ "xxhash-wasm": "^1.0.1",
187
135
  "yargs": "^17.7.2",
188
- "yoga-layout": "file:../../vendor/yoga-layout-2.0.0-beta.1.tgz",
189
136
  "@cloudflare/cli": "1.1.1",
190
- "@cloudflare/pages-shared": "^0.11.21",
191
- "@cloudflare/workers-tsconfig": "0.0.0"
192
- },
193
- "optionalDependencies": {
194
- "fsevents": "~2.3.2"
137
+ "@cloudflare/eslint-config-worker": "1.1.0",
138
+ "@cloudflare/workers-shared": "0.0.0-e8aaa3930",
139
+ "@cloudflare/workers-tsconfig": "0.0.0",
140
+ "@cloudflare/pages-shared": "^0.13.1"
195
141
  },
196
142
  "peerDependencies": {
197
- "@cloudflare/workers-types": "^4.20240320.1"
143
+ "@cloudflare/workers-types": "^4.20241230.0"
198
144
  },
199
145
  "peerDependenciesMeta": {
200
146
  "@cloudflare/workers-types": {
201
147
  "optional": true
202
148
  }
203
149
  },
150
+ "optionalDependencies": {
151
+ "fsevents": "~2.3.2"
152
+ },
204
153
  "engines": {
205
154
  "node": ">=16.17.0"
206
155
  },
156
+ "volta": {
157
+ "extends": "../../package.json"
158
+ },
207
159
  "workers-sdk": {
208
160
  "prerelease": true
209
161
  },
210
162
  "scripts": {
211
163
  "assert-git-version": "node -r esbuild-register scripts/assert-git-version.ts",
212
- "build": "pnpm run clean && pnpm run bundle && pnpm run emit-types",
164
+ "build": "pnpm run clean && pnpm run bundle && pnpm run emit-types && pnpm run generate-json-schema",
213
165
  "bundle": "node -r esbuild-register scripts/bundle.ts",
214
- "check:lint": "eslint .",
166
+ "check:lint": "eslint . --max-warnings=0",
215
167
  "check:type": "tsc",
216
168
  "clean": "rimraf wrangler-dist miniflare-dist emitted-types",
217
169
  "dev": "pnpm run clean && concurrently -c black,blue --kill-others-on-fail false \"pnpm run bundle --watch\" \"pnpm run check:type --watch --preserveWatchOutput\"",
218
170
  "emit-types": "tsc -p tsconfig.emit.json && node -r esbuild-register scripts/emit-types.ts",
171
+ "generate-json-schema": "pnpm exec ts-json-schema-generator --no-type-check --path src/config/config.ts --type RawConfig --out config-schema.json",
219
172
  "start": "pnpm run bundle && cross-env NODE_OPTIONS=--enable-source-maps ./bin/wrangler.js",
220
- "test": "pnpm run assert-git-version && jest",
221
- "test:ci": "pnpm run test --coverage",
173
+ "test": "dotenv -- pnpm run assert-git-version && dotenv -- vitest",
174
+ "test:ci": "pnpm run test run",
222
175
  "test:debug": "pnpm run test --silent=false --verbose=true",
223
- "test:e2e": "vitest -c ./e2e/vitest.config.ts",
176
+ "test:e2e": "dotenv -- vitest -c ./e2e/vitest.config.mts",
224
177
  "test:watch": "pnpm run test --testTimeout=50000 --watch",
225
178
  "type:tests": "tsc -p ./src/__tests__/tsconfig.json && tsc -p ./e2e/tsconfig.json"
226
179
  }
@@ -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__" {
@@ -165,3 +165,6 @@ dist
165
165
  .yarn/build-state.yml
166
166
  .yarn/install-state.gz
167
167
  .pnp.\*
168
+
169
+ .wrangler
170
+ .DS_Store
@@ -1,9 +1,9 @@
1
1
  import { afterAll, beforeAll, describe, expect, it } from "vitest";
2
2
  import { unstable_dev } from "wrangler";
3
- import type { UnstableDevWorker } from "wrangler";
3
+ import type { Unstable_DevWorker } from "wrangler";
4
4
 
5
5
  describe("Worker", () => {
6
- let worker: UnstableDevWorker;
6
+ let worker: Unstable_DevWorker;
7
7
 
8
8
  beforeAll(async () => {
9
9
  worker = await unstable_dev("src/index.ts", {
@@ -1,22 +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 worker from "__ENTRY_POINT__";
8
- import {
9
- __facade_invoke__,
10
- __facade_register__,
11
- Dispatcher,
12
- Middleware,
13
- } 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__";
14
9
 
15
- // We need to preserve all of the exports from the worker
10
+ // Preserve all the exports from the worker
16
11
  export * from "__ENTRY_POINT__";
17
12
 
18
13
  class __Facade_ScheduledController__ implements ScheduledController {
19
- #noRetry: ScheduledController["noRetry"];
14
+ readonly #noRetry: ScheduledController["noRetry"];
20
15
 
21
16
  constructor(
22
17
  readonly scheduledTime: number,
@@ -35,71 +30,34 @@ class __Facade_ScheduledController__ implements ScheduledController {
35
30
  }
36
31
  }
37
32
 
38
- const __facade_modules_fetch__: ExportedHandlerFetchHandler = function (
39
- request,
40
- env,
41
- ctx
42
- ) {
43
- if (worker.fetch === undefined)
44
- throw new Error("Handler does not export a fetch() function.");
45
- return worker.fetch(request, env, ctx);
46
- };
47
-
48
- function getMaskedEnv(rawEnv: unknown) {
49
- let env = rawEnv as Record<string, unknown>;
50
- if (worker.envWrappers && worker.envWrappers.length > 0) {
51
- for (const wrapFn of worker.envWrappers) {
52
- env = wrapFn(env);
53
- }
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);
54
44
  }
55
- return env;
56
- }
57
-
58
- /**
59
- * This type is here to cause a type error if a new export handler is added to
60
- * `ExportHandler` without it being included in the `facade` below.
61
- */
62
- type MissingExportHandlers = Omit<
63
- Required<ExportedHandler>,
64
- "tail" | "trace" | "scheduled" | "queue" | "test" | "email" | "fetch"
65
- >;
66
-
67
- let registeredMiddleware = false;
68
-
69
- const facade: ExportedHandler<unknown> & MissingExportHandlers = {
70
- ...(worker.tail && {
71
- tail: maskHandlerEnv(worker.tail),
72
- }),
73
- ...(worker.trace && {
74
- trace: maskHandlerEnv(worker.trace),
75
- }),
76
- ...(worker.scheduled && {
77
- scheduled: maskHandlerEnv(worker.scheduled),
78
- }),
79
- ...(worker.queue && {
80
- queue: maskHandlerEnv(worker.queue),
81
- }),
82
- ...(worker.test && {
83
- test: maskHandlerEnv(worker.test),
84
- }),
85
- ...(worker.email && {
86
- email: maskHandlerEnv(worker.email),
87
- }),
88
45
 
89
- fetch(request, rawEnv, ctx) {
90
- const env = getMaskedEnv(rawEnv);
91
- // Get the chain of middleware from the worker object
92
- if (worker.middleware && worker.middleware.length > 0) {
93
- // Make sure we only register middleware once:
94
- // https://github.com/cloudflare/workers-sdk/issues/2386#issuecomment-1614715911
95
- if (!registeredMiddleware) {
96
- registeredMiddleware = true;
97
- for (const middleware of worker.middleware) {
98
- __facade_register__(middleware);
99
- }
100
- }
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
+ };
101
56
 
102
- const __facade_modules_dispatch__: Dispatcher = function (type, init) {
57
+ return {
58
+ ...worker,
59
+ fetch(request, env, ctx) {
60
+ const dispatcher: Dispatcher = function (type, init) {
103
61
  if (type === "scheduled" && worker.scheduled !== undefined) {
104
62
  const controller = new __Facade_ScheduledController__(
105
63
  Date.now(),
@@ -109,28 +67,68 @@ const facade: ExportedHandler<unknown> & MissingExportHandlers = {
109
67
  return worker.scheduled(controller, env, ctx);
110
68
  }
111
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
+ }
112
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>) {
113
117
  return __facade_invoke__(
114
118
  request,
115
- env,
116
- ctx,
117
- __facade_modules_dispatch__,
118
- __facade_modules_fetch__
119
+ this.env,
120
+ this.ctx,
121
+ this.#dispatcher,
122
+ this.#fetchDispatcher
119
123
  );
120
- } else {
121
- // We didn't have any middleware so we can skip the invocation chain,
122
- // and just call the fetch handler directly
123
-
124
- // We "don't care" if this is undefined as we want to have the same behavior
125
- // as if the worker completely bypassed middleware.
126
- return __facade_modules_fetch__(request, env, ctx);
127
124
  }
128
- },
129
- };
130
-
131
- type HandlerFn<D, R> = (data: D, env: unknown, ctx: ExecutionContext) => R;
132
- function maskHandlerEnv<D, R>(handler: HandlerFn<D, R>): HandlerFn<D, R> {
133
- return (data, env, ctx) => handler(data, getMaskedEnv(env), ctx);
125
+ };
134
126
  }
135
127
 
136
- 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;
@@ -16,4 +16,3 @@ const drainBody: Middleware = async (request, env, _ctx, middlewareCtx) => {
16
16
  };
17
17
 
18
18
  export default drainBody;
19
- export const wrap = undefined;
@@ -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;
@@ -0,0 +1,3 @@
1
+ declare module "config:middleware/patch-console-prefix" {
2
+ export const prefix: string;
3
+ }
@@ -0,0 +1,21 @@
1
+ /// <reference path="middleware-patch-console-prefix.d.ts"/>
2
+
3
+ import { prefix } from "config:middleware/patch-console-prefix";
4
+ import type { Middleware } from "./common";
5
+
6
+ // @ts-expect-error globalThis.console _does_ exist
7
+ globalThis.console = new Proxy(globalThis.console, {
8
+ get(target, p, receiver) {
9
+ if (p === "log" || p === "debug" || p === "info") {
10
+ return (...args: unknown[]) =>
11
+ Reflect.get(target, p, receiver)(prefix, ...args);
12
+ }
13
+ return Reflect.get(target, p, receiver);
14
+ },
15
+ });
16
+
17
+ const passthrough: Middleware = (request, env, _ctx, middlewareCtx) => {
18
+ return middlewareCtx.next(request, env);
19
+ };
20
+
21
+ export default passthrough;
@@ -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;
@@ -14,7 +14,7 @@ import type * as kvAssetHandler from "@cloudflare/kv-asset-handler";
14
14
 
15
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
@@ -41,14 +41,14 @@ type EventPluginContext<Env, P extends string, Data, PluginArgs> = {
41
41
  declare type PagesFunction<
42
42
  Env = unknown,
43
43
  P extends string = string,
44
- Data extends Record<string, unknown> = Record<string, unknown>
44
+ Data extends Record<string, unknown> = Record<string, unknown>,
45
45
  > = (context: EventContext<Env, P, Data>) => Response | Promise<Response>;
46
46
 
47
47
  declare type PagesPluginFunction<
48
48
  Env = unknown,
49
49
  P extends string = string,
50
50
  Data extends Record<string, unknown> = Record<string, unknown>,
51
- PluginArgs = unknown
51
+ PluginArgs = unknown,
52
52
  > = (
53
53
  context: EventPluginContext<Env, P, Data, PluginArgs>
54
54
  ) => Response | Promise<Response>;
@@ -29,7 +29,7 @@ type EventContext<Env, P extends string, Data> = {
29
29
  declare type PagesFunction<
30
30
  Env = unknown,
31
31
  P extends string = string,
32
- Data extends Record<string, unknown> = Record<string, unknown>
32
+ Data extends Record<string, unknown> = Record<string, unknown>,
33
33
  > = (context: EventContext<Env, P, Data>) => Response | Promise<Response>;
34
34
  /* end @cloudflare/workers-types */
35
35