aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/build.js
blob: 88267e5f6f61b5e8d0246954945e284301064b19 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import { join } from 'path';

import { build as esbuildBuild } from 'esbuild';
import { build as viteBuild } from 'vite';

import fileURLToDirname from '../config/fileURLToDirname.js';

const thisDir = fileURLToDirname(import.meta.url);

/**
 * @param {string} packageName
 * @returns {Promise<import('esbuild').BuildResult>}
 */
async function buildPackageEsbuild(packageName) {
  /** @type {{ default: import('esbuild').BuildOptions }} */
  // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- Read untyped config file.
  const { default: config } = await import(
    `../packages/${packageName}/esbuild.config.js`
  );
  return esbuildBuild(config);
}

/**
 * @param {string} packageName
 * @returns {Promise<unknown>}
 */
function buildPackageVite(packageName) {
  return viteBuild({
    configFile: join(thisDir, `../packages/${packageName}/vite.config.js`),
  });
}

function buildAll() {
  const buildServiceShared = buildPackageEsbuild('service-shared');
  const buildShared = buildPackageEsbuild('shared');
  return Promise.all([
    Promise.all([buildServiceShared, buildShared]).then(() =>
      buildPackageEsbuild('main'),
    ),
    buildServiceShared.then(() =>
      Promise.all([
        buildPackageEsbuild('service-inject'),
        buildPackageEsbuild('service-preload'),
      ]),
    ),
    buildShared.then(() =>
      Promise.all([
        buildPackageEsbuild('preload'),
        buildPackageVite('renderer'),
      ]),
    ),
  ]);
}

buildAll().catch((err) => {
  console.error(err);
  process.exit(1);
});