From 1e64a1ada60545adf8e7c99fbd1f8766cf2416f9 Mon Sep 17 00:00:00 2001 From: Lars Mikkelsen Date: Wed, 8 Nov 2023 10:42:02 -0500 Subject: [PATCH 1/2] revert: use native ES2022 error cause (#5060) This reverts commit 0c4cd0f47e00b43e8c0ce4eef072351a846b566c. --- packages/@ionic/cli-framework/src/errors.ts | 17 ++++++++++++++++- packages/@ionic/cli/src/index.ts | 7 +++++-- packages/@ionic/cli/src/lib/project/index.ts | 6 +++--- packages/@ionic/utils-subprocess/src/index.ts | 14 ++++++++++++-- tsconfig.base.json | 3 +-- 5 files changed, 37 insertions(+), 10 deletions(-) diff --git a/packages/@ionic/cli-framework/src/errors.ts b/packages/@ionic/cli-framework/src/errors.ts index 262cc26038..375f3b0b12 100644 --- a/packages/@ionic/cli-framework/src/errors.ts +++ b/packages/@ionic/cli-framework/src/errors.ts @@ -1,3 +1,4 @@ +import * as lodash from 'lodash'; import * as util from 'util'; import { ValidationError } from './definitions'; @@ -9,11 +10,25 @@ export const ERROR_IPC_UNKNOWN_PROCEDURE = 'ERR_ICF_IPC_UNKNOWN_PROCEDURE'; export abstract class BaseError extends Error { abstract readonly name: string; + message: string; + stack: string; code?: string; + error?: Error; exitCode?: number; + constructor(message: string) { + super(message); + this.message = message; + this.stack = (new Error()).stack || ''; + } + toString(): string { - return util.inspect(this); + const repr = lodash.pick(this, lodash.pull(lodash.keys(this), 'error')); + + return ( + `${this.name}: ${this.message} ${util.inspect(repr, { breakLength: Infinity })} ${this.stack} ` + + `${this.error ? `\nWrapped: ${this.error.stack ? this.error.stack : this.error}` : ''}` + ); } inspect(): string { diff --git a/packages/@ionic/cli/src/index.ts b/packages/@ionic/cli/src/index.ts index 9b72945baf..fd9be4481a 100644 --- a/packages/@ionic/cli/src/index.ts +++ b/packages/@ionic/cli/src/index.ts @@ -3,7 +3,6 @@ import { readPackageJsonFile } from '@ionic/cli-framework/utils/node'; import { processExit } from '@ionic/utils-process'; import * as Debug from 'debug'; import * as path from 'path'; -import * as util from 'util'; import { IonicNamespace } from './commands'; import { IPCMessage, IonicContext, IonicEnvironment } from './definitions'; @@ -172,7 +171,11 @@ export async function run(pargv: string[]): Promise { } else if (err instanceof BaseError) { ienv.log.error(err.message); } else { - ienv.log.rawmsg(failure(util.inspect(err))); + ienv.log.msg(failure(String(err.stack ? err.stack : err))); + + if (err.stack) { + debug(failure(String(err.stack))); + } } } } diff --git a/packages/@ionic/cli/src/lib/project/index.ts b/packages/@ionic/cli/src/lib/project/index.ts index 77449ca6dd..6a1bfa7d62 100644 --- a/packages/@ionic/cli/src/lib/project/index.ts +++ b/packages/@ionic/cli/src/lib/project/index.ts @@ -55,9 +55,9 @@ export class ProjectDetailsError extends BaseException { /** * The underlying error that caused this error. */ - cause?: Error + readonly error?: Error ) { - super(msg, { cause }); + super(msg); } } @@ -193,7 +193,7 @@ export class ProjectDetails { if (e1) { log.error( `Error while loading config (project config: ${strong(prettyPath(result.configPath))})\n` + - `${e1.cause ? `${e1.message}: ${failure(e1.cause.toString())}` : failure(e1.message)}. ` + + `${e1.error ? `${e1.message}: ${failure(e1.error.toString())}` : failure(e1.message)}. ` + `Run ${input('ionic init')} to re-initialize your Ionic project. Without a valid project config, the CLI will not have project context.` ); diff --git a/packages/@ionic/utils-subprocess/src/index.ts b/packages/@ionic/utils-subprocess/src/index.ts index 0ff8bb63bb..360762d533 100644 --- a/packages/@ionic/utils-subprocess/src/index.ts +++ b/packages/@ionic/utils-subprocess/src/index.ts @@ -35,11 +35,20 @@ export function convertPATH(path = process.env.PATH || ''): string { export class SubprocessError extends Error { readonly name = 'SubprocessError'; + message: string; + stack: string; code?: typeof ERROR_COMMAND_NOT_FOUND | typeof ERROR_NON_ZERO_EXIT | typeof ERROR_SIGNAL_EXIT; + error?: Error; output?: string; signal?: string; exitCode?: number; + + constructor(message: string) { + super(message); + this.message = message; + this.stack = (new Error()).stack || ''; + } } export interface SubprocessOptions extends SpawnOptions {} @@ -163,12 +172,13 @@ export class Subprocess { let err: SubprocessError; if (error.code === 'ENOENT') { - err = new SubprocessError('Command not found.', { cause: error }); + err = new SubprocessError('Command not found.'); err.code = ERROR_COMMAND_NOT_FOUND; } else { - err = new SubprocessError('Command error.', { cause: error }); + err = new SubprocessError('Command error.'); } + err.error = error; reject(err); }); diff --git a/tsconfig.base.json b/tsconfig.base.json index 282786c623..eb7ce3b6e2 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -12,8 +12,7 @@ "target": "ES2021", "types": [], "lib": [ - "ES2021", - "ES2022.Error" + "ES2021" ] } } From b06ab3ca04be19b1e6585ad83008f55791165a49 Mon Sep 17 00:00:00 2001 From: Ionitron Date: Wed, 8 Nov 2023 15:50:07 +0000 Subject: [PATCH 2/2] chore(release): publish [skip ci] - @ionic/cli-framework@5.1.7 - @ionic/cli@7.1.4 - @ionic/utils-subprocess@2.1.14 - cli-scripts@2.1.71 --- packages/@ionic/cli-framework/CHANGELOG.md | 11 +++++++++++ packages/@ionic/cli-framework/package.json | 4 ++-- packages/@ionic/cli/CHANGELOG.md | 11 +++++++++++ packages/@ionic/cli/package.json | 6 +++--- packages/@ionic/utils-subprocess/CHANGELOG.md | 11 +++++++++++ packages/@ionic/utils-subprocess/package.json | 2 +- packages/cli-scripts/CHANGELOG.md | 8 ++++++++ packages/cli-scripts/package.json | 6 +++--- 8 files changed, 50 insertions(+), 9 deletions(-) diff --git a/packages/@ionic/cli-framework/CHANGELOG.md b/packages/@ionic/cli-framework/CHANGELOG.md index 5cba7ce7f2..05d6cf3e53 100644 --- a/packages/@ionic/cli-framework/CHANGELOG.md +++ b/packages/@ionic/cli-framework/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.1.7](https://github.com/ionic-team/ionic-cli/compare/@ionic/cli-framework@5.1.6...@ionic/cli-framework@5.1.7) (2023-11-08) + + +### Reverts + +* use native ES2022 error cause ([#5060](https://github.com/ionic-team/ionic-cli/issues/5060)) ([1e64a1a](https://github.com/ionic-team/ionic-cli/commit/1e64a1ada60545adf8e7c99fbd1f8766cf2416f9)) + + + + + ## [5.1.6](https://github.com/ionic-team/ionic-cli/compare/@ionic/cli-framework@5.1.5...@ionic/cli-framework@5.1.6) (2023-11-07) **Note:** Version bump only for package @ionic/cli-framework diff --git a/packages/@ionic/cli-framework/package.json b/packages/@ionic/cli-framework/package.json index 42df0c4850..f627503cc8 100644 --- a/packages/@ionic/cli-framework/package.json +++ b/packages/@ionic/cli-framework/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/cli-framework", - "version": "5.1.6", + "version": "5.1.7", "description": "The foundation framework of the Ionic CLI", "homepage": "https://ionicframework.com/", "author": "Ionic Team (https://ionicframework.com) ", @@ -32,7 +32,7 @@ "@ionic/utils-object": "2.1.6", "@ionic/utils-process": "2.1.11", "@ionic/utils-stream": "3.1.6", - "@ionic/utils-subprocess": "2.1.13", + "@ionic/utils-subprocess": "2.1.14", "@ionic/utils-terminal": "2.3.4", "chalk": "^4.0.0", "debug": "^4.0.0", diff --git a/packages/@ionic/cli/CHANGELOG.md b/packages/@ionic/cli/CHANGELOG.md index 3dc465dcd6..3a75d63264 100644 --- a/packages/@ionic/cli/CHANGELOG.md +++ b/packages/@ionic/cli/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [7.1.4](https://github.com/ionic-team/ionic-cli/compare/@ionic/cli@7.1.3...@ionic/cli@7.1.4) (2023-11-08) + + +### Reverts + +* use native ES2022 error cause ([#5060](https://github.com/ionic-team/ionic-cli/issues/5060)) ([1e64a1a](https://github.com/ionic-team/ionic-cli/commit/1e64a1ada60545adf8e7c99fbd1f8766cf2416f9)) + + + + + ## [7.1.3](https://github.com/ionic-team/ionic-cli/compare/@ionic/cli@7.1.2...@ionic/cli@7.1.3) (2023-11-07) **Note:** Version bump only for package @ionic/cli diff --git a/packages/@ionic/cli/package.json b/packages/@ionic/cli/package.json index 7a511414de..af92027659 100644 --- a/packages/@ionic/cli/package.json +++ b/packages/@ionic/cli/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/cli", - "version": "7.1.3", + "version": "7.1.4", "description": "A tool for creating and developing Ionic Framework mobile apps.", "homepage": "https://ionicframework.com", "author": "Ionic Team (https://ionicframework.com) ", @@ -40,7 +40,7 @@ }, "license": "MIT", "dependencies": { - "@ionic/cli-framework": "5.1.6", + "@ionic/cli-framework": "5.1.7", "@ionic/cli-framework-output": "2.2.7", "@ionic/cli-framework-prompts": "2.1.12", "@ionic/utils-array": "2.1.6", @@ -48,7 +48,7 @@ "@ionic/utils-network": "2.1.6", "@ionic/utils-process": "2.1.11", "@ionic/utils-stream": "3.1.6", - "@ionic/utils-subprocess": "2.1.13", + "@ionic/utils-subprocess": "2.1.14", "@ionic/utils-terminal": "2.3.4", "chalk": "^4.0.0", "debug": "^4.0.0", diff --git a/packages/@ionic/utils-subprocess/CHANGELOG.md b/packages/@ionic/utils-subprocess/CHANGELOG.md index cb576e5812..2be7613ad6 100644 --- a/packages/@ionic/utils-subprocess/CHANGELOG.md +++ b/packages/@ionic/utils-subprocess/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.1.14](https://github.com/ionic-team/ionic-cli/compare/@ionic/utils-subprocess@2.1.13...@ionic/utils-subprocess@2.1.14) (2023-11-08) + + +### Reverts + +* use native ES2022 error cause ([#5060](https://github.com/ionic-team/ionic-cli/issues/5060)) ([1e64a1a](https://github.com/ionic-team/ionic-cli/commit/1e64a1ada60545adf8e7c99fbd1f8766cf2416f9)) + + + + + ## [2.1.13](https://github.com/ionic-team/ionic-cli/compare/@ionic/utils-subprocess@2.1.12...@ionic/utils-subprocess@2.1.13) (2023-11-07) diff --git a/packages/@ionic/utils-subprocess/package.json b/packages/@ionic/utils-subprocess/package.json index ded06ab4a0..e6d19ce74e 100644 --- a/packages/@ionic/utils-subprocess/package.json +++ b/packages/@ionic/utils-subprocess/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/utils-subprocess", - "version": "2.1.13", + "version": "2.1.14", "description": "Subprocess utils for NodeJS", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/cli-scripts/CHANGELOG.md b/packages/cli-scripts/CHANGELOG.md index e2599b9313..8f2706924a 100644 --- a/packages/cli-scripts/CHANGELOG.md +++ b/packages/cli-scripts/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.1.71](https://github.com/ionic-team/ionic-cli/compare/cli-scripts@2.1.70...cli-scripts@2.1.71) (2023-11-08) + +**Note:** Version bump only for package cli-scripts + + + + + ## [2.1.70](https://github.com/ionic-team/ionic-cli/compare/cli-scripts@2.1.69...cli-scripts@2.1.70) (2023-11-07) **Note:** Version bump only for package cli-scripts diff --git a/packages/cli-scripts/package.json b/packages/cli-scripts/package.json index 5c0f765518..c2c08f1e75 100644 --- a/packages/cli-scripts/package.json +++ b/packages/cli-scripts/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "cli-scripts", - "version": "2.1.70", + "version": "2.1.71", "bin": { "ionic-cli-scripts": "./bin/ionic-cli-scripts" }, @@ -16,8 +16,8 @@ "main": "./dist/index.js", "types": "./dist/index.d.ts", "dependencies": { - "@ionic/cli": "7.1.3", - "@ionic/cli-framework": "5.1.6", + "@ionic/cli": "7.1.4", + "@ionic/cli-framework": "5.1.7", "@ionic/utils-fs": "3.1.7", "ansi-styles": "^4.0.0", "chalk": "^4.0.0",