UNPKG

wikipathways-api-client

Version:
51 lines 4.04 kB
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