The foundation has been laid

This commit is contained in:
Mark Eibes 2020-04-29 10:04:38 +02:00
parent 6c57a5570c
commit 148366ac5d
17 changed files with 931 additions and 172 deletions

View File

@ -1 +1 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 39 34" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><path d="M0,33.021l12.425,-21.521l3.753,6.5l-8.672,15.021l-7.506,0Zm24.85,0l-11.571,0l5.785,-10.021l5.786,10.021Zm13.279,0l-7.506,0l-15.311,-26.521l3.752,-6.5l19.065,33.021Z"/></svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 39 34" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><path d="M0,33.021l12.425,-21.521l3.753,6.5l-8.672,15.021l-7.506,0Zm24.85,0l-11.571,0l5.785,-10.021l5.786,10.021Zm13.279,0l-7.506,0l-15.311,-26.521l3.752,-6.5l19.065,33.021Z"/></svg>

Before

Width:  |  Height:  |  Size: 622 B

After

Width:  |  Height:  |  Size: 586 B

View File

@ -1 +1 @@
15549
15877

View File

@ -28,15 +28,6 @@ module.exports = {
defaultLayouts: { default: path.resolve("./src/components/layout.js") }
}
},
{
resolve: "gatsby-plugin-web-font-loader",
options: {
custom: {
families: ["Rubik"],
urls: ["/fonts/fonts.css"]
}
}
},
{
resolve: `gatsby-plugin-alias-imports`,
options: {

245
blog/package-lock.json generated
View File

@ -978,6 +978,19 @@
"resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz",
"integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow=="
},
"@emotion/is-prop-valid": {
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.7.3.tgz",
"integrity": "sha512-uxJqm/sqwXw3YPA5GXX365OBcJGFtxUVkB6WyezqFHlNe9jqUWH5ur2O2M8dGBz61kn1g3ZBlzUunFQXQIClhA==",
"requires": {
"@emotion/memoize": "0.7.1"
}
},
"@emotion/memoize": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.1.tgz",
"integrity": "sha512-Qv4LTqO11jepd5Qmlp3M1YEjBumoTHcHFdgPTQ+sFlIL5myi/7xu/POwP7IRu6odBdmLXdtIs1D6TuW6kbwbbg=="
},
"@hapi/address": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz",
@ -2303,6 +2316,14 @@
"@xtuc/long": "4.2.2"
}
},
"@welldone-software/why-did-you-render": {
"version": "4.1.3-alpha.0",
"resolved": "https://registry.npmjs.org/@welldone-software/why-did-you-render/-/why-did-you-render-4.1.3-alpha.0.tgz",
"integrity": "sha512-YQVue1WNtFonSl/YJeg1Vjnx2+dX6F5r9Nv9QNKRh5Uky3vx4CBEez8EXu26lS2Ah3ZyU1AlpXh4r4i5nQJLUA==",
"requires": {
"lodash": "^4"
}
},
"@xtuc/ieee754": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
@ -4342,6 +4363,17 @@
"resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
"integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk="
},
"clipboard": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz",
"integrity": "sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==",
"optional": true,
"requires": {
"good-listener": "^1.2.2",
"select": "^1.1.2",
"tiny-emitter": "^2.0.0"
}
},
"clipboardy": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz",
@ -4924,6 +4956,16 @@
"timsort": "^0.3.0"
}
},
"css-jss": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/css-jss/-/css-jss-10.1.1.tgz",
"integrity": "sha512-HrSD06y4dCfZ6nHtG/SucJBG8tbt+lbyBsUbxfqujyycxPLLd/B9mRKW97B8Ua8VWK8LR4i9ur0P8szZEjoqzQ==",
"requires": {
"@babel/runtime": "^7.3.1",
"jss": "10.1.1",
"jss-preset-default": "10.1.1"
}
},
"css-loader": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.5.1.tgz",
@ -5665,6 +5707,12 @@
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
},
"delegate": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz",
"integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==",
"optional": true
},
"delegates": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
@ -7448,6 +7496,14 @@
"reusify": "^1.0.4"
}
},
"fault": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz",
"integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==",
"requires": {
"format": "^0.2.0"
}
},
"faye-websocket": {
"version": "0.11.3",
"resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz",
@ -7738,6 +7794,11 @@
"mime-types": "^2.1.12"
}
},
"format": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz",
"integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs="
},
"forwarded": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
@ -9389,6 +9450,15 @@
"slash": "^1.0.0"
}
},
"good-listener": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz",
"integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=",
"optional": true,
"requires": {
"delegate": "^3.1.2"
}
},
"got": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz",
@ -9835,6 +9905,11 @@
"resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz",
"integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ=="
},
"highlight.js": {
"version": "9.15.10",
"resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.15.10.tgz",
"integrity": "sha512-RoV7OkQm0T3os3Dd2VHLNMoaoDVx77Wygln3n9l5YV172XonWG6rgQD3XnF/BuFFZw9A0TJgmMSO8FEWQgvcXw=="
},
"hmac-drbg": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
@ -11311,6 +11386,16 @@
"jss": "10.1.1"
}
},
"jss-plugin-compose": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/jss-plugin-compose/-/jss-plugin-compose-10.1.1.tgz",
"integrity": "sha512-0fD+YVGk0fVnsLiNf7CG4Lv7lYwmNyeE62Fbccx8k1mMdFoE7he0hpx37tudsfKW2ArCE+hf4fmJDXPW8l6LBw==",
"requires": {
"@babel/runtime": "^7.3.1",
"jss": "10.1.1",
"tiny-warning": "^1.0.2"
}
},
"jss-plugin-default-unit": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.1.1.tgz",
@ -11320,6 +11405,25 @@
"jss": "10.1.1"
}
},
"jss-plugin-expand": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/jss-plugin-expand/-/jss-plugin-expand-10.1.1.tgz",
"integrity": "sha512-ITO3RR4eTB3628B+gx8gLI7TKKE0TsFDBJ7BA648ZhXjHWQ5uxdC1bZld+++xnFL1l4kerj5tuWmZxS64C1Kcg==",
"requires": {
"@babel/runtime": "^7.3.1",
"jss": "10.1.1"
}
},
"jss-plugin-extend": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/jss-plugin-extend/-/jss-plugin-extend-10.1.1.tgz",
"integrity": "sha512-dZl0hNsndP9GJM6yqA7lZmnx6KJHo/13Zeo5B3i2uaDNO9jd5Y3pp1XHURGfbFG3K29XsYBQPTgfBwQ7e7+nyA==",
"requires": {
"@babel/runtime": "^7.3.1",
"jss": "10.1.1",
"tiny-warning": "^1.0.2"
}
},
"jss-plugin-global": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.1.1.tgz",
@ -11357,6 +11461,26 @@
"jss": "10.1.1"
}
},
"jss-plugin-rule-value-observable": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/jss-plugin-rule-value-observable/-/jss-plugin-rule-value-observable-10.1.1.tgz",
"integrity": "sha512-l1zmLfS5Ks6CrthOIVTokHkDoI01ymnwNBlciN+IlaR4UsLEQBBL0+3BfQjOPvIYRAYXxYx3G7ebUHebr8mWyA==",
"requires": {
"@babel/runtime": "^7.3.1",
"jss": "10.1.1",
"symbol-observable": "^1.2.0"
}
},
"jss-plugin-template": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/jss-plugin-template/-/jss-plugin-template-10.1.1.tgz",
"integrity": "sha512-CPhNapLDgj6gIJOi3vj/QPohF/1OHuLQj8ZjBYqrnzCDSfYV5s2Rzp1TicFGxUb07BRLh62ymU+MgH1hbKGSTQ==",
"requires": {
"@babel/runtime": "^7.3.1",
"jss": "10.1.1",
"tiny-warning": "^1.0.2"
}
},
"jss-plugin-vendor-prefixer": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.1.1.tgz",
@ -11367,6 +11491,27 @@
"jss": "10.1.1"
}
},
"jss-preset-default": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/jss-preset-default/-/jss-preset-default-10.1.1.tgz",
"integrity": "sha512-YwQp/BZ8IiBwxDTQ4uPAjzI2k2njrw6RJegAPvhCB1MTmWN2oR9Dhb5aN3RtepUf/agUkewTMwQqoS6PijgVMg==",
"requires": {
"@babel/runtime": "^7.3.1",
"jss": "10.1.1",
"jss-plugin-camel-case": "10.1.1",
"jss-plugin-compose": "10.1.1",
"jss-plugin-default-unit": "10.1.1",
"jss-plugin-expand": "10.1.1",
"jss-plugin-extend": "10.1.1",
"jss-plugin-global": "10.1.1",
"jss-plugin-nested": "10.1.1",
"jss-plugin-props-sort": "10.1.1",
"jss-plugin-rule-value-function": "10.1.1",
"jss-plugin-rule-value-observable": "10.1.1",
"jss-plugin-template": "10.1.1",
"jss-plugin-vendor-prefixer": "10.1.1"
}
},
"jsx-ast-utils": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz",
@ -11819,6 +11964,15 @@
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
"integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA=="
},
"lowlight": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.12.1.tgz",
"integrity": "sha512-OqaVxMGIESnawn+TU/QMV5BJLbUghUfjDWPAtFqDYDmDtr4FnB+op8xM+pR7nKlauHNUHXGt0VgWatFB8voS5w==",
"requires": {
"fault": "^1.0.2",
"highlight.js": "~9.15.0"
}
},
"lpad-align": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz",
@ -14418,6 +14572,14 @@
"utila": "~0.4"
}
},
"prismjs": {
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.20.0.tgz",
"integrity": "sha512-AEDjSrVNkynnw6A+B1DsFkd6AVdTnp+/WoUixFRULlCLZVRZlVQMVWio/16jv7G1FscUxQxOQhWwApgbnxr6kQ==",
"requires": {
"clipboard": "^2.0.0"
}
},
"private": {
"version": "0.1.8",
"resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
@ -15290,6 +15452,11 @@
}
}
},
"react-display-name": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/react-display-name/-/react-display-name-0.2.5.tgz",
"integrity": "sha512-I+vcaK9t4+kypiSgaiVWAipqHRXYmZIuAiS8vzFvXHHXVigg/sMKwlRgLy6LH2i3rmP+0Vzfl5lFsFRwF1r3pg=="
},
"react-dom": {
"version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz",
@ -15360,6 +15527,24 @@
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
},
"react-jss": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/react-jss/-/react-jss-10.1.1.tgz",
"integrity": "sha512-GCSKkyj6/bDNNgK1KtaU1FbTAKJ7CQE83p34qKpCc4tVPRi1wCfopyKot1cW/YYJizqltc2MaKzGqFK5eZhBSQ==",
"requires": {
"@babel/runtime": "^7.3.1",
"@emotion/is-prop-valid": "^0.7.3",
"css-jss": "10.1.1",
"hoist-non-react-statics": "^3.2.0",
"is-in-browser": "^1.1.3",
"jss": "10.1.1",
"jss-preset-default": "10.1.1",
"prop-types": "^15.6.0",
"shallow-equal": "^1.2.0",
"theming": "3.2.0",
"tiny-warning": "^1.0.2"
}
},
"react-lifecycles-compat": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
@ -15414,6 +15599,18 @@
"@react-spring/zdog": "9.0.0-canary.809.5.f01ecc2"
}
},
"react-syntax-highlighter": {
"version": "12.2.1",
"resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-12.2.1.tgz",
"integrity": "sha512-CTsp0ZWijwKRYFg9xhkWD4DSpQqE4vb2NKVMdPAkomnILSmsNBHE0n5GuI5zB+PU3ySVvXvdt9jo+ViD9XibCA==",
"requires": {
"@babel/runtime": "^7.3.1",
"highlight.js": "~9.15.1",
"lowlight": "1.12.1",
"prismjs": "^1.8.4",
"refractor": "^2.4.1"
}
},
"read": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
@ -15577,6 +15774,26 @@
"resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz",
"integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw=="
},
"refractor": {
"version": "2.10.1",
"resolved": "https://registry.npmjs.org/refractor/-/refractor-2.10.1.tgz",
"integrity": "sha512-Xh9o7hQiQlDbxo5/XkOX6H+x/q8rmlmZKr97Ie1Q8ZM32IRRd3B/UxuA/yXDW79DBSXGWxm2yRTbcTVmAciJRw==",
"requires": {
"hastscript": "^5.0.0",
"parse-entities": "^1.1.2",
"prismjs": "~1.17.0"
},
"dependencies": {
"prismjs": {
"version": "1.17.1",
"resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.17.1.tgz",
"integrity": "sha512-PrEDJAFdUGbOP6xK/UsfkC5ghJsPJviKgnQOoxaDbBjwc8op68Quupwt1DeAFoG8GImPhiKXAvvsH7wDSLsu1Q==",
"requires": {
"clipboard": "^2.0.0"
}
}
}
},
"regenerate": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
@ -16191,6 +16408,12 @@
}
}
},
"select": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz",
"integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=",
"optional": true
},
"select-hose": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
@ -16402,6 +16625,11 @@
"resolved": "https://registry.npmjs.org/shallow-compare/-/shallow-compare-1.2.2.tgz",
"integrity": "sha512-LUMFi+RppPlrHzbqmFnINTrazo0lPNwhcgzuAXVVcfy/mqPDrQmHAyz5bvV0gDAuRFrk804V0HpQ6u9sZ0tBeg=="
},
"shallow-equal": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz",
"integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA=="
},
"shallowequal": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz",
@ -17709,6 +17937,17 @@
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
"integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ="
},
"theming": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/theming/-/theming-3.2.0.tgz",
"integrity": "sha512-n0fSNYXkX63rcFBBeAthy14IcgPZLHp0OGkGZheaj64j7cBoP7INLd6+7HIXqWVjFn1M5cYSiZ1nszi+jo/Szg==",
"requires": {
"hoist-non-react-statics": "^3.3.0",
"prop-types": "^15.5.8",
"react-display-name": "^0.2.4",
"tiny-warning": "^1.0.2"
}
},
"through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
@ -17751,6 +17990,12 @@
"resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
"integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q="
},
"tiny-emitter": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
"integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==",
"optional": true
},
"tiny-warning": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",

