occam-verify-cli 0.0.697 → 0.0.700

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 (102) hide show
  1. package/lib/assignment/equality.js +7 -5
  2. package/lib/assignment/metavariable.js +62 -0
  3. package/lib/assignment/variable.js +7 -5
  4. package/lib/constructor.js +3 -10
  5. package/lib/context/file.js +37 -97
  6. package/lib/context/local.js +28 -22
  7. package/lib/context/localMeta.js +21 -21
  8. package/lib/context/release.js +2 -4
  9. package/lib/equality.js +15 -7
  10. package/lib/metaType.js +10 -10
  11. package/lib/metavariable.js +27 -31
  12. package/lib/mixins/context.js +107 -0
  13. package/lib/ruleNames.js +9 -1
  14. package/lib/substitution/metastatementForMetavariable.js +17 -10
  15. package/lib/substitution/statementForMetavariable.js +17 -10
  16. package/lib/substitution/termForVariable.js +17 -11
  17. package/lib/type.js +23 -27
  18. package/lib/utilities/node.js +3 -73
  19. package/lib/utilities/query.js +2 -16
  20. package/lib/utilities/tokens.js +1 -8
  21. package/lib/variable.js +43 -36
  22. package/lib/verifier/node/metastatement.js +2 -3
  23. package/lib/verifier/node/statementAsCombinator.js +1 -1
  24. package/lib/verifier/node.js +2 -2
  25. package/lib/verifier/nodes/metastatementForMetavariable.js +5 -5
  26. package/lib/verifier/nodes/statementForMetavariable.js +5 -5
  27. package/lib/verifier/nodes/termForVariable.js +6 -6
  28. package/lib/verifier/nodes.js +2 -2
  29. package/lib/verify/axiom.js +3 -8
  30. package/lib/verify/conclusion.js +2 -2
  31. package/lib/verify/conjecture.js +4 -9
  32. package/lib/verify/derivation.js +3 -8
  33. package/lib/verify/equality.js +11 -11
  34. package/lib/verify/file.js +2 -2
  35. package/lib/verify/lemma.js +4 -9
  36. package/lib/verify/metavariable.js +8 -6
  37. package/lib/verify/premises.js +28 -0
  38. package/lib/verify/rule.js +3 -8
  39. package/lib/verify/ruleDerivation.js +6 -8
  40. package/lib/verify/standaloneType.js +32 -0
  41. package/lib/verify/statement/unqualified.js +2 -2
  42. package/lib/verify/supposition.js +4 -7
  43. package/lib/verify/suppositions.js +37 -0
  44. package/lib/verify/term.js +3 -4
  45. package/lib/verify/termAndStandaloneType.js +39 -0
  46. package/lib/verify/termAsVariableAndStandaloneType.js +39 -0
  47. package/lib/verify/theorem.js +4 -9
  48. package/lib/verify/type.js +2 -2
  49. package/lib/verify/typeAssertion.js +59 -89
  50. package/lib/verify/variable.js +12 -10
  51. package/package.json +1 -1
  52. package/src/assignment/equality.js +13 -4
  53. package/src/assignment/metavariable.js +30 -0
  54. package/src/assignment/variable.js +15 -4
  55. package/src/constructor.js +2 -7
  56. package/src/context/file.js +50 -41
  57. package/src/context/local.js +40 -27
  58. package/src/context/localMeta.js +26 -22
  59. package/src/context/release.js +6 -9
  60. package/src/equality.js +12 -5
  61. package/src/metaType.js +10 -10
  62. package/src/metavariable.js +24 -22
  63. package/src/mixins/{file.js → context.js} +20 -2
  64. package/src/ruleNames.js +2 -0
  65. package/src/substitution/metastatementForMetavariable.js +13 -7
  66. package/src/substitution/statementForMetavariable.js +13 -7
  67. package/src/substitution/termForVariable.js +13 -9
  68. package/src/type.js +27 -39
  69. package/src/utilities/node.js +3 -81
  70. package/src/utilities/query.js +1 -19
  71. package/src/utilities/tokens.js +0 -8
  72. package/src/variable.js +48 -30
  73. package/src/verifier/node/metastatement.js +1 -3
  74. package/src/verifier/node/statementAsCombinator.js +1 -1
  75. package/src/verifier/nodes/metastatementForMetavariable.js +5 -7
  76. package/src/verifier/nodes/statementForMetavariable.js +5 -7
  77. package/src/verifier/nodes/termForVariable.js +6 -8
  78. package/src/verify/axiom.js +2 -8
  79. package/src/verify/conclusion.js +1 -1
  80. package/src/verify/conjecture.js +3 -9
  81. package/src/verify/derivation.js +2 -8
  82. package/src/verify/equality.js +10 -10
  83. package/src/verify/file.js +1 -1
  84. package/src/verify/lemma.js +3 -9
  85. package/src/verify/metavariable.js +10 -9
  86. package/src/verify/premises.js +17 -0
  87. package/src/verify/rule.js +2 -8
  88. package/src/verify/ruleDerivation.js +5 -7
  89. package/src/verify/standaloneType.js +34 -0
  90. package/src/verify/statement/unqualified.js +1 -1
  91. package/src/verify/supposition.js +2 -7
  92. package/src/verify/suppositions.js +29 -0
  93. package/src/verify/term.js +3 -6
  94. package/src/verify/termAndStandaloneType.js +37 -0
  95. package/src/verify/termAsVariableAndStandaloneType.js +38 -0
  96. package/src/verify/theorem.js +3 -9
  97. package/src/verify/type.js +1 -1
  98. package/src/verify/typeAssertion.js +79 -110
  99. package/src/verify/variable.js +13 -13
  100. package/lib/mixins/file.js +0 -83
  101. package/lib/mixins/logging.js +0 -39
  102. package/src/mixins/logging.js +0 -24
