Compare commits

..

80 Commits

Author SHA1 Message Date
f251a7d0fa 4.0.3 2022-06-02 00:31:40 +02:00
cfdf0267e9 fix(core): update 2022-06-02 00:31:39 +02:00
0c5a88a08f 4.0.2 2022-03-22 00:14:49 +01:00
261f86d664 fix(core): update 2022-03-22 00:14:49 +01:00
b0116a7967 4.0.1 2022-03-21 18:21:07 +01:00
6dfdfd41b9 fix(core): update 2022-03-21 18:21:07 +01:00
2e9bc0db42 4.0.0 2022-03-21 08:30:50 +01:00
af837f5303 3.0.7 2022-03-21 08:30:09 +01:00
9145cc890c fix(core): update 2022-03-21 08:30:09 +01:00
e3fa407c1c 3.0.6 2020-08-10 21:18:50 +00:00
865e58b190 fix(core): update 2020-08-10 21:18:50 +00:00
66d00d938c 3.0.5 2020-05-14 12:57:07 +00:00
5c3e165625 fix(core): update 2020-05-14 12:57:06 +00:00
82e282a19f 3.0.4 2020-05-14 12:56:59 +00:00
16ca87923d fix(core): update 2020-05-14 12:56:58 +00:00
62676cf816 3.0.3 2018-08-08 22:35:02 +02:00
c88bb03e6c 3.0.2 2018-07-18 08:33:24 +02:00
98f9c51613 fix(dependencies): update 2018-07-18 08:33:23 +02:00
a0b237ca8c 3.0.1 2018-07-17 23:23:08 +02:00
4a7139b6f8 fix(core): update 2018-07-17 23:23:07 +02:00
48f9249313 3.0.0 2018-07-17 23:12:12 +02:00
278eda4869 BREAKING CHANGE(package): update scope and build standards 2018-07-17 23:12:12 +02:00
ce99e04b45 2.1.1 2017-04-23 20:59:33 +02:00
c0a1e0a14f update ci and docs 2017-04-23 20:59:28 +02:00
83392d18f6 2.1.0 2017-04-23 20:57:13 +02:00
270cb2533e now has better hrtMeasurement 2017-04-23 20:57:01 +02:00
fad367ca0b now has hrtime Measurement 2017-04-23 18:46:13 +02:00
836f8d18b0 2.0.38 2017-03-26 22:04:39 +02:00
ce269ae337 update npmextra.json 2017-03-26 22:04:32 +02:00
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
d2182a6d0f 2.0.26 2016-08-21 17:29:46 +02:00
b7e48313e1 improve typings 2016-08-21 17:29:38 +02:00
9f8e30526f 2.0.25 2016-08-20 09:09:07 +02:00
8dd5c97f3b finally fixed Segmentation error caused by readline in child process 2016-08-20 09:09:03 +02:00
58b6a9a328 2.0.24 2016-08-20 08:42:42 +02:00
1c4020824d switch from process.hrtime() to Date.now() 2016-08-20 08:42:39 +02:00
521e5740e5 2.0.23 2016-08-20 08:29:25 +02:00
ce76702d53 make it even more foolproof 2016-08-20 08:29:18 +02:00
4590c8f64e 2.0.22 2016-08-20 08:06:47 +02:00
ab7155f198 fix 2016-08-20 08:06:41 +02:00
feba451f90 2.0.21 2016-08-20 07:51:41 +02:00
1ba1b0447b fixed CI console output 2016-08-20 07:51:04 +02:00
e4db3ba7ee 2.0.20 2016-08-20 07:46:42 +02:00
da209ecc06 2.0.19 2016-08-20 07:42:04 +02:00
e010b01c42 fixed error 2016-08-20 07:41:56 +02:00
225c46a788 2.0.18 2016-08-20 07:32:48 +02:00
7883f1cb7d add npmextra.json 2016-08-20 07:32:44 +02:00
394dd88a1d 2.0.17 2016-08-20 07:29:30 +02:00
1d8fee1506 fixed small error 2016-08-20 07:29:27 +02:00
88d5409c40 2.0.16 2016-08-20 07:15:55 +02:00
b8c9508d21 try catch for execution time 2016-08-20 07:15:52 +02:00
59f97c3254 2.0.15 2016-08-20 07:12:24 +02:00
0491493b2e fixed typo 2016-08-20 07:12:19 +02:00
aca45165f8 2.0.14 2016-08-20 07:04:03 +02:00
569c597f8b improved early and added loading time 2016-08-20 07:03:49 +02:00
25 changed files with 10580 additions and 292 deletions

