diff --git a/backend/storage/src/index.ts b/backend/storage/src/index.ts index a375f30..c57e7e7 100644 --- a/backend/storage/src/index.ts +++ b/backend/storage/src/index.ts @@ -1,5 +1,4 @@ import { z } from "zod" -import startercode from "./startercode" export interface Env { R2: R2Bucket @@ -143,13 +142,19 @@ export default { const body = await request.json() const { sandboxId, type } = initSchema.parse(body) - console.log(startercode[type]) + console.log(`Copying template: ${type}`); - await Promise.all( - startercode[type].map(async (file) => { - await env.R2.put(`projects/${sandboxId}/${file.name}`, file.body) - }) - ) + const templateDirectory = `templates/${type}`; + + // List all objects under the directory + const { objects } = await env.R2.list({ prefix: templateDirectory }); + + // Copy each object to the new directory + for (const { key } of objects) { + const destinationKey = key.replace(templateDirectory, `projects/${sandboxId}`); + const fileBody = await env.R2.get(key).then(res => res?.body ?? ""); + await env.R2.put(destinationKey, fileBody); + } return success } else { diff --git a/backend/storage/src/startercode.ts b/backend/storage/src/startercode.ts deleted file mode 100644 index ae768e1..0000000 --- a/backend/storage/src/startercode.ts +++ /dev/null @@ -1,151 +0,0 @@ -const startercode = { - node: [ - { name: "index.js", body: `console.log("Hello World!")` }, - { - name: "package.json", - body: `{ - "name": "nodejs", - "version": "1.0.0", - "description": "", - "main": "index.js", - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "@types/node": "^18.0.6" - } -}`, - }, - ], - react: [ - { - name: "package.json", - body: `{ - "name": "react-app", - "version": "0.1.0", - "private": true, - "dependencies": { - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-scripts": "5.0.1" - }, - "scripts": { - "start": "react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test", - "eject": "react-scripts eject" - }, - "eslintConfig": { - "extends": [ - "react-app", - "react-app/jest" - ] - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - }, - "devDependencies": { - "@types/react": "^18.2.66", - "@types/react-dom": "^18.2.22", - "eslint": "^8.57.0", - "eslint-plugin-react": "^7.34.1", - "eslint-plugin-react-hooks": "^4.6.0" - } -}`, - }, - { - name: "public/index.html", - body: ` - - - - - - React Starter Code - - -
- - - -`, - }, - { - name: "src/App.css", - body: `div { - width: 100%; - height: 100vh; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - - font-family: sans-serif; -} - -h1 { - color: #000; - margin: 0; -} - -p { - color: #777; - margin: 0; -} - -button { - padding: 8px 16px; - margin-top: 16px; -}`, - }, - { - name: "src/App.jsx", - body: `import './App.css' -import { useState } from 'react' - -function App() { - - const [count, setCount] = useState(0) - - return ( -
-

React Starter Code

-

- Edit App.jsx to get started. -

- -
- ) -} - -export default App -`, - }, - { - name: "src/index.js", - body: `import React from 'react' -import ReactDOM from 'react-dom/client' -import App from './App.jsx' - -ReactDOM.createRoot(document.getElementById('root')).render( - - - , -) -`, - }, - ], -} - -export default startercode