occam-verify-cli 1.0.662 → 1.0.664

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 (211) hide show
  1. package/.swcrc +3 -0
  2. package/lib/abbreviations.js +10 -10
  3. package/lib/action/help.js +27 -2
  4. package/lib/action/verify.js +33 -205
  5. package/lib/action/version.js +6 -6
  6. package/lib/commands.js +4 -4
  7. package/lib/constants.js +16 -16
  8. package/lib/context/ephemeral.js +337 -540
  9. package/lib/context/file/nominal.js +545 -1040
  10. package/lib/context/liminal.js +159 -325
  11. package/lib/context/literal.js +34 -138
  12. package/lib/context/nominal.js +29 -124
  13. package/lib/context/scoped.js +163 -325
  14. package/lib/context/synthetic.js +31 -126
  15. package/lib/context.js +230 -482
  16. package/lib/defaults.js +8 -8
  17. package/lib/element/assertion/contained.js +159 -299
  18. package/lib/element/assertion/defined.js +145 -279
  19. package/lib/element/assertion/property.js +132 -266
  20. package/lib/element/assertion/satisfies.js +108 -239
  21. package/lib/element/assertion/subproof.js +88 -207
  22. package/lib/element/assertion/type.js +132 -262
  23. package/lib/element/assertion.js +17 -156
  24. package/lib/element/assumption.js +187 -386
  25. package/lib/element/combinator/bracketed.js +19 -142
  26. package/lib/element/combinator.js +65 -228
  27. package/lib/element/conclusion.js +72 -370
  28. package/lib/element/constructor/bracketed.js +34 -157
  29. package/lib/element/constructor.js +81 -253
  30. package/lib/element/declaration/combinator.js +41 -286
  31. package/lib/element/declaration/complexType.js +184 -452
  32. package/lib/element/declaration/constructor.js +69 -323
  33. package/lib/element/declaration/metavariable.js +70 -317
  34. package/lib/element/declaration/simpleType.js +117 -378
  35. package/lib/element/declaration/typePrefix.js +54 -299
  36. package/lib/element/declaration/variable.js +74 -328
  37. package/lib/element/declaration.js +3 -114
  38. package/lib/element/deduction.js +76 -378
  39. package/lib/element/derivation.js +31 -340
  40. package/lib/element/equality.js +152 -347
  41. package/lib/element/equivalence.js +160 -385
  42. package/lib/element/equivalences.js +132 -356
  43. package/lib/element/error.js +16 -290
  44. package/lib/element/frame.js +210 -418
  45. package/lib/element/hypothesis.js +56 -354
  46. package/lib/element/judgement.js +120 -305
  47. package/lib/element/label.js +62 -236
  48. package/lib/element/metaType.js +35 -200
  49. package/lib/element/metavariable.js +249 -459
  50. package/lib/element/parameter.js +39 -202
  51. package/lib/element/procedureCall.js +74 -381
  52. package/lib/element/procedureReference.js +27 -186
  53. package/lib/element/proof.js +38 -349
  54. package/lib/element/proofAssertion/premise.js +174 -466
  55. package/lib/element/proofAssertion/step.js +144 -495
  56. package/lib/element/proofAssertion/supposition.js +170 -466
  57. package/lib/element/proofAssertion.js +47 -195
  58. package/lib/element/property.js +36 -201
  59. package/lib/element/propertyRelation.js +62 -223
  60. package/lib/element/reference.js +173 -378
  61. package/lib/element/rule.js +178 -673
  62. package/lib/element/section.js +47 -356
  63. package/lib/element/signature.js +96 -264
  64. package/lib/element/statement.js +195 -395
  65. package/lib/element/subDerivation.js +32 -341
  66. package/lib/element/subproof.js +73 -448
  67. package/lib/element/substitution/frame.js +114 -257
  68. package/lib/element/substitution/reference.js +108 -248
  69. package/lib/element/substitution/statement.js +223 -397
  70. package/lib/element/substitution/term.js +123 -266
  71. package/lib/element/substitution.js +97 -296
  72. package/lib/element/term.js +139 -339
  73. package/lib/element/topLevelAssertion/axiom.js +153 -459
  74. package/lib/element/topLevelAssertion/conjecture.js +24 -295
  75. package/lib/element/topLevelAssertion/lemma.js +22 -289
  76. package/lib/element/topLevelAssertion/theorem.js +24 -295
  77. package/lib/element/topLevelAssertion.js +218 -718
  78. package/lib/element/topLevelMetaAssertion/metaLemma.js +24 -290
  79. package/lib/element/topLevelMetaAssertion/metatheorem.js +24 -290
  80. package/lib/element/topLevelMetaAssertion.js +109 -509
  81. package/lib/element/type.js +198 -435
  82. package/lib/element/typePrefix.js +27 -186
  83. package/lib/element/variable.js +119 -308
  84. package/lib/elements.js +4 -4
  85. package/lib/index.js +4 -4
  86. package/lib/main.js +18 -18
  87. package/lib/messages.js +2 -2
  88. package/lib/metaTypeNames.js +4 -4
  89. package/lib/metaTypes.js +10 -10
  90. package/lib/node/argument.js +15 -109
  91. package/lib/node/assertion/contained.js +33 -130
  92. package/lib/node/assertion/defined.js +29 -123
  93. package/lib/node/assertion/property.js +18 -112
  94. package/lib/node/assertion/satisfies.js +14 -105
  95. package/lib/node/assertion/subproof.js +10 -98
  96. package/lib/node/assertion/type.js +14 -105
  97. package/lib/node/assertion.js +5 -89
  98. package/lib/node/assumption.js +12 -103
  99. package/lib/node/body/axiom.js +5 -89
  100. package/lib/node/body/conjecture.js +5 -89
  101. package/lib/node/body/lemma.js +5 -89
  102. package/lib/node/body/metaLemma.js +5 -89
  103. package/lib/node/body/metatheorem.js +5 -89
  104. package/lib/node/body/rule.js +26 -126
  105. package/lib/node/body/theorem.js +5 -89
  106. package/lib/node/body.js +15 -109
  107. package/lib/node/combinator.js +9 -97
  108. package/lib/node/conclusion.js +12 -103
  109. package/lib/node/constructor.js +9 -97
  110. package/lib/node/declaration/combinator.js +10 -98
  111. package/lib/node/declaration/complexType.js +53 -162
  112. package/lib/node/declaration/constructor.js +29 -123
  113. package/lib/node/declaration/metavariable.js +18 -112
  114. package/lib/node/declaration/property.js +26 -123
  115. package/lib/node/declaration/simpleType.js +52 -158
  116. package/lib/node/declaration/typePrefix.js +14 -105
  117. package/lib/node/declaration/variable.js +33 -130
  118. package/lib/node/declaration.js +5 -89
  119. package/lib/node/deduction.js +12 -103
  120. package/lib/node/derivation.js +12 -125
  121. package/lib/node/document.js +5 -89
  122. package/lib/node/equality.js +17 -111
  123. package/lib/node/equivalence.js +9 -97
  124. package/lib/node/equivalences.js +5 -89
  125. package/lib/node/error.js +5 -89
  126. package/lib/node/frame.js +26 -123
  127. package/lib/node/header/axiom.js +10 -98
  128. package/lib/node/header/conjecture.js +5 -89
  129. package/lib/node/header/lemma.js +5 -89
  130. package/lib/node/header/metaLemma.js +5 -89
  131. package/lib/node/header/metatheorem.js +5 -89
  132. package/lib/node/header/rule.js +5 -89
  133. package/lib/node/header/theorem.js +5 -89
  134. package/lib/node/header.js +30 -130
  135. package/lib/node/hypothesis.js +12 -103
  136. package/lib/node/judgement.js +15 -109
  137. package/lib/node/label.js +9 -97
  138. package/lib/node/labels.js +9 -97
  139. package/lib/node/metaArgument.js +9 -97
  140. package/lib/node/metaType.js +16 -104
  141. package/lib/node/metavariable.js +23 -117
  142. package/lib/node/parameter.js +32 -123
  143. package/lib/node/parenthesisedLabel.js +9 -97
  144. package/lib/node/parenthesisedLabels.js +12 -103
  145. package/lib/node/placeholder.js +5 -89
  146. package/lib/node/procedureCall.js +15 -109
  147. package/lib/node/procedureReference.js +16 -104
  148. package/lib/node/proof.js +9 -97
  149. package/lib/node/proofAssertion/premise.js +10 -98
  150. package/lib/node/proofAssertion/step.js +32 -132
  151. package/lib/node/proofAssertion/supposition.js +10 -98
  152. package/lib/node/proofAssertion.js +12 -103
  153. package/lib/node/property.js +15 -106
  154. package/lib/node/propertyRelation.js +15 -109
  155. package/lib/node/qualification.js +12 -103
  156. package/lib/node/reference.js +9 -97
  157. package/lib/node/rule.js +26 -129
  158. package/lib/node/section.js +22 -122
  159. package/lib/node/signature.js +9 -97
  160. package/lib/node/statement.js +93 -238
  161. package/lib/node/subDerivation.js +12 -125
  162. package/lib/node/subproof.js +18 -115
  163. package/lib/node/substitution/frame.js +22 -119
  164. package/lib/node/substitution/reference.js +22 -119
  165. package/lib/node/substitution/statement.js +42 -151
  166. package/lib/node/substitution/term.js +22 -119
  167. package/lib/node/substitution.js +5 -89
  168. package/lib/node/term.js +51 -160
  169. package/lib/node/topLevelAssertion/axiom.js +8 -105
  170. package/lib/node/topLevelAssertion/conjecture.js +8 -105
  171. package/lib/node/topLevelAssertion/lemma.js +8 -105
  172. package/lib/node/topLevelAssertion/theorem.js +8 -105
  173. package/lib/node/topLevelAssertion.js +29 -135
  174. package/lib/node/topLevelMetaAssertion/metaLemma.js +8 -105
  175. package/lib/node/topLevelMetaAssertion/metatheorem.js +8 -105
  176. package/lib/node/topLevelMetaAssertion.js +25 -128
  177. package/lib/node/type.js +43 -140
  178. package/lib/node/typePrefix.js +16 -104
  179. package/lib/node/types.js +9 -97
  180. package/lib/node/variable.js +16 -104
  181. package/lib/nominal/lexer.js +3 -68
  182. package/lib/nominal/parser.js +7 -85
  183. package/lib/nonTerminalNodeMap.js +171 -101
  184. package/lib/options.js +6 -6
  185. package/lib/preamble.js +62 -62
  186. package/lib/prepare.js +4 -4
  187. package/lib/process/assign.js +20 -20
  188. package/lib/process/equate.js +39 -117
  189. package/lib/process/instantiate.js +10 -9
  190. package/lib/process/unify.js +199 -325
  191. package/lib/process/validate.js +87 -195
  192. package/lib/process/verify.js +263 -786
  193. package/lib/ruleNames.js +84 -84
  194. package/lib/tokenTypes.js +3 -3
  195. package/lib/utilities/bnf.js +7 -7
  196. package/lib/utilities/brackets.js +18 -18
  197. package/lib/utilities/clock.js +8 -8
  198. package/lib/utilities/context.js +23 -191
  199. package/lib/utilities/element.js +276 -276
  200. package/lib/utilities/equivalence.js +7 -7
  201. package/lib/utilities/fileContext.js +9 -9
  202. package/lib/utilities/instance.js +14 -14
  203. package/lib/utilities/json.js +211 -211
  204. package/lib/utilities/releaseContext.js +19 -147
  205. package/lib/utilities/statement.js +10 -10
  206. package/lib/utilities/string.js +47 -47
  207. package/lib/utilities/substitutions.js +19 -19
  208. package/lib/utilities/type.js +5 -5
  209. package/lib/utilities/unification.js +196 -426
  210. package/lib/utilities/validation.js +72 -72
  211. package/package.json +1 -1
