@lionweb/validation 0.6.1-beta.0 → 0.6.1-beta.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.
- package/dist/diff/LionWebJsonDiff.d.ts.map +1 -1
- package/dist/diff/LionWebJsonDiff.js +18 -23
- package/dist/diff/LionWebJsonDiff.js.map +1 -1
- package/dist/diff/changes/ContainmentChange.d.ts +2 -2
- package/dist/diff/changes/ContainmentChange.d.ts.map +1 -1
- package/dist/diff/changes/ContainmentChange.js.map +1 -1
- package/dist/diff/changes/ReferenceChange.d.ts +3 -3
- package/dist/diff/changes/ReferenceChange.d.ts.map +1 -1
- package/dist/diff/changes/ReferenceChange.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/issues/LanguageIssues.d.ts +37 -13
- package/dist/issues/LanguageIssues.d.ts.map +1 -1
- package/dist/issues/LanguageIssues.js +49 -13
- package/dist/issues/LanguageIssues.js.map +1 -1
- package/dist/issues/ReferenceIssues.d.ts +6 -6
- package/dist/issues/ReferenceIssues.d.ts.map +1 -1
- package/dist/issues/ReferenceIssues.js +6 -6
- package/dist/issues/ReferenceIssues.js.map +1 -1
- package/dist/issues/SyntaxIssues.d.ts +9 -9
- package/dist/issues/SyntaxIssues.d.ts.map +1 -1
- package/dist/issues/SyntaxIssues.js +9 -9
- package/dist/issues/SyntaxIssues.js.map +1 -1
- package/dist/issues/ValidationIssue.d.ts +7 -1
- package/dist/issues/ValidationIssue.d.ts.map +1 -1
- package/dist/issues/ValidationIssue.js +9 -1
- package/dist/issues/ValidationIssue.js.map +1 -1
- package/dist/json/LionWebJson.d.ts +1 -14
- package/dist/json/LionWebJson.d.ts.map +1 -1
- package/dist/json/LionWebJson.js +4 -14
- package/dist/json/LionWebJson.js.map +1 -1
- package/dist/json/LionWebJsonChunkWrapper.d.ts +20 -8
- package/dist/json/LionWebJsonChunkWrapper.d.ts.map +1 -1
- package/dist/json/LionWebJsonChunkWrapper.js +50 -22
- package/dist/json/LionWebJsonChunkWrapper.js.map +1 -1
- package/dist/json/M3definitions.d.ts +176 -0
- package/dist/json/M3definitions.d.ts.map +1 -0
- package/dist/json/M3definitions.js +174 -0
- package/dist/json/M3definitions.js.map +1 -0
- package/dist/json/NodeUtils.d.ts +3 -9
- package/dist/json/NodeUtils.d.ts.map +1 -1
- package/dist/json/NodeUtils.js +18 -31
- package/dist/json/NodeUtils.js.map +1 -1
- package/dist/json/index.d.ts +1 -2
- package/dist/json/index.d.ts.map +1 -1
- package/dist/json/index.js +1 -2
- package/dist/json/index.js.map +1 -1
- package/dist/languages/CompositeLionWebLanguageWrapper.d.ts +24 -0
- package/dist/languages/CompositeLionWebLanguageWrapper.d.ts.map +1 -0
- package/dist/languages/CompositeLionWebLanguageWrapper.js +56 -0
- package/dist/languages/CompositeLionWebLanguageWrapper.js.map +1 -0
- package/dist/languages/LanguageRegistry.d.ts +19 -0
- package/dist/languages/LanguageRegistry.d.ts.map +1 -0
- package/dist/languages/LanguageRegistry.js +37 -0
- package/dist/languages/LanguageRegistry.js.map +1 -0
- package/dist/languages/LanguageUtils.d.ts +35 -0
- package/dist/languages/LanguageUtils.d.ts.map +1 -0
- package/dist/languages/LanguageUtils.js +52 -0
- package/dist/languages/LanguageUtils.js.map +1 -0
- package/dist/languages/LionCore-M3.json +2356 -0
- package/{src/json/std-builtins-copy.json → dist/languages/LionCore-builtins.json} +57 -52
- package/dist/languages/LionWebLanguageWrapper.d.ts +31 -0
- package/dist/languages/LionWebLanguageWrapper.d.ts.map +1 -0
- package/dist/languages/LionWebLanguageWrapper.js +69 -0
- package/dist/languages/LionWebLanguageWrapper.js.map +1 -0
- package/dist/languages/MetaPointerMap.d.ts +11 -0
- package/dist/languages/MetaPointerMap.d.ts.map +1 -0
- package/dist/languages/MetaPointerMap.js +39 -0
- package/dist/languages/MetaPointerMap.js.map +1 -0
- package/dist/languages/index.d.ts +3 -0
- package/dist/languages/index.d.ts.map +1 -0
- package/dist/languages/index.js +3 -0
- package/dist/languages/index.js.map +1 -0
- package/dist/runners/FileUtils.d.ts +4 -4
- package/dist/runners/FileUtils.d.ts.map +1 -1
- package/dist/runners/FileUtils.js +8 -32
- package/dist/runners/FileUtils.js.map +1 -1
- package/dist/runners/RunCheckFolder.js +3 -1
- package/dist/runners/RunCheckFolder.js.map +1 -1
- package/dist/runners/RunCheckFolderWithLanguage.js +7 -3
- package/dist/runners/RunCheckFolderWithLanguage.js.map +1 -1
- package/dist/runners/RunCheckOneFile.js +3 -1
- package/dist/runners/RunCheckOneFile.js.map +1 -1
- package/dist/runners/RunCheckOneFileWithLanguage.js +12 -3
- package/dist/runners/RunCheckOneFileWithLanguage.js.map +1 -1
- package/dist/runners/Utils.d.ts.map +1 -1
- package/dist/runners/Utils.js +0 -1
- package/dist/runners/Utils.js.map +1 -1
- package/dist/util/graphs.d.ts +18 -0
- package/dist/util/graphs.d.ts.map +1 -0
- package/dist/util/graphs.js +27 -0
- package/dist/util/graphs.js.map +1 -0
- package/dist/validators/LionWebLanguageReferenceValidator.d.ts +5 -4
- package/dist/validators/LionWebLanguageReferenceValidator.d.ts.map +1 -1
- package/dist/validators/LionWebLanguageReferenceValidator.js +96 -34
- package/dist/validators/LionWebLanguageReferenceValidator.js.map +1 -1
- package/dist/validators/LionWebLanguageValidator.d.ts +15 -3
- package/dist/validators/LionWebLanguageValidator.d.ts.map +1 -1
- package/dist/validators/LionWebLanguageValidator.js +54 -21
- package/dist/validators/LionWebLanguageValidator.js.map +1 -1
- package/dist/validators/LionWebReferenceValidator.d.ts.map +1 -1
- package/dist/validators/LionWebReferenceValidator.js +0 -5
- package/dist/validators/LionWebReferenceValidator.js.map +1 -1
- package/dist/validators/LionWebSyntaxValidator.d.ts +1 -1
- package/dist/validators/LionWebSyntaxValidator.js +1 -1
- package/dist/validators/LionWebValidator.d.ts +3 -3
- package/dist/validators/LionWebValidator.d.ts.map +1 -1
- package/dist/validators/LionWebValidator.js +5 -8
- package/dist/validators/LionWebValidator.js.map +1 -1
- package/package.json +5 -5
- package/src/diff/LionWebJsonDiff.ts +18 -23
- package/src/diff/changes/ContainmentChange.ts +1 -1
- package/src/diff/changes/ReferenceChange.ts +2 -2
- package/src/index.ts +2 -0
- package/src/issues/LanguageIssues.ts +49 -14
- package/src/issues/ReferenceIssues.ts +6 -6
- package/src/issues/SyntaxIssues.ts +9 -9
- package/src/issues/ValidationIssue.ts +12 -2
- package/src/json/LionCore_M3.json +2320 -0
- package/src/json/LionCore_builtins.json +231 -0
- package/src/json/LionWebJson.ts +5 -14
- package/src/json/LionWebJsonChunkWrapper.ts +59 -30
- package/src/json/M3definitions.ts +177 -0
- package/src/json/NodeUtils.ts +21 -39
- package/src/json/index.ts +1 -2
- package/src/languages/CompositeLionWebLanguageWrapper.ts +57 -0
- package/src/languages/LanguageRegistry.ts +44 -0
- package/src/languages/LanguageUtils.ts +61 -0
- package/src/languages/LionCore-M3.json +2356 -0
- package/src/languages/LionCore-builtins.json +372 -0
- package/src/languages/LionWebLanguageWrapper.ts +95 -0
- package/src/languages/MetaPointerMap.ts +40 -0
- package/src/languages/index.ts +2 -0
- package/src/runners/FileUtils.ts +9 -36
- package/src/runners/RunCheckFolder.ts +3 -1
- package/src/runners/RunCheckFolderWithLanguage.ts +7 -7
- package/src/runners/RunCheckOneFile.ts +3 -1
- package/src/runners/RunCheckOneFileWithLanguage.ts +12 -7
- package/src/runners/Utils.ts +0 -1
- package/src/tmp.json +574 -0
- package/src/tryout.js +21 -0
- package/src/util/graphs.ts +36 -0
- package/src/validators/LionWebLanguageReferenceValidator.ts +110 -48
- package/src/validators/LionWebLanguageValidator.ts +62 -21
- package/src/validators/LionWebReferenceValidator.ts +0 -5
- package/src/validators/LionWebSyntaxValidator.ts +2 -2
- package/src/validators/LionWebValidator.ts +5 -9
- package/structure.puml +25 -0
- package/dist/json/LanguageUtils.d.ts +0 -9
- package/dist/json/LanguageUtils.d.ts.map +0 -1
- package/dist/json/LanguageUtils.js +0 -30
- package/dist/json/LanguageUtils.js.map +0 -1
- package/dist/json/LionWebLanguageDefinition.d.ts +0 -48
- package/dist/json/LionWebLanguageDefinition.d.ts.map +0 -1
- package/dist/json/LionWebLanguageDefinition.js +0 -126
- package/dist/json/LionWebLanguageDefinition.js.map +0 -1
- package/src/json/LanguageUtils.ts +0 -52
- package/src/json/LionWebLanguageDefinition.ts +0 -144
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
import { LION_CORE_BUILTINS_INAMED_NAME } from "./LionWebJson.js";
|
|
2
|
-
import { NodeUtils } from "./NodeUtils.js";
|
|
3
|
-
export const LIONWEB_M3_PROPERTY_KEY = "Property";
|
|
4
|
-
export const LIONWEB_M3_CONCEPT_KEY = "Concept";
|
|
5
|
-
export const LIONWEB_M3_INTERFACE_KEY = "Interface";
|
|
6
|
-
export const LIONWEB_M3_ANNOTATION_KEY = "Annotation";
|
|
7
|
-
export const LIONWEB_M3_REFERENCE_KEY = "Reference";
|
|
8
|
-
export const LIONWEB_M3_LANGUAGE_KEY = "Language";
|
|
9
|
-
export const LIONWEB_M3_LANGUAGE_VERSION_KEY = "Language-version";
|
|
10
|
-
export const LIONWEB_M3_IKEYED_KEY_KEY = "IKeyed-key";
|
|
11
|
-
export const LIONWEB_M3_PROPERTY_TYPE_KEY = "Property-type";
|
|
12
|
-
/**
|
|
13
|
-
* Collection of language definitions
|
|
14
|
-
*/
|
|
15
|
-
// export class LionwebLanguages {
|
|
16
|
-
// // The builtin language of LionWeb.
|
|
17
|
-
// static M3 = LionCore_M3 as LionWebJsonChunk;
|
|
18
|
-
//
|
|
19
|
-
// languageMap = new Map<string, Map<string, Map<string, LionwebLanguageDefinition>>>();
|
|
20
|
-
//
|
|
21
|
-
// setLanguage(lionWebLanguage: LionwebLanguageDefinition) {
|
|
22
|
-
// // Assume LwNode is a concept of type "Language"
|
|
23
|
-
// let language = this.languageMap.get(lionWebLanguage.languageId.name);
|
|
24
|
-
// if (language === undefined) {
|
|
25
|
-
// language = new Map<string, Map<string, LionwebLanguageDefinition>>();
|
|
26
|
-
// this.languageMap.set(lionWebLanguage.languageId.name, language);
|
|
27
|
-
// }
|
|
28
|
-
// let version = language.get(lionWebLanguage.languageId.version);
|
|
29
|
-
// if (version === undefined) {
|
|
30
|
-
// version = new Map<string, LionwebLanguageDefinition>();
|
|
31
|
-
// language.set(lionWebLanguage.languageId.version, version);
|
|
32
|
-
// }
|
|
33
|
-
// let key = version.get(lionWebLanguage.languageId.key);
|
|
34
|
-
// if (key === undefined) {
|
|
35
|
-
// version.set(lionWebLanguage.languageId.key, lionWebLanguage);
|
|
36
|
-
// }
|
|
37
|
-
// }
|
|
38
|
-
//
|
|
39
|
-
// getLanguage(pointer: LionWebJsonMetaPointer): LionwebLanguageDefinition {
|
|
40
|
-
// return this.languageMap.get(pointer.language)?.get(pointer.version)?.get(pointer.key);
|
|
41
|
-
// }
|
|
42
|
-
// }
|
|
43
|
-
/**
|
|
44
|
-
* Represents a LionWeb serialiation chunk which represents a language definition / metamodel
|
|
45
|
-
*/
|
|
46
|
-
export class LionWebLanguageDefinition {
|
|
47
|
-
/**
|
|
48
|
-
* Assume chunk represents a language metamodel according to Lionweb M3.
|
|
49
|
-
* @param chunk
|
|
50
|
-
*/
|
|
51
|
-
constructor(chunk) {
|
|
52
|
-
this.languageId = null;
|
|
53
|
-
/**
|
|
54
|
-
* All nodes in the language
|
|
55
|
-
*/
|
|
56
|
-
this.nodeKeymap = new Map();
|
|
57
|
-
// console.log("CHUNK " + JSON.stringify(chunk))
|
|
58
|
-
const languageNodes = chunk.findNodesOfConcept(LIONWEB_M3_LANGUAGE_KEY);
|
|
59
|
-
if (languageNodes.length !== 1) {
|
|
60
|
-
// TODO Better error handling.
|
|
61
|
-
console.error("1 Expected exactly one Language node, found " + languageNodes.length + " => " + JSON.stringify(languageNodes));
|
|
62
|
-
}
|
|
63
|
-
else {
|
|
64
|
-
const languageNode = languageNodes[0];
|
|
65
|
-
this.setLanguage(languageNode);
|
|
66
|
-
}
|
|
67
|
-
this.languageChunkWrapper = chunk;
|
|
68
|
-
}
|
|
69
|
-
setLanguage(languageNode) {
|
|
70
|
-
// Assume LwNode is a concept of type "Language"
|
|
71
|
-
const nameProp = languageNode.properties.find(prop => prop.property.key === LION_CORE_BUILTINS_INAMED_NAME);
|
|
72
|
-
const versionProp = languageNode.properties.find(prop => prop.property.key === LIONWEB_M3_LANGUAGE_VERSION_KEY);
|
|
73
|
-
const keyProp = languageNode.properties.find(prop => prop.property.key === LIONWEB_M3_IKEYED_KEY_KEY);
|
|
74
|
-
this.languageId = {
|
|
75
|
-
name: nameProp?.value,
|
|
76
|
-
version: versionProp?.value,
|
|
77
|
-
key: keyProp?.value,
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Store the node `node` under `key`.
|
|
82
|
-
* @param key
|
|
83
|
-
* @param node
|
|
84
|
-
*/
|
|
85
|
-
setNodeByKey(key, node) {
|
|
86
|
-
this.nodeKeymap.set(key, node);
|
|
87
|
-
}
|
|
88
|
-
getNodeByKey(key) {
|
|
89
|
-
return this.nodeKeymap.get(key);
|
|
90
|
-
}
|
|
91
|
-
getNodeByMetaPointer(metaPointer) {
|
|
92
|
-
// console.log("get metapointer " + JSON.stringify(metaPointer))
|
|
93
|
-
const result = this.languageChunkWrapper.jsonChunk.nodes.find(n => {
|
|
94
|
-
// console.log(" looking into " + JSON.stringify(n));
|
|
95
|
-
const keyProp = NodeUtils.findLwProperty(n, LIONWEB_M3_IKEYED_KEY_KEY);
|
|
96
|
-
// const versionProp = NodeUtils.findLwProperty(n, "Language-version");
|
|
97
|
-
// return ((!!keyProp) && (keyProp.value === metaPointer.key) && (!!versionProp) && (versionProp.value === metaPointer.version));
|
|
98
|
-
// console.log(" getNodeByMetaPointer.looking into " + node.id + " found " + JSON.stringify(keyProp));
|
|
99
|
-
return !!keyProp && keyProp.value === metaPointer.key;
|
|
100
|
-
});
|
|
101
|
-
return result;
|
|
102
|
-
}
|
|
103
|
-
getPropertyByKey(key) {
|
|
104
|
-
// console.log("get property by key " + key)
|
|
105
|
-
const propertyNode = this.languageChunkWrapper.findNodesOfConcept(LIONWEB_M3_PROPERTY_KEY).find(n => {
|
|
106
|
-
// console.log(" looking into " + JSON.stringify(n));
|
|
107
|
-
const keyProp = n.properties.find(prop => {
|
|
108
|
-
return prop.property.key === LIONWEB_M3_IKEYED_KEY_KEY && prop.value === key;
|
|
109
|
-
});
|
|
110
|
-
return keyProp;
|
|
111
|
-
});
|
|
112
|
-
return propertyNode;
|
|
113
|
-
}
|
|
114
|
-
getConceptByKey(key) {
|
|
115
|
-
// console.log("get property by key " + key)
|
|
116
|
-
const conceptNode = this.languageChunkWrapper.findNodesOfConcept(LIONWEB_M3_CONCEPT_KEY).find(n => {
|
|
117
|
-
// console.log(" looking into " + JSON.stringify(n));
|
|
118
|
-
const keyProp = n.properties.find(prop => {
|
|
119
|
-
return prop.property.key === LIONWEB_M3_IKEYED_KEY_KEY && prop.value === key;
|
|
120
|
-
});
|
|
121
|
-
return keyProp;
|
|
122
|
-
});
|
|
123
|
-
return conceptNode;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
//# sourceMappingURL=LionWebLanguageDefinition.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LionWebLanguageDefinition.js","sourceRoot":"","sources":["../../src/json/LionWebLanguageDefinition.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { LionWebJsonChunk } from "./LionWebJson.js"
|
|
2
|
-
import { LionWebJsonChunkWrapper } from "./LionWebJsonChunkWrapper.js"
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Contains methods for getting information from a LionWebJsonChunk representing a language.
|
|
6
|
-
*/
|
|
7
|
-
export class LanguageWrapper extends LionWebJsonChunkWrapper {
|
|
8
|
-
constructor(languageJson: LionWebJsonChunk) {
|
|
9
|
-
super(languageJson)
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
// inheritsFrom = (classifier: LionWebJsonNode): LionWebJsonNode[] => {
|
|
13
|
-
// if (isConcept(classifier) || isAnnotation(classifier)) {
|
|
14
|
-
// // find the language (have key and version)
|
|
15
|
-
// // find concept or annotation
|
|
16
|
-
// // find extends/inherits property
|
|
17
|
-
// return [
|
|
18
|
-
// ...(
|
|
19
|
-
// isRef(classifier.extends)
|
|
20
|
-
// ? [classifier.extends as Concept]
|
|
21
|
-
// : []
|
|
22
|
-
// ),
|
|
23
|
-
// ...classifier.implements
|
|
24
|
-
// ]
|
|
25
|
-
// }
|
|
26
|
-
// if (isInterface(classifier)) {
|
|
27
|
-
// return classifier.extends
|
|
28
|
-
// }
|
|
29
|
-
// throw new Error(`concept type ${typeof classifier} not handled`)
|
|
30
|
-
// }
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
//
|
|
34
|
-
// function isLionCoreLanguage(node: LionWebJsonNode) {
|
|
35
|
-
// return node.classifier.language === LION_CORE_M3_KEY
|
|
36
|
-
// && node.classifier.version === "2023.1";
|
|
37
|
-
// }
|
|
38
|
-
//
|
|
39
|
-
// const isConcept = (node: LionWebJsonNode): boolean => {
|
|
40
|
-
// return isLionCoreLanguage(node)
|
|
41
|
-
// && node.classifier.key === LIONWEB_M3_CONCEPT_KEY;
|
|
42
|
-
// }
|
|
43
|
-
//
|
|
44
|
-
// const isAnnotation = (node: LionWebJsonNode): boolean => {
|
|
45
|
-
// return isLionCoreLanguage(node)
|
|
46
|
-
// && node.classifier.key === LIONWEB_M3_ANNOTATION_KEY;
|
|
47
|
-
// }
|
|
48
|
-
//
|
|
49
|
-
// const isInterface = (node: LionWebJsonNode): boolean => {
|
|
50
|
-
// return isLionCoreLanguage(node)
|
|
51
|
-
// && node.classifier.key === LIONWEB_M3_INTERFACE_KEY;
|
|
52
|
-
// }
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
import { LION_CORE_BUILTINS_INAMED_NAME, LionWebJsonMetaPointer, LionWebJsonNode } from "./LionWebJson.js"
|
|
2
|
-
import { LionWebJsonChunkWrapper } from "./LionWebJsonChunkWrapper.js"
|
|
3
|
-
import { NodeUtils } from "./NodeUtils.js"
|
|
4
|
-
|
|
5
|
-
type LanguageId = {
|
|
6
|
-
name?: string
|
|
7
|
-
version?: string
|
|
8
|
-
key?: string
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export const LIONWEB_M3_PROPERTY_KEY = "Property"
|
|
12
|
-
export const LIONWEB_M3_CONCEPT_KEY = "Concept"
|
|
13
|
-
export const LIONWEB_M3_INTERFACE_KEY = "Interface"
|
|
14
|
-
export const LIONWEB_M3_ANNOTATION_KEY = "Annotation"
|
|
15
|
-
export const LIONWEB_M3_REFERENCE_KEY = "Reference"
|
|
16
|
-
export const LIONWEB_M3_LANGUAGE_KEY = "Language"
|
|
17
|
-
export const LIONWEB_M3_LANGUAGE_VERSION_KEY = "Language-version"
|
|
18
|
-
export const LIONWEB_M3_IKEYED_KEY_KEY = "IKeyed-key"
|
|
19
|
-
export const LIONWEB_M3_PROPERTY_TYPE_KEY = "Property-type"
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Collection of language definitions
|
|
23
|
-
*/
|
|
24
|
-
// export class LionwebLanguages {
|
|
25
|
-
// // The builtin language of LionWeb.
|
|
26
|
-
// static M3 = LionCore_M3 as LionWebJsonChunk;
|
|
27
|
-
//
|
|
28
|
-
// languageMap = new Map<string, Map<string, Map<string, LionwebLanguageDefinition>>>();
|
|
29
|
-
//
|
|
30
|
-
// setLanguage(lionWebLanguage: LionwebLanguageDefinition) {
|
|
31
|
-
// // Assume LwNode is a concept of type "Language"
|
|
32
|
-
// let language = this.languageMap.get(lionWebLanguage.languageId.name);
|
|
33
|
-
// if (language === undefined) {
|
|
34
|
-
// language = new Map<string, Map<string, LionwebLanguageDefinition>>();
|
|
35
|
-
// this.languageMap.set(lionWebLanguage.languageId.name, language);
|
|
36
|
-
// }
|
|
37
|
-
// let version = language.get(lionWebLanguage.languageId.version);
|
|
38
|
-
// if (version === undefined) {
|
|
39
|
-
// version = new Map<string, LionwebLanguageDefinition>();
|
|
40
|
-
// language.set(lionWebLanguage.languageId.version, version);
|
|
41
|
-
// }
|
|
42
|
-
// let key = version.get(lionWebLanguage.languageId.key);
|
|
43
|
-
// if (key === undefined) {
|
|
44
|
-
// version.set(lionWebLanguage.languageId.key, lionWebLanguage);
|
|
45
|
-
// }
|
|
46
|
-
// }
|
|
47
|
-
//
|
|
48
|
-
// getLanguage(pointer: LionWebJsonMetaPointer): LionwebLanguageDefinition {
|
|
49
|
-
// return this.languageMap.get(pointer.language)?.get(pointer.version)?.get(pointer.key);
|
|
50
|
-
// }
|
|
51
|
-
// }
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Represents a LionWeb serialiation chunk which represents a language definition / metamodel
|
|
55
|
-
*/
|
|
56
|
-
export class LionWebLanguageDefinition {
|
|
57
|
-
languageId: LanguageId | null = null
|
|
58
|
-
/**
|
|
59
|
-
* All nodes in the language
|
|
60
|
-
*/
|
|
61
|
-
nodeKeymap = new Map<string, LionWebJsonNode>()
|
|
62
|
-
languageChunkWrapper: LionWebJsonChunkWrapper
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Assume chunk represents a language metamodel according to Lionweb M3.
|
|
66
|
-
* @param chunk
|
|
67
|
-
*/
|
|
68
|
-
constructor(chunk: LionWebJsonChunkWrapper) {
|
|
69
|
-
// console.log("CHUNK " + JSON.stringify(chunk))
|
|
70
|
-
const languageNodes = chunk.findNodesOfConcept(LIONWEB_M3_LANGUAGE_KEY)
|
|
71
|
-
if (languageNodes.length !== 1) {
|
|
72
|
-
// TODO Better error handling.
|
|
73
|
-
console.error("1 Expected exactly one Language node, found " + languageNodes.length + " => " + JSON.stringify(languageNodes))
|
|
74
|
-
} else {
|
|
75
|
-
const languageNode = languageNodes[0]
|
|
76
|
-
this.setLanguage(languageNode)
|
|
77
|
-
}
|
|
78
|
-
this.languageChunkWrapper = chunk
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
protected setLanguage(languageNode: LionWebJsonNode) {
|
|
82
|
-
// Assume LwNode is a concept of type "Language"
|
|
83
|
-
const nameProp = languageNode.properties.find(prop => prop.property.key === LION_CORE_BUILTINS_INAMED_NAME)
|
|
84
|
-
const versionProp = languageNode.properties.find(prop => prop.property.key === LIONWEB_M3_LANGUAGE_VERSION_KEY)
|
|
85
|
-
const keyProp = languageNode.properties.find(prop => prop.property.key === LIONWEB_M3_IKEYED_KEY_KEY)
|
|
86
|
-
this.languageId = {
|
|
87
|
-
name: nameProp?.value,
|
|
88
|
-
version: versionProp?.value,
|
|
89
|
-
key: keyProp?.value,
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Store the node `node` under `key`.
|
|
95
|
-
* @param key
|
|
96
|
-
* @param node
|
|
97
|
-
*/
|
|
98
|
-
setNodeByKey(key: string, node: LionWebJsonNode): void {
|
|
99
|
-
this.nodeKeymap.set(key, node)
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
getNodeByKey(key: string): LionWebJsonNode | undefined {
|
|
103
|
-
return this.nodeKeymap.get(key)
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
getNodeByMetaPointer(metaPointer: LionWebJsonMetaPointer): LionWebJsonNode | undefined {
|
|
107
|
-
// console.log("get metapointer " + JSON.stringify(metaPointer))
|
|
108
|
-
const result = this.languageChunkWrapper.jsonChunk.nodes.find(n => {
|
|
109
|
-
// console.log(" looking into " + JSON.stringify(n));
|
|
110
|
-
const keyProp = NodeUtils.findLwProperty(n, LIONWEB_M3_IKEYED_KEY_KEY)
|
|
111
|
-
// const versionProp = NodeUtils.findLwProperty(n, "Language-version");
|
|
112
|
-
|
|
113
|
-
// return ((!!keyProp) && (keyProp.value === metaPointer.key) && (!!versionProp) && (versionProp.value === metaPointer.version));
|
|
114
|
-
|
|
115
|
-
// console.log(" getNodeByMetaPointer.looking into " + node.id + " found " + JSON.stringify(keyProp));
|
|
116
|
-
return !!keyProp && keyProp.value === metaPointer.key
|
|
117
|
-
})
|
|
118
|
-
return result
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
getPropertyByKey(key: string): LionWebJsonNode | undefined {
|
|
122
|
-
// console.log("get property by key " + key)
|
|
123
|
-
const propertyNode = this.languageChunkWrapper.findNodesOfConcept(LIONWEB_M3_PROPERTY_KEY).find(n => {
|
|
124
|
-
// console.log(" looking into " + JSON.stringify(n));
|
|
125
|
-
const keyProp = (n as LionWebJsonNode).properties.find(prop => {
|
|
126
|
-
return prop.property.key === LIONWEB_M3_IKEYED_KEY_KEY && prop.value === key
|
|
127
|
-
})
|
|
128
|
-
return keyProp
|
|
129
|
-
})
|
|
130
|
-
return propertyNode
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
getConceptByKey(key: string): LionWebJsonNode | undefined {
|
|
134
|
-
// console.log("get property by key " + key)
|
|
135
|
-
const conceptNode = this.languageChunkWrapper.findNodesOfConcept(LIONWEB_M3_CONCEPT_KEY).find(n => {
|
|
136
|
-
// console.log(" looking into " + JSON.stringify(n));
|
|
137
|
-
const keyProp = n.properties.find(prop => {
|
|
138
|
-
return prop.property.key === LIONWEB_M3_IKEYED_KEY_KEY && prop.value === key
|
|
139
|
-
})
|
|
140
|
-
return keyProp
|
|
141
|
-
})
|
|
142
|
-
return conceptNode
|
|
143
|
-
}
|
|
144
|
-
}
|