grafanaui.build.ts 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import execa from 'execa';
  2. import fs from 'fs';
  3. import { changeCwdToGrafanaUi, restoreCwd } from '../utils/cwd';
  4. import chalk from 'chalk';
  5. import { useSpinner } from '../utils/useSpinner';
  6. import { Task, TaskRunner } from './task';
  7. let distDir, cwd;
  8. export const clean = useSpinner<void>('Cleaning', async () => await execa('npm', ['run', 'clean']));
  9. const compile = useSpinner<void>('Compiling sources', () => execa('tsc', ['-p', './tsconfig.build.json']));
  10. const rollup = useSpinner<void>('Bundling', () => execa('npm', ['run', 'build']));
  11. export const savePackage = useSpinner<{
  12. path: string;
  13. pkg: {};
  14. }>('Updating package.json', async ({ path, pkg }) => {
  15. return new Promise((resolve, reject) => {
  16. fs.writeFile(path, JSON.stringify(pkg, null, 2), err => {
  17. if (err) {
  18. reject(err);
  19. return;
  20. }
  21. resolve();
  22. });
  23. });
  24. });
  25. const preparePackage = async pkg => {
  26. pkg.main = 'index.js';
  27. pkg.types = 'index.d.ts';
  28. await savePackage({
  29. path: `${cwd}/dist/package.json`,
  30. pkg,
  31. });
  32. };
  33. const moveFiles = () => {
  34. const files = ['README.md', 'CHANGELOG.md', 'index.js'];
  35. return useSpinner<void>(`Moving ${files.join(', ')} files`, async () => {
  36. const promises = files.map(file => {
  37. return new Promise((resolve, reject) => {
  38. fs.copyFile(`${cwd}/${file}`, `${distDir}/${file}`, err => {
  39. if (err) {
  40. reject(err);
  41. return;
  42. }
  43. resolve();
  44. });
  45. });
  46. });
  47. await Promise.all(promises);
  48. })();
  49. };
  50. const buildTaskRunner: TaskRunner<void> = async () => {
  51. cwd = changeCwdToGrafanaUi();
  52. distDir = `${cwd}/dist`;
  53. const pkg = require(`${cwd}/package.json`);
  54. console.log(chalk.yellow(`Building ${pkg.name} (package.json version: ${pkg.version})`));
  55. await clean();
  56. await compile();
  57. await rollup();
  58. await preparePackage(pkg);
  59. await moveFiles();
  60. restoreCwd();
  61. };
  62. export const buildTask = new Task<void>();
  63. buildTask.setName('@grafana/ui build');
  64. buildTask.setRunner(buildTaskRunner);