Files
rustfs-console/scripts/typescript-loader.mjs
T

37 lines
1.2 KiB
JavaScript

import { access } from "node:fs/promises"
import { extname } from "node:path"
import { fileURLToPath } from "node:url"
const projectRoot = new URL("../", import.meta.url)
const extensions = [".ts", ".tsx", ".js", ".mjs"]
async function resolveExistingModule(baseUrl, context, nextResolve) {
for (const extension of extensions) {
const candidate = new URL(`${baseUrl.href}${extension}`)
try {
await access(fileURLToPath(candidate))
return nextResolve(candidate.href, context)
} catch {
// Try the next supported source extension.
}
}
return null
}
export async function resolve(specifier, context, nextResolve) {
if (specifier.startsWith("@/")) {
const resolved = await resolveExistingModule(new URL(specifier.slice(2), projectRoot), context, nextResolve)
if (resolved) return resolved
}
if ((specifier.startsWith("./") || specifier.startsWith("../")) && context.parentURL) {
const baseUrl = new URL(specifier, context.parentURL)
if (!extname(baseUrl.pathname)) {
const resolved = await resolveExistingModule(baseUrl, context, nextResolve)
if (resolved) return resolved
}
}
return nextResolve(specifier, context)
}