├── .gitignore ├── README.md ├── api └── stripe-functions.js ├── app.js ├── package.json ├── styles ├── adminView.css ├── app.css └── customerView.css ├── utils └── format-numbers.js ├── views ├── adminView.html ├── base.html ├── createPlan.html ├── createProduct.html ├── customerView.html └── signUp.html └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | /node_modules 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # stripe-recurring-subscriptions 2 | 3 | ## Important Note 📌 4 | 5 | An updated version of this codebase is available here: [stripe-subscriptions-sca](https://github.com/code-nebula/stripe-subscriptions-sca) 6 | 7 | The updated version shows you how to set up recurring subscriptions that support SCA (Strong Customer Authentication). 8 | 9 | We recommend checking out the following tutorials, which complement the new codebase: 10 | 11 | 🌟[How to Set up a Basic Node Application with Stripe](https://codenebula.io/node.js/stripe/2020/03/03/how-to-set-up-a-basic-node-application-with-stripe/) 12 | 13 | 🌟[How to use Stripe’s new Payment Intents API with Node.js to create subscriptions with built-in SCA](https://codenebula.io/node.js/stripe/sca/2020/03/03/how-to-use-stripes-new-payment-intents-api-with-node-js-to-create-subscriptions-with-built-in-sca/) 14 | 15 | 16 | ## Overview 17 | 18 | This repository shows you how to create recurring subscriptions with Stripe and Node.js. 19 | 20 | It uses Express for creating a simple server, Nunjucks for templating, and the Stripe API. 21 | 22 | It features 23 | 24 | 1. An **Admin View** when you can create Stripe Products and Plans via the Stripe API. 25 | 2. A **Client View** where your users can view and pay for your subscription plans. 26 | 27 | 28 | ## Demo Video 29 | 30 | ![](https://s3.amazonaws.com/stripemadeeasy/recurring-subscriptions-long-small.gif) 31 | 32 | 33 | ## Tutorial 34 | 35 | We’ve written a detailed, 3-part tutorial about this code on the :star2: CodeNebula blog: 36 | [Creating Monthly Recurring Subscriptions in Stripe using Node.js](https://codenebula.io/stripe/node.js/2019/04/11/creating-monthly-recurring-subscriptions-in-stripe-using-node-js-part-1/) 37 | 38 | 39 | ## Instructions 40 | 41 | 1. Clone this repository 42 | 2. Run `npm install` to install all dependencies 43 | 3. Create a `.env` file to house your Stripe Secret Key (this repo includes `.env` in its `.gitignore`) 44 | 4. In the `.env` file, set your secret key as STRIPE_API_KEY (`STRIPE_API_KEY="sk_test_************************"`) 45 | 5. In the Javascript section of the `views/signUp.html` file, replace `var stripe = Stripe("pk_test_************************")` with your Stripe Publishable Key 46 | 6. Run the app via `npm start` 47 | 7. Navigate to [localhost:3000](localhost:3000) 48 | -------------------------------------------------------------------------------- /api/stripe-functions.js: -------------------------------------------------------------------------------- 1 | /* Server Side -- Stripe API calls */ 2 | require('dotenv').config(); 3 | const stripe = require('stripe')(process.env.STRIPE_API_KEY); 4 | const UTILS = require('../utils/format-numbers.js'); 5 | 6 | function getAllProductsAndPlans() { 7 | return Promise.all( 8 | [ 9 | stripe.products.list({}), 10 | stripe.plans.list({}) 11 | ] 12 | ).then(stripeData => { 13 | var products = stripeData[0].data; 14 | var plans = stripeData[1].data; 15 | 16 | plans = plans.sort((a, b) => { 17 | /* Sort plans in ascending order of price (amount) 18 | * Ref: https://www.w3schools.com/js/js_array_sort.asp */ 19 | return a.amount - b.amount; 20 | }).map(plan => { 21 | /* Format plan price (amount) */ 22 | amount = UTILS.formatUSD(plan.amount) 23 | return {...plan, amount}; 24 | }); 25 | 26 | products.forEach(product => { 27 | const filteredPlans = plans.filter(plan => { 28 | return plan.product === product.id; 29 | }); 30 | 31 | product.plans = filteredPlans; 32 | }); 33 | 34 | return products; 35 | }); 36 | } 37 | 38 | 39 | function createProduct(requestBody) { 40 | return stripe.products.create({ 41 | name: requestBody.productName, 42 | type: 'service' 43 | }); 44 | } 45 | 46 | 47 | function createPlan(requestBody) { 48 | return stripe.plans.create({ 49 | nickname: requestBody.planName, 50 | amount: UTILS.formatStripeAmount(requestBody.planAmount), 51 | interval: requestBody.planInterval, 52 | interval_count: parseInt(requestBody.planIntervalNumber), 53 | product: requestBody.productId, 54 | currency: 'USD' 55 | }); 56 | } 57 | 58 | 59 | function createCustomerAndSubscription(requestBody) { 60 | return stripe.customers.create({ 61 | source: requestBody.stripeToken, 62 | email: requestBody.customerEmail 63 | }).then(customer => { 64 | stripe.subscriptions.create({ 65 | customer: customer.id, 66 | items: [ 67 | { 68 | plan: requestBody.planId 69 | } 70 | ] 71 | }); 72 | }); 73 | } 74 | 75 | 76 | module.exports = { 77 | getAllProductsAndPlans, 78 | createProduct, 79 | createPlan, 80 | createCustomerAndSubscription 81 | }; 82 | -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const bodyParser = require('body-parser'); 3 | const nunjucks = require('nunjucks'); 4 | 5 | const app = express(); 6 | const port = 3000; 7 | const router = express.Router(); 8 | 9 | const STRIPE_API = require('./api/stripe-functions.js'); 10 | 11 | 12 | /* Set up Express to serve HTML files using "res.render" with help of Nunjucks */ 13 | app.set('view engine', 'html'); 14 | app.engine('html', nunjucks.render); 15 | nunjucks.configure('views', { noCache: true }); 16 | 17 | app.use(express.static(__dirname)); 18 | app.use('/styles', express.static('styles')); 19 | app.use(bodyParser()); 20 | app.use('/', router); 21 | 22 | 23 | /* Place all routes here */ 24 | router.get('/', (req, res) => { 25 | STRIPE_API.getAllProductsAndPlans().then(products => { 26 | res.render('adminView.html', {products: products}); 27 | }); 28 | }); 29 | 30 | 31 | /* Create Product */ 32 | router.get('/createProduct', (req, res) => { 33 | res.render('createProduct.html'); 34 | }); 35 | 36 | 37 | router.post('/createProduct', (req, res) => { 38 | STRIPE_API.createProduct(req.body).then(() => { 39 | res.render('createProduct.html', { success: true }); 40 | }); 41 | }); 42 | 43 | 44 | /* Create Plan */ 45 | router.post('/createPlan', (req, res) => { 46 | res.render('createPlan.html', { 47 | productId: req.body.productId, 48 | productName: req.body.productName 49 | }); 50 | }); 51 | 52 | 53 | router.post('/createPlanForReal', (req, res) => { 54 | STRIPE_API.createPlan(req.body).then(() => { 55 | res.render('createPlan.html', { success: true }); 56 | }); 57 | }); 58 | 59 | router.get('/customerView', (req, res) => { 60 | STRIPE_API.getAllProductsAndPlans().then(products => { 61 | products = products.filter(product => { 62 | return product.plans.length > 0; 63 | }); 64 | 65 | res.render('customerView.html', {products: products}); 66 | }); 67 | }); 68 | 69 | 70 | router.post('/signUp', (req, res) => { 71 | var product = { 72 | name: req.body.productName 73 | }; 74 | 75 | var plan = { 76 | id: req.body.planId, 77 | name: req.body.planName, 78 | amount: req.body.planAmount, 79 | interval: req.body.planInterval, 80 | interval_count: req.body.planIntervalCount 81 | } 82 | 83 | res.render('signUp.html', {product: product, plan: plan}); 84 | }); 85 | 86 | 87 | router.post('/processPayment', (req, res) => { 88 | var product = { 89 | name: req.body.productName 90 | }; 91 | 92 | var plan = { 93 | id: req.body.planId, 94 | name: req.body.planName, 95 | amount: req.body.planAmount, 96 | interval: req.body.planInterval, 97 | interval_count: req.body.planIntervalCount 98 | } 99 | 100 | STRIPE_API.createCustomerAndSubscription(req.body).then(() => { 101 | res.render('signup.html', {product: product, plan: plan, success: true}); 102 | }).catch(err => { 103 | res.render('signup.html', {product: product, plan: plan, error: true}); 104 | }); 105 | }); 106 | 107 | 108 | /* Start listening on specified port */ 109 | app.listen(port, () => { 110 | console.info('Example app listening on port', port) 111 | }); 112 | 113 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "stripe-recurring-subscriptions", 3 | "version": "1.0.0", 4 | "description": "A tutorial on setting up recurring subscriptions with Stripe.", 5 | "main": "app.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "start": "node app.js" 9 | }, 10 | "keywords": [ 11 | "stripe", 12 | "recurring", 13 | "billing", 14 | "subscriptions" 15 | ], 16 | "author": "Amy Sitwala", 17 | "license": "ISC", 18 | "dependencies": { 19 | "body-parser": "^1.18.3", 20 | "dotenv": "^6.2.0", 21 | "express": "^4.16.4", 22 | "nunjucks": "^3.1.7", 23 | "stripe": "^6.25.1" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /styles/adminView.css: -------------------------------------------------------------------------------- 1 | /* Admin View */ 2 | .admin-view, 3 | .create-product, 4 | .create-plan { 5 | width: 50%; 6 | margin: 0 auto; 7 | min-width: 280px; 8 | } 9 | 10 | .admin-view-title { 11 | display: flex; 12 | align-items: center; 13 | justify-content: space-between; 14 | } 15 | 16 | .admin-view-title h2 { 17 | margin-right: 24px; 18 | } 19 | 20 | .admin-view-product { 21 | padding: 16px; 22 | background-color: #eee; 23 | border-radius: 3px; 24 | width: 100%; 25 | margin-bottom: 24px; 26 | } 27 | 28 | .admin-view-product-title { 29 | display: flex; 30 | align-items: center; 31 | justify-content: space-between; 32 | } 33 | 34 | .admin-view-product-name { 35 | margin: 0 8px 0 0; 36 | } 37 | 38 | 39 | /* Create product */ 40 | .create-product-container, .create-plan-container { 41 | padding: 24px; 42 | background-color: #eee; 43 | border-radius: 3px; 44 | } 45 | -------------------------------------------------------------------------------- /styles/app.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: "Open Sans", "Helvetica", sans-serif; 3 | margin: 0; 4 | padding: 0; 5 | width: 100%; 6 | -webkit-font-smoothing: antialiased; 7 | } 8 | 9 | body * { 10 | box-sizing: border-box 11 | } 12 | 13 | h1, h2, h3, h4, h5, h6 { 14 | font-weight: 600; 15 | } 16 | 17 | .app-container { 18 | padding: 32px; 19 | width: 100%; 20 | } 21 | 22 | .app-header { 23 | display: flex; 24 | align-items: center; 25 | justify-content: center; 26 | } 27 | 28 | .app-header a { 29 | text-decoration: none; 30 | } 31 | 32 | .app-header p { 33 | margin: 0 6px; 34 | font-size: 12px; 35 | cursor: pointer; 36 | padding-bottom: 2px; 37 | border-bottom: 3px solid transparent; 38 | color: #a5a5a5; 39 | } 40 | 41 | .app-header p:hover { 42 | color: #576adb; 43 | } 44 | 45 | .app-header p.active { 46 | color: #576adb; 47 | border-color: #acb6f3; 48 | } 49 | 50 | .app-header span { 51 | display: inline-block; 52 | color: #aaa; 53 | font-size: 16px; 54 | padding-bottom: 2px; 55 | border-bottom: 3px solid transparent; 56 | } 57 | 58 | /* General */ 59 | .btn { 60 | background-color: #576adb; 61 | color: #ffffff; 62 | padding: 8px 12px; 63 | border: 0px; 64 | border-radius: 4px; 65 | font-size: 14px; 66 | font-family: "Open Sans", "Helvetica", sans-serif; 67 | cursor: pointer; 68 | text-transform: uppercase; 69 | } 70 | 71 | .btn-small { 72 | font-size: 12px; 73 | padding: 6px 8px; 74 | } 75 | 76 | label { 77 | display: block; 78 | text-transform: uppercase; 79 | font-size: 14px; 80 | margin-bottom: 4px; 81 | font-weight: 600; 82 | } 83 | 84 | input { 85 | border: 0px; 86 | background-color: #fff; 87 | border-radius: 4px; 88 | color: black; 89 | padding: 8px 12px; 90 | font-size: 14px; 91 | margin-bottom: 24px; 92 | font-family: "Open Sans", "Helvetica", sans-serif; 93 | width: 100%; 94 | 95 | box-shadow: 0 1px 3px 0 #e6ebf1; 96 | -webkit-transition: box-shadow 150ms ease; 97 | transition: box-shadow 150ms ease; 98 | } 99 | 100 | input:focus { 101 | outline: 0 !important; 102 | box-shadow: 0 1px 3px 0 #cfd7df; 103 | } 104 | 105 | input::placeholder { 106 | color: #aab7c4; 107 | } 108 | 109 | input.btn { 110 | width: auto; 111 | display: inline-block; 112 | margin-bottom: 0px; 113 | } 114 | 115 | .label-input-container { 116 | position: relative; 117 | } 118 | 119 | .label-left-input { 120 | padding-left: 26px; 121 | } 122 | 123 | .label-currency { 124 | position: absolute; 125 | top: 7px; 126 | left: 12px; 127 | color: #777; 128 | } 129 | 130 | .success-message { 131 | 132 | } 133 | 134 | .error-message { 135 | 136 | } 137 | -------------------------------------------------------------------------------- /styles/customerView.css: -------------------------------------------------------------------------------- 1 | /* Customer View */ 2 | .customer-view h2 { 3 | margin-left: 12px; 4 | } 5 | 6 | .customer-view-plans { 7 | display: flex; 8 | align-items: center; 9 | flex-wrap: wrap; 10 | } 11 | 12 | .customer-view-plan { 13 | background-color: #eee; 14 | padding: 24px; 15 | border-radius: 4px; 16 | flex: 1; 17 | margin: 0 12px 24px; 18 | min-width: 280px; 19 | } 20 | 21 | .customer-view-plan h3 { 22 | margin-top: 0px; 23 | } 24 | 25 | /* Sign Up Page */ 26 | .sign-up { 27 | width: 50%; 28 | margin: 0 auto; 29 | min-width: 280px; 30 | } 31 | 32 | .sign-up h2 { 33 | margin-top: 6px; 34 | } 35 | 36 | .sign-up-product { 37 | margin-top: 24px; 38 | } 39 | 40 | .sign-up-container { 41 | padding: 24px; 42 | background-color: #eee; 43 | border-radius: 3px; 44 | } 45 | 46 | .sign-up .btn { 47 | margin-top: 16px; 48 | } 49 | 50 | #card-errors { 51 | margin-top: 6px; 52 | font-size: 14px; 53 | } 54 | -------------------------------------------------------------------------------- /utils/format-numbers.js: -------------------------------------------------------------------------------- 1 | function formatUSD(stripeAmount) { 2 | return `$${(stripeAmount / 100).toFixed(2)}`; 3 | } 4 | 5 | function formatStripeAmount(USDString) { 6 | return parseFloat(USDString) * 100; 7 | } 8 | 9 | module.exports = { 10 | formatUSD, 11 | formatStripeAmount 12 | }; -------------------------------------------------------------------------------- /views/adminView.html: -------------------------------------------------------------------------------- 1 | {% set title = 'Admin View' %} 2 | {% set admin = true %} 3 | {% extends 'base.html' %} 4 | 5 | {% block content %} 6 |
7 |
8 |

