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