source: node_modules/@swagger-api/apidom-ast/cjs/yaml/schemas/failsafe/index.cjs

main
Last change on this file was d24f17c, checked in by Aleksandar Panovski <apano77@…>, 15 months ago

Initial commit

  • Property mode set to 100644
File size: 3.8 KB
Line 
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4exports.__esModule = true;
5exports.default = void 0;
6var _ramda = require("ramda");
7var _YamlTagError = _interopRequireDefault(require("../../errors/YamlTagError.cjs"));
8var _YamlTag = require("../../nodes/YamlTag.cjs");
9var _GenericMapping = _interopRequireDefault(require("./GenericMapping.cjs"));
10var _GenericSequence = _interopRequireDefault(require("./GenericSequence.cjs"));
11var _GenericString = _interopRequireDefault(require("./GenericString.cjs"));
12var _ScalarTag = _interopRequireDefault(require("../ScalarTag.cjs"));
13class FailsafeSchema {
14 tags;
15 tagDirectives;
16 constructor() {
17 this.tags = [];
18 this.tagDirectives = [];
19 this.registerTag(new _GenericMapping.default());
20 this.registerTag(new _GenericSequence.default());
21 this.registerTag(new _GenericString.default());
22 }
23
24 // eslint-disable-next-line class-methods-use-this
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 == null ? void 0 : 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 tagPosition: (0, _ramda.clone)(node.tag.position),
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.default(`Node couldn't be resolved against the tag "${specificTagName}"`, {
95 specificTagName,
96 explicitTagName: node.tag.explicitName,
97 tagKind: node.tag.kind,
98 tagPosition: (0, _ramda.clone)(node.tag.position),
99 nodeCanonicalContent: canonicalNode.content,
100 node: node.clone()
101 });
102 }
103 return tag.resolve(canonicalNode);
104 }
105}
106var _default = exports.default = FailsafeSchema;
Note: See TracBrowser for help on using the repository browser.