rescribet/link-lib

View on GitHub
src/transformers/linked-delta.ts

Summary

Maintainability
A
1 hr
Test Coverage
import { Quadruple } from "@ontologies/core";
import { NQuadsParser } from "n-quads-parser";

import { LinkedRenderStore } from "../LinkedRenderStore";
import {
    ExtensionResponse,
    RDFLibFetcherRequest,
    ResponseAndFallbacks,
    ResponseTransformer,
} from "../types";

/**
 * Processes linked-delta responses.
 */

export function linkedDeltaProcessor(lrs: LinkedRenderStore<any>): ResponseTransformer {
    return async function processLinkedDelta(response: ResponseAndFallbacks): Promise<Quadruple[]> {
        let data: string;
        if (response instanceof Response) {
            data = response.bodyUsed ? "" : await response.text();
        } else if (typeof XMLHttpRequest !== "undefined" && response instanceof XMLHttpRequest) {
            data = response.responseText;
        } else {
            data = (response as RDFLibFetcherRequest | ExtensionResponse).body;
        }

        if (!data || data.length === 0) {
            return [];
        }

        const parser = new NQuadsParser((lrs as any).store.getInternalStore());
        const quads = parser.parseString(data) as Array<Quadruple | void>;
        const expedite = response.hasOwnProperty("expedite") ? (response as any).expedite : false;

        lrs.queueDelta(quads, expedite);

        // TODO: Resolve the statements in this request
        return [];
    };
}