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
24 changes: 13 additions & 11 deletions docs/build-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -284,23 +284,25 @@ pnpm clean

Located in `packages/cli/.config/`:

| Config | Output | Description |
| -------------------------- | --------------- | ------------------ |
| `esbuild.cli.build.mjs` | `build/cli.js` | Main CLI bundle |
| `esbuild.index.config.mjs` | `dist/index.js` | Entry point loader |
| Config | Output | Description |
| -------------------- | --------------- | ------------------------------------------------ |
| `esbuild.cli.mjs` | `build/cli.js` | Main CLI bundle — bundles all source into one JS |
| `esbuild.index.mjs` | `dist/index.js` | Entry point loader — thin shim that loads cli.js |
| `esbuild.build.mjs` | (orchestrator) | Runs both cli and index builds in parallel |

### Build Variants

The unified esbuild config (`esbuild.config.mjs`) orchestrates all variants:
The orchestrator (`esbuild.build.mjs`) accepts an optional variant argument:

```bash
# Build all variants
node .config/esbuild.config.mjs all
# Build all variants (default)
node .config/esbuild.build.mjs

# Build specific variant
node .config/esbuild.config.mjs cli
node .config/esbuild.config.mjs index
node .config/esbuild.config.mjs inject
# Build only the CLI bundle
node .config/esbuild.build.mjs cli

# Build only the entry point loader
node .config/esbuild.build.mjs index
```

---
Expand Down
4 changes: 2 additions & 2 deletions packages/build-infra/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,7 @@ ensureOutputDir('/path/to/output/file.js')
### esbuild Configuration

```javascript
// .config/esbuild.cli.build.mjs
// .config/esbuild.cli.mjs
import { IMPORT_META_URL_BANNER } from 'build-infra/lib/esbuild-helpers'
import { unicodeTransformPlugin } from 'build-infra/lib/esbuild-plugin-unicode-transform'

Expand Down Expand Up @@ -413,7 +413,7 @@ Assets are cached per tag to avoid re-downloading across builds.

**Consumers:**

- `packages/cli/.config/esbuild.cli.build.mjs` - Main CLI bundle config
- `packages/cli/.config/esbuild.cli.mjs` - Main CLI bundle config
- `packages/cli/scripts/download-assets.mjs` - Unified asset downloader
- `packages/cli/scripts/sea-build-utils/builder.mjs` - SEA binary builder

Expand Down
58 changes: 58 additions & 0 deletions packages/cli/.config/esbuild.build.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
/**
* esbuild build orchestrator for Socket CLI.
* Builds all variants (CLI bundle + entry point) in parallel.
*
* Usage:
* node .config/esbuild.build.mjs # Build all variants
* node .config/esbuild.build.mjs cli # Build CLI bundle
* node .config/esbuild.build.mjs index # Build entry point
*/

import { fileURLToPath } from 'node:url'

import { getDefaultLogger } from '@socketsecurity/lib/logger'

import { runBuild } from '../scripts/esbuild-utils.mjs'
import cliConfig from './esbuild.cli.mjs'
import indexConfig from './esbuild.index.mjs'

const logger = getDefaultLogger()

export const CONFIGS = {
__proto__: null,
cli: cliConfig,
index: indexConfig,
}

async function main() {
const variant = process.argv[2] || 'all'

if (variant !== 'all' && !(variant in CONFIGS)) {
logger.error(`Unknown variant: ${variant}`)
logger.error(`Available variants: all, ${Object.keys(CONFIGS).join(', ')}`)
process.exitCode = 1
return
}

const targets =
variant === 'all'
? Object.entries(CONFIGS)
: [[variant, CONFIGS[variant]]]

const results = await Promise.allSettled(
targets.map(({ 0: name, 1: config }) => runBuild(config, name)),
)
const failed = results.filter(r => r.status === 'rejected')
if (failed.length > 0) {
process.exitCode = 1
}
}

if (fileURLToPath(import.meta.url) === process.argv[1]) {
main().catch(error => {
logger.error('Build failed:', error)
process.exitCode = 1
})
}

export default CONFIGS
Loading