changeset 35:29d8ed02a275

build and tests, including jsonld
author drewp@bigasterisk.com
date Sat, 28 Dec 2019 02:01:23 -0800
parents 3d8b98e9c01d
children 8b4dc9e87b56
files index.html package-lock.json package.json rollup.config.js src/json_ld_quads.ts src/suffixLabels.ts tasks.py tsconfig.json webpack.config.js
diffstat 9 files changed, 195 insertions(+), 120 deletions(-) [+]
line wrap: on
line diff
--- a/index.html	Fri Dec 27 21:26:55 2019 -0800
+++ b/index.html	Sat Dec 28 02:01:23 2019 -0800
@@ -1,11 +1,10 @@
 <!DOCTYPE html>
 <html>
-  <body>
-    <h1>streamed-graph demo</h1>
-    <script type="module" src="./build/bundle.js"></script>
-    <streamed-graph
-      url="http://bang5:9075/graph/events"
-      expanded="true"
-    ></streamed-graph>
-  </body>
-</html>
+
+<body>
+  <h1>streamed-graph demo</h1>
+  <script type="module" src="./build/bundle.js"></script>
+  <streamed-graph url="http://bang5:9075/graph/events" expanded="true"></streamed-graph>
+</body>
+
+</html>
\ No newline at end of file
--- a/package-lock.json	Fri Dec 27 21:26:55 2019 -0800
+++ b/package-lock.json	Sat Dec 28 02:01:23 2019 -0800
@@ -374,6 +374,27 @@
         "@webcomponents/shadycss": "^1.9.1"
       }
     },
+    "@rdfjs/data-model": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@rdfjs/data-model/-/data-model-1.1.2.tgz",
+      "integrity": "sha512-pk/G/JLYGaXesoBLvEmoC/ic0H3B79fTyS0Ujjh5YQB2DZW+mn05ZowFFv88rjB9jf7c1XE5XSmf8jzn6U0HHA==",
+      "requires": {
+        "@types/rdf-js": "^2.0.1"
+      }
+    },
+    "@rollup/plugin-commonjs": {
+      "version": "11.0.0",
+      "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-11.0.0.tgz",
+      "integrity": "sha512-jnm//T5ZWOZ6zmJ61fReSCBOif+Ax8dHVoVggA+d2NA7T4qCWgQ3KYr+zN2faGEYLpe1wa03IzvhR+sqVLxUWg==",
+      "dev": true,
+      "requires": {
+        "@rollup/pluginutils": "^3.0.0",
+        "estree-walker": "^0.6.1",
+        "is-reference": "^1.1.2",
+        "magic-string": "^0.25.2",
+        "resolve": "^1.11.0"
+      }
+    },
     "@rollup/plugin-node-resolve": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-6.0.0.tgz",
@@ -3205,6 +3226,14 @@
       "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
       "dev": true
     },
+    "encoding": {
+      "version": "0.1.12",
+      "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
+      "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
+      "requires": {
+        "iconv-lite": "~0.4.13"
+      }
+    },
     "end-of-stream": {
       "version": "1.4.4",
       "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
@@ -4595,7 +4624,6 @@
       "version": "0.4.24",
       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
       "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
-      "dev": true,
       "requires": {
         "safer-buffer": ">= 2.1.2 < 3"
       }
@@ -4925,6 +4953,23 @@
       "dev": true,
       "optional": true
     },
+    "is-reference": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.4.tgz",
+      "integrity": "sha512-uJA/CDPO3Tao3GTrxYn6AwkM4nUPJiGGYu5+cB8qbC7WGFlrKZbiRo7SFKxUAEpFUfiHofWCXBUNhvYJMh+6zw==",
+      "dev": true,
+      "requires": {
+        "@types/estree": "0.0.39"
+      },
+      "dependencies": {
+        "@types/estree": {
+          "version": "0.0.39",
+          "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
+          "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
+          "dev": true
+        }
+      }
+    },
     "is-regex": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
@@ -4937,8 +4982,7 @@
     "is-stream": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
-      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
-      "dev": true
+      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
     },
     "is-symbol": {
       "version": "1.0.3",
@@ -4990,6 +5034,15 @@
       "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
       "dev": true
     },
+    "isomorphic-fetch": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
+      "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
+      "requires": {
+        "node-fetch": "^1.0.1",
+        "whatwg-fetch": ">=0.10.0"
+      }
+    },
     "isstream": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
