-
Notifications
You must be signed in to change notification settings - Fork 0
/
node.ts
80 lines (69 loc) · 2.15 KB
/
node.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
73
74
75
76
77
78
79
80
import * as fs from 'fs';
import {basename, dirname, join} from 'path';
import * as pify from 'pify';
const $fs = pify(fs);
import {spawn, ChildProcess} from 'child_process';
import {Question, Answers} from 'inquirer';
import {ParsedArgs} from 'minimist';
import {ProjectHandler, IProject, Project} from '../models/project';
const IGNORED_SCRIPTS = [
'prepublish', 'publish', 'postpublish',
'preinstalls', 'install', 'postinstall',
'preuninstalls', 'uninstall', 'postuninstall',
'preversion', 'version', 'postversion',
'pretest', 'posttest', // Allow `test`
'prestop', 'stop', 'poststop',
'prestart', 'poststart', // Allow `start`
'prerestart', 'restart', 'postrestart'
];
export const nodeHandler: ProjectHandler = {
name: 'node',
desc: 'Apps powered by NodeJS and NPM.',
files: ['package.json'],
extract: (path: string, content: string) => {
try {
let cwd = dirname(path);
let packageJson = JSON.parse(content);
packageJson.title = packageJson.title || basename(cwd);
packageJson.main = packageJson.main || 'index.js';
let projects: Project[] = [];
if(fs.existsSync(join(cwd, packageJson.main)))
{
projects.push(new NodeProject(cwd, packageJson));
}
if (packageJson.scripts) {
Object.keys(packageJson.scripts)
.forEach((script: string) => {
if (IGNORED_SCRIPTS.indexOf(script.toLowerCase()) > -1) {
return;
}
projects.push(new NpmProject(cwd, packageJson, script));
});
}
return projects;
} catch (ex) {
//console.error(ex);
return [];
}
}
};
class NodeProject extends Project {
constructor(path: string, packageJson: any, args: string[] = []) {
super({
name: `${packageJson.name} (node ${packageJson.main})`,
cwd: path,
command: 'node',
args: [packageJson.main, ...args]
});
}
}
class NpmProject extends Project {
constructor(cwd: string, packageJson: any, command: string, args: string[] = []) {
super({
name: `${packageJson.name} (npm ${command})`,
cwd,
command: 'npm',
args: ['run', command, ...args]
});
}
}