@jsenv/import-map
Version:
Helpers to implement importmaps.
52 lines (47 loc) • 1.33 kB
JavaScript
import { urlToPathname } from "./internal/urlToPathname.js"
import { pathnameToExtension } from "./internal/pathnameToExtension.js"
import { resolveUrl } from "./resolveUrl.js"
import { applyImportMap } from "./applyImportMap.js"
export const resolveImport = ({
specifier,
importer,
importMap,
defaultExtension = true,
createBareSpecifierError,
onImportMapping = () => {},
}) => {
return applyDefaultExtension({
url: importMap
? applyImportMap({
importMap,
specifier,
importer,
createBareSpecifierError,
onImportMapping,
})
: resolveUrl(specifier, importer),
importer,
defaultExtension,
})
}
const applyDefaultExtension = ({ url, importer, defaultExtension }) => {
if (urlToPathname(url).endsWith("/")) {
return url
}
if (typeof defaultExtension === "string") {
const extension = pathnameToExtension(url)
if (extension === "") {
return `${url}${defaultExtension}`
}
return url
}
if (defaultExtension === true) {
const extension = pathnameToExtension(url)
if (extension === "" && importer) {
const importerPathname = urlToPathname(importer)
const importerExtension = pathnameToExtension(importerPathname)
return `${url}${importerExtension}`
}
}
return url
}