123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- const cp = require('child_process')
- const fs = require('fs-extra')
- const os = require('os')
- const path = require('path')
- const rootPath = path.resolve(__dirname, '..')
- const gniPath = path.resolve(__dirname, '../filenames.auto.gni')
- const allDocs = fs.readdirSync(path.resolve(__dirname, '../docs/api'))
- .map(doc => `docs/api/${doc}`)
- .concat(
- fs.readdirSync(path.resolve(__dirname, '../docs/api/structures'))
- .map(doc => `docs/api/structures/${doc}`)
- )
- const main = async () => {
- const browserifyTargets = [
- {
- name: 'sandbox_browserify_deps',
- entry: 'lib/sandboxed_renderer/init.js'
- },
- {
- name: 'isolated_browserify_deps',
- entry: 'lib/isolated_renderer/init.js'
- },
- {
- name: 'context_script_browserify_deps',
- entry: 'lib/content_script/init.js'
- }
- ]
- await Promise.all(browserifyTargets.map(async browserifyTarget => {
- const tmpDir = await fs.mkdtemp(path.resolve(os.tmpdir(), 'electron-filenames-'))
- const child = cp.spawn('node', [
- 'node_modules/browserify/bin/cmd.js',
- browserifyTarget.entry,
- ...(browserifyTarget.name === 'sandbox_browserify_deps' ? [
- '-r',
- './lib/sandboxed_renderer/api/exports/electron.js:electron'
- ] : []),
- '-t',
- 'aliasify',
- '-p',
- '[',
- 'tsify',
- '-p',
- 'tsconfig.electron.json',
- ']',
- '-o',
- path.resolve(tmpDir, 'out.js'),
- '--list'
- ], {
- cwd: path.resolve(__dirname, '..')
- })
- let output = ''
- child.stdout.on('data', chunk => {
- output += chunk.toString()
- })
- await new Promise((resolve, reject) => child.on('exit', (code) => {
- if (code !== 0) return reject(new Error(`Failed to list browserify dependencies for entry: ${browserifyTarget.name}`))
- resolve()
- }))
- browserifyTarget.dependencies = output
- .split('\n')
- // Remove whitespace
- .map(line => line.trim())
- // Ignore empty lines
- .filter(line => line)
- // Get the relative path
- .map(line => path.relative(rootPath, line))
- // Only care about files in //electron
- .filter(line => !line.startsWith('..'))
- // Only care about our own files
- .filter(line => !line.startsWith('node_modules'))
- // Make the generated list easier to read
- .sort()
- // All browserify commands depend on the tsconfig and package json files
- .concat(['tsconfig.json', 'tsconfig.electron.json', 'package.json'])
- await fs.remove(tmpDir)
- }))
- fs.writeFileSync(
- gniPath,
- `# THIS FILE IS AUTO-GENERATED, PLEASE DO NOT EDIT BY HAND
- auto_filenames = {
- api_docs = [
- ${allDocs.map(doc => ` "${doc}",`).join('\n')}
- ]
- ${browserifyTargets.map(target => ` ${target.name} = [
- ${target.dependencies.map(dep => ` "${dep}",`).join('\n')}
- ]`).join('\n\n')}
- }
- `)
- }
- if (process.mainModule === module) {
- main().catch((err) => {
- console.error(err)
- process.exit(1)
- })
- }
|