@speclynx/apidom-parser-adapter-yaml-1-2 1.12.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 (33) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/LICENSE +202 -0
  3. package/LICENSES/AFL-3.0.txt +182 -0
  4. package/LICENSES/Apache-2.0.txt +202 -0
  5. package/LICENSES/BSD-3-Clause.txt +26 -0
  6. package/LICENSES/MIT.txt +9 -0
  7. package/NOTICE +65 -0
  8. package/README.md +96 -0
  9. package/dist/167.apidom-parser-adapter-yaml-1-2.browser.js +10 -0
  10. package/dist/167.apidom-parser-adapter-yaml-1-2.browser.min.js +1 -0
  11. package/dist/451.apidom-parser-adapter-yaml-1-2.browser.js +10 -0
  12. package/dist/451.apidom-parser-adapter-yaml-1-2.browser.min.js +1 -0
  13. package/dist/9786785aaddf11f37840.wasm +0 -0
  14. package/dist/apidom-parser-adapter-yaml-1-2.browser.js +20803 -0
  15. package/dist/apidom-parser-adapter-yaml-1-2.browser.min.js +1 -0
  16. package/package.json +68 -0
  17. package/src/adapter.cjs +53 -0
  18. package/src/adapter.mjs +45 -0
  19. package/src/lexical-analysis/index.cjs +43 -0
  20. package/src/lexical-analysis/index.mjs +39 -0
  21. package/src/media-types.cjs +20 -0
  22. package/src/media-types.mjs +16 -0
  23. package/src/syntactic-analysis/TreeCursorIterator.cjs +93 -0
  24. package/src/syntactic-analysis/TreeCursorIterator.mjs +88 -0
  25. package/src/syntactic-analysis/TreeCursorSyntaxNode.cjs +80 -0
  26. package/src/syntactic-analysis/TreeCursorSyntaxNode.mjs +76 -0
  27. package/src/syntactic-analysis/indirect/index.cjs +51 -0
  28. package/src/syntactic-analysis/indirect/index.mjs +44 -0
  29. package/src/syntactic-analysis/indirect/visitors/CstVisitor.cjs +553 -0
  30. package/src/syntactic-analysis/indirect/visitors/CstVisitor.mjs +547 -0
  31. package/src/syntactic-analysis/indirect/visitors/YamlAstVisitor.cjs +164 -0
  32. package/src/syntactic-analysis/indirect/visitors/YamlAstVisitor.mjs +158 -0
  33. package/types/apidom-parser-adapter-yaml-1-2.d.ts +67 -0
@@ -0,0 +1,158 @@
1
+ import { getNodeType as getCSTNodeType, isNode as isCSTNode, YamlStyle } from '@speclynx/apidom-ast';
2
+ import { ParseResultElement, AnnotationElement, CommentElement, SourceMapElement, MemberElement, ObjectElement, ArrayElement, isPrimitiveElement, isElement, keyMap as keyMapApiDOM, getNodeType as getNodeTypeApiDOM, createNamespace } from '@speclynx/apidom-core';
3
+ export const keyMap = {
4
+ stream: ['children'],
5
+ document: ['children'],
6
+ mapping: ['children'],
7
+ keyValuePair: ['children'],
8
+ sequence: ['children'],
9
+ error: ['children'],
10
+ ...keyMapApiDOM
11
+ };
12
+ export const getNodeType = node => {
13
+ if (isElement(node)) {
14
+ return getNodeTypeApiDOM(node);
15
+ }
16
+ return getCSTNodeType(node);
17
+ };
18
+ export const isNode = node => isElement(node) || isCSTNode(node) || Array.isArray(node);
19
+ class YamlAstVisitor {
20
+ sourceMap = false;
21
+ annotations;
22
+ namespace;
23
+ processedDocumentCount = 0;
24
+ stream = {
25
+ leave: node => {
26
+ const element = new ParseResultElement();
27
+ // @ts-ignore
28
+ element._content = node.children.flat(1);
29
+
30
+ // mark first-non Annotation element as result
31
+ // @ts-ignore
32
+ const elements = element.findElements(isPrimitiveElement);
33
+ if (elements.length > 0) {
34
+ const resultElement = elements[0];
35
+ resultElement.classes.push('result');
36
+ }
37
+
38
+ // provide annotations
39
+ this.annotations.forEach(annotationElement => {
40
+ element.push(annotationElement);
41
+ });
42
+ this.annotations = [];
43
+ return element;
44
+ }
45
+ };
46
+ constructor() {
47
+ this.annotations = [];
48
+ this.namespace = createNamespace();
49
+ }
50
+ comment(node) {
51
+ const isStreamComment = this.processedDocumentCount === 0;
52
+
53
+ // we're only interested of stream comments before the first document
54
+ if (isStreamComment) {
55
+ // @ts-ignore
56
+ const element = new CommentElement(node.content);
57
+ this.maybeAddSourceMap(node, element);
58
+ return element;
59
+ }
60
+ return null;
61
+ }
62
+ document(node) {
63
+ const shouldWarnAboutMoreDocuments = this.processedDocumentCount === 1;
64
+ const shouldSkipVisitingMoreDocuments = this.processedDocumentCount >= 1;
65
+ if (shouldWarnAboutMoreDocuments) {
66
+ const message = 'Only first document within YAML stream will be used. Rest will be discarded.';
67
+ const element = new AnnotationElement(message);
68
+ element.classes.push('warning');
69
+ this.maybeAddSourceMap(node, element);
70
+ this.annotations.push(element);
71
+ }
72
+ if (shouldSkipVisitingMoreDocuments) {
73
+ return null;
74
+ }
75
+ this.processedDocumentCount += 1;
76
+ return node.children;
77
+ }
78
+ mapping(node) {
79
+ const element = new ObjectElement();
80
+ // @ts-ignore
81
+ element._content = node.children;
82
+ this.maybeAddSourceMap(node, element);
83
+ return element;
84
+ }
85
+ keyValuePair(node) {
86
+ const element = new MemberElement();
87
+
88
+ // @ts-ignore
89
+ element.content.key = node.key;
90
+ // @ts-ignore
91
+ element.content.value = node.value;
92
+ this.maybeAddSourceMap(node, element);
93
+
94
+ // process possible errors here that may be present in property node children as we're using direct field access
95
+ node.children
96
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
97
+ .filter(child => child.type === 'error')
98
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
99
+ .forEach(errorNode => {
100
+ this.error(errorNode, node, [], [node]);
101
+ });
102
+ return element;
103
+ }
104
+ sequence(node) {
105
+ const element = new ArrayElement();
106
+ // @ts-ignore
107
+ element._content = node.children;
108
+ this.maybeAddSourceMap(node, element);
109
+ return element;
110
+ }
111
+ scalar(node) {
112
+ const element = this.namespace.toElement(node.content);
113
+
114
+ // translate style information about empty nodes
115
+ if (node.content === '' && node.style === YamlStyle.Plain) {
116
+ element.classes.push('yaml-e-node');
117
+ element.classes.push('yaml-e-scalar');
118
+ }
119
+ this.maybeAddSourceMap(node, element);
120
+ return element;
121
+ }
122
+ literal(node) {
123
+ if (node.isMissing) {
124
+ const message = `(Missing ${node.value})`;
125
+ const element = new AnnotationElement(message);
126
+ element.classes.push('warning');
127
+ this.maybeAddSourceMap(node, element);
128
+ this.annotations.push(element);
129
+ }
130
+ return null;
131
+ }
132
+ error(node, key, parent, path) {
133
+ const message = node.isUnexpected ? '(Unexpected YAML syntax error)' : '(Error YAML syntax error)';
134
+ const element = new AnnotationElement(message);
135
+ element.classes.push('error');
136
+ this.maybeAddSourceMap(node, element);
137
+ if (path.length === 0) {
138
+ // no document to visit, only error is present in CST
139
+ const parseResultElement = new ParseResultElement();
140
+ parseResultElement.push(element);
141
+ return parseResultElement;
142
+ }
143
+ this.annotations.push(element);
144
+ return null;
145
+ }
146
+ maybeAddSourceMap(node, element) {
147
+ if (!this.sourceMap) {
148
+ return;
149
+ }
150
+ const sourceMap = new SourceMapElement();
151
+ // @ts-ignore
152
+ sourceMap.position = node.position;
153
+ // @ts-ignore
154
+ sourceMap.astNode = node;
155
+ element.meta.set('sourceMap', sourceMap);
156
+ }
157
+ }
158
+ export default YamlAstVisitor;
@@ -0,0 +1,67 @@
1
+ import { MediaTypes } from '@speclynx/apidom-core';
2
+ import { Namespace } from '@speclynx/apidom-core';
3
+ import { ParseResultElement } from '@speclynx/apidom-core';
4
+ import { Tree } from 'web-tree-sitter';
5
+
6
+ /**
7
+ * @public
8
+ */
9
+ export declare const detect: (source: string) => Promise<boolean>;
10
+
11
+ /**
12
+ * Lexical Analysis of source string using WebTreeSitter.
13
+ * This is WebAssembly version of TreeSitters Lexical Analysis.
14
+ *
15
+ * Given JavaScript doesn't support true parallelism, this
16
+ * code should be as lazy as possible and temporal safety should be fine.
17
+ * @public
18
+ */
19
+ export declare const lexicalAnalysis: (source: string) => Promise<Tree>;
20
+
21
+ /**
22
+ * @public
23
+ */
24
+ export declare const mediaTypes: YamlMediaTypes;
25
+
26
+ /**
27
+ * @public
28
+ */
29
+ export declare const namespace: Namespace;
30
+
31
+ /**
32
+ * @public
33
+ */
34
+ export declare const parse: ParseFunction;
35
+
36
+ /**
37
+ * @public
38
+ */
39
+ export declare type ParseFunction = (source: string, options?: ParseFunctionOptions) => Promise<ParseResultElement>;
40
+
41
+ /**
42
+ * @public
43
+ */
44
+ export declare interface ParseFunctionOptions {
45
+ sourceMap?: boolean;
46
+ }
47
+
48
+ /**
49
+ * This version of syntactic analysis does following transformations:
50
+ * `TreeSitter CST -> YAML AST -> ApiDOM`
51
+ * Two traversals passes are needed to get from CST to ApiDOM.
52
+ * @public
53
+ */
54
+ export declare const syntacticAnalysis: (cst: Tree, { sourceMap }?: {
55
+ sourceMap?: boolean | undefined;
56
+ }) => ParseResultElement;
57
+
58
+ export { Tree }
59
+
60
+ /**
61
+ * @public
62
+ */
63
+ export declare class YamlMediaTypes extends MediaTypes<string> {
64
+ latest(): string;
65
+ }
66
+
67
+ export { }