@@ -5596,11 +5649,30 @@
         "xmldom": "0.1.19"
       }
     },
+    "jsonld-context-parser": {
+      "version": "1.3.4",
+      "resolved": "https://registry.npmjs.org/jsonld-context-parser/-/jsonld-context-parser-1.3.4.tgz",
+      "integrity": "sha512-mR2uoEWqFLE1PrF1pbUuppKajHSGwodXtI9hlcpKflvolDEFAh4hd7z9874pWaK+TtQfHC3Xqfk0U8SEnt2htw==",
+      "requires": {
+        "isomorphic-fetch": "^2.2.1",
+        "relative-to-absolute-iri": "^1.0.5"
+      }
+    },
+    "jsonld-streaming-parser": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/jsonld-streaming-parser/-/jsonld-streaming-parser-1.1.2.tgz",
+      "integrity": "sha512-nKCvqHz2JDHJjt2Iv3kW7yoFpIcKX8bWGqe9r5xaadBg9yp7pg3iuwt7Tl8ADOj5z7jYWKGmO8s31Ho+XN1slQ==",
+      "requires": {
+        "@rdfjs/data-model": "^1.1.1",
+        "@types/rdf-js": "^2.0.1",
+        "jsonld-context-parser": "^1.3.3",
+        "jsonparse": "^1.3.1"
+      }
+    },
     "jsonparse": {
       "version": "1.3.1",
       "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
-      "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
-      "dev": true
+      "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA="
     },
     "jsprim": {
       "version": "1.4.1",
@@ -5937,6 +6009,15 @@
       "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=",
       "dev": true
     },
+    "magic-string": {
+      "version": "0.25.4",
+      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.4.tgz",
+      "integrity": "sha512-oycWO9nEVAP2RVPbIoDoA4Y7LFIJ3xRYov93gAyJhZkET1tNuB0u7uWkZS2LpBWTJUWnmau/To8ECWRC+jKNfw==",
+      "dev": true,
+      "requires": {
+        "sourcemap-codec": "^1.4.4"
+      }
+    },
     "make-dir": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
@@ -6299,6 +6380,15 @@
       "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
       "dev": true
     },
+    "node-fetch": {
+      "version": "1.7.3",
+      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
+      "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
+      "requires": {
+        "encoding": "^0.1.11",
+        "is-stream": "^1.0.1"
+      }
+    },
     "node-forge": {
       "version": "0.8.5",
       "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.8.5.tgz",
@@ -7177,6 +7267,11 @@
         }
       }
     },
+    "relative-to-absolute-iri": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/relative-to-absolute-iri/-/relative-to-absolute-iri-1.0.5.tgz",
+      "integrity": "sha512-sHpUlpF3fRWtTcBa8uBIwQ+Z/YnjDjerocV3q0FrP8T9oZ3z6d61I12ZcGlGr9jW2cQbcCkErCT9XLcN18ZLaQ=="
+    },
     "remove-trailing-separator": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
@@ -7776,6 +7871,12 @@
       "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
       "dev": true
     },
+    "sourcemap-codec": {
+      "version": "1.4.6",
+      "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.6.tgz",
+      "integrity": "sha512-1ZooVLYFxC448piVLBbtOxFcXwnymH9oUF8nRd3CuYDVvkRBxRl6pB4Mtas5a4drtL+E8LDgFkQNcgIw6tc8Hg==",
+      "dev": true
+    },
     "spdx-correct": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
@@ -8682,6 +8783,11 @@
         "iconv-lite": "0.4.24"
       }
     },
+    "whatwg-fetch": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz",
+      "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q=="
+    },
     "whatwg-mimetype": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
--- a/package.json	Fri Dec 27 21:26:55 2019 -0800
+++ b/package.json	Sat Dec 28 02:01:23 2019 -0800
@@ -8,7 +8,10 @@
   ],
   "types": "build/index.d.ts",
   "scripts": {
-    "build": "rollup -c"
+    "build": "rollup -c",
+    "build_forever": "rollup -cw",
+    "test": "jest",
+    "test_forever": "jest --watch"
   },
   "dependencies": {
     "@polymer/decorators": "^3.0.0",
@@ -21,6 +24,7 @@
     "readable-stream": "^3.4.0"
   },
   "devDependencies": {
+    "@rollup/plugin-commonjs": "^11.0.0",
     "@rollup/plugin-node-resolve": "^6.0.0",
     "@types/jest": "^24.0.25",
     "jest": "^24.9.0",
@@ -32,4 +36,4 @@
     "tslib": "^1.10.0",
     "typescript": "^3.7.4"
   }
