1 | /**
|
2 | * @module
|
3 | * @see {@link https://www.npmjs.com/package/jsonlint|JSON Lint}
|
4 | */
|
5 |
|
6 | ;
|
7 |
|
8 | const fs = require("fs").promises;
|
9 | const jsonlint = require("jsonlint");
|
10 | const SEVERITY = require("../severity");
|
11 |
|
12 | /**
|
13 | * Initialise un checker pour JSON Lint.
|
14 | *
|
15 | * @returns {object} Le patron et les options par défaut.
|
16 | */
|
17 | const configure = function () {
|
18 | return {
|
19 | "patterns": "*.json",
|
20 | "linters": { "jsonlint": null }
|
21 | };
|
22 | };
|
23 |
|
24 | /**
|
25 | * Vérifie un fichier avec le linter <strong>JSON Lint</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 | * @returns {Promise.<Array.<object>>} Une promesse retournant la liste des
|
31 | * notifications.
|
32 | */
|
33 | const wrapper = async function (file, level) {
|
34 | if (SEVERITY.ERROR > level) {
|
35 | return [];
|
36 | }
|
37 |
|
38 | const source = await fs.readFile(file, "utf-8");
|
39 | try {
|
40 | jsonlint.parse(source);
|
41 | return [];
|
42 | } catch (err) {
|
43 | const result = err.message.split("\n");
|
44 |
|
45 | return [{
|
46 | "file": file,
|
47 | "linter": "jsonlint",
|
48 | "message": result[3],
|
49 | // Augmenter de un le numéro de la ligne car JSON Lint commence les
|
50 | // numérotations à zéro.
|
51 | "locations": [{
|
52 | "line": parseInt(result[0].slice(20, -1), 10) + 1
|
53 | }]
|
54 | }];
|
55 | }
|
56 | };
|
57 |
|
58 | module.exports = { configure, wrapper };
|