Products

9 | 10 |
11 | {% for product in products %} 12 |
13 | 14 | 15 | 16 |
17 |
18 |

{{product.name}}

19 | 20 |
21 | 22 | {% for plan in product.plans %} 23 |
24 |

{{plan.nickname}} — {{ plan.amount }} / 25 | {% if (plan.interval_count > 1) %} 26 | {{ plan.interval_count }} {{ plan.interval }}s 27 | 28 | {% else %} 29 | {{ plan.interval }} 30 | {% endif %} 31 |

32 |
33 | {% endfor %} 34 |
35 |
36 | {% endfor %} 37 |
38 | {% endblock %} 39 | 40 | 43 | -------------------------------------------------------------------------------- /views/base.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Stripe Made Easy | {{ title }} 5 | 6 | 7 | 8 | 9 | {% if admin %} 10 | 11 | {% else %} 12 | 13 | {% endif %} 14 | 15 | 16 |
17 |
18 |

ADMIN VIEW

19 | | 20 |

CUSTOMER VIEW

21 |
22 | {% block content %} 23 | {% endblock %} 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /views/createPlan.html: -------------------------------------------------------------------------------- 1 | {% set title = 'Create Plan' %} 2 | {% set admin = true %} 3 | {% extends 'base.html' %} 4 | 5 | {% block content %} 6 | 7 |
8 |

