├── .gitignore ├── .npmignore ├── README.md ├── dist ├── bundle.js ├── index.d.ts └── interfaces.d.ts ├── example ├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── public │ ├── favicon.ico │ ├── img │ │ ├── loading.gif │ │ └── paymaya.png │ ├── index.html │ ├── logo192.png │ ├── logo512.png │ ├── manifest.json │ └── robots.txt └── src │ ├── components │ ├── Header │ │ └── index.js │ └── ModalMessage │ │ └── index.js │ ├── containers │ ├── App │ │ └── index.js │ ├── Cancel │ │ └── index.js │ ├── Checkout │ │ └── index.js │ ├── CreditCard │ │ └── index.js │ ├── Failure │ │ └── index.js │ ├── Home │ │ └── index.js │ ├── SinglePayment │ │ └── index.js │ ├── Success │ │ └── index.js │ └── WalletLink │ │ └── index.js │ ├── index.css │ ├── index.js │ ├── reducers │ └── index.js │ ├── store.js │ └── utils │ └── index.js ├── package-lock.json ├── package.json ├── rollup.config.js ├── src ├── .babelrc ├── index.ts └── interfaces.ts └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | build 3 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | .idea 2 | index.html 3 | node_modules 4 | rollup.config.js 5 | src 6 | tsconfig.json 7 | example -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Overview 2 | 3 | Official client side SDK by PayMaya Payment Gateway. For assistance you may reach us through paymayadevs@voyager.ph 4 | 5 | ## Install 6 | 7 | 8 | `npm install --save paymaya-js-sdk` 9 | 10 | or 11 | 12 | `yarn add paymaya-js-sdk` 13 | 14 | 15 | ## Run 16 | 17 | You can either import it like: 18 | 19 | ```javascript 20 | import PaymayaSdkClient from 'paymaya-js-sdk' 21 | ``` 22 | 23 | or simply include it through a script tag on your HTML site: 24 | 25 | ```html 26 | 27 | ``` 28 | 29 | NOTE: when including via script tags, the SDK is globally available using the variable `PayMayaSDK` 30 | 31 | ## Usage 32 | 33 | Before using any of the publicly available methods, you need to initialize the SDK by using the `init` method (you only need to do this once in app's lifetime). 34 | 35 | React: 36 | ```js 37 | import paymaya from 'paymaya-js-sdk'; 38 | 39 | function App() { 40 | const exampleCheckoutObject = {}; 41 | useEffect(() => { 42 | paymaya.init('my-public-key', true); 43 | paymaya.createCheckout(exampleCheckoutObject); 44 | }, []); 45 | return ( 46 |
47 |
Test App
48 |
49 | ); 50 | } 51 | ``` 52 | 53 | or vanilla js 54 | ```js 55 | 60 | ``` 61 | 62 | ## SDK API 63 | 64 | * [init](#initpublickey-issandbox) 65 | 66 | * [createCheckout](#createcheckoutcheckoutrequestobject) 67 | 68 | * [createWalletLink](#createwalletlinkwalletlinkrequestobject) 69 | 70 | * [createSinglePayment](#createsinglepaymentsinglepaymentrequestobject) 71 | 72 | * [addTransactionHandler](#addtransactionhandlercallback) 73 | 74 | * [createCreditCardForm](#createcreditcardformtargethtmlelement-options) 75 | 76 | --- 77 | 78 | #### `init(publicKey, isSandbox)` 79 | This method initializes SDK. It must be run before other methods are being used. 80 | 81 | Returns: `void` 82 | 83 | `init` properties: 84 | 85 | | Parameter | Type | Required | Description | 86 | |-----------------------|--------|----------|--------------------------------------------------------| 87 | | publicKey | string | Yes | Public API key delivered by PayMaya. | 88 | | isSandbox | boolean | No | Boolean that indicates whether SDK should use sandbox environment or not. Defaults to `true`, if not supplied. | 89 | 90 | --- 91 | 92 | #### `createCheckout(checkoutRequestObject)` 93 | This method redirects the user to PayMaya Checkout, where the user can finalize his/her payment. 94 | 95 | Returns: `Promise` 96 | 97 | `checkoutRequestObject` properties are defined [here](https://developers.paymaya.com/blog/entry/paymaya-checkout-api-overview#checkoutObject). 98 | 99 | Example `checkoutRequestObject`: 100 | ```json 101 | { 102 | "totalAmount": { 103 | "value": 100, 104 | "currency": "PHP", 105 | "details": { 106 | "discount": 0, 107 | "serviceCharge": 0, 108 | "shippingFee": 0, 109 | "tax": 0, 110 | "subtotal": 100 111 | } 112 | }, 113 | "buyer": { 114 | "firstName": "John", 115 | "middleName": "Paul", 116 | "lastName": "Doe", 117 | "birthday": "1995-10-24", 118 | "customerSince": "1995-10-24", 119 | "sex": "M", 120 | "contact": { 121 | "phone": "+639181008888", 122 | "email": "merchant@merchantsite.com" 123 | }, 124 | "shippingAddress": { 125 | "firstName": "John", 126 | "middleName": "Paul", 127 | "lastName": "Doe", 128 | "phone": "+639181008888", 129 | "email": "merchant@merchantsite.com", 130 | "line1": "6F Launchpad", 131 | "line2": "Reliance Street", 132 | "city": "Mandaluyong City", 133 | "state": "Metro Manila", 134 | "zipCode": "1552", 135 | "countryCode": "PH", 136 | "shippingType": "ST" // ST - for standard, SD - for same day 137 | }, 138 | "billingAddress": { 139 | "line1": "6F Launchpad", 140 | "line2": "Reliance Street", 141 | "city": "Mandaluyong City", 142 | "state": "Metro Manila", 143 | "zipCode": "1552", 144 | "countryCode": "PH" 145 | } 146 | }, 147 | "items": [ 148 | { 149 | "name": "Canvas Slip Ons", 150 | "quantity": 1, 151 | "code": "CVG-096732", 152 | "description": "Shoes", 153 | "amount": { 154 | "value": 100, 155 | "details": { 156 | "discount": 0, 157 | "serviceCharge": 0, 158 | "shippingFee": 0, 159 | "tax": 0, 160 | "subtotal": 100 161 | } 162 | }, 163 | "totalAmount": { 164 | "value": 100, 165 | "details": { 166 | "discount": 0, 167 | "serviceCharge": 0, 168 | "shippingFee": 0, 169 | "tax": 0, 170 | "subtotal": 100 171 | } 172 | } 173 | } 174 | ], 175 | "redirectUrl": { 176 | "success": "https://www.merchantsite.com/success", 177 | "failure": "https://www.merchantsite.com/failure", 178 | "cancel": "https://www.merchantsite.com/cancel" 179 | }, 180 | "requestReferenceNumber": "1551191039", 181 | "metadata": {} 182 | } 183 | ``` 184 | 185 | --- 186 | 187 | #### `createWalletLink(walletLinkrequestObject)` 188 | This method creates a wallet link that allows charging to a PayMaya account. 189 | 190 | Returns `Promise` 191 | 192 | `walletLinkRequestObject` properties: 193 | 194 | | Parameter | Type | Required | Description | 195 | |-----------------------|--------|----------|--------------------------------------------------------| 196 | | redirectUrl | object | | Object containing merchant's callback urls | 197 | | redirectUrl.success | string | | Url that the user will be redirected on after successful payment | 198 | | redirectUrl.failure | string | | Url that the user will be redirected on after failed payment | 199 | | redirectUrl.cancel | string | | Url that the user will be redirected on after canceled payment | 200 | | requestReferenceNumber | string | | Request reference number | 201 | | metadata | object | No | Additional information regarding payment | 202 | 203 | --- 204 | 205 | #### `createSinglePayment(singlePaymentRequestObject)` 206 | This method creates a single payment redirection, allowing the user to finalize the transaction. 207 | 208 | Returns `Promise` 209 | 210 | `createSinglePayment` properties: 211 | 212 | | Parameter | Type | Required | Description | 213 | |-----------------------|--------|----------|--------------------------------------------------------| 214 | | totalAmount | object | | Object containing payment amount | 215 | | totalAmount.currency | string | | Currency of transaction | 216 | | totalAmount.value | string | | Value of transaction | 217 | | redirectUrl | object | | Object containing merchant's callback urls | 218 | | redirectUrl.success | string | | Url that the user will be redirected on after successful payment | 219 | | redirectUrl.failure | string | | Url that the user will be redirected on after failed payment | 220 | | redirectUrl.cancel | string | | Url that the user will be redirected on after canceled payment | 221 | | requestReferenceNumber | string | | Request reference number | 222 | | metadata | object | | Additional information regarding payment | 223 | 224 | 225 | --- 226 | 227 | #### `addTransactionHandler(callback)` 228 | This method assigns a listener for credit card form method [createdCreditCardForm](#createcreditcardformtargethtmlelement-options) - whenever the user fills all the information required (cvc, credit card number and expiry date) and then tokenizes that data, a `callback` will be fired with payment token. 229 | 230 | Returns `void` 231 | 232 | Example usage: 233 | 234 | ```js 235 | sdk 236 | .createCreditCardForm(iframeContainer, {}) 237 | .addTransactionHandler((paymentTokenId) => this.setState({open: true, iframe: true, bodyResponse: {paymentTokenId}})) 238 | ``` 239 | `addTransactionHandler` properties: 240 | 241 | | Parameter | Type | Required | Description | 242 | |-----------------------|--------|----------|--------------------------------------------------------| 243 | | callback | function | Yes | function that will be fired once credit card form is tokenized | 244 | 245 | `callback(paymentTokenId)` properties: 246 | 247 | | Parameter | Type | Required | Description | 248 | |-----------------------|--------|----------|--------------------------------------------------------| 249 | | paymentTokenId | string | | a string that will be passed as argument to merchant's callback function | 250 | 251 | --- 252 | 253 | #### `createCreditCardForm(targetHtmlElement, options)` 254 | This method creates a credit card form in selected html element, by embedding a safe iframe instance in it - allowing the user to fill his credit card information in a safe manner. 255 | 256 | Returns `void` 257 | 258 | `createdCreditCardForm` properties: 259 | 260 | | Parameter | Type | Required | Description | 261 | |-----------------------|--------|----------|--------------------------------------------------------| 262 | | targetHtmlElement | HTMLElement | Yes | a target html element in which form will be embedded | 263 | | options | object | No | options object containing styling schema | 264 | | options.buttonText | string | No | label text for a button inside the form | 265 | | options.buttonColor | string | No | button color (example: '#000') | 266 | | options.buttonTextColor | string | No | button text color (example: '#000') | 267 | | options.showLogo | boolean | No | boolean whether to show PayMaya logo or not | 268 | 269 | ## Examples 270 | 271 | A sample React.JS project is available under [/example](https://github.com/PayMaya/PayMaya-JS-SDK-v2/tree/master/example) in the repo. 272 | 273 | ```sh 274 | git clone git@github.com:PayMaya/PayMaya-JS-SDK-v2.git 275 | cd PayMaya-JS-SDK-v2 276 | npm ci 277 | cd example 278 | npm ci 279 | npm start 280 | ``` -------------------------------------------------------------------------------- /dist/bundle.js: -------------------------------------------------------------------------------- 1 | !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).PayMayaSDK=e()}(this,(function(){"use strict"; 2 | /*! ***************************************************************************** 3 | Copyright (c) Microsoft Corporation. All rights reserved. 4 | Licensed under the Apache License, Version 2.0 (the "License"); you may not use 5 | this file except in compliance with the License. You may obtain a copy of the 6 | License at http://www.apache.org/licenses/LICENSE-2.0 7 | 8 | THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 9 | KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED 10 | WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, 11 | MERCHANTABLITY OR NON-INFRINGEMENT. 12 | 13 | See the Apache Version 2.0 License for specific language governing permissions 14 | and limitations under the License. 15 | ***************************************************************************** */function t(t,e,r,n){return new(r||(r=Promise))((function(i,o){function a(t){try{c(n.next(t))}catch(t){o(t)}}function s(t){try{c(n.throw(t))}catch(t){o(t)}}function c(t){t.done?i(t.value):new r((function(e){e(t.value)})).then(a,s)}c((n=n.apply(t,e||[])).next())}))}function e(t,e){var r,n,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(r)throw new TypeError("Generator is already executing.");for(;a;)try{if(r=1,n&&(i=2&o[0]?n.return:o[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,o[1])).done)return i;switch(n=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,n=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1] void): void; 13 | createCheckout(checkoutRequestObject: CreateCheckoutObject): Promise; 14 | createWalletLink(walletLinkRequestObject: CreateWalletLinkObject): Promise; 15 | createSinglePayment(singlePaymentRequestObject: CreateSinglePaymentObject): Promise; 16 | createCreditCardForm(targetHtmlElement: HTMLElement, options?: CreditCardFormOptions): this; 17 | } 18 | declare const _default: PayMayaSDK; 19 | export default _default; 20 | -------------------------------------------------------------------------------- /dist/interfaces.d.ts: -------------------------------------------------------------------------------- 1 | export interface CreateCheckoutObject { 2 | totalAmount: TotalAmount; 3 | buyer?: Buyer; 4 | items: Item[]; 5 | redirectUrl?: RedirectUrls; 6 | requestReferenceNumber: string; 7 | metadata: {}; 8 | } 9 | export interface CreateWalletLinkObject extends RedirectUrls { 10 | requestReferenceNumber: string; 11 | metadata: {}; 12 | } 13 | export interface CreateSinglePaymentObject extends RedirectUrls { 14 | totalAmount: { 15 | currency: string; 16 | value: string; 17 | }; 18 | requestReferenceNumber: string; 19 | metadata: {}; 20 | } 21 | export interface CreditCardFormOptions { 22 | buttonText: string; 23 | buttonColor: string; 24 | buttonTextColor: string; 25 | showLogo: boolean; 26 | } 27 | interface TotalAmount { 28 | value: number; 29 | currency: string; 30 | details?: Details; 31 | } 32 | interface Details { 33 | discount?: number; 34 | serviceCharge?: number; 35 | shippingFee?: number; 36 | tax?: number; 37 | subtotal?: number; 38 | } 39 | interface Buyer { 40 | firstName?: string; 41 | middleName?: string; 42 | lastName?: string; 43 | birthday?: string; 44 | customerSince?: string; 45 | sex?: string; 46 | contact?: { 47 | phone?: string; 48 | email?: string; 49 | }; 50 | shippingAddress?: ShippingAddress; 51 | billingAddress?: BillingAddress; 52 | } 53 | export declare enum ShippingType { 54 | ST = "ST", 55 | SD = "SD" 56 | } 57 | interface ShippingAddress extends BillingAddress { 58 | firstName: string; 59 | middleName: string; 60 | lastName: string; 61 | phone: string; 62 | email: string; 63 | shippingType: ShippingType; 64 | } 65 | interface BillingAddress { 66 | line1?: string; 67 | line2?: string; 68 | city?: string; 69 | state?: string; 70 | zipCode?: string; 71 | countryCode?: string; 72 | } 73 | interface Item { 74 | name: string; 75 | quantity?: number; 76 | code?: string; 77 | description?: string; 78 | amount?: Amount; 79 | totalAmount: Amount; 80 | } 81 | interface Amount { 82 | value: number; 83 | details?: Details; 84 | } 85 | interface RedirectUrls { 86 | success?: string; 87 | failure?: string; 88 | cancel?: string; 89 | } 90 | export {}; 91 | -------------------------------------------------------------------------------- /example/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /example/README.md: -------------------------------------------------------------------------------- 1 | This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). 2 | 3 | ## Available Scripts 4 | 5 | In the project directory, you can run: 6 | 7 | ### `yarn start` 8 | 9 | Runs the app in the development mode.
10 | Open [http://localhost:3000](http://localhost:3000) to view it in the browser. 11 | 12 | The page will reload if you make edits.
13 | You will also see any lint errors in the console. 14 | 15 | ### `yarn test` 16 | 17 | Launches the test runner in the interactive watch mode.
18 | See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. 19 | 20 | ### `yarn build` 21 | 22 | Builds the app for production to the `build` folder.
23 | It correctly bundles React in production mode and optimizes the build for the best performance. 24 | 25 | The build is minified and the filenames include the hashes.
26 | Your app is ready to be deployed! 27 | 28 | See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. 29 | 30 | ### `yarn eject` 31 | 32 | **Note: this is a one-way operation. Once you `eject`, you can’t go back!** 33 | 34 | If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. 35 | 36 | Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. 37 | 38 | You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. 39 | 40 | ## Learn More 41 | 42 | You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). 43 | 44 | To learn React, check out the [React documentation](https://reactjs.org/). 45 | 46 | ### Code Splitting 47 | 48 | This section has moved here: https://facebook.github.io/create-react-app/docs/code-splitting 49 | 50 | ### Analyzing the Bundle Size 51 | 52 | This section has moved here: https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size 53 | 54 | ### Making a Progressive Web App 55 | 56 | This section has moved here: https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app 57 | 58 | ### Advanced Configuration 59 | 60 | This section has moved here: https://facebook.github.io/create-react-app/docs/advanced-configuration 61 | 62 | ### Deployment 63 | 64 | This section has moved here: https://facebook.github.io/create-react-app/docs/deployment 65 | 66 | ### `yarn build` fails to minify 67 | 68 | This section has moved here: https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify 69 | -------------------------------------------------------------------------------- /example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "paymaya_sdk_sample", 3 | "version": "1.0.0", 4 | "private": true, 5 | "dependencies": { 6 | "@testing-library/jest-dom": "4.2.4", 7 | "@testing-library/react": "9.3.2", 8 | "@testing-library/user-event": "7.1.2", 9 | "connected-react-router": "4.5.0", 10 | "paymaya-js-sdk": "file:..", 11 | "react": "16.13.0", 12 | "react-dom": "16.13.0", 13 | "react-redux": "5.1.2", 14 | "react-responsive-modal": "4.0.1", 15 | "react-router": "4.4.0-beta.8", 16 | "react-router-dom": "4.4.0-beta.8", 17 | "react-scripts": "3.4.0", 18 | "redux": "4.0.5", 19 | "redux-form": "8.2.6", 20 | "redux-thunk": "2.3.0", 21 | "sanitize.css": "7.0.3", 22 | "serve": "10.1.2" 23 | }, 24 | "scripts": { 25 | "start": "react-scripts start", 26 | "build": "react-scripts build", 27 | "test": "react-scripts test", 28 | "eject": "react-scripts eject" 29 | }, 30 | "eslintConfig": { 31 | "extends": "react-app" 32 | }, 33 | "browserslist": { 34 | "production": [ 35 | ">0.2%", 36 | "not dead", 37 | "not op_mini all" 38 | ], 39 | "development": [ 40 | "last 1 chrome version", 41 | "last 1 firefox version", 42 | "last 1 safari version" 43 | ] 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /example/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PayMaya/PayMaya-JS-SDK-v2/f833a1441272e086e9b016816c5cef71f3e315fd/example/public/favicon.ico -------------------------------------------------------------------------------- /example/public/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PayMaya/PayMaya-JS-SDK-v2/f833a1441272e086e9b016816c5cef71f3e315fd/example/public/img/loading.gif -------------------------------------------------------------------------------- /example/public/img/paymaya.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PayMaya/PayMaya-JS-SDK-v2/f833a1441272e086e9b016816c5cef71f3e315fd/example/public/img/paymaya.png -------------------------------------------------------------------------------- /example/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 13 | 17 | 18 | 27 | Paymaya SDK Sample 28 | 29 | 30 | 31 |
32 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /example/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PayMaya/PayMaya-JS-SDK-v2/f833a1441272e086e9b016816c5cef71f3e315fd/example/public/logo192.png -------------------------------------------------------------------------------- /example/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PayMaya/PayMaya-JS-SDK-v2/f833a1441272e086e9b016816c5cef71f3e315fd/example/public/logo512.png -------------------------------------------------------------------------------- /example/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "Paymaya SDK Sample", 3 | "name": "Paymaya SDK Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /example/public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /example/src/components/Header/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { NavLink } from 'react-router-dom' 3 | 4 | const Header = () => ( 5 |
6 | PayMaya 7 | Documentation 8 | Checkout 9 | Single payment 10 | Wallet link 11 | Credit card 12 |
13 | ) 14 | 15 | export default Header -------------------------------------------------------------------------------- /example/src/components/ModalMessage/index.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react' 2 | import Modal from 'react-responsive-modal' 3 | 4 | class ModalMessage extends Component { 5 | 6 | constructor(props){ 7 | super(props); 8 | this.state = { 9 | open: false 10 | } 11 | } 12 | 13 | componentDidMount(){ 14 | this.setModal(true) 15 | } 16 | 17 | setModal = (value) => { 18 | this.setState({ 19 | open: value 20 | }) 21 | } 22 | 23 | setBackground = (type) => { 24 | switch(type){ 25 | case 'success': 26 | return '#4caf50' 27 | case 'failure': 28 | return '#f44336' 29 | case 'cancel': 30 | return '#ff9800' 31 | default: 32 | return '#8dc540' 33 | } 34 | } 35 | 36 | onCloseModal = () => { 37 | this.props.history.push('payment-methods') 38 | this.setModal(false) 39 | } 40 | 41 | render() { 42 | const { type } = this.props 43 | const { open } = this.state 44 | return ( 45 | 51 | PayMaya 56 |
59 | 66 |
67 |
68 | ); 69 | } 70 | } 71 | 72 | export default ModalMessage; -------------------------------------------------------------------------------- /example/src/containers/App/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Route, BrowserRouter, Switch, Redirect } from 'react-router-dom' 3 | 4 | import Header from '../../components/Header' 5 | 6 | import Home from '../Home' 7 | import Checkout from '../Checkout' 8 | import SinglePayment from '../SinglePayment' 9 | import WalletLink from '../WalletLink' 10 | import CreditCard from '../CreditCard' 11 | import Success from '../Success' 12 | import Failure from '../Failure' 13 | import Cancel from '../Cancel' 14 | 15 | const App = () => ( 16 | 17 |
18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 | 32 | ) 33 | 34 | export default App 35 | -------------------------------------------------------------------------------- /example/src/containers/Cancel/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ModalMessage from '../../components/ModalMessage' 3 | 4 | const Cancel = (props) => ( 5 | 6 | ) 7 | 8 | export default Cancel -------------------------------------------------------------------------------- /example/src/containers/Checkout/index.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react' 2 | import paymaya from 'paymaya-js-sdk' 3 | import Modal from 'react-responsive-modal' 4 | 5 | import { isEmptyObject } from '../../utils' 6 | 7 | class Checkout extends Component { 8 | constructor(props){ 9 | super(props); 10 | this.state = { 11 | open: false, 12 | loading: false, 13 | requestReferenceNumber: "6319921", 14 | items: [ 15 | { 16 | name: "Nike Footwear", 17 | quantity: 1, 18 | totalAmount: { 19 | value: '100' 20 | } 21 | } 22 | 23 | ], 24 | totalAmount: { 25 | value: '100', 26 | currency: 'PHP', 27 | }, 28 | metadata: {}, 29 | redirectUrl: { 30 | success: "http://localhost:3000/success", 31 | failure: "http://localhost:3000/failure", 32 | cancel: "http://localhost:3000/cancel" 33 | }, 34 | bodyResponse: {}, 35 | errorResponse: {} 36 | } 37 | } 38 | 39 | async createCheckout(response){ 40 | this.setState({ 41 | loading: true, 42 | errorResponse: {} 43 | }) 44 | paymaya.init('pk-Z0OSzLvIcOI2UIvDhdTGVVfRSSeiGStnceqwUE7n0Ah', true) 45 | await paymaya.createCheckout(response).then().catch(err => { 46 | this.setState({ 47 | errorResponse: err, 48 | loading: false 49 | }) 50 | }) 51 | } 52 | 53 | onCloseModal = () => { 54 | this.setState({ 55 | open: false, 56 | bodyResponse: {}, 57 | errorResponse: {}, 58 | loading: false 59 | }) 60 | } 61 | 62 | handleCheckout = () => { 63 | 64 | const { requestReferenceNumber, totalAmount, items, metadata, redirectUrl } = this.state 65 | 66 | const bodyResponseForCheckout = { 67 | requestReferenceNumber, 68 | totalAmount, 69 | items, 70 | metadata, 71 | redirectUrl 72 | 73 | } 74 | 75 | this.setState({ 76 | bodyResponse: bodyResponseForCheckout, 77 | open: true 78 | }) 79 | 80 | } 81 | 82 | render() { 83 | const { bodyResponse, errorResponse, open, loading } = this.state 84 | return ( 85 |
86 |
87 |

