@wikipathways/cxml
Version:
Advanced schema-aware streaming XML parser
120 lines • 14.8 kB
JavaScript
;
// This file is part of cxml, copyright (c) 2016 BusFaster Ltd.
// Released under the MIT license, see LICENSE.
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var Namespace_1 = require("./Namespace");
var TypeSpec_1 = require("./TypeSpec");
var MemberSpec_1 = require("./MemberSpec");
var Item_1 = require("../xml/Item");
var ContextBase_1 = require("./ContextBase");
/** XML parser context, holding definitions of all imported namespaces. */
var Context = /** @class */ (function (_super) {
__extends(Context, _super);
function Context() {
var _this = _super.call(this, Namespace_1.Namespace) || this;
/** List of pending namespaces (not yet registered or waiting for processing). */
_this.pendingNamespaceList = [];
/** Grows with pendingNamespaceList and shrinks when namespaces are registered.
* When zero, all pending namespaces have been registered and can be processed. */
_this.pendingNamespaceCount = 0;
_this.pendingTypeList = [];
_this.pendingMemberList = [];
_this.typeList = [];
return _this;
}
/** Mark a namespace as seen and add it to list of pending namespaces. */
Context.prototype.markNamespace = function (exportObj) {
this.pendingNamespaceList.push(exportObj);
++this.pendingNamespaceCount;
};
/** Parse types from schema in serialized JSON format. */
Context.prototype.registerTypes = function (namespace, exportTypeNameList, rawTypeSpecList) {
var exportTypeCount = exportTypeNameList.length;
var typeCount = rawTypeSpecList.length;
var typeName;
for (var typeNum = 0; typeNum < typeCount; ++typeNum) {
var rawSpec = rawTypeSpecList[typeNum];
if (typeNum > 0 && typeNum <= exportTypeCount) {
typeName = exportTypeNameList[typeNum - 1];
}
else
typeName = null;
var typeSpec = new TypeSpec_1.TypeSpec(typeName, namespace, rawSpec);
namespace.addType(typeSpec);
this.pendingTypeList.push(typeSpec);
this.typeList.push(typeSpec);
}
};
/** Parse members from schema in serialized JSON format. */
Context.prototype.registerMembers = function (namespace, rawMemberSpecList) {
for (var _i = 0, rawMemberSpecList_1 = rawMemberSpecList; _i < rawMemberSpecList_1.length; _i++) {
var rawSpec = rawMemberSpecList_1[_i];
var memberSpec = MemberSpec_1.MemberSpec.parseSpec(rawSpec, namespace);
namespace.addMember(memberSpec);
this.pendingMemberList.push(memberSpec);
}
};
/** Process namespaces seen so far. */
Context.prototype.process = function () {
// Start only when process has been called for all namespaces.
if (--this.pendingNamespaceCount > 0)
return;
// Link types to their parents.
for (var _i = 0, _a = this.pendingNamespaceList; _i < _a.length; _i++) {
var exportObject = _a[_i];
var namespace = exportObject._cxml[0];
namespace.link();
}
// Create classes for all types.
// This is effectively Kahn's algorithm for topological sort
// (the rest is in the TypeSpec class).
Item_1.Item.initAll(this.pendingTypeList);
Item_1.Item.initAll(this.pendingMemberList);
for (var _b = 0, _c = this.pendingTypeList; _b < _c.length; _b++) {
var typeSpec = _c[_b];
typeSpec.defineMembers();
}
this.pendingTypeList = [];
this.pendingMemberList = [];
for (var _d = 0, _e = this.pendingNamespaceList; _d < _e.length; _d++) {
var exportObject = _e[_d];
var namespace = exportObject._cxml[0];
namespace.exportTypes(exportObject);
namespace.exportDocument(exportObject);
}
this.pendingNamespaceList = [];
};
/** Remove temporary structures needed to define new handlers. */
Context.prototype.cleanPlaceholders = function (strict) {
for (var _i = 0, _a = this.namespaceList; _i < _a.length; _i++) {
var namespace = _a[_i];
namespace.importSpecList = null;
namespace.exportTypeNameList = null;
namespace.typeSpecList = null;
namespace.memberSpecList = null;
namespace.exportTypeTbl = null;
namespace.exportMemberTbl = null;
}
for (var _b = 0, _c = this.typeList; _b < _c.length; _b++) {
var typeSpec = _c[_b];
typeSpec.cleanPlaceholders(strict);
}
this.typeList = null;
};
return Context;
}(ContextBase_1.ContextBase));
exports.Context = Context;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy94bWwvQ29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0RBQStEO0FBQy9ELCtDQUErQzs7Ozs7Ozs7Ozs7Ozs7O0FBRS9DLHlDQUFxRDtBQUNyRCx1Q0FBaUQ7QUFDakQsMkNBQXVEO0FBQ3ZELG9DQUFpQztBQUNqQyw2Q0FBMEM7QUFFMUMsMEVBQTBFO0FBRTFFO0lBQTZCLDJCQUFzQjtJQUNsRDtRQUFBLFlBQ0Msa0JBQU0scUJBQVMsQ0FBQyxTQUNoQjtRQTBHRCxpRkFBaUY7UUFDekUsMEJBQW9CLEdBQW9CLEVBQUUsQ0FBQztRQUNuRDsyRkFDbUY7UUFDM0UsMkJBQXFCLEdBQUcsQ0FBQyxDQUFDO1FBRTFCLHFCQUFlLEdBQWUsRUFBRSxDQUFDO1FBQ2pDLHVCQUFpQixHQUFpQixFQUFFLENBQUM7UUFFckMsY0FBUSxHQUFlLEVBQUUsQ0FBQzs7SUFuSGxDLENBQUM7SUFFRCx5RUFBeUU7SUFFekUsK0JBQWEsR0FBYixVQUFjLFNBQXdCO1FBQ3JDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUMsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUM7SUFDOUIsQ0FBQztJQUVELHlEQUF5RDtJQUV6RCwrQkFBYSxHQUFiLFVBQ0MsU0FBb0IsRUFDcEIsa0JBQTRCLEVBQzVCLGVBQThCO1FBRTlCLElBQUksZUFBZSxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztRQUNoRCxJQUFJLFNBQVMsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLElBQUksUUFBZ0IsQ0FBQztRQUVyQixLQUFJLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxPQUFPLEdBQUcsU0FBUyxFQUFFLEVBQUUsT0FBTyxFQUFFO1lBQ3BELElBQUksT0FBTyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUV2QyxJQUFH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LElBQUksQ0FBQztZQUNwQyxTQUFTLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUM5QixTQUFTLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztZQUNoQyxTQUFTLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUMvQixTQUFTLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztTQUNqQztRQUVELEtBQW9CLFVBQWEsRUFBYixLQUFBLElBQUksQ0FBQyxRQUFRLEVBQWIsY0FBYSxFQUFiLElBQWEsRUFBRTtZQUEvQixJQUFJLFFBQVEsU0FBQTtZQUNmLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNuQztRQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFZRixjQUFDO0FBQUQsQ0FBQyxBQXZIRCxDQUE2Qix5QkFBVyxHQXVIdkM7QUF2SFksMEJBQU8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBjeG1sLCBjb3B5cmlnaHQgKGMpIDIwMTYgQnVzRmFzdGVyIEx0ZC5cbi8vIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSwgc2VlIExJQ0VOU0UuXG5cbmltcG9ydCB7TmFtZXNwYWNlLCBNb2R1bGVFeHBvcnRzfSBmcm9tICcuL05hbWVzcGFjZSc7XG5pbXBvcnQge1R5cGVTcGVjLCBSYXdUeXBlU3BlY30gZnJvbSAnLi9UeXBlU3BlYyc7XG5pbXBvcnQge01lbWJlclNwZWMsIFJhd01lbWJlclNwZWN9IGZyb20gJy4vTWVtYmVyU3BlYyc7XG5pbXBvcnQge0l0ZW19IGZyb20gJy4uL3htbC9JdGVtJztcbmltcG9ydCB7Q29udGV4dEJhc2V9IGZyb20gJy4vQ29udGV4dEJhc2UnO1xuXG4vKiogWE1MIHBhcnNlciBjb250ZXh0LCBob2xkaW5nIGRlZmluaXRpb25zIG9mIGFsbCBpbXBvcnRlZCBuYW1lc3BhY2VzLiAqL1xuXG5leHBvcnQgY2xhc3MgQ29udGV4dCBleHRlbmRzIENvbnRleHRCYXNlPE5hbWVzcGFjZT4ge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcihOYW1lc3BhY2UpO1xuXHR9XG5cblx0LyoqIE1hcmsgYSBuYW1lc3BhY2UgYXMgc2VlbiBhbmQgYWRkIGl0IHRvIGxpc3Qgb2YgcGVuZGluZyBuYW1lc3BhY2VzLiAqL1xuXG5cdG1hcmtOYW1lc3BhY2UoZXhwb3J0T2JqOiBNb2R1bGVFeHBvcnRzKSB7XG5cdFx0dGhpcy5wZW5kaW5nTmFtZXNwYWNlTGlzdC5wdXNoKGV4cG9ydE9iaik7XG5cdFx0Kyt0aGlzLnBlbmRpbmdOYW1lc3BhY2VDb3VudDtcblx0fVxuXG5cdC8qKiBQYXJzZSB0eXBlcyBmcm9tIHNjaGVtYSBpbiBzZXJpYWxpemVkIEpTT04gZm9ybWF0LiAqL1xuXG5cdHJlZ2lzdGVyVHlwZXMoXG5cdFx0bmFtZXNwYWNlOiBOYW1lc3BhY2UsXG5cdFx0ZXhwb3J0VHlwZU5hbWVMaXN0OiBzdHJpbmdbXSxcblx0XHRyYXdUeXBlU3BlY0xpc3Q6IFJhd1R5cGVTcGVjW11cblx0KSB7XG5cdFx0dmFyIGV4cG9ydFR5cGVDb3VudCA9IGV4cG9ydFR5cGVOYW1lTGlzdC5sZW5ndGg7XG5cdFx0dmFyIHR5cGVDb3VudCA9IHJhd1R5cGVTcGVjTGlzdC5sZW5ndGg7XG5cdFx0dmFyIHR5cGVOYW1lOiBzdHJpbmc7XG5cblx0XHRmb3IodmFyIHR5cGVOdW0gPSAwOyB0eXBlTnVtIDwgdHlwZUNvdW50OyArK3R5cGVOdW0pIHtcblx0XHRcdHZhciByYXdTcGVjID0gcmF3VHlwZVNwZWNMaXN0W3R5cGVOdW1dO1xuXG5cdFx0XHRpZih0eXBlTnVtID4gMCAmJiB0eXBlTnVtIDw9IGV4cG9ydFR5cGVDb3VudCkge1xuXHRcdFx0XHR0eXBlTmFtZSA9IGV4cG9ydFR5cGVOYW1lTGlzdFt0eXBlTnVtIC0gMV07XG5cdFx0XHR9IGVsc2UgdHlwZU5hbWUgPSBudWxsO1xuXG5cdFx0XHR2YXIgdHlwZVNwZWMgPSBuZXcgVHlwZVNwZWModHlwZU5hbWUsIG5hbWVzcGFjZSwgcmF3U3BlYyk7XG5cblx0XHRcdG5hbWVzcGFjZS5hZGRUeXBlKHR5cGVTcGVjKTtcblx0XHRcdHRoaXMucGVuZGluZ1R5cGVMaXN0LnB1c2godHlwZVNwZWMpO1xuXHRcdFx0dGhpcy50eXBlTGlzdC5wdXNoKHR5cGVTcGVjKTtcblx0XHR9XG5cdH1cblxuXHQvKiogUGFyc2UgbWVtYmVycyBmcm9tIHNjaGVtYSBpbiBzZXJpYWxpemVkIEpTT04gZm9ybWF0LiAqL1xuXG5cdHJlZ2lzdGVyTWVtYmVycyhcblx0XHRuYW1lc3BhY2U6IE5hbWVzcGFjZSxcblx0XHRyYXdNZW1iZXJTcGVjTGlzdDogUmF3TWVtYmVyU3BlY1tdXG5cdCkge1xuXHRcdGZvcih2YXIgcmF3U3BlYyBvZiByYXdNZW1iZXJTcGVjTGlzdCkge1xuXHRcdFx0dmFyIG1lbWJlclNwZWMgPSBNZW1iZXJTcGVjLnBhcnNlU3BlYyhyYXdTcGVjLCBuYW1lc3BhY2UpO1xuXG5cdFx0XHRuYW1lc3BhY2UuYWRkTWVtYmVyKG1lbWJlclNwZWMpO1xuXHRcdFx0dGhpcy5wZW5kaW5nTWVtYmVyTGlzdC5wdXNoKG1lbWJlclNwZWMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKiBQcm9jZXNzIG5hbWVzcGFjZXMgc2VlbiBzbyBmYXIuICovXG5cblx0cHJvY2VzcygpIHtcblx0XHQvLyBTdGFydCBvbmx5IHdoZW4gcHJvY2VzcyBoYXMgYmVlbiBjYWxsZWQgZm9yIGFsbCBuYW1lc3BhY2VzLlxuXG5cdFx0aWYoLS10aGlzLnBlbmRpbmdOYW1lc3BhY2VDb3VudCA+IDApIHJldHVybjtcblxuXHRcdC8vIExpbmsgdHlwZXMgdG8gdGhlaXIgcGFyZW50cy5cblxuXHRcdGZvcihsZXQgZXhwb3J0T2JqZWN0IG9mIHRoaXMucGVuZGluZ05hbWVzcGFjZUxpc3QpIHtcblx0XHRcdHZhciBuYW1lc3BhY2UgPSBleHBvcnRPYmplY3QuX2N4bWxbMF07XG5cdFx0XHRuYW1lc3BhY2UubGluaygpO1xuXHRcdH1cblxuXHRcdC8vIENyZWF0ZSBjbGFzc2VzIGZvciBhbGwgdHlwZXMuXG5cdFx0Ly8gVGhpcyBpcyBlZmZlY3RpdmVseSBLYWhuJ3MgYWxnb3JpdGhtIGZvciB0b3BvbG9naWNhbCBzb3J0XG5cdFx0Ly8gKHRoZSByZXN0IGlzIGluIHRoZSBUeXBlU3BlYyBjbGFzcykuXG5cblx0XHRJdGVtLmluaXRBbGwodGhpcy5wZW5kaW5nVHlwZUxpc3QpO1xuXHRcdEl0ZW0uaW5pdEFsbCh0aGlzLnBlbmRpbmdNZW1iZXJMaXN0KTtcblxuXHRcdGZvcih2YXIgdHlwZVNwZWMgb2YgdGhpcy5wZW5kaW5nVHlwZUxpc3QpIHtcblx0XHRcdHR5cGVTcGVjLmRlZmluZU1lbWJlcnMoKTtcblx0XHR9XG5cblx0XHR0aGlzLnBlbmRpbmdUeXBlTGlzdCA9IFtdO1xuXHRcdHRoaXMucGVuZGluZ01lbWJlckxpc3QgPSBbXTtcblxuXHRcdGZvcihsZXQgZXhwb3J0T2JqZWN0IG9mIHRoaXMucGVuZGluZ05hbWVzcGFjZUxpc3QpIHtcblx0XHRcdHZhciBuYW1lc3BhY2UgPSBleHBvcnRPYmplY3QuX2N4bWxbMF07XG5cblx0XHRcdG5hbWVzcGFjZS5leHBvcnRUeXBlcyhleHBvcnRPYmplY3QpO1xuXHRcdFx0bmFtZXNwYWNlLmV4cG9ydERvY3VtZW50KGV4cG9ydE9iamVjdCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5wZW5kaW5nTmFtZXNwYWNlTGlzdCA9IFtdO1xuXHR9XG5cblx0LyoqIFJlbW92ZSB0ZW1wb3Jhcnkgc3RydWN0dXJlcyBuZWVkZWQgdG8gZGVmaW5lIG5ldyBoYW5kbGVycy4gKi9cblxuXHRjbGVhblBsYWNlaG9sZGVycyhzdHJpY3Q/OiBib29sZWFuKSB7XG5cdFx0Zm9yKHZhciBuYW1lc3BhY2Ugb2YgdGhpcy5uYW1lc3BhY2VMaXN0KSB7XG5cdFx0XHRuYW1lc3BhY2UuaW1wb3J0U3BlY0xpc3QgPSBudWxsO1xuXHRcdFx0bmFtZXNwYWNlLmV4cG9ydFR5cGVOYW1lTGlzdCA9IG51bGw7XG5cdFx0XHRuYW1lc3BhY2UudHlwZVNwZWNMaXN0ID0gbnVsbDtcblx0XHRcdG5hbWVzcGFjZS5tZW1iZXJTcGVjTGlzdCA9IG51bGw7XG5cdFx0XHRuYW1lc3BhY2UuZXhwb3J0VHlwZVRibCA9IG51bGw7XG5cdFx0XHRuYW1lc3BhY2UuZXhwb3J0TWVtYmVyVGJsID0gbnVsbDtcblx0XHR9XG5cblx0XHRmb3IodmFyIHR5cGVTcGVjIG9mIHRoaXMudHlwZUxpc3QpIHtcblx0XHRcdHR5cGVTcGVjLmNsZWFuUGxhY2Vob2xkZXJzKHN0cmljdCk7XG5cdFx0fVxuXG5cdFx0dGhpcy50eXBlTGlzdCA9IG51bGw7XG5cdH1cblxuXHQvKiogTGlzdCBvZiBwZW5kaW5nIG5hbWVzcGFjZXMgKG5vdCB5ZXQgcmVnaXN0ZXJlZCBvciB3YWl0aW5nIGZvciBwcm9jZXNzaW5nKS4gKi9cblx0cHJpdmF0ZSBwZW5kaW5nTmFtZXNwYWNlTGlzdDogTW9kdWxlRXhwb3J0c1tdID0gW107XG5cdC8qKiBHcm93cyB3aXRoIHBlbmRpbmdOYW1lc3BhY2VMaXN0IGFuZCBzaHJpbmtzIHdoZW4gbmFtZXNwYWNlcyBhcmUgcmVnaXN0ZXJlZC5cblx0ICAqIFdoZW4gemVybywgYWxsIHBlbmRpbmcgbmFtZXNwYWNlcyBoYXZlIGJlZW4gcmVnaXN0ZXJlZCBhbmQgY2FuIGJlIHByb2Nlc3NlZC4gKi9cblx0cHJpdmF0ZSBwZW5kaW5nTmFtZXNwYWNlQ291bnQgPSAwO1xuXG5cdHByaXZhdGUgcGVuZGluZ1R5cGVMaXN0OiBUeXBlU3BlY1tdID0gW107XG5cdHByaXZhdGUgcGVuZGluZ01lbWJlckxpc3Q6IE1lbWJlclNwZWNbXSA9IFtdO1xuXG5cdHByaXZhdGUgdHlwZUxpc3Q6IFR5cGVTcGVjW10gPSBbXTtcbn1cbiJdfQ==