UNPKG

@wikipathways/cxml

Version:

Advanced schema-aware streaming XML parser

51 lines 7.89 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); /* this worked: ./node_modules/pegjs/bin/pegjs src/spinoffs/xpathParser.pegjs && tsc --allowJs src/spinoffs/xpath.ts --outDir ./ && node xpath.js //*/ var XPathParser = require("./XPathParser"); //import * as XPathParser from './XPathParser'; //import XPathParser = require('./XPathParser'); var lodash_1 = require("lodash"); function parse(xpath, xpathNamespaceTbl) { return lodash_1.map(lodash_1.map(XPathParser.parse(xpath, {}), function (part) { return lodash_1.fromPairs(lodash_1.zip(["axis", "namespace", "name", "predicates", "attribute"], part)); } // TODO we want this to be of type ItemParsedPredicateRaw ), function (x) { var predicates = x.predicates; var parsedPredicates; if (predicates !== null) { var strippedPredicates = predicates.slice(1).slice(0, -1); parsedPredicates = lodash_1.map(strippedPredicates, function (predicate) { return { left: predicate[0][1], op: predicate[1], right: predicate[2] }; }); } var namespacePrefix = x.namespace; if (!!namespacePrefix && (!xpathNamespaceTbl || !xpathNamespaceTbl.hasOwnProperty(namespacePrefix))) { throw new Error("Must specify namespace table for prefix: " + namespacePrefix); } return { axis: x.axis, // NOTE: XPathParser uses "namespace" to refer to the namespace prefix. // We are using "namespace" to refer to the namespace name (URI). namespace: !!namespacePrefix ? xpathNamespaceTbl[namespacePrefix] : "", name: x.name, predicates: parsedPredicates, attribute: x.attribute }; }); } exports.parse = parse; //console.log(parse('/Pathway')); //console.log(parse('/Pathway/DataNode/@*')); //console.log(parse('/Pathway/DataNode/@Height')); //console.log(JSON.stringify(parse('/Pathway/DataNode[@Width=35]/@Height'), null, ' ')); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHBhdGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3Bpbm9mZnMveHBhdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7O0lBR0k7QUFDSixJQUFJLFdBQVcsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDM0MsK0NBQStDO0FBQy9DLGdEQUFnRDtBQUNoRCxpQ0FBcUQ7QUF5QnJELFNBQWdCLEtBQUssQ0FDbkIsS0FBYSxFQUNiLGlCQUF5QztJQUV6QyxPQUFPLFlBQUcsQ0FDUixZQUFHLENBQ0QsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQzVCLFVBQUMsSUFBb0Q7UUFDbkQsT0FBQSxrQkFBUyxDQUNQLFlBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FDN0M7SUFGeEIsQ0FFd0I7SUFDMUIseURBQXlEO0tBQzFELEVBQ0QsVUFBUyxDQUF5QjtRQUNoQyxJQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDO1FBQ2hDLElBQUksZ0JBQWdCLENBQUM7UUFDckIsSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFO1lBQ3ZCLElBQU0sa0JBQWtCLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUQsZ0JBQWdCLEdBQUcsWUFBRyxDQUFDLGtCQUFrQixFQUFFLFVBQVMsU0FBUztnQkFDM0QsT0FBTztvQkFDTCxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDckIsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQ2hCLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO2lCQUNwQixDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELElBQU0sZUFBZSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDcEMsSUFDRSxDQUFDLENBQUMsZUFBZTtZQUNqQixDQUFDLENBQUMsaUJBQWlCO2dCQUNqQixDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUNyRDtZQUNBLE1BQU0sSUFBSSxLQUFLLENBQ2IsOENBQTRDLGVBQWlCLENBQzlELENBQUM7U0FDSDtRQUVELE9BQU87WUFDTCxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7WUFDWix1RUFBdUU7WUFDdkUsaUVBQWlFO1lBQ2pFLFNBQVMsRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN0RSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7WUFDWixVQUFVLEVBQUUsZ0JBQWdCO1lBQzVCLFNBQVMsRUFBRSxDQUFDLENBQUMsU0FBUztTQUN2QixDQUFDO0lBQ0osQ0FBQyxDQUNGLENBQUM7QUFDSixDQUFDO0FBakRELHNCQWlEQztBQUVELGlDQUFpQztBQUNqQyw2Q0FBNkM7QUFDN0Msa0RBQWtEO0FBQ2xELHlGQUF5RiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG50aGlzIHdvcmtlZDpcbi4vbm9kZV9tb2R1bGVzL3BlZ2pzL2Jpbi9wZWdqcyBzcmMvc3Bpbm9mZnMveHBhdGhQYXJzZXIucGVnanMgJiYgdHNjIC0tYWxsb3dKcyBzcmMvc3Bpbm9mZnMveHBhdGgudHMgLS1vdXREaXIgLi8gJiYgbm9kZSB4cGF0aC5qcyBcbi8vKi9cbnZhciBYUGF0aFBhcnNlciA9IHJlcXVpcmUoXCIuL1hQYXRoUGFyc2VyXCIpO1xuLy9pbXBvcnQgKiBhcyBYUGF0aFBhcnNlciBmcm9tICcuL1hQYXRoUGFyc2VyJztcbi8vaW1wb3J0IFhQYXRoUGFyc2VyID0gcmVxdWlyZSgnLi9YUGF0aFBhcnNlcicpO1xuaW1wb3J0IHsgYXNzaWduLCBmcm9tUGFpcnMsIG1hcCwgemlwIH0gZnJvbSBcImxvZGFzaFwiO1xuXG5leHBvcnQgdHlwZSBOdWxsT3JTdHJpbmcgPSBudWxsIHwgc3RyaW5nO1xuZXhwb3J0IHR5cGUgT3BzID0gXCI9XCIgfCBcIiE9XCIgfCBcIiZsdDtcIiB8IFwiJmx0Oz1cIiB8IFwiJmd0O1wiIHwgXCI+XCIgfCBcIiZndDs9XCIgfCBcIj49XCI7XG5leHBvcnQgdHlwZSBQcmVkaWNhdGVSYXcgPSBudWxsIHwgW3N0cmluZ1tdLCBPcHMsIHN0cmluZ107XG5leHBvcnQgdHlwZSBQcmVkaWNhdGVQYXJzZWQgPSBudWxsIHwge1xuICBsZWZ0OiBzdHJpbmc7XG4gIG9wOiBPcHM7XG4gIHJpZ2h0OiBzdHJpbmc7XG59O1xuZXhwb3J0IGludGVyZmFjZSBJdGVtQ29tbW9uIHtcbiAgYXhpczogc3RyaW5nO1xuICBuYW1lc3BhY2U6IHN0cmluZztcbiAgbmFtZTogTnVsbE9yU3RyaW5nO1xuICBhdHRyaWJ1dGU6IE51bGxPclN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJdGVtUGFyc2VkUHJlZGljYXRlUmF3IGV4dGVuZHMgSXRlbUNvbW1vbiB7XG4gIHByZWRpY2F0ZXM6IFByZWRpY2F0ZVJhd1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEl0ZW1QYXJzZWQgZXh0ZW5kcyBJdGVtQ29tbW9uIHtcbiAgcHJlZGljYXRlczogUHJlZGljYXRlUGFyc2VkW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZShcbiAgeHBhdGg6IHN0cmluZyxcbiAgeHBhdGhOYW1lc3BhY2VUYmw6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbik6IEl0ZW1QYXJzZWRbXSB7XG4gIHJldHVybiBtYXAoXG4gICAgbWFwKFxuICAgICAgWFBhdGhQYXJzZXIucGFyc2UoeHBhdGgsIHt9KSxcbiAgICAgIChwYXJ0OiBbc3RyaW5nLCBzdHJpbmcsIHN0cmluZywgUHJlZGljYXRlUmF3LCBzdHJpbmddKSA9PlxuICAgICAgICBmcm9tUGFpcnMoXG4gICAgICAgICAgemlwKFtcImF4aXNcIiwgXCJuYW1lc3BhY2VcIiwgXCJuYW1lXCIsIFwicHJlZGljYXRlc1wiLCBcImF0dHJpYnV0ZVwiXSwgcGFydClcbiAgICAgICAgKSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICAgICAvLyBUT0RPIHdlIHdhbnQgdGhpcyB0byBiZSBvZiB0eXBlIEl0ZW1QYXJzZWRQcmVkaWNhdGVSYXdcbiAgICApLFxuICAgIGZ1bmN0aW9uKHg6IEl0ZW1QYXJzZWRQcmVkaWNhdGVSYXcpIHtcbiAgICAgIGNvbnN0IHByZWRpY2F0ZXMgPSB4LnByZWRpY2F0ZXM7XG4gICAgICBsZXQgcGFyc2VkUHJlZGljYXRlcztcbiAgICAgIGlmIChwcmVkaWNhdGVzICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHN0cmlwcGVkUHJlZGljYXRlcyA9IHByZWRpY2F0ZXMuc2xpY2UoMSkuc2xpY2UoMCwgLTEpO1xuICAgICAgICBwYXJzZWRQcmVkaWNhdGVzID0gbWFwKHN0cmlwcGVkUHJlZGljYXRlcywgZnVuY3Rpb24ocHJlZGljYXRlKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxlZnQ6IHByZWRpY2F0ZVswXVsxXSxcbiAgICAgICAgICAgIG9wOiBwcmVkaWNhdGVbMV0sXG4gICAgICAgICAgICByaWdodDogcHJlZGljYXRlWzJdXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5hbWVzcGFjZVByZWZpeCA9IHgubmFtZXNwYWNlO1xuICAgICAgaWYgKFxuICAgICAgICAhIW5hbWVzcGFjZVByZWZpeCAmJlxuICAgICAgICAoIXhwYXRoTmFtZXNwYWNlVGJsIHx8XG4gICAgICAgICAgIXhwYXRoTmFtZXNwYWNlVGJsLmhhc093blByb3BlcnR5KG5hbWVzcGFjZVByZWZpeCkpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBNdXN0IHNwZWNpZnkgbmFtZXNwYWNlIHRhYmxlIGZvciBwcmVmaXg6ICR7bmFtZXNwYWNlUHJlZml4fWBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYXhpczogeC5heGlzLFxuICAgICAgICAvLyBOT1RFOiBYUGF0aFBhcnNlciB1c2VzIFwibmFtZXNwYWNlXCIgdG8gcmVmZXIgdG8gdGhlIG5hbWVzcGFjZSBwcmVmaXguXG4gICAgICAgIC8vIFdlIGFyZSB1c2luZyBcIm5hbWVzcGFjZVwiIHRvIHJlZmVyIHRvIHRoZSBuYW1lc3BhY2UgbmFtZSAoVVJJKS5cbiAgICAgICAgbmFtZXNwYWNlOiAhIW5hbWVzcGFjZVByZWZpeCA/IHhwYXRoTmFtZXNwYWNlVGJsW25hbWVzcGFjZVByZWZpeF0gOiBcIlwiLFxuICAgICAgICBuYW1lOiB4Lm5hbWUsXG4gICAgICAgIHByZWRpY2F0ZXM6IHBhcnNlZFByZWRpY2F0ZXMsXG4gICAgICAgIGF0dHJpYnV0ZTogeC5hdHRyaWJ1dGVcbiAgICAgIH07XG4gICAgfVxuICApO1xufVxuXG4vL2NvbnNvbGUubG9nKHBhcnNlKCcvUGF0aHdheScpKTtcbi8vY29uc29sZS5sb2cocGFyc2UoJy9QYXRod2F5L0RhdGFOb2RlL0AqJykpO1xuLy9jb25zb2xlLmxvZyhwYXJzZSgnL1BhdGh3YXkvRGF0YU5vZGUvQEhlaWdodCcpKTtcbi8vY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocGFyc2UoJy9QYXRod2F5L0RhdGFOb2RlW0BXaWR0aD0zNV0vQEhlaWdodCcpLCBudWxsLCAnICAnKSk7XG4iXX0=