This code defines an environment configuration using Mustache templating, allowing for dynamic generation of settings based on environment variables.
npm run import -- "get environment"
var process = require('process');
var path = require('path');
var Mustache = require('mustache');
var ENVIRONMENT = (key) => Object.assign({}, {
'DEFAULT': {
'PROFILE_PATH': '{{#HOME}}{{{.}}}{{/HOME}}{{^HOME}}{{#HOMEPATH}}{{{.}}}{{/HOMEPATH}}{{^HOMEPATH}}{{{USERPROFILE}}}{{/HOMEPATH}}{{/HOME}}',
'DOWNLOAD_PATH': '{{{PROFILE_PATH}}}/Downloads'
},
'BRIAN_RESUME': {
'CONTACT_DOCID': '1F07qFwP2LO14dJkExjaMHDfuNcB8HfuBQJWiVlmzrAQ',
'CONTACT_REDIRECT': 'https://briancullinan.com'
},
'ILLUMINATI': {
'CONTACT_DOCID': '16b1Z0sQkYhtMUfP7qMRL3vRBPWQsRbSlntURkMqWGX0',
'CONTACT_REDIRECT': 'https://www.shopilluminati.com/contact'
},
'GOOGLE_RPC': {
'HOME': '',
'HOMEPATH': '',
'USERPROFILE': '',
'PROFILE_PATH': ''
},
'TEST_SPREADSHEET': {
'PROJECT_OUTPUT': './.output/'
},
'DEPLOY': {
'GOOGLE_STORAGE_CREDENTIALS': '{{{PROFILE_PATH}}}/.credentials/spahaha-ea443-a78ab2269985.json',
'GOOGLE_STORAGE_PROJECT': 'spahaha-ea443',
},
'STUDY_REMOTE': {
'DOCID': '1EGwxT6InTXuvpLujnwKV3asEFDZhhZk2LdosjW2Tz_M',
'SECRETS_PATH': './client_secret.json',
'FUNCTIONS_URL': 'https://us-central1-sheet-to-web.cloudfunctions.net/studyRPC',
'AUTH_REDIRECT': '{{{FUNCTIONS_URL}}}?function=receiveCode',
'DOMAIN': 'https://studysauce.sheet-to-web.com',
'BUCKET': 'studysauce.sheet-to-web.com',
'GOOGLE_STORAGE_CREDENTIALS': './spahaha-ea443-a78ab2269985.json',
'GOOGLE_STORAGE_PROJECT': 'spahaha-ea443'
},
'STUDY_LOCAL': {
'DOCID': '1EGwxT6InTXuvpLujnwKV3asEFDZhhZk2LdosjW2Tz_M',
'SECRETS_PATH': '{{PROFILE_PATH}}./client_secret.json',
'FUNCTIONS_URL': 'http://localhost:8010/sheet-to-web/us-central1/studyRPC',
'AUTH_REDIRECT': '{{{FUNCTIONS_URL}}}?function=receiveCode',
'DOMAIN': 'http://localhost:8080',
'BUCKET': 'studysauce.sheet-to-web.com',
'GOOGLE_STORAGE_CREDENTIALS': '{{{PROFILE_PATH}}}/.credentials/spahaha-ea443-a78ab2269985.json',
'GOOGLE_STORAGE_PROJECT': 'spahaha-ea443',
'PROJECT_OUTPUT': './.output/'
}
}[key] || {});
var assign = (key) => {
var envs = Object.assign.apply(null, [
{
'ENVIRONMENT': key || ''
},
ENVIRONMENT('DEFAULT'),
ENVIRONMENT(key) || {}
])
var env = Object.keys(envs).reduce((env, e) => {
var properties = Object.assign({}, process.env, env);
//Mustache.parse(envs[e]);
env[e.toUpperCase()] = Mustache.render(envs[e], properties, properties);
return env;
}, {})
return Object.assign(process.env, env);
}
function getEnvironment(environment) {
assign();
if(process.env.ENVIRONMENT) {
assign(process.env.ENVIRONMENT);
}
if(environment) {
assign(environment);
}
}
getEnvironment();
module.exports = getEnvironment;
// Import required modules
const process = require('process');
const path = require('path');
const Mustache = require('mustache');
// Define environment variables template
class EnvironmentTemplate {
constructor(key) {
this.templates = {
DEFAULT: {
PROFILE_PATH: '{{#HOME}}{{{.}}}{{/HOME}}{{^HOME}}{{#HOMEPATH}}{{{.}}}{{/HOMEPATH}}{{^HOMEPATH}}{{{USERPROFILE}}}{{/HOMEPATH}}{{/HOME}}',
DOWNLOAD_PATH: '{{{PROFILE_PATH}}}/Downloads',
...this.getSystemVariables()
},
BRIAN_RESUME: {
CONTACT_DOCID: '1F07qFwP2LO14dJkExjaMHDfuNcB8HfuBQJWiVlmzrAQ',
CONTACT_REDIRECT: 'https://briancullinan.com'
},
ILLUMINATI: {
CONTACT_DOCID: '16b1Z0sQkYhtMUfP7qMRL3vRBPWQsRbSlntURkMqWGX0',
CONTACT_REDIRECT: 'https://www.shopilluminati.com/contact'
},
GOOGLE_RPC: {
HOME: '',
HOMEPATH: '',
USERPROFILE: '',
PROFILE_PATH: ''
},
TEST_SPREADSHEET: {
PROJECT_OUTPUT: './.output/'
},
DEPLOY: {
GOOGLE_STORAGE_CREDENTIALS: '{{{PROFILE_PATH}}}/.credentials/spahaha-ea443-a78ab2269985.json',
GOOGLE_STORAGE_PROJECT:'spahaha-ea443',
},
STUDY_REMOTE: {
DOCID: '1EGwxT6InTXuvpLujnwKV3asEFDZhhZk2LdosjW2Tz_M',
SECRETS_PATH: './client_secret.json',
FUNCTIONS_URL: 'https://us-central1-sheet-to-web.cloudfunctions.net/studyRPC',
AUTH_REDIRECT: '{{{FUNCTIONS_URL}}}?function=receiveCode',
DOMAIN: 'https://studysauce.sheet-to-web.com',
BUCKET:'studysauce.sheet-to-web.com',
GOOGLE_STORAGE_CREDENTIALS: './spahaha-ea443-a78ab2269985.json',
GOOGLE_STORAGE_PROJECT:'spahaha-ea443'
},
STUDY_LOCAL: {
DOCID: '1EGwxT6InTXuvpLujnwKV3asEFDZhhZk2LdosjW2Tz_M',
SECRETS_PATH: '{{PROFILE_PATH}}./client_secret.json',
FUNCTIONS_URL: 'http://localhost:8010/sheet-to-web/us-central1/studyRPC',
AUTH_REDIRECT: '{{{FUNCTIONS_URL}}}?function=receiveCode',
DOMAIN: 'http://localhost:8080',
BUCKET:'studysauce.sheet-to-web.com',
GOOGLE_STORAGE_CREDENTIALS: '{{{PROFILE_PATH}}}/.credentials/spahaha-ea443-a78ab2269985.json',
GOOGLE_STORAGE_PROJECT:'spahaha-ea443',
PROJECT_OUTPUT: './.output/'
}
};
this.key = key;
}
getSystemVariables() {
try {
return {
HOME: process.env.HOME,
HOMEPATH: process.env.HOMEPATH,
USERPROFILE: process.env.USERPROFILE
};
} catch (e) {
// Handle error case
return {};
}
}
render(template) {
return Mustache.render(template, Object.assign({}, process.env, this.getSystemVariables()));
}
assign() {
const envs = Object.assign({}, this.templates.DEFAULT, this.templates[this.key] || {});
const env = Object.keys(envs).reduce((env, e) => {
env[e.toUpperCase()] = this.render(envs[e]);
return env;
}, {});
return Object.assign(process.env, env);
}
}
// Export function to get environment
function getEnvironment(environment = '') {
const template = new EnvironmentTemplate(environment);
return template.assign();
}
// Assign environment variables
getEnvironment();
// Export function to get environment
module.exports = getEnvironment;
This code defines an environment configuration object using Mustache templating.
Here's a breakdown:
Initialization:
process
, path
, Mustache
).ENVIRONMENT
Function:
key
argument representing an environment name.DEFAULT
, BRIAN_RESUME
, ILLUMINATI
) has its own set of key-value pairs.HOME
, HOMEPATH
, or USERPROFILE
.Environment Variables:
In essence, this code provides a way to configure different environments with specific settings, using Mustache templating to dynamically generate values based on available environment variables.