@speclynx/apidom-parser-adapter-yaml-1-2 1.12.2 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/NOTICE +16 -7
  3. package/README.md +34 -7
  4. package/dist/167.apidom-parser-adapter-yaml-1-2.browser.min.js +1 -1
  5. package/dist/451.apidom-parser-adapter-yaml-1-2.browser.min.js +1 -1
  6. package/dist/apidom-parser-adapter-yaml-1-2.browser.js +19340 -16731
  7. package/dist/apidom-parser-adapter-yaml-1-2.browser.min.js +1 -1
  8. package/package.json +10 -9
  9. package/src/adapter.cjs +28 -16
  10. package/src/adapter.mjs +25 -15
  11. package/src/tree-sitter/index.cjs +44 -0
  12. package/src/tree-sitter/index.mjs +38 -0
  13. package/src/{lexical-analysis → tree-sitter/lexical-analysis}/index.cjs +1 -1
  14. package/src/{lexical-analysis → tree-sitter/lexical-analysis}/index.mjs +1 -1
  15. package/src/tree-sitter/syntactic-analysis/CstTransformer.cjs +625 -0
  16. package/src/tree-sitter/syntactic-analysis/CstTransformer.mjs +618 -0
  17. package/src/tree-sitter/syntactic-analysis/YamlAstTransformer.cjs +271 -0
  18. package/src/tree-sitter/syntactic-analysis/YamlAstTransformer.mjs +263 -0
  19. package/src/tree-sitter/syntactic-analysis/ast/Error.cjs +30 -0
  20. package/src/tree-sitter/syntactic-analysis/ast/Error.mjs +24 -0
  21. package/src/tree-sitter/syntactic-analysis/ast/Literal.cjs +27 -0
  22. package/src/tree-sitter/syntactic-analysis/ast/Literal.mjs +21 -0
  23. package/src/tree-sitter/syntactic-analysis/ast/Node.cjs +60 -0
  24. package/src/tree-sitter/syntactic-analysis/ast/Node.mjs +56 -0
  25. package/src/tree-sitter/syntactic-analysis/ast/ParseResult.cjs +17 -0
  26. package/src/tree-sitter/syntactic-analysis/ast/ParseResult.mjs +12 -0
  27. package/src/tree-sitter/syntactic-analysis/ast/anchors-aliases/ReferenceManager.cjs +23 -0
  28. package/src/tree-sitter/syntactic-analysis/ast/anchors-aliases/ReferenceManager.mjs +18 -0
  29. package/src/tree-sitter/syntactic-analysis/ast/errors/YamlError.cjs +10 -0
  30. package/src/tree-sitter/syntactic-analysis/ast/errors/YamlError.mjs +7 -0
  31. package/src/tree-sitter/syntactic-analysis/ast/errors/YamlSchemaError.cjs +11 -0
  32. package/src/tree-sitter/syntactic-analysis/ast/errors/YamlSchemaError.mjs +6 -0
  33. package/src/tree-sitter/syntactic-analysis/ast/errors/YamlTagError.cjs +43 -0
  34. package/src/tree-sitter/syntactic-analysis/ast/errors/YamlTagError.mjs +37 -0
  35. package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlAlias.cjs +27 -0
  36. package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlAlias.mjs +21 -0
  37. package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlAnchor.cjs +27 -0
  38. package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlAnchor.mjs +21 -0
  39. package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlCollection.cjs +11 -0
  40. package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlCollection.mjs +6 -0
  41. package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlComment.cjs +27 -0
  42. package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlComment.mjs +21 -0
  43. package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlDirective.cjs +39 -0
  44. package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlDirective.mjs +32 -0
  45. package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlDocument.cjs +13 -0
  46. package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlDocument.mjs +8 -0
  47. package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlKeyValuePair.cjs +48 -0
  48. package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlKeyValuePair.mjs +42 -0
  49. package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlMapping.cjs +20 -0
  50. package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlMapping.mjs +15 -0
  51. package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlNode.cjs +35 -0
  52. package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlNode.mjs +29 -0
  53. package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlScalar.cjs +27 -0
  54. package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlScalar.mjs +21 -0
  55. package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlSequence.cjs +23 -0
  56. package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlSequence.mjs +18 -0
  57. package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlStream.cjs +20 -0
  58. package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlStream.mjs +15 -0
  59. package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlStyle.cjs +27 -0
  60. package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlStyle.mjs +24 -0
  61. package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlTag.cjs +38 -0
  62. package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlTag.mjs +35 -0
  63. package/src/tree-sitter/syntactic-analysis/ast/nodes/predicates.cjs +26 -0
  64. package/src/tree-sitter/syntactic-analysis/ast/nodes/predicates.mjs +14 -0
  65. package/src/tree-sitter/syntactic-analysis/ast/schemas/ScalarTag.cjs +33 -0
  66. package/src/tree-sitter/syntactic-analysis/ast/schemas/ScalarTag.mjs +29 -0
  67. package/src/tree-sitter/syntactic-analysis/ast/schemas/Tag.cjs +20 -0
  68. package/src/tree-sitter/syntactic-analysis/ast/schemas/Tag.mjs +16 -0
  69. package/src/tree-sitter/syntactic-analysis/ast/schemas/canonical-format.cjs +127 -0
  70. package/src/tree-sitter/syntactic-analysis/ast/schemas/canonical-format.mjs +122 -0
  71. package/src/tree-sitter/syntactic-analysis/ast/schemas/failsafe/GenericMapping.cjs +14 -0
  72. package/src/tree-sitter/syntactic-analysis/ast/schemas/failsafe/GenericMapping.mjs +9 -0
  73. package/src/tree-sitter/syntactic-analysis/ast/schemas/failsafe/GenericSequence.cjs +14 -0
  74. package/src/tree-sitter/syntactic-analysis/ast/schemas/failsafe/GenericSequence.mjs +9 -0
  75. package/src/tree-sitter/syntactic-analysis/ast/schemas/failsafe/GenericString.cjs +10 -0
  76. package/src/tree-sitter/syntactic-analysis/ast/schemas/failsafe/GenericString.mjs +5 -0
  77. package/src/tree-sitter/syntactic-analysis/ast/schemas/failsafe/index.cjs +116 -0
  78. package/src/tree-sitter/syntactic-analysis/ast/schemas/failsafe/index.mjs +111 -0
  79. package/src/tree-sitter/syntactic-analysis/ast/schemas/json/Boolean.cjs +19 -0
  80. package/src/tree-sitter/syntactic-analysis/ast/schemas/json/Boolean.mjs +14 -0
  81. package/src/tree-sitter/syntactic-analysis/ast/schemas/json/FloatingPoint.cjs +19 -0
  82. package/src/tree-sitter/syntactic-analysis/ast/schemas/json/FloatingPoint.mjs +14 -0
  83. package/src/tree-sitter/syntactic-analysis/ast/schemas/json/Integer.cjs +19 -0
  84. package/src/tree-sitter/syntactic-analysis/ast/schemas/json/Integer.mjs +14 -0
  85. package/src/tree-sitter/syntactic-analysis/ast/schemas/json/Null.cjs +18 -0
  86. package/src/tree-sitter/syntactic-analysis/ast/schemas/json/Null.mjs +13 -0
  87. package/src/tree-sitter/syntactic-analysis/ast/schemas/json/index.cjs +43 -0
  88. package/src/tree-sitter/syntactic-analysis/ast/schemas/json/index.mjs +38 -0
  89. package/src/tree-sitter/syntactic-analysis/index.cjs +39 -0
  90. package/src/tree-sitter/syntactic-analysis/index.mjs +33 -0
  91. package/src/yaml/index.cjs +31 -0
  92. package/src/yaml/index.mjs +26 -0
  93. package/types/apidom-parser-adapter-yaml-1-2.d.ts +11 -3
  94. package/src/syntactic-analysis/TreeCursorIterator.cjs +0 -93
  95. package/src/syntactic-analysis/TreeCursorIterator.mjs +0 -88
  96. package/src/syntactic-analysis/TreeCursorSyntaxNode.cjs +0 -80
  97. package/src/syntactic-analysis/TreeCursorSyntaxNode.mjs +0 -76
  98. package/src/syntactic-analysis/indirect/index.cjs +0 -51
  99. package/src/syntactic-analysis/indirect/index.mjs +0 -44
  100. package/src/syntactic-analysis/indirect/visitors/CstVisitor.cjs +0 -553
  101. package/src/syntactic-analysis/indirect/visitors/CstVisitor.mjs +0 -547
  102. package/src/syntactic-analysis/indirect/visitors/YamlAstVisitor.cjs +0 -164
  103. package/src/syntactic-analysis/indirect/visitors/YamlAstVisitor.mjs +0 -158