@@ -8,326 +8,141 @@ Object.defineProperty(exports, "default", {
8
8
  return _default;
9
9
  }
10
10
  });
11
- var _occamlanguages = require("occam-languages");
12
- var _elements = require("../elements");
13
- var _assign = require("../process/assign");
14
- function _assert_this_initialized(self) {
15
- if (self === void 0) {
16
- throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
11
+ const _occamlanguages = require("occam-languages");
12
+ const _elements = require("../elements");
13
+ const _assign = require("../process/assign");
14
+ const _default = (0, _elements.define)(class Judgement extends _occamlanguages.Element {
15
+ constructor(context, string, node, frame, assumption){
16
+ super(context, string, node);
17
+ this.frame = frame;
18
+ this.assumption = assumption;
17
19
  }
18
- return self;
19
- }
20
- function _call_super(_this, derived, args) {
21
- derived = _get_prototype_of(derived);
22
- return _possible_constructor_return(_this, _is_native_reflect_construct() ? Reflect.construct(derived, args || [], _get_prototype_of(_this).constructor) : derived.apply(_this, args));
23
- }
24
- function _class_call_check(instance, Constructor) {
25
- if (!(instance instanceof Constructor)) {
26
- throw new TypeError("Cannot call a class as a function");
20
+ getFrame() {
21
+ return this.frame;
27
22
  }
28
- }
29
- function _construct(Parent, args, Class) {
30
- if (_is_native_reflect_construct()) {
31
- _construct = Reflect.construct;
32
- } else {
33
- _construct = function construct(Parent, args, Class) {
34
- var a = [
35
- null
36
- ];
37
- a.push.apply(a, args);
38
- var Constructor = Function.bind.apply(Parent, a);
39
- var instance = new Constructor();
40
- if (Class) _set_prototype_of(instance, Class.prototype);
41
- return instance;
42
- };
23
+ getDeclaration() {
24
+ return this.assumption;
43
25
  }
44
- return _construct.apply(null, arguments);
45
- }
46
- function _defineProperties(target, props) {
47
- for(var i = 0; i < props.length; i++){
48
- var descriptor = props[i];
49
- descriptor.enumerable = descriptor.enumerable || false;
50
- descriptor.configurable = true;
51
- if ("value" in descriptor) descriptor.writable = true;
52
- Object.defineProperty(target, descriptor.key, descriptor);
26
+ getJudgementNode() {
27
+ const node = this.getNode(), judgementNode = node; ///
28
+ return judgementNode;
53
29
  }
54
- }
55
- function _create_class(Constructor, protoProps, staticProps) {
56
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
57
- if (staticProps) _defineProperties(Constructor, staticProps);
58
- return Constructor;
59
- }
60
- function _define_property(obj, key, value) {
61
- if (key in obj) {
62
- Object.defineProperty(obj, key, {
63
- value: value,
64
- enumerable: true,
65
- configurable: true,
66
- writable: true
67
- });
68
- } else {
69
- obj[key] = value;
30
+ isSingular() {
31
+ const judgementNode = this.getJudgementNode(), singular = judgementNode.isSingular();
32
+ return singular;
70
33
  }
71
- return obj;
72
- }
73
- function _get_prototype_of(o) {
74
- _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {
75
- return o.__proto__ || Object.getPrototypeOf(o);
76
- };
77
- return _get_prototype_of(o);
78
- }
79
- function _inherits(subClass, superClass) {
80
- if (typeof superClass !== "function" && superClass !== null) {
81
- throw new TypeError("Super expression must either be null or a function");
34
+ getMetavariable() {
35
+ return this.frame.getMetavariable();
82
36
  }
83
- subClass.prototype = Object.create(superClass && superClass.prototype, {
84
- constructor: {
85
- value: subClass,
86
- writable: true,
87
- configurable: true
88
- }
89
- });
90
- if (superClass) _set_prototype_of(subClass, superClass);
91
- }
92
- function _is_native_function(fn) {
93
- return Function.toString.call(fn).indexOf("[native code]") !== -1;
94
- }
95
- function _possible_constructor_return(self, call) {
96
- if (call && (_type_of(call) === "object" || typeof call === "function")) {
97
- return call;
37
+ compareMetavariableName(metavariableName) {
38
+ return this.frame.compareMetavariableName(metavariableName);
98
39
  }
99
- return _assert_this_initialized(self);
100
- }
101
- function _set_prototype_of(o, p) {
102
- _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {
103
- o.__proto__ = p;
104
- return o;
105
- };
106
- return _set_prototype_of(o, p);
107
- }
108
- function _type_of(obj) {
109
- "@swc/helpers - typeof";
110
- return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
111
- }
112
- function _wrap_native_super(Class) {
113
- var _cache = typeof Map === "function" ? new Map() : undefined;
114
- _wrap_native_super = function wrapNativeSuper(Class) {
115
- if (Class === null || !_is_native_function(Class)) return Class;
116
- if (typeof Class !== "function") {
117
- throw new TypeError("Super expression must either be null or a function");
118
- }
119
- if (typeof _cache !== "undefined") {
120
- if (_cache.has(Class)) return _cache.get(Class);
121
- _cache.set(Class, Wrapper);
122
- }
123
- function Wrapper() {
124
- return _construct(Class, arguments, _get_prototype_of(this).constructor);
125
- }
126
- Wrapper.prototype = Object.create(Class.prototype, {
127
- constructor: {
128
- value: Wrapper,
129
- enumerable: false,
130
- writable: true,
131
- configurable: true
132
- }
133
- });
134
- return _set_prototype_of(Wrapper, Class);
135
- };
136
- return _wrap_native_super(Class);
137
- }
138
- function _is_native_reflect_construct() {
139
- try {
140
- var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));
141
- } catch (_) {}
142
- return (_is_native_reflect_construct = function() {
143
- return !!result;
144
- })();
145
- }
146
- var _Judgement;
147
- var _default = (0, _elements.define)((_Judgement = /*#__PURE__*/ function(Element) {
148
- _inherits(Judgement, Element);
149
- function Judgement(context, string, node, frame, assumption) {
150
- _class_call_check(this, Judgement);
151
- var _this;
152
- _this = _call_super(this, Judgement, [
153
- context,
154
- string,
155
- node
156
- ]);
157
- _this.frame = frame;
158
- _this.assumption = assumption;
159
- return _this;
40
+ matchJudgementNode(judgementNode) {
41
+ const judgementNodeA = judgementNode; ///
42
+ judgementNode = this.getJudgementNode();
43
+ const judgementNodeB = judgementNode, judgementNodeAAMatchesJudgementBNodeB = judgementNodeA.match(judgementNodeB), judgementNodeMatches = judgementNodeAAMatchesJudgementBNodeB; ///
44
+ return judgementNodeMatches;
160
45
  }
161
- _create_class(Judgement, [
162
- {
163
- key: "getFrame",
164
- value: function getFrame() {
165
- return this.frame;
166
- }
167
- },
168
- {
169
- key: "getDeclaration",
170
- value: function getDeclaration() {
171
- return this.assumption;
172
- }
173
- },
174
- {
175
- key: "getJudgementNode",
176
- value: function getJudgementNode() {
177
- var node = this.getNode(), judgementNode = node; ///
178
- return judgementNode;
179
- }
180
- },
181
- {
182
- key: "isSingular",
183
- value: function isSingular() {
184
- var judgementNode = this.getJudgementNode(), singular = judgementNode.isSingular();
185
- return singular;
186
- }
187
- },
188
- {
189
- key: "getMetavariable",
190
- value: function getMetavariable() {
191
- return this.frame.getMetavariable();
192
- }
193
- },
194
- {
195
- key: "compareMetavariableName",
196
- value: function compareMetavariableName(metavariableName) {
197
- return this.frame.compareMetavariableName(metavariableName);
198
- }
199
- },
200
- {
201
- key: "matchJudgementNode",
202
- value: function matchJudgementNode(judgementNode) {
203
- var judgementNodeA = judgementNode; ///
204
- judgementNode = this.getJudgementNode();
205
- var judgementNodeB = judgementNode, judgementNodeAAMatchesJudgementBNodeB = judgementNodeA.match(judgementNodeB), judgementNodeMatches = judgementNodeAAMatchesJudgementBNodeB; ///
206
- return judgementNodeMatches;
207
- }
208
- },
209
- {
210
- key: "findValidJudgement",
211
- value: function findValidJudgement(context) {
212
- var judgementNode = this.getJudgementNode(), judgement = context.findJudgementByJudgementNode(judgementNode), validJudgemenet = judgement; ///
213
- return validJudgemenet;
214
- }
215
- },
216
- {
217
- key: "validate",
218
- value: function validate(stated, context) {
219
- var judgement = null;
220
- var judgementString = this.getString(); ///
221
- context.trace("Validating the '".concat(judgementString, "' judgement..."));
222
- var validJudgement = this.findValidJudgement(context);
223
- if (validJudgement !== null) {
224
- judgement = validJudgement; ///
225
- context.debug("...the '".concat(judgementString, "' judgement is already valid."));
226
- } else {
227
- var validates = false;
228
- var frameValidates = this.validateFrame(stated, context);
229
- if (frameValidates) {
230
- var assumptionValidates = this.validateAssumption(stated, context);
231
- if (assumptionValidates) {
232
- var validatesWhenStated = false, validatesWhenDerived = false;
233
- if (stated) {
234
- validatesWhenStated = this.validateWhenStated(context);
235
- } else {
236
- validatesWhenDerived = this.validateWhenDerived(context);
237
- }
238
- if (validatesWhenStated || validatesWhenDerived) {
239
- validates = true;
240
- }
241
- }
46
+ findValidJudgement(context) {
47
+ const judgementNode = this.getJudgementNode(), judgement = context.findJudgementByJudgementNode(judgementNode), validJudgemenet = judgement; ///
48
+ return validJudgemenet;
49
+ }
50
+ validate(stated, context) {
51
+ let judgement = null;
52
+ const judgementString = this.getString(); ///
53
+ context.trace(`Validating the '${judgementString}' judgement...`);
54
+ const validJudgement = this.findValidJudgement(context);
55
+ if (validJudgement !== null) {
56
+ judgement = validJudgement; ///
57
+ context.debug(`...the '${judgementString}' judgement is already valid.`);
58
+ } else {
59
+ let validates = false;
60
+ const frameValidates = this.validateFrame(stated, context);
61
+ if (frameValidates) {
62
+ const assumptionValidates = this.validateAssumption(stated, context);
63
+ if (assumptionValidates) {
64
+ let validatesWhenStated = false, validatesWhenDerived = false;
65
+ if (stated) {
66
+ validatesWhenStated = this.validateWhenStated(context);
67
+ } else {
68
+ validatesWhenDerived = this.validateWhenDerived(context);
242
69
  }
243
- if (validates) {
244
- judgement = this; ///
245
- context.addJudgement(judgement);
246
- context.debug("...validated the '".concat(judgementString, "' judgement."));
70
+ if (validatesWhenStated || validatesWhenDerived) {
71
+ validates = true;
247
72
  }
248
73
  }
249
- return judgement;
250
- }
251
- },
252
- {
253
- key: "validateFrame",
254
- value: function validateFrame(stated, context) {
255
- var frameValidates = false;
256
- var frameString = this.frame.getString(), judgementString = this.getString(); ///
257
- context.trace("Validating the '".concat(judgementString, "' judgement's '").concat(frameString, "' frame..."));
258
- var frame = this.frame.validate(stated, context);
259
- if (frame !== null) {
260
- this.frame = frame;
261
- frameValidates = true;
262
- }
263
- if (frameValidates) {
264
- context.trace("...validated the '".concat(judgementString, "' judgement's '").concat(frameString, "' frame."));
265
- }
266
- return frameValidates;
267
74
  }
268
- },
269
- {
270
- key: "validateAssumption",
271
- value: function validateAssumption(stated, context) {
272
- var assumptionValidates = false;
273
- var assumptionString = this.assumption.getString(), judgementString = this.getString(); ///
274
- context.trace("Validating the '".concat(judgementString, "' judgement's '").concat(assumptionString, "' assumption..."));
275
- var assumption = this.assumption.validate(stated, context);
276
- if (assumption !== null) {
277
- this.assumption = assumption;
278
- assumptionValidates = true;
279
- }
280
- if (assumptionValidates) {
281
- context.debug("...validated the '".concat(judgementString, "' judgement's '").concat(assumptionString, "' assumption."));
282
- }
283
- return assumptionValidates;
284
- }
285
- },
286
- {
287
- key: "validateWhenStated",
288
- value: function validateWhenStated(context) {
289
- var validatesWhenStated;
290
- var judgementString = this.getString(); ///
291
- context.trace("Validating the '".concat(judgementString, "' stated judgement..."));
292
- validatesWhenStated = true;
293
- if (validatesWhenStated) {
294
- context.debug("...validated the '".concat(judgementString, "' stated judgement."));
295
- }
296
- return validatesWhenStated;
297
- }
298
- },
299
- {
300
- key: "validateWhenDerived",
301
- value: function validateWhenDerived(context) {
302
- var validatesWhenDerived = false;
303
- var judgementString = this.getString(); ///
304
- context.trace("Validating the '".concat(judgementString, "' derived judgement..."));
305
- var metavariable = this.assumption.getMetavariable(), reference = referenceFromMetavariable(metavariable, context), topLevelMetaAssertion = context.findTopLevelMetaAssertionByReference(reference), substitutions = topLevelMetaAssertion.getSubstitutions(), frameComparesToSubstitutions = this.frame.compareSubstitutions(substitutions, context);
306
- if (frameComparesToSubstitutions) {
307
- validatesWhenDerived = true;
308
- }
309
- if (validatesWhenDerived) {
310
- context.debug("...validated the '".concat(judgementString, "' derived judgement."));
311
- }
312
- return validatesWhenDerived;
313
- }
314
- },
315
- {
316
- key: "assign",
317
- value: function assign(stated, context) {
318
- if (!stated) {
319
- return;
320
- }
321
- var judgement = this, judgementAssignment = (0, _assign.judgementAssignmentFromJudgement)(judgement, context), assignment = judgementAssignment; ///
322
- context.addAssignment(assignment);
75
+ if (validates) {
76
+ judgement = this; ///
77
+ context.addJudgement(judgement);
78
+ context.debug(`...validated the '${judgementString}' judgement.`);
323
79
  }
324
80
  }
325
- ]);
326
- return Judgement;
327
- }(_wrap_native_super(_occamlanguages.Element)), _define_property(_Judgement, "name", "Judgement"), _Judgement));
81
+ return judgement;
82
+ }
83
+ validateFrame(stated, context) {
84
+ let frameValidates = false;
85
+ const frameString = this.frame.getString(), judgementString = this.getString(); ///
86
+ context.trace(`Validating the '${judgementString}' judgement's '${frameString}' frame...`);
87
+ const frame = this.frame.validate(stated, context);
88
+ if (frame !== null) {
89
+ this.frame = frame;
90
+ frameValidates = true;
91
+ }
92
+ if (frameValidates) {
93
+ context.trace(`...validated the '${judgementString}' judgement's '${frameString}' frame.`);
94
+ }
95
+ return frameValidates;
96
+ }
97
+ validateAssumption(stated, context) {
98
+ let assumptionValidates = false;
99
+ const assumptionString = this.assumption.getString(), judgementString = this.getString(); ///
100
+ context.trace(`Validating the '${judgementString}' judgement's '${assumptionString}' assumption...`);
101
+ const assumption = this.assumption.validate(stated, context);
102
+ if (assumption !== null) {
103
+ this.assumption = assumption;
104
+ assumptionValidates = true;
105
+ }
106
+ if (assumptionValidates) {
107
+ context.debug(`...validated the '${judgementString}' judgement's '${assumptionString}' assumption.`);
108
+ }
109
+ return assumptionValidates;
110
+ }
111
+ validateWhenStated(context) {
112
+ let validatesWhenStated;
113
+ const judgementString = this.getString(); ///
114
+ context.trace(`Validating the '${judgementString}' stated judgement...`);
115
+ validatesWhenStated = true;
116
+ if (validatesWhenStated) {
117
+ context.debug(`...validated the '${judgementString}' stated judgement.`);
118
+ }
119
+ return validatesWhenStated;
120
+ }
121
+ validateWhenDerived(context) {
122
+ let validatesWhenDerived = false;
123
+ const judgementString = this.getString(); ///
124
+ context.trace(`Validating the '${judgementString}' derived judgement...`);
125
+ const metavariable = this.assumption.getMetavariable(), reference = referenceFromMetavariable(metavariable, context), topLevelMetaAssertion = context.findTopLevelMetaAssertionByReference(reference), substitutions = topLevelMetaAssertion.getSubstitutions(), frameComparesToSubstitutions = this.frame.compareSubstitutions(substitutions, context);
126
+ if (frameComparesToSubstitutions) {
127
+ validatesWhenDerived = true;
128
+ }
129
+ if (validatesWhenDerived) {
130
+ context.debug(`...validated the '${judgementString}' derived judgement.`);
131
+ }
132
+ return validatesWhenDerived;
133
+ }
134
+ assign(stated, context) {
135
+ if (!stated) {
136
+ return;
137
+ }
138
+ const judgement = this, judgementAssignment = (0, _assign.judgementAssignmentFromJudgement)(judgement, context), assignment = judgementAssignment; ///
139
+ context.addAssignment(assignment);
140
+ }
141
+ static name = "Judgement";
142
+ });
328
143
  function referenceFromMetavariable(metavariable, context) {
329
- var Reference = elements.Reference, metavariableNode = metavariable.getNode(), reference = Reference.fromMetavariableNode(metavariableNode, context);
144
+ const { Reference } = elements, metavariableNode = metavariable.getNode(), reference = Reference.fromMetavariableNode(metavariableNode, context);
330
145
  return reference;
331
146
  }
332
147
 
333
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2p1ZGdlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBqdWRnZW1lbnRBc3NpZ25tZW50RnJvbUp1ZGdlbWVudCB9IGZyb20gXCIuLi9wcm9jZXNzL2Fzc2lnblwiO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgSnVkZ2VtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgZnJhbWUsIGFzc3VtcHRpb24pIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUpO1xuXG4gICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIHRoaXMuYXNzdW1wdGlvbiA9IGFzc3VtcHRpb247XG4gIH1cblxuICBnZXRGcmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZTtcbiAgfVxuXG4gIGdldERlY2xhcmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmFzc3VtcHRpb247XG4gIH1cblxuICBnZXRKdWRnZW1lbnROb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBqdWRnZW1lbnROb2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4ganVkZ2VtZW50Tm9kZTtcbiAgfVxuXG4gIGlzU2luZ3VsYXIoKSB7XG4gICAgY29uc3QganVkZ2VtZW50Tm9kZSA9IHRoaXMuZ2V0SnVkZ2VtZW50Tm9kZSgpLFxuICAgICAgICAgIHNpbmd1bGFyID0ganVkZ2VtZW50Tm9kZS5pc1Npbmd1bGFyKCk7XG5cbiAgICByZXR1cm4gc2luZ3VsYXI7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7IHJldHVybiB0aGlzLmZyYW1lLmdldE1ldGF2YXJpYWJsZSgpOyB9XG5cbiAgY29tcGFyZU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSkgeyByZXR1cm4gdGhpcy5mcmFtZS5jb21wYXJlTWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTsgfVxuXG4gIG1hdGNoSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKSB7XG4gICAgY29uc3QganVkZ2VtZW50Tm9kZUEgPSBqdWRnZW1lbnROb2RlOyAvLy9cblxuICAgIGp1ZGdlbWVudE5vZGUgPSB0aGlzLmdldEp1ZGdlbWVudE5vZGUoKTtcblxuICAgIGNvbnN0IGp1ZGdlbWVudE5vZGVCID0ganVkZ2VtZW50Tm9kZSwgLy8vXG4gICAgICAgICAganVkZ2VtZW50Tm9kZUFBTWF0Y2hlc0p1ZGdlbWVudEJOb2RlQiA9IGp1ZGdlbWVudE5vZGVBLm1hdGNoKGp1ZGdlbWVudE5vZGVCKSxcbiAgICAgICAgICBqdWRnZW1lbnROb2RlTWF0Y2hlcyA9IGp1ZGdlbWVudE5vZGVBQU1hdGNoZXNKdWRnZW1lbnRCTm9kZUI7IC8vL1xuXG4gICAgcmV0dXJuIGp1ZGdlbWVudE5vZGVNYXRjaGVzO1xuICB9XG5cbiAgZmluZFZhbGlkSnVkZ2VtZW50KGNvbnRleHQpIHtcbiAgICBjb25zdCBqdWRnZW1lbnROb2RlID0gdGhpcy5nZXRKdWRnZW1lbnROb2RlKCksXG4gICAgICAgICAganVkZ2VtZW50ID0gY29udGV4dC5maW5kSnVkZ2VtZW50QnlKdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUpLFxuICAgICAgICAgIHZhbGlkSnVkZ2VtZW5ldCA9IGp1ZGdlbWVudDsgIC8vL1xuXG4gICAgcmV0dXJuIHZhbGlkSnVkZ2VtZW5ldDtcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlZCwgY29udGV4dCkge1xuICAgIGxldCBqdWRnZW1lbnQgPSBudWxsO1xuXG4gICAgY29uc3QganVkZ2VtZW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50Li4uYCk7XG5cbiAgICBjb25zdCB2YWxpZEp1ZGdlbWVudCA9IHRoaXMuZmluZFZhbGlkSnVkZ2VtZW50KGNvbnRleHQpO1xuXG4gICAgaWYgKHZhbGlkSnVkZ2VtZW50ICE9PSBudWxsKSB7XG4gICAgICBqdWRnZW1lbnQgPSB2YWxpZEp1ZGdlbWVudDsgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQgaXMgYWxyZWFkeSB2YWxpZC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBmcmFtZVZhbGlkYXRlcyA9IHRoaXMudmFsaWRhdGVGcmFtZShzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoZnJhbWVWYWxpZGF0ZXMpIHtcbiAgICAgICAgY29uc3QgYXNzdW1wdGlvblZhbGlkYXRlcyA9IHRoaXMudmFsaWRhdGVBc3N1bXB0aW9uKHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICAgICAgaWYgKGFzc3VtcHRpb25WYWxpZGF0ZXMpIHtcbiAgICAgICAgICBsZXQgdmFsaWRhdGVzV2hlblN0YXRlZCA9IGZhbHNlLFxuICAgICAgICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHN0YXRlZCkge1xuICAgICAgICAgICAgdmFsaWRhdGVzV2hlblN0YXRlZCA9IHRoaXMudmFsaWRhdGVXaGVuU3RhdGVkKGNvbnRleHQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHRoaXMudmFsaWRhdGVXaGVuRGVyaXZlZChjb250ZXh0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsaWRhdGVzV2hlblN0YXRlZCB8fCB2YWxpZGF0ZXNXaGVuRGVyaXZlZCkge1xuICAgICAgICAgICAgdmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICBqdWRnZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgICAgICBjb250ZXh0LmFkZEp1ZGdlbWVudChqdWRnZW1lbnQpXG5cbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGp1ZGdlbWVudDtcbiAgfVxuXG4gIHZhbGlkYXRlRnJhbWUoc3RhdGVkLCBjb250ZXh0KSB7XG4gICAgbGV0IGZyYW1lVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBmcmFtZVN0cmluZyA9IHRoaXMuZnJhbWUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAganVkZ2VtZW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQncyAnJHtmcmFtZVN0cmluZ30nIGZyYW1lLi4uYCk7XG5cbiAgICBjb25zdCBmcmFtZSA9IHRoaXMuZnJhbWUudmFsaWRhdGUoc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIGlmIChmcmFtZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuXG4gICAgICBmcmFtZVZhbGlkYXRlcyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGZyYW1lVmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LnRyYWNlKGAuLi52YWxpZGF0ZWQgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudCdzICcke2ZyYW1lU3RyaW5nfScgZnJhbWUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyYW1lVmFsaWRhdGVzO1xuICB9XG5cbiAgdmFsaWRhdGVBc3N1bXB0aW9uKHN0YXRlZCwgY29udGV4dCkge1xuICAgIGxldCBhc3N1bXB0aW9uVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBhc3N1bXB0aW9uU3RyaW5nID0gdGhpcy5hc3N1bXB0aW9uLmdldFN0cmluZygpLFxuICAgICAgICAgIGp1ZGdlbWVudFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50J3MgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24uLi5gKTtcblxuICAgIGNvbnN0IGFzc3VtcHRpb24gPSB0aGlzLmFzc3VtcHRpb24udmFsaWRhdGUoc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIGlmIChhc3N1bXB0aW9uICE9PSBudWxsKSB7XG4gICAgICB0aGlzLmFzc3VtcHRpb24gPSBhc3N1bXB0aW9uO1xuXG4gICAgICBhc3N1bXB0aW9uVmFsaWRhdGVzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoYXNzdW1wdGlvblZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQncyAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvblZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlV2hlblN0YXRlZChjb250ZXh0KSB7XG4gICAgbGV0IHZhbGlkYXRlc1doZW5TdGF0ZWQ7XG5cbiAgICBjb25zdCBqdWRnZW1lbnRTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBzdGF0ZWQganVkZ2VtZW50Li4uYCk7XG5cbiAgICB2YWxpZGF0ZXNXaGVuU3RhdGVkID0gdHJ1ZTtcblxuICAgIGlmICh2YWxpZGF0ZXNXaGVuU3RhdGVkKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIHN0YXRlZCBqdWRnZW1lbnQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlc1doZW5TdGF0ZWQ7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZXJpdmVkKGNvbnRleHQpIHtcbiAgICBsZXQgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IGp1ZGdlbWVudFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGRlcml2ZWQganVkZ2VtZW50Li4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGUgPSB0aGlzLmFzc3VtcHRpb24uZ2V0TWV0YXZhcmlhYmxlKCksXG4gICAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbU1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUsIGNvbnRleHQpLFxuICAgICAgICAgIHRvcExldmVsTWV0YUFzc2VydGlvbiA9IGNvbnRleHQuZmluZFRvcExldmVsTWV0YUFzc2VydGlvbkJ5UmVmZXJlbmNlKHJlZmVyZW5jZSksXG4gICAgICAgICAgc3Vic3RpdHV0aW9ucyA9IHRvcExldmVsTWV0YUFzc2VydGlvbi5nZXRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgZnJhbWVDb21wYXJlc1RvU3Vic3RpdHV0aW9ucyA9IHRoaXMuZnJhbWUuY29tcGFyZVN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucywgY29udGV4dCk7XG5cbiAgICBpZiAoZnJhbWVDb21wYXJlc1RvU3Vic3RpdHV0aW9ucykge1xuICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXNXaGVuRGVyaXZlZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBkZXJpdmVkIGp1ZGdlbWVudC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVzV2hlbkRlcml2ZWQ7XG4gIH1cblxuICBhc3NpZ24oc3RhdGVkLCBjb250ZXh0KSB7XG4gICAgaWYgKCFzdGF0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBqdWRnZW1lbnQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBqdWRnZW1lbnRBc3NpZ25tZW50ID0ganVkZ2VtZW50QXNzaWdubWVudEZyb21KdWRnZW1lbnQoanVkZ2VtZW50LCBjb250ZXh0KSxcbiAgICAgICAgICBhc3NpZ25tZW50ID0ganVkZ2VtZW50QXNzaWdubWVudDsgLy8vXG5cbiAgICBjb250ZXh0LmFkZEFzc2lnbm1lbnQoYXNzaWdubWVudCk7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiSnVkZ2VtZW50XCI7XG59KTtcblxuZnVuY3Rpb24gcmVmZXJlbmNlRnJvbU1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gbWV0YXZhcmlhYmxlLmdldE5vZGUoKSxcbiAgICAgICAgcmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbiJdLCJuYW1lcyI6WyJkZWZpbmUiLCJKdWRnZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImZyYW1lIiwiYXNzdW1wdGlvbiIsImdldEZyYW1lIiwiZ2V0RGVjbGFyYXRpb24iLCJnZXRKdWRnZW1lbnROb2RlIiwiZ2V0Tm9kZSIsImp1ZGdlbWVudE5vZGUiLCJpc1Npbmd1bGFyIiwic2luZ3VsYXIiLCJnZXRNZXRhdmFyaWFibGUiLCJjb21wYXJlTWV0YXZhcmlhYmxlTmFtZSIsIm1ldGF2YXJpYWJsZU5hbWUiLCJtYXRjaEp1ZGdlbWVudE5vZGUiLCJqdWRnZW1lbnROb2RlQSIsImp1ZGdlbWVudE5vZGVCIiwianVkZ2VtZW50Tm9kZUFBTWF0Y2hlc0p1ZGdlbWVudEJOb2RlQiIsIm1hdGNoIiwianVkZ2VtZW50Tm9kZU1hdGNoZXMiLCJmaW5kVmFsaWRKdWRnZW1lbnQiLCJqdWRnZW1lbnQiLCJmaW5kSnVkZ2VtZW50QnlKdWRnZW1lbnROb2RlIiwidmFsaWRKdWRnZW1lbmV0IiwidmFsaWRhdGUiLCJzdGF0ZWQiLCJqdWRnZW1lbnRTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInZhbGlkSnVkZ2VtZW50IiwiZGVidWciLCJ2YWxpZGF0ZXMiLCJmcmFtZVZhbGlkYXRlcyIsInZhbGlkYXRlRnJhbWUiLCJhc3N1bXB0aW9uVmFsaWRhdGVzIiwidmFsaWRhdGVBc3N1bXB0aW9uIiwidmFsaWRhdGVzV2hlblN0YXRlZCIsInZhbGlkYXRlc1doZW5EZXJpdmVkIiwidmFsaWRhdGVXaGVuU3RhdGVkIiwidmFsaWRhdGVXaGVuRGVyaXZlZCIsImFkZEp1ZGdlbWVudCIsImZyYW1lU3RyaW5nIiwiYXNzdW1wdGlvblN0cmluZyIsIm1ldGF2YXJpYWJsZSIsInJlZmVyZW5jZSIsInJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGUiLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb24iLCJmaW5kVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uQnlSZWZlcmVuY2UiLCJzdWJzdGl0dXRpb25zIiwiZ2V0U3Vic3RpdHV0aW9ucyIsImZyYW1lQ29tcGFyZXNUb1N1YnN0aXR1dGlvbnMiLCJjb21wYXJlU3Vic3RpdHV0aW9ucyIsImFzc2lnbiIsImp1ZGdlbWVudEFzc2lnbm1lbnQiLCJqdWRnZW1lbnRBc3NpZ25tZW50RnJvbUp1ZGdlbWVudCIsImFzc2lnbm1lbnQiLCJhZGRBc3NpZ25tZW50IiwiRWxlbWVudCIsIm5hbWUiLCJSZWZlcmVuY2UiLCJlbGVtZW50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
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2p1ZGdlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBqdWRnZW1lbnRBc3NpZ25tZW50RnJvbUp1ZGdlbWVudCB9IGZyb20gXCIuLi9wcm9jZXNzL2Fzc2lnblwiO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgSnVkZ2VtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgZnJhbWUsIGFzc3VtcHRpb24pIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUpO1xuXG4gICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIHRoaXMuYXNzdW1wdGlvbiA9IGFzc3VtcHRpb247XG4gIH1cblxuICBnZXRGcmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZTtcbiAgfVxuXG4gIGdldERlY2xhcmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmFzc3VtcHRpb247XG4gIH1cblxuICBnZXRKdWRnZW1lbnROb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBqdWRnZW1lbnROb2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4ganVkZ2VtZW50Tm9kZTtcbiAgfVxuXG4gIGlzU2luZ3VsYXIoKSB7XG4gICAgY29uc3QganVkZ2VtZW50Tm9kZSA9IHRoaXMuZ2V0SnVkZ2VtZW50Tm9kZSgpLFxuICAgICAgICAgIHNpbmd1bGFyID0ganVkZ2VtZW50Tm9kZS5pc1Npbmd1bGFyKCk7XG5cbiAgICByZXR1cm4gc2luZ3VsYXI7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7IHJldHVybiB0aGlzLmZyYW1lLmdldE1ldGF2YXJpYWJsZSgpOyB9XG5cbiAgY29tcGFyZU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSkgeyByZXR1cm4gdGhpcy5mcmFtZS5jb21wYXJlTWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTsgfVxuXG4gIG1hdGNoSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKSB7XG4gICAgY29uc3QganVkZ2VtZW50Tm9kZUEgPSBqdWRnZW1lbnROb2RlOyAvLy9cblxuICAgIGp1ZGdlbWVudE5vZGUgPSB0aGlzLmdldEp1ZGdlbWVudE5vZGUoKTtcblxuICAgIGNvbnN0IGp1ZGdlbWVudE5vZGVCID0ganVkZ2VtZW50Tm9kZSwgLy8vXG4gICAgICAgICAganVkZ2VtZW50Tm9kZUFBTWF0Y2hlc0p1ZGdlbWVudEJOb2RlQiA9IGp1ZGdlbWVudE5vZGVBLm1hdGNoKGp1ZGdlbWVudE5vZGVCKSxcbiAgICAgICAgICBqdWRnZW1lbnROb2RlTWF0Y2hlcyA9IGp1ZGdlbWVudE5vZGVBQU1hdGNoZXNKdWRnZW1lbnRCTm9kZUI7IC8vL1xuXG4gICAgcmV0dXJuIGp1ZGdlbWVudE5vZGVNYXRjaGVzO1xuICB9XG5cbiAgZmluZFZhbGlkSnVkZ2VtZW50KGNvbnRleHQpIHtcbiAgICBjb25zdCBqdWRnZW1lbnROb2RlID0gdGhpcy5nZXRKdWRnZW1lbnROb2RlKCksXG4gICAgICAgICAganVkZ2VtZW50ID0gY29udGV4dC5maW5kSnVkZ2VtZW50QnlKdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUpLFxuICAgICAgICAgIHZhbGlkSnVkZ2VtZW5ldCA9IGp1ZGdlbWVudDsgIC8vL1xuXG4gICAgcmV0dXJuIHZhbGlkSnVkZ2VtZW5ldDtcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlZCwgY29udGV4dCkge1xuICAgIGxldCBqdWRnZW1lbnQgPSBudWxsO1xuXG4gICAgY29uc3QganVkZ2VtZW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50Li4uYCk7XG5cbiAgICBjb25zdCB2YWxpZEp1ZGdlbWVudCA9IHRoaXMuZmluZFZhbGlkSnVkZ2VtZW50KGNvbnRleHQpO1xuXG4gICAgaWYgKHZhbGlkSnVkZ2VtZW50ICE9PSBudWxsKSB7XG4gICAgICBqdWRnZW1lbnQgPSB2YWxpZEp1ZGdlbWVudDsgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQgaXMgYWxyZWFkeSB2YWxpZC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBmcmFtZVZhbGlkYXRlcyA9IHRoaXMudmFsaWRhdGVGcmFtZShzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoZnJhbWVWYWxpZGF0ZXMpIHtcbiAgICAgICAgY29uc3QgYXNzdW1wdGlvblZhbGlkYXRlcyA9IHRoaXMudmFsaWRhdGVBc3N1bXB0aW9uKHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICAgICAgaWYgKGFzc3VtcHRpb25WYWxpZGF0ZXMpIHtcbiAgICAgICAgICBsZXQgdmFsaWRhdGVzV2hlblN0YXRlZCA9IGZhbHNlLFxuICAgICAgICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHN0YXRlZCkge1xuICAgICAgICAgICAgdmFsaWRhdGVzV2hlblN0YXRlZCA9IHRoaXMudmFsaWRhdGVXaGVuU3RhdGVkKGNvbnRleHQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHRoaXMudmFsaWRhdGVXaGVuRGVyaXZlZChjb250ZXh0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsaWRhdGVzV2hlblN0YXRlZCB8fCB2YWxpZGF0ZXNXaGVuRGVyaXZlZCkge1xuICAgICAgICAgICAgdmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICBqdWRnZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgICAgICBjb250ZXh0LmFkZEp1ZGdlbWVudChqdWRnZW1lbnQpXG5cbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGp1ZGdlbWVudDtcbiAgfVxuXG4gIHZhbGlkYXRlRnJhbWUoc3RhdGVkLCBjb250ZXh0KSB7XG4gICAgbGV0IGZyYW1lVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBmcmFtZVN0cmluZyA9IHRoaXMuZnJhbWUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAganVkZ2VtZW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQncyAnJHtmcmFtZVN0cmluZ30nIGZyYW1lLi4uYCk7XG5cbiAgICBjb25zdCBmcmFtZSA9IHRoaXMuZnJhbWUudmFsaWRhdGUoc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIGlmIChmcmFtZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuXG4gICAgICBmcmFtZVZhbGlkYXRlcyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGZyYW1lVmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LnRyYWNlKGAuLi52YWxpZGF0ZWQgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudCdzICcke2ZyYW1lU3RyaW5nfScgZnJhbWUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyYW1lVmFsaWRhdGVzO1xuICB9XG5cbiAgdmFsaWRhdGVBc3N1bXB0aW9uKHN0YXRlZCwgY29udGV4dCkge1xuICAgIGxldCBhc3N1bXB0aW9uVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBhc3N1bXB0aW9uU3RyaW5nID0gdGhpcy5hc3N1bXB0aW9uLmdldFN0cmluZygpLFxuICAgICAgICAgIGp1ZGdlbWVudFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50J3MgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24uLi5gKTtcblxuICAgIGNvbnN0IGFzc3VtcHRpb24gPSB0aGlzLmFzc3VtcHRpb24udmFsaWRhdGUoc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIGlmIChhc3N1bXB0aW9uICE9PSBudWxsKSB7XG4gICAgICB0aGlzLmFzc3VtcHRpb24gPSBhc3N1bXB0aW9uO1xuXG4gICAgICBhc3N1bXB0aW9uVmFsaWRhdGVzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoYXNzdW1wdGlvblZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQncyAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvblZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlV2hlblN0YXRlZChjb250ZXh0KSB7XG4gICAgbGV0IHZhbGlkYXRlc1doZW5TdGF0ZWQ7XG5cbiAgICBjb25zdCBqdWRnZW1lbnRTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBzdGF0ZWQganVkZ2VtZW50Li4uYCk7XG5cbiAgICB2YWxpZGF0ZXNXaGVuU3RhdGVkID0gdHJ1ZTtcblxuICAgIGlmICh2YWxpZGF0ZXNXaGVuU3RhdGVkKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIHN0YXRlZCBqdWRnZW1lbnQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlc1doZW5TdGF0ZWQ7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZXJpdmVkKGNvbnRleHQpIHtcbiAgICBsZXQgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IGp1ZGdlbWVudFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGRlcml2ZWQganVkZ2VtZW50Li4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGUgPSB0aGlzLmFzc3VtcHRpb24uZ2V0TWV0YXZhcmlhYmxlKCksXG4gICAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbU1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUsIGNvbnRleHQpLFxuICAgICAgICAgIHRvcExldmVsTWV0YUFzc2VydGlvbiA9IGNvbnRleHQuZmluZFRvcExldmVsTWV0YUFzc2VydGlvbkJ5UmVmZXJlbmNlKHJlZmVyZW5jZSksXG4gICAgICAgICAgc3Vic3RpdHV0aW9ucyA9IHRvcExldmVsTWV0YUFzc2VydGlvbi5nZXRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgZnJhbWVDb21wYXJlc1RvU3Vic3RpdHV0aW9ucyA9IHRoaXMuZnJhbWUuY29tcGFyZVN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucywgY29udGV4dCk7XG5cbiAgICBpZiAoZnJhbWVDb21wYXJlc1RvU3Vic3RpdHV0aW9ucykge1xuICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXNXaGVuRGVyaXZlZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBkZXJpdmVkIGp1ZGdlbWVudC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVzV2hlbkRlcml2ZWQ7XG4gIH1cblxuICBhc3NpZ24oc3RhdGVkLCBjb250ZXh0KSB7XG4gICAgaWYgKCFzdGF0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBqdWRnZW1lbnQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBqdWRnZW1lbnRBc3NpZ25tZW50ID0ganVkZ2VtZW50QXNzaWdubWVudEZyb21KdWRnZW1lbnQoanVkZ2VtZW50LCBjb250ZXh0KSxcbiAgICAgICAgICBhc3NpZ25tZW50ID0ganVkZ2VtZW50QXNzaWdubWVudDsgLy8vXG5cbiAgICBjb250ZXh0LmFkZEFzc2lnbm1lbnQoYXNzaWdubWVudCk7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiSnVkZ2VtZW50XCI7XG59KTtcblxuZnVuY3Rpb24gcmVmZXJlbmNlRnJvbU1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gbWV0YXZhcmlhYmxlLmdldE5vZGUoKSxcbiAgICAgICAgcmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbiJdLCJuYW1lcyI6WyJkZWZpbmUiLCJKdWRnZW1lbnQiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJmcmFtZSIsImFzc3VtcHRpb24iLCJnZXRGcmFtZSIsImdldERlY2xhcmF0aW9uIiwiZ2V0SnVkZ2VtZW50Tm9kZSIsImdldE5vZGUiLCJqdWRnZW1lbnROb2RlIiwiaXNTaW5ndWxhciIsInNpbmd1bGFyIiwiZ2V0TWV0YXZhcmlhYmxlIiwiY29tcGFyZU1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGVOYW1lIiwibWF0Y2hKdWRnZW1lbnROb2RlIiwianVkZ2VtZW50Tm9kZUEiLCJqdWRnZW1lbnROb2RlQiIsImp1ZGdlbWVudE5vZGVBQU1hdGNoZXNKdWRnZW1lbnRCTm9kZUIiLCJtYXRjaCIsImp1ZGdlbWVudE5vZGVNYXRjaGVzIiwiZmluZFZhbGlkSnVkZ2VtZW50IiwianVkZ2VtZW50IiwiZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZSIsInZhbGlkSnVkZ2VtZW5ldCIsInZhbGlkYXRlIiwic3RhdGVkIiwianVkZ2VtZW50U3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ2YWxpZEp1ZGdlbWVudCIsImRlYnVnIiwidmFsaWRhdGVzIiwiZnJhbWVWYWxpZGF0ZXMiLCJ2YWxpZGF0ZUZyYW1lIiwiYXNzdW1wdGlvblZhbGlkYXRlcyIsInZhbGlkYXRlQXNzdW1wdGlvbiIsInZhbGlkYXRlc1doZW5TdGF0ZWQiLCJ2YWxpZGF0ZXNXaGVuRGVyaXZlZCIsInZhbGlkYXRlV2hlblN0YXRlZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJhZGRKdWRnZW1lbnQiLCJmcmFtZVN0cmluZyIsImFzc3VtcHRpb25TdHJpbmciLCJtZXRhdmFyaWFibGUiLCJyZWZlcmVuY2UiLCJyZWZlcmVuY2VGcm9tTWV0YXZhcmlhYmxlIiwidG9wTGV2ZWxNZXRhQXNzZXJ0aW9uIiwiZmluZFRvcExldmVsTWV0YUFzc2VydGlvbkJ5UmVmZXJlbmNlIiwic3Vic3RpdHV0aW9ucyIsImdldFN1YnN0aXR1dGlvbnMiLCJmcmFtZUNvbXBhcmVzVG9TdWJzdGl0dXRpb25zIiwiY29tcGFyZVN1YnN0aXR1dGlvbnMiLCJhc3NpZ24iLCJqdWRnZW1lbnRBc3NpZ25tZW50IiwianVkZ2VtZW50QXNzaWdubWVudEZyb21KdWRnZW1lbnQiLCJhc3NpZ25tZW50IiwiYWRkQXNzaWdubWVudCIsIm5hbWUiLCJSZWZlcmVuY2UiLCJlbGVtZW50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