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/dialogs.tsx
DELETED
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
import chalk from "chalk";
|
|
2
|
-
import { Box, Text, useInput, render } from "ink";
|
|
3
|
-
import SelectInput from "ink-select-input";
|
|
4
|
-
import TextInput from "ink-text-input";
|
|
5
|
-
import * as React from "react";
|
|
6
|
-
import { useState } from "react";
|
|
7
|
-
|
|
8
|
-
import { CI } from "./is-ci";
|
|
9
|
-
import isInteractive from "./is-interactive";
|
|
10
|
-
import { logger } from "./logger";
|
|
11
|
-
|
|
12
|
-
type ConfirmProps = {
|
|
13
|
-
text: string;
|
|
14
|
-
onConfirm: (answer: boolean) => void;
|
|
15
|
-
};
|
|
16
|
-
function Confirm(props: ConfirmProps) {
|
|
17
|
-
useInput((input: string, key) => {
|
|
18
|
-
if (input === "y" || key.return === true) {
|
|
19
|
-
props.onConfirm(true);
|
|
20
|
-
} else if (input === "n") {
|
|
21
|
-
props.onConfirm(false);
|
|
22
|
-
} else {
|
|
23
|
-
logger.warn("Unrecognised input:", input);
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
return (
|
|
27
|
-
<Box>
|
|
28
|
-
<Text>
|
|
29
|
-
{props.text} ({chalk.bold("y")}/n)
|
|
30
|
-
</Text>
|
|
31
|
-
</Box>
|
|
32
|
-
);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export function confirm(text: string): Promise<boolean> {
|
|
36
|
-
return new Promise((resolve) => {
|
|
37
|
-
const { unmount } = render(
|
|
38
|
-
<Confirm
|
|
39
|
-
text={text}
|
|
40
|
-
onConfirm={(answer: boolean) => {
|
|
41
|
-
unmount();
|
|
42
|
-
resolve(answer);
|
|
43
|
-
}}
|
|
44
|
-
/>
|
|
45
|
-
);
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
type PromptProps = {
|
|
50
|
-
text: string;
|
|
51
|
-
defaultValue?: string;
|
|
52
|
-
type?: "text" | "password";
|
|
53
|
-
onSubmit: (text: string) => void;
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
function Prompt(props: PromptProps) {
|
|
57
|
-
const [value, setValue] = useState(props.defaultValue || "");
|
|
58
|
-
|
|
59
|
-
return (
|
|
60
|
-
<Box>
|
|
61
|
-
<Text>{props.text} </Text>
|
|
62
|
-
<Box>
|
|
63
|
-
<TextInput
|
|
64
|
-
mask={props.type === "password" ? "*" : undefined}
|
|
65
|
-
value={value}
|
|
66
|
-
onChange={setValue}
|
|
67
|
-
onSubmit={props.onSubmit}
|
|
68
|
-
/>
|
|
69
|
-
</Box>
|
|
70
|
-
</Box>
|
|
71
|
-
);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
export async function prompt(
|
|
75
|
-
text: string,
|
|
76
|
-
type: "text" | "password" = "text",
|
|
77
|
-
defaultValue?: string
|
|
78
|
-
): Promise<string> {
|
|
79
|
-
return new Promise((resolve) => {
|
|
80
|
-
const { unmount } = render(
|
|
81
|
-
<Prompt
|
|
82
|
-
text={text}
|
|
83
|
-
defaultValue={defaultValue}
|
|
84
|
-
type={type}
|
|
85
|
-
onSubmit={(inputText) => {
|
|
86
|
-
unmount();
|
|
87
|
-
resolve(inputText);
|
|
88
|
-
}}
|
|
89
|
-
/>
|
|
90
|
-
);
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
type SelectOption = {
|
|
95
|
-
value: string;
|
|
96
|
-
label: string;
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
type SelectProps = {
|
|
100
|
-
text: string;
|
|
101
|
-
options: SelectOption[];
|
|
102
|
-
initialIndex: number;
|
|
103
|
-
onSelect: (value: string) => void;
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
function Select(props: SelectProps) {
|
|
107
|
-
return (
|
|
108
|
-
<Box flexDirection="column">
|
|
109
|
-
<Text>{props.text}</Text>
|
|
110
|
-
<SelectInput
|
|
111
|
-
initialIndex={props.initialIndex}
|
|
112
|
-
items={props.options}
|
|
113
|
-
onSelect={async (selected) => {
|
|
114
|
-
props.onSelect(selected.value);
|
|
115
|
-
}}
|
|
116
|
-
/>
|
|
117
|
-
</Box>
|
|
118
|
-
);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
export function select(
|
|
122
|
-
text: string,
|
|
123
|
-
options: SelectOption[],
|
|
124
|
-
initialIndex: number
|
|
125
|
-
): Promise<string> {
|
|
126
|
-
return new Promise((resolve) => {
|
|
127
|
-
const { unmount } = render(
|
|
128
|
-
<Select
|
|
129
|
-
text={text}
|
|
130
|
-
options={options}
|
|
131
|
-
initialIndex={initialIndex}
|
|
132
|
-
onSelect={(option: string) => {
|
|
133
|
-
unmount();
|
|
134
|
-
resolve(option);
|
|
135
|
-
}}
|
|
136
|
-
/>
|
|
137
|
-
);
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
export function logDim(msg: string) {
|
|
142
|
-
console.log(chalk.gray(msg));
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
export async function fromDashMessagePrompt(
|
|
146
|
-
deploySource: "dash" | "wrangler" | "api"
|
|
147
|
-
): Promise<boolean | void> {
|
|
148
|
-
if (deploySource === "dash") {
|
|
149
|
-
logger.warn(
|
|
150
|
-
`You are about to publish a Workers Service that was last published via the Cloudflare Dashboard.
|
|
151
|
-
Edits that have been made via the dashboard will be overridden by your local code and config.`
|
|
152
|
-
);
|
|
153
|
-
|
|
154
|
-
if (!isInteractive() || CI.isCI()) return true;
|
|
155
|
-
|
|
156
|
-
return await confirm("Would you like to continue?");
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
export async function tailDOLogPrompt(): Promise<boolean | void> {
|
|
160
|
-
if (!isInteractive() || CI.isCI()) return true;
|
|
161
|
-
|
|
162
|
-
return await confirm("Would you like to continue?");
|
|
163
|
-
}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { logger } from "./logger";
|
|
2
|
-
|
|
3
|
-
type VariableNames =
|
|
4
|
-
| "CLOUDFLARE_ACCOUNT_ID"
|
|
5
|
-
| "CLOUDFLARE_API_TOKEN"
|
|
6
|
-
| "CLOUDFLARE_API_KEY"
|
|
7
|
-
| "CLOUDFLARE_EMAIL"
|
|
8
|
-
| "WRANGLER_SEND_METRICS"
|
|
9
|
-
| "CLOUDFLARE_API_BASE_URL"
|
|
10
|
-
| "WRANGLER_LOG";
|
|
11
|
-
|
|
12
|
-
type DeprecatedNames =
|
|
13
|
-
| "CF_ACCOUNT_ID"
|
|
14
|
-
| "CF_API_TOKEN"
|
|
15
|
-
| "CF_API_KEY"
|
|
16
|
-
| "CF_EMAIL"
|
|
17
|
-
| "CF_API_BASE_URL";
|
|
18
|
-
/**
|
|
19
|
-
* Create a function used to access an environment variable.
|
|
20
|
-
*
|
|
21
|
-
* This is not memoized to allow us to change the value at runtime, such as in testing.
|
|
22
|
-
* A warning is shown if the client is using a deprecated version - but only once.
|
|
23
|
-
*/
|
|
24
|
-
export function getEnvironmentVariableFactory({
|
|
25
|
-
variableName,
|
|
26
|
-
deprecatedName,
|
|
27
|
-
defaultValue,
|
|
28
|
-
}: {
|
|
29
|
-
variableName: VariableNames;
|
|
30
|
-
deprecatedName?: DeprecatedNames;
|
|
31
|
-
defaultValue?: string;
|
|
32
|
-
}) {
|
|
33
|
-
let hasWarned = false;
|
|
34
|
-
return () => {
|
|
35
|
-
if (process.env[variableName]) {
|
|
36
|
-
return process.env[variableName];
|
|
37
|
-
} else if (deprecatedName && process.env[deprecatedName]) {
|
|
38
|
-
if (!hasWarned) {
|
|
39
|
-
// Only show the warning once.
|
|
40
|
-
hasWarned = true;
|
|
41
|
-
logger.warn(
|
|
42
|
-
`Using "${deprecatedName}" environment variable. This is deprecated. Please use "${variableName}", instead.`
|
|
43
|
-
);
|
|
44
|
-
}
|
|
45
|
-
return process.env[deprecatedName];
|
|
46
|
-
} else {
|
|
47
|
-
return defaultValue;
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
}
|
package/src/pages/build.tsx
DELETED
|
@@ -1,238 +0,0 @@
|
|
|
1
|
-
import { writeFileSync } from "node:fs";
|
|
2
|
-
import { tmpdir } from "node:os";
|
|
3
|
-
import { dirname, join } from "node:path";
|
|
4
|
-
import { FatalError } from "../errors";
|
|
5
|
-
import { logger } from "../logger";
|
|
6
|
-
import * as metrics from "../metrics";
|
|
7
|
-
import { toUrlPath } from "../paths";
|
|
8
|
-
import { isInPagesCI } from "./constants";
|
|
9
|
-
import {
|
|
10
|
-
EXIT_CODE_FUNCTIONS_NO_ROUTES_ERROR,
|
|
11
|
-
FunctionsNoRoutesError,
|
|
12
|
-
getFunctionsNoRoutesWarning,
|
|
13
|
-
} from "./errors";
|
|
14
|
-
import { buildPlugin } from "./functions/buildPlugin";
|
|
15
|
-
import { buildWorker } from "./functions/buildWorker";
|
|
16
|
-
import { generateConfigFromFileTree } from "./functions/filepath-routing";
|
|
17
|
-
import { writeRoutesModule } from "./functions/routes";
|
|
18
|
-
import { convertRoutesToRoutesJSONSpec } from "./functions/routes-transformation";
|
|
19
|
-
import { pagesBetaWarning, RUNNING_BUILDERS } from "./utils";
|
|
20
|
-
import type { Config } from "./functions/routes";
|
|
21
|
-
import type { YargsOptionsToInterface } from "./types";
|
|
22
|
-
import type { Argv } from "yargs";
|
|
23
|
-
|
|
24
|
-
type PagesBuildArgs = YargsOptionsToInterface<typeof Options>;
|
|
25
|
-
|
|
26
|
-
export function Options(yargs: Argv) {
|
|
27
|
-
return yargs
|
|
28
|
-
.positional("directory", {
|
|
29
|
-
type: "string",
|
|
30
|
-
default: "functions",
|
|
31
|
-
description: "The directory of Pages Functions",
|
|
32
|
-
})
|
|
33
|
-
.options({
|
|
34
|
-
outfile: {
|
|
35
|
-
type: "string",
|
|
36
|
-
default: "_worker.js",
|
|
37
|
-
description: "The location of the output Worker script",
|
|
38
|
-
},
|
|
39
|
-
"output-config-path": {
|
|
40
|
-
type: "string",
|
|
41
|
-
description: "The location for the output config file",
|
|
42
|
-
},
|
|
43
|
-
"output-routes-path": {
|
|
44
|
-
type: "string",
|
|
45
|
-
description: "The location for the output _routes.json file",
|
|
46
|
-
},
|
|
47
|
-
minify: {
|
|
48
|
-
type: "boolean",
|
|
49
|
-
default: false,
|
|
50
|
-
description: "Minify the output Worker script",
|
|
51
|
-
},
|
|
52
|
-
sourcemap: {
|
|
53
|
-
type: "boolean",
|
|
54
|
-
default: false,
|
|
55
|
-
description: "Generate a sourcemap for the output Worker script",
|
|
56
|
-
},
|
|
57
|
-
"fallback-service": {
|
|
58
|
-
type: "string",
|
|
59
|
-
default: "ASSETS",
|
|
60
|
-
description:
|
|
61
|
-
"The service to fallback to at the end of the `next` chain. Setting to '' will fallback to the global `fetch`.",
|
|
62
|
-
},
|
|
63
|
-
watch: {
|
|
64
|
-
type: "boolean",
|
|
65
|
-
default: false,
|
|
66
|
-
description:
|
|
67
|
-
"Watch for changes to the functions and automatically rebuild the Worker script",
|
|
68
|
-
},
|
|
69
|
-
plugin: {
|
|
70
|
-
type: "boolean",
|
|
71
|
-
default: false,
|
|
72
|
-
description: "Build a plugin rather than a Worker script",
|
|
73
|
-
},
|
|
74
|
-
"build-output-directory": {
|
|
75
|
-
type: "string",
|
|
76
|
-
description: "The directory to output static assets to",
|
|
77
|
-
},
|
|
78
|
-
"node-compat": {
|
|
79
|
-
describe: "Enable node.js compatibility",
|
|
80
|
-
default: false,
|
|
81
|
-
type: "boolean",
|
|
82
|
-
hidden: true,
|
|
83
|
-
},
|
|
84
|
-
})
|
|
85
|
-
.epilogue(pagesBetaWarning);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
export const Handler = async ({
|
|
89
|
-
directory,
|
|
90
|
-
outfile,
|
|
91
|
-
outputConfigPath,
|
|
92
|
-
outputRoutesPath: routesOutputPath,
|
|
93
|
-
minify,
|
|
94
|
-
sourcemap,
|
|
95
|
-
fallbackService,
|
|
96
|
-
watch,
|
|
97
|
-
plugin,
|
|
98
|
-
buildOutputDirectory,
|
|
99
|
-
nodeCompat,
|
|
100
|
-
}: PagesBuildArgs) => {
|
|
101
|
-
if (!isInPagesCI) {
|
|
102
|
-
// Beta message for `wrangler pages <commands>` usage
|
|
103
|
-
logger.log(pagesBetaWarning);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
if (nodeCompat) {
|
|
107
|
-
console.warn(
|
|
108
|
-
"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."
|
|
109
|
-
);
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
buildOutputDirectory ??= dirname(outfile);
|
|
113
|
-
try {
|
|
114
|
-
await buildFunctions({
|
|
115
|
-
outfile,
|
|
116
|
-
outputConfigPath,
|
|
117
|
-
functionsDirectory: directory,
|
|
118
|
-
minify,
|
|
119
|
-
sourcemap,
|
|
120
|
-
fallbackService,
|
|
121
|
-
watch,
|
|
122
|
-
plugin,
|
|
123
|
-
buildOutputDirectory,
|
|
124
|
-
nodeCompat,
|
|
125
|
-
routesOutputPath,
|
|
126
|
-
});
|
|
127
|
-
} catch (e) {
|
|
128
|
-
if (e instanceof FunctionsNoRoutesError) {
|
|
129
|
-
throw new FatalError(
|
|
130
|
-
getFunctionsNoRoutesWarning(directory),
|
|
131
|
-
EXIT_CODE_FUNCTIONS_NO_ROUTES_ERROR
|
|
132
|
-
);
|
|
133
|
-
} else {
|
|
134
|
-
throw e;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
await metrics.sendMetricsEvent("build pages functions");
|
|
138
|
-
};
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* Builds a Functions worker based on the functions directory, with filepath and handler based routing.
|
|
142
|
-
* @throws FunctionsNoRoutesError when there are no routes found in the functions directory
|
|
143
|
-
*/
|
|
144
|
-
export async function buildFunctions({
|
|
145
|
-
outfile,
|
|
146
|
-
outputConfigPath,
|
|
147
|
-
functionsDirectory,
|
|
148
|
-
minify = false,
|
|
149
|
-
sourcemap = false,
|
|
150
|
-
fallbackService = "ASSETS",
|
|
151
|
-
watch = false,
|
|
152
|
-
onEnd,
|
|
153
|
-
plugin = false,
|
|
154
|
-
buildOutputDirectory,
|
|
155
|
-
routesOutputPath,
|
|
156
|
-
nodeCompat,
|
|
157
|
-
}: Partial<
|
|
158
|
-
Pick<
|
|
159
|
-
PagesBuildArgs,
|
|
160
|
-
| "outputConfigPath"
|
|
161
|
-
| "minify"
|
|
162
|
-
| "sourcemap"
|
|
163
|
-
| "fallbackService"
|
|
164
|
-
| "watch"
|
|
165
|
-
| "plugin"
|
|
166
|
-
| "buildOutputDirectory"
|
|
167
|
-
| "nodeCompat"
|
|
168
|
-
>
|
|
169
|
-
> & {
|
|
170
|
-
functionsDirectory: string;
|
|
171
|
-
onEnd?: () => void;
|
|
172
|
-
outfile: Required<PagesBuildArgs>["outfile"];
|
|
173
|
-
routesOutputPath?: PagesBuildArgs["outputRoutesPath"];
|
|
174
|
-
}) {
|
|
175
|
-
RUNNING_BUILDERS.forEach(
|
|
176
|
-
(runningBuilder) => runningBuilder.stop && runningBuilder.stop()
|
|
177
|
-
);
|
|
178
|
-
|
|
179
|
-
const routesModule = join(tmpdir(), `./functionsRoutes-${Math.random()}.mjs`);
|
|
180
|
-
const baseURL = toUrlPath("/");
|
|
181
|
-
|
|
182
|
-
const config: Config = await generateConfigFromFileTree({
|
|
183
|
-
baseDir: functionsDirectory,
|
|
184
|
-
baseURL,
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
if (!config.routes || config.routes.length === 0) {
|
|
188
|
-
throw new FunctionsNoRoutesError(
|
|
189
|
-
`Failed to find any routes while compiling Functions in: ${functionsDirectory}`
|
|
190
|
-
);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
if (routesOutputPath) {
|
|
194
|
-
const routesJSON = convertRoutesToRoutesJSONSpec(config.routes);
|
|
195
|
-
writeFileSync(routesOutputPath, JSON.stringify(routesJSON, null, 2));
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
if (outputConfigPath) {
|
|
199
|
-
writeFileSync(
|
|
200
|
-
outputConfigPath,
|
|
201
|
-
JSON.stringify({ ...config, baseURL }, null, 2)
|
|
202
|
-
);
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
await writeRoutesModule({
|
|
206
|
-
config,
|
|
207
|
-
srcDir: functionsDirectory,
|
|
208
|
-
outfile: routesModule,
|
|
209
|
-
});
|
|
210
|
-
|
|
211
|
-
if (plugin) {
|
|
212
|
-
RUNNING_BUILDERS.push(
|
|
213
|
-
await buildPlugin({
|
|
214
|
-
routesModule,
|
|
215
|
-
outfile,
|
|
216
|
-
minify,
|
|
217
|
-
sourcemap,
|
|
218
|
-
watch,
|
|
219
|
-
nodeCompat,
|
|
220
|
-
onEnd,
|
|
221
|
-
})
|
|
222
|
-
);
|
|
223
|
-
} else {
|
|
224
|
-
RUNNING_BUILDERS.push(
|
|
225
|
-
await buildWorker({
|
|
226
|
-
routesModule,
|
|
227
|
-
outfile,
|
|
228
|
-
minify,
|
|
229
|
-
sourcemap,
|
|
230
|
-
fallbackService,
|
|
231
|
-
watch,
|
|
232
|
-
onEnd,
|
|
233
|
-
buildOutputDirectory,
|
|
234
|
-
nodeCompat,
|
|
235
|
-
})
|
|
236
|
-
);
|
|
237
|
-
}
|
|
238
|
-
}
|
package/src/user/env-vars.ts
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { getEnvironmentVariableFactory } from "../environment-variables";
|
|
2
|
-
|
|
3
|
-
export type ApiCredentials =
|
|
4
|
-
| {
|
|
5
|
-
apiToken: string;
|
|
6
|
-
}
|
|
7
|
-
| {
|
|
8
|
-
authKey: string;
|
|
9
|
-
authEmail: string;
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
const getCloudflareAPITokenFromEnv = getEnvironmentVariableFactory({
|
|
13
|
-
variableName: "CLOUDFLARE_API_TOKEN",
|
|
14
|
-
deprecatedName: "CF_API_TOKEN",
|
|
15
|
-
});
|
|
16
|
-
const getCloudflareGlobalAuthKeyFromEnv = getEnvironmentVariableFactory({
|
|
17
|
-
variableName: "CLOUDFLARE_API_KEY",
|
|
18
|
-
deprecatedName: "CF_API_KEY",
|
|
19
|
-
});
|
|
20
|
-
const getCloudflareGlobalAuthEmailFromEnv = getEnvironmentVariableFactory({
|
|
21
|
-
variableName: "CLOUDFLARE_EMAIL",
|
|
22
|
-
deprecatedName: "CF_EMAIL",
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Try to read an API token or Global Auth from the environment.
|
|
27
|
-
*/
|
|
28
|
-
export function getAuthFromEnv(): ApiCredentials | undefined {
|
|
29
|
-
const globalApiKey = getCloudflareGlobalAuthKeyFromEnv();
|
|
30
|
-
const globalApiEmail = getCloudflareGlobalAuthEmailFromEnv();
|
|
31
|
-
const apiToken = getCloudflareAPITokenFromEnv();
|
|
32
|
-
|
|
33
|
-
if (globalApiKey && globalApiEmail) {
|
|
34
|
-
return { authKey: globalApiKey, authEmail: globalApiEmail };
|
|
35
|
-
} else if (apiToken) {
|
|
36
|
-
return { apiToken };
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Try to read the account ID from the environment.
|
|
42
|
-
*/
|
|
43
|
-
export const getCloudflareAccountIdFromEnv = getEnvironmentVariableFactory({
|
|
44
|
-
variableName: "CLOUDFLARE_ACCOUNT_ID",
|
|
45
|
-
deprecatedName: "CF_ACCOUNT_ID",
|
|
46
|
-
});
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
// `workerd` currently throws on any use of the Cache API. Workers Sites
|
|
2
|
-
// requires the Cache API to function though, so stub it out to no-ops, like in
|
|
3
|
-
// regular `wrangler dev`.
|
|
4
|
-
|
|
5
|
-
class Cache {
|
|
6
|
-
async put(req, res) {}
|
|
7
|
-
|
|
8
|
-
async match(req, options) {}
|
|
9
|
-
|
|
10
|
-
async delete(req, options) {
|
|
11
|
-
return false;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
class CacheStorage {
|
|
16
|
-
#cache = new Cache();
|
|
17
|
-
|
|
18
|
-
get default() {
|
|
19
|
-
return this.#cache;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
async open(cacheName) {
|
|
23
|
-
return this.#cache;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
globalThis.caches = new CacheStorage();
|
|
File without changes
|
|
File without changes
|
|
File without changes
|