@@ -44,10 +44,12 @@ function isObject<T>(v: any): v is T {
44
44
return typeof v === "object" && v !== null ;
45
45
}
46
46
47
- function getInputFiles ( evt : Event ) {
48
- return fromList < FileWithPath > ( ( evt . target as HTMLInputElement ) . files ) . map (
49
- ( file ) => toFileWithPath ( file ) ,
50
- ) ;
47
+ function getInputFiles ( event : Event ) : FileWithPath [ ] {
48
+ if ( ! ( event . target instanceof HTMLInputElement ) || ! event . target . files ) {
49
+ return [ ] ;
50
+ }
51
+
52
+ return Array . from ( event . target . files ) . map ( ( file ) => toFileWithPath ( file ) ) ;
51
53
}
52
54
53
55
// Ee expect each handle to be https://developer.mozilla.org/en-US/docs/Web/API/FileSystemFileHandle
@@ -56,50 +58,25 @@ async function getFsHandleFiles(handles: any[]) {
56
58
return files . map ( ( file ) => toFileWithPath ( file ) ) ;
57
59
}
58
60
59
- async function getDataTransferFiles ( dt : DataTransfer , type : string ) {
60
- // IE11 does not support dataTransfer.items
61
- // See https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/items#Browser_compatibility
62
- if ( dt . items ) {
63
- const items = fromList < DataTransferItem > ( dt . items ) . filter (
64
- ( item ) => item . kind === "file" ,
65
- ) ;
66
- // According to https://html.spec.whatwg.org/multipage/dnd.html#dndevents,
67
- // only 'dragstart' and 'drop' has access to the data (source node)
68
- if ( type !== "drop" ) {
69
- return items ;
70
- }
71
- const files = await Promise . all ( items . map ( toFilePromises ) ) ;
72
- return noIgnoredFiles ( flatten < FileWithPath > ( files ) ) ;
61
+ async function getDataTransferFiles ( dataTransfer : DataTransfer , type : string ) {
62
+ const items = Array . from ( dataTransfer . items ) . filter (
63
+ ( item ) => item . kind === "file" ,
64
+ ) ;
65
+
66
+ // According to https://html.spec.whatwg.org/multipage/dnd.html#dndevents,
67
+ // only 'dragstart' and 'drop' has access to the data (source node)
68
+ if ( type !== "drop" ) {
69
+ return items ;
73
70
}
74
71
75
- return noIgnoredFiles (
76
- fromList < FileWithPath > ( dt . files ) . map ( ( file ) => toFileWithPath ( file ) ) ,
77
- ) ;
72
+ const files = await Promise . all ( items . map ( toFilePromises ) ) ;
73
+ return noIgnoredFiles ( flatten < FileWithPath > ( files ) ) ;
78
74
}
79
75
80
76
function noIgnoredFiles ( files : FileWithPath [ ] ) {
81
77
return files . filter ( ( file ) => FILES_TO_IGNORE . indexOf ( file . name ) === - 1 ) ;
82
78
}
83
79
84
- // IE11 does not support Array.from()
85
- // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from#Browser_compatibility
86
- // https://developer.mozilla.org/en-US/docs/Web/API/FileList
87
- // https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItemList
88
- function fromList < T > ( items : DataTransferItemList | FileList | null ) : T [ ] {
89
- if ( items === null ) {
90
- return [ ] ;
91
- }
92
-
93
- const files = [ ] ;
94
-
95
- for ( let i = 0 ; i < items . length ; i ++ ) {
96
- const file = items [ i ] ;
97
- files . push ( file ) ;
98
- }
99
-
100
- return files as any ;
101
- }
102
-
103
80
// https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem
104
81
function toFilePromises ( item : DataTransferItem ) {
105
82
if ( typeof item . webkitGetAsEntry !== "function" ) {
0 commit comments