Skip to content
This repository was archived by the owner on Mar 5, 2022. It is now read-only.

Commit bac006d

Browse files
committed
refactor: refactor the app with typescript
1 parent 5578c9e commit bac006d

39 files changed

+1233
-951
lines changed

.gitignore

+3-1
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,6 @@ jspm_packages
5555
.vscode
5656

5757
# for test, create a fake home dir
58-
.home
58+
.home
59+
60+
build

.npmignore

+4-1
Original file line numberDiff line numberDiff line change
@@ -69,4 +69,7 @@ docs
6969
.gitattributes
7070
.gitignore
7171
.pullapprove.yml
72-
.travis.yml
72+
.travis.yml
73+
app
74+
*.map
75+
*.test.js

app/check-update.ts

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/**
2+
* Created by axetroy on 17-2-15.
3+
*/
4+
const path = require('path');
5+
const axios = require('axios');
6+
const semver = require('semver');
7+
const log4js = require('log4js');
8+
9+
const logger = log4js.getLogger('CHECK');
10+
const pkg = require(path.join(__dirname, '../package.json'));
11+
12+
const npmRegistry = `http://registry.npm.taobao.org`;
13+
14+
export default async function checkNewVersion() {
15+
// check the update
16+
try {
17+
const res: any = await axios.get(`${npmRegistry}/${pkg.name}/latest`, {
18+
timeout: 200
19+
});
20+
const remotePkg = res.data;
21+
if (semver.gt(remotePkg.version, pkg.version)) {
22+
logger.warn(
23+
`Your current version of ${pkg.name} is out of date. The latest version is ${remotePkg
24+
.version.red} while you're on ${pkg.version.green}.`
25+
);
26+
logger.warn(
27+
`Checkout change log here ${'https://github.com/gpmer/gpm.js/blob/master/CHANGELOG.md'
28+
.green}`
29+
);
30+
}
31+
} catch (err) {}
32+
}

lib/command/add.js renamed to app/command/add.ts

+39-29
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,8 @@
22
* Created by axetroy on 17-2-14.
33
*/
44
const path = require('path');
5-
const process = require('process');
65

7-
const co = require('co');
86
const gitUrlParse = require('git-url-parse');
9-
const Promise = require('bluebird');
107
const prettyjson = require('prettyjson');
118
const fs = require('fs-extra');
129
const _ = require('lodash');
@@ -22,16 +19,29 @@ const __ = require('i18n').__;
2219

2320
const cwd = process.cwd();
2421

25-
const { isExistPath, isLink, normalizePath, runShell } = require('../utils');
26-
const config = require('../config');
27-
const plugin = require('../plugin');
28-
const registry = require('../registry');
29-
const globalConfig = require('../global-config');
30-
const Gpmrc = require('../gpmrc');
22+
import { isExistPath, isLink, normalizePath, runShell } from '../utils';
23+
import config from '../config';
24+
import plugin from '../plugin';
25+
import registry from '../registry';
26+
import globalConfig from '../global-config';
27+
import Gpmrc from '../gpmrc';
3128

3229
const ACTION = Symbol('after add repository');
3330

