baldrick-broth
Version:
Build automation tool and task runner
65 lines (64 loc) • 2.32 kB
JavaScript
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,
});
};