commit a39765ce587385872734627bbd6cfd71d6aeabcc Author: Phil Kunz Date: Fri Feb 24 03:00:15 2017 +0100 added readme and first working version diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..95cd4ff --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +coverage/ +node_modules/ +public/ +pages/ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..1cfde96 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,63 @@ +# gitzone standard +image: hosttoday/ht-docker-node:npmts + +stages: +- test +- release +- trigger +- pages + +testLEGACY: + stage: test + script: + - npmci test legacy + coverage: /\d+.?\d+?\%\s*coverage/ + tags: + - docker + allow_failure: true + +testLTS: + stage: test + script: + - npmci test lts + coverage: /\d+.?\d+?\%\s*coverage/ + tags: + - docker + +testSTABLE: + stage: test + script: + - npmci test stable + coverage: /\d+.?\d+?\%\s*coverage/ + tags: + - docker + +release: + stage: release + script: + - npmci publish + only: + - tags + tags: + - docker + +trigger: + stage: trigger + script: + - npmci trigger + only: + - tags + tags: + - docker + +pages: + image: hosttoday/ht-docker-node:npmpage + stage: pages + script: + - npmci command npmpage --publish gitlab + only: + - tags + artifacts: + expire_in: 1 week + paths: + - public diff --git a/README.md b/README.md new file mode 100644 index 0000000..62eabce --- /dev/null +++ b/README.md @@ -0,0 +1,28 @@ +# smartanalytics +Google Analytics everywhere + +## Availabililty +[![npm](https://pushrocks.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/smartanalytics) +[![git](https://pushrocks.gitlab.io/assets/repo-button-git.svg)](https://GitLab.com/pushrocks/smartanalytics) +[![git](https://pushrocks.gitlab.io/assets/repo-button-mirror.svg)](https://github.com/pushrocks/smartanalytics) +[![docs](https://pushrocks.gitlab.io/assets/repo-button-docs.svg)](https://pushrocks.gitlab.io/smartanalytics/) + +## Status for master +[![build status](https://GitLab.com/pushrocks/smartanalytics/badges/master/build.svg)](https://GitLab.com/pushrocks/smartanalytics/commits/master) +[![coverage report](https://GitLab.com/pushrocks/smartanalytics/badges/master/coverage.svg)](https://GitLab.com/pushrocks/smartanalytics/commits/master) +[![npm downloads per month](https://img.shields.io/npm/dm/smartanalytics.svg)](https://www.npmjs.com/package/smartanalytics) +[![Dependency Status](https://david-dm.org/pushrocks/smartanalytics.svg)](https://david-dm.org/pushrocks/smartanalytics) +[![bitHound Dependencies](https://www.bithound.io/github/pushrocks/smartanalytics/badges/dependencies.svg)](https://www.bithound.io/github/pushrocks/smartanalytics/master/dependencies/npm) +[![bitHound Code](https://www.bithound.io/github/pushrocks/smartanalytics/badges/code.svg)](https://www.bithound.io/github/pushrocks/smartanalytics) +[![TypeScript](https://img.shields.io/badge/TypeScript-2.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/) +[![node](https://img.shields.io/badge/node->=%206.x.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/) +[![JavaScript Style Guide](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](http://standardjs.com/) + +## Usage +Use TypeScript for best in class instellisense. + +For further information read the linked docs at the top of this README. + +> MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh) + +[![repo-footer](https://pushrocks.gitlab.io/assets/repo-footer.svg)](https://push.rocks) diff --git a/dist/index.d.ts b/dist/index.d.ts new file mode 100644 index 0000000..b5650e9 --- /dev/null +++ b/dist/index.d.ts @@ -0,0 +1 @@ +export { AnalyticsAccount } from './smartanalytics.classes.analyticsaccount'; diff --git a/dist/index.js b/dist/index.js new file mode 100644 index 0000000..178f66d --- /dev/null +++ b/dist/index.js @@ -0,0 +1,4 @@ +"use strict"; +var smartanalytics_classes_analyticsaccount_1 = require("./smartanalytics.classes.analyticsaccount"); +exports.AnalyticsAccount = smartanalytics_classes_analyticsaccount_1.AnalyticsAccount; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEscUdBQTRFO0FBQW5FLHFFQUFBLGdCQUFnQixDQUFBIn0= \ No newline at end of file diff --git a/dist/smartanalytics.classes.analyticsaccount.d.ts b/dist/smartanalytics.classes.analyticsaccount.d.ts new file mode 100644 index 0000000..9251b8b --- /dev/null +++ b/dist/smartanalytics.classes.analyticsaccount.d.ts @@ -0,0 +1,6 @@ +export declare class AnalyticsAccount { + appName: string; + trackingId: string; + constructor(appNameArg: string, trackingIdArg: string); + sendEvent(eventCategoryArg: any, eventActionArg: any, eventLabelArg: string): void; +} diff --git a/dist/smartanalytics.classes.analyticsaccount.js b/dist/smartanalytics.classes.analyticsaccount.js new file mode 100644 index 0000000..7f501e1 --- /dev/null +++ b/dist/smartanalytics.classes.analyticsaccount.js @@ -0,0 +1,13 @@ +"use strict"; +const send = require("./smartanalytics.send"); +class AnalyticsAccount { + constructor(appNameArg, trackingIdArg) { + this.appName = appNameArg; + this.trackingId = trackingIdArg; + } + sendEvent(eventCategoryArg, eventActionArg, eventLabelArg) { + send.event(this.trackingId, this.appName, eventCategoryArg, eventActionArg, eventLabelArg); + } +} +exports.AnalyticsAccount = AnalyticsAccount; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhbmFseXRpY3MuY2xhc3Nlcy5hbmFseXRpY3NhY2NvdW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRhbmFseXRpY3MuY2xhc3Nlcy5hbmFseXRpY3NhY2NvdW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSw4Q0FBNkM7QUFFN0M7SUFHRSxZQUFZLFVBQWtCLEVBQUUsYUFBcUI7UUFDbkQsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUE7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUE7SUFDakMsQ0FBQztJQUVELFNBQVMsQ0FBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsYUFBcUI7UUFDaEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGFBQWEsQ0FBQyxDQUFBO0lBQzVGLENBQUM7Q0FDRjtBQVhELDRDQVdDIn0= \ No newline at end of file diff --git a/dist/smartanalytics.plugins.d.ts b/dist/smartanalytics.plugins.d.ts new file mode 100644 index 0000000..b3f3c9b --- /dev/null +++ b/dist/smartanalytics.plugins.d.ts @@ -0,0 +1,4 @@ +import 'typings-global'; +import * as smartrequest from 'smartrequest'; +import * as smartq from 'smartq'; +export { smartrequest, smartq }; diff --git a/dist/smartanalytics.plugins.js b/dist/smartanalytics.plugins.js new file mode 100644 index 0000000..2c0c3d3 --- /dev/null +++ b/dist/smartanalytics.plugins.js @@ -0,0 +1,7 @@ +"use strict"; +require("typings-global"); +const smartrequest = require("smartrequest"); +exports.smartrequest = smartrequest; +const smartq = require("smartq"); +exports.smartq = smartq; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhbmFseXRpY3MucGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0YW5hbHl0aWNzLnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDBCQUF1QjtBQUN2Qiw2Q0FBNEM7QUFJeEMsb0NBQVk7QUFIaEIsaUNBQWdDO0FBSTVCLHdCQUFNIn0= \ No newline at end of file diff --git a/dist/smartanalytics.send.d.ts b/dist/smartanalytics.send.d.ts new file mode 100644 index 0000000..78d5904 --- /dev/null +++ b/dist/smartanalytics.send.d.ts @@ -0,0 +1 @@ +export declare let event: (trackingIdArg: string, appNameArg: string, eventCategoryArg: string, eventActionArg: any, eventLabelArg?: string) => void; diff --git a/dist/smartanalytics.send.js b/dist/smartanalytics.send.js new file mode 100644 index 0000000..add3edc --- /dev/null +++ b/dist/smartanalytics.send.js @@ -0,0 +1,29 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +const plugins = require("./smartanalytics.plugins"); +exports.event = (trackingIdArg, appNameArg, eventCategoryArg, eventActionArg, eventLabelArg = 'null') => { + let payload = 'v=1' + + `&tid=${trackingIdArg}` + + '&cid=555' + + '&aip=1' + + '&t=event' + + `&ec=${eventCategoryArg}` + + `&ea=${eventActionArg}` + + `&el=${eventLabelArg}` + + '&ev=300' + + `&an=${eventLabelArg}`; + send(payload); +}; +let send = (requestBodyArg) => __awaiter(this, void 0, void 0, function* () { + yield plugins.smartrequest.post('http://www.google-analytics.com/collect', { + requestBody: requestBodyArg + }); +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhbmFseXRpY3Muc2VuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0YW5hbHl0aWNzLnNlbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsb0RBQW1EO0FBRXhDLFFBQUEsS0FBSyxHQUFHLENBQUMsYUFBcUIsRUFBRSxVQUFrQixFQUFFLGdCQUF3QixFQUFFLGNBQWMsRUFBRSxnQkFBd0IsTUFBTTtJQUNuSSxJQUFJLE9BQU8sR0FBVyxLQUFLO1FBQ3ZCLFFBQVEsYUFBYSxFQUFFO1FBQ3ZCLFVBQVU7UUFDVixRQUFRO1FBQ1IsVUFBVTtRQUNWLE9BQU8sZ0JBQWdCLEVBQUU7UUFDekIsT0FBTyxjQUFjLEVBQUU7UUFDdkIsT0FBTyxhQUFhLEVBQUU7UUFDdEIsU0FBUztRQUNULE9BQU8sYUFBYSxFQUFFLENBQUE7SUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0FBQ2pCLENBQUMsQ0FBQTtBQUdELElBQUksSUFBSSxHQUFHLENBQU8sY0FBc0I7SUFDcEMsTUFBTSxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyx5Q0FBeUMsRUFBRTtRQUN2RSxXQUFXLEVBQUUsY0FBYztLQUM5QixDQUFDLENBQUE7QUFDTixDQUFDLENBQUEsQ0FBQSJ9 \ No newline at end of file diff --git a/package.json b/package.json new file mode 100755 index 0000000..7be5b1c --- /dev/null +++ b/package.json @@ -0,0 +1,21 @@ +{ + "name": "smartanalytics", + "version": "1.0.0", + "description": "Google Analytics everywhere", + "main": "dist/index.js", + "typings": "dist/index.d.ts", + "scripts": { + "test": "(npmts)" + }, + "author": "", + "license": "MIT", + "dependencies": { + "smartq": "^1.1.1", + "smartrequest": "^1.0.4", + "typings-global": "^1.0.14" + }, + "devDependencies": { + "smartchai": "^1.0.3", + "typings-test": "^1.0.3" + } +} diff --git a/test/test.d.ts b/test/test.d.ts new file mode 100644 index 0000000..2fd432a --- /dev/null +++ b/test/test.d.ts @@ -0,0 +1 @@ +import 'typings-test'; diff --git a/test/test.js b/test/test.js new file mode 100755 index 0000000..d637de2 --- /dev/null +++ b/test/test.js @@ -0,0 +1,31 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +require("typings-test"); +const smartanalytics = require("../dist/index"); +let testAccount; +describe('smartanalytics', function () { + it('should create a valid AnalyticsAccount', function () { + testAccount = new smartanalytics.AnalyticsAccount('smartanalytics', 'UA-92592300-1'); + }); + it('should send a request to Google Analytics', function () { + let doit = () => __awaiter(this, void 0, void 0, function* () { + yield testAccount.sendEvent('npmtool', 'install', 'pushrocks/smartq'); + yield testAccount.sendEvent('npmtool', 'started', 'pushrocks/smartanalytics'); + yield testAccount.sendEvent('npmtool', 'install', 'pushrocks/smartq'); + yield testAccount.sendEvent('npmtool', 'started', 'pushrocks/smartanalytics'); + yield testAccount.sendEvent('npmtool', 'install', 'pushrocks/smartq'); + yield testAccount.sendEvent('npmtool', 'started', 'pushrocks/smartanalytics'); + yield testAccount.sendEvent('npmtool', 'install', 'pushrocks/smartq'); + yield testAccount.sendEvent('npmtool', 'started', 'pushrocks/smartanalytics'); + }); + doit(); + }); +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsd0JBQXFCO0FBSXJCLGdEQUErQztBQUUvQyxJQUFJLFdBQTRDLENBQUE7QUFFaEQsUUFBUSxDQUFDLGdCQUFnQixFQUFFO0lBQ3pCLEVBQUUsQ0FBQyx3Q0FBd0MsRUFBRTtRQUMzQyxXQUFXLEdBQUcsSUFBSSxjQUFjLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLENBQUE7SUFDdEYsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsMkNBQTJDLEVBQUU7UUFDOUMsSUFBSSxJQUFJLEdBQUc7WUFDVCxNQUFNLFdBQVcsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFBO1lBQ3JFLE1BQU0sV0FBVyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLDBCQUEwQixDQUFDLENBQUE7WUFDN0UsTUFBTSxXQUFXLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLENBQUMsQ0FBQTtZQUNyRSxNQUFNLFdBQVcsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSwwQkFBMEIsQ0FBQyxDQUFBO1lBQzdFLE1BQU0sV0FBVyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUE7WUFDckUsTUFBTSxXQUFXLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsMEJBQTBCLENBQUMsQ0FBQTtZQUM3RSxNQUFNLFdBQVcsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFBO1lBQ3JFLE1BQU0sV0FBVyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLDBCQUEwQixDQUFDLENBQUE7UUFDL0UsQ0FBQyxDQUFBLENBQUE7UUFDRCxJQUFJLEVBQUUsQ0FBQTtJQUNSLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEifQ== \ No newline at end of file diff --git a/test/test.ts b/test/test.ts new file mode 100755 index 0000000..685c7e0 --- /dev/null +++ b/test/test.ts @@ -0,0 +1,27 @@ +import 'typings-test' + +import { expect } from 'smartchai' + +import * as smartanalytics from '../dist/index' + +let testAccount: smartanalytics.AnalyticsAccount + +describe('smartanalytics', function () { + it('should create a valid AnalyticsAccount', function () { + testAccount = new smartanalytics.AnalyticsAccount('smartanalytics', 'UA-92592300-1') + }) + + it('should send a request to Google Analytics', function () { + let doit = async () => { + await testAccount.sendEvent('npmtool', 'install', 'pushrocks/smartq') + await testAccount.sendEvent('npmtool', 'started', 'pushrocks/smartanalytics') + await testAccount.sendEvent('npmtool', 'install', 'pushrocks/smartq') + await testAccount.sendEvent('npmtool', 'started', 'pushrocks/smartanalytics') + await testAccount.sendEvent('npmtool', 'install', 'pushrocks/smartq') + await testAccount.sendEvent('npmtool', 'started', 'pushrocks/smartanalytics') + await testAccount.sendEvent('npmtool', 'install', 'pushrocks/smartq') + await testAccount.sendEvent('npmtool', 'started', 'pushrocks/smartanalytics') + } + doit() + }) +}) diff --git a/ts/index.ts b/ts/index.ts new file mode 100755 index 0000000..a7cf9f1 --- /dev/null +++ b/ts/index.ts @@ -0,0 +1 @@ +export { AnalyticsAccount } from './smartanalytics.classes.analyticsaccount' diff --git a/ts/smartanalytics.classes.analyticsaccount.ts b/ts/smartanalytics.classes.analyticsaccount.ts new file mode 100644 index 0000000..27e4673 --- /dev/null +++ b/ts/smartanalytics.classes.analyticsaccount.ts @@ -0,0 +1,15 @@ +import * as plugins from './smartanalytics.plugins' +import * as send from './smartanalytics.send' + +export class AnalyticsAccount { + appName: string + trackingId: string + constructor(appNameArg: string, trackingIdArg: string) { + this.appName = appNameArg + this.trackingId = trackingIdArg + } + + sendEvent (eventCategoryArg, eventActionArg, eventLabelArg: string) { + send.event(this.trackingId, this.appName, eventCategoryArg, eventActionArg, eventLabelArg) + } +} diff --git a/ts/smartanalytics.plugins.ts b/ts/smartanalytics.plugins.ts new file mode 100755 index 0000000..affcd6a --- /dev/null +++ b/ts/smartanalytics.plugins.ts @@ -0,0 +1,8 @@ +import 'typings-global' +import * as smartrequest from 'smartrequest' +import * as smartq from 'smartq' + +export { + smartrequest, + smartq +} \ No newline at end of file diff --git a/ts/smartanalytics.send.ts b/ts/smartanalytics.send.ts new file mode 100755 index 0000000..c3446f2 --- /dev/null +++ b/ts/smartanalytics.send.ts @@ -0,0 +1,22 @@ +import * as plugins from './smartanalytics.plugins' + +export let event = (trackingIdArg: string, appNameArg: string, eventCategoryArg: string, eventActionArg, eventLabelArg: string = 'null') => { + let payload: string = 'v=1' + + `&tid=${trackingIdArg}` + // the tracking ID + '&cid=555' + + '&aip=1' + // anonymize the IP + '&t=event' + + `&ec=${eventCategoryArg}` + + `&ea=${eventActionArg}` + + `&el=${eventLabelArg}` + + '&ev=300' + + `&an=${eventLabelArg}` + send(payload) +} + + +let send = async (requestBodyArg: string) => { + await plugins.smartrequest.post('http://www.google-analytics.com/collect', { + requestBody: requestBodyArg + }) +} \ No newline at end of file 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 100755 index 0000000..373bf42 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,198 @@ +# 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.4.35" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-3.4.35.tgz#e8d65f83492d2944f816fc620741821c28a8c900" + +"@types/mocha@^2.2.31": + version "2.2.39" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.39.tgz#f68d63db8b69c38e9558b4073525cf96c4f7a829" + +"@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" + +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" + +brace-expansion@^1.0.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" + 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.1" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c" + +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" + +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" + +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.2.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c" + +semver@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + +shelljs@^0.7.4: + version "0.7.6" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.6.tgz#379cccfb56b91c8601e4793356eb5382924de9ad" + 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" + +smartq@^1.1.0, 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" + +smartrequest@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/smartrequest/-/smartrequest-1.0.4.tgz#86af2163ae28f1031b01c2d8ad8c429733920611" + dependencies: + smartq "^1.1.0" + typings-global "^1.0.14" + +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@*, typings-global@^1.0.14: + version "1.0.14" + resolved "https://registry.yarnpkg.com/typings-global/-/typings-global-1.0.14.tgz#ab682720a03d6b9278869fb5c30c30d7dc61d12c" + dependencies: + semver "^5.3.0" + shelljs "^0.7.4" + +typings-test@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typings-test/-/typings-test-1.0.3.tgz#fbab895eb3f0c44842e73db059f65946b971e369" + dependencies: + "@types/mocha" "^2.2.31" + typings-global "*" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"