123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- /**
- * The MIT License (MIT)
- * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
- */
- 'use strict';
- var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- var generator = require('../generator');
- var parser = require('../parser');
- var traverse = require('../traverse');
- /**
- * Transform result.
- */
- var TransformResult = function () {
- /**
- * Initializes a transform result for an AST.
- *
- * @param Object ast - an AST node
- * @param mixed extra - any extra data a transform may return
- */
- function TransformResult(ast) {
- var extra = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
- _classCallCheck(this, TransformResult);
- this._ast = ast;
- this._source = null;
- this._string = null;
- this._regexp = null;
- this._extra = extra;
- }
- _createClass(TransformResult, [{
- key: 'getAST',
- value: function getAST() {
- return this._ast;
- }
- }, {
- key: 'setExtra',
- value: function setExtra(extra) {
- this._extra = extra;
- }
- }, {
- key: 'getExtra',
- value: function getExtra() {
- return this._extra;
- }
- }, {
- key: 'toRegExp',
- value: function toRegExp() {
- if (!this._regexp) {
- this._regexp = new RegExp(this.getSource(), this._ast.flags);
- }
- return this._regexp;
- }
- }, {
- key: 'getSource',
- value: function getSource() {
- if (!this._source) {
- this._source = generator.generate(this._ast.body);
- }
- return this._source;
- }
- }, {
- key: 'getFlags',
- value: function getFlags() {
- return this._ast.flags;
- }
- }, {
- key: 'toString',
- value: function toString() {
- if (!this._string) {
- this._string = generator.generate(this._ast);
- }
- return this._string;
- }
- }]);
- return TransformResult;
- }();
- module.exports = {
- /**
- * Expose `TransformResult`.
- */
- TransformResult: TransformResult,
- /**
- * Transforms a regular expression applying a set of
- * transformation handlers.
- *
- * @param string | AST | RegExp:
- *
- * a regular expression in different representations: a string,
- * a RegExp object, or an AST.
- *
- * @param Object | Array<Object>:
- *
- * a handler (or a list of handlers) from `traverse` API.
- *
- * @return TransformResult instance.
- *
- * Example:
- *
- * transform(/[a-z]/i, {
- * onChar(path) {
- * const {node} = path;
- *
- * if (...) {
- * path.remove();
- * }
- * }
- * });
- */
- transform: function transform(regexp, handlers) {
- var ast = regexp;
- if (regexp instanceof RegExp) {
- regexp = '' + regexp;
- }
- if (typeof regexp === 'string') {
- ast = parser.parse(regexp, {
- captureLocations: true
- });
- }
- traverse.traverse(ast, handlers);
- return new TransformResult(ast);
- }
- };
|