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
package/src/api/dev.ts
CHANGED
|
@@ -3,28 +3,26 @@ import { startApiDev, startDev } from "../dev";
|
|
|
3
3
|
import { logger } from "../logger";
|
|
4
4
|
|
|
5
5
|
import type { Environment } from "../config";
|
|
6
|
-
import type { EnablePagesAssetsServiceBindingOptions } from "../miniflare-cli";
|
|
6
|
+
import type { EnablePagesAssetsServiceBindingOptions } from "../miniflare-cli/types";
|
|
7
7
|
import type { RequestInit, Response, RequestInfo } from "undici";
|
|
8
8
|
|
|
9
|
-
interface
|
|
10
|
-
config?: string;
|
|
11
|
-
env?: string;
|
|
12
|
-
ip?: string;
|
|
13
|
-
port?: number;
|
|
14
|
-
bundle?: boolean;
|
|
15
|
-
inspectorPort?: number;
|
|
16
|
-
localProtocol?: "http" | "https";
|
|
17
|
-
assets?: string;
|
|
18
|
-
site?: string;
|
|
19
|
-
siteInclude?: string[];
|
|
20
|
-
siteExclude?: string[];
|
|
21
|
-
nodeCompat?: boolean;
|
|
22
|
-
compatibilityDate?: string;
|
|
23
|
-
compatibilityFlags?: string[];
|
|
24
|
-
persist?: boolean;
|
|
25
|
-
persistTo?: string;
|
|
26
|
-
liveReload?: boolean;
|
|
27
|
-
watch?: boolean;
|
|
9
|
+
export interface UnstableDevOptions {
|
|
10
|
+
config?: string; // Path to .toml configuration file, relative to cwd
|
|
11
|
+
env?: string; // Environment to use for operations and .env files
|
|
12
|
+
ip?: string; // IP address to listen on
|
|
13
|
+
port?: number; // Port to listen on
|
|
14
|
+
bundle?: boolean; // Set to false to skip internal build steps and directly publish script
|
|
15
|
+
inspectorPort?: number; // Port for devtools to connect to
|
|
16
|
+
localProtocol?: "http" | "https"; // Protocol to listen to requests on, defaults to http.
|
|
17
|
+
assets?: string; // Static assets to be served
|
|
18
|
+
site?: string; // Root folder of static assets for Workers Sites
|
|
19
|
+
siteInclude?: string[]; // Array of .gitignore-style patterns that match file or directory names from the sites directory. Only matched items will be uploaded.
|
|
20
|
+
siteExclude?: string[]; // Array of .gitignore-style patterns that match file or directory names from the sites directory. Matched items will not be uploaded.
|
|
21
|
+
nodeCompat?: boolean; // Enable Node.js compatibility
|
|
22
|
+
compatibilityDate?: string; // Date to use for compatibility checks
|
|
23
|
+
compatibilityFlags?: string[]; // Flags to use for compatibility checks
|
|
24
|
+
persist?: boolean; // Enable persistence for local mode, using default path: .wrangler/state
|
|
25
|
+
persistTo?: string; // Specify directory to use for local persistence (implies --persist)
|
|
28
26
|
vars?: {
|
|
29
27
|
[key: string]: unknown;
|
|
30
28
|
};
|
|
@@ -44,23 +42,24 @@ interface DevOptions {
|
|
|
44
42
|
bucket_name: string;
|
|
45
43
|
preview_bucket_name?: string;
|
|
46
44
|
}[];
|
|
47
|
-
|
|
48
|
-
showInteractiveDevSession?: boolean;
|
|
49
|
-
logLevel?: "none" | "info" | "error" | "log" | "warn" | "debug";
|
|
50
|
-
logPrefix?: string;
|
|
45
|
+
logLevel?: "none" | "info" | "error" | "log" | "warn" | "debug"; // Specify logging level [choices: "debug", "info", "log", "warn", "error", "none"] [default: "log"]
|
|
51
46
|
inspect?: boolean;
|
|
52
47
|
local?: boolean;
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
48
|
+
accountId?: string;
|
|
49
|
+
experimental?: {
|
|
50
|
+
d1Databases?: Environment["d1_databases"];
|
|
51
|
+
disableExperimentalWarning?: boolean; // Disables wrangler's warning when unstable APIs are used.
|
|
52
|
+
disableDevRegistry?: boolean; // Disables wrangler's support multi-worker setups. May reduce flakiness when used in tests in CI.
|
|
53
|
+
enablePagesAssetsServiceBinding?: EnablePagesAssetsServiceBindingOptions;
|
|
54
|
+
experimentalLocal?: boolean; // Use Miniflare 3 instead of Miniflare 2
|
|
55
|
+
experimentalLocalRemoteKv?: boolean;
|
|
56
|
+
forceLocal?: boolean;
|
|
57
|
+
liveReload?: boolean; // Auto reload HTML pages when change is detected in local mode
|
|
58
|
+
showInteractiveDevSession?: boolean;
|
|
59
|
+
testMode?: boolean; // This option shouldn't be used - We plan on removing it eventually
|
|
60
|
+
testScheduled?: boolean; // Test scheduled events by visiting /__scheduled in browser
|
|
61
|
+
watch?: boolean; // unstable_dev doesn't support watch-mode yet in testMode
|
|
62
|
+
};
|
|
64
63
|
}
|
|
65
64
|
|
|
66
65
|
export interface UnstableDevWorker {
|
|
@@ -75,11 +74,44 @@ export interface UnstableDevWorker {
|
|
|
75
74
|
*/
|
|
76
75
|
export async function unstable_dev(
|
|
77
76
|
script: string,
|
|
78
|
-
options?:
|
|
79
|
-
apiOptions?:
|
|
77
|
+
options?: UnstableDevOptions,
|
|
78
|
+
apiOptions?: unknown
|
|
80
79
|
): Promise<UnstableDevWorker> {
|
|
81
|
-
|
|
82
|
-
|
|
80
|
+
// Note that not every experimental option is passed directly through to the underlying dev API - experimental options can be used here in unstable_dev. Otherwise we could just pass experimental down to dev blindly.
|
|
81
|
+
|
|
82
|
+
const experimentalOptions = {
|
|
83
|
+
// Defaults for "experimental" options
|
|
84
|
+
disableDevRegistry: false,
|
|
85
|
+
disableExperimentalWarning: false,
|
|
86
|
+
showInteractiveDevSession: false,
|
|
87
|
+
testMode: true,
|
|
88
|
+
// Override all options, including overwriting with "undefined"
|
|
89
|
+
...options?.experimental,
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
const {
|
|
93
|
+
// there are two types of "experimental" options:
|
|
94
|
+
// 1. options to unstable_dev that we're still testing or are unsure of
|
|
95
|
+
disableDevRegistry,
|
|
96
|
+
disableExperimentalWarning,
|
|
97
|
+
forceLocal,
|
|
98
|
+
liveReload,
|
|
99
|
+
showInteractiveDevSession,
|
|
100
|
+
testMode,
|
|
101
|
+
testScheduled,
|
|
102
|
+
// 2. options for alpha/beta products/libs
|
|
103
|
+
d1Databases,
|
|
104
|
+
experimentalLocal,
|
|
105
|
+
experimentalLocalRemoteKv,
|
|
106
|
+
enablePagesAssetsServiceBinding,
|
|
107
|
+
} = experimentalOptions;
|
|
108
|
+
|
|
109
|
+
if (apiOptions) {
|
|
110
|
+
logger.error(
|
|
111
|
+
"unstable_dev's third argument (apiOptions) has been deprecated in favor of an `experimental` property within the second argument (options).\nPlease update your code from:\n`await unstable_dev('...', {...}, {...});`\nto:\n`await unstable_dev('...', {..., experimental: {...}});`"
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
|
|
83
115
|
if (!disableExperimentalWarning) {
|
|
84
116
|
logger.warn(
|
|
85
117
|
`unstable_dev() is experimental\nunstable_dev()'s behaviour will likely change in future releases`
|
|
@@ -99,17 +131,59 @@ export async function unstable_dev(
|
|
|
99
131
|
script: script,
|
|
100
132
|
inspect: false,
|
|
101
133
|
logLevel: "none",
|
|
102
|
-
showInteractiveDevSession: false,
|
|
103
134
|
_: [],
|
|
104
135
|
$0: "",
|
|
105
136
|
port: options?.port ?? 0,
|
|
106
137
|
local: true,
|
|
107
|
-
|
|
138
|
+
d1Databases,
|
|
139
|
+
disableDevRegistry,
|
|
140
|
+
testScheduled: testScheduled ?? false,
|
|
141
|
+
experimentalLocal: experimentalLocal ?? false,
|
|
142
|
+
experimentalLocalRemoteKv: experimentalLocalRemoteKv ?? false,
|
|
143
|
+
enablePagesAssetsServiceBinding,
|
|
144
|
+
liveReload,
|
|
145
|
+
showInteractiveDevSession,
|
|
108
146
|
onReady: (address, port) => {
|
|
109
147
|
readyPort = port;
|
|
110
148
|
readyAddress = address;
|
|
111
149
|
ready(devServer);
|
|
112
150
|
},
|
|
151
|
+
config: options?.config,
|
|
152
|
+
env: options?.env,
|
|
153
|
+
bundle: options?.bundle,
|
|
154
|
+
compatibilityDate: options?.compatibilityDate,
|
|
155
|
+
compatibilityFlags: options?.compatibilityFlags,
|
|
156
|
+
ip: options?.ip,
|
|
157
|
+
inspectorPort: options?.inspectorPort,
|
|
158
|
+
v: undefined,
|
|
159
|
+
localProtocol: options?.localProtocol,
|
|
160
|
+
assets: options?.assets,
|
|
161
|
+
site: options?.site, // Root folder of static assets for Workers Sites
|
|
162
|
+
siteInclude: options?.siteInclude, // Array of .gitignore-style patterns that match file or directory names from the sites directory. Only matched items will be uploaded.
|
|
163
|
+
siteExclude: options?.siteExclude, // Array of .gitignore-style patterns that match file or directory names from the sites directory. Matched items will not be uploaded.
|
|
164
|
+
nodeCompat: options?.nodeCompat, // Enable Node.js compatibility
|
|
165
|
+
persist: options?.persist, // Enable persistence for local mode, using default path: .wrangler/state
|
|
166
|
+
persistTo: options?.persistTo, // Specify directory to use for local persistence (implies --persist)
|
|
167
|
+
experimentalJsonConfig: undefined,
|
|
168
|
+
name: undefined,
|
|
169
|
+
noBundle: false,
|
|
170
|
+
format: undefined,
|
|
171
|
+
latest: false,
|
|
172
|
+
routes: undefined,
|
|
173
|
+
host: undefined,
|
|
174
|
+
localUpstream: undefined,
|
|
175
|
+
experimentalPublic: undefined,
|
|
176
|
+
upstreamProtocol: undefined,
|
|
177
|
+
var: undefined,
|
|
178
|
+
define: undefined,
|
|
179
|
+
jsxFactory: undefined,
|
|
180
|
+
jsxFragment: undefined,
|
|
181
|
+
tsconfig: undefined,
|
|
182
|
+
minify: undefined,
|
|
183
|
+
experimentalEnableLocalPersistence: undefined,
|
|
184
|
+
legacyEnv: undefined,
|
|
185
|
+
public: undefined,
|
|
186
|
+
...options,
|
|
113
187
|
});
|
|
114
188
|
}).then((devServer) => {
|
|
115
189
|
// now that the inner promise has resolved, we can resolve the outer promise
|
|
@@ -145,16 +219,61 @@ export async function unstable_dev(
|
|
|
145
219
|
const devServer = startDev({
|
|
146
220
|
script: script,
|
|
147
221
|
inspect: false,
|
|
148
|
-
showInteractiveDevSession: false,
|
|
149
222
|
_: [],
|
|
150
223
|
$0: "",
|
|
224
|
+
logLevel: options?.logLevel ?? "log",
|
|
225
|
+
port: options?.port ?? 0,
|
|
151
226
|
local: true,
|
|
152
|
-
|
|
227
|
+
showInteractiveDevSession,
|
|
228
|
+
d1Databases,
|
|
229
|
+
disableDevRegistry,
|
|
230
|
+
testScheduled: testScheduled ?? false,
|
|
231
|
+
experimentalLocal: experimentalLocal ?? false,
|
|
232
|
+
experimentalLocalRemoteKv: experimentalLocalRemoteKv ?? false,
|
|
233
|
+
enablePagesAssetsServiceBinding,
|
|
234
|
+
forceLocal,
|
|
235
|
+
liveReload,
|
|
153
236
|
onReady: (address, port) => {
|
|
154
237
|
readyPort = port;
|
|
155
238
|
readyAddress = address;
|
|
156
239
|
ready(devServer);
|
|
157
240
|
},
|
|
241
|
+
config: options?.config,
|
|
242
|
+
env: options?.env,
|
|
243
|
+
bundle: options?.bundle,
|
|
244
|
+
compatibilityDate: options?.compatibilityDate,
|
|
245
|
+
compatibilityFlags: options?.compatibilityFlags,
|
|
246
|
+
ip: options?.ip,
|
|
247
|
+
inspectorPort: options?.inspectorPort,
|
|
248
|
+
v: undefined,
|
|
249
|
+
localProtocol: options?.localProtocol,
|
|
250
|
+
assets: options?.assets,
|
|
251
|
+
site: options?.site, // Root folder of static assets for Workers Sites
|
|
252
|
+
siteInclude: options?.siteInclude, // Array of .gitignore-style patterns that match file or directory names from the sites directory. Only matched items will be uploaded.
|
|
253
|
+
siteExclude: options?.siteExclude, // Array of .gitignore-style patterns that match file or directory names from the sites directory. Matched items will not be uploaded.
|
|
254
|
+
nodeCompat: options?.nodeCompat, // Enable Node.js compatibility
|
|
255
|
+
persist: options?.persist, // Enable persistence for local mode, using default path: .wrangler/state
|
|
256
|
+
persistTo: options?.persistTo, // Specify directory to use for local persistence (implies --persist)
|
|
257
|
+
experimentalJsonConfig: undefined,
|
|
258
|
+
name: undefined,
|
|
259
|
+
noBundle: false,
|
|
260
|
+
format: undefined,
|
|
261
|
+
latest: false,
|
|
262
|
+
routes: undefined,
|
|
263
|
+
host: undefined,
|
|
264
|
+
localUpstream: undefined,
|
|
265
|
+
experimentalPublic: undefined,
|
|
266
|
+
upstreamProtocol: undefined,
|
|
267
|
+
var: undefined,
|
|
268
|
+
define: undefined,
|
|
269
|
+
jsxFactory: undefined,
|
|
270
|
+
jsxFragment: undefined,
|
|
271
|
+
tsconfig: undefined,
|
|
272
|
+
minify: undefined,
|
|
273
|
+
experimentalEnableLocalPersistence: undefined,
|
|
274
|
+
legacyEnv: undefined,
|
|
275
|
+
public: undefined,
|
|
276
|
+
...options,
|
|
158
277
|
});
|
|
159
278
|
}).then((devServer) => {
|
|
160
279
|
resolve({
|
|
@@ -182,27 +301,16 @@ export async function unstable_dev(
|
|
|
182
301
|
export function parseRequestInput(
|
|
183
302
|
readyAddress: string,
|
|
184
303
|
readyPort: number,
|
|
185
|
-
input
|
|
304
|
+
input: RequestInfo = "/",
|
|
186
305
|
init?: RequestInit,
|
|
187
306
|
protocol: "http" | "https" = "http"
|
|
188
307
|
): [RequestInfo, RequestInit | undefined] {
|
|
189
308
|
if (input instanceof Request) {
|
|
190
309
|
return [input, undefined];
|
|
191
|
-
} else if (input instanceof URL) {
|
|
192
|
-
input = `${protocol}://${readyAddress}:${readyPort}${input.pathname}`;
|
|
193
|
-
} else if (typeof input === "string") {
|
|
194
|
-
try {
|
|
195
|
-
// Want to strip the URL to only get the pathname, but the user could pass in only the pathname
|
|
196
|
-
// Will error if we try and pass "/something" into new URL("/something")
|
|
197
|
-
input = `${protocol}://${readyAddress}:${readyPort}${
|
|
198
|
-
new URL(input).pathname
|
|
199
|
-
}`;
|
|
200
|
-
} catch {
|
|
201
|
-
input = `${protocol}://${readyAddress}:${readyPort}${input}`;
|
|
202
|
-
}
|
|
203
|
-
} else {
|
|
204
|
-
input = `${protocol}://${readyAddress}:${readyPort}`;
|
|
205
310
|
}
|
|
206
|
-
|
|
207
|
-
|
|
311
|
+
const url = new URL(`${input}`, `${protocol}://${readyAddress}:${readyPort}`);
|
|
312
|
+
url.protocol = protocol;
|
|
313
|
+
url.hostname = readyAddress;
|
|
314
|
+
url.port = readyPort.toString();
|
|
315
|
+
return [url, init];
|
|
208
316
|
}
|
package/src/api/index.ts
CHANGED
|
@@ -1,2 +1,11 @@
|
|
|
1
1
|
export { unstable_dev } from "./dev";
|
|
2
|
-
export type { UnstableDevWorker } from "./dev";
|
|
2
|
+
export type { UnstableDevWorker, UnstableDevOptions } from "./dev";
|
|
3
|
+
export { unstable_pages } from "./pages";
|
|
4
|
+
export {
|
|
5
|
+
uploadMTlsCertificate,
|
|
6
|
+
uploadMTlsCertificateFromFs,
|
|
7
|
+
listMTlsCertificates,
|
|
8
|
+
getMTlsCertificate,
|
|
9
|
+
getMTlsCertificateByName,
|
|
10
|
+
deleteMTlsCertificate,
|
|
11
|
+
} from "./mtls-certificate";
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { fetchResult } from "../cfetch";
|
|
2
|
+
import { readFileSync } from "../parse";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* the representation of an mTLS certificate in the account certificate store
|
|
6
|
+
*/
|
|
7
|
+
export interface MTlsCertificateResponse {
|
|
8
|
+
id: string;
|
|
9
|
+
name?: string;
|
|
10
|
+
ca: boolean;
|
|
11
|
+
certificates: string;
|
|
12
|
+
expires_on: string;
|
|
13
|
+
issuer: string;
|
|
14
|
+
serial_number: string;
|
|
15
|
+
signature: string;
|
|
16
|
+
uploaded_on: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* details for uploading an mTLS certificate from disk
|
|
21
|
+
*/
|
|
22
|
+
export interface MTlsCertificateUploadDetails {
|
|
23
|
+
certificateChainFilename: string;
|
|
24
|
+
privateKeyFilename: string;
|
|
25
|
+
name?: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* details for uploading an mTLS certificate via the ssl api
|
|
30
|
+
*/
|
|
31
|
+
export interface MTlsCertificateBody {
|
|
32
|
+
certificateChain: string;
|
|
33
|
+
privateKey: string;
|
|
34
|
+
name?: string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* supported filters for listing mTLS certificates via the ssl api
|
|
39
|
+
*/
|
|
40
|
+
export interface MTlsCertificateListFilter {
|
|
41
|
+
name?: string;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* indicates that looking up a certificate by name failed due to zero matching results
|
|
46
|
+
*/
|
|
47
|
+
export class ErrorMTlsCertificateNameNotFound extends Error {}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* indicates that looking up a certificate by name failed due to more than one matching results
|
|
51
|
+
*/
|
|
52
|
+
export class ErrorMTlsCertificateManyNamesMatch extends Error {}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* reads an mTLS certificate and private key pair from disk and uploads it to the account mTLS certificate store
|
|
56
|
+
*/
|
|
57
|
+
export async function uploadMTlsCertificateFromFs(
|
|
58
|
+
accountId: string,
|
|
59
|
+
details: MTlsCertificateUploadDetails
|
|
60
|
+
): Promise<MTlsCertificateResponse> {
|
|
61
|
+
return await uploadMTlsCertificate(accountId, {
|
|
62
|
+
certificateChain: readFileSync(details.certificateChainFilename),
|
|
63
|
+
privateKey: readFileSync(details.privateKeyFilename),
|
|
64
|
+
name: details.name,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* uploads an mTLS certificate and private key pair to the account mTLS certificate store
|
|
70
|
+
*/
|
|
71
|
+
export async function uploadMTlsCertificate(
|
|
72
|
+
accountId: string,
|
|
73
|
+
body: MTlsCertificateBody
|
|
74
|
+
): Promise<MTlsCertificateResponse> {
|
|
75
|
+
return await fetchResult(`/accounts/${accountId}/mtls_certificates`, {
|
|
76
|
+
method: "POST",
|
|
77
|
+
body: JSON.stringify({
|
|
78
|
+
name: body.name,
|
|
79
|
+
certificates: body.certificateChain,
|
|
80
|
+
private_key: body.privateKey,
|
|
81
|
+
ca: false,
|
|
82
|
+
}),
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* fetches an mTLS certificate from the account mTLS certificate store by ID
|
|
88
|
+
*/
|
|
89
|
+
export async function getMTlsCertificate(
|
|
90
|
+
accountId: string,
|
|
91
|
+
id: string
|
|
92
|
+
): Promise<MTlsCertificateResponse> {
|
|
93
|
+
return await fetchResult(
|
|
94
|
+
`/accounts/${accountId}/mtls_certificates/${id}`,
|
|
95
|
+
{}
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* lists mTLS certificates for an account. filtering by name is supported
|
|
101
|
+
*/
|
|
102
|
+
export async function listMTlsCertificates(
|
|
103
|
+
accountId: string,
|
|
104
|
+
filter: MTlsCertificateListFilter
|
|
105
|
+
): Promise<MTlsCertificateResponse[]> {
|
|
106
|
+
const params = new URLSearchParams();
|
|
107
|
+
params.append("ca", "false");
|
|
108
|
+
if (filter.name) {
|
|
109
|
+
params.append("name", filter.name);
|
|
110
|
+
}
|
|
111
|
+
return await fetchResult(
|
|
112
|
+
`/accounts/${accountId}/mtls_certificates`,
|
|
113
|
+
{},
|
|
114
|
+
params
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* fetches an mTLS certificate from the account mTLS certificate store by name. will throw an error if no certificates are found, or multiple are found with that name
|
|
120
|
+
*/
|
|
121
|
+
export async function getMTlsCertificateByName(
|
|
122
|
+
accountId: string,
|
|
123
|
+
name: string
|
|
124
|
+
): Promise<MTlsCertificateResponse> {
|
|
125
|
+
const certificates = await listMTlsCertificates(accountId, { name });
|
|
126
|
+
if (certificates.length === 0) {
|
|
127
|
+
throw new ErrorMTlsCertificateNameNotFound(
|
|
128
|
+
`certificate not found with name "${name}"`
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
if (certificates.length > 1) {
|
|
132
|
+
throw new ErrorMTlsCertificateManyNamesMatch(
|
|
133
|
+
`multiple certificates found with name "${name}"`
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
const certificate = certificates[0];
|
|
137
|
+
return certificate;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
export async function deleteMTlsCertificate(
|
|
141
|
+
accountId: string,
|
|
142
|
+
certificateId: string
|
|
143
|
+
) {
|
|
144
|
+
return await fetchResult(
|
|
145
|
+
`/accounts/${accountId}/mtls_certificates/${certificateId}`,
|
|
146
|
+
{ method: "DELETE" }
|
|
147
|
+
);
|
|
148
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { Response } from "undici";
|
|
4
|
+
import { createWorkerUploadForm } from "../../create-worker-upload-form";
|
|
5
|
+
import type { BundleResult } from "../../bundle";
|
|
6
|
+
import type { CfWorkerInit } from "../../worker";
|
|
7
|
+
import type { Blob } from "node:buffer";
|
|
8
|
+
import type { FormData } from "undici";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Takes a Worker bundle - `BundleResult` - and generates the _worker.bundle
|
|
12
|
+
* contents
|
|
13
|
+
*/
|
|
14
|
+
export async function createUploadWorkerBundleContents(
|
|
15
|
+
workerBundle: BundleResult
|
|
16
|
+
): Promise<Blob> {
|
|
17
|
+
const workerBundleFormData = createWorkerBundleFormData(workerBundle);
|
|
18
|
+
const metadata = JSON.parse(workerBundleFormData.get("metadata") as string);
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Pages doesn't need the metadata bindings returned by
|
|
22
|
+
* `createWorkerBundleFormData`. Let's strip them out and return only
|
|
23
|
+
* the contents we need
|
|
24
|
+
*/
|
|
25
|
+
workerBundleFormData.set(
|
|
26
|
+
"metadata",
|
|
27
|
+
JSON.stringify({ main_module: metadata.main_module })
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
return await new Response(workerBundleFormData).blob();
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Creates a `FormData` upload from a `BundleResult`
|
|
35
|
+
*/
|
|
36
|
+
function createWorkerBundleFormData(workerBundle: BundleResult): FormData {
|
|
37
|
+
const mainModule = {
|
|
38
|
+
name: path.basename(workerBundle.resolvedEntryPointPath),
|
|
39
|
+
content: readFileSync(workerBundle.resolvedEntryPointPath, {
|
|
40
|
+
encoding: "utf-8",
|
|
41
|
+
}),
|
|
42
|
+
type: workerBundle.bundleType || "esm",
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const worker: CfWorkerInit = {
|
|
46
|
+
name: mainModule.name,
|
|
47
|
+
main: mainModule,
|
|
48
|
+
modules: workerBundle.modules,
|
|
49
|
+
bindings: {
|
|
50
|
+
vars: undefined,
|
|
51
|
+
kv_namespaces: undefined,
|
|
52
|
+
send_email: undefined,
|
|
53
|
+
wasm_modules: undefined,
|
|
54
|
+
text_blobs: undefined,
|
|
55
|
+
data_blobs: undefined,
|
|
56
|
+
durable_objects: undefined,
|
|
57
|
+
queues: undefined,
|
|
58
|
+
r2_buckets: undefined,
|
|
59
|
+
d1_databases: undefined,
|
|
60
|
+
services: undefined,
|
|
61
|
+
analytics_engine_datasets: undefined,
|
|
62
|
+
dispatch_namespaces: undefined,
|
|
63
|
+
mtls_certificates: undefined,
|
|
64
|
+
logfwdr: undefined,
|
|
65
|
+
unsafe: undefined,
|
|
66
|
+
},
|
|
67
|
+
migrations: undefined,
|
|
68
|
+
compatibility_date: undefined,
|
|
69
|
+
compatibility_flags: undefined,
|
|
70
|
+
usage_model: undefined,
|
|
71
|
+
keepVars: undefined,
|
|
72
|
+
logpush: undefined,
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
return createWorkerUploadForm(worker);
|
|
76
|
+
}
|