fix: recover workspace publication failures
This commit is contained in:
@@ -233,12 +233,22 @@ function errorReply(reply: FastifyReply, error: unknown) {
|
||||
const body: Record<string, unknown> = { code, message: SAFE_MESSAGES[code] };
|
||||
if (error instanceof WorkspaceConflictError) {
|
||||
body.fields = error.fields;
|
||||
body.expected = error.expected;
|
||||
body.actual = error.actual;
|
||||
if (error.base) body.base = error.base;
|
||||
if (error.local) body.local = error.local;
|
||||
if (error.remote) body.remote = error.remote;
|
||||
} else if (code === "workspace_conflict" && error && typeof error === "object") {
|
||||
const conflict = error as Partial<WorkspaceConflictError>;
|
||||
if (Array.isArray(conflict.fields) && conflict.fields.every((field) => typeof field === "string")) body.fields = conflict.fields;
|
||||
for (const key of ["expected", "actual"] as const) {
|
||||
const revision = conflict[key];
|
||||
if (
|
||||
revision
|
||||
&& typeof revision.commit === "string" && /^[0-9a-f]{40}$/.test(revision.commit)
|
||||
&& (revision.blob === undefined || (typeof revision.blob === "string" && /^[0-9a-f]{40}$/.test(revision.blob)))
|
||||
) body[key] = revision;
|
||||
}
|
||||
for (const key of ["base", "local", "remote"] as const) {
|
||||
if (conflict[key] && isCanonicalWorkspace(conflict[key] as WorkspaceDescriptor)) body[key] = conflict[key];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user