You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
router: Paths without a route for the request's method respond with 404 instead of 405 or 501 (#328).
router: HEAD requests run the GET route of their path. GET handlers with side effects need to check ctx.method (#329).
router: Methods can be passed in any case to add(), find() and getAllowedMethods() (#335).
router: Routes with * or ** inside a segment, e.g. /files/*.json, or with a param inside a segment after **, throw when added.
admin: The login and logout labels read "Sign In" and "Sign Out" (#344).
admin: Dialogs focus their submit button, also in confirmations, so Enter confirms.
admin: Fields only validate on blur when they were edited.
server: A place in the data that several overlapping asset data paths reach, e.g. 'content.items[**].file' and '**.file', counts once and uses the first path's storage. Apps with overlapping paths should run db:recount_assets after upgrading (#385, #387).
utils:debounceAsync() resolves each call with the result of its own run, and cancel() only settles calls that still wait (#347, #349).
utils:equals() never treats values of different types as equal, and compares typed arrays element by element (#373).
utils:* in getValueAtDataPath() keeps values that are arrays instead of merging them (#357).
utils:normalizeDataPath() and resolveDataPath() throw for a .. that leads above the root (#358).
utils:capitalize() doesn't start new words after digits, e.g. '1st'. This can also change the column names of generated join tables (#356).