├── .gitignore
├── LICENSE
├── R
└── index.R
├── README.md
├── client
├── .babelrc
├── .gitignore
├── README.md
├── package.json
├── pnpm-lock.yaml
├── postcss.config.js
├── public
│ ├── app.f27b8b0d83e42c8873f5.js
│ ├── app.f523307627ce6072e50b.css
│ └── index.html
├── src
│ ├── App.js
│ ├── index.css
│ ├── index.html
│ └── index.js
└── webpack.config.js
├── package.json
├── pnpm-lock.yaml
├── r-react-demo-screenshot.png
├── r-react-demo.code-workspace
└── server.js
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | .DS_STORE
3 | .Rproj.user/
4 | .Rproj
5 | .cache
6 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 dcruvolo
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/R/index.R:
--------------------------------------------------------------------------------
1 | #'//////////////////////////////////////////////////////////////////////////////
2 | #' FILE: index.R
3 | #' AUTHOR: David Ruvolo
4 | #' CREATED: 2019-11-01
5 | #' MODIFIED: 2019-12-05
6 | #' PURPOSE: summarize data
7 | #' PACKAGES: r-script; https://github.com/fridgerator/r-script
8 | #' STATUS: working
9 | #' COMMENTS: NA
10 | #'//////////////////////////////////////////////////////////////////////////////
11 |
12 | input[[1]] ^ input[[2]]
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # R ❤️ React Demo application
2 |
3 | 
4 |
5 | The `r-react-demo` app demonstrates how to create a React application that uses R to process data server side. This is a fairly simple example, but it should provide a good starting point for your project. The app was built using the following tools.
6 |
7 | - Frontend
8 | - [React](https://reactjs.org)
9 | - [Webpack](https://webpack.js.org)
10 | - Backend
11 | - [Express](https://expressjs.com)
12 | - [r-script](https://github.com/fridgerator/r-script)
13 |
14 | ## Getting Started
15 |
16 | ### 1. Install Node and NPM
17 |
18 | Make sure [Node and NPM](https://nodejs.org/en/) are installed on your machine. You may also use [Yarn](https://yarnpkg.com/en/). To test the installation or to see if these tools are already installed on your machine, run the following commands in the terminal.
19 |
20 | ```shell
21 | node -v
22 | npm -v
23 | ```
24 |
25 | ### 2. Clone the `r-react-demo` repository
26 |
27 | ```shell
28 | git clone https://github.com/davidruvolo51/r-react-demo
29 | ```
30 |
31 | ### 3. Install dependencies
32 |
33 | Next, install the npm packages that are required to run the app locally. I have decided to use [pnpm](https://github.com/pnpm/pnpm) to manage packages on my machine and across projects. To install `pnpm`, run the following command.
34 |
35 | ```shell
36 | npm install -g pnpm
37 | ```
38 |
39 | You will need to install the dependencies in the root directory and in the `client/` directory.
40 |
41 | ```shell
42 | pnpm install
43 |
44 | cd client
45 | pnpm install
46 | ```
47 |
48 | If you prefer to use `npm`, use the following.
49 |
50 | ```shell
51 | npm install
52 |
53 | cd client
54 | npm install
55 | ```
56 |
57 | ### 4. Start the development servers
58 |
59 | When everything is install, navigate back to the main directory and start the development server. This will start the client at port `localhost:8000` and the API at `localhost:5000`.
60 |
61 | ```shell
62 | npm run dev
63 | ```
64 |
65 | ## Futher Reading
66 |
67 | This application was built by piecing together a few blog posts. If you would like to start from scratch, checkout out the [How to create a React frontend and a Node/Express backend and connect them](https://www.freecodecamp.org/news/create-a-react-frontend-a-node-express-backend-and-connect-them-together-c5798926047c/) post.
68 |
--------------------------------------------------------------------------------
/client/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | [
4 | "@babel/preset-env",
5 | {
6 | "modules": false,
7 | }
8 | ],
9 | "@babel/preset-react"
10 | ],
11 | "plugins": [
12 | [
13 | "@babel/plugin-transform-runtime",
14 | {
15 | "regenerator": true
16 | }
17 | ]
18 | ]
19 | }
--------------------------------------------------------------------------------
/client/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/client/README.md:
--------------------------------------------------------------------------------
1 | This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
2 |
3 | ## Available Scripts
4 |
5 | In the project directory, you can run:
6 |
7 | ### `yarn start`
8 |
9 | Runs the app in the development mode.
10 | Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
11 |
12 | The page will reload if you make edits.
13 | You will also see any lint errors in the console.
14 |
15 | ### `yarn test`
16 |
17 | Launches the test runner in the interactive watch mode.
18 | See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
19 |
20 | ### `yarn build`
21 |
22 | Builds the app for production to the `build` folder.
23 | It correctly bundles React in production mode and optimizes the build for the best performance.
24 |
25 | The build is minified and the filenames include the hashes.
26 | Your app is ready to be deployed!
27 |
28 | See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
29 |
30 | ### `yarn eject`
31 |
32 | **Note: this is a one-way operation. Once you `eject`, you can’t go back!**
33 |
34 | If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
35 |
36 | Instead, it will copy all the configuration files and the transitive dependencies (Webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.
37 |
38 | You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.
39 |
40 | ## Learn More
41 |
42 | You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
43 |
44 | To learn React, check out the [React documentation](https://reactjs.org/).
45 |
46 | ### Code Splitting
47 |
48 | This section has moved here: https://facebook.github.io/create-react-app/docs/code-splitting
49 |
50 | ### Analyzing the Bundle Size
51 |
52 | This section has moved here: https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size
53 |
54 | ### Making a Progressive Web App
55 |
56 | This section has moved here: https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app
57 |
58 | ### Advanced Configuration
59 |
60 | This section has moved here: https://facebook.github.io/create-react-app/docs/advanced-configuration
61 |
62 | ### Deployment
63 |
64 | This section has moved here: https://facebook.github.io/create-react-app/docs/deployment
65 |
66 | ### `yarn build` fails to minify
67 |
68 | This section has moved here: https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify
69 |
--------------------------------------------------------------------------------
/client/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "client",
3 | "version": "0.1.0",
4 | "private": true,
5 | "proxy": "http://localhost:5000/",
6 | "license": "MIT",
7 | "scripts": {
8 | "start": "webpack serve"
9 | },
10 | "dependencies": {
11 | "@babel/runtime": "^7.13.10",
12 | "async_hooks": "^1.0.0",
13 | "babel-runtime": "^6.26.0",
14 | "react": "^17.0.1",
15 | "react-dom": "^17.0.1"
16 | },
17 | "devDependencies": {
18 | "@babel/core": "^7.13.10",
19 | "@babel/plugin-transform-runtime": "^7.13.10",
20 | "@babel/preset-env": "^7.13.10",
21 | "@babel/preset-react": "^7.12.13",
22 | "autoprefixer": "^10.2.5",
23 | "babel-loader": "^8.2.2",
24 | "clean-webpack-plugin": "^3.0.0",
25 | "copy-webpack-plugin": "^7.0.0",
26 | "css-loader": "^5.1.3",
27 | "file-loader": "^6.2.0",
28 | "html-webpack-plugin": "^4.5.2",
29 | "mini-css-extract-plugin": "^1.3.9",
30 | "optimize-css-assets-webpack-plugin": "^5.0.4",
31 | "postcss-loader": "^5.2.0",
32 | "postcss-modules": "^4.0.0",
33 | "sass": "^1.32.8",
34 | "sass-loader": "^10.1.1",
35 | "style-loader": "^2.0.0",
36 | "terser-webpack-plugin": "^5.1.1",
37 | "webpack": "^5.26.3",
38 | "webpack-cli": "^4.5.0",
39 | "webpack-dev-server": "^3.11.2"
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/client/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: [
3 | require("autoprefixer")
4 | ]
5 | }
--------------------------------------------------------------------------------
/client/public/app.f523307627ce6072e50b.css:
--------------------------------------------------------------------------------
1 | html, body {
2 | margin: 0;
3 | padding: 0;
4 | font-family: Helvetica, Arial, sans-serif;
5 | font-size: 16pt;
6 | color: #3f454b;
7 | }
8 |
9 | header, main, section, form, fieldset {
10 | padding: 0;
11 | margin: 0;
12 | }
13 |
14 | fieldset {
15 | display: inline;
16 | border: none;
17 | box-sizing: border-box;
18 | width: 50%;
19 | }
20 |
21 | h1, h2 {
22 | color: #252525;
23 | line-height: 1.4;
24 | padding: 0;
25 | margin: 0;
26 | }
27 |
28 | p {
29 | margin: 0;
30 | padding: 0;
31 | line-height: 1.65;
32 | margin-bottom: 12px;
33 | }
34 |
35 | .header {
36 | position: fixed;
37 | display: block;
38 | width: 100%;
39 | z-index: 10;
40 | background-color: #252525;
41 | top: 0;
42 | }
43 |
44 | .header p {
45 | text-align: center;
46 | color: #f0f0f0;
47 | font-size: 14pt;
48 | text-transform: uppercase;
49 | letter-spacing: 2px;
50 | font-weight: 600;
51 | padding: 10px 0;
52 | margin: 0;
53 | }
54 |
55 | .main {
56 | margin-top: 80px;
57 | padding-top: 12px;
58 | padding-bottom: 50px;
59 | }
60 |
61 | .section {
62 | width: 90%;
63 | margin: 0 auto;
64 | }
65 |
66 | .form {
67 | background-color: #f3f3f3;
68 | padding: 12px;
69 | margin-bottom: 24px;
70 | }
71 |
72 | label {
73 | display: block;
74 | margin-top: 12px;
75 | font-size: 14pt;
76 | text-transform: uppercase;
77 | letter-spacing: 2px;
78 | font-weight: 600;
79 | color: #252525;
80 | }
81 |
82 | .form span {
83 | display: block;
84 | font-size: 12pt;
85 | }
86 |
87 | input[type=number] {
88 | display: inline-block;
89 | margin: 6px 0;
90 | width: 200px;
91 | padding: 4px 0;
92 | font-size: 12pt;
93 | font-weight: 600;
94 | text-align: center;
95 | }
96 |
97 | button[type=submit] {
98 | display: block;
99 | float: right;
100 | -webkit-appearance: none;
101 | -moz-appearance: none;
102 | appearance: none;
103 | border: none;
104 | background-color: #252525;
105 | color: #f0f0f0;
106 | font-size: 14pt;
107 | letter-spacing: 2px;
108 | text-transform: uppercase;
109 | font-weight: 600;
110 | width: 200px;
111 | margin: 24px 0;
112 | margin-right: -12px;
113 | padding: 6px 0;
114 | border-radius: 3px;
115 | cursor: pointer;
116 | }
117 |
118 | output {
119 | display: block;
120 | background-color: #f3f3f3;
121 | margin-top: 12px;
122 | padding: 12px 6px;
123 | padding-left: 12px;
124 | font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace;
125 | }
126 |
127 | @media screen and (min-width: 912px) {
128 | .section {
129 | max-width: 912px;
130 | }
131 | }
132 |
--------------------------------------------------------------------------------
/client/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | R + React
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/client/src/App.js:
--------------------------------------------------------------------------------
1 | ////////////////////////////////////////////////////////////////////////////////
2 | // FILE: App.js
3 | // AUTHOR: David Ruvolo
4 | // CREATED: 2019-11-01
5 | // MODIFIED: 2021-01-18
6 | // PURPOSE: build ui
7 | // DEPENDENCIES: react
8 | // STATUS: working
9 | // COMMENTS: NA
10 | ////////////////////////////////////////////////////////////////////////////////
11 | import React, { useState } from 'react';
12 | function App() {
13 |
14 | // set state
15 | const [inputValue, setInputValue] = useState(1);
16 | const [inputPower, setInputPower] = useState(2);
17 | const [squaredJS, setSquaredJS] = useState(0);
18 | const [squaredR, setSquaredR] = useState(0);
19 |
20 | // on form submit function
21 | // send input values to /data/ and wait for response
22 | const handleSubmit = async e => {
23 | e.preventDefault();
24 |
25 | // create response through POST
26 | const response = await fetch("http://localhost:5000/data", {
27 | method: "POST",
28 | mode: "cors",
29 | headers: {
30 | "Content-Type": "application/json",
31 | },
32 | body: JSON.stringify({ value: inputValue, power: inputPower }),
33 | });
34 |
35 | const body = await response.json();
36 |
37 | // update state
38 | setSquaredJS(body.squaredJS);
39 | setSquaredR(body.squaredR);
40 | };
41 |
42 | ////////////////////////////////////////
43 | // RENDER APP
44 | return (
45 | <>
46 |
49 |
50 |
51 | Example app using R, React, and Node.js
52 | In this example, we are sending a number the server, squaring by a number of our choice using R and JavaScript, and then sending it back to our react component.
53 |
67 | Results
68 | {
69 | // render only after first entry
70 | squaredJS > 0
71 | ? (
72 | <>
73 | via JavaScript using Math.pow(...)
74 | {squaredJS}
75 | via R using squared()
76 | {squaredR}
77 | >
78 | )
79 | : Results will appear here
80 | }
81 |
82 |
83 | >
84 | );
85 | }
86 |
87 | export default App;
--------------------------------------------------------------------------------
/client/src/index.css:
--------------------------------------------------------------------------------
1 | html, body {
2 | margin: 0;
3 | padding: 0;
4 | font-family: Helvetica, Arial, sans-serif;
5 | font-size: 16pt;
6 | color: #3f454b;
7 | }
8 |
9 | header, main, section, form, fieldset {
10 | padding: 0;
11 | margin: 0;
12 | }
13 |
14 | fieldset {
15 | display: inline;
16 | border: none;
17 | box-sizing: border-box;
18 | width: 50%;
19 | }
20 |
21 | h1, h2 {
22 | color: #252525;
23 | line-height: 1.4;
24 | padding: 0;
25 | margin: 0;
26 | }
27 |
28 | p {
29 | margin: 0;
30 | padding: 0;
31 | line-height: 1.65;
32 | margin-bottom: 12px;
33 | }
34 |
35 | .header {
36 | position: fixed;
37 | display: block;
38 | width: 100%;
39 | z-index: 10;
40 | background-color: #252525;
41 | top: 0;
42 | }
43 |
44 |
45 | .header p {
46 | text-align: center;
47 | color: #f0f0f0;
48 | font-size: 14pt;
49 | text-transform: uppercase;
50 | letter-spacing: 2px;
51 | font-weight: 600;
52 | padding: 10px 0;
53 | margin: 0;
54 | }
55 |
56 | .main {
57 | margin-top: 80px;
58 | padding-top: 12px;
59 | padding-bottom: 50px;
60 | }
61 |
62 | .section {
63 | width: 90%;
64 | margin: 0 auto;
65 | }
66 |
67 | .form {
68 | background-color: #f3f3f3;
69 | padding: 12px;
70 | margin-bottom: 24px;
71 | }
72 |
73 | label {
74 | display: block;
75 | margin-top: 12px;
76 | font-size: 14pt;
77 | text-transform: uppercase;
78 | letter-spacing: 2px;
79 | font-weight: 600;
80 | color: #252525;
81 | }
82 |
83 | .form span {
84 | display: block;
85 | font-size: 12pt;
86 | }
87 |
88 | input[type=number] {
89 | display: inline-block;
90 | margin: 6px 0;
91 | width: 200px;
92 | padding: 4px 0;
93 | font-size: 12pt;
94 | font-weight: 600;
95 | text-align: center;
96 | }
97 |
98 | button[type=submit]{
99 | display: block;
100 | float: right;
101 | appearance: none;
102 | border: none;
103 | background-color: #252525;
104 | color: #f0f0f0;
105 | font-size: 14pt;
106 | letter-spacing: 2px;
107 | text-transform: uppercase;
108 | font-weight: 600;
109 | width: 200px;
110 | margin: 24px 0;
111 | margin-right: -12px;
112 | padding: 6px 0;
113 | border-radius: 3px;
114 | cursor: pointer;
115 | }
116 |
117 | output {
118 | display: block;
119 | background-color: #f3f3f3;
120 | margin-top: 12px;
121 | padding: 12px 6px;
122 | padding-left: 12px;
123 | font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace;
124 | }
125 |
126 | @media screen and (min-width: 912px){
127 |
128 | .section {
129 | max-width: 912px;
130 | }
131 | }
--------------------------------------------------------------------------------
/client/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | R + React
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/client/src/index.js:
--------------------------------------------------------------------------------
1 | ////////////////////////////////////////////////////////////////////////////////
2 | // FILE: index.js
3 | // AUTHOR: David Ruvolo
4 | // CREATED: 2019-11-01
5 | // MODIFIED: 2020-11-18
6 | // PURPOSE: main index file
7 | // DEPENDENCIES: react, reactDOM, service worker
8 | // STATUS: working
9 | // COMMENTS: NA
10 | ////////////////////////////////////////////////////////////////////////////////
11 | import React from 'react';
12 | import ReactDOM from 'react-dom';
13 | import './index.css';
14 | import App from './App';
15 |
16 | ReactDOM.render( , document.getElementById('root'));
17 |
--------------------------------------------------------------------------------
/client/webpack.config.js:
--------------------------------------------------------------------------------
1 | ////////////////////////////////////////////////////////////////////////////////
2 | // FILE: webpack.config.js
3 | // AUTHOR: David Ruvolo
4 | // CREATED: 2020-09-26
5 | // MODIFIED: 2020-11-18
6 | // PURPOSE: loads dev or prod configuration based on script param `env`
7 | // DEPENDENCIES: see common
8 | // STATUS: working
9 | // COMMENTS: NA
10 | ////////////////////////////////////////////////////////////////////////////////
11 |
12 | // load
13 | const { CleanWebpackPlugin } = require("clean-webpack-plugin");
14 | const MiniCssExtractPlugin = require('mini-css-extract-plugin');
15 | const path = require("path");
16 | const HtmlWebpackPlugin = require("html-webpack-plugin");
17 |
18 | console.log(path.__dirname)
19 |
20 | // configuration
21 | module.exports = {
22 | mode: "development",
23 | entry: "./src/index.js",
24 | output: {
25 | publicPath: "",
26 | path: path.resolve(__dirname, "public/"),
27 | filename: "app.[contenthash].js",
28 | },
29 | devServer: {
30 | port: 8000,
31 | hot: true,
32 | writeToDisk: true,
33 | },
34 | plugins: [
35 | // new webpack.ProgressPlugin(),
36 | new HtmlWebpackPlugin({
37 | template: "src/index.html",
38 | filename: "index.html",
39 | }),
40 | new MiniCssExtractPlugin({
41 | filename: "app.[contenthash].css",
42 | }),
43 | new CleanWebpackPlugin(),
44 | ],
45 | module: {
46 | rules: [
47 | {
48 | test: /\.(js|jsx)$/,
49 | use: "babel-loader",
50 | exclude: /node_modules/,
51 | },
52 | {
53 | test: /\.(s[ac]ss|css)$/i,
54 | use: [
55 | MiniCssExtractPlugin.loader,
56 | "css-loader",
57 | "postcss-loader",
58 | "sass-loader",
59 | ]
60 | },
61 | {
62 | test: /\.(woff|woff2|eot|ttf|otf)$/,
63 | use: [
64 | "file-loader"
65 | ]
66 | },
67 | {
68 | test: /\.(png|svg|jpg|gif)$/,
69 | use: [
70 | "file-loader"
71 | ]
72 | },
73 | ]
74 | },
75 | resolve: {
76 | extensions: [
77 | ".js",
78 | ".jsx"
79 | ]
80 | }
81 | }
82 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "api",
3 | "version": "1.0.0",
4 | "scripts": {
5 | "setup": "pnpm install && cd client && pnpm install",
6 | "upgrade": "pnpm upgrade --latest && cd client && pnpm upgrade --latest",
7 | "client": "cd client && yarn start",
8 | "server": "nodemon server.js",
9 | "dev": "concurrently --kill-others-on-fail \"yarn server\" \"yarn client\""
10 | },
11 | "dependencies": {
12 | "@fridgerator/r-script": "^0.1.7",
13 | "body-parser": "^1.19.0",
14 | "cors": "^2.8.5",
15 | "express": "^4.17.1"
16 | },
17 | "devDependencies": {
18 | "concurrently": "^5.3.0",
19 | "nodemon": "^2.0.7"
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: 5.3
2 |
3 | specifiers:
4 | '@fridgerator/r-script': ^0.1.7
5 | body-parser: ^1.19.0
6 | concurrently: ^5.3.0
7 | cors: ^2.8.5
8 | express: ^4.17.1
9 | nodemon: ^2.0.7
10 |
11 | dependencies:
12 | '@fridgerator/r-script': 0.1.7
13 | body-parser: 1.19.0
14 | cors: 2.8.5
15 | express: 4.17.1
16 |
17 | devDependencies:
18 | concurrently: 5.3.0
19 | nodemon: 2.0.7
20 |
21 | packages:
22 |
23 | /@fridgerator/r-script/0.1.7:
24 | resolution: {integrity: sha512-TBmfPI0+yPkiNPjlzwiS5ltwg8489WBpgzqtKNFvX/0y7zAuyrTNfzNClC3uzi8N/kznZqV4BdIFiLfEz0qdEg==}
25 | dev: false
26 |
27 | /@sindresorhus/is/0.14.0:
28 | resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==}
29 | engines: {node: '>=6'}
30 | dev: true
31 |
32 | /@szmarczak/http-timer/1.1.2:
33 | resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==}
34 | engines: {node: '>=6'}
35 | dependencies:
36 | defer-to-connect: 1.1.3
37 | dev: true
38 |
39 | /abbrev/1.1.1:
40 | resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
41 | dev: true
42 |
43 | /accepts/1.3.7:
44 | resolution: {integrity: sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==}
45 | engines: {node: '>= 0.6'}
46 | dependencies:
47 | mime-types: 2.1.30
48 | negotiator: 0.6.2
49 | dev: false
50 |
51 | /ansi-align/3.0.0:
52 | resolution: {integrity: sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==}
53 | dependencies:
54 | string-width: 3.1.0
55 | dev: true
56 |
57 | /ansi-regex/4.1.0:
58 | resolution: {integrity: sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==}
59 | engines: {node: '>=6'}
60 | dev: true
61 |
62 | /ansi-regex/5.0.0:
63 | resolution: {integrity: sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==}
64 | engines: {node: '>=8'}
65 | dev: true
66 |
67 | /ansi-styles/3.2.1:
68 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
69 | engines: {node: '>=4'}
70 | dependencies:
71 | color-convert: 1.9.3
72 | dev: true
73 |
74 | /ansi-styles/4.3.0:
75 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
76 | engines: {node: '>=8'}
77 | dependencies:
78 | color-convert: 2.0.1
79 | dev: true
80 |
81 | /anymatch/3.1.2:
82 | resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==}
83 | engines: {node: '>= 8'}
84 | dependencies:
85 | normalize-path: 3.0.0
86 | picomatch: 2.2.3
87 | dev: true
88 |
89 | /array-flatten/1.1.1:
90 | resolution: {integrity: sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=}
91 | dev: false
92 |
93 | /balanced-match/1.0.2:
94 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
95 | dev: true
96 |
97 | /binary-extensions/2.2.0:
98 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
99 | engines: {node: '>=8'}
100 | dev: true
101 |
102 | /body-parser/1.19.0:
103 | resolution: {integrity: sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==}
104 | engines: {node: '>= 0.8'}
105 | dependencies:
106 | bytes: 3.1.0
107 | content-type: 1.0.4
108 | debug: 2.6.9
109 | depd: 1.1.2
110 | http-errors: 1.7.2
111 | iconv-lite: 0.4.24
112 | on-finished: 2.3.0
113 | qs: 6.7.0
114 | raw-body: 2.4.0
115 | type-is: 1.6.18
116 | dev: false
117 |
118 | /boxen/4.2.0:
119 | resolution: {integrity: sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==}
120 | engines: {node: '>=8'}
121 | dependencies:
122 | ansi-align: 3.0.0
123 | camelcase: 5.3.1
124 | chalk: 3.0.0
125 | cli-boxes: 2.2.1
126 | string-width: 4.2.2
127 | term-size: 2.2.1
128 | type-fest: 0.8.1
129 | widest-line: 3.1.0
130 | dev: true
131 |
132 | /brace-expansion/1.1.11:
133 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
134 | dependencies:
135 | balanced-match: 1.0.2
136 | concat-map: 0.0.1
137 | dev: true
138 |
139 | /braces/3.0.2:
140 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
141 | engines: {node: '>=8'}
142 | dependencies:
143 | fill-range: 7.0.1
144 | dev: true
145 |
146 | /bytes/3.1.0:
147 | resolution: {integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==}
148 | engines: {node: '>= 0.8'}
149 | dev: false
150 |
151 | /cacheable-request/6.1.0:
152 | resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==}
153 | engines: {node: '>=8'}
154 | dependencies:
155 | clone-response: 1.0.2
156 | get-stream: 5.2.0
157 | http-cache-semantics: 4.1.0
158 | keyv: 3.1.0
159 | lowercase-keys: 2.0.0
160 | normalize-url: 4.5.0
161 | responselike: 1.0.2
162 | dev: true
163 |
164 | /camelcase/5.3.1:
165 | resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
166 | engines: {node: '>=6'}
167 | dev: true
168 |
169 | /chalk/2.4.2:
170 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
171 | engines: {node: '>=4'}
172 | dependencies:
173 | ansi-styles: 3.2.1
174 | escape-string-regexp: 1.0.5
175 | supports-color: 5.5.0
176 | dev: true
177 |
178 | /chalk/3.0.0:
179 | resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==}
180 | engines: {node: '>=8'}
181 | dependencies:
182 | ansi-styles: 4.3.0
183 | supports-color: 7.2.0
184 | dev: true
185 |
186 | /chokidar/3.5.1:
187 | resolution: {integrity: sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==}
188 | engines: {node: '>= 8.10.0'}
189 | dependencies:
190 | anymatch: 3.1.2
191 | braces: 3.0.2
192 | glob-parent: 5.1.2
193 | is-binary-path: 2.1.0
194 | is-glob: 4.0.1
195 | normalize-path: 3.0.0
196 | readdirp: 3.5.0
197 | optionalDependencies:
198 | fsevents: 2.3.2
199 | dev: true
200 |
201 | /ci-info/2.0.0:
202 | resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==}
203 | dev: true
204 |
205 | /cli-boxes/2.2.1:
206 | resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==}
207 | engines: {node: '>=6'}
208 | dev: true
209 |
210 | /cliui/5.0.0:
211 | resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==}
212 | dependencies:
213 | string-width: 3.1.0
214 | strip-ansi: 5.2.0
215 | wrap-ansi: 5.1.0
216 | dev: true
217 |
218 | /clone-response/1.0.2:
219 | resolution: {integrity: sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=}
220 | dependencies:
221 | mimic-response: 1.0.1
222 | dev: true
223 |
224 | /color-convert/1.9.3:
225 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
226 | dependencies:
227 | color-name: 1.1.3
228 | dev: true
229 |
230 | /color-convert/2.0.1:
231 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
232 | engines: {node: '>=7.0.0'}
233 | dependencies:
234 | color-name: 1.1.4
235 | dev: true
236 |
237 | /color-name/1.1.3:
238 | resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=}
239 | dev: true
240 |
241 | /color-name/1.1.4:
242 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
243 | dev: true
244 |
245 | /concat-map/0.0.1:
246 | resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
247 | dev: true
248 |
249 | /concurrently/5.3.0:
250 | resolution: {integrity: sha512-8MhqOB6PWlBfA2vJ8a0bSFKATOdWlHiQlk11IfmQBPaHVP8oP2gsh2MObE6UR3hqDHqvaIvLTyceNW6obVuFHQ==}
251 | engines: {node: '>=6.0.0'}
252 | hasBin: true
253 | dependencies:
254 | chalk: 2.4.2
255 | date-fns: 2.21.1
256 | lodash: 4.17.21
257 | read-pkg: 4.0.1
258 | rxjs: 6.6.7
259 | spawn-command: 0.0.2-1
260 | supports-color: 6.1.0
261 | tree-kill: 1.2.2
262 | yargs: 13.3.2
263 | dev: true
264 |
265 | /configstore/5.0.1:
266 | resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==}
267 | engines: {node: '>=8'}
268 | dependencies:
269 | dot-prop: 5.3.0
270 | graceful-fs: 4.2.6
271 | make-dir: 3.1.0
272 | unique-string: 2.0.0
273 | write-file-atomic: 3.0.3
274 | xdg-basedir: 4.0.0
275 | dev: true
276 |
277 | /content-disposition/0.5.3:
278 | resolution: {integrity: sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==}
279 | engines: {node: '>= 0.6'}
280 | dependencies:
281 | safe-buffer: 5.1.2
282 | dev: false
283 |
284 | /content-type/1.0.4:
285 | resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==}
286 | engines: {node: '>= 0.6'}
287 | dev: false
288 |
289 | /cookie-signature/1.0.6:
290 | resolution: {integrity: sha1-4wOogrNCzD7oylE6eZmXNNqzriw=}
291 | dev: false
292 |
293 | /cookie/0.4.0:
294 | resolution: {integrity: sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==}
295 | engines: {node: '>= 0.6'}
296 | dev: false
297 |
298 | /cors/2.8.5:
299 | resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
300 | engines: {node: '>= 0.10'}
301 | dependencies:
302 | object-assign: 4.1.1
303 | vary: 1.1.2
304 | dev: false
305 |
306 | /crypto-random-string/2.0.0:
307 | resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==}
308 | engines: {node: '>=8'}
309 | dev: true
310 |
311 | /date-fns/2.21.1:
312 | resolution: {integrity: sha512-m1WR0xGiC6j6jNFAyW4Nvh4WxAi4JF4w9jRJwSI8nBmNcyZXPcP9VUQG+6gHQXAmqaGEKDKhOqAtENDC941UkA==}
313 | engines: {node: '>=0.11'}
314 | dev: true
315 |
316 | /debug/2.6.9:
317 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
318 | dependencies:
319 | ms: 2.0.0
320 |
321 | /debug/3.2.7:
322 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
323 | dependencies:
324 | ms: 2.1.3
325 | dev: true
326 |
327 | /decamelize/1.2.0:
328 | resolution: {integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=}
329 | engines: {node: '>=0.10.0'}
330 | dev: true
331 |
332 | /decompress-response/3.3.0:
333 | resolution: {integrity: sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=}
334 | engines: {node: '>=4'}
335 | dependencies:
336 | mimic-response: 1.0.1
337 | dev: true
338 |
339 | /deep-extend/0.6.0:
340 | resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
341 | engines: {node: '>=4.0.0'}
342 | dev: true
343 |
344 | /defer-to-connect/1.1.3:
345 | resolution: {integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==}
346 | dev: true
347 |
348 | /depd/1.1.2:
349 | resolution: {integrity: sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=}
350 | engines: {node: '>= 0.6'}
351 | dev: false
352 |
353 | /destroy/1.0.4:
354 | resolution: {integrity: sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=}
355 | dev: false
356 |
357 | /dot-prop/5.3.0:
358 | resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==}
359 | engines: {node: '>=8'}
360 | dependencies:
361 | is-obj: 2.0.0
362 | dev: true
363 |
364 | /duplexer3/0.1.4:
365 | resolution: {integrity: sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=}
366 | dev: true
367 |
368 | /ee-first/1.1.1:
369 | resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=}
370 | dev: false
371 |
372 | /emoji-regex/7.0.3:
373 | resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==}
374 | dev: true
375 |
376 | /emoji-regex/8.0.0:
377 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
378 | dev: true
379 |
380 | /encodeurl/1.0.2:
381 | resolution: {integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=}
382 | engines: {node: '>= 0.8'}
383 | dev: false
384 |
385 | /end-of-stream/1.4.4:
386 | resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
387 | dependencies:
388 | once: 1.4.0
389 | dev: true
390 |
391 | /error-ex/1.3.2:
392 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
393 | dependencies:
394 | is-arrayish: 0.2.1
395 | dev: true
396 |
397 | /escape-goat/2.1.1:
398 | resolution: {integrity: sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==}
399 | engines: {node: '>=8'}
400 | dev: true
401 |
402 | /escape-html/1.0.3:
403 | resolution: {integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=}
404 | dev: false
405 |
406 | /escape-string-regexp/1.0.5:
407 | resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=}
408 | engines: {node: '>=0.8.0'}
409 | dev: true
410 |
411 | /etag/1.8.1:
412 | resolution: {integrity: sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=}
413 | engines: {node: '>= 0.6'}
414 | dev: false
415 |
416 | /express/4.17.1:
417 | resolution: {integrity: sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==}
418 | engines: {node: '>= 0.10.0'}
419 | dependencies:
420 | accepts: 1.3.7
421 | array-flatten: 1.1.1
422 | body-parser: 1.19.0
423 | content-disposition: 0.5.3
424 | content-type: 1.0.4
425 | cookie: 0.4.0
426 | cookie-signature: 1.0.6
427 | debug: 2.6.9
428 | depd: 1.1.2
429 | encodeurl: 1.0.2
430 | escape-html: 1.0.3
431 | etag: 1.8.1
432 | finalhandler: 1.1.2
433 | fresh: 0.5.2
434 | merge-descriptors: 1.0.1
435 | methods: 1.1.2
436 | on-finished: 2.3.0
437 | parseurl: 1.3.3
438 | path-to-regexp: 0.1.7
439 | proxy-addr: 2.0.6
440 | qs: 6.7.0
441 | range-parser: 1.2.1
442 | safe-buffer: 5.1.2
443 | send: 0.17.1
444 | serve-static: 1.14.1
445 | setprototypeof: 1.1.1
446 | statuses: 1.5.0
447 | type-is: 1.6.18
448 | utils-merge: 1.0.1
449 | vary: 1.1.2
450 | dev: false
451 |
452 | /fill-range/7.0.1:
453 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
454 | engines: {node: '>=8'}
455 | dependencies:
456 | to-regex-range: 5.0.1
457 | dev: true
458 |
459 | /finalhandler/1.1.2:
460 | resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==}
461 | engines: {node: '>= 0.8'}
462 | dependencies:
463 | debug: 2.6.9
464 | encodeurl: 1.0.2
465 | escape-html: 1.0.3
466 | on-finished: 2.3.0
467 | parseurl: 1.3.3
468 | statuses: 1.5.0
469 | unpipe: 1.0.0
470 | dev: false
471 |
472 | /find-up/3.0.0:
473 | resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==}
474 | engines: {node: '>=6'}
475 | dependencies:
476 | locate-path: 3.0.0
477 | dev: true
478 |
479 | /forwarded/0.1.2:
480 | resolution: {integrity: sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=}
481 | engines: {node: '>= 0.6'}
482 | dev: false
483 |
484 | /fresh/0.5.2:
485 | resolution: {integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=}
486 | engines: {node: '>= 0.6'}
487 | dev: false
488 |
489 | /fsevents/2.3.2:
490 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
491 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
492 | os: [darwin]
493 | dev: true
494 | optional: true
495 |
496 | /function-bind/1.1.1:
497 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
498 | dev: true
499 |
500 | /get-caller-file/2.0.5:
501 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
502 | engines: {node: 6.* || 8.* || >= 10.*}
503 | dev: true
504 |
505 | /get-stream/4.1.0:
506 | resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==}
507 | engines: {node: '>=6'}
508 | dependencies:
509 | pump: 3.0.0
510 | dev: true
511 |
512 | /get-stream/5.2.0:
513 | resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==}
514 | engines: {node: '>=8'}
515 | dependencies:
516 | pump: 3.0.0
517 | dev: true
518 |
519 | /glob-parent/5.1.2:
520 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
521 | engines: {node: '>= 6'}
522 | dependencies:
523 | is-glob: 4.0.1
524 | dev: true
525 |
526 | /global-dirs/2.1.0:
527 | resolution: {integrity: sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==}
528 | engines: {node: '>=8'}
529 | dependencies:
530 | ini: 1.3.7
531 | dev: true
532 |
533 | /got/9.6.0:
534 | resolution: {integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==}
535 | engines: {node: '>=8.6'}
536 | dependencies:
537 | '@sindresorhus/is': 0.14.0
538 | '@szmarczak/http-timer': 1.1.2
539 | cacheable-request: 6.1.0
540 | decompress-response: 3.3.0
541 | duplexer3: 0.1.4
542 | get-stream: 4.1.0
543 | lowercase-keys: 1.0.1
544 | mimic-response: 1.0.1
545 | p-cancelable: 1.1.0
546 | to-readable-stream: 1.0.0
547 | url-parse-lax: 3.0.0
548 | dev: true
549 |
550 | /graceful-fs/4.2.6:
551 | resolution: {integrity: sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==}
552 | dev: true
553 |
554 | /has-flag/3.0.0:
555 | resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=}
556 | engines: {node: '>=4'}
557 | dev: true
558 |
559 | /has-flag/4.0.0:
560 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
561 | engines: {node: '>=8'}
562 | dev: true
563 |
564 | /has-yarn/2.1.0:
565 | resolution: {integrity: sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==}
566 | engines: {node: '>=8'}
567 | dev: true
568 |
569 | /has/1.0.3:
570 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
571 | engines: {node: '>= 0.4.0'}
572 | dependencies:
573 | function-bind: 1.1.1
574 | dev: true
575 |
576 | /hosted-git-info/2.8.9:
577 | resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
578 | dev: true
579 |
580 | /http-cache-semantics/4.1.0:
581 | resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==}
582 | dev: true
583 |
584 | /http-errors/1.7.2:
585 | resolution: {integrity: sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==}
586 | engines: {node: '>= 0.6'}
587 | dependencies:
588 | depd: 1.1.2
589 | inherits: 2.0.3
590 | setprototypeof: 1.1.1
591 | statuses: 1.5.0
592 | toidentifier: 1.0.0
593 | dev: false
594 |
595 | /http-errors/1.7.3:
596 | resolution: {integrity: sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==}
597 | engines: {node: '>= 0.6'}
598 | dependencies:
599 | depd: 1.1.2
600 | inherits: 2.0.4
601 | setprototypeof: 1.1.1
602 | statuses: 1.5.0
603 | toidentifier: 1.0.0
604 | dev: false
605 |
606 | /iconv-lite/0.4.24:
607 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
608 | engines: {node: '>=0.10.0'}
609 | dependencies:
610 | safer-buffer: 2.1.2
611 | dev: false
612 |
613 | /ignore-by-default/1.0.1:
614 | resolution: {integrity: sha1-SMptcvbGo68Aqa1K5odr44ieKwk=}
615 | dev: true
616 |
617 | /import-lazy/2.1.0:
618 | resolution: {integrity: sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=}
619 | engines: {node: '>=4'}
620 | dev: true
621 |
622 | /imurmurhash/0.1.4:
623 | resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=}
624 | engines: {node: '>=0.8.19'}
625 | dev: true
626 |
627 | /inherits/2.0.3:
628 | resolution: {integrity: sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=}
629 | dev: false
630 |
631 | /inherits/2.0.4:
632 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
633 | dev: false
634 |
635 | /ini/1.3.7:
636 | resolution: {integrity: sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==}
637 | dev: true
638 |
639 | /ini/1.3.8:
640 | resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
641 | dev: true
642 |
643 | /ipaddr.js/1.9.1:
644 | resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
645 | engines: {node: '>= 0.10'}
646 | dev: false
647 |
648 | /is-arrayish/0.2.1:
649 | resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=}
650 | dev: true
651 |
652 | /is-binary-path/2.1.0:
653 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
654 | engines: {node: '>=8'}
655 | dependencies:
656 | binary-extensions: 2.2.0
657 | dev: true
658 |
659 | /is-ci/2.0.0:
660 | resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==}
661 | hasBin: true
662 | dependencies:
663 | ci-info: 2.0.0
664 | dev: true
665 |
666 | /is-core-module/2.2.0:
667 | resolution: {integrity: sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==}
668 | dependencies:
669 | has: 1.0.3
670 | dev: true
671 |
672 | /is-extglob/2.1.1:
673 | resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=}
674 | engines: {node: '>=0.10.0'}
675 | dev: true
676 |
677 | /is-fullwidth-code-point/2.0.0:
678 | resolution: {integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=}
679 | engines: {node: '>=4'}
680 | dev: true
681 |
682 | /is-fullwidth-code-point/3.0.0:
683 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
684 | engines: {node: '>=8'}
685 | dev: true
686 |
687 | /is-glob/4.0.1:
688 | resolution: {integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==}
689 | engines: {node: '>=0.10.0'}
690 | dependencies:
691 | is-extglob: 2.1.1
692 | dev: true
693 |
694 | /is-installed-globally/0.3.2:
695 | resolution: {integrity: sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==}
696 | engines: {node: '>=8'}
697 | dependencies:
698 | global-dirs: 2.1.0
699 | is-path-inside: 3.0.3
700 | dev: true
701 |
702 | /is-npm/4.0.0:
703 | resolution: {integrity: sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==}
704 | engines: {node: '>=8'}
705 | dev: true
706 |
707 | /is-number/7.0.0:
708 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
709 | engines: {node: '>=0.12.0'}
710 | dev: true
711 |
712 | /is-obj/2.0.0:
713 | resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
714 | engines: {node: '>=8'}
715 | dev: true
716 |
717 | /is-path-inside/3.0.3:
718 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
719 | engines: {node: '>=8'}
720 | dev: true
721 |
722 | /is-typedarray/1.0.0:
723 | resolution: {integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=}
724 | dev: true
725 |
726 | /is-yarn-global/0.3.0:
727 | resolution: {integrity: sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==}
728 | dev: true
729 |
730 | /json-buffer/3.0.0:
731 | resolution: {integrity: sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=}
732 | dev: true
733 |
734 | /json-parse-better-errors/1.0.2:
735 | resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==}
736 | dev: true
737 |
738 | /keyv/3.1.0:
739 | resolution: {integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==}
740 | dependencies:
741 | json-buffer: 3.0.0
742 | dev: true
743 |
744 | /latest-version/5.1.0:
745 | resolution: {integrity: sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==}
746 | engines: {node: '>=8'}
747 | dependencies:
748 | package-json: 6.5.0
749 | dev: true
750 |
751 | /locate-path/3.0.0:
752 | resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==}
753 | engines: {node: '>=6'}
754 | dependencies:
755 | p-locate: 3.0.0
756 | path-exists: 3.0.0
757 | dev: true
758 |
759 | /lodash/4.17.21:
760 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
761 | dev: true
762 |
763 | /lowercase-keys/1.0.1:
764 | resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==}
765 | engines: {node: '>=0.10.0'}
766 | dev: true
767 |
768 | /lowercase-keys/2.0.0:
769 | resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==}
770 | engines: {node: '>=8'}
771 | dev: true
772 |
773 | /make-dir/3.1.0:
774 | resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
775 | engines: {node: '>=8'}
776 | dependencies:
777 | semver: 6.3.0
778 | dev: true
779 |
780 | /media-typer/0.3.0:
781 | resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=}
782 | engines: {node: '>= 0.6'}
783 | dev: false
784 |
785 | /merge-descriptors/1.0.1:
786 | resolution: {integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=}
787 | dev: false
788 |
789 | /methods/1.1.2:
790 | resolution: {integrity: sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=}
791 | engines: {node: '>= 0.6'}
792 | dev: false
793 |
794 | /mime-db/1.47.0:
795 | resolution: {integrity: sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==}
796 | engines: {node: '>= 0.6'}
797 | dev: false
798 |
799 | /mime-types/2.1.30:
800 | resolution: {integrity: sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==}
801 | engines: {node: '>= 0.6'}
802 | dependencies:
803 | mime-db: 1.47.0
804 | dev: false
805 |
806 | /mime/1.6.0:
807 | resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
808 | engines: {node: '>=4'}
809 | hasBin: true
810 | dev: false
811 |
812 | /mimic-response/1.0.1:
813 | resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==}
814 | engines: {node: '>=4'}
815 | dev: true
816 |
817 | /minimatch/3.0.4:
818 | resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==}
819 | dependencies:
820 | brace-expansion: 1.1.11
821 | dev: true
822 |
823 | /minimist/1.2.5:
824 | resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==}
825 | dev: true
826 |
827 | /ms/2.0.0:
828 | resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=}
829 |
830 | /ms/2.1.1:
831 | resolution: {integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==}
832 | dev: false
833 |
834 | /ms/2.1.3:
835 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
836 | dev: true
837 |
838 | /negotiator/0.6.2:
839 | resolution: {integrity: sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==}
840 | engines: {node: '>= 0.6'}
841 | dev: false
842 |
843 | /nodemon/2.0.7:
844 | resolution: {integrity: sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA==}
845 | engines: {node: '>=8.10.0'}
846 | hasBin: true
847 | requiresBuild: true
848 | dependencies:
849 | chokidar: 3.5.1
850 | debug: 3.2.7
851 | ignore-by-default: 1.0.1
852 | minimatch: 3.0.4
853 | pstree.remy: 1.1.8
854 | semver: 5.7.1
855 | supports-color: 5.5.0
856 | touch: 3.1.0
857 | undefsafe: 2.0.3
858 | update-notifier: 4.1.3
859 | dev: true
860 |
861 | /nopt/1.0.10:
862 | resolution: {integrity: sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=}
863 | hasBin: true
864 | dependencies:
865 | abbrev: 1.1.1
866 | dev: true
867 |
868 | /normalize-package-data/2.5.0:
869 | resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
870 | dependencies:
871 | hosted-git-info: 2.8.9
872 | resolve: 1.20.0
873 | semver: 5.7.1
874 | validate-npm-package-license: 3.0.4
875 | dev: true
876 |
877 | /normalize-path/3.0.0:
878 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
879 | engines: {node: '>=0.10.0'}
880 | dev: true
881 |
882 | /normalize-url/4.5.0:
883 | resolution: {integrity: sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==}
884 | engines: {node: '>=8'}
885 | dev: true
886 |
887 | /object-assign/4.1.1:
888 | resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=}
889 | engines: {node: '>=0.10.0'}
890 | dev: false
891 |
892 | /on-finished/2.3.0:
893 | resolution: {integrity: sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=}
894 | engines: {node: '>= 0.8'}
895 | dependencies:
896 | ee-first: 1.1.1
897 | dev: false
898 |
899 | /once/1.4.0:
900 | resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=}
901 | dependencies:
902 | wrappy: 1.0.2
903 | dev: true
904 |
905 | /p-cancelable/1.1.0:
906 | resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==}
907 | engines: {node: '>=6'}
908 | dev: true
909 |
910 | /p-limit/2.3.0:
911 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
912 | engines: {node: '>=6'}
913 | dependencies:
914 | p-try: 2.2.0
915 | dev: true
916 |
917 | /p-locate/3.0.0:
918 | resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==}
919 | engines: {node: '>=6'}
920 | dependencies:
921 | p-limit: 2.3.0
922 | dev: true
923 |
924 | /p-try/2.2.0:
925 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
926 | engines: {node: '>=6'}
927 | dev: true
928 |
929 | /package-json/6.5.0:
930 | resolution: {integrity: sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==}
931 | engines: {node: '>=8'}
932 | dependencies:
933 | got: 9.6.0
934 | registry-auth-token: 4.2.1
935 | registry-url: 5.1.0
936 | semver: 6.3.0
937 | dev: true
938 |
939 | /parse-json/4.0.0:
940 | resolution: {integrity: sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=}
941 | engines: {node: '>=4'}
942 | dependencies:
943 | error-ex: 1.3.2
944 | json-parse-better-errors: 1.0.2
945 | dev: true
946 |
947 | /parseurl/1.3.3:
948 | resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
949 | engines: {node: '>= 0.8'}
950 | dev: false
951 |
952 | /path-exists/3.0.0:
953 | resolution: {integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=}
954 | engines: {node: '>=4'}
955 | dev: true
956 |
957 | /path-parse/1.0.6:
958 | resolution: {integrity: sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==}
959 | dev: true
960 |
961 | /path-to-regexp/0.1.7:
962 | resolution: {integrity: sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=}
963 | dev: false
964 |
965 | /picomatch/2.2.3:
966 | resolution: {integrity: sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==}
967 | engines: {node: '>=8.6'}
968 | dev: true
969 |
970 | /pify/3.0.0:
971 | resolution: {integrity: sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=}
972 | engines: {node: '>=4'}
973 | dev: true
974 |
975 | /prepend-http/2.0.0:
976 | resolution: {integrity: sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=}
977 | engines: {node: '>=4'}
978 | dev: true
979 |
980 | /proxy-addr/2.0.6:
981 | resolution: {integrity: sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==}
982 | engines: {node: '>= 0.10'}
983 | dependencies:
984 | forwarded: 0.1.2
985 | ipaddr.js: 1.9.1
986 | dev: false
987 |
988 | /pstree.remy/1.1.8:
989 | resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==}
990 | dev: true
991 |
992 | /pump/3.0.0:
993 | resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
994 | dependencies:
995 | end-of-stream: 1.4.4
996 | once: 1.4.0
997 | dev: true
998 |
999 | /pupa/2.1.1:
1000 | resolution: {integrity: sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==}
1001 | engines: {node: '>=8'}
1002 | dependencies:
1003 | escape-goat: 2.1.1
1004 | dev: true
1005 |
1006 | /qs/6.7.0:
1007 | resolution: {integrity: sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==}
1008 | engines: {node: '>=0.6'}
1009 | dev: false
1010 |
1011 | /range-parser/1.2.1:
1012 | resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
1013 | engines: {node: '>= 0.6'}
1014 | dev: false
1015 |
1016 | /raw-body/2.4.0:
1017 | resolution: {integrity: sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==}
1018 | engines: {node: '>= 0.8'}
1019 | dependencies:
1020 | bytes: 3.1.0
1021 | http-errors: 1.7.2
1022 | iconv-lite: 0.4.24
1023 | unpipe: 1.0.0
1024 | dev: false
1025 |
1026 | /rc/1.2.8:
1027 | resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
1028 | hasBin: true
1029 | dependencies:
1030 | deep-extend: 0.6.0
1031 | ini: 1.3.8
1032 | minimist: 1.2.5
1033 | strip-json-comments: 2.0.1
1034 | dev: true
1035 |
1036 | /read-pkg/4.0.1:
1037 | resolution: {integrity: sha1-ljYlN48+HE1IyFhytabsfV0JMjc=}
1038 | engines: {node: '>=6'}
1039 | dependencies:
1040 | normalize-package-data: 2.5.0
1041 | parse-json: 4.0.0
1042 | pify: 3.0.0
1043 | dev: true
1044 |
1045 | /readdirp/3.5.0:
1046 | resolution: {integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==}
1047 | engines: {node: '>=8.10.0'}
1048 | dependencies:
1049 | picomatch: 2.2.3
1050 | dev: true
1051 |
1052 | /registry-auth-token/4.2.1:
1053 | resolution: {integrity: sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==}
1054 | engines: {node: '>=6.0.0'}
1055 | dependencies:
1056 | rc: 1.2.8
1057 | dev: true
1058 |
1059 | /registry-url/5.1.0:
1060 | resolution: {integrity: sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==}
1061 | engines: {node: '>=8'}
1062 | dependencies:
1063 | rc: 1.2.8
1064 | dev: true
1065 |
1066 | /require-directory/2.1.1:
1067 | resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=}
1068 | engines: {node: '>=0.10.0'}
1069 | dev: true
1070 |
1071 | /require-main-filename/2.0.0:
1072 | resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
1073 | dev: true
1074 |
1075 | /resolve/1.20.0:
1076 | resolution: {integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==}
1077 | dependencies:
1078 | is-core-module: 2.2.0
1079 | path-parse: 1.0.6
1080 | dev: true
1081 |
1082 | /responselike/1.0.2:
1083 | resolution: {integrity: sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=}
1084 | dependencies:
1085 | lowercase-keys: 1.0.1
1086 | dev: true
1087 |
1088 | /rxjs/6.6.7:
1089 | resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==}
1090 | engines: {npm: '>=2.0.0'}
1091 | dependencies:
1092 | tslib: 1.14.1
1093 | dev: true
1094 |
1095 | /safe-buffer/5.1.2:
1096 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
1097 | dev: false
1098 |
1099 | /safer-buffer/2.1.2:
1100 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
1101 | dev: false
1102 |
1103 | /semver-diff/3.1.1:
1104 | resolution: {integrity: sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==}
1105 | engines: {node: '>=8'}
1106 | dependencies:
1107 | semver: 6.3.0
1108 | dev: true
1109 |
1110 | /semver/5.7.1:
1111 | resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==}
1112 | hasBin: true
1113 | dev: true
1114 |
1115 | /semver/6.3.0:
1116 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
1117 | hasBin: true
1118 | dev: true
1119 |
1120 | /send/0.17.1:
1121 | resolution: {integrity: sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==}
1122 | engines: {node: '>= 0.8.0'}
1123 | dependencies:
1124 | debug: 2.6.9
1125 | depd: 1.1.2
1126 | destroy: 1.0.4
1127 | encodeurl: 1.0.2
1128 | escape-html: 1.0.3
1129 | etag: 1.8.1
1130 | fresh: 0.5.2
1131 | http-errors: 1.7.3
1132 | mime: 1.6.0
1133 | ms: 2.1.1
1134 | on-finished: 2.3.0
1135 | range-parser: 1.2.1
1136 | statuses: 1.5.0
1137 | dev: false
1138 |
1139 | /serve-static/1.14.1:
1140 | resolution: {integrity: sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==}
1141 | engines: {node: '>= 0.8.0'}
1142 | dependencies:
1143 | encodeurl: 1.0.2
1144 | escape-html: 1.0.3
1145 | parseurl: 1.3.3
1146 | send: 0.17.1
1147 | dev: false
1148 |
1149 | /set-blocking/2.0.0:
1150 | resolution: {integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc=}
1151 | dev: true
1152 |
1153 | /setprototypeof/1.1.1:
1154 | resolution: {integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==}
1155 | dev: false
1156 |
1157 | /signal-exit/3.0.3:
1158 | resolution: {integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==}
1159 | dev: true
1160 |
1161 | /spawn-command/0.0.2-1:
1162 | resolution: {integrity: sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=}
1163 | dev: true
1164 |
1165 | /spdx-correct/3.1.1:
1166 | resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==}
1167 | dependencies:
1168 | spdx-expression-parse: 3.0.1
1169 | spdx-license-ids: 3.0.7
1170 | dev: true
1171 |
1172 | /spdx-exceptions/2.3.0:
1173 | resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==}
1174 | dev: true
1175 |
1176 | /spdx-expression-parse/3.0.1:
1177 | resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
1178 | dependencies:
1179 | spdx-exceptions: 2.3.0
1180 | spdx-license-ids: 3.0.7
1181 | dev: true
1182 |
1183 | /spdx-license-ids/3.0.7:
1184 | resolution: {integrity: sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==}
1185 | dev: true
1186 |
1187 | /statuses/1.5.0:
1188 | resolution: {integrity: sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=}
1189 | engines: {node: '>= 0.6'}
1190 | dev: false
1191 |
1192 | /string-width/3.1.0:
1193 | resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==}
1194 | engines: {node: '>=6'}
1195 | dependencies:
1196 | emoji-regex: 7.0.3
1197 | is-fullwidth-code-point: 2.0.0
1198 | strip-ansi: 5.2.0
1199 | dev: true
1200 |
1201 | /string-width/4.2.2:
1202 | resolution: {integrity: sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==}
1203 | engines: {node: '>=8'}
1204 | dependencies:
1205 | emoji-regex: 8.0.0
1206 | is-fullwidth-code-point: 3.0.0
1207 | strip-ansi: 6.0.0
1208 | dev: true
1209 |
1210 | /strip-ansi/5.2.0:
1211 | resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==}
1212 | engines: {node: '>=6'}
1213 | dependencies:
1214 | ansi-regex: 4.1.0
1215 | dev: true
1216 |
1217 | /strip-ansi/6.0.0:
1218 | resolution: {integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==}
1219 | engines: {node: '>=8'}
1220 | dependencies:
1221 | ansi-regex: 5.0.0
1222 | dev: true
1223 |
1224 | /strip-json-comments/2.0.1:
1225 | resolution: {integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo=}
1226 | engines: {node: '>=0.10.0'}
1227 | dev: true
1228 |
1229 | /supports-color/5.5.0:
1230 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
1231 | engines: {node: '>=4'}
1232 | dependencies:
1233 | has-flag: 3.0.0
1234 | dev: true
1235 |
1236 | /supports-color/6.1.0:
1237 | resolution: {integrity: sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==}
1238 | engines: {node: '>=6'}
1239 | dependencies:
1240 | has-flag: 3.0.0
1241 | dev: true
1242 |
1243 | /supports-color/7.2.0:
1244 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1245 | engines: {node: '>=8'}
1246 | dependencies:
1247 | has-flag: 4.0.0
1248 | dev: true
1249 |
1250 | /term-size/2.2.1:
1251 | resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==}
1252 | engines: {node: '>=8'}
1253 | dev: true
1254 |
1255 | /to-readable-stream/1.0.0:
1256 | resolution: {integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==}
1257 | engines: {node: '>=6'}
1258 | dev: true
1259 |
1260 | /to-regex-range/5.0.1:
1261 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1262 | engines: {node: '>=8.0'}
1263 | dependencies:
1264 | is-number: 7.0.0
1265 | dev: true
1266 |
1267 | /toidentifier/1.0.0:
1268 | resolution: {integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==}
1269 | engines: {node: '>=0.6'}
1270 | dev: false
1271 |
1272 | /touch/3.1.0:
1273 | resolution: {integrity: sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==}
1274 | hasBin: true
1275 | dependencies:
1276 | nopt: 1.0.10
1277 | dev: true
1278 |
1279 | /tree-kill/1.2.2:
1280 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
1281 | hasBin: true
1282 | dev: true
1283 |
1284 | /tslib/1.14.1:
1285 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
1286 | dev: true
1287 |
1288 | /type-fest/0.8.1:
1289 | resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==}
1290 | engines: {node: '>=8'}
1291 | dev: true
1292 |
1293 | /type-is/1.6.18:
1294 | resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
1295 | engines: {node: '>= 0.6'}
1296 | dependencies:
1297 | media-typer: 0.3.0
1298 | mime-types: 2.1.30
1299 | dev: false
1300 |
1301 | /typedarray-to-buffer/3.1.5:
1302 | resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==}
1303 | dependencies:
1304 | is-typedarray: 1.0.0
1305 | dev: true
1306 |
1307 | /undefsafe/2.0.3:
1308 | resolution: {integrity: sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==}
1309 | dependencies:
1310 | debug: 2.6.9
1311 | dev: true
1312 |
1313 | /unique-string/2.0.0:
1314 | resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==}
1315 | engines: {node: '>=8'}
1316 | dependencies:
1317 | crypto-random-string: 2.0.0
1318 | dev: true
1319 |
1320 | /unpipe/1.0.0:
1321 | resolution: {integrity: sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=}
1322 | engines: {node: '>= 0.8'}
1323 | dev: false
1324 |
1325 | /update-notifier/4.1.3:
1326 | resolution: {integrity: sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==}
1327 | engines: {node: '>=8'}
1328 | dependencies:
1329 | boxen: 4.2.0
1330 | chalk: 3.0.0
1331 | configstore: 5.0.1
1332 | has-yarn: 2.1.0
1333 | import-lazy: 2.1.0
1334 | is-ci: 2.0.0
1335 | is-installed-globally: 0.3.2
1336 | is-npm: 4.0.0
1337 | is-yarn-global: 0.3.0
1338 | latest-version: 5.1.0
1339 | pupa: 2.1.1
1340 | semver-diff: 3.1.1
1341 | xdg-basedir: 4.0.0
1342 | dev: true
1343 |
1344 | /url-parse-lax/3.0.0:
1345 | resolution: {integrity: sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=}
1346 | engines: {node: '>=4'}
1347 | dependencies:
1348 | prepend-http: 2.0.0
1349 | dev: true
1350 |
1351 | /utils-merge/1.0.1:
1352 | resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=}
1353 | engines: {node: '>= 0.4.0'}
1354 | dev: false
1355 |
1356 | /validate-npm-package-license/3.0.4:
1357 | resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
1358 | dependencies:
1359 | spdx-correct: 3.1.1
1360 | spdx-expression-parse: 3.0.1
1361 | dev: true
1362 |
1363 | /vary/1.1.2:
1364 | resolution: {integrity: sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=}
1365 | engines: {node: '>= 0.8'}
1366 | dev: false
1367 |
1368 | /which-module/2.0.0:
1369 | resolution: {integrity: sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=}
1370 | dev: true
1371 |
1372 | /widest-line/3.1.0:
1373 | resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==}
1374 | engines: {node: '>=8'}
1375 | dependencies:
1376 | string-width: 4.2.2
1377 | dev: true
1378 |
1379 | /wrap-ansi/5.1.0:
1380 | resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==}
1381 | engines: {node: '>=6'}
1382 | dependencies:
1383 | ansi-styles: 3.2.1
1384 | string-width: 3.1.0
1385 | strip-ansi: 5.2.0
1386 | dev: true
1387 |
1388 | /wrappy/1.0.2:
1389 | resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=}
1390 | dev: true
1391 |
1392 | /write-file-atomic/3.0.3:
1393 | resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==}
1394 | dependencies:
1395 | imurmurhash: 0.1.4
1396 | is-typedarray: 1.0.0
1397 | signal-exit: 3.0.3
1398 | typedarray-to-buffer: 3.1.5
1399 | dev: true
1400 |
1401 | /xdg-basedir/4.0.0:
1402 | resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==}
1403 | engines: {node: '>=8'}
1404 | dev: true
1405 |
1406 | /y18n/4.0.3:
1407 | resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
1408 | dev: true
1409 |
1410 | /yargs-parser/13.1.2:
1411 | resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==}
1412 | dependencies:
1413 | camelcase: 5.3.1
1414 | decamelize: 1.2.0
1415 | dev: true
1416 |
1417 | /yargs/13.3.2:
1418 | resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==}
1419 | dependencies:
1420 | cliui: 5.0.0
1421 | find-up: 3.0.0
1422 | get-caller-file: 2.0.5
1423 | require-directory: 2.1.1
1424 | require-main-filename: 2.0.0
1425 | set-blocking: 2.0.0
1426 | string-width: 3.1.0
1427 | which-module: 2.0.0
1428 | y18n: 4.0.3
1429 | yargs-parser: 13.1.2
1430 | dev: true
1431 |
--------------------------------------------------------------------------------
/r-react-demo-screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davidruvolo51/r-react-demo/f820d21475c387ec5b365729e35854fc40791908/r-react-demo-screenshot.png
--------------------------------------------------------------------------------
/r-react-demo.code-workspace:
--------------------------------------------------------------------------------
1 | {
2 | "folders":[
3 | {
4 | "path": "."
5 | }
6 | ],
7 | "settings": {}
8 | }
9 |
--------------------------------------------------------------------------------
/server.js:
--------------------------------------------------------------------------------
1 | ////////////////////////////////////////////////////////////////////////////////
2 | // FILE: server.js
3 | // AUTHOR: David Ruvolo
4 | // CREATED: 2019-11-01
5 | // MODIFIED: 2020-11-18
6 | // PURPOSE: server for node.js and express.js application
7 | // DEPENDENCIES: express, bodyParser, node
8 | // STATUS: working
9 | // COMMENTS: NA
10 | ////////////////////////////////////////////////////////////////////////////////
11 |
12 | // requires
13 | const express = require('express');
14 | const bodyParser = require('body-parser');
15 | const { R } = require("@fridgerator/r-script");
16 | const cors = require("cors");
17 |
18 | // define app and set port
19 | const app = express();
20 | const port = process.env.PORT || 5000;
21 | app.use(bodyParser.json());
22 | app.use(bodyParser.urlencoded({ extended: true }));
23 | app.use(cors());
24 |
25 | ////////////////////////////////////////
26 |
27 | // Process User Input
28 | app.post('/data', (req, res) => {
29 |
30 | // get input
31 | let power = parseInt(req.body.power);
32 | let input = parseInt(req.body.value);
33 |
34 | // process data using js Math.pow()
35 | let squaredJS = Math.pow(input, power);
36 |
37 | // run through R script
38 | let r = new R("./R/index.R");
39 | r.data(input, power);
40 | let squaredR = r.callSync();
41 |
42 | // send results
43 | res.send({
44 | squaredJS: squaredJS,
45 | squaredR: squaredR,
46 | })
47 | })
48 |
49 | // set port
50 | app.listen(port, () => console.log(`Listening on port ${port}`));
--------------------------------------------------------------------------------