@@ -2,25 +2,18 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- function _export(target, all) {
6
- for(var name in all)Object.defineProperty(target, name, {
7
- enumerable: true,
8
- get: all[name]
9
- });
10
- }
11
- _export(exports, {
12
- default: function() {
5
+ Object.defineProperty(exports, "default", {
6
+ enumerable: true,
7
+ get: function() {
13
8
  return verifyTypeAssertion;
14
- },
15
- verifyVariableTypeAssertion: function() {
16
- return verifyVariableTypeAssertion;
17
9
  }
18
10
  });
19
11
  var _variable = /*#__PURE__*/ _interop_require_default(require("../variable"));
20
12
  var _variable1 = /*#__PURE__*/ _interop_require_default(require("../assignment/variable"));
13
+ var _termAndStandaloneType = /*#__PURE__*/ _interop_require_default(require("../verify/termAndStandaloneType"));
14
+ var _termAsVariableAndStandaloneType = /*#__PURE__*/ _interop_require_default(require("../verify/termAsVariableAndStandaloneType"));
21
15
  var _array = require("../utilities/array");
22
16
  var _query = require("../utilities/query");
23
- var _term = require("../verify/term");
24
17
  function _interop_require_default(obj) {
25
18
  return obj && obj.__esModule ? obj : {
26
19
  default: obj
@@ -28,97 +21,74 @@ function _interop_require_default(obj) {
28
21
  }
29
22
  var termNodeQuery = (0, _query.nodeQuery)("/typeAssertion/term!"), typeNodeQuery = (0, _query.nodeQuery)("/typeAssertion/type!");
30
23
  function verifyTypeAssertion(typeAssertionNode, assignments, derived, context, verifyAhead) {
31
- var typeAssertionVerified = false;
24
+ var typeAssertionVerified;
32
25
  var typeAssertionString = context.nodeAsString(typeAssertionNode);
33
26
  context.trace("Verifying the '".concat(typeAssertionString, "' type assertion..."), typeAssertionNode);
34
- var typeNode = typeNodeQuery(typeAssertionNode), typeName = (0, _query.typeNameFromTypeNode)(typeNode), assertedTypeName = typeName, assertedType = context.findTypeByTypeName(assertedTypeName);
35
- if (assertedType === null) {
36
- context.debug("The '".concat(typeName, "' asserted type is not present."), typeAssertionNode);
37
- } else {
38
- var verifyTypeAssertionFunctions = [
39
- verifyVariableTypeAssertion,
40
- verifyTermTypeAssertion
41
- ];
42
- typeAssertionVerified = verifyTypeAssertionFunctions.some(function(verifyTypeAssertionFunction) {
43
- var typeAssertionVerified = verifyTypeAssertionFunction(typeAssertionNode, assertedType, assignments, derived, context, verifyAhead);
44
- if (typeAssertionVerified) {
45
- return true;
46
- }
47
- });
48
- }
27
+ var verifyTypeAssertionFunctions = [
28
+ verifyDerivedTypeAssertion,
29
+ verifyGivenTypeAssertion
30
+ ];
31
+ typeAssertionVerified = verifyTypeAssertionFunctions.some(function(verifyTypeAssertionFunction) {
32
+ var typeAssertionVerified = verifyTypeAssertionFunction(typeAssertionNode, assignments, derived, context, verifyAhead);
33
+ if (typeAssertionVerified) {
34
+ return true;
35
+ }
36
+ });
49
37
  if (typeAssertionVerified) {
50
- context.debug("...verified the '".concat(typeAssertionString, "' statement type assertion."), typeAssertionNode);
38
+ context.debug("...verified the '".concat(typeAssertionString, "' type assertion."), typeAssertionNode);
51
39
  }
52
40
  return typeAssertionVerified;
53
41
  }
54
- function verifyVariableTypeAssertion(typeAssertionNode, assertedType, assignments, derived, context, verifyAhead) {
55
- var variableTypeAssertionVerified;
56
- var typeAssertionString = context.nodeAsString(typeAssertionNode);
57
- context.trace("Verifying the '".concat(typeAssertionString, "' variable type assertion..."), typeAssertionNode);
58
- var variables = [], termNode = termNodeQuery(typeAssertionNode), termVerifiedAsVariable = (0, _term.verifyTermAsVariable)(termNode, variables, context, function() {
59
- var verifiedAhead = false;
60
- var firstVariable = (0, _array.first)(variables), variable = firstVariable, variableName = variable.getName(), variableType = variable.getType();
61
- if (derived) {
62
- var assertedTypeEqualToOrSuperTypeOfVariableType = assertedType.isEqualToOrSuperTypeOf(variableType);
63
- if (!assertedTypeEqualToOrSuperTypeOfVariableType) {
64
- var assertedTypeName = assertedType.getName(), variableTypeName = variableType.getName();
65
- context.debug("The '".concat(assertedTypeName, "' asserted type is not equal to or a super-type of the '").concat(variableName, "' variable's '").concat(variableTypeName, "' type."), typeAssertionNode);
66
- } else {
67
- verifiedAhead = verifyAhead();
68
- }
69
- } else {
70
- var assertedTypeEqualToOrSubTypeOfVariableType = assertedType.isEqualToOrSubTypeOf(variableType);
71
- if (!assertedTypeEqualToOrSubTypeOfVariableType) {
72
- var assertedTypeName1 = assertedType.getName(), variableTypeName1 = variableType.getName();
73
- context.debug("The '".concat(assertedTypeName1, "' asserted type is not equal to or a sub-type of the '").concat(variableName, "' variable's '").concat(variableTypeName1, "' type."), typeAssertionNode);
74
- } else {
75
- var name = variableName, type = assertedType, variable1 = _variable.default.fromNameAndType(name, type), variableAssignment = _variable1.default.fromVariable(variable1), assignment = variableAssignment; ///
76
- assignments.push(assignment);
77
- verifiedAhead = verifyAhead();
78
- if (!verifiedAhead) {
79
- assignments.pop();
42
+ function verifyDerivedTypeAssertion(typeAssertionNode, assignments, derived, context, verifyAhead) {
43
+ var derivedTypeAssertionVerified = false;
44
+ if (derived) {
45
+ var typeAssertionString = context.nodeAsString(typeAssertionNode);
46
+ context.trace("Verifying the '".concat(typeAssertionString, "' derived type assertion..."), typeAssertionNode);
47
+ var terms = [], types = [], termNode = termNodeQuery(typeAssertionNode), typeNode = typeNodeQuery(typeAssertionNode), termAndStandaloneTypeVerified = (0, _termAndStandaloneType.default)(termNode, typeNode, terms, types, context, function() {
48
+ var verifiedAhead = false;
49
+ var firstTerm = (0, _array.first)(terms), firstType = (0, _array.first)(types), term = firstTerm, type = firstType, termType = term.getType(), termTypeEqualToOrSuperTypeOfType = termType.isEqualToOrSuperTypeOf(type);
50
+ if (termTypeEqualToOrSuperTypeOfType) {
51
+ debugger;
52
+ if (false) {
53
+ verifiedAhead = verifyAhead();
80
54
  }
81
55
  }
56
+ return verifiedAhead;
57
+ });
58
+ derivedTypeAssertionVerified = termAndStandaloneTypeVerified; ///
59
+ if (derivedTypeAssertionVerified) {
60
+ context.trace("...verified the '".concat(typeAssertionString, "' derived type assertion."), typeAssertionNode);
82
61
  }
83
- return verifiedAhead;
84
- });
85
- variableTypeAssertionVerified = termVerifiedAsVariable; ///
86
- if (variableTypeAssertionVerified) {
87
- context.debug("...verified the '".concat(typeAssertionString, "' variable type assertion."), typeAssertionNode);
88
62
  }
89
- return variableTypeAssertionVerified;
63
+ return derivedTypeAssertionVerified;
90
64
  }
91
- function verifyTermTypeAssertion(typeAssertionNode, assertedType, assignments, derived, context, verifyAhead) {
92
- var termTypeAssertionVerified;
93
- var typeAssertionString = context.nodeAsString(typeAssertionNode);
94
- context.trace("Verifying the '".concat(typeAssertionString, "' term type assertion..."), typeAssertionNode);
95
- var types = [], termNode = termNodeQuery(typeAssertionNode), termVerifiedAgainstConstructors = (0, _term.verifyTermAgainstConstructors)(termNode, types, context, function() {
96
- var verifiedAhead = false;
97
- var firstType = (0, _array.first)(types), termType = firstType; ///
98
- if (derived) {
99
- var assertedTypeIsEqualToOrSuperTypeOfTermType = assertedType.isEqualToOrSuperTypeOf(termType);
100
- if (!assertedTypeIsEqualToOrSuperTypeOfTermType) {
101
- var termString = context.nodeAsString(termNode), termTypeName = termType.getName(), assertedTypeName = assertedType.getName();
102
- context.debug("The '".concat(assertedTypeName, "' asserted type is not equal to or a super-type of the '").concat(termString, "' term's '").concat(termTypeName, "' type."), typeAssertionNode);
103
- } else {
104
- verifiedAhead = verifyAhead();
105
- }
106
- } else {
107
- var assertedTypeIsEqualToOrSubTypeOfTermType = assertedType.isEqualToOrSubTypeOf(termType);
108
- if (!assertedTypeIsEqualToOrSubTypeOfTermType) {
109
- var termString1 = context.nodeAsString(termNode), termTypeName1 = termType.getName(), assertedTypeName1 = assertedType.getName();
110
- context.debug("The '".concat(assertedTypeName1, "' asserted type is not equal to or a sub-type of the '").concat(termString1, "' term's '").concat(termTypeName1, "' type."), typeAssertionNode);
111
- } else {
65
+ function verifyGivenTypeAssertion(typeAssertionNode, assignments, derived, context, verifyAhead) {
66
+ var givenTypeAssertionVerified = false;
67
+ if (!derived) {
68
+ var typeAssertionString = context.nodeAsString(typeAssertionNode);
69
+ context.trace("Verifying the '".concat(typeAssertionString, "' given type assertion..."), typeAssertionNode);
70
+ var types = [], variables = [], termNode = termNodeQuery(typeAssertionNode), typeNode = typeNodeQuery(typeAssertionNode), termAsVariableAndStandaloneTypeVerified = (0, _termAsVariableAndStandaloneType.default)(termNode, typeNode, variables, types, context, function() {
71
+ var verifiedAhead = false;
72
+ var firstVariable = (0, _array.first)(variables);
73
+ var variable = firstVariable; ///
74
+ var firstType = (0, _array.first)(types), type = firstType, variableType = variable.getType(), variableTypeEqualToOrSuperTypeOfType = variableType.isEqualToOrSuperTypeOf(type);
75
+ if (variableTypeEqualToOrSuperTypeOfType) {
76
+ variable = _variable.default.fromVariableAndType(variable, type); ///
77
+ var variableAssignment = _variable1.default.fromVariable(variable), assignment = variableAssignment; ///
78
+ assignments.push(assignment);
112
79
  verifiedAhead = verifyAhead();
80
+ if (!verifiedAhead) {
81
+ assignments.pop();
82
+ }
113
83
  }
84
+ return verifiedAhead;
85
+ });
86
+ givenTypeAssertionVerified = termAsVariableAndStandaloneTypeVerified; ///
87
+ if (givenTypeAssertionVerified) {
88
+ context.trace("...verified the '".concat(typeAssertionString, "' given type assertion."), typeAssertionNode);
114
89
  }
115
- return verifiedAhead;
116
- });
117
- termTypeAssertionVerified = termVerifiedAgainstConstructors; ///
118
- if (termTypeAssertionVerified) {
119
- context.debug("...verified the '".concat(typeAssertionString, "' term type assertion."), typeAssertionNode);
120
90
  }
121
- return termTypeAssertionVerified;
91
+ return givenTypeAssertionVerified;
122
92
  }
123
93
 
124
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvdHlwZUFzc2VydGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFZhcmlhYmxlIGZyb20gXCIuLi92YXJpYWJsZVwiO1xuaW1wb3J0IFZhcmlhYmxlQXNzaWdubWVudCBmcm9tIFwiLi4vYXNzaWdubWVudC92YXJpYWJsZVwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IG5vZGVRdWVyeSwgdHlwZU5hbWVGcm9tVHlwZU5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5pbXBvcnQgeyB2ZXJpZnlUZXJtQXNWYXJpYWJsZSwgdmVyaWZ5VGVybUFnYWluc3RDb25zdHJ1Y3RvcnMgfSBmcm9tIFwiLi4vdmVyaWZ5L3Rlcm1cIjtcblxuY29uc3QgdGVybU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90eXBlQXNzZXJ0aW9uL3Rlcm0hXCIpLFxuICAgICAgdHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90eXBlQXNzZXJ0aW9uL3R5cGUhXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2ZXJpZnlUeXBlQXNzZXJ0aW9uKHR5cGVBc3NlcnRpb25Ob2RlLCBhc3NpZ25tZW50cywgZGVyaXZlZCwgY29udGV4dCwgdmVyaWZ5QWhlYWQpIHtcbiAgbGV0IHR5cGVBc3NlcnRpb25WZXJpZmllZCA9IGZhbHNlO1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb25TdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyh0eXBlQXNzZXJ0aW9uTm9kZSk7XG5cbiAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt0eXBlQXNzZXJ0aW9uU3RyaW5nfScgdHlwZSBhc3NlcnRpb24uLi5gLCB0eXBlQXNzZXJ0aW9uTm9kZSk7XG5cbiAgY29uc3QgdHlwZU5vZGUgPSB0eXBlTm9kZVF1ZXJ5KHR5cGVBc3NlcnRpb25Ob2RlKSxcbiAgICAgICAgdHlwZU5hbWUgPSB0eXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSksXG4gICAgICAgIGFzc2VydGVkVHlwZU5hbWUgPSB0eXBlTmFtZSwgIC8vL1xuICAgICAgICBhc3NlcnRlZFR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlUeXBlTmFtZShhc3NlcnRlZFR5cGVOYW1lKTtcblxuICBpZiAoYXNzZXJ0ZWRUeXBlID09PSBudWxsKSB7XG4gICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3R5cGVOYW1lfScgYXNzZXJ0ZWQgdHlwZSBpcyBub3QgcHJlc2VudC5gLCB0eXBlQXNzZXJ0aW9uTm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdmVyaWZ5VHlwZUFzc2VydGlvbkZ1bmN0aW9ucyA9IFtcbiAgICAgIHZlcmlmeVZhcmlhYmxlVHlwZUFzc2VydGlvbixcbiAgICAgIHZlcmlmeVRlcm1UeXBlQXNzZXJ0aW9uXG4gICAgXTtcblxuICAgIHR5cGVBc3NlcnRpb25WZXJpZmllZCA9IHZlcmlmeVR5cGVBc3NlcnRpb25GdW5jdGlvbnMuc29tZSgodmVyaWZ5VHlwZUFzc2VydGlvbkZ1bmN0aW9uKSA9PiB7XG4gICAgICBjb25zdCB0eXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSB2ZXJpZnlUeXBlQXNzZXJ0aW9uRnVuY3Rpb24odHlwZUFzc2VydGlvbk5vZGUsIGFzc2VydGVkVHlwZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGNvbnRleHQsIHZlcmlmeUFoZWFkKTtcblxuICAgICAgaWYgKHR5cGVBc3NlcnRpb25WZXJpZmllZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmICh0eXBlQXNzZXJ0aW9uVmVyaWZpZWQpIHtcbiAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIHN0YXRlbWVudCB0eXBlIGFzc2VydGlvbi5gLCB0eXBlQXNzZXJ0aW9uTm9kZSk7XG4gIH1cblxuICByZXR1cm4gdHlwZUFzc2VydGlvblZlcmlmaWVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5VmFyaWFibGVUeXBlQXNzZXJ0aW9uKHR5cGVBc3NlcnRpb25Ob2RlLCBhc3NlcnRlZFR5cGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBjb250ZXh0LCB2ZXJpZnlBaGVhZCkge1xuICBsZXQgdmFyaWFibGVUeXBlQXNzZXJ0aW9uVmVyaWZpZWQ7XG5cbiAgY29uc3QgdHlwZUFzc2VydGlvblN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHR5cGVBc3NlcnRpb25Ob2RlKTtcblxuICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyB2YXJpYWJsZSB0eXBlIGFzc2VydGlvbi4uLmAsIHR5cGVBc3NlcnRpb25Ob2RlKTtcblxuICBjb25zdCB2YXJpYWJsZXMgPSBbXSxcbiAgICAgICAgdGVybU5vZGUgPSB0ZXJtTm9kZVF1ZXJ5KHR5cGVBc3NlcnRpb25Ob2RlKSxcbiAgICAgICAgdGVybVZlcmlmaWVkQXNWYXJpYWJsZSA9IHZlcmlmeVRlcm1Bc1ZhcmlhYmxlKHRlcm1Ob2RlLCB2YXJpYWJsZXMsIGNvbnRleHQsICgpID0+IHtcbiAgICAgICAgICBsZXQgdmVyaWZpZWRBaGVhZCA9IGZhbHNlO1xuXG4gICAgICAgICAgY29uc3QgZmlyc3RWYXJpYWJsZSA9IGZpcnN0KHZhcmlhYmxlcyksXG4gICAgICAgICAgICAgICAgdmFyaWFibGUgPSBmaXJzdFZhcmlhYmxlLCAvLy9cbiAgICAgICAgICAgICAgICB2YXJpYWJsZU5hbWUgPSB2YXJpYWJsZS5nZXROYW1lKCksXG4gICAgICAgICAgICAgICAgdmFyaWFibGVUeXBlID0gdmFyaWFibGUuZ2V0VHlwZSgpO1xuXG4gICAgICAgICAgaWYgKGRlcml2ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGFzc2VydGVkVHlwZUVxdWFsVG9PclN1cGVyVHlwZU9mVmFyaWFibGVUeXBlID0gYXNzZXJ0ZWRUeXBlLmlzRXF1YWxUb09yU3VwZXJUeXBlT2YodmFyaWFibGVUeXBlKTtcblxuICAgICAgICAgICAgaWYgKCFhc3NlcnRlZFR5cGVFcXVhbFRvT3JTdXBlclR5cGVPZlZhcmlhYmxlVHlwZSkge1xuICAgICAgICAgICAgICBjb25zdCBhc3NlcnRlZFR5cGVOYW1lID0gYXNzZXJ0ZWRUeXBlLmdldE5hbWUoKSxcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVUeXBlTmFtZSA9IHZhcmlhYmxlVHlwZS5nZXROYW1lKCk7XG5cbiAgICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke2Fzc2VydGVkVHlwZU5hbWV9JyBhc3NlcnRlZCB0eXBlIGlzIG5vdCBlcXVhbCB0byBvciBhIHN1cGVyLXR5cGUgb2YgdGhlICcke3ZhcmlhYmxlTmFtZX0nIHZhcmlhYmxlJ3MgJyR7dmFyaWFibGVUeXBlTmFtZX0nIHR5cGUuYCwgdHlwZUFzc2VydGlvbk5vZGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmVyaWZpZWRBaGVhZCA9IHZlcmlmeUFoZWFkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGFzc2VydGVkVHlwZUVxdWFsVG9PclN1YlR5cGVPZlZhcmlhYmxlVHlwZSA9IGFzc2VydGVkVHlwZS5pc0VxdWFsVG9PclN1YlR5cGVPZih2YXJpYWJsZVR5cGUpO1xuXG4gICAgICAgICAgICBpZiAoIWFzc2VydGVkVHlwZUVxdWFsVG9PclN1YlR5cGVPZlZhcmlhYmxlVHlwZSkge1xuICAgICAgICAgICAgICBjb25zdCBhc3NlcnRlZFR5cGVOYW1lID0gYXNzZXJ0ZWRUeXBlLmdldE5hbWUoKSxcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVUeXBlTmFtZSA9IHZhcmlhYmxlVHlwZS5nZXROYW1lKCk7XG5cbiAgICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke2Fzc2VydGVkVHlwZU5hbWV9JyBhc3NlcnRlZCB0eXBlIGlzIG5vdCBlcXVhbCB0byBvciBhIHN1Yi10eXBlIG9mIHRoZSAnJHt2YXJpYWJsZU5hbWV9JyB2YXJpYWJsZSdzICcke3ZhcmlhYmxlVHlwZU5hbWV9JyB0eXBlLmAsIHR5cGVBc3NlcnRpb25Ob2RlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB2YXJpYWJsZU5hbWUsICAvLy9cbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGFzc2VydGVkVHlwZSwgIC8vL1xuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSA9IFZhcmlhYmxlLmZyb21OYW1lQW5kVHlwZShuYW1lLCB0eXBlKSxcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50ID0gVmFyaWFibGVBc3NpZ25tZW50LmZyb21WYXJpYWJsZSh2YXJpYWJsZSksXG4gICAgICAgICAgICAgICAgICAgIGFzc2lnbm1lbnQgPSB2YXJpYWJsZUFzc2lnbm1lbnQ7IC8vL1xuXG4gICAgICAgICAgICAgIGFzc2lnbm1lbnRzLnB1c2goYXNzaWdubWVudCk7XG5cbiAgICAgICAgICAgICAgdmVyaWZpZWRBaGVhZCA9IHZlcmlmeUFoZWFkKCk7XG5cbiAgICAgICAgICAgICAgaWYgKCF2ZXJpZmllZEFoZWFkKSB7XG4gICAgICAgICAgICAgICAgYXNzaWdubWVudHMucG9wKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdmVyaWZpZWRBaGVhZDtcbiAgICAgICAgfSk7XG5cbiAgdmFyaWFibGVUeXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSB0ZXJtVmVyaWZpZWRBc1ZhcmlhYmxlOyAvLy9cblxuICBpZiAodmFyaWFibGVUeXBlQXNzZXJ0aW9uVmVyaWZpZWQpIHtcbiAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIHZhcmlhYmxlIHR5cGUgYXNzZXJ0aW9uLmAsIHR5cGVBc3NlcnRpb25Ob2RlKTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZVR5cGVBc3NlcnRpb25WZXJpZmllZDtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5VGVybVR5cGVBc3NlcnRpb24odHlwZUFzc2VydGlvbk5vZGUsIGFzc2VydGVkVHlwZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGNvbnRleHQsIHZlcmlmeUFoZWFkKSB7XG4gIGxldCB0ZXJtVHlwZUFzc2VydGlvblZlcmlmaWVkO1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb25TdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyh0eXBlQXNzZXJ0aW9uTm9kZSk7XG5cbiAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt0eXBlQXNzZXJ0aW9uU3RyaW5nfScgdGVybSB0eXBlIGFzc2VydGlvbi4uLmAsIHR5cGVBc3NlcnRpb25Ob2RlKTtcblxuICBjb25zdCB0eXBlcyA9IFtdLFxuICAgICAgICB0ZXJtTm9kZSA9IHRlcm1Ob2RlUXVlcnkodHlwZUFzc2VydGlvbk5vZGUpLFxuICAgICAgICB0ZXJtVmVyaWZpZWRBZ2FpbnN0Q29uc3RydWN0b3JzID0gdmVyaWZ5VGVybUFnYWluc3RDb25zdHJ1Y3RvcnModGVybU5vZGUsIHR5cGVzLCBjb250ZXh0LCAoKSA9PiB7XG4gICAgICAgICAgbGV0IHZlcmlmaWVkQWhlYWQgPSBmYWxzZTtcblxuICAgICAgICAgIGNvbnN0IGZpcnN0VHlwZSA9IGZpcnN0KHR5cGVzKSxcbiAgICAgICAgICAgICAgICB0ZXJtVHlwZSA9IGZpcnN0VHlwZTsgLy8vXG5cbiAgICAgICAgICBpZiAoZGVyaXZlZCkge1xuICAgICAgICAgICAgY29uc3QgYXNzZXJ0ZWRUeXBlSXNFcXVhbFRvT3JTdXBlclR5cGVPZlRlcm1UeXBlID0gYXNzZXJ0ZWRUeXBlLmlzRXF1YWxUb09yU3VwZXJUeXBlT2YodGVybVR5cGUpO1xuXG4gICAgICAgICAgICBpZiAoIWFzc2VydGVkVHlwZUlzRXF1YWxUb09yU3VwZXJUeXBlT2ZUZXJtVHlwZSkge1xuICAgICAgICAgICAgICBjb25zdCB0ZXJtU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcodGVybU5vZGUpLFxuICAgICAgICAgICAgICAgICAgICB0ZXJtVHlwZU5hbWUgPSB0ZXJtVHlwZS5nZXROYW1lKCksXG4gICAgICAgICAgICAgICAgICAgIGFzc2VydGVkVHlwZU5hbWUgPSBhc3NlcnRlZFR5cGUuZ2V0TmFtZSgpO1xuXG4gICAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHthc3NlcnRlZFR5cGVOYW1lfScgYXNzZXJ0ZWQgdHlwZSBpcyBub3QgZXF1YWwgdG8gb3IgYSBzdXBlci10eXBlIG9mIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSdzICcke3Rlcm1UeXBlTmFtZX0nIHR5cGUuYCwgdHlwZUFzc2VydGlvbk5vZGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmVyaWZpZWRBaGVhZCA9IHZlcmlmeUFoZWFkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGFzc2VydGVkVHlwZUlzRXF1YWxUb09yU3ViVHlwZU9mVGVybVR5cGUgPSBhc3NlcnRlZFR5cGUuaXNFcXVhbFRvT3JTdWJUeXBlT2YodGVybVR5cGUpO1xuXG4gICAgICAgICAgICBpZiAoIWFzc2VydGVkVHlwZUlzRXF1YWxUb09yU3ViVHlwZU9mVGVybVR5cGUpIHtcbiAgICAgICAgICAgICAgY29uc3QgdGVybVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHRlcm1Ob2RlKSxcbiAgICAgICAgICAgICAgICAgICAgdGVybVR5cGVOYW1lID0gdGVybVR5cGUuZ2V0TmFtZSgpLFxuICAgICAgICAgICAgICAgICAgICBhc3NlcnRlZFR5cGVOYW1lID0gYXNzZXJ0ZWRUeXBlLmdldE5hbWUoKTtcblxuICAgICAgICAgICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7YXNzZXJ0ZWRUeXBlTmFtZX0nIGFzc2VydGVkIHR5cGUgaXMgbm90IGVxdWFsIHRvIG9yIGEgc3ViLXR5cGUgb2YgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtJ3MgJyR7dGVybVR5cGVOYW1lfScgdHlwZS5gLCB0eXBlQXNzZXJ0aW9uTm9kZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2ZXJpZmllZEFoZWFkID0gdmVyaWZ5QWhlYWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdmVyaWZpZWRBaGVhZDtcbiAgICAgICAgfSk7XG5cbiAgdGVybVR5cGVBc3NlcnRpb25WZXJpZmllZCA9IHRlcm1WZXJpZmllZEFnYWluc3RDb25zdHJ1Y3RvcnM7ICAvLy9cblxuICBpZiAodGVybVR5cGVBc3NlcnRpb25WZXJpZmllZCkge1xuICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0eXBlQXNzZXJ0aW9uU3RyaW5nfScgdGVybSB0eXBlIGFzc2VydGlvbi5gLCB0eXBlQXNzZXJ0aW9uTm9kZSk7XG4gIH1cblxuICByZXR1cm4gdGVybVR5cGVBc3NlcnRpb25WZXJpZmllZDtcbn1cbiJdLCJuYW1lcyI6WyJ2ZXJpZnlUeXBlQXNzZXJ0aW9uIiwidmVyaWZ5VmFyaWFibGVUeXBlQXNzZXJ0aW9uIiwidGVybU5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsInR5cGVOb2RlUXVlcnkiLCJ0eXBlQXNzZXJ0aW9uTm9kZSIsImFzc2lnbm1lbnRzIiwiZGVyaXZlZCIsImNvbnRleHQiLCJ2ZXJpZnlBaGVhZCIsInR5cGVBc3NlcnRpb25WZXJpZmllZCIsInR5cGVBc3NlcnRpb25TdHJpbmciLCJub2RlQXNTdHJpbmciLCJ0cmFjZSIsInR5cGVOb2RlIiwidHlwZU5hbWUiLCJ0eXBlTmFtZUZyb21UeXBlTm9kZSIsImFzc2VydGVkVHlwZU5hbWUiLCJhc3NlcnRlZFR5cGUiLCJmaW5kVHlwZUJ5VHlwZU5hbWUiLCJkZWJ1ZyIsInZlcmlmeVR5cGVBc3NlcnRpb25GdW5jdGlvbnMiLCJ2ZXJpZnlUZXJtVHlwZUFzc2VydGlvbiIsInNvbWUiLCJ2ZXJpZnlUeXBlQXNzZXJ0aW9uRnVuY3Rpb24iLCJ2YXJpYWJsZVR5cGVBc3NlcnRpb25WZXJpZmllZCIsInZhcmlhYmxlcyIsInRlcm1Ob2RlIiwidGVybVZlcmlmaWVkQXNWYXJpYWJsZSIsInZlcmlmeVRlcm1Bc1ZhcmlhYmxlIiwidmVyaWZpZWRBaGVhZCIsImZpcnN0VmFyaWFibGUiLCJmaXJzdCIsInZhcmlhYmxlIiwidmFyaWFibGVOYW1lIiwiZ2V0TmFtZSIsInZhcmlhYmxlVHlwZSIsImdldFR5cGUiLCJhc3NlcnRlZFR5cGVFcXVhbFRvT3JTdXBlclR5cGVPZlZhcmlhYmxlVHlwZSIsImlzRXF1YWxUb09yU3VwZXJUeXBlT2YiLCJ2YXJpYWJsZVR5cGVOYW1lIiwiYXNzZXJ0ZWRUeXBlRXF1YWxUb09yU3ViVHlwZU9mVmFyaWFibGVUeXBlIiwiaXNFcXVhbFRvT3JTdWJUeXBlT2YiLCJuYW1lIiwidHlwZSIsIlZhcmlhYmxlIiwiZnJvbU5hbWVBbmRUeXBlIiwidmFyaWFibGVBc3NpZ25tZW50IiwiVmFyaWFibGVBc3NpZ25tZW50IiwiZnJvbVZhcmlhYmxlIiwiYXNzaWdubWVudCIsInB1c2giLCJwb3AiLCJ0ZXJtVHlwZUFzc2VydGlvblZlcmlmaWVkIiwidHlwZXMiLCJ0ZXJtVmVyaWZpZWRBZ2FpbnN0Q29uc3RydWN0b3JzIiwidmVyaWZ5VGVybUFnYWluc3RDb25zdHJ1Y3RvcnMiLCJmaXJzdFR5cGUiLCJ0ZXJtVHlwZSIsImFzc2VydGVkVHlwZUlzRXF1YWxUb09yU3VwZXJUeXBlT2ZUZXJtVHlwZSIsInRlcm1TdHJpbmciLCJ0ZXJtVHlwZU5hbWUiLCJhc3NlcnRlZFR5cGVJc0VxdWFsVG9PclN1YlR5cGVPZlRlcm1UeXBlIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7SUFZQSxPQWtDQztlQWxDdUJBOztJQW9DUkMsMkJBQTJCO2VBQTNCQTs7OytEQTlDSztnRUFD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
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvdHlwZUFzc2VydGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFZhcmlhYmxlIGZyb20gXCIuLi92YXJpYWJsZVwiO1xuaW1wb3J0IFZhcmlhYmxlQXNzaWdubWVudCBmcm9tIFwiLi4vYXNzaWdubWVudC92YXJpYWJsZVwiO1xuaW1wb3J0IHZlcmlmeVRlcm1BbmRTdGFuZGFsb25lVHlwZSBmcm9tIFwiLi4vdmVyaWZ5L3Rlcm1BbmRTdGFuZGFsb25lVHlwZVwiO1xuaW1wb3J0IHZlcmlmeVRlcm1Bc1ZhcmlhYmxlQW5kU3RhbmRhbG9uZVR5cGUgZnJvbSBcIi4uL3ZlcmlmeS90ZXJtQXNWYXJpYWJsZUFuZFN0YW5kYWxvbmVUeXBlXCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgbm9kZVF1ZXJ5IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9xdWVyeVwiO1xuXG5jb25zdCB0ZXJtTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3R5cGVBc3NlcnRpb24vdGVybSFcIiksXG4gICAgICB0eXBlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3R5cGVBc3NlcnRpb24vdHlwZSFcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZlcmlmeVR5cGVBc3NlcnRpb24odHlwZUFzc2VydGlvbk5vZGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBjb250ZXh0LCB2ZXJpZnlBaGVhZCkge1xuICBsZXQgdHlwZUFzc2VydGlvblZlcmlmaWVkO1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb25TdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyh0eXBlQXNzZXJ0aW9uTm9kZSk7XG5cbiAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt0eXBlQXNzZXJ0aW9uU3RyaW5nfScgdHlwZSBhc3NlcnRpb24uLi5gLCB0eXBlQXNzZXJ0aW9uTm9kZSk7XG5cbiAgY29uc3QgdmVyaWZ5VHlwZUFzc2VydGlvbkZ1bmN0aW9ucyA9IFtcbiAgICB2ZXJpZnlEZXJpdmVkVHlwZUFzc2VydGlvbixcbiAgICB2ZXJpZnlHaXZlblR5cGVBc3NlcnRpb25cbiAgXTtcblxuICB0eXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSB2ZXJpZnlUeXBlQXNzZXJ0aW9uRnVuY3Rpb25zLnNvbWUoKHZlcmlmeVR5cGVBc3NlcnRpb25GdW5jdGlvbikgPT4ge1xuICAgIGNvbnN0IHR5cGVBc3NlcnRpb25WZXJpZmllZCA9IHZlcmlmeVR5cGVBc3NlcnRpb25GdW5jdGlvbih0eXBlQXNzZXJ0aW9uTm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGNvbnRleHQsIHZlcmlmeUFoZWFkKTtcblxuICAgIGlmICh0eXBlQXNzZXJ0aW9uVmVyaWZpZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKHR5cGVBc3NlcnRpb25WZXJpZmllZCkge1xuICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0eXBlQXNzZXJ0aW9uU3RyaW5nfScgdHlwZSBhc3NlcnRpb24uYCwgdHlwZUFzc2VydGlvbk5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGVBc3NlcnRpb25WZXJpZmllZDtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5RGVyaXZlZFR5cGVBc3NlcnRpb24odHlwZUFzc2VydGlvbk5vZGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBjb250ZXh0LCB2ZXJpZnlBaGVhZCkge1xuICBsZXQgZGVyaXZlZFR5cGVBc3NlcnRpb25WZXJpZmllZCA9IGZhbHNlO1xuXG4gIGlmIChkZXJpdmVkKSB7XG4gICAgY29uc3QgdHlwZUFzc2VydGlvblN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHR5cGVBc3NlcnRpb25Ob2RlKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIGRlcml2ZWQgdHlwZSBhc3NlcnRpb24uLi5gLCB0eXBlQXNzZXJ0aW9uTm9kZSk7XG5cbiAgICBjb25zdCB0ZXJtcyA9IFtdLFxuICAgICAgICAgIHR5cGVzID0gW10sXG4gICAgICAgICAgdGVybU5vZGUgPSB0ZXJtTm9kZVF1ZXJ5KHR5cGVBc3NlcnRpb25Ob2RlKSxcbiAgICAgICAgICB0eXBlTm9kZSA9IHR5cGVOb2RlUXVlcnkodHlwZUFzc2VydGlvbk5vZGUpLFxuICAgICAgICAgIHRlcm1BbmRTdGFuZGFsb25lVHlwZVZlcmlmaWVkID0gdmVyaWZ5VGVybUFuZFN0YW5kYWxvbmVUeXBlKHRlcm1Ob2RlLCB0eXBlTm9kZSwgdGVybXMsIHR5cGVzLCBjb250ZXh0LCAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgdmVyaWZpZWRBaGVhZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBjb25zdCBmaXJzdFRlcm0gPSBmaXJzdCh0ZXJtcyksXG4gICAgICAgICAgICAgICAgICBmaXJzdFR5cGUgPSBmaXJzdCh0eXBlcyksXG4gICAgICAgICAgICAgICAgICB0ZXJtID0gZmlyc3RUZXJtLCAvLy9cbiAgICAgICAgICAgICAgICAgIHR5cGUgPSBmaXJzdFR5cGUsIC8vL1xuICAgICAgICAgICAgICAgICAgdGVybVR5cGUgPSB0ZXJtLmdldFR5cGUoKSxcbiAgICAgICAgICAgICAgICAgIHRlcm1UeXBlRXF1YWxUb09yU3VwZXJUeXBlT2ZUeXBlID0gdGVybVR5cGUuaXNFcXVhbFRvT3JTdXBlclR5cGVPZih0eXBlKTtcblxuICAgICAgICAgICAgaWYgKHRlcm1UeXBlRXF1YWxUb09yU3VwZXJUeXBlT2ZUeXBlKSB7XG4gICAgICAgICAgICAgIGRlYnVnZ2VyXG5cbiAgICAgICAgICAgICAgaWYgKGZhbHNlKSB7ICAvLy9cbiAgICAgICAgICAgICAgICB2ZXJpZmllZEFoZWFkID0gdmVyaWZ5QWhlYWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdmVyaWZpZWRBaGVhZDtcbiAgICAgICAgICB9KTtcblxuICAgIGRlcml2ZWRUeXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSB0ZXJtQW5kU3RhbmRhbG9uZVR5cGVWZXJpZmllZDsgLy8vXG5cbiAgICBpZiAoZGVyaXZlZFR5cGVBc3NlcnRpb25WZXJpZmllZCkge1xuICAgICAgY29udGV4dC50cmFjZShgLi4udmVyaWZpZWQgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyBkZXJpdmVkIHR5cGUgYXNzZXJ0aW9uLmAsIHR5cGVBc3NlcnRpb25Ob2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGVyaXZlZFR5cGVBc3NlcnRpb25WZXJpZmllZDtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5R2l2ZW5UeXBlQXNzZXJ0aW9uKHR5cGVBc3NlcnRpb25Ob2RlLCBhc3NpZ25tZW50cywgZGVyaXZlZCwgY29udGV4dCwgdmVyaWZ5QWhlYWQpIHtcbiAgbGV0IGdpdmVuVHlwZUFzc2VydGlvblZlcmlmaWVkID0gZmFsc2U7XG5cbiAgaWYgKCFkZXJpdmVkKSB7XG4gICAgY29uc3QgdHlwZUFzc2VydGlvblN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHR5cGVBc3NlcnRpb25Ob2RlKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIGdpdmVuIHR5cGUgYXNzZXJ0aW9uLi4uYCwgdHlwZUFzc2VydGlvbk5vZGUpO1xuXG4gICAgY29uc3QgdHlwZXMgPSBbXSxcbiAgICAgICAgICB2YXJpYWJsZXMgPSBbXSxcbiAgICAgICAgICB0ZXJtTm9kZSA9IHRlcm1Ob2RlUXVlcnkodHlwZUFzc2VydGlvbk5vZGUpLFxuICAgICAgICAgIHR5cGVOb2RlID0gdHlwZU5vZGVRdWVyeSh0eXBlQXNzZXJ0aW9uTm9kZSksXG4gICAgICAgICAgdGVybUFzVmFyaWFibGVBbmRTdGFuZGFsb25lVHlwZVZlcmlmaWVkID0gdmVyaWZ5VGVybUFzVmFyaWFibGVBbmRTdGFuZGFsb25lVHlwZSh0ZXJtTm9kZSwgdHlwZU5vZGUsIHZhcmlhYmxlcywgdHlwZXMsIGNvbnRleHQsICgpID0+IHtcbiAgICAgICAgICAgIGxldCB2ZXJpZmllZEFoZWFkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvbnN0IGZpcnN0VmFyaWFibGUgPSBmaXJzdCh2YXJpYWJsZXMpO1xuXG4gICAgICAgICAgICBsZXQgdmFyaWFibGUgPSBmaXJzdFZhcmlhYmxlOyAvLy9cblxuICAgICAgICAgICAgY29uc3QgZmlyc3RUeXBlID0gZmlyc3QodHlwZXMpLFxuICAgICAgICAgICAgICAgICAgdHlwZSA9IGZpcnN0VHlwZSwgLy8vXG4gICAgICAgICAgICAgICAgICB2YXJpYWJsZVR5cGUgPSB2YXJpYWJsZS5nZXRUeXBlKCksXG4gICAgICAgICAgICAgICAgICB2YXJpYWJsZVR5cGVFcXVhbFRvT3JTdXBlclR5cGVPZlR5cGUgPSB2YXJpYWJsZVR5cGUuaXNFcXVhbFRvT3JTdXBlclR5cGVPZih0eXBlKTtcblxuICAgICAgICAgICAgaWYgKHZhcmlhYmxlVHlwZUVxdWFsVG9PclN1cGVyVHlwZU9mVHlwZSkge1xuICAgICAgICAgICAgICB2YXJpYWJsZSA9IFZhcmlhYmxlLmZyb21WYXJpYWJsZUFuZFR5cGUodmFyaWFibGUsIHR5cGUpOyAgLy8vXG5cbiAgICAgICAgICAgICAgY29uc3QgdmFyaWFibGVBc3NpZ25tZW50ID0gVmFyaWFibGVBc3NpZ25tZW50LmZyb21WYXJpYWJsZSh2YXJpYWJsZSksXG4gICAgICAgICAgICAgICAgICAgIGFzc2lnbm1lbnQgPSB2YXJpYWJsZUFzc2lnbm1lbnQ7IC8vL1xuXG4gICAgICAgICAgICAgIGFzc2lnbm1lbnRzLnB1c2goYXNzaWdubWVudCk7XG5cbiAgICAgICAgICAgICAgdmVyaWZpZWRBaGVhZCA9IHZlcmlmeUFoZWFkKCk7XG5cbiAgICAgICAgICAgICAgaWYgKCF2ZXJpZmllZEFoZWFkKSB7XG4gICAgICAgICAgICAgICAgYXNzaWdubWVudHMucG9wKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHZlcmlmaWVkQWhlYWQ7XG4gICAgICAgICAgfSk7XG5cbiAgICBnaXZlblR5cGVBc3NlcnRpb25WZXJpZmllZCA9IHRlcm1Bc1ZhcmlhYmxlQW5kU3RhbmRhbG9uZVR5cGVWZXJpZmllZDsgLy8vXG5cbiAgICBpZiAoZ2l2ZW5UeXBlQXNzZXJ0aW9uVmVyaWZpZWQpIHtcbiAgICAgIGNvbnRleHQudHJhY2UoYC4uLnZlcmlmaWVkIHRoZSAnJHt0eXBlQXNzZXJ0aW9uU3RyaW5nfScgZ2l2ZW4gdHlwZSBhc3NlcnRpb24uYCwgdHlwZUFzc2VydGlvbk5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBnaXZlblR5cGVBc3NlcnRpb25WZXJpZmllZDtcbn1cbiJdLCJuYW1lcyI6WyJ2ZXJpZnlUeXBlQXNzZXJ0aW9uIiwidGVybU5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsInR5cGVOb2RlUXVlcnkiLCJ0eXBlQXNzZXJ0aW9uTm9kZSIsImFzc2lnbm1lbnRzIiwiZGVyaXZlZCIsImNvbnRleHQiLCJ2ZXJpZnlBaGVhZCIsInR5cGVBc3NlcnRpb25WZXJpZmllZCIsInR5cGVBc3NlcnRpb25TdHJpbmciLCJub2RlQXNTdHJpbmciLCJ0cmFjZSIsInZlcmlmeVR5cGVBc3NlcnRpb25GdW5jdGlvbnMiLCJ2ZXJpZnlEZXJpdmVkVHlwZUFzc2VydGlvbiIsInZlcmlmeUdpdmVuVHlwZUFzc2VydGlvbiIsInNvbWUiLCJ2ZXJpZnlUeXBlQXNzZXJ0aW9uRnVuY3Rpb24iLCJkZWJ1ZyIsImRlcml2ZWRUeXBlQXNzZXJ0aW9uVmVyaWZpZWQiLCJ0ZXJtcyIsInR5cGVzIiwidGVybU5vZGUiLCJ0eXBlTm9kZSIsInRlcm1BbmRTdGFuZGFsb25lVHlwZVZlcmlmaWVkIiwidmVyaWZ5VGVybUFuZFN0YW5kYWxvbmVUeXBlIiwidmVyaWZpZWRBaGVhZCIsImZpcnN0VGVybSIsImZpcnN0IiwiZmlyc3RUeXBlIiwidGVybSIsInR5cGUiLCJ0ZXJtVHlwZSIsImdldFR5cGUiLCJ0ZXJtVHlwZUVxdWFsVG9PclN1cGVyVHlwZU9mVHlwZSIsImlzRXF1YWxUb09yU3VwZXJUeXBlT2YiLCJnaXZlblR5cGVBc3NlcnRpb25WZXJpZmllZCIsInZhcmlhYmxlcyIsInRlcm1Bc1ZhcmlhYmxlQW5kU3RhbmRhbG9uZVR5cGVWZXJpZmllZCIsInZlcmlmeVRlcm1Bc1ZhcmlhYmxlQW5kU3RhbmRhbG9uZVR5cGUiLCJmaXJzdFZhcmlhYmxlIiwidmFyaWFibGUiLCJ2YXJpYWJsZVR5cGUiLCJ2YXJpYWJsZVR5cGVFcXVhbFRvT3JTdXBlclR5cGVPZlR5cGUiLCJWYXJpYWJsZSIsImZyb21WYXJpYWJsZUFuZFR5cGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnQiLCJWYXJpYWJsZUFzc2lnbm1lbnQiLCJmcm9tVmFyaWFibGUiLCJhc3NpZ25tZW50IiwicHVzaCIsInBvcCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBYUE7OztlQUF3QkE7OzsrREFYSDtnRUFDVTs0RUFDUztzRkFDVTtxQkFFNUI7cUJBQ0k7Ozs7OztBQUUxQixJQUFNQyxnQkFBZ0JDLElBQUFBLGdCQUFTLEVBQUMseUJBQzFCQyxnQkFBZ0JELElBQUFBLGdCQUFTLEVBQUM7QUFFakIsU0FBU0Ysb0JBQW9CSSxpQkFBaUIsRUFBRUMsV0FBVyxFQUFFQyxPQUFPLEVBQUVDLE9BQU8sRUFBRUMsV0FBVztJQUN2RyxJQUFJQztJQUVKLElBQU1DLHNCQUFzQkgsUUFBUUksWUFBWSxDQUFDUDtJQUVqREcsUUFBUUssS0FBSyxDQUFDLEFBQUMsa0JBQXFDLE9BQXBCRixxQkFBb0Isd0JBQXNCTjtJQUUxRSxJQUFNUywrQkFBK0I7UUFDbkNDO1FBQ0FDO0tBQ0Q7SUFFRE4sd0JBQXdCSSw2QkFBNkJHLElBQUksQ0FBQyxTQUFDQztRQUN6RCxJQUFNUix3QkFBd0JRLDRCQUE0QmIsbUJBQW1CQyxhQUFhQyxTQUFTQyxTQUFTQztRQUU1RyxJQUFJQyx1QkFBdUI7WUFDekIsT0FBTztR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
@@ -9,6 +9,7 @@ Object.defineProperty(exports, "default", {
9
9
  }
10
10
  });
11
11
  var _variable = /*#__PURE__*/ _interop_require_default(require("../variable"));
12
+ var _variable1 = /*#__PURE__*/ _interop_require_default(require("../assignment/variable"));
12
13
  var _type = require("../type");
13
14
  var _query = require("../utilities/query");
14
15
  function _interop_require_default(obj) {
@@ -20,27 +21,28 @@ function verifyVariable(variableNode, typeNode, fileContext) {
20
21
  var variableVerified = false;
21
22
  var variableString = fileContext.nodeAsString(variableNode);
22
23
  fileContext.trace("Verifying the '".concat(variableString, "' variable..."), variableNode);
23
- var variableName = (0, _query.variableNameFromVariableNode)(variableNode), variablePresent = fileContext.isVariablePresentByVariableName(variableName);
24
+ var variablePresent = fileContext.isVariablePresentByVariableNode(variableNode);
24
25
  if (variablePresent) {
25
- fileContext.debug("The variable '".concat(variableName, "' is already present."), variableNode);
26
+ fileContext.debug("The variable '".concat(variableString, "' is already present."), variableNode);
26
27
  } else {
27
28
  var variable;
28
29
  var typeName = (0, _query.typeNameFromTypeNode)(typeNode);
29
30
  if (typeName === null) {
30
- var name = variableName, type = _type.objectType;
31
- variable = _variable.default.fromNameAndType(name, type);
31
+ var type = _type.objectType;
32
+ variable = _variable.default.fromVariableNodeAndType(variableNode, type);
32
33
  } else {
33
34
  var type1 = fileContext.findTypeByTypeName(typeName);
34
35
  if (type1 === null) {
35
- fileContext.debug("The '".concat(variableName, "' variable's '").concat(typeName, "' type is not present."), variableNode);
36
+ fileContext.debug("The '".concat(variableString, "' variable's '").concat(typeName, "' type is not present."), variableNode);
36
37
  } else {
37
- var name1 = variableName; ///
38
- variable = _variable.default.fromNameAndType(name1, type1);
38
+ variable = _variable.default.fromVariableNodeAndType(variableNode, type1);
39
39
  }
40
40
  }
41
41
  if (variable !== null) {
42
- fileContext.addVariable(variable);
43
- variableVerified = true;
42
+ var variableAssignment = _variable1.default.fromVariable(variable), variableAssigned = variableAssignment.assign(fileContext);
43
+ if (variableAssigned) {
44
+ variableVerified = true;
45
+ }
44
46
  }
45
47
  }
46
48
  if (variableVerified) {
@@ -49,4 +51,4 @@ function verifyVariable(variableNode, typeNode, fileContext) {
49
51
  return variableVerified;
50
52
  }
51
53
 
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvdmFyaWFibGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWYXJpYWJsZSBmcm9tIFwiLi4vdmFyaWFibGVcIjtcblxuaW1wb3J0IHsgb2JqZWN0VHlwZSB9IGZyb20gXCIuLi90eXBlXCI7XG5pbXBvcnQgeyB0eXBlTmFtZUZyb21UeXBlTm9kZSwgdmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcXVlcnlcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmVyaWZ5VmFyaWFibGUodmFyaWFibGVOb2RlLCB0eXBlTm9kZSwgZmlsZUNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlVmVyaWZpZWQgPSBmYWxzZTtcblxuICBjb25zdCB2YXJpYWJsZVN0cmluZyA9IGZpbGVDb250ZXh0Lm5vZGVBc1N0cmluZyh2YXJpYWJsZU5vZGUpO1xuXG4gIGZpbGVDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3ZhcmlhYmxlU3RyaW5nfScgdmFyaWFibGUuLi5gLCB2YXJpYWJsZU5vZGUpO1xuXG4gIGNvbnN0IHZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlTmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSxcbiAgICAgICAgdmFyaWFibGVQcmVzZW50ID0gZmlsZUNvbnRleHQuaXNWYXJpYWJsZVByZXNlbnRCeVZhcmlhYmxlTmFtZSh2YXJpYWJsZU5hbWUpO1xuXG4gIGlmICh2YXJpYWJsZVByZXNlbnQpIHtcbiAgICBmaWxlQ29udGV4dC5kZWJ1ZyhgVGhlIHZhcmlhYmxlICcke3ZhcmlhYmxlTmFtZX0nIGlzIGFscmVhZHkgcHJlc2VudC5gLCB2YXJpYWJsZU5vZGUpO1xuICB9IGVsc2Uge1xuICAgIGxldCB2YXJpYWJsZTtcblxuICAgIGNvbnN0IHR5cGVOYW1lID0gdHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUpO1xuICAgIFxuICAgIGlmICh0eXBlTmFtZSA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgbmFtZSA9IHZhcmlhYmxlTmFtZSwgIC8vL1xuICAgICAgICAgICAgdHlwZSA9IG9iamVjdFR5cGU7XG5cbiAgICAgICAgdmFyaWFibGUgPSBWYXJpYWJsZS5mcm9tTmFtZUFuZFR5cGUobmFtZSwgdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBmaWxlQ29udGV4dC5maW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUpO1xuXG4gICAgICBpZiAodHlwZSA9PT0gbnVsbCkge1xuICAgICAgICBmaWxlQ29udGV4dC5kZWJ1ZyhgVGhlICcke3ZhcmlhYmxlTmFtZX0nIHZhcmlhYmxlJ3MgJyR7dHlwZU5hbWV9JyB0eXBlIGlzIG5vdCBwcmVzZW50LmAsIHZhcmlhYmxlTm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBuYW1lID0gdmFyaWFibGVOYW1lOyAgLy8vXG5cbiAgICAgICAgdmFyaWFibGUgPSBWYXJpYWJsZS5mcm9tTmFtZUFuZFR5cGUobmFtZSwgdHlwZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICBmaWxlQ29udGV4dC5hZGRWYXJpYWJsZSh2YXJpYWJsZSk7XG5cbiAgICAgIHZhcmlhYmxlVmVyaWZpZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICh2YXJpYWJsZVZlcmlmaWVkKSB7XG4gICAgZmlsZUNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt2YXJpYWJsZVN0cmluZ30nIHZhcmlhYmxlLmAsIHZhcmlhYmxlTm9kZSk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGVWZXJpZmllZDtcbn1cbiJdLCJuYW1lcyI6WyJ2ZXJpZnlWYXJpYWJsZSIsInZhcmlhYmxlTm9kZSIsInR5cGVOb2RlIiwiZmlsZUNvbnRleHQiLCJ2YXJpYWJsZVZlcmlmaWVkIiwidmFyaWFibGVTdHJpbmciLCJub2RlQXNTdHJpbmciLCJ0cmFjZSIsInZhcmlhYmxlTmFtZSIsInZhcmlhYmxlTmFtZUZyb21WYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZVByZXNlbnQiLCJpc1ZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVOYW1lIiwiZGVidWciLCJ2YXJpYWJsZSIsInR5cGVOYW1lIiwidHlwZU5hbWVGcm9tVHlwZU5vZGUiLCJuYW1lIiwidHlwZSIsIm9iamVjdFR5cGUiLCJWYXJpYWJsZSIsImZyb21OYW1lQW5kVHlwZSIsImZpbmRUeXBlQnlUeXBlTmFtZSIsImFkZFZhcmlhYmxlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFPQTs7O2VBQXdCQTs7OytEQUxIO29CQUVNO3FCQUN3Qzs7Ozs7O0FBRXBELFNBQVNBLGVBQWVDLFlBQVksRUFBRUMsUUFBUSxFQUFFQyxXQUFXO0lBQ3hFLElBQUlDLG1CQUFtQjtJQUV2QixJQUFNQyxpQkFBaUJGLFlBQVlHLFlBQVksQ0FBQ0w7SUFFaERFLFlBQVlJLEtBQUssQ0FBQyxBQUFDLGtCQUFnQyxPQUFmRixnQkFBZSxrQkFBZ0JKO0lBRW5FLElBQU1PLGVBQWVDLElBQUFBLG1DQUE0QixFQUFDUixlQUM1Q1Msa0JBQWtCUCxZQUFZUSwrQkFBK0IsQ0FBQ0g7SUFFcEUsSUFBSUUsaUJBQWlCO1FBQ25CUCxZQUFZUyxLQUFLLENBQUMsQUFBQyxpQkFBNkIsT0FBYkosY0FBYSwwQkFBd0JQO0lBQzFFLE9BQU87UUFDTCxJQUFJWTtRQUVKLElBQU1DLFdBQVdDLElBQUFBLDJCQUFvQixFQUFDYjtRQUV0QyxJQUFJWSxhQUFhLE1BQU07WUFDckIsSUFBTUUsT0FBT1IsY0FDUFMsT0FBT0MsZ0JBQVU7WUFFckJMLFdBQVdNLGlCQUFRLENBQUNDLGVBQWUsQ0FBQ0osTUFBTUM7UUFDOUMsT0FBTztZQUNMLElBQU1BLFFBQU9kLFlBQVlrQixrQkFBa0IsQ0FBQ1A7WUFFNUMsSUFBSUcsVUFBUyxNQUFNO2dCQUNqQmQsWUFBWVMsS0FBSyxDQUFDLEFBQUMsUUFBb0NFLE9BQTdCTixjQUFhLGtCQUF5QixPQUFUTSxVQUFTLDJCQUF5QmI7WUFDM0YsT0FBTztnQkFDTCxJQUFNZSxRQUFPUixjQUFlLEdBQUc7Z0JBRS9CSyxXQUFXTSxpQkFBUSxDQUFDQyxlQUFlLENBQUNKLE9BQU1DO1lBQzVDO1FBQ0Y7UUFFQSxJQUFJSixhQUFhLE1BQU07WUFDckJWLFlBQVltQixXQUFXLENBQUNUO1lBRXhCVCxtQkFBbUI7UUFDckI7SUFDRjtJQUVBLElBQUlBLGtCQUFrQjtRQUNwQkQsWUFBWVMsS0FBSyxDQUFDLEFBQUMsb0JBQWtDLE9BQWZQLGdCQUFlLGdCQUFjSjtJQUNyRTtJQUVBLE9BQU9HO0FBQ1QifQ==
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvdmFyaWFibGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWYXJpYWJsZSBmcm9tIFwiLi4vdmFyaWFibGVcIjtcbmltcG9ydCBWYXJpYWJsZUFzc2lnbm1lbnQgZnJvbSBcIi4uL2Fzc2lnbm1lbnQvdmFyaWFibGVcIjtcblxuaW1wb3J0IHsgb2JqZWN0VHlwZSB9IGZyb20gXCIuLi90eXBlXCI7XG5pbXBvcnQgeyB0eXBlTmFtZUZyb21UeXBlTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcXVlcnlcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmVyaWZ5VmFyaWFibGUodmFyaWFibGVOb2RlLCB0eXBlTm9kZSwgZmlsZUNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlVmVyaWZpZWQgPSBmYWxzZTtcblxuICBjb25zdCB2YXJpYWJsZVN0cmluZyA9IGZpbGVDb250ZXh0Lm5vZGVBc1N0cmluZyh2YXJpYWJsZU5vZGUpO1xuXG4gIGZpbGVDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3ZhcmlhYmxlU3RyaW5nfScgdmFyaWFibGUuLi5gLCB2YXJpYWJsZU5vZGUpO1xuXG4gIGNvbnN0IHZhcmlhYmxlUHJlc2VudCA9IGZpbGVDb250ZXh0LmlzVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKTtcblxuICBpZiAodmFyaWFibGVQcmVzZW50KSB7XG4gICAgZmlsZUNvbnRleHQuZGVidWcoYFRoZSB2YXJpYWJsZSAnJHt2YXJpYWJsZVN0cmluZ30nIGlzIGFscmVhZHkgcHJlc2VudC5gLCB2YXJpYWJsZU5vZGUpO1xuICB9IGVsc2Uge1xuICAgIGxldCB2YXJpYWJsZTtcblxuICAgIGNvbnN0IHR5cGVOYW1lID0gdHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUpO1xuICAgIFxuICAgIGlmICh0eXBlTmFtZSA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgdHlwZSA9IG9iamVjdFR5cGU7XG5cbiAgICAgIHZhcmlhYmxlID0gVmFyaWFibGUuZnJvbVZhcmlhYmxlTm9kZUFuZFR5cGUodmFyaWFibGVOb2RlLCB0eXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdHlwZSA9IGZpbGVDb250ZXh0LmZpbmRUeXBlQnlUeXBlTmFtZSh0eXBlTmFtZSk7XG5cbiAgICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICAgIGZpbGVDb250ZXh0LmRlYnVnKGBUaGUgJyR7dmFyaWFibGVTdHJpbmd9JyB2YXJpYWJsZSdzICcke3R5cGVOYW1lfScgdHlwZSBpcyBub3QgcHJlc2VudC5gLCB2YXJpYWJsZU5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyaWFibGUgPSBWYXJpYWJsZS5mcm9tVmFyaWFibGVOb2RlQW5kVHlwZSh2YXJpYWJsZU5vZGUsIHR5cGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdmFyaWFibGVBc3NpZ25tZW50ID0gVmFyaWFibGVBc3NpZ25tZW50LmZyb21WYXJpYWJsZSh2YXJpYWJsZSksXG4gICAgICAgICAgICB2YXJpYWJsZUFzc2lnbmVkID0gdmFyaWFibGVBc3NpZ25tZW50LmFzc2lnbihmaWxlQ29udGV4dCk7XG5cbiAgICAgIGlmICh2YXJpYWJsZUFzc2lnbmVkKSB7XG4gICAgICAgIHZhcmlhYmxlVmVyaWZpZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICh2YXJpYWJsZVZlcmlmaWVkKSB7XG4gICAgZmlsZUNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt2YXJpYWJsZVN0cmluZ30nIHZhcmlhYmxlLmAsIHZhcmlhYmxlTm9kZSk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGVWZXJpZmllZDtcbn1cbiJdLCJuYW1lcyI6WyJ2ZXJpZnlWYXJpYWJsZSIsInZhcmlhYmxlTm9kZSIsInR5cGVOb2RlIiwiZmlsZUNvbnRleHQiLCJ2YXJpYWJsZVZlcmlmaWVkIiwidmFyaWFibGVTdHJpbmciLCJub2RlQXNTdHJpbmciLCJ0cmFjZSIsInZhcmlhYmxlUHJlc2VudCIsImlzVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZU5vZGUiLCJkZWJ1ZyIsInZhcmlhYmxlIiwidHlwZU5hbWUiLCJ0eXBlTmFtZUZyb21UeXBlTm9kZSIsInR5cGUiLCJvYmplY3RUeXBlIiwiVmFyaWFibGUiLCJmcm9tVmFyaWFibGVOb2RlQW5kVHlwZSIsImZpbmRUeXBlQnlUeXBlTmFtZSIsInZhcmlhYmxlQXNzaWdubWVudCIsIlZhcmlhYmxlQXNzaWdubWVudCIsImZyb21WYXJpYWJsZSIsInZhcmlhYmxlQXNzaWduZWQiLCJhc3NpZ24iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVFBOzs7ZUFBd0JBOzs7K0RBTkg7Z0VBQ1U7b0JBRUo7cUJBQ1U7Ozs7OztBQUV0QixTQUFTQSxlQUFlQyxZQUFZLEVBQUVDLFFBQVEsRUFBRUMsV0FBVztJQUN4RSxJQUFJQyxtQkFBbUI7SUFFdkIsSUFBTUMsaUJBQWlCRixZQUFZRyxZQUFZLENBQUNMO0lBRWhERSxZQUFZSSxLQUFLLENBQUMsQUFBQyxrQkFBZ0MsT0FBZkYsZ0JBQWUsa0JBQWdCSjtJQUVuRSxJQUFNTyxrQkFBa0JMLFlBQVlNLCtCQUErQixDQUFDUjtJQUVwRSxJQUFJTyxpQkFBaUI7UUFDbkJMLFlBQVlPLEtBQUssQ0FBQyxBQUFDLGlCQUErQixPQUFmTCxnQkFBZSwwQkFBd0JKO0lBQzVFLE9BQU87UUFDTCxJQUFJVTtRQUVKLElBQU1DLFdBQVdDLElBQUFBLDJCQUFvQixFQUFDWDtRQUV0QyxJQUFJVSxhQUFhLE1BQU07WUFDckIsSUFBTUUsT0FBT0MsZ0JBQVU7WUFFdkJKLFdBQVdLLGlCQUFRLENBQUNDLHVCQUF1QixDQUFDaEIsY0FBY2E7UUFDNUQsT0FBTztZQUNMLElBQU1BLFFBQU9YLFlBQVllLGtCQUFrQixDQUFDTjtZQUU1QyxJQUFJRSxVQUFTLE1BQU07Z0JBQ2pCWCxZQUFZTyxLQUFLLENBQUMsQUFBQyxRQUFzQ0UsT0FBL0JQLGdCQUFlLGtCQUF5QixPQUFUTyxVQUFTLDJCQUF5Qlg7WUFDN0YsT0FBTztnQkFDTFUsV0FBV0ssaUJBQVEsQ0FBQ0MsdUJBQXVCLENBQUNoQixjQUFjYTtZQUM1RDtRQUNGO1FBRUEsSUFBSUgsYUFBYSxNQUFNO1lBQ3JCLElBQU1RLHFCQUFxQkMsa0JBQWtCLENBQUNDLFlBQVksQ0FBQ1YsV0FDckRXLG1CQUFtQkgsbUJBQW1CSSxNQUFNLENBQUNwQjtZQUVuRCxJQUFJbUIsa0JBQWtCO2dCQUNwQmxCLG1CQUFtQjtZQUNyQjtRQUNGO0lBQ0Y7SUFFQSxJQUFJQSxrQkFBa0I7UUFDcEJELFlBQVlPLEtBQUssQ0FBQyxBQUFDLG9CQUFrQyxPQUFmTCxnQkFBZSxnQkFBY0o7SUFDckU7SUFFQSxPQUFPRztBQUNUIn0=
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-verify-cli",
3
3
  "author": "James Smith",
4
- "version": "0.0.697",
4
+ "version": "0.0.700",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-verify-cli",
7
7
  "description": "Occam's Verifier",
@@ -9,13 +9,22 @@ export default class EqualityAssignment {
9
9
  return this.equality;
10
10
  }
11
11
 
12
- assign(localContext) {
13
- localContext.addEquality(this.equality);
12
+ assign(context) {
13
+ const equalityAdded = context.addEquality(this.equality),
14
+ equalityNode = this.equality.getNode(),
15
+ equalityString = context.nodeAsString(equalityNode),
16
+ equalityAssigned = equalityAdded; ///
17
+
18
+ equalityAssigned ?
19
+ context.debug(`Able to assign the '${equalityString}' equality.`, equalityNode) :
20
+ context.trace(`Unable to assign the '${equalityString}' equality.`, equalityNode);
21
+
22
+ return equalityAssigned;
14
23
  }
15
24
 
16
25
  static fromEquality(equality) {
17
- const assignmentAssignment = new EqualityAssignment(equality);
26
+ const equalityAssignment = new EqualityAssignment(equality);
18
27
 
19
- return assignmentAssignment;
28
+ return equalityAssignment;
20
29
  }
21
30
  }
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ export default class MetavariableAssignment {
4
+ constructor(metavariable) {
5
+ this.metavariable = metavariable;
6
+ }
7
+
8
+ getMetavariable() {
9
+ return this.metavariable;
10
+ }
11
+
12
+ assign(fileContext) {
13
+ const metavariableAdded = fileContext.addMetavariable(this.metavariable),
14
+ metavariableNode = this.metavariable.getNode(),
15
+ metavariableString = fileContext.nodeAsString(metavariableNode),
16
+ metavariableAssigned = metavariableAdded; ///
17
+
18
+ metavariableAssigned ?
19
+ fileContext.debug(`Able to assign the '${metavariableString}' metavariable.`, metavariableNode) :
20
+ fileContext.trace(`Unable to assign the '${metavariableString}' metavariable.`, metavariableNode);
21
+
22
+ return metavariableAssigned;
23
+ }
24
+
25
+ static fromMetavariable(metavariable) {
26
+ const metavariableAssignment = new MetavariableAssignment(metavariable);
27
+
28
+ return metavariableAssignment;
29
+ }
30
+ }
@@ -9,13 +9,24 @@ export default class VariableAssignment {
9
9
  return this.variable;
10
10
  }
11
11
 
12
- assign(localContext) {
13
- localContext.addVariable(this.variable);
12
+ assign(context) {
13
+ const variableAdded = context.addVariable(this.variable),
14
+ variableNode = this.variable.getNode(),
15
+ variableType = this.variable.getType(),
16
+ variableString = context.nodeAsString(variableNode),
17
+ variableTypeName = variableType.getName(),
18
+ variableAssigned = variableAdded; ///
19
+
20
+ variableAssigned ?
21
+ context.debug(`Able to assign the '${variableString}' variable with type '${variableTypeName}'.`, variableNode) :
22
+ context.trace(`Unable to assign the '${variableString}' variable with type '${variableTypeName}'.`, variableNode);
23
+
24
+ return variableAssigned;
14
25
  }
15
26
 
16
27
  static fromVariable(variable) {
17
- const assignmentAssignment = new VariableAssignment(variable);
28
+ const variableAssignment = new VariableAssignment(variable);
18
29
 
19
- return assignmentAssignment;
30
+ return variableAssignment;
20
31
  }
21
32
  }
@@ -1,8 +1,7 @@
1
1
  "use strict";
2
2
 
3
- import Type from "./type";
4
-
5
3
  import { nodeAsString } from "./utilities/string";
4
+ import { typeFromJSONAndFileContext } from "./type";
6
5
  import { termNodeFromConstructorDeclarationTokens } from "./utilities/node";
7
6
  import { constructorDeclarationTokensFromTermString } from "./utilities/tokens";
8
7
 
@@ -62,11 +61,7 @@ export default class Constructor {
62
61
 
63
62
  json = typeJSON; ///
64
63
 
65
- type = Type.fromJSONAndFileContext(json, fileContext);
66
-
67
- const typeName = type.getName();
68
-
69
- type = fileContext.findTypeByTypeName(typeName); ///
64
+ type = typeFromJSONAndFileContext(json, fileContext);
70
65
  }
71
66
 
72
67
  const tokens = constructorDeclarationTokens, ///
@@ -1,6 +1,5 @@
1
1
  "use strict";
2
2
 
3
- import Type from "../type";
4
3
  import Rule from "../rule";
5
4
  import Axiom from "../axiom";
6
5
  import Lemma from "../lemma";
@@ -11,9 +10,10 @@ import Combinator from "../combinator";
11
10
  import Constructor from "../constructor";
12
11
  import Metavariable from "../metavariable";
13
12
 
13
+ import { push } from "../utilities/array";
14
14
  import { objectType } from "../type";
15
- import { push, filter } from "../utilities/array";
16
15
  import { statementMetaType } from "../metaType";
16
+ import { typeFromJSONAndFileContext } from "../type";
17
17
  import { nodeAsString, nodesAsString } from "../utilities/string";
18
18
 
19
19
  const metaTypes = [
@@ -259,18 +259,15 @@ export default class FileContext {
259
259
  findTypeByTypeName(typeName) {
260
260
  let types = this.getTypes();
261
261
 
262
- types = [ ///
263
- ...types,
264
- objectType
265
- ];
262
+ types.push(objectType);
266
263
 
267
264
  const type = types.find((type) => {
268
- const matches = type.matchTypeName(typeName);
265
+ const matches = type.matchTypeName(typeName);
269
266
 
270
- if (matches) {
271
- return true;
272
- }
273
- }) || null;
267
+ if (matches) {
268
+ return true;
269
+ }
270
+ }) || null;
274
271
 
275
272
  return type;
276
273
  }
@@ -331,13 +328,13 @@ export default class FileContext {
331
328
  return theorem;
332
329
  }
333
330
 
334
- findVariableByVariableName(variableName) {
335
- const name = variableName, ///
331
+ findVariableByVariableNode(variableNode) {
332
+ const node = variableNode, ///
336
333
  variables = this.getVariables(),
337
334
  variable = variables.find((variable) => {
338
- const matches = variable.matchName(name);
335
+ const nodeMatches = variable.matchNode(node);
339
336
 
340
- if (matches) {
337
+ if (nodeMatches) {
341
338
  return true;
342
339
  }
343
340
  }) || null;
@@ -372,11 +369,11 @@ export default class FileContext {
372
369
  return conjecture;
373
370
  }
374
371
 
375
- findMetavariableByMetavariableName(metavariableName) {
376
- const name = metavariableName, ///
372
+ findMetavariableByMetavariableNode(metavariableNode) {
373
+ const node = metavariableNode, ///
377
374
  metavariables = this.getMetavariables(),
378
375
  metavariable = metavariables.find((metavariable) => {
379
- const matches = metavariable.matchName(name);
376
+ const matches = metavariable.matchNode(node);
380
377
 
381
378
  if (matches) {
382
379
  return true;
@@ -400,15 +397,15 @@ export default class FileContext {
400
397
  return typePresent;
401
398
  }
402
399
 
403
- isVariablePresentByVariableName(variableName) {
404
- const variable = this.findVariableByVariableName(variableName),
400
+ isVariablePresentByVariableNode(variableNode) {
401
+ const variable = this.findVariableByVariableNode(variableNode),
405
402
  variablePresent = (variable !== null);
406
403
 
407
404
  return variablePresent;
408
405
  }
409
406
 
410
- isMetavariablePresentByMetavariableName(metavariableName) {
411
- const metavariable = this.findMetavariableByMetavariableName(metavariableName),
407
+ isMetavariablePresentByMetavariableNode(metavariableNode) {
408
+ const metavariable = this.findMetavariableByMetavariableNode(metavariableNode),
412
409
  metavariablePresent = (metavariable !== null);
413
410
 
414
411
  return metavariablePresent;
@@ -453,18 +450,24 @@ export default class FileContext {
453
450
  }
454
451
 
455
452
  addVariable(variable) {
456
- const variableName = variable.getName();
453
+ let variableAdded = false;
457
454
 
458
- filter(this.variables, (variable) => {
459
- const name = variable.getName(),
460
- nameVariableName = (name === variableName);
455
+ const node = variable.getNode(),
456
+ variablePresent = this.variables.some((variable) => {
457
+ const nodeMatches = variable.matchNode(node);
461
458
 
462
- if (!nameVariableName) {
463
- return true;
464
- }
465
- });
459
+ if (nodeMatches) {
460
+ return true;
461
+ }
462
+ });
466
463
 
467
- this.variables.push(variable);
464
+ if (!variablePresent) {
465
+ this.variables.push(variable);
466
+
467
+ variableAdded = true;
468
+ }
469
+
470
+ return variableAdded;
468
471
  }
469
472
 
470
473
  addConjecture(conjecture) {
@@ -480,18 +483,24 @@ export default class FileContext {
480
483
  }
481
484
 
482
485
  addMetavariable(metavariable) {
483
- const metavariableName = metavariable.getName();
486
+ let metavariableAdded = false;
484
487
 
485
- filter(this.metavariables, (metavariable) => {
486
- const name = metavariable.getName(),
487
- nameMetavariableName = (name === metavariableName);
488
+ const node = metavariable.getNode(),
489
+ metavariablePresent = this.metavariables.some((metavariable) => {
490
+ const nodeMatches = metavariable.matchNode(node);
488
491
 
489
- if (!nameMetavariableName) {
490
- return true;
491
- }
492
- });
492
+ if (nodeMatches) {
493
+ return true;
494
+ }
495
+ });
496
+
497
+ if (!metavariablePresent) {
498
+ this.metavariables.push(metavariable);
499
+
500
+ metavariableAdded = true;
501
+ }
493
502
 
494
- this.metavariables.push(metavariable);
503
+ return metavariableAdded;
495
504
  }
496
505
 
497
506
  trace(message, node) { this.releaseContext.trace(message, node, this.tokens, this.filePath); }
@@ -620,7 +629,7 @@ export default class FileContext {
620
629
 
621
630
  typesJSON.forEach((typeJSON) => {
622
631
  const json = typeJSON, ///
623
- type = Type.fromJSONAndFileContext(json, fileContext);
632
+ type = typeFromJSONAndFileContext(json, fileContext);
624
633
 
625
634
  this.types.push(type);
626
635
  });