Skip to content

Instantly share code, notes, and snippets.

@keshavbahadoor
Created December 27, 2018 18:00
Show Gist options
  • Save keshavbahadoor/996e676cf9253b948d6af57cfea9096b to your computer and use it in GitHub Desktop.
Save keshavbahadoor/996e676cf9253b948d6af57cfea9096b to your computer and use it in GitHub Desktop.
JS Bin // source https://jsbin.com/bomumer
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<script id="jsbin-javascript">
const mainConfig = {
"name": "dashboard-main-model",
"baseUrl": "staging.mainsite.com",
"globalCss": ".ncr-main-box{display:none;}",
"components": [
{
"type": "jquery"
},
{
"type": "bootstrap"
},
{
"type": "collector-lib",
"trackerId": "UA12345",
"clientId": "C1234",
"collectorUrl": "vara.staging.collector.com/api"
},
{
"type": "page-tracker"
}
],
"sso": {
"memberId": "nameId",
"logoutRedirect": "staging.mainsite.com",
"secureRedirect": true
},
"domains": [
"somedomain.com",
"someotherdomain.com"
],
"cors": [
"somecorsallowed.com"
]
};
let siteAConfig = {
"name": "SiteA-model",
"base": "dashboard-main-model",
"disable": true,
"components": [
{
"type": "css-asset",
"location": "..."
}
],
"domains": [
"siteA.com"
]
};
let siteBConfig = {
"name": "SiteB-model",
"base": "dashboard-main-model",
"components": [
{
"type": "css-asset",
"location": "..."
}
],
"omittedComponents": [
{
"type": "bootstrap"
}
],
"domains": [
"siteB.com"
]
};
function mergeConfigsWithMain(config) {
config.components = config.components.concat(mainConfig.components);
if (config.omittedComponents) {
}
const { components, name, domains, ...configToMerge } = mainConfig;
return Object.assign(config, configToMerge);
}
siteAConfig = mergeConfigsWithMain(siteAConfig);
siteBConfig = mergeConfigsWithMain(siteBConfig);
console.log('Site A', JSON.stringify(siteAConfig, null, 2));
console.log('Site B', JSON.stringify(siteBConfig, null, 2));
</script>
<script id="jsbin-source-javascript" type="text/javascript">const mainConfig = {
"name": "dashboard-main-model",
"baseUrl": "staging.mainsite.com",
"globalCss": ".ncr-main-box{display:none;}",
"components": [
{
"type": "jquery"
},
{
"type": "bootstrap"
},
{
"type": "collector-lib",
"trackerId": "UA12345",
"clientId": "C1234",
"collectorUrl": "vara.staging.collector.com/api"
},
{
"type": "page-tracker"
}
],
"sso": {
"memberId": "nameId",
"logoutRedirect": "staging.mainsite.com",
"secureRedirect": true
},
"domains": [
"somedomain.com",
"someotherdomain.com"
],
"cors": [
"somecorsallowed.com"
]
};
let siteAConfig = {
"name": "SiteA-model",
"base": "dashboard-main-model",
"disable": true,
"components": [
{
"type": "css-asset",
"location": "..."
}
],
"domains": [
"siteA.com"
]
};
let siteBConfig = {
"name": "SiteB-model",
"base": "dashboard-main-model",
"components": [
{
"type": "css-asset",
"location": "..."
}
],
"omittedComponents": [
{
"type": "bootstrap"
}
],
"domains": [
"siteB.com"
]
};
function mergeConfigsWithMain(config) {
config.components = config.components.concat(mainConfig.components);
if (config.omittedComponents) {
}
const { components, name, domains, ...configToMerge } = mainConfig;
return Object.assign(config, configToMerge);
}
siteAConfig = mergeConfigsWithMain(siteAConfig);
siteBConfig = mergeConfigsWithMain(siteBConfig);
console.log('Site A', JSON.stringify(siteAConfig, null, 2));
console.log('Site B', JSON.stringify(siteBConfig, null, 2));
</script></body>
</html>
const mainConfig = {
"name": "dashboard-main-model",
"baseUrl": "staging.mainsite.com",
"globalCss": ".ncr-main-box{display:none;}",
"components": [
{
"type": "jquery"
},
{
"type": "bootstrap"
},
{
"type": "collector-lib",
"trackerId": "UA12345",
"clientId": "C1234",
"collectorUrl": "vara.staging.collector.com/api"
},
{
"type": "page-tracker"
}
],
"sso": {
"memberId": "nameId",
"logoutRedirect": "staging.mainsite.com",
"secureRedirect": true
},
"domains": [
"somedomain.com",
"someotherdomain.com"
],
"cors": [
"somecorsallowed.com"
]
};
let siteAConfig = {
"name": "SiteA-model",
"base": "dashboard-main-model",
"disable": true,
"components": [
{
"type": "css-asset",
"location": "..."
}
],
"domains": [
"siteA.com"
]
};
let siteBConfig = {
"name": "SiteB-model",
"base": "dashboard-main-model",
"components": [
{
"type": "css-asset",
"location": "..."
}
],
"omittedComponents": [
{
"type": "bootstrap"
}
],
"domains": [
"siteB.com"
]
};
function mergeConfigsWithMain(config) {
config.components = config.components.concat(mainConfig.components);
if (config.omittedComponents) {
}
const { components, name, domains, ...configToMerge } = mainConfig;
return Object.assign(config, configToMerge);
}
siteAConfig = mergeConfigsWithMain(siteAConfig);
siteBConfig = mergeConfigsWithMain(siteBConfig);
console.log('Site A', JSON.stringify(siteAConfig, null, 2));
console.log('Site B', JSON.stringify(siteBConfig, null, 2));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment