@vltpkg/cli-sdk 0.0.0-11 → 0.0.0-13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/commands/config.d.ts.map +1 -1
- package/dist/esm/commands/config.js +41 -1
- package/dist/esm/commands/config.js.map +1 -1
- package/dist/esm/commands/install/reporter.js +1 -1
- package/dist/esm/commands/install/reporter.js.map +1 -1
- package/dist/esm/commands/list.d.ts.map +1 -1
- package/dist/esm/commands/list.js +6 -1
- package/dist/esm/commands/list.js.map +1 -1
- package/dist/esm/commands/query.d.ts.map +1 -1
- package/dist/esm/commands/query.js +8 -2
- package/dist/esm/commands/query.js.map +1 -1
- package/dist/esm/config/definition.d.ts +9 -1
- package/dist/esm/config/definition.d.ts.map +1 -1
- package/dist/esm/config/definition.js +39 -5
- package/dist/esm/config/definition.js.map +1 -1
- package/dist/esm/config/index.d.ts +95 -7
- package/dist/esm/config/index.d.ts.map +1 -1
- package/dist/esm/config/index.js +53 -49
- package/dist/esm/config/index.js.map +1 -1
- package/dist/esm/config/merge.d.ts +3 -1
- package/dist/esm/config/merge.d.ts.map +1 -1
- package/dist/esm/config/merge.js +11 -6
- package/dist/esm/config/merge.js.map +1 -1
- package/dist/esm/exec-command.d.ts.map +1 -1
- package/dist/esm/exec-command.js +2 -1
- package/dist/esm/exec-command.js.map +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +37 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/output.d.ts.map +1 -1
- package/dist/esm/output.js +1 -6
- package/dist/esm/output.js.map +1 -1
- package/dist/esm/print-err.d.ts +8 -1
- package/dist/esm/print-err.d.ts.map +1 -1
- package/dist/esm/print-err.js +74 -54
- package/dist/esm/print-err.js.map +1 -1
- package/package.json +21 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec-command.js","sourceRoot":"","sources":["../../src/exec-command.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * impl for `vlt run`, `vlt run-exec`, `vlt exec-local`, `vlt exec`\n * @module\n */\n\nimport { error, isErrorWithCause } from '@vltpkg/error-cause'\nimport type {\n exec,\n execFG,\n ExecOptions,\n run,\n runExec,\n runExecFG,\n RunExecOptions,\n runFG,\n RunFGResult,\n RunOptions,\n RunResult,\n} from '@vltpkg/run'\nimport { isRunResult } from '@vltpkg/run'\nimport type { Workspace } from '@vltpkg/workspaces'\nimport { Monorepo } from '@vltpkg/workspaces'\nimport { ansiToAnsi } from 'ansi-to-pre'\nimport type { LoadedConfig } from './config/index.ts'\nimport { stderr, stdout, styleTextStdout } from './output.ts'\nimport type { Views } from './view.ts'\n\nexport type RunnerBG = typeof exec | typeof run | typeof runExec\nexport type RunnerFG = typeof execFG | typeof runExecFG | typeof runFG\nexport type RunnerOptions = ExecOptions & RunExecOptions & RunOptions\nexport type MultiRunResult = Record<string, RunResult>\nexport type ScriptSet = Record<string, string>\nexport type MultiScriptSet = Record<string, ScriptSet>\nexport type ExecResult =\n | RunFGResult\n | MultiRunResult\n | ScriptSet\n | MultiScriptSet\n\nconst isScriptSet = (o: unknown): o is ScriptSet => {\n if (!o || typeof o !== 'object') return false\n for (const v of Object.values(o)) {\n if (typeof v !== 'string') return false\n }\n return true\n}\n\nconst isMultiScriptSet = (\n o: ExecResult,\n): o is Record<string, ScriptSet> => {\n for (const v of Object.values(o)) {\n if (!isScriptSet(v)) return false\n }\n return true\n}\n\nconst isSingleSuccess = (\n o: RunResult,\n): o is RunResult & { status: 0; signal: null } =>\n o.signal === null && o.status === 0\n\nconst setExitCode = (result: RunResult) => {\n /* c8 ignore next */\n process.exitCode = process.exitCode || (result.status ?? 1)\n}\n\nexport const views = {\n // run results for single or multiple will be printed along the way.\n human: result => {\n if (isScriptSet(result)) stdout('Scripts available:', result)\n else if (isMultiScriptSet(result)) {\n stdout('Scripts available:')\n for (const [wsPath, scripts] of Object.entries(result)) {\n stdout(wsPath, scripts)\n }\n }\n },\n json: result =>\n isRunResult(result) && isSingleSuccess(result) ?\n undefined\n : result,\n} as const satisfies Views<ExecResult>\n\nexport class ExecCommand<B extends RunnerBG, F extends RunnerFG> {\n bg: B\n fg: F\n arg0?: string\n args: string[]\n monorepo?: Monorepo\n /** how many places are we doing things in? */\n spaces: number\n conf: LoadedConfig\n projectRoot: string\n view: 'human' | 'json' | 'inspect'\n\n constructor(conf: LoadedConfig, bg: B, fg: F) {\n this.conf = conf\n this.bg = bg\n this.fg = fg\n this.view =\n conf.values.view === 'json' ? 'json'\n : conf.values.view === 'inspect' ? 'inspect'\n : 'human'\n const {\n projectRoot,\n positionals: [arg0, ...args],\n } = conf\n this.arg0 = arg0\n this.args = args\n\n const paths = conf.get('workspace')\n const groups = conf.get('workspace-group')\n const recursive = conf.get('recursive')\n this.monorepo =\n paths?.length || groups?.length || recursive ?\n Monorepo.load(projectRoot, { load: { paths, groups } })\n : undefined\n this.spaces = this.monorepo?.size ?? 1\n this.projectRoot = projectRoot\n }\n\n hasMonorepo(): this is this & { monorepo: Monorepo } {\n return !!this.monorepo\n }\n\n hasArg0(): this is this & { arg0: string } {\n return !!this.arg0\n }\n\n async run(): Promise<ExecResult> {\n if (this.spaces === 1) {\n const arg = this.fgArg()\n if (!arg) return this.noArgsSingle()\n const result = await this.fg(arg)\n if (isRunResult(result)) {\n setExitCode(result)\n }\n return result\n }\n if (!this.hasMonorepo() || this.spaces === 0) {\n throw error('no matching workspaces found', {\n /* c8 ignore next - already guarded */\n validOptions: [...(this.monorepo?.load().paths() ?? [])],\n })\n }\n\n if (!this.hasArg0()) {\n return this.noArgsMulti()\n }\n\n // run across workspaces\n let failed = false\n const resultMap = await this.monorepo.run(async ws => {\n const result = await this.bg(this.bgArg(ws)).catch(\n (er: unknown) => {\n if (isErrorWithCause(er) && isRunResult(er.cause)) {\n this.printResult(ws, er.cause)\n }\n failed = true\n throw er\n },\n )\n if (!failed) this.printResult(ws, result)\n return result\n })\n\n const results: Record<string, RunResult> = {}\n for (const [ws, result] of resultMap) {\n if (result.status === 0 && result.signal === null) {\n result.stdout = ''\n result.stderr = ''\n }\n results[ws.path] = result\n }\n return results\n }\n\n printResult(ws: Workspace, result: RunResult) {\n // non-human results just get printed at the end\n if (this.view !== 'human') return\n\n if (result.status === 0 && result.signal === null) {\n stdout(ws.path, 'ok')\n } else {\n stdout(\n styleTextStdout(\n ['bgWhiteBright', 'black', 'bold'],\n ws.path + ' failure',\n ),\n {\n status: result.status,\n signal: result.signal,\n },\n )\n /* c8 ignore start */\n if (result.stderr) stderr(ansiToAnsi(result.stderr))\n if (result.stdout) stdout(ansiToAnsi(result.stdout))\n /* c8 ignore stop */\n setExitCode(result)\n }\n }\n\n /* c8 ignore start - env specific */\n interactiveShell(): string {\n return (\n process.env.SHELL ??\n this.conf.get('script-shell') ??\n (process.platform === 'win32' ? 'cmd.exe' : '/bin/sh')\n )\n }\n /* c8 ignore stop */\n\n // overridden by 'vlt run' which returns undefined\n defaultArg0(): string | undefined {\n return this.interactiveShell()\n }\n\n fgArg(): RunnerOptions | undefined {\n const ws = this.monorepo?.values().next().value\n const cwd = ws?.fullpath ?? this.projectRoot\n const arg0 = this.arg0 ?? this.defaultArg0()\n\n // return undefined so noArgsSingle will be called instead\n if (typeof arg0 !== 'string') return\n\n return {\n cwd,\n /* c8 ignore next - already guarded */\n arg0,\n args: this.args,\n projectRoot: this.projectRoot,\n packageJson: this.monorepo?.packageJson,\n 'script-shell':\n this.arg0 ? this.conf.get('script-shell') : false,\n }\n }\n\n bgArg(this: this & { arg0: string }, ws: Workspace): RunnerOptions {\n return {\n cwd: ws.fullpath,\n acceptFail: !this.conf.get('bail'),\n ignoreMissing: true,\n arg0: this.arg0,\n args: this.args,\n projectRoot: this.projectRoot,\n packageJson: this.monorepo?.packageJson,\n 'script-shell': this.conf.get('script-shell'),\n }\n }\n\n /* c8 ignore start - not used, only here to override */\n noArgsSingle(): ScriptSet {\n throw error('Failed to determine interactive shell to spawn')\n }\n /* c8 ignore stop - not used, only here to override */\n\n noArgsMulti(this: this & { monorepo: Monorepo }): MultiScriptSet {\n throw error(\n 'Cannot spawn interactive shells in multiple workspaces',\n )\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"exec-command.js","sourceRoot":"","sources":["../../src/exec-command.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * impl for `vlt run`, `vlt run-exec`, `vlt exec-local`, `vlt exec`\n * @module\n */\n\nimport { error } from '@vltpkg/error-cause'\nimport { isErrorWithCause } from '@vltpkg/types'\nimport type {\n exec,\n execFG,\n ExecOptions,\n run,\n runExec,\n runExecFG,\n RunExecOptions,\n runFG,\n RunFGResult,\n RunOptions,\n RunResult,\n} from '@vltpkg/run'\nimport { isRunResult } from '@vltpkg/run'\nimport type { Workspace } from '@vltpkg/workspaces'\nimport { Monorepo } from '@vltpkg/workspaces'\nimport { ansiToAnsi } from 'ansi-to-pre'\nimport type { LoadedConfig } from './config/index.ts'\nimport { stderr, stdout, styleTextStdout } from './output.ts'\nimport type { Views } from './view.ts'\n\nexport type RunnerBG = typeof exec | typeof run | typeof runExec\nexport type RunnerFG = typeof execFG | typeof runExecFG | typeof runFG\nexport type RunnerOptions = ExecOptions & RunExecOptions & RunOptions\nexport type MultiRunResult = Record<string, RunResult>\nexport type ScriptSet = Record<string, string>\nexport type MultiScriptSet = Record<string, ScriptSet>\nexport type ExecResult =\n | RunFGResult\n | MultiRunResult\n | ScriptSet\n | MultiScriptSet\n\nconst isScriptSet = (o: unknown): o is ScriptSet => {\n if (!o || typeof o !== 'object') return false\n for (const v of Object.values(o)) {\n if (typeof v !== 'string') return false\n }\n return true\n}\n\nconst isMultiScriptSet = (\n o: ExecResult,\n): o is Record<string, ScriptSet> => {\n for (const v of Object.values(o)) {\n if (!isScriptSet(v)) return false\n }\n return true\n}\n\nconst isSingleSuccess = (\n o: RunResult,\n): o is RunResult & { status: 0; signal: null } =>\n o.signal === null && o.status === 0\n\nconst setExitCode = (result: RunResult) => {\n /* c8 ignore next */\n process.exitCode = process.exitCode || (result.status ?? 1)\n}\n\nexport const views = {\n // run results for single or multiple will be printed along the way.\n human: result => {\n if (isScriptSet(result)) stdout('Scripts available:', result)\n else if (isMultiScriptSet(result)) {\n stdout('Scripts available:')\n for (const [wsPath, scripts] of Object.entries(result)) {\n stdout(wsPath, scripts)\n }\n }\n },\n json: result =>\n isRunResult(result) && isSingleSuccess(result) ?\n undefined\n : result,\n} as const satisfies Views<ExecResult>\n\nexport class ExecCommand<B extends RunnerBG, F extends RunnerFG> {\n bg: B\n fg: F\n arg0?: string\n args: string[]\n monorepo?: Monorepo\n /** how many places are we doing things in? */\n spaces: number\n conf: LoadedConfig\n projectRoot: string\n view: 'human' | 'json' | 'inspect'\n\n constructor(conf: LoadedConfig, bg: B, fg: F) {\n this.conf = conf\n this.bg = bg\n this.fg = fg\n this.view =\n conf.values.view === 'json' ? 'json'\n : conf.values.view === 'inspect' ? 'inspect'\n : 'human'\n const {\n projectRoot,\n positionals: [arg0, ...args],\n } = conf\n this.arg0 = arg0\n this.args = args\n\n const paths = conf.get('workspace')\n const groups = conf.get('workspace-group')\n const recursive = conf.get('recursive')\n this.monorepo =\n paths?.length || groups?.length || recursive ?\n Monorepo.load(projectRoot, { load: { paths, groups } })\n : undefined\n this.spaces = this.monorepo?.size ?? 1\n this.projectRoot = projectRoot\n }\n\n hasMonorepo(): this is this & { monorepo: Monorepo } {\n return !!this.monorepo\n }\n\n hasArg0(): this is this & { arg0: string } {\n return !!this.arg0\n }\n\n async run(): Promise<ExecResult> {\n if (this.spaces === 1) {\n const arg = this.fgArg()\n if (!arg) return this.noArgsSingle()\n const result = await this.fg(arg)\n if (isRunResult(result)) {\n setExitCode(result)\n }\n return result\n }\n if (!this.hasMonorepo() || this.spaces === 0) {\n throw error('no matching workspaces found', {\n /* c8 ignore next - already guarded */\n validOptions: [...(this.monorepo?.load().paths() ?? [])],\n })\n }\n\n if (!this.hasArg0()) {\n return this.noArgsMulti()\n }\n\n // run across workspaces\n let failed = false\n const resultMap = await this.monorepo.run(async ws => {\n const result = await this.bg(this.bgArg(ws)).catch(\n (er: unknown) => {\n if (isErrorWithCause(er) && isRunResult(er.cause)) {\n this.printResult(ws, er.cause)\n }\n failed = true\n throw er\n },\n )\n if (!failed) this.printResult(ws, result)\n return result\n })\n\n const results: Record<string, RunResult> = {}\n for (const [ws, result] of resultMap) {\n if (result.status === 0 && result.signal === null) {\n result.stdout = ''\n result.stderr = ''\n }\n results[ws.path] = result\n }\n return results\n }\n\n printResult(ws: Workspace, result: RunResult) {\n // non-human results just get printed at the end\n if (this.view !== 'human') return\n\n if (result.status === 0 && result.signal === null) {\n stdout(ws.path, 'ok')\n } else {\n stdout(\n styleTextStdout(\n ['bgWhiteBright', 'black', 'bold'],\n ws.path + ' failure',\n ),\n {\n status: result.status,\n signal: result.signal,\n },\n )\n /* c8 ignore start */\n if (result.stderr) stderr(ansiToAnsi(result.stderr))\n if (result.stdout) stdout(ansiToAnsi(result.stdout))\n /* c8 ignore stop */\n setExitCode(result)\n }\n }\n\n /* c8 ignore start - env specific */\n interactiveShell(): string {\n return (\n process.env.SHELL ??\n this.conf.get('script-shell') ??\n (process.platform === 'win32' ? 'cmd.exe' : '/bin/sh')\n )\n }\n /* c8 ignore stop */\n\n // overridden by 'vlt run' which returns undefined\n defaultArg0(): string | undefined {\n return this.interactiveShell()\n }\n\n fgArg(): RunnerOptions | undefined {\n const ws = this.monorepo?.values().next().value\n const cwd = ws?.fullpath ?? this.projectRoot\n const arg0 = this.arg0 ?? this.defaultArg0()\n\n // return undefined so noArgsSingle will be called instead\n if (typeof arg0 !== 'string') return\n\n return {\n cwd,\n /* c8 ignore next - already guarded */\n arg0,\n args: this.args,\n projectRoot: this.projectRoot,\n packageJson: this.monorepo?.packageJson,\n 'script-shell':\n this.arg0 ? this.conf.get('script-shell') : false,\n }\n }\n\n bgArg(this: this & { arg0: string }, ws: Workspace): RunnerOptions {\n return {\n cwd: ws.fullpath,\n acceptFail: !this.conf.get('bail'),\n ignoreMissing: true,\n arg0: this.arg0,\n args: this.args,\n projectRoot: this.projectRoot,\n packageJson: this.monorepo?.packageJson,\n 'script-shell': this.conf.get('script-shell'),\n }\n }\n\n /* c8 ignore start - not used, only here to override */\n noArgsSingle(): ScriptSet {\n throw error('Failed to determine interactive shell to spawn')\n }\n /* c8 ignore stop - not used, only here to override */\n\n noArgsMulti(this: this & { monorepo: Monorepo }): MultiScriptSet {\n throw error(\n 'Cannot spawn interactive shells in multiple workspaces',\n )\n }\n}\n"]}
|
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAMrC,OAAO,KAAK,EAAY,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAI/D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AAEtC,MAAM,MAAM,YAAY,GAAG,MAAM,IAAI,CAAA;AAErC;;;GAGG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,GAAG,OAAO,IAAI,CACnC,IAAI,EAAE,YAAY,KACf,OAAO,CAAC,CAAC,CAAC,CAAA;AAEf,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI;IACvB,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAA;IACrB,KAAK,EAAE,YAAY,CAAA;IACnB,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;CAChB,CAAA;AA+DD,QAAA,MAAM,GAAG,qBAsBR,CAAA;AAED,eAAe,GAAG,CAAA"}
|
package/dist/esm/index.js
CHANGED
|
@@ -6,10 +6,14 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
|
|
|
6
6
|
}
|
|
7
7
|
return path;
|
|
8
8
|
};
|
|
9
|
+
import { format } from 'node:util';
|
|
9
10
|
import { error } from '@vltpkg/error-cause';
|
|
11
|
+
import { asRootError } from '@vltpkg/output/error';
|
|
10
12
|
import { loadPackageJson } from 'package-json-from-dist';
|
|
13
|
+
import { getSortedCliOptions, getSortedKeys, } from "./config/definition.js";
|
|
11
14
|
import { Config } from "./config/index.js";
|
|
12
|
-
import { outputCommand, stdout } from "./output.js";
|
|
15
|
+
import { outputCommand, stderr, stdout } from "./output.js";
|
|
16
|
+
import { indent } from "./print-err.js";
|
|
13
17
|
const { version } = loadPackageJson(import.meta.filename, process.env.__VLT_INTERNAL_CLI_PACKAGE_JSON);
|
|
14
18
|
const loadCommand = async (command) => {
|
|
15
19
|
try {
|
|
@@ -24,10 +28,41 @@ const loadCommand = async (command) => {
|
|
|
24
28
|
}
|
|
25
29
|
/* c8 ignore stop */
|
|
26
30
|
};
|
|
31
|
+
const loadVlt = async (cwd, argv) => {
|
|
32
|
+
try {
|
|
33
|
+
return await Config.load(cwd, argv);
|
|
34
|
+
}
|
|
35
|
+
catch (e) {
|
|
36
|
+
const err = asRootError(e, { code: 'JACKSPEAK' });
|
|
37
|
+
const { found, path, wanted, name } = err.cause;
|
|
38
|
+
const isConfigFile = typeof path === 'string';
|
|
39
|
+
const msg = isConfigFile ?
|
|
40
|
+
`Problem in Config File ${path}`
|
|
41
|
+
: 'Invalid Option Flag';
|
|
42
|
+
const validOptions = wanted ? undefined
|
|
43
|
+
: isConfigFile ? getSortedKeys()
|
|
44
|
+
: getSortedCliOptions();
|
|
45
|
+
stderr(msg);
|
|
46
|
+
stderr(err.message);
|
|
47
|
+
if (name)
|
|
48
|
+
stderr(indent(`Field: ${format(name)}`));
|
|
49
|
+
if (found) {
|
|
50
|
+
stderr(indent(`Found: ${isConfigFile ? JSON.stringify(found) : format(found)}`));
|
|
51
|
+
}
|
|
52
|
+
if (wanted)
|
|
53
|
+
stderr(indent(`Wanted: ${format(wanted)}`));
|
|
54
|
+
if (validOptions) {
|
|
55
|
+
stderr(indent('Valid Options:'));
|
|
56
|
+
stderr(indent(validOptions.join('\n'), 4));
|
|
57
|
+
}
|
|
58
|
+
stderr(indent(`Run 'vlt help' for more information about available options.`));
|
|
59
|
+
return process.exit(process.exitCode || 1);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
27
62
|
const run = async () => {
|
|
28
63
|
const start = Date.now();
|
|
29
64
|
const cwd = process.cwd();
|
|
30
|
-
const vlt = await
|
|
65
|
+
const vlt = await loadVlt(cwd, process.argv);
|
|
31
66
|
if (vlt.get('version')) {
|
|
32
67
|
return stdout(version);
|
|
33
68
|
}
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { format } from 'node:util'\nimport { error } from '@vltpkg/error-cause'\nimport { asRootError } from '@vltpkg/output/error'\nimport type { Jack } from 'jackspeak'\nimport { loadPackageJson } from 'package-json-from-dist'\nimport {\n getSortedCliOptions,\n getSortedKeys,\n} from './config/definition.ts'\nimport type { Commands, LoadedConfig } from './config/index.ts'\nimport { Config } from './config/index.ts'\nimport { outputCommand, stderr, stdout } from './output.ts'\nimport { indent } from './print-err.ts'\nimport type { Views } from './view.ts'\n\nexport type CommandUsage = () => Jack\n\n/**\n * A command function that may return a result of `T`.\n * If the result is `undefined`, no final output will be displayed by default.\n */\nexport type CommandFn<T = unknown> = (\n conf: LoadedConfig,\n) => Promise<T>\n\nexport type Command<T> = {\n command: CommandFn<T>\n usage: CommandUsage\n views: Views<T>\n}\n\nconst { version } = loadPackageJson(\n import.meta.filename,\n process.env.__VLT_INTERNAL_CLI_PACKAGE_JSON,\n) as {\n version: string\n}\n\nconst loadCommand = async <T>(\n command: Commands[keyof Commands] | undefined,\n): Promise<Command<T>> => {\n try {\n return (await import(`./commands/${command}.ts`)) as Command<T>\n /* c8 ignore start - should not be possible, just a failsafe */\n } catch (e) {\n throw error('Could not load command', {\n found: command,\n cause: e,\n })\n }\n /* c8 ignore stop */\n}\n\nconst loadVlt = async (cwd: string, argv: string[]) => {\n try {\n return await Config.load(cwd, argv)\n } catch (e) {\n const err = asRootError(e, { code: 'JACKSPEAK' })\n const { found, path, wanted, name } = err.cause\n const isConfigFile = typeof path === 'string'\n const msg =\n isConfigFile ?\n `Problem in Config File ${path}`\n : 'Invalid Option Flag'\n const validOptions =\n wanted ? undefined\n : isConfigFile ? getSortedKeys()\n : getSortedCliOptions()\n stderr(msg)\n stderr(err.message)\n if (name) stderr(indent(`Field: ${format(name)}`))\n if (found) {\n stderr(\n indent(\n `Found: ${isConfigFile ? JSON.stringify(found) : format(found)}`,\n ),\n )\n }\n if (wanted) stderr(indent(`Wanted: ${format(wanted)}`))\n if (validOptions) {\n stderr(indent('Valid Options:'))\n stderr(indent(validOptions.join('\\n'), 4))\n }\n stderr(\n indent(\n `Run 'vlt help' for more information about available options.`,\n ),\n )\n return process.exit(process.exitCode || 1)\n }\n}\n\nconst run = async () => {\n const start = Date.now()\n const cwd = process.cwd()\n const vlt = await loadVlt(cwd, process.argv)\n\n if (vlt.get('version')) {\n return stdout(version)\n }\n\n const { monorepo } = vlt.options\n\n // Infer the workspace by being in that directory.\n if (vlt.get('workspace') === undefined) {\n const ws = monorepo?.get(cwd)\n if (ws) {\n vlt.values.workspace = [ws.path]\n vlt.options.workspace = [ws.path]\n }\n }\n\n const command = await loadCommand(vlt.command)\n await outputCommand(command, vlt, { start })\n}\n\nexport default run\n"]}
|
package/dist/esm/output.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/output.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/output.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,SAAS,IAAI,aAAa,EAC3B,MAAM,WAAW,CAAA;AAGlB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEzC,OAAO,KAAK,EAAE,IAAI,EAAe,KAAK,EAAE,MAAM,WAAW,CAAA;AAWzD,eAAO,MAAM,MAAM,YAAa,OAAO,EAAE,SAAyB,CAAA;AAElE,eAAO,MAAM,MAAM,YAAa,OAAO,EAAE,SAA2B,CAAA;AAEpE,KAAK,WAAW,GAAG,CACjB,MAAM,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,EAC3C,CAAC,EAAE,MAAM,KACN,MAAM,CAAA;AAUX,eAAO,IAAI,eAAe,EAAE,WAAyB,CAAA;AACrD,eAAO,IAAI,eAAe,EAAE,WAAyB,CAAA;AAKrD,eAAO,MAAM,OAAO,GAAI,CAAC,QACjB,YAAY,UACV,KAAK,CAAC,CAAC,CAAC,KACf,IAAI,CAAC,CAAC,CAyBR,CAAA;AAED,MAAM,MAAM,MAAM,CAAC,CAAC,IAChB,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,GACjC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC,CAAA;AAsC5B;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAU,CAAC,cACvB,OAAO,CAAC,CAAC,CAAC,QAChB,YAAY,cACP;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,kBAoD7B,CAAA"}
|
package/dist/esm/output.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { formatWithOptions, styleText as utilStyleText, } from 'node:util';
|
|
2
2
|
import { createSupportsColor } from 'supports-color';
|
|
3
3
|
import { defaultView } from "./config/definition.js";
|
|
4
|
-
import { printErr } from "./print-err.js";
|
|
4
|
+
import { printErr, formatOptions } from "./print-err.js";
|
|
5
5
|
import { isViewClass } from "./view.js";
|
|
6
6
|
const supportsColor = (stream) => {
|
|
7
7
|
const res = createSupportsColor(stream, { sniffFlags: false });
|
|
@@ -89,11 +89,6 @@ export const outputCommand = async (cliCommand, conf, { start } = { start: Date.
|
|
|
89
89
|
if (stderrColor)
|
|
90
90
|
styleTextStderr = styleText;
|
|
91
91
|
/* c8 ignore stop */
|
|
92
|
-
const formatOptions = {
|
|
93
|
-
depth: Infinity,
|
|
94
|
-
maxArrayLength: Infinity,
|
|
95
|
-
maxStringLength: Infinity,
|
|
96
|
-
};
|
|
97
92
|
const { onDone, onError } = startView(conf,
|
|
98
93
|
// assume views will always output to stdout so use color support from there
|
|
99
94
|
{ colors: stdoutColor }, views, { start });
|
package/dist/esm/output.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/output.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/output.ts"],"names":[],"mappings":"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","sourcesContent":["import type { WriteStream } from 'node:tty'\nimport {\n formatWithOptions,\n styleText as utilStyleText,\n} from 'node:util'\nimport { createSupportsColor } from 'supports-color'\nimport { defaultView } from './config/definition.ts'\nimport type { LoadedConfig } from './config/index.ts'\nimport type { Command } from './index.ts'\nimport { printErr, formatOptions } from './print-err.ts'\nimport type { View, ViewOptions, Views } from './view.ts'\nimport { isViewClass } from './view.ts'\n\nconst supportsColor = (stream: WriteStream) => {\n const res = createSupportsColor(stream, { sniffFlags: false })\n if (res === false) return false\n /* c8 ignore next */\n return res.level > 0\n}\n\n// eslint-disable-next-line no-console\nexport const stdout = (...args: unknown[]) => console.log(...args)\n// eslint-disable-next-line no-console\nexport const stderr = (...args: unknown[]) => console.error(...args)\n\ntype StyleTextFn = (\n format: Parameters<typeof utilStyleText>[0],\n s: string,\n) => string\n\n/* c8 ignore start */\nconst styleText: StyleTextFn = (f, s) =>\n // @ts-expect-error -- styleText 3rd argument is not in types/node\n utilStyleText(f, s, { validateStream: false })\n/* c8 ignore stop */\n\n// TODO: stop exporting mutable variables once exec output is refactored\n/* c8 ignore start */\nexport let styleTextStdout: StyleTextFn = (_, s) => s\nexport let styleTextStderr: StyleTextFn = (_, s) => s\n/* c8 ignore stop */\n\nconst identity = <T>(x: T): T => x\n\nexport const getView = <T>(\n conf: LoadedConfig,\n views?: Views<T>,\n): View<T> => {\n const viewName = conf.values.view\n\n const viewFn =\n viewName === 'inspect' ? identity\n : typeof views === 'function' ? views\n : views && typeof views === 'object' ? views[viewName]\n : identity\n\n // if the user specified a view that doesn't exist, then set it back to the\n // default, and try again. This will fall back to identity if it's also\n // missing. We also always treat 'json' as a valid view that falls back to\n // identity. This allows the explicit use of `--view=json` to work even\n // when the default view is `human`.\n if (\n !viewFn &&\n conf.values.view !== defaultView &&\n conf.values.view !== 'json'\n ) {\n conf.values.view = defaultView\n process.env.VLT_VIEW = defaultView\n return getView(conf, views)\n }\n\n return viewFn ?? identity\n}\n\nexport type OnDone<T> =\n | ((result: T) => Promise<unknown>)\n | ((result: T) => unknown)\n\n/**\n * If the view is a View class, then instantiate and start it.\n * If it's a view function, then just define the onDone method.\n */\nconst startView = <T>(\n conf: LoadedConfig,\n opts: ViewOptions,\n views?: Views<T>,\n { start }: { start: number } = { start: Date.now() },\n): {\n onDone: OnDone<T>\n onError?: (err: unknown) => void\n} => {\n const View = getView<T>(conf, views)\n\n if (isViewClass(View)) {\n const view = new View(opts, conf)\n view.start()\n return {\n onDone(r) {\n return view.done(r, { time: Date.now() - start })\n },\n onError(err) {\n view.error(err)\n },\n }\n }\n\n return {\n async onDone(r) {\n if (r === undefined) return\n return View(r, opts, conf)\n },\n }\n}\n\n/**\n * Main export. Run the command appropriately, displaying output using\n * the user-requested view, or the default if the user requested a view\n * that is not defined for this command.\n */\nexport const outputCommand = async <T>(\n cliCommand: Command<T>,\n conf: LoadedConfig,\n { start }: { start: number } = { start: Date.now() },\n) => {\n const { usage, views, command } = cliCommand\n\n if (conf.values.help) {\n return stdout(usage().usage())\n }\n\n const stdoutColor =\n conf.values.color ?? supportsColor(process.stdout)\n const stderrColor =\n conf.values.color ?? supportsColor(process.stderr)\n\n /* c8 ignore start */\n if (stdoutColor) styleTextStdout = styleText\n if (stderrColor) styleTextStderr = styleText\n /* c8 ignore stop */\n\n const { onDone, onError } = startView(\n conf,\n // assume views will always output to stdout so use color support from there\n { colors: stdoutColor },\n views,\n { start },\n )\n\n try {\n const output = await onDone(await command(conf))\n if (output !== undefined) {\n stdout(\n conf.values.view === 'json' ?\n JSON.stringify(output, null, 2)\n : formatWithOptions(\n {\n ...formatOptions,\n colors: stdoutColor,\n },\n output,\n ),\n )\n }\n } catch (err) {\n onError?.(err)\n process.exitCode ||= 1\n\n printErr(err, usage, stderr, {\n ...formatOptions,\n colors: stderrColor,\n })\n\n process.exit(process.exitCode)\n }\n}\n"]}
|
package/dist/esm/print-err.d.ts
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
import type { CommandUsage } from './index.ts';
|
|
2
2
|
import type { InspectOptions } from 'node:util';
|
|
3
|
+
export declare const formatOptions: {
|
|
4
|
+
readonly depth: number;
|
|
5
|
+
readonly maxArrayLength: number;
|
|
6
|
+
readonly maxStringLength: number;
|
|
7
|
+
};
|
|
3
8
|
export type ErrorFormatOptions = InspectOptions & {
|
|
4
9
|
maxLines?: number;
|
|
5
10
|
};
|
|
6
|
-
export
|
|
11
|
+
export type Formatter = (arg: unknown, options?: ErrorFormatOptions) => string;
|
|
12
|
+
export declare const indent: (lines: string, num?: number) => string;
|
|
13
|
+
export declare const printErr: (e: unknown, usage: CommandUsage, stderr: (...a: string[]) => void, baseOpts?: ErrorFormatOptions) => void;
|
|
7
14
|
//# sourceMappingURL=print-err.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"print-err.d.ts","sourceRoot":"","sources":["../../src/print-err.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"print-err.d.ts","sourceRoot":"","sources":["../../src/print-err.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAM/C,eAAO,MAAM,aAAa;;;;CAIS,CAAA;AAEnC,MAAM,MAAM,kBAAkB,GAAG,cAAc,GAAG;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,CACtB,GAAG,EAAE,OAAO,EACZ,OAAO,CAAC,EAAE,kBAAkB,KACzB,MAAM,CAAA;AAQX,eAAO,MAAM,MAAM,UAAW,MAAM,yBAIrB,CAAA;AAoBf,eAAO,MAAM,QAAQ,MAChB,OAAO,SACH,YAAY,UACX,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,IAAI,aACrB,kBAAkB,SAwC9B,CAAA"}
|
package/dist/esm/print-err.js
CHANGED
|
@@ -1,22 +1,41 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { parseError } from '@vltpkg/output/error';
|
|
2
2
|
import { formatWithOptions } from 'node:util';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
3
|
+
import { XDG } from '@vltpkg/xdg';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { writeFileSync, mkdirSync } from 'node:fs';
|
|
6
|
+
export const formatOptions = {
|
|
7
|
+
depth: Infinity,
|
|
8
|
+
maxArrayLength: Infinity,
|
|
9
|
+
maxStringLength: Infinity,
|
|
11
10
|
};
|
|
12
|
-
const
|
|
11
|
+
const formatURL = (v, format) => v instanceof URL ? v.toString() : /* c8 ignore next */ format(v);
|
|
12
|
+
const formatArray = (v, format, joiner = ', ') => Array.isArray(v) ? v.join(joiner) : /* c8 ignore next */ format(v);
|
|
13
|
+
export const indent = (lines, num = 2) => lines
|
|
13
14
|
.split('\n')
|
|
14
15
|
.map(l => ' '.repeat(num) + l)
|
|
15
16
|
.join('\n');
|
|
16
|
-
const
|
|
17
|
-
|
|
17
|
+
const writeErrorLog = (e, format) => {
|
|
18
|
+
try {
|
|
19
|
+
const dir = new XDG('vlt/error-logs').data();
|
|
20
|
+
const file = join(dir, `error-${process.pid}.log`);
|
|
21
|
+
mkdirSync(dir, { recursive: true });
|
|
22
|
+
writeFileSync(file, format(e, {
|
|
23
|
+
colors: false,
|
|
24
|
+
maxLines: Infinity,
|
|
25
|
+
}));
|
|
26
|
+
return file;
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
export const printErr = (e, usage, stderr, baseOpts) => {
|
|
18
33
|
const format = (arg, opts) => {
|
|
19
|
-
const { maxLines = 200, ...rest } = {
|
|
34
|
+
const { maxLines = 200, ...rest } = {
|
|
35
|
+
...formatOptions,
|
|
36
|
+
...baseOpts,
|
|
37
|
+
...opts,
|
|
38
|
+
};
|
|
20
39
|
const lines = formatWithOptions(rest, arg).split('\n');
|
|
21
40
|
const totalLines = lines.length;
|
|
22
41
|
if (totalLines > maxLines) {
|
|
@@ -25,42 +44,31 @@ export const printErr = (err, usage, stderr, baseOpts) => {
|
|
|
25
44
|
}
|
|
26
45
|
return lines.join('\n');
|
|
27
46
|
};
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
47
|
+
const err = parseError(e);
|
|
48
|
+
const knownError = printCode(err, usage, stderr, format);
|
|
49
|
+
const fileWritten = !knownError || knownError.file ? writeErrorLog(e, format) : null;
|
|
50
|
+
// We could not write an error log and its not a know error,
|
|
51
|
+
// so we print the entire formatted value.
|
|
52
|
+
if (!fileWritten && !knownError) {
|
|
53
|
+
return stderr(format(e));
|
|
33
54
|
}
|
|
34
|
-
|
|
35
|
-
// properties. Just print the standard error properties as best we can.
|
|
36
|
-
if (err instanceof Error) {
|
|
55
|
+
if (err && !knownError) {
|
|
37
56
|
stderr(`${err.name}: ${err.message}`);
|
|
38
|
-
if ('cause' in err) {
|
|
39
|
-
stderr(`Cause:`);
|
|
40
|
-
if (err.cause instanceof Error) {
|
|
41
|
-
stderr(indent(format(err.cause)));
|
|
42
|
-
}
|
|
43
|
-
else if (err.cause && typeof err.cause === 'object') {
|
|
44
|
-
for (const key in err.cause) {
|
|
45
|
-
stderr(indent(`${key}: ${format(err.cause[key])}`));
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
stderr(indent(format(err.cause)));
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
const stack = trimStack(err);
|
|
53
|
-
if (stack) {
|
|
54
|
-
stderr(`Stack:`);
|
|
55
|
-
stderr(indent(format(stack)));
|
|
56
|
-
}
|
|
57
|
-
return;
|
|
58
57
|
}
|
|
59
|
-
|
|
60
|
-
|
|
58
|
+
if (fileWritten) {
|
|
59
|
+
stderr('');
|
|
60
|
+
stderr(`Full details written to: ${fileWritten}`);
|
|
61
|
+
}
|
|
62
|
+
if (!knownError || knownError.bug) {
|
|
63
|
+
stderr('');
|
|
64
|
+
stderr('Open an issue with the full error details at:');
|
|
65
|
+
stderr(indent('https://github.com/vltpkg/vltpkg/issues/new'));
|
|
66
|
+
}
|
|
61
67
|
};
|
|
62
|
-
const
|
|
63
|
-
|
|
68
|
+
const printCode = (err, usage, stderr, format) => {
|
|
69
|
+
if (!err)
|
|
70
|
+
return;
|
|
71
|
+
switch (err.cause?.code) {
|
|
64
72
|
case 'EUSAGE': {
|
|
65
73
|
const { found, validOptions } = err.cause;
|
|
66
74
|
stderr(usage().usage());
|
|
@@ -69,15 +77,15 @@ const print = (err, usage, stderr, format) => {
|
|
|
69
77
|
stderr(indent(`Found: ${format(found)}`));
|
|
70
78
|
}
|
|
71
79
|
if (validOptions) {
|
|
72
|
-
stderr(indent(`Valid options: ${
|
|
80
|
+
stderr(indent(`Valid options: ${formatArray(validOptions, format)}`));
|
|
73
81
|
}
|
|
74
|
-
return
|
|
82
|
+
return {};
|
|
75
83
|
}
|
|
76
84
|
case 'ERESOLVE': {
|
|
77
85
|
const { url, from, response, spec } = err.cause;
|
|
78
86
|
stderr(`Resolve Error: ${err.message}`);
|
|
79
87
|
if (url) {
|
|
80
|
-
stderr(indent(`While fetching: ${url}`));
|
|
88
|
+
stderr(indent(`While fetching: ${formatURL(url, format)}`));
|
|
81
89
|
}
|
|
82
90
|
if (spec) {
|
|
83
91
|
stderr(indent(`To satisfy: ${format(spec)}`));
|
|
@@ -88,13 +96,11 @@ const print = (err, usage, stderr, format) => {
|
|
|
88
96
|
if (response) {
|
|
89
97
|
stderr(indent(`Response: ${format(response)}`));
|
|
90
98
|
}
|
|
91
|
-
return true;
|
|
99
|
+
return { file: true };
|
|
92
100
|
}
|
|
93
101
|
case 'EREQUEST': {
|
|
94
102
|
const { url, method } = err.cause;
|
|
95
|
-
const { code, syscall } =
|
|
96
|
-
err.cause.cause
|
|
97
|
-
: {};
|
|
103
|
+
const { code, syscall } = err.cause.cause ?? {};
|
|
98
104
|
stderr(`Request Error: ${err.message}`);
|
|
99
105
|
if (code) {
|
|
100
106
|
stderr(indent(`Code: ${format(code)}`));
|
|
@@ -103,12 +109,26 @@ const print = (err, usage, stderr, format) => {
|
|
|
103
109
|
stderr(indent(`Syscall: ${format(syscall)}`));
|
|
104
110
|
}
|
|
105
111
|
if (url) {
|
|
106
|
-
stderr(indent(`URL: ${url}`));
|
|
112
|
+
stderr(indent(`URL: ${formatURL(url, format)}`));
|
|
107
113
|
}
|
|
108
114
|
if (method) {
|
|
109
115
|
stderr(indent(`Method: ${format(method)}`));
|
|
110
116
|
}
|
|
111
|
-
return true;
|
|
117
|
+
return { file: true };
|
|
118
|
+
}
|
|
119
|
+
case 'ECONFIG': {
|
|
120
|
+
const { found, wanted, validOptions } = err.cause;
|
|
121
|
+
stderr(`Config Error: ${err.message}`);
|
|
122
|
+
if (found) {
|
|
123
|
+
stderr(indent(`Found: ${format(found)}`));
|
|
124
|
+
}
|
|
125
|
+
if (wanted) {
|
|
126
|
+
stderr(indent(`Wanted: ${format(wanted)}`));
|
|
127
|
+
}
|
|
128
|
+
if (validOptions) {
|
|
129
|
+
stderr(indent(`Valid Options: ${format(validOptions)}`));
|
|
130
|
+
}
|
|
131
|
+
return {};
|
|
112
132
|
}
|
|
113
133
|
}
|
|
114
134
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"print-err.js","sourceRoot":"","sources":["../../src/print-err.ts"],"names":[],"mappings":"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","sourcesContent":["import { isErrorWithCode } from '@vltpkg/error-cause'\nimport type { ErrorWithCode } from '@vltpkg/error-cause'\nimport type { CommandUsage } from './index.ts'\nimport type { InspectOptions } from 'node:util'\nimport { formatWithOptions } from 'node:util'\n\nexport type ErrorFormatOptions = InspectOptions & {\n maxLines?: number\n}\n\ntype Formatter = (\n arg: unknown,\n options?: ErrorFormatOptions,\n) => string\n\nconst trimStack = (err: Error) => {\n if (err.stack) {\n const lines = err.stack.trim().split('\\n')\n if (lines[0] === `${err.name}: ${err.message}`) {\n lines.shift()\n }\n return lines.map(l => l.trim()).join('\\n')\n }\n}\n\nconst indent = (lines: string, num = 2) =>\n lines\n .split('\\n')\n .map(l => ' '.repeat(num) + l)\n .join('\\n')\n\nconst isErrorWithProps = (\n value: unknown,\n): value is Error & Record<string, unknown> =>\n value instanceof Error && Object.keys(value).length > 0\n\nexport const printErr = (\n err: unknown,\n usage: CommandUsage,\n stderr: (...a: string[]) => void,\n baseOpts?: ErrorFormatOptions,\n) => {\n const format: Formatter = (arg: unknown, opts) => {\n const { maxLines = 200, ...rest } = { ...baseOpts, ...opts }\n const lines = formatWithOptions(rest, arg).split('\\n')\n const totalLines = lines.length\n if (totalLines > maxLines) {\n lines.length = maxLines\n lines.push(`... ${totalLines - maxLines} lines hidden ...`)\n }\n return lines.join('\\n')\n }\n\n // This is an error with a cause, check if it we know about its\n // code and try to print it. If it did not print then fallback\n // to the next option.\n if (isErrorWithCode(err) && print(err, usage, stderr, format)) {\n return\n }\n\n // We have a real but we dont know anything special about its\n // properties. Just print the standard error properties as best we can.\n if (err instanceof Error) {\n stderr(`${err.name}: ${err.message}`)\n if ('cause' in err) {\n stderr(`Cause:`)\n if (err.cause instanceof Error) {\n stderr(indent(format(err.cause)))\n } else if (err.cause && typeof err.cause === 'object') {\n for (const key in err.cause) {\n stderr(\n indent(\n `${key}: ${format((err.cause as Record<string, unknown>)[key])}`,\n ),\n )\n }\n } else {\n stderr(indent(format(err.cause)))\n }\n }\n const stack = trimStack(err)\n if (stack) {\n stderr(`Stack:`)\n stderr(indent(format(stack)))\n }\n return\n }\n\n // We don't know what this is, just print it.\n stderr(`Unknown Error:`, format(err))\n}\n\nconst print = (\n err: ErrorWithCode,\n usage: CommandUsage,\n stderr: (...a: string[]) => void,\n format: Formatter,\n) => {\n switch (err.cause.code) {\n case 'EUSAGE': {\n const { found, validOptions } = err.cause\n stderr(usage().usage())\n stderr(`Usage Error: ${err.message}`)\n if (found) {\n stderr(indent(`Found: ${format(found)}`))\n }\n if (validOptions) {\n stderr(\n indent(`Valid options: ${format(validOptions.join(', '))}`),\n )\n }\n return true\n }\n\n case 'ERESOLVE': {\n const { url, from, response, spec } = err.cause\n stderr(`Resolve Error: ${err.message}`)\n if (url) {\n stderr(indent(`While fetching: ${url}`))\n }\n if (spec) {\n stderr(indent(`To satisfy: ${format(spec)}`))\n }\n if (from) {\n stderr(indent(`From: ${format(from)}`))\n }\n if (response) {\n stderr(indent(`Response: ${format(response)}`))\n }\n return true\n }\n\n case 'EREQUEST': {\n const { url, method } = err.cause\n const { code, syscall } =\n isErrorWithProps(err.cause.cause) ?\n err.cause.cause\n : ({} as Record<string, unknown>)\n stderr(`Request Error: ${err.message}`)\n if (code) {\n stderr(indent(`Code: ${format(code)}`))\n }\n if (syscall) {\n stderr(indent(`Syscall: ${format(syscall)}`))\n }\n if (url) {\n stderr(indent(`URL: ${url}`))\n }\n if (method) {\n stderr(indent(`Method: ${format(method)}`))\n }\n\n return true\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"print-err.js","sourceRoot":"","sources":["../../src/print-err.ts"],"names":[],"mappings":"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","sourcesContent":["import { parseError } from '@vltpkg/output/error'\nimport type { ParsedError } from '@vltpkg/output/error'\nimport type { CommandUsage } from './index.ts'\nimport type { InspectOptions } from 'node:util'\nimport { formatWithOptions } from 'node:util'\nimport { XDG } from '@vltpkg/xdg'\nimport { join } from 'node:path'\nimport { writeFileSync, mkdirSync } from 'node:fs'\n\nexport const formatOptions = {\n depth: Infinity,\n maxArrayLength: Infinity,\n maxStringLength: Infinity,\n} as const satisfies InspectOptions\n\nexport type ErrorFormatOptions = InspectOptions & {\n maxLines?: number\n}\n\nexport type Formatter = (\n arg: unknown,\n options?: ErrorFormatOptions,\n) => string\n\nconst formatURL = (v: unknown, format: Formatter) =>\n v instanceof URL ? v.toString() : /* c8 ignore next */ format(v)\n\nconst formatArray = (v: unknown, format: Formatter, joiner = ', ') =>\n Array.isArray(v) ? v.join(joiner) : /* c8 ignore next */ format(v)\n\nexport const indent = (lines: string, num = 2) =>\n lines\n .split('\\n')\n .map(l => ' '.repeat(num) + l)\n .join('\\n')\n\nconst writeErrorLog = (e: unknown, format: Formatter) => {\n try {\n const dir = new XDG('vlt/error-logs').data()\n const file = join(dir, `error-${process.pid}.log`)\n mkdirSync(dir, { recursive: true })\n writeFileSync(\n file,\n format(e, {\n colors: false,\n maxLines: Infinity,\n }),\n )\n return file\n } catch {\n return null\n }\n}\n\nexport const printErr = (\n e: unknown,\n usage: CommandUsage,\n stderr: (...a: string[]) => void,\n baseOpts?: ErrorFormatOptions,\n) => {\n const format: Formatter = (arg: unknown, opts) => {\n const { maxLines = 200, ...rest } = {\n ...formatOptions,\n ...baseOpts,\n ...opts,\n }\n const lines = formatWithOptions(rest, arg).split('\\n')\n const totalLines = lines.length\n if (totalLines > maxLines) {\n lines.length = maxLines\n lines.push(`... ${totalLines - maxLines} lines hidden ...`)\n }\n return lines.join('\\n')\n }\n\n const err = parseError(e)\n const knownError = printCode(err, usage, stderr, format)\n const fileWritten =\n !knownError || knownError.file ? writeErrorLog(e, format) : null\n\n // We could not write an error log and its not a know error,\n // so we print the entire formatted value.\n if (!fileWritten && !knownError) {\n return stderr(format(e))\n }\n\n if (err && !knownError) {\n stderr(`${err.name}: ${err.message}`)\n }\n if (fileWritten) {\n stderr('')\n stderr(`Full details written to: ${fileWritten}`)\n }\n if (!knownError || knownError.bug) {\n stderr('')\n stderr('Open an issue with the full error details at:')\n stderr(indent('https://github.com/vltpkg/vltpkg/issues/new'))\n }\n}\n\nconst printCode = (\n err: ParsedError | null,\n usage: CommandUsage,\n stderr: (...a: string[]) => void,\n format: Formatter,\n): void | { bug?: boolean; file?: boolean } => {\n if (!err) return\n\n switch (err.cause?.code) {\n case 'EUSAGE': {\n const { found, validOptions } = err.cause\n stderr(usage().usage())\n stderr(`Usage Error: ${err.message}`)\n if (found) {\n stderr(indent(`Found: ${format(found)}`))\n }\n if (validOptions) {\n stderr(\n indent(\n `Valid options: ${formatArray(validOptions, format)}`,\n ),\n )\n }\n return {}\n }\n\n case 'ERESOLVE': {\n const { url, from, response, spec } = err.cause\n stderr(`Resolve Error: ${err.message}`)\n if (url) {\n stderr(indent(`While fetching: ${formatURL(url, format)}`))\n }\n if (spec) {\n stderr(indent(`To satisfy: ${format(spec)}`))\n }\n if (from) {\n stderr(indent(`From: ${format(from)}`))\n }\n if (response) {\n stderr(indent(`Response: ${format(response)}`))\n }\n return { file: true }\n }\n\n case 'EREQUEST': {\n const { url, method } = err.cause\n const { code, syscall } = err.cause.cause ?? {}\n stderr(`Request Error: ${err.message}`)\n if (code) {\n stderr(indent(`Code: ${format(code)}`))\n }\n if (syscall) {\n stderr(indent(`Syscall: ${format(syscall)}`))\n }\n if (url) {\n stderr(indent(`URL: ${formatURL(url, format)}`))\n }\n if (method) {\n stderr(indent(`Method: ${format(method)}`))\n }\n return { file: true }\n }\n\n case 'ECONFIG': {\n const { found, wanted, validOptions } = err.cause\n stderr(`Config Error: ${err.message}`)\n if (found) {\n stderr(indent(`Found: ${format(found)}`))\n }\n if (wanted) {\n stderr(indent(`Wanted: ${format(wanted)}`))\n }\n if (validOptions) {\n stderr(indent(`Valid Options: ${format(validOptions)}`))\n }\n return {}\n }\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vltpkg/cli-sdk",
|
|
3
3
|
"description": "The source for the vlt CLI",
|
|
4
|
-
"version": "0.0.0-
|
|
4
|
+
"version": "0.0.0-13",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "git+https://github.com/vltpkg/vltpkg.git",
|
|
@@ -34,26 +34,26 @@
|
|
|
34
34
|
"react-devtools-core": "^4.28.5",
|
|
35
35
|
"supports-color": "^10.0.0",
|
|
36
36
|
"walk-up-path": "^4.0.0",
|
|
37
|
-
"@vltpkg/dep-id": "0.0.0-
|
|
38
|
-
"@vltpkg/dot-prop": "0.0.0-
|
|
39
|
-
"@vltpkg/
|
|
40
|
-
"@vltpkg/
|
|
41
|
-
"@vltpkg/init": "0.0.0-
|
|
42
|
-
"@vltpkg/
|
|
43
|
-
"@vltpkg/package-
|
|
44
|
-
"@vltpkg/
|
|
45
|
-
"@vltpkg/
|
|
46
|
-
"@vltpkg/
|
|
47
|
-
"@vltpkg/
|
|
48
|
-
"@vltpkg/security-archive": "0.0.0-
|
|
49
|
-
"@vltpkg/
|
|
50
|
-
"@vltpkg/
|
|
51
|
-
"@vltpkg/
|
|
52
|
-
"@vltpkg/
|
|
53
|
-
"@vltpkg/
|
|
54
|
-
"@vltpkg/
|
|
55
|
-
"@vltpkg/
|
|
56
|
-
"@vltpkg/xdg": "0.0.0-
|
|
37
|
+
"@vltpkg/dep-id": "0.0.0-13",
|
|
38
|
+
"@vltpkg/dot-prop": "0.0.0-13",
|
|
39
|
+
"@vltpkg/error-cause": "0.0.0-13",
|
|
40
|
+
"@vltpkg/graph": "0.0.0-13",
|
|
41
|
+
"@vltpkg/init": "0.0.0-13",
|
|
42
|
+
"@vltpkg/package-info": "0.0.0-13",
|
|
43
|
+
"@vltpkg/package-json": "0.0.0-13",
|
|
44
|
+
"@vltpkg/query": "0.0.0-13",
|
|
45
|
+
"@vltpkg/registry-client": "0.0.0-13",
|
|
46
|
+
"@vltpkg/output": "0.0.0-13",
|
|
47
|
+
"@vltpkg/rollback-remove": "0.0.0-13",
|
|
48
|
+
"@vltpkg/security-archive": "0.0.0-13",
|
|
49
|
+
"@vltpkg/spec": "0.0.0-13",
|
|
50
|
+
"@vltpkg/run": "0.0.0-13",
|
|
51
|
+
"@vltpkg/server": "0.0.0-13",
|
|
52
|
+
"@vltpkg/types": "0.0.0-13",
|
|
53
|
+
"@vltpkg/url-open": "0.0.0-13",
|
|
54
|
+
"@vltpkg/vlx": "0.0.0-13",
|
|
55
|
+
"@vltpkg/workspaces": "0.0.0-13",
|
|
56
|
+
"@vltpkg/xdg": "0.0.0-13"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
59
|
"@eslint/js": "^9.25.1",
|