File tree Expand file tree Collapse file tree 5 files changed +37
-10
lines changed Expand file tree Collapse file tree 5 files changed +37
-10
lines changed Original file line number Diff line number Diff line change
1
+ import * as lodash from 'lodash' ;
1
2
import * as util from 'util' ;
2
3
3
4
import { ValidationError } from './definitions' ;
@@ -9,11 +10,25 @@ export const ERROR_IPC_UNKNOWN_PROCEDURE = 'ERR_ICF_IPC_UNKNOWN_PROCEDURE';
9
10
10
11
export abstract class BaseError extends Error {
11
12
abstract readonly name : string ;
13
+ message : string ;
14
+ stack : string ;
12
15
code ?: string ;
16
+ error ?: Error ;
13
17
exitCode ?: number ;
14
18
19
+ constructor ( message : string ) {
20
+ super ( message ) ;
21
+ this . message = message ;
22
+ this . stack = ( new Error ( ) ) . stack || '' ;
23
+ }
24
+
15
25
toString ( ) : string {
16
- return util . inspect ( this ) ;
26
+ const repr = lodash . pick ( this , lodash . pull ( lodash . keys ( this ) , 'error' ) ) ;
27
+
28
+ return (
29
+ `${ this . name } : ${ this . message } ${ util . inspect ( repr , { breakLength : Infinity } ) } ${ this . stack } ` +
30
+ `${ this . error ? `\nWrapped: ${ this . error . stack ? this . error . stack : this . error } ` : '' } `
31
+ ) ;
17
32
}
18
33
19
34
inspect ( ) : string {
Original file line number Diff line number Diff line change @@ -3,7 +3,6 @@ import { readPackageJsonFile } from '@ionic/cli-framework/utils/node';
3
3
import { processExit } from '@ionic/utils-process' ;
4
4
import * as Debug from 'debug' ;
5
5
import * as path from 'path' ;
6
- import * as util from 'util' ;
7
6
8
7
import { IonicNamespace } from './commands' ;
9
8
import { IPCMessage , IonicContext , IonicEnvironment } from './definitions' ;
@@ -172,7 +171,11 @@ export async function run(pargv: string[]): Promise<void> {
172
171
} else if ( err instanceof BaseError ) {
173
172
ienv . log . error ( err . message ) ;
174
173
} else {
175
- ienv . log . rawmsg ( failure ( util . inspect ( err ) ) ) ;
174
+ ienv . log . msg ( failure ( String ( err . stack ? err . stack : err ) ) ) ;
175
+
176
+ if ( err . stack ) {
177
+ debug ( failure ( String ( err . stack ) ) ) ;
178
+ }
176
179
}
177
180
}
178
181
}
Original file line number Diff line number Diff line change @@ -55,9 +55,9 @@ export class ProjectDetailsError extends BaseException {
55
55
/**
56
56
* The underlying error that caused this error.
57
57
*/
58
- cause ?: Error
58
+ readonly error ?: Error
59
59
) {
60
- super ( msg , { cause } ) ;
60
+ super ( msg ) ;
61
61
}
62
62
}
63
63
@@ -193,7 +193,7 @@ export class ProjectDetails {
193
193
if ( e1 ) {
194
194
log . error (
195
195
`Error while loading config (project config: ${ strong ( prettyPath ( result . configPath ) ) } )\n` +
196
- `${ e1 . cause ? `${ e1 . message } : ${ failure ( e1 . cause . toString ( ) ) } ` : failure ( e1 . message ) } . ` +
196
+ `${ e1 . error ? `${ e1 . message } : ${ failure ( e1 . error . toString ( ) ) } ` : failure ( e1 . message ) } . ` +
197
197
`Run ${ input ( 'ionic init' ) } to re-initialize your Ionic project. Without a valid project config, the CLI will not have project context.`
198
198
) ;
199
199
Original file line number Diff line number Diff line change @@ -35,11 +35,20 @@ export function convertPATH(path = process.env.PATH || ''): string {
35
35
36
36
export class SubprocessError extends Error {
37
37
readonly name = 'SubprocessError' ;
38
+ message : string ;
39
+ stack : string ;
38
40
39
41
code ?: typeof ERROR_COMMAND_NOT_FOUND | typeof ERROR_NON_ZERO_EXIT | typeof ERROR_SIGNAL_EXIT ;
42
+ error ?: Error ;
40
43
output ?: string ;
41
44
signal ?: string ;
42
45
exitCode ?: number ;
46
+
47
+ constructor ( message : string ) {
48
+ super ( message ) ;
49
+ this . message = message ;
50
+ this . stack = ( new Error ( ) ) . stack || '' ;
51
+ }
43
52
}
44
53
45
54
export interface SubprocessOptions extends SpawnOptions { }
@@ -163,12 +172,13 @@ export class Subprocess {
163
172
let err : SubprocessError ;
164
173
165
174
if ( error . code === 'ENOENT' ) {
166
- err = new SubprocessError ( 'Command not found.' , { cause : error } ) ;
175
+ err = new SubprocessError ( 'Command not found.' ) ;
167
176
err . code = ERROR_COMMAND_NOT_FOUND ;
168
177
} else {
169
- err = new SubprocessError ( 'Command error.' , { cause : error } ) ;
178
+ err = new SubprocessError ( 'Command error.' ) ;
170
179
}
171
180
181
+ err . error = error ;
172
182
reject ( err ) ;
173
183
} ) ;
174
184
Original file line number Diff line number Diff line change 12
12
"target" : " ES2021" ,
13
13
"types" : [],
14
14
"lib" : [
15
- " ES2021" ,
16
- " ES2022.Error"
15
+ " ES2021"
17
16
]
18
17
}
19
18
}
You can’t perform that action at this time.
0 commit comments