@directus/extensions-sdk
Version:
A toolkit to develop extensions to extend Directus
44 lines (43 loc) • 1.5 kB
JavaScript
import chalk from 'chalk';
import ora from 'ora';
import { log } from '../utils/logger.js';
import validators from './validators/index.js';
const printReport = (reports) => {
reports
.sort((a, b) => a.message.localeCompare(b.message))
.forEach(({ level, message }) => {
log(message, level);
});
};
export default async function validate(options) {
const spinner = ora(chalk.bold('Validating Directus extension...')).start();
const reports = [];
try {
const filteredValidators = validators.filter((value) => {
if (options.check) {
return options.check.toLowerCase() === value.name.toLowerCase();
}
return true;
});
if (filteredValidators.length === 0) {
throw new Error(`No validator selected`);
}
const result = await Promise.allSettled(filteredValidators.map((value) => value.handler(spinner, reports)));
const rejectedChecks = result.filter((value) => value.status === 'rejected');
if (rejectedChecks.length > 0) {
spinner.fail(chalk.bold('Failed validation: '));
printReport(reports);
process.exit(1);
}
else {
spinner.succeed(chalk.bold('Extension is valid'));
}
}
catch (error) {
spinner.fail(chalk.bold('Failed validation: '));
log(String(error), 'error');
}
if (options.verbose ?? false) {
printReport(reports);
}
}