grafanaui.build.ts 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import execa from 'execa';
  2. import fs from 'fs';
  3. import { Task } from '..';
  4. import { changeCwdToGrafanaUi, restoreCwd } from '../utils/cwd';
  5. import chalk from 'chalk';
  6. import { startSpinner } from '../utils/startSpinner';
  7. let distDir, cwd;
  8. const clean = async () => {
  9. const spinner = startSpinner('Cleaning');
  10. try {
  11. await execa('npm', ['run', 'clean']);
  12. spinner.succeed();
  13. } catch (e) {
  14. spinner.fail();
  15. throw e;
  16. }
  17. };
  18. const compile = async () => {
  19. const spinner = startSpinner('Compiling sources');
  20. try {
  21. await execa('tsc', ['-p', './tsconfig.build.json']);
  22. spinner.succeed();
  23. } catch (e) {
  24. console.log(e);
  25. spinner.fail();
  26. }
  27. };
  28. const rollup = async () => {
  29. const spinner = startSpinner('Bundling');
  30. try {
  31. await execa('npm', ['run', 'build']);
  32. spinner.succeed();
  33. } catch (e) {
  34. spinner.fail();
  35. }
  36. };
  37. export const savePackage = async (path, pkg) => {
  38. const spinner = startSpinner('Updating package.json');
  39. return new Promise((resolve, reject) => {
  40. fs.writeFile(path, JSON.stringify(pkg, null, 2), err => {
  41. if (err) {
  42. spinner.fail();
  43. console.error(err);
  44. reject(err);
  45. return;
  46. }
  47. spinner.succeed();
  48. resolve();
  49. });
  50. });
  51. };
  52. const preparePackage = async pkg => {
  53. pkg.main = 'index.js';
  54. pkg.types = 'index.d.ts';
  55. await savePackage(`${cwd}/dist/package.json`, pkg);
  56. };
  57. const moveFiles = async () => {
  58. const files = ['README.md', 'CHANGELOG.md', 'index.js'];
  59. const spinner = startSpinner(`Moving ${files.join(', ')} files`);
  60. const promises = files.map(file => {
  61. return fs.copyFile(`${cwd}/${file}`, `${distDir}/${file}`, err => {
  62. if (err) {
  63. console.error(err);
  64. return;
  65. }
  66. });
  67. });
  68. try {
  69. await Promise.all(promises);
  70. spinner.succeed();
  71. } catch (e) {
  72. spinner.fail();
  73. }
  74. };
  75. const buildTask: Task<void> = async () => {
  76. cwd = changeCwdToGrafanaUi();
  77. distDir = `${cwd}/dist`;
  78. const pkg = require(`${cwd}/package.json`);
  79. console.log(chalk.yellow(`Building ${pkg.name} @ ${pkg.version}`));
  80. await clean();
  81. await compile();
  82. await rollup();
  83. await preparePackage(pkg);
  84. await moveFiles();
  85. restoreCwd();
  86. };
  87. export default buildTask;