Compare commits

..

26 Commits

Author SHA1 Message Date
727d26fae4 2.0.37 2017-03-26 22:02:21 +02:00
0f2b71ebc3 add new ci 2017-03-26 22:02:18 +02:00
638c1a8c8c now testing properly 2017-03-26 22:01:33 +02:00
c54644949e 2.0.36 2017-02-17 18:57:06 +01:00
53c26d4634 clean up and update deps 2017-02-17 18:56:58 +01:00
e3b1ec0633 improve README 2017-02-03 15:15:36 +01:00
1892bd6df1 2.0.35 2016-09-19 20:50:09 +02:00
20bdf70686 Update description 2016-09-19 20:50:01 +02:00
7787330d63 2.0.34 2016-09-19 20:48:23 +02:00
67c3efdd59 improve README 2016-09-19 20:48:11 +02:00
7655ba749a 2.0.33 2016-09-19 00:44:12 +02:00
0a089b6f10 removed unnecessary import 2016-09-19 00:43:58 +02:00
29bf694db6 2.0.32 2016-09-19 00:34:50 +02:00
019d8deadd update 2016-09-19 00:34:45 +02:00
bfef45cab3 update 2016-09-19 00:34:38 +02:00
eddc64b891 2.0.31 2016-09-18 23:45:00 +02:00
e47df19015 fix 2016-09-18 23:44:56 +02:00
af96ab531b add bithoundrc 2016-09-18 23:22:55 +02:00
b96206e8f7 2.0.30 2016-09-18 23:13:03 +02:00
f96bfc0875 improve README 2016-09-18 23:12:58 +02:00
62f3dbabda 2.0.29 2016-09-18 23:11:34 +02:00
5486e268ed prevent segmentation fault error by directly communicating with process 2016-09-18 23:11:26 +02:00
6d61043379 2.0.28 2016-09-15 14:59:33 +02:00
ac92f355d4 now passing required loading time through promise 2016-09-15 14:59:22 +02:00
140bfb4f5e 2.0.27 2016-09-15 14:46:02 +02:00
4ed87cac7e now adhering to standardjs 2016-09-15 14:45:58 +02:00
19 changed files with 1879 additions and 250 deletions

4
.gitignore vendored
View File

@ -1,4 +1,4 @@
node_modules/ node_modules/
docs/ pages/
public/
coverage/ coverage/
ts/typings/

View File

@ -1,20 +1,31 @@
image: hosttoday/ht-docker-node:npmts # gitzone standard
image: hosttoday/ht-docker-node:npmci
cache:
paths:
- .yarn/
key: "$CI_BUILD_STAGE"
stages: stages:
- test - test
- release - release
- trigger
- pages
testLEGACY: testLEGACY:
stage: test stage: test
script: script:
- npmci test legacy - npmci test legacy
coverage: /\d+.?\d+?\%\s*coverage/
tags: tags:
- docker - docker
allow_failure: true
testLTS: testLTS:
stage: test stage: test
script: script:
- npmci test lts - npmci test lts
coverage: /\d+.?\d+?\%\s*coverage/
tags: tags:
- docker - docker
@ -22,6 +33,7 @@ testSTABLE:
stage: test stage: test
script: script:
- npmci test stable - npmci test stable
coverage: /\d+.?\d+?\%\s*coverage/
tags: tags:
- docker - docker
@ -32,4 +44,28 @@ release:
only: only:
- tags - tags
tags: tags:
- docker - docker
trigger:
stage: trigger
script:
- npmci trigger
only:
- tags
tags:
- docker
pages:
image: hosttoday/ht-docker-node:npmci
stage: pages
script:
- npmci command yarn global add npmpage
- npmci command npmpage --publish gitlab
tags:
- docker
only:
- tags
artifacts:
expire_in: 1 week
paths:
- public

View File

@ -1,2 +0,0 @@
docs/
coverage/

View File

