UNPKG

@stylable/core

Version:

CSS for Components

74 lines 2.64 kB
"use strict"; 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