@@ -29,6 +29,10 @@ export async function* uploadFilesWithProgress(
29
29
parentCommit ?: CommitParams [ "parentCommit" ] ;
30
30
abortSignal ?: CommitParams [ "abortSignal" ] ;
31
31
maxFolderDepth ?: CommitParams [ "maxFolderDepth" ] ;
32
+ /**
33
+ * @deprecated Not yet ready for production use
34
+ */
35
+ useXet ?: CommitParams [ "useXet" ] ;
32
36
/**
33
37
* Set this to true in order to have progress events for hashing
34
38
*/
@@ -51,104 +55,112 @@ export async function* uploadFilesWithProgress(
51
55
parentCommit : params . parentCommit ,
52
56
useWebWorkers : params . useWebWorkers ,
53
57
abortSignal : params . abortSignal ,
54
- fetch : async ( input , init ) => {
55
- if ( ! init ) {
56
- return fetch ( input ) ;
57
- }
58
+ useXet : params . useXet ,
59
+ fetch :
60
+ params . useXet === true
61
+ ? // no need for custom fetch function if we use Xet, as we already have progress events in the commit function for file uploads in that case
62
+ undefined
63
+ : async ( input , init ) => {
64
+ if ( ! init ) {
65
+ return fetch ( input ) ;
66
+ }
58
67
59
- if (
60
- ! typedInclude ( [ "PUT" , "POST" ] , init . method ) ||
61
- ! ( "progressHint" in init ) ||
62
- ! init . progressHint ||
63
- typeof XMLHttpRequest === "undefined" ||
64
- typeof input !== "string" ||
65
- ( ! ( init . body instanceof ArrayBuffer ) &&
66
- ! ( init . body instanceof Blob ) &&
67
- ! ( init . body instanceof File ) &&
68
- typeof init . body !== "string" )
69
- ) {
70
- return fetch ( input , init ) ;
71
- }
68
+ if (
69
+ ! typedInclude ( [ "PUT" , "POST" ] , init . method ) ||
70
+ ! ( "progressHint" in init ) ||
71
+ ! init . progressHint ||
72
+ typeof XMLHttpRequest === "undefined" ||
73
+ typeof input !== "string" ||
74
+ ( ! ( init . body instanceof ArrayBuffer ) &&
75
+ ! ( init . body instanceof Blob ) &&
76
+ ! ( init . body instanceof File ) &&
77
+ typeof init . body !== "string" )
78
+ ) {
79
+ return fetch ( input , init ) ;
80
+ }
72
81
73
- const progressHint = init . progressHint as {
74
- progressCallback : ( progress : number ) => void ;
75
- } & ( Record < string , never > | { part : number ; numParts : number } ) ;
76
- const progressCallback = progressHint . progressCallback ;
82
+ const progressHint = init . progressHint as {
83
+ progressCallback : ( progress : number ) => void ;
84
+ } & ( Record < string , never > | { part : number ; numParts : number } ) ;
85
+ const progressCallback = progressHint . progressCallback ;
77
86
78
- const xhr = new XMLHttpRequest ( ) ;
87
+ const xhr = new XMLHttpRequest ( ) ;
79
88
80
- xhr . upload . addEventListener ( "progress" , ( event ) => {
81
- if ( event . lengthComputable ) {
82
- if ( progressHint . part !== undefined ) {
83
- let tracking = multipartUploadTracking . get ( progressCallback ) ;
84
- if ( ! tracking ) {
85
- tracking = { numParts : progressHint . numParts , partsProgress : { } } ;
86
- multipartUploadTracking . set ( progressCallback , tracking ) ;
87
- }
88
- tracking . partsProgress [ progressHint . part ] = event . loaded / event . total ;
89
- let totalProgress = 0 ;
90
- for ( const partProgress of Object . values ( tracking . partsProgress ) ) {
91
- totalProgress += partProgress ;
92
- }
93
- if ( totalProgress === tracking . numParts ) {
94
- progressCallback ( 0.9999999999 ) ;
95
- } else {
96
- progressCallback ( totalProgress / tracking . numParts ) ;
97
- }
98
- } else {
99
- if ( event . loaded === event . total ) {
100
- progressCallback ( 0.9999999999 ) ;
101
- } else {
102
- progressCallback ( event . loaded / event . total ) ;
103
- }
104
- }
105
- }
106
- } ) ;
89
+ xhr . upload . addEventListener ( "progress" , ( event ) => {
90
+ if ( event . lengthComputable ) {
91
+ if ( progressHint . part !== undefined ) {
92
+ let tracking = multipartUploadTracking . get ( progressCallback ) ;
93
+ if ( ! tracking ) {
94
+ tracking = { numParts : progressHint . numParts , partsProgress : { } } ;
95
+ multipartUploadTracking . set ( progressCallback , tracking ) ;
96
+ }
97
+ tracking . partsProgress [ progressHint . part ] = event . loaded / event . total ;
98
+ let totalProgress = 0 ;
99
+ for ( const partProgress of Object . values ( tracking . partsProgress ) ) {
100
+ totalProgress += partProgress ;
101
+ }
102
+ if ( totalProgress === tracking . numParts ) {
103
+ progressCallback ( 0.9999999999 ) ;
104
+ } else {
105
+ progressCallback ( totalProgress / tracking . numParts ) ;
106
+ }
107
+ } else {
108
+ if ( event . loaded === event . total ) {
109
+ progressCallback ( 0.9999999999 ) ;
110
+ } else {
111
+ progressCallback ( event . loaded / event . total ) ;
112
+ }
113
+ }
114
+ }
115
+ } ) ;
107
116
108
- xhr . open ( init . method , input , true ) ;
117
+ xhr . open ( init . method , input , true ) ;
109
118
110
- if ( init . headers ) {
111
- const headers = new Headers ( init . headers ) ;
112
- headers . forEach ( ( value , key ) => {
113
- xhr . setRequestHeader ( key , value ) ;
114
- } ) ;
115
- }
119
+ if ( init . headers ) {
120
+ const headers = new Headers ( init . headers ) ;
121
+ headers . forEach ( ( value , key ) => {
122
+ xhr . setRequestHeader ( key , value ) ;
123
+ } ) ;
124
+ }
116
125
117
- init . signal ?. throwIfAborted ( ) ;
118
- xhr . send ( init . body ) ;
126
+ init . signal ?. throwIfAborted ( ) ;
127
+ xhr . send ( init . body ) ;
119
128
120
- return new Promise ( ( resolve , reject ) => {
121
- xhr . addEventListener ( "load" , ( ) => {
122
- resolve (
123
- new Response ( xhr . responseText , {
124
- status : xhr . status ,
125
- statusText : xhr . statusText ,
126
- headers : Object . fromEntries (
127
- xhr
128
- . getAllResponseHeaders ( )
129
- . trim ( )
130
- . split ( "\n" )
131
- . map ( ( header ) => [ header . slice ( 0 , header . indexOf ( ":" ) ) , header . slice ( header . indexOf ( ":" ) + 1 ) . trim ( ) ] )
132
- ) ,
133
- } )
134
- ) ;
135
- } ) ;
136
- xhr . addEventListener ( "error" , ( ) => {
137
- reject ( new Error ( xhr . statusText ) ) ;
138
- } ) ;
129
+ return new Promise ( ( resolve , reject ) => {
130
+ xhr . addEventListener ( "load" , ( ) => {
131
+ resolve (
132
+ new Response ( xhr . responseText , {
133
+ status : xhr . status ,
134
+ statusText : xhr . statusText ,
135
+ headers : Object . fromEntries (
136
+ xhr
137
+ . getAllResponseHeaders ( )
138
+ . trim ( )
139
+ . split ( "\n" )
140
+ . map ( ( header ) => [
141
+ header . slice ( 0 , header . indexOf ( ":" ) ) ,
142
+ header . slice ( header . indexOf ( ":" ) + 1 ) . trim ( ) ,
143
+ ] )
144
+ ) ,
145
+ } )
146
+ ) ;
147
+ } ) ;
148
+ xhr . addEventListener ( "error" , ( ) => {
149
+ reject ( new Error ( xhr . statusText ) ) ;
150
+ } ) ;
139
151
140
- if ( init . signal ) {
141
- init . signal . addEventListener ( "abort" , ( ) => {
142
- xhr . abort ( ) ;
152
+ if ( init . signal ) {
153
+ init . signal . addEventListener ( "abort" , ( ) => {
154
+ xhr . abort ( ) ;
143
155
144
- try {
145
- init . signal ?. throwIfAborted ( ) ;
146
- } catch ( err ) {
147
- reject ( err ) ;
148
- }
149
- } ) ;
150
- }
151
- } ) ;
152
- } ,
156
+ try {
157
+ init . signal ?. throwIfAborted ( ) ;
158
+ } catch ( err ) {
159
+ reject ( err ) ;
160
+ }
161
+ } ) ;
162
+ }
163
+ } ) ;
164
+ } ,
153
165
} ) ;
154
166
}
0 commit comments