22
.gitignore vendored
View File

@ -1,4 +1,20 @@
node_modules/
docs/
.nogit/
# artifacts
coverage/
ts/typings/
public/
pages/
# installs
node_modules/
# caches
.yarn/
.cache/
.rpt2_cache
# builds
dist/
dist_*/
# custom

View File

@ -1,35 +1,140 @@
image: hosttoday/ht-docker-node:npmts
# gitzone ci_default
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
cache:
paths:
- .npmci_cache/
key: '$CI_BUILD_STAGE'
stages:
- test
- release
- security
- test
- release
- metadata
testLEGACY:
before_script:
- npm install -g @shipzone/npmci
# ====================
# security stage
# ====================
mirror:
stage: security
script:
- npmci git mirror
only:
- tags
tags:
- lossless
- docker
- notpriv
auditProductionDependencies:
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
stage: security
script:
- npmci npm prepare
- npmci command npm install --production --ignore-scripts
- npmci command npm config set registry https://registry.npmjs.org
- npmci command npm audit --audit-level=high --only=prod --production
tags:
- docker
allow_failure: true
auditDevDependencies:
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
stage: security
script:
- npmci npm prepare
- npmci command npm install --ignore-scripts
- npmci command npm config set registry https://registry.npmjs.org
- npmci command npm audit --audit-level=high --only=dev
tags:
- docker
allow_failure: true
# ====================
# test stage
# ====================
testStable:
stage: test
script:
- npmci test legacy
- npmci npm prepare
- npmci node install stable
- npmci npm install
- npmci npm test
coverage: /\d+.?\d+?\%\s*coverage/
tags:
- docker
testLTS:
testBuild:
stage: test
script:
- npmci test lts
tags:
- docker
testSTABLE:
stage: test
script:
- npmci test stable
- npmci npm prepare
- npmci node install stable
- npmci npm install
- npmci command npm run build
coverage: /\d+.?\d+?\%\s*coverage/
tags:
- docker
release:
stage: release
script:
- npmci publish
- npmci node install stable
- npmci npm publish
only:
- tags
tags:
- lossless
- docker
- notpriv
# ====================
# metadata stage
# ====================
codequality:
stage: metadata
allow_failure: true
only:
- tags
script:
- npmci command npm install -g typescript
- npmci npm prepare
- npmci npm install
tags:
- lossless
- docker
- priv
trigger:
stage: metadata
script:
- npmci trigger
only:
- tags
tags:
- lossless
- docker
- notpriv
pages:
stage: metadata
script:
- npmci node install lts
- npmci command npm install -g @gitzone/tsdoc
- npmci npm prepare
- npmci npm install
- npmci command tsdoc
tags:
- lossless
- docker
- notpriv
only:
- tags
artifacts:
expire_in: 1 week
paths:
- public
allow_failure: true

View File

@ -1,4 +0,0 @@
docs/
coverage/
ts/typings/
.travis.yml

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

11
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,11 @@
{
"version": "0.2.0",
"configurations": [
{
"command": "npm test",
"name": "Run npm test",
"request": "launch",
"type": "node-terminal"
}
]
}

26
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,26 @@
{
"json.schemas": [
{
"fileMatch": ["/npmextra.json"],
"schema": {
"type": "object",
"properties": {
"npmci": {
"type": "object",
"description": "settings for npmci"
},
"gitzone": {
"type": "object",
"description": "settings for gitzone",
"properties": {
"projectType": {
"type": "string",
"enum": ["website", "element", "service", "npm", "wcc"]
}
}
}
}
}
}
]
}

View File

@ -1,6 +1,6 @@
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
of this software and associated documentation files (the "Software"), to deal

View File

