UNPKG

@wikipathways/cxml

Version:

Advanced schema-aware streaming XML parser

92 lines 11.9 kB
"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==