cli.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #!/usr/bin/env node
  2. "use strict";
  3. var __importDefault = (this && this.__importDefault) || function (mod) {
  4. return (mod && mod.__esModule) ? mod : { "default": mod };
  5. };
  6. Object.defineProperty(exports, "__esModule", { value: true });
  7. const fs_1 = require("fs");
  8. const path_1 = __importDefault(require("path"));
  9. const yargs_1 = __importDefault(require("yargs"));
  10. const helpers_1 = require("yargs/helpers");
  11. const render_template_1 = require("../plugin/render-template");
  12. const template_types_1 = __importDefault(require("../plugin/template-types"));
  13. const warn_1 = require("../plugin/warn");
  14. const version_1 = require("../plugin/version");
  15. const argv = (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
  16. .option("filename", {
  17. describe: "Output file name",
  18. type: "string",
  19. default: "./stats.html",
  20. })
  21. .option("title", {
  22. describe: "Output file title",
  23. type: "string",
  24. default: "Rollup Visualizer",
  25. })
  26. .option("template", {
  27. describe: "Template type",
  28. type: "string",
  29. choices: template_types_1.default,
  30. default: "treemap",
  31. })
  32. .option("sourcemap", {
  33. describe: "Provided files is sourcemaps",
  34. type: "boolean",
  35. default: false,
  36. })
  37. .help()
  38. .parseSync();
  39. const listOfFiles = argv._;
  40. const runForPluginJson = async ({ title, template, filename }, files) => {
  41. if (files.length === 0) {
  42. throw new Error("Empty file list");
  43. }
  44. const fileContents = await Promise.all(files.map(async (file) => {
  45. const textContent = await fs_1.promises.readFile(file, { encoding: "utf-8" });
  46. const data = JSON.parse(textContent);
  47. return { file, data };
  48. }));
  49. const tree = {
  50. name: "root",
  51. children: [],
  52. };
  53. const nodeParts = {};
  54. const nodeMetas = {};
  55. for (const { file, data } of fileContents) {
  56. if (data.version !== version_1.version) {
  57. (0, warn_1.warn)(`Version in ${file} is not supported (${data.version}). Current version ${version_1.version}. Skipping...`);
  58. continue;
  59. }
  60. if (data.tree.name === "root") {
  61. tree.children = tree.children.concat(data.tree.children);
  62. }
  63. else {
  64. tree.children.push(data.tree);
  65. }
  66. Object.assign(nodeParts, data.nodeParts);
  67. Object.assign(nodeMetas, data.nodeMetas);
  68. }
  69. const data = {
  70. version: version_1.version,
  71. tree,
  72. nodeParts,
  73. nodeMetas,
  74. env: fileContents[0].data.env,
  75. options: fileContents[0].data.options,
  76. };
  77. const fileContent = await (0, render_template_1.renderTemplate)(template, {
  78. title,
  79. data,
  80. });
  81. await fs_1.promises.mkdir(path_1.default.dirname(filename), { recursive: true });
  82. try {
  83. await fs_1.promises.unlink(filename);
  84. }
  85. catch (err) {
  86. // ignore
  87. }
  88. await fs_1.promises.writeFile(filename, fileContent);
  89. };
  90. runForPluginJson(argv, listOfFiles).catch((err) => {
  91. (0, warn_1.warn)(err.message);
  92. process.exit(1);
  93. });