Skip to content
Snippets Groups Projects
vscode.ts 1.77 KiB
Newer Older
  • Learn to ignore specific revisions
  • import fs from "fs";
    import path from "path";
    
    import { assetRelocator, copy } from "./copy";
    
    import { TemplateFramework } from "./types";
    
    function renderDevcontainerContent(
      templatesDir: string,
      framework: TemplateFramework,
    ) {
      const devcontainerJson: any = JSON.parse(
        fs.readFileSync(path.join(templatesDir, "devcontainer.json"), "utf8"),
      );
    
      // Modify postCreateCommand
    
      devcontainerJson.postCreateCommand =
        framework === "fastapi" ? "poetry install" : "npm install";
    
    
      // Modify containerEnv
      if (framework === "fastapi") {
    
        devcontainerJson.containerEnv = {
          ...devcontainerJson.containerEnv,
          PYTHONPATH: "${PYTHONPATH}:${workspaceFolder}",
        };
    
      }
    
      return JSON.stringify(devcontainerJson, null, 2);
    }
    
    export const writeDevcontainer = async (
      root: string,
      templatesDir: string,
      framework: TemplateFramework,
    ) => {
    
      const devcontainerDir = path.join(root, ".devcontainer");
      if (fs.existsSync(devcontainerDir)) {
        console.log("Template already has a .devcontainer. Using it.");
        return;
      }
    
      const devcontainerContent = renderDevcontainerContent(
        templatesDir,
        framework,
      );
      fs.mkdirSync(devcontainerDir);
      await fs.promises.writeFile(
        path.join(devcontainerDir, "devcontainer.json"),
        devcontainerContent,
      );
    };
    
    
    export const copyVSCodeSettings = async (
      root: string,
      templatesDir: string,
    ) => {
      const vscodeDir = path.join(root, ".vscode");
      await copy("vscode_settings.json", vscodeDir, {
        cwd: templatesDir,
        rename: assetRelocator,
      });
    };
    
    export const configVSCode = async (
      root: string,
      templatesDir: string,
      framework: TemplateFramework,
    ) => {
      await writeDevcontainer(root, templatesDir, framework);
      if (framework === "fastapi") {
        await copyVSCodeSettings(root, templatesDir);
      }
    };