readme-assertions.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. "use strict";
  2. var _path = _interopRequireDefault(require("path"));
  3. var _fs = _interopRequireDefault(require("fs"));
  4. var _lodash = _interopRequireDefault(require("lodash"));
  5. var _glob = _interopRequireDefault(require("glob"));
  6. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  7. /**
  8. * This script is used to inline assertions into the README.md documents.
  9. */
  10. var trimCode = function trimCode(code) {
  11. var lines = _lodash.default.trim(code).split('\n');
  12. var indendation = lines[lines.length - 1].match(/^\s+/);
  13. var indentSize = indendation ? indendation[0].length : 0;
  14. lines = _lodash.default.map(lines, function (line, index) {
  15. if (index === 0) {
  16. return line;
  17. }
  18. return line.slice(indentSize);
  19. });
  20. return lines.join('\n');
  21. };
  22. var formatCodeSnippet = function formatCodeSnippet(setup) {
  23. var paragraphs = [];
  24. paragraphs.push(trimCode(setup.code));
  25. if (setup.settings) {
  26. paragraphs.push('// Settings: ' + JSON.stringify(setup.settings));
  27. }
  28. if (setup.options) {
  29. paragraphs.push('// Options: ' + JSON.stringify(setup.options));
  30. }
  31. if (setup.errors) {
  32. paragraphs.push('// Message: ' + setup.errors[0].message);
  33. }
  34. return paragraphs.join('\n');
  35. };
  36. var getAssertions = function getAssertions() {
  37. var assertionFiles = _glob.default.sync(_path.default.resolve(__dirname, '../../test/rules/assertions/*.js'));
  38. var assertionNames = _lodash.default.map(assertionFiles, function (filePath) {
  39. return _path.default.basename(filePath, '.js');
  40. });
  41. var assertionCodes = _lodash.default.map(assertionFiles, function (filePath) {
  42. // eslint-disable-next-line global-require, import/no-dynamic-require
  43. var codes = require(filePath);
  44. return {
  45. invalid: _lodash.default.map(codes.invalid, formatCodeSnippet),
  46. valid: _lodash.default.map(codes.valid, formatCodeSnippet)
  47. };
  48. });
  49. return _lodash.default.zipObject(assertionNames, assertionCodes);
  50. };
  51. var updateDocuments = function updateDocuments(assertions) {
  52. var readmeDocumentPath = _path.default.join(__dirname, '../../README.md');
  53. var documentBody = _fs.default.readFileSync(readmeDocumentPath, 'utf8');
  54. documentBody = documentBody.replace(/<!-- assertions ([a-z]+?) -->/ig, function (assertionsBlock) {
  55. var ruleName = assertionsBlock.match(/assertions ([a-z]+)/i)[1];
  56. var ruleAssertions = assertions[ruleName];
  57. if (!ruleAssertions) {
  58. throw new Error('No assertions available for rule "' + ruleName + '".');
  59. }
  60. return 'The following patterns are considered problems:\n\n````js\n' + ruleAssertions.invalid.join('\n\n') + '\n````\n\nThe following patterns are not considered problems:\n\n````js\n' + ruleAssertions.valid.join('\n\n') + '\n````\n';
  61. });
  62. _fs.default.writeFileSync(readmeDocumentPath, documentBody);
  63. };
  64. updateDocuments(getAssertions());
  65. //# sourceMappingURL=readme-assertions.js.map