surrial
Version:
Serialize anything. This is surreal!
39 lines • 1.57 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
function isInstanceOf(thing, whitelist) {
return whitelist.some(function (ctor) { return thing instanceof ctor; });
}
exports.isInstanceOf = isInstanceOf;
var SURRIALIZABLE_FN_NAME = 'surrialize';
function isSurrializable(thing) {
return thing && (typeof thing === 'object' || typeof thing === 'function') && typeof thing[SURRIALIZABLE_FN_NAME] === 'function';
}
exports.isSurrializable = isSurrializable;
function isEcmaScriptClass(constructor) {
return constructor.toString().startsWith('class');
}
function getParamList(constructor) {
var splitParams = function (params) { return params.split(',').map(function (param) { return param.trim(); }); };
var constructorString = constructor.toString();
if (isEcmaScriptClass(constructor)) {
var parametersMatch = /constructor[^(]*\(([^)]*)\)/.exec(constructorString);
if (parametersMatch) {
return splitParams(parametersMatch[1]);
}
else {
// Constructor is optional in an es6 class
return [];
}
}
else {
var parametersMatch = /function[^(]*\(([^)]*)\)/.exec(constructorString);
if (parametersMatch) {
return splitParams(parametersMatch[1]);
}
else {
throw new Error("Constructor function \"" + constructor.name + "\" could not be serialized. Class was defined as: " + constructor.toString());
}
}
}
exports.getParamList = getParamList;
//# sourceMappingURL=helpers.js.map