Skip to content

Commit a057750

Browse files
committed
Convert source code to TypeScript
1 parent c42d2c7 commit a057750

File tree

6 files changed

+102
-84
lines changed

6 files changed

+102
-84
lines changed

src/file-to-arraybuffer.ts

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
2+
function fileToArrayBuffer(target: ArrayBuffer): Promise<ArrayBuffer>
3+
function fileToArrayBuffer(target: Blob): Promise<ArrayBuffer>
4+
function fileToArrayBuffer(target: string): Promise<ArrayBuffer>
5+
function fileToArrayBuffer(target: HTMLInputElement): Promise<ArrayBuffer>
6+
function fileToArrayBuffer(target: FileList): Promise<ArrayBuffer>
7+
function fileToArrayBuffer(target: File): Promise<ArrayBuffer>
8+
9+
function fileToArrayBuffer(target: any) { // eslint-disable-line @typescript-eslint/no-explicit-any
10+
if (typeof Promise === 'undefined') {
11+
throw new ReferenceError('Your environment does not support Promises.')
12+
} else if (typeof ArrayBuffer === 'undefined') {
13+
throw new ReferenceError('Your environment does not support ArrayBuffer.')
14+
}
15+
16+
if (!target) {
17+
return Promise.reject(new Error(`Empty parameter to convert to ArrayBuffer (value: '${target}').`))
18+
}
19+
20+
if (target.constructor === ArrayBuffer) {
21+
return Promise.resolve(target)
22+
}
23+
24+
if (typeof Blob !== 'undefined' && target.constructor === Blob) {
25+
return target.arrayBuffer()
26+
}
27+
28+
let fileInputRelated = target as string | HTMLInputElement | FileList | File
29+
30+
if (typeof fileInputRelated === 'string') {
31+
fileInputRelated = document.querySelector(fileInputRelated) as HTMLInputElement
32+
33+
if (!fileInputRelated) {
34+
return Promise.reject(new Error(`No HTML found with selector "${target}".`))
35+
}
36+
}
37+
38+
if (typeof HTMLInputElement !== 'undefined' && fileInputRelated.constructor === HTMLInputElement) {
39+
fileInputRelated = fileInputRelated.files as FileList
40+
41+
if (!fileInputRelated) {
42+
return Promise.reject(new Error('HTML input element reference is not of type "file".'))
43+
}
44+
}
45+
46+
if (typeof FileList !== 'undefined' && fileInputRelated.constructor === FileList) {
47+
fileInputRelated = fileInputRelated[0] as File
48+
49+
if (!fileInputRelated) {
50+
return Promise.reject(new Error('Object FileList is empty.'))
51+
}
52+
}
53+
54+
if (typeof File !== 'undefined' && fileInputRelated.constructor === File) {
55+
if (typeof FileReader === 'undefined') {
56+
throw new TypeError('Your environment does not support FileReader.')
57+
}
58+
59+
return fileInputRelated.arrayBuffer?.() ?? new Promise((resolve, reject) => {
60+
const reader = new FileReader()
61+
62+
reader.onloadend = (ev) => resolve(ev.target?.result as ArrayBuffer)
63+
reader.onerror = (ev) => reject(ev.target?.error)
64+
reader.readAsArrayBuffer(fileInputRelated as File)
65+
})
66+
}
67+
68+
return Promise.reject(new Error('Parameter type must be an instance of HTMLInputElement, FileList, File, String (input selector), Blob or ArrayBuffer'))
69+
}
70+
71+
export default fileToArrayBuffer

src/index.d.ts

Lines changed: 0 additions & 11 deletions
This file was deleted.

src/index.js

Lines changed: 0 additions & 7 deletions
This file was deleted.

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { default } from './file-to-arraybuffer'

src/to-arraybuffer.js

Lines changed: 0 additions & 66 deletions
This file was deleted.

tsconfig.json

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
{
2+
"compilerOptions": {
3+
"rootDir": ".",
4+
"baseUrl": ".",
5+
"paths": {},
6+
"sourceMap": false,
7+
"target": "ES5",
8+
"module": "esnext",
9+
"lib": [
10+
"DOM",
11+
"ES2015.Promise"
12+
],
13+
// "types": [],
14+
"moduleResolution": "node",
15+
"useDefineForClassFields": false,
16+
"allowSyntheticDefaultImports": true,
17+
"esModuleInterop": true,
18+
"skipLibCheck": true, /* Skip type checking of declaration files. */
19+
"declaration": false,
20+
"allowJs": false,
21+
"noEmit": false,
22+
"strict": true,
23+
"noUnusedLocals": true,
24+
"resolveJsonModule": true,
25+
"removeComments": false
26+
},
27+
"include": [
28+
"src/"
29+
]
30+
}

0 commit comments

Comments
 (0)