const fs = require('fs'); const path = require('path'); const acorn = require('acorn'); const declarations = {}; fs.readdirSync(__dirname).forEach(file => { if (!/^[a-z]+\.js$/.test(file)) return; const source = fs.readFileSync(path.join(__dirname, file), 'utf-8'); const ast = acorn.parse(source, { ecmaVersion: 6, sourceType: 'module' }); ast.body.forEach(node => { if (node.type !== 'ExportNamedDeclaration') return; // check no ES6+ slipped in acorn.parse(source.slice(node.declaration.start, node.end), { ecmaVersion: 5 }); const declaration = node.declaration; if (!declaration) return; const name = declaration.type === 'VariableDeclaration' ? declaration.declarations[0].id.name : declaration.id.name; const value = declaration.type === 'VariableDeclaration' ? declaration.declarations[0].init : declaration; declarations[name] = source.slice(value.start, value.end); }); }); fs.writeFileSync( 'src/generators/dom/shared.ts', `// this file is auto-generated, do not edit it const shared: Record = ${JSON.stringify(declarations, null, '\t')}; export default shared;` );