wrangler 2.0.12 → 2.0.16
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 +7 -1
- package/bin/wrangler.js +111 -57
- package/miniflare-dist/index.mjs +9 -2
- package/package.json +156 -154
- package/src/__tests__/config-cache-without-cache-dir.test.ts +38 -0
- package/src/__tests__/config-cache.test.ts +30 -24
- package/src/__tests__/configuration.test.ts +3935 -3476
- package/src/__tests__/dev.test.tsx +1128 -979
- package/src/__tests__/guess-worker-format.test.ts +68 -68
- package/src/__tests__/helpers/cmd-shim.d.ts +6 -6
- package/src/__tests__/helpers/faye-websocket.d.ts +4 -4
- package/src/__tests__/helpers/mock-account-id.ts +24 -24
- package/src/__tests__/helpers/mock-bin.ts +20 -20
- package/src/__tests__/helpers/mock-cfetch.ts +92 -92
- package/src/__tests__/helpers/mock-console.ts +49 -39
- package/src/__tests__/helpers/mock-dialogs.ts +94 -71
- package/src/__tests__/helpers/mock-http-server.ts +30 -30
- package/src/__tests__/helpers/mock-istty.ts +65 -18
- package/src/__tests__/helpers/mock-kv.ts +26 -26
- package/src/__tests__/helpers/mock-oauth-flow.ts +223 -228
- package/src/__tests__/helpers/mock-process.ts +39 -0
- package/src/__tests__/helpers/mock-stdin.ts +82 -77
- package/src/__tests__/helpers/mock-web-socket.ts +21 -21
- package/src/__tests__/helpers/run-in-tmp.ts +27 -27
- package/src/__tests__/helpers/run-wrangler.ts +8 -8
- package/src/__tests__/helpers/write-worker-source.ts +16 -16
- package/src/__tests__/helpers/write-wrangler-toml.ts +9 -9
- package/src/__tests__/https-options.test.ts +104 -104
- package/src/__tests__/index.test.ts +239 -234
- package/src/__tests__/init.test.ts +1605 -1250
- package/src/__tests__/jest.setup.ts +63 -33
- package/src/__tests__/kv.test.ts +1128 -1011
- package/src/__tests__/logger.test.ts +100 -74
- package/src/__tests__/package-manager.test.ts +303 -303
- package/src/__tests__/pages.test.ts +1152 -652
- package/src/__tests__/parse.test.ts +252 -252
- package/src/__tests__/publish.test.ts +6371 -5622
- package/src/__tests__/pubsub.test.ts +367 -0
- package/src/__tests__/r2.test.ts +133 -133
- package/src/__tests__/route.test.ts +18 -18
- package/src/__tests__/secret.test.ts +382 -377
- package/src/__tests__/tail.test.ts +530 -530
- package/src/__tests__/user.test.ts +123 -111
- package/src/__tests__/whoami.test.tsx +198 -117
- package/src/__tests__/worker-namespace.test.ts +327 -0
- package/src/abort.d.ts +1 -1
- package/src/api/dev.ts +49 -0
- package/src/api/index.ts +1 -0
- package/src/bundle-reporter.tsx +29 -0
- package/src/bundle.ts +157 -149
- package/src/cfetch/index.ts +80 -80
- package/src/cfetch/internal.ts +90 -83
- package/src/cli.ts +21 -7
- package/src/config/config.ts +204 -195
- package/src/config/diagnostics.ts +61 -61
- package/src/config/environment.ts +390 -357
- package/src/config/index.ts +206 -193
- package/src/config/validation-helpers.ts +366 -366
- package/src/config/validation.ts +1573 -1376
- package/src/config-cache.ts +79 -41
- package/src/create-worker-preview.ts +206 -136
- package/src/create-worker-upload-form.ts +247 -238
- package/src/dev/dev-vars.ts +13 -13
- package/src/dev/dev.tsx +329 -307
- package/src/dev/local.tsx +304 -275
- package/src/dev/remote.tsx +366 -224
- package/src/dev/use-esbuild.ts +126 -91
- package/src/dev.tsx +538 -0
- package/src/dialogs.tsx +97 -97
- package/src/durable.ts +87 -87
- package/src/entry.ts +234 -228
- package/src/environment-variables.ts +23 -23
- package/src/errors.ts +6 -6
- package/src/generate.ts +33 -0
- package/src/git-client.ts +42 -0
- package/src/https-options.ts +79 -79
- package/src/index.tsx +1775 -2763
- package/src/init.ts +549 -0
- package/src/inspect.ts +593 -593
- package/src/intl-polyfill.d.ts +123 -123
- package/src/is-interactive.ts +12 -0
- package/src/kv.ts +277 -277
- package/src/logger.ts +46 -39
- package/src/miniflare-cli/enum-keys.ts +8 -8
- package/src/miniflare-cli/index.ts +42 -31
- package/src/miniflare-cli/request-context.ts +18 -18
- package/src/module-collection.ts +212 -212
- package/src/open-in-browser.ts +4 -6
- package/src/package-manager.ts +123 -123
- package/src/pages/build.tsx +202 -0
- package/src/pages/constants.ts +7 -0
- package/src/pages/deployments.tsx +101 -0
- package/src/pages/dev.tsx +964 -0
- package/src/pages/functions/buildPlugin.ts +105 -0
- package/src/pages/functions/buildWorker.ts +151 -0
- package/{pages → src/pages}/functions/filepath-routing.test.ts +113 -113
- package/src/pages/functions/filepath-routing.ts +189 -0
- package/src/pages/functions/identifiers.ts +78 -0
- package/src/pages/functions/routes.ts +151 -0
- package/src/pages/index.tsx +84 -0
- package/src/pages/projects.tsx +157 -0
- package/src/pages/publish.tsx +335 -0
- package/src/pages/types.ts +40 -0
- package/src/pages/upload.tsx +384 -0
- package/src/pages/utils.ts +12 -0
- package/src/parse.ts +202 -138
- package/src/paths.ts +6 -6
- package/src/preview.ts +31 -0
- package/src/proxy.ts +400 -402
- package/src/publish.ts +667 -621
- package/src/pubsub/index.ts +286 -0
- package/src/pubsub/pubsub-commands.tsx +577 -0
- package/src/r2.ts +19 -19
- package/src/selfsigned.d.ts +23 -23
- package/src/sites.tsx +271 -225
- package/src/tail/filters.ts +108 -108
- package/src/tail/index.ts +217 -217
- package/src/tail/printing.ts +45 -45
- package/src/update-check.ts +11 -11
- package/src/user/choose-account.tsx +60 -0
- package/src/user/env-vars.ts +46 -0
- package/src/user/generate-auth-url.ts +33 -0
- package/src/user/generate-random-state.ts +16 -0
- package/src/user/index.ts +3 -0
- package/src/user/user.tsx +1161 -0
- package/src/whoami.tsx +61 -42
- package/src/worker-namespace.ts +190 -0
- package/src/worker.ts +110 -100
- package/src/zones.ts +39 -36
- package/templates/checked-fetch.js +17 -0
- package/templates/new-worker-scheduled.js +3 -3
- package/templates/new-worker-scheduled.ts +15 -15
- package/templates/new-worker.js +3 -3
- package/templates/new-worker.ts +15 -15
- package/templates/no-op-worker.js +10 -0
- package/templates/pages-template-plugin.ts +155 -0
- package/templates/pages-template-worker.ts +161 -0
- package/templates/static-asset-facade.js +31 -31
- package/templates/tsconfig.json +95 -95
- package/wrangler-dist/cli.js +55383 -54138
- package/pages/functions/buildPlugin.ts +0 -105
- package/pages/functions/buildWorker.ts +0 -151
- package/pages/functions/filepath-routing.ts +0 -189
- package/pages/functions/identifiers.ts +0 -78
- package/pages/functions/routes.ts +0 -156
- package/pages/functions/template-plugin.ts +0 -147
- package/pages/functions/template-worker.ts +0 -143
- package/src/pages.tsx +0 -2093
- package/src/user.tsx +0 -1214
package/src/logger.ts
CHANGED
|
@@ -1,59 +1,66 @@
|
|
|
1
1
|
import { format } from "node:util";
|
|
2
2
|
import { formatMessagesSync } from "esbuild";
|
|
3
|
+
import { getEnvironmentVariableFactory } from "./environment-variables";
|
|
3
4
|
|
|
4
5
|
const LOGGER_LEVELS = {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
error: 0,
|
|
7
|
+
warn: 1,
|
|
8
|
+
log: 2,
|
|
9
|
+
debug: 3,
|
|
9
10
|
} as const;
|
|
10
11
|
|
|
11
12
|
type LoggerLevel = keyof typeof LOGGER_LEVELS;
|
|
12
13
|
|
|
13
14
|
/** A map from LOGGER_LEVEL to the error `kind` needed by `formatMessagesSync()`. */
|
|
14
15
|
const LOGGER_LEVEL_FORMAT_TYPE_MAP = {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
error: "error",
|
|
17
|
+
warn: "warning",
|
|
18
|
+
log: undefined,
|
|
19
|
+
debug: undefined,
|
|
19
20
|
} as const;
|
|
20
21
|
|
|
22
|
+
const getLogLevelFromEnv = getEnvironmentVariableFactory({
|
|
23
|
+
variableName: "WRANGLER_LOG",
|
|
24
|
+
defaultValue: "log",
|
|
25
|
+
});
|
|
26
|
+
|
|
21
27
|
class Logger {
|
|
22
|
-
|
|
28
|
+
constructor() {}
|
|
23
29
|
|
|
24
|
-
|
|
30
|
+
loggerLevel: LoggerLevel = (getLogLevelFromEnv() as LoggerLevel) ?? "log";
|
|
31
|
+
columns = process.stdout.columns;
|
|
25
32
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
33
|
+
debug = (...args: unknown[]) => this.doLog("debug", args);
|
|
34
|
+
log = (...args: unknown[]) => this.doLog("log", args);
|
|
35
|
+
warn = (...args: unknown[]) => this.doLog("warn", args);
|
|
36
|
+
error = (...args: unknown[]) => this.doLog("error", args);
|
|
30
37
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
38
|
+
private doLog(messageLevel: LoggerLevel, args: unknown[]) {
|
|
39
|
+
if (LOGGER_LEVELS[this.loggerLevel] >= LOGGER_LEVELS[messageLevel]) {
|
|
40
|
+
console[messageLevel](this.formatMessage(messageLevel, format(...args)));
|
|
41
|
+
}
|
|
42
|
+
}
|
|
36
43
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
44
|
+
private formatMessage(level: LoggerLevel, message: string): string {
|
|
45
|
+
const kind = LOGGER_LEVEL_FORMAT_TYPE_MAP[level];
|
|
46
|
+
if (kind) {
|
|
47
|
+
// Format the message using the esbuild formatter.
|
|
48
|
+
// The first line of the message is the main `text`,
|
|
49
|
+
// subsequent lines are put into the `notes`.
|
|
50
|
+
const [firstLine, ...otherLines] = message.split("\n");
|
|
51
|
+
const notes =
|
|
52
|
+
otherLines.length > 0
|
|
53
|
+
? otherLines.map((text) => ({ text }))
|
|
54
|
+
: undefined;
|
|
55
|
+
return formatMessagesSync([{ text: firstLine, notes }], {
|
|
56
|
+
color: true,
|
|
57
|
+
kind,
|
|
58
|
+
terminalWidth: this.columns,
|
|
59
|
+
})[0];
|
|
60
|
+
} else {
|
|
61
|
+
return message;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
57
64
|
}
|
|
58
65
|
|
|
59
66
|
/**
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
export type EnumKeys<Enum> = Exclude<keyof Enum, number>;
|
|
2
2
|
|
|
3
3
|
export const enumObject = <Enum extends Record<string, number | string>>(
|
|
4
|
-
|
|
4
|
+
e: Enum
|
|
5
5
|
) => {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
const copy = { ...e } as { [K in EnumKeys<Enum>]: Enum[K] };
|
|
7
|
+
Object.values(e).forEach(
|
|
8
|
+
(value) => typeof value === "number" && delete copy[value]
|
|
9
|
+
);
|
|
10
|
+
return copy;
|
|
11
11
|
};
|
|
12
12
|
|
|
13
13
|
export const enumKeys = <Enum extends Record<string, number | string>>(
|
|
14
|
-
|
|
14
|
+
e: Enum
|
|
15
15
|
) => {
|
|
16
|
-
|
|
16
|
+
return Object.keys(enumObject(e)) as EnumKeys<Enum>[];
|
|
17
17
|
};
|
|
@@ -4,38 +4,49 @@ import { hideBin } from "yargs/helpers";
|
|
|
4
4
|
import { enumKeys } from "./enum-keys";
|
|
5
5
|
import { getRequestContextCheckOptions } from "./request-context";
|
|
6
6
|
|
|
7
|
+
// miniflare defines this but importing it throws:
|
|
8
|
+
// Dynamic require of "path" is not supported
|
|
9
|
+
class NoOpLog extends Log {
|
|
10
|
+
log(): void {}
|
|
11
|
+
|
|
12
|
+
error(message: Error): void {
|
|
13
|
+
throw message;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
7
17
|
async function main() {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
18
|
+
const args = await yargs(hideBin(process.argv))
|
|
19
|
+
.help(false)
|
|
20
|
+
.version(false)
|
|
21
|
+
.option("log", {
|
|
22
|
+
choices: enumKeys(LogLevel),
|
|
23
|
+
}).argv;
|
|
24
|
+
|
|
25
|
+
const logLevel = LogLevel[args.log ?? "INFO"];
|
|
26
|
+
const requestContextCheckOptions = await getRequestContextCheckOptions();
|
|
27
|
+
const config = {
|
|
28
|
+
...JSON.parse((args._[0] as string) ?? "{}"),
|
|
29
|
+
...requestContextCheckOptions,
|
|
30
|
+
};
|
|
31
|
+
//miniflare's logLevel 0 still logs routes, so lets override the logger
|
|
32
|
+
config.log = config.disableLogs ? new NoOpLog() : new Log(logLevel);
|
|
33
|
+
|
|
34
|
+
if (logLevel > LogLevel.INFO) {
|
|
35
|
+
console.log("OPTIONS:\n", JSON.stringify(config, null, 2));
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const mf = new Miniflare(config);
|
|
39
|
+
|
|
40
|
+
try {
|
|
41
|
+
// Start Miniflare development server
|
|
42
|
+
await mf.startServer();
|
|
43
|
+
await mf.startScheduler();
|
|
44
|
+
} catch (e) {
|
|
45
|
+
mf.log.error(e as Error);
|
|
46
|
+
process.exitCode = 1;
|
|
47
|
+
// Unmount any mounted workers
|
|
48
|
+
await mf.dispose();
|
|
49
|
+
}
|
|
39
50
|
}
|
|
40
51
|
|
|
41
52
|
await main();
|
|
@@ -16,25 +16,25 @@ import type { MiniflareOptions } from "miniflare";
|
|
|
16
16
|
* that indicate to miniflare whether to run the checks or not.
|
|
17
17
|
*/
|
|
18
18
|
export const getRequestContextCheckOptions = async (): Promise<
|
|
19
|
-
|
|
19
|
+
Pick<MiniflareOptions, "globalAsyncIO" | "globalTimers" | "globalRandom">
|
|
20
20
|
> => {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
// check that there's an implementation of AsyncLocalStorage
|
|
22
|
+
let hasAsyncLocalStorage = true;
|
|
23
|
+
try {
|
|
24
|
+
// ripped from the example here https://nodejs.org/api/async_context.html#class-asynclocalstorage
|
|
25
|
+
const { AsyncLocalStorage } = await import("node:async_hooks");
|
|
26
|
+
const storage = new AsyncLocalStorage<string>();
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
28
|
+
hasAsyncLocalStorage = storage.run("some-value", () => {
|
|
29
|
+
return storage.getStore() === "some-value";
|
|
30
|
+
});
|
|
31
|
+
} catch (e) {
|
|
32
|
+
hasAsyncLocalStorage = false;
|
|
33
|
+
}
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
35
|
+
return {
|
|
36
|
+
globalAsyncIO: hasAsyncLocalStorage,
|
|
37
|
+
globalRandom: hasAsyncLocalStorage,
|
|
38
|
+
globalTimers: hasAsyncLocalStorage,
|
|
39
|
+
};
|
|
40
40
|
};
|