occam-verify-cli 1.0.383 → 1.0.385

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 (223) hide show
  1. package/lib/action/verify.js +2 -1
  2. package/lib/context/file.js +2 -2
  3. package/lib/context/release.js +2 -2
  4. package/lib/mixins/statement/verify.js +3 -3
  5. package/lib/mixins/step/unify.js +4 -4
  6. package/lib/mixins/term/verify.js +4 -4
  7. package/lib/ontology/assertion/contained.js +316 -0
  8. package/lib/ontology/assertion/defined.js +290 -0
  9. package/lib/ontology/assertion/property.js +271 -0
  10. package/lib/ontology/assertion/satisfies.js +254 -0
  11. package/lib/ontology/assertion/subproof.js +186 -0
  12. package/lib/ontology/assertion/type.js +252 -0
  13. package/lib/{dom → ontology}/axiom.js +3 -3
  14. package/lib/{dom → ontology}/combinator/bracketed.js +4 -4
  15. package/lib/ontology/combinator.js +141 -0
  16. package/lib/ontology/conclusion.js +172 -0
  17. package/lib/{dom → ontology}/conjecture.js +3 -3
  18. package/lib/{dom → ontology}/constructor/bracketed.js +5 -5
  19. package/lib/ontology/constructor.js +171 -0
  20. package/lib/ontology/declaration/combinator.js +168 -0
  21. package/lib/ontology/declaration/complexType.js +346 -0
  22. package/lib/ontology/declaration/constructor.js +199 -0
  23. package/lib/ontology/declaration/metavariable.js +209 -0
  24. package/lib/ontology/declaration/simpleType.js +243 -0
  25. package/lib/ontology/declaration/typePrefix.js +181 -0
  26. package/lib/ontology/declaration/variable.js +197 -0
  27. package/lib/ontology/declaration.js +360 -0
  28. package/lib/ontology/deduction.js +186 -0
  29. package/lib/ontology/derivation.js +155 -0
  30. package/lib/ontology/equality.js +288 -0
  31. package/lib/{dom → ontology}/error.js +3 -3
  32. package/lib/ontology/frame.js +362 -0
  33. package/lib/ontology/hypothesis.js +190 -0
  34. package/lib/ontology/judgement.js +241 -0
  35. package/lib/ontology/label.js +199 -0
  36. package/lib/{dom → ontology}/lemma.js +3 -3
  37. package/lib/{dom → ontology}/metaLemma.js +3 -3
  38. package/lib/{dom → ontology}/metaType.js +3 -3
  39. package/lib/{dom → ontology}/metatheorem.js +3 -3
  40. package/lib/ontology/metavariable.js +504 -0
  41. package/lib/{dom → ontology}/parameter.js +3 -3
  42. package/lib/ontology/premise.js +271 -0
  43. package/lib/ontology/procedureCall.js +243 -0
  44. package/lib/{dom → ontology}/procedureReference.js +3 -3
  45. package/lib/{dom → ontology}/proof.js +4 -4
  46. package/lib/ontology/property.js +166 -0
  47. package/lib/ontology/propertyRelation.js +202 -0
  48. package/lib/ontology/reference.js +293 -0
  49. package/lib/ontology/rule.js +375 -0
  50. package/lib/ontology/section.js +255 -0
  51. package/lib/ontology/signature.js +220 -0
  52. package/lib/{dom → ontology}/statement.js +3 -3
  53. package/lib/ontology/step.js +283 -0
  54. package/lib/ontology/subDerivation.js +147 -0
  55. package/lib/ontology/subproof.js +266 -0
  56. package/lib/ontology/substitution/frame.js +216 -0
  57. package/lib/{dom → ontology}/substitution/reference.js +3 -3
  58. package/lib/{dom → ontology}/substitution/statement.js +3 -3
  59. package/lib/ontology/substitution/term.js +230 -0
  60. package/lib/ontology/substitution.js +207 -0
  61. package/lib/ontology/supposition.js +283 -0
  62. package/lib/ontology/term.js +339 -0
  63. package/lib/{dom → ontology}/theorem.js +3 -3
  64. package/lib/ontology/topLevelAssertion.js +432 -0
  65. package/lib/ontology/topLevelMetaAssertion.js +235 -0
  66. package/lib/ontology/type.js +556 -0
  67. package/lib/ontology/typePrefix.js +99 -0
  68. package/lib/ontology/variable.js +331 -0
  69. package/lib/ontology.js +27 -0
  70. package/lib/preamble.js +60 -60
  71. package/lib/unifier/intrinsicLevel.js +3 -3
  72. package/lib/unifier/metaLevel.js +7 -7
  73. package/lib/unifier/metavariable.js +3 -3
  74. package/lib/unifier/statementWithCombinator.js +5 -5
  75. package/lib/unifier/termWithConstructor.js +3 -3
  76. package/lib/utilities/brackets.js +5 -5
  77. package/lib/utilities/context.js +12 -12
  78. package/lib/utilities/fileSystem.js +2 -2
  79. package/lib/utilities/json.js +30 -30
  80. package/lib/utilities/node.js +7 -7
  81. package/lib/utilities/release.js +12 -4
  82. package/lib/utilities/releaseContext.js +1 -1
  83. package/lib/utilities/substitutions.js +6 -6
  84. package/lib/utilities/type.js +2 -2
  85. package/lib/verifier/combinator.js +4 -4
  86. package/lib/verifier/constructor.js +3 -3
  87. package/lib/verifier/topLevel.js +18 -18
  88. package/package.json +1 -1
  89. package/src/action/verify.js +2 -0
  90. package/src/context/file.js +1 -1
  91. package/src/context/release.js +1 -1
  92. package/src/mixins/statement/verify.js +2 -2
  93. package/src/mixins/step/unify.js +3 -3
  94. package/src/mixins/term/verify.js +3 -3
  95. package/src/{dom → ontology}/assertion/contained.js +4 -4
  96. package/src/{dom → ontology}/assertion/defined.js +6 -6
  97. package/src/{dom → ontology}/assertion/property.js +5 -5
  98. package/src/{dom → ontology}/assertion/satisfies.js +5 -5
  99. package/src/{dom → ontology}/assertion/subproof.js +4 -4
  100. package/src/{dom → ontology}/assertion/type.js +5 -5
  101. package/src/{dom → ontology}/axiom.js +2 -2
  102. package/src/{dom → ontology}/combinator/bracketed.js +4 -4
  103. package/src/{dom → ontology}/combinator.js +4 -4
  104. package/src/{dom → ontology}/conclusion.js +4 -4
  105. package/src/{dom → ontology}/conjecture.js +2 -2
  106. package/src/{dom → ontology}/constructor/bracketed.js +5 -5
  107. package/src/{dom → ontology}/constructor.js +5 -5
  108. package/src/{dom → ontology}/declaration/combinator.js +4 -4
  109. package/src/{dom → ontology}/declaration/complexType.js +4 -4
  110. package/src/{dom → ontology}/declaration/constructor.js +4 -4
  111. package/src/{dom → ontology}/declaration/metavariable.js +5 -5
  112. package/src/{dom → ontology}/declaration/simpleType.js +4 -4
  113. package/src/{dom → ontology}/declaration/typePrefix.js +4 -4
  114. package/src/{dom → ontology}/declaration/variable.js +4 -4
  115. package/src/{dom → ontology}/declaration.js +5 -5
  116. package/src/{dom → ontology}/deduction.js +4 -4
  117. package/src/{dom → ontology}/derivation.js +4 -4
  118. package/src/{dom → ontology}/equality.js +6 -6
  119. package/src/{dom → ontology}/error.js +2 -2
  120. package/src/{dom → ontology}/frame.js +6 -6
  121. package/src/{dom → ontology}/hypothesis.js +5 -6
  122. package/src/{dom → ontology}/judgement.js +5 -5
  123. package/src/{dom → ontology}/label.js +4 -4
  124. package/src/{dom → ontology}/lemma.js +2 -2
  125. package/src/{dom → ontology}/metaLemma.js +2 -2
  126. package/src/{dom → ontology}/metaType.js +2 -2
  127. package/src/{dom → ontology}/metatheorem.js +2 -2
  128. package/src/{dom → ontology}/metavariable.js +8 -8
  129. package/src/{dom → ontology}/parameter.js +2 -2
  130. package/src/{dom → ontology}/premise.js +5 -5
  131. package/src/{dom → ontology}/procedureCall.js +5 -5
  132. package/src/{dom → ontology}/procedureReference.js +2 -2
  133. package/src/{dom → ontology}/proof.js +4 -4
  134. package/src/{dom → ontology}/property.js +4 -4
  135. package/src/{dom → ontology}/propertyRelation.js +4 -4
  136. package/src/{dom → ontology}/reference.js +6 -6
  137. package/src/{dom → ontology}/rule.js +7 -7
  138. package/src/{dom → ontology}/section.js +8 -8
  139. package/src/{dom → ontology}/signature.js +4 -4
  140. package/src/{dom → ontology}/statement.js +2 -2
  141. package/src/{dom → ontology}/step.js +4 -4
  142. package/src/{dom → ontology}/subDerivation.js +4 -4
  143. package/src/{dom → ontology}/subproof.js +5 -5
  144. package/src/{dom → ontology}/substitution/frame.js +4 -4
  145. package/src/{dom → ontology}/substitution/reference.js +2 -2
  146. package/src/{dom → ontology}/substitution/statement.js +2 -2
  147. package/src/{dom → ontology}/substitution/term.js +5 -5
  148. package/src/{dom → ontology}/supposition.js +5 -5
  149. package/src/{dom → ontology}/term.js +6 -6
  150. package/src/{dom → ontology}/theorem.js +2 -2
  151. package/src/{dom → ontology}/topLevelAssertion.js +6 -6
  152. package/src/{dom → ontology}/topLevelMetaAssertion.js +2 -2
  153. package/src/{dom → ontology}/type.js +4 -4
  154. package/src/{dom → ontology}/typePrefix.js +3 -5
  155. package/src/{dom → ontology}/variable.js +6 -6
  156. package/src/ontology.js +13 -0
  157. package/src/preamble.js +59 -59
  158. package/src/unifier/intrinsicLevel.js +2 -2
  159. package/src/unifier/metaLevel.js +6 -6
  160. package/src/unifier/metavariable.js +2 -2
  161. package/src/unifier/statementWithCombinator.js +4 -4
  162. package/src/unifier/termWithConstructor.js +2 -2
  163. package/src/utilities/brackets.js +4 -4
  164. package/src/utilities/context.js +11 -11
  165. package/src/utilities/fileSystem.js +1 -1
  166. package/src/utilities/json.js +29 -29
  167. package/src/utilities/node.js +6 -6
  168. package/src/utilities/release.js +1 -1
  169. package/src/utilities/releaseContext.js +3 -3
  170. package/src/utilities/substitutions.js +5 -5
  171. package/src/utilities/type.js +1 -1
  172. package/src/verifier/combinator.js +3 -3
  173. package/src/verifier/constructor.js +2 -2
  174. package/src/verifier/topLevel.js +17 -17
  175. package/lib/dom/assertion/contained.js +0 -316
  176. package/lib/dom/assertion/defined.js +0 -290
  177. package/lib/dom/assertion/property.js +0 -271
  178. package/lib/dom/assertion/satisfies.js +0 -254
  179. package/lib/dom/assertion/subproof.js +0 -186
  180. package/lib/dom/assertion/type.js +0 -252
  181. package/lib/dom/combinator.js +0 -141
  182. package/lib/dom/conclusion.js +0 -172
  183. package/lib/dom/constructor.js +0 -171
  184. package/lib/dom/declaration/combinator.js +0 -168
  185. package/lib/dom/declaration/complexType.js +0 -346
  186. package/lib/dom/declaration/constructor.js +0 -199
  187. package/lib/dom/declaration/metavariable.js +0 -209
  188. package/lib/dom/declaration/simpleType.js +0 -243
  189. package/lib/dom/declaration/typePrefix.js +0 -181
  190. package/lib/dom/declaration/variable.js +0 -197
  191. package/lib/dom/declaration.js +0 -360
  192. package/lib/dom/deduction.js +0 -186
  193. package/lib/dom/derivation.js +0 -155
  194. package/lib/dom/equality.js +0 -288
  195. package/lib/dom/frame.js +0 -362
  196. package/lib/dom/hypothesis.js +0 -191
  197. package/lib/dom/judgement.js +0 -241
  198. package/lib/dom/label.js +0 -199
  199. package/lib/dom/metavariable.js +0 -504
  200. package/lib/dom/premise.js +0 -271
  201. package/lib/dom/procedureCall.js +0 -243
  202. package/lib/dom/property.js +0 -166
  203. package/lib/dom/propertyRelation.js +0 -202
  204. package/lib/dom/reference.js +0 -293
  205. package/lib/dom/rule.js +0 -375
  206. package/lib/dom/section.js +0 -255
  207. package/lib/dom/signature.js +0 -220
  208. package/lib/dom/step.js +0 -283
  209. package/lib/dom/subDerivation.js +0 -147
  210. package/lib/dom/subproof.js +0 -266
  211. package/lib/dom/substitution/frame.js +0 -216
  212. package/lib/dom/substitution/term.js +0 -230
  213. package/lib/dom/substitution.js +0 -207
  214. package/lib/dom/supposition.js +0 -283
  215. package/lib/dom/term.js +0 -339
  216. package/lib/dom/topLevelAssertion.js +0 -432
  217. package/lib/dom/topLevelMetaAssertion.js +0 -235
  218. package/lib/dom/type.js +0 -556
  219. package/lib/dom/typePrefix.js +0 -100
  220. package/lib/dom/variable.js +0 -331
  221. package/lib/dom.js +0 -27
  222. package/src/dom.js +0 -13
  223. /package/src/{dom → ontology}/substitution.js +0 -0
