/
after-pack-hook.js
76 lines (61 loc) · 2.72 KB
/
after-pack-hook.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/* eslint-disable no-console */
const fs = require('fs-extra')
const { join } = require('path')
const glob = require('glob')
const os = require('os')
const path = require('path')
const { setupV8Snapshots } = require('@tooling/v8-snapshot')
const { flipFuses, FuseVersion, FuseV1Options } = require('@electron/fuses')
const { buildEntryPointAndCleanup } = require('./binary/binary-cleanup')
const { getIntegrityCheckSource, getBinaryEntryPointSource } = require('./binary/binary-sources')
module.exports = async function (params) {
console.log('****************************')
console.log('After pack hook')
console.log(params.appOutDir)
console.log(params.outDir)
console.log(params.electronPlatformName)
console.log('****************************')
const packages = glob.sync('packages/*/node_modules', {
cwd: params.packager.info._appDir,
})
const buildSubfoldersPerPlatform = {
darwin: join('Cypress.app', 'Contents', 'Resources', 'app'),
linux: join('resources', 'app'),
win32: join('resources', 'app'), // TODO check this path
}
const buildSubfolder = buildSubfoldersPerPlatform[os.platform()]
const outputFolder = join(params.appOutDir, buildSubfolder)
console.log('copying node_modules to', outputFolder)
for await (const packageNodeModules of packages) {
console.log('copying', packageNodeModules)
const sourceFolder = join(params.packager.info._appDir, packageNodeModules)
const destinationFolder = join(outputFolder, packageNodeModules)
await fs.copy(sourceFolder, destinationFolder)
}
const distNodeModules = path.join(params.packager.info._appDir, 'node_modules')
const appNodeModules = path.join(outputFolder, 'node_modules')
console.log('copying ', distNodeModules, ' to', appNodeModules)
await fs.copy(distNodeModules, appNodeModules)
console.log('all node_modules subfolders copied to', outputFolder)
const exePathPerPlatform = {
darwin: join(params.appOutDir, 'Cypress.app', 'Contents', 'MacOS', 'Cypress'),
linux: join(params.appOutDir, 'Cypress'),
win32: join(params.appOutDir, 'Cypress.exe'),
}
if (!['1', 'true'].includes(process.env.DISABLE_SNAPSHOT_REQUIRE)) {
await fs.writeFile(path.join(outputFolder, 'index.js'), getBinaryEntryPointSource())
await flipFuses(
exePathPerPlatform[os.platform()],
{
version: FuseVersion.V1,
[FuseV1Options.LoadBrowserProcessSpecificV8Snapshot]: true,
},
)
// Build out the entry point and clean up prior to setting up v8 snapshots so that the state of the binary is correct
await buildEntryPointAndCleanup(outputFolder)
await setupV8Snapshots({
cypressAppPath: params.appOutDir,
integrityCheckSource: getIntegrityCheckSource(outputFolder),
})
}
}