@grnsft/if
Version:
Impact Framework
55 lines • 7.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Regex = void 0;
const zod_1 = require("zod");
const utils_1 = require("@grnsft/if-core/utils");
const validations_1 = require("../../../common/util/validations");
const config_1 = require("../../config");
const interfaces_1 = require("@grnsft/if-core/interfaces");
const { MissingInputDataError, ConfigError, RegexMismatchError } = utils_1.ERRORS;
const { MISSING_CONFIG, MISSING_INPUT_DATA, REGEX_MISMATCH } = config_1.STRINGS;
exports.Regex = (0, interfaces_1.PluginFactory)({
configValidation: (config) => {
if (!config || !Object.keys(config)?.length) {
throw new ConfigError(MISSING_CONFIG);
}
const schema = zod_1.z.object({
parameter: zod_1.z.string().min(1),
match: zod_1.z.string().min(1),
output: zod_1.z.string(),
});
return (0, validations_1.validate)(schema, config);
},
inputValidation: (input, config) => {
const parameter = config['parameter'];
if (!input[parameter]) {
throw new MissingInputDataError(MISSING_INPUT_DATA(parameter));
}
return input;
},
implementation: async (inputs, config) => {
const { parameter: parameter, match, output } = config;
return inputs.map(input => ({
...input,
[output]: extractMatching(input, parameter, match),
}));
},
});
/**
* Extracts a substring from the given input parameter that matches the provided regular expression pattern.
*/
const extractMatching = (input, parameter, match) => {
if (!match.startsWith('/')) {
match = '/' + match;
}
if (!match.endsWith('/g') && !match.endsWith('/')) {
match += '/';
}
const regex = eval(match);
const matchedItems = input[parameter].match(regex);
if (!matchedItems || matchedItems.length === 0) {
throw new RegexMismatchError(REGEX_MISMATCH(input[parameter], match));
}
return matchedItems.join(' ');
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaWYtcnVuL2J1aWx0aW5zL3JlZ2V4L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUFzQjtBQUN0QixpREFBNkM7QUFJN0Msa0VBQTBEO0FBRTFELHlDQUFxQztBQUNyQywyREFBeUQ7QUFFekQsTUFBTSxFQUFDLHFCQUFxQixFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBQyxHQUFHLGNBQU0sQ0FBQztBQUN4RSxNQUFNLEVBQUMsY0FBYyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBQyxHQUFHLGdCQUFPLENBQUM7QUFFeEQsUUFBQSxLQUFLLEdBQUcsSUFBQSwwQkFBYSxFQUFDO0lBQ2pDLGdCQUFnQixFQUFFLENBQUMsTUFBb0IsRUFBRSxFQUFFO1FBQ3pDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRTtZQUMzQyxNQUFNLElBQUksV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQ3ZDO1FBRUQsTUFBTSxNQUFNLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztZQUN0QixTQUFTLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDNUIsS0FBSyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1NBQ25CLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBQSxzQkFBUSxFQUF5QixNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUNELGVBQWUsRUFBRSxDQUFDLEtBQW1CLEVBQUUsTUFBb0IsRUFBRSxFQUFFO1FBQzdELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV0QyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3JCLE1BQU0sSUFBSSxxQkFBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1NBQ2hFO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsY0FBYyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDdkMsTUFBTSxFQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBQyxHQUFHLE1BQU0sQ0FBQztRQUVyRCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFCLEdBQUcsS0FBSztZQUNSLENBQUMsTUFBTSxDQUFDLEVBQUUsZUFBZSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDO1NBQ25ELENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztDQUNGLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ0gsTUFBTSxlQUFlLEdBQUcsQ0FDdEIsS0FBbUIsRUFDbkIsU0FBaUIsRUFDakIsS0FBYSxFQUNiLEVBQUU7SUFDRixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUMxQixLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQztLQUNyQjtJQUVELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNqRCxLQUFLLElBQUksR0FBRyxDQUFDO0tBQ2Q7SUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVuRCxJQUFJLENBQUMsWUFBWSxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQzlDLE1BQU0sSUFBSSxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7S0FDdkU7SUFFRCxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHt6fSBmcm9tICd6b2QnO1xuaW1wb3J0IHtFUlJPUlN9IGZyb20gJ0Bncm5zZnQvaWYtY29yZS91dGlscyc7XG5cbmltcG9ydCB7Q29uZmlnUGFyYW1zLCBQbHVnaW5QYXJhbXN9IGZyb20gJ0Bncm5zZnQvaWYtY29yZS90eXBlcyc7XG5cbmltcG9ydCB7dmFsaWRhdGV9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi91dGlsL3ZhbGlkYXRpb25zJztcblxuaW1wb3J0IHtTVFJJTkdTfSBmcm9tICcuLi8uLi9jb25maWcnO1xuaW1wb3J0IHtQbHVnaW5GYWN0b3J5fSBmcm9tICdAZ3Juc2Z0L2lmLWNvcmUvaW50ZXJmYWNlcyc7XG5cbmNvbnN0IHtNaXNzaW5nSW5wdXREYXRhRXJyb3IsIENvbmZpZ0Vycm9yLCBSZWdleE1pc21hdGNoRXJyb3J9ID0gRVJST1JTO1xuY29uc3Qge01JU1NJTkdfQ09ORklHLCBNSVNTSU5HX0lOUFVUX0RBVEEsIFJFR0VYX01JU01BVENIfSA9IFNUUklOR1M7XG5cbmV4cG9ydCBjb25zdCBSZWdleCA9IFBsdWdpbkZhY3Rvcnkoe1xuICBjb25maWdWYWxpZGF0aW9uOiAoY29uZmlnOiBDb25maWdQYXJhbXMpID0+IHtcbiAgICBpZiAoIWNvbmZpZyB8fCAhT2JqZWN0LmtleXMoY29uZmlnKT8ubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgQ29uZmlnRXJyb3IoTUlTU0lOR19DT05GSUcpO1xuICAgIH1cblxuICAgIGNvbnN0IHNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAgIHBhcmFtZXRlcjogei5zdHJpbmcoKS5taW4oMSksXG4gICAgICBtYXRjaDogei5zdHJpbmcoKS5taW4oMSksXG4gICAgICBvdXRwdXQ6IHouc3RyaW5nKCksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdmFsaWRhdGU8ei5pbmZlcjx0eXBlb2Ygc2NoZW1hPj4oc2NoZW1hLCBjb25maWcpO1xuICB9LFxuICBpbnB1dFZhbGlkYXRpb246IChpbnB1dDogUGx1Z2luUGFyYW1zLCBjb25maWc6IENvbmZpZ1BhcmFtcykgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IGNvbmZpZ1sncGFyYW1ldGVyJ107XG5cbiAgICBpZiAoIWlucHV0W3BhcmFtZXRlcl0pIHtcbiAgICAgIHRocm93IG5ldyBNaXNzaW5nSW5wdXREYXRhRXJyb3IoTUlTU0lOR19JTlBVVF9EQVRBKHBhcmFtZXRlcikpO1xuICAgIH1cblxuICAgIHJldHVybiBpbnB1dDtcbiAgfSxcbiAgaW1wbGVtZW50YXRpb246IGFzeW5jIChpbnB1dHMsIGNvbmZpZykgPT4ge1xuICAgIGNvbnN0IHtwYXJhbWV0ZXI6IHBhcmFtZXRlciwgbWF0Y2gsIG91dHB1dH0gPSBjb25maWc7XG5cbiAgICByZXR1cm4gaW5wdXRzLm1hcChpbnB1dCA9PiAoe1xuICAgICAgLi4uaW5wdXQsXG4gICAgICBbb3V0cHV0XTogZXh0cmFjdE1hdGNoaW5nKGlucHV0LCBwYXJhbWV0ZXIsIG1hdGNoKSxcbiAgICB9KSk7XG4gIH0sXG59KTtcblxuLyoqXG4gKiBFeHRyYWN0cyBhIHN1YnN0cmluZyBmcm9tIHRoZSBnaXZlbiBpbnB1dCBwYXJhbWV0ZXIgdGhhdCBtYXRjaGVzIHRoZSBwcm92aWRlZCByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybi5cbiAqL1xuY29uc3QgZXh0cmFjdE1hdGNoaW5nID0gKFxuICBpbnB1dDogUGx1Z2luUGFyYW1zLFxuICBwYXJhbWV0ZXI6IHN0cmluZyxcbiAgbWF0Y2g6IHN0cmluZ1xuKSA9PiB7XG4gIGlmICghbWF0Y2guc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgbWF0Y2ggPSAnLycgKyBtYXRjaDtcbiAgfVxuXG4gIGlmICghbWF0Y2guZW5kc1dpdGgoJy9nJykgJiYgIW1hdGNoLmVuZHNXaXRoKCcvJykpIHtcbiAgICBtYXRjaCArPSAnLyc7XG4gIH1cblxuICBjb25zdCByZWdleCA9IGV2YWwobWF0Y2gpO1xuICBjb25zdCBtYXRjaGVkSXRlbXMgPSBpbnB1dFtwYXJhbWV0ZXJdLm1hdGNoKHJlZ2V4KTtcblxuICBpZiAoIW1hdGNoZWRJdGVtcyB8fCBtYXRjaGVkSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZ2V4TWlzbWF0Y2hFcnJvcihSRUdFWF9NSVNNQVRDSChpbnB1dFtwYXJhbWV0ZXJdLCBtYXRjaCkpO1xuICB9XG5cbiAgcmV0dXJuIG1hdGNoZWRJdGVtcy5qb2luKCcgJyk7XG59O1xuIl19