@jspm/generator
Version:
Package Import Map Generation Tool
67 lines (65 loc) • 2.65 kB
JavaScript
export function isFetchProtocol(protocol) {
return protocol === 'file:' || protocol === 'https:' || protocol === 'http:' || protocol === 'data:';
}
export let baseUrl;
// @ts-ignore
if (typeof Deno !== 'undefined') {
// @ts-ignore
const denoCwd = Deno.cwd();
baseUrl = new URL('file://' + (denoCwd[0] === '/' ? '' : '/') + denoCwd + '/');
} else if (typeof process !== 'undefined' && process.versions.node) {
baseUrl = new URL('file://' + process.cwd() + '/');
} else if (typeof document !== 'undefined') {
baseUrl = new URL(document.baseURI);
}
if (!baseUrl && typeof location !== 'undefined') {
baseUrl = new URL(location.href);
}
baseUrl.search = baseUrl.hash = '';
export function resolveUrl(url, mapUrl, rootUrl) {
if (url.startsWith('/')) return rootUrl ? new URL('.' + url.slice(url[1] === '/' ? 1 : 0), rootUrl).href : url;
return new URL(url, mapUrl).href;
}
export function importedFrom(parentUrl) {
if (!parentUrl) return '';
return ` imported from ${parentUrl}`;
}
function matchesRoot(url, baseUrl) {
return url.protocol === baseUrl.protocol && url.host === baseUrl.host && url.port === baseUrl.port && url.username === baseUrl.username && url.password === baseUrl.password;
}
export function relativeUrl(url, baseUrl, absolute = false) {
const href = url.href;
let baseUrlHref = baseUrl.href;
if (!baseUrlHref.endsWith('/')) baseUrlHref += '/';
if (href.startsWith(baseUrlHref)) return (absolute ? '/' : './') + href.slice(baseUrlHref.length);
if (!matchesRoot(url, baseUrl)) return url.href;
if (absolute) return url.href;
const baseUrlPath = baseUrl.pathname;
const urlPath = url.pathname;
const minLen = Math.min(baseUrlPath.length, urlPath.length);
let sharedBaseIndex = -1;
for(let i = 0; i < minLen; i++){
if (baseUrlPath[i] !== urlPath[i]) break;
if (urlPath[i] === '/') sharedBaseIndex = i;
}
return '../'.repeat(baseUrlPath.slice(sharedBaseIndex + 1).split('/').length - 1) + urlPath.slice(sharedBaseIndex + 1) + url.search + url.hash;
}
export function isURL(specifier) {
try {
if (specifier[0] === '#') return false;
new URL(specifier);
} catch {
return false;
}
return true;
}
export function isPlain(specifier) {
return !isRelative(specifier) && !isURL(specifier);
}
export function isRelative(specifier) {
return specifier.startsWith('./') || specifier.startsWith('../') || specifier.startsWith('/');
}
export function urlToNiceStr(url) {
if (url.startsWith(baseUrl.href)) return './' + url.slice(baseUrl.href.length);
}
//# sourceMappingURL=url.js.map