import { dirname, fromFileUrl, isAbsolute, join, toFileUrl } from "@std/path"
import { normalize } from "@std/path/posix/normalize"
import { cwd } from "./filesystem.ts"
export type ResolveOptions = {
base?: string | ImportMeta
entrypoint?: string
}
export function resolve(specifier: string, { base, entrypoint = "mod.ts" }: ResolveOptions = {}): string {
if (["./", "../", "/"].some((prefix) => specifier.startsWith(prefix))) {
if (specifier.endsWith("/")) {
specifier += entrypoint
}
if (typeof base === "object") {
base = (new URL(base.url).protocol === "file:") ? dirname(fromFileUrl(base.url)) : undefined
}
base ??= cwd()
return toFileUrl(normalize(isAbsolute(specifier) ? specifier : join(base, specifier))).href
}
return import.meta.resolve(specifier)
}
|