@jsenv/core
Version:
Tool to develop, test and build js projects
48 lines (45 loc) • 1.9 kB
JavaScript
import { ensureWindowsDriveLetter } from "@jsenv/filesystem";
import { generateSourcemapFileUrl } from "@jsenv/sourcemap";
import { moveUrl, setUrlFilename, urlIsOrIsInsideOf } from "@jsenv/urls";
export const determineFileUrlForOutDirectory = (urlInfo) => {
let { url, filenameHint } = urlInfo;
const { rootDirectoryUrl, outDirectoryUrl } = urlInfo.context;
if (!outDirectoryUrl) {
return url;
}
if (!url.startsWith("file:")) {
return url;
}
if (!urlIsOrIsInsideOf(url, rootDirectoryUrl)) {
const fsRootUrl = ensureWindowsDriveLetter("file:///", url);
url = `${rootDirectoryUrl}@fs/${url.slice(fsRootUrl.length)}`;
}
if (filenameHint) {
url = setUrlFilename(url, filenameHint);
}
const outUrl = moveUrl({
url,
from: rootDirectoryUrl,
to: outDirectoryUrl,
});
return outUrl;
};
export const determineSourcemapFileUrl = (urlInfo) => {
// sourcemap is a special kind of reference:
// It's a reference to a content generated dynamically the content itself.
// when jsenv is done cooking the file
// during build it's urlInfo.url to be inside the build
// but otherwise it's generatedUrl to be inside .jsenv/ directory
const generatedUrlObject = new URL(urlInfo.generatedUrl);
generatedUrlObject.searchParams.delete("js_module_fallback");
generatedUrlObject.searchParams.delete("as_js_module");
generatedUrlObject.searchParams.delete("as_js_classic");
generatedUrlObject.searchParams.delete("as_css_module");
generatedUrlObject.searchParams.delete("as_json_module");
generatedUrlObject.searchParams.delete("as_text_module");
generatedUrlObject.searchParams.delete("dynamic_import");
generatedUrlObject.searchParams.delete("dynamic_import_id");
generatedUrlObject.searchParams.delete("cjs_as_js_module");
const urlForSourcemap = generatedUrlObject.href;
return generateSourcemapFileUrl(urlForSourcemap);
};