Skip to content

Commit

Permalink
[minor] add ensureErrorClass to @augment-vir/common
Browse files Browse the repository at this point in the history
  • Loading branch information
electrovir committed Jan 31, 2025
1 parent 8b13822 commit b2f4a8e
Show file tree
Hide file tree
Showing 11 changed files with 127 additions and 48 deletions.
48 changes: 24 additions & 24 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@augment-vir/mono-repo-root",
"version": "31.8.1",
"version": "31.9.0",
"private": true,
"homepage": "https://github.com/electrovir/augment-vir",
"bugs": {
Expand Down
4 changes: 2 additions & 2 deletions packages/assert/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@augment-vir/assert",
"version": "31.8.1",
"version": "31.9.0",
"description": "A collection of assertions for test and production code alike.",
"keywords": [
"augment",
Expand Down Expand Up @@ -41,7 +41,7 @@
"test:update": "npm test"
},
"dependencies": {
"@augment-vir/core": "^31.8.1",
"@augment-vir/core": "^31.9.0",
"@date-vir/duration": "^7.1.2",
"deep-eql": "^5.0.2",
"expect-type": "^1.1.0",
Expand Down
6 changes: 3 additions & 3 deletions packages/common/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@augment-vir/common",
"version": "31.8.1",
"version": "31.9.0",
"description": "A collection of augments, helpers types, functions, and classes for any JavaScript environment.",
"keywords": [
"augment",
Expand Down Expand Up @@ -39,8 +39,8 @@
"test:web": "virmator --no-deps test web"
},
"dependencies": {
"@augment-vir/assert": "^31.8.1",
"@augment-vir/core": "^31.8.1",
"@augment-vir/assert": "^31.9.0",
"@augment-vir/core": "^31.9.0",
"@date-vir/duration": "^7.1.2",
"ansi-styles": "^6.2.1",
"json5": "^2.2.3",
Expand Down
2 changes: 1 addition & 1 deletion packages/core/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@augment-vir/core",
"version": "31.8.1",
"version": "31.9.0",
"description": "Core augment-vir augments. Use @augment-vir/common instead.",
"homepage": "https://github.com/electrovir/augment-vir",
"bugs": {
Expand Down
42 changes: 41 additions & 1 deletion packages/core/src/augments/error/ensure-error.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import {assert} from '@augment-vir/assert';
import {describe, it} from '@augment-vir/test';
import {ensureError, ensureErrorAndPrependMessage} from './ensure-error.js';
import {ensureError, ensureErrorAndPrependMessage, ensureErrorClass} from './ensure-error.js';
import {extractErrorMessage} from './error-message.js';

describe(ensureError.name, () => {
it('converts into an error', () => {
Expand Down Expand Up @@ -29,3 +30,42 @@ describe(ensureErrorAndPrependMessage.name, () => {
assert.strictEquals(prependedError, error, 'should not create a new error');
});
});

describe(ensureErrorClass.name, () => {
it('converts an error', () => {
class MyCustomError extends Error {
public override readonly name = 'MyCustomError';
}

assert.throws(
() => {
try {
throw new TypeError('derp');
} catch (error) {
throw ensureErrorClass(error, MyCustomError, extractErrorMessage(error));
}
},
{
matchConstructor: MyCustomError,
},
);
});
it('does not convert an error', () => {
class MyCustomError extends Error {
public override readonly name = 'MyCustomError';
}

assert.throws(
() => {
try {
throw new MyCustomError('derp');
} catch (error) {
throw ensureErrorClass(error, MyCustomError, extractErrorMessage(error));
}
},
{
matchConstructor: MyCustomError,
},
);
});
});
39 changes: 39 additions & 0 deletions packages/core/src/augments/error/ensure-error.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import {Constructor} from 'type-fest';
import {combineErrorMessages, extractErrorMessage} from './error-message.js';

/**
Expand Down Expand Up @@ -28,3 +29,41 @@ export function ensureErrorAndPrependMessage(maybeError: unknown, prependMessage
error.message = combineErrorMessages(prependMessage, error.message);
return error;
}

/**
* Ensures that the given `originalError` is an instance of the given `errorClass`.
*
* - If it is, `originalError` is directly returned.
* - If it is _not_, a new instance of `errorClass` is constructed with the given parameters.
*
* @category Error
* @category Package : @augment-vir/common
* @example
*
* ```ts
* import {ensureErrorClass, extractErrorMessage} from '@augment-vir/common';
*
* class MyCustomError extends Error {
* public override readonly name = 'MyCustomError';
* }
*
* try {
* // do some stuff
* } catch (error) {
* throw ensureErrorClass(error, MyCustomError, extractErrorMessage(error));
* }
* ```
*
* @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
*/
export function ensureErrorClass<const ErrorClass extends Error>(
originalError: unknown,
errorClass: Constructor<ErrorClass>,
...params: ConstructorParameters<Constructor<ErrorClass>>
): ErrorClass {
if (originalError instanceof errorClass) {
return originalError;
} else {
return new errorClass(...params);
}
}
8 changes: 4 additions & 4 deletions packages/node/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@augment-vir/node",
"version": "31.8.1",
"version": "31.9.0",
"description": "A collection of augments, helpers types, functions, and classes only for Node.js (backend) JavaScript environments.",
"keywords": [
"augment",
Expand Down Expand Up @@ -37,8 +37,8 @@
"test:update": "npm test"
},
"dependencies": {
"@augment-vir/assert": "^31.8.1",
"@augment-vir/common": "^31.8.1",
"@augment-vir/assert": "^31.9.0",
"@augment-vir/common": "^31.9.0",
"@date-vir/duration": "^7.1.2",
"ansi-styles": "^6.2.1",
"terminate": "^2.8.0",
Expand All @@ -47,7 +47,7 @@
"typed-event-target": "^4.0.2"
},
"devDependencies": {
"@augment-vir/test": "^31.8.1",
"@augment-vir/test": "^31.9.0",
"@prisma/client": "^6.3.0",
"@types/node": "^22.13.0",
"@web/dev-server-esbuild": "^1.0.3",
Expand Down
10 changes: 5 additions & 5 deletions packages/scripts/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@augment-vir/scripts",
"version": "31.8.1",
"version": "31.9.0",
"private": true,
"homepage": "https://github.com/electrovir/augment-vir",
"bugs": {
Expand All @@ -24,15 +24,15 @@
"test:update": "npm test"
},
"dependencies": {
"@augment-vir/assert": "^31.8.1",
"@augment-vir/common": "^31.8.1",
"@augment-vir/node": "^31.8.1",
"@augment-vir/assert": "^31.9.0",
"@augment-vir/common": "^31.9.0",
"@augment-vir/node": "^31.9.0",
"@virmator/docs": "^13.12.0",
"jsdom": "^26.0.0",
"typedoc": "^0.27.6"
},
"devDependencies": {
"@augment-vir/test": "^31.8.1",
"@augment-vir/test": "^31.9.0",
"@types/jsdom": "^21.1.7",
"@types/node": "^22.13.0",
"typescript": "^5.7.2"
Expand Down
6 changes: 3 additions & 3 deletions packages/test/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@augment-vir/test",
"version": "31.8.1",
"version": "31.9.0",
"description": "A universal testing suite that works with Mocha style test runners _and_ Node.js's built-in test runner.",
"keywords": [
"test",
Expand Down Expand Up @@ -42,8 +42,8 @@
"test:web": "virmator test --no-deps web 'src/test-web/**/*.test.ts' 'src/augments/universal-testing-suite/**/*.test.ts'"
},
"dependencies": {
"@augment-vir/assert": "^31.8.1",
"@augment-vir/common": "^31.8.1",
"@augment-vir/assert": "^31.9.0",
"@augment-vir/common": "^31.9.0",
"@open-wc/testing-helpers": "^3.0.1",
"@virmator/test": "^13.12.0",
"type-fest": "^4.33.0"
Expand Down
8 changes: 4 additions & 4 deletions packages/web/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@augment-vir/web",
"version": "31.8.1",
"version": "31.9.0",
"description": "A collection of augments, helpers types, functions, and classes only for web (frontend) JavaScript environments.",
"keywords": [
"augment",
Expand Down Expand Up @@ -35,14 +35,14 @@
"test:update": "npm test"
},
"dependencies": {
"@augment-vir/assert": "^31.8.1",
"@augment-vir/common": "^31.8.1",
"@augment-vir/assert": "^31.9.0",
"@augment-vir/common": "^31.9.0",
"@date-vir/duration": "^7.1.2",
"html-spec-tags": "^2.2.2",
"type-fest": "^4.33.0"
},
"devDependencies": {
"@augment-vir/test": "^31.8.1",
"@augment-vir/test": "^31.9.0",
"bowser": "^2.11.0",
"typescript": "^5.7.2"
},
Expand Down

0 comments on commit b2f4a8e

Please sign in to comment.