diff --git a/package.json b/package.json index edb9d7a..fa62275 100644 --- a/package.json +++ b/package.json @@ -11,10 +11,10 @@ "devDependencies": { "@dxcli/dev-semantic-release": "^0.1.0", "@dxcli/dev-tslint": "^0.0.15", - "@types/chai": "^4.1.1", + "@types/chai": "^4.1.2", "@types/chai-as-promised": "^7.1.0", - "@types/lodash": "^4.14.93", - "@types/mocha": "^2.2.46", + "@types/lodash": "^4.14.96", + "@types/mocha": "^2.2.47", "@types/node": "^9.3.0", "chai": "^4.1.2", "chai-as-promised": "^7.1.1", @@ -27,7 +27,6 @@ "nps-utils": "^1.5.0", "nyc": "^11.4.1", "ts-node": "^4.1.0", - "typedoc": "^0.9.0", "typescript": "^2.6.2" }, "engines": { diff --git a/src/base.ts b/src/base.ts new file mode 100644 index 0000000..a319265 --- /dev/null +++ b/src/base.ts @@ -0,0 +1,102 @@ +// tslint:disable callable-types +// tslint:disable no-unused + +import * as mocha from 'mocha' + +export interface Next { + (output: O): Promise +} + +export interface Plugin { + (next: Next, input: any, arg1?: A1, arg2?: A2, arg3?: A3, arg4?: A4): Promise +} + +export interface Plugins {[k: string]: [object]} + +export interface Base { + (): Fancy<{}, T> + register(k: K, v: Plugin): Base +} + +export interface Callback { + (this: T, context: U): any +} +export interface MochaCallback extends Callback {} + +export type Fancy = { + it: { + (expectation: string, callback?: MochaCallback): mocha.ITest + only(expectation: string, callback?: MochaCallback): mocha.ITest + skip(expectation: string, callback?: MochaCallback): void + } + run(opts: {addToContext: true}, cb: (context: I) => Promise | O): Fancy + run(cb: (context: I) => any): Fancy +} & {[P in keyof T]: (arg1?: T[P][1], arg2?: T[P][2], arg3?: T[P][3], arg4?: T[P][4]) => Fancy} + +const fancy = (plugins: any, chain: Chain = []): Fancy => { + const __it = (fn: typeof it) => (expectation: string, callback: MochaCallback): any => { + return fn(expectation, async function () { + let ctx = {plugins} + const run = (extra = {}): any => { + ctx = assignWithProps({}, ctx, extra) + const [next, args] = chain.shift() || [null, null] + if (next) return next(run, ctx, ...args as any[]) + if (callback) callback.call(this, ctx) + } + await run() + }) + } + const _it = __it(it) as Fancy['it'] + _it.only = __it(it.only as any) + _it.skip = __it(it.skip as any) + return { + ...Object.entries(plugins) + .reduce((fns, [k, v]) => { + fns[k] = (...args: any[]) => { + return fancy(plugins, [...chain, [v, args]]) + } + return fns + }, {} as any), + run(opts: any, cb: any) { + if (!cb) { + cb = opts + opts = {} + } + return fancy(plugins, [...chain, [async (input: any, next: any) => { + let output = await cb(input) + if (opts.addToContext) next(output) + else next() + }, []]]) + }, + it: _it, + } +} + +function base(plugins: any): Base { + const f = (() => fancy(plugins)) as any + f.register = (k: string, v: any) => base({...plugins as any, [k]: v}) + return f +} + +export type Chain = [Plugin, any[]][] + +function assignWithProps(target: any, ...sources: any[]) { + sources.forEach(source => { + if (!source) return + let descriptors = Object.keys(source).reduce((descriptors: any, key) => { + descriptors[key] = Object.getOwnPropertyDescriptor(source, key) + return descriptors + }, {}) + // by default, Object.assign copies enumerable Symbols too + Object.getOwnPropertySymbols(source).forEach(sym => { + let descriptor = Object.getOwnPropertyDescriptor(source, sym) as any + if (descriptor.enumerable) { + descriptors[sym] = descriptor + } + }) + Object.defineProperties(target, descriptors) + }) + return target +} + +export default base<{}>({}) diff --git a/src/catch.ts b/src/catch.ts new file mode 100644 index 0000000..119ab2c --- /dev/null +++ b/src/catch.ts @@ -0,0 +1,20 @@ +import * as _ from 'lodash' + +import {Plugin} from '.' +import {expect} from './chai' + +export default (async (next, __, arg) => { + try { + await next({}) + } catch (err) { + if (_.isRegExp(arg)) { + expect(err.message).to.match(arg) + } else if (_.isString(arg)) { + expect(err.message).to.equal(arg) + } else if (arg) { + arg(err) + } else { + throw new Error('no arg provided to catch') + } + } +}) as Plugin<{}, RegExp | string | ((err: Error) => any)> diff --git a/src/env.ts b/src/env.ts index 760107d..391c222 100644 --- a/src/env.ts +++ b/src/env.ts @@ -1,10 +1,11 @@ -const original = process.env +import {Plugin} from '.' -export default (env: {[k: string]: string}) => ({ - before() { - process.env = {...env} - }, - after() { +export default (async (next, _, env) => { + const original = process.env + process.env = {...env} + try { + await next({}) + } finally { process.env = original } -}) +}) as Plugin<{}, {[k: string]: string}> diff --git a/src/index.ts b/src/index.ts index e190878..06393fa 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,10 +1,21 @@ -export * from './chai' +import base, {Base, Fancy, Next, Plugin} from './base' +import _catch from './catch' +import env from './env' +import mock from './mock' +import {stderr, stdout} from './stdmock' -import test, {Test, TestBase} from './test' +export const fancy = base +.register('stdout', stdout) +.register('stderr', stderr) +.register('mock', mock) +.register('env', env) +.register('catch', _catch) export { - Test, - TestBase, - test, + Base, + Fancy, + Plugin, + Next, } -export default test +export default fancy +export * from './chai' diff --git a/src/mock.ts b/src/mock.ts index 19587e7..d900d8e 100644 --- a/src/mock.ts +++ b/src/mock.ts @@ -1,17 +1,16 @@ import * as _ from 'lodash' +import {Next} from './base' + /** * mocks an object's property */ -export default (object: any, path: string, value: any) => { +export default async (next: Next<{}>, __: any, object: any, path: string, value: any) => { let original = _.get(object, path) - return { - before() { - original = _.get(object, path) - _.set(object, path, value) - }, - finally() { - _.set(object, path, original) - } + try { + _.set(object, path, value) + await next({}) + } finally { + _.set(object, path, original) } } diff --git a/src/stdmock.ts b/src/stdmock.ts index 8ec95c2..a3ab2ed 100644 --- a/src/stdmock.ts +++ b/src/stdmock.ts @@ -1,38 +1,21 @@ import * as mock from 'stdout-stderr' -export interface Stdout { - before(): {stdout: string} - after(): void - catch(): void - finally(): void -} +import {Plugin} from './base' -export interface Stderr { - before(): {stderr: string} - after(): void - catch(): void - finally(): void +export type Return = { + readonly [P in T]: string } -const create = (std: T) => () => { - const _finally = () => mock[std].stop() - return { - before() { - mock[std].start() - if (std === 'stdout') { - return { - get stdout() { return mock.stdout.output } - } - } - return { - get stderr() { return mock.stderr.output } - } - }, - after: _finally, - catch: _finally, - finally: _finally, +const create = (std: T) => (async next => { + mock[std].start() + try { + await next({ + get [std]() { return mock[std].output } + } as Return) + } finally { + mock[std].stop() } -} +}) as Plugin> -export const stdout = create('stdout') as () => Stdout -export const stderr = create('stderr') as () => Stderr +export const stdout = create('stdout') +export const stderr = create('stderr') diff --git a/src/test.ts b/src/test.ts deleted file mode 100644 index 64685c7..0000000 --- a/src/test.ts +++ /dev/null @@ -1,217 +0,0 @@ -import * as mocha from 'mocha' - -import env from './env' -import mock from './mock' -import {stderr, stdout} from './stdmock' - -export type Extension = (a1: A1, a2: A2, a3: A3, a4: A4) => Filters -export interface Filters { - before?(input: any): Promise | C | void - after?(context: C): Promise | any - catch?(context: C, err: Error): Promise | any - finally?(context: C): Promise | any -} - -export type MochaDone = (error?: any) => any - -// export type TestCallback = (this: T, context: C & {done: MochaDone}) => TR -export type TestCallback = (this: T, context: C) => TR -export type ItCallback = TestCallback | any> -export type DescribeCallback = TestCallback - -export type Extensions = [{[k: string]: object}, {[k: string]: [object, any]}] - -export interface It { - (expectation: string, cb?: ItCallback): mocha.ITest - only(expectation: string, cb?: ItCallback): mocha.ITest - skip(expectation: string, cb?: ItCallback): void -} - -export interface Describe { - (expectation: string, cb: DescribeCallback): mocha.ISuite - only(expectation: string, cb: DescribeCallback): mocha.ISuite - skip(expectation: string, cb?: (this: mocha.ISuiteCallbackContext) => void): void -} - -export interface TestBase { - /** - * wrapper for mocha's describe() - */ - describe: Describe - /** - * wrapper for mocha's it() - */ - it: It - /** - * currently loaded filters - */ - filters: Filters[] - /** - * add your own filters - * - * @example - * import test from 'fancy-mocha' - * - * // this will run before each command and add {foo: 100} to the context object in the callback - * test.extend(myopts => { - * return { - * before(): { - * console.log('do something with myopts') - * return {foo: 100} - * } - * } - * }) - */ - extend(key: K, filter: Extension): Test, C> - extend(key: K, filter: Extension): Test, C> - extend(key: K, filter: Extension): Test, C> - extend(key: K, filter: Extension): Test, C> - extend(key: K, filter: Extension): Test, C> -} -export type Test = TestBase & - {[P in keyof E[0]]: FilterFn0} & - {[P in keyof E[1]]: FilterFn1} & - {[P in keyof E[1]]: FilterFn2} & - {[P in keyof E[1]]: FilterFn3} & - {[P in keyof E[1]]: FilterFn4} - -export type AddExtension0 = [E[0] & {[P in K]: O}, E[1]] -export type AddExtension1 = [E[0], E[1] & {[P in K]: [O, A1]}] -export type AddExtension2 = [E[0], E[1] & {[P in K]: [O, A1, A2]}] -export type AddExtension3 = [E[0], E[1] & {[P in K]: [O, A1, A2, A3]}] -export type AddExtension4 = [E[0], E[1] & {[P in K]: [O, A1, A2, A3, A4]}] -export type FilterFn0 = () => Test -export type FilterFn1 = (a1?: A1) => Test -export type FilterFn2 = (a1?: A1, a2?: A2) => Test -export type FilterFn3 = (a1?: A1, a2?: A2, a3?: A3) => Test -export type FilterFn4 = (a1?: A1, a2?: A2, a3?: A3, a4?: A4) => Test - -// This is an assign function that copies full descriptors -function completeAssign(target: any, ...sources: any[]) { - if (!target) target = sources.find(f => !!f) - sources.forEach(source => { - if (!source) return - let descriptors: any = Object.keys(source).reduce((descriptors: any, key) => { - descriptors[key] = Object.getOwnPropertyDescriptor(source, key) - return descriptors - }, {}) - // by default, Object.assign copies enumerable Symbols too - Object.getOwnPropertySymbols(source).forEach(sym => { - let descriptor: any = Object.getOwnPropertyDescriptor(source, sym) - if (descriptor.enumerable) { - descriptors[sym] = descriptor - } - }) - Object.defineProperties(target, descriptors) - }) - return target -} - -const test = (previous?: Test): TestBase => { - const filters: Filters[] = previous ? previous.filters : [] - const before = async () => { - let context = {} - for (let f of filters) { - if (f.before) { - context = completeAssign(context, await f.before(context)) - } - } - return context - } - const _catch = async (err: Error, context?: object) => { - let handled = false - for (let f of filters) { - if (f.catch) { - await f.catch(context, err) - handled = true - } - } - return handled - } - const _finally = async (context?: object) => { - for (let f of filters) { - if (f.finally) await f.finally(context) - } - } - const after = async (context?: object) => { - for (let f of filters) { - if (f.after) await f.after(context) - } - } - - const __it = (cb?: ItCallback) => async function (this: mocha.ITestCallbackContext) { - let error - try { - const context = await before() - if (cb) await cb.call(this, context) - await after(context) - } catch (err) { - error = err - if (await _catch(err)) { - error = false - } - } finally { - await _finally() - } - if (error) throw error - } - const _it = Object.assign((expectation: string, cb?: ItCallback): Mocha.ITest => { - return it(expectation, __it(cb)) - }, { - only(expectation: string, cb?: ItCallback): Mocha.ITest { - return it.only(expectation, __it(cb)) - }, - skip(expectation: string, cb?: ItCallback): void { - return it.skip(expectation, cb) - }, - }) - - const __describe = (cb?: ItCallback) => async function (this: mocha.ITestCallbackContext) { - let error - beforeEach(before) - afterEach(after) - try { - if (cb) await cb.call(this) - } catch (err) { - error = err - await _catch(err) - } finally { - await _finally() - } - if (error) throw error - } - const _describe = Object.assign((expectation: string, cb: DescribeCallback): Mocha.ISuite => { - return describe(expectation, __describe(cb)) - }, { - only(expectation: string, cb: DescribeCallback): Mocha.ISuite { - return describe.only(expectation, __describe(cb)) - }, - skip(expectation: string, cb: (this: mocha.ISuiteCallbackContext) => void): void { - return describe.skip(expectation, cb) - }, - }) - - return { - ...previous, - it: _it, - describe: _describe, - filters, - extend(this: any, key: string, extension: Extension) { - return test({ - ...this, - [key](...opts: any[]) { - return test({ - ...this, - filters: this.filters.concat([(extension as any)(...opts)]), - } as any) - } - }) - }, - } as any -} - -export default test() -.extend('env', env) -.extend('mock', mock) -.extend('stdout', stdout) -.extend('stderr', stderr) diff --git a/test/catch.test.ts b/test/catch.test.ts new file mode 100644 index 0000000..d8457eb --- /dev/null +++ b/test/catch.test.ts @@ -0,0 +1,25 @@ +// tslint:disable no-console + +import {expect, fancy} from '../src' + +describe('catch', () => { + fancy() + .catch(/foo/) + .it('uses regex', () => { + throw new Error('foobar') + }) + + fancy() + .catch('foobar') + .it('uses string', () => { + throw new Error('foobar') + }) + + fancy() + .catch(err => { + expect(err.message).to.match(/foo/) + }) + .it('uses function', () => { + throw new Error('foobar') + }) +}) diff --git a/test/env.test.ts b/test/env.test.ts index 4a77cb9..9262f71 100644 --- a/test/env.test.ts +++ b/test/env.test.ts @@ -1,12 +1,12 @@ // tslint:disable no-console -import {expect, test} from '../src' +import {expect, fancy} from '../src' -describe('stdout', () => { - test +describe('env', () => { + fancy() .env({foo: 'BARBAZ'}) .stdout() - .it('logs', output => { + .it('mocks', output => { console.log(process.env.foo) expect(output.stdout).to.equal('BARBAZ\n') }) diff --git a/test/mock.test.ts b/test/mock.test.ts index 89e1fba..af2ecba 100644 --- a/test/mock.test.ts +++ b/test/mock.test.ts @@ -2,12 +2,12 @@ import * as os from 'os' -import {expect, test} from '../src' +import {expect, fancy} from '../src' const platform = os.platform() -describe('stdout', () => { - test +describe('mock', () => { + fancy() .mock(os, 'platform', () => 'foobar') .stdout() .it('sets os', output => { @@ -15,7 +15,7 @@ describe('stdout', () => { expect(output.stdout).to.equal('foobar\n') }) - test + fancy() .stdout() .it('resets os', output => { console.log(os.platform()) diff --git a/test/stdmock.test.ts b/test/stdmock.test.ts index 99ec928..0e2734b 100644 --- a/test/stdmock.test.ts +++ b/test/stdmock.test.ts @@ -1,19 +1,18 @@ // tslint:disable no-console -import {expect, test} from '../src' +import {expect, fancy} from '../src' describe('stdout', () => { - test + fancy() .stderr() .stdout() .it('logs', output => { - console.error('about to write') console.log('foo') console.error('written') expect(output.stdout).to.equal('foo\n') }) - test + fancy() .stdout() .it('logs twice', output => { console.log('foo') @@ -22,14 +21,14 @@ describe('stdout', () => { expect(output.stdout).to.equal('foo\nbar\n') }) - test + fancy() .stderr() .it('writes to stderr', output => { console.error('foo') expect(output.stderr).to.equal('foo\n') }) - test + fancy() .stdout() .stderr() .it('writes to both', output => { diff --git a/yarn.lock b/yarn.lock index e53450c..a2464a0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -239,54 +239,26 @@ dependencies: "@types/chai" "*" -"@types/chai@*", "@types/chai@^4.1.1": +"@types/chai@*": version "4.1.1" resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.1.1.tgz#15f1257fab17b7acb9c413f9f88d3d87f834d11e" -"@types/fs-extra@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-4.0.0.tgz#1dd742ad5c9bce308f7a52d02ebc01421bc9102f" - dependencies: - "@types/node" "*" - -"@types/handlebars@4.0.31": - version "4.0.31" - resolved "https://registry.yarnpkg.com/@types/handlebars/-/handlebars-4.0.31.tgz#a7fba66fafe42713aee88eeca8db91192efe6e72" - -"@types/highlight.js@9.1.8": - version "9.1.8" - resolved "https://registry.yarnpkg.com/@types/highlight.js/-/highlight.js-9.1.8.tgz#d227f18bcb8f3f187e16965f2444859a04689758" - -"@types/lodash@4.14.74": - version "4.14.74" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.74.tgz#ac3bd8db988e7f7038e5d22bd76a7ba13f876168" - -"@types/lodash@^4.14.93": - version "4.14.93" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.93.tgz#a6d2a1e1601a3c29196f38ef1990b68a9afa1e1c" - -"@types/marked@0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@types/marked/-/marked-0.3.0.tgz#583c223dd33385a1dda01aaf77b0cd0411c4b524" +"@types/chai@^4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.1.2.tgz#f1af664769cfb50af805431c407425ed619daa21" -"@types/minimatch@2.0.29": - version "2.0.29" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-2.0.29.tgz#5002e14f75e2d71e564281df0431c8c1b4a2a36a" +"@types/lodash@^4.14.96": + version "4.14.96" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.96.tgz#49a402bb6984af7dd9a48cea3781744a3774bff1" -"@types/mocha@^2.2.46": - version "2.2.46" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.46.tgz#b04713f7759d1cf752effdaae7b3969e285ebc16" +"@types/mocha@^2.2.47": + version "2.2.47" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.47.tgz#30bbd880834d4af0f609025f282a69b8d4458f06" -"@types/node@*", "@types/node@^9.3.0": +"@types/node@^9.3.0": version "9.3.0" resolved "https://registry.yarnpkg.com/@types/node/-/node-9.3.0.tgz#3a129cda7c4e5df2409702626892cb4b96546dd5" -"@types/shelljs@0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.7.0.tgz#229c157c6bc1e67d6b990e6c5e18dbd2ff58cff0" - dependencies: - "@types/node" "*" - "@types/strip-bom@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2" @@ -1780,14 +1752,6 @@ fs-extra@^1.0.0: jsonfile "^2.1.0" klaw "^1.0.0" -fs-extra@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - fs-extra@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" @@ -1997,7 +1961,7 @@ growl@1.10.3: version "1.10.3" resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f" -handlebars@^4.0.2, handlebars@^4.0.3, handlebars@^4.0.6: +handlebars@^4.0.2, handlebars@^4.0.3: version "4.0.11" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" dependencies: @@ -2082,10 +2046,6 @@ he@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" -highlight.js@^9.0.0: - version "9.12.0" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e" - hoek@4.x.x: version "4.2.0" resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" @@ -2745,7 +2705,7 @@ lodash@4.17.2: version "4.17.2" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.2.tgz#34a3055babe04ce42467b607d700072c7ff6bf42" -lodash@^4.0.0, lodash@^4.13.1, lodash@^4.17.4, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1: +lodash@^4.0.0, lodash@^4.17.4, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -2809,7 +2769,7 @@ marked-terminal@^2.0.0: lodash.assign "^4.2.0" node-emoji "^1.4.1" -marked@^0.3.5, marked@^0.3.9: +marked@^0.3.9: version "0.3.12" resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.12.tgz#7cf25ff2252632f3fe2406bde258e94eee927519" @@ -2916,7 +2876,7 @@ mimic-fn@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: +"minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -3896,14 +3856,6 @@ shelljs@0.7.6: interpret "^1.0.0" rechoir "^0.6.2" -shelljs@^0.7.0: - 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.0, signal-exit@^3.0.1, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -4450,36 +4402,6 @@ typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" -typedoc-default-themes@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/typedoc-default-themes/-/typedoc-default-themes-0.5.0.tgz#6dc2433e78ed8bea8e887a3acde2f31785bd6227" - -typedoc@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.9.0.tgz#159bff7c7784ce5b91d86f3e4cc8928e62040957" - dependencies: - "@types/fs-extra" "4.0.0" - "@types/handlebars" "4.0.31" - "@types/highlight.js" "9.1.8" - "@types/lodash" "4.14.74" - "@types/marked" "0.3.0" - "@types/minimatch" "2.0.29" - "@types/shelljs" "0.7.0" - fs-extra "^4.0.0" - handlebars "^4.0.6" - highlight.js "^9.0.0" - lodash "^4.13.1" - marked "^0.3.5" - minimatch "^3.0.0" - progress "^2.0.0" - shelljs "^0.7.0" - typedoc-default-themes "^0.5.0" - typescript "2.4.1" - -typescript@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.4.1.tgz#c3ccb16ddaa0b2314de031e7e6fee89e5ba346bc" - typescript@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.6.2.tgz#3c5b6fd7f6de0914269027f03c0946758f7673a4"