This is a small CLI tool that dumps all of Prettier’s default configuration options to a file in the format of your choice.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.js 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. #!/usr/bin/env node
  2. const fs = require('fs');
  3. const path = require('path');
  4. const { inspect } = require('util');
  5. const minimist = require('minimist');
  6. const prettier = require('prettier');
  7. const TOML = require('@iarna/toml');
  8. const YAML = require('yaml');
  9. const defaultConfigFor = function(format) {
  10. let config = prettier.getSupportInfo().options;
  11. if (format.match(/json/)) {
  12. config = config.filter(option => option.default !== Infinity);
  13. }
  14. if (format != 'js') {
  15. config = config.filter(option => option.default !== undefined);
  16. }
  17. return Object.fromEntries(
  18. config.map(option => [option.name, option.default])
  19. );
  20. };
  21. const formats = {
  22. json: {
  23. filename: '.prettierrc',
  24. generate: function() {
  25. return JSON.stringify(defaultConfigFor('json'), null, 2);
  26. },
  27. },
  28. yaml: {
  29. filename: '.prettierrc.yaml',
  30. generate: function() {
  31. return YAML.stringify(defaultConfigFor('yaml'));
  32. },
  33. },
  34. toml: {
  35. filename: '.prettierrc.toml',
  36. generate: function() {
  37. return TOML.stringify(defaultConfigFor('toml'));
  38. },
  39. },
  40. js: {
  41. filename: '.prettierrc.js',
  42. generate: function() {
  43. return `module.exports = ${inspect(defaultConfigFor('js'))};`;
  44. },
  45. },
  46. 'package.json': {
  47. filename: 'package.json',
  48. generate: function() {
  49. const file = path.resolve('package.json');
  50. if (!fs.existsSync(file)) {
  51. console.error(
  52. 'Error: no package.json file found in the current directory'
  53. );
  54. process.exit(0);
  55. }
  56. const data = JSON.parse(fs.readFileSync(file));
  57. data.prettier = defaultConfigFor('json');
  58. return JSON.stringify(data, null, 2);
  59. },
  60. },
  61. };
  62. function writeToFile(filename, data) {
  63. fs.writeFile(path.resolve(filename), `${data}\n`, {}, () => {
  64. console.log(`Wrote default config to ${filename}`);
  65. process.exit(0);
  66. });
  67. }
  68. function writeToStdout(data) {
  69. process.stdout.write(`${data}\n`);
  70. process.exit(0);
  71. }
  72. function help(logger) {
  73. if (!logger) logger = console.log;
  74. const formatDisplay = Object.keys(formats).join('|');
  75. logger('USAGE:');
  76. logger(' prettier-default-config [OPTIONS]');
  77. logger();
  78. logger('OPTIONS:');
  79. logger(' --format <FORMAT> The config file format to generate.');
  80. logger(` <${formatDisplay}>`);
  81. logger(' default: json');
  82. logger();
  83. logger(' --stdout Write config to STDOUT rather than to a file');
  84. logger();
  85. logger(' --help Prints help information');
  86. process.exit(0);
  87. }
  88. function run() {
  89. const args = minimist(process.argv);
  90. if (args.help) help();
  91. const format = formats[args.format ? args.format : 'json'];
  92. if (format) {
  93. const config = format.generate();
  94. if (args.stdout) {
  95. writeToStdout(config);
  96. } else {
  97. writeToFile(format.filename, config);
  98. }
  99. } else {
  100. console.error('Error: invalid format');
  101. console.error();
  102. help(console.error);
  103. }
  104. }
  105. module.exports = {
  106. defaultConfigFor,
  107. formats,
  108. };
  109. if (require.main === module) {
  110. run();
  111. }