Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
82395fdc33 | ||
|
|
ced4887269 | ||
|
|
8f96a5a57b | ||
|
|
f6e79ff5e7 | ||
|
|
e932f16424 | ||
|
|
622c93c3fe | ||
|
|
ccf3e8a83c | ||
|
|
2069b4334c | ||
|
|
ef84cedd79 | ||
|
|
ba07f87ee0 | ||
|
|
10cbe70378 | ||
|
|
244ce60857 | ||
|
|
97a4f6cd92 | ||
|
|
10197ef2aa | ||
|
|
d2e7350b27 |
@@ -1,7 +1,6 @@
|
||||
sudo: false
|
||||
language: node_js
|
||||
node_js:
|
||||
- '1'
|
||||
- '2'
|
||||
- '4'
|
||||
addons:
|
||||
|
||||
2
AUTHORS
2
AUTHORS
@@ -5,3 +5,5 @@ dead-horse <dead_horse@qq.com> (https://github.com/dead-horse)
|
||||
alsotang <alsotang@gmail.com> (https://github.com/alsotang)
|
||||
4simple <wondger@qq.com> (https://github.com/4simple)
|
||||
afc163 <afc163@gmail.com> (https://github.com/afc163)
|
||||
Yuwei Ba <i@xiaoba.me> (https://github.com/ibigbug)
|
||||
|
||||
|
||||
44
History.md
44
History.md
@@ -1,4 +1,48 @@
|
||||
|
||||
2.4.0 / 2015-10-21
|
||||
==================
|
||||
|
||||
* feat(registry): add package's dependents api
|
||||
* fix: show package's dependents
|
||||
* chore(package): update utility to version 1.5.0
|
||||
* chore(package): update bluebird to version 2.10.2
|
||||
|
||||
2.3.1 / 2015-10-15
|
||||
==================
|
||||
|
||||
* refactor: remove gnode
|
||||
* deps: upgrade giturl
|
||||
* Some fixes
|
||||
|
||||
2.3.0 / 2015-10-15
|
||||
==================
|
||||
|
||||
* Add dev dependencies.
|
||||
* Package page fix.
|
||||
* refactor: add more sync log
|
||||
* Add mock data.
|
||||
* refactor: add more sync log
|
||||
* Fix sidebar overflow.
|
||||
* Merge pull request #680 from ibigbug/ant-design
|
||||
* Clean code.
|
||||
* Indent.
|
||||
* chore(package): update debug to version 2.2.0
|
||||
* chore(package): update should to version 7.1.0
|
||||
* chore(package): update koa to version 1.1.0
|
||||
* Remove default adBanner.
|
||||
* Package pages.
|
||||
* Common styles.
|
||||
* search page.
|
||||
* Sync page.
|
||||
* Profile page antd style.
|
||||
* Unpublished pkg page style.
|
||||
* Add page title for unpubed pkg.
|
||||
* Index page style use antd.
|
||||
* chore(package): update pg to version 4.4.2
|
||||
* chore(package): update cfork to version 1.3.1
|
||||
* chore(package): update moment to version 2.10.6
|
||||
* feat(badge): Use qiniu cdn
|
||||
|
||||
2.2.1 / 2015-09-30
|
||||
==================
|
||||
|
||||
|
||||
3
Makefile
3
Makefile
@@ -22,7 +22,7 @@ jshint: install
|
||||
@-node_modules/.bin/jshint ./
|
||||
|
||||
init-database:
|
||||
@$(BIN) --harmony test/init_db.js
|
||||
@$(BIN) test/init_db.js
|
||||
|
||||
init-mysql:
|
||||
@mysql -uroot -e 'DROP DATABASE IF EXISTS cnpmjs_test;'
|
||||
@@ -34,7 +34,6 @@ init-pg:
|
||||
|
||||
test: install init-database
|
||||
@NODE_ENV=test DB=${DB} node_modules/.bin/mocha \
|
||||
--harmony \
|
||||
--reporter $(REPORTER) \
|
||||
--timeout $(TIMEOUT) \
|
||||
--require should \
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**!
|
||||
* cnpmjs.org - bin/cli.js
|
||||
*
|
||||
* Copyright(c) fengmk2 and other contributors.
|
||||
* Copyright(c) cnpm and other contributors.
|
||||
* MIT Licensed
|
||||
*
|
||||
* Authors:
|
||||
@@ -16,7 +14,6 @@
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
require('gnode');
|
||||
var debug = require('debug')('cnpmjs.org:cli');
|
||||
var program = require('commander');
|
||||
var path = require('path');
|
||||
|
||||
@@ -7,7 +7,7 @@ export NODE_ENV='production'
|
||||
ulimit -c unlimited
|
||||
|
||||
cd `dirname $0`/..
|
||||
NODEJS='node --harmony'
|
||||
NODEJS='node'
|
||||
BASE_HOME=`pwd`
|
||||
PROJECT_NAME=`basename ${BASE_HOME}`
|
||||
STDOUT_LOG=`$NODEJS -e "console.log(require('path').join(require('$BASE_HOME/config').logdir, 'nodejs_stdout.log'));\
|
||||
|
||||
26
controllers/registry/package/list_dependents.js
Normal file
26
controllers/registry/package/list_dependents.js
Normal file
@@ -0,0 +1,26 @@
|
||||
/**!
|
||||
* list package's dependents
|
||||
*
|
||||
* Copyright(c) cnpmjs.org and other contributors.
|
||||
* MIT Licensed
|
||||
*
|
||||
* Authors:
|
||||
* fengmk2 <m@fengmk2.com> (http://fengmk2.com)
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
const packageService = require('../../../services/package');
|
||||
|
||||
module.exports = function*() {
|
||||
const name = this.params.name || this.params[0];
|
||||
const dependents = yield packageService.listDependents(name);
|
||||
|
||||
this.body = {
|
||||
dependents: dependents,
|
||||
};
|
||||
};
|
||||
@@ -1,11 +1,9 @@
|
||||
/**!
|
||||
* cnpmjs.org - controllers/registry/package/list_shorts.js
|
||||
*
|
||||
* Copyright(c) fengmk2 and other contributors.
|
||||
* Copyright(c) cnpm and other contributors.
|
||||
* MIT Licensed
|
||||
*
|
||||
* Authors:
|
||||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.github.com)
|
||||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.com)
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
@@ -19,5 +17,5 @@ var packageService = require('../../../services/package');
|
||||
// GET /-/short
|
||||
// List all packages names only
|
||||
module.exports = function* () {
|
||||
this.body = yield* packageService.listAllPublicModuleNames();
|
||||
this.body = yield packageService.listAllPublicModuleNames();
|
||||
};
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
/**!
|
||||
* cnpmjs.js - controllers/registry/package/show.js
|
||||
*
|
||||
* Copyright(c) fengmk2 and other contributors.
|
||||
* Copyright(c) cnpm and other contributors.
|
||||
* MIT Licensed
|
||||
*
|
||||
* Authors:
|
||||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.github.com)
|
||||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.com)
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
/**!
|
||||
* cnpmjs.org - controllers/web/package/show.js
|
||||
*
|
||||
* Copyright(c) cnpmjs.org and other contributors.
|
||||
* Copyright(c) cnpm and other contributors.
|
||||
* MIT Licensed
|
||||
*
|
||||
* Authors:
|
||||
* dead_horse <dead_horse@qq.com> (http://deadhorse.me)
|
||||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.github.com)
|
||||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.com)
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
@@ -35,9 +35,9 @@ So `cnpm` is meaning: **Company npm**.
|
||||
<h3>Sync Status</h3>
|
||||
<p id="sync-model"></p>
|
||||
<p>Last sync time is <span id="last-sync-time"></span>. </p>
|
||||
<div class="ant-alert ant-alert-info">
|
||||
<div class="ant-alert ant-alert-info syncing">
|
||||
<span class="anticon ant-alert-icon anticon-info-circle"></span>
|
||||
<span class="syncing ant-alert-description">The sync worker is working in the backend now. </span>
|
||||
<span class="ant-alert-description">The sync worker is working in the backend now. </span>
|
||||
</div>
|
||||
<div class="ant-table">
|
||||
<table class="sync-status">
|
||||
|
||||
13
package.json
13
package.json
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "cnpmjs.org",
|
||||
"version": "2.2.1",
|
||||
"version": "2.4.0",
|
||||
"description": "Private npm registry and web for Enterprise, base on MySQL and Simple Store Service",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
@@ -14,7 +14,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"agentkeepalive": "~1.2.0",
|
||||
"bluebird": "~2.9.7",
|
||||
"bluebird": "~2.10.2",
|
||||
"bytes": "~1.0.0",
|
||||
"cfork": "~1.3.1",
|
||||
"co": "~4.3.1",
|
||||
@@ -26,8 +26,7 @@
|
||||
"debug": "~2.2.0",
|
||||
"error-formater": "~1.0.3",
|
||||
"fs-cnpm": "~1.2.0",
|
||||
"giturl": "~0.0.3",
|
||||
"gnode": "~0.1.1",
|
||||
"giturl": "^1.0.0",
|
||||
"graceful": "~1.0.0",
|
||||
"gravatar": "~1.1.0",
|
||||
"humanize-ms": "~1.0.1",
|
||||
@@ -53,7 +52,7 @@
|
||||
"treekill": "~1.0.0",
|
||||
"tunnel-agent": "^0.4.0",
|
||||
"urllib": "~2.2.2",
|
||||
"utility": "~1.3.0",
|
||||
"utility": "~1.5.0",
|
||||
"xss": "~0.1.20"
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -92,10 +91,10 @@
|
||||
"registry"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 1.0.0"
|
||||
"node": ">= 2.0.0"
|
||||
},
|
||||
"author": [
|
||||
"fengmk2 <fengmk2@gmail.com> (http://fengmk2.github.com)",
|
||||
"fengmk2 <fengmk2@gmail.com> (http://fengmk2.com)",
|
||||
"dead_horse <dead_horse@qq.com> (http://deadhorse.me)"
|
||||
],
|
||||
"license": "MIT"
|
||||
|
||||
@@ -63,8 +63,21 @@ hr {
|
||||
margin-top: 22px;
|
||||
border-radius: 8px;
|
||||
padding: 10px 20px;
|
||||
transition: width .3s ease-in-out;
|
||||
}
|
||||
|
||||
@media (max-width: 1024px) {
|
||||
#search-input {
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
.pack-overview-background {
|
||||
min-width: 960px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
#search .package.match {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
.yue h4,
|
||||
.yue h5,
|
||||
.yue h6 {
|
||||
font-family: "-apple-system", "Georgia", "Xin Gothic", "Hiragino Sans GB", "Droid Sans Fallback", "Microsoft YaHei", "SimSun", sans-serif;
|
||||
font-family: "-apple-system-headline", "Georgia", "Xin Gothic", "Hiragino Sans GB", "Droid Sans Fallback", "Microsoft YaHei", "SimSun", sans-serif;
|
||||
color: #222223;
|
||||
}
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ $(function () {
|
||||
data.last_sync_module + '</a>');
|
||||
|
||||
if (!data.sync_status) {
|
||||
$('.syncing').html('');
|
||||
$('.syncing').remove();
|
||||
}
|
||||
|
||||
$('.sync').show();
|
||||
|
||||
@@ -26,6 +26,7 @@ var listAll = require('../controllers/registry/package/list_all');
|
||||
var listShorts = require('../controllers/registry/package/list_shorts');
|
||||
var listSince = require('../controllers/registry/package/list_since');
|
||||
var listAllVersions = require('../controllers/registry/package/list');
|
||||
var listDependents = require('../controllers/registry/package/list_dependents');
|
||||
var getOneVersion = require('../controllers/registry/package/show');
|
||||
var savePackage = require('../controllers/registry/package/save');
|
||||
var tag = require('../controllers/registry/package/tag');
|
||||
@@ -118,6 +119,10 @@ function routes(app) {
|
||||
app.get('/downloads/range/:range/:name', downloadTotal);
|
||||
app.get('/downloads/range/:range', downloadTotal);
|
||||
|
||||
// GET /-/package/:pkg/dependents
|
||||
app.get('/-/package/:name/dependents', existsPackage, listDependents);
|
||||
app.get(/^\/\-\/package\/(@[\w\-\.]+\/[\w\-\.]+)\/dependents$/, existsPackage, listDependents);
|
||||
|
||||
// GET /-/package/:pkg/dist-tags -- returns the package's dist-tags
|
||||
app.get('/-/package/:name/dist-tags', existsPackage, tags.index);
|
||||
app.get(/^\/\-\/package\/(@[\w\-\.]+\/[\w\-\.]+)\/dist\-tags$/, existsPackage, tags.index);
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
/**!
|
||||
* cnpmjs.org - services/download_total.js
|
||||
*
|
||||
* Copyright(c) fengmk2 and other contributors.
|
||||
* Copyright(c) cnpm and other contributors.
|
||||
* MIT Licensed
|
||||
*
|
||||
* Authors:
|
||||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.github.com)
|
||||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.com)
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
@@ -103,7 +101,7 @@ exports.plusModuleTotal = function* (data) {
|
||||
};
|
||||
|
||||
exports.getTotal = function* (start, end) {
|
||||
return yield* exports.getModuleTotal('__all__', start, end);
|
||||
return yield exports.getModuleTotal('__all__', start, end);
|
||||
};
|
||||
|
||||
function parseYearMonth(date) {
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
/**!
|
||||
* cnpmjs.org - services/package.js
|
||||
*
|
||||
* Copyright(c) fengmk2 and other contributors.
|
||||
* Copyright(c) cnpm and other contributors.
|
||||
* MIT Licensed
|
||||
*
|
||||
* Authors:
|
||||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.github.com)
|
||||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.com)
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
54
test/controllers/registry/package/list_dependents.test.js
Normal file
54
test/controllers/registry/package/list_dependents.test.js
Normal file
@@ -0,0 +1,54 @@
|
||||
/**!
|
||||
* Copyright(c) cnpm and other contributors.
|
||||
* MIT Licensed
|
||||
*
|
||||
* Authors:
|
||||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.com)
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
const pedding = require('pedding');
|
||||
const request = require('supertest');
|
||||
const mm = require('mm');
|
||||
const app = require('../../../../servers/registry');
|
||||
const utils = require('../../../utils');
|
||||
|
||||
describe('test/controllers/registry/package/list_dependents.test.js', function () {
|
||||
afterEach(mm.restore);
|
||||
|
||||
before(function (done) {
|
||||
done = pedding(2, done);
|
||||
const pkg = utils.getPackage('@cnpmtest/testmodule-list-dependents1', '1.0.0', utils.admin);
|
||||
pkg.versions['1.0.0'].dependencies = {
|
||||
'@cnpmtest/testmodule-list-dependents2': '~1.0.0',
|
||||
};
|
||||
request(app.listen())
|
||||
.put('/' + pkg.name)
|
||||
.set('authorization', utils.adminAuth)
|
||||
.send(pkg)
|
||||
.expect(201, done);
|
||||
|
||||
const pkg2 = utils.getPackage('@cnpmtest/testmodule-list-dependents2', '1.0.0', utils.admin);
|
||||
request(app.listen())
|
||||
.put('/' + pkg2.name)
|
||||
.set('authorization', utils.adminAuth)
|
||||
.send(pkg2)
|
||||
.expect(201, done);
|
||||
});
|
||||
|
||||
it('should list package dependents', function (done) {
|
||||
request(app)
|
||||
.get('/-/package/@cnpmtest/testmodule-list-dependents2/dependents')
|
||||
.expect({
|
||||
dependents: [
|
||||
'@cnpmtest/testmodule-list-dependents1',
|
||||
],
|
||||
})
|
||||
.expect(200, done);
|
||||
});
|
||||
});
|
||||
@@ -1,11 +1,9 @@
|
||||
/**!
|
||||
* cnpmjs.org - test/controllers/registry/package/save.test.js
|
||||
*
|
||||
* Copyright(c) cnpmjs.org and other contributors.
|
||||
* MIT Licensed
|
||||
*
|
||||
* Authors:
|
||||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.github.com)
|
||||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.com)
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
@@ -22,7 +20,7 @@ var app = require('../../../../servers/registry');
|
||||
var config = require('../../../../config');
|
||||
var utils = require('../../../utils');
|
||||
|
||||
describe('controllers/registry/package/save.test.js', function () {
|
||||
describe('test/controllers/registry/package/save.test.js', function () {
|
||||
afterEach(mm.restore);
|
||||
|
||||
describe('no @scoped package', function () {
|
||||
@@ -288,11 +286,11 @@ describe('controllers/registry/package/save.test.js', function () {
|
||||
});
|
||||
|
||||
it('should save dependents', function* () {
|
||||
var names = yield* packageService.listDependents('bytetest2');
|
||||
var names = yield packageService.listDependents('bytetest2');
|
||||
names.should.length(2);
|
||||
names.should.eql(['@cnpmtest/testmodule-new-1', '@cnpmtest/testmodule-new-2']);
|
||||
|
||||
names = yield* packageService.listDependents('@cnpmtest/testmodule-new-1');
|
||||
names = yield packageService.listDependents('@cnpmtest/testmodule-new-1');
|
||||
names.should.length(0);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -60,6 +60,10 @@ module.exports = {
|
||||
supertest: '~0.13.0',
|
||||
'test-console': '^0.7.1'
|
||||
},
|
||||
dependents: [
|
||||
'cnpmjs.org',
|
||||
'koa-project',
|
||||
],
|
||||
maintainers: [
|
||||
{
|
||||
name: 'fengmk2',
|
||||
|
||||
@@ -136,8 +136,8 @@
|
||||
<div class="pack-dep cols-box-item">
|
||||
<div class="cols-box-title">
|
||||
<%
|
||||
var deps = Object.keys(package.dependencies || {})
|
||||
var l = deps.length
|
||||
var deps = Object.keys(package.dependencies || {});
|
||||
var l = deps.length;
|
||||
%>
|
||||
Dependencies<%= ' (' + l + ')' %>
|
||||
|
||||
@@ -151,7 +151,7 @@
|
||||
<a class="pack-dep-name" target="_blank" href="/package/<%= pkg %>"><%= pkg %></a>
|
||||
<span class="pack-dep-ver"><%= package.dependencies[pkg]%></span>
|
||||
</li>
|
||||
<% }) %>
|
||||
<% }); %>
|
||||
</ul>
|
||||
<% } else { %>
|
||||
None
|
||||
@@ -160,8 +160,8 @@
|
||||
<div class="pack-dep cols-box-item">
|
||||
<div class="cols-box-title">
|
||||
<%
|
||||
var deps = Object.keys(package.devDependencies || {})
|
||||
var l = deps.length
|
||||
var deps = Object.keys(package.devDependencies || {});
|
||||
var l = deps.length;
|
||||
%>
|
||||
Dev Dependencies<%= ' (' + l + ')' %>
|
||||
|
||||
@@ -175,13 +175,36 @@
|
||||
<a class="pack-dep-name" target="_blank" href="/package/<%= pkg %>"><%= pkg %></a>
|
||||
<span class="pack-dep-ver"><%= package.devDependencies[pkg]%></span>
|
||||
</li>
|
||||
<% }) %>
|
||||
<% }); %>
|
||||
</ul>
|
||||
<% } else { %>
|
||||
None
|
||||
<% } %>
|
||||
</div>
|
||||
|
||||
<div class="pack-dep cols-box-item">
|
||||
<div class="cols-box-title">
|
||||
<%
|
||||
var deps = package.dependents;
|
||||
var l = deps.length;
|
||||
%>
|
||||
Dependents<%= ' (' + l + ')' %>
|
||||
|
||||
</div>
|
||||
<% if (l) { %>
|
||||
<ul>
|
||||
<%
|
||||
deps.forEach(function(pkg) {
|
||||
%>
|
||||
<li>
|
||||
<a class="pack-dep-name" target="_blank" href="/package/<%= pkg %>"><%= pkg %></a>
|
||||
</li>
|
||||
<% }); %>
|
||||
</ul>
|
||||
<% } else { %>
|
||||
None
|
||||
<% } %>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user