@stylable/core
Version:
CSS for Components
74 lines • 2.64 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.assureRelativeUrlPrefix = exports.fixRelativeUrls = exports.makeAbsolute = exports.isRelativeNativeCss = exports.isAsset = void 0;
const path_1 = __importDefault(require("path"));
const process_declaration_functions_1 = require("./process-declaration-functions");
function isExternal(url) {
return url === '' || url.startsWith('data:') || isUrl(url);
}
function isUrl(maybeUrl) {
maybeUrl = maybeUrl.trim();
if (maybeUrl.includes(' ')) {
return false;
}
try {
new URL(maybeUrl);
return true;
}
catch {
return false;
}
}
function isAsset(url) {
return !isExternal(url);
}
exports.isAsset = isAsset;
function isRelativeNativeCss(fullPath) {
return (fullPath.endsWith('.css') &&
!fullPath.endsWith('.st.css') &&
!fullPath.includes(path_1.default.sep + 'node_modules' + path_1.default.sep) &&
!isUrl(fullPath));
}
exports.isRelativeNativeCss = isRelativeNativeCss;
function makeAbsolute(host, resourcePath, rootContext, moduleContext) {
const isAbs = host.isAbsolute(resourcePath);
let abs;
if (isExternal(resourcePath) || resourcePath.startsWith('~')) {
abs = resourcePath;
}
else if (isAbs && resourcePath.startsWith('/')) {
abs = host.join(rootContext, resourcePath);
}
else if (isAbs) {
abs = resourcePath;
}
else {
abs = host.join(moduleContext, resourcePath);
}
return abs;
}
exports.makeAbsolute = makeAbsolute;
function fixRelativeUrls(ast, originPath, targetPath) {
ast.walkDecls((decl) => {
(0, process_declaration_functions_1.processDeclarationFunctions)(decl, (node) => {
if (node.type === 'url') {
if (!node.url || !isAsset(node.url) || !node.url.startsWith('.')) {
return;
}
const url = path_1.default
.join(path_1.default.relative(path_1.default.dirname(targetPath), path_1.default.dirname(originPath)), node.url)
.replace(/\\/gm, '/');
node.url = assureRelativeUrlPrefix(url);
}
}, true);
});
}
exports.fixRelativeUrls = fixRelativeUrls;
function assureRelativeUrlPrefix(url) {
return !url.startsWith('./') && !url.startsWith('../') ? './' + url : url;
}
exports.assureRelativeUrlPrefix = assureRelativeUrlPrefix;
//# sourceMappingURL=stylable-assets.js.map