UNPKG

baldrick-broth

Version:
65 lines (64 loc) 2.32 kB
import Handlebars from 'handlebars'; import { splitDataKey, withMemoryPrefix } from './data-value-utils.js'; import { rootId } from './id-generator.js'; const escapeSpace = (text) => text.replace(/ /g, '\\ '); Handlebars.registerHelper('escapeSpace', escapeSpace); const createTemplate = (run) => Handlebars.compile(run, { noEscape: true }); export const getExpandedName = (name, context) => { const template = createTemplate(name); const expandedName = template(context).trim(); return expandedName; }; export const getStringFromTemplate = (hbsTemplate, context) => { const template = createTemplate(hbsTemplate); const expandedName = template(context).trim(); return expandedName; }; export const getCommandLines = (run, context) => { const template = createTemplate(run); const lines = template(context) .split('\n') .map((s) => s.trim()) .filter((s) => s.length > 0); return lines; }; export const getSingleCommandLine = (run, context) => { const template = createTemplate(run); const lines = template(context) .split('\n') .map((s) => s.trim()) .filter((s) => s.length > 0); return lines.join(' ').trim(); }; const forceJson = (wholeCtx) => JSON.parse(JSON.stringify(wholeCtx)); const getTemplateData = (memoryId, extra) => { const keys = Object.keys(extra); const branchKeys = keys.filter(withMemoryPrefix(memoryId)); const results = {}; for (const dataKey of branchKeys) { const [_, key] = splitDataKey(dataKey); results[key] = extra[dataKey]; } if (memoryId === rootId) { return results; } const rootKeys = keys.filter(withMemoryPrefix(rootId)); for (const dataKey of rootKeys) { const [_, key] = splitDataKey(dataKey); const existAlready = results[key] !== undefined; if (!existAlready) { results[key] = extra[dataKey]; } } return results; }; const mergeExtraData = (ctxData, extra) => ({ ...ctxData, ...extra }); export const mergeTemplateContext = ({ memoryId, ctx, extra, command, }) => { const mergedExtra = mergeExtraData(ctx.data, extra); const relevantData = getTemplateData(memoryId, mergedExtra); return forceJson({ ...ctx, _: relevantData, command, }); };