| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- /**
- * Config-dump entry for `dsh --profile <name> --dump-config`: compose the
- * profile's patch layers through the include plugin's patch algorithm without
- * booting or evaluating `!!js`, with one source layer per bundle, the
- * profile's own patch file, and each `--patch` overlay.
- * @module @deepseek-ai/dsh/dump-config
- */
- import { existsSync } from 'node:fs'
- import { join, resolve } from 'node:path'
- import {
- loadOptionalPatches,
- loadOverlayPatches,
- renderConfigDump,
- type ConfigDumpLayer,
- } from '@deepseek-ai/dsh-app-boot'
- import { homePatchPath, prepareProfile, PROFILE_ROOT_FILENAME } from './profile-boot.ts'
- import { resolveWindowsShellLayer } from './windows-shell.ts'
- const NAME = 'dsh'
- /* v8 ignore start -- built-bin acceptance drives this boot-free dispatch */
- /**
- * Print a profile composition with comments naming each source file and patch layer.
- * @param profile - the profile name.
- * @param defaultOnly - omit the profile's user layer and `--patch` overlays
- * (the recovery diagnostic for a broken `cordis.patch.yml`, which is then
- * never parsed).
- * @param patches - `--patch` overlay paths, in argv order.
- */
- export function runDumpConfig(profile: string, defaultOnly: boolean, patches: readonly string[]): void {
- const loaded = prepareProfile(profile, !defaultOnly)
- const layers: ConfigDumpLayer[] = loaded.layers.map(layer => ({
- label: layer.packageName,
- patches: layer.patches,
- }))
- // The win32 shell platform layer rides between bundles and user layers,
- // exactly where the boot applies it.
- const windowsShellLayer = resolveWindowsShellLayer(process.platform, loaded.layers, NAME)
- if (windowsShellLayer !== undefined) {
- layers.push({ label: windowsShellLayer.label, patches: windowsShellLayer.patches })
- }
- if (!defaultOnly) {
- if (existsSync(loaded.patchPath)) {
- layers.push({ label: loaded.patchPath, patches: loaded.patches })
- }
- const homePatchFile = homePatchPath()
- const homePatches = loadOptionalPatches(NAME, homePatchFile)
- if (homePatches !== undefined) {
- layers.push({ label: homePatchFile, patches: homePatches })
- }
- for (const file of patches) {
- const absolute = resolve(file)
- layers.push({ label: absolute, patches: loadOverlayPatches(NAME, absolute) })
- }
- }
- // The dump anchors on the same empty root file the boot includes.
- process.stdout.write(renderConfigDump(NAME, join(loaded.dir, PROFILE_ROOT_FILENAME), layers))
- }
- /* v8 ignore stop */
|