@visulima/storage-client 1.0.0-alpha.14 → 1.0.0-alpha.16

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.
Files changed (42) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.md +23 -0
  3. package/dist/index.d.ts +24 -4
  4. package/dist/index.js +1 -1
  5. package/dist/packem_shared/MemoryUrlStorage-DEJTeeWV.js +1 -0
  6. package/dist/packem_shared/UploadControl-CKU7Tv3Q.js +1 -0
  7. package/dist/packem_shared/createChunkedRestAdapter-DwdZ3iXf.js +1 -0
  8. package/dist/packem_shared/createChunkedRestUpload-DZbjiORY.js +1 -0
  9. package/dist/packem_shared/createChunkedRestUpload-WgfiLIto.js +1 -0
  10. package/dist/packem_shared/createTusAdapter-DMWzJjQ2.js +1 -0
  11. package/dist/packem_shared/createTusUpload-Con3Nqu0.js +1 -0
  12. package/dist/packem_shared/createTusUpload-l00I3jXp.js +1 -0
  13. package/dist/packem_shared/{createUpload-BF6TujIH.js → createUpload-D3_GPTNX.js} +1 -1
  14. package/dist/packem_shared/{createUpload-0qE79TWD.js → createUpload-RIaQluah.js} +1 -1
  15. package/dist/packem_shared/defaultFingerprint-CI2Sdd2s.js +1 -0
  16. package/dist/packem_shared/uploader.d-B1FMsMcN.d.ts +381 -0
  17. package/dist/packem_shared/useChunkedRestUpload-BwOE2zhr.js +1 -0
  18. package/dist/packem_shared/useChunkedRestUpload-DNGNQIIx.js +1 -0
  19. package/dist/packem_shared/useTusUpload-Bz4XE_4p.js +1 -0
  20. package/dist/packem_shared/useTusUpload-Dsq9GGEt.js +1 -0
  21. package/dist/packem_shared/{useUpload-C5ZiPWFM.js → useUpload-B6rd2qkI.js} +1 -1
  22. package/dist/packem_shared/{useUpload-7OjscFW6.js → useUpload-BhLsUgVG.js} +1 -1
  23. package/dist/react/index.d.ts +17 -1
  24. package/dist/react/index.js +1 -1
  25. package/dist/solid/index.d.ts +13 -1
  26. package/dist/solid/index.js +1 -1
  27. package/dist/svelte/index.d.ts +13 -1
  28. package/dist/svelte/index.js +1 -1
  29. package/dist/vue/index.d.ts +13 -1
  30. package/dist/vue/index.js +1 -1
  31. package/package.json +2 -4
  32. package/dist/packem_shared/createChunkedRestAdapter-CWFhVX6x.js +0 -1
  33. package/dist/packem_shared/createChunkedRestUpload-BH_5ZAr2.js +0 -1
  34. package/dist/packem_shared/createChunkedRestUpload-DAoXFznW.js +0 -1
  35. package/dist/packem_shared/createTusAdapter-BbFsUNsP.js +0 -1
  36. package/dist/packem_shared/createTusUpload-DKIIHh2X.js +0 -1
  37. package/dist/packem_shared/createTusUpload-rZKMrL5n.js +0 -1
  38. package/dist/packem_shared/uploader.d-DsC50BbX.d.ts +0 -223
  39. package/dist/packem_shared/useChunkedRestUpload-C9RhEtUt.js +0 -1
  40. package/dist/packem_shared/useChunkedRestUpload-tirJ_5VX.js +0 -1
  41. package/dist/packem_shared/useTusUpload-B5KsdwDR.js +0 -1
  42. package/dist/packem_shared/useTusUpload-BwF0G1LE.js +0 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,37 @@
