Skip to content

Commit ecb4eeb

Browse files
emmaling27Convex, Inc.
authored and
Convex, Inc.
committed
Bundle node modules in the root in the components push path (#27692)
GitOrigin-RevId: d8f8c8a0c2014a4af944f161cbdbba904290727e
1 parent 7b2c118 commit ecb4eeb

File tree

4 files changed

+37
-9
lines changed

4 files changed

+37
-9
lines changed

npm-packages/convex/src/cli/lib/components.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ export async function runComponentsPush(ctx: Context, options: PushOptions) {
111111
ctx,
112112
rootComponent,
113113
[...components.values()],
114+
projectConfig.node.externalPackages,
114115
verbose,
115116
);
116117

@@ -155,7 +156,7 @@ export async function runComponentsPush(ctx: Context, options: PushOptions) {
155156
udfServerVersion,
156157
appDefinition,
157158
componentDefinitions,
158-
nodeDependencies: [],
159+
nodeDependencies: appImplementation.externalNodeDependencies,
159160
},
160161
verbose,
161162
);

npm-packages/convex/src/cli/lib/components/definition/bundle.ts

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
logError,
1313
logMessage,
1414
logWarning,
15+
showSpinner,
1516
} from "../../../../bundler/context.js";
1617
import esbuild, { BuildOptions, Metafile, OutputFile, Plugin } from "esbuild";
1718
import chalk from "chalk";
@@ -26,6 +27,7 @@ import {
2627
bundleSchema,
2728
entryPointsByEnvironment,
2829
} from "../../../../bundler/index.js";
30+
import { NodeDependency } from "../../deployApi/modules.js";
2931

3032
/**
3133
* An esbuild plugin to mark component definitions external or return a list of
@@ -438,11 +440,13 @@ export async function bundleImplementations(
438440
ctx: Context,
439441
rootComponentDirectory: ComponentDirectory,
440442
componentDirectories: ComponentDirectory[],
443+
nodeExternalPackages: string[],
441444
verbose: boolean = false,
442445
): Promise<{
443446
appImplementation: {
444447
schema: Bundle;
445448
functions: Bundle[];
449+
externalNodeDependencies: NodeDependency[];
446450
};
447451
componentImplementations: {
448452
schema: Bundle;
@@ -476,12 +480,39 @@ export async function bundleImplementations(
476480
logError(ctx, "external dependencies not supported");
477481
return await ctx.crash(1, "fatal");
478482
}
479-
480483
const functions = convexResult.modules;
481484
if (isRoot) {
485+
if (verbose) {
486+
showSpinner(ctx, "Bundling modules for Node.js runtime...");
487+
}
488+
const nodeResult: {
489+
modules: Bundle[];
490+
externalDependencies: Map<string, string>;
491+
bundledModuleNames: Set<string>;
492+
} = await bundle(
493+
ctx,
494+
resolvedPath,
495+
entryPoints.node,
496+
true,
497+
"node",
498+
path.join("_deps", "node"),
499+
nodeExternalPackages,
500+
);
501+
502+
const externalNodeDependencies: NodeDependency[] = [];
503+
for (const [
504+
moduleName,
505+
moduleVersion,
506+
] of nodeResult.externalDependencies) {
507+
externalNodeDependencies.push({
508+
name: moduleName,
509+
version: moduleVersion,
510+
});
511+
}
482512
appImplementation = {
483513
schema,
484-
functions,
514+
functions: functions.concat(nodeResult.modules),
515+
externalNodeDependencies,
485516
};
486517
} else {
487518
componentImplementations.push({

npm-packages/convex/src/cli/lib/config.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import { createHash } from "crypto";
3535
import { promisify } from "util";
3636
import zlib from "zlib";
3737
import { recursivelyDelete } from "./fsUtils.js";
38+
import { NodeDependency } from "./deployApi/modules.js";
3839
export { productionProvisionHost, provisionHost } from "./utils.js";
3940

4041
const brotli = promisify(zlib.brotliCompress);
@@ -64,11 +65,6 @@ export interface ProjectConfig {
6465
authInfo?: AuthInfo[];
6566
}
6667

67-
interface NodeDependency {
68-
name: string;
69-
version: string;
70-
}
71-
7268
export interface Config {
7369
projectConfig: ProjectConfig;
7470
modules: Bundle[];

npm-packages/convex/src/cli/lib/deployApi/modules.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export type ModuleConfig = z.infer<typeof moduleConfig>;
1616

1717
export const nodeDependency = z.object({
1818
name: z.string(),
19-
platform: z.string(),
19+
version: z.string(),
2020
});
2121
export type NodeDependency = z.infer<typeof nodeDependency>;
2222

0 commit comments

Comments
 (0)