UNPKG

11.8 kBJavaScriptView Raw
1"use strict";
2var __extends = (this && this.__extends) || (function () {
3 var extendStatics = Object.setPrototypeOf ||
4 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
6 return function (d, b) {
7 extendStatics(d, b);
8 function __() { this.constructor = d; }
9 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
10 };
11})();
12Object.defineProperty(exports, "__esModule", { value: true });
13require("source-map-support/register");
14// TODO should I get rid of source-map-support/register for production build for browser?
15// TODO most or all of this should go into the xpath branch of @wikipathways/cxml.
16// Decide on an API and then merge most or all this code into there.
17//
18// TODO why does TS require that we use the Pathway's "constructor.prototype"
19// instead of just the Pathway?
20// Why does Pathway.Graphics not need that?
21// Why do many of the other require using the prototype?
22//
23//// TODO why do we get an error with this (/Pathway/@* before /Pathway):
24//"/Pathway/@*": GPML2013a.document.Pathway.constructor.prototype,
25//"/Pathway": GPML2013a.document.Pathway.constructor.prototype,
26//// And with this, we don't get an error, but nothing comes out (/Pathway before /Pathway/@*):
27//"/Pathway": GPML2013a.document.Pathway.constructor.prototype,
28//"/Pathway/@*": GPML2013a.document.Pathway.constructor.prototype,
29var fp_1 = require("lodash/fp");
30var hl = require("highland");
31var cxml = require("@wikipathways/cxml");
32// TODO don't use this regex when we are already also using a nice
33// xpath expression parser in the xpath branch of cxml
34var ATTR_SELECTOR_REGEX = /\/@(\*|([:A-Za-z_][:\w\-\.]*))$/;
35function getSelectorLevel(selector) {
36 return selector.replace(ATTR_SELECTOR_REGEX, "").split("/").length - 1;
37}
38var nestedElementsToSelector = fp_1.curry(function (commonLevel, nestedElements) {
39 return nestedElements.slice(0, commonLevel).join("/");
40});
41function getSelectorNestedElements(selector) {
42 return selector.replace(ATTR_SELECTOR_REGEX, "").split("/");
43}
44var CXMLXPath = /** @class */ (function () {
45 function CXMLXPath(inputStream, schema, xpathNamespaceTbl) {
46 if (xpathNamespaceTbl === void 0) { xpathNamespaceTbl = { "": "" }; }
47 this._parser = new cxml.Parser(xpathNamespaceTbl);
48 this._schema = schema;
49 this._inputStream = inputStream;
50 }
51 CXMLXPath.prototype.parse = function (selectorToCXML) {
52 var inputStream = this._inputStream;
53 var parser = this._parser;
54 var schema = this._schema;
55 var result = fp_1.toPairs(selectorToCXML).reduce(function (_a, _b) {
56 var output = _a.output, runningSelectors = _a.runningSelectors;
57 var selector = _b[0], schemaElement = _b[1];
58 var outputStream = hl();
59 var useBefore = selector.match(ATTR_SELECTOR_REGEX);
60 parser.attach(/** @class */ (function (_super) {
61 __extends(CustomHandler, _super);
62 function CustomHandler() {
63 return _super !== null && _super.apply(this, arguments) || this;
64 }
65 CustomHandler.prototype._before = function () {
66 if (useBefore) {
67 outputStream.write(fp_1.cloneDeep(this));
68 }
69 };
70 CustomHandler.prototype._after = function () {
71 if (!useBefore) {
72 outputStream.write(fp_1.cloneDeep(this));
73 }
74 };
75 return CustomHandler;
76 }(schemaElement.constructor)), selector);
77 output[selector] = outputStream;
78 var level = getSelectorLevel(selector);
79 var selectorNestedElements = getSelectorNestedElements(selector);
80 var _c = fp_1.partition(function (runningSelector) {
81 var runningSelectorNestedElements = getSelectorNestedElements(runningSelector);
82 var commonNestedElementsToSelector = nestedElementsToSelector(Math.min(selectorNestedElements.length, runningSelectorNestedElements.length));
83 return (commonNestedElementsToSelector(runningSelectorNestedElements) !==
84 commonNestedElementsToSelector(selectorNestedElements));
85 }, runningSelectors), selectorsToEnd = _c[0], stillRunningSelectors = _c[1];
86 selectorsToEnd.forEach(function (runningSelector) {
87 var runningStream = output[runningSelector];
88 outputStream.observe().head().each(function (x) {
89 runningStream.end();
90 });
91 });
92 // NOTE: redefining this variable
93 runningSelectors = stillRunningSelectors.concat([selector]);
94 return { output: output, runningSelectors: runningSelectors };
95 }, { output: {}, runningSelectors: [] });
96 var streamMapBySelector = result.output;
97 var finalRunningSelectors = result.runningSelectors;
98 var selectors = fp_1.keys(selectorToCXML);
99 parser.parse(inputStream, schema.document).then(function (Pathway) {
100 finalRunningSelectors.forEach(function (finalRunningSelector) {
101 streamMapBySelector[finalRunningSelector].end();
102 });
103 selectors.forEach(function (selector) {
104 var thisStream = streamMapBySelector[selector];
105 if (!thisStream["ended"]) {
106 //console.log(streamMapBySelector[selector]);
107 //console.log(`Failed to end stream for ${selector}. See above.`);
108 //throw new Error(`Failed to end stream for ${selector}. See above.`);
109 thisStream.end();
110 /*
111 (thisStream._observers.length === 0
112 ? thisStream
113 : thisStream.observe())
114 .debounce(17)
115 .each(function() {
116 thisStream.end();
117 });
118 //*/
119 }
120 });
121 }, function (err) {
122 throw err;
123 });
124 /*
125 streamMapBySelector.startCXML = function() {
126 return hl(parser.parse(inputStream, schema.document)).map(function(
127 Pathway
128 ) {
129 console.log("Pathway");
130 console.log(Pathway);
131 finalRunningSelectors.forEach(function(finalRunningSelector) {
132 streamMapBySelector[finalRunningSelector].end();
133 });
134
135 selectors.forEach(function(selector) {
136 const thisStream = streamMapBySelector[selector];
137 if (!thisStream["ended"]) {
138 //console.log(streamMapBySelector[selector]);
139 console.log(`Failed to end stream for ${selector}. See above.`);
140 //throw new Error(`Failed to end stream for ${selector}. See above.`);
141 //thisStream.end();
142 }
143 });
144 });
145 };
146 //*/
147 return streamMapBySelector;
148 };
149 return CXMLXPath;
150}());
151exports.CXMLXPath = CXMLXPath;
152//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3htbC14cGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zcGlub2Zmcy9jeG1sLXhwYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLHVDQUFxQztBQUNyQyx5RkFBeUY7QUFFekYsa0ZBQWtGO0FBQ2xGLG9FQUFvRTtBQUNwRSxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLCtCQUErQjtBQUMvQiwyQ0FBMkM7QUFDM0Msd0RBQXdEO0FBQ3hELEVBQUU7QUFDRix5RUFBeUU7QUFDekUsa0VBQWtFO0FBQ2xFLCtEQUErRDtBQUMvRCwrRkFBK0Y7QUFDL0YsK0RBQStEO0FBQy9ELGtFQUFrRTtBQUVsRSxnQ0FBdUU7QUFDdkUsNkJBQStCO0FBRS9CLHlDQUEyQztBQXVCM0Msa0VBQWtFO0FBQ2xFLHNEQUFzRDtBQUN0RCxJQUFNLG1CQUFtQixHQUFHLGlDQUFpQyxDQUFDO0FBRTlELDBCQUEwQixRQUFRO0lBQ2hDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFFRCxJQUFNLHdCQUF3QixHQUFHLFVBQUssQ0FBQyxVQUFTLFdBQVcsRUFBRSxjQUFjO0lBQ3pFLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEQsQ0FBQyxDQUFDLENBQUM7QUFFSCxtQ0FBbUMsUUFBUTtJQUN6QyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUVEO0lBTUUsbUJBQ0UsV0FBVyxFQUNYLE1BQU0sRUFDTixpQkFBc0Q7UUFBdEQsa0NB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
\No newline at end of file