Untitled
unknown
plain_text
a year ago
1.4 kB
21
Indexable
const fs = require('fs');
const { parse } = require('qmlweb-parser');
const acorn = require('acorn');
// Read the QML file
const qmlContent = fs.readFileSync('./YouZanApi.qml', 'utf8');
// Parse the QML content
const qmlAst = parse(qmlContent);
// Function to recursively search for JavaScript blocks in the QML AST
function findJavaScriptBlocks(node) {
let jsBlocks = [];
if (node.type === 'JavaScriptBlock') {
jsBlocks.push(node.value);
}
if (node.children) {
node.children.forEach(child => {
jsBlocks = jsBlocks.concat(findJavaScriptBlocks(child));
});
}
return jsBlocks;
}
// Find all JavaScript blocks in the QML AST
const jsBlocks = findJavaScriptBlocks(qmlAst);
// Parse each JavaScript block with acorn
const parsedJSBlocks = jsBlocks.map(jsCode => {
try {
return acorn.parse(jsCode, { sourceType: 'module' });
} catch (error) {
console.error('Error parsing JavaScript block:', error);
return null;
}
});
// Combine the QML AST and parsed JavaScript blocks into one object
const combinedAst = {
qml: qmlAst,
javascript: parsedJSBlocks
};
// Write the combined AST to a JSON file
fs.writeFileSync('./combined-ast.json', JSON.stringify(combinedAst, null, 2), 'utf8');
console.log('Combined AST has been written to combined-ast.json');
Editor is loading...
Leave a Comment