occam-verify-cli 0.0.316 → 0.0.318

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 (92) hide show
  1. package/bin/callbacks.js +27 -0
  2. package/bin/main.js +3 -5
  3. package/bin/messages.js +11 -0
  4. package/bin/utilities/logging.js +2 -10
  5. package/bin/utilities/release.js +68 -43
  6. package/lib/callbacks.js +68 -0
  7. package/lib/context/file.js +58 -81
  8. package/lib/context/metaproof.js +30 -118
  9. package/lib/context/proof.js +73 -137
  10. package/lib/context/release.js +81 -15
  11. package/lib/index.js +5 -1
  12. package/lib/mixins/callbacks.js +27 -0
  13. package/lib/mixins/file.js +23 -0
  14. package/lib/mixins/logging.js +39 -0
  15. package/lib/rule.js +3 -3
  16. package/lib/verify/IndicativeConditional.js +9 -5
  17. package/lib/verify/assertion/type.js +12 -10
  18. package/lib/verify/axiom.js +10 -14
  19. package/lib/verify/conclusion.js +5 -3
  20. package/lib/verify/conditinalInference.js +7 -5
  21. package/lib/verify/declaration/combinator.js +7 -3
  22. package/lib/verify/declaration/constructor.js +7 -3
  23. package/lib/verify/declaration/topLevel.js +11 -9
  24. package/lib/verify/declaration/type.js +8 -3
  25. package/lib/verify/declaration/variable.js +7 -3
  26. package/lib/verify/equality.js +8 -6
  27. package/lib/verify/file.js +7 -9
  28. package/lib/verify/label.js +6 -4
  29. package/lib/verify/labels.js +5 -4
  30. package/lib/verify/metaDerivation.js +21 -18
  31. package/lib/verify/metaproof.js +6 -4
  32. package/lib/verify/metastatement/qualified.js +7 -5
  33. package/lib/verify/metastatement/unqualified.js +7 -5
  34. package/lib/verify/premiseOrPremises.js +11 -12
  35. package/lib/verify/release.js +28 -18
  36. package/lib/verify/rule.js +11 -14
  37. package/lib/verify/statement/qualified.js +7 -3
  38. package/lib/verify/statement/unqualified.js +6 -4
  39. package/lib/verify/statement.js +8 -10
  40. package/lib/verify/statementAsCombinator.js +33 -36
  41. package/lib/verify/term.js +4 -2
  42. package/lib/verify/termAsConstructor.js +38 -39
  43. package/lib/verify/termAsVariable.js +4 -2
  44. package/lib/verify/type.js +18 -14
  45. package/lib/verify/unconditionalInference.js +5 -3
  46. package/lib/verify/variable.js +13 -10
  47. package/package.json +2 -2
  48. package/src/callbacks.js +27 -0
  49. package/src/context/file.js +62 -61
  50. package/src/context/metaproof.js +29 -44
  51. package/src/context/proof.js +51 -64
  52. package/src/context/release.js +33 -11
  53. package/src/index.js +1 -0
  54. package/src/mixins/callbacks.js +15 -0
  55. package/src/mixins/file.js +12 -0
  56. package/src/mixins/logging.js +24 -0
  57. package/src/rule.js +2 -2
  58. package/src/verify/IndicativeConditional.js +18 -9
  59. package/src/verify/assertion/type.js +15 -8
  60. package/src/verify/axiom.js +15 -17
  61. package/src/verify/conclusion.js +8 -2
  62. package/src/verify/conditinalInference.js +10 -4
  63. package/src/verify/declaration/combinator.js +12 -3
  64. package/src/verify/declaration/constructor.js +12 -3
  65. package/src/verify/declaration/topLevel.js +15 -9
  66. package/src/verify/declaration/type.js +14 -4
  67. package/src/verify/declaration/variable.js +12 -3
  68. package/src/verify/equality.js +11 -4
  69. package/src/verify/file.js +6 -8
  70. package/src/verify/label.js +9 -3
  71. package/src/verify/labels.js +5 -3
  72. package/src/verify/metaDerivation.js +26 -19
  73. package/src/verify/metaproof.js +9 -3
  74. package/src/verify/metastatement/qualified.js +10 -4
  75. package/src/verify/metastatement/unqualified.js +10 -4
  76. package/src/verify/premiseOrPremises.js +18 -14
  77. package/src/verify/release.js +45 -27
  78. package/src/verify/rule.js +15 -16
  79. package/src/verify/statement/qualified.js +12 -3
  80. package/src/verify/statement/unqualified.js +9 -3
  81. package/src/verify/statement.js +10 -9
  82. package/src/verify/statementAsCombinator.js +45 -46
  83. package/src/verify/term.js +7 -1
  84. package/src/verify/termAsConstructor.js +48 -45
  85. package/src/verify/termAsVariable.js +7 -1
  86. package/src/verify/type.js +25 -21
  87. package/src/verify/unconditionalInference.js +8 -2
  88. package/src/verify/variable.js +18 -11
  89. package/lib/mixins/log.js +0 -41
  90. package/lib/verify/supposition.js +0 -29
  91. package/src/mixins/log.js +0 -28
  92. package/src/verify/supposition.js +0 -22