@ -1,12 +0,0 @@
language: node_js
node_js:
- '4'
- stable
deploy:
provider: npm
email: npm@lossless.digital
api_key:
secure: WmJJw1aJ1kbTOtArdBvgtYEcEk2899hiPc/XnCoUrHz45DAgnAES4eVUbhI5AC78tjnKc+iqbB9e5+vziSW4G5P4KAuP0CYLd5v4G5ZC4IYigFPxroIib7wFtGoOlhe8AItLDMdYO2KcPYXVpZzaITj2FlfNjoqg5UiKnSVShKwUALQk6JdZ345d0iwyr2nmNA6m0FJhcO2weY3BEDRyPWuody/FEoVZ3I2Q1f3R50v3Kb7Nzfn0uob5ABjux4YZ4xJ6tNeJkU021tSgJhjqfwbVMoIVJohwa5jlaqXdMQvWWKvhOAFyDj6zOJ1BnIuVYltDoWczuPi3+YVtFoc2+rYdSXYUcK1aCfVQZ8DDYYzlZ9Sp1vxiy8D3RZuNkLzUImranCDl6r6EYTxEw2L2bAowo9wLZtnht/mlRvOOLM9ZYVi0yr7Cd9FhVfiLZO97OGybfTFvih+nbMZGk5/RVeQzYzsycgeNT96ii5+de0yerbD690Qf+Kap5IlS5Fyvo2Y/SVQ3nxgQt7Pa4bTLbMwzSmXoBgUO6j6d8Qv7fPGQvbOQJEGJaZDaqpgxxS7WIc2YtwLXXob757BxKNW6Y6xPCcTqX7lMqfyQa194EjPTNTK+O0YnGAFFnXps/uCc8ccH3z3x6IrAAQpPx68gPERiWMf2WiPsMoh+kH4UzLc=
on:
tags: true
repo: pushrocks/early

View File