@ -1,16 +0,0 @@
# early
minimal and fast loading animation for modules that need a little starting time.
## Usage
```typescript
// Put the following at the start of your module
import * as early from "early";
early.start("myModuleName");
/*
do your loading stuff
*/
early.stop(); // 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.

View File

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

52
dist/early.child.js vendored
View File

@ -1,52 +0,0 @@
"use strict";
require("typings-global");
var colors = require("colors");
var readline = require("readline");
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
var moduleName;
var loaderLength;
var frameCounter = 0;
var makeFrame = function () {
var resultString = "["
+ "/".green.repeat(frameCounter)
+ " ".repeat(loaderLength - frameCounter)
+ "]"
+ " starting "
+ moduleName.cyan;
if (frameCounter == loaderLength) {
frameCounter = 0;
}
else {
frameCounter++;
}
return resultString;
};
var logEarlyAbort = false;
var logEarly = function () {
rl.write(null, { ctrl: true, name: 'u' });
rl.write(makeFrame());
setTimeout(function () {
if (!logEarlyAbort)
logEarly();
}, 80);
};
var start = function (moduleNameArg, loaderLengthArg) {
if (moduleNameArg === void 0) { moduleNameArg = ""; }
if (loaderLengthArg === void 0) { loaderLengthArg = "10"; }
moduleName = moduleNameArg;
loaderLength = parseInt(loaderLengthArg);
logEarly();
};
start(process.env.moduleNameArg, process.env.loaderLengthArg);
process.on('SIGINT', function () {
logEarlyAbort = true;
rl.write(null, { ctrl: true, name: 'u' });
rl.close();
rl.on("close", function () {
});
});
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImVhcmx5LmNoaWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxRQUFPLGdCQUFnQixDQUFDLENBQUE7QUFDeEIsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9CLElBQU8sUUFBUSxXQUFXLFVBQVUsQ0FBQyxDQUFDO0FBQ3RDLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUM7SUFDOUIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO0lBQ3BCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtDQUN6QixDQUFDLENBQUM7QUFFSCxJQUFJLFVBQWlCLENBQUM7QUFDdEIsSUFBSSxZQUFtQixDQUFDO0FBQ3hCLElBQUksWUFBWSxHQUFVLENBQUMsQ0FBQztBQUU1QixJQUFJLFNBQVMsR0FBRztJQUNaLElBQUksWUFBWSxHQUFVLEdBQUc7VUFDdkIsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO1VBQzlCLEdBQUcsQ0FBQyxNQUFNLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztVQUN2QyxHQUFHO1VBQ0gsWUFBWTtVQUNaLFVBQVUsQ0FBQyxJQUFJLENBQUM7SUFFdEIsRUFBRSxDQUFBLENBQUMsWUFBWSxJQUFJLFlBQVksQ0FBQyxDQUFBLENBQUM7UUFDN0IsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDSixZQUFZLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBQ0QsTUFBTSxDQUFDLFlBQVksQ0FBQztBQUN4QixDQUFDLENBQUM7QUFFRixJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUM7QUFDMUIsSUFBSSxRQUFRLEdBQUc7SUFDWCxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBQyxDQUFDLENBQUM7SUFDeEMsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3RCLFVBQVUsQ0FBQztRQUNQLEVBQUUsQ0FBQSxDQUFDLENBQUMsYUFBYSxDQUFDO1lBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1YsQ0FBQyxDQUFDO0FBRUYsSUFBSSxLQUFLLEdBQUcsVUFBUyxhQUF5QixFQUFDLGVBQTZCO0lBQXZELDZCQUF5QixHQUF6QixrQkFBeUI7SUFBQywrQkFBNkIsR0FBN0Isc0JBQTZCO0lBQ3hFLFVBQVUsR0FBRyxhQUFhLENBQUM7SUFDM0IsWUFBWSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN6QyxRQUFRLEVBQUUsQ0FBQztBQUNmLENBQUMsQ0FBQztBQUVGLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRTdELE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2pCLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDckIsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFDO0lBQ3hDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNYLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDO0lBQ2QsQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDLENBQUMsQ0FBQyIsImZpbGUiOiJlYXJseS5jaGlsZC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcInR5cGluZ3MtZ2xvYmFsXCI7XG5sZXQgY29sb3JzID0gcmVxdWlyZShcImNvbG9yc1wiKTtcbmltcG9ydCByZWFkbGluZSA9IHJlcXVpcmUoXCJyZWFkbGluZVwiKTtcbmxldCBybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7XG4gICAgaW5wdXQ6IHByb2Nlc3Muc3RkaW4sXG4gICAgb3V0cHV0OiBwcm9jZXNzLnN0ZG91dFxufSk7XG5cbmxldCBtb2R1bGVOYW1lOnN0cmluZztcbmxldCBsb2FkZXJMZW5ndGg6bnVtYmVyO1xubGV0IGZyYW1lQ291bnRlcjpudW1iZXIgPSAwO1xuXG5sZXQgbWFrZUZyYW1lID0gKCk6c3RyaW5nID0+IHtcbiAgICBsZXQgcmVzdWx0U3RyaW5nOnN0cmluZyA9IFwiW1wiXG4gICAgICAgICsgXCIvXCIuZ3JlZW4ucmVwZWF0KGZyYW1lQ291bnRlcilcbiAgICAgICAgKyBcIiBcIi5yZXBlYXQobG9hZGVyTGVuZ3RoIC0gZnJhbWVDb3VudGVyKVxuICAgICAgICArIFwiXVwiXG4gICAgICAgICsgXCIgc3RhcnRpbmcgXCJcbiAgICAgICAgKyBtb2R1bGVOYW1lLmN5YW47XG5cbiAgICBpZihmcmFtZUNvdW50ZXIgPT0gbG9hZGVyTGVuZ3RoKXtcbiAgICAgICAgZnJhbWVDb3VudGVyID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmcmFtZUNvdW50ZXIrKztcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFN0cmluZztcbn07XG5cbmxldCBsb2dFYXJseUFib3J0ID0gZmFsc2U7XG5sZXQgbG9nRWFybHkgPSAoKSA9PiB7XG4gICAgcmwud3JpdGUobnVsbCwge2N0cmw6IHRydWUsIG5hbWU6ICd1J30pO1xuICAgIHJsLndyaXRlKG1ha2VGcmFtZSgpKTtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgIGlmKCFsb2dFYXJseUFib3J0KSBsb2dFYXJseSgpO1xuICAgIH0sODApO1xufTtcblxubGV0IHN0YXJ0ID0gZnVuY3Rpb24obW9kdWxlTmFtZUFyZzpzdHJpbmcgPSBcIlwiLGxvYWRlckxlbmd0aEFyZzpzdHJpbmcgPSBcIjEwXCIpe1xuICAgIG1vZHVsZU5hbWUgPSBtb2R1bGVOYW1lQXJnO1xuICAgIGxvYWRlckxlbmd0aCA9IHBhcnNlSW50KGxvYWRlckxlbmd0aEFyZyk7XG4gICAgbG9nRWFybHkoKTtcbn07XG5cbnN0YXJ0KHByb2Nlc3MuZW52Lm1vZHVsZU5hbWVBcmcscHJvY2Vzcy5lbnYubG9hZGVyTGVuZ3RoQXJnKTtcblxucHJvY2Vzcy5vbignU0lHSU5UJywgKCkgPT4ge1xuICAgIGxvZ0Vhcmx5QWJvcnQgPSB0cnVlO1xuICAgIHJsLndyaXRlKG51bGwsIHtjdHJsOiB0cnVlLCBuYW1lOiAndSd9KTtcbiAgICBybC5jbG9zZSgpO1xuICAgIHJsLm9uKFwiY2xvc2VcIixmdW5jdGlvbigpe1xuICAgIH0pXG59KTsiXX0=

3
dist/index.d.ts vendored
View File

@ -1,3 +0,0 @@
import "typings-global";
export declare let start: (moduleNameArg?: string, loaderLengthArg?: string) => void;
export declare let stop: () => any;

47
dist/index.js vendored
View File

@ -1,47 +0,0 @@
"use strict";
require("typings-global");
var path = require("path");
var q = require("q");
var childProcess = require("child_process");
var earlyChild;
var doAnimation = true;
var doText = false;
if (process.argv.indexOf("-v") != -1 || process.env.CI) {
doAnimation = false;
}
else if (process.argv.indexOf("-v") == -1) {
doText = true;
}
// exports
exports.start = function (moduleNameArg, loaderLengthArg) {
if (moduleNameArg === void 0) { moduleNameArg = ""; }
if (loaderLengthArg === void 0) { loaderLengthArg = "10"; }
if (doAnimation) {
earlyChild = childProcess.fork(path.join(__dirname, "early.child.js"), [], {
env: {
moduleNameArg: moduleNameArg,
loaderLengthArg: loaderLengthArg,
CI: process.env.CI
}
});
}
else if (doText) {
console.log("**** starting " + moduleNameArg.cyan + " ****");
}
};
exports.stop = function () {
var done = q.defer();
if (doAnimation) {
earlyChild.kill();
earlyChild.on("close", function () {
console.log("\n");
done.resolve();
});
}
else {
done.resolve();
}
return done.promise;
};
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxRQUFPLGdCQUNQLENBQUMsQ0FEc0I7QUFFdkIsSUFBTyxJQUFJLFdBQVcsTUFBTSxDQUFDLENBQUM7QUFDOUIsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRXJCLElBQU8sWUFBWSxXQUFXLGVBQWUsQ0FBQyxDQUFDO0FBQy9DLElBQUksVUFBVSxDQUFDO0FBRWYsSUFBSSxXQUFXLEdBQVcsSUFBSSxDQUFDO0FBQy9CLElBQUksTUFBTSxHQUFXLEtBQUssQ0FBQztBQUMzQixFQUFFLENBQUEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFBLENBQUM7SUFDbkQsV0FBVyxHQUFHLEtBQUssQ0FBQztBQUN4QixDQUFDO0FBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBQztJQUN4QyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ2xCLENBQUM7QUFFRCxVQUFVO0FBQ0MsYUFBSyxHQUFHLFVBQVMsYUFBeUIsRUFBQyxlQUE2QjtJQUF2RCw2QkFBeUIsR0FBekIsa0JBQXlCO0lBQUMsK0JBQTZCLEdBQTdCLHNCQUE2QjtJQUMvRSxFQUFFLENBQUEsQ0FBQyxXQUFXLENBQUMsQ0FBQSxDQUFDO1FBQ1osVUFBVSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUMsZ0JBQWdCLENBQUMsRUFBQyxFQUFFLEVBQUM7WUFDcEUsR0FBRyxFQUFFO2dCQUNELGFBQWEsRUFBQyxhQUFhO2dCQUMzQixlQUFlLEVBQUMsZUFBZTtnQkFDL0IsRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTthQUNyQjtTQUNKLENBQUMsQ0FBQztJQUNQLENBQUM7SUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNoQixPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixHQUFHLGFBQWEsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFDakUsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVTLFlBQUksR0FBRztJQUNkLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNyQixFQUFFLENBQUEsQ0FBQyxXQUFXLENBQUMsQ0FBQSxDQUFDO1FBQ1osVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xCLFVBQVUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDO1lBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUFDLElBQUksQ0FBQyxDQUFDO1FBQ0osSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUN4QixDQUFDLENBQUMiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCJ0eXBpbmdzLWdsb2JhbFwiXG5pbXBvcnQgY29sb3JzID0gcmVxdWlyZShcImNvbG9yc1wiKTtcbmltcG9ydCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XG5sZXQgcSA9IHJlcXVpcmUoXCJxXCIpO1xuaW1wb3J0IHJlYWRsaW5lID0gcmVxdWlyZShcInJlYWRsaW5lXCIpO1xuaW1wb3J0IGNoaWxkUHJvY2VzcyA9IHJlcXVpcmUoXCJjaGlsZF9wcm9jZXNzXCIpO1xubGV0IGVhcmx5Q2hpbGQ7XG5cbmxldCBkb0FuaW1hdGlvbjpib29sZWFuID0gdHJ1ZTtcbmxldCBkb1RleHQ6Ym9vbGVhbiA9IGZhbHNlO1xuaWYocHJvY2Vzcy5hcmd2LmluZGV4T2YoXCItdlwiKSAhPSAtMSB8fCBwcm9jZXNzLmVudi5DSSl7XG4gICAgZG9BbmltYXRpb24gPSBmYWxzZTtcbn0gZWxzZSBpZihwcm9jZXNzLmFyZ3YuaW5kZXhPZihcIi12XCIpID09IC0xKXtcbiAgICBkb1RleHQgPSB0cnVlO1xufVxuXG4vLyBleHBvcnRzXG5leHBvcnQgbGV0IHN0YXJ0ID0gZnVuY3Rpb24obW9kdWxlTmFtZUFyZzpzdHJpbmcgPSBcIlwiLGxvYWRlckxlbmd0aEFyZzpzdHJpbmcgPSBcIjEwXCIpe1xuICAgIGlmKGRvQW5pbWF0aW9uKXtcbiAgICAgICAgZWFybHlDaGlsZCA9IGNoaWxkUHJvY2Vzcy5mb3JrKHBhdGguam9pbihfX2Rpcm5hbWUsXCJlYXJseS5jaGlsZC5qc1wiKSxbXSx7XG4gICAgICAgICAgICBlbnY6IHtcbiAgICAgICAgICAgICAgICBtb2R1bGVOYW1lQXJnOm1vZHVsZU5hbWVBcmcsXG4gICAgICAgICAgICAgICAgbG9hZGVyTGVuZ3RoQXJnOmxvYWRlckxlbmd0aEFyZyxcbiAgICAgICAgICAgICAgICBDSTogcHJvY2Vzcy5lbnYuQ0lcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChkb1RleHQpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCIqKioqIHN0YXJ0aW5nIFwiICsgbW9kdWxlTmFtZUFyZy5jeWFuICsgXCIgKioqKlwiKTtcbiAgICB9XG59O1xuXG5leHBvcnQgbGV0IHN0b3AgPSBmdW5jdGlvbigpe1xuICAgIGxldCBkb25lID0gcS5kZWZlcigpO1xuICAgIGlmKGRvQW5pbWF0aW9uKXtcbiAgICAgICAgZWFybHlDaGlsZC5raWxsKCk7XG4gICAgICAgIGVhcmx5Q2hpbGQub24oXCJjbG9zZVwiLGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlxcblwiKTtcbiAgICAgICAgICAgIGRvbmUucmVzb2x2ZSgpO1xuICAgICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGRvbmUucmVzb2x2ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gZG9uZS5wcm9taXNlO1xufTtcblxuIl19

17
npmextra.json Normal file
View File

@ -0,0 +1,17 @@
{
"npmci": {
"npmGlobalTools": [],
"npmAccessLevel": "public"
},
"gitzone": {
"projectType": "npm",
"module": {
"githost": "gitlab.com",
"gitscope": "pushrocks",
"gitrepo": "early",
"description": "minimal and fast loading plugin for startup time measuring",
"npmPackagename": "@pushrocks/early",
"license": "MIT"
}
}
}

View File

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

10182
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,11 +1,14 @@
{
"name": "early",
"version": "2.0.13",
"description": "nice module loading animation for modules that need a little starting time.",
"main": "dist/index.js",
"typings": "dist/index.d.ts",
"name": "@pushrocks/early",
"version": "4.0.3",
"private": false,
"description": "minimal and fast loading plugin for startup time measuring",
"main": "dist_ts/index.js",
"typings": "dist_ts/index.d.ts",
"type": "module",
"scripts": {
"test": "(npmts)"
"test": "(tstest test/)",
"build": "(tsbuild --web)"
},
"repository": {
"type": "git",
@ -21,12 +24,29 @@
},
"homepage": "https://gitlab.com/pushrocks/early#readme",
"devDependencies": {
"npmts-g": "^5.2.6",
"typings-test": "^1.0.1"
"@gitzone/tsbuild": "^2.1.63",
"@gitzone/tsrun": "^1.2.35",
"@gitzone/tstest": "^1.0.71",
"@pushrocks/smartdelay": "^2.0.13",
"@pushrocks/tapbundle": "^5.0.3"
},
"dependencies": {
"colors": "^1.1.2",
"q": "^1.4.1",
"typings-global": "^1.0.3"
}
"@pushrocks/consolecolor": "^2.0.1",
"@pushrocks/smartpromise": "^3.1.7"
},
"files": [
"ts/**/*",
"ts_web/**/*",
"dist/**/*",
"dist_*/**/*",
"dist_ts/**/*",
"dist_ts_web/**/*",
"assets/**/*",
"cli.js",
"npmextra.json",
"readme.md"
],
"browserslist": [
"last 1 chrome versions"
]
}

51
readme.md Normal file
View File

@ -0,0 +1,51 @@
# @pushrocks/early
minimal and fast loading plugin for startup time measuring
## Availabililty and Links
* [npmjs.org (npm package)](https://www.npmjs.com/package/@pushrocks/early)
* [gitlab.com (source)](https://gitlab.com/pushrocks/early)
* [github.com (source mirror)](https://github.com/pushrocks/early)
* [docs (typedoc)](https://pushrocks.gitlab.io/early/)
## Status for master
Status Category | Status Badge
-- | --
GitLab Pipelines | [![pipeline status](https://gitlab.com/pushrocks/early/badges/master/pipeline.svg)](https://lossless.cloud)
GitLab Pipline Test Coverage | [![coverage report](https://gitlab.com/pushrocks/early/badges/master/coverage.svg)](https://lossless.cloud)
npm | [![npm downloads per month](https://badgen.net/npm/dy/@pushrocks/early)](https://lossless.cloud)
Snyk | [![Known Vulnerabilities](https://badgen.net/snyk/pushrocks/early)](https://lossless.cloud)
TypeScript Support | [![TypeScript](https://badgen.net/badge/TypeScript/>=%203.x/blue?icon=typescript)](https://lossless.cloud)
node Support | [![node](https://img.shields.io/badge/node->=%2010.x.x-blue.svg)](https://nodejs.org/dist/latest-v10.x/docs/api/)
Code Style | [![Code Style](https://badgen.net/badge/style/prettier/purple)](https://lossless.cloud)
PackagePhobia (total standalone install weight) | [![PackagePhobia](https://badgen.net/packagephobia/install/@pushrocks/early)](https://lossless.cloud)
PackagePhobia (package size on registry) | [![PackagePhobia](https://badgen.net/packagephobia/publish/@pushrocks/early)](https://lossless.cloud)
BundlePhobia (total size when bundled) | [![BundlePhobia](https://badgen.net/bundlephobia/minzip/@pushrocks/early)](https://lossless.cloud)
Platform support | [![Supports Windows 10](https://badgen.net/badge/supports%20Windows%2010/yes/green?icon=windows)](https://lossless.cloud) [![Supports Mac OS X](https://badgen.net/badge/supports%20Mac%20OS%20X/yes/green?icon=apple)](https://lossless.cloud)
## 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
```
## Contribution
We are always happy for code contributions. If you are not the code contributing type that is ok. Still, maintaining Open Source repositories takes considerable time and thought. If you like the quality of what we do and our modules are useful to you we would appreciate a little monthly contribution: You can [contribute one time](https://lossless.link/contribute-onetime) or [contribute monthly](https://lossless.link/contribute). :)
For further information read the linked docs at the top of this readme.
> MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh)
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy)
[![repo-footer](https://lossless.gitlab.io/publicrelations/repofooter.svg)](https://maintainedby.lossless.com)

1
test/test.d.ts vendored
View File

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

View File

@ -1,16 +0,0 @@
"use strict";
require("typings-test");
var 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;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sY0FBYyxDQUFDLENBQUE7QUFDdEIsSUFBTyxLQUFLLFdBQVcsZUFBZSxDQUFDLENBQUM7QUFFeEMsUUFBUSxDQUFDLE9BQU8sRUFBQztJQUNiLEVBQUUsQ0FBQyxVQUFVLEVBQUMsVUFBUyxJQUFJO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEIsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQixVQUFVLENBQUMsSUFBSSxFQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ0gsRUFBRSxDQUFDLFNBQVMsRUFBQyxVQUFTLElBQUk7UUFDdEIsS0FBSyxDQUFDLElBQUksRUFBRTthQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQixDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQyxDQUFBIiwiZmlsZSI6InRlc3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCJ0eXBpbmdzLXRlc3RcIjtcbmltcG9ydCBlYXJseSA9IHJlcXVpcmUoXCIuLi9kaXN0L2luZGV4XCIpO1xuXG5kZXNjcmliZShcImVhcmx5XCIsZnVuY3Rpb24oKXtcbiAgICBpdChcIi5zdGFydCgpXCIsZnVuY3Rpb24oZG9uZSl7XG4gICAgICAgIHRoaXMudGltZW91dCgxMDAwMCk7XG4gICAgICAgIGVhcmx5LnN0YXJ0KFwiZWFybHlcIik7XG4gICAgICAgIHNldFRpbWVvdXQoZG9uZSw1MDAwKTtcbiAgICB9KTtcbiAgICBpdChcIi5zdG9wKClcIixmdW5jdGlvbihkb25lKXtcbiAgICAgICAgZWFybHkuc3RvcCgpXG4gICAgICAgICAgICAudGhlbihkb25lKTtcbiAgICB9KVxufSkiXX0=

View File

@ -1,14 +1,25 @@
import "typings-test";
import early = require("../dist/index");
import { expect, expectAsync, tap } from '@pushrocks/tapbundle';
import * as smartdelay from '@pushrocks/smartdelay';
describe("early",function(){
it(".start()",function(done){
this.timeout(10000);
early.start("early");
setTimeout(done,5000);
});
it(".stop()",function(done){
early.stop()
.then(done);
})
})
import * as early from '../ts/index.js';
tap.test('.start()', async () => {
process.env.CLI_CALL_MODULENAME = 'early';
early.start('early');
await smartdelay.delayFor(2000);
});
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).toBeGreaterThan(999);
});
tap.start();

