'use strict'; var path$3 = require('path'); var resolve$2 = require('resolve'); var fs$1 = require('fs'); var index$1 = require('./dep-2056ae8a.js'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e["default"] : e; } function _mergeNamespaces(n, m) { for (var i = 0; i < m.length; i++) { var e = m[i]; if (typeof e !== 'string' && !Array.isArray(e)) { for (var k in e) { if (k !== 'default' && !(k in n)) { n[k] = e[k]; } } } } return n; } var path__default = /*#__PURE__*/_interopDefaultLegacy(path$3); var resolve__default = /*#__PURE__*/_interopDefaultLegacy(resolve$2); var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs$1); var joinMedia$1 = function (parentMedia, childMedia) { if (!parentMedia.length && childMedia.length) return childMedia if (parentMedia.length && !childMedia.length) return parentMedia if (!parentMedia.length && !childMedia.length) return [] const media = []; parentMedia.forEach(parentItem => { childMedia.forEach(childItem => { if (parentItem !== childItem) media.push(`${parentItem} and ${childItem}`); }); }); return media }; var joinLayer$1 = function (parentLayer, childLayer) { if (!parentLayer.length && childLayer.length) return childLayer if (parentLayer.length && !childLayer.length) return parentLayer if (!parentLayer.length && !childLayer.length) return [] return parentLayer.concat(childLayer) }; // external tooling const resolve$1 = resolve__default; const moduleDirectories = ["web_modules", "node_modules"]; function resolveModule(id, opts) { return new Promise((res, rej) => { resolve$1(id, opts, (err, path) => (err ? rej(err) : res(path))); }) } var resolveId$1 = function (id, base, options) { const paths = options.path; const resolveOpts = { basedir: base, moduleDirectory: moduleDirectories.concat(options.addModulesDirectories), paths, extensions: [".css"], packageFilter: function processPackage(pkg) { if (pkg.style) pkg.main = pkg.style; else if (!pkg.main || !/\.css$/.test(pkg.main)) pkg.main = "index.css"; return pkg }, preserveSymlinks: false, }; return resolveModule(`./${id}`, resolveOpts) .catch(() => resolveModule(id, resolveOpts)) .catch(() => { if (paths.indexOf(base) === -1) paths.unshift(base); throw new Error( `Failed to find '${id}' in [ ${paths.join(",\n ")} ]` ) }) }; var readCache$1 = {exports: {}}; var pify$2 = {exports: {}}; var processFn = function (fn, P, opts) { return function () { var that = this; var args = new Array(arguments.length); for (var i = 0; i < arguments.length; i++) { args[i] = arguments[i]; } return new P(function (resolve, reject) { args.push(function (err, result) { if (err) { reject(err); } else if (opts.multiArgs) { var results = new Array(arguments.length - 1); for (var i = 1; i < arguments.length; i++) { results[i - 1] = arguments[i]; } resolve(results); } else { resolve(result); } }); fn.apply(that, args); }); }; }; var pify$1 = pify$2.exports = function (obj, P, opts) { if (typeof P !== 'function') { opts = P; P = Promise; } opts = opts || {}; opts.exclude = opts.exclude || [/.+Sync$/]; var filter = function (key) { var match = function (pattern) { return typeof pattern === 'string' ? key === pattern : pattern.test(key); }; return opts.include ? opts.include.some(match) : !opts.exclude.some(match); }; var ret = typeof obj === 'function' ? function () { if (opts.excludeMain) { return obj.apply(this, arguments); } return processFn(obj, P, opts).apply(this, arguments); } : {}; return Object.keys(obj).reduce(function (ret, key) { var x = obj[key]; ret[key] = typeof x === 'function' && filter(key) ? processFn(x, P, opts) : x; return ret; }, ret); }; pify$1.all = pify$1; var fs = fs__default; var path$2 = path__default; var pify = pify$2.exports; var stat = pify(fs.stat); var readFile = pify(fs.readFile); var resolve = path$2.resolve; var cache = Object.create(null); function convert(content, encoding) { if (Buffer.isEncoding(encoding)) { return content.toString(encoding); } return content; } readCache$1.exports = function (path, encoding) { path = resolve(path); return stat(path).then(function (stats) { var item = cache[path]; if (item && item.mtime.getTime() === stats.mtime.getTime()) { return convert(item.content, encoding); } return readFile(path).then(function (data) { cache[path] = { mtime: stats.mtime, content: data }; return convert(data, encoding); }); }).catch(function (err) { cache[path] = null; return Promise.reject(err); }); }; readCache$1.exports.sync = function (path, encoding) { path = resolve(path); try { var stats = fs.statSync(path); var item = cache[path]; if (item && item.mtime.getTime() === stats.mtime.getTime()) { return convert(item.content, encoding); } var data = fs.readFileSync(path); cache[path] = { mtime: stats.mtime, content: data }; return convert(data, encoding); } catch (err) { cache[path] = null; throw err; } }; readCache$1.exports.get = function (path, encoding) { path = resolve(path); if (cache[path]) { return convert(cache[path].content, encoding); } return null; }; readCache$1.exports.clear = function () { cache = Object.create(null); }; const readCache = readCache$1.exports; var loadContent$1 = filename => readCache(filename, "utf-8"); // builtin tooling const path$1 = path__default; // placeholder tooling let sugarss; var processContent$1 = function processContent( result, content, filename, options, postcss ) { const { plugins } = options; const ext = path$1.extname(filename); const parserList = []; // SugarSS support: if (ext === ".sss") { if (!sugarss) { try { sugarss = eval('require')('sugarss'); } catch {} // Ignore } if (sugarss) return runPostcss(postcss, content, filename, plugins, [sugarss]) } // Syntax support: if (result.opts.syntax && result.opts.syntax.parse) { parserList.push(result.opts.syntax.parse); } // Parser support: if (result.opts.parser) parserList.push(result.opts.parser); // Try the default as a last resort: parserList.push(null); return runPostcss(postcss, content, filename, plugins, parserList) }; function runPostcss(postcss, content, filename, plugins, parsers, index) { if (!index) index = 0; return postcss(plugins) .process(content, { from: filename, parser: parsers[index], }) .catch(err => { // If there's an error, try the next parser index++; // If there are no parsers left, throw it if (index === parsers.length) throw err return runPostcss(postcss, content, filename, plugins, parsers, index) }) } // external tooling const valueParser = index$1.lib; // extended tooling const { stringify } = valueParser; function split(params, start) { const list = []; const last = params.reduce((item, node, index) => { if (index < start) return "" if (node.type === "div" && node.value === ",") { list.push(item); return "" } return item + stringify(node) }, ""); list.push(last); return list } var parseStatements$1 = function (result, styles) { const statements = []; let nodes = []; styles.each(node => { let stmt; if (node.type === "atrule") { if (node.name === "import") stmt = parseImport(result, node); else if (node.name === "media") stmt = parseMedia(result, node); else if (node.name === "charset") stmt = parseCharset(result, node); } if (stmt) { if (nodes.length) { statements.push({ type: "nodes", nodes, media: [], layer: [], }); nodes = []; } statements.push(stmt); } else nodes.push(node); }); if (nodes.length) { statements.push({ type: "nodes", nodes, media: [], layer: [], }); } return statements }; function parseMedia(result, atRule) { const params = valueParser(atRule.params).nodes; return { type: "media", node: atRule, media: split(params, 0), layer: [], } } function parseCharset(result, atRule) { if (atRule.prev()) { return result.warn("@charset must precede all other statements", { node: atRule, }) } return { type: "charset", node: atRule, media: [], layer: [], } } function parseImport(result, atRule) { let prev = atRule.prev(); if (prev) { do { if ( prev.type !== "comment" && (prev.type !== "atrule" || (prev.name !== "import" && prev.name !== "charset" && !(prev.name === "layer" && !prev.nodes))) ) { return result.warn( "@import must precede all other statements (besides @charset or empty @layer)", { node: atRule } ) } prev = prev.prev(); } while (prev) } if (atRule.nodes) { return result.warn( "It looks like you didn't end your @import statement correctly. " + "Child nodes are attached to it.", { node: atRule } ) } const params = valueParser(atRule.params).nodes; const stmt = { type: "import", node: atRule, media: [], layer: [], }; // prettier-ignore if ( !params.length || ( params[0].type !== "string" || !params[0].value ) && ( params[0].type !== "function" || params[0].value !== "url" || !params[0].nodes.length || !params[0].nodes[0].value ) ) { return result.warn(`Unable to find uri in '${ atRule.toString() }'`, { node: atRule, }) } if (params[0].type === "string") stmt.uri = params[0].value; else stmt.uri = params[0].nodes[0].value; stmt.fullUri = stringify(params[0]); let remainder = params; if (remainder.length > 2) { if ( (remainder[2].type === "word" || remainder[2].type === "function") && remainder[2].value === "layer" ) { if (remainder[1].type !== "space") { return result.warn("Invalid import layer statement", { node: atRule }) } if (remainder[2].nodes) { stmt.layer = [stringify(remainder[2].nodes)]; } else { stmt.layer = [""]; } remainder = remainder.slice(2); } } if (remainder.length > 2) { if (remainder[1].type !== "space") { return result.warn("Invalid import media statement", { node: atRule }) } stmt.media = split(remainder, 2); } return stmt } // builtin tooling const path = path__default; // internal tooling const joinMedia = joinMedia$1; const joinLayer = joinLayer$1; const resolveId = resolveId$1; const loadContent = loadContent$1; const processContent = processContent$1; const parseStatements = parseStatements$1; function AtImport(options) { options = { root: process.cwd(), path: [], skipDuplicates: true, resolve: resolveId, load: loadContent, plugins: [], addModulesDirectories: [], ...options, }; options.root = path.resolve(options.root); // convert string to an array of a single element if (typeof options.path === "string") options.path = [options.path]; if (!Array.isArray(options.path)) options.path = []; options.path = options.path.map(p => path.resolve(options.root, p)); return { postcssPlugin: "postcss-import", Once(styles, { result, atRule, postcss }) { const state = { importedFiles: {}, hashFiles: {}, }; if (styles.source && styles.source.input && styles.source.input.file) { state.importedFiles[styles.source.input.file] = {}; } if (options.plugins && !Array.isArray(options.plugins)) { throw new Error("plugins option must be an array") } return parseStyles(result, styles, options, state, [], []).then( bundle => { applyRaws(bundle); applyMedia(bundle); applyStyles(bundle, styles); } ) function applyRaws(bundle) { bundle.forEach((stmt, index) => { if (index === 0) return if (stmt.parent) { const { before } = stmt.parent.node.raws; if (stmt.type === "nodes") stmt.nodes[0].raws.before = before; else stmt.node.raws.before = before; } else if (stmt.type === "nodes") { stmt.nodes[0].raws.before = stmt.nodes[0].raws.before || "\n"; } }); } function applyMedia(bundle) { bundle.forEach(stmt => { if ( (!stmt.media.length && !stmt.layer.length) || stmt.type === "charset" ) { return } if (stmt.type === "import") { stmt.node.params = `${stmt.fullUri} ${stmt.media.join(", ")}`; } else if (stmt.type === "media") { stmt.node.params = stmt.media.join(", "); } else { const { nodes } = stmt; const { parent } = nodes[0]; let outerAtRule; let innerAtRule; if (stmt.media.length && stmt.layer.length) { const mediaNode = atRule({ name: "media", params: stmt.media.join(", "), source: parent.source, }); const layerNode = atRule({ name: "layer", params: stmt.layer.filter(layer => layer !== "").join("."), source: parent.source, }); mediaNode.append(layerNode); innerAtRule = layerNode; outerAtRule = mediaNode; } else if (stmt.media.length) { const mediaNode = atRule({ name: "media", params: stmt.media.join(", "), source: parent.source, }); innerAtRule = mediaNode; outerAtRule = mediaNode; } else if (stmt.layer.length) { const layerNode = atRule({ name: "layer", params: stmt.layer.filter(layer => layer !== "").join("."), source: parent.source, }); innerAtRule = layerNode; outerAtRule = layerNode; } parent.insertBefore(nodes[0], outerAtRule); // remove nodes nodes.forEach(node => { node.parent = undefined; }); // better output nodes[0].raws.before = nodes[0].raws.before || "\n"; // wrap new rules with media query and/or layer at rule innerAtRule.append(nodes); stmt.type = "media"; stmt.node = outerAtRule; delete stmt.nodes; } }); } function applyStyles(bundle, styles) { styles.nodes = []; // Strip additional statements. bundle.forEach(stmt => { if (["charset", "import", "media"].includes(stmt.type)) { stmt.node.parent = undefined; styles.append(stmt.node); } else if (stmt.type === "nodes") { stmt.nodes.forEach(node => { node.parent = undefined; styles.append(node); }); } }); } function parseStyles(result, styles, options, state, media, layer) { const statements = parseStatements(result, styles); return Promise.resolve(statements) .then(stmts => { // process each statement in series return stmts.reduce((promise, stmt) => { return promise.then(() => { stmt.media = joinMedia(media, stmt.media || []); stmt.layer = joinLayer(layer, stmt.layer || []); // skip protocol base uri (protocol://url) or protocol-relative if ( stmt.type !== "import" || /^(?:[a-z]+:)?\/\//i.test(stmt.uri) ) { return } if (options.filter && !options.filter(stmt.uri)) { // rejected by filter return } return resolveImportId(result, stmt, options, state) }) }, Promise.resolve()) }) .then(() => { let charset; const imports = []; const bundle = []; function handleCharset(stmt) { if (!charset) charset = stmt; // charsets aren't case-sensitive, so convert to lower case to compare else if ( stmt.node.params.toLowerCase() !== charset.node.params.toLowerCase() ) { throw new Error( `Incompatable @charset statements: ${stmt.node.params} specified in ${stmt.node.source.input.file} ${charset.node.params} specified in ${charset.node.source.input.file}` ) } } // squash statements and their children statements.forEach(stmt => { if (stmt.type === "charset") handleCharset(stmt); else if (stmt.type === "import") { if (stmt.children) { stmt.children.forEach((child, index) => { if (child.type === "import") imports.push(child); else if (child.type === "charset") handleCharset(child); else bundle.push(child); // For better output if (index === 0) child.parent = stmt; }); } else imports.push(stmt); } else if (stmt.type === "media" || stmt.type === "nodes") { bundle.push(stmt); } }); return charset ? [charset, ...imports.concat(bundle)] : imports.concat(bundle) }) } function resolveImportId(result, stmt, options, state) { const atRule = stmt.node; let sourceFile; if (atRule.source && atRule.source.input && atRule.source.input.file) { sourceFile = atRule.source.input.file; } const base = sourceFile ? path.dirname(atRule.source.input.file) : options.root; return Promise.resolve(options.resolve(stmt.uri, base, options)) .then(paths => { if (!Array.isArray(paths)) paths = [paths]; // Ensure that each path is absolute: return Promise.all( paths.map(file => { return !path.isAbsolute(file) ? resolveId(file, base, options) : file }) ) }) .then(resolved => { // Add dependency messages: resolved.forEach(file => { result.messages.push({ type: "dependency", plugin: "postcss-import", file, parent: sourceFile, }); }); return Promise.all( resolved.map(file => { return loadImportContent(result, stmt, file, options, state) }) ) }) .then(result => { // Merge loaded statements stmt.children = result.reduce((result, statements) => { return statements ? result.concat(statements) : result }, []); }) } function loadImportContent(result, stmt, filename, options, state) { const atRule = stmt.node; const { media, layer } = stmt; if (options.skipDuplicates) { // skip files already imported at the same scope if ( state.importedFiles[filename] && state.importedFiles[filename][media] ) { return } // save imported files to skip them next time if (!state.importedFiles[filename]) state.importedFiles[filename] = {}; state.importedFiles[filename][media] = true; } return Promise.resolve(options.load(filename, options)).then( content => { if (content.trim() === "") { result.warn(`${filename} is empty`, { node: atRule }); return } // skip previous imported files not containing @import rules if (state.hashFiles[content] && state.hashFiles[content][media]) return return processContent( result, content, filename, options, postcss ).then(importedResult => { const styles = importedResult.root; result.messages = result.messages.concat(importedResult.messages); if (options.skipDuplicates) { const hasImport = styles.some(child => { return child.type === "atrule" && child.name === "import" }); if (!hasImport) { // save hash files to skip them next time if (!state.hashFiles[content]) state.hashFiles[content] = {}; state.hashFiles[content][media] = true; } } // recursion: import @import from imported file return parseStyles(result, styles, options, state, media, layer) }) } ) } }, } } AtImport.postcss = true; var postcssImport = AtImport; var index = /*#__PURE__*/_mergeNamespaces({ __proto__: null, 'default': postcssImport }, [postcssImport]); exports.index = index;