@@ -0,0 +1,122 @@
1
+ import { tail, compose, pathOr, map, concat, transduce, pipe, trim, split, join, curry } from 'ramda';
2
+ import { isInteger, trimStart, trimEnd, isUndefined, trimCharsStart, isEmptyString, repeatStr, concatRight } from 'ramda-adjunct';
3
+ import { unraw } from 'unraw';
4
+
5
+ /**
6
+ * Helpers.
7
+ */
8
+
9
+ const blockStyleRegExp = /^(?<style>[|>])(?<chomping>[+-]?)(?<indentation>[0-9]*)\s/;
10
+ const getIndentationIndicator = content => {
11
+ const matches = content.match(blockStyleRegExp);
12
+ const indicator = pathOr('', ['groups', 'indentation'], matches);
13
+ return isEmptyString(indicator) ? undefined : parseInt(indicator, 10);
14
+ };
15
+ const getIndentation = content => {
16
+ const explicitIndentationIndicator = getIndentationIndicator(content);
17
+
18
+ // we have explicit indentation indicator
19
+ if (isInteger(explicitIndentationIndicator)) {
20
+ return repeatStr(' ', explicitIndentationIndicator);
21
+ }
22
+
23
+ // we assume indentation indicator from first line
24
+ const firstLine = pathOr('', [1], content.split('\n'));
25
+ const implicitIndentationIndicator = pathOr(0, ['groups', 'indentation', 'length'], firstLine.match(/^(?<indentation>[ ]*)/));
26
+ return repeatStr(' ', implicitIndentationIndicator);
27
+ };
28
+ const getChompingIndicator = content => {
29
+ const matches = content.match(blockStyleRegExp);
30
+ const indicator = pathOr('', ['groups', 'chomping'], matches);
31
+ return isEmptyString(indicator) ? undefined : indicator;
32
+ };
33
+ const chomp = (indicator, content) => {
34
+ // clip (single newline at end)
35
+ if (isUndefined(indicator)) {
36
+ return `${trimEnd(content)}\n`;
37
+ }
38
+ // strip (no newline at end)
39
+ if (indicator === '-') {
40
+ return trimEnd(content);
41
+ }
42
+ // keep (all newlines from end)
43
+ if (indicator === '+') {
44
+ return content;
45
+ }
46
+ return content;
47
+ };
48
+
49
+ /**
50
+ * Normalizes lines breaks.
51
+ * https://yaml.org/spec/1.2/spec.html#line%20break/normalization/
52
+ */
53
+ // @ts-ignore
54
+ const normalizeLineBreaks = val => val.replace(/\r\n/g, '\n');
55
+
56
+ // prevent escaped line breaks from being converted to a space
57
+ const preventLineBreakCollapseToSpace = val => val.replace(/\\\n\s*/g, '');
58
+
59
+ // collapse line breaks into spaces
60
+ const collapseLineBreakToSpace = val => {
61
+ /**
62
+ * Safari doesn't support negative lookbehind, thus we use mimicking technique:
63
+ *
64
+ * - https://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript
65
+ *
66
+ * Ideally we want to use following replace, but that's not currently possible:
67
+ *
68
+ * .replace(/[^\n]\n([^\n]+)/g, (match: string, p1: string) => ` ${p1.trimLeft()}`)
69
+ */
70
+ return val.replace(/(\n)?\n([^\n]+)/g, (match, p1, p2) => p1 ? match : ` ${p2.trimStart()}`).replace(/[\n]{2}/g, '\n');
71
+ };
72
+ const removeQuotes = curry((quoteType, val) => val.replace(new RegExp(`^${quoteType}`), '').replace(new RegExp(`${quoteType}$`), ''));
73
+
74
+ /**
75
+ * Formats Flow Scalar Plain style.
76
+ * https://yaml.org/spec/1.2/spec.html#id2788859
77
+ */
78
+ export const formatFlowPlain = pipe(normalizeLineBreaks, trim, collapseLineBreakToSpace, split('\n'), map(trimStart), join('\n'));
79
+
80
+ /**
81
+ * Formats Flow Scalar Single-Quoted style.
82
+ * https://yaml.org/spec/1.2/spec.html#id2788097
83
+ */
84
+
85
+ export const formatFlowSingleQuoted = pipe(normalizeLineBreaks, trim, collapseLineBreakToSpace, split('\n'), map(trimStart), join('\n'), removeQuotes("'"));
86
+
87
+ /**
88
+ * Formats Flow Scalar Double-Quoted style.
89
+ * https://yaml.org/spec/1.2/spec.html#id2787109
90
+ */
91
+ export const formatFlowDoubleQuoted = pipe(normalizeLineBreaks, trim, preventLineBreakCollapseToSpace, collapseLineBreakToSpace, unraw, split('\n'), map(trimStart), join('\n'), removeQuotes('"'));
92
+
93
+ /**
94
+ * Formats Block Scalar Literal style.
95
+ * https://yaml.org/spec/1.2/spec.html#id2795688
96
+ */
97
+ export const formatBlockLiteral = content => {
98
+ const indentation = getIndentation(content);
99
+ const chompingIndicator = getChompingIndicator(content);
100
+ const normalized = normalizeLineBreaks(content);
101
+ const lines = tail(normalized.split('\n')); // first line only contains indicators
102
+ const transducer = compose(map(trimCharsStart(indentation)), map(concatRight('\n')));
103
+ // @ts-ignore
104
+ const deindented = transduce(transducer, concat, '', lines);
105
+ return chomp(chompingIndicator, deindented);
106
+ };
107
+
108
+ /**
109
+ * Formats BLock Scalar Folded style.
110
+ * https://yaml.org/spec/1.2/spec.html#id2796251
111
+ */
112
+ export const formatBlockFolded = content => {
113
+ const indentation = getIndentation(content);
114
+ const chompingIndicator = getChompingIndicator(content);
115
+ const normalized = normalizeLineBreaks(content);
116
+ const lines = tail(normalized.split('\n')); // first line only contains indicators
117
+ const transducer = compose(map(trimCharsStart(indentation)), map(concatRight('\n')));
118
+ // @ts-ignore
119
+ const deindented = transduce(transducer, concat, '', lines);
120
+ const collapsed = collapseLineBreakToSpace(deindented);
121
+ return chomp(chompingIndicator, collapsed);
122
+ };
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _Tag = _interopRequireDefault(require("../Tag.cjs"));
7
+ var _YamlTag = require("../../nodes/YamlTag.cjs");
8
+ class GenericMapping extends _Tag.default {
9
+ static uri = 'tag:yaml.org,2002:map';
10
+ test(node) {
11
+ return node.tag.kind === _YamlTag.YamlNodeKind.Mapping;
12
+ }
13
+ }
14
+ var _default = exports.default = GenericMapping;
@@ -0,0 +1,9 @@
1
+ import Tag from "../Tag.mjs";
2
+ import { YamlNodeKind } from "../../nodes/YamlTag.mjs";
3
+ class GenericMapping extends Tag {
4
+ static uri = 'tag:yaml.org,2002:map';
5
+ test(node) {
6
+ return node.tag.kind === YamlNodeKind.Mapping;
7
+ }
8
+ }
9
+ export default GenericMapping;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _Tag = _interopRequireDefault(require("../Tag.cjs"));
7
+ var _YamlTag = require("../../nodes/YamlTag.cjs");
8
+ class GenericSequence extends _Tag.default {
9
+ static uri = 'tag:yaml.org,2002:seq';
10
+ test(node) {
11
+ return node.tag.kind === _YamlTag.YamlNodeKind.Sequence;
12
+ }
13
+ }
14
+ var _default = exports.default = GenericSequence;
@@ -0,0 +1,9 @@
1
+ import Tag from "../Tag.mjs";
2
+ import { YamlNodeKind } from "../../nodes/YamlTag.mjs";
3
+ class GenericSequence extends Tag {
4
+ static uri = 'tag:yaml.org,2002:seq';
5
+ test(node) {
6
+ return node.tag.kind === YamlNodeKind.Sequence;
7
+ }
8
+ }
9
+ export default GenericSequence;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _Tag = _interopRequireDefault(require("../Tag.cjs"));
7
+ class GenericString extends _Tag.default {
8
+ static uri = 'tag:yaml.org,2002:str';
9
+ }
10
+ var _default = exports.default = GenericString;
@@ -0,0 +1,5 @@
1
+ import Tag from "../Tag.mjs";
2
+ class GenericString extends Tag {
3
+ static uri = 'tag:yaml.org,2002:str';
4
+ }
5
+ export default GenericString;
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _YamlTagError = _interopRequireDefault(require("../../errors/YamlTagError.cjs"));
7
+ var _YamlTag = require("../../nodes/YamlTag.cjs");
8
+ var _GenericMapping = _interopRequireDefault(require("./GenericMapping.cjs"));
9
+ var _GenericSequence = _interopRequireDefault(require("./GenericSequence.cjs"));
10
+ var _GenericString = _interopRequireDefault(require("./GenericString.cjs"));
11
+ var _ScalarTag = _interopRequireDefault(require("../ScalarTag.cjs"));
12
+ /**
13
+ * @public
14
+ */
15
+ class FailsafeSchema {
16
+ tags;
17
+ tagDirectives;
18
+ constructor() {
19
+ this.tags = [];
20
+ this.tagDirectives = [];
21
+ this.registerTag(new _GenericMapping.default());
22
+ this.registerTag(new _GenericSequence.default());
23
+ this.registerTag(new _GenericString.default());
24
+ }
25
+ toSpecificTagName(node) {
26
+ let specificTagName = node.tag.explicitName;
27
+ if (node.tag.explicitName === '!') {
28
+ // non-specific tag; we assume tag by kind
29
+ if (node.tag.kind === _YamlTag.YamlNodeKind.Scalar) {
30
+ specificTagName = _GenericString.default.uri;
31
+ } else if (node.tag.kind === _YamlTag.YamlNodeKind.Sequence) {
32
+ specificTagName = _GenericSequence.default.uri;
33
+ } else if (node.tag.kind === _YamlTag.YamlNodeKind.Mapping) {
34
+ specificTagName = _GenericMapping.default.uri;
35
+ }
36
+ } else if (node.tag.explicitName.startsWith('!<')) {
37
+ // verbatim form
38
+ specificTagName = node.tag.explicitName.replace(/^!</, '').replace(/>$/, '');
39
+ } else if (node.tag.explicitName.startsWith('!!')) {
40
+ // shorthand notation
41
+ specificTagName = `tag:yaml.org,2002:${node.tag.explicitName.replace(/^!!/, '')}`;
42
+ }
43
+ return specificTagName;
44
+ }
45
+ registerTagDirective(tagDirective) {
46
+ this.tagDirectives.push({
47
+ // @ts-ignore
48
+ handle: tagDirective.parameters.handle,
49
+ // @ts-ignore
50
+ prefix: tagDirective.parameters.prefix
51
+ });
52
+ }
53
+ registerTag(tag, beginning = false) {
54
+ if (beginning) {
55
+ this.tags.unshift(tag);
56
+ } else {
57
+ this.tags.push(tag);
58
+ }
59
+ return this;
60
+ }
61
+ overrideTag(tag) {
62
+ this.tags = this.tags.filter(itag => itag.tag === tag.tag);
63
+ this.tags.push(tag);
64
+ return this;
65
+ }
66
+ resolve(node) {
67
+ const specificTagName = this.toSpecificTagName(node);
68
+
69
+ // leave this node unresolved
70
+ if (specificTagName === '?') {
71
+ return node;
72
+ }
73
+
74
+ // turn scalar nodes into canonical format before resolving
75
+ let canonicalNode = node;
76
+ if (_ScalarTag.default.test(node)) {
77
+ canonicalNode = _ScalarTag.default.canonicalFormat(node);
78
+ }
79
+ const tag = this.tags.find(itag => itag?.tag === specificTagName);
80
+
81
+ // mechanism for resolving node (tag implementation) not found
82
+ if (typeof tag === 'undefined') {
83
+ throw new _YamlTagError.default(`Tag "${specificTagName}" was not recognized.`, {
84
+ specificTagName,
85
+ explicitTagName: node.tag.explicitName,
86
+ tagKind: node.tag.kind,
87
+ tagStartLine: node.tag.startLine,
88
+ tagStartCharacter: node.tag.startCharacter,
89
+ tagStartOffset: node.tag.startOffset,
90
+ tagEndLine: node.tag.endLine,
91
+ tagEndCharacter: node.tag.endCharacter,
92
+ tagEndOffset: node.tag.endOffset,
93
+ node: node.clone()
94
+ });
95
+ }
96
+
97
+ // node content is not compatible with resolving mechanism (tag implementation)
98
+ if (!tag.test(canonicalNode)) {
99
+ throw new _YamlTagError.default(`Node couldn't be resolved against the tag "${specificTagName}"`, {
100
+ specificTagName,
101
+ explicitTagName: node.tag.explicitName,
102
+ tagKind: node.tag.kind,
103
+ tagStartLine: node.tag.startLine,
104
+ tagStartCharacter: node.tag.startCharacter,
105
+ tagStartOffset: node.tag.startOffset,
106
+ tagEndLine: node.tag.endLine,
107
+ tagEndCharacter: node.tag.endCharacter,
108
+ tagEndOffset: node.tag.endOffset,
109
+ nodeCanonicalContent: canonicalNode.content,
110
+ node: node.clone()
111
+ });
112
+ }
113
+ return tag.resolve(canonicalNode);
114
+ }
115
+ }
116
+ var _default = exports.default = FailsafeSchema;
@@ -0,0 +1,111 @@
1
+ import YamlTagError from "../../errors/YamlTagError.mjs";
2
+ import { YamlNodeKind } from "../../nodes/YamlTag.mjs";
3
+ import GenericMappingTag from "./GenericMapping.mjs";
4
+ import GenericSequenceTag from "./GenericSequence.mjs";
5
+ import GenericStringTag from "./GenericString.mjs";
6
+ import ScalarTag from "../ScalarTag.mjs";
7
+ /**
8
+ * @public
9
+ */
10
+ class FailsafeSchema {
11
+ tags;
12
+ tagDirectives;
13
+ constructor() {
14
+ this.tags = [];
15
+ this.tagDirectives = [];
16
+ this.registerTag(new GenericMappingTag());
17
+ this.registerTag(new GenericSequenceTag());
18
+ this.registerTag(new GenericStringTag());
19
+ }
20
+ toSpecificTagName(node) {
21
+ let specificTagName = node.tag.explicitName;
22
+ if (node.tag.explicitName === '!') {
23
+ // non-specific tag; we assume tag by kind
24
+ if (node.tag.kind === YamlNodeKind.Scalar) {
25
+ specificTagName = GenericStringTag.uri;
26
+ } else if (node.tag.kind === YamlNodeKind.Sequence) {
27
+ specificTagName = GenericSequenceTag.uri;
28
+ } else if (node.tag.kind === YamlNodeKind.Mapping) {
29
+ specificTagName = GenericMappingTag.uri;
30
+ }
31
+ } else if (node.tag.explicitName.startsWith('!<')) {
32
+ // verbatim form
33
+ specificTagName = node.tag.explicitName.replace(/^!</, '').replace(/>$/, '');
34
+ } else if (node.tag.explicitName.startsWith('!!')) {
35
+ // shorthand notation
36
+ specificTagName = `tag:yaml.org,2002:${node.tag.explicitName.replace(/^!!/, '')}`;
37
+ }
38
+ return specificTagName;
39
+ }
40
+ registerTagDirective(tagDirective) {
41
+ this.tagDirectives.push({
42
+ // @ts-ignore
43
+ handle: tagDirective.parameters.handle,
44
+ // @ts-ignore
45
+ prefix: tagDirective.parameters.prefix
46
+ });
47
+ }
48
+ registerTag(tag, beginning = false) {
49
+ if (beginning) {
50
+ this.tags.unshift(tag);
51
+ } else {
52
+ this.tags.push(tag);
53
+ }
54
+ return this;
55
+ }
56
+ overrideTag(tag) {
57
+ this.tags = this.tags.filter(itag => itag.tag === tag.tag);
58
+ this.tags.push(tag);
59
+ return this;
60
+ }
61
+ resolve(node) {
62
+ const specificTagName = this.toSpecificTagName(node);
63
+
64
+ // leave this node unresolved
65
+ if (specificTagName === '?') {
66
+ return node;
67
+ }
68
+
69
+ // turn scalar nodes into canonical format before resolving
70
+ let canonicalNode = node;
71
+ if (ScalarTag.test(node)) {
72
+ canonicalNode = ScalarTag.canonicalFormat(node);
73
+ }
74
+ const tag = this.tags.find(itag => itag?.tag === specificTagName);
75
+
76
+ // mechanism for resolving node (tag implementation) not found
77
+ if (typeof tag === 'undefined') {
78
+ throw new YamlTagError(`Tag "${specificTagName}" was not recognized.`, {
79
+ specificTagName,
80
+ explicitTagName: node.tag.explicitName,
81
+ tagKind: node.tag.kind,
82
+ tagStartLine: node.tag.startLine,
83
+ tagStartCharacter: node.tag.startCharacter,
84
+ tagStartOffset: node.tag.startOffset,
85
+ tagEndLine: node.tag.endLine,
86
+ tagEndCharacter: node.tag.endCharacter,
87
+ tagEndOffset: node.tag.endOffset,
88
+ node: node.clone()
89
+ });
90
+ }
91
+
92
+ // node content is not compatible with resolving mechanism (tag implementation)
93
+ if (!tag.test(canonicalNode)) {
94
+ throw new YamlTagError(`Node couldn't be resolved against the tag "${specificTagName}"`, {
95
+ specificTagName,
96
+ explicitTagName: node.tag.explicitName,
97
+ tagKind: node.tag.kind,
98
+ tagStartLine: node.tag.startLine,
99
+ tagStartCharacter: node.tag.startCharacter,
100
+ tagStartOffset: node.tag.startOffset,
101
+ tagEndLine: node.tag.endLine,
102
+ tagEndCharacter: node.tag.endCharacter,
103
+ tagEndOffset: node.tag.endOffset,
104
+ nodeCanonicalContent: canonicalNode.content,
105
+ node: node.clone()
106
+ });
107
+ }
108
+ return tag.resolve(canonicalNode);
109
+ }
110
+ }
111
+ export default FailsafeSchema;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _Tag = _interopRequireDefault(require("../Tag.cjs"));
7
+ class Boolean extends _Tag.default {
8
+ static uri = 'tag:yaml.org,2002:bool';
9
+ test(node) {
10
+ return /^(true|false)$/.test(node.content);
11
+ }
12
+ resolve(node) {
13
+ const content = node.content === 'true';
14
+ const nodeClone = node.clone();
15
+ nodeClone.content = content;
16
+ return nodeClone;
17
+ }
18
+ }
19
+ var _default = exports.default = Boolean;
@@ -0,0 +1,14 @@
1
+ import Tag from "../Tag.mjs";
2
+ class Boolean extends Tag {
3
+ static uri = 'tag:yaml.org,2002:bool';
4
+ test(node) {
5
+ return /^(true|false)$/.test(node.content);
6
+ }
7
+ resolve(node) {
8
+ const content = node.content === 'true';
9
+ const nodeClone = node.clone();
10
+ nodeClone.content = content;
11
+ return nodeClone;
12
+ }
13
+ }
14
+ export default Boolean;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _Tag = _interopRequireDefault(require("../Tag.cjs"));
7
+ class FloatingPoint extends _Tag.default {
8
+ static uri = 'tag:yaml.org,2002:float';
9
+ test(node) {
10
+ return /^-?(0|[1-9][0-9]*)(\.[0-9]*)?([eE][-+]?[0-9]+)?$/.test(node.content);
11
+ }
12
+ resolve(node) {
13
+ const content = parseFloat(node.content);
14
+ const nodeClone = node.clone();
15
+ nodeClone.content = content;
16
+ return nodeClone;
17
+ }
18
+ }
19
+ var _default = exports.default = FloatingPoint;
@@ -0,0 +1,14 @@
1
+ import Tag from "../Tag.mjs";
2
+ class FloatingPoint extends Tag {
3
+ static uri = 'tag:yaml.org,2002:float';
4
+ test(node) {
5
+ return /^-?(0|[1-9][0-9]*)(\.[0-9]*)?([eE][-+]?[0-9]+)?$/.test(node.content);
6
+ }
7
+ resolve(node) {
8
+ const content = parseFloat(node.content);
9
+ const nodeClone = node.clone();
10
+ nodeClone.content = content;
11
+ return nodeClone;
12
+ }
13
+ }
14
+ export default FloatingPoint;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _Tag = _interopRequireDefault(require("../Tag.cjs"));
7
+ class Integer extends _Tag.default {
8
+ static uri = 'tag:yaml.org,2002:int';
9
+ test(node) {
10
+ return /^-?(0|[1-9][0-9]*)$/.test(node.content);
11
+ }
12
+ resolve(node) {
13
+ const content = parseInt(node.content, 10);
14
+ const nodeClone = node.clone();
15
+ nodeClone.content = content;
16
+ return nodeClone;
17
+ }
18
+ }
19
+ var _default = exports.default = Integer;
@@ -0,0 +1,14 @@
1
+ import Tag from "../Tag.mjs";
2
+ class Integer extends Tag {
3
+ static uri = 'tag:yaml.org,2002:int';
4
+ test(node) {
5
+ return /^-?(0|[1-9][0-9]*)$/.test(node.content);
6
+ }
7
+ resolve(node) {
8
+ const content = parseInt(node.content, 10);
9
+ const nodeClone = node.clone();
10
+ nodeClone.content = content;
11
+ return nodeClone;
12
+ }
13
+ }
14
+ export default Integer;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _Tag = _interopRequireDefault(require("../Tag.cjs"));
7
+ class Null extends _Tag.default {
8
+ static uri = 'tag:yaml.org,2002:null';
9
+ test(node) {
10
+ return /^null$/.test(node.content);
11
+ }
12
+ resolve(node) {
13
+ const nodeClone = node.clone();
14
+ nodeClone.content = null;
15
+ return nodeClone;
16
+ }
17
+ }
18
+ var _default = exports.default = Null;
@@ -0,0 +1,13 @@
1
+ import Tag from "../Tag.mjs";
2
+ class Null extends Tag {
3
+ static uri = 'tag:yaml.org,2002:null';
4
+ test(node) {
5
+ return /^null$/.test(node.content);
6
+ }
7
+ resolve(node) {
8
+ const nodeClone = node.clone();
9
+ nodeClone.content = null;
10
+ return nodeClone;
11
+ }
12
+ }
13
+ export default Null;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _index = _interopRequireDefault(require("../failsafe/index.cjs"));
7
+ var _Boolean = _interopRequireDefault(require("./Boolean.cjs"));
8
+ var _FloatingPoint = _interopRequireDefault(require("./FloatingPoint.cjs"));
9
+ var _Integer = _interopRequireDefault(require("./Integer.cjs"));
10
+ var _Null = _interopRequireDefault(require("./Null.cjs"));
11
+ var _YamlTag = require("../../nodes/YamlTag.cjs");
12
+ var _GenericSequence = _interopRequireDefault(require("../failsafe/GenericSequence.cjs"));
13
+ var _GenericMapping = _interopRequireDefault(require("../failsafe/GenericMapping.cjs"));
14
+ /**
15
+ * @public
16
+ */
17
+ class JsonSchema extends _index.default {
18
+ constructor() {
19
+ super();
20
+ /**
21
+ * We're registering more specific tags before more generic ones from Failsafe schema.
22
+ */
23
+ this.registerTag(new _Boolean.default(), true);
24
+ this.registerTag(new _FloatingPoint.default(), true);
25
+ this.registerTag(new _Integer.default(), true);
26
+ this.registerTag(new _Null.default(), true);
27
+ }
28
+ toSpecificTagName(node) {
29
+ let specificTagName = super.toSpecificTagName(node);
30
+ if (specificTagName === '?') {
31
+ if (node.tag.vkind === _YamlTag.YamlNodeKind.Sequence) {
32
+ specificTagName = _GenericSequence.default.uri;
33
+ } else if (node.tag.kind === _YamlTag.YamlNodeKind.Mapping) {
34
+ specificTagName = _GenericMapping.default.uri;
35
+ } else if (node.tag.kind === _YamlTag.YamlNodeKind.Scalar) {
36
+ const foundTag = this.tags.find(tag => tag.test(node));
37
+ specificTagName = foundTag?.tag || '?';
38
+ }
39
+ }
40
+ return specificTagName;
41
+ }
42
+ }
43
+ var _default = exports.default = JsonSchema;
@@ -0,0 +1,38 @@
1
+ import FailsafeSchema from "../failsafe/index.mjs";
2
+ import BooleanTag from "./Boolean.mjs";
3
+ import FloatingPointTag from "./FloatingPoint.mjs";
4
+ import IntegerTag from "./Integer.mjs";
5
+ import NullTag from "./Null.mjs";
6
+ import { YamlNodeKind } from "../../nodes/YamlTag.mjs";
7
+ import GenericSequence from "../failsafe/GenericSequence.mjs";
8
+ import GenericMapping from "../failsafe/GenericMapping.mjs";
9
+ /**
10
+ * @public
11
+ */
12
+ class JsonSchema extends FailsafeSchema {
13
+ constructor() {
14
+ super();
15
+ /**
16
+ * We're registering more specific tags before more generic ones from Failsafe schema.
17
+ */
18
+ this.registerTag(new BooleanTag(), true);
19
+ this.registerTag(new FloatingPointTag(), true);
20
+ this.registerTag(new IntegerTag(), true);
21
+ this.registerTag(new NullTag(), true);
22
+ }
23
+ toSpecificTagName(node) {
24
+ let specificTagName = super.toSpecificTagName(node);
25
+ if (specificTagName === '?') {
26
+ if (node.tag.vkind === YamlNodeKind.Sequence) {
27
+ specificTagName = GenericSequence.uri;
28
+ } else if (node.tag.kind === YamlNodeKind.Mapping) {
29
+ specificTagName = GenericMapping.uri;
30
+ } else if (node.tag.kind === YamlNodeKind.Scalar) {
31
+ const foundTag = this.tags.find(tag => tag.test(node));
32
+ specificTagName = foundTag?.tag || '?';
33
+ }
34
+ }
35
+ return specificTagName;
36
+ }
37
+ }
38
+ export default JsonSchema;