1. Module bundling added to reduce server calls as each file was taking ~440 ms to load on public server.\n2. JavaScript lib files refactored with OOP for use with module bundling.
This commit is contained in:
76
node_modules/icss-utils/src/extractICSS.js
generated
vendored
Normal file
76
node_modules/icss-utils/src/extractICSS.js
generated
vendored
Normal file
@@ -0,0 +1,76 @@
|
||||
const importPattern = /^:import\(("[^"]*"|'[^']*'|[^"']+)\)$/;
|
||||
const balancedQuotes = /^("[^"]*"|'[^']*'|[^"']+)$/;
|
||||
|
||||
const getDeclsObject = (rule) => {
|
||||
const object = {};
|
||||
|
||||
rule.walkDecls((decl) => {
|
||||
const before = decl.raws.before ? decl.raws.before.trim() : "";
|
||||
|
||||
object[before + decl.prop] = decl.value;
|
||||
});
|
||||
|
||||
return object;
|
||||
};
|
||||
/**
|
||||
*
|
||||
* @param {string} css
|
||||
* @param {boolean} removeRules
|
||||
* @param {'auto' | 'rule' | 'at-rule'} mode
|
||||
*/
|
||||
const extractICSS = (css, removeRules = true, mode = "auto") => {
|
||||
const icssImports = {};
|
||||
const icssExports = {};
|
||||
|
||||
function addImports(node, path) {
|
||||
const unquoted = path.replace(/'|"/g, "");
|
||||
icssImports[unquoted] = Object.assign(
|
||||
icssImports[unquoted] || {},
|
||||
getDeclsObject(node)
|
||||
);
|
||||
|
||||
if (removeRules) {
|
||||
node.remove();
|
||||
}
|
||||
}
|
||||
|
||||
function addExports(node) {
|
||||
Object.assign(icssExports, getDeclsObject(node));
|
||||
if (removeRules) {
|
||||
node.remove();
|
||||
}
|
||||
}
|
||||
|
||||
css.each((node) => {
|
||||
if (node.type === "rule" && mode !== "at-rule") {
|
||||
if (node.selector.slice(0, 7) === ":import") {
|
||||
const matches = importPattern.exec(node.selector);
|
||||
|
||||
if (matches) {
|
||||
addImports(node, matches[1]);
|
||||
}
|
||||
}
|
||||
|
||||
if (node.selector === ":export") {
|
||||
addExports(node);
|
||||
}
|
||||
}
|
||||
|
||||
if (node.type === "atrule" && mode !== "rule") {
|
||||
if (node.name === "icss-import") {
|
||||
const matches = balancedQuotes.exec(node.params);
|
||||
|
||||
if (matches) {
|
||||
addImports(node, matches[1]);
|
||||
}
|
||||
}
|
||||
if (node.name === "icss-export") {
|
||||
addExports(node);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return { icssImports, icssExports };
|
||||
};
|
||||
|
||||
module.exports = extractICSS;
|
||||
Reference in New Issue
Block a user