const {readdirSync, writeFileSync} = require('fs');
const {join, basename} = require('path');

const EXCLUDE_FILES = ['puppeteer-core.ts'];

let typesTs = '// AUTOGENERATED - Use `utils/export_all.js` to regenerate.\n';

typesTs += `\n`;
for (const file of readdirSync(join(__dirname, `../src`)).filter(filename => {
  return (
    filename.endsWith('ts') &&
    !filename.startsWith('types') &&
    !EXCLUDE_FILES.includes(filename)
  );
})) {
  typesTs += `export * from './${basename(file, '.ts')}.js';\n`;
}

for (const folder of ['common', 'node', 'generated']) {
  typesTs += `\n// Exports from \`${folder}\`\n`;
  for (const file of readdirSync(join(__dirname, `../src/${folder}`)).filter(
    filename => {
      return filename.endsWith('ts') && !EXCLUDE_FILES.includes(filename);
    }
  )) {
    typesTs += `export * from './${folder}/${basename(file, '.ts')}.js';\n`;
  }
}

writeFileSync(join(__dirname, '../src/types.ts'), typesTs);