UNPKG

@wikipathways/cxml

Version:

Advanced schema-aware streaming XML parser

55 lines 8.28 kB
"use strict"; // This file is part of cxml, copyright (c) 2016 BusFaster Ltd. // Released under the MIT license, see LICENSE. Object.defineProperty(exports, "__esModule", { value: true }); var NamespaceBase_1 = require("./NamespaceBase"); /** XML parser context, holding definitions of all imported namespaces. */ var ContextBase = /** @class */ (function () { function ContextBase(NamespaceType) { /** Next available numeric surrogate key for new namespaces. */ this.namespaceKeyNext = 0; /** List of namespaces indexed by a numeric surrogate key. */ this.namespaceList = []; /** Table of namespaces by name in URI format (URL or URN). */ this.namespaceNameTbl = {}; this.NamespaceType = NamespaceType; } /** Look up namespace by name. */ ContextBase.prototype.namespaceByName = function (name) { return (this.namespaceNameTbl[name]); }; /** Look up namespace by internal numeric surrogate key. */ ContextBase.prototype.namespaceById = function (id) { return (this.namespaceList[id]); }; /** Create or look up a namespace by name in URI (URL or URN) format. */ ContextBase.prototype.registerNamespace = function (name) { name = NamespaceBase_1.NamespaceBase.sanitize(name); var namespace = this.namespaceByName(name); if (!namespace) { // Create a new namespace. var id = this.namespaceKeyNext++; namespace = new this.NamespaceType(name, id, this); this.namespaceNameTbl[name] = namespace; this.namespaceList[id] = namespace; } return (namespace); }; /** Copy a namespace from another context. */ ContextBase.prototype.copyNamespace = function (other) { var namespace = this.namespaceList[other.id]; if (namespace) { if (namespace.name != other.name) throw (new Error('Duplicate namespace ID')); return (namespace); } if (this.namespaceByName(other.name)) throw (new Error('Duplicate namespace name')); namespace = new this.NamespaceType(other.name, other.id, this); namespace.initFrom(other); this.namespaceNameTbl[other.name] = namespace; this.namespaceList[other.id] = namespace; if (this.namespaceKeyNext <= other.id) this.namespaceKeyNext = other.id + 1; return (namespace); }; return ContextBase; }()); exports.ContextBase = ContextBase; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGV4dEJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMveG1sL0NvbnRleHRCYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrREFBK0Q7QUFDL0QsK0NBQStDOztBQUUvQyxpREFBOEM7QUFFOUMsMEVBQTBFO0FBRTFFO0lBQ0MscUJBQVksYUFBNEY7UUF1RHhHLCtEQUErRDtRQUN2RCxxQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFDN0IsNkRBQTZEO1FBQ25ELGtCQUFhLEdBQWdCLEVBQUUsQ0FBQztRQUMxQywrREFBK0Q7UUFDdkQscUJBQWdCLEdBQWtDLEVBQUUsQ0FBQztRQTNENUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7SUFDcEMsQ0FBQztJQUVELGlDQUFpQztJQUNqQyxxQ0FBZSxHQUFmLFVBQWdCLElBQVksSUFBSSxPQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXRFLDJEQUEyRDtJQUMzRCxtQ0FBYSxHQUFiLFVBQWMsRUFBVSxJQUFJLE9BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTdELHdFQUF3RTtJQUV4RSx1Q0FBaUIsR0FBakIsVUFBa0IsSUFBWTtRQUM3QixJQUFJLEdBQUcsNkJBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUzQyxJQUFHLENBQUMsU0FBUyxFQUFFO1lBQ2QsMEJBQTBCO1lBRTFCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2pDLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUVuRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDO1NBQ25DO1FBRUQsT0FBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRCw2Q0FBNkM7SUFFN0MsbUNBQWEsR0FBYixVQUFjLEtBQXlCO1FBQ3RDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTdDLElBQUcsU0FBUyxFQUFFO1lBQ2IsSUFBRyxTQUFTLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJO2dCQUFFLE1BQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7WUFDNUUsT0FBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ2xCO1FBRUQsSUFBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFBRSxNQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO1FBRWxGLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQy9ELFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7UUFDOUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDO1FBRXpDLElBQUcsSUFBSSxDQUFDLGdCQUFnQixJQUFJLEtBQUssQ0FBQyxFQUFFO1lBQUUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRTNFLE9BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBV0Ysa0JBQUM7QUFBRCxDQUFDLEFBOURELElBOERDO0FBOURZLGtDQUFXIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgY3htbCwgY29weXJpZ2h0IChjKSAyMDE2IEJ1c0Zhc3RlciBMdGQuXG4vLyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UsIHNlZSBMSUNFTlNFLlxuXG5pbXBvcnQge05hbWVzcGFjZUJhc2V9IGZyb20gJy4vTmFtZXNwYWNlQmFzZSc7XG5cbi8qKiBYTUwgcGFyc2VyIGNvbnRleHQsIGhvbGRpbmcgZGVmaW5pdGlvbnMgb2YgYWxsIGltcG9ydGVkIG5hbWVzcGFjZXMuICovXG5cbmV4cG9ydCBjbGFzcyBDb250ZXh0QmFzZTxOYW1lc3BhY2UgZXh0ZW5kcyBOYW1lc3BhY2VCYXNlPGFueT4+IHtcblx0Y29uc3RydWN0b3IoTmFtZXNwYWNlVHlwZTogeyBuZXcobmFtZTogc3RyaW5nLCBpZDogbnVtYmVyLCBjb250ZXh0OiBDb250ZXh0QmFzZTxOYW1lc3BhY2U+KTogTmFtZXNwYWNlIH0pIHtcblx0XHR0aGlzLk5hbWVzcGFjZVR5cGUgPSBOYW1lc3BhY2VUeXBlO1xuXHR9XG5cblx0LyoqIExvb2sgdXAgbmFtZXNwYWNlIGJ5IG5hbWUuICovXG5cdG5hbWVzcGFjZUJ5TmFtZShuYW1lOiBzdHJpbmcpIHsgcmV0dXJuKHRoaXMubmFtZXNwYWNlTmFtZVRibFtuYW1lXSk7IH1cblxuXHQvKiogTG9vayB1cCBuYW1lc3BhY2UgYnkgaW50ZXJuYWwgbnVtZXJpYyBzdXJyb2dhdGUga2V5LiAqL1xuXHRuYW1lc3BhY2VCeUlkKGlkOiBudW1iZXIpIHsgcmV0dXJuKHRoaXMubmFtZXNwYWNlTGlzdFtpZF0pOyB9XG5cblx0LyoqIENyZWF0ZSBvciBsb29rIHVwIGEgbmFtZXNwYWNlIGJ5IG5hbWUgaW4gVVJJIChVUkwgb3IgVVJOKSBmb3JtYXQuICovXG5cblx0cmVnaXN0ZXJOYW1lc3BhY2UobmFtZTogc3RyaW5nKSB7XG5cdFx0bmFtZSA9IE5hbWVzcGFjZUJhc2Uuc2FuaXRpemUobmFtZSk7XG5cdFx0dmFyIG5hbWVzcGFjZSA9IHRoaXMubmFtZXNwYWNlQnlOYW1lKG5hbWUpO1xuXG5cdFx0aWYoIW5hbWVzcGFjZSkge1xuXHRcdFx0Ly8gQ3JlYXRlIGEgbmV3IG5hbWVzcGFjZS5cblxuXHRcdFx0dmFyIGlkID0gdGhpcy5uYW1lc3BhY2VLZXlOZXh0Kys7XG5cdFx0XHRuYW1lc3BhY2UgPSBuZXcgdGhpcy5OYW1lc3BhY2VUeXBlKG5hbWUsIGlkLCB0aGlzKTtcblxuXHRcdFx0dGhpcy5uYW1lc3BhY2VOYW1lVGJsW25hbWVdID0gbmFtZXNwYWNlO1xuXHRcdFx0dGhpcy5uYW1lc3BhY2VMaXN0W2lkXSA9IG5hbWVzcGFjZTtcblx0XHR9XG5cblx0XHRyZXR1cm4obmFtZXNwYWNlKTtcblx0fVxuXG5cdC8qKiBDb3B5IGEgbmFtZXNwYWNlIGZyb20gYW5vdGhlciBjb250ZXh0LiAqL1xuXG5cdGNvcHlOYW1lc3BhY2Uob3RoZXI6IE5hbWVzcGFjZUJhc2U8YW55Pikge1xuXHRcdGxldCBuYW1lc3BhY2UgPSB0aGlzLm5hbWVzcGFjZUxpc3Rbb3RoZXIuaWRdO1xuXG5cdFx0aWYobmFtZXNwYWNlKSB7XG5cdFx0XHRpZihuYW1lc3BhY2UubmFtZSAhPSBvdGhlci5uYW1lKSB0aHJvdyhuZXcgRXJyb3IoJ0R1cGxpY2F0ZSBuYW1lc3BhY2UgSUQnKSk7XG5cdFx0XHRyZXR1cm4obmFtZXNwYWNlKTtcblx0XHR9XG5cblx0XHRpZih0aGlzLm5hbWVzcGFjZUJ5TmFtZShvdGhlci5uYW1lKSkgdGhyb3cobmV3IEVycm9yKCdEdXBsaWNhdGUgbmFtZXNwYWNlIG5hbWUnKSk7XG5cblx0XHRuYW1lc3BhY2UgPSBuZXcgdGhpcy5OYW1lc3BhY2VUeXBlKG90aGVyLm5hbWUsIG90aGVyLmlkLCB0aGlzKTtcblx0XHRuYW1lc3BhY2UuaW5pdEZyb20ob3RoZXIpO1xuXG5cdFx0dGhpcy5uYW1lc3BhY2VOYW1lVGJsW290aGVyLm5hbWVdID0gbmFtZXNwYWNlO1xuXHRcdHRoaXMubmFtZXNwYWNlTGlzdFtvdGhlci5pZF0gPSBuYW1lc3BhY2U7XG5cblx0XHRpZih0aGlzLm5hbWVzcGFjZUtleU5leHQgPD0gb3RoZXIuaWQpIHRoaXMubmFtZXNwYWNlS2V5TmV4dCA9IG90aGVyLmlkICsgMTtcblxuXHRcdHJldHVybihuYW1lc3BhY2UpO1xuXHR9XG5cblx0LyoqIENvbnN0cnVjdG9yIGZvciBuYW1lc3BhY2VzIGluIHRoaXMgY29udGV4dC4gKi9cblx0cHJpdmF0ZSBOYW1lc3BhY2VUeXBlOiB7IG5ldyhuYW1lOiBzdHJpbmcsIGlkOiBudW1iZXIsIGNvbnRleHQ6IENvbnRleHRCYXNlPE5hbWVzcGFjZT4pOiBOYW1lc3BhY2UgfTtcblxuXHQvKiogTmV4dCBhdmFpbGFibGUgbnVtZXJpYyBzdXJyb2dhdGUga2V5IGZvciBuZXcgbmFtZXNwYWNlcy4gKi9cblx0cHJpdmF0ZSBuYW1lc3BhY2VLZXlOZXh0ID0gMDtcblx0LyoqIExpc3Qgb2YgbmFtZXNwYWNlcyBpbmRleGVkIGJ5IGEgbnVtZXJpYyBzdXJyb2dhdGUga2V5LiAqL1xuXHRwcm90ZWN0ZWQgbmFtZXNwYWNlTGlzdDogTmFtZXNwYWNlW10gPSBbXTtcblx0LyoqIFRhYmxlIG9mIG5hbWVzcGFjZXMgYnkgbmFtZSBpbiBVUkkgZm9ybWF0IChVUkwgb3IgVVJOKS4gICovXG5cdHByaXZhdGUgbmFtZXNwYWNlTmFtZVRibDogeyBbbmFtZTogc3RyaW5nXTogTmFtZXNwYWNlIH0gPSB7fTtcbn1cbiJdfQ==