"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = builder; var _definitions = require("../definitions"); var _validate = require("../validators/validate"); function builder(type, ...args) { const keys = _definitions.BUILDER_KEYS[type]; const countArgs = args.length; if (countArgs > keys.length) { throw new Error(`${type}: Too many arguments passed. Received ${countArgs} but can receive no more than ${keys.length}`); } const node = { type }; let i = 0; keys.forEach(key => { const field = _definitions.NODE_FIELDS[type][key]; let arg; if (i < countArgs) arg = args[i]; if (arg === undefined) { arg = Array.isArray(field.default) ? [] : field.default; } node[key] = arg; i++; }); for (const key of Object.keys(node)) { (0, _validate.default)(node, key, node[key]); } return node; }