@@ -0,0 +1,346 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "default", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return _default;
9
+ }
10
+ });
11
+ var _ontology = /*#__PURE__*/ _interop_require_wildcard(require("../../ontology"));
12
+ var _type = require("../../utilities/type");
13
+ function _class_call_check(instance, Constructor) {
14
+ if (!(instance instanceof Constructor)) {
15
+ throw new TypeError("Cannot call a class as a function");
16
+ }
17
+ }
18
+ function _defineProperties(target, props) {
19
+ for(var i = 0; i < props.length; i++){
20
+ var descriptor = props[i];
21
+ descriptor.enumerable = descriptor.enumerable || false;
22
+ descriptor.configurable = true;
23
+ if ("value" in descriptor) descriptor.writable = true;
24
+ Object.defineProperty(target, descriptor.key, descriptor);
25
+ }
26
+ }
27
+ function _create_class(Constructor, protoProps, staticProps) {
28
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
29
+ if (staticProps) _defineProperties(Constructor, staticProps);
30
+ return Constructor;
31
+ }
32
+ function _define_property(obj, key, value) {
33
+ if (key in obj) {
34
+ Object.defineProperty(obj, key, {
35
+ value: value,
36
+ enumerable: true,
37
+ configurable: true,
38
+ writable: true
39
+ });
40
+ } else {
41
+ obj[key] = value;
42
+ }
43
+ return obj;
44
+ }
45
+ function _getRequireWildcardCache(nodeInterop) {
46
+ if (typeof WeakMap !== "function") return null;
47
+ var cacheBabelInterop = new WeakMap();
48
+ var cacheNodeInterop = new WeakMap();
49
+ return (_getRequireWildcardCache = function(nodeInterop) {
50
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
51
+ })(nodeInterop);
52
+ }
53
+ function _interop_require_wildcard(obj, nodeInterop) {
54
+ if (!nodeInterop && obj && obj.__esModule) {
55
+ return obj;
56
+ }
57
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
58
+ return {
59
+ default: obj
60
+ };
61
+ }
62
+ var cache = _getRequireWildcardCache(nodeInterop);
63
+ if (cache && cache.has(obj)) {
64
+ return cache.get(obj);
65
+ }
66
+ var newObj = {
67
+ __proto__: null
68
+ };
69
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
70
+ for(var key in obj){
71
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
72
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
73
+ if (desc && (desc.get || desc.set)) {
74
+ Object.defineProperty(newObj, key, desc);
75
+ } else {
76
+ newObj[key] = obj[key];
77
+ }
78
+ }
79
+ }
80
+ newObj.default = obj;
81
+ if (cache) {
82
+ cache.set(obj, newObj);
83
+ }
84
+ return newObj;
85
+ }
86
+ var _ComplexTypeDeclaration;
87
+ var _default = (0, _ontology.define)((_ComplexTypeDeclaration = /*#__PURE__*/ function() {
88
+ function ComplexTypeDeclaration(context, node, string, type, prefixed) {
89
+ _class_call_check(this, ComplexTypeDeclaration);
90
+ this.context = context;
91
+ this.node = node;
92
+ this.string = string;
93
+ this.type = type;
94
+ this.prefixed = prefixed;
95
+ }
96
+ _create_class(ComplexTypeDeclaration, [
97
+ {
98
+ key: "getContext",
99
+ value: function getContext() {
100
+ return this.context;
101
+ }
102
+ },
103
+ {
104
+ key: "getNode",
105
+ value: function getNode() {
106
+ return this.node;
107
+ }
108
+ },
109
+ {
110
+ key: "getString",
111
+ value: function getString() {
112
+ return this.string;
113
+ }
114
+ },
115
+ {
116
+ key: "getType",
117
+ value: function getType() {
118
+ return this.type;
119
+ }
120
+ },
121
+ {
122
+ key: "isPrefixed",
123
+ value: function isPrefixed() {
124
+ return this.prefixed;
125
+ }
126
+ },
127
+ {
128
+ key: "verify",
129
+ value: function verify() {
130
+ var verifies = false;
131
+ var complexTypeDeclarationString = this.string; ///
132
+ this.context.trace("Verifying the '".concat(complexTypeDeclarationString, "' complex type declaration..."), this.node);
133
+ if (this.prefixed) {
134
+ var typeString = this.type.getString();
135
+ this.context.trace("The '".concat(typeString, "' type is prefixed."));
136
+ } else {
137
+ var typeVerifies = this.verifyType();
138
+ if (typeVerifies) {
139
+ var superTypesVerify = this.verifySuperTypes();
140
+ if (superTypesVerify) {
141
+ var propertiesVerify = this.verifyProperties();
142
+ if (propertiesVerify) {
143
+ var typePrefix = this.context.getTypePrefix();
144
+ if (typePrefix !== null) {
145
+ var typePrefixName = typePrefix.getName(), prefixName = typePrefixName; ///
146
+ this.type.setPrefixName(prefixName);
147
+ }
148
+ this.context.addType(this.type);
149
+ verifies = true;
150
+ }
151
+ }
152
+ }
153
+ }
154
+ if (verifies) {
155
+ this.context.debug("...verified the '".concat(complexTypeDeclarationString, "' complex type declaration."), this.node);
156
+ }
157
+ return verifies;
158
+ }
159
+ },
160
+ {
161
+ key: "verifyType",
162
+ value: function verifyType() {
163
+ var typeVerifies = false;
164
+ var typeString = this.type.getString();
165
+ this.context.trace("Verifying the '".concat(typeString, "' complex type..."), this.node);
166
+ var typeName = this.type.getName(), includeRelease = true, includeDependencies = false, typePresent = this.context.isTypePresentByTypeName(typeName, includeRelease, includeDependencies);
167
+ if (typePresent) {
168
+ this.context.trace("The '".concat(typeString, "' type is already present."), this.node);
169
+ } else {
170
+ var prefixedTypeName = typeName, typePresent1 = this.context.isTypePresentByPrefixedTypeName(prefixedTypeName);
171
+ if (typePresent1) {
172
+ this.context.trace("The '".concat(typeString, "' type is already present."), this.node);
173
+ } else {
174
+ typeVerifies = true;
175
+ }
176
+ }
177
+ if (typeVerifies) {
178
+ this.context.trace("...verified the '".concat(typeString, "' complex type."), this.node);
179
+ }
180
+ return typeVerifies;
181
+ }
182
+ },
183
+ {
184
+ key: "verifySuperType",
185
+ value: function verifySuperType(superType) {
186
+ var superTypeVerifies = false;
187
+ var superTypeString = superType.getString();
188
+ this.context.trace("Verifying the '".concat(superTypeString, "' super-type..."), this.node);
189
+ var nominalTypeName = superType.getNominalTypeName(), typeName = nominalTypeName, typeNameMatches = this.type.matchTypeName(typeName);
190
+ if (typeNameMatches) {
191
+ this.context.trace("The super-type's name matches the ".concat(typeName, "' complex type's name."), this.node);
192
+ } else {
193
+ var oldSuperType = superType;
194
+ superType = this.context.findTypeByNominalTypeName(nominalTypeName);
195
+ var superTypePresent = superType !== null;
196
+ if (superTypePresent) {
197
+ var newSuperType = superType; ///
198
+ this.type.replaceSuperType(oldSuperType, newSuperType);
199
+ superTypeVerifies = true;
200
+ }
201
+ }
202
+ if (superTypeVerifies) {
203
+ this.context.debug("...verified the '".concat(superTypeString, "' super-type."), this.node);
204
+ }
205
+ return superTypeVerifies;
206
+ }
207
+ },
208
+ {
209
+ key: "verifySuperTypes",
210
+ value: function verifySuperTypes() {
211
+ var _this = this;
212
+ var superTypesVerify;
213
+ var typeString = this.type.getString();
214
+ this.context.trace("Verifying the '".concat(typeString, "' complex type's super-types..."), this.node);
215
+ var typeBasic = this.type.isBasic();
216
+ if (typeBasic) {
217
+ superTypesVerify = true;
218
+ this.context.trace("The '".concat(typeString, "' complex type is basic."), this.node);
219
+ } else {
220
+ var superTypes = this.type.getSuperTypes();
221
+ superTypesVerify = superTypes.every(function(superType) {
222
+ var superTypeVerifies = _this.verifySuperType(superType);
223
+ if (superTypeVerifies) {
224
+ return true;
225
+ }
226
+ });
227
+ }
228
+ if (superTypesVerify) {
229
+ this.context.debug("...verified the '".concat(typeString, "' complex type's super-types."), this.node);
230
+ }
231
+ return superTypesVerify;
232
+ }
233
+ },
234
+ {
235
+ key: "verifyProperty",
236
+ value: function verifyProperty(property, properties) {
237
+ var propertyVerifies = false;
238
+ var propertyString = property.getString();
239
+ this.context.trace("Verifying the '".concat(propertyString, "' property..."), this.node);
240
+ var propertyNameVerifies = this.verifyPropertyName(property, properties);
241
+ if (propertyNameVerifies) {
242
+ var propertyNominalTypeNameVerifies = this.verifyPropertyNominalTypeName(property, properties);
243
+ if (propertyNominalTypeNameVerifies) {
244
+ propertyVerifies = true;
245
+ }
246
+ }
247
+ if (propertyVerifies) {
248
+ this.context.debug("...verified the '".concat(propertyString, "' property."), this.node);
249
+ }
250
+ return propertyVerifies;
251
+ }
252
+ },
253
+ {
254
+ key: "verifyProperties",
255
+ value: function verifyProperties() {
256
+ var _this = this;
257
+ var propertiesVerify;
258
+ var typeString = this.type.getString();
259
+ this.context.trace("Verifying the '".concat(typeString, "' complex type's properties..."), this.node);
260
+ var includeSuperTypes = false, properties = this.type.getProperties(includeSuperTypes);
261
+ propertiesVerify = properties.every(function(property) {
262
+ var propertyVerifies = _this.verifyProperty(property, properties);
263
+ if (propertyVerifies) {
264
+ return true;
265
+ }
266
+ });
267
+ if (propertiesVerify) {
268
+ this.context.debug("...verified the '".concat(typeString, "' complex type's properties."), this.node);
269
+ }
270
+ return propertiesVerify;
271
+ }
272
+ },
273
+ {
274
+ key: "verifyPropertyName",
275
+ value: function verifyPropertyName(property, properties) {
276
+ var propertyNameVerifies = false;
277
+ var propertyString = property.getString();
278
+ this.context.trace("Verifying the '".concat(propertyString, "' property's name..."), this.node);
279
+ var propertyName = property.getName(), count = properties.reduce(function(count, property) {
280
+ var propertyNameMatches = property.matchPropertyName(propertyName);
281
+ if (propertyNameMatches) {
282
+ count++;
283
+ }
284
+ return count;
285
+ }, 0);
286
+ if (count > 1) {
287
+ this.context.debug("The '".concat(propertyString, "' property appears more than once."), this.node);
288
+ } else {
289
+ var superTypes = this.type.getSuperTypes(), superType = superTypes.find(function(superType) {
290
+ var superTypeProperties = superType.getProperties(), propertyNameMatches = superTypeProperties.some(function(superTypeProperty) {
291
+ var propertyNameMatches = superTypeProperty.matchPropertyName(propertyName);
292
+ if (propertyNameMatches) {
293
+ return true;
294
+ }
295
+ });
296
+ if (propertyNameMatches) {
297
+ return true;
298
+ }
299
+ }) || null;
300
+ if (superType !== null) {
301
+ var superTypeString = superType.getString();
302
+ this.context.debug("The '".concat(superTypeString, "' super-type has the same property."), this.node);
303
+ } else {
304
+ propertyNameVerifies = true;
305
+ }
306
+ }
307
+ if (propertyNameVerifies) {
308
+ this.context.debug("...verified the '".concat(propertyString, "' property's name."), this.node);
309
+ }
310
+ return propertyNameVerifies;
311
+ }
312
+ },
313
+ {
314
+ key: "verifyPropertyNominalTypeName",
315
+ value: function verifyPropertyNominalTypeName(property) {
316
+ var propertyNominalTypeNameVerifies = false;
317
+ var propertyString = property.getString(), nominalTypeName = property.getNominalTypeName();
318
+ this.context.trace("Verifying the '".concat(propertyString, "' property's '").concat(nominalTypeName, "' nominal type name..."), this.node);
319
+ var nominalTypeNameMatches = this.type.matchNominalTypeName(nominalTypeName);
320
+ if (nominalTypeNameMatches) {
321
+ propertyNominalTypeNameVerifies = true;
322
+ } else {
323
+ var typePresent = this.context.isTypePresentByNominalTypeName(nominalTypeName);
324
+ if (typePresent) {
325
+ propertyNominalTypeNameVerifies = true;
326
+ }
327
+ }
328
+ if (propertyNominalTypeNameVerifies) {
329
+ this.context.debug("...verifies the '".concat(propertyString, "' property's '").concat(nominalTypeName, "' nominal type name."), this.node);
330
+ }
331
+ return propertyNominalTypeNameVerifies;
332
+ }
333
+ }
334
+ ], [
335
+ {
336
+ key: "fromComplexTypeDeclarationNode",
337
+ value: function fromComplexTypeDeclarationNode(complexTypeDeclarationNode, context) {
338
+ var Type = _ontology.default.Type, type = Type.fromComplexTypeDeclarationNode(complexTypeDeclarationNode, context), node = complexTypeDeclarationNode, prefixed = complexTypeDeclarationNode.isPrefixed(), typePrefixName = complexTypeDeclarationNode.getTypePrefixName(), typeName = type.getName(), superTypes = type.getSuperTypes(), string = (0, _type.stringFromTypeNameTypePrefixNameAndSuperTypes)(typeName, typePrefixName, superTypes), complexTypeDeclaration = new ComplexTypeDeclaration(context, node, string, type, prefixed);
339
+ return complexTypeDeclaration;
340
+ }
341
+ }
342
+ ]);
343
+ return ComplexTypeDeclaration;
344
+ }(), _define_property(_ComplexTypeDeclaration, "name", "ComplexTypeDeclaration"), _ComplexTypeDeclaration));
345
+
346
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9vbnRvbG9neS9kZWNsYXJhdGlvbi9jb21wbGV4VHlwZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IG9udG9sb2d5IGZyb20gXCIuLi8uLi9vbnRvbG9neVwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vb250b2xvZ3lcIjtcbmltcG9ydCB7IHN0cmluZ0Zyb21UeXBlTmFtZVR5cGVQcmVmaXhOYW1lQW5kU3VwZXJUeXBlcyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvdHlwZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgQ29tcGxleFR5cGVEZWNsYXJhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIG5vZGUsIHN0cmluZywgdHlwZSwgcHJlZml4ZWQpIHtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gICAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnByZWZpeGVkID0gcHJlZml4ZWQ7XG4gIH1cblxuICBnZXRDb250ZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHQ7XG4gIH1cblxuICBnZXROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLm5vZGU7XG4gIH1cblxuICBnZXRTdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5nO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgaXNQcmVmaXhlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcmVmaXhlZDtcbiAgfVxuXG4gIHZlcmlmeSgpIHtcbiAgICBsZXQgdmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25TdHJpbmcgPSB0aGlzLnN0cmluZzsgLy8vXG5cbiAgICB0aGlzLmNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y29tcGxleFR5cGVEZWNsYXJhdGlvblN0cmluZ30nIGNvbXBsZXggdHlwZSBkZWNsYXJhdGlvbi4uLmAsIHRoaXMubm9kZSk7XG5cbiAgICBpZiAodGhpcy5wcmVmaXhlZCkge1xuICAgICAgY29uc3QgdHlwZVN0cmluZyA9IHRoaXMudHlwZS5nZXRTdHJpbmcoKTtcblxuICAgICAgdGhpcy5jb250ZXh0LnRyYWNlKGBUaGUgJyR7dHlwZVN0cmluZ30nIHR5cGUgaXMgcHJlZml4ZWQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHR5cGVWZXJpZmllcyA9IHRoaXMudmVyaWZ5VHlwZSgpO1xuXG4gICAgICBpZiAodHlwZVZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnN0IHN1cGVyVHlwZXNWZXJpZnkgPSB0aGlzLnZlcmlmeVN1cGVyVHlwZXMoKTtcblxuICAgICAgICBpZiAoc3VwZXJUeXBlc1ZlcmlmeSkge1xuICAgICAgICAgIGNvbnN0IHByb3BlcnRpZXNWZXJpZnkgPSB0aGlzLnZlcmlmeVByb3BlcnRpZXMoKTtcblxuICAgICAgICAgIGlmIChwcm9wZXJ0aWVzVmVyaWZ5KSB7XG4gICAgICAgICAgICBjb25zdCB0eXBlUHJlZml4ID0gdGhpcy5jb250ZXh0LmdldFR5cGVQcmVmaXgoKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVQcmVmaXggIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgY29uc3QgdHlwZVByZWZpeE5hbWUgPSB0eXBlUHJlZml4LmdldE5hbWUoKSxcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4TmFtZSA9IHR5cGVQcmVmaXhOYW1lOyAgLy8vXG5cbiAgICAgICAgICAgICAgdGhpcy50eXBlLnNldFByZWZpeE5hbWUocHJlZml4TmFtZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5hZGRUeXBlKHRoaXMudHlwZSk7XG5cbiAgICAgICAgICAgIHZlcmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgIHRoaXMuY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NvbXBsZXhUeXBlRGVjbGFyYXRpb25TdHJpbmd9JyBjb21wbGV4IHR5cGUgZGVjbGFyYXRpb24uYCwgdGhpcy5ub2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZXM7XG4gIH1cblxuICB2ZXJpZnlUeXBlKCkge1xuICAgIGxldCB0eXBlVmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHR5cGVTdHJpbmcgPSB0aGlzLnR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLmNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dHlwZVN0cmluZ30nIGNvbXBsZXggdHlwZS4uLmAsIHRoaXMubm9kZSk7XG5cbiAgICBjb25zdCB0eXBlTmFtZSA9IHRoaXMudHlwZS5nZXROYW1lKCksXG4gICAgICAgICAgaW5jbHVkZVJlbGVhc2UgPSB0cnVlLFxuICAgICAgICAgIGluY2x1ZGVEZXBlbmRlbmNpZXMgPSBmYWxzZSxcbiAgICAgICAgICB0eXBlUHJlc2VudCA9IHRoaXMuY29udGV4dC5pc1R5cGVQcmVzZW50QnlUeXBlTmFtZSh0eXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UsIGluY2x1ZGVEZXBlbmRlbmNpZXMpO1xuXG4gICAgaWYgKHR5cGVQcmVzZW50KSB7XG4gICAgICB0aGlzLmNvbnRleHQudHJhY2UoYFRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZSBpcyBhbHJlYWR5IHByZXNlbnQuYCwgdGhpcy5ub2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcHJlZml4ZWRUeXBlTmFtZSA9IHR5cGVOYW1lLCAvLy9cbiAgICAgICAgICAgIHR5cGVQcmVzZW50ID0gdGhpcy5jb250ZXh0LmlzVHlwZVByZXNlbnRCeVByZWZpeGVkVHlwZU5hbWUocHJlZml4ZWRUeXBlTmFtZSk7XG5cbiAgICAgIGlmICh0eXBlUHJlc2VudCkge1xuICAgICAgICB0aGlzLmNvbnRleHQudHJhY2UoYFRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZSBpcyBhbHJlYWR5IHByZXNlbnQuYCwgdGhpcy5ub2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHR5cGVWZXJpZmllcyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVWZXJpZmllcykge1xuICAgICAgdGhpcy5jb250ZXh0LnRyYWNlKGAuLi52ZXJpZmllZCB0aGUgJyR7dHlwZVN0cmluZ30nIGNvbXBsZXggdHlwZS5gLCB0aGlzLm5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlVmVyaWZpZXM7XG4gIH1cblxuICB2ZXJpZnlTdXBlclR5cGUoc3VwZXJUeXBlKSB7XG4gICAgbGV0IHN1cGVyVHlwZVZlcmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBzdXBlclR5cGVTdHJpbmcgPSBzdXBlclR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLmNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7c3VwZXJUeXBlU3RyaW5nfScgc3VwZXItdHlwZS4uLmAsIHRoaXMubm9kZSk7XG5cbiAgICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSBzdXBlclR5cGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCksXG4gICAgICAgICAgdHlwZU5hbWUgPSBub21pbmFsVHlwZU5hbWUsIC8vL1xuICAgICAgICAgIHR5cGVOYW1lTWF0Y2hlcyA9IHRoaXMudHlwZS5tYXRjaFR5cGVOYW1lKHR5cGVOYW1lKTtcblxuICAgIGlmICh0eXBlTmFtZU1hdGNoZXMpIHtcbiAgICAgIHRoaXMuY29udGV4dC50cmFjZShgVGhlIHN1cGVyLXR5cGUncyBuYW1lIG1hdGNoZXMgdGhlICR7dHlwZU5hbWV9JyBjb21wbGV4IHR5cGUncyBuYW1lLmAsIHRoaXMubm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG9sZFN1cGVyVHlwZSA9IHN1cGVyVHlwZTtcblxuICAgICAgc3VwZXJUeXBlID0gdGhpcy5jb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgY29uc3Qgc3VwZXJUeXBlUHJlc2VudCA9IChzdXBlclR5cGUgIT09IG51bGwpO1xuXG4gICAgICBpZiAoc3VwZXJUeXBlUHJlc2VudCkge1xuICAgICAgICBjb25zdCBuZXdTdXBlclR5cGUgPSBzdXBlclR5cGU7IC8vL1xuXG4gICAgICAgIHRoaXMudHlwZS5yZXBsYWNlU3VwZXJUeXBlKG9sZFN1cGVyVHlwZSwgbmV3U3VwZXJUeXBlKTtcblxuICAgICAgICBzdXBlclR5cGVWZXJpZmllcyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN1cGVyVHlwZVZlcmlmaWVzKSB7XG4gICAgICB0aGlzLmNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzdXBlclR5cGVTdHJpbmd9JyBzdXBlci10eXBlLmAsIHRoaXMubm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyVHlwZVZlcmlmaWVzO1xuICB9XG5cbiAgdmVyaWZ5U3VwZXJUeXBlcygpIHtcbiAgICBsZXQgc3VwZXJUeXBlc1ZlcmlmeTtcblxuICAgIGNvbnN0IHR5cGVTdHJpbmcgPSB0aGlzLnR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLmNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dHlwZVN0cmluZ30nIGNvbXBsZXggdHlwZSdzIHN1cGVyLXR5cGVzLi4uYCwgdGhpcy5ub2RlKTtcblxuICAgIGNvbnN0IHR5cGVCYXNpYyA9IHRoaXMudHlwZS5pc0Jhc2ljKCk7XG5cbiAgICBpZiAodHlwZUJhc2ljKSB7XG4gICAgICBzdXBlclR5cGVzVmVyaWZ5ID0gdHJ1ZTtcblxuICAgICAgdGhpcy5jb250ZXh0LnRyYWNlKGBUaGUgJyR7dHlwZVN0cmluZ30nIGNvbXBsZXggdHlwZSBpcyBiYXNpYy5gLCB0aGlzLm5vZGUpXG4gICAgfSBlbHNlICB7XG4gICAgICBjb25zdCBzdXBlclR5cGVzID0gdGhpcy50eXBlLmdldFN1cGVyVHlwZXMoKTtcblxuICAgICAgc3VwZXJUeXBlc1ZlcmlmeSA9IHN1cGVyVHlwZXMuZXZlcnkoKHN1cGVyVHlwZSkgPT4ge1xuICAgICAgICBjb25zdCBzdXBlclR5cGVWZXJpZmllcyA9IHRoaXMudmVyaWZ5U3VwZXJUeXBlKHN1cGVyVHlwZSk7XG5cbiAgICAgICAgaWYgKHN1cGVyVHlwZVZlcmlmaWVzKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChzdXBlclR5cGVzVmVyaWZ5KSB7XG4gICAgICB0aGlzLmNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0eXBlU3RyaW5nfScgY29tcGxleCB0eXBlJ3Mgc3VwZXItdHlwZXMuYCwgdGhpcy5ub2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXJUeXBlc1ZlcmlmeTtcbiAgfVxuXG4gIHZlcmlmeVByb3BlcnR5KHByb3BlcnR5LCBwcm9wZXJ0aWVzKSB7XG4gICAgbGV0IHByb3BlcnR5VmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHByb3BlcnR5U3RyaW5nID0gcHJvcGVydHkuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLmNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7cHJvcGVydHlTdHJpbmd9JyBwcm9wZXJ0eS4uLmAsIHRoaXMubm9kZSk7XG5cbiAgICBjb25zdCBwcm9wZXJ0eU5hbWVWZXJpZmllcyA9IHRoaXMudmVyaWZ5UHJvcGVydHlOYW1lKHByb3BlcnR5LCBwcm9wZXJ0aWVzKTtcblxuICAgIGlmIChwcm9wZXJ0eU5hbWVWZXJpZmllcykge1xuICAgICAgY29uc3QgcHJvcGVydHlOb21pbmFsVHlwZU5hbWVWZXJpZmllcyA9IHRoaXMudmVyaWZ5UHJvcGVydHlOb21pbmFsVHlwZU5hbWUocHJvcGVydHksIHByb3BlcnRpZXMpO1xuXG4gICAgICBpZiAocHJvcGVydHlOb21pbmFsVHlwZU5hbWVWZXJpZmllcykge1xuICAgICAgICBwcm9wZXJ0eVZlcmlmaWVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJvcGVydHlWZXJpZmllcykge1xuICAgICAgdGhpcy5jb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cHJvcGVydHlTdHJpbmd9JyBwcm9wZXJ0eS5gLCB0aGlzLm5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wZXJ0eVZlcmlmaWVzO1xuICB9XG5cbiAgdmVyaWZ5UHJvcGVydGllcygpIHtcbiAgICBsZXQgcHJvcGVydGllc1ZlcmlmeTtcblxuICAgIGNvbnN0IHR5cGVTdHJpbmcgPSB0aGlzLnR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLmNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dHlwZVN0cmluZ30nIGNvbXBsZXggdHlwZSdzIHByb3BlcnRpZXMuLi5gLCB0aGlzLm5vZGUpO1xuXG4gICAgY29uc3QgaW5jbHVkZVN1cGVyVHlwZXMgPSBmYWxzZSxcbiAgICAgICAgICBwcm9wZXJ0aWVzID0gdGhpcy50eXBlLmdldFByb3BlcnRpZXMoaW5jbHVkZVN1cGVyVHlwZXMpO1xuXG4gICAgcHJvcGVydGllc1ZlcmlmeSA9IHByb3BlcnRpZXMuZXZlcnkoKHByb3BlcnR5KSA9PiB7XG4gICAgICBjb25zdCBwcm9wZXJ0eVZlcmlmaWVzID0gdGhpcy52ZXJpZnlQcm9wZXJ0eShwcm9wZXJ0eSwgcHJvcGVydGllcyk7XG5cbiAgICAgIGlmIChwcm9wZXJ0eVZlcmlmaWVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BlcnRpZXNWZXJpZnkpIHtcbiAgICAgIHRoaXMuY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3R5cGVTdHJpbmd9JyBjb21wbGV4IHR5cGUncyBwcm9wZXJ0aWVzLmAsIHRoaXMubm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnRpZXNWZXJpZnk7XG4gIH1cblxuICB2ZXJpZnlQcm9wZXJ0eU5hbWUocHJvcGVydHksIHByb3BlcnRpZXMpIHtcbiAgICBsZXQgcHJvcGVydHlOYW1lVmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHByb3BlcnR5U3RyaW5nID0gcHJvcGVydHkuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLmNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7cHJvcGVydHlTdHJpbmd9JyBwcm9wZXJ0eSdzIG5hbWUuLi5gLCB0aGlzLm5vZGUpO1xuXG4gICAgY29uc3QgcHJvcGVydHlOYW1lID0gcHJvcGVydHkuZ2V0TmFtZSgpLFxuICAgICAgICAgIGNvdW50ID0gcHJvcGVydGllcy5yZWR1Y2UoKGNvdW50LCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlOYW1lTWF0Y2hlcyA9IHByb3BlcnR5Lm1hdGNoUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSk7XG5cbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjb3VudDtcbiAgICAgICAgICB9LCAwKTtcblxuICAgIGlmIChjb3VudCA+IDEpIHtcbiAgICAgIHRoaXMuY29udGV4dC5kZWJ1ZyhgVGhlICcke3Byb3BlcnR5U3RyaW5nfScgcHJvcGVydHkgYXBwZWFycyBtb3JlIHRoYW4gb25jZS5gLCB0aGlzLm5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdXBlclR5cGVzID0gdGhpcy50eXBlLmdldFN1cGVyVHlwZXMoKSxcbiAgICAgICAgICAgIHN1cGVyVHlwZSA9IHN1cGVyVHlwZXMuZmluZCgoc3VwZXJUeXBlKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHN1cGVyVHlwZVByb3BlcnRpZXMgPSBzdXBlclR5cGUuZ2V0UHJvcGVydGllcygpLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVNYXRjaGVzID0gc3VwZXJUeXBlUHJvcGVydGllcy5zb21lKChzdXBlclR5cGVQcm9wZXJ0eSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5TmFtZU1hdGNoZXMgPSBzdXBlclR5cGVQcm9wZXJ0eS5tYXRjaFByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5TmFtZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgaWYgKHByb3BlcnR5TmFtZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgICAgaWYgKHN1cGVyVHlwZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBzdXBlclR5cGVTdHJpbmcgPSBzdXBlclR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgdGhpcy5jb250ZXh0LmRlYnVnKGBUaGUgJyR7c3VwZXJUeXBlU3RyaW5nfScgc3VwZXItdHlwZSBoYXMgdGhlIHNhbWUgcHJvcGVydHkuYCwgdGhpcy5ub2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb3BlcnR5TmFtZVZlcmlmaWVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJvcGVydHlOYW1lVmVyaWZpZXMpIHtcbiAgICAgIHRoaXMuY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3Byb3BlcnR5U3RyaW5nfScgcHJvcGVydHkncyBuYW1lLmAsIHRoaXMubm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnR5TmFtZVZlcmlmaWVzO1xuICB9XG5cbiAgdmVyaWZ5UHJvcGVydHlOb21pbmFsVHlwZU5hbWUocHJvcGVydHkpIHtcbiAgICBsZXQgcHJvcGVydHlOb21pbmFsVHlwZU5hbWVWZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgcHJvcGVydHlTdHJpbmcgPSBwcm9wZXJ0eS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSBwcm9wZXJ0eS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgIHRoaXMuY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtwcm9wZXJ0eVN0cmluZ30nIHByb3BlcnR5J3MgJyR7bm9taW5hbFR5cGVOYW1lfScgbm9taW5hbCB0eXBlIG5hbWUuLi5gLCB0aGlzLm5vZGUpO1xuXG4gICAgY29uc3Qgbm9taW5hbFR5cGVOYW1lTWF0Y2hlcyA9IHRoaXMudHlwZS5tYXRjaE5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgaWYgKG5vbWluYWxUeXBlTmFtZU1hdGNoZXMpIHtcbiAgICAgIHByb3BlcnR5Tm9taW5hbFR5cGVOYW1lVmVyaWZpZXMgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0eXBlUHJlc2VudCA9IHRoaXMuY29udGV4dC5pc1R5cGVQcmVzZW50QnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgaWYgKHR5cGVQcmVzZW50KSB7XG4gICAgICAgIHByb3BlcnR5Tm9taW5hbFR5cGVOYW1lVmVyaWZpZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm9wZXJ0eU5vbWluYWxUeXBlTmFtZVZlcmlmaWVzKSB7XG4gICAgICB0aGlzLmNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVzIHRoZSAnJHtwcm9wZXJ0eVN0cmluZ30nIHByb3BlcnR5J3MgJyR7bm9taW5hbFR5cGVOYW1lfScgbm9taW5hbCB0eXBlIG5hbWUuYCwgdGhpcy5ub2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydHlOb21pbmFsVHlwZU5hbWVWZXJpZmllcztcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJDb21wbGV4VHlwZURlY2xhcmF0aW9uXCI7XG5cbiAgc3RhdGljIGZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICAgIGNvbnN0IHsgVHlwZSB9ID0gb250b2xvZ3ksXG4gICAgICAgICAgdHlwZSA9IFR5cGUuZnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBub2RlID0gY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgICBwcmVmaXhlZCA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLmlzUHJlZml4ZWQoKSxcbiAgICAgICAgICB0eXBlUHJlZml4TmFtZSA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVQcmVmaXhOYW1lKCksXG4gICAgICAgICAgdHlwZU5hbWUgPSB0eXBlLmdldE5hbWUoKSxcbiAgICAgICAgICBzdXBlclR5cGVzID0gdHlwZS5nZXRTdXBlclR5cGVzKCksXG4gICAgICAgICAgc3RyaW5nID0gc3RyaW5nRnJvbVR5cGVOYW1lVHlwZVByZWZpeE5hbWVBbmRTdXBlclR5cGVzKHR5cGVOYW1lLCB0eXBlUHJlZml4TmFtZSwgc3VwZXJUeXBlcyksXG4gICAgICAgICAgY29tcGxleFR5cGVEZWNsYXJhdGlvbiA9IG5ldyBDb21wbGV4VHlwZURlY2xhcmF0aW9uKGNvbnRleHQsIG5vZGUsIHN0cmluZywgdHlwZSwgcHJlZml4ZWQpO1xuXG4gICAgcmV0dXJuIGNvbXBsZXhUeXBlRGVjbGFyYXRpb247XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbImRlZmluZSIsIkNvbXBsZXhUeXBlRGVjbGFyYXRpb24iLCJjb250ZXh0Iiwibm9kZSIsInN0cmluZyIsInR5cGUiLCJwcmVmaXhlZCIsImdldENvbnRleHQiLCJnZXROb2RlIiwiZ2V0U3RyaW5nIiwiZ2V0VHlwZSIsImlzUHJlZml4ZWQiLCJ2ZXJpZnkiLCJ2ZXJpZmllcyIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25TdHJpbmciLCJ0cmFjZSIsInR5cGVTdHJpbmciLCJ0eXBlVmVyaWZpZXMiLCJ2ZXJpZnlUeXBlIiwic3VwZXJUeXBlc1ZlcmlmeSIsInZlcmlmeVN1cGVyVHlwZXMiLCJwcm9wZXJ0aWVzVmVyaWZ5IiwidmVyaWZ5UHJvcGVydGllcyIsInR5cGVQcmVmaXgiLCJnZXRUeXBlUHJlZml4IiwidHlwZVByZWZpeE5hbWUiLCJnZXROYW1lIiwicHJlZml4TmFtZSIsInNldFByZWZpeE5hbWUiLCJhZGRUeXBlIiwiZGVidWciLCJ0eXBlTmFtZSIsImluY2x1ZGVSZWxlYXNlIiwiaW5jbHVkZURlcGVuZGVuY2llcyIsInR5cGVQcmVzZW50IiwiaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUiLCJwcmVmaXhlZFR5cGVOYW1lIiwiaXNUeXBlUHJlc2VudEJ5UHJlZml4ZWRUeXBlTmFtZSIsInZlcmlmeVN1cGVyVHlwZSIsInN1cGVyVHlwZSIsInN1cGVyVHlwZVZlcmlmaWVzIiwic3VwZXJUeXBlU3RyaW5nIiwibm9taW5hbFR5cGVOYW1lIiwiZ2V0Tm9taW5hbFR5cGVOYW1lIiwidHlwZU5hbWVNYXRjaGVzIiwibWF0Y2hUeXBlTmFtZSIsIm9sZFN1cGVyVHlwZSIsImZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUiLCJzdXBlclR5cGVQcmVzZW50IiwibmV3U3VwZXJUeXBlIiwicmVwbGFjZVN1cGVyVHlwZSIsInR5cGVCYXNpYyIsImlzQmFzaWMiLCJzdXBlclR5cGVzIiwiZ2V0U3VwZXJUeXBlcyIsImV2ZXJ5IiwidmVyaWZ5UHJvcGVydHkiLCJwcm9wZXJ0eSIsInByb3BlcnRpZXMiLCJwcm9wZXJ0eVZlcmlmaWVzIiwicHJvcGVydHlTdHJpbmciLCJwcm9wZXJ0eU5hbWVWZXJpZmllcyIsInZlcmlmeVByb3BlcnR5TmFtZSIsInByb3BlcnR5Tm9taW5hbFR5cGVOYW1lVmVyaWZpZXMiLCJ2ZXJpZnlQcm9wZXJ0eU5vbWluYWxUeXBlTmFtZSIsImluY2x1ZGVTdXBlclR5cGVzIiwiZ2V0UHJvcGVydGllcyIsInByb3BlcnR5TmFtZSIsImNvdW50IiwicmVkdWNlIiwicHJvcGVydHlOYW1lTWF0Y2hlcyIsIm1hdGNoUHJvcGVydHlOYW1lIiwiZmluZCIsInN1cGVyVHlwZVByb3BlcnRpZXMiLCJzb21lIiwic3VwZXJUeXBlUHJvcGVydHkiLCJub21pbmFsVHlwZU5hbWVNYXRjaGVzIiwibWF0Y2hOb21pbmFsVHlwZU5hbWUiLCJpc1R5cGVQcmVzZW50QnlOb21pbmFsVHlwZU5hbWUiLCJmcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsIlR5cGUiLCJvbnRvbG9neSIsImdldFR5cGVQcmVmaXhOYW1lIiwic3RyaW5nRnJvbVR5cGVOYW1lVHlwZVByZWZpeE5hbWVBbmRTdXBlclR5cGVzIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvbiIsIm5hbWUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQU9BOzs7ZUFBQTs7O2dFQUxxQjtvQkFHeUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUU5RCxXQUFlQSxJQUFBQSxnQkFBTSwyQ0FBQzthQUFNQyx1QkFDZEMsT0FBTyxFQUFFQyxJQUFJLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxRQUFRO2dDQUR2Qkw7UUFFeEIsSUFBSSxDQUFDQyxPQUFPLEdBQUdBO1FBQ2YsSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFDQyxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFDQyxRQUFRLEdBQUdBOzs7O1lBR2xCQyxLQUFBQTttQkFBQUEsU0FBQUE7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
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "default", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return _default;
9
+ }
10
+ });
11
+ var _ontology = /*#__PURE__*/ _interop_require_wildcard(require("../../ontology"));
12
+ var _constructor = /*#__PURE__*/ _interop_require_default(require("../../verifier/constructor"));
13
+ function _class_call_check(instance, Constructor) {
14
+ if (!(instance instanceof Constructor)) {
15
+ throw new TypeError("Cannot call a class as a function");
16
+ }
17
+ }
18
+ function _defineProperties(target, props) {
19
+ for(var i = 0; i < props.length; i++){
20
+ var descriptor = props[i];
21
+ descriptor.enumerable = descriptor.enumerable || false;
22
+ descriptor.configurable = true;
23
+ if ("value" in descriptor) descriptor.writable = true;
24
+ Object.defineProperty(target, descriptor.key, descriptor);
25
+ }
26
+ }
27
+ function _create_class(Constructor, protoProps, staticProps) {
28
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
29
+ if (staticProps) _defineProperties(Constructor, staticProps);
30
+ return Constructor;
31
+ }
32
+ function _define_property(obj, key, value) {
33
+ if (key in obj) {
34
+ Object.defineProperty(obj, key, {
35
+ value: value,
36
+ enumerable: true,
37
+ configurable: true,
38
+ writable: true
39
+ });
40
+ } else {
41
+ obj[key] = value;
42
+ }
43
+ return obj;
44
+ }
45
+ function _interop_require_default(obj) {
46
+ return obj && obj.__esModule ? obj : {
47
+ default: obj
48
+ };
49
+ }
50
+ function _getRequireWildcardCache(nodeInterop) {
51
+ if (typeof WeakMap !== "function") return null;
52
+ var cacheBabelInterop = new WeakMap();
53
+ var cacheNodeInterop = new WeakMap();
54
+ return (_getRequireWildcardCache = function(nodeInterop) {
55
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
56
+ })(nodeInterop);
57
+ }
58
+ function _interop_require_wildcard(obj, nodeInterop) {
59
+ if (!nodeInterop && obj && obj.__esModule) {
60
+ return obj;
61
+ }
62
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
63
+ return {
64
+ default: obj
65
+ };
66
+ }
67
+ var cache = _getRequireWildcardCache(nodeInterop);
68
+ if (cache && cache.has(obj)) {
69
+ return cache.get(obj);
70
+ }
71
+ var newObj = {
72
+ __proto__: null
73
+ };
74
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
75
+ for(var key in obj){
76
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
77
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
78
+ if (desc && (desc.get || desc.set)) {
79
+ Object.defineProperty(newObj, key, desc);
80
+ } else {
81
+ newObj[key] = obj[key];
82
+ }
83
+ }
84
+ }
85
+ newObj.default = obj;
86
+ if (cache) {
87
+ cache.set(obj, newObj);
88
+ }
89
+ return newObj;
90
+ }
91
+ var _ConstructorDeclaration;
92
+ var _default = (0, _ontology.define)((_ConstructorDeclaration = /*#__PURE__*/ function() {
93
+ function ConstructorDeclaration(context, node, string, constructor) {
94
+ _class_call_check(this, ConstructorDeclaration);
95
+ this.context = context;
96
+ this.node = node;
97
+ this.string = string;
98
+ this.constructor = constructor;
99
+ }
100
+ _create_class(ConstructorDeclaration, [
101
+ {
102
+ key: "getContext",
103
+ value: function getContext() {
104
+ return this.context;
105
+ }
106
+ },
107
+ {
108
+ key: "getNode",
109
+ value: function getNode() {
110
+ return this.node;
111
+ }
112
+ },
113
+ {
114
+ key: "getString",
115
+ value: function getString() {
116
+ return this.string;
117
+ }
118
+ },
119
+ {
120
+ key: "getConstructor",
121
+ value: function getConstructor() {
122
+ return this.constructor;
123
+ }
124
+ },
125
+ {
126
+ key: "verify",
127
+ value: function verify() {
128
+ var verifies;
129
+ var constructorDeclarationString = this.string; ///
130
+ this.context.trace("Verifying the '".concat(constructorDeclarationString, "' constructor declaration..."), this.node);
131
+ var constructorTypeVerifies = this.verifyConstructorType();
132
+ if (constructorTypeVerifies) {
133
+ var constructorVerifies = this.verifyConstructor();
134
+ if (constructorVerifies) {
135
+ this.context.addConstructor(this.constructor);
136
+ verifies = true;
137
+ }
138
+ }
139
+ if (verifies) {
140
+ this.context.debug("...verified the '".concat(constructorDeclarationString, "' constructor declaration."), this.node);
141
+ }
142
+ return verifies;
143
+ }
144
+ },
145
+ {
146
+ key: "verifyConstructor",
147
+ value: function verifyConstructor() {
148
+ var constructorVerifies;
149
+ var constructorString = this.constructor.getString();
150
+ this.context.trace("Verifying the '".concat(constructorString, "' constructor..."), this.node);
151
+ var term = this.constructor.getTerm(), termNode = term.getNode();
152
+ constructorVerifies = _constructor.default.verifyTerm(termNode, this.context);
153
+ if (constructorVerifies) {
154
+ this.context.debug("...verified the '".concat(constructorString, "' constructor."), this.node);
155
+ }
156
+ return constructorVerifies;
157
+ }
158
+ },
159
+ {
160
+ key: "verifyConstructorType",
161
+ value: function verifyConstructorType() {
162
+ var constructorTypeVerifies = false;
163
+ var type;
164
+ type = this.constructor.getType();
165
+ var typeString = type.getString();
166
+ this.context.trace("Verifying the '".concat(typeString, "' type..."), this.node);
167
+ var nominalTypeName = type.getNominalTypeName();
168
+ type = this.context.findTypeByNominalTypeName(nominalTypeName);
169
+ var typePresent = type !== null;
170
+ if (!typePresent) {
171
+ this.context.debug("The '".concat(typeString, "' type is not present."), this.node);
172
+ } else {
173
+ var includeSupertypes = false, provisional = type.isProvisional(includeSupertypes), provisionalMatches = type.matchProvisional(provisional);
174
+ if (!provisionalMatches) {
175
+ provisional ? this.context.debug("The '".concat(typeString, "' type is present but not provisional."), this.node) : this.context.debug("The '".concat(typeString, "' type is present but provisional."), this.node);
176
+ } else {
177
+ this.constructor.setType(type);
178
+ constructorTypeVerifies = true;
179
+ }
180
+ }
181
+ if (constructorTypeVerifies) {
182
+ this.context.debug("...verified the '".concat(typeString, "' type."), this.node);
183
+ }
184
+ return constructorTypeVerifies;
185
+ }
186
+ }
187
+ ], [
188
+ {
189
+ key: "fromConstructorDeclarationNode",
190
+ value: function fromConstructorDeclarationNode(constructorDeclarationNode, context) {
191
+ var Constructor = _ontology.default.Constructor, node = constructorDeclarationNode, string = context.nodeAsString(node), constructor = Constructor.fromConstructorDeclarationNode(constructorDeclarationNode, context), constructorDeclaration = new ConstructorDeclaration(context, node, string, constructor);
192
+ return constructorDeclaration;
193
+ }
194
+ }
195
+ ]);
196
+ return ConstructorDeclaration;
197
+ }(), _define_property(_ConstructorDeclaration, "name", "ConstructorDeclaration"), _ConstructorDeclaration));
198
+
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9vbnRvbG9neS9kZWNsYXJhdGlvbi9jb25zdHJ1Y3Rvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IG9udG9sb2d5IGZyb20gXCIuLi8uLi9vbnRvbG9neVwiO1xuXG5pbXBvcnQgY29uc3RydWN0b3JWZXJpZmllciBmcm9tIFwiLi4vLi4vdmVyaWZpZXIvY29uc3RydWN0b3JcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL29udG9sb2d5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBDb25zdHJ1Y3RvckRlY2xhcmF0aW9uIHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgbm9kZSwgc3RyaW5nLCBjb25zdHJ1Y3Rvcikge1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgdGhpcy5ub2RlID0gbm9kZTtcbiAgICB0aGlzLnN0cmluZyA9IHN0cmluZztcbiAgICB0aGlzLmNvbnN0cnVjdG9yID0gY29uc3RydWN0b3I7XG4gIH1cblxuICBnZXRDb250ZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHQ7XG4gIH1cblxuICBnZXROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLm5vZGU7XG4gIH1cblxuICBnZXRTdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5nO1xuICB9XG5cbiAgZ2V0Q29uc3RydWN0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3I7XG4gIH1cblxuICB2ZXJpZnkoKSB7XG4gICAgbGV0IHZlcmlmaWVzO1xuXG4gICAgY29uc3QgY29uc3RydWN0b3JEZWNsYXJhdGlvblN0cmluZyA9IHRoaXMuc3RyaW5nOyAvLy9cblxuICAgIHRoaXMuY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtjb25zdHJ1Y3RvckRlY2xhcmF0aW9uU3RyaW5nfScgY29uc3RydWN0b3IgZGVjbGFyYXRpb24uLi5gLCB0aGlzLm5vZGUpO1xuXG4gICAgY29uc3QgY29uc3RydWN0b3JUeXBlVmVyaWZpZXMgPSB0aGlzLnZlcmlmeUNvbnN0cnVjdG9yVHlwZSgpO1xuXG4gICAgaWYgKGNvbnN0cnVjdG9yVHlwZVZlcmlmaWVzKSB7XG4gICAgICBjb25zdCBjb25zdHJ1Y3RvclZlcmlmaWVzID0gdGhpcy52ZXJpZnlDb25zdHJ1Y3RvcigpO1xuXG4gICAgICBpZiAoY29uc3RydWN0b3JWZXJpZmllcykge1xuICAgICAgICB0aGlzLmNvbnRleHQuYWRkQ29uc3RydWN0b3IodGhpcy5jb25zdHJ1Y3Rvcik7XG5cbiAgICAgICAgdmVyaWZpZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgdGhpcy5jb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y29uc3RydWN0b3JEZWNsYXJhdGlvblN0cmluZ30nIGNvbnN0cnVjdG9yIGRlY2xhcmF0aW9uLmAsIHRoaXMubm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcmlmaWVzO1xuICB9XG5cbiAgdmVyaWZ5Q29uc3RydWN0b3IoKSB7XG4gICAgbGV0IGNvbnN0cnVjdG9yVmVyaWZpZXM7XG5cbiAgICBjb25zdCBjb25zdHJ1Y3RvclN0cmluZyA9IHRoaXMuY29uc3RydWN0b3IuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLmNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3Rvci4uLmAsIHRoaXMubm9kZSk7XG5cbiAgICBjb25zdCB0ZXJtID0gdGhpcy5jb25zdHJ1Y3Rvci5nZXRUZXJtKCksXG4gICAgICAgICAgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKTtcblxuICAgIGNvbnN0cnVjdG9yVmVyaWZpZXMgPSBjb25zdHJ1Y3RvclZlcmlmaWVyLnZlcmlmeVRlcm0odGVybU5vZGUsIHRoaXMuY29udGV4dCk7XG5cbiAgICBpZiAoY29uc3RydWN0b3JWZXJpZmllcykge1xuICAgICAgdGhpcy5jb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3Rvci5gLCB0aGlzLm5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBjb25zdHJ1Y3RvclZlcmlmaWVzO1xuICB9XG5cbiAgdmVyaWZ5Q29uc3RydWN0b3JUeXBlKCkge1xuICAgIGxldCBjb25zdHJ1Y3RvclR5cGVWZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgbGV0IHR5cGU7XG5cbiAgICB0eXBlID0gdGhpcy5jb25zdHJ1Y3Rvci5nZXRUeXBlKCk7XG5cbiAgICBjb25zdCB0eXBlU3RyaW5nID0gdHlwZS5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMuY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZS4uLmAsIHRoaXMubm9kZSk7XG5cbiAgICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSB0eXBlLmdldE5vbWluYWxUeXBlTmFtZSgpO1xuXG4gICAgdHlwZSA9IHRoaXMuY29udGV4dC5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSk7XG5cbiAgICBjb25zdCB0eXBlUHJlc2VudCA9ICh0eXBlICE9PSBudWxsKVxuXG4gICAgaWYgKCF0eXBlUHJlc2VudCkge1xuICAgICAgdGhpcy5jb250ZXh0LmRlYnVnKGBUaGUgJyR7dHlwZVN0cmluZ30nIHR5cGUgaXMgbm90IHByZXNlbnQuYCwgdGhpcy5ub2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaW5jbHVkZVN1cGVydHlwZXMgPSBmYWxzZSxcbiAgICAgICAgICAgIHByb3Zpc2lvbmFsID0gdHlwZS5pc1Byb3Zpc2lvbmFsKGluY2x1ZGVTdXBlcnR5cGVzKSxcbiAgICAgICAgICAgIHByb3Zpc2lvbmFsTWF0Y2hlcyA9IHR5cGUubWF0Y2hQcm92aXNpb25hbChwcm92aXNpb25hbCk7XG5cbiAgICAgIGlmICghcHJvdmlzaW9uYWxNYXRjaGVzKSB7XG4gICAgICAgIHByb3Zpc2lvbmFsID9cbiAgICAgICAgICB0aGlzLmNvbnRleHQuZGVidWcoYFRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZSBpcyBwcmVzZW50IGJ1dCBub3QgcHJvdmlzaW9uYWwuYCwgdGhpcy5ub2RlKSA6XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZGVidWcoYFRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZSBpcyBwcmVzZW50IGJ1dCBwcm92aXNpb25hbC5gLCB0aGlzLm5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3Rvci5zZXRUeXBlKHR5cGUpO1xuXG4gICAgICAgIGNvbnN0cnVjdG9yVHlwZVZlcmlmaWVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29uc3RydWN0b3JUeXBlVmVyaWZpZXMpIHtcbiAgICAgIHRoaXMuY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3R5cGVTdHJpbmd9JyB0eXBlLmAsIHRoaXMubm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnN0cnVjdG9yVHlwZVZlcmlmaWVzO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkNvbnN0cnVjdG9yRGVjbGFyYXRpb25cIjtcblxuICBzdGF0aWMgZnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gICAgY29uc3QgeyBDb25zdHJ1Y3RvciB9ID0gb250b2xvZ3ksXG4gICAgICAgICAgbm9kZSA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgICAgY29uc3RydWN0b3IgPSBDb25zdHJ1Y3Rvci5mcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIGNvbnN0cnVjdG9yRGVjbGFyYXRpb24gPSBuZXcgQ29uc3RydWN0b3JEZWNsYXJhdGlvbihjb250ZXh0LCBub2RlLCBzdHJpbmcsIGNvbnN0cnVjdG9yKTtcblxuICAgIHJldHVybiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6WyJkZWZpbmUiLCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uIiwiY29udGV4dCIsIm5vZGUiLCJzdHJpbmciLCJjb25zdHJ1Y3RvciIsImdldENvbnRleHQiLCJnZXROb2RlIiwiZ2V0U3RyaW5nIiwiZ2V0Q29uc3RydWN0b3IiLCJ2ZXJpZnkiLCJ2ZXJpZmllcyIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb25TdHJpbmciLCJ0cmFjZSIsImNvbnN0cnVjdG9yVHlwZVZlcmlmaWVzIiwidmVyaWZ5Q29uc3RydWN0b3JUeXBlIiwiY29uc3RydWN0b3JWZXJpZmllcyIsInZlcmlmeUNvbnN0cnVjdG9yIiwiYWRkQ29uc3RydWN0b3IiLCJkZWJ1ZyIsImNvbnN0cnVjdG9yU3RyaW5nIiwidGVybSIsImdldFRlcm0iLCJ0ZXJtTm9kZSIsImNvbnN0cnVjdG9yVmVyaWZpZXIiLCJ2ZXJpZnlUZXJtIiwidHlwZSIsImdldFR5cGUiLCJ0eXBlU3RyaW5nIiwibm9taW5hbFR5cGVOYW1lIiwiZ2V0Tm9taW5hbFR5cGVOYW1lIiwiZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZSIsInR5cGVQcmVzZW50IiwiaW5jbHVkZVN1cGVydHlwZXMiLCJwcm92aXNpb25hbCIsImlzUHJvdmlzaW9uYWwiLCJwcm92aXNpb25hbE1hdGNoZXMiLCJtYXRjaFByb3Zpc2lvbmFsIiwic2V0VHlwZSIsImZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiQ29uc3RydWN0b3IiLCJvbnRvbG9neSIsIm5vZGVBc1N0cmluZyIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb24iLCJuYW1lIl0sIm1hcHBpbmdzIjoi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