1 | #!/usr/bin/env node
|
2 |
|
3 | const { join, dirname } = require('path');
|
4 | const fs = require('fs');
|
5 | const { promisify } = require('util');
|
6 | const copyFile = promisify(fs.copyFile);
|
7 | const mkdir = promisify(fs.mkdir);
|
8 | const rimraf = require('rimraf');
|
9 | const trace = require('./node-file-trace');
|
10 |
|
11 | async function cli(
|
12 | action = process.argv[2],
|
13 | files = process.argv.slice(3),
|
14 | outputDir = 'dist',
|
15 | cwd = process.cwd()
|
16 | ) {
|
17 | const opts = {
|
18 | ts: true,
|
19 | mixedModules: true,
|
20 | log: true
|
21 | };
|
22 |
|
23 | const { fileList, esmFileList, warnings } = await trace(files, opts);
|
24 | const allFiles = fileList.concat(esmFileList);
|
25 | const stdout = [];
|
26 |
|
27 | if (action === 'print') {
|
28 | stdout.push('FILELIST:')
|
29 | stdout.push(...allFiles);
|
30 | stdout.push('\n');
|
31 | if (warnings.length > 0) {
|
32 | stdout.push('WARNINGS:');
|
33 | stdout.push(...warnings);
|
34 | }
|
35 | } else if (action === 'build') {
|
36 | rimraf.sync(join(cwd, outputDir));
|
37 | for (const f of allFiles) {
|
38 | const src = join(cwd, f);
|
39 | const dest = join(cwd, outputDir, f);
|
40 | const dir = dirname(dest);
|
41 | await mkdir(dir, { recursive: true });
|
42 | await copyFile(src, dest);
|
43 | }
|
44 | } else {
|
45 | stdout.push('△ nft - provide an action such as `nft build` or `nft print`.');
|
46 | }
|
47 | return stdout.join('\n');
|
48 | }
|
49 |
|
50 | if (require.main === module) {
|
51 | cli().then(console.log).catch(console.error);
|
52 | }
|
53 |
|
54 | module.exports = cli; |
\ | No newline at end of file |