wrangler 0.0.0-e33294b0 → 0.0.0-e351afcf
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/bin/wrangler.js +1 -1
- package/miniflare-dist/index.mjs +183 -92
- package/package.json +15 -10
- package/src/__tests__/api-devregistry.test.ts +121 -0
- package/src/__tests__/api.test.ts +27 -5
- package/src/__tests__/configuration.test.ts +294 -18
- package/src/__tests__/constellation.test.ts +371 -0
- package/src/__tests__/d1/execute.test.ts +3 -1
- package/src/__tests__/d1/migrate.test.ts +102 -0
- package/src/__tests__/delete.test.ts +6 -0
- package/src/__tests__/deployments.test.ts +335 -95
- package/src/__tests__/dev.test.tsx +87 -57
- package/src/__tests__/generate.test.ts +3 -4
- package/src/__tests__/guess-worker-format.test.ts +35 -0
- package/src/__tests__/helpers/mock-console.ts +6 -0
- package/src/__tests__/helpers/msw/handlers/deployments.ts +70 -3
- package/src/__tests__/helpers/msw/index.ts +4 -2
- package/src/__tests__/helpers/worker-scripts/parent-worker.js +4 -1
- package/src/__tests__/index.test.ts +14 -6
- package/src/__tests__/init.test.ts +136 -104
- package/src/__tests__/jest.setup.ts +4 -0
- package/src/__tests__/kv.test.ts +9 -9
- package/src/__tests__/logger.test.ts +68 -2
- package/src/__tests__/middleware.scheduled.test.ts +2 -2
- package/src/__tests__/middleware.test.ts +4 -3
- package/src/__tests__/mtls-certificates.test.ts +7 -3
- package/src/__tests__/pages/deployment-list.test.ts +2 -0
- package/src/__tests__/pages/functions-build.test.ts +159 -39
- package/src/__tests__/pages/project-list.test.ts +2 -0
- package/src/__tests__/pages/project-upload.test.ts +43 -24
- package/src/__tests__/pages/publish.test.ts +267 -148
- package/src/__tests__/publish.test.ts +1040 -339
- package/src/__tests__/pubsub.test.ts +3 -0
- package/src/__tests__/queues.test.ts +5 -2
- package/src/__tests__/test-old-node-version.js +3 -3
- package/src/__tests__/traverse-module-graph.test.ts +220 -0
- package/src/__tests__/tsconfig.tsbuildinfo +1 -1
- package/src/__tests__/type-generation.test.ts +1 -0
- package/src/__tests__/user.test.ts +2 -2
- package/src/__tests__/worker-namespace.test.ts +1 -0
- package/src/api/dev.ts +15 -22
- package/src/api/pages/create-worker-bundle-contents.ts +1 -0
- package/src/api/pages/publish.tsx +64 -61
- package/src/bundle.ts +51 -16
- package/src/config/environment.ts +36 -4
- package/src/config/index.ts +30 -2
- package/src/config/validation-helpers.ts +1 -1
- package/src/config/validation.ts +149 -5
- package/src/constellation/createProject.tsx +51 -0
- package/src/constellation/deleteProject.ts +51 -0
- package/src/constellation/deleteProjectModel.ts +68 -0
- package/src/constellation/index.ts +75 -0
- package/src/constellation/listCatalog.tsx +35 -0
- package/src/constellation/listModel.tsx +41 -0
- package/src/constellation/listProject.tsx +28 -0
- package/src/constellation/listRuntime.tsx +28 -0
- package/src/constellation/options.ts +17 -0
- package/src/constellation/types.ts +17 -0
- package/src/constellation/uploadModel.tsx +64 -0
- package/src/constellation/utils.ts +90 -0
- package/src/create-worker-preview.ts +19 -8
- package/src/create-worker-upload-form.ts +28 -3
- package/src/d1/backups.tsx +19 -15
- package/src/d1/create.tsx +45 -39
- package/src/d1/delete.ts +1 -1
- package/src/d1/execute.tsx +23 -20
- package/src/d1/list.tsx +14 -12
- package/src/d1/migrations/apply.tsx +36 -30
- package/src/d1/migrations/create.tsx +15 -12
- package/src/d1/migrations/helpers.ts +5 -8
- package/src/d1/migrations/list.tsx +10 -7
- package/src/deployments.ts +260 -8
- package/src/dev/dev.tsx +6 -4
- package/src/dev/local.tsx +65 -40
- package/src/dev/start-server.ts +57 -52
- package/src/dev/use-esbuild.ts +59 -52
- package/src/dev/validate-dev-props.ts +9 -0
- package/src/dev-registry.ts +2 -1
- package/src/dev.tsx +38 -18
- package/src/docs/helpers.ts +50 -0
- package/src/docs/index.ts +25 -68
- package/src/entry.ts +19 -9
- package/src/environment-variables/factory.ts +2 -1
- package/src/generate/index.ts +2 -2
- package/src/index.ts +87 -24
- package/src/init.ts +144 -134
- package/src/inspect.ts +16 -1
- package/src/kv/helpers.ts +7 -4
- package/src/logger.ts +23 -4
- package/src/metrics/send-event.ts +2 -1
- package/src/miniflare-cli/assets.ts +8 -7
- package/src/miniflare-cli/index.ts +3 -3
- package/src/miniflare-cli/tsconfig.tsbuildinfo +1 -1
- package/src/module-collection.ts +92 -26
- package/src/pages/build.ts +290 -100
- package/src/pages/buildFunctions.ts +20 -10
- package/src/pages/deployments.tsx +3 -5
- package/src/pages/dev.ts +44 -26
- package/src/pages/errors.ts +1 -0
- package/src/pages/functions/buildPlugin.ts +57 -34
- package/src/pages/functions/buildWorker.ts +91 -31
- package/src/pages/functions/tsconfig.tsbuildinfo +1 -1
- package/src/pages/projects.tsx +2 -5
- package/src/pages/publish.tsx +1 -10
- package/src/pages/upload.tsx +29 -9
- package/src/paths.ts +1 -1
- package/src/publish/index.ts +1 -1
- package/src/publish/publish.ts +29 -34
- package/src/queues/cli/commands/consumer/add.ts +6 -0
- package/src/queues/client.ts +1 -0
- package/src/r2/helpers.ts +1 -0
- package/src/secret/index.ts +2 -1
- package/src/sites.ts +164 -52
- package/src/traverse-module-graph.ts +53 -0
- package/src/type-generation.ts +1 -1
- package/src/user/user.ts +2 -1
- package/src/utils/render.ts +93 -0
- package/src/worker.ts +18 -1
- package/templates/d1-beta-facade.js +5 -2
- package/templates/gitignore +1 -0
- package/templates/middleware/middleware-miniflare3-json-error.ts +17 -5
- package/templates/pages-template-plugin.ts +7 -3
- package/templates/tsconfig.init.json +1 -2
- package/templates/tsconfig.tsbuildinfo +1 -1
- package/wrangler-dist/cli.d.ts +552 -16
- package/wrangler-dist/cli.js +32141 -24052
- package/src/__tests__/api-devregistry.test.js +0 -64
package/src/dev/local.tsx
CHANGED
|
@@ -47,7 +47,6 @@ import type {
|
|
|
47
47
|
} from "@miniflare/tre";
|
|
48
48
|
import type { MiniflareOptions } from "miniflare";
|
|
49
49
|
import type { ChildProcess } from "node:child_process";
|
|
50
|
-
import type { RequestInit } from "undici";
|
|
51
50
|
|
|
52
51
|
export interface LocalProps {
|
|
53
52
|
name: string | undefined;
|
|
@@ -71,7 +70,6 @@ export interface LocalProps {
|
|
|
71
70
|
localUpstream: string | undefined;
|
|
72
71
|
inspect: boolean;
|
|
73
72
|
onReady: ((ip: string, port: number) => void) | undefined;
|
|
74
|
-
logPrefix?: string;
|
|
75
73
|
enablePagesAssetsServiceBinding?: EnablePagesAssetsServiceBindingOptions;
|
|
76
74
|
testScheduled?: boolean;
|
|
77
75
|
experimentalLocal: boolean | undefined;
|
|
@@ -122,7 +120,6 @@ function useLocalWorker({
|
|
|
122
120
|
localUpstream,
|
|
123
121
|
inspect,
|
|
124
122
|
onReady,
|
|
125
|
-
logPrefix,
|
|
126
123
|
enablePagesAssetsServiceBinding,
|
|
127
124
|
experimentalLocal,
|
|
128
125
|
accountId,
|
|
@@ -217,13 +214,12 @@ function useLocalWorker({
|
|
|
217
214
|
dataBlobBindings,
|
|
218
215
|
crons,
|
|
219
216
|
upstream,
|
|
220
|
-
logPrefix,
|
|
221
217
|
workerDefinitions,
|
|
222
218
|
enablePagesAssetsServiceBinding,
|
|
223
219
|
});
|
|
224
220
|
|
|
225
221
|
if (experimentalLocal) {
|
|
226
|
-
const log = await buildMiniflare3Logger(
|
|
222
|
+
const log = await buildMiniflare3Logger();
|
|
227
223
|
const mf3Options = await transformMf2OptionsToMf3Options({
|
|
228
224
|
miniflare2Options: options,
|
|
229
225
|
format,
|
|
@@ -232,6 +228,7 @@ function useLocalWorker({
|
|
|
232
228
|
enablePagesAssetsServiceBinding,
|
|
233
229
|
kvNamespaces: bindings?.kv_namespaces,
|
|
234
230
|
r2Buckets: bindings?.r2_buckets,
|
|
231
|
+
d1Databases: bindings?.d1_databases,
|
|
235
232
|
authenticatedAccountId: accountId,
|
|
236
233
|
kvRemote: experimentalLocalRemoteKv,
|
|
237
234
|
inspectorPort: runtimeInspectorPort,
|
|
@@ -438,7 +435,6 @@ function useLocalWorker({
|
|
|
438
435
|
localProtocol,
|
|
439
436
|
localUpstream,
|
|
440
437
|
inspect,
|
|
441
|
-
logPrefix,
|
|
442
438
|
onReady,
|
|
443
439
|
enablePagesAssetsServiceBinding,
|
|
444
440
|
experimentalLocal,
|
|
@@ -577,7 +573,6 @@ interface SetupMiniflareOptionsProps {
|
|
|
577
573
|
dataBlobBindings: Record<string, string>;
|
|
578
574
|
crons: Config["triggers"]["crons"];
|
|
579
575
|
upstream: string | undefined;
|
|
580
|
-
logPrefix: string | undefined;
|
|
581
576
|
workerDefinitions: WorkerRegistry | undefined;
|
|
582
577
|
enablePagesAssetsServiceBinding?: EnablePagesAssetsServiceBindingOptions;
|
|
583
578
|
}
|
|
@@ -609,7 +604,6 @@ export function setupMiniflareOptions({
|
|
|
609
604
|
dataBlobBindings,
|
|
610
605
|
crons,
|
|
611
606
|
upstream,
|
|
612
|
-
logPrefix,
|
|
613
607
|
workerDefinitions,
|
|
614
608
|
enablePagesAssetsServiceBinding,
|
|
615
609
|
}: SetupMiniflareOptionsProps): {
|
|
@@ -701,6 +695,7 @@ export function setupMiniflareOptions({
|
|
|
701
695
|
durableObjectsPersist: true,
|
|
702
696
|
kvPersist: true,
|
|
703
697
|
r2Persist: true,
|
|
698
|
+
d1Persist: true,
|
|
704
699
|
}),
|
|
705
700
|
|
|
706
701
|
liveReload,
|
|
@@ -722,7 +717,6 @@ export function setupMiniflareOptions({
|
|
|
722
717
|
crons,
|
|
723
718
|
upstream,
|
|
724
719
|
logLevel: logger.loggerLevel,
|
|
725
|
-
logOptions: logPrefix ? { prefix: logPrefix } : undefined,
|
|
726
720
|
enablePagesAssetsServiceBinding,
|
|
727
721
|
};
|
|
728
722
|
// The path to the Miniflare CLI assumes that this file is being run from
|
|
@@ -777,6 +771,7 @@ export interface SetupMiniflare3Options {
|
|
|
777
771
|
// we need actual namespace IDs to connect to.
|
|
778
772
|
kvNamespaces: CfKvNamespace[] | undefined;
|
|
779
773
|
r2Buckets: CfR2Bucket[] | undefined;
|
|
774
|
+
d1Databases: CfD1Database[] | undefined;
|
|
780
775
|
|
|
781
776
|
// Account ID to use for authenticated Cloudflare fetch. If true, prompt
|
|
782
777
|
// user for ID if multiple available.
|
|
@@ -788,18 +783,26 @@ export interface SetupMiniflare3Options {
|
|
|
788
783
|
inspectorPort: number;
|
|
789
784
|
}
|
|
790
785
|
|
|
791
|
-
export async function buildMiniflare3Logger(
|
|
792
|
-
logPrefix?: string
|
|
793
|
-
): Promise<Miniflare3LogType> {
|
|
786
|
+
export async function buildMiniflare3Logger(): Promise<Miniflare3LogType> {
|
|
794
787
|
const { Log, NoOpLog, LogLevel } = await getMiniflare3();
|
|
795
788
|
|
|
796
789
|
let level = logger.loggerLevel.toUpperCase() as Uppercase<LoggerLevel>;
|
|
797
790
|
if (level === "LOG") level = "INFO";
|
|
798
791
|
const logLevel = LogLevel[level];
|
|
799
792
|
|
|
800
|
-
return logLevel === LogLevel.NONE
|
|
801
|
-
|
|
802
|
-
|
|
793
|
+
return logLevel === LogLevel.NONE ? new NoOpLog() : new Log(logLevel);
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
function transformMf2PersistToMf3(persist?: boolean | string) {
|
|
797
|
+
// Wrangler reuses Miniflare 3 instances between reloads but not Miniflare 2
|
|
798
|
+
// ones. We previously set `*Persist` options to `true` by default to
|
|
799
|
+
// persist data between reloads in the temporary script directory (Miniflare
|
|
800
|
+
// 2's working directory). However, with Miniflare 3, the working directory
|
|
801
|
+
// is the current working directory, so we want to set these to `false`
|
|
802
|
+
// and use Miniflare 3's native in-memory persistence.
|
|
803
|
+
//
|
|
804
|
+
// See https://github.com/cloudflare/workers-sdk/issues/2995.
|
|
805
|
+
return persist === true ? false : persist;
|
|
803
806
|
}
|
|
804
807
|
|
|
805
808
|
export async function transformMf2OptionsToMf3Options({
|
|
@@ -810,6 +813,7 @@ export async function transformMf2OptionsToMf3Options({
|
|
|
810
813
|
enablePagesAssetsServiceBinding,
|
|
811
814
|
kvNamespaces,
|
|
812
815
|
r2Buckets,
|
|
816
|
+
d1Databases,
|
|
813
817
|
authenticatedAccountId,
|
|
814
818
|
kvRemote,
|
|
815
819
|
inspectorPort,
|
|
@@ -817,19 +821,20 @@ export async function transformMf2OptionsToMf3Options({
|
|
|
817
821
|
// Build authenticated Cloudflare API fetch function if required
|
|
818
822
|
let cloudflareFetch: CloudflareFetch | undefined;
|
|
819
823
|
if (kvRemote && authenticatedAccountId !== undefined) {
|
|
824
|
+
const { Response: Miniflare3Response } = await getMiniflare3();
|
|
820
825
|
const preferredAccountId =
|
|
821
826
|
authenticatedAccountId === true ? undefined : authenticatedAccountId;
|
|
822
827
|
const accountId = await requireAuth({ account_id: preferredAccountId });
|
|
823
|
-
cloudflareFetch = (resource, searchParams, init) => {
|
|
828
|
+
cloudflareFetch = async (resource, searchParams, init) => {
|
|
824
829
|
resource = `/accounts/${accountId}/${resource}`;
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
return performApiFetch(resource, init as RequestInit, searchParams);
|
|
830
|
+
const response = await performApiFetch(resource, init, searchParams);
|
|
831
|
+
return new Miniflare3Response(response.body, response);
|
|
828
832
|
};
|
|
829
833
|
}
|
|
830
834
|
|
|
831
|
-
|
|
835
|
+
let options: Partial<Miniflare3Options> = {
|
|
832
836
|
...miniflare2Options,
|
|
837
|
+
|
|
833
838
|
// Miniflare 3 distinguishes between binding name and namespace/bucket IDs.
|
|
834
839
|
kvNamespaces: Object.fromEntries(
|
|
835
840
|
kvNamespaces?.map(({ binding, id }) => [binding, id]) ?? []
|
|
@@ -837,8 +842,23 @@ export async function transformMf2OptionsToMf3Options({
|
|
|
837
842
|
r2Buckets: Object.fromEntries(
|
|
838
843
|
r2Buckets?.map(({ binding, bucket_name }) => [binding, bucket_name]) ?? []
|
|
839
844
|
),
|
|
845
|
+
d1Databases: Object.fromEntries(
|
|
846
|
+
d1Databases?.map(({ binding, database_id, preview_database_id }) => [
|
|
847
|
+
binding,
|
|
848
|
+
preview_database_id ?? database_id,
|
|
849
|
+
]) ?? []
|
|
850
|
+
),
|
|
851
|
+
|
|
852
|
+
cachePersist: transformMf2PersistToMf3(miniflare2Options.cachePersist),
|
|
853
|
+
durableObjectsPersist: transformMf2PersistToMf3(
|
|
854
|
+
miniflare2Options.durableObjectsPersist
|
|
855
|
+
),
|
|
856
|
+
kvPersist: transformMf2PersistToMf3(miniflare2Options.kvPersist),
|
|
857
|
+
r2Persist: transformMf2PersistToMf3(miniflare2Options.r2Persist),
|
|
858
|
+
d1Persist: transformMf2PersistToMf3(miniflare2Options.d1Persist),
|
|
859
|
+
|
|
840
860
|
inspectorPort,
|
|
841
|
-
verbose:
|
|
861
|
+
verbose: logger.loggerLevel === "debug",
|
|
842
862
|
cloudflareFetch,
|
|
843
863
|
log,
|
|
844
864
|
};
|
|
@@ -853,7 +873,7 @@ export async function transformMf2OptionsToMf3Options({
|
|
|
853
873
|
// relies on the fact that `require` is untyped.
|
|
854
874
|
//
|
|
855
875
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
856
|
-
const generateASSETSBinding = require("../miniflare-cli/assets");
|
|
876
|
+
const generateASSETSBinding = require("../miniflare-cli/assets").default;
|
|
857
877
|
options.serviceBindings = {
|
|
858
878
|
...options.serviceBindings,
|
|
859
879
|
ASSETS: (await generateASSETSBinding({
|
|
@@ -876,22 +896,27 @@ export async function transformMf2OptionsToMf3Options({
|
|
|
876
896
|
const root = path.dirname(bundle.path);
|
|
877
897
|
|
|
878
898
|
assert.strictEqual(bundle.type, "esm");
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
899
|
+
options = {
|
|
900
|
+
// Creating a new options object ensures types check (Miniflare's
|
|
901
|
+
// options type requires source code to be specified)
|
|
902
|
+
...options,
|
|
903
|
+
// Required for source mapped paths to resolve correctly
|
|
904
|
+
modulesRoot: root,
|
|
905
|
+
modules: [
|
|
906
|
+
// Entrypoint
|
|
907
|
+
{
|
|
908
|
+
type: "ESModule",
|
|
909
|
+
path: bundle.path,
|
|
910
|
+
contents: await readFile(bundle.path, "utf-8"),
|
|
911
|
+
},
|
|
912
|
+
// Misc (WebAssembly, etc, ...)
|
|
913
|
+
...bundle.modules.map((module) => ({
|
|
914
|
+
type: ModuleTypeToRuleType[module.type ?? "esm"],
|
|
915
|
+
path: path.resolve(root, module.name),
|
|
916
|
+
contents: module.content,
|
|
917
|
+
})),
|
|
918
|
+
],
|
|
919
|
+
};
|
|
895
920
|
}
|
|
896
921
|
|
|
897
922
|
if (kvRemote) {
|
|
@@ -909,7 +934,7 @@ export async function transformMf2OptionsToMf3Options({
|
|
|
909
934
|
options.kvPersist = `remote:?cache=${encodeURIComponent(kvRemoteCache)}`;
|
|
910
935
|
}
|
|
911
936
|
|
|
912
|
-
return options;
|
|
937
|
+
return options as Miniflare3Options;
|
|
913
938
|
}
|
|
914
939
|
|
|
915
940
|
// Caching of the `npx-import`ed `@miniflare/tre` package
|
|
@@ -919,5 +944,5 @@ export async function getMiniflare3(): Promise<
|
|
|
919
944
|
// eslint-disable-next-line @typescript-eslint/consistent-type-imports
|
|
920
945
|
typeof import("@miniflare/tre")
|
|
921
946
|
> {
|
|
922
|
-
return (miniflare3Module ??= await npxImport("@miniflare/tre@3.0.0-next.
|
|
947
|
+
return (miniflare3Module ??= await npxImport("@miniflare/tre@3.0.0-next.13"));
|
|
923
948
|
}
|
package/src/dev/start-server.ts
CHANGED
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
import { runCustomBuild } from "../entry";
|
|
15
15
|
import { logger } from "../logger";
|
|
16
16
|
import { waitForPortToBeAvailable } from "../proxy";
|
|
17
|
+
import traverseModuleGraph from "../traverse-module-graph";
|
|
17
18
|
import {
|
|
18
19
|
setupBindings,
|
|
19
20
|
getMiniflare3,
|
|
@@ -91,6 +92,7 @@ export async function startDevServer(
|
|
|
91
92
|
entry: props.entry,
|
|
92
93
|
destination: directory.name,
|
|
93
94
|
jsxFactory: props.jsxFactory,
|
|
95
|
+
processEntrypoint: props.processEntrypoint,
|
|
94
96
|
rules: props.rules,
|
|
95
97
|
jsxFragment: props.jsxFragment,
|
|
96
98
|
serveAssetsFromWorker: Boolean(
|
|
@@ -98,7 +100,8 @@ export async function startDevServer(
|
|
|
98
100
|
),
|
|
99
101
|
tsconfig: props.tsconfig,
|
|
100
102
|
minify: props.minify,
|
|
101
|
-
|
|
103
|
+
legacyNodeCompat: props.legacyNodeCompat,
|
|
104
|
+
nodejsCompat: props.nodejsCompat,
|
|
102
105
|
define: props.define,
|
|
103
106
|
noBundle: props.noBundle,
|
|
104
107
|
assets: props.assetsConfig,
|
|
@@ -131,7 +134,6 @@ export async function startDevServer(
|
|
|
131
134
|
queueConsumers: props.queueConsumers,
|
|
132
135
|
localProtocol: props.localProtocol,
|
|
133
136
|
localUpstream: props.localUpstream,
|
|
134
|
-
logPrefix: props.logPrefix,
|
|
135
137
|
inspect: props.inspect,
|
|
136
138
|
onReady: props.onReady,
|
|
137
139
|
enablePagesAssetsServiceBinding: props.enablePagesAssetsServiceBinding,
|
|
@@ -204,13 +206,15 @@ async function runEsbuild({
|
|
|
204
206
|
destination,
|
|
205
207
|
jsxFactory,
|
|
206
208
|
jsxFragment,
|
|
209
|
+
processEntrypoint,
|
|
207
210
|
rules,
|
|
208
211
|
assets,
|
|
209
212
|
betaD1Shims,
|
|
210
213
|
serveAssetsFromWorker,
|
|
211
214
|
tsconfig,
|
|
212
215
|
minify,
|
|
213
|
-
|
|
216
|
+
legacyNodeCompat,
|
|
217
|
+
nodejsCompat,
|
|
214
218
|
define,
|
|
215
219
|
noBundle,
|
|
216
220
|
workerDefinitions,
|
|
@@ -225,6 +229,7 @@ async function runEsbuild({
|
|
|
225
229
|
destination: string | undefined;
|
|
226
230
|
jsxFactory: string | undefined;
|
|
227
231
|
jsxFragment: string | undefined;
|
|
232
|
+
processEntrypoint: boolean;
|
|
228
233
|
rules: Config["rules"];
|
|
229
234
|
assets: Config["assets"];
|
|
230
235
|
betaD1Shims?: string[];
|
|
@@ -233,7 +238,8 @@ async function runEsbuild({
|
|
|
233
238
|
serveAssetsFromWorker: boolean;
|
|
234
239
|
tsconfig: string | undefined;
|
|
235
240
|
minify: boolean | undefined;
|
|
236
|
-
|
|
241
|
+
legacyNodeCompat: boolean | undefined;
|
|
242
|
+
nodejsCompat: boolean | undefined;
|
|
237
243
|
noBundle: boolean;
|
|
238
244
|
workerDefinitions: WorkerRegistry;
|
|
239
245
|
firstPartyWorkerDevFacade: boolean | undefined;
|
|
@@ -244,55 +250,55 @@ async function runEsbuild({
|
|
|
244
250
|
}): Promise<EsbuildBundle | undefined> {
|
|
245
251
|
if (!destination) return;
|
|
246
252
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
doBindings,
|
|
286
|
-
});
|
|
253
|
+
let traverseModuleGraphResult:
|
|
254
|
+
| Awaited<ReturnType<typeof bundleWorker>>
|
|
255
|
+
| undefined;
|
|
256
|
+
let bundleResult: Awaited<ReturnType<typeof bundleWorker>> | undefined;
|
|
257
|
+
if (noBundle) {
|
|
258
|
+
traverseModuleGraphResult = await traverseModuleGraph(entry, rules);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
if (processEntrypoint || !noBundle) {
|
|
262
|
+
bundleResult = await bundleWorker(entry, destination, {
|
|
263
|
+
bundle: !noBundle,
|
|
264
|
+
disableModuleCollection: noBundle,
|
|
265
|
+
serveAssetsFromWorker,
|
|
266
|
+
jsxFactory,
|
|
267
|
+
jsxFragment,
|
|
268
|
+
rules,
|
|
269
|
+
tsconfig,
|
|
270
|
+
minify,
|
|
271
|
+
legacyNodeCompat,
|
|
272
|
+
nodejsCompat,
|
|
273
|
+
define,
|
|
274
|
+
checkFetch: true,
|
|
275
|
+
assets: assets && {
|
|
276
|
+
...assets,
|
|
277
|
+
// disable the cache in dev
|
|
278
|
+
bypassCache: true,
|
|
279
|
+
},
|
|
280
|
+
betaD1Shims,
|
|
281
|
+
workerDefinitions,
|
|
282
|
+
services,
|
|
283
|
+
firstPartyWorkerDevFacade,
|
|
284
|
+
targetConsumer: "dev", // We are starting a dev server
|
|
285
|
+
testScheduled,
|
|
286
|
+
local,
|
|
287
|
+
experimentalLocal,
|
|
288
|
+
doBindings,
|
|
289
|
+
});
|
|
290
|
+
}
|
|
287
291
|
|
|
288
292
|
return {
|
|
289
293
|
id: 0,
|
|
290
294
|
entry,
|
|
291
|
-
path: resolvedEntryPointPath,
|
|
292
|
-
type:
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
295
|
+
path: bundleResult?.resolvedEntryPointPath ?? entry.file,
|
|
296
|
+
type:
|
|
297
|
+
bundleResult?.bundleType ??
|
|
298
|
+
(entry.format === "modules" ? "esm" : "commonjs"),
|
|
299
|
+
modules: traverseModuleGraphResult?.modules ?? bundleResult?.modules ?? [],
|
|
300
|
+
dependencies: bundleResult?.dependencies ?? {},
|
|
301
|
+
sourceMapPath: bundleResult?.sourceMapPath,
|
|
296
302
|
};
|
|
297
303
|
}
|
|
298
304
|
|
|
@@ -318,7 +324,6 @@ export async function startLocalServer({
|
|
|
318
324
|
localUpstream,
|
|
319
325
|
inspect,
|
|
320
326
|
onReady,
|
|
321
|
-
logPrefix,
|
|
322
327
|
enablePagesAssetsServiceBinding,
|
|
323
328
|
experimentalLocal,
|
|
324
329
|
accountId,
|
|
@@ -398,13 +403,12 @@ export async function startLocalServer({
|
|
|
398
403
|
dataBlobBindings,
|
|
399
404
|
crons,
|
|
400
405
|
upstream,
|
|
401
|
-
logPrefix,
|
|
402
406
|
workerDefinitions,
|
|
403
407
|
enablePagesAssetsServiceBinding,
|
|
404
408
|
});
|
|
405
409
|
|
|
406
410
|
if (experimentalLocal) {
|
|
407
|
-
const log = await buildMiniflare3Logger(
|
|
411
|
+
const log = await buildMiniflare3Logger();
|
|
408
412
|
const mf3Options = await transformMf2OptionsToMf3Options({
|
|
409
413
|
miniflare2Options: options,
|
|
410
414
|
format,
|
|
@@ -412,6 +416,7 @@ export async function startLocalServer({
|
|
|
412
416
|
log,
|
|
413
417
|
kvNamespaces: bindings?.kv_namespaces,
|
|
414
418
|
r2Buckets: bindings?.r2_buckets,
|
|
419
|
+
d1Databases: bindings?.d1_databases,
|
|
415
420
|
authenticatedAccountId: accountId,
|
|
416
421
|
kvRemote: experimentalLocalRemoteKv,
|
|
417
422
|
inspectorPort,
|
package/src/dev/use-esbuild.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { useApp } from "ink";
|
|
|
4
4
|
import { useState, useEffect } from "react";
|
|
5
5
|
import { bundleWorker, rewriteNodeCompatBuildFailure } from "../bundle";
|
|
6
6
|
import { logBuildFailure, logger } from "../logger";
|
|
7
|
+
import traverseModuleGraph from "../traverse-module-graph";
|
|
7
8
|
import type { Config } from "../config";
|
|
8
9
|
import type { WorkerRegistry } from "../dev-registry";
|
|
9
10
|
import type { Entry } from "../entry";
|
|
@@ -25,12 +26,14 @@ export function useEsbuild({
|
|
|
25
26
|
destination,
|
|
26
27
|
jsxFactory,
|
|
27
28
|
jsxFragment,
|
|
29
|
+
processEntrypoint,
|
|
28
30
|
rules,
|
|
29
31
|
assets,
|
|
30
32
|
serveAssetsFromWorker,
|
|
31
33
|
tsconfig,
|
|
32
34
|
minify,
|
|
33
|
-
|
|
35
|
+
legacyNodeCompat,
|
|
36
|
+
nodejsCompat,
|
|
34
37
|
betaD1Shims,
|
|
35
38
|
define,
|
|
36
39
|
noBundle,
|
|
@@ -47,6 +50,7 @@ export function useEsbuild({
|
|
|
47
50
|
destination: string | undefined;
|
|
48
51
|
jsxFactory: string | undefined;
|
|
49
52
|
jsxFragment: string | undefined;
|
|
53
|
+
processEntrypoint: boolean;
|
|
50
54
|
rules: Config["rules"];
|
|
51
55
|
assets: Config["assets"];
|
|
52
56
|
define: Config["define"];
|
|
@@ -54,7 +58,8 @@ export function useEsbuild({
|
|
|
54
58
|
serveAssetsFromWorker: boolean;
|
|
55
59
|
tsconfig: string | undefined;
|
|
56
60
|
minify: boolean | undefined;
|
|
57
|
-
|
|
61
|
+
legacyNodeCompat: boolean | undefined;
|
|
62
|
+
nodejsCompat: boolean | undefined;
|
|
58
63
|
betaD1Shims?: string[];
|
|
59
64
|
noBundle: boolean;
|
|
60
65
|
workerDefinitions: WorkerRegistry;
|
|
@@ -85,7 +90,7 @@ export function useEsbuild({
|
|
|
85
90
|
const watchMode: WatchMode = {
|
|
86
91
|
async onRebuild(error) {
|
|
87
92
|
if (error !== null) {
|
|
88
|
-
if (!
|
|
93
|
+
if (!legacyNodeCompat) rewriteNodeCompatBuildFailure(error);
|
|
89
94
|
logBuildFailure(error);
|
|
90
95
|
logger.error("Watch build failed:", error.message);
|
|
91
96
|
} else {
|
|
@@ -97,51 +102,48 @@ export function useEsbuild({
|
|
|
97
102
|
async function build() {
|
|
98
103
|
if (!destination) return;
|
|
99
104
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
testScheduled,
|
|
140
|
-
experimentalLocal,
|
|
141
|
-
});
|
|
105
|
+
let traverseModuleGraphResult:
|
|
106
|
+
| Awaited<ReturnType<typeof bundleWorker>>
|
|
107
|
+
| undefined;
|
|
108
|
+
let bundleResult: Awaited<ReturnType<typeof bundleWorker>> | undefined;
|
|
109
|
+
if (noBundle) {
|
|
110
|
+
traverseModuleGraphResult = await traverseModuleGraph(entry, rules);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (processEntrypoint || !noBundle) {
|
|
114
|
+
bundleResult = await bundleWorker(entry, destination, {
|
|
115
|
+
bundle: !noBundle,
|
|
116
|
+
disableModuleCollection: noBundle,
|
|
117
|
+
serveAssetsFromWorker,
|
|
118
|
+
jsxFactory,
|
|
119
|
+
jsxFragment,
|
|
120
|
+
rules,
|
|
121
|
+
watch: watchMode,
|
|
122
|
+
tsconfig,
|
|
123
|
+
minify,
|
|
124
|
+
legacyNodeCompat,
|
|
125
|
+
nodejsCompat,
|
|
126
|
+
betaD1Shims,
|
|
127
|
+
doBindings: durableObjects.bindings,
|
|
128
|
+
define,
|
|
129
|
+
checkFetch: true,
|
|
130
|
+
assets: assets && {
|
|
131
|
+
...assets,
|
|
132
|
+
// disable the cache in dev
|
|
133
|
+
bypassCache: true,
|
|
134
|
+
},
|
|
135
|
+
workerDefinitions,
|
|
136
|
+
services,
|
|
137
|
+
firstPartyWorkerDevFacade,
|
|
138
|
+
local,
|
|
139
|
+
targetConsumer,
|
|
140
|
+
testScheduled,
|
|
141
|
+
experimentalLocal,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
142
144
|
|
|
143
145
|
// Capture the `stop()` method to use as the `useEffect()` destructor.
|
|
144
|
-
stopWatching = stop;
|
|
146
|
+
stopWatching = bundleResult?.stop;
|
|
145
147
|
|
|
146
148
|
// if "noBundle" is true, then we need to manually watch the entry point and
|
|
147
149
|
// trigger "builds" when it changes
|
|
@@ -159,11 +161,14 @@ export function useEsbuild({
|
|
|
159
161
|
setBundle({
|
|
160
162
|
id: 0,
|
|
161
163
|
entry,
|
|
162
|
-
path: resolvedEntryPointPath,
|
|
163
|
-
type:
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
164
|
+
path: bundleResult?.resolvedEntryPointPath ?? entry.file,
|
|
165
|
+
type:
|
|
166
|
+
bundleResult?.bundleType ??
|
|
167
|
+
(entry.format === "modules" ? "esm" : "commonjs"),
|
|
168
|
+
modules:
|
|
169
|
+
traverseModuleGraphResult?.modules ?? bundleResult?.modules ?? [],
|
|
170
|
+
dependencies: bundleResult?.dependencies ?? {},
|
|
171
|
+
sourceMapPath: bundleResult?.sourceMapPath,
|
|
167
172
|
});
|
|
168
173
|
}
|
|
169
174
|
|
|
@@ -183,12 +188,14 @@ export function useEsbuild({
|
|
|
183
188
|
jsxFactory,
|
|
184
189
|
jsxFragment,
|
|
185
190
|
serveAssetsFromWorker,
|
|
191
|
+
processEntrypoint,
|
|
186
192
|
rules,
|
|
187
193
|
tsconfig,
|
|
188
194
|
exit,
|
|
189
195
|
noBundle,
|
|
190
196
|
minify,
|
|
191
|
-
|
|
197
|
+
legacyNodeCompat,
|
|
198
|
+
nodejsCompat,
|
|
192
199
|
define,
|
|
193
200
|
assets,
|
|
194
201
|
services,
|
|
@@ -28,4 +28,13 @@ export function validateDevProps(props: DevProps) {
|
|
|
28
28
|
"You cannot configure [data_blobs] with an ES module worker. Instead, import the file directly in your code, and optionally configure `[rules]` in your wrangler.toml"
|
|
29
29
|
);
|
|
30
30
|
}
|
|
31
|
+
|
|
32
|
+
if (
|
|
33
|
+
props.compatibilityFlags?.includes("nodejs_compat") &&
|
|
34
|
+
props.legacyNodeCompat
|
|
35
|
+
) {
|
|
36
|
+
throw new Error(
|
|
37
|
+
"You cannot use the `nodejs_compat` compatibility flag in conjunction with the legacy `--node-compat` flag. If you want to use the new runtime Node.js compatibility features, please remove the `--node-compat` argument from your CLI command or your config file."
|
|
38
|
+
);
|
|
39
|
+
}
|
|
31
40
|
}
|
package/src/dev-registry.ts
CHANGED
|
@@ -13,7 +13,7 @@ import type { HttpTerminator } from "http-terminator";
|
|
|
13
13
|
const DEV_REGISTRY_PORT = "6284";
|
|
14
14
|
const DEV_REGISTRY_HOST = `http://localhost:${DEV_REGISTRY_PORT}`;
|
|
15
15
|
|
|
16
|
-
let server: Server;
|
|
16
|
+
let server: Server | null;
|
|
17
17
|
let terminator: HttpTerminator;
|
|
18
18
|
|
|
19
19
|
export type WorkerRegistry = Record<string, WorkerDefinition>;
|
|
@@ -102,6 +102,7 @@ export async function startWorkerRegistry() {
|
|
|
102
102
|
*/
|
|
103
103
|
export async function stopWorkerRegistry() {
|
|
104
104
|
await terminator?.terminate();
|
|
105
|
+
server = null;
|
|
105
106
|
}
|
|
106
107
|
|
|
107
108
|
/**
|