UNPKG

1.78 kBJavaScriptView Raw
1/**
2 * @module
3 * @see {@link https://www.npmjs.com/package/doiuse|doiuse}
4 */
5
6"use strict";
7
8const fs = require("fs");
9const doiuse = require("doiuse/stream");
10const SEVERITY = require("../severity");
11
12/**
13 * Initialise un checker pour doiuse.
14 *
15 * @returns {object} Le patron et les options par défaut.
16 */
17const configure = function () {
18 return {
19 "patterns": "*.css",
20 "linters": { "doiuse": {} }
21 };
22};
23
24/**
25 * Vérifie un fichier avec le linter <strong>doiuse</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 * @returns {Promise.<Array.<object>>} Une promesse retournant la liste des
32 * notifications.
33 */
34const wrapper = async function (file, level, options) {
35 if (SEVERITY.ERROR > level) {
36 return [];
37 }
38
39 const results = await new Promise((resolve) => {
40 const data = [];
41 fs.createReadStream(file).pipe(doiuse(options))
42 .on("data", (d) => data.push(d))
43 .on("end", () => resolve(data));
44 });
45 return results.map((result) => ({
46 "file": file,
47 "linter": "doiuse",
48 "rule": result.feature,
49 "message": result.message.slice(result.message.indexOf(": ") + 2,
50 result.message.lastIndexOf(" (")),
51 "locations": [{
52 "line": result.usage.source.original.start.line,
53 "column": result.usage.source.original.start.column
54 }]
55 }));
56};
57
58module.exports = { configure, wrapper };