UNPKG

@wikipathways/cxml

Version:

Advanced schema-aware streaming XML parser

58 lines 7.01 kB
"use strict"; // 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=