Checkout

88 | 89 |
90 | 95 | {!isEmptyObject(bodyResponse) &&
{JSON.stringify(bodyResponse, null, 2)}
} 96 | {!isEmptyObject(errorResponse) &&
{JSON.stringify(errorResponse, null, 2)}
} 97 |
98 | {!loading && } 99 | {loading && } 100 |
101 |
102 |
103 | ); 104 | } 105 | } 106 | 107 | export default Checkout; -------------------------------------------------------------------------------- /example/src/containers/CreditCard/index.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react' 2 | import paymaya from 'paymaya-js-sdk' 3 | import Modal from 'react-responsive-modal' 4 | 5 | import { isEmptyObject } from '../../utils' 6 | 7 | class PaymentMethods extends Component { 8 | constructor(props){ 9 | super(props); 10 | this.state = { 11 | open: false, 12 | loading: false, 13 | requestReferenceNumber: "6319921", 14 | items: [ 15 | { 16 | name: "Nike Footwear", 17 | quantity: 1, 18 | totalAmount: { 19 | value: '100' 20 | } 21 | } 22 | 23 | ], 24 | totalAmount: { 25 | value: '100', 26 | currency: 'PHP', 27 | }, 28 | metadata: {}, 29 | redirectUrl: { 30 | success: "http://localhost:3000/success", 31 | failure: "http://localhost:3000/failure", 32 | cancel: "http://localhost:3000/cancel" 33 | }, 34 | bodyResponse: {}, 35 | errorResponse: {} 36 | } 37 | } 38 | 39 | componentDidMount(){ 40 | this.createCreditCardForm() 41 | } 42 | 43 | createCreditCardForm = () => { 44 | paymaya.init('pk-MOfNKu3FmHMVHtjyjG7vhr7vFevRkWxmxYL1Yq6iFk5', true) 45 | const iframeContainer = document.getElementById("iframe-container") 46 | paymaya 47 | .createCreditCardForm(iframeContainer) 48 | .addTransactionHandler((paymentTokenId) => this.setState({open: true, bodyResponse: {paymentTokenId}})) 49 | } 50 | 51 | onCloseModal = () => { 52 | this.setState({ 53 | open: false, 54 | bodyResponse: {}, 55 | errorResponse: {}, 56 | loading: false 57 | }) 58 | } 59 | 60 | render() { 61 | const { bodyResponse, errorResponse, open, loading } = this.state 62 | return ( 63 |
64 |
65 |

