commit 75c51333733e4c45935da522c277a8f319758d64 Author: Phil Kunz Date: Thu Mar 1 23:39:03 2018 +0100 initial diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..67b291e --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.nogit/ +node_modules/ +coverage/ +public/ +pages/ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..14931f9 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,95 @@ +# gitzone standard +image: hosttoday/ht-docker-node:npmci + +cache: + paths: + - .yarn/ + key: "$CI_BUILD_STAGE" + +stages: +- security +- test +- release +- trigger +- pages + +mirror: + stage: security + script: + - npmci git mirror + tags: + - docker + +snyk: + stage: security + script: + - npmci command yarn global add snyk + - npmci command yarn install --ignore-scripts + - npmci command snyk test + tags: + - docker + +testLEGACY: + stage: test + script: + - npmci node install legacy + - npmci npm install + - npmci npm test + coverage: /\d+.?\d+?\%\s*coverage/ + tags: + - docker + allow_failure: true + +testLTS: + stage: test + script: + - npmci node install lts + - npmci npm install + - npmci npm test + coverage: /\d+.?\d+?\%\s*coverage/ + tags: + - docker + +testSTABLE: + stage: test + script: + - npmci node install stable + - npmci npm install + - npmci npm test + coverage: /\d+.?\d+?\%\s*coverage/ + tags: + - docker + +release: + stage: release + script: + - npmci npm prepare + - npmci npm publish + only: + - tags + tags: + - 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 diff --git a/dist/beautybrowser.plugins.d.ts b/dist/beautybrowser.plugins.d.ts new file mode 100644 index 0000000..0d27368 --- /dev/null +++ b/dist/beautybrowser.plugins.d.ts @@ -0,0 +1,2 @@ +import * as smartlogInterfaces from 'smartlog-interfaces'; +export { smartlogInterfaces }; diff --git a/dist/beautybrowser.plugins.js b/dist/beautybrowser.plugins.js new file mode 100644 index 0000000..1c10685 --- /dev/null +++ b/dist/beautybrowser.plugins.js @@ -0,0 +1,5 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const smartlogInterfaces = require("smartlog-interfaces"); +exports.smartlogInterfaces = smartlogInterfaces; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVhdXR5YnJvd3Nlci5wbHVnaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvYmVhdXR5YnJvd3Nlci5wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMERBQTBEO0FBQ2pELGdEQUFrQiJ9 \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts new file mode 100644 index 0000000..8924c5a --- /dev/null +++ b/dist/index.d.ts @@ -0,0 +1,13 @@ +import { ILogDestination, ILogPackage } from 'smartlog-interfaces'; +export interface IBeautyLogObject { + logType: string; + logString: string; +} +export declare class BeautyBrowser implements ILogDestination { + handleLog(logPackage: ILogPackage): void; + /** + * parse logs for display + */ + private parseLog; + private logInBrowser(beautyLogObjectArg); +} diff --git a/dist/index.js b/dist/index.js new file mode 100644 index 0000000..913b2e5 --- /dev/null +++ b/dist/index.js @@ -0,0 +1,56 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +class BeautyBrowser { + constructor() { + /** + * parse logs for display + */ + this.parseLog = (stringToParseArg) => { + const parseLogRegex = /^(success|ok|info|warn|error):\s(.*)/; + const regexResult = parseLogRegex.exec(stringToParseArg); + if (regexResult.length === 3) { + return { + logType: regexResult[1], + logString: regexResult[2] + }; + } + else { + return { + logType: 'log', + logString: stringToParseArg + }; + } + }; + } + handleLog(logPackage) { + this.logInBrowser(this.parseLog(logPackage.message)); + } + logInBrowser(beautyLogObjectArg) { + const { logType, logString } = beautyLogObjectArg; + switch (logType) { + case 'error': + console.log('%c Error: %c ' + logString, 'background:#000000;color:#800000;', 'color:#000000;'); + break; + case 'info': + console.log('%c Info: %c ' + logString, 'background:#EC407A;color:#ffffff;', 'color:#EC407A;'); + break; + case 'ok': + console.log('%c OK: %c ' + logString, 'background:#000000;color:#8BC34A;', 'color:#000000;'); + break; + case 'success': + console.log('%c Success: %c ' + logString, 'background:#8BC34A;color:#ffffff;', 'color:#8BC34A;'); + break; + case 'warn': + console.log('%c Warn: %c ' + logString, 'background:#000000;color:#FB8C00;', 'color:#000000;'); + break; + case 'log': + console.log('%c Log: %c ' + logString, 'background:#42A5F5;color:#ffffff', 'color:#42A5F5;'); + break; + default: + console.log('unknown logType for "' + logString + '"'); + break; + } + } +} +exports.BeautyBrowser = BeautyBrowser; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVFBO0lBQUE7UUFLRTs7V0FFRztRQUNLLGFBQVEsR0FBRyxDQUFDLGdCQUF3QixFQUFvQixFQUFFO1lBQ2hFLE1BQU0sYUFBYSxHQUFHLHNDQUFzQyxDQUFDO1lBQzdELE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN6RCxFQUFFLENBQUEsQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVCLE1BQU0sQ0FBQztvQkFDTCxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztvQkFDdkIsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7aUJBQzFCLENBQUE7WUFDSCxDQUFDO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ04sTUFBTSxDQUFDO29CQUNMLE9BQU8sRUFBRSxLQUFLO29CQUNkLFNBQVMsRUFBRSxnQkFBZ0I7aUJBQzVCLENBQUE7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDO0lBNENKLENBQUM7SUFqRUMsU0FBUyxDQUFDLFVBQXVCO1FBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBcUJPLFlBQVksQ0FBQyxrQkFBb0M7UUFDdkQsTUFBTSxFQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUMsR0FBRyxrQkFBa0IsQ0FBQztRQUNoRCxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLEtBQUssT0FBTztnQkFDVixPQUFPLENBQUMsR0FBRyxDQUNULGVBQWUsR0FBRyxTQUFTLEVBQzNCLG1DQUFtQyxFQUNuQyxnQkFBZ0IsQ0FDakIsQ0FBQztnQkFDRixLQUFLLENBQUM7WUFDUixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FDVCxjQUFjLEdBQUcsU0FBUyxFQUMxQixtQ0FBbUMsRUFDbkMsZ0JBQWdCLENBQ2pCLENBQUM7Z0JBQ0YsS0FBSyxDQUFDO1lBQ1IsS0FBSyxJQUFJO2dCQUNQLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxHQUFHLFNBQVMsRUFBRSxtQ0FBbUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUM3RixLQUFLLENBQUM7WUFDUixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxDQUFDLEdBQUcsQ0FDVCxpQkFBaUIsR0FBRyxTQUFTLEVBQzdCLG1DQUFtQyxFQUNuQyxnQkFBZ0IsQ0FDakIsQ0FBQztnQkFDRixLQUFLLENBQUM7WUFDUixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FDVCxjQUFjLEdBQUcsU0FBUyxFQUMxQixtQ0FBbUMsRUFDbkMsZ0JBQWdCLENBQ2pCLENBQUM7Z0JBQ0YsS0FBSyxDQUFDO1lBQ1IsS0FBSyxLQUFLO2dCQUNSLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxHQUFHLFNBQVMsRUFBRSxrQ0FBa0MsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUM3RixLQUFLLENBQUM7WUFDUjtnQkFDRSxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixHQUFHLFNBQVMsR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFDdkQsS0FBSyxDQUFDO1FBQ1YsQ0FBQztJQUNILENBQUM7Q0FDRjtBQWxFRCxzQ0FrRUMifQ== \ No newline at end of file diff --git a/npmextra.json b/npmextra.json new file mode 100644 index 0000000..654a32a --- /dev/null +++ b/npmextra.json @@ -0,0 +1,7 @@ +{ + "npmci": { + "npmGlobalTools": [ + "npmts" + ] + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..4e7cf11 --- /dev/null +++ b/package.json @@ -0,0 +1,19 @@ +{ + "name": "beautybrowser", + "version": "1.0.1", + "description": "beautiful logging for the browser", + "main": "dist/index.js", + "typings": "dist/index.d.ts", + "author": "Lossless GmbH", + "license": "MIT", + "scripts": { + "test": "(npmts)", + "format": "(gitzone format)" + }, + "devDependencies": { + "tapbundle": "^2.0.0" + }, + "dependencies": { + "smartlog-interfaces": "^1.0.8" + } +} diff --git a/test/test.ts b/test/test.ts new file mode 100644 index 0000000..21c6196 --- /dev/null +++ b/test/test.ts @@ -0,0 +1,25 @@ +import { expect, tap } from 'tapbundle'; +import * as beautybrowser from '../ts/index'; + +let testBeautyBrowser: beautybrowser.BeautyBrowser; + +tap.test('first test', async () => { + testBeautyBrowser = new beautybrowser.BeautyBrowser() +}); + +tap.test('should log a message', async () => { + testBeautyBrowser.handleLog({ + logContext: { + company: 'Lossless GmbH', + companyunit: 'Lossless.Cloud', + containerName: 'testContainer', + environment: 'test', + runtime: 'browser', + zone: 'serve.zone' + }, + logLevel: 'info', + message: 'ok: Hi, this is a message!' + }) +}) + +tap.start(); diff --git a/ts/beautybrowser.plugins.ts b/ts/beautybrowser.plugins.ts new file mode 100644 index 0000000..0d27368 --- /dev/null +++ b/ts/beautybrowser.plugins.ts @@ -0,0 +1,2 @@ +import * as smartlogInterfaces from 'smartlog-interfaces'; +export { smartlogInterfaces }; diff --git a/ts/index.ts b/ts/index.ts new file mode 100644 index 0000000..d9c2376 --- /dev/null +++ b/ts/index.ts @@ -0,0 +1,75 @@ +import * as plugins from './beautybrowser.plugins'; +import { ILogDestination, ILogPackage } from 'smartlog-interfaces'; + +export interface IBeautyLogObject { + logType: string; + logString: string; +} + +export class BeautyBrowser implements ILogDestination { + handleLog(logPackage: ILogPackage) { + this.logInBrowser(this.parseLog(logPackage.message)); + } + + /** + * parse logs for display + */ + private parseLog = (stringToParseArg: string): IBeautyLogObject => { + const parseLogRegex = /^(success|ok|info|warn|error):\s(.*)/; + const regexResult = parseLogRegex.exec(stringToParseArg); + if(regexResult.length === 3) { + return { + logType: regexResult[1], + logString: regexResult[2] + } + } else { + return { + logType: 'log', + logString: stringToParseArg + } + } + }; + + private logInBrowser(beautyLogObjectArg: IBeautyLogObject) { + const {logType, logString} = beautyLogObjectArg; + switch (logType) { + case 'error': + console.log( + '%c Error: %c ' + logString, + 'background:#000000;color:#800000;', + 'color:#000000;' + ); + break; + case 'info': + console.log( + '%c Info: %c ' + logString, + 'background:#EC407A;color:#ffffff;', + 'color:#EC407A;' + ); + break; + case 'ok': + console.log('%c OK: %c ' + logString, 'background:#000000;color:#8BC34A;', 'color:#000000;'); + break; + case 'success': + console.log( + '%c Success: %c ' + logString, + 'background:#8BC34A;color:#ffffff;', + 'color:#8BC34A;' + ); + break; + case 'warn': + console.log( + '%c Warn: %c ' + logString, + 'background:#000000;color:#FB8C00;', + 'color:#000000;' + ); + break; + case 'log': + console.log('%c Log: %c ' + logString, 'background:#42A5F5;color:#ffffff', 'color:#42A5F5;'); + break; + default: + console.log('unknown logType for "' + logString + '"'); + break; + } + } +} diff --git a/tslint.json b/tslint.json new file mode 100644 index 0000000..45052ad --- /dev/null +++ b/tslint.json @@ -0,0 +1,3 @@ +{ + "extends": "tslint-config-standard" +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..47d948e --- /dev/null +++ b/yarn.lock @@ -0,0 +1,244 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@types/chai-as-promised@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.0.tgz#010b04cde78eacfb6e72bfddb3e58fe23c2e78b9" + dependencies: + "@types/chai" "*" + +"@types/chai-string@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@types/chai-string/-/chai-string-1.4.0.tgz#c8b78deb9ae53e86c05a446c256138faeaff53c1" + dependencies: + "@types/chai" "*" + +"@types/chai@*", "@types/chai@^4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.1.2.tgz#f1af664769cfb50af805431c407425ed619daa21" + +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.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + +beautycolor@^1.0.7: + version "1.0.11" + resolved "https://registry.yarnpkg.com/beautycolor/-/beautycolor-1.0.11.tgz#71c5568d5a7ed5c144d3a54f753ad1b08862aea5" + dependencies: + ansi-256-colors "^1.1.0" + typings-global "^1.0.14" + +bindings@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.0.tgz#b346f6ecf6a95f5a815c5839fc7cdb22502f1ed7" + +chai-as-promised@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0" + dependencies: + check-error "^1.0.2" + +chai-string@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/chai-string/-/chai-string-1.4.0.tgz#359140c051d36a4e4b1a5fc6b910152f438a8d49" + +chai@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.1.2.tgz#0f64584ba642f0f2ace2806279f4f06ca23ad73c" + dependencies: + assertion-error "^1.0.1" + check-error "^1.0.1" + deep-eql "^3.0.0" + get-func-name "^2.0.0" + pathval "^1.0.0" + type-detect "^4.0.0" + +check-error@^1.0.1, check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + +deep-eql@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" + dependencies: + type-detect "^4.0.0" + +define-properties@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + dependencies: + foreach "^2.0.5" + object-keys "^1.0.8" + +early@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/early/-/early-2.1.1.tgz#841e23254ea5dc54d8afaeee82f5ab65c00ee23c" + dependencies: + beautycolor "^1.0.7" + smartq "^1.1.1" + typings-global "^1.0.16" + +es-abstract@^1.5.1: + version "1.10.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.1" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" + +es-to-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + dependencies: + is-callable "^1.1.1" + is-date-object "^1.0.1" + is-symbol "^1.0.1" + +es6-error@^4.0.2: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + +function-bind@^1.0.2, function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + +has@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + +is-callable@^1.1.1, is-callable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" + +is-symbol@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" + +leakage@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/leakage/-/leakage-0.3.0.tgz#15d698abdc76bbc6439601f4f3020e77e2d50c39" + dependencies: + es6-error "^4.0.2" + 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.2.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.2.0.tgz#d30a73c6b8201d8f7d8e7956ba9616087a68e0ee" + +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" + +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.9.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.9.2.tgz#f564d75f5f8f36a6d9456cca7a6c4fe488ab7866" + +object-keys@^1.0.8: + version "1.0.11" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" + +object.getownpropertydescriptors@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.1" + +pathval@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" + +pretty-bytes@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" + +smartchai@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/smartchai/-/smartchai-2.0.1.tgz#d20f17221f0e3c6c3473600b78ddfba0ab0ea762" + dependencies: + "@types/chai" "^4.1.2" + "@types/chai-as-promised" "^7.1.0" + "@types/chai-string" "^1.4.0" + chai "^4.1.2" + chai-as-promised "^7.1.1" + chai-string "^1.4.0" + +smartdelay@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/smartdelay/-/smartdelay-1.0.4.tgz#791c1a4ee6770494064c10b1d2d2b8e6f3105b82" + dependencies: + smartq "^1.1.1" + typings-global "^1.0.16" + +smartlog-interfaces@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/smartlog-interfaces/-/smartlog-interfaces-1.0.8.tgz#633d889d498c4c13cd525d24adeb6cad6fe1aee1" + +smartq@^1.1.1: + version "1.1.6" + resolved "https://registry.yarnpkg.com/smartq/-/smartq-1.1.6.tgz#0c1ff4336d95e95b4f1fdd8ccd7e2c5a323b8412" + dependencies: + typings-global "^1.0.19" + util.promisify "^1.0.0" + +tapbundle@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/tapbundle/-/tapbundle-2.0.0.tgz#79fce68ff185c786fabaf6eb589a4afc7d2714b7" + dependencies: + early "^2.1.1" + leakage "^0.3.0" + smartchai "^2.0.0" + smartdelay "^1.0.3" + smartq "^1.1.1" + +type-detect@^4.0.0: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + +typings-global@^1.0.14, typings-global@^1.0.16, typings-global@^1.0.19: + version "1.0.28" + resolved "https://registry.yarnpkg.com/typings-global/-/typings-global-1.0.28.tgz#e28cc965476564cbc00e438739e0aa0735d323d4" + +util.promisify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3"