From 8c29a73096f9b7f1c6c256fb23f391bd56ddca65 Mon Sep 17 00:00:00 2001 From: Chris Barr Date: Thu, 2 Nov 2017 10:57:07 -0400 Subject: [PATCH 1/5] Re-write typedefs for file-saver --- types/file-saver/file-saver-tests.ts | 44 ++++++++++------ types/file-saver/index.d.ts | 58 ++++++--------------- types/file-saver/tsconfig.json | 4 +- types/file-saver/tslint.json | 78 +--------------------------- 4 files changed, 47 insertions(+), 137 deletions(-) diff --git a/types/file-saver/file-saver-tests.ts b/types/file-saver/file-saver-tests.ts index 1cc06f58ba..7e704663d8 100644 --- a/types/file-saver/file-saver-tests.ts +++ b/types/file-saver/file-saver-tests.ts @@ -1,30 +1,40 @@ - - -import { saveAs as importedSaveAs } from "file-saver"; -function testImportedSaveAs() { - var data: Blob = new Blob(["Hello, world!"], {type: "text/plain;charset=utf-8"}); - var filename: string = 'hello world.txt'; - var disableAutoBOM = true; - - importedSaveAs(data, filename, disableAutoBOM); -} +import "file-saver"; /** * @summary Test for "saveAs" function. */ function testSaveAs() { - var data: Blob = new Blob(["Hello, world!"], {type: "text/plain;charset=utf-8"}); - var filename: string = 'hello world.txt'; - var disableAutoBOM = true; + const data: Blob = new Blob(["Hello, world!"], {type: "text/plain;charset=utf-8"}); + const filename = 'hello world.txt'; + const disableAutoBOM = true; saveAs(data, filename, disableAutoBOM); } /** - * @summary Test for "saveAs" function. + * @summary Test for "saveAs" function on the window object. */ -function testSaveAsFile() { - const data = new File(["Hello, world!"], "hello world.txt" ,{type: "text/plain;charset=utf-8"}); - +function testWindowSaveAs() { + const data: Blob = new Blob(["Hello, world!"], {type: "text/plain;charset=utf-8"}); + const filename = 'hello world.txt'; + const disableAutoBOM = true; + + window.saveAs(data, filename, disableAutoBOM); +} + +/** + * @summary Test for "saveAs" function with the 3rd parameter omitted + */ +function testOptionalOneParamSaveAs() { + const data: Blob = new Blob(["Hello, world!"], {type: "text/plain;charset=utf-8"}); + const filename = 'hello world.txt'; + saveAs(data, filename); +} + +/** + * @summary Test for "saveAs" function with the 2nd and 3rd parameters omitted + */ +function testOptionalTwoParamsSaveAs() { + const data: Blob = new Blob(["Hello, world!"], {type: "text/plain;charset=utf-8"}); saveAs(data); } diff --git a/types/file-saver/index.d.ts b/types/file-saver/index.d.ts index 8d78e10682..a8249f8e09 100644 --- a/types/file-saver/index.d.ts +++ b/types/file-saver/index.d.ts @@ -1,46 +1,22 @@ -// Type definitions for FileSaver.js +// Type definitions for FileSaver.js 1.3 // Project: https://github.com/eligrey/FileSaver.js/ -// Definitions by: Cyril Schumacher , Daniel Roth -// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +// Definitions by: Cyril Schumacher +// Daniel Roth +// Chris Barr +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/file-saver -/** - * @summary Interface for "saveAs" function. - * @author Cyril Schumacher - * @version 1.0 - */ -interface FileSaver { - ( - /** - * @summary Data. - * @type {Blob} - */ - data: Blob, - - /** - * @summary File name. - * @type {DOMString} - */ - filename: string, - - /** - * @summary Disable Unicode text encoding hints or not. - * @type {boolean} - */ - disableAutoBOM?: boolean - ): void - - ( - /** - * @summary File. - * @type {File} - */ - data: File - ): void +declare namespace FileSaver { + /** + * FileSaver.js implements the saveAs() FileSaver interface in browsers that do not natively support it. + * @param {Blob} data - The actual file data blob. + * @param {string} filename - The optional name of the file to be downloaded. If omitted, the name used in the file data will be used. If none is provided "download" will be used. + * @param {boolean} disableAutoBOM - Optional & defaults to `false`. Set to `true` if you don't want FileSaver.js to automatically provide Unicode text encoding hints + */ + type saveAs = (data: Blob, filename?: string, disableAutoBOM?: boolean) => void; } -declare var saveAs: FileSaver; - -declare module "file-saver" { - var fileSaver: { saveAs: typeof saveAs }; - export = fileSaver +interface Window { + saveAs: FileSaver.saveAs; } + +declare const saveAs: FileSaver.saveAs; diff --git a/types/file-saver/tsconfig.json b/types/file-saver/tsconfig.json index 1dc5a6f8f4..803ff5f510 100644 --- a/types/file-saver/tsconfig.json +++ b/types/file-saver/tsconfig.json @@ -7,7 +7,7 @@ ], "noImplicitAny": true, "noImplicitThis": true, - "strictNullChecks": false, + "strictNullChecks": true, "strictFunctionTypes": true, "baseUrl": "../", "typeRoots": [ @@ -21,4 +21,4 @@ "index.d.ts", "file-saver-tests.ts" ] -} \ No newline at end of file +} diff --git a/types/file-saver/tslint.json b/types/file-saver/tslint.json index a41bf5d19a..f93cf8562a 100644 --- a/types/file-saver/tslint.json +++ b/types/file-saver/tslint.json @@ -1,79 +1,3 @@ { - "extends": "dtslint/dt.json", - "rules": { - "adjacent-overload-signatures": false, - "array-type": false, - "arrow-return-shorthand": false, - "ban-types": false, - "callable-types": false, - "comment-format": false, - "dt-header": false, - "eofline": false, - "export-just-namespace": false, - "import-spacing": false, - "interface-name": false, - "interface-over-type-literal": false, - "jsdoc-format": false, - "max-line-length": false, - "member-access": false, - "new-parens": false, - "no-any-union": false, - "no-boolean-literal-compare": false, - "no-conditional-assignment": false, - "no-consecutive-blank-lines": false, - "no-construct": false, - "no-declare-current-package": false, - "no-duplicate-imports": false, - "no-duplicate-variable": false, - "no-empty-interface": false, - "no-for-in-array": false, - "no-inferrable-types": false, - "no-internal-module": false, - "no-irregular-whitespace": false, - "no-mergeable-namespace": false, - "no-misused-new": false, - "no-namespace": false, - "no-object-literal-type-assertion": false, - "no-padding": false, - "no-redundant-jsdoc": false, - "no-redundant-jsdoc-2": false, - "no-redundant-undefined": false, - "no-reference-import": false, - "no-relative-import-in-test": false, - "no-self-import": false, - "no-single-declare-module": false, - "no-string-throw": false, - "no-unnecessary-callback-wrapper": false, - "no-unnecessary-class": false, - "no-unnecessary-generics": false, - "no-unnecessary-qualifier": false, - "no-unnecessary-type-assertion": false, - "no-useless-files": false, - "no-var-keyword": false, - "no-var-requires": false, - "no-void-expression": false, - "no-trailing-whitespace": false, - "object-literal-key-quotes": false, - "object-literal-shorthand": false, - "one-line": false, - "one-variable-per-declaration": false, - "only-arrow-functions": false, - "prefer-conditional-expression": false, - "prefer-const": false, - "prefer-declare-function": false, - "prefer-for-of": false, - "prefer-method-signature": false, - "prefer-template": false, - "radix": false, - "semicolon": false, - "space-before-function-paren": false, - "space-within-parens": false, - "strict-export-declare-modifiers": false, - "trim-file": false, - "triple-equals": false, - "typedef-whitespace": false, - "unified-signatures": false, - "void-return": false, - "whitespace": false - } + "extends": "dtslint/dt.json" } From e9a71db761f0db132f68764de9694306d74bbf8b Mon Sep 17 00:00:00 2001 From: Chris Barr Date: Thu, 2 Nov 2017 11:08:55 -0400 Subject: [PATCH 2/5] Remove redundant type info in JSDocs --- types/file-saver/index.d.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/types/file-saver/index.d.ts b/types/file-saver/index.d.ts index a8249f8e09..6572daa86c 100644 --- a/types/file-saver/index.d.ts +++ b/types/file-saver/index.d.ts @@ -8,9 +8,9 @@ declare namespace FileSaver { /** * FileSaver.js implements the saveAs() FileSaver interface in browsers that do not natively support it. - * @param {Blob} data - The actual file data blob. - * @param {string} filename - The optional name of the file to be downloaded. If omitted, the name used in the file data will be used. If none is provided "download" will be used. - * @param {boolean} disableAutoBOM - Optional & defaults to `false`. Set to `true` if you don't want FileSaver.js to automatically provide Unicode text encoding hints + * @param data - The actual file data blob. + * @param filename - The optional name of the file to be downloaded. If omitted, the name used in the file data will be used. If none is provided "download" will be used. + * @param disableAutoBOM - Optional & defaults to `false`. Set to `true` if you don't want FileSaver.js to automatically provide Unicode text encoding hints */ type saveAs = (data: Blob, filename?: string, disableAutoBOM?: boolean) => void; } From 719aaaaa4da013cc06e2c2af6fff504af73e558f Mon Sep 17 00:00:00 2001 From: Chris Barr Date: Tue, 7 Nov 2017 15:33:35 -0500 Subject: [PATCH 3/5] Suggestions from @DanielRosenwasser --- types/file-saver/index.d.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/types/file-saver/index.d.ts b/types/file-saver/index.d.ts index 6572daa86c..6ca9f6ad13 100644 --- a/types/file-saver/index.d.ts +++ b/types/file-saver/index.d.ts @@ -12,11 +12,15 @@ declare namespace FileSaver { * @param filename - The optional name of the file to be downloaded. If omitted, the name used in the file data will be used. If none is provided "download" will be used. * @param disableAutoBOM - Optional & defaults to `false`. Set to `true` if you don't want FileSaver.js to automatically provide Unicode text encoding hints */ - type saveAs = (data: Blob, filename?: string, disableAutoBOM?: boolean) => void; + export function saveAs(data: Blob, filename?: string, disableAutoBOM?: boolean): void; } -interface Window { - saveAs: FileSaver.saveAs; +declare global { + const saveAs: typeof FileSaver.saveAs + + interface Window { + saveAs: typeof FileSaver.saveAs + } } -declare const saveAs: FileSaver.saveAs; +export = FileSaver; From 7d00f844deeb7bbb4bebb374090d332a9d723273 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Tue, 7 Nov 2017 15:26:33 -0800 Subject: [PATCH 4/5] Fix basic lint errors. --- types/file-saver/index.d.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/types/file-saver/index.d.ts b/types/file-saver/index.d.ts index 6ca9f6ad13..935fed44c2 100644 --- a/types/file-saver/index.d.ts +++ b/types/file-saver/index.d.ts @@ -12,14 +12,14 @@ declare namespace FileSaver { * @param filename - The optional name of the file to be downloaded. If omitted, the name used in the file data will be used. If none is provided "download" will be used. * @param disableAutoBOM - Optional & defaults to `false`. Set to `true` if you don't want FileSaver.js to automatically provide Unicode text encoding hints */ - export function saveAs(data: Blob, filename?: string, disableAutoBOM?: boolean): void; + function saveAs(data: Blob, filename?: string, disableAutoBOM?: boolean): void; } declare global { - const saveAs: typeof FileSaver.saveAs + const saveAs: typeof FileSaver.saveAs; interface Window { - saveAs: typeof FileSaver.saveAs + saveAs: typeof FileSaver.saveAs; } } From fae8a9c0aaa0a8b87ff3cf1bd6aa3a7be706d16a Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Tue, 7 Nov 2017 15:27:30 -0800 Subject: [PATCH 5/5] Disable the `export-just-namespace` rule. --- types/file-saver/tslint.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/types/file-saver/tslint.json b/types/file-saver/tslint.json index f93cf8562a..adaee1b55f 100644 --- a/types/file-saver/tslint.json +++ b/types/file-saver/tslint.json @@ -1,3 +1,6 @@ { - "extends": "dtslint/dt.json" + "extends": "dtslint/dt.json", + "rules": { + "export-just-namespace": false + } }