source: node_modules/@swagger-api/apidom-core/cjs/traversal/findAtOffset.cjs

main
Last change on this file was d24f17c, checked in by Aleksandar Panovski <apano77@…>, 15 months ago

Initial commit

  • Property mode set to 100644
File size: 2.0 KB
Line 
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4exports.__esModule = true;
5exports.default = void 0;
6var _ramda = require("ramda");
7var _ramdaAdjunct = require("ramda-adjunct");
8var _index = require("../predicates/index.cjs");
9var _visitor = require("./visitor.cjs");
10var _index2 = _interopRequireDefault(require("../transformers/serializers/value/index.cjs"));
11class Visitor {
12 result;
13 offset;
14 includeRightBound;
15 constructor({
16 offset = 0,
17 includeRightBound = false
18 } = {}) {
19 this.result = [];
20 this.offset = offset;
21 this.includeRightBound = includeRightBound;
22 }
23 enter(element) {
24 if (!(0, _index.hasElementSourceMap)(element)) {
25 return undefined; // dive in
26 }
27 const sourceMapElement = element.getMetaProperty('sourceMap');
28 const charStart = (0, _index2.default)(sourceMapElement.positionStart.get(2));
29 const charEnd = (0, _index2.default)(sourceMapElement.positionEnd.get(2));
30 const isWithinOffsetRange = this.offset >= charStart && (this.offset < charEnd || this.includeRightBound && this.offset <= charEnd);
31 if (isWithinOffsetRange) {
32 this.result.push(element);
33 return undefined; // push to stack and dive in
34 }
35 return false; // skip entire sub-tree
36 }
37}
38// Finds the most inner node at the given offset.
39// If includeRightBound is set, also finds nodes that end at the given offset.
40// findAtOffset :: Number -> Element -> Element | Undefined
41const findAtOffset = (options, element) => {
42 let offset;
43 let includeRightBound;
44 if ((0, _ramdaAdjunct.isNumber)(options)) {
45 offset = options;
46 includeRightBound = false;
47 } else {
48 offset = (0, _ramda.pathOr)(0, ['offset'], options);
49 includeRightBound = (0, _ramda.pathOr)(false, ['includeRightBound'], options);
50 }
51 const visitor = new Visitor({
52 offset,
53 includeRightBound
54 });
55 (0, _visitor.visit)(element, visitor);
56 return (0, _ramda.last)(visitor.result);
57};
58var _default = exports.default = findAtOffset;
Note: See TracBrowser for help on using the repository browser.