add folder, file nodes and major usability improvements
This commit is contained in:
56
frontend/src/defaultWorkflow.js
Normal file
56
frontend/src/defaultWorkflow.js
Normal file
@@ -0,0 +1,56 @@
|
||||
import { extractWorkflow } from './pngMetadata.js';
|
||||
|
||||
const DEFAULT_WORKFLOW_CANDIDATES = [
|
||||
{ path: '/default-workflow.json', type: 'json' },
|
||||
{ path: '/default-workflow.png', type: 'png' },
|
||||
];
|
||||
|
||||
async function loadCandidate(candidate, fetchImpl, extractWorkflowFn) {
|
||||
let response;
|
||||
try {
|
||||
response = await fetchImpl(candidate.path, { cache: 'no-store' });
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
|
||||
const contentType = response.headers?.get?.('content-type') || '';
|
||||
const isHtmlFallback = typeof contentType === 'string' && contentType.toLowerCase().includes('text/html');
|
||||
|
||||
if (!response.ok) {
|
||||
if (response.status === 404 || response.status === 0) return null;
|
||||
throw new Error(`Failed to load ${candidate.path} (${response.status})`);
|
||||
}
|
||||
|
||||
if (candidate.type === 'json') {
|
||||
if (isHtmlFallback) return null;
|
||||
try {
|
||||
return await response.json();
|
||||
} catch {
|
||||
throw new Error(`${candidate.path} is not valid JSON`);
|
||||
}
|
||||
}
|
||||
|
||||
if (isHtmlFallback) return null;
|
||||
const workflow = await extractWorkflowFn(await response.blob());
|
||||
if (!workflow) {
|
||||
throw new Error(`${candidate.path} does not contain embedded workflow metadata`);
|
||||
}
|
||||
return workflow;
|
||||
}
|
||||
|
||||
export async function loadDefaultWorkflowAsset({
|
||||
fetchImpl = fetch,
|
||||
extractWorkflowFn = extractWorkflow,
|
||||
} = {}) {
|
||||
for (const candidate of DEFAULT_WORKFLOW_CANDIDATES) {
|
||||
const workflow = await loadCandidate(candidate, fetchImpl, extractWorkflowFn);
|
||||
if (workflow) {
|
||||
return {
|
||||
source: candidate.path,
|
||||
format: candidate.type,
|
||||
workflow,
|
||||
};
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
Reference in New Issue
Block a user