wrangler 0.0.0-e6733a3 → 0.0.0-e7a0cd5b
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/Cloudflare_CA.pem +18 -0
- package/README.md +47 -14
- package/bin/wrangler.js +160 -28
- package/kv-asset-handler.js +1 -0
- package/miniflare-dist/index.mjs +6316 -0
- package/package.json +190 -124
- package/src/__tests__/access.test.ts +25 -0
- package/src/__tests__/api-dev.test.ts +209 -0
- package/src/__tests__/api-devregistry.test.js +57 -0
- package/src/__tests__/api.test.ts +80 -0
- package/src/__tests__/config-cache-without-cache-dir.test.ts +38 -0
- package/src/__tests__/config-cache.test.ts +42 -0
- package/src/__tests__/configuration.test.ts +4028 -0
- package/src/__tests__/d1.test.ts +72 -0
- package/src/__tests__/delete.test.ts +230 -0
- package/src/__tests__/deployments.test.ts +95 -0
- package/src/__tests__/dev.test.tsx +1505 -62
- package/src/__tests__/dialogs.test.tsx +40 -0
- package/src/__tests__/generate.test.ts +235 -0
- package/src/__tests__/get-host-from-url.test.ts +16 -0
- package/src/__tests__/guess-worker-format.test.ts +85 -0
- package/src/__tests__/{clipboardy-mock.js → helpers/clipboardy-mock.js} +0 -0
- package/src/__tests__/helpers/cmd-shim.d.ts +11 -0
- package/src/__tests__/helpers/mock-account-id.ts +48 -0
- package/src/__tests__/helpers/mock-bin.ts +36 -0
- package/src/__tests__/helpers/mock-cfetch.ts +333 -0
- package/src/__tests__/helpers/mock-console.ts +106 -0
- package/src/__tests__/helpers/mock-dialogs.ts +153 -0
- package/src/__tests__/helpers/mock-get-zone-from-host.ts +8 -0
- package/src/__tests__/helpers/mock-http-server.ts +46 -0
- package/src/__tests__/helpers/mock-istty.ts +74 -0
- package/src/__tests__/helpers/mock-known-routes.ts +7 -0
- package/src/__tests__/helpers/mock-kv.ts +33 -0
- package/src/__tests__/helpers/mock-oauth-flow.ts +252 -0
- package/src/__tests__/helpers/mock-process.ts +39 -0
- package/src/__tests__/helpers/mock-stdin.ts +108 -0
- package/src/__tests__/helpers/mock-web-socket.ts +29 -0
- package/src/__tests__/helpers/msw/handlers/access.ts +13 -0
- package/src/__tests__/helpers/msw/handlers/deployments.ts +59 -0
- package/src/__tests__/helpers/msw/handlers/namespaces.ts +104 -0
- package/src/__tests__/helpers/msw/handlers/oauth.ts +36 -0
- package/src/__tests__/helpers/msw/handlers/r2.ts +80 -0
- package/src/__tests__/helpers/msw/handlers/script.ts +75 -0
- package/src/__tests__/helpers/msw/handlers/user.ts +63 -0
- package/src/__tests__/helpers/msw/handlers/zones.ts +22 -0
- package/src/__tests__/helpers/msw/index.ts +21 -0
- package/src/__tests__/helpers/run-in-tmp.ts +38 -0
- package/src/__tests__/helpers/run-wrangler.ts +16 -0
- package/src/__tests__/helpers/worker-scripts/child-wrangler.toml +1 -0
- package/src/__tests__/helpers/worker-scripts/hello-world-worker.js +5 -0
- package/src/__tests__/helpers/worker-scripts/hello-world-wrangler.toml +1 -0
- package/src/__tests__/helpers/worker-scripts/parent-worker.js +8 -0
- package/src/__tests__/helpers/worker-scripts/parent-wrangler.toml +5 -0
- package/src/__tests__/helpers/write-worker-source.ts +31 -0
- package/src/__tests__/helpers/write-wrangler-toml.ts +17 -0
- package/src/__tests__/https-options.test.ts +163 -0
- package/src/__tests__/index.test.ts +259 -284
- package/src/__tests__/init.test.ts +2900 -0
- package/src/__tests__/jest.setup.ts +190 -10
- package/src/__tests__/kv.test.ts +1668 -1091
- package/src/__tests__/logger.test.ts +141 -0
- package/src/__tests__/metrics.test.ts +450 -0
- package/src/__tests__/middleware.scheduled.test.ts +135 -0
- package/src/__tests__/middleware.test.ts +726 -0
- package/src/__tests__/package-manager.test.ts +353 -0
- package/src/__tests__/pages.test.ts +2223 -0
- package/src/__tests__/parse.test.ts +330 -0
- package/src/__tests__/paths.test.ts +39 -0
- package/src/__tests__/publish.test.ts +7660 -0
- package/src/__tests__/pubsub.test.ts +370 -0
- package/src/__tests__/queues.test.ts +371 -0
- package/src/__tests__/r2.test.ts +376 -0
- package/src/__tests__/route.test.ts +45 -0
- package/src/__tests__/secret.test.ts +644 -0
- package/src/__tests__/tail.test.ts +800 -0
- package/src/__tests__/test-old-node-version.js +31 -0
- package/src/__tests__/type-generation.test.ts +217 -0
- package/src/__tests__/user.test.ts +155 -0
- package/src/__tests__/utils-collectKeyValues.test.ts +47 -0
- package/src/__tests__/validate-dev-props.test.ts +56 -0
- package/src/__tests__/version.test.ts +35 -0
- package/src/__tests__/whoami.test.tsx +278 -0
- package/src/__tests__/worker-namespace.test.ts +326 -0
- package/src/abort.d.ts +3 -0
- package/src/api/dev.ts +208 -0
- package/src/api/index.ts +2 -0
- package/src/bundle-reporter.tsx +68 -0
- package/src/bundle.ts +785 -0
- package/src/cfetch/index.ts +128 -70
- package/src/cfetch/internal.ts +240 -46
- package/src/cli.ts +25 -6
- package/src/config/README.md +107 -0
- package/src/config/config.ts +275 -0
- package/src/config/diagnostics.ts +80 -0
- package/src/config/environment.ts +563 -0
- package/src/config/index.ts +342 -0
- package/src/config/validation-helpers.ts +597 -0
- package/src/config/validation.ts +2113 -0
- package/src/config-cache.ts +85 -0
- package/src/create-worker-preview.ts +282 -0
- package/src/create-worker-upload-form.ts +321 -0
- package/src/d1/backups.tsx +218 -0
- package/src/d1/create.tsx +54 -0
- package/src/d1/delete.tsx +56 -0
- package/src/d1/execute.tsx +299 -0
- package/src/d1/formatTimeAgo.ts +14 -0
- package/src/d1/index.ts +76 -0
- package/src/d1/list.tsx +48 -0
- package/src/d1/options.ts +12 -0
- package/src/d1/types.tsx +14 -0
- package/src/d1/utils.ts +39 -0
- package/src/delete.ts +108 -0
- package/src/deployments.ts +74 -0
- package/src/deprecated/index.ts +438 -0
- package/src/dev/dev-vars.ts +39 -0
- package/src/dev/dev.tsx +587 -0
- package/src/dev/get-local-persistence-path.tsx +31 -0
- package/src/dev/local.tsx +717 -0
- package/src/dev/remote.tsx +603 -0
- package/src/dev/start-server.ts +513 -0
- package/src/dev/use-esbuild.ts +204 -0
- package/src/dev/validate-dev-props.ts +31 -0
- package/src/dev-registry.tsx +201 -0
- package/src/dev.tsx +848 -750
- package/src/dialogs.tsx +146 -60
- package/src/dispatch-namespace.ts +207 -0
- package/src/durable.ts +102 -0
- package/src/entry.ts +329 -0
- package/src/environment-variables.ts +50 -0
- package/src/errors.ts +11 -0
- package/src/git-client.ts +124 -0
- package/src/global-wrangler-config-path.ts +26 -0
- package/src/https-options.ts +127 -0
- package/src/index.tsx +669 -1959
- package/src/init.ts +970 -0
- package/src/inspect.ts +720 -477
- package/src/intl-polyfill.d.ts +139 -0
- package/src/is-ci.ts +14 -0
- package/src/is-interactive.ts +16 -0
- package/src/kv/helpers.ts +430 -0
- package/src/kv/index.ts +596 -0
- package/src/logger.ts +92 -0
- package/src/metrics/index.ts +5 -0
- package/src/metrics/metrics-config.ts +239 -0
- package/src/metrics/metrics-dispatcher.ts +96 -0
- package/src/metrics/metrics-usage-headers.ts +24 -0
- package/src/metrics/send-event.ts +94 -0
- package/src/miniflare-cli/README.md +30 -0
- package/src/miniflare-cli/assets.ts +215 -0
- package/src/miniflare-cli/index.ts +213 -0
- package/src/miniflare-cli/request-context.ts +40 -0
- package/src/module-collection.ts +256 -53
- package/src/open-in-browser.ts +17 -0
- package/src/package-manager.ts +219 -0
- package/src/pages/build.tsx +238 -0
- package/src/pages/constants.ts +18 -0
- package/src/pages/deployments.tsx +106 -0
- package/src/pages/dev.tsx +693 -0
- package/src/pages/errors.ts +66 -0
- package/src/pages/functions/buildPlugin.ts +110 -0
- package/src/pages/functions/buildWorker.ts +156 -0
- package/src/pages/functions/filepath-routing.test.ts +234 -0
- package/src/pages/functions/filepath-routing.ts +189 -0
- package/src/pages/functions/identifiers.ts +78 -0
- package/src/pages/functions/routes-consolidation.test.ts +250 -0
- package/src/pages/functions/routes-consolidation.ts +73 -0
- package/src/pages/functions/routes-transformation.test.ts +282 -0
- package/src/pages/functions/routes-transformation.ts +115 -0
- package/src/pages/functions/routes-validation.test.ts +403 -0
- package/src/pages/functions/routes-validation.ts +202 -0
- package/src/pages/functions/routes.ts +151 -0
- package/src/pages/functions.tsx +82 -0
- package/src/pages/hash.tsx +13 -0
- package/src/pages/index.tsx +94 -0
- package/src/pages/projects.tsx +169 -0
- package/src/pages/publish.tsx +436 -0
- package/src/pages/types.ts +49 -0
- package/src/pages/upload.tsx +425 -0
- package/src/pages/utils.ts +12 -0
- package/src/parse.ts +286 -0
- package/src/paths.ts +71 -0
- package/src/proxy.ts +647 -252
- package/src/publish/index.ts +270 -0
- package/src/publish/publish.ts +1035 -0
- package/src/pubsub/index.ts +286 -0
- package/src/pubsub/pubsub-commands.tsx +624 -0
- package/src/queues/cli/commands/consumer/add.ts +71 -0
- package/src/queues/cli/commands/consumer/index.ts +22 -0
- package/src/queues/cli/commands/consumer/remove.ts +38 -0
- package/src/queues/cli/commands/create.ts +25 -0
- package/src/queues/cli/commands/delete.ts +26 -0
- package/src/queues/cli/commands/index.ts +33 -0
- package/src/queues/cli/commands/list.ts +25 -0
- package/src/queues/client.ts +135 -0
- package/src/r2/helpers.ts +131 -0
- package/src/r2/index.ts +277 -0
- package/src/routes.ts +140 -0
- package/src/secret/index.ts +379 -0
- package/src/selfsigned.d.ts +29 -0
- package/src/sites.tsx +357 -99
- package/src/tail/createTail.ts +315 -0
- package/src/tail/filters.ts +277 -0
- package/src/tail/index.ts +214 -0
- package/src/tail/printing.ts +107 -0
- package/src/type-generation.ts +159 -0
- package/src/update-check.ts +19 -0
- package/src/user/access.ts +69 -0
- package/src/user/choose-account.tsx +69 -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 +1192 -0
- package/src/utils/collectKeyValues.ts +14 -0
- package/src/whoami.tsx +169 -0
- package/src/worker.ts +242 -0
- package/src/yargs-types.ts +20 -0
- package/src/zones.ts +191 -0
- package/templates/__tests__/pages-dev-util.test.ts +128 -0
- package/templates/checked-fetch.js +17 -0
- package/templates/d1-beta-facade.js +174 -0
- package/templates/experimental-local-cache-stubs.js +27 -0
- package/templates/first-party-worker-module-facade.ts +18 -0
- package/templates/format-dev-errors.ts +32 -0
- package/templates/gitignore +171 -0
- package/templates/init-tests/test-jest-new-worker.js +25 -0
- package/templates/init-tests/test-vitest-new-worker.js +26 -0
- package/templates/middleware/common.ts +62 -0
- package/templates/middleware/loader-modules.ts +84 -0
- package/templates/middleware/loader-sw.ts +213 -0
- package/templates/middleware/middleware-pretty-error.ts +40 -0
- package/templates/middleware/middleware-scheduled.ts +15 -0
- package/templates/new-worker-scheduled.js +17 -0
- package/templates/new-worker-scheduled.ts +32 -0
- package/templates/new-worker.js +15 -0
- package/templates/new-worker.ts +30 -0
- package/templates/no-op-worker.js +10 -0
- package/templates/pages-dev-pipeline.ts +28 -0
- package/templates/pages-dev-util.ts +52 -0
- package/templates/pages-shim.ts +9 -0
- package/templates/pages-template-plugin.ts +171 -0
- package/templates/pages-template-worker.ts +189 -0
- package/templates/serve-static-assets.ts +63 -0
- package/templates/service-bindings-module-facade.js +54 -0
- package/templates/service-bindings-sw-facade.js +42 -0
- package/templates/tsconfig.json +106 -0
- package/wrangler-dist/cli.d.ts +892 -0
- package/wrangler-dist/cli.js +142402 -103276
- package/pages/functions/buildWorker.ts +0 -62
- package/pages/functions/filepath-routing.test.ts +0 -39
- package/pages/functions/filepath-routing.ts +0 -221
- package/pages/functions/identifiers.ts +0 -78
- package/pages/functions/routes.ts +0 -158
- package/pages/functions/template-worker.ts +0 -144
- package/src/__tests__/mock-cfetch.ts +0 -171
- package/src/__tests__/mock-dialogs.ts +0 -65
- package/src/__tests__/run-in-tmp.ts +0 -19
- package/src/__tests__/run-wrangler.ts +0 -32
- package/src/api/form_data.ts +0 -131
- package/src/api/preview.ts +0 -128
- package/src/api/worker.ts +0 -155
- package/src/config.ts +0 -487
- package/src/kv.tsx +0 -267
- package/src/pages.tsx +0 -1031
- package/src/publish.ts +0 -358
- package/src/tail.tsx +0 -73
- package/src/user.tsx +0 -1025
- package/static-asset-facade.js +0 -47
- package/vendor/@cloudflare/kv-asset-handler/CHANGELOG.md +0 -332
- package/vendor/@cloudflare/kv-asset-handler/LICENSE_APACHE +0 -176
- package/vendor/@cloudflare/kv-asset-handler/LICENSE_MIT +0 -25
- package/vendor/@cloudflare/kv-asset-handler/README.md +0 -245
- package/vendor/@cloudflare/kv-asset-handler/dist/index.d.ts +0 -32
- package/vendor/@cloudflare/kv-asset-handler/dist/index.js +0 -354
- package/vendor/@cloudflare/kv-asset-handler/dist/mocks.d.ts +0 -13
- package/vendor/@cloudflare/kv-asset-handler/dist/mocks.js +0 -148
- package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.d.ts +0 -1
- package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.js +0 -436
- package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.d.ts +0 -1
- package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.js +0 -40
- package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.d.ts +0 -1
- package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.js +0 -42
- package/vendor/@cloudflare/kv-asset-handler/dist/types.d.ts +0 -26
- package/vendor/@cloudflare/kv-asset-handler/dist/types.js +0 -31
- package/vendor/@cloudflare/kv-asset-handler/package.json +0 -52
- package/vendor/@cloudflare/kv-asset-handler/src/index.ts +0 -296
- package/vendor/@cloudflare/kv-asset-handler/src/mocks.ts +0 -136
- package/vendor/@cloudflare/kv-asset-handler/src/test/getAssetFromKV.ts +0 -464
- package/vendor/@cloudflare/kv-asset-handler/src/test/mapRequestToAsset.ts +0 -33
- package/vendor/@cloudflare/kv-asset-handler/src/test/serveSinglePageApp.ts +0 -42
- package/vendor/@cloudflare/kv-asset-handler/src/types.ts +0 -39
- package/vendor/wrangler-mime/CHANGELOG.md +0 -289
- package/vendor/wrangler-mime/LICENSE +0 -21
- package/vendor/wrangler-mime/Mime.js +0 -97
- package/vendor/wrangler-mime/README.md +0 -187
- package/vendor/wrangler-mime/cli.js +0 -46
- package/vendor/wrangler-mime/index.js +0 -4
- package/vendor/wrangler-mime/lite.js +0 -4
- package/vendor/wrangler-mime/package.json +0 -52
- package/vendor/wrangler-mime/types/other.js +0 -1
- package/vendor/wrangler-mime/types/standard.js +0 -1
- package/wrangler-dist/cli.js.map +0 -7
package/src/publish.ts
DELETED
|
@@ -1,358 +0,0 @@
|
|
|
1
|
-
import assert from "node:assert";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import { readFile } from "node:fs/promises";
|
|
4
|
-
import esbuild from "esbuild";
|
|
5
|
-
import { execa } from "execa";
|
|
6
|
-
import tmp from "tmp-promise";
|
|
7
|
-
import type { CfWorkerInit } from "./api/worker";
|
|
8
|
-
import { toFormData } from "./api/form_data";
|
|
9
|
-
import { fetchResult } from "./cfetch";
|
|
10
|
-
import type { Config } from "./config";
|
|
11
|
-
import makeModuleCollector from "./module-collection";
|
|
12
|
-
import { syncAssets } from "./sites";
|
|
13
|
-
|
|
14
|
-
type CfScriptFormat = undefined | "modules" | "service-worker";
|
|
15
|
-
|
|
16
|
-
type Props = {
|
|
17
|
-
config: Config;
|
|
18
|
-
format?: CfScriptFormat;
|
|
19
|
-
script?: string;
|
|
20
|
-
name?: string;
|
|
21
|
-
env?: string;
|
|
22
|
-
compatibilityDate?: string;
|
|
23
|
-
compatibilityFlags?: string[];
|
|
24
|
-
public?: string;
|
|
25
|
-
site?: string;
|
|
26
|
-
triggers?: (string | number)[];
|
|
27
|
-
routes?: (string | number)[];
|
|
28
|
-
legacyEnv?: boolean;
|
|
29
|
-
jsxFactory: undefined | string;
|
|
30
|
-
jsxFragment: undefined | string;
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
function sleep(ms: number) {
|
|
34
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export default async function publish(props: Props): Promise<void> {
|
|
38
|
-
if (props.public && props.format === "service-worker") {
|
|
39
|
-
// TODO: check config too
|
|
40
|
-
throw new Error(
|
|
41
|
-
"You cannot use the service worker format with a public directory."
|
|
42
|
-
);
|
|
43
|
-
}
|
|
44
|
-
// TODO: warn if git/hg has uncommitted changes
|
|
45
|
-
const { config } = props;
|
|
46
|
-
const {
|
|
47
|
-
account_id: accountId,
|
|
48
|
-
build,
|
|
49
|
-
// @ts-expect-error hidden
|
|
50
|
-
__path__,
|
|
51
|
-
} = config;
|
|
52
|
-
|
|
53
|
-
const envRootObj = props.env ? config.env[props.env] || {} : config;
|
|
54
|
-
|
|
55
|
-
assert(
|
|
56
|
-
envRootObj.compatibility_date || props["compatibility-date"],
|
|
57
|
-
"A compatibility_date is required when publishing. Add one to your wrangler.toml file, or pass it in your terminal as --compatibility_date. See https://developers.cloudflare.com/workers/platform/compatibility-dates for more information."
|
|
58
|
-
);
|
|
59
|
-
|
|
60
|
-
const triggers = props.triggers || config.triggers?.crons;
|
|
61
|
-
const routes = props.routes || config.routes;
|
|
62
|
-
|
|
63
|
-
const jsxFactory = props.jsxFactory || config.jsx_factory;
|
|
64
|
-
const jsxFragment = props.jsxFragment || config.jsx_fragment;
|
|
65
|
-
|
|
66
|
-
assert(config.account_id, "missing account id");
|
|
67
|
-
|
|
68
|
-
let scriptName = props.name || config.name;
|
|
69
|
-
assert(
|
|
70
|
-
scriptName,
|
|
71
|
-
'You need to provide a name when publishing a worker. Either pass it as a cli arg with `--name <name>` or in your config file as `name = "<name>"`'
|
|
72
|
-
);
|
|
73
|
-
|
|
74
|
-
let file: string;
|
|
75
|
-
if (props.script) {
|
|
76
|
-
file = props.script;
|
|
77
|
-
} else {
|
|
78
|
-
assert(build?.upload?.main, "missing main file");
|
|
79
|
-
file = path.join(path.dirname(__path__), build.upload.main);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
if (props.legacyEnv) {
|
|
83
|
-
scriptName += props.env ? `-${props.env}` : "";
|
|
84
|
-
}
|
|
85
|
-
const envName = props.env ?? "production";
|
|
86
|
-
|
|
87
|
-
const destination = await tmp.dir({ unsafeCleanup: true });
|
|
88
|
-
|
|
89
|
-
if (props.config.build?.command) {
|
|
90
|
-
// TODO: add a deprecation message here?
|
|
91
|
-
console.log("running:", props.config.build.command);
|
|
92
|
-
const buildCommandPieces = props.config.build.command.split(" ");
|
|
93
|
-
await execa(buildCommandPieces[0], buildCommandPieces.slice(1), {
|
|
94
|
-
stdout: "inherit",
|
|
95
|
-
stderr: "inherit",
|
|
96
|
-
...(props.config.build?.cwd && { cwd: props.config.build.cwd }),
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
const moduleCollector = makeModuleCollector();
|
|
101
|
-
const result = await esbuild.build({
|
|
102
|
-
...(props.public
|
|
103
|
-
? {
|
|
104
|
-
stdin: {
|
|
105
|
-
contents: (
|
|
106
|
-
await readFile(
|
|
107
|
-
path.join(__dirname, "../static-asset-facade.js"),
|
|
108
|
-
"utf8"
|
|
109
|
-
)
|
|
110
|
-
).replace("__ENTRY_POINT__", path.join(process.cwd(), file)),
|
|
111
|
-
sourcefile: "static-asset-facade.js",
|
|
112
|
-
resolveDir: path.dirname(file),
|
|
113
|
-
},
|
|
114
|
-
}
|
|
115
|
-
: { entryPoints: [file] }),
|
|
116
|
-
bundle: true,
|
|
117
|
-
nodePaths: props.public ? [path.join(__dirname, "../vendor")] : undefined,
|
|
118
|
-
outdir: destination.path,
|
|
119
|
-
external: ["__STATIC_CONTENT_MANIFEST"],
|
|
120
|
-
format: "esm",
|
|
121
|
-
sourcemap: true,
|
|
122
|
-
metafile: true,
|
|
123
|
-
conditions: ["worker", "browser"],
|
|
124
|
-
loader: {
|
|
125
|
-
".js": "jsx",
|
|
126
|
-
},
|
|
127
|
-
plugins: [moduleCollector.plugin],
|
|
128
|
-
...(jsxFactory && { jsxFactory }),
|
|
129
|
-
...(jsxFragment && { jsxFragment }),
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
const chunks = Object.entries(result.metafile.outputs).find(
|
|
133
|
-
([_path, { entryPoint }]) =>
|
|
134
|
-
entryPoint ===
|
|
135
|
-
(props.public
|
|
136
|
-
? path.join(path.dirname(file), "static-asset-facade.js")
|
|
137
|
-
: Object.keys(result.metafile.inputs)[0])
|
|
138
|
-
);
|
|
139
|
-
|
|
140
|
-
const { format } = props;
|
|
141
|
-
const bundle = {
|
|
142
|
-
type: chunks[1].exports.length > 0 ? "esm" : "commonjs",
|
|
143
|
-
exports: chunks[1].exports,
|
|
144
|
-
};
|
|
145
|
-
|
|
146
|
-
// TODO: instead of bundling the facade with the worker, we should just bundle the worker and expose it as a module.
|
|
147
|
-
// That way we'll be able to accurately tell if this is a service worker or not.
|
|
148
|
-
|
|
149
|
-
if (format === "modules" && bundle.type === "commonjs") {
|
|
150
|
-
console.error("⎔ Cannot use modules with a commonjs bundle.");
|
|
151
|
-
// TODO: a much better error message here, with what to do next
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
if (format === "service-worker" && bundle.type !== "esm") {
|
|
155
|
-
console.error("⎔ Cannot use service-worker with a esm bundle.");
|
|
156
|
-
// TODO: a much better error message here, with what to do next
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
const content = await readFile(chunks[0], { encoding: "utf-8" });
|
|
161
|
-
await destination.cleanup();
|
|
162
|
-
|
|
163
|
-
// if config.migrations
|
|
164
|
-
// get current migration tag
|
|
165
|
-
let migrations;
|
|
166
|
-
if ("migrations" in config) {
|
|
167
|
-
const scripts = await fetchResult<{ id: string; migration_tag: string }[]>(
|
|
168
|
-
`/accounts/${accountId}/workers/scripts`
|
|
169
|
-
);
|
|
170
|
-
const script = scripts.find(({ id }) => id === scriptName);
|
|
171
|
-
if (script?.migration_tag) {
|
|
172
|
-
// was already published once
|
|
173
|
-
const foundIndex = config.migrations.findIndex(
|
|
174
|
-
(migration) => migration.tag === script.migration_tag
|
|
175
|
-
);
|
|
176
|
-
if (foundIndex === -1) {
|
|
177
|
-
console.warn(
|
|
178
|
-
`The published script ${scriptName} has a migration tag "${script.migration_tag}, which was not found in wrangler.toml. You may have already deleted it. Applying all available migrations to the script...`
|
|
179
|
-
);
|
|
180
|
-
migrations = {
|
|
181
|
-
old_tag: script.migration_tag,
|
|
182
|
-
new_tag: config.migrations[config.migrations.length - 1].tag,
|
|
183
|
-
steps: config.migrations.map(({ tag: _tag, ...rest }) => rest),
|
|
184
|
-
};
|
|
185
|
-
} else {
|
|
186
|
-
migrations = {
|
|
187
|
-
old_tag: script.migration_tag,
|
|
188
|
-
new_tag: config.migrations[config.migrations.length - 1].tag,
|
|
189
|
-
steps: config.migrations
|
|
190
|
-
.slice(foundIndex + 1)
|
|
191
|
-
.map(({ tag: _tag, ...rest }) => rest),
|
|
192
|
-
};
|
|
193
|
-
}
|
|
194
|
-
} else {
|
|
195
|
-
migrations = {
|
|
196
|
-
new_tag: config.migrations[config.migrations.length - 1].tag,
|
|
197
|
-
steps: config.migrations.map(({ tag: _tag, ...rest }) => rest),
|
|
198
|
-
};
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
const assets =
|
|
203
|
-
props.public || props.site || props.config.site?.bucket // TODO: allow both
|
|
204
|
-
? await syncAssets(
|
|
205
|
-
accountId,
|
|
206
|
-
scriptName,
|
|
207
|
-
props.public || props.site || props.config.site?.bucket,
|
|
208
|
-
false
|
|
209
|
-
)
|
|
210
|
-
: { manifest: undefined, namespace: undefined };
|
|
211
|
-
|
|
212
|
-
const bindings: CfWorkerInit["bindings"] = {
|
|
213
|
-
kv_namespaces: envRootObj.kv_namespaces?.concat(
|
|
214
|
-
assets.namespace
|
|
215
|
-
? { binding: "__STATIC_CONTENT", id: assets.namespace }
|
|
216
|
-
: []
|
|
217
|
-
),
|
|
218
|
-
vars: envRootObj.vars,
|
|
219
|
-
durable_objects: envRootObj.durable_objects,
|
|
220
|
-
services: envRootObj.experimental_services,
|
|
221
|
-
};
|
|
222
|
-
|
|
223
|
-
const worker: CfWorkerInit = {
|
|
224
|
-
name: scriptName,
|
|
225
|
-
main: {
|
|
226
|
-
name: path.basename(chunks[0]),
|
|
227
|
-
content: content,
|
|
228
|
-
type: bundle.type === "esm" ? "esm" : "commonjs",
|
|
229
|
-
},
|
|
230
|
-
bindings,
|
|
231
|
-
...(migrations && { migrations }),
|
|
232
|
-
modules: moduleCollector.modules.concat(
|
|
233
|
-
assets.manifest
|
|
234
|
-
? {
|
|
235
|
-
name: "__STATIC_CONTENT_MANIFEST",
|
|
236
|
-
content: JSON.stringify(assets.manifest),
|
|
237
|
-
type: "text",
|
|
238
|
-
}
|
|
239
|
-
: []
|
|
240
|
-
),
|
|
241
|
-
compatibility_date: config.compatibility_date,
|
|
242
|
-
compatibility_flags: config.compatibility_flags,
|
|
243
|
-
usage_model: config.usage_model,
|
|
244
|
-
};
|
|
245
|
-
|
|
246
|
-
const start = Date.now();
|
|
247
|
-
function formatTime(duration: number) {
|
|
248
|
-
return `(${(duration / 1000).toFixed(2)} sec)`;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
const notProd = !props.legacyEnv && props.env;
|
|
252
|
-
const workerName = notProd ? `${scriptName} (${envName})` : scriptName;
|
|
253
|
-
const workerUrl = notProd
|
|
254
|
-
? `/accounts/${accountId}/workers/services/${scriptName}/environments/${envName}`
|
|
255
|
-
: `/accounts/${accountId}/workers/scripts/${scriptName}`;
|
|
256
|
-
|
|
257
|
-
// Upload the script so it has time to propagate.
|
|
258
|
-
const { available_on_subdomain } = await fetchResult(
|
|
259
|
-
`${workerUrl}?available_on_subdomain=true`,
|
|
260
|
-
{
|
|
261
|
-
method: "PUT",
|
|
262
|
-
// @ts-expect-error: TODO: fix this type error!
|
|
263
|
-
body: toFormData(worker),
|
|
264
|
-
}
|
|
265
|
-
);
|
|
266
|
-
|
|
267
|
-
const uploadMs = Date.now() - start;
|
|
268
|
-
console.log("Uploaded", workerName, formatTime(uploadMs));
|
|
269
|
-
const deployments: Promise<string[]>[] = [];
|
|
270
|
-
|
|
271
|
-
const userSubdomain = (
|
|
272
|
-
await fetchResult<{ subdomain: string }>(
|
|
273
|
-
`/accounts/${accountId}/workers/subdomain`
|
|
274
|
-
)
|
|
275
|
-
).subdomain;
|
|
276
|
-
|
|
277
|
-
const scriptURL =
|
|
278
|
-
props.legacyEnv || !props.env
|
|
279
|
-
? `${scriptName}.${userSubdomain}.workers.dev`
|
|
280
|
-
: `${envName}.${scriptName}.${userSubdomain}.workers.dev`;
|
|
281
|
-
|
|
282
|
-
// Enable the `workers.dev` subdomain.
|
|
283
|
-
// TODO: Make this configurable.
|
|
284
|
-
if (!available_on_subdomain) {
|
|
285
|
-
deployments.push(
|
|
286
|
-
fetchResult(`${workerUrl}/subdomain`, {
|
|
287
|
-
method: "POST",
|
|
288
|
-
body: JSON.stringify({ enabled: true }),
|
|
289
|
-
headers: {
|
|
290
|
-
"Content-Type": "application/json",
|
|
291
|
-
},
|
|
292
|
-
})
|
|
293
|
-
.then(() => [scriptURL])
|
|
294
|
-
// Add a delay when the subdomain is first created.
|
|
295
|
-
// This is to prevent an issue where a negative cache-hit
|
|
296
|
-
// causes the subdomain to be unavailable for 30 seconds.
|
|
297
|
-
// This is a temporary measure until we fix this on the edge.
|
|
298
|
-
.then(async (url) => {
|
|
299
|
-
await sleep(3000);
|
|
300
|
-
return url;
|
|
301
|
-
})
|
|
302
|
-
);
|
|
303
|
-
} else {
|
|
304
|
-
deployments.push(Promise.resolve([scriptURL]));
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
// Update routing table for the script.
|
|
308
|
-
if (routes && routes.length) {
|
|
309
|
-
deployments.push(
|
|
310
|
-
fetchResult(`${workerUrl}/routes`, {
|
|
311
|
-
// TODO: PATCH will not delete previous routes on this script,
|
|
312
|
-
// whereas PUT will. We need to decide on the default behaviour
|
|
313
|
-
// and how to configure it.
|
|
314
|
-
method: "PUT",
|
|
315
|
-
body: JSON.stringify(routes.map((pattern) => ({ pattern }))),
|
|
316
|
-
headers: {
|
|
317
|
-
"Content-Type": "application/json",
|
|
318
|
-
},
|
|
319
|
-
}).then(() => {
|
|
320
|
-
if (routes.length > 10) {
|
|
321
|
-
return routes
|
|
322
|
-
.slice(0, 9)
|
|
323
|
-
.map(String)
|
|
324
|
-
.concat([`...and ${routes.length - 10} more routes`]);
|
|
325
|
-
}
|
|
326
|
-
return routes.map(String);
|
|
327
|
-
})
|
|
328
|
-
);
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
// Configure any schedules for the script.
|
|
332
|
-
// TODO: rename this to `schedules`?
|
|
333
|
-
if (triggers && triggers.length) {
|
|
334
|
-
deployments.push(
|
|
335
|
-
fetchResult(`${workerUrl}/schedules`, {
|
|
336
|
-
// TODO: Unlike routes, this endpoint does not support PATCH.
|
|
337
|
-
// So technically, this will override any previous schedules.
|
|
338
|
-
// We should change the endpoint to support PATCH.
|
|
339
|
-
method: "PUT",
|
|
340
|
-
body: JSON.stringify(triggers.map((cron) => ({ cron }))),
|
|
341
|
-
headers: {
|
|
342
|
-
"Content-Type": "application/json",
|
|
343
|
-
},
|
|
344
|
-
}).then(() => triggers.map(String))
|
|
345
|
-
);
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
if (!deployments.length) {
|
|
349
|
-
return;
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
const targets = await Promise.all(deployments);
|
|
353
|
-
const deployMs = Date.now() - start - uploadMs;
|
|
354
|
-
console.log("Deployed", workerName, formatTime(deployMs));
|
|
355
|
-
for (const target of targets.flat()) {
|
|
356
|
-
console.log(" ", target);
|
|
357
|
-
}
|
|
358
|
-
}
|
package/src/tail.tsx
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import WebSocket from "ws";
|
|
2
|
-
import { version as packageVersion } from "../package.json";
|
|
3
|
-
import { fetchResult } from "./cfetch";
|
|
4
|
-
|
|
5
|
-
export type TailApiResponse = {
|
|
6
|
-
id: string;
|
|
7
|
-
url: string;
|
|
8
|
-
expires_at: Date;
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
function makeCreateTailUrl(accountId: string, workerName: string): string {
|
|
12
|
-
return `/accounts/${accountId}/workers/scripts/${workerName}/tails`;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
function makeDeleteTailUrl(
|
|
16
|
-
accountId: string,
|
|
17
|
-
workerName: string,
|
|
18
|
-
tailId: string
|
|
19
|
-
): string {
|
|
20
|
-
return `/accounts/${accountId}/workers/scripts/${workerName}/tails/${tailId}`;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/// Creates a tail, but doesn't connect to it.
|
|
24
|
-
async function createTailButDontConnect(
|
|
25
|
-
accountId: string,
|
|
26
|
-
workerName: string
|
|
27
|
-
): Promise<TailApiResponse> {
|
|
28
|
-
const createTailUrl = makeCreateTailUrl(accountId, workerName);
|
|
29
|
-
/// https://api.cloudflare.com/#worker-tail-logs-start-tail
|
|
30
|
-
return await fetchResult<TailApiResponse>(createTailUrl, {
|
|
31
|
-
method: "POST",
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export async function createTail(
|
|
36
|
-
accountId: string,
|
|
37
|
-
workerName: string,
|
|
38
|
-
_filters: Filters
|
|
39
|
-
): Promise<{
|
|
40
|
-
tail: WebSocket;
|
|
41
|
-
expiration: Date;
|
|
42
|
-
deleteTail: () => Promise<void>;
|
|
43
|
-
}> {
|
|
44
|
-
const {
|
|
45
|
-
id: tailId,
|
|
46
|
-
url: websocketUrl,
|
|
47
|
-
expires_at: expiration,
|
|
48
|
-
} = await createTailButDontConnect(accountId, workerName);
|
|
49
|
-
const deleteUrl = makeDeleteTailUrl(accountId, workerName, tailId);
|
|
50
|
-
|
|
51
|
-
// deletes the tail
|
|
52
|
-
async function deleteTail() {
|
|
53
|
-
await fetchResult(deleteUrl, { method: "DELETE" });
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const tail = new WebSocket(websocketUrl, "trace-v1", {
|
|
57
|
-
headers: {
|
|
58
|
-
"Sec-WebSocket-Protocol": "trace-v1", // needs to be `trace-v1` to be accepted
|
|
59
|
-
"User-Agent": `wrangler-js/${packageVersion}`,
|
|
60
|
-
},
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
// TODO: send filters as well
|
|
64
|
-
return { tail, expiration, deleteTail };
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
export type Filters = {
|
|
68
|
-
status?: "ok" | "error" | "canceled";
|
|
69
|
-
header?: string;
|
|
70
|
-
method?: string;
|
|
71
|
-
"sampling-rate"?: number;
|
|
72
|
-
search?: string;
|
|
73
|
-
};
|