91 lines
2.3 KiB
JavaScript
91 lines
2.3 KiB
JavaScript
// src/format.ts
|
|
var POSITIONALS_EXP = /(%?)(%([sdijo]))/g;
|
|
function serializePositional(positional, flag) {
|
|
switch (flag) {
|
|
case "s":
|
|
return positional;
|
|
case "d":
|
|
case "i":
|
|
return Number(positional);
|
|
case "j":
|
|
return JSON.stringify(positional);
|
|
case "o": {
|
|
if (typeof positional === "string") {
|
|
return positional;
|
|
}
|
|
const json = JSON.stringify(positional);
|
|
if (json === "{}" || json === "[]" || /^\[object .+?\]$/.test(json)) {
|
|
return positional;
|
|
}
|
|
return json;
|
|
}
|
|
}
|
|
}
|
|
function format(message, ...positionals) {
|
|
if (positionals.length === 0) {
|
|
return message;
|
|
}
|
|
let positionalIndex = 0;
|
|
let formattedMessage = message.replace(
|
|
POSITIONALS_EXP,
|
|
(match, isEscaped, _, flag) => {
|
|
const positional = positionals[positionalIndex];
|
|
const value = serializePositional(positional, flag);
|
|
if (!isEscaped) {
|
|
positionalIndex++;
|
|
return value;
|
|
}
|
|
return match;
|
|
}
|
|
);
|
|
if (positionalIndex < positionals.length) {
|
|
formattedMessage += ` ${positionals.slice(positionalIndex).join(" ")}`;
|
|
}
|
|
formattedMessage = formattedMessage.replace(/%{2,2}/g, "%");
|
|
return formattedMessage;
|
|
}
|
|
|
|
// src/invariant.ts
|
|
var STACK_FRAMES_TO_IGNORE = 2;
|
|
function cleanErrorStack(error) {
|
|
if (!error.stack) {
|
|
return;
|
|
}
|
|
const nextStack = error.stack.split("\n");
|
|
nextStack.splice(1, STACK_FRAMES_TO_IGNORE);
|
|
error.stack = nextStack.join("\n");
|
|
}
|
|
var InvariantError = class extends Error {
|
|
constructor(message, ...positionals) {
|
|
super(message);
|
|
this.message = message;
|
|
this.name = "Invariant Violation";
|
|
this.message = format(message, ...positionals);
|
|
cleanErrorStack(this);
|
|
}
|
|
};
|
|
var invariant = (predicate, message, ...positionals) => {
|
|
if (!predicate) {
|
|
throw new InvariantError(message, ...positionals);
|
|
}
|
|
};
|
|
invariant.as = (ErrorConstructor, predicate, message, ...positionals) => {
|
|
if (!predicate) {
|
|
const formatMessage = positionals.length === 0 ? message : format(message, ...positionals);
|
|
let error;
|
|
try {
|
|
error = Reflect.construct(ErrorConstructor, [
|
|
formatMessage
|
|
]);
|
|
} catch (err) {
|
|
error = ErrorConstructor(formatMessage);
|
|
}
|
|
throw error;
|
|
}
|
|
};
|
|
export {
|
|
InvariantError,
|
|
format,
|
|
invariant
|
|
};
|
|
//# sourceMappingURL=index.mjs.map
|