UNPKG

@backland/schema

Version:

TypeScript schema declaration and validation library with static type inference

90 lines (88 loc) 3.16 kB
"use strict"; 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