| "use strict"; |
| |
| Object.defineProperty(exports, "__esModule", { |
| value: true |
| }); |
| exports.default = builder; |
| |
| var _clone = _interopRequireDefault(require("lodash/clone")); |
| |
| var _definitions = require("../definitions"); |
| |
| var _validate = _interopRequireDefault(require("../validators/validate")); |
| |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } |
| |
| 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 = (0, _clone.default)(field.default); |
| node[key] = arg; |
| i++; |
| }); |
| |
| for (const key of Object.keys(node)) { |
| (0, _validate.default)(node, key, node[key]); |
| } |
| |
| return node; |
| } |