export async function createCodesandbox()

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`
    }));
}