-}
+}
\ No newline at end of file
--- a/rollup.config.js	Fri Dec 27 21:26:55 2019 -0800
+++ b/rollup.config.js	Sat Dec 28 02:01:23 2019 -0800
@@ -1,20 +1,26 @@
+import builtins from "rollup-plugin-node-builtins";
+import commonjs from '@rollup/plugin-commonjs';
 import resolve from "@rollup/plugin-node-resolve";
 import typescript from "rollup-plugin-typescript2";
-import builtins from "rollup-plugin-node-builtins";
 
 export default {
-  input: "src/index.ts",
-  output: {
-    file: "build/bundle.js",
-    format: "esm",
-    intro: "const global = window;"
-  },
-  plugins: [
-    builtins(),
-    resolve({
-      extensions: [".js", ".ts"],
-      browser: true
-    }),
-    typescript()
-  ]
+    input: "src/index.ts",
+    output: {
+        file: "build/bundle.js",
+        format: "esm",
+        intro: "const global = window;"
+    },
+    plugins: [
+        builtins(),
+        resolve({
+            extensions: [".js", ".ts"],
+            browser: true
+        }),
+        typescript(),
+        commonjs({
+            namedExports: {
+                'jsonld': ['expand'], // fixes "expand is not exported by node_modules/jsonld/lib/index.js"
+            }
+        }),
+    ]
 };
--- a/src/json_ld_quads.ts	Fri Dec 27 21:26:55 2019 -0800
+++ b/src/json_ld_quads.ts	Sat Dec 28 02:01:23 2019 -0800
@@ -1,48 +1,46 @@
-// import * as jsonld from "jsonld";
-// import { JsonLd, JsonLdArray } from 'jsonld/jsonld-spec';
+import * as jsonld from "jsonld";
+import { JsonLd, JsonLdArray } from 'jsonld/jsonld-spec';
 import { Quad, NamedNode, DataFactory } from 'n3';
 const { literal, quad, namedNode } = DataFactory;
 
-// import {} from 'n3';
 // const { rdf } = ns;
 const rdf = { type: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" };
 
-// function _emitQuad(
-//     onQuad: (q: Quad) => void,
-//     subjNode: NamedNode,
-//     pred: string,
-//     subj: any,
-//     graphNode: NamedNode) {
-//     let predNode: NamedNode;
-//     if (pred === "@type") {
-//         predNode = namedNode(rdf.type);
-//     }
-//     else {
-//         predNode = namedNode(pred);
-//     }
-//     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));
-//     });
-// }
+function _emitQuad(
+    onQuad: (q: Quad) => void,
+    subjNode: NamedNode,
+    pred: string,
+    subj: any,
+    graphNode: NamedNode) {
+    let predNode: NamedNode;
+    if (pred === "@type") {
+        predNode = namedNode(rdf.type);
+    }
+    else {
+        predNode = namedNode(pred);
+    }
+    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) {
-
-    // const expanded = await jsonld.expand(jsonLdObj);
+    const expanded = await jsonld.expand(jsonLdObj);
 
-    // (expanded as JsonLdArray).forEach(function (g: JsonLd) {
-    //     var graph = (g as { '@id': string })['@id'];
-    //     var graphNode = namedNode(graph);
-    //     (g as { '@graph': JsonLdArray })['@graph'].forEach(function (subj: { [predOrId: string]: any; }) {
-    //         const subjNode = namedNode(subj['@id']);
-    //         for (let pred in subj) {
-    //             if (pred === '@id') {
-    //                 continue;
-    //             }
-    //             _emitQuad(onQuad, subjNode, pred, subj, graphNode);
-    //         }
-    //     });
-    // });
+    (expanded as JsonLdArray).forEach(function (g: JsonLd) {
+        var graph = (g as { '@id': string })['@id'];
+        var graphNode = namedNode(graph);
+        (g as { '@graph': JsonLdArray })['@graph'].forEach(function (subj: { [predOrId: string]: any; }) {
+            const subjNode = namedNode(subj['@id']);
+            for (let pred in subj) {
+                if (pred === '@id') {
+                    continue;
+                }
+                _emitQuad(onQuad, subjNode, pred, subj, graphNode);
+            }
+        });
+    });
 }
--- a/src/suffixLabels.ts	Fri Dec 27 21:26:55 2019 -0800
+++ b/src/suffixLabels.ts	Sat Dec 28 02:01:23 2019 -0800
@@ -59,7 +59,6 @@
         clashNode.label = nextLeftSeg[0] + '/' + clashNode.label;
         nextLeftSeg[1].usedBy = curs.usedBy;
         curs.usedBy = undefined;
-
     }
 
     // a substring to show for this uri
