@wikipathways/cxml
Version:
Advanced schema-aware streaming XML parser
58 lines • 7.01 kB
JavaScript
;
// This file is part of cxml, copyright (c) 2015-2017 BusFaster Ltd.
// Released under the MIT license, see LICENSE.
Object.defineProperty(exports, "__esModule", { value: true });
/** Type and member dependency helper. Implements Kahn's topological sort. */
var Item = /** @class */ (function () {
function Item(kind, dependencyNum) {
/** Track dependents for Kahn's topological sort algorithm. */
this.dependentList = [];
this.dependencyNum = dependencyNum;
this.surrogateKey = kind.nextKey++;
}
Item.prototype.resolveDependency = function (specList) {
if (this.dependencyNum) {
this.setDependency(specList[this.dependencyNum]);
}
};
/** Set parent type or substituted member. */
Item.prototype.setDependency = function (dependency) {
this.dependency = dependency;
this.ready = false;
if (dependency.ready) {
// Entire namespace for substituted member is already fully defined,
// so the substituted member's dependentList won't get processed any more
// and we should process this member immediately.
this.tryInit();
}
else if (dependency != this)
dependency.dependentList.push(this);
};
Item.prototype.init = function () { };
/** Topological sort visitor. */
Item.prototype.tryInit = function () {
if (!this.ready) {
this.ready = true;
this.init();
}
for (var _i = 0, _a = this.dependentList; _i < _a.length; _i++) {
var dependent = _a[_i];
dependent.tryInit();
}
this.dependentList = [];
};
/** Create types and members based on JSON specifications. */
Item.initAll = function (pendingList) {
for (var _i = 0, pendingList_1 = pendingList; _i < pendingList_1.length; _i++) {
var spec = pendingList_1[_i];
// If the spec has a parent, it handles defining the child.
if (!spec.dependency || spec.dependency == spec) {
spec.tryInit();
}
}
};
Item.nextKey = 0;
return Item;
}());
exports.Item = Item;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSXRlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy94bWwvSXRlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsb0VBQW9FO0FBQ3BFLCtDQUErQzs7QUFVL0MsNkVBQTZFO0FBRTdFO0lBQ0MsY0FBWSxJQUFjLEVBQUUsYUFBc0I7UUErRGxELDhEQUE4RDtRQUN0RCxrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQS9EbEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDbkMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELGdDQUFpQixHQUFqQixVQUFrQixRQUFnQjtRQUNqQyxJQUFHLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7U0FDakQ7SUFDRixDQUFDO0lBRUQsNkNBQTZDO0lBRTdDLDRCQUFhLEdBQWIsVUFBYyxVQUFnQjtRQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixJQUFHLFVBQVUsQ0FBQyxLQUFLLEVBQUU7WUFDcEIsb0VBQW9FO1lBQ3BFLHlFQUF5RTtZQUN6RSxpREFBaUQ7WUFFakQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ2Y7YUFBTSxJQUFHLFVBQVUsSUFBSSxJQUFJO1lBQUUsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELG1CQUFJLEdBQUosY0FBUSxDQUFDO0lBRVQsZ0NBQWdDO0lBRWhDLHNCQUFPLEdBQVA7UUFDQyxJQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNmLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBRWxCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNaO1FBRUQsS0FBcUIsVUFBa0IsRUFBbEIsS0FBQSxJQUFJLENBQUMsYUFBYSxFQUFsQixjQUFrQixFQUFsQixJQUFrQixFQUFFO1lBQXJDLElBQUksU0FBUyxTQUFBO1lBQ2hCLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNwQjtRQUVELElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCw2REFBNkQ7SUFFdEQsWUFBTyxHQUFkLFVBQWUsV0FBbUI7UUFDakMsS0FBZ0IsVUFBVyxFQUFYLDJCQUFXLEVBQVgseUJBQVcsRUFBWCxJQUFXLEVBQUU7WUFBekIsSUFBSSxJQUFJLG9CQUFBO1lBQ1gsMkRBQTJEO1lBQzNELElBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFO2dCQUMvQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDZjtTQUNEO0lBQ0YsQ0FBQztJQUdNLFlBQU8sR0FBRyxDQUFDLENBQUM7SUFZcEIsV0FBQztDQUFBLEFBckVELElBcUVDO0FBckVZLG9CQUFJIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgY3htbCwgY29weXJpZ2h0IChjKSAyMDE1LTIwMTcgQnVzRmFzdGVyIEx0ZC5cbi8vIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSwgc2VlIExJQ0VOU0UuXG5cbmltcG9ydCB7VHlwZVNwZWN9IGZyb20gJy4vVHlwZVNwZWMnO1xuaW1wb3J0IHtNZW1iZXJTcGVjfSBmcm9tICcuL01lbWJlclNwZWMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEl0ZW1UeXBlIHtcblx0bmV3KC4uLmFyZ3M6IGFueVtdKTogSXRlbTtcblx0bmV4dEtleTogbnVtYmVyO1xufVxuXG4vKiogVHlwZSBhbmQgbWVtYmVyIGRlcGVuZGVuY3kgaGVscGVyLiBJbXBsZW1lbnRzIEthaG4ncyB0b3BvbG9naWNhbCBzb3J0LiAqL1xuXG5leHBvcnQgY2xhc3MgSXRlbSB7XG5cdGNvbnN0cnVjdG9yKGtpbmQ6IEl0ZW1UeXBlLCBkZXBlbmRlbmN5TnVtPzogbnVtYmVyKSB7XG5cdFx0dGhpcy5kZXBlbmRlbmN5TnVtID0gZGVwZW5kZW5jeU51bTtcblx0XHR0aGlzLnN1cnJvZ2F0ZUtleSA9IGtpbmQubmV4dEtleSsrO1xuXHR9XG5cblx0cmVzb2x2ZURlcGVuZGVuY3koc3BlY0xpc3Q6IEl0ZW1bXSkge1xuXHRcdGlmKHRoaXMuZGVwZW5kZW5jeU51bSkge1xuXHRcdFx0dGhpcy5zZXREZXBlbmRlbmN5KHNwZWNMaXN0W3RoaXMuZGVwZW5kZW5jeU51bV0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKiBTZXQgcGFyZW50IHR5cGUgb3Igc3Vic3RpdHV0ZWQgbWVtYmVyLiAqL1xuXG5cdHNldERlcGVuZGVuY3koZGVwZW5kZW5jeTogSXRlbSkge1xuXHRcdHRoaXMuZGVwZW5kZW5jeSA9IGRlcGVuZGVuY3k7XG5cdFx0dGhpcy5yZWFkeSA9IGZhbHNlO1xuXG5cdFx0aWYoZGVwZW5kZW5jeS5yZWFkeSkge1xuXHRcdFx0Ly8gRW50aXJlIG5hbWVzcGFjZSBmb3Igc3Vic3RpdHV0ZWQgbWVtYmVyIGlzIGFscmVhZHkgZnVsbHkgZGVmaW5lZCxcblx0XHRcdC8vIHNvIHRoZSBzdWJzdGl0dXRlZCBtZW1iZXIncyBkZXBlbmRlbnRMaXN0IHdvbid0IGdldCBwcm9jZXNzZWQgYW55IG1vcmVcblx0XHRcdC8vIGFuZCB3ZSBzaG91bGQgcHJvY2VzcyB0aGlzIG1lbWJlciBpbW1lZGlhdGVseS5cblxuXHRcdFx0dGhpcy50cnlJbml0KCk7XG5cdFx0fSBlbHNlIGlmKGRlcGVuZGVuY3kgIT0gdGhpcykgZGVwZW5kZW5jeS5kZXBlbmRlbnRMaXN0LnB1c2godGhpcyk7XG5cdH1cblxuXHRpbml0KCkge31cblxuXHQvKiogVG9wb2xvZ2ljYWwgc29ydCB2aXNpdG9yLiAqL1xuXG5cdHRyeUluaXQoKSB7XG5cdFx0aWYoIXRoaXMucmVhZHkpIHtcblx0XHRcdHRoaXMucmVhZHkgPSB0cnVlO1xuXG5cdFx0XHR0aGlzLmluaXQoKTtcblx0XHR9XG5cblx0XHRmb3IodmFyIGRlcGVuZGVudCBvZiB0aGlzLmRlcGVuZGVudExpc3QpIHtcblx0XHRcdGRlcGVuZGVudC50cnlJbml0KCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5kZXBlbmRlbnRMaXN0ID0gW107XG5cdH1cblxuXHQvKiogQ3JlYXRlIHR5cGVzIGFuZCBtZW1iZXJzIGJhc2VkIG9uIEpTT04gc3BlY2lmaWNhdGlvbnMuICovXG5cblx0c3RhdGljIGluaXRBbGwocGVuZGluZ0xpc3Q6IEl0ZW1bXSkge1xuXHRcdGZvcih2YXIgc3BlYyBvZiBwZW5kaW5nTGlzdCkge1xuXHRcdFx0Ly8gSWYgdGhlIHNwZWMgaGFzIGEgcGFyZW50LCBpdCBoYW5kbGVzIGRlZmluaW5nIHRoZSBjaGlsZC5cblx0XHRcdGlmKCFzcGVjLmRlcGVuZGVuY3kgfHwgc3BlYy5kZXBlbmRlbmN5ID09IHNwZWMpIHtcblx0XHRcdFx0c3BlYy50cnlJbml0KCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0c3Vycm9nYXRlS2V5OiBudW1iZXI7XG5cdHN0YXRpYyBuZXh0S2V5ID0gMDtcblxuXHQvKiogTnVtYmVyIG9mIHBhcmVudCB0eXBlIG9yIHN1YnN0aXR1dGVkIG1lbWJlci4gKi9cblx0ZGVwZW5kZW5jeU51bTogbnVtYmVyO1xuXHQvKiogUGFyZW50IHR5cGUgb3Igc3Vic3RpdHV0ZWQgbWVtYmVyLiAqL1xuXHRkZXBlbmRlbmN5OiBJdGVtO1xuXG5cdC8qKiBUcmFjayBkZXBlbmRlbnRzIGZvciBLYWhuJ3MgdG9wb2xvZ2ljYWwgc29ydCBhbGdvcml0aG0uICovXG5cdHByaXZhdGUgZGVwZW5kZW50TGlzdDogSXRlbVtdID0gW107XG5cblx0LyoqIFZpc2l0ZWQgZmxhZyBmb3IgdG9wb2xvZ2ljYWwgc29ydC4gKi9cblx0cmVhZHk6IGJvb2xlYW47XG59XG4iXX0=