@helpscout/helix
Version:
A Faker-powered fixture generator for Javascript
79 lines (61 loc) • 2.21 kB
JavaScript
;
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;