--- a/tasks.py	Fri Dec 27 21:26:55 2019 -0800
+++ b/tasks.py	Sat Dec 28 02:01:23 2019 -0800
@@ -7,21 +7,15 @@
 
 @task
 def serve_demo(ctx):
-    ctx.run('npm run webpack-dev-server')
+    ctx.run('webfsd -Fp 8021')
 
 @task
 def build(ctx):
-    ctx.run(f'npm run webpack-build', pty=True)
-    ctx.run(f'cp build/bundle.js         /my/site/homepage/www/rdf/streamed-graph.bundle.js')
-    ctx.run(f'cp src/streamed-graph.css  /my/site/homepage/www/rdf/streamed-graph.css')
+    ctx.run(f'npm run build', pty=True)
 
 @task
 def build_forever(ctx):
-    ctx.run(f'npm run run webpack-build-forever', pty=True)
-
-@task
-def dev_server(ctx):
-    ctx.run(f'npm run webpack-dev-server', pty=True)
+    ctx.run(f'npm run build_forever', pty=True)
 
 @task
 def test(ctx):
@@ -29,4 +23,9 @@
 
 @task
 def test_forever(ctx):
-    ctx.run(f'npm run test-forever', pty=True)
+    ctx.run(f'npm run test_forever', pty=True)
+
+@task(pre=[build])
+def install(ctx):
+    ctx.run(f'cp build/bundle.js         /my/site/homepage/www/rdf/streamed-graph.bundle.js')
+    ctx.run(f'cp src/streamed-graph.css  /my/site/homepage/www/rdf/streamed-graph.css')
--- a/tsconfig.json	Fri Dec 27 21:26:55 2019 -0800
+++ b/tsconfig.json	Sat Dec 28 02:01:23 2019 -0800
@@ -1,18 +1,15 @@
 {
   "compilerOptions": {
-    // "strict": true,
+    "strict": true,
     "noFallthroughCasesInSwitch": true,
     "noImplicitAny": true,
     "noImplicitReturns": true,
     "noImplicitThis": true,
-    // "noUnusedParameters": true,
-    // "noUnusedLocals": true,
     "strictFunctionTypes": true,
     "strictNullChecks": true,
     "strictPropertyInitialization": true,
     "alwaysStrict": true,
 
-    // "allowSyntheticDefaultImports": true,
     "types": ["jest"],
     
     "module": "ES6",
@@ -22,12 +19,13 @@
     "declaration": true,
     "experimentalDecorators": true,
     "allowJs": true,
+    "esModuleInterop": true,
+    // "allowSyntheticDefaultImports": true,
     // "rootDir": ".",
     // "outDir": "./build",
-    "esModuleInterop": true,
+    // "baseUrl": "./build"
     // "emitDecoratorMetadata": true,
     // "lib": [ "es6", "dom" ],
-    // "baseUrl": "./build"
 
   },
   "include": ["src/**/*.ts"],
--- a/webpack.config.js	Fri Dec 27 21:26:55 2019 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-const path = require("path");
-
-module.exports = {
-  entry: ["./src/index.ts"],
-  output: {
-    library: "streamed_graph",
-    filename: "bundle.js",
-    path: path.resolve(__dirname, "build"),
-    publicPath: "/build/"
-  },
-  module: {
-    rules: [
-      {
-        test: /\.ts$/,
-        loader: require.resolve("ts-loader")
-      },
-      { test: /\.css$/i, use: ["file-loader"] }
-    ]
-  },
-  devtool: "source-map",
-  resolve: {
-    extensions: [".ts", ".js"],
-    modules: ["node_modules"]
-  },
-  watchOptions: {
-    ignored: /node_modules/,
-    poll: 200
-  },
-  devServer: {
-    port: 8082,
-    publicPath: "/build/",
-    contentBase: __dirname
-  }
-};