mirror of
https://github.com/nuxt/nuxt.git
synced 2025-02-17 06:01:34 +00:00
feat(builder): support adding custom middlewares (#6342)
This commit is contained in:
parent
abe9f57f47
commit
e78e8b4b7d
@ -416,7 +416,15 @@ export default class Builder {
|
||||
|
||||
async resolveMiddleware ({ templateVars }) {
|
||||
// -- Middleware --
|
||||
templateVars.middleware = await this.resolveRelative(this.options.dir.middleware)
|
||||
const middleware = await this.resolveRelative(this.options.dir.middleware)
|
||||
|
||||
const extRE = new RegExp(`\\.(${this.supportedExtensions.join('|')})$`)
|
||||
|
||||
templateVars.middleware = middleware.map(({ src }) => {
|
||||
const name = src.replace(extRE, '')
|
||||
const dst = this.relativeToBuild(this.options.srcDir, this.options.dir.middleware, src)
|
||||
return { name, src, dst }
|
||||
})
|
||||
}
|
||||
|
||||
async resolveCustomTemplates (templateContext) {
|
||||
|
@ -171,18 +171,25 @@ describe('builder: builder generate', () => {
|
||||
test('should resolve middleware', async () => {
|
||||
const nuxt = createNuxt()
|
||||
nuxt.options.store = false
|
||||
nuxt.options.srcDir = '/var/nuxt/src'
|
||||
nuxt.options.dir = {
|
||||
middleware: '/var/nuxt/src/middleware'
|
||||
middleware: 'middleware'
|
||||
}
|
||||
const middlewarePath = 'subfolder/midd.js'
|
||||
const builder = new Builder(nuxt, BundleBuilder)
|
||||
builder.resolveRelative = jest.fn(dir => [
|
||||
{ src: `${dir}/midd.js` }
|
||||
{ src: middlewarePath }
|
||||
])
|
||||
builder.relativeToBuild = jest.fn().mockReturnValue(middlewarePath)
|
||||
|
||||
const templateVars = {}
|
||||
await builder.resolveMiddleware({ templateVars })
|
||||
|
||||
expect(templateVars.middleware).toEqual([ { src: '/var/nuxt/src/middleware/midd.js' } ])
|
||||
expect(templateVars.middleware).toEqual([{
|
||||
name: 'subfolder/midd',
|
||||
src: 'subfolder/midd.js',
|
||||
dst: 'subfolder/midd.js'
|
||||
}])
|
||||
})
|
||||
|
||||
test('should custom templates', async () => {
|
||||
|
@ -1,8 +1,11 @@
|
||||
const middleware = {}
|
||||
<% middleware.forEach(m => {
|
||||
const name = m.src.replace(new RegExp(`\\.(${extensions})$`), '')
|
||||
<% for (const m of middleware) {
|
||||
// TODO: remove duplicate logic in v3 (see builder.resolveMiddleware)
|
||||
const name = m.name || m.src.replace(new RegExp(`\\.(${extensions})$`), '')
|
||||
const dst = m.dst || relativeToBuild(srcDir, dir.middleware, m.src)
|
||||
%>
|
||||
middleware['<%= name %>'] = require('<%= relativeToBuild(srcDir, dir.middleware, m.src) %>');
|
||||
middleware['<%= name %>'] = require('<%= dst %>');
|
||||
middleware['<%= name %>'] = middleware['<%= name %>'].default || middleware['<%= name %>']
|
||||
<% }) %>
|
||||
<% } %>
|
||||
|
||||
export default middleware
|
||||
|
Loading…
Reference in New Issue
Block a user