@speclynx/apidom-parser-adapter-yaml-1-2 1.12.2 → 2.1.0
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.
- package/CHANGELOG.md +24 -0
- package/NOTICE +16 -7
- package/README.md +34 -7
- package/dist/167.apidom-parser-adapter-yaml-1-2.browser.min.js +1 -1
- package/dist/451.apidom-parser-adapter-yaml-1-2.browser.min.js +1 -1
- package/dist/apidom-parser-adapter-yaml-1-2.browser.js +19340 -16731
- package/dist/apidom-parser-adapter-yaml-1-2.browser.min.js +1 -1
- package/package.json +10 -9
- package/src/adapter.cjs +28 -16
- package/src/adapter.mjs +25 -15
- package/src/tree-sitter/index.cjs +44 -0
- package/src/tree-sitter/index.mjs +38 -0
- package/src/{lexical-analysis → tree-sitter/lexical-analysis}/index.cjs +1 -1
- package/src/{lexical-analysis → tree-sitter/lexical-analysis}/index.mjs +1 -1
- package/src/tree-sitter/syntactic-analysis/CstTransformer.cjs +625 -0
- package/src/tree-sitter/syntactic-analysis/CstTransformer.mjs +618 -0
- package/src/tree-sitter/syntactic-analysis/YamlAstTransformer.cjs +271 -0
- package/src/tree-sitter/syntactic-analysis/YamlAstTransformer.mjs +263 -0
- package/src/tree-sitter/syntactic-analysis/ast/Error.cjs +30 -0
- package/src/tree-sitter/syntactic-analysis/ast/Error.mjs +24 -0
- package/src/tree-sitter/syntactic-analysis/ast/Literal.cjs +27 -0
- package/src/tree-sitter/syntactic-analysis/ast/Literal.mjs +21 -0
- package/src/tree-sitter/syntactic-analysis/ast/Node.cjs +60 -0
- package/src/tree-sitter/syntactic-analysis/ast/Node.mjs +56 -0
- package/src/tree-sitter/syntactic-analysis/ast/ParseResult.cjs +17 -0
- package/src/tree-sitter/syntactic-analysis/ast/ParseResult.mjs +12 -0
- package/src/tree-sitter/syntactic-analysis/ast/anchors-aliases/ReferenceManager.cjs +23 -0
- package/src/tree-sitter/syntactic-analysis/ast/anchors-aliases/ReferenceManager.mjs +18 -0
- package/src/tree-sitter/syntactic-analysis/ast/errors/YamlError.cjs +10 -0
- package/src/tree-sitter/syntactic-analysis/ast/errors/YamlError.mjs +7 -0
- package/src/tree-sitter/syntactic-analysis/ast/errors/YamlSchemaError.cjs +11 -0
- package/src/tree-sitter/syntactic-analysis/ast/errors/YamlSchemaError.mjs +6 -0
- package/src/tree-sitter/syntactic-analysis/ast/errors/YamlTagError.cjs +43 -0
- package/src/tree-sitter/syntactic-analysis/ast/errors/YamlTagError.mjs +37 -0
- package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlAlias.cjs +27 -0
- package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlAlias.mjs +21 -0
- package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlAnchor.cjs +27 -0
- package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlAnchor.mjs +21 -0
- package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlCollection.cjs +11 -0
- package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlCollection.mjs +6 -0
- package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlComment.cjs +27 -0
- package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlComment.mjs +21 -0
- package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlDirective.cjs +39 -0
- package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlDirective.mjs +32 -0
- package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlDocument.cjs +13 -0
- package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlDocument.mjs +8 -0
- package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlKeyValuePair.cjs +48 -0
- package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlKeyValuePair.mjs +42 -0
- package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlMapping.cjs +20 -0
- package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlMapping.mjs +15 -0
- package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlNode.cjs +35 -0
- package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlNode.mjs +29 -0
- package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlScalar.cjs +27 -0
- package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlScalar.mjs +21 -0
- package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlSequence.cjs +23 -0
- package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlSequence.mjs +18 -0
- package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlStream.cjs +20 -0
- package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlStream.mjs +15 -0
- package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlStyle.cjs +27 -0
- package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlStyle.mjs +24 -0
- package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlTag.cjs +38 -0
- package/src/tree-sitter/syntactic-analysis/ast/nodes/YamlTag.mjs +35 -0
- package/src/tree-sitter/syntactic-analysis/ast/nodes/predicates.cjs +26 -0
- package/src/tree-sitter/syntactic-analysis/ast/nodes/predicates.mjs +14 -0
- package/src/tree-sitter/syntactic-analysis/ast/schemas/ScalarTag.cjs +33 -0
- package/src/tree-sitter/syntactic-analysis/ast/schemas/ScalarTag.mjs +29 -0
- package/src/tree-sitter/syntactic-analysis/ast/schemas/Tag.cjs +20 -0
- package/src/tree-sitter/syntactic-analysis/ast/schemas/Tag.mjs +16 -0
- package/src/tree-sitter/syntactic-analysis/ast/schemas/canonical-format.cjs +127 -0
- package/src/tree-sitter/syntactic-analysis/ast/schemas/canonical-format.mjs +122 -0
- package/src/tree-sitter/syntactic-analysis/ast/schemas/failsafe/GenericMapping.cjs +14 -0
- package/src/tree-sitter/syntactic-analysis/ast/schemas/failsafe/GenericMapping.mjs +9 -0
- package/src/tree-sitter/syntactic-analysis/ast/schemas/failsafe/GenericSequence.cjs +14 -0
- package/src/tree-sitter/syntactic-analysis/ast/schemas/failsafe/GenericSequence.mjs +9 -0
- package/src/tree-sitter/syntactic-analysis/ast/schemas/failsafe/GenericString.cjs +10 -0
- package/src/tree-sitter/syntactic-analysis/ast/schemas/failsafe/GenericString.mjs +5 -0
- package/src/tree-sitter/syntactic-analysis/ast/schemas/failsafe/index.cjs +116 -0
- package/src/tree-sitter/syntactic-analysis/ast/schemas/failsafe/index.mjs +111 -0
- package/src/tree-sitter/syntactic-analysis/ast/schemas/json/Boolean.cjs +19 -0
- package/src/tree-sitter/syntactic-analysis/ast/schemas/json/Boolean.mjs +14 -0
- package/src/tree-sitter/syntactic-analysis/ast/schemas/json/FloatingPoint.cjs +19 -0
- package/src/tree-sitter/syntactic-analysis/ast/schemas/json/FloatingPoint.mjs +14 -0
- package/src/tree-sitter/syntactic-analysis/ast/schemas/json/Integer.cjs +19 -0
- package/src/tree-sitter/syntactic-analysis/ast/schemas/json/Integer.mjs +14 -0
- package/src/tree-sitter/syntactic-analysis/ast/schemas/json/Null.cjs +18 -0
- package/src/tree-sitter/syntactic-analysis/ast/schemas/json/Null.mjs +13 -0
- package/src/tree-sitter/syntactic-analysis/ast/schemas/json/index.cjs +43 -0
- package/src/tree-sitter/syntactic-analysis/ast/schemas/json/index.mjs +38 -0
- package/src/tree-sitter/syntactic-analysis/index.cjs +39 -0
- package/src/tree-sitter/syntactic-analysis/index.mjs +33 -0
- package/src/yaml/index.cjs +31 -0
- package/src/yaml/index.mjs +26 -0
- package/types/apidom-parser-adapter-yaml-1-2.d.ts +11 -3
- package/src/syntactic-analysis/TreeCursorIterator.cjs +0 -93
- package/src/syntactic-analysis/TreeCursorIterator.mjs +0 -88
- package/src/syntactic-analysis/TreeCursorSyntaxNode.cjs +0 -80
- package/src/syntactic-analysis/TreeCursorSyntaxNode.mjs +0 -76
- package/src/syntactic-analysis/indirect/index.cjs +0 -51
- package/src/syntactic-analysis/indirect/index.mjs +0 -44
- package/src/syntactic-analysis/indirect/visitors/CstVisitor.cjs +0 -553
- package/src/syntactic-analysis/indirect/visitors/CstVisitor.mjs +0 -547
- package/src/syntactic-analysis/indirect/visitors/YamlAstVisitor.cjs +0 -164
- 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,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;
|