34-
function* add(repo, options) {
31+
interface Argv$ {
32+
repo: string;
33+
}
34+
35+
interface Options$ {
36+
nolog?: boolean;
37+
unixify?: boolean;
38+
force?: boolean;
39+
name?: string;
40+
plugin?: string;
41+
ignoreRc: boolean;
42+
}
43+
44+
async function add(repo: string, options: Options$) {
3545
const gitInfo = gitUrlParse(repo);
3646

3747
if (!gitInfo || !gitInfo.owner || !gitInfo.name) {
@@ -52,11 +62,11 @@ function* add(repo, options) {
5262
);
5363

5464
let confirmCover = false;
55-
if (yield isExistPath(repoDir)) {
65+
if (await isExistPath(repoDir)) {
5666
if (options.force) {
5767
confirmCover = true;
5868
} else {
59-
confirmCover = (yield prompt({
69+
confirmCover = (await prompt({
6070
type: 'confirm',
6171
name: 'result',
6272
message: __('commands.add.log.confirm_cover', {
@@ -71,10 +81,10 @@ function* add(repo, options) {
7181
}
7282
}
7383

74-
yield fs.ensureDir(baseDir);
75-
yield fs.ensureDir(sourceDir);
76-
yield fs.ensureDir(ownerDir);
77-
yield fs.ensureDir(randomTemp);
84+
await fs.ensureDir(baseDir);
85+
await fs.ensureDir(sourceDir);
86+
await fs.ensureDir(ownerDir);
87+
await fs.ensureDir(randomTemp);
7888

7989
try {
8090
const git = which.sync('git');
@@ -89,16 +99,16 @@ function* add(repo, options) {
8999
throw err;
90100
}
91101

92-
yield runShell(`git clone ${gitInfo.href}`, {
102+
await runShell(`git clone ${gitInfo.href}`, {
93103
cwd: randomTemp,
94104
stdio: 'inherit'
95105
});
96106

97107
// if it's a link, then unlink first
98-
if (yield isLink(repoDir)) yield fs.unlink(repoDir);
99-
yield fs.remove(repoDir);
100-
yield fs.move(tempDir, repoDir);
101-
yield fs.remove(randomTemp);
108+
if (await isLink(repoDir)) await fs.unlink(repoDir);
109+
await fs.remove(repoDir);
110+
await fs.move(tempDir, repoDir);
111+
await fs.remove(randomTemp);
102112

103113
/**
104114
* parse the .gpmrc
@@ -109,18 +119,18 @@ function* add(repo, options) {
109119
*/
110120
if (!options.ignoreRc) {
111121
const gpmrc = new Gpmrc();
112-
yield gpmrc.load(repoDir);
122+
await gpmrc.load(repoDir);
113123
if (gpmrc.exist) {
114124
const alias = gpmrc.rc.name;
115125
if (alias && alias !== gitInfo.name) {
116126
let newRepoDir = path.join(
117127
ownerDir,
118128
_.isString(options.name) ? options.name : alias
119129
);
120-
yield fs.move(repoDir, newRepoDir);
130+
await fs.move(repoDir, newRepoDir);
121131
repoDir = newRepoDir;
122132
}
123-
yield gpmrc.runHook('add', { cwd: repoDir }).catch(err => {
133+
await gpmrc.runHook('add', { cwd: repoDir }).catch(err => {
124134
console.error(err);
125135
return Promise.resolve();
126136
});
@@ -129,7 +139,7 @@ function* add(repo, options) {
129139

130140
const entity = _.extend({}, gitInfo, { path: repoDir });
131141
delete entity.toString;
132-
yield registry.add(entity);
142+
await registry.add(entity);
133143

134144
if (!options.nolog) {
135145
let finallyPath = normalizePath(repoDir, options);
@@ -159,7 +169,7 @@ function* add(repo, options) {
159169
name: ('gpm-plugin-' + plugin.name).green
160170
})
161171
);
162-
yield new Promise(function(resolve, reject) {
172+
await new Promise(function(resolve, reject) {
163173
if (!_.isFunction(plugin.add)) {
164174
reject(
165175
new Error(
@@ -185,7 +195,7 @@ function* add(repo, options) {
185195
process.chdir(cwd);
186196
}
187197

188-
module.exports = function(argv, options) {
198+
export default async function(argv: Argv$, options: Options$) {
189199
plugin.load(ACTION, options.plugin);
190-
return co.wrap(add)(argv.repo, options);
191-
};
200+
return await add(argv.repo, options);
201+
}

app/command/clean.ts

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/**
2+
* Created by axetroy on 17-2-14.
3+
*/
4+
const fs = require('fs-extra');
5+
const log4js = require('log4js');
6+
const logger = log4js.getLogger('CLEAN');
7+
8+
import config from '../config';
9+
10+
import relinkHandler from './relink';
11+
12+
interface Argv$ {}
13+
14+
interface Options$ {
15+
nolog?: boolean;
16+
unixify?: boolean;
17+
force?: boolean;
18+
}
19+
20+
async function clean(argv: Argv$, options: Options$) {
21+
try {
22+
await fs.emptyDir(config.paths.temp);
23+
} catch (err) {
24+
throw new Error(
25+
`${err + ''}\n May be you don't have permission to access ${config.paths
26+
.temp}, try to delete in manual`
27+
);
28+
}
29+
// auto generate file again
30+
await relinkHandler(argv, { nolog: options.nolog });
31+
!options.nolog &&
32+
logger.info(`clean ${config.paths.temp.green.underline} success`);
33+
}
34+
35+
export default async function(argv: Argv$, options: Options$) {
36+
return await clean(argv, options);
37+
}

lib/command/config.js renamed to app/command/config.ts

+33-19
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,29 @@
33
*/
44

55
const path = require('path');
6-
const process = require('process');
76

8-
const co = require('co');
97
const prettyjson = require('prettyjson');
108
const fs = require('fs-extra');
119
const log4js = require('log4js');
1210
const logger = log4js.getLogger('CONFIG');
1311
const __ = require('i18n').__;
1412

15-
const config = require('../config');
16-
const globalConfig = require('../global-config');
13+
import config from '../config';
14+
import globalConfig from '../global-config';
1715

18-
function* configHandler(argv, options) {
16+
export interface Argv$ {
17+
key?: string;
18+
value?: string;
19+
action: string;
20+
}
21+
22+
interface Options$ {
23+
nolog?: boolean;
24+
unixify?: boolean;
25+
force?: boolean;
26+
}
27+
28+
async function configHandler(argv: Argv$, options: Options$) {
1929
const { action, key, value } = argv;
2030
let output = void 0;
2131

@@ -27,32 +37,36 @@ function* configHandler(argv, options) {
2737
break;
2838
case 'GET':
2939
if (!key)
30-
return !options.nolog &&
31-
logger.error(__('commands.config.log.require_key'));
40+
return (
41+
!options.nolog && logger.error(__('commands.config.log.require_key'))
42+
);
3243
output = globalConfig.get(key);
3344
!options.nolog && logger.info(`${key}: ${output}`);
3445
break;
3546
case 'SET':
3647
if (!key)
37-
return !options.nolog &&
38-
logger.error(__('commands.config.log.require_key'));
48+
return (
49+
!options.nolog && logger.error(__('commands.config.log.require_key'))
50+
);
3951
if (!value)
40-
return !options.nolog &&
41-
logger.error(__('commands.config.log.require_val'));
42-
output = yield globalConfig.set(key, value);
52+
return (
53+
!options.nolog && logger.error(__('commands.config.log.require_val'))
54+
);
55+
output = await globalConfig.set(key, value);
4356
!options.nolog &&
4457
process.stdout.write(prettyjson.render(globalConfig.entity) + '\n');
4558
break;
4659
case 'REMOVE':
4760
if (!key)
48-
return !options.nolog &&
49-
logger.error(__('commands.config.log.require_key'));
50-
output = yield globalConfig.remove(key);
61+
return (
62+
!options.nolog && logger.error(__('commands.config.log.require_key'))
63+
);
64+
output = await globalConfig.remove(key);
5165
!options.nolog &&
5266
process.stdout.write(prettyjson.render(globalConfig.entity) + '\n');
5367
break;
5468
case 'RESET':
55-
output = yield globalConfig.reset();
69+
output = await globalConfig.reset();
5670
!options.nolog && logger.info(__('commands.config.log.info_reset'));
5771
!options.nolog &&
5872
process.stdout.write(prettyjson.render(globalConfig.entity) + '\n');
@@ -72,6 +86,6 @@ function* configHandler(argv, options) {
7286
return output;
7387
}
7488

75-
module.exports = function(argv = {}, options = {}) {
76-
return co.wrap(configHandler)(argv, options);
77-
};
89+
export default async function(argv: Argv$, options: Options$) {
90+
return configHandler(argv, options);
91+
}

lib/command/find.js renamed to app/command/find.ts

+16-15
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
/**
22
* Created by axetroy on 17-2-14.
33
*/
4-
const process = require('process');
54
const path = require('path');
6-
const Promise = require('bluebird');
75
const prettyjson = require('prettyjson');
86
const inquirer = require('inquirer');
97
const _ = require('lodash');
@@ -13,19 +11,28 @@ const log4js = require('log4js');
1311
const __ = require('i18n').__;
1412

1513
const logger = log4js.getLogger('FIND');
16-
const config = require('../config');
17-
const { normalizePath } = require('../utils');
18-
const registry = require('../registry');
14+
import config from '../config';
15+
import registry from '../registry';
16+
import { normalizePath } from '../utils';
1917

20-
function decoratorIndex(repo) {
21-
repo.__index__ = `${repo.source.red}:${('@' + repo.owner).yellow}/${repo.name.green}(${path.relative(config.paths.home, repo.path)})`;
18+
interface Argv$ {}
19+
20+
interface Options$ {
21+
nolog?: boolean;
22+
unixify?: boolean;
23+
force?: boolean;
24+
}
25+
26+
export function decoratorIndex(repo) {
27+
repo.__index__ = `${repo.source.red}:${('@' + repo.owner).yellow}/${repo.name
28+
.green}(${path.relative(config.paths.home, repo.path)})`;
2229
return repo;
2330
}
2431

25-
function* search(argv, options) {
32+
export default async function search(argv: Argv$, options: Options$) {
2633
let repositories = registry.repositories.map(decoratorIndex);
2734

28-
const answer = yield inquirer.prompt([
35+
const answer = await inquirer.prompt([
2936
{
3037
name: 'repository',
3138
message: __('commands.find.log.info_type_to_search') + ':',
@@ -57,9 +64,3 @@ function* search(argv, options) {
5764
logger.warn(__('global.tips.copy_fail'));
5865
}
5966
}
60-
61-
module.exports = function(argv, options) {
62-
return search(argv, options);
63-
};
64-
65-
module.exports.decoratorIndex = decoratorIndex;

0 commit comments

Comments
 (0)