cleverstack-cli
Advanced tools
Comparing version 0.0.7 to 0.0.8
@@ -79,6 +79,2 @@ var https = require( 'https' ) | ||
if (repo.homepage !== undefined) { | ||
title.push( repo.homepage ); | ||
} | ||
if (repo.type === undefined || repo.type === "backend") { | ||
@@ -90,4 +86,4 @@ utils.warn( title.join( ' ' ) ); | ||
if (repo.url !== null) { | ||
console.log( colors.gray( repo.url ) ); | ||
if (repo.url !== null || repo.homepage !== null) { | ||
console.log( colors.gray( repo.url || repo.homepage ) ); | ||
} | ||
@@ -94,0 +90,0 @@ |
var path = require( 'path' ) | ||
, Promise = require( 'bluebird' ) | ||
, async = require( 'async' ) | ||
, npmconf = require( 'npmconf' ) | ||
, semver = require( 'semver' ) | ||
, _ = require( 'lodash' ) | ||
, utils = require( path.join( __dirname, 'utils' ) ) | ||
, RegClient = require('npm-registry-client') | ||
, RegistryClient = require( 'bower-registry-client' ) | ||
, registry = new RegistryClient( ); | ||
, request = require( 'request' ) | ||
, utils = require( path.join( __dirname, 'utils' ) ); | ||
var _keywordRequired = ['cleverstack module', 'cleverstack-module', 'cleverstack seed', 'cleverstack-seed'] | ||
, _keywordType = ['cleverstack-backend', 'cleverstack backend', 'cleverstack-frontend', 'cleverstack frontend', 'frontend', 'backend', 'seed']; | ||
var _keywordRequired = ['cleverstack module', 'cleverstack-module', 'cleverstack seed', 'cleverstack-seed']; | ||
var searchNPM = exports.npm = function ( queries ) { | ||
var def = Promise.defer( ) | ||
function searchNPMRegistry ( queries ) { | ||
var def = Promise.defer( ) | ||
, repos = []; | ||
utils.info( 'Searching through NPM packages...' ); | ||
async.each( queries, function ( q, next ) { | ||
var search = q.split( '@' ); | ||
if (typeof search[1] === "undefined") { | ||
search[1] = '*'; | ||
} | ||
npmconf.load( {}, function ( er, conf ) { | ||
var client = new RegClient( conf ); | ||
request( { | ||
url: 'http://registry.npmjs.org/' + encodeURIComponent( search[ 0 ] ), | ||
json: true | ||
}, | ||
function ( err, response, res ) { | ||
if (!!err || (res.error && res.error === "not_found")) { | ||
return next( ); | ||
} | ||
async.each( queries, function ( q, next ) { | ||
var search = q.split( '@' ); | ||
if (typeof search[1] === "undefined") { | ||
search[1] = '*'; | ||
var versions = Object.keys( res.versions ); | ||
var maxVersion = semver.maxSatisfying( versions, search[1] ); | ||
var pkg = res.versions[maxVersion]; | ||
if (typeof pkg === "undefined") { | ||
return next( ); | ||
} | ||
client.get( search[0], 10000, false, true, function ( err, res ) { | ||
if (!!err) { | ||
if (err.code === 'E404') { | ||
return next( ); | ||
} | ||
return next( err ); | ||
if (_.intersection( pkg.keywords, _keywordRequired ).length > 0) { | ||
if (typeof pkg.repository === "object" && pkg.repository.hasOwnProperty( 'url' )) { | ||
pkg.homepage = pkg.repository.url; | ||
} | ||
var versions = Object.keys( res.versions ); | ||
var maxVersion = semver.maxSatisfying( versions, search[1] ); | ||
repos.push( pkg ); | ||
} | ||
var pkg = res.versions[maxVersion]; | ||
if (typeof pkg === "undefined") { | ||
return next( ); | ||
} | ||
next( ); | ||
} ); | ||
}, function ( err ) { | ||
if (!!err) { | ||
return def.reject( err ); | ||
} | ||
if (_.intersection( pkg.keywords, _keywordRequired ).length > 0) { | ||
if (typeof pkg.repository === "object" && pkg.repository.hasOwnProperty( 'url' )) { | ||
pkg.homepage = pkg.repository.url; | ||
} | ||
def.resolve( repos ); | ||
} ); | ||
repos.push( pkg ); | ||
return def.promise; | ||
} | ||
var list = exports.list = function ( ) { | ||
var def = Promise.defer( ); | ||
request.get( { | ||
url: 'https://registry.npmjs.org/-/_view/byKeyword?startkey=["cleverstack"]&endkey=["cleverstack",{}]&group_level=2', | ||
json: true | ||
}, | ||
function ( err, res, body ) { | ||
var rows = body.rows.map( function ( r ) { | ||
return r.key[1]; | ||
} ); | ||
searchNPMRegistry( rows ).then( function ( response ) { | ||
def.resolve( response ); | ||
} ) | ||
.catch( function ( err ) { | ||
def.reject( err ); | ||
} ); | ||
} ); | ||
return def.promise; | ||
} | ||
var searchNPM = exports.npm = function ( queries ) { | ||
var def = Promise.defer( ); | ||
utils.info( 'Searching through NPM packages...' ); | ||
if (queries.length < 1) { | ||
list( ).then( function ( res ) { | ||
def.resolve( res ) | ||
} ) | ||
.catch( function ( err ) { | ||
def.reject( err ); | ||
} ); | ||
} else { | ||
searchNPMRegistry( queries ).then( function ( res ) { | ||
def.resolve( res ); | ||
} ) | ||
.catch( function ( err ) { | ||
def.reject( err ); | ||
} ); | ||
} | ||
return def.promise; | ||
} | ||
function listBower( ) { | ||
var def = Promise.defer( ) | ||
, repos = [ ]; | ||
utils.info( 'Searching through Bower packages' ); | ||
request( { | ||
url: 'https://bower-component-list.herokuapp.com/keyword/cleverstack', | ||
json: true | ||
}, | ||
function ( err, res, body ) { | ||
async.each( body, function ( module, next ) { | ||
request( { | ||
url: 'https://bower.herokuapp.com/packages/' + encodeURIComponent( module.name ), | ||
json: true | ||
}, | ||
function ( e, response, bower ) { | ||
if (!bower || !bower.url) { | ||
return next( ); | ||
} | ||
module.url = bower.url; | ||
repos.push( module ); | ||
next( ); | ||
} ); | ||
}, function ( err ) { | ||
if (!!err) { | ||
return def.reject( err ); | ||
} | ||
def.resolve( repos ); | ||
} ); | ||
} ); | ||
return def.promise; | ||
@@ -73,8 +144,12 @@ } | ||
registry.search( query, function ( err, res ) { | ||
if (!!err) { | ||
return def.reject( err ); | ||
request( { | ||
url: 'https://bower.herokuapp.com/packages/' + encodeURIComponent( query ), | ||
json: true | ||
}, | ||
function ( e, response, bower ) { | ||
if (!!e) { | ||
return def.reject( e ); | ||
} | ||
def.resolve( res ); | ||
def.resolve( bower ); | ||
} ); | ||
@@ -90,2 +165,3 @@ | ||
all.push( searchNPM( args ) ); | ||
all.push( listBower( ) ); | ||
@@ -98,13 +174,17 @@ args.forEach( function ( arg ) { | ||
var npm = results[0].map( function ( r ) { r.type = 'backend'; return r; } ) | ||
, keys = results[1] | ||
, repos = []; | ||
results.shift( ); | ||
results.shift( ); | ||
// Bower is pretty limiting in terms of keywords, etc. | ||
// Note: We'll need to figure out a way to allow external frontend projects | ||
// to be added to seeds.. I'm fairly certain we can take Sam's idea of just fetching | ||
// from raw.github.com (limited to just github though...) and look into package.json | ||
console.log('res', results); | ||
results[0].forEach( function ( rep ) { | ||
if (!!rep.url && rep.url.match(/^git:\/\/github\.com\/(clevertech|CleverStack)\//) !== null) { | ||
var bower = ( args.length < 1 ? results[0] : results ).filter( function ( res ) { | ||
return typeof res === "object" && res.hasOwnProperty( 'url' ); | ||
} ).forEach( function ( rep ) { | ||
var cleverStackBower = _.find( keys, function ( key ) { | ||
return key.name === rep.name; | ||
} ); | ||
if (cleverStackBower) { | ||
rep = _.merge( cleverStackBower, rep ); | ||
rep.type = 'frontend'; | ||
@@ -117,5 +197,7 @@ repos.push( rep ); | ||
} ) | ||
.error( def.reject ); | ||
.catch( function ( err ) { | ||
def.reject( err ); | ||
} ); | ||
return def.promise; | ||
} |
{ | ||
"name": "cleverstack-cli", | ||
"version": "0.0.7", | ||
"version": "0.0.8", | ||
"description": "Command line interface for CleverTech's CleverStack", | ||
@@ -37,3 +37,2 @@ "main": "./index.js", | ||
"lodash": "~2.4.1", | ||
"bower-registry-client": "~0.1.6", | ||
"tab": "~0.1.0", | ||
@@ -51,3 +50,2 @@ "progress": "~1.1.3", | ||
"request": "~2.33.0", | ||
"npm-registry-client": "~0.3.3", | ||
"hat": "0.0.3", | ||
@@ -54,0 +52,0 @@ "npmconf": "~0.1.12" |
121852
26
1324
- Removedbower-registry-client@~0.1.6
- Removednpm-registry-client@~0.3.3
- Removedansi-regex@5.0.1(transitive)
- Removedaproba@2.0.0(transitive)
- Removedare-we-there-yet@4.0.2(transitive)
- Removedaws-sign@0.3.0(transitive)
- Removedbower-config@0.4.5(transitive)
- Removedbower-registry-client@0.1.6(transitive)
- Removedchownr@0.0.2(transitive)
- Removedcolor-support@1.1.3(transitive)
- Removedconsole-control-strings@1.1.0(transitive)
- Removedcookie-jar@0.3.0(transitive)
- Removedemoji-regex@8.0.0(transitive)
- Removedgauge@5.0.2(transitive)
- Removedgraceful-fs@2.0.3(transitive)
- Removedhas-unicode@2.0.1(transitive)
- Removedis-fullwidth-code-point@3.0.0(transitive)
- Removedlru-cache@2.3.1(transitive)
- Removedminimist@0.0.10(transitive)
- Removedmout@0.6.0(transitive)
- Removednpm-registry-client@0.3.6(transitive)
- Removednpmlog@7.0.1(transitive)
- Removedoptimist@0.6.1(transitive)
- Removedrequest@2.27.0(transitive)
- Removedrequest-replay@0.2.0(transitive)
- Removedretry@0.6.0(transitive)
- Removedset-blocking@2.0.0(transitive)
- Removedsignal-exit@4.1.0(transitive)
- Removedslide@1.1.6(transitive)
- Removedstring-width@4.2.3(transitive)
- Removedstrip-ansi@6.0.1(transitive)
- Removedwide-align@1.1.5(transitive)
- Removedwordwrap@0.0.3(transitive)