Dive into secure and efficient coding practices with our curated list of the top 10 examples showcasing 'electron-installer-common' in functional components in JavaScript. Our advanced machine learning engine meticulously scans each line of code, cross-referencing millions of open source libraries to ensure your implementation is not just functional, but also robust and secure. Elevate your React applications to new heights by mastering the art of handling side effects, API calls, and asynchronous operations with confidence and precision.
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))
}