occam-verify-cli 0.0.1094 → 0.0.1096
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.
- package/lib/assertion/contained.js +21 -5
- package/lib/assertion/defined.js +11 -4
- package/lib/assertion/subproof.js +16 -10
- package/lib/axiom.js +4 -4
- package/lib/combinator/bracketed.js +5 -28
- package/lib/conclusion.js +7 -1
- package/lib/conjecture.js +4 -4
- package/lib/consequent.js +7 -1
- package/lib/constructor/bracketed.js +5 -28
- package/lib/context/bracketed/combinator.js +118 -0
- package/lib/context/bracketed/constructor.js +118 -0
- package/lib/context/bracketted.js +98 -0
- package/lib/context/file.js +44 -40
- package/lib/context/local.js +13 -13
- package/lib/declaration.js +122 -7
- package/lib/frame.js +26 -16
- package/lib/judgement.js +8 -23
- package/lib/label.js +8 -9
- package/lib/lemma.js +4 -4
- package/lib/metaLemma.js +41 -7
- package/lib/metatheorem.js +37 -2
- package/lib/metavariable.js +13 -13
- package/lib/mixins/statement/qualified/unify.js +2 -2
- package/lib/nodeAndTokens/metavariable.js +5 -6
- package/lib/nodeAndTokens/statement.js +7 -20
- package/lib/nodeAndTokens/substitution/frame.js +4 -5
- package/lib/nodeAndTokens/substitution/statement.js +4 -5
- package/lib/nodeAndTokens/substitution/term.js +4 -5
- package/lib/nodeAndTokens/term.js +5 -6
- package/lib/nodeAndTokens/variable.js +5 -6
- package/lib/premise.js +9 -3
- package/lib/reference.js +23 -9
- package/lib/rule.js +13 -7
- package/lib/statement/qualified.js +4 -3
- package/lib/statement/unqualified.js +29 -23
- package/lib/statement.js +9 -7
- package/lib/substitution/frame.js +2 -2
- package/lib/substitution/statement.js +4 -4
- package/lib/substitution/term.js +2 -2
- package/lib/substitutions.js +9 -2
- package/lib/topLevelAssertion.js +13 -25
- package/lib/unifier/equality.js +5 -5
- package/lib/unifier/label.js +146 -0
- package/lib/unifier/metaLevel.js +7 -7
- package/lib/unifier.js +4 -4
- package/lib/variable.js +8 -5
- package/package.json +1 -1
- package/src/assertion/contained.js +22 -6
- package/src/assertion/defined.js +11 -5
- package/src/assertion/subproof.js +17 -12
- package/src/axiom.js +3 -2
- package/src/combinator/bracketed.js +5 -41
- package/src/conclusion.js +2 -0
- package/src/conjecture.js +3 -2
- package/src/consequent.js +2 -0
- package/src/constructor/bracketed.js +5 -40
- package/src/context/bracketed/combinator.js +23 -0
- package/src/context/bracketed/constructor.js +23 -0
- package/src/context/bracketted.js +61 -0
- package/src/context/file.js +57 -48
- package/src/context/local.js +4 -4
- package/src/declaration.js +130 -6
- package/src/frame.js +30 -15
- package/src/judgement.js +7 -35
- package/src/label.js +3 -14
- package/src/lemma.js +3 -2
- package/src/metaLemma.js +60 -12
- package/src/metatheorem.js +56 -2
- package/src/metavariable.js +19 -13
- package/src/mixins/statement/qualified/unify.js +3 -1
- package/src/nodeAndTokens/metavariable.js +3 -7
- package/src/nodeAndTokens/statement.js +1 -13
- package/src/nodeAndTokens/substitution/frame.js +1 -6
- package/src/nodeAndTokens/substitution/statement.js +1 -6
- package/src/nodeAndTokens/substitution/term.js +1 -6
- package/src/nodeAndTokens/term.js +3 -7
- package/src/nodeAndTokens/variable.js +3 -7
- package/src/premise.js +15 -3
- package/src/reference.js +30 -19
- package/src/rule.js +7 -5
- package/src/statement/qualified.js +3 -3
- package/src/statement/unqualified.js +32 -30
- package/src/statement.js +9 -9
- package/src/substitution/frame.js +1 -2
- package/src/substitution/statement.js +3 -6
- package/src/substitution/term.js +1 -2
- package/src/substitutions.js +7 -1
- package/src/topLevelAssertion.js +10 -22
- package/src/unifier/equality.js +14 -16
- package/src/unifier/label.js +57 -0
- package/src/unifier/metaLevel.js +6 -6
- package/src/unifier.js +4 -4
- package/src/variable.js +13 -7
- package/lib/unifier/intrinsicLevel.js +0 -149
- package/src/unifier/intrinsicLevel.js +0 -61
package/lib/variable.js
CHANGED
|
@@ -167,7 +167,9 @@ var Variable = /*#__PURE__*/ function() {
|
|
|
167
167
|
{
|
|
168
168
|
key: "unifyTerm",
|
|
169
169
|
value: function unifyTerm(term, substitutions, generalContext, specificContext) {
|
|
170
|
+
var contextsReversed = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : false;
|
|
170
171
|
var termUnified = false;
|
|
172
|
+
var context = contextsReversed ? generalContext : specificContext;
|
|
171
173
|
var termString = term.getString(), variableString = this.string; ///
|
|
172
174
|
specificContext.trace("Unifying the '".concat(termString, "' term with the '").concat(variableString, "' variable..."));
|
|
173
175
|
var termNode = term.getNode(), variableName = this.name, substitution = substitutions.findSubstitutionByVariableName(variableName);
|
|
@@ -177,11 +179,12 @@ var Variable = /*#__PURE__*/ function() {
|
|
|
177
179
|
termUnified = true;
|
|
178
180
|
}
|
|
179
181
|
} else {
|
|
180
|
-
var variableNode = this.node, variable = variableFromVariableNode(variableNode, generalContext
|
|
182
|
+
var variableNode = this.node, _$generalContext = this.context, variable = variableFromVariableNode(variableNode, _$generalContext), termVariable = termVariableFromTermNode(termNode, _$generalContext);
|
|
181
183
|
if (variable !== null && variable === termVariable) {
|
|
182
184
|
termUnified = true;
|
|
183
185
|
} else {
|
|
184
|
-
var
|
|
186
|
+
var variable1 = this, termSubstitution = _term.default.fromTernAndVariable(term, variable1, context), substitution1 = termSubstitution; ///
|
|
187
|
+
context = specificContext; ///
|
|
185
188
|
substitutions.addSubstitution(substitution1, context);
|
|
186
189
|
termUnified = true;
|
|
187
190
|
}
|
|
@@ -258,11 +261,11 @@ Object.assign(_shim.default, {
|
|
|
258
261
|
Variable: Variable
|
|
259
262
|
});
|
|
260
263
|
var _default = Variable;
|
|
261
|
-
function variableFromVariableNode(variableNode, generalContext
|
|
264
|
+
function variableFromVariableNode(variableNode, generalContext) {
|
|
262
265
|
var variableName = (0, _name.variableNameFromVariableNode)(variableNode), context = generalContext, variable = context.findVariableByVariableName(variableName);
|
|
263
266
|
return variable;
|
|
264
267
|
}
|
|
265
|
-
function termVariableFromTermNode(termNode,
|
|
268
|
+
function termVariableFromTermNode(termNode, generalContext) {
|
|
266
269
|
var termVariable = null;
|
|
267
270
|
var termVariableNode = termVariableNodeQuery(termNode);
|
|
268
271
|
if (termVariableNode !== null) {
|
|
@@ -272,4 +275,4 @@ function termVariableFromTermNode(termNode, specificContext, generalContext) {
|
|
|
272
275
|
return termVariable;
|
|
273
276
|
}
|
|
274
277
|
|
|
275
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy92YXJpYWJsZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHNoaW0gZnJvbSBcIi4vc2hpbVwiO1xuaW1wb3J0IExvY2FsQ29udGV4dCBmcm9tIFwiLi9jb250ZXh0L2xvY2FsXCI7XG5pbXBvcnQgVGVybVN1YnN0aXR1dGlvbiBmcm9tIFwiLi9zdWJzdGl0dXRpb24vdGVybVwiO1xuXG5pbXBvcnQgeyBub2RlUXVlcnkgfSBmcm9tIFwiLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IG9iamVjdFR5cGUgfSBmcm9tIFwiLi90eXBlXCI7XG5pbXBvcnQgeyB2YXJpYWJsZU5hbWVGcm9tVmFyaWFibGVOb2RlfSBmcm9tIFwiLi91dGlsaXRpZXMvbmFtZVwiO1xuaW1wb3J0IHsgdHlwZUZyb21KU09OLCB0eXBlVG9UeXBlSlNPTiB9IGZyb20gXCIuL3V0aWxpdGllcy9qc29uXCI7XG5pbXBvcnQgeyB2YXJpYWJsZU5vZGVGcm9tVmFyaWFibGVTdHJpbmcgfSBmcm9tIFwiLi9ub2RlQW5kVG9rZW5zL3ZhcmlhYmxlXCI7XG5cbmNvbnN0IHR5cGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdmFyaWFibGVEZWNsYXJhdGlvbi90eXBlXCIpLFxuICAgICAgdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdmFyaWFibGVEZWNsYXJhdGlvbi92YXJpYWJsZVwiKSxcbiAgICAgIHRlcm1WYXJpYWJsZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90ZXJtL3ZhcmlhYmxlXCIpO1xuXG5jbGFzcyBWYXJpYWJsZSB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbmFtZSwgdHlwZSkge1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7IC8vL1xuICAgIHRoaXMuc3RyaW5nID0gc3RyaW5nO1xuICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICB9XG5cbiAgZ2V0TG9jYWxDb250ZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHQ7XG4gIH1cblxuICBnZXRTdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5nO1xuICB9XG5cbiAgZ2V0Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlO1xuICB9XG5cbiAgZ2V0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgc2V0VHlwZSh0eXBlKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgfVxuXG4gIG1hdGNoVmFyaWFibGVOYW1lKHZhcmlhYmxlTmFtZSkge1xuICAgIGNvbnN0IHZhcmlhYmxlTmFtZU1hdGNoZXMgPSAodGhpcy5uYW1lID09PSB2YXJpYWJsZU5hbWUpO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlTmFtZU1hdGNoZXM7XG4gIH1cblxuICBtYXRjaFZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCB2YXJpYWJsZU5vZGVNYXRjaGVzID0gdGhpcy5ub2RlLm1hdGNoKHZhcmlhYmxlTm9kZSk7XG5cbiAgICByZXR1cm4gdmFyaWFibGVOb2RlTWF0Y2hlcztcbiAgfVxuXG4gIHZlcmlmeShjb250ZXh0KSB7XG4gICAgbGV0IHZlcmlmaWVkO1xuXG4gICAgY29uc3QgdmFyaWFibGVTdHJpbmcgPSB0aGlzLnN0cmluZzsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3ZhcmlhYmxlU3RyaW5nfScgdmFyaWFibGUuLi5gKTtcblxuICAgIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRoaXMubm9kZSwgLy8vXG4gICAgICAgICAgdmFyaWFibGVOYW1lID0gdmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIHZhcmlhYmxlID0gY29udGV4dC5maW5kVmFyaWFibGVCeVZhcmlhYmxlTmFtZSh2YXJpYWJsZU5hbWUpO1xuXG4gICAgaWYgKHZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0eXBlID0gdmFyaWFibGUuZ2V0VHlwZSgpO1xuXG4gICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuXG4gICAgICB2ZXJpZmllZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHt2YXJpYWJsZVN0cmluZ30nIHZhcmlhYmxlIGlzIG5vdCBwcmVzZW50LmApO1xuICAgIH1cblxuICAgIGlmICh2ZXJpZmllZCkge1xuICAgICAgY29uc3QgdHlwZU5hbWUgPSB0aGlzLnR5cGUuZ2V0TmFtZSgpO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dmFyaWFibGVTdHJpbmd9OiR7dHlwZU5hbWV9JyB2YXJpYWJsZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZWQ7XG4gIH1cblxuICB2ZXJpZnlUeXBlKGZpbGVDb250ZXh0KSB7XG4gICAgbGV0IHR5cGVWZXJpZmllZDtcblxuICAgIGlmICh0aGlzLnR5cGUgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIHR5cGVWZXJpZmllZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHR5cGVOYW1lID0gdGhpcy50eXBlLmdldE5hbWUoKTtcblxuICAgICAgZmlsZUNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dHlwZU5hbWV9JyB0eXBlLi4uYCk7XG5cbiAgICAgIGNvbnN0IHR5cGUgPSBmaWxlQ29udGV4dC5maW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUpO1xuXG4gICAgICBpZiAodHlwZSA9PT0gbnVsbCkge1xuICAgICAgICBmaWxlQ29udGV4dC5kZWJ1ZyhgVGhlICcke3R5cGVOYW1lfScgdHlwZSBpcyBtaXNzaW5nLmApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTsgLy8vXG5cbiAgICAgICAgdHlwZVZlcmlmaWVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVWZXJpZmllZCkge1xuICAgICAgICBmaWxlQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3R5cGVOYW1lfScgdHlwZS5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZVZlcmlmaWVkO1xuICB9XG5cbiAgdmVyaWZ5V2hlbkRlY2xhcmVkKGZpbGVDb250ZXh0KSB7XG4gICAgbGV0IHZlcmlmaWVkQXRUb3BMZXZlbDtcblxuICAgIGNvbnN0IHZhcmlhYmxlU3RyaW5nID0gdGhpcy5zdHJpbmc7IC8vL1xuXG4gICAgZmlsZUNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dmFyaWFibGVTdHJpbmd9JyB2YXJpYWJsZSB3aGVuIGRlY2xhcmVkLi4uYCk7XG5cbiAgICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0aGlzLm5vZGUsIC8vL1xuICAgICAgICAgIHZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlTmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSxcbiAgICAgICAgICB2YXJpYWJsZVByZXNlbnQgPSBmaWxlQ29udGV4dC5pc1ZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVOYW1lKHZhcmlhYmxlTmFtZSk7XG5cbiAgICBpZiAodmFyaWFibGVQcmVzZW50KSB7XG4gICAgICBmaWxlQ29udGV4dC5kZWJ1ZyhgVGhlICcke3ZhcmlhYmxlU3RyaW5nfScgdmFyaWFibGUgaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0eXBlVmVyaWZpZWQgPSB0aGlzLnZlcmlmeVR5cGUoZmlsZUNvbnRleHQpO1xuXG4gICAgICB2ZXJpZmllZEF0VG9wTGV2ZWwgPSB0eXBlVmVyaWZpZWQ7ICAvLy9cbiAgICB9XG5cbiAgICBpZiAodmVyaWZpZWRBdFRvcExldmVsKSB7XG4gICAgICBmaWxlQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3ZhcmlhYmxlU3RyaW5nfScgdmFyaWFibGUgd2hlbiBkZWNsYXJlZC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZWRBdFRvcExldmVsO1xuICB9XG5cbiAgdW5pZnlUZXJtKHRlcm0sIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgICBsZXQgdGVybVVuaWZpZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpLFxuICAgICAgICAgIHZhcmlhYmxlU3RyaW5nID0gdGhpcy5zdHJpbmc7IC8vL1xuXG4gICAgc3BlY2lmaWNDb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gd2l0aCB0aGUgJyR7dmFyaWFibGVTdHJpbmd9JyB2YXJpYWJsZS4uLmApO1xuXG4gICAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgICB2YXJpYWJsZU5hbWUgPSB0aGlzLm5hbWUsIC8vL1xuICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbnMuZmluZFN1YnN0aXR1dGlvbkJ5VmFyaWFibGVOYW1lKHZhcmlhYmxlTmFtZSk7XG5cbiAgICBpZiAoc3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0ZXJtTm9kZU1hdGNoZXMgPSBzdWJzdGl0dXRpb24ubWF0Y2hUZXJtTm9kZSh0ZXJtTm9kZSk7XG5cbiAgICAgIGlmICh0ZXJtTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgdGVybVVuaWZpZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0aGlzLm5vZGUsICAvLy9cbiAgICAgICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCksXG4gICAgICAgICAgICB0ZXJtVmFyaWFibGUgPSB0ZXJtVmFyaWFibGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICBpZiAoKHZhcmlhYmxlICE9PSBudWxsKSAmJiAodmFyaWFibGUgPT09IHRlcm1WYXJpYWJsZSkpIHtcbiAgICAgICAgdGVybVVuaWZpZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICB2YXJpYWJsZSA9IHRoaXMsICAvLy9cbiAgICAgICAgICAgICAgdGVybVN1YnN0aXR1dGlvbiA9IFRlcm1TdWJzdGl0dXRpb24uZnJvbVRlcm5BbmRWYXJpYWJsZSh0ZXJtLCB2YXJpYWJsZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IHRlcm1TdWJzdGl0dXRpb247ICAvLy9cblxuICAgICAgICBzdWJzdGl0dXRpb25zLmFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24sIGNvbnRleHQpO1xuXG4gICAgICAgIHRlcm1VbmlmaWVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGVybVVuaWZpZWQpIHtcbiAgICAgIHNwZWNpZmljQ29udGV4dC50cmFjZShgLi4udW5pZmllZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gd2l0aCB0aGUgJyR7dmFyaWFibGVTdHJpbmd9JyB2YXJpYWJsZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVybVVuaWZpZWQ7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgdHlwZUpTT04gPSB0eXBlVG9UeXBlSlNPTih0aGlzLnR5cGUpLFxuICAgICAgICAgIHN0cmluZyA9IHRoaXMuc3RyaW5nLFxuICAgICAgICAgIHR5cGUgPSB0eXBlSlNPTiwgIC8vL1xuICAgICAgICAgIGpzb24gPSB7XG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgc3RyaW5nXG4gICAgICAgICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KSB7XG4gICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgbG9jYWxDb250ZXh0ID0gTG9jYWxDb250ZXh0LmZyb21GaWxlQ29udGV4dChmaWxlQ29udGV4dCksXG4gICAgICAgICAgY29udGV4dCA9IGxvY2FsQ29udGV4dCwgLy8vXG4gICAgICAgICAgdmFyaWFibGVTdHJpbmcgPSBzdHJpbmcsICAvLy9cbiAgICAgICAgICB2YXJpYWJsZU5vZGUgPSB2YXJpYWJsZU5vZGVGcm9tVmFyaWFibGVTdHJpbmcodmFyaWFibGVTdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgIHZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlTmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBub2RlID0gdmFyaWFibGVOb2RlLFxuICAgICAgICAgIG5hbWUgPSB2YXJpYWJsZU5hbWUsICAvLy9cbiAgICAgICAgICB0eXBlID0gdHlwZUZyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KSxcbiAgICAgICAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIG5hbWUsIHR5cGUpO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlO1xuICB9XG5cbiAgc3RhdGljIGZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICAgIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgICBjb25zdCB0ZXJtVmFyaWFibGVOb2RlID0gdGVybVZhcmlhYmxlTm9kZVF1ZXJ5KHRlcm1Ob2RlKTtcblxuICAgIGlmICh0ZXJtVmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0ZXJtVmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgICAgICB2YXJpYWJsZU5hbWUgPSB2YXJpYWJsZU5hbWVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgICBub2RlID0gdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgICAgIG5hbWUgPSB2YXJpYWJsZU5hbWUsICAvLy9cbiAgICAgICAgICAgIHR5cGUgPSBudWxsO1xuXG4gICAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIG5hbWUsIHR5cGUpO1xuICAgIH1cblxuICAgIHJldHVybiB2YXJpYWJsZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICAgIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBub2RlID0gdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgICAgICB2YXJpYWJsZU5hbWUgPSB2YXJpYWJsZU5hbWVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgICAgIG5hbWUgPSB2YXJpYWJsZU5hbWUsICAvLy9cbiAgICAgICAgICAgIHR5cGUgPSBudWxsO1xuXG4gICAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIG5hbWUsIHR5cGUpO1xuICAgIH1cblxuICAgIHJldHVybiB2YXJpYWJsZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVmFyaWFibGVOb2RlQW5kVHlwZSh2YXJpYWJsZU5vZGUsIHR5cGUsIGNvbnRleHQpIHtcbiAgICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gICAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICAgICAgdmFyaWFibGVOYW1lID0gdmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgICAgICBuYW1lID0gdmFyaWFibGVOYW1lOyAgLy8vXG5cbiAgICAgIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbmFtZSwgdHlwZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhcmlhYmxlO1xuICB9XG5cbiAgc3RhdGljIGZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgZmlsZUNvbnRleHQpIHtcbiAgICBjb25zdCB7IFR5cGUgfSA9IHNoaW0sXG4gICAgICAgICAgdHlwZU5vZGUgPSB0eXBlTm9kZVF1ZXJ5KHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKSxcbiAgICAgICAgICB2YXJpYWJsZU5vZGUgPSB2YXJpYWJsZU5vZGVRdWVyeSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSksXG4gICAgICAgICAgdmFyaWFibGVOYW1lID0gdmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIGNvbnRleHQgPSBMb2NhbENvbnRleHQuZnJvbUZpbGVDb250ZXh0KGZpbGVDb250ZXh0KSxcbiAgICAgICAgICB2YXJpYWJsZVN0cmluZyA9IGZpbGVDb250ZXh0Lm5vZGVBc1N0cmluZyh2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIHN0cmluZyA9IHZhcmlhYmxlU3RyaW5nLCAgLy8vXG4gICAgICAgICAgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICAgIG5hbWUgPSB2YXJpYWJsZU5hbWUsICAvLy9cbiAgICAgICAgICB0eXBlID0gVHlwZS5mcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbmFtZSwgdHlwZSk7XG5cbiAgICByZXR1cm4gdmFyaWFibGU7XG4gIH1cbn1cblxuT2JqZWN0LmFzc2lnbihzaGltLCB7XG4gIFZhcmlhYmxlXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgVmFyaWFibGU7XG5cbmZ1bmN0aW9uIHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOYW1lID0gdmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpLFxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQsIC8vL1xuICAgICAgICB2YXJpYWJsZSA9IGNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5hbWUodmFyaWFibGVOYW1lKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmZ1bmN0aW9uIHRlcm1WYXJpYWJsZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgc3BlY2lmaWNDb250ZXh0LCBnZW5lcmFsQ29udGV4dCkge1xuICBsZXQgdGVybVZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCB0ZXJtVmFyaWFibGVOb2RlID0gdGVybVZhcmlhYmxlTm9kZVF1ZXJ5KHRlcm1Ob2RlKTtcblxuICBpZiAodGVybVZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRlcm1WYXJpYWJsZU5hbWUgPSB2YXJpYWJsZU5hbWVGcm9tVmFyaWFibGVOb2RlKHRlcm1WYXJpYWJsZU5vZGUpLFxuICAgICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICB0ZXJtVmFyaWFibGUgPSBjb250ZXh0LmZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOYW1lKHRlcm1WYXJpYWJsZU5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1WYXJpYWJsZTtcbn1cbiJdLCJuYW1lcyI6WyJ0eXBlTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwidmFyaWFibGVOb2RlUXVlcnkiLCJ0ZXJtVmFyaWFibGVOb2RlUXVlcnkiLCJWYXJpYWJsZSIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwibmFtZSIsInR5cGUiLCJnZXRMb2NhbENvbnRleHQiLCJnZXRTdHJpbmciLCJnZXROb2RlIiwiZ2V0TmFtZSIsImdldFR5cGUiLCJzZXRUeXBlIiwibWF0Y2hWYXJpYWJsZU5hbWUiLCJ2YXJpYWJsZU5hbWUiLCJ2YXJpYWJsZU5hbWVNYXRjaGVzIiwibWF0Y2hWYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGVNYXRjaGVzIiwibWF0Y2giLCJ2ZXJpZnkiLCJ2ZXJpZmllZCIsInZhcmlhYmxlU3RyaW5nIiwidHJhY2UiLCJ2YXJpYWJsZU5hbWVGcm9tVmFyaWFibGVOb2RlIiwidmFyaWFibGUiLCJmaW5kVmFyaWFibGVCeVZhcmlhYmxlTmFtZSIsImRlYnVnIiwidHlwZU5hbWUiLCJ2ZXJpZnlUeXBlIiwiZmlsZUNvbnRleHQiLCJ0eXBlVmVyaWZpZWQiLCJvYmplY3RUeXBlIiwiZmluZFR5cGVCeVR5cGVOYW1lIiwidmVyaWZ5V2hlbkRlY2xhcmVkIiwidmVyaWZpZWRBdFRvcExldmVsIiwidmFyaWFibGVQcmVzZW50IiwiaXNWYXJpYWJsZVByZXNlbnRCeVZhcmlhYmxlTmFtZSIsInVuaWZ5VGVybSIsInRlcm0iLCJzdWJzdGl0dXRpb25zIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJ0ZXJtVW5pZmllZCIsInRlcm1TdHJpbmciLCJ0ZXJtTm9kZSIsInN1YnN0aXR1dGlvbiIsImZpbmRTdWJzdGl0dXRpb25CeVZhcmlhYmxlTmFtZSIsInRlcm1Ob2RlTWF0Y2hlcyIsIm1hdGNoVGVybU5vZGUiLCJ2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUiLCJ0ZXJtVmFyaWFibGUiLCJ0ZXJtVmFyaWFibGVGcm9tVGVybU5vZGUiLCJ0ZXJtU3Vic3RpdHV0aW9uIiwiVGVybVN1YnN0aXR1dGlvbiIsImZyb21UZXJuQW5kVmFyaWFibGUiLCJhZGRTdWJzdGl0dXRpb24iLCJ0b0pTT04iLCJ0eXBlSlNPTiIsInR5cGVUb1R5cGVKU09OIiwianNvbiIsImZyb21KU09OIiwibG9jYWxDb250ZXh0IiwiTG9jYWxDb250ZXh0IiwiZnJvbUZpbGVDb250ZXh0IiwidmFyaWFibGVOb2RlRnJvbVZhcmlhYmxlU3RyaW5nIiwidHlwZUZyb21KU09OIiwiZnJvbVRlcm1Ob2RlIiwidGVybVZhcmlhYmxlTm9kZSIsIm5vZGVBc1N0cmluZyIsImZyb21WYXJpYWJsZU5vZGUiLCJmcm9tVmFyaWFibGVOb2RlQW5kVHlwZSIsImZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwiVHlwZSIsInNoaW0iLCJ0eXBlTm9kZSIsImZyb21UeXBlTm9kZSIsIk9iamVjdCIsImFzc2lnbiIsInRlcm1WYXJpYWJsZU5hbWUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQStSQTs7O2VBQUE7OzsyREE3UmlCOzREQUNROzJEQUNJO3FCQUVIO29CQUNDO29CQUNpQjtvQkFDQzt3QkFDRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUUvQyxJQUFNQSxnQkFBZ0JDLElBQUFBLGdCQUFTLEVBQUMsOEJBQzFCQyxvQkFBb0JELElBQUFBLGdCQUFTLEVBQUMsa0NBQzlCRSx3QkFBd0JGLElBQUFBLGdCQUFTLEVBQUM7QUFFeEMsSUFBQSxBQUFNRyx5QkFBTjthQUFNQSxTQUNRQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxJQUFJLEVBQUVDLElBQUk7Z0NBRHpDTDtRQUVGLElBQUksQ0FBQ0MsT0FBTyxHQUFHQSxTQUFTLEdBQUc7UUFDM0IsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFDQyxJ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
|
|
278
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy92YXJpYWJsZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHNoaW0gZnJvbSBcIi4vc2hpbVwiO1xuaW1wb3J0IExvY2FsQ29udGV4dCBmcm9tIFwiLi9jb250ZXh0L2xvY2FsXCI7XG5pbXBvcnQgVGVybVN1YnN0aXR1dGlvbiBmcm9tIFwiLi9zdWJzdGl0dXRpb24vdGVybVwiO1xuXG5pbXBvcnQgeyBub2RlUXVlcnkgfSBmcm9tIFwiLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IG9iamVjdFR5cGUgfSBmcm9tIFwiLi90eXBlXCI7XG5pbXBvcnQgeyB2YXJpYWJsZU5hbWVGcm9tVmFyaWFibGVOb2RlfSBmcm9tIFwiLi91dGlsaXRpZXMvbmFtZVwiO1xuaW1wb3J0IHsgdHlwZUZyb21KU09OLCB0eXBlVG9UeXBlSlNPTiB9IGZyb20gXCIuL3V0aWxpdGllcy9qc29uXCI7XG5pbXBvcnQgeyB2YXJpYWJsZU5vZGVGcm9tVmFyaWFibGVTdHJpbmcgfSBmcm9tIFwiLi9ub2RlQW5kVG9rZW5zL3ZhcmlhYmxlXCI7XG5cbmNvbnN0IHR5cGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdmFyaWFibGVEZWNsYXJhdGlvbi90eXBlXCIpLFxuICAgICAgdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdmFyaWFibGVEZWNsYXJhdGlvbi92YXJpYWJsZVwiKSxcbiAgICAgIHRlcm1WYXJpYWJsZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90ZXJtL3ZhcmlhYmxlXCIpO1xuXG5jbGFzcyBWYXJpYWJsZSB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbmFtZSwgdHlwZSkge1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7IC8vL1xuICAgIHRoaXMuc3RyaW5nID0gc3RyaW5nO1xuICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICB9XG5cbiAgZ2V0TG9jYWxDb250ZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHQ7XG4gIH1cblxuICBnZXRTdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5nO1xuICB9XG5cbiAgZ2V0Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlO1xuICB9XG5cbiAgZ2V0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgc2V0VHlwZSh0eXBlKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgfVxuXG4gIG1hdGNoVmFyaWFibGVOYW1lKHZhcmlhYmxlTmFtZSkge1xuICAgIGNvbnN0IHZhcmlhYmxlTmFtZU1hdGNoZXMgPSAodGhpcy5uYW1lID09PSB2YXJpYWJsZU5hbWUpO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlTmFtZU1hdGNoZXM7XG4gIH1cblxuICBtYXRjaFZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCB2YXJpYWJsZU5vZGVNYXRjaGVzID0gdGhpcy5ub2RlLm1hdGNoKHZhcmlhYmxlTm9kZSk7XG5cbiAgICByZXR1cm4gdmFyaWFibGVOb2RlTWF0Y2hlcztcbiAgfVxuXG4gIHZlcmlmeShjb250ZXh0KSB7XG4gICAgbGV0IHZlcmlmaWVkO1xuXG4gICAgY29uc3QgdmFyaWFibGVTdHJpbmcgPSB0aGlzLnN0cmluZzsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3ZhcmlhYmxlU3RyaW5nfScgdmFyaWFibGUuLi5gKTtcblxuICAgIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRoaXMubm9kZSwgLy8vXG4gICAgICAgICAgdmFyaWFibGVOYW1lID0gdmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIHZhcmlhYmxlID0gY29udGV4dC5maW5kVmFyaWFibGVCeVZhcmlhYmxlTmFtZSh2YXJpYWJsZU5hbWUpO1xuXG4gICAgaWYgKHZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0eXBlID0gdmFyaWFibGUuZ2V0VHlwZSgpO1xuXG4gICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuXG4gICAgICB2ZXJpZmllZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHt2YXJpYWJsZVN0cmluZ30nIHZhcmlhYmxlIGlzIG5vdCBwcmVzZW50LmApO1xuICAgIH1cblxuICAgIGlmICh2ZXJpZmllZCkge1xuICAgICAgY29uc3QgdHlwZU5hbWUgPSB0aGlzLnR5cGUuZ2V0TmFtZSgpO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dmFyaWFibGVTdHJpbmd9OiR7dHlwZU5hbWV9JyB2YXJpYWJsZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZWQ7XG4gIH1cblxuICB2ZXJpZnlUeXBlKGZpbGVDb250ZXh0KSB7XG4gICAgbGV0IHR5cGVWZXJpZmllZDtcblxuICAgIGlmICh0aGlzLnR5cGUgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIHR5cGVWZXJpZmllZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHR5cGVOYW1lID0gdGhpcy50eXBlLmdldE5hbWUoKTtcblxuICAgICAgZmlsZUNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dHlwZU5hbWV9JyB0eXBlLi4uYCk7XG5cbiAgICAgIGNvbnN0IHR5cGUgPSBmaWxlQ29udGV4dC5maW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUpO1xuXG4gICAgICBpZiAodHlwZSA9PT0gbnVsbCkge1xuICAgICAgICBmaWxlQ29udGV4dC5kZWJ1ZyhgVGhlICcke3R5cGVOYW1lfScgdHlwZSBpcyBtaXNzaW5nLmApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTsgLy8vXG5cbiAgICAgICAgdHlwZVZlcmlmaWVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVWZXJpZmllZCkge1xuICAgICAgICBmaWxlQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3R5cGVOYW1lfScgdHlwZS5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZVZlcmlmaWVkO1xuICB9XG5cbiAgdmVyaWZ5V2hlbkRlY2xhcmVkKGZpbGVDb250ZXh0KSB7XG4gICAgbGV0IHZlcmlmaWVkQXRUb3BMZXZlbDtcblxuICAgIGNvbnN0IHZhcmlhYmxlU3RyaW5nID0gdGhpcy5zdHJpbmc7IC8vL1xuXG4gICAgZmlsZUNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dmFyaWFibGVTdHJpbmd9JyB2YXJpYWJsZSB3aGVuIGRlY2xhcmVkLi4uYCk7XG5cbiAgICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0aGlzLm5vZGUsIC8vL1xuICAgICAgICAgIHZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlTmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSxcbiAgICAgICAgICB2YXJpYWJsZVByZXNlbnQgPSBmaWxlQ29udGV4dC5pc1ZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVOYW1lKHZhcmlhYmxlTmFtZSk7XG5cbiAgICBpZiAodmFyaWFibGVQcmVzZW50KSB7XG4gICAgICBmaWxlQ29udGV4dC5kZWJ1ZyhgVGhlICcke3ZhcmlhYmxlU3RyaW5nfScgdmFyaWFibGUgaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0eXBlVmVyaWZpZWQgPSB0aGlzLnZlcmlmeVR5cGUoZmlsZUNvbnRleHQpO1xuXG4gICAgICB2ZXJpZmllZEF0VG9wTGV2ZWwgPSB0eXBlVmVyaWZpZWQ7ICAvLy9cbiAgICB9XG5cbiAgICBpZiAodmVyaWZpZWRBdFRvcExldmVsKSB7XG4gICAgICBmaWxlQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3ZhcmlhYmxlU3RyaW5nfScgdmFyaWFibGUgd2hlbiBkZWNsYXJlZC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZWRBdFRvcExldmVsO1xuICB9XG5cbiAgdW5pZnlUZXJtKHRlcm0sIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRleHRzUmV2ZXJzZWQgPSBmYWxzZSkge1xuICAgIGxldCB0ZXJtVW5pZmllZCA9IGZhbHNlO1xuXG4gICAgbGV0IGNvbnRleHQgPSBjb250ZXh0c1JldmVyc2VkID9cbiAgICAgICAgICAgICAgICAgICAgZ2VuZXJhbENvbnRleHQgOlxuICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dDtcblxuICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpLFxuICAgICAgICAgIHZhcmlhYmxlU3RyaW5nID0gdGhpcy5zdHJpbmc7IC8vL1xuXG4gICAgc3BlY2lmaWNDb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gd2l0aCB0aGUgJyR7dmFyaWFibGVTdHJpbmd9JyB2YXJpYWJsZS4uLmApO1xuXG4gICAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgICB2YXJpYWJsZU5hbWUgPSB0aGlzLm5hbWUsIC8vL1xuICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbnMuZmluZFN1YnN0aXR1dGlvbkJ5VmFyaWFibGVOYW1lKHZhcmlhYmxlTmFtZSk7XG5cbiAgICBpZiAoc3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0ZXJtTm9kZU1hdGNoZXMgPSBzdWJzdGl0dXRpb24ubWF0Y2hUZXJtTm9kZSh0ZXJtTm9kZSk7XG5cbiAgICAgIGlmICh0ZXJtTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgdGVybVVuaWZpZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0aGlzLm5vZGUsICAvLy9cbiAgICAgICAgICAgIGdlbmVyYWxDb250ZXh0ID0gdGhpcy5jb250ZXh0LCAgLy8vXG4gICAgICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGdlbmVyYWxDb250ZXh0KSxcbiAgICAgICAgICAgIHRlcm1WYXJpYWJsZSA9IHRlcm1WYXJpYWJsZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQpO1xuXG4gICAgICBpZiAoKHZhcmlhYmxlICE9PSBudWxsKSAmJiAodmFyaWFibGUgPT09IHRlcm1WYXJpYWJsZSkpIHtcbiAgICAgICAgdGVybVVuaWZpZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdmFyaWFibGUgPSB0aGlzLCAgLy8vXG4gICAgICAgICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSBUZXJtU3Vic3RpdHV0aW9uLmZyb21UZXJuQW5kVmFyaWFibGUodGVybSwgdmFyaWFibGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBzdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uOyAgLy8vXG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIHN1YnN0aXR1dGlvbnMuYWRkU3Vic3RpdHV0aW9uKHN1YnN0aXR1dGlvbiwgY29udGV4dCk7XG5cbiAgICAgICAgdGVybVVuaWZpZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0ZXJtVW5pZmllZCkge1xuICAgICAgc3BlY2lmaWNDb250ZXh0LnRyYWNlKGAuLi51bmlmaWVkIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSB3aXRoIHRoZSAnJHt2YXJpYWJsZVN0cmluZ30nIHZhcmlhYmxlLmApO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXJtVW5pZmllZDtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCB0eXBlSlNPTiA9IHR5cGVUb1R5cGVKU09OKHRoaXMudHlwZSksXG4gICAgICAgICAgc3RyaW5nID0gdGhpcy5zdHJpbmcsXG4gICAgICAgICAgdHlwZSA9IHR5cGVKU09OLCAgLy8vXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBzdHJpbmdcbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpIHtcbiAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICBsb2NhbENvbnRleHQgPSBMb2NhbENvbnRleHQuZnJvbUZpbGVDb250ZXh0KGZpbGVDb250ZXh0KSxcbiAgICAgICAgICBjb250ZXh0ID0gbG9jYWxDb250ZXh0LCAvLy9cbiAgICAgICAgICB2YXJpYWJsZVN0cmluZyA9IHN0cmluZywgIC8vL1xuICAgICAgICAgIHZhcmlhYmxlTm9kZSA9IHZhcmlhYmxlTm9kZUZyb21WYXJpYWJsZVN0cmluZyh2YXJpYWJsZVN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgdmFyaWFibGVOYW1lID0gdmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIG5vZGUgPSB2YXJpYWJsZU5vZGUsXG4gICAgICAgICAgbmFtZSA9IHZhcmlhYmxlTmFtZSwgIC8vL1xuICAgICAgICAgIHR5cGUgPSB0eXBlRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpLFxuICAgICAgICAgIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbmFtZSwgdHlwZSk7XG5cbiAgICByZXR1cm4gdmFyaWFibGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gICAgbGV0IHZhcmlhYmxlID0gbnVsbDtcblxuICAgIGNvbnN0IHRlcm1WYXJpYWJsZU5vZGUgPSB0ZXJtVmFyaWFibGVOb2RlUXVlcnkodGVybU5vZGUpO1xuXG4gICAgaWYgKHRlcm1WYXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRlcm1WYXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgICAgIHZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlTmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSxcbiAgICAgICAgICAgIG5vZGUgPSB2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICAgICAgbmFtZSA9IHZhcmlhYmxlTmFtZSwgIC8vL1xuICAgICAgICAgICAgdHlwZSA9IG51bGw7XG5cbiAgICAgIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbmFtZSwgdHlwZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhcmlhYmxlO1xuICB9XG5cbiAgc3RhdGljIGZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gICAgbGV0IHZhcmlhYmxlID0gbnVsbDtcblxuICAgIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSB2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgICAgIHZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlTmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSxcbiAgICAgICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICAgICAgbmFtZSA9IHZhcmlhYmxlTmFtZSwgIC8vL1xuICAgICAgICAgICAgdHlwZSA9IG51bGw7XG5cbiAgICAgIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbmFtZSwgdHlwZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhcmlhYmxlO1xuICB9XG5cbiAgc3RhdGljIGZyb21WYXJpYWJsZU5vZGVBbmRUeXBlKHZhcmlhYmxlTm9kZSwgdHlwZSwgY29udGV4dCkge1xuICAgIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBub2RlID0gdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgICAgICB2YXJpYWJsZU5hbWUgPSB2YXJpYWJsZU5hbWVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgICAgIG5hbWUgPSB2YXJpYWJsZU5hbWU7ICAvLy9cblxuICAgICAgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBuYW1lLCB0eXBlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFyaWFibGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBmaWxlQ29udGV4dCkge1xuICAgIGNvbnN0IHsgVHlwZSB9ID0gc2hpbSxcbiAgICAgICAgICB0eXBlTm9kZSA9IHR5cGVOb2RlUXVlcnkodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUpLFxuICAgICAgICAgIHZhcmlhYmxlTm9kZSA9IHZhcmlhYmxlTm9kZVF1ZXJ5KHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKSxcbiAgICAgICAgICB2YXJpYWJsZU5hbWUgPSB2YXJpYWJsZU5hbWVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgY29udGV4dCA9IExvY2FsQ29udGV4dC5mcm9tRmlsZUNvbnRleHQoZmlsZUNvbnRleHQpLFxuICAgICAgICAgIHZhcmlhYmxlU3RyaW5nID0gZmlsZUNvbnRleHQubm9kZUFzU3RyaW5nKHZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgc3RyaW5nID0gdmFyaWFibGVTdHJpbmcsICAvLy9cbiAgICAgICAgICBub2RlID0gdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgICAgbmFtZSA9IHZhcmlhYmxlTmFtZSwgIC8vL1xuICAgICAgICAgIHR5cGUgPSBUeXBlLmZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBuYW1lLCB0eXBlKTtcblxuICAgIHJldHVybiB2YXJpYWJsZTtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKHNoaW0sIHtcbiAgVmFyaWFibGVcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBWYXJpYWJsZTtcblxuZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgZ2VuZXJhbENvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOYW1lID0gdmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpLFxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQsIC8vL1xuICAgICAgICB2YXJpYWJsZSA9IGNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5hbWUodmFyaWFibGVOYW1lKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmZ1bmN0aW9uIHRlcm1WYXJpYWJsZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQpIHtcbiAgbGV0IHRlcm1WYXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgdGVybVZhcmlhYmxlTm9kZSA9IHRlcm1WYXJpYWJsZU5vZGVRdWVyeSh0ZXJtTm9kZSk7XG5cbiAgaWYgKHRlcm1WYXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0ZXJtVmFyaWFibGVOYW1lID0gdmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSh0ZXJtVmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgdGVybVZhcmlhYmxlID0gY29udGV4dC5maW5kVmFyaWFibGVCeVZhcmlhYmxlTmFtZSh0ZXJtVmFyaWFibGVOYW1lKTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtVmFyaWFibGU7XG59XG4iXSwibmFtZXMiOlsidHlwZU5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsInZhcmlhYmxlTm9kZVF1ZXJ5IiwidGVybVZhcmlhYmxlTm9kZVF1ZXJ5IiwiVmFyaWFibGUiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsIm5hbWUiLCJ0eXBlIiwiZ2V0TG9jYWxDb250ZXh0IiwiZ2V0U3RyaW5nIiwiZ2V0Tm9kZSIsImdldE5hbWUiLCJnZXRUeXBlIiwic2V0VHlwZSIsIm1hdGNoVmFyaWFibGVOYW1lIiwidmFyaWFibGVOYW1lIiwidmFyaWFibGVOYW1lTWF0Y2hlcyIsIm1hdGNoVmFyaWFibGVOb2RlIiwidmFyaWFibGVOb2RlIiwidmFyaWFibGVOb2RlTWF0Y2hlcyIsIm1hdGNoIiwidmVyaWZ5IiwidmVyaWZpZWQiLCJ2YXJpYWJsZVN0cmluZyIsInRyYWNlIiwidmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSIsInZhcmlhYmxlIiwiZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5hbWUiLCJkZWJ1ZyIsInR5cGVOYW1lIiwidmVyaWZ5VHlwZSIsImZpbGVDb250ZXh0IiwidHlwZVZlcmlmaWVkIiwib2JqZWN0VHlwZSIsImZpbmRUeXBlQnlUeXBlTmFtZSIsInZlcmlmeVdoZW5EZWNsYXJlZCIsInZlcmlmaWVkQXRUb3BMZXZlbCIsInZhcmlhYmxlUHJlc2VudCIsImlzVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZU5hbWUiLCJ1bmlmeVRlcm0iLCJ0ZXJtIiwic3Vic3RpdHV0aW9ucyIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwiY29udGV4dHNSZXZlcnNlZCIsInRlcm1VbmlmaWVkIiwidGVybVN0cmluZyIsInRlcm1Ob2RlIiwic3Vic3RpdHV0aW9uIiwiZmluZFN1YnN0aXR1dGlvbkJ5VmFyaWFibGVOYW1lIiwidGVybU5vZGVNYXRjaGVzIiwibWF0Y2hUZXJtTm9kZSIsInZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSIsInRlcm1WYXJpYWJsZSIsInRlcm1WYXJpYWJsZUZyb21UZXJtTm9kZSIsInRlcm1TdWJzdGl0dXRpb24iLCJUZXJtU3Vic3RpdHV0aW9uIiwiZnJvbVRlcm5BbmRWYXJpYWJsZSIsImFkZFN1YnN0aXR1dGlvbiIsInRvSlNPTiIsInR5cGVKU09OIiwidHlwZVRvVHlwZUpTT04iLCJqc29uIiwiZnJvbUpTT04iLCJsb2NhbENvbnRleHQiLCJMb2NhbENvbnRleHQiLCJmcm9tRmlsZUNvbnRleHQiLCJ2YXJpYWJsZU5vZGVGcm9tVmFyaWFibGVTdHJpbmciLCJ0eXBlRnJvbUpTT04iLCJmcm9tVGVybU5vZGUiLCJ0ZXJtVmFyaWFibGVOb2RlIiwibm9kZUFzU3RyaW5nIiwiZnJvbVZhcmlhYmxlTm9kZSIsImZyb21WYXJpYWJsZU5vZGVBbmRUeXBlIiwiZnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwidmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJUeXBlIiwic2hpbSIsInR5cGVOb2RlIiwiZnJvbVR5cGVOb2RlIiwiT2JqZWN0IiwiYXNzaWduIiwidGVybVZhcmlhYmxlTmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBcVNBOzs7ZUFBQTs7OzJEQW5TaUI7NERBQ1E7MkRBQ0k7cUJBRUg7b0JBQ0M7b0JBQ2lCO29CQUNDO3dCQUNFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRS9DLElBQU1BLGdCQUFnQkMsSUFBQUEsZ0JBQVMsRUFBQyw4QkFDMUJDLG9CQUFvQkQsSUFBQUEsZ0JBQVMsRUFBQyxrQ0FDOUJFLHdCQUF3QkYsSUFBQUEsZ0JBQVMsRUFBQztBQUV4QyxJQUFBLEFBQU1HLHlCQUFOO2FBQU1BLFNBQ1FDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLElBQUksRUFBRUMsSUFBSTtnQ0FE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
|
package/package.json
CHANGED
|
@@ -67,10 +67,6 @@ export default class ContainedAssertion {
|
|
|
67
67
|
|
|
68
68
|
context.trace(`Verifying the '${containedAssertionString}' contained assertion...`);
|
|
69
69
|
|
|
70
|
-
stated = true; ///
|
|
71
|
-
|
|
72
|
-
assignments = null; ///
|
|
73
|
-
|
|
74
70
|
let termVerified = false,
|
|
75
71
|
frameVerified = false,
|
|
76
72
|
statementVerified = false;
|
|
@@ -84,11 +80,11 @@ export default class ContainedAssertion {
|
|
|
84
80
|
}
|
|
85
81
|
|
|
86
82
|
if (this.frame !== null) {
|
|
87
|
-
frameVerified = this.frame
|
|
83
|
+
frameVerified = this.verifyFrame(this.frame, assignments, stated, context);
|
|
88
84
|
}
|
|
89
85
|
|
|
90
86
|
if (this.statement !== null) {
|
|
91
|
-
statementVerified = this.statement
|
|
87
|
+
statementVerified = this.verifyStatement(this.statement, assignments, stated, context);
|
|
92
88
|
}
|
|
93
89
|
|
|
94
90
|
if (termVerified || frameVerified || statementVerified) {
|
|
@@ -113,6 +109,26 @@ export default class ContainedAssertion {
|
|
|
113
109
|
return verified;
|
|
114
110
|
}
|
|
115
111
|
|
|
112
|
+
verifyFrame(frame, assignments, stated, context) {
|
|
113
|
+
stated = true; ///
|
|
114
|
+
|
|
115
|
+
assignments = null; ///
|
|
116
|
+
|
|
117
|
+
const frameVerified = frame.verify(assignments, stated, context);
|
|
118
|
+
|
|
119
|
+
return frameVerified;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
verifyStatement(statment, assignments, stated, context) {
|
|
123
|
+
stated = true; ///
|
|
124
|
+
|
|
125
|
+
assignments = null; ///
|
|
126
|
+
|
|
127
|
+
const statmentVerified = statment.verify(assignments, stated, context);
|
|
128
|
+
|
|
129
|
+
return statmentVerified;
|
|
130
|
+
}
|
|
131
|
+
|
|
116
132
|
verifyWhenStated(assignments, context) {
|
|
117
133
|
let verifiedWhenStated;
|
|
118
134
|
|
package/src/assertion/defined.js
CHANGED
|
@@ -66,10 +66,6 @@ export default class DefinedAssertion {
|
|
|
66
66
|
|
|
67
67
|
context.trace(`Verifying the '${definedAssertionString}' defined assertion...`);
|
|
68
68
|
|
|
69
|
-
stated = true; ///
|
|
70
|
-
|
|
71
|
-
assignments = null; ///
|
|
72
|
-
|
|
73
69
|
let termVerified = false,
|
|
74
70
|
frameVerified = false;
|
|
75
71
|
|
|
@@ -82,7 +78,7 @@ export default class DefinedAssertion {
|
|
|
82
78
|
}
|
|
83
79
|
|
|
84
80
|
if (this.frame!== null) {
|
|
85
|
-
frameVerified = this.frame
|
|
81
|
+
frameVerified = this.verifyFrame(this.frame, assignments, stated, context);
|
|
86
82
|
}
|
|
87
83
|
|
|
88
84
|
if (termVerified || frameVerified) {
|
|
@@ -107,6 +103,16 @@ export default class DefinedAssertion {
|
|
|
107
103
|
return verified;
|
|
108
104
|
}
|
|
109
105
|
|
|
106
|
+
verifyFrame(frame, assignments, stated, context) {
|
|
107
|
+
stated = true; ///
|
|
108
|
+
|
|
109
|
+
assignments = null; ///
|
|
110
|
+
|
|
111
|
+
const frameVerified = frame.verify(assignments, stated, context);
|
|
112
|
+
|
|
113
|
+
return frameVerified;
|
|
114
|
+
}
|
|
115
|
+
|
|
110
116
|
verifyWhenStated(context) {
|
|
111
117
|
let verifiedWhenStated;
|
|
112
118
|
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
import { arrayUtilities } from "necessary";
|
|
4
4
|
|
|
5
5
|
import shim from "../shim";
|
|
6
|
-
import LocalContext from "../context/local";
|
|
7
6
|
import metaLevelUnifier from "../unifier/metaLevel";
|
|
8
7
|
|
|
9
8
|
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
@@ -69,17 +68,7 @@ export default class SubproofAssertion {
|
|
|
69
68
|
|
|
70
69
|
context.trace(`Verifying the '${subproofAssertionString}' subproof assertion...`);
|
|
71
70
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
assignments = null; ///
|
|
75
|
-
|
|
76
|
-
const statementsVerified = this.statements.map((statement) => {
|
|
77
|
-
const statementVerified = statement.verify(assignments, stated, context);
|
|
78
|
-
|
|
79
|
-
if (statementVerified) {
|
|
80
|
-
return true;
|
|
81
|
-
}
|
|
82
|
-
});
|
|
71
|
+
const statementsVerified = this.verifyStatements(assignments, stated, context);
|
|
83
72
|
|
|
84
73
|
if (statementsVerified) {
|
|
85
74
|
let verifiedWhenStated = false,
|
|
@@ -103,6 +92,22 @@ export default class SubproofAssertion {
|
|
|
103
92
|
return verified;
|
|
104
93
|
}
|
|
105
94
|
|
|
95
|
+
verifyStatements(assignments, stated, context) {
|
|
96
|
+
stated = true; ///
|
|
97
|
+
|
|
98
|
+
assignments = null; ///
|
|
99
|
+
|
|
100
|
+
const statementsVerified = this.statements.map((statement) => {
|
|
101
|
+
const statementVerified = statement.verify(assignments, stated, context);
|
|
102
|
+
|
|
103
|
+
if (statementVerified) {
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
return statementsVerified;
|
|
109
|
+
}
|
|
110
|
+
|
|
106
111
|
verifyWhenStated(context) {
|
|
107
112
|
let verifiedWhenStated;
|
|
108
113
|
|
package/src/axiom.js
CHANGED
|
@@ -7,8 +7,9 @@ class Axiom extends TopLevelAssertion {
|
|
|
7
7
|
verify() {
|
|
8
8
|
let verified;
|
|
9
9
|
|
|
10
|
-
const
|
|
11
|
-
axiomString =
|
|
10
|
+
const axiom = this, ///
|
|
11
|
+
axiomString = axiom.getString(),
|
|
12
|
+
fileContext = this.getFileContext();
|
|
12
13
|
|
|
13
14
|
fileContext.trace(`Verifying the '${axiomString}' axiom...`);
|
|
14
15
|
|
|
@@ -2,53 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
import shim from "../shim";
|
|
4
4
|
import Combinator from "../combinator";
|
|
5
|
-
import
|
|
5
|
+
import CombinatorBracketedContext from "../context/bracketed/combinator";
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
import { nominalLexer, nominalParser } from "../utilities/nominal";
|
|
7
|
+
const combinatorBracketedContext = CombinatorBracketedContext.fromNothing();
|
|
9
8
|
|
|
10
|
-
const
|
|
11
|
-
const lexer = nominalLexer; ///
|
|
12
|
-
|
|
13
|
-
return lexer;
|
|
14
|
-
},
|
|
15
|
-
getParser = () => {
|
|
16
|
-
const parser = nominalParser; ///
|
|
17
|
-
|
|
18
|
-
return parser;
|
|
19
|
-
},
|
|
20
|
-
nodeAsTokens = (node) => {
|
|
21
|
-
const tokens = statementTokens; ///
|
|
22
|
-
|
|
23
|
-
return tokens;
|
|
24
|
-
},
|
|
25
|
-
nodeAsString = (node) => {
|
|
26
|
-
const string = statementString; ///
|
|
27
|
-
|
|
28
|
-
return string;
|
|
29
|
-
},
|
|
30
|
-
tokensAsString = (tokens) => {
|
|
31
|
-
const string = statementNode; ///
|
|
32
|
-
|
|
33
|
-
return string;
|
|
34
|
-
},
|
|
35
|
-
context = {
|
|
36
|
-
getLexer,
|
|
37
|
-
getParser,
|
|
38
|
-
nodeAsTokens,
|
|
39
|
-
nodeAsString,
|
|
40
|
-
tokensAsString
|
|
41
|
-
},
|
|
42
|
-
statementString = `(${STATEMENT_META_TYPE_NAME})`,
|
|
43
|
-
statementNodeAndTokens = StatementNodeAndTokens.fromStatementString(statementString, context),
|
|
44
|
-
statementTokens = statementNodeAndTokens.getStatementTokens(),
|
|
45
|
-
statementNode = statementNodeAndTokens.getStatementNode();
|
|
46
|
-
|
|
47
|
-
export const bracketedStatementNode = statementNode; ///
|
|
9
|
+
export const bracketedStatementNode = combinatorBracketedContext.getBracketedStatementNode(); ///
|
|
48
10
|
|
|
49
11
|
export default class BracketedCombinator extends Combinator {
|
|
50
12
|
static fromNothing() {
|
|
51
13
|
const { Statement } = shim,
|
|
14
|
+
statementNode = bracketedStatementNode, ///
|
|
15
|
+
context = combinatorBracketedContext, ///
|
|
52
16
|
statement = Statement.fromStatementNode(statementNode, context),
|
|
53
17
|
bracketedCombinator = new BracketedCombinator(statement);
|
|
54
18
|
|
package/src/conclusion.js
CHANGED
|
@@ -26,6 +26,8 @@ class Conclusion {
|
|
|
26
26
|
|
|
27
27
|
getStatement() { return this.unqualifiedStatement.getStatement(); }
|
|
28
28
|
|
|
29
|
+
matchStatementNode(statementNode) { return this.unqualifiedStatement.matchStatementNode(statementNode); }
|
|
30
|
+
|
|
29
31
|
unifyStatement(statement, substitutions, context) {
|
|
30
32
|
let statementUnified;
|
|
31
33
|
|
package/src/conjecture.js
CHANGED
|
@@ -7,8 +7,9 @@ class Conjecture extends TopLevelAssertion {
|
|
|
7
7
|
verify() {
|
|
8
8
|
let verified;
|
|
9
9
|
|
|
10
|
-
const
|
|
11
|
-
|
|
10
|
+
const conjecture = this, ///
|
|
11
|
+
fileContext = this.getFileContext(),
|
|
12
|
+
conjectureString = conjecture.getString();
|
|
12
13
|
|
|
13
14
|
fileContext.trace(`Verifying the '${conjectureString}' conjecture...`);
|
|
14
15
|
|
package/src/consequent.js
CHANGED
|
@@ -26,6 +26,8 @@ class Consequent {
|
|
|
26
26
|
|
|
27
27
|
getStatement() { return this.unqualifiedStatement.getStatement(); }
|
|
28
28
|
|
|
29
|
+
matchStatementNode(statementNode) { return this.unqualifiedStatement.matchStatementNode(statementNode); }
|
|
30
|
+
|
|
29
31
|
unifyStatement(statement, substitutions, context) {
|
|
30
32
|
let statementUnified;
|
|
31
33
|
|
|
@@ -2,54 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
import shim from "../shim";
|
|
4
4
|
import Constructor from "../constructor";
|
|
5
|
-
import
|
|
5
|
+
import ConstructorBracketedContext from "../context/bracketed/constructor";
|
|
6
6
|
|
|
7
|
-
import { OBJECT_TYPE_NAME } from "../typeNames";
|
|
8
7
|
import { stringFromTermAndType } from "../constructor";
|
|
9
|
-
import { nominalLexer, nominalParser } from "../utilities/nominal";
|
|
10
8
|
|
|
11
|
-
const
|
|
12
|
-
const lexer = nominalLexer; ///
|
|
9
|
+
const constructorBracketedContext = ConstructorBracketedContext.fromNothing();
|
|
13
10
|
|
|
14
|
-
|
|
15
|
-
},
|
|
16
|
-
getParser = () => {
|
|
17
|
-
const parser = nominalParser; ///
|
|
18
|
-
|
|
19
|
-
return parser;
|
|
20
|
-
},
|
|
21
|
-
nodeAsTokens = (node) => {
|
|
22
|
-
const tokens = termTokens; ///
|
|
23
|
-
|
|
24
|
-
return tokens;
|
|
25
|
-
},
|
|
26
|
-
nodeAsString = (node) => {
|
|
27
|
-
const string = termString; ///
|
|
28
|
-
|
|
29
|
-
return string;
|
|
30
|
-
},
|
|
31
|
-
tokensAsString = (tokens) => {
|
|
32
|
-
const string = termNode; ///
|
|
33
|
-
|
|
34
|
-
return string;
|
|
35
|
-
},
|
|
36
|
-
context = {
|
|
37
|
-
getLexer,
|
|
38
|
-
getParser,
|
|
39
|
-
nodeAsTokens,
|
|
40
|
-
nodeAsString,
|
|
41
|
-
tokensAsString
|
|
42
|
-
},
|
|
43
|
-
termString = `(${OBJECT_TYPE_NAME})`,
|
|
44
|
-
termNodeAndTokens = TermNodeAndTokens.fromTermString(termString, context),
|
|
45
|
-
termTokens = termNodeAndTokens.getTermTokens(),
|
|
46
|
-
termNode = termNodeAndTokens.getTermNode();
|
|
47
|
-
|
|
48
|
-
export const bracketedTermNode = termNode; ///
|
|
11
|
+
export const bracketedTermNode = constructorBracketedContext.getBracketedTermNode();
|
|
49
12
|
|
|
50
13
|
export default class BracketedConstructor extends Constructor {
|
|
51
14
|
static fromNothing() {
|
|
52
15
|
const { Term } = shim,
|
|
16
|
+
termNode = bracketedTermNode, ///
|
|
17
|
+
context = constructorBracketedContext, ///
|
|
53
18
|
term = Term.fromTermNode(termNode, context),
|
|
54
19
|
type = null,
|
|
55
20
|
string = stringFromTermAndType(term, type),
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import BracketedContext from "../../context/bracketted";
|
|
4
|
+
import StatementNodeAndTokens from "../../nodeAndTokens/statement";
|
|
5
|
+
|
|
6
|
+
import { STATEMENT_META_TYPE_NAME } from "../../metaTypeNames";
|
|
7
|
+
|
|
8
|
+
export default class CombinatorBracketedContext extends BracketedContext {
|
|
9
|
+
getBracketedStatementNode() {
|
|
10
|
+
const node = this.getNode(),
|
|
11
|
+
bracketedStatementNode = node; ///
|
|
12
|
+
|
|
13
|
+
return bracketedStatementNode;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
static fromNothing() {
|
|
17
|
+
const string = `(${STATEMENT_META_TYPE_NAME})`,
|
|
18
|
+
NodeAndTokens = StatementNodeAndTokens,
|
|
19
|
+
combinatorBracketedContext = BracketedContext.fromStringAndNodeAndTokens(CombinatorBracketedContext, string, NodeAndTokens);
|
|
20
|
+
|
|
21
|
+
return combinatorBracketedContext;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import BracketedContext from "../../context/bracketted";
|
|
4
|
+
import TermNodeAndTokens from "../../nodeAndTokens/term";
|
|
5
|
+
|
|
6
|
+
import { OBJECT_TYPE_NAME } from "../../typeNames";
|
|
7
|
+
|
|
8
|
+
export default class ConstructorBracketedContext extends BracketedContext {
|
|
9
|
+
getBracketedTermNode() {
|
|
10
|
+
const node = this.getNode(),
|
|
11
|
+
bracketedTermNode = node; ///
|
|
12
|
+
|
|
13
|
+
return bracketedTermNode;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
static fromNothing() {
|
|
17
|
+
const string = `(${OBJECT_TYPE_NAME})`,
|
|
18
|
+
NodeAndTokens = TermNodeAndTokens,
|
|
19
|
+
constructorBracketedContext = BracketedContext.fromStringAndNodeAndTokens(ConstructorBracketedContext, string, NodeAndTokens);
|
|
20
|
+
|
|
21
|
+
return constructorBracketedContext;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { nominalLexer, nominalParser } from "../utilities/nominal";
|
|
4
|
+
|
|
5
|
+
export default class BracketedContext {
|
|
6
|
+
constructor(string, node, tokens) {
|
|
7
|
+
this.string = string;
|
|
8
|
+
this.node = node;
|
|
9
|
+
this.tokens = tokens;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
getString() {
|
|
13
|
+
return this.string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
getNode() {
|
|
17
|
+
return this.node;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
getTokens() {
|
|
21
|
+
return this.tokens;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
nodeAsTokens() {
|
|
25
|
+
return this.tokens;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
nodeAsString() {
|
|
29
|
+
return this.string;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
tokensAsString() {
|
|
33
|
+
return this.string;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
static fromStringAndNodeAndTokens(Class, string, NodeAndTokens) {
|
|
37
|
+
const context = { ///
|
|
38
|
+
getLexer,
|
|
39
|
+
getParser
|
|
40
|
+
},
|
|
41
|
+
nodeAndTokens = NodeAndTokens.fromString(string, context),
|
|
42
|
+
node = nodeAndTokens.getNode(),
|
|
43
|
+
tokens = nodeAndTokens.getTokens(),
|
|
44
|
+
bracketedContext = new Class(string, node, tokens);
|
|
45
|
+
|
|
46
|
+
return bracketedContext;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function getLexer() {
|
|
51
|
+
const lexer = nominalLexer; //'
|
|
52
|
+
|
|
53
|
+
return lexer;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function getParser() {
|
|
57
|
+
const parser = nominalParser; //'
|
|
58
|
+
|
|
59
|
+
return parser;
|
|
60
|
+
}
|
|
61
|
+
|