TelegramPWA/src/lib/gramjs/tl/generateModules.js
2022-01-05 17:45:31 +01:00

65 lines
1.7 KiB
JavaScript

const fs = require('fs');
const path = require('path');
require('./types-generator/generate');
function generateSchema(input, output, reducedMethods) {
let apiTl = fs.readFileSync(
path.resolve(__dirname, input),
'utf-8',
);
if (reducedMethods) {
apiTl = stripTl(apiTl);
const methodList = JSON.parse(fs.readFileSync(
path.resolve(__dirname, reducedMethods),
'utf-8',
));
let isFunction = false;
const reducedApiTl = [];
for (const line of apiTl.split('\n')) {
if (!line) {
continue;
}
const match = line.match(/---(\w+)---/);
if (match) {
const [, followingTypes] = match;
isFunction = followingTypes === 'functions';
reducedApiTl.push(line);
continue;
}
if (!isFunction) {
reducedApiTl.push(line);
} else if (methodList.includes(line.match(/([\w.]+)#/)[1])) {
reducedApiTl.push(line);
}
}
apiTl = reducedApiTl.join('\n');
}
fs.writeFileSync(
path.resolve(__dirname, output),
`module.exports = \`${stripTl(apiTl)}\`;`,
);
}
function main() {
const args = process.argv.slice(2);
const FULL_SCHEMA = args.length && args[0] === 'full';
generateSchema('./static/api.tl', './apiTl.js', !FULL_SCHEMA && './static/api.json');
generateSchema('./static/schema.tl', './schemaTl.js', !FULL_SCHEMA && './static/schema.json');
}
function stripTl(tl) {
return tl.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g, '')
.replace(/\n\s*\n/g, '\n')
.replace(/`/g, '\\`');
}
main();