morphbox
Version:
Docker-based AI sandbox for development with Claude integration
80 lines (77 loc) • 2.65 kB
JavaScript
import { j as json } from './index-3BbzJtgI.js';
import { access, readFile } from 'fs/promises';
import { join } from 'path';
import { homedir } from 'os';
import { v as validateMorphFile, c as createMorphFile } from './morph-f-EPjDPR.js';
const PANELS_DIR = join(homedir(), "morphbox", "panels");
const GET = async ({ params }) => {
try {
const { id } = params;
if (!id) {
return json({ error: "Panel ID is required" }, { status: 400 });
}
const morphPath = join(PANELS_DIR, `${id}.morph`);
try {
await access(morphPath);
const morphContent = await readFile(morphPath, "utf-8");
const morphData = JSON.parse(morphContent);
if (validateMorphFile(morphData)) {
return new Response(JSON.stringify(morphData, null, 2), {
headers: {
"Content-Type": "application/json",
"Content-Disposition": `attachment; filename="${id}.morph"`
}
});
}
} catch (morphError) {
}
const jsPath = join(PANELS_DIR, `${id}.js`);
const metadataPath = join(PANELS_DIR, `${id}.json`);
try {
const [code, metadataContent] = await Promise.all([
readFile(jsPath, "utf-8"),
readFile(metadataPath, "utf-8")
]);
const metadata = JSON.parse(metadataContent);
const morphFile = createMorphFile(
{
id: metadata.id || id,
name: metadata.name || id,
description: metadata.description || "",
version: metadata.version || "1.0.0",
features: metadata.features || [],
author: metadata.author,
icon: metadata.icon,
defaultSize: metadata.defaultSize,
persistent: metadata.persistent,
tags: metadata.tags
},
code
);
if (metadata.promptHistory) {
morphFile.promptHistory = metadata.promptHistory;
}
if (metadata.createdAt) {
morphFile.createdAt = metadata.createdAt;
}
if (metadata.updatedAt) {
morphFile.updatedAt = metadata.updatedAt;
}
return new Response(JSON.stringify(morphFile, null, 2), {
headers: {
"Content-Type": "application/json",
"Content-Disposition": `attachment; filename="${id}.morph"`
}
});
} catch (legacyError) {
return json({ error: "Panel not found" }, { status: 404 });
}
} catch (error) {
console.error("Failed to export panel:", error);
return json({
error: error instanceof Error ? error.message : "Failed to export panel"
}, { status: 500 });
}
};
export { GET };
//# sourceMappingURL=_server.ts-maSTDOqB.js.map