v0.19: Controller.set() em lote, TypeScript mais rápido
O original em inglês mudou depois desta tradução, então ela pode estar desatualizada.
A v0.19 permite que um Manager escreva um lote inteiro de linhas recebidas por stream em uma única atualização da store, verifica os tipos do código de endpoints cerca de 2x mais rápido e corrige uma rodada de problemas de TypeScript e Vue. Coding agents também ganham um plugin do Claude Code, skills de Vue e llms.txt; veja Data Client para Coding Agents.
Novas APIs:
- Controller.set() com schemas Array - Escreva muitas entidades em uma única atualização da store com
ctrl.set([Entity], rows), até 95x mais rápido do que umset()por linha
Desempenho:
- TypeScript mais rápido - Editores e o
tscverificam código com RestEndpoint e resource() cerca de 2x mais rápido com 40% menos memória, detectando todos os erros que detectavam antes
Outras melhorias:
- Corrige a resolução de módulos do TypeScript 7 para os
exportsdo pacote; os imports agora resolvem para os arquivos de declaração (#4019) - renderDataHook() executa os efeitos de montagem do provider quando a primeira renderização suspende (#4099)
- Os valores de Controller.set() são tipados pelo schema, então
ctrl.set(new schema.All(Todo), 42)é um erro de TypeScript (#4133) - Controller.set() exclui uma entidade com um schema Invalidate sem a gambiarra do lote de uma linha (#4230)
- process() recebe params tipados em
new RestEndpoint(),.extend()eresource().extend(), então um parâmetro de path errado é um erro de TypeScript em vez deundefinedem tempo de execução (#4183, #4184) - Os retornos de getOptimisticResponse() são tipados pelo schema, então um tipo de campo errado é um erro de TypeScript em vez de um flash de dados incorretos (#4198)
- useSuspense() e useLive() do Vue mantêm os dados anteriores enquanto novos argumentos carregam, em vez de retornar
undefined(#4131) - useSuspense() e useLive() do Vue enviam erros de fetch após a mudança de argumentos para
onErrorCaptured()em vez de uma rejeição de promise não tratada (#4135) - useSuspense(), useDLE() e useFetch() do Vue não buscam mais novamente dados desatualizados a cada atualização da store, então um
controller.set()não é sobrescrito (#4134) - useSuspense() do Vue mostra dados desatualizados na montagem e busca novamente em segundo plano, como no React, em vez de mostrar o fallback do
<Suspense>até a nova busca terminar (#4169) - useDLE() e useCache() do Vue mantêm dados
invalidIfStaleexpirados durante atualizações não relacionadas da store, em vez de ficarem travados carregando (#4142) - O
DataClientPlugindo Vue é instalado em versões do Vue anteriores à 3.5 em vez de lançarapp.onUnmount is not a function(#4146) - O DataClientPlugin do Vue faz coleta de lixo por padrão, igual ao DataProvider do React, então você não precisa mais passar
gcPolicy; como ele decide o que remover (#4148) - Os composables do Vue aceitam argumentos getter como
() => ({ id: props.id }); eles eram tipados para permiti-los, mas passavam a própria função ao endpoint (#4115) - Corrige os erros
Cannot find name 'NoInfer'eexport typeno TypeScript 4.x comskipLibCheckdesativado (#4138) - Corrige erros de tipo de
Entity,Endpoint,UnioneRestEndpointno TypeScript 4.0–4.5 comskipLibCheckdesativado (#4140) - Corrige erros
',' expectedao importar@data-client/react/redux,@data-client/react/nextjsou@data-client/testno TypeScript 4.0–4.4 (#4232) - Corrige
acterenderHookde@data-client/testtipados comoanyno TypeScript 4.0–4.4 (#4251) - Classes Entity podem ser usadas onde um
EntityInterfaceé esperado (#4149); prepare as sobrescritas depk()para um lançamento futuro - useCache() e useDLE() retornam
undefinedpara uma entidade excluída cuja nova busca falhou, em vez de umSymboltruthy que passava por verificaçõesif (!data); remova quaisquer gambiarras (#4150) - useFetch() do Vue impede que seus dados sejam coletados pelo garbage collector enquanto está montado, como o useSuspense(), então um
gcPolicyconfigurado não remove mais dados pré-carregados que componentes leem depois (#4152) - Apps com o Redux DevTools aberto não travam mais em desenvolvimento com stores grandes ou atualizações frequentes; cada atualização serializa 40-60x mais rápido (#4163)
- resource().extend() com um objeto de sobrescritas de endpoints mantém em seu tipo os endpoints adicionados antes com
.extend('name', options), então usá-los não é mais um erro de TypeScript (#4184) - RestEndpoint.push,
unshifteremoveaceitam os campos da Entity como body quando um Query ou Lazy envolve a Collection, em vez de apenasFormData(#4226) - useFetch() do Vue é tipado como o
Refsomente leitura que retorna, entãopromise.resolved(sempreundefined) agora é um erro de TypeScript; leiapromise.value.resolvedem vez disso (#4114) - Uma subclasse de
Controllerpassada ao DataProvider ou ao DataClientPlugin não precisa mais de um cast para passar na verificação de tipos (#4228) - A
storede prepareStore() pode ser passada ao<Provider>do react-redux sem cast, e temdispatch()em seu tipo (#4238) - resource().create aceita FormData sem cast, como
update,partialUpdateegetList.push(#4235) - RestEndpoint.push,
unshifteremoveenviam um body em array como JSON, então criar ou remover vários itens de uma vez não envia mais"[object Object]"ao seu servidor;resource().createtambém aceita um array (#4262) - O
createDataClient()do Vue está descontinuado, já que é interno ao DataClientPlugin; instale o plugin comapp.use(DataClientPlugin, options)em vez de chamá-lo diretamente (#4193) - O
waitForNextUpdate()dorenderDataCompose()do Vue está descontinuado, já que desiste silenciosamente após 1 segundo e deixa um teste passar enquanto ainda está suspenso; useawait resultem vez disso, ouawait allSettled()após uma mudança, que agora também espera as buscas iniciadas por uma mudança de prop (testes unitários de composables, #4221)
- TypeScript 4.0 ou posterior é obrigatório - as declarações para TypeScript 3.x foram removidas (#4151)