{{ productName }}: Create New Plan

9 | {% if success %} 10 |
11 |

12 |
13 | {% elif error %} 14 |
15 |

16 |
17 | {% else %} 18 |
19 |
20 | 21 | 22 |
23 | 24 | 25 |
26 | 27 |
28 | 29 |
30 | 31 | $ 32 |
33 |
34 | 35 |
36 | 37 | 38 |
39 | 40 |
41 | 42 | 43 |
44 | 45 |
46 | 47 |
48 |
49 |
50 | {% endif %} 51 |
52 | 53 | 66 | 67 | {% endblock %} -------------------------------------------------------------------------------- /views/createProduct.html: -------------------------------------------------------------------------------- 1 | {% set title = 'Create Product' %} 2 | {% set admin = true %} 3 | {% extends 'base.html' %} 4 | 5 | {% block content %} 6 | 7 |
8 |

Create New Product

9 | {% if success %} 10 |
11 |

12 |
13 | {% elif error %} 14 |
15 |

16 |
17 | {% else %} 18 |
19 |
20 |
21 | 22 | 23 |
24 | 25 |
26 | 27 | 28 |
29 | 30 |
31 | 32 |
33 |
34 |
35 | {% endif %} 36 | 37 |
38 | 39 | {% endblock %} -------------------------------------------------------------------------------- /views/customerView.html: -------------------------------------------------------------------------------- 1 | {% set title = 'Customer View' %} 2 | {% set admin = false %} 3 | {% extends 'base.html' %} 4 | 5 | 6 | {% block content %} 7 | 8 |
9 | {% for product in products %} 10 |
11 |

{{product.name}}

12 |
13 | {% for plan in product.plans %} 14 |
15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |

{{plan.nickname}} — {{ plan.amount }} / 23 | {% if (plan.interval_count > 1) %} 24 | {{ plan.interval_count }} {{ plan.interval }}s 25 | 26 | {% else %} 27 | {{ plan.interval }} 28 | {% endif %} 29 |

30 | 31 |
32 |
33 | {% endfor %} 34 |
35 |
36 | {% endfor %} 37 |
38 | 39 | {% endblock %} 40 | -------------------------------------------------------------------------------- /views/signUp.html: -------------------------------------------------------------------------------- 1 | {% set title = 'Sign Up' %} 2 | {% set admin = false %} 3 | {% extends 'base.html' %} 4 | 5 | {% block content %} 6 |
7 | 10 |

Sign up for {{ plan.name }} — {{ plan.amount }} / 11 | {% if (plan.interval_count > 1) %} 12 | {{ plan.interval_count }} {{ plan.interval }}s 13 | 14 | {% else %} 15 | {{ plan.interval }} 16 | {% endif %} 17 |

18 | {% if success %} 19 |
20 |

Your payment was successful. Congrats, you've successfully signed up!

21 |
22 | {% elif error %} 23 |
24 |

Your payment was unsuccessful. Please try again.