@ -1,6 +1,6 @@
The MIT License (MIT) The MIT License (MIT)
Copyright (c) 2016 Push.Rocks Copyright (c) 2016 Lossless GmbH
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@ -1,16 +1,40 @@
# early # early
minimal and fast loading animation for modules that need a little starting time. minimal and fast loading plugin for startup time measuring
## Availabililty
[![npm](https://pushrocks.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/early)
[![git](https://pushrocks.gitlab.io/assets/repo-button-git.svg)](https://GitLab.com/pushrocks/early)
[![git](https://pushrocks.gitlab.io/assets/repo-button-mirror.svg)](https://github.com/pushrocks/early)
[![docs](https://pushrocks.gitlab.io/assets/repo-button-docs.svg)](https://pushrocks.gitlab.io/early/)
## Status for master
[![build status](https://GitLab.com/pushrocks/early/badges/master/build.svg)](https://GitLab.com/pushrocks/early/commits/master)
[![coverage report](https://GitLab.com/pushrocks/early/badges/master/coverage.svg)](https://GitLab.com/pushrocks/early/commits/master)
[![npm downloads per month](https://img.shields.io/npm/dm/early.svg)](https://www.npmjs.com/package/early)
[![Dependency Status](https://david-dm.org/pushrocks/early.svg)](https://david-dm.org/pushrocks/early)
[![bitHound Dependencies](https://www.bithound.io/github/pushrocks/early/badges/dependencies.svg)](https://www.bithound.io/github/pushrocks/early/master/dependencies/npm)
[![bitHound Code](https://www.bithound.io/github/pushrocks/early/badges/code.svg)](https://www.bithound.io/github/pushrocks/early)
[![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 ## Usage
Use TypeScript for best in class instellisense.
```typescript ```javascript
// Put the following at the start of your module // Put the following at the start of your module
import * as early from "early"; import * as early from "early";
early.start("myModuleName"); early.start("myModuleName");
/* /*
do your loading stuff do your loading stuff
*/ */
early.stop(); // stop "early" when your module is ready early.stop().then((loadingTime:number) => { // loadingTime in milliseconds
}); // stop "early" when your module is ready
``` ```
early runs in its own process: The loader animation runs smoothly even when your event queue of your currently loading module is working heavily. For further information read the linked docs at the top of this README.
> MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh)
[![repo-footer](https://pushrocks.gitlab.io/assets/repo-footer.svg)](https://push.rocks)

View File

@ -1 +0,0 @@
import "typings-global";

43
dist/early.child.js vendored
View File

@ -1,43 +0,0 @@
"use strict";
require("typings-global");
const chalk = require("chalk");
const readline = require("readline");
let rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let moduleName;
let loaderLength;
let frameCounter = 0;
let makeFrame = () => {
let resultString = `[${chalk.green("/".repeat(frameCounter))}${" ".repeat(loaderLength - frameCounter)}] starting ${moduleName}`;
if (frameCounter == loaderLength) {
frameCounter = 0;
}
else {
frameCounter++;
}
return resultString;
};
let logEarlyAbort = false;
let logEarly = () => {
if (!logEarlyAbort) {
rl.write(null, { ctrl: true, name: 'u' });
rl.write(makeFrame());
setTimeout(function () {
logEarly();
}, 80);
}
};
let start = function (moduleNameArg = "", loaderLengthArg = "10") {
moduleName = moduleNameArg;
loaderLength = parseInt(loaderLengthArg);
logEarly();
};
start(process.env.moduleNameArg, process.env.loaderLengthArg);
process.on('SIGINT', () => {
logEarlyAbort = true;
rl.write(null, { ctrl: true, name: 'u' });
process.exit(0);
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWFybHkuY2hpbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9lYXJseS5jaGlsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsUUFBTyxnQkFBZ0IsQ0FBQyxDQUFBO0FBQ3hCLE1BQU8sS0FBSyxXQUFXLE9BQU8sQ0FBQyxDQUFDO0FBQ2hDLE1BQU8sUUFBUSxXQUFXLFVBQVUsQ0FBQyxDQUFDO0FBQ3RDLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUM7SUFDOUIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO0lBQ3BCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtDQUN6QixDQUFDLENBQUM7QUFFSCxJQUFJLFVBQWtCLENBQUM7QUFDdkIsSUFBSSxZQUFvQixDQUFDO0FBQ3pCLElBQUksWUFBWSxHQUFXLENBQUMsQ0FBQztBQUU3QixJQUFJLFNBQVMsR0FBRztJQUNaLElBQUksWUFBWSxHQUFXLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDLGNBQWMsVUFBVSxFQUFFLENBQUM7SUFDekksRUFBRSxDQUFDLENBQUMsWUFBWSxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDL0IsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDSixZQUFZLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBQ0QsTUFBTSxDQUFDLFlBQVksQ0FBQztBQUN4QixDQUFDLENBQUM7QUFFRixJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUM7QUFDMUIsSUFBSSxRQUFRLEdBQUc7SUFDWCxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDakIsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUN0QixVQUFVLENBQUM7WUFDUCxRQUFRLEVBQUUsQ0FBQztRQUNmLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNYLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixJQUFJLEtBQUssR0FBRyxVQUFVLGFBQWEsR0FBVyxFQUFFLEVBQUUsZUFBZSxHQUFXLElBQUk7SUFDNUUsVUFBVSxHQUFHLGFBQWEsQ0FBQztJQUMzQixZQUFZLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3pDLFFBQVEsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBRUYsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7QUFFOUQsT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDakIsYUFBYSxHQUFHLElBQUksQ0FBQztJQUNyQixFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDMUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQixDQUFDLENBQUMsQ0FBQyJ9

9
dist/index.d.ts vendored
View File

@ -1,5 +1,6 @@
/// <reference types="q" /> import 'typings-global';
import "typings-global"; /**
import q = require("q"); * start the loading
*/
export declare let start: (moduleNameArg?: string, loaderLengthArg?: string) => void; export declare let start: (moduleNameArg?: string, loaderLengthArg?: string) => void;
export declare let stop: () => q.Promise<{}>; export declare let stop: () => Promise<number>;

60
dist/index.js vendored
View File

@ -1,52 +1,30 @@
"use strict"; "use strict";
Object.defineProperty(exports, "__esModule", { value: true });
require("typings-global"); require("typings-global");
const path = require("path"); const beautycolor = require("beautycolor");
const chalk = require("chalk"); const smartq = require("smartq");
const q = require("q");
const childProcess = require("child_process");
let earlyChild;
let doAnimation = true;
let doText = false; let doText = false;
let moduleName = "undefined module name"; let moduleName = 'undefined module name';
let startTime; let startTime = Date.now();
if (process.argv.indexOf("-v") != -1 || process.env.CI) { if (process.argv.indexOf('-v') === -1) {
doAnimation = false;
}
if (process.argv.indexOf("-v") == -1 && process.env.CI) {
doText = true; doText = true;
} }
// exports /**
exports.start = function (moduleNameArg = "", loaderLengthArg = "10") { * start the loading
startTime = Date.now(); */
exports.start = function (moduleNameArg = '', loaderLengthArg = '10') {
moduleName = moduleNameArg; moduleName = moduleNameArg;
if (doAnimation) { if (doText) {
earlyChild = childProcess.fork(path.join(__dirname, "early.child.js"), [], { console.log(`**** starting ${beautycolor.coloredString(moduleNameArg, 'green')} ****`);
env: {
moduleNameArg: moduleNameArg,
loaderLengthArg: loaderLengthArg,
CI: process.env.CI
}
});
}
else if (doText) {
console.log(`**** starting ${chalk.green(moduleNameArg)} ****`);
} }
}; };
exports.stop = function () { exports.stop = () => {
let done = q.defer(); let done = smartq.defer();
let endTime = Date.now(); let endTime = Date.now();
let executionTime = ((endTime - startTime) / 1000).toString(); let earlyExecutionTime = (endTime - startTime);
if (doAnimation) { let earlyExecutionTimeString = (earlyExecutionTime / 1000).toString();
earlyChild.kill("SIGINT"); console.log(`OK! -> finished loading within ${beautycolor.coloredString(earlyExecutionTimeString, 'blue')}`);
earlyChild.on("close", function () { done.resolve(earlyExecutionTime);
console.log(`loaded ${chalk.green(moduleName)} in ${executionTime} seconds!`);
done.resolve();
});
}
else {
console.log(`... finished loading ${moduleName} in ${executionTime}`);
done.resolve();
}
return done.promise; return done.promise;
}; };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsUUFBTyxnQkFDUCxDQUFDLENBRHNCO0FBQ3ZCLE1BQU8sSUFBSSxXQUFXLE1BQU0sQ0FBQyxDQUFDO0FBQzlCLE1BQU8sS0FBSyxXQUFXLE9BQU8sQ0FBQyxDQUFDO0FBQ2hDLE1BQU8sQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBRXhCLE1BQU8sWUFBWSxXQUFXLGVBQWUsQ0FBQyxDQUFDO0FBQy9DLElBQUksVUFBVSxDQUFDO0FBRWYsSUFBSSxXQUFXLEdBQVksSUFBSSxDQUFDO0FBQ2hDLElBQUksTUFBTSxHQUFZLEtBQUssQ0FBQztBQUM1QixJQUFJLFVBQVUsR0FBVyx1QkFBdUIsQ0FBQztBQUNqRCxJQUFJLFNBQVMsQ0FBQztBQUVkLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyRCxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLENBQUM7QUFDRCxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckQsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNsQixDQUFDO0FBRUQsVUFBVTtBQUNDLGFBQUssR0FBRyxVQUFVLGFBQWEsR0FBVyxFQUFFLEVBQUUsZUFBZSxHQUFXLElBQUk7SUFFbkYsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUV2QixVQUFVLEdBQUcsYUFBYSxDQUFDO0lBQzNCLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDZCxVQUFVLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUN2RSxHQUFHLEVBQUU7Z0JBQ0QsYUFBYSxFQUFFLGFBQWE7Z0JBQzVCLGVBQWUsRUFBRSxlQUFlO2dCQUNoQyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2FBQ3JCO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEtBQUssQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BFLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFUyxZQUFJLEdBQUc7SUFDZCxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDckIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLElBQUksYUFBYSxHQUFVLENBQUMsQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDckUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNkLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUIsVUFBVSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUU7WUFDbkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sYUFBYSxXQUFXLENBQUMsQ0FBQztZQUM5RSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDSixPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixVQUFVLE9BQU8sYUFBYSxFQUFFLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3hCLENBQUMsQ0FBQyJ9 //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBCQUF1QjtBQUN2QiwyQ0FBMEM7QUFDMUMsaUNBQWdDO0FBRWhDLElBQUksTUFBTSxHQUFZLEtBQUssQ0FBQTtBQUMzQixJQUFJLFVBQVUsR0FBVyx1QkFBdUIsQ0FBQTtBQUNoRCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUE7QUFFMUIsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sR0FBRyxJQUFJLENBQUE7QUFDZixDQUFDO0FBRUQ7O0dBRUc7QUFDUSxRQUFBLEtBQUssR0FBRyxVQUFVLGdCQUF3QixFQUFFLEVBQUUsa0JBQTBCLElBQUk7SUFDckYsVUFBVSxHQUFHLGFBQWEsQ0FBQTtJQUMxQixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsV0FBVyxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3hGLENBQUM7QUFDSCxDQUFDLENBQUE7QUFFVSxRQUFBLElBQUksR0FBRztJQUNoQixJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFVLENBQUE7SUFDakMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFBO0lBQ3hCLElBQUksa0JBQWtCLEdBQVcsQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLENBQUE7SUFDdEQsSUFBSSx3QkFBd0IsR0FBVyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQzdFLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLFdBQVcsQ0FBQyxhQUFhLENBQUMsd0JBQXdCLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQzVHLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtJQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQTtBQUNyQixDQUFDLENBQUEifQ==

View File

@ -1,4 +0,0 @@
{
"mode":"default",
"coverageTreshold":30
}

View File

@ -1,7 +1,7 @@
{ {
"name": "early", "name": "early",
"version": "2.0.26", "version": "2.0.37",
"description": "nice module loading animation for modules that need a little starting time.", "description": "minimal and fast loading plugin for startup time measuring",
"main": "dist/index.js", "main": "dist/index.js",
"typings": "dist/index.d.ts", "typings": "dist/index.d.ts",
"scripts": { "scripts": {
@ -21,14 +21,12 @@
}, },
"homepage": "https://gitlab.com/pushrocks/early#readme", "homepage": "https://gitlab.com/pushrocks/early#readme",
"devDependencies": { "devDependencies": {
"npmts-g": "^5.2.8", "smartdelay": "^1.0.1",
"typings-test": "^1.0.1" "tapbundle": "^1.0.5"
}, },
"dependencies": { "dependencies": {
"@types/chalk": "^0.4.28", "beautycolor": "^1.0.7",
"@types/q": "0.x.x", "smartq": "^1.1.1",
"chalk": "^1.1.3", "typings-global": "^1.0.14"
"q": "^1.4.1",
"typings-global": "^1.0.6"
} }
} }

1
test/test.d.ts vendored
View File

@ -1 +0,0 @@
import "typings-test";

View File

@ -1,15 +0,0 @@
"use strict";
require("typings-test");
const early = require("../dist/index");
describe("early", function () {
it(".start()", function (done) {
this.timeout(10000);
early.start("early");
setTimeout(done, 5000);
});
it(".stop()", function (done) {
early.stop()
.then(done);
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sY0FBYyxDQUFDLENBQUE7QUFDdEIsTUFBTyxLQUFLLFdBQVcsZUFBZSxDQUFDLENBQUM7QUFFeEMsUUFBUSxDQUFDLE9BQU8sRUFBQztJQUNiLEVBQUUsQ0FBQyxVQUFVLEVBQUMsVUFBUyxJQUFJO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEIsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQixVQUFVLENBQUMsSUFBSSxFQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ0gsRUFBRSxDQUFDLFNBQVMsRUFBQyxVQUFTLElBQUk7UUFDdEIsS0FBSyxDQUFDLElBQUksRUFBRTthQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQixDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQyxDQUFBIn0=

View File

@ -1,14 +1,11 @@
import "typings-test"; import { expect, tap } from 'tapbundle'
import early = require("../dist/index"); import * as smartdelay from 'smartdelay'
import early = require('../dist/index')
describe("early",function(){ tap.test('.start()', async () => {
it(".start()",function(done){ early.start('early')
this.timeout(10000); await smartdelay.delayFor(2000)
early.start("early"); })
setTimeout(done,5000); tap.test('.stop()', async () => {
}); await early.stop()
it(".stop()",function(done){
early.stop()
.then(done);
})
}) })

View File

@ -1,46 +0,0 @@
import "typings-global";
import chalk = require("chalk");
import readline = require("readline");
let rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let moduleName: string;
let loaderLength: number;
let frameCounter: number = 0;
let makeFrame = (): string => {
let resultString: string = `[${chalk.green("/".repeat(frameCounter))}${" ".repeat(loaderLength - frameCounter)}] starting ${moduleName}`;
if (frameCounter == loaderLength) {
frameCounter = 0;
} else {
frameCounter++;
}
return resultString;
};
let logEarlyAbort = false;
let logEarly = () => {
if (!logEarlyAbort) {
rl.write(null, { ctrl: true, name: 'u' });
rl.write(makeFrame());
setTimeout(function () {
logEarly();
}, 80);
}
};
let start = function (moduleNameArg: string = "", loaderLengthArg: string = "10") {
moduleName = moduleNameArg;
loaderLength = parseInt(loaderLengthArg);
logEarly();
};
start(process.env.moduleNameArg, process.env.loaderLengthArg);
process.on('SIGINT', () => {
logEarlyAbort = true;
rl.write(null, { ctrl: true, name: 'u' });
process.exit(0);
});

View File

@ -1,56 +1,31 @@
import "typings-global" import 'typings-global'
import path = require("path"); import * as beautycolor from 'beautycolor'
import chalk = require("chalk"); import * as smartq from 'smartq'
import q = require("q");
import readline = require("readline");
import childProcess = require("child_process");
let earlyChild;
let doAnimation: boolean = true; let doText: boolean = false
let doText: boolean = false; let moduleName: string = 'undefined module name'
let moduleName: string = "undefined module name"; let startTime = Date.now()
let startTime;
if (process.argv.indexOf("-v") != -1 || process.env.CI) { if (process.argv.indexOf('-v') === -1) {
doAnimation = false; doText = true
}
if (process.argv.indexOf("-v") == -1 && process.env.CI) {
doText = true;
} }
// exports /**
export let start = function (moduleNameArg: string = "", loaderLengthArg: string = "10") { * start the loading
*/
startTime = Date.now(); export let start = function (moduleNameArg: string = '', loaderLengthArg: string = '10') {
moduleName = moduleNameArg
moduleName = moduleNameArg; if (doText) {
if (doAnimation) { console.log(`**** starting ${beautycolor.coloredString(moduleNameArg, 'green')} ****`)
earlyChild = childProcess.fork(path.join(__dirname, "early.child.js"), [], { }
env: { }
moduleNameArg: moduleNameArg,
loaderLengthArg: loaderLengthArg,
CI: process.env.CI
}
});
} else if (doText) {
console.log(`**** starting ${chalk.green(moduleNameArg)} ****`);
}
};
export let stop = function () {
let done = q.defer();
let endTime = Date.now();
let executionTime:string = ((endTime - startTime) / 1000).toString();
if (doAnimation) {
earlyChild.kill("SIGINT");
earlyChild.on("close", function () {
console.log(`loaded ${chalk.green(moduleName)} in ${executionTime} seconds!`);
done.resolve();
})
} else {
console.log(`... finished loading ${moduleName} in ${executionTime}`);
done.resolve();
}
return done.promise;
};
export let stop = (): Promise<number> => {
let done = smartq.defer<number>()
let endTime = Date.now()
let earlyExecutionTime: number = (endTime - startTime)
let earlyExecutionTimeString: string = (earlyExecutionTime / 1000).toString()
console.log(`OK! -> finished loading within ${beautycolor.coloredString(earlyExecutionTimeString, 'blue')}`)
done.resolve(earlyExecutionTime)
return done.promise
}

3
tslint.json Normal file
View File

@ -0,0 +1,3 @@
{
"extends": "tslint-config-standard"
}

1741
yarn.lock Normal file

File diff suppressed because it is too large Load Diff