UNPKG

@helpscout/helix

Version:

A Faker-powered fixture generator for Javascript

79 lines (61 loc) 2.21 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _index = _interopRequireDefault(require("./index")); var _faker = require("../faker"); var _derived = require("../derived"); var _lodash = require("lodash"); var _log = _interopRequireDefault(require("../utils/log")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Recursively instantiates the Helix version of Faker methods. * * @param object $shape Fixture shape, that contains Faker render API * * @returns object */ var generateSpecs = function generateSpecs(shape, seedValue) { if (!(0, _lodash.isObject)(shape) && !(0, _lodash.isArray)(shape)) { throw new _log.default('HelixSpec.generateSpecs', 'First argument must be an object, array, or HelixSpec.'); } if (seedValue !== undefined && !(0, _lodash.isNumber)(seedValue)) { throw new _log.default('HelixSpec.generateSpecs', 'Seed value must be a valid number.'); } if ((0, _lodash.isFunction)(shape)) { return (0, _faker.isComputedValue)(shape) ? shape(seedValue) : shape(); } if (shape instanceof _index.default) { return shape.generate(); } var derivedProps = {}; var fixture = (0, _lodash.mapValues)(shape, function (value, key) { // Preserve array structures if ((0, _lodash.isArray)(value)) { return value.map(function (val) { return generateSpecs(val); }); } // Recurse if ((0, _lodash.isObject)(value) && !(0, _lodash.isFunction)(value)) { return value instanceof _index.default ? value.generate() : generateSpecs(value); } // Instantiate! if ((0, _lodash.isFunction)(value)) { if ((0, _faker.isComputedValue)(value)) { return value(seedValue); } else if ((0, _derived.isDerivedValue)(value)) { derivedProps[key] = value; return; } else { return value(); } } return value; }); var derivedFixture = (0, _lodash.mapValues)(derivedProps, function (value, key) { return value(fixture); }); return Object.assign(fixture, derivedFixture); }; var _default = generateSpecs; exports.default = _default;