"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = builder; var _definitions = require("../definitions"); var _validate = require("../validators/validate"); function builder() { const type = this; const keys = _definitions.BUILDER_KEYS[type]; const countArgs = arguments.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 }; for (let i = 0; i < keys.length; ++i) { const key = keys[i]; const field = _definitions.NODE_FIELDS[type][key]; let arg; if (i < countArgs) arg = arguments[i]; if (arg === undefined) { arg = Array.isArray(field.default) ? [] : field.default; } node[key] = arg; } for (const key in node) { (0, _validate.default)(node, key, node[key]); } return node; }