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
|
@@ -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,24 +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
|
-
plugins: [blockWorkerJsImports],
|
|
260
|
-
});
|
|
261
|
-
} catch {}
|
|
269
|
+
let runBuild = async () => {
|
|
270
|
+
await checkRawWorker(workerScriptPath, () => scriptReadyResolve());
|
|
262
271
|
};
|
|
263
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
|
+
|
|
264
299
|
await runBuild();
|
|
265
|
-
watch([
|
|
300
|
+
watch([workerScriptPath], {
|
|
266
301
|
persistent: true,
|
|
267
302
|
ignoreInitial: true,
|
|
268
303
|
}).on("all", async () => {
|
|
@@ -270,45 +305,47 @@ export const Handler = async ({
|
|
|
270
305
|
});
|
|
271
306
|
} else if (usingFunctions) {
|
|
272
307
|
// Try to use Functions
|
|
273
|
-
|
|
274
|
-
scriptPath = outfile;
|
|
308
|
+
scriptPath = join(tmpdir(), `./functionsWorker-${Math.random()}.mjs`);
|
|
275
309
|
|
|
276
|
-
if (
|
|
310
|
+
if (legacyNodeCompat) {
|
|
277
311
|
console.warn(
|
|
278
|
-
"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
|
|
279
320
|
);
|
|
280
321
|
}
|
|
281
322
|
|
|
282
|
-
logger.log(`Compiling worker to "${
|
|
323
|
+
logger.log(`Compiling worker to "${scriptPath}"...`);
|
|
283
324
|
const onEnd = () => scriptReadyResolve();
|
|
284
325
|
try {
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
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
|
+
};
|
|
295
340
|
|
|
341
|
+
await buildFn();
|
|
296
342
|
// If Functions found routes, continue using Functions
|
|
297
343
|
watch([functionsDirectory], {
|
|
298
344
|
persistent: true,
|
|
299
345
|
ignoreInitial: true,
|
|
300
346
|
}).on("all", async () => {
|
|
301
347
|
try {
|
|
302
|
-
await
|
|
303
|
-
outfile,
|
|
304
|
-
functionsDirectory,
|
|
305
|
-
sourcemap: true,
|
|
306
|
-
watch: true,
|
|
307
|
-
onEnd,
|
|
308
|
-
buildOutputDirectory: directory,
|
|
309
|
-
nodeCompat,
|
|
310
|
-
});
|
|
311
|
-
await metrics.sendMetricsEvent("build pages functions");
|
|
348
|
+
await buildFn();
|
|
312
349
|
} catch (e) {
|
|
313
350
|
if (e instanceof FunctionsNoRoutesError) {
|
|
314
351
|
logger.warn(
|
|
@@ -349,7 +386,7 @@ export const Handler = async ({
|
|
|
349
386
|
|
|
350
387
|
if (scriptPath === "") {
|
|
351
388
|
// Failed to get a script with or without Functions,
|
|
352
|
-
// something really bad must have
|
|
389
|
+
// something really bad must have happened.
|
|
353
390
|
throw new FatalError(
|
|
354
391
|
"Failed to start wrangler pages dev due to an unknown error",
|
|
355
392
|
1
|
|
@@ -431,7 +468,7 @@ export const Handler = async ({
|
|
|
431
468
|
* If _routes.json is invalid, don't exit but instead fallback to a sensible default
|
|
432
469
|
* and continue to serve the assets. At the same time make sure we warn users that we
|
|
433
470
|
* we detected an invalid file and that we'll be using a default.
|
|
434
|
-
* This basically
|
|
471
|
+
* This basically equates to serving a Functions or _worker.js project as is,
|
|
435
472
|
* without applying any additional routing rules on top.
|
|
436
473
|
*/
|
|
437
474
|
const error =
|
|
@@ -460,77 +497,75 @@ export const Handler = async ({
|
|
|
460
497
|
}
|
|
461
498
|
}
|
|
462
499
|
|
|
463
|
-
const { stop, waitUntilExit } = await unstable_dev(
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
durableObject.toString()
|
|
494
|
-
);
|
|
495
|
-
return;
|
|
496
|
-
}
|
|
497
|
-
|
|
498
|
-
return {
|
|
499
|
-
name: binding,
|
|
500
|
-
class_name: className,
|
|
501
|
-
script_name: scriptName,
|
|
502
|
-
};
|
|
503
|
-
})
|
|
504
|
-
.filter(Boolean) as AdditionalDevProps["durableObjects"],
|
|
505
|
-
r2: r2s.map((binding) => {
|
|
506
|
-
return { binding: binding.toString(), bucket_name: "" };
|
|
507
|
-
}),
|
|
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
|
+
}
|
|
508
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: {
|
|
509
546
|
d1Databases: d1s.map((binding) => ({
|
|
510
547
|
binding: binding.toString(),
|
|
511
548
|
database_id: "", // Required for types, but unused by dev
|
|
512
549
|
database_name: `local-${binding}`,
|
|
513
550
|
})),
|
|
514
|
-
|
|
551
|
+
disableExperimentalWarning: true,
|
|
515
552
|
enablePagesAssetsServiceBinding: {
|
|
516
553
|
proxyPort,
|
|
517
554
|
directory,
|
|
518
555
|
},
|
|
556
|
+
experimentalLocal,
|
|
557
|
+
liveReload,
|
|
519
558
|
forceLocal: true,
|
|
520
|
-
persist,
|
|
521
|
-
persistTo,
|
|
522
559
|
showInteractiveDevSession: undefined,
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
logLevel: logLevel ?? "warn",
|
|
560
|
+
testMode: false,
|
|
561
|
+
watch: true,
|
|
526
562
|
},
|
|
527
|
-
|
|
528
|
-
);
|
|
563
|
+
});
|
|
529
564
|
await metrics.sendMetricsEvent("run pages dev");
|
|
530
565
|
|
|
531
566
|
CLEANUP_CALLBACKS.push(stop);
|
|
532
567
|
|
|
533
|
-
waitUntilExit().then(() => {
|
|
568
|
+
void waitUntilExit().then(() => {
|
|
534
569
|
CLEANUP();
|
|
535
570
|
process.exit(0);
|
|
536
571
|
});
|
|
@@ -679,15 +714,3 @@ async function spawnProxyProcess({
|
|
|
679
714
|
|
|
680
715
|
return port;
|
|
681
716
|
}
|
|
682
|
-
|
|
683
|
-
const blockWorkerJsImports: esbuild.Plugin = {
|
|
684
|
-
name: "block-worker-js-imports",
|
|
685
|
-
setup(build: esbuild.PluginBuild) {
|
|
686
|
-
build.onResolve({ filter: /.*/g }, (_args) => {
|
|
687
|
-
logger.error(
|
|
688
|
-
`_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.`
|
|
689
|
-
);
|
|
690
|
-
return null;
|
|
691
|
-
});
|
|
692
|
-
},
|
|
693
|
-
};
|
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,72 +1,57 @@
|
|
|
1
1
|
import { access, lstat } from "node:fs/promises";
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import NodeModulesPolyfills from "@esbuild-plugins/node-modules-polyfill";
|
|
5
|
-
import { build } from "esbuild";
|
|
2
|
+
import { relative, resolve } from "node:path";
|
|
3
|
+
import { bundleWorker } from "../../bundle";
|
|
6
4
|
import { getBasePath } from "../../paths";
|
|
5
|
+
import { D1_BETA_PREFIX } from "../../worker";
|
|
6
|
+
import { buildNotifierPlugin } from "./buildWorker";
|
|
7
|
+
import type { Options as WorkerOptions } from "./buildWorker";
|
|
7
8
|
|
|
8
|
-
type Options =
|
|
9
|
-
|
|
10
|
-
outfile
|
|
11
|
-
|
|
12
|
-
sourcemap?: boolean;
|
|
13
|
-
watch?: boolean;
|
|
14
|
-
nodeCompat?: boolean;
|
|
15
|
-
onEnd?: () => void;
|
|
16
|
-
};
|
|
9
|
+
type Options = Omit<
|
|
10
|
+
WorkerOptions,
|
|
11
|
+
"outfile" | "fallbackService" | "buildOutputDirectory" | "nodejsCompat"
|
|
12
|
+
> & { outdir: string };
|
|
17
13
|
|
|
18
14
|
export function buildPlugin({
|
|
19
15
|
routesModule,
|
|
20
|
-
|
|
16
|
+
outdir,
|
|
21
17
|
minify = false,
|
|
22
18
|
sourcemap = false,
|
|
23
19
|
watch = false,
|
|
24
|
-
nodeCompat,
|
|
25
20
|
onEnd = () => {},
|
|
21
|
+
legacyNodeCompat,
|
|
22
|
+
functionsDirectory,
|
|
23
|
+
local,
|
|
24
|
+
betaD1Shims,
|
|
26
25
|
}: Options) {
|
|
27
|
-
return
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
loader: {
|
|
34
|
-
".html": "text",
|
|
35
|
-
".txt": "text",
|
|
26
|
+
return bundleWorker(
|
|
27
|
+
{
|
|
28
|
+
file: resolve(getBasePath(), "templates/pages-template-plugin.ts"),
|
|
29
|
+
directory: functionsDirectory,
|
|
30
|
+
format: "modules",
|
|
31
|
+
moduleRoot: functionsDirectory,
|
|
36
32
|
},
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
onEnd();
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
},
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
name: "Assets",
|
|
66
|
-
setup(pluginBuild) {
|
|
67
|
-
if (pluginBuild.initialOptions.outfile) {
|
|
68
|
-
const outdir = dirname(pluginBuild.initialOptions.outfile);
|
|
69
|
-
|
|
33
|
+
resolve(outdir),
|
|
34
|
+
{
|
|
35
|
+
inject: [routesModule],
|
|
36
|
+
entryName: "index",
|
|
37
|
+
minify,
|
|
38
|
+
sourcemap,
|
|
39
|
+
watch,
|
|
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,
|
|
45
|
+
define: {},
|
|
46
|
+
betaD1Shims: (betaD1Shims || []).map(
|
|
47
|
+
(binding) => `${D1_BETA_PREFIX}${binding}`
|
|
48
|
+
),
|
|
49
|
+
doBindings: [], // Pages functions don't support internal Durable Objects
|
|
50
|
+
plugins: [
|
|
51
|
+
buildNotifierPlugin(onEnd),
|
|
52
|
+
{
|
|
53
|
+
name: "Assets",
|
|
54
|
+
setup(pluginBuild) {
|
|
70
55
|
pluginBuild.onResolve({ filter: /^assets:/ }, async (args) => {
|
|
71
56
|
const directory = resolve(
|
|
72
57
|
args.resolveDir,
|
|
@@ -94,17 +79,35 @@ export function buildPlugin({
|
|
|
94
79
|
|
|
95
80
|
return { path, external: true, namespace: "assets" };
|
|
96
81
|
});
|
|
97
|
-
}
|
|
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
|
+
);
|
|
101
|
+
},
|
|
98
102
|
},
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
});
|
|
103
|
+
],
|
|
104
|
+
serveAssetsFromWorker: false,
|
|
105
|
+
disableModuleCollection: false,
|
|
106
|
+
rules: [],
|
|
107
|
+
checkFetch: local,
|
|
108
|
+
targetConsumer: local ? "dev" : "publish",
|
|
109
|
+
local,
|
|
110
|
+
experimentalLocal: false,
|
|
111
|
+
}
|
|
112
|
+
);
|
|
110
113
|
}
|