react-json-editor-ajrm-ts-platform
Version:
A stylish, editor-like, modular, react component for viewing, editing, and debugging javascript object syntax!
92 lines (91 loc) • 4.27 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const mitsuketa_1 = require("./mitsuketa");
const err = {
getCaller: (skip = 1) => {
// A somewhat hacky solution that will yield different results in different JS engines.
// Since we only call this function when an error will actually be thrown we typically don't
// rally mind the performance impact this might have if called too often.
// Lucky for us we use nodeJS and thus only V8.
const stackTrace = new Error().stack;
var callerName = stackTrace.replace(/^Error\s+/, "");
callerName = callerName.split("\n")[skip];
callerName = callerName
.replace(/^\s+at Object./, "")
.replace(/^\s+at /, "")
.replace(/ \(.+\)$/, "");
return callerName;
},
throwError: (fxName = "unknown function", paramName = "unknown parameter", expectation = "to be defined") => {
throw [
"@",
fxName,
"(): Expected parameter '",
paramName,
"' ",
expectation,
].join("");
},
isUndefined: (paramName = "<unknown parameter>", param) => {
if ([null, undefined].indexOf(param) > -1)
err.throwError(err.getCaller(2), paramName);
},
isFalsy: (paramName = "<unknown parameter>", param) => {
if (!param)
err.throwError(err.getCaller(2), paramName);
},
isNoneOf: (paramName = "<unknown parameter>", param, contains = []) => {
if (contains.indexOf(param) === -1)
err.throwError(err.getCaller(2), paramName, "to be any of" + JSON.stringify(contains));
},
isAnyOf: (paramName = "<unknown parameter>", param, contains = []) => {
if (contains.indexOf(param) > -1)
err.throwError(err.getCaller(2), paramName, "not to be any of" + JSON.stringify(contains));
},
isNotType: (paramName = "<unknown parameter>", param, type = "") => {
if ((0, mitsuketa_1.getType)(param) !== type.toLowerCase())
err.throwError(err.getCaller(2), paramName, "to be type " + type.toLowerCase());
},
isAnyTypeOf: (paramName = "<unknown parameter>", param, types = []) => {
types.forEach((type) => {
if ((0, mitsuketa_1.getType)(param) === type)
err.throwError(err.getCaller(2), paramName, "not to be type of " + type.toLowerCase());
});
},
missingKey: (paramName = "<unknown parameter>", param, keyName = "") => {
err.isUndefined(paramName, param);
if (Object.keys(param).indexOf(keyName) === -1)
err.throwError(err.getCaller(2), paramName, "to contain '" + keyName + "' key");
},
missingAnyKeys: (paramName = "<unknown parameter>", param, keyNames = [""]) => {
err.isUndefined(paramName, param);
const keyList = Object.keys(param);
keyNames.forEach((keyName) => {
if (keyList.indexOf(keyName) === -1)
err.throwError(err.getCaller(2), paramName, "to contain '" + keyName + "' key");
});
},
containsUndefined: (paramName = "<unknown parameter>", param) => {
[undefined, null].forEach((value) => {
const location = (0, mitsuketa_1.locate)(param, value);
if (location)
err.throwError(err.getCaller(2), paramName, "not to contain '" + JSON.stringify(value) + "' at " + location);
});
},
isInvalidPath: (paramName = "<unknown parameter>", param) => {
err.isUndefined(paramName, param);
err.isNotType(paramName, param, "string");
err.isAnyOf(paramName, param, ["", "/"]);
".$[]#".split("").forEach((invalidChar) => {
if (param.indexOf(invalidChar) > -1)
err.throwError(err.getCaller(2), paramName, "not to contain invalid character '" + invalidChar + "'");
});
if (param.match(/\/{2,}/g))
err.throwError(err.getCaller(2), paramName, "not to contain consecutive forward slash characters");
},
isInvalidWriteData: (paramName = "<unknown parameter>", param) => {
err.isUndefined(paramName, param);
err.containsUndefined(paramName, param);
},
};
exports.default = err;
;