vega-frontend-monorepo/scripts/get-queries.js

39 lines
1.0 KiB
JavaScript
Raw Normal View History

const { readFileSync, writeFileSync } = require('fs');
const glob = require('glob');
const recast = require('recast');
const tsParser = require('recast/parsers/typescript');
const util = require('util');
const queries = [];
const globPromise = util.promisify(glob);
const processFiles = (files) => {
for (const file of files) {
const textContent = readFileSync(file, { encoding: 'utf-8' });
const ast = recast.parse(textContent, { parser: tsParser });
recast.visit(ast, {
visitTaggedTemplateExpression(path) {
const newQuasi = { ...path.value.quasi, expressions: [] };
if (path.value.tag.name === 'gql') {
queries.push(`# File: ${file}
# Query:
${recast.print(newQuasi).code.replace(/`/g, '')}`);
}
return false;
},
});
}
writeFileSync('./queries.graphql', queries.join('\n'), {
encoding: 'utf-8',
});
};
const run = async () => {
const files1 = await globPromise('apps/**/*.ts');
const files2 = await globPromise('libs/**/*.ts');
processFiles([...files1, ...files2]);
};
run();