piral-cli
Version:
The standard CLI for creating and building a Piral instance or a Pilet.
56 lines (48 loc) • 1.8 kB
text/typescript
import { readdir } from 'fs';
import { log } from '../common';
import { RuleContext, PiralRuleContext, PiletRuleContext, Rule } from '../types';
const piralRules: Array<Rule<PiralRuleContext>> = [];
const piletRules: Array<Rule<PiletRuleContext>> = [];
function getRules<T extends RuleContext>(target: 'pilet' | 'piral') {
const prefix = `${target}-`;
return new Promise<Array<Rule<T>>>((resolve, reject) => {
readdir(__dirname, (err, files) => {
if (err) {
reject(err);
} else {
resolve(
files
.filter((name) => name.startsWith(prefix) && name.endsWith('.js'))
.map((fileName) => {
log('generalDebug_0003', `Including module "${fileName}" ...`);
const run = require(`./${fileName}`).default;
const name = fileName.substring(prefix.length).replace(/\.js$/, '');
log('generalDebug_0003', `Included rule with name: "${name}".`);
return {
run,
name,
};
}),
);
}
});
});
}
export function addPiralRule(rule: Rule<PiralRuleContext>) {
piralRules.push(rule);
}
export async function getPiralRules() {
log('generalDebug_0003', 'Getting Piral validation rules ...');
const rules = await getRules<PiralRuleContext>('piral');
log('generalDebug_0003', `Found ${rules.length} rules.`);
return [...rules, ...piralRules];
}
export function addPiletRule(rule: Rule<PiletRuleContext>) {
piletRules.push(rule);
}
export async function getPiletRules() {
log('generalDebug_0003', 'Getting pilet validation rules ...');
const rules = await getRules<PiletRuleContext>('pilet');
log('generalDebug_0003', `Found ${rules.length} rules.`);
return [...rules, ...piletRules];
}