v0.19: Controller.set() por lotes, TypeScript más rápido
El original en inglés cambió después de esta traducción, así que puede estar desactualizada.
v0.19 permite que un Manager escriba un lote completo de filas recibidas por streaming en una sola actualización del store, verifica los tipos del código de endpoints unas 2 veces más rápido y corrige una ronda de problemas de TypeScript y Vue. Los agentes de programación también reciben un plugin de Claude Code, skills de Vue y llms.txt; consulta Data Client para agentes de programación.
Nuevas APIs:
- Controller.set() con schemas Array - Escribe muchas entidades en una sola actualización del store con
ctrl.set([Entity], rows), hasta 95 veces más rápido que unset()por fila
Rendimiento:
- TypeScript más rápido - Los editores y
tscverifican el código de RestEndpoint y resource() unas 2 veces más rápido con 40% menos memoria, detectando todos los errores que detectaban antes
Otras mejoras:
- Se corrige la resolución de módulos de TypeScript 7 para los
exportsdel paquete; los imports ahora resuelven a los archivos de declaración (#4019) - renderDataHook() ejecuta los efectos de montaje del provider cuando el primer renderizado suspende (#4099)
- Los valores de Controller.set() se tipan según el schema, así que
ctrl.set(new schema.All(Todo), 42)es un error de TypeScript (#4133) - Controller.set() elimina una sola entidad con un schema Invalidate sin la solución alternativa del lote de una fila (#4230)
- process() recibe params tipados en
new RestEndpoint(),.extend()yresource().extend(), así que un parámetro de ruta incorrecto es un error de TypeScript en lugar deundefineden tiempo de ejecución (#4183, #4184) - Los valores de retorno de getOptimisticResponse() se tipan según el schema, así que un tipo de campo incorrecto es un error de TypeScript en lugar de un destello de datos erróneos (#4198)
- useSuspense() y useLive() de Vue conservan los datos anteriores mientras cargan los nuevos argumentos, en lugar de devolver
undefined(#4131) - useSuspense() y useLive() de Vue envían los errores de obtención posteriores a un cambio de argumentos a
onErrorCaptured()en lugar de producir un rechazo de promesa no manejado (#4135) - useSuspense(), useDLE() y useFetch() de Vue ya no vuelven a obtener los datos obsoletos en cada actualización del store, así que un
controller.set()no se sobrescribe (#4134) - useSuspense() de Vue muestra los datos obsoletos al montarse y vuelve a obtenerlos en segundo plano, como en React, en lugar de mostrar el fallback de
<Suspense>hasta que termina la nueva obtención (#4169) - useDLE() y useCache() de Vue conservan los datos
invalidIfStalecaducados a través de actualizaciones del store no relacionadas, en lugar de quedarse atascados cargando (#4142) DataClientPluginde Vue se instala en versiones de Vue anteriores a 3.5 en lugar de lanzarapp.onUnmount is not a function(#4146)- DataClientPlugin de Vue recolecta basura de forma predeterminada, igual que DataProvider de React, así que ya no necesitas pasar
gcPolicy; cómo decide qué eliminar (#4148) - Los composables de Vue aceptan argumentos getter como
() => ({ id: props.id }); estaban tipados para permitirlos pero pasaban la propia función al endpoint (#4115) - Se corrigen los errores
Cannot find name 'NoInfer'yexport typeen TypeScript 4.x conskipLibCheckdesactivado (#4138) - Se corrigen los errores de tipo de
Entity,Endpoint,UnionyRestEndpointen TypeScript 4.0–4.5 conskipLibCheckdesactivado (#4140) - Se corrigen los errores
',' expectedal importar@data-client/react/redux,@data-client/react/nextjso@data-client/testen TypeScript 4.0–4.4 (#4232) - Se corrige que
actyrenderHookde@data-client/testse tiparan comoanyen TypeScript 4.0–4.4 (#4251) - Las clases Entity pueden usarse donde se espera un
EntityInterface(#4149); prepara las sobrescrituras depk()para una versión futura - useCache() y useDLE() devuelven
undefinedpara una entidad eliminada cuya nueva obtención falló, en lugar de unSymbolverdadero que se colaba por las comprobacionesif (!data); elimina cualquier solución alternativa (#4150) - useFetch() de Vue evita que sus datos sean recolectados como basura mientras está montado, como useSuspense(), así que un
gcPolicyconfigurado ya no expulsa los datos precargados que los componentes leen después (#4152) - Las aplicaciones con Redux DevTools abierto ya no se entrecortan en desarrollo con stores grandes o actualizaciones frecuentes; cada actualización se serializa entre 40 y 60 veces más rápido (#4163)
- resource().extend() con un objeto de sobrescrituras de endpoints conserva en su tipo los endpoints añadidos antes con
.extend('name', options), así que usarlos ya no es un error de TypeScript (#4184) - RestEndpoint.push,
unshiftyremoveaceptan los campos de la Entity como cuerpo cuando un Query o Lazy envuelve la Collection, en lugar de soloFormData(#4226) - useFetch() de Vue se tipa como el
Refde solo lectura que devuelve, así quepromise.resolved(siempreundefined) es ahora un error de TypeScript; leepromise.value.resolveden su lugar (#4114) - Una subclase de
Controllerpasada a DataProvider o DataClientPlugin ya no necesita una conversión de tipo para verificar los tipos (#4228) - El
storede prepareStore() puede pasarse al<Provider>de react-redux sin una conversión de tipo, y tienedispatch()en su tipo (#4238) - resource().create acepta FormData sin una conversión de tipo, como
update,partialUpdateygetList.push(#4235) - RestEndpoint.push,
unshiftyremoveenvían un cuerpo de tipo array como JSON, así que crear o eliminar varios elementos a la vez ya no envía"[object Object]"a tu servidor;resource().createtambién acepta un array (#4262) createDataClient()de Vue queda obsoleto, ya que es interno de DataClientPlugin; instala el plugin conapp.use(DataClientPlugin, options)en lugar de llamarlo directamente (#4193)waitForNextUpdate()derenderDataCompose()de Vue queda obsoleto, ya que se rinde en silencio después de 1 segundo y deja pasar una prueba mientras sigue suspendida; usaawait resulten su lugar, oawait allSettled()después de un cambio, que ahora también espera las obtenciones que inicia un cambio de prop (pruebas unitarias de composables, #4221)
- Se requiere TypeScript 4.0 o posterior - se eliminan las declaraciones para TypeScript 3.x (#4151)
