@lionweb/validation 0.6.13-beta.2 → 0.6.13-beta.5

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 (190) hide show
  1. package/dist/index.d.ts +0 -3
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +0 -3
  4. package/dist/index.js.map +1 -1
  5. package/dist/issues/LanguageIssues.d.ts +4 -4
  6. package/dist/issues/LanguageIssues.d.ts.map +1 -1
  7. package/dist/issues/LanguageIssues.js +1 -1
  8. package/dist/issues/LanguageIssues.js.map +1 -1
  9. package/dist/issues/ReferenceIssues.d.ts +6 -6
  10. package/dist/issues/ReferenceIssues.d.ts.map +1 -1
  11. package/dist/issues/ReferenceIssues.js +3 -3
  12. package/dist/issues/ReferenceIssues.js.map +1 -1
  13. package/dist/issues/SyntaxIssues.d.ts +1 -1
  14. package/dist/issues/SyntaxIssues.d.ts.map +1 -1
  15. package/dist/issues/ValidationIssue.d.ts +1 -1
  16. package/dist/issues/ValidationIssue.d.ts.map +1 -1
  17. package/dist/issues/ValidationIssue.js.map +1 -1
  18. package/dist/issues/index.d.ts +0 -1
  19. package/dist/issues/index.d.ts.map +1 -1
  20. package/dist/issues/index.js +0 -1
  21. package/dist/issues/index.js.map +1 -1
  22. package/dist/languages/CompositeLionWebLanguageWrapper.d.ts +1 -1
  23. package/dist/languages/CompositeLionWebLanguageWrapper.d.ts.map +1 -1
  24. package/dist/languages/LanguageRegistry.d.ts +1 -1
  25. package/dist/languages/LanguageRegistry.d.ts.map +1 -1
  26. package/dist/languages/LanguageUtils.d.ts +1 -1
  27. package/dist/languages/LanguageUtils.d.ts.map +1 -1
  28. package/dist/languages/LanguageUtils.js +5 -5
  29. package/dist/languages/LanguageUtils.js.map +1 -1
  30. package/dist/languages/LionWebLanguageWrapper.d.ts +3 -3
  31. package/dist/languages/LionWebLanguageWrapper.d.ts.map +1 -1
  32. package/dist/languages/LionWebLanguageWrapper.js +2 -2
  33. package/dist/languages/LionWebLanguageWrapper.js.map +1 -1
  34. package/dist/languages/MetaPointerMap.d.ts +2 -2
  35. package/dist/languages/MetaPointerMap.d.ts.map +1 -1
  36. package/dist/languages/MetaPointerMap.js +1 -1
  37. package/dist/languages/MetaPointerMap.js.map +1 -1
  38. package/dist/runners/FileUtils.d.ts.map +1 -1
  39. package/dist/runners/FileUtils.js +1 -1
  40. package/dist/runners/FileUtils.js.map +1 -1
  41. package/dist/runners/RunCheckFolderWithLanguage.js.map +1 -1
  42. package/dist/runners/RunLioncoreDiff.js +1 -1
  43. package/dist/runners/RunLioncoreDiff.js.map +1 -1
  44. package/dist/validators/LionWebChunkDefinitions.d.ts.map +1 -1
  45. package/dist/validators/LionWebChunkDefinitions.js +1 -1
  46. package/dist/validators/LionWebChunkDefinitions.js.map +1 -1
  47. package/dist/validators/LionWebLanguageReferenceValidator.d.ts +2 -4
  48. package/dist/validators/LionWebLanguageReferenceValidator.d.ts.map +1 -1
  49. package/dist/validators/LionWebLanguageReferenceValidator.js +2 -6
  50. package/dist/validators/LionWebLanguageReferenceValidator.js.map +1 -1
  51. package/dist/validators/LionWebLanguageValidator.d.ts +2 -3
  52. package/dist/validators/LionWebLanguageValidator.d.ts.map +1 -1
  53. package/dist/validators/LionWebLanguageValidator.js +2 -4
  54. package/dist/validators/LionWebLanguageValidator.js.map +1 -1
  55. package/dist/validators/LionWebReferenceValidator.d.ts +3 -4
  56. package/dist/validators/LionWebReferenceValidator.d.ts.map +1 -1
  57. package/dist/validators/LionWebReferenceValidator.js +2 -3
  58. package/dist/validators/LionWebReferenceValidator.js.map +1 -1
  59. package/dist/validators/LionWebSyntaxValidator.d.ts.map +1 -1
  60. package/dist/validators/LionWebSyntaxValidator.js +1 -1
  61. package/dist/validators/LionWebSyntaxValidator.js.map +1 -1
  62. package/dist/validators/LionWebValidator.d.ts +1 -1
  63. package/dist/validators/LionWebValidator.d.ts.map +1 -1
  64. package/dist/validators/LionWebValidator.js +2 -2
  65. package/dist/validators/LionWebValidator.js.map +1 -1
  66. package/dist/validators/ValidationFunctions.d.ts +5 -1
  67. package/dist/validators/ValidationFunctions.d.ts.map +1 -1
  68. package/dist/validators/ValidationFunctions.js +0 -4
  69. package/dist/validators/ValidationFunctions.js.map +1 -1
  70. package/dist/validators/generic/SyntaxValidator.d.ts +1 -1
  71. package/dist/validators/generic/SyntaxValidator.d.ts.map +1 -1
  72. package/dist/validators/generic/SyntaxValidator.js +1 -1
  73. package/dist/validators/generic/SyntaxValidator.js.map +1 -1
  74. package/dist/validators/generic/ValidationTypes.d.ts +1 -1
  75. package/dist/validators/generic/ValidationTypes.d.ts.map +1 -1
  76. package/dist/validators/generic/ValidationTypes.js.map +1 -1
  77. package/package.json +6 -1
  78. package/src/index.ts +0 -3
  79. package/src/issues/LanguageIssues.ts +12 -14
  80. package/src/issues/ReferenceIssues.ts +9 -9
  81. package/src/issues/SyntaxIssues.ts +5 -5
  82. package/src/issues/ValidationIssue.ts +7 -4
  83. package/src/issues/index.ts +0 -1
  84. package/src/languages/CompositeLionWebLanguageWrapper.ts +1 -1
  85. package/src/languages/LanguageRegistry.ts +1 -1
  86. package/src/languages/LanguageUtils.ts +6 -6
  87. package/src/languages/LionWebLanguageWrapper.ts +5 -9
  88. package/src/languages/MetaPointerMap.ts +7 -6
  89. package/src/runners/FileUtils.ts +1 -1
  90. package/src/runners/RunCheckFolderWithLanguage.ts +1 -1
  91. package/src/runners/RunLioncoreDiff.ts +2 -2
  92. package/src/validators/LionWebChunkDefinitions.ts +1 -6
  93. package/src/validators/LionWebLanguageReferenceValidator.ts +17 -20
  94. package/src/validators/LionWebLanguageValidator.ts +2 -4
  95. package/src/validators/LionWebReferenceValidator.ts +6 -14
  96. package/src/validators/LionWebSyntaxValidator.ts +1 -1
  97. package/src/validators/LionWebValidator.ts +3 -3
  98. package/src/validators/ValidationFunctions.ts +1 -1
  99. package/src/validators/generic/SyntaxValidator.ts +1 -1
  100. package/src/validators/generic/ValidationTypes.ts +4 -5
  101. package/dist/diff/DiffResult.d.ts +0 -9
  102. package/dist/diff/DiffResult.d.ts.map +0 -1
  103. package/dist/diff/DiffResult.js +0 -18
  104. package/dist/diff/DiffResult.js.map +0 -1
  105. package/dist/diff/LionWebJsonDiff.d.ts +0 -25
  106. package/dist/diff/LionWebJsonDiff.d.ts.map +0 -1
  107. package/dist/diff/LionWebJsonDiff.js +0 -249
  108. package/dist/diff/LionWebJsonDiff.js.map +0 -1
  109. package/dist/diff/changes/Change.d.ts +0 -34
  110. package/dist/diff/changes/Change.d.ts.map +0 -1
  111. package/dist/diff/changes/Change.js +0 -38
  112. package/dist/diff/changes/Change.js.map +0 -1
  113. package/dist/diff/changes/ChunkChange.d.ts +0 -43
  114. package/dist/diff/changes/ChunkChange.d.ts.map +0 -1
  115. package/dist/diff/changes/ChunkChange.js +0 -57
  116. package/dist/diff/changes/ChunkChange.js.map +0 -1
  117. package/dist/diff/changes/ContainmentChange.d.ts +0 -25
  118. package/dist/diff/changes/ContainmentChange.d.ts.map +0 -1
  119. package/dist/diff/changes/ContainmentChange.js +0 -34
  120. package/dist/diff/changes/ContainmentChange.js.map +0 -1
  121. package/dist/diff/changes/NodeChange.d.ts +0 -41
  122. package/dist/diff/changes/NodeChange.d.ts.map +0 -1
  123. package/dist/diff/changes/NodeChange.js +0 -54
  124. package/dist/diff/changes/NodeChange.js.map +0 -1
  125. package/dist/diff/changes/PropertyChange.d.ts +0 -24
  126. package/dist/diff/changes/PropertyChange.d.ts.map +0 -1
  127. package/dist/diff/changes/PropertyChange.js +0 -29
  128. package/dist/diff/changes/PropertyChange.js.map +0 -1
  129. package/dist/diff/changes/ReferenceChange.d.ts +0 -25
  130. package/dist/diff/changes/ReferenceChange.d.ts.map +0 -1
  131. package/dist/diff/changes/ReferenceChange.js +0 -34
  132. package/dist/diff/changes/ReferenceChange.js.map +0 -1
  133. package/dist/diff/changes/index.d.ts +0 -7
  134. package/dist/diff/changes/index.d.ts.map +0 -1
  135. package/dist/diff/changes/index.js +0 -7
  136. package/dist/diff/changes/index.js.map +0 -1
  137. package/dist/diff/index.d.ts +0 -4
  138. package/dist/diff/index.d.ts.map +0 -1
  139. package/dist/diff/index.js +0 -4
  140. package/dist/diff/index.js.map +0 -1
  141. package/dist/json/ChunkUtils.d.ts +0 -26
  142. package/dist/json/ChunkUtils.d.ts.map +0 -1
  143. package/dist/json/ChunkUtils.js +0 -46
  144. package/dist/json/ChunkUtils.js.map +0 -1
  145. package/dist/json/JsonContext.d.ts +0 -11
  146. package/dist/json/JsonContext.d.ts.map +0 -1
  147. package/dist/json/JsonContext.js +0 -25
  148. package/dist/json/JsonContext.js.map +0 -1
  149. package/dist/json/LionWebJson.d.ts +0 -50
  150. package/dist/json/LionWebJson.d.ts.map +0 -1
  151. package/dist/json/LionWebJson.js +0 -27
  152. package/dist/json/LionWebJson.js.map +0 -1
  153. package/dist/json/LionWebJsonChunkWrapper.d.ts +0 -39
  154. package/dist/json/LionWebJsonChunkWrapper.d.ts.map +0 -1
  155. package/dist/json/LionWebJsonChunkWrapper.js +0 -119
  156. package/dist/json/LionWebJsonChunkWrapper.js.map +0 -1
  157. package/dist/json/M3definitions.d.ts +0 -176
  158. package/dist/json/M3definitions.d.ts.map +0 -1
  159. package/dist/json/M3definitions.js +0 -174
  160. package/dist/json/M3definitions.js.map +0 -1
  161. package/dist/json/NodeUtils.d.ts +0 -23
  162. package/dist/json/NodeUtils.d.ts.map +0 -1
  163. package/dist/json/NodeUtils.js +0 -57
  164. package/dist/json/NodeUtils.js.map +0 -1
  165. package/dist/json/index.d.ts +0 -7
  166. package/dist/json/index.d.ts.map +0 -1
  167. package/dist/json/index.js +0 -7
  168. package/dist/json/index.js.map +0 -1
  169. package/dist/util/graphs.d.ts +0 -18
  170. package/dist/util/graphs.d.ts.map +0 -1
  171. package/dist/util/graphs.js +0 -27
  172. package/dist/util/graphs.js.map +0 -1
  173. package/src/diff/DiffResult.ts +0 -21
  174. package/src/diff/LionWebJsonDiff.ts +0 -309
  175. package/src/diff/changes/Change.ts +0 -76
  176. package/src/diff/changes/ChunkChange.ts +0 -68
  177. package/src/diff/changes/ContainmentChange.ts +0 -32
  178. package/src/diff/changes/NodeChange.ts +0 -63
  179. package/src/diff/changes/PropertyChange.ts +0 -31
  180. package/src/diff/changes/ReferenceChange.ts +0 -34
  181. package/src/diff/changes/index.ts +0 -6
  182. package/src/diff/index.ts +0 -3
  183. package/src/json/ChunkUtils.ts +0 -49
  184. package/src/json/JsonContext.ts +0 -31
  185. package/src/json/LionWebJson.ts +0 -80
  186. package/src/json/LionWebJsonChunkWrapper.ts +0 -136
  187. package/src/json/M3definitions.ts +0 -177
  188. package/src/json/NodeUtils.ts +0 -75
  189. package/src/json/index.ts +0 -6
  190. package/src/util/graphs.ts +0 -36
