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.
120 lines
2.8 KiB
120 lines
2.8 KiB
import { execSync } from 'child_process' |
|
import fs from 'fs' |
|
import { parse, stringify } from 'envfile' |
|
|
|
export const AO_ENV_FILE_PATH = process.env.HOME + '/.ao/.env' |
|
|
|
function createAoFolderIfDoesNotExist() { |
|
|
|
} |
|
|
|
// Check for an AO env file at ~/.ao/.env and returns true if it exists |
|
export function checkAoEnvFile() { |
|
try { |
|
execSync(`[ -f "${AO_ENV_FILE_PATH}" ]`) |
|
return true |
|
} catch(err) { |
|
return false |
|
} |
|
} |
|
|
|
export function aoEnv(variable) { |
|
let envFileContents = {} |
|
try { |
|
envFileContents = fs.readFileSync(AO_ENV_FILE_PATH) |
|
} catch(err) { |
|
if(err.code === 'ENOENT') { |
|
console.log('The .env file does not exist, so the requested value', variable, 'is empty.') |
|
} else { |
|
console.log('Unknown error loading .env file in aoEnv, aborting.') |
|
return null |
|
} |
|
} |
|
const parsedFile = parse(envFileContents) |
|
|
|
if(!parsedFile.hasOwnProperty(variable)) { |
|
return null |
|
} |
|
|
|
// Convert ENV idiom to programmatic types |
|
switch(parsedFile[variable]) { |
|
case '1': |
|
case 'true': |
|
case 'TRUE': |
|
case 'yes': |
|
case 'YES': |
|
return true |
|
case '0': |
|
case 'false': |
|
case 'FALSE': |
|
case 'no': |
|
case 'NO': |
|
return false |
|
} |
|
|
|
return parsedFile[variable] |
|
} |
|
|
|
// Sets and saves the given ENV=value to the global ~/.ao/.env file |
|
// If value is null, the env variable will be deleted |
|
// Returns true if a change was made, false if no change was made or if it failed |
|
export function setAoEnv(variable, value) { |
|
createAoFolderIfDoesNotExist() |
|
if(typeof variable !== 'string') { |
|
console.log('ENV variable name must be a string for setAoEnv') |
|
return false |
|
} |
|
|
|
// Convert types to standard ENV file idiom |
|
switch(value) { |
|
case true: |
|
case 'TRUE': |
|
case 'yes': |
|
case 'YES': |
|
value = '1' |
|
break |
|
case false: |
|
case 'FALSE': |
|
case 'no': |
|
case 'NO': |
|
value = '0' |
|
} |
|
|
|
let envFileContents = {} |
|
try { |
|
envFileContents = fs.readFileSync(AO_ENV_FILE_PATH) |
|
} catch(err) { |
|
if(err.code === 'ENOENT') { |
|
console.log('The .env file hasn\'t been created yet, creating.') |
|
} else { |
|
console.log('Unknown error loading .env file in setAoEnv, aborting. Error:', err) |
|
return false |
|
} |
|
} |
|
|
|
const parsedFile = parse(envFileContents) |
|
if(parsedFile[variable] == value) { |
|
console.log(variable, 'is already', value, 'so no change was made.') |
|
return false |
|
} |
|
|
|
if(value === null) { |
|
delete parsedFile[variable] |
|
} else { |
|
parsedFile[variable] = value |
|
} |
|
|
|
const stringified = stringify(parsedFile) |
|
fs.writeFileSync(AO_ENV_FILE_PATH, stringified) |
|
|
|
// Confirm the variable was set in the .env file correctly |
|
if(aoEnv(variable) != value) { |
|
console.log('Value was not saved correctly, sorry.') |
|
return false |
|
} |
|
return true |
|
} |
|
|
|
function setAndSaveEnvironmentVariable(variable, value, path) { |
|
|
|
}
|
|
|