2021-05-03 17:00:04 +00:00
|
|
|
import * as fs from 'fs'
|
2022-09-07 15:49:29 +00:00
|
|
|
import { CachedInputFileSystem, ResolverFactory, Resolver, ResolveOptions } from 'enhanced-resolve-301'
|
2022-07-25 15:28:54 +00:00
|
|
|
import { equal } from 'tailwindcss-language-service/src/util/array'
|
|
|
|
|
|
|
|
let pnpApi: any
|
|
|
|
let extensions = Object.keys(require.extensions)
|
2021-05-03 17:00:04 +00:00
|
|
|
|
|
|
|
function createResolver(options: Partial<ResolveOptions> = {}): Resolver {
|
|
|
|
return ResolverFactory.createResolver({
|
|
|
|
fileSystem: new CachedInputFileSystem(fs, 4000),
|
|
|
|
useSyncFileSystemCalls: true,
|
|
|
|
// cachePredicate: () => false,
|
2021-09-24 16:47:01 +00:00
|
|
|
conditionNames: ['node', 'require'],
|
2022-07-25 15:28:54 +00:00
|
|
|
extensions,
|
|
|
|
pnpApi,
|
2021-05-03 17:00:04 +00:00
|
|
|
...options,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
let resolver = createResolver()
|
|
|
|
|
2022-07-25 15:28:54 +00:00
|
|
|
export function setPnpApi(newPnpApi: any): void {
|
|
|
|
pnpApi = newPnpApi
|
|
|
|
resolver = createResolver()
|
2021-05-03 17:00:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
export default function resolveFrom(from?: string, id?: string): string {
|
2021-10-08 15:48:44 +00:00
|
|
|
if (id.startsWith('\\\\')) return id
|
2022-07-25 15:28:54 +00:00
|
|
|
|
|
|
|
let newExtensions = Object.keys(require.extensions)
|
|
|
|
if (!equal(newExtensions, extensions)) {
|
|
|
|
extensions = newExtensions
|
|
|
|
resolver = createResolver()
|
|
|
|
}
|
|
|
|
|
2021-05-03 17:00:04 +00:00
|
|
|
let result = resolver.resolveSync({}, from, id)
|
|
|
|
if (result === false) throw Error()
|
2021-05-20 16:04:32 +00:00
|
|
|
// https://github.com/webpack/enhanced-resolve/issues/282
|
|
|
|
return result.replace(/\0#/g, '#')
|
2021-05-03 17:00:04 +00:00
|
|
|
}
|