Compare commits
26 Commits
Author | SHA1 | Date | |
---|---|---|---|
727d26fae4 | |||
0f2b71ebc3 | |||
638c1a8c8c | |||
c54644949e | |||
53c26d4634 | |||
e3b1ec0633 | |||
1892bd6df1 | |||
20bdf70686 | |||
7787330d63 | |||
67c3efdd59 | |||
7655ba749a | |||
0a089b6f10 | |||
29bf694db6 | |||
019d8deadd | |||
bfef45cab3 | |||
eddc64b891 | |||
e47df19015 | |||
af96ab531b | |||
b96206e8f7 | |||
f96bfc0875 | |||
62f3dbabda | |||
5486e268ed | |||
6d61043379 | |||
ac92f355d4 | |||
140bfb4f5e | |||
4ed87cac7e |
4
.gitignore
vendored
4
.gitignore
vendored
@ -1,4 +1,4 @@
|
|||||||
node_modules/
|
node_modules/
|
||||||
docs/
|
pages/
|
||||||
|
public/
|
||||||
coverage/
|
coverage/
|
||||||
ts/typings/
|
|
@ -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
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
docs/
|
|
||||||
coverage/
|
|
12
.travis.yml
12
.travis.yml
@ -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
|
|
2
LICENSE
2
LICENSE
@ -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
|
||||||
|
32
README.md
32
README.md
@ -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
|
||||||
|
[](https://www.npmjs.com/package/early)
|
||||||
|
[](https://GitLab.com/pushrocks/early)
|
||||||
|
[](https://github.com/pushrocks/early)
|
||||||
|
[](https://pushrocks.gitlab.io/early/)
|
||||||
|
|
||||||
|
## Status for master
|
||||||
|
[](https://GitLab.com/pushrocks/early/commits/master)
|
||||||
|
[](https://GitLab.com/pushrocks/early/commits/master)
|
||||||
|
[](https://www.npmjs.com/package/early)
|
||||||
|
[](https://david-dm.org/pushrocks/early)
|
||||||
|
[](https://www.bithound.io/github/pushrocks/early/master/dependencies/npm)
|
||||||
|
[](https://www.bithound.io/github/pushrocks/early)
|
||||||
|
[](https://nodejs.org/dist/latest-v6.x/docs/api/)
|
||||||
|
[](https://nodejs.org/dist/latest-v6.x/docs/api/)
|
||||||
|
[](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)
|
||||||
|
|
||||||
|
[](https://push.rocks)
|
||||||
|
1
dist/early.child.d.ts
vendored
1
dist/early.child.d.ts
vendored
@ -1 +0,0 @@
|
|||||||
import "typings-global";
|
|
43
dist/early.child.js
vendored
43
dist/early.child.js
vendored
@ -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
9
dist/index.d.ts
vendored
@ -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
60
dist/index.js
vendored
@ -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==
|
@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"mode":"default",
|
|
||||||
"coverageTreshold":30
|
|
||||||
}
|
|
16
package.json
16
package.json
@ -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
1
test/test.d.ts
vendored
@ -1 +0,0 @@
|
|||||||
import "typings-test";
|
|
15
test/test.js
15
test/test.js
@ -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=
|
|
21
test/test.ts
21
test/test.ts
@ -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);
|
|
||||||
})
|
|
||||||
})
|
})
|
@ -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);
|
|
||||||
});
|
|
77
ts/index.ts
77
ts/index.ts
@ -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
3
tslint.json
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"extends": "tslint-config-standard"
|
||||||
|
}
|
Reference in New Issue
Block a user