Dashboard sipadu mbip
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  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 _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
  10. var _Alias = _interopRequireDefault(require("./schema/Alias"));
  11. var _Map = _interopRequireDefault(require("./schema/Map"));
  12. var _Merge = _interopRequireDefault(require("./schema/Merge"));
  13. var _Scalar = _interopRequireDefault(require("./schema/Scalar"));
  14. var _Seq = _interopRequireDefault(require("./schema/Seq"));
  15. var Anchors =
  16. /*#__PURE__*/
  17. function () {
  18. (0, _createClass2.default)(Anchors, null, [{
  19. key: "validAnchorNode",
  20. value: function validAnchorNode(node) {
  21. return node instanceof _Scalar.default || node instanceof _Seq.default || node instanceof _Map.default;
  22. }
  23. }]);
  24. function Anchors(prefix) {
  25. (0, _classCallCheck2.default)(this, Anchors);
  26. (0, _defineProperty2.default)(this, "map", {});
  27. this.prefix = prefix;
  28. }
  29. (0, _createClass2.default)(Anchors, [{
  30. key: "createAlias",
  31. value: function createAlias(node, name) {
  32. this.setAnchor(node, name);
  33. return new _Alias.default(node);
  34. }
  35. }, {
  36. key: "createMergePair",
  37. value: function createMergePair() {
  38. var _this = this;
  39. var merge = new _Merge.default();
  40. for (var _len = arguments.length, sources = new Array(_len), _key = 0; _key < _len; _key++) {
  41. sources[_key] = arguments[_key];
  42. }
  43. merge.value.items = sources.map(function (s) {
  44. if (s instanceof _Alias.default) {
  45. if (s.source instanceof _Map.default) return s;
  46. } else if (s instanceof _Map.default) {
  47. return _this.createAlias(s);
  48. }
  49. throw new Error('Merge sources must be Map nodes or their Aliases');
  50. });
  51. return merge;
  52. }
  53. }, {
  54. key: "getName",
  55. value: function getName(node) {
  56. var map = this.map;
  57. return Object.keys(map).find(function (a) {
  58. return map[a] === node;
  59. });
  60. }
  61. }, {
  62. key: "getNode",
  63. value: function getNode(name) {
  64. return this.map[name];
  65. }
  66. }, {
  67. key: "newName",
  68. value: function newName(prefix) {
  69. if (!prefix) prefix = this.prefix;
  70. var names = Object.keys(this.map);
  71. for (var i = 1; true; ++i) {
  72. var name = "".concat(prefix).concat(i);
  73. if (!names.includes(name)) return name;
  74. }
  75. } // During parsing, map & aliases contain CST nodes
  76. }, {
  77. key: "resolveNodes",
  78. value: function resolveNodes() {
  79. var map = this.map,
  80. _cstAliases = this._cstAliases;
  81. Object.keys(map).forEach(function (a) {
  82. map[a] = map[a].resolved;
  83. });
  84. _cstAliases.forEach(function (a) {
  85. a.source = a.source.resolved;
  86. });
  87. delete this._cstAliases;
  88. }
  89. }, {
  90. key: "setAnchor",
  91. value: function setAnchor(node, name) {
  92. if (node != null && !Anchors.validAnchorNode(node)) {
  93. throw new Error('Anchors may only be set for Scalar, Seq and Map nodes');
  94. }
  95. if (name && /[\x00-\x19\s,[\]{}]/.test(name)) {
  96. throw new Error('Anchor names must not contain whitespace or control characters');
  97. }
  98. var map = this.map;
  99. var prev = node && Object.keys(map).find(function (a) {
  100. return map[a] === node;
  101. });
  102. if (prev) {
  103. if (!name) {
  104. return prev;
  105. } else if (prev !== name) {
  106. delete map[prev];
  107. map[name] = node;
  108. }
  109. } else {
  110. if (!name) {
  111. if (!node) return null;
  112. name = this.newName();
  113. }
  114. map[name] = node;
  115. }
  116. return name;
  117. }
  118. }]);
  119. return Anchors;
  120. }();
  121. exports.default = Anchors;