59 lines
2.2 KiB
JavaScript
59 lines
2.2 KiB
JavaScript
import { readFile, readdir, access } from 'node:fs/promises';
|
|
import { URL } from 'node:url';
|
|
|
|
const colors = {
|
|
red: (text) => `\x1B[31m${text}\x1B[39m`,
|
|
green: (text) => `\x1B[32m${text}\x1B[39m`,
|
|
grey: (text) => `\x1B[90m${text}\x1B[39m`,
|
|
yellow: (text) => `\x1B[33m${text}\x1B[39m`,
|
|
};
|
|
|
|
const templatesDirectory = new URL('../templates/', import.meta.url);
|
|
const templateNames = await readdir(templatesDirectory);
|
|
/** @type {{ templates: Array<{ name: string; description: string; files: string[] }>; }} */
|
|
const manifest = JSON.parse(await readFile(new URL('../manifest.json', import.meta.url), 'utf8'));
|
|
|
|
console.log(`Validating ${colors.green(manifest.templates.length)} templates`);
|
|
|
|
let hasError = false;
|
|
|
|
for (const manifestTemplate of manifest.templates) {
|
|
// Check if the folder it points to actually exists
|
|
if (!templateNames.includes(manifestTemplate.name)) {
|
|
console.error(colors.red(`Failed to find folder for template called ${colors.yellow(manifestTemplate.name)}`));
|
|
hasError = true;
|
|
// Skipping the rest of the validation as the template is missing
|
|
continue;
|
|
}
|
|
|
|
console.log(colors.grey(`Validating template ${colors.yellow(manifestTemplate.name)}`));
|
|
|
|
// Check that all files it requires exist
|
|
for (const requiredFile of manifestTemplate.files) {
|
|
try {
|
|
await access(new URL(`./${manifestTemplate.name}/${requiredFile}`, templatesDirectory));
|
|
} catch (err) {
|
|
if (err.code === 'ENOENT') {
|
|
hasError = true;
|
|
console.error(
|
|
`${colors.grey(`[${colors.yellow(manifestTemplate.name)}]:`)} Failed to find file ${colors.yellow(
|
|
requiredFile,
|
|
)}`,
|
|
);
|
|
console.error(err);
|
|
} else {
|
|
console.warn(
|
|
`${colors.grey(`[${colors.yellow(manifestTemplate.name)}]:`)} Failed to read file ${colors.yellow(
|
|
requiredFile,
|
|
)}`,
|
|
err,
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
console.log(colors.green(`Finished validating ${colors.yellow(manifestTemplate.name)}`));
|
|
}
|
|
|
|
process.exitCode = hasError ? 1 : 0;
|