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

Commit 9f9be34

Browse files
committed
Use bower@1.0.0
1 parent cbf16a1 commit 9f9be34

File tree

3 files changed

+68
-42
lines changed

3 files changed

+68
-42
lines changed

lib/coa.js

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
var PATH = require('path'),
44
Q = require('q'),
5-
C = require('cli-color');
5+
C = require('cli-color'),
6+
StandardRenderer = require('bower/lib/renderers').Standard;
67

78
module.exports = require('coa').Cmd()
89
.name(PATH.basename(process.argv[1]))
@@ -44,20 +45,26 @@ module.exports = require('coa').Cmd()
4445
.end()
4546
.completable()
4647
.act(function(opts) {
47-
var defer = Q.defer();
48+
var defer = Q.defer(),
49+
config = {
50+
verbose: false,
51+
cwd: process.cwd(),
52+
color: true
53+
},
54+
renderer = new StandardRenderer('install', config);
4855

49-
require('./install')(null, opts)
50-
.on('error', defer.reject.bind(defer))
51-
.on('data', function(data) {
52-
process.stdout.write(data);
56+
require('./install')(null, opts, config)
57+
.on('error', function(err) {
58+
renderer.error(err);
59+
defer.reject(err);
5360
})
54-
.on('warn', function(data) {
55-
process.stderr.write(data);
61+
.on('log', function(data) {
62+
renderer.log(data);
5663
})
57-
.on('paths', function(paths) {
58-
console.log(JSON.stringify(paths, null, 4));
59-
})
60-
.on('end', defer.resolve.bind(defer));
64+
.on('end', function(data) {
65+
renderer.end(data);
66+
defer.resolve();
67+
});
6168

6269
return defer.promise;
6370
});

lib/install.js

Lines changed: 46 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -6,60 +6,78 @@ var PATH = require('path'),
66
Q = require('q'),
77
L = require('lodash'),
88
QFS = require('q-io/fs'),
9-
Emitter = require('events').EventEmitter;
9+
Logger = require('bower/node_modules/bower-logger'),
10+
byline = require('byline');
1011

11-
module.exports = function(paths, options) {
12+
module.exports = function(paths, options, config) {
1213
options = L.extend({}, options || {});
1314
options.production = !!options['bower-production'];
1415

15-
var emitter = new Emitter();
16+
var logger = new Logger(),
17+
emitLog = logger.emit.bind(logger, 'log'),
18+
emitError = logger.emit.bind(logger, 'error');
1619

17-
B.commands.install(paths, options)
18-
.on('data', emitter.emit.bind(emitter, 'data'))
19-
.on('warn', emitter.emit.bind(emitter, 'warn'))
20-
.on('error', emitter.emit.bind(emitter, 'error'))
21-
.on('end', function() {
22-
B.commands.list({ paths: true })
23-
.on('error', emitter.emit.bind(emitter, 'error'))
24-
.on('data', function(packages) {
25-
emitter.emit('packages', packages);
20+
B.commands.install(paths, options, config)
21+
.on('log', emitLog)
22+
.on('error', emitError)
23+
.on('end', function(installed) {
24+
B.commands.list({ offline: true }, config)
25+
.on('error', emitError)
26+
.on('log', emitLog)
27+
.on('end', function(list) {
2628

27-
var cwd = process.cwd(),
28-
paths = Object.keys(packages)
29+
var deps = list.dependencies,
30+
paths = Object.keys(deps)
2931
.map(function(key) {
30-
return packages[key];
32+
return {
33+
name: deps[key].pkgMeta.name,
34+
version: deps[key].pkgMeta.version,
35+
path: deps[key].canonicalDir
36+
};
3137
}),
3238
npmBin = process.env.NPM || 'npm',
3339
npmArgs = ['install', options['npm-development'] ? '--development' : '--production'],
3440
promise = Q.resolve();
3541

36-
emitter.emit('paths', paths);
37-
38-
paths.forEach(function(p) {
42+
paths.forEach(function(dep) {
43+
var path = dep.path;
3944
promise = promise
4045
.then(function() {
41-
var path = PATH.join(cwd, p);
4246
return QFS.exists(PATH.join(path, 'package.json'))
4347
.then(function(isPackage) {
4448
if (!isPackage) return;
4549

46-
var cmd = [npmBin].concat(npmArgs).join(' '),
50+
var p = PATH.relative(config.cwd, path),
51+
cmd = [npmBin].concat(npmArgs).join(' '),
4752
npm = CP.spawn(npmBin, npmArgs, {
4853
env: process.env,
4954
cwd: path
5055
}),
51-
defer = Q.defer();
56+
defer = Q.defer(),
57+
58+
npmStdout = new byline.LineStream(),
59+
npmStderr = new byline.LineStream();
60+
61+
npm.stdout.pipe(npmStdout);
62+
npm.stderr.pipe(npmStderr);
5263

53-
emitter.emit('data', 'Running ' + cmd + ' in ' + p + '\n');
64+
logger.info('npm install', cmd + ' in ' + p, dep);
5465

55-
npm.stdout.on('data', emitter.emit.bind(emitter, 'data'));
56-
npm.stderr.on('data', emitter.emit.bind(emitter, 'warn'));
66+
// forward output
67+
npmStdout.on('data', function(data) {
68+
logger.info('npm install', data, dep);
69+
});
70+
71+
// forward warnings
72+
npmStderr.on('data', function(data) {
73+
logger.warn('npm install', data, dep);
74+
});
5775

5876
npm.on('close', function(code) {
5977
if (code) {
6078
return defer.reject(new Error('Error (' + code + '): ' + cmd + ' in ' + p));
6179
} else {
62-
defer.resolve();
80+
defer.resolve(installed);
6381
}
6482
});
6583

@@ -69,11 +87,11 @@ module.exports = function(paths, options) {
6987
});
7088

7189
promise
72-
.then(emitter.emit.bind(emitter, 'end'))
73-
.fail(emitter.emit.bind(emitter, 'error'));
90+
.then(logger.emit.bind(logger, 'end'))
91+
.fail(logger.emit.bind(logger, 'error'));
7492

7593
});
7694
});
7795

78-
return emitter;
96+
return logger;
7997
};

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,11 @@
2222
"q-io": "~1.9.1",
2323
"lodash": "~1.3.1",
2424
"cli-color": "~0.2.2",
25-
"update-notifier": "~0.1.3"
25+
"update-notifier": "~0.1.3",
26+
"byline": "~3.1.1"
2627
},
2728
"peerDependencies": {
28-
"bower": "~0.10.0"
29+
"bower": "~1.0.0"
2930
},
3031
"optionalDependencies": {},
3132
"main": "lib/index.js",

0 commit comments

Comments
 (0)