refactor: simplify implementation slightly

This commit is contained in:
Daniel Roe 2023-08-31 10:45:35 +01:00
parent 0cdd58157b
commit c5e7cc737d

View File

@ -125,33 +125,32 @@ async function resolveApp (nuxt: Nuxt, app: NuxtApp) {
})) }))
} }
// Resolve plugins // Re-initialise plugins
app.plugins = [ app.plugins = nuxt.options.plugins.map(normalizePlugin)
...nuxt.options.plugins.map(normalizePlugin)
] // Track scanned plugins separately so we can apply a sorting mechanism to them
const plugins: NuxtPlugin[] = [] const scannedPlugins: [string, NuxtPlugin][] = []
for (const config of nuxt.options._layers.map(layer => layer.config)) { for (const config of nuxt.options._layers.map(layer => layer.config)) {
plugins.push(...[ for (const plugin of config.plugins || []) {
...(config.plugins || []), app.plugins.push(normalizePlugin(plugin as NuxtPlugin | string))
...config.srcDir
? await resolveFiles(config.srcDir, [
`${config.dir?.plugins || 'plugins'}/*.{ts,js,mjs,cjs,mts,cts}`,
`${config.dir?.plugins || 'plugins'}/*/index.*{ts,js,mjs,cjs,mts,cts}` // TODO: remove, only scan top-level plugins #18418
])
: []
].map(plugin => normalizePlugin(plugin as NuxtPlugin)))
} }
// sort scanned plugins by order and name if (config.srcDir) {
const pluginNameRegex = /\/index\.[cm]?[jt]s$/ const pluginDir = join(config.srcDir, config.dir?.plugins || 'plugins')
app.plugins.push(...plugins.sort((a, b) => { for (const file of await resolveFiles(pluginDir, [
const sortMapResult = (a.order ?? orderMap.default) - (b.order ?? orderMap.default) '*.{ts,js,mjs,cjs,mts,cts}',
if (sortMapResult !== 0) { return sortMapResult } '*/index.*{ts,js,mjs,cjs,mts,cts}' // TODO: remove, only scan top-level plugins #18418
])) {
scannedPlugins.push([file.replace(pluginDir, ''), normalizePlugin(file)])
}
}
}
const aName = pluginNameRegex.test(a.src) ? basename(dirname(a.src)) : basename(a.src) // Sort scanned plugins by their names so a scanned `01.plugin.ts` will always run before finished `02.plugin.ts`
const bName = pluginNameRegex.test(b.src) ? basename(dirname(b.src)) : basename(b.src) // and append to the plugin array
return aName.localeCompare(bName) for (const [_name, plugin] of scannedPlugins.sort(([a], [b]) => a.localeCompare(b))) {
})) app.plugins.push(plugin)
}
// Normalize and de-duplicate plugins and middleware // Normalize and de-duplicate plugins and middleware
app.middleware = uniqueBy(await resolvePaths(app.middleware, 'path'), 'name') app.middleware = uniqueBy(await resolvePaths(app.middleware, 'path'), 'name')