diff --git a/client/components/admin-dev.vue b/client/components/admin-dev.vue
index abe4f540..30afef06 100644
--- a/client/components/admin-dev.vue
+++ b/client/components/admin-dev.vue
@@ -1,19 +1,163 @@
- v-container(fluid, fill-height)
- v-layout(row wrap)
- v-flex(xs12)
+ v-card(flat)
+ v-card(color='grey lighten-5')
+ .pa-3.pt-4
.headline.primary--text Developer Tools
.subheading.grey--text ¯\_(ツ)_/¯
+ v-tabs(color='grey lighten-4', fixed-tabs, slider-color='primary', show-arrows)
+ v-tab Graph API Playground
+ v-tab Graph API Map
+
+ v-tab-item(:transition='false', :reverse-transition='false')
+ #graphiql
diff --git a/client/components/admin.vue b/client/components/admin.vue
index 51ac88c0..f7ad6fe6 100644
--- a/client/components/admin.vue
+++ b/client/components/admin.vue
@@ -91,7 +91,7 @@ const router = new VueRouter({
{ path: '/api', component: () => import(/* webpackChunkName: "admin" */ './admin-api.vue') },
{ path: '/system', component: () => import(/* webpackChunkName: "admin" */ './admin-system.vue') },
{ path: '/utilities', component: () => import(/* webpackChunkName: "admin" */ './admin-utilities.vue') },
- { path: '/dev', component: () => import(/* webpackChunkName: "admin" */ './admin-dev.vue') }
+ { path: '/dev', component: () => import(/* webpackChunkName: "admin-dev" */ './admin-dev.vue') }
]
})
diff --git a/client/scss/app.scss b/client/scss/app.scss
index df01203e..b9a798b9 100644
--- a/client/scss/app.scss
+++ b/client/scss/app.scss
@@ -14,7 +14,9 @@
// @import '../libs/twemoji/twemoji-awesome';
@import '../libs/prism/prism.css';
-@import 'node_modules/diff2html/dist/diff2html.min';
+// @import 'node_modules/diff2html/dist/diff2html.min';
+
+@import 'node_modules/graphiql/graphiql';
@import 'pages/welcome';
diff --git a/dev/webpack/webpack.common.js b/dev/webpack/webpack.common.js
index 26584d18..213e286e 100644
--- a/dev/webpack/webpack.common.js
+++ b/dev/webpack/webpack.common.js
@@ -209,6 +209,10 @@ module.exports = {
loader: 'raw-loader'
}
]
+ },
+ {
+ test: /\.flow$/,
+ loader: 'ignore-loader'
}
]
},
diff --git a/package.json b/package.json
index 46a46c02..e5dd53bc 100644
--- a/package.json
+++ b/package.json
@@ -172,9 +172,11 @@
"eslint-plugin-vue": "4.3.0",
"extract-text-webpack-plugin": "3.0.2",
"file-loader": "1.1.11",
+ "graphiql": "0.11.11",
"graphql-tag": "^2.8.0",
"hammerjs": "2.0.8",
"i18next-xhr-backend": "1.5.1",
+ "ignore-loader": "0.1.2",
"jest": "22.4.2",
"jest-junit": "3.6.0",
"js-cookie": "2.2.0",
@@ -189,6 +191,8 @@
"postcss-selector-parser": "3.1.1",
"pug-lint": "2.5.0",
"raw-loader": "0.5.1",
+ "react": "16.2.0",
+ "react-dom": "16.2.0",
"sass-loader": "6.0.7",
"sass-resources-loader": "1.3.3",
"simple-progress-webpack-plugin": "1.1.2",
diff --git a/yarn.lock b/yarn.lock
index 872f8a3b..31f8c150 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -106,12 +106,20 @@
version "1.0.2"
resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-1.0.2.tgz#b02d10ab028e2928ac592a051aaa4981a1941d03"
+"@types/graphql@0.11.7":
+ version "0.11.7"
+ resolved "https://registry.yarnpkg.com/@types/graphql/-/graphql-0.11.7.tgz#da39a2f7c74e793e32e2bb7b3b68da1691532dd5"
+
"@types/ldapjs@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@types/ldapjs/-/ldapjs-1.0.0.tgz#d940cb412140caec14edaa9c76d5b92799dab495"
dependencies:
"@types/node" "*"
+"@types/lodash@^4.14.85":
+ version "4.14.105"
+ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.105.tgz#9fcc4627a1f98f8f8fce79ddb2bff4afd97e959b"
+
"@types/mime@*":
version "1.3.1"
resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.1.tgz#2cf42972d0931c1060c7d5fa6627fce6bd876f2f"
@@ -2272,6 +2280,17 @@ code-point-at@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+codemirror-graphql@^0.6.11:
+ version "0.6.12"
+ resolved "https://registry.yarnpkg.com/codemirror-graphql/-/codemirror-graphql-0.6.12.tgz#91a273fe5188857524a30221d06e645b4ca41f00"
+ dependencies:
+ graphql-language-service-interface "^1.0.16"
+ graphql-language-service-parser "^0.1.14"
+
+codemirror@^5.26.0:
+ version "5.35.0"
+ resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.35.0.tgz#280653d495455bc66aa87e6284292b02775ba878"
+
codemirror@^5.32.0:
version "5.34.0"
resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.34.0.tgz#e345dcc09a6149db65cc70dff9d389c1c4b0cd06"
@@ -2538,7 +2557,7 @@ copy-webpack-plugin@4.5.1:
p-limit "^1.0.0"
serialize-javascript "^1.4.0"
-core-js@^1.1.1:
+core-js@^1.0.0, core-js@^1.1.1:
version "1.2.7"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
@@ -2621,6 +2640,13 @@ cron@^1.3:
dependencies:
moment-timezone "^0.5.x"
+cross-fetch@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-2.0.0.tgz#a17475449561e0f325146cea636a8619efb9b382"
+ dependencies:
+ node-fetch "2.0.0"
+ whatwg-fetch "2.0.3"
+
cross-fetch@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-1.1.1.tgz#dede6865ae30f37eae62ac90ebb7bdac002b05a0"
@@ -3854,6 +3880,18 @@ fb-watchman@^2.0.0:
dependencies:
bser "^2.0.0"
+fbjs@^0.8.16:
+ version "0.8.16"
+ resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db"
+ dependencies:
+ core-js "^1.0.0"
+ isomorphic-fetch "^2.1.1"
+ loose-envify "^1.0.0"
+ object-assign "^4.1.0"
+ promise "^7.1.1"
+ setimmediate "^1.0.5"
+ ua-parser-js "^0.7.9"
+
fclone@1.0.11, fclone@^1:
version "1.0.11"
resolved "https://registry.yarnpkg.com/fclone/-/fclone-1.0.11.tgz#10e85da38bfea7fc599341c296ee1d77266ee640"
@@ -4303,12 +4341,31 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.6,
version "1.0.1"
resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
+graphiql@0.11.11:
+ version "0.11.11"
+ resolved "https://registry.yarnpkg.com/graphiql/-/graphiql-0.11.11.tgz#eeaf9a38927dbe8c6ecbf81e700735e16ec50e71"
+ dependencies:
+ codemirror "^5.26.0"
+ codemirror-graphql "^0.6.11"
+ markdown-it "^8.4.0"
+
graphql-anywhere@^4.1.5:
version "4.1.5"
resolved "https://registry.yarnpkg.com/graphql-anywhere/-/graphql-anywhere-4.1.5.tgz#552ccd27b79a13a899022e20f658a2c2cb75e251"
dependencies:
apollo-utilities "^1.0.8"
+graphql-config@1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/graphql-config/-/graphql-config-1.1.4.tgz#af09659f877b96451838de456e4e4f4be45be6dd"
+ dependencies:
+ graphql "^0.12.3"
+ graphql-import "^0.1.7"
+ graphql-request "^1.4.0"
+ js-yaml "^3.10.0"
+ minimatch "^3.0.4"
+ rimraf "^2.6.2"
+
graphql-extensions@^0.0.x:
version "0.0.5"
resolved "https://registry.yarnpkg.com/graphql-extensions/-/graphql-extensions-0.0.5.tgz#63bc4a3fd31aab12bfadf783cbc038a9a6937cf0"
@@ -4316,10 +4373,64 @@ graphql-extensions@^0.0.x:
core-js "^2.5.1"
source-map-support "^0.5.0"
+graphql-import@^0.1.7:
+ version "0.1.9"
+ resolved "https://registry.yarnpkg.com/graphql-import/-/graphql-import-0.1.9.tgz#9161f4f7ea92337b60fd40e22e64d3a68c212729"
+ dependencies:
+ "@types/graphql" "0.11.7"
+ "@types/lodash" "^4.14.85"
+ graphql "^0.12.3"
+ lodash "^4.17.4"
+
+graphql-language-service-interface@^1.0.16:
+ version "1.0.18"
+ resolved "https://registry.yarnpkg.com/graphql-language-service-interface/-/graphql-language-service-interface-1.0.18.tgz#c0fc1ef72c6f6f4bf9042bd7a8a8a66e0772caa8"
+ dependencies:
+ graphql-config "1.1.4"
+ graphql-language-service-parser "^1.0.18"
+ graphql-language-service-types "^1.0.18"
+ graphql-language-service-utils "^1.0.18"
+
+graphql-language-service-parser@^0.1.14:
+ version "0.1.14"
+ resolved "https://registry.yarnpkg.com/graphql-language-service-parser/-/graphql-language-service-parser-0.1.14.tgz#dd25abda5dcff4f2268c9a19e026004271491661"
+ dependencies:
+ graphql-language-service-types "^0.1.14"
+
+graphql-language-service-parser@^1.0.18:
+ version "1.0.18"
+ resolved "https://registry.yarnpkg.com/graphql-language-service-parser/-/graphql-language-service-parser-1.0.18.tgz#80fe714f244fc81bc0352d0008ecafdf8fa75fe8"
+ dependencies:
+ graphql-config "1.1.4"
+ graphql-language-service-types "^1.0.18"
+
+graphql-language-service-types@^0.1.14:
+ version "0.1.14"
+ resolved "https://registry.yarnpkg.com/graphql-language-service-types/-/graphql-language-service-types-0.1.14.tgz#e6112785fc23ea8222f59a7f00e61b359f263c88"
+
+graphql-language-service-types@^1.0.18:
+ version "1.0.18"
+ resolved "https://registry.yarnpkg.com/graphql-language-service-types/-/graphql-language-service-types-1.0.18.tgz#0c9ebb6dd7babd61bf6b3bea0675abde5d7e5b16"
+ dependencies:
+ graphql-config "1.1.4"
+
+graphql-language-service-utils@^1.0.18:
+ version "1.0.18"
+ resolved "https://registry.yarnpkg.com/graphql-language-service-utils/-/graphql-language-service-utils-1.0.18.tgz#133fd0ce8ce360aad09c41feb47015eb7878cd3a"
+ dependencies:
+ graphql-config "1.1.4"
+ graphql-language-service-types "^1.0.18"
+
graphql-list-fields@2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/graphql-list-fields/-/graphql-list-fields-2.0.1.tgz#06d921eddfbadafa66970e21ff0acdab3cf039db"
+graphql-request@^1.4.0:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-1.5.1.tgz#cccdf5cce6432ca062b90f7b63793c77c821ff9a"
+ dependencies:
+ cross-fetch "2.0.0"
+
graphql-tag@^2.4.2:
version "2.5.0"
resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.5.0.tgz#b43bfd8b5babcd2c205ad680c03e98b238934e0f"
@@ -4344,6 +4455,12 @@ graphql@0.13.1:
dependencies:
iterall "^1.2.0"
+graphql@^0.12.3:
+ version "0.12.3"
+ resolved "https://registry.yarnpkg.com/graphql/-/graphql-0.12.3.tgz#11668458bbe28261c0dcb6e265f515ba79f6ce07"
+ dependencies:
+ iterall "1.1.3"
+
growly@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
@@ -4663,6 +4780,10 @@ iferr@^0.1.5:
version "0.1.5"
resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
+ignore-loader@0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/ignore-loader/-/ignore-loader-0.1.2.tgz#d81f240376d0ba4f0d778972c3ad25874117a463"
+
ignore@^3.3.3:
version "3.3.3"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.3.tgz#432352e57accd87ab3110e82d3fea0e47812156d"
@@ -5156,6 +5277,13 @@ isobject@^3.0.0, isobject@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+isomorphic-fetch@^2.1.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
+ dependencies:
+ node-fetch "^1.0.1"
+ whatwg-fetch ">=0.10.0"
+
isstream@0.1.x, isstream@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
@@ -5233,6 +5361,10 @@ istanbul-reports@^1.1.3:
dependencies:
handlebars "^4.0.3"
+iterall@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.1.3.tgz#1cbbff96204056dde6656e2ed2e2226d0e6d72c9"
+
iterall@^1.1.3:
version "1.1.4"
resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.1.4.tgz#0db40d38fdcf53ae14dc8ec674e62ab190d52cfc"
@@ -5538,7 +5670,7 @@ js-tokens@^3.0.0, js-tokens@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
-js-yaml@3.11.0:
+js-yaml@3.11.0, js-yaml@^3.10.0:
version "3.11.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef"
dependencies:
@@ -6129,7 +6261,7 @@ longest@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
-loose-envify@^1.0.0:
+loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
dependencies:
@@ -6239,7 +6371,7 @@ markdown-it-task-lists@2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/markdown-it-task-lists/-/markdown-it-task-lists-2.1.1.tgz#f68f4d2ac2bad5a2c373ba93081a1a6848417088"
-markdown-it@8.4.1:
+markdown-it@8.4.1, markdown-it@^8.4.0:
version "8.4.1"
resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.4.1.tgz#206fe59b0e4e1b78a7c73250af9b34a4ad0aaf44"
dependencies:
@@ -6641,13 +6773,17 @@ node-2fa@1.1.2:
notp "^2.0.3"
thirty-two "0.0.2"
-node-fetch@1.7.3:
+node-fetch@1.7.3, node-fetch@^1.0.1:
version "1.7.3"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
dependencies:
encoding "^0.1.11"
is-stream "^1.0.1"
+node-fetch@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.0.0.tgz#982bba43ecd4f2922a29cc186a6bbb0bb73fcba6"
+
node-fingerprint@0.0.2:
version "0.0.2"
resolved "https://registry.yarnpkg.com/node-fingerprint/-/node-fingerprint-0.0.2.tgz#31cbabeb71a67ae7dd5a7dc042e51c3c75868501"
@@ -8144,7 +8280,7 @@ promise-polyfill@^6.0.1:
version "6.0.2"
resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-6.0.2.tgz#d9c86d3dc4dc2df9016e88946defd69b49b41162"
-promise@7.x, promise@^7.0.1:
+promise@7.x, promise@^7.0.1, promise@^7.1.1:
version "7.3.1"
resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
dependencies:
@@ -8156,6 +8292,14 @@ promptly@2.2.0:
dependencies:
read "^1.0.4"
+prop-types@^15.6.0:
+ version "15.6.1"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca"
+ dependencies:
+ fbjs "^0.8.16"
+ loose-envify "^1.3.1"
+ object-assign "^4.1.1"
+
proxy-addr@~2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.2.tgz#6571504f47bb988ec8180253f85dd7e14952bdec"
@@ -8441,6 +8585,24 @@ rc@^1.1.7:
minimist "^1.2.0"
strip-json-comments "~2.0.1"
+react-dom@16.2.0:
+ version "16.2.0"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044"
+ dependencies:
+ fbjs "^0.8.16"
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+ prop-types "^15.6.0"
+
+react@16.2.0:
+ version "16.2.0"
+ resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba"
+ dependencies:
+ fbjs "^0.8.16"
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+ prop-types "^15.6.0"
+
read-chunk@2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-2.1.0.tgz#6a04c0928005ed9d42e1a6ac5600e19cbc7ff655"
@@ -9122,7 +9284,7 @@ set-value@^2.0.0:
is-plain-object "^2.0.3"
split-string "^3.0.1"
-setimmediate@^1.0.4:
+setimmediate@^1.0.4, setimmediate@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
@@ -9866,6 +10028,10 @@ typedarray@^0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ua-parser-js@^0.7.9:
+ version "0.7.17"
+ resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac"
+
uc.micro@^1.0.1:
version "1.0.3"
resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.3.tgz#7ed50d5e0f9a9fb0a573379259f2a77458d50192"
@@ -10416,7 +10582,7 @@ whatwg-encoding@^1.0.1:
dependencies:
iconv-lite "0.4.13"
-whatwg-fetch@2.0.3, whatwg-fetch@^2.0.3:
+whatwg-fetch@2.0.3, whatwg-fetch@>=0.10.0, whatwg-fetch@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84"