summaryrefslogtreecommitdiff
path: root/node_modules/electron-packager/src/platform.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/electron-packager/src/platform.js')
-rw-r--r--node_modules/electron-packager/src/platform.js238
1 files changed, 0 insertions, 238 deletions
diff --git a/node_modules/electron-packager/src/platform.js b/node_modules/electron-packager/src/platform.js
deleted file mode 100644
index 9489e3d..0000000
--- a/node_modules/electron-packager/src/platform.js
+++ /dev/null
@@ -1,238 +0,0 @@
-'use strict'
-
-const asar = require('asar')
-const crypto = require('crypto')
-const debug = require('debug')('electron-packager')
-const fs = require('fs-extra')
-const path = require('path')
-
-const common = require('./common')
-const copyFilter = require('./copy-filter')
-const hooks = require('./hooks')
-
-class App {
- constructor (opts, templatePath) {
- this.opts = opts
- this.templatePath = templatePath
- this.asarOptions = common.createAsarOpts(opts)
-
- if (this.opts.prune === undefined) {
- this.opts.prune = true
- }
- }
-
- /**
- * Resource directory path before renaming.
- */
- get originalResourcesDir () {
- return this.resourcesDir
- }
-
- /**
- * Resource directory path after renaming.
- */
- get resourcesDir () {
- return path.join(this.stagingPath, 'resources')
- }
-
- get originalResourcesAppDir () {
- return path.join(this.originalResourcesDir, 'app')
- }
-
- get electronBinaryDir () {
- return this.stagingPath
- }
-
- get originalElectronName () {
- /* istanbul ignore next */
- throw new Error('Child classes must implement this')
- }
-
- get newElectronName () {
- /* istanbul ignore next */
- throw new Error('Child classes must implement this')
- }
-
- get executableName () {
- return this.opts.executableName || this.opts.name
- }
-
- get stagingPath () {
- if (this.opts.tmpdir === false) {
- return common.generateFinalPath(this.opts)
- } else {
- return path.join(
- common.baseTempDir(this.opts),
- `${this.opts.platform}-${this.opts.arch}`,
- common.generateFinalBasename(this.opts)
- )
- }
- }
-
- get appAsarPath () {
- return path.join(this.originalResourcesDir, 'app.asar')
- }
-
- async relativeRename (basePath, oldName, newName) {
- debug(`Renaming ${oldName} to ${newName} in ${basePath}`)
- await fs.rename(path.join(basePath, oldName), path.join(basePath, newName))
- }
-
- async renameElectron () {
- return this.relativeRename(this.electronBinaryDir, this.originalElectronName, this.newElectronName)
- }
-
- /**
- * Performs the following initial operations for an app:
- * * Creates temporary directory
- * * Remove default_app (which is either a folder or an asar file)
- * * If a prebuilt asar is specified:
- * * Copies asar into temporary directory as app.asar
- * * Otherwise:
- * * Copies template into temporary directory
- * * Copies user's app into temporary directory
- * * Prunes non-production node_modules (if opts.prune is either truthy or undefined)
- * * Creates an asar (if opts.asar is set)
- *
- * Prune and asar are performed before platform-specific logic, primarily so that
- * this.originalResourcesAppDir is predictable (e.g. before .app is renamed for Mac)
- */
- async initialize () {
- debug(`Initializing app in ${this.stagingPath} from ${this.templatePath} template`)
-
- await fs.move(this.templatePath, this.stagingPath, { clobber: true })
- await this.removeDefaultApp()
- if (this.opts.prebuiltAsar) {
- await this.copyPrebuiltAsar()
- } else {
- await this.buildApp()
- }
- }
-
- async buildApp () {
- await this.copyTemplate()
- await common.validateElectronApp(this.opts.dir, this.originalResourcesAppDir)
- await this.asarApp()
- }
-
- async copyTemplate () {
- const hookArgs = [
- this.originalResourcesAppDir,
- this.opts.electronVersion,
- this.opts.platform,
- this.opts.arch
- ]
-
- await fs.copy(this.opts.dir, this.originalResourcesAppDir, {
- filter: copyFilter.userPathFilter(this.opts),
- dereference: this.opts.derefSymlinks
- })
- await hooks.promisifyHooks(this.opts.afterCopy, hookArgs)
- if (this.opts.prune) {
- await hooks.promisifyHooks(this.opts.afterPrune, hookArgs)
- }
- }
-
- async removeDefaultApp () {
- await Promise.all(['default_app', 'default_app.asar'].map(async basename => fs.remove(path.join(this.originalResourcesDir, basename))))
- }
-
- /**
- * Forces an icon filename to a given extension and returns the normalized filename,
- * if it exists. Otherwise, returns null.
- *
- * This error path is used by win32 if no icon is specified.
- */
- async normalizeIconExtension (targetExt) {
- if (!this.opts.icon) throw new Error('No filename specified to normalizeIconExtension')
-
- let iconFilename = this.opts.icon
- const ext = path.extname(iconFilename)
- if (ext !== targetExt) {
- iconFilename = path.join(path.dirname(iconFilename), path.basename(iconFilename, ext) + targetExt)
- }
-
- if (await fs.pathExists(iconFilename)) {
- return iconFilename
- } else {
- /* istanbul ignore next */
- common.warning(`Could not find icon "${iconFilename}", not updating app icon`)
- }
- }
-
- prebuiltAsarWarning (option, triggerWarning) {
- if (triggerWarning) {
- common.warning(`prebuiltAsar and ${option} are incompatible, ignoring the ${option} option`)
- }
- }
-
- async copyPrebuiltAsar () {
- if (this.asarOptions) {
- common.warning('prebuiltAsar has been specified, all asar options will be ignored')
- }
-
- for (const hookName of ['afterCopy', 'afterPrune']) {
- if (this.opts[hookName]) {
- throw new Error(`${hookName} is incompatible with prebuiltAsar`)
- }
- }
-
- this.prebuiltAsarWarning('ignore', this.opts.originalIgnore)
- this.prebuiltAsarWarning('prune', !this.opts.prune)
- this.prebuiltAsarWarning('derefSymlinks', this.opts.derefSymlinks !== undefined)
-
- const src = path.resolve(this.opts.prebuiltAsar)
-
- const stat = await fs.stat(src)
- if (!stat.isFile()) {
- throw new Error(`${src} specified in prebuiltAsar must be an asar file.`)
- }
-
- debug(`Copying asar: ${src} to ${this.appAsarPath}`)
- await fs.copy(src, this.appAsarPath, { overwrite: false, errorOnExist: true })
- }
-
- appRelativePath (p) {
- return path.relative(this.stagingPath, p)
- }
-
- async asarApp () {
- if (!this.asarOptions) {
- return Promise.resolve()
- }
-
- debug(`Running asar with the options ${JSON.stringify(this.asarOptions)}`)
- await asar.createPackageWithOptions(this.originalResourcesAppDir, this.appAsarPath, this.asarOptions)
- const { headerString } = asar.getRawHeader(this.appAsarPath)
- this.asarIntegrity = {
- [this.appRelativePath(this.appAsarPath)]: {
- algorithm: 'SHA256',
- hash: crypto.createHash('SHA256').update(headerString).digest('hex')
- }
- }
- await fs.remove(this.originalResourcesAppDir)
- }
-
- async copyExtraResources () {
- if (!this.opts.extraResource) return Promise.resolve()
-
- const extraResources = common.ensureArray(this.opts.extraResource)
-
- await Promise.all(extraResources.map(
- resource => fs.copy(resource, path.resolve(this.stagingPath, this.resourcesDir, path.basename(resource)))
- ))
- }
-
- async move () {
- const finalPath = common.generateFinalPath(this.opts)
-
- if (this.opts.tmpdir !== false) {
- debug(`Moving ${this.stagingPath} to ${finalPath}`)
- await fs.move(this.stagingPath, finalPath)
- }
-
- return finalPath
- }
-}
-
-module.exports = App