now-flow
Version:
Add deployment workflows to Zeit now
110 lines (89 loc) • 2.74 kB
JavaScript
// Native
const { join: joinPath } = require('path')
// Packages
const loadJSON = require('load-json-file')
const writeJSON = require('write-json-file')
const { existsSync } = require('fs-extra')
// Utilities
const getNowDir = require('../config/global-path')
const getLocalPathConfig = require('../config/local-path')
const error = require('./output/error')
/*eslint-disable */
const getProcess = () => process
/*eslint-enable */
const NOW_DIR = getNowDir()
const CONFIG_FILE_PATH = joinPath(NOW_DIR, 'config.json')
const AUTH_CONFIG_FILE_PATH = joinPath(NOW_DIR, 'auth.json')
const LOCAL_CONFIG_FILE_PATH = getLocalPathConfig(getProcess().cwd())
const PACKAGE_JSON_PATH = joinPath(getProcess().cwd(), 'package.json')
// reads `CONFIG_FILE_PATH` atomically
const readConfigFile = () => loadJSON.sync(CONFIG_FILE_PATH)
// writes whatever's in `stuff` to `CONFIG_FILE_PATH`, atomically
const writeToConfigFile = stuff =>
writeJSON.sync(CONFIG_FILE_PATH, stuff, { indent : 2 })
// reads `AUTH_CONFIG_FILE_PATH` atomically
const readAuthConfigFile = () => loadJSON.sync(AUTH_CONFIG_FILE_PATH)
// writes whatever's in `stuff` to `AUTH_CONFIG_FILE_PATH`, atomically
const writeToAuthConfigFile = stuff =>
writeJSON.sync(AUTH_CONFIG_FILE_PATH, stuff, { indent : 2, mode : 0o600 })
function getConfigFilePath() {
return CONFIG_FILE_PATH
}
function getAuthConfigFilePath() {
return AUTH_CONFIG_FILE_PATH
}
function readLocalConfig() {
let localConfigExists
try {
localConfigExists = existsSync(LOCAL_CONFIG_FILE_PATH)
} catch (err) {
console.error(error('Failed to check if `now.json` exists'))
getProcess().exit(1)
}
if (localConfigExists) {
try {
return loadJSON.sync(LOCAL_CONFIG_FILE_PATH)
} catch (err) {
if (err.name === 'JSONError') {
console.log(error(err.message))
} else {
const code = err.code ? `(${err.code})` : ''
console.error(error(`Failed to read the \`now.json\` file ${code}`))
}
getProcess().exit(1)
}
}
let packageJsonExists
try {
packageJsonExists = existsSync(PACKAGE_JSON_PATH)
} catch (err) {
console.error(error('Failed to check if `package.json` exists'))
getProcess().exit(1)
}
if (packageJsonExists) {
try {
const { now } = loadJSON.sync(PACKAGE_JSON_PATH)
if (now) {
return now
}
} catch (err) {
if (err.name === 'JSONError') {
console.log(error(err.message))
} else {
const code = err.code ? `(${err.code})` : ''
console.error(error(`Failed to read the \`package.json\` file ${code}`))
}
getProcess().exit(1)
}
}
return null
}
module.exports = {
readConfigFile,
writeToConfigFile,
readAuthConfigFile,
writeToAuthConfigFile,
readLocalConfig,
getConfigFilePath,
getAuthConfigFilePath
}