78 lines
1.8 KiB
TypeScript
78 lines
1.8 KiB
TypeScript
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!');
|