wrangler 0.0.0-afdb7e49 → 0.0.0-b032bf2e
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 +12 -14
- package/bin/wrangler.js +19 -65
- package/package.json +28 -25
- package/templates/__tests__/tsconfig-sanity.ts +12 -0
- package/templates/__tests__/tsconfig.json +8 -0
- package/templates/checked-fetch.js +19 -6
- package/templates/facade.d.ts +17 -0
- package/templates/gitignore +1 -0
- package/templates/init-tests/test-jest-new-worker.js +3 -5
- package/templates/init-tests/test-vitest-new-worker.js +3 -5
- package/templates/init-tests/test-vitest-new-worker.ts +25 -0
- package/templates/middleware/common.ts +9 -4
- package/templates/middleware/loader-modules.ts +52 -9
- package/templates/middleware/loader-sw.ts +47 -32
- package/templates/middleware/middleware-d1-beta.d.ts +3 -0
- package/templates/{d1-beta-facade.js → middleware/middleware-d1-beta.ts} +106 -67
- package/templates/middleware/middleware-miniflare3-json-error.ts +32 -0
- package/templates/middleware/middleware-multiworker-dev.d.ts +4 -0
- package/templates/middleware/middleware-multiworker-dev.ts +59 -0
- package/templates/middleware/middleware-serve-static-assets.d.ts +6 -0
- package/templates/middleware/middleware-serve-static-assets.ts +56 -0
- package/templates/new-worker-scheduled.ts +1 -1
- package/templates/new-worker.ts +4 -1
- package/templates/pages-dev-pipeline.ts +4 -1
- package/templates/pages-dev-util.ts +4 -1
- package/templates/pages-shim.ts +1 -1
- package/templates/pages-template-plugin.ts +31 -12
- package/templates/pages-template-worker.ts +11 -2
- package/templates/tsconfig-sanity.ts +11 -0
- package/templates/tsconfig.init.json +105 -0
- package/templates/tsconfig.json +5 -103
- package/wrangler-dist/cli.d.ts +906 -73
- package/wrangler-dist/cli.js +129660 -143899
- package/wrangler-dist/wasm-sync.wasm +0 -0
- 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 -6316
- package/src/__tests__/access.test.ts +0 -25
- package/src/__tests__/api-dev.test.ts +0 -209
- package/src/__tests__/api-devregistry.test.js +0 -56
- 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 -3981
- package/src/__tests__/d1.test.ts +0 -74
- package/src/__tests__/delete.test.ts +0 -230
- package/src/__tests__/deployments.test.ts +0 -91
- package/src/__tests__/dev.test.tsx +0 -1535
- 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-bin.ts +0 -36
- package/src/__tests__/helpers/mock-cfetch.ts +0 -333
- 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 -252
- package/src/__tests__/helpers/mock-process.ts +0 -39
- 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 -36
- 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 -264
- package/src/__tests__/init.test.ts +0 -2900
- package/src/__tests__/jest.setup.ts +0 -202
- package/src/__tests__/kv.test.ts +0 -1675
- package/src/__tests__/logger.test.ts +0 -141
- package/src/__tests__/metrics.test.ts +0 -450
- package/src/__tests__/middleware.scheduled.test.ts +0 -135
- package/src/__tests__/middleware.test.ts +0 -726
- package/src/__tests__/package-manager.test.ts +0 -353
- package/src/__tests__/pages-deployment-tail.test.ts +0 -820
- package/src/__tests__/pages.test.ts +0 -2442
- package/src/__tests__/parse.test.ts +0 -330
- package/src/__tests__/paths.test.ts +0 -39
- package/src/__tests__/publish.test.ts +0 -7633
- package/src/__tests__/pubsub.test.ts +0 -370
- package/src/__tests__/queues.test.ts +0 -371
- package/src/__tests__/r2.test.ts +0 -393
- package/src/__tests__/route.test.ts +0 -45
- package/src/__tests__/secret.test.ts +0 -644
- package/src/__tests__/tail.test.ts +0 -800
- package/src/__tests__/test-old-node-version.js +0 -31
- package/src/__tests__/type-generation.test.ts +0 -225
- package/src/__tests__/user.test.ts +0 -155
- 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 -210
- package/src/api/index.ts +0 -2
- package/src/bundle-reporter.tsx +0 -68
- package/src/bundle.ts +0 -808
- package/src/cfetch/index.ts +0 -160
- package/src/cfetch/internal.ts +0 -263
- 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 -561
- package/src/config/index.ts +0 -334
- package/src/config/validation-helpers.ts +0 -597
- package/src/config/validation.ts +0 -2103
- package/src/config-cache.ts +0 -85
- package/src/create-worker-preview.ts +0 -282
- package/src/create-worker-upload-form.ts +0 -316
- package/src/d1/backups.tsx +0 -218
- 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 -99
- package/src/d1/list.tsx +0 -48
- package/src/d1/migrations.tsx +0 -446
- 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 -77
- package/src/deprecated/index.ts +0 -438
- package/src/dev/dev-vars.ts +0 -39
- package/src/dev/dev.tsx +0 -589
- package/src/dev/get-local-persistence-path.tsx +0 -31
- package/src/dev/local.tsx +0 -862
- package/src/dev/remote.tsx +0 -603
- package/src/dev/start-server.ts +0 -528
- package/src/dev/use-esbuild.ts +0 -200
- package/src/dev/validate-dev-props.ts +0 -31
- package/src/dev-registry.tsx +0 -201
- package/src/dev.tsx +0 -885
- package/src/dialogs.tsx +0 -168
- package/src/dispatch-namespace.ts +0 -207
- package/src/durable.ts +0 -102
- package/src/entry.ts +0 -329
- package/src/environment-variables.ts +0 -50
- package/src/errors.ts +0 -11
- package/src/git-client.ts +0 -124
- package/src/global-wrangler-config-path.ts +0 -26
- package/src/https-options.ts +0 -127
- package/src/index.tsx +0 -682
- package/src/init.ts +0 -970
- 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/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 -96
- package/src/miniflare-cli/README.md +0 -30
- package/src/miniflare-cli/assets.ts +0 -215
- package/src/miniflare-cli/index.ts +0 -213
- package/src/miniflare-cli/request-context.ts +0 -40
- 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 -708
- package/src/pages/errors.ts +0 -66
- package/src/pages/functions/buildPlugin.ts +0 -106
- package/src/pages/functions/buildWorker.ts +0 -165
- 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.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 -451
- package/src/pages/types.ts +0 -41
- package/src/pages/upload.tsx +0 -426
- package/src/pages/utils.ts +0 -23
- package/src/parse.ts +0 -286
- package/src/paths.ts +0 -71
- package/src/proxy.ts +0 -689
- package/src/publish/index.ts +0 -270
- package/src/publish/publish.ts +0 -1034
- 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 -33
- package/src/queues/cli/commands/list.ts +0 -25
- package/src/queues/client.ts +0 -135
- 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 -378
- 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/type-generation.ts +0 -173
- package/src/update-check.ts +0 -19
- package/src/user/access.ts +0 -69
- package/src/user/choose-account.tsx +0 -69
- package/src/user/env-vars.ts +0 -46
- package/src/user/generate-auth-url.ts +0 -33
- package/src/user/generate-random-state.ts +0 -16
- package/src/user/index.ts +0 -3
- package/src/user/user.tsx +0 -1192
- package/src/utils/collectKeyValues.ts +0 -14
- package/src/whoami.tsx +0 -169
- package/src/worker.ts +0 -245
- package/src/yargs-types.ts +0 -24
- package/src/zones.ts +0 -191
- package/templates/first-party-worker-module-facade.ts +0 -18
- package/templates/format-dev-errors.ts +0 -32
- package/templates/serve-static-assets.ts +0 -63
- package/templates/service-bindings-module-facade.js +0 -54
- package/templates/service-bindings-sw-facade.js +0 -42
|
@@ -1,8 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import {
|
|
2
|
+
Awaitable,
|
|
3
|
+
Dispatcher,
|
|
4
|
+
IncomingRequest,
|
|
5
|
+
Middleware,
|
|
6
|
+
__facade_invoke__,
|
|
7
|
+
__facade_register__,
|
|
8
|
+
__facade_registerInternal__,
|
|
9
|
+
} from "./common";
|
|
10
|
+
export { __facade_register__, __facade_registerInternal__ };
|
|
11
|
+
|
|
12
|
+
// Miniflare 2's `EventTarget` follows the spec and doesn't allow exceptions to
|
|
13
|
+
// be caught by `dispatchEvent`. Instead it has a custom `ThrowingEventTarget`
|
|
6
14
|
// class that rethrows errors from event listeners in `dispatchEvent`.
|
|
7
15
|
// We'd like errors to be propagated to the top-level `addEventListener`, so
|
|
8
16
|
// we'd like to use `ThrowingEventTarget`. Unfortunately, `ThrowingEventTarget`
|
|
@@ -15,45 +23,52 @@ if ((globalThis as any).MINIFLARE) {
|
|
|
15
23
|
__FACADE_EVENT_TARGET__ = new EventTarget();
|
|
16
24
|
}
|
|
17
25
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
listener: EventListenerOrEventListenerObject,
|
|
22
|
-
options?: EventTargetAddEventListenerOptions | boolean
|
|
23
|
-
) => void;
|
|
24
|
-
var __facade_removeEventListener__: (
|
|
25
|
-
type: string,
|
|
26
|
-
listener: EventListenerOrEventListenerObject,
|
|
27
|
-
options?: EventTargetEventListenerOptions | boolean
|
|
28
|
-
) => void;
|
|
29
|
-
var __facade_dispatchEvent__: (event: Event) => void;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
function __facade_isSpecialEvent__(type: string) {
|
|
26
|
+
function __facade_isSpecialEvent__(
|
|
27
|
+
type: string
|
|
28
|
+
): type is "fetch" | "scheduled" {
|
|
33
29
|
return type === "fetch" || type === "scheduled";
|
|
34
30
|
}
|
|
35
|
-
|
|
31
|
+
const __facade__originalAddEventListener__ = globalThis.addEventListener;
|
|
32
|
+
const __facade__originalRemoveEventListener__ = globalThis.removeEventListener;
|
|
33
|
+
const __facade__originalDispatchEvent__ = globalThis.dispatchEvent;
|
|
34
|
+
|
|
35
|
+
globalThis.addEventListener = function (type, listener, options) {
|
|
36
36
|
if (__facade_isSpecialEvent__(type)) {
|
|
37
|
-
__FACADE_EVENT_TARGET__.addEventListener(
|
|
37
|
+
__FACADE_EVENT_TARGET__.addEventListener(
|
|
38
|
+
type,
|
|
39
|
+
listener as EventListenerOrEventListenerObject,
|
|
40
|
+
options
|
|
41
|
+
);
|
|
38
42
|
} else {
|
|
39
|
-
|
|
43
|
+
__facade__originalAddEventListener__(type, listener, options);
|
|
40
44
|
}
|
|
41
45
|
};
|
|
42
|
-
globalThis.
|
|
46
|
+
globalThis.removeEventListener = function (type, listener, options) {
|
|
43
47
|
if (__facade_isSpecialEvent__(type)) {
|
|
44
|
-
__FACADE_EVENT_TARGET__.removeEventListener(
|
|
48
|
+
__FACADE_EVENT_TARGET__.removeEventListener(
|
|
49
|
+
type,
|
|
50
|
+
listener as EventListenerOrEventListenerObject,
|
|
51
|
+
options
|
|
52
|
+
);
|
|
45
53
|
} else {
|
|
46
|
-
|
|
54
|
+
__facade__originalRemoveEventListener__(type, listener, options);
|
|
47
55
|
}
|
|
48
56
|
};
|
|
49
|
-
globalThis.
|
|
57
|
+
globalThis.dispatchEvent = function (event) {
|
|
50
58
|
if (__facade_isSpecialEvent__(event.type)) {
|
|
51
|
-
__FACADE_EVENT_TARGET__.dispatchEvent(event);
|
|
59
|
+
return __FACADE_EVENT_TARGET__.dispatchEvent(event);
|
|
52
60
|
} else {
|
|
53
|
-
|
|
61
|
+
return __facade__originalDispatchEvent__(event);
|
|
54
62
|
}
|
|
55
63
|
};
|
|
56
64
|
|
|
65
|
+
declare global {
|
|
66
|
+
var addMiddleware: typeof __facade_register__;
|
|
67
|
+
var addMiddlewareInternal: typeof __facade_registerInternal__;
|
|
68
|
+
}
|
|
69
|
+
globalThis.addMiddleware = __facade_register__;
|
|
70
|
+
globalThis.addMiddlewareInternal = __facade_registerInternal__;
|
|
71
|
+
|
|
57
72
|
const __facade_waitUntil__ = Symbol("__facade_waitUntil__");
|
|
58
73
|
const __facade_response__ = Symbol("__facade_response__");
|
|
59
74
|
const __facade_dispatched__ = Symbol("__facade_dispatched__");
|
|
@@ -154,7 +169,7 @@ class __Facade_ScheduledEvent__ extends __Facade_ExtendableEvent__ {
|
|
|
154
169
|
}
|
|
155
170
|
}
|
|
156
171
|
|
|
157
|
-
|
|
172
|
+
__facade__originalAddEventListener__("fetch", (event) => {
|
|
158
173
|
const ctx: ExecutionContext = {
|
|
159
174
|
waitUntil: event.waitUntil.bind(event),
|
|
160
175
|
passThroughOnException: event.passThroughOnException.bind(event),
|
|
@@ -192,7 +207,7 @@ globalThis.addEventListener("fetch", (event) => {
|
|
|
192
207
|
|
|
193
208
|
event.respondWith(
|
|
194
209
|
__facade_invoke__(
|
|
195
|
-
event.request,
|
|
210
|
+
event.request as IncomingRequest,
|
|
196
211
|
globalThis,
|
|
197
212
|
ctx,
|
|
198
213
|
__facade_sw_dispatch__,
|
|
@@ -201,7 +216,7 @@ globalThis.addEventListener("fetch", (event) => {
|
|
|
201
216
|
);
|
|
202
217
|
});
|
|
203
218
|
|
|
204
|
-
|
|
219
|
+
__facade__originalAddEventListener__("scheduled", (event) => {
|
|
205
220
|
const facadeEvent = new __Facade_ScheduledEvent__("scheduled", {
|
|
206
221
|
scheduledTime: event.scheduledTime,
|
|
207
222
|
cron: event.cron,
|
|
@@ -1,17 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/// <reference path="middleware-d1-beta.d.ts"/>
|
|
2
|
+
|
|
3
|
+
import { D1_IMPORTS } from "config:middleware/d1-beta";
|
|
4
4
|
|
|
5
5
|
// src/index.ts
|
|
6
|
-
|
|
7
|
-
constructor(binding) {
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
prepare(query) {
|
|
6
|
+
class D1Database {
|
|
7
|
+
constructor(readonly binding: Fetcher) {}
|
|
8
|
+
prepare(query: string) {
|
|
11
9
|
return new D1PreparedStatement(this, query);
|
|
12
10
|
}
|
|
13
11
|
async dump() {
|
|
14
|
-
const response = await this.binding.fetch("/dump", {
|
|
12
|
+
const response = await this.binding.fetch("http://d1/dump", {
|
|
15
13
|
method: "POST",
|
|
16
14
|
headers: {
|
|
17
15
|
"content-type": "application/json",
|
|
@@ -19,19 +17,19 @@ var D1Database = class {
|
|
|
19
17
|
});
|
|
20
18
|
if (response.status !== 200) {
|
|
21
19
|
try {
|
|
22
|
-
const err = await response.json();
|
|
23
|
-
throw new Error(
|
|
20
|
+
const err = (await response.json()) as { error: string };
|
|
21
|
+
throw new Error(`D1_DUMP_ERROR: ${err.error}`, {
|
|
24
22
|
cause: new Error(err.error),
|
|
25
23
|
});
|
|
26
24
|
} catch (e) {
|
|
27
|
-
throw new Error(
|
|
25
|
+
throw new Error(`D1_DUMP_ERROR: Status + ${response.status}`, {
|
|
28
26
|
cause: new Error("Status " + response.status),
|
|
29
27
|
});
|
|
30
28
|
}
|
|
31
29
|
}
|
|
32
30
|
return await response.arrayBuffer();
|
|
33
31
|
}
|
|
34
|
-
async batch(statements) {
|
|
32
|
+
async batch(statements: D1PreparedStatement[]) {
|
|
35
33
|
const exec = await this._send(
|
|
36
34
|
"/query",
|
|
37
35
|
statements.map((s) => s.statement),
|
|
@@ -39,7 +37,7 @@ var D1Database = class {
|
|
|
39
37
|
);
|
|
40
38
|
return exec;
|
|
41
39
|
}
|
|
42
|
-
async exec(query) {
|
|
40
|
+
async exec(query: string) {
|
|
43
41
|
const lines = query.trim().split("\n");
|
|
44
42
|
const _exec = await this._send("/query", lines, [], false);
|
|
45
43
|
const exec = Array.isArray(_exec) ? _exec : [_exec];
|
|
@@ -49,26 +47,36 @@ var D1Database = class {
|
|
|
49
47
|
})
|
|
50
48
|
.indexOf(1);
|
|
51
49
|
if (error !== -1) {
|
|
52
|
-
throw new Error(
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
"
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
50
|
+
throw new Error(
|
|
51
|
+
`D1_EXEC_ERROR: Error in line ${error + 1}: ${lines[error]}: ${
|
|
52
|
+
exec[error].error
|
|
53
|
+
}`,
|
|
54
|
+
{
|
|
55
|
+
cause: new Error(
|
|
56
|
+
"Error in line " +
|
|
57
|
+
(error + 1) +
|
|
58
|
+
": " +
|
|
59
|
+
lines[error] +
|
|
60
|
+
": " +
|
|
61
|
+
exec[error].error
|
|
62
|
+
),
|
|
63
|
+
}
|
|
64
|
+
);
|
|
62
65
|
} else {
|
|
63
66
|
return {
|
|
64
67
|
count: exec.length,
|
|
65
68
|
duration: exec.reduce((p, c) => {
|
|
66
|
-
return p + c.meta.duration;
|
|
69
|
+
return p + (c.meta.duration as number);
|
|
67
70
|
}, 0),
|
|
68
71
|
};
|
|
69
72
|
}
|
|
70
73
|
}
|
|
71
|
-
async _send(
|
|
74
|
+
async _send(
|
|
75
|
+
endpoint: string,
|
|
76
|
+
query: string | string[],
|
|
77
|
+
params: unknown[],
|
|
78
|
+
dothrow = true
|
|
79
|
+
) {
|
|
72
80
|
const body = JSON.stringify(
|
|
73
81
|
typeof query == "object"
|
|
74
82
|
? query.map((s, index) => {
|
|
@@ -79,7 +87,7 @@ var D1Database = class {
|
|
|
79
87
|
params,
|
|
80
88
|
}
|
|
81
89
|
);
|
|
82
|
-
const response = await this.binding.fetch(endpoint, {
|
|
90
|
+
const response = await this.binding.fetch(new URL(endpoint, "http://d1"), {
|
|
83
91
|
method: "POST",
|
|
84
92
|
headers: {
|
|
85
93
|
"content-type": "application/json",
|
|
@@ -87,39 +95,79 @@ var D1Database = class {
|
|
|
87
95
|
body,
|
|
88
96
|
});
|
|
89
97
|
try {
|
|
90
|
-
const answer = await response.json();
|
|
98
|
+
const answer = (await response.json()) as { error?: string };
|
|
91
99
|
if (answer.error && dothrow) {
|
|
92
100
|
const err = answer;
|
|
93
|
-
throw new Error(
|
|
101
|
+
throw new Error(`D1_ERROR: ${err.error}`, {
|
|
102
|
+
cause: new Error(err.error),
|
|
103
|
+
});
|
|
94
104
|
} else {
|
|
95
105
|
return Array.isArray(answer)
|
|
96
106
|
? answer.map((r) => mapD1Result(r))
|
|
97
107
|
: mapD1Result(answer);
|
|
98
108
|
}
|
|
99
109
|
} catch (e) {
|
|
100
|
-
|
|
101
|
-
|
|
110
|
+
const error = e as Error;
|
|
111
|
+
throw new Error(`D1_ERROR: ${error.cause || "Something went wrong"}`, {
|
|
112
|
+
cause: new Error(`${error.cause}` || "Something went wrong"),
|
|
102
113
|
});
|
|
103
114
|
}
|
|
104
115
|
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
class D1PreparedStatement {
|
|
119
|
+
constructor(
|
|
120
|
+
readonly database: D1Database,
|
|
121
|
+
readonly statement: string,
|
|
122
|
+
readonly params: unknown[] = []
|
|
123
|
+
) {}
|
|
124
|
+
bind(...values: unknown[]) {
|
|
125
|
+
for (var r in values) {
|
|
126
|
+
const value = values[r];
|
|
127
|
+
switch (typeof value) {
|
|
128
|
+
case "number":
|
|
129
|
+
case "string":
|
|
130
|
+
break;
|
|
131
|
+
case "object":
|
|
132
|
+
if (value == null) break;
|
|
133
|
+
if (
|
|
134
|
+
Array.isArray(value) &&
|
|
135
|
+
value
|
|
136
|
+
.map((b) => {
|
|
137
|
+
return typeof b == "number" && b >= 0 && b < 256 ? 1 : 0;
|
|
138
|
+
})
|
|
139
|
+
.indexOf(0) == -1
|
|
140
|
+
)
|
|
141
|
+
break;
|
|
142
|
+
if (value instanceof ArrayBuffer) {
|
|
143
|
+
values[r] = Array.from(new Uint8Array(value));
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
if (ArrayBuffer.isView(value)) {
|
|
147
|
+
values[r] = Array.from(new Uint8Array(value.buffer));
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
default:
|
|
151
|
+
throw new Error(
|
|
152
|
+
`D1_TYPE_ERROR: Type '${typeof value}' not supported for value '${value}'`,
|
|
153
|
+
{
|
|
154
|
+
cause: new Error(
|
|
155
|
+
`Type '${typeof value}' not supported for value '${value}'`
|
|
156
|
+
),
|
|
157
|
+
}
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
113
161
|
return new D1PreparedStatement(this.database, this.statement, values);
|
|
114
162
|
}
|
|
115
|
-
async first(colName) {
|
|
163
|
+
async first(colName: string) {
|
|
116
164
|
const info = firstIfArray(
|
|
117
165
|
await this.database._send("/query", this.statement, this.params)
|
|
118
166
|
);
|
|
119
167
|
const results = info.results;
|
|
120
168
|
if (colName !== void 0) {
|
|
121
169
|
if (results.length > 0 && results[0][colName] === void 0) {
|
|
122
|
-
throw new Error(
|
|
170
|
+
throw new Error(`D1_COLUMN_NOTFOUND: Column not found (${colName})`, {
|
|
123
171
|
cause: new Error("Column not found"),
|
|
124
172
|
});
|
|
125
173
|
}
|
|
@@ -151,12 +199,12 @@ var D1PreparedStatement = class {
|
|
|
151
199
|
}
|
|
152
200
|
return raw;
|
|
153
201
|
}
|
|
154
|
-
}
|
|
155
|
-
function firstIfArray(results) {
|
|
202
|
+
}
|
|
203
|
+
function firstIfArray(results: unknown) {
|
|
156
204
|
return Array.isArray(results) ? results[0] : results;
|
|
157
205
|
}
|
|
158
|
-
function mapD1Result(result) {
|
|
159
|
-
let map = {
|
|
206
|
+
function mapD1Result(result: Partial<D1Result>): D1Result {
|
|
207
|
+
let map: D1Result = {
|
|
160
208
|
results: result.results || [],
|
|
161
209
|
success: result.success === void 0 ? true : result.success,
|
|
162
210
|
meta: result.meta || {},
|
|
@@ -165,12 +213,17 @@ function mapD1Result(result) {
|
|
|
165
213
|
return map;
|
|
166
214
|
}
|
|
167
215
|
|
|
216
|
+
type D1Result = {
|
|
217
|
+
results: unknown[];
|
|
218
|
+
success: boolean;
|
|
219
|
+
meta: Record<string, unknown>;
|
|
220
|
+
error?: string;
|
|
221
|
+
};
|
|
222
|
+
|
|
168
223
|
// src/shim.ts
|
|
169
|
-
var D1_IMPORTS = __D1_IMPORTS__;
|
|
170
|
-
var LOCAL_MODE = __LOCAL_MODE__;
|
|
171
224
|
var D1_BETA_PREFIX = `__D1_BETA__`;
|
|
172
225
|
var envMap = /* @__PURE__ */ new Map();
|
|
173
|
-
function getMaskedEnv(env) {
|
|
226
|
+
function getMaskedEnv(env: Record<string, Fetcher | D1Database>) {
|
|
174
227
|
if (envMap.has(env)) return envMap.get(env);
|
|
175
228
|
const newEnv = new Map(Object.entries(env));
|
|
176
229
|
D1_IMPORTS.filter((bindingName) =>
|
|
@@ -178,28 +231,14 @@ function getMaskedEnv(env) {
|
|
|
178
231
|
).forEach((bindingName) => {
|
|
179
232
|
newEnv.delete(bindingName);
|
|
180
233
|
const newName = bindingName.slice(D1_BETA_PREFIX.length);
|
|
181
|
-
const newBinding =
|
|
182
|
-
? new D1Database(env[bindingName])
|
|
183
|
-
: env[bindingName];
|
|
234
|
+
const newBinding = new D1Database(env[bindingName] as Fetcher);
|
|
184
235
|
newEnv.set(newName, newBinding);
|
|
185
236
|
});
|
|
186
237
|
const newEnvObj = Object.fromEntries(newEnv.entries());
|
|
187
238
|
envMap.set(env, newEnvObj);
|
|
188
239
|
return newEnvObj;
|
|
189
240
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
},
|
|
195
|
-
async queue(batch, env, ctx) {
|
|
196
|
-
return worker.queue(batch, getMaskedEnv(env), ctx);
|
|
197
|
-
},
|
|
198
|
-
async scheduled(controller, env, ctx) {
|
|
199
|
-
return worker.scheduled(controller, getMaskedEnv(env), ctx);
|
|
200
|
-
},
|
|
201
|
-
async trace(traces, env, ctx) {
|
|
202
|
-
return worker.trace(traces, getMaskedEnv(env), ctx);
|
|
203
|
-
},
|
|
204
|
-
};
|
|
205
|
-
export { shim_default as default };
|
|
241
|
+
|
|
242
|
+
export function wrap(env: Record<string, D1Database | Fetcher>) {
|
|
243
|
+
return getMaskedEnv(env);
|
|
244
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Middleware } from "./common";
|
|
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
|
+
|
|
19
|
+
// See comment in `bundle.ts` for details on why this is needed
|
|
20
|
+
const jsonError: Middleware = async (request, env, _ctx, middlewareCtx) => {
|
|
21
|
+
try {
|
|
22
|
+
return await middlewareCtx.next(request, env);
|
|
23
|
+
} catch (e: any) {
|
|
24
|
+
const error = reduceError(e);
|
|
25
|
+
return Response.json(error, {
|
|
26
|
+
status: 500,
|
|
27
|
+
headers: { "MF-Experimental-Error-Stack": "true" },
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export default jsonError;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/// <reference path="middleware-multiworker-dev.d.ts"/>
|
|
3
|
+
|
|
4
|
+
import { workers } from "config:middleware/multiworker-dev";
|
|
5
|
+
import type { WorkerRegistry } from "../../src/dev-registry";
|
|
6
|
+
|
|
7
|
+
export function wrap(env: Record<string, unknown>) {
|
|
8
|
+
const facadeEnv = { ...env };
|
|
9
|
+
// For every Worker definition that's available,
|
|
10
|
+
// create a fetcher for it on the facade env.
|
|
11
|
+
// for const [name, binding] of env
|
|
12
|
+
// if Workers[name]
|
|
13
|
+
// const details = Workers[name];
|
|
14
|
+
|
|
15
|
+
for (const [name, details] of Object.entries(workers as WorkerRegistry)) {
|
|
16
|
+
if (details) {
|
|
17
|
+
facadeEnv[name] = {
|
|
18
|
+
async fetch(...reqArgs: Parameters<Fetcher["fetch"]>) {
|
|
19
|
+
const reqFromArgs = new Request(...reqArgs);
|
|
20
|
+
if (details.headers) {
|
|
21
|
+
for (const [key, value] of Object.entries(details.headers)) {
|
|
22
|
+
// In remote mode, you need to add a couple of headers
|
|
23
|
+
// to make sure it's talking to the 'dev' preview session
|
|
24
|
+
// (much like wrangler dev already does via proxy.ts)
|
|
25
|
+
reqFromArgs.headers.set(key, value);
|
|
26
|
+
}
|
|
27
|
+
return (env[name] as Fetcher).fetch(reqFromArgs);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const url = new URL(reqFromArgs.url);
|
|
31
|
+
if (details.protocol !== undefined) {
|
|
32
|
+
url.protocol = details.protocol;
|
|
33
|
+
}
|
|
34
|
+
if (details.host !== undefined) {
|
|
35
|
+
url.host = details.host;
|
|
36
|
+
}
|
|
37
|
+
if (details.port !== undefined) {
|
|
38
|
+
url.port = details.port.toString();
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const request = new Request(url.toString(), reqFromArgs);
|
|
42
|
+
return fetch(request);
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
} else {
|
|
46
|
+
// This means there's no dev binding available.
|
|
47
|
+
// Let's use whatever's available, or put a shim with a message.
|
|
48
|
+
facadeEnv[name] = facadeEnv[name] || {
|
|
49
|
+
async fetch() {
|
|
50
|
+
return new Response(
|
|
51
|
+
`You should start up wrangler dev --local on the ${name} worker`,
|
|
52
|
+
{ status: 404 }
|
|
53
|
+
);
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return facadeEnv;
|
|
59
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/// <reference path="middleware-serve-static-assets.d.ts"/>
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
getAssetFromKV,
|
|
5
|
+
NotFoundError,
|
|
6
|
+
MethodNotAllowedError,
|
|
7
|
+
serveSinglePageApp,
|
|
8
|
+
} from "@cloudflare/kv-asset-handler";
|
|
9
|
+
import type { Options } from "@cloudflare/kv-asset-handler";
|
|
10
|
+
import { spaMode, cacheControl } from "config:middleware/serve-static-assets";
|
|
11
|
+
import type * as kvAssetHandler from "@cloudflare/kv-asset-handler";
|
|
12
|
+
import manifest from "__STATIC_CONTENT_MANIFEST";
|
|
13
|
+
const ASSET_MANIFEST = JSON.parse(manifest);
|
|
14
|
+
|
|
15
|
+
import type { Middleware } from "./common";
|
|
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 {
|
|
@@ -7,7 +7,7 @@ import { isRoutingRuleMatch } from "./pages-dev-util";
|
|
|
7
7
|
// @ts-ignore routes are injected
|
|
8
8
|
const routes = __ROUTES__;
|
|
9
9
|
|
|
10
|
-
export default {
|
|
10
|
+
export default <ExportedHandler<{ ASSETS: Fetcher }>>{
|
|
11
11
|
fetch(request, env, context) {
|
|
12
12
|
const { pathname } = new URL(request.url);
|
|
13
13
|
|
|
@@ -19,6 +19,9 @@ export default {
|
|
|
19
19
|
|
|
20
20
|
for (const include of routes.include) {
|
|
21
21
|
if (isRoutingRuleMatch(pathname, include)) {
|
|
22
|
+
if (worker.fetch === undefined) {
|
|
23
|
+
throw new TypeError("Entry point missing `fetch` handler");
|
|
24
|
+
}
|
|
22
25
|
return worker.fetch(request, env, context);
|
|
23
26
|
}
|
|
24
27
|
}
|
|
@@ -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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// This Worker is used as a default when no Pages Functions are present.
|
|
2
2
|
// It proxies the request directly on to the asset server binding.
|
|
3
3
|
|
|
4
|
-
export default {
|
|
4
|
+
export default <ExportedHandler<{ ASSETS: Fetcher }>>{
|
|
5
5
|
async fetch(request, env, context) {
|
|
6
6
|
const response = await env.ASSETS.fetch(request.url, request);
|
|
7
7
|
return new Response(response.body, response);
|