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.09 kB
TypeScript
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-BmRrcynd.js";
import { n as formatUploadSpeed, r as useUploadRoute, t as formatETA } from "./use-upload-route-PFrE8vhp.js";
//#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 };