@@ -1,12 +1,13 @@
1
- import { LionWebJsonMetaPointer, LionWebJsonNode, MetaPointers, NodeUtils } from "../json/index.js"
1
+ import { LionWebJsonMetaPointer, LionWebJsonNode, LionWebKey } from "@lionweb/json"
2
+ import { MetaPointers, NodeUtils } from "@lionweb/json-utils"
2
3
 
3
4
  export class MetaPointerMap {
4
5
  /**
5
6
  * Map from languageKey => languageVersion => key => LionWebJsonNode
6
7
  */
7
8
  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 {
9
+
10
+ add(languageKey: LionWebKey, languageVersion: string, node: LionWebJsonNode): void {
10
11
  const keyProperty = NodeUtils.findProperty(node, MetaPointers.IKeyedKey)
11
12
  if (keyProperty === undefined) {
12
13
  console.log("MetaPointerMap.add: trying to add node without key property.")
@@ -17,9 +18,9 @@ export class MetaPointerMap {
17
18
  console.log("MetaPointerMap.add: trying to add node without key property being empty or null.")
18
19
  return
19
20
  }
20
- this.set({language: languageKey, version: languageVersion, key: key}, node)
21
+ this.set({ language: languageKey, version: languageVersion, key: key }, node)
21
22
  }
22
-
23
+
23
24
  set(mp: LionWebJsonMetaPointer, node: LionWebJsonNode): void {
24
25
  let language = this.map.get(mp.language)
25
26
  if (language === undefined) {
@@ -33,7 +34,7 @@ export class MetaPointerMap {
33
34
  }
34
35
  version.set(mp.key, node)
35
36
  }
36
-
37
+
37
38
  get(mp: LionWebJsonMetaPointer): LionWebJsonNode | undefined {
38
39
  return this.map.get(mp.language)?.get(mp.version)?.get(mp.key)
39
40
  }
@@ -1,7 +1,7 @@
1
1
  import fs from "fs"
2
2
  import { LanguageRegistry } from "../languages/index.js"
3
- import { LionWebValidator } from "../validators/LionWebValidator.js"
4
3
  import { ValidationResult } from "../validators/generic/ValidationResult.js"
4
+ import { LionWebValidator } from "../validators/LionWebValidator.js"
5
5
  import { getFilesRecursive, printIssues } from "./Utils.js"
6
6
 
7
7
  export function validateFile(file: string, registry: LanguageRegistry): void {
@@ -28,7 +28,7 @@ if (languageValidator.validationResult.hasErrors()) {
28
28
  for (const modelFile of getFilesRecursive(folder, [])) {
29
29
  const jsonString1 = fs.readFileSync(modelFile, "utf-8")
30
30
  const jsonModel = JSON.parse(jsonString1)
31
- const modelValidator = new LionWebValidator(jsonModel, registry )
31
+ const modelValidator = new LionWebValidator(jsonModel, registry)
32
32
 
33
33
  modelValidator.validateAll()
34
34
  if (modelValidator.validationResult.hasErrors()) {
@@ -1,6 +1,6 @@
1
+ import { LionWebJsonChunk } from "@lionweb/json"
2
+ import { LionWebJsonDiff } from "@lionweb/json-diff"
1
3
  import fs from "fs"
2
- import { LionWebJsonDiff } from "../diff/index.js"
3
- import { LionWebJsonChunk } from "../json/LionWebJson.js"
4
4
 
5
5
  const file1 = process.argv[2]
6
6
  const file2 = process.argv[3]
@@ -1,10 +1,5 @@
1
- import {
2
- validateId,
3
- validateKey,
4
- validateSerializationFormatVersion,
5
- validateVersion
6
- } from "./ValidationFunctions.js"
7
1
  import { MAY_BE_NULL, PropertyDef, PropertyDefinition } from "./generic/ValidationTypes.js"
2
+ import { validateId, validateKey, validateSerializationFormatVersion, validateVersion } from "./ValidationFunctions.js"
8
3
 
9
4
  /**
10
5
  * The structure below defines the structure of a LionWeb Chunk by defining all the properties.
@@ -1,37 +1,34 @@
1
+ import { isEqualMetaPointer, LionWebJsonContainment, LionWebJsonNode, LionWebJsonProperty, LionWebJsonReference } from "@lionweb/json"
2
+ import {
3
+ JsonContext,
4
+ LION_CORE_BUILTINS_INAMED_NAME,
5
+ LIONWEB_BOOLEAN_TYPE, LIONWEB_INTEGER_TYPE, LIONWEB_JSON_TYPE, LIONWEB_STRING_TYPE,
6
+ LionWebJsonChunkWrapper,
7
+ M3_Keys,
8
+ MetaPointers,
9
+ NodeUtils
10
+ } from "@lionweb/json-utils"
1
11
  import {
2
12
  Language_ContainmentMetaPointerNotInClass_Issue,
3
- Language_IncorrectPropertyMetaPointer_Issue, Language_PropertyMetaPointerNotInClass_Issue,
4
- Language_PropertyValue_Issue, Language_ReferenceMetaPointerNotInClass_Issue,
13
+ Language_IncorrectPropertyMetaPointer_Issue,
14
+ Language_PropertyMetaPointerNotInClass_Issue,
15
+ Language_PropertyValue_Issue,
16
+ Language_ReferenceMetaPointerNotInClass_Issue,
5
17
  Language_UnknownConcept_Issue
6
18
  } from "../issues/index.js"
7
19
  import {
8
20
  Language_IncorrectContainmentMetaPointer_Issue,
9
21
  Language_IncorrectReferenceMetaPointer_Issue,
10
- Language_UnknownContainment_Issue, Language_UnknownProperty_Issue,
22
+ Language_UnknownContainment_Issue,
23
+ Language_UnknownProperty_Issue,
11
24
  Language_UnknownReference_Issue
12
25
  } from "../issues/LanguageIssues.js"
13
- import { isEqualMetaPointer, LionWebJsonNode, MetaPointers, NodeUtils } from "../json/index.js"
14
- import { JsonContext } from "../json/JsonContext.js"
15
- import {
16
- LionWebJsonContainment,
17
- LionWebJsonProperty,
18
- LionWebJsonReference,
19
- } from "../json/LionWebJson.js"
20
- import { LionWebJsonChunkWrapper } from "../json/LionWebJsonChunkWrapper.js"
21
26
  // import {
22
27
  // KnownLanguages, LanguageRegistry
23
28
  // } from "../languages/LanguageRegistry.js"
24
- import {
25
- LION_CORE_BUILTINS_INAMED_NAME,
26
- LIONWEB_BOOLEAN_TYPE,
27
- LIONWEB_INTEGER_TYPE,
28
- LIONWEB_JSON_TYPE,
29
- LIONWEB_STRING_TYPE,
30
- M3_Keys
31
- } from "../json/M3definitions.js"
32
29
  import { LanguageRegistry } from "../languages/index.js"
33
- import { validateBoolean, validateInteger, validateJSON } from "./ValidationFunctions.js"
34
30
  import { ValidationResult } from "./generic/ValidationResult.js"
31
+ import { validateBoolean, validateInteger, validateJSON } from "./ValidationFunctions.js"
35
32
 
36
33
  /**
37
34
  * Check against the language definition
@@ -1,9 +1,7 @@
1
+ import { isEqualMetaPointer, LionWebJsonChunk, LionWebJsonNode } from "@lionweb/json"
2
+ import { isLionWebM3Language, JsonContext, LionWebJsonChunkWrapper, MetaPointers } from "@lionweb/json-utils"
1
3
  import { GenericIssue } from "../issues/index.js"
2
4
  import { MissingM3Language_Issue } from "../issues/LanguageIssues.js"
3
- import { isEqualMetaPointer, LionWebJsonNode, MetaPointers } from "../json/index.js"
4
- import { JsonContext } from "../json/JsonContext.js"
5
- import { isLionWebM3Language, LionWebJsonChunk } from "../json/LionWebJson.js"
6
- import { LionWebJsonChunkWrapper } from "../json/LionWebJsonChunkWrapper.js"
7
5
  import { isConcept, LanguageRegistry } from "../languages/index.js"
8
6
  import { ValidationResult } from "./generic/ValidationResult.js"
9
7
 
@@ -1,21 +1,13 @@
1
+ import { LionWebId, LionWebJsonChunk, LionWebJsonContainment, LionWebJsonMetaPointer, LionWebJsonNode, LionWebJsonUsedLanguage } from "@lionweb/json"
2
+ import { ChunkUtils, JsonContext, LionWebJsonChunkWrapper } from "@lionweb/json-utils"
1
3
  import {
2
4
  Duplicates_Issue,
3
5
  Reference_ChildMissingInParent_Issue,
4
6
  Reference_CirculairParent_Issue,
5
7
  Reference_DuplicateNodeId_Issue,
6
8
  Reference_LanguageUnknown_Issue,
7
- Reference_ParentMissingInChild_Issue,
9
+ Reference_ParentMissingInChild_Issue
8
10
  } from "../issues/ReferenceIssues.js"
9
- import { JsonContext } from "../json/JsonContext.js"
10
- import { ChunkUtils } from "../json/ChunkUtils.js"
11
- import {
12
- LionWebJsonContainment,
13
- LionWebJsonChunk,
14
- LionWebJsonMetaPointer,
15
- LionWebJsonNode,
16
- LwJsonUsedLanguage,
17
- } from "../json/LionWebJson.js"
18
- import { LionWebJsonChunkWrapper } from "../json/LionWebJsonChunkWrapper.js"
19
11
  import { ValidationResult } from "./generic/ValidationResult.js"
20
12
 
21
13
  /**
@@ -136,7 +128,7 @@ export class LionWebReferenceValidator {
136
128
  * @param usedLanguages
137
129
  * @param context
138
130
  */
139
- checkDuplicateUsedLanguage(usedLanguages: LwJsonUsedLanguage[], context: JsonContext) {
131
+ checkDuplicateUsedLanguage(usedLanguages: LionWebJsonUsedLanguage[], context: JsonContext) {
140
132
  if (usedLanguages === null || usedLanguages === undefined) {
141
133
  return
142
134
  }
@@ -197,7 +189,7 @@ export class LionWebReferenceValidator {
197
189
 
198
190
  validateChildrenHaveCorrectParent(node: LionWebJsonNode, context: JsonContext) {
199
191
  node.containments.forEach((child: LionWebJsonContainment) => {
200
- child.children.forEach((childId: string, index: number) => {
192
+ child.children.forEach((childId: LionWebId, index: number) => {
201
193
  const childNode = this.nodesIdMap.get(childId)
202
194
  if (childNode !== undefined) {
203
195
  if (childNode.parent !== node.id) {
@@ -211,7 +203,7 @@ export class LionWebReferenceValidator {
211
203
  }
212
204
  })
213
205
  })
214
- node.annotations.forEach((annotationId: string, annotationIndex: number) => {
206
+ node.annotations.forEach((annotationId: LionWebId, annotationIndex: number) => {
215
207
  const childNode = this.nodesIdMap.get(annotationId)
216
208
  if (childNode !== undefined) {
217
209
  if (childNode.parent === null || childNode.parent === undefined) {
@@ -1,6 +1,6 @@
1
- import { expectedTypes } from "./LionWebChunkDefinitions.js"
2
1
  import { SyntaxValidator } from "./generic/SyntaxValidator.js"
3
2
  import { ValidationResult } from "./generic/ValidationResult.js"
3
+ import { expectedTypes } from "./LionWebChunkDefinitions.js"
4
4
 
5
5
  /**
6
6
  * LionWebSyntaxValidator can check whether objects are structurally LionWeb objects.
@@ -1,10 +1,10 @@
1
- import { LionWebJsonChunk } from "../json/LionWebJson.js"
2
- import { LionWebJsonChunkWrapper } from "../json/LionWebJsonChunkWrapper.js"
1
+ import { LionWebJsonChunk } from "@lionweb/json"
2
+ import { LionWebJsonChunkWrapper } from "@lionweb/json-utils"
3
3
  import { LanguageRegistry } from "../languages/index.js"
4
+ import { ValidationResult } from "./generic/ValidationResult.js"
4
5
  import { LionWebLanguageReferenceValidator } from "./LionWebLanguageReferenceValidator.js"
5
6
  import { LionWebReferenceValidator } from "./LionWebReferenceValidator.js"
6
7
  import { LionWebSyntaxValidator } from "./LionWebSyntaxValidator.js"
7
- import { ValidationResult } from "./generic/ValidationResult.js"
8
8
 
9
9
  /**
10
10
  * Combined validator that calls all available validators.
@@ -2,6 +2,7 @@
2
2
  * A list of functions that are used to validate primitive fields for LionWeb conformance.
3
3
  * Used in the LionWebSyntaxValidator.
4
4
  */
5
+ import { JsonContext } from "@lionweb/json-utils"
5
6
  import { Language_PropertyValue_Issue } from "../issues/LanguageIssues.js"
6
7
  import {
7
8
  Syntax_IdFormat_Issue,
@@ -10,7 +11,6 @@ import {
10
11
  Syntax_SerializationFormatVersion_Issue,
11
12
  Syntax_VersionFormat_Issue
12
13
  } from "../issues/SyntaxIssues.js"
13
- import { JsonContext } from "../json/JsonContext.js"
14
14
  import { ValidationResult } from "./generic/ValidationResult.js"
15
15
  import { PropertyDefinition } from "./generic/ValidationTypes.js"
16
16
 
@@ -1,3 +1,4 @@
1
+ import { JsonContext } from "@lionweb/json-utils"
1
2
  import {
2
3
  Syntax_ArrayContainsNull_Issue,
3
4
  Syntax_PropertyMissingIssue,
@@ -5,7 +6,6 @@ import {
5
6
  Syntax_PropertyTypeIssue,
6
7
  Syntax_PropertyUnknownIssue
7
8
  } from "../../issues/index.js"
8
- import { JsonContext } from "../../json/JsonContext.js"
9
9
  import { ValidationResult } from "./ValidationResult.js"
10
10
  import { PropertyDefinition, UnknownObjectType } from "./ValidationTypes.js"
11
11
 
@@ -1,11 +1,11 @@
1
- import { JsonContext } from "../../json/index.js"
1
+ import { JsonContext } from "@lionweb/json-utils"
2
2
  import { ValidationResult } from "./ValidationResult.js"
3
3
 
4
4
  export type UnknownObjectType = { [key: string]: unknown }
5
5
 
6
6
  /**
7
7
  * Definition of a property, used by the SyntaxValidator to validate objects.
8
- *
8
+ *
9
9
  * **Note** that some of the properties are defined as optional.
10
10
  * They should not be empty ever!! But being optional allows to leave them out in the `PropertyDef` function.
11
11
  * The `PropertyDef` function sets default values for all optional fields.
@@ -27,7 +27,7 @@ export type PropertyDefinition = {
27
27
  /**
28
28
  * IS this a list property?
29
29
  */
30
- isList?: boolean,
30
+ isList?: boolean
31
31
  /**
32
32
  * Additional validation function
33
33
  */
@@ -44,7 +44,7 @@ export type ValidatorFunction = <T>(obj: T, result: ValidationResult, ctx: JsonC
44
44
  * @param pdef
45
45
  */
46
46
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
47
- function emptyValidation<T>(object: T, result: ValidationResult, ctx: JsonContext, pdef?: PropertyDefinition): void {}
47
+ function emptyValidation<T>(object: T, result: ValidationResult, ctx: JsonContext, pdef?: PropertyDefinition): void {}
48
48
 
49
49
  // Make boolean argument more readable.
50
50
  export const MAY_BE_NULL = true
@@ -64,4 +64,3 @@ export function PropertyDef(propDef: PropertyDefinition): PropertyDefinition {
64
64
  validate: validate
65
65
  }
66
66
  }
67
-
@@ -1,9 +0,0 @@
1
- import { Change } from "./changes/Change.js";
2
- export declare class DiffResult {
3
- changes: Change[];
4
- change(issue: Change): void;
5
- reset(): void;
6
- hasChanges(): boolean;
7
- asStringArray(): string[];
8
- }
9
- //# sourceMappingURL=DiffResult.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DiffResult.d.ts","sourceRoot":"","sources":["../../src/diff/DiffResult.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAE5C,qBAAa,UAAU;IACnB,OAAO,EAAE,MAAM,EAAE,CAAK;IAEtB,MAAM,CAAC,KAAK,EAAE,MAAM;IAIpB,KAAK;IAIL,UAAU,IAAI,OAAO;IAIrB,aAAa,IAAI,MAAM,EAAE;CAG5B"}
@@ -1,18 +0,0 @@
1
- export class DiffResult {
2
- constructor() {
3
- this.changes = [];
4
- }
5
- change(issue) {
6
- this.changes.push(issue);
7
- }
8
- reset() {
9
- this.changes = [];
10
- }
11
- hasChanges() {
12
- return this.changes.length !== 0;
13
- }
14
- asStringArray() {
15
- return this.changes.map(ch => ch.changeMsg());
16
- }
17
- }
18
- //# sourceMappingURL=DiffResult.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DiffResult.js","sourceRoot":"","sources":["../../src/diff/DiffResult.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,UAAU;IAAvB;QACI,YAAO,GAAa,EAAE,CAAA;IAiB1B,CAAC;IAfG,MAAM,CAAC,KAAa;QAChB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC5B,CAAC;IAED,KAAK;QACD,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;IACrB,CAAC;IAED,UAAU;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAA;IACpC,CAAC;IAED,aAAa;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAA;IACjD,CAAC;CACJ"}
@@ -1,25 +0,0 @@
1
- import { JsonContext } from "../issues/index.js";
2
- import { LionWebJsonChunk, LionWebJsonContainment, LionWebJsonNode, LionWebJsonReference } from "../json/index.js";
3
- import { Change } from "./changes/Change.js";
4
- import { DiffResult } from "./DiffResult.js";
5
- /**
6
- * Comparing LionWeb JSON chunks and find all differences
7
- */
8
- export declare class LionWebJsonDiff {
9
- diffResult: DiffResult;
10
- constructor();
11
- change(change: Change): void;
12
- diff(ctx: JsonContext, msg: string): void;
13
- /**
14
- * Compare two LwNode objects and return their difference
15
- * @param beforeNode
16
- * @param afterNode
17
- */
18
- diffLwNode(ctx: JsonContext, beforeNode: LionWebJsonNode, afterNode: LionWebJsonNode): void;
19
- diffLwChunk(beforeChunk: LionWebJsonChunk, afterChunk: LionWebJsonChunk): void;
20
- diffContainment(ctx: JsonContext, node: LionWebJsonNode, beforeContainment: LionWebJsonContainment, afterContainment: LionWebJsonContainment): void;
21
- diffLwReference(ctx: JsonContext, node: LionWebJsonNode, beforeRef: LionWebJsonReference, afterRef: LionWebJsonReference): void;
22
- private diffLwUsedLanguage;
23
- private diffLwProperty;
24
- }
25
- //# sourceMappingURL=LionWebJsonDiff.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LionWebJsonDiff.d.ts","sourceRoot":"","sources":["../../src/diff/LionWebJsonDiff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAGH,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EAEf,oBAAoB,EAIvB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,MAAM,EAA0B,MAAM,qBAAqB,CAAA;AAMpE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C;;GAEG;AACH,qBAAa,eAAe;IACxB,UAAU,aAAmB;;IAI7B,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI5B,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM;IAKlC;;;;OAIG;IACH,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,eAAe,GAAG,IAAI;IAkH3F,WAAW,CAAC,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,GAAG,IAAI;IA4C9E,eAAe,CACX,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,eAAe,EACrB,iBAAiB,EAAE,sBAAsB,EACzC,gBAAgB,EAAE,sBAAsB,GACzC,IAAI;IAmCP,eAAe,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,oBAAoB,EAAE,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IA4C/H,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,cAAc;CAiBzB"}
@@ -1,249 +0,0 @@
1
- import { JsonContext } from "../issues/index.js";
2
- import { ChunkUtils, isEqualMetaPointer, isEqualReferenceTarget, NodeUtils } from "../json/index.js";
3
- import { GenericChange, Missing } from "./changes/Change.js";
4
- import { LanguageAdded, LanguageRemoved, NodeAdded, NodeRemoved, SerializationFormatChange } from "./changes/ChunkChange.js";
5
- import { ChildAdded, ChildRemoved, ChildOrderChanged } from "./changes/ContainmentChange.js";
6
- import { AnnotationAdded, AnnotationOrderChanged, AnnotationRemoved, TargetAdded, TargetOrderChanged, TargetRemoved } from "./changes/index.js";
7
- import { NodeClassifierChanged, ParentChanged } from "./changes/NodeChange.js";
8
- import { PropertyValueChanged } from "./changes/PropertyChange.js";
9
- import { DiffResult } from "./DiffResult.js";
10
- /**
11
- * Comparing LionWeb JSON chunks and find all differences
12
- */
13
- export class LionWebJsonDiff {
14
- constructor() {
15
- this.diffResult = new DiffResult();
16
- }
17
- change(change) {
18
- this.diffResult.change(change);
19
- }
20
- diff(ctx, msg) {
21
- const change = new GenericChange(ctx, msg);
22
- this.diffResult.change(change);
23
- }
24
- /**
25
- * Compare two LwNode objects and return their difference
26
- * @param beforeNode
27
- * @param afterNode
28
- */
29
- diffLwNode(ctx, beforeNode, afterNode) {
30
- if (!isEqualMetaPointer(beforeNode.classifier, afterNode.classifier)) {
31
- this.change(new NodeClassifierChanged(ctx.concat("classifier"), beforeNode, beforeNode.classifier, afterNode.classifier));
32
- }
33
- if (beforeNode.parent !== afterNode.parent) {
34
- this.change(new ParentChanged(ctx, beforeNode, beforeNode.parent, afterNode.parent));
35
- }
36
- // Find diff between previous and next properties
37
- beforeNode.properties.forEach((beforeProperty, index) => {
38
- const afterProperty = NodeUtils.findProperty(afterNode, beforeProperty.property);
39
- if (afterProperty === undefined) {
40
- this.change(new PropertyValueChanged(ctx.concat("properties", index), beforeNode.id, beforeProperty.property, beforeProperty.value, null, Missing.MissingAfter));
41
- }
42
- else {
43
- this.diffLwProperty(ctx.concat("properties", index), beforeNode, beforeProperty, afterProperty);
44
- }
45
- });
46
- afterNode.properties.forEach((afterProperty, index) => {
47
- const beforeProperty = NodeUtils.findProperty(beforeNode, afterProperty.property);
48
- if (beforeProperty === undefined) {
49
- this.change(new PropertyValueChanged(ctx.concat("properties", index), beforeNode.id, afterProperty.property, null, afterProperty.value, Missing.MissingBefore));
50
- }
51
- // no else, if the property exists in both nodes, the diff has been claculated in the loop before this one
52
- });
53
- beforeNode.containments.forEach((beforeContainment, index) => {
54
- const beforeKey = beforeContainment.containment.key;
55
- const afterContainment = NodeUtils.findChild(afterNode, beforeKey);
56
- if (afterContainment === undefined) {
57
- // NB No containment is considered equivalent to a containment with empty _children_
58
- if (beforeContainment.children.length !== 0) {
59
- beforeContainment.children.forEach(childId => {
60
- this.change(new ChildRemoved(ctx.concat("containments", index), beforeNode, beforeContainment.containment, afterContainment, childId, Missing.MissingAfter));
61
- });
62
- }
63
- }
64
- else {
65
- this.diffContainment(ctx.concat("containments", index), beforeNode, beforeContainment, afterContainment);
66
- }
67
- });
68
- afterNode.containments.forEach((afterContainment, index) => {
69
- const afterKey = afterContainment.containment.key;
70
- const beforeContainment = NodeUtils.findChild(beforeNode, afterKey);
71
- if (beforeContainment === undefined) {
72
- if (afterContainment.children.length !== 0) {
73
- afterContainment.children.forEach(childId => {
74
- this.change(new ChildAdded(ctx.concat("containments", index), afterNode, afterContainment.containment, afterContainment, childId, Missing.MissingBefore));
75
- });
76
- }
77
- }
78
- // No else, has already been done
79
- });
80
- beforeNode.references.forEach((beforeReference, index) => {
81
- const afterReference = NodeUtils.findReference(afterNode, beforeReference.reference);
82
- if (afterReference === undefined) {
83
- if (beforeReference.targets.length !== 0) {
84
- beforeReference.targets.forEach(target => {
85
- this.change(new TargetRemoved(ctx.concat("references", index), afterNode, beforeReference, afterReference, target, Missing.MissingAfter));
86
- });
87
- }
88
- }
89
- else {
90
- this.diffLwReference(ctx.concat("references", index), beforeNode, beforeReference, afterReference);
91
- }
92
- });
93
- afterNode.references.forEach((afterReference, index) => {
94
- const beforeReference = NodeUtils.findReference(afterNode, afterReference.reference);
95
- if (beforeReference === undefined) {
96
- if (afterReference.targets.length !== 0) {
97
- afterReference.targets.forEach(target => {
98
- this.change(new TargetAdded(ctx.concat("references", index), afterNode, beforeReference, afterReference, target, Missing.MissingBefore));
99
- });
100
- }
101
- }
102
- });
103
- if (beforeNode.annotations !== undefined && afterNode.annotations !== undefined) {
104
- let annotationDiffFound = false;
105
- beforeNode.annotations.forEach((beforeAnn, index) => {
106
- if (!afterNode.annotations.includes(beforeAnn)) {
107
- annotationDiffFound = true;
108
- this.change(new AnnotationRemoved(ctx, beforeNode, afterNode, beforeAnn, index));
109
- }
110
- });
111
- afterNode.annotations.forEach((afterAnn, index) => {
112
- if (!beforeNode.annotations.includes(afterAnn)) {
113
- annotationDiffFound = true;
114
- this.change(new AnnotationAdded(ctx, beforeNode, afterNode, afterAnn, index));
115
- }
116
- });
117
- if (!annotationDiffFound) {
118
- for (let i = 0; i < afterNode.annotations.length; i++) {
119
- if (afterNode.annotations[i] !== beforeNode.annotations[i]) {
120
- this.change(new AnnotationOrderChanged(ctx.concat("annotations"), beforeNode, afterNode, "", i));
121
- break;
122
- }
123
- }
124
- }
125
- }
126
- }
127
- diffLwChunk(beforeChunk, afterChunk) {
128
- const ctx = new JsonContext(null, ["$"]);
129
- if (beforeChunk.serializationFormatVersion !== afterChunk.serializationFormatVersion) {
130
- this.change(new SerializationFormatChange(ctx.concat("serializationFormatVersion"), beforeChunk.serializationFormatVersion, afterChunk.serializationFormatVersion));
131
- }
132
- beforeChunk.languages.forEach((beforeLanguage, index) => {
133
- const afterLanguage = ChunkUtils.findLwUsedLanguage(afterChunk, beforeLanguage.key);
134
- if (afterLanguage === null) {
135
- this.change(new LanguageRemoved(ctx.concat("languages", index), beforeLanguage));
136
- }
137
- else {
138
- this.diffLwUsedLanguage(ctx.concat("languages", index), beforeLanguage, afterLanguage);
139
- }
140
- });
141
- afterChunk.languages.forEach((afterLanguage, index) => {
142
- const beforeLanguage = ChunkUtils.findLwUsedLanguage(beforeChunk, afterLanguage.key);
143
- if (beforeLanguage === null) {
144
- this.change(new LanguageAdded(ctx.concat("languages", index), afterLanguage));
145
- }
146
- });
147
- beforeChunk.nodes.forEach((beforeNode, index) => {
148
- const beforeId = beforeNode.id;
149
- const afterNode = ChunkUtils.findNode(afterChunk, beforeId);
150
- const newCtx = ctx.concat("nodes", index);
151
- if (afterNode === null || afterNode === undefined) {
152
- this.change(new NodeRemoved(ctx, beforeNode));
153
- }
154
- else {
155
- this.diffLwNode(newCtx, beforeNode, afterNode);
156
- }
157
- });
158
- afterChunk.nodes.forEach((afterNode, index) => {
159
- const afterId = afterNode.id;
160
- const beforeNode = ChunkUtils.findNode(beforeChunk, afterId);
161
- if (beforeNode === null) {
162
- this.change(new NodeAdded(ctx.concat("nodes", index), afterNode));
163
- }
164
- });
165
- }
166
- diffContainment(ctx, node, beforeContainment, afterContainment) {
167
- if (!isEqualMetaPointer(beforeContainment.containment, afterContainment.containment)) {
168
- console.error("diffContainment: MetaPointers of containments should be identical");
169
- this.diff(ctx, `Containment Object has concept ${JSON.stringify(beforeContainment.containment)} vs ${JSON.stringify(afterContainment.containment)}`);
170
- }
171
- // Check whether children exist in both objects (two for loops)
172
- // TODO Also check for the order that can be changed!!!
173
- let changeFound = false;
174
- for (const childId1 of beforeContainment.children) {
175
- if (!afterContainment.children.includes(childId1)) {
176
- changeFound = true;
177
- this.change(new ChildRemoved(ctx, node, beforeContainment.containment, afterContainment, childId1));
178
- }
179
- }
180
- for (const childId2 of afterContainment.children) {
181
- if (!beforeContainment.children.includes(childId2)) {
182
- changeFound = true;
183
- this.change(new ChildAdded(ctx, node, beforeContainment.containment, afterContainment, childId2));
184
- }
185
- }
186
- if (!changeFound) {
187
- for (let i = 0; i < afterContainment.children.length; i++) {
188
- if (afterContainment.children[i] !== beforeContainment.children[i]) {
189
- this.change(new ChildOrderChanged(ctx.concat("children"), node, afterContainment.containment, afterContainment, ""));
190
- break;
191
- }
192
- }
193
- }
194
- }
195
- diffLwReference(ctx, node, beforeRef, afterRef) {
196
- if (!isEqualMetaPointer(beforeRef.reference, afterRef.reference)) {
197
- console.error("diffContainment: MetaPointers of references should be identical");
198
- this.diff(ctx, `Reference has concept ${JSON.stringify(beforeRef.reference)} vs ${JSON.stringify(afterRef.reference)}`);
199
- }
200
- let diffFound = false;
201
- beforeRef.targets.forEach((beforeTarget, index) => {
202
- const afterTarget = NodeUtils.findReferenceTarget(afterRef.targets, beforeTarget);
203
- if (afterTarget === undefined) {
204
- this.change(new TargetRemoved(ctx.concat("targets", index), node, beforeRef, afterRef, beforeTarget));
205
- diffFound = true;
206
- }
207
- else {
208
- if (!isEqualReferenceTarget(beforeTarget, afterTarget)) {
209
- this.diff(ctx.concat("targets", index), `ERROR: reference target ${JSON.stringify(beforeTarget)} vs ${JSON.stringify(afterTarget)}`);
210
- }
211
- }
212
- });
213
- afterRef.targets.forEach((afterTarget, index) => {
214
- const beforeTarget = NodeUtils.findReferenceTarget(beforeRef.targets, afterTarget);
215
- if (beforeTarget === undefined) {
216
- this.change(new TargetAdded(ctx.concat("targets", index), node, beforeRef, afterRef, afterTarget));
217
- diffFound = true;
218
- }
219
- else {
220
- if (!isEqualReferenceTarget(beforeTarget, afterTarget)) {
221
- this.diff(ctx.concat("targets", index), `ERROR: reference target ${JSON.stringify(beforeTarget)} vs ${JSON.stringify(afterTarget)}`);
222
- }
223
- }
224
- });
225
- if (!diffFound) {
226
- for (let i = 0; i < beforeRef.targets.length; i++) {
227
- if (!isEqualReferenceTarget(beforeRef.targets[i], afterRef.targets[i])) {
228
- this.change(new TargetOrderChanged(ctx.concat("targets"), node, beforeRef, afterRef, beforeRef.targets[i]));
229
- break;
230
- }
231
- }
232
- }
233
- }
234
- diffLwUsedLanguage(ctx, obj1, obj2) {
235
- if (obj1.key !== obj2.key || obj1.version !== obj2.version) {
236
- this.diff(ctx, `Different used languages ${JSON.stringify(obj1)} vs ${JSON.stringify(obj2)}`);
237
- }
238
- }
239
- diffLwProperty(ctx, node, beforeProperty, afterProperty) {
240
- if (!isEqualMetaPointer(beforeProperty.property, afterProperty.property)) {
241
- console.error("diffContainment: MetaPointers of properties should be identical");
242
- this.diff(ctx, `Property Object has concept ${JSON.stringify(beforeProperty.property)} vs ${JSON.stringify(afterProperty.property)}`);
243
- }
244
- if (beforeProperty.value !== afterProperty.value) {
245
- this.change(new PropertyValueChanged(ctx, node.id, beforeProperty.property, beforeProperty.value, afterProperty.value));
246
- }
247
- }
248
- }
249
- //# sourceMappingURL=LionWebJsonDiff.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LionWebJsonDiff.js","sourceRoot":"","sources":["../../src/diff/LionWebJsonDiff.ts"],"names":[],"mappings":"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"}