in packages/plugin-docs/src2/DemoContainer/codesandbox/createCodesandbox.ts [1:46]
export async function createCodesandbox({
code,
imports,
modifyCode
}: {
code: string;
imports: string[];
modifyCode: (files: CSBFiles) => CSBFiles;
}) {
const deps = imports
// filter out relative import
.filter(path => !path.startsWith("."))
.reduce((acc, cur) => {
acc[cur] = "latest";
return acc;
}, {});
let codesandboxProject = codesandboxProjectCode({
mainCode: code,
deps: deps
});
codesandboxProject = modifyCode(codesandboxProject);
const files: { [name: string]: { content: string } } = Object.fromEntries(
Object.entries(codesandboxProject).map(([name, code]) => [
name,
{ content: code }
])
);
return fetch("https://codesandbox.io/api/v1/sandboxes/define?json=1", {
method: "POST",
headers: {
Accept: "application/json",
"Content-Type": "application/json"
},
body: JSON.stringify({
files
})
})
.then(x => x.json())
.then(({ sandbox_id }) => ({
sandboxId: sandbox_id as string,
url: `https://codesandbox.io/embed/${sandbox_id}?fontsize=14&codemirror=1&view=split&module=/src/main.tsx`
}));
}