Credit card

66 |
 
67 |
68 |
69 | 74 | {!isEmptyObject(bodyResponse) &&
{JSON.stringify(bodyResponse, null, 2)}
} 75 | {!isEmptyObject(errorResponse) &&
{JSON.stringify(errorResponse, null, 2)}
} 76 |
77 | {!loading && } 78 | {loading && } 79 |
80 |
81 |
82 | ); 83 | } 84 | } 85 | 86 | export default PaymentMethods; 87 | -------------------------------------------------------------------------------- /example/src/containers/Failure/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ModalMessage from '../../components/ModalMessage' 3 | 4 | const Failure = (props) => ( 5 | 6 | ) 7 | 8 | export default Failure -------------------------------------------------------------------------------- /example/src/containers/Home/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const Home = () => ( 4 | 50 | ) 51 | 52 | export default Home -------------------------------------------------------------------------------- /example/src/containers/SinglePayment/index.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react' 2 | import paymaya from 'paymaya-js-sdk' 3 | import Modal from 'react-responsive-modal' 4 | 5 | import { isEmptyObject } from '../../utils' 6 | 7 | class SinglePayment extends Component { 8 | constructor(props){ 9 | super(props); 10 | this.state = { 11 | open: false, 12 | loading: false, 13 | requestReferenceNumber: "6319921", 14 | items: [ 15 | { 16 | name: "Nike Footwear", 17 | quantity: 1, 18 | totalAmount: { 19 | value: '100' 20 | } 21 | } 22 | 23 | ], 24 | totalAmount: { 25 | value: '100', 26 | currency: 'PHP', 27 | }, 28 | metadata: {}, 29 | redirectUrl: { 30 | success: "http://localhost:3000/success", 31 | failure: "http://localhost:3000/failure", 32 | cancel: "http://localhost:3000/cancel" 33 | }, 34 | bodyResponse: {}, 35 | errorResponse: {} 36 | } 37 | } 38 | 39 | async createSinglePayment(response){ 40 | this.setState({ 41 | loading: true, 42 | errorResponse: {} 43 | }) 44 | paymaya.init('pk-MOfNKu3FmHMVHtjyjG7vhr7vFevRkWxmxYL1Yq6iFk5', true) 45 | await paymaya.createSinglePayment(response).then().catch(err => { 46 | this.setState({ 47 | errorResponse: err, 48 | loading: false 49 | }) 50 | }) 51 | } 52 | 53 | onCloseModal = () => { 54 | this.setState({ 55 | open: false, 56 | bodyResponse: {}, 57 | errorResponse: {}, 58 | loading: false 59 | }) 60 | } 61 | 62 | handleSinglePayment = () => { 63 | 64 | const { requestReferenceNumber, totalAmount, metadata, redirectUrl } = this.state 65 | 66 | const bodyResponseForSinglePayment = { 67 | requestReferenceNumber, 68 | totalAmount, 69 | metadata, 70 | redirectUrl 71 | 72 | } 73 | 74 | this.setState({ 75 | bodyResponse: bodyResponseForSinglePayment, 76 | open: true 77 | }) 78 | 79 | } 80 | 81 | render() { 82 | const { bodyResponse, errorResponse, open, loading } = this.state 83 | return ( 84 |
85 |
86 |

Single payment

87 | 88 |
89 | 94 | {!isEmptyObject(bodyResponse) &&
{JSON.stringify(bodyResponse, null, 2)}
} 95 | {!isEmptyObject(errorResponse) &&
{JSON.stringify(errorResponse, null, 2)}
} 96 |
97 | {!loading && } 98 | {loading && } 99 |
100 |
101 |
102 | ); 103 | } 104 | } 105 | 106 | export default SinglePayment; -------------------------------------------------------------------------------- /example/src/containers/Success/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ModalMessage from '../../components/ModalMessage' 3 | 4 | const Success = (props) => ( 5 | 6 | ) 7 | 8 | export default Success -------------------------------------------------------------------------------- /example/src/containers/WalletLink/index.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react' 2 | import paymaya from 'paymaya-js-sdk' 3 | import Modal from 'react-responsive-modal' 4 | 5 | import { isEmptyObject } from '../../utils' 6 | 7 | class WalletLink extends Component { 8 | constructor(props){ 9 | super(props); 10 | this.state = { 11 | open: false, 12 | loading: false, 13 | requestReferenceNumber: "6319921", 14 | items: [ 15 | { 16 | name: "Nike Footwear", 17 | quantity: 1, 18 | totalAmount: { 19 | value: '100' 20 | } 21 | } 22 | 23 | ], 24 | totalAmount: { 25 | value: '100', 26 | currency: 'PHP', 27 | }, 28 | metadata: {}, 29 | redirectUrl: { 30 | success: "http://localhost:3000/success", 31 | failure: "http://localhost:3000/failure", 32 | cancel: "http://localhost:3000/cancel" 33 | }, 34 | bodyResponse: {}, 35 | errorResponse: {} 36 | } 37 | } 38 | 39 | 40 | async createWalletLink(response){ 41 | this.setState({ 42 | loading: true, 43 | errorResponse: {} 44 | }) 45 | paymaya.init('pk-MOfNKu3FmHMVHtjyjG7vhr7vFevRkWxmxYL1Yq6iFk5', true) 46 | await paymaya.createWalletLink(response).then().catch(err => { 47 | this.setState({ 48 | errorResponse: err, 49 | loading: false 50 | }) 51 | }) 52 | } 53 | 54 | 55 | onCloseModal = () => { 56 | this.setState({ 57 | open: false, 58 | bodyResponse: {}, 59 | errorResponse: {}, 60 | loading: false 61 | }) 62 | } 63 | 64 | handleWalletLink = () => { 65 | 66 | const { requestReferenceNumber, metadata, redirectUrl } = this.state 67 | 68 | const bodyResponseForSinglePayment = { 69 | requestReferenceNumber, 70 | metadata, 71 | redirectUrl 72 | 73 | } 74 | 75 | this.setState({ 76 | bodyResponse: bodyResponseForSinglePayment, 77 | open: true, 78 | action: this.createWalletLink 79 | }) 80 | 81 | } 82 | 83 | render() { 84 | const { bodyResponse, errorResponse, open, loading } = this.state 85 | return ( 86 |
87 |
88 |

Wallet link

