Middleware models not being passed in correctly to storage engines
Closed this issue · 1 comments
carlevans719 commented
Describe the bug
In basebot-core, the models extracted from middlewares are passed into the storage engine as an array of objects. But the storage engine expects a single object.
In the basebot-core init
function:
const logger = getSingleModule(config.logger)
const channels = getAllModules(config.channels)
const rawMiddleware = getAllModules(config.middleware)
const models = getAllModels(rawMiddleware)
const storage = getSingleModule(config.storage)({ logger, models: models })
const middleware = rawMiddleware.map(mw => mw({ storage, logger }))
const info = logger('core', 'info')
const { server, app } = Server({ logger })
const controllers = startChannels({ channels, storage, logger, server, app })
Should be:
const logger = getSingleModule(config.logger)
const channels = getAllModules(config.channels)
const rawMiddleware = getAllModules(config.middleware)
const models = getAllModels(rawMiddleware)
const storage = getSingleModule(config.storage)({ logger, models: Object.assign(...models) })
const middleware = rawMiddleware.map(mw => mw({ storage, logger }))
const info = logger('core', 'info')
const { server, app } = Server({ logger })
const controllers = startChannels({ channels, storage, logger, server, app })
Note the merging of the array of objects into one object with Object.assign(...models)
Source: https://github.com/ans-group/basebot/blob/master/packages/basebot-core/src/index.js#L11
This was observed when using the azure table storage engine
ceuk commented
fixed in 2.4.7