diff --git a/bun.lockb b/bun.lockb index 867e20c..6ab1a53 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/copy.ts b/copy.ts new file mode 100644 index 0000000..ba0c6fd --- /dev/null +++ b/copy.ts @@ -0,0 +1,77 @@ +import { existsSync } from 'node:fs'; +import { copyFile, mkdir, readdir } from 'node:fs/promises'; +import { join } from 'node:path'; +import prompts from 'prompts'; +import { replaceInFile } from 'replace-in-file'; + +// Select year and date +const { year, day } = await prompts([ + { + type: 'number', + name: 'year', + message: 'What year?', + initial: new Date().getFullYear(), + validate: (val) => + val > 2000 && val < 3000 ? true : 'Year needs to be between 2000-3000', + format: String + }, + { + type: 'number', + name: 'day', + message: 'What day?', + initial: new Date().getDate(), + validate: (val) => + val > 0 && val < 32 ? true : 'Day needs to be between 1-31', + format: (val) => String(val).padStart(2, '0') + } +]); + +const dir = join(year, day); + +if (existsSync(dir)) { + console.warn('Directory already exists!'); + process.exit(1); +} + +// Create new day folder +await mkdir(dir, { recursive: true }); + +// Parse template folder for files +const templateDir = 'template'; +const files = await readdir(templateDir); + +const yearRegex = /YYYY/g; +const dayRegex = /DD/g; + +// Copy files from template to day folder, replace placeholders in filename +await Promise.all( + files.map((f) => + copyFile( + join(templateDir, f), + join(dir, f.replaceAll(yearRegex, year).replaceAll(dayRegex, day)) + ) + ) +); + +// Replace placeholders in code +const resultYear = await replaceInFile({ + files: [join(dir, '*')], + from: yearRegex, + to: year +}); +const resultDay = await replaceInFile({ + files: [join(dir, '*')], + from: dayRegex, + to: day +}); + +const results = [...resultYear, ...resultDay]; + +if (results.filter((r) => r.hasChanged).length <= 0) { + console.error( + 'Something went wrong while replace placeholders! Did they change?' + ); + process.exit(1); +} + +console.log('Directory created! Have fun!'); diff --git a/package.json b/package.json index 10cbb7d..d343534 100644 --- a/package.json +++ b/package.json @@ -10,8 +10,11 @@ }, "devDependencies": { "@types/bun": "latest", + "@types/prompts": "^2.4.9", "prettier": "^3.4.0", - "prettier-plugin-organize-imports": "^4.1.0" + "prettier-plugin-organize-imports": "^4.1.0", + "prompts": "^2.4.2", + "replace-in-file": "^8.2.0" }, "peerDependencies": { "typescript": "^5.0.0" diff --git a/template/20xx-xx.run.xml b/template/YYYY-DD.run.xml similarity index 55% rename from template/20xx-xx.run.xml rename to template/YYYY-DD.run.xml index ceca224..2a5b708 100644 --- a/template/20xx-xx.run.xml +++ b/template/YYYY-DD.run.xml @@ -1,6 +1,6 @@ - -