UNPKG

1.54 kBJavaScriptView Raw
1/**
2 * @module
3 * @see {@link https://www.npmjs.com/package/jsonlint|JSON Lint}
4 */
5
6"use strict";
7
8const fs = require("fs").promises;
9const jsonlint = require("jsonlint");
10const 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 */
17const 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 */
33const 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
58module.exports = { configure, wrapper };