occam-verify-cli 1.0.984 → 1.0.986
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/action/verify.js +22 -27
- package/lib/constants.js +1 -41
- package/lib/index.js +1 -2
- package/lib/utilities/fileContext.js +3 -8
- package/lib/utilities/releaseContext.js +2 -2
- package/package.json +2 -5
- package/src/action/verify.js +8 -18
- package/src/constants.js +0 -10
- package/src/index.js +0 -2
- package/src/utilities/fileContext.js +1 -2
- package/src/utilities/releaseContext.js +1 -1
- package/lib/context/aphasic.js +0 -27
- package/lib/context/bounded.js +0 -244
- package/lib/context/branching.js +0 -61
- package/lib/context/file/nominal.js +0 -586
- package/lib/context/illative.js +0 -28
- package/lib/context/liminal.js +0 -200
- package/lib/context/literal.js +0 -44
- package/lib/context/mnemic.js +0 -454
- package/lib/context/nested.js +0 -31
- package/lib/context/nominal.js +0 -57
- package/lib/context/phaneric.js +0 -44
- package/lib/context/thetic.js +0 -28
- package/lib/context.js +0 -445
- package/lib/element/assertion/contained.js +0 -218
- package/lib/element/assertion/defined.js +0 -213
- package/lib/element/assertion/property.js +0 -176
- package/lib/element/assertion/signature.js +0 -170
- package/lib/element/assertion/subproof.js +0 -220
- package/lib/element/assertion/type.js +0 -227
- package/lib/element/assertion.js +0 -49
- package/lib/element/assumption/metaLevel.js +0 -244
- package/lib/element/assumption.js +0 -252
- package/lib/element/combinator/bracketed.js +0 -36
- package/lib/element/combinator.js +0 -104
- package/lib/element/conclusion.js +0 -131
- package/lib/element/constructor/bracketed.js +0 -57
- package/lib/element/constructor.js +0 -129
- package/lib/element/declaration/combinator.js +0 -58
- package/lib/element/declaration/complexType.js +0 -180
- package/lib/element/declaration/constructor.js +0 -93
- package/lib/element/declaration/metavariable.js +0 -77
- package/lib/element/declaration/property.js +0 -88
- package/lib/element/declaration/simpleType.js +0 -148
- package/lib/element/declaration/typePrefix.js +0 -53
- package/lib/element/declaration/variable.js +0 -99
- package/lib/element/declaration.js +0 -15
- package/lib/element/deduction.js +0 -131
- package/lib/element/derivation.js +0 -46
- package/lib/element/equality.js +0 -211
- package/lib/element/equivalence.js +0 -200
- package/lib/element/error.js +0 -27
- package/lib/element/frame.js +0 -238
- package/lib/element/hypothesis.js +0 -135
- package/lib/element/judgement.js +0 -212
- package/lib/element/label.js +0 -135
- package/lib/element/metaType.js +0 -57
- package/lib/element/metavariable.js +0 -452
- package/lib/element/parameter.js +0 -69
- package/lib/element/procedureCall.js +0 -116
- package/lib/element/procedureReference.js +0 -56
- package/lib/element/proof.js +0 -52
- package/lib/element/proofAssertion/premise.js +0 -238
- package/lib/element/proofAssertion/step.js +0 -235
- package/lib/element/proofAssertion/supposition.js +0 -249
- package/lib/element/proofAssertion.js +0 -56
- package/lib/element/property.js +0 -176
- package/lib/element/propertyRelation.js +0 -132
- package/lib/element/reference.js +0 -227
- package/lib/element/rule.js +0 -242
- package/lib/element/section.js +0 -64
- package/lib/element/signature.js +0 -195
- package/lib/element/statement.js +0 -228
- package/lib/element/subDerivation.js +0 -46
- package/lib/element/subproof.js +0 -91
- package/lib/element/substitution/frame.js +0 -256
- package/lib/element/substitution/reference.js +0 -192
- package/lib/element/substitution/statement.js +0 -294
- package/lib/element/substitution/term.js +0 -266
- package/lib/element/substitution.js +0 -183
- package/lib/element/term.js +0 -217
- package/lib/element/topLevelAssertion/axiom.js +0 -158
- package/lib/element/topLevelAssertion/conjecture.js +0 -42
- package/lib/element/topLevelAssertion/lemma.js +0 -39
- package/lib/element/topLevelAssertion/theorem.js +0 -42
- package/lib/element/topLevelAssertion.js +0 -286
- package/lib/element/topLevelMetaAssertion/metaLemma.js +0 -42
- package/lib/element/topLevelMetaAssertion/metatheorem.js +0 -42
- package/lib/element/topLevelMetaAssertion.js +0 -179
- package/lib/element/type.js +0 -240
- package/lib/element/typePrefix.js +0 -85
- package/lib/element/variable.js +0 -206
- package/lib/elements.js +0 -27
- package/lib/metaTypeNames.js +0 -26
- package/lib/metaTypes.js +0 -66
- package/lib/node/argument.js +0 -31
- package/lib/node/assertion/contained.js +0 -51
- package/lib/node/assertion/defined.js +0 -47
- package/lib/node/assertion/property.js +0 -36
- package/lib/node/assertion/signature.js +0 -32
- package/lib/node/assertion/subproof.js +0 -28
- package/lib/node/assertion/type.js +0 -32
- package/lib/node/assertion.js +0 -18
- package/lib/node/assumption/metaLevel.js +0 -27
- package/lib/node/assumption.js +0 -27
- package/lib/node/body/axiom.js +0 -23
- package/lib/node/body/conjecture.js +0 -23
- package/lib/node/body/lemma.js +0 -23
- package/lib/node/body/metaLemma.js +0 -23
- package/lib/node/body/metatheorem.js +0 -23
- package/lib/node/body/rule.js +0 -44
- package/lib/node/body/theorem.js +0 -23
- package/lib/node/body.js +0 -31
- package/lib/node/combinator.js +0 -23
- package/lib/node/conclusion.js +0 -27
- package/lib/node/constructor.js +0 -23
- package/lib/node/declaration/combinator.js +0 -28
- package/lib/node/declaration/complexType.js +0 -72
- package/lib/node/declaration/constructor.js +0 -47
- package/lib/node/declaration/metavariable.js +0 -36
- package/lib/node/declaration/property.js +0 -44
- package/lib/node/declaration/simpleType.js +0 -72
- package/lib/node/declaration/typePrefix.js +0 -32
- package/lib/node/declaration/variable.js +0 -51
- package/lib/node/declaration.js +0 -18
- package/lib/node/deduction.js +0 -27
- package/lib/node/derivation.js +0 -26
- package/lib/node/document.js +0 -18
- package/lib/node/equality.js +0 -33
- package/lib/node/equivalence.js +0 -23
- package/lib/node/equivalences.js +0 -18
- package/lib/node/error.js +0 -18
- package/lib/node/frame.js +0 -38
- package/lib/node/header/axiom.js +0 -28
- package/lib/node/header/conjecture.js +0 -23
- package/lib/node/header/lemma.js +0 -23
- package/lib/node/header/metaLemma.js +0 -23
- package/lib/node/header/metatheorem.js +0 -23
- package/lib/node/header/rule.js +0 -23
- package/lib/node/header/theorem.js +0 -23
- package/lib/node/header.js +0 -47
- package/lib/node/hypothesis.js +0 -27
- package/lib/node/judgement.js +0 -31
- package/lib/node/label.js +0 -23
- package/lib/node/labels.js +0 -23
- package/lib/node/metaArgument.js +0 -23
- package/lib/node/metaType.js +0 -30
- package/lib/node/metavariable.js +0 -39
- package/lib/node/parameter.js +0 -47
- package/lib/node/parenthesisedLabel.js +0 -23
- package/lib/node/parenthesisedLabels.js +0 -27
- package/lib/node/placeholder.js +0 -18
- package/lib/node/procedureCall.js +0 -31
- package/lib/node/procedureReference.js +0 -30
- package/lib/node/proof.js +0 -23
- package/lib/node/proofAssertion/premise.js +0 -28
- package/lib/node/proofAssertion/step.js +0 -52
- package/lib/node/proofAssertion/supposition.js +0 -28
- package/lib/node/proofAssertion.js +0 -27
- package/lib/node/property.js +0 -30
- package/lib/node/propertyRelation.js +0 -31
- package/lib/node/qualification.js +0 -27
- package/lib/node/reference.js +0 -23
- package/lib/node/rule.js +0 -43
- package/lib/node/section.js +0 -39
- package/lib/node/signature.js +0 -23
- package/lib/node/statement.js +0 -103
- package/lib/node/subDerivation.js +0 -26
- package/lib/node/subproof.js +0 -35
- package/lib/node/substitution/frame.js +0 -40
- package/lib/node/substitution/reference.js +0 -40
- package/lib/node/substitution/statement.js +0 -60
- package/lib/node/substitution/term.js +0 -40
- package/lib/node/substitution.js +0 -18
- package/lib/node/term.js +0 -60
- package/lib/node/topLevelAssertion/axiom.js +0 -26
- package/lib/node/topLevelAssertion/conjecture.js +0 -26
- package/lib/node/topLevelAssertion/lemma.js +0 -26
- package/lib/node/topLevelAssertion/theorem.js +0 -26
- package/lib/node/topLevelAssertion.js +0 -46
- package/lib/node/topLevelMetaAssertion/metaLemma.js +0 -26
- package/lib/node/topLevelMetaAssertion/metatheorem.js +0 -26
- package/lib/node/topLevelMetaAssertion.js +0 -42
- package/lib/node/type.js +0 -60
- package/lib/node/typePrefix.js +0 -30
- package/lib/node/types.js +0 -23
- package/lib/node/variable.js +0 -30
- package/lib/nominal/lexer.js +0 -15
- package/lib/nominal/parser.js +0 -24
- package/lib/nonTerminalNodeMap.js +0 -189
- package/lib/pass/zip.js +0 -23
- package/lib/preamble.js +0 -73
- package/lib/process/assign.js +0 -62
- package/lib/process/discharge.js +0 -38
- package/lib/process/equate.js +0 -73
- package/lib/process/instantiate.js +0 -261
- package/lib/process/unification.js +0 -228
- package/lib/process/unify.js +0 -336
- package/lib/process/validate.js +0 -135
- package/lib/process/validation.js +0 -291
- package/lib/process/verify.js +0 -205
- package/lib/ruleNames.js +0 -350
- package/lib/tokenTypes.js +0 -22
- package/lib/utilities/assignment.js +0 -47
- package/lib/utilities/bnf.js +0 -21
- package/lib/utilities/brackets.js +0 -77
- package/lib/utilities/breakPoint.js +0 -38
- package/lib/utilities/context.js +0 -220
- package/lib/utilities/element.js +0 -1851
- package/lib/utilities/equivalence.js +0 -27
- package/lib/utilities/equivalences.js +0 -134
- package/lib/utilities/instance.js +0 -44
- package/lib/utilities/json.js +0 -1109
- package/lib/utilities/string.js +0 -231
- package/lib/utilities/substitutions.js +0 -86
- package/lib/utilities/synoptic.js +0 -159
- package/lib/utilities/type.js +0 -27
- package/src/context/aphasic.js +0 -15
- package/src/context/bounded.js +0 -362
- package/src/context/branching.js +0 -69
- package/src/context/file/nominal.js +0 -955
- package/src/context/illative.js +0 -17
- package/src/context/liminal.js +0 -280
- package/src/context/literal.js +0 -42
- package/src/context/mnemic.js +0 -778
- package/src/context/nested.js +0 -21
- package/src/context/nominal.js +0 -62
- package/src/context/phaneric.js +0 -43
- package/src/context/thetic.js +0 -17
- package/src/context.js +0 -722
- package/src/element/assertion/contained.js +0 -313
- package/src/element/assertion/defined.js +0 -310
- package/src/element/assertion/property.js +0 -252
- package/src/element/assertion/signature.js +0 -239
- package/src/element/assertion/subproof.js +0 -335
- package/src/element/assertion/type.js +0 -328
- package/src/element/assertion.js +0 -65
- package/src/element/assumption/metaLevel.js +0 -373
- package/src/element/assumption.js +0 -374
- package/src/element/combinator/bracketed.js +0 -32
- package/src/element/combinator.js +0 -145
- package/src/element/conclusion.js +0 -185
- package/src/element/constructor/bracketed.js +0 -68
- package/src/element/constructor.js +0 -188
- package/src/element/declaration/combinator.js +0 -66
- package/src/element/declaration/complexType.js +0 -257
- package/src/element/declaration/constructor.js +0 -122
- package/src/element/declaration/metavariable.js +0 -93
- package/src/element/declaration/property.js +0 -108
- package/src/element/declaration/simpleType.js +0 -208
- package/src/element/declaration/typePrefix.js +0 -58
- package/src/element/declaration/variable.js +0 -130
- package/src/element/declaration.js +0 -7
- package/src/element/deduction.js +0 -185
- package/src/element/derivation.js +0 -57
- package/src/element/equality.js +0 -325
- package/src/element/equivalence.js +0 -276
- package/src/element/error.js +0 -26
- package/src/element/frame.js +0 -356
- package/src/element/hypothesis.js +0 -186
- package/src/element/judgement.js +0 -303
- package/src/element/label.js +0 -186
- package/src/element/metaType.js +0 -75
- package/src/element/metavariable.js +0 -662
- package/src/element/parameter.js +0 -90
- package/src/element/procedureCall.js +0 -159
- package/src/element/procedureReference.js +0 -71
- package/src/element/proof.js +0 -61
- package/src/element/proofAssertion/premise.js +0 -354
- package/src/element/proofAssertion/step.js +0 -271
- package/src/element/proofAssertion/supposition.js +0 -377
- package/src/element/proofAssertion.js +0 -74
- package/src/element/property.js +0 -258
- package/src/element/propertyRelation.js +0 -193
- package/src/element/reference.js +0 -345
- package/src/element/rule.js +0 -358
- package/src/element/section.js +0 -78
- package/src/element/signature.js +0 -292
- package/src/element/statement.js +0 -358
- package/src/element/subDerivation.js +0 -56
- package/src/element/subproof.js +0 -116
- package/src/element/substitution/frame.js +0 -392
- package/src/element/substitution/reference.js +0 -274
- package/src/element/substitution/statement.js +0 -452
- package/src/element/substitution/term.js +0 -407
- package/src/element/substitution.js +0 -261
- package/src/element/term.js +0 -339
- package/src/element/topLevelAssertion/axiom.js +0 -244
- package/src/element/topLevelAssertion/conjecture.js +0 -40
- package/src/element/topLevelAssertion/lemma.js +0 -42
- package/src/element/topLevelAssertion/theorem.js +0 -40
- package/src/element/topLevelAssertion.js +0 -436
- package/src/element/topLevelMetaAssertion/metaLemma.js +0 -40
- package/src/element/topLevelMetaAssertion/metatheorem.js +0 -40
- package/src/element/topLevelMetaAssertion.js +0 -276
- package/src/element/type.js +0 -374
- package/src/element/typePrefix.js +0 -113
- package/src/element/variable.js +0 -259
- package/src/elements.js +0 -13
- package/src/metaTypeNames.js +0 -5
- package/src/metaTypes.js +0 -71
- package/src/node/argument.js +0 -30
- package/src/node/assertion/contained.js +0 -53
- package/src/node/assertion/defined.js +0 -46
- package/src/node/assertion/property.js +0 -30
- package/src/node/assertion/signature.js +0 -23
- package/src/node/assertion/subproof.js +0 -16
- package/src/node/assertion/type.js +0 -23
- package/src/node/assertion.js +0 -7
- package/src/node/assumption/metaLevel.js +0 -23
- package/src/node/assumption.js +0 -23
- package/src/node/body/axiom.js +0 -7
- package/src/node/body/conjecture.js +0 -7
- package/src/node/body/lemma.js +0 -7
- package/src/node/body/metaLemma.js +0 -7
- package/src/node/body/metatheorem.js +0 -7
- package/src/node/body/rule.js +0 -42
- package/src/node/body/theorem.js +0 -7
- package/src/node/body.js +0 -30
- package/src/node/combinator.js +0 -16
- package/src/node/conclusion.js +0 -23
- package/src/node/constructor.js +0 -16
- package/src/node/declaration/combinator.js +0 -16
- package/src/node/declaration/complexType.js +0 -88
- package/src/node/declaration/constructor.js +0 -46
- package/src/node/declaration/metavariable.js +0 -30
- package/src/node/declaration/property.js +0 -42
- package/src/node/declaration/simpleType.js +0 -87
- package/src/node/declaration/typePrefix.js +0 -24
- package/src/node/declaration/variable.js +0 -53
- package/src/node/declaration.js +0 -7
- package/src/node/deduction.js +0 -23
- package/src/node/derivation.js +0 -19
- package/src/node/document.js +0 -7
- package/src/node/equality.js +0 -35
- package/src/node/equivalence.js +0 -16
- package/src/node/equivalences.js +0 -7
- package/src/node/error.js +0 -7
- package/src/node/frame.js +0 -40
- package/src/node/header/axiom.js +0 -16
- package/src/node/header/conjecture.js +0 -7
- package/src/node/header/lemma.js +0 -7
- package/src/node/header/metaLemma.js +0 -7
- package/src/node/header/metatheorem.js +0 -7
- package/src/node/header/rule.js +0 -7
- package/src/node/header/theorem.js +0 -7
- package/src/node/header.js +0 -54
- package/src/node/hypothesis.js +0 -23
- package/src/node/judgement.js +0 -30
- package/src/node/label.js +0 -16
- package/src/node/labels.js +0 -16
- package/src/node/metaArgument.js +0 -16
- package/src/node/metaType.js +0 -26
- package/src/node/metavariable.js +0 -42
- package/src/node/parameter.js +0 -51
- package/src/node/parenthesisedLabel.js +0 -16
- package/src/node/parenthesisedLabels.js +0 -23
- package/src/node/placeholder.js +0 -7
- package/src/node/procedureCall.js +0 -30
- package/src/node/procedureReference.js +0 -26
- package/src/node/proof.js +0 -16
- package/src/node/proofAssertion/premise.js +0 -16
- package/src/node/proofAssertion/step.js +0 -52
- package/src/node/proofAssertion/supposition.js +0 -16
- package/src/node/proofAssertion.js +0 -23
- package/src/node/property.js +0 -28
- package/src/node/propertyRelation.js +0 -30
- package/src/node/qualification.js +0 -23
- package/src/node/reference.js +0 -16
- package/src/node/rule.js +0 -51
- package/src/node/section.js +0 -44
- package/src/node/signature.js +0 -16
- package/src/node/statement.js +0 -167
- package/src/node/subDerivation.js +0 -19
- package/src/node/subproof.js +0 -35
- package/src/node/substitution/frame.js +0 -37
- package/src/node/substitution/reference.js +0 -38
- package/src/node/substitution/statement.js +0 -70
- package/src/node/substitution/term.js +0 -38
- package/src/node/substitution.js +0 -7
- package/src/node/term.js +0 -75
- package/src/node/topLevelAssertion/axiom.js +0 -13
- package/src/node/topLevelAssertion/conjecture.js +0 -13
- package/src/node/topLevelAssertion/lemma.js +0 -13
- package/src/node/topLevelAssertion/theorem.js +0 -13
- package/src/node/topLevelAssertion.js +0 -58
- package/src/node/topLevelMetaAssertion/metaLemma.js +0 -13
- package/src/node/topLevelMetaAssertion/metatheorem.js +0 -13
- package/src/node/topLevelMetaAssertion.js +0 -51
- package/src/node/type.js +0 -74
- package/src/node/typePrefix.js +0 -26
- package/src/node/types.js +0 -16
- package/src/node/variable.js +0 -26
- package/src/nominal/lexer.js +0 -5
- package/src/nominal/parser.js +0 -12
- package/src/nonTerminalNodeMap.js +0 -261
- package/src/pass/zip.js +0 -19
- package/src/preamble.js +0 -64
- package/src/process/assign.js +0 -53
- package/src/process/discharge.js +0 -33
- package/src/process/equate.js +0 -94
- package/src/process/instantiate.js +0 -198
- package/src/process/unification.js +0 -332
- package/src/process/unify.js +0 -504
- package/src/process/validate.js +0 -174
- package/src/process/validation.js +0 -410
- package/src/process/verify.js +0 -299
- package/src/ruleNames.js +0 -86
- package/src/tokenTypes.js +0 -4
- package/src/utilities/assignment.js +0 -57
- package/src/utilities/bnf.js +0 -20
- package/src/utilities/brackets.js +0 -87
- package/src/utilities/breakPoint.js +0 -29
- package/src/utilities/context.js +0 -223
- package/src/utilities/element.js +0 -2293
- package/src/utilities/equivalence.js +0 -25
- package/src/utilities/equivalences.js +0 -158
- package/src/utilities/instance.js +0 -40
- package/src/utilities/json.js +0 -1273
- package/src/utilities/string.js +0 -282
- package/src/utilities/substitutions.js +0 -93
- package/src/utilities/synoptic.js +0 -135
- package/src/utilities/type.js +0 -19
package/lib/element/property.js
DELETED
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "default", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return _default;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _occamlanguages = require("occam-languages");
|
|
12
|
-
const _elements = require("../elements");
|
|
13
|
-
const _context = require("../utilities/context");
|
|
14
|
-
const _instantiate = require("../process/instantiate");
|
|
15
|
-
const _element = require("../utilities/element");
|
|
16
|
-
const _json = require("../utilities/json");
|
|
17
|
-
const _breakPoint = require("../utilities/breakPoint");
|
|
18
|
-
const _default = (0, _elements.define)(class Property extends _occamlanguages.Element {
|
|
19
|
-
constructor(context, string, node, breakPoint, name, type){
|
|
20
|
-
super(context, string, node, breakPoint);
|
|
21
|
-
this.name = name;
|
|
22
|
-
this.type = type;
|
|
23
|
-
}
|
|
24
|
-
getName() {
|
|
25
|
-
return this.name;
|
|
26
|
-
}
|
|
27
|
-
getType() {
|
|
28
|
-
return this.type;
|
|
29
|
-
}
|
|
30
|
-
getPropertyNode() {
|
|
31
|
-
const node = this.getNode(), properetyNode = node; ///
|
|
32
|
-
return properetyNode;
|
|
33
|
-
}
|
|
34
|
-
setName(name) {
|
|
35
|
-
this.name = name;
|
|
36
|
-
}
|
|
37
|
-
setType(type) {
|
|
38
|
-
this.type = type;
|
|
39
|
-
}
|
|
40
|
-
isEqualTo(property) {
|
|
41
|
-
const propertyNode = property.getNode(), propertyNodeMatches = this.matchPropertyNode(propertyNode), equalTo = propertyNodeMatches; ///
|
|
42
|
-
return equalTo;
|
|
43
|
-
}
|
|
44
|
-
matchPropertyNode(propertyNode) {
|
|
45
|
-
const node = propertyNode, nodeMatches = this.matchNode(node), propertyNodeMatches = nodeMatches; ///
|
|
46
|
-
return propertyNodeMatches;
|
|
47
|
-
}
|
|
48
|
-
comparePropertyName(propertyName) {
|
|
49
|
-
const comparesToPropertyName = this.name === propertyName;
|
|
50
|
-
return comparesToPropertyName;
|
|
51
|
-
}
|
|
52
|
-
verify(properties, context) {
|
|
53
|
-
let verifies = false;
|
|
54
|
-
const propertyString = this.getString(); ///
|
|
55
|
-
context.trace(`Verifying the '${propertyString}' property...`);
|
|
56
|
-
const naemVerifies = this.verifyName(properties, context);
|
|
57
|
-
if (naemVerifies) {
|
|
58
|
-
verifies = true;
|
|
59
|
-
}
|
|
60
|
-
if (verifies) {
|
|
61
|
-
context.debug(`...verified the '${propertyString}' property.`);
|
|
62
|
-
}
|
|
63
|
-
return verifies;
|
|
64
|
-
}
|
|
65
|
-
verifyName(properties, context) {
|
|
66
|
-
let naemVerifies = false;
|
|
67
|
-
const propertyString = this.getString();
|
|
68
|
-
context.trace(`Verifying the '${propertyString}' property's name...`);
|
|
69
|
-
const propertyName = this.name, count = properties.reduce((count, property)=>{
|
|
70
|
-
if (property !== this) {
|
|
71
|
-
const propertyComparesToPropertyName = property.comparePropertyName(propertyName);
|
|
72
|
-
if (propertyComparesToPropertyName) {
|
|
73
|
-
count++;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
return count;
|
|
77
|
-
}, 0);
|
|
78
|
-
if (count === 0) {
|
|
79
|
-
naemVerifies = true;
|
|
80
|
-
} else {
|
|
81
|
-
context.debug(`The '${propertyString}' property appears more than once.`);
|
|
82
|
-
}
|
|
83
|
-
if (naemVerifies) {
|
|
84
|
-
context.debug(`...verified the '${propertyString}' property's name.`);
|
|
85
|
-
}
|
|
86
|
-
return naemVerifies;
|
|
87
|
-
}
|
|
88
|
-
findValidProperty(context) {
|
|
89
|
-
const propertyNode = this.getPropertyNode(), property = context.findPropertyByPropertyNode(propertyNode), validProperty = property; ///
|
|
90
|
-
return validProperty;
|
|
91
|
-
}
|
|
92
|
-
validate(context, validateForwards) {
|
|
93
|
-
let property = null;
|
|
94
|
-
const propertyString = this.getString(); ///
|
|
95
|
-
context.trace(`Validating the '${propertyString}' property...`);
|
|
96
|
-
let validates = false;
|
|
97
|
-
const validProperty = this.findValidProperty(context);
|
|
98
|
-
if (validProperty !== null) {
|
|
99
|
-
property = validProperty; ///
|
|
100
|
-
const validatesForward = validateForwards(property, context);
|
|
101
|
-
if (validatesForward) {
|
|
102
|
-
validates = true;
|
|
103
|
-
context.debug(`...the '${propertyString}' property is already valid.`);
|
|
104
|
-
} else {
|
|
105
|
-
property = null;
|
|
106
|
-
}
|
|
107
|
-
} else {
|
|
108
|
-
{
|
|
109
|
-
const property = this, validatesForward = validateForwards(property, context);
|
|
110
|
-
if (validatesForward) {
|
|
111
|
-
validates = true;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
if (validates) {
|
|
115
|
-
property = this; ///
|
|
116
|
-
context.addProperty(property);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
if (validates) {
|
|
120
|
-
context.debug(`...validated the '${propertyString}' property.`);
|
|
121
|
-
}
|
|
122
|
-
return property;
|
|
123
|
-
}
|
|
124
|
-
validateGivenType(type, context) {
|
|
125
|
-
let property;
|
|
126
|
-
const typeString = type.getString(), propertyString = this.getString(); ///
|
|
127
|
-
context.trace(`Validating the '${propertyString}' property given the '${typeString}' type...`);
|
|
128
|
-
let validatesGivenType = false;
|
|
129
|
-
property = this.validate(context, (property, context)=>{
|
|
130
|
-
let validatesForwards = false;
|
|
131
|
-
const propertyName = property.getName(), typeProperties = type.getProperties(), typeProperty = typeProperties.find((typeProperty)=>{
|
|
132
|
-
const typePropertyComparesToPropertyName = typeProperty.comparePropertyName(propertyName);
|
|
133
|
-
if (typePropertyComparesToPropertyName) {
|
|
134
|
-
return true;
|
|
135
|
-
}
|
|
136
|
-
}) || null;
|
|
137
|
-
if (typeProperty !== null) {
|
|
138
|
-
const type = typeProperty.getType();
|
|
139
|
-
property.setType(type);
|
|
140
|
-
validatesForwards = true;
|
|
141
|
-
}
|
|
142
|
-
return validatesForwards;
|
|
143
|
-
});
|
|
144
|
-
if (property !== null) {
|
|
145
|
-
validatesGivenType = true;
|
|
146
|
-
}
|
|
147
|
-
if (validatesGivenType) {
|
|
148
|
-
context.debug(`...validated the '${propertyString}' property given the '${typeString}' type.`);
|
|
149
|
-
}
|
|
150
|
-
return property;
|
|
151
|
-
}
|
|
152
|
-
toJSON() {
|
|
153
|
-
const typeJSON = (0, _json.typeToTypeJSON)(this.type), string = this.getString();
|
|
154
|
-
let breakPoint;
|
|
155
|
-
breakPoint = this.getBreakPoint();
|
|
156
|
-
const breakPointJSON = (0, _breakPoint.breakPointToBreakPointJSON)(breakPoint);
|
|
157
|
-
breakPoint = breakPointJSON; ///
|
|
158
|
-
const type = typeJSON, json = {
|
|
159
|
-
string,
|
|
160
|
-
breakPoint,
|
|
161
|
-
type
|
|
162
|
-
};
|
|
163
|
-
return json;
|
|
164
|
-
}
|
|
165
|
-
static name = "Property";
|
|
166
|
-
static fromJSON(json, context) {
|
|
167
|
-
return (0, _context.instantiate)((context)=>{
|
|
168
|
-
const { string } = json, propertyNode = (0, _instantiate.instantiateProperty)(string, context), node = propertyNode, breakPoint = (0, _breakPoint.breakPointFromJSON)(json), name = (0, _element.nameFromPropertyNode)(propertyNode, context), type = (0, _json.typeFromJSON)(json, context);
|
|
169
|
-
context = null;
|
|
170
|
-
const property = new Property(context, string, node, breakPoint, name, type);
|
|
171
|
-
return property;
|
|
172
|
-
}, context);
|
|
173
|
-
}
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3Byb3BlcnR5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZVByb3BlcnR5IH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IG5hbWVGcm9tUHJvcGVydHlOb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyB0eXBlRnJvbUpTT04sIHR5cGVUb1R5cGVKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9qc29uXCI7XG5pbXBvcnQgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9icmVha1BvaW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBQcm9wZXJ0eSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIHR5cGUpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICB9XG5cbiAgZ2V0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlOb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBwcm9wZXJldHlOb2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gcHJvcGVyZXR5Tm9kZTtcbiAgfVxuXG4gIHNldE5hbWUobmFtZSkge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gIH1cblxuICBzZXRUeXBlKHR5cGUpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICB9XG5cbiAgaXNFcXVhbFRvKHByb3BlcnR5KSB7XG4gICAgY29uc3QgcHJvcGVydHlOb2RlID0gcHJvcGVydHkuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHByb3BlcnR5Tm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSksXG4gICAgICAgICAgZXF1YWxUbyA9IHByb3BlcnR5Tm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgbWF0Y2hQcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlKSB7XG4gICAgY29uc3Qgbm9kZSA9IHByb3BlcnR5Tm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBwcm9wZXJ0eU5vZGVNYXRjaGVzID0gbm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIHByb3BlcnR5Tm9kZU1hdGNoZXM7XG4gIH1cblxuICBjb21wYXJlUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSkge1xuICAgIGNvbnN0IGNvbXBhcmVzVG9Qcm9wZXJ0eU5hbWUgPSAodGhpcy5uYW1lID09PSBwcm9wZXJ0eU5hbWUpO1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9Qcm9wZXJ0eU5hbWU7XG4gIH1cblxuICB2ZXJpZnkocHJvcGVydGllcywgY29udGV4dCkge1xuICAgIGxldCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgcHJvcGVydHlTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3Byb3BlcnR5U3RyaW5nfScgcHJvcGVydHkuLi5gKTtcblxuICAgIGNvbnN0IG5hZW1WZXJpZmllcyA9IHRoaXMudmVyaWZ5TmFtZShwcm9wZXJ0aWVzLCBjb250ZXh0KTtcblxuICAgIGlmIChuYWVtVmVyaWZpZXMpIHtcbiAgICAgIHZlcmlmaWVzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtwcm9wZXJ0eVN0cmluZ30nIHByb3BlcnR5LmApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllcztcbiAgfVxuXG4gIHZlcmlmeU5hbWUocHJvcGVydGllcywgY29udGV4dCkge1xuICAgIGxldCBuYWVtVmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHByb3BlcnR5U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7cHJvcGVydHlTdHJpbmd9JyBwcm9wZXJ0eSdzIG5hbWUuLi5gKTtcblxuICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IHRoaXMubmFtZSwgLy8vXG4gICAgICAgICAgY291bnQgPSBwcm9wZXJ0aWVzLnJlZHVjZSgoY291bnQsIHByb3BlcnR5KSA9PiB7XG4gICAgICAgICAgICBpZiAocHJvcGVydHkgIT09IHRoaXMpIHtcbiAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHlDb21wYXJlc1RvUHJvcGVydHlOYW1lID0gcHJvcGVydHkuY29tcGFyZVByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpO1xuXG4gICAgICAgICAgICAgIGlmIChwcm9wZXJ0eUNvbXBhcmVzVG9Qcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjb3VudDtcbiAgICAgICAgICB9LCAwKTtcblxuICAgIGlmIChjb3VudCA9PT0gMCkge1xuICAgICAgbmFlbVZlcmlmaWVzID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3Byb3BlcnR5U3RyaW5nfScgcHJvcGVydHkgYXBwZWFycyBtb3JlIHRoYW4gb25jZS5gKTtcbiAgICB9XG5cbiAgICBpZiAobmFlbVZlcmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cHJvcGVydHlTdHJpbmd9JyBwcm9wZXJ0eSdzIG5hbWUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hZW1WZXJpZmllcztcbiAgfVxuXG4gIGZpbmRWYWxpZFByb3BlcnR5KGNvbnRleHQpIHtcbiAgICBjb25zdCBwcm9wZXJ0eU5vZGUgPSB0aGlzLmdldFByb3BlcnR5Tm9kZSgpLFxuICAgICAgICAgIHByb3BlcnR5ID0gY29udGV4dC5maW5kUHJvcGVydHlCeVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUpLFxuICAgICAgICAgIHZhbGlkUHJvcGVydHkgPSBwcm9wZXJ0eTsgLy8vXG5cbiAgICByZXR1cm4gdmFsaWRQcm9wZXJ0eTtcbiAgfVxuXG4gIHZhbGlkYXRlKGNvbnRleHQsIHZhbGlkYXRlRm9yd2FyZHMpIHtcbiAgICBsZXQgcHJvcGVydHkgPSBudWxsO1xuXG4gICAgY29uc3QgcHJvcGVydHlTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtwcm9wZXJ0eVN0cmluZ30nIHByb3BlcnR5Li4uYCk7XG5cbiAgICBsZXQgdmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCB2YWxpZFByb3BlcnR5ID0gdGhpcy5maW5kVmFsaWRQcm9wZXJ0eShjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZFByb3BlcnR5ICE9PSBudWxsKSB7XG4gICAgICBwcm9wZXJ0eSA9IHZhbGlkUHJvcGVydHk7IC8vL1xuXG4gICAgICBjb25zdCB2YWxpZGF0ZXNGb3J3YXJkID0gdmFsaWRhdGVGb3J3YXJkcyhwcm9wZXJ0eSwgY29udGV4dCk7XG5cbiAgICAgIGlmICh2YWxpZGF0ZXNGb3J3YXJkKSB7XG4gICAgICAgIHZhbGlkYXRlcyA9IHRydWU7XG5cbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke3Byb3BlcnR5U3RyaW5nfScgcHJvcGVydHkgaXMgYWxyZWFkeSB2YWxpZC5gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb3BlcnR5ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAge1xuICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXMsICAvLy9cbiAgICAgICAgICAgICAgdmFsaWRhdGVzRm9yd2FyZCA9IHZhbGlkYXRlRm9yd2FyZHMocHJvcGVydHksIGNvbnRleHQpO1xuXG4gICAgICAgIGlmICh2YWxpZGF0ZXNGb3J3YXJkKSB7XG4gICAgICAgICAgdmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpczsgIC8vL1xuXG4gICAgICAgIGNvbnRleHQuYWRkUHJvcGVydHkocHJvcGVydHkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7cHJvcGVydHlTdHJpbmd9JyBwcm9wZXJ0eS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydHk7XG4gIH1cblxuICB2YWxpZGF0ZUdpdmVuVHlwZSh0eXBlLCBjb250ZXh0KSB7XG4gICAgbGV0IHByb3BlcnR5O1xuXG4gICAgY29uc3QgdHlwZVN0cmluZyA9IHR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgcHJvcGVydHlTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtwcm9wZXJ0eVN0cmluZ30nIHByb3BlcnR5IGdpdmVuIHRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZS4uLmApO1xuXG4gICAgbGV0IHZhbGlkYXRlc0dpdmVuVHlwZSA9IGZhbHNlO1xuXG4gICAgcHJvcGVydHkgPSB0aGlzLnZhbGlkYXRlKGNvbnRleHQsIChwcm9wZXJ0eSwgY29udGV4dCkgPT4ge1xuICAgICAgbGV0IHZhbGlkYXRlc0ZvcndhcmRzID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IHByb3BlcnR5LmdldE5hbWUoKSxcbiAgICAgICAgICAgIHR5cGVQcm9wZXJ0aWVzID0gdHlwZS5nZXRQcm9wZXJ0aWVzKCksXG4gICAgICAgICAgICB0eXBlUHJvcGVydHkgPSB0eXBlUHJvcGVydGllcy5maW5kKCh0eXBlUHJvcGVydHkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgdHlwZVByb3BlcnR5Q29tcGFyZXNUb1Byb3BlcnR5TmFtZSA9IHR5cGVQcm9wZXJ0eS5jb21wYXJlUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSk7XG5cbiAgICAgICAgICAgICAgaWYgKHR5cGVQcm9wZXJ0eUNvbXBhcmVzVG9Qcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgICAgaWYgKHR5cGVQcm9wZXJ0eSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB0eXBlID0gdHlwZVByb3BlcnR5LmdldFR5cGUoKTtcblxuICAgICAgICBwcm9wZXJ0eS5zZXRUeXBlKHR5cGUpO1xuXG4gICAgICAgIHZhbGlkYXRlc0ZvcndhcmRzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbGlkYXRlc0ZvcndhcmRzO1xuICAgIH0pO1xuXG4gICAgaWYgKHByb3BlcnR5ICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXNHaXZlblR5cGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXNHaXZlblR5cGUpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7cHJvcGVydHlTdHJpbmd9JyBwcm9wZXJ0eSBnaXZlbiB0aGUgJyR7dHlwZVN0cmluZ30nIHR5cGUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnR5O1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IHR5cGVKU09OID0gdHlwZVRvVHlwZUpTT04odGhpcy50eXBlKSxcbiAgICAgICAgICBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBjb25zdCB0eXBlID0gdHlwZUpTT04sICAvLy9cbiAgICAgICAgICBqc29uID0ge1xuICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgYnJlYWtQb2ludCxcbiAgICAgICAgICAgIHR5cGVcbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiUHJvcGVydHlcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIHJldHVybiBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICBwcm9wZXJ0eU5vZGUgPSBpbnN0YW50aWF0ZVByb3BlcnR5KHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICBub2RlID0gcHJvcGVydHlOb2RlLCAgLy8vXG4gICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgbmFtZSA9IG5hbWVGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICB0eXBlID0gdHlwZUZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgICAgY29uc3QgcHJvcGVydHkgPSBuZXcgUHJvcGVydHkoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lLCB0eXBlKTtcblxuICAgICAgcmV0dXJuIHByb3BlcnR5O1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6WyJkZWZpbmUiLCJQcm9wZXJ0eSIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJuYW1lIiwidHlwZSIsImdldE5hbWUiLCJnZXRUeXBlIiwiZ2V0UHJvcGVydHlOb2RlIiwiZ2V0Tm9kZSIsInByb3BlcmV0eU5vZGUiLCJzZXROYW1lIiwic2V0VHlwZSIsImlzRXF1YWxUbyIsInByb3BlcnR5IiwicHJvcGVydHlOb2RlIiwicHJvcGVydHlOb2RlTWF0Y2hlcyIsIm1hdGNoUHJvcGVydHlOb2RlIiwiZXF1YWxUbyIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwiY29tcGFyZVByb3BlcnR5TmFtZSIsInByb3BlcnR5TmFtZSIsImNvbXBhcmVzVG9Qcm9wZXJ0eU5hbWUiLCJ2ZXJpZnkiLCJwcm9wZXJ0aWVzIiwidmVyaWZpZXMiLCJwcm9wZXJ0eVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwibmFlbVZlcmlmaWVzIiwidmVyaWZ5TmFtZSIsImRlYnVnIiwiY291bnQiLCJyZWR1Y2UiLCJwcm9wZXJ0eUNvbXBhcmVzVG9Qcm9wZXJ0eU5hbWUiLCJmaW5kVmFsaWRQcm9wZXJ0eSIsImZpbmRQcm9wZXJ0eUJ5UHJvcGVydHlOb2RlIiwidmFsaWRQcm9wZXJ0eSIsInZhbGlkYXRlIiwidmFsaWRhdGVGb3J3YXJkcyIsInZhbGlkYXRlcyIsInZhbGlkYXRlc0ZvcndhcmQiLCJhZGRQcm9wZXJ0eSIsInZhbGlkYXRlR2l2ZW5UeXBlIiwidHlwZVN0cmluZyIsInZhbGlkYXRlc0dpdmVuVHlwZSIsInZhbGlkYXRlc0ZvcndhcmRzIiwidHlwZVByb3BlcnRpZXMiLCJnZXRQcm9wZXJ0aWVzIiwidHlwZVByb3BlcnR5IiwiZmluZCIsInR5cGVQcm9wZXJ0eUNvbXBhcmVzVG9Qcm9wZXJ0eU5hbWUiLCJ0b0pTT04iLCJ0eXBlSlNPTiIsInR5cGVUb1R5cGVKU09OIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJqc29uIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlUHJvcGVydHkiLCJicmVha1BvaW50RnJvbUpTT04iLCJuYW1lRnJvbVByb3BlcnR5Tm9kZSIsInR5cGVGcm9tSlNPTiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBV0E7OztlQUFBOzs7Z0NBVHdCOzBCQUVEO3lCQUNLOzZCQUNRO3lCQUNDO3NCQUNROzRCQUNrQjtNQUUvRCxXQUFlQSxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLGlCQUFpQkMsdUJBQU87SUFDbEQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxJQUFJLEVBQUVDLElBQUksQ0FBRTtRQUN6RCxLQUFLLENBQUNMLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsSUFBSSxHQUFHQTtRQUNaLElBQUksQ0FBQ0MsSUFBSSxHQUFHQTtJQUNkO0lBRUFDLFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQ0YsSUFBSTtJQUNsQjtJQUVBRyxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUNGLElBQUk7SUFDbEI7SUFFQUcsa0JBQWtCO1FBQ2hCLE1BQU1OLE9BQU8sSUFBSSxDQUFDTyxPQUFPLElBQ25CQyxnQkFBZ0JSLE1BQU0sR0FBRztRQUUvQixPQUFPUTtJQUNUO0lBRUFDLFFBQVFQ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
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "default", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return _default;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _occamlanguages = require("occam-languages");
|
|
12
|
-
const _elements = require("../elements");
|
|
13
|
-
const _context = require("../utilities/context");
|
|
14
|
-
const _instantiate = require("../process/instantiate");
|
|
15
|
-
const _element = require("../utilities/element");
|
|
16
|
-
const _breakPoint = require("../utilities/breakPoint");
|
|
17
|
-
const _default = (0, _elements.define)(class PropertyRelation extends _occamlanguages.Element {
|
|
18
|
-
constructor(context, string, node, breakPoint, term, property){
|
|
19
|
-
super(context, string, node, breakPoint);
|
|
20
|
-
this.term = term;
|
|
21
|
-
this.property = property;
|
|
22
|
-
}
|
|
23
|
-
getTerm() {
|
|
24
|
-
return this.term;
|
|
25
|
-
}
|
|
26
|
-
getProperty() {
|
|
27
|
-
return this.property;
|
|
28
|
-
}
|
|
29
|
-
getPropertyRelationNode() {
|
|
30
|
-
const node = this.getNode(), propertyRelationNode = node; ///
|
|
31
|
-
return propertyRelationNode;
|
|
32
|
-
}
|
|
33
|
-
getType() {
|
|
34
|
-
return this.property.getType();
|
|
35
|
-
}
|
|
36
|
-
isEqualTo(propertyRelation) {
|
|
37
|
-
const propertyRelationNode = propertyRelation.getNode(), propertyRelationNodeMatches = this.matchPropertyRelationNode(propertyRelationNode), equalTo = propertyRelationNodeMatches; ///
|
|
38
|
-
return equalTo;
|
|
39
|
-
}
|
|
40
|
-
matchPropertyRelationNode(propertyRelationNode) {
|
|
41
|
-
const node = propertyRelationNode, nodeMatches = this.matchNode(node), propertyRelationNodeMatches = nodeMatches; ///
|
|
42
|
-
return propertyRelationNodeMatches;
|
|
43
|
-
}
|
|
44
|
-
findValidPropertyRelation(context) {
|
|
45
|
-
const propertyRelationNode = this.getPropertyRelationNode(), propertyRelation = context.findPropertyRelationByPropertyRelationNode(propertyRelationNode), validPropertyRelation = propertyRelation; ///
|
|
46
|
-
return validPropertyRelation;
|
|
47
|
-
}
|
|
48
|
-
validate(context) {
|
|
49
|
-
let propertyRelation = null;
|
|
50
|
-
const propertyRelationString = this.getString(); ///
|
|
51
|
-
context.trace(`Validating the '${propertyRelationString}' property relation...`);
|
|
52
|
-
let validates = false;
|
|
53
|
-
const validPropertyRelation = this.findValidPropertyRelation(context);
|
|
54
|
-
if (validPropertyRelation) {
|
|
55
|
-
validates = true;
|
|
56
|
-
propertyRelation = validPropertyRelation; ///
|
|
57
|
-
context.debug(`...the '${propertyRelationString}' property relation is already valid.`);
|
|
58
|
-
} else {
|
|
59
|
-
const termValidates = this.validateTerm(context);
|
|
60
|
-
if (termValidates) {
|
|
61
|
-
const propertyValidates = this.validateProperty(context);
|
|
62
|
-
validates = propertyValidates;
|
|
63
|
-
}
|
|
64
|
-
if (validates) {
|
|
65
|
-
propertyRelation = this; ///
|
|
66
|
-
context.addPropertyRelation(propertyRelation);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
if (validates) {
|
|
70
|
-
context.debug(`...validated the '${propertyRelationString}' property relation.`);
|
|
71
|
-
}
|
|
72
|
-
return propertyRelation;
|
|
73
|
-
}
|
|
74
|
-
validateTerm(context) {
|
|
75
|
-
let termValidates = false;
|
|
76
|
-
const propertyRelationString = this.getString(); ///
|
|
77
|
-
context.trace(`Validating the '${propertyRelationString}' property relation's term...`);
|
|
78
|
-
const term = this.term.validate(context, (term, context)=>{
|
|
79
|
-
const validatesForwards = true;
|
|
80
|
-
return validatesForwards;
|
|
81
|
-
});
|
|
82
|
-
if (term !== null) {
|
|
83
|
-
this.term = term;
|
|
84
|
-
termValidates = true;
|
|
85
|
-
}
|
|
86
|
-
if (termValidates) {
|
|
87
|
-
context.debug(`...validated the '${propertyRelationString}' property relation's term.`);
|
|
88
|
-
}
|
|
89
|
-
return termValidates;
|
|
90
|
-
}
|
|
91
|
-
validateProperty(context) {
|
|
92
|
-
let propertyValidates = false;
|
|
93
|
-
const propertyRelationString = this.getString(); ///
|
|
94
|
-
context.trace(`Validating the '${propertyRelationString}' property relation's property...`);
|
|
95
|
-
const type = this.term.getType(), property = this.property.validateGivenType(type, context);
|
|
96
|
-
if (property !== null) {
|
|
97
|
-
this.property = property;
|
|
98
|
-
propertyValidates = true;
|
|
99
|
-
}
|
|
100
|
-
if (propertyValidates) {
|
|
101
|
-
context.trace(`...validated the '${propertyRelationString}' property relation's property.`);
|
|
102
|
-
}
|
|
103
|
-
return propertyValidates;
|
|
104
|
-
}
|
|
105
|
-
static name = "PropertyRelation";
|
|
106
|
-
toJSON() {
|
|
107
|
-
const string = this.getString();
|
|
108
|
-
let breakPoint;
|
|
109
|
-
breakPoint = this.getBreakPoint();
|
|
110
|
-
const breakPointJSON = (0, _breakPoint.breakPointToBreakPointJSON)(breakPoint);
|
|
111
|
-
breakPoint = breakPointJSON; ///
|
|
112
|
-
const json = {
|
|
113
|
-
string,
|
|
114
|
-
breakPoint
|
|
115
|
-
};
|
|
116
|
-
return json;
|
|
117
|
-
}
|
|
118
|
-
static fromJSON(json, context) {
|
|
119
|
-
return (0, _context.instantiate)((context)=>{
|
|
120
|
-
const { string } = json, propertyRelationNode = (0, _instantiate.instantiatePropertyRelation)(string, context), node = propertyRelationNode, breakPoint = (0, _breakPoint.breakPointFromJSON)(json), term = termFromPropertyRelationNode(propertyRelationNode, context), property = (0, _element.propertyFromPropertyRelationNode)(propertyRelationNode, context);
|
|
121
|
-
context = null;
|
|
122
|
-
const propertyRelation = new PropertyRelation(context, string, node, breakPoint, term, property);
|
|
123
|
-
return propertyRelation;
|
|
124
|
-
}, context);
|
|
125
|
-
}
|
|
126
|
-
});
|
|
127
|
-
function termFromPropertyRelationNode(propertyRelationNode, context) {
|
|
128
|
-
const termNode = propertyRelationNode.getTermNode(), term = context.findTermByTermNode(termNode);
|
|
129
|
-
return term;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3Byb3BlcnR5UmVsYXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlUHJvcGVydHlSZWxhdGlvbiB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyBwcm9wZXJ0eUZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuaW1wb3J0IHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvYnJlYWtQb2ludFwiO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgUHJvcGVydHlSZWxhdGlvbiBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHByb3BlcnR5KSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMudGVybSA9IHRlcm07XG4gICAgdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5O1xuICB9XG5cbiAgZ2V0VGVybSgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXJtO1xuICB9XG5cbiAgZ2V0UHJvcGVydHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHk7XG4gIH1cblxuICBnZXRQcm9wZXJ0eVJlbGF0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgcHJvcGVydHlSZWxhdGlvbk5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gcHJvcGVydHlSZWxhdGlvbk5vZGU7XG4gIH1cblxuICBnZXRUeXBlKCkgeyByZXR1cm4gdGhpcy5wcm9wZXJ0eS5nZXRUeXBlKCk7IH1cblxuICBpc0VxdWFsVG8ocHJvcGVydHlSZWxhdGlvbikge1xuICAgIGNvbnN0IHByb3BlcnR5UmVsYXRpb25Ob2RlID0gcHJvcGVydHlSZWxhdGlvbi5nZXROb2RlKCksXG4gICAgICAgICAgcHJvcGVydHlSZWxhdGlvbk5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaFByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlKSxcbiAgICAgICAgICBlcXVhbFRvID0gcHJvcGVydHlSZWxhdGlvbk5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIG1hdGNoUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUpIHtcbiAgICBjb25zdCBub2RlID0gcHJvcGVydHlSZWxhdGlvbk5vZGUsIC8vL1xuICAgICAgICAgIG5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUobm9kZSksXG4gICAgICAgICAgcHJvcGVydHlSZWxhdGlvbk5vZGVNYXRjaGVzID0gbm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb25Ob2RlTWF0Y2hlcztcbiAgfVxuXG4gIGZpbmRWYWxpZFByb3BlcnR5UmVsYXRpb24oY29udGV4dCkge1xuICAgIGNvbnN0IHByb3BlcnR5UmVsYXRpb25Ob2RlID0gdGhpcy5nZXRQcm9wZXJ0eVJlbGF0aW9uTm9kZSgpLFxuICAgICAgICAgIHByb3BlcnR5UmVsYXRpb24gPSBjb250ZXh0LmZpbmRQcm9wZXJ0eVJlbGF0aW9uQnlQcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSksXG4gICAgICAgICAgdmFsaWRQcm9wZXJ0eVJlbGF0aW9uID0gcHJvcGVydHlSZWxhdGlvbjsgLy8vXG5cbiAgICByZXR1cm4gdmFsaWRQcm9wZXJ0eVJlbGF0aW9uO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCkge1xuICAgIGxldCBwcm9wZXJ0eVJlbGF0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHByb3BlcnR5UmVsYXRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Byb3BlcnR5UmVsYXRpb25TdHJpbmd9JyBwcm9wZXJ0eSByZWxhdGlvbi4uLmApO1xuXG4gICAgbGV0IHZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgdmFsaWRQcm9wZXJ0eVJlbGF0aW9uID0gdGhpcy5maW5kVmFsaWRQcm9wZXJ0eVJlbGF0aW9uKGNvbnRleHQpO1xuXG4gICAgaWYgKHZhbGlkUHJvcGVydHlSZWxhdGlvbikge1xuICAgICAgdmFsaWRhdGVzID0gdHJ1ZTtcblxuICAgICAgcHJvcGVydHlSZWxhdGlvbiA9IHZhbGlkUHJvcGVydHlSZWxhdGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHtwcm9wZXJ0eVJlbGF0aW9uU3RyaW5nfScgcHJvcGVydHkgcmVsYXRpb24gaXMgYWxyZWFkeSB2YWxpZC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGVybVZhbGlkYXRlcyA9IHRoaXMudmFsaWRhdGVUZXJtKGNvbnRleHQpO1xuXG4gICAgICBpZiAodGVybVZhbGlkYXRlcykge1xuICAgICAgICBjb25zdCBwcm9wZXJ0eVZhbGlkYXRlcyA9IHRoaXMudmFsaWRhdGVQcm9wZXJ0eShjb250ZXh0KTtcblxuICAgICAgICB2YWxpZGF0ZXMgPSBwcm9wZXJ0eVZhbGlkYXRlcztcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICBwcm9wZXJ0eVJlbGF0aW9uID0gdGhpczsgLy8vXG5cbiAgICAgICAgY29udGV4dC5hZGRQcm9wZXJ0eVJlbGF0aW9uKHByb3BlcnR5UmVsYXRpb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7cHJvcGVydHlSZWxhdGlvblN0cmluZ30nIHByb3BlcnR5IHJlbGF0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wZXJ0eVJlbGF0aW9uO1xuICB9XG5cbiAgdmFsaWRhdGVUZXJtKGNvbnRleHQpIHtcbiAgICBsZXQgdGVybVZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgcHJvcGVydHlSZWxhdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7cHJvcGVydHlSZWxhdGlvblN0cmluZ30nIHByb3BlcnR5IHJlbGF0aW9uJ3MgdGVybS4uLmApO1xuXG4gICAgY29uc3QgdGVybSA9IHRoaXMudGVybS52YWxpZGF0ZShjb250ZXh0LCAodGVybSwgY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgdmFsaWRhdGVzRm9yd2FyZHMgPSB0cnVlO1xuXG4gICAgICByZXR1cm4gdmFsaWRhdGVzRm9yd2FyZHM7XG4gICAgfSk7XG5cbiAgICBpZiAodGVybSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy50ZXJtID0gdGVybTtcblxuICAgICAgdGVybVZhbGlkYXRlcyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRlcm1WYWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7cHJvcGVydHlSZWxhdGlvblN0cmluZ30nIHByb3BlcnR5IHJlbGF0aW9uJ3MgdGVybS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVybVZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlUHJvcGVydHkoY29udGV4dCkge1xuICAgIGxldCBwcm9wZXJ0eVZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgcHJvcGVydHlSZWxhdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7cHJvcGVydHlSZWxhdGlvblN0cmluZ30nIHByb3BlcnR5IHJlbGF0aW9uJ3MgcHJvcGVydHkuLi5gKTtcblxuICAgIGNvbnN0IHR5cGUgPSB0aGlzLnRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgIHByb3BlcnR5ID0gdGhpcy5wcm9wZXJ0eS52YWxpZGF0ZUdpdmVuVHlwZSh0eXBlLCBjb250ZXh0KTtcblxuICAgIGlmIChwcm9wZXJ0eSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5O1xuXG4gICAgICBwcm9wZXJ0eVZhbGlkYXRlcyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHByb3BlcnR5VmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LnRyYWNlKGAuLi52YWxpZGF0ZWQgdGhlICcke3Byb3BlcnR5UmVsYXRpb25TdHJpbmd9JyBwcm9wZXJ0eSByZWxhdGlvbidzIHByb3BlcnR5LmApO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wZXJ0eVZhbGlkYXRlcztcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJQcm9wZXJ0eVJlbGF0aW9uXCI7XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICBzdHJpbmcsXG4gICAgICBicmVha1BvaW50XG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICByZXR1cm4gaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgcHJvcGVydHlSZWxhdGlvbk5vZGUgPSBpbnN0YW50aWF0ZVByb3BlcnR5UmVsYXRpb24oc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgIG5vZGUgPSBwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgIC8vL1xuICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgIHRlcm0gPSB0ZXJtRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydHlGcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgICAgY29uc3QgcHJvcGVydHlSZWxhdGlvbiA9IG5ldyBQcm9wZXJ0eVJlbGF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgcHJvcGVydHkpO1xuXG4gICAgICByZXR1cm4gcHJvcGVydHlSZWxhdGlvbjtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIHRlcm1Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBwcm9wZXJ0eVJlbGF0aW9uTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuIl0sIm5hbWVzIjpbImRlZmluZSIsIlByb3BlcnR5UmVsYXRpb24iLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwidGVybSIsInByb3BlcnR5IiwiZ2V0VGVybSIsImdldFByb3BlcnR5IiwiZ2V0UHJvcGVydHlSZWxhdGlvbk5vZGUiLCJnZXROb2RlIiwicHJvcGVydHlSZWxhdGlvbk5vZGUiLCJnZXRUeXBlIiwiaXNFcXVhbFRvIiwicHJvcGVydHlSZWxhdGlvbiIsInByb3BlcnR5UmVsYXRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoUHJvcGVydHlSZWxhdGlvbk5vZGUiLCJlcXVhbFRvIiwibm9kZU1hdGNoZXMiLCJtYXRjaE5vZGUiLCJmaW5kVmFsaWRQcm9wZXJ0eVJlbGF0aW9uIiwiZmluZFByb3BlcnR5UmVsYXRpb25CeVByb3BlcnR5UmVsYXRpb25Ob2RlIiwidmFsaWRQcm9wZXJ0eVJlbGF0aW9uIiwidmFsaWRhdGUiLCJwcm9wZXJ0eVJlbGF0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ2YWxpZGF0ZXMiLCJkZWJ1ZyIsInRlcm1WYWxpZGF0ZXMiLCJ2YWxpZGF0ZVRlcm0iLCJwcm9wZXJ0eVZhbGlkYXRlcyIsInZhbGlkYXRlUHJvcGVydHkiLCJhZGRQcm9wZXJ0eVJlbGF0aW9uIiwidmFsaWRhdGVzRm9yd2FyZHMiLCJ0eXBlIiwidmFsaWRhdGVHaXZlblR5cGUiLCJuYW1lIiwidG9KU09OIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJqc29uIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlUHJvcGVydHlSZWxhdGlvbiIsImJyZWFrUG9pbnRGcm9tSlNPTiIsInRlcm1Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUiLCJwcm9wZXJ0eUZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZSIsInRlcm1Ob2RlIiwiZ2V0VGVybU5vZGUiLCJmaW5kVGVybUJ5VGVybU5vZGUiXSwibWFwcGlu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
|
package/lib/element/reference.js
DELETED
|
@@ -1,227 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "default", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return _default;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _occamlanguages = require("occam-languages");
|
|
12
|
-
const _elements = require("../elements");
|
|
13
|
-
const _instantiate = require("../process/instantiate");
|
|
14
|
-
const _metaTypeNames = require("../metaTypeNames");
|
|
15
|
-
const _breakPoint = require("../utilities/breakPoint");
|
|
16
|
-
const _context = require("../utilities/context");
|
|
17
|
-
const _element = require("../utilities/element");
|
|
18
|
-
const _default = (0, _elements.define)(class Reference extends _occamlanguages.Element {
|
|
19
|
-
constructor(context, string, node, breakPoint, metavariable, topLevelMetaAssertion){
|
|
20
|
-
super(context, string, node, breakPoint);
|
|
21
|
-
this.metavariable = metavariable;
|
|
22
|
-
this.topLevelMetaAssertion = topLevelMetaAssertion;
|
|
23
|
-
}
|
|
24
|
-
getMetavariable() {
|
|
25
|
-
return this.metavariable;
|
|
26
|
-
}
|
|
27
|
-
getTopLevelMetaAssertion() {
|
|
28
|
-
return this.topLevelMetaAssertion;
|
|
29
|
-
}
|
|
30
|
-
getReferenceNode() {
|
|
31
|
-
const node = this.getNode(), referenceNode = node; ///
|
|
32
|
-
return referenceNode;
|
|
33
|
-
}
|
|
34
|
-
getMetavariableNode() {
|
|
35
|
-
const metavariableNode = this.metavariable.getNode();
|
|
36
|
-
return metavariableNode;
|
|
37
|
-
}
|
|
38
|
-
getMetaType() {
|
|
39
|
-
return this.metavariable.getMetaType();
|
|
40
|
-
}
|
|
41
|
-
isEqualTo(reference) {
|
|
42
|
-
const referenceNode = reference.getNode(), referenceNodeMatches = this.matchReferenceNode(referenceNode), equalTo = referenceNodeMatches; ///
|
|
43
|
-
return equalTo;
|
|
44
|
-
}
|
|
45
|
-
matchReferenceNode(referenceNode) {
|
|
46
|
-
const node = referenceNode, nodeMatches = this.matchNode(node), referenceNodeMatches = nodeMatches; ///
|
|
47
|
-
return referenceNodeMatches;
|
|
48
|
-
}
|
|
49
|
-
matchMetavariableNode(metavariableNode) {
|
|
50
|
-
return this.metavariable.matchMetavariableNode(metavariableNode);
|
|
51
|
-
}
|
|
52
|
-
compareParameter(parameter) {
|
|
53
|
-
let comparesToParamter = false;
|
|
54
|
-
const singular = this.isSingular();
|
|
55
|
-
if (singular) {
|
|
56
|
-
const parameterName = parameter.getName();
|
|
57
|
-
if (parameterName !== null) {
|
|
58
|
-
const metavariableName = this.getMetavariableName();
|
|
59
|
-
if (parameterName === metavariableName) {
|
|
60
|
-
comparesToParamter = true;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
return comparesToParamter;
|
|
65
|
-
}
|
|
66
|
-
compareTopLevelMetaAssertion(topLevelMetaAssertion) {
|
|
67
|
-
let topLevelMetaAssertionCompares = false;
|
|
68
|
-
const context = this.getContext(), referenceString = this.getString(), topLevelMetaAssertionString = topLevelMetaAssertion.getString();
|
|
69
|
-
context.trace(`Comparing the '${topLevelMetaAssertionString}' top level meta-assertion to the '${referenceString}' reference...`);
|
|
70
|
-
const label = topLevelMetaAssertion.getLabel(), labelUnifies = this.unifyLabel(label, context);
|
|
71
|
-
if (labelUnifies) {
|
|
72
|
-
topLevelMetaAssertionCompares = true;
|
|
73
|
-
}
|
|
74
|
-
if (topLevelMetaAssertionCompares) {
|
|
75
|
-
context.trace(`...compared the '${topLevelMetaAssertionString}' top level meta-assertion to the '${referenceString}' reference.`);
|
|
76
|
-
}
|
|
77
|
-
return topLevelMetaAssertionCompares;
|
|
78
|
-
}
|
|
79
|
-
findValidReference(context) {
|
|
80
|
-
const referenceNode = this.getReferenceNode(), reference = context.findReferenceByReferenceNode(referenceNode), validReference = reference; ///
|
|
81
|
-
return validReference;
|
|
82
|
-
}
|
|
83
|
-
validate(context) {
|
|
84
|
-
let reference = null;
|
|
85
|
-
const referenceString = this.getString(); ///
|
|
86
|
-
context.trace(`Validating the '${referenceString}' reference...`);
|
|
87
|
-
let validates = false;
|
|
88
|
-
const validReference = this.findValidReference(context);
|
|
89
|
-
if (validReference) {
|
|
90
|
-
validates = true;
|
|
91
|
-
reference = validReference; ///
|
|
92
|
-
context.debug(`...the '${referenceString}' reference is already valid.`);
|
|
93
|
-
} else {
|
|
94
|
-
const temporaryContext = context; ///
|
|
95
|
-
context = this.getContext();
|
|
96
|
-
(0, _context.attempt)((context)=>{
|
|
97
|
-
const metavariableValidates = this.validateMetavariable(context);
|
|
98
|
-
if (metavariableValidates) {
|
|
99
|
-
const metaType = this.metavariable.getMetaType();
|
|
100
|
-
if (metaType === null) {
|
|
101
|
-
validates = true;
|
|
102
|
-
} else {
|
|
103
|
-
const referenceMetaTypeName = _metaTypeNames.REFERENCE_META_TYPE_NAME, referenceMetaType = context.findMetaTypeByMetaTypeName(referenceMetaTypeName), metavariableMetaTypeEqualToReferenceMetaType = this.metavariable.isMetaTypeEqualTo(referenceMetaType);
|
|
104
|
-
if (metavariableMetaTypeEqualToReferenceMetaType) {
|
|
105
|
-
validates = true;
|
|
106
|
-
} else {
|
|
107
|
-
const metaTypeString = metaType.getString(), metavariableString = this.metavariable.getString(), referenceMetaTypeString = referenceMetaType.getString();
|
|
108
|
-
context.debug(`The '${referenceString}' reference's '${metavariableString}' metavariable's '${metaTypeString}' meta-type should be the '${referenceMetaTypeString}' meta-type.`);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
if (validates) {
|
|
113
|
-
this.commit(context);
|
|
114
|
-
}
|
|
115
|
-
}, context);
|
|
116
|
-
context = temporaryContext; ///
|
|
117
|
-
if (validates) {
|
|
118
|
-
reference = this; ///
|
|
119
|
-
context.addReference(reference);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
if (validates) {
|
|
123
|
-
context.debug(`...validated the '${referenceString}' reference.`);
|
|
124
|
-
}
|
|
125
|
-
return reference;
|
|
126
|
-
}
|
|
127
|
-
validateMetavariable(context) {
|
|
128
|
-
let metavariableValidates = false;
|
|
129
|
-
const referenceString = this.getString(); ///
|
|
130
|
-
context.trace(`Validating the '${referenceString}' reference's metavariable...'`);
|
|
131
|
-
const metavariable = this.metavariable.validate(context);
|
|
132
|
-
if (metavariable !== null) {
|
|
133
|
-
this.metavariable = metavariable;
|
|
134
|
-
metavariableValidates = true;
|
|
135
|
-
}
|
|
136
|
-
if (metavariableValidates) {
|
|
137
|
-
context.debug(`...validated the '${referenceString}' reference's metavariable.'`);
|
|
138
|
-
}
|
|
139
|
-
return metavariableValidates;
|
|
140
|
-
}
|
|
141
|
-
unifyLabel(label, context) {
|
|
142
|
-
let labelUnifies = false;
|
|
143
|
-
const labelString = label.getString(), referenceString = this.getString(); ///
|
|
144
|
-
context.trace(`Unifying the '${labelString}' label with the '${referenceString}' reference...`);
|
|
145
|
-
const labelContext = label.getContext(), generalContext = context, specificContext = labelContext; ///
|
|
146
|
-
(0, _context.reconcile)((specificContext)=>{
|
|
147
|
-
const metavariable = label.getMetavariable(), metavariableUnifies = this.unifyMetavariable(metavariable, generalContext, specificContext);
|
|
148
|
-
if (metavariableUnifies) {
|
|
149
|
-
labelUnifies = true;
|
|
150
|
-
}
|
|
151
|
-
}, specificContext);
|
|
152
|
-
if (labelUnifies) {
|
|
153
|
-
context.debug(`...unified the '${labelString}' label with the '${referenceString}' reference.`);
|
|
154
|
-
}
|
|
155
|
-
return labelUnifies;
|
|
156
|
-
}
|
|
157
|
-
unifyMetavariable(metavariable, generalContext, specificContext) {
|
|
158
|
-
let metavariableUnifies = false;
|
|
159
|
-
const context = specificContext, referenceString = this.getString(), metavariableString = metavariable.getString();
|
|
160
|
-
context.trace(`Unifying the '${metavariableString}' metavariable with the '${referenceString}' reference...`);
|
|
161
|
-
const metavariableUnifiesIntrinsically = this.metavariable.unifyMetavariableIntrinsically(metavariable, generalContext, specificContext);
|
|
162
|
-
if (metavariableUnifiesIntrinsically) {
|
|
163
|
-
metavariableUnifies = true;
|
|
164
|
-
}
|
|
165
|
-
if (metavariableUnifies) {
|
|
166
|
-
context.debug(`...unified the '${metavariableString}' metavariable with the '${referenceString}' reference.`);
|
|
167
|
-
}
|
|
168
|
-
return metavariableUnifies;
|
|
169
|
-
}
|
|
170
|
-
unifyTopLevelMetaAssertion(topLevelMetaAssertion, context) {
|
|
171
|
-
let topLevelMetaAssertionUUnifies = false;
|
|
172
|
-
const label = topLevelMetaAssertion.getLabel(), referenceString = this.getString(), topLevelMetaAssertionString = topLevelMetaAssertion.getString();
|
|
173
|
-
context.trace(`Unifying the '${topLevelMetaAssertionString}' top level meta-assertion's label with the '${referenceString}' reference...`);
|
|
174
|
-
const labelContext = label.getContext(), referenceContext = this.getContext(), generalContext = referenceContext, specificContext = labelContext; ///
|
|
175
|
-
(0, _context.reconcile)((specificContext)=>{
|
|
176
|
-
const metavariable = label.getMetavariable(), metavariableUnifies = this.unifyMetavariable(metavariable, generalContext, specificContext);
|
|
177
|
-
if (metavariableUnifies) {
|
|
178
|
-
this.topLevelMetaAssertion = topLevelMetaAssertion;
|
|
179
|
-
specificContext.commit(context);
|
|
180
|
-
topLevelMetaAssertionUUnifies = true;
|
|
181
|
-
}
|
|
182
|
-
}, specificContext);
|
|
183
|
-
if (topLevelMetaAssertionUUnifies) {
|
|
184
|
-
context.debug(`...unified the '${topLevelMetaAssertionString}' top level meta-assertion's label with the '${referenceString}' reference.`);
|
|
185
|
-
}
|
|
186
|
-
return topLevelMetaAssertionUUnifies;
|
|
187
|
-
}
|
|
188
|
-
toJSON() {
|
|
189
|
-
const context = this.getContext();
|
|
190
|
-
return (0, _context.serialise)((context)=>{
|
|
191
|
-
const string = this.getString();
|
|
192
|
-
let breakPoint;
|
|
193
|
-
breakPoint = this.getBreakPoint();
|
|
194
|
-
const breakPointJSON = (0, _breakPoint.breakPointToBreakPointJSON)(breakPoint);
|
|
195
|
-
breakPoint = breakPointJSON; ///
|
|
196
|
-
const json = {
|
|
197
|
-
context,
|
|
198
|
-
string,
|
|
199
|
-
breakPoint
|
|
200
|
-
};
|
|
201
|
-
return json;
|
|
202
|
-
}, context);
|
|
203
|
-
}
|
|
204
|
-
static name = "Reference";
|
|
205
|
-
static fromJSON(json, context) {
|
|
206
|
-
let reference;
|
|
207
|
-
(0, _context.instantiate)((context)=>{
|
|
208
|
-
(0, _context.unserialise)((json, context)=>{
|
|
209
|
-
const { string } = json, referenceNode = (0, _instantiate.instantiateReference)(string, context), node = referenceNode, breakPoint = (0, _breakPoint.breakPointFromJSON)(json), metavariable = (0, _element.metavariableFromReferenceNode)(referenceNode, context), topLevelMetaAssertion = (0, _element.topLevelMetaAssertionFromReferenceNode)(referenceNode, context);
|
|
210
|
-
reference = new Reference(context, string, node, breakPoint, metavariable, topLevelMetaAssertion);
|
|
211
|
-
}, json, context);
|
|
212
|
-
}, context);
|
|
213
|
-
return reference;
|
|
214
|
-
}
|
|
215
|
-
static fromReferenceString(referenceString, context) {
|
|
216
|
-
let reference;
|
|
217
|
-
(0, _context.ablate)((context)=>{
|
|
218
|
-
(0, _context.instantiate)((context)=>{
|
|
219
|
-
const string = referenceString, referenceNode = (0, _instantiate.instantiateReference)(string, context);
|
|
220
|
-
reference = (0, _element.referenceFromReferenceNode)(referenceNode, context);
|
|
221
|
-
}, context);
|
|
222
|
-
}, context);
|
|
223
|
-
return reference;
|
|
224
|
-
}
|
|
225
|
-
});
|
|
226
|
-
|
|
227
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3JlZmVyZW5jZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZVJlZmVyZW5jZSB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyBSRUZFUkVOQ0VfTUVUQV9UWVBFX05BTUUgfSBmcm9tIFwiLi4vbWV0YVR5cGVOYW1lc1wiO1xuaW1wb3J0IHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvYnJlYWtQb2ludFwiO1xuaW1wb3J0IHsgYWJsYXRlLCBhdHRlbXB0LCBzZXJpYWxpc2UsIHJlY29uY2lsZSwgdW5zZXJpYWxpc2UsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyByZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZSwgbWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUsIHRvcExldmVsTWV0YUFzc2VydGlvbkZyb21SZWZlcmVuY2VOb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBSZWZlcmVuY2UgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBtZXRhdmFyaWFibGUsIHRvcExldmVsTWV0YUFzc2VydGlvbikge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLm1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZTtcbiAgICB0aGlzLnRvcExldmVsTWV0YUFzc2VydGlvbiA9IHRvcExldmVsTWV0YUFzc2VydGlvbjtcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGU7XG4gIH1cblxuICBnZXRUb3BMZXZlbE1ldGFBc3NlcnRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9wTGV2ZWxNZXRhQXNzZXJ0aW9uO1xuICB9XG5cbiAgZ2V0UmVmZXJlbmNlTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgcmVmZXJlbmNlTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZU5vZGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVOb2RlKCkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSB0aGlzLm1ldGF2YXJpYWJsZS5nZXROb2RlKCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZTtcbiAgfVxuXG4gIGdldE1ldGFUeXBlKCkgeyByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUuZ2V0TWV0YVR5cGUoKTsgfVxuXG4gIGlzRXF1YWxUbyhyZWZlcmVuY2UpIHtcbiAgICBjb25zdCByZWZlcmVuY2VOb2RlID0gcmVmZXJlbmNlLmdldE5vZGUoKSxcbiAgICAgICAgICByZWZlcmVuY2VOb2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hSZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSByZWZlcmVuY2VOb2RlTWF0Y2hlczsgIC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsVG87XG4gIH1cblxuICBtYXRjaFJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSByZWZlcmVuY2VOb2RlLCAvLy9cbiAgICAgICAgICBub2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hOb2RlKG5vZGUpLFxuICAgICAgICAgIHJlZmVyZW5jZU5vZGVNYXRjaGVzID0gbm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHsgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTsgfVxuXG4gIGNvbXBhcmVQYXJhbWV0ZXIocGFyYW1ldGVyKSB7XG4gICAgbGV0IGNvbXBhcmVzVG9QYXJhbXRlciA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc2luZ3VsYXIgPSB0aGlzLmlzU2luZ3VsYXIoKTtcblxuICAgIGlmIChzaW5ndWxhcikge1xuICAgICAgY29uc3QgcGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlci5nZXROYW1lKCk7XG5cbiAgICAgIGlmIChwYXJhbWV0ZXJOYW1lICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWUgPSB0aGlzLmdldE1ldGF2YXJpYWJsZU5hbWUoKTtcblxuICAgICAgICBpZiAocGFyYW1ldGVyTmFtZSA9PT0gbWV0YXZhcmlhYmxlTmFtZSkge1xuICAgICAgICAgIGNvbXBhcmVzVG9QYXJhbXRlciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGFyZXNUb1BhcmFtdGVyO1xuICB9XG5cbiAgY29tcGFyZVRvcExldmVsTWV0YUFzc2VydGlvbih0b3BMZXZlbE1ldGFBc3NlcnRpb24pIHtcbiAgICBsZXQgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uQ29tcGFyZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcgPSB0b3BMZXZlbE1ldGFBc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBDb21wYXJpbmcgdGhlICcke3RvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBtZXRhLWFzc2VydGlvbiB0byB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlLi4uYCk7XG5cbiAgICBjb25zdCBsYWJlbCA9IHRvcExldmVsTWV0YUFzc2VydGlvbi5nZXRMYWJlbCgpLFxuICAgICAgICAgIGxhYmVsVW5pZmllcyA9IHRoaXMudW5pZnlMYWJlbChsYWJlbCwgY29udGV4dCk7XG5cbiAgICBpZiAobGFiZWxVbmlmaWVzKSB7XG4gICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25Db21wYXJlcyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRvcExldmVsTWV0YUFzc2VydGlvbkNvbXBhcmVzKSB7XG4gICAgICBjb250ZXh0LnRyYWNlKGAuLi5jb21wYXJlZCB0aGUgJyR7dG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIG1ldGEtYXNzZXJ0aW9uIHRvIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2UuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvcExldmVsTWV0YUFzc2VydGlvbkNvbXBhcmVzO1xuICB9XG5cbiAgZmluZFZhbGlkUmVmZXJlbmNlKGNvbnRleHQpIHtcbiAgICBjb25zdCByZWZlcmVuY2VOb2RlID0gdGhpcy5nZXRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgICAgcmVmZXJlbmNlID0gY29udGV4dC5maW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUpLFxuICAgICAgICAgIHZhbGlkUmVmZXJlbmNlID0gcmVmZXJlbmNlOyAgLy8vXG5cbiAgICByZXR1cm4gdmFsaWRSZWZlcmVuY2U7XG4gIH1cblxuICB2YWxpZGF0ZShjb250ZXh0KSB7XG4gICAgbGV0IHJlZmVyZW5jZSA9IG51bGw7XG5cbiAgICBjb25zdCByZWZlcmVuY2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZS4uLmApO1xuXG4gICAgbGV0IHZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgdmFsaWRSZWZlcmVuY2UgPSB0aGlzLmZpbmRWYWxpZFJlZmVyZW5jZShjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZFJlZmVyZW5jZSkge1xuICAgICAgdmFsaWRhdGVzID0gdHJ1ZTtcblxuICAgICAgcmVmZXJlbmNlID0gdmFsaWRSZWZlcmVuY2U7ICAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZSBpcyBhbHJlYWR5IHZhbGlkLmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0ZW1wb3JhcnlDb250ZXh0ID0gY29udGV4dDsgLy8vXG5cbiAgICAgIGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgICAgYXR0ZW1wdCgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVWYWxpZGF0ZXMgPSB0aGlzLnZhbGlkYXRlTWV0YXZhcmlhYmxlKGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChtZXRhdmFyaWFibGVWYWxpZGF0ZXMpIHtcbiAgICAgICAgICBjb25zdCBtZXRhVHlwZSA9IHRoaXMubWV0YXZhcmlhYmxlLmdldE1ldGFUeXBlKCk7XG5cbiAgICAgICAgICBpZiAobWV0YVR5cGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlcyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZU1ldGFUeXBlTmFtZSA9IFJFRkVSRU5DRV9NRVRBX1RZUEVfTkFNRSxcbiAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZU1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShyZWZlcmVuY2VNZXRhVHlwZU5hbWUpLFxuICAgICAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlTWV0YVR5cGVFcXVhbFRvUmVmZXJlbmNlTWV0YVR5cGUgPSB0aGlzLm1ldGF2YXJpYWJsZS5pc01ldGFUeXBlRXF1YWxUbyhyZWZlcmVuY2VNZXRhVHlwZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVNZXRhVHlwZUVxdWFsVG9SZWZlcmVuY2VNZXRhVHlwZSkge1xuICAgICAgICAgICAgICB2YWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgbWV0YVR5cGVTdHJpbmcgPSBtZXRhVHlwZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gdGhpcy5tZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZU1ldGFUeXBlU3RyaW5nID0gcmVmZXJlbmNlTWV0YVR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZSdzICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSdzICcke21ldGFUeXBlU3RyaW5nfScgbWV0YS10eXBlIHNob3VsZCBiZSB0aGUgJyR7cmVmZXJlbmNlTWV0YVR5cGVTdHJpbmd9JyBtZXRhLXR5cGUuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIHRoaXMuY29tbWl0KGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICB9LCBjb250ZXh0KTtcblxuICAgICAgY29udGV4dCA9IHRlbXBvcmFyeUNvbnRleHQ7IC8vL1xuXG4gICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgIHJlZmVyZW5jZSA9IHRoaXM7ICAvLy9cblxuICAgICAgICBjb250ZXh0LmFkZFJlZmVyZW5jZShyZWZlcmVuY2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlLmApO1xuICAgIH1cblxuICAgIHJldHVybiByZWZlcmVuY2U7XG4gIH1cblxuICB2YWxpZGF0ZU1ldGF2YXJpYWJsZShjb250ZXh0KSB7XG4gICAgbGV0IG1ldGF2YXJpYWJsZVZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgcmVmZXJlbmNlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2UncyBtZXRhdmFyaWFibGUuLi4nYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGUgPSB0aGlzLm1ldGF2YXJpYWJsZS52YWxpZGF0ZShjb250ZXh0KTtcblxuICAgIGlmIChtZXRhdmFyaWFibGUgIT09IG51bGwpIHtcbiAgICAgIHRoaXMubWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlO1xuXG4gICAgICBtZXRhdmFyaWFibGVWYWxpZGF0ZXMgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChtZXRhdmFyaWFibGVWYWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlJ3MgbWV0YXZhcmlhYmxlLidgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlVmFsaWRhdGVzO1xuICB9XG5cbiAgdW5pZnlMYWJlbChsYWJlbCwgY29udGV4dCkge1xuICAgIGxldCBsYWJlbFVuaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGxhYmVsU3RyaW5nID0gbGFiZWwuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7bGFiZWxTdHJpbmd9JyBsYWJlbCB3aXRoIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2UuLi5gKTtcblxuICAgIGNvbnN0IGxhYmVsQ29udGV4dCA9IGxhYmVsLmdldENvbnRleHQoKSxcbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGNvbnRleHQsIC8vL1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGxhYmVsQ29udGV4dDsgIC8vL1xuXG4gICAgcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZSA9IGxhYmVsLmdldE1ldGF2YXJpYWJsZSgpLFxuICAgICAgICAgICAgbWV0YXZhcmlhYmxlVW5pZmllcyA9IHRoaXMudW5pZnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZVVuaWZpZXMpIHtcbiAgICAgICAgbGFiZWxVbmlmaWVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgaWYgKGxhYmVsVW5pZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7bGFiZWxTdHJpbmd9JyBsYWJlbCB3aXRoIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2UuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhYmVsVW5pZmllcztcbiAgfVxuXG4gIHVuaWZ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICAgIGxldCBtZXRhdmFyaWFibGVVbmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgLy8vXG4gICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSB3aXRoIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2UuLi5gKTtcblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZVVuaWZpZXNJbnRyaW5zaWNhbGx5ID0gdGhpcy5tZXRhdmFyaWFibGUudW5pZnlNZXRhdmFyaWFibGVJbnRyaW5zaWNhbGx5KG1ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICBpZiAobWV0YXZhcmlhYmxlVW5pZmllc0ludHJpbnNpY2FsbHkpIHtcbiAgICAgIG1ldGF2YXJpYWJsZVVuaWZpZXMgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChtZXRhdmFyaWFibGVVbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgd2l0aCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVVbmlmaWVzO1xuICB9XG5cbiAgdW5pZnlUb3BMZXZlbE1ldGFBc3NlcnRpb24odG9wTGV2ZWxNZXRhQXNzZXJ0aW9uLCBjb250ZXh0KSB7XG4gICAgbGV0IHRvcExldmVsTWV0YUFzc2VydGlvblVVbmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBsYWJlbCA9IHRvcExldmVsTWV0YUFzc2VydGlvbi5nZXRMYWJlbCgpLFxuICAgICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZyA9IHRvcExldmVsTWV0YUFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHt0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgbWV0YS1hc3NlcnRpb24ncyBsYWJlbCB3aXRoIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2UuLi5gKTtcblxuICAgIGNvbnN0IGxhYmVsQ29udGV4dCA9IGxhYmVsLmdldENvbnRleHQoKSxcbiAgICAgICAgICByZWZlcmVuY2VDb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksIC8vL1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0ID0gcmVmZXJlbmNlQ29udGV4dCwgLy8vXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gbGFiZWxDb250ZXh0OyAvLy9cblxuICAgIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGUgPSBsYWJlbC5nZXRNZXRhdmFyaWFibGUoKSxcbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZVVuaWZpZXMgPSB0aGlzLnVuaWZ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGVVbmlmaWVzKSB7XG4gICAgICAgIHRoaXMudG9wTGV2ZWxNZXRhQXNzZXJ0aW9uID0gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uO1xuXG4gICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uVVVuaWZpZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICBpZiAodG9wTGV2ZWxNZXRhQXNzZXJ0aW9uVVVuaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3RvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBtZXRhLWFzc2VydGlvbidzIGxhYmVsIHdpdGggdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uVVVuaWZpZXM7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcmV0dXJuIHNlcmlhbGlzZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3Qgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHN0cmluZyxcbiAgICAgICAgYnJlYWtQb2ludFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGpzb247XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiUmVmZXJlbmNlXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgcmVmZXJlbmNlO1xuXG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIHVuc2VyaWFsaXNlKChqc29uLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgICByZWZlcmVuY2VOb2RlID0gaW5zdGFudGlhdGVSZWZlcmVuY2Uoc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbm9kZSA9IHJlZmVyZW5jZU5vZGUsICAvLy9cbiAgICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIHRvcExldmVsTWV0YUFzc2VydGlvbiA9IHRvcExldmVsTWV0YUFzc2VydGlvbkZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgIHJlZmVyZW5jZSA9IG5ldyBSZWZlcmVuY2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBtZXRhdmFyaWFibGUsIHRvcExldmVsTWV0YUFzc2VydGlvbik7XG4gICAgICB9LCBqc29uLCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiByZWZlcmVuY2U7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJlZmVyZW5jZVN0cmluZyhyZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpIHtcbiAgICBsZXQgcmVmZXJlbmNlO1xuXG4gICAgYWJsYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBzdHJpbmcgPSByZWZlcmVuY2VTdHJpbmcsICAvLy9cbiAgICAgICAgICAgICAgcmVmZXJlbmNlTm9kZSA9IGluc3RhbnRpYXRlUmVmZXJlbmNlKHN0cmluZywgY29udGV4dCk7XG5cbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiByZWZlcmVuY2U7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbImRlZmluZSIsIlJlZmVyZW5jZSIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJtZXRhdmFyaWFibGUiLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb24iLCJnZXRNZXRhdmFyaWFibGUiLCJnZXRUb3BMZXZlbE1ldGFBc3NlcnRpb24iLCJnZXRSZWZlcmVuY2VOb2RlIiwiZ2V0Tm9kZSIsInJlZmVyZW5jZU5vZGUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsImdldE1ldGFUeXBlIiwiaXNFcXVhbFRvIiwicmVmZXJlbmNlIiwicmVmZXJlbmNlTm9kZU1hdGNoZXMiLCJtYXRjaFJlZmVyZW5jZU5vZGUiLCJlcXVhbFRvIiwibm9kZU1hdGNoZXMiLCJtYXRjaE5vZGUiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJjb21wYXJlUGFyYW1ldGVyIiwicGFyYW1ldGVyIiwiY29tcGFyZXNUb1BhcmFtdGVyIiwic2luZ3VsYXIiLCJpc1Npbmd1bGFyIiwicGFyYW1ldGVyTmFtZSIsImdldE5hbWUiLCJtZXRhdmFyaWFibGVOYW1lIiwiZ2V0TWV0YXZhcmlhYmxlTmFtZSIsImNvbXBhcmVUb3BMZXZlbE1ldGFBc3NlcnRpb24iLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25Db21wYXJlcyIsImdldENvbnRleHQiLCJyZWZlcmVuY2VTdHJpbmciLCJnZXRTdHJpbmciLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmciLCJ0cmFjZSIsImxhYmVsIiwiZ2V0TGFiZWwiLCJsYWJlbFVuaWZpZXMiLCJ1bmlmeUxhYmVsIiwiZmluZFZhbGlkUmVmZXJlbmNlIiwiZmluZFJlZmVyZW5jZUJ5UmVmZXJlbmNlTm9kZSIsInZhbGlkUmVmZXJlbmNlIiwidmFsaWRhdGUiLCJ2YWxpZGF0ZXMiLCJkZWJ1ZyIsInRlbXBvcmFyeUNvbnRleHQiLCJhdHRlbXB0IiwibWV0YXZhcmlhYmxlVmFsaWRhdGVzIiwidmFsaWRhdGVNZXRhdmFyaWFibGUiLCJtZXRhVHlwZSIsInJlZmVyZW5jZU1ldGFUeXBlTmFtZSIsIlJFRkVSRU5DRV9NRVRBX1RZUEVfTkFNRSIsInJlZmVyZW5jZU1ldGFUeXBlIiwiZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUiLCJtZXRhdmFyaWFibGVNZXRhVHlwZUVxdWFsVG9SZWZlcmVuY2VNZXRhVHlwZSIsImlzTWV0YVR5cGVFcXVhbFRvIiwibWV0YVR5cGVTdHJpbmciLCJtZXRhdmFyaWFibGVTdHJpbmciLCJyZWZlcmVuY2VNZXRhVHlwZVN0cmluZyIsImNvbW1pdCIsImFkZFJlZmVyZW5jZSIsImxhYmVsU3RyaW5nIiwibGFiZWxDb250ZXh0IiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJyZWNvbmNpbGUiLCJtZXRhdmFyaWFibGVVbmlmaWVzIiwidW5pZnlNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVVbmlmaWVzSW50cmluc2ljYWxseSIsInVuaWZ5TWV0YXZhcmlhYmxlSW50cmluc2ljYWxseSIsInVuaWZ5VG9wTGV2ZWxNZXRhQXNzZXJ0aW9uIiwidG9wTGV2ZWxNZXRhQXNzZXJ0aW9uVVVuaWZpZXMiLCJyZWZlcmVuY2VDb250ZXh0IiwidG9KU09OIiwic2VyaWFsaXNlIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJqc29uIiwibmFtZSIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJ1bnNlcmlhbGlzZSIsImluc3RhbnRpYXRlUmVmZXJlbmNlIiwiYnJlYWtQb2ludEZyb21KU09OIiwibWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUiLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25Gcm9tUmVmZXJlbmNlTm9kZSIsImZyb21SZWZlcmVuY2VTdHJpbmciLCJhYmxhdGUiLCJyZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBV0E7OztlQUFBOzs7Z0NBVHdCOzBCQUVEOzZCQUNjOytCQUNJOzRCQUNzQjt5QkFDaUI7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
|