diff --git a/.travis.yml b/.travis.yml index a0e0a4b..b94dc99 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,8 @@ sudo: false language: node_js node_js: - - '6' - - '7' - - 'node' + - '8' + - '10' notifications: email: on_success: change diff --git a/package.json b/package.json index 14fe047..e464eb0 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,8 @@ }, "author": "Aaron Jensen", "files": [ - "dist" + "dist", + "types" ], "main": "dist/index.js", "keywords": [ @@ -19,7 +20,8 @@ "declarative" ], "scripts": { - "test": "gulp", + "dtslint": "dtslint --localTs node_modules/typescript/lib types", + "test": "gulp && yarn -s dtslint", "test:watch": "gulp watch", "prepublish": "gulp prepublish", "perf-server": "`npm bin`/webpack-dev-server --config perf/webpack.config.js --hot" @@ -32,12 +34,17 @@ "lodash": "^4.2.0" }, "devDependencies": { + "@types/chai": "^4.1.7", + "@types/lodash": "^4.14.119", + "@types/mocha": "^5.2.5", + "@types/node": "^10.12.18", "babel-core": "^6.4.0", "babel-loader": "^6.2.1", "babel-preset-es2015": "^6.3.13", "babel-preset-stage-2": "^6.3.13", "benchmark": "^2.1.4", "chai": "^4.2.0", + "dtslint": "^0.9.8", "eslint": "^4.19.1", "eslint-config-airbnb-base": "^11.1.3", "eslint-config-prettier": "^4.0.0", @@ -59,8 +66,10 @@ "phantomjs-prebuilt": "^2.1.14", "prettier": "^1.1.0", "rimraf": "^2.4.2", + "typescript": "^3.6.3", "webpack": "^1.10.5", "webpack-dev-server": "^3.1.11", "webpack-stream": "^2.1.0" - } + }, + "types": "types" } diff --git a/types/constant.d.ts b/types/constant.d.ts new file mode 100644 index 0000000..9a80a45 --- /dev/null +++ b/types/constant.d.ts @@ -0,0 +1,30 @@ +/** + * Returns a function that always returns the supplied value. + * + * Useful for replacing an object outright rather than merging it. + * + * @memberOf u + * + * @example + * var alwaysFour = u.constant(4); + * expect(alwaysFour(32)).toEqual(4); + * + * @example + * var user = { + * name: 'Mitch', + * favorites: { + * band: 'Nirvana', + * movie: 'The Matrix' + * } + * }; + * + * var newFavorites = { + * band: 'Coldplay' + * }; + * + * var result = u({ favorites: u.constant(newFavorites) }, user); + * + * expect(result).toEqual({ name: 'Mitch', favorites: { band: 'Coldplay' } }); + */ +export declare function constant(value: A): (...args: any[]) => A; +export default constant; diff --git a/types/freeze.d.ts b/types/freeze.d.ts new file mode 100644 index 0000000..e21475a --- /dev/null +++ b/types/freeze.d.ts @@ -0,0 +1,12 @@ +/** + * Deeply freeze a plain javascript object. + * + * If `process.env.NODE_ENV === 'production'`, this returns the original object + * without freezing. + * + * Or if `process.env.UPDEEP_MODE === 'dangerously_never_freeze'`, this returns the original object + * without freezing. + * + */ +declare function freeze(object: O): O; +export default freeze; diff --git a/types/if.d.ts b/types/if.d.ts new file mode 100644 index 0000000..b1ba4bf --- /dev/null +++ b/types/if.d.ts @@ -0,0 +1,13 @@ +import { Predicate, MergedUpdate, TruePredicate, FalsePredicate } from './types'; +export declare function uIf(predicate: FalsePredicate, trueUpdates: TU, object: O): O; +export declare function uIf(predicate: TruePredicate, trueUpdates: TU, object: O): MergedUpdate; +interface CurriedIf { + (predicate: TruePredicate, trueUpdates: TU, object: O): MergedUpdate; + (predicate: FalsePredicate, trueUpdates: TU, object: O): O; + (predicate: Predicate, trueUpdates: TU, object: O): MergedUpdate | O; + (predicate: TruePredicate, trueUpdates: TU): (object: O) => MergedUpdate; + (predicate: FalsePredicate, trueUpdates: TU): (object: O) => O; + (predicate: Predicate, trueUpdates: TU): (object: O) => MergedUpdate | O; +} +declare const _default: CurriedIf; +export default _default; diff --git a/types/ifElse.d.ts b/types/ifElse.d.ts new file mode 100644 index 0000000..6eea6b1 --- /dev/null +++ b/types/ifElse.d.ts @@ -0,0 +1,13 @@ +import { Predicate, MergedUpdate, FalsePredicate, TruePredicate } from './types'; +export declare function updateIfElse(predicate: TruePredicate, trueUpdates: TU, falseUpdates: FU, object: S): MergedUpdate; +export declare function updateIfElse(predicate: FalsePredicate, trueUpdates: TU, falseUpdates: FU, object: S): MergedUpdate; +interface CurriedIfElse { + (predicate: TruePredicate, trueUpdates: TU, falseUpdates: FU, object: S): MergedUpdate; + (predicate: FalsePredicate, trueUpdates: TU, falseUpdates: FU, object: S): MergedUpdate; + (predicate: Predicate, trueUpdates: TU, falseUpdates: FU, object: S): MergedUpdate | MergedUpdate; + (predicate: TruePredicate, trueUpdates: TU, falseUpdates: FU): (object: S) => MergedUpdate; + (predicate: FalsePredicate, trueUpdates: TU, falseUpdates: FU): (object: S) => MergedUpdate; + (predicate: Predicate, trueUpdates: TU, falseUpdates: FU): (object: S) => MergedUpdate | MergedUpdate; +} +declare const _default: CurriedIfElse; +export default _default; diff --git a/types/index.d.ts b/types/index.d.ts new file mode 100644 index 0000000..15a1c34 --- /dev/null +++ b/types/index.d.ts @@ -0,0 +1,30 @@ +import { constant } from './constant'; +import freeze from './freeze'; +import is from './is'; +import _if from './if'; +import ifElse from './ifElse'; +import map from './map'; +import omit from './omit'; +import omitBy from './omitBy'; +import reject from './reject'; +import update, { omitted } from './update'; +import updateIn from './updateIn'; +import withDefault from './withDefault'; +import { _ as placeholder } from './util/curry'; +declare const u: { + omit: typeof omit; + omitBy: typeof omitBy; + constant: typeof constant; + freeze: typeof freeze; + is: typeof is; + update: typeof update; + updateIn: typeof updateIn; + reject: typeof reject; + map: typeof map; + withDefault: typeof withDefault; + ifElse: typeof ifElse; + if: typeof _if; + omitted: typeof omitted; + _: typeof placeholder; +} & typeof update; +export default u; diff --git a/types/is.d.ts b/types/is.d.ts new file mode 100644 index 0000000..a3632c1 --- /dev/null +++ b/types/is.d.ts @@ -0,0 +1,9 @@ +import { Path } from './types'; +export declare function is(path: Path, predicate: any, object: any): boolean; +interface CurriedIs { + (path: Path, predicate: any, object: any): boolean; + (path: Path, predicate: any): (object: any) => boolean; + (path: Path): (predicate: any) => (object: any) => boolean; +} +declare const _default: CurriedIs; +export default _default; diff --git a/types/map.d.ts b/types/map.d.ts new file mode 100644 index 0000000..e8f1549 --- /dev/null +++ b/types/map.d.ts @@ -0,0 +1,11 @@ +import { MergedUpdate } from './types'; +declare type Mapped = { + [K in keyof O]: MergedUpdate; +}; +export declare function map(iteratee: I, object: O): Mapped; +interface CurriedMap { + (iteratee: I, object: O): Mapped; + (iteratee: I): (object: O) => Mapped; +} +declare const _default: CurriedMap; +export default _default; diff --git a/types/omit.d.ts b/types/omit.d.ts new file mode 100644 index 0000000..78bb67b --- /dev/null +++ b/types/omit.d.ts @@ -0,0 +1,7 @@ +export declare function omit(predicate: string[] | string, collection: object): object; +interface CurriedOmit { + (predicate: string[] | string, collection: object): object; + (predicate: string[] | string): (collection: object) => object; +} +declare const _default: CurriedOmit; +export default _default; diff --git a/types/omitBy.d.ts b/types/omitBy.d.ts new file mode 100644 index 0000000..51e6cb8 --- /dev/null +++ b/types/omitBy.d.ts @@ -0,0 +1,7 @@ +export declare function omitBy boolean>(predicate: P, collection: C): object; +interface CurriedOmitBy { + boolean>(predicate: P, collection: C): object; + boolean>(predicate: P): (collection: C) => object; +} +declare const _default: CurriedOmitBy; +export default _default; diff --git a/types/reject.d.ts b/types/reject.d.ts new file mode 100644 index 0000000..2e7938c --- /dev/null +++ b/types/reject.d.ts @@ -0,0 +1,9 @@ +export declare function reject(predicate: any, collection: C): C extends any[] ? C : object; +interface CurriedReject { + (predicate: any, collection: C): C; + (predicate: any, collection: C): Array; + (predicate: any): (collection: C) => C; + (predicate: any): (collection: C) => Array; +} +declare const _default: CurriedReject; +export default _default; diff --git a/types/tests.ts b/types/tests.ts new file mode 100644 index 0000000..0fb940d --- /dev/null +++ b/types/tests.ts @@ -0,0 +1,61 @@ +// TypeScript Version: 3.2.2 +import u from "updeep"; + +u.omitted('whatever'); // $ExpectType { __omitted: boolean; } + +const obj = { this: 3 }; + +u(true, obj); // $ExpectType true +u(null, obj); // $ExpectType null +u(undefined, obj); // $ExpectType undefined +u("a specific string", obj); // $ExpectType "a specific string" + +u(true as const)(obj); // $ExpectType true +u(null)(obj); // $ExpectType null +u(undefined)(obj); // $ExpectType undefined +u("a specific string" as const)(obj); // $ExpectType "a specific string" + +const aString = "a" + "b"; + +u(aString, obj); // $ExpectType string + +u((i: number) => "foo" + i, 1); // $ExpecType string +u((i: number) => "foo" + i, "bar"); + +// update is object +u({ this: 2 }, true); // $ExpectType UpdateReturnMap<{ this: number; }> +u({ this: 2 })(true); // $ExpectType UpdateReturnMap<{ this: number; }> + +u({ this: 2 }, { this: 3 }); // $ExpectType object +u({ this: 2 })({ that: 3 }); // $ExpectType object + +u({ this: 2 })(true); // UpdateReturnMap<{ this: number; }> +u({ this: 2 })({ that: 3 }); // $ExpectType object + + +u.ifElse(false as boolean, { a: 1 }, { a: 2 }, { a: 3 }); // $ExpectType object +u.ifElse(false as boolean, "foo", 3, { a: 3 }); // $ExpectType 3 | "foo" +u.ifElse(false, "foo", 3, { a: 3 }); // $ExpectType 3 +u.ifElse(true, "foo", 3, { a: 3 }); // $ExpectType "foo" + +// *** map *** +const inc = (i:number) => i+1; + +u.map(inc, [1,2,3]); // $ExpectType number[] +u.map(inc, ["potato"]); // $ExpectType number[] +u.map({a:1},{a:2}); // $ExpectType Mapped<{ a: number; }, { a: number; }> + +u.omit('bar', { }); // $ExpectType object +u.omit(['bar'], { }); // $ExpectType object + +u.omitBy([ 'banana' ], { } ); // $ExpectError + +// *** constant *** + +// $ExpectType { banana: number; } +u.constant({ banana: 1 })('foo'); + +/// *** freeze *** + +// $ExpectType { potato: number; } +u.freeze({ potato: 1 }); diff --git a/types/tsconfig.json b/types/tsconfig.json new file mode 100644 index 0000000..80ecf93 --- /dev/null +++ b/types/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": ["es6"], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "noEmit": true, + + "baseUrl": "./", + "paths": { "updeep": ["."] } + } +} diff --git a/types/tslint.json b/types/tslint.json new file mode 100644 index 0000000..c0c24d9 --- /dev/null +++ b/types/tslint.json @@ -0,0 +1,11 @@ +{ + "extends": "dtslint/dtslint.json", + "rules": { + "trim-file": false, + "no-consecutive-blank-lines": false, + "typedef-whitespace": false, + "whitespace": false, + "space-within-parens": false, + "prefer-declare-function": false, + "no-unnecessary-generics": false, + "strict-export-declare-modifiers": false } } diff --git a/types/types.d.ts b/types/types.d.ts new file mode 100644 index 0000000..f0640af --- /dev/null +++ b/types/types.d.ts @@ -0,0 +1,14 @@ +export declare type Updates = any; +export declare type Source = any; +export declare type PathPart = number | string; +export declare type Path = PathPart | PathPart[]; +export declare type TruePredicate = true | ((a: S) => true); +export declare type FalsePredicate = false | ((a: S) => false); +export declare type Predicate = boolean | ((arg: S) => boolean); +export declare type MergedUpdate = O extends object ? (UpdateReturnType extends object ? object : UpdateReturnType) : UpdateReturnType; +export declare type UpdateReturnMap = { + [K in keyof T]: UpdateReturnType; +}; +export declare type UpdateReturnType = U extends (object: any) => any ? ReturnType : U extends object ? UpdateReturnMap : U; +export declare type ReturningFunction = (...args: any[]) => any; +export declare type ArgumentsType any> = F extends (...args: infer A) => any ? A : never; diff --git a/types/update.d.ts b/types/update.d.ts new file mode 100644 index 0000000..7fe709a --- /dev/null +++ b/types/update.d.ts @@ -0,0 +1,32 @@ +import { MergedUpdate, UpdateReturnType } from './types'; +export declare const omitted: (...args: any[]) => { + __omitted: boolean; +}; +/** + * Recursively update an object or array. + * + * Can update with values: + * update({ foo: 3 }, { foo: 1, bar: 2 }); + * // => { foo: 3, bar: 2 } + * + * Or with a function: + * update({ foo: x => (x + 1) }, { foo: 2 }); + * // => { foo: 3 } + * + */ +export declare function update(updates: U extends object ? never : U, object: any): U; +export declare function update(updates: U, object: O extends object ? never : O): UpdateReturnType; +export declare function update(updates: U, object: O, ...args: any[]): MergedUpdate; +interface CurriedUpdate1 { + (object: O extends object ? never : O): UpdateReturnType; + (object: O, ...args: any[]): MergedUpdate; +} +interface CurriedUpdate { + (updates: U extends object ? never : U, object: any): U; + (updates: U, object: O extends object ? never : O): UpdateReturnType; + (updates: U, object: O, ...args: any[]): MergedUpdate; + (updates: U extends object ? never : U): (object: any) => U; + (updates: U): CurriedUpdate1; +} +declare const _default: CurriedUpdate; +export default _default; diff --git a/types/updateIn.d.ts b/types/updateIn.d.ts new file mode 100644 index 0000000..62c3be1 --- /dev/null +++ b/types/updateIn.d.ts @@ -0,0 +1,12 @@ +import { Path } from './types'; +export declare function updateIn(path: Path, value: any, object: any): any; +interface Curry2 { + (value: any, object: any): any; + (value: any): (object: any) => any; +} +interface CurriedUpdateIn { + (path: Path, value: any, object: any): any; + (path: Path): Curry2; +} +declare const _default: CurriedUpdateIn; +export default _default; diff --git a/types/util/curry.d.ts b/types/util/curry.d.ts new file mode 100644 index 0000000..546b610 --- /dev/null +++ b/types/util/curry.d.ts @@ -0,0 +1,12 @@ +export declare const _ = "@@updeep/placeholder"; +interface SprawlingCurry { + (...args: A): R; + (): SprawlingCurry; +} +export declare function curry1(fn: (a: A) => R): SprawlingCurry; +export declare function curry1(fn: (a: A, ...args: any) => R): SprawlingCurry; +export declare function curry2(fn: any): any; +export declare function curry3(fn: any): any; +export declare function curry4(fn: any): any; +export default function curry(fn: (...args: any[]) => any, length?: 1 | 2 | 3 | 4): any; +export {}; diff --git a/types/util/splitPath.d.ts b/types/util/splitPath.d.ts new file mode 100644 index 0000000..94529e7 --- /dev/null +++ b/types/util/splitPath.d.ts @@ -0,0 +1,2 @@ +import { Path } from '../types'; +export default function splitPath(path: Path): Array; diff --git a/types/withDefault.d.ts b/types/withDefault.d.ts new file mode 100644 index 0000000..c38c020 --- /dev/null +++ b/types/withDefault.d.ts @@ -0,0 +1,8 @@ +import { MergedUpdate } from './types'; +export declare function withDefault(defaultValue: D, updates: U, object: O): MergedUpdate; +interface CurriedWithDefault { + (defaultValue: D, updates: U, object: O): MergedUpdate; + (defaultValue: D, updates: U): (obj: O) => MergedUpdate; +} +declare const _default: CurriedWithDefault; +export default _default; diff --git a/types/wrap.d.ts b/types/wrap.d.ts new file mode 100644 index 0000000..955b2cf --- /dev/null +++ b/types/wrap.d.ts @@ -0,0 +1,2 @@ +import { ReturningFunction } from './types'; +export default function wrap(func: F, l?: N): any; diff --git a/yarn.lock b/yarn.lock index 209f657..2ade2dd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,31 @@ # yarn lockfile v1 +"@types/chai@^4.1.7": + version "4.2.3" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.3.tgz#419477a3d5202bad19e14c787940a61dc9ea6407" + integrity sha512-VRw2xEGbll3ZiTQ4J02/hUjNqZoue1bMhoo2dgM2LXjDdyaq4q80HgBDHwpI0/VKlo4Eg+BavyQMv/NYgTetzA== + +"@types/lodash@^4.14.119": + version "4.14.138" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.138.tgz#34f52640d7358230308344e579c15b378d91989e" + integrity sha512-A4uJgHz4hakwNBdHNPdxOTkYmXNgmUAKLbXZ7PKGslgeV0Mb8P3BlbYfPovExek1qnod4pDfRbxuzcVs3dlFLg== + +"@types/mocha@^5.2.5": + version "5.2.7" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-5.2.7.tgz#315d570ccb56c53452ff8638738df60726d5b6ea" + integrity sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ== + +"@types/node@^10.12.18": + version "10.14.18" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.18.tgz#b7d45fc950e6ffd7edc685e890d13aa7b8535dce" + integrity sha512-ryO3Q3++yZC/+b8j8BdKd/dn9JlzlHBPdm80656xwYUdmPkpTGTjkAdt6BByiNupGPE8w0FhBgvYy/fX9hRNGQ== + +"@types/parsimmon@^1.3.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@types/parsimmon/-/parsimmon-1.10.0.tgz#ffb81cb023ff435a41d4710a29ab23c561dc9fdf" + integrity sha512-bsTIJFVQv7jnvNiC42ld2pQW2KRI+pAG243L+iATvqzy3X6+NH1obz2itRKDZZ8VVhN3wjwYax/VBGCcXzgTqQ== + abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -83,7 +108,7 @@ ajv@^5.2.3, ajv@^5.3.0: fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" -ajv@^6.1.0: +ajv@^6.1.0, ajv@^6.5.5: version "6.10.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== @@ -93,16 +118,6 @@ ajv@^6.1.0: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^6.5.5: - version "6.5.5" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.5.tgz#cf97cdade71c6399a92c6d6c4177381291b781a1" - integrity sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg== - dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" @@ -340,12 +355,7 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= -async-each@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" - integrity sha1-GdOGodntxufByF04iu28xW0zYC0= - -async-each@^1.0.1: +async-each@^1.0.0, async-each@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.2.tgz#8b8a7ca2a658f927e9f307d6d1a42f4199f0f735" integrity sha512-6xrbvN0MOBKSJDdonmSSz2OwFSgxRaVtBDes26mj9KIGtDo+g9xosFRSC+i1gQh2oAN/tQ62AI/pGZGQjVOiRg== @@ -1241,7 +1251,7 @@ bufferstreams@^1.1.1: dependencies: readable-stream "^2.0.2" -builtin-modules@^1.0.0: +builtin-modules@^1.0.0, builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= @@ -1334,7 +1344,7 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1507,6 +1517,11 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" +command-exists@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.8.tgz#715acefdd1223b9c9b37110a149c6392c2852291" + integrity sha512-PM54PkseWbiiD/mMsbvW351/u+dafwTJ0ye2qB60G1aGQP9j3xK2gmMDc+R34L3nDtx4qMCitXT75mkbkGJDLw== + commander@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/commander/-/commander-0.6.1.tgz#fa68a14f6a945d54dbbe50d8cdb3320e9e3b1a06" @@ -1517,6 +1532,11 @@ commander@2.3.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.3.0.tgz#fd430e889832ec353b9acd1de217c11cb3eef873" integrity sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM= +commander@^2.12.1: + version "2.20.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" + integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -1833,6 +1853,22 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +definitelytyped-header-parser@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/definitelytyped-header-parser/-/definitelytyped-header-parser-1.2.0.tgz#f21374b8a18fabcd3ba4b008a0bcbc9db2b7b4c4" + integrity sha512-xpg8uu/2YD/reaVsZV4oJ4g7UDYFqQGWvT1W9Tsj6q4VtWBSaig38Qgah0ZMnQGF9kAsAim08EXDO1nSi0+Nog== + dependencies: + "@types/parsimmon" "^1.3.0" + parsimmon "^1.2.0" + +definitelytyped-header-parser@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/definitelytyped-header-parser/-/definitelytyped-header-parser-3.7.2.tgz#a5b2ec9521762910e870477b01ce9feca06d9fb7" + integrity sha512-nlkiv+QLlRSc3C3qAbusWPaBiyPLldwRFnrxvoxjdZHvHbIh2+U09qdmzzWV35Rs/I3MMhcoWRcVUi3M1G935Q== + dependencies: + "@types/parsimmon" "^1.3.0" + parsimmon "^1.2.0" + del@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/del/-/del-4.1.0.tgz#049543b8290e1a9293e2bd150ab3a06f637322b8" @@ -1902,7 +1938,7 @@ diff@1.4.0: resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" integrity sha1-fyjS657nsVqX79ic5j3P2qPMur8= -diff@3.5.0: +diff@3.5.0, diff@^3.2.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== @@ -1957,6 +1993,35 @@ domain-browser@^1.1.1: resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== +download-file-sync@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/download-file-sync/-/download-file-sync-1.0.4.tgz#d3e3c543f836f41039455b9034c72e355b036019" + integrity sha1-0+PFQ/g29BA5RVuQNMcuNVsDYBk= + +dts-critic@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/dts-critic/-/dts-critic-2.1.0.tgz#d7a6fcdcec301f639b7700fd9a2c9db4ab7071f4" + integrity sha512-vXfmzBfaC4sBML2Er1YfFbcknyxp9t16x1NF0nTYj20gDR1dCF8aOpu/c+CgySxFyqEyLq6t0FkmWwpZEX6VLQ== + dependencies: + command-exists "^1.2.8" + definitelytyped-header-parser "^1.2.0" + download-file-sync "^1.0.4" + semver "^6.2.0" + yargs "^12.0.5" + +dtslint@^0.9.8: + version "0.9.8" + resolved "https://registry.yarnpkg.com/dtslint/-/dtslint-0.9.8.tgz#c1fdc12c73f57f10528f0b4dda04be5c82919129" + integrity sha512-cxxGo0mQO9mFQcUShtPbmmoZ+PrUczEV6R/PaN06dnv2IbgtIgLyrO8NBeU7VeHMxpe6exESy48oom97LWUIkA== + dependencies: + definitelytyped-header-parser "^3.7.2" + dts-critic "^2.1.0" + fs-extra "^6.0.1" + request "^2.88.0" + strip-json-comments "^2.0.1" + tslint "5.14.0" + typescript next + duplexer2@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" @@ -2876,6 +2941,15 @@ fs-extra@^1.0.0: jsonfile "^2.1.0" klaw "^1.0.0" +fs-extra@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-6.0.1.tgz#8abc128f7946e310135ddc93b98bddb410e7a34b" + integrity sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-minipass@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" @@ -2888,15 +2962,7 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^1.0.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" - integrity sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg== - dependencies: - nan "^2.9.2" - node-pre-gyp "^0.10.0" - -fsevents@^1.2.7: +fsevents@^1.0.0, fsevents@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.7.tgz#4851b664a3783e52003b3c66eb0eee1074933aa4" integrity sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw== @@ -3040,7 +3106,7 @@ glob@3.2.11: inherits "2" minimatch "0.3" -glob@7.1.3, glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@^7.1.3: +glob@7.1.3: version "7.1.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== @@ -3062,6 +3128,18 @@ glob@^4.3.1: minimatch "^2.0.1" once "^1.3.0" +glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + 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" + glob@~3.1.21: version "3.1.21" resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd" @@ -3991,10 +4069,10 @@ js-yaml@3.12.0: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^3.5.1, js-yaml@^3.9.1: - version "3.12.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.1.tgz#295c8632a18a23e054cf5c9d3cecafe678167600" - integrity sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA== +js-yaml@^3.5.1, js-yaml@^3.7.0, js-yaml@^3.9.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -4070,6 +4148,13 @@ jsonfile@^2.1.0: optionalDependencies: graceful-fs "^4.1.6" +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" @@ -4488,15 +4573,7 @@ lru-cache@2: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" integrity sha1-bUUk6LlV+V1PW1iFHOId1y+06VI= -lru-cache@4.1.x: - version "4.1.4" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.4.tgz#51cc46e8e6d9530771c857e24ccc720ecdbcc031" - integrity sha512-EPstzZ23znHUVLKj+lcXO1KvZkrlw+ZirdwvOmnAnA/1PB4ggyXJ77LRkCqkff+ShQ+cqoxCxLQOh4cKITO5iA== - dependencies: - pseudomap "^1.0.2" - yallist "^3.0.2" - -lru-cache@^4.0.1: +lru-cache@4.1.x, lru-cache@^4.0.1: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== @@ -5363,6 +5440,11 @@ parseurl@~1.3.2: resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M= +parsimmon@^1.2.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/parsimmon/-/parsimmon-1.13.0.tgz#6e4ef3dbd45ed6ea6808be600ac4b9c8a44228cf" + integrity sha512-5UIrOCW+gjbILkjKPgTgmq8LKf8TT3Iy7kN2VD7OtQ81facKn8B4gG1X94jWqXYZsxG2KbJhrv/Yq/5H6BQn7A== + pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -5886,7 +5968,7 @@ request-progress@^2.0.1: dependencies: throttleit "^1.0.0" -request@^2.81.0: +request@^2.81.0, request@^2.88.0: version "2.88.0" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== @@ -5965,10 +6047,10 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.5.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" - integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg== +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.5.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" + integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== dependencies: path-parse "^1.0.6" @@ -6101,10 +6183,10 @@ semver@^4.1.0, semver@~4.3.3: resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" integrity sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto= -semver@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.0.0.tgz#05e359ee571e5ad7ed641a6eec1e547ba52dea65" - integrity sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ== +semver@^6.0.0, semver@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== send@0.16.2: version "0.16.2" @@ -6580,7 +6662,7 @@ strip-eof@^1.0.0: resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= -strip-json-comments@2.0.1, strip-json-comments@~2.0.1: +strip-json-comments@2.0.1, strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= @@ -6798,6 +6880,37 @@ trim-right@^1.0.1: resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= +tslib@^1.8.0, tslib@^1.8.1: + version "1.10.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" + integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== + +tslint@5.14.0: + version "5.14.0" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.14.0.tgz#be62637135ac244fc9b37ed6ea5252c9eba1616e" + integrity sha512-IUla/ieHVnB8Le7LdQFRGlVJid2T/gaJe5VkjzRVSRR6pA2ODYrnfR1hmxi+5+au9l50jBwpbBL34txgv4NnTQ== + dependencies: + babel-code-frame "^6.22.0" + builtin-modules "^1.1.1" + chalk "^2.3.0" + commander "^2.12.1" + diff "^3.2.0" + glob "^7.1.1" + js-yaml "^3.7.0" + minimatch "^3.0.4" + mkdirp "^0.5.1" + resolve "^1.3.2" + semver "^5.3.0" + tslib "^1.8.0" + tsutils "^2.29.0" + +tsutils@^2.29.0: + version "2.29.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" + integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== + dependencies: + tslib "^1.8.1" + tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" @@ -6840,6 +6953,16 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +typescript@^3.6.3: + version "3.6.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.6.3.tgz#fea942fabb20f7e1ca7164ff626f1a9f3f70b4da" + integrity sha512-N7bceJL1CtRQ2RiG0AQME13ksR7DiuQh/QehubYcghzv20tnh+MQnQIuJddTmsbqYj+dztchykemz0zFzlvdQw== + +typescript@next: + version "3.7.0-dev.20190918" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.0-dev.20190918.tgz#3a96189ea1d31178d9f5993f6047492130c6ded1" + integrity sha512-M10aqXzKH+846mzz4Y2RDILCVvNOr92k5qBUeXGBwyIKLya4EdNwXAFI7FwSlIAF1dWNSubIaOcLwd2MF3UYYg== + uglify-js@~2.7.3: version "2.7.5" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8" @@ -6880,6 +7003,11 @@ unique-stream@^1.0.0: resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-1.0.0.tgz#d59a4a75427447d9aa6c91e70263f8d26a4b104b" integrity sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs= +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"