Compare commits
52 Commits
Author | SHA1 | Date | |
---|---|---|---|
ce99e04b45 | |||
c0a1e0a14f | |||
83392d18f6 | |||
270cb2533e | |||
fad367ca0b | |||
836f8d18b0 | |||
ce269ae337 | |||
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 | |||
d2182a6d0f | |||
b7e48313e1 | |||
9f8e30526f | |||
8dd5c97f3b | |||
58b6a9a328 | |||
1c4020824d | |||
521e5740e5 | |||
ce76702d53 | |||
4590c8f64e | |||
ab7155f198 | |||
feba451f90 | |||
1ba1b0447b | |||
e4db3ba7ee | |||
da209ecc06 | |||
e010b01c42 | |||
225c46a788 | |||
7883f1cb7d | |||
394dd88a1d | |||
1d8fee1506 |
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
|
||||||
|
|
||||||
@ -33,3 +45,27 @@ release:
|
|||||||
- 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
|
||||||
|
tags:
|
||||||
|
- docker
|
||||||
|
only:
|
||||||
|
- tags
|
||||||
|
artifacts:
|
||||||
|
expire_in: 1 week
|
||||||
|
paths:
|
||||||
|
- public
|
||||||
|
@ -1,4 +0,0 @@
|
|||||||
docs/
|
|
||||||
coverage/
|
|
||||||
ts/typings/
|
|
||||||
.travis.yml
|
|
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
|
||||||
|
33
README.md
33
README.md
@ -1,16 +1,25 @@
|
|||||||
# early
|
# early
|
||||||
minimal and fast loading animation for modules that need a little starting time.
|
minimal and fast loading plugin for startup time measuring
|
||||||
|
|
||||||
## Usage
|
## Availabililty
|
||||||
|
[](https://www.npmjs.com/package/early)
|
||||||
|
[](https://GitLab.com/pushrocks/early)
|
||||||
|
[](https://github.com/pushrocks/early)
|
||||||
|
[](https://pushrocks.gitlab.io/early/)
|
||||||
|
|
||||||
```typescript
|
## Status for master
|
||||||
// Put the following at the start of your module
|
[](https://GitLab.com/pushrocks/early/commits/master)
|
||||||
import * as early from "early";
|
[](https://GitLab.com/pushrocks/early/commits/master)
|
||||||
early.start("myModuleName");
|
[](https://www.npmjs.com/package/early)
|
||||||
/*
|
[](https://david-dm.org/pushrocks/early)
|
||||||
do your loading stuff
|
[](https://www.bithound.io/github/pushrocks/early/master/dependencies/npm)
|
||||||
*/
|
[](https://www.bithound.io/github/pushrocks/early)
|
||||||
early.stop(); // stop "early" when your module is ready
|
[](https://nodejs.org/dist/latest-v6.x/docs/api/)
|
||||||
```
|
[](https://nodejs.org/dist/latest-v6.x/docs/api/)
|
||||||
|
[](http://standardjs.com/)
|
||||||
|
|
||||||
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";
|
|
47
dist/early.child.js
vendored
47
dist/early.child.js
vendored
@ -1,47 +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('SIGHUP', () => {
|
|
||||||
logEarlyAbort = true;
|
|
||||||
rl.write(null, { ctrl: true, name: 'u' });
|
|
||||||
rl.write(`loaded ${chalk.green(moduleName)}`);
|
|
||||||
rl.close();
|
|
||||||
rl.on("close", () => {
|
|
||||||
process.exit(0);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWFybHkuY2hpbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9lYXJseS5jaGlsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsUUFBTyxnQkFBZ0IsQ0FBQyxDQUFBO0FBQ3hCLE1BQU8sS0FBSyxXQUFXLE9BQU8sQ0FBQyxDQUFDO0FBQ2hDLE1BQU8sUUFBUSxXQUFXLFVBQVUsQ0FBQyxDQUFDO0FBQ3RDLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUM7SUFDOUIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO0lBQ3BCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtDQUN6QixDQUFDLENBQUM7QUFFSCxJQUFJLFVBQWtCLENBQUM7QUFDdkIsSUFBSSxZQUFvQixDQUFDO0FBQ3pCLElBQUksWUFBWSxHQUFXLENBQUMsQ0FBQztBQUU3QixJQUFJLFNBQVMsR0FBRztJQUNaLElBQUksWUFBWSxHQUFXLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDLGNBQWMsVUFBVSxFQUFFLENBQUM7SUFDekksRUFBRSxDQUFDLENBQUMsWUFBWSxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDL0IsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDSixZQUFZLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBQ0QsTUFBTSxDQUFDLFlBQVksQ0FBQztBQUN4QixDQUFDLENBQUM7QUFFRixJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUM7QUFDMUIsSUFBSSxRQUFRLEdBQUc7SUFDWCxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDakIsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUN0QixVQUFVLENBQUM7WUFDUCxRQUFRLEVBQUUsQ0FBQztRQUNmLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNYLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixJQUFJLEtBQUssR0FBRyxVQUFVLGFBQWEsR0FBVyxFQUFFLEVBQUUsZUFBZSxHQUFXLElBQUk7SUFDNUUsVUFBVSxHQUFHLGFBQWEsQ0FBQztJQUMzQixZQUFZLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3pDLFFBQVEsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBRUYsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7QUFFOUQsT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDakIsYUFBYSxHQUFHLElBQUksQ0FBQztJQUNyQixFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDMUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNYLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDO1FBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQyxDQUFDIn0=
|
|
22
dist/early.hrtMeasurement.d.ts
vendored
Normal file
22
dist/early.hrtMeasurement.d.ts
vendored
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
/**
|
||||||
|
* easy high resolution time measurement
|
||||||
|
*/
|
||||||
|
export declare class HrtMeasurement {
|
||||||
|
nanoSeconds: number;
|
||||||
|
milliSeconds: number;
|
||||||
|
private _hrTimeStart;
|
||||||
|
private _hrTimeStopDiff;
|
||||||
|
private _started;
|
||||||
|
/**
|
||||||
|
* start the measurement
|
||||||
|
*/
|
||||||
|
start(): void;
|
||||||
|
/**
|
||||||
|
* stop the measurement
|
||||||
|
*/
|
||||||
|
stop(): this;
|
||||||
|
/**
|
||||||
|
* reset the measurement
|
||||||
|
*/
|
||||||
|
reset(): void;
|
||||||
|
}
|
47
dist/early.hrtMeasurement.js
vendored
Normal file
47
dist/early.hrtMeasurement.js
vendored
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const process = require("process");
|
||||||
|
/**
|
||||||
|
* easy high resolution time measurement
|
||||||
|
*/
|
||||||
|
class HrtMeasurement {
|
||||||
|
constructor() {
|
||||||
|
this.nanoSeconds = null;
|
||||||
|
this.milliSeconds = null;
|
||||||
|
this._hrTimeStart = null;
|
||||||
|
this._hrTimeStopDiff = null;
|
||||||
|
this._started = false;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* start the measurement
|
||||||
|
*/
|
||||||
|
start() {
|
||||||
|
this._started = true;
|
||||||
|
this._hrTimeStart = process.hrtime();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* stop the measurement
|
||||||
|
*/
|
||||||
|
stop() {
|
||||||
|
if (this._started === false) {
|
||||||
|
console.log('Hasn\'t started yet');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._hrTimeStopDiff = process.hrtime(this._hrTimeStart);
|
||||||
|
this.nanoSeconds = (this._hrTimeStopDiff[0] * 1e9) + this._hrTimeStopDiff[1];
|
||||||
|
this.milliSeconds = this.nanoSeconds / 1000000;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* reset the measurement
|
||||||
|
*/
|
||||||
|
reset() {
|
||||||
|
this.nanoSeconds = null;
|
||||||
|
this.milliSeconds = null;
|
||||||
|
this._hrTimeStart = null;
|
||||||
|
this._hrTimeStopDiff = null;
|
||||||
|
this._started = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.HrtMeasurement = HrtMeasurement;
|
||||||
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWFybHkuaHJ0TWVhc3VyZW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9lYXJseS5ocnRNZWFzdXJlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLG1DQUFrQztBQUVsQzs7R0FFRztBQUNIO0lBQUE7UUFDRSxnQkFBVyxHQUFXLElBQUksQ0FBQTtRQUMxQixpQkFBWSxHQUFXLElBQUksQ0FBQTtRQUNuQixpQkFBWSxHQUFHLElBQUksQ0FBQTtRQUNuQixvQkFBZSxHQUFHLElBQUksQ0FBQTtRQUN0QixhQUFRLEdBQVksS0FBSyxDQUFBO0lBa0NuQyxDQUFDO0lBaENDOztPQUVHO0lBQ0gsS0FBSztRQUNILElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFBO1FBQ3BCLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFBO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUk7UUFDRixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO1lBQ2xDLE1BQU0sQ0FBQTtRQUNSLENBQUM7UUFDRCxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ3hELElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDNUUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQTtRQUM5QyxNQUFNLENBQUMsSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNILElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFBO1FBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFBO1FBQ3hCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFBO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFBO0lBQ3ZCLENBQUM7Q0FDRjtBQXZDRCx3Q0F1Q0MifQ==
|
9
dist/index.d.ts
vendored
9
dist/index.d.ts
vendored
@ -1,3 +1,8 @@
|
|||||||
import "typings-global";
|
import 'typings-global';
|
||||||
|
import { HrtMeasurement } from './early.hrtMeasurement';
|
||||||
|
export { HrtMeasurement };
|
||||||
|
/**
|
||||||
|
* 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: () => any;
|
export declare let stop: () => Promise<number>;
|
||||||
|
72
dist/index.js
vendored
72
dist/index.js
vendored
@ -1,59 +1,33 @@
|
|||||||
"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");
|
||||||
let q = require("q");
|
const early_hrtMeasurement_1 = require("./early.hrtMeasurement");
|
||||||
const childProcess = require("child_process");
|
exports.HrtMeasurement = early_hrtMeasurement_1.HrtMeasurement;
|
||||||
let earlyChild;
|
|
||||||
let doAnimation = true;
|
|
||||||
let doText = false;
|
let doText = false;
|
||||||
let moduleName = "undefined module name";
|
let moduleName = 'undefined module name';
|
||||||
let startTime;
|
let startHrt;
|
||||||
if (process.argv.indexOf("-v") != -1 || process.env.CI) {
|
if (process.argv.indexOf('-v') === -1) {
|
||||||
doAnimation = false;
|
|
||||||
}
|
|
||||||
else if (process.argv.indexOf("-v") == -1) {
|
|
||||||
doText = true;
|
doText = true;
|
||||||
}
|
}
|
||||||
// exports
|
/**
|
||||||
exports.start = function (moduleNameArg = "", loaderLengthArg = "10") {
|
* start the loading
|
||||||
startTime = process.hrtime();
|
*/
|
||||||
|
exports.start = function (moduleNameArg = '', loaderLengthArg = '10') {
|
||||||
moduleName = moduleNameArg;
|
moduleName = moduleNameArg;
|
||||||
if (doAnimation) {
|
startHrt = new early_hrtMeasurement_1.HrtMeasurement();
|
||||||
earlyChild = childProcess.fork(path.join(__dirname, "early.child.js"), [], {
|
startHrt.start();
|
||||||
env: {
|
if (doText) {
|
||||||
moduleNameArg: moduleNameArg,
|
console.log(`**** starting ${beautycolor.coloredString(moduleNameArg, 'green')} ****`);
|
||||||
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 = process.hrtime(startTime);
|
let earlyExecutionTime = startHrt.stop().milliSeconds;
|
||||||
let executionTime = function () {
|
let earlyExecutionTimeString = (earlyExecutionTime / 1000).toString();
|
||||||
try {
|
console.log(`OK! -> finished loading within ${beautycolor.coloredString(earlyExecutionTimeString, 'blue')}`);
|
||||||
return (endTime[0] * 1e9 + endTime[1]);
|
done.resolve(earlyExecutionTime);
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
}() / 1000000000;
|
|
||||||
if (doAnimation) {
|
|
||||||
earlyChild.kill("SIGHUP");
|
|
||||||
earlyChild.on("close", function () {
|
|
||||||
console.log(` 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsUUFBTyxnQkFDUCxDQUFDLENBRHNCO0FBQ3ZCLE1BQU8sSUFBSSxXQUFXLE1BQU0sQ0FBQyxDQUFDO0FBQzlCLE1BQU8sS0FBSyxXQUFXLE9BQU8sQ0FBQyxDQUFDO0FBQ2hDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUVyQixNQUFPLFlBQVksV0FBVyxlQUFlLENBQUMsQ0FBQztBQUMvQyxJQUFJLFVBQVUsQ0FBQztBQUVmLElBQUksV0FBVyxHQUFZLElBQUksQ0FBQztBQUNoQyxJQUFJLE1BQU0sR0FBWSxLQUFLLENBQUM7QUFDNUIsSUFBSSxVQUFVLEdBQVUsdUJBQXVCLENBQUM7QUFDaEQsSUFBSSxTQUFTLENBQUM7QUFFZCxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckQsV0FBVyxHQUFHLEtBQUssQ0FBQztBQUN4QixDQUFDO0FBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ2xCLENBQUM7QUFFRCxVQUFVO0FBQ0MsYUFBSyxHQUFHLFVBQVUsYUFBYSxHQUFXLEVBQUUsRUFBRSxlQUFlLEdBQVcsSUFBSTtJQUVuRixTQUFTLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBRTdCLFVBQVUsR0FBRyxhQUFhLENBQUM7SUFDM0IsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNkLFVBQVUsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQ3ZFLEdBQUcsRUFBRTtnQkFDRCxhQUFhLEVBQUUsYUFBYTtnQkFDNUIsZUFBZSxFQUFFLGVBQWU7Z0JBQ2hDLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7YUFDckI7U0FDSixDQUFDLENBQUM7SUFDUCxDQUFDO0lBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEUsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVTLFlBQUksR0FBRztJQUNkLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNyQixJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hDLElBQUksYUFBYSxHQUFHO1FBQ2hCLElBQUksQ0FBQztZQUNELE1BQU0sQ0FBQSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsQ0FDQTtRQUFBLEtBQUssQ0FBQSxDQUFDLEdBQUcsQ0FBQyxDQUFBLENBQUM7WUFDUCxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ3JCLENBQUM7SUFDTCxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUM7SUFDakIsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNkLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUIsVUFBVSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUU7WUFDbkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLGFBQWEsV0FBVyxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUFDLElBQUksQ0FBQyxDQUFDO1FBQ0osT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQ0FBc0MsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3hCLENBQUMsQ0FBQyJ9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBCQUF1QjtBQUN2QiwyQ0FBMEM7QUFDMUMsaUNBQWdDO0FBQ2hDLGlFQUF1RDtBQUdyRCx5QkFITyxxQ0FBYyxDQUdQO0FBR2hCLElBQUksTUFBTSxHQUFZLEtBQUssQ0FBQTtBQUMzQixJQUFJLFVBQVUsR0FBVyx1QkFBdUIsQ0FBQTtBQUNoRCxJQUFJLFFBQXdCLENBQUE7QUFFNUIsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sR0FBRyxJQUFJLENBQUE7QUFDZixDQUFDO0FBRUQ7O0dBRUc7QUFDUSxRQUFBLEtBQUssR0FBRyxVQUFVLGdCQUF3QixFQUFFLEVBQUUsa0JBQTBCLElBQUk7SUFDckYsVUFBVSxHQUFHLGFBQWEsQ0FBQTtJQUMxQixRQUFRLEdBQUcsSUFBSSxxQ0FBYyxFQUFFLENBQUE7SUFDL0IsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFBO0lBQ2hCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixXQUFXLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDeEYsQ0FBQztBQUNILENBQUMsQ0FBQTtBQUVVLFFBQUEsSUFBSSxHQUFHO0lBQ2hCLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQVUsQ0FBQTtJQUNqQyxJQUFJLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxZQUFZLENBQUE7SUFDckQsSUFBSSx3QkFBd0IsR0FBVyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQzdFLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLFdBQVcsQ0FBQyxhQUFhLENBQUMsd0JBQXdCLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQzVHLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtJQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQTtBQUNyQixDQUFDLENBQUEifQ==
|
40
docs/index.md
Normal file
40
docs/index.md
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
# early
|
||||||
|
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
|
||||||
|
Use TypeScript for best in class instellisense.
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// Put the following at the start of your module
|
||||||
|
import * as early from "early";
|
||||||
|
early.start("myModuleName");
|
||||||
|
/*
|
||||||
|
do your loading stuff
|
||||||
|
*/
|
||||||
|
early.stop().then((loadingTime:number) => { // loadingTime in milliseconds
|
||||||
|
|
||||||
|
}); // stop "early" when your module is ready
|
||||||
|
```
|
||||||
|
|
||||||
|
For further information read the linked docs at the top of this README.
|
||||||
|
|
||||||
|
> MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh)
|
||||||
|
|
||||||
|
[](https://push.rocks)
|
10
npmextra.json
Normal file
10
npmextra.json
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"npmts":{
|
||||||
|
"coverageTreshold":50
|
||||||
|
},
|
||||||
|
"npmci": {
|
||||||
|
"globalNpmTools": [
|
||||||
|
"npmts"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"mode":"default",
|
|
||||||
"coverageTreshold":30
|
|
||||||
}
|
|
15
package.json
15
package.json
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "early",
|
"name": "early",
|
||||||
"version": "2.0.16",
|
"version": "2.1.1",
|
||||||
"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,13 +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.8"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/chalk": "^0.4.28",
|
"beautycolor": "^1.0.7",
|
||||||
"chalk": "^1.1.3",
|
"smartq": "^1.1.1",
|
||||||
"q": "^1.4.1",
|
"typings-global": "^1.0.16"
|
||||||
"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=
|
|
31
test/test.ts
31
test/test.ts
@ -1,14 +1,23 @@
|
|||||||
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);
|
|
||||||
});
|
|
||||||
it(".stop()",function(done){
|
|
||||||
early.stop()
|
|
||||||
.then(done);
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
tap.test('.stop()', async () => {
|
||||||
|
await early.stop()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
tap.test('hrTime Measurement', async () => {
|
||||||
|
let earlyHr = new early.HrtMeasurement()
|
||||||
|
earlyHr.start()
|
||||||
|
await smartdelay.delayFor(1000)
|
||||||
|
let measuredTime = earlyHr.stop()
|
||||||
|
console.log(measuredTime)
|
||||||
|
return expect(measuredTime.milliSeconds).to.be.greaterThan(999)
|
||||||
|
})
|
||||||
|
|
||||||
|
tap.start()
|
||||||
|
@ -1,50 +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('SIGHUP', () => {
|
|
||||||
logEarlyAbort = true;
|
|
||||||
rl.write(null, { ctrl: true, name: 'u' });
|
|
||||||
rl.write(`loaded ${chalk.green(moduleName)}`);
|
|
||||||
rl.close();
|
|
||||||
rl.on("close",() => {
|
|
||||||
process.exit(0);
|
|
||||||
})
|
|
||||||
});
|
|
45
ts/early.hrtMeasurement.ts
Normal file
45
ts/early.hrtMeasurement.ts
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
import * as process from 'process'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* easy high resolution time measurement
|
||||||
|
*/
|
||||||
|
export class HrtMeasurement {
|
||||||
|
nanoSeconds: number = null
|
||||||
|
milliSeconds: number = null
|
||||||
|
private _hrTimeStart = null
|
||||||
|
private _hrTimeStopDiff = null
|
||||||
|
private _started: boolean = false
|
||||||
|
|
||||||
|
/**
|
||||||
|
* start the measurement
|
||||||
|
*/
|
||||||
|
start () {
|
||||||
|
this._started = true
|
||||||
|
this._hrTimeStart = process.hrtime()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* stop the measurement
|
||||||
|
*/
|
||||||
|
stop () {
|
||||||
|
if (this._started === false) {
|
||||||
|
console.log('Hasn\'t started yet')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this._hrTimeStopDiff = process.hrtime(this._hrTimeStart)
|
||||||
|
this.nanoSeconds = (this._hrTimeStopDiff[0] * 1e9) + this._hrTimeStopDiff[1]
|
||||||
|
this.milliSeconds = this.nanoSeconds / 1000000
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* reset the measurement
|
||||||
|
*/
|
||||||
|
reset () {
|
||||||
|
this.nanoSeconds = null
|
||||||
|
this.milliSeconds = null
|
||||||
|
this._hrTimeStart = null
|
||||||
|
this._hrTimeStopDiff = null
|
||||||
|
this._started = false
|
||||||
|
}
|
||||||
|
}
|
81
ts/index.ts
81
ts/index.ts
@ -1,62 +1,37 @@
|
|||||||
import "typings-global"
|
import 'typings-global'
|
||||||
import path = require("path");
|
import * as beautycolor from 'beautycolor'
|
||||||
import chalk = require("chalk");
|
import * as smartq from 'smartq'
|
||||||
let q = require("q");
|
import { HrtMeasurement } from './early.hrtMeasurement'
|
||||||
import readline = require("readline");
|
|
||||||
import childProcess = require("child_process");
|
|
||||||
let earlyChild;
|
|
||||||
|
|
||||||
let doAnimation: boolean = true;
|
export {
|
||||||
let doText: boolean = false;
|
HrtMeasurement
|
||||||
let moduleName:string = "undefined module name";
|
|
||||||
let startTime;
|
|
||||||
|
|
||||||
if (process.argv.indexOf("-v") != -1 || process.env.CI) {
|
|
||||||
doAnimation = false;
|
|
||||||
} else if (process.argv.indexOf("-v") == -1) {
|
|
||||||
doText = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// exports
|
let doText: boolean = false
|
||||||
export let start = function (moduleNameArg: string = "", loaderLengthArg: string = "10") {
|
let moduleName: string = 'undefined module name'
|
||||||
|
let startHrt: HrtMeasurement
|
||||||
|
|
||||||
startTime = process.hrtime();
|
if (process.argv.indexOf('-v') === -1) {
|
||||||
|
doText = true
|
||||||
|
}
|
||||||
|
|
||||||
moduleName = moduleNameArg;
|
/**
|
||||||
if (doAnimation) {
|
* start the loading
|
||||||
earlyChild = childProcess.fork(path.join(__dirname, "early.child.js"), [], {
|
*/
|
||||||
env: {
|
export let start = function (moduleNameArg: string = '', loaderLengthArg: string = '10') {
|
||||||
moduleNameArg: moduleNameArg,
|
moduleName = moduleNameArg
|
||||||
loaderLengthArg: loaderLengthArg,
|
startHrt = new HrtMeasurement()
|
||||||
CI: process.env.CI
|
startHrt.start()
|
||||||
|
if (doText) {
|
||||||
|
console.log(`**** starting ${beautycolor.coloredString(moduleNameArg, 'green')} ****`)
|
||||||
}
|
}
|
||||||
});
|
|
||||||
} else if (doText) {
|
|
||||||
console.log(`**** starting ${chalk.green(moduleNameArg)} ****`);
|
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
export let stop = function () {
|
export let stop = (): Promise<number> => {
|
||||||
let done = q.defer();
|
let done = smartq.defer<number>()
|
||||||
let endTime = process.hrtime(startTime);
|
let earlyExecutionTime = startHrt.stop().milliSeconds
|
||||||
let executionTime = function(){
|
let earlyExecutionTimeString: string = (earlyExecutionTime / 1000).toString()
|
||||||
try {
|
console.log(`OK! -> finished loading within ${beautycolor.coloredString(earlyExecutionTimeString, 'blue')}`)
|
||||||
return(endTime[0] * 1e9 + endTime[1]);
|
done.resolve(earlyExecutionTime)
|
||||||
|
return done.promise
|
||||||
}
|
}
|
||||||
catch(err){
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
}() / 1000000000;
|
|
||||||
if (doAnimation) {
|
|
||||||
earlyChild.kill("SIGHUP");
|
|
||||||
earlyChild.on("close", function () {
|
|
||||||
console.log(` in ${executionTime} seconds!`);
|
|
||||||
done.resolve();
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
console.log(`... finished loading moduleName in ${executionTime}`);
|
|
||||||
done.resolve();
|
|
||||||
}
|
|
||||||
return done.promise;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
3
tslint.json
Normal file
3
tslint.json
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"extends": "tslint-config-standard"
|
||||||
|
}
|
248
yarn.lock
Normal file
248
yarn.lock
Normal file
@ -0,0 +1,248 @@
|
|||||||
|
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||||
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
|
"@types/chai-as-promised@0.0.29":
|
||||||
|
version "0.0.29"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-0.0.29.tgz#43d52892aa998e185a3de3e2477edb8573be1d77"
|
||||||
|
dependencies:
|
||||||
|
"@types/chai" "*"
|
||||||
|
"@types/promises-a-plus" "*"
|
||||||
|
|
||||||
|
"@types/chai-string@^1.1.30":
|
||||||
|
version "1.1.30"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/chai-string/-/chai-string-1.1.30.tgz#4d8744b31a5a2295fc01c981ed1e2d4c8a070f0a"
|
||||||
|
dependencies:
|
||||||
|
"@types/chai" "*"
|
||||||
|
|
||||||
|
"@types/chai@*", "@types/chai@^3.4.35":
|
||||||
|
version "3.5.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/chai/-/chai-3.5.1.tgz#9bd77fe12503ae00648b0945b38eab666adffe2e"
|
||||||
|
|
||||||
|
"@types/promises-a-plus@*":
|
||||||
|
version "0.0.27"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/promises-a-plus/-/promises-a-plus-0.0.27.tgz#c64651134614c84b8f5d7114ce8901d36a609780"
|
||||||
|
|
||||||
|
ansi-256-colors@^1.1.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/ansi-256-colors/-/ansi-256-colors-1.1.0.tgz#910de50efcc7c09e3d82f2f87abd6b700c18818a"
|
||||||
|
|
||||||
|
assertion-error@^1.0.1:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c"
|
||||||
|
|
||||||
|
balanced-match@^0.4.1:
|
||||||
|
version "0.4.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
|
||||||
|
|
||||||
|
beautycolor@^1.0.7:
|
||||||
|
version "1.0.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/beautycolor/-/beautycolor-1.0.7.tgz#a4715738ac4c8221371e9cbeb5a6cc6d11ecbf7c"
|
||||||
|
dependencies:
|
||||||
|
ansi-256-colors "^1.1.0"
|
||||||
|
typings-global "^1.0.14"
|
||||||
|
|
||||||
|
bindings@^1.2.1:
|
||||||
|
version "1.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.2.1.tgz#14ad6113812d2d37d72e67b4cacb4bb726505f11"
|
||||||
|
|
||||||
|
brace-expansion@^1.0.0:
|
||||||
|
version "1.1.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59"
|
||||||
|
dependencies:
|
||||||
|
balanced-match "^0.4.1"
|
||||||
|
concat-map "0.0.1"
|
||||||
|
|
||||||
|
chai-as-promised@^6.0.0:
|
||||||
|
version "6.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-6.0.0.tgz#1a02a433a6f24dafac63b9c96fa1684db1aa8da6"
|
||||||
|
dependencies:
|
||||||
|
check-error "^1.0.2"
|
||||||
|
|
||||||
|
chai-string@^1.3.0:
|
||||||
|
version "1.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/chai-string/-/chai-string-1.3.0.tgz#df6139f294391b1035be5606f60a843b3a5041e7"
|
||||||
|
|
||||||
|
chai@^3.5.0:
|
||||||
|
version "3.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247"
|
||||||
|
dependencies:
|
||||||
|
assertion-error "^1.0.1"
|
||||||
|
deep-eql "^0.1.3"
|
||||||
|
type-detect "^1.0.0"
|
||||||
|
|
||||||
|
check-error@^1.0.2:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82"
|
||||||
|
|
||||||
|
concat-map@0.0.1:
|
||||||
|
version "0.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||||
|
|
||||||
|
deep-eql@^0.1.3:
|
||||||
|
version "0.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2"
|
||||||
|
dependencies:
|
||||||
|
type-detect "0.1.1"
|
||||||
|
|
||||||
|
fs.realpath@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
|
||||||
|
|
||||||
|
glob@^7.0.0:
|
||||||
|
version "7.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
|
||||||
|
dependencies:
|
||||||
|
fs.realpath "^1.0.0"
|
||||||
|
inflight "^1.0.4"
|
||||||
|
inherits "2"
|
||||||
|
minimatch "^3.0.2"
|
||||||
|
once "^1.3.0"
|
||||||
|
path-is-absolute "^1.0.0"
|
||||||
|
|
||||||
|
inflight@^1.0.4:
|
||||||
|
version "1.0.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
|
||||||
|
dependencies:
|
||||||
|
once "^1.3.0"
|
||||||
|
wrappy "1"
|
||||||
|
|
||||||
|
inherits@2:
|
||||||
|
version "2.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
|
||||||
|
|
||||||
|
interpret@^1.0.0:
|
||||||
|
version "1.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90"
|
||||||
|
|
||||||
|
leakage@^0.2.0:
|
||||||
|
version "0.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/leakage/-/leakage-0.2.0.tgz#9e7a8cc1d241d8c8427e348769e192e172fd8733"
|
||||||
|
dependencies:
|
||||||
|
left-pad "^1.1.3"
|
||||||
|
memwatch-next "^0.3.0"
|
||||||
|
minimist "^1.2.0"
|
||||||
|
pretty-bytes "^4.0.2"
|
||||||
|
|
||||||
|
left-pad@^1.1.3:
|
||||||
|
version "1.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.1.3.tgz#612f61c033f3a9e08e939f1caebeea41b6f3199a"
|
||||||
|
|
||||||
|
memwatch-next@^0.3.0:
|
||||||
|
version "0.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/memwatch-next/-/memwatch-next-0.3.0.tgz#2111050f9a906e0aa2d72a4ec0f0089c78726f8f"
|
||||||
|
dependencies:
|
||||||
|
bindings "^1.2.1"
|
||||||
|
nan "^2.3.2"
|
||||||
|
|
||||||
|
minimatch@^3.0.2:
|
||||||
|
version "3.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
|
||||||
|
dependencies:
|
||||||
|
brace-expansion "^1.0.0"
|
||||||
|
|
||||||
|
minimist@^1.2.0:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
|
||||||
|
|
||||||
|
nan@^2.3.2:
|
||||||
|
version "2.6.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45"
|
||||||
|
|
||||||
|
once@^1.3.0:
|
||||||
|
version "1.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
|
||||||
|
dependencies:
|
||||||
|
wrappy "1"
|
||||||
|
|
||||||
|
path-is-absolute@^1.0.0:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
|
||||||
|
|
||||||
|
path-parse@^1.0.5:
|
||||||
|
version "1.0.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
|
||||||
|
|
||||||
|
pretty-bytes@^4.0.2:
|
||||||
|
version "4.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9"
|
||||||
|
|
||||||
|
rechoir@^0.6.2:
|
||||||
|
version "0.6.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
|
||||||
|
dependencies:
|
||||||
|
resolve "^1.1.6"
|
||||||
|
|
||||||
|
resolve@^1.1.6:
|
||||||
|
version "1.3.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5"
|
||||||
|
dependencies:
|
||||||
|
path-parse "^1.0.5"
|
||||||
|
|
||||||
|
semver@^5.3.0:
|
||||||
|
version "5.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
|
||||||
|
|
||||||
|
shelljs@^0.7.7:
|
||||||
|
version "0.7.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1"
|
||||||
|
dependencies:
|
||||||
|
glob "^7.0.0"
|
||||||
|
interpret "^1.0.0"
|
||||||
|
rechoir "^0.6.2"
|
||||||
|
|
||||||
|
smartchai@^1.0.3:
|
||||||
|
version "1.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/smartchai/-/smartchai-1.0.3.tgz#de6d010bb8b5aef24cb70b31a5f5334e8c41b72f"
|
||||||
|
dependencies:
|
||||||
|
"@types/chai" "^3.4.35"
|
||||||
|
"@types/chai-as-promised" "0.0.29"
|
||||||
|
"@types/chai-string" "^1.1.30"
|
||||||
|
chai "^3.5.0"
|
||||||
|
chai-as-promised "^6.0.0"
|
||||||
|
chai-string "^1.3.0"
|
||||||
|
|
||||||
|
smartdelay@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/smartdelay/-/smartdelay-1.0.1.tgz#687f8bcc09d7c62c9c5a8a1771c1aba3aff54156"
|
||||||
|
dependencies:
|
||||||
|
typings-global "^1.0.14"
|
||||||
|
|
||||||
|
smartq@^1.1.1:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/smartq/-/smartq-1.1.1.tgz#efb358705260d41ae18aef7ffd815f7b6fe17dd3"
|
||||||
|
dependencies:
|
||||||
|
typed-promisify "^0.3.0"
|
||||||
|
typings-global "^1.0.14"
|
||||||
|
|
||||||
|
tapbundle@^1.0.8:
|
||||||
|
version "1.0.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/tapbundle/-/tapbundle-1.0.8.tgz#a0e9846d4e91374a54d42224cfa1062319d460b9"
|
||||||
|
dependencies:
|
||||||
|
leakage "^0.2.0"
|
||||||
|
smartchai "^1.0.3"
|
||||||
|
smartq "^1.1.1"
|
||||||
|
typings-global "^1.0.16"
|
||||||
|
|
||||||
|
type-detect@0.1.1:
|
||||||
|
version "0.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822"
|
||||||
|
|
||||||
|
type-detect@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2"
|
||||||
|
|
||||||
|
typed-promisify@^0.3.0:
|
||||||
|
version "0.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/typed-promisify/-/typed-promisify-0.3.0.tgz#1ba0af5e444c87d8047406f18ce49092a1191853"
|
||||||
|
|
||||||
|
typings-global@^1.0.14, typings-global@^1.0.16:
|
||||||
|
version "1.0.16"
|
||||||
|
resolved "https://registry.yarnpkg.com/typings-global/-/typings-global-1.0.16.tgz#489b71781af24268750c2899316400a5e482961f"
|
||||||
|
dependencies:
|
||||||
|
semver "^5.3.0"
|
||||||
|
shelljs "^0.7.7"
|
||||||
|
|
||||||
|
wrappy@1:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
Reference in New Issue
Block a user