You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
1.5 KiB
34 lines
1.5 KiB
3 years ago
|
import { Ono as OnoConstructor } from "./constructor";
|
||
|
const singleton = ono;
|
||
|
export { singleton as ono };
|
||
|
ono.error = new OnoConstructor(Error);
|
||
|
ono.eval = new OnoConstructor(EvalError);
|
||
|
ono.range = new OnoConstructor(RangeError);
|
||
|
ono.reference = new OnoConstructor(ReferenceError);
|
||
|
ono.syntax = new OnoConstructor(SyntaxError);
|
||
|
ono.type = new OnoConstructor(TypeError);
|
||
|
ono.uri = new OnoConstructor(URIError);
|
||
|
const onoMap = ono;
|
||
|
/**
|
||
|
* Creates a new error with the specified message, properties, and/or inner error.
|
||
|
* If an inner error is provided, then the new error will match its type, if possible.
|
||
|
*/
|
||
|
function ono(...args) {
|
||
|
let originalError = args[0];
|
||
|
// Is the first argument an Error-like object?
|
||
|
if (typeof originalError === "object" && typeof originalError.name === "string") {
|
||
|
// Try to find an Ono singleton method that matches this error type
|
||
|
for (let typedOno of Object.values(onoMap)) {
|
||
|
if (typeof typedOno === "function" && typedOno.name === "ono") {
|
||
|
let species = typedOno[Symbol.species];
|
||
|
if (species && species !== Error && (originalError instanceof species || originalError.name === species.name)) {
|
||
|
// Create an error of the same type
|
||
|
return typedOno.apply(undefined, args);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
// By default, create a base Error object
|
||
|
return ono.error.apply(undefined, args);
|
||
|
}
|
||
|
//# sourceMappingURL=singleton.js.map
|