@@ -44,10 +44,12 @@ function isObject<T>(v: any): v is T {
4444 return typeof v === "object" && v !== null ;
4545}
4646
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 ) ) ;
5153}
5254
5355// 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[]) {
5658 return files . map ( ( file ) => toFileWithPath ( file ) ) ;
5759}
5860
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 ;
7370 }
7471
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 ) ) ;
7874}
7975
8076function noIgnoredFiles ( files : FileWithPath [ ] ) {
8177 return files . filter ( ( file ) => FILES_TO_IGNORE . indexOf ( file . name ) === - 1 ) ;
8278}
8379
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-
10380// https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem
10481function toFilePromises ( item : DataTransferItem ) {
10582 if ( typeof item . webkitGetAsEntry !== "function" ) {
0 commit comments