@pristine-ts/cli 2.0.4 → 2.0.6
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/bin/pristine.cjs +6 -2
- package/dist/lib/cjs/bin.js +18 -1
- package/dist/lib/cjs/bin.js.map +1 -1
- package/dist/lib/cjs/bootstrap/app-module-loader.js +40 -78
- package/dist/lib/cjs/bootstrap/app-module-loader.js.map +1 -1
- package/dist/lib/cjs/bootstrap/loaded-app-module.js +9 -13
- package/dist/lib/cjs/bootstrap/loaded-app-module.js.map +1 -1
- package/dist/lib/cjs/bootstrap/plugin-loader.js +3 -3
- package/dist/lib/cjs/bootstrap/plugin-loader.js.map +1 -1
- package/dist/lib/cjs/cli.js +173 -85
- package/dist/lib/cjs/cli.js.map +1 -1
- package/dist/lib/cjs/cli.module.js +24 -8
- package/dist/lib/cjs/cli.module.js.map +1 -1
- package/dist/lib/cjs/commands/build-alias.command.js.map +1 -1
- package/dist/lib/cjs/commands/build.command.js +9 -10
- package/dist/lib/cjs/commands/build.command.js.map +1 -1
- package/dist/lib/cjs/commands/config-print.command.js +1 -2
- package/dist/lib/cjs/commands/config-print.command.js.map +1 -1
- package/dist/lib/cjs/commands/help-alias.command.js.map +1 -1
- package/dist/lib/cjs/commands/help.command.js +1 -2
- package/dist/lib/cjs/commands/help.command.js.map +1 -1
- package/dist/lib/cjs/commands/info-alias.command.js.map +1 -1
- package/dist/lib/cjs/commands/info.command.js +7 -8
- package/dist/lib/cjs/commands/info.command.js.map +1 -1
- package/dist/lib/cjs/commands/init-alias.command.js.map +1 -1
- package/dist/lib/cjs/commands/init.command.js +13 -12
- package/dist/lib/cjs/commands/init.command.js.map +1 -1
- package/dist/lib/cjs/commands/list-alias.command.js.map +1 -1
- package/dist/lib/cjs/commands/list.command.js +1 -2
- package/dist/lib/cjs/commands/list.command.js.map +1 -1
- package/dist/lib/cjs/commands/start-alias.command.js.map +1 -1
- package/dist/lib/cjs/commands/start.command.js +3 -4
- package/dist/lib/cjs/commands/start.command.js.map +1 -1
- package/dist/lib/cjs/commands/verify-alias.command.js.map +1 -1
- package/dist/lib/cjs/commands/verify.command.js +3 -4
- package/dist/lib/cjs/commands/verify.command.js.map +1 -1
- package/dist/lib/cjs/config/resolved-pristine-config.js +2 -3
- package/dist/lib/cjs/config/resolved-pristine-config.js.map +1 -1
- package/dist/lib/cjs/errors/cli-error-code.enum.js +17 -0
- package/dist/lib/cjs/errors/cli-error-code.enum.js.map +1 -0
- package/dist/lib/cjs/errors/command-not-found.error.js +11 -12
- package/dist/lib/cjs/errors/command-not-found.error.js.map +1 -1
- package/dist/lib/cjs/errors/errors.js +1 -0
- package/dist/lib/cjs/errors/errors.js.map +1 -1
- package/dist/lib/cjs/event-handlers/cli.event-handler.js +28 -20
- package/dist/lib/cjs/event-handlers/cli.event-handler.js.map +1 -1
- package/dist/lib/cjs/reporters/cli-error.reporter.js +121 -0
- package/dist/lib/cjs/reporters/cli-error.reporter.js.map +1 -0
- package/dist/lib/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/lib/cjs/types/command-event-response.type.js.map +1 -1
- package/dist/lib/esm/bin.js +18 -1
- package/dist/lib/esm/bin.js.map +1 -1
- package/dist/lib/esm/bootstrap/app-module-loader.js +40 -78
- package/dist/lib/esm/bootstrap/app-module-loader.js.map +1 -1
- package/dist/lib/esm/bootstrap/loaded-app-module.js +9 -13
- package/dist/lib/esm/bootstrap/loaded-app-module.js.map +1 -1
- package/dist/lib/esm/bootstrap/plugin-loader.js +3 -3
- package/dist/lib/esm/bootstrap/plugin-loader.js.map +1 -1
- package/dist/lib/esm/cli.js +172 -84
- package/dist/lib/esm/cli.js.map +1 -1
- package/dist/lib/esm/cli.module.js +24 -8
- package/dist/lib/esm/cli.module.js.map +1 -1
- package/dist/lib/esm/commands/build-alias.command.js.map +1 -1
- package/dist/lib/esm/commands/build.command.js +10 -11
- package/dist/lib/esm/commands/build.command.js.map +1 -1
- package/dist/lib/esm/commands/config-print.command.js +2 -3
- package/dist/lib/esm/commands/config-print.command.js.map +1 -1
- package/dist/lib/esm/commands/help-alias.command.js.map +1 -1
- package/dist/lib/esm/commands/help.command.js +2 -3
- package/dist/lib/esm/commands/help.command.js.map +1 -1
- package/dist/lib/esm/commands/info-alias.command.js.map +1 -1
- package/dist/lib/esm/commands/info.command.js +8 -9
- package/dist/lib/esm/commands/info.command.js.map +1 -1
- package/dist/lib/esm/commands/init-alias.command.js.map +1 -1
- package/dist/lib/esm/commands/init.command.js +14 -13
- package/dist/lib/esm/commands/init.command.js.map +1 -1
- package/dist/lib/esm/commands/list-alias.command.js.map +1 -1
- package/dist/lib/esm/commands/list.command.js +2 -3
- package/dist/lib/esm/commands/list.command.js.map +1 -1
- package/dist/lib/esm/commands/start-alias.command.js.map +1 -1
- package/dist/lib/esm/commands/start.command.js +4 -5
- package/dist/lib/esm/commands/start.command.js.map +1 -1
- package/dist/lib/esm/commands/verify-alias.command.js.map +1 -1
- package/dist/lib/esm/commands/verify.command.js +4 -5
- package/dist/lib/esm/commands/verify.command.js.map +1 -1
- package/dist/lib/esm/config/resolved-pristine-config.js +2 -3
- package/dist/lib/esm/config/resolved-pristine-config.js.map +1 -1
- package/dist/lib/esm/errors/cli-error-code.enum.js +14 -0
- package/dist/lib/esm/errors/cli-error-code.enum.js.map +1 -0
- package/dist/lib/esm/errors/command-not-found.error.js +12 -13
- package/dist/lib/esm/errors/command-not-found.error.js.map +1 -1
- package/dist/lib/esm/errors/errors.js +1 -0
- package/dist/lib/esm/errors/errors.js.map +1 -1
- package/dist/lib/esm/event-handlers/cli.event-handler.js +29 -21
- package/dist/lib/esm/event-handlers/cli.event-handler.js.map +1 -1
- package/dist/lib/esm/reporters/cli-error.reporter.js +118 -0
- package/dist/lib/esm/reporters/cli-error.reporter.js.map +1 -0
- package/dist/lib/esm/tsconfig.tsbuildinfo +1 -1
- package/dist/lib/esm/types/command-event-response.type.js.map +1 -1
- package/dist/types/bin.d.ts +1 -0
- package/dist/types/bootstrap/app-module-loader.d.ts +24 -25
- package/dist/types/bootstrap/loaded-app-module.d.ts +12 -26
- package/dist/types/bootstrap/plugin-loader.d.ts +1 -1
- package/dist/types/cli.d.ts +69 -9
- package/dist/types/cli.module.d.ts +2 -2
- package/dist/types/commands/build-alias.command.d.ts +2 -2
- package/dist/types/commands/build.command.d.ts +2 -2
- package/dist/types/commands/config-print.command.d.ts +2 -2
- package/dist/types/commands/help-alias.command.d.ts +2 -2
- package/dist/types/commands/help.command.d.ts +2 -2
- package/dist/types/commands/info-alias.command.d.ts +2 -2
- package/dist/types/commands/info.command.d.ts +2 -2
- package/dist/types/commands/init-alias.command.d.ts +2 -2
- package/dist/types/commands/init.command.d.ts +2 -2
- package/dist/types/commands/list-alias.command.d.ts +2 -2
- package/dist/types/commands/list.command.d.ts +2 -2
- package/dist/types/commands/start-alias.command.d.ts +2 -2
- package/dist/types/commands/start.command.d.ts +2 -2
- package/dist/types/commands/verify-alias.command.d.ts +2 -2
- package/dist/types/commands/verify.command.d.ts +2 -2
- package/dist/types/config/pristine-config.interface.d.ts +38 -12
- package/dist/types/config/resolved-pristine-config.d.ts +4 -6
- package/dist/types/errors/cli-error-code.enum.d.ts +12 -0
- package/dist/types/errors/command-not-found.error.d.ts +8 -7
- package/dist/types/errors/errors.d.ts +1 -0
- package/dist/types/event-handlers/cli.event-handler.d.ts +4 -19
- package/dist/types/interfaces/command.interface.d.ts +2 -2
- package/dist/types/reporters/cli-error.reporter.d.ts +45 -0
- package/dist/types/types/command-event-response.type.d.ts +2 -2
- package/package.json +9 -9
- package/dist/lib/cjs/enums/enums.js +0 -18
- package/dist/lib/cjs/enums/enums.js.map +0 -1
- package/dist/lib/cjs/enums/exit-code.enum.js +0 -9
- package/dist/lib/cjs/enums/exit-code.enum.js.map +0 -1
- package/dist/lib/esm/enums/enums.js +0 -2
- package/dist/lib/esm/enums/enums.js.map +0 -1
- package/dist/lib/esm/enums/exit-code.enum.js +0 -6
- package/dist/lib/esm/enums/exit-code.enum.js.map +0 -1
- package/dist/types/enums/enums.d.ts +0 -1
- package/dist/types/enums/exit-code.enum.d.ts +0 -4
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { injectable } from "tsyringe";
|
|
11
|
+
import { ExitCode, PristineError, PristineErrorKind, } from "@pristine-ts/common";
|
|
12
|
+
import { EnvironmentManager, PristineEnvironment } from "@pristine-ts/core";
|
|
13
|
+
/**
|
|
14
|
+
* Renders any thrown value to stderr and returns an appropriate process exit code.
|
|
15
|
+
* Counterpart to networking's `HttpErrorResponder`: same `PristineError`-based contract,
|
|
16
|
+
* different channel.
|
|
17
|
+
*
|
|
18
|
+
* **Production mode** (default): one-line `✗ CODE: message` for `UserError`s; a generic
|
|
19
|
+
* `Internal Error` for `SystemError`s (raw `Error`s, third-party throws). No stack
|
|
20
|
+
* trace, no cause chain.
|
|
21
|
+
*
|
|
22
|
+
* **Development mode** (`pristine.environment = dev`, env override
|
|
23
|
+
* `PRISTINE_ENV=dev`): full message even for system errors, structured details
|
|
24
|
+
* printed below, stack trace and cause chain appended at the end. Useful when debugging
|
|
25
|
+
* locally.
|
|
26
|
+
*
|
|
27
|
+
* Exit code selection: `error.options.exitCode` wins when present. Otherwise:
|
|
28
|
+
* `ExitCode.Error` (1) for user errors, `ExitCode.Software` (70) for system errors —
|
|
29
|
+
* both follow `sysexits.h` conventions.
|
|
30
|
+
*
|
|
31
|
+
* **Environment source**: `EnvironmentManager` is injected, not read from `process.env`
|
|
32
|
+
* directly. For the bin script's pre-DI fallback (kernel-boot failures), `bootstrap()`
|
|
33
|
+
* builds the manager from the configuration that `AppModuleLoader.load()` produced — same
|
|
34
|
+
* `pristine.environment` value that would have reached DI if the kernel had started. No
|
|
35
|
+
* code path reads `process.env` directly; env-var input enters exclusively through the
|
|
36
|
+
* `EnvironmentVariableResolver` registered on `CoreModule`'s configuration definitions.
|
|
37
|
+
*
|
|
38
|
+
* **Crash-isolated**: every stderr write is wrapped — if stderr is closed/broken, we
|
|
39
|
+
* still return an exit code rather than throwing back into the bin's catch handler.
|
|
40
|
+
*/
|
|
41
|
+
let CliErrorReporter = class CliErrorReporter {
|
|
42
|
+
constructor(environmentManager) {
|
|
43
|
+
this.environmentManager = environmentManager;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Writes the error to stderr and returns the exit code the caller should pass to
|
|
47
|
+
* `process.exit`. The bin script wraps `bootstrap().catch(err => process.exit(reporter.report(err)))`.
|
|
48
|
+
*/
|
|
49
|
+
report(error) {
|
|
50
|
+
var _a, _b;
|
|
51
|
+
const e = PristineError.from(error);
|
|
52
|
+
const isDev = this.environmentManager.getEnvironment() === PristineEnvironment.Development;
|
|
53
|
+
const isUserError = e.options.kind !== PristineErrorKind.SystemError;
|
|
54
|
+
// Headline: in production, system errors get a generic message so we don't dump
|
|
55
|
+
// internal-bug messages to the user. User errors always show their own message.
|
|
56
|
+
const headline = isUserError || isDev ? e.message : "Internal Error";
|
|
57
|
+
const code = (_a = e.options.code) !== null && _a !== void 0 ? _a : "ERROR";
|
|
58
|
+
this.write(`✗ ${code}: ${headline}\n`);
|
|
59
|
+
// Details: per-error-class structured fields. Surfaced for user errors always, for
|
|
60
|
+
// system errors only in dev (helps debugging without leaking in prod CI logs).
|
|
61
|
+
if (e.options.details && (isUserError || isDev)) {
|
|
62
|
+
for (const [k, v] of Object.entries(e.options.details)) {
|
|
63
|
+
const rendered = typeof v === "string" ? v : this.safeStringify(v);
|
|
64
|
+
this.write(` ${k}: ${rendered}\n`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Stack + cause chain are dev-only. Production stderr stays clean.
|
|
68
|
+
if (isDev) {
|
|
69
|
+
if (e.stack) {
|
|
70
|
+
this.write(`\n${e.stack}\n`);
|
|
71
|
+
}
|
|
72
|
+
let current = e.cause;
|
|
73
|
+
let depth = 0;
|
|
74
|
+
while (current instanceof Error && depth < 10) {
|
|
75
|
+
this.write(`\ncaused by: ${current.name}: ${current.message}\n`);
|
|
76
|
+
if (current.stack)
|
|
77
|
+
this.write(`${current.stack}\n`);
|
|
78
|
+
current = current.cause;
|
|
79
|
+
depth++;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Exit code fallback: ExitCode.Error (1) for user errors, ExitCode.Software (70)
|
|
83
|
+
// for system errors. Both follow sysexits.h conventions.
|
|
84
|
+
return (_b = e.options.exitCode) !== null && _b !== void 0 ? _b : (isUserError ? ExitCode.Error : ExitCode.Software);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Wraps `process.stderr.write` so a broken stderr (closed pipe, etc.) doesn't itself
|
|
88
|
+
* throw and confuse the bin's outer `.catch`. The exit code is the only thing that
|
|
89
|
+
* matters when stderr is dead.
|
|
90
|
+
*/
|
|
91
|
+
write(text) {
|
|
92
|
+
try {
|
|
93
|
+
process.stderr.write(text);
|
|
94
|
+
}
|
|
95
|
+
catch (_a) {
|
|
96
|
+
// Nothing useful to do if stderr is unwritable.
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
safeStringify(value) {
|
|
100
|
+
try {
|
|
101
|
+
return JSON.stringify(value);
|
|
102
|
+
}
|
|
103
|
+
catch (_a) {
|
|
104
|
+
try {
|
|
105
|
+
return String(value);
|
|
106
|
+
}
|
|
107
|
+
catch (_b) {
|
|
108
|
+
return "[unrepresentable]";
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
CliErrorReporter = __decorate([
|
|
114
|
+
injectable(),
|
|
115
|
+
__metadata("design:paramtypes", [EnvironmentManager])
|
|
116
|
+
], CliErrorReporter);
|
|
117
|
+
export { CliErrorReporter };
|
|
118
|
+
//# sourceMappingURL=cli-error.reporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-error.reporter.js","sourceRoot":"","sources":["../../../../src/reporters/cli-error.reporter.ts"],"names":[],"mappings":"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"}
|