occam-verify-cli 0.0.374 → 0.0.375
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/axiom.js +45 -12
- package/lib/combinator.js +13 -7
- package/lib/conclusion.js +8 -1
- package/lib/constructor.js +24 -8
- package/lib/context/file.js +6 -6
- package/lib/context/release/directory.js +17 -17
- package/lib/context/release/file.js +73 -21
- package/lib/kinds.js +5 -5
- package/lib/label.js +16 -1
- package/lib/premise.js +8 -1
- package/lib/rule.js +39 -12
- package/lib/ruleNames.js +5 -1
- package/lib/type.js +19 -8
- package/package.json +1 -1
- package/src/axiom.js +62 -13
- package/src/combinator.js +14 -2
- package/src/conclusion.js +11 -0
- package/src/constructor.js +23 -2
- package/src/context/file.js +5 -5
- package/src/context/release/directory.js +14 -14
- package/src/context/release/file.js +95 -26
- package/src/kinds.js +1 -1
- package/src/label.js +17 -0
- package/src/premise.js +11 -0
- package/src/rule.js +44 -12
- package/src/ruleNames.js +1 -0
- package/src/type.js +19 -2
package/lib/type.js
CHANGED
|
@@ -135,17 +135,28 @@ var Type = /*#__PURE__*/ function() {
|
|
|
135
135
|
{
|
|
136
136
|
key: "toJSON",
|
|
137
137
|
value: function toJSON() {
|
|
138
|
-
var superTypeJSON = this.superType === null ? null : this.superType.toJSON(), kind = _kinds.TYPE_KIND, name = this.name, superType = superTypeJSON, json =
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
}
|
|
144
|
-
];
|
|
138
|
+
var superTypeJSON = this.superType === null ? null : this.superType.toJSON(), kind = _kinds.TYPE_KIND, name = this.name, superType = superTypeJSON, json = {
|
|
139
|
+
kind: kind,
|
|
140
|
+
name: name,
|
|
141
|
+
superType: superType
|
|
142
|
+
};
|
|
145
143
|
return json;
|
|
146
144
|
}
|
|
147
145
|
}
|
|
148
146
|
], [
|
|
147
|
+
{
|
|
148
|
+
key: "fromJSON",
|
|
149
|
+
value: function fromJSON(json) {
|
|
150
|
+
var name = json.name;
|
|
151
|
+
var superType = json.superType;
|
|
152
|
+
if (superType !== null) {
|
|
153
|
+
json = superType; ///
|
|
154
|
+
superType = Type.fromJSON(json);
|
|
155
|
+
}
|
|
156
|
+
var type = new Type(name, superType);
|
|
157
|
+
return type;
|
|
158
|
+
}
|
|
159
|
+
},
|
|
149
160
|
{
|
|
150
161
|
key: "fromTypeName",
|
|
151
162
|
value: function fromTypeName(typeName) {
|
|
@@ -164,4 +175,4 @@ var Type = /*#__PURE__*/ function() {
|
|
|
164
175
|
return Type;
|
|
165
176
|
}();
|
|
166
177
|
|
|
167
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy90eXBlLmpzIiwiPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+
|
|
178
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy90eXBlLmpzIiwiPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBUWVBFX0tJTkQgfSBmcm9tIFwiLi9raW5kc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUeXBlIHtcbiAgY29uc3RydWN0b3IobmFtZSwgc3VwZXJUeXBlKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnN1cGVyVHlwZSA9IHN1cGVyVHlwZTtcbiAgfVxuXG4gIGdldE5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuXG4gIGdldFN1cGVyVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdXBlclR5cGU7XG4gIH1cblxuICBpc0VxdWFsVG8odHlwZSkge1xuICAgIGNvbnN0IGVxdWFsVG9UeXBlID0gKHRoaXMgPT09IHR5cGUpO1xuXG4gICAgcmV0dXJuIGVxdWFsVG9UeXBlO1xuICB9XG5cbiAgaXNTdWJUeXBlT2YodHlwZSkge1xuICAgIGxldCBzdWJUeXBlT2ZUeXBlID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5zdXBlclR5cGUgPT09IHR5cGUpIHtcbiAgICAgIHN1YlR5cGVPZlR5cGUgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zdXBlclR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgc3ViVHlwZU9mVHlwZSA9IHRoaXMuc3VwZXJUeXBlLmlzU3ViVHlwZU9mKHR5cGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdWJUeXBlT2ZUeXBlO1xuICB9XG5cbiAgaXNTdXBlclR5cGVPZih0eXBlKSB7XG4gICAgbGV0IHN1cGVyVHlwZU9mVHlwZSA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3VwZXJUeXBlID0gdHlwZS5nZXRTdXBlclR5cGUoKTtcblxuICAgIGlmIChzdXBlclR5cGUgPT09IHRoaXMpIHtcbiAgICAgIHN1cGVyVHlwZU9mVHlwZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzdXBlclR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgc3VwZXJUeXBlT2ZUeXBlID0gc3VwZXJUeXBlLmlzU3VwZXJUeXBlT2YodGhpcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyVHlwZU9mVHlwZTtcbiAgfVxuXG4gIGlzRXF1YWxUb09yU3ViVHlwZU9mKHR5cGUpIHtcbiAgICBjb25zdCBlcXVhbFRvVHlwZSA9IHRoaXMuaXNFcXVhbFRvKHR5cGUpLFxuICAgICAgICAgIHN1YlR5cGVPZlR5cGUgPSB0aGlzLmlzU3ViVHlwZU9mKHR5cGUpLFxuICAgICAgICAgIGVxdWFsVG9UeXBlT3JTdWJUeXBlT2YgPSAoZXF1YWxUb1R5cGUgfHwgc3ViVHlwZU9mVHlwZSk7XG5cbiAgICByZXR1cm4gZXF1YWxUb1R5cGVPclN1YlR5cGVPZjtcbiAgfVxuXG4gIGlzRXF1YWxUb09yU3VwZXJUeXBlT2YodHlwZSkge1xuICAgIGNvbnN0IGVxdWFsVG9UeXBlID0gdGhpcy5pc0VxdWFsVG8odHlwZSksXG4gICAgICAgICAgc3VwZXJUeXBlT2ZUeXBlID0gdGhpcy5pc1N1cGVyVHlwZU9mKHR5cGUpLFxuICAgICAgICAgIGVxdWFsVG9UeXBlT3JTdXBlclR5cGVPZiA9IChlcXVhbFRvVHlwZSB8fCBzdXBlclR5cGVPZlR5cGUpO1xuXG4gICAgcmV0dXJuIGVxdWFsVG9UeXBlT3JTdXBlclR5cGVPZjtcbiAgfVxuXG4gIGlzRXF1YWxUb1N1YlR5cGVPZk9yU3VwZXJUeXBlT2YodHlwZSkge1xuICAgIGNvbnN0IGVxdWFsVG9UeXBlID0gdGhpcy5pc0VxdWFsVG8odHlwZSksXG4gICAgICAgICAgc3ViVHlwZU9mVHlwZSA9IHRoaXMuaXNTdWJUeXBlT2YodHlwZSksXG4gICAgICAgICAgc3VwZXJUeXBlT2ZUeXBlID0gdGhpcy5pc1N1cGVyVHlwZU9mKHR5cGUpLFxuICAgICAgICAgIGVxdWFsVG9UeXBlU3ViVHlwZU9mT3JTdXBlclR5cGVPZiA9IChlcXVhbFRvVHlwZSB8fCBzdWJUeXBlT2ZUeXBlIHx8IHN1cGVyVHlwZU9mVHlwZSk7XG5cbiAgICByZXR1cm4gZXF1YWxUb1R5cGVTdWJUeXBlT2ZPclN1cGVyVHlwZU9mO1xuICB9XG5cbiAgbWF0Y2hOYW1lKG5hbWUpIHtcbiAgICBjb25zdCBtYXRjaGVzTmFtZSA9ICh0aGlzLm5hbWUgPT09IG5hbWUpO1xuXG4gICAgcmV0dXJuIG1hdGNoZXNOYW1lO1xuICB9XG5cbiAgbWF0Y2hUeXBlTmFtZSh0eXBlTmFtZSkge1xuICAgIGNvbnN0IG1hdGNoZXNUeXBlTmFtZSA9ICh0aGlzLm5hbWUgPT09IHR5cGVOYW1lKTtcblxuICAgIHJldHVybiBtYXRjaGVzVHlwZU5hbWU7XG4gIH1cblxuICBhc1N0cmluZyhub1N1cGVyVHlwZSA9ICh0aGlzLnN1cGVyVHlwZSA9PT0gbnVsbCkpIHtcbiAgICBsZXQgc3RyaW5nO1xuXG4gICAgaWYgKG5vU3VwZXJUeXBlKSB7XG4gICAgICBzdHJpbmcgPSBgJHt0aGlzLm5hbWV9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3VwZXJUeXBlTmFtZSA9IHRoaXMuc3VwZXJUeXBlLmdldE5hbWUoKTtcblxuICAgICAgc3RyaW5nID0gYCR7dGhpcy5uYW1lfToke3N1cGVyVHlwZU5hbWV9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IHN1cGVyVHlwZUpTT04gPSAodGhpcy5zdXBlclR5cGUgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VwZXJUeXBlLnRvSlNPTigpLFxuICAgICAgICAgIGtpbmQgPSBUWVBFX0tJTkQsXG4gICAgICAgICAgbmFtZSA9IHRoaXMubmFtZSxcbiAgICAgICAgICBzdXBlclR5cGUgPSBzdXBlclR5cGVKU09OLCAgLy8vXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIGtpbmQsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgc3VwZXJUeXBlXG4gICAgICAgICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24pIHtcbiAgICBjb25zdCB7IG5hbWUgfSA9IGpzb247XG5cbiAgICBsZXQgeyBzdXBlclR5cGUgfSA9IGpzb247XG5cbiAgICBpZiAoc3VwZXJUeXBlICE9PSBudWxsKSB7XG4gICAgICBqc29uID0gc3VwZXJUeXBlOyAvLy9cblxuICAgICAgc3VwZXJUeXBlID0gVHlwZS5mcm9tSlNPTihqc29uKTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlID0gbmV3IFR5cGUobmFtZSwgc3VwZXJUeXBlKTtcblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cblxuICBzdGF0aWMgZnJvbVR5cGVOYW1lKHR5cGVOYW1lKSB7XG4gICAgY29uc3QgbmFtZSA9IHR5cGVOYW1lLCAgLy8vXG4gICAgICAgICAgc3VwZXJUeXBlID0gbnVsbCxcbiAgICAgICAgICB0eXBlID0gbmV3IFR5cGUobmFtZSwgc3VwZXJUeXBlKTtcblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgc3RhdGljIGZyb21UeXBlTmFtZUFuZFN1cGVyVHlwZSh0eXBlTmFtZSwgc3VwZXJUeXBlKSB7XG4gICAgY29uc3QgbmFtZSA9IHR5cGVOYW1lLCAgLy8vXG4gICAgICAgICAgdHlwZSA9IG5ldyBUeXBlKG5hbWUsIHN1cGVyVHlwZSk7XG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxufVxuIiwiUmVhY3QuY3JlYXRlRWxlbWVudCJdLCJuYW1lcyI6WyJUeXBlIiwibmFtZSIsInN1cGVyVHlwZSIsImdldE5hbWUiLCJnZXRTdXBlclR5cGUiLCJpc0VxdWFsVG8iLCJ0eXBlIiwiZXF1YWxUb1R5cGUiLCJpc1N1YlR5cGVPZiIsInN1YlR5cGVPZlR5cGUiLCJpc1N1cGVyVHlwZU9mIiwic3VwZXJUeXBlT2ZUeXBlIiwiaXNFcXVhbFRvT3JTdWJUeXBlT2YiLCJlcXVhbFRvVHlwZU9yU3ViVHlwZU9mIiwiaXNFcXVhbFRvT3JTdXBlclR5cGVPZiIsImVxdWFsVG9UeXBlT3JTdXBlclR5cGVPZiIsImlzRXF1YWxUb1N1YlR5cGVPZk9yU3VwZXJUeXBlT2YiLCJlcXVhbFRvVHlwZVN1YlR5cGVPZk9yU3VwZXJUeXBlT2YiLCJtYXRjaE5hbWUiLCJtYXRjaGVzTmFtZSIsIm1hdGNoVHlwZU5hbWUiLCJ0eXBlTmFtZSIsIm1hdGNoZXNUeXBlTmFtZSIsImFzU3RyaW5nIiwibm9TdXBlclR5cGUiLCJzdHJpbmciLCJzdXBlclR5cGVOYW1lIiwidG9KU09OIiwic3VwZXJUeXBlSlNPTiIsImtpbmQiLCJUWVBFX0tJTkQiLCJqc29uIiwiZnJvbUpTT04iLCJmcm9tVHlwZU5hbWUiLCJmcm9tVHlwZU5hbWVBbmRTdXBlclR5cGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBSXFCQTs7O3FCQUZLOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVYLElBQUEsQUFBTUEscUJBQU47YUFBTUEsS0FDUEMsSUFBSSxFQUFFQyxTQUFTOzhCQURSRjtRQUVqQixJQUFJLENBQUNDLElBQUksR0FBR0E7UUFDWixJQUFJLENBQUNDLFNBQVMsR0FBR0E7O2lCQUhBRjs7WUFNbkJHLEtBQUFBO21CQUFBQSxTQUFBQSxVQUFVO2dCQUNSLE9BQU8sSUFBSSxDQUFDRixJQUFJO1lBQ2xCOzs7WUFFQUcsS0FBQUE7bUJBQUFBLFNBQUFBLGVBQWU7Z0JBQ2IsT0FBTyxJQUFJLENBQUNGLFNBQVM7WUFDdkI7OztZQUVBRyxLQUFBQTttQkFBQUEsU0FBQUEsVUFBVUMsSUFBSSxFQUFFO2dCQUNkLElBQU1DLGNBQWUsSUFBSSxLQUFLRDtnQkFFOUIsT0FBT0M7WUFDVDs7O1lBRUFDLEtBQUFBO21CQUFBQSxTQUFBQSxZQUFZRixJQUFJLEVBQUU7Z0JBQ2hCLElBQUlHLGdCQUFnQixLQUFLO2dCQUV6QixJQUFJLElBQUksQ0FBQ1AsU0FBUyxLQUFLSSxNQUFNO29CQUMzQkcsZ0JBQWdCLElBQUk7Z0JBQ3RCLE9BQU87b0JBQ0wsSUFBSSxJQUFJLENBQUNQLFNBQVMsS0FBSyxJQUFJLEVBQUU7d0JBQzNCTyxnQkFBZ0IsSUFBSSxDQUFDUCxTQUFTLENBQUNNLFdBQVcsQ0FBQ0Y7b0JBQzdDLENBQUM7Z0JBQ0gsQ0FBQztnQkFFRCxPQUFPRztZQUNUOzs7WUFFQUMsS0FBQUE7bUJBQUFBLFNBQUFBLGNBQWNKLElBQUksRUFBRTtnQkFDbEIsSUFBSUssa0JBQWtCLEtBQUs7Z0JBRTNCLElBQU1ULFlBQVlJLEtBQUtGLFlBQVk7Z0JBRW5DLElBQUlGLGNBQWMsSUFBSSxFQUFFO29CQUN0QlMsa0JBQWtCLElBQUk7Z0JBQ3hCLE9BQU87b0JBQ0wsSUFBSVQsY0FBYyxJQUFJLEVBQUU7d0JBQ3RCUyxrQkFBa0JULFVBQVVRLGFBQWEsQ0FBQyxJQUFJO29CQUNoRCxDQUFDO2dCQUNILENBQUM7Z0JBRUQsT0FBT0M7WUFDVDs7O1lBRUFDLEtBQUFBO21CQUFBQSxTQUFBQSxxQkFBcUJOLElBQUksRUFBRTtnQkFDekIsSUFBTUMsY0FBYyxJQUFJLENBQUNGLFNBQVMsQ0FBQ0MsT0FDN0JHLGdCQUFnQixJQUFJLENBQUNELFdBQVcsQ0FBQ0YsT0FDakNPLHlCQUEwQk4sZUFBZUU7Z0JBRS9DLE9BQU9JO1lBQ1Q7OztZQUVBQyxLQUFBQTttQkFBQUEsU0FBQUEsdUJBQXVCUixJQUFJLEVBQUU7Z0JBQzNCLElBQU1DLGNBQWMsSUFBSSxDQUFDRixTQUFTLENBQUNDLE9BQzdCSyxrQkFBa0IsSUFBSSxDQUFDRCxhQUFhLENBQUNKLE9BQ3JDUywyQkFBNEJSLGVBQWVJO2dCQUVqRCxPQUFPSTtZQUNUOzs7WUFFQUMsS0FBQUE7bUJBQUFBLFNBQUFBLGdDQUFnQ1YsSUFBSSxFQUFFO2dCQUNwQyxJQUFNQyxjQUFjLElBQUksQ0FBQ0YsU0FBUyxDQUFDQyxPQUM3QkcsZ0JBQWdCLElBQUksQ0FBQ0QsV0FBVyxDQUFDRixPQUNqQ0ssa0JBQWtCLElBQUksQ0FBQ0QsYUFBYSxDQUFDSixPQUNyQ1csb0NBQXFDVixlQUFlRSxpQkFBaUJFO2dCQUUzRSxPQUFPTTtZQUNUOzs7WUFFQUMsS0FBQUE7bUJBQUFBLFNBQUFBLFVBQVVqQixJQUFJLEVBQUU7Z0JBQ2QsSUFBTWtCLGNBQWUsSUFBSSxDQUFDbEIsSUFBSSxLQUFLQTtnQkFFbkMsT0FBT2tCO1lBQ1Q7OztZQUVBQyxLQUFBQTttQkFBQUEsU0FBQUEsY0FBY0MsUUFBUSxFQUFFO2dCQUN0QixJQUFNQyxrQkFBbUIsSUFBSSxDQUFDckIsSUFBSSxLQUFLb0I7Z0JBRXZDLE9BQU9DO1lBQ1Q7OztZQUVBQyxLQUFBQTttQkFBQUEsU0FBQUEsV0FBa0Q7b0JBQXpDQyxjQUFBQSxpRUFBZSxJQUFJLENBQUN0QixTQUFTLEtBQUssSUFBSSxBQUFDO2dCQUM5QyxJQUFJdUI7Z0JBRUosSUFBSUQsYUFBYTtvQkFDZkMsU0FBUyxBQUFDLEdBQVksT0FBVixJQUFJLENBQUN4QixJQUFJO2dCQUN2QixPQUFPO29CQUNMLElBQU15QixnQkFBZ0IsSUFBSSxDQUFDeEIsU0FBUyxDQUFDQyxPQUFPO29CQUU1Q3NCLFNBQVMsQUFBQyxHQUFlQyxPQUFiLElBQUksQ0FBQ3pCLElBQUksRUFBQyxLQUFpQixPQUFkeUI7Z0JBQzNCLENBQUM7Z0JBRUQsT0FBT0Q7WUFDVDs7O1lBRUFFLEtBQUFBO21CQUFBQSxTQUFBQSxTQUFTO2dCQUNQLElBQU1DLGdCQUFnQixBQUFDLElBQUksQ0FBQzFCLFNBQVMsS0FBSyxJQUFJLEdBQ3RCLElBQUksR0FDRixJQUFJLENBQUNBLFNBQVMsQ0FBQ3lCLE1BQU0sRUFBRSxFQUMzQ0UsT0FBT0MsZ0JBQVMsRUFDaEI3QixPQUFPLElBQUksQ0FBQ0EsSUFBSSxFQUNoQkMsWUFBWTBCLGVBQ1pHLE9BQU87b0JBQ0xGLE1BQUFBO29CQUNBNUIsTUFBQUE7b0JBQ0FDLFdBQUFBO2dCQUNGO2dCQUVOLE9BQU82QjtZQUNUOzs7O1lBRU9DLEtBQUFBO21CQUFQLFNBQU9BLFNBQVNELElBQUksRUFBRTtnQkFDcEIsSUFBTSxBQUFFOUIsT0FBUzhCLEtBQVQ5QjtnQkFFUixJQUFJLEFBQUVDLFlBQWM2QixLQUFkN0I7Z0JBRU4sSUFBSUEsY0FBYyxJQUFJLEVBQUU7b0JBQ3RCNkIsT0FBTzdCLFdBQVcsR0FBRztvQkFFckJBLFlBQVlGLEFBN0hHQSxLQTZIRWdDLFFBQVEsQ0FBQ0Q7Z0JBQzVCLENBQUM7Z0JBRUQsSUFBTXpCLE9BQU8sSUFoSUlOLEtBZ0lLQyxNQUFNQztnQkFFNUIsT0FBT0k7WUFDVDs7O1lBR08yQixLQUFBQTttQkFBUCxTQUFPQSxhQUFhWixRQUFRLEVBQUU7Z0JBQzVCLElBQU1wQixPQUFPb0IsVUFDUG5CLFlBQVksSUFBSSxFQUNoQkksT0FBTyxJQXpJSU4sS0F5SUtDLE1BQU1DO2dCQUU1QixPQUFPSTtZQUNUOzs7WUFFTzRCLEtBQUFBO21CQUFQLFNBQU9BLHlCQUF5QmIsUUFBUSxFQUFFbkIsU0FBUyxFQUFFO2dCQUNuRCxJQUFNRCxPQUFPb0IsVUFDUGYsT0FBTyxJQWhKSU4sS0FnSktDLE1BQU1DO2dCQUU1QixPQUFPSTtZQUNUOzs7V0FuSm1CTiJ9
|
package/package.json
CHANGED
package/src/axiom.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import Label from "./label";
|
|
4
|
+
|
|
3
5
|
import { AXIOM_KIND } from "./kinds";
|
|
4
6
|
import { nodeAsString } from "./utilities/string";
|
|
7
|
+
import { STATEMENT_RULE_NAME } from "occam-custom-grammars/lib/ruleNames";
|
|
5
8
|
|
|
6
9
|
export default class Axiom {
|
|
7
10
|
constructor(labels, statementNode, suppositionStatementNode, consequentStatementNode) {
|
|
@@ -41,28 +44,74 @@ export default class Axiom {
|
|
|
41
44
|
}
|
|
42
45
|
|
|
43
46
|
toJSON() {
|
|
44
|
-
const
|
|
47
|
+
const labelsJSON = this.labels.map((label) => {
|
|
48
|
+
const labelJSON = label.toJSON();
|
|
49
|
+
|
|
50
|
+
return labelJSON;
|
|
51
|
+
}),
|
|
52
|
+
statementString = nodeAsString(this.statementNode),
|
|
45
53
|
consequentStatementString = nodeAsString(this.consequentStatementNode),
|
|
46
54
|
suppositionStatementString = nodeAsString(this.suppositionStatementNode),
|
|
47
55
|
kind = AXIOM_KIND,
|
|
56
|
+
labels = labelsJSON, ///
|
|
48
57
|
statement = statementString, ///
|
|
49
58
|
consequent = consequentStatementString, ///
|
|
50
59
|
supposition = suppositionStatementString, ///
|
|
51
|
-
json =
|
|
52
|
-
|
|
60
|
+
json = {
|
|
61
|
+
kind,
|
|
62
|
+
labels,
|
|
63
|
+
statement,
|
|
64
|
+
consequent,
|
|
65
|
+
supposition
|
|
66
|
+
};
|
|
53
67
|
|
|
54
|
-
|
|
68
|
+
return json;
|
|
69
|
+
}
|
|
55
70
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
label,
|
|
59
|
-
statement,
|
|
60
|
-
consequent,
|
|
61
|
-
supposition
|
|
62
|
-
});
|
|
63
|
-
});
|
|
71
|
+
static fromJSON(json, callback) {
|
|
72
|
+
let { labels } = json;
|
|
64
73
|
|
|
65
|
-
|
|
74
|
+
const { statement, consequent, supposition } = json;
|
|
75
|
+
|
|
76
|
+
labels = labels.map((label) => {
|
|
77
|
+
const json = label; ///
|
|
78
|
+
|
|
79
|
+
label = Label.fromJSON(json);
|
|
80
|
+
|
|
81
|
+
return label;
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
let statementNode = null,
|
|
85
|
+
consequentNode = null,
|
|
86
|
+
suppositionNode = null;
|
|
87
|
+
|
|
88
|
+
if (statement !== null) {
|
|
89
|
+
const content = statement, ///
|
|
90
|
+
ruleName = STATEMENT_RULE_NAME,
|
|
91
|
+
node = callback(content, ruleName);
|
|
92
|
+
|
|
93
|
+
statementNode = node; ///
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
if (consequent !== null) {
|
|
97
|
+
const content = consequent, ///
|
|
98
|
+
ruleName = STATEMENT_RULE_NAME,
|
|
99
|
+
node = callback(content, ruleName);
|
|
100
|
+
|
|
101
|
+
consequentNode = node; ///
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (supposition !== null) {
|
|
105
|
+
const content = supposition, ///
|
|
106
|
+
ruleName = STATEMENT_RULE_NAME,
|
|
107
|
+
node = callback(content, ruleName);
|
|
108
|
+
|
|
109
|
+
suppositionNode = node; ///
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const axiom = new Axiom(labels, statementNode, consequentNode, suppositionNode);
|
|
113
|
+
|
|
114
|
+
return axiom;
|
|
66
115
|
}
|
|
67
116
|
|
|
68
117
|
static fromStatementNodeAndLabels(statementNode, labels) {
|
package/src/combinator.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { nodeAsString } from "./utilities/string";
|
|
4
4
|
import { COMBINATOR_KIND } from "./kinds";
|
|
5
|
+
import { STATEMENT_RULE_NAME } from "./ruleNames";
|
|
5
6
|
|
|
6
7
|
export default class Combinator {
|
|
7
8
|
constructor(statementNode) {
|
|
@@ -22,14 +23,25 @@ export default class Combinator {
|
|
|
22
23
|
const statementString = nodeAsString(this.statementNode),
|
|
23
24
|
kind = COMBINATOR_KIND,
|
|
24
25
|
statement = statementString, ///
|
|
25
|
-
json =
|
|
26
|
+
json = {
|
|
26
27
|
kind,
|
|
27
28
|
statement
|
|
28
|
-
}
|
|
29
|
+
};
|
|
29
30
|
|
|
30
31
|
return json;
|
|
31
32
|
}
|
|
32
33
|
|
|
34
|
+
static fromJSON(json, callback) {
|
|
35
|
+
const { statement } = json,
|
|
36
|
+
content = statement, ///
|
|
37
|
+
ruleName = STATEMENT_RULE_NAME,
|
|
38
|
+
node = callback(content, ruleName),
|
|
39
|
+
statementNode = node, ///
|
|
40
|
+
combinator = new Combinator(statementNode);
|
|
41
|
+
|
|
42
|
+
return combinator;
|
|
43
|
+
}
|
|
44
|
+
|
|
33
45
|
static fromStatementNode(statementNode) {
|
|
34
46
|
const combinator = new Combinator(statementNode);
|
|
35
47
|
|
package/src/conclusion.js
CHANGED
|
@@ -33,6 +33,17 @@ export default class Conclusion {
|
|
|
33
33
|
return json;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
+
static fromJSON(json, callback) {
|
|
37
|
+
const { metastatement } = json,
|
|
38
|
+
ruleName = METASTATEMENT_RULE_NAME,
|
|
39
|
+
content = metastatement, ///
|
|
40
|
+
node = callback(content, ruleName),
|
|
41
|
+
metastatementNode = node, ///
|
|
42
|
+
conclusion = new Conclusion(metastatementNode);
|
|
43
|
+
|
|
44
|
+
return conclusion;
|
|
45
|
+
}
|
|
46
|
+
|
|
36
47
|
static fromMetastatementNode(metastatementNode) {
|
|
37
48
|
const conclusion = new Conclusion(metastatementNode);
|
|
38
49
|
|
package/src/constructor.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import Type from "./type";
|
|
4
|
+
|
|
3
5
|
import { nodeAsString } from "./utilities/string";
|
|
6
|
+
import { TERM_RULE_NAME } from "./ruleNames";
|
|
4
7
|
import { CONSTRUCTOR_KIND } from "./kinds";
|
|
5
8
|
|
|
6
9
|
export default class Constructor {
|
|
@@ -42,15 +45,33 @@ export default class Constructor {
|
|
|
42
45
|
kind = CONSTRUCTOR_KIND,
|
|
43
46
|
term = termString, ///
|
|
44
47
|
type = typeJSON, ///
|
|
45
|
-
json =
|
|
48
|
+
json = {
|
|
46
49
|
kind,
|
|
47
50
|
term,
|
|
48
51
|
type
|
|
49
|
-
}
|
|
52
|
+
};
|
|
50
53
|
|
|
51
54
|
return json;
|
|
52
55
|
}
|
|
53
56
|
|
|
57
|
+
static fromJSON(json, callback) {
|
|
58
|
+
let { type } = json;
|
|
59
|
+
|
|
60
|
+
const { term } = json,
|
|
61
|
+
content = term, ///
|
|
62
|
+
ruleName = TERM_RULE_NAME,
|
|
63
|
+
node = callback(content, ruleName),
|
|
64
|
+
termNode = node; ///
|
|
65
|
+
|
|
66
|
+
json = type; ///
|
|
67
|
+
|
|
68
|
+
type = Type.fromJSON(json);
|
|
69
|
+
|
|
70
|
+
const constructor = new Constructor(termNode, type);
|
|
71
|
+
|
|
72
|
+
return constructor;
|
|
73
|
+
}
|
|
74
|
+
|
|
54
75
|
static fromTermNodeAndType(termNode, type) {
|
|
55
76
|
const constructor = new Constructor(termNode, type);
|
|
56
77
|
|
package/src/context/file.js
CHANGED
|
@@ -301,31 +301,31 @@ export default class FileContext {
|
|
|
301
301
|
this.rules.forEach((rule) => {
|
|
302
302
|
const ruleJSON = rule.toJSON();
|
|
303
303
|
|
|
304
|
-
push(
|
|
304
|
+
json.push(ruleJSON);
|
|
305
305
|
});
|
|
306
306
|
|
|
307
307
|
this.types.forEach((type) => {
|
|
308
308
|
const typeJSON = type.toJSON();
|
|
309
309
|
|
|
310
|
-
push(
|
|
310
|
+
json.push(typeJSON);
|
|
311
311
|
});
|
|
312
312
|
|
|
313
313
|
this.axioms.forEach((axiom) => {
|
|
314
314
|
const axiomJSON = axiom.toJSON();
|
|
315
315
|
|
|
316
|
-
push(
|
|
316
|
+
json.push(axiomJSON);
|
|
317
317
|
});
|
|
318
318
|
|
|
319
319
|
this.combinators.forEach((combinator) => {
|
|
320
320
|
const combinatorJSON = combinator.toJSON();
|
|
321
321
|
|
|
322
|
-
push(
|
|
322
|
+
json.push(combinatorJSON);
|
|
323
323
|
});
|
|
324
324
|
|
|
325
325
|
this.constructors.forEach((constructor) => {
|
|
326
326
|
const constructorJSON = constructor.toJSON();
|
|
327
327
|
|
|
328
|
-
push(
|
|
328
|
+
json.push(constructorJSON)
|
|
329
329
|
});
|
|
330
330
|
|
|
331
331
|
return json;
|
|
@@ -16,8 +16,8 @@ export default class DirectoryReleaseContext extends ReleaseContext {
|
|
|
16
16
|
return this.fileContexts;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
const
|
|
19
|
+
getTypes(releaseNames = []) {
|
|
20
|
+
const types = [],
|
|
21
21
|
releaseName = this.getReleaseName(),
|
|
22
22
|
releaseNamesIncludesReleaseName = releaseNames.includes(releaseName);
|
|
23
23
|
|
|
@@ -27,23 +27,23 @@ export default class DirectoryReleaseContext extends ReleaseContext {
|
|
|
27
27
|
const bubble = false;
|
|
28
28
|
|
|
29
29
|
this.fileContexts.forEach((fileContext) => {
|
|
30
|
-
const
|
|
30
|
+
const fileContextTypes = fileContext.getTypes(bubble);
|
|
31
31
|
|
|
32
|
-
push(
|
|
32
|
+
push(types, fileContextTypes);
|
|
33
33
|
});
|
|
34
34
|
|
|
35
35
|
this.releaseContexts.forEach((releaseContext) => {
|
|
36
|
-
const
|
|
36
|
+
const releaseContextTypes = releaseContext.getTypes(releaseNames);
|
|
37
37
|
|
|
38
|
-
push(
|
|
38
|
+
push(types, releaseContextTypes);
|
|
39
39
|
});
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
return
|
|
42
|
+
return types;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
const
|
|
45
|
+
getRules(releaseNames = []) {
|
|
46
|
+
const rules = [],
|
|
47
47
|
releaseName = this.getReleaseName(),
|
|
48
48
|
releaseNamesIncludesReleaseName = releaseNames.includes(releaseName);
|
|
49
49
|
|
|
@@ -53,19 +53,19 @@ export default class DirectoryReleaseContext extends ReleaseContext {
|
|
|
53
53
|
const bubble = false;
|
|
54
54
|
|
|
55
55
|
this.fileContexts.forEach((fileContext) => {
|
|
56
|
-
const
|
|
56
|
+
const fileContextRules = fileContext.getRules(bubble);
|
|
57
57
|
|
|
58
|
-
push(
|
|
58
|
+
push(rules, fileContextRules);
|
|
59
59
|
});
|
|
60
60
|
|
|
61
61
|
this.releaseContexts.forEach((releaseContext) => {
|
|
62
|
-
const
|
|
62
|
+
const releaseContextRules = releaseContext.getRules(releaseNames);
|
|
63
63
|
|
|
64
|
-
push(
|
|
64
|
+
push(rules, releaseContextRules);
|
|
65
65
|
});
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
return
|
|
68
|
+
return rules;
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
getAxioms(releaseNames = []) {
|
|
@@ -2,17 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
import ReleaseContext from "../../context/release";
|
|
4
4
|
|
|
5
|
+
import Rule from "../../rule";
|
|
6
|
+
import Type from "../../type";
|
|
7
|
+
import Axiom from "../../axiom";
|
|
8
|
+
import Combinator from "../../combinator";
|
|
9
|
+
import Constructor from "../../constructor";
|
|
10
|
+
|
|
5
11
|
import { push } from "../../utilities/array";
|
|
6
|
-
import {
|
|
12
|
+
import { customGrammarFromNameAndEntries } from "../../utilities/customGrammar";
|
|
13
|
+
import { RULE_KIND, TYPE_KIND, AXIOM_KIND, COMBINATOR_KIND, CONSTRUCTOR_KIND } from "../../kinds";
|
|
7
14
|
|
|
8
15
|
export default class FileReleaseContext extends ReleaseContext {
|
|
9
|
-
constructor(log, name, entries, callbacks, verified, customGrammar, florenceLexer, florenceParser, releaseContexts, contextJSON,
|
|
16
|
+
constructor(log, name, entries, callbacks, verified, customGrammar, florenceLexer, florenceParser, releaseContexts, contextJSON, types, rules, axioms, combinators, constructors) {
|
|
10
17
|
super(log, name, entries, callbacks, verified, customGrammar, florenceLexer, florenceParser, releaseContexts);
|
|
11
18
|
|
|
12
|
-
this.rules = rules;
|
|
13
19
|
this.types = types;
|
|
20
|
+
this.rules = rules;
|
|
14
21
|
this.axioms = axioms;
|
|
15
|
-
this.labels = labels;
|
|
16
22
|
this.combinators = combinators;
|
|
17
23
|
this.constructors = constructors;
|
|
18
24
|
this.contextJSON = contextJSON;
|
|
@@ -22,10 +28,10 @@ export default class FileReleaseContext extends ReleaseContext {
|
|
|
22
28
|
return this.contextJSON;
|
|
23
29
|
}
|
|
24
30
|
|
|
25
|
-
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
31
|
+
getTypes(releaseNames = []) {
|
|
32
|
+
const types = [
|
|
33
|
+
...this.types
|
|
34
|
+
],
|
|
29
35
|
releaseName = this.getReleaseName(),
|
|
30
36
|
releaseNamesIncludesReleaseName = releaseNames.includes(releaseName);
|
|
31
37
|
|
|
@@ -33,18 +39,18 @@ export default class FileReleaseContext extends ReleaseContext {
|
|
|
33
39
|
releaseNames.push(releaseName);
|
|
34
40
|
|
|
35
41
|
this.releaseContexts.forEach((releaseContext) => {
|
|
36
|
-
const
|
|
42
|
+
const releaseContextTypes = releaseContext.getTypes(releaseNames);
|
|
37
43
|
|
|
38
|
-
push(
|
|
44
|
+
push(types, releaseContextTypes);
|
|
39
45
|
});
|
|
40
46
|
}
|
|
41
47
|
|
|
42
|
-
return
|
|
48
|
+
return types;
|
|
43
49
|
}
|
|
44
50
|
|
|
45
|
-
|
|
46
|
-
const
|
|
47
|
-
...this.
|
|
51
|
+
getRules(releaseNames = []) {
|
|
52
|
+
const rules = [
|
|
53
|
+
...this.rules
|
|
48
54
|
],
|
|
49
55
|
releaseName = this.getReleaseName(),
|
|
50
56
|
releaseNamesIncludesReleaseName = releaseNames.includes(releaseName);
|
|
@@ -53,13 +59,13 @@ export default class FileReleaseContext extends ReleaseContext {
|
|
|
53
59
|
releaseNames.push(releaseName);
|
|
54
60
|
|
|
55
61
|
this.releaseContexts.forEach((releaseContext) => {
|
|
56
|
-
const
|
|
62
|
+
const releaseContextRules = releaseContext.getRules(releaseNames);
|
|
57
63
|
|
|
58
|
-
push(
|
|
64
|
+
push(rules, releaseContextRules);
|
|
59
65
|
});
|
|
60
66
|
}
|
|
61
67
|
|
|
62
|
-
return
|
|
68
|
+
return rules;
|
|
63
69
|
}
|
|
64
70
|
|
|
65
71
|
getAxioms(releaseNames = []) {
|
|
@@ -83,19 +89,29 @@ export default class FileReleaseContext extends ReleaseContext {
|
|
|
83
89
|
}
|
|
84
90
|
|
|
85
91
|
getLabels(releaseNames = []) {
|
|
86
|
-
const labels = [
|
|
87
|
-
...this.labels
|
|
88
|
-
],
|
|
92
|
+
const labels = [],
|
|
89
93
|
releaseName = this.getReleaseName(),
|
|
90
94
|
releaseNamesIncludesReleaseName = releaseNames.includes(releaseName);
|
|
91
95
|
|
|
96
|
+
this.rules.forEach((rule) => {
|
|
97
|
+
const ruleLabels = rule.getLabels();
|
|
98
|
+
|
|
99
|
+
push(labels, ruleLabels);
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
this.axioms.forEach((axiom) => {
|
|
103
|
+
const axiomLabels = axiom.getLabels();
|
|
104
|
+
|
|
105
|
+
push(labels, axiomLabels);
|
|
106
|
+
});
|
|
107
|
+
|
|
92
108
|
if (!releaseNamesIncludesReleaseName) {
|
|
93
109
|
releaseNames.push(releaseName);
|
|
94
110
|
|
|
95
111
|
this.releaseContexts.forEach((releaseContext) => {
|
|
96
|
-
const
|
|
112
|
+
const releaseContextAxioms = releaseContext.getAxioms(releaseNames);
|
|
97
113
|
|
|
98
|
-
push(labels,
|
|
114
|
+
push(labels, releaseContextAxioms);
|
|
99
115
|
});
|
|
100
116
|
}
|
|
101
117
|
|
|
@@ -145,7 +161,61 @@ export default class FileReleaseContext extends ReleaseContext {
|
|
|
145
161
|
initialise(dependencyReleaseContexts) {
|
|
146
162
|
super.initialise(dependencyReleaseContexts);
|
|
147
163
|
|
|
148
|
-
|
|
164
|
+
const ruleMap = this.florenceParser.getRuleMap(),
|
|
165
|
+
jsonArray = this.contextJSON, ///
|
|
166
|
+
callback = (content, ruleName) => {
|
|
167
|
+
const tokens = this.florenceLexer.tokenise(content),
|
|
168
|
+
rule = ruleMap[ruleName],
|
|
169
|
+
node = this.florenceParser.parse(tokens, rule);
|
|
170
|
+
|
|
171
|
+
return node;
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
jsonArray.forEach((json) => {
|
|
175
|
+
const { kind } = json;
|
|
176
|
+
|
|
177
|
+
switch (kind) {
|
|
178
|
+
case TYPE_KIND: {
|
|
179
|
+
const type = Type.fromJSON(json);
|
|
180
|
+
|
|
181
|
+
this.types.push(type);
|
|
182
|
+
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
case RULE_KIND: {
|
|
187
|
+
const rule = Rule.fromJSON(json, callback);
|
|
188
|
+
|
|
189
|
+
this.rules.push(rule);
|
|
190
|
+
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
case AXIOM_KIND: {
|
|
195
|
+
const axiom = Axiom.fromJSON(json, callback);
|
|
196
|
+
|
|
197
|
+
this.axioms.push(axiom);
|
|
198
|
+
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
case COMBINATOR_KIND: {
|
|
203
|
+
const combinator = Combinator.fromJSON(json, callback);
|
|
204
|
+
|
|
205
|
+
this.combinators.push(combinator);
|
|
206
|
+
|
|
207
|
+
break;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
case CONSTRUCTOR_KIND: {
|
|
211
|
+
const constructor = Constructor.fromJSON(json, callback);
|
|
212
|
+
|
|
213
|
+
this.constructors.push(constructor);
|
|
214
|
+
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
});
|
|
149
219
|
}
|
|
150
220
|
|
|
151
221
|
static fromLogNameEntriesCallbacksAndContextJSON(log, name, entries, callbacks, contextJSON) {
|
|
@@ -154,13 +224,12 @@ export default class FileReleaseContext extends ReleaseContext {
|
|
|
154
224
|
florenceLexer = null,
|
|
155
225
|
florenceParser = null,
|
|
156
226
|
releaseContexts = null,
|
|
157
|
-
rules = null,
|
|
158
227
|
types = null,
|
|
228
|
+
rules = null,
|
|
159
229
|
axioms = null,
|
|
160
|
-
labels = null,
|
|
161
230
|
combinators = null,
|
|
162
231
|
constructors = null,
|
|
163
|
-
releaseContext = new FileReleaseContext(log, name, entries, callbacks, verified, customGrammar, florenceLexer, florenceParser, releaseContexts, contextJSON,
|
|
232
|
+
releaseContext = new FileReleaseContext(log, name, entries, callbacks, verified, customGrammar, florenceLexer, florenceParser, releaseContexts, contextJSON, types, rules, axioms, combinators, constructors);
|
|
164
233
|
|
|
165
234
|
return releaseContext;
|
|
166
235
|
}
|
package/src/kinds.js
CHANGED
package/src/label.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { nodeAsString } from "./utilities/string";
|
|
4
|
+
import { TERM_RULE_NAME } from "./ruleNames";
|
|
4
5
|
import { labelNameFromLabelNode } from "./utilities/query";
|
|
5
6
|
|
|
6
7
|
export default class Label {
|
|
@@ -26,6 +27,22 @@ export default class Label {
|
|
|
26
27
|
return string;
|
|
27
28
|
}
|
|
28
29
|
|
|
30
|
+
toJSON() {
|
|
31
|
+
const string = nodeAsString(this.node),
|
|
32
|
+
json = string; ///
|
|
33
|
+
|
|
34
|
+
return json;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
static fromJSON(json, callback) {
|
|
38
|
+
const content = json, ///
|
|
39
|
+
ruleName = TERM_RULE_NAME,
|
|
40
|
+
node = callback(content, ruleName),
|
|
41
|
+
label = new Label(node);
|
|
42
|
+
|
|
43
|
+
return label;
|
|
44
|
+
}
|
|
45
|
+
|
|
29
46
|
static fromLabelNode(labelNode) {
|
|
30
47
|
const node = labelNode, ///
|
|
31
48
|
variable = new Label(node);
|
package/src/premise.js
CHANGED
|
@@ -70,6 +70,17 @@ export default class Premise {
|
|
|
70
70
|
return json;
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
+
static fromJSON(json, callback) {
|
|
74
|
+
const { metastatement } = json,
|
|
75
|
+
ruleName = METASTATEMENT_RULE_NAME,
|
|
76
|
+
content = metastatement, ///
|
|
77
|
+
node = callback(content, ruleName),
|
|
78
|
+
metastatementNode = node, ///
|
|
79
|
+
premise = new Premise(metastatementNode);
|
|
80
|
+
|
|
81
|
+
return premise;
|
|
82
|
+
}
|
|
83
|
+
|
|
73
84
|
static fromMetastatementNode(metastatementNode) {
|
|
74
85
|
const premise = new Premise(metastatementNode);
|
|
75
86
|
|