metal-soy-critic
Version:
A metal-soy code validation utility.
24 lines (23 loc) • 820 B
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const changeCase = require("change-case");
const INTERPOLATION = /{\$(\d{1,3})((\|[a-zA-Z]+)*)}/g;
function applyFilters(input, filters) {
return filters.reduce((result, filter) => (changeCase[filter] || defaultFilter)(result), input);
}
function defaultFilter(input) {
return input;
}
function transform(input, regex, output) {
const matches = input.match(new RegExp(regex));
if (!matches) {
throw new Error('Failed to match input string.');
}
return output.replace(INTERPOLATION, (_, group, rawFilters) => {
const filters = rawFilters
.split('|')
.filter(filter => filter);
return applyFilters(matches[parseInt(group)], filters);
});
}
exports.default = transform;