Changelog - 2026-10-25
Correctness fixes in the kernel, the admin and the hooks
Bug FixIn one line. A series of small fixes where the code did not do what its documentation said; none changes a public signature.
What changed
- An async
getAppInfo.preConfigurenow waits for it, soAPPLICATION_INFOholds the info and not a promise. A synchronousgetAppInfokeepspreConfiguresynchronous. The signature is unchanged. - A response body that is not an object.
convertResponsewithrequestCountData=1throws the documented error fornulland for a primitive body, instead of aTypeError. - Errors are no longer swallowed. A failed token refresh, a failing
onAuthFailure, an invalidnoAuthPathRegexpattern, a stored token that is not JSON, and a JWT payload that cannot be decoded are now logged. The last two log the error name only, because a JSON parse error message quotes the token. - Data-provider methods reject.
getList,getOne,getMany,getManyReference,create,update,updateMany,delete,deleteManyandsendof the REST data provider areasync: a failure while the request is being built is a rejected promise, as react-admin expects, not a synchronous throw. CountRestDataProviderkeeps the list extras. Theextraa list route answers reaches the result asmeta.extra, and thex-request-extraheader built for the list is no longer sent to the/countroute.DefaultAuthServiceon bad or missing storage.getUserandgetRolesread a corrupt stored value as empty instead of throwing, andgetRoleskeeps only the strings of a stored list.getAuthno longer logs the stored text (it is the token); it logs the error name. Every method is safe where there is nolocalStorage, andsaveAuththrows a clear error there, because a sign-in that is not kept must not look like it worked.cleanUpremoves the two prefixesLocalStorageKeys.PREFIX_AUTHandPREFIX_OAUTH2.- List pagination. The page defaults to 1 (a missing page used to send a negative
skip), aperPageof 0 or none sends no limit instead oflimit: 0, and onlyskipis sent: IGNIS readsoffsetas its alias. - React hooks.
useSizerreports theoffsetWidthandoffsetHeightof the element as they are (it mixedclientWidthandoffsetHeightand added a pixel to each).useWindowDimensionsanswers 0 by 0 where there is nowindow, instead of throwing, and measures the browser once mounted. Aconfirm()that replaces an open prompt resolves the replaced one withfalse; it used to leave it pending forever.useAutosaveanduseCopyToClipboardlog through the applicationLogger, notconsole. ArdorApplicationresolves its providers once. The memo of the data, auth and i18n providers never held, so the container was read again on each render. It now depends on the container only; the react-admin props are spread on top, as before.- Type parameter name. The generic parameter of
send,doRequestandparseResponseisTResult(it wasReturnType, which shadowed the TypeScript utility type). Callers pass it positionally, so nothing changes.
Who is affected
- A server that reads only
offset. The list request no longer carries it; readskip, which IGNIS treats as the primary. - A layout that relied on the extra pixel of
useSizer. The size is now the element's realoffsetWidthandoffsetHeight. - A log reader. The new lines are warnings and errors for the failures above, and a debug line for an undecodable JWT payload.