From c5c72bcb9b74c69427083f1c2c211c6319838e44 Mon Sep 17 00:00:00 2001 From: Dimitri Benin Date: Mon, 25 Feb 2019 17:59:27 +0100 Subject: [PATCH 1/2] [onetime] Move old types to sub-dir --- types/onetime/{ => v2}/index.d.ts | 0 types/onetime/{ => v2}/onetime-tests.ts | 0 types/onetime/{ => v2}/tsconfig.json | 11 ++++++++--- types/onetime/{ => v2}/tslint.json | 0 4 files changed, 8 insertions(+), 3 deletions(-) rename types/onetime/{ => v2}/index.d.ts (100%) rename types/onetime/{ => v2}/onetime-tests.ts (100%) rename types/onetime/{ => v2}/tsconfig.json (74%) rename types/onetime/{ => v2}/tslint.json (100%) diff --git a/types/onetime/index.d.ts b/types/onetime/v2/index.d.ts similarity index 100% rename from types/onetime/index.d.ts rename to types/onetime/v2/index.d.ts diff --git a/types/onetime/onetime-tests.ts b/types/onetime/v2/onetime-tests.ts similarity index 100% rename from types/onetime/onetime-tests.ts rename to types/onetime/v2/onetime-tests.ts diff --git a/types/onetime/tsconfig.json b/types/onetime/v2/tsconfig.json similarity index 74% rename from types/onetime/tsconfig.json rename to types/onetime/v2/tsconfig.json index 84d3da86b8..bda103d103 100644 --- a/types/onetime/tsconfig.json +++ b/types/onetime/v2/tsconfig.json @@ -8,10 +8,15 @@ "noImplicitThis": true, "strictNullChecks": true, "strictFunctionTypes": true, - "baseUrl": "../", + "baseUrl": "../../", "typeRoots": [ - "../" + "../../" ], + "paths": { + "onetime": [ + "onetime/v2" + ] + }, "types": [], "noEmit": true, "forceConsistentCasingInFileNames": true @@ -20,4 +25,4 @@ "index.d.ts", "onetime-tests.ts" ] -} \ No newline at end of file +} diff --git a/types/onetime/tslint.json b/types/onetime/v2/tslint.json similarity index 100% rename from types/onetime/tslint.json rename to types/onetime/v2/tslint.json From 2347afcc47ef0d39d221b9ee404ff16adebefccc Mon Sep 17 00:00:00 2001 From: Dimitri Benin Date: Mon, 25 Feb 2019 18:23:10 +0100 Subject: [PATCH 2/2] [onetime] Update types to v3.0 --- types/onetime/index.d.ts | 45 ++++++++++++++++++++++++++++++++++ types/onetime/onetime-tests.ts | 12 +++++++++ types/onetime/tsconfig.json | 23 +++++++++++++++++ types/onetime/tslint.json | 1 + 4 files changed, 81 insertions(+) create mode 100644 types/onetime/index.d.ts create mode 100644 types/onetime/onetime-tests.ts create mode 100644 types/onetime/tsconfig.json create mode 100644 types/onetime/tslint.json diff --git a/types/onetime/index.d.ts b/types/onetime/index.d.ts new file mode 100644 index 0000000000..f1c6b56ad0 --- /dev/null +++ b/types/onetime/index.d.ts @@ -0,0 +1,45 @@ +// Type definitions for onetime 3.0 +// Project: https://github.com/sindresorhus/onetime#readme +// Definitions by: BendingBender +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +// TypeScript Version: 3.0 + +export = oneTime; + +/** + * Ensure a function is only called once. When called multiple times it will return the return value from the first call. + * + * @param fn Function that should only be called once. + * @returns A function that only calls `fn` once. + */ +declare function oneTime( + fn: (...args: T) => R, + options?: oneTime.Options +): (...args: T) => R; + +declare namespace oneTime { + /** + * Get the number of times `fn` has been called. + * + * @param fn Function to get call count from. + * @returns A number representing how many times `fn` has been called. + * + * @example + * const foo = onetime(() => {}); + * foo(); + * foo(); + * foo(); + * + * console.log(onetime.callCount(foo)); + * //=> 3 + */ + function callCount(fn: (...args: any[]) => any): number | undefined; + + interface Options { + /** + * Throw an error when called more than once. + * @default false + */ + throw?: boolean; + } +} diff --git a/types/onetime/onetime-tests.ts b/types/onetime/onetime-tests.ts new file mode 100644 index 0000000000..4678eb45db --- /dev/null +++ b/types/onetime/onetime-tests.ts @@ -0,0 +1,12 @@ +import onetime = require('onetime'); + +const foo = onetime(() => 5); +foo(); // $ExpectType number + +const foo2 = onetime(() => true, { throw: true }); +foo2(); // $ExpectType boolean + +onetime((t1: boolean) => 5)(true); // $ExpectType number +onetime((t1: boolean, t2: string) => 5)(true, ''); // $ExpectType number + +onetime.callCount((t1: boolean, t2: string) => 5); // $ExpectType number | undefined diff --git a/types/onetime/tsconfig.json b/types/onetime/tsconfig.json new file mode 100644 index 0000000000..39df78e5bc --- /dev/null +++ b/types/onetime/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "onetime-tests.ts" + ] +} diff --git a/types/onetime/tslint.json b/types/onetime/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/onetime/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" }