/** * The MIT License (MIT) * Copyright (c) 2017-present Dmitry Soshnikov */ 'use strict'; var compatTransforms = require('./transforms'); var _transform = require('../transform'); module.exports = { /** * Translates a regexp in new syntax to equivalent regexp in old syntax. * * @param string|RegExp|AST - regexp * @param Array transformsWhitelist - names of the transforms to apply */ transform: function transform(regexp) { var transformsWhitelist = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; var transformToApply = transformsWhitelist.length > 0 ? transformsWhitelist : Object.keys(compatTransforms); var result = void 0; // Collect extra data per transform. var extra = {}; transformToApply.forEach(function (transformName) { if (!compatTransforms.hasOwnProperty(transformName)) { throw new Error('Unknown compat-transform: ' + transformName + '. ' + 'Available transforms are: ' + Object.keys(compatTransforms).join(', ')); } var handler = compatTransforms[transformName]; result = _transform.transform(regexp, handler); regexp = result.getAST(); // Collect `extra` transform result. if (typeof handler.getExtra === 'function') { extra[transformName] = handler.getExtra(); } }); // Set the final extras for all transforms. result.setExtra(extra); return result; } };