@backland/schema
Version:
TypeScript schema declaration and validation library with static type inference
90 lines (88 loc) • 3.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.fieldToMock = fieldToMock;
exports.objectMock = objectMock;
var _utils = require("@backland/utils");
var _CursorField = require("./fields/CursorField");
var _LiteralField = require("./fields/LiteralField");
var _MetaFieldField = require("./fields/MetaFieldField");
var _parseObjectDefinition = require("./parseObjectDefinition");
// Converts a schema to a placeholder object
function objectMock(definition, options) {
const placeHolder = {};
const composers = [];
Object.entries(definition).forEach(([key, fieldInput]) => {
if ((0, _MetaFieldField.isMetaFieldKey)(key)) return;
const def = (0, _parseObjectDefinition.parseObjectField)(key, fieldInput);
if (def.type === 'alias') {
const instance = (0, _parseObjectDefinition.__getCachedFieldInstance)(def);
composers.push({
composer: instance.composer,
key
});
}
placeHolder[key] = fieldToMock(def, options);
});
composers.forEach(el => {
(0, _utils.setByPath)(placeHolder, el.key, el.composer.compose(placeHolder));
});
return placeHolder;
}
function fieldToMock(fieldInput, options) {
const {
randomText = _utils.randomName,
maxArrayLength = 1,
randomNumber
} = options || {};
let {
list,
def,
type
} = (0, _parseObjectDefinition.parseObjectField)('temp', fieldInput);
if (type === 'array') {
const min = def.min === undefined ? 1 : def.min;
const max = def.max === undefined ? Math.max(min, 1) : def.max;
const length = Math.min(min, max);
return [...Array(length)].map(() => {
return fieldToMock(def.of, options);
});
}
const values = {
ID: () => (0, _utils.ulid)(),
alias: () => undefined,
any: () => '_ANY_',
array: () => undefined,
// handled below,
boolean: () => (0, _utils.randomItem)(true, false),
cursor: () => objectMock(_CursorField.CursorField.object().definition, options),
date: () => new Date((0, _utils.randomInt)(Date.now())),
email: () => {
return `${(0, _utils.slugify)(randomText().toLowerCase())}@${(0, _utils.slugify)(randomText().toLowerCase())}${(0, _utils.randomItem)('.com', '.net', '.com.br', '.co', '.sh')}`;
},
enum: () => Array.isArray(def) ? def[0] : undefined,
float: () => (randomNumber || _utils.randomFloat)(),
int: () => (randomNumber || _utils.randomInt)(),
literal: () => _LiteralField.LiteralField.utils.deserialize(def),
meta: () => (0, _MetaFieldField.createEmptyMetaField)(),
null: () => null,
object: () => def ? objectMock(def, options) : undefined,
phone: () => '+5511912345678',
record: () => ({
[randomText()]: 123
}),
string: () => randomText(),
ulid: () => (0, _utils.ulid)(),
undefined: () => undefined,
union: () => Array.isArray(def) ? fieldToMock(def[0]) : undefined,
unknown: () => Date
};
if (list) {
return [...Array((0, _utils.randomInt)(Math.min(3, maxArrayLength), maxArrayLength))].map(() => {
return values[type]();
});
}
return values[type]();
}
//# sourceMappingURL=mockObject.js.map