"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BreakpointManager = undefined; 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; }; }(); /** * Copyright (c) 2017-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ var _PerFileBreakpointMap = require("./PerFileBreakpointMap.js"); var _Breakpoint = require("./Breakpoint.js"); var _babelTypes = require("babel-types"); var _is = require("./../../methods/is.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } // Storing BreakpointStores for all source files var BreakpointManager = exports.BreakpointManager = function () { function BreakpointManager() { _classCallCheck(this, BreakpointManager); this._breakpointMaps = new Map(); } _createClass(BreakpointManager, [{ key: "getStoppableBreakpoint", value: function getStoppableBreakpoint(ast) { if (!(0, _is.IsStatement)(ast)) return; if (ast.loc && ast.loc.source) { var location = ast.loc; var filePath = location.source; if (filePath === null) return; var lineNum = location.start.line; var colNum = location.start.column; // Check whether there is a breakpoint we need to stop on here var breakpoint = this._findStoppableBreakpoint(filePath, lineNum, colNum); if (breakpoint === null) return; return breakpoint; } } // Try to find a breakpoint at the given location and check if we should stop on it }, { key: "_findStoppableBreakpoint", value: function _findStoppableBreakpoint(filePath, lineNum, colNum) { var breakpoint = this.getBreakpoint(filePath, lineNum, colNum); if (breakpoint && breakpoint.enabled) { return breakpoint; } return null; } }, { key: "addBreakpointMulti", value: function addBreakpointMulti(breakpoints) { this._doBreakpointsAction(breakpoints, this._addBreakpoint.bind(this)); } }, { key: "_addBreakpoint", value: function _addBreakpoint(bp) { var breakpointMap = this._breakpointMaps.get(bp.filePath); if (!breakpointMap) { breakpointMap = new _PerFileBreakpointMap.PerFileBreakpointMap(bp.filePath); this._breakpointMaps.set(bp.filePath, breakpointMap); } breakpointMap.addBreakpoint(bp.line, bp.column); } }, { key: "getBreakpoint", value: function getBreakpoint(filePath, lineNum) { var columnNum = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; var breakpointMap = this._breakpointMaps.get(filePath); if (breakpointMap) return breakpointMap.getBreakpoint(lineNum, columnNum); return undefined; } }, { key: "removeBreakpointMulti", value: function removeBreakpointMulti(breakpoints) { this._doBreakpointsAction(breakpoints, this._removeBreakpoint.bind(this)); } }, { key: "_removeBreakpoint", value: function _removeBreakpoint(bp) { var breakpointMap = this._breakpointMaps.get(bp.filePath); if (breakpointMap) breakpointMap.removeBreakpoint(bp.line, bp.column); } }, { key: "enableBreakpointMulti", value: function enableBreakpointMulti(breakpoints) { this._doBreakpointsAction(breakpoints, this._enableBreakpoint.bind(this)); } }, { key: "_enableBreakpoint", value: function _enableBreakpoint(bp) { var breakpointMap = this._breakpointMaps.get(bp.filePath); if (breakpointMap) breakpointMap.enableBreakpoint(bp.line, bp.column); } }, { key: "disableBreakpointMulti", value: function disableBreakpointMulti(breakpoints) { this._doBreakpointsAction(breakpoints, this._disableBreakpoint.bind(this)); } }, { key: "_disableBreakpoint", value: function _disableBreakpoint(bp) { var breakpointMap = this._breakpointMaps.get(bp.filePath); if (breakpointMap) breakpointMap.disableBreakpoint(bp.line, bp.column); } }, { key: "_doBreakpointsAction", value: function _doBreakpointsAction(breakpoints, action) { var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = breakpoints[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var bp = _step.value; action(bp); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } } }]); return BreakpointManager; }(); //# sourceMappingURL=BreakpointManager.js.map