deicidus
2 years ago
4 changed files with 1267 additions and 7 deletions
@ -0,0 +1,120 @@
|
||||
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) { |
||||
|
||||
} |
Loading…
Reference in new issue