generated from kuraydev/react-native-typescript-library-starter
-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathbuild.mjs
More file actions
65 lines (56 loc) · 2.01 KB
/
build.mjs
File metadata and controls
65 lines (56 loc) · 2.01 KB
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
import { exec } from 'child_process';
import chalk from 'chalk';
import ora from 'ora';
import path from 'path';
// Hard clear screen to remove npm lifecycle header lines
try { console.clear(); } catch {}
// Clear npm's two lifecycle lines (script header) from the terminal
try {
if (process.stdout.isTTY) {
process.stdout.write('\x1b[2A'); // up 2
process.stdout.write('\x1b[2K'); // clear line
process.stdout.write('\x1b[1B'); // down 1
process.stdout.write('\x1b[2K'); // clear line
process.stdout.write('\x1b[1B'); // down back to current
process.stdout.write('\r');
}
} catch {}
const spinner = ora(chalk.green('Building library...')).start();
spinner.color = 'green';
function run(cmd, opts = {}) {
return new Promise((resolve, reject) => {
exec(cmd, { ...opts }, (error, stdout, stderr) => {
if (error) {
reject(new Error(stderr || stdout || error.message));
} else {
resolve({ stdout, stderr });
}
});
});
}
(async () => {
try {
// Compile TypeScript using root tsconfig (rootDir: lib)
await run('npx tsc -p ./tsconfig.json', { cwd: path.resolve(process.cwd()) });
spinner.succeed(chalk.greenBright('TypeScript compilation complete.'));
const copySpinner = ora(chalk.cyan('Copying assets...')).start();
try {
await run('node ./scripts/terminal/copy-assets.mjs', { cwd: process.cwd() });
copySpinner.succeed(chalk.cyanBright('Assets copied.'));
} catch (e) {
copySpinner.fail(chalk.bgRed(`Asset copy failed: ${e.message}`));
process.exit(1);
}
const pkgSpinner = ora(chalk.cyan('Copying package.json...')).start();
try {
await run('node ./scripts/terminal/copy-package.mjs', { cwd: process.cwd() });
pkgSpinner.succeed(chalk.cyanBright('package.json copied.'));
} catch (e) {
pkgSpinner.fail(chalk.bgRed(`Package copy failed: ${e.message}`));
process.exit(1);
}
} catch (e) {
spinner.fail(chalk.bgRed(`Build failed: ${e.message}`));
process.exit(1);
}
})();