From 5eb1fe94b944039b088f542e46267a7bc9e058f9 Mon Sep 17 00:00:00 2001 From: downace Date: Sun, 24 Dec 2017 14:42:35 +0900 Subject: [PATCH 1/2] [@types/caseless] Add type definition for caseless version 0.12 --- types/caseless/caseless-tests.ts | 35 ++++++++++++++++++++++++++++++++ types/caseless/index.d.ts | 25 +++++++++++++++++++++++ types/caseless/tsconfig.json | 23 +++++++++++++++++++++ types/caseless/tslint.json | 1 + 4 files changed, 84 insertions(+) create mode 100644 types/caseless/caseless-tests.ts create mode 100644 types/caseless/index.d.ts create mode 100644 types/caseless/tsconfig.json create mode 100644 types/caseless/tslint.json diff --git a/types/caseless/caseless-tests.ts b/types/caseless/caseless-tests.ts new file mode 100644 index 0000000000..941a5afb72 --- /dev/null +++ b/types/caseless/caseless-tests.ts @@ -0,0 +1,35 @@ +import caseless, { httpify } from "caseless"; + +caseless(); // $ExpectType Caseless +caseless({}); // $ExpectType Caseless +caseless(null); // $ExpectError +caseless(1); // $ExpectError +caseless("2"); // $ExpectError + +const c = caseless(); + +c.set({}); // $ExpectType void +c.set('foo', 'bar'); // $ExpectType string | false +c.set('foo', 'bar', false); // $ExpectType string | false +c.set('foo', new Date()); // $ExpectType string | false +c.set(10, 'bar'); // $ExpectError + +c.get('foo'); // $ExpectType any +c.get(10); // $ExpectError + +c.has('foo'); // $ExpectType string | false +c.has(10); // $ExpectError + +c.swap('foo'); // $ExpectType void +c.swap(10); // $ExpectError + +c.del('foo'); // $ExpectType boolean + +httpify(null, {}); // $ExpectError +httpify(1, {}); // $ExpectError +httpify("2", {}); // $ExpectError +httpify({}, null); // $ExpectError +httpify({}, 1); // $ExpectError +httpify({}, "2"); // $ExpectError + +httpify({}, {}); // $ExpectType Caseless diff --git a/types/caseless/index.d.ts b/types/caseless/index.d.ts new file mode 100644 index 0000000000..9cbf874e84 --- /dev/null +++ b/types/caseless/index.d.ts @@ -0,0 +1,25 @@ +// Type definitions for caseless 0.12 +// Project: https://github.com/mikeal/caseless +// Definitions by: downace +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +// TypeScript Version: 2.2 + +type KeyType = string; +type ValueType = any; +type RawDict = object; + +declare class Caseless { + constructor(dict?: RawDict); + set(name: KeyType, value: ValueType, clobber?: boolean): KeyType | false; + set(dict: RawDict): void; + has(name: KeyType): KeyType | false; + get(name: KeyType): ValueType | undefined; + swap(name: KeyType): void; + del(name: KeyType): boolean; +} + +export function httpify(resp: object, headers: RawDict): Caseless; + +declare function caseless(dict?: RawDict): Caseless; + +export default caseless; diff --git a/types/caseless/tsconfig.json b/types/caseless/tsconfig.json new file mode 100644 index 0000000000..c7dace4424 --- /dev/null +++ b/types/caseless/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", + "caseless-tests.ts" + ] +} diff --git a/types/caseless/tslint.json b/types/caseless/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/caseless/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" } From 281c89468c1aa0bfbbccaccfd618e377e0b203b6 Mon Sep 17 00:00:00 2001 From: downace Date: Sun, 24 Dec 2017 18:26:16 +0900 Subject: [PATCH 2/2] [@types/caseless] exposed Caseless interface --- types/caseless/caseless-tests.ts | 33 ++++++++++++++++++-------------- types/caseless/index.d.ts | 3 +-- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/types/caseless/caseless-tests.ts b/types/caseless/caseless-tests.ts index 941a5afb72..2fb16afaad 100644 --- a/types/caseless/caseless-tests.ts +++ b/types/caseless/caseless-tests.ts @@ -1,4 +1,9 @@ -import caseless, { httpify } from "caseless"; +import caseless, { Caseless, httpify } from "caseless"; + +new Caseless(); // $ExpectError + +// tslint:disable-next-line: prefer-const +let c1: Caseless; caseless(); // $ExpectType Caseless caseless({}); // $ExpectType Caseless @@ -6,24 +11,24 @@ caseless(null); // $ExpectError caseless(1); // $ExpectError caseless("2"); // $ExpectError -const c = caseless(); +const c2 = caseless(); -c.set({}); // $ExpectType void -c.set('foo', 'bar'); // $ExpectType string | false -c.set('foo', 'bar', false); // $ExpectType string | false -c.set('foo', new Date()); // $ExpectType string | false -c.set(10, 'bar'); // $ExpectError +c2.set({}); // $ExpectType void +c2.set('foo', 'bar'); // $ExpectType string | false +c2.set('foo', 'bar', false); // $ExpectType string | false +c2.set('foo', new Date()); // $ExpectType string | false +c2.set(10, 'bar'); // $ExpectError -c.get('foo'); // $ExpectType any -c.get(10); // $ExpectError +c2.get('foo'); // $ExpectType any +c2.get(10); // $ExpectError -c.has('foo'); // $ExpectType string | false -c.has(10); // $ExpectError +c2.has('foo'); // $ExpectType string | false +c2.has(10); // $ExpectError -c.swap('foo'); // $ExpectType void -c.swap(10); // $ExpectError +c2.swap('foo'); // $ExpectType void +c2.swap(10); // $ExpectError -c.del('foo'); // $ExpectType boolean +c2.del('foo'); // $ExpectType boolean httpify(null, {}); // $ExpectError httpify(1, {}); // $ExpectError diff --git a/types/caseless/index.d.ts b/types/caseless/index.d.ts index 9cbf874e84..db295a8f89 100644 --- a/types/caseless/index.d.ts +++ b/types/caseless/index.d.ts @@ -8,8 +8,7 @@ type KeyType = string; type ValueType = any; type RawDict = object; -declare class Caseless { - constructor(dict?: RawDict); +export interface Caseless { set(name: KeyType, value: ValueType, clobber?: boolean): KeyType | false; set(dict: RawDict): void; has(name: KeyType): KeyType | false;