25 |
26 | {% else %} 27 |
28 |
29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 39 | 40 |
41 | 44 |
45 | 46 |
47 | 48 | 49 | 50 |
51 | 52 | 53 |
54 |
55 | {% endif %} 56 | 57 |
58 | 59 | 125 | 126 | 153 | 154 | 155 | {% endblock %} 156 | 157 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | a-sync-waterfall@^1.0.0: 6 | version "1.0.1" 7 | resolved "https://registry.yarnpkg.com/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz#75b6b6aa72598b497a125e7a2770f14f4c8a1fa7" 8 | 9 | abbrev@1: 10 | version "1.1.1" 11 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 12 | 13 | accepts@~1.3.5: 14 | version "1.3.5" 15 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" 16 | dependencies: 17 | mime-types "~2.1.18" 18 | negotiator "0.6.1" 19 | 20 | ansi-regex@^2.0.0: 21 | version "2.1.1" 22 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 23 | 24 | ansi-regex@^3.0.0: 25 | version "3.0.0" 26 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 27 | 28 | anymatch@^2.0.0: 29 | version "2.0.0" 30 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" 31 | dependencies: 32 | micromatch "^3.1.4" 33 | normalize-path "^2.1.1" 34 | 35 | aproba@^1.0.3: 36 | version "1.2.0" 37 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" 38 | 39 | are-we-there-yet@~1.1.2: 40 | version "1.1.5" 41 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" 42 | dependencies: 43 | delegates "^1.0.0" 44 | readable-stream "^2.0.6" 45 | 46 | arr-diff@^4.0.0: 47 | version "4.0.0" 48 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" 49 | 50 | arr-flatten@^1.1.0: 51 | version "1.1.0" 52 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" 53 | 54 | arr-union@^3.1.0: 55 | version "3.1.0" 56 | resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" 57 | 58 | array-flatten@1.1.1: 59 | version "1.1.1" 60 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 61 | 62 | array-unique@^0.3.2: 63 | version "0.3.2" 64 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" 65 | 66 | asap@^2.0.3: 67 | version "2.0.6" 68 | resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" 69 | 70 | assign-symbols@^1.0.0: 71 | version "1.0.0" 72 | resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" 73 | 74 | async-each@^1.0.1: 75 | version "1.0.1" 76 | resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" 77 | 78 | atob@^2.1.1: 79 | version "2.1.2" 80 | resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" 81 | 82 | balanced-match@^1.0.0: 83 | version "1.0.0" 84 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 85 | 86 | base@^0.11.1: 87 | version "0.11.2" 88 | resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" 89 | dependencies: 90 | cache-base "^1.0.1" 91 | class-utils "^0.3.5" 92 | component-emitter "^1.2.1" 93 | define-property "^1.0.0" 94 | isobject "^3.0.1" 95 | mixin-deep "^1.2.0" 96 | pascalcase "^0.1.1" 97 | 98 | binary-extensions@^1.0.0: 99 | version "1.13.0" 100 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.0.tgz#9523e001306a32444b907423f1de2164222f6ab1" 101 | 102 | body-parser@1.18.3, body-parser@^1.18.3: 103 | version "1.18.3" 104 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" 105 | dependencies: 106 | bytes "3.0.0" 107 | content-type "~1.0.4" 108 | debug "2.6.9" 109 | depd "~1.1.2" 110 | http-errors "~1.6.3" 111 | iconv-lite "0.4.23" 112 | on-finished "~2.3.0" 113 | qs "6.5.2" 114 | raw-body "2.3.3" 115 | type-is "~1.6.16" 116 | 117 | brace-expansion@^1.1.7: 118 | version "1.1.11" 119 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 120 | dependencies: 121 | balanced-match "^1.0.0" 122 | concat-map "0.0.1" 123 | 124 | braces@^2.3.1, braces@^2.3.2: 125 | version "2.3.2" 126 | resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" 127 | dependencies: 128 | arr-flatten "^1.1.0" 129 | array-unique "^0.3.2" 130 | extend-shallow "^2.0.1" 131 | fill-range "^4.0.0" 132 | isobject "^3.0.1" 133 | repeat-element "^1.1.2" 134 | snapdragon "^0.8.1" 135 | snapdragon-node "^2.0.1" 136 | split-string "^3.0.2" 137 | to-regex "^3.0.1" 138 | 139 | bytes@3.0.0: 140 | version "3.0.0" 141 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" 142 | 143 | cache-base@^1.0.1: 144 | version "1.0.1" 145 | resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" 146 | dependencies: 147 | collection-visit "^1.0.0" 148 | component-emitter "^1.2.1" 149 | get-value "^2.0.6" 150 | has-value "^1.0.0" 151 | isobject "^3.0.1" 152 | set-value "^2.0.0" 153 | to-object-path "^0.3.0" 154 | union-value "^1.0.0" 155 | unset-value "^1.0.0" 156 | 157 | camelcase@^2.0.1: 158 | version "2.1.1" 159 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" 160 | 161 | chokidar@^2.0.0: 162 | version "2.1.1" 163 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.1.tgz#adc39ad55a2adf26548bd2afa048f611091f9184" 164 | dependencies: 165 | anymatch "^2.0.0" 166 | async-each "^1.0.1" 167 | braces "^2.3.2" 168 | glob-parent "^3.1.0" 169 | inherits "^2.0.3" 170 | is-binary-path "^1.0.0" 171 | is-glob "^4.0.0" 172 | normalize-path "^3.0.0" 173 | path-is-absolute "^1.0.0" 174 | readdirp "^2.2.1" 175 | upath "^1.1.0" 176 | optionalDependencies: 177 | fsevents "^1.2.7" 178 | 179 | chownr@^1.1.1: 180 | version "1.1.1" 181 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" 182 | 183 | class-utils@^0.3.5: 184 | version "0.3.6" 185 | resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" 186 | dependencies: 187 | arr-union "^3.1.0" 188 | define-property "^0.2.5" 189 | isobject "^3.0.0" 190 | static-extend "^0.1.1" 191 | 192 | cliui@^3.0.3: 193 | version "3.2.0" 194 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" 195 | dependencies: 196 | string-width "^1.0.1" 197 | strip-ansi "^3.0.1" 198 | wrap-ansi "^2.0.0" 199 | 200 | code-point-at@^1.0.0: 201 | version "1.1.0" 202 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 203 | 204 | collection-visit@^1.0.0: 205 | version "1.0.0" 206 | resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" 207 | dependencies: 208 | map-visit "^1.0.0" 209 | object-visit "^1.0.0" 210 | 211 | component-emitter@^1.2.1: 212 | version "1.2.1" 213 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" 214 | 215 | concat-map@0.0.1: 216 | version "0.0.1" 217 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 218 | 219 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 220 | version "1.1.0" 221 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 222 | 223 | content-disposition@0.5.2: 224 | version "0.5.2" 225 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" 226 | 227 | content-type@~1.0.4: 228 | version "1.0.4" 229 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 230 | 231 | cookie-signature@1.0.6: 232 | version "1.0.6" 233 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 234 | 235 | cookie@0.3.1: 236 | version "0.3.1" 237 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" 238 | 239 | copy-descriptor@^0.1.0: 240 | version "0.1.1" 241 | resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" 242 | 243 | core-util-is@~1.0.0: 244 | version "1.0.2" 245 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 246 | 247 | debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3: 248 | version "2.6.9" 249 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 250 | dependencies: 251 | ms "2.0.0" 252 | 253 | decamelize@^1.1.1: 254 | version "1.2.0" 255 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 256 | 257 | decode-uri-component@^0.2.0: 258 | version "0.2.0" 259 | resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" 260 | 261 | deep-extend@^0.6.0: 262 | version "0.6.0" 263 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 264 | 265 | define-property@^0.2.5: 266 | version "0.2.5" 267 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" 268 | dependencies: 269 | is-descriptor "^0.1.0" 270 | 271 | define-property@^1.0.0: 272 | version "1.0.0" 273 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" 274 | dependencies: 275 | is-descriptor "^1.0.0" 276 | 277 | define-property@^2.0.2: 278 | version "2.0.2" 279 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" 280 | dependencies: 281 | is-descriptor "^1.0.2" 282 | isobject "^3.0.1" 283 | 284 | delegates@^1.0.0: 285 | version "1.0.0" 286 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 287 | 288 | depd@~1.1.2: 289 | version "1.1.2" 290 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 291 | 292 | destroy@~1.0.4: 293 | version "1.0.4" 294 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 295 | 296 | detect-libc@^1.0.2: 297 | version "1.0.3" 298 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" 299 | 300 | dotenv@^6.2.0: 301 | version "6.2.0" 302 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064" 303 | 304 | ee-first@1.1.1: 305 | version "1.1.1" 306 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 307 | 308 | encodeurl@~1.0.2: 309 | version "1.0.2" 310 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 311 | 312 | escape-html@~1.0.3: 313 | version "1.0.3" 314 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 315 | 316 | etag@~1.8.1: 317 | version "1.8.1" 318 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 319 | 320 | expand-brackets@^2.1.4: 321 | version "2.1.4" 322 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" 323 | dependencies: 324 | debug "^2.3.3" 325 | define-property "^0.2.5" 326 | extend-shallow "^2.0.1" 327 | posix-character-classes "^0.1.0" 328 | regex-not "^1.0.0" 329 | snapdragon "^0.8.1" 330 | to-regex "^3.0.1" 331 | 332 | express@^4.16.4: 333 | version "4.16.4" 334 | resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e" 335 | dependencies: 336 | accepts "~1.3.5" 337 | array-flatten "1.1.1" 338 | body-parser "1.18.3" 339 | content-disposition "0.5.2" 340 | content-type "~1.0.4" 341 | cookie "0.3.1" 342 | cookie-signature "1.0.6" 343 | debug "2.6.9" 344 | depd "~1.1.2" 345 | encodeurl "~1.0.2" 346 | escape-html "~1.0.3" 347 | etag "~1.8.1" 348 | finalhandler "1.1.1" 349 | fresh "0.5.2" 350 | merge-descriptors "1.0.1" 351 | methods "~1.1.2" 352 | on-finished "~2.3.0" 353 | parseurl "~1.3.2" 354 | path-to-regexp "0.1.7" 355 | proxy-addr "~2.0.4" 356 | qs "6.5.2" 357 | range-parser "~1.2.0" 358 | safe-buffer "5.1.2" 359 | send "0.16.2" 360 | serve-static "1.13.2" 361 | setprototypeof "1.1.0" 362 | statuses "~1.4.0" 363 | type-is "~1.6.16" 364 | utils-merge "1.0.1" 365 | vary "~1.1.2" 366 | 367 | extend-shallow@^2.0.1: 368 | version "2.0.1" 369 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" 370 | dependencies: 371 | is-extendable "^0.1.0" 372 | 373 | extend-shallow@^3.0.0, extend-shallow@^3.0.2: 374 | version "3.0.2" 375 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" 376 | dependencies: 377 | assign-symbols "^1.0.0" 378 | is-extendable "^1.0.1" 379 | 380 | extglob@^2.0.4: 381 | version "2.0.4" 382 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" 383 | dependencies: 384 | array-unique "^0.3.2" 385 | define-property "^1.0.0" 386 | expand-brackets "^2.1.4" 387 | extend-shallow "^2.0.1" 388 | fragment-cache "^0.2.1" 389 | regex-not "^1.0.0" 390 | snapdragon "^0.8.1" 391 | to-regex "^3.0.1" 392 | 393 | fill-range@^4.0.0: 394 | version "4.0.0" 395 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" 396 | dependencies: 397 | extend-shallow "^2.0.1" 398 | is-number "^3.0.0" 399 | repeat-string "^1.6.1" 400 | to-regex-range "^2.1.0" 401 | 402 | finalhandler@1.1.1: 403 | version "1.1.1" 404 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" 405 | dependencies: 406 | debug "2.6.9" 407 | encodeurl "~1.0.2" 408 | escape-html "~1.0.3" 409 | on-finished "~2.3.0" 410 | parseurl "~1.3.2" 411 | statuses "~1.4.0" 412 | unpipe "~1.0.0" 413 | 414 | for-in@^1.0.2: 415 | version "1.0.2" 416 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 417 | 418 | forwarded@~0.1.2: 419 | version "0.1.2" 420 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" 421 | 422 | fragment-cache@^0.2.1: 423 | version "0.2.1" 424 | resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" 425 | dependencies: 426 | map-cache "^0.2.2" 427 | 428 | fresh@0.5.2: 429 | version "0.5.2" 430 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 431 | 432 | fs-minipass@^1.2.5: 433 | version "1.2.5" 434 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" 435 | dependencies: 436 | minipass "^2.2.1" 437 | 438 | fs.realpath@^1.0.0: 439 | version "1.0.0" 440 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 441 | 442 | fsevents@^1.2.7: 443 | version "1.2.7" 444 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.7.tgz#4851b664a3783e52003b3c66eb0eee1074933aa4" 445 | dependencies: 446 | nan "^2.9.2" 447 | node-pre-gyp "^0.10.0" 448 | 449 | gauge@~2.7.3: 450 | version "2.7.4" 451 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 452 | dependencies: 453 | aproba "^1.0.3" 454 | console-control-strings "^1.0.0" 455 | has-unicode "^2.0.0" 456 | object-assign "^4.1.0" 457 | signal-exit "^3.0.0" 458 | string-width "^1.0.1" 459 | strip-ansi "^3.0.1" 460 | wide-align "^1.1.0" 461 | 462 | get-value@^2.0.3, get-value@^2.0.6: 463 | version "2.0.6" 464 | resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" 465 | 466 | glob-parent@^3.1.0: 467 | version "3.1.0" 468 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" 469 | dependencies: 470 | is-glob "^3.1.0" 471 | path-dirname "^1.0.0" 472 | 473 | glob@^7.1.3: 474 | version "7.1.3" 475 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" 476 | dependencies: 477 | fs.realpath "^1.0.0" 478 | inflight "^1.0.4" 479 | inherits "2" 480 | minimatch "^3.0.4" 481 | once "^1.3.0" 482 | path-is-absolute "^1.0.0" 483 | 484 | graceful-fs@^4.1.11: 485 | version "4.1.15" 486 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" 487 | 488 | has-unicode@^2.0.0: 489 | version "2.0.1" 490 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 491 | 492 | has-value@^0.3.1: 493 | version "0.3.1" 494 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" 495 | dependencies: 496 | get-value "^2.0.3" 497 | has-values "^0.1.4" 498 | isobject "^2.0.0" 499 | 500 | has-value@^1.0.0: 501 | version "1.0.0" 502 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" 503 | dependencies: 504 | get-value "^2.0.6" 505 | has-values "^1.0.0" 506 | isobject "^3.0.0" 507 | 508 | has-values@^0.1.4: 509 | version "0.1.4" 510 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" 511 | 512 | has-values@^1.0.0: 513 | version "1.0.0" 514 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" 515 | dependencies: 516 | is-number "^3.0.0" 517 | kind-of "^4.0.0" 518 | 519 | http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: 520 | version "1.6.3" 521 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" 522 | dependencies: 523 | depd "~1.1.2" 524 | inherits "2.0.3" 525 | setprototypeof "1.1.0" 526 | statuses ">= 1.4.0 < 2" 527 | 528 | iconv-lite@0.4.23: 529 | version "0.4.23" 530 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" 531 | dependencies: 532 | safer-buffer ">= 2.1.2 < 3" 533 | 534 | iconv-lite@^0.4.4: 535 | version "0.4.24" 536 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 537 | dependencies: 538 | safer-buffer ">= 2.1.2 < 3" 539 | 540 | ignore-walk@^3.0.1: 541 | version "3.0.1" 542 | resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" 543 | dependencies: 544 | minimatch "^3.0.4" 545 | 546 | inflight@^1.0.4: 547 | version "1.0.6" 548 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 549 | dependencies: 550 | once "^1.3.0" 551 | wrappy "1" 552 | 553 | inherits@2, inherits@2.0.3, inherits@^2.0.3, inherits@~2.0.3: 554 | version "2.0.3" 555 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 556 | 557 | ini@~1.3.0: 558 | version "1.3.5" 559 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" 560 | 561 | invert-kv@^1.0.0: 562 | version "1.0.0" 563 | resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" 564 | 565 | ipaddr.js@1.8.0: 566 | version "1.8.0" 567 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" 568 | 569 | is-accessor-descriptor@^0.1.6: 570 | version "0.1.6" 571 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" 572 | dependencies: 573 | kind-of "^3.0.2" 574 | 575 | is-accessor-descriptor@^1.0.0: 576 | version "1.0.0" 577 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" 578 | dependencies: 579 | kind-of "^6.0.0" 580 | 581 | is-binary-path@^1.0.0: 582 | version "1.0.1" 583 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" 584 | dependencies: 585 | binary-extensions "^1.0.0" 586 | 587 | is-buffer@^1.1.5: 588 | version "1.1.6" 589 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 590 | 591 | is-data-descriptor@^0.1.4: 592 | version "0.1.4" 593 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" 594 | dependencies: 595 | kind-of "^3.0.2" 596 | 597 | is-data-descriptor@^1.0.0: 598 | version "1.0.0" 599 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" 600 | dependencies: 601 | kind-of "^6.0.0" 602 | 603 | is-descriptor@^0.1.0: 604 | version "0.1.6" 605 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" 606 | dependencies: 607 | is-accessor-descriptor "^0.1.6" 608 | is-data-descriptor "^0.1.4" 609 | kind-of "^5.0.0" 610 | 611 | is-descriptor@^1.0.0, is-descriptor@^1.0.2: 612 | version "1.0.2" 613 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" 614 | dependencies: 615 | is-accessor-descriptor "^1.0.0" 616 | is-data-descriptor "^1.0.0" 617 | kind-of "^6.0.2" 618 | 619 | is-extendable@^0.1.0, is-extendable@^0.1.1: 620 | version "0.1.1" 621 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 622 | 623 | is-extendable@^1.0.1: 624 | version "1.0.1" 625 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" 626 | dependencies: 627 | is-plain-object "^2.0.4" 628 | 629 | is-extglob@^2.1.0, is-extglob@^2.1.1: 630 | version "2.1.1" 631 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 632 | 633 | is-fullwidth-code-point@^1.0.0: 634 | version "1.0.0" 635 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 636 | dependencies: 637 | number-is-nan "^1.0.0" 638 | 639 | is-fullwidth-code-point@^2.0.0: 640 | version "2.0.0" 641 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 642 | 643 | is-glob@^3.1.0: 644 | version "3.1.0" 645 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" 646 | dependencies: 647 | is-extglob "^2.1.0" 648 | 649 | is-glob@^4.0.0: 650 | version "4.0.0" 651 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" 652 | dependencies: 653 | is-extglob "^2.1.1" 654 | 655 | is-number@^3.0.0: 656 | version "3.0.0" 657 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" 658 | dependencies: 659 | kind-of "^3.0.2" 660 | 661 | is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: 662 | version "2.0.4" 663 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" 664 | dependencies: 665 | isobject "^3.0.1" 666 | 667 | is-windows@^1.0.2: 668 | version "1.0.2" 669 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" 670 | 671 | isarray@1.0.0, isarray@~1.0.0: 672 | version "1.0.0" 673 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 674 | 675 | isobject@^2.0.0: 676 | version "2.1.0" 677 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 678 | dependencies: 679 | isarray "1.0.0" 680 | 681 | isobject@^3.0.0, isobject@^3.0.1: 682 | version "3.0.1" 683 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" 684 | 685 | kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: 686 | version "3.2.2" 687 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" 688 | dependencies: 689 | is-buffer "^1.1.5" 690 | 691 | kind-of@^4.0.0: 692 | version "4.0.0" 693 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" 694 | dependencies: 695 | is-buffer "^1.1.5" 696 | 697 | kind-of@^5.0.0: 698 | version "5.1.0" 699 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" 700 | 701 | kind-of@^6.0.0, kind-of@^6.0.2: 702 | version "6.0.2" 703 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" 704 | 705 | lcid@^1.0.0: 706 | version "1.0.0" 707 | resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" 708 | dependencies: 709 | invert-kv "^1.0.0" 710 | 711 | lodash.isplainobject@^4.0.6: 712 | version "4.0.6" 713 | resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" 714 | 715 | map-cache@^0.2.2: 716 | version "0.2.2" 717 | resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" 718 | 719 | map-visit@^1.0.0: 720 | version "1.0.0" 721 | resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" 722 | dependencies: 723 | object-visit "^1.0.0" 724 | 725 | media-typer@0.3.0: 726 | version "0.3.0" 727 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 728 | 729 | merge-descriptors@1.0.1: 730 | version "1.0.1" 731 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 732 | 733 | methods@~1.1.2: 734 | version "1.1.2" 735 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 736 | 737 | micromatch@^3.1.10, micromatch@^3.1.4: 738 | version "3.1.10" 739 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" 740 | dependencies: 741 | arr-diff "^4.0.0" 742 | array-unique "^0.3.2" 743 | braces "^2.3.1" 744 | define-property "^2.0.2" 745 | extend-shallow "^3.0.2" 746 | extglob "^2.0.4" 747 | fragment-cache "^0.2.1" 748 | kind-of "^6.0.2" 749 | nanomatch "^1.2.9" 750 | object.pick "^1.3.0" 751 | regex-not "^1.0.0" 752 | snapdragon "^0.8.1" 753 | to-regex "^3.0.2" 754 | 755 | mime-db@~1.38.0: 756 | version "1.38.0" 757 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.38.0.tgz#1a2aab16da9eb167b49c6e4df2d9c68d63d8e2ad" 758 | 759 | mime-types@~2.1.18: 760 | version "2.1.22" 761 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.22.tgz#fe6b355a190926ab7698c9a0556a11199b2199bd" 762 | dependencies: 763 | mime-db "~1.38.0" 764 | 765 | mime@1.4.1: 766 | version "1.4.1" 767 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" 768 | 769 | minimatch@^3.0.4: 770 | version "3.0.4" 771 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 772 | dependencies: 773 | brace-expansion "^1.1.7" 774 | 775 | minimist@0.0.8: 776 | version "0.0.8" 777 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 778 | 779 | minimist@^1.2.0: 780 | version "1.2.0" 781 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 782 | 783 | minipass@^2.2.1, minipass@^2.3.4: 784 | version "2.3.5" 785 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" 786 | dependencies: 787 | safe-buffer "^5.1.2" 788 | yallist "^3.0.0" 789 | 790 | minizlib@^1.1.1: 791 | version "1.2.1" 792 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" 793 | dependencies: 794 | minipass "^2.2.1" 795 | 796 | mixin-deep@^1.2.0: 797 | version "1.3.1" 798 | resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" 799 | dependencies: 800 | for-in "^1.0.2" 801 | is-extendable "^1.0.1" 802 | 803 | mkdirp@^0.5.0, mkdirp@^0.5.1: 804 | version "0.5.1" 805 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 806 | dependencies: 807 | minimist "0.0.8" 808 | 809 | ms@2.0.0: 810 | version "2.0.0" 811 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 812 | 813 | nan@^2.9.2: 814 | version "2.12.1" 815 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.12.1.tgz#7b1aa193e9aa86057e3c7bbd0ac448e770925552" 816 | 817 | nanomatch@^1.2.9: 818 | version "1.2.13" 819 | resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" 820 | dependencies: 821 | arr-diff "^4.0.0" 822 | array-unique "^0.3.2" 823 | define-property "^2.0.2" 824 | extend-shallow "^3.0.2" 825 | fragment-cache "^0.2.1" 826 | is-windows "^1.0.2" 827 | kind-of "^6.0.2" 828 | object.pick "^1.3.0" 829 | regex-not "^1.0.0" 830 | snapdragon "^0.8.1" 831 | to-regex "^3.0.1" 832 | 833 | needle@^2.2.1: 834 | version "2.2.4" 835 | resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" 836 | dependencies: 837 | debug "^2.1.2" 838 | iconv-lite "^0.4.4" 839 | sax "^1.2.4" 840 | 841 | negotiator@0.6.1: 842 | version "0.6.1" 843 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" 844 | 845 | node-pre-gyp@^0.10.0: 846 | version "0.10.3" 847 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" 848 | dependencies: 849 | detect-libc "^1.0.2" 850 | mkdirp "^0.5.1" 851 | needle "^2.2.1" 852 | nopt "^4.0.1" 853 | npm-packlist "^1.1.6" 854 | npmlog "^4.0.2" 855 | rc "^1.2.7" 856 | rimraf "^2.6.1" 857 | semver "^5.3.0" 858 | tar "^4" 859 | 860 | nopt@^4.0.1: 861 | version "4.0.1" 862 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" 863 | dependencies: 864 | abbrev "1" 865 | osenv "^0.1.4" 866 | 867 | normalize-path@^2.1.1: 868 | version "2.1.1" 869 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" 870 | dependencies: 871 | remove-trailing-separator "^1.0.1" 872 | 873 | normalize-path@^3.0.0: 874 | version "3.0.0" 875 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 876 | 877 | npm-bundled@^1.0.1: 878 | version "1.0.6" 879 | resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" 880 | 881 | npm-packlist@^1.1.6: 882 | version "1.3.0" 883 | resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.3.0.tgz#7f01e8e44408341379ca98cfd756e7b29bd2626c" 884 | dependencies: 885 | ignore-walk "^3.0.1" 886 | npm-bundled "^1.0.1" 887 | 888 | npmlog@^4.0.2: 889 | version "4.1.2" 890 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" 891 | dependencies: 892 | are-we-there-yet "~1.1.2" 893 | console-control-strings "~1.1.0" 894 | gauge "~2.7.3" 895 | set-blocking "~2.0.0" 896 | 897 | number-is-nan@^1.0.0: 898 | version "1.0.1" 899 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 900 | 901 | nunjucks@^3.1.7: 902 | version "3.1.7" 903 | resolved "https://registry.yarnpkg.com/nunjucks/-/nunjucks-3.1.7.tgz#0bd25f29ef9d11826350e762836286c518c98706" 904 | dependencies: 905 | a-sync-waterfall "^1.0.0" 906 | asap "^2.0.3" 907 | yargs "^3.32.0" 908 | optionalDependencies: 909 | chokidar "^2.0.0" 910 | 911 | object-assign@^4.1.0: 912 | version "4.1.1" 913 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 914 | 915 | object-copy@^0.1.0: 916 | version "0.1.0" 917 | resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" 918 | dependencies: 919 | copy-descriptor "^0.1.0" 920 | define-property "^0.2.5" 921 | kind-of "^3.0.3" 922 | 923 | object-visit@^1.0.0: 924 | version "1.0.1" 925 | resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" 926 | dependencies: 927 | isobject "^3.0.0" 928 | 929 | object.pick@^1.3.0: 930 | version "1.3.0" 931 | resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" 932 | dependencies: 933 | isobject "^3.0.1" 934 | 935 | on-finished@~2.3.0: 936 | version "2.3.0" 937 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 938 | dependencies: 939 | ee-first "1.1.1" 940 | 941 | once@^1.3.0: 942 | version "1.4.0" 943 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 944 | dependencies: 945 | wrappy "1" 946 | 947 | os-homedir@^1.0.0: 948 | version "1.0.2" 949 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 950 | 951 | os-locale@^1.4.0: 952 | version "1.4.0" 953 | resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" 954 | dependencies: 955 | lcid "^1.0.0" 956 | 957 | os-tmpdir@^1.0.0: 958 | version "1.0.2" 959 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 960 | 961 | osenv@^0.1.4: 962 | version "0.1.5" 963 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" 964 | dependencies: 965 | os-homedir "^1.0.0" 966 | os-tmpdir "^1.0.0" 967 | 968 | parseurl@~1.3.2: 969 | version "1.3.2" 970 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" 971 | 972 | pascalcase@^0.1.1: 973 | version "0.1.1" 974 | resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" 975 | 976 | path-dirname@^1.0.0: 977 | version "1.0.2" 978 | resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" 979 | 980 | path-is-absolute@^1.0.0: 981 | version "1.0.1" 982 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 983 | 984 | path-to-regexp@0.1.7: 985 | version "0.1.7" 986 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 987 | 988 | posix-character-classes@^0.1.0: 989 | version "0.1.1" 990 | resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" 991 | 992 | process-nextick-args@~2.0.0: 993 | version "2.0.0" 994 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" 995 | 996 | proxy-addr@~2.0.4: 997 | version "2.0.4" 998 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" 999 | dependencies: 1000 | forwarded "~0.1.2" 1001 | ipaddr.js "1.8.0" 1002 | 1003 | qs@6.5.2: 1004 | version "6.5.2" 1005 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" 1006 | 1007 | qs@^6.6.0: 1008 | version "6.6.0" 1009 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.6.0.tgz#a99c0f69a8d26bf7ef012f871cdabb0aee4424c2" 1010 | 1011 | range-parser@~1.2.0: 1012 | version "1.2.0" 1013 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" 1014 | 1015 | raw-body@2.3.3: 1016 | version "2.3.3" 1017 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" 1018 | dependencies: 1019 | bytes "3.0.0" 1020 | http-errors "1.6.3" 1021 | iconv-lite "0.4.23" 1022 | unpipe "1.0.0" 1023 | 1024 | rc@^1.2.7: 1025 | version "1.2.8" 1026 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" 1027 | dependencies: 1028 | deep-extend "^0.6.0" 1029 | ini "~1.3.0" 1030 | minimist "^1.2.0" 1031 | strip-json-comments "~2.0.1" 1032 | 1033 | readable-stream@^2.0.2, readable-stream@^2.0.6: 1034 | version "2.3.6" 1035 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 1036 | dependencies: 1037 | core-util-is "~1.0.0" 1038 | inherits "~2.0.3" 1039 | isarray "~1.0.0" 1040 | process-nextick-args "~2.0.0" 1041 | safe-buffer "~5.1.1" 1042 | string_decoder "~1.1.1" 1043 | util-deprecate "~1.0.1" 1044 | 1045 | readdirp@^2.2.1: 1046 | version "2.2.1" 1047 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" 1048 | dependencies: 1049 | graceful-fs "^4.1.11" 1050 | micromatch "^3.1.10" 1051 | readable-stream "^2.0.2" 1052 | 1053 | regex-not@^1.0.0, regex-not@^1.0.2: 1054 | version "1.0.2" 1055 | resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" 1056 | dependencies: 1057 | extend-shallow "^3.0.2" 1058 | safe-regex "^1.1.0" 1059 | 1060 | remove-trailing-separator@^1.0.1: 1061 | version "1.1.0" 1062 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" 1063 | 1064 | repeat-element@^1.1.2: 1065 | version "1.1.3" 1066 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" 1067 | 1068 | repeat-string@^1.6.1: 1069 | version "1.6.1" 1070 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 1071 | 1072 | resolve-url@^0.2.1: 1073 | version "0.2.1" 1074 | resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" 1075 | 1076 | ret@~0.1.10: 1077 | version "0.1.15" 1078 | resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" 1079 | 1080 | rimraf@^2.6.1: 1081 | version "2.6.3" 1082 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" 1083 | dependencies: 1084 | glob "^7.1.3" 1085 | 1086 | safe-buffer@5.1.2, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 1087 | version "5.1.2" 1088 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1089 | 1090 | safe-regex@^1.1.0: 1091 | version "1.1.0" 1092 | resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" 1093 | dependencies: 1094 | ret "~0.1.10" 1095 | 1096 | "safer-buffer@>= 2.1.2 < 3": 1097 | version "2.1.2" 1098 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1099 | 1100 | sax@^1.2.4: 1101 | version "1.2.4" 1102 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" 1103 | 1104 | semver@^5.3.0: 1105 | version "5.6.0" 1106 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" 1107 | 1108 | send@0.16.2: 1109 | version "0.16.2" 1110 | resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" 1111 | dependencies: 1112 | debug "2.6.9" 1113 | depd "~1.1.2" 1114 | destroy "~1.0.4" 1115 | encodeurl "~1.0.2" 1116 | escape-html "~1.0.3" 1117 | etag "~1.8.1" 1118 | fresh "0.5.2" 1119 | http-errors "~1.6.2" 1120 | mime "1.4.1" 1121 | ms "2.0.0" 1122 | on-finished "~2.3.0" 1123 | range-parser "~1.2.0" 1124 | statuses "~1.4.0" 1125 | 1126 | serve-static@1.13.2: 1127 | version "1.13.2" 1128 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" 1129 | dependencies: 1130 | encodeurl "~1.0.2" 1131 | escape-html "~1.0.3" 1132 | parseurl "~1.3.2" 1133 | send "0.16.2" 1134 | 1135 | set-blocking@~2.0.0: 1136 | version "2.0.0" 1137 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1138 | 1139 | set-value@^0.4.3: 1140 | version "0.4.3" 1141 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" 1142 | dependencies: 1143 | extend-shallow "^2.0.1" 1144 | is-extendable "^0.1.1" 1145 | is-plain-object "^2.0.1" 1146 | to-object-path "^0.3.0" 1147 | 1148 | set-value@^2.0.0: 1149 | version "2.0.0" 1150 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" 1151 | dependencies: 1152 | extend-shallow "^2.0.1" 1153 | is-extendable "^0.1.1" 1154 | is-plain-object "^2.0.3" 1155 | split-string "^3.0.1" 1156 | 1157 | setprototypeof@1.1.0: 1158 | version "1.1.0" 1159 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" 1160 | 1161 | signal-exit@^3.0.0: 1162 | version "3.0.2" 1163 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 1164 | 1165 | snapdragon-node@^2.0.1: 1166 | version "2.1.1" 1167 | resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" 1168 | dependencies: 1169 | define-property "^1.0.0" 1170 | isobject "^3.0.0" 1171 | snapdragon-util "^3.0.1" 1172 | 1173 | snapdragon-util@^3.0.1: 1174 | version "3.0.1" 1175 | resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" 1176 | dependencies: 1177 | kind-of "^3.2.0" 1178 | 1179 | snapdragon@^0.8.1: 1180 | version "0.8.2" 1181 | resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" 1182 | dependencies: 1183 | base "^0.11.1" 1184 | debug "^2.2.0" 1185 | define-property "^0.2.5" 1186 | extend-shallow "^2.0.1" 1187 | map-cache "^0.2.2" 1188 | source-map "^0.5.6" 1189 | source-map-resolve "^0.5.0" 1190 | use "^3.1.0" 1191 | 1192 | source-map-resolve@^0.5.0: 1193 | version "0.5.2" 1194 | resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" 1195 | dependencies: 1196 | atob "^2.1.1" 1197 | decode-uri-component "^0.2.0" 1198 | resolve-url "^0.2.1" 1199 | source-map-url "^0.4.0" 1200 | urix "^0.1.0" 1201 | 1202 | source-map-url@^0.4.0: 1203 | version "0.4.0" 1204 | resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" 1205 | 1206 | source-map@^0.5.6: 1207 | version "0.5.7" 1208 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 1209 | 1210 | split-string@^3.0.1, split-string@^3.0.2: 1211 | version "3.1.0" 1212 | resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" 1213 | dependencies: 1214 | extend-shallow "^3.0.0" 1215 | 1216 | static-extend@^0.1.1: 1217 | version "0.1.2" 1218 | resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" 1219 | dependencies: 1220 | define-property "^0.2.5" 1221 | object-copy "^0.1.0" 1222 | 1223 | "statuses@>= 1.4.0 < 2": 1224 | version "1.5.0" 1225 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 1226 | 1227 | statuses@~1.4.0: 1228 | version "1.4.0" 1229 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" 1230 | 1231 | string-width@^1.0.1: 1232 | version "1.0.2" 1233 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 1234 | dependencies: 1235 | code-point-at "^1.0.0" 1236 | is-fullwidth-code-point "^1.0.0" 1237 | strip-ansi "^3.0.0" 1238 | 1239 | "string-width@^1.0.2 || 2": 1240 | version "2.1.1" 1241 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 1242 | dependencies: 1243 | is-fullwidth-code-point "^2.0.0" 1244 | strip-ansi "^4.0.0" 1245 | 1246 | string_decoder@~1.1.1: 1247 | version "1.1.1" 1248 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 1249 | dependencies: 1250 | safe-buffer "~5.1.0" 1251 | 1252 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 1253 | version "3.0.1" 1254 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1255 | dependencies: 1256 | ansi-regex "^2.0.0" 1257 | 1258 | strip-ansi@^4.0.0: 1259 | version "4.0.0" 1260 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 1261 | dependencies: 1262 | ansi-regex "^3.0.0" 1263 | 1264 | strip-json-comments@~2.0.1: 1265 | version "2.0.1" 1266 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1267 | 1268 | stripe@^6.25.1: 1269 | version "6.25.1" 1270 | resolved "https://registry.yarnpkg.com/stripe/-/stripe-6.25.1.tgz#b19fce283236107bc52d4a3735d183d1c4957c4c" 1271 | dependencies: 1272 | lodash.isplainobject "^4.0.6" 1273 | qs "^6.6.0" 1274 | safe-buffer "^5.1.1" 1275 | uuid "^3.3.2" 1276 | 1277 | tar@^4: 1278 | version "4.4.8" 1279 | resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" 1280 | dependencies: 1281 | chownr "^1.1.1" 1282 | fs-minipass "^1.2.5" 1283 | minipass "^2.3.4" 1284 | minizlib "^1.1.1" 1285 | mkdirp "^0.5.0" 1286 | safe-buffer "^5.1.2" 1287 | yallist "^3.0.2" 1288 | 1289 | to-object-path@^0.3.0: 1290 | version "0.3.0" 1291 | resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" 1292 | dependencies: 1293 | kind-of "^3.0.2" 1294 | 1295 | to-regex-range@^2.1.0: 1296 | version "2.1.1" 1297 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" 1298 | dependencies: 1299 | is-number "^3.0.0" 1300 | repeat-string "^1.6.1" 1301 | 1302 | to-regex@^3.0.1, to-regex@^3.0.2: 1303 | version "3.0.2" 1304 | resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" 1305 | dependencies: 1306 | define-property "^2.0.2" 1307 | extend-shallow "^3.0.2" 1308 | regex-not "^1.0.2" 1309 | safe-regex "^1.1.0" 1310 | 1311 | type-is@~1.6.16: 1312 | version "1.6.16" 1313 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" 1314 | dependencies: 1315 | media-typer "0.3.0" 1316 | mime-types "~2.1.18" 1317 | 1318 | union-value@^1.0.0: 1319 | version "1.0.0" 1320 | resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" 1321 | dependencies: 1322 | arr-union "^3.1.0" 1323 | get-value "^2.0.6" 1324 | is-extendable "^0.1.1" 1325 | set-value "^0.4.3" 1326 | 1327 | unpipe@1.0.0, unpipe@~1.0.0: 1328 | version "1.0.0" 1329 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 1330 | 1331 | unset-value@^1.0.0: 1332 | version "1.0.0" 1333 | resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" 1334 | dependencies: 1335 | has-value "^0.3.1" 1336 | isobject "^3.0.0" 1337 | 1338 | upath@^1.1.0: 1339 | version "1.1.0" 1340 | resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" 1341 | 1342 | urix@^0.1.0: 1343 | version "0.1.0" 1344 | resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" 1345 | 1346 | use@^3.1.0: 1347 | version "3.1.1" 1348 | resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" 1349 | 1350 | util-deprecate@~1.0.1: 1351 | version "1.0.2" 1352 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1353 | 1354 | utils-merge@1.0.1: 1355 | version "1.0.1" 1356 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 1357 | 1358 | uuid@^3.3.2: 1359 | version "3.3.2" 1360 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" 1361 | 1362 | vary@~1.1.2: 1363 | version "1.1.2" 1364 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 1365 | 1366 | wide-align@^1.1.0: 1367 | version "1.1.3" 1368 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 1369 | dependencies: 1370 | string-width "^1.0.2 || 2" 1371 | 1372 | window-size@^0.1.4: 1373 | version "0.1.4" 1374 | resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876" 1375 | 1376 | wrap-ansi@^2.0.0: 1377 | version "2.1.0" 1378 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" 1379 | dependencies: 1380 | string-width "^1.0.1" 1381 | strip-ansi "^3.0.1" 1382 | 1383 | wrappy@1: 1384 | version "1.0.2" 1385 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1386 | 1387 | y18n@^3.2.0: 1388 | version "3.2.1" 1389 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" 1390 | 1391 | yallist@^3.0.0, yallist@^3.0.2: 1392 | version "3.0.3" 1393 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" 1394 | 1395 | yargs@^3.32.0: 1396 | version "3.32.0" 1397 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995" 1398 | dependencies: 1399 | camelcase "^2.0.1" 1400 | cliui "^3.0.3" 1401 | decamelize "^1.1.1" 1402 | os-locale "^1.4.0" 1403 | string-width "^1.0.1" 1404 | window-size "^0.1.4" 1405 | y18n "^3.2.0" 1406 | --------------------------------------------------------------------------------