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.

parseSeq.js 5.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.default = parseSeq;
  7. var _constants = require("../constants");
  8. var _errors = require("../errors");
  9. var _Pair = _interopRequireDefault(require("./Pair"));
  10. var _parseUtils = require("./parseUtils");
  11. var _Seq = _interopRequireDefault(require("./Seq"));
  12. var _Collection = _interopRequireDefault(require("./Collection"));
  13. function parseSeq(doc, cst) {
  14. if (cst.type !== _constants.Type.SEQ && cst.type !== _constants.Type.FLOW_SEQ) {
  15. var msg = "A ".concat(cst.type, " node cannot be resolved as a sequence");
  16. doc.errors.push(new _errors.YAMLSyntaxError(cst, msg));
  17. return null;
  18. }
  19. var _ref = cst.type === _constants.Type.FLOW_SEQ ? resolveFlowSeqItems(doc, cst) : resolveBlockSeqItems(doc, cst),
  20. comments = _ref.comments,
  21. items = _ref.items;
  22. var seq = new _Seq.default();
  23. seq.items = items;
  24. (0, _parseUtils.resolveComments)(seq, comments);
  25. if (!doc.options.mapAsMap && items.some(function (it) {
  26. return it instanceof _Pair.default && it.key instanceof _Collection.default;
  27. })) {
  28. var warn = 'Keys with collection values will be stringified as YAML due to JS Object restrictions. Use mapAsMap: true to avoid this.';
  29. doc.warnings.push(new _errors.YAMLWarning(cst, warn));
  30. }
  31. cst.resolved = seq;
  32. return seq;
  33. }
  34. function resolveBlockSeqItems(doc, cst) {
  35. var comments = [];
  36. var items = [];
  37. for (var i = 0; i < cst.items.length; ++i) {
  38. var item = cst.items[i];
  39. switch (item.type) {
  40. case _constants.Type.BLANK_LINE:
  41. comments.push({
  42. before: items.length
  43. });
  44. break;
  45. case _constants.Type.COMMENT:
  46. comments.push({
  47. comment: item.comment,
  48. before: items.length
  49. });
  50. break;
  51. case _constants.Type.SEQ_ITEM:
  52. if (item.error) doc.errors.push(item.error);
  53. items.push(doc.resolveNode(item.node));
  54. if (item.hasProps) {
  55. var msg = 'Sequence items cannot have tags or anchors before the - indicator';
  56. doc.errors.push(new _errors.YAMLSemanticError(item, msg));
  57. }
  58. break;
  59. default:
  60. if (item.error) doc.errors.push(item.error);
  61. doc.errors.push(new _errors.YAMLSyntaxError(item, "Unexpected ".concat(item.type, " node in sequence")));
  62. }
  63. }
  64. return {
  65. comments: comments,
  66. items: items
  67. };
  68. }
  69. function resolveFlowSeqItems(doc, cst) {
  70. var comments = [];
  71. var items = [];
  72. var explicitKey = false;
  73. var key = undefined;
  74. var keyStart = null;
  75. var next = '[';
  76. for (var i = 0; i < cst.items.length; ++i) {
  77. var item = cst.items[i];
  78. if (typeof item.char === 'string') {
  79. var char = item.char,
  80. offset = item.offset;
  81. if (char !== ':' && (explicitKey || key !== undefined)) {
  82. if (explicitKey && key === undefined) key = next ? items.pop() : null;
  83. items.push(new _Pair.default(key));
  84. explicitKey = false;
  85. key = undefined;
  86. keyStart = null;
  87. }
  88. if (char === next) {
  89. next = null;
  90. } else if (!next && char === '?') {
  91. explicitKey = true;
  92. } else if (next !== '[' && char === ':' && key === undefined) {
  93. if (next === ',') {
  94. key = items.pop();
  95. if (key instanceof _Pair.default) {
  96. var msg = 'Chaining flow sequence pairs is invalid';
  97. var err = new _errors.YAMLSemanticError(cst, msg);
  98. err.offset = offset;
  99. doc.errors.push(err);
  100. }
  101. if (!explicitKey) (0, _parseUtils.checkKeyLength)(doc.errors, cst, i, key, keyStart);
  102. } else {
  103. key = null;
  104. }
  105. keyStart = null;
  106. explicitKey = false; // TODO: add error for non-explicit multiline plain key
  107. next = null;
  108. } else if (next === '[' || char !== ']' || i < cst.items.length - 1) {
  109. var _msg = "Flow sequence contains an unexpected ".concat(char);
  110. var _err = new _errors.YAMLSyntaxError(cst, _msg);
  111. _err.offset = offset;
  112. doc.errors.push(_err);
  113. }
  114. } else if (item.type === _constants.Type.BLANK_LINE) {
  115. comments.push({
  116. before: items.length
  117. });
  118. } else if (item.type === _constants.Type.COMMENT) {
  119. comments.push({
  120. comment: item.comment,
  121. before: items.length
  122. });
  123. } else {
  124. if (next) {
  125. var _msg2 = "Expected a ".concat(next, " in flow sequence");
  126. doc.errors.push(new _errors.YAMLSemanticError(item, _msg2));
  127. }
  128. var value = doc.resolveNode(item);
  129. if (key === undefined) {
  130. items.push(value);
  131. } else {
  132. items.push(new _Pair.default(key, value));
  133. key = undefined;
  134. }
  135. keyStart = item.range.start;
  136. next = ',';
  137. }
  138. }
  139. (0, _parseUtils.checkFlowCollectionEnd)(doc.errors, cst);
  140. if (key !== undefined) items.push(new _Pair.default(key));
  141. return {
  142. comments: comments,
  143. items: items
  144. };
  145. }