UNPKG

gpml2pvjson

Version:
159 lines (158 loc) 12.3 kB
"use strict"; 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 }); exports.CXMLXPath = void 0; require("source-map-support/register"); // TODO should I get rid of source-map-support/register for production build for browser? // TODO most or all of this should go into the xpath branch of @wikipathways/cxml. // Decide on an API and then merge most or all this code into there. // // TODO why does TS require that we use the Pathway's "constructor.prototype" // instead of just the Pathway? // Why does Pathway.Graphics not need that? // Why do many of the other require using the prototype? // //// TODO why do we get an error with this (/Pathway/@* before /Pathway): //"/Pathway/@*": GPML2013a.document.Pathway.constructor.prototype, //"/Pathway": GPML2013a.document.Pathway.constructor.prototype, //// And with this, we don't get an error, but nothing comes out (/Pathway before /Pathway/@*): //"/Pathway": GPML2013a.document.Pathway.constructor.prototype, //"/Pathway/@*": GPML2013a.document.Pathway.constructor.prototype, var fp_1 = require("lodash/fp"); var hl = require("highland"); var cxml = require("@wikipathways/cxml"); // TODO don't use this regex when we are already also using a nice // xpath expression parser in the xpath branch of cxml var ATTR_SELECTOR_REGEX = /\/@(\*|([:A-Za-z_][:\w\-\.]*))$/; function getSelectorLevel(selector) { return selector.replace(ATTR_SELECTOR_REGEX, "").split("/").length - 1; } var nestedElementsToSelector = fp_1.curry(function (commonLevel, nestedElements) { return nestedElements.slice(0, commonLevel).join("/"); }); function getSelectorNestedElements(selector) { return selector.replace(ATTR_SELECTOR_REGEX, "").split("/"); } var CXMLXPath = /** @class */ (function () { function CXMLXPath(inputStream, schema, xpathNamespaceTbl) { if (xpathNamespaceTbl === void 0) { xpathNamespaceTbl = { "": "" }; } this._parser = new cxml.Parser(xpathNamespaceTbl); this._schema = schema; this._inputStream = inputStream; } CXMLXPath.prototype.parse = function (selectorToCXML) { var inputStream = this._inputStream; var parser = this._parser; var schema = this._schema; var result = fp_1.toPairs(selectorToCXML).reduce(function (_a, _b) { var output = _a.output, runningSelectors = _a.runningSelectors; var selector = _b[0], schemaElement = _b[1]; var outputStream = hl(); var useBefore = selector.match(ATTR_SELECTOR_REGEX); parser.attach(/** @class */ (function (_super) { __extends(CustomHandler, _super); function CustomHandler() { return _super !== null && _super.apply(this, arguments) || this; } CustomHandler.prototype._before = function () { if (useBefore) { outputStream.write(fp_1.cloneDeep(this)); } }; CustomHandler.prototype._after = function () { if (!useBefore) { outputStream.write(fp_1.cloneDeep(this)); } }; return CustomHandler; }(schemaElement.constructor)), selector); output[selector] = outputStream; var level = getSelectorLevel(selector); var selectorNestedElements = getSelectorNestedElements(selector); var _c = fp_1.partition(function (runningSelector) { var runningSelectorNestedElements = getSelectorNestedElements(runningSelector); var commonNestedElementsToSelector = nestedElementsToSelector(Math.min(selectorNestedElements.length, runningSelectorNestedElements.length)); return (commonNestedElementsToSelector(runningSelectorNestedElements) !== commonNestedElementsToSelector(selectorNestedElements)); }, runningSelectors), selectorsToEnd = _c[0], stillRunningSelectors = _c[1]; selectorsToEnd.forEach(function (runningSelector) { var runningStream = output[runningSelector]; outputStream .observe() .head() .each(function (x) { runningStream.end(); }); }); // NOTE: redefining this variable runningSelectors = stillRunningSelectors.concat([selector]); return { output: output, runningSelectors: runningSelectors }; }, { output: {}, runningSelectors: [] }); var streamMapBySelector = result.output; var finalRunningSelectors = result.runningSelectors; var selectors = fp_1.keys(selectorToCXML); parser.parse(inputStream, schema.document).then(function (Pathway) { finalRunningSelectors.forEach(function (finalRunningSelector) { streamMapBySelector[finalRunningSelector].end(); }); selectors.forEach(function (selector) { var thisStream = streamMapBySelector[selector]; if (!thisStream["ended"]) { //console.log(streamMapBySelector[selector]); //console.log(`Failed to end stream for ${selector}. See above.`); //throw new Error(`Failed to end stream for ${selector}. See above.`); thisStream.end(); /* (thisStream._observers.length === 0 ? thisStream : thisStream.observe()) .debounce(17) .each(function() { thisStream.end(); }); //*/ } }); }, function (err) { throw err; }); /* streamMapBySelector.startCXML = function() { return hl(parser.parse(inputStream, schema.document)).map(function( Pathway ) { console.log("Pathway"); console.log(Pathway); finalRunningSelectors.forEach(function(finalRunningSelector) { streamMapBySelector[finalRunningSelector].end(); }); selectors.forEach(function(selector) { const thisStream = streamMapBySelector[selector]; if (!thisStream["ended"]) { //console.log(streamMapBySelector[selector]); console.log(`Failed to end stream for ${selector}. See above.`); //throw new Error(`Failed to end stream for ${selector}. See above.`); //thisStream.end(); } }); }); }; //*/ return streamMapBySelector; }; return CXMLXPath; }()); exports.CXMLXPath = CXMLXPath; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3htbC14cGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zcGlub2Zmcy9jeG1sLXhwYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1Q0FBcUM7QUFDckMseUZBQXlGO0FBRXpGLGtGQUFrRjtBQUNsRixvRUFBb0U7QUFDcEUsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSwrQkFBK0I7QUFDL0IsMkNBQTJDO0FBQzNDLHdEQUF3RDtBQUN4RCxFQUFFO0FBQ0YseUVBQXlFO0FBQ3pFLGtFQUFrRTtBQUNsRSwrREFBK0Q7QUFDL0QsK0ZBQStGO0FBQy9GLCtEQUErRDtBQUMvRCxrRUFBa0U7QUFFbEUsZ0NBQXVFO0FBQ3ZFLDZCQUErQjtBQUUvQix5Q0FBMkM7QUF1QjNDLGtFQUFrRTtBQUNsRSxzREFBc0Q7QUFDdEQsSUFBTSxtQkFBbUIsR0FBRyxpQ0FBaUMsQ0FBQztBQUU5RCxTQUFTLGdCQUFnQixDQUFDLFFBQVE7SUFDaEMsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFFRCxJQUFNLHdCQUF3QixHQUFHLFVBQUssQ0FBQyxVQUFTLFdBQVcsRUFBRSxjQUFjO0lBQ3pFLE9BQU8sY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hELENBQUMsQ0FBQyxDQUFDO0FBRUgsU0FBUyx5QkFBeUIsQ0FBQyxRQUFRO0lBQ3pDLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUVEO0lBTUUsbUJBQ0UsV0FBVyxFQUNYLE1BQU0sRUFDTixpQkFBc0Q7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