8
ts/00_commitinfo_data.ts Normal file
View File

@ -0,0 +1,8 @@
/**
* autocreated commitinfo by @pushrocks/commitinfo
*/
export const commitinfo = {
name: '@pushrocks/early',
version: '4.0.3',
description: 'minimal and fast loading plugin for startup time measuring'
}

View File

@ -1,52 +0,0 @@
import "typings-global";
let colors = require("colors");
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 = "["
+ "/".green.repeat(frameCounter)
+ " ".repeat(loaderLength - frameCounter)
+ "]"
+ " starting "
+ moduleName.cyan;
if(frameCounter == loaderLength){
frameCounter = 0;
} else {
frameCounter++;
}
return resultString;
};
let logEarlyAbort = false;
let logEarly = () => {
rl.write(null, {ctrl: true, name: 'u'});
rl.write(makeFrame());
setTimeout(function(){
if(!logEarlyAbort) 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'});
rl.close();
rl.on("close",function(){
})
});

View 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: [number, number] = null;
private _hrTimeStopDiff: [number, number] = 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;
}
}

View File

@ -1,45 +1,42 @@
import "typings-global"
import colors = require("colors");
import path = require("path");
let q = require("q");
import readline = require("readline");
import childProcess = require("child_process");
let earlyChild;
import * as consolecolor from '@pushrocks/consolecolor';
import * as smartpromise from '@pushrocks/smartpromise';
import { HrtMeasurement } from './early.hrtMeasurement.js';
let doAnimation:boolean = true;
let doText:boolean = false;
if(process.argv.indexOf("-v") != -1 || process.env.CI){
doAnimation = false;
} else if(process.argv.indexOf("-v") == -1){
export { HrtMeasurement };
let doText: boolean = false;
let moduleName: string = 'undefined module name';
let startHrt: HrtMeasurement;
if (process.argv.indexOf('-v') === -1) {
doText = true;
}
// exports
export let start = function(moduleNameArg:string = "",loaderLengthArg:string = "10"){
if(doAnimation){
earlyChild = childProcess.fork(path.join(__dirname,"early.child.js"),[],{
env: {
moduleNameArg:moduleNameArg,
loaderLengthArg:loaderLengthArg,
CI: process.env.CI
}
});
} else if (doText) {
console.log("**** starting " + moduleNameArg.cyan + " ****");
/**
* start the loading
*/
export let start = function (moduleNameArg: string = '', loaderLengthArg: string = '10') {
moduleName = moduleNameArg;
startHrt = new HrtMeasurement();
startHrt.start();
if (doText && process.env.CLI_CALL_MODULENAME === moduleName) {
console.log(`**** starting ${consolecolor.coloredString(moduleNameArg, 'green')} ****`);
}
};
export let stop = function(){
let done = q.defer();
if(doAnimation){
earlyChild.kill();
earlyChild.on("close",function(){
console.log("\n");
done.resolve();
})
} else {
done.resolve();
export let stop = (): Promise<number> => {
let done = smartpromise.defer<number>();
let earlyExecutionTime = startHrt.stop().milliSeconds;
let earlyExecutionTimeString: string = (earlyExecutionTime / 1000).toString();
if (doText && process.env.CLI_CALL_MODULENAME === moduleName) {
console.log(
`OK! -> finished loading within ${consolecolor.coloredString(
earlyExecutionTimeString,
'blue'
)}`
);
}
done.resolve(earlyExecutionTime);
return done.promise;
};

7
tsconfig.json Normal file
View File

@ -0,0 +1,7 @@
{
"compilerOptions": {
"target": "ES2022",
"module": "ES2022",
"moduleResolution": "nodenext"
}
}