From 1e9eb4b70c401a29c98419899f38cfdbdd8251f7 Mon Sep 17 00:00:00 2001 From: Ricardo Gobbo de Souza Date: Tue, 5 Feb 2019 09:35:42 -0200 Subject: [PATCH] feat(module): support src as a function in addModule (#4956) --- packages/core/src/module.js | 9 +++++++-- packages/core/test/module.test.js | 25 +++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/packages/core/src/module.js b/packages/core/src/module.js index 3ae1279d1d..e6fbc251ac 100644 --- a/packages/core/src/module.js +++ b/packages/core/src/module.js @@ -115,8 +115,8 @@ export default class ModuleContainer { let options let handler - // Type 1: String - if (typeof moduleOpts === 'string') { + // Type 1: String or Function + if (typeof moduleOpts === 'string' || typeof moduleOpts === 'function') { src = moduleOpts } else if (Array.isArray(moduleOpts)) { // Type 2: Babel style array @@ -126,6 +126,11 @@ export default class ModuleContainer { ({ src, options, handler } = moduleOpts) } + // Define handler if src is a function + if (typeof src === 'function') { + handler = src + } + // Resolve handler if (!handler) { handler = this.nuxt.resolver.requireModule(src) diff --git a/packages/core/test/module.test.js b/packages/core/test/module.test.js index c7869a9d05..bd9c617719 100644 --- a/packages/core/test/module.test.js +++ b/packages/core/test/module.test.js @@ -309,6 +309,31 @@ describe('core: module', () => { expect(result).toEqual({ src: 'moduleTest', options: {} }) }) + test('should add function module', async () => { + const module = new ModuleContainer({ + resolver: { requireModule }, + options: {} + }) + + const functionModule = function (options) { + return Promise.resolve(options) + } + + functionModule.meta = { name: 'moduleTest' } + + const result = await module.addModule(functionModule) + + expect(requireModule).not.toBeCalled() + expect(module.requiredModules).toEqual({ + moduleTest: { + handler: expect.any(Function), + options: undefined, + src: functionModule + } + }) + expect(result).toEqual({ }) + }) + test('should add array module', async () => { const module = new ModuleContainer({ resolver: { requireModule },