Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
generateOptions () {
super.generateOptions()
this.options.name = common.sanitizeName(this.options.name, '-._+a-zA-Z0-9')
if (!this.options.description && !this.options.productDescription) {
throw new Error("No Description or ProductDescription provided. Please set either a description in the app's package.json or provide it in the options.")
}
if (this.options.description) {
// Do not end with a period
this.options.description = this.options.description.replace(/\.*$/, '')
}
// Wrap the extended description to avoid rpmlint warning about
// `description-line-too-long`.
this.options.productDescription = wrap(this.options.productDescription, { width: 80, indent: '' })
// Merges user and default dependencies
this.options.requires = common.mergeUserSpecified(this.userSupplied, 'requires', this.defaults)
if (!this.options.description && !this.options.productDescription) {
throw new Error("No Description or ProductDescription provided. Please set either a description in the app's package.json or provide it in the this.options.")
}
if (this.options.description) {
this.options.description = this.normalizeDescription(this.options.description)
}
if (this.options.productDescription) {
this.options.productDescription = this.normalizeExtendedDescription(this.options.productDescription)
}
// Create array with unique values from default & user-supplied dependencies
for (const prop of ['depends', 'recommends', 'suggests', 'enhances', 'preDepends']) {
this.options[prop] = common.mergeUserSpecified(this.userSupplied, prop, this.defaults)
}
return this.options
}
if (!this.options.description && !this.options.productDescription) {
throw new Error("No Description or ProductDescription provided. Please set either a description in the app's package.json or provide it in the options.")
}
if (this.options.description) {
// Do not end with a period
this.options.description = this.options.description.replace(/\.*$/, '')
}
// Wrap the extended description to avoid rpmlint warning about
// `description-line-too-long`.
this.options.productDescription = wrap(this.options.productDescription, { width: 80, indent: '' })
// Merges user and default dependencies
this.options.requires = common.mergeUserSpecified(this.userSupplied, 'requires', this.defaults)
this.normalizeVersion()
}
before(async () => {
const logs = await spawn('./src/cli.js', args, null, null)
printLogs(logs)
})
sanitizeName (name) {
if (name.length > 30) {
throw new Error(`The max length of the name is 30 characters, you have ${name.length}`)
}
const sanitized = common.sanitizeName(name.toLowerCase(), '-a-z0-9')
if (!/[a-z]/.test(sanitized)) {
throw new Error('The snap name needs to have at least one letter')
}
return sanitized
}
sanitizeName (name) {
const sanitized = common.sanitizeName(name.toLowerCase(), '-+.a-z0-9')
if (sanitized.length < 2) {
throw new Error('Package name must be at least two characters')
}
if (/^[^a-z0-9]/.test(sanitized)) {
throw new Error('Package name must start with an ASCII number or letter')
}
return sanitized
}
}
const glob = promisify(require('glob'))
const spawn = require('./spawn')
debug.log = console.info.bind(console)
const defaultLogger = debug('electron-installer-windows')
function defaultRename (dest, src) {
const ext = path.extname(src)
if (ext === '.exe' || ext === '.msi') {
src = `<%= name %>-<%= version %>-setup${ext}`
}
return path.join(dest, src)
}
class SquirrelInstaller extends common.ElectronInstaller {
get contentFunctions () {
return [
'copyApplication',
'createSpec'
]
}
get packagePattern () {
return path.join(this.squirrelDir, '*')
}
get specPath () {
return path.join(this.stagingDir, 'nuget', `${this.options.name}.nuspec`)
}
get squirrelDir () {
createPackage () {
this.options.logger(`Creating package at ${this.stagingDir}`)
const cmd = path.join(this.vendorDir, 'nuget', 'nuget.exe')
const args = [
'pack',
this.specPath,
'-BasePath',
this.stagingAppDir,
'-OutputDirectory',
path.join(this.stagingDir, 'nuget'),
'-NoDefaultExcludes'
]
return common.wrapError('creating package with NuGet', async () => spawn(cmd, args, this.options.logger))
}
async syncRemoteReleases () {
if (!this.options.remoteReleases) {
return
}
this.options.logger(`Syncing package at ${this.stagingDir}`)
const cmd = path.join(this.vendorDir, 'squirrel', 'SyncReleases.exe')
const args = [
'--url',
this.options.remoteReleases,
'--releaseDir',
this.squirrelDir
]
return common.wrapError('syncing remote releases', async () => {
await fs.ensureDir(this.squirrelDir, '0755')
return spawn(cmd, args, this.options.logger)
})
}
}
copySquirrelUpdater () {
const updateSrc = path.join(this.vendorDir, 'squirrel', 'Squirrel.exe')
const updateDest = path.join(this.stagingAppDir, 'Update.exe')
return common.wrapError('copying Squirrel updater', async () => fs.copy(updateSrc, updateDest))
}