v2.0.0 · Licencia MIT · TypeScript

uploaderkit

Subida de archivos para React y Node, desde un solo contrato.

Scopes que ambos lados validan, un uploader headless con progreso / abort / compresión, y un servicio de almacenamiento en servidor con providers intercambiables.

Instalación

npm install uploaderkit

Características

Todo lo que incluye el paquete, según su propio README.

  • Un contrato, los dos lados

    un registro de scopes declara dónde aterriza un archivo, quién puede leerlo, qué se acepta y qué tan grande puede ser. El navegador y el servidor validan contra el mismo objeto, así que un rechazo nunca es una sorpresa al final de una subida de 40 MB.

  • Headless primero

    useUploader es dueño de la selección, la validación, la compresión, el progreso por archivo, el abort y el estado de error; no renderiza nada. /ui es una piel opcional encima, así que una app con su propio design system no pierde comportamiento al saltársela.

  • Validación en el cliente antes del primer byte

    extensión, tamaño y magic numbers, para que un .exe renombrado a .pdf nunca salga de la máquina.

  • Progreso de subida real

    la estrategia por defecto usa XHR porque fetch sigue sin tener progreso de subida usable en los navegadores. Toda subida en vuelo se puede abortar, por archivo o todas de golpe.

  • Compresión de imágenes en el scope

    declara compress y las imágenes se reescalan y reencodean antes de viajar. El EXIF (GPS, cámara) se pierde en el proceso.

  • Transporte intercambiable

    el UploadStrategy es una sola función (file, scope, entityId, { onProgress, signal }). Cambia el endpoint, el header de auth o el protocolo completo sin tocar el estado del hook.

  • Servicio de almacenamiento en servidor

    createStorage vuelve a correr la misma validación, cifra los scopes que lo piden y responde URLs firmadas con expiración para los objetos privados.

  • Guardas en el arranque

    un scope privado sobre un provider que no puede firmar, o un scope cifrado sin un cipher inyectado, lanza al construir. El deploy falla en voz alta en vez de dar 500 en la primera subida.

  • Adaptadores de framework

    handlers estructurales para Express (la app es dueña de multer) y para el App Router de Next.js (Request/Response nativos). No se arrastra ninguna dependencia de framework.

  • Adaptadores de provider

    Google Cloud Storage (esquema de dos buckets), cualquier backend compatible con S3 (AWS, Cloudflare R2, Backblaze B2, MinIO, Wasabi) y un provider en memoria para pruebas. Todos son peers opcionales: elegir GCS nunca instala el SDK de AWS.

  • Slots con nombre

    SlottedUploader llena un archivo por posición nombrada (hoja membretada, identificación, constancia fiscal); un drop masivo rutea cada archivo a su slot y lo renombra para que resubir sobrescriba en su lugar.

  • Sin cipher por defecto

    los scopes privados declaran encrypt: true y la app inyecta los CryptoHooks. createAesGcmCrypto está disponible como implementación de referencia.

  • Tú eliges cuándo dispara la subida

    uploadOn: 'select' manda en cuanto un archivo válido aterriza; 'manual' retiene los archivos hasta upload() — el flujo de formulario. onUploadStart anuncia el momento en que un batch sale.

  • Retry con backoff + tope de concurrencia

    resiliencia opt-in para redes inestables: las fallas transitorias de la estrategia se reintentan con backoff exponencial, y los batches grandes se encolan tras un límite de concurrencia.

  • Diálogos de confirmación integrados

    confirmRemove / confirmReplace ponen un segundo paso accesible antes de las acciones destructivas (el foco cae en cancelar), y ConfirmDialog se exporta para uso de la app.

  • Paste y captura de cámara

    la zona con foco acepta un screenshot pegado, y capture abre la cámara del móvil directamente.

  • Copy traducible

    todos los strings visibles fluyen por un objeto de labels, en el cliente Y en el servidor. Inglés por defecto, ES_LABELS incluido, cualquier idioma con un override parcial.

  • Tema re-brandeable

    la capa con estilos lee variables CSS --color-ui-* así un solo override en :root re-brandea toda la capa con estilos.

  • Tamaños, iconos y motion

    size='sm' | 'md' compacta cada fila y zona, icon cambia (o quita) el glifo de la zona, y toda la superficie anima: las filas hacen fade-in, el drag escala la zona, los overlays entran y salen con transición, el indicador de subida pulsa.

  • Touch-first por defecto

    en pointers coarse la zona se lee como objetivo de tap ("Toca para elegir un archivo") con feedback de presión, en vez de anunciar un drag que nadie puede hacer; capture abre la cámara directo.

Puntos de entrada

Importa solo lo que usas; cada subpath se optimiza de forma independiente.

  • uploaderkit
  • uploaderkit/react
  • uploaderkit/ui
  • uploaderkit/presets
  • uploaderkit/server
  • uploaderkit/server/express
  • uploaderkit/server/next
  • uploaderkit/adapters/s3
  • uploaderkit/adapters/gcs
  • uploaderkit/adapters/memory

On this page