eslint-plugin-yaml
Version:
134 lines • 15.1 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const js_yaml_1 = require("js-yaml");
const jshint_1 = require("jshint");
const package_json_1 = __importDefault(require("../package.json"));
const path_1 = __importDefault(require("path"));
function isYaml(fileName) {
const fileExtension = path_1.default.extname(fileName);
return [".yaml", ".yml"].includes(fileExtension);
}
const fileContents = new Map();
function preprocess(text, fileName) {
if (!isYaml(fileName)) {
return [];
}
fileContents.set(fileName, text);
return [{ text, filename: fileName }];
}
function postprocess(_messages, fileName) {
var _a, _b;
if (!isYaml(fileName)) {
return [];
}
let linter_messages = [];
const fileContent = fileContents.get(fileName);
if (fileContent !== undefined) {
let yamlDocs;
try {
yamlDocs = loadYaml(fileContent, fileName);
}
catch (e) {
const { message, mark } = e;
return [
{
ruleId: "invalid-yaml",
severity: 2,
message,
source: mark === null || mark === void 0 ? void 0 : mark.buffer,
line: (_a = mark === null || mark === void 0 ? void 0 : mark.line) !== null && _a !== void 0 ? _a : 0,
column: (_b = mark === null || mark === void 0 ? void 0 : mark.column) !== null && _b !== void 0 ? _b : 0,
},
];
}
const errors = yamlDocs.flatMap((yamlDoc) => lintJSON(yamlDoc));
linter_messages = errors.map((error) => {
const { reason, evidence, line, character } = error;
return {
ruleId: "bad-yaml",
severity: 2,
message: reason,
source: evidence,
line,
column: character,
};
});
fileContents.delete(fileName);
}
return linter_messages;
}
function loadYaml(fileContent, fileName) {
return (0, js_yaml_1.loadAll)(fileContent, undefined, {
filename: fileName,
json: false,
});
}
function lintJSON(yamlDoc) {
var _a;
const yaml_json = JSON.stringify(yamlDoc, null, 2);
(0, jshint_1.JSHINT)(yaml_json);
const data = jshint_1.JSHINT.data();
const errors = (_a = data === null || data === void 0 ? void 0 : data.errors) !== null && _a !== void 0 ? _a : [];
return errors;
}
const processors = {
[package_json_1.default.name]: {
meta: {
name: package_json_1.default.name,
version: package_json_1.default.version,
},
preprocess,
postprocess,
},
};
const meta = {
name: package_json_1.default.name,
version: package_json_1.default.version,
type: "problem",
docs: {
description: "YAML linting",
category: "Parsing Issues",
recommended: false,
url: "https://github.com/aminya/eslint-plugin-yaml",
},
fixable: "code",
schema: [],
};
const plugin = {
meta,
processors,
configs: {
recommended: {},
legacy: {},
},
};
const recommendedConfig = {
name: `${package_json_1.default.name}/recommended}`,
files: ["**/*.yaml", "**/*.yml", "!**/node_modules/**", "!**/pnpm-lock.yaml", "**/.github/**.{yml,yaml}"],
processor: {
name: package_json_1.default.name,
preprocess,
postprocess,
},
plugins: {
[package_json_1.default.name]: plugin,
},
};
plugin.configs.recommended = recommendedConfig;
const legacyConfig = {
overrides: [
{
plugins: [package_json_1.default.name],
files: ["**/*.yml", "**/*.yaml", "!**/node_modules/**", "!**/pnpm-lock.yaml", "**/.github/**.{yml,yaml}"],
processor: `yaml/${package_json_1.default.name}`,
},
],
};
plugin.configs.legacy = legacyConfig;
exports.default = plugin;
module.exports = plugin;
module.exports.default = plugin;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LmN0cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFDQUFpQztBQUNqQyxtQ0FBNkU7QUFFN0UsbUVBQWlDO0FBQ2pDLGdEQUF1QjtBQUV2QixTQUFTLE1BQU0sQ0FBQyxRQUFnQjtJQUM5QixNQUFNLGFBQWEsR0FBRyxjQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzVDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFBO0FBQ2xELENBQUM7QUFHRCxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQTtBQUU5QyxTQUFTLFVBQVUsQ0FBQyxJQUFZLEVBQUUsUUFBZ0I7SUFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sRUFBRSxDQUFBO0lBQ1gsQ0FBQztJQUVELFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFBO0lBR2hDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQTtBQUN2QyxDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsU0FBaUMsRUFBRSxRQUFnQjs7SUFDdEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sRUFBRSxDQUFBO0lBQ1gsQ0FBQztJQVVELElBQUksZUFBZSxHQUF5QixFQUFFLENBQUE7SUFFOUMsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUM5QyxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUU5QixJQUFJLFFBQW1DLENBQUE7UUFDdkMsSUFBSSxDQUFDO1lBQ0gsUUFBUSxHQUFHLFFBQVEsQ0FBQyxXQUFX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Q1AsV0FBVyxFQUFFLEVBQXVCO1FBQ3BDLE1BQU0sRUFBRSxFQUFtQjtLQUM1QjtDQUNzQixDQUFBO0FBRXpCLE1BQU0saUJBQWlCLEdBQXNCO0lBQzNDLElBQUksRUFBRSxHQUFHLHNCQUFHLENBQUMsSUFBSSxlQUFlO0lBQ2hDLEtBQUssRUFBRSxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsMEJBQTBCLENBQUM7SUFDekcsU0FBUyxFQUFFO1FBQ1QsSUFBSSxFQUFFLHNCQUFHLENBQUMsSUFBSTtRQUNkLFVBQVU7UUFDVixXQUFXO0tBQ1o7SUFDRCxPQUFPLEVBQUU7UUFDUCxDQUFDLHNCQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTTtLQUNuQjtDQUNGLENBQUE7QUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQTtBQUU5QyxNQUFNLFlBQVksR0FBa0I7SUFDbEMsU0FBUyxFQUFFO1FBQ1Q7WUFDRSxPQUFPLEVBQUUsQ0FBQyxzQkFBRyxDQUFDLElBQUksQ0FBQztZQUNuQixLQUFLLEVBQUUsQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFLG9CQUFvQixFQUFFLDBCQUEwQixDQUFDO1lBQ3pHLFNBQVMsRUFBRSxRQUFRLHNCQUFHLENBQUMsSUFBSSxFQUFFO1NBQzlCO0tBQ0Y7Q0FDRixDQUFBO0FBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFBO0FBRXBDLGtCQUFlLE1BQU0sQ0FBQTtBQUNyQixNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQTtBQUN2QixNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2FkQWxsIH0gZnJvbSBcImpzLXlhbWxcIlxuaW1wb3J0IHsgSlNISU5UIGFzIGpzaGludCwgdHlwZSBMaW50RXJyb3IgYXMgSnNIaW50TGludEVycm9ycyB9IGZyb20gXCJqc2hpbnRcIlxuaW1wb3J0IHR5cGUgeyBMaW50ZXIsIEVTTGludCB9IGZyb20gXCJlc2xpbnRcIlxuaW1wb3J0IHBrZyBmcm9tIFwiLi4vcGFja2FnZS5qc29uXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcblxuZnVuY3Rpb24gaXNZYW1sKGZpbGVOYW1lOiBzdHJpbmcpIHtcbiAgY29uc3QgZmlsZUV4dGVuc2lvbiA9IHBhdGguZXh0bmFtZShmaWxlTmFtZSlcbiAgcmV0dXJuIFtcIi55YW1sXCIsIFwiLnltbFwiXS5pbmNsdWRlcyhmaWxlRXh0ZW5zaW9uKVxufVxuXG4vLyBmaWxlbmFtZSAtPiBmaWxlQ29udGVudFxuY29uc3QgZmlsZUNvbnRlbnRzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKVxuXG5mdW5jdGlvbiBwcmVwcm9jZXNzKHRleHQ6IHN0cmluZywgZmlsZU5hbWU6IHN0cmluZyk6IExpbnRlci5Qcm9jZXNzb3JGaWxlW10ge1xuICBpZiAoIWlzWWFtbChmaWxlTmFtZSkpIHtcbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIGZpbGVDb250ZW50cy5zZXQoZmlsZU5hbWUsIHRleHQpXG5cbiAgLy8gcmV0dXJuIGFuIGFycmF5IG9mIGNvZGUgYmxvY2tzIHRvIGxpbnRcbiAgcmV0dXJuIFt7IHRleHQsIGZpbGVuYW1lOiBmaWxlTmFtZSB9XVxufVxuXG5mdW5jdGlvbiBwb3N0cHJvY2VzcyhfbWVzc2FnZXM6IExpbnRlci5MaW50TWVzc2FnZVtdW10sIGZpbGVOYW1lOiBzdHJpbmcpOiBMaW50ZXIuTGludE1lc3NhZ2VbXSB7XG4gIGlmICghaXNZYW1sKGZpbGVOYW1lKSkge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgLy8gdGFrZXMgYSBNZXNzYWdlW11bXSBhbmQgZmlsZW5hbWVcbiAgLy8gYG1lc3NhZ2VzYCBhcmd1bWVudCBjb250YWlucyB0d28tZGltZW5zaW9uYWwgYXJyYXkgb2YgTWVzc2FnZSBvYmplY3RzXG4gIC8vIHdoZXJlIGVhY2ggdG9wLWxldmVsIGFycmF5IGl0ZW0gY29udGFpbnMgYXJyYXkgb2YgbGludCBtZXNzYWdlcyByZWxhdGVkXG4gIC8vIHRvIHRoZSB0ZXh0IHRoYXQgd2FzIHJldHVybmVkIGluIGFycmF5IGZyb20gcHJlcHJvY2VzcygpIG1ldGhvZFxuXG4gIC8qXG4gICAqIFlBTUwgTGludCBieSBWYWxpZGF0aW9uXG4gICAqL1xuICBsZXQgbGludGVyX21lc3NhZ2VzOiBMaW50ZXIuTGludE1lc3NhZ2VbXSA9IFtdXG5cbiAgY29uc3QgZmlsZUNvbnRlbnQgPSBmaWxlQ29udGVudHMuZ2V0KGZpbGVOYW1lKVxuICBpZiAoZmlsZUNvbnRlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIEdldCBkb2N1bWVudCwgb3IgdGhyb3cgZXhjZXB0aW9uIG9uIGVycm9yXG4gICAgbGV0IHlhbWxEb2NzOiBMb2FkWWFtbFZhbHVlIHwgdW5kZWZpbmVkXG4gICAgdHJ5IHtcbiAgICAgIHlhbWxEb2NzID0gbG9hZFlhbWwoZmlsZUNvbnRlbnQsIGZpbGVOYW1lKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGl0IHNlZW1zIG1hcmsgY2FuIGJlIHVuZGVmaW5lZCBpc3N1ZSAjNjdcbiAgICAgIHR5cGUgTG9hZFlhbWxFeGNlcHRpb24gPSB7XG4gICAgICAgIG1lc3NhZ2U6IHN0cmluZ1xuICAgICAgICBtYXJrPzogeyBidWZmZXI6IHN0cmluZzsgbGluZTogbnVtYmVyOyBjb2x1bW46IG51bWJlciB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgbWVzc2FnZSwgbWFyayB9ID0gZSBhcyBMb2FkWWFtbEV4Y2VwdGlvblxuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIHJ1bGVJZDogXCJpbnZhbGlkLXlhbWxcIixcbiAgICAgICAgICBzZXZlcml0eTogMixcbiAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgIHNvdXJjZTogbWFyaz8uYnVmZmVyLFxuICAgICAgICAgIGxpbmU6IG1hcms/LmxpbmUgPz8gMCxcbiAgICAgICAgICBjb2x1bW46IG1hcms/LmNvbHVtbiA/PyAwLFxuICAgICAgICB9LFxuICAgICAgXVxuICAgIH1cbiAgICAvLyBhdCB0aGlzIHBvaW50IHlhbWxEb2NzIGlzIGRlZmluZWRcblxuICAgIC8qXG4gICAgICogWUFNTCBMaW50IHZpYSBKU09OXG4gICAgICovXG4gICAgY29uc3QgZXJyb3JzID0geWFtbERvY3MuZmxhdE1hcCgoeWFtbERvYykgPT4gbGludEpTT04oeWFtbERvYykpXG4gICAgbGludGVyX21lc3NhZ2VzID0gZXJyb3JzLm1hcCgoZXJyb3IpID0+IHtcbiAgICAgIGNvbnN0IHsgcmVhc29uLCBldmlkZW5jZSwgbGluZSwgY2hhcmFjdGVyIH0gPSBlcnJvclxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcnVsZUlkOiBcImJhZC15YW1sXCIsXG4gICAgICAgIHNldmVyaXR5OiAyLFxuICAgICAgICBtZXNzYWdlOiByZWFzb24sXG4gICAgICAgIHNvdXJjZTogZXZpZGVuY2UsXG4gICAgICAgIGxpbmUsXG4gICAgICAgIGNvbHVtbjogY2hhcmFjdGVyLFxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyBlbXB0eSBjYWNoZVxuICAgIGZpbGVDb250ZW50cy5kZWxldGUoZmlsZU5hbWUpXG4gIH1cblxuICAvLyAvLyB5b3UgbmVlZCB0byByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgb2YgdGhlIG1lc3NhZ2VzIHlvdSB3YW50IHRvIGtlZXBcbiAgcmV0dXJuIGxpbnRlcl9tZXNzYWdlc1xufVxuXG50eXBlIExvYWRZYW1sVmFsdWUgPSB1bmtub3duW11cblxuLyoqIFVzZSBqcy15YW1sIGZvciByZWFkaW5nIHRoZSB5YW1sIGZpbGUgKi9cbmZ1bmN0aW9uIGxvYWRZYW1sKGZpbGVDb250ZW50OiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcpOiBMb2FkWWFtbFZhbHVlIHtcbiAgLy8gR2V0IGRvY3VtZW50LCBvciB0aHJvdyBleGNlcHRpb24gb24gZXJyb3JcbiAgcmV0dXJuIGxvYWRBbGwoZmlsZUNvbnRlbnQsIHVuZGVmaW5lZCwge1xuICAgIGZpbGVuYW1lOiBmaWxlTmFtZSxcbiAgICBqc29uOiBmYWxzZSxcbiAgfSlcbn1cblxuLyoqIFlBTUwgTGludCB2aWEgSlNPTiAoY29udmVydGluZyB0byBqc29uIGFuZCBsaW50aW5nIHVzaW5nIGpzaGludCkgKi9cbmZ1bmN0aW9uIGxpbnRKU09OKHlhbWxEb2M6IExvYWRZYW1sVmFsdWVbMF0pOiBKc0hpbnRMaW50RXJyb3JzW10ge1xuICBjb25zdCB5YW1sX2pzb24gPSBKU09OLnN0cmluZ2lmeSh5YW1sRG9jLCBudWxsLCAyKVxuICBqc2hpbnQoeWFtbF9qc29uKVxuICBjb25zdCBkYXRhID0ganNoaW50LmRhdGEoKVxuICBjb25zdCBlcnJvcnMgPSBkYXRhPy5lcnJvcnMgPz8gW11cbiAgcmV0dXJuIGVycm9yc1xufVxuXG5jb25zdCBwcm9jZXNzb3JzID0ge1xuICAvLyBhZGQgeW91ciBwcm9jZXNzb3JzIGhlcmVcbiAgW3BrZy5uYW1lXToge1xuICAgIG1ldGE6IHtcbiAgICAgIG5hbWU6IHBrZy5uYW1lLFxuICAgICAgdmVyc2lvbjogcGtnLnZlcnNpb24sXG4gICAgfSxcbiAgICBwcmVwcm9jZXNzLFxuICAgIHBvc3Rwcm9jZXNzLFxuICB9LFxufSBzYXRpc2ZpZXMgRVNMaW50LlBsdWdpbltcInByb2Nlc3NvcnNcIl1cblxuY29uc3QgbWV0YSA9IHtcbiAgbmFtZTogcGtnLm5hbWUsXG4gIHZlcnNpb246IHBrZy52ZXJzaW9uLFxuICB0eXBlOiBcInByb2JsZW1cIixcbiAgZG9jczoge1xuICAgIGRlc2NyaXB0aW9uOiBcIllBTUwgbGludGluZ1wiLFxuICAgIGNhdGVnb3J5OiBcIlBhcnNpbmcgSXNzdWVzXCIsXG4gICAgcmVjb21tZW5kZWQ6IGZhbHNlLFxuICAgIHVybDogXCJodHRwczovL2dpdGh1Yi5jb20vYW1pbnlhL2VzbGludC1wbHVnaW4teWFtbFwiLFxuICB9LFxuICBmaXhhYmxlOiBcImNvZGVcIixcbiAgc2NoZW1hOiBbXSxcbn1cblxuY29uc3QgcGx1Z2luID0ge1xuICBtZXRhLFxuICBwcm9jZXNzb3JzLFxuICBjb25maWdzOiB7XG4gICAgcmVjb21tZW5kZWQ6IHt9IGFzIExpbnRlci5GbGF0Q29uZmlnLFxuICAgIGxlZ2FjeToge30gYXMgTGludGVyLkNvbmZpZyxcbiAgfSxcbn0gc2F0aXNmaWVzIEVTTGludC5QbHVnaW5cblxuY29uc3QgcmVjb21tZW5kZWRDb25maWc6IExpbnRlci5GbGF0Q29uZmlnID0ge1xuICBuYW1lOiBgJHtwa2cubmFtZX0vcmVjb21tZW5kZWR9YCxcbiAgZmlsZXM6IFtcIioqLyoueWFtbFwiLCBcIioqLyoueW1sXCIsIFwiISoqL25vZGVfbW9kdWxlcy8qKlwiLCBcIiEqKi9wbnBtLWxvY2sueWFtbFwiLCBcIioqLy5naXRodWIvKioue3ltbCx5YW1sfVwiXSxcbiAgcHJvY2Vzc29yOiB7XG4gICAgbmFtZTogcGtnLm5hbWUsXG4gICAgcHJlcHJvY2VzcyxcbiAgICBwb3N0cHJvY2VzcyxcbiAgfSxcbiAgcGx1Z2luczoge1xuICAgIFtwa2cubmFtZV06IHBsdWdpbixcbiAgfSxcbn1cblxucGx1Z2luLmNvbmZpZ3MucmVjb21tZW5kZWQgPSByZWNvbW1lbmRlZENvbmZpZ1xuXG5jb25zdCBsZWdhY3lDb25maWc6IExpbnRlci5Db25maWcgPSB7XG4gIG92ZXJyaWRlczogW1xuICAgIHtcbiAgICAgIHBsdWdpbnM6IFtwa2cubmFtZV0sXG4gICAgICBmaWxlczogW1wiKiovKi55bWxcIiwgXCIqKi8qLnlhbWxcIiwgXCIhKiovbm9kZV9tb2R1bGVzLyoqXCIsIFwiISoqL3BucG0tbG9jay55YW1sXCIsIFwiKiovLmdpdGh1Yi8qKi57eW1sLHlhbWx9XCJdLFxuICAgICAgcHJvY2Vzc29yOiBgeWFtbC8ke3BrZy5uYW1lfWAsXG4gICAgfSxcbiAgXSxcbn1cblxucGx1Z2luLmNvbmZpZ3MubGVnYWN5ID0gbGVnYWN5Q29uZmlnXG5cbmV4cG9ydCBkZWZhdWx0IHBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSBwbHVnaW5cbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBwbHVnaW5cbiJdfQ==