Last active
November 25, 2018 15:43
-
-
Save ianchanning/d6791c8181fbee2bb4a83c442219f77a to your computer and use it in GitHub Desktop.
A Neural Network in JavaScript. This now has it's own Github repo: https://github.com/ianchanning/neural-network-js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Show hidden characters
| { | |
| "env": { | |
| "browser": true, | |
| "es6": true | |
| }, | |
| "extends": "eslint:recommended", | |
| "parserOptions": { | |
| "ecmaFeatures": { | |
| "jsx": true | |
| }, | |
| "ecmaVersion": 2018, | |
| "sourceType": "module" | |
| }, | |
| "plugins": [ | |
| "react" | |
| ], | |
| "rules": { | |
| "indent": [ | |
| "error", | |
| 2 | |
| ], | |
| "linebreak-style": [ | |
| "error", | |
| "unix" | |
| ], | |
| "quotes": [ | |
| "error", | |
| "double" | |
| ], | |
| "semi": [ | |
| "error", | |
| "never" | |
| ] | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| node_modules |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!DOCTYPE html> | |
| <html lang="en"> | |
| <head> | |
| <meta charset="utf-8"> | |
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> | |
| <title>Neural Networks 101</title> | |
| <style> | |
| h1 {font: normal 2em Georgia;} | |
| </style> | |
| </head> | |
| <body> | |
| <h1>Bring on the machines</h1> | |
| <div id="root"></div> | |
| <script src="neural-network.js"></script> | |
| </body> | |
| </html> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* eslint no-unused-vars: "off" */ | |
| /** | |
| * This is an experiment to see if I can recreate funfunfunctions machine-learning / back-propagation code | |
| * @link https://www.youtube.com/watch?v=anN2Ey37s-o | |
| * | |
| * Step 1 is to recreate the JS code | |
| * Step 2 is to port to ReasonML | |
| * @return object | |
| */ | |
| const fff = (() => { | |
| "use strict" | |
| const X_MAX = 400 | |
| const Y_MAX = 400 | |
| const EXAMPLE_COUNT = 100000 | |
| /** | |
| * Generate the required data specific for this network | |
| * | |
| * @returns {object} {weights,points} the initial weights and training/test data | |
| */ | |
| const generator = () => { | |
| /** | |
| * Generate random number between min and max | |
| * | |
| * @param {float} min | |
| * @param {float} max | |
| * @returns {float} Random number | |
| */ | |
| const rand = (min, max) => Math.random() * (max - min) + min | |
| // random set of data points | |
| const points = length => Array(length).fill().map(() => ({ | |
| x: rand(0, X_MAX), | |
| y: rand(0, Y_MAX) | |
| })) | |
| // initial random weights | |
| const weights = { | |
| x: rand(-1, 1), | |
| y: rand(-1, 1) | |
| } | |
| // we happen to know that this will classify out points correctly | |
| // so we can use it to generate actual values for training examples | |
| const team = point => point.x > point.y ? 1 : 0 | |
| const labeller = examples => examples.map( | |
| point => ({point, actual: team(point)}) | |
| ) | |
| // generate labelled training data | |
| const examples = length => labeller(points(length)) | |
| return { | |
| weights, | |
| points, | |
| examples | |
| } | |
| } | |
| /** | |
| * Neural Network | |
| * | |
| * @param {object} | |
| * @param {object} weights {x,y} Initial weights | |
| * @param {array} examples [{x,y}] Training set examples | |
| * @returns {object} {trainedWeights,prediction} Required data to classify the chart points | |
| */ | |
| const gym = (weights, examples) => { | |
| /** | |
| * Binary classifier | |
| * | |
| * TODO: Is this our activation function too? | |
| * I think so - effectively for a ReLU we want to return output not one | |
| * But we want a binary classifier | |
| * Ah perhaps this is not the activation function | |
| * It just happens that we're assuming that the dot product will never be less zero? | |
| * Or maybe this is a combination of the activation function and the classifier | |
| * For a binary classifier we should be using a sigmoid I think | |
| * But this appears to be using a ReLU and classifying as true if > 0 | |
| * | |
| * @param {integer} output Neuron value before activation function | |
| * @returns {integer} Class of the example 0|1 | |
| */ | |
| const classifier = output => output > 0 ? 1 : 0 | |
| /** | |
| * Matrix dot product | |
| * | |
| * @param {object} a {x,y} | |
| * @param {object} b {x,y} | |
| * @returns {float} Dot product value | |
| */ | |
| const dot = (a, b) => a.x * b.x + a.y * b.y | |
| // make a prediction given the weigts and a point | |
| const prediction = (weights, point) => classifier(dot(weights, point)) | |
| /** | |
| * Single training step | |
| * | |
| * @param {object} weights {x,y} I think this is typically {w1, w2} | |
| * @param {object} point {x,y} Training example typically x1, x2 | |
| * @param {integer} actual 0|1 Correct label for the example | |
| * @returns {object} {x,y} updated weights | |
| */ | |
| const train = (weights, point, actual) => { | |
| // also know as... y_hat | |
| const predict = prediction(weights, point) | |
| // TODO: I'm not convinced this is correct | |
| // Or at least I don't know why it's correct | |
| // It could be by accident because of the line we've chosen | |
| // possibilities are | |
| // actual: 0|1 | |
| // predict: 0|1 | |
| // error: 0|-1|1|0 | |
| // Andrew Ng Deep Learning wk 2: | |
| // This does appear that we're using Logistic Regression | |
| // dZ = A - Y (N.B. matrices, A = activation/predict, Y = actual) | |
| // dw = 1/m X . dZ_T (_T = matrix transpose) | |
| // In individual loop steps (m examples): | |
| // dw = x_1 * dz_1 + x_2 * dx_2 + ... x_m * dx_m (equivalent of {point.x, point.y} * error for all examples) | |
| // dw /= m (it seems we miss the division here) | |
| // w -= alpha * dw | |
| // | |
| // Comparing to my notes it seems like we calculate -error (or -dZ) | |
| // As A - Y is reversed | |
| // Then it makes sense to have a '+' when updating the weights | |
| const error = actual - predict | |
| // TODO: I think this is effectively the back propagation step | |
| // w := w - alpha * dw (as per Andrew Ng python deep learning code) | |
| // N.B. We're currently *not* using the learning rate (alpha) | |
| return { | |
| x: weights.x + (point.x * error), | |
| y: weights.y + (point.y * error) | |
| } | |
| } | |
| const trainer = (acc, example) => train(acc, example.point, example.actual) | |
| // TODO: I think just just does one iteration of gradient descent | |
| const trainedWeights = examples.reduce(trainer, weights) | |
| // console.log(trainedWeights) | |
| return { | |
| train, | |
| prediction, | |
| trainedWeights | |
| } | |
| } | |
| const chart = () => { | |
| const el = name => document.createElementNS( | |
| "http://www.w3.org/2000/svg", | |
| name | |
| ) | |
| const circle = (centre, radius, colour) => { | |
| let c = el("circle") | |
| c.setAttribute("cx", centre.x) | |
| c.setAttribute("cy", centre.y) | |
| c.setAttribute("r", radius) | |
| c.style.fill = colour | |
| return c | |
| } | |
| const clickelem = el => { | |
| /* eslint no-console: "off" */ | |
| el.onclick = e => console.log(e.target.attributes) | |
| return el | |
| } | |
| const line = (start, end, colour) => { | |
| let l = el("line") | |
| l.setAttribute("x1", start.x) | |
| l.setAttribute("y1", start.y) | |
| l.setAttribute("x2", end.x) | |
| l.setAttribute("y2", end.y) | |
| l.setAttribute("stroke", colour) | |
| return l | |
| } | |
| const svg = () => { | |
| let svg = el("svg") | |
| svg.setAttribute("height", Y_MAX) | |
| svg.setAttribute("width", X_MAX) | |
| return svg | |
| } | |
| return { | |
| clickelem, | |
| circle, | |
| line, | |
| svg | |
| } | |
| } | |
| const fill = (generator, gym, chart) => { | |
| const colours = ["red", "blue"] | |
| const graphPoints = generator.points(200) | |
| const svg = chart.svg() | |
| graphPoints.map(point => svg.appendChild( | |
| chart.clickelem(chart.circle( | |
| point, | |
| 5, | |
| colours[gym.prediction(gym.trainedWeights, point)] | |
| )) | |
| )) | |
| graphPoints.map(point => svg.appendChild( | |
| chart.circle(point, 1, "white") | |
| )) | |
| // want the line to appear above the dots | |
| svg.appendChild(chart.line({x: 0, y: 0}, {x: X_MAX, y: Y_MAX}, "gray")) | |
| return svg | |
| } | |
| const chartGen = generator() | |
| const chartGym = gym(chartGen.weights, chartGen.examples(EXAMPLE_COUNT)) | |
| document.getElementById("root").appendChild(fill(chartGen, chartGym, chart())) | |
| return { | |
| chartGym | |
| } | |
| })() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "name": "fff-machine-learning", | |
| "version": "1.0.0", | |
| "lockfileVersion": 1, | |
| "requires": true, | |
| "dependencies": { | |
| "@babel/code-frame": { | |
| "version": "7.0.0", | |
| "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", | |
| "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", | |
| "dev": true, | |
| "requires": { | |
| "@babel/highlight": "7.0.0" | |
| } | |
| }, | |
| "@babel/highlight": { | |
| "version": "7.0.0", | |
| "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", | |
| "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", | |
| "dev": true, | |
| "requires": { | |
| "chalk": "2.4.1", | |
| "esutils": "2.0.2", | |
| "js-tokens": "4.0.0" | |
| } | |
| }, | |
| "acorn": { | |
| "version": "6.0.4", | |
| "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.4.tgz", | |
| "integrity": "sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg==", | |
| "dev": true | |
| }, | |
| "acorn-jsx": { | |
| "version": "5.0.0", | |
| "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.0.tgz", | |
| "integrity": "sha512-XkB50fn0MURDyww9+UYL3c1yLbOBz0ZFvrdYlGB8l+Ije1oSC75qAqrzSPjYQbdnQUzhlUGNKuesryAv0gxZOg==", | |
| "dev": true | |
| }, | |
| "ajv": { | |
| "version": "6.5.5", | |
| "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz", | |
| "integrity": "sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==", | |
| "dev": true, | |
| "requires": { | |
| "fast-deep-equal": "2.0.1", | |
| "fast-json-stable-stringify": "2.0.0", | |
| "json-schema-traverse": "0.4.1", | |
| "uri-js": "4.2.2" | |
| } | |
| }, | |
| "ansi-escapes": { | |
| "version": "3.1.0", | |
| "resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", | |
| "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", | |
| "dev": true | |
| }, | |
| "ansi-regex": { | |
| "version": "3.0.0", | |
| "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", | |
| "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", | |
| "dev": true | |
| }, | |
| "ansi-styles": { | |
| "version": "3.2.1", | |
| "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", | |
| "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", | |
| "dev": true, | |
| "requires": { | |
| "color-convert": "1.9.3" | |
| } | |
| }, | |
| "argparse": { | |
| "version": "1.0.10", | |
| "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", | |
| "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", | |
| "dev": true, | |
| "requires": { | |
| "sprintf-js": "1.0.3" | |
| } | |
| }, | |
| "array-includes": { | |
| "version": "3.0.3", | |
| "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", | |
| "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", | |
| "dev": true, | |
| "requires": { | |
| "define-properties": "1.1.3", | |
| "es-abstract": "1.12.0" | |
| } | |
| }, | |
| "balanced-match": { | |
| "version": "1.0.0", | |
| "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", | |
| "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", | |
| "dev": true | |
| }, | |
| "brace-expansion": { | |
| "version": "1.1.11", | |
| "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", | |
| "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", | |
| "dev": true, | |
| "requires": { | |
| "balanced-match": "1.0.0", | |
| "concat-map": "0.0.1" | |
| } | |
| }, | |
| "caller-path": { | |
| "version": "0.1.0", | |
| "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", | |
| "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", | |
| "dev": true, | |
| "requires": { | |
| "callsites": "0.2.0" | |
| } | |
| }, | |
| "callsites": { | |
| "version": "0.2.0", | |
| "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", | |
| "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", | |
| "dev": true | |
| }, | |
| "chalk": { | |
| "version": "2.4.1", | |
| "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", | |
| "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", | |
| "dev": true, | |
| "requires": { | |
| "ansi-styles": "3.2.1", | |
| "escape-string-regexp": "1.0.5", | |
| "supports-color": "5.5.0" | |
| } | |
| }, | |
| "chardet": { | |
| "version": "0.7.0", | |
| "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", | |
| "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", | |
| "dev": true | |
| }, | |
| "circular-json": { | |
| "version": "0.3.3", | |
| "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", | |
| "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", | |
| "dev": true | |
| }, | |
| "cli-cursor": { | |
| "version": "2.1.0", | |
| "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", | |
| "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", | |
| "dev": true, | |
| "requires": { | |
| "restore-cursor": "2.0.0" | |
| } | |
| }, | |
| "cli-width": { | |
| "version": "2.2.0", | |
| "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", | |
| "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", | |
| "dev": true | |
| }, | |
| "color-convert": { | |
| "version": "1.9.3", | |
| "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", | |
| "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", | |
| "dev": true, | |
| "requires": { | |
| "color-name": "1.1.3" | |
| } | |
| }, | |
| "color-name": { | |
| "version": "1.1.3", | |
| "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", | |
| "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", | |
| "dev": true | |
| }, | |
| "concat-map": { | |
| "version": "0.0.1", | |
| "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", | |
| "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", | |
| "dev": true | |
| }, | |
| "cross-spawn": { | |
| "version": "6.0.5", | |
| "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", | |
| "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", | |
| "dev": true, | |
| "requires": { | |
| "nice-try": "1.0.5", | |
| "path-key": "2.0.1", | |
| "semver": "5.6.0", | |
| "shebang-command": "1.2.0", | |
| "which": "1.3.1" | |
| } | |
| }, | |
| "debug": { | |
| "version": "4.1.0", | |
| "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", | |
| "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", | |
| "dev": true, | |
| "requires": { | |
| "ms": "2.1.1" | |
| } | |
| }, | |
| "deep-is": { | |
| "version": "0.1.3", | |
| "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", | |
| "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", | |
| "dev": true | |
| }, | |
| "define-properties": { | |
| "version": "1.1.3", | |
| "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", | |
| "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", | |
| "dev": true, | |
| "requires": { | |
| "object-keys": "1.0.12" | |
| } | |
| }, | |
| "doctrine": { | |
| "version": "2.1.0", | |
| "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", | |
| "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", | |
| "dev": true, | |
| "requires": { | |
| "esutils": "2.0.2" | |
| } | |
| }, | |
| "es-abstract": { | |
| "version": "1.12.0", | |
| "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", | |
| "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", | |
| "dev": true, | |
| "requires": { | |
| "es-to-primitive": "1.2.0", | |
| "function-bind": "1.1.1", | |
| "has": "1.0.3", | |
| "is-callable": "1.1.4", | |
| "is-regex": "1.0.4" | |
| } | |
| }, | |
| "es-to-primitive": { | |
| "version": "1.2.0", | |
| "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", | |
| "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", | |
| "dev": true, | |
| "requires": { | |
| "is-callable": "1.1.4", | |
| "is-date-object": "1.0.1", | |
| "is-symbol": "1.0.2" | |
| } | |
| }, | |
| "escape-string-regexp": { | |
| "version": "1.0.5", | |
| "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", | |
| "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", | |
| "dev": true | |
| }, | |
| "eslint": { | |
| "version": "5.9.0", | |
| "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.9.0.tgz", | |
| "integrity": "sha512-g4KWpPdqN0nth+goDNICNXGfJF7nNnepthp46CAlJoJtC5K/cLu3NgCM3AHu1CkJ5Hzt9V0Y0PBAO6Ay/gGb+w==", | |
| "dev": true, | |
| "requires": { | |
| "@babel/code-frame": "7.0.0", | |
| "ajv": "6.5.5", | |
| "chalk": "2.4.1", | |
| "cross-spawn": "6.0.5", | |
| "debug": "4.1.0", | |
| "doctrine": "2.1.0", | |
| "eslint-scope": "4.0.0", | |
| "eslint-utils": "1.3.1", | |
| "eslint-visitor-keys": "1.0.0", | |
| "espree": "4.1.0", | |
| "esquery": "1.0.1", | |
| "esutils": "2.0.2", | |
| "file-entry-cache": "2.0.0", | |
| "functional-red-black-tree": "1.0.1", | |
| "glob": "7.1.3", | |
| "globals": "11.9.0", | |
| "ignore": "4.0.6", | |
| "imurmurhash": "0.1.4", | |
| "inquirer": "6.2.0", | |
| "is-resolvable": "1.1.0", | |
| "js-yaml": "3.12.0", | |
| "json-stable-stringify-without-jsonify": "1.0.1", | |
| "levn": "0.3.0", | |
| "lodash": "4.17.11", | |
| "minimatch": "3.0.4", | |
| "mkdirp": "0.5.1", | |
| "natural-compare": "1.4.0", | |
| "optionator": "0.8.2", | |
| "path-is-inside": "1.0.2", | |
| "pluralize": "7.0.0", | |
| "progress": "2.0.1", | |
| "regexpp": "2.0.1", | |
| "require-uncached": "1.0.3", | |
| "semver": "5.6.0", | |
| "strip-ansi": "4.0.0", | |
| "strip-json-comments": "2.0.1", | |
| "table": "5.1.0", | |
| "text-table": "0.2.0" | |
| } | |
| }, | |
| "eslint-plugin-react": { | |
| "version": "7.11.1", | |
| "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz", | |
| "integrity": "sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw==", | |
| "dev": true, | |
| "requires": { | |
| "array-includes": "3.0.3", | |
| "doctrine": "2.1.0", | |
| "has": "1.0.3", | |
| "jsx-ast-utils": "2.0.1", | |
| "prop-types": "15.6.2" | |
| } | |
| }, | |
| "eslint-scope": { | |
| "version": "4.0.0", | |
| "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", | |
| "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", | |
| "dev": true, | |
| "requires": { | |
| "esrecurse": "4.2.1", | |
| "estraverse": "4.2.0" | |
| } | |
| }, | |
| "eslint-utils": { | |
| "version": "1.3.1", | |
| "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", | |
| "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", | |
| "dev": true | |
| }, | |
| "eslint-visitor-keys": { | |
| "version": "1.0.0", | |
| "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", | |
| "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", | |
| "dev": true | |
| }, | |
| "espree": { | |
| "version": "4.1.0", | |
| "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz", | |
| "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", | |
| "dev": true, | |
| "requires": { | |
| "acorn": "6.0.4", | |
| "acorn-jsx": "5.0.0", | |
| "eslint-visitor-keys": "1.0.0" | |
| } | |
| }, | |
| "esprima": { | |
| "version": "4.0.1", | |
| "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", | |
| "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", | |
| "dev": true | |
| }, | |
| "esquery": { | |
| "version": "1.0.1", | |
| "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", | |
| "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", | |
| "dev": true, | |
| "requires": { | |
| "estraverse": "4.2.0" | |
| } | |
| }, | |
| "esrecurse": { | |
| "version": "4.2.1", | |
| "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", | |
| "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", | |
| "dev": true, | |
| "requires": { | |
| "estraverse": "4.2.0" | |
| } | |
| }, | |
| "estraverse": { | |
| "version": "4.2.0", | |
| "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", | |
| "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", | |
| "dev": true | |
| }, | |
| "esutils": { | |
| "version": "2.0.2", | |
| "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", | |
| "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", | |
| "dev": true | |
| }, | |
| "external-editor": { | |
| "version": "3.0.3", | |
| "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", | |
| "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", | |
| "dev": true, | |
| "requires": { | |
| "chardet": "0.7.0", | |
| "iconv-lite": "0.4.24", | |
| "tmp": "0.0.33" | |
| } | |
| }, | |
| "fast-deep-equal": { | |
| "version": "2.0.1", | |
| "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", | |
| "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", | |
| "dev": true | |
| }, | |
| "fast-json-stable-stringify": { | |
| "version": "2.0.0", | |
| "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", | |
| "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", | |
| "dev": true | |
| }, | |
| "fast-levenshtein": { | |
| "version": "2.0.6", | |
| "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", | |
| "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", | |
| "dev": true | |
| }, | |
| "figures": { | |
| "version": "2.0.0", | |
| "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", | |
| "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", | |
| "dev": true, | |
| "requires": { | |
| "escape-string-regexp": "1.0.5" | |
| } | |
| }, | |
| "file-entry-cache": { | |
| "version": "2.0.0", | |
| "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", | |
| "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", | |
| "dev": true, | |
| "requires": { | |
| "flat-cache": "1.3.4", | |
| "object-assign": "4.1.1" | |
| } | |
| }, | |
| "flat-cache": { | |
| "version": "1.3.4", | |
| "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", | |
| "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", | |
| "dev": true, | |
| "requires": { | |
| "circular-json": "0.3.3", | |
| "graceful-fs": "4.1.15", | |
| "rimraf": "2.6.2", | |
| "write": "0.2.1" | |
| } | |
| }, | |
| "fs.realpath": { | |
| "version": "1.0.0", | |
| "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", | |
| "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", | |
| "dev": true | |
| }, | |
| "function-bind": { | |
| "version": "1.1.1", | |
| "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", | |
| "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", | |
| "dev": true | |
| }, | |
| "functional-red-black-tree": { | |
| "version": "1.0.1", | |
| "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", | |
| "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", | |
| "dev": true | |
| }, | |
| "glob": { | |
| "version": "7.1.3", | |
| "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", | |
| "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", | |
| "dev": true, | |
| "requires": { | |
| "fs.realpath": "1.0.0", | |
| "inflight": "1.0.6", | |
| "inherits": "2.0.3", | |
| "minimatch": "3.0.4", | |
| "once": "1.4.0", | |
| "path-is-absolute": "1.0.1" | |
| } | |
| }, | |
| "globals": { | |
| "version": "11.9.0", | |
| "resolved": "https://registry.npmjs.org/globals/-/globals-11.9.0.tgz", | |
| "integrity": "sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg==", | |
| "dev": true | |
| }, | |
| "graceful-fs": { | |
| "version": "4.1.15", | |
| "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", | |
| "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", | |
| "dev": true | |
| }, | |
| "has": { | |
| "version": "1.0.3", | |
| "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", | |
| "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", | |
| "dev": true, | |
| "requires": { | |
| "function-bind": "1.1.1" | |
| } | |
| }, | |
| "has-flag": { | |
| "version": "3.0.0", | |
| "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", | |
| "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", | |
| "dev": true | |
| }, | |
| "has-symbols": { | |
| "version": "1.0.0", | |
| "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", | |
| "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", | |
| "dev": true | |
| }, | |
| "iconv-lite": { | |
| "version": "0.4.24", | |
| "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", | |
| "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", | |
| "dev": true, | |
| "requires": { | |
| "safer-buffer": "2.1.2" | |
| } | |
| }, | |
| "ignore": { | |
| "version": "4.0.6", | |
| "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", | |
| "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", | |
| "dev": true | |
| }, | |
| "imurmurhash": { | |
| "version": "0.1.4", | |
| "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", | |
| "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", | |
| "dev": true | |
| }, | |
| "inflight": { | |
| "version": "1.0.6", | |
| "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", | |
| "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", | |
| "dev": true, | |
| "requires": { | |
| "once": "1.4.0", | |
| "wrappy": "1.0.2" | |
| } | |
| }, | |
| "inherits": { | |
| "version": "2.0.3", | |
| "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", | |
| "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", | |
| "dev": true | |
| }, | |
| "inquirer": { | |
| "version": "6.2.0", | |
| "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz", | |
| "integrity": "sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg==", | |
| "dev": true, | |
| "requires": { | |
| "ansi-escapes": "3.1.0", | |
| "chalk": "2.4.1", | |
| "cli-cursor": "2.1.0", | |
| "cli-width": "2.2.0", | |
| "external-editor": "3.0.3", | |
| "figures": "2.0.0", | |
| "lodash": "4.17.11", | |
| "mute-stream": "0.0.7", | |
| "run-async": "2.3.0", | |
| "rxjs": "6.3.3", | |
| "string-width": "2.1.1", | |
| "strip-ansi": "4.0.0", | |
| "through": "2.3.8" | |
| } | |
| }, | |
| "is-callable": { | |
| "version": "1.1.4", | |
| "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", | |
| "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", | |
| "dev": true | |
| }, | |
| "is-date-object": { | |
| "version": "1.0.1", | |
| "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", | |
| "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", | |
| "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", | |
| "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", | |
| "dev": true | |
| }, | |
| "is-promise": { | |
| "version": "2.1.0", | |
| "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", | |
| "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", | |
| "dev": true | |
| }, | |
| "is-regex": { | |
| "version": "1.0.4", | |
| "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", | |
| "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", | |
| "dev": true, | |
| "requires": { | |
| "has": "1.0.3" | |
| } | |
| }, | |
| "is-resolvable": { | |
| "version": "1.1.0", | |
| "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", | |
| "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", | |
| "dev": true | |
| }, | |
| "is-symbol": { | |
| "version": "1.0.2", | |
| "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", | |
| "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", | |
| "dev": true, | |
| "requires": { | |
| "has-symbols": "1.0.0" | |
| } | |
| }, | |
| "isexe": { | |
| "version": "2.0.0", | |
| "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", | |
| "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", | |
| "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==", | |
| "dev": true | |
| }, | |
| "js-yaml": { | |
| "version": "3.12.0", | |
| "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", | |
| "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", | |
| "dev": true, | |
| "requires": { | |
| "argparse": "1.0.10", | |
| "esprima": "4.0.1" | |
| } | |
| }, | |
| "json-schema-traverse": { | |
| "version": "0.4.1", | |
| "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", | |
| "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", | |
| "dev": true | |
| }, | |
| "json-stable-stringify-without-jsonify": { | |
| "version": "1.0.1", | |
| "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", | |
| "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", | |
| "dev": true | |
| }, | |
| "jsx-ast-utils": { | |
| "version": "2.0.1", | |
| "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", | |
| "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", | |
| "dev": true, | |
| "requires": { | |
| "array-includes": "3.0.3" | |
| } | |
| }, | |
| "levn": { | |
| "version": "0.3.0", | |
| "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", | |
| "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", | |
| "dev": true, | |
| "requires": { | |
| "prelude-ls": "1.1.2", | |
| "type-check": "0.3.2" | |
| } | |
| }, | |
| "lodash": { | |
| "version": "4.17.11", | |
| "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", | |
| "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", | |
| "dev": true | |
| }, | |
| "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==", | |
| "dev": true, | |
| "requires": { | |
| "js-tokens": "4.0.0" | |
| } | |
| }, | |
| "mimic-fn": { | |
| "version": "1.2.0", | |
| "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", | |
| "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", | |
| "dev": true | |
| }, | |
| "minimatch": { | |
| "version": "3.0.4", | |
| "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", | |
| "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", | |
| "dev": true, | |
| "requires": { | |
| "brace-expansion": "1.1.11" | |
| } | |
| }, | |
| "minimist": { | |
| "version": "0.0.8", | |
| "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", | |
| "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", | |
| "dev": true | |
| }, | |
| "mkdirp": { | |
| "version": "0.5.1", | |
| "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", | |
| "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", | |
| "dev": true, | |
| "requires": { | |
| "minimist": "0.0.8" | |
| } | |
| }, | |
| "ms": { | |
| "version": "2.1.1", | |
| "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", | |
| "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", | |
| "dev": true | |
| }, | |
| "mute-stream": { | |
| "version": "0.0.7", | |
| "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", | |
| "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", | |
| "dev": true | |
| }, | |
| "natural-compare": { | |
| "version": "1.4.0", | |
| "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", | |
| "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", | |
| "dev": true | |
| }, | |
| "nice-try": { | |
| "version": "1.0.5", | |
| "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", | |
| "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", | |
| "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=", | |
| "dev": true | |
| }, | |
| "object-keys": { | |
| "version": "1.0.12", | |
| "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", | |
| "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", | |
| "dev": true | |
| }, | |
| "once": { | |
| "version": "1.4.0", | |
| "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", | |
| "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", | |
| "dev": true, | |
| "requires": { | |
| "wrappy": "1.0.2" | |
| } | |
| }, | |
| "onetime": { | |
| "version": "2.0.1", | |
| "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", | |
| "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", | |
| "dev": true, | |
| "requires": { | |
| "mimic-fn": "1.2.0" | |
| } | |
| }, | |
| "optionator": { | |
| "version": "0.8.2", | |
| "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", | |
| "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", | |
| "dev": true, | |
| "requires": { | |
| "deep-is": "0.1.3", | |
| "fast-levenshtein": "2.0.6", | |
| "levn": "0.3.0", | |
| "prelude-ls": "1.1.2", | |
| "type-check": "0.3.2", | |
| "wordwrap": "1.0.0" | |
| } | |
| }, | |
| "os-tmpdir": { | |
| "version": "1.0.2", | |
| "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", | |
| "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", | |
| "dev": true | |
| }, | |
| "path-is-absolute": { | |
| "version": "1.0.1", | |
| "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", | |
| "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", | |
| "dev": true | |
| }, | |
| "path-is-inside": { | |
| "version": "1.0.2", | |
| "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", | |
| "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", | |
| "dev": true | |
| }, | |
| "path-key": { | |
| "version": "2.0.1", | |
| "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", | |
| "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", | |
| "dev": true | |
| }, | |
| "pluralize": { | |
| "version": "7.0.0", | |
| "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", | |
| "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", | |
| "dev": true | |
| }, | |
| "prelude-ls": { | |
| "version": "1.1.2", | |
| "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", | |
| "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", | |
| "dev": true | |
| }, | |
| "progress": { | |
| "version": "2.0.1", | |
| "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.1.tgz", | |
| "integrity": "sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg==", | |
| "dev": true | |
| }, | |
| "prop-types": { | |
| "version": "15.6.2", | |
| "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", | |
| "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", | |
| "dev": true, | |
| "requires": { | |
| "loose-envify": "1.4.0", | |
| "object-assign": "4.1.1" | |
| } | |
| }, | |
| "punycode": { | |
| "version": "2.1.1", | |
| "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", | |
| "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", | |
| "dev": true | |
| }, | |
| "regexpp": { | |
| "version": "2.0.1", | |
| "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", | |
| "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", | |
| "dev": true | |
| }, | |
| "require-uncached": { | |
| "version": "1.0.3", | |
| "resolved": "http://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", | |
| "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", | |
| "dev": true, | |
| "requires": { | |
| "caller-path": "0.1.0", | |
| "resolve-from": "1.0.1" | |
| } | |
| }, | |
| "resolve-from": { | |
| "version": "1.0.1", | |
| "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", | |
| "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", | |
| "dev": true | |
| }, | |
| "restore-cursor": { | |
| "version": "2.0.0", | |
| "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", | |
| "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", | |
| "dev": true, | |
| "requires": { | |
| "onetime": "2.0.1", | |
| "signal-exit": "3.0.2" | |
| } | |
| }, | |
| "rimraf": { | |
| "version": "2.6.2", | |
| "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", | |
| "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", | |
| "dev": true, | |
| "requires": { | |
| "glob": "7.1.3" | |
| } | |
| }, | |
| "run-async": { | |
| "version": "2.3.0", | |
| "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", | |
| "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", | |
| "dev": true, | |
| "requires": { | |
| "is-promise": "2.1.0" | |
| } | |
| }, | |
| "rxjs": { | |
| "version": "6.3.3", | |
| "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", | |
| "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", | |
| "dev": true, | |
| "requires": { | |
| "tslib": "1.9.3" | |
| } | |
| }, | |
| "safer-buffer": { | |
| "version": "2.1.2", | |
| "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", | |
| "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", | |
| "dev": true | |
| }, | |
| "semver": { | |
| "version": "5.6.0", | |
| "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", | |
| "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", | |
| "dev": true | |
| }, | |
| "shebang-command": { | |
| "version": "1.2.0", | |
| "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", | |
| "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", | |
| "dev": true, | |
| "requires": { | |
| "shebang-regex": "1.0.0" | |
| } | |
| }, | |
| "shebang-regex": { | |
| "version": "1.0.0", | |
| "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", | |
| "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", | |
| "dev": true | |
| }, | |
| "signal-exit": { | |
| "version": "3.0.2", | |
| "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", | |
| "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", | |
| "dev": true | |
| }, | |
| "slice-ansi": { | |
| "version": "1.0.0", | |
| "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", | |
| "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", | |
| "dev": true, | |
| "requires": { | |
| "is-fullwidth-code-point": "2.0.0" | |
| } | |
| }, | |
| "sprintf-js": { | |
| "version": "1.0.3", | |
| "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", | |
| "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", | |
| "dev": true | |
| }, | |
| "string-width": { | |
| "version": "2.1.1", | |
| "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", | |
| "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", | |
| "dev": true, | |
| "requires": { | |
| "is-fullwidth-code-point": "2.0.0", | |
| "strip-ansi": "4.0.0" | |
| } | |
| }, | |
| "strip-ansi": { | |
| "version": "4.0.0", | |
| "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", | |
| "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", | |
| "dev": true, | |
| "requires": { | |
| "ansi-regex": "3.0.0" | |
| } | |
| }, | |
| "strip-json-comments": { | |
| "version": "2.0.1", | |
| "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", | |
| "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", | |
| "dev": true | |
| }, | |
| "supports-color": { | |
| "version": "5.5.0", | |
| "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", | |
| "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", | |
| "dev": true, | |
| "requires": { | |
| "has-flag": "3.0.0" | |
| } | |
| }, | |
| "table": { | |
| "version": "5.1.0", | |
| "resolved": "https://registry.npmjs.org/table/-/table-5.1.0.tgz", | |
| "integrity": "sha512-e542in22ZLhD/fOIuXs/8yDZ9W61ltF8daM88rkRNtgTIct+vI2fTnAyu/Db2TCfEcI8i7mjZz6meLq0nW7TYg==", | |
| "dev": true, | |
| "requires": { | |
| "ajv": "6.5.5", | |
| "lodash": "4.17.11", | |
| "slice-ansi": "1.0.0", | |
| "string-width": "2.1.1" | |
| } | |
| }, | |
| "text-table": { | |
| "version": "0.2.0", | |
| "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", | |
| "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", | |
| "dev": true | |
| }, | |
| "through": { | |
| "version": "2.3.8", | |
| "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", | |
| "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", | |
| "dev": true | |
| }, | |
| "tmp": { | |
| "version": "0.0.33", | |
| "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", | |
| "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", | |
| "dev": true, | |
| "requires": { | |
| "os-tmpdir": "1.0.2" | |
| } | |
| }, | |
| "tslib": { | |
| "version": "1.9.3", | |
| "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", | |
| "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", | |
| "dev": true | |
| }, | |
| "type-check": { | |
| "version": "0.3.2", | |
| "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", | |
| "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", | |
| "dev": true, | |
| "requires": { | |
| "prelude-ls": "1.1.2" | |
| } | |
| }, | |
| "uri-js": { | |
| "version": "4.2.2", | |
| "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", | |
| "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", | |
| "dev": true, | |
| "requires": { | |
| "punycode": "2.1.1" | |
| } | |
| }, | |
| "which": { | |
| "version": "1.3.1", | |
| "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", | |
| "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", | |
| "dev": true, | |
| "requires": { | |
| "isexe": "2.0.0" | |
| } | |
| }, | |
| "wordwrap": { | |
| "version": "1.0.0", | |
| "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", | |
| "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", | |
| "dev": true | |
| }, | |
| "wrappy": { | |
| "version": "1.0.2", | |
| "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", | |
| "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", | |
| "dev": true | |
| }, | |
| "write": { | |
| "version": "0.2.1", | |
| "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", | |
| "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", | |
| "dev": true, | |
| "requires": { | |
| "mkdirp": "0.5.1" | |
| } | |
| } | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "name": "fff-machine-learning", | |
| "version": "1.0.0", | |
| "description": "Recreation of funfunfunction machine learning video", | |
| "main": "machine-learning.js", | |
| "scripts": { | |
| "test": "echo \"Error: no test specified\" && exit 1" | |
| }, | |
| "repository": { | |
| "type": "git", | |
| "url": "git+ssh://[email protected]/d6791c8181fbee2bb4a83c442219f77a.git" | |
| }, | |
| "keywords": [ | |
| "machine-learning", | |
| "javascript" | |
| ], | |
| "author": "Ian Channing", | |
| "license": "MIT", | |
| "bugs": { | |
| "url": "https://gist.github.com/d6791c8181fbee2bb4a83c442219f77a" | |
| }, | |
| "homepage": "https://gist.github.com/d6791c8181fbee2bb4a83c442219f77a", | |
| "devDependencies": { | |
| "eslint": "^5.9.0", | |
| "eslint-plugin-react": "^7.11.1" | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment