@depup/uploadthing 7.7.4-depup.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +33 -0
- package/changes.json +18 -0
- package/client/index.cjs +331 -0
- package/client/index.d.cts +36 -0
- package/client/index.d.cts.map +1 -0
- package/client/index.d.ts +36 -0
- package/client/index.d.ts.map +1 -0
- package/client/index.js +286 -0
- package/client/index.js.map +1 -0
- package/client-future/index.cjs +426 -0
- package/client-future/index.d.cts +373 -0
- package/client-future/index.d.cts.map +1 -0
- package/client-future/index.d.ts +373 -0
- package/client-future/index.d.ts.map +1 -0
- package/client-future/index.js +383 -0
- package/client-future/index.js.map +1 -0
- package/dist/chunk-CUT6urMc.cjs +30 -0
- package/dist/deprecations-DPGpmqha.cjs +13 -0
- package/dist/deprecations-pLmw6Ytd.js +8 -0
- package/dist/deprecations-pLmw6Ytd.js.map +1 -0
- package/dist/package-BQ_k22T9.cjs +11 -0
- package/dist/package-DpScpvTA.js +6 -0
- package/dist/package-DpScpvTA.js.map +1 -0
- package/dist/shared-schemas-BmG5ARoX.js +82 -0
- package/dist/shared-schemas-BmG5ARoX.js.map +1 -0
- package/dist/shared-schemas-CG9VaBtT.cjs +129 -0
- package/dist/to-web-request-BQtxSXgE.cjs +98 -0
- package/dist/to-web-request-DhP0wXG-.js +87 -0
- package/dist/to-web-request-DhP0wXG-.js.map +1 -0
- package/dist/types-Bs3w2d_3.d.ts +627 -0
- package/dist/types-Bs3w2d_3.d.ts.map +1 -0
- package/dist/types-DiVC1t2V.d.cts +625 -0
- package/dist/types-DiVC1t2V.d.cts.map +1 -0
- package/dist/upload-builder-BUa7tovh.d.cts +32 -0
- package/dist/upload-builder-BUa7tovh.d.cts.map +1 -0
- package/dist/upload-builder-BcFawEj0.d.ts +32 -0
- package/dist/upload-builder-BcFawEj0.d.ts.map +1 -0
- package/dist/upload-builder-BlFOAnsv.js +699 -0
- package/dist/upload-builder-BlFOAnsv.js.map +1 -0
- package/dist/upload-builder-D6Ken9H0.cjs +794 -0
- package/dist/ut-reporter-BHoyNnzW.cjs +120 -0
- package/dist/ut-reporter-Dlppchbx.js +103 -0
- package/dist/ut-reporter-Dlppchbx.js.map +1 -0
- package/effect-platform/index.cjs +22 -0
- package/effect-platform/index.d.cts +54 -0
- package/effect-platform/index.d.cts.map +1 -0
- package/effect-platform/index.d.ts +54 -0
- package/effect-platform/index.d.ts.map +1 -0
- package/effect-platform/index.js +19 -0
- package/effect-platform/index.js.map +1 -0
- package/express/index.cjs +30 -0
- package/express/index.d.cts +28 -0
- package/express/index.d.cts.map +1 -0
- package/express/index.d.ts +28 -0
- package/express/index.d.ts.map +1 -0
- package/express/index.js +27 -0
- package/express/index.js.map +1 -0
- package/fastify/index.cjs +27 -0
- package/fastify/index.d.cts +28 -0
- package/fastify/index.d.cts.map +1 -0
- package/fastify/index.d.ts +28 -0
- package/fastify/index.d.ts.map +1 -0
- package/fastify/index.js +24 -0
- package/fastify/index.js.map +1 -0
- package/h3/index.cjs +20 -0
- package/h3/index.d.cts +28 -0
- package/h3/index.d.cts.map +1 -0
- package/h3/index.d.ts +28 -0
- package/h3/index.d.ts.map +1 -0
- package/h3/index.js +17 -0
- package/h3/index.js.map +1 -0
- package/next/index.cjs +22 -0
- package/next/index.d.cts +30 -0
- package/next/index.d.cts.map +1 -0
- package/next/index.d.ts +30 -0
- package/next/index.d.ts.map +1 -0
- package/next/index.js +19 -0
- package/next/index.js.map +1 -0
- package/next-legacy/index.cjs +28 -0
- package/next-legacy/index.d.cts +28 -0
- package/next-legacy/index.d.cts.map +1 -0
- package/next-legacy/index.d.ts +28 -0
- package/next-legacy/index.d.ts.map +1 -0
- package/next-legacy/index.js +25 -0
- package/next-legacy/index.js.map +1 -0
- package/package.json +210 -0
- package/remix/index.cjs +22 -0
- package/remix/index.d.cts +30 -0
- package/remix/index.d.cts.map +1 -0
- package/remix/index.d.ts +30 -0
- package/remix/index.d.ts.map +1 -0
- package/remix/index.js +19 -0
- package/remix/index.js.map +1 -0
- package/server/index.cjs +414 -0
- package/server/index.d.cts +211 -0
- package/server/index.d.cts.map +1 -0
- package/server/index.d.ts +213 -0
- package/server/index.d.ts.map +1 -0
- package/server/index.js +405 -0
- package/server/index.js.map +1 -0
- package/tw/index.cjs +70 -0
- package/tw/index.d.cts +29 -0
- package/tw/index.d.cts.map +1 -0
- package/tw/index.d.ts +29 -0
- package/tw/index.d.ts.map +1 -0
- package/tw/index.js +74 -0
- package/tw/index.js.map +1 -0
- package/tw/v4.css +11 -0
- package/types/index.cjs +3 -0
- package/types/index.d.cts +2 -0
- package/types/index.d.ts +2 -0
- package/types/index.js +3 -0
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
const require_chunk = require('../dist/chunk-CUT6urMc.cjs');
|
|
2
|
+
const require_package = require('../dist/package-BQ_k22T9.cjs');
|
|
3
|
+
const require_ut_reporter = require('../dist/ut-reporter-BHoyNnzW.cjs');
|
|
4
|
+
const effect_Array = require_chunk.__toESM(require("effect/Array"));
|
|
5
|
+
const effect_Micro = require_chunk.__toESM(require("effect/Micro"));
|
|
6
|
+
const __uploadthing_shared = require_chunk.__toESM(require("@uploadthing/shared"));
|
|
7
|
+
const effect_Predicate = require_chunk.__toESM(require("effect/Predicate"));
|
|
8
|
+
|
|
9
|
+
//#region src/_internal/client-future.ts
|
|
10
|
+
/**
|
|
11
|
+
* Error indicating the XHR request failed
|
|
12
|
+
* @public
|
|
13
|
+
*/
|
|
14
|
+
var XHRError = class extends effect_Micro.TaggedError("XHRError") {};
|
|
15
|
+
/**
|
|
16
|
+
* Error indicating the upload was rejected during upload to the storage provider
|
|
17
|
+
* @public
|
|
18
|
+
*/
|
|
19
|
+
var UTStorageError = class extends effect_Micro.TaggedError("UTStorageError") {};
|
|
20
|
+
/**
|
|
21
|
+
* Error indicating the request to your UploadThing server failed
|
|
22
|
+
* @public
|
|
23
|
+
*/
|
|
24
|
+
var UTServerError = class extends effect_Micro.TaggedError("UTServerError") {};
|
|
25
|
+
/**
|
|
26
|
+
* Predicate function to check if a file is pending
|
|
27
|
+
* @public
|
|
28
|
+
*/
|
|
29
|
+
function isPendingFile(file) {
|
|
30
|
+
return file.status === "pending";
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Predicate function to check if a file is uploading
|
|
34
|
+
* @public
|
|
35
|
+
*/
|
|
36
|
+
function isUploadingFile(file) {
|
|
37
|
+
return file.status === "uploading";
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Predicate function to check if a file is failed
|
|
41
|
+
* @public
|
|
42
|
+
*/
|
|
43
|
+
function isFailedFile(file) {
|
|
44
|
+
return file.status === "failed";
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Predicate function to check if a file is uploaded
|
|
48
|
+
* @public
|
|
49
|
+
*/
|
|
50
|
+
function isUploadedFile(file) {
|
|
51
|
+
return file.status === "uploaded";
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* @internal
|
|
55
|
+
*/
|
|
56
|
+
function makePendingFile(file) {
|
|
57
|
+
return Object.assign(file, {
|
|
58
|
+
status: "pending",
|
|
59
|
+
sent: 0,
|
|
60
|
+
key: null,
|
|
61
|
+
customId: null
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Modifies a pending file to an uploading file in place
|
|
66
|
+
* @internal
|
|
67
|
+
*/
|
|
68
|
+
function transitionToUploading(file, rangeStart) {
|
|
69
|
+
const uploadingFile = file;
|
|
70
|
+
uploadingFile.sent = rangeStart;
|
|
71
|
+
uploadingFile.status = "uploading";
|
|
72
|
+
return uploadingFile;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Modifies an uploading file to an uploaded file in place
|
|
76
|
+
* @internal
|
|
77
|
+
*/
|
|
78
|
+
function transitionToUploaded(file, xhrResult) {
|
|
79
|
+
const uploadedFile = file;
|
|
80
|
+
uploadedFile.status = "uploaded";
|
|
81
|
+
uploadedFile.data = xhrResult.serverData;
|
|
82
|
+
uploadedFile.hash = xhrResult.fileHash;
|
|
83
|
+
uploadedFile.url = xhrResult.ufsUrl;
|
|
84
|
+
return uploadedFile;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Modifies a pending or uploading file to a failed file in place
|
|
88
|
+
* @internal
|
|
89
|
+
*/
|
|
90
|
+
function transitionToFailed(file, reason) {
|
|
91
|
+
const failedFile = file;
|
|
92
|
+
failedFile.status = "failed";
|
|
93
|
+
failedFile.reason = reason;
|
|
94
|
+
return failedFile;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Upload a file to the storage provider
|
|
98
|
+
* Throughout the upload, the file's status and progress will be updated
|
|
99
|
+
* @remarks This function never rejects
|
|
100
|
+
* @internal
|
|
101
|
+
*/
|
|
102
|
+
function uploadFile(url, { file, files, XHRImpl,...options }) {
|
|
103
|
+
return (0, __uploadthing_shared.fetchEff)(url, {
|
|
104
|
+
method: "HEAD",
|
|
105
|
+
headers: options.traceHeaders
|
|
106
|
+
}).pipe(effect_Micro.map(({ headers }) => Number.parseInt(headers.get("x-ut-range-start") ?? "0")), effect_Micro.map((rangeStart) => transitionToUploading(file, rangeStart)), effect_Micro.tap((uploadingFile) => {
|
|
107
|
+
options.onEvent({
|
|
108
|
+
type: "upload-started",
|
|
109
|
+
file: uploadingFile,
|
|
110
|
+
files
|
|
111
|
+
});
|
|
112
|
+
}), effect_Micro.flatMap((uploadingFile) => effect_Micro.async((resume) => {
|
|
113
|
+
const xhr = new XHRImpl();
|
|
114
|
+
xhr.open("PUT", url, true);
|
|
115
|
+
const rangeStart = uploadingFile.sent;
|
|
116
|
+
xhr.setRequestHeader("Range", `bytes=${rangeStart}-`);
|
|
117
|
+
xhr.setRequestHeader("x-uploadthing-version", require_package.version);
|
|
118
|
+
xhr.setRequestHeader("b3", options.traceHeaders.b3);
|
|
119
|
+
xhr.setRequestHeader("traceparent", options.traceHeaders.traceparent);
|
|
120
|
+
xhr.responseType = "json";
|
|
121
|
+
xhr.upload.addEventListener("progress", (ev) => {
|
|
122
|
+
uploadingFile.sent = rangeStart + ev.loaded;
|
|
123
|
+
options.onEvent({
|
|
124
|
+
type: "upload-progress",
|
|
125
|
+
file: uploadingFile,
|
|
126
|
+
files
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
xhr.addEventListener("load", () => {
|
|
130
|
+
if (xhr.status > 299 || effect_Predicate.hasProperty(xhr.response, "error")) resume(new UTStorageError({
|
|
131
|
+
message: String(xhr.response.error),
|
|
132
|
+
response: xhr.response
|
|
133
|
+
}));
|
|
134
|
+
else {
|
|
135
|
+
const uploadedFile = transitionToUploaded(uploadingFile, xhr.response);
|
|
136
|
+
options.onEvent({
|
|
137
|
+
type: "upload-completed",
|
|
138
|
+
file: uploadedFile,
|
|
139
|
+
files
|
|
140
|
+
});
|
|
141
|
+
resume(effect_Micro.succeed(uploadedFile));
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
xhr.addEventListener("error", () => {
|
|
145
|
+
resume(new XHRError({
|
|
146
|
+
message: `XHR failed ${xhr.status} ${xhr.statusText}`,
|
|
147
|
+
xhr
|
|
148
|
+
}));
|
|
149
|
+
});
|
|
150
|
+
const formData = new FormData();
|
|
151
|
+
/**
|
|
152
|
+
* iOS/React Native FormData handling requires special attention:
|
|
153
|
+
*
|
|
154
|
+
* Issue: In React Native, iOS crashes with "attempt to insert nil object" when appending File directly
|
|
155
|
+
* to FormData. This happens because iOS tries to create NSDictionary from the file object and expects
|
|
156
|
+
* specific structure {uri, type, name}.
|
|
157
|
+
*
|
|
158
|
+
*
|
|
159
|
+
* Note: Don't try to use Blob or modify File object - iOS specifically needs plain object
|
|
160
|
+
* with these properties to create valid NSDictionary.
|
|
161
|
+
*/
|
|
162
|
+
if ("uri" in file) formData.append("file", {
|
|
163
|
+
uri: file.uri,
|
|
164
|
+
type: file.type,
|
|
165
|
+
name: file.name,
|
|
166
|
+
...rangeStart > 0 && { range: rangeStart }
|
|
167
|
+
});
|
|
168
|
+
else formData.append("file", rangeStart > 0 ? file.slice(rangeStart) : file);
|
|
169
|
+
xhr.send(formData);
|
|
170
|
+
return effect_Micro.sync(() => xhr.abort());
|
|
171
|
+
})), effect_Micro.catchAll((error) => {
|
|
172
|
+
const failedFile = transitionToFailed(file, error);
|
|
173
|
+
options.onEvent({
|
|
174
|
+
type: "upload-failed",
|
|
175
|
+
file: failedFile,
|
|
176
|
+
files
|
|
177
|
+
});
|
|
178
|
+
return effect_Micro.succeed(failedFile);
|
|
179
|
+
}));
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Request presigned URLs from your server for a set of files
|
|
183
|
+
* @internal
|
|
184
|
+
*/
|
|
185
|
+
function requestPresignedUrls(options) {
|
|
186
|
+
const reportEventToUT = require_ut_reporter.createUTReporter({
|
|
187
|
+
endpoint: String(options.endpoint),
|
|
188
|
+
package: options.package,
|
|
189
|
+
url: options.url,
|
|
190
|
+
headers: options.headers,
|
|
191
|
+
traceHeaders: options.traceHeaders
|
|
192
|
+
});
|
|
193
|
+
return reportEventToUT("upload", {
|
|
194
|
+
input: options.input,
|
|
195
|
+
files: options.files.map((f) => ({
|
|
196
|
+
name: f.name,
|
|
197
|
+
size: f.size,
|
|
198
|
+
type: f.type,
|
|
199
|
+
lastModified: f.lastModified
|
|
200
|
+
}))
|
|
201
|
+
}).pipe(effect_Micro.mapError((error) => new UTServerError({
|
|
202
|
+
message: error.message,
|
|
203
|
+
cause: error,
|
|
204
|
+
data: error.data
|
|
205
|
+
})));
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Upload a set of files to the storage provider
|
|
209
|
+
* @internal
|
|
210
|
+
*/
|
|
211
|
+
function uploadFiles(endpoint, options) {
|
|
212
|
+
const pendingFiles = options.files.map(makePendingFile);
|
|
213
|
+
const traceHeaders = require_ut_reporter.generateTraceHeaders();
|
|
214
|
+
return requestPresignedUrls({
|
|
215
|
+
endpoint,
|
|
216
|
+
files: options.files,
|
|
217
|
+
url: options.url,
|
|
218
|
+
input: options.input,
|
|
219
|
+
headers: options.headers,
|
|
220
|
+
package: options.package,
|
|
221
|
+
traceHeaders
|
|
222
|
+
}).pipe(effect_Micro.map(effect_Array.zip(pendingFiles)), effect_Micro.tap((pairs) => {
|
|
223
|
+
for (const [presigned, file] of pairs) {
|
|
224
|
+
file.key = presigned.key;
|
|
225
|
+
file.customId = presigned.customId;
|
|
226
|
+
}
|
|
227
|
+
options.onEvent({
|
|
228
|
+
type: "presigned-received",
|
|
229
|
+
files: pendingFiles
|
|
230
|
+
});
|
|
231
|
+
}), effect_Micro.flatMap((pairs) => effect_Micro.forEach(pairs, ([presigned, file]) => uploadFile(presigned.url, {
|
|
232
|
+
file,
|
|
233
|
+
files: pendingFiles,
|
|
234
|
+
input: options.input,
|
|
235
|
+
onEvent: options.onEvent,
|
|
236
|
+
XHRImpl: globalThis.XMLHttpRequest,
|
|
237
|
+
traceHeaders
|
|
238
|
+
}), { concurrency: 6 })));
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
//#endregion
|
|
242
|
+
//#region src/client-future.ts
|
|
243
|
+
const version$1 = require_package.version;
|
|
244
|
+
/**
|
|
245
|
+
* Generate a typed uploader for a given FileRouter
|
|
246
|
+
* @public
|
|
247
|
+
* @remarks This API is not covered by semver
|
|
248
|
+
*/
|
|
249
|
+
const future_genUploader = (initOpts) => {
|
|
250
|
+
const routeRegistry = (0, __uploadthing_shared.createIdentityProxy)();
|
|
251
|
+
const controllableUpload = async (slug, options) => {
|
|
252
|
+
const endpoint = typeof slug === "function" ? slug(routeRegistry) : slug;
|
|
253
|
+
const fetchFn = initOpts?.fetch ?? window.fetch;
|
|
254
|
+
const traceHeaders = require_ut_reporter.generateTraceHeaders();
|
|
255
|
+
const pExit = await requestPresignedUrls({
|
|
256
|
+
endpoint: String(endpoint),
|
|
257
|
+
files: options.files,
|
|
258
|
+
url: (0, __uploadthing_shared.resolveMaybeUrlArg)(initOpts?.url),
|
|
259
|
+
input: options.input,
|
|
260
|
+
headers: options.headers,
|
|
261
|
+
traceHeaders
|
|
262
|
+
}).pipe(effect_Micro.provideService(__uploadthing_shared.FetchContext, fetchFn), (effect) => effect_Micro.runPromiseExit(effect, options.signal && { signal: options.signal }));
|
|
263
|
+
if (pExit._tag === "Failure") throw effect_Micro.causeSquash(pExit.cause);
|
|
264
|
+
const presigneds = pExit.value;
|
|
265
|
+
const pendingFiles = options.files.map(makePendingFile);
|
|
266
|
+
options.onEvent({
|
|
267
|
+
type: "presigned-received",
|
|
268
|
+
files: pendingFiles
|
|
269
|
+
});
|
|
270
|
+
const uploads = /* @__PURE__ */ new Map();
|
|
271
|
+
const uploadEffect = (file, presigned) => uploadFile(presigned.url, {
|
|
272
|
+
file,
|
|
273
|
+
files: pendingFiles,
|
|
274
|
+
input: options.input,
|
|
275
|
+
onEvent: options.onEvent,
|
|
276
|
+
traceHeaders,
|
|
277
|
+
XHRImpl: globalThis.XMLHttpRequest
|
|
278
|
+
}).pipe(effect_Micro.provideService(__uploadthing_shared.FetchContext, fetchFn));
|
|
279
|
+
for (const [presigned, file] of effect_Array.zip(presigneds, pendingFiles)) {
|
|
280
|
+
file.key = presigned.key;
|
|
281
|
+
file.customId = presigned.customId;
|
|
282
|
+
const deferred = require_ut_reporter.createDeferred();
|
|
283
|
+
uploads.set(file, {
|
|
284
|
+
presigned,
|
|
285
|
+
deferred
|
|
286
|
+
});
|
|
287
|
+
effect_Micro.runPromiseExit(uploadEffect(file, presigned), { signal: deferred.ac.signal }).then((result) => {
|
|
288
|
+
if (result._tag === "Success") return deferred.resolve(result.value);
|
|
289
|
+
else if (result.cause._tag === "Interrupt") throw new __uploadthing_shared.UploadPausedError();
|
|
290
|
+
throw effect_Micro.causeSquash(result.cause);
|
|
291
|
+
}).catch((err) => {
|
|
292
|
+
if (err instanceof __uploadthing_shared.UploadPausedError) return;
|
|
293
|
+
deferred.reject(err);
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Pause an ongoing upload
|
|
298
|
+
* @param file The file upload you want to pause. Can be omitted to pause all files
|
|
299
|
+
*/
|
|
300
|
+
const pauseUpload = (file) => {
|
|
301
|
+
const files = effect_Array.ensure(file ?? options.files);
|
|
302
|
+
for (const file$1 of files) {
|
|
303
|
+
const upload = uploads.get(file$1);
|
|
304
|
+
if (!upload) return;
|
|
305
|
+
if (upload.deferred.ac.signal.aborted) return;
|
|
306
|
+
upload.deferred.ac.abort();
|
|
307
|
+
}
|
|
308
|
+
};
|
|
309
|
+
/**
|
|
310
|
+
* Abort an upload
|
|
311
|
+
* @param file The file upload you want to abort. Can be omitted to abort all files
|
|
312
|
+
*/
|
|
313
|
+
const abortUpload = (file) => {
|
|
314
|
+
const files = effect_Array.ensure(file ?? options.files);
|
|
315
|
+
for (const file$1 of files) {
|
|
316
|
+
const upload = uploads.get(file$1);
|
|
317
|
+
if (!upload) throw "No upload found";
|
|
318
|
+
if (upload.deferred.ac.signal.aborted === false) {
|
|
319
|
+
upload.deferred.ac.abort();
|
|
320
|
+
const failedFile = transitionToFailed(file$1, new __uploadthing_shared.UploadAbortedError());
|
|
321
|
+
upload.deferred.resolve(failedFile);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
options.onEvent({
|
|
325
|
+
type: "upload-aborted",
|
|
326
|
+
files
|
|
327
|
+
});
|
|
328
|
+
};
|
|
329
|
+
options.signal?.addEventListener("abort", () => {
|
|
330
|
+
abortUpload();
|
|
331
|
+
});
|
|
332
|
+
/**
|
|
333
|
+
* Resume a paused upload
|
|
334
|
+
* @param file The file upload you want to resume. Can be omitted to resume all files
|
|
335
|
+
*/
|
|
336
|
+
const resumeUpload = (file) => {
|
|
337
|
+
const files = effect_Array.ensure(file ?? options.files);
|
|
338
|
+
for (const file$1 of files) {
|
|
339
|
+
const upload = uploads.get(file$1);
|
|
340
|
+
if (!upload) throw "No upload found";
|
|
341
|
+
upload.deferred.ac = new AbortController();
|
|
342
|
+
effect_Micro.runPromiseExit(uploadEffect(file$1, upload.presigned), { signal: upload.deferred.ac.signal }).then((result) => {
|
|
343
|
+
if (result._tag === "Success") return upload.deferred.resolve(result.value);
|
|
344
|
+
else if (result.cause._tag === "Interrupt") throw new __uploadthing_shared.UploadPausedError();
|
|
345
|
+
throw effect_Micro.causeSquash(result.cause);
|
|
346
|
+
}).catch((err) => {
|
|
347
|
+
if (err instanceof __uploadthing_shared.UploadPausedError) return;
|
|
348
|
+
upload.deferred.reject(err);
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
};
|
|
352
|
+
/**
|
|
353
|
+
* Wait for an upload to complete
|
|
354
|
+
* @param file The file upload you want to wait for. Can be omitted to wait for all files
|
|
355
|
+
*/
|
|
356
|
+
const done = async (file) => {
|
|
357
|
+
const promises = [];
|
|
358
|
+
const files = effect_Array.ensure(file ?? options.files);
|
|
359
|
+
for (const file$1 of files) {
|
|
360
|
+
const upload = uploads.get(file$1);
|
|
361
|
+
if (!upload) throw "No upload found";
|
|
362
|
+
promises.push(upload.deferred.promise);
|
|
363
|
+
}
|
|
364
|
+
const results = await Promise.all(promises);
|
|
365
|
+
return file ? results[0] : results;
|
|
366
|
+
};
|
|
367
|
+
return {
|
|
368
|
+
pauseUpload,
|
|
369
|
+
abortUpload,
|
|
370
|
+
resumeUpload,
|
|
371
|
+
done
|
|
372
|
+
};
|
|
373
|
+
};
|
|
374
|
+
const uploadFiles$1 = (slug, opts) => controllableUpload(slug, opts).then((_) => _.done());
|
|
375
|
+
return {
|
|
376
|
+
uploadFiles: uploadFiles$1,
|
|
377
|
+
createUpload: controllableUpload,
|
|
378
|
+
routeRegistry
|
|
379
|
+
};
|
|
380
|
+
};
|
|
381
|
+
|
|
382
|
+
//#endregion
|
|
383
|
+
exports.UTServerError = UTServerError;
|
|
384
|
+
exports.UTStorageError = UTStorageError;
|
|
385
|
+
Object.defineProperty(exports, 'UploadAbortedError', {
|
|
386
|
+
enumerable: true,
|
|
387
|
+
get: function () {
|
|
388
|
+
return __uploadthing_shared.UploadAbortedError;
|
|
389
|
+
}
|
|
390
|
+
});
|
|
391
|
+
Object.defineProperty(exports, 'UploadPausedError', {
|
|
392
|
+
enumerable: true,
|
|
393
|
+
get: function () {
|
|
394
|
+
return __uploadthing_shared.UploadPausedError;
|
|
395
|
+
}
|
|
396
|
+
});
|
|
397
|
+
exports.XHRError = XHRError;
|
|
398
|
+
exports.future_genUploader = future_genUploader;
|
|
399
|
+
Object.defineProperty(exports, 'generateClientDropzoneAccept', {
|
|
400
|
+
enumerable: true,
|
|
401
|
+
get: function () {
|
|
402
|
+
return __uploadthing_shared.generateClientDropzoneAccept;
|
|
403
|
+
}
|
|
404
|
+
});
|
|
405
|
+
Object.defineProperty(exports, 'generateMimeTypes', {
|
|
406
|
+
enumerable: true,
|
|
407
|
+
get: function () {
|
|
408
|
+
return __uploadthing_shared.generateMimeTypes;
|
|
409
|
+
}
|
|
410
|
+
});
|
|
411
|
+
Object.defineProperty(exports, 'generatePermittedFileTypes', {
|
|
412
|
+
enumerable: true,
|
|
413
|
+
get: function () {
|
|
414
|
+
return __uploadthing_shared.generatePermittedFileTypes;
|
|
415
|
+
}
|
|
416
|
+
});
|
|
417
|
+
exports.isFailedFile = isFailedFile;
|
|
418
|
+
exports.isPendingFile = isPendingFile;
|
|
419
|
+
exports.isUploadedFile = isUploadedFile;
|
|
420
|
+
exports.isUploadingFile = isUploadingFile;
|
|
421
|
+
exports.makePendingFile = makePendingFile;
|
|
422
|
+
exports.requestPresignedUrls = requestPresignedUrls;
|
|
423
|
+
exports.transitionToFailed = transitionToFailed;
|
|
424
|
+
exports.uploadFile = uploadFile;
|
|
425
|
+
exports.uploadFiles = uploadFiles;
|
|
426
|
+
exports.version = version$1;
|