"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const combine_common_1 = tslib_1.__importDefault(require("./combine.common")); const lodash_1 = require("../../utils/lodash"); const assert_1 = tslib_1.__importDefault(require("assert")); function combineModuleDev(...modules) { const { checkers, common } = (0, combine_common_1.default)(...modules); const others = modules.map((module) => ({ triggers: require(`${module}/lib/triggers`).default, aspectDict: require(`${module}/lib/aspects`).default, watchers: require(`${module}/lib/watchers`).default, timers: require(`${module}/lib/timers`).default, startRoutines: require(`${module}/lib/routines/start`).default, importations: require(`${module}/lib/ports`).importations, exportations: require(`${module}/lib/ports`).exportations, data: require(`${module}/lib/data`).default, })).reduce((prev, current, index) => { const check = (module, name) => { (0, assert_1.default)(typeof module.aspectDict === 'object', `${name}模块中的aspectDict不是对象`); (0, assert_1.default)(typeof module.data === 'object', `${name}模块中的data不是对象`); (0, assert_1.default)(module.exportations instanceof Array, `${name}模块中的exportations不是数组`); (0, assert_1.default)(module.importations instanceof Array, `${name}模块中的importations不是数组`); (0, assert_1.default)(module.watchers instanceof Array, `${name}模块中的watchers不是数组`); (0, assert_1.default)(module.timers instanceof Array, `${name}模块中的timers不是数组`); (0, assert_1.default)(module.triggers instanceof Array, `${name}模块中的triggers不是数组`); (0, assert_1.default)(module.startRoutines instanceof Array, `${name}模块中的startRoutines不是数组`); }; if (index === 1) { check(prev, modules[0]); } check(current, modules[index]); // aspectDict中不应当有同名对象 const its = (0, lodash_1.intersection)(Object.keys(prev.aspectDict), Object.keys(current.aspectDict)); if (its.length > 0) { throw new Error(`模块${modules[index]}的aspectDict中,存在和其它模块同步的aspect【${its.join(',')}】,请正确处理`); } return { aspectDict: (0, lodash_1.mergeConcatArray)(prev.aspectDict, current.aspectDict), data: (0, lodash_1.mergeConcatArray)(prev.data, current.data), importations: (0, lodash_1.mergeConcatArray)(prev.importations, current.importations), exportations: (0, lodash_1.mergeConcatArray)(prev.exportations, current.exportations), watchers: (0, lodash_1.mergeConcatArray)(prev.watchers, current.watchers), timers: (0, lodash_1.merge)(prev.timers, current.timers), startRoutines: (0, lodash_1.merge)(prev.startRoutines, current.startRoutines), triggers: (0, lodash_1.merge)(prev.triggers, current.triggers), }; }); return { checkers, common, ...others, }; } exports.default = combineModuleDev;