mocker-data-generator
Version:
A simplified way to generate mock data, builds using a simple schema and with the FakerJs
208 lines (207 loc) • 6.95 kB
JavaScript
import { __generator, __spreadArray, __values } from "tslib";
export var isArray = function (arg) {
return Object.prototype.toString.call(arg) === '[object Array]';
};
export var isObject = function (arg) {
return Object.prototype.toString.call(arg) === '[object Object]';
};
export var evalWithContextData = function (key, object, db, generators) {
// In this (way, we can pass object and use inside the eval string
return eval(key);
};
export var fieldArrayCalcLength = function (config, fixedArrayLength, schema) {
var length;
if (typeof config.length === 'function') {
length = config.length.call(schema);
}
else if (config.fixedLength) {
length = config.length - fixedArrayLength;
}
else {
length = Math.floor(Math.random() * config.length + 1);
}
return length;
};
export var iamLastChild = function (parent, k) {
if (isArray(parent[k])) {
var last = false;
if (parent[k].length === 0) {
return true;
}
for (var i = 0; i < parent[k].length; i++) {
var el = parent[k][i];
last = !isObject(el);
if (last) {
break;
}
}
return last;
}
else {
return !isObject(parent[k]);
}
};
export var iamLastParent = function (obj) {
var last = false;
if (isObject(obj)) {
var ks = Object.keys(obj);
for (var i = 0; i < ks.length; i++) {
var k = ks[i];
last = iamLastChild(obj, k);
if (!last) {
break;
}
}
}
else {
last = true;
}
return last;
};
export var isConditional = function (str) {
var arr = str.split(',');
return arr.length > 1;
};
export var cleanVirtuals = function (paths, object, options) {
// clean specific paths
var objectCleaner = function (path, obj, options) {
var lvls, dest, i, field;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
lvls = path.split(options.symbol);
dest = obj;
if (!lvls || lvls.length === 0) {
return [2 /*return*/];
}
if (!obj) {
return [2 /*return*/];
}
for (i = 0; i < lvls.length; i++) {
field = lvls[i];
if (i === lvls.length - 1 && dest[field]) {
if (Object.getOwnPropertyNames(dest[field]).length < 1) {
delete dest[field];
break;
}
}
else {
dest = dest[field];
}
}
lvls.pop();
if (!(lvls.length > 0)) return [3 /*break*/, 2];
return [5 /*yield**/, __values(objectCleaner(lvls.join(options.symbol), obj, options))];
case 1:
_a.sent();
return [3 /*break*/, 3];
case 2: return [2 /*return*/];
case 3: return [2 /*return*/];
}
});
};
var forEachPath = function (path, object, options) {
var lvls, dest, i, field;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
lvls = path.split(options.symbol);
dest = object;
i = 0;
_a.label = 1;
case 1:
if (!(i < lvls.length)) return [3 /*break*/, 5];
field = lvls[i];
if (!(i === lvls.length - 1)) return [3 /*break*/, 3];
// delete specific path
delete dest[field];
// clean specific path
return [5 /*yield**/, __values(objectCleaner(path, object, options))];
case 2:
// clean specific path
_a.sent();
return [3 /*break*/, 4];
case 3:
dest = dest[field];
_a.label = 4;
case 4:
i++;
return [3 /*break*/, 1];
case 5: return [2 /*return*/];
}
});
};
var forPaths = function (paths, object, options) {
var i, path;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
i = 0;
_a.label = 1;
case 1:
if (!(i < paths.length)) return [3 /*break*/, 4];
path = paths[i];
return [5 /*yield**/, __values(Array.from(forEachPath(path, object, options)))];
case 2:
_a.sent();
_a.label = 3;
case 3:
i++;
return [3 /*break*/, 1];
case 4: return [2 /*return*/];
}
});
};
for (var _i = 0, _a = Array.from(forPaths(paths, object, options)); _i < _a.length; _i++) {
var res = _a[_i];
}
return object;
};
export var stringToPathOrCall = function (name, fn, cfg) {
var _a = cfg.split('('), body = _a[0], args = _a[1];
body = body.split('.');
var func = body.reduce(function (acc, val) {
if (!acc[val]) {
throw "This ".concat(name, " method doesnt exists '").concat(cfg, "'.");
}
return acc[val];
}, fn);
if (!args) {
if (typeof func === 'function') {
return func.call(this);
}
else {
return func;
}
}
var _b = args.split(')'), args2 = _b[0], mods = _b[1];
args = args2
? args2[0] === '{'
? [JSON.parse(args2)]
: args2.split(',')
: [];
var result = func.call.apply(func, __spreadArray([this], args, false));
if (!mods || mods === '') {
return result;
}
mods = mods
.split('[')
.filter(function (i) { return i !== ''; })
.map(function (i) { return i.slice(0, -1); })
.map(function (i) { return (i[0] === '"' ? i.slice(1, -1) : parseInt(i, 10)); });
return mods.reduce(function (acc, val) {
if (!acc[val]) {
throw "'".concat(acc, "' doesnt have key '").concat(val, "'.");
}
return acc[val];
}, result);
};
export var loopInside = function (object, path) {
var p = path.split('.');
return p.reduce(function (acc, val) {
if (acc[val] === null) {
throw "'".concat(acc, "' doesnt have key '").concat(val, "'.");
}
return acc[val];
}, object);
};