1
+ ## @visulima/storage-client [1.0.0-alpha.16](https://github.com/visulima/visulima/compare/@visulima/storage-client@1.0.0-alpha.15...@visulima/storage-client@1.0.0-alpha.16) (2026-06-02)
2
+
3
+ ### Bug Fixes
4
+
5
+ * **tests:** revert unsafe vitest autofixes from the lint sweep ([378f27c](https://github.com/visulima/visulima/commit/378f27caa370f1d3188aef2ed36d46839abc88c4))
6
+
7
+ ### Miscellaneous Chores
8
+
9
+ * apply eslint + prettier autofixes across packages ([c1bb784](https://github.com/visulima/visulima/commit/c1bb7848a0d93d0dfe2960c77e3cda22239c79a0))
10
+
11
+ ### Tests
12
+
13
+ * improve coverage across packages ([91bd6d3](https://github.com/visulima/visulima/commit/91bd6d3b61736e3c8bd1fc59b0b5955f76a5d323))
14
+ * **storage-client:** clear eslint errors in test suite ([#669](https://github.com/visulima/visulima/issues/669)) ([2a3928d](https://github.com/visulima/visulima/commit/2a3928d7a6fbe1dd7213e57f941ff3b1d6c745ec))
15
+
16
+ ## @visulima/storage-client [1.0.0-alpha.15](https://github.com/visulima/visulima/compare/@visulima/storage-client@1.0.0-alpha.14...@visulima/storage-client@1.0.0-alpha.15) (2026-05-27)
17
+
18
+ ### Features
19
+
20
+ * **storage-client:** add cross-process resume primitives for TUS and chunked REST ([88aa260](https://github.com/visulima/visulima/commit/88aa2602f810d8ce7769b056c64c8d048cbf8917))
21
+
22
+ ### Bug Fixes
23
+
24
+ * **storage-client:** percent-encode user fields in defaultFingerprint ([7c78a0f](https://github.com/visulima/visulima/commit/7c78a0f9512e2a673b941d80839e9f1e86b7b5d0))
25
+
26
+ ### Miscellaneous Chores
27
+
28
+ * **ci-stability:** green CI across vis, native, lint, tests, attw ([#651](https://github.com/visulima/visulima/issues/651)) ([d4eb684](https://github.com/visulima/visulima/commit/d4eb684b5f75c818c9251048c605a0ed54a268e3))
29
+ * sorted package.json ([b47c545](https://github.com/visulima/visulima/commit/b47c545591600fdab17d5cd3a3fbc68b61e199da))
30
+
31
+ ### Tests
32
+
33
+ * **repo:** add dist runtime + types integration tests ([32ee300](https://github.com/visulima/visulima/commit/32ee300b7184117a0ddf9f9d390f75f8932d5ed9))
34
+
1
35
  ## @visulima/storage-client [1.0.0-alpha.14](https://github.com/visulima/visulima/compare/@visulima/storage-client@1.0.0-alpha.13...@visulima/storage-client@1.0.0-alpha.14) (2026-05-14)
2
36
 
3
37
  ### Features
package/README.md CHANGED
@@ -274,6 +274,29 @@ const { upload, progress } = useChunkedRestUpload({
274
274
  await upload(file);
275
275
  ```
276
276
 
277
+ ### Cross-process resume
278
+
279
+ Both `useTusUpload` and `useChunkedRestUpload` (plus their Vue / Solid / Svelte equivalents) can resume
280
+ an upload after a page refresh, process restart, or hand-off to another tab.
281
+
282
+ - Pass `urlStorage: defaultUrlStorage()` and a later `upload(sameFile)` automatically resumes from the
283
+ saved server-side identifier — no extra code needed.
284
+ - Pass a shared `UploadControl` to drive `pause` / `resume` / `abort` from outside the hook, and call
285
+ `control.toJSON()` to get a token you can serialize and hand to `UploadControl.from(token)` elsewhere.
286
+
287
+ ```tsx
288
+ import { defaultUrlStorage, UploadControl, useTusUpload } from "@visulima/storage-client/react";
289
+
290
+ const control = useMemo(() => new UploadControl(), []);
291
+ const { upload } = useTusUpload({
292
+ endpoint: "/api/upload/tus",
293
+ urlStorage: defaultUrlStorage(),
294
+ control,
295
+ });
296
+ ```
297
+
298
+ See [API → Cross-process resume](https://visulima.com/docs/package/storage-client/api#cross-process-resume) for the full surface.
299
+
277
300
  ## Documentation
278
301
 
279
302
  For complete documentation and examples, visit:
package/dist/index.d.ts CHANGED
@@ -1,16 +1,22 @@
1
- import { U as UploadResult, a as Uploader, F as FileMeta } from "./packem_shared/uploader.d-DsC50BbX.js";
2
- export { B as BatchState, b as CoreUploaderOptions, c as UploadItem, d as UploaderEventHandler, e as UploaderEventType, f as createUploader } from "./packem_shared/uploader.d-DsC50BbX.js";
1
+ import { U as UploadControl, F as FingerprintFunction, a as UrlStorage, b as UploadResult$1, c as Uploader, d as FileMeta } from "./packem_shared/uploader.d-B1FMsMcN.js";
2
+ export { B as BatchState, e as CoreUploaderOptions, f as FingerprintInput, g as FingerprintProtocol, L as LocalStorageUrlStorage, M as MemoryUrlStorage, h as UploadControlAttachMeta, i as UploadControlBinding, j as UploadControlSnapshot, k as UploadItem, l as UploaderEventHandler, m as UploaderEventType, n as UrlStorageEntry, o as createUploader, p as defaultFingerprint, q as defaultUrlStorage } from "./packem_shared/uploader.d-B1FMsMcN.js";
3
3
  interface ChunkedRestAdapterOptions {
4
4
  /** Chunk size in bytes (default: 5MB) */
5
5
  chunkSize?: number;
6
+ /** Unified control handle. See `UploadControl`. */
7
+ control?: UploadControl;
6
8
  /** Upload endpoint URL */
7
9
  endpoint: string;
10
+ /** Customise the resume fingerprint. Defaults to `defaultFingerprint`. */
11
+ fingerprint?: FingerprintFunction;
8
12
  /** Maximum number of retry attempts */
9
13
  maxRetries?: number;
10
14
  /** Additional metadata to include with the upload */
11
15
  metadata?: Record<string, string>;
12
16
  /** Enable automatic retry on failure */
13
17
  retry?: boolean;
18
+ /** Persistent storage for resume identifiers. Opt-in. */
19
+ urlStorage?: UrlStorage;
14
20
  }
15
21
  interface ChunkedRestAdapter {
16
22
  /** Abort current upload */
@@ -62,7 +68,7 @@ interface MultipartAdapter {
62
68
  /** Clear all uploads */
63
69
  clear: () => void;
64
70
  /** Upload a file and return visulima-compatible result */
65
- upload: (file: File) => Promise<UploadResult>;
71
+ upload: (file: File) => Promise<UploadResult$1>;
66
72
  /** Upload multiple files as a batch and return item IDs */
67
73
  uploadBatch: (files: File[]) => string[];
68
74
  /** The underlying uploader instance */
@@ -166,14 +172,28 @@ declare const storageQueryKeys: {
166
172
  interface TusAdapterOptions {
167
173
  /** Chunk size for TUS uploads (default: 1MB) */
168
174
  chunkSize?: number;
175
+ /**
176
+ * Optional unified control handle. When passed, `pause`/`resume`/`abort`/`toJSON`
177
+ * on the control delegate to this adapter. Pre-loaded controls (see
178
+ * `UploadControl.from`) cause `upload()` to resume the prior session rather
179
+ * than creating a new one.
180
+ */
181
+ control?: UploadControl;
169
182
  /** TUS upload endpoint URL */
170
183
  endpoint: string;
184
+ /** Customise the resume fingerprint. Defaults to `defaultFingerprint`. */
185
+ fingerprint?: FingerprintFunction;
171
186
  /** Maximum number of retry attempts */
172
187
  maxRetries?: number;
173
188
  /** Additional metadata to include with the upload */
174
189
  metadata?: Record<string, string>;
175
190
  /** Enable automatic retry on failure */
176
191
  retry?: boolean;
192
+ /**
193
+ * Persistent storage for resume URLs. Defaults to no persistence — pass a
194
+ * `defaultUrlStorage()` (browser) or `MemoryUrlStorage` to opt in.
195
+ */
196
+ urlStorage?: UrlStorage;
177
197
  }
178
198
  interface TusAdapter {
179
199
  /** Abort the current upload */
@@ -205,4 +225,4 @@ interface TusAdapter {
205
225
  * with proper progress tracking, pause/resume, and event handling.
206
226
  */
207
227
  declare const createTusAdapter: (options: TusAdapterOptions) => TusAdapter;
208
- export { ApiError, ChunkedRestAdapter, ChunkedRestAdapterOptions, MultipartAdapter, MultipartAdapterOptions, TusAdapter, TusAdapterOptions, Uploader, buildUrl, createChunkedRestAdapter, createMultipartAdapter, createTusAdapter, deleteRequest, extractFileMetaFromHeaders, fetchFile, fetchHead, fetchJson, parseApiError, patchChunk, putFile, storageQueryKeys };
228
+ export { ApiError, ChunkedRestAdapter, ChunkedRestAdapterOptions, FingerprintFunction, MultipartAdapter, MultipartAdapterOptions, TusAdapter, TusAdapterOptions, UploadControl, Uploader, UrlStorage, buildUrl, createChunkedRestAdapter, createMultipartAdapter, createTusAdapter, deleteRequest, extractFileMetaFromHeaders, fetchFile, fetchHead, fetchJson, parseApiError, patchChunk, putFile, storageQueryKeys };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{default as t}from"./packem_shared/storageQueryKeys-cD4rL4b1.js";import{buildUrl as o,deleteRequest as p,extractFileMetaFromHeaders as d,fetchFile as f,fetchHead as c,fetchJson as l,parseApiError as s,patchChunk as u,putFile as m}from"./packem_shared/parseApiError-BiXX3oHJ.js";import{createChunkedRestAdapter as h}from"./packem_shared/createChunkedRestAdapter-CWFhVX6x.js";import{createMultipartAdapter as A}from"./packem_shared/createMultipartAdapter-B17aIZJS.js";import{createTusAdapter as n}from"./packem_shared/createTusAdapter-BbFsUNsP.js";import{createUploader as y}from"./packem_shared/createUploader-KOsp3cZt.js";export{o as buildUrl,h as createChunkedRestAdapter,A as createMultipartAdapter,n as createTusAdapter,y as createUploader,p as deleteRequest,d as extractFileMetaFromHeaders,f as fetchFile,c as fetchHead,l as fetchJson,s as parseApiError,u as patchChunk,m as putFile,t as storageQueryKeys};
1
+ import{default as t}from"./packem_shared/storageQueryKeys-cD4rL4b1.js";import{LocalStorageUrlStorage as a,MemoryUrlStorage as p,defaultUrlStorage as l}from"./packem_shared/MemoryUrlStorage-DEJTeeWV.js";import{UploadControl as d}from"./packem_shared/UploadControl-CKU7Tv3Q.js";import{buildUrl as u,deleteRequest as c,extractFileMetaFromHeaders as x,fetchFile as s,fetchHead as i,fetchJson as g,parseApiError as h,patchChunk as n,putFile as U}from"./packem_shared/parseApiError-BiXX3oHJ.js";import{createChunkedRestAdapter as A}from"./packem_shared/createChunkedRestAdapter-DwdZ3iXf.js";import{createMultipartAdapter as y}from"./packem_shared/createMultipartAdapter-B17aIZJS.js";import{createTusAdapter as M}from"./packem_shared/createTusAdapter-DMWzJjQ2.js";import{createUploader as H}from"./packem_shared/createUploader-KOsp3cZt.js";import{defaultFingerprint as b}from"./packem_shared/defaultFingerprint-CI2Sdd2s.js";export{a as LocalStorageUrlStorage,p as MemoryUrlStorage,d as UploadControl,u as buildUrl,A as createChunkedRestAdapter,y as createMultipartAdapter,M as createTusAdapter,H as createUploader,b as defaultFingerprint,l as defaultUrlStorage,c as deleteRequest,x as extractFileMetaFromHeaders,s as fetchFile,i as fetchHead,g as fetchJson,h as parseApiError,n as patchChunk,U as putFile,t as storageQueryKeys};
@@ -0,0 +1 @@
1
+ var o=Object.defineProperty;var a=(e,t)=>o(e,"name",{value:t,configurable:!0});var l=Object.defineProperty,i=a((e,t)=>l(e,"name",{value:t,configurable:!0}),"i");class c{static{a(this,"MemoryUrlStorage")}static{i(this,"MemoryUrlStorage")}#t=new Map;async addEntry(t){this.#t.set(t.fingerprint,t)}async findEntry(t){return this.#t.get(t)}async listEntries(){return[...this.#t.values()]}async removeEntry(t){this.#t.delete(t)}}const h="visulima-upload::";class g{static{a(this,"LocalStorageUrlStorage")}static{i(this,"LocalStorageUrlStorage")}#t;#e;constructor(t,r=h){const s=t??(typeof globalThis>"u"?void 0:globalThis.localStorage);if(!s)throw new Error("LocalStorageUrlStorage: no localStorage-like object available");this.#e=s,this.#t=r}async addEntry(t){this.#e.setItem(this.#r(t.fingerprint),JSON.stringify(t))}async findEntry(t){const r=this.#e.getItem(this.#r(t));if(r!==null)try{return JSON.parse(r)}catch{this.#e.removeItem(this.#r(t));return}}async listEntries(){const t=[];for(let r=0;r<this.#e.length;r+=1){const s=this.#e.key(r);if(!s?.startsWith(this.#t))continue;const n=this.#e.getItem(s);if(n!==null)try{t.push(JSON.parse(n))}catch{}}return t}async removeEntry(t){this.#e.removeItem(this.#r(t))}#r(t){return`${this.#t}${t}`}}const u=i(()=>{const e=typeof globalThis>"u"?void 0:globalThis.localStorage;if(e)try{return new g(e)}catch{}return new c},"defaultUrlStorage");export{g as LocalStorageUrlStorage,c as MemoryUrlStorage,u as defaultUrlStorage};
@@ -0,0 +1 @@
1
+ var n=Object.defineProperty;var o=(r,t)=>n(r,"name",{value:t,configurable:!0});var h=Object.defineProperty,a=o((r,t)=>h(r,"name",{value:t,configurable:!0}),"i");class e{static{o(this,"UploadControl")}static{a(this,"UploadControl")}static from(t){const i=typeof t=="string"?JSON.parse(t):t;if(i.v!==1)throw new Error(`UploadControl: unsupported snapshot version ${String(i.v)}`);const s=new e;return s.#h(i),s}#t;#i;#r;#e=0;#o;#n;#s;abort(){this.#t?.abort()}get endpoint(){return this.#i}get fingerprint(){return this.#r}get offset(){return this.#e}pause(){this.#t?.pause()}get protocol(){return this.#o}async resume(){this.#t&&await this.#t.resume()}get snapshot(){return this.#n}toJSON(){if(this.#o===void 0||this.#i===void 0||this.#r===void 0||this.#s===void 0)throw new Error("UploadControl.toJSON: control is not yet attached to an upload");return{endpoint:this.#i,fingerprint:this.#r,offset:this.#e,protocol:this.#o,uploadUrl:this.#s,v:1}}get uploadUrl(){return this.#s}_attach(t,i){this.#t=t,this.#o=i.protocol,this.#i=i.endpoint,this.#r=i.fingerprint,this.#s=i.uploadUrl}_detach(){this.#t=void 0}_updateOffset(t){this.#e=t}#h(t){this.#n=t,this.#o=t.protocol,this.#i=t.endpoint,this.#r=t.fingerprint,this.#s=t.uploadUrl,this.#e=t.offset??0}}export{e as UploadControl};
@@ -0,0 +1 @@
1
+ var W=Object.defineProperty;var P=(k,w)=>W(k,"name",{value:w,configurable:!0});import{defaultFingerprint as R}from"./defaultFingerprint-CI2Sdd2s.js";var _=Object.defineProperty,n=P((k,w)=>_(k,"name",{value:w,configurable:!0}),"a");const j=5*1024*1024,L=n(k=>{const{chunkSize:w=j,control:g,endpoint:l,fingerprint:x=R,maxRetries:$=3,metadata:U={},retry:T=!0,urlStorage:y}=k;let r={aborted:!1,paused:!1,totalSize:0,uploadedChunks:new Set};const D=n(async(t,a,e)=>{if(!y)return;const s={createdAt:Date.now(),endpoint:l,fingerprint:t,lastModified:e.lastModified,protocol:"chunked-rest",size:e.size,uploadUrl:a};try{await y.addEntry(s)}catch{}},"persistUploadEntry"),v=n(async t=>{if(!(!y||!t))try{await y.removeEntry(t)}catch{}},"removeUploadEntry");let A,z,E,C;const F=n(async(t,a)=>{if(a?.aborted)throw new Error("Aborted");const e=100,s=Date.now();for(;Date.now()-s<t;){if(a?.aborted)throw new Error("Aborted");const i=t-(Date.now()-s),c=Math.min(e,i);await new Promise(p=>{setTimeout(()=>{p()},c)})}},"abortableDelay"),b=n(async(t,a,e=$)=>{try{const s=await fetch(t,a);if(!s.ok&&e>0&&T){const i=1e3*2**($-e);return await F(i,a.signal),b(t,a,e-1)}return s}catch(s){if(a.signal?.aborted||s instanceof Error&&s.message==="Aborted")throw s;if(e>0&&T){const i=1e3*2**($-e);return await F(i,a.signal),b(t,a,e-1)}throw s}},"fetchWithRetry"),M=n(async t=>{const a={"Content-Type":t.type||"application/octet-stream","X-Chunked-Upload":"true","X-Total-Size":String(t.size)};Object.keys(U).length>0&&(a["X-File-Metadata"]=JSON.stringify(U)),t.name&&(a["Content-Disposition"]=`attachment; filename="${t.name}"`);const e=await b(l,{body:new Uint8Array(0),headers:a,method:"POST"});if(!e.ok)throw new Error(`Failed to create upload session: ${String(e.status)} ${e.statusText}`);const s=e.headers.get("X-Upload-ID")??e.headers.get("Location")?.split("/").pop();if(!s)throw new Error("Failed to get upload ID from server");return s},"createUpload"),N=n(async t=>{const a=l.endsWith("/")?`${l}${t}`:`${l}/${t}`;let e;try{e=await fetch(a,{method:"HEAD"})}catch{return}if(!(e.status===404||e.status===410||e.status===403)){if(!e.ok)throw new Error(`Failed to probe upload: ${String(e.status)} ${e.statusText}`);return Number.parseInt(e.headers.get("X-Upload-Offset")??"0",10)}},"probeExistingUpload"),O=n(async t=>{const a=l.endsWith("/")?`${l}${t}`:`${l}/${t}`,e=await b(a,{method:"HEAD"});if(!e.ok)throw new Error(`Failed to get upload status: ${String(e.status)} ${e.statusText}`);const s=Number.parseInt(e.headers.get("X-Upload-Offset")??"0",10),i=e.headers.get("X-Received-Chunks");let c=[];if(i)try{const p=JSON.parse(i);Array.isArray(p)&&(c=p)}catch{}return{chunks:c,offset:s}},"getUploadStatus"),X=n(async(t,a,e,s,i)=>{const c=t.slice(e,s),p=s-e;if(r.uploadedChunks.has(e))return;const m=l.endsWith("/")?`${l}${a}`:`${l}/${a}`,f=await b(m,{body:c,headers:{"Content-Length":String(p),"Content-Type":"application/octet-stream","X-Chunk-Offset":String(e)},method:"PATCH",signal:i});if(!f.ok)throw new Error(`Failed to upload chunk: ${String(f.status)} ${f.statusText}`);r.uploadedChunks.add(e);const o=Number.parseInt(f.headers.get("X-Upload-Offset")??String(s),10),d=Math.round(o/t.size*100);g?._updateOffset(o),z?.(d,o)},"uploadChunk"),I=n(async(t,a,e)=>{const s=Math.ceil(t.size/w),{chunks:i}=await O(a);for(const d of i)r.uploadedChunks.add(d.offset);const c=[];for(let d=0;d<s;d+=1){const u=d*w,S=Math.min(u+w,t.size);if(!r.uploadedChunks.has(u)){for(;r.paused&&!r.aborted;)await new Promise(h=>{setTimeout(()=>{h()},100)});if(r.aborted)throw new Error("Upload aborted");c.push(X(t,a,u,S,e))}}await Promise.all(c);const p=await O(a);if(p.offset<t.size)throw new Error(`Upload incomplete. Expected ${String(t.size)} bytes, got ${String(p.offset)}`);if(r.uploadedChunks.size<=0)throw new Error("No chunks were uploaded");const m=l.endsWith("/")?`${l}${a}`:`${l}/${a}`,f=await b(m,{method:"GET"});if(!f.ok)throw new Error(`Failed to get upload result: ${String(f.status)} ${f.statusText}`);const o=await f.json();return{bytesWritten:o.bytesWritten??Math.max(t.size,0),contentType:o.contentType??t.type,createdAt:o.createdAt,filename:o.originalName??t.name,id:o.id??a,metadata:o.metadata,name:o.name,originalName:o.originalName??t.name,size:o.size??t.size,status:o.status??"completed",url:o.url}},"performUpload");return{abort:n(()=>{r.aborted=!0,r.paused=!1,r.abortController?.abort()},"abort"),clear:n(()=>{r={abortController:void 0,aborted:!1,file:void 0,fileId:void 0,paused:!1,totalSize:0,uploadedChunks:new Set}},"clear"),getOffset:n(async()=>{if(!r.fileId)return 0;try{return(await O(r.fileId)).offset}catch{let t=0;for(const a of r.uploadedChunks){const e=Math.min(a+w,r.totalSize);t+=e-a}return t}},"getOffset"),isPaused:n(()=>r.paused,"isPaused"),pause:n(()=>{r.paused=!0},"pause"),resume:n(async()=>{if(!r.fileId||!r.file)throw new Error("No upload to resume");r.paused=!1;const t=new AbortController;r.abortController=t;try{const a=await I(r.file,r.fileId,t.signal);E?.(a)}catch(a){const e=a instanceof Error?a:new Error(String(a));throw C?.(e),e}},"resume"),setOnError:n(t=>{C=t},"setOnError"),setOnFinish:n(t=>{E=t},"setOnFinish"),setOnProgress:n(t=>{z=t},"setOnProgress"),setOnStart:n(t=>{A=t},"setOnStart"),upload:n(async t=>{let a=!1;const e=E,s=C;let i;const c=n(()=>{i&&(clearTimeout(i),i=void 0),E=e,C=s},"cleanupTimeout"),p=n(o=>{a||(a=!0,c(),e?.(o))},"internalFinishCallback"),m=n(o=>{a||(a=!0,c(),s?.(o))},"internalErrorCallback");E=p,C=m,r={aborted:!1,file:t,paused:!1,totalSize:t.size,uploadedChunks:new Set},A?.();const f=(async()=>{const o=new AbortController;r.abortController=o;const d=await x({endpoint:l,file:t,protocol:"chunked-rest"});r.fingerprint=d;let u;const S=g?.snapshot;if(S?.protocol==="chunked-rest"&&S.fingerprint===d&&(u=S.uploadUrl),u===void 0&&y)try{const h=await y.findEntry(d);h?.protocol==="chunked-rest"&&(u=h.uploadUrl)}catch{}if(u!==void 0){const h=await N(u);h===void 0?(await v(d),u=void 0):h>0&&(g?._updateOffset(h),z?.(Math.round(h/t.size*100),h))}return u===void 0&&(u=await M(t),await D(d,u,t)),r.fileId=u,g?._attach({abort:n(()=>{o.abort()},"abort"),pause:n(()=>{r.paused=!0},"pause"),resume:n(()=>(r.paused=!1,Promise.resolve()),"resume")},{endpoint:l,fingerprint:d,protocol:"chunked-rest",uploadUrl:u}),I(t,u,o.signal)})();i=setTimeout(()=>{a||(r.aborted=!0,c(),m(new Error("Upload timeout")))},3e5);try{const o=await f;return await v(r.fingerprint),g?._detach(),p(o),o}catch(o){const d=o instanceof Error?o:new Error(String(o));throw g?._detach(),m(d),d}},"upload")}},"createChunkedRestAdapter");export{L as createChunkedRestAdapter};
@@ -0,0 +1 @@
1
+ var j=Object.defineProperty;var v=(u,l)=>j(u,"name",{value:l,configurable:!0});import{createSignal as n,onMount as M,onCleanup as q}from"solid-js";import{createChunkedRestAdapter as B}from"./createChunkedRestAdapter-DwdZ3iXf.js";var D=Object.defineProperty,i=v((u,l)=>D(u,"name",{value:l,configurable:!0}),"n");const K=i(u=>{const{chunkSize:l,control:h,endpoint:m,fingerprint:S,maxRetries:O,metadata:y,onError:p,onPause:E,onProgress:P,onResume:w,onStart:R,onSuccess:b,retry:k,urlStorage:C}=u,[x,d]=n(0),[U,t]=n(!1),[z,a]=n(!1),[F,c]=n(void 0),[I,g]=n(void 0),[A,f]=n(0),r=B({chunkSize:l,control:h,endpoint:m,fingerprint:S,maxRetries:O,metadata:y,retry:k,urlStorage:C});return M(()=>{r.setOnStart(()=>{t(!0),a(!1),d(0),c(void 0),f(0),R?.()}),r.setOnProgress((e,o)=>{d(e),f(o),P?.(e,o)}),r.setOnFinish(e=>{d(100),g(e),t(!1),a(!1),b?.(e)}),r.setOnError(e=>{c(e),t(!1),p?.(e)});const s=setInterval(()=>{r.getOffset().then(e=>f(e)).catch(()=>{}),a(r.isPaused())},100);q(()=>{clearInterval(s),r.setOnStart(void 0),r.setOnProgress(void 0),r.setOnFinish(void 0),r.setOnError(void 0)})}),{abort:i(()=>{r.abort(),t(!1),a(!1)},"abort"),error:F,isPaused:z,isUploading:U,offset:A,pause:i(()=>{r.pause(),a(!0),E?.()},"pause"),progress:x,reset:i(()=>{r.clear(),d(0),t(!1),a(!1),c(void 0),g(void 0),f(0)},"reset"),result:I,resume:i(async()=>{a(!1),t(!0),w?.();try{await r.resume()}catch(s){const e=s instanceof Error?s:new Error(String(s));throw c(e),t(!1),p?.(e),e}},"resume"),upload:i(async s=>{try{return await r.upload(s)}catch(e){const o=e instanceof Error?e:new Error(String(e));throw c(o),p?.(o),o}},"upload")}},"createChunkedRestUpload");export{K as createChunkedRestUpload};
@@ -0,0 +1 @@
1
+ var U=Object.defineProperty;var g=(l,c)=>U(l,"name",{value:c,configurable:!0});import{onMount as x,onDestroy as z}from"svelte";import{writable as i}from"svelte/store";import{createChunkedRestAdapter as F}from"./createChunkedRestAdapter-DwdZ3iXf.js";var I=Object.defineProperty,u=g((l,c)=>I(l,"name",{value:c,configurable:!0}),"n");const q=u(l=>{const{chunkSize:c,control:h,endpoint:v,fingerprint:O,maxRetries:S,metadata:y,onError:p,onPause:E,onProgress:P,onResume:b,onStart:w,onSuccess:R,retry:k,urlStorage:C}=l,f=i(0),r=i(!1),s=i(!1),o=i(),m=i(),d=i(0),t=F({chunkSize:c,control:h,endpoint:v,fingerprint:O,maxRetries:S,metadata:y,retry:k,urlStorage:C});return x(()=>{t.setOnStart(()=>{r.set(!0),s.set(!1),f.set(0),o.set(void 0),d.set(0),w?.()}),t.setOnProgress((e,n)=>{f.set(e),d.set(n),P?.(e,n)}),t.setOnFinish(e=>{f.set(100),m.set(e),r.set(!1),s.set(!1),R?.(e)}),t.setOnError(e=>{o.set(e),r.set(!1),p?.(e)});const a=setInterval(()=>{t.getOffset().then(e=>(d.set(e),e)).catch(()=>{}),s.set(t.isPaused())},100);z(()=>{clearInterval(a),t.setOnStart(void 0),t.setOnProgress(void 0),t.setOnFinish(void 0),t.setOnError(void 0)})}),{abort:u(()=>{t.abort(),r.set(!1),s.set(!1)},"abort"),error:o,isPaused:s,isUploading:r,offset:d,pause:u(()=>{t.pause(),s.set(!0),E?.()},"pause"),progress:f,reset:u(()=>{t.clear(),f.set(0),r.set(!1),s.set(!1),o.set(void 0),m.set(void 0),d.set(0)},"reset"),result:m,resume:u(async()=>{s.set(!1),r.set(!0),b?.();try{await t.resume()}catch(a){const e=a instanceof Error?a:new Error(String(a));throw o.set(e),r.set(!1),p?.(e),e}},"resume"),upload:u(async a=>{try{return await t.upload(a)}catch(e){const n=e instanceof Error?e:new Error(String(e));throw o.set(n),p?.(n),n}},"upload")}},"createChunkedRestUpload");export{q as createChunkedRestUpload};
@@ -0,0 +1 @@
1
+ var I=Object.defineProperty;var $=(h,f)=>I(h,"name",{value:f,configurable:!0});import{defaultFingerprint as j}from"./defaultFingerprint-CI2Sdd2s.js";var B=Object.defineProperty,a=$((h,f)=>B(h,"name",{value:f,configurable:!0}),"o");const T="1.0.0",W=1024*1024,J=a(h=>{const f=new TextEncoder().encode(h);let p="";for(const d of f)p+=String.fromCodePoint(d);return btoa(p)},"encodeBase64Utf8"),K=a(h=>{const f=atob(h),p=new Uint8Array(f.length);for(let d=0;d<f.length;d+=1)p[d]=f.codePointAt(d)??0;return new TextDecoder().decode(p)},"decodeBase64Utf8"),V=a(h=>Object.entries(h).map(([f,p])=>{const d=J(p);return`${f} ${d}`}).join(","),"encodeMetadata"),q=a(h=>{if(!h)return{};const f={};return h.split(",").forEach(p=>{const[d,...S]=p.trim().split(" "),C=S.join(" ");if(d&&C)try{f[d]=K(C)}catch{}}),f},"decodeMetadata"),X=a(h=>{const{chunkSize:f=W,control:p,endpoint:d,fingerprint:S=j,maxRetries:C=3,metadata:F={},retry:R=!0,urlStorage:y}=h;let n,O,A,P,v;const k=a(async(t,s)=>{let e;try{e=await fetch(t,{headers:{"Tus-Resumable":T},method:"HEAD",signal:s})}catch{return}if(e.status===404||e.status===410||e.status===403)return;if(!e.ok)throw new Error(`Failed to probe upload: ${String(e.status)} ${e.statusText}`);const o=e.headers.get("Upload-Offset");return o?Number.parseInt(o,10):0},"probeExistingUpload"),L=a(async(t,s,e)=>{if(!y)return;const o={createdAt:Date.now(),endpoint:d,fingerprint:t,lastModified:e.lastModified,protocol:"tus",size:e.size,uploadUrl:s};try{await y.addEntry(o)}catch{}},"persistUploadEntry"),M=a(async t=>{if(!(!y||!t))try{await y.removeEntry(t)}catch{}},"removeUploadEntry"),D=a(async t=>{const s={filename:t.name,filetype:t.type,...F},e=await fetch(d,{headers:{"Tus-Resumable":T,"Upload-Length":t.size.toString(),"Upload-Metadata":V(s)},method:"POST"});if(e.status!==201&&e.status!==200)throw new Error(`Failed to create upload: ${String(e.status)} ${e.statusText}`);const o=e.headers.get("Location");if(!o)throw new Error("No Location header in response");let i;if(o.startsWith("http"))i=o;else try{i=new URL(o,d).href}catch{const u="window"in globalThis?globalThis.location.origin:"http://localhost";i=new URL(o,u+d).href}const l=e.headers.get("Upload-Offset");return{initialOffset:l?Number.parseInt(l,10):0,uploadUrl:i}},"createUpload"),x=a(async(t,s)=>{const e=await fetch(t,{headers:{"Tus-Resumable":T},method:"HEAD",signal:s});if(!e.ok){if(e.status===404||e.status===410||e.status===403)return 0;throw new Error(`Failed to get upload offset: ${String(e.status)} ${e.statusText}`)}const o=e.headers.get("Upload-Offset");return o?Number.parseInt(o,10):0},"getUploadOffset"),H=a(async(t,s,e,o)=>{const i=Math.min(e+f,t.size),l=t.slice(e,i),u=await fetch(s,{body:l,headers:{"Content-Length":l.size.toString(),"Content-Type":"application/offset+octet-stream","Tus-Resumable":T,"Upload-Offset":e.toString()},method:"PATCH",signal:o});if(u.status!==204){if(u.status===409)return await x(s);throw u.status===404||u.status===410?new Error("Upload expired or not found"):u.status===415?new Error("Content-Type must be application/offset+octet-stream"):new Error(`Failed to upload chunk: ${String(u.status)} ${u.statusText}`)}const b=u.headers.get("Upload-Offset");if(!b)throw new Error("Missing Upload-Offset header in PATCH response");return Number.parseInt(b,10)},"uploadChunk"),_=a(async(t,s,e=0)=>{const o=n;if(!o)throw new Error("Upload state not initialized");const{abortController:i}=o;let l=e;try{for(;l<t.size;){if(i.signal.aborted)throw new Error("Upload aborted");if(o.isPaused&&await new Promise(c=>{const m=a(()=>{i.signal.aborted?c():o.isPaused?setTimeout(m,100):c()},"checkPause");m()}),i.signal.aborted)throw new Error("Upload aborted");try{l=await H(t,s,l,i.signal),o.offset=l,p?._updateOffset(l);const c=Math.round(l/t.size*100);O?.(c,l)}catch(c){if(i.signal.aborted)throw new Error("Upload aborted");if(R&&o.retryCount<C){if(o.retryCount+=1,await new Promise(m=>setTimeout(m,1e3*o.retryCount)),i.signal.aborted)throw new Error("Upload aborted");l=await x(s,i.signal);continue}throw c}o.retryCount=0}if(i.signal.aborted)throw new Error("Upload aborted");const u=await fetch(s,{headers:{"Tus-Resumable":T},method:"HEAD",signal:i.signal}),b=u.headers.get("Location")??s,z=u.headers.get("Upload-Metadata"),U=q(z??void 0);let r={};try{r={contentType:u.headers.get("Content-Type")??U.filetype??t.type,id:s.split("/").pop()??"",metadata:U,originalName:U.filename??t.name,size:t.size,status:"completed"}}catch{}return{bytesWritten:l,contentType:r.contentType??t.type,createdAt:r.createdAt,filename:r.originalName??t.name,id:r.id??s.split("/").pop()??"",metadata:r.metadata??U,name:r.name,offset:l,originalName:r.originalName??t.name,size:r.size??t.size,status:r.status??"completed",url:b}}finally{n===o&&(n=void 0)}},"performUpload");return{abort:a(()=>{n&&n.abortController.abort()},"abort"),clear:a(()=>{n&&n.abortController.abort()},"clear"),getOffset:a(()=>n?.offset??0,"getOffset"),isPaused:a(()=>n?.isPaused??!1,"isPaused"),pause:a(()=>{n&&(n.isPaused=!0)},"pause"),resume:a(async()=>{if(!n?.uploadUrl)throw new Error("No upload to resume");n.isPaused=!1},"resume"),setOnError:a(t=>{v=t},"setOnError"),setOnFinish:a(t=>{P=t},"setOnFinish"),setOnProgress:a(t=>{O=t},"setOnProgress"),setOnStart:a(t=>{A=t},"setOnStart"),upload:a(async t=>{let s=!1;const e=P,o=v;let i;const l=a(()=>{i&&(clearTimeout(i),i=void 0),P=e,v=o},"cleanupTimeout"),u=a(r=>{s||(s=!0,l(),e?.(r))},"internalFinishCallback"),b=a(r=>{s||(s=!0,l(),o?.(r),n?.uploadUrl||(n=void 0))},"internalErrorCallback");P=u,v=b,n={abortController:new AbortController,file:t,fingerprint:void 0,isPaused:!1,offset:0,retryCount:0,uploadUrl:void 0};let z;const U=(async()=>{A?.();const r=n,c=await S({endpoint:d,file:t,protocol:"tus"});z=c,r.fingerprint=c;let m=await a(async()=>{const w=p?.snapshot;let g=w?.protocol==="tus"&&w.fingerprint===c?w.uploadUrl:void 0;if(g===void 0&&y)try{const N=await y.findEntry(c);N?.protocol==="tus"&&(g=N.uploadUrl)}catch{}if(g===void 0)return;const E=await k(g,r.abortController.signal);if(E===void 0){await M(c);return}return r.uploadUrl=g,r.offset=E,E>0&&O?.(Math.round(E/t.size*100),E),g},"resolveResumeUrl")();if(m===void 0){const{initialOffset:w,uploadUrl:g}=await D(t);m=g,r.uploadUrl=m,r.offset=w,await L(c,m,t),w>0&&O?.(Math.round(w/t.size*100),w)}return p?._attach({abort:a(()=>{r.abortController.abort()},"abort"),pause:a(()=>{r.isPaused=!0},"pause"),resume:a(()=>(r.isPaused=!1,Promise.resolve()),"resume")},{endpoint:d,fingerprint:c,protocol:"tus",uploadUrl:m}),p?._updateOffset(r.offset),_(t,m,r.offset)})();i=setTimeout(()=>{s||(s=!0,l(),n&&n.abortController.abort(),n&&!n.uploadUrl&&(n=void 0))},3e5);try{const r=await U;return await M(z),p?._detach(),u(r),r}catch(r){const c=r instanceof Error?r:new Error(String(r));throw p?._detach(),b(c),c}},"upload")}},"createTusAdapter");export{X as createTusAdapter};
@@ -0,0 +1 @@
1
+ var C=Object.defineProperty;var v=(i,u)=>C(i,"name",{value:u,configurable:!0});import{createSignal as o,onMount as j,onCleanup as M}from"solid-js";import{createTusAdapter as q}from"./createTusAdapter-DMWzJjQ2.js";var B=Object.defineProperty,n=v((i,u)=>B(i,"name",{value:u,configurable:!0}),"n");const J=n(i=>{const{chunkSize:u,control:m,endpoint:S,fingerprint:O,maxRetries:h,metadata:y,onError:p,onPause:E,onProgress:P,onResume:w,onStart:b,onSuccess:x,retry:R,urlStorage:T}=i,[U,f]=o(0),[k,t]=o(!1),[F,s]=o(!1),[I,l]=o(void 0),[z,g]=o(void 0),[A,d]=o(0),r=q({chunkSize:u,control:m,endpoint:S,fingerprint:O,maxRetries:h,metadata:y,retry:R,urlStorage:T});return j(()=>{r.setOnStart(()=>{t(!0),s(!1),f(0),l(void 0),d(0),b?.()}),r.setOnProgress((e,c)=>{f(e),d(c),P?.(e)}),r.setOnFinish(e=>{f(100),g(e),t(!1),s(!1),x?.(e)}),r.setOnError(e=>{l(e),t(!1),p?.(e)});const a=setInterval(()=>{d(r.getOffset()),s(r.isPaused())},100);M(()=>{clearInterval(a),r.setOnStart(void 0),r.setOnProgress(void 0),r.setOnFinish(void 0),r.setOnError(void 0)})}),{abort:n(()=>{r.abort(),t(!1),s(!1)},"abort"),error:I,isPaused:F,isUploading:k,offset:A,pause:n(()=>{r.pause(),s(!0),E?.()},"pause"),progress:U,reset:n(()=>{r.clear(),f(0),t(!1),s(!1),l(void 0),g(void 0),d(0)},"reset"),result:z,resume:n(async()=>{s(!1),t(!0),w?.();try{await r.resume()}catch(a){const e=a instanceof Error?a:new Error(String(a));throw l(e),t(!1),p?.(e),e}},"resume"),upload:n(async a=>{try{return await r.upload(a)}catch(e){const c=e instanceof Error?e:new Error(String(e));throw l(c),p?.(c),c}},"upload")}},"createTusUpload");export{J as createTusUpload};
@@ -0,0 +1 @@
1
+ var F=Object.defineProperty;var g=(u,l)=>F(u,"name",{value:l,configurable:!0});import{onMount as T,onDestroy as k}from"svelte";import{writable as n}from"svelte/store";import{createTusAdapter as z}from"./createTusAdapter-DMWzJjQ2.js";var I=Object.defineProperty,i=g((u,l)=>I(u,"name",{value:l,configurable:!0}),"n");const q=i(u=>{const{chunkSize:l,control:v,endpoint:O,fingerprint:S,maxRetries:h,metadata:y,onError:p,onPause:w,onProgress:E,onResume:P,onStart:b,onSuccess:R,retry:U,urlStorage:x}=u,c=n(0),r=n(!1),s=n(!1),a=n(),m=n(),f=n(0),t=z({chunkSize:l,control:v,endpoint:O,fingerprint:S,maxRetries:h,metadata:y,retry:U,urlStorage:x});return T(()=>{t.setOnStart(()=>{r.set(!0),s.set(!1),c.set(0),a.set(void 0),f.set(0),b?.()}),t.setOnProgress((e,d)=>{c.set(e),f.set(d),E?.(e)}),t.setOnFinish(e=>{c.set(100),m.set(e),r.set(!1),s.set(!1),R?.(e)}),t.setOnError(e=>{a.set(e),r.set(!1),p?.(e)});const o=setInterval(()=>{f.set(t.getOffset()),s.set(t.isPaused())},100);k(()=>{clearInterval(o),t.setOnStart(void 0),t.setOnProgress(void 0),t.setOnFinish(void 0),t.setOnError(void 0)})}),{abort:i(()=>{t.abort(),r.set(!1),s.set(!1)},"abort"),error:a,isPaused:s,isUploading:r,offset:f,pause:i(()=>{t.pause(),s.set(!0),w?.()},"pause"),progress:c,reset:i(()=>{t.clear(),c.set(0),r.set(!1),s.set(!1),a.set(void 0),m.set(void 0),f.set(0)},"reset"),result:m,resume:i(async()=>{s.set(!1),r.set(!0),P?.();try{await t.resume()}catch(o){const e=o instanceof Error?o:new Error(String(o));throw a.set(e),r.set(!1),p?.(e),e}},"resume"),upload:i(async o=>{try{return await t.upload(o)}catch(e){const d=e instanceof Error?e:new Error(String(e));throw a.set(d),p?.(d),d}},"upload")}},"createTusUpload");export{q as createTusUpload};
@@ -1 +1 @@
1
- var $=Object.defineProperty;var x=(f,p)=>$(f,"name",{value:p,configurable:!0});import{derived as a}from"svelte/store";import{createChunkedRestUpload as ee}from"./createChunkedRestUpload-BH_5ZAr2.js";import{createMultipartUpload as re}from"./createMultipartUpload-CFsUjhvG.js";import{createTusUpload as se}from"./createTusUpload-rZKMrL5n.js";var te=Object.defineProperty,r=x((f,p)=>te(f,"name",{value:p,configurable:!0}),"r");const ue=10*1024*1024,ae=r(f=>{const{chunkSize:p,endpointChunkedRest:d,endpointMultipart:h,endpointTus:l,maxRetries:v,metadata:k,method:w,onError:m,onPause:M,onProgress:g,onResume:T,onStart:P,onSuccess:S,retry:y,tusThreshold:z=ue}=f;let b;if(w===void 0){const e=[d,h,l].filter(Boolean);if(e.length===1)d?b="chunked-rest":l?b="tus":b="multipart";else if(e.length>1)b="auto";else throw new Error("At least one endpoint must be provided: endpointChunkedRest, endpointMultipart, or endpointTus")}else b=w;let U;d&&(U={chunkSize:p,endpoint:d,maxRetries:v,metadata:k,onError:m,onPause:M,onProgress:g,onResume:T,onStart:P,onSuccess:S,retry:y});let R;h&&(R={endpoint:h,metadata:k,onError:m,onProgress:g,onStart:P,onSuccess:S});let E;l&&(E={chunkSize:p,endpoint:l,maxRetries:v,metadata:k,onError:m,onPause:M,onProgress:g,onResume:T,onStart:P,onSuccess:S,retry:y});const i=U?ee(U):void 0,n=R?re(R):void 0,o=E?se(E):void 0,C=r(e=>{if(b!=="auto")return b;if(e.size>z){if(l)return"tus";if(d)return"chunked-rest"}if(d)return"chunked-rest";if(h)return"multipart";throw new Error("No available endpoint for upload")},"determineMethod"),B=r(async e=>{const s=C(e);if(s==="tus"){if(!o)throw new Error("TUS endpoint not configured");return o.upload(e)}if(s==="chunked-rest"){if(!i)throw new Error("Chunked REST endpoint not configured");return i.upload(e)}if(!n)throw new Error("Multipart endpoint not configured");return n.upload(e)},"upload"),O=r(()=>{o?.abort(),i?.abort(),n?.reset()},"abort"),j=r(()=>{o?.reset(),i?.reset(),n?.reset()},"reset"),c=a([o?.isUploading??{subscribe:r(()=>()=>{},"subscribe")},o?.result??{subscribe:r(()=>()=>{},"subscribe")},i?.isUploading??{subscribe:r(()=>()=>{},"subscribe")},i?.result??{subscribe:r(()=>()=>{},"subscribe")},n?.isUploading??{subscribe:r(()=>()=>{},"subscribe")},n?.result??{subscribe:r(()=>()=>{},"subscribe")}],([e,s,t,u,X,Y])=>b!=="auto"?b:o&&(e||s)?"tus":i&&(t||u)?"chunked-rest":n&&(X||Y)?"multipart":d?"chunked-rest":l?"tus":"multipart"),A=r((e,s,t,u)=>e==="tus"?s:e==="chunked-rest"?t:u,"pickError"),I=a([c,o?.error??{subscribe:r(()=>()=>{},"subscribe")},i?.error??{subscribe:r(()=>()=>{},"subscribe")},n?.error??{subscribe:r(()=>()=>{},"subscribe")}],([e,s,t,u])=>A(e,s,t,u)),N=r((e,s,t)=>{if(e==="tus")return s;if(e==="chunked-rest")return t},"pickIsPaused"),q=a([c,o?.isPaused??{subscribe:r(()=>()=>{},"subscribe")},i?.isPaused??{subscribe:r(()=>()=>{},"subscribe")}],([e,s,t])=>N(e,s,t)),D=r((e,s,t,u)=>e==="tus"?s:e==="chunked-rest"?t:u,"pickBoolean"),F=a([c,o?.isUploading??{subscribe:r(()=>()=>{},"subscribe")},i?.isUploading??{subscribe:r(()=>()=>{},"subscribe")},n?.isUploading??{subscribe:r(()=>()=>{},"subscribe")}],([e,s,t,u])=>D(e,s,t,u)),G=r((e,s,t)=>{if(e==="tus")return s;if(e==="chunked-rest")return t},"pickOffset"),H=a([c,o?.offset??{subscribe:r(()=>()=>{},"subscribe")},i?.offset??{subscribe:r(()=>()=>{},"subscribe")}],([e,s,t])=>G(e,s,t)),J=r((e,s,t,u)=>e==="tus"?s:e==="chunked-rest"?t:u,"pickProgress"),K=a([c,o?.progress??{subscribe:r(()=>()=>{},"subscribe")},i?.progress??{subscribe:r(()=>()=>{},"subscribe")},n?.progress??{subscribe:r(()=>()=>{},"subscribe")}],([e,s,t,u])=>J(e,s,t,u)),L=r((e,s,t,u)=>e==="tus"?s:e==="chunked-rest"?t:u,"pickResult"),Q=a([c,o?.result??{subscribe:r(()=>()=>{},"subscribe")},i?.result??{subscribe:r(()=>()=>{},"subscribe")},n?.result??{subscribe:r(()=>()=>{},"subscribe")}],([e,s,t,u])=>L(e,s,t,u)),V=r(e=>{if(e==="tus")return o?.pause;if(e==="chunked-rest")return i?.pause},"pickPause"),W=a([c],([e])=>V(e)),Z=r(e=>{if(e==="tus")return o?.resume;if(e==="chunked-rest")return i?.resume},"pickResume"),_=a([c],([e])=>Z(e));return{abort:O,currentMethod:c,error:I,isPaused:q,isUploading:F,offset:H,pause:W,progress:K,reset:j,result:Q,resume:_,upload:B}},"createUpload");export{ae as createUpload};
1
+ var $=Object.defineProperty;var x=(f,p)=>$(f,"name",{value:p,configurable:!0});import{derived as a}from"svelte/store";import{createChunkedRestUpload as ee}from"./createChunkedRestUpload-WgfiLIto.js";import{createMultipartUpload as re}from"./createMultipartUpload-CFsUjhvG.js";import{createTusUpload as se}from"./createTusUpload-l00I3jXp.js";var te=Object.defineProperty,r=x((f,p)=>te(f,"name",{value:p,configurable:!0}),"r");const ue=10*1024*1024,ae=r(f=>{const{chunkSize:p,endpointChunkedRest:d,endpointMultipart:h,endpointTus:l,maxRetries:v,metadata:k,method:w,onError:m,onPause:M,onProgress:g,onResume:T,onStart:P,onSuccess:S,retry:y,tusThreshold:z=ue}=f;let b;if(w===void 0){const e=[d,h,l].filter(Boolean);if(e.length===1)d?b="chunked-rest":l?b="tus":b="multipart";else if(e.length>1)b="auto";else throw new Error("At least one endpoint must be provided: endpointChunkedRest, endpointMultipart, or endpointTus")}else b=w;let U;d&&(U={chunkSize:p,endpoint:d,maxRetries:v,metadata:k,onError:m,onPause:M,onProgress:g,onResume:T,onStart:P,onSuccess:S,retry:y});let R;h&&(R={endpoint:h,metadata:k,onError:m,onProgress:g,onStart:P,onSuccess:S});let E;l&&(E={chunkSize:p,endpoint:l,maxRetries:v,metadata:k,onError:m,onPause:M,onProgress:g,onResume:T,onStart:P,onSuccess:S,retry:y});const i=U?ee(U):void 0,n=R?re(R):void 0,o=E?se(E):void 0,C=r(e=>{if(b!=="auto")return b;if(e.size>z){if(l)return"tus";if(d)return"chunked-rest"}if(d)return"chunked-rest";if(h)return"multipart";throw new Error("No available endpoint for upload")},"determineMethod"),B=r(async e=>{const s=C(e);if(s==="tus"){if(!o)throw new Error("TUS endpoint not configured");return o.upload(e)}if(s==="chunked-rest"){if(!i)throw new Error("Chunked REST endpoint not configured");return i.upload(e)}if(!n)throw new Error("Multipart endpoint not configured");return n.upload(e)},"upload"),O=r(()=>{o?.abort(),i?.abort(),n?.reset()},"abort"),j=r(()=>{o?.reset(),i?.reset(),n?.reset()},"reset"),c=a([o?.isUploading??{subscribe:r(()=>()=>{},"subscribe")},o?.result??{subscribe:r(()=>()=>{},"subscribe")},i?.isUploading??{subscribe:r(()=>()=>{},"subscribe")},i?.result??{subscribe:r(()=>()=>{},"subscribe")},n?.isUploading??{subscribe:r(()=>()=>{},"subscribe")},n?.result??{subscribe:r(()=>()=>{},"subscribe")}],([e,s,t,u,X,Y])=>b!=="auto"?b:o&&(e||s)?"tus":i&&(t||u)?"chunked-rest":n&&(X||Y)?"multipart":d?"chunked-rest":l?"tus":"multipart"),A=r((e,s,t,u)=>e==="tus"?s:e==="chunked-rest"?t:u,"pickError"),I=a([c,o?.error??{subscribe:r(()=>()=>{},"subscribe")},i?.error??{subscribe:r(()=>()=>{},"subscribe")},n?.error??{subscribe:r(()=>()=>{},"subscribe")}],([e,s,t,u])=>A(e,s,t,u)),N=r((e,s,t)=>{if(e==="tus")return s;if(e==="chunked-rest")return t},"pickIsPaused"),q=a([c,o?.isPaused??{subscribe:r(()=>()=>{},"subscribe")},i?.isPaused??{subscribe:r(()=>()=>{},"subscribe")}],([e,s,t])=>N(e,s,t)),D=r((e,s,t,u)=>e==="tus"?s:e==="chunked-rest"?t:u,"pickBoolean"),F=a([c,o?.isUploading??{subscribe:r(()=>()=>{},"subscribe")},i?.isUploading??{subscribe:r(()=>()=>{},"subscribe")},n?.isUploading??{subscribe:r(()=>()=>{},"subscribe")}],([e,s,t,u])=>D(e,s,t,u)),G=r((e,s,t)=>{if(e==="tus")return s;if(e==="chunked-rest")return t},"pickOffset"),H=a([c,o?.offset??{subscribe:r(()=>()=>{},"subscribe")},i?.offset??{subscribe:r(()=>()=>{},"subscribe")}],([e,s,t])=>G(e,s,t)),J=r((e,s,t,u)=>e==="tus"?s:e==="chunked-rest"?t:u,"pickProgress"),K=a([c,o?.progress??{subscribe:r(()=>()=>{},"subscribe")},i?.progress??{subscribe:r(()=>()=>{},"subscribe")},n?.progress??{subscribe:r(()=>()=>{},"subscribe")}],([e,s,t,u])=>J(e,s,t,u)),L=r((e,s,t,u)=>e==="tus"?s:e==="chunked-rest"?t:u,"pickResult"),Q=a([c,o?.result??{subscribe:r(()=>()=>{},"subscribe")},i?.result??{subscribe:r(()=>()=>{},"subscribe")},n?.result??{subscribe:r(()=>()=>{},"subscribe")}],([e,s,t,u])=>L(e,s,t,u)),V=r(e=>{if(e==="tus")return o?.pause;if(e==="chunked-rest")return i?.pause},"pickPause"),W=a([c],([e])=>V(e)),Z=r(e=>{if(e==="tus")return o?.resume;if(e==="chunked-rest")return i?.resume},"pickResume"),_=a([c],([e])=>Z(e));return{abort:O,currentMethod:c,error:I,isPaused:q,isUploading:F,offset:H,pause:W,progress:K,reset:j,result:Q,resume:_,upload:B}},"createUpload");export{ae as createUpload};
@@ -1 +1 @@
1
- var J=Object.defineProperty;var T=(p,a)=>J(p,"name",{value:a,configurable:!0});import{createMemo as s}from"solid-js";import{createChunkedRestUpload as L}from"./createChunkedRestUpload-DAoXFznW.js";import{createMultipartUpload as N}from"./createMultipartUpload-BPcFYSwI.js";import{createTusUpload as _}from"./createTusUpload-DKIIHh2X.js";var q=Object.defineProperty,o=T((p,a)=>q(p,"name",{value:a,configurable:!0}),"n");const K=10*1024*1024,Z=o(p=>{const{chunkSize:a,endpointChunkedRest:i,endpointMultipart:c,endpointTus:d,maxRetries:v,metadata:f,method:P,onError:h,onPause:U,onProgress:g,onResume:S,onStart:m,onSuccess:k,retry:R,tusThreshold:y=K}=p,l=s(()=>{if(P!==void 0)return P;const e=[i,c,d].filter(Boolean);if(e.length===1)return i?"chunked-rest":d?"tus":"multipart";if(e.length>1)return"auto";throw new Error("At least one endpoint must be provided: endpointChunkedRest, endpointMultipart, or endpointTus")}),E=i?{chunkSize:a,endpoint:i,maxRetries:v,metadata:f,onError:h,onPause:U,onProgress:g,onResume:S,onStart:m,onSuccess:k,retry:R}:void 0,w=c?{endpoint:c,metadata:f,onError:h,onProgress:g,onStart:m,onSuccess:k}:void 0,b=d?{chunkSize:a,endpoint:d,maxRetries:v,metadata:f,onError:h,onPause:U,onProgress:g,onResume:S,onStart:m,onSuccess:k,retry:R}:void 0,r=E?L(E):void 0,n=w?N(w):void 0,t=b?_(b):void 0,x=o(e=>{if(l()!=="auto")return l();if(e.size>y){if(d)return"tus";if(i)return"chunked-rest"}if(i)return"chunked-rest";if(c)return"multipart";throw new Error("No available endpoint for upload")},"determineMethod"),z=o(async e=>{const M=x(e);if(M==="tus"){if(!t)throw new Error("TUS endpoint not configured");return t.upload(e)}if(M==="chunked-rest"){if(!r)throw new Error("Chunked REST endpoint not configured");return r.upload(e)}if(!n)throw new Error("Multipart endpoint not configured");return n.upload(e)},"upload"),C=o(()=>{t?.abort(),r?.abort(),n?.reset()},"abort"),I=o(()=>{t?.reset(),r?.reset(),n?.reset()},"reset"),u=s(()=>l()!=="auto"?l():t&&(t.isUploading()||t.result())?"tus":r&&(r.isUploading()||r.result())?"chunked-rest":n&&(n.isUploading()||n.result())?"multipart":i?"chunked-rest":d?"tus":"multipart"),O=o(()=>{const e=u();return e==="tus"?t?.error()??void 0:e==="chunked-rest"?r?.error()??void 0:n?.error()??void 0},"getError"),j=o(()=>{const e=u();if(e==="tus")return t?.isPaused();if(e==="chunked-rest")return r?.isPaused()},"getIsPaused"),A=o(()=>{const e=u();return e==="tus"?t?.isUploading()??!1:e==="chunked-rest"?r?.isUploading()??!1:n?.isUploading()??!1},"getIsUploading"),B=o(()=>{const e=u();if(e==="tus")return t?.offset();if(e==="chunked-rest")return r?.offset()},"getOffset"),D=o(()=>{const e=u();if(e==="tus")return t?.pause;if(e==="chunked-rest")return r?.pause},"getPause"),F=o(()=>{const e=u();return e==="tus"?t?.progress()??0:e==="chunked-rest"?r?.progress()??0:n?.progress()??0},"getProgress"),G=o(()=>{const e=u();return e==="tus"?t?.result()??void 0:e==="chunked-rest"?r?.result()??void 0:n?.result()??void 0},"getResult"),H=o(()=>{const e=u();if(e==="tus")return t?.resume;if(e==="chunked-rest")return r?.resume},"getResume");return{abort:C,currentMethod:u,error:s(O),isPaused:s(j),isUploading:s(A),offset:s(B),pause:s(D),progress:s(F),reset:I,result:s(G),resume:s(H),upload:z}},"createUpload");export{Z as createUpload};
1
+ var J=Object.defineProperty;var T=(p,a)=>J(p,"name",{value:a,configurable:!0});import{createMemo as s}from"solid-js";import{createChunkedRestUpload as L}from"./createChunkedRestUpload-DZbjiORY.js";import{createMultipartUpload as N}from"./createMultipartUpload-BPcFYSwI.js";import{createTusUpload as _}from"./createTusUpload-Con3Nqu0.js";var q=Object.defineProperty,o=T((p,a)=>q(p,"name",{value:a,configurable:!0}),"n");const K=10*1024*1024,Z=o(p=>{const{chunkSize:a,endpointChunkedRest:i,endpointMultipart:c,endpointTus:d,maxRetries:v,metadata:f,method:P,onError:h,onPause:U,onProgress:g,onResume:S,onStart:m,onSuccess:k,retry:R,tusThreshold:y=K}=p,l=s(()=>{if(P!==void 0)return P;const e=[i,c,d].filter(Boolean);if(e.length===1)return i?"chunked-rest":d?"tus":"multipart";if(e.length>1)return"auto";throw new Error("At least one endpoint must be provided: endpointChunkedRest, endpointMultipart, or endpointTus")}),E=i?{chunkSize:a,endpoint:i,maxRetries:v,metadata:f,onError:h,onPause:U,onProgress:g,onResume:S,onStart:m,onSuccess:k,retry:R}:void 0,w=c?{endpoint:c,metadata:f,onError:h,onProgress:g,onStart:m,onSuccess:k}:void 0,b=d?{chunkSize:a,endpoint:d,maxRetries:v,metadata:f,onError:h,onPause:U,onProgress:g,onResume:S,onStart:m,onSuccess:k,retry:R}:void 0,r=E?L(E):void 0,n=w?N(w):void 0,t=b?_(b):void 0,x=o(e=>{if(l()!=="auto")return l();if(e.size>y){if(d)return"tus";if(i)return"chunked-rest"}if(i)return"chunked-rest";if(c)return"multipart";throw new Error("No available endpoint for upload")},"determineMethod"),z=o(async e=>{const M=x(e);if(M==="tus"){if(!t)throw new Error("TUS endpoint not configured");return t.upload(e)}if(M==="chunked-rest"){if(!r)throw new Error("Chunked REST endpoint not configured");return r.upload(e)}if(!n)throw new Error("Multipart endpoint not configured");return n.upload(e)},"upload"),C=o(()=>{t?.abort(),r?.abort(),n?.reset()},"abort"),I=o(()=>{t?.reset(),r?.reset(),n?.reset()},"reset"),u=s(()=>l()!=="auto"?l():t&&(t.isUploading()||t.result())?"tus":r&&(r.isUploading()||r.result())?"chunked-rest":n&&(n.isUploading()||n.result())?"multipart":i?"chunked-rest":d?"tus":"multipart"),O=o(()=>{const e=u();return e==="tus"?t?.error()??void 0:e==="chunked-rest"?r?.error()??void 0:n?.error()??void 0},"getError"),j=o(()=>{const e=u();if(e==="tus")return t?.isPaused();if(e==="chunked-rest")return r?.isPaused()},"getIsPaused"),A=o(()=>{const e=u();return e==="tus"?t?.isUploading()??!1:e==="chunked-rest"?r?.isUploading()??!1:n?.isUploading()??!1},"getIsUploading"),B=o(()=>{const e=u();if(e==="tus")return t?.offset();if(e==="chunked-rest")return r?.offset()},"getOffset"),D=o(()=>{const e=u();if(e==="tus")return t?.pause;if(e==="chunked-rest")return r?.pause},"getPause"),F=o(()=>{const e=u();return e==="tus"?t?.progress()??0:e==="chunked-rest"?r?.progress()??0:n?.progress()??0},"getProgress"),G=o(()=>{const e=u();return e==="tus"?t?.result()??void 0:e==="chunked-rest"?r?.result()??void 0:n?.result()??void 0},"getResult"),H=o(()=>{const e=u();if(e==="tus")return t?.resume;if(e==="chunked-rest")return r?.resume},"getResume");return{abort:C,currentMethod:u,error:s(O),isPaused:s(j),isUploading:s(A),offset:s(B),pause:s(D),progress:s(F),reset:I,result:s(G),resume:s(H),upload:z}},"createUpload");export{Z as createUpload};
@@ -0,0 +1 @@
1
+ var r=Object.defineProperty;var o=(n,e)=>r(n,"name",{value:e,configurable:!0});var i=Object.defineProperty,p=o((n,e)=>i(n,"name",{value:e,configurable:!0}),"e");const d=p(({endpoint:n,file:e,protocol:t})=>`${t}::${encodeURIComponent(n)}::${encodeURIComponent(e.name)}::${String(e.size)}::${encodeURIComponent(e.type)}::${String(e.lastModified)}`,"defaultFingerprint");export{d as defaultFingerprint};