Dashboard sipadu mbip
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

FlowCollection.js 7.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.default = void 0;
  7. var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
  8. var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
  9. var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
  10. var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
  11. var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
  12. var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
  13. var _constants = require("../constants");
  14. var _errors = require("../errors");
  15. var _BlankLine = _interopRequireDefault(require("./BlankLine"));
  16. var _Comment = _interopRequireDefault(require("./Comment"));
  17. var _Node2 = _interopRequireDefault(require("./Node"));
  18. var _Range = _interopRequireDefault(require("./Range"));
  19. var FlowCollection =
  20. /*#__PURE__*/
  21. function (_Node) {
  22. (0, _inherits2.default)(FlowCollection, _Node);
  23. function FlowCollection(type, props) {
  24. var _this;
  25. (0, _classCallCheck2.default)(this, FlowCollection);
  26. _this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(FlowCollection).call(this, type, props));
  27. _this.items = null;
  28. return _this;
  29. }
  30. (0, _createClass2.default)(FlowCollection, [{
  31. key: "prevNodeIsJsonLike",
  32. value: function prevNodeIsJsonLike() {
  33. var idx = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.items.length;
  34. var node = this.items[idx - 1];
  35. return !!node && (node.jsonLike || node.type === _constants.Type.COMMENT && this.nodeIsJsonLike(idx - 1));
  36. }
  37. /**
  38. * @param {ParseContext} context
  39. * @param {number} start - Index of first character
  40. * @returns {number} - Index of the character after this
  41. */
  42. }, {
  43. key: "parse",
  44. value: function parse(context, start) {
  45. this.context = context;
  46. var parseNode = context.parseNode,
  47. src = context.src;
  48. var indent = context.indent,
  49. lineStart = context.lineStart;
  50. var char = src[start]; // { or [
  51. this.items = [{
  52. char: char,
  53. offset: start
  54. }];
  55. var offset = _Node2.default.endOfWhiteSpace(src, start + 1);
  56. char = src[offset];
  57. while (char && char !== ']' && char !== '}') {
  58. switch (char) {
  59. case '\n':
  60. {
  61. lineStart = offset + 1;
  62. var wsEnd = _Node2.default.endOfWhiteSpace(src, lineStart);
  63. if (src[wsEnd] === '\n') {
  64. var blankLine = new _BlankLine.default();
  65. lineStart = blankLine.parse({
  66. src: src
  67. }, lineStart);
  68. this.items.push(blankLine);
  69. }
  70. offset = _Node2.default.endOfIndent(src, lineStart);
  71. if (offset <= lineStart + indent) {
  72. char = src[offset];
  73. if (offset < lineStart + indent || char !== ']' && char !== '}') {
  74. var msg = 'Insufficient indentation in flow collection';
  75. this.error = new _errors.YAMLSemanticError(this, msg);
  76. }
  77. }
  78. }
  79. break;
  80. case ',':
  81. {
  82. this.items.push({
  83. char: char,
  84. offset: offset
  85. });
  86. offset += 1;
  87. }
  88. break;
  89. case '#':
  90. {
  91. var comment = new _Comment.default();
  92. offset = comment.parse({
  93. src: src
  94. }, offset);
  95. this.items.push(comment);
  96. }
  97. break;
  98. case '?':
  99. case ':':
  100. {
  101. var next = src[offset + 1];
  102. if (next === '\n' || next === '\t' || next === ' ' || next === ',' || // in-flow : after JSON-like key does not need to be followed by whitespace
  103. char === ':' && this.prevNodeIsJsonLike()) {
  104. this.items.push({
  105. char: char,
  106. offset: offset
  107. });
  108. offset += 1;
  109. break;
  110. }
  111. }
  112. // fallthrough
  113. default:
  114. {
  115. var node = parseNode({
  116. atLineStart: false,
  117. inCollection: false,
  118. inFlow: true,
  119. indent: -1,
  120. lineStart: lineStart,
  121. parent: this
  122. }, offset);
  123. if (!node) {
  124. // at next document start
  125. this.valueRange = new _Range.default(start, offset);
  126. return offset;
  127. }
  128. this.items.push(node);
  129. offset = _Node2.default.normalizeOffset(src, node.range.end);
  130. }
  131. }
  132. offset = _Node2.default.endOfWhiteSpace(src, offset);
  133. char = src[offset];
  134. }
  135. this.valueRange = new _Range.default(start, offset + 1);
  136. if (char) {
  137. this.items.push({
  138. char: char,
  139. offset: offset
  140. });
  141. offset = _Node2.default.endOfWhiteSpace(src, offset + 1);
  142. offset = this.parseComment(offset);
  143. }
  144. return offset;
  145. }
  146. }, {
  147. key: "setOrigRanges",
  148. value: function setOrigRanges(cr, offset) {
  149. offset = (0, _get2.default)((0, _getPrototypeOf2.default)(FlowCollection.prototype), "setOrigRanges", this).call(this, cr, offset);
  150. this.items.forEach(function (node) {
  151. if (node instanceof _Node2.default) {
  152. offset = node.setOrigRanges(cr, offset);
  153. } else if (cr.length === 0) {
  154. node.origOffset = node.offset;
  155. } else {
  156. var i = offset;
  157. while (i < cr.length) {
  158. if (cr[i] > node.offset) break;else ++i;
  159. }
  160. node.origOffset = node.offset + i;
  161. offset = i;
  162. }
  163. });
  164. return offset;
  165. }
  166. }, {
  167. key: "toString",
  168. value: function toString() {
  169. var src = this.context.src,
  170. items = this.items,
  171. range = this.range,
  172. value = this.value;
  173. if (value != null) return value;
  174. var nodes = items.filter(function (item) {
  175. return item instanceof _Node2.default;
  176. });
  177. var str = '';
  178. var prevEnd = range.start;
  179. nodes.forEach(function (node) {
  180. var prefix = src.slice(prevEnd, node.range.start);
  181. prevEnd = node.range.end;
  182. str += prefix + String(node);
  183. if (str[str.length - 1] === '\n' && src[prevEnd - 1] !== '\n' && src[prevEnd] === '\n') {
  184. // Comment range does not include the terminal newline, but its
  185. // stringified value does. Without this fix, newlines at comment ends
  186. // get duplicated.
  187. prevEnd += 1;
  188. }
  189. });
  190. str += src.slice(prevEnd, range.end);
  191. return _Node2.default.addStringTerminator(src, range.end, str);
  192. }
  193. }]);
  194. return FlowCollection;
  195. }(_Node2.default);
  196. exports.default = FlowCollection;