47 lines
1.8 KiB
JavaScript
Executable file
47 lines
1.8 KiB
JavaScript
Executable file
const { Project, SyntaxKind } = require('ts-morph');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
console.log('Starting fast payload extraction...');
|
|
const project = new Project();
|
|
project.addSourceFileAtPath('C:/ScriptoriumAI/scriptoriumai-ui/src/__tests__/Runboard.telemetry-lockstep-parity.test.tsx');
|
|
const sourceFile = project.getSourceFileOrThrow('C:/ScriptoriumAI/scriptoriumai-ui/src/__tests__/Runboard.telemetry-lockstep-parity.test.tsx');
|
|
|
|
let count = 0;
|
|
let output = 'export const fixtures = {\n';
|
|
|
|
const calls = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression);
|
|
console.log('Found ' + calls.length + ' call expressions.');
|
|
|
|
calls.forEach((call) => {
|
|
const expr = call.getExpression();
|
|
if (expr.getText().includes('mockResolvedValueOnce')) {
|
|
const args = call.getArguments();
|
|
if (args.length > 0) {
|
|
const arg = args[0];
|
|
const argText = arg.getText();
|
|
if (argText.length > 500) {
|
|
count++;
|
|
const pName = 'fixture_' + count;
|
|
let cleanText = argText;
|
|
if (cleanText.endsWith(' as any')) {
|
|
cleanText = cleanText.substring(0, cleanText.length - 7);
|
|
}
|
|
output += '"' + pName + '": ' + cleanText + ',\n';
|
|
call.removeArgument(0);
|
|
call.insertArgument(0, 'fixtures.' + pName + ' as any');
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
if (count > 0) {
|
|
sourceFile.insertImportDeclaration(0, { namedImports: ['fixtures'], moduleSpecifier: './__fixtures__/runboard-telemetry.fixtures' });
|
|
const p = 'C:/ScriptoriumAI/scriptoriumai-ui/src/__tests__/__fixtures__/runboard-telemetry.fixtures.ts';
|
|
fs.mkdirSync(path.dirname(p), { recursive: true });
|
|
fs.writeFileSync(p, output + '};\n');
|
|
sourceFile.saveSync();
|
|
console.log('Extracted ' + count + ' payloads.');
|
|
} else {
|
|
console.log('No payloads extracted.');
|
|
}
|