fix(browse): treat 404 on directory fetch as empty, not an error
Expanding a folder that returns 404 used to throw "HTTP 404 fetching
…" through statusError, surfacing it as a red error toast. From the
user's POV, a missing or empty directory shouldn't be presented as a
load failure — empty IS the legitimate state.
fetchServerChildren now returns [] on 404; other non-2xx still throw.
Other failure modes (transport error, 500, malformed JSON) continue
to surface as before.
Server-side, zddc-server already returns 200 + [] for canonical
project folders that don't exist on disk (the prior commit). This
client fix covers the residual cases:
- non-canonical paths that don't exist (deleted between listing
and expand; race with concurrent writers)
- non-zddc-server backends (Caddy file_server, plain nginx) where
we can't change the 404 behavior
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
3fc371752a
commit
76e8dab009
1 changed files with 12 additions and 0 deletions
|
|
@ -62,12 +62,24 @@
|
||||||
|
|
||||||
// Fetch children of a directory in server mode.
|
// Fetch children of a directory in server mode.
|
||||||
// path must end with '/' so the request hits the directory route.
|
// path must end with '/' so the request hits the directory route.
|
||||||
|
//
|
||||||
|
// 404 is treated as "empty directory" rather than a hard error.
|
||||||
|
// A directory that doesn't exist on the server (e.g. a fresh
|
||||||
|
// project's working/ before any drafts have been created, or a
|
||||||
|
// dir deleted between listing and expand) is functionally
|
||||||
|
// indistinguishable from an empty one for tree-rendering purposes.
|
||||||
|
// Server-side, zddc-server already returns 200 + [] for canonical
|
||||||
|
// project folders that are missing on disk; this fallback covers
|
||||||
|
// the same UX for anything else and for non-zddc-server backends.
|
||||||
async function fetchServerChildren(path) {
|
async function fetchServerChildren(path) {
|
||||||
if (!path.endsWith('/')) path += '/';
|
if (!path.endsWith('/')) path += '/';
|
||||||
var resp = await fetch(path, {
|
var resp = await fetch(path, {
|
||||||
headers: { 'Accept': 'application/json' },
|
headers: { 'Accept': 'application/json' },
|
||||||
credentials: 'same-origin'
|
credentials: 'same-origin'
|
||||||
});
|
});
|
||||||
|
if (resp.status === 404) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
if (!resp.ok) {
|
if (!resp.ok) {
|
||||||
throw new Error('HTTP ' + resp.status + ' fetching ' + path);
|
throw new Error('HTTP ' + resp.status + ' fetching ' + path);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue