diff --git a/.gitignore b/.gitignore
index 403addf..d857d7c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -37,3 +37,6 @@ testem.log
# System Files
.DS_Store
Thumbs.db
+
+# Project files
+*.hydra.json
diff --git a/.travis.yml b/.travis.yml
index 15c50bf..0fe4f2f 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -6,7 +6,15 @@ services:
- docker
before_install:
+ - npm install -g wait-on
- cd movies
+
+before_script:
+ - npm start & SERVER_PID=$!
+ - wait-on --timeout 30000 http://localhost:3000
+
+after_script:
+ - kill $SERVER_PID
deploy:
provider: script
diff --git a/movies/package-lock.json b/movies/package-lock.json
index 3b8701c..a15614e 100644
--- a/movies/package-lock.json
+++ b/movies/package-lock.json
@@ -196,6 +196,15 @@
"minimist": "^1.2.0"
}
},
+ "@hydrofoil/hypertest": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/@hydrofoil/hypertest/-/hypertest-0.5.0.tgz",
+ "integrity": "sha512-/mIOPIiLwnFIRSp84usuMCFbQMdv6ibIKGLZOijSMMofF8ZZ9a9HrKJ5ycqDLEGYMZtSAvsbhyivG609eQBWhQ==",
+ "dev": true,
+ "requires": {
+ "shelljs": "^0.7.5"
+ }
+ },
"@jest/console": {
"version": "24.7.1",
"resolved": "https://registry.npmjs.org/@jest/console/-/console-24.7.1.tgz",
@@ -350,6 +359,125 @@
"@types/yargs": "^12.0.9"
}
},
+ "@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==",
+ "dev": true,
+ "requires": {
+ "@types/rdf-js": "^2.0.1"
+ }
+ },
+ "@rdfjs/fetch-lite": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@rdfjs/fetch-lite/-/fetch-lite-2.0.1.tgz",
+ "integrity": "sha512-Ch7+7MNTFpjhWiaT/axokOLULsTMZlLGgJJ2GlPIgrdU2Pwiszm3/T898WrzOxJenJimtub0+jhlbO7hQ0dVcQ==",
+ "dev": true,
+ "requires": {
+ "isstream": "^0.1.2",
+ "nodeify-fetch": "^2.0.0",
+ "readable-stream": "^3.3.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
+ "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "@rdfjs/formats-common": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@rdfjs/formats-common/-/formats-common-2.0.1.tgz",
+ "integrity": "sha512-XeC+j/+DDBZpSfQNg+Spae+tXxPGwkAoeqG04BBxb7WvPr0vhDbhuRoo95At6btabZWvBIX2S7PCsRle1PlvXg==",
+ "dev": true,
+ "requires": {
+ "@rdfjs/parser-jsonld": "^1.1.1",
+ "@rdfjs/parser-n3": "^1.1.2",
+ "@rdfjs/serializer-jsonld": "^1.2.0",
+ "@rdfjs/serializer-ntriples": "^1.0.1",
+ "@rdfjs/sink-map": "^1.0.0"
+ }
+ },
+ "@rdfjs/namespace": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@rdfjs/namespace/-/namespace-1.1.0.tgz",
+ "integrity": "sha512-utO5rtaOKxk8B90qzaQ0N+J5WrCI28DtfAY/zExCmXE7cOfC5uRI/oMKbLaVEPj2P7uArekt/T4IPATtj7Tjug==",
+ "dev": true,
+ "requires": {
+ "@rdfjs/data-model": "^1.1.0"
+ }
+ },
+ "@rdfjs/parser-jsonld": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@rdfjs/parser-jsonld/-/parser-jsonld-1.1.2.tgz",
+ "integrity": "sha512-ejh2ckwZd5zXjyUzFfzpC1fAMIJH0Tfxy8yAbNgQMp93l33mJx0kKH/jhVKDdWHyQzaCwurPFU84MTL3fYKKng==",
+ "dev": true,
+ "requires": {
+ "@rdfjs/data-model": "^1.0.1",
+ "@rdfjs/sink": "^1.0.2",
+ "concat-stream": "^1.6.2",
+ "jsonld": "^1.0.2",
+ "readable-stream": "^2.3.6"
+ }
+ },
+ "@rdfjs/parser-n3": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@rdfjs/parser-n3/-/parser-n3-1.1.3.tgz",
+ "integrity": "sha512-TRvAA2QfrIdIfhDB9RVU91dhZ/ITDiJ1prTHahEgEVKNH+Zu+iFfEgLDKbv/ZNvEoLaDyoG92p9xqToH7mdh0w==",
+ "dev": true,
+ "requires": {
+ "@rdfjs/data-model": "^1.0.1",
+ "@rdfjs/sink": "^1.0.2",
+ "n3": "^1.0.0-beta.1",
+ "readable-stream": "^2.3.6"
+ }
+ },
+ "@rdfjs/serializer-jsonld": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@rdfjs/serializer-jsonld/-/serializer-jsonld-1.2.1.tgz",
+ "integrity": "sha512-QGNpSEGNF+MzCqK6nCCfLgdaTFGIZceLPPg5dodJuDK4NeO0N6rpC8YGrrq0j1xR55A4+5IrEbHEu5LMdF5ZWQ==",
+ "dev": true,
+ "requires": {
+ "@rdfjs/sink": "^1.0.2",
+ "readable-stream": "^2.3.6"
+ }
+ },
+ "@rdfjs/serializer-ntriples": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@rdfjs/serializer-ntriples/-/serializer-ntriples-1.0.2.tgz",
+ "integrity": "sha512-5pIYhbkz5SIy7B2fkXHGAsC92VP8GPsf7aJ6UNA7OdabggVbOibPWJ9zTetxvxM7bQRez6FsvC7lPnTbZt4I4A==",
+ "dev": true,
+ "requires": {
+ "@rdfjs/sink": "^1.0.2",
+ "@rdfjs/to-ntriples": "^1.0.0",
+ "readable-stream": "^2.3.6"
+ }
+ },
+ "@rdfjs/sink": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@rdfjs/sink/-/sink-1.0.3.tgz",
+ "integrity": "sha512-2KfYa8mAnptRNeogxhQqkWNXqfYVWO04jQThtXKepySrIwYmz83+WlevQtA4VDLFe+kFd2TwgL29ekPe5XVUfA==",
+ "dev": true
+ },
+ "@rdfjs/sink-map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@rdfjs/sink-map/-/sink-map-1.0.1.tgz",
+ "integrity": "sha512-PRp5TjULHe2oRcupR80SClZ/l50wnSuX2Pl+TlkcRazt1w7AT86kLmQYFbDfjqGM7uDwSyD6evLJxXBDf5UuvQ==",
+ "dev": true
+ },
+ "@rdfjs/to-ntriples": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@rdfjs/to-ntriples/-/to-ntriples-1.0.2.tgz",
+ "integrity": "sha512-ngw5XAaGHjgGiwWWBPGlfdCclHftonmbje5lMys4G2j4NvfExraPIuRZgjSnd5lg4dnulRVUll8tRbgKO+7EDA==",
+ "dev": true
+ },
"@types/babel__core": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.1.tgz",
@@ -392,6 +520,21 @@
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.0.tgz",
"integrity": "sha512-eAtOAFZefEnfJiRFQBGw1eYqa5GTLCZ1y86N0XSI/D6EB+E8z6VPV/UL7Gi5UEclFqoQk+6NRqEDsfmDLXn8sg=="
},
+ "@types/node": {
+ "version": "12.6.8",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-12.6.8.tgz",
+ "integrity": "sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg==",
+ "dev": true
+ },
+ "@types/rdf-js": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@types/rdf-js/-/rdf-js-2.0.2.tgz",
+ "integrity": "sha512-rHtC0mtRmMc9JzITesWhzmAXqfyJZhY8MygmmWZc3oWS5DPsGsKs+t3RXxGYlM4UKOqlD9Ki4owS1Cx/GPMeqw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
"@types/stack-utils": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz",
@@ -402,6 +545,17 @@
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.12.tgz",
"integrity": "sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw=="
},
+ "@zazuko/rdf-vocabularies": {
+ "version": "2019.7.9-2",
+ "resolved": "https://registry.npmjs.org/@zazuko/rdf-vocabularies/-/rdf-vocabularies-2019.7.9-2.tgz",
+ "integrity": "sha512-hSbGpyB5pg3reISR7Ykj1V1i2BCNEZi1qclJlow6l7Nn6cHr/9kcQ3yfrU6t+/6pcuyPhhBI6gDNod466T3Xng==",
+ "dev": true,
+ "requires": {
+ "@rdfjs/parser-n3": "^1.1.2",
+ "rdf-ext": "^1.3.0",
+ "string-to-stream": "^1.1.1"
+ }
+ },
"abab": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz",
@@ -453,11 +607,43 @@
"uri-js": "^4.2.2"
}
},
+ "alcaeus": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/alcaeus/-/alcaeus-0.9.1.tgz",
+ "integrity": "sha512-YN2nPkUdN0Lm8XYz5+K+91RWICXxoCU4YMin6liPi0WaF31++iIBSiQcRsJgWH4uvfCP1WTZMg4yxvUoXtoAYg==",
+ "dev": true,
+ "requires": {
+ "@rdfjs/parser-jsonld": "^1.1.1",
+ "@rdfjs/serializer-jsonld": "^1.2.0",
+ "core-decorators": "^0.20.0",
+ "es6-url-template": "^1.0.3",
+ "gitbook-plugin-advanced-emoji": "^0.2.2",
+ "gitbook-plugin-etoc": "^1.2.2",
+ "gitbook-plugin-forkmegithub": "^2.2.0",
+ "gitbook-plugin-hints": "^1.0.2",
+ "gitbook-plugin-runkit": "0.0.1",
+ "isomorphic-fetch": "^2.2.1",
+ "jsonld": "^1.4.0",
+ "parse-link-header": "^1.0.1",
+ "rdf-ext": "^1.0.0",
+ "string-to-stream": "^1.1.0",
+ "tsmonad": "^0.8.0"
+ }
+ },
"ansi-escapes": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
"integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ=="
},
+ "ansi-red": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz",
+ "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=",
+ "dev": true,
+ "requires": {
+ "ansi-wrap": "0.1.0"
+ }
+ },
"ansi-regex": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
@@ -471,6 +657,12 @@
"color-convert": "^1.9.0"
}
},
+ "ansi-wrap": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
+ "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
+ "dev": true
+ },
"anymatch": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
@@ -572,6 +764,15 @@
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
},
+ "autolinker": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-0.28.1.tgz",
+ "integrity": "sha1-BlK0kYgYefB3XazgzcoyM5QqTkc=",
+ "dev": true,
+ "requires": {
+ "gulp-header": "^1.7.1"
+ }
+ },
"aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
@@ -877,6 +1078,15 @@
}
}
},
+ "clownface": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/clownface/-/clownface-0.10.0.tgz",
+ "integrity": "sha512-zQtNGpYJt4loB9UO+X8B2xpK3ddGGPZ4QwovysRFs+J95f5O3gpcBOTD4V/CXjNvEDujiz8Pc2MkS9Dup2/jQQ==",
+ "dev": true,
+ "requires": {
+ "@rdfjs/data-model": "^1.1.0"
+ }
+ },
"co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
@@ -887,6 +1097,12 @@
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
},
+ "coffee-script": {
+ "version": "1.12.7",
+ "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz",
+ "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==",
+ "dev": true
+ },
"collection-visit": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
@@ -920,8 +1136,7 @@
"commander": {
"version": "2.20.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
- "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==",
- "optional": true
+ "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ=="
},
"compare-versions": {
"version": "3.4.0",
@@ -938,6 +1153,27 @@
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "concat-with-sourcemaps": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz",
+ "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.6.1"
+ }
+ },
"content-disposition": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
@@ -976,6 +1212,12 @@
"resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
"integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
},
+ "core-decorators": {
+ "version": "0.20.0",
+ "resolved": "https://registry.npmjs.org/core-decorators/-/core-decorators-0.20.0.tgz",
+ "integrity": "sha1-YFiWYkBTr4wo775zXCWjAaYcZcU=",
+ "dev": true
+ },
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
@@ -1127,6 +1369,12 @@
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
},
+ "detect-file": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
+ "dev": true
+ },
"detect-newline": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
@@ -1159,11 +1407,26 @@
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
},
+ "emojify.js": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/emojify.js/-/emojify.js-1.1.0.tgz",
+ "integrity": "sha1-B5//IjMHyQB/VweF6OSTXVw5i+s=",
+ "dev": true
+ },
"encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
},
+ "encoding": {
+ "version": "0.1.12",
+ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
+ "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
+ "dev": true,
+ "requires": {
+ "iconv-lite": "~0.4.13"
+ }
+ },
"end-of-stream": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
@@ -1203,6 +1466,12 @@
"is-symbol": "^1.0.2"
}
},
+ "es6-url-template": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/es6-url-template/-/es6-url-template-1.0.3.tgz",
+ "integrity": "sha512-rODroLuBQoEM5mrfku5lOVNUg6fqG+qKyB/+hiam6wBopmXwONQ4t92TIHEwscCvxWb3SV04yNC0yyx2jC/bVA==",
+ "dev": true
+ },
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
@@ -1308,6 +1577,66 @@
}
}
},
+ "expand-range": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+ "dev": true,
+ "requires": {
+ "fill-range": "^2.1.0"
+ },
+ "dependencies": {
+ "fill-range": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
+ "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
+ "dev": true,
+ "requires": {
+ "is-number": "^2.1.0",
+ "isobject": "^2.0.0",
+ "randomatic": "^3.0.0",
+ "repeat-element": "^1.1.2",
+ "repeat-string": "^1.5.2"
+ }
+ },
+ "is-number": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "expand-tilde": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ },
"expect": {
"version": "24.7.1",
"resolved": "https://registry.npmjs.org/expect/-/expect-24.7.1.tgz",
@@ -1521,6 +1850,18 @@
"locate-path": "^3.0.0"
}
},
+ "findup-sync": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
+ "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
+ "dev": true,
+ "requires": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^3.1.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
+ }
+ },
"for-in": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
@@ -2081,6 +2422,49 @@
"assert-plus": "^1.0.0"
}
},
+ "gitbook-plugin-advanced-emoji": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/gitbook-plugin-advanced-emoji/-/gitbook-plugin-advanced-emoji-0.2.2.tgz",
+ "integrity": "sha1-CLzGn2KnSc1pIEQ1J2UYyUHDGeM=",
+ "dev": true,
+ "requires": {
+ "emojify.js": "^1.1.0"
+ }
+ },
+ "gitbook-plugin-etoc": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/gitbook-plugin-etoc/-/gitbook-plugin-etoc-1.2.2.tgz",
+ "integrity": "sha1-jeUwuEHS6taOGlH3J8F3jdMQb2I=",
+ "dev": true,
+ "requires": {
+ "github-slugid": "^1.0.1",
+ "markdown-toc": "^0.12.16"
+ }
+ },
+ "gitbook-plugin-forkmegithub": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/gitbook-plugin-forkmegithub/-/gitbook-plugin-forkmegithub-2.2.0.tgz",
+ "integrity": "sha1-tktioUArCZsbSMOWqdWwq6lnwEo=",
+ "dev": true
+ },
+ "gitbook-plugin-hints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/gitbook-plugin-hints/-/gitbook-plugin-hints-1.0.2.tgz",
+ "integrity": "sha1-5liZg+PqhHSfFtxjHigvr9Rew5s=",
+ "dev": true
+ },
+ "gitbook-plugin-runkit": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/gitbook-plugin-runkit/-/gitbook-plugin-runkit-0.0.1.tgz",
+ "integrity": "sha1-USykwRB3XuIySbrGEf1qZYj+H3I=",
+ "dev": true
+ },
+ "github-slugid": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/github-slugid/-/github-slugid-1.0.1.tgz",
+ "integrity": "sha1-vM3QgVv61p2KNZ+k/WWUfWBuw8A=",
+ "dev": true
+ },
"glob": {
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
@@ -2094,6 +2478,30 @@
"path-is-absolute": "^1.0.0"
}
},
+ "global-modules": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+ "dev": true,
+ "requires": {
+ "global-prefix": "^1.0.1",
+ "is-windows": "^1.0.1",
+ "resolve-dir": "^1.0.0"
+ }
+ },
+ "global-prefix": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "homedir-polyfill": "^1.0.1",
+ "ini": "^1.3.4",
+ "is-windows": "^1.0.1",
+ "which": "^1.2.14"
+ }
+ },
"globals": {
"version": "11.11.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz",
@@ -2104,11 +2512,46 @@
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
"integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA=="
},
+ "gray-matter": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-2.1.1.tgz",
+ "integrity": "sha1-MELZrewqHe1qdwep7SOA+KF6Qw4=",
+ "dev": true,
+ "requires": {
+ "ansi-red": "^0.1.1",
+ "coffee-script": "^1.12.4",
+ "extend-shallow": "^2.0.1",
+ "js-yaml": "^3.8.1",
+ "toml": "^2.3.2"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
"growly": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
"integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE="
},
+ "gulp-header": {
+ "version": "1.8.12",
+ "resolved": "https://registry.npmjs.org/gulp-header/-/gulp-header-1.8.12.tgz",
+ "integrity": "sha512-lh9HLdb53sC7XIZOYzTXM4lFuXElv3EVkSDhsd7DoJBj7hm+Ni7D3qYbb+Rr8DuM8nRanBvkVO9d7askreXGnQ==",
+ "dev": true,
+ "requires": {
+ "concat-with-sourcemaps": "*",
+ "lodash.template": "^4.4.0",
+ "through2": "^2.0.0"
+ }
+ },
"handlebars": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz",
@@ -2181,6 +2624,15 @@
}
}
},
+ "homedir-polyfill": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
+ "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+ "dev": true,
+ "requires": {
+ "parse-passwd": "^1.0.0"
+ }
+ },
"hosted-git-info": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
@@ -2215,6 +2667,87 @@
"sshpk": "^1.7.0"
}
},
+ "hydra-validator": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/hydra-validator/-/hydra-validator-1.0.4.tgz",
+ "integrity": "sha512-RWqCwKYpMJ2VCw7O0h1KSuP2+URqvc6++gK6GsItjqHFFHCpqGscTX4TBvrUIxM1BY3rj4oD47mJAsOgsTksxw==",
+ "dev": true,
+ "requires": {
+ "commander": "^2.20.0",
+ "debug": "^4.1.1",
+ "hydra-validator-core": "^0.3.1",
+ "matchdep": "^2.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
+ }
+ },
+ "hydra-validator-analyse": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/hydra-validator-analyse/-/hydra-validator-analyse-0.1.3.tgz",
+ "integrity": "sha512-FaavxTMTkN+s0F4SUsrtEfu5lc2LSJqifg7EXY0+ky+EKK+LWh/IKALBANCmZ4nc8l5/KTWtQPocOKG45pQ+5Q==",
+ "dev": true,
+ "requires": {
+ "@rdfjs/fetch-lite": "^2.0.0",
+ "@rdfjs/formats-common": "^2.0.0",
+ "clownface": "^0.10.0",
+ "hydra-validator-core": "^0.3.1",
+ "parse-link-header": "^1.0.1",
+ "rdf-ext": "^1.3.0"
+ }
+ },
+ "hydra-validator-core": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/hydra-validator-core/-/hydra-validator-core-0.3.1.tgz",
+ "integrity": "sha512-vkcJkYazqJEES8WRiPtkbOSRWVFSJEtJXdMIDd6FR0q43pxQt3zSc0v2gVf3eug2N3xUaysFOhUiHsQrNR4paA==",
+ "dev": true,
+ "requires": {
+ "@rdfjs/namespace": "^1.0.0"
+ }
+ },
+ "hydra-validator-e2e": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/hydra-validator-e2e/-/hydra-validator-e2e-0.4.2.tgz",
+ "integrity": "sha512-ShHferfrsimbjh4JYHIUys8u8hYPDuL7nEbXKFtgLzBj/Ce8K0IG9BWx9925eZsWHz32bs50Jk21HI9aOu21XA==",
+ "dev": true,
+ "requires": {
+ "@zazuko/rdf-vocabularies": "^2019.7.9-2",
+ "alcaeus": "^0.9.1",
+ "escape-string-regexp": "^2.0.0",
+ "hydra-validator-core": "^0.3.4"
+ },
+ "dependencies": {
+ "escape-string-regexp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+ "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
+ "dev": true
+ },
+ "hydra-validator-core": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/hydra-validator-core/-/hydra-validator-core-0.3.4.tgz",
+ "integrity": "sha512-Wn4SfSfb7v/6FeeZMm+pFrtqI4xIMnb2BDbwpq1cdMc6vh8JvyoJK45JbktDYcQBC6sdFGN9ADFFl0jj6rv6/w==",
+ "dev": true,
+ "requires": {
+ "@rdfjs/namespace": "^1.0.0"
+ }
+ }
+ }
+ },
"iconv-lite": {
"version": "0.4.23",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
@@ -2251,6 +2784,18 @@
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "dev": true
+ },
+ "interpret": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
+ "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==",
+ "dev": true
+ },
"invariant": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
@@ -2355,6 +2900,12 @@
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
"integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
},
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
"is-fullwidth-code-point": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
@@ -2365,6 +2916,15 @@
"resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
"integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ=="
},
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ },
"is-number": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
@@ -2442,6 +3002,16 @@
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
},
+ "isomorphic-fetch": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
+ "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
+ "dev": true,
+ "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",
@@ -3028,6 +3598,18 @@
"minimist": "^1.2.0"
}
},
+ "jsonld": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-1.6.2.tgz",
+ "integrity": "sha512-eMzFHqhF2kPMrMUjw8+Lz9IF1QkrxTOIfVndkP/OpuoZs31VdDtfDs8mLa5EOC/ROdemFTQGLdYPZbRtmMe2Yw==",
+ "dev": true,
+ "requires": {
+ "rdf-canonize": "^1.0.2",
+ "request": "^2.88.0",
+ "semver": "^5.6.0",
+ "xmldom": "0.1.19"
+ }
+ },
"jsprim": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
@@ -3049,6 +3631,15 @@
"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
"integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="
},
+ "lazy-cache": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz",
+ "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=",
+ "dev": true,
+ "requires": {
+ "set-getter": "^0.1.0"
+ }
+ },
"lcid": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
@@ -3076,6 +3667,47 @@
"type-check": "~0.3.2"
}
},
+ "list-item": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/list-item/-/list-item-1.1.1.tgz",
+ "integrity": "sha1-DGXQDih8tmPMs8s4Sad+iewmilY=",
+ "dev": true,
+ "requires": {
+ "expand-range": "^1.8.1",
+ "extend-shallow": "^2.0.1",
+ "is-number": "^2.1.0",
+ "repeat-string": "^1.5.2"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-number": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
"load-json-file": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
@@ -3101,11 +3733,36 @@
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
"integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
},
+ "lodash._reinterpolate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+ "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
+ "dev": true
+ },
"lodash.sortby": {
"version": "4.7.0",
"resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
"integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg="
},
+ "lodash.template": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz",
+ "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "^3.0.0",
+ "lodash.templatesettings": "^4.0.0"
+ }
+ },
+ "lodash.templatesettings": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz",
+ "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "^3.0.0"
+ }
+ },
"loose-envify": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
@@ -3159,6 +3816,49 @@
"object-visit": "^1.0.0"
}
},
+ "markdown-link": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/markdown-link/-/markdown-link-0.1.1.tgz",
+ "integrity": "sha1-MsXGUZmmRXMWMi0eQinRNAfIx88=",
+ "dev": true
+ },
+ "markdown-toc": {
+ "version": "0.12.16",
+ "resolved": "https://registry.npmjs.org/markdown-toc/-/markdown-toc-0.12.16.tgz",
+ "integrity": "sha1-jxT0uUswx4XzZAITzOoMMAH3n7M=",
+ "dev": true,
+ "requires": {
+ "concat-stream": "^1.5.1",
+ "gray-matter": "^2.0.2",
+ "lazy-cache": "^2.0.1",
+ "list-item": "^1.1.1",
+ "markdown-link": "^0.1.1",
+ "minimist": "^1.2.0",
+ "mixin-deep": "^1.1.3",
+ "object.pick": "^1.1.2",
+ "remarkable": "^1.6.2",
+ "repeat-string": "^1.5.4",
+ "strip-color": "^0.1.0"
+ }
+ },
+ "matchdep": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz",
+ "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=",
+ "dev": true,
+ "requires": {
+ "findup-sync": "^2.0.0",
+ "micromatch": "^3.0.4",
+ "resolve": "^1.4.0",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "math-random": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz",
+ "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==",
+ "dev": true
+ },
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@@ -3287,6 +3987,12 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
+ "n3": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/n3/-/n3-1.1.1.tgz",
+ "integrity": "sha512-GEJXn+wc0f4l2noP1N/rMUH9Gei1DQ8IDN03eBsH+uQKkNQUOLgL7ZJVaDjY+pP3LmbLxL1LpUg/AvZ7Kc7KVw==",
+ "dev": true
+ },
"nan": {
"version": "2.13.2",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz",
@@ -3331,6 +4037,22 @@
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
},
+ "node-fetch": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
+ "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
+ "dev": true,
+ "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",
+ "integrity": "sha512-vFMQIWt+J/7FLNyKouZ9TazT74PRV3wgv9UT4cRjC8BffxFbKXkgIWR42URCPSnHm/QDz6BOlb2Q0U4+VQT67Q==",
+ "dev": true
+ },
"node-int64": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
@@ -3353,6 +4075,18 @@
"which": "^1.3.0"
}
},
+ "nodeify-fetch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/nodeify-fetch/-/nodeify-fetch-2.0.0.tgz",
+ "integrity": "sha512-0hA8trU59bKsIjmSYfHdRnO9Ro4EgpKR+I8Akubv84uEW6NOjTbH1CWLEbis3e+u1M0fbCbAIImMlf92Bj67wQ==",
+ "dev": true,
+ "requires": {
+ "concat-stream": "^1.6.0",
+ "isomorphic-fetch": "^2.2.1",
+ "readable-error": "^1.0.0",
+ "readable-stream": "^2.2.6"
+ }
+ },
"normalize-package-data": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
@@ -3573,6 +4307,21 @@
"json-parse-better-errors": "^1.0.1"
}
},
+ "parse-link-header": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-link-header/-/parse-link-header-1.0.1.tgz",
+ "integrity": "sha1-vt/g0hGK64S+deewJUGeyKYRQKc=",
+ "dev": true,
+ "requires": {
+ "xtend": "~4.0.1"
+ }
+ },
+ "parse-passwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
+ "dev": true
+ },
"parse5": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
@@ -3720,6 +4469,25 @@
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
"integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
},
+ "randomatic": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz",
+ "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==",
+ "dev": true,
+ "requires": {
+ "is-number": "^4.0.0",
+ "kind-of": "^6.0.0",
+ "math-random": "^1.0.1"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ }
+ }
+ },
"range-parser": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
@@ -3736,6 +4504,57 @@
"unpipe": "1.0.0"
}
},
+ "rdf-canonize": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-1.0.3.tgz",
+ "integrity": "sha512-piLMOB5Q6LJSVx2XzmdpHktYVb8TmVTy8coXJBFtdkcMC96DknZOuzpAYqCWx2ERZX7xEW+mMi8/wDuMJS/95w==",
+ "dev": true,
+ "requires": {
+ "node-forge": "^0.8.1",
+ "semver": "^5.6.0"
+ }
+ },
+ "rdf-dataset-indexed": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/rdf-dataset-indexed/-/rdf-dataset-indexed-0.4.0.tgz",
+ "integrity": "sha512-xIZ3PGwBHh1DVax9FTq/zhJcrdJTkCgRT2xolF5ZhKj0EOFoT6wdITyfxKSmnD6YNyGyng5F5o2SR62TYask3Q==",
+ "dev": true,
+ "requires": {
+ "@rdfjs/data-model": "^1.1.1",
+ "readable-stream": "^3.3.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
+ "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "rdf-ext": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/rdf-ext/-/rdf-ext-1.3.0.tgz",
+ "integrity": "sha512-bzkJpINH1uZgAeSIlE7K1nLF6Y82vGi9U9sBRuiz864pNk/31ba3dw+yLoIkcvQsPcVwnKBVLvGCR3dvD9xM+Q==",
+ "dev": true,
+ "requires": {
+ "@rdfjs/data-model": "^1.1.0",
+ "@rdfjs/to-ntriples": "^1.0.1",
+ "rdf-dataset-indexed": "^0.4.0",
+ "rdf-normalize": "^1.0.0"
+ }
+ },
+ "rdf-normalize": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/rdf-normalize/-/rdf-normalize-1.0.0.tgz",
+ "integrity": "sha1-U0lrrzYszp2fyh8iFsbDAAf5nMo=",
+ "dev": true
+ },
"react-is": {
"version": "16.8.6",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz",
@@ -3760,6 +4579,15 @@
"read-pkg": "^3.0.0"
}
},
+ "readable-error": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/readable-error/-/readable-error-1.0.0.tgz",
+ "integrity": "sha512-CLnInu5bUphmFiZ3pD/BC6+Cg4/BzK6ZMvWfd0b2QMzYo159Z/f/nVFQ9L5IeMrqUxy0EFsp3XJ+BRfLfY13IQ==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.3.3"
+ }
+ },
"readable-stream": {
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
@@ -3782,6 +4610,15 @@
"util.promisify": "^1.0.0"
}
},
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+ "dev": true,
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
"regex-not": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
@@ -3791,6 +4628,16 @@
"safe-regex": "^1.1.0"
}
},
+ "remarkable": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/remarkable/-/remarkable-1.7.4.tgz",
+ "integrity": "sha512-e6NKUXgX95whv7IgddywbeN/ItCkWbISmc2DiqHJb0wTrqZIexqdco5b8Z3XZoo/48IdNVKM9ZCvTPJ4F5uvhg==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.10",
+ "autolinker": "~0.28.0"
+ }
+ },
"remove-trailing-separator": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
@@ -3893,6 +4740,16 @@
"resolve-from": "^3.0.0"
}
},
+ "resolve-dir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.0",
+ "global-modules": "^1.0.0"
+ }
+ },
"resolve-from": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
@@ -4001,6 +4858,20 @@
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
},
+ "set-getter": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.0.tgz",
+ "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=",
+ "dev": true,
+ "requires": {
+ "to-object-path": "^0.3.0"
+ }
+ },
+ "set-link": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/set-link/-/set-link-1.0.0.tgz",
+ "integrity": "sha512-F4pCvHW0RgPXi6ZSRq6dZibWJgNCls/I5W2hZhWtmGYHFgrn0eqlR+u0bIY6rv1DEe5mMJ+PyCERpGIDnnGhyA=="
+ },
"set-value": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
@@ -4040,6 +4911,17 @@
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
"integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
},
+ "shelljs": {
+ "version": "0.7.8",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz",
+ "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=",
+ "dev": true,
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
"shellwords": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
@@ -4250,6 +5132,12 @@
"tweetnacl": "~0.14.0"
}
},
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
"stack-utils": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz",
@@ -4308,6 +5196,16 @@
}
}
},
+ "string-to-stream": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string-to-stream/-/string-to-stream-1.1.1.tgz",
+ "integrity": "sha512-QySF2+3Rwq0SdO3s7BAp4x+c3qsClpPQ6abAmb0DGViiSBAkT5kL6JT2iyzEVP+T1SmzHrQD1TwlP9QAHCc+Sw==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.1.0"
+ }
+ },
"string-width": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
@@ -4353,6 +5251,12 @@
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
"integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM="
},
+ "strip-color": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/strip-color/-/strip-color-0.1.0.tgz",
+ "integrity": "sha1-EG9l09PmotlAHKwOsM6LinArT3s=",
+ "dev": true
+ },
"strip-eof": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
@@ -4428,6 +5332,16 @@
"resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz",
"integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo="
},
+ "through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
"tmpl": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
@@ -4476,6 +5390,12 @@
"repeat-string": "^1.6.1"
}
},
+ "toml": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/toml/-/toml-2.3.6.tgz",
+ "integrity": "sha512-gVweAectJU3ebq//Ferr2JUY4WKSDe5N+z0FvjDncLGyHmIDoxgY/2Ie4qfEIDm4IS7OA6Rmdm7pdEEdMcV/xQ==",
+ "dev": true
+ },
"tough-cookie": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
@@ -4498,6 +5418,12 @@
"resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
"integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM="
},
+ "tsmonad": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/tsmonad/-/tsmonad-0.8.0.tgz",
+ "integrity": "sha1-zjzxMZLzI9uPeMgfVKX1vEohMPw=",
+ "dev": true
+ },
"tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
@@ -4528,6 +5454,12 @@
"mime-types": "~2.1.18"
}
},
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
"uglify-js": {
"version": "3.5.4",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.4.tgz",
@@ -4716,6 +5648,12 @@
}
}
},
+ "whatwg-fetch": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz",
+ "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==",
+ "dev": true
+ },
"whatwg-mimetype": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
@@ -4819,6 +5757,18 @@
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
"integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw=="
},
+ "xmldom": {
+ "version": "0.1.19",
+ "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.19.tgz",
+ "integrity": "sha1-Yx/Ad3bv2EEYvyUXGzftTQdaCrw=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "dev": true
+ },
"y18n": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
diff --git a/movies/package.json b/movies/package.json
index 455299a..d2ec0f1 100644
--- a/movies/package.json
+++ b/movies/package.json
@@ -4,7 +4,10 @@
"description": "An example of a Hydra API, that allows to manage movie resources.",
"main": "src/index.js",
"scripts": {
- "test": "jest",
+ "hypertest-compile": "hypertest-compiler src/tests",
+ "test": "jest; npm run test:analyse; npm run test:e2e",
+ "test:analyse": "hydra-validator analyse http://localhost:3000",
+ "test:e2e": "npm run hypertest-compile; hydra-validator e2e --docs src/tests/tests.hydra.json http://localhost:3000",
"start": "node src/index.js"
},
"keywords": [
@@ -16,6 +19,13 @@
"dependencies": {
"express": "^4.16.4",
"jest": "^24.7.1",
- "supertest": "^4.0.2"
+ "supertest": "^4.0.2",
+ "set-link": "^1.0.0"
+ },
+ "devDependencies": {
+ "@hydrofoil/hypertest": "^0.5.0",
+ "hydra-validator": "^1.0.4",
+ "hydra-validator-analyse": "^0.1.3",
+ "hydra-validator-e2e": "^0.4.2"
}
}
diff --git a/movies/readme.md b/movies/readme.md
index f43a1e7..12d98c4 100644
--- a/movies/readme.md
+++ b/movies/readme.md
@@ -17,4 +17,21 @@ To explore the API on the web take a look at the [live demo](https://hydra-movie
### Developer documentation
-See `./docs` directory.`
\ No newline at end of file
+See `./docs` directory.`
+
+### Running tests
+
+1. Start the local server
+
+ npm start
+
+2. Run hydra analyser and [hypertest](http://testing.hypermedia.app)
+
+ npm test
+
+The `test:analyse` script performs a static analysis of the API Documentation using [hydra-validator-analyse](https://www.npmjs.com/package/hydra-validator-analyse).
+
+The script `test:e2e` runs the scenarios defined in `src/tests/*.hydra`. These scenarios
+are written in hydra flavour of [Hypertest DSL](https://testing.hypermedia.app/dsl/).
+
+Additionally, jest script is included to run tests not (yet) possible in Hypertest.
diff --git a/movies/src/app.js b/movies/src/app.js
index c7c2070..218bf08 100644
--- a/movies/src/app.js
+++ b/movies/src/app.js
@@ -1,13 +1,15 @@
const express = require('express');
const path = require('path');
+const setLink = require('set-link');
const app = express();
+app.use(setLink);
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Expose-Headers', 'Location, Link');
res.header('Access-Control-Allow-Headers', 'Content-Type');
- res.header('Link', '; rel="http://www.w3.org/ns/hydra/core#apiDocumentation"');
+ res.setLink('/doc', 'http://www.w3.org/ns/hydra/core#apiDocumentation');
next();
});
diff --git a/movies/src/index.js b/movies/src/index.js
index ff9f0bb..507bae9 100644
--- a/movies/src/index.js
+++ b/movies/src/index.js
@@ -14,6 +14,10 @@ app.post('/movies', (req, res) => {
"@context": "/context.jsonld",
"@id": "/movies/d517cae6-6cdc-11e9-a923-1681be663d3e",
"@type": "schema:Movie",
- "schema:name": "Fake Movie"
+ "schema:name": "Fake Movie",
+ "schema:duration": {
+ "@value": "PT115M",
+ "@type": "schema:Duration"
+ }
});
});
diff --git a/movies/src/tests/tests.hydra b/movies/src/tests/tests.hydra
new file mode 100644
index 0000000..701b862
--- /dev/null
+++ b/movies/src/tests/tests.hydra
@@ -0,0 +1,34 @@
+PREFIX schema:
+PREFIX hydra:
+PREFIX mov:
+
+With Class schema:EntryPoint {
+ Expect Property hydra:collection {
+ Expect Type hydra:Collection
+ Expect Type mov:Movies
+ }
+
+ Expect Link hydra:collection /*{
+ Expect Status 200
+ }*/
+}
+
+With Class mov:Movies {
+ Expect Operation mov:create-movie {
+ Invoke {
+ Content-Type "text/turtle"
+
+ ```
+ @prefix schema:
+ @prefix mov:
+
+ <> a mov:Movie ;
+ schema:name "Fake Movie"
+ ```
+ } => {
+ Expect Status 201
+ Expect Type schema:Movie
+ Expect Property schema:name "Fake Movie"
+ }
+ }
+}