gen-filenames.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. const cp = require('child_process')
  2. const fs = require('fs-extra')
  3. const os = require('os')
  4. const path = require('path')
  5. const rootPath = path.resolve(__dirname, '..')
  6. const gniPath = path.resolve(__dirname, '../filenames.auto.gni')
  7. const allDocs = fs.readdirSync(path.resolve(__dirname, '../docs/api'))
  8. .map(doc => `docs/api/${doc}`)
  9. .concat(
  10. fs.readdirSync(path.resolve(__dirname, '../docs/api/structures'))
  11. .map(doc => `docs/api/structures/${doc}`)
  12. )
  13. const main = async () => {
  14. const browserifyTargets = [
  15. {
  16. name: 'sandbox_browserify_deps',
  17. entry: 'lib/sandboxed_renderer/init.js'
  18. },
  19. {
  20. name: 'isolated_browserify_deps',
  21. entry: 'lib/isolated_renderer/init.js'
  22. },
  23. {
  24. name: 'context_script_browserify_deps',
  25. entry: 'lib/content_script/init.js'
  26. }
  27. ]
  28. await Promise.all(browserifyTargets.map(async browserifyTarget => {
  29. const tmpDir = await fs.mkdtemp(path.resolve(os.tmpdir(), 'electron-filenames-'))
  30. const child = cp.spawn('node', [
  31. 'node_modules/browserify/bin/cmd.js',
  32. browserifyTarget.entry,
  33. ...(browserifyTarget.name === 'sandbox_browserify_deps' ? [
  34. '-r',
  35. './lib/sandboxed_renderer/api/exports/electron.js:electron'
  36. ] : []),
  37. '-t',
  38. 'aliasify',
  39. '-p',
  40. '[',
  41. 'tsify',
  42. '-p',
  43. 'tsconfig.electron.json',
  44. ']',
  45. '-o',
  46. path.resolve(tmpDir, 'out.js'),
  47. '--list'
  48. ], {
  49. cwd: path.resolve(__dirname, '..')
  50. })
  51. let output = ''
  52. child.stdout.on('data', chunk => {
  53. output += chunk.toString()
  54. })
  55. await new Promise((resolve, reject) => child.on('exit', (code) => {
  56. if (code !== 0) return reject(new Error(`Failed to list browserify dependencies for entry: ${browserifyTarget.name}`))
  57. resolve()
  58. }))
  59. browserifyTarget.dependencies = output
  60. .split('\n')
  61. // Remove whitespace
  62. .map(line => line.trim())
  63. // Ignore empty lines
  64. .filter(line => line)
  65. // Get the relative path
  66. .map(line => path.relative(rootPath, line))
  67. // Only care about files in //electron
  68. .filter(line => !line.startsWith('..'))
  69. // Only care about our own files
  70. .filter(line => !line.startsWith('node_modules'))
  71. // Make the generated list easier to read
  72. .sort()
  73. // All browserify commands depend on the tsconfig and package json files
  74. .concat(['tsconfig.json', 'tsconfig.electron.json', 'package.json'])
  75. await fs.remove(tmpDir)
  76. }))
  77. fs.writeFileSync(
  78. gniPath,
  79. `# THIS FILE IS AUTO-GENERATED, PLEASE DO NOT EDIT BY HAND
  80. auto_filenames = {
  81. api_docs = [
  82. ${allDocs.map(doc => ` "${doc}",`).join('\n')}
  83. ]
  84. ${browserifyTargets.map(target => ` ${target.name} = [
  85. ${target.dependencies.map(dep => ` "${dep}",`).join('\n')}
  86. ]`).join('\n\n')}
  87. }
  88. `)
  89. }
  90. if (process.mainModule === module) {
  91. main().catch((err) => {
  92. console.error(err)
  93. process.exit(1)
  94. })
  95. }