From 4ada87a9451307817e95ff4e4fd54abcd67c0602 Mon Sep 17 00:00:00 2001 From: Phil Kunz Date: Sun, 13 May 2018 15:51:04 +0200 Subject: [PATCH] BREAKING CHANGE(package): update to new packagename and improve record retrieval --- .gitlab-ci.yml | 92 ++++++++-- dist/dnsly.plugins.d.ts | 5 - dist/dnsly.plugins.js | 10 -- dist/index.d.ts | 44 ----- dist/index.js | 145 --------------- docs/index.md | 19 +- npmextra.json | 5 +- package.json | 13 +- readme.md | 28 +-- test/test.ts | 86 +++++---- ts/dnsly.plugins.ts | 13 +- ts/index.ts | 141 +++++++-------- yarn.lock | 384 +++++++++++++--------------------------- 13 files changed, 365 insertions(+), 620 deletions(-) delete mode 100644 dist/dnsly.plugins.d.ts delete mode 100644 dist/dnsly.plugins.js delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.js diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e6be27f..77d706f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -7,66 +7,124 @@ cache: key: "$CI_BUILD_STAGE" stages: +- security - test - release -- trigger -- pages +- metadata +# ==================== +# security stage +# ==================== +mirror: + stage: security + script: + - npmci git mirror + tags: + - docker + - notpriv + +snyk: + stage: security + script: + - npmci command yarn global add snyk + - npmci command yarn install --ignore-scripts + - npmci command snyk test + tags: + - docker + - notpriv + +# ==================== +# test stage +# ==================== testLEGACY: stage: test script: - - npmci test legacy + - npmci node install legacy + - npmci npm install + - npmci npm test coverage: /\d+.?\d+?\%\s*coverage/ tags: - - docker + - docker + - notpriv allow_failure: true testLTS: stage: test script: - - npmci test lts + - npmci node install lts + - npmci npm install + - npmci npm test coverage: /\d+.?\d+?\%\s*coverage/ tags: - - docker + - docker + - notpriv testSTABLE: stage: test script: - - npmci test stable + - npmci node install stable + - npmci npm install + - npmci npm test coverage: /\d+.?\d+?\%\s*coverage/ tags: - - docker + - docker + - notpriv release: stage: release script: - - npmci publish + - npmci node install stable + - npmci npm publish only: - - tags + - tags tags: - - docker + - docker + - notpriv + +# ==================== +# metadata stage +# ==================== +codequality: + stage: metadata + image: docker:stable + allow_failure: true + services: + - docker:stable-dind + script: + - export SP_VERSION=$(echo "$CI_SERVER_VERSION" | sed 's/^\([0-9]*\)\.\([0-9]*\).*/\1-\2-stable/') + - docker run + --env SOURCE_CODE="$PWD" + --volume "$PWD":/code + --volume /var/run/docker.sock:/var/run/docker.sock + "registry.gitlab.com/gitlab-org/security-products/codequality:$SP_VERSION" /code + artifacts: + paths: [codeclimate.json] + tags: + - docker + - priv trigger: - stage: trigger + stage: metadata script: - - npmci trigger + - npmci trigger only: - - tags + - tags tags: - - docker + - docker + - notpriv pages: image: hosttoday/ht-docker-node:npmci - stage: pages + stage: metadata script: - npmci command yarn global add npmpage - npmci command npmpage tags: - docker + - notpriv only: - tags artifacts: expire_in: 1 week paths: - public - allow_failure: true diff --git a/dist/dnsly.plugins.d.ts b/dist/dnsly.plugins.d.ts deleted file mode 100644 index 611108c..0000000 --- a/dist/dnsly.plugins.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import 'typings-global'; -import * as beautylog from 'beautylog'; -import * as dns from 'dns'; -import * as smartdelay from 'smartdelay'; -export { beautylog, dns, smartdelay }; diff --git a/dist/dnsly.plugins.js b/dist/dnsly.plugins.js deleted file mode 100644 index d223271..0000000 --- a/dist/dnsly.plugins.js +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -require("typings-global"); -const beautylog = require("beautylog"); -exports.beautylog = beautylog; -const dns = require("dns"); -exports.dns = dns; -const smartdelay = require("smartdelay"); -exports.smartdelay = smartdelay; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5zbHkucGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2Ruc2x5LnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwQkFBdUI7QUFDdkIsdUNBQXNDO0FBS2xDLDhCQUFTO0FBSmIsMkJBQTBCO0FBS3RCLGtCQUFHO0FBSlAseUNBQXdDO0FBS3BDLGdDQUFVIn0= \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 47c4781..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,44 +0,0 @@ -export declare type TDnsProvider = 'google'; -export declare type TDnsRecordType = 'A' | 'AAAA' | 'CNAME' | 'PTR' | 'MX' | 'NAPTR' | 'NS' | 'SOA' | 'SRV' | 'TXT'; -export interface IDnsRecord { - chunked?: string[]; - name: string; - type: TDnsRecordType; - value: string; -} -/** - * class dnsly offers methods for working with dns from a dns provider like Google DNS - */ -export declare class Dnsly { - dnsServerIp: string; - dnsServerPort: number; - /** - * constructor for class dnsly - */ - constructor(dnsProviderArg?: TDnsProvider); - /** - * gets a record - */ - getRecord(recordNameArg: string, recordTypeArg: TDnsRecordType): Promise; - checkUntilAvailable(recordNameArg: string, recordTypeArg: TDnsRecordType, expectedValue: string): Promise; - /** - * get A Dns Record - */ - getRecordA(recordNameArg: string): Promise; - /** - * get AAAA Record - */ - getRecordAAAA(recordNameArg: string): Promise; - /** - * gets a txt record - */ - getRecordTxt(recordNameArg: string): Promise; - /** - * get oridinary record - */ - private getOrdinaryRecord(recordNameArg, recordTypeArg); - /** - * set the DNS provider - */ - private _setDnsProvider(dnsProvider); -} diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index 9b0c502..0000000 --- a/dist/index.js +++ /dev/null @@ -1,145 +0,0 @@ -"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()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const q = require("smartq"); -const plugins = require("./dnsly.plugins"); -/** - * class dnsly offers methods for working with dns from a dns provider like Google DNS - */ -class Dnsly { - /** - * constructor for class dnsly - */ - constructor(dnsProviderArg = 'google') { - this._setDnsProvider(dnsProviderArg); - } - /** - * gets a record - */ - getRecord(recordNameArg, recordTypeArg) { - return __awaiter(this, void 0, void 0, function* () { - switch (recordTypeArg) { - case 'TXT': - return yield this.getRecordTxt(recordNameArg); - case 'A': - return yield this.getRecordA(recordNameArg); - case 'AAAA': - return yield this.getRecordAAAA(recordNameArg); - } - }); - } - checkUntilAvailable(recordNameArg, recordTypeArg, expectedValue) { - return __awaiter(this, void 0, void 0, function* () { - let cycleArg = 0; - let doCheck = () => __awaiter(this, void 0, void 0, function* () { - if (cycleArg < 30) { - cycleArg++; - try { - let myRecordArray = yield this.getRecord(recordNameArg, recordTypeArg); - let myRecord = myRecordArray[0].value; - if (myRecord === expectedValue) { - return true; - } - else { - yield plugins.smartdelay.delayFor(500); - return yield doCheck(); - } - } - catch (err) { - yield plugins.smartdelay.delayFor(500); - return yield doCheck(); - } - } - else { - console.log('failed permanently...'); - return false; - } - }); - return yield doCheck(); - }); - } - /** - * get A Dns Record - */ - getRecordA(recordNameArg) { - return __awaiter(this, void 0, void 0, function* () { - return yield this.getOrdinaryRecord(recordNameArg, 'A'); - }); - } - /** - * get AAAA Record - */ - getRecordAAAA(recordNameArg) { - return __awaiter(this, void 0, void 0, function* () { - return yield this.getOrdinaryRecord(recordNameArg, 'AAAA'); - }); - } - /** - * gets a txt record - */ - getRecordTxt(recordNameArg) { - let done = q.defer(); - plugins.dns.resolveTxt(recordNameArg, (err, recordsArg) => { - if (err) { - done.reject(err); - return; - } - let responseArray = []; - for (let record of recordsArg) { - let recordAny = record; // fix wrong typings - responseArray.push({ - chunked: recordAny, - name: recordNameArg, - value: recordAny.join(' '), - type: 'TXT' - }); - } - done.resolve(responseArray); - }); - return done.promise; - } - /** - * get oridinary record - */ - getOrdinaryRecord(recordNameArg, recordTypeArg) { - let done = q.defer(); - plugins.dns.resolve(recordNameArg, recordTypeArg, (err, recordsArg) => { - if (err) { - done.reject(err); - return; - } - let responseArray = []; - for (let recordKey in recordsArg) { - responseArray.push({ - name: recordNameArg, - value: recordsArg[recordKey], - type: recordTypeArg - }); - } - done.resolve(responseArray); - }); - return done.promise; - } - /** - * set the DNS provider - */ - _setDnsProvider(dnsProvider) { - if (dnsProvider === 'google') { - this.dnsServerIp = '8.8.8.8'; - this.dnsServerPort = 53; - plugins.dns.setServers(['8.8.8.8', '8.8.4.4']); - } - else { - throw new Error('unknown dns provider'); - } - } -} -exports.Dnsly = Dnsly; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsNEJBQTJCO0FBQzNCLDJDQUEwQztBQXFCMUM7O0dBRUc7QUFDSDtJQUdFOztPQUVHO0lBQ0gsWUFBWSxpQkFBK0IsUUFBUTtRQUNqRCxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNHLFNBQVMsQ0FBRSxhQUFxQixFQUFFLGFBQTZCOztZQUNuRSxNQUFNLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO2dCQUN0QixLQUFLLEtBQUs7b0JBQ1IsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQTtnQkFDL0MsS0FBSyxHQUFHO29CQUNOLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUE7Z0JBQzdDLEtBQUssTUFBTTtvQkFDVCxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1lBQ2xELENBQUM7UUFDSCxDQUFDO0tBQUE7SUFFSyxtQkFBbUIsQ0FBRSxhQUFxQixFQUFFLGFBQTZCLEVBQUUsYUFBcUI7O1lBQ3BHLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQTtZQUNoQixJQUFJLE9BQU8sR0FBRztnQkFDWixFQUFFLENBQUMsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDbEIsUUFBUSxFQUFFLENBQUE7b0JBQ1YsSUFBSSxDQUFDO3dCQUNILElBQUksYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUE7d0JBQ3RFLElBQUksUUFBUSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7d0JBQ3JDLEVBQUUsQ0FBQyxD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 \ No newline at end of file diff --git a/docs/index.md b/docs/index.md index a287155..15e4435 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,13 +1,16 @@ # dnsly + smart dns methods written in TypeScript ## Availabililty + [![npm](https://pushrocks.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/dnsly) [![git](https://pushrocks.gitlab.io/assets/repo-button-git.svg)](https://GitLab.com/pushrocks/dnsly) [![git](https://pushrocks.gitlab.io/assets/repo-button-mirror.svg)](https://github.com/pushrocks/dnsly) [![docs](https://pushrocks.gitlab.io/assets/repo-button-docs.svg)](https://pushrocks.gitlab.io/dnsly/) ## Status for master + [![build status](https://GitLab.com/pushrocks/dnsly/badges/master/build.svg)](https://GitLab.com/pushrocks/dnsly/commits/master) [![coverage report](https://GitLab.com/pushrocks/dnsly/badges/master/coverage.svg)](https://GitLab.com/pushrocks/dnsly/commits/master) [![npm downloads per month](https://img.shields.io/npm/dm/dnsly.svg)](https://www.npmjs.com/package/dnsly) @@ -21,13 +24,15 @@ smart dns methods written in TypeScript ## Usage ```javascript -import * as dnsly from 'dnsly' +import * as dnsly from 'dnsly'; -let myDnsly = new dnsly.Dnsly('google') // uses Google DNS Servers e.g 8.8.8.8 -myDnsly.getRecord('example.com','AAAA') // returns promise - .then((record: dnsly.I_AAAA) => { // AAAA record for google.com, the I_AAAA will give you proper typings for the record return type - // do something - }) +let myDnsly = new dnsly.Dnsly('google'); // uses Google DNS Servers e.g 8.8.8.8 +myDnsly + .getRecord('example.com', 'AAAA') // returns promise + .then((record: dnsly.I_AAAA) => { + // AAAA record for google.com, the I_AAAA will give you proper typings for the record return type + // do something + }); ``` Use TypeScript for best in class instellisense. @@ -35,6 +40,6 @@ 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) -| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html) +> | By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html) [![repo-footer](https://pushrocks.gitlab.io/assets/repo-footer.svg)](https://push.rocks) diff --git a/npmextra.json b/npmextra.json index c4494f5..7ffba4e 100644 --- a/npmextra.json +++ b/npmextra.json @@ -1,7 +1,8 @@ { "npmci": { - "globalNpmTools": [ + "npmGlobalTools": [ "npmts" - ] + ], + "npmAccessLevel": "public" } } \ No newline at end of file diff --git a/package.json b/package.json index a740a04..0378640 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,12 @@ { - "name": "dnsly", + "name": "@pushrocks/smartdns", "version": "2.0.10", "description": "smart dns methods written in TypeScript", "main": "dist/index.js", "typings": "dist/index.d.ts", "scripts": { - "test": "(npmts)" + "test": "(ts-node -O '{\"lib\": [ \"es2015\" ]}' test/test.ts)", + "build": "(npmts)" }, "repository": { "type": "git", @@ -24,11 +25,11 @@ "homepage": "https://gitlab.com/pushrocks/dnsly#README", "dependencies": { "beautylog": "^6.1.10", - "smartdelay": "^1.0.3", - "smartq": "^1.1.6", - "typings-global": "^1.0.20" + "smartdelay": "^1.0.4", + "smartq": "^1.1.8" }, "devDependencies": { - "tapbundle": "^1.1.1" + "@types/node": "^10.0.8", + "tapbundle": "^2.0.0" } } diff --git a/readme.md b/readme.md index a22abe9..df2d4a6 100644 --- a/readme.md +++ b/readme.md @@ -1,29 +1,33 @@ -# dnsly +# @pushrocks/smartdns + smart dns methods written in TypeScript ## Availabililty -[![npm](https://pushrocks.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/dnsly) -[![git](https://pushrocks.gitlab.io/assets/repo-button-git.svg)](https://GitLab.com/pushrocks/dnsly) -[![git](https://pushrocks.gitlab.io/assets/repo-button-mirror.svg)](https://github.com/pushrocks/dnsly) -[![docs](https://pushrocks.gitlab.io/assets/repo-button-docs.svg)](https://pushrocks.gitlab.io/dnsly/) + +[![npm](https://pushrocks.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/@pushrocks/smartdns) +[![git](https://pushrocks.gitlab.io/assets/repo-button-git.svg)](https://GitLab.com/pushrocks/smartdns) +[![git](https://pushrocks.gitlab.io/assets/repo-button-mirror.svg)](https://github.com/pushrocks/smartdns) +[![docs](https://pushrocks.gitlab.io/assets/repo-button-docs.svg)](https://pushrocks.gitlab.io/smartdns/) ## Status for master -[![build status](https://GitLab.com/pushrocks/dnsly/badges/master/build.svg)](https://GitLab.com/pushrocks/dnsly/commits/master) -[![coverage report](https://GitLab.com/pushrocks/dnsly/badges/master/coverage.svg)](https://GitLab.com/pushrocks/dnsly/commits/master) -[![npm downloads per month](https://img.shields.io/npm/dm/dnsly.svg)](https://www.npmjs.com/package/dnsly) -[![Dependency Status](https://david-dm.org/pushrocks/dnsly.svg)](https://david-dm.org/pushrocks/dnsly) -[![bitHound Dependencies](https://www.bithound.io/github/pushrocks/dnsly/badges/dependencies.svg)](https://www.bithound.io/github/pushrocks/dnsly/master/dependencies/npm) -[![bitHound Code](https://www.bithound.io/github/pushrocks/dnsly/badges/code.svg)](https://www.bithound.io/github/pushrocks/dnsly) + +[![build status](https://GitLab.com/pushrocks/smartdns/badges/master/build.svg)](https://GitLab.com/pushrocks/smartdns/commits/master) +[![coverage report](https://GitLab.com/pushrocks/smartdns/badges/master/coverage.svg)](https://GitLab.com/pushrocks/smartdns/commits/master) +[![npm downloads per month](https://img.shields.io/npm/dm/@pushrocks/smartdns.svg)](https://www.npmjs.com/package/@pushrocks/smartdns) +[![Dependency Status](https://david-dm.org/pushrocks/smartdns.svg)](https://david-dm.org/pushrocks/smartdns) +[![bitHound Dependencies](https://www.bithound.io/github/pushrocks/smartdns/badges/dependencies.svg)](https://www.bithound.io/github/pushrocks/smartdns/master/dependencies/npm) +[![bitHound Code](https://www.bithound.io/github/pushrocks/smartdns/badges/code.svg)](https://www.bithound.io/github/pushrocks/smartdns) [![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) -| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html) +> | By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html) [![repo-footer](https://pushrocks.gitlab.io/assets/repo-footer.svg)](https://push.rocks) diff --git a/test/test.ts b/test/test.ts index a6a5ff5..bb48cd6 100644 --- a/test/test.ts +++ b/test/test.ts @@ -1,56 +1,68 @@ -import { expect, tap } from 'tapbundle' +import { expect, tap } from 'tapbundle'; -import * as dnsly from '../ts/index' +import * as smartdns from '../ts/index'; -let testDnsly: dnsly.Dnsly +let testDnsly: smartdns.Smartdns; tap.test('should create an instance of Dnsly', async () => { - testDnsly = new dnsly.Dnsly('google') - expect(testDnsly).to.be.instanceOf(dnsly.Dnsly) -}) + testDnsly = new smartdns.Smartdns('google'); + expect(testDnsly).to.be.instanceOf(smartdns.Smartdns); +}); tap.test('should get an A DNS Record', async () => { - return expect(testDnsly.getRecordA('dnsly_a.bleu.de')).to.eventually.deep.equal([{ - name: 'dnsly_a.bleu.de', - value: '127.0.0.1', - type: 'A' - }]) -}) + return expect(testDnsly.getRecordA('dnsly_a.bleu.de')).to.eventually.deep.equal([ + { + name: 'dnsly_a.bleu.de', + value: '127.0.0.1', + type: 'A' + } + ]); +}); tap.test('should get an AAAA Record', async () => { - return expect(testDnsly.getRecordAAAA('dnsly_aaaa.bleu.de')).to.eventually.deep.equal([{ - name: 'dnsly_aaaa.bleu.de', - value: '::1', - type: 'AAAA' - }]) -}) + return expect(testDnsly.getRecordAAAA('dnsly_aaaa.bleu.de')).to.eventually.deep.equal([ + { + name: 'dnsly_aaaa.bleu.de', + value: '::1', + type: 'AAAA' + } + ]); +}); tap.test('should get a txt record', async () => { - return expect(testDnsly.getRecordTxt('dnsly_txt.bleu.de')).to.eventually.deep.equal([{ - chunked: ['sometext_txt'], - name: 'dnsly_txt.bleu.de', - value: 'sometext_txt', - type: 'TXT' - }]) -}) + return expect(testDnsly.getRecordTxt('dnsly_txt.bleu.de')).to.eventually.deep.equal([ + { + chunked: ['sometext_txt'], + name: 'dnsly_txt.bleu.de', + value: 'sometext_txt', + type: 'TXT' + } + ]); +}); tap.test('should, get a mx record for a domain', async () => { - let res = await testDnsly.getRecord('google.com', 'MX') - console.log(res) -}) + let res = await testDnsly.getRecord('bleu.de', 'MX'); + console.log(res); +}); tap.test('should check until DNS is available', async () => { - return expect(testDnsly.checkUntilAvailable('dnsly_txt.bleu.de', 'TXT', 'sometext_txt')).to.eventually.be.true -}) + return expect(testDnsly.checkUntilAvailable('dnsly_txt.bleu.de', 'TXT', 'sometext_txt')).to + .eventually.be.true; +}); tap.test('should check until DNS is available an return false if it fails', async () => { - return expect(testDnsly.checkUntilAvailable('dnsly_txt.bleu.de', 'TXT', 'sometext_txt2')).to.eventually.be.false -}) + return expect(testDnsly.checkUntilAvailable('dnsly_txt.bleu.de', 'TXT', 'sometext_txt2')).to + .eventually.be.false; +}); tap.test('should check until DNS is available an return false if it fails', async () => { - return expect( - testDnsly.checkUntilAvailable('dnsly_txtNotThere.bleu.de', 'TXT', 'sometext_txt2') - ).to.eventually.be.false -}) + return expect(testDnsly.checkUntilAvailable('dnsly_txtNotThere.bleu.de', 'TXT', 'sometext_txt2')) + .to.eventually.be.false; +}); -tap.start() +tap.test('should get name server for hostname', async () => { + let result = await testDnsly.getNameServer('bleu.de'); + console.log(result); +}); + +tap.start(); diff --git a/ts/dnsly.plugins.ts b/ts/dnsly.plugins.ts index 7e7ce1f..5c6037f 100644 --- a/ts/dnsly.plugins.ts +++ b/ts/dnsly.plugins.ts @@ -1,10 +1,5 @@ -import 'typings-global' -import * as beautylog from 'beautylog' -import * as dns from 'dns' -import * as smartdelay from 'smartdelay' +import * as beautylog from 'beautylog'; +import * as dns from 'dns'; +import * as smartdelay from 'smartdelay'; -export { - beautylog, - dns, - smartdelay -} +export { beautylog, dns, smartdelay }; diff --git a/ts/index.ts b/ts/index.ts index 2a58eac..9f8904d 100644 --- a/ts/index.ts +++ b/ts/index.ts @@ -1,8 +1,9 @@ -import * as q from 'smartq' -import * as plugins from './dnsly.plugins' +import * as smartq from 'smartq'; +import * as plugins from './dnsly.plugins'; -export type TDnsProvider = 'google' -export type TDnsRecordType = 'A' +export type TDnsProvider = 'google'; +export type TDnsRecordType = + | 'A' | 'AAAA' | 'CNAME' | 'PTR' @@ -11,140 +12,142 @@ export type TDnsRecordType = 'A' | 'NS' | 'SOA' | 'SRV' - | 'TXT' + | 'TXT'; export interface IDnsRecord { - chunked?: string[] - name: string - type: TDnsRecordType - value: string + chunked?: string[]; + name: string; + type: TDnsRecordType; + value: string; } /** * class dnsly offers methods for working with dns from a dns provider like Google DNS */ -export class Dnsly { - dnsServerIp: string - dnsServerPort: number +export class Smartdns { + dnsServerIp: string; + dnsServerPort: number; /** * constructor for class dnsly */ constructor(dnsProviderArg: TDnsProvider = 'google') { - this._setDnsProvider(dnsProviderArg) + this._setDnsProvider(dnsProviderArg); } - /** - * gets a record - */ - async getRecord (recordNameArg: string, recordTypeArg: TDnsRecordType): Promise { - switch (recordTypeArg) { - case 'TXT': - return await this.getRecordTxt(recordNameArg) - case 'A': - return await this.getRecordA(recordNameArg) - case 'AAAA': - return await this.getRecordAAAA(recordNameArg) - } - } - - async checkUntilAvailable (recordNameArg: string, recordTypeArg: TDnsRecordType, expectedValue: string) { - let cycleArg = 0 + async checkUntilAvailable( + recordNameArg: string, + recordTypeArg: TDnsRecordType, + expectedValue: string + ) { + let cycleArg = 0; let doCheck = async () => { if (cycleArg < 30) { - cycleArg++ + cycleArg++; try { - let myRecordArray = await this.getRecord(recordNameArg, recordTypeArg) - let myRecord = myRecordArray[0].value + let myRecordArray = await this.getRecord(recordNameArg, recordTypeArg); + let myRecord = myRecordArray[0].value; if (myRecord === expectedValue) { - return true + return true; } else { - await plugins.smartdelay.delayFor(500) - return await doCheck() + await plugins.smartdelay.delayFor(500); + return await doCheck(); } } catch (err) { - await plugins.smartdelay.delayFor(500) - return await doCheck() + await plugins.smartdelay.delayFor(500); + return await doCheck(); } } else { - console.log('failed permanently...') - return false + console.log('failed permanently...'); + return false; } - } - return await doCheck() + }; + return await doCheck(); } /** * get A Dns Record */ - async getRecordA (recordNameArg: string): Promise { - return await this.getOrdinaryRecord(recordNameArg, 'A') + async getRecordA(recordNameArg: string): Promise { + return await this.getRecord(recordNameArg, 'A'); } /** * get AAAA Record */ - async getRecordAAAA (recordNameArg: string) { - return await this.getOrdinaryRecord(recordNameArg, 'AAAA') + async getRecordAAAA(recordNameArg: string) { + return await this.getRecord(recordNameArg, 'AAAA'); } /** * gets a txt record */ - getRecordTxt (recordNameArg: string): Promise { - let done = q.defer() + getRecordTxt(recordNameArg: string): Promise { + let done = smartq.defer(); plugins.dns.resolveTxt(recordNameArg, (err, recordsArg) => { if (err) { - done.reject(err) - return + done.reject(err); + return; } - let responseArray: IDnsRecord[] = [] + let responseArray: IDnsRecord[] = []; for (let record of recordsArg) { - let recordAny: any = record // fix wrong typings + let recordAny: any = record; // fix wrong typings responseArray.push({ chunked: recordAny, name: recordNameArg, value: recordAny.join(' '), type: 'TXT' - }) + }); } - done.resolve(responseArray) - }) - return done.promise + done.resolve(responseArray); + }); + return done.promise; } /** * get oridinary record */ - private getOrdinaryRecord (recordNameArg: string, recordTypeArg: TDnsRecordType): Promise { - let done = q.defer() + getRecord(recordNameArg: string, recordTypeArg: TDnsRecordType): Promise { + let done = smartq.defer(); plugins.dns.resolve(recordNameArg, recordTypeArg, (err, recordsArg) => { if (err) { - done.reject(err) - return + done.reject(err); + return; } - let responseArray: IDnsRecord[] = [] + let responseArray: IDnsRecord[] = []; for (let recordKey in recordsArg) { responseArray.push({ name: recordNameArg, value: recordsArg[recordKey], type: recordTypeArg - }) + }); } - done.resolve(responseArray) - }) - return done.promise + done.resolve(responseArray); + }); + return done.promise; + } + + getNameServer(domainNameArg: string) { + const done = smartq.defer(); + plugins.dns.resolveNs(domainNameArg, (err, result) => { + if (!err) { + done.resolve(result); + } else { + console.log(err); + done.reject(err); + } + }); } /** * set the DNS provider */ - private _setDnsProvider (dnsProvider: TDnsProvider) { + private _setDnsProvider(dnsProvider: TDnsProvider) { if (dnsProvider === 'google') { - this.dnsServerIp = '8.8.8.8' - this.dnsServerPort = 53 - plugins.dns.setServers(['8.8.8.8', '8.8.4.4']) + this.dnsServerIp = '8.8.8.8'; + this.dnsServerPort = 53; + plugins.dns.setServers(['8.8.8.8', '8.8.4.4']); } else { - throw new Error('unknown dns provider') + throw new Error('unknown dns provider'); } } } diff --git a/yarn.lock b/yarn.lock index 109a1bf..d73db85 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,72 +2,47 @@ # 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" +"@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@*": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.0.1.tgz#37fea779617cfec3fd2b19a0247e8bbdd5133bf6" +"@types/chai-string@^1.4.0": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@types/chai-string/-/chai-string-1.4.1.tgz#3a9d22716c27f2759bf272a4dbbdb593f18399e3" + dependencies: + "@types/chai" "*" -"@types/chai@^3.4.35": - version "3.5.2" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-3.5.2.tgz#c11cd2817d3a401b7ba0f5a420f35c56139b1c1e" +"@types/chai@*", "@types/chai@^4.1.2": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.1.3.tgz#b8a74352977a23b604c01aa784f5b793443fb7dc" "@types/lodash@^4.14.55": - version "4.14.71" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.71.tgz#0dc383f78981216ac76e2f2c3afd998e0450e4c1" + version "4.14.108" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.108.tgz#02656af3add2e5b3174f830862c47421c00ef817" -"@types/node@*": - version "8.0.17" - resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.17.tgz#677bc8c118cfb76013febb62ede1f31d2c7222a1" - -"@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" - -"@types/shelljs@^0.7.2": - version "0.7.2" - resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.7.2.tgz#c2bdb3fe80cd7a3da08750ca898ae44c589671f3" - dependencies: - "@types/node" "*" - -"@types/which@^1.0.28": - version "1.0.28" - resolved "https://registry.yarnpkg.com/@types/which/-/which-1.0.28.tgz#016e387629b8817bed653fe32eab5d11279c8df6" +"@types/node@^10.0.8": + version "10.0.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.0.8.tgz#37b4d91d4e958e4c2ba0be2b86e7ed4ff19b0858" 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" -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + dependencies: + color-convert "^1.9.0" 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@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + 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.7" - resolved "https://registry.yarnpkg.com/beautycolor/-/beautycolor-1.0.7.tgz#a4715738ac4c8221371e9cbeb5a6cc6d11ecbf7c" + 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" @@ -89,42 +64,36 @@ bindings@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.0.tgz#b346f6ecf6a95f5a815c5839fc7cdb22502f1ed7" -brace-expansion@^1.1.7: - version "1.1.8" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" - dependencies: - balanced-match "^1.0.0" - 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" +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.3.0: +chai-string@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/chai-string/-/chai-string-1.4.0.tgz#359140c051d36a4e4b1a5fc6b910152f438a8d49" -chai@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247" +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" - deep-eql "^0.1.3" - type-detect "^1.0.0" + 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" -chalk@^1.0.0, chalk@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" +chalk@^2.0.1, chalk@^2.1.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" -check-error@^1.0.2: +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" @@ -134,19 +103,25 @@ cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" -cli-spinners@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.0.0.tgz#ef987ed3d48391ac3dab9180b406a742180d6e6a" +cli-spinners@^1.0.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a" -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" +color-convert@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" dependencies: - type-detect "0.1.1" + color-name "^1.1.1" + +color-name@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + +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" @@ -164,13 +139,14 @@ early@^2.1.1: typings-global "^1.0.16" es-abstract@^1.5.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c" + version "1.11.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.11.0.tgz#cce87d518f0496893b1a30cd8461835535480681" dependencies: es-to-primitive "^1.1.1" - function-bind "^1.1.0" + function-bind "^1.1.1" + has "^1.0.1" is-callable "^1.1.3" - is-regex "^1.0.3" + is-regex "^1.0.4" es-to-primitive@^1.1.1: version "1.1.1" @@ -181,10 +157,10 @@ es-to-primitive@^1.1.1: is-symbol "^1.0.1" es6-error@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.0.2.tgz#eec5c726eacef51b7f6b73c20db6e1b13b069c98" + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" -escape-string-regexp@^1.0.2: +escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -196,30 +172,17 @@ foreach@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" +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" -function-bind@^1.0.2, function-bind@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" - -glob@^7.0.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -has-ansi@^2.0.0: +get-func-name@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - dependencies: - ansi-regex "^2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" has@^1.0.1: version "1.0.1" @@ -227,21 +190,6 @@ has@^1.0.1: dependencies: function-bind "^1.0.2" -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" - 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" @@ -250,7 +198,7 @@ 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.3: +is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" dependencies: @@ -260,10 +208,6 @@ is-symbol@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - leakage@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/leakage/-/leakage-0.3.0.tgz#15d698abdc76bbc6439601f4f3020e77e2d50c39" @@ -275,18 +219,18 @@ leakage@^0.3.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" + version "1.3.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" lodash@^4.17.4: - version "4.17.4" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + version "4.17.10" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" -log-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" +log-symbols@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" dependencies: - chalk "^1.0.0" + chalk "^2.0.1" memwatch-next@^0.3.0: version "0.3.0" @@ -296,22 +240,16 @@ memwatch-next@^0.3.0: nan "^2.3.2" mimic-fn@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - dependencies: - brace-expansion "^1.1.7" + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" 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" + version "2.10.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" object-keys@^1.0.8: version "1.0.11" @@ -324,12 +262,6 @@ object.getownpropertydescriptors@^2.0.3: define-properties "^1.1.2" es-abstract "^1.5.1" -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - dependencies: - wrappy "1" - onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" @@ -337,38 +269,22 @@ onetime@^2.0.0: mimic-fn "^1.0.0" ora@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-1.3.0.tgz#80078dd2b92a934af66a3ad72a5b910694ede51a" + version "1.4.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-1.4.0.tgz#884458215b3a5d4097592285f93321bb7a79e2e5" dependencies: - chalk "^1.1.1" + chalk "^2.1.0" cli-cursor "^2.1.0" - cli-spinners "^1.0.0" - log-symbols "^1.0.2" + cli-spinners "^1.0.1" + log-symbols "^2.1.0" -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" +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" -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.4.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86" - dependencies: - path-parse "^1.0.5" - restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -376,36 +292,24 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" -semver@^5.3.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" - -shelljs@^0.7.8: - version "0.7.8" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3" - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" -smartchai@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/smartchai/-/smartchai-1.0.3.tgz#de6d010bb8b5aef24cb70b31a5f5334e8c41b72f" +smartchai@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/smartchai/-/smartchai-2.0.1.tgz#d20f17221f0e3c6c3473600b78ddfba0ab0ea762" 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" + "@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.3" - resolved "https://registry.yarnpkg.com/smartdelay/-/smartdelay-1.0.3.tgz#5fd44dad77262d110702f0293efa80c072cfb579" +smartdelay@^1.0.3, smartdelay@^1.0.4: + 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" @@ -418,59 +322,35 @@ smartenv@^2.0.0: smartq "^1.1.1" typings-global "^1.0.14" -smartq@^1.1.1, smartq@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/smartq/-/smartq-1.1.6.tgz#0c1ff4336d95e95b4f1fdd8ccd7e2c5a323b8412" +smartq@^1.1.1, smartq@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/smartq/-/smartq-1.1.8.tgz#7e2f3b9739eb5d6c9f45f2a86e339ec81e49e8d2" dependencies: - typings-global "^1.0.19" util.promisify "^1.0.0" -smartshell@^1.0.6: - version "1.0.13" - resolved "https://registry.yarnpkg.com/smartshell/-/smartshell-1.0.13.tgz#277b34e6624df70003e0e3a6c900cd5ebab7eb92" +supports-color@^5.3.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" dependencies: - "@types/shelljs" "^0.7.2" - "@types/which" "^1.0.28" - shelljs "^0.7.8" - smartq "^1.1.6" - typings-global "^1.0.19" - which "^1.2.14" + has-flag "^3.0.0" -strip-ansi@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - dependencies: - ansi-regex "^2.0.0" - -supports-color@^2.0.0: +tapbundle@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - -tapbundle@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/tapbundle/-/tapbundle-1.1.1.tgz#ec4172c0e82a77b1f6133fef2606311ede28a62d" + resolved "https://registry.yarnpkg.com/tapbundle/-/tapbundle-2.0.0.tgz#79fce68ff185c786fabaf6eb589a4afc7d2714b7" dependencies: early "^2.1.1" leakage "^0.3.0" - smartchai "^1.0.3" + smartchai "^2.0.0" smartdelay "^1.0.3" smartq "^1.1.1" - typings-global "^1.0.19" -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@^4.0.0: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" -type-detect@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2" - -typings-global@^1.0.14, typings-global@^1.0.16, typings-global@^1.0.19, typings-global@^1.0.20: - version "1.0.20" - resolved "https://registry.yarnpkg.com/typings-global/-/typings-global-1.0.20.tgz#3da769c54db538247c5d877d1d9e97eb2ec981ff" - dependencies: - semver "^5.3.0" - smartshell "^1.0.6" +typings-global@^1.0.14, typings-global@^1.0.16: + 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" @@ -478,13 +358,3 @@ util.promisify@^1.0.0: dependencies: define-properties "^1.1.2" object.getownpropertydescriptors "^2.0.3" - -which@^1.2.14: - version "1.2.14" - resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" - dependencies: - isexe "^2.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"