occam-verify-cli 0.0.273 → 0.0.274

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/.swcrc +5 -0
  2. package/bin/abbreviations.js +4 -2
  3. package/bin/context/{package → release}/fileSystem.js +38 -25
  4. package/bin/fileNames.js +7 -7
  5. package/bin/loadReleaseContexts.js +52 -0
  6. package/bin/main.js +8 -9
  7. package/bin/options.js +2 -2
  8. package/bin/utilities/fileSystem.js +13 -15
  9. package/lib/assertion.js +140 -0
  10. package/lib/axiom.js +90 -0
  11. package/lib/browser.js +27 -0
  12. package/lib/combinator.js +58 -0
  13. package/lib/conclusion.js +140 -0
  14. package/lib/constants.js +42 -0
  15. package/lib/constructor.js +76 -0
  16. package/lib/context/file.js +342 -0
  17. package/lib/context/metaproof.js +232 -0
  18. package/lib/context/proof.js +211 -0
  19. package/lib/context/release.js +303 -0
  20. package/lib/main.js +27 -0
  21. package/lib/metaAssertion.js +200 -0
  22. package/lib/metaSubstitution.js +123 -0
  23. package/lib/permutationsMatrix.js +466136 -0
  24. package/lib/premise.js +168 -0
  25. package/lib/rule.js +139 -0
  26. package/lib/ruleNames.js +46 -0
  27. package/lib/type.js +153 -0
  28. package/lib/utilities/array.js +99 -0
  29. package/lib/utilities/metastatement.js +45 -0
  30. package/lib/utilities/permutations.js +114 -0
  31. package/lib/utilities/query.js +81 -0
  32. package/lib/utilities/string.js +54 -0
  33. package/lib/variable.js +94 -0
  34. package/lib/verify/IndicativeConditional.js +29 -0
  35. package/lib/verify/assertion/type.js +52 -0
  36. package/lib/verify/axiom.js +52 -0
  37. package/lib/verify/conclusion.js +34 -0
  38. package/lib/verify/conditinalInference.js +30 -0
  39. package/lib/verify/declaration/combinator.js +24 -0
  40. package/lib/verify/declaration/constructor.js +24 -0
  41. package/lib/verify/declaration/topLevel.js +51 -0
  42. package/lib/verify/declaration/type.js +24 -0
  43. package/lib/verify/declaration/variable.js +24 -0
  44. package/lib/verify/equality.js +45 -0
  45. package/lib/verify/file.js +39 -0
  46. package/lib/verify/files.js +48 -0
  47. package/lib/verify/label.js +24 -0
  48. package/lib/verify/labels.js +27 -0
  49. package/lib/verify/metaDerivation.js +94 -0
  50. package/lib/verify/metaproof.js +81 -0
  51. package/lib/verify/metastatement/qualified.js +31 -0
  52. package/lib/verify/metastatement/unqualified.js +39 -0
  53. package/lib/verify/premiseOrPremises.js +39 -0
  54. package/lib/verify/release.js +61 -0
  55. package/lib/verify/rule.js +61 -0
  56. package/lib/verify/statement/qualified.js +24 -0
  57. package/lib/verify/statement/unqualified.js +32 -0
  58. package/lib/verify/statement.js +43 -0
  59. package/lib/verify/statementAsCombinator.js +102 -0
  60. package/lib/verify/supposition.js +29 -0
  61. package/lib/verify/term.js +121 -0
  62. package/lib/verify/termAsConstructor.js +126 -0
  63. package/lib/verify/termAsVariable.js +31 -0
  64. package/lib/verify/type.js +45 -0
  65. package/lib/verify/unconditionalInference.js +31 -0
  66. package/lib/verify/variable.js +48 -0
  67. package/package.json +21 -5
  68. package/{bin → src}/assertion.js +2 -4
  69. package/src/axiom.js +49 -0
  70. package/src/browser.js +4 -0
  71. package/{bin → src}/combinator.js +2 -4
  72. package/{bin → src}/conclusion.js +4 -6
  73. package/src/constants.js +9 -0
  74. package/{bin → src}/constructor.js +2 -4
  75. package/{bin → src}/context/file.js +34 -24
  76. package/{bin → src}/context/metaproof.js +13 -3
  77. package/{bin → src}/context/proof.js +13 -3
  78. package/src/context/release.js +219 -0
  79. package/src/main.js +4 -0
  80. package/{bin → src}/metaAssertion.js +4 -6
  81. package/{bin → src}/metaSubstitution.js +2 -4
  82. package/{bin → src}/permutationsMatrix.js +1 -1
  83. package/{bin → src}/premise.js +6 -8
  84. package/{bin → src}/rule.js +24 -15
  85. package/src/ruleNames.js +10 -0
  86. package/{bin → src}/type.js +1 -3
  87. package/{bin → src}/utilities/array.js +19 -24
  88. package/{bin → src}/utilities/metastatement.js +5 -10
  89. package/{bin → src}/utilities/permutations.js +4 -4
  90. package/{bin → src}/utilities/query.js +8 -18
  91. package/{bin → src}/utilities/string.js +4 -10
  92. package/{bin → src}/variable.js +1 -3
  93. package/src/verify/IndicativeConditional.js +20 -0
  94. package/{bin → src}/verify/assertion/type.js +8 -14
  95. package/src/verify/axiom.js +68 -0
  96. package/{bin → src}/verify/conclusion.js +4 -6
  97. package/src/verify/conditinalInference.js +25 -0
  98. package/{bin → src}/verify/declaration/combinator.js +3 -5
  99. package/{bin → src}/verify/declaration/constructor.js +3 -5
  100. package/{bin → src}/verify/declaration/topLevel.js +8 -10
  101. package/{bin → src}/verify/declaration/type.js +3 -5
  102. package/{bin → src}/verify/declaration/variable.js +3 -5
  103. package/{bin → src}/verify/equality.js +4 -6
  104. package/{bin → src}/verify/file.js +9 -15
  105. package/{bin → src}/verify/files.js +5 -7
  106. package/{bin → src}/verify/label.js +3 -9
  107. package/{bin → src}/verify/labels.js +2 -4
  108. package/{bin → src}/verify/metaDerivation.js +24 -18
  109. package/{bin → src}/verify/metaproof.js +6 -7
  110. package/{bin → src}/verify/metastatement/qualified.js +4 -10
  111. package/{bin → src}/verify/metastatement/unqualified.js +5 -11
  112. package/{bin → src}/verify/premiseOrPremises.js +9 -10
  113. package/src/verify/release.js +70 -0
  114. package/{bin → src}/verify/rule.js +13 -21
  115. package/{bin → src}/verify/statement/qualified.js +3 -5
  116. package/{bin → src}/verify/statement/unqualified.js +3 -5
  117. package/{bin → src}/verify/statement.js +7 -13
  118. package/{bin → src}/verify/statementAsCombinator.js +8 -14
  119. package/{bin → src}/verify/supposition.js +4 -6
  120. package/{bin → src}/verify/term.js +7 -13
  121. package/{bin → src}/verify/termAsConstructor.js +13 -19
  122. package/{bin → src}/verify/termAsVariable.js +3 -9
  123. package/{bin → src}/verify/type.js +7 -13
  124. package/{bin → src}/verify/unconditionalInference.js +4 -6
  125. package/{bin → src}/verify/variable.js +6 -12
  126. package/bin/axiom.js +0 -52
  127. package/bin/consequent.js +0 -19
  128. package/bin/constants.js +0 -19
  129. package/bin/context/package.js +0 -221
  130. package/bin/loadPackageContexts.js +0 -53
  131. package/bin/permutations.js +0 -3
  132. package/bin/ruleNames.js +0 -23
  133. package/bin/verify/axiom/IndicativeConditional.js +0 -54
  134. package/bin/verify/axiom/unqualifiedStatement.js +0 -40
  135. package/bin/verify/axiom.js +0 -37
  136. package/bin/verify/conditinalInference.js +0 -36
  137. package/bin/verify/consequent.js +0 -32
  138. package/bin/verify/metaSupposition.js +0 -24
  139. package/bin/verify/package.js +0 -81
  140. package/index.js +0 -9
