64 lines
1.7 KiB
JavaScript
64 lines
1.7 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
const {
|
|
parseArgs,
|
|
} = require('../tools/erp_task_dispatcher');
|
|
const {
|
|
readTaskFile,
|
|
resolvePath,
|
|
} = require('./run_erp_task');
|
|
const { validateTaskEnvelope } = require('../tools/erp_task_contract');
|
|
|
|
function validateTaskFile(taskPath) {
|
|
const input = readTaskFile(taskPath);
|
|
const validation = validateTaskEnvelope(input);
|
|
const task = validation.task || {};
|
|
return {
|
|
valid: validation.valid,
|
|
status: validation.status,
|
|
operation: task.operation || (validation.envelope && validation.envelope.operation) || null,
|
|
route: task.route || (validation.envelope && validation.envelope.route) || null,
|
|
taskId: task.taskId || null,
|
|
violations: validation.violations || [],
|
|
};
|
|
}
|
|
|
|
function helpText() {
|
|
return [
|
|
'Usage:',
|
|
' node scripts/validate_erp_task.js --task task.json [--json]',
|
|
'',
|
|
'Validates the structured ERP task without invoking an ERP executor.',
|
|
].join('\n');
|
|
}
|
|
|
|
async function main(argv = process.argv.slice(2)) {
|
|
const args = parseArgs(argv);
|
|
if (args.help || !args.task) {
|
|
console.log(helpText());
|
|
process.exitCode = args.help ? 0 : 1;
|
|
return;
|
|
}
|
|
|
|
const result = validateTaskFile(resolvePath(args.task));
|
|
if (args.json) console.log(JSON.stringify(result, null, 2));
|
|
else if (result.valid) {
|
|
console.log('valid: ' + result.operation + (result.route ? ' (' + result.route + ')' : ''));
|
|
} else {
|
|
console.log('invalid: ' + (result.violations.join('; ') || result.status));
|
|
}
|
|
process.exitCode = result.valid ? 0 : 2;
|
|
}
|
|
|
|
if (require.main === module) {
|
|
main().catch((error) => {
|
|
console.error(error.stack || error.message);
|
|
process.exitCode = 1;
|
|
});
|
|
}
|
|
|
|
module.exports = {
|
|
validateTaskFile,
|
|
main,
|
|
};
|