Skip to content

Commit 70d39ba

Browse files
committed
refactor(dlx): extract spawn-trufflehog.mts from spawn.mts
First split per the new fleet-canonical File size rule. spawn.mts is 1853 lines; the trufflehog spawn trio is a self-contained 80-line unit, making it the safest first extraction.
1 parent 993b24b commit 70d39ba

2 files changed

Lines changed: 86 additions & 60 deletions

File tree

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
/**
2+
* Spawn TruffleHog for secret-scanning runs.
3+
*
4+
* - spawnTrufflehogDlx: download from GitHub releases, then exec.
5+
* - spawnTrufflehogVfs: extract from SEA bundle, then exec.
6+
* - spawnTrufflehog: auto-detect SEA vs npm-CLI mode and dispatch.
7+
*/
8+
9+
import { spawn } from '@socketsecurity/lib/spawn'
10+
11+
import {
12+
downloadGitHubReleaseBinary,
13+
spawnToolVfs,
14+
} from './spawn.mts'
15+
import { resolveTrufflehog } from './resolve-binary.mjs'
16+
import { areExternalToolsAvailable } from './vfs-extract.mjs'
17+
import { isSeaBinary } from '../sea/detect.mts'
18+
19+
import type { DlxOptions, DlxSpawnResult } from './spawn.mts'
20+
import type { StdioOptions } from 'node:child_process'
21+
import type { SpawnExtra } from '@socketsecurity/lib/spawn'
22+
23+
export async function spawnTrufflehogDlx(
24+
args: string[] | readonly string[],
25+
options?: DlxOptions | undefined,
26+
spawnExtra?: SpawnExtra | undefined,
27+
): Promise<DlxSpawnResult> {
28+
const resolution = resolveTrufflehog()
29+
30+
if (resolution.type !== 'github-release') {
31+
throw new Error(
32+
`internal: resolveTrufflehog returned resolution.type="${resolution.type}" (expected "github-release"); this is a resolver contract bug — re-run with --debug and report the output`,
33+
)
34+
}
35+
36+
const { env: spawnEnv, ...dlxOptions } = {
37+
__proto__: null,
38+
...options,
39+
} as DlxOptions
40+
41+
const binaryPath = await downloadGitHubReleaseBinary(resolution.details)
42+
43+
const spawnPromise = spawn(binaryPath, args, {
44+
...dlxOptions,
45+
env: {
46+
...process.env,
47+
...spawnEnv,
48+
},
49+
stdio: (spawnExtra?.['stdio'] as StdioOptions | undefined) ?? 'inherit',
50+
})
51+
52+
return {
53+
spawnPromise,
54+
}
55+
}
56+
57+
/**
58+
* Spawn TruffleHog from VFS (SEA mode).
59+
*/
60+
export async function spawnTrufflehogVfs(
61+
args: string[] | readonly string[],
62+
options?: DlxOptions | undefined,
63+
spawnExtra?: SpawnExtra | undefined,
64+
): Promise<DlxSpawnResult> {
65+
return await spawnToolVfs('trufflehog', args, options, spawnExtra)
66+
}
67+
68+
/**
69+
* Spawn TruffleHog.
70+
* Auto-detects SEA mode and uses appropriate spawn method.
71+
*/
72+
export async function spawnTrufflehog(
73+
args: string[] | readonly string[],
74+
options?: DlxOptions | undefined,
75+
spawnExtra?: SpawnExtra | undefined,
76+
): Promise<DlxSpawnResult> {
77+
if (isSeaBinary() && areExternalToolsAvailable()) {
78+
return await spawnTrufflehogVfs(args, options, spawnExtra)
79+
}
80+
return await spawnTrufflehogDlx(args, options, spawnExtra)
81+
}

packages/cli/src/utils/dlx/spawn.mts

Lines changed: 5 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ import {
3939
resolveSfw,
4040
resolveSocketPatch,
4141
resolveTrivy,
42-
resolveTrufflehog,
4342
} from './resolve-binary.mjs'
4443

4544
import type { GitHubReleaseSpec } from './resolve-binary.mjs'
@@ -1728,65 +1727,11 @@ export async function spawnTrivy(
17281727
* Spawn TruffleHog via GitHub download (npm CLI mode).
17291728
* Downloads from GitHub releases (trufflesecurity/trufflehog).
17301729
*/
1731-
export async function spawnTrufflehogDlx(
1732-
args: string[] | readonly string[],
1733-
options?: DlxOptions | undefined,
1734-
spawnExtra?: SpawnExtra | undefined,
1735-
): Promise<DlxSpawnResult> {
1736-
const resolution = resolveTrufflehog()
1737-
1738-
if (resolution.type !== 'github-release') {
1739-
throw new Error(
1740-
`internal: resolveTrufflehog returned resolution.type="${resolution.type}" (expected "github-release"); this is a resolver contract bug — re-run with --debug and report the output`,
1741-
)
1742-
}
1743-
1744-
const { env: spawnEnv, ...dlxOptions } = {
1745-
__proto__: null,
1746-
...options,
1747-
} as DlxOptions
1748-
1749-
const binaryPath = await downloadGitHubReleaseBinary(resolution.details)
1750-
1751-
const spawnPromise = spawn(binaryPath, args, {
1752-
...dlxOptions,
1753-
env: {
1754-
...process.env,
1755-
...spawnEnv,
1756-
},
1757-
stdio: (spawnExtra?.['stdio'] as StdioOptions | undefined) ?? 'inherit',
1758-
})
1759-
1760-
return {
1761-
spawnPromise,
1762-
}
1763-
}
1764-
1765-
/**
1766-
* Spawn TruffleHog from VFS (SEA mode).
1767-
*/
1768-
export async function spawnTrufflehogVfs(
1769-
args: string[] | readonly string[],
1770-
options?: DlxOptions | undefined,
1771-
spawnExtra?: SpawnExtra | undefined,
1772-
): Promise<DlxSpawnResult> {
1773-
return await spawnToolVfs('trufflehog', args, options, spawnExtra)
1774-
}
1775-
1776-
/**
1777-
* Spawn TruffleHog.
1778-
* Auto-detects SEA mode and uses appropriate spawn method.
1779-
*/
1780-
export async function spawnTrufflehog(
1781-
args: string[] | readonly string[],
1782-
options?: DlxOptions | undefined,
1783-
spawnExtra?: SpawnExtra | undefined,
1784-
): Promise<DlxSpawnResult> {
1785-
if (isSeaBinary() && areExternalToolsAvailable()) {
1786-
return await spawnTrufflehogVfs(args, options, spawnExtra)
1787-
}
1788-
return await spawnTrufflehogDlx(args, options, spawnExtra)
1789-
}
1730+
export {
1731+
spawnTrufflehog,
1732+
spawnTrufflehogDlx,
1733+
spawnTrufflehogVfs,
1734+
} from './spawn-trufflehog.mts'
17901735

17911736
/**
17921737
* Spawn OpenGrep via GitHub download (npm CLI mode).

0 commit comments

Comments
 (0)