@m10s/cmp
Version:
Package containing scripts used by Schibsteds' sites to integrate with Sourcepoint CMP
56 lines (46 loc) • 1.98 kB
JavaScript
const fs = require('fs');
const path = require('path');
const rootPath = path.resolve(__dirname, '..', '..');
const templateDir = path.resolve(rootPath, 'dist', 'templates');
const pkgVersion = require('../../package.json').version;
function psi(config, asHtml = true) {
return createModule(config, asHtml, 'psi');
}
function scc(config, asHtml = true) {
return createModule(config, asHtml, 'scc');
}
function tcf(config, asHtml = true) {
return createModule(config, asHtml, 'tcf');
}
function createModule(config, asHtml, type) {
const snippet = fs.readFileSync(path.resolve(templateDir, `${type}.js`), 'utf8');
const messagingSnippet = fs.readFileSync(
path.resolve(templateDir, `${type}-with-messaging.js`),
'utf8'
);
const configObject = type === 'psi' ? ({...config, jsSdkVersion: pkgVersion}) : config;
const code = addBanner(injectConfig(asHtml ? snippet : messagingSnippet, configObject));
return asHtml ? addJsTag(code, config) : code;
}
function injectConfig(content, config) {
const configAsStr = JSON.stringify(config);
return content.replace(/['"]__CONFIGURATION_PLACEHOLDER__['"]/, configAsStr);
}
function addBanner(code) {
const date = new Date().toISOString();
return `/*! Copyright © ${new Date().getFullYear()} Schibsted Marketplaces. Generated by @m10s/cmp ${pkgVersion} (${date}) */\n${code}`;
}
function addJsTag(code, { baseEndpoint }) {
if (!baseEndpoint) {
throw new Error('"baseEndpoint" is not configured');
}
const codeScript = `<script>\n${code}</script>`;
const preloadLink = `<link rel="preload" href="${baseEndpoint}/unified/wrapperMessagingWithoutDetection.js" as="script" crossorigin="crossorigin" fetchpriority="high">`;
const script = `<script async src="${baseEndpoint}/unified/wrapperMessagingWithoutDetection.js"></script>`;
return `${codeScript}\n${preloadLink}\n${script}`;
}
module.exports = {
psi,
scc,
tcf
};