Skip to content

Commit a56560b

Browse files
author
Cam Tullos
committed
WIP: project init -> app
1 parent 943cb32 commit a56560b

File tree

9 files changed

+673
-233
lines changed

9 files changed

+673
-233
lines changed

arcli.js

+27-10
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,34 @@
33
'use strict';
44

55
// Imports
6-
const bootstrap = require('./bootstrap');
76
const chalk = require('chalk');
87
const fs = require('fs-extra');
9-
const program = require('commander');
10-
const prompt = require('prompt');
11-
const op = require('object-path');
128
const axios = require('axios');
9+
const _ = require('underscore');
1310
const moment = require('moment');
1411
const semver = require('semver');
15-
const _ = require('underscore');
12+
const prompt = require('prompt');
13+
const op = require('object-path');
14+
const program = require('commander');
15+
const inquirer = require('inquirer');
16+
const bootstrap = require('./bootstrap');
17+
18+
// Extend inquirer
19+
inquirer.registerPrompt('fuzzypath', require('inquirer-fuzzy-path'));
20+
inquirer.registerPrompt(
21+
'autocomplete',
22+
require('inquirer-autocomplete-prompt'),
23+
);
1624

17-
const { config, ver } = bootstrap.props;
25+
// Extend arcli props
26+
global.arcli.props.inquirer = inquirer;
27+
global.arcli.props.prompt = prompt;
28+
global.arcli.prefix = chalk.cyan(
29+
String(arcli.props.config.prompt.prefix).trim(),
30+
);
1831

19-
// Build the props object
20-
const props = { ...bootstrap.props, prompt };
32+
const { props } = bootstrap;
33+
const { config, ver } = props;
2134

2235
const cmds = () => {
2336
const commands = {};
@@ -31,7 +44,9 @@ const cmds = () => {
3144
} else {
3245
if (op.has(req, 'ID')) {
3346
let { ID } = req;
34-
ID = String(ID).replace(/\<|\>/g, '').replace(/\s/g, '.');
47+
ID = String(ID)
48+
.replace(/\<|\>/g, '')
49+
.replace(/\s/g, '.');
3550
op.set(subcommands, ID, req);
3651
}
3752
}
@@ -48,7 +63,9 @@ const initialize = () => {
4863
props.subcommands = subcommands;
4964

5065
// Apply commands
51-
Object.values(commands).forEach(req => req.COMMAND({ program, props, arcli: bootstrap }));
66+
Object.values(commands).forEach(req =>
67+
req.COMMAND({ program, props, arcli: bootstrap }),
68+
);
5269

5370
// Configure prompt
5471
prompt.message = chalk[config.prompt.prefixColor](config.prompt.prefix);

bootstrap.js

+8-8
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,17 @@
33
// Globals
44
const Actinium = require('parse/node');
55
global.Actinium = Actinium;
6+
global.Hook = require('@atomic-reactor/reactium-sdk-core/lib/hook').default;
7+
global.Spinner = require('ora')({ spinner: 'dots', color: 'cyan' });
8+
9+
// Extend
10+
Spinner.message = (...args) => Spinner.start(args.join(' '));
611

712
// Imports
813
const root = __dirname;
914
const config = require('./config');
1015
const ver = require('./package').version;
1116
const chalk = require('chalk');
12-
const ora = require('ora');
1317
const path = require('path');
1418
const fs = require('fs-extra');
1519
const globby = require('globby').sync;
@@ -19,10 +23,6 @@ const semver = require('semver');
1923
const homedir = require('os').homedir();
2024
const prettier = require('prettier');
2125
const generator = require('./lib/generator');
22-
const Hook = require('@atomic-reactor/reactium-sdk-core/lib/hook').default;
23-
24-
const spinner = ora({ spinner: 'dots', color: 'cyan' });
25-
spinner.message = (...args) => spinner.start(args.join(' '));
2626

2727
const initialize = props => {
2828

@@ -82,9 +82,8 @@ const commands = () => {
8282
// Build the props object
8383
const props = initialize({ config, cwd, homedir, root, ver });
8484

85-
module.exports = {
85+
global.arcli = {
8686
Actinium,
87-
Hook,
8887
chalk,
8988
commands,
9089
fs,
@@ -95,7 +94,8 @@ module.exports = {
9594
moment,
9695
prettier,
9796
semver,
98-
spinner,
9997
props,
10098
tmp: path.normalize(path.join(homedir, 'tmp'))
10199
};
100+
101+
module.exports = global.arcli;

commands/project/enums.js

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
2+
const appTypes = [
3+
{ key: 'web', value: 'Web App/Site' },
4+
{ key: 'electron', value: 'Electron' },
5+
];
6+
7+
const projectTypes = [
8+
{ key: 'api', value: 'API (Actinium)' },
9+
{ key: 'app', value: 'APP (Reactium)' },
10+
{ key: 'admin-plugin', value: 'Admin Plugin' },
11+
{ key: 'full-stack', value: 'Full Stack (API/APP/Admin)' },
12+
{ key: 'common-js', value: 'Common-JS Library' },
13+
{ key: 'react-component-lib', value: 'React Component Library' },
14+
{ key: 'reactium-build-time-lib', value: 'Reactium Build-time Library' },
15+
{ key: 'reactium-registry-bundle', value: 'Reactium Registry Bundle' },
16+
];
17+
18+
module.exports = {
19+
appTypes,
20+
projectTypes,
21+
};

commands/project/init/actions/app.js

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
const path = require('path');
2+
const fs = require('fs-extra');
3+
const chalk = require('chalk');
4+
const _ = require('underscore');
5+
const op = require('object-path');
6+
7+
const { arcli, Hook, Spinner } = global;
8+
9+
module.exports = () => {
10+
let params;
11+
12+
const props = op.get(arcli, 'props');
13+
const cwd = op.get(arcli, 'props.cwd');
14+
15+
const normalize = (...args) => path.normalize(path.join(...args));
16+
17+
return {
18+
init: args => {
19+
params = op.get(args, 'params');
20+
},
21+
directory: () => {
22+
Spinner.message('Creating', chalk.cyan('app'), 'directory...');
23+
24+
const dir = normalize(cwd, 'APP');
25+
26+
fs.ensureDirSync(dir);
27+
fs.emptyDirSync(dir);
28+
},
29+
electron: () => {
30+
if (!op.get(params, 'app') === 'electron') return;
31+
},
32+
};
33+
};
+10-8
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
11
const path = require('path');
2-
const chalk = require('chalk');
32
const fs = require('fs-extra');
3+
const chalk = require('chalk');
44
const _ = require('underscore');
55
const op = require('object-path');
66

7-
module.exports = () => {
8-
let Hook, spinner;
7+
module.exports = (arcli) => {
8+
let cwd, params, props;
99

1010
return {
11-
init: ({ arcli, params, props }) => {
12-
Hook = op.get(arcli, 'Hook');
13-
spinner = op.get(arcli, 'spinner');
11+
init: args => {
12+
arcli = arcli || op.get(args, 'arcli');
13+
cwd = op.get(args, 'props.cwd');
14+
params = op.get(args, 'params');
15+
props = op.get(args, 'props');
1416
},
15-
create: ({ params, props }) => {
16-
spinner.message('Creating', chalk.cyan('something'), '...');
17+
create: () => {
18+
Spinner.message('Creating', chalk.cyan('something'), '...');
1719
},
1820
};
1921
};

commands/project/init/generator.js

+19-17
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,51 @@
11
const op = require('object-path');
22
const ActionSequence = require('action-sequence');
33

4-
module.exports = ({ arcli, params, props }) => {
4+
const { arcli, Hook, Spinner } = global;
5+
6+
module.exports = params => {
57
console.log('');
68

7-
const { Hook, spinner } = arcli;
9+
let actions;
10+
11+
switch (op.get(params, 'type')) {
12+
case 'app':
13+
actions = require('./actions/app');
14+
break;
815

9-
const actions = require('./actions')(spinner);
16+
default:
17+
actions = require('./actions');
18+
}
1019

1120
const onError = error => {
12-
let message = op.get(error, 'message', error);
13-
Hook.runSync('project-init-error', {
14-
arcli,
15-
message,
16-
params,
17-
props,
18-
});
19-
spinner.fail(message);
21+
let message = op.get(error, 'message', op.get(error, 'msg', error));
22+
Hook.runSync('project-init-error', { message, params });
23+
Spinner.fail(message);
2024
return new Error(message);
2125
};
2226

2327
// Run actions hook
2428
try {
25-
Hook.runSync('project-init-actions', { actions, arcli, params, props });
29+
Hook.runSync('project-init-actions', { actions, params });
2630
} catch (error) {
2731
onError(error);
2832
}
2933

3034
return ActionSequence({
31-
actions,
32-
options: { arcli, params, props },
35+
actions: actions(),
36+
options: { params },
3337
})
3438
.then(success => {
3539
let message = 'project init complete!';
3640

3741
// Run complete hook
3842
try {
3943
Hook.runSync('project-init-complete', {
40-
arcli,
4144
params,
42-
props,
4345
message,
4446
success,
4547
});
46-
spinner.succeed(message);
48+
Spinner.succeed(message);
4749
} catch (error) {
4850
return onError(error);
4951
}

0 commit comments

Comments
 (0)