├── .gitignore ├── .travis.yml ├── COPYING ├── LICENSE ├── README.md ├── demos ├── create-a-card.js ├── create-a-charge-using-card-token.js ├── create-a-charge-using-customer-token.js ├── create-a-charge.js ├── create-a-customer-using-card-token.js ├── create-a-customer.js ├── refund-a-charge.js └── retrieve-a-charge.js ├── lib └── pin.js ├── package-lock.json ├── package.json ├── test └── test.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 0.8 -------------------------------------------------------------------------------- /COPYING: -------------------------------------------------------------------------------- 1 | All code is copyright 2012 Api Engine 2 | 3 | All code is licensed under a 3-point BSD style license. 4 | 5 | See LICENSE or https://github.com/apiengine/pinjs -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2012, Api Engine 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 5 | 6 | 1) Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 7 | 8 | 2) Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 9 | 10 | 3) Neither the name of the Api Engine nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 11 | 12 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 13 | 14 | http://apiengine.io -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Pin.js - Node.js module for [pinpayments.com](http://pinpayments.com) 2 | 3 | [![Build Status](https://secure.travis-ci.org/ApiEngine/pinjs.png?branch=master)](http://travis-ci.org/ApiEngine/pinjs) 4 | 5 | Pin.js is an node.js API client for [Pin](https://pinpayments.com/) which is an Australian payment gateway. 6 | The module has wrapped all documented Pin resources. 7 | 8 | Down under we don't have access to some of the cooler payment gateways so we are looking forward to Pin giving us more options than just Paypal. 9 | 10 | ## Getting started 11 | 12 | ``` 13 | npm install pinjs 14 | ``` 15 | 16 | ## Methods 17 | 18 | First instantiate pinjs by passing in your api key 19 | 20 | ```javascript 21 | var Pin = require('pinjs'); 22 | 23 | var pin = Pin.setup({ 24 | key: 'yourkey', 25 | production: false 26 | }); 27 | // fields is an object, see the example for more info 28 | pin.createCard(fields, callback) 29 | pin.createCustomer(fields, callback) 30 | pin.refundCharge(chargeId, fields, callback) 31 | pin.retrieveCharge(chargeId, callback) 32 | pin.createCharge(fields, callback) 33 | pin.captureCharge(uncapturedChargeToken, callback) 34 | ``` 35 | 36 | ## Example 37 | 38 | This is the basic syntax of how to create a new charge, checkout the demos folder for the rest of the methods 39 | 40 | > Note: As of v1.0.2 the callback parameters have been updated. Please check the example bellow. 41 | 42 | ```javascript 43 | var Pin = require('pinjs'); 44 | 45 | var pin = Pin.setup({ 46 | key: 'your-api-key', 47 | production: false 48 | }); 49 | 50 | pin.createCharge({ 51 | amount: 400, 52 | description: 'test charge', 53 | email: 'roland@pinpayments.com', 54 | ip_address: '203.192.1.172', 55 | card: { 56 | number: 5520000000000000, 57 | expiry_month: '05', 58 | expiry_year: 2013, 59 | cvc: 123, 60 | name: 'Roland Robot', 61 | address_line1: '42 Sevenoaks St', 62 | address_city: 'Lathlain', 63 | address_postcode: 6454, 64 | address_state: 'WA', 65 | address_country: 'AU' 66 | } 67 | }, 68 | /** 69 | * @param error - Error response from the API 70 | * @param response - A HTTP response object. 71 | * @param body - The JSON response body. 72 | */ 73 | function (error, response, body) { 74 | console.log(body); 75 | }); 76 | ``` 77 | 78 | ## Author 79 | 80 | Built by the team at [API Engine](http://apiengine.io). 81 | 82 | Contact: thomasalwyndavis@gmail.com 83 | 84 | Clicky 85 | -------------------------------------------------------------------------------- /demos/create-a-card.js: -------------------------------------------------------------------------------- 1 | var Pin = require('../'); 2 | 3 | var pin = Pin.setup({ 4 | key: 'pk_DSA-1XmSdIIViXp4bJO8SA', 5 | production: false 6 | }); 7 | 8 | pin.createCard({ 9 | number: 5520000000000000, 10 | expiry_month: '05', 11 | expiry_year: 2013, 12 | cvc: 519, 13 | name: 'Roland Robot', 14 | address_line1: '42 Sevenoaks St', 15 | address_city: 'Lathlain', 16 | address_postcode: 6454, 17 | address_state: 'WA', 18 | address_country: 'AU' 19 | }, function (response) { 20 | console.log(response.body); 21 | }); 22 | 23 | -------------------------------------------------------------------------------- /demos/create-a-charge-using-card-token.js: -------------------------------------------------------------------------------- 1 | var Pin = require('../'); 2 | 3 | var pin = Pin.setup({ 4 | key: 'your-private-key', 5 | production: false 6 | }); 7 | 8 | pin.createCharge({ 9 | amount: 400, 10 | description: 'test charge', 11 | email: 'roland@pinpayments.com', 12 | ip_address: '203.192.1.172', 13 | card_token: 'tok_nytGw7koRg23EEp9NTmz9w' 14 | }, function (response) { 15 | console.log(response.body); 16 | }); 17 | -------------------------------------------------------------------------------- /demos/create-a-charge-using-customer-token.js: -------------------------------------------------------------------------------- 1 | var Pin = require('../'); 2 | 3 | var pin = Pin.setup({ 4 | key: 'your-private-key', 5 | production: false 6 | }); 7 | 8 | pin.createCharge({ 9 | amount: 400, 10 | description: 'test charge', 11 | email: 'roland@pinpayments.com', 12 | ip_address: '203.192.1.172', 13 | customer_token: 'cus_oX-JRX780mLzQaTcke-Tiw' 14 | }, function (response) { 15 | console.log(response.body); 16 | }); 17 | -------------------------------------------------------------------------------- /demos/create-a-charge.js: -------------------------------------------------------------------------------- 1 | var Pin = require('../'); 2 | 3 | var pin = Pin.setup({ 4 | key: 'your-private-key', 5 | production: false 6 | }); 7 | 8 | pin.createCharge({ 9 | amount: 400, 10 | description: 'test charge', 11 | email: 'roland@pinpayments.com', 12 | ip_address: '203.192.1.172', 13 | card: { 14 | number: 5520000000000000, 15 | expiry_month: '05', 16 | expiry_year: 2013, 17 | cvc: 123, 18 | name: 'Roland Robot', 19 | address_line1: '42 Sevenoaks St', 20 | address_city: 'Lathlain', 21 | address_postcode: 6454, 22 | address_state: 'WA', 23 | address_country: 'AU' 24 | } 25 | }, function (response) { 26 | console.log(response.body); 27 | }); 28 | -------------------------------------------------------------------------------- /demos/create-a-customer-using-card-token.js: -------------------------------------------------------------------------------- 1 | var Pin = require('../'); 2 | 3 | var pin = Pin.setup({ 4 | key: 'your-private-key', 5 | production: false 6 | }); 7 | 8 | pin.createCustomer({ 9 | email: 'roland@pinpayments.com', 10 | card_token: 'card_NmEoTFipYK2PAM1cTH5Glw' 11 | }, function (response) { 12 | console.log(response.body); 13 | }); 14 | -------------------------------------------------------------------------------- /demos/create-a-customer.js: -------------------------------------------------------------------------------- 1 | var Pin = require('../'); 2 | 3 | var pin = Pin.setup({ 4 | key: 'your-private-key', 5 | production: false 6 | }); 7 | 8 | pin.createCustomer({ 9 | email: 'roland@pinpayments.com', 10 | card: { 11 | number: 5520000000000000, 12 | expiry_month: '05', 13 | expiry_year: 2013, 14 | cvc: 123, 15 | name: 'Roland Robot', 16 | address_line1: '42 Sevenoaks St', 17 | address_city: 'Lathlain', 18 | address_postcode: 6454, 19 | address_state: 'WA', 20 | address_country: 'AU' 21 | } 22 | }, function (response) { 23 | console.log(response.body); 24 | }) 25 | -------------------------------------------------------------------------------- /demos/refund-a-charge.js: -------------------------------------------------------------------------------- 1 | var Pin = require('../'); 2 | 3 | var pin = Pin.setup({ 4 | key: 'your-private-key', 5 | production: false 6 | }); 7 | 8 | pin.refundCharge('ch_WsscVf6IqlfUaLFtLUa5vA', { 9 | amount: 400 10 | }, function (response) { 11 | console.log(response.body); 12 | }); -------------------------------------------------------------------------------- /demos/retrieve-a-charge.js: -------------------------------------------------------------------------------- 1 | var Pin = require('../'); 2 | 3 | var pin = Pin.setup({ 4 | key: 'your-private-key', 5 | production: false 6 | }); 7 | 8 | pin.retrieveCharge('ch_WsscVf6IqlfUaLFtLUa5vA', function (response) { 9 | console.log(response.body); 10 | }); -------------------------------------------------------------------------------- /lib/pin.js: -------------------------------------------------------------------------------- 1 | const got = require('got'); 2 | 3 | const liveUrl = 'https://api.pinpayments.com'; 4 | const testUrl = 'https://test-api.pinpayments.com'; 5 | 6 | var Pin = function(options) { 7 | 8 | const client = got.extend({ 9 | prefixUrl: options.url, 10 | headers: { 'user-agent': 'pinjs (https://github.com/thomasdavis/pinjs)' }, 11 | username: options.key, 12 | responseType: 'json' 13 | }); 14 | 15 | this.createCard = function(fields, callback) { 16 | client.post('/1/cards', { json: fields }) 17 | .then(response => callback(null, response, response.body)) 18 | .catch(error => callback(error, error.response, error.response ? error.response.body : null)); 19 | }; 20 | 21 | this.createCustomer = function(fields, callback) { 22 | client.post('/1/customers', { json: fields }) 23 | .then(response => callback(null, response, response.body)) 24 | .catch(error => callback(error, error.response, error.response ? error.response.body : null)); 25 | }; 26 | 27 | this.retrieveCustomer = function(token, callback) { 28 | client.get(`/1/customers/${token}`) 29 | .then(response => callback(null, response, response.body)) 30 | .catch(error => callback(error, error.response, error.response ? error.response.body : null)); 31 | }; 32 | 33 | this.createCustomerCard = function(token, fields, callback) { 34 | client.post(`/1/customers/${token}/cards`, { json: fields }) 35 | .then(response => callback(null, response, response.body)) 36 | .catch(error => callback(error, error.response, error.response ? error.response.body : null)); 37 | }; 38 | 39 | this.retrieveCustomerCards = function(token, callback) { 40 | client.get(`/1/customers/${token}/cards`) 41 | .then(response => callback(null, response, response.body)) 42 | .catch(error => callback(error, error.response, error.response ? error.response.body : null)); 43 | } 44 | 45 | this.refundCharge = function(chargeId, fields, callback) { 46 | client.post(`/1/charges/${chargeId}/refunds`, { json: fields }) 47 | .then(response => callback(null, response, response.body)) 48 | .catch(error => callback(error, error.response, error.response ? error.response.body : null)); 49 | }; 50 | 51 | this.retrieveChargeRefunds = function(chargeId, callback) { 52 | client.get(`/1/charges/${chargeId}/refunds`) 53 | .then(response => callback(null, response, response.body)) 54 | .catch(error => callback(error, error.response, error.response ? error.response.body : null)); 55 | }; 56 | 57 | this.retrieveCharge = function(chargeId, callback) { 58 | client.get(`/1/charges/${chargeId}`) 59 | .then(response => callback(null, response, response.body)) 60 | .catch(error => callback(error, error.response, error.response ? error.response.body : null)); 61 | }; 62 | 63 | this.createCharge = function(fields, callback) { 64 | client.post('/1/charges', { json: fields }) 65 | .then(response => callback(null, response, response.body)) 66 | .catch(error => callback(error, error.response, error.response ? error.response.body : null)); 67 | }; 68 | 69 | //Recipients 70 | this.createRecipient = function(fields, callback) { 71 | client.post('/1/recipients', { json: fields }) 72 | .then(response => callback(null, response, response.body)) 73 | .catch(error => callback(error, error.response, error.response ? error.response.body : null)); 74 | } 75 | 76 | this.getRecipientsList = function(callback) { 77 | client.get('/1/recipients') 78 | .then(response => callback(null, response, response.body)) 79 | .catch(error => callback(error, error.response, error.response ? error.response.body : null)); 80 | } 81 | 82 | this.getRecipientData = function(token, callback) { 83 | client.get(`/1/recipients/${token}`) 84 | .then(response => callback(null, response, response.body)) 85 | .catch(error => callback(error, error.response, error.response ? error.response.body : null)); 86 | } 87 | 88 | this.updateRecipientData = function(token, fields, callback) { 89 | client.put(`/1/recipients/${token}`, { json: fields }) 90 | .then(response => callback(null, response, response.body)) 91 | .catch(error => callback(error, error.response, error.response ? error.response.body : null)); 92 | } 93 | 94 | this.getRecipientTransfers = function(token, callback) { 95 | client.get(`/1/recipients/${token}/transfers`) 96 | .then(response => callback(null, response, response.body)) 97 | .catch(error => callback(error, error.response, error.response ? error.response.body : null)); 98 | } 99 | 100 | this.createTransfer = function(fields, callback) { 101 | client.post('/1/transfers', { json: fields }) 102 | .then(response => callback(null, response, response.body)) 103 | .catch(error => callback(error, error.response, error.response ? error.response.body : null)); 104 | } 105 | 106 | this.getTransfersList = function(callback) { 107 | client.get('/1/transfers') 108 | .then(response => callback(null, response, response.body)) 109 | .catch(error => callback(error, error.response, error.response ? error.response.body : null)); 110 | } 111 | 112 | this.getTransferDetails = function(transferToken, callback) { 113 | client.get(`/1/transfers/${transferToken}`) 114 | .then(response => callback(null, response, response.body)) 115 | .catch(error => callback(error, error.response, error.response ? error.response.body : null)); 116 | } 117 | 118 | this.getTransferLineItems = function(transferToken, callback) { 119 | client.get(`/1/transfers/${transferToken}/line_items`) 120 | .then(response => callback(null, response, response.body)) 121 | .catch(error => callback(error, error.response, error.response ? error.response.body : null)); 122 | } 123 | 124 | this.captureCharge = function(nonCapturedToken, callback) { 125 | client.put(`/1/charges/${nonCapturedToken}/capture`) 126 | .then(response => callback(null, response, response.body)) 127 | .catch(error => callback(error, error.response, error.response ? error.response.body : null)); 128 | } 129 | }; 130 | 131 | var setup = function (options) { 132 | options.url = liveUrl; 133 | if(!options.production) { 134 | options.url = testUrl; 135 | } 136 | var pin = new Pin(options); 137 | return pin; 138 | }; 139 | 140 | exports.setup = setup; 141 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pinjs", 3 | "version": "1.1.4", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@sindresorhus/is": { 8 | "version": "2.1.1", 9 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-2.1.1.tgz", 10 | "integrity": "sha512-/aPsuoj/1Dw/kzhkgz+ES6TxG0zfTMGLwuK2ZG00k/iJzYHTLCE8mVU8EPqEOp/lmxPoq1C1C9RYToRKb2KEfg==" 11 | }, 12 | "@szmarczak/http-timer": { 13 | "version": "4.0.5", 14 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz", 15 | "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==", 16 | "requires": { 17 | "defer-to-connect": "^2.0.0" 18 | } 19 | }, 20 | "@types/cacheable-request": { 21 | "version": "6.0.1", 22 | "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz", 23 | "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==", 24 | "requires": { 25 | "@types/http-cache-semantics": "*", 26 | "@types/keyv": "*", 27 | "@types/node": "*", 28 | "@types/responselike": "*" 29 | } 30 | }, 31 | "@types/http-cache-semantics": { 32 | "version": "4.0.0", 33 | "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", 34 | "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==" 35 | }, 36 | "@types/keyv": { 37 | "version": "3.1.1", 38 | "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz", 39 | "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==", 40 | "requires": { 41 | "@types/node": "*" 42 | } 43 | }, 44 | "@types/node": { 45 | "version": "13.13.0", 46 | "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.0.tgz", 47 | "integrity": "sha512-WE4IOAC6r/yBZss1oQGM5zs2D7RuKR6Q+w+X2SouPofnWn+LbCqClRyhO3ZE7Ix8nmFgo/oVuuE01cJT2XB13A==" 48 | }, 49 | "@types/responselike": { 50 | "version": "1.0.0", 51 | "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", 52 | "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", 53 | "requires": { 54 | "@types/node": "*" 55 | } 56 | }, 57 | "ansi-colors": { 58 | "version": "3.2.3", 59 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", 60 | "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", 61 | "dev": true 62 | }, 63 | "ansi-regex": { 64 | "version": "3.0.1", 65 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", 66 | "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", 67 | "dev": true 68 | }, 69 | "ansi-styles": { 70 | "version": "3.2.1", 71 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 72 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 73 | "dev": true, 74 | "requires": { 75 | "color-convert": "^1.9.0" 76 | } 77 | }, 78 | "anymatch": { 79 | "version": "3.1.1", 80 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", 81 | "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", 82 | "dev": true, 83 | "requires": { 84 | "normalize-path": "^3.0.0", 85 | "picomatch": "^2.0.4" 86 | } 87 | }, 88 | "argparse": { 89 | "version": "1.0.10", 90 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 91 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 92 | "dev": true, 93 | "requires": { 94 | "sprintf-js": "~1.0.2" 95 | } 96 | }, 97 | "assertion-error": { 98 | "version": "1.1.0", 99 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", 100 | "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", 101 | "dev": true 102 | }, 103 | "balanced-match": { 104 | "version": "1.0.0", 105 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 106 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 107 | "dev": true 108 | }, 109 | "binary-extensions": { 110 | "version": "2.0.0", 111 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", 112 | "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", 113 | "dev": true 114 | }, 115 | "brace-expansion": { 116 | "version": "1.1.11", 117 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 118 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 119 | "dev": true, 120 | "requires": { 121 | "balanced-match": "^1.0.0", 122 | "concat-map": "0.0.1" 123 | } 124 | }, 125 | "braces": { 126 | "version": "3.0.2", 127 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 128 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 129 | "dev": true, 130 | "requires": { 131 | "fill-range": "^7.0.1" 132 | } 133 | }, 134 | "browser-stdout": { 135 | "version": "1.3.1", 136 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 137 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 138 | "dev": true 139 | }, 140 | "cacheable-lookup": { 141 | "version": "2.0.1", 142 | "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-2.0.1.tgz", 143 | "integrity": "sha512-EMMbsiOTcdngM/K6gV/OxF2x0t07+vMOWxZNSCRQMjO2MY2nhZQ6OYhOOpyQrbhqsgtvKGI7hcq6xjnA92USjg==", 144 | "requires": { 145 | "@types/keyv": "^3.1.1", 146 | "keyv": "^4.0.0" 147 | } 148 | }, 149 | "cacheable-request": { 150 | "version": "7.0.1", 151 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz", 152 | "integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==", 153 | "requires": { 154 | "clone-response": "^1.0.2", 155 | "get-stream": "^5.1.0", 156 | "http-cache-semantics": "^4.0.0", 157 | "keyv": "^4.0.0", 158 | "lowercase-keys": "^2.0.0", 159 | "normalize-url": "^4.1.0", 160 | "responselike": "^2.0.0" 161 | } 162 | }, 163 | "camelcase": { 164 | "version": "5.3.1", 165 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 166 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 167 | "dev": true 168 | }, 169 | "chai": { 170 | "version": "3.5.0", 171 | "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", 172 | "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", 173 | "dev": true, 174 | "requires": { 175 | "assertion-error": "^1.0.1", 176 | "deep-eql": "^0.1.3", 177 | "type-detect": "^1.0.0" 178 | } 179 | }, 180 | "chai-things": { 181 | "version": "0.2.0", 182 | "resolved": "https://registry.npmjs.org/chai-things/-/chai-things-0.2.0.tgz", 183 | "integrity": "sha1-xVEoN4+bs5nplPAAUhUZhO1uvnA=", 184 | "dev": true 185 | }, 186 | "chalk": { 187 | "version": "2.4.2", 188 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 189 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 190 | "dev": true, 191 | "requires": { 192 | "ansi-styles": "^3.2.1", 193 | "escape-string-regexp": "^1.0.5", 194 | "supports-color": "^5.3.0" 195 | }, 196 | "dependencies": { 197 | "supports-color": { 198 | "version": "5.5.0", 199 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 200 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 201 | "dev": true, 202 | "requires": { 203 | "has-flag": "^3.0.0" 204 | } 205 | } 206 | } 207 | }, 208 | "chokidar": { 209 | "version": "3.3.0", 210 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", 211 | "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", 212 | "dev": true, 213 | "requires": { 214 | "anymatch": "~3.1.1", 215 | "braces": "~3.0.2", 216 | "fsevents": "~2.1.1", 217 | "glob-parent": "~5.1.0", 218 | "is-binary-path": "~2.1.0", 219 | "is-glob": "~4.0.1", 220 | "normalize-path": "~3.0.0", 221 | "readdirp": "~3.2.0" 222 | } 223 | }, 224 | "cliui": { 225 | "version": "5.0.0", 226 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", 227 | "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", 228 | "dev": true, 229 | "requires": { 230 | "string-width": "^3.1.0", 231 | "strip-ansi": "^5.2.0", 232 | "wrap-ansi": "^5.1.0" 233 | }, 234 | "dependencies": { 235 | "ansi-regex": { 236 | "version": "4.1.1", 237 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", 238 | "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", 239 | "dev": true 240 | }, 241 | "string-width": { 242 | "version": "3.1.0", 243 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 244 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 245 | "dev": true, 246 | "requires": { 247 | "emoji-regex": "^7.0.1", 248 | "is-fullwidth-code-point": "^2.0.0", 249 | "strip-ansi": "^5.1.0" 250 | } 251 | }, 252 | "strip-ansi": { 253 | "version": "5.2.0", 254 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 255 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 256 | "dev": true, 257 | "requires": { 258 | "ansi-regex": "^4.1.0" 259 | } 260 | } 261 | } 262 | }, 263 | "clone-response": { 264 | "version": "1.0.2", 265 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", 266 | "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", 267 | "requires": { 268 | "mimic-response": "^1.0.0" 269 | }, 270 | "dependencies": { 271 | "mimic-response": { 272 | "version": "1.0.1", 273 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 274 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" 275 | } 276 | } 277 | }, 278 | "color-convert": { 279 | "version": "1.9.3", 280 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 281 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 282 | "dev": true, 283 | "requires": { 284 | "color-name": "1.1.3" 285 | } 286 | }, 287 | "color-name": { 288 | "version": "1.1.3", 289 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 290 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 291 | "dev": true 292 | }, 293 | "concat-map": { 294 | "version": "0.0.1", 295 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 296 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 297 | "dev": true 298 | }, 299 | "debug": { 300 | "version": "3.2.6", 301 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", 302 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", 303 | "dev": true, 304 | "requires": { 305 | "ms": "^2.1.1" 306 | } 307 | }, 308 | "decamelize": { 309 | "version": "1.2.0", 310 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 311 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", 312 | "dev": true 313 | }, 314 | "decompress-response": { 315 | "version": "5.0.0", 316 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-5.0.0.tgz", 317 | "integrity": "sha512-TLZWWybuxWgoW7Lykv+gq9xvzOsUjQ9tF09Tj6NSTYGMTCHNXzrPnD6Hi+TgZq19PyTAGH4Ll/NIM/eTGglnMw==", 318 | "requires": { 319 | "mimic-response": "^2.0.0" 320 | } 321 | }, 322 | "deep-eql": { 323 | "version": "0.1.3", 324 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", 325 | "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", 326 | "dev": true, 327 | "requires": { 328 | "type-detect": "0.1.1" 329 | }, 330 | "dependencies": { 331 | "type-detect": { 332 | "version": "0.1.1", 333 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", 334 | "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", 335 | "dev": true 336 | } 337 | } 338 | }, 339 | "defer-to-connect": { 340 | "version": "2.0.0", 341 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.0.tgz", 342 | "integrity": "sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg==" 343 | }, 344 | "define-properties": { 345 | "version": "1.1.3", 346 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 347 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 348 | "dev": true, 349 | "requires": { 350 | "object-keys": "^1.0.12" 351 | } 352 | }, 353 | "diff": { 354 | "version": "3.5.0", 355 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", 356 | "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", 357 | "dev": true 358 | }, 359 | "duplexer3": { 360 | "version": "0.1.4", 361 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", 362 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" 363 | }, 364 | "emoji-regex": { 365 | "version": "7.0.3", 366 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 367 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 368 | "dev": true 369 | }, 370 | "end-of-stream": { 371 | "version": "1.4.4", 372 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 373 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 374 | "requires": { 375 | "once": "^1.4.0" 376 | } 377 | }, 378 | "es-abstract": { 379 | "version": "1.17.5", 380 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", 381 | "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", 382 | "dev": true, 383 | "requires": { 384 | "es-to-primitive": "^1.2.1", 385 | "function-bind": "^1.1.1", 386 | "has": "^1.0.3", 387 | "has-symbols": "^1.0.1", 388 | "is-callable": "^1.1.5", 389 | "is-regex": "^1.0.5", 390 | "object-inspect": "^1.7.0", 391 | "object-keys": "^1.1.1", 392 | "object.assign": "^4.1.0", 393 | "string.prototype.trimleft": "^2.1.1", 394 | "string.prototype.trimright": "^2.1.1" 395 | } 396 | }, 397 | "es-to-primitive": { 398 | "version": "1.2.1", 399 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 400 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 401 | "dev": true, 402 | "requires": { 403 | "is-callable": "^1.1.4", 404 | "is-date-object": "^1.0.1", 405 | "is-symbol": "^1.0.2" 406 | } 407 | }, 408 | "escape-string-regexp": { 409 | "version": "1.0.5", 410 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 411 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 412 | "dev": true 413 | }, 414 | "esprima": { 415 | "version": "4.0.1", 416 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 417 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 418 | "dev": true 419 | }, 420 | "fill-range": { 421 | "version": "7.0.1", 422 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 423 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 424 | "dev": true, 425 | "requires": { 426 | "to-regex-range": "^5.0.1" 427 | } 428 | }, 429 | "find-up": { 430 | "version": "3.0.0", 431 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", 432 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", 433 | "dev": true, 434 | "requires": { 435 | "locate-path": "^3.0.0" 436 | } 437 | }, 438 | "flat": { 439 | "version": "4.1.0", 440 | "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", 441 | "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", 442 | "dev": true, 443 | "requires": { 444 | "is-buffer": "~2.0.3" 445 | } 446 | }, 447 | "fs.realpath": { 448 | "version": "1.0.0", 449 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 450 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 451 | "dev": true 452 | }, 453 | "fsevents": { 454 | "version": "2.1.2", 455 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", 456 | "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", 457 | "dev": true, 458 | "optional": true 459 | }, 460 | "function-bind": { 461 | "version": "1.1.1", 462 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 463 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 464 | "dev": true 465 | }, 466 | "get-caller-file": { 467 | "version": "2.0.5", 468 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 469 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 470 | "dev": true 471 | }, 472 | "get-stream": { 473 | "version": "5.1.0", 474 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", 475 | "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", 476 | "requires": { 477 | "pump": "^3.0.0" 478 | } 479 | }, 480 | "glob": { 481 | "version": "7.1.3", 482 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", 483 | "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", 484 | "dev": true, 485 | "requires": { 486 | "fs.realpath": "^1.0.0", 487 | "inflight": "^1.0.4", 488 | "inherits": "2", 489 | "minimatch": "^3.0.4", 490 | "once": "^1.3.0", 491 | "path-is-absolute": "^1.0.0" 492 | } 493 | }, 494 | "glob-parent": { 495 | "version": "5.1.2", 496 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 497 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 498 | "dev": true, 499 | "requires": { 500 | "is-glob": "^4.0.1" 501 | } 502 | }, 503 | "got": { 504 | "version": "10.7.0", 505 | "resolved": "https://registry.npmjs.org/got/-/got-10.7.0.tgz", 506 | "integrity": "sha512-aWTDeNw9g+XqEZNcTjMMZSy7B7yE9toWOFYip7ofFTLleJhvZwUxxTxkTpKvF+p1SAA4VHmuEy7PiHTHyq8tJg==", 507 | "requires": { 508 | "@sindresorhus/is": "^2.0.0", 509 | "@szmarczak/http-timer": "^4.0.0", 510 | "@types/cacheable-request": "^6.0.1", 511 | "cacheable-lookup": "^2.0.0", 512 | "cacheable-request": "^7.0.1", 513 | "decompress-response": "^5.0.0", 514 | "duplexer3": "^0.1.4", 515 | "get-stream": "^5.0.0", 516 | "lowercase-keys": "^2.0.0", 517 | "mimic-response": "^2.1.0", 518 | "p-cancelable": "^2.0.0", 519 | "p-event": "^4.0.0", 520 | "responselike": "^2.0.0", 521 | "to-readable-stream": "^2.0.0", 522 | "type-fest": "^0.10.0" 523 | } 524 | }, 525 | "growl": { 526 | "version": "1.10.5", 527 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", 528 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", 529 | "dev": true 530 | }, 531 | "has": { 532 | "version": "1.0.3", 533 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 534 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 535 | "dev": true, 536 | "requires": { 537 | "function-bind": "^1.1.1" 538 | } 539 | }, 540 | "has-flag": { 541 | "version": "3.0.0", 542 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 543 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 544 | "dev": true 545 | }, 546 | "has-symbols": { 547 | "version": "1.0.1", 548 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", 549 | "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", 550 | "dev": true 551 | }, 552 | "he": { 553 | "version": "1.2.0", 554 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 555 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 556 | "dev": true 557 | }, 558 | "http-cache-semantics": { 559 | "version": "4.1.0", 560 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", 561 | "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" 562 | }, 563 | "inflight": { 564 | "version": "1.0.6", 565 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 566 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 567 | "dev": true, 568 | "requires": { 569 | "once": "^1.3.0", 570 | "wrappy": "1" 571 | } 572 | }, 573 | "inherits": { 574 | "version": "2.0.4", 575 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 576 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 577 | "dev": true 578 | }, 579 | "is-binary-path": { 580 | "version": "2.1.0", 581 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 582 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 583 | "dev": true, 584 | "requires": { 585 | "binary-extensions": "^2.0.0" 586 | } 587 | }, 588 | "is-buffer": { 589 | "version": "2.0.4", 590 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", 591 | "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", 592 | "dev": true 593 | }, 594 | "is-callable": { 595 | "version": "1.1.5", 596 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", 597 | "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", 598 | "dev": true 599 | }, 600 | "is-date-object": { 601 | "version": "1.0.2", 602 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", 603 | "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", 604 | "dev": true 605 | }, 606 | "is-extglob": { 607 | "version": "2.1.1", 608 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 609 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 610 | "dev": true 611 | }, 612 | "is-fullwidth-code-point": { 613 | "version": "2.0.0", 614 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 615 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 616 | "dev": true 617 | }, 618 | "is-glob": { 619 | "version": "4.0.1", 620 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 621 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 622 | "dev": true, 623 | "requires": { 624 | "is-extglob": "^2.1.1" 625 | } 626 | }, 627 | "is-number": { 628 | "version": "7.0.0", 629 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 630 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 631 | "dev": true 632 | }, 633 | "is-regex": { 634 | "version": "1.0.5", 635 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", 636 | "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", 637 | "dev": true, 638 | "requires": { 639 | "has": "^1.0.3" 640 | } 641 | }, 642 | "is-symbol": { 643 | "version": "1.0.3", 644 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", 645 | "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", 646 | "dev": true, 647 | "requires": { 648 | "has-symbols": "^1.0.1" 649 | } 650 | }, 651 | "isexe": { 652 | "version": "2.0.0", 653 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 654 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 655 | "dev": true 656 | }, 657 | "js-yaml": { 658 | "version": "3.13.1", 659 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", 660 | "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", 661 | "dev": true, 662 | "requires": { 663 | "argparse": "^1.0.7", 664 | "esprima": "^4.0.0" 665 | } 666 | }, 667 | "json-buffer": { 668 | "version": "3.0.1", 669 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 670 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" 671 | }, 672 | "keyv": { 673 | "version": "4.0.0", 674 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.0.tgz", 675 | "integrity": "sha512-U7ioE8AimvRVLfw4LffyOIRhL2xVgmE8T22L6i0BucSnBUyv4w+I7VN/zVZwRKHOI6ZRUcdMdWHQ8KSUvGpEog==", 676 | "requires": { 677 | "json-buffer": "3.0.1" 678 | } 679 | }, 680 | "locate-path": { 681 | "version": "3.0.0", 682 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", 683 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", 684 | "dev": true, 685 | "requires": { 686 | "p-locate": "^3.0.0", 687 | "path-exists": "^3.0.0" 688 | } 689 | }, 690 | "lodash": { 691 | "version": "4.17.21", 692 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 693 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 694 | "dev": true 695 | }, 696 | "log-symbols": { 697 | "version": "3.0.0", 698 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", 699 | "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", 700 | "dev": true, 701 | "requires": { 702 | "chalk": "^2.4.2" 703 | } 704 | }, 705 | "lowercase-keys": { 706 | "version": "2.0.0", 707 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", 708 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" 709 | }, 710 | "mimic-response": { 711 | "version": "2.1.0", 712 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", 713 | "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" 714 | }, 715 | "minimatch": { 716 | "version": "3.0.4", 717 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 718 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 719 | "dev": true, 720 | "requires": { 721 | "brace-expansion": "^1.1.7" 722 | } 723 | }, 724 | "minimist": { 725 | "version": "1.2.6", 726 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", 727 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", 728 | "dev": true 729 | }, 730 | "mkdirp": { 731 | "version": "0.5.3", 732 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.3.tgz", 733 | "integrity": "sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==", 734 | "dev": true, 735 | "requires": { 736 | "minimist": "^1.2.5" 737 | } 738 | }, 739 | "mocha": { 740 | "version": "7.1.1", 741 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.1.1.tgz", 742 | "integrity": "sha512-3qQsu3ijNS3GkWcccT5Zw0hf/rWvu1fTN9sPvEd81hlwsr30GX2GcDSSoBxo24IR8FelmrAydGC6/1J5QQP4WA==", 743 | "dev": true, 744 | "requires": { 745 | "ansi-colors": "3.2.3", 746 | "browser-stdout": "1.3.1", 747 | "chokidar": "3.3.0", 748 | "debug": "3.2.6", 749 | "diff": "3.5.0", 750 | "escape-string-regexp": "1.0.5", 751 | "find-up": "3.0.0", 752 | "glob": "7.1.3", 753 | "growl": "1.10.5", 754 | "he": "1.2.0", 755 | "js-yaml": "3.13.1", 756 | "log-symbols": "3.0.0", 757 | "minimatch": "3.0.4", 758 | "mkdirp": "0.5.3", 759 | "ms": "2.1.1", 760 | "node-environment-flags": "1.0.6", 761 | "object.assign": "4.1.0", 762 | "strip-json-comments": "2.0.1", 763 | "supports-color": "6.0.0", 764 | "which": "1.3.1", 765 | "wide-align": "1.1.3", 766 | "yargs": "13.3.2", 767 | "yargs-parser": "13.1.2", 768 | "yargs-unparser": "1.6.0" 769 | } 770 | }, 771 | "moment": { 772 | "version": "2.29.2", 773 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.2.tgz", 774 | "integrity": "sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg==", 775 | "dev": true 776 | }, 777 | "ms": { 778 | "version": "2.1.1", 779 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 780 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", 781 | "dev": true 782 | }, 783 | "node-environment-flags": { 784 | "version": "1.0.6", 785 | "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", 786 | "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", 787 | "dev": true, 788 | "requires": { 789 | "object.getownpropertydescriptors": "^2.0.3", 790 | "semver": "^5.7.0" 791 | } 792 | }, 793 | "normalize-path": { 794 | "version": "3.0.0", 795 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 796 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 797 | "dev": true 798 | }, 799 | "normalize-url": { 800 | "version": "4.5.1", 801 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", 802 | "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" 803 | }, 804 | "object-inspect": { 805 | "version": "1.7.0", 806 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", 807 | "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", 808 | "dev": true 809 | }, 810 | "object-keys": { 811 | "version": "1.1.1", 812 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 813 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 814 | "dev": true 815 | }, 816 | "object.assign": { 817 | "version": "4.1.0", 818 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", 819 | "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", 820 | "dev": true, 821 | "requires": { 822 | "define-properties": "^1.1.2", 823 | "function-bind": "^1.1.1", 824 | "has-symbols": "^1.0.0", 825 | "object-keys": "^1.0.11" 826 | } 827 | }, 828 | "object.getownpropertydescriptors": { 829 | "version": "2.1.0", 830 | "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", 831 | "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", 832 | "dev": true, 833 | "requires": { 834 | "define-properties": "^1.1.3", 835 | "es-abstract": "^1.17.0-next.1" 836 | } 837 | }, 838 | "once": { 839 | "version": "1.4.0", 840 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 841 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 842 | "requires": { 843 | "wrappy": "1" 844 | } 845 | }, 846 | "p-cancelable": { 847 | "version": "2.0.0", 848 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz", 849 | "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==" 850 | }, 851 | "p-event": { 852 | "version": "4.1.0", 853 | "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.1.0.tgz", 854 | "integrity": "sha512-4vAd06GCsgflX4wHN1JqrMzBh/8QZ4j+rzp0cd2scXRwuBEv+QR3wrVA5aLhWDLw4y2WgDKvzWF3CCLmVM1UgA==", 855 | "requires": { 856 | "p-timeout": "^2.0.1" 857 | } 858 | }, 859 | "p-finally": { 860 | "version": "1.0.0", 861 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 862 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" 863 | }, 864 | "p-limit": { 865 | "version": "2.3.0", 866 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 867 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 868 | "dev": true, 869 | "requires": { 870 | "p-try": "^2.0.0" 871 | } 872 | }, 873 | "p-locate": { 874 | "version": "3.0.0", 875 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", 876 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", 877 | "dev": true, 878 | "requires": { 879 | "p-limit": "^2.0.0" 880 | } 881 | }, 882 | "p-timeout": { 883 | "version": "2.0.1", 884 | "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", 885 | "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", 886 | "requires": { 887 | "p-finally": "^1.0.0" 888 | } 889 | }, 890 | "p-try": { 891 | "version": "2.2.0", 892 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 893 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 894 | "dev": true 895 | }, 896 | "path-exists": { 897 | "version": "3.0.0", 898 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 899 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", 900 | "dev": true 901 | }, 902 | "path-is-absolute": { 903 | "version": "1.0.1", 904 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 905 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 906 | "dev": true 907 | }, 908 | "picomatch": { 909 | "version": "2.2.2", 910 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", 911 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", 912 | "dev": true 913 | }, 914 | "pump": { 915 | "version": "3.0.0", 916 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 917 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 918 | "requires": { 919 | "end-of-stream": "^1.1.0", 920 | "once": "^1.3.1" 921 | } 922 | }, 923 | "readdirp": { 924 | "version": "3.2.0", 925 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", 926 | "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", 927 | "dev": true, 928 | "requires": { 929 | "picomatch": "^2.0.4" 930 | } 931 | }, 932 | "require-directory": { 933 | "version": "2.1.1", 934 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 935 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 936 | "dev": true 937 | }, 938 | "require-main-filename": { 939 | "version": "2.0.0", 940 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", 941 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", 942 | "dev": true 943 | }, 944 | "responselike": { 945 | "version": "2.0.0", 946 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", 947 | "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", 948 | "requires": { 949 | "lowercase-keys": "^2.0.0" 950 | } 951 | }, 952 | "semver": { 953 | "version": "5.7.1", 954 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 955 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 956 | "dev": true 957 | }, 958 | "set-blocking": { 959 | "version": "2.0.0", 960 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 961 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", 962 | "dev": true 963 | }, 964 | "sprintf-js": { 965 | "version": "1.0.3", 966 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 967 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 968 | "dev": true 969 | }, 970 | "string-width": { 971 | "version": "2.1.1", 972 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 973 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 974 | "dev": true, 975 | "requires": { 976 | "is-fullwidth-code-point": "^2.0.0", 977 | "strip-ansi": "^4.0.0" 978 | } 979 | }, 980 | "string.prototype.trimend": { 981 | "version": "1.0.1", 982 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", 983 | "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", 984 | "dev": true, 985 | "requires": { 986 | "define-properties": "^1.1.3", 987 | "es-abstract": "^1.17.5" 988 | } 989 | }, 990 | "string.prototype.trimleft": { 991 | "version": "2.1.2", 992 | "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", 993 | "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", 994 | "dev": true, 995 | "requires": { 996 | "define-properties": "^1.1.3", 997 | "es-abstract": "^1.17.5", 998 | "string.prototype.trimstart": "^1.0.0" 999 | } 1000 | }, 1001 | "string.prototype.trimright": { 1002 | "version": "2.1.2", 1003 | "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", 1004 | "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", 1005 | "dev": true, 1006 | "requires": { 1007 | "define-properties": "^1.1.3", 1008 | "es-abstract": "^1.17.5", 1009 | "string.prototype.trimend": "^1.0.0" 1010 | } 1011 | }, 1012 | "string.prototype.trimstart": { 1013 | "version": "1.0.1", 1014 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", 1015 | "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", 1016 | "dev": true, 1017 | "requires": { 1018 | "define-properties": "^1.1.3", 1019 | "es-abstract": "^1.17.5" 1020 | } 1021 | }, 1022 | "strip-ansi": { 1023 | "version": "4.0.0", 1024 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 1025 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 1026 | "dev": true, 1027 | "requires": { 1028 | "ansi-regex": "^3.0.0" 1029 | } 1030 | }, 1031 | "strip-json-comments": { 1032 | "version": "2.0.1", 1033 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 1034 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 1035 | "dev": true 1036 | }, 1037 | "supports-color": { 1038 | "version": "6.0.0", 1039 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", 1040 | "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", 1041 | "dev": true, 1042 | "requires": { 1043 | "has-flag": "^3.0.0" 1044 | } 1045 | }, 1046 | "to-readable-stream": { 1047 | "version": "2.1.0", 1048 | "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-2.1.0.tgz", 1049 | "integrity": "sha512-o3Qa6DGg1CEXshSdvWNX2sN4QHqg03SPq7U6jPXRahlQdl5dK8oXjkU/2/sGrnOZKeGV1zLSO8qPwyKklPPE7w==" 1050 | }, 1051 | "to-regex-range": { 1052 | "version": "5.0.1", 1053 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1054 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1055 | "dev": true, 1056 | "requires": { 1057 | "is-number": "^7.0.0" 1058 | } 1059 | }, 1060 | "type-detect": { 1061 | "version": "1.0.0", 1062 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", 1063 | "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=", 1064 | "dev": true 1065 | }, 1066 | "type-fest": { 1067 | "version": "0.10.0", 1068 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.10.0.tgz", 1069 | "integrity": "sha512-EUV9jo4sffrwlg8s0zDhP0T2WD3pru5Xi0+HTE3zTUmBaZNhfkite9PdSJwdXLwPVW0jnAHT56pZHIOYckPEiw==" 1070 | }, 1071 | "underscore": { 1072 | "version": "1.12.1", 1073 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", 1074 | "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==", 1075 | "dev": true 1076 | }, 1077 | "which": { 1078 | "version": "1.3.1", 1079 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 1080 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 1081 | "dev": true, 1082 | "requires": { 1083 | "isexe": "^2.0.0" 1084 | } 1085 | }, 1086 | "which-module": { 1087 | "version": "2.0.0", 1088 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", 1089 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", 1090 | "dev": true 1091 | }, 1092 | "wide-align": { 1093 | "version": "1.1.3", 1094 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", 1095 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", 1096 | "dev": true, 1097 | "requires": { 1098 | "string-width": "^1.0.2 || 2" 1099 | } 1100 | }, 1101 | "wrap-ansi": { 1102 | "version": "5.1.0", 1103 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", 1104 | "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", 1105 | "dev": true, 1106 | "requires": { 1107 | "ansi-styles": "^3.2.0", 1108 | "string-width": "^3.0.0", 1109 | "strip-ansi": "^5.0.0" 1110 | }, 1111 | "dependencies": { 1112 | "ansi-regex": { 1113 | "version": "4.1.1", 1114 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", 1115 | "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", 1116 | "dev": true 1117 | }, 1118 | "string-width": { 1119 | "version": "3.1.0", 1120 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 1121 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 1122 | "dev": true, 1123 | "requires": { 1124 | "emoji-regex": "^7.0.1", 1125 | "is-fullwidth-code-point": "^2.0.0", 1126 | "strip-ansi": "^5.1.0" 1127 | } 1128 | }, 1129 | "strip-ansi": { 1130 | "version": "5.2.0", 1131 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 1132 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 1133 | "dev": true, 1134 | "requires": { 1135 | "ansi-regex": "^4.1.0" 1136 | } 1137 | } 1138 | } 1139 | }, 1140 | "wrappy": { 1141 | "version": "1.0.2", 1142 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1143 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 1144 | }, 1145 | "y18n": { 1146 | "version": "4.0.1", 1147 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", 1148 | "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", 1149 | "dev": true 1150 | }, 1151 | "yargs": { 1152 | "version": "13.3.2", 1153 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", 1154 | "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", 1155 | "dev": true, 1156 | "requires": { 1157 | "cliui": "^5.0.0", 1158 | "find-up": "^3.0.0", 1159 | "get-caller-file": "^2.0.1", 1160 | "require-directory": "^2.1.1", 1161 | "require-main-filename": "^2.0.0", 1162 | "set-blocking": "^2.0.0", 1163 | "string-width": "^3.0.0", 1164 | "which-module": "^2.0.0", 1165 | "y18n": "^4.0.0", 1166 | "yargs-parser": "^13.1.2" 1167 | }, 1168 | "dependencies": { 1169 | "ansi-regex": { 1170 | "version": "4.1.1", 1171 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", 1172 | "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", 1173 | "dev": true 1174 | }, 1175 | "string-width": { 1176 | "version": "3.1.0", 1177 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 1178 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 1179 | "dev": true, 1180 | "requires": { 1181 | "emoji-regex": "^7.0.1", 1182 | "is-fullwidth-code-point": "^2.0.0", 1183 | "strip-ansi": "^5.1.0" 1184 | } 1185 | }, 1186 | "strip-ansi": { 1187 | "version": "5.2.0", 1188 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 1189 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 1190 | "dev": true, 1191 | "requires": { 1192 | "ansi-regex": "^4.1.0" 1193 | } 1194 | } 1195 | } 1196 | }, 1197 | "yargs-parser": { 1198 | "version": "13.1.2", 1199 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", 1200 | "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", 1201 | "dev": true, 1202 | "requires": { 1203 | "camelcase": "^5.0.0", 1204 | "decamelize": "^1.2.0" 1205 | } 1206 | }, 1207 | "yargs-unparser": { 1208 | "version": "1.6.0", 1209 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", 1210 | "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", 1211 | "dev": true, 1212 | "requires": { 1213 | "flat": "^4.1.0", 1214 | "lodash": "^4.17.15", 1215 | "yargs": "^13.3.0" 1216 | } 1217 | } 1218 | } 1219 | } 1220 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pinjs", 3 | "author": "Thomas Davis (https://martinwheeler.com.au/)" 6 | ], 7 | "description": "Api client for pinpayments.com - Australia's payment gateway", 8 | "scripts": { 9 | "test": "mocha -R list -t 5000" 10 | }, 11 | "main": "./lib/pin", 12 | "version": "1.1.4", 13 | "dependencies": { 14 | "got": "^10.7.0" 15 | }, 16 | "devDependencies": { 17 | "chai": "^3.5.0", 18 | "chai-things": "^0.2.0", 19 | "mocha": "^7.1.1", 20 | "moment": "^2.13.0", 21 | "underscore": "~1.12.1" 22 | }, 23 | "keywords": [ 24 | "payment", 25 | "transactions" 26 | ], 27 | "license": "bsd", 28 | "engines": { 29 | "node": ">=10.13.0" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /test/test.js: -------------------------------------------------------------------------------- 1 | var Pin = require('../'); 2 | var _ = require('underscore'); 3 | var chai = require('chai'); 4 | var expect = chai.expect; 5 | var moment = require('moment'); 6 | chai.use(require('chai-things')); 7 | 8 | var key = 'lLlpdn5KOO-vusSMnBYq_A'; 9 | var pin = Pin.setup({ 10 | key: key, 11 | production: false 12 | }); 13 | 14 | var nextYear = moment().add(1, "year").format("YYYY"); 15 | 16 | var testChargeToken, testCustomerToken, testCardToken, testRecipient, testTransfer; 17 | var nonCapturedCharge; 18 | 19 | if(key.length > 0) { 20 | 21 | describe('Create a card', function () { 22 | it('should return successfully', function (done) { 23 | pin.createCard({ 24 | number: 5520000000000000, 25 | expiry_month: '05', 26 | expiry_year: nextYear, 27 | cvc: 519, 28 | name: 'Roland Robot', 29 | address_line1: '42 Sevenoaks St', 30 | address_city: 'Lathlain', 31 | address_postcode: 6454, 32 | address_state: 'WA', 33 | address_country: 'AU' 34 | }, function (err,res,body) { 35 | if (err) { 36 | console.error(err, res, body); 37 | throw err 38 | }; 39 | testCardToken = body.response.token; 40 | done(); 41 | }); 42 | 43 | }); 44 | }); 45 | 46 | describe('Create a charge', function () { 47 | it('should return successfully', function (done) { 48 | pin.createCharge({ 49 | amount: 400, 50 | description: 'test charge', 51 | email: 'roland@pinpayments.com', 52 | ip_address: '203.192.1.172', 53 | card: { 54 | number: 5520000000000000, 55 | expiry_month: '05', 56 | expiry_year: nextYear, 57 | cvc: 123, 58 | name: 'Roland Robot', 59 | address_line1: '42 Sevenoaks St', 60 | address_city: 'Lathlain', 61 | address_postcode: 6454, 62 | address_state: 'WA', 63 | address_country: 'AU' 64 | } 65 | }, function (err,res,body) { 66 | if (err) { 67 | console.error(err, res, body); 68 | throw err 69 | }; 70 | testChargeToken = body.response.token; 71 | done(); 72 | }); 73 | }); 74 | }); 75 | 76 | describe('Create a charge and not capture', function () { 77 | it('should return successfully', function (done) { 78 | pin.createCharge({ 79 | amount: 400, 80 | currency: "AUD", 81 | description: 'test charge', 82 | email: 'roland@pinpayments.com', 83 | ip_address: '203.192.1.172', 84 | capture: false, 85 | card: { 86 | number: 5520000000000000, 87 | expiry_month: '05', 88 | expiry_year: nextYear, 89 | cvc: 123, 90 | name: 'Roland Robot', 91 | address_line1: '42 Sevenoaks St', 92 | address_line2: "", 93 | address_city: 'Lathlain', 94 | address_postcode: 6454, 95 | address_state: 'WA', 96 | address_country: 'Australia' 97 | } 98 | }, function (err,res,body) { 99 | if (err) { 100 | console.error(err, res, body); 101 | throw err 102 | }; 103 | nonCapturedCharge = body.response.token; 104 | done(); 105 | }); 106 | }); 107 | }); 108 | 109 | describe('Create a customer', function () { 110 | it('should return successfully', function (done) { 111 | pin.createCustomer({ 112 | email: 'roland@pinpayments.com', 113 | card: { 114 | number: 5520000000000000, 115 | expiry_month: '05', 116 | expiry_year: nextYear, 117 | cvc: 123, 118 | name: 'Roland Robot', 119 | address_line1: '42 Sevenoaks St', 120 | address_city: 'Lathlain', 121 | address_postcode: 6454, 122 | address_state: 'WA', 123 | address_country: 'AU' 124 | } 125 | }, function (err,res,body) { 126 | if (err) { 127 | console.error(err, res, body); 128 | throw err 129 | }; 130 | testCustomerToken = body.response.token; 131 | done(); 132 | }) 133 | }); 134 | }); 135 | 136 | describe('Retrieve a customer', function () { 137 | it('should return successfully', function (done) { 138 | pin.retrieveCustomer(testCustomerToken, function (err,res,body) { 139 | if (err) { throw err } 140 | done(); 141 | }); 142 | }); 143 | }); 144 | 145 | describe('Retrieve customer cards', function () { 146 | it('should return successfully', function (done) { 147 | pin.retrieveCustomerCards(testCustomerToken, function(err, res, body) { 148 | if (err) { 149 | console.log(err); 150 | throw err 151 | } 152 | expect(res.statusCode).to.eq(200); 153 | expect(res.headers['content-type']).to.equal('application/json; charset=utf-8'); 154 | expect(body.response[0].token).to.match(/card_(\w+)/); 155 | expect(body.response[0].scheme).to.match(/master|visa/); 156 | expect(body.response[0].customer_token).to.match(/cus_(\w+)/); 157 | done(); 158 | }); 159 | }); 160 | }); 161 | 162 | describe('Add a customer card', function () { 163 | it('should return successfully', function (done) { 164 | var otherCard = { 165 | number: 372000000000000, 166 | expiry_month: '11', 167 | expiry_year: nextYear, 168 | cvc: 1234, 169 | name: 'Roland Robot', 170 | address_line1: '42 Sevenoaks St', 171 | address_city: 'Lathlain', 172 | address_postcode: 6454, 173 | address_state: 'WA', 174 | address_country: 'AU' 175 | }; 176 | pin.createCustomerCard(testCustomerToken, otherCard, function (err,res,body) { 177 | if (err) { throw err }; 178 | expect(res.statusCode).to.equal(201); // Created 179 | expect(body.response.customer_token).to.equal(testCustomerToken); 180 | done(); 181 | }); 182 | }); 183 | }); 184 | 185 | describe('Refund a charge', function () { 186 | it('should return successfully', function (done) { 187 | pin.refundCharge(testChargeToken, { 188 | amount: 400 189 | }, function (err,res,body) { 190 | if (err) { throw err }; 191 | done(); 192 | }); 193 | }); 194 | }); 195 | 196 | describe('Retrieve a charge', function () { 197 | it('should return successfully', function (done) { 198 | pin.retrieveCharge(testChargeToken, function (err,res) { 199 | if (err) { throw err }; 200 | done(); 201 | }); 202 | }); 203 | }); 204 | 205 | describe('Create a charge using a card token', function () { 206 | it('should return successfully', function (done) { 207 | pin.createCharge({ 208 | amount: 400, 209 | description: 'test charge', 210 | email: 'roland@pinpayments.com', 211 | ip_address: '203.192.1.172', 212 | card_token: testCardToken 213 | }, function (err,res) { 214 | if (err) { throw err }; 215 | done(); 216 | }); 217 | }); 218 | }); 219 | 220 | describe('Create a charge using a customer token', function () { 221 | it('should return successfully', function (done) { 222 | pin.createCharge({ 223 | amount: 400, 224 | description: 'test charge', 225 | email: 'roland@pinpayments.com', 226 | ip_address: '203.192.1.172', 227 | customer_token: testCustomerToken 228 | }, function (err,res) { 229 | if (err) { throw err }; 230 | done(); 231 | }); 232 | }); 233 | }); 234 | 235 | describe('Create a customer using a card token', function () { 236 | it('should return successfully', function (done) { 237 | pin.createCard({ 238 | number: 5520000000000000, 239 | expiry_month: '05', 240 | expiry_year: nextYear, 241 | cvc: 519, 242 | name: 'Roland Robot', 243 | address_line1: '42 Sevenoaks St', 244 | address_city: 'Lathlain', 245 | address_postcode: 6454, 246 | address_state: 'WA', 247 | address_country: 'AU' 248 | }, function (err,res,body) { 249 | testCardToken = body.response.token; 250 | pin.createCustomer({ 251 | email: 'roland@pinpayments.com', 252 | card_token: testCardToken 253 | }, function (err,res) { 254 | if (err) { throw err }; 255 | done(); 256 | }); 257 | }); 258 | 259 | }); 260 | }); 261 | 262 | describe('Create recipient', function(){ 263 | it('should return successfully', function(done){ 264 | testRecipient = { 265 | email : 'dino@thefat.com', 266 | name : 'Fat Dinosaur', 267 | bank_account : { 268 | "name": "Mr Fat Dinosaur", 269 | "bsb": "342088", 270 | "number": "987654321" 271 | } 272 | } 273 | pin.createRecipient(testRecipient,function(err,res,body){ 274 | if(err) {throw err}; 275 | testRecipient = body.response; 276 | done(); 277 | }); 278 | }); 279 | }); 280 | 281 | describe('Create recipient with incorrect BSB', function() { 282 | it('should return a validation error', function(done) { 283 | recipientWrongBsb = { 284 | email : 'dino@thefat.com', 285 | name : 'Fat Dinosaur', 286 | bank_account : { 287 | "name": "Mr Fat Dinosaur", 288 | "bsb": "123456", 289 | "number": "987654321" 290 | } 291 | } 292 | pin.createRecipient(recipientWrongBsb, function(err, res, body) { 293 | if (err) { 294 | expect(res.statusCode).to.equal(422); 295 | expect(body.error).to.equal('invalid_resource'); 296 | expect(body.error_description).to.equal('One or more parameters were missing or invalid'); 297 | expect(body.messages[0].param).to.equal('bank_account'); 298 | expect(body.messages[0].code).to.equal('bank_account_invalid'); 299 | expect(body.messages[0].message).to.equal('Bank account is invalid'); 300 | done(); 301 | } else { 302 | throw 'Expecting an error'; 303 | }; 304 | }); 305 | }); 306 | }); 307 | 308 | describe('Get recipient data', function(){ 309 | it('should return successfully',function(done){ 310 | pin.getRecipientData(testRecipient.token, function(err,res,body){ 311 | if(err) {throw err}; 312 | if(JSON.stringify(body.response) !== JSON.stringify(testRecipient)) {throw new Error('get recipient data failed')} 313 | done(); 314 | }); 315 | }) 316 | }); 317 | 318 | describe('Get recipients list', function(){ 319 | it('should return successfully', function(done){ 320 | pin.getRecipientsList(function(err,res){ 321 | if(err) { throw err } 322 | done(); 323 | }); 324 | }); 325 | }); 326 | 327 | describe('Get recipient transfers', function(){ 328 | it('should return successfully', function(done){ 329 | pin.getRecipientTransfers(testRecipient.token, function(err,res){ 330 | if(err) {throw err}; 331 | done(); 332 | }); 333 | }); 334 | }); 335 | 336 | describe('Update recipient data', function(){ 337 | it('should update email', function(done){ 338 | pin.updateRecipientData(testRecipient.token,{email : 'test@test.com'},function(err,res,body){ 339 | if(err) {throw err}; 340 | expect(body.response.email).to.equal('test@test.com'); 341 | done(); 342 | }); 343 | }); 344 | it('should update recipient name', function(done){ 345 | pin.updateRecipientData(testRecipient.token,{name : 'slim pterodactyl'},function(err,res,body){ 346 | if(err) {throw err}; 347 | expect(body.response.name).to.equal('slim pterodactyl'); 348 | done(); 349 | }); 350 | }); 351 | it('should update recipient bank account', function(done){ 352 | var bankUpdate = {"name": "Mr Roland Robot","bsb": "342088","number": "987654321"}; 353 | pin.updateRecipientData(testRecipient.token,{bank_account: bankUpdate},function(err,res,body){ 354 | if(err) {throw err }; 355 | expect(body.response.bank_account.name).to.equal(bankUpdate.name); 356 | expect(body.response.bank_account.bsb).to.equal(bankUpdate.bsb); 357 | done(); 358 | }); 359 | }); 360 | }); 361 | 362 | describe('Create transfer', function(){ 363 | it('should return successfully', function(done){ 364 | pin.createTransfer({ 365 | description : "test transfer", 366 | amount : 10, 367 | currency : "AUD", 368 | recipient : testRecipient.token 369 | },function(err,res,body){ 370 | if(err) {throw err}; 371 | testTransfer = body.response; 372 | done(); 373 | }); 374 | }); 375 | }); 376 | 377 | describe('Get all transfers', function(){ 378 | it('should return array of transfers', function(done){ 379 | pin.getTransfersList(function(err,res){ 380 | if(err) {throw err}; 381 | done(); 382 | }); 383 | }); 384 | }); 385 | 386 | describe('Get transfer details', function(){ 387 | it('should return successfully', function(done){ 388 | pin.getTransferDetails(testTransfer.token,function(err,res){ 389 | if(err) {throw err}; 390 | done(); 391 | }); 392 | }); 393 | }); 394 | 395 | describe('Get transfer line items', function(){ 396 | it('should return successfully', function(done){ 397 | pin.getTransferLineItems(testTransfer.token, function(err,res){ 398 | if(err) {throw err}; 399 | done(); 400 | }); 401 | }); 402 | }); 403 | 404 | describe('Capture a charge', function () { 405 | it('should capture a non captured charge', function (done) { 406 | pin.captureCharge(nonCapturedCharge, function (err, res) { 407 | if(err) {throw err}; 408 | done(); 409 | }) 410 | }) 411 | }) 412 | 413 | } else{ 414 | describe('You will need a valid api key to run tests', function () { 415 | it('should return successfully', function () { 416 | return true; 417 | }); 418 | }); 419 | } 420 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@sindresorhus/is@^2.0.0": 6 | version "2.1.1" 7 | resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-2.1.1.tgz#ceff6a28a5b4867c2dd4a1ba513de278ccbe8bb1" 8 | 9 | "@szmarczak/http-timer@^4.0.0": 10 | version "4.0.5" 11 | resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.5.tgz#bfbd50211e9dfa51ba07da58a14cdfd333205152" 12 | dependencies: 13 | defer-to-connect "^2.0.0" 14 | 15 | "@types/cacheable-request@^6.0.1": 16 | version "6.0.1" 17 | resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.1.tgz#5d22f3dded1fd3a84c0bbeb5039a7419c2c91976" 18 | dependencies: 19 | "@types/http-cache-semantics" "*" 20 | "@types/keyv" "*" 21 | "@types/node" "*" 22 | "@types/responselike" "*" 23 | 24 | "@types/http-cache-semantics@*": 25 | version "4.0.0" 26 | resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz#9140779736aa2655635ee756e2467d787cfe8a2a" 27 | 28 | "@types/keyv@*", "@types/keyv@^3.1.1": 29 | version "3.1.1" 30 | resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.1.tgz#e45a45324fca9dab716ab1230ee249c9fb52cfa7" 31 | dependencies: 32 | "@types/node" "*" 33 | 34 | "@types/node@*": 35 | version "13.13.4" 36 | resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.4.tgz#1581d6c16e3d4803eb079c87d4ac893ee7501c2c" 37 | 38 | "@types/responselike@*": 39 | version "1.0.0" 40 | resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" 41 | dependencies: 42 | "@types/node" "*" 43 | 44 | ansi-colors@3.2.3: 45 | version "3.2.3" 46 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" 47 | 48 | ansi-regex@^3.0.0: 49 | version "3.0.1" 50 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" 51 | 52 | ansi-regex@^4.1.0: 53 | version "4.1.0" 54 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 55 | 56 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: 57 | version "3.2.1" 58 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 59 | dependencies: 60 | color-convert "^1.9.0" 61 | 62 | anymatch@~3.1.1: 63 | version "3.1.1" 64 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" 65 | dependencies: 66 | normalize-path "^3.0.0" 67 | picomatch "^2.0.4" 68 | 69 | argparse@^1.0.7: 70 | version "1.0.10" 71 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 72 | dependencies: 73 | sprintf-js "~1.0.2" 74 | 75 | assertion-error@^1.0.1: 76 | version "1.0.2" 77 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c" 78 | 79 | balanced-match@^1.0.0: 80 | version "1.0.0" 81 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 82 | 83 | binary-extensions@^2.0.0: 84 | version "2.0.0" 85 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" 86 | 87 | brace-expansion@^1.1.7: 88 | version "1.1.11" 89 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 90 | dependencies: 91 | balanced-match "^1.0.0" 92 | concat-map "0.0.1" 93 | 94 | braces@~3.0.2: 95 | version "3.0.2" 96 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 97 | dependencies: 98 | fill-range "^7.0.1" 99 | 100 | browser-stdout@1.3.1: 101 | version "1.3.1" 102 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 103 | 104 | cacheable-lookup@^2.0.0: 105 | version "2.0.1" 106 | resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-2.0.1.tgz#87be64a18b925234875e10a9bb1ebca4adce6b38" 107 | dependencies: 108 | "@types/keyv" "^3.1.1" 109 | keyv "^4.0.0" 110 | 111 | cacheable-request@^7.0.1: 112 | version "7.0.1" 113 | resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.1.tgz#062031c2856232782ed694a257fa35da93942a58" 114 | dependencies: 115 | clone-response "^1.0.2" 116 | get-stream "^5.1.0" 117 | http-cache-semantics "^4.0.0" 118 | keyv "^4.0.0" 119 | lowercase-keys "^2.0.0" 120 | normalize-url "^4.1.0" 121 | responselike "^2.0.0" 122 | 123 | camelcase@^5.0.0: 124 | version "5.3.1" 125 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 126 | 127 | chai-things@^0.2.0: 128 | version "0.2.0" 129 | resolved "https://registry.yarnpkg.com/chai-things/-/chai-things-0.2.0.tgz#c55128378f9bb399e994f00052151984ed6ebe70" 130 | 131 | chai@^3.5.0: 132 | version "3.5.0" 133 | resolved "https://registry.yarnpkg.com/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247" 134 | dependencies: 135 | assertion-error "^1.0.1" 136 | deep-eql "^0.1.3" 137 | type-detect "^1.0.0" 138 | 139 | chalk@^2.4.2: 140 | version "2.4.2" 141 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 142 | dependencies: 143 | ansi-styles "^3.2.1" 144 | escape-string-regexp "^1.0.5" 145 | supports-color "^5.3.0" 146 | 147 | chokidar@3.3.0: 148 | version "3.3.0" 149 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" 150 | dependencies: 151 | anymatch "~3.1.1" 152 | braces "~3.0.2" 153 | glob-parent "~5.1.0" 154 | is-binary-path "~2.1.0" 155 | is-glob "~4.0.1" 156 | normalize-path "~3.0.0" 157 | readdirp "~3.2.0" 158 | optionalDependencies: 159 | fsevents "~2.1.1" 160 | 161 | cliui@^5.0.0: 162 | version "5.0.0" 163 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" 164 | dependencies: 165 | string-width "^3.1.0" 166 | strip-ansi "^5.2.0" 167 | wrap-ansi "^5.1.0" 168 | 169 | clone-response@^1.0.2: 170 | version "1.0.2" 171 | resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" 172 | dependencies: 173 | mimic-response "^1.0.0" 174 | 175 | color-convert@^1.9.0: 176 | version "1.9.3" 177 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 178 | dependencies: 179 | color-name "1.1.3" 180 | 181 | color-name@1.1.3: 182 | version "1.1.3" 183 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 184 | 185 | concat-map@0.0.1: 186 | version "0.0.1" 187 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 188 | 189 | debug@3.2.6: 190 | version "3.2.6" 191 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" 192 | dependencies: 193 | ms "^2.1.1" 194 | 195 | decamelize@^1.2.0: 196 | version "1.2.0" 197 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 198 | 199 | decompress-response@^5.0.0: 200 | version "5.0.0" 201 | resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-5.0.0.tgz#7849396e80e3d1eba8cb2f75ef4930f76461cb0f" 202 | dependencies: 203 | mimic-response "^2.0.0" 204 | 205 | deep-eql@^0.1.3: 206 | version "0.1.3" 207 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" 208 | dependencies: 209 | type-detect "0.1.1" 210 | 211 | defer-to-connect@^2.0.0: 212 | version "2.0.0" 213 | resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.0.tgz#83d6b199db041593ac84d781b5222308ccf4c2c1" 214 | 215 | define-properties@^1.1.2, define-properties@^1.1.3: 216 | version "1.1.3" 217 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 218 | dependencies: 219 | object-keys "^1.0.12" 220 | 221 | diff@3.5.0: 222 | version "3.5.0" 223 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" 224 | 225 | duplexer3@^0.1.4: 226 | version "0.1.4" 227 | resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" 228 | 229 | emoji-regex@^7.0.1: 230 | version "7.0.3" 231 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 232 | 233 | end-of-stream@^1.1.0: 234 | version "1.4.4" 235 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" 236 | dependencies: 237 | once "^1.4.0" 238 | 239 | es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: 240 | version "1.17.5" 241 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" 242 | dependencies: 243 | es-to-primitive "^1.2.1" 244 | function-bind "^1.1.1" 245 | has "^1.0.3" 246 | has-symbols "^1.0.1" 247 | is-callable "^1.1.5" 248 | is-regex "^1.0.5" 249 | object-inspect "^1.7.0" 250 | object-keys "^1.1.1" 251 | object.assign "^4.1.0" 252 | string.prototype.trimleft "^2.1.1" 253 | string.prototype.trimright "^2.1.1" 254 | 255 | es-to-primitive@^1.2.1: 256 | version "1.2.1" 257 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" 258 | dependencies: 259 | is-callable "^1.1.4" 260 | is-date-object "^1.0.1" 261 | is-symbol "^1.0.2" 262 | 263 | escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: 264 | version "1.0.5" 265 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 266 | 267 | esprima@^4.0.0: 268 | version "4.0.1" 269 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 270 | 271 | fill-range@^7.0.1: 272 | version "7.0.1" 273 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 274 | dependencies: 275 | to-regex-range "^5.0.1" 276 | 277 | find-up@3.0.0, find-up@^3.0.0: 278 | version "3.0.0" 279 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 280 | dependencies: 281 | locate-path "^3.0.0" 282 | 283 | flat@^4.1.0: 284 | version "4.1.0" 285 | resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2" 286 | dependencies: 287 | is-buffer "~2.0.3" 288 | 289 | fs.realpath@^1.0.0: 290 | version "1.0.0" 291 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 292 | 293 | fsevents@~2.1.1: 294 | version "2.1.3" 295 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" 296 | 297 | function-bind@^1.1.1: 298 | version "1.1.1" 299 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 300 | 301 | get-caller-file@^2.0.1: 302 | version "2.0.5" 303 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 304 | 305 | get-stream@^5.0.0, get-stream@^5.1.0: 306 | version "5.1.0" 307 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" 308 | dependencies: 309 | pump "^3.0.0" 310 | 311 | glob-parent@~5.1.0: 312 | version "5.1.2" 313 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 314 | dependencies: 315 | is-glob "^4.0.1" 316 | 317 | glob@7.1.3: 318 | version "7.1.3" 319 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" 320 | dependencies: 321 | fs.realpath "^1.0.0" 322 | inflight "^1.0.4" 323 | inherits "2" 324 | minimatch "^3.0.4" 325 | once "^1.3.0" 326 | path-is-absolute "^1.0.0" 327 | 328 | got@^10.7.0: 329 | version "10.7.0" 330 | resolved "https://registry.yarnpkg.com/got/-/got-10.7.0.tgz#62889dbcd6cca32cd6a154cc2d0c6895121d091f" 331 | dependencies: 332 | "@sindresorhus/is" "^2.0.0" 333 | "@szmarczak/http-timer" "^4.0.0" 334 | "@types/cacheable-request" "^6.0.1" 335 | cacheable-lookup "^2.0.0" 336 | cacheable-request "^7.0.1" 337 | decompress-response "^5.0.0" 338 | duplexer3 "^0.1.4" 339 | get-stream "^5.0.0" 340 | lowercase-keys "^2.0.0" 341 | mimic-response "^2.1.0" 342 | p-cancelable "^2.0.0" 343 | p-event "^4.0.0" 344 | responselike "^2.0.0" 345 | to-readable-stream "^2.0.0" 346 | type-fest "^0.10.0" 347 | 348 | growl@1.10.5: 349 | version "1.10.5" 350 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 351 | 352 | has-flag@^3.0.0: 353 | version "3.0.0" 354 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 355 | 356 | has-symbols@^1.0.0, has-symbols@^1.0.1: 357 | version "1.0.1" 358 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" 359 | 360 | has@^1.0.3: 361 | version "1.0.3" 362 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 363 | dependencies: 364 | function-bind "^1.1.1" 365 | 366 | he@1.2.0: 367 | version "1.2.0" 368 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 369 | 370 | http-cache-semantics@^4.0.0: 371 | version "4.1.0" 372 | resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" 373 | 374 | inflight@^1.0.4: 375 | version "1.0.6" 376 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 377 | dependencies: 378 | once "^1.3.0" 379 | wrappy "1" 380 | 381 | inherits@2: 382 | version "2.0.4" 383 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 384 | 385 | is-binary-path@~2.1.0: 386 | version "2.1.0" 387 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 388 | dependencies: 389 | binary-extensions "^2.0.0" 390 | 391 | is-buffer@~2.0.3: 392 | version "2.0.4" 393 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" 394 | 395 | is-callable@^1.1.4, is-callable@^1.1.5: 396 | version "1.1.5" 397 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" 398 | 399 | is-date-object@^1.0.1: 400 | version "1.0.2" 401 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" 402 | 403 | is-extglob@^2.1.1: 404 | version "2.1.1" 405 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 406 | 407 | is-fullwidth-code-point@^2.0.0: 408 | version "2.0.0" 409 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 410 | 411 | is-glob@^4.0.1, is-glob@~4.0.1: 412 | version "4.0.1" 413 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 414 | dependencies: 415 | is-extglob "^2.1.1" 416 | 417 | is-number@^7.0.0: 418 | version "7.0.0" 419 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 420 | 421 | is-regex@^1.0.5: 422 | version "1.0.5" 423 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" 424 | dependencies: 425 | has "^1.0.3" 426 | 427 | is-symbol@^1.0.2: 428 | version "1.0.3" 429 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" 430 | dependencies: 431 | has-symbols "^1.0.1" 432 | 433 | isexe@^2.0.0: 434 | version "2.0.0" 435 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 436 | 437 | js-yaml@3.13.1: 438 | version "3.13.1" 439 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" 440 | dependencies: 441 | argparse "^1.0.7" 442 | esprima "^4.0.0" 443 | 444 | json-buffer@3.0.1: 445 | version "3.0.1" 446 | resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" 447 | 448 | keyv@^4.0.0: 449 | version "4.0.0" 450 | resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.0.0.tgz#2d1dab694926b2d427e4c74804a10850be44c12f" 451 | dependencies: 452 | json-buffer "3.0.1" 453 | 454 | locate-path@^3.0.0: 455 | version "3.0.0" 456 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" 457 | dependencies: 458 | p-locate "^3.0.0" 459 | path-exists "^3.0.0" 460 | 461 | lodash@^4.17.15: 462 | version "4.17.21" 463 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 464 | 465 | log-symbols@3.0.0: 466 | version "3.0.0" 467 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" 468 | dependencies: 469 | chalk "^2.4.2" 470 | 471 | lowercase-keys@^2.0.0: 472 | version "2.0.0" 473 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" 474 | 475 | mimic-response@^1.0.0: 476 | version "1.0.1" 477 | resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" 478 | 479 | mimic-response@^2.0.0, mimic-response@^2.1.0: 480 | version "2.1.0" 481 | resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" 482 | 483 | minimatch@3.0.4, minimatch@^3.0.4: 484 | version "3.0.4" 485 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 486 | dependencies: 487 | brace-expansion "^1.1.7" 488 | 489 | minimist@^1.2.5: 490 | version "1.2.6" 491 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" 492 | 493 | mkdirp@0.5.5: 494 | version "0.5.5" 495 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" 496 | dependencies: 497 | minimist "^1.2.5" 498 | 499 | mocha@^7.1.1: 500 | version "7.1.2" 501 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.1.2.tgz#8e40d198acf91a52ace122cd7599c9ab857b29e6" 502 | dependencies: 503 | ansi-colors "3.2.3" 504 | browser-stdout "1.3.1" 505 | chokidar "3.3.0" 506 | debug "3.2.6" 507 | diff "3.5.0" 508 | escape-string-regexp "1.0.5" 509 | find-up "3.0.0" 510 | glob "7.1.3" 511 | growl "1.10.5" 512 | he "1.2.0" 513 | js-yaml "3.13.1" 514 | log-symbols "3.0.0" 515 | minimatch "3.0.4" 516 | mkdirp "0.5.5" 517 | ms "2.1.1" 518 | node-environment-flags "1.0.6" 519 | object.assign "4.1.0" 520 | strip-json-comments "2.0.1" 521 | supports-color "6.0.0" 522 | which "1.3.1" 523 | wide-align "1.1.3" 524 | yargs "13.3.2" 525 | yargs-parser "13.1.2" 526 | yargs-unparser "1.6.0" 527 | 528 | moment@^2.13.0: 529 | version "2.29.2" 530 | resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.2.tgz#00910c60b20843bcba52d37d58c628b47b1f20e4" 531 | 532 | ms@2.1.1: 533 | version "2.1.1" 534 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 535 | 536 | ms@^2.1.1: 537 | version "2.1.2" 538 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 539 | 540 | node-environment-flags@1.0.6: 541 | version "1.0.6" 542 | resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088" 543 | dependencies: 544 | object.getownpropertydescriptors "^2.0.3" 545 | semver "^5.7.0" 546 | 547 | normalize-path@^3.0.0, normalize-path@~3.0.0: 548 | version "3.0.0" 549 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 550 | 551 | normalize-url@^4.1.0: 552 | version "4.5.1" 553 | resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" 554 | 555 | object-inspect@^1.7.0: 556 | version "1.7.0" 557 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" 558 | 559 | object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: 560 | version "1.1.1" 561 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 562 | 563 | object.assign@4.1.0, object.assign@^4.1.0: 564 | version "4.1.0" 565 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" 566 | dependencies: 567 | define-properties "^1.1.2" 568 | function-bind "^1.1.1" 569 | has-symbols "^1.0.0" 570 | object-keys "^1.0.11" 571 | 572 | object.getownpropertydescriptors@^2.0.3: 573 | version "2.1.0" 574 | resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" 575 | dependencies: 576 | define-properties "^1.1.3" 577 | es-abstract "^1.17.0-next.1" 578 | 579 | once@^1.3.0, once@^1.3.1, once@^1.4.0: 580 | version "1.4.0" 581 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 582 | dependencies: 583 | wrappy "1" 584 | 585 | p-cancelable@^2.0.0: 586 | version "2.0.0" 587 | resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.0.0.tgz#4a3740f5bdaf5ed5d7c3e34882c6fb5d6b266a6e" 588 | 589 | p-event@^4.0.0: 590 | version "4.1.0" 591 | resolved "https://registry.yarnpkg.com/p-event/-/p-event-4.1.0.tgz#e92bb866d7e8e5b732293b1c8269d38e9982bf8e" 592 | dependencies: 593 | p-timeout "^2.0.1" 594 | 595 | p-finally@^1.0.0: 596 | version "1.0.0" 597 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 598 | 599 | p-limit@^2.0.0: 600 | version "2.3.0" 601 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 602 | dependencies: 603 | p-try "^2.0.0" 604 | 605 | p-locate@^3.0.0: 606 | version "3.0.0" 607 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" 608 | dependencies: 609 | p-limit "^2.0.0" 610 | 611 | p-timeout@^2.0.1: 612 | version "2.0.1" 613 | resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038" 614 | dependencies: 615 | p-finally "^1.0.0" 616 | 617 | p-try@^2.0.0: 618 | version "2.2.0" 619 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 620 | 621 | path-exists@^3.0.0: 622 | version "3.0.0" 623 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 624 | 625 | path-is-absolute@^1.0.0: 626 | version "1.0.1" 627 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 628 | 629 | picomatch@^2.0.4: 630 | version "2.2.2" 631 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" 632 | 633 | pump@^3.0.0: 634 | version "3.0.0" 635 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 636 | dependencies: 637 | end-of-stream "^1.1.0" 638 | once "^1.3.1" 639 | 640 | readdirp@~3.2.0: 641 | version "3.2.0" 642 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" 643 | dependencies: 644 | picomatch "^2.0.4" 645 | 646 | require-directory@^2.1.1: 647 | version "2.1.1" 648 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 649 | 650 | require-main-filename@^2.0.0: 651 | version "2.0.0" 652 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" 653 | 654 | responselike@^2.0.0: 655 | version "2.0.0" 656 | resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.0.tgz#26391bcc3174f750f9a79eacc40a12a5c42d7723" 657 | dependencies: 658 | lowercase-keys "^2.0.0" 659 | 660 | semver@^5.7.0: 661 | version "5.7.1" 662 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 663 | 664 | set-blocking@^2.0.0: 665 | version "2.0.0" 666 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 667 | 668 | sprintf-js@~1.0.2: 669 | version "1.0.3" 670 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 671 | 672 | "string-width@^1.0.2 || 2": 673 | version "2.1.1" 674 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 675 | dependencies: 676 | is-fullwidth-code-point "^2.0.0" 677 | strip-ansi "^4.0.0" 678 | 679 | string-width@^3.0.0, string-width@^3.1.0: 680 | version "3.1.0" 681 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 682 | dependencies: 683 | emoji-regex "^7.0.1" 684 | is-fullwidth-code-point "^2.0.0" 685 | strip-ansi "^5.1.0" 686 | 687 | string.prototype.trimend@^1.0.0: 688 | version "1.0.1" 689 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" 690 | dependencies: 691 | define-properties "^1.1.3" 692 | es-abstract "^1.17.5" 693 | 694 | string.prototype.trimleft@^2.1.1: 695 | version "2.1.2" 696 | resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc" 697 | dependencies: 698 | define-properties "^1.1.3" 699 | es-abstract "^1.17.5" 700 | string.prototype.trimstart "^1.0.0" 701 | 702 | string.prototype.trimright@^2.1.1: 703 | version "2.1.2" 704 | resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3" 705 | dependencies: 706 | define-properties "^1.1.3" 707 | es-abstract "^1.17.5" 708 | string.prototype.trimend "^1.0.0" 709 | 710 | string.prototype.trimstart@^1.0.0: 711 | version "1.0.1" 712 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" 713 | dependencies: 714 | define-properties "^1.1.3" 715 | es-abstract "^1.17.5" 716 | 717 | strip-ansi@^4.0.0: 718 | version "4.0.0" 719 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 720 | dependencies: 721 | ansi-regex "^3.0.0" 722 | 723 | strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: 724 | version "5.2.0" 725 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 726 | dependencies: 727 | ansi-regex "^4.1.0" 728 | 729 | strip-json-comments@2.0.1: 730 | version "2.0.1" 731 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 732 | 733 | supports-color@6.0.0: 734 | version "6.0.0" 735 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" 736 | dependencies: 737 | has-flag "^3.0.0" 738 | 739 | supports-color@^5.3.0: 740 | version "5.5.0" 741 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 742 | dependencies: 743 | has-flag "^3.0.0" 744 | 745 | to-readable-stream@^2.0.0: 746 | version "2.1.0" 747 | resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-2.1.0.tgz#82880316121bea662cdc226adb30addb50cb06e8" 748 | 749 | to-regex-range@^5.0.1: 750 | version "5.0.1" 751 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 752 | dependencies: 753 | is-number "^7.0.0" 754 | 755 | type-detect@0.1.1: 756 | version "0.1.1" 757 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822" 758 | 759 | type-detect@^1.0.0: 760 | version "1.0.0" 761 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2" 762 | 763 | type-fest@^0.10.0: 764 | version "0.10.0" 765 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.10.0.tgz#7f06b2b9fbfc581068d1341ffabd0349ceafc642" 766 | 767 | underscore@~1.12.1: 768 | version "1.12.1" 769 | resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.12.1.tgz#7bb8cc9b3d397e201cf8553336d262544ead829e" 770 | 771 | which-module@^2.0.0: 772 | version "2.0.0" 773 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 774 | 775 | which@1.3.1: 776 | version "1.3.1" 777 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 778 | dependencies: 779 | isexe "^2.0.0" 780 | 781 | wide-align@1.1.3: 782 | version "1.1.3" 783 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 784 | dependencies: 785 | string-width "^1.0.2 || 2" 786 | 787 | wrap-ansi@^5.1.0: 788 | version "5.1.0" 789 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" 790 | dependencies: 791 | ansi-styles "^3.2.0" 792 | string-width "^3.0.0" 793 | strip-ansi "^5.0.0" 794 | 795 | wrappy@1: 796 | version "1.0.2" 797 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 798 | 799 | y18n@^4.0.0: 800 | version "4.0.1" 801 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" 802 | 803 | yargs-parser@13.1.2, yargs-parser@^13.1.2: 804 | version "13.1.2" 805 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" 806 | dependencies: 807 | camelcase "^5.0.0" 808 | decamelize "^1.2.0" 809 | 810 | yargs-unparser@1.6.0: 811 | version "1.6.0" 812 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" 813 | dependencies: 814 | flat "^4.1.0" 815 | lodash "^4.17.15" 816 | yargs "^13.3.0" 817 | 818 | yargs@13.3.2, yargs@^13.3.0: 819 | version "13.3.2" 820 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" 821 | dependencies: 822 | cliui "^5.0.0" 823 | find-up "^3.0.0" 824 | get-caller-file "^2.0.1" 825 | require-directory "^2.1.1" 826 | require-main-filename "^2.0.0" 827 | set-blocking "^2.0.0" 828 | string-width "^3.0.0" 829 | which-module "^2.0.0" 830 | y18n "^4.0.0" 831 | yargs-parser "^13.1.2" 832 | --------------------------------------------------------------------------------