-
Notifications
You must be signed in to change notification settings - Fork 867
/
targeted_build.ts
72 lines (64 loc) · 1.8 KB
/
targeted_build.ts
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/
import { rm } from 'fs/promises';
import { resolve } from 'path';
import { spawn } from './child_process';
import { Project } from './project';
import { log } from './log';
const BuildTargetPresets = {
web: '@osd/babel-preset/webpack_preset',
node: '@osd/babel-preset/node_preset',
};
export type BuildTargetTypes = keyof typeof BuildTargetPresets;
export const BuildTargets = Object.keys(BuildTargetPresets) as BuildTargetTypes[];
/**
* Run script in the given directory
*/
export async function buildTargetedPackage({
pkg,
sourceMaps,
}: {
pkg: Project;
sourceMaps?: boolean;
}) {
log.debug(`[${pkg.name}] deleting old output`);
await rm(pkg.targetLocation, { force: true, recursive: true });
log.debug(`[${pkg.name}] generating type definitions`);
await spawn('tsc', [...(sourceMaps ? ['--declarationMap', 'true'] : [])], {
cwd: pkg.path,
});
// Generate [A], [A and B], or [A, B, and C] labels
const targetsDisplayLabel = pkg.buildTargets
.join(', ')
.replace(/, ([^,]+)$/, pkg.buildTargets.length > 2 ? ', and $1' : ' and $1');
log.debug(`[${pkg.name}] transpiling for ${targetsDisplayLabel}`);
await Promise.all([
...pkg.buildTargets.map((target) =>
spawn(
'babel',
[
'src',
'--no-babelrc',
'--presets',
BuildTargetPresets[target],
'--out-dir',
resolve(pkg.targetLocation, target),
'--extensions',
'.ts,.js,.tsx',
'--ignore',
'**/*.test.ts,**/*.test.tsx',
'--quiet',
...(sourceMaps ? ['--source-maps', 'inline'] : []),
],
{
env: {
BABEL_ENV: target,
},
cwd: pkg.path,
}
)
),
]);
}