You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
967 B
JavaScript
42 lines
967 B
JavaScript
"use strict";
|
|
|
|
const stream = require("../stream");
|
|
|
|
module.exports = function (state) {
|
|
const isCss = require("../is-css")(state);
|
|
|
|
return function createCssDepsStream() {
|
|
let dependents = new Map();
|
|
let depsPhaseItems = [];
|
|
|
|
function handleItem(item) {
|
|
Object.values(item.deps).forEach((dependency) => {
|
|
if (!dependents.has(dependency)) {
|
|
dependents.set(dependency, new Set());
|
|
}
|
|
|
|
dependents.get(dependency).add(item);
|
|
});
|
|
|
|
depsPhaseItems.push(item);
|
|
}
|
|
|
|
function flush() {
|
|
return depsPhaseItems.map((item) => {
|
|
let selfIsCss = isCss(item);
|
|
|
|
let dependentsForItem = dependents.get(item.id);
|
|
let hasDependents = (dependentsForItem != null);
|
|
let dependentsAreCss = hasDependents && Array.from(dependentsForItem).every((dependent) => isCss(dependent));
|
|
|
|
return {
|
|
... item,
|
|
__icssify__discardable: (selfIsCss && dependentsAreCss)
|
|
};
|
|
});
|
|
}
|
|
|
|
return stream(handleItem, flush);
|
|
};
|
|
};
|