blob: 728867abc2c56c8a7e739e06df743f3c4aebc8a0 [file] [log] [blame]
"use strict";
var _escodegen = require("@es-joy/escodegen");
var _decamelize = _interopRequireDefault(require("decamelize"));
var _espree = require("espree");
var _esquery = _interopRequireDefault(require("esquery"));
var _promises = require("fs/promises");
var _path = require("path");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const rulesDir = './src/rules';
const dirContents = await (0, _promises.readdir)(rulesDir);
for (const file of dirContents) {
if (!file.endsWith('.js')) {
continue;
}
const fileContents = await (0, _promises.readFile)((0, _path.join)(rulesDir, file), 'utf8');
// console.log('file', file);
const ast = (0, _espree.parse)(fileContents, {
ecmaVersion: 2_024,
sourceType: 'module'
});
const results = _esquery.default.query(ast, 'ExportDefaultDeclaration[declaration.callee.name="iterateJsdoc"]' + ' Property[key.name="meta"] Property[key.name="schema"]');
if (results[0]?.value) {
const schema = (0, _escodegen.generate)(results[0]?.value);
// eslint-disable-next-line no-eval -- Need some parser
const json = eval('JSON.stringify(' + schema + ', null, 2)');
const parsed = JSON.parse(json);
let initial = '';
if (Array.isArray(parsed)) {
if (!parsed.length) {
// eslint-disable-next-line no-console -- CLI
console.log('skipping no options', file);
continue;
}
if (parsed.length >= 2) {
if (parsed.length >= 3 || parsed[0].type !== 'string') {
// eslint-disable-next-line no-console -- CLI
console.log('unexpectedly large schema', file);
continue;
// throw new Error('Unexpected long schema array');
}
initial = `string (${parsed[0].enum.map(item => {
return `"${item}"`;
}).join(', ')}) followed by object with `;
parsed.shift();
}
}
const obj = Array.isArray(parsed) ? parsed[0] : parsed;
const hyphenatedRule = (0, _decamelize.default)(file, {
separator: '-'
}).replace(/\.js$/v, '.md');
const docPath = (0, _path.join)('.README/rules', hyphenatedRule);
const ruleDocs = (await (0, _promises.readFile)(docPath, 'utf8')).replace(/(\|\s*Options\s*\|)([^\|]*)(\|)?/v, `$1${initial + Object.keys(obj.properties).map(key => {
return `\`${key}\``;
}).join(', ')}$3`);
await (0, _promises.writeFile)(docPath, ruleDocs);
}
}
//# sourceMappingURL=generateOptions.cjs.map