wrangler 0.0.0-e7a0cd5b → 0.0.0-e7cf0caa
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 +3 -3
- package/bin/wrangler.js +30 -10
- package/miniflare-dist/index.mjs +126 -74
- package/package.json +27 -19
- package/src/__tests__/api-dev.test.ts +65 -36
- package/src/__tests__/api-devregistry.test.ts +121 -0
- package/src/__tests__/api.test.ts +27 -5
- package/src/__tests__/configuration.test.ts +567 -86
- package/src/__tests__/d1/d1.test.ts +82 -0
- package/src/__tests__/d1/execute.test.ts +66 -0
- package/src/__tests__/d1/migrate.test.ts +157 -0
- package/src/__tests__/d1/splitter.test.ts +255 -0
- package/src/__tests__/delete.test.ts +91 -49
- package/src/__tests__/deployments.test.ts +330 -56
- package/src/__tests__/dev.test.tsx +198 -90
- package/src/__tests__/generate.test.ts +12 -10
- package/src/__tests__/guess-worker-format.test.ts +35 -0
- package/src/__tests__/helpers/end-event-loop.ts +6 -0
- package/src/__tests__/helpers/mock-auth-domain.ts +20 -0
- package/src/__tests__/helpers/mock-console.ts +6 -0
- package/src/__tests__/helpers/mock-dialogs.ts +71 -85
- package/src/__tests__/helpers/mock-get-pages-upload-token.ts +25 -0
- package/src/__tests__/helpers/mock-get-zone-from-host.ts +8 -5
- package/src/__tests__/helpers/mock-known-routes.ts +7 -2
- package/src/__tests__/helpers/mock-kv.ts +29 -16
- package/src/__tests__/helpers/mock-oauth-flow.ts +103 -92
- package/src/__tests__/helpers/mock-process.ts +8 -13
- package/src/__tests__/helpers/mock-set-timeout.ts +16 -0
- package/src/__tests__/helpers/msw/blob-worker.cjs +19 -0
- package/src/__tests__/helpers/msw/handlers/deployments.ts +128 -27
- package/src/__tests__/helpers/msw/handlers/namespaces.ts +18 -41
- package/src/__tests__/helpers/msw/handlers/oauth.ts +13 -18
- package/src/__tests__/helpers/msw/handlers/r2.ts +14 -34
- package/src/__tests__/helpers/msw/handlers/script.ts +9 -28
- package/src/__tests__/helpers/msw/handlers/user.ts +13 -24
- package/src/__tests__/helpers/msw/handlers/zones.ts +6 -8
- package/src/__tests__/helpers/msw/index.ts +32 -1
- package/src/__tests__/helpers/msw/read-file-sync.js +61 -0
- package/src/__tests__/helpers/string-dynamic-values-matcher.ts +28 -0
- package/src/__tests__/helpers/worker-scripts/parent-worker.js +4 -1
- package/src/__tests__/index.test.ts +90 -72
- package/src/__tests__/init.test.ts +927 -631
- package/src/__tests__/jest.setup.ts +19 -42
- package/src/__tests__/kv.test.ts +355 -231
- package/src/__tests__/logger.test.ts +68 -2
- package/src/__tests__/logout.test.ts +47 -0
- package/src/__tests__/metrics.test.ts +94 -51
- package/src/__tests__/middleware.scheduled.test.ts +42 -32
- package/src/__tests__/middleware.test.ts +212 -122
- package/src/__tests__/mtls-certificates.test.ts +588 -0
- package/src/__tests__/pages/deployment-list.test.ts +80 -0
- package/src/__tests__/pages/functions-build.test.ts +452 -0
- package/src/__tests__/pages/pages.test.ts +81 -0
- package/src/__tests__/pages/project-create.test.ts +63 -0
- package/src/__tests__/pages/project-list.test.ts +110 -0
- package/src/__tests__/pages/project-upload.test.ts +500 -0
- package/src/__tests__/pages/publish.test.ts +2864 -0
- package/src/__tests__/pages-deployment-tail.test.ts +955 -0
- package/src/__tests__/parse.test.ts +106 -0
- package/src/__tests__/publish.test.ts +1615 -852
- package/src/__tests__/pubsub.test.ts +226 -100
- package/src/__tests__/queues.test.ts +238 -77
- package/src/__tests__/r2.test.ts +55 -57
- package/src/__tests__/secret.test.ts +179 -130
- package/src/__tests__/tail.test.ts +267 -109
- package/src/__tests__/test-old-node-version.js +3 -3
- package/src/__tests__/traverse-module-graph.test.ts +220 -0
- package/src/__tests__/tsconfig-sanity.ts +12 -0
- package/src/__tests__/tsconfig.json +8 -0
- package/src/__tests__/tsconfig.tsbuildinfo +1 -0
- package/src/__tests__/type-generation.test.ts +43 -26
- package/src/__tests__/user.test.ts +35 -72
- package/src/__tests__/whoami.test.tsx +8 -114
- package/src/__tests__/worker-namespace.test.ts +83 -69
- package/src/api/dev.ts +168 -60
- package/src/api/index.ts +10 -1
- package/src/api/mtls-certificate.ts +148 -0
- package/src/api/pages/create-worker-bundle-contents.ts +76 -0
- package/src/api/pages/index.ts +5 -0
- package/src/api/pages/publish.tsx +355 -0
- package/src/bundle.ts +263 -140
- package/src/cfetch/index.ts +0 -2
- package/src/cfetch/internal.ts +16 -21
- package/src/cli.ts +4 -4
- package/src/config/config.ts +14 -7
- package/src/config/environment.ts +79 -24
- package/src/config/index.ts +99 -38
- package/src/config/validation-helpers.ts +1 -1
- package/src/config/validation.ts +248 -19
- package/src/create-worker-preview.ts +19 -8
- package/src/create-worker-upload-form.ts +60 -22
- package/src/d1/backups.tsx +43 -42
- package/src/d1/constants.ts +2 -0
- package/src/d1/create.tsx +44 -30
- package/src/d1/{delete.tsx → delete.ts} +11 -14
- package/src/d1/execute.tsx +209 -151
- package/src/d1/index.ts +31 -7
- package/src/d1/list.tsx +22 -10
- package/src/d1/migrations/apply.tsx +212 -0
- package/src/d1/migrations/create.tsx +79 -0
- package/src/d1/migrations/helpers.ts +172 -0
- package/src/d1/migrations/index.ts +3 -0
- package/src/d1/migrations/list.tsx +95 -0
- package/src/d1/migrations/options.ts +23 -0
- package/src/d1/options.ts +12 -2
- package/src/d1/splitter.ts +161 -0
- package/src/d1/{types.tsx → types.ts} +11 -0
- package/src/d1/utils.ts +12 -2
- package/src/delete.ts +8 -16
- package/src/deployments.ts +340 -46
- package/src/deprecated/index.ts +8 -302
- package/src/dev/dev.tsx +57 -44
- package/src/dev/local.tsx +294 -91
- package/src/dev/remote.tsx +32 -3
- package/src/dev/start-server.ts +89 -68
- package/src/dev/use-esbuild.ts +17 -18
- package/src/dev/validate-dev-props.ts +9 -0
- package/src/{dev-registry.tsx → dev-registry.ts} +2 -1
- package/src/dev.tsx +178 -118
- package/src/dialogs.ts +136 -0
- package/src/dispatch-namespace.ts +21 -17
- package/src/docs/index.ts +97 -0
- package/src/entry.ts +19 -11
- package/src/environment-variables/factory.ts +88 -0
- package/src/environment-variables/misc-variables.ts +30 -0
- package/src/generate/index.ts +298 -0
- package/src/git-client.ts +15 -4
- package/src/{index.tsx → index.ts} +137 -63
- package/src/init.ts +249 -187
- package/src/inspect.ts +16 -1
- package/src/jest.d.ts +4 -0
- package/src/kv/index.ts +15 -17
- package/src/logger.ts +32 -5
- package/src/metrics/metrics-config.ts +3 -3
- package/src/metrics/send-event.ts +6 -1
- package/src/miniflare-cli/assets.ts +64 -28
- package/src/miniflare-cli/index.ts +4 -7
- package/src/miniflare-cli/tsconfig.json +9 -0
- package/src/miniflare-cli/tsconfig.tsbuildinfo +1 -0
- package/src/miniflare-cli/types.ts +11 -0
- package/src/module-collection.ts +91 -25
- package/src/mtls-certificate/cli.ts +155 -0
- package/src/pages/build.ts +410 -0
- package/src/pages/buildFunctions.ts +140 -0
- package/src/pages/deployment-tails.ts +281 -0
- package/src/pages/deployments.tsx +11 -33
- package/src/pages/{dev.tsx → dev.ts} +147 -124
- package/src/pages/errors.ts +1 -0
- package/src/pages/functions/buildPlugin.ts +72 -69
- package/src/pages/functions/buildWorker.ts +249 -114
- package/src/pages/functions/tsconfig.json +8 -0
- package/src/pages/functions/tsconfig.tsbuildinfo +1 -0
- package/src/pages/{functions.tsx → functions.ts} +8 -4
- package/src/pages/{index.tsx → index.ts} +11 -3
- package/src/pages/projects.tsx +12 -22
- package/src/pages/prompt-select-project.tsx +31 -0
- package/src/pages/publish.tsx +45 -214
- package/src/pages/types.ts +6 -9
- package/src/pages/upload.tsx +58 -14
- package/src/pages/utils.ts +14 -3
- package/src/parse.ts +23 -1
- package/src/paths.ts +1 -1
- package/src/proxy.ts +5 -0
- package/src/publish/index.ts +20 -16
- package/src/publish/publish.ts +72 -47
- package/src/pubsub/{pubsub-commands.tsx → pubsub-commands.ts} +19 -20
- package/src/queues/cli/commands/consumer/add.ts +24 -24
- package/src/queues/cli/commands/consumer/index.ts +3 -6
- package/src/queues/cli/commands/consumer/remove.ts +11 -18
- package/src/queues/cli/commands/create.ts +8 -8
- package/src/queues/cli/commands/delete.ts +8 -8
- package/src/queues/cli/commands/index.ts +6 -4
- package/src/queues/cli/commands/list.ts +8 -8
- package/src/queues/client.ts +1 -0
- package/src/queues/utils.ts +18 -0
- package/src/r2/constants.ts +4 -0
- package/src/r2/helpers.ts +1 -0
- package/src/r2/index.ts +40 -28
- package/src/secret/index.ts +14 -17
- package/src/{sites.tsx → sites.ts} +1 -1
- package/src/tail/createTail.ts +94 -3
- package/src/tail/filters.ts +1 -1
- package/src/tail/index.ts +8 -11
- package/src/tail/printing.ts +15 -0
- package/src/traverse-module-graph.ts +53 -0
- package/src/tsconfig-sanity.ts +16 -0
- package/src/type-generation.ts +79 -57
- package/src/user/access.ts +0 -1
- package/src/user/auth-variables.ts +113 -0
- package/src/user/choose-account.tsx +1 -31
- package/src/user/index.ts +0 -1
- package/src/user/{user.tsx → user.ts} +123 -82
- package/src/utils/render.ts +93 -0
- package/src/{whoami.tsx → whoami.ts} +37 -71
- package/src/worker.ts +35 -3
- package/src/yargs-types.ts +22 -5
- package/templates/__tests__/tsconfig-sanity.ts +12 -0
- package/templates/__tests__/tsconfig.json +8 -0
- package/templates/__tests__/tsconfig.tsbuildinfo +1 -0
- package/templates/checked-fetch.js +9 -3
- package/templates/d1-beta-facade.js +95 -25
- package/templates/facade.d.ts +14 -0
- package/templates/first-party-worker-module-facade.ts +4 -3
- package/templates/format-dev-errors.ts +8 -6
- 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/loader-modules.ts +2 -2
- package/templates/middleware/loader-sw.ts +51 -31
- package/templates/middleware/middleware-miniflare3-json-error.ts +32 -0
- package/templates/new-worker.ts +3 -0
- package/templates/pages-dev-pipeline.ts +4 -1
- package/templates/pages-shim.ts +4 -1
- package/templates/pages-template-plugin.ts +19 -10
- package/templates/serve-static-assets.ts +17 -14
- package/templates/service-bindings-module-facade.js +1 -0
- package/templates/tsconfig-sanity.ts +11 -0
- package/templates/tsconfig.init.json +105 -0
- package/templates/tsconfig.json +5 -103
- package/templates/tsconfig.tsbuildinfo +1 -0
- package/wrangler-dist/cli.d.ts +826 -77
- package/wrangler-dist/cli.js +130734 -140838
- package/wrangler-dist/wasm-sync.wasm +0 -0
- package/src/__tests__/api-devregistry.test.js +0 -57
- package/src/__tests__/d1.test.ts +0 -72
- package/src/__tests__/dialogs.test.tsx +0 -40
- package/src/__tests__/helpers/mock-cfetch.ts +0 -333
- package/src/__tests__/pages.test.ts +0 -2223
- package/src/dialogs.tsx +0 -163
- package/src/environment-variables.ts +0 -50
- package/src/pages/build.tsx +0 -238
- package/src/user/env-vars.ts +0 -46
- package/templates/experimental-local-cache-stubs.js +0 -27
- /package/src/{bundle-reporter.tsx → bundle-reporter.ts} +0 -0
- /package/src/dev/{get-local-persistence-path.tsx → get-local-persistence-path.ts} +0 -0
- /package/src/pages/{hash.tsx → hash.ts} +0 -0
package/src/cfetch/internal.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import assert from "node:assert";
|
|
2
2
|
import { fetch, File, Headers } from "undici";
|
|
3
3
|
import { version as wranglerVersion } from "../../package.json";
|
|
4
|
-
import {
|
|
4
|
+
import { getCloudflareApiBaseUrl } from "../environment-variables/misc-variables";
|
|
5
5
|
import { logger } from "../logger";
|
|
6
6
|
import { ParseError, parseJSON } from "../parse";
|
|
7
7
|
import { loginOrRefreshIfRequired, requireApiToken } from "../user";
|
|
@@ -9,15 +9,6 @@ import type { ApiCredentials } from "../user";
|
|
|
9
9
|
import type { URLSearchParams } from "node:url";
|
|
10
10
|
import type { RequestInit, HeadersInit, Response } from "undici";
|
|
11
11
|
|
|
12
|
-
/**
|
|
13
|
-
* Get the URL to use to access the Cloudflare API.
|
|
14
|
-
*/
|
|
15
|
-
export const getCloudflareAPIBaseURL = getEnvironmentVariableFactory({
|
|
16
|
-
variableName: "CLOUDFLARE_API_BASE_URL",
|
|
17
|
-
deprecatedName: "CF_API_BASE_URL",
|
|
18
|
-
defaultValue: "https://api.cloudflare.com/client/v4",
|
|
19
|
-
});
|
|
20
|
-
|
|
21
12
|
/*
|
|
22
13
|
* performApiFetch does everything required to make a CF API request,
|
|
23
14
|
* but doesn't parse the response as JSON. For normal V4 API responses,
|
|
@@ -42,12 +33,17 @@ export async function performApiFetch(
|
|
|
42
33
|
|
|
43
34
|
const queryString = queryParams ? `?${queryParams.toString()}` : "";
|
|
44
35
|
logger.debug(
|
|
45
|
-
`-- START CF API REQUEST: ${method} ${
|
|
36
|
+
`-- START CF API REQUEST: ${method} ${getCloudflareApiBaseUrl()}${resource}${queryString}`
|
|
37
|
+
);
|
|
38
|
+
const logHeaders = cloneHeaders(headers);
|
|
39
|
+
delete logHeaders["Authorization"];
|
|
40
|
+
logger.debug("HEADERS:", JSON.stringify(logHeaders, null, 2));
|
|
41
|
+
logger.debug(
|
|
42
|
+
"INIT:",
|
|
43
|
+
JSON.stringify({ ...init, headers: logHeaders }, null, 2)
|
|
46
44
|
);
|
|
47
|
-
logger.debug("HEADERS:", JSON.stringify(headers, null, 2));
|
|
48
|
-
logger.debug("INIT:", JSON.stringify(init, null, 2));
|
|
49
45
|
logger.debug("-- END CF API REQUEST");
|
|
50
|
-
return await fetch(`${
|
|
46
|
+
return await fetch(`${getCloudflareApiBaseUrl()}${resource}${queryString}`, {
|
|
51
47
|
method,
|
|
52
48
|
...init,
|
|
53
49
|
headers,
|
|
@@ -83,7 +79,9 @@ export async function fetchInternal<ResponseType>(
|
|
|
83
79
|
response.statusText,
|
|
84
80
|
response.status
|
|
85
81
|
);
|
|
86
|
-
|
|
82
|
+
const logHeaders = cloneHeaders(response.headers);
|
|
83
|
+
delete logHeaders["Authorization"];
|
|
84
|
+
logger.debug("HEADERS:", JSON.stringify(logHeaders, null, 2));
|
|
87
85
|
logger.debug("RESPONSE:", jsonText);
|
|
88
86
|
logger.debug("-- END CF API RESPONSE");
|
|
89
87
|
|
|
@@ -166,7 +164,7 @@ export async function fetchKVGetValue(
|
|
|
166
164
|
const auth = requireApiToken();
|
|
167
165
|
const headers: Record<string, string> = {};
|
|
168
166
|
addAuthorizationHeaderIfUnspecified(headers, auth);
|
|
169
|
-
const resource = `${
|
|
167
|
+
const resource = `${getCloudflareApiBaseUrl()}/accounts/${accountId}/storage/kv/namespaces/${namespaceId}/values/${key}`;
|
|
170
168
|
const response = await fetch(resource, {
|
|
171
169
|
method: "GET",
|
|
172
170
|
headers,
|
|
@@ -199,7 +197,7 @@ export async function fetchR2Objects(
|
|
|
199
197
|
addAuthorizationHeaderIfUnspecified(headers, auth);
|
|
200
198
|
addUserAgent(headers);
|
|
201
199
|
|
|
202
|
-
const response = await fetch(`${
|
|
200
|
+
const response = await fetch(`${getCloudflareApiBaseUrl()}${resource}`, {
|
|
203
201
|
...bodyInit,
|
|
204
202
|
headers,
|
|
205
203
|
});
|
|
@@ -226,7 +224,7 @@ export async function fetchDashboardScript(
|
|
|
226
224
|
addAuthorizationHeaderIfUnspecified(headers, auth);
|
|
227
225
|
addUserAgent(headers);
|
|
228
226
|
|
|
229
|
-
const response = await fetch(`${
|
|
227
|
+
const response = await fetch(`${getCloudflareApiBaseUrl()}${resource}`, {
|
|
230
228
|
...bodyInit,
|
|
231
229
|
headers,
|
|
232
230
|
});
|
|
@@ -254,9 +252,6 @@ export async function fetchDashboardScript(
|
|
|
254
252
|
}
|
|
255
253
|
|
|
256
254
|
return file ?? "";
|
|
257
|
-
|
|
258
|
-
// Follow up on issue in Undici about multipart/form-data support & replace the workaround: https://github.com/nodejs/undici/issues/974
|
|
259
|
-
// This should be using a builtin formData() parser pattern.
|
|
260
255
|
} else {
|
|
261
256
|
return response.text();
|
|
262
257
|
}
|
package/src/cli.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import process from "process";
|
|
2
2
|
import { hideBin } from "yargs/helpers";
|
|
3
|
-
import { unstable_dev } from "./api";
|
|
3
|
+
import { unstable_dev, unstable_pages } from "./api";
|
|
4
4
|
import { FatalError } from "./errors";
|
|
5
5
|
import { main } from ".";
|
|
6
6
|
|
|
7
|
-
import type { UnstableDevWorker } from "./api";
|
|
7
|
+
import type { UnstableDevWorker, UnstableDevOptions } from "./api";
|
|
8
8
|
/**
|
|
9
9
|
* The main entrypoint for the CLI.
|
|
10
10
|
* main only gets called when the script is run directly, not when it's imported as a module.
|
|
@@ -24,5 +24,5 @@ if (typeof jest === "undefined" && require.main === module) {
|
|
|
24
24
|
* It makes it possible to import wrangler from 'wrangler',
|
|
25
25
|
* and call wrangler.unstable_dev().
|
|
26
26
|
*/
|
|
27
|
-
export { unstable_dev };
|
|
28
|
-
export type { UnstableDevWorker };
|
|
27
|
+
export { unstable_dev, unstable_pages };
|
|
28
|
+
export type { UnstableDevWorker, UnstableDevOptions };
|
package/src/config/config.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Environment, RawEnvironment } from "./environment";
|
|
2
|
+
import type { CamelCaseKey } from "yargs";
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* This is the static type definition for the configuration object.
|
|
@@ -17,7 +18,7 @@ import type { Environment, RawEnvironment } from "./environment";
|
|
|
17
18
|
*
|
|
18
19
|
* Legend for the annotations:
|
|
19
20
|
*
|
|
20
|
-
* - `@breaking`: the deprecation/optionality is a breaking change from
|
|
21
|
+
* - `@breaking`: the deprecation/optionality is a breaking change from Wrangler v1.
|
|
21
22
|
* - `@todo`: there's more work to be done (with details attached).
|
|
22
23
|
*/
|
|
23
24
|
export type Config = ConfigFields<DevConfig> & Environment;
|
|
@@ -31,7 +32,7 @@ export interface ConfigFields<Dev extends RawDevConfig> {
|
|
|
31
32
|
configPath: string | undefined;
|
|
32
33
|
|
|
33
34
|
/**
|
|
34
|
-
* A boolean to enable "legacy" style wrangler environments (from
|
|
35
|
+
* A boolean to enable "legacy" style wrangler environments (from Wrangler v1).
|
|
35
36
|
* These have been superseded by Services, but there may be projects that won't
|
|
36
37
|
* (or can't) use them. If you're using a legacy environment, you can set this
|
|
37
38
|
* to `true` to enable it.
|
|
@@ -95,7 +96,7 @@ export interface ConfigFields<Dev extends RawDevConfig> {
|
|
|
95
96
|
/**
|
|
96
97
|
* The location of your Worker script.
|
|
97
98
|
*
|
|
98
|
-
* @deprecated DO NOT use this (it's a holdover from
|
|
99
|
+
* @deprecated DO NOT use this (it's a holdover from Wrangler v1.x). Either use the top level `main` field, or pass the path to your entry file as a command line argument.
|
|
99
100
|
* @breaking
|
|
100
101
|
*/
|
|
101
102
|
"entry-point"?: string;
|
|
@@ -215,10 +216,10 @@ export interface DevConfig {
|
|
|
215
216
|
* Protocol that wrangler dev forwards requests on
|
|
216
217
|
*
|
|
217
218
|
* Setting this to `http` is not currently implemented.
|
|
218
|
-
* See https://github.com/cloudflare/
|
|
219
|
+
* See https://github.com/cloudflare/workers-sdk/issues/583
|
|
219
220
|
*
|
|
220
221
|
* @default `https`
|
|
221
|
-
* @todo this needs to be implemented https://github.com/cloudflare/
|
|
222
|
+
* @todo this needs to be implemented https://github.com/cloudflare/workers-sdk/issues/583
|
|
222
223
|
*/
|
|
223
224
|
upstream_protocol: "https" | "http";
|
|
224
225
|
|
|
@@ -232,7 +233,7 @@ export type RawDevConfig = Partial<DevConfig>;
|
|
|
232
233
|
|
|
233
234
|
export interface DeprecatedConfigFields {
|
|
234
235
|
/**
|
|
235
|
-
* The project "type". A holdover from
|
|
236
|
+
* The project "type". A holdover from Wrangler v1.x.
|
|
236
237
|
* Valid values were "webpack", "javascript", and "rust".
|
|
237
238
|
*
|
|
238
239
|
* @deprecated DO NOT USE THIS. Most common features now work out of the box with wrangler, including modules, jsx, typescript, etc. If you need anything more, use a custom build.
|
|
@@ -242,7 +243,7 @@ export interface DeprecatedConfigFields {
|
|
|
242
243
|
|
|
243
244
|
/**
|
|
244
245
|
* Path to the webpack config to use when building your worker.
|
|
245
|
-
* A holdover from
|
|
246
|
+
* A holdover from Wrangler v1.x, used with `type: "webpack"`.
|
|
246
247
|
*
|
|
247
248
|
* @deprecated DO NOT USE THIS. Most common features now work out of the box with wrangler, including modules, jsx, typescript, etc. If you need anything more, use a custom build.
|
|
248
249
|
* @breaking
|
|
@@ -273,3 +274,9 @@ interface EnvironmentMap {
|
|
|
273
274
|
[envName: string]: RawEnvironment;
|
|
274
275
|
};
|
|
275
276
|
}
|
|
277
|
+
|
|
278
|
+
// API dev only passes in camel-cased versions of keys, so ensure
|
|
279
|
+
// only camel-cased keys are used
|
|
280
|
+
export type OnlyCamelCase<T = Record<string, never>> = {
|
|
281
|
+
[key in keyof T as CamelCaseKey<key>]: T[key];
|
|
282
|
+
};
|
|
@@ -74,11 +74,17 @@ interface EnvironmentInheritable {
|
|
|
74
74
|
*/
|
|
75
75
|
main: string | undefined;
|
|
76
76
|
|
|
77
|
+
/**
|
|
78
|
+
* The directory in which module rules should be evaluated in a `--no-bundle` worker
|
|
79
|
+
* This defaults to dirname(main) when left undefined
|
|
80
|
+
*/
|
|
81
|
+
base_dir: string | undefined;
|
|
82
|
+
|
|
77
83
|
/**
|
|
78
84
|
* Whether we use <name>.<subdomain>.workers.dev to
|
|
79
85
|
* test and deploy your worker.
|
|
80
86
|
*
|
|
81
|
-
* @default `true` (This is a breaking change from
|
|
87
|
+
* @default `true` (This is a breaking change from Wrangler v1)
|
|
82
88
|
* @breaking
|
|
83
89
|
* @inheritable
|
|
84
90
|
*/
|
|
@@ -261,6 +267,17 @@ interface EnvironmentInheritable {
|
|
|
261
267
|
logpush: boolean | undefined;
|
|
262
268
|
}
|
|
263
269
|
|
|
270
|
+
export type DurableObjectBindings = {
|
|
271
|
+
/** The name of the binding used to refer to the Durable Object */
|
|
272
|
+
name: string;
|
|
273
|
+
/** The exported class name of the Durable Object */
|
|
274
|
+
class_name: string;
|
|
275
|
+
/** The script where the Durable Object is defined (if it's external to this worker) */
|
|
276
|
+
script_name?: string;
|
|
277
|
+
/** The service environment of the script_name to bind to */
|
|
278
|
+
environment?: string;
|
|
279
|
+
}[];
|
|
280
|
+
|
|
264
281
|
/**
|
|
265
282
|
* The `EnvironmentNonInheritable` interface declares all the configuration fields for an environment
|
|
266
283
|
* that cannot be inherited from the top-level environment, and must be defined specifically.
|
|
@@ -290,14 +307,6 @@ interface EnvironmentNonInheritable {
|
|
|
290
307
|
*/
|
|
291
308
|
vars: { [key: string]: unknown };
|
|
292
309
|
|
|
293
|
-
/**
|
|
294
|
-
* Specifies namespace binding that is bound to this Worker environment.
|
|
295
|
-
* It allows for access at runtime to the Workers metadata.
|
|
296
|
-
* @default `undefined`
|
|
297
|
-
* @nonInheritable
|
|
298
|
-
**/
|
|
299
|
-
metadata_binding: string | undefined;
|
|
300
|
-
|
|
301
310
|
/**
|
|
302
311
|
* A list of durable objects that your worker should be bound to.
|
|
303
312
|
*
|
|
@@ -311,16 +320,7 @@ interface EnvironmentNonInheritable {
|
|
|
311
320
|
* @nonInheritable
|
|
312
321
|
*/
|
|
313
322
|
durable_objects: {
|
|
314
|
-
bindings:
|
|
315
|
-
/** The name of the binding used to refer to the Durable Object */
|
|
316
|
-
name: string;
|
|
317
|
-
/** The exported class name of the Durable Object */
|
|
318
|
-
class_name: string;
|
|
319
|
-
/** The script where the Durable Object is defined (if it's external to this worker) */
|
|
320
|
-
script_name?: string;
|
|
321
|
-
/** The service environment of the script_name to bind to */
|
|
322
|
-
environment?: string;
|
|
323
|
-
}[];
|
|
323
|
+
bindings: DurableObjectBindings;
|
|
324
324
|
};
|
|
325
325
|
|
|
326
326
|
/**
|
|
@@ -345,6 +345,24 @@ interface EnvironmentNonInheritable {
|
|
|
345
345
|
preview_id?: string;
|
|
346
346
|
}[];
|
|
347
347
|
|
|
348
|
+
/**
|
|
349
|
+
* These specify bindings to send email from inside your Worker.
|
|
350
|
+
*
|
|
351
|
+
* NOTE: This field is not automatically inherited from the top level environment,
|
|
352
|
+
* and so must be specified in every named environment.
|
|
353
|
+
*
|
|
354
|
+
* @default `[]`
|
|
355
|
+
* @nonInheritable
|
|
356
|
+
*/
|
|
357
|
+
send_email: {
|
|
358
|
+
/** The binding name used to refer to the this binding */
|
|
359
|
+
name: string;
|
|
360
|
+
/** If this binding should be restricted to a specific verified address */
|
|
361
|
+
destination_address?: string;
|
|
362
|
+
/** If this binding should be restricted to a set of verified addresses */
|
|
363
|
+
allowed_destination_addresses?: string[];
|
|
364
|
+
}[];
|
|
365
|
+
|
|
348
366
|
/**
|
|
349
367
|
* Specifies Queues that are bound to this Worker environment.
|
|
350
368
|
*
|
|
@@ -380,6 +398,9 @@ interface EnvironmentNonInheritable {
|
|
|
380
398
|
|
|
381
399
|
/** The queue to send messages that failed to be consumed. */
|
|
382
400
|
dead_letter_queue?: string;
|
|
401
|
+
|
|
402
|
+
/** The maximum number of concurrent consumer Worker invocations. Leaving this unset will allow your consumer to scale to the maximum concurrency needed to keep up with the message backlog. */
|
|
403
|
+
max_concurrency?: number | null;
|
|
383
404
|
}[];
|
|
384
405
|
};
|
|
385
406
|
|
|
@@ -419,6 +440,12 @@ interface EnvironmentNonInheritable {
|
|
|
419
440
|
database_id: string;
|
|
420
441
|
/** The UUID of this D1 database for Wrangler Dev (if specified). */
|
|
421
442
|
preview_database_id?: string;
|
|
443
|
+
/** The name of the migrations table for this D1 database (defaults to 'd1_migrations'). */
|
|
444
|
+
migrations_table?: string;
|
|
445
|
+
/** The path to the directory of migrations for this D1 database (defaults to './migrations'). */
|
|
446
|
+
migrations_dir?: string;
|
|
447
|
+
/** Internal use only. */
|
|
448
|
+
database_internal_env?: string;
|
|
422
449
|
}[];
|
|
423
450
|
|
|
424
451
|
/**
|
|
@@ -441,13 +468,28 @@ interface EnvironmentNonInheritable {
|
|
|
441
468
|
}[]
|
|
442
469
|
| undefined;
|
|
443
470
|
|
|
471
|
+
/**
|
|
472
|
+
* Specifies analytics engine datasets that are bound to this Worker environment.
|
|
473
|
+
*
|
|
474
|
+
* NOTE: This field is not automatically inherited from the top level environment,
|
|
475
|
+
* and so must be specified in every named environment.
|
|
476
|
+
*
|
|
477
|
+
* @default `[]`
|
|
478
|
+
* @nonInheritable
|
|
479
|
+
*/
|
|
480
|
+
analytics_engine_datasets: {
|
|
481
|
+
/** The binding name used to refer to the dataset in the worker. */
|
|
482
|
+
binding: string;
|
|
483
|
+
/** The name of this dataset to write to. */
|
|
484
|
+
dataset?: string;
|
|
485
|
+
}[];
|
|
486
|
+
|
|
444
487
|
/**
|
|
445
488
|
* "Unsafe" tables for features that aren't directly supported by wrangler.
|
|
446
489
|
*
|
|
447
490
|
* NOTE: This field is not automatically inherited from the top level environment,
|
|
448
491
|
* and so must be specified in every named environment.
|
|
449
492
|
*
|
|
450
|
-
* @default `{ bindings: [] }`
|
|
451
493
|
* @nonInheritable
|
|
452
494
|
*/
|
|
453
495
|
unsafe: {
|
|
@@ -455,15 +497,28 @@ interface EnvironmentNonInheritable {
|
|
|
455
497
|
* A set of bindings that should be put into a Worker's upload metadata without changes. These
|
|
456
498
|
* can be used to implement bindings for features that haven't released and aren't supported
|
|
457
499
|
* directly by wrangler or miniflare.
|
|
458
|
-
*
|
|
459
|
-
* @default []
|
|
460
500
|
*/
|
|
461
|
-
bindings
|
|
501
|
+
bindings?: {
|
|
462
502
|
name: string;
|
|
463
503
|
type: string;
|
|
464
504
|
[key: string]: unknown;
|
|
465
505
|
}[];
|
|
506
|
+
|
|
507
|
+
/**
|
|
508
|
+
* Arbitrary key/value pairs that will be included in the uploaded metadata. Values specified
|
|
509
|
+
* here will always be applied to metadata last, so can add new or override existing fields.
|
|
510
|
+
*/
|
|
511
|
+
metadata?: {
|
|
512
|
+
[key: string]: string;
|
|
513
|
+
};
|
|
466
514
|
};
|
|
515
|
+
|
|
516
|
+
mtls_certificates: {
|
|
517
|
+
/** The binding name used to refer to the certificate in the worker */
|
|
518
|
+
binding: string;
|
|
519
|
+
/** The uuid of the uploaded mTLS certificate */
|
|
520
|
+
certificate_id: string;
|
|
521
|
+
}[];
|
|
467
522
|
}
|
|
468
523
|
|
|
469
524
|
/**
|
|
@@ -481,7 +536,7 @@ interface EnvironmentDeprecated {
|
|
|
481
536
|
/**
|
|
482
537
|
* Legacy way of defining KVNamespaces that is no longer supported.
|
|
483
538
|
*
|
|
484
|
-
* @deprecated DO NOT USE. This was a legacy bug from
|
|
539
|
+
* @deprecated DO NOT USE. This was a legacy bug from Wrangler v1, that we do not want to support.
|
|
485
540
|
*/
|
|
486
541
|
"kv-namespaces"?: string;
|
|
487
542
|
|
package/src/config/index.ts
CHANGED
|
@@ -2,12 +2,12 @@ import fs from "node:fs";
|
|
|
2
2
|
import dotenv from "dotenv";
|
|
3
3
|
import { findUpSync } from "find-up";
|
|
4
4
|
import { logger } from "../logger";
|
|
5
|
-
import { parseTOML, readFileSync } from "../parse";
|
|
5
|
+
import { parseJSONC, parseTOML, readFileSync } from "../parse";
|
|
6
6
|
import { removeD1BetaPrefix } from "../worker";
|
|
7
7
|
import { normalizeAndValidateConfig } from "./validation";
|
|
8
8
|
import type { CfWorkerInit } from "../worker";
|
|
9
|
-
import type {
|
|
10
|
-
import type {
|
|
9
|
+
import type { CommonYargsOptions } from "../yargs-types";
|
|
10
|
+
import type { Config, OnlyCamelCase, RawConfig } from "./config";
|
|
11
11
|
|
|
12
12
|
export type {
|
|
13
13
|
Config,
|
|
@@ -25,18 +25,21 @@ export type {
|
|
|
25
25
|
/**
|
|
26
26
|
* Get the Wrangler configuration; read it from the give `configPath` if available.
|
|
27
27
|
*/
|
|
28
|
-
|
|
28
|
+
|
|
29
|
+
export function readConfig<CommandArgs>(
|
|
29
30
|
configPath: string | undefined,
|
|
30
|
-
args
|
|
31
|
+
// Include command specific args as well as the wrangler global flags
|
|
32
|
+
args: CommandArgs & OnlyCamelCase<CommonYargsOptions>
|
|
31
33
|
): Config {
|
|
32
34
|
let rawConfig: RawConfig = {};
|
|
33
35
|
if (!configPath) {
|
|
34
|
-
configPath = findWranglerToml();
|
|
36
|
+
configPath = findWranglerToml(process.cwd(), args.experimentalJsonConfig);
|
|
35
37
|
}
|
|
36
|
-
|
|
37
38
|
// Load the configuration from disk if available
|
|
38
|
-
if (configPath) {
|
|
39
|
+
if (configPath?.endsWith("toml")) {
|
|
39
40
|
rawConfig = parseTOML(readFileSync(configPath), configPath);
|
|
41
|
+
} else if (configPath?.endsWith("json")) {
|
|
42
|
+
rawConfig = parseJSONC(readFileSync(configPath), configPath);
|
|
40
43
|
}
|
|
41
44
|
|
|
42
45
|
// Process the top-level configuration.
|
|
@@ -61,10 +64,16 @@ export function readConfig(
|
|
|
61
64
|
* from the current working directory.
|
|
62
65
|
*/
|
|
63
66
|
export function findWranglerToml(
|
|
64
|
-
referencePath: string = process.cwd()
|
|
67
|
+
referencePath: string = process.cwd(),
|
|
68
|
+
preferJson = false
|
|
65
69
|
): string | undefined {
|
|
66
|
-
|
|
67
|
-
|
|
70
|
+
if (preferJson) {
|
|
71
|
+
return (
|
|
72
|
+
findUpSync(`wrangler.json`, { cwd: referencePath }) ??
|
|
73
|
+
findUpSync(`wrangler.toml`, { cwd: referencePath })
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
return findUpSync(`wrangler.toml`, { cwd: referencePath });
|
|
68
77
|
}
|
|
69
78
|
|
|
70
79
|
/**
|
|
@@ -88,17 +97,19 @@ export function printBindings(bindings: CfWorkerInit["bindings"]) {
|
|
|
88
97
|
data_blobs,
|
|
89
98
|
durable_objects,
|
|
90
99
|
kv_namespaces,
|
|
100
|
+
send_email,
|
|
91
101
|
queues,
|
|
92
102
|
d1_databases,
|
|
93
103
|
r2_buckets,
|
|
94
104
|
logfwdr,
|
|
95
105
|
services,
|
|
106
|
+
analytics_engine_datasets,
|
|
96
107
|
text_blobs,
|
|
97
108
|
unsafe,
|
|
98
109
|
vars,
|
|
99
|
-
metadata_binding,
|
|
100
110
|
wasm_modules,
|
|
101
111
|
dispatch_namespaces,
|
|
112
|
+
mtls_certificates,
|
|
102
113
|
} = bindings;
|
|
103
114
|
|
|
104
115
|
if (data_blobs !== undefined && Object.keys(data_blobs).length > 0) {
|
|
@@ -145,6 +156,23 @@ export function printBindings(bindings: CfWorkerInit["bindings"]) {
|
|
|
145
156
|
});
|
|
146
157
|
}
|
|
147
158
|
|
|
159
|
+
if (send_email !== undefined && send_email.length > 0) {
|
|
160
|
+
output.push({
|
|
161
|
+
type: "Send Email",
|
|
162
|
+
entries: send_email.map(
|
|
163
|
+
({ name, destination_address, allowed_destination_addresses }) => {
|
|
164
|
+
return {
|
|
165
|
+
key: name,
|
|
166
|
+
value:
|
|
167
|
+
destination_address ||
|
|
168
|
+
allowed_destination_addresses?.join(", ") ||
|
|
169
|
+
"unrestricted",
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
),
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
|
|
148
176
|
if (queues !== undefined && queues.length > 0) {
|
|
149
177
|
output.push({
|
|
150
178
|
type: "Queues",
|
|
@@ -160,14 +188,22 @@ export function printBindings(bindings: CfWorkerInit["bindings"]) {
|
|
|
160
188
|
if (d1_databases !== undefined && d1_databases.length > 0) {
|
|
161
189
|
output.push({
|
|
162
190
|
type: "D1 Databases",
|
|
163
|
-
entries: d1_databases.map(
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
191
|
+
entries: d1_databases.map(
|
|
192
|
+
({ binding, database_name, database_id, preview_database_id }) => {
|
|
193
|
+
let databaseValue = `${database_id}`;
|
|
194
|
+
if (database_name) {
|
|
195
|
+
databaseValue = `${database_name} (${database_id})`;
|
|
196
|
+
}
|
|
197
|
+
//database_id is local when running `wrangler dev --local`
|
|
198
|
+
if (preview_database_id && database_id !== "local") {
|
|
199
|
+
databaseValue += `, Preview: (${preview_database_id})`;
|
|
200
|
+
}
|
|
201
|
+
return {
|
|
202
|
+
key: removeD1BetaPrefix(binding),
|
|
203
|
+
value: databaseValue,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
),
|
|
171
207
|
});
|
|
172
208
|
}
|
|
173
209
|
|
|
@@ -212,6 +248,21 @@ export function printBindings(bindings: CfWorkerInit["bindings"]) {
|
|
|
212
248
|
});
|
|
213
249
|
}
|
|
214
250
|
|
|
251
|
+
if (
|
|
252
|
+
analytics_engine_datasets !== undefined &&
|
|
253
|
+
analytics_engine_datasets.length > 0
|
|
254
|
+
) {
|
|
255
|
+
output.push({
|
|
256
|
+
type: "Analytics Engine Datasets",
|
|
257
|
+
entries: analytics_engine_datasets.map(({ binding, dataset }) => {
|
|
258
|
+
return {
|
|
259
|
+
key: binding,
|
|
260
|
+
value: dataset ?? binding,
|
|
261
|
+
};
|
|
262
|
+
}),
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
|
|
215
266
|
if (text_blobs !== undefined && Object.keys(text_blobs).length > 0) {
|
|
216
267
|
output.push({
|
|
217
268
|
type: "Text Blobs",
|
|
@@ -222,10 +273,10 @@ export function printBindings(bindings: CfWorkerInit["bindings"]) {
|
|
|
222
273
|
});
|
|
223
274
|
}
|
|
224
275
|
|
|
225
|
-
if (unsafe !== undefined && unsafe.length > 0) {
|
|
276
|
+
if (unsafe?.bindings !== undefined && unsafe.bindings.length > 0) {
|
|
226
277
|
output.push({
|
|
227
278
|
type: "Unsafe",
|
|
228
|
-
entries: unsafe.map(({ name, type }) => ({
|
|
279
|
+
entries: unsafe.bindings.map(({ name, type }) => ({
|
|
229
280
|
key: type,
|
|
230
281
|
value: name,
|
|
231
282
|
})),
|
|
@@ -252,13 +303,6 @@ export function printBindings(bindings: CfWorkerInit["bindings"]) {
|
|
|
252
303
|
});
|
|
253
304
|
}
|
|
254
305
|
|
|
255
|
-
if (metadata_binding !== undefined && metadata_binding.length > 0) {
|
|
256
|
-
output.push({
|
|
257
|
-
type: "Metadata Binding",
|
|
258
|
-
entries: [{ key: "metadata", value: metadata_binding }],
|
|
259
|
-
});
|
|
260
|
-
}
|
|
261
|
-
|
|
262
306
|
if (wasm_modules !== undefined && Object.keys(wasm_modules).length > 0) {
|
|
263
307
|
output.push({
|
|
264
308
|
type: "Wasm Modules",
|
|
@@ -281,6 +325,28 @@ export function printBindings(bindings: CfWorkerInit["bindings"]) {
|
|
|
281
325
|
});
|
|
282
326
|
}
|
|
283
327
|
|
|
328
|
+
if (mtls_certificates !== undefined && mtls_certificates.length > 0) {
|
|
329
|
+
output.push({
|
|
330
|
+
type: "mTLS Certificates",
|
|
331
|
+
entries: mtls_certificates.map(({ binding, certificate_id }) => {
|
|
332
|
+
return {
|
|
333
|
+
key: binding,
|
|
334
|
+
value: certificate_id,
|
|
335
|
+
};
|
|
336
|
+
}),
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
if (unsafe?.metadata !== undefined) {
|
|
341
|
+
output.push({
|
|
342
|
+
type: "Unsafe Metadata",
|
|
343
|
+
entries: Object.entries(unsafe.metadata).map(([key, value]) => ({
|
|
344
|
+
key,
|
|
345
|
+
value: `${value}`,
|
|
346
|
+
})),
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
|
|
284
350
|
if (output.length === 0) {
|
|
285
351
|
return;
|
|
286
352
|
}
|
|
@@ -300,18 +366,13 @@ export function printBindings(bindings: CfWorkerInit["bindings"]) {
|
|
|
300
366
|
logger.log(message);
|
|
301
367
|
}
|
|
302
368
|
|
|
303
|
-
|
|
304
|
-
[key in keyof T as key | CamelCaseKey<key>]: T[key];
|
|
305
|
-
};
|
|
306
|
-
|
|
307
|
-
export function withConfig<T extends { config?: string }>(
|
|
369
|
+
export function withConfig<T>(
|
|
308
370
|
handler: (
|
|
309
|
-
t:
|
|
371
|
+
t: OnlyCamelCase<T & CommonYargsOptions> & { config: Config }
|
|
310
372
|
) => Promise<void>
|
|
311
373
|
) {
|
|
312
|
-
return (t:
|
|
313
|
-
|
|
314
|
-
return handler({ ...rest, config: readConfig(configPath, rest) });
|
|
374
|
+
return (t: OnlyCamelCase<T & CommonYargsOptions>) => {
|
|
375
|
+
return handler({ ...t, config: readConfig(t.config, t) });
|
|
315
376
|
};
|
|
316
377
|
}
|
|
317
378
|
|
|
@@ -550,7 +550,7 @@ export const getBindingNames = (value: unknown): string[] => {
|
|
|
550
550
|
} else if (isNamespaceList(value)) {
|
|
551
551
|
return value.map(({ binding }) => binding);
|
|
552
552
|
} else if (isRecord(value)) {
|
|
553
|
-
return Object.keys(value);
|
|
553
|
+
return Object.keys(value).filter((k) => value[k] !== undefined);
|
|
554
554
|
} else {
|
|
555
555
|
return [];
|
|
556
556
|
}
|