mirror of
https://github.com/nuxt/nuxt.git
synced 2024-11-22 05:35:13 +00:00
perf: early return chained functions with falsy values (#25647)
This commit is contained in:
parent
be85a72f99
commit
ff1bb56e3f
@ -89,9 +89,9 @@ export function isNuxt3 (nuxt: Nuxt = useNuxt()) {
|
|||||||
* Get nuxt version
|
* Get nuxt version
|
||||||
*/
|
*/
|
||||||
export function getNuxtVersion (nuxt: Nuxt | any = useNuxt() /* TODO: LegacyNuxt */) {
|
export function getNuxtVersion (nuxt: Nuxt | any = useNuxt() /* TODO: LegacyNuxt */) {
|
||||||
const version = (nuxt?._version || nuxt?.version || nuxt?.constructor?.version || '').replace(/^v/g, '')
|
const rawVersion = nuxt?._version || nuxt?.version || nuxt?.constructor?.version
|
||||||
if (!version) {
|
if (!rawVersion) {
|
||||||
throw new Error('Cannot determine nuxt version! Is current instance passed?')
|
throw new Error('Cannot determine nuxt version! Is current instance passed?')
|
||||||
}
|
}
|
||||||
return version
|
return rawVersion.replace(/^v/g, '')
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,7 @@ export async function loadNuxt (opts: LoadNuxtOptions): Promise<Nuxt> {
|
|||||||
throw new Error(`Cannot find any nuxt version from ${opts.cwd}`)
|
throw new Error(`Cannot find any nuxt version from ${opts.cwd}`)
|
||||||
}
|
}
|
||||||
const pkg = await readPackageJSON(nearestNuxtPkg)
|
const pkg = await readPackageJSON(nearestNuxtPkg)
|
||||||
const majorVersion = parseInt((pkg.version || '').split('.')[0])
|
const majorVersion = pkg.version ? parseInt(pkg.version.split('.')[0]) : ''
|
||||||
|
|
||||||
const rootDir = pathToFileURL(opts.cwd || process.cwd()).href
|
const rootDir = pathToFileURL(opts.cwd || process.cwd()).href
|
||||||
|
|
||||||
|
@ -13,21 +13,23 @@ const props = defineProps({
|
|||||||
const _error = props.error
|
const _error = props.error
|
||||||
|
|
||||||
// TODO: extract to a separate utility
|
// TODO: extract to a separate utility
|
||||||
const stacktrace = (_error.stack || '')
|
const stacktrace = _error.stack
|
||||||
.split('\n')
|
? _error.stack
|
||||||
.splice(1)
|
.split('\n')
|
||||||
.map((line) => {
|
.splice(1)
|
||||||
const text = line
|
.map((line) => {
|
||||||
.replace('webpack:/', '')
|
const text = line
|
||||||
.replace('.vue', '.js') // TODO: Support sourcemap
|
.replace('webpack:/', '')
|
||||||
.trim()
|
.replace('.vue', '.js') // TODO: Support sourcemap
|
||||||
return {
|
.trim()
|
||||||
text,
|
return {
|
||||||
internal: (line.includes('node_modules') && !line.includes('.cache')) ||
|
text,
|
||||||
line.includes('internal') ||
|
internal: (line.includes('node_modules') && !line.includes('.cache')) ||
|
||||||
line.includes('new Promise')
|
line.includes('internal') ||
|
||||||
}
|
line.includes('new Promise')
|
||||||
}).map(i => `<span class="stack${i.internal ? ' internal' : ''}">${i.text}</span>`).join('\n')
|
}
|
||||||
|
}).map(i => `<span class="stack${i.internal ? ' internal' : ''}">${i.text}</span>`).join('\n')
|
||||||
|
: ''
|
||||||
|
|
||||||
// Error page props
|
// Error page props
|
||||||
const statusCode = Number(_error.statusCode || 500)
|
const statusCode = Number(_error.statusCode || 500)
|
||||||
|
@ -233,7 +233,7 @@ export function checkForCircularDependencies (_plugins: Array<NuxtPlugin & Omit<
|
|||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
visited.push(name)
|
visited.push(name)
|
||||||
return (deps[name] || []).flatMap(dep => checkDeps(dep, [...visited]))
|
return deps[name]?.length ? deps[name].flatMap(dep => checkDeps(dep, [...visited])) : []
|
||||||
}
|
}
|
||||||
for (const name in deps) {
|
for (const name in deps) {
|
||||||
checkDeps(name)
|
checkDeps(name)
|
||||||
|
@ -287,13 +287,15 @@ export async function initNitro (nuxt: Nuxt & { _nitro?: Nitro }) {
|
|||||||
const routeRulesMatcher = toRouteMatcher(
|
const routeRulesMatcher = toRouteMatcher(
|
||||||
createRadixRouter({ routes: routeRules })
|
createRadixRouter({ routes: routeRules })
|
||||||
)
|
)
|
||||||
const payloadSuffix = nuxt.options.experimental.renderJsonPayloads ? '/_payload.json' : '/_payload.js'
|
if (nitro._prerenderedRoutes?.length) {
|
||||||
for (const route of nitro._prerenderedRoutes || []) {
|
const payloadSuffix = nuxt.options.experimental.renderJsonPayloads ? '/_payload.json' : '/_payload.js'
|
||||||
if (!route.error && route.route.endsWith(payloadSuffix)) {
|
for (const route of nitro._prerenderedRoutes) {
|
||||||
const url = route.route.slice(0, -payloadSuffix.length) || '/'
|
if (!route.error && route.route.endsWith(payloadSuffix)) {
|
||||||
const rules = defu({}, ...routeRulesMatcher.matchAll(url).reverse()) as Record<string, any>
|
const url = route.route.slice(0, -payloadSuffix.length) || '/'
|
||||||
if (!rules.prerender) {
|
const rules = defu({}, ...routeRulesMatcher.matchAll(url).reverse()) as Record<string, any>
|
||||||
prerenderedRoutes.add(url)
|
if (!rules.prerender) {
|
||||||
|
prerenderedRoutes.add(url)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,11 +21,10 @@ export const DevOnlyPlugin = createUnplugin((options: DevOnlyPluginOptions) => {
|
|||||||
if (!DEVONLY_COMP_SINGLE_RE.test(code)) { return }
|
if (!DEVONLY_COMP_SINGLE_RE.test(code)) { return }
|
||||||
|
|
||||||
const s = new MagicString(code)
|
const s = new MagicString(code)
|
||||||
for (const match of code.matchAll(DEVONLY_COMP_RE) || []) {
|
for (const match of code.matchAll(DEVONLY_COMP_RE)) {
|
||||||
const ast: Node = parse(match[0]).children[0]
|
const ast: Node = parse(match[0]).children[0]
|
||||||
const fallback: Node | undefined = ast.children?.find((n: Node) => n.name === 'template' && Object.values(n.attributes).includes('#fallback'))
|
const fallback: Node | undefined = ast.children?.find((n: Node) => n.name === 'template' && Object.values(n.attributes).includes('#fallback'))
|
||||||
const replacement = fallback ? match[0].slice(fallback.loc[0].end, fallback.loc[fallback.loc.length - 1].start) : ''
|
const replacement = fallback ? match[0].slice(fallback.loc[0].end, fallback.loc[fallback.loc.length - 1].start) : ''
|
||||||
|
|
||||||
s.overwrite(match.index!, match.index! + match[0].length, replacement)
|
s.overwrite(match.index!, match.index! + match[0].length, replacement)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ export const TreeShakeComposablesPlugin = createUnplugin((options: TreeShakeComp
|
|||||||
|
|
||||||
const s = new MagicString(code)
|
const s = new MagicString(code)
|
||||||
const strippedCode = stripLiteral(code)
|
const strippedCode = stripLiteral(code)
|
||||||
for (const match of strippedCode.matchAll(COMPOSABLE_RE_GLOBAL) || []) {
|
for (const match of strippedCode.matchAll(COMPOSABLE_RE_GLOBAL)) {
|
||||||
s.overwrite(match.index!, match.index! + match[0].length, `${match[1]} false && /*@__PURE__*/ ${match[2]}`)
|
s.overwrite(match.index!, match.index! + match[0].length, `${match[1]} false && /*@__PURE__*/ ${match[2]}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ export function resolveComponentNameSegments (fileName: string, prefixParts: str
|
|||||||
let index = prefixParts.length - 1
|
let index = prefixParts.length - 1
|
||||||
const matchedSuffix: string[] = []
|
const matchedSuffix: string[] = []
|
||||||
while (index >= 0) {
|
while (index >= 0) {
|
||||||
matchedSuffix.unshift(...splitByCase(prefixParts[index] || '').map(p => p.toLowerCase()))
|
matchedSuffix.unshift(...splitByCase(prefixParts[index]).map(p => p.toLowerCase()))
|
||||||
const matchedSuffixContent = matchedSuffix.join('/')
|
const matchedSuffixContent = matchedSuffix.join('/')
|
||||||
if ((fileNamePartsContent === matchedSuffixContent || fileNamePartsContent.startsWith(matchedSuffixContent + '/')) ||
|
if ((fileNamePartsContent === matchedSuffixContent || fileNamePartsContent.startsWith(matchedSuffixContent + '/')) ||
|
||||||
// e.g Item/Item/Item.vue -> Item
|
// e.g Item/Item/Item.vue -> Item
|
||||||
|
@ -86,10 +86,10 @@ export const NoScript = defineComponent({
|
|||||||
},
|
},
|
||||||
setup: setupForUseMeta((props, { slots }) => {
|
setup: setupForUseMeta((props, { slots }) => {
|
||||||
const noscript = { ...props }
|
const noscript = { ...props }
|
||||||
const textContent = (slots.default?.() || [])
|
const slotVnodes = slots.default?.()
|
||||||
.filter(({ children }) => children)
|
const textContent = slotVnodes
|
||||||
.map(({ children }) => children)
|
? slotVnodes.filter(({ children }) => children).map(({ children }) => children).join('')
|
||||||
.join('')
|
: ''
|
||||||
if (textContent) {
|
if (textContent) {
|
||||||
noscript.children = textContent
|
noscript.children = textContent
|
||||||
}
|
}
|
||||||
|
@ -271,13 +271,15 @@ export default defineNuxtModule({
|
|||||||
processPages(pages)
|
processPages(pages)
|
||||||
})
|
})
|
||||||
nuxt.hook('nitro:build:before', (nitro) => {
|
nuxt.hook('nitro:build:before', (nitro) => {
|
||||||
for (const route of nitro.options.prerender.routes || []) {
|
if (nitro.options.prerender.routes.length) {
|
||||||
// Skip default route value as we only generate it if it is already
|
for (const route of nitro.options.prerender.routes) {
|
||||||
// in the detected routes from `~/pages`.
|
// Skip default route value as we only generate it if it is already
|
||||||
if (route === '/') { continue }
|
// in the detected routes from `~/pages`.
|
||||||
prerenderRoutes.add(route)
|
if (route === '/') { continue }
|
||||||
|
prerenderRoutes.add(route)
|
||||||
|
}
|
||||||
|
nitro.options.prerender.routes = Array.from(prerenderRoutes)
|
||||||
}
|
}
|
||||||
nitro.options.prerender.routes = Array.from(prerenderRoutes)
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -389,13 +391,13 @@ export default defineNuxtModule({
|
|||||||
const getSources = (pages: NuxtPage[]): string[] => pages
|
const getSources = (pages: NuxtPage[]): string[] => pages
|
||||||
.filter(p => Boolean(p.file))
|
.filter(p => Boolean(p.file))
|
||||||
.flatMap(p =>
|
.flatMap(p =>
|
||||||
[relative(nuxt.options.srcDir, p.file as string), ...getSources(p.children || [])]
|
[relative(nuxt.options.srcDir, p.file as string), ...(p.children?.length ? getSources(p.children) : [])]
|
||||||
)
|
)
|
||||||
|
|
||||||
// Do not prefetch page chunks
|
// Do not prefetch page chunks
|
||||||
nuxt.hook('build:manifest', (manifest) => {
|
nuxt.hook('build:manifest', (manifest) => {
|
||||||
if (nuxt.options.dev) { return }
|
if (nuxt.options.dev) { return }
|
||||||
const sourceFiles = getSources(nuxt.apps.default.pages || [])
|
const sourceFiles = nuxt.apps.default?.pages?.length ? getSources(nuxt.apps.default.pages) : []
|
||||||
|
|
||||||
for (const key in manifest) {
|
for (const key in manifest) {
|
||||||
if (manifest[key].isEntry) {
|
if (manifest[key].isEntry) {
|
||||||
|
@ -144,6 +144,8 @@ export function ssrStylesPlugin (options: SSRStylePluginOptions): Plugin {
|
|||||||
if (id === options.entry && (options.shouldInline === true || (typeof options.shouldInline === 'function' && options.shouldInline(id)))) {
|
if (id === options.entry && (options.shouldInline === true || (typeof options.shouldInline === 'function' && options.shouldInline(id)))) {
|
||||||
const s = new MagicString(code)
|
const s = new MagicString(code)
|
||||||
options.clientCSSMap[id] ||= new Set()
|
options.clientCSSMap[id] ||= new Set()
|
||||||
|
if (!options.globalCSS.length) { return }
|
||||||
|
|
||||||
for (const file of options.globalCSS) {
|
for (const file of options.globalCSS) {
|
||||||
const resolved = await this.resolve(file) ?? await this.resolve(file, id)
|
const resolved = await this.resolve(file) ?? await this.resolve(file, id)
|
||||||
const res = await this.resolve(file + '?inline&used') ?? await this.resolve(file + '?inline&used', id)
|
const res = await this.resolve(file + '?inline&used') ?? await this.resolve(file + '?inline&used', id)
|
||||||
|
@ -63,7 +63,7 @@ export async function warmupViteServer (
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
const mod = await server.moduleGraph.getModuleByUrl(url, isServer)
|
const mod = await server.moduleGraph.getModuleByUrl(url, isServer)
|
||||||
const deps = mod?.ssrTransformResult?.deps /* server */ || Array.from(mod?.importedModules /* client */ || []).map(m => m.url)
|
const deps = mod?.ssrTransformResult?.deps /* server */ || mod?.importedModules.size ? Array.from(mod?.importedModules /* client */).map(m => m.url) : []
|
||||||
await Promise.all(deps.map(m => warmup(m)))
|
await Promise.all(deps.map(m => warmup(m)))
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logger.debug('[warmup] tracking dependencies for %s failed with: %s', url, e)
|
logger.debug('[warmup] tracking dependencies for %s failed with: %s', url, e)
|
||||||
|
@ -1986,6 +1986,7 @@ describe('component islands', () => {
|
|||||||
link.href = link.href.replace(fixtureDir, '/<rootDir>').replaceAll('//', '/')
|
link.href = link.href.replace(fixtureDir, '/<rootDir>').replaceAll('//', '/')
|
||||||
link.key = link.key.replace(/-[a-zA-Z0-9]+$/, '')
|
link.key = link.key.replace(/-[a-zA-Z0-9]+$/, '')
|
||||||
}
|
}
|
||||||
|
result.head.link.sort((a, b) => b.href.localeCompare(a.href))
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: fix rendering of styles in webpack
|
// TODO: fix rendering of styles in webpack
|
||||||
|
Loading…
Reference in New Issue
Block a user