forked from joepie91/icssify
Use parametric modules for passing around state, and use that to implement a custom extensions option
parent
3cd5ff620a
commit
3840a1f8d3
@ -1,14 +1,17 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
const stream = require("./stream");
|
const stream = require("./stream");
|
||||||
const isCss = require("./is-css");
|
|
||||||
|
|
||||||
module.exports = function cssOnlyStream(handler, flushHandler) {
|
module.exports = function (state) {
|
||||||
return stream((item) => {
|
const isCss = require("./is-css")(state);
|
||||||
if (isCss(item)) {
|
|
||||||
return handler(item);
|
return function cssOnlyStream(handler, flushHandler) {
|
||||||
} else {
|
return stream((item) => {
|
||||||
return [ item ];
|
if (isCss(item)) {
|
||||||
}
|
return handler(item);
|
||||||
}, flushHandler);
|
} else {
|
||||||
|
return [ item ];
|
||||||
|
}
|
||||||
|
}, flushHandler);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
@ -1,5 +1,16 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
module.exports = function isCss(item) {
|
const defaultValue = require("default-value");
|
||||||
return /\.css$/.test(item.file);
|
const path = require("path");
|
||||||
|
|
||||||
|
// Yes, there is a good reason this is a separate module. In the future we may need to add more heuristics to determine whether a "CSS file" *really* is a CSS file, rather than just going off the filename, and this centralizes the checking logic we'd need to change for that. If this ever occurs, though, keep in mind that this function doesn't always get a *full* file object (sometimes it just gets an object with a filename), so any such heuristics would need to be able to deal with that.
|
||||||
|
|
||||||
|
module.exports = function (state) {
|
||||||
|
let targetExtensions = new Set(defaultValue(state.extensions, [ "css" ]));
|
||||||
|
|
||||||
|
return function isCss(item) {
|
||||||
|
let itemExtension = path.extname(item.file).replace(/^\./, "");
|
||||||
|
|
||||||
|
return targetExtensions.has(itemExtension);
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
@ -1,38 +1,41 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
const stream = require("../stream");
|
const stream = require("../stream");
|
||||||
const isCss = require("../is-css");
|
|
||||||
|
|
||||||
module.exports = function createCssDepsStream() {
|
module.exports = function (state) {
|
||||||
let dependents = new Map();
|
const isCss = require("../is-css")(state);
|
||||||
let depsPhaseItems = [];
|
|
||||||
|
return function createCssDepsStream() {
|
||||||
function handleItem(item) {
|
let dependents = new Map();
|
||||||
Object.values(item.deps).forEach((dependency) => {
|
let depsPhaseItems = [];
|
||||||
if (!dependents.has(dependency)) {
|
|
||||||
dependents.set(dependency, new Set());
|
function handleItem(item) {
|
||||||
}
|
Object.values(item.deps).forEach((dependency) => {
|
||||||
|
if (!dependents.has(dependency)) {
|
||||||
dependents.get(dependency).add(item);
|
dependents.set(dependency, new Set());
|
||||||
});
|
}
|
||||||
|
|
||||||
depsPhaseItems.push(item);
|
dependents.get(dependency).add(item);
|
||||||
}
|
});
|
||||||
|
|
||||||
function flush() {
|
depsPhaseItems.push(item);
|
||||||
return depsPhaseItems.map((item) => {
|
}
|
||||||
let selfIsCss = isCss(item);
|
|
||||||
|
function flush() {
|
||||||
let dependentsForItem = dependents.get(item.id);
|
return depsPhaseItems.map((item) => {
|
||||||
let hasDependents = (dependentsForItem != null);
|
let selfIsCss = isCss(item);
|
||||||
let dependentsAreCss = hasDependents && Array.from(dependentsForItem).every((dependent) => isCss(dependent));
|
|
||||||
|
let dependentsForItem = dependents.get(item.id);
|
||||||
return {
|
let hasDependents = (dependentsForItem != null);
|
||||||
... item,
|
let dependentsAreCss = hasDependents && Array.from(dependentsForItem).every((dependent) => isCss(dependent));
|
||||||
__icssify__discardable: (selfIsCss && dependentsAreCss)
|
|
||||||
};
|
return {
|
||||||
});
|
... item,
|
||||||
}
|
__icssify__discardable: (selfIsCss && dependentsAreCss)
|
||||||
|
};
|
||||||
return stream(handleItem, flush);
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return stream(handleItem, flush);
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
@ -1,13 +1,16 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
const cssOnlyStream = require("../css-only-stream");
|
|
||||||
const hideCss = require("../hide-css");
|
const hideCss = require("../hide-css");
|
||||||
|
|
||||||
module.exports = function createSyntaxHideStream() {
|
module.exports = function (state) {
|
||||||
return cssOnlyStream((file) => {
|
const cssOnlyStream = require("../css-only-stream")(state);
|
||||||
return {
|
|
||||||
... file,
|
return function createSyntaxHideStream() {
|
||||||
source: hideCss(file.source)
|
return cssOnlyStream((file) => {
|
||||||
};
|
return {
|
||||||
});
|
... file,
|
||||||
|
source: hideCss(file.source)
|
||||||
|
};
|
||||||
|
});
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
@ -1,13 +1,16 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
const cssOnlyStream = require("../css-only-stream");
|
|
||||||
const unhideCss = require("../unhide-css");
|
const unhideCss = require("../unhide-css");
|
||||||
|
|
||||||
module.exports = function createSyntaxHideStream() {
|
module.exports = function (state) {
|
||||||
return cssOnlyStream((file) => {
|
const cssOnlyStream = require("../css-only-stream")(state);
|
||||||
return {
|
|
||||||
... file,
|
return function createSyntaxHideStream() {
|
||||||
source: unhideCss(file.source)
|
return cssOnlyStream((file) => {
|
||||||
};
|
return {
|
||||||
});
|
... file,
|
||||||
|
source: unhideCss(file.source)
|
||||||
|
};
|
||||||
|
});
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue