@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.
Files changed (160) hide show
  1. package/dist/diff/LionWebJsonDiff.d.ts.map +1 -1
  2. package/dist/diff/LionWebJsonDiff.js +18 -23
  3. package/dist/diff/LionWebJsonDiff.js.map +1 -1
  4. package/dist/diff/changes/ContainmentChange.d.ts +2 -2
  5. package/dist/diff/changes/ContainmentChange.d.ts.map +1 -1
  6. package/dist/diff/changes/ContainmentChange.js.map +1 -1
  7. package/dist/diff/changes/ReferenceChange.d.ts +3 -3
  8. package/dist/diff/changes/ReferenceChange.d.ts.map +1 -1
  9. package/dist/diff/changes/ReferenceChange.js.map +1 -1
  10. package/dist/index.d.ts +2 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +2 -0
  13. package/dist/index.js.map +1 -1
  14. package/dist/issues/LanguageIssues.d.ts +37 -13
  15. package/dist/issues/LanguageIssues.d.ts.map +1 -1
  16. package/dist/issues/LanguageIssues.js +49 -13
  17. package/dist/issues/LanguageIssues.js.map +1 -1
  18. package/dist/issues/ReferenceIssues.d.ts +6 -6
  19. package/dist/issues/ReferenceIssues.d.ts.map +1 -1
  20. package/dist/issues/ReferenceIssues.js +6 -6
  21. package/dist/issues/ReferenceIssues.js.map +1 -1
  22. package/dist/issues/SyntaxIssues.d.ts +9 -9
  23. package/dist/issues/SyntaxIssues.d.ts.map +1 -1
  24. package/dist/issues/SyntaxIssues.js +9 -9
  25. package/dist/issues/SyntaxIssues.js.map +1 -1
  26. package/dist/issues/ValidationIssue.d.ts +7 -1
  27. package/dist/issues/ValidationIssue.d.ts.map +1 -1
  28. package/dist/issues/ValidationIssue.js +9 -1
  29. package/dist/issues/ValidationIssue.js.map +1 -1
  30. package/dist/json/LionWebJson.d.ts +1 -14
  31. package/dist/json/LionWebJson.d.ts.map +1 -1
  32. package/dist/json/LionWebJson.js +4 -14
  33. package/dist/json/LionWebJson.js.map +1 -1
  34. package/dist/json/LionWebJsonChunkWrapper.d.ts +20 -8
  35. package/dist/json/LionWebJsonChunkWrapper.d.ts.map +1 -1
  36. package/dist/json/LionWebJsonChunkWrapper.js +50 -22
  37. package/dist/json/LionWebJsonChunkWrapper.js.map +1 -1
  38. package/dist/json/M3definitions.d.ts +176 -0
  39. package/dist/json/M3definitions.d.ts.map +1 -0
  40. package/dist/json/M3definitions.js +174 -0
  41. package/dist/json/M3definitions.js.map +1 -0
  42. package/dist/json/NodeUtils.d.ts +3 -9
  43. package/dist/json/NodeUtils.d.ts.map +1 -1
  44. package/dist/json/NodeUtils.js +18 -31
  45. package/dist/json/NodeUtils.js.map +1 -1
  46. package/dist/json/index.d.ts +1 -2
  47. package/dist/json/index.d.ts.map +1 -1
  48. package/dist/json/index.js +1 -2
  49. package/dist/json/index.js.map +1 -1
  50. package/dist/languages/CompositeLionWebLanguageWrapper.d.ts +24 -0
  51. package/dist/languages/CompositeLionWebLanguageWrapper.d.ts.map +1 -0
  52. package/dist/languages/CompositeLionWebLanguageWrapper.js +56 -0
  53. package/dist/languages/CompositeLionWebLanguageWrapper.js.map +1 -0
  54. package/dist/languages/LanguageRegistry.d.ts +19 -0
  55. package/dist/languages/LanguageRegistry.d.ts.map +1 -0
  56. package/dist/languages/LanguageRegistry.js +37 -0
  57. package/dist/languages/LanguageRegistry.js.map +1 -0
  58. package/dist/languages/LanguageUtils.d.ts +35 -0
  59. package/dist/languages/LanguageUtils.d.ts.map +1 -0
  60. package/dist/languages/LanguageUtils.js +52 -0
  61. package/dist/languages/LanguageUtils.js.map +1 -0
  62. package/dist/languages/LionCore-M3.json +2356 -0
  63. package/{src/json/std-builtins-copy.json → dist/languages/LionCore-builtins.json} +57 -52
  64. package/dist/languages/LionWebLanguageWrapper.d.ts +31 -0
  65. package/dist/languages/LionWebLanguageWrapper.d.ts.map +1 -0
  66. package/dist/languages/LionWebLanguageWrapper.js +69 -0
  67. package/dist/languages/LionWebLanguageWrapper.js.map +1 -0
  68. package/dist/languages/MetaPointerMap.d.ts +11 -0
  69. package/dist/languages/MetaPointerMap.d.ts.map +1 -0
  70. package/dist/languages/MetaPointerMap.js +39 -0
  71. package/dist/languages/MetaPointerMap.js.map +1 -0
  72. package/dist/languages/index.d.ts +3 -0
  73. package/dist/languages/index.d.ts.map +1 -0
  74. package/dist/languages/index.js +3 -0
  75. package/dist/languages/index.js.map +1 -0
  76. package/dist/runners/FileUtils.d.ts +4 -4
  77. package/dist/runners/FileUtils.d.ts.map +1 -1
  78. package/dist/runners/FileUtils.js +8 -32
  79. package/dist/runners/FileUtils.js.map +1 -1
  80. package/dist/runners/RunCheckFolder.js +3 -1
  81. package/dist/runners/RunCheckFolder.js.map +1 -1
  82. package/dist/runners/RunCheckFolderWithLanguage.js +7 -3
  83. package/dist/runners/RunCheckFolderWithLanguage.js.map +1 -1
  84. package/dist/runners/RunCheckOneFile.js +3 -1
  85. package/dist/runners/RunCheckOneFile.js.map +1 -1
  86. package/dist/runners/RunCheckOneFileWithLanguage.js +12 -3
  87. package/dist/runners/RunCheckOneFileWithLanguage.js.map +1 -1
  88. package/dist/runners/Utils.d.ts.map +1 -1
  89. package/dist/runners/Utils.js +0 -1
  90. package/dist/runners/Utils.js.map +1 -1
  91. package/dist/util/graphs.d.ts +18 -0
  92. package/dist/util/graphs.d.ts.map +1 -0
  93. package/dist/util/graphs.js +27 -0
  94. package/dist/util/graphs.js.map +1 -0
  95. package/dist/validators/LionWebLanguageReferenceValidator.d.ts +5 -4
  96. package/dist/validators/LionWebLanguageReferenceValidator.d.ts.map +1 -1
  97. package/dist/validators/LionWebLanguageReferenceValidator.js +96 -34
  98. package/dist/validators/LionWebLanguageReferenceValidator.js.map +1 -1
  99. package/dist/validators/LionWebLanguageValidator.d.ts +15 -3
  100. package/dist/validators/LionWebLanguageValidator.d.ts.map +1 -1
  101. package/dist/validators/LionWebLanguageValidator.js +54 -21
  102. package/dist/validators/LionWebLanguageValidator.js.map +1 -1
  103. package/dist/validators/LionWebReferenceValidator.d.ts.map +1 -1
  104. package/dist/validators/LionWebReferenceValidator.js +0 -5
  105. package/dist/validators/LionWebReferenceValidator.js.map +1 -1
  106. package/dist/validators/LionWebSyntaxValidator.d.ts +1 -1
  107. package/dist/validators/LionWebSyntaxValidator.js +1 -1
  108. package/dist/validators/LionWebValidator.d.ts +3 -3
  109. package/dist/validators/LionWebValidator.d.ts.map +1 -1
  110. package/dist/validators/LionWebValidator.js +5 -8
  111. package/dist/validators/LionWebValidator.js.map +1 -1
  112. package/package.json +5 -5
  113. package/src/diff/LionWebJsonDiff.ts +18 -23
  114. package/src/diff/changes/ContainmentChange.ts +1 -1
  115. package/src/diff/changes/ReferenceChange.ts +2 -2
  116. package/src/index.ts +2 -0
  117. package/src/issues/LanguageIssues.ts +49 -14
  118. package/src/issues/ReferenceIssues.ts +6 -6
  119. package/src/issues/SyntaxIssues.ts +9 -9
  120. package/src/issues/ValidationIssue.ts +12 -2
  121. package/src/json/LionCore_M3.json +2320 -0
  122. package/src/json/LionCore_builtins.json +231 -0
  123. package/src/json/LionWebJson.ts +5 -14
  124. package/src/json/LionWebJsonChunkWrapper.ts +59 -30
  125. package/src/json/M3definitions.ts +177 -0
  126. package/src/json/NodeUtils.ts +21 -39
  127. package/src/json/index.ts +1 -2
  128. package/src/languages/CompositeLionWebLanguageWrapper.ts +57 -0
  129. package/src/languages/LanguageRegistry.ts +44 -0
  130. package/src/languages/LanguageUtils.ts +61 -0
  131. package/src/languages/LionCore-M3.json +2356 -0
  132. package/src/languages/LionCore-builtins.json +372 -0
  133. package/src/languages/LionWebLanguageWrapper.ts +95 -0
  134. package/src/languages/MetaPointerMap.ts +40 -0
  135. package/src/languages/index.ts +2 -0
  136. package/src/runners/FileUtils.ts +9 -36
  137. package/src/runners/RunCheckFolder.ts +3 -1
  138. package/src/runners/RunCheckFolderWithLanguage.ts +7 -7
  139. package/src/runners/RunCheckOneFile.ts +3 -1
  140. package/src/runners/RunCheckOneFileWithLanguage.ts +12 -7
  141. package/src/runners/Utils.ts +0 -1
  142. package/src/tmp.json +574 -0
  143. package/src/tryout.js +21 -0
  144. package/src/util/graphs.ts +36 -0
  145. package/src/validators/LionWebLanguageReferenceValidator.ts +110 -48
  146. package/src/validators/LionWebLanguageValidator.ts +62 -21
  147. package/src/validators/LionWebReferenceValidator.ts +0 -5
  148. package/src/validators/LionWebSyntaxValidator.ts +2 -2
  149. package/src/validators/LionWebValidator.ts +5 -9
  150. package/structure.puml +25 -0
  151. package/dist/json/LanguageUtils.d.ts +0 -9
  152. package/dist/json/LanguageUtils.d.ts.map +0 -1
  153. package/dist/json/LanguageUtils.js +0 -30
  154. package/dist/json/LanguageUtils.js.map +0 -1
  155. package/dist/json/LionWebLanguageDefinition.d.ts +0 -48
  156. package/dist/json/LionWebLanguageDefinition.d.ts.map +0 -1
  157. package/dist/json/LionWebLanguageDefinition.js +0 -126
  158. package/dist/json/LionWebLanguageDefinition.js.map +0 -1
  159. package/src/json/LanguageUtils.ts +0 -52
  160. package/src/json/LionWebLanguageDefinition.ts +0 -144
@@ -0,0 +1,372 @@
1
+ {
2
+ "serializationFormatVersion": "2023.1",
3
+ "languages" : [
4
+ {
5
+ "key" : "LionCore-M3",
6
+ "version": "2023.1"
7
+ },
8
+ {
9
+ "key" : "LionCore-builtins",
10
+ "version": "2023.1"
11
+ }
12
+ ],
13
+ "nodes" : [
14
+ {
15
+ "id" : "LionCore-builtins",
16
+ "classifier" : {
17
+ "language": "LionCore-M3",
18
+ "version" : "2023.1",
19
+ "key" : "Language"
20
+ },
21
+ "properties" : [
22
+ {
23
+ "property": {
24
+ "language": "LionCore-builtins",
25
+ "version" : "2023.1",
26
+ "key" : "LionCore-builtins-INamed-name"
27
+ },
28
+ "value" : "LionCore_builtins"
29
+ },
30
+ {
31
+ "property": {
32
+ "language": "LionCore-M3",
33
+ "version" : "2023.1",
34
+ "key" : "Language-version"
35
+ },
36
+ "value" : "2023.1"
37
+ },
38
+ {
39
+ "property": {
40
+ "language": "LionCore-M3",
41
+ "version" : "2023.1",
42
+ "key" : "IKeyed-key"
43
+ },
44
+ "value" : "LionCore-builtins"
45
+ }
46
+ ],
47
+ "containments": [
48
+ {
49
+ "containment": {
50
+ "language": "LionCore-M3",
51
+ "version" : "2023.1",
52
+ "key" : "Language-entities"
53
+ },
54
+ "children" : [
55
+ "LionCore-builtins-String",
56
+ "LionCore-builtins-Boolean",
57
+ "LionCore-builtins-Integer",
58
+ "LionCore-builtins-JSON",
59
+ "LionCore-builtins-Node",
60
+ "LionCore-builtins-INamed"
61
+ ]
62
+ }
63
+ ],
64
+ "references" : [
65
+ {
66
+ "reference": {
67
+ "language": "LionCore-M3",
68
+ "version" : "2023.1",
69
+ "key" : "Language-dependsOn"
70
+ },
71
+ "targets" : []
72
+ }
73
+ ],
74
+ "annotations" : [],
75
+ "parent" : null
76
+ },
77
+ {
78
+ "id" : "LionCore-builtins-String",
79
+ "classifier" : {
80
+ "language": "LionCore-M3",
81
+ "version" : "2023.1",
82
+ "key" : "PrimitiveType"
83
+ },
84
+ "properties" : [
85
+ {
86
+ "property": {
87
+ "language": "LionCore-builtins",
88
+ "version" : "2023.1",
89
+ "key" : "LionCore-builtins-INamed-name"
90
+ },
91
+ "value" : "String"
92
+ },
93
+ {
94
+ "property": {
95
+ "language": "LionCore-M3",
96
+ "version" : "2023.1",
97
+ "key" : "IKeyed-key"
98
+ },
99
+ "value" : "LionCore-builtins-String"
100
+ }
101
+ ],
102
+ "containments": [],
103
+ "references" : [],
104
+ "annotations" : [],
105
+ "parent" : "LionCore-builtins"
106
+ },
107
+ {
108
+ "id" : "LionCore-builtins-Boolean",
109
+ "classifier" : {
110
+ "language": "LionCore-M3",
111
+ "version" : "2023.1",
112
+ "key" : "PrimitiveType"
113
+ },
114
+ "properties" : [
115
+ {
116
+ "property": {
117
+ "language": "LionCore-builtins",
118
+ "version" : "2023.1",
119
+ "key" : "LionCore-builtins-INamed-name"
120
+ },
121
+ "value" : "Boolean"
122
+ },
123
+ {
124
+ "property": {
125
+ "language": "LionCore-M3",
126
+ "version" : "2023.1",
127
+ "key" : "IKeyed-key"
128
+ },
129
+ "value" : "LionCore-builtins-Boolean"
130
+ }
131
+ ],
132
+ "containments": [],
133
+ "references" : [],
134
+ "annotations" : [],
135
+ "parent" : "LionCore-builtins"
136
+ },
137
+ {
138
+ "id" : "LionCore-builtins-Integer",
139
+ "classifier" : {
140
+ "language": "LionCore-M3",
141
+ "version" : "2023.1",
142
+ "key" : "PrimitiveType"
143
+ },
144
+ "properties" : [
145
+ {
146
+ "property": {
147
+ "language": "LionCore-builtins",
148
+ "version" : "2023.1",
149
+ "key" : "LionCore-builtins-INamed-name"
150
+ },
151
+ "value" : "Integer"
152
+ },
153
+ {
154
+ "property": {
155
+ "language": "LionCore-M3",
156
+ "version" : "2023.1",
157
+ "key" : "IKeyed-key"
158
+ },
159
+ "value" : "LionCore-builtins-Integer"
160
+ }
161
+ ],
162
+ "containments": [],
163
+ "references" : [],
164
+ "annotations" : [],
165
+ "parent" : "LionCore-builtins"
166
+ },
167
+ {
168
+ "id" : "LionCore-builtins-JSON",
169
+ "classifier" : {
170
+ "language": "LionCore-M3",
171
+ "version" : "2023.1",
172
+ "key" : "PrimitiveType"
173
+ },
174
+ "properties" : [
175
+ {
176
+ "property": {
177
+ "language": "LionCore-builtins",
178
+ "version" : "2023.1",
179
+ "key" : "LionCore-builtins-INamed-name"
180
+ },
181
+ "value" : "JSON"
182
+ },
183
+ {
184
+ "property": {
185
+ "language": "LionCore-M3",
186
+ "version" : "2023.1",
187
+ "key" : "IKeyed-key"
188
+ },
189
+ "value" : "LionCore-builtins-JSON"
190
+ }
191
+ ],
192
+ "containments": [],
193
+ "references" : [],
194
+ "annotations" : [],
195
+ "parent" : "LionCore-builtins"
196
+ },
197
+ {
198
+ "id" : "LionCore-builtins-Node",
199
+ "classifier" : {
200
+ "language": "LionCore-M3",
201
+ "version" : "2023.1",
202
+ "key" : "Concept"
203
+ },
204
+ "properties" : [
205
+ {
206
+ "property": {
207
+ "language": "LionCore-M3",
208
+ "version" : "2023.1",
209
+ "key" : "Concept-abstract"
210
+ },
211
+ "value" : "true"
212
+ },
213
+ {
214
+ "property": {
215
+ "language": "LionCore-M3",
216
+ "version" : "2023.1",
217
+ "key" : "Concept-partition"
218
+ },
219
+ "value" : "false"
220
+ },
221
+ {
222
+ "property": {
223
+ "language": "LionCore-builtins",
224
+ "version" : "2023.1",
225
+ "key" : "LionCore-builtins-INamed-name"
226
+ },
227
+ "value" : "Node"
228
+ },
229
+ {
230
+ "property": {
231
+ "language": "LionCore-M3",
232
+ "version" : "2023.1",
233
+ "key" : "IKeyed-key"
234
+ },
235
+ "value" : "LionCore-builtins-Node"
236
+ }
237
+ ],
238
+ "containments": [
239
+ {
240
+ "containment": {
241
+ "language": "LionCore-M3",
242
+ "version" : "2023.1",
243
+ "key" : "Classifier-features"
244
+ },
245
+ "children" : []
246
+ }
247
+ ],
248
+ "references" : [
249
+ {
250
+ "reference": {
251
+ "language": "LionCore-M3",
252
+ "version" : "2023.1",
253
+ "key" : "Concept-extends"
254
+ },
255
+ "targets" : []
256
+ },
257
+ {
258
+ "reference": {
259
+ "language": "LionCore-M3",
260
+ "version" : "2023.1",
261
+ "key" : "Concept-implements"
262
+ },
263
+ "targets" : []
264
+ }
265
+ ],
266
+ "annotations" : [],
267
+ "parent" : "LionCore-builtins"
268
+ },
269
+ {
270
+ "id" : "LionCore-builtins-INamed",
271
+ "classifier" : {
272
+ "language": "LionCore-M3",
273
+ "version" : "2023.1",
274
+ "key" : "Interface"
275
+ },
276
+ "properties" : [
277
+ {
278
+ "property": {
279
+ "language": "LionCore-builtins",
280
+ "version" : "2023.1",
281
+ "key" : "LionCore-builtins-INamed-name"
282
+ },
283
+ "value" : "INamed"
284
+ },
285
+ {
286
+ "property": {
287
+ "language": "LionCore-M3",
288
+ "version" : "2023.1",
289
+ "key" : "IKeyed-key"
290
+ },
291
+ "value" : "LionCore-builtins-INamed"
292
+ }
293
+ ],
294
+ "containments": [
295
+ {
296
+ "containment": {
297
+ "language": "LionCore-M3",
298
+ "version" : "2023.1",
299
+ "key" : "Classifier-features"
300
+ },
301
+ "children" : [
302
+ "LionCore-builtins-INamed-name"
303
+ ]
304
+ }
305
+ ],
306
+ "references" : [
307
+ {
308
+ "reference": {
309
+ "language": "LionCore-M3",
310
+ "version" : "2023.1",
311
+ "key" : "Interface-extends"
312
+ },
313
+ "targets" : []
314
+ }
315
+ ],
316
+ "annotations" : [],
317
+ "parent" : "LionCore-builtins"
318
+ },
319
+ {
320
+ "id" : "LionCore-builtins-INamed-name",
321
+ "classifier" : {
322
+ "language": "LionCore-M3",
323
+ "version" : "2023.1",
324
+ "key" : "Property"
325
+ },
326
+ "properties" : [
327
+ {
328
+ "property": {
329
+ "language": "LionCore-M3",
330
+ "version" : "2023.1",
331
+ "key" : "Feature-optional"
332
+ },
333
+ "value" : "false"
334
+ },
335
+ {
336
+ "property": {
337
+ "language": "LionCore-builtins",
338
+ "version" : "2023.1",
339
+ "key" : "LionCore-builtins-INamed-name"
340
+ },
341
+ "value" : "name"
342
+ },
343
+ {
344
+ "property": {
345
+ "language": "LionCore-M3",
346
+ "version" : "2023.1",
347
+ "key" : "IKeyed-key"
348
+ },
349
+ "value" : "LionCore-builtins-INamed-name"
350
+ }
351
+ ],
352
+ "containments": [],
353
+ "references" : [
354
+ {
355
+ "reference": {
356
+ "language": "LionCore-M3",
357
+ "version" : "2023.1",
358
+ "key" : "Property-type"
359
+ },
360
+ "targets" : [
361
+ {
362
+ "resolveInfo": "String",
363
+ "reference" : "LionCore-builtins-String"
364
+ }
365
+ ]
366
+ }
367
+ ],
368
+ "annotations" : [],
369
+ "parent" : "LionCore-builtins-INamed"
370
+ }
371
+ ]
372
+ }
@@ -0,0 +1,95 @@
1
+ import {
2
+ LionWebJsonChunkWrapper,
3
+ MetaPointers,
4
+ NodeUtils
5
+ } from "../json/index.js"
6
+ import { LionWebJsonChunk, LionWebJsonNode } from "../json/LionWebJson.js"
7
+ import { visitAndMap } from "../util/graphs.js"
8
+ import { isAnnotation, isConcept, isContainment, isInterface, isProperty, isReference } from "./LanguageUtils.js"
9
+
10
+ interface LionWebLanguageWrapperInterface {
11
+ superClassifiers: (classifier: LionWebJsonNode) => LionWebJsonNode[]
12
+ allClassifiers: (classifier: LionWebJsonNode) => LionWebJsonNode[]
13
+ propertyDefinitions: (classifier: LionWebJsonNode) => LionWebJsonNode[]
14
+ allProperties: (classifier: LionWebJsonNode) => LionWebJsonNode[]
15
+ referenceDefinitions: (classifier: LionWebJsonNode) => LionWebJsonNode[]
16
+ allReferenceDefinitions: (classifier: LionWebJsonNode) => LionWebJsonNode[]
17
+ containmentDefinitions: (classifier: LionWebJsonNode) => LionWebJsonNode[]
18
+ allContainments: (classifier: LionWebJsonNode) => LionWebJsonNode[]
19
+ }
20
+
21
+ /**
22
+ * Class encapsulating a chunk that represent a language.
23
+ */
24
+ export class LionWebLanguageWrapper extends LionWebJsonChunkWrapper implements LionWebLanguageWrapperInterface {
25
+ name: string
26
+ version: string
27
+ key: string
28
+
29
+ constructor(chunk: LionWebJsonChunk) {
30
+ super(chunk)
31
+ const languageNode: LionWebJsonNode = this.findNodesOfClassifier(MetaPointers.Language)[0]
32
+ const versionProp = NodeUtils.findProperty(languageNode, MetaPointers.LanguageVersion)
33
+ const keyProp = NodeUtils.findProperty(languageNode, MetaPointers.IKeyedKey)
34
+ const nameProp = NodeUtils.findProperty(languageNode, MetaPointers.INamedName)
35
+ this.version = versionProp?.value || "unknown"
36
+ this.key = keyProp?.value || "unknown"
37
+ this.name = nameProp?.value || "unknown"
38
+ }
39
+
40
+ superClassifiers = (classifier: LionWebJsonNode): LionWebJsonNode[] => {
41
+ const result: LionWebJsonNode[] = []
42
+
43
+ if (isConcept(classifier)) {
44
+ const extnds = NodeUtils.findReference(classifier, MetaPointers.ConceptExtends)
45
+ const implments = NodeUtils.findReference(classifier, MetaPointers.ConceptImplements)
46
+ result.push(...this.getReferredNodes(extnds))
47
+ result.push(...this.getReferredNodes(implments))
48
+ } else if (isAnnotation(classifier)) {
49
+ const extnds = NodeUtils.findReference(classifier, MetaPointers.AnnotationExtends)
50
+ const implments = NodeUtils.findReference(classifier, MetaPointers.AnnotationImplements)
51
+ result.push(...this.getReferredNodes(extnds))
52
+ result.push(...this.getReferredNodes(implments))
53
+ } else if (isInterface(classifier)) {
54
+ const extnds = NodeUtils.findReference(classifier, MetaPointers.InterfaceExtends)
55
+ result.push(...this.getReferredNodes(extnds))
56
+ } else {
57
+ throw new Error(`concept type ${typeof classifier} not handled`)
58
+ }
59
+ return result
60
+ }
61
+
62
+ allClassifiers = (classifier: LionWebJsonNode): LionWebJsonNode[] => {
63
+ return visitAndMap(this.superClassifiers, this.superClassifiers)(classifier)
64
+ }
65
+
66
+ propertyDefinitions = (classifier: LionWebJsonNode): LionWebJsonNode[] => {
67
+ const features = NodeUtils.findContainment(classifier, MetaPointers.ClassifierFeatures)
68
+ const properties = this.getChildrenAsNodes(features).filter(f => isProperty(f))
69
+ return properties
70
+ }
71
+
72
+ allProperties = (classifier: LionWebJsonNode): LionWebJsonNode[] => {
73
+ return visitAndMap(this.propertyDefinitions, this.superClassifiers)(classifier)
74
+ }
75
+
76
+ referenceDefinitions = (classifier: LionWebJsonNode): LionWebJsonNode[] => {
77
+ const features = NodeUtils.findContainment(classifier, MetaPointers.ClassifierFeatures)
78
+ const references = this.getChildrenAsNodes(features).filter(f => isReference(f))
79
+ return references
80
+ }
81
+
82
+ allReferenceDefinitions = (classifier: LionWebJsonNode): LionWebJsonNode[] => {
83
+ return visitAndMap(this.referenceDefinitions, this.superClassifiers)(classifier)
84
+ }
85
+
86
+ containmentDefinitions = (classifier: LionWebJsonNode): LionWebJsonNode[] => {
87
+ const features = NodeUtils.findContainment(classifier, MetaPointers.ClassifierFeatures)
88
+ const properties = this.getChildrenAsNodes(features).filter(f => isContainment(f))
89
+ return properties
90
+ }
91
+
92
+ allContainments = (classifier: LionWebJsonNode): LionWebJsonNode[] => {
93
+ return visitAndMap(this.containmentDefinitions, this.superClassifiers)(classifier)
94
+ }
95
+ }
@@ -0,0 +1,40 @@
1
+ import { LionWebJsonMetaPointer, LionWebJsonNode, MetaPointers, NodeUtils } from "../json/index.js"
2
+
3
+ export class MetaPointerMap {
4
+ /**
5
+ * Map from languageKey => languageVersion => key => LionWebJsonNode
6
+ */
7
+ map: Map<string, Map<string, Map<string, LionWebJsonNode>>> = new Map<string, Map<string, Map<string, LionWebJsonNode>>>()
8
+
9
+ add(languageKey: string, languageVersion: string, node: LionWebJsonNode): void {
10
+ const keyProperty = NodeUtils.findProperty(node, MetaPointers.IKeyedKey)
11
+ if (keyProperty === undefined) {
12
+ console.log("MetaPointerMap.add: trying to add node without key property.")
13
+ return
14
+ }
15
+ const key = keyProperty.value
16
+ if (key === undefined || key == null || key === "") {
17
+ console.log("MetaPointerMap.add: trying to add node without key property being empty or null.")
18
+ return
19
+ }
20
+ this.set({language: languageKey, version: languageVersion, key: key}, node)
21
+ }
22
+
23
+ set(mp: LionWebJsonMetaPointer, node: LionWebJsonNode): void {
24
+ let language = this.map.get(mp.language)
25
+ if (language === undefined) {
26
+ language = new Map<string, Map<string, LionWebJsonNode>>()
27
+ this.map.set(mp.language, language)
28
+ }
29
+ let version = language.get(mp.version)
30
+ if (version === undefined) {
31
+ version = new Map<string, LionWebJsonNode>()
32
+ language.set(mp.version, version)
33
+ }
34
+ version.set(mp.key, node)
35
+ }
36
+
37
+ get(mp: LionWebJsonMetaPointer): LionWebJsonNode | undefined {
38
+ return this.map.get(mp.language)?.get(mp.version)?.get(mp.key)
39
+ }
40
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./LanguageRegistry.js"
2
+ export * from "../languages/LanguageUtils.js"
@@ -1,58 +1,31 @@
1
1
  import fs from "fs"
2
- import { LionWebJsonChunkWrapper, LionWebLanguageDefinition } from "../json/index.js"
2
+ import { LanguageRegistry } from "../languages/index.js"
3
3
  import { LionWebValidator } from "../validators/LionWebValidator.js"
4
4
  import { ValidationResult } from "../validators/ValidationResult.js"
5
5
  import { getFilesRecursive, printIssues } from "./Utils.js"
6
6
 
7
- export function validateFile(file: string): void {
8
- const result = validateFileResult(file)
7
+ export function validateFile(file: string, registry: LanguageRegistry): void {
8
+ const result = validateFileResult(file, false, registry)
9
9
  printIssues(result)
10
10
  }
11
11
 
12
- export function validateFileResult(file: string): ValidationResult {
12
+ export function validateFileResult(file: string, validateAgainstLanguage: boolean, registry: LanguageRegistry): ValidationResult {
13
13
  if (file !== null) {
14
14
  const jsonString1 = fs.readFileSync(file, "utf-8")
15
15
  const json1 = JSON.parse(jsonString1)
16
- const validator = new LionWebValidator(json1, null)
16
+ const validator = new LionWebValidator(json1, registry)
17
17
 
18
18
  validator.validateSyntax()
19
19
  validator.validateReferences()
20
- validator.validateForLanguage()
21
- return validator.validationResult
22
- }
23
- return new ValidationResult()
24
- }
25
-
26
- export function validateFileResultWithLanguage(file: string, languageFile?: string | null): ValidationResult {
27
- let langDef: LionWebLanguageDefinition | null = null
28
-
29
- if (languageFile !== undefined && languageFile !== null) {
30
- const jsonString1 = fs.readFileSync(file, "utf-8")
31
- const languageJson = JSON.parse(jsonString1)
32
- const validator = new LionWebValidator(languageJson, null)
33
-
34
- validator.validateSyntax()
35
- validator.validateReferences()
36
- validator.validateForLanguage()
37
- if (validator.validationResult.hasErrors()) {
38
- return validator.validationResult
20
+ if (validateAgainstLanguage) {
21
+ validator.validateForLanguage()
39
22
  }
40
- langDef = new LionWebLanguageDefinition(new LionWebJsonChunkWrapper(languageJson))
41
- }
42
-
43
- if (file !== null) {
44
- const fileString = fs.readFileSync(file, "utf-8")
45
- const fileJson = JSON.parse(fileString)
46
- const validator = new LionWebValidator(fileJson, langDef)
47
- validator.validateSyntax()
48
- validator.validateReferences()
49
- validator.validateForLanguage()
50
23
  return validator.validationResult
51
24
  }
52
25
  return new ValidationResult()
53
26
  }
54
27
 
55
- export function validateFolder(folder: string): void {
28
+ export function validateFolder(folder: string, registry: LanguageRegistry): void {
56
29
  let totalErrors = 0
57
30
  let totalSucceed = 0
58
31
  let totalFailed = 0
@@ -60,7 +33,7 @@ export function validateFolder(folder: string): void {
60
33
  for (const f of getFilesRecursive(folder, [])) {
61
34
  const jsonString1 = fs.readFileSync(f, "utf-8")
62
35
  const json1 = JSON.parse(jsonString1)
63
- const validator = new LionWebValidator(json1, null)
36
+ const validator = new LionWebValidator(json1, registry)
64
37
 
65
38
  try {
66
39
  validator.validateAll()
@@ -1,5 +1,7 @@
1
+ import { LanguageRegistry } from "../languages/index.js"
1
2
  import { validateFolder } from "./FileUtils.js"
2
3
 
3
4
  const folder = process.argv[2]
4
5
 
5
- validateFolder(folder)
6
+ const registry = new LanguageRegistry()
7
+ validateFolder(folder, registry)
@@ -1,6 +1,6 @@
1
1
  import fs from "fs"
2
- import { LionWebJsonChunkWrapper } from "../json/LionWebJsonChunkWrapper.js"
3
- import { LionWebLanguageDefinition } from "../json/LionWebLanguageDefinition.js"
2
+ import { LanguageRegistry } from "../languages/index.js"
3
+ import { LionWebLanguageWrapper } from "../languages/LionWebLanguageWrapper.js"
4
4
  import { LionWebValidator } from "../validators/LionWebValidator.js"
5
5
  import { getFilesRecursive, printIssues } from "./Utils.js"
6
6
 
@@ -10,10 +10,13 @@ const language = process.argv[3]
10
10
  let totalSucceed = 0
11
11
  let totalFailed = 0
12
12
 
13
+ const registry = new LanguageRegistry()
13
14
  const languageString = fs.readFileSync(language, "utf-8")
14
15
  const languageJson = JSON.parse(languageString)
15
- const languageValidator = new LionWebValidator(languageJson, null)
16
+ const languageValidator = new LionWebValidator(languageJson, registry)
17
+ registry.addLanguage(new LionWebLanguageWrapper(languageJson))
16
18
 
19
+ console.log("Language is " + language)
17
20
  languageValidator.validateSyntax()
18
21
  languageValidator.validateReferences()
19
22
  if (languageValidator.validationResult.hasErrors()) {
@@ -25,10 +28,7 @@ if (languageValidator.validationResult.hasErrors()) {
25
28
  for (const modelFile of getFilesRecursive(folder, [])) {
26
29
  const jsonString1 = fs.readFileSync(modelFile, "utf-8")
27
30
  const jsonModel = JSON.parse(jsonString1)
28
- const modelValidator = new LionWebValidator(
29
- jsonModel,
30
- new LionWebLanguageDefinition(languageValidator.chunk as LionWebJsonChunkWrapper),
31
- )
31
+ const modelValidator = new LionWebValidator(jsonModel, registry )
32
32
 
33
33
  modelValidator.validateAll()
34
34
  if (modelValidator.validationResult.hasErrors()) {
@@ -1,5 +1,7 @@
1
+ import { LanguageRegistry } from "../languages/index.js"
1
2
  import { validateFile } from "./FileUtils.js"
2
3
 
3
4
  const file1 = process.argv[2]
4
5
 
5
- validateFile(file1)
6
+ const registry = new LanguageRegistry()
7
+ validateFile(file1, registry)
@@ -1,6 +1,6 @@
1
1
  import fs from "fs"
2
- import { LionWebJsonChunkWrapper } from "../json/LionWebJsonChunkWrapper.js"
3
- import { LionWebLanguageDefinition } from "../json/LionWebLanguageDefinition.js"
2
+ import { LanguageRegistry } from "../languages/index.js"
3
+ import { LionWebLanguageWrapper } from "../languages/LionWebLanguageWrapper.js"
4
4
  import { LionWebValidator } from "../validators/LionWebValidator.js"
5
5
  import { printIssues } from "./Utils.js"
6
6
 
@@ -12,18 +12,23 @@ if (modelFile !== null) {
12
12
  const jsonModel = JSON.parse(jsonString1)
13
13
  const languageString = fs.readFileSync(language, "utf-8")
14
14
  const languageJson = JSON.parse(languageString)
15
+ const m3String = fs.readFileSync("src/json/LionCore_M3.json", "utf-8")
16
+ const m3Json = JSON.parse(m3String)
17
+ const builtinString = fs.readFileSync("src/json/LionCore_builtins.json", "utf-8")
18
+ const builtinJson = JSON.parse(builtinString)
19
+ const registry = new LanguageRegistry()
20
+ registry.addLanguage(new LionWebLanguageWrapper(m3Json))
21
+ registry.addLanguage(new LionWebLanguageWrapper(builtinJson))
22
+ registry.addLanguage(new LionWebLanguageWrapper(languageJson))
15
23
 
16
- const languageValidator = new LionWebValidator(languageJson, null)
24
+ const languageValidator = new LionWebValidator(languageJson, registry)
17
25
 
18
26
  languageValidator.validateSyntax()
19
27
  languageValidator.validateReferences()
20
28
  console.log("===== Language errors ======")
21
29
  printIssues(languageValidator.validationResult)
22
30
 
23
- const modelValidator = new LionWebValidator(
24
- jsonModel,
25
- new LionWebLanguageDefinition(languageValidator.chunk as LionWebJsonChunkWrapper),
26
- )
31
+ const modelValidator = new LionWebValidator(jsonModel, registry)
27
32
  modelValidator.validateAll()
28
33
  console.log("===== Model errors ======")
29
34
  printIssues(modelValidator.validationResult)