@@ -5,11 +5,11 @@ Object.defineProperty(exports, "__esModule", {
5
5
  Object.defineProperty(exports, "default", {
6
6
  enumerable: true,
7
7
  get: function() {
8
- return FileContext;
8
+ return _default;
9
9
  }
10
10
  });
11
- var _necessary = require("necessary");
12
11
  var _occamGrammarUtilities = require("occam-grammar-utilities");
12
+ var _logging = /*#__PURE__*/ _interopRequireDefault(require("../mixins/logging"));
13
13
  var _array = require("../utilities/array");
14
14
  var _tokens = require("../utilities/tokens");
15
15
  function _arrayLikeToArray(arr, len) {
@@ -39,6 +39,11 @@ function _createClass(Constructor, protoProps, staticProps) {
39
39
  if (staticProps) _defineProperties(Constructor, staticProps);
40
40
  return Constructor;
41
41
  }
42
+ function _interopRequireDefault(obj) {
43
+ return obj && obj.__esModule ? obj : {
44
+ default: obj
45
+ };
46
+ }
42
47
  function _iterableToArray(iter) {
43
48
  if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
44
49
  }
@@ -56,11 +61,11 @@ function _unsupportedIterableToArray(o, minLen) {
56
61
  if (n === "Map" || n === "Set") return Array.from(n);
57
62
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
58
63
  }
59
- var TRACE_LEVEL = _necessary.levels.TRACE_LEVEL, DEBUG_LEVEL = _necessary.levels.DEBUG_LEVEL, INFO_LEVEL = _necessary.levels.INFO_LEVEL, WARNING_LEVEL = _necessary.levels.WARNING_LEVEL, ERROR_LEVEL = _necessary.levels.ERROR_LEVEL, FATAL_LEVEL = _necessary.levels.FATAL_LEVEL;
60
64
  var FileContext = /*#__PURE__*/ function() {
61
- function FileContext(filePath, tokens, node, rules, types, axioms, variables, combinators, constructors, releaseContext) {
65
+ function FileContext(filePath, context, tokens, node, rules, types, axioms, variables, combinators, constructors) {
62
66
  _classCallCheck(this, FileContext);
63
67
  this.filePath = filePath;
68
+ this.context = context;
64
69
  this.tokens = tokens;
65
70
  this.node = node;
66
71
  this.rules = rules;
@@ -69,7 +74,6 @@ var FileContext = /*#__PURE__*/ function() {
69
74
  this.variables = variables;
70
75
  this.combinators = combinators;
71
76
  this.constructors = constructors;
72
- this.releaseContext = releaseContext;
73
77
  }
74
78
  _createClass(FileContext, [
75
79
  {
@@ -78,6 +82,12 @@ var FileContext = /*#__PURE__*/ function() {
78
82
  return this.filePath;
79
83
  }
80
84
  },
85
+ {
86
+ key: "getContext",
87
+ value: function getContext() {
88
+ return this.context;
89
+ }
90
+ },
81
91
  {
82
92
  key: "getTokens",
83
93
  value: function getTokens() {
@@ -90,13 +100,19 @@ var FileContext = /*#__PURE__*/ function() {
90
100
  return this.node;
91
101
  }
92
102
  },
103
+ {
104
+ key: "getVariables",
105
+ value: function getVariables() {
106
+ return this.variables;
107
+ }
108
+ },
93
109
  {
94
110
  key: "getRules",
95
111
  value: function getRules() {
96
112
  var bubble = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
97
113
  var rules = _toConsumableArray(this.rules);
98
114
  if (bubble) {
99
- var releaseContextRules = this.releaseContext.getRules();
115
+ var releaseContextRules = this.context.getRules();
100
116
  (0, _array.push)(rules, releaseContextRules);
101
117
  }
102
118
  return rules;
@@ -108,7 +124,7 @@ var FileContext = /*#__PURE__*/ function() {
108
124
  var bubble = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
109
125
  var types = _toConsumableArray(this.types);
110
126
  if (bubble) {
111
- var releaseContextTypes = this.releaseContext.getTypes();
127
+ var releaseContextTypes = this.context.getTypes();
112
128
  (0, _array.push)(types, releaseContextTypes);
113
129
  }
114
130
  return types;
@@ -120,36 +136,19 @@ var FileContext = /*#__PURE__*/ function() {
120
136
  var bubble = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
121
137
  var axioms = _toConsumableArray(this.axioms);
122
138
  if (bubble) {
123
- var releaseContextAxioms = this.releaseContext.getAxioms();
139
+ var releaseContextAxioms = this.context.getAxioms();
124
140
  (0, _array.push)(axioms, releaseContextAxioms);
125
141
  }
126
142
  return axioms;
127
143
  }
128
144
  },
129
- {
130
- key: "getLabels",
131
- value: function getLabels() {
132
- var axioms = this.getAxioms(), labels = axioms.reduce(function(labels, axiom) {
133
- var axiomLabels = axiom.getLabels();
134
- (0, _array.push)(labels, axiomLabels);
135
- return labels;
136
- }, []);
137
- return labels;
138
- }
139
- },
140
- {
141
- key: "getVariables",
142
- value: function getVariables() {
143
- return this.variables;
144
- }
145
- },
146
145
  {
147
146
  key: "getCombinators",
148
147
  value: function getCombinators() {
149
148
  var bubble = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
150
149
  var combinators = _toConsumableArray(this.combinators);
151
150
  if (bubble) {
152
- var releaseContextCombinators = this.releaseContext.getCombinators();
151
+ var releaseContextCombinators = this.context.getCombinators();
153
152
  (0, _array.push)(combinators, releaseContextCombinators);
154
153
  }
155
154
  return combinators;
@@ -161,22 +160,23 @@ var FileContext = /*#__PURE__*/ function() {
161
160
  var bubble = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
162
161
  var constructors = _toConsumableArray(this.constructors);
163
162
  if (bubble) {
164
- var releaseContextConstructors = this.releaseContext.getConstructors();
163
+ var releaseContextConstructors = this.context.getConstructors();
165
164
  (0, _array.push)(constructors, releaseContextConstructors);
166
165
  }
167
166
  return constructors;
168
167
  }
169
168
  },
170
169
  {
171
- key: "getReleaseContext",
172
- value: function getReleaseContext() {
173
- return this.releaseContext;
170
+ key: "getAssertions",
171
+ value: function getAssertions() {
172
+ var assertions = []; ///
173
+ return assertions;
174
174
  }
175
175
  },
176
176
  {
177
177
  key: "getMetaAssertions",
178
178
  value: function getMetaAssertions() {
179
- var metaAssertions = [];
179
+ var metaAssertions = []; ///
180
180
  return metaAssertions;
181
181
  }
182
182
  },
@@ -219,7 +219,7 @@ var FileContext = /*#__PURE__*/ function() {
219
219
  {
220
220
  key: "findVariableByVariableName",
221
221
  value: function findVariableByVariableName(variableName) {
222
- var name = variableName, variable = this.variables.find(function(variable) {
222
+ var name = variableName, variables = this.getVariables(), variable = variables.find(function(variable) {
223
223
  var matches = variable.matchName(name);
224
224
  if (matches) {
225
225
  return true;
@@ -228,13 +228,6 @@ var FileContext = /*#__PURE__*/ function() {
228
228
  return variable;
229
229
  }
230
230
  },
231
- {
232
- key: "isDerived",
233
- value: function isDerived() {
234
- var derived = false;
235
- return derived;
236
- }
237
- },
238
231
  {
239
232
  key: "isLabelPresent",
240
233
  value: function isLabelPresent(label) {
@@ -242,13 +235,6 @@ var FileContext = /*#__PURE__*/ function() {
242
235
  return labelPresent;
243
236
  }
244
237
  },
245
- {
246
- key: "matchMetaAssertion",
247
- value: function matchMetaAssertion(metaAssertion) {
248
- var metaAssertionMatches = false;
249
- return metaAssertionMatches;
250
- }
251
- },
252
238
  {
253
239
  key: "isTypePresentByTypeName",
254
240
  value: function isTypePresentByTypeName(typeName) {
@@ -263,6 +249,17 @@ var FileContext = /*#__PURE__*/ function() {
263
249
  return variablePresent;
264
250
  }
265
251
  },
252
+ {
253
+ key: "getLabels",
254
+ value: function getLabels() {
255
+ var axioms = this.getAxioms(), labels = axioms.reduce(function(labels, axiom) {
256
+ var axiomLabels = axiom.getLabels();
257
+ (0, _array.push)(labels, axiomLabels);
258
+ return labels;
259
+ }, []);
260
+ return labels;
261
+ }
262
+ },
266
263
  {
267
264
  key: "addType",
268
265
  value: function addType(type) {
@@ -300,46 +297,24 @@ var FileContext = /*#__PURE__*/ function() {
300
297
  }
301
298
  },
302
299
  {
303
- key: "trace",
304
- value: function trace(message, node) {
305
- this.log(node, TRACE_LEVEL, message);
306
- }
307
- },
308
- {
309
- key: "debug",
310
- value: function debug(message, node) {
311
- this.log(node, DEBUG_LEVEL, message);
312
- }
313
- },
314
- {
315
- key: "info",
316
- value: function info(message, node) {
317
- this.log(node, INFO_LEVEL, message);
318
- }
319
- },
320
- {
321
- key: "warning",
322
- value: function warning(message, node) {
323
- this.log(node, WARNING_LEVEL, message);
324
- }
325
- },
326
- {
327
- key: "error",
328
- value: function error(message, node) {
329
- this.log(node, ERROR_LEVEL, message);
300
+ key: "halt",
301
+ value: function halt(node) {
302
+ var leastLineIndex = (0, _tokens.leastLineIndexFromNodeAndTokens)(node, this.tokens), greatestLineIndex = (0, _tokens.greatestLineIndexFromNodeAndTokens)(node, this.tokens);
303
+ this.context.halt(this.filePath, leastLineIndex, greatestLineIndex);
330
304
  }
331
305
  },
332
306
  {
333
- key: "fatal",
334
- value: function fatal(message, node) {
335
- this.log(node, FATAL_LEVEL, message);
307
+ key: "begin",
308
+ value: function begin(node) {
309
+ var leastLineIndex = (0, _tokens.leastLineIndexFromNodeAndTokens)(node, this.tokens), greatestLineIndex = (0, _tokens.greatestLineIndexFromNodeAndTokens)(node, this.tokens);
310
+ this.context.begin(this.filePath, leastLineIndex, greatestLineIndex);
336
311
  }
337
312
  },
338
313
  {
339
- key: "log",
340
- value: function log(node, level, message) {
314
+ key: "complete",
315
+ value: function complete(node) {
341
316
  var leastLineIndex = (0, _tokens.leastLineIndexFromNodeAndTokens)(node, this.tokens), greatestLineIndex = (0, _tokens.greatestLineIndexFromNodeAndTokens)(node, this.tokens);
342
- this.releaseContext.log(level, message, this.filePath, leastLineIndex, greatestLineIndex);
317
+ this.context.complete(this.filePath, leastLineIndex, greatestLineIndex);
343
318
  }
344
319
  }
345
320
  ], [
@@ -348,12 +323,14 @@ var FileContext = /*#__PURE__*/ function() {
348
323
  value: function fromReleaseContextAndFilePath(releaseContext, filePath) {
349
324
  var file = releaseContext.getFile(filePath), content = file.getContent(), tokens = releaseContext.tokenise(content), node = releaseContext.parse(tokens);
350
325
  (0, _occamGrammarUtilities.rewriteNodes)(node);
351
- var rules = [], types = [], axioms = [], variables = [], combinators = [], constructors = [], fileContext = new FileContext(filePath, tokens, node, rules, types, axioms, variables, combinators, constructors, releaseContext);
326
+ var context = releaseContext, rules = [], types = [], axioms = [], variables = [], combinators = [], constructors = [], fileContext = new FileContext(filePath, context, tokens, node, rules, types, axioms, variables, combinators, constructors);
352
327
  return fileContext;
353
328
  }
354
329
  }
355
330
  ]);
356
331
  return FileContext;
357
332
  }();
333
+ Object.assign(FileContext.prototype, _logging.default);
334
+ var _default = FileContext;
358
335
 
359
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2ZpbGUuanMiLCI8PGpzeC1jb25maWctcHJhZ21hLmpzPj4iXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGxldmVscyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcbmltcG9ydCB7IHJld3JpdGVOb2RlcyB9IGZyb20gXCJvY2NhbS1ncmFtbWFyLXV0aWxpdGllc1wiO1xuXG5pbXBvcnQgeyBwdXNoIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgbGVhc3RMaW5lSW5kZXhGcm9tTm9kZUFuZFRva2VucywgZ3JlYXRlc3RMaW5lSW5kZXhGcm9tTm9kZUFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvdG9rZW5zXCI7XG5cbmNvbnN0IHsgVFJBQ0VfTEVWRUwsIERFQlVHX0xFVkVMLCBJTkZPX0xFVkVMLCBXQVJOSU5HX0xFVkVMLCBFUlJPUl9MRVZFTCwgRkFUQUxfTEVWRUwgfSA9IGxldmVscztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmlsZUNvbnRleHQge1xuICBjb25zdHJ1Y3RvcihmaWxlUGF0aCwgdG9rZW5zLCBub2RlLCBydWxlcywgdHlwZXMsIGF4aW9tcywgdmFyaWFibGVzLCBjb21iaW5hdG9ycywgY29uc3RydWN0b3JzLCByZWxlYXNlQ29udGV4dCkge1xuICAgIHRoaXMuZmlsZVBhdGggPSBmaWxlUGF0aDtcbiAgICB0aGlzLnRva2VucyA9IHRva2VucztcbiAgICB0aGlzLm5vZGUgPSBub2RlO1xuICAgIHRoaXMucnVsZXMgPSBydWxlcztcbiAgICB0aGlzLnR5cGVzID0gdHlwZXM7XG4gICAgdGhpcy5heGlvbXMgPSBheGlvbXM7XG4gICAgdGhpcy52YXJpYWJsZXMgPSB2YXJpYWJsZXM7XG4gICAgdGhpcy5jb21iaW5hdG9ycyA9IGNvbWJpbmF0b3JzO1xuICAgIHRoaXMuY29uc3RydWN0b3JzID0gY29uc3RydWN0b3JzO1xuICAgIHRoaXMucmVsZWFzZUNvbnRleHQgPSByZWxlYXNlQ29udGV4dDtcbiAgfVxuXG4gIGdldEZpbGVQYXRoKCkge1xuICAgIHJldHVybiB0aGlzLmZpbGVQYXRoO1xuICB9XG5cbiAgZ2V0VG9rZW5zKCkge1xuICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgfVxuXG4gIGdldE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgfVxuXG4gIGdldFJ1bGVzKGJ1YmJsZSA9IHRydWUpIHtcbiAgICBjb25zdCBydWxlcyA9IFtcbiAgICAgIC4uLnRoaXMucnVsZXNcbiAgICBdO1xuXG4gICAgaWYgKGJ1YmJsZSkge1xuICAgICAgY29uc3QgcmVsZWFzZUNvbnRleHRSdWxlcyA9IHRoaXMucmVsZWFzZUNvbnRleHQuZ2V0UnVsZXMoKTtcblxuICAgICAgcHVzaChydWxlcywgcmVsZWFzZUNvbnRleHRSdWxlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ1bGVzO1xuICB9XG5cbiAgZ2V0VHlwZXMoYnViYmxlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHR5cGVzID0gW1xuICAgICAgLi4udGhpcy50eXBlc1xuICAgIF07XG5cbiAgICBpZiAoYnViYmxlKSB7XG4gICAgICBjb25zdCByZWxlYXNlQ29udGV4dFR5cGVzID0gdGhpcy5yZWxlYXNlQ29udGV4dC5nZXRUeXBlcygpO1xuXG4gICAgICBwdXNoKHR5cGVzLCByZWxlYXNlQ29udGV4dFR5cGVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZXM7XG4gIH1cblxuICBnZXRBeGlvbXMoYnViYmxlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGF4aW9tcyA9IFtcbiAgICAgIC4uLnRoaXMuYXhpb21zXG4gICAgXTtcblxuICAgIGlmIChidWJibGUpIHtcbiAgICAgIGNvbnN0IHJlbGVhc2VDb250ZXh0QXhpb21zID0gdGhpcy5yZWxlYXNlQ29udGV4dC5nZXRBeGlvbXMoKTtcblxuICAgICAgcHVzaChheGlvbXMsIHJlbGVhc2VDb250ZXh0QXhpb21zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXhpb21zO1xuICB9XG5cbiAgZ2V0TGFiZWxzKCkge1xuICAgIGNvbnN0IGF4aW9tcyA9IHRoaXMuZ2V0QXhpb21zKCksXG4gICAgICAgICAgbGFiZWxzID0gYXhpb21zLnJlZHVjZSgobGFiZWxzLCBheGlvbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXhpb21MYWJlbHMgPSBheGlvbS5nZXRMYWJlbHMoKTtcblxuICAgICAgICAgICAgcHVzaChsYWJlbHMsIGF4aW9tTGFiZWxzKTtcblxuICAgICAgICAgICAgcmV0dXJuIGxhYmVscztcbiAgICAgICAgICB9LCBbXSk7XG5cbiAgICByZXR1cm4gbGFiZWxzO1xuICB9XG5cbiAgZ2V0VmFyaWFibGVzKCkge1xuICAgIHJldHVybiB0aGlzLnZhcmlhYmxlcztcbiAgfVxuXG4gIGdldENvbWJpbmF0b3JzKGJ1YmJsZSA9IHRydWUpIHtcbiAgICBjb25zdCBjb21iaW5hdG9ycyA9IFtcbiAgICAgIC4uLnRoaXMuY29tYmluYXRvcnNcbiAgICBdO1xuXG4gICAgaWYgKGJ1YmJsZSkge1xuICAgICAgY29uc3QgcmVsZWFzZUNvbnRleHRDb21iaW5hdG9ycyA9IHRoaXMucmVsZWFzZUNvbnRleHQuZ2V0Q29tYmluYXRvcnMoKTtcblxuICAgICAgcHVzaChjb21iaW5hdG9ycywgcmVsZWFzZUNvbnRleHRDb21iaW5hdG9ycyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbWJpbmF0b3JzO1xuICB9XG5cbiAgZ2V0Q29uc3RydWN0b3JzKGJ1YmJsZSA9IHRydWUpIHtcbiAgICBjb25zdCBjb25zdHJ1Y3RvcnMgPSBbXG4gICAgICAuLi50aGlzLmNvbnN0cnVjdG9yc1xuICAgIF07XG5cbiAgICBpZiAoYnViYmxlKSB7XG4gICAgICBjb25zdCByZWxlYXNlQ29udGV4dENvbnN0cnVjdG9ycyA9IHRoaXMucmVsZWFzZUNvbnRleHQuZ2V0Q29uc3RydWN0b3JzKCk7XG5cbiAgICAgIHB1c2goY29uc3RydWN0b3JzLCByZWxlYXNlQ29udGV4dENvbnN0cnVjdG9ycyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnN0cnVjdG9ycztcbiAgfVxuXG4gIGdldFJlbGVhc2VDb250ZXh0KCkge1xuICAgIHJldHVybiB0aGlzLnJlbGVhc2VDb250ZXh0O1xuICB9XG5cbiAgZ2V0TWV0YUFzc2VydGlvbnMoKSB7XG4gICAgY29uc3QgbWV0YUFzc2VydGlvbnMgPSBbXTtcblxuICAgIHJldHVybiBtZXRhQXNzZXJ0aW9ucztcbiAgfVxuXG4gIGZpbmRUeXBlQnlUeXBlTmFtZSh0eXBlTmFtZSkge1xuICAgIGNvbnN0IHR5cGVzID0gdGhpcy5nZXRUeXBlcygpLFxuICAgICAgICAgIHR5cGUgPSB0eXBlcy5maW5kKCh0eXBlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGVzID0gdHlwZS5tYXRjaFR5cGVOYW1lKHR5cGVOYW1lKTtcblxuICAgICAgICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgZmluZFJ1bGVCeVJlZmVyZW5jZU5hbWUocmVmZXJlbmNlTmFtZSkge1xuICAgIGNvbnN0IGxhYmVsID0gcmVmZXJlbmNlTmFtZSwgIC8vL1xuICAgICAgICAgIHJ1bGVzID0gdGhpcy5nZXRSdWxlcygpLFxuICAgICAgICAgIHJ1bGUgPSBydWxlcy5maW5kKChydWxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBydWxlTGFiZWxzID0gcnVsZS5nZXRMYWJlbHMoKSxcbiAgICAgICAgICAgICAgICAgIHJ1bGVMYWJlbHNJbmNsdWRlc0xhYmVsID0gcnVsZUxhYmVscy5pbmNsdWRlcyhsYWJlbCk7XG5cbiAgICAgICAgICAgIGlmIChydWxlTGFiZWxzSW5jbHVkZXNMYWJlbCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBmaW5kQXhpb21CeVJlZmVyZW5jZU5hbWUocmVmZXJlbmNlTmFtZSkge1xuICAgIGNvbnN0IGxhYmVsID0gcmVmZXJlbmNlTmFtZSwgIC8vL1xuICAgICAgICAgIGF4aW9tcyA9IHRoaXMuZ2V0QXhpb21zKCksXG4gICAgICAgICAgYXhpb20gPSBheGlvbXMuZmluZCgoYXhpb20pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGF4aW9tTGFiZWxzID0gYXhpb20uZ2V0TGFiZWxzKCksXG4gICAgICAgICAgICAgICAgICBheGlvbUxhYmVsc0luY2x1ZGVzTGFiZWwgPSBheGlvbUxhYmVscy5pbmNsdWRlcyhsYWJlbCk7XG5cbiAgICAgICAgICAgIGlmIChheGlvbUxhYmVsc0luY2x1ZGVzTGFiZWwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBheGlvbTtcbiAgfVxuXG4gIGZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOYW1lKHZhcmlhYmxlTmFtZSkge1xuICAgIGNvbnN0IG5hbWUgPSB2YXJpYWJsZU5hbWUsICAvLy9cbiAgICAgICAgICB2YXJpYWJsZSA9IHRoaXMudmFyaWFibGVzLmZpbmQoKHZhcmlhYmxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGVzID0gdmFyaWFibGUubWF0Y2hOYW1lKG5hbWUpO1xuXG4gICAgICAgICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlO1xuICB9XG5cbiAgaXNEZXJpdmVkKCkge1xuICAgIGNvbnN0IGRlcml2ZWQgPSBmYWxzZTtcblxuICAgIHJldHVybiBkZXJpdmVkO1xuICB9XG5cbiAgaXNMYWJlbFByZXNlbnQobGFiZWwpIHtcbiAgICBjb25zdCBsYWJlbHMgPSB0aGlzLmdldExhYmVscygpLFxuICAgICAgICAgIGxhYmVsc0luY2x1ZGVzTGFiZWwgPSBsYWJlbHMuaW5jbHVkZXMobGFiZWwpLFxuICAgICAgICAgIGxhYmVsUHJlc2VudCA9IGxhYmVsc0luY2x1ZGVzTGFiZWw7IC8vL1xuXG4gICAgcmV0dXJuIGxhYmVsUHJlc2VudDtcbiAgfVxuXG4gIG1hdGNoTWV0YUFzc2VydGlvbihtZXRhQXNzZXJ0aW9uKSB7XG4gICAgY29uc3QgbWV0YUFzc2VydGlvbk1hdGNoZXMgPSBmYWxzZTtcblxuICAgIHJldHVybiBtZXRhQXNzZXJ0aW9uTWF0Y2hlcztcbiAgfVxuXG4gIGlzVHlwZVByZXNlbnRCeVR5cGVOYW1lKHR5cGVOYW1lKSB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZmluZFR5cGVCeVR5cGVOYW1lKHR5cGVOYW1lKSxcbiAgICAgICAgICB0eXBlUHJlc2VudCA9ICh0eXBlICE9PSBudWxsKTtcblxuICAgIHJldHVybiB0eXBlUHJlc2VudDtcbiAgfVxuXG4gIGlzVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZU5hbWUodmFyaWFibGVOYW1lKSB7XG4gICAgY29uc3QgdmFyaWFibGUgPSB0aGlzLmZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOYW1lKHZhcmlhYmxlTmFtZSksXG4gICAgICAgICAgdmFyaWFibGVQcmVzZW50ID0gKHZhcmlhYmxlICE9PSBudWxsKTtcblxuICAgIHJldHVybiB2YXJpYWJsZVByZXNlbnQ7XG4gIH1cblxuICBhZGRUeXBlKHR5cGUpIHtcbiAgICB0aGlzLnR5cGVzLnB1c2godHlwZSk7XG4gIH1cblxuICBhZGRSdWxlKHJ1bGUpIHtcbiAgICB0aGlzLnJ1bGVzLnB1c2gocnVsZSk7XG4gIH1cblxuICBhZGRBeGlvbShheGlvbSkge1xuICAgIHRoaXMuYXhpb21zLnB1c2goYXhpb20pO1xuICB9XG5cbiAgYWRkVmFyaWFibGUodmFyaWFibGUpIHtcbiAgICB0aGlzLnZhcmlhYmxlcy5wdXNoKHZhcmlhYmxlKTtcbiAgfVxuXG4gIGFkZENvbWJpbmF0b3IoY29tYmluYXRvcikge1xuICAgIHRoaXMuY29tYmluYXRvcnMucHVzaChjb21iaW5hdG9yKTtcbiAgfVxuXG4gIGFkZENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKSB7XG4gICAgdGhpcy5jb25zdHJ1Y3RvcnMucHVzaChjb25zdHJ1Y3Rvcik7XG4gIH1cblxuICB0cmFjZShtZXNzYWdlLCBub2RlKSB7IHRoaXMubG9nKG5vZGUsIFRSQUNFX0xFVkVMLCBtZXNzYWdlKTsgfVxuXG4gIGRlYnVnKG1lc3NhZ2UsIG5vZGUpIHsgdGhpcy5sb2cobm9kZSwgREVCVUdfTEVWRUwsIG1lc3NhZ2UpOyB9XG5cbiAgaW5mbyhtZXNzYWdlLCBub2RlKSB7IHRoaXMubG9nKG5vZGUsIElORk9fTEVWRUwsIG1lc3NhZ2UpOyB9XG5cbiAgd2FybmluZyhtZXNzYWdlLCBub2RlKSB7IHRoaXMubG9nKG5vZGUsIFdBUk5JTkdfTEVWRUwsIG1lc3NhZ2UpOyB9XG5cbiAgZXJyb3IobWVzc2FnZSwgbm9kZSkgeyB0aGlzLmxvZyhub2RlLCBFUlJPUl9MRVZFTCwgbWVzc2FnZSk7IH1cblxuICBmYXRhbChtZXNzYWdlLCBub2RlKSB7IHRoaXMubG9nKG5vZGUsIEZBVEFMX0xFVkVMLCBtZXNzYWdlKTsgfVxuXG4gIGxvZyhub2RlLCBsZXZlbCwgbWVzc2FnZSkge1xuICAgIGNvbnN0IGxlYXN0TGluZUluZGV4ID0gbGVhc3RMaW5lSW5kZXhGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0aGlzLnRva2VucyksXG4gICAgICAgICAgZ3JlYXRlc3RMaW5lSW5kZXggPSBncmVhdGVzdExpbmVJbmRleEZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRoaXMudG9rZW5zKTtcblxuICAgIHRoaXMucmVsZWFzZUNvbnRleHQubG9nKGxldmVsLCBtZXNzYWdlLCB0aGlzLmZpbGVQYXRoLCBsZWFzdExpbmVJbmRleCwgZ3JlYXRlc3RMaW5lSW5kZXgpO1xuICB9XG5cbiAgc3RhdGljIGZyb21SZWxlYXNlQ29udGV4dEFuZEZpbGVQYXRoKHJlbGVhc2VDb250ZXh0LCBmaWxlUGF0aCkge1xuICAgIGNvbnN0IGZpbGUgPSByZWxlYXNlQ29udGV4dC5nZXRGaWxlKGZpbGVQYXRoKSxcbiAgICAgICAgICBjb250ZW50ID0gZmlsZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgdG9rZW5zID0gcmVsZWFzZUNvbnRleHQudG9rZW5pc2UoY29udGVudCksXG4gICAgICAgICAgbm9kZSA9IHJlbGVhc2VDb250ZXh0LnBhcnNlKHRva2Vucyk7XG5cbiAgICByZXdyaXRlTm9kZXMobm9kZSk7XG5cbiAgICBjb25zdCBydWxlcyA9IFtdLFxuICAgICAgICAgIHR5cGVzID0gW10sXG4gICAgICAgICAgYXhpb21zID0gW10sXG4gICAgICAgICAgdmFyaWFibGVzID0gW10sXG4gICAgICAgICAgY29tYmluYXRvcnMgPSBbXSxcbiAgICAgICAgICBjb25zdHJ1Y3RvcnMgPSBbXSxcbiAgICAgICAgICBmaWxlQ29udGV4dCA9IG5ldyBGaWxlQ29udGV4dChmaWxlUGF0aCwgdG9rZW5zLCBub2RlLCBydWxlcywgdHlwZXMsIGF4aW9tcywgdmFyaWFibGVzLCBjb21iaW5hdG9ycywgY29uc3RydWN0b3JzLCByZWxlYXNlQ29udGV4dCk7XG5cbiAgICByZXR1cm4gZmlsZUNvbnRleHQ7XG4gIH1cbn1cbiIsIlJlYWN0LmNyZWF0ZUVsZW1lbnQiXSwibmFtZXMiOlsiRmlsZUNvbnRleHQiLCJUUkFDRV9MRVZFTCIsImxldmVscyIsIkRFQlVHX0xFVkVMIiwiSU5GT19MRVZFTCIsIldBUk5JTkdfTEVWRUwiLCJFUlJPUl9MRVZFTCIsIkZBVEFMX0xFVkVMIiwiZmlsZVBhdGgiLCJ0b2tlbnMiLCJub2RlIiwicnVsZXMiLCJ0eXBlcyIsImF4aW9tcyIsInZhcmlhYmxlcyIsImNvbWJpbmF0b3JzIiwiY29uc3RydWN0b3JzIiwicmVsZWFzZUNvbnRleHQiLCJnZXRGaWxlUGF0aCIsImdldFRva2VucyIsImdldE5vZGUiLCJnZXRSdWxlcyIsImJ1YmJsZSIsInJlbGVhc2VDb250ZXh0UnVsZXMiLCJwdXNoIiwiZ2V0VHlwZXMiLCJyZWxlYXNlQ29udGV4dFR5cGVzIiwiZ2V0QXhpb21zIiwicmVsZWFzZUNvbnRleHRBeGlvbXMiLCJnZXRMYWJlbHMiLCJsYWJlbHMiLCJyZWR1Y2UiLCJheGlvbSIsImF4aW9tTGFiZWxzIiwiZ2V0VmFyaWFibGVzIiwiZ2V0Q29tYmluYXRvcnMiLCJyZWxlYXNlQ29udGV4dENvbWJpbmF0b3JzIiwiZ2V0Q29uc3RydWN0b3JzIiwicmVsZWFzZUNvbnRleHRDb25zdHJ1Y3RvcnMiLCJnZXRSZWxlYXNlQ29udGV4dCIsImdldE1ldGFBc3NlcnRpb25zIiwibWV0YUFzc2VydGlvbnMiLCJmaW5kVHlwZUJ5VHlwZU5hbWUiLCJ0eXBlTmFtZSIsInR5cGUiLCJmaW5kIiwibWF0Y2hlcyIsIm1hdGNoVHlwZU5hbWUiLCJmaW5kUnVsZUJ5UmVmZXJlbmNlTmFtZSIsInJlZmVyZW5jZU5hbWUiLCJsYWJlbCIsInJ1bGUiLCJydWxlTGFiZWxzIiwicnVsZUxhYmVsc0luY2x1ZGVzTGFiZWwiLCJpbmNsdWRlcyIsImZpbmRBeGlvbUJ5UmVmZXJlbmNlTmFtZSIsImF4aW9tTGFiZWxzSW5jbHVkZXNMYWJlbCIsImZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOYW1lIiwidmFyaWFibGVOYW1lIiwibmFtZSIsInZhcmlhYmxlIiwibWF0Y2hOYW1lIiwiaXNEZXJpdmVkIiwiZGVyaXZlZCIsImlzTGFiZWxQcmVzZW50IiwibGFiZWxzSW5jbHVkZXNMYWJlbCIsImxhYmVsUHJlc2VudCIsIm1hdGNoTWV0YUFzc2VydGlvbiIsIm1ldGFBc3NlcnRpb24iLCJtZXRhQXNzZXJ0aW9uTWF0Y2hlcyIsImlzVHlwZVByZXNlbnRCeVR5cGVOYW1lIiwidHlwZVByZXNlbnQiLCJpc1ZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVOYW1lIiwidmFyaWFibGVQcmVzZW50IiwiYWRkVHlwZSIsImFkZFJ1bGUiLCJhZGRBeGlvbSIsImFkZFZhcmlhYmxlIiwiYWRkQ29tYmluYXRvciIsImNvbWJpbmF0b3IiLCJhZGRDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yIiwidHJhY2UiLCJtZXNzYWdlIiwibG9nIiwiZGVidWciLCJpbmZvIiwid2FybmluZyIsImVycm9yIiwiZmF0YWwiLCJsZXZlbCIsImxlYXN0TGluZUluZGV4IiwibGVhc3RMaW5lSW5kZXhGcm9tTm9kZUFuZFRva2VucyIsImdyZWF0ZXN0TGluZUluZGV4IiwiZ3JlYXRlc3RMaW5lSW5kZXhGcm9tTm9kZUFuZFRva2VucyIsImZyb21SZWxlYXNlQ29udGV4dEFuZEZpbGVQYXRoIiwiZmlsZSIsImdldEZpbGUiLCJjb250ZW50IiwiZ2V0Q29udGVudCIsInRva2VuaXNlIiwicGFyc2UiLCJyZXdyaXRlTm9kZXMiLCJmaWxlQ29udGV4dCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUFVcUJBOzs7eUJBUkU7cUNBQ007cUJBRVI7c0JBQytEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFcEYsSUFBUUMsY0FBa0ZDLGlCQUFNLENBQXhGRCxhQUFhRSxjQUFxRUQsaUJBQU0sQ0FBM0VDLGFBQWFDLGFBQXdERixpQkFBTSxDQUE5REUsWUFBWUMsZ0JBQTRDSCxpQkFBTSxDQUFsREcsZUFBZUMsY0FBNkJKLGlCQUFNLENBQW5DSSxhQUFhQyxjQUFnQkwsaUJBQU0sQ0FBdEJLO0FBRTNELElBQUEsQUFBTVAsNEJBQU47YUFBTUEsWUFDUFEsUUFBUSxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsS0FBSyxFQUFFQyxLQUFLLEVBQUVDLE1BQU0sRUFBRUMsU0FBUyxFQUFFQyxXQUFXLEVBQUVDLFlBQVksRUFBRUMsY0FBYzs4QkFEM0ZqQjtRQUVqQixJQUFJLENBQUNRLFFBQVEsR0FBR0E7UUFDaEIsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFDQyxLQUFLLEdBQUdBO1FB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
336
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2ZpbGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHJld3JpdGVOb2RlcyB9IGZyb20gXCJvY2NhbS1ncmFtbWFyLXV0aWxpdGllc1wiO1xuXG5pbXBvcnQgbG9nZ2luZ01peGlucyBmcm9tIFwiLi4vbWl4aW5zL2xvZ2dpbmdcIjtcblxuaW1wb3J0IHsgcHVzaCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IGxlYXN0TGluZUluZGV4RnJvbU5vZGVBbmRUb2tlbnMsIGdyZWF0ZXN0TGluZUluZGV4RnJvbU5vZGVBbmRUb2tlbnMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3Rva2Vuc1wiO1xuXG5jbGFzcyBGaWxlQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGZpbGVQYXRoLCBjb250ZXh0LCB0b2tlbnMsIG5vZGUsIHJ1bGVzLCB0eXBlcywgYXhpb21zLCB2YXJpYWJsZXMsIGNvbWJpbmF0b3JzLCBjb25zdHJ1Y3RvcnMpIHtcbiAgICB0aGlzLmZpbGVQYXRoID0gZmlsZVBhdGg7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICB0aGlzLnRva2VucyA9IHRva2VucztcbiAgICB0aGlzLm5vZGUgPSBub2RlO1xuICAgIHRoaXMucnVsZXMgPSBydWxlcztcbiAgICB0aGlzLnR5cGVzID0gdHlwZXM7XG4gICAgdGhpcy5heGlvbXMgPSBheGlvbXM7XG4gICAgdGhpcy52YXJpYWJsZXMgPSB2YXJpYWJsZXM7XG4gICAgdGhpcy5jb21iaW5hdG9ycyA9IGNvbWJpbmF0b3JzO1xuICAgIHRoaXMuY29uc3RydWN0b3JzID0gY29uc3RydWN0b3JzO1xuICB9XG5cbiAgZ2V0RmlsZVBhdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsZVBhdGg7XG4gIH1cblxuICBnZXRDb250ZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHQ7XG4gIH1cblxuICBnZXRUb2tlbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zO1xuICB9XG5cbiAgZ2V0Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlO1xuICB9XG5cbiAgZ2V0VmFyaWFibGVzKCkge1xuICAgIHJldHVybiB0aGlzLnZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFJ1bGVzKGJ1YmJsZSA9IHRydWUpIHtcbiAgICBjb25zdCBydWxlcyA9IFtcbiAgICAgIC4uLnRoaXMucnVsZXNcbiAgICBdO1xuXG4gICAgaWYgKGJ1YmJsZSkge1xuICAgICAgY29uc3QgcmVsZWFzZUNvbnRleHRSdWxlcyA9IHRoaXMuY29udGV4dC5nZXRSdWxlcygpO1xuXG4gICAgICBwdXNoKHJ1bGVzLCByZWxlYXNlQ29udGV4dFJ1bGVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcnVsZXM7XG4gIH1cblxuICBnZXRUeXBlcyhidWJibGUgPSB0cnVlKSB7XG4gICAgY29uc3QgdHlwZXMgPSBbXG4gICAgICAuLi50aGlzLnR5cGVzXG4gICAgXTtcblxuICAgIGlmIChidWJibGUpIHtcbiAgICAgIGNvbnN0IHJlbGVhc2VDb250ZXh0VHlwZXMgPSB0aGlzLmNvbnRleHQuZ2V0VHlwZXMoKTtcblxuICAgICAgcHVzaCh0eXBlcywgcmVsZWFzZUNvbnRleHRUeXBlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVzO1xuICB9XG5cbiAgZ2V0QXhpb21zKGJ1YmJsZSA9IHRydWUpIHtcbiAgICBjb25zdCBheGlvbXMgPSBbXG4gICAgICAuLi50aGlzLmF4aW9tc1xuICAgIF07XG5cbiAgICBpZiAoYnViYmxlKSB7XG4gICAgICBjb25zdCByZWxlYXNlQ29udGV4dEF4aW9tcyA9IHRoaXMuY29udGV4dC5nZXRBeGlvbXMoKTtcblxuICAgICAgcHVzaChheGlvbXMsIHJlbGVhc2VDb250ZXh0QXhpb21zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXhpb21zO1xuICB9XG5cbiAgZ2V0Q29tYmluYXRvcnMoYnViYmxlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbWJpbmF0b3JzID0gW1xuICAgICAgLi4udGhpcy5jb21iaW5hdG9yc1xuICAgIF07XG5cbiAgICBpZiAoYnViYmxlKSB7XG4gICAgICBjb25zdCByZWxlYXNlQ29udGV4dENvbWJpbmF0b3JzID0gdGhpcy5jb250ZXh0LmdldENvbWJpbmF0b3JzKCk7XG5cbiAgICAgIHB1c2goY29tYmluYXRvcnMsIHJlbGVhc2VDb250ZXh0Q29tYmluYXRvcnMpO1xuICAgIH1cblxuICAgIHJldHVybiBjb21iaW5hdG9ycztcbiAgfVxuXG4gIGdldENvbnN0cnVjdG9ycyhidWJibGUgPSB0cnVlKSB7XG4gICAgY29uc3QgY29uc3RydWN0b3JzID0gW1xuICAgICAgLi4udGhpcy5jb25zdHJ1Y3RvcnNcbiAgICBdO1xuXG4gICAgaWYgKGJ1YmJsZSkge1xuICAgICAgY29uc3QgcmVsZWFzZUNvbnRleHRDb25zdHJ1Y3RvcnMgPSB0aGlzLmNvbnRleHQuZ2V0Q29uc3RydWN0b3JzKCk7XG5cbiAgICAgIHB1c2goY29uc3RydWN0b3JzLCByZWxlYXNlQ29udGV4dENvbnN0cnVjdG9ycyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnN0cnVjdG9ycztcbiAgfVxuXG4gIGdldEFzc2VydGlvbnMoKSB7XG4gICAgY29uc3QgYXNzZXJ0aW9ucyA9IFtdOyAgLy8vXG5cbiAgICByZXR1cm4gYXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldE1ldGFBc3NlcnRpb25zKCkge1xuICAgIGNvbnN0IG1ldGFBc3NlcnRpb25zID0gW107ICAvLy9cblxuICAgIHJldHVybiBtZXRhQXNzZXJ0aW9ucztcbiAgfVxuXG4gIGZpbmRUeXBlQnlUeXBlTmFtZSh0eXBlTmFtZSkge1xuICAgIGNvbnN0IHR5cGVzID0gdGhpcy5nZXRUeXBlcygpLFxuICAgICAgICAgIHR5cGUgPSB0eXBlcy5maW5kKCh0eXBlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGVzID0gdHlwZS5tYXRjaFR5cGVOYW1lKHR5cGVOYW1lKTtcblxuICAgICAgICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgZmluZFJ1bGVCeVJlZmVyZW5jZU5hbWUocmVmZXJlbmNlTmFtZSkge1xuICAgIGNvbnN0IGxhYmVsID0gcmVmZXJlbmNlTmFtZSwgIC8vL1xuICAgICAgICAgIHJ1bGVzID0gdGhpcy5nZXRSdWxlcygpLFxuICAgICAgICAgIHJ1bGUgPSBydWxlcy5maW5kKChydWxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBydWxlTGFiZWxzID0gcnVsZS5nZXRMYWJlbHMoKSxcbiAgICAgICAgICAgICAgICAgIHJ1bGVMYWJlbHNJbmNsdWRlc0xhYmVsID0gcnVsZUxhYmVscy5pbmNsdWRlcyhsYWJlbCk7XG5cbiAgICAgICAgICAgIGlmIChydWxlTGFiZWxzSW5jbHVkZXNMYWJlbCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBmaW5kQXhpb21CeVJlZmVyZW5jZU5hbWUocmVmZXJlbmNlTmFtZSkge1xuICAgIGNvbnN0IGxhYmVsID0gcmVmZXJlbmNlTmFtZSwgIC8vL1xuICAgICAgICAgIGF4aW9tcyA9IHRoaXMuZ2V0QXhpb21zKCksXG4gICAgICAgICAgYXhpb20gPSBheGlvbXMuZmluZCgoYXhpb20pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGF4aW9tTGFiZWxzID0gYXhpb20uZ2V0TGFiZWxzKCksXG4gICAgICAgICAgICAgICAgYXhpb21MYWJlbHNJbmNsdWRlc0xhYmVsID0gYXhpb21MYWJlbHMuaW5jbHVkZXMobGFiZWwpO1xuXG4gICAgICAgICAgICBpZiAoYXhpb21MYWJlbHNJbmNsdWRlc0xhYmVsKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gYXhpb207XG4gIH1cblxuICBmaW5kVmFyaWFibGVCeVZhcmlhYmxlTmFtZSh2YXJpYWJsZU5hbWUpIHtcbiAgICBjb25zdCBuYW1lID0gdmFyaWFibGVOYW1lLCAgLy8vXG4gICAgICAgICAgdmFyaWFibGVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSxcbiAgICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlcy5maW5kKCh2YXJpYWJsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHZhcmlhYmxlLm1hdGNoTmFtZShuYW1lKTtcblxuICAgICAgICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiB2YXJpYWJsZTtcbiAgfVxuXG4gIGlzTGFiZWxQcmVzZW50KGxhYmVsKSB7XG4gICAgY29uc3QgbGFiZWxzID0gdGhpcy5nZXRMYWJlbHMoKSxcbiAgICAgICAgbGFiZWxzSW5jbHVkZXNMYWJlbCA9IGxhYmVscy5pbmNsdWRlcyhsYWJlbCksXG4gICAgICAgIGxhYmVsUHJlc2VudCA9IGxhYmVsc0luY2x1ZGVzTGFiZWw7IC8vL1xuXG4gICAgcmV0dXJuIGxhYmVsUHJlc2VudDtcbiAgfVxuXG4gIGlzVHlwZVByZXNlbnRCeVR5cGVOYW1lKHR5cGVOYW1lKSB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZmluZFR5cGVCeVR5cGVOYW1lKHR5cGVOYW1lKSxcbiAgICAgICAgdHlwZVByZXNlbnQgPSAodHlwZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gdHlwZVByZXNlbnQ7XG4gIH1cblxuICBpc1ZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVOYW1lKHZhcmlhYmxlTmFtZSkge1xuICAgIGNvbnN0IHZhcmlhYmxlID0gdGhpcy5maW5kVmFyaWFibGVCeVZhcmlhYmxlTmFtZSh2YXJpYWJsZU5hbWUpLFxuICAgICAgICB2YXJpYWJsZVByZXNlbnQgPSAodmFyaWFibGUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlUHJlc2VudDtcbiAgfVxuXG4gIGdldExhYmVscygpIHtcbiAgICBjb25zdCBheGlvbXMgPSB0aGlzLmdldEF4aW9tcygpLFxuICAgICAgICAgIGxhYmVscyA9IGF4aW9tcy5yZWR1Y2UoKGxhYmVscywgYXhpb20pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGF4aW9tTGFiZWxzID0gYXhpb20uZ2V0TGFiZWxzKCk7XG5cbiAgICAgICAgICAgIHB1c2gobGFiZWxzLCBheGlvbUxhYmVscyk7XG5cbiAgICAgICAgICAgIHJldHVybiBsYWJlbHM7XG4gICAgICAgICAgfSwgW10pO1xuXG4gICAgcmV0dXJuIGxhYmVscztcbiAgfVxuXG4gIGFkZFR5cGUodHlwZSkge1xuICAgIHRoaXMudHlwZXMucHVzaCh0eXBlKTtcbiAgfVxuXG4gIGFkZFJ1bGUocnVsZSkge1xuICAgIHRoaXMucnVsZXMucHVzaChydWxlKTtcbiAgfVxuXG4gIGFkZEF4aW9tKGF4aW9tKSB7XG4gICAgdGhpcy5heGlvbXMucHVzaChheGlvbSk7XG4gIH1cblxuICBhZGRWYXJpYWJsZSh2YXJpYWJsZSkge1xuICAgIHRoaXMudmFyaWFibGVzLnB1c2godmFyaWFibGUpO1xuICB9XG5cbiAgYWRkQ29tYmluYXRvcihjb21iaW5hdG9yKSB7XG4gICAgdGhpcy5jb21iaW5hdG9ycy5wdXNoKGNvbWJpbmF0b3IpO1xuICB9XG5cbiAgYWRkQ29uc3RydWN0b3IoY29uc3RydWN0b3IpIHtcbiAgICB0aGlzLmNvbnN0cnVjdG9ycy5wdXNoKGNvbnN0cnVjdG9yKTtcbiAgfVxuXG4gIGhhbHQobm9kZSkge1xuICAgIGNvbnN0IGxlYXN0TGluZUluZGV4ID0gbGVhc3RMaW5lSW5kZXhGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0aGlzLnRva2VucyksXG4gICAgICAgICAgZ3JlYXRlc3RMaW5lSW5kZXggPSBncmVhdGVzdExpbmVJbmRleEZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRoaXMudG9rZW5zKTtcblxuICAgIHRoaXMuY29udGV4dC5oYWx0KHRoaXMuZmlsZVBhdGgsIGxlYXN0TGluZUluZGV4LCBncmVhdGVzdExpbmVJbmRleCk7XG4gIH1cblxuICBiZWdpbihub2RlKSB7XG4gICAgY29uc3QgbGVhc3RMaW5lSW5kZXggPSBsZWFzdExpbmVJbmRleEZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRoaXMudG9rZW5zKSxcbiAgICAgICAgICBncmVhdGVzdExpbmVJbmRleCA9IGdyZWF0ZXN0TGluZUluZGV4RnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdGhpcy50b2tlbnMpO1xuXG4gICAgdGhpcy5jb250ZXh0LmJlZ2luKHRoaXMuZmlsZVBhdGgsIGxlYXN0TGluZUluZGV4LCBncmVhdGVzdExpbmVJbmRleCk7XG4gIH1cblxuICBjb21wbGV0ZShub2RlKSB7XG4gICAgY29uc3QgbGVhc3RMaW5lSW5kZXggPSBsZWFzdExpbmVJbmRleEZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRoaXMudG9rZW5zKSxcbiAgICAgICAgICBncmVhdGVzdExpbmVJbmRleCA9IGdyZWF0ZXN0TGluZUluZGV4RnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdGhpcy50b2tlbnMpO1xuXG4gICAgdGhpcy5jb250ZXh0LmNvbXBsZXRlKHRoaXMuZmlsZVBhdGgsIGxlYXN0TGluZUluZGV4LCBncmVhdGVzdExpbmVJbmRleCk7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJlbGVhc2VDb250ZXh0QW5kRmlsZVBhdGgocmVsZWFzZUNvbnRleHQsIGZpbGVQYXRoKSB7XG4gICAgY29uc3QgZmlsZSA9IHJlbGVhc2VDb250ZXh0LmdldEZpbGUoZmlsZVBhdGgpLFxuICAgICAgICAgIGNvbnRlbnQgPSBmaWxlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICB0b2tlbnMgPSByZWxlYXNlQ29udGV4dC50b2tlbmlzZShjb250ZW50KSxcbiAgICAgICAgICBub2RlID0gcmVsZWFzZUNvbnRleHQucGFyc2UodG9rZW5zKTtcblxuICAgIHJld3JpdGVOb2Rlcyhub2RlKTtcblxuICAgIGNvbnN0IGNvbnRleHQgPSByZWxlYXNlQ29udGV4dCwgLy8vXG4gICAgICAgICAgcnVsZXMgPSBbXSxcbiAgICAgICAgICB0eXBlcyA9IFtdLFxuICAgICAgICAgIGF4aW9tcyA9IFtdLFxuICAgICAgICAgIHZhcmlhYmxlcyA9IFtdLFxuICAgICAgICAgIGNvbWJpbmF0b3JzID0gW10sXG4gICAgICAgICAgY29uc3RydWN0b3JzID0gW10sXG4gICAgICAgICAgZmlsZUNvbnRleHQgPSBuZXcgRmlsZUNvbnRleHQoZmlsZVBhdGgsIGNvbnRleHQsIHRva2Vucywgbm9kZSwgcnVsZXMsIHR5cGVzLCBheGlvbXMsIHZhcmlhYmxlcywgY29tYmluYXRvcnMsIGNvbnN0cnVjdG9ycyk7XG5cbiAgICByZXR1cm4gZmlsZUNvbnRleHQ7XG4gIH1cbn1cblxuT2JqZWN0LmFzc2lnbihGaWxlQ29udGV4dC5wcm90b3R5cGUsIGxvZ2dpbmdNaXhpbnMpO1xuXG5leHBvcnQgZGVmYXVsdCBGaWxlQ29udGV4dDtcbiJdLCJuYW1lcyI6WyJGaWxlQ29udGV4dCIsImZpbGVQYXRoIiwiY29udGV4dCIsInRva2VucyIsIm5vZGUiLCJydWxlcyIsInR5cGVzIiwiYXhpb21zIiwidmFyaWFibGVzIiwiY29tYmluYXRvcnMiLCJjb25zdHJ1Y3RvcnMiLCJnZXRGaWxlUGF0aCIsImdldENvbnRleHQiLCJnZXRUb2tlbnMiLCJnZXROb2RlIiwiZ2V0VmFyaWFibGVzIiwiZ2V0UnVsZXMiLCJidWJibGUiLCJyZWxlYXNlQ29udGV4dFJ1bGVzIiwicHVzaCIsImdldFR5cGVzIiwicmVsZWFzZUNvbnRleHRUeXBlcyIsImdldEF4aW9tcyIsInJlbGVhc2VDb250ZXh0QXhpb21zIiwiZ2V0Q29tYmluYXRvcnMiLCJyZWxlYXNlQ29udGV4dENvbWJpbmF0b3JzIiwiZ2V0Q29uc3RydWN0b3JzIiwicmVsZWFzZUNvbnRleHRDb25zdHJ1Y3RvcnMiLCJnZXRBc3NlcnRpb25zIiwiYXNzZXJ0aW9ucyIsImdldE1ldGFBc3NlcnRpb25zIiwibWV0YUFzc2VydGlvbnMiLCJmaW5kVHlwZUJ5VHlwZU5hbWUiLCJ0eXBlTmFtZSIsInR5cGUiLCJmaW5kIiwibWF0Y2hlcyIsIm1hdGNoVHlwZU5hbWUiLCJmaW5kUnVsZUJ5UmVmZXJlbmNlTmFtZSIsInJlZmVyZW5jZU5hbWUiLCJsYWJlbCIsInJ1bGUiLCJydWxlTGFiZWxzIiwiZ2V0TGFiZWxzIiwicnVsZUxhYmVsc0luY2x1ZGVzTGFiZWwiLCJpbmNsdWRlcyIsImZpbmRBeGlvbUJ5UmVmZXJlbmNlTmFtZSIsImF4aW9tIiwiYXhpb21MYWJlbHMiLCJheGlvbUxhYmVsc0luY2x1ZGVzTGFiZWwiLCJmaW5kVmFyaWFibGVCeVZhcmlhYmxlTmFtZSIsInZhcmlhYmxlTmFtZSIsIm5hbWUiLCJ2YXJpYWJsZSIsIm1hdGNoTmFtZSIsImlzTGFiZWxQcmVzZW50IiwibGFiZWxzIiwibGFiZWxzSW5jbHVkZXNMYWJlbCIsImxhYmVsUHJlc2VudCIsImlzVHlwZVByZXNlbnRCeVR5cGVOYW1lIiwidHlwZVByZXNlbnQiLCJpc1ZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVOYW1lIiwidmFyaWFibGVQcmVzZW50IiwicmVkdWNlIiwiYWRkVHlwZSIsImFkZFJ1bGUiLCJhZGRBeGlvbSIsImFkZFZhcmlhYmxlIiwiYWRkQ29tYmluYXRvciIsImNvbWJpbmF0b3IiLCJhZGRDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yIiwiaGFsdCIsImxlYXN0TGluZUluZGV4IiwibGVhc3RMaW5lSW5kZXhGcm9tTm9kZUFuZFRva2VucyIsImdyZWF0ZXN0TGluZUluZGV4IiwiZ3JlYXRlc3RMaW5lSW5kZXhGcm9tTm9kZUFuZFRva2VucyIsImJlZ2luIiwiY29tcGxldGUiLCJmcm9tUmVsZWFzZUNvbnRleHRBbmRGaWxlUGF0aCIsInJlbGVhc2VDb250ZXh0IiwiZmlsZSIsImdldEZpbGUiLCJjb250ZW50IiwiZ2V0Q29udGVudCIsInRva2VuaXNlIiwicGFyc2UiLCJyZXdyaXRlTm9kZXMiLCJmaWxlQ29udGV4dCIsIk9iamVjdCIsImFzc2lnbiIsInByb3RvdHlwZSIsImxvZ2dpbmdNaXhpbnMiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQTZSQTs7O2VBQUE7OztxQ0EzUjZCOzREQUVIO3FCQUVMO3NCQUMrRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFcEYsSUFBQSxBQUFNQSw0QkFrUkgsQUFsUkg7YUFBTUEsWUFDUUMsUUFBUSxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxLQUFLLEVBQUVDLEtBQUssRUFBRUMsTUFBTSxFQUFFQyxTQUFTLEVBQUVDLFdBQVcsRUFBRUMsWUFBWTs4QkFEbkdWO1FBRUYsSUFBSSxDQUFDQyxRQUFRLEdBQUdBO1FBQ2hCLElBQUksQ0FBQ0MsT0FBTyxHQUFHQTtRQUNmLElBQUksQ0FBQ0MsTUFBTSxHQUFHQTtRQUNkLElBQUksQ0FBQ0MsSUFBSSxHQUFHQTtRQUNaLElBQUksQ0FBQ0MsS0FBSyxHQUFHQTtRQUNiLElBQUksQ0FBQ0MsS0FBSyxHQUFHQTtRQUNiLElBQUksQ0FBQ0MsTUFBTSxHQUFHQTtRQUNkLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtRQUNqQixJQUFJLENBQUNDLFdBQVcsR0FBR0E7UUFDbkIsSUFBSSxDQUFDQyxZQUFZLEdBQUdBOztpQkFYbEJWOztZQWNKVyxLQUFBQTttQkFBQUEsU0FBQUEsY0FBYztnQkFDWixPQUFPLElBQUksQ0FBQ1YsUUFBUTtZQUN0Qjs7O1lBRUFXLEtBQUFBO21CQUFBQSxTQUFBQSxhQUFhO2dCQUNYLE9BQU8sSUFBSSxDQUFDVixPQUFPO1lBQ3JCOzs7WUFFQVcsS0FBQUE7bUJBQUFBLFNBQUFBLFlBQVk7Z0JBQ1YsT0FBTyxJQUFJLENBQUNWLE1BQU07WUFDcEI7OztZQUVBVyxLQUFB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
@@ -5,9 +5,12 @@ Object.defineProperty(exports, "__esModule", {
5
5
  Object.defineProperty(exports, "default", {
6
6
  enumerable: true,
7
7
  get: function() {
8
- return MetaproofContext;
8
+ return _default;
9
9
  }
10
10
  });
11
+ var _file = /*#__PURE__*/ _interopRequireDefault(require("../mixins/file"));
12
+ var _logging = /*#__PURE__*/ _interopRequireDefault(require("../mixins/logging"));
13
+ var _callbacks = /*#__PURE__*/ _interopRequireDefault(require("../mixins/callbacks"));
11
14
  function _arrayLikeToArray(arr, len) {
12
15
  if (len == null || len > arr.length) len = arr.length;
13
16
  for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
@@ -35,6 +38,11 @@ function _createClass(Constructor, protoProps, staticProps) {
35
38
  if (staticProps) _defineProperties(Constructor, staticProps);
36
39
  return Constructor;
37
40
  }
41
+ function _interopRequireDefault(obj) {
42
+ return obj && obj.__esModule ? obj : {
43
+ default: obj
44
+ };
45
+ }
38
46
  function _iterableToArray(iter) {
39
47
  if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
40
48
  }
@@ -81,63 +89,15 @@ var MetaproofContext = /*#__PURE__*/ function() {
81
89
  }
82
90
  },
83
91
  {
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);
92
+ key: "setDerived",
93
+ value: function setDerived(derived) {
94
+ this.derived = derived;
135
95
  }
136
96
  },
137
97
  {
138
- key: "isTypePresentByTypeName",
139
- value: function isTypePresentByTypeName(typeName) {
140
- return this.context.isTypePresentByTypeName(typeName);
98
+ key: "addMetaAssertion",
99
+ value: function addMetaAssertion(metaAssertion) {
100
+ this.metaAssertions.push(metaAssertion);
141
101
  }
142
102
  },
143
103
  {
@@ -156,77 +116,29 @@ var MetaproofContext = /*#__PURE__*/ function() {
156
116
  }
157
117
  return metaAssertionMatches;
158
118
  }
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, node) {
187
- this.context.trace(message, node);
188
- }
189
- },
190
- {
191
- key: "debug",
192
- value: function debug(message, node) {
193
- this.context.debug(message, node);
194
- }
195
- },
196
- {
197
- key: "info",
198
- value: function info(message, node) {
199
- this.context.info(message, node);
200
- }
201
- },
202
- {
203
- key: "warning",
204
- value: function warning(message, node) {
205
- this.context.warning(message, node);
206
- }
207
- },
119
+ }
120
+ ], [
208
121
  {
209
- key: "error",
210
- value: function error(message, node) {
211
- this.context.error(message, node);
122
+ key: "fromFileContext",
123
+ value: function fromFileContext(fileContext) {
124
+ var context = fileContext, derived = false, metaAssertions = [], metaproofContext = new MetaproofContext(context, derived, metaAssertions);
125
+ return metaproofContext;
212
126
  }
213
127
  },
214
128
  {
215
- key: "fatal",
216
- value: function fatal(message, node) {
217
- this.context.fatal(message, node);
218
- }
219
- }
220
- ], [
221
- {
222
- key: "fromContext",
223
- value: function fromContext(context) {
224
- var derived = false, metaAssertions = [], metaproofContext = new MetaproofContext(context, derived, metaAssertions);
129
+ key: "fromMetaproofContext",
130
+ value: function fromMetaproofContext(metaproofContext) {
131
+ var context = metaproofContext, derived = false, metaAssertions = [];
132
+ metaproofContext = new MetaproofContext(context, derived, metaAssertions); ///
225
133
  return metaproofContext;
226
134
  }
227
135
  }
228
136
  ]);
229
137
  return MetaproofContext;
230
138
  }();
139
+ Object.assign(MetaproofContext.prototype, _file.default);
140
+ Object.assign(MetaproofContext.prototype, _logging.default);
141
+ Object.assign(MetaproofContext.prototype, _callbacks.default);
142
+ var _default = MetaproofContext;
231
143
 
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L21ldGFwcm9vZi5qcyIsIjw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0YXByb29mQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIGRlcml2ZWQsIG1ldGFBc3NlcnRpb25zKSB7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICB0aGlzLmRlcml2ZWQgPSBkZXJpdmVkO1xuICAgIHRoaXMubWV0YUFzc2VydGlvbnMgPSBtZXRhQXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldENvbnRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dDtcbiAgfVxuXG4gIGlzRGVyaXZlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5kZXJpdmVkO1xuICB9XG5cbiAgZ2V0TWV0YUFzc2VydGlvbnMoKSB7XG4gICAgbGV0IG1ldGFBc3NlcnRpb25zID0gdGhpcy5jb250ZXh0LmdldE1ldGFBc3NlcnRpb25zKCk7XG5cbiAgICBtZXRhQXNzZXJ0aW9ucyA9IFtcbiAgICAgIC4uLm1ldGFBc3NlcnRpb25zLFxuICAgICAgLi4udGhpcy5tZXRhQXNzZXJ0aW9uc1xuICAgIF07XG5cbiAgICByZXR1cm4gbWV0YUFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRSdWxlcygpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5nZXRSdWxlcygpOyB9XG5cbiAgZ2V0VHlwZXMoKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZ2V0VHlwZXMoKTsgfVxuXG4gIGdldEF4aW9tcygpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5nZXRBeGlvbXMoKTsgfVxuXG4gIGdldENvbWJpbmF0b3JzKCkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmdldENvbWJpbmF0b3JzKCk7IH1cblxuICBnZXRDb25zdHJ1Y3RvcnMoKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZ2V0Q29uc3RydWN0b3JzKCk7IH1cblxuICBmaW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5maW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUpOyB9XG5cbiAgZmluZFJ1bGVCeVJlZmVyZW5jZU5hbWUocmVmZXJlbmNlTmFtZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmZpbmRSdWxlQnlSZWZlcmVuY2VOYW1lKHJlZmVyZW5jZU5hbWUpOyB9XG5cbiAgZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5hbWUodmFyaWFibGVOYW1lKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5hbWUodmFyaWFibGVOYW1lKTsgfVxuXG4gIGlzTGFiZWxQcmVzZW50KGxhYmVsKSB7IHJldHVybiB0aGlzLmNvbnRleHQuaXNMYWJlbFByZXNlbnQobGFiZWwpOyB9XG5cbiAgaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUodHlwZU5hbWUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5pc1R5cGVQcmVzZW50QnlUeXBlTmFtZSh0eXBlTmFtZSk7IH1cblxuICBtYXRjaE1ldGFBc3NlcnRpb24obWV0YUFzc2VydGlvbikge1xuICAgIGxldCBtZXRhQXNzZXJ0aW9uTWF0Y2hlcztcblxuICAgIGNvbnN0IG1ldGFBc3NlcnRpb25CID0gbWV0YUFzc2VydGlvbjsgLy8vXG5cbiAgICBtZXRhQXNzZXJ0aW9uTWF0Y2hlcyA9IHRoaXMubWV0YUFzc2VydGlvbnMuc29tZSgobWV0YUFzc2VydGlvbikgPT4ge1xuICAgICAgY29uc3QgbWV0YUFzc2VydGlvbkEgPSBtZXRhQXNzZXJ0aW9uLCAvLy9cbiAgICAgICAgICAgIG1hdGNoZXMgPSBtZXRhQXNzZXJ0aW9uQS5tYXRjaChtZXRhQXNzZXJ0aW9uQik7XG5cbiAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFtZXRhQXNzZXJ0aW9uTWF0Y2hlcykge1xuICAgICAgbWV0YUFzc2VydGlvbk1hdGNoZXMgPSB0aGlzLmNvbnRleHQubWF0Y2hNZXRhQXNzZXJ0aW9uKG1ldGFBc3NlcnRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhQXNzZXJ0aW9uTWF0Y2hlcztcbiAgfVxuXG4gIGlzVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZU5hbWUodmFyaWFibGVOYW1lKSB7IHJldHVybiB0aGlzLmNvbnRleHQuaXNWYXJpYWJsZVByZXNlbnRCeVZhcmlhYmxlTmFtZSh2YXJpYWJsZU5hbWUpOyB9XG5cbiAgc2V0RGVyaXZlZChkZXJpdmVkKSB7XG4gICAgdGhpcy5kZXJpdmVkID0gZGVyaXZlZDtcbiAgfVxuXG4gIGFkZFJ1bGUocnVsZSkgeyB0aGlzLmNvbnRleHQuYWRkUnVsZShydWxlKTsgfVxuXG4gIGFkZE1ldGFBc3NlcnRpb24obWV0YUFzc2VydGlvbikge1xuICAgIHRoaXMubWV0YUFzc2VydGlvbnMucHVzaChtZXRhQXNzZXJ0aW9uKTtcbiAgfVxuXG4gIHRyYWNlKG1lc3NhZ2UsIG5vZGUpIHsgdGhpcy5jb250ZXh0LnRyYWNlKG1lc3NhZ2UsIG5vZGUpOyB9XG5cbiAgZGVidWcobWVzc2FnZSwgbm9kZSkgeyB0aGlzLmNvbnRleHQuZGVidWcobWVzc2FnZSwgbm9kZSk7IH1cblxuICBpbmZvKG1lc3NhZ2UsIG5vZGUpIHsgdGhpcy5jb250ZXh0LmluZm8obWVzc2FnZSwgbm9kZSk7IH1cblxuICB3YXJuaW5nKG1lc3NhZ2UsIG5vZGUpIHsgdGhpcy5jb250ZXh0Lndhcm5pbmcobWVzc2FnZSwgbm9kZSk7IH1cblxuICBlcnJvcihtZXNzYWdlLCBub2RlKSB7IHRoaXMuY29udGV4dC5lcnJvcihtZXNzYWdlLCBub2RlKTsgfVxuXG4gIGZhdGFsKG1lc3NhZ2UsIG5vZGUpIHsgdGhpcy5jb250ZXh0LmZhdGFsKG1lc3NhZ2UsIG5vZGUpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZXh0KGNvbnRleHQpIHtcbiAgICBjb25zdCBkZXJpdmVkID0gZmFsc2UsXG4gICAgICAgICAgbWV0YUFzc2VydGlvbnMgPSBbXSxcbiAgICAgICAgICBtZXRhcHJvb2ZDb250ZXh0ID0gbmV3IE1ldGFwcm9vZkNvbnRleHQoY29udGV4dCwgZGVyaXZlZCwgbWV0YUFzc2VydGlvbnMpO1xuXG4gICAgcmV0dXJuIG1ldGFwcm9vZkNvbnRleHQ7XG4gIH1cbn1cbiIsIlJlYWN0LmNyZWF0ZUVsZW1lbnQiXSwibmFtZXMiOlsiTWV0YXByb29mQ29udGV4dCIsImNvbnRleHQiLCJkZXJpdmVkIiwibWV0YUFzc2VydGlvbnMiLCJnZXRDb250ZXh0IiwiaXNEZXJpdmVkIiwiZ2V0TWV0YUFzc2VydGlvbnMiLCJnZXRSdWxlcyIsImdldFR5cGVzIiwiZ2V0QXhpb21zIiwiZ2V0Q29tYmluYXRvcnMiLCJnZXRDb25zdHJ1Y3RvcnMiLCJmaW5kVHlwZUJ5VHlwZU5hbWUiLCJ0eXBlTmFtZSIsImZpbmRSdWxlQnlSZWZlcmVuY2VOYW1lIiwicmVmZXJlbmNlTmFtZSIsImZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOYW1lIiwidmFyaWFibGVOYW1lIiwiaXNMYWJlbFByZXNlbnQiLCJsYWJlbCIsImlzVHlwZVByZXNlbnRCeVR5cGVOYW1lIiwibWF0Y2hNZXRhQXNzZXJ0aW9uIiwibWV0YUFzc2VydGlvbiIsIm1ldGFBc3NlcnRpb25NYXRjaGVzIiwibWV0YUFzc2VydGlvbkIiLCJzb21lIiwibWV0YUFzc2VydGlvbkEiLCJtYXRjaGVzIiwibWF0Y2giLCJpc1ZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVOYW1lIiwic2V0RGVyaXZlZCIsImFkZFJ1bGUiLCJydWxlIiwiYWRkTWV0YUFzc2VydGlvbiIsInB1c2giLCJ0cmFjZSIsIm1lc3NhZ2UiLCJub2RlIiwiZGVidWciLCJpbmZvIiwid2FybmluZyIsImVycm9yIiwiZmF0YWwiLCJmcm9tQ29udGV4dCIsIm1ldGFwcm9vZkNvbnRleHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBRXFCQTs7Ozs7Ozs7Ozs7Ozs7Ozs7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
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L21ldGFwcm9vZi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGZpbGVNaXhpbnMgZnJvbSBcIi4uL21peGlucy9maWxlXCI7XG5pbXBvcnQgbG9nZ2luZ01peGlucyBmcm9tIFwiLi4vbWl4aW5zL2xvZ2dpbmdcIjtcbmltcG9ydCBjYWxsYmFja3NNaXhpbnMgZnJvbSBcIi4uL21peGlucy9jYWxsYmFja3NcIjtcblxuY2xhc3MgTWV0YXByb29mQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIGRlcml2ZWQsIG1ldGFBc3NlcnRpb25zKSB7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICB0aGlzLmRlcml2ZWQgPSBkZXJpdmVkO1xuICAgIHRoaXMubWV0YUFzc2VydGlvbnMgPSBtZXRhQXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldENvbnRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dDtcbiAgfVxuXG4gIGlzRGVyaXZlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5kZXJpdmVkO1xuICB9XG5cbiAgZ2V0TWV0YUFzc2VydGlvbnMoKSB7XG4gICAgbGV0IG1ldGFBc3NlcnRpb25zID0gdGhpcy5jb250ZXh0LmdldE1ldGFBc3NlcnRpb25zKCk7XG5cbiAgICBtZXRhQXNzZXJ0aW9ucyA9IFsgIC8vL1xuICAgICAgLi4ubWV0YUFzc2VydGlvbnMsXG4gICAgICAuLi50aGlzLm1ldGFBc3NlcnRpb25zXG4gICAgXTtcblxuICAgIHJldHVybiBtZXRhQXNzZXJ0aW9ucztcbiAgfVxuXG4gIHNldERlcml2ZWQoZGVyaXZlZCkge1xuICAgIHRoaXMuZGVyaXZlZCA9IGRlcml2ZWQ7XG4gIH1cblxuICBhZGRNZXRhQXNzZXJ0aW9uKG1ldGFBc3NlcnRpb24pIHtcbiAgICB0aGlzLm1ldGFBc3NlcnRpb25zLnB1c2gobWV0YUFzc2VydGlvbik7XG4gIH1cblxuICBtYXRjaE1ldGFBc3NlcnRpb24obWV0YUFzc2VydGlvbikge1xuICAgIGxldCBtZXRhQXNzZXJ0aW9uTWF0Y2hlcztcblxuICAgIGNvbnN0IG1ldGFBc3NlcnRpb25CID0gbWV0YUFzc2VydGlvbjsgLy8vXG5cbiAgICBtZXRhQXNzZXJ0aW9uTWF0Y2hlcyA9IHRoaXMubWV0YUFzc2VydGlvbnMuc29tZSgobWV0YUFzc2VydGlvbikgPT4ge1xuICAgICAgY29uc3QgbWV0YUFzc2VydGlvbkEgPSBtZXRhQXNzZXJ0aW9uLCAvLy9cbiAgICAgICAgICAgIG1hdGNoZXMgPSBtZXRhQXNzZXJ0aW9uQS5tYXRjaChtZXRhQXNzZXJ0aW9uQik7XG5cbiAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFtZXRhQXNzZXJ0aW9uTWF0Y2hlcykge1xuICAgICAgbWV0YUFzc2VydGlvbk1hdGNoZXMgPSB0aGlzLmNvbnRleHQubWF0Y2hNZXRhQXNzZXJ0aW9uKG1ldGFBc3NlcnRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhQXNzZXJ0aW9uTWF0Y2hlcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRmlsZUNvbnRleHQoZmlsZUNvbnRleHQpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gZmlsZUNvbnRleHQsICAvLy9cbiAgICAgICAgICBkZXJpdmVkID0gZmFsc2UsXG4gICAgICAgICAgbWV0YUFzc2VydGlvbnMgPSBbXSxcbiAgICAgICAgICBtZXRhcHJvb2ZDb250ZXh0ID0gbmV3IE1ldGFwcm9vZkNvbnRleHQoY29udGV4dCwgZGVyaXZlZCwgbWV0YUFzc2VydGlvbnMpO1xuXG4gICAgcmV0dXJuIG1ldGFwcm9vZkNvbnRleHQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbU1ldGFwcm9vZkNvbnRleHQobWV0YXByb29mQ29udGV4dCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSBtZXRhcHJvb2ZDb250ZXh0LCAgLy8vXG4gICAgICAgICAgZGVyaXZlZCA9IGZhbHNlLFxuICAgICAgICAgIG1ldGFBc3NlcnRpb25zID0gW107XG5cbiAgICBtZXRhcHJvb2ZDb250ZXh0ID0gbmV3IE1ldGFwcm9vZkNvbnRleHQoY29udGV4dCwgZGVyaXZlZCwgbWV0YUFzc2VydGlvbnMpOyAgLy8vXG5cbiAgICByZXR1cm4gbWV0YXByb29mQ29udGV4dDtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKE1ldGFwcm9vZkNvbnRleHQucHJvdG90eXBlLCBmaWxlTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oTWV0YXByb29mQ29udGV4dC5wcm90b3R5cGUsIGxvZ2dpbmdNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihNZXRhcHJvb2ZDb250ZXh0LnByb3RvdHlwZSwgY2FsbGJhY2tzTWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgTWV0YXByb29mQ29udGV4dDsiXSwibmFtZXMiOlsiTWV0YXByb29mQ29udGV4dCIsImNvbnRleHQiLCJkZXJpdmVkIiwibWV0YUFzc2VydGlvbnMiLCJnZXRDb250ZXh0IiwiaXNEZXJpdmVkIiwiZ2V0TWV0YUFzc2VydGlvbnMiLCJzZXREZXJpdmVkIiwiYWRkTWV0YUFzc2VydGlvbiIsIm1ldGFBc3NlcnRpb24iLCJwdXNoIiwibWF0Y2hNZXRhQXNzZXJ0aW9uIiwibWV0YUFzc2VydGlvbk1hdGNoZXMiLCJtZXRhQXNzZXJ0aW9uQiIsInNvbWUiLCJtZXRhQXNzZXJ0aW9uQSIsIm1hdGNoZXMiLCJtYXRjaCIsImZyb21GaWxlQ29udGV4dCIsImZpbGVDb250ZXh0IiwibWV0YXByb29mQ29udGV4dCIsImZyb21NZXRhcHJvb2ZDb250ZXh0IiwiT2JqZWN0IiwiYXNzaWduIiwicHJvdG90eXBlIiwiZmlsZU1peGlucyIsImxvZ2dpbmdNaXhpbnMiLCJjYWxsYmFja3NNaXhpbnMiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQXFGQTs7O2VBQUE7Ozt5REFuRnVCOzREQUNHOzhEQUNFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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