occam-verify-cli 0.0.535 → 0.0.536
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/conclusion.js +3 -3
- package/lib/consequence.js +2 -2
- package/lib/constants.js +5 -1
- package/lib/context/proof.js +16 -1
- package/lib/equality.js +236 -69
- package/lib/log.js +6 -6
- package/lib/node/statement/equality.js +16 -0
- package/lib/premise.js +7 -7
- package/lib/supposition.js +4 -4
- package/lib/type.js +12 -5
- package/lib/variable.js +3 -23
- package/lib/verifier/metastatementForMetavariable.js +16 -16
- package/lib/verifier/statementForMetavariable.js +17 -17
- package/lib/verifier/termForVariable.js +17 -17
- package/lib/verifier.js +65 -20
- package/lib/verify/assertion/type.js +22 -11
- package/lib/verify/statement.js +227 -24
- package/package.json +1 -1
- package/src/conclusion.js +4 -4
- package/src/consequence.js +2 -2
- package/src/constants.js +1 -0
- package/src/context/proof.js +18 -0
- package/src/equality.js +159 -85
- package/src/log.js +7 -5
- package/src/node/statement/equality.js +9 -0
- package/src/premise.js +8 -8
- package/src/supposition.js +4 -4
- package/src/type.js +17 -8
- package/src/variable.js +2 -18
- package/src/verifier/metastatementForMetavariable.js +15 -15
- package/src/verifier/statementForMetavariable.js +16 -16
- package/src/verifier/termForVariable.js +16 -16
- package/src/verifier.js +18 -18
- package/src/verify/assertion/type.js +28 -13
- package/src/verify/statement.js +226 -42
- package/lib/verifier/statement.js +0 -199
- package/src/verifier/statement.js +0 -135
package/src/verify/statement.js
CHANGED
|
@@ -1,22 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import Verifier from "../verifier";
|
|
4
4
|
import Variable from "../variable";
|
|
5
|
-
import
|
|
5
|
+
import Equality from "../equality";
|
|
6
6
|
import verifyTerm from "../verify/term";
|
|
7
|
-
import statementVerifier from "../verifier/statement";
|
|
8
7
|
import equalityCombinator from "../ocmbinator/equality";
|
|
9
8
|
import bracketedCombinator from "../ocmbinator/bracketed";
|
|
10
9
|
import verifyTypeAssertion from "../verify/assertion/type";
|
|
11
10
|
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
11
|
+
import { objectType } from "../type";
|
|
12
|
+
import { first, second } from "../utilities/array";
|
|
13
|
+
import { OBJECT_TYPE_NAME } from "../typeNames";
|
|
14
|
+
import { STATEMENT_META_TYPE } from "../metaTypes";
|
|
15
15
|
import { verifyTermAsVariable } from "../verify/term";
|
|
16
|
+
import { nodeQuery, typeNameFromTypeNode } from "../utilities/query";
|
|
17
|
+
import { ARGUMENT_RULE_NAME, META_ARGUMENT_RULE_NAME } from "../ruleNames";
|
|
16
18
|
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
const termNodeQuery = nodeQuery("/argument/term!"),
|
|
20
|
+
typeNodeQuery = nodeQuery("/argument/type!"),
|
|
21
|
+
metaTypeNodeQuery = nodeQuery("/metaArgument/metaType!"),
|
|
22
|
+
statementNodeQuery = nodeQuery("/metaArgument/statement!"),
|
|
23
|
+
typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!"),
|
|
24
|
+
metaTypeTerminalNodeQuery = nodeQuery("/metaType/@meta-type");
|
|
20
25
|
|
|
21
26
|
export default function verifyStatement(statementNode, assignments, derived, context) {
|
|
22
27
|
let statementVerified = false;
|
|
@@ -34,7 +39,7 @@ export default function verifyStatement(statementNode, assignments, derived, con
|
|
|
34
39
|
}
|
|
35
40
|
|
|
36
41
|
if (!statementVerified) {
|
|
37
|
-
const statementVerifiedAsEquality = verifyStatementAsEquality(statementNode,
|
|
42
|
+
const statementVerifiedAsEquality = verifyStatementAsEquality(statementNode, derived, context);
|
|
38
43
|
|
|
39
44
|
statementVerified = statementVerifiedAsEquality; //
|
|
40
45
|
}
|
|
@@ -42,6 +47,121 @@ export default function verifyStatement(statementNode, assignments, derived, con
|
|
|
42
47
|
return statementVerified;
|
|
43
48
|
}
|
|
44
49
|
|
|
50
|
+
class StatementVerifier extends Verifier {
|
|
51
|
+
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, context) {
|
|
52
|
+
let nonTerminalNodeVerified = false;
|
|
53
|
+
|
|
54
|
+
const nonTerminalNode = nonTerminalNodeA, ///
|
|
55
|
+
combinatorNonTerminalNode = nonTerminalNodeB; ///
|
|
56
|
+
|
|
57
|
+
const ruleName = nonTerminalNode.getRuleName(), ///
|
|
58
|
+
combinatorRuleName = combinatorNonTerminalNode.getRuleName(); ///
|
|
59
|
+
|
|
60
|
+
if (ruleName === combinatorRuleName) {
|
|
61
|
+
switch (ruleName) {
|
|
62
|
+
case ARGUMENT_RULE_NAME: {
|
|
63
|
+
const argumentNode = nonTerminalNode, ///
|
|
64
|
+
combinatorArgumentNode = combinatorNonTerminalNode, ///
|
|
65
|
+
argumentNodeVerified = this.verifyArgumentNode(argumentNode, combinatorArgumentNode, context);
|
|
66
|
+
|
|
67
|
+
nonTerminalNodeVerified = argumentNodeVerified; ///
|
|
68
|
+
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
case META_ARGUMENT_RULE_NAME: {
|
|
73
|
+
const metaArgumentNode = nonTerminalNode, ///
|
|
74
|
+
combinatorMetaargumentNode = combinatorNonTerminalNode, ///
|
|
75
|
+
metaArgumentNodeVerified = this.verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, context);
|
|
76
|
+
|
|
77
|
+
nonTerminalNodeVerified = metaArgumentNodeVerified; ///
|
|
78
|
+
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
default: {
|
|
83
|
+
const childNodes = nonTerminalNode.getChildNodes(),
|
|
84
|
+
combinatorChildNodes = combinatorNonTerminalNode.getChildNodes(),
|
|
85
|
+
nodesA = childNodes, ///
|
|
86
|
+
nodesB = combinatorChildNodes, ///
|
|
87
|
+
nodesVerified = this.verifyNodes(nodesA, nodesB, context);
|
|
88
|
+
|
|
89
|
+
nonTerminalNodeVerified = nodesVerified; ///
|
|
90
|
+
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return nonTerminalNodeVerified;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
verifyArgumentNode(argumentNode, combinatorArgumentNode, context) {
|
|
100
|
+
let argumentNodeVerified = false;
|
|
101
|
+
|
|
102
|
+
const termNode = termNodeQuery(argumentNode);
|
|
103
|
+
|
|
104
|
+
if (termNode === null) {
|
|
105
|
+
const argumentString = context.nodeAsString(argumentNode);
|
|
106
|
+
|
|
107
|
+
context.error(`The ${argumentString} argument should be a term, not a type`, argumentNode);
|
|
108
|
+
} else {
|
|
109
|
+
const types = [],
|
|
110
|
+
termVerified = verifyTerm(termNode, types, context);
|
|
111
|
+
|
|
112
|
+
if (termVerified) {
|
|
113
|
+
const firstType = first(types),
|
|
114
|
+
termType = firstType, ///
|
|
115
|
+
typeNode = typeNodeQuery(combinatorArgumentNode),
|
|
116
|
+
typeName = typeNameFromTypeNode(typeNode),
|
|
117
|
+
type = (typeName === OBJECT_TYPE_NAME) ?
|
|
118
|
+
objectType : ///
|
|
119
|
+
context.findTypeByTypeName(typeName),
|
|
120
|
+
statementTypeEqualToOrSubTypeOfType = termType.isEqualToOrSubTypeOf(type);
|
|
121
|
+
|
|
122
|
+
if (statementTypeEqualToOrSubTypeOfType) {
|
|
123
|
+
argumentNodeVerified = true;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return argumentNodeVerified;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, context) {
|
|
132
|
+
let metaArgumentNodeVerified = false;
|
|
133
|
+
|
|
134
|
+
const statementNode = statementNodeQuery(metaArgumentNode),
|
|
135
|
+
combinatorMetaTYpeNode = metaTypeNodeQuery(combinatorMetaargumentNode);
|
|
136
|
+
|
|
137
|
+
if (statementNode === null) {
|
|
138
|
+
const metaArgumentString = context.nodeAsString(metaArgumentNode);
|
|
139
|
+
|
|
140
|
+
context.error(`Expected a statement but got a '${metaArgumentString}' meta-type.`, metaArgumentNode);
|
|
141
|
+
} else {
|
|
142
|
+
if (combinatorMetaTYpeNode === null) {
|
|
143
|
+
const combinatorMetaargumentString = context.nodeAsString(combinatorMetaargumentNode);
|
|
144
|
+
|
|
145
|
+
context.error(`Expected a meta-type but got a '${combinatorMetaargumentString}' statement.`, metaArgumentNode);
|
|
146
|
+
} else {
|
|
147
|
+
const combinatorMetaTypeTerminalNode = metaTypeTerminalNodeQuery(combinatorMetaTYpeNode),
|
|
148
|
+
content = combinatorMetaTypeTerminalNode.getContent(),
|
|
149
|
+
contentStatementMetaType = (content === STATEMENT_META_TYPE);
|
|
150
|
+
|
|
151
|
+
if (!contentStatementMetaType) {
|
|
152
|
+
context.error(`Expected the meta-type to be 'Statement' but got '${content}'.`, metaArgumentNode);
|
|
153
|
+
} else {
|
|
154
|
+
metaArgumentNodeVerified = true;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
return metaArgumentNodeVerified;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
const statementVerifier = new StatementVerifier();
|
|
164
|
+
|
|
45
165
|
function verifyStatementAgainstCombinators(statementNode, context) {
|
|
46
166
|
let statementVerifiedAgainstCombinators = false;
|
|
47
167
|
|
|
@@ -71,8 +191,7 @@ function verifyStatementAgainstCombinator(statementNode, combinator, context) {
|
|
|
71
191
|
const combinatorStatementNode = combinator.getStatementNode(),
|
|
72
192
|
nonTerminalNodeA = statementNode, ///
|
|
73
193
|
nonTerminalNodeB = combinatorStatementNode, ///
|
|
74
|
-
|
|
75
|
-
nodeVerified = statementVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, context),
|
|
194
|
+
nodeVerified = statementVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, context),
|
|
76
195
|
statementVerifiedAgainstCombinator = nodeVerified; ///
|
|
77
196
|
|
|
78
197
|
return statementVerifiedAgainstCombinator;
|
|
@@ -92,66 +211,129 @@ function verifyStatementAsTypeAssertion(statementNode, assignments, derived, con
|
|
|
92
211
|
return statementVerifiedAsTypeAssertion;
|
|
93
212
|
}
|
|
94
213
|
|
|
95
|
-
function verifyStatementAsEquality(statementNode,
|
|
214
|
+
function verifyStatementAsEquality(statementNode, derived, context) {
|
|
96
215
|
let statementVerifiedAsEquality = false;
|
|
97
216
|
|
|
98
|
-
const statementString = context.nodeAsString(statementNode);
|
|
99
|
-
|
|
100
217
|
const combinator = equalityCombinator, ///
|
|
101
218
|
statementVerifiedAgainstCombinator = verifyStatementAgainstCombinator(statementNode, combinator, context);
|
|
102
219
|
|
|
103
220
|
if (statementVerifiedAgainstCombinator) {
|
|
104
|
-
const
|
|
105
|
-
rightTermNode = rightTermNodeQuery(statementNode);
|
|
221
|
+
const equality = Equality.fromStatementNode(statementNode);
|
|
106
222
|
|
|
107
223
|
if (derived) {
|
|
108
|
-
const
|
|
109
|
-
|
|
224
|
+
const equalities = context.getEqualities(),
|
|
225
|
+
equalityVerified = equality.verify(equalities, context);
|
|
110
226
|
|
|
111
|
-
statementVerifiedAsEquality =
|
|
227
|
+
statementVerifiedAsEquality = equalityVerified; ///
|
|
112
228
|
} else {
|
|
113
|
-
const
|
|
114
|
-
|
|
115
|
-
|
|
229
|
+
const variables = [],
|
|
230
|
+
leftTermNode = equality.getLeftTermNode(),
|
|
231
|
+
rightTermNode = equality.getRightTermNode(),
|
|
232
|
+
leftTermVerifiedAsVariable = verifyTermAsVariable(leftTermNode, variables, context),
|
|
233
|
+
rightTermVerifiedAsVariable = verifyTermAsVariable(rightTermNode, variables, context);
|
|
234
|
+
|
|
235
|
+
if (leftTermVerifiedAsVariable && rightTermVerifiedAsVariable) {
|
|
236
|
+
const firstVariable = first(variables),
|
|
237
|
+
secondVariable = second(variables),
|
|
238
|
+
leftVariable = firstVariable, ///
|
|
239
|
+
rightVariable = secondVariable, ///
|
|
240
|
+
leftVariableName = leftVariable.getName(),
|
|
241
|
+
leftVariableType = leftVariable.getType(),
|
|
242
|
+
rightVariableName = rightVariable.getName(),
|
|
243
|
+
rightVariableType = rightVariable.getType(),
|
|
244
|
+
leftVariableTypeEqualToOrSubTypeOfOfSuperTypeOfRightVariableType = leftVariableType.isEqualToOrSubTypeOfOfSuperTypeOf(rightVariableType);
|
|
245
|
+
|
|
246
|
+
if (!leftVariableTypeEqualToOrSubTypeOfOfSuperTypeOfRightVariableType) {
|
|
247
|
+
const leftVariableTypeName = leftVariableType.getName(),
|
|
248
|
+
rightVariableTypeName = rightVariableType.getName();
|
|
249
|
+
|
|
250
|
+
context.error(`The left '${leftVariableName}' variable's '${leftVariableTypeName}' type is not equal to, a sub-type of or a super-type of the right '${rightVariableName}' variable's '${rightVariableTypeName}' type.`, statementNode);
|
|
251
|
+
} else {
|
|
252
|
+
const leftVariableTypeSuperTypeOfRightVariableType = leftVariableType.isSuperTypeOf(rightVariableType),
|
|
253
|
+
rightVariableTypeSuperTypeOfLeftVariableType = rightVariableType.isSuperTypeOf(leftVariableType);
|
|
254
|
+
|
|
255
|
+
if (leftVariableTypeSuperTypeOfRightVariableType) {
|
|
256
|
+
const type = rightVariableType, ///
|
|
257
|
+
name = leftVariableName, ///
|
|
258
|
+
variable = Variable.fromTypeAndName(type, name);
|
|
259
|
+
|
|
260
|
+
context.addVariable(variable);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
if (rightVariableTypeSuperTypeOfLeftVariableType) {
|
|
264
|
+
const type = leftVariableType, ///
|
|
265
|
+
name = rightVariableName, ///
|
|
266
|
+
variable = Variable.fromTypeAndName(type, name);
|
|
267
|
+
|
|
268
|
+
context.addVariable(variable);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
statementVerifiedAsEquality = true;
|
|
272
|
+
}
|
|
273
|
+
} else if (leftTermVerifiedAsVariable) {
|
|
274
|
+
const types = [];
|
|
116
275
|
|
|
117
|
-
if (leftTermVerifiedAsVariable) {
|
|
118
276
|
verifyTerm(rightTermNode, types, context);
|
|
119
277
|
|
|
120
|
-
const
|
|
278
|
+
const firstType = first(types),
|
|
279
|
+
firstVariable = first(variables),
|
|
121
280
|
leftVariable = firstVariable, ///
|
|
122
|
-
|
|
123
|
-
rightTermType = firstType, ///
|
|
281
|
+
rightTermType = firstType, ///
|
|
124
282
|
leftVariableType = leftVariable.getType(),
|
|
125
|
-
leftVariableName = leftVariable.getName(),
|
|
126
283
|
leftVariableTypeEqualToOrSuperTypeOfRightTermType = leftVariableType.isEqualToOrSuperTypeOf(rightTermType);
|
|
127
284
|
|
|
128
285
|
if (!leftVariableTypeEqualToOrSuperTypeOfRightTermType) {
|
|
129
|
-
const rightTermString = nodeAsString(rightTermNode),
|
|
286
|
+
const rightTermString = context.nodeAsString(rightTermNode),
|
|
287
|
+
leftVariableName = leftVariable.getName(),
|
|
130
288
|
rightTermTypeName = rightTermType.getName(),
|
|
131
289
|
leftVariableTypeName = leftVariableType.getName();
|
|
132
290
|
|
|
133
291
|
context.error(`The left '${leftVariableName}' variable's '${leftVariableTypeName}' type is not equal to or a super-type of the right '${rightTermString}' term's '${rightTermTypeName}' type.`, statementNode);
|
|
134
292
|
} else {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
293
|
+
statementVerifiedAsEquality = true;
|
|
294
|
+
}
|
|
295
|
+
} else if (rightTermVerifiedAsVariable) {
|
|
296
|
+
const types = [];
|
|
297
|
+
|
|
298
|
+
verifyTerm(leftTermNode, types, context);
|
|
299
|
+
|
|
300
|
+
const firstType = first(types),
|
|
301
|
+
firstVariable = first(variables),
|
|
302
|
+
leftTermType = firstType, ///
|
|
303
|
+
rightVariable = firstVariable, ///
|
|
304
|
+
rightVariableType = rightVariable.getType(),
|
|
305
|
+
rightVariableTypeEqualToOrSuperTypeOfRightTermType = rightVariableType.isEqualToOrSuperTypeOf(leftTermType);
|
|
140
306
|
|
|
141
|
-
|
|
307
|
+
if (!rightVariableTypeEqualToOrSuperTypeOfRightTermType) {
|
|
308
|
+
const leftTermString = context.nodeAsString(leftTermNode),
|
|
309
|
+
rightVariableName = rightVariable.getName(),
|
|
310
|
+
leftTermTypeName = leftTermType.getName(),
|
|
311
|
+
rightVariableTypeName = rightVariableType.getName();
|
|
142
312
|
|
|
313
|
+
context.error(`The right '${rightVariableName}' variable's '${rightVariableTypeName}' type is not equal to or a super-type of the left '${leftTermString}' term's '${leftTermTypeName}' type.`, statementNode);
|
|
314
|
+
} else {
|
|
143
315
|
statementVerifiedAsEquality = true;
|
|
144
316
|
}
|
|
145
317
|
} else {
|
|
146
|
-
const
|
|
318
|
+
const types = [];
|
|
147
319
|
|
|
148
|
-
|
|
149
|
-
const firstVariable = first(variables),
|
|
150
|
-
rightVariable = firstVariable, ///
|
|
151
|
-
leftTermString = nodeAsString(leftTermNode),
|
|
152
|
-
rightVariableName = rightVariable.getName();
|
|
320
|
+
verifyTerm(leftTermNode, types, context);
|
|
153
321
|
|
|
154
|
-
|
|
322
|
+
verifyTerm(rightTermNode, types, context);
|
|
323
|
+
|
|
324
|
+
const firstType = first(types),
|
|
325
|
+
secondType = second(types),
|
|
326
|
+
leftTermType = firstType, ///
|
|
327
|
+
rightTermType = secondType, ///
|
|
328
|
+
leftTermTypeEqualToOrSubTypeOfOfSuperTypeOf = leftTermType.isEqualToOrSubTypeOfOfSuperTypeOf(rightTermType);
|
|
329
|
+
|
|
330
|
+
if (!leftTermTypeEqualToOrSubTypeOfOfSuperTypeOf) {
|
|
331
|
+
const leftTermString = context.nodeAsString(leftTermNode),
|
|
332
|
+
rightTermString = context.nodeAsString(rightTermNode),
|
|
333
|
+
leftTermTypeName = leftTermType.getName(),
|
|
334
|
+
rightTermTypeName = rightTermType.getName();
|
|
335
|
+
|
|
336
|
+
context.error(`The left '${leftTermString}' term's '${leftTermTypeName}' type is not equal to, a sub-type of or a super-type of the right '${rightTermString}' term's '${rightTermTypeName}' type.`, statementNode);
|
|
155
337
|
} else {
|
|
156
338
|
statementVerifiedAsEquality = true;
|
|
157
339
|
}
|
|
@@ -160,6 +342,8 @@ function verifyStatementAsEquality(statementNode, assignments, derived, context)
|
|
|
160
342
|
}
|
|
161
343
|
|
|
162
344
|
if (statementVerifiedAsEquality) {
|
|
345
|
+
const statementString = context.nodeAsString(statementNode);
|
|
346
|
+
|
|
163
347
|
context.info(`Verified the '${statementString}' statement as an equality.`, statementNode);
|
|
164
348
|
}
|
|
165
349
|
|
|
@@ -1,199 +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
|
-
var _verifier = /*#__PURE__*/ _interopRequireDefault(require("../verifier"));
|
|
12
|
-
var _term = /*#__PURE__*/ _interopRequireDefault(require("../verify/term"));
|
|
13
|
-
var _array = require("../utilities/array");
|
|
14
|
-
var _type = require("../type");
|
|
15
|
-
var _typeNames = require("../typeNames");
|
|
16
|
-
var _metaTypes = require("../metaTypes");
|
|
17
|
-
var _query = require("../utilities/query");
|
|
18
|
-
var _ruleNames = require("../ruleNames");
|
|
19
|
-
function _assertThisInitialized(self) {
|
|
20
|
-
if (self === void 0) {
|
|
21
|
-
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
22
|
-
}
|
|
23
|
-
return self;
|
|
24
|
-
}
|
|
25
|
-
function _classCallCheck(instance, Constructor) {
|
|
26
|
-
if (!(instance instanceof Constructor)) {
|
|
27
|
-
throw new TypeError("Cannot call a class as a function");
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
function _defineProperties(target, props) {
|
|
31
|
-
for(var i = 0; i < props.length; i++){
|
|
32
|
-
var descriptor = props[i];
|
|
33
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
|
34
|
-
descriptor.configurable = true;
|
|
35
|
-
if ("value" in descriptor) descriptor.writable = true;
|
|
36
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
function _createClass(Constructor, protoProps, staticProps) {
|
|
40
|
-
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
41
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
42
|
-
return Constructor;
|
|
43
|
-
}
|
|
44
|
-
function _getPrototypeOf(o) {
|
|
45
|
-
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
|
|
46
|
-
return o.__proto__ || Object.getPrototypeOf(o);
|
|
47
|
-
};
|
|
48
|
-
return _getPrototypeOf(o);
|
|
49
|
-
}
|
|
50
|
-
function _inherits(subClass, superClass) {
|
|
51
|
-
if (typeof superClass !== "function" && superClass !== null) {
|
|
52
|
-
throw new TypeError("Super expression must either be null or a function");
|
|
53
|
-
}
|
|
54
|
-
subClass.prototype = Object.create(superClass && superClass.prototype, {
|
|
55
|
-
constructor: {
|
|
56
|
-
value: subClass,
|
|
57
|
-
writable: true,
|
|
58
|
-
configurable: true
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
if (superClass) _setPrototypeOf(subClass, superClass);
|
|
62
|
-
}
|
|
63
|
-
function _interopRequireDefault(obj) {
|
|
64
|
-
return obj && obj.__esModule ? obj : {
|
|
65
|
-
default: obj
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
function _possibleConstructorReturn(self, call) {
|
|
69
|
-
if (call && (_typeof(call) === "object" || typeof call === "function")) {
|
|
70
|
-
return call;
|
|
71
|
-
}
|
|
72
|
-
return _assertThisInitialized(self);
|
|
73
|
-
}
|
|
74
|
-
function _setPrototypeOf(o, p) {
|
|
75
|
-
_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
|
|
76
|
-
o.__proto__ = p;
|
|
77
|
-
return o;
|
|
78
|
-
};
|
|
79
|
-
return _setPrototypeOf(o, p);
|
|
80
|
-
}
|
|
81
|
-
var _typeof = function(obj) {
|
|
82
|
-
"@swc/helpers - typeof";
|
|
83
|
-
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
84
|
-
};
|
|
85
|
-
function _isNativeReflectConstruct() {
|
|
86
|
-
if (typeof Reflect === "undefined" || !Reflect.construct) return false;
|
|
87
|
-
if (Reflect.construct.sham) return false;
|
|
88
|
-
if (typeof Proxy === "function") return true;
|
|
89
|
-
try {
|
|
90
|
-
Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));
|
|
91
|
-
return true;
|
|
92
|
-
} catch (e) {
|
|
93
|
-
return false;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
function _createSuper(Derived) {
|
|
97
|
-
var hasNativeReflectConstruct = _isNativeReflectConstruct();
|
|
98
|
-
return function _createSuperInternal() {
|
|
99
|
-
var Super = _getPrototypeOf(Derived), result;
|
|
100
|
-
if (hasNativeReflectConstruct) {
|
|
101
|
-
var NewTarget = _getPrototypeOf(this).constructor;
|
|
102
|
-
result = Reflect.construct(Super, arguments, NewTarget);
|
|
103
|
-
} else {
|
|
104
|
-
result = Super.apply(this, arguments);
|
|
105
|
-
}
|
|
106
|
-
return _possibleConstructorReturn(this, result);
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
var termNodeQuery = (0, _query.nodeQuery)("/argument/term!"), typeNodeQuery = (0, _query.nodeQuery)("/argument/type!"), metaTypeNodeQuery = (0, _query.nodeQuery)("/metaArgument/metaType!"), statementNodeQuery = (0, _query.nodeQuery)("/metaArgument/statement!"), metaTypeTerminalNodeQuery = (0, _query.nodeQuery)("/metaType/@meta-type");
|
|
110
|
-
var StatementVerifier = /*#__PURE__*/ function(Verifier) {
|
|
111
|
-
_inherits(StatementVerifier, Verifier);
|
|
112
|
-
var _super = _createSuper(StatementVerifier);
|
|
113
|
-
function StatementVerifier() {
|
|
114
|
-
_classCallCheck(this, StatementVerifier);
|
|
115
|
-
return _super.apply(this, arguments);
|
|
116
|
-
}
|
|
117
|
-
_createClass(StatementVerifier, [
|
|
118
|
-
{
|
|
119
|
-
key: "verifyNonTerminalNode",
|
|
120
|
-
value: function verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, context) {
|
|
121
|
-
var nonTerminalNodeVerified = false;
|
|
122
|
-
var nonTerminalNode = nonTerminalNodeA, combinatorNonTerminalNode = nonTerminalNodeB; ///
|
|
123
|
-
var ruleName = nonTerminalNode.getRuleName(), combinatorRuleName = combinatorNonTerminalNode.getRuleName(); ///
|
|
124
|
-
if (ruleName === combinatorRuleName) {
|
|
125
|
-
switch(ruleName){
|
|
126
|
-
case _ruleNames.ARGUMENT_RULE_NAME:
|
|
127
|
-
{
|
|
128
|
-
var argumentNode = nonTerminalNode, combinatorArgumentNode = combinatorNonTerminalNode, argumentNodeVerified = this.verifyArgumentNode(argumentNode, combinatorArgumentNode, substitutions, context);
|
|
129
|
-
nonTerminalNodeVerified = argumentNodeVerified; ///
|
|
130
|
-
break;
|
|
131
|
-
}
|
|
132
|
-
case _ruleNames.META_ARGUMENT_RULE_NAME:
|
|
133
|
-
{
|
|
134
|
-
var metaArgumentNode = nonTerminalNode, combinatorMetaargumentNode = combinatorNonTerminalNode, metaArgumentNodeVerified = this.verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, substitutions, context);
|
|
135
|
-
nonTerminalNodeVerified = metaArgumentNodeVerified; ///
|
|
136
|
-
break;
|
|
137
|
-
}
|
|
138
|
-
default:
|
|
139
|
-
{
|
|
140
|
-
var childNodes = nonTerminalNode.getChildNodes(), combinatorChildNodes = combinatorNonTerminalNode.getChildNodes(), nodesA = childNodes, nodesB = combinatorChildNodes, nodesVerified = this.verifyNodes(nodesA, nodesB, substitutions, context);
|
|
141
|
-
nonTerminalNodeVerified = nodesVerified; ///
|
|
142
|
-
break;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
return nonTerminalNodeVerified;
|
|
147
|
-
}
|
|
148
|
-
},
|
|
149
|
-
{
|
|
150
|
-
key: "verifyArgumentNode",
|
|
151
|
-
value: function verifyArgumentNode(argumentNode, combinatorArgumentNode, substitutions, context) {
|
|
152
|
-
var argumentNodeVerified = false;
|
|
153
|
-
var termNode = termNodeQuery(argumentNode);
|
|
154
|
-
if (termNode === null) {
|
|
155
|
-
var argumentString = context.nodeAsString(argumentNode);
|
|
156
|
-
context.error("The ".concat(argumentString, " argument should be a term, not a type"), argumentNode);
|
|
157
|
-
} else {
|
|
158
|
-
var types = [], termVerified = (0, _term.default)(termNode, types, context);
|
|
159
|
-
if (termVerified) {
|
|
160
|
-
var firstType = (0, _array.first)(types), termType = firstType, typeNode = typeNodeQuery(combinatorArgumentNode), typeName = (0, _query.typeNameFromTypeNode)(typeNode), type = typeName === _typeNames.OBJECT_TYPE_NAME ? _type.objectType : context.findTypeByTypeName(typeName), statementTypeEqualToOrSubTypeOfType = termType.isEqualToOrSubTypeOf(type);
|
|
161
|
-
if (statementTypeEqualToOrSubTypeOfType) {
|
|
162
|
-
argumentNodeVerified = true;
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
return argumentNodeVerified;
|
|
167
|
-
}
|
|
168
|
-
},
|
|
169
|
-
{
|
|
170
|
-
key: "verifyMetaargumentNode",
|
|
171
|
-
value: function verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, substitutions, context) {
|
|
172
|
-
var metaArgumentNodeVerified = false;
|
|
173
|
-
var statementNode = statementNodeQuery(metaArgumentNode), combinatorMetaTYpeNode = metaTypeNodeQuery(combinatorMetaargumentNode);
|
|
174
|
-
if (statementNode === null) {
|
|
175
|
-
var metaArgumentString = context.nodeAsString(metaArgumentNode);
|
|
176
|
-
context.error("Expected a statement but got a '".concat(metaArgumentString, "' meta-type."), metaArgumentNode);
|
|
177
|
-
} else {
|
|
178
|
-
if (combinatorMetaTYpeNode === null) {
|
|
179
|
-
var combinatorMetaargumentString = context.nodeAsString(combinatorMetaargumentNode);
|
|
180
|
-
context.error("Expected a meta-type but got a '".concat(combinatorMetaargumentString, "' statement."), metaArgumentNode);
|
|
181
|
-
} else {
|
|
182
|
-
var combinatorMetaTypeTerminalNode = metaTypeTerminalNodeQuery(combinatorMetaTYpeNode), content = combinatorMetaTypeTerminalNode.getContent(), contentStatementMetaType = content === _metaTypes.STATEMENT_META_TYPE;
|
|
183
|
-
if (!contentStatementMetaType) {
|
|
184
|
-
context.error("Expected the meta-type to be 'Statement' but got '".concat(content, "'."), metaArgumentNode);
|
|
185
|
-
} else {
|
|
186
|
-
metaArgumentNodeVerified = true;
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
return metaArgumentNodeVerified;
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
]);
|
|
194
|
-
return StatementVerifier;
|
|
195
|
-
}(_verifier.default);
|
|
196
|
-
var statementVerifier = new StatementVerifier();
|
|
197
|
-
var _default = statementVerifier;
|
|
198
|
-
|
|
199
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZmllci9zdGF0ZW1lbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWZXJpZmllciBmcm9tIFwiLi4vdmVyaWZpZXJcIjtcbmltcG9ydCB2ZXJpZnlUZXJtIGZyb20gXCIuLi92ZXJpZnkvdGVybVwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IG9iamVjdFR5cGUgfSBmcm9tIFwiLi4vdHlwZVwiO1xuaW1wb3J0IHsgT0JKRUNUX1RZUEVfTkFNRSB9IGZyb20gXCIuLi90eXBlTmFtZXNcIjtcbmltcG9ydCB7IFNUQVRFTUVOVF9NRVRBX1RZUEUgfSBmcm9tIFwiLi4vbWV0YVR5cGVzXCI7XG5pbXBvcnQgeyBub2RlUXVlcnksIHR5cGVOYW1lRnJvbVR5cGVOb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9xdWVyeVwiO1xuaW1wb3J0IHsgQVJHVU1FTlRfUlVMRV9OQU1FLCBNRVRBX0FSR1VNRU5UX1JVTEVfTkFNRSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgdGVybU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9hcmd1bWVudC90ZXJtIVwiKSxcbiAgICAgIHR5cGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvYXJndW1lbnQvdHlwZSFcIiksXG4gICAgICBtZXRhVHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9tZXRhQXJndW1lbnQvbWV0YVR5cGUhXCIpLFxuICAgICAgc3RhdGVtZW50Tm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL21ldGFBcmd1bWVudC9zdGF0ZW1lbnQhXCIpLFxuICAgICAgbWV0YVR5cGVUZXJtaW5hbE5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9tZXRhVHlwZS9AbWV0YS10eXBlXCIpO1xuXG5jbGFzcyBTdGF0ZW1lbnRWZXJpZmllciBleHRlbmRzIFZlcmlmaWVyIHtcbiAgdmVyaWZ5Tm9uVGVybWluYWxOb2RlKG5vblRlcm1pbmFsTm9kZUEsIG5vblRlcm1pbmFsTm9kZUIsIHN1YnN0aXR1dGlvbnMsIGNvbnRleHQpIHtcbiAgICBsZXQgbm9uVGVybWluYWxOb2RlVmVyaWZpZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vblRlcm1pbmFsTm9kZUEsIC8vL1xuICAgICAgICAgIGNvbWJpbmF0b3JOb25UZXJtaW5hbE5vZGUgPSBub25UZXJtaW5hbE5vZGVCOyAvLy9cblxuICAgIGNvbnN0IHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksIC8vL1xuICAgICAgICAgIGNvbWJpbmF0b3JSdWxlTmFtZSA9IGNvbWJpbmF0b3JOb25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTsgLy8vXG5cbiAgICBpZiAocnVsZU5hbWUgPT09IGNvbWJpbmF0b3JSdWxlTmFtZSkge1xuICAgICAgc3dpdGNoIChydWxlTmFtZSkge1xuICAgICAgICBjYXNlIEFSR1VNRU5UX1JVTEVfTkFNRToge1xuICAgICAgICAgIGNvbnN0IGFyZ3VtZW50Tm9kZSA9IG5vblRlcm1pbmFsTm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgY29tYmluYXRvckFyZ3VtZW50Tm9kZSA9IGNvbWJpbmF0b3JOb25UZXJtaW5hbE5vZGUsIC8vL1xuICAgICAgICAgICAgICAgIGFyZ3VtZW50Tm9kZVZlcmlmaWVkID0gdGhpcy52ZXJpZnlBcmd1bWVudE5vZGUoYXJndW1lbnROb2RlLCBjb21iaW5hdG9yQXJndW1lbnROb2RlLCBzdWJzdGl0dXRpb25zLCBjb250ZXh0KTtcblxuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVZlcmlmaWVkID0gYXJndW1lbnROb2RlVmVyaWZpZWQ7IC8vL1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIE1FVEFfQVJHVU1FTlRfUlVMRV9OQU1FOiB7XG4gICAgICAgICAgY29uc3QgbWV0YUFyZ3VtZW50Tm9kZSA9IG5vblRlcm1pbmFsTm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgY29tYmluYXRvck1ldGFhcmd1bWVudE5vZGUgPSBjb21iaW5hdG9yTm9uVGVybWluYWxOb2RlLCAvLy9cbiAgICAgICAgICAgICAgICBtZXRhQXJndW1lbnROb2RlVmVyaWZpZWQgPSB0aGlzLnZlcmlmeU1ldGFhcmd1bWVudE5vZGUobWV0YUFyZ3VtZW50Tm9kZSwgY29tYmluYXRvck1ldGFhcmd1bWVudE5vZGUsIHN1YnN0aXR1dGlvbnMsIGNvbnRleHQpO1xuXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlVmVyaWZpZWQgPSBtZXRhQXJndW1lbnROb2RlVmVyaWZpZWQ7IC8vL1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgY29uc3QgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgICAgICAgY29tYmluYXRvckNoaWxkTm9kZXMgPSBjb21iaW5hdG9yTm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICAgICAgICBub2Rlc0EgPSBjaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgICAgICAgICBub2Rlc0IgPSBjb21iaW5hdG9yQ2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgICAgICAgbm9kZXNWZXJpZmllZCA9IHRoaXMudmVyaWZ5Tm9kZXMobm9kZXNBLCBub2Rlc0IsIHN1YnN0aXR1dGlvbnMsIGNvbnRleHQpO1xuXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlVmVyaWZpZWQgPSBub2Rlc1ZlcmlmaWVkOyAvLy9cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZVZlcmlmaWVkO1xuICB9XG5cbiAgdmVyaWZ5QXJndW1lbnROb2RlKGFyZ3VtZW50Tm9kZSwgY29tYmluYXRvckFyZ3VtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgY29udGV4dCkge1xuICAgIGxldCBhcmd1bWVudE5vZGVWZXJpZmllZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgdGVybU5vZGUgPSB0ZXJtTm9kZVF1ZXJ5KGFyZ3VtZW50Tm9kZSk7XG5cbiAgICBpZiAodGVybU5vZGUgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGFyZ3VtZW50U3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcoYXJndW1lbnROb2RlKTtcblxuICAgICAgY29udGV4dC5lcnJvcihgVGhlICR7YXJndW1lbnRTdHJpbmd9IGFyZ3VtZW50IHNob3VsZCBiZSBhIHRlcm0sIG5vdCBhIHR5cGVgLCBhcmd1bWVudE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0eXBlcyA9IFtdLFxuICAgICAgICAgICAgdGVybVZlcmlmaWVkID0gdmVyaWZ5VGVybSh0ZXJtTm9kZSwgdHlwZXMsIGNvbnRleHQpO1xuXG4gICAgICBpZiAodGVybVZlcmlmaWVkKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0VHlwZSA9IGZpcnN0KHR5cGVzKSxcbiAgICAgICAgICAgICAgdGVybVR5cGUgPSBmaXJzdFR5cGUsIC8vL1xuICAgICAgICAgICAgICB0eXBlTm9kZSA9IHR5cGVOb2RlUXVlcnkoY29tYmluYXRvckFyZ3VtZW50Tm9kZSksXG4gICAgICAgICAgICAgIHR5cGVOYW1lID0gdHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUpLFxuICAgICAgICAgICAgICB0eXBlID0gKHR5cGVOYW1lID09PSBPQkpFQ1RfVFlQRV9OQU1FKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RUeXBlIDogIC8vL1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmZpbmRUeXBlQnlUeXBlTmFtZSh0eXBlTmFtZSksXG4gICAgICAgICAgICAgIHN0YXRlbWVudFR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUeXBlID0gdGVybVR5cGUuaXNFcXVhbFRvT3JTdWJUeXBlT2YodHlwZSk7XG5cbiAgICAgICAgaWYgKHN0YXRlbWVudFR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUeXBlKSB7XG4gICAgICAgICAgYXJndW1lbnROb2RlVmVyaWZpZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyZ3VtZW50Tm9kZVZlcmlmaWVkO1xuICB9XG5cbiAgdmVyaWZ5TWV0YWFyZ3VtZW50Tm9kZShtZXRhQXJndW1lbnROb2RlLCBjb21iaW5hdG9yTWV0YWFyZ3VtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgY29udGV4dCkge1xuICAgIGxldCBtZXRhQXJndW1lbnROb2RlVmVyaWZpZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlUXVlcnkobWV0YUFyZ3VtZW50Tm9kZSksXG4gICAgICAgICAgY29tYmluYXRvck1ldGFUWXBlTm9kZSA9IG1ldGFUeXBlTm9kZVF1ZXJ5KGNvbWJpbmF0b3JNZXRhYXJndW1lbnROb2RlKTtcblxuICAgIGlmIChzdGF0ZW1lbnROb2RlID09PSBudWxsKSB7XG4gICAgICBjb25zdCBtZXRhQXJndW1lbnRTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhtZXRhQXJndW1lbnROb2RlKTtcblxuICAgICAgY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYSBzdGF0ZW1lbnQgYnV0IGdvdCBhICcke21ldGFBcmd1bWVudFN0cmluZ30nIG1ldGEtdHlwZS5gLCBtZXRhQXJndW1lbnROb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvbWJpbmF0b3JNZXRhVFlwZU5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgY29tYmluYXRvck1ldGFhcmd1bWVudFN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKGNvbWJpbmF0b3JNZXRhYXJndW1lbnROb2RlKTtcblxuICAgICAgICBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhIG1ldGEtdHlwZSBidXQgZ290IGEgJyR7Y29tYmluYXRvck1ldGFhcmd1bWVudFN0cmluZ30nIHN0YXRlbWVudC5gLCBtZXRhQXJndW1lbnROb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNvbWJpbmF0b3JNZXRhVHlwZVRlcm1pbmFsTm9kZSA9IG1ldGFUeXBlVGVybWluYWxOb2RlUXVlcnkoY29tYmluYXRvck1ldGFUWXBlTm9kZSksXG4gICAgICAgICAgICAgIGNvbnRlbnQgPSBjb21iaW5hdG9yTWV0YVR5cGVUZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgICAgICBjb250ZW50U3RhdGVtZW50TWV0YVR5cGUgPSAoY29udGVudCA9PT0gU1RBVEVNRU5UX01FVEFfVFlQRSk7XG5cbiAgICAgICAgaWYgKCFjb250ZW50U3RhdGVtZW50TWV0YVR5cGUpIHtcbiAgICAgICAgICBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCB0aGUgbWV0YS10eXBlIHRvIGJlICdTdGF0ZW1lbnQnIGJ1dCBnb3QgJyR7Y29udGVudH0nLmAsIG1ldGFBcmd1bWVudE5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1ldGFBcmd1bWVudE5vZGVWZXJpZmllZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YUFyZ3VtZW50Tm9kZVZlcmlmaWVkO1xuICB9XG59XG5cbmNvbnN0IHN0YXRlbWVudFZlcmlmaWVyID0gbmV3IFN0YXRlbWVudFZlcmlmaWVyKCk7XG5cbmV4cG9ydCBkZWZhdWx0IHN0YXRlbWVudFZlcmlmaWVyO1xuXG4iXSwibmFtZXMiOlsidGVybU5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsInR5cGVOb2RlUXVlcnkiLCJtZXRhVHlwZU5vZGVRdWVyeSIsInN0YXRlbWVudE5vZGVRdWVyeSIsIm1ldGFUeXBlVGVybWluYWxOb2RlUXVlcnkiLCJTdGF0ZW1lbnRWZXJpZmllciIsInZlcmlmeU5vblRlcm1pbmFsTm9kZSIsIm5vblRlcm1pbmFsTm9kZUEiLCJub25UZXJtaW5hbE5vZGVCIiwic3Vic3RpdHV0aW9ucyIsImNvbnRleHQiLCJub25UZXJtaW5hbE5vZGVWZXJpZmllZCIsIm5vblRlcm1pbmFsTm9kZSIsImNvbWJpbmF0b3JOb25UZXJtaW5hbE5vZGUiLCJydWxlTmFtZSIsImdldFJ1bGVOYW1lIiwiY29tYmluYXRvclJ1bGVOYW1lIiwiQVJHVU1FTlRfUlVMRV9OQU1FIiwiYXJndW1lbnROb2RlIiwiY29tYmluYXRvckFyZ3VtZW50Tm9kZSIsImFyZ3VtZW50Tm9kZVZlcmlmaWVkIiwidmVyaWZ5QXJndW1lbnROb2RlIiwiTUVUQV9BUkdVTUVOVF9SVUxFX05BTUUiLCJtZXRhQXJndW1lbnROb2RlIiwiY29tYmluYXRvck1ldGFhcmd1bWVudE5vZGUiLCJtZXRhQXJndW1lbnROb2RlVmVyaWZpZWQiLCJ2ZXJpZnlNZXRhYXJndW1lbnROb2RlIiwiY2hpbGROb2RlcyIsImdldENoaWxkTm9kZXMiLCJjb21iaW5hdG9yQ2hpbGROb2RlcyIsIm5vZGVzQSIsIm5vZGVzQiIsIm5vZGVzVmVyaWZpZWQiLCJ2ZXJpZnlOb2RlcyIsInRlcm1Ob2RlIiwiYXJndW1lbnRTdHJpbmciLCJub2RlQXNTdHJpbmciLCJlcnJvciIsInR5cGVzIiwidGVybVZlcmlmaWVkIiwidmVyaWZ5VGVybSIsImZpcnN0VHlwZSIsImZpcnN0IiwidGVybVR5cGUiLCJ0eXBlTm9kZSIsInR5cGVOYW1lIiwidHlwZU5hbWVGcm9tVHlwZU5vZGUiLCJ0eXBlIiwiT0JKRUNUX1RZUEVfTkFNRSIsIm9iamVjdFR5cGUiLCJmaW5kVHlwZUJ5VHlwZU5hbWUiLCJzdGF0ZW1lbnRUeXBlRXF1YWxUb09yU3ViVHlwZU9mVHlwZSIsImlzRXF1YWxUb09yU3ViVHlwZU9mIiwic3RhdGVtZW50Tm9kZSIsImNvbWJpbmF0b3JNZXRhVFlwZU5vZGUiLCJtZXRhQXJndW1lbnRTdHJpbmciLCJjb21iaW5hdG9yTWV0YWFyZ3VtZW50U3RyaW5nIiwiY29tYmluYXRvck1ldGFUeXBlVGVybWluYWxOb2RlIiwiY29udGVudCIsImdldENvbnRlbnQiLCJjb250ZW50U3RhdGVtZW50TWV0YVR5cGUiLCJTVEFURU1FTlRfTUVUQV9UWVBFIiwiVmVyaWZpZXIiLCJzdGF0ZW1lbnRWZXJpZmllciJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBcUlBOzs7ZUFBQTs7OzZEQW5JcUI7eURBQ0U7cUJBRUQ7b0JBQ0s7eUJBQ007eUJBQ0c7cUJBQ1k7eUJBQ1k7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFNUQsSUFBTUEsZ0JBQWdCQyxJQUFBQSxnQkFBUyxFQUFDLG9CQUMxQkMsZ0JBQWdCRCxJQUFBQSxnQkFBUyxFQUFDLG9CQUMxQkUsb0JBQW9CRixJQUFBQSxnQkFBUyxFQUFDLDRCQUM5QkcscUJBQXFCSCxJQUFBQSxnQkFBUyxFQUFDLDZCQUMvQkksNEJBQTRCSixJQUFBQSxnQkFBUyxFQUFDO0FBRTVDLElBQUEsQUFBTUssa0NBaUhILEFBakhIO2NBQU1BOzhCQUFBQTthQUFBQTs4QkFBQUE7OztpQkFBQUE7O1lBQ0pDLEtBQUFBO21CQUFBQSxTQUFBQSxzQkFBc0JDLGdCQUFnQixFQUFFQyxnQkFBZ0IsRUFBRUMsYUFBYSxFQUFFQyxPQUFPLEVBQUU7Z0JBQ2hGLElBQUlDLDBCQUEwQixLQUFLO2dCQUVuQyxJQUFNQyxrQkFBa0JMLGtCQUNsQk0sNEJBQTRCTCxrQkFBa0IsR0FBRztnQkFFdkQsSUFBTU0sV0FBV0YsZ0JBQWdCRyxXQUFXLElBQ3RDQyxxQkFBcUJILDBCQUEwQkUsV0FBVyxJQUFJLEdBQUc7Z0JBRXZFLElBQUlELGFBQWFFLG9CQUFvQjtvQkFDbkMsT0FBUUY7d0JBQ04sS0FBS0csNkJBQWtCOzRCQUFFO2dDQUN2QixJQUFNQyxlQUFlTixpQkFDZk8seUJBQXlCTiwyQkFDekJPLHVCQUF1QixJQUFJLENBQUNDLGtCQUFrQixDQUFDSCxjQUFj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
|