UNPKG

@m10s/cmp

Version:

Package containing scripts used by Schibsteds' sites to integrate with Sourcepoint CMP

56 lines (46 loc) 1.98 kB
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 };