wrangler 0.0.0-e1c2f5b9 → 0.0.0-e1d2fd668
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.
- package/README.md +17 -15
- package/bin/wrangler.js +14 -103
- package/config-schema.json +3126 -0
- package/package.json +197 -194
- package/templates/__tests__/tsconfig.json +1 -1
- package/templates/checked-fetch.js +19 -6
- package/templates/facade.d.ts +7 -2
- package/templates/gitignore +2 -3
- package/templates/init-tests/test-vitest-new-worker.js +1 -1
- package/templates/init-tests/test-vitest-new-worker.ts +2 -2
- package/templates/middleware/common.ts +9 -4
- package/templates/middleware/loader-modules.ts +94 -42
- package/templates/middleware/loader-sw.ts +6 -10
- package/templates/middleware/middleware-ensure-req-body-drained.ts +18 -0
- package/templates/middleware/middleware-miniflare3-json-error.ts +17 -5
- package/templates/middleware/middleware-mock-analytics-engine.d.ts +3 -0
- package/templates/middleware/middleware-mock-analytics-engine.ts +30 -0
- package/templates/middleware/middleware-scheduled.ts +15 -1
- package/templates/middleware/middleware-serve-static-assets.d.ts +6 -0
- package/templates/middleware/middleware-serve-static-assets.ts +56 -0
- package/templates/modules-watch-stub.js +4 -0
- package/templates/new-worker-scheduled.ts +1 -1
- package/templates/new-worker.ts +4 -1
- package/templates/pages-dev-pipeline.ts +2 -1
- package/templates/pages-dev-util.ts +4 -1
- package/templates/pages-shim.ts +0 -3
- package/templates/pages-template-plugin.ts +32 -13
- package/templates/pages-template-worker.ts +12 -3
- package/templates/startDevWorker/InspectorProxyWorker.ts +664 -0
- package/templates/startDevWorker/ProxyWorker.ts +336 -0
- package/templates/tsconfig.init.json +5 -89
- package/templates/tsconfig.json +1 -1
- package/wrangler-dist/InspectorProxyWorker.js +464 -0
- package/wrangler-dist/InspectorProxyWorker.js.map +6 -0
- package/wrangler-dist/ProxyWorker.js +241 -0
- package/wrangler-dist/ProxyWorker.js.map +6 -0
- package/wrangler-dist/cli.d.ts +26117 -517
- package/wrangler-dist/cli.js +173803 -121437
- package/wrangler-dist/wasm-sync.wasm +0 -0
- package/Cloudflare_CA.pem +0 -18
- package/import_meta_url.js +0 -3
- package/miniflare-config-stubs/.env.empty +0 -0
- package/miniflare-config-stubs/package.empty.json +0 -1
- package/miniflare-config-stubs/wrangler.empty.toml +0 -0
- package/miniflare-dist/index.mjs +0 -6364
- package/src/__tests__/access.test.ts +0 -25
- package/src/__tests__/api-dev.test.ts +0 -238
- package/src/__tests__/api-devregistry.test.js +0 -64
- package/src/__tests__/api.test.ts +0 -80
- package/src/__tests__/config-cache-without-cache-dir.test.ts +0 -38
- package/src/__tests__/config-cache.test.ts +0 -42
- package/src/__tests__/configuration.test.ts +0 -4163
- package/src/__tests__/d1.test.ts +0 -123
- package/src/__tests__/delete.test.ts +0 -263
- package/src/__tests__/deployments.test.ts +0 -105
- package/src/__tests__/dev.test.tsx +0 -1586
- package/src/__tests__/dialogs.test.tsx +0 -40
- package/src/__tests__/generate.test.ts +0 -235
- package/src/__tests__/get-host-from-url.test.ts +0 -16
- package/src/__tests__/guess-worker-format.test.ts +0 -85
- package/src/__tests__/helpers/clipboardy-mock.js +0 -4
- package/src/__tests__/helpers/cmd-shim.d.ts +0 -11
- package/src/__tests__/helpers/mock-account-id.ts +0 -48
- package/src/__tests__/helpers/mock-auth-domain.ts +0 -20
- package/src/__tests__/helpers/mock-bin.ts +0 -36
- package/src/__tests__/helpers/mock-cfetch.ts +0 -277
- package/src/__tests__/helpers/mock-console.ts +0 -106
- package/src/__tests__/helpers/mock-dialogs.ts +0 -153
- package/src/__tests__/helpers/mock-get-zone-from-host.ts +0 -8
- package/src/__tests__/helpers/mock-http-server.ts +0 -46
- package/src/__tests__/helpers/mock-istty.ts +0 -74
- package/src/__tests__/helpers/mock-known-routes.ts +0 -7
- package/src/__tests__/helpers/mock-kv.ts +0 -33
- package/src/__tests__/helpers/mock-oauth-flow.ts +0 -271
- package/src/__tests__/helpers/mock-process.ts +0 -34
- package/src/__tests__/helpers/mock-stdin.ts +0 -108
- package/src/__tests__/helpers/mock-web-socket.ts +0 -29
- package/src/__tests__/helpers/msw/handlers/access.ts +0 -13
- package/src/__tests__/helpers/msw/handlers/deployments.ts +0 -59
- package/src/__tests__/helpers/msw/handlers/namespaces.ts +0 -104
- package/src/__tests__/helpers/msw/handlers/oauth.ts +0 -31
- package/src/__tests__/helpers/msw/handlers/r2.ts +0 -80
- package/src/__tests__/helpers/msw/handlers/script.ts +0 -75
- package/src/__tests__/helpers/msw/handlers/user.ts +0 -63
- package/src/__tests__/helpers/msw/handlers/zones.ts +0 -22
- package/src/__tests__/helpers/msw/index.ts +0 -21
- package/src/__tests__/helpers/run-in-tmp.ts +0 -38
- package/src/__tests__/helpers/run-wrangler.ts +0 -16
- package/src/__tests__/helpers/worker-scripts/child-wrangler.toml +0 -1
- package/src/__tests__/helpers/worker-scripts/hello-world-worker.js +0 -5
- package/src/__tests__/helpers/worker-scripts/hello-world-wrangler.toml +0 -1
- package/src/__tests__/helpers/worker-scripts/parent-worker.js +0 -8
- package/src/__tests__/helpers/worker-scripts/parent-wrangler.toml +0 -5
- package/src/__tests__/helpers/write-worker-source.ts +0 -31
- package/src/__tests__/helpers/write-wrangler-toml.ts +0 -17
- package/src/__tests__/https-options.test.ts +0 -163
- package/src/__tests__/index.test.ts +0 -268
- package/src/__tests__/init.test.ts +0 -3094
- package/src/__tests__/jest.setup.ts +0 -203
- package/src/__tests__/kv.test.ts +0 -1786
- package/src/__tests__/logger.test.ts +0 -141
- package/src/__tests__/logout.test.ts +0 -47
- package/src/__tests__/metrics.test.ts +0 -495
- package/src/__tests__/middleware.scheduled.test.ts +0 -145
- package/src/__tests__/middleware.test.ts +0 -750
- package/src/__tests__/package-manager.test.ts +0 -353
- package/src/__tests__/pages-deployment-tail.test.ts +0 -884
- package/src/__tests__/pages.test.ts +0 -2443
- package/src/__tests__/parse.test.ts +0 -330
- package/src/__tests__/paths.test.ts +0 -39
- package/src/__tests__/publish.test.ts +0 -7757
- package/src/__tests__/pubsub.test.ts +0 -490
- package/src/__tests__/queues.test.ts +0 -522
- package/src/__tests__/r2.test.ts +0 -393
- package/src/__tests__/route.test.ts +0 -45
- package/src/__tests__/secret.test.ts +0 -694
- package/src/__tests__/tail.test.ts +0 -899
- package/src/__tests__/test-old-node-version.js +0 -31
- package/src/__tests__/tsconfig-sanity.ts +0 -12
- package/src/__tests__/tsconfig.json +0 -8
- package/src/__tests__/tsconfig.tsbuildinfo +0 -1
- package/src/__tests__/type-generation.test.ts +0 -233
- package/src/__tests__/user.test.ts +0 -129
- package/src/__tests__/utils-collectKeyValues.test.ts +0 -47
- package/src/__tests__/validate-dev-props.test.ts +0 -56
- package/src/__tests__/version.test.ts +0 -35
- package/src/__tests__/whoami.test.tsx +0 -278
- package/src/__tests__/worker-namespace.test.ts +0 -326
- package/src/abort.d.ts +0 -3
- package/src/api/dev.ts +0 -218
- package/src/api/index.ts +0 -2
- package/src/bundle-reporter.tsx +0 -68
- package/src/bundle.ts +0 -823
- package/src/cfetch/index.ts +0 -158
- package/src/cfetch/internal.ts +0 -261
- package/src/cli.ts +0 -28
- package/src/config/README.md +0 -107
- package/src/config/config.ts +0 -275
- package/src/config/diagnostics.ts +0 -80
- package/src/config/environment.ts +0 -577
- package/src/config/index.ts +0 -358
- package/src/config/validation-helpers.ts +0 -597
- package/src/config/validation.ts +0 -2151
- package/src/config-cache.ts +0 -85
- package/src/create-worker-preview.ts +0 -282
- package/src/create-worker-upload-form.ts +0 -325
- package/src/d1/backups.tsx +0 -223
- package/src/d1/constants.ts +0 -2
- package/src/d1/create.tsx +0 -63
- package/src/d1/delete.tsx +0 -56
- package/src/d1/execute.tsx +0 -352
- package/src/d1/formatTimeAgo.ts +0 -14
- package/src/d1/index.ts +0 -101
- package/src/d1/list.tsx +0 -48
- package/src/d1/migrations/apply.tsx +0 -196
- package/src/d1/migrations/create.tsx +0 -77
- package/src/d1/migrations/helpers.ts +0 -147
- package/src/d1/migrations/index.tsx +0 -3
- package/src/d1/migrations/list.tsx +0 -79
- package/src/d1/migrations/options.ts +0 -18
- package/src/d1/options.ts +0 -22
- package/src/d1/types.tsx +0 -24
- package/src/d1/utils.ts +0 -48
- package/src/delete.ts +0 -108
- package/src/deployments.ts +0 -83
- package/src/deprecated/index.ts +0 -145
- package/src/dev/dev-vars.ts +0 -39
- package/src/dev/dev.tsx +0 -614
- package/src/dev/get-local-persistence-path.tsx +0 -31
- package/src/dev/local.tsx +0 -932
- package/src/dev/remote.tsx +0 -603
- package/src/dev/start-server.ts +0 -543
- package/src/dev/use-esbuild.ts +0 -204
- package/src/dev/validate-dev-props.ts +0 -31
- package/src/dev-registry.tsx +0 -201
- package/src/dev.tsx +0 -949
- package/src/dialogs.tsx +0 -168
- package/src/dispatch-namespace.ts +0 -207
- package/src/docs/index.ts +0 -97
- package/src/durable.ts +0 -102
- package/src/entry.ts +0 -329
- package/src/environment-variables/factory.ts +0 -88
- package/src/environment-variables/misc-variables.ts +0 -30
- package/src/errors.ts +0 -11
- package/src/generate/index.ts +0 -300
- package/src/git-client.ts +0 -135
- package/src/global-wrangler-config-path.ts +0 -26
- package/src/https-options.ts +0 -127
- package/src/index.tsx +0 -694
- package/src/init.ts +0 -1025
- package/src/inspect.ts +0 -767
- package/src/intl-polyfill.d.ts +0 -139
- package/src/is-ci.ts +0 -14
- package/src/is-interactive.ts +0 -16
- package/src/jest.d.ts +0 -4
- package/src/kv/helpers.ts +0 -430
- package/src/kv/index.ts +0 -596
- package/src/logger.ts +0 -92
- package/src/metrics/index.ts +0 -5
- package/src/metrics/metrics-config.ts +0 -239
- package/src/metrics/metrics-dispatcher.ts +0 -96
- package/src/metrics/metrics-usage-headers.ts +0 -24
- package/src/metrics/send-event.ts +0 -97
- package/src/miniflare-cli/README.md +0 -30
- package/src/miniflare-cli/assets.ts +0 -250
- package/src/miniflare-cli/index.ts +0 -210
- package/src/miniflare-cli/request-context.ts +0 -40
- package/src/miniflare-cli/tsconfig.json +0 -9
- package/src/miniflare-cli/tsconfig.tsbuildinfo +0 -1
- package/src/miniflare-cli/types.ts +0 -11
- package/src/module-collection.ts +0 -267
- package/src/open-in-browser.ts +0 -17
- package/src/package-manager.ts +0 -219
- package/src/pages/build.tsx +0 -270
- package/src/pages/constants.ts +0 -18
- package/src/pages/deployment-tails.tsx +0 -284
- package/src/pages/deployments.tsx +0 -84
- package/src/pages/dev.tsx +0 -710
- package/src/pages/errors.ts +0 -66
- package/src/pages/functions/buildPlugin.ts +0 -107
- package/src/pages/functions/buildWorker.ts +0 -166
- package/src/pages/functions/filepath-routing.test.ts +0 -234
- package/src/pages/functions/filepath-routing.ts +0 -189
- package/src/pages/functions/identifiers.ts +0 -78
- package/src/pages/functions/routes-consolidation.test.ts +0 -250
- package/src/pages/functions/routes-consolidation.ts +0 -73
- package/src/pages/functions/routes-transformation.test.ts +0 -282
- package/src/pages/functions/routes-transformation.ts +0 -115
- package/src/pages/functions/routes-validation.test.ts +0 -403
- package/src/pages/functions/routes-validation.ts +0 -202
- package/src/pages/functions/routes.ts +0 -151
- package/src/pages/functions/tsconfig.json +0 -8
- package/src/pages/functions/tsconfig.tsbuildinfo +0 -1
- package/src/pages/functions.tsx +0 -82
- package/src/pages/hash.tsx +0 -13
- package/src/pages/index.tsx +0 -102
- package/src/pages/projects.tsx +0 -169
- package/src/pages/prompt-select-project.tsx +0 -31
- package/src/pages/publish.tsx +0 -461
- package/src/pages/types.ts +0 -41
- package/src/pages/upload.tsx +0 -447
- package/src/pages/utils.ts +0 -23
- package/src/parse.ts +0 -286
- package/src/paths.ts +0 -71
- package/src/proxy.ts +0 -694
- package/src/publish/index.ts +0 -270
- package/src/publish/publish.ts +0 -1036
- package/src/pubsub/index.ts +0 -286
- package/src/pubsub/pubsub-commands.tsx +0 -624
- package/src/queues/cli/commands/consumer/add.ts +0 -71
- package/src/queues/cli/commands/consumer/index.ts +0 -22
- package/src/queues/cli/commands/consumer/remove.ts +0 -38
- package/src/queues/cli/commands/create.ts +0 -25
- package/src/queues/cli/commands/delete.ts +0 -26
- package/src/queues/cli/commands/index.ts +0 -36
- package/src/queues/cli/commands/list.ts +0 -25
- package/src/queues/client.ts +0 -135
- package/src/queues/utils.ts +0 -18
- package/src/r2/constants.ts +0 -4
- package/src/r2/helpers.ts +0 -131
- package/src/r2/index.ts +0 -289
- package/src/routes.ts +0 -140
- package/src/secret/index.ts +0 -379
- package/src/selfsigned.d.ts +0 -29
- package/src/sites.tsx +0 -372
- package/src/tail/createTail.ts +0 -379
- package/src/tail/filters.ts +0 -277
- package/src/tail/index.ts +0 -214
- package/src/tail/printing.ts +0 -107
- package/src/tsconfig-sanity.ts +0 -16
- package/src/type-generation.ts +0 -181
- package/src/update-check.ts +0 -19
- package/src/user/access.ts +0 -68
- package/src/user/auth-variables.ts +0 -113
- package/src/user/choose-account.tsx +0 -69
- package/src/user/generate-auth-url.ts +0 -33
- package/src/user/generate-random-state.ts +0 -16
- package/src/user/index.ts +0 -2
- package/src/user/user.tsx +0 -1238
- package/src/utils/collectKeyValues.ts +0 -14
- package/src/whoami.tsx +0 -169
- package/src/worker.ts +0 -251
- package/src/yargs-types.ts +0 -24
- package/src/zones.ts +0 -191
- package/templates/__tests__/tsconfig.tsbuildinfo +0 -1
- package/templates/d1-beta-facade.js +0 -205
- package/templates/first-party-worker-module-facade.ts +0 -19
- package/templates/format-dev-errors.ts +0 -33
- package/templates/serve-static-assets.ts +0 -65
- package/templates/service-bindings-module-facade.js +0 -54
- package/templates/service-bindings-sw-facade.js +0 -42
- package/templates/tsconfig.tsbuildinfo +0 -1
|
@@ -1,23 +1,17 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
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
|
-
|
|
9
|
-
|
|
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
|
-
|
|
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,20 +30,34 @@ class __Facade_ScheduledController__ implements ScheduledController {
|
|
|
36
30
|
}
|
|
37
31
|
}
|
|
38
32
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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);
|
|
44
|
+
}
|
|
43
45
|
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
+
};
|
|
51
56
|
|
|
52
|
-
|
|
57
|
+
return {
|
|
58
|
+
...worker,
|
|
59
|
+
fetch(request, env, ctx) {
|
|
60
|
+
const dispatcher: Dispatcher = function (type, init) {
|
|
53
61
|
if (type === "scheduled" && worker.scheduled !== undefined) {
|
|
54
62
|
const controller = new __Facade_ScheduledController__(
|
|
55
63
|
Date.now(),
|
|
@@ -59,24 +67,68 @@ const facade: ExportedHandler<unknown> = {
|
|
|
59
67
|
return worker.scheduled(controller, env, ctx);
|
|
60
68
|
}
|
|
61
69
|
};
|
|
70
|
+
return __facade_invoke__(request, env, ctx, dispatcher, fetchDispatcher);
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
}
|
|
62
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
|
+
}
|
|
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>) {
|
|
63
117
|
return __facade_invoke__(
|
|
64
118
|
request,
|
|
65
|
-
env,
|
|
66
|
-
ctx,
|
|
67
|
-
|
|
68
|
-
|
|
119
|
+
this.env,
|
|
120
|
+
this.ctx,
|
|
121
|
+
this.#dispatcher,
|
|
122
|
+
this.#fetchDispatcher
|
|
69
123
|
);
|
|
70
|
-
} else {
|
|
71
|
-
// We didn't have any middleware so we can skip the invocation chain,
|
|
72
|
-
// and just call the fetch handler directly
|
|
73
|
-
|
|
74
|
-
// We "don't care" if this is undefined as we want to have the same behaviour
|
|
75
|
-
// as if the worker completely bypassed middleware.
|
|
76
|
-
return worker.fetch!(request, env, ctx);
|
|
77
124
|
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
};
|
|
125
|
+
};
|
|
126
|
+
}
|
|
81
127
|
|
|
82
|
-
|
|
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,11 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
|
-
Awaitable,
|
|
3
|
-
Dispatcher,
|
|
4
|
-
Middleware,
|
|
5
2
|
__facade_invoke__,
|
|
6
3
|
__facade_register__,
|
|
7
4
|
__facade_registerInternal__,
|
|
5
|
+
Awaitable,
|
|
6
|
+
Dispatcher,
|
|
7
|
+
IncomingRequest,
|
|
8
|
+
Middleware,
|
|
8
9
|
} from "./common";
|
|
10
|
+
|
|
9
11
|
export { __facade_register__, __facade_registerInternal__ };
|
|
10
12
|
|
|
11
13
|
// Miniflare 2's `EventTarget` follows the spec and doesn't allow exceptions to
|
|
@@ -183,8 +185,6 @@ __facade__originalAddEventListener__("fetch", (event) => {
|
|
|
183
185
|
});
|
|
184
186
|
|
|
185
187
|
__FACADE_EVENT_TARGET__.dispatchEvent(facadeEvent);
|
|
186
|
-
// @ts-expect-error `waitUntil` types are currently broken, blocked on
|
|
187
|
-
// https://github.com/cloudflare/workerd/pull/191
|
|
188
188
|
event.waitUntil(Promise.all(facadeEvent[__facade_waitUntil__]));
|
|
189
189
|
}
|
|
190
190
|
};
|
|
@@ -197,8 +197,6 @@ __facade__originalAddEventListener__("fetch", (event) => {
|
|
|
197
197
|
|
|
198
198
|
__FACADE_EVENT_TARGET__.dispatchEvent(facadeEvent);
|
|
199
199
|
facadeEvent[__facade_dispatched__] = true;
|
|
200
|
-
// @ts-expect-error `waitUntil` types are currently broken, blocked on
|
|
201
|
-
// https://github.com/cloudflare/workerd/pull/191
|
|
202
200
|
event.waitUntil(Promise.all(facadeEvent[__facade_waitUntil__]));
|
|
203
201
|
|
|
204
202
|
const response = facadeEvent[__facade_response__];
|
|
@@ -210,7 +208,7 @@ __facade__originalAddEventListener__("fetch", (event) => {
|
|
|
210
208
|
|
|
211
209
|
event.respondWith(
|
|
212
210
|
__facade_invoke__(
|
|
213
|
-
event.request,
|
|
211
|
+
event.request as IncomingRequest,
|
|
214
212
|
globalThis,
|
|
215
213
|
ctx,
|
|
216
214
|
__facade_sw_dispatch__,
|
|
@@ -227,7 +225,5 @@ __facade__originalAddEventListener__("scheduled", (event) => {
|
|
|
227
225
|
});
|
|
228
226
|
|
|
229
227
|
__FACADE_EVENT_TARGET__.dispatchEvent(facadeEvent);
|
|
230
|
-
// @ts-expect-error `waitUntil` types are currently broken, blocked on
|
|
231
|
-
// https://github.com/cloudflare/workerd/pull/191
|
|
232
228
|
event.waitUntil(Promise.all(facadeEvent[__facade_waitUntil__]));
|
|
233
229
|
});
|
|
@@ -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;
|
|
@@ -1,15 +1,27 @@
|
|
|
1
1
|
import type { Middleware } from "./common";
|
|
2
2
|
|
|
3
|
+
interface JsonError {
|
|
4
|
+
message?: string;
|
|
5
|
+
name?: string;
|
|
6
|
+
stack?: string;
|
|
7
|
+
cause?: JsonError;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
function reduceError(e: any): JsonError {
|
|
11
|
+
return {
|
|
12
|
+
name: e?.name,
|
|
13
|
+
message: e?.message ?? String(e),
|
|
14
|
+
stack: e?.stack,
|
|
15
|
+
cause: e?.cause === undefined ? undefined : reduceError(e.cause),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
3
19
|
// See comment in `bundle.ts` for details on why this is needed
|
|
4
20
|
const jsonError: Middleware = async (request, env, _ctx, middlewareCtx) => {
|
|
5
21
|
try {
|
|
6
22
|
return await middlewareCtx.next(request, env);
|
|
7
23
|
} catch (e: any) {
|
|
8
|
-
const error =
|
|
9
|
-
name: e?.name,
|
|
10
|
-
message: e?.message ?? String(e),
|
|
11
|
-
stack: e?.stack,
|
|
12
|
-
};
|
|
24
|
+
const error = reduceError(e);
|
|
13
25
|
return Response.json(error, {
|
|
14
26
|
status: 500,
|
|
15
27
|
headers: { "MF-Experimental-Error-Stack": "true" },
|
|
@@ -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
|
-
|
|
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;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/// <reference path="middleware-serve-static-assets.d.ts"/>
|
|
2
|
+
|
|
3
|
+
import manifest from "__STATIC_CONTENT_MANIFEST";
|
|
4
|
+
import {
|
|
5
|
+
getAssetFromKV,
|
|
6
|
+
MethodNotAllowedError,
|
|
7
|
+
NotFoundError,
|
|
8
|
+
serveSinglePageApp,
|
|
9
|
+
} from "@cloudflare/kv-asset-handler";
|
|
10
|
+
import { cacheControl, spaMode } from "config:middleware/serve-static-assets";
|
|
11
|
+
import type { Middleware } from "./common";
|
|
12
|
+
import type { Options } from "@cloudflare/kv-asset-handler";
|
|
13
|
+
import type * as kvAssetHandler from "@cloudflare/kv-asset-handler";
|
|
14
|
+
|
|
15
|
+
const ASSET_MANIFEST = JSON.parse(manifest);
|
|
16
|
+
|
|
17
|
+
const staticAssets: Middleware = async (request, env, ctx, middlewareCtx) => {
|
|
18
|
+
let options: Partial<Options> = {
|
|
19
|
+
ASSET_MANIFEST,
|
|
20
|
+
ASSET_NAMESPACE: env.__STATIC_CONTENT,
|
|
21
|
+
cacheControl: cacheControl,
|
|
22
|
+
mapRequestToAsset: spaMode ? serveSinglePageApp : undefined,
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
try {
|
|
26
|
+
const page = await (getAssetFromKV as typeof kvAssetHandler.getAssetFromKV)(
|
|
27
|
+
{
|
|
28
|
+
request,
|
|
29
|
+
waitUntil(promise) {
|
|
30
|
+
return ctx.waitUntil(promise);
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
options
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
// allow headers to be altered
|
|
37
|
+
const response = new Response(page.body, page);
|
|
38
|
+
|
|
39
|
+
response.headers.set("X-XSS-Protection", "1; mode=block");
|
|
40
|
+
response.headers.set("X-Content-Type-Options", "nosniff");
|
|
41
|
+
response.headers.set("X-Frame-Options", "DENY");
|
|
42
|
+
response.headers.set("Referrer-Policy", "unsafe-url");
|
|
43
|
+
response.headers.set("Feature-Policy", "none");
|
|
44
|
+
|
|
45
|
+
return response;
|
|
46
|
+
} catch (e) {
|
|
47
|
+
if (e instanceof NotFoundError || e instanceof MethodNotAllowedError) {
|
|
48
|
+
// if a known error is thrown then serve from actual worker
|
|
49
|
+
return await middlewareCtx.next(request, env);
|
|
50
|
+
}
|
|
51
|
+
// otherwise it's a real error, so throw it
|
|
52
|
+
throw e;
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
export default staticAssets;
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* - Run `curl "http://localhost:8787/cdn-cgi/mf/scheduled"` to trigger the scheduled event
|
|
6
6
|
* - Go back to the console to see what your worker has logged
|
|
7
7
|
* - Update the Cron trigger in wrangler.toml (see https://developers.cloudflare.com/workers/wrangler/configuration/#triggers)
|
|
8
|
-
* - Run `wrangler
|
|
8
|
+
* - Run `wrangler deploy --name my-worker` to deploy your worker
|
|
9
9
|
*
|
|
10
10
|
* Learn more at https://developers.cloudflare.com/workers/runtime-apis/scheduled-event/
|
|
11
11
|
*/
|
package/templates/new-worker.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* - Run `wrangler dev src/index.ts` in your terminal to start a development server
|
|
5
5
|
* - Open a browser tab at http://localhost:8787/ to see your worker in action
|
|
6
|
-
* - Run `wrangler
|
|
6
|
+
* - Run `wrangler deploy src/index.ts --name my-worker` to deploy your worker
|
|
7
7
|
*
|
|
8
8
|
* Learn more at https://developers.cloudflare.com/workers/
|
|
9
9
|
*/
|
|
@@ -17,6 +17,9 @@ export interface Env {
|
|
|
17
17
|
//
|
|
18
18
|
// Example binding to R2. Learn more at https://developers.cloudflare.com/workers/runtime-apis/r2/
|
|
19
19
|
// MY_BUCKET: R2Bucket;
|
|
20
|
+
//
|
|
21
|
+
// Example binding to a Service. Learn more at https://developers.cloudflare.com/workers/runtime-apis/service-bindings/
|
|
22
|
+
// MY_SERVICE: Fetcher;
|
|
20
23
|
}
|
|
21
24
|
|
|
22
25
|
export default {
|
|
@@ -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__;
|
|
@@ -45,7 +45,10 @@ function transformRoutingRuleToRegExp(rule: string): RegExp {
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
// /foo* => /foo.* => ^/foo.*$
|
|
48
|
-
|
|
48
|
+
// /*.* => /*\.* => /.*\..* => ^/.*\..*$
|
|
49
|
+
transformedRule = `^${transformedRule
|
|
50
|
+
.replaceAll(/\./g, "\\.")
|
|
51
|
+
.replaceAll(/\*/g, ".*")}$`;
|
|
49
52
|
|
|
50
53
|
// ^/foo.*$ => /^\/foo.*$/
|
|
51
54
|
return new RegExp(transformedRule);
|
package/templates/pages-shim.ts
CHANGED
|
@@ -3,9 +3,6 @@
|
|
|
3
3
|
|
|
4
4
|
export default <ExportedHandler<{ ASSETS: Fetcher }>>{
|
|
5
5
|
async fetch(request, env, context) {
|
|
6
|
-
// @ts-expect-error due to a bug in `@cloudflare/workers-types`, the `cf`
|
|
7
|
-
// types from the `request` parameter and `RequestInit` are incompatible.
|
|
8
|
-
// We'll get this fixed very soon.
|
|
9
6
|
const response = await env.ASSETS.fetch(request.url, request);
|
|
10
7
|
return new Response(response.body, response);
|
|
11
8
|
},
|
|
@@ -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>;
|
|
@@ -122,17 +122,23 @@ function* executeRequest(request: Request, relativePathname: string) {
|
|
|
122
122
|
export default function (pluginArgs: unknown) {
|
|
123
123
|
const onRequest: PagesPluginFunction = async (workerContext) => {
|
|
124
124
|
let { request } = workerContext;
|
|
125
|
-
const { env, next
|
|
125
|
+
const { env, next } = workerContext;
|
|
126
|
+
let { data } = workerContext;
|
|
126
127
|
|
|
127
128
|
const url = new URL(request.url);
|
|
129
|
+
// TODO: Replace this with something actually legible.
|
|
128
130
|
const relativePathname = `/${
|
|
129
|
-
url.pathname.
|
|
131
|
+
url.pathname.replace(workerContext.functionPath, "") || ""
|
|
130
132
|
}`.replace(/^\/\//, "/");
|
|
131
133
|
|
|
132
134
|
const handlerIterator = executeRequest(request, relativePathname);
|
|
133
135
|
const pluginNext = async (input?: RequestInfo, init?: RequestInit) => {
|
|
134
136
|
if (input !== undefined) {
|
|
135
|
-
|
|
137
|
+
let url = input;
|
|
138
|
+
if (typeof input === "string") {
|
|
139
|
+
url = new URL(input, request.url).toString();
|
|
140
|
+
}
|
|
141
|
+
request = new Request(url, init);
|
|
136
142
|
}
|
|
137
143
|
|
|
138
144
|
const result = handlerIterator.next();
|
|
@@ -140,11 +146,20 @@ export default function (pluginArgs: unknown) {
|
|
|
140
146
|
if (result.done === false) {
|
|
141
147
|
const { handler, params, path } = result.value;
|
|
142
148
|
const context = {
|
|
143
|
-
request,
|
|
149
|
+
request: new Request(request.clone()),
|
|
144
150
|
functionPath: workerContext.functionPath + path,
|
|
145
151
|
next: pluginNext,
|
|
146
152
|
params,
|
|
147
|
-
data
|
|
153
|
+
get data() {
|
|
154
|
+
return data;
|
|
155
|
+
},
|
|
156
|
+
set data(value) {
|
|
157
|
+
if (typeof value !== "object" || value === null) {
|
|
158
|
+
throw new Error("context.data must be an object");
|
|
159
|
+
}
|
|
160
|
+
// user has overriden context.data, so we need to merge it with the existing data
|
|
161
|
+
data = value;
|
|
162
|
+
},
|
|
148
163
|
pluginArgs,
|
|
149
164
|
env,
|
|
150
165
|
waitUntil: workerContext.waitUntil.bind(workerContext),
|
|
@@ -154,13 +169,9 @@ export default function (pluginArgs: unknown) {
|
|
|
154
169
|
|
|
155
170
|
const response = await handler(context);
|
|
156
171
|
|
|
157
|
-
|
|
158
|
-
return new Response(
|
|
159
|
-
[101, 204, 205, 304].includes(response.status) ? null : response.body,
|
|
160
|
-
{ ...response, headers: new Headers(response.headers) }
|
|
161
|
-
);
|
|
172
|
+
return cloneResponse(response);
|
|
162
173
|
} else {
|
|
163
|
-
return next();
|
|
174
|
+
return next(request);
|
|
164
175
|
}
|
|
165
176
|
};
|
|
166
177
|
|
|
@@ -169,3 +180,11 @@ export default function (pluginArgs: unknown) {
|
|
|
169
180
|
|
|
170
181
|
return onRequest;
|
|
171
182
|
}
|
|
183
|
+
|
|
184
|
+
// This makes a Response mutable
|
|
185
|
+
const cloneResponse = (response: Response) =>
|
|
186
|
+
// https://fetch.spec.whatwg.org/#null-body-status
|
|
187
|
+
new Response(
|
|
188
|
+
[101, 204, 205, 304].includes(response.status) ? null : response.body,
|
|
189
|
+
response
|
|
190
|
+
);
|
|
@@ -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
|
|
|
@@ -120,7 +120,7 @@ export default {
|
|
|
120
120
|
) {
|
|
121
121
|
let request = originalRequest;
|
|
122
122
|
const handlerIterator = executeRequest(request);
|
|
123
|
-
|
|
123
|
+
let data = {}; // arbitrary data the user can set between functions
|
|
124
124
|
let isFailOpen = false;
|
|
125
125
|
|
|
126
126
|
const next = async (input?: RequestInfo, init?: RequestInit) => {
|
|
@@ -141,7 +141,16 @@ export default {
|
|
|
141
141
|
functionPath: path,
|
|
142
142
|
next,
|
|
143
143
|
params,
|
|
144
|
-
data
|
|
144
|
+
get data() {
|
|
145
|
+
return data;
|
|
146
|
+
},
|
|
147
|
+
set data(value) {
|
|
148
|
+
if (typeof value !== "object" || value === null) {
|
|
149
|
+
throw new Error("context.data must be an object");
|
|
150
|
+
}
|
|
151
|
+
// user has overriden context.data, so we need to merge it with the existing data
|
|
152
|
+
data = value;
|
|
153
|
+
},
|
|
145
154
|
env,
|
|
146
155
|
waitUntil: workerContext.waitUntil.bind(workerContext),
|
|
147
156
|
passThroughOnException: () => {
|