wrangler 0.0.0-e30d1013 → 0.0.0-e311bbbf
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 +26 -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 -39
- 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 -52
- package/src/__tests__/dev.test.tsx +198 -90
- package/src/__tests__/generate.test.ts +8 -5
- 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 +127 -26
- 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 +1620 -830
- package/src/__tests__/pubsub.test.ts +226 -100
- package/src/__tests__/queues.test.ts +237 -76
- package/src/__tests__/r2.test.ts +37 -56
- 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 +11 -2
- 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 +221 -128
- 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 +73 -16
- package/src/config/index.ts +99 -30
- package/src/config/validation-helpers.ts +1 -1
- package/src/config/validation.ts +248 -9
- package/src/create-worker-preview.ts +19 -8
- package/src/create-worker-upload-form.ts +48 -5
- package/src/d1/backups.tsx +43 -42
- package/src/d1/create.tsx +26 -21
- package/src/d1/{delete.tsx → delete.ts} +11 -14
- package/src/d1/execute.tsx +183 -170
- package/src/d1/index.ts +7 -6
- 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 +3 -3
- package/src/d1/splitter.ts +161 -0
- package/src/d1/{types.tsx → types.ts} +1 -0
- package/src/d1/utils.ts +2 -1
- package/src/delete.ts +8 -16
- package/src/deployments.ts +333 -42
- package/src/deprecated/index.ts +8 -302
- package/src/dev/dev.tsx +57 -44
- package/src/dev/local.tsx +248 -74
- package/src/dev/remote.tsx +32 -3
- package/src/dev/start-server.ts +81 -66
- 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 -117
- 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} +134 -59
- 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 -139
- package/src/pages/errors.ts +1 -0
- package/src/pages/functions/buildPlugin.ts +61 -54
- package/src/pages/functions/buildWorker.ts +159 -33
- 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 +46 -225
- package/src/pages/types.ts +6 -9
- package/src/pages/upload.tsx +58 -14
- package/src/pages/utils.ts +12 -1
- 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 +71 -46
- 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/helpers.ts +1 -0
- package/src/r2/index.ts +28 -28
- package/src/secret/index.ts +14 -16
- 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 +28 -20
- 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 +30 -1
- 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 +51 -3
- 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 +820 -70
- package/wrangler-dist/cli.js +68161 -78780
- package/wrangler-dist/wasm-sync.wasm +0 -0
- package/src/__tests__/api-devregistry.test.js +0 -56
- package/src/__tests__/d1.test.ts +0 -74
- package/src/__tests__/dialogs.test.tsx +0 -40
- package/src/__tests__/helpers/mock-cfetch.ts +0 -333
- package/src/__tests__/pages.test.ts +0 -2387
- package/src/d1/migrations.tsx +0 -446
- package/src/dialogs.tsx +0 -169
- package/src/environment-variables.ts +0 -50
- package/src/pages/build.tsx +0 -270
- 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
|
@@ -10,23 +10,24 @@ import { FatalError } from "../errors";
|
|
|
10
10
|
import { logger } from "../logger";
|
|
11
11
|
import * as metrics from "../metrics";
|
|
12
12
|
import { getBasePath } from "../paths";
|
|
13
|
-
import { buildFunctions } from "./
|
|
13
|
+
import { buildFunctions } from "./buildFunctions";
|
|
14
14
|
import { ROUTES_SPEC_VERSION, SECONDS_TO_WAIT_FOR_PROXY } from "./constants";
|
|
15
15
|
import { FunctionsNoRoutesError, getFunctionsNoRoutesWarning } from "./errors";
|
|
16
|
+
import { buildRawWorker, checkRawWorker } from "./functions/buildWorker";
|
|
16
17
|
import { validateRoutes } from "./functions/routes-validation";
|
|
17
18
|
import { CLEANUP, CLEANUP_CALLBACKS, pagesBetaWarning } from "./utils";
|
|
18
19
|
import type { AdditionalDevProps } from "../dev";
|
|
20
|
+
import type {
|
|
21
|
+
CommonYargsArgv,
|
|
22
|
+
StrictYargsOptionsToInterface,
|
|
23
|
+
} from "../yargs-types";
|
|
19
24
|
import type { RoutesJSONSpec } from "./functions/routes-transformation";
|
|
20
|
-
import type { YargsOptionsToInterface } from "./types";
|
|
21
|
-
import type { Argv } from "yargs";
|
|
22
25
|
|
|
23
26
|
const DURABLE_OBJECTS_BINDING_REGEXP = new RegExp(
|
|
24
27
|
/^(?<binding>[^=]+)=(?<className>[^@\s]+)(@(?<scriptName>.*)$)?$/
|
|
25
28
|
);
|
|
26
29
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
export function Options(yargs: Argv) {
|
|
30
|
+
export function Options(yargs: CommonYargsArgv) {
|
|
30
31
|
return yargs
|
|
31
32
|
.positional("directory", {
|
|
32
33
|
type: "string",
|
|
@@ -78,6 +79,16 @@ export function Options(yargs: Argv) {
|
|
|
78
79
|
description:
|
|
79
80
|
"The location of the single Worker script if not using functions",
|
|
80
81
|
},
|
|
82
|
+
bundle: {
|
|
83
|
+
type: "boolean",
|
|
84
|
+
default: undefined,
|
|
85
|
+
hidden: true,
|
|
86
|
+
},
|
|
87
|
+
"no-bundle": {
|
|
88
|
+
type: "boolean",
|
|
89
|
+
default: false,
|
|
90
|
+
description: "Whether to run bundling on `_worker.js`",
|
|
91
|
+
},
|
|
81
92
|
binding: {
|
|
82
93
|
type: "array",
|
|
83
94
|
description: "Bind variable/secret (KEY=VALUE)",
|
|
@@ -129,11 +140,16 @@ export function Options(yargs: Argv) {
|
|
|
129
140
|
requiresArg: true,
|
|
130
141
|
},
|
|
131
142
|
"node-compat": {
|
|
132
|
-
describe: "Enable
|
|
143
|
+
describe: "Enable Node.js compatibility",
|
|
133
144
|
default: false,
|
|
134
145
|
type: "boolean",
|
|
135
146
|
hidden: true,
|
|
136
147
|
},
|
|
148
|
+
"experimental-local": {
|
|
149
|
+
describe: "Run on my machine using the Cloudflare Workers runtime",
|
|
150
|
+
type: "boolean",
|
|
151
|
+
default: false,
|
|
152
|
+
},
|
|
137
153
|
config: {
|
|
138
154
|
describe: "Pages does not support wrangler.toml",
|
|
139
155
|
type: "string",
|
|
@@ -150,35 +166,36 @@ export function Options(yargs: Argv) {
|
|
|
150
166
|
export const Handler = async ({
|
|
151
167
|
local,
|
|
152
168
|
directory,
|
|
153
|
-
|
|
154
|
-
|
|
169
|
+
compatibilityDate,
|
|
170
|
+
compatibilityFlags,
|
|
155
171
|
ip,
|
|
156
172
|
port,
|
|
157
|
-
|
|
173
|
+
inspectorPort,
|
|
158
174
|
proxy: requestedProxyPort,
|
|
159
|
-
|
|
175
|
+
bundle,
|
|
176
|
+
noBundle,
|
|
177
|
+
scriptPath: singleWorkerScriptPath,
|
|
160
178
|
binding: bindings = [],
|
|
161
179
|
kv: kvs = [],
|
|
162
180
|
do: durableObjects = [],
|
|
163
181
|
d1: d1s = [],
|
|
164
182
|
r2: r2s = [],
|
|
165
|
-
|
|
166
|
-
|
|
183
|
+
liveReload,
|
|
184
|
+
localProtocol,
|
|
167
185
|
experimentalEnableLocalPersistence,
|
|
168
186
|
persist,
|
|
169
187
|
persistTo,
|
|
170
|
-
|
|
188
|
+
nodeCompat: legacyNodeCompat,
|
|
189
|
+
experimentalLocal,
|
|
171
190
|
config: config,
|
|
172
191
|
_: [_pages, _dev, ...remaining],
|
|
173
192
|
logLevel,
|
|
174
|
-
}:
|
|
193
|
+
}: StrictYargsOptionsToInterface<typeof Options>) => {
|
|
175
194
|
// Beta message for `wrangler pages <commands>` usage
|
|
176
195
|
logger.log(pagesBetaWarning);
|
|
177
196
|
|
|
178
|
-
type LogLevelArg = "debug" | "info" | "log" | "warn" | "error" | "none";
|
|
179
197
|
if (logLevel) {
|
|
180
|
-
|
|
181
|
-
logger.loggerLevel = logLevel as LogLevelArg;
|
|
198
|
+
logger.loggerLevel = logLevel;
|
|
182
199
|
}
|
|
183
200
|
|
|
184
201
|
if (!local) {
|
|
@@ -245,26 +262,42 @@ export const Handler = async ({
|
|
|
245
262
|
|
|
246
263
|
let scriptPath = "";
|
|
247
264
|
|
|
248
|
-
|
|
249
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
250
|
-
scriptReadyResolve!();
|
|
265
|
+
const nodejsCompat = compatibilityFlags?.includes("nodejs_compat");
|
|
251
266
|
|
|
267
|
+
if (usingWorkerScript) {
|
|
252
268
|
scriptPath = workerScriptPath;
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
try {
|
|
256
|
-
await esbuild.build({
|
|
257
|
-
entryPoints: [scriptPath],
|
|
258
|
-
write: false,
|
|
259
|
-
// we need it to be bundled so that any imports that are used are affected by the blocker plugin
|
|
260
|
-
bundle: true,
|
|
261
|
-
plugins: [blockWorkerJsImports],
|
|
262
|
-
});
|
|
263
|
-
} catch {}
|
|
269
|
+
let runBuild = async () => {
|
|
270
|
+
await checkRawWorker(workerScriptPath, () => scriptReadyResolve());
|
|
264
271
|
};
|
|
265
272
|
|
|
273
|
+
// TODO: Here lies a known bug. If you specify both `--bundle` and `--no-bundle`, this behavior is undefined and you will get unexpected results.
|
|
274
|
+
// There is no sane way to get the true value out of yargs, so here we are.
|
|
275
|
+
const enableBundling = bundle ?? !noBundle;
|
|
276
|
+
if (enableBundling) {
|
|
277
|
+
// We want to actually run the `_worker.js` script through the bundler
|
|
278
|
+
// So update the final path to the script that will be uploaded and
|
|
279
|
+
// change the `runBuild()` function to bundle the `_worker.js`.
|
|
280
|
+
scriptPath = join(tmpdir(), `./bundledWorker-${Math.random()}.mjs`);
|
|
281
|
+
runBuild = async () => {
|
|
282
|
+
try {
|
|
283
|
+
await buildRawWorker({
|
|
284
|
+
workerScriptPath,
|
|
285
|
+
outfile: scriptPath,
|
|
286
|
+
directory: directory ?? ".",
|
|
287
|
+
nodejsCompat,
|
|
288
|
+
local: true,
|
|
289
|
+
sourcemap: true,
|
|
290
|
+
watch: true,
|
|
291
|
+
onEnd: () => scriptReadyResolve(),
|
|
292
|
+
});
|
|
293
|
+
} catch (e: unknown) {
|
|
294
|
+
logger.warn("Failed to bundle _worker.js.", e);
|
|
295
|
+
}
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
|
|
266
299
|
await runBuild();
|
|
267
|
-
watch([
|
|
300
|
+
watch([workerScriptPath], {
|
|
268
301
|
persistent: true,
|
|
269
302
|
ignoreInitial: true,
|
|
270
303
|
}).on("all", async () => {
|
|
@@ -272,49 +305,47 @@ export const Handler = async ({
|
|
|
272
305
|
});
|
|
273
306
|
} else if (usingFunctions) {
|
|
274
307
|
// Try to use Functions
|
|
275
|
-
|
|
276
|
-
scriptPath = outfile;
|
|
308
|
+
scriptPath = join(tmpdir(), `./functionsWorker-${Math.random()}.mjs`);
|
|
277
309
|
|
|
278
|
-
if (
|
|
310
|
+
if (legacyNodeCompat) {
|
|
279
311
|
console.warn(
|
|
280
|
-
"Enabling
|
|
312
|
+
"Enabling Node.js compatibility mode for builtins and globals. This is experimental and has serious tradeoffs. Please see https://github.com/ionic-team/rollup-plugin-node-polyfills/ for more details."
|
|
313
|
+
);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
if (legacyNodeCompat && nodejsCompat) {
|
|
317
|
+
throw new FatalError(
|
|
318
|
+
"The `nodejs_compat` compatibility flag cannot be used in conjunction with the legacy `--node-compat` flag. If you want to use the Workers runtime Node.js compatibility features, please remove the `--node-compat` argument from your CLI command or `node_compat = true` from your config file.",
|
|
319
|
+
1
|
|
281
320
|
);
|
|
282
321
|
}
|
|
283
322
|
|
|
284
|
-
logger.log(`Compiling worker to "${
|
|
323
|
+
logger.log(`Compiling worker to "${scriptPath}"...`);
|
|
285
324
|
const onEnd = () => scriptReadyResolve();
|
|
286
325
|
try {
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
326
|
+
const buildFn = async () => {
|
|
327
|
+
await buildFunctions({
|
|
328
|
+
outfile: scriptPath,
|
|
329
|
+
functionsDirectory,
|
|
330
|
+
sourcemap: true,
|
|
331
|
+
watch: true,
|
|
332
|
+
onEnd,
|
|
333
|
+
buildOutputDirectory: directory,
|
|
334
|
+
legacyNodeCompat,
|
|
335
|
+
nodejsCompat,
|
|
336
|
+
local: true,
|
|
337
|
+
});
|
|
338
|
+
await metrics.sendMetricsEvent("build pages functions");
|
|
339
|
+
};
|
|
299
340
|
|
|
341
|
+
await buildFn();
|
|
300
342
|
// If Functions found routes, continue using Functions
|
|
301
343
|
watch([functionsDirectory], {
|
|
302
344
|
persistent: true,
|
|
303
345
|
ignoreInitial: true,
|
|
304
346
|
}).on("all", async () => {
|
|
305
347
|
try {
|
|
306
|
-
await
|
|
307
|
-
outfile,
|
|
308
|
-
functionsDirectory,
|
|
309
|
-
sourcemap: true,
|
|
310
|
-
watch: true,
|
|
311
|
-
onEnd,
|
|
312
|
-
buildOutputDirectory: directory,
|
|
313
|
-
nodeCompat,
|
|
314
|
-
local: true,
|
|
315
|
-
d1Databases: d1s.map((binding) => binding.toString()),
|
|
316
|
-
});
|
|
317
|
-
await metrics.sendMetricsEvent("build pages functions");
|
|
348
|
+
await buildFn();
|
|
318
349
|
} catch (e) {
|
|
319
350
|
if (e instanceof FunctionsNoRoutesError) {
|
|
320
351
|
logger.warn(
|
|
@@ -355,7 +386,7 @@ export const Handler = async ({
|
|
|
355
386
|
|
|
356
387
|
if (scriptPath === "") {
|
|
357
388
|
// Failed to get a script with or without Functions,
|
|
358
|
-
// something really bad must have
|
|
389
|
+
// something really bad must have happened.
|
|
359
390
|
throw new FatalError(
|
|
360
391
|
"Failed to start wrangler pages dev due to an unknown error",
|
|
361
392
|
1
|
|
@@ -437,7 +468,7 @@ export const Handler = async ({
|
|
|
437
468
|
* If _routes.json is invalid, don't exit but instead fallback to a sensible default
|
|
438
469
|
* and continue to serve the assets. At the same time make sure we warn users that we
|
|
439
470
|
* we detected an invalid file and that we'll be using a default.
|
|
440
|
-
* This basically
|
|
471
|
+
* This basically equates to serving a Functions or _worker.js project as is,
|
|
441
472
|
* without applying any additional routing rules on top.
|
|
442
473
|
*/
|
|
443
474
|
const error =
|
|
@@ -466,77 +497,75 @@ export const Handler = async ({
|
|
|
466
497
|
}
|
|
467
498
|
}
|
|
468
499
|
|
|
469
|
-
const { stop, waitUntilExit } = await unstable_dev(
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
durableObject.toString()
|
|
500
|
-
);
|
|
501
|
-
return;
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
return {
|
|
505
|
-
name: binding,
|
|
506
|
-
class_name: className,
|
|
507
|
-
script_name: scriptName,
|
|
508
|
-
};
|
|
509
|
-
})
|
|
510
|
-
.filter(Boolean) as AdditionalDevProps["durableObjects"],
|
|
511
|
-
r2: r2s.map((binding) => {
|
|
512
|
-
return { binding: binding.toString(), bucket_name: "" };
|
|
513
|
-
}),
|
|
500
|
+
const { stop, waitUntilExit } = await unstable_dev(entrypoint, {
|
|
501
|
+
ip,
|
|
502
|
+
port,
|
|
503
|
+
inspectorPort,
|
|
504
|
+
localProtocol,
|
|
505
|
+
compatibilityDate,
|
|
506
|
+
compatibilityFlags,
|
|
507
|
+
nodeCompat: legacyNodeCompat,
|
|
508
|
+
vars: Object.fromEntries(
|
|
509
|
+
bindings
|
|
510
|
+
.map((binding) => binding.toString().split("="))
|
|
511
|
+
.map(([key, ...values]) => [key, values.join("=")])
|
|
512
|
+
),
|
|
513
|
+
kv: kvs.map((binding) => ({
|
|
514
|
+
binding: binding.toString(),
|
|
515
|
+
id: "",
|
|
516
|
+
})),
|
|
517
|
+
durableObjects: durableObjects
|
|
518
|
+
.map((durableObject) => {
|
|
519
|
+
const { binding, className, scriptName } =
|
|
520
|
+
DURABLE_OBJECTS_BINDING_REGEXP.exec(durableObject.toString())
|
|
521
|
+
?.groups || {};
|
|
522
|
+
|
|
523
|
+
if (!binding || !className) {
|
|
524
|
+
logger.warn(
|
|
525
|
+
"Could not parse Durable Object binding:",
|
|
526
|
+
durableObject.toString()
|
|
527
|
+
);
|
|
528
|
+
return;
|
|
529
|
+
}
|
|
514
530
|
|
|
531
|
+
return {
|
|
532
|
+
name: binding,
|
|
533
|
+
class_name: className,
|
|
534
|
+
script_name: scriptName,
|
|
535
|
+
};
|
|
536
|
+
})
|
|
537
|
+
.filter(Boolean) as AdditionalDevProps["durableObjects"],
|
|
538
|
+
r2: r2s.map((binding) => {
|
|
539
|
+
return { binding: binding.toString(), bucket_name: "" };
|
|
540
|
+
}),
|
|
541
|
+
persist,
|
|
542
|
+
persistTo,
|
|
543
|
+
inspect: undefined,
|
|
544
|
+
logLevel,
|
|
545
|
+
experimental: {
|
|
515
546
|
d1Databases: d1s.map((binding) => ({
|
|
516
547
|
binding: binding.toString(),
|
|
517
548
|
database_id: "", // Required for types, but unused by dev
|
|
518
549
|
database_name: `local-${binding}`,
|
|
519
550
|
})),
|
|
520
|
-
|
|
551
|
+
disableExperimentalWarning: true,
|
|
521
552
|
enablePagesAssetsServiceBinding: {
|
|
522
553
|
proxyPort,
|
|
523
554
|
directory,
|
|
524
555
|
},
|
|
556
|
+
experimentalLocal,
|
|
557
|
+
liveReload,
|
|
525
558
|
forceLocal: true,
|
|
526
|
-
persist,
|
|
527
|
-
persistTo,
|
|
528
559
|
showInteractiveDevSession: undefined,
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
logLevel: logLevel ?? "warn",
|
|
560
|
+
testMode: false,
|
|
561
|
+
watch: true,
|
|
532
562
|
},
|
|
533
|
-
|
|
534
|
-
);
|
|
563
|
+
});
|
|
535
564
|
await metrics.sendMetricsEvent("run pages dev");
|
|
536
565
|
|
|
537
566
|
CLEANUP_CALLBACKS.push(stop);
|
|
538
567
|
|
|
539
|
-
waitUntilExit().then(() => {
|
|
568
|
+
void waitUntilExit().then(() => {
|
|
540
569
|
CLEANUP();
|
|
541
570
|
process.exit(0);
|
|
542
571
|
});
|
|
@@ -685,24 +714,3 @@ async function spawnProxyProcess({
|
|
|
685
714
|
|
|
686
715
|
return port;
|
|
687
716
|
}
|
|
688
|
-
|
|
689
|
-
// TODO: Kill this once we have https://github.com/cloudflare/wrangler2/issues/2153
|
|
690
|
-
const blockWorkerJsImports: esbuild.Plugin = {
|
|
691
|
-
name: "block-worker-js-imports",
|
|
692
|
-
setup(build) {
|
|
693
|
-
build.onResolve({ filter: /.*/g }, (args) => {
|
|
694
|
-
// If it's the entrypoint, let it be as is
|
|
695
|
-
if (args.kind === "entry-point") {
|
|
696
|
-
return {
|
|
697
|
-
path: args.path,
|
|
698
|
-
};
|
|
699
|
-
}
|
|
700
|
-
// Otherwise, block any imports that the file is requesting
|
|
701
|
-
logger.error(
|
|
702
|
-
`_worker.js is importing from another file. This will throw an error if deployed.\nYou should bundle your Worker or remove the import if it is unused.`
|
|
703
|
-
);
|
|
704
|
-
// Miniflare will error with this briefly down the line -- there's no point in continuing.
|
|
705
|
-
process.exit(1);
|
|
706
|
-
});
|
|
707
|
-
},
|
|
708
|
-
};
|
package/src/pages/errors.ts
CHANGED
|
@@ -9,6 +9,7 @@ import { RoutesValidationError } from "./functions/routes-validation";
|
|
|
9
9
|
* Exit code for `pages functions build` when no routes are found.
|
|
10
10
|
*/
|
|
11
11
|
export const EXIT_CODE_FUNCTIONS_NO_ROUTES_ERROR = 156;
|
|
12
|
+
export const EXIT_CODE_FUNCTIONS_NOTHING_TO_BUILD_ERROR = 157;
|
|
12
13
|
|
|
13
14
|
/**
|
|
14
15
|
* Pages error when no routes are found in the functions directory
|
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
import { access, lstat } from "node:fs/promises";
|
|
2
|
-
import {
|
|
2
|
+
import { relative, resolve } from "node:path";
|
|
3
3
|
import { bundleWorker } from "../../bundle";
|
|
4
4
|
import { getBasePath } from "../../paths";
|
|
5
5
|
import { D1_BETA_PREFIX } from "../../worker";
|
|
6
|
+
import { buildNotifierPlugin } from "./buildWorker";
|
|
6
7
|
import type { Options as WorkerOptions } from "./buildWorker";
|
|
7
8
|
|
|
8
|
-
type Options = Omit<
|
|
9
|
+
type Options = Omit<
|
|
10
|
+
WorkerOptions,
|
|
11
|
+
"outfile" | "fallbackService" | "buildOutputDirectory" | "nodejsCompat"
|
|
12
|
+
> & { outdir: string };
|
|
9
13
|
|
|
10
14
|
export function buildPlugin({
|
|
11
15
|
routesModule,
|
|
12
|
-
|
|
16
|
+
outdir,
|
|
13
17
|
minify = false,
|
|
14
18
|
sourcemap = false,
|
|
15
19
|
watch = false,
|
|
16
20
|
onEnd = () => {},
|
|
17
|
-
|
|
21
|
+
legacyNodeCompat,
|
|
18
22
|
functionsDirectory,
|
|
19
23
|
local,
|
|
20
24
|
betaD1Shims,
|
|
@@ -24,83 +28,86 @@ export function buildPlugin({
|
|
|
24
28
|
file: resolve(getBasePath(), "templates/pages-template-plugin.ts"),
|
|
25
29
|
directory: functionsDirectory,
|
|
26
30
|
format: "modules",
|
|
31
|
+
moduleRoot: functionsDirectory,
|
|
27
32
|
},
|
|
28
|
-
resolve(
|
|
33
|
+
resolve(outdir),
|
|
29
34
|
{
|
|
30
35
|
inject: [routesModule],
|
|
36
|
+
entryName: "index",
|
|
31
37
|
minify,
|
|
32
38
|
sourcemap,
|
|
33
39
|
watch,
|
|
34
|
-
|
|
40
|
+
legacyNodeCompat,
|
|
41
|
+
// We don't currently have a mechanism for Plugins 'requiring' a specific compat date/flag,
|
|
42
|
+
// but if someone wants to publish a Plugin which does require this new `nodejs_compat` flag
|
|
43
|
+
// and they document that on their README.md, we should let them.
|
|
44
|
+
nodejsCompat: true,
|
|
35
45
|
define: {},
|
|
36
46
|
betaD1Shims: (betaD1Shims || []).map(
|
|
37
47
|
(binding) => `${D1_BETA_PREFIX}${binding}`
|
|
38
48
|
),
|
|
49
|
+
doBindings: [], // Pages functions don't support internal Durable Objects
|
|
39
50
|
plugins: [
|
|
40
|
-
|
|
41
|
-
name: "wrangler notifier and monitor",
|
|
42
|
-
setup(pluginBuild) {
|
|
43
|
-
pluginBuild.onEnd((result) => {
|
|
44
|
-
if (result.errors.length > 0) {
|
|
45
|
-
console.error(
|
|
46
|
-
`${result.errors.length} error(s) and ${result.warnings.length} warning(s) when compiling Worker.`
|
|
47
|
-
);
|
|
48
|
-
} else if (result.warnings.length > 0) {
|
|
49
|
-
console.warn(
|
|
50
|
-
`${result.warnings.length} warning(s) when compiling Worker.`
|
|
51
|
-
);
|
|
52
|
-
onEnd();
|
|
53
|
-
} else {
|
|
54
|
-
console.log("Compiled Worker successfully.");
|
|
55
|
-
onEnd();
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
},
|
|
59
|
-
},
|
|
51
|
+
buildNotifierPlugin(onEnd),
|
|
60
52
|
{
|
|
61
53
|
name: "Assets",
|
|
62
54
|
setup(pluginBuild) {
|
|
63
|
-
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
args.resolveDir,
|
|
69
|
-
args.path.slice("assets:".length)
|
|
70
|
-
);
|
|
55
|
+
pluginBuild.onResolve({ filter: /^assets:/ }, async (args) => {
|
|
56
|
+
const directory = resolve(
|
|
57
|
+
args.resolveDir,
|
|
58
|
+
args.path.slice("assets:".length)
|
|
59
|
+
);
|
|
71
60
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
61
|
+
const exists = await access(directory)
|
|
62
|
+
.then(() => true)
|
|
63
|
+
.catch(() => false);
|
|
75
64
|
|
|
76
|
-
|
|
77
|
-
|
|
65
|
+
const isDirectory =
|
|
66
|
+
exists && (await lstat(directory)).isDirectory();
|
|
78
67
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
68
|
+
if (!isDirectory) {
|
|
69
|
+
return {
|
|
70
|
+
errors: [
|
|
71
|
+
{
|
|
72
|
+
text: `'${directory}' does not exist or is not a directory.`,
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
};
|
|
76
|
+
}
|
|
88
77
|
|
|
89
|
-
|
|
78
|
+
const path = `assets:./${relative(outdir, directory)}`;
|
|
90
79
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
80
|
+
return { path, external: true, namespace: "assets" };
|
|
81
|
+
});
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
// TODO: Replace this with a proper outdir solution for Plugins
|
|
85
|
+
// But for now, let's just mark all wasm/bin files as external
|
|
86
|
+
{
|
|
87
|
+
name: "Mark externals",
|
|
88
|
+
setup(pluginBuild) {
|
|
89
|
+
pluginBuild.onResolve(
|
|
90
|
+
{ filter: /.*\.(wasm|bin)$/ },
|
|
91
|
+
async (args) => {
|
|
92
|
+
return {
|
|
93
|
+
external: true,
|
|
94
|
+
path: `./${relative(
|
|
95
|
+
outdir,
|
|
96
|
+
resolve(args.resolveDir, args.path)
|
|
97
|
+
)}`,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
);
|
|
94
101
|
},
|
|
95
102
|
},
|
|
96
103
|
],
|
|
97
|
-
isOutfile: true,
|
|
98
104
|
serveAssetsFromWorker: false,
|
|
99
|
-
disableModuleCollection:
|
|
105
|
+
disableModuleCollection: false,
|
|
100
106
|
rules: [],
|
|
101
107
|
checkFetch: local,
|
|
102
108
|
targetConsumer: local ? "dev" : "publish",
|
|
103
109
|
local,
|
|
110
|
+
experimentalLocal: false,
|
|
104
111
|
}
|
|
105
112
|
);
|
|
106
113
|
}
|