@@ -0,0 +1,342 @@
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 FileContext;
9
+ }
10
+ });
11
+ var _occamGrammarUtilities = require("occam-grammar-utilities");
12
+ var _array = require("../utilities/array");
13
+ function _arrayLikeToArray(arr, len) {
14
+ if (len == null || len > arr.length) len = arr.length;
15
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
16
+ return arr2;
17
+ }
18
+ function _arrayWithoutHoles(arr) {
19
+ if (Array.isArray(arr)) return _arrayLikeToArray(arr);
20
+ }
21
+ function _classCallCheck(instance, Constructor) {
22
+ if (!(instance instanceof Constructor)) {
23
+ throw new TypeError("Cannot call a class as a function");
24
+ }
25
+ }
26
+ function _defineProperties(target, props) {
27
+ for(var i = 0; i < props.length; i++){
28
+ var descriptor = props[i];
29
+ descriptor.enumerable = descriptor.enumerable || false;
30
+ descriptor.configurable = true;
31
+ if ("value" in descriptor) descriptor.writable = true;
32
+ Object.defineProperty(target, descriptor.key, descriptor);
33
+ }
34
+ }
35
+ function _createClass(Constructor, protoProps, staticProps) {
36
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
37
+ if (staticProps) _defineProperties(Constructor, staticProps);
38
+ return Constructor;
39
+ }
40
+ function _iterableToArray(iter) {
41
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
42
+ }
43
+ function _nonIterableSpread() {
44
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
45
+ }
46
+ function _toConsumableArray(arr) {
47
+ return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
48
+ }
49
+ function _unsupportedIterableToArray(o, minLen) {
50
+ if (!o) return;
51
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
52
+ var n = Object.prototype.toString.call(o).slice(8, -1);
53
+ if (n === "Object" && o.constructor) n = o.constructor.name;
54
+ if (n === "Map" || n === "Set") return Array.from(n);
55
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
56
+ }
57
+ var FileContext = /*#__PURE__*/ function() {
58
+ function FileContext(tokens, node, rules, types, axioms, variables, combinators, constructors, releaseContext) {
59
+ _classCallCheck(this, FileContext);
60
+ this.tokens = tokens;
61
+ this.node = node;
62
+ this.rules = rules;
63
+ this.types = types;
64
+ this.axioms = axioms;
65
+ this.variables = variables;
66
+ this.combinators = combinators;
67
+ this.constructors = constructors;
68
+ this.releaseContext = releaseContext;
69
+ }
70
+ _createClass(FileContext, [
71
+ {
72
+ key: "getTokens",
73
+ value: function getTokens() {
74
+ return this.tokens;
75
+ }
76
+ },
77
+ {
78
+ key: "getNode",
79
+ value: function getNode() {
80
+ return this.node;
81
+ }
82
+ },
83
+ {
84
+ key: "getRules",
85
+ value: function getRules() {
86
+ var bubble = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
87
+ var rules = _toConsumableArray(this.rules);
88
+ if (bubble) {
89
+ var releaseContextRules = this.releaseContext.getRules();
90
+ (0, _array.push)(rules, releaseContextRules);
91
+ }
92
+ return rules;
93
+ }
94
+ },
95
+ {
96
+ key: "getTypes",
97
+ value: function getTypes() {
98
+ var bubble = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
99
+ var types = _toConsumableArray(this.types);
100
+ if (bubble) {
101
+ var releaseContextTypes = this.releaseContext.getTypes();
102
+ (0, _array.push)(types, releaseContextTypes);
103
+ }
104
+ return types;
105
+ }
106
+ },
107
+ {
108
+ key: "getAxioms",
109
+ value: function getAxioms() {
110
+ var bubble = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
111
+ var axioms = _toConsumableArray(this.axioms);
112
+ if (bubble) {
113
+ var releaseContextAxioms = this.releaseContext.getAxioms();
114
+ (0, _array.push)(axioms, releaseContextAxioms);
115
+ }
116
+ return axioms;
117
+ }
118
+ },
119
+ {
120
+ key: "getLabels",
121
+ value: function getLabels() {
122
+ var axioms = this.getAxioms(), labels = axioms.reduce(function(labels, axiom) {
123
+ var axiomLabels = axiom.getLabels();
124
+ (0, _array.push)(labels, axiomLabels);
125
+ return labels;
126
+ }, []);
127
+ return labels;
128
+ }
129
+ },
130
+ {
131
+ key: "getVariables",
132
+ value: function getVariables() {
133
+ return this.variables;
134
+ }
135
+ },
136
+ {
137
+ key: "getCombinators",
138
+ value: function getCombinators() {
139
+ var bubble = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
140
+ var combinators = _toConsumableArray(this.combinators);
141
+ if (bubble) {
142
+ var releaseContextCombinators = this.releaseContext.getCombinators();
143
+ (0, _array.push)(combinators, releaseContextCombinators);
144
+ }
145
+ return combinators;
146
+ }
147
+ },
148
+ {
149
+ key: "getConstructors",
150
+ value: function getConstructors() {
151
+ var bubble = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
152
+ var constructors = _toConsumableArray(this.constructors);
153
+ if (bubble) {
154
+ var releaseContextConstructors = this.releaseContext.getConstructors();
155
+ (0, _array.push)(constructors, releaseContextConstructors);
156
+ }
157
+ return constructors;
158
+ }
159
+ },
160
+ {
161
+ key: "getReleaseContext",
162
+ value: function getReleaseContext() {
163
+ return this.releaseContext;
164
+ }
165
+ },
166
+ {
167
+ key: "getMetaAssertions",
168
+ value: function getMetaAssertions() {
169
+ var metaAssertions = [];
170
+ return metaAssertions;
171
+ }
172
+ },
173
+ {
174
+ key: "findTypeByTypeName",
175
+ value: function findTypeByTypeName(typeName) {
176
+ var types = this.getTypes(), type = types.find(function(type) {
177
+ var matches = type.matchTypeName(typeName);
178
+ if (matches) {
179
+ return true;
180
+ }
181
+ }) || null;
182
+ return type;
183
+ }
184
+ },
185
+ {
186
+ key: "findRuleByReferenceName",
187
+ value: function findRuleByReferenceName(referenceName) {
188
+ var label = referenceName, rules = this.getRules(), rule = rules.find(function(rule) {
189
+ var ruleLabels = rule.getLabels(), ruleLabelsIncludesLabel = ruleLabels.includes(label);
190
+ if (ruleLabelsIncludesLabel) {
191
+ return true;
192
+ }
193
+ }) || null;
194
+ return rule;
195
+ }
196
+ },
197
+ {
198
+ key: "findAxiomByReferenceName",
199
+ value: function findAxiomByReferenceName(referenceName) {
200
+ var label = referenceName, axioms = this.getAxioms(), axiom = axioms.find(function(axiom) {
201
+ var axiomLabels = axiom.getLabels(), axiomLabelsIncludesLabel = axiomLabels.includes(label);
202
+ if (axiomLabelsIncludesLabel) {
203
+ return true;
204
+ }
205
+ }) || null;
206
+ return axiom;
207
+ }
208
+ },
209
+ {
210
+ key: "findVariableByVariableName",
211
+ value: function findVariableByVariableName(variableName) {
212
+ var name = variableName, variable = this.variables.find(function(variable) {
213
+ var matches = variable.matchName(name);
214
+ if (matches) {
215
+ return true;
216
+ }
217
+ }) || null;
218
+ return variable;
219
+ }
220
+ },
221
+ {
222
+ key: "isDerived",
223
+ value: function isDerived() {
224
+ var derived = false;
225
+ return derived;
226
+ }
227
+ },
228
+ {
229
+ key: "isLabelPresent",
230
+ value: function isLabelPresent(label) {
231
+ var labels = this.getLabels(), labelsIncludesLabel = labels.includes(label), labelPresent = labelsIncludesLabel; ///
232
+ return labelPresent;
233
+ }
234
+ },
235
+ {
236
+ key: "matchMetaAssertion",
237
+ value: function matchMetaAssertion(metaAssertion) {
238
+ var metaAssertionMatches = false;
239
+ return metaAssertionMatches;
240
+ }
241
+ },
242
+ {
243
+ key: "isTypePresentByTypeName",
244
+ value: function isTypePresentByTypeName(typeName) {
245
+ var type = this.findTypeByTypeName(typeName), typePresent = type !== null;
246
+ return typePresent;
247
+ }
248
+ },
249
+ {
250
+ key: "isVariablePresentByVariableName",
251
+ value: function isVariablePresentByVariableName(variableName) {
252
+ var variable = this.findVariableByVariableName(variableName), variablePresent = variable !== null;
253
+ return variablePresent;
254
+ }
255
+ },
256
+ {
257
+ key: "addType",
258
+ value: function addType(type) {
259
+ this.types.push(type);
260
+ }
261
+ },
262
+ {
263
+ key: "addRule",
264
+ value: function addRule(rule) {
265
+ this.rules.push(rule);
266
+ }
267
+ },
268
+ {
269
+ key: "addAxiom",
270
+ value: function addAxiom(axiom) {
271
+ this.axioms.push(axiom);
272
+ }
273
+ },
274
+ {
275
+ key: "addVariable",
276
+ value: function addVariable(variable) {
277
+ this.variables.push(variable);
278
+ }
279
+ },
280
+ {
281
+ key: "addCombinator",
282
+ value: function addCombinator(combinator) {
283
+ this.combinators.push(combinator);
284
+ }
285
+ },
286
+ {
287
+ key: "addConstructor",
288
+ value: function addConstructor(constructor) {
289
+ this.constructors.push(constructor);
290
+ }
291
+ },
292
+ {
293
+ key: "trace",
294
+ value: function trace(message) {
295
+ this.releaseContext.trace(message);
296
+ }
297
+ },
298
+ {
299
+ key: "debug",
300
+ value: function debug(message) {
301
+ this.releaseContext.debug(message);
302
+ }
303
+ },
304
+ {
305
+ key: "info",
306
+ value: function info(message) {
307
+ this.releaseContext.info(message);
308
+ }
309
+ },
310
+ {
311
+ key: "warning",
312
+ value: function warning(message) {
313
+ this.releaseContext.warning(message);
314
+ }
315
+ },
316
+ {
317
+ key: "error",
318
+ value: function error(message) {
319
+ this.releaseContext.error(message);
320
+ }
321
+ },
322
+ {
323
+ key: "fatal",
324
+ value: function fatal(message) {
325
+ this.releaseContext.fatal(message);
326
+ }
327
+ }
328
+ ], [
329
+ {
330
+ key: "fromReleaseContextAndFilePath",
331
+ value: function fromReleaseContextAndFilePath(releaseContext, filePath) {
332
+ var fileContent = releaseContext.getFileContent(filePath), content = fileContent, tokens = releaseContext.tokenise(content), node = releaseContext.parse(tokens);
333
+ (0, _occamGrammarUtilities.rewriteNodes)(node);
334
+ var rules = [], types = [], axioms = [], variables = [], combinators = [], constructors = [], fileContext = new FileContext(tokens, node, rules, types, axioms, variables, combinators, constructors, releaseContext);
335
+ return fileContext;
336
+ }
337
+ }
338
+ ]);
339
+ return FileContext;
340
+ }();
341
+
342
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2ZpbGUuanMiLCI8PGpzeC1jb25maWctcHJhZ21hLmpzPj4iXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHJld3JpdGVOb2RlcyB9IGZyb20gXCJvY2NhbS1ncmFtbWFyLXV0aWxpdGllc1wiO1xuXG5pbXBvcnQgeyBwdXNoIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGaWxlQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKHRva2Vucywgbm9kZSwgcnVsZXMsIHR5cGVzLCBheGlvbXMsIHZhcmlhYmxlcywgY29tYmluYXRvcnMsIGNvbnN0cnVjdG9ycywgcmVsZWFzZUNvbnRleHQpIHtcbiAgICB0aGlzLnRva2VucyA9IHRva2VucztcbiAgICB0aGlzLm5vZGUgPSBub2RlO1xuICAgIHRoaXMucnVsZXMgPSBydWxlcztcbiAgICB0aGlzLnR5cGVzID0gdHlwZXM7XG4gICAgdGhpcy5heGlvbXMgPSBheGlvbXM7XG4gICAgdGhpcy52YXJpYWJsZXMgPSB2YXJpYWJsZXM7XG4gICAgdGhpcy5jb21iaW5hdG9ycyA9IGNvbWJpbmF0b3JzO1xuICAgIHRoaXMuY29uc3RydWN0b3JzID0gY29uc3RydWN0b3JzO1xuICAgIHRoaXMucmVsZWFzZUNvbnRleHQgPSByZWxlYXNlQ29udGV4dDtcbiAgfVxuXG4gIGdldFRva2VucygpIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbnM7XG4gIH1cblxuICBnZXROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLm5vZGU7XG4gIH1cblxuICBnZXRSdWxlcyhidWJibGUgPSB0cnVlKSB7XG4gICAgY29uc3QgcnVsZXMgPSBbXG4gICAgICAuLi50aGlzLnJ1bGVzXG4gICAgXTtcblxuICAgIGlmIChidWJibGUpIHtcbiAgICAgIGNvbnN0IHJlbGVhc2VDb250ZXh0UnVsZXMgPSB0aGlzLnJlbGVhc2VDb250ZXh0LmdldFJ1bGVzKCk7XG5cbiAgICAgIHB1c2gocnVsZXMsIHJlbGVhc2VDb250ZXh0UnVsZXMpO1xuICAgIH1cblxuICAgIHJldHVybiBydWxlcztcbiAgfVxuXG4gIGdldFR5cGVzKGJ1YmJsZSA9IHRydWUpIHtcbiAgICBjb25zdCB0eXBlcyA9IFtcbiAgICAgIC4uLnRoaXMudHlwZXNcbiAgICBdO1xuXG4gICAgaWYgKGJ1YmJsZSkge1xuICAgICAgY29uc3QgcmVsZWFzZUNvbnRleHRUeXBlcyA9IHRoaXMucmVsZWFzZUNvbnRleHQuZ2V0VHlwZXMoKTtcblxuICAgICAgcHVzaCh0eXBlcywgcmVsZWFzZUNvbnRleHRUeXBlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVzO1xuICB9XG5cbiAgZ2V0QXhpb21zKGJ1YmJsZSA9IHRydWUpIHtcbiAgICBjb25zdCBheGlvbXMgPSBbXG4gICAgICAuLi50aGlzLmF4aW9tc1xuICAgIF07XG5cbiAgICBpZiAoYnViYmxlKSB7XG4gICAgICBjb25zdCByZWxlYXNlQ29udGV4dEF4aW9tcyA9IHRoaXMucmVsZWFzZUNvbnRleHQuZ2V0QXhpb21zKCk7XG5cbiAgICAgIHB1c2goYXhpb21zLCByZWxlYXNlQ29udGV4dEF4aW9tcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF4aW9tcztcbiAgfVxuXG4gIGdldExhYmVscygpIHtcbiAgICBjb25zdCBheGlvbXMgPSB0aGlzLmdldEF4aW9tcygpLFxuICAgICAgICAgIGxhYmVscyA9IGF4aW9tcy5yZWR1Y2UoKGxhYmVscywgYXhpb20pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGF4aW9tTGFiZWxzID0gYXhpb20uZ2V0TGFiZWxzKCk7XG5cbiAgICAgICAgICAgIHB1c2gobGFiZWxzLCBheGlvbUxhYmVscyk7XG5cbiAgICAgICAgICAgIHJldHVybiBsYWJlbHM7XG4gICAgICAgICAgfSwgW10pO1xuXG4gICAgcmV0dXJuIGxhYmVscztcbiAgfVxuXG4gIGdldFZhcmlhYmxlcygpIHtcbiAgICByZXR1cm4gdGhpcy52YXJpYWJsZXM7XG4gIH1cblxuICBnZXRDb21iaW5hdG9ycyhidWJibGUgPSB0cnVlKSB7XG4gICAgY29uc3QgY29tYmluYXRvcnMgPSBbXG4gICAgICAuLi50aGlzLmNvbWJpbmF0b3JzXG4gICAgXTtcblxuICAgIGlmIChidWJibGUpIHtcbiAgICAgIGNvbnN0IHJlbGVhc2VDb250ZXh0Q29tYmluYXRvcnMgPSB0aGlzLnJlbGVhc2VDb250ZXh0LmdldENvbWJpbmF0b3JzKCk7XG5cbiAgICAgIHB1c2goY29tYmluYXRvcnMsIHJlbGVhc2VDb250ZXh0Q29tYmluYXRvcnMpO1xuICAgIH1cblxuICAgIHJldHVybiBjb21iaW5hdG9ycztcbiAgfVxuXG4gIGdldENvbnN0cnVjdG9ycyhidWJibGUgPSB0cnVlKSB7XG4gICAgY29uc3QgY29uc3RydWN0b3JzID0gW1xuICAgICAgLi4udGhpcy5jb25zdHJ1Y3RvcnNcbiAgICBdO1xuXG4gICAgaWYgKGJ1YmJsZSkge1xuICAgICAgY29uc3QgcmVsZWFzZUNvbnRleHRDb25zdHJ1Y3RvcnMgPSB0aGlzLnJlbGVhc2VDb250ZXh0LmdldENvbnN0cnVjdG9ycygpO1xuXG4gICAgICBwdXNoKGNvbnN0cnVjdG9ycywgcmVsZWFzZUNvbnRleHRDb25zdHJ1Y3RvcnMpO1xuICAgIH1cblxuICAgIHJldHVybiBjb25zdHJ1Y3RvcnM7XG4gIH1cblxuICBnZXRSZWxlYXNlQ29udGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5yZWxlYXNlQ29udGV4dDtcbiAgfVxuXG4gIGdldE1ldGFBc3NlcnRpb25zKCkge1xuICAgIGNvbnN0IG1ldGFBc3NlcnRpb25zID0gW107XG5cbiAgICByZXR1cm4gbWV0YUFzc2VydGlvbnM7XG4gIH1cblxuICBmaW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUpIHtcbiAgICBjb25zdCB0eXBlcyA9IHRoaXMuZ2V0VHlwZXMoKSxcbiAgICAgICAgICB0eXBlID0gdHlwZXMuZmluZCgodHlwZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHR5cGUubWF0Y2hUeXBlTmFtZSh0eXBlTmFtZSk7XG5cbiAgICAgICAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIGZpbmRSdWxlQnlSZWZlcmVuY2VOYW1lKHJlZmVyZW5jZU5hbWUpIHtcbiAgICBjb25zdCBsYWJlbCA9IHJlZmVyZW5jZU5hbWUsICAvLy9cbiAgICAgICAgICBydWxlcyA9IHRoaXMuZ2V0UnVsZXMoKSxcbiAgICAgICAgICBydWxlID0gcnVsZXMuZmluZCgocnVsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcnVsZUxhYmVscyA9IHJ1bGUuZ2V0TGFiZWxzKCksXG4gICAgICAgICAgICAgICAgICBydWxlTGFiZWxzSW5jbHVkZXNMYWJlbCA9IHJ1bGVMYWJlbHMuaW5jbHVkZXMobGFiZWwpO1xuXG4gICAgICAgICAgICBpZiAocnVsZUxhYmVsc0luY2x1ZGVzTGFiZWwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG5cbiAgZmluZEF4aW9tQnlSZWZlcmVuY2VOYW1lKHJlZmVyZW5jZU5hbWUpIHtcbiAgICBjb25zdCBsYWJlbCA9IHJlZmVyZW5jZU5hbWUsICAvLy9cbiAgICAgICAgICBheGlvbXMgPSB0aGlzLmdldEF4aW9tcygpLFxuICAgICAgICAgIGF4aW9tID0gYXhpb21zLmZpbmQoKGF4aW9tKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBheGlvbUxhYmVscyA9IGF4aW9tLmdldExhYmVscygpLFxuICAgICAgICAgICAgICAgICAgYXhpb21MYWJlbHNJbmNsdWRlc0xhYmVsID0gYXhpb21MYWJlbHMuaW5jbHVkZXMobGFiZWwpO1xuXG4gICAgICAgICAgICBpZiAoYXhpb21MYWJlbHNJbmNsdWRlc0xhYmVsKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gYXhpb207XG4gIH1cblxuICBmaW5kVmFyaWFibGVCeVZhcmlhYmxlTmFtZSh2YXJpYWJsZU5hbWUpIHtcbiAgICBjb25zdCBuYW1lID0gdmFyaWFibGVOYW1lLCAgLy8vXG4gICAgICAgICAgdmFyaWFibGUgPSB0aGlzLnZhcmlhYmxlcy5maW5kKCh2YXJpYWJsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHZhcmlhYmxlLm1hdGNoTmFtZShuYW1lKTtcblxuICAgICAgICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiB2YXJpYWJsZTtcbiAgfVxuXG4gIGlzRGVyaXZlZCgpIHtcbiAgICBjb25zdCBkZXJpdmVkID0gZmFsc2U7XG5cbiAgICByZXR1cm4gZGVyaXZlZDtcbiAgfVxuXG4gIGlzTGFiZWxQcmVzZW50KGxhYmVsKSB7XG4gICAgY29uc3QgbGFiZWxzID0gdGhpcy5nZXRMYWJlbHMoKSxcbiAgICAgICAgICBsYWJlbHNJbmNsdWRlc0xhYmVsID0gbGFiZWxzLmluY2x1ZGVzKGxhYmVsKSxcbiAgICAgICAgICBsYWJlbFByZXNlbnQgPSBsYWJlbHNJbmNsdWRlc0xhYmVsOyAvLy9cblxuICAgIHJldHVybiBsYWJlbFByZXNlbnQ7XG4gIH1cblxuICBtYXRjaE1ldGFBc3NlcnRpb24obWV0YUFzc2VydGlvbikge1xuICAgIGNvbnN0IG1ldGFBc3NlcnRpb25NYXRjaGVzID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbWV0YUFzc2VydGlvbk1hdGNoZXM7XG4gIH1cblxuICBpc1R5cGVQcmVzZW50QnlUeXBlTmFtZSh0eXBlTmFtZSkge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmZpbmRUeXBlQnlUeXBlTmFtZSh0eXBlTmFtZSksXG4gICAgICAgICAgdHlwZVByZXNlbnQgPSAodHlwZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gdHlwZVByZXNlbnQ7XG4gIH1cblxuICBpc1ZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVOYW1lKHZhcmlhYmxlTmFtZSkge1xuICAgIGNvbnN0IHZhcmlhYmxlID0gdGhpcy5maW5kVmFyaWFibGVCeVZhcmlhYmxlTmFtZSh2YXJpYWJsZU5hbWUpLFxuICAgICAgICAgIHZhcmlhYmxlUHJlc2VudCA9ICh2YXJpYWJsZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gdmFyaWFibGVQcmVzZW50O1xuICB9XG5cbiAgYWRkVHlwZSh0eXBlKSB7XG4gICAgdGhpcy50eXBlcy5wdXNoKHR5cGUpO1xuICB9XG5cbiAgYWRkUnVsZShydWxlKSB7XG4gICAgdGhpcy5ydWxlcy5wdXNoKHJ1bGUpO1xuICB9XG5cbiAgYWRkQXhpb20oYXhpb20pIHtcbiAgICB0aGlzLmF4aW9tcy5wdXNoKGF4aW9tKTtcbiAgfVxuXG4gIGFkZFZhcmlhYmxlKHZhcmlhYmxlKSB7XG4gICAgdGhpcy52YXJpYWJsZXMucHVzaCh2YXJpYWJsZSk7XG4gIH1cblxuICBhZGRDb21iaW5hdG9yKGNvbWJpbmF0b3IpIHtcbiAgICB0aGlzLmNvbWJpbmF0b3JzLnB1c2goY29tYmluYXRvcik7XG4gIH1cblxuICBhZGRDb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvcikge1xuICAgIHRoaXMuY29uc3RydWN0b3JzLnB1c2goY29uc3RydWN0b3IpO1xuICB9XG5cbiAgdHJhY2UobWVzc2FnZSkgeyB0aGlzLnJlbGVhc2VDb250ZXh0LnRyYWNlKG1lc3NhZ2UpOyB9XG5cbiAgZGVidWcobWVzc2FnZSkgeyB0aGlzLnJlbGVhc2VDb250ZXh0LmRlYnVnKG1lc3NhZ2UpOyB9XG5cbiAgaW5mbyhtZXNzYWdlKSB7IHRoaXMucmVsZWFzZUNvbnRleHQuaW5mbyhtZXNzYWdlKTsgfVxuXG4gIHdhcm5pbmcobWVzc2FnZSkgeyB0aGlzLnJlbGVhc2VDb250ZXh0Lndhcm5pbmcobWVzc2FnZSk7IH1cblxuICBlcnJvcihtZXNzYWdlKSB7IHRoaXMucmVsZWFzZUNvbnRleHQuZXJyb3IobWVzc2FnZSk7IH1cblxuICBmYXRhbChtZXNzYWdlKSB7IHRoaXMucmVsZWFzZUNvbnRleHQuZmF0YWwobWVzc2FnZSk7IH1cblxuICBzdGF0aWMgZnJvbVJlbGVhc2VDb250ZXh0QW5kRmlsZVBhdGgocmVsZWFzZUNvbnRleHQsIGZpbGVQYXRoKSB7XG4gICAgY29uc3QgZmlsZUNvbnRlbnQgPSByZWxlYXNlQ29udGV4dC5nZXRGaWxlQ29udGVudChmaWxlUGF0aCksXG4gICAgICAgICAgY29udGVudCA9IGZpbGVDb250ZW50LCAgLy8vXG4gICAgICAgICAgdG9rZW5zID0gcmVsZWFzZUNvbnRleHQudG9rZW5pc2UoY29udGVudCksXG4gICAgICAgICAgbm9kZSA9IHJlbGVhc2VDb250ZXh0LnBhcnNlKHRva2Vucyk7XG5cbiAgICByZXdyaXRlTm9kZXMobm9kZSk7XG5cbiAgICBjb25zdCBydWxlcyA9IFtdLFxuICAgICAgICAgIHR5cGVzID0gW10sXG4gICAgICAgICAgYXhpb21zID0gW10sXG4gICAgICAgICAgdmFyaWFibGVzID0gW10sXG4gICAgICAgICAgY29tYmluYXRvcnMgPSBbXSxcbiAgICAgICAgICBjb25zdHJ1Y3RvcnMgPSBbXSxcbiAgICAgICAgICBmaWxlQ29udGV4dCA9IG5ldyBGaWxlQ29udGV4dCh0b2tlbnMsIG5vZGUsIHJ1bGVzLCB0eXBlcywgYXhpb21zLCB2YXJpYWJsZXMsIGNvbWJpbmF0b3JzLCBjb25zdHJ1Y3RvcnMsIHJlbGVhc2VDb250ZXh0KTtcblxuICAgIHJldHVybiBmaWxlQ29udGV4dDtcbiAgfVxufVxuIiwiUmVhY3QuY3JlYXRlRWxlbWVudCJdLCJuYW1lcyI6WyJGaWxlQ29udGV4dCIsInRva2VucyIsIm5vZGUiLCJydWxlcyIsInR5cGVzIiwiYXhpb21zIiwidmFyaWFibGVzIiwiY29tYmluYXRvcnMiLCJjb25zdHJ1Y3RvcnMiLCJyZWxlYXNlQ29udGV4dCIsImdldFRva2VucyIsImdldE5vZGUiLCJnZXRSdWxlcyIsImJ1YmJsZSIsInJlbGVhc2VDb250ZXh0UnVsZXMiLCJwdXNoIiwiZ2V0VHlwZXMiLCJyZWxlYXNlQ29udGV4dFR5cGVzIiwiZ2V0QXhpb21zIiwicmVsZWFzZUNvbnRleHRBeGlvbXMiLCJnZXRMYWJlbHMiLCJsYWJlbHMiLCJyZWR1Y2UiLCJheGlvbSIsImF4aW9tTGFiZWxzIiwiZ2V0VmFyaWFibGVzIiwiZ2V0Q29tYmluYXRvcnMiLCJyZWxlYXNlQ29udGV4dENvbWJpbmF0b3JzIiwiZ2V0Q29uc3RydWN0b3JzIiwicmVsZWFzZUNvbnRleHRDb25zdHJ1Y3RvcnMiLCJnZXRSZWxlYXNlQ29udGV4dCIsImdldE1ldGFBc3NlcnRpb25zIiwibWV0YUFzc2VydGlvbnMiLCJmaW5kVHlwZUJ5VHlwZU5hbWUiLCJ0eXBlTmFtZSIsInR5cGUiLCJmaW5kIiwibWF0Y2hlcyIsIm1hdGNoVHlwZU5hbWUiLCJmaW5kUnVsZUJ5UmVmZXJlbmNlTmFtZSIsInJlZmVyZW5jZU5hbWUiLCJsYWJlbCIsInJ1bGUiLCJydWxlTGFiZWxzIiwicnVsZUxhYmVsc0luY2x1ZGVzTGFiZWwiLCJpbmNsdWRlcyIsImZpbmRBeGlvbUJ5UmVmZXJlbmNlTmFtZSIsImF4aW9tTGFiZWxzSW5jbHVkZXNMYWJlbCIsImZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOYW1lIiwidmFyaWFibGVOYW1lIiwibmFtZSIsInZhcmlhYmxlIiwibWF0Y2hOYW1lIiwiaXNEZXJpdmVkIiwiZGVyaXZlZCIsImlzTGFiZWxQcmVzZW50IiwibGFiZWxzSW5jbHVkZXNMYWJlbCIsImxhYmVsUHJlc2VudCIsIm1hdGNoTWV0YUFzc2VydGlvbiIsIm1ldGFBc3NlcnRpb24iLCJtZXRhQXNzZXJ0aW9uTWF0Y2hlcyIsImlzVHlwZVByZXNlbnRCeVR5cGVOYW1lIiwidHlwZVByZXNlbnQiLCJpc1ZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVOYW1lIiwidmFyaWFibGVQcmVzZW50IiwiYWRkVHlwZSIsImFkZFJ1bGUiLCJhZGRBeGlvbSIsImFkZFZhcmlhYmxlIiwiYWRkQ29tYmluYXRvciIsImNvbWJpbmF0b3IiLCJhZGRDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yIiwidHJhY2UiLCJtZXNzYWdlIiwiZGVidWciLCJpbmZvIiwid2FybmluZyIsImVycm9yIiwiZmF0YWwiLCJmcm9tUmVsZWFzZUNvbnRleHRBbmRGaWxlUGF0aCIsImZpbGVQYXRoIiwiZmlsZUNvbnRlbnQiLCJnZXRGaWxlQ29udGVudCIsImNvbnRlbnQiLCJ0b2tlbmlzZSIsInBhcnNlIiwicmV3cml0ZU5vZGVzIiwiZmlsZUNvbnRleHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBTXFCQTs7O3FDQUpRO3FCQUVSOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFTixJQUFBLEFBQU1BLDRCQUFOO2FBQU1BLFlBQ1BDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxLQUFLLEVBQUVDLEtBQUssRUFBRUMsTUFBTSxFQUFFQyxTQUFTLEVBQUVDLFdBQVcsRUFBRUMsWUFBWSxFQUFFQyxjQUFjOzhCQURqRlQ7UUFFakIsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFDQyxLQUFLLEdBQUdBO1FBQ2IsSUFBSSxDQUFDQyxLQUFLLEdBQUdBO1FBQ2IsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxTQUFTLEdBQUdBO1FBQ2pCLElBQUksQ0FBQ0MsV0FBVyxHQUFHQTtRQUNuQixJQUFJLENBQUNDLFlBQVksR0FBR0E7UUFDcEIsSUFBSSxDQUFDQyxjQUFjLEdBQUdBOztpQkFWTFQ7O1lBYW5CVSxLQUFBQTttQkFBQUEsU0FBQUEsWUFBWTtnQkFDVixPQUFPLElBQUksQ0FBQ1QsTUFBTTtZQUNwQjs7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
@@ -0,0 +1,232 @@
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 MetaproofContext;
9
+ }
10
+ });
11
+ function _arrayLikeToArray(arr, len) {
12
+ if (len == null || len > arr.length) len = arr.length;
13
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
14
+ return arr2;
15
+ }
16
+ function _arrayWithoutHoles(arr) {
17
+ if (Array.isArray(arr)) return _arrayLikeToArray(arr);
18
+ }
19
+ function _classCallCheck(instance, Constructor) {
20
+ if (!(instance instanceof Constructor)) {
21
+ throw new TypeError("Cannot call a class as a function");
22
+ }
23
+ }
24
+ function _defineProperties(target, props) {
25
+ for(var i = 0; i < props.length; i++){
26
+ var descriptor = props[i];
27
+ descriptor.enumerable = descriptor.enumerable || false;
28
+ descriptor.configurable = true;
29
+ if ("value" in descriptor) descriptor.writable = true;
30
+ Object.defineProperty(target, descriptor.key, descriptor);
31
+ }
32
+ }
33
+ function _createClass(Constructor, protoProps, staticProps) {
34
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
35
+ if (staticProps) _defineProperties(Constructor, staticProps);
36
+ return Constructor;
37
+ }
38
+ function _iterableToArray(iter) {
39
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
40
+ }
41
+ function _nonIterableSpread() {
42
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
43
+ }
44
+ function _toConsumableArray(arr) {
45
+ return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
46
+ }
47
+ function _unsupportedIterableToArray(o, minLen) {
48
+ if (!o) return;
49
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
50
+ var n = Object.prototype.toString.call(o).slice(8, -1);
51
+ if (n === "Object" && o.constructor) n = o.constructor.name;
52
+ if (n === "Map" || n === "Set") return Array.from(n);
53
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
54
+ }
55
+ var MetaproofContext = /*#__PURE__*/ function() {
56
+ function MetaproofContext(context, derived, metaAssertions) {
57
+ _classCallCheck(this, MetaproofContext);
58
+ this.context = context;
59
+ this.derived = derived;
60
+ this.metaAssertions = metaAssertions;
61
+ }
62
+ _createClass(MetaproofContext, [
63
+ {
64
+ key: "getContext",
65
+ value: function getContext() {
66
+ return this.context;
67
+ }
68
+ },
69
+ {
70
+ key: "isDerived",
71
+ value: function isDerived() {
72
+ return this.derived;
73
+ }
74
+ },
75
+ {
76
+ key: "getMetaAssertions",
77
+ value: function getMetaAssertions() {
78
+ var metaAssertions = this.context.getMetaAssertions();
79
+ metaAssertions = _toConsumableArray(metaAssertions).concat(_toConsumableArray(this.metaAssertions));
80
+ return metaAssertions;
81
+ }
82
+ },
83
+ {
84
+ key: "getRules",
85
+ value: function getRules() {
86
+ return this.context.getRules();
87
+ }
88
+ },
89
+ {
90
+ key: "getTypes",
91
+ value: function getTypes() {
92
+ return this.context.getTypes();
93
+ }
94
+ },
95
+ {
96
+ key: "getAxioms",
97
+ value: function getAxioms() {
98
+ return this.context.getAxioms();
99
+ }
100
+ },
101
+ {
102
+ key: "getCombinators",
103
+ value: function getCombinators() {
104
+ return this.context.getCombinators();
105
+ }
106
+ },
107
+ {
108
+ key: "getConstructors",
109
+ value: function getConstructors() {
110
+ return this.context.getConstructors();
111
+ }
112
+ },
113
+ {
114
+ key: "findTypeByTypeName",
115
+ value: function findTypeByTypeName(typeName) {
116
+ return this.context.findTypeByTypeName(typeName);
117
+ }
118
+ },
119
+ {
120
+ key: "findRuleByReferenceName",
121
+ value: function findRuleByReferenceName(referenceName) {
122
+ return this.context.findRuleByReferenceName(referenceName);
123
+ }
124
+ },
125
+ {
126
+ key: "findVariableByVariableName",
127
+ value: function findVariableByVariableName(variableName) {
128
+ return this.context.findVariableByVariableName(variableName);
129
+ }
130
+ },
131
+ {
132
+ key: "isLabelPresent",
133
+ value: function isLabelPresent(label) {
134
+ return this.context.isLabelPresent(label);
135
+ }
136
+ },
137
+ {
138
+ key: "isTypePresentByTypeName",
139
+ value: function isTypePresentByTypeName(typeName) {
140
+ return this.context.isTypePresentByTypeName(typeName);
141
+ }
142
+ },
143
+ {
144
+ key: "matchMetaAssertion",
145
+ value: function matchMetaAssertion(metaAssertion) {
146
+ var metaAssertionMatches;
147
+ var metaAssertionB = metaAssertion; ///
148
+ metaAssertionMatches = this.metaAssertions.some(function(metaAssertion) {
149
+ var metaAssertionA = metaAssertion, matches = metaAssertionA.match(metaAssertionB);
150
+ if (matches) {
151
+ return true;
152
+ }
153
+ });
154
+ if (!metaAssertionMatches) {
155
+ metaAssertionMatches = this.context.matchMetaAssertion(metaAssertion);
156
+ }
157
+ return metaAssertionMatches;
158
+ }
159
+ },
160
+ {
161
+ key: "isVariablePresentByVariableName",
162
+ value: function isVariablePresentByVariableName(variableName) {
163
+ return this.context.isVariablePresentByVariableName(variableName);
164
+ }
165
+ },
166
+ {
167
+ key: "setDerived",
168
+ value: function setDerived(derived) {
169
+ this.derived = derived;
170
+ }
171
+ },
172
+ {
173
+ key: "addRule",
174
+ value: function addRule(rule) {
175
+ this.context.addRule(rule);
176
+ }
177
+ },
178
+ {
179
+ key: "addMetaAssertion",
180
+ value: function addMetaAssertion(metaAssertion) {
181
+ this.metaAssertions.push(metaAssertion);
182
+ }
183
+ },
184
+ {
185
+ key: "trace",
186
+ value: function trace(message) {
187
+ this.context.trace(message);
188
+ }
189
+ },
190
+ {
191
+ key: "debug",
192
+ value: function debug(message) {
193
+ this.context.debug(message);
194
+ }
195
+ },
196
+ {
197
+ key: "info",
198
+ value: function info(message) {
199
+ this.context.info(message);
200
+ }
201
+ },
202
+ {
203
+ key: "warning",
204
+ value: function warning(message) {
205
+ this.context.warning(message);
206
+ }
207
+ },
208
+ {
209
+ key: "error",
210
+ value: function error(message) {
211
+ this.context.error(message);
212
+ }
213
+ },
214
+ {
215
+ key: "fatal",
216
+ value: function fatal(message) {
217
+ this.context.fatal(message);
218
+ }
219
+ }
220
+ ], [
221
+ {
222
+ key: "fromContext",
223
+ value: function fromContext(context) {
224
+ var derived = false, metaAssertions = [], metaproofContext = new MetaproofContext(context, derived, metaAssertions);
225
+ return metaproofContext;
226
+ }
227
+ }
228
+ ]);
229
+ return MetaproofContext;
230
+ }();
231
+
232
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L21ldGFwcm9vZi5qcyIsIjw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0YXByb29mQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIGRlcml2ZWQsIG1ldGFBc3NlcnRpb25zKSB7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICB0aGlzLmRlcml2ZWQgPSBkZXJpdmVkO1xuICAgIHRoaXMubWV0YUFzc2VydGlvbnMgPSBtZXRhQXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldENvbnRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dDtcbiAgfVxuXG4gIGlzRGVyaXZlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5kZXJpdmVkO1xuICB9XG5cbiAgZ2V0TWV0YUFzc2VydGlvbnMoKSB7XG4gICAgbGV0IG1ldGFBc3NlcnRpb25zID0gdGhpcy5jb250ZXh0LmdldE1ldGFBc3NlcnRpb25zKCk7XG5cbiAgICBtZXRhQXNzZXJ0aW9ucyA9IFtcbiAgICAgIC4uLm1ldGFBc3NlcnRpb25zLFxuICAgICAgLi4udGhpcy5tZXRhQXNzZXJ0aW9uc1xuICAgIF07XG5cbiAgICByZXR1cm4gbWV0YUFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRSdWxlcygpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5nZXRSdWxlcygpOyB9XG5cbiAgZ2V0VHlwZXMoKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZ2V0VHlwZXMoKTsgfVxuXG4gIGdldEF4aW9tcygpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5nZXRBeGlvbXMoKTsgfVxuXG4gIGdldENvbWJpbmF0b3JzKCkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmdldENvbWJpbmF0b3JzKCk7IH1cblxuICBnZXRDb25zdHJ1Y3RvcnMoKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZ2V0Q29uc3RydWN0b3JzKCk7IH1cblxuICBmaW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5maW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUpOyB9XG5cbiAgZmluZFJ1bGVCeVJlZmVyZW5jZU5hbWUocmVmZXJlbmNlTmFtZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmZpbmRSdWxlQnlSZWZlcmVuY2VOYW1lKHJlZmVyZW5jZU5hbWUpOyB9XG5cbiAgZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5hbWUodmFyaWFibGVOYW1lKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5hbWUodmFyaWFibGVOYW1lKTsgfVxuXG4gIGlzTGFiZWxQcmVzZW50KGxhYmVsKSB7IHJldHVybiB0aGlzLmNvbnRleHQuaXNMYWJlbFByZXNlbnQobGFiZWwpOyB9XG5cbiAgaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUodHlwZU5hbWUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5pc1R5cGVQcmVzZW50QnlUeXBlTmFtZSh0eXBlTmFtZSk7IH1cblxuICBtYXRjaE1ldGFBc3NlcnRpb24obWV0YUFzc2VydGlvbikge1xuICAgIGxldCBtZXRhQXNzZXJ0aW9uTWF0Y2hlcztcblxuICAgIGNvbnN0IG1ldGFBc3NlcnRpb25CID0gbWV0YUFzc2VydGlvbjsgLy8vXG5cbiAgICBtZXRhQXNzZXJ0aW9uTWF0Y2hlcyA9IHRoaXMubWV0YUFzc2VydGlvbnMuc29tZSgobWV0YUFzc2VydGlvbikgPT4ge1xuICAgICAgY29uc3QgbWV0YUFzc2VydGlvbkEgPSBtZXRhQXNzZXJ0aW9uLCAvLy9cbiAgICAgICAgICAgIG1hdGNoZXMgPSBtZXRhQXNzZXJ0aW9uQS5tYXRjaChtZXRhQXNzZXJ0aW9uQik7XG5cbiAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFtZXRhQXNzZXJ0aW9uTWF0Y2hlcykge1xuICAgICAgbWV0YUFzc2VydGlvbk1hdGNoZXMgPSB0aGlzLmNvbnRleHQubWF0Y2hNZXRhQXNzZXJ0aW9uKG1ldGFBc3NlcnRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhQXNzZXJ0aW9uTWF0Y2hlcztcbiAgfVxuXG4gIGlzVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZU5hbWUodmFyaWFibGVOYW1lKSB7IHJldHVybiB0aGlzLmNvbnRleHQuaXNWYXJpYWJsZVByZXNlbnRCeVZhcmlhYmxlTmFtZSh2YXJpYWJsZU5hbWUpOyB9XG5cbiAgc2V0RGVyaXZlZChkZXJpdmVkKSB7XG4gICAgdGhpcy5kZXJpdmVkID0gZGVyaXZlZDtcbiAgfVxuXG4gIGFkZFJ1bGUocnVsZSkgeyB0aGlzLmNvbnRleHQuYWRkUnVsZShydWxlKTsgfVxuXG4gIGFkZE1ldGFBc3NlcnRpb24obWV0YUFzc2VydGlvbikge1xuICAgIHRoaXMubWV0YUFzc2VydGlvbnMucHVzaChtZXRhQXNzZXJ0aW9uKTtcbiAgfVxuXG4gIHRyYWNlKG1lc3NhZ2UpIHsgdGhpcy5jb250ZXh0LnRyYWNlKG1lc3NhZ2UpOyB9XG5cbiAgZGVidWcobWVzc2FnZSkgeyB0aGlzLmNvbnRleHQuZGVidWcobWVzc2FnZSk7IH1cblxuICBpbmZvKG1lc3NhZ2UpIHsgdGhpcy5jb250ZXh0LmluZm8obWVzc2FnZSk7IH1cblxuICB3YXJuaW5nKG1lc3NhZ2UpIHsgdGhpcy5jb250ZXh0Lndhcm5pbmcobWVzc2FnZSk7IH1cblxuICBlcnJvcihtZXNzYWdlKSB7IHRoaXMuY29udGV4dC5lcnJvcihtZXNzYWdlKTsgfVxuXG4gIGZhdGFsKG1lc3NhZ2UpIHsgdGhpcy5jb250ZXh0LmZhdGFsKG1lc3NhZ2UpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZXh0KGNvbnRleHQpIHtcbiAgICBjb25zdCBkZXJpdmVkID0gZmFsc2UsXG4gICAgICAgICAgbWV0YUFzc2VydGlvbnMgPSBbXSxcbiAgICAgICAgICBtZXRhcHJvb2ZDb250ZXh0ID0gbmV3IE1ldGFwcm9vZkNvbnRleHQoY29udGV4dCwgZGVyaXZlZCwgbWV0YUFzc2VydGlvbnMpO1xuXG4gICAgcmV0dXJuIG1ldGFwcm9vZkNvbnRleHQ7XG4gIH1cbn1cbiIsIlJlYWN0LmNyZWF0ZUVsZW1lbnQiXSwibmFtZXMiOlsiTWV0YXByb29mQ29udGV4dCIsImNvbnRleHQiLCJkZXJpdmVkIiwibWV0YUFzc2VydGlvbnMiLCJnZXRDb250ZXh0IiwiaXNEZXJpdmVkIiwiZ2V0TWV0YUFzc2VydGlvbnMiLCJnZXRSdWxlcyIsImdldFR5cGVzIiwiZ2V0QXhpb21zIiwiZ2V0Q29tYmluYXRvcnMiLCJnZXRDb25zdHJ1Y3RvcnMiLCJmaW5kVHlwZUJ5VHlwZU5hbWUiLCJ0eXBlTmFtZSIsImZpbmRSdWxlQnlSZWZlcmVuY2VOYW1lIiwicmVmZXJlbmNlTmFtZSIsImZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOYW1lIiwidmFyaWFibGVOYW1lIiwiaXNMYWJlbFByZXNlbnQiLCJsYWJlbCIsImlzVHlwZVByZXNlbnRCeVR5cGVOYW1lIiwibWF0Y2hNZXRhQXNzZXJ0aW9uIiwibWV0YUFzc2VydGlvbiIsIm1ldGFBc3NlcnRpb25NYXRjaGVzIiwibWV0YUFzc2VydGlvbkIiLCJzb21lIiwibWV0YUFzc2VydGlvbkEiLCJtYXRjaGVzIiwibWF0Y2giLCJpc1ZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVOYW1lIiwic2V0RGVyaXZlZCIsImFkZFJ1bGUiLCJydWxlIiwiYWRkTWV0YUFzc2VydGlvbiIsInB1c2giLCJ0cmFjZSIsIm1lc3NhZ2UiLCJkZWJ1ZyIsImluZm8iLCJ3YXJuaW5nIiwiZXJyb3IiLCJmYXRhbCIsImZyb21Db250ZXh0IiwibWV0YXByb29mQ29udGV4dCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUFFcUJBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLElBQUEsQUFBTUEsaUNBQU47YUFBTUEsaUJBQ1BDLE9BQU8sRUFBRUMsT0FB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