@wikipathways/cxml
Version:
Advanced schema-aware streaming XML parser
92 lines • 11.9 kB
JavaScript
"use strict";
// This file is part of cxml, copyright (c) 2015-2017 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 TypeSpec_1 = require("./TypeSpec");
var MemberRef_1 = require("./MemberRef");
var Item_1 = require("./Item");
/** Represents a child element or attribute. */
var MemberSpec = /** @class */ (function (_super) {
__extends(MemberSpec, _super);
function MemberSpec(name, dependencyNum) {
var _this = _super.call(this, MemberSpec, dependencyNum) || this;
_this.name = name;
return _this;
}
MemberSpec.parseSpec = function (spec, namespace) {
var parts = TypeSpec_1.parseName(spec[0]);
var member = new MemberSpec(parts.name, spec[3]);
member.safeName = parts.safeName;
member.namespace = namespace;
var typeNumList = spec[1];
var flags = spec[2];
member.isAbstract = !!(flags & 1 /* abstract */);
member.isSubstituted = member.isAbstract || !!(flags & 2 /* substituted */);
if (member.isSubstituted)
member.containingTypeList = [];
if (typeNumList.length == 1) {
member.typeNum = typeNumList[0];
}
else {
// TODO: What now? Make sure this is not reached.
// Different types shouldn't be joined with | in .d.ts, instead
// they should be converted to { TypeA: TypeA, TypeB: TypeB... }
console.error('Member with multiple types: ' + parts.name);
}
return (member);
};
MemberSpec.prototype.init = function () {
// Look up member type if available.
// Sometimes abstract elements have no type.
if (this.typeNum) {
var typeSpec = this.namespace.typeByNum(this.typeNum);
this.typeSpecList = [typeSpec];
this.rule = typeSpec.getType();
if (!this.rule)
this.setDependency(typeSpec);
}
if (this.isSubstituted) {
this.proxySpec = new TypeSpec_1.TypeSpec('', this.namespace, [0, 0, [], []]);
this.proxySpec.substituteList = [];
if (!this.isAbstract)
this.proxySpec.addSubstitute(this, this);
}
if (this.dependency && this.dependency instanceof MemberSpec) {
// Parent is actually the substitution group base element.
this.dependency.proxySpec.addSubstitute(this.dependency, this);
}
};
MemberSpec.prototype.getRef = function () {
return (new MemberRef_1.MemberRef(this, 0, 1));
};
MemberSpec.prototype.getProxy = function (TypeSpec) {
var proxy = this.proxySpec;
if (!proxy) {
proxy = new TypeSpec();
proxy.isProxy = true;
proxy.containingRef = this.getRef();
this.proxySpec = proxy;
this.namespace.addType(proxy);
if (!this.isAbstract) {
proxy.addChildSpec(this);
}
}
return (proxy);
};
return MemberSpec;
}(Item_1.Item));
exports.MemberSpec = MemberSpec;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVtYmVyU3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy94bWwvTWVtYmVyU3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsb0VBQW9FO0FBQ3BFLCtDQUErQzs7Ozs7Ozs7Ozs7Ozs7O0FBSS9DLHVDQUErQztBQUMvQyx5Q0FBc0M7QUFDdEMsK0JBQTRCO0FBVzVCLCtDQUErQztBQUUvQztJQUFnQyw4QkFBSTtJQUNuQyxvQkFBWSxJQUFZLEVBQUUsYUFBc0I7UUFBaEQsWUFDQyxrQkFBTSxVQUFVLEVBQUUsYUFBYSxDQUFDLFNBRWhDO1FBREEsS0FBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7O0lBQ2xCLENBQUM7SUFFTSxvQkFBUyxHQUFoQixVQUFpQixJQUFtQixFQUFFLFNBQTZCO1FBQ2xFLElBQUksS0FBSyxHQUFHLG9CQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFL0IsSUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRCxNQUFNLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFFakMsTUFBTSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDN0IsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVwQixNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssbUJBQXNCLENBQUMsQ0FBQztRQUNwRCxNQUFNLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxzQkFBeUIsQ0FBQyxDQUFDO1FBRS9FLElBQUcsTUFBTSxDQUFDLGFBQWE7WUFBRSxNQUFNLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1FBRXhELElBQUcsV0FBVyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7WUFDM0IsTUFBTSxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDaEM7YUFBTTtZQUNOLGlEQUFpRDtZQUNqRCwrREFBK0Q7WUFDL0QsZ0VBQWdFO1lBRWhFLE9BQU8sQ0FBQyxLQUFLLENBQUMsOEJBQThCLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzNEO1FBRUQsT0FBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRCx5QkFBSSxHQUFKO1FBQ0Msb0NBQW9DO1FBQ3BDLDRDQUE0QztRQUU1QyxJQUFHLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBRSxRQUFRLENBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUUvQixJQUFHLENBQUMsSUFBSSxDQUFDLElBQUk7Z0JBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUM1QztRQUVELElBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksbUJBQVEsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQWdCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztZQUNuQyxJQUFHLENBQUMsSUFBSSxDQUFDLFVBQVU7Z0JBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzlEO1FBRUQsSUFBRyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLFlBQVksVUFBVSxFQUFFO1lBQzVELDBEQUEwRDtZQUMxRCxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUMvRDtJQUNGLENBQUM7SUFFRCwyQkFBTSxHQUFOO1FBQ0MsT0FBTSxDQUFDLElBQUkscUJBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELDZCQUFRLEdBQVIsVUFBUyxRQUFhO1FBQ3JCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFnQixDQUFDO1FBRWxDLElBQUcsQ0FBQyxLQUFLLEVBQUU7WUFDVixLQUFLLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUV2QixLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNyQixLQUFLLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUVwQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU5QixJQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDcEIsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN6QjtTQUNEO1FBRUQsT0FBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQTZCRixpQkFBQztBQUFELENBQUMsQUE3R0QsQ0FBZ0MsV0FBSSxHQTZHbkM7QUE3R1ksZ0NBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBjeG1sLCBjb3B5cmlnaHQgKGMpIDIwMTUtMjAxNyBCdXNGYXN0ZXIgTHRkLlxuLy8gUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLCBzZWUgTElDRU5TRS5cblxuaW1wb3J0IHtOYW1lc3BhY2VCYXNlfSBmcm9tICcuL05hbWVzcGFjZUJhc2UnO1xuaW1wb3J0IHtSdWxlfSBmcm9tICcuLi9wYXJzZXIvUnVsZSc7XG5pbXBvcnQge1R5cGVTcGVjLCBwYXJzZU5hbWV9IGZyb20gJy4vVHlwZVNwZWMnO1xuaW1wb3J0IHtNZW1iZXJSZWZ9IGZyb20gJy4vTWVtYmVyUmVmJztcbmltcG9ydCB7SXRlbX0gZnJvbSAnLi9JdGVtJztcblxuLyoqIFR1cGxlOiBuYW1lLCB0eXBlIElEIGxpc3QsIGZsYWdzLCBzdWJzdGl0dXRlZCBtZW1iZXIgSUQgKi9cbmV4cG9ydCB0eXBlIFJhd01lbWJlclNwZWMgPSBbIHN0cmluZywgbnVtYmVyW10sIG51bWJlciwgbnVtYmVyIF07XG5cbmV4cG9ydCBjb25zdCBlbnVtIE1lbWJlckZsYWcge1xuXHRhYnN0cmFjdCA9IDEsXG5cdHN1YnN0aXR1dGVkID0gMixcblx0YW55ID0gNFxufVxuXG4vKiogUmVwcmVzZW50cyBhIGNoaWxkIGVsZW1lbnQgb3IgYXR0cmlidXRlLiAqL1xuXG5leHBvcnQgY2xhc3MgTWVtYmVyU3BlYyBleHRlbmRzIEl0ZW0ge1xuXHRjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIGRlcGVuZGVuY3lOdW0/OiBudW1iZXIpIHtcblx0XHRzdXBlcihNZW1iZXJTcGVjLCBkZXBlbmRlbmN5TnVtKTtcblx0XHR0aGlzLm5hbWUgPSBuYW1lO1xuXHR9XG5cblx0c3RhdGljIHBhcnNlU3BlYyhzcGVjOiBSYXdNZW1iZXJTcGVjLCBuYW1lc3BhY2U6IE5hbWVzcGFjZUJhc2U8YW55Pikge1xuXHRcdHZhciBwYXJ0cyA9IHBhcnNlTmFtZShzcGVjWzBdKTtcblxuXHRcdGNvbnN0IG1lbWJlciA9IG5ldyBNZW1iZXJTcGVjKHBhcnRzLm5hbWUsIHNwZWNbM10pO1xuXHRcdG1lbWJlci5zYWZlTmFtZSA9IHBhcnRzLnNhZmVOYW1lO1xuXG5cdFx0bWVtYmVyLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcblx0XHR2YXIgdHlwZU51bUxpc3QgPSBzcGVjWzFdO1xuXHRcdHZhciBmbGFncyA9IHNwZWNbMl07XG5cblx0XHRtZW1iZXIuaXNBYnN0cmFjdCA9ICEhKGZsYWdzICYgTWVtYmVyRmxhZy5hYnN0cmFjdCk7XG5cdFx0bWVtYmVyLmlzU3Vic3RpdHV0ZWQgPSBtZW1iZXIuaXNBYnN0cmFjdCB8fCAhIShmbGFncyAmIE1lbWJlckZsYWcuc3Vic3RpdHV0ZWQpO1xuXG5cdFx0aWYobWVtYmVyLmlzU3Vic3RpdHV0ZWQpIG1lbWJlci5jb250YWluaW5nVHlwZUxpc3QgPSBbXTtcblxuXHRcdGlmKHR5cGVOdW1MaXN0Lmxlbmd0aCA9PSAxKSB7XG5cdFx0XHRtZW1iZXIudHlwZU51bSA9IHR5cGVOdW1MaXN0WzBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBUT0RPOiBXaGF0IG5vdz8gTWFrZSBzdXJlIHRoaXMgaXMgbm90IHJlYWNoZWQuXG5cdFx0XHQvLyBEaWZmZXJlbnQgdHlwZXMgc2hvdWxkbid0IGJlIGpvaW5lZCB3aXRoIHwgaW4gLmQudHMsIGluc3RlYWRcblx0XHRcdC8vIHRoZXkgc2hvdWxkIGJlIGNvbnZlcnRlZCB0byB7IFR5cGVBOiBUeXBlQSwgVHlwZUI6IFR5cGVCLi4uIH1cblxuXHRcdFx0Y29uc29sZS5lcnJvcignTWVtYmVyIHdpdGggbXVsdGlwbGUgdHlwZXM6ICcgKyBwYXJ0cy5uYW1lKTtcblx0XHR9XG5cblx0XHRyZXR1cm4obWVtYmVyKTtcblx0fVxuXG5cdGluaXQoKSB7XG5cdFx0Ly8gTG9vayB1cCBtZW1iZXIgdHlwZSBpZiBhdmFpbGFibGUuXG5cdFx0Ly8gU29tZXRpbWVzIGFic3RyYWN0IGVsZW1lbnRzIGhhdmUgbm8gdHlwZS5cblxuXHRcdGlmKHRoaXMudHlwZU51bSkge1xuXHRcdFx0Y29uc3QgdHlwZVNwZWMgPSB0aGlzLm5hbWVzcGFjZS50eXBlQnlOdW0odGhpcy50eXBlTnVtKTtcblx0XHRcdHRoaXMudHlwZVNwZWNMaXN0ID0gWyB0eXBlU3BlYyBdO1xuXHRcdFx0dGhpcy5ydWxlID0gdHlwZVNwZWMuZ2V0VHlwZSgpO1xuXG5cdFx0XHRpZighdGhpcy5ydWxlKSB0aGlzLnNldERlcGVuZGVuY3kodHlwZVNwZWMpO1xuXHRcdH1cblxuXHRcdGlmKHRoaXMuaXNTdWJzdGl0dXRlZCkge1xuXHRcdFx0dGhpcy5wcm94eVNwZWMgPSBuZXcgVHlwZVNwZWMoJycsIHRoaXMubmFtZXNwYWNlIGFzIGFueSwgWzAsIDAsIFtdLCBbXV0pO1xuXHRcdFx0dGhpcy5wcm94eVNwZWMuc3Vic3RpdHV0ZUxpc3QgPSBbXTtcblx0XHRcdGlmKCF0aGlzLmlzQWJzdHJhY3QpIHRoaXMucHJveHlTcGVjLmFkZFN1YnN0aXR1dGUodGhpcywgdGhpcyk7XG5cdFx0fVxuXG5cdFx0aWYodGhpcy5kZXBlbmRlbmN5ICYmIHRoaXMuZGVwZW5kZW5jeSBpbnN0YW5jZW9mIE1lbWJlclNwZWMpIHtcblx0XHRcdC8vIFBhcmVudCBpcyBhY3R1YWxseSB0aGUgc3Vic3RpdHV0aW9uIGdyb3VwIGJhc2UgZWxlbWVudC5cblx0XHRcdHRoaXMuZGVwZW5kZW5jeS5wcm94eVNwZWMuYWRkU3Vic3RpdHV0ZSh0aGlzLmRlcGVuZGVuY3ksIHRoaXMpO1xuXHRcdH1cblx0fVxuXG5cdGdldFJlZigpIHtcblx0XHRyZXR1cm4obmV3IE1lbWJlclJlZih0aGlzLCAwLCAxKSk7XG5cdH1cblxuXHRnZXRQcm94eShUeXBlU3BlYzogYW55KSB7XG5cdFx0bGV0IHByb3h5ID0gdGhpcy5wcm94eVNwZWMgYXMgYW55O1xuXG5cdFx0aWYoIXByb3h5KSB7XG5cdFx0XHRwcm94eSA9IG5ldyBUeXBlU3BlYygpO1xuXG5cdFx0XHRwcm94eS5pc1Byb3h5ID0gdHJ1ZTtcblx0XHRcdHByb3h5LmNvbnRhaW5pbmdSZWYgPSB0aGlzLmdldFJlZigpO1xuXG5cdFx0XHR0aGlzLnByb3h5U3BlYyA9IHByb3h5O1xuXHRcdFx0dGhpcy5uYW1lc3BhY2UuYWRkVHlwZShwcm94eSk7XG5cblx0XHRcdGlmKCF0aGlzLmlzQWJzdHJhY3QpIHtcblx0XHRcdFx0cHJveHkuYWRkQ2hpbGRTcGVjKHRoaXMpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybihwcm94eSk7XG5cdH1cblxuXHRuYW1lOiBzdHJpbmc7XG5cdG5hbWVzcGFjZTogTmFtZXNwYWNlQmFzZTxhbnk+O1xuXHRzYWZlTmFtZTogc3RyaW5nO1xuXG5cdGlzQWJzdHJhY3Q6IGJvb2xlYW47XG5cdGlzU3Vic3RpdHV0ZWQ6IGJvb2xlYW47XG5cblx0dHlwZU51bTogbnVtYmVyO1xuXHR0eXBlU3BlY0xpc3Q6IFR5cGVTcGVjW107XG5cdHJ1bGU6IFJ1bGU7XG5cblx0c3Vic3RpdHV0ZXM6IE1lbWJlclNwZWM7XG5cblx0LyoqIFN1YnN0aXR1dGlvbiBncm91cCB2aXJ0dWFsIHR5cGUsXG5cdCAgKiBjb250YWluaW5nIGFsbCBwb3NzaWJsZSBzdWJzdGl0dXRlcyBhcyBjaGlsZHJlbi4gKi9cblx0cHJveHlTcGVjOiBUeXBlU3BlYztcblxuXHQvKiogQWxsIHR5cGVzIGNvbnRhaW5pbmcgdGhpcyBtZW1iZXIsIHRvIGJlIG1vZGlmaWVkIGlmIG1vcmUgc3Vic3RpdHV0aW9uc1xuXHQgICogZm9yIHRoaXMgbWVtYmVyIGFyZSBkZWNsYXJlZCBsYXRlci4gKi9cblx0Y29udGFpbmluZ1R5cGVMaXN0OiB7XG5cdFx0dHlwZTogVHlwZVNwZWMsXG5cdFx0aGVhZDogTWVtYmVyUmVmLFxuXHRcdHByb3h5OiBNZW1iZXJSZWZcblx0fVtdO1xuXG5cdGNvbW1lbnQ6IHN0cmluZztcblx0aXNFeHBvcnRlZDogYm9vbGVhbjtcbn1cbiJdfQ==