Compare commits

11 Commits

Author SHA1 Message Date
61f2ed9ef7 1.0.7 2017-08-19 12:32:27 +02:00
2224a22f0c fix bug that resets timer 2017-08-19 12:32:24 +02:00
c3c35c9b3e 1.0.6 2017-08-18 12:52:28 +02:00
d9f75c236f compile 2017-08-18 12:52:24 +02:00
61d7ac981b update to reflect more accurate update information 2017-08-18 12:52:11 +02:00
4501469365 1.0.5 2017-08-17 11:56:41 +02:00
c1df1f0db5 add smartopen 2017-08-17 11:56:38 +02:00
aa73a5b2aa 1.0.4 2017-08-16 23:28:14 +02:00
bd93b501c2 update console logs 2017-08-16 23:28:12 +02:00
4579731779 1.0.3 2017-08-16 18:55:23 +02:00
c5252e524a add docs 2017-08-16 18:55:16 +02:00
10 changed files with 136 additions and 37 deletions

4
dist/index.d.ts vendored
View File

@ -1,8 +1,8 @@
import { KeyValueStore } from 'npmextra';
export declare class SmartUpdate {
kvStore: KeyValueStore;
check(npmnameArg: string, compareVersion: string): Promise<void>;
check(npmnameArg: string, compareVersion: string, changelogUrlArg?: string): Promise<void>;
private getNpmPackageFromRegistry(npmnameArg);
private checkIfUpgrade(npmPackage, versionArg);
private checkIfUpgrade(npmPackage, localVersionStringArg, changelogUrlArg?);
}
export declare let standardHandler: SmartUpdate;

30
dist/index.js vendored
View File

