暫無描述

Node.js 2.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. 'use strict';
  2. const ALIAS = Symbol.for('yaml.alias');
  3. const DOC = Symbol.for('yaml.document');
  4. const MAP = Symbol.for('yaml.map');
  5. const PAIR = Symbol.for('yaml.pair');
  6. const SCALAR = Symbol.for('yaml.scalar');
  7. const SEQ = Symbol.for('yaml.seq');
  8. const NODE_TYPE = Symbol.for('yaml.node.type');
  9. const isAlias = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === ALIAS;
  10. const isDocument = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === DOC;
  11. const isMap = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === MAP;
  12. const isPair = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === PAIR;
  13. const isScalar = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SCALAR;
  14. const isSeq = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SEQ;
  15. function isCollection(node) {
  16. if (node && typeof node === 'object')
  17. switch (node[NODE_TYPE]) {
  18. case MAP:
  19. case SEQ:
  20. return true;
  21. }
  22. return false;
  23. }
  24. function isNode(node) {
  25. if (node && typeof node === 'object')
  26. switch (node[NODE_TYPE]) {
  27. case ALIAS:
  28. case MAP:
  29. case SCALAR:
  30. case SEQ:
  31. return true;
  32. }
  33. return false;
  34. }
  35. const hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor;
  36. class NodeBase {
  37. constructor(type) {
  38. Object.defineProperty(this, NODE_TYPE, { value: type });
  39. }
  40. /** Create a copy of this node. */
  41. clone() {
  42. const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));
  43. if (this.range)
  44. copy.range = this.range.slice();
  45. return copy;
  46. }
  47. }
  48. exports.ALIAS = ALIAS;
  49. exports.DOC = DOC;
  50. exports.MAP = MAP;
  51. exports.NODE_TYPE = NODE_TYPE;
  52. exports.NodeBase = NodeBase;
  53. exports.PAIR = PAIR;
  54. exports.SCALAR = SCALAR;
  55. exports.SEQ = SEQ;
  56. exports.hasAnchor = hasAnchor;
  57. exports.isAlias = isAlias;
  58. exports.isCollection = isCollection;
  59. exports.isDocument = isDocument;
  60. exports.isMap = isMap;
  61. exports.isNode = isNode;
  62. exports.isPair = isPair;
  63. exports.isScalar = isScalar;
  64. exports.isSeq = isSeq;