Files
2026-07-13 19:57:46 +08:00

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,
};