mirror of
https://github.com/nuxt/nuxt.git
synced 2025-02-21 07:59:33 +00:00
fix(nuxt): don't try to strip directory file extensions (#25965)
This commit is contained in:
parent
3678a4f5d0
commit
40c3a3918e
@ -1,3 +1,4 @@
|
|||||||
|
import { existsSync } from 'node:fs'
|
||||||
import { addTemplate, addVitePlugin, addWebpackPlugin, defineNuxtModule, isIgnored, logger, resolveAlias, tryResolveModule, updateTemplates, useNuxt } from '@nuxt/kit'
|
import { addTemplate, addVitePlugin, addWebpackPlugin, defineNuxtModule, isIgnored, logger, resolveAlias, tryResolveModule, updateTemplates, useNuxt } from '@nuxt/kit'
|
||||||
import { isAbsolute, join, normalize, relative, resolve } from 'pathe'
|
import { isAbsolute, join, normalize, relative, resolve } from 'pathe'
|
||||||
import type { Import, Unimport } from 'unimport'
|
import type { Import, Unimport } from 'unimport'
|
||||||
@ -5,6 +6,7 @@ import { createUnimport, scanDirExports } from 'unimport'
|
|||||||
import type { ImportPresetWithDeprecation, ImportsOptions } from 'nuxt/schema'
|
import type { ImportPresetWithDeprecation, ImportsOptions } from 'nuxt/schema'
|
||||||
|
|
||||||
import { lookupNodeModuleSubpath, parseNodeModulePath } from 'mlly'
|
import { lookupNodeModuleSubpath, parseNodeModulePath } from 'mlly'
|
||||||
|
import { isDirectory } from '../utils'
|
||||||
import { TransformPlugin } from './transform'
|
import { TransformPlugin } from './transform'
|
||||||
import { defaultPresets } from './presets'
|
import { defaultPresets } from './presets'
|
||||||
|
|
||||||
@ -140,13 +142,10 @@ export default defineNuxtModule<Partial<ImportsOptions>>({
|
|||||||
function addDeclarationTemplates (ctx: Unimport, options: Partial<ImportsOptions>) {
|
function addDeclarationTemplates (ctx: Unimport, options: Partial<ImportsOptions>) {
|
||||||
const nuxt = useNuxt()
|
const nuxt = useNuxt()
|
||||||
|
|
||||||
// Remove file extension for benefit of TypeScript
|
|
||||||
const stripExtension = (path: string) => path.replace(/\.[a-z]+$/, '')
|
|
||||||
|
|
||||||
const resolvedImportPathMap = new Map<string, string>()
|
const resolvedImportPathMap = new Map<string, string>()
|
||||||
const r = ({ from }: Import) => resolvedImportPathMap.get(from)
|
const r = ({ from }: Import) => resolvedImportPathMap.get(from)
|
||||||
|
|
||||||
async function cacheImportPaths(imports: Import[]) {
|
async function cacheImportPaths (imports: Import[]) {
|
||||||
const importSource = Array.from(new Set(imports.map(i => i.from)))
|
const importSource = Array.from(new Set(imports.map(i => i.from)))
|
||||||
await Promise.all(importSource.map(async (from) => {
|
await Promise.all(importSource.map(async (from) => {
|
||||||
if (resolvedImportPathMap.has(from)) {
|
if (resolvedImportPathMap.has(from)) {
|
||||||
@ -163,11 +162,15 @@ function addDeclarationTemplates (ctx: Unimport, options: Partial<ImportsOptions
|
|||||||
return join(dir, name, subpath || '')
|
return join(dir, name, subpath || '')
|
||||||
}) ?? path
|
}) ?? path
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (existsSync(path) && !(await isDirectory(path))) {
|
||||||
|
path = path.replace(/\.[a-z]+$/, '')
|
||||||
|
}
|
||||||
|
|
||||||
if (isAbsolute(path)) {
|
if (isAbsolute(path)) {
|
||||||
path = relative(join(nuxt.options.buildDir, 'types'), path)
|
path = relative(join(nuxt.options.buildDir, 'types'), path)
|
||||||
}
|
}
|
||||||
|
|
||||||
path = stripExtension(path)
|
|
||||||
resolvedImportPathMap.set(from, path)
|
resolvedImportPathMap.set(from, path)
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,9 @@
|
|||||||
|
import { promises as fsp } from 'node:fs'
|
||||||
|
|
||||||
export function toArray<T> (value: T | T[]): T[] {
|
export function toArray<T> (value: T | T[]): T[] {
|
||||||
return Array.isArray(value) ? value : [value]
|
return Array.isArray(value) ? value : [value]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function isDirectory (path: string) {
|
||||||
|
return (await fsp.lstat(path)).isDirectory()
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user