rpc | rpc result | get rpc from spec | Search

This code defines an environment configuration using Mustache templating, allowing for dynamic generation of settings based on environment variables.

Run example

npm run import -- "get environment"

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;

What the code could have been:

// 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:

  1. Initialization:

  2. ENVIRONMENT Function:

  3. 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.