View File

@ -7,6 +7,7 @@
"@material-ui/styles": "^4.9.0",
"@mdx-js/mdx": "^1.1.5",
"@mdx-js/react": "^1.1.5",
"@welldone-software/why-did-you-render": "^4.1.3-alpha.0",
"gatsby": "^2.19.45",
"gatsby-image": "^2.2.8",
"gatsby-plugin-alias-imports": "^1.0.5",
@ -27,8 +28,10 @@
"react": "^16.8.6",
"react-dom": "^16.8.6",
"react-helmet": "^5.2.1",
"react-jss": "^10.1.1",
"react-monaco-editor": "^0.33.0",
"react-spring": "^9.0.0-beta.34"
"react-spring": "^9.0.0-beta.34",
"react-syntax-highlighter": "^12.2.1"
},
"keywords": [
"gatsby"

View File

@ -2,19 +2,30 @@ module PSLayout where
import Prelude
import Control.Monad.State (evalStateT, get, put, runStateT)
import Control.Monad.State as State
import Control.Monad.Trans.Class (lift)
import Data.Array (foldMap)
import Data.Array as A
import Data.Array as Array
import Data.Array.NonEmpty as NEA
import Data.Either (Either(..))
import Data.Foldable (fold)
import Data.Function.Uncurried (mkFn2)
import Data.Maybe (Maybe(..), fromMaybe, isJust)
import Data.Monoid (guard)
import Data.Monoid.Additive (Additive(..))
import Data.Newtype (ala)
import Data.Newtype as NT
import Data.Nullable (Nullable)
import Data.Nullable as Nullable
import Data.String as String
import Data.Traversable (Accum, mapAccumL)
import Data.Tuple.Nested ((/\))
import Debug.Trace (spy)
import Effect (Effect)
import Effect.Aff (launchAff_)
import Effect.Class (liftEffect)
import Effect.Class.Console (log)
import JSS (jss, jssClasses)
import Justifill (justifill)
import Milkis.Impl (FetchImpl)
@ -22,7 +33,7 @@ import React.Basic (JSX, ReactComponent, fragment)
import React.Basic.DOM (unsafeCreateDOMComponent)
import React.Basic.DOM as R
import React.Basic.Helpers (jsx)
import React.Basic.Hooks (ReactChildren, component, componentWithChildren, element, reactChildrenToArray, useEffect, useState)
import React.Basic.Hooks (ReactChildren, component, componentWithChildren, element, memo, reactChildrenToArray, readRef, useEffect, useReducer, useRef, useState, writeRef)
import React.Basic.Hooks as React
import Unsafe.Coerce (unsafeCoerce)
import Yoga.Box.Component as Box
@ -67,7 +78,12 @@ type PreProps
}
}
data ShowModal
= ShowModal Modal.Props
| HideModal
mkLayout ∷
∀ r.
FetchImpl ->
Effect
( ReactComponent
@ -77,31 +93,34 @@ mkLayout ∷
)
mkLayout fetchImpl = do
themeProvider <- mkThemeProvider
mdxProviderComponent <- mkMdxProviderComponent (apiCompiler fetchImpl)
modal <- memo Modal.makeComponent
clickAway <- memo ClickAway.makeComponent
mdxProviderComponent <- memo $ mkMdxProviderComponent (apiCompiler fetchImpl)
componentWithChildren "MDXLayout" \{ children, siteInfo } -> React.do
maybeModalProps /\ dispatch <-
useReducer Nothing case _, _ of
_, ShowModal props -> Just props
_, HideModal -> Nothing
pure
$ element themeProvider
{ theme: fromTheme darkTheme
, children:
[ element mdxProviderComponent
{ children
, siteInfo
}
[ R.div_
[ maybeModalProps
# foldMap \modalProps ->
fragment
[ element clickAway { allowEscape: Just true, onClick: dispatch HideModal, style: Nothing }
, element modal (justifill modalProps)
]
, element mdxProviderComponent
{ children: spy "children" children
, siteInfo
, showModal: dispatch <<< ShowModal
}
]
]
}
mkSecret ∷ Effect (ReactComponent { kids ∷ Array JSX, visible ∷ Boolean, register ∷ Effect Unit })
mkSecret = do
component "Secret" \{ kids, visible, register } -> React.do
useEffect visible do
unless visible register
pure mempty
pure
$ R.div
{ style: R.css { visibility: if visible then "visible" else "hidden" }
, children: kids
}
isQuiz ∷ JSX -> Boolean
isQuiz a =
(unsafeCoerce a).props.mdxType == "pre"
@ -116,21 +135,19 @@ mkMdxProviderComponent ∷
( ReactComponent
{ children ∷ ReactChildren JSX
, siteInfo ∷ SiteQueryResult
, showModal ∷ Modal.Props -> Effect Unit
}
)
mkMdxProviderComponent compiler = do
cssBaseline <- mkCssBaseline
editor <- mkCompileEditor compiler
fillInTheGaps <- FillInTheGaps.makeComponent
box <- Box.makeComponent
sidebar <- mkSidebar
header <- mkHeader
cssBaseline <- memo mkCssBaseline
editor <- memo $ mkCompileEditor compiler
box <- memo $ Box.makeComponent
sidebar <- memo mkSidebar
header <- memo mkHeader
yogaInlineCode <- InlineCode.makeComponent
modal <- Modal.makeComponent
clickAway <- ClickAway.makeComponent
h <- mkH
p <- mkP
secret <- mkSecret
quiz <- memo $ mkQuiz compiler
h <- memo mkH
p <- memo mkP
useStyles <-
makeStylesJSS
$ jssClasses \(theme ∷ CSSTheme) ->
@ -142,32 +159,23 @@ mkMdxProviderComponent compiler = do
, padding: "3px"
, borderRadius: "3px"
}
, flexer:
{ display: "flex"
, flexDirection: "row"
}
}
componentWithChildren "MDXProviderComponent" \{ children, siteInfo } -> React.do
componentWithChildren "MDXProviderComponent" \{ children, siteInfo, showModal } -> React.do
classes <- useStyles {}
visibleThrough /\ updateVisible <- useState 1
questions /\ updateQuestions <- useState []
maybeModal /\ updateModal <- useState Nothing
visibleUntil /\ updateVisible <- useState 1
let
baseline child = element cssBaseline { kids: child }
onFailure = showModal (justifill { title: "Failed", kids: [ R.text "Try again" ] } ∷ Modal.Props)
onSuccess = updateVisible (_ + one)
kids = reactChildrenToArray children
foldVisible ∷ { i ∷ Int, acc ∷ Array JSX } -> JSX -> { i ∷ Int, acc ∷ Array JSX }
foldVisible { i, acc } a =
if i >= visibleThrough then
{ i, acc }
else
if isQuiz a then
{ i: i + 1, acc: A.snoc acc a }
else
{ i, acc: A.snoc acc a }
visibleKids = kids # A.foldl foldVisible { i: 0, acc: [] ∷ Array JSX } # _.acc
mapVisible i kid =
{ accum: i + if isQuiz kid then one else zero
, value: guard (i < visibleUntil) (pure kid)
}
visibleKids :: Array JSX
visibleKids = reactChildrenToArray children
# mapAccumL mapVisible zero
# _.value
# Array.catMaybes
siteInfoJSX =
R.div
@ -177,8 +185,8 @@ mkMdxProviderComponent compiler = do
, jsx box {} visibleKids
]
}
mdxComponents =
mdxComponents /\ _ <-
useState
{ h1:
\props ->
element h ({ level: H2, text: props.children, className: Nothing })
@ -197,9 +205,10 @@ mkMdxProviderComponent compiler = do
, inlineCode:
\props -> do
R.span { className: classes.code, children: props.children }
, pre:
\(props ∷ PreProps) -> do
, pre: mkFn2
\(props ∷ PreProps) other -> do
let
_ = spy "other" other
childrenQ = Nullable.toMaybe props.children
propsQ = (_.props >>> Nullable.toMaybe) =<< childrenQ
@ -227,20 +236,7 @@ mkMdxProviderComponent compiler = do
segmentsQ = parseSegments (codeQ ?|| "")
case isCode, language, segmentsQ of
true, "purescript", Just initialSegments ->
jsx box {}
[ element fillInTheGaps
{ initialSegments
, incantate: \segments -> launchAff_ do
let code = toCode segments
result <- compiler.compileAndRun { code }
liftEffect case result of
Right r | String.stripSuffix (String.Pattern "\n") r.stdout == (findResult $ join segments) ->
updateVisible (_ + 1)
_ ->
updateModal (const $ Just { title: "Failed", kids: [R.text "Try again"] })
}
]
true, "purescript", Just initialSegments -> element quiz { initialSegments, onFailure, onSuccess }
true, _, _ ->
element editor
{ initialCode: fromMaybe "" codeQ
@ -250,20 +246,43 @@ mkMdxProviderComponent compiler = do
false, _, _ -> element (unsafeCreateDOMComponent "pre") props
}
pure
$ baseline
[ element mdxProvider
{ children:
[ siteInfoJSX
]
, components: mdxComponents
$ element mdxProvider
{ children: pure $ jsx cssBaseline {} [ siteInfoJSX ]
, components: mdxComponents
}
mkQuiz ∷ _ -> Effect (ReactComponent _)
mkQuiz compiler = do
fillInTheGaps <- FillInTheGaps.makeComponent
box <- Box.makeComponent
component "Quiz" \({ initialSegments, onFailure, onSuccess } ∷ { initialSegments ∷ _, onFailure ∷ _, onSuccess :: _}) -> React.do
segments /\ updateSegments <- useState initialSegments
solved /\ updateSolved <- useState false
pure
$ jsx box {}
[ element fillInTheGaps
{ segments
, incantate:
launchAff_ do
let
code = toCode segments
result <- compiler.compileAndRun { code }
liftEffect case result of
Right r
| String.stripSuffix (String.Pattern "\n") r.stdout == (findResult $ join segments) -> do
updateSolved (const true)
onSuccess
_ -> onFailure
, updateSegments:
\update -> do
let
updated = update segments
case segments, updated of
old, new
| new == old -> mempty
_, _ -> updateSegments (const updated)
, readOnly: Just solved
}
, maybeModal # foldMap
(\modalProps ->
fragment [
element clickAway { allowEscape: Just true, onClick: updateModal (const Nothing), style: Nothing },
element modal (justifill modalProps)
]
)
]
mkSidebar = do
@ -271,20 +290,13 @@ mkSidebar = do
useStyles <-
makeStylesJSS
$ jssClasses \(theme ∷ CSSTheme) ->
{ flexer:
jss
{ display: "flex"
, flexDirection: "row"
, width: "300px"
, height: "300px"
}
}
{}
component "Sidebar" \{ links } -> React.do
classes <- useStyles {}
pure
$ element withSidebar
( justifill
{ sidebarChildren: [ R.div_ [ R.text "hahahaha" ] ]
{ sidebarChildren: [ R.div_ [] ]
, notSidebarChildren: [] ∷ Array JSX
}
)

View File

@ -2,7 +2,8 @@ import React from "react";
import PropTypes from "prop-types";
import { graphql, useStaticQuery } from "gatsby";
import { preToCodeBlock } from "mdx-utils";
const psLayout = require("./PSLayout.purs");
const psLayout = require("../../output/PSLayout/index.js"); // [FIXME] use the next line
// const psLayout = require("./PSLayout.purs");
const fetch = typeof window !== "undefined" && window.fetch;
const PSLayout = psLayout.mkLayout(fetch)();
@ -24,8 +25,4 @@ const Layout = ({ children }) => {
return <PSLayout siteInfo={siteInfo}>{children}</PSLayout>;
};
Layout.propTypes = {
children: PropTypes.node.isRequired
};
export default Layout;
export default Layout;

View File

@ -1,6 +1,5 @@
import { Link } from 'gatsby'
import Layout from '../components/layout'
import SEO from '../components/seo'
<SEO title="Home" keywords={['gatsby', 'application', 'react']} />

View File

@ -1,5 +1,6 @@
import Layout from '../components/layout'
import SEO from '../components/seo'
import { Link } from 'gatsby'
<SEO title="Home" keywords={['gatsby', 'application', 'react']} />
@ -37,4 +38,6 @@ incantation = cast $
---
Guter Mann
Guter Mann
<Link to="/optional/">Go to the first exercise</Link>

View File

@ -2,22 +2,23 @@ module Yoga.FillInTheGaps.Component where
import Prelude
import Data.Array as A
import Data.Tuple.Nested ((/\))
import Data.Maybe (Maybe(..))
import Data.Monoid (guard)
import Effect (Effect)
import Justifill (justifill)
import React.Basic (JSX, ReactComponent, element)
import React.Basic.DOM as R
import React.Basic.Events (handler_)
import React.Basic.Helpers (jsx)
import React.Basic.Hooks (component, useEffect, useState)
import React.Basic.Hooks (component)
import React.Basic.Hooks as React
import React.Basic.SyntaxHighlighter.Component (HighlighterTheme, syntaxHighlighterImpl)
import Yoga.Button.Component (ButtonType(..), mkButton)
import Yoga.Cluster.Component as Cluster
import Yoga.FillInTheGaps.Logic (Segment(..), complete, updateSegments)
import Yoga.Helpers ((?||))
import Yoga.Helpers (ifJustTrue, (?||))
import Yoga.InlineCode.Component as InlineCode
import Yoga.Stack.Component as Stack
import Yoga.Cluster.Component as Cluster
import Yoga.Theme.Styles (useTheme)
import Yoga.Theme.Syntax (mkHighlighterTheme)
@ -27,43 +28,54 @@ visibleRange arr = { start, end }
start = A.findIndex (_ == [ Start ]) arr ?|| 0
end = A.findIndex (_ == [ End ]) arr ?|| A.length arr
renderSegments ∷ HighlighterTheme -> ReactComponent InlineCode.Props -> ((Array (Array Segment) -> Array (Array Segment)) -> Effect Unit) -> Array (Array Segment) -> JSX
renderSegments highlighterTheme ic update arrs = R.div_ (A.mapWithIndex renderLine arrs)
renderSegments ∷ Maybe Boolean -> HighlighterTheme -> ReactComponent InlineCode.Props -> ((Array (Array Segment) -> Array (Array Segment)) -> Effect Unit) -> Array (Array Segment) -> JSX
renderSegments readOnly highlighterTheme ic update arrs = R.div_ (A.mapWithIndex renderLine arrs)
where
{ start, end } = visibleRange arrs
renderLine i l = R.div_ (A.mapWithIndex (renderSegment i) l)
renderSegment i j s =
if between start end i then case s of
Filler s' -> element syntaxHighlighterImpl { style: highlighterTheme, language: "purescript", children: s' }
Hole width _ ->
Hole width text ->
element ic
$ justifill
{ width
, onSubmit: update <<< updateSegments i j
, update: update <<< updateSegments i j
, text
, readOnly
}
_ -> mempty
else
mempty
makeComponent ∷ Effect (ReactComponent { initialSegments ∷ Array (Array Segment), incantate ∷ Array (Array Segment) -> Effect Unit })
type Props
= { segments ∷ Array (Array Segment)
, updateSegments ∷ (Array (Array Segment) -> Array (Array Segment)) -> Effect Unit
, incantate ∷ Effect Unit
, readOnly ∷ Maybe Boolean
}
makeComponent ∷ Effect (ReactComponent Props)
makeComponent = do
ic <- InlineCode.makeComponent
btn <- mkButton
stack <- Stack.makeComponent
cluster <- Cluster.makeComponent
component "FillInTheGaps" \{ initialSegments, incantate } -> React.do
segments /\ modifySegments <- useState initialSegments
component "FillInTheGaps" \({ updateSegments, segments, incantate, readOnly } ∷ Props) -> React.do
highlighterTheme <- useTheme <#> mkHighlighterTheme
pure
$ jsx stack {}
[ renderSegments highlighterTheme ic (modifySegments) segments
, jsx cluster {}
[ R.div_
[ jsx btn
{ onClick: handler_ (incantate segments)
, buttonType: if complete segments then HighlightedButton else DisabledButton
}
[ R.text "Incantate" ]
]
]
[ renderSegments readOnly highlighterTheme ic updateSegments segments
, if Just true == readOnly then
mempty
else
jsx cluster {}
[ R.div_
[ jsx btn
{ onClick: handler_ incantate
, buttonType: if complete segments then HighlightedButton else DisabledButton
}
[ R.text "Incantate" ]
]
]
]

View File

@ -33,6 +33,7 @@ data Segment
| Hole Int String
derive instance eqSegment ∷ Eq Segment
derive instance ordSegment ∷ Ord Segment
getResult ∷ Segment -> Maybe String
getResult = case _ of
ExpectedResult r -> Just r

View File

@ -1,8 +1,14 @@
module Yoga.FillInTheGaps.Stories where
import Prelude hiding (add)
import Data.String as String
import Control.Monad.Trans.Class (lift)
import Data.Maybe (Maybe(..))
import Data.Tuple.Nested ((/\))
import Effect (Effect)
import Effect.Ref as Ref
import React.Basic (ReactComponent)
import React.Basic.Hooks (element, useState, component)
import React.Basic.Hooks as React
import Storybook.Decorator.FullScreen (fullScreenDecorator)
import Storybook.React (Storybook, add, addDecorator, storiesOf)
import Yoga.FillInTheGaps.Component as FillInTheGaps
@ -13,9 +19,22 @@ stories ∷ Effect Storybook
stories = do
storiesOf "FillInTheGaps" do
addDecorator fullScreenDecorator
add "The FillInTheGaps" (FillInTheGaps.makeComponent)
[ { initialSegments: parseSegments codeWithHoles ?|| [], incantate: pure (pure unit) }
]
segRef <- Ref.new [] # lift
add "The FillInTheGaps" makeWrapper
[ {} ]
makeWrapper ∷ Effect (ReactComponent {})
makeWrapper = do
gaps <- FillInTheGaps.makeComponent
component "GapsWrapper" \_ -> React.do
segments /\ updateSegments <- useState (parseSegments codeWithHoles ?|| [])
pure
$ element gaps
{ segments
, updateSegments
, incantate: mempty
, readOnly: Just false
}
codeWithHoles =
"""
@ -25,22 +44,8 @@ import Grimoire
incantation :: Effect Unit
--start here
--please say Hello World
incantation = cast
"{-Hello World-}"
--end here
"""
correctCode =
String.replace
(String.Pattern "{-Hello World-}")
(String.Replacement "Hello World")
<<< String.replace
(String.Pattern "--result Hello World")
(String.Replacement "")
<<< String.replace
(String.Pattern "--start here")
(String.Replacement "")
<<< String.replace
(String.Pattern "--end here")
(String.Replacement "")
$ codeWithHoles

View File

@ -1,11 +1,10 @@
module Yoga.InlineCode.Component where
import Prelude
import Prelude
import CSS (value)
import Data.Foldable (fold, intercalate)
import Data.Maybe (Maybe)
import Data.String (trim)
import Data.Nullable (toNullable)
import Data.Nullable as Nullable
import Data.Time.Duration (Milliseconds(..))
import Data.Tuple.Nested ((/\))
import Effect (Effect)
@ -13,12 +12,13 @@ import Effect.Aff (delay)
import Effect.Class (liftEffect)
import Foreign.Object as Obj
import React.Basic.DOM as R
import React.Basic.DOM.Events (capture, capture_, preventDefault, targetValue)
import React.Basic.Events (handler, handler_)
import React.Basic.Hooks (ReactComponent, component, useEffect, useState)
import React.Basic.DOM.Events (targetValue)
import React.Basic.Events (handler)
import React.Basic.Hooks (ReactComponent, component, useState)
import React.Basic.Hooks as React
import React.Basic.Hooks.Aff (useAff)
import Record.Extra (pick)
import Unsafe.Coerce (unsafeCoerce)
import Yoga.Helpers ((?||))
import Yoga.InlineCode.Styles (styles)
import Yoga.InlineCode.Styles as Styles
@ -31,20 +31,22 @@ type PropsR
= OptionalProps (Styles.PropsR)
type OptionalProps r
= ( onSubmit ∷ String -> Effect Unit
= ( update ∷ String -> Effect Unit
, text ∷ Maybe String
, className ∷ Maybe String
, readOnly ∷ Maybe Boolean
| r
)
makeComponent ∷ Effect (ReactComponent Props)
makeComponent = do
useStyles <- makeStylesJSS styles
component "InlineCode" \props@{ className, onSubmit } -> React.do
value /\ modifyValue <- useState ""
component "InlineCode" \props@{ className, text, update, readOnly } -> React.do
value /\ modifyValue <- useState (text ?|| "")
classes <- useStyles $ pick props
useAff value do
delay (200.0 # Milliseconds)
onSubmit value # liftEffect
update value # liftEffect
pure
$ R.div
{ className: classes.form
@ -53,8 +55,10 @@ makeComponent = do
{ className: intercalate " " [ classes.inlinecode, fold className ]
, maxLength: props.width ?|| 10
, value
, readOnly: readOnly ?|| false
, disabled: readOnly ?|| false
, spellCheck: false
, autoComplete: false
, autoComplete: unsafeCoerce "false"
, autoCorrect: "off"
, autoCapitalize: "off"
, onChange:

View File

@ -60,6 +60,6 @@ mkWrapper = do
pure
$ element inlineCode
( justifill
{ onSubmit: dispatch <<< InlineCodeAction
{ update: dispatch <<< InlineCodeAction
}
)

View File

@ -30,7 +30,7 @@ stories = do
addDecorator fullScreenDecorator
add "The InlineCode" InlineCode.makeComponent
[ ( justifill
{ onSubmit: log
{ update: log
}
)
]
@ -38,7 +38,7 @@ stories = do
[ { inside:
\inlineCode ->
[ R.text "hi!"
, element inlineCode (justifill { onSubmit: log })
, element inlineCode (justifill { update: log })
, R.text "hello again!"
]
}
@ -47,7 +47,7 @@ stories = do
[ { inside:
\inlineCode ->
[ R.code_ [ R.text "main = logShow \"" ]
, element inlineCode (justifill { onSubmit: log })
, element inlineCode (justifill { update: log })
, R.code_ [ R.text "\"" ]
]
}
@ -96,7 +96,7 @@ mkRealWrapper = do
$ R.div_
[ R.h2_ [ R.text "Let's log some 'Magick'" ]
, fragment $ renderCode codePrefix
, element inlineCode (justifill { onSubmit: dispatch <<< InlineCodeSubmitted, width: String.length "Magick" })
, element inlineCode (justifill { update: dispatch <<< InlineCodeSubmitted, width: String.length "Magick" })
, fragment $ renderCode codeSuffix
, R.br {}
, case state of

491
server/package-lock.json generated
View File

@ -4,6 +4,27 @@
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@babel/runtime": {
"version": "7.9.2",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz",
"integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==",
"requires": {
"regenerator-runtime": "^0.13.4"
}
},
"@emotion/is-prop-valid": {
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.7.3.tgz",
"integrity": "sha512-uxJqm/sqwXw3YPA5GXX365OBcJGFtxUVkB6WyezqFHlNe9jqUWH5ur2O2M8dGBz61kn1g3ZBlzUunFQXQIClhA==",
"requires": {
"@emotion/memoize": "0.7.1"
}
},
"@emotion/memoize": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.1.tgz",
"integrity": "sha512-Qv4LTqO11jepd5Qmlp3M1YEjBumoTHcHFdgPTQ+sFlIL5myi/7xu/POwP7IRu6odBdmLXdtIs1D6TuW6kbwbbg=="
},
"accepts": {
"version": "1.3.7",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
@ -205,6 +226,21 @@
"supports-color": "^5.3.0"
}
},
"character-entities": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz",
"integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw=="
},
"character-entities-legacy": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
"integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA=="
},
"character-reference-invalid": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz",
"integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg=="
},
"chownr": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz",
@ -220,6 +256,17 @@
"restore-cursor": "^2.0.0"
}
},
"clipboard": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz",
"integrity": "sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==",
"optional": true,
"requires": {
"good-listener": "^1.2.2",
"select": "^1.1.2",
"tiny-emitter": "^2.0.0"
}
},
"color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
@ -244,6 +291,11 @@
"delayed-stream": "~1.0.0"
}
},
"comma-separated-tokens": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz",
"integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw=="
},
"comment-json": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/comment-json/-/comment-json-2.4.1.tgz",
@ -337,6 +389,30 @@
}
}
},
"css-jss": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/css-jss/-/css-jss-10.1.1.tgz",
"integrity": "sha512-HrSD06y4dCfZ6nHtG/SucJBG8tbt+lbyBsUbxfqujyycxPLLd/B9mRKW97B8Ua8VWK8LR4i9ur0P8szZEjoqzQ==",
"requires": {
"@babel/runtime": "^7.3.1",
"jss": "10.1.1",
"jss-preset-default": "10.1.1"
}
},
"css-vendor": {
"version": "2.0.8",
"resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz",
"integrity": "sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==",
"requires": {
"@babel/runtime": "^7.8.3",
"is-in-browser": "^1.0.2"
}
},
"csstype": {
"version": "2.6.10",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.10.tgz",
"integrity": "sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w=="
},
"cyclist": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
@ -366,6 +442,12 @@
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
"dev": true
},
"delegate": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz",
"integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==",
"optional": true
},
"depd": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
@ -528,6 +610,14 @@
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
"dev": true
},
"fault": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz",
"integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==",
"requires": {
"format": "^0.2.0"
}
},
"figgy-pudding": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz",
@ -581,6 +671,11 @@
"mime-types": "^2.1.12"
}
},
"format": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz",
"integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs="
},
"forwarded": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
@ -671,6 +766,15 @@
"path-is-absolute": "^1.0.0"
}
},
"good-listener": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz",
"integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=",
"optional": true,
"requires": {
"delegate": "^3.1.2"
}
},
"graceful-fs": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
@ -703,6 +807,35 @@
"resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz",
"integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ=="
},
"hast-util-parse-selector": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.4.tgz",
"integrity": "sha512-gW3sxfynIvZApL4L07wryYF4+C9VvH3AUi7LAnVXV4MneGEgwOByXvFo18BgmTWnm7oHAe874jKbIB1YhHSIzA=="
},
"hastscript": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz",
"integrity": "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==",
"requires": {
"comma-separated-tokens": "^1.0.0",
"hast-util-parse-selector": "^2.0.0",
"property-information": "^5.0.0",
"space-separated-tokens": "^1.0.0"
}
},
"highlight.js": {
"version": "9.15.10",
"resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.15.10.tgz",
"integrity": "sha512-RoV7OkQm0T3os3Dd2VHLNMoaoDVx77Wygln3n9l5YV172XonWG6rgQD3XnF/BuFFZw9A0TJgmMSO8FEWQgvcXw=="
},
"hoist-non-react-statics": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
"integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
"requires": {
"react-is": "^16.7.0"
}
},
"http-errors": {
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
@ -726,6 +859,11 @@
"sshpk": "^1.7.0"
}
},
"hyphenate-style-name": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz",
"integrity": "sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ=="
},
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@ -766,12 +904,41 @@
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
"integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA=="
},
"is-alphabetical": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
"integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg=="
},
"is-alphanumerical": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz",
"integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==",
"requires": {
"is-alphabetical": "^1.0.0",
"is-decimal": "^1.0.0"
}
},
"is-decimal": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
"integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw=="
},
"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",
"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
"dev": true
},
"is-hexadecimal": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz",
"integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw=="
},
"is-in-browser": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz",
"integrity": "sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU="
},
"is-plain-obj": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
@ -808,6 +975,11 @@
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
"dev": true
},
"js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
},
"jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
@ -861,6 +1033,153 @@
"verror": "1.10.0"
}
},
"jss": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/jss/-/jss-10.1.1.tgz",
"integrity": "sha512-Xz3qgRUFlxbWk1czCZibUJqhVPObrZHxY3FPsjCXhDld4NOj1BgM14Ir5hVm+Qr6OLqVljjGvoMcCdXNOAbdkQ==",
"requires": {
"@babel/runtime": "^7.3.1",
"csstype": "^2.6.5",
"is-in-browser": "^1.1.3",
"tiny-warning": "^1.0.2"
}
},
"jss-plugin-camel-case": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.1.1.tgz",
"integrity": "sha512-MDIaw8FeD5uFz1seQBKz4pnvDLnj5vIKV5hXSVdMaAVq13xR6SVTVWkIV/keyTs5txxTvzGJ9hXoxgd1WTUlBw==",
"requires": {
"@babel/runtime": "^7.3.1",
"hyphenate-style-name": "^1.0.3",
"jss": "10.1.1"
}
},
"jss-plugin-compose": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/jss-plugin-compose/-/jss-plugin-compose-10.1.1.tgz",
"integrity": "sha512-0fD+YVGk0fVnsLiNf7CG4Lv7lYwmNyeE62Fbccx8k1mMdFoE7he0hpx37tudsfKW2ArCE+hf4fmJDXPW8l6LBw==",
"requires": {
"@babel/runtime": "^7.3.1",
"jss": "10.1.1",
"tiny-warning": "^1.0.2"
}
},
"jss-plugin-default-unit": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.1.1.tgz",
"integrity": "sha512-UkeVCA/b3QEA4k0nIKS4uWXDCNmV73WLHdh2oDGZZc3GsQtlOCuiH3EkB/qI60v2MiCq356/SYWsDXt21yjwdg==",
"requires": {
"@babel/runtime": "^7.3.1",
"jss": "10.1.1"
}
},
"jss-plugin-expand": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/jss-plugin-expand/-/jss-plugin-expand-10.1.1.tgz",
"integrity": "sha512-ITO3RR4eTB3628B+gx8gLI7TKKE0TsFDBJ7BA648ZhXjHWQ5uxdC1bZld+++xnFL1l4kerj5tuWmZxS64C1Kcg==",
"requires": {
"@babel/runtime": "^7.3.1",
"jss": "10.1.1"
}
},
"jss-plugin-extend": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/jss-plugin-extend/-/jss-plugin-extend-10.1.1.tgz",
"integrity": "sha512-dZl0hNsndP9GJM6yqA7lZmnx6KJHo/13Zeo5B3i2uaDNO9jd5Y3pp1XHURGfbFG3K29XsYBQPTgfBwQ7e7+nyA==",
"requires": {
"@babel/runtime": "^7.3.1",
"jss": "10.1.1",
"tiny-warning": "^1.0.2"
}
},
"jss-plugin-global": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.1.1.tgz",
"integrity": "sha512-VBG3wRyi3Z8S4kMhm8rZV6caYBegsk+QnQZSVmrWw6GVOT/Z4FA7eyMu5SdkorDlG/HVpHh91oFN56O4R9m2VA==",
"requires": {
"@babel/runtime": "^7.3.1",
"jss": "10.1.1"
}
},
"jss-plugin-nested": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.1.1.tgz",
"integrity": "sha512-ozEu7ZBSVrMYxSDplPX3H82XHNQk2DQEJ9TEyo7OVTPJ1hEieqjDFiOQOxXEj9z3PMqkylnUbvWIZRDKCFYw5Q==",
"requires": {
"@babel/runtime": "^7.3.1",
"jss": "10.1.1",
"tiny-warning": "^1.0.2"
}
},
"jss-plugin-props-sort": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.1.1.tgz",
"integrity": "sha512-g/joK3eTDZB4pkqpZB38257yD4LXB0X15jxtZAGbUzcKAVUHPl9Jb47Y7lYmiGsShiV4YmQRqG1p2DHMYoK91g==",
"requires": {
"@babel/runtime": "^7.3.1",
"jss": "10.1.1"
}
},
"jss-plugin-rule-value-function": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.1.1.tgz",
"integrity": "sha512-ClV1lvJ3laU9la1CUzaDugEcwnpjPTuJ0yGy2YtcU+gG/w9HMInD5vEv7xKAz53Bk4WiJm5uLOElSEshHyhKNw==",
"requires": {
"@babel/runtime": "^7.3.1",
"jss": "10.1.1"
}
},
"jss-plugin-rule-value-observable": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/jss-plugin-rule-value-observable/-/jss-plugin-rule-value-observable-10.1.1.tgz",
"integrity": "sha512-l1zmLfS5Ks6CrthOIVTokHkDoI01ymnwNBlciN+IlaR4UsLEQBBL0+3BfQjOPvIYRAYXxYx3G7ebUHebr8mWyA==",
"requires": {
"@babel/runtime": "^7.3.1",
"jss": "10.1.1",
"symbol-observable": "^1.2.0"
}
},
"jss-plugin-template": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/jss-plugin-template/-/jss-plugin-template-10.1.1.tgz",
"integrity": "sha512-CPhNapLDgj6gIJOi3vj/QPohF/1OHuLQj8ZjBYqrnzCDSfYV5s2Rzp1TicFGxUb07BRLh62ymU+MgH1hbKGSTQ==",
"requires": {
"@babel/runtime": "^7.3.1",
"jss": "10.1.1",
"tiny-warning": "^1.0.2"
}
},
"jss-plugin-vendor-prefixer": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.1.1.tgz",
"integrity": "sha512-09MZpQ6onQrhaVSF6GHC4iYifQ7+4YC/tAP6D4ZWeZotvCMq1mHLqNKRIaqQ2lkgANjlEot2JnVi1ktu4+L4pw==",
"requires": {
"@babel/runtime": "^7.3.1",
"css-vendor": "^2.0.7",
"jss": "10.1.1"
}
},
"jss-preset-default": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/jss-preset-default/-/jss-preset-default-10.1.1.tgz",
"integrity": "sha512-YwQp/BZ8IiBwxDTQ4uPAjzI2k2njrw6RJegAPvhCB1MTmWN2oR9Dhb5aN3RtepUf/agUkewTMwQqoS6PijgVMg==",
"requires": {
"@babel/runtime": "^7.3.1",
"jss": "10.1.1",
"jss-plugin-camel-case": "10.1.1",
"jss-plugin-compose": "10.1.1",
"jss-plugin-default-unit": "10.1.1",
"jss-plugin-expand": "10.1.1",
"jss-plugin-extend": "10.1.1",
"jss-plugin-global": "10.1.1",
"jss-plugin-nested": "10.1.1",
"jss-plugin-props-sort": "10.1.1",
"jss-plugin-rule-value-function": "10.1.1",
"jss-plugin-rule-value-observable": "10.1.1",
"jss-plugin-template": "10.1.1",
"jss-plugin-vendor-prefixer": "10.1.1"
}
},
"log-symbols": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz",
@ -881,6 +1200,23 @@
"wrap-ansi": "^5.0.0"
}
},
"loose-envify": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
"integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
"requires": {
"js-tokens": "^3.0.0 || ^4.0.0"
}
},
"lowlight": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.12.1.tgz",
"integrity": "sha512-OqaVxMGIESnawn+TU/QMV5BJLbUghUfjDWPAtFqDYDmDtr4FnB+op8xM+pR7nKlauHNUHXGt0VgWatFB8voS5w==",
"requires": {
"fault": "^1.0.2",
"highlight.js": "~9.15.0"
}
},
"lru-cache": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
@ -1042,6 +1378,11 @@
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
"dev": true
},
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
},
"on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
@ -1085,6 +1426,19 @@
"readable-stream": "^2.1.5"
}
},
"parse-entities": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz",
"integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==",
"requires": {
"character-entities": "^1.0.0",
"character-entities-legacy": "^1.0.0",
"character-reference-invalid": "^1.0.0",
"is-alphanumerical": "^1.0.0",
"is-decimal": "^1.0.0",
"is-hexadecimal": "^1.0.0"
}
},
"parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@ -1113,6 +1467,14 @@
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
"dev": true
},
"prismjs": {
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.20.0.tgz",
"integrity": "sha512-AEDjSrVNkynnw6A+B1DsFkd6AVdTnp+/WoUixFRULlCLZVRZlVQMVWio/16jv7G1FscUxQxOQhWwApgbnxr6kQ==",
"requires": {
"clipboard": "^2.0.0"
}
},
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
@ -1125,6 +1487,24 @@
"integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
"dev": true
},
"prop-types": {
"version": "15.7.2",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
"integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
"requires": {
"loose-envify": "^1.4.0",
"object-assign": "^4.1.1",
"react-is": "^16.8.1"
}
},
"property-information": {
"version": "5.4.0",
"resolved": "https://registry.npmjs.org/property-information/-/property-information-5.4.0.tgz",
"integrity": "sha512-nmMWAm/3vKFGmmOWOcdLjgq/Hlxa+hsuR/px1Lp/UGEyc5A22A6l78Shc2C0E71sPmAqglni+HrS7L7VJ7AUCA==",
"requires": {
"xtend": "^4.0.0"
}
},
"proxy-addr": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
@ -1245,6 +1625,46 @@
"unpipe": "1.0.0"
}
},
"react-display-name": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/react-display-name/-/react-display-name-0.2.5.tgz",
"integrity": "sha512-I+vcaK9t4+kypiSgaiVWAipqHRXYmZIuAiS8vzFvXHHXVigg/sMKwlRgLy6LH2i3rmP+0Vzfl5lFsFRwF1r3pg=="
},
"react-is": {
"version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
},
"react-jss": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/react-jss/-/react-jss-10.1.1.tgz",
"integrity": "sha512-GCSKkyj6/bDNNgK1KtaU1FbTAKJ7CQE83p34qKpCc4tVPRi1wCfopyKot1cW/YYJizqltc2MaKzGqFK5eZhBSQ==",
"requires": {
"@babel/runtime": "^7.3.1",
"@emotion/is-prop-valid": "^0.7.3",
"css-jss": "10.1.1",
"hoist-non-react-statics": "^3.2.0",
"is-in-browser": "^1.1.3",
"jss": "10.1.1",
"jss-preset-default": "10.1.1",
"prop-types": "^15.6.0",
"shallow-equal": "^1.2.0",
"theming": "3.2.0",
"tiny-warning": "^1.0.2"
}
},
"react-syntax-highlighter": {
"version": "12.2.1",
"resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-12.2.1.tgz",
"integrity": "sha512-CTsp0ZWijwKRYFg9xhkWD4DSpQqE4vb2NKVMdPAkomnILSmsNBHE0n5GuI5zB+PU3ySVvXvdt9jo+ViD9XibCA==",
"requires": {
"@babel/runtime": "^7.3.1",
"highlight.js": "~9.15.1",
"lowlight": "1.12.1",
"prismjs": "^1.8.4",
"refractor": "^2.4.1"
}
},
"readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
@ -1260,6 +1680,31 @@
"util-deprecate": "~1.0.1"
}
},
"refractor": {
"version": "2.10.1",
"resolved": "https://registry.npmjs.org/refractor/-/refractor-2.10.1.tgz",
"integrity": "sha512-Xh9o7hQiQlDbxo5/XkOX6H+x/q8rmlmZKr97Ie1Q8ZM32IRRd3B/UxuA/yXDW79DBSXGWxm2yRTbcTVmAciJRw==",
"requires": {
"hastscript": "^5.0.0",
"parse-entities": "^1.1.2",
"prismjs": "~1.17.0"
},
"dependencies": {
"prismjs": {
"version": "1.17.1",
"resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.17.1.tgz",
"integrity": "sha512-PrEDJAFdUGbOP6xK/UsfkC5ghJsPJviKgnQOoxaDbBjwc8op68Quupwt1DeAFoG8GImPhiKXAvvsH7wDSLsu1Q==",
"requires": {
"clipboard": "^2.0.0"
}
}
}
},
"regenerator-runtime": {
"version": "0.13.5",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
"integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA=="
},
"repeat-string": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
@ -1362,6 +1807,12 @@
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"select": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz",
"integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=",
"optional": true
},
"send": {
"version": "0.17.1",
"resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
@ -1405,6 +1856,11 @@
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
"integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
},
"shallow-equal": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz",
"integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA=="
},
"shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@ -1426,6 +1882,11 @@
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
"dev": true
},
"space-separated-tokens": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz",
"integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA=="
},
"spago": {
"version": "0.14.0",
"resolved": "https://registry.npmjs.org/spago/-/spago-0.14.0.tgz",
@ -1527,6 +1988,11 @@
"has-flag": "^3.0.0"
}
},
"symbol-observable": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
"integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ=="
},
"tar": {
"version": "4.4.13",
"resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz",
@ -1542,6 +2008,17 @@
"yallist": "^3.0.3"
}
},
"theming": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/theming/-/theming-3.2.0.tgz",
"integrity": "sha512-n0fSNYXkX63rcFBBeAthy14IcgPZLHp0OGkGZheaj64j7cBoP7INLd6+7HIXqWVjFn1M5cYSiZ1nszi+jo/Szg==",
"requires": {
"hoist-non-react-statics": "^3.3.0",
"prop-types": "^15.5.8",
"react-display-name": "^0.2.4",
"tiny-warning": "^1.0.2"
}
},
"through2": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
@ -1552,6 +2029,17 @@
"xtend": "~4.0.1"
}
},
"tiny-emitter": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
"integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==",
"optional": true
},
"tiny-warning": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
"integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
},
"toidentifier": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
@ -1703,8 +2191,7 @@
"xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
"dev": true
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
},
"y18n": {
"version": "4.0.0",

View File

@ -17,8 +17,8 @@
"express": "^4.17.1",
"fs-extra": "^9.0.0",
"json-parser": "^3.1.2",
"uuid": "^7.0.2",
"minimist": "^1.2.2"
"minimist": "^1.2.2",
"uuid": "^7.0.2"
},
"devDependencies": {
"purescript": "^0.13.6",