You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
2.2 KiB
111 lines
2.2 KiB
// Native
|
|
import path from 'path'
|
|
import {spawn} from 'child_process'
|
|
|
|
// Packages
|
|
import fs from 'fs-extra'
|
|
import {walk} from 'walk'
|
|
|
|
export function injectPackage(tmpDir, defaults, flags) {
|
|
const pkgPath = path.join(tmpDir, 'package.json')
|
|
|
|
fs.writeJSON(pkgPath, defaults, err => {
|
|
if (err) {
|
|
throw err
|
|
}
|
|
|
|
exports.deploy(tmpDir, flags)
|
|
})
|
|
}
|
|
|
|
export function deploy(dir, flags) {
|
|
const oldCwd = process.cwd()
|
|
const cmd = process.platform === 'win32' ? 'now.cmd' : 'now'
|
|
|
|
process.chdir(dir)
|
|
const flagsAllowed = typeof flags === 'string'
|
|
const flagList = []
|
|
|
|
if (flagsAllowed) {
|
|
let splitted = flags.split(', ')
|
|
|
|
for (const item of splitted) {
|
|
if (item.indexOf(',') > -1) {
|
|
splitted = flags.split(',')
|
|
break
|
|
}
|
|
}
|
|
|
|
for (const item of splitted) {
|
|
flagList.push(item)
|
|
}
|
|
}
|
|
|
|
for (const flag of flagList) {
|
|
const index = flagList.indexOf(flag)
|
|
const prefix = flag.length > 1 ? '--' : '-'
|
|
|
|
if (flag === '') {
|
|
flagList.splice(index, 1)
|
|
} else {
|
|
flagList[index] = prefix + flag
|
|
}
|
|
}
|
|
|
|
// Run now and deploy
|
|
const now = spawn(cmd, flagList, {
|
|
stdio: 'inherit'
|
|
})
|
|
|
|
now.on('error', err => console.error(err))
|
|
|
|
now.on('exit', () => {
|
|
process.chdir(oldCwd)
|
|
exports.cleanup(dir)
|
|
})
|
|
|
|
process.on('SIGINT', () => {
|
|
now.kill('SIGINT')
|
|
exports.cleanup(dir)
|
|
})
|
|
}
|
|
|
|
export function cleanup(dir) {
|
|
fs.remove(dir, err => {
|
|
if (err) {
|
|
throw err
|
|
}
|
|
|
|
process.exit()
|
|
})
|
|
}
|
|
|
|
export function copyContents(content, tmp, defaults, flags) {
|
|
// Ignore packages
|
|
const walker = walk(content, {
|
|
filters: [
|
|
'node_modules'
|
|
]
|
|
})
|
|
|
|
walker.on('file', (root, fileStats, next) => {
|
|
const file = path.join(root, fileStats.name)
|
|
const target = path.join(tmp + '/content', path.relative(content, file))
|
|
|
|
// Once a file is found, copy it to the temp directory
|
|
fs.copy(file, target, err => {
|
|
if (err) {
|
|
throw err
|
|
}
|
|
|
|
next()
|
|
})
|
|
})
|
|
|
|
walker.on('errors', (root, nodeStatsArray, next) => {
|
|
console.error(`Not able to copy file: ${nodeStatsArray}`)
|
|
next()
|
|
})
|
|
|
|
walker.on('end', () => exports.injectPackage(tmp, defaults, flags))
|
|
}
|
|
|