diff src/json_ld_quads.ts @ 13:b9f451791f3a

refactor and update jsonldquads. WIP
author drewp@localhost
date Fri, 06 Dec 2019 20:33:36 -0800
parents 6fefd287aff9
children 7ca4ff2088c3
line wrap: on
line diff
--- a/src/json_ld_quads.ts	Fri Dec 06 20:33:01 2019 -0800
+++ b/src/json_ld_quads.ts	Fri Dec 06 20:33:36 2019 -0800
@@ -1,38 +1,58 @@
 import * as jsonld from "jsonld";
-import { DataFactory, Quad } from 'n3';
-const { namedNode, literal, quad } = DataFactory;
+import { Quad, NamedNode, Literal, N3Store } from 'n3';
+
+
+
+import { DataFactory } from 'n3';
+const { literal, quad, namedNode } = DataFactory;
+
 import ns from 'n3/src/IRIs';
-const {rdf} = ns;
+const { rdf } = ns;
 
-export function eachJsonLdQuad(jsonLdObj: object, onQuad: (q: Quad) => void, done: () => void) {
-    jsonld.expand(jsonLdObj, function onExpand(err, expanded) {
-        if (err) {
-            throw new Error();
-        }
-        (expanded as [object]).forEach(function (g) {
-            var graph = g['@id'];
-            var graphNode = namedNode(graph);
-            g['@graph'].forEach(function (subj) {
-                const subjNode = namedNode(subj['@id']);
-                for (let pred in subj) {
-                    if (pred === '@id') {
-                        continue;
+function _emitQuad(
+    onQuad: (q: Quad) => void,
+    subjNode: NamedNode,
+    pred: string | { '@id': string },
+    subj: any,
+    graphNode: NamedNode) {
+    let predNode: NamedNode;
+    if (pred === "@type") {
+        predNode = namedNode(rdf.type);
+    }
+    else {
+        predNode = namedNode(pred['@id']);
+    }
+    subj[pred as string].forEach(function (obj: any) {
+        const objNode = (obj['@id'] ? namedNode(obj['@id']) :
+            literal(obj['@value'],
+                obj['@language'] || obj['@type']));
+        onQuad(quad(subjNode, predNode, objNode, graphNode));
+    });
+}
+
+export async function eachJsonLdQuad(jsonLdObj: object, onQuad: (q: Quad) => void) {
+
+    return new Promise(function (resolve, reject) {
+
+        jsonld.expand(jsonLdObj, function onExpand(err, expanded) {
+            if (err) {
+                reject(err);
+            }
+            (expanded as [object]).forEach(function (g) {
+                var graph = g['@id'];
+                var graphNode = namedNode(graph);
+                g['@graph'].forEach(function (subj) {
+                    const subjNode = namedNode(subj['@id']);
+                    for (let pred in subj) {
+                        if (pred === '@id') {
+                            continue;
+                        } 2
+                        _emitQuad(onQuad, subjNode, pred, subj, graphNode);
                     }
-                    let predNode;
-                    if (pred === "@type") {
-                        predNode = namedNode(rdf.type);
-                    } else {
-                        predNode = namedNode(pred['@id']);
-                    }
-                    subj[pred].forEach(function (obj) {
-                        const objNode = (obj['@id'] ? namedNode(obj['@id']) :
-                            literal(obj['@value'], obj['@language'] || obj['@type']));
-                        onQuad(quad(subjNode, predNode, objNode, graphNode));
-                    });
-                }
+                });
             });
+            resolve();
         });
-        done();
     });
 }
 ;