UNPKG

1.95 kBJavaScriptView Raw
1/**
2 * @module
3 * @see {@link https://www.npmjs.com/package/purgecss|PurgeCSS}
4 */
5
6"use strict";
7
8const PurgeCSS = require("purgecss").default;
9const glob = require("../glob");
10const SEVERITY = require("../severity");
11
12/**
13 * Initialise un checker pour PurgeCSS.
14 *
15 * @returns {object} Le patron et les options par défaut.
16 */
17const configure = function () {
18 return {
19 "patterns": "*.css",
20 "linters": { "purgecss": { "content": ["*.html", "*.js"] } }
21 };
22};
23
24/**
25 * Vérifie un fichier avec l'utilitaire <strong>PurgeCSS</strong>.
26 *
27 * @param {string} file Le fichier qui sera vérifié.
28 * @param {number} level Le niveau de sévérité minimum des notifications
29 * retournées.
30 * @param {object} options Les options qui seront passées au linter.
31 * @param {string} root L'adresse du répertoire où se trouve le dossier
32 * <code>.metalint/</code>.
33 * @returns {Promise.<Array.<object>>} Une promesse retournant la liste des
34 * notifications.
35 */
36const wrapper = async function (file, level, options, root) {
37 if (SEVERITY.FATAL > level) {
38 return [];
39 }
40
41 const results = await new PurgeCSS().purge(Object.assign({}, options, {
42 // Utiliser le format des patrons de Metalint.
43 "content": glob.walk([], options.content, root),
44 "css": [file],
45 "rejected": true
46 }));
47 if (0 === results.length) {
48 return [{
49 "file": file,
50 "linter": "purgecss",
51 "severity": SEVERITY.FATAL,
52 "message": "No content provided."
53 }];
54 }
55
56 return results[0].rejected.map((rejected) => ({
57 "file": file,
58 "linter": "purgecss",
59 "severity": SEVERITY.ERROR,
60 "message": `'${rejected}' is never used.`
61 })).filter((n) => level >= n.severity);
62};
63
64module.exports = { configure, wrapper };