1 | ;
|
2 | var __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 | })();
|
12 | Object.defineProperty(exports, "__esModule", { value: true });
|
13 | require("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,
|
29 | var fp_1 = require("lodash/fp");
|
30 | var hl = require("highland");
|
31 | var 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
|
34 | var ATTR_SELECTOR_REGEX = /\/@(\*|([:A-Za-z_][:\w\-\.]*))$/;
|
35 | function getSelectorLevel(selector) {
|
36 | return selector.replace(ATTR_SELECTOR_REGEX, "").split("/").length - 1;
|
37 | }
|
38 | var nestedElementsToSelector = fp_1.curry(function (commonLevel, nestedElements) {
|
39 | return nestedElements.slice(0, commonLevel).join("/");
|
40 | });
|
41 | function getSelectorNestedElements(selector) {
|
42 | return selector.replace(ATTR_SELECTOR_REGEX, "").split("/");
|
43 | }
|
44 | var 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 | }());
|
151 | exports.CXMLXPath = CXMLXPath;
|
152 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3htbC14cGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zcGlub2Zmcy9jeG1sLXhwYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLHVDQUFxQztBQUNyQyx5RkFBeUY7QUFFekYsa0ZBQWtGO0FBQ2xGLG9FQUFvRTtBQUNwRSxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLCtCQUErQjtBQUMvQiwyQ0FBMkM7QUFDM0Msd0RBQXdEO0FBQ3hELEVBQUU7QUFDRix5RUFBeUU7QUFDekUsa0VBQWtFO0FBQ2xFLCtEQUErRDtBQUMvRCwrRkFBK0Y7QUFDL0YsK0RBQStEO0FBQy9ELGtFQUFrRTtBQUVsRSxnQ0FBdUU7QUFDdkUsNkJBQStCO0FBRS9CLHlDQUEyQztBQXVCM0Msa0VBQWtFO0FBQ2xFLHNEQUFzRDtBQUN0RCxJQUFNLG1CQUFtQixHQUFHLGlDQUFpQyxDQUFDO0FBRTlELDBCQUEwQixRQUFRO0lBQ2hDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFFRCxJQUFNLHdCQUF3QixHQUFHLFVBQUssQ0FBQyxVQUFTLFdBQVcsRUFBRSxjQUFjO0lBQ3pFLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEQsQ0FBQyxDQUFDLENBQUM7QUFFSCxtQ0FBbUMsUUFBUTtJQUN6QyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUVEO0lBTUUsbUJBQ0UsV0FBVyxFQUNYLE1BQU0sRUFDTixpQkFBc0Q7UUFBdEQsa0NB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 |
\ | No newline at end of file |