@ -14,7 +14,7 @@ class SmartUpdate {
constructor() {
this.kvStore = new plugins.npmextra.KeyValueStore('custom', 'global:smartupdate');
}
check(npmnameArg, compareVersion) {
check(npmnameArg, compareVersion, changelogUrlArg) {
return __awaiter(this, void 0, void 0, function* () {
let result = yield this.kvStore.readKey(npmnameArg);
let timeStamp = new smarttime_1.TimeStamp();
@ -26,15 +26,17 @@ class SmartUpdate {
};
if (result) {
let lastCheckTimeStamp = smarttime_1.TimeStamp.fromMilliSeconds(result.lastCheck);
let compareTime = plugins.smarttime.getMilliSecondsFromUnits({ days: 1 });
let compareTime = plugins.smarttime.getMilliSecondsFromUnits({ hours: 1 });
if (!lastCheckTimeStamp.isOlderThan(timeStamp, compareTime)) {
plugins.beautylog.log('not checking for new version since this has been done already for today');
newData.lastCheck = lastCheckTimeStamp.milliSeconds;
plugins.beautylog.log(`smartupdate: next check in : ` +
`${plugins.beautycolor.coloredString(`${npmnameArg} has already been checked within the last hour.`, 'pink')}`);
return;
}
}
let npmPackage = yield this.getNpmPackageFromRegistry(npmnameArg);
newData.latestVersion = npmPackage.version;
let upgradeBool = yield this.checkIfUpgrade(npmPackage, compareVersion);
let upgradeBool = yield this.checkIfUpgrade(npmPackage, compareVersion, changelogUrlArg);
if (upgradeBool) {
}
this.kvStore.writeKey(npmnameArg, newData);
@ -42,22 +44,28 @@ class SmartUpdate {
}
getNpmPackageFromRegistry(npmnameArg) {
return __awaiter(this, void 0, void 0, function* () {
plugins.beautylog.log(`checking for newer version of ${npmnameArg}...`);
plugins.beautylog.log(`smartupdate: checking for newer version of ${plugins.beautycolor.coloredString(npmnameArg, 'pink')}...`);
let npmRegistry = new plugins.smartnpm.NpmRegistry();
let npmPackage = (yield npmRegistry.search({ name: npmnameArg, boostExact: true }))[0];
return npmPackage;
});
}
checkIfUpgrade(npmPackage, versionArg) {
checkIfUpgrade(npmPackage, localVersionStringArg, changelogUrlArg) {
return __awaiter(this, void 0, void 0, function* () {
if (npmPackage.version === versionArg) {
plugins.beautylog.ok(`You are running the latest version of ${npmPackage.name}`);
// create Version objects
let versionNpm = new plugins.smartversion.SmartVersion(npmPackage.version);
let versionLocal = new plugins.smartversion.SmartVersion(localVersionStringArg);
if (!versionNpm.greaterThan(versionLocal)) {
plugins.beautylog.ok(`smartupdate: You are running the latest version of ${plugins.beautycolor.coloredString(npmPackage.name, 'pink')}`);
return false;
}
else {
plugins.beautylog.warn(`There is a newer version of ${npmPackage.name} available on npm.`);
plugins.beautylog.info(`Your version: ${versionArg} | version on npm: ${npmPackage.version}`);
plugins.beautylog.warn(`!!! You should upgrade!!!`);
plugins.beautylog.warn(`Your version: ${versionLocal.versionString} | version on npm: ${versionNpm.versionString}`);
if (!process.env.CI && changelogUrlArg) {
plugins.beautylog.log('trying to open changelog...');
plugins.smartopen.openUrl(changelogUrlArg);
}
return true;
}
});
@ -65,4 +73,4 @@ class SmartUpdate {
}
exports.SmartUpdate = SmartUpdate;
exports.standardHandler = new SmartUpdate();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsaURBQWdEO0FBRWhELHlDQUFxQztBQVVyQztJQUFBO1FBQ0UsWUFBTyxHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLG9CQUFvQixDQUFDLENBQUE7SUErQzlFLENBQUM7SUE3Q08sS0FBSyxDQUFFLFVBQWtCLEVBQUUsY0FBc0I7O1lBQ3JELElBQUksTUFBTSxHQUFpQixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBQ2pFLElBQUksU0FBUyxHQUFHLElBQUkscUJBQVMsRUFBRSxDQUFBO1lBRS9CLHVCQUF1QjtZQUN2QixJQUFJLE9BQU8sR0FBRztnQkFDWixTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVk7Z0JBQ2pDLGFBQWEsRUFBRSxPQUFPO2dCQUN0QixnQkFBZ0IsRUFBRSxLQUFLO2FBQ3hCLENBQUE7WUFDRCxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNYLElBQUksa0JBQWtCLEdBQUcscUJBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUE7Z0JBQ3JFLElBQUksV0FBVyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtnQkFDekUsRUFBRSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDNUQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMseUVBQXlFLENBQUMsQ0FBQTtvQkFDaEcsTUFBTSxDQUFBO2dCQUNSLENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMseUJBQXlCLENBQUMsVUFBVSxDQUFDLENBQUE7WUFDakUsT0FBTyxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFBO1lBQzFDLElBQUksV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUE7WUFDdkUsRUFBRSxDQUFBLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUVqQixDQUFDO1lBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQzVDLENBQUM7S0FBQTtJQUVhLHlCQUF5QixDQUFFLFVBQVU7O1lBQ2pELE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxVQUFVLEtBQUssQ0FBQyxDQUFBO1lBQ3ZFLElBQUksV0FBVyxHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtZQUNwRCxJQUFJLFVBQVUsR0FBRyxDQUFDLE1BQU0sV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUN0RixNQUFNLENBQUMsVUFBVSxDQUFBO1FBQ25CLENBQUM7S0FBQTtJQUVhLGNBQWMsQ0FBRSxVQUF1QyxFQUFFLFVBQWtCOztZQUN2RixFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLHlDQUF5QyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtnQkFDaEYsTUFBTSxDQUFDLEtBQUssQ0FBQTtZQUNkLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDTixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQywrQkFBK0IsVUFBVSxDQUFDLElBQUksb0JBQW9CLENBQUMsQ0FBQTtnQkFDMUYsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLFVBQVUsc0JBQXNCLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFBO2dCQUM3RixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFBO2dCQUNuRCxNQUFNLENBQUMsSUFBSSxDQUFBO1lBQ2IsQ0FBQztRQUNILENBQUM7S0FBQTtDQUNGO0FBaERELGtDQWdEQztBQUNVLFFBQUEsZUFBZSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUEifQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsaURBQWdEO0FBRWhELHlDQUFxQztBQVVyQztJQUFBO1FBQ0UsWUFBTyxHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLG9CQUFvQixDQUFDLENBQUE7SUFnRTlFLENBQUM7SUE5RE8sS0FBSyxDQUFFLFVBQWtCLEVBQUUsY0FBc0IsRUFBRSxlQUF3Qjs7WUFDL0UsSUFBSSxNQUFNLEdBQWlCLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUE7WUFDakUsSUFBSSxTQUFTLEdBQUcsSUFBSSxxQkFBUyxFQUFFLENBQUE7WUFFL0IsdUJBQXVCO1lBQ3ZCLElBQUksT0FBTyxHQUFHO2dCQUNaLFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWTtnQkFDakMsYUFBYSxFQUFFLE9BQU87Z0JBQ3RCLGdCQUFnQixFQUFFLEtBQUs7YUFDeEIsQ0FBQTtZQUNELEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ1gsSUFBSSxrQkFBa0IsR0FBRyxxQkFBUyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQTtnQkFDckUsSUFBSSxXQUFXLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO2dCQUMxRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM1RCxPQUFPLENBQUMsU0FBUyxHQUFHLGtCQUFrQixDQUFDLFlBQVksQ0FBQTtvQkFDbkQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQ25CLCtCQUErQjt3QkFDL0Is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

View File

@ -1,6 +1,9 @@
import 'typings-global';
import * as beautylog from 'beautylog';
import * as beautycolor from 'beautycolor';
import * as npmextra from 'npmextra';
import * as smartnpm from 'smartnpm';
import * as smartopen from 'smartopen';
import * as smarttime from 'smarttime';
export { beautylog, npmextra, smartnpm, smarttime };
import * as smartversion from 'smartversion';
export { beautylog, beautycolor, npmextra, smartnpm, smartopen, smarttime, smartversion };

View File

@ -3,10 +3,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
require("typings-global");
const beautylog = require("beautylog");
exports.beautylog = beautylog;
const beautycolor = require("beautycolor");
exports.beautycolor = beautycolor;
const npmextra = require("npmextra");
exports.npmextra = npmextra;
const smartnpm = require("smartnpm");
exports.smartnpm = smartnpm;
const smartopen = require("smartopen");
exports.smartopen = smartopen;
const smarttime = require("smarttime");
exports.smarttime = smarttime;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnR1cGRhdGUucGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0dXBkYXRlLnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwQkFBdUI7QUFFdkIsdUNBQXNDO0FBTXBDLDhCQUFTO0FBTFgscUNBQW9DO0FBTWxDLDRCQUFRO0FBTFYscUNBQW9DO0FBTWxDLDRCQUFRO0FBTFYsdUNBQXNDO0FBTXBDLDhCQUFTIn0=
const smartversion = require("smartversion");
exports.smartversion = smartversion;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnR1cGRhdGUucGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0dXBkYXRlLnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwQkFBdUI7QUFFdkIsdUNBQXNDO0FBU3BDLDhCQUFTO0FBUlgsMkNBQTBDO0FBU3hDLGtDQUFXO0FBUmIscUNBQW9DO0FBU2xDLDRCQUFRO0FBUlYscUNBQW9DO0FBU2xDLDRCQUFRO0FBUlYsdUNBQXNDO0FBU3BDLDhCQUFTO0FBUlgsdUNBQXNDO0FBU3BDLDhCQUFTO0FBUlgsNkNBQTRDO0FBUzFDLG9DQUFZIn0=

29
docs/index.md Normal file
View File

@ -0,0 +1,29 @@
# smartupdate
update your tools in a smart way
## Availabililty
[![npm](https://pushrocks.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/smartupdate)
[![git](https://pushrocks.gitlab.io/assets/repo-button-git.svg)](https://GitLab.com/pushrocks/smartupdate)
[![git](https://pushrocks.gitlab.io/assets/repo-button-mirror.svg)](https://github.com/pushrocks/smartupdate)
[![docs](https://pushrocks.gitlab.io/assets/repo-button-docs.svg)](https://pushrocks.gitlab.io/smartupdate/)
## Status for master
[![build status](https://GitLab.com/pushrocks/smartupdate/badges/master/build.svg)](https://GitLab.com/pushrocks/smartupdate/commits/master)
[![coverage report](https://GitLab.com/pushrocks/smartupdate/badges/master/coverage.svg)](https://GitLab.com/pushrocks/smartupdate/commits/master)
[![npm downloads per month](https://img.shields.io/npm/dm/smartupdate.svg)](https://www.npmjs.com/package/smartupdate)
[![Dependency Status](https://david-dm.org/pushrocks/smartupdate.svg)](https://david-dm.org/pushrocks/smartupdate)
[![bitHound Dependencies](https://www.bithound.io/github/pushrocks/smartupdate/badges/dependencies.svg)](https://www.bithound.io/github/pushrocks/smartupdate/master/dependencies/npm)
[![bitHound Code](https://www.bithound.io/github/pushrocks/smartupdate/badges/code.svg)](https://www.bithound.io/github/pushrocks/smartupdate)
[![TypeScript](https://img.shields.io/badge/TypeScript-2.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/)
[![node](https://img.shields.io/badge/node->=%206.x.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/)
[![JavaScript Style Guide](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](http://standardjs.com/)
## Usage
Use TypeScript for best in class instellisense.
For further information read the linked docs at the top of this README.
> MIT licensed | **&copy;** [Lossless GmbH](https://lossless.gmbh)
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html)
[![repo-footer](https://pushrocks.gitlab.io/assets/repo-footer.svg)](https://push.rocks)

View File

@ -1,6 +1,6 @@
{
"name": "smartupdate",
"version": "1.0.2",
"version": "1.0.7",
"description": "update your tools in a smart way",
"main": "dist/index.js",
"typings": "dist/index.d.ts",
@ -13,10 +13,13 @@
"tapbundle": "^1.1.1"
},
"dependencies": {
"beautycolor": "^1.0.11",
"beautylog": "^6.1.10",
"npmextra": "^2.0.9",
"smartnpm": "^1.0.4",
"smartopen": "^1.0.3",
"smarttime": "^1.0.6",
"smartversion": "^1.0.3",
"typings-global": "^1.0.20"
}
}

View File

@ -2,7 +2,7 @@ import { expect, tap } from 'tapbundle'
import * as smartupdate from '../ts/index'
tap.test('should check for a npm module', async () => {
await smartupdate.standardHandler.check('npmts', '8.0.5')
await smartupdate.standardHandler.check('npmts', '8.0.5', 'http://gitzone.gitlab.io/npmts/changelog.html')
})
tap.start()

View File

@ -13,7 +13,7 @@ import { KeyValueStore } from 'npmextra'
export class SmartUpdate {
kvStore = new plugins.npmextra.KeyValueStore('custom', 'global:smartupdate')
async check (npmnameArg: string, compareVersion: string) {
async check (npmnameArg: string, compareVersion: string, changelogUrlArg?: string) {
let result: ICacheStatus = await this.kvStore.readKey(npmnameArg)
let timeStamp = new TimeStamp()
@ -25,36 +25,53 @@ export class SmartUpdate {
}
if (result) {
let lastCheckTimeStamp = TimeStamp.fromMilliSeconds(result.lastCheck)
let compareTime = plugins.smarttime.getMilliSecondsFromUnits({ days: 1 })
let compareTime = plugins.smarttime.getMilliSecondsFromUnits({ hours: 1 })
if (!lastCheckTimeStamp.isOlderThan(timeStamp, compareTime)) {
plugins.beautylog.log('not checking for new version since this has been done already for today')
newData.lastCheck = lastCheckTimeStamp.milliSeconds
plugins.beautylog.log(
`smartupdate: next check in : ` +
`${plugins.beautycolor.coloredString(
`${npmnameArg} has already been checked within the last hour.`
, 'pink'
)}`
)
return
}
}
let npmPackage = await this.getNpmPackageFromRegistry(npmnameArg)
newData.latestVersion = npmPackage.version
let upgradeBool = await this.checkIfUpgrade(npmPackage, compareVersion)
if(upgradeBool) {
let upgradeBool = await this.checkIfUpgrade(npmPackage, compareVersion, changelogUrlArg)
if (upgradeBool) {
}
this.kvStore.writeKey(npmnameArg, newData)
}
private async getNpmPackageFromRegistry (npmnameArg) {
plugins.beautylog.log(`checking for newer version of ${npmnameArg}...`)
plugins.beautylog.log(`smartupdate: checking for newer version of ${plugins.beautycolor.coloredString(npmnameArg, 'pink')}...`)
let npmRegistry = new plugins.smartnpm.NpmRegistry()
let npmPackage = (await npmRegistry.search({ name: npmnameArg, boostExact: true }))[0]
return npmPackage
}
private async checkIfUpgrade (npmPackage: plugins.smartnpm.NpmPackage, versionArg: string) {
if (npmPackage.version === versionArg) {
plugins.beautylog.ok(`You are running the latest version of ${npmPackage.name}`)
private async checkIfUpgrade (
npmPackage: plugins.smartnpm.NpmPackage,
localVersionStringArg: string,
changelogUrlArg?: string
) {
// create Version objects
let versionNpm = new plugins.smartversion.SmartVersion(npmPackage.version)
let versionLocal = new plugins.smartversion.SmartVersion(localVersionStringArg)
if (!versionNpm.greaterThan(versionLocal)) {
plugins.beautylog.ok(`smartupdate: You are running the latest version of ${plugins.beautycolor.coloredString(npmPackage.name, 'pink')}`)
return false
} else {
plugins.beautylog.warn(`There is a newer version of ${npmPackage.name} available on npm.`)
plugins.beautylog.info(`Your version: ${versionArg} | version on npm: ${npmPackage.version}`)
plugins.beautylog.warn(`!!! You should upgrade!!!`)
plugins.beautylog.warn(`Your version: ${versionLocal.versionString} | version on npm: ${versionNpm.versionString}`)
if (!process.env.CI && changelogUrlArg) {
plugins.beautylog.log('trying to open changelog...')
plugins.smartopen.openUrl(changelogUrlArg)
}
return true
}
}

View File

@ -1,13 +1,19 @@
import 'typings-global'
import * as beautylog from 'beautylog'
import * as beautycolor from 'beautycolor'
import * as npmextra from 'npmextra'
import * as smartnpm from 'smartnpm'
import * as smartopen from 'smartopen'
import * as smarttime from 'smarttime'
import * as smartversion from 'smartversion'
export {
beautylog,
beautycolor,
npmextra,
smartnpm,
smarttime
smartopen,
smarttime,
smartversion
}

View File

@ -53,8 +53,12 @@
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-2.0.29.tgz#5002e14f75e2d71e564281df0431c8c1b4a2a36a"
"@types/node@*", "@types/node@^8.0.10":
version "8.0.22"
resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.22.tgz#9c6bfee1f45f5e9952ff6b487e657ecca48c7777"
version "8.0.24"
resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.24.tgz#06c580084d9add1fb40c1510ef0b448961246fb1"
"@types/open@^0.0.29":
version "0.0.29"
resolved "https://registry.yarnpkg.com/@types/open/-/open-0.0.29.tgz#3de910012674909db14d608d1fde44ffa7a9ecea"
"@types/promises-a-plus@*":
version "0.0.27"
@ -64,6 +68,10 @@
version "1.0.3"
resolved "https://registry.yarnpkg.com/@types/q/-/q-1.0.3.tgz#08e99d20f7abfc0fe202b6d5a0921bfafcdea8d0"
"@types/semver@^5.3.33":
version "5.3.34"
resolved "https://registry.yarnpkg.com/@types/semver/-/semver-5.3.34.tgz#6fade409ceb8ae817c1f7f1cfa5375416e97045f"
"@types/shelljs@^0.7.2":
version "0.7.4"
resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.7.4.tgz#137b5f31306eaff4de120ffe5b9d74b297809cfc"
@ -107,12 +115,11 @@ balanced-match@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
beautycolor@^1.0.7, beautycolor@^1.0.9:
version "1.0.10"
resolved "https://registry.yarnpkg.com/beautycolor/-/beautycolor-1.0.10.tgz#4b50758e59115839b3bb2bfe8aaaec9e29c747dd"
beautycolor@^1.0.11, beautycolor@^1.0.7, beautycolor@^1.0.9:
version "1.0.11"
resolved "https://registry.yarnpkg.com/beautycolor/-/beautycolor-1.0.11.tgz#71c5568d5a7ed5c144d3a54f753ad1b08862aea5"
dependencies:
ansi-256-colors "^1.1.0"
tapbundle "^1.1.1"
typings-global "^1.0.14"
beautylog@^6.1.10:
@ -495,6 +502,10 @@ onetime@^2.0.0:
dependencies:
mimic-fn "^1.0.0"
open@^0.0.5:
version "0.0.5"
resolved "https://registry.yarnpkg.com/open/-/open-0.0.5.tgz#42c3e18ec95466b6bf0dc42f3a2945c3f0cad8fc"
ora@^1.1.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/ora/-/ora-1.3.0.tgz#80078dd2b92a934af66a3ad72a5b910694ede51a"
@ -585,7 +596,7 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
semver@^5.3.0:
semver@^5.3.0, semver@^5.4.1:
version "5.4.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"
@ -660,6 +671,14 @@ smartnpm@^1.0.4:
smartrequest "^1.0.6"
typings-global "^1.0.16"
smartopen@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/smartopen/-/smartopen-1.0.3.tgz#11a5835b50103e09fc9702ec9a884605ad7e584d"
dependencies:
"@types/open" "^0.0.29"
open "^0.0.5"
typings-global "^1.0.20"
smartpath@^3.2.8:
version "3.2.8"
resolved "https://registry.yarnpkg.com/smartpath/-/smartpath-3.2.8.tgz#4834bd3a8bae2295baacadba23c87a501952f940"
@ -698,6 +717,14 @@ smarttime@^1.0.6:
dependencies:
typings-global "^1.0.16"
smartversion@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/smartversion/-/smartversion-1.0.3.tgz#8b6b1553594a4df7fac8495bc2802b4a6f84a27c"
dependencies:
"@types/semver" "^5.3.33"
semver "^5.4.1"
typings-global "^1.0.16"
sprintf-js@~1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"