89 | 90 |
91 | 96 | {!isEmptyObject(bodyResponse) &&
{JSON.stringify(bodyResponse, null, 2)}
} 97 | {!isEmptyObject(errorResponse) &&
{JSON.stringify(errorResponse, null, 2)}
} 98 |
99 | {!loading && } 100 | {loading && } 101 |
102 |
103 |
104 | ); 105 | } 106 | } 107 | 108 | export default WalletLink; -------------------------------------------------------------------------------- /example/src/index.css: -------------------------------------------------------------------------------- 1 | *{ 2 | outline: none; 3 | } 4 | 5 | html { 6 | font-size: 100%; 7 | } 8 | 9 | body { 10 | margin: 0; 11 | padding: 0; 12 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, 13 | sans-serif; 14 | font-size: 1rem; 15 | line-height: 1.5; 16 | } 17 | 18 | button:disabled { 19 | opacity: 0.5; 20 | } 21 | 22 | header { 23 | width: 30%; 24 | box-shadow: 5px 0 10px rgba(0,0,0,0.5); 25 | position: fixed; 26 | height: 100vh; 27 | padding: 20px 25px; 28 | box-sizing: border-box; 29 | } 30 | 31 | header img { 32 | max-width: 100%; 33 | margin: 10px auto 20px; 34 | } 35 | 36 | a{ 37 | color: #8dc540; 38 | text-decoration: none; 39 | display: block; 40 | } 41 | a:hover, 42 | a.active{ 43 | text-decoration: underline; 44 | } 45 | 46 | main { 47 | display: flex; 48 | margin-left: 30%; 49 | width: 70%; 50 | flex-basis: 70%; 51 | padding: 10px 25px; 52 | box-sizing: border-box; 53 | } 54 | 55 | .form { 56 | width: 100%; 57 | margin-bottom: 200px; 58 | } 59 | 60 | .form div { 61 | margin-bottom: 25px; 62 | } 63 | 64 | .form div label, .form div input { 65 | display: block; 66 | margin-bottom: 10px; 67 | } 68 | 69 | .form input{ 70 | padding: 10px 15px; 71 | width: 100%; 72 | border: 1px solid rgba(0,0,0,1); 73 | border-radius: 60px; 74 | line-height: 20px; 75 | outline: none; 76 | } 77 | 78 | .form button{ 79 | display: inline-block; 80 | min-width: 150px; 81 | max-width: 100%; 82 | padding: 13px 23px; 83 | background-color: #8dc540; 84 | border: 2px solid transparent; 85 | border-radius: 60px; 86 | color: #fff; 87 | font-size: .875rem; 88 | line-height: 20px; 89 | font-weight: 700; 90 | text-transform: uppercase; 91 | text-align: center; 92 | text-decoration: none; 93 | text-shadow: none; 94 | cursor: pointer; 95 | transition: .2s ease-in-out; 96 | } 97 | 98 | .form button:hover{ 99 | transform: scale(1.1,1.1); 100 | } 101 | 102 | #iframe-container iframe{ 103 | height: 300px; 104 | width: 1024px; 105 | max-width: 100%; 106 | border: none; 107 | } 108 | 109 | pre{ 110 | white-space: pre-wrap; 111 | } 112 | -------------------------------------------------------------------------------- /example/src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { render } from 'react-dom' 3 | import { Provider } from 'react-redux' 4 | import { ConnectedRouter } from 'connected-react-router' 5 | 6 | import store, { history } from './store' 7 | import App from './containers/App' 8 | 9 | import 'sanitize.css/sanitize.css' 10 | import './index.css' 11 | 12 | const root = document.querySelector('#root') 13 | 14 | render( 15 | 16 | 17 | 18 | 19 | , 20 | root 21 | ) 22 | -------------------------------------------------------------------------------- /example/src/reducers/index.js: -------------------------------------------------------------------------------- 1 | import { combineReducers } from 'redux' 2 | import { reducer as formReducer } from 'redux-form' 3 | 4 | export default combineReducers({ 5 | form: formReducer 6 | }) 7 | -------------------------------------------------------------------------------- /example/src/store.js: -------------------------------------------------------------------------------- 1 | import { createStore, applyMiddleware, compose } from 'redux' 2 | import { connectRouter, routerMiddleware } from 'connected-react-router' 3 | import thunk from 'redux-thunk' 4 | import * as History from 'history' 5 | import rootReducer from './reducers' 6 | 7 | export const history = History.createBrowserHistory() 8 | 9 | const initialState = {} 10 | const enhancers = [] 11 | const middleware = [thunk, routerMiddleware(history)] 12 | 13 | if (process.env.NODE_ENV === 'development') { 14 | const devToolsExtension = window.__REDUX_DEVTOOLS_EXTENSION__ 15 | 16 | if (typeof devToolsExtension === 'function') { 17 | enhancers.push(devToolsExtension()) 18 | } 19 | } 20 | 21 | const composedEnhancers = compose( 22 | applyMiddleware(...middleware), 23 | ...enhancers 24 | ) 25 | 26 | export default createStore( 27 | connectRouter(history)(rootReducer), 28 | initialState, 29 | composedEnhancers 30 | ) 31 | -------------------------------------------------------------------------------- /example/src/utils/index.js: -------------------------------------------------------------------------------- 1 | export const isEmptyObject = (obj) => { 2 | return Object.entries(obj).length === 0 && obj.constructor === Object 3 | } -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "paymaya-js-sdk", 3 | "version": "2.0.1", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.8.3", 9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", 10 | "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", 11 | "dev": true, 12 | "requires": { 13 | "@babel/highlight": "^7.8.3" 14 | } 15 | }, 16 | "@babel/compat-data": { 17 | "version": "7.8.6", 18 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.8.6.tgz", 19 | "integrity": "sha512-CurCIKPTkS25Mb8mz267vU95vy+TyUpnctEX2lV33xWNmHAfjruztgiPBbXZRh3xZZy1CYvGx6XfxyTVS+sk7Q==", 20 | "dev": true, 21 | "requires": { 22 | "browserslist": "^4.8.5", 23 | "invariant": "^2.2.4", 24 | "semver": "^5.5.0" 25 | }, 26 | "dependencies": { 27 | "semver": { 28 | "version": "5.7.1", 29 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 30 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 31 | "dev": true 32 | } 33 | } 34 | }, 35 | "@babel/core": { 36 | "version": "7.8.7", 37 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.7.tgz", 38 | "integrity": "sha512-rBlqF3Yko9cynC5CCFy6+K/w2N+Sq/ff2BPy+Krp7rHlABIr5epbA7OxVeKoMHB39LZOp1UY5SuLjy6uWi35yA==", 39 | "dev": true, 40 | "requires": { 41 | "@babel/code-frame": "^7.8.3", 42 | "@babel/generator": "^7.8.7", 43 | "@babel/helpers": "^7.8.4", 44 | "@babel/parser": "^7.8.7", 45 | "@babel/template": "^7.8.6", 46 | "@babel/traverse": "^7.8.6", 47 | "@babel/types": "^7.8.7", 48 | "convert-source-map": "^1.7.0", 49 | "debug": "^4.1.0", 50 | "gensync": "^1.0.0-beta.1", 51 | "json5": "^2.1.0", 52 | "lodash": "^4.17.13", 53 | "resolve": "^1.3.2", 54 | "semver": "^5.4.1", 55 | "source-map": "^0.5.0" 56 | }, 57 | "dependencies": { 58 | "semver": { 59 | "version": "5.7.1", 60 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 61 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 62 | "dev": true 63 | }, 64 | "source-map": { 65 | "version": "0.5.7", 66 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 67 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 68 | "dev": true 69 | } 70 | } 71 | }, 72 | "@babel/generator": { 73 | "version": "7.8.7", 74 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.7.tgz", 75 | "integrity": "sha512-DQwjiKJqH4C3qGiyQCAExJHoZssn49JTMJgZ8SANGgVFdkupcUhLOdkAeoC6kmHZCPfoDG5M0b6cFlSN5wW7Ew==", 76 | "dev": true, 77 | "requires": { 78 | "@babel/types": "^7.8.7", 79 | "jsesc": "^2.5.1", 80 | "lodash": "^4.17.13", 81 | "source-map": "^0.5.0" 82 | }, 83 | "dependencies": { 84 | "source-map": { 85 | "version": "0.5.7", 86 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 87 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 88 | "dev": true 89 | } 90 | } 91 | }, 92 | "@babel/helper-annotate-as-pure": { 93 | "version": "7.8.3", 94 | "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz", 95 | "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==", 96 | "dev": true, 97 | "requires": { 98 | "@babel/types": "^7.8.3" 99 | } 100 | }, 101 | "@babel/helper-builder-binary-assignment-operator-visitor": { 102 | "version": "7.8.3", 103 | "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz", 104 | "integrity": "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==", 105 | "dev": true, 106 | "requires": { 107 | "@babel/helper-explode-assignable-expression": "^7.8.3", 108 | "@babel/types": "^7.8.3" 109 | } 110 | }, 111 | "@babel/helper-call-delegate": { 112 | "version": "7.8.7", 113 | "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.8.7.tgz", 114 | "integrity": "sha512-doAA5LAKhsFCR0LAFIf+r2RSMmC+m8f/oQ+URnUET/rWeEzC0yTRmAGyWkD4sSu3xwbS7MYQ2u+xlt1V5R56KQ==", 115 | "dev": true, 116 | "requires": { 117 | "@babel/helper-hoist-variables": "^7.8.3", 118 | "@babel/traverse": "^7.8.3", 119 | "@babel/types": "^7.8.7" 120 | } 121 | }, 122 | "@babel/helper-compilation-targets": { 123 | "version": "7.8.7", 124 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.7.tgz", 125 | "integrity": "sha512-4mWm8DCK2LugIS+p1yArqvG1Pf162upsIsjE7cNBjez+NjliQpVhj20obE520nao0o14DaTnFJv+Fw5a0JpoUw==", 126 | "dev": true, 127 | "requires": { 128 | "@babel/compat-data": "^7.8.6", 129 | "browserslist": "^4.9.1", 130 | "invariant": "^2.2.4", 131 | "levenary": "^1.1.1", 132 | "semver": "^5.5.0" 133 | }, 134 | "dependencies": { 135 | "semver": { 136 | "version": "5.7.1", 137 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 138 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 139 | "dev": true 140 | } 141 | } 142 | }, 143 | "@babel/helper-create-regexp-features-plugin": { 144 | "version": "7.8.6", 145 | "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.6.tgz", 146 | "integrity": "sha512-bPyujWfsHhV/ztUkwGHz/RPV1T1TDEsSZDsN42JPehndA+p1KKTh3npvTadux0ZhCrytx9tvjpWNowKby3tM6A==", 147 | "dev": true, 148 | "requires": { 149 | "@babel/helper-annotate-as-pure": "^7.8.3", 150 | "@babel/helper-regex": "^7.8.3", 151 | "regexpu-core": "^4.6.0" 152 | } 153 | }, 154 | "@babel/helper-define-map": { 155 | "version": "7.8.3", 156 | "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz", 157 | "integrity": "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==", 158 | "dev": true, 159 | "requires": { 160 | "@babel/helper-function-name": "^7.8.3", 161 | "@babel/types": "^7.8.3", 162 | "lodash": "^4.17.13" 163 | } 164 | }, 165 | "@babel/helper-explode-assignable-expression": { 166 | "version": "7.8.3", 167 | "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz", 168 | "integrity": "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==", 169 | "dev": true, 170 | "requires": { 171 | "@babel/traverse": "^7.8.3", 172 | "@babel/types": "^7.8.3" 173 | } 174 | }, 175 | "@babel/helper-function-name": { 176 | "version": "7.8.3", 177 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", 178 | "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", 179 | "dev": true, 180 | "requires": { 181 | "@babel/helper-get-function-arity": "^7.8.3", 182 | "@babel/template": "^7.8.3", 183 | "@babel/types": "^7.8.3" 184 | } 185 | }, 186 | "@babel/helper-get-function-arity": { 187 | "version": "7.8.3", 188 | "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", 189 | "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", 190 | "dev": true, 191 | "requires": { 192 | "@babel/types": "^7.8.3" 193 | } 194 | }, 195 | "@babel/helper-hoist-variables": { 196 | "version": "7.8.3", 197 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz", 198 | "integrity": "sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==", 199 | "dev": true, 200 | "requires": { 201 | "@babel/types": "^7.8.3" 202 | } 203 | }, 204 | "@babel/helper-member-expression-to-functions": { 205 | "version": "7.8.3", 206 | "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz", 207 | "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==", 208 | "dev": true, 209 | "requires": { 210 | "@babel/types": "^7.8.3" 211 | } 212 | }, 213 | "@babel/helper-module-imports": { 214 | "version": "7.8.3", 215 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", 216 | "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", 217 | "dev": true, 218 | "requires": { 219 | "@babel/types": "^7.8.3" 220 | } 221 | }, 222 | "@babel/helper-module-transforms": { 223 | "version": "7.8.6", 224 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.8.6.tgz", 225 | "integrity": "sha512-RDnGJSR5EFBJjG3deY0NiL0K9TO8SXxS9n/MPsbPK/s9LbQymuLNtlzvDiNS7IpecuL45cMeLVkA+HfmlrnkRg==", 226 | "dev": true, 227 | "requires": { 228 | "@babel/helper-module-imports": "^7.8.3", 229 | "@babel/helper-replace-supers": "^7.8.6", 230 | "@babel/helper-simple-access": "^7.8.3", 231 | "@babel/helper-split-export-declaration": "^7.8.3", 232 | "@babel/template": "^7.8.6", 233 | "@babel/types": "^7.8.6", 234 | "lodash": "^4.17.13" 235 | } 236 | }, 237 | "@babel/helper-optimise-call-expression": { 238 | "version": "7.8.3", 239 | "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz", 240 | "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==", 241 | "dev": true, 242 | "requires": { 243 | "@babel/types": "^7.8.3" 244 | } 245 | }, 246 | "@babel/helper-plugin-utils": { 247 | "version": "7.8.3", 248 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", 249 | "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", 250 | "dev": true 251 | }, 252 | "@babel/helper-regex": { 253 | "version": "7.8.3", 254 | "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz", 255 | "integrity": "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==", 256 | "dev": true, 257 | "requires": { 258 | "lodash": "^4.17.13" 259 | } 260 | }, 261 | "@babel/helper-remap-async-to-generator": { 262 | "version": "7.8.3", 263 | "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz", 264 | "integrity": "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==", 265 | "dev": true, 266 | "requires": { 267 | "@babel/helper-annotate-as-pure": "^7.8.3", 268 | "@babel/helper-wrap-function": "^7.8.3", 269 | "@babel/template": "^7.8.3", 270 | "@babel/traverse": "^7.8.3", 271 | "@babel/types": "^7.8.3" 272 | } 273 | }, 274 | "@babel/helper-replace-supers": { 275 | "version": "7.8.6", 276 | "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz", 277 | "integrity": "sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==", 278 | "dev": true, 279 | "requires": { 280 | "@babel/helper-member-expression-to-functions": "^7.8.3", 281 | "@babel/helper-optimise-call-expression": "^7.8.3", 282 | "@babel/traverse": "^7.8.6", 283 | "@babel/types": "^7.8.6" 284 | } 285 | }, 286 | "@babel/helper-simple-access": { 287 | "version": "7.8.3", 288 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz", 289 | "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==", 290 | "dev": true, 291 | "requires": { 292 | "@babel/template": "^7.8.3", 293 | "@babel/types": "^7.8.3" 294 | } 295 | }, 296 | "@babel/helper-split-export-declaration": { 297 | "version": "7.8.3", 298 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", 299 | "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", 300 | "dev": true, 301 | "requires": { 302 | "@babel/types": "^7.8.3" 303 | } 304 | }, 305 | "@babel/helper-validator-identifier": { 306 | "version": "7.10.4", 307 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", 308 | "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", 309 | "dev": true 310 | }, 311 | "@babel/helper-wrap-function": { 312 | "version": "7.8.3", 313 | "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", 314 | "integrity": "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==", 315 | "dev": true, 316 | "requires": { 317 | "@babel/helper-function-name": "^7.8.3", 318 | "@babel/template": "^7.8.3", 319 | "@babel/traverse": "^7.8.3", 320 | "@babel/types": "^7.8.3" 321 | } 322 | }, 323 | "@babel/helpers": { 324 | "version": "7.8.4", 325 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.4.tgz", 326 | "integrity": "sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w==", 327 | "dev": true, 328 | "requires": { 329 | "@babel/template": "^7.8.3", 330 | "@babel/traverse": "^7.8.4", 331 | "@babel/types": "^7.8.3" 332 | } 333 | }, 334 | "@babel/highlight": { 335 | "version": "7.8.3", 336 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", 337 | "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", 338 | "dev": true, 339 | "requires": { 340 | "chalk": "^2.0.0", 341 | "esutils": "^2.0.2", 342 | "js-tokens": "^4.0.0" 343 | } 344 | }, 345 | "@babel/parser": { 346 | "version": "7.8.7", 347 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.7.tgz", 348 | "integrity": "sha512-9JWls8WilDXFGxs0phaXAZgpxTZhSk/yOYH2hTHC0X1yC7Z78IJfvR1vJ+rmJKq3I35td2XzXzN6ZLYlna+r/A==", 349 | "dev": true 350 | }, 351 | "@babel/plugin-proposal-async-generator-functions": { 352 | "version": "7.8.3", 353 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz", 354 | "integrity": "sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==", 355 | "dev": true, 356 | "requires": { 357 | "@babel/helper-plugin-utils": "^7.8.3", 358 | "@babel/helper-remap-async-to-generator": "^7.8.3", 359 | "@babel/plugin-syntax-async-generators": "^7.8.0" 360 | } 361 | }, 362 | "@babel/plugin-proposal-dynamic-import": { 363 | "version": "7.8.3", 364 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz", 365 | "integrity": "sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w==", 366 | "dev": true, 367 | "requires": { 368 | "@babel/helper-plugin-utils": "^7.8.3", 369 | "@babel/plugin-syntax-dynamic-import": "^7.8.0" 370 | } 371 | }, 372 | "@babel/plugin-proposal-json-strings": { 373 | "version": "7.8.3", 374 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz", 375 | "integrity": "sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==", 376 | "dev": true, 377 | "requires": { 378 | "@babel/helper-plugin-utils": "^7.8.3", 379 | "@babel/plugin-syntax-json-strings": "^7.8.0" 380 | } 381 | }, 382 | "@babel/plugin-proposal-nullish-coalescing-operator": { 383 | "version": "7.8.3", 384 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz", 385 | "integrity": "sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==", 386 | "dev": true, 387 | "requires": { 388 | "@babel/helper-plugin-utils": "^7.8.3", 389 | "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" 390 | } 391 | }, 392 | "@babel/plugin-proposal-object-rest-spread": { 393 | "version": "7.8.3", 394 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz", 395 | "integrity": "sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA==", 396 | "dev": true, 397 | "requires": { 398 | "@babel/helper-plugin-utils": "^7.8.3", 399 | "@babel/plugin-syntax-object-rest-spread": "^7.8.0" 400 | } 401 | }, 402 | "@babel/plugin-proposal-optional-catch-binding": { 403 | "version": "7.8.3", 404 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz", 405 | "integrity": "sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==", 406 | "dev": true, 407 | "requires": { 408 | "@babel/helper-plugin-utils": "^7.8.3", 409 | "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" 410 | } 411 | }, 412 | "@babel/plugin-proposal-optional-chaining": { 413 | "version": "7.8.3", 414 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz", 415 | "integrity": "sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg==", 416 | "dev": true, 417 | "requires": { 418 | "@babel/helper-plugin-utils": "^7.8.3", 419 | "@babel/plugin-syntax-optional-chaining": "^7.8.0" 420 | } 421 | }, 422 | "@babel/plugin-proposal-unicode-property-regex": { 423 | "version": "7.8.3", 424 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.3.tgz", 425 | "integrity": "sha512-1/1/rEZv2XGweRwwSkLpY+s60za9OZ1hJs4YDqFHCw0kYWYwL5IFljVY1MYBL+weT1l9pokDO2uhSTLVxzoHkQ==", 426 | "dev": true, 427 | "requires": { 428 | "@babel/helper-create-regexp-features-plugin": "^7.8.3", 429 | "@babel/helper-plugin-utils": "^7.8.3" 430 | } 431 | }, 432 | "@babel/plugin-syntax-async-generators": { 433 | "version": "7.8.4", 434 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", 435 | "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", 436 | "dev": true, 437 | "requires": { 438 | "@babel/helper-plugin-utils": "^7.8.0" 439 | } 440 | }, 441 | "@babel/plugin-syntax-dynamic-import": { 442 | "version": "7.8.3", 443 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", 444 | "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", 445 | "dev": true, 446 | "requires": { 447 | "@babel/helper-plugin-utils": "^7.8.0" 448 | } 449 | }, 450 | "@babel/plugin-syntax-json-strings": { 451 | "version": "7.8.3", 452 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", 453 | "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", 454 | "dev": true, 455 | "requires": { 456 | "@babel/helper-plugin-utils": "^7.8.0" 457 | } 458 | }, 459 | "@babel/plugin-syntax-nullish-coalescing-operator": { 460 | "version": "7.8.3", 461 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", 462 | "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", 463 | "dev": true, 464 | "requires": { 465 | "@babel/helper-plugin-utils": "^7.8.0" 466 | } 467 | }, 468 | "@babel/plugin-syntax-object-rest-spread": { 469 | "version": "7.8.3", 470 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", 471 | "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", 472 | "dev": true, 473 | "requires": { 474 | "@babel/helper-plugin-utils": "^7.8.0" 475 | } 476 | }, 477 | "@babel/plugin-syntax-optional-catch-binding": { 478 | "version": "7.8.3", 479 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", 480 | "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", 481 | "dev": true, 482 | "requires": { 483 | "@babel/helper-plugin-utils": "^7.8.0" 484 | } 485 | }, 486 | "@babel/plugin-syntax-optional-chaining": { 487 | "version": "7.8.3", 488 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", 489 | "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", 490 | "dev": true, 491 | "requires": { 492 | "@babel/helper-plugin-utils": "^7.8.0" 493 | } 494 | }, 495 | "@babel/plugin-syntax-top-level-await": { 496 | "version": "7.8.3", 497 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz", 498 | "integrity": "sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g==", 499 | "dev": true, 500 | "requires": { 501 | "@babel/helper-plugin-utils": "^7.8.3" 502 | } 503 | }, 504 | "@babel/plugin-transform-arrow-functions": { 505 | "version": "7.8.3", 506 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz", 507 | "integrity": "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==", 508 | "dev": true, 509 | "requires": { 510 | "@babel/helper-plugin-utils": "^7.8.3" 511 | } 512 | }, 513 | "@babel/plugin-transform-async-to-generator": { 514 | "version": "7.8.3", 515 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz", 516 | "integrity": "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==", 517 | "dev": true, 518 | "requires": { 519 | "@babel/helper-module-imports": "^7.8.3", 520 | "@babel/helper-plugin-utils": "^7.8.3", 521 | "@babel/helper-remap-async-to-generator": "^7.8.3" 522 | } 523 | }, 524 | "@babel/plugin-transform-block-scoped-functions": { 525 | "version": "7.8.3", 526 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz", 527 | "integrity": "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==", 528 | "dev": true, 529 | "requires": { 530 | "@babel/helper-plugin-utils": "^7.8.3" 531 | } 532 | }, 533 | "@babel/plugin-transform-block-scoping": { 534 | "version": "7.8.3", 535 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz", 536 | "integrity": "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==", 537 | "dev": true, 538 | "requires": { 539 | "@babel/helper-plugin-utils": "^7.8.3", 540 | "lodash": "^4.17.13" 541 | } 542 | }, 543 | "@babel/plugin-transform-classes": { 544 | "version": "7.8.6", 545 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.6.tgz", 546 | "integrity": "sha512-k9r8qRay/R6v5aWZkrEclEhKO6mc1CCQr2dLsVHBmOQiMpN6I2bpjX3vgnldUWeEI1GHVNByULVxZ4BdP4Hmdg==", 547 | "dev": true, 548 | "requires": { 549 | "@babel/helper-annotate-as-pure": "^7.8.3", 550 | "@babel/helper-define-map": "^7.8.3", 551 | "@babel/helper-function-name": "^7.8.3", 552 | "@babel/helper-optimise-call-expression": "^7.8.3", 553 | "@babel/helper-plugin-utils": "^7.8.3", 554 | "@babel/helper-replace-supers": "^7.8.6", 555 | "@babel/helper-split-export-declaration": "^7.8.3", 556 | "globals": "^11.1.0" 557 | } 558 | }, 559 | "@babel/plugin-transform-computed-properties": { 560 | "version": "7.8.3", 561 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz", 562 | "integrity": "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==", 563 | "dev": true, 564 | "requires": { 565 | "@babel/helper-plugin-utils": "^7.8.3" 566 | } 567 | }, 568 | "@babel/plugin-transform-destructuring": { 569 | "version": "7.8.3", 570 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.3.tgz", 571 | "integrity": "sha512-H4X646nCkiEcHZUZaRkhE2XVsoz0J/1x3VVujnn96pSoGCtKPA99ZZA+va+gK+92Zycd6OBKCD8tDb/731bhgQ==", 572 | "dev": true, 573 | "requires": { 574 | "@babel/helper-plugin-utils": "^7.8.3" 575 | } 576 | }, 577 | "@babel/plugin-transform-dotall-regex": { 578 | "version": "7.8.3", 579 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz", 580 | "integrity": "sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==", 581 | "dev": true, 582 | "requires": { 583 | "@babel/helper-create-regexp-features-plugin": "^7.8.3", 584 | "@babel/helper-plugin-utils": "^7.8.3" 585 | } 586 | }, 587 | "@babel/plugin-transform-duplicate-keys": { 588 | "version": "7.8.3", 589 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz", 590 | "integrity": "sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==", 591 | "dev": true, 592 | "requires": { 593 | "@babel/helper-plugin-utils": "^7.8.3" 594 | } 595 | }, 596 | "@babel/plugin-transform-exponentiation-operator": { 597 | "version": "7.8.3", 598 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz", 599 | "integrity": "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==", 600 | "dev": true, 601 | "requires": { 602 | "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3", 603 | "@babel/helper-plugin-utils": "^7.8.3" 604 | } 605 | }, 606 | "@babel/plugin-transform-for-of": { 607 | "version": "7.8.6", 608 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.6.tgz", 609 | "integrity": "sha512-M0pw4/1/KI5WAxPsdcUL/w2LJ7o89YHN3yLkzNjg7Yl15GlVGgzHyCU+FMeAxevHGsLVmUqbirlUIKTafPmzdw==", 610 | "dev": true, 611 | "requires": { 612 | "@babel/helper-plugin-utils": "^7.8.3" 613 | } 614 | }, 615 | "@babel/plugin-transform-function-name": { 616 | "version": "7.8.3", 617 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz", 618 | "integrity": "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==", 619 | "dev": true, 620 | "requires": { 621 | "@babel/helper-function-name": "^7.8.3", 622 | "@babel/helper-plugin-utils": "^7.8.3" 623 | } 624 | }, 625 | "@babel/plugin-transform-literals": { 626 | "version": "7.8.3", 627 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz", 628 | "integrity": "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==", 629 | "dev": true, 630 | "requires": { 631 | "@babel/helper-plugin-utils": "^7.8.3" 632 | } 633 | }, 634 | "@babel/plugin-transform-member-expression-literals": { 635 | "version": "7.8.3", 636 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz", 637 | "integrity": "sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA==", 638 | "dev": true, 639 | "requires": { 640 | "@babel/helper-plugin-utils": "^7.8.3" 641 | } 642 | }, 643 | "@babel/plugin-transform-modules-amd": { 644 | "version": "7.8.3", 645 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz", 646 | "integrity": "sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ==", 647 | "dev": true, 648 | "requires": { 649 | "@babel/helper-module-transforms": "^7.8.3", 650 | "@babel/helper-plugin-utils": "^7.8.3", 651 | "babel-plugin-dynamic-import-node": "^2.3.0" 652 | } 653 | }, 654 | "@babel/plugin-transform-modules-commonjs": { 655 | "version": "7.8.3", 656 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz", 657 | "integrity": "sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg==", 658 | "dev": true, 659 | "requires": { 660 | "@babel/helper-module-transforms": "^7.8.3", 661 | "@babel/helper-plugin-utils": "^7.8.3", 662 | "@babel/helper-simple-access": "^7.8.3", 663 | "babel-plugin-dynamic-import-node": "^2.3.0" 664 | } 665 | }, 666 | "@babel/plugin-transform-modules-systemjs": { 667 | "version": "7.8.3", 668 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz", 669 | "integrity": "sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg==", 670 | "dev": true, 671 | "requires": { 672 | "@babel/helper-hoist-variables": "^7.8.3", 673 | "@babel/helper-module-transforms": "^7.8.3", 674 | "@babel/helper-plugin-utils": "^7.8.3", 675 | "babel-plugin-dynamic-import-node": "^2.3.0" 676 | } 677 | }, 678 | "@babel/plugin-transform-modules-umd": { 679 | "version": "7.8.3", 680 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz", 681 | "integrity": "sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw==", 682 | "dev": true, 683 | "requires": { 684 | "@babel/helper-module-transforms": "^7.8.3", 685 | "@babel/helper-plugin-utils": "^7.8.3" 686 | } 687 | }, 688 | "@babel/plugin-transform-named-capturing-groups-regex": { 689 | "version": "7.8.3", 690 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz", 691 | "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==", 692 | "dev": true, 693 | "requires": { 694 | "@babel/helper-create-regexp-features-plugin": "^7.8.3" 695 | } 696 | }, 697 | "@babel/plugin-transform-new-target": { 698 | "version": "7.8.3", 699 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz", 700 | "integrity": "sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==", 701 | "dev": true, 702 | "requires": { 703 | "@babel/helper-plugin-utils": "^7.8.3" 704 | } 705 | }, 706 | "@babel/plugin-transform-object-super": { 707 | "version": "7.8.3", 708 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz", 709 | "integrity": "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==", 710 | "dev": true, 711 | "requires": { 712 | "@babel/helper-plugin-utils": "^7.8.3", 713 | "@babel/helper-replace-supers": "^7.8.3" 714 | } 715 | }, 716 | "@babel/plugin-transform-parameters": { 717 | "version": "7.8.7", 718 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.7.tgz", 719 | "integrity": "sha512-brYWaEPTRimOctz2NDA3jnBbDi7SVN2T4wYuu0aqSzxC3nozFZngGaw29CJ9ZPweB7k+iFmZuoG3IVPIcXmD2g==", 720 | "dev": true, 721 | "requires": { 722 | "@babel/helper-call-delegate": "^7.8.7", 723 | "@babel/helper-get-function-arity": "^7.8.3", 724 | "@babel/helper-plugin-utils": "^7.8.3" 725 | } 726 | }, 727 | "@babel/plugin-transform-property-literals": { 728 | "version": "7.8.3", 729 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz", 730 | "integrity": "sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg==", 731 | "dev": true, 732 | "requires": { 733 | "@babel/helper-plugin-utils": "^7.8.3" 734 | } 735 | }, 736 | "@babel/plugin-transform-regenerator": { 737 | "version": "7.8.7", 738 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz", 739 | "integrity": "sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA==", 740 | "dev": true, 741 | "requires": { 742 | "regenerator-transform": "^0.14.2" 743 | } 744 | }, 745 | "@babel/plugin-transform-reserved-words": { 746 | "version": "7.8.3", 747 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz", 748 | "integrity": "sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A==", 749 | "dev": true, 750 | "requires": { 751 | "@babel/helper-plugin-utils": "^7.8.3" 752 | } 753 | }, 754 | "@babel/plugin-transform-shorthand-properties": { 755 | "version": "7.8.3", 756 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz", 757 | "integrity": "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==", 758 | "dev": true, 759 | "requires": { 760 | "@babel/helper-plugin-utils": "^7.8.3" 761 | } 762 | }, 763 | "@babel/plugin-transform-spread": { 764 | "version": "7.8.3", 765 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz", 766 | "integrity": "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==", 767 | "dev": true, 768 | "requires": { 769 | "@babel/helper-plugin-utils": "^7.8.3" 770 | } 771 | }, 772 | "@babel/plugin-transform-sticky-regex": { 773 | "version": "7.8.3", 774 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz", 775 | "integrity": "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==", 776 | "dev": true, 777 | "requires": { 778 | "@babel/helper-plugin-utils": "^7.8.3", 779 | "@babel/helper-regex": "^7.8.3" 780 | } 781 | }, 782 | "@babel/plugin-transform-template-literals": { 783 | "version": "7.8.3", 784 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz", 785 | "integrity": "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==", 786 | "dev": true, 787 | "requires": { 788 | "@babel/helper-annotate-as-pure": "^7.8.3", 789 | "@babel/helper-plugin-utils": "^7.8.3" 790 | } 791 | }, 792 | "@babel/plugin-transform-typeof-symbol": { 793 | "version": "7.8.4", 794 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz", 795 | "integrity": "sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==", 796 | "dev": true, 797 | "requires": { 798 | "@babel/helper-plugin-utils": "^7.8.3" 799 | } 800 | }, 801 | "@babel/plugin-transform-unicode-regex": { 802 | "version": "7.8.3", 803 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz", 804 | "integrity": "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==", 805 | "dev": true, 806 | "requires": { 807 | "@babel/helper-create-regexp-features-plugin": "^7.8.3", 808 | "@babel/helper-plugin-utils": "^7.8.3" 809 | } 810 | }, 811 | "@babel/preset-env": { 812 | "version": "7.8.7", 813 | "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.7.tgz", 814 | "integrity": "sha512-BYftCVOdAYJk5ASsznKAUl53EMhfBbr8CJ1X+AJLfGPscQkwJFiaV/Wn9DPH/7fzm2v6iRYJKYHSqyynTGw0nw==", 815 | "dev": true, 816 | "requires": { 817 | "@babel/compat-data": "^7.8.6", 818 | "@babel/helper-compilation-targets": "^7.8.7", 819 | "@babel/helper-module-imports": "^7.8.3", 820 | "@babel/helper-plugin-utils": "^7.8.3", 821 | "@babel/plugin-proposal-async-generator-functions": "^7.8.3", 822 | "@babel/plugin-proposal-dynamic-import": "^7.8.3", 823 | "@babel/plugin-proposal-json-strings": "^7.8.3", 824 | "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", 825 | "@babel/plugin-proposal-object-rest-spread": "^7.8.3", 826 | "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", 827 | "@babel/plugin-proposal-optional-chaining": "^7.8.3", 828 | "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", 829 | "@babel/plugin-syntax-async-generators": "^7.8.0", 830 | "@babel/plugin-syntax-dynamic-import": "^7.8.0", 831 | "@babel/plugin-syntax-json-strings": "^7.8.0", 832 | "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", 833 | "@babel/plugin-syntax-object-rest-spread": "^7.8.0", 834 | "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", 835 | "@babel/plugin-syntax-optional-chaining": "^7.8.0", 836 | "@babel/plugin-syntax-top-level-await": "^7.8.3", 837 | "@babel/plugin-transform-arrow-functions": "^7.8.3", 838 | "@babel/plugin-transform-async-to-generator": "^7.8.3", 839 | "@babel/plugin-transform-block-scoped-functions": "^7.8.3", 840 | "@babel/plugin-transform-block-scoping": "^7.8.3", 841 | "@babel/plugin-transform-classes": "^7.8.6", 842 | "@babel/plugin-transform-computed-properties": "^7.8.3", 843 | "@babel/plugin-transform-destructuring": "^7.8.3", 844 | "@babel/plugin-transform-dotall-regex": "^7.8.3", 845 | "@babel/plugin-transform-duplicate-keys": "^7.8.3", 846 | "@babel/plugin-transform-exponentiation-operator": "^7.8.3", 847 | "@babel/plugin-transform-for-of": "^7.8.6", 848 | "@babel/plugin-transform-function-name": "^7.8.3", 849 | "@babel/plugin-transform-literals": "^7.8.3", 850 | "@babel/plugin-transform-member-expression-literals": "^7.8.3", 851 | "@babel/plugin-transform-modules-amd": "^7.8.3", 852 | "@babel/plugin-transform-modules-commonjs": "^7.8.3", 853 | "@babel/plugin-transform-modules-systemjs": "^7.8.3", 854 | "@babel/plugin-transform-modules-umd": "^7.8.3", 855 | "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", 856 | "@babel/plugin-transform-new-target": "^7.8.3", 857 | "@babel/plugin-transform-object-super": "^7.8.3", 858 | "@babel/plugin-transform-parameters": "^7.8.7", 859 | "@babel/plugin-transform-property-literals": "^7.8.3", 860 | "@babel/plugin-transform-regenerator": "^7.8.7", 861 | "@babel/plugin-transform-reserved-words": "^7.8.3", 862 | "@babel/plugin-transform-shorthand-properties": "^7.8.3", 863 | "@babel/plugin-transform-spread": "^7.8.3", 864 | "@babel/plugin-transform-sticky-regex": "^7.8.3", 865 | "@babel/plugin-transform-template-literals": "^7.8.3", 866 | "@babel/plugin-transform-typeof-symbol": "^7.8.4", 867 | "@babel/plugin-transform-unicode-regex": "^7.8.3", 868 | "@babel/types": "^7.8.7", 869 | "browserslist": "^4.8.5", 870 | "core-js-compat": "^3.6.2", 871 | "invariant": "^2.2.2", 872 | "levenary": "^1.1.1", 873 | "semver": "^5.5.0" 874 | }, 875 | "dependencies": { 876 | "semver": { 877 | "version": "5.7.1", 878 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 879 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 880 | "dev": true 881 | } 882 | } 883 | }, 884 | "@babel/runtime": { 885 | "version": "7.8.7", 886 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.7.tgz", 887 | "integrity": "sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg==", 888 | "dev": true, 889 | "requires": { 890 | "regenerator-runtime": "^0.13.4" 891 | } 892 | }, 893 | "@babel/template": { 894 | "version": "7.8.6", 895 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", 896 | "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", 897 | "dev": true, 898 | "requires": { 899 | "@babel/code-frame": "^7.8.3", 900 | "@babel/parser": "^7.8.6", 901 | "@babel/types": "^7.8.6" 902 | } 903 | }, 904 | "@babel/traverse": { 905 | "version": "7.8.6", 906 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.6.tgz", 907 | "integrity": "sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A==", 908 | "dev": true, 909 | "requires": { 910 | "@babel/code-frame": "^7.8.3", 911 | "@babel/generator": "^7.8.6", 912 | "@babel/helper-function-name": "^7.8.3", 913 | "@babel/helper-split-export-declaration": "^7.8.3", 914 | "@babel/parser": "^7.8.6", 915 | "@babel/types": "^7.8.6", 916 | "debug": "^4.1.0", 917 | "globals": "^11.1.0", 918 | "lodash": "^4.17.13" 919 | } 920 | }, 921 | "@babel/types": { 922 | "version": "7.8.7", 923 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", 924 | "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", 925 | "dev": true, 926 | "requires": { 927 | "esutils": "^2.0.2", 928 | "lodash": "^4.17.13", 929 | "to-fast-properties": "^2.0.0" 930 | } 931 | }, 932 | "@types/estree": { 933 | "version": "0.0.42", 934 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.42.tgz", 935 | "integrity": "sha512-K1DPVvnBCPxzD+G51/cxVIoc2X8uUVl1zpJeE6iKcgHMj4+tbat5Xu4TjV7v2QSDbIeAfLi2hIk+u2+s0MlpUQ==", 936 | "dev": true 937 | }, 938 | "@types/node": { 939 | "version": "13.7.7", 940 | "resolved": "https://registry.npmjs.org/@types/node/-/node-13.7.7.tgz", 941 | "integrity": "sha512-Uo4chgKbnPNlxQwoFmYIwctkQVkMMmsAoGGU4JKwLuvBefF0pCq4FybNSnfkfRCpC7ZW7kttcC/TrRtAJsvGtg==", 942 | "dev": true 943 | }, 944 | "@types/resolve": { 945 | "version": "0.0.8", 946 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", 947 | "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", 948 | "dev": true, 949 | "requires": { 950 | "@types/node": "*" 951 | } 952 | }, 953 | "acorn": { 954 | "version": "7.1.1", 955 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", 956 | "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", 957 | "dev": true 958 | }, 959 | "ansi-styles": { 960 | "version": "3.2.1", 961 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 962 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 963 | "dev": true, 964 | "requires": { 965 | "color-convert": "^1.9.0" 966 | } 967 | }, 968 | "babel-plugin-dynamic-import-node": { 969 | "version": "2.3.0", 970 | "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", 971 | "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", 972 | "dev": true, 973 | "requires": { 974 | "object.assign": "^4.1.0" 975 | } 976 | }, 977 | "browserslist": { 978 | "version": "4.9.1", 979 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.9.1.tgz", 980 | "integrity": "sha512-Q0DnKq20End3raFulq6Vfp1ecB9fh8yUNV55s8sekaDDeqBaCtWlRHCUdaWyUeSSBJM7IbM6HcsyaeYqgeDhnw==", 981 | "dev": true, 982 | "requires": { 983 | "caniuse-lite": "^1.0.30001030", 984 | "electron-to-chromium": "^1.3.363", 985 | "node-releases": "^1.1.50" 986 | } 987 | }, 988 | "buffer-from": { 989 | "version": "1.1.1", 990 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 991 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 992 | "dev": true 993 | }, 994 | "builtin-modules": { 995 | "version": "3.1.0", 996 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", 997 | "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", 998 | "dev": true 999 | }, 1000 | "caniuse-lite": { 1001 | "version": "1.0.30001032", 1002 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001032.tgz", 1003 | "integrity": "sha512-8joOm7BwcpEN4BfVHtfh0hBXSAPVYk+eUIcNntGtMkUWy/6AKRCDZINCLe3kB1vHhT2vBxBF85Hh9VlPXi/qjA==", 1004 | "dev": true 1005 | }, 1006 | "chalk": { 1007 | "version": "2.4.2", 1008 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1009 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1010 | "dev": true, 1011 | "requires": { 1012 | "ansi-styles": "^3.2.1", 1013 | "escape-string-regexp": "^1.0.5", 1014 | "supports-color": "^5.3.0" 1015 | } 1016 | }, 1017 | "color-convert": { 1018 | "version": "1.9.3", 1019 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1020 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1021 | "dev": true, 1022 | "requires": { 1023 | "color-name": "1.1.3" 1024 | } 1025 | }, 1026 | "color-name": { 1027 | "version": "1.1.3", 1028 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1029 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 1030 | "dev": true 1031 | }, 1032 | "commander": { 1033 | "version": "2.20.3", 1034 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 1035 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 1036 | "dev": true 1037 | }, 1038 | "commondir": { 1039 | "version": "1.0.1", 1040 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", 1041 | "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", 1042 | "dev": true 1043 | }, 1044 | "convert-source-map": { 1045 | "version": "1.7.0", 1046 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", 1047 | "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", 1048 | "dev": true, 1049 | "requires": { 1050 | "safe-buffer": "~5.1.1" 1051 | } 1052 | }, 1053 | "core-js-compat": { 1054 | "version": "3.6.4", 1055 | "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.4.tgz", 1056 | "integrity": "sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA==", 1057 | "dev": true, 1058 | "requires": { 1059 | "browserslist": "^4.8.3", 1060 | "semver": "7.0.0" 1061 | }, 1062 | "dependencies": { 1063 | "semver": { 1064 | "version": "7.0.0", 1065 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", 1066 | "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", 1067 | "dev": true 1068 | } 1069 | } 1070 | }, 1071 | "debug": { 1072 | "version": "4.1.1", 1073 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 1074 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 1075 | "dev": true, 1076 | "requires": { 1077 | "ms": "^2.1.1" 1078 | } 1079 | }, 1080 | "define-properties": { 1081 | "version": "1.1.3", 1082 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 1083 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 1084 | "dev": true, 1085 | "requires": { 1086 | "object-keys": "^1.0.12" 1087 | } 1088 | }, 1089 | "electron-to-chromium": { 1090 | "version": "1.3.369", 1091 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.369.tgz", 1092 | "integrity": "sha512-6laJEDffEppIKT01TbyQtNhbdvF8ZfJWuK4L53sQCSiUHv0wSsJOFPvV0E63PZEQUzGcS2ZRSJlM5F4Ol9ffHg==", 1093 | "dev": true 1094 | }, 1095 | "escape-string-regexp": { 1096 | "version": "1.0.5", 1097 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1098 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 1099 | "dev": true 1100 | }, 1101 | "estree-walker": { 1102 | "version": "0.6.1", 1103 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", 1104 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", 1105 | "dev": true 1106 | }, 1107 | "esutils": { 1108 | "version": "2.0.3", 1109 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1110 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1111 | "dev": true 1112 | }, 1113 | "find-cache-dir": { 1114 | "version": "3.3.0", 1115 | "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.0.tgz", 1116 | "integrity": "sha512-PtXtQb7IrD8O+h6Cq1dbpJH5NzD8+9keN1zZ0YlpDzl1PwXEJEBj6u1Xa92t1Hwluoozd9TNKul5Hi2iqpsWwg==", 1117 | "dev": true, 1118 | "requires": { 1119 | "commondir": "^1.0.1", 1120 | "make-dir": "^3.0.2", 1121 | "pkg-dir": "^4.1.0" 1122 | } 1123 | }, 1124 | "find-up": { 1125 | "version": "4.1.0", 1126 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 1127 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 1128 | "dev": true, 1129 | "requires": { 1130 | "locate-path": "^5.0.0", 1131 | "path-exists": "^4.0.0" 1132 | } 1133 | }, 1134 | "fs-extra": { 1135 | "version": "8.1.0", 1136 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 1137 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 1138 | "dev": true, 1139 | "requires": { 1140 | "graceful-fs": "^4.2.0", 1141 | "jsonfile": "^4.0.0", 1142 | "universalify": "^0.1.0" 1143 | } 1144 | }, 1145 | "function-bind": { 1146 | "version": "1.1.1", 1147 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1148 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1149 | "dev": true 1150 | }, 1151 | "gensync": { 1152 | "version": "1.0.0-beta.1", 1153 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", 1154 | "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", 1155 | "dev": true 1156 | }, 1157 | "globals": { 1158 | "version": "11.12.0", 1159 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 1160 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 1161 | "dev": true 1162 | }, 1163 | "graceful-fs": { 1164 | "version": "4.2.3", 1165 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", 1166 | "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", 1167 | "dev": true 1168 | }, 1169 | "has-flag": { 1170 | "version": "3.0.0", 1171 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1172 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1173 | "dev": true 1174 | }, 1175 | "has-symbols": { 1176 | "version": "1.0.1", 1177 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", 1178 | "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", 1179 | "dev": true 1180 | }, 1181 | "invariant": { 1182 | "version": "2.2.4", 1183 | "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", 1184 | "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", 1185 | "dev": true, 1186 | "requires": { 1187 | "loose-envify": "^1.0.0" 1188 | } 1189 | }, 1190 | "is-module": { 1191 | "version": "1.0.0", 1192 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", 1193 | "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", 1194 | "dev": true 1195 | }, 1196 | "is-reference": { 1197 | "version": "1.1.4", 1198 | "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.4.tgz", 1199 | "integrity": "sha512-uJA/CDPO3Tao3GTrxYn6AwkM4nUPJiGGYu5+cB8qbC7WGFlrKZbiRo7SFKxUAEpFUfiHofWCXBUNhvYJMh+6zw==", 1200 | "dev": true, 1201 | "requires": { 1202 | "@types/estree": "0.0.39" 1203 | }, 1204 | "dependencies": { 1205 | "@types/estree": { 1206 | "version": "0.0.39", 1207 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", 1208 | "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", 1209 | "dev": true 1210 | } 1211 | } 1212 | }, 1213 | "jest-worker": { 1214 | "version": "26.3.0", 1215 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.3.0.tgz", 1216 | "integrity": "sha512-Vmpn2F6IASefL+DVBhPzI2J9/GJUsqzomdeN+P+dK8/jKxbh8R3BtFnx3FIta7wYlPU62cpJMJQo4kuOowcMnw==", 1217 | "dev": true, 1218 | "requires": { 1219 | "@types/node": "*", 1220 | "merge-stream": "^2.0.0", 1221 | "supports-color": "^7.0.0" 1222 | }, 1223 | "dependencies": { 1224 | "has-flag": { 1225 | "version": "4.0.0", 1226 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1227 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1228 | "dev": true 1229 | }, 1230 | "supports-color": { 1231 | "version": "7.2.0", 1232 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1233 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1234 | "dev": true, 1235 | "requires": { 1236 | "has-flag": "^4.0.0" 1237 | } 1238 | } 1239 | } 1240 | }, 1241 | "js-tokens": { 1242 | "version": "4.0.0", 1243 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1244 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1245 | "dev": true 1246 | }, 1247 | "jsesc": { 1248 | "version": "2.5.2", 1249 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 1250 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", 1251 | "dev": true 1252 | }, 1253 | "json5": { 1254 | "version": "2.1.1", 1255 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", 1256 | "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", 1257 | "dev": true, 1258 | "requires": { 1259 | "minimist": "^1.2.0" 1260 | } 1261 | }, 1262 | "jsonfile": { 1263 | "version": "4.0.0", 1264 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 1265 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", 1266 | "dev": true, 1267 | "requires": { 1268 | "graceful-fs": "^4.1.6" 1269 | } 1270 | }, 1271 | "leven": { 1272 | "version": "3.1.0", 1273 | "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", 1274 | "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", 1275 | "dev": true 1276 | }, 1277 | "levenary": { 1278 | "version": "1.1.1", 1279 | "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", 1280 | "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", 1281 | "dev": true, 1282 | "requires": { 1283 | "leven": "^3.1.0" 1284 | } 1285 | }, 1286 | "locate-path": { 1287 | "version": "5.0.0", 1288 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 1289 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 1290 | "dev": true, 1291 | "requires": { 1292 | "p-locate": "^4.1.0" 1293 | } 1294 | }, 1295 | "lodash": { 1296 | "version": "4.17.20", 1297 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", 1298 | "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", 1299 | "dev": true 1300 | }, 1301 | "loose-envify": { 1302 | "version": "1.4.0", 1303 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 1304 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 1305 | "dev": true, 1306 | "requires": { 1307 | "js-tokens": "^3.0.0 || ^4.0.0" 1308 | } 1309 | }, 1310 | "magic-string": { 1311 | "version": "0.25.6", 1312 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.6.tgz", 1313 | "integrity": "sha512-3a5LOMSGoCTH5rbqobC2HuDNRtE2glHZ8J7pK+QZYppyWA36yuNpsX994rIY2nCuyP7CZYy7lQq/X2jygiZ89g==", 1314 | "dev": true, 1315 | "requires": { 1316 | "sourcemap-codec": "^1.4.4" 1317 | } 1318 | }, 1319 | "make-dir": { 1320 | "version": "3.0.2", 1321 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.2.tgz", 1322 | "integrity": "sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w==", 1323 | "dev": true, 1324 | "requires": { 1325 | "semver": "^6.0.0" 1326 | } 1327 | }, 1328 | "merge-stream": { 1329 | "version": "2.0.0", 1330 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 1331 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 1332 | "dev": true 1333 | }, 1334 | "minimist": { 1335 | "version": "1.2.5", 1336 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 1337 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 1338 | "dev": true 1339 | }, 1340 | "ms": { 1341 | "version": "2.1.2", 1342 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1343 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1344 | "dev": true 1345 | }, 1346 | "node-releases": { 1347 | "version": "1.1.50", 1348 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.50.tgz", 1349 | "integrity": "sha512-lgAmPv9eYZ0bGwUYAKlr8MG6K4CvWliWqnkcT2P8mMAgVrH3lqfBPorFlxiG1pHQnqmavJZ9vbMXUTNyMLbrgQ==", 1350 | "dev": true, 1351 | "requires": { 1352 | "semver": "^6.3.0" 1353 | } 1354 | }, 1355 | "object-keys": { 1356 | "version": "1.1.1", 1357 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 1358 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 1359 | "dev": true 1360 | }, 1361 | "object.assign": { 1362 | "version": "4.1.0", 1363 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", 1364 | "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", 1365 | "dev": true, 1366 | "requires": { 1367 | "define-properties": "^1.1.2", 1368 | "function-bind": "^1.1.1", 1369 | "has-symbols": "^1.0.0", 1370 | "object-keys": "^1.0.11" 1371 | } 1372 | }, 1373 | "p-limit": { 1374 | "version": "2.2.2", 1375 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", 1376 | "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", 1377 | "dev": true, 1378 | "requires": { 1379 | "p-try": "^2.0.0" 1380 | } 1381 | }, 1382 | "p-locate": { 1383 | "version": "4.1.0", 1384 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 1385 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 1386 | "dev": true, 1387 | "requires": { 1388 | "p-limit": "^2.2.0" 1389 | } 1390 | }, 1391 | "p-try": { 1392 | "version": "2.2.0", 1393 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 1394 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 1395 | "dev": true 1396 | }, 1397 | "path-exists": { 1398 | "version": "4.0.0", 1399 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1400 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 1401 | "dev": true 1402 | }, 1403 | "path-parse": { 1404 | "version": "1.0.6", 1405 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 1406 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 1407 | "dev": true 1408 | }, 1409 | "pkg-dir": { 1410 | "version": "4.2.0", 1411 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", 1412 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", 1413 | "dev": true, 1414 | "requires": { 1415 | "find-up": "^4.0.0" 1416 | } 1417 | }, 1418 | "private": { 1419 | "version": "0.1.8", 1420 | "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", 1421 | "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", 1422 | "dev": true 1423 | }, 1424 | "randombytes": { 1425 | "version": "2.1.0", 1426 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1427 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1428 | "dev": true, 1429 | "requires": { 1430 | "safe-buffer": "^5.1.0" 1431 | } 1432 | }, 1433 | "regenerate": { 1434 | "version": "1.4.0", 1435 | "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", 1436 | "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", 1437 | "dev": true 1438 | }, 1439 | "regenerate-unicode-properties": { 1440 | "version": "8.1.0", 1441 | "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", 1442 | "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", 1443 | "dev": true, 1444 | "requires": { 1445 | "regenerate": "^1.4.0" 1446 | } 1447 | }, 1448 | "regenerator-runtime": { 1449 | "version": "0.13.4", 1450 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.4.tgz", 1451 | "integrity": "sha512-plpwicqEzfEyTQohIKktWigcLzmNStMGwbOUbykx51/29Z3JOGYldaaNGK7ngNXV+UcoqvIMmloZ48Sr74sd+g==", 1452 | "dev": true 1453 | }, 1454 | "regenerator-transform": { 1455 | "version": "0.14.2", 1456 | "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.2.tgz", 1457 | "integrity": "sha512-V4+lGplCM/ikqi5/mkkpJ06e9Bujq1NFmNLvsCs56zg3ZbzrnUzAtizZ24TXxtRX/W2jcdScwQCnbL0CICTFkQ==", 1458 | "dev": true, 1459 | "requires": { 1460 | "@babel/runtime": "^7.8.4", 1461 | "private": "^0.1.8" 1462 | } 1463 | }, 1464 | "regexpu-core": { 1465 | "version": "4.6.0", 1466 | "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", 1467 | "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==", 1468 | "dev": true, 1469 | "requires": { 1470 | "regenerate": "^1.4.0", 1471 | "regenerate-unicode-properties": "^8.1.0", 1472 | "regjsgen": "^0.5.0", 1473 | "regjsparser": "^0.6.0", 1474 | "unicode-match-property-ecmascript": "^1.0.4", 1475 | "unicode-match-property-value-ecmascript": "^1.1.0" 1476 | } 1477 | }, 1478 | "regjsgen": { 1479 | "version": "0.5.1", 1480 | "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", 1481 | "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==", 1482 | "dev": true 1483 | }, 1484 | "regjsparser": { 1485 | "version": "0.6.3", 1486 | "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.3.tgz", 1487 | "integrity": "sha512-8uZvYbnfAtEm9Ab8NTb3hdLwL4g/LQzEYP7Xs27T96abJCCE2d6r3cPZPQEsLKy0vRSGVNG+/zVGtLr86HQduA==", 1488 | "dev": true, 1489 | "requires": { 1490 | "jsesc": "~0.5.0" 1491 | }, 1492 | "dependencies": { 1493 | "jsesc": { 1494 | "version": "0.5.0", 1495 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", 1496 | "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", 1497 | "dev": true 1498 | } 1499 | } 1500 | }, 1501 | "resolve": { 1502 | "version": "1.15.1", 1503 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", 1504 | "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", 1505 | "dev": true, 1506 | "requires": { 1507 | "path-parse": "^1.0.6" 1508 | } 1509 | }, 1510 | "rollup": { 1511 | "version": "1.32.0", 1512 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.32.0.tgz", 1513 | "integrity": "sha512-ab2tF5pdDqm2zuI8j02ceyrJSScl9V2C24FgWQ1v1kTFTu1UrG5H0hpP++mDZlEFyZX4k0chtGEHU2i+pAzBgA==", 1514 | "dev": true, 1515 | "requires": { 1516 | "@types/estree": "*", 1517 | "@types/node": "*", 1518 | "acorn": "^7.1.0" 1519 | } 1520 | }, 1521 | "rollup-plugin-babel": { 1522 | "version": "4.3.3", 1523 | "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.3.3.tgz", 1524 | "integrity": "sha512-tKzWOCmIJD/6aKNz0H1GMM+lW1q9KyFubbWzGiOG540zxPPifnEAHTZwjo0g991Y+DyOZcLqBgqOdqazYE5fkw==", 1525 | "dev": true, 1526 | "requires": { 1527 | "@babel/helper-module-imports": "^7.0.0", 1528 | "rollup-pluginutils": "^2.8.1" 1529 | } 1530 | }, 1531 | "rollup-plugin-commonjs": { 1532 | "version": "10.1.0", 1533 | "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz", 1534 | "integrity": "sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q==", 1535 | "dev": true, 1536 | "requires": { 1537 | "estree-walker": "^0.6.1", 1538 | "is-reference": "^1.1.2", 1539 | "magic-string": "^0.25.2", 1540 | "resolve": "^1.11.0", 1541 | "rollup-pluginutils": "^2.8.1" 1542 | } 1543 | }, 1544 | "rollup-plugin-node-resolve": { 1545 | "version": "5.2.0", 1546 | "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz", 1547 | "integrity": "sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw==", 1548 | "dev": true, 1549 | "requires": { 1550 | "@types/resolve": "0.0.8", 1551 | "builtin-modules": "^3.1.0", 1552 | "is-module": "^1.0.0", 1553 | "resolve": "^1.11.1", 1554 | "rollup-pluginutils": "^2.8.1" 1555 | } 1556 | }, 1557 | "rollup-plugin-terser": { 1558 | "version": "7.0.2", 1559 | "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", 1560 | "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", 1561 | "dev": true, 1562 | "requires": { 1563 | "@babel/code-frame": "^7.10.4", 1564 | "jest-worker": "^26.2.1", 1565 | "serialize-javascript": "^4.0.0", 1566 | "terser": "^5.0.0" 1567 | }, 1568 | "dependencies": { 1569 | "@babel/code-frame": { 1570 | "version": "7.10.4", 1571 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", 1572 | "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", 1573 | "dev": true, 1574 | "requires": { 1575 | "@babel/highlight": "^7.10.4" 1576 | } 1577 | }, 1578 | "@babel/highlight": { 1579 | "version": "7.10.4", 1580 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", 1581 | "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", 1582 | "dev": true, 1583 | "requires": { 1584 | "@babel/helper-validator-identifier": "^7.10.4", 1585 | "chalk": "^2.0.0", 1586 | "js-tokens": "^4.0.0" 1587 | } 1588 | } 1589 | } 1590 | }, 1591 | "rollup-plugin-typescript2": { 1592 | "version": "0.26.0", 1593 | "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.26.0.tgz", 1594 | "integrity": "sha512-lUK7XZVG77tu8dmv1L/0LZFlavED/5Yo6e4iMMl6fdox/yKdj4IFRRPPJEXNdmEaT1nDQQeCi7b5IwKHffMNeg==", 1595 | "dev": true, 1596 | "requires": { 1597 | "find-cache-dir": "^3.2.0", 1598 | "fs-extra": "8.1.0", 1599 | "resolve": "1.15.1", 1600 | "rollup-pluginutils": "2.8.2", 1601 | "tslib": "1.10.0" 1602 | } 1603 | }, 1604 | "rollup-pluginutils": { 1605 | "version": "2.8.2", 1606 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", 1607 | "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", 1608 | "dev": true, 1609 | "requires": { 1610 | "estree-walker": "^0.6.1" 1611 | } 1612 | }, 1613 | "safe-buffer": { 1614 | "version": "5.1.2", 1615 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1616 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1617 | "dev": true 1618 | }, 1619 | "semver": { 1620 | "version": "6.3.0", 1621 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1622 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1623 | "dev": true 1624 | }, 1625 | "serialize-javascript": { 1626 | "version": "4.0.0", 1627 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", 1628 | "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", 1629 | "dev": true, 1630 | "requires": { 1631 | "randombytes": "^2.1.0" 1632 | } 1633 | }, 1634 | "source-map": { 1635 | "version": "0.7.3", 1636 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", 1637 | "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", 1638 | "dev": true 1639 | }, 1640 | "source-map-support": { 1641 | "version": "0.5.19", 1642 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", 1643 | "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", 1644 | "dev": true, 1645 | "requires": { 1646 | "buffer-from": "^1.0.0", 1647 | "source-map": "^0.6.0" 1648 | }, 1649 | "dependencies": { 1650 | "source-map": { 1651 | "version": "0.6.1", 1652 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1653 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1654 | "dev": true 1655 | } 1656 | } 1657 | }, 1658 | "sourcemap-codec": { 1659 | "version": "1.4.8", 1660 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 1661 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 1662 | "dev": true 1663 | }, 1664 | "supports-color": { 1665 | "version": "5.5.0", 1666 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1667 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1668 | "dev": true, 1669 | "requires": { 1670 | "has-flag": "^3.0.0" 1671 | } 1672 | }, 1673 | "terser": { 1674 | "version": "5.3.3", 1675 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.3.3.tgz", 1676 | "integrity": "sha512-vRQDIlD+2Pg8YMwVK9kMM3yGylG95EIwzBai1Bw7Ot4OBfn3VP1TZn3EWx4ep2jERN/AmnVaTiGuelZSN7ds/A==", 1677 | "dev": true, 1678 | "requires": { 1679 | "commander": "^2.20.0", 1680 | "source-map": "~0.7.2", 1681 | "source-map-support": "~0.5.19" 1682 | } 1683 | }, 1684 | "to-fast-properties": { 1685 | "version": "2.0.0", 1686 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 1687 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", 1688 | "dev": true 1689 | }, 1690 | "tslib": { 1691 | "version": "1.10.0", 1692 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", 1693 | "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", 1694 | "dev": true 1695 | }, 1696 | "typescript": { 1697 | "version": "3.8.3", 1698 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", 1699 | "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==", 1700 | "dev": true 1701 | }, 1702 | "unicode-canonical-property-names-ecmascript": { 1703 | "version": "1.0.4", 1704 | "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", 1705 | "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", 1706 | "dev": true 1707 | }, 1708 | "unicode-match-property-ecmascript": { 1709 | "version": "1.0.4", 1710 | "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", 1711 | "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", 1712 | "dev": true, 1713 | "requires": { 1714 | "unicode-canonical-property-names-ecmascript": "^1.0.4", 1715 | "unicode-property-aliases-ecmascript": "^1.0.4" 1716 | } 1717 | }, 1718 | "unicode-match-property-value-ecmascript": { 1719 | "version": "1.1.0", 1720 | "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", 1721 | "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", 1722 | "dev": true 1723 | }, 1724 | "unicode-property-aliases-ecmascript": { 1725 | "version": "1.0.5", 1726 | "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", 1727 | "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", 1728 | "dev": true 1729 | }, 1730 | "universalify": { 1731 | "version": "0.1.2", 1732 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 1733 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 1734 | "dev": true 1735 | } 1736 | } 1737 | } 1738 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "paymaya-js-sdk", 3 | "version": "2.0.1", 4 | "description": "", 5 | "main": "dist/bundle.js", 6 | "types": "dist/index.d.ts", 7 | "scripts": { 8 | "build": "rollup -c", 9 | "watch": "rollup -cw", 10 | "prepublishOnly": "npm run build" 11 | }, 12 | "devDependencies": { 13 | "@babel/core": "^7.8.7", 14 | "@babel/preset-env": "^7.8.7", 15 | "rollup": "^1.32.0", 16 | "rollup-plugin-babel": "^4.3.3", 17 | "rollup-plugin-commonjs": "^10.1.0", 18 | "rollup-plugin-node-resolve": "^5.2.0", 19 | "rollup-plugin-terser": "^7.0.2", 20 | "rollup-plugin-typescript2": "^0.26.0", 21 | "typescript": "^3.8.3" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import typescript from 'rollup-plugin-typescript2'; 2 | import babel from 'rollup-plugin-babel'; 3 | import resolve from 'rollup-plugin-node-resolve' 4 | import commonjs from 'rollup-plugin-commonjs' 5 | import { terser } from "rollup-plugin-terser"; 6 | 7 | export default { 8 | input: 'src/index.ts', // our source file 9 | output: { 10 | file: 'dist/bundle.js', 11 | format: 'umd', 12 | plugins: [terser()], 13 | name: 'PayMayaSDK' 14 | }, 15 | plugins: [ 16 | typescript({ 17 | typescript: require('typescript'), 18 | }), 19 | resolve(), 20 | commonjs({ 21 | include: 'node_modules/**', 22 | }), 23 | babel({ 24 | exclude: 'node_modules/**' // only transpile our source code 25 | }) 26 | ] 27 | }; 28 | -------------------------------------------------------------------------------- /src/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/env", {"modules": false}] 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { 2 | CreateCheckoutObject, 3 | CreateSinglePaymentObject, 4 | CreateWalletLinkObject, 5 | CreditCardFormOptions 6 | } from './interfaces'; 7 | 8 | class PayMayaSDK { 9 | private publicKey: string = ''; 10 | private isSandbox: boolean = true; 11 | private apiUrl: string = ''; 12 | private formUrl: string = ''; 13 | private eventOrigin: string = ''; 14 | 15 | public init(publicKey: string, isSandbox: boolean = true) { 16 | this.publicKey = publicKey; 17 | this.isSandbox = isSandbox; 18 | 19 | if (this.isSandbox) { 20 | this.apiUrl = 'https://pg-sandbox.paymaya.com'; 21 | this.formUrl = 'https://paymayajs-staging.s3.amazonaws.com/dist/index.html'; 22 | this.eventOrigin = 'https://paymayajs-staging.s3.amazonaws.com'; 23 | } else { 24 | this.apiUrl = 'https://pg.paymaya.com'; 25 | this.formUrl = 'https://paymayajs.s3.amazonaws.com/dist/index.html'; 26 | this.eventOrigin = 'https://paymayajs.s3.amazonaws.com'; 27 | } 28 | } 29 | 30 | private checkData(data: any) { 31 | if (!data) { 32 | throw Error(); 33 | } 34 | } 35 | 36 | private checkIfInitialized() { 37 | if ( 38 | this.publicKey === '' 39 | || this.apiUrl === '' 40 | || this.formUrl === '' 41 | || this.eventOrigin === '' 42 | ) { 43 | throw Error('You must first run init() method!'); 44 | } 45 | } 46 | 47 | private async genericRequestFn(requestMethod: string, requestBody: any, url: string) { 48 | const config = { 49 | headers: { 50 | 'Content-Type': 'application/json', 51 | 'Authorization': `Basic ${btoa(this.publicKey)}` 52 | }, 53 | method: requestMethod, 54 | body: JSON.stringify(requestBody) 55 | }; 56 | 57 | const apiCall = await fetch(`${this.apiUrl}${url}`, config); 58 | const response = await apiCall.json(); 59 | 60 | if ( 61 | apiCall.status === 200 62 | && response.redirectUrl !== undefined 63 | && response.redirectUrl !== '' 64 | ) { 65 | return response; 66 | } else { 67 | throw response; 68 | } 69 | } 70 | 71 | public addTransactionHandler(callback: (arg: string) => void) { 72 | try { 73 | this.checkIfInitialized(); 74 | this.checkData({}.toString.call(callback) === '[object Function]'); 75 | window.addEventListener('message', (event) => { 76 | if (event.origin === this.eventOrigin) { 77 | const data = JSON.parse(event.data); 78 | callback(data.paymentTokenId); 79 | } 80 | }); 81 | } catch (e) { 82 | console.error(e); 83 | console.error('SDK: addTransactionHandler(callback) - callback must be a function') 84 | } 85 | } 86 | 87 | public async createCheckout(checkoutRequestObject: CreateCheckoutObject) { 88 | try { 89 | this.checkIfInitialized(); 90 | const response = await this.genericRequestFn('POST', checkoutRequestObject, '/checkout/v1/checkouts'); 91 | window.location.href = response.redirectUrl; 92 | } catch (e) { 93 | console.error(e); 94 | console.error('SDK: createCheckout(checkoutRequestObject) - error'); 95 | } 96 | } 97 | 98 | public async createWalletLink(walletLinkRequestObject: CreateWalletLinkObject) { 99 | try { 100 | this.checkIfInitialized(); 101 | const response = await this.genericRequestFn('POST', walletLinkRequestObject, '/payby/v2/paymaya/link'); 102 | window.location.href = response.redirectUrl; 103 | } catch (e) { 104 | console.error(e); 105 | console.error('SDK: createWalletLink(walletLinkRequestObject) - error'); 106 | } 107 | } 108 | 109 | public async createSinglePayment(singlePaymentRequestObject: CreateSinglePaymentObject) { 110 | try { 111 | this.checkIfInitialized(); 112 | const response = await this.genericRequestFn('POST', singlePaymentRequestObject, '/payby/v2/paymaya/payments'); 113 | window.location.href = response.redirectUrl; 114 | } catch (e) { 115 | console.error(e); 116 | console.error('SDK: createSinglePayment(singlePaymentRequestObject) - error'); 117 | } 118 | } 119 | 120 | public createCreditCardForm(targetHtmlElement: HTMLElement, options?: CreditCardFormOptions) { 121 | try { 122 | this.checkIfInitialized(); 123 | this.checkData(targetHtmlElement instanceof HTMLElement); 124 | const iframeInstance = document.createElement('iframe'); 125 | iframeInstance.setAttribute('id', 'paymaya-card-form'); 126 | iframeInstance.setAttribute('src', `${this.formUrl}?sandbox=${String(this.isSandbox)}&publicKey=${this.publicKey}&options=${options ? JSON.stringify(options) : ''}`); 127 | targetHtmlElement.appendChild(iframeInstance); 128 | return this; 129 | } catch (e) { 130 | console.error(e); 131 | console.error('SDK: createCreditCardform(targetHtmlElement, options) - error'); 132 | } 133 | } 134 | } 135 | 136 | export default new PayMayaSDK(); 137 | -------------------------------------------------------------------------------- /src/interfaces.ts: -------------------------------------------------------------------------------- 1 | export interface CreateCheckoutObject { 2 | totalAmount: TotalAmount; 3 | buyer?: Buyer; 4 | items: Item[]; 5 | redirectUrl?: RedirectUrls; 6 | requestReferenceNumber: string; 7 | metadata: {}; 8 | } 9 | 10 | export interface CreateWalletLinkObject extends RedirectUrls { 11 | requestReferenceNumber: string; 12 | metadata: {}; 13 | } 14 | 15 | export interface CreateSinglePaymentObject extends RedirectUrls { 16 | totalAmount: { 17 | currency: string; 18 | value: string; 19 | }; 20 | requestReferenceNumber: string; 21 | metadata: {}; 22 | } 23 | 24 | export interface CreditCardFormOptions { 25 | buttonText: string; 26 | buttonColor: string; 27 | buttonTextColor: string; 28 | showLogo: boolean; 29 | } 30 | 31 | interface TotalAmount { 32 | value: number; 33 | currency: string; 34 | details?: Details; 35 | } 36 | 37 | interface Details { 38 | discount?: number; 39 | serviceCharge?: number; 40 | shippingFee?: number; 41 | tax?: number; 42 | subtotal?: number; 43 | } 44 | 45 | interface Buyer { 46 | firstName?: string; 47 | middleName?: string; 48 | lastName?: string; 49 | birthday?: string; 50 | customerSince?: string; 51 | sex?: string; 52 | contact?: { 53 | phone?: string; 54 | email?: string; 55 | }; 56 | shippingAddress?: ShippingAddress; 57 | billingAddress?: BillingAddress; 58 | } 59 | 60 | export enum ShippingType { 61 | ST = 'ST', 62 | SD = 'SD', 63 | } 64 | 65 | interface ShippingAddress extends BillingAddress { 66 | firstName: string; 67 | middleName: string; 68 | lastName: string; 69 | phone: string; 70 | email: string; 71 | shippingType: ShippingType; 72 | } 73 | 74 | interface BillingAddress { 75 | line1?: string; 76 | line2?: string; 77 | city?: string; 78 | state?: string; 79 | zipCode?: string; 80 | countryCode?: string; 81 | } 82 | 83 | interface Item { 84 | name: string; 85 | quantity?: number; 86 | code?: string; 87 | description?: string; 88 | amount?: Amount; 89 | totalAmount: Amount; 90 | } 91 | 92 | interface Amount { 93 | value: number; 94 | details?: Details; 95 | } 96 | 97 | interface RedirectUrls { 98 | success?: string; 99 | failure?: string; 100 | cancel?: string; 101 | } 102 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "declaration": true, 4 | "declarationDir": "./dist", 5 | "module": "es6", 6 | "noImplicitAny": true, 7 | "outDir": "./dist", 8 | "target": "es5" 9 | }, 10 | "include": [ 11 | "src/**/*" 12 | ], 13 | "exclude": ["node_modules"] 14 | } 15 | --------------------------------------------------------------------------------