Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 15 additions & 21 deletions packages/cli/.config/esbuild.cli.mts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import { IMPORT_META_URL_BANNER } from 'build-infra/lib/esbuild-helpers'
import { unicodeTransformPlugin } from 'build-infra/lib/esbuild-plugin-unicode-transform'

import {
createDefineEntries,
createBaseConfig,
envVarReplacementPlugin,
getInlinedEnvVars,
runBuild,
Expand Down Expand Up @@ -58,33 +58,27 @@ function resolveSocketLibExternal(socketLibPath: string, packageName: string) {
}


const baseConfig = createBaseConfig(inlinedEnvVars)

const config: BuildOptions = {
...baseConfig,
banner: {
js: `#!/usr/bin/env node\n"use strict";\n${IMPORT_META_URL_BANNER.js}`,
},
define: {
...baseConfig.define,
'import.meta.url': '__importMetaUrl',
},
entryPoints: [path.join(rootPath, 'src/cli-dispatch.mts')],
bundle: true,
outfile: path.join(rootPath, 'build/cli.js'),
platform: 'node',
target: 'node18',
format: 'cjs',
keepNames: true,
// .cs files used by node-gyp on Windows.
loader: { '.cs': 'empty' },
logOverride: {
'commonjs-variable-in-esm': 'silent',
'require-resolve-not-external': 'silent',
},
// .cs files used by node-gyp on Windows.
loader: { '.cs': 'empty' },
sourcemap: false,
minify: false,
keepNames: true,
write: false,
metafile: true,
define: {
'process.env.NODE_ENV': '"production"',
'import.meta.url': '__importMetaUrl',
...createDefineEntries(inlinedEnvVars),
},
banner: {
js: `#!/usr/bin/env node\n"use strict";\n${IMPORT_META_URL_BANNER.js}`,
},

outfile: path.join(rootPath, 'build/cli.js'),
plugins: [
unicodeTransformPlugin(),
// Environment variable replacement must run AFTER unicode transform.
Expand Down
62 changes: 38 additions & 24 deletions packages/cli/scripts/esbuild-utils.mts
Original file line number Diff line number Diff line change
Expand Up @@ -15,42 +15,56 @@ import { EnvironmentVariables } from './environment-variables.mts'

const logger = getDefaultLogger()

/**
* Settings every Socket CLI esbuild config shares.
*
* Kept in one place so the target Node version, module format, minify
* default, etc. can't drift between the index loader and the main CLI
* bundle. Callers spread this and add variant-specific fields
* (entry points, output, banner, plugins, extra defines).
*/
export function createBaseConfig(
inlinedEnvVars: Record<string, string>,
): BuildOptions {
return {
bundle: true,
define: {
'process.env.NODE_ENV': '"production"',
...createDefineEntries(inlinedEnvVars),
},
format: 'cjs',
minify: false,
platform: 'node',
// We don't ship minified bundles and we don't ship sourcemaps for prod.
sourcemap: false,
target: 'node25',
// Plugin writes are handled by `runBuild` so every caller's env-var
// replacement can mutate output buffers before they hit disk.
write: false,
}
}
Comment thread
jdalton marked this conversation as resolved.

/**
* Create a standard index loader config.
* @param {Object} options - Configuration options
* @param {string} options.entryPoint - Path to entry point file
* @param {string} options.outfile - Path to output file
* @returns {Object} esbuild configuration object
*/
export function createIndexConfig({ entryPoint, outfile }: { entryPoint: string; outfile: string }) {
// Get inlined environment variables for build-time constant replacement.
export function createIndexConfig({
entryPoint,
outfile,
}: {
entryPoint: string
outfile: string
}): BuildOptions {
const inlinedEnvVars = getInlinedEnvVars()

const config: BuildOptions = {
return {
...createBaseConfig(inlinedEnvVars),
banner: {
js: '#!/usr/bin/env node',
},
bundle: true,
entryPoints: [entryPoint],
format: 'cjs',
minify: false,
outfile,
platform: 'node',
// Source maps off for entry point production build.
sourcemap: false,
target: 'node18',
// Define environment variables for inlining.
define: {
'process.env.NODE_ENV': '"production"',
...createDefineEntries(inlinedEnvVars),
},
// Add plugin for post-bundle env var replacement.
plugins: [envVarReplacementPlugin(inlinedEnvVars)],
// Plugin needs to transform output.
write: false,
}

return config
}

/**
Expand Down