diff --git a/src/operations/scaffold.js b/src/operations/scaffold.js index ce59845..967289a 100644 --- a/src/operations/scaffold.js +++ b/src/operations/scaffold.js @@ -16,7 +16,7 @@ import * as display from '../ui/display.js'; import * as prompts from '../ui/prompts.js'; // Business utilities -import { copyTemplateFiles, validateProjectName, directoryExists, validateMode, validateVersion, validateLanguage, validateP5Mode, getTemplateName, generateProjectName, isRemoteTemplateSpec } from '../utils.js'; +import { copyTemplateFiles, validateProjectName, directoryExists, validateMode, validateVersion, validateLanguage, validateP5Mode, getTemplateDirName, generateProjectName, isRemoteTemplateSpec } from '../utils.js'; import { fetchVersions, downloadP5Files, downloadTypeDefinitions } from '../version.js'; import { injectP5Script } from '../htmlManager.js'; import { createConfig } from '../config.js'; @@ -312,7 +312,7 @@ export async function scaffold(args) { templateDir = 'minimal-global-js'; } else { // Standard and custom use template based on language and mode - templateDir = getTemplateName(selectedLanguage, selectedP5Mode); + templateDir = getTemplateDirName(selectedLanguage, selectedP5Mode); } const templatePath = path.join(__dirname, '..', '..', 'templates', templateDir); @@ -338,7 +338,7 @@ export async function scaffold(args) { } // If local mode, create lib directory and download p5.js files - if (selectedMode === 'local') { + if (selectedMode === 'local' && selectedLanguage !== "typescript") { const libPath = path.join(targetPath, 'lib'); await fs.mkdir(libPath, { recursive: true }); try { @@ -359,19 +359,20 @@ export async function scaffold(args) { process.exit(1); } } - - // Inject p5.js script tag into index.html - const indexPath = path.join(targetPath, 'index.html'); - const htmlContent = await fs.readFile(indexPath, 'utf-8'); - const updatedHtml = injectP5Script(htmlContent, selectedVersion, selectedMode); - await fs.writeFile(indexPath, updatedHtml, 'utf-8'); + if (selectedLanguage !== "typescript"){ + // Inject p5.js script tag into index.html + const indexPath = path.join(targetPath, 'index.html'); + const htmlContent = await fs.readFile(indexPath, 'utf-8'); + const updatedHtml = injectP5Script(htmlContent, selectedVersion, selectedMode); + await fs.writeFile(indexPath, updatedHtml, 'utf-8'); + } // Download TypeScript definitions (skip for basic setup) let typeDefsVersion = null; if (setupType === 'basic') { // Basic setup never includes type definitions display.info('info.skipTypesBasic'); - } else if (args.types !== false) { + } else if (args.types !== false && selectedLanguage !== "typescript") { const typesPath = path.join(targetPath, 'types'); await fs.mkdir(typesPath, { recursive: true }); try { diff --git a/src/utils.js b/src/utils.js index 5446599..d899f8f 100644 --- a/src/utils.js +++ b/src/utils.js @@ -268,11 +268,15 @@ export function validateP5Mode(mode) { /** * Determines template directory name from language and mode - * @param {string} language - 'javascript' or 'typescript' - * @param {string} mode - 'global' or 'instance' + * @param {"javascript" | "typescript"} language + * @param {"global" | "instance"} mode * @returns {string} Template directory name (e.g., 'basic-global-js') */ -export function getTemplateName(language, mode) { +export function getTemplateDirName(language, mode) { + //For TS we use the same template for global and instance modes. + if(language==="typescript" && mode==="instance"){ + mode = "global"; + } const langSuffix = language === 'typescript' ? 'ts' : 'js'; return `basic-${mode}-${langSuffix}`; } diff --git a/templates/basic-global-ts/.gitignore b/templates/basic-global-ts/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/templates/basic-global-ts/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/templates/basic-global-ts/README.md b/templates/basic-global-ts/README.md new file mode 100644 index 0000000..aed491e --- /dev/null +++ b/templates/basic-global-ts/README.md @@ -0,0 +1,36 @@ +# p5.js v2.x TypeScript project + +## Prerequisites + +- [Node.js](https://nodejs.org/) + +## Getting Started + +### Install and run + +To install dependencies and start vite dev server + +```bash +npm i +npm run dev +``` + +### Choose global-mode or instance-mode p5.js + +Two sketches are provided in src, one for each mode. + +If you're not sure, use global mode. + +Delete whichever of the two you don't need, + +Ensure index.html is pointing at the right one. + +### (optional) Type-check all your files + +VSCode will type-check the files you currently have open. + +To type-check _all_ your files, run: + +```bash +npm run type-check +``` diff --git a/templates/basic-global-ts/index.html b/templates/basic-global-ts/index.html index 7697ff4..d1b9dd0 100644 --- a/templates/basic-global-ts/index.html +++ b/templates/basic-global-ts/index.html @@ -1,13 +1,14 @@ -
- - -