UNPKG

pushduck

Version:

The fastest way to add file uploads to any web application. Enterprise security, edge-ready. Works with 16+ frameworks and 5+ storage providers. No heavy AWS SDK required.

78 lines (76 loc) 3.08 kB
import { S as S3Router, a as S3RouteUploadConfig, c as TypedRouteHook, i as S3FileMetadata, l as TypedUploadedFile, n as InferClientRouter, o as S3RouteUploadResult, r as RouterRouteNames, s as S3UploadedFile, t as ClientConfig } from "./index-DwDwUJqB.mjs"; import { n as formatUploadSpeed, r as useUploadRoute, t as formatETA } from "./index-ClM60F8p.mjs"; //#region src/client/upload-client.d.ts /** * Create a type-safe upload client with property-based access, per-route configuration, * and client-side metadata support. * * Following tRPC pattern, each route returns a hook factory function that accepts optional configuration. * This ensures React's rules of hooks are followed while maintaining type safety and flexibility. * * @template TRouter - The S3Router type from your server configuration * @param config - Client configuration with endpoint and optional defaults * @returns Type-safe client with property-based route access * * @example Basic usage * ```typescript * const upload = createUploadClient<AppRouter>({ endpoint: "/api/upload" }); * * // Simple usage * const { uploadFiles, files } = upload.imageUpload(); * await uploadFiles(selectedFiles); * ``` * * @example With per-route callbacks * ```typescript * const { uploadFiles, files } = upload.imageUpload({ * onSuccess: (results) => console.log('Upload successful!', results), * onError: (error) => console.error('Upload failed:', error), * onProgress: (progress) => setProgress(progress) * }); * ``` * * @example With client-side metadata * ```typescript * const { uploadFiles } = upload.imageUpload(); * * // Pass UI context as metadata * await uploadFiles(selectedFiles, { * albumId: selectedAlbum.id, * tags: ['vacation', 'beach'], * visibility: 'private', * category: 'travel' * }); * ``` * * @example Combined: callbacks + metadata * ```typescript * const { uploadFiles } = upload.productImages({ * onSuccess: (results) => { * console.log('Product images uploaded:', results); * updateProductGallery(results); * } * }); * * await uploadFiles(imageFiles, { * productId: product.id, * variantId: variant.id, * imageType: 'gallery', * sortOrder: existingImages.length + 1 * }); * ``` * * @example With different endpoint * ```typescript * const { uploadFiles } = upload.secureUpload({ * endpoint: '/api/secure-upload', * onSuccess: handleSecureUpload * }); * ``` * * @see {@link https://pushduck.dev/docs/api/client/create-upload-client} for complete documentation * @see {@link https://pushduck.dev/docs/guides/advanced/client-metadata} for metadata guide */ declare function createUploadClient<TRouter extends S3Router<any>>(config: ClientConfig): InferClientRouter<TRouter>; //#endregion export { type ClientConfig, type InferClientRouter, type RouterRouteNames, type S3FileMetadata, type S3RouteUploadConfig, type S3RouteUploadResult, type S3Router, type S3UploadedFile, type TypedRouteHook, type TypedUploadedFile, createUploadClient, formatETA, formatUploadSpeed, useUploadRoute };