UNPKG

nested-builder

Version:

Tersely construct complex test fixture objects with the builder pattern.

66 lines 2.53 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createBuilderClass = void 0; const types_1 = require("./types"); const builder_1 = require("./builder"); function createBuilderClass() { return (template) => { const DynamicBuilder = class extends builder_1.BuilderBase { constructor() { super(template); } }; function defineScalarSetter(fieldName) { DynamicBuilder.prototype[fieldName] = function (value) { return this.setScalar(fieldName, value); }; } function defineScalarAdder(fieldName) { Object.defineProperty(DynamicBuilder.prototype, fieldName, { get() { const fn = (elements) => this.setScalar(fieldName, elements); fn.add = (element) => this.addScalar(fieldName, element); return fn; }, }); } function defineNestedSetter(fieldName, builderClass) { DynamicBuilder.prototype[fieldName] = function (block) { const builder = new builderClass(); return this.setNested(fieldName, builder, block); }; } function defineNestedAdder(fieldName, builderClass) { Object.defineProperty(DynamicBuilder.prototype, fieldName, { get() { const fn = (elements) => this.setScalar(fieldName, elements); fn.add = (block) => { const builder = new builderClass(); return this.addNested(fieldName, builder, block); }; return fn; }, }); } for (const fieldName in template) { const fieldTemplate = template[fieldName]; if (types_1.isPlural(fieldTemplate)) { if (types_1.isNested(fieldTemplate)) { defineNestedAdder(fieldName, fieldTemplate.nested); } else { defineScalarAdder(fieldName); } } else if (types_1.isNested(fieldTemplate)) { defineNestedSetter(fieldName, fieldTemplate.nested); } else { defineScalarSetter(fieldName); } } return DynamicBuilder; }; } exports.createBuilderClass = createBuilderClass; //# sourceMappingURL=create.js.map