assert-never
Advanced tools
Comparing version 1.2.1 to 1.3.0
@@ -1,27 +0,4 @@ | ||
/** | ||
* Helper function for exhaustive checks of discriminated unions. | ||
* https://basarat.gitbooks.io/typescript/docs/types/discriminated-unions.html | ||
* | ||
* @example | ||
* | ||
* type A = {type: 'a'}; | ||
* type B = {type: 'b'}; | ||
* type Union = A | B; | ||
* | ||
* function doSomething(arg: Union) { | ||
* if (arg.type === 'a') { | ||
* return something; | ||
* } | ||
* | ||
* if (arg.type === 'b') { | ||
* return somethingElse; | ||
* } | ||
* | ||
* // TS will error if there are other types in the union | ||
* // Will throw an Error when called at runtime. | ||
* // Use `assertNever(arg, true)` instead to fail silently. | ||
* return assertNever(arg); | ||
* } | ||
*/ | ||
export declare function assertNever(value: never, errorMessage?: string): never; | ||
export declare function assertNever(value: never, getErrorMessage?: (value: unknown) => string): never; | ||
export declare function assertNever(value: never, noThrow?: boolean): never; | ||
export default assertNever; |
14
index.js
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.assertNever = assertNever; | ||
/** | ||
@@ -28,9 +29,14 @@ * Helper function for exhaustive checks of discriminated unions. | ||
*/ | ||
function assertNever(value, noThrow) { | ||
if (noThrow) { | ||
function assertNever(value, errorMessageOrNoThrow) { | ||
if (typeof errorMessageOrNoThrow === 'string') { | ||
throw new Error(errorMessageOrNoThrow); | ||
} | ||
if (typeof errorMessageOrNoThrow === 'function') { | ||
throw new Error(errorMessageOrNoThrow(value)); | ||
} | ||
if (errorMessageOrNoThrow) { | ||
return value; | ||
} | ||
throw new Error("Unhandled discriminated union member: " + JSON.stringify(value)); | ||
throw new Error("Unhandled discriminated union member: ".concat(JSON.stringify(value))); | ||
} | ||
exports.assertNever = assertNever; | ||
exports.default = assertNever; |
16
index.ts
@@ -0,1 +1,5 @@ | ||
export function assertNever(value: never, errorMessage?: string): never | ||
export function assertNever(value: never, getErrorMessage?: (value: unknown) => string): never | ||
export function assertNever(value: never, noThrow?: boolean): never | ||
/** | ||
@@ -26,4 +30,12 @@ * Helper function for exhaustive checks of discriminated unions. | ||
*/ | ||
export function assertNever(value: never, noThrow?: boolean): never { | ||
if (noThrow) { | ||
export function assertNever(value: never, errorMessageOrNoThrow?: string | ((value: unknown) => string) | boolean): never { | ||
if (typeof errorMessageOrNoThrow === 'string') { | ||
throw new Error(errorMessageOrNoThrow) | ||
} | ||
if (typeof errorMessageOrNoThrow === 'function') { | ||
throw new Error(errorMessageOrNoThrow(value)) | ||
} | ||
if (errorMessageOrNoThrow) { | ||
return value | ||
@@ -30,0 +42,0 @@ } |
{ | ||
"name": "assert-never", | ||
"version": "1.2.1", | ||
"version": "1.3.0", | ||
"description": "Helper function for exhaustive checks of discriminated unions in TypeScript", | ||
@@ -14,3 +14,4 @@ "main": "index.js", | ||
"build": "tsc", | ||
"prepublish": "npm run build" | ||
"prepublish": "npm run build && npm test", | ||
"test": "jest" | ||
}, | ||
@@ -27,4 +28,11 @@ "keywords": [ | ||
"devDependencies": { | ||
"typescript": "^2.2.1" | ||
"@babel/core": "^7.24.7", | ||
"@babel/preset-env": "^7.24.7", | ||
"@babel/preset-typescript": "^7.24.7", | ||
"@types/jest": "^29.5.12", | ||
"babel-jest": "^29.7.0", | ||
"jest": "^29.7.0", | ||
"type-assertions": "^1.1.0", | ||
"typescript": "^5.5.3" | ||
} | ||
} |
@@ -39,2 +39,2 @@ # Assert Never [![npm version][npm-image]][npm-url] | ||
[npm-url]: https://badge.fury.io/js/assert-never | ||
[exhaustive-checks]: https://basarat.gitbooks.io/typescript/docs/types/discriminated-unions.html#exhaustive-checks | ||
[exhaustive-checks]: https://basarat.gitbook.io/typescript/type-system/discriminated-unions#exhaustive-checks |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
4701
8
88