wikipathways-api-client
Version:
JS client for the WikiPathways.org webservices API
51 lines • 4.04 kB
JavaScript
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/mergeMap';
import 'rxjs/add/observable/fromEventPattern';
import 'rxjs/add/operator/concat';
import 'rxjs/add/operator/filter';
import 'rxjs/add/operator/takeUntil';
import * as sax from 'sax';
export function updatePathway(ajaxResponse) {
const xhr = ajaxResponse.xhr;
const strict = true;
const saxStream = sax.createStream(strict, { xmlns: true, encoding: 'utf8' });
function createSaxStreamEventObservable(eventName) {
return Observable.fromEventPattern(function addHandler(h) {
saxStream.on(eventName, h);
}, function delHandler() { });
}
// TODO get the webservice to return JSON so we don't need to parse XML
const parsedStream = createSaxStreamEventObservable('opentag')
.filter(function (node) {
return node.name === 'ns1:success' || node.name === 'ns1:failure';
})
.mergeMap(function (node) {
return createSaxStreamEventObservable('text')
.takeUntil(createSaxStreamEventObservable('opentag')
.concat(createSaxStreamEventObservable('closetag')
.filter(function (node) {
return node.name === 'ns1:success' || node.name === 'ns1:failure';
})));
})
// TODO why do I need this filter?
.filter(x => x !== '\n')
.map(function (message) {
return {
status: xhr.status,
statusText: xhr.statusText,
message: message,
};
});
// NOTE: this kludge was added so that the Observable
// could be observed by its subscriber.
// It wasn't observed otherwise, probably because
// it's hot.
setTimeout(function () {
saxStream.write(xhr.response);
saxStream.end();
}, 20);
return parsedStream;
}
;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWE1MUmVzcG9uc2VQYXJzZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1hNTFJlc3BvbnNlUGFyc2Vycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sc0NBQXNDLENBQUM7QUFDOUMsT0FBTywwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxLQUFLLEdBQUcsTUFBTSxLQUFLLENBQUM7QUFFM0IsTUFBTSx3QkFBd0IsWUFBMEI7SUFLdkQsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQztJQUM3QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDcEIsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDO0lBRTVFLHdDQUF3QyxTQUFTO1FBQ2hELE9BQU8sVUFBVSxDQUFDLGdCQUFnQixDQUNqQyxvQkFBb0IsQ0FBQztZQUNwQixTQUFTLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1QixDQUFDLEVBQ0Qsd0JBQXVCLENBQUMsQ0FDeEIsQ0FBQztJQUNILENBQUM7SUFFRCx1RUFBdUU7SUFDdkUsTUFBTSxZQUFZLEdBQUcsOEJBQThCLENBQUMsU0FBUyxDQUFDO1NBQzVELE1BQU0sQ0FBQyxVQUFTLElBQVM7UUFDekIsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQztJQUNuRSxDQUFDLENBQUM7U0FDRCxRQUFRLENBQUMsVUFBUyxJQUFJO1FBQ3RCLE9BQU8sOEJBQThCLENBQUMsTUFBTSxDQUFDO2FBQzNDLFNBQVMsQ0FDUiw4QkFBOEIsQ0FBQyxTQUFTLENBQUM7YUFDdkMsTUFBTSxDQUNMLDhCQUE4QixDQUFDLFVBQVUsQ0FBQzthQUN4QyxNQUFNLENBQUMsVUFBUyxJQUFTO1lBQ3pCLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxhQUFhLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxhQUFhLENBQUM7UUFDbkUsQ0FBQyxDQUFDLENBQ0osQ0FDSCxDQUFDO0lBQ0osQ0FBQyxDQUFDO1FBQ0Ysa0NBQWtDO1NBQ2pDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUM7U0FDdkIsR0FBRyxDQUFDLFVBQVMsT0FBTztRQUNwQixPQUFPO1lBQ04sTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNO1lBQ2xCLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVTtZQUMxQixPQUFPLEVBQUUsT0FBTztTQUNoQixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSixxREFBcUQ7SUFDcEQsdUNBQXVDO0lBQ3ZDLGlEQUFpRDtJQUNqRCxZQUFZO0lBQ2IsVUFBVSxDQUFDO1FBQ1YsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUIsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVQLE9BQU8sWUFBbUIsQ0FBQztBQUM1QixDQUFDO0FBQUEsQ0FBQyJ9