import path from "path"; import { promises as fs } from "fs"; export async function createFiles() { try { const packageJsonPath = path.join(".", "package.json"); // Read package.json and parse it const packageJsonData = await fs.readFile(packageJsonPath, "utf8"); const packageJson = JSON.parse(packageJsonData); // Define the build directory path const buildDir = path.join(".", "build"); // Ensure the build directory exists await fs.mkdir(buildDir, { recursive: true }); // File names and their contents const files = [ { name: "index.tsx", content: `import React from "react"; import { createRoot } from "react-dom/client"; import Root from "./root"; const container = document.getElementById("root"); if (container) { const root = createRoot(container); root.render(); }`, }, { name: "index.html", content: ` A Pretty, Chitty Game Engine
`, }, { name: "root.tsx", content: `import React from "react"; import Game from "${path.join("..", packageJson.entry ?? packageJson.main)}"; import { GameDesigner } from "@pretty-chitty/core"; export default function Root() { const game = new Game(); return }`, }, { name: "entry.tsx", content: ` import React from "react"; import { createRoot } from "react-dom/client"; import Game from "${path.join("..", packageJson.entry ?? packageJson.main)}"; import { Match, Connection, ClientTrustMatchViewer, ServerTrustMatchViewer, DemoWrapper } from "@pretty-chitty/core"; import type { IMatchStorage } from "@pretty-chitty/core"; export function createClientTrustMatchViewer(container: HTMLElement, storage: IMatchStorage, playerId: string, players: IPlayerInfo[], onBack: () => void, onLoadProgress: (panelsCreated:number,panelsLoaded:number) => void, options: any) { const root = createRoot(container); const game = new Game(); root.render(); } export function createServerTrustMatchViewer(container: HTMLElement, playerId: string, transport: ConnectionTransport, onBack: () => void, onLoadProgress: (panelsCreated:number,panelsLoaded:number) => void) { const root = createRoot(container); const game = new Game(); root.render(); } export function createDemoMatchViewer(container: HTMLElement) { const root = createRoot(container); const game = new Game(); root.render(); } export { Game, Match, Connection }; `, }, { name: "entry-node.tsx", content: ` import Game from "${path.join("..", packageJson.entry ?? packageJson.main)}"; import { Match, Connection } from "@pretty-chitty/core"; export { Game, Match, Connection }; `, }, ]; // Create and write to files await Promise.all(files.map((file) => fs.writeFile(path.join(buildDir, file.name), file.content))); console.log("All files have been created successfully."); } catch (error) { console.error("An error occurred:", error); } }