| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- "use strict";
- var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.recordCssImportChain = exports.getCssImportBoundaries = exports.cssImporteeMap = exports.cssImporterMap = exports.resolvePostcssOptions = exports.compileCss = exports.rewriteCssUrls = exports.isCSSRequest = exports.cssModuleRE = exports.cssPreprocessLangRE = exports.urlRE = void 0;
- const path_1 = __importDefault(require("path"));
- const chalk_1 = __importDefault(require("chalk"));
- const transformUtils_1 = require("./transformUtils");
- const pathUtils_1 = require("./pathUtils");
- const resolveVue_1 = require("./resolveVue");
- const hash_sum_1 = __importDefault(require("hash-sum"));
- exports.urlRE = /url\(\s*('[^']+'|"[^"]+"|[^'")]+)\s*\)/;
- exports.cssPreprocessLangRE = /\.(less|sass|scss|styl|stylus|postcss)$/;
- exports.cssModuleRE = /\.module\.(less|sass|scss|styl|stylus|postcss|css)$/;
- exports.isCSSRequest = (file) => file.endsWith('.css') || exports.cssPreprocessLangRE.test(file);
- function rewriteCssUrls(css, replacerOrBase) {
- let replacer;
- if (typeof replacerOrBase === 'string') {
- replacer = (rawUrl) => {
- return path_1.default.posix.resolve(path_1.default.posix.dirname(replacerOrBase), rawUrl);
- };
- }
- else {
- replacer = replacerOrBase;
- }
- return transformUtils_1.asyncReplace(css, exports.urlRE, async (match) => {
- let [matched, rawUrl] = match;
- let wrap = '';
- const first = rawUrl[0];
- if (first === `"` || first === `'`) {
- wrap = first;
- rawUrl = rawUrl.slice(1, -1);
- }
- if (pathUtils_1.isExternalUrl(rawUrl) ||
- rawUrl.startsWith('data:') ||
- rawUrl.startsWith('#')) {
- return matched;
- }
- return `url(${wrap}${await replacer(rawUrl)}${wrap})`;
- });
- }
- exports.rewriteCssUrls = rewriteCssUrls;
- async function compileCss(root, publicPath, { source, filename, scoped, vars, modules, preprocessLang, preprocessOptions = {}, modulesOptions = {} }, isBuild = false) {
- const id = hash_sum_1.default(publicPath);
- const postcssConfig = await loadPostcssConfig(root);
- const { compileStyleAsync } = resolveVue_1.resolveCompiler(root);
- if (publicPath.endsWith('.css') &&
- !modules &&
- !postcssConfig &&
- !isBuild &&
- !source.includes('@import')) {
- // no need to invoke compile for plain css if no postcss config is present
- return source;
- }
- const { options: postcssOptions, plugins: postcssPlugins } = await resolvePostcssOptions(root, isBuild);
- if (preprocessLang) {
- preprocessOptions = preprocessOptions[preprocessLang] || preprocessOptions;
- // include node_modules for imports by default
- switch (preprocessLang) {
- case 'scss':
- case 'sass':
- preprocessOptions = {
- includePaths: ['node_modules'],
- ...preprocessOptions
- };
- break;
- case 'less':
- case 'stylus':
- preprocessOptions = {
- paths: ['node_modules'],
- ...preprocessOptions
- };
- }
- }
- return await compileStyleAsync({
- source,
- filename,
- id: `data-v-${id}`,
- scoped,
- vars,
- modules,
- modulesOptions: {
- generateScopedName: `[local]_${id}`,
- localsConvention: 'camelCase',
- ...modulesOptions
- },
- preprocessLang,
- preprocessCustomRequire: (id) => require(pathUtils_1.resolveFrom(root, id)),
- preprocessOptions,
- postcssOptions,
- postcssPlugins
- });
- }
- exports.compileCss = compileCss;
- let cachedPostcssConfig;
- async function loadPostcssConfig(root) {
- if (cachedPostcssConfig !== undefined) {
- return cachedPostcssConfig;
- }
- try {
- const load = require('postcss-load-config');
- return (cachedPostcssConfig = await load({}, root));
- }
- catch (e) {
- if (!/No PostCSS Config found/.test(e.message)) {
- console.error(chalk_1.default.red(`[vite] Error loading postcss config:`));
- console.error(e);
- }
- return (cachedPostcssConfig = null);
- }
- }
- async function resolvePostcssOptions(root, isBuild) {
- const config = await loadPostcssConfig(root);
- const options = config && config.options;
- const plugins = config && config.plugins ? config.plugins.slice() : [];
- plugins.unshift(require('postcss-import')());
- if (isBuild) {
- plugins.push(require('postcss-discard-comments')({ removeAll: true }));
- }
- return {
- options,
- plugins
- };
- }
- exports.resolvePostcssOptions = resolvePostcssOptions;
- exports.cssImporterMap = new Map();
- exports.cssImporteeMap = new Map();
- function getCssImportBoundaries(filePath, boundaries = new Set()) {
- if (!exports.cssImporterMap.has(filePath)) {
- return boundaries;
- }
- const importers = exports.cssImporterMap.get(filePath);
- for (const importer of importers) {
- boundaries.add(importer);
- getCssImportBoundaries(importer, boundaries);
- }
- return boundaries;
- }
- exports.getCssImportBoundaries = getCssImportBoundaries;
- function recordCssImportChain(dependencies, filePath) {
- const preImportees = exports.cssImporteeMap.get(filePath);
- // if import code change, should removed unused previous importee
- if (preImportees) {
- for (const preImportee of preImportees) {
- if (!dependencies.has(preImportee)) {
- const importers = exports.cssImporterMap.get(preImportee);
- if (importers) {
- importers.delete(filePath);
- }
- }
- }
- }
- dependencies.forEach((dependency) => {
- if (exports.cssImporterMap.has(dependency)) {
- exports.cssImporterMap.get(dependency).add(filePath);
- }
- else {
- exports.cssImporterMap.set(dependency, new Set([filePath]));
- }
- });
- exports.cssImporteeMap.set(filePath, dependencies);
- }
- exports.recordCssImportChain = recordCssImportChain;
- //# sourceMappingURL=cssUtils.js.map
|