@syncot/error
Advanced tools
Comparing version 0.0.2 to 0.0.3
@@ -7,9 +7,15 @@ export interface ErrorDetails { | ||
} | ||
export interface SyncOtError extends Error { | ||
export interface CustomError extends Error { | ||
cause?: Error; | ||
[key: string]: any; | ||
} | ||
export declare function createSyncOtError(name: string, message: string, cause?: Error): SyncOtError; | ||
export declare function createSyncOtError(message: string, cause?: Error): SyncOtError; | ||
export declare function createSyncOtError(details?: ErrorDetails): SyncOtError; | ||
/** | ||
* Creates a new Error instance with the specified properties. | ||
* Additionally, `cause.message` is automatically appended to the new error's `message`. | ||
*/ | ||
export declare function createError(details?: ErrorDetails): CustomError; | ||
/** | ||
* A SyncOtError is a CustomError with the `name` matching the regex /^SyncOtError($| )/. | ||
*/ | ||
export declare type SyncOtError = CustomError; | ||
export declare function isSyncOtError(error: any): error is SyncOtError; | ||
@@ -19,3 +25,3 @@ export interface TsonError extends Error { | ||
} | ||
export declare function createTsonError(message: string): TsonError; | ||
export declare function createTsonError(message?: string): TsonError; | ||
export declare function isTsonError(error: any): error is TsonError; | ||
@@ -45,3 +51,3 @@ export interface InvalidEntityError extends Error { | ||
} | ||
export declare function createNoServiceError(message: string): NoServiceError; | ||
export declare function createNoServiceError(message?: string): NoServiceError; | ||
export declare function isNoServiceError(error: any): error is NoServiceError; | ||
@@ -51,3 +57,3 @@ export interface DisconnectedError extends Error { | ||
} | ||
export declare function createDisconnectedError(message: string): DisconnectedError; | ||
export declare function createDisconnectedError(message?: string): DisconnectedError; | ||
export declare function isDisconnectedError(error: any): error is DisconnectedError; | ||
@@ -57,3 +63,3 @@ export interface NotInitializedError extends Error { | ||
} | ||
export declare function createNotInitializedError(message: string): NotInitializedError; | ||
export declare function createNotInitializedError(message?: string): NotInitializedError; | ||
export declare function isNotInitializedError(error: any): error is NotInitializedError; | ||
@@ -63,3 +69,3 @@ export interface AlreadyInitializedError extends Error { | ||
} | ||
export declare function createAlreadyInitializedError(message: string): AlreadyInitializedError; | ||
export declare function createAlreadyInitializedError(message?: string): AlreadyInitializedError; | ||
export declare function isAlreadyInitializedError(error: any): error is AlreadyInitializedError; | ||
@@ -85,3 +91,3 @@ export interface UnexpectedSessionIdError extends Error { | ||
} | ||
export declare function createSessionError(message: string, cause?: Error): SessionError; | ||
export declare function createSessionError(message?: string, cause?: Error): SessionError; | ||
export declare function isSessionError(error: any): error is SessionError; | ||
@@ -92,3 +98,3 @@ export interface PresenceError extends Error { | ||
} | ||
export declare function createPresenceError(message: string, cause?: Error): PresenceError; | ||
export declare function createPresenceError(message?: string, cause?: Error): PresenceError; | ||
export declare function isPresenceError(error: any): error is PresenceError; | ||
@@ -99,3 +105,3 @@ export interface AuthError extends Error { | ||
} | ||
export declare function createAuthError(message: string, cause?: Error): AuthError; | ||
export declare function createAuthError(message?: string, cause?: Error): AuthError; | ||
export declare function isAuthError(error: any): error is AuthError; | ||
@@ -105,8 +111,3 @@ export interface DuplicateIdError extends Error { | ||
} | ||
export declare function createDuplicateIdError(message: string): DuplicateIdError; | ||
export declare function createDuplicateIdError(message?: string): DuplicateIdError; | ||
export declare function isDuplicateIdError(error: any): error is DuplicateIdError; | ||
export interface CanceledError extends Error { | ||
name: 'SyncOtError Canceled'; | ||
} | ||
export declare function createCanceledError(message: string): CanceledError; | ||
export declare function isCanceledError(error: any): error is CanceledError; |
194
lib/error.js
import { strict as assert } from 'assert'; | ||
const assertString = (argumentName, argument) => assert.equal(typeof argument, 'string', `Argument "${argumentName}" must be a string.`); | ||
export function createSyncOtError(one, two, three) { | ||
let name = ''; | ||
let message = ''; | ||
let cause = null; | ||
let info = null; | ||
if (typeof one === 'string' && | ||
typeof two === 'string' && | ||
(three instanceof Error || three == null)) { | ||
name = one; | ||
message = two; | ||
cause = three; | ||
} | ||
else if (typeof one === 'string' && | ||
(two instanceof Error || two == null)) { | ||
message = one; | ||
cause = two; | ||
} | ||
else if (one == null) { | ||
// Using all default values. | ||
} | ||
else if (typeof one === 'object') { | ||
if (typeof one.name === 'string') { | ||
name = one.name; | ||
} | ||
else { | ||
assert.ok(one.name == null, 'Argument "details.name" must be a string, null or undefined.'); | ||
} | ||
if (typeof one.message === 'string') { | ||
message = one.message; | ||
} | ||
else { | ||
assert.ok(one.message == null, 'Argument "details.message" must be a string, null or undefined.'); | ||
} | ||
if (one.cause instanceof Error) { | ||
cause = one.cause; | ||
} | ||
else { | ||
assert.ok(one.cause == null, 'Argument "details.cause" must be an Error, null or undefined.'); | ||
} | ||
assert.ok(!('stack' in one), 'Argument "details.stack" must not be present.'); | ||
info = one; | ||
} | ||
else { | ||
assert.fail('Invalid arguments.'); | ||
} | ||
if (cause) { | ||
message += ` => ${cause}`; | ||
} | ||
/** | ||
* Creates a new Error instance with the specified properties. | ||
* Additionally, `cause.message` is automatically appended to the new error's `message`. | ||
*/ | ||
export function createError(details = {}) { | ||
assert.ok(details != null && typeof details === 'object', 'Argument "details" must be an object.'); | ||
assert.ok(typeof details.name === 'string' || details.name === undefined, 'Argument "details.name" must be a string or undefined.'); | ||
assert.ok(typeof details.message === 'string' || details.message === undefined, 'Argument "details.message" must be a string or undefined.'); | ||
assert.ok(details.cause instanceof Error || details.cause === undefined, 'Argument "details.cause" must be an Error or undefined.'); | ||
assert.ok(!('stack' in details), 'Argument "details.stack" must not be present.'); | ||
const name = details.name; | ||
const cause = details.cause; | ||
const message = details.message | ||
? cause | ||
? `${details.message} => ${cause}` | ||
: details.message | ||
: cause | ||
? `=> ${cause}` | ||
: ''; | ||
const error = new Error(message); | ||
Object.defineProperty(error, 'name', { | ||
configurable: true, | ||
value: name ? `SyncOtError ${name}` : 'SyncOtError', | ||
writable: true, | ||
}); | ||
if (cause) { | ||
error.cause = cause; | ||
if (name !== undefined) { | ||
Object.defineProperty(error, 'name', { | ||
configurable: true, | ||
value: name, | ||
writable: true, | ||
}); | ||
} | ||
if (info) { | ||
for (const key in info) { | ||
if (info.hasOwnProperty(key) && | ||
key !== 'name' && | ||
key !== 'message' && | ||
key !== 'cause') { | ||
error[key] = info[key]; | ||
} | ||
for (const key in details) { | ||
if (details.hasOwnProperty(key) && | ||
key !== 'name' && | ||
key !== 'message') { | ||
error[key] = details[key]; | ||
} | ||
@@ -76,4 +42,6 @@ } | ||
export function createTsonError(message) { | ||
assertString('message', message); | ||
return createSyncOtError('TSON', message); | ||
return createError({ | ||
message, | ||
name: 'SyncOtError TSON', | ||
}); | ||
} | ||
@@ -90,5 +58,5 @@ export function isTsonError(error) { | ||
export function createInvalidEntityError(entityName, entity, key = null) { | ||
assertString('name', entityName); | ||
assert.ok(typeof entityName === 'string', 'Argument "entityName" must be a string.'); | ||
assert.ok(typeof key === 'string' || key === null, 'Argument "key" must be a string or null.'); | ||
return createSyncOtError({ | ||
return createError({ | ||
entity, | ||
@@ -100,3 +68,3 @@ entityName, | ||
: `Invalid "${entityName}.${key}".`, | ||
name: 'InvalidEntity', | ||
name: 'SyncOtError InvalidEntity', | ||
}); | ||
@@ -108,6 +76,6 @@ } | ||
export function createTypeNotFoundError(typeName) { | ||
assertString('typeName', typeName); | ||
return createSyncOtError({ | ||
assert.ok(typeof typeName === 'string', 'Argument "typeName" must be a string.'); | ||
return createError({ | ||
message: `Type "${typeName}" not found.`, | ||
name: 'TypeNotFound', | ||
name: 'SyncOtError TypeNotFound', | ||
typeName, | ||
@@ -120,4 +88,6 @@ }); | ||
export function createNoServiceError(message) { | ||
assertString('message', message); | ||
return createSyncOtError('NoService', message); | ||
return createError({ | ||
message, | ||
name: 'SyncOtError NoService', | ||
}); | ||
} | ||
@@ -128,4 +98,6 @@ export function isNoServiceError(error) { | ||
export function createDisconnectedError(message) { | ||
assertString('message', message); | ||
return createSyncOtError('Disconnected', message); | ||
return createError({ | ||
message, | ||
name: 'SyncOtError Disconnected', | ||
}); | ||
} | ||
@@ -136,4 +108,6 @@ export function isDisconnectedError(error) { | ||
export function createNotInitializedError(message) { | ||
assertString('message', message); | ||
return createSyncOtError('NotInitialized', message); | ||
return createError({ | ||
message, | ||
name: 'SyncOtError NotInitialized', | ||
}); | ||
} | ||
@@ -144,4 +118,6 @@ export function isNotInitializedError(error) { | ||
export function createAlreadyInitializedError(message) { | ||
assertString('message', message); | ||
return createSyncOtError('AlreadyInitialized', message); | ||
return createError({ | ||
message, | ||
name: 'SyncOtError AlreadyInitialized', | ||
}); | ||
} | ||
@@ -152,5 +128,7 @@ export function isAlreadyInitializedError(error) { | ||
} | ||
export function createUnexpectedSessionIdError(message = 'Unexpected session id.') { | ||
assertString('message', message); | ||
return createSyncOtError('UnexpectedSessionId', message); | ||
export function createUnexpectedSessionIdError(message) { | ||
return createError({ | ||
message, | ||
name: 'SyncOtError UnexpectedSessionId', | ||
}); | ||
} | ||
@@ -161,5 +139,7 @@ export function isUnexpectedSessionIdError(error) { | ||
} | ||
export function createUnexpectedVersionNumberError(message = 'Unexpected version number.') { | ||
assertString('message', message); | ||
return createSyncOtError('UnexpectedVersionNumber', message); | ||
export function createUnexpectedVersionNumberError(message) { | ||
return createError({ | ||
message, | ||
name: 'SyncOtError UnexpectedVersionNumber', | ||
}); | ||
} | ||
@@ -170,5 +150,7 @@ export function isUnexpectedVersionNumberError(error) { | ||
} | ||
export function createUnexpectedSequenceNumberError(message = 'Unexpected sequence number.') { | ||
assertString('message', message); | ||
return createSyncOtError('UnexpectedSequenceNumber', message); | ||
export function createUnexpectedSequenceNumberError(message) { | ||
return createError({ | ||
message, | ||
name: 'SyncOtError UnexpectedSequenceNumber', | ||
}); | ||
} | ||
@@ -180,4 +162,7 @@ export function isUnexpectedSequenceNumberError(error) { | ||
export function createSessionError(message, cause) { | ||
assertString('message', message); | ||
return createSyncOtError('Session', message, cause); | ||
return createError({ | ||
cause, | ||
message, | ||
name: 'SyncOtError Session', | ||
}); | ||
} | ||
@@ -188,4 +173,7 @@ export function isSessionError(error) { | ||
export function createPresenceError(message, cause) { | ||
assertString('message', message); | ||
return createSyncOtError('Presence', message, cause); | ||
return createError({ | ||
cause, | ||
message, | ||
name: 'SyncOtError Presence', | ||
}); | ||
} | ||
@@ -196,4 +184,7 @@ export function isPresenceError(error) { | ||
export function createAuthError(message, cause) { | ||
assertString('message', message); | ||
return createSyncOtError('Auth', message, cause); | ||
return createError({ | ||
cause, | ||
message, | ||
name: 'SyncOtError Auth', | ||
}); | ||
} | ||
@@ -204,4 +195,6 @@ export function isAuthError(error) { | ||
export function createDuplicateIdError(message) { | ||
assertString('message', message); | ||
return createSyncOtError('DuplicateId', message); | ||
return createError({ | ||
message, | ||
name: 'SyncOtError DuplicateId', | ||
}); | ||
} | ||
@@ -211,8 +204,1 @@ export function isDuplicateIdError(error) { | ||
} | ||
export function createCanceledError(message) { | ||
assertString('message', message); | ||
return createSyncOtError('Canceled', message); | ||
} | ||
export function isCanceledError(error) { | ||
return error instanceof Error && error.name === 'SyncOtError Canceled'; | ||
} |
{ | ||
"name": "@syncot/error", | ||
"version": "0.0.2", | ||
"version": "0.0.3", | ||
"description": "Helpers for managing errors.", | ||
@@ -30,3 +30,3 @@ "keywords": [ | ||
}, | ||
"gitHead": "4744a1bc32df913a37b5be47a77c16ec308d219c" | ||
"gitHead": "bd4d64ce07f354f6123f71b6f6ba0796bc5b198b" | ||
} |
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
12906
293