From c9c0f685f3af79d576f3333717a644fe8c2f36c8 Mon Sep 17 00:00:00 2001 From: dkozak Date: Fri, 20 Sep 2019 22:32:01 +0300 Subject: [PATCH 01/11] Fix typo --- README.md | 8 +-- app/index.js | 4 +- package-lock.json | 139 ++++++++++++++++++++++---------------- package.json | 2 +- src/core/QRCanvas.js | 4 +- src/core/QRCodeStyling.js | 4 +- 6 files changed, 93 insertions(+), 68 deletions(-) diff --git a/README.md b/README.md index a382ab4e..2410fd69 100644 --- a/README.md +++ b/README.md @@ -36,11 +36,11 @@ npm install qr-code-styling data: "https://www.facebook.com/", image: "https://facebookbrand.com/wp-content/themes/fb-branding/assets/images/fb-logo.png?v2", dotsOptions: { - colour: "#4267b2", + color: "#4267b2", type: "rounded" }, backgroundOptions: { - colour: "#e9ebee", + color: "#e9ebee", } }); @@ -91,14 +91,14 @@ imageSize |number |`0.4` |Coefficient of the image size. Not reco Property|Type |Default Value|Description --------|------------------------------------|-------------|----------------- -colour |string |`'#000'` |Colour of QR dots +color |string |`'#000'` |Color of QR dots type |string (`'rounded' 'dots' 'square'`)|`'default'` |Style of QR dots `options.backgroundOptions` structure Property|Type |Default Value --------|------|------------- -colour |string|`'#fff'` +color |string|`'#fff'` #### QrCodeStyling methods `QrCodeStyling.append(container) => void` diff --git a/app/index.js b/app/index.js index 24df68de..8926126a 100644 --- a/app/index.js +++ b/app/index.js @@ -15,11 +15,11 @@ const qrCode = new QrCodeStyling({ imageSize: 0.4 }, dotsOptions: { - colour: "#4267b2", + color: "#4267b2", style: "dots" }, backgroundOptions: { - colour: "#e9ebee", + color: "#e9ebee", } }); diff --git a/package-lock.json b/package-lock.json index 95502d1d..4830dbdc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "qr-code-styling", - "version": "0.1.0", + "version": "0.2.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -535,12 +535,14 @@ "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -1050,7 +1052,8 @@ "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true }, "chalk": { "version": "2.4.2", @@ -1173,6 +1176,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, "requires": { "string-width": "^3.1.0", "strip-ansi": "^5.2.0", @@ -1199,6 +1203,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "requires": { "color-name": "1.1.3" } @@ -1206,7 +1211,8 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true }, "commander": { "version": "2.20.0", @@ -1392,6 +1398,7 @@ "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, "requires": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -1461,7 +1468,8 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true }, "decode-uri-component": { "version": "0.2.0", @@ -1595,11 +1603,6 @@ "randombytes": "^2.0.0" } }, - "dijkstrajs": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.1.tgz", - "integrity": "sha1-082BIh4+pAdCz83lVtTpnpjdxxs=" - }, "dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", @@ -1719,7 +1722,8 @@ "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true }, "emojis-list": { "version": "2.1.0", @@ -1737,6 +1741,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, "requires": { "once": "^1.4.0" } @@ -1876,6 +1881,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, "requires": { "cross-spawn": "^6.0.0", "get-stream": "^4.0.0", @@ -2164,6 +2170,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, "requires": { "locate-path": "^3.0.0" } @@ -2828,12 +2835,14 @@ "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, "requires": { "pump": "^3.0.0" } @@ -3313,7 +3322,8 @@ "invert-kv": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true }, "ip": { "version": "1.1.5", @@ -3440,7 +3450,8 @@ "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true }, "is-glob": { "version": "4.0.1", @@ -3516,7 +3527,8 @@ "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true }, "is-symbol": { "version": "1.0.2", @@ -3548,7 +3560,8 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true }, "isobject": { "version": "3.0.1", @@ -3611,6 +3624,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, "requires": { "invert-kv": "^2.0.0" } @@ -3636,6 +3650,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, "requires": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -3688,6 +3703,7 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, "requires": { "p-defer": "^1.0.0" } @@ -3728,6 +3744,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "dev": true, "requires": { "map-age-cleaner": "^0.1.1", "mimic-fn": "^2.0.0", @@ -3811,7 +3828,8 @@ "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true }, "minimalistic-assert": { "version": "1.0.1", @@ -3973,7 +3991,8 @@ "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true }, "no-case": { "version": "2.3.2", @@ -4039,6 +4058,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, "requires": { "path-key": "^2.0.0" } @@ -4154,6 +4174,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -4186,6 +4207,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, "requires": { "execa": "^1.0.0", "lcid": "^2.0.0", @@ -4195,22 +4217,26 @@ "p-defer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true }, "p-is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true }, "p-limit": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "dev": true, "requires": { "p-try": "^2.0.0" } @@ -4219,6 +4245,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, "requires": { "p-limit": "^2.0.0" } @@ -4241,7 +4268,8 @@ "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true }, "pako": { "version": "1.0.10", @@ -4316,7 +4344,8 @@ "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true }, "path-is-absolute": { "version": "1.0.1", @@ -4333,7 +4362,8 @@ "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true }, "path-parse": { "version": "1.0.6", @@ -4390,11 +4420,6 @@ "find-up": "^3.0.0" } }, - "pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" - }, "portfinder": { "version": "1.0.23", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.23.tgz", @@ -4474,6 +4499,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -4508,24 +4534,6 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, - "qrcode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.4.1.tgz", - "integrity": "sha512-3JhHQJkKqJL4PfoM6t+B40f0GWv9eNJAJmuNx2X/sHEOLvMyvEPN8GfbdN1qmr19O8N2nLraOzeWjXocHz1S4w==", - "requires": { - "dijkstrajs": "^1.0.1", - "isarray": "^2.0.1", - "pngjs": "^3.3.0", - "yargs": "^13.2.4" - }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - } - } - }, "qrcode-generator": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/qrcode-generator/-/qrcode-generator-1.4.3.tgz", @@ -4693,12 +4701,14 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true }, "requires-port": { "version": "1.0.0", @@ -4849,7 +4859,8 @@ "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true }, "send": { "version": "0.17.1", @@ -4942,7 +4953,8 @@ "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true }, "set-value": { "version": "2.0.1", @@ -4993,6 +5005,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, "requires": { "shebang-regex": "^1.0.0" } @@ -5000,12 +5013,14 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true }, "snapdragon": { "version": "0.8.2", @@ -5373,6 +5388,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -5392,6 +5408,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, "requires": { "ansi-regex": "^4.1.0" } @@ -5399,7 +5416,8 @@ "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true }, "supports-color": { "version": "6.1.0", @@ -6162,6 +6180,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, "requires": { "isexe": "^2.0.0" } @@ -6169,7 +6188,8 @@ "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true }, "worker-farm": { "version": "1.7.0", @@ -6184,6 +6204,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, "requires": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", @@ -6193,7 +6214,8 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "ws": { "version": "6.2.1", @@ -6213,7 +6235,8 @@ "y18n": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true }, "yallist": { "version": "3.0.3", @@ -6225,6 +6248,7 @@ "version": "13.2.4", "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", + "dev": true, "requires": { "cliui": "^5.0.0", "find-up": "^3.0.0", @@ -6243,6 +6267,7 @@ "version": "13.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" diff --git a/package.json b/package.json index 01c4b174..fcd01815 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.2.0", "description": "Add a style and an image to your QR code", "main": "lib/qr-code-styling.js", - "module": "src/core/index.js", + "module": "src/index.js", "files": [ "lib" ], diff --git a/src/core/QRCanvas.js b/src/core/QRCanvas.js index 552ca10e..3147672d 100644 --- a/src/core/QRCanvas.js +++ b/src/core/QRCanvas.js @@ -48,7 +48,7 @@ export default class QRCanvas { const canvasContext = this.context; const options = this.options; - canvasContext.fillStyle = options.backgroundOptions.colour; + canvasContext.fillStyle = options.backgroundOptions.color; canvasContext.fillRect(0, 0, this.canvas.width, this.canvas.height); } @@ -75,7 +75,7 @@ export default class QRCanvas { } if (this.qr.isDark(i, j)) { - canvasContext.fillStyle = options.dotsOptions.colour; + canvasContext.fillStyle = options.dotsOptions.color; dot.draw(xBeginning + i * dotSize, yBeginning + j * dotSize, dotSize, (xOffset, yOffset) => { if (i + xOffset >= 0 && j + yOffset >= 0 && i + xOffset < count && j + yOffset < count) { if (filter && !filter(i + xOffset, j + yOffset)) return false; diff --git a/src/core/QRCodeStyling.js b/src/core/QRCodeStyling.js index 182c05ed..bc9db7c3 100644 --- a/src/core/QRCodeStyling.js +++ b/src/core/QRCodeStyling.js @@ -21,10 +21,10 @@ const defaultOptions = { }, dotsOptions: { type: "square", - colour: "#000", + color: "#000", }, backgroundOptions: { - colour: "#fff", + color: "#fff", } }; From 26a0f10a3df7491e2209db87c8f55a2b749b0080 Mon Sep 17 00:00:00 2001 From: Denys Kozak Date: Sat, 5 Oct 2019 21:00:29 +0300 Subject: [PATCH 02/11] Remove test app from the repo --- .gitignore | 3 - README.md | 6 +- app/assets/fb_logo.png | Bin 969 -> 0 bytes app/assets/fb_logo_resized.png | Bin 657 -> 0 bytes app/assets/instagram.png | Bin 10429 -> 0 bytes app/assets/telegram.png | Bin 47798 -> 0 bytes app/assets/youtube.png | Bin 29350 -> 0 bytes app/index.html | 10 - app/index.js | 26 - configs/webpack.config.app.js | 55 -- package-lock.json | 468 +----------------- package.json | 7 +- {app => src}/assets/facebook_example.png | Bin {app => src}/assets/instagram_example.png | Bin {app => src}/assets/telegram_example.png | Bin ...webpack.config.lib.js => webpack.config.js | 5 +- 16 files changed, 8 insertions(+), 572 deletions(-) delete mode 100644 app/assets/fb_logo.png delete mode 100644 app/assets/fb_logo_resized.png delete mode 100644 app/assets/instagram.png delete mode 100644 app/assets/telegram.png delete mode 100644 app/assets/youtube.png delete mode 100644 app/index.html delete mode 100644 app/index.js delete mode 100644 configs/webpack.config.app.js rename {app => src}/assets/facebook_example.png (100%) rename {app => src}/assets/instagram_example.png (100%) rename {app => src}/assets/telegram_example.png (100%) rename configs/webpack.config.lib.js => webpack.config.js (87%) diff --git a/.gitignore b/.gitignore index a9e59726..19fd1eca 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,6 @@ # IDEA .idea -# Build folder -/dist - # Lib folder /lib diff --git a/README.md b/README.md index 2410fd69..945240af 100644 --- a/README.md +++ b/README.md @@ -5,9 +5,9 @@ JavaScript library for generating QR codes with a logo and styling. ### Examples

- - - + + +

### Installation diff --git a/app/assets/fb_logo.png b/app/assets/fb_logo.png deleted file mode 100644 index b386bb10725871071801b8447c4475189524dfe4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 969 zcmeAS@N?(olHy`uVBq!ia0vp^4?&oN8Ax*GDtQ2@`~aU2SF6zZ|Ns9t3z}yfFgGM; zO-1K!1HU;vvyNDXFVyv!y>ioeb&r{6FF&2S=!BNnEQ{cI^H!c|o^;^xvkwK0+rIz! z;~KX(DsOdd@7_x{UL=)n*n9NO_Wd_YT6WyL``SBs*{io-j-0wD>onanY59_MXV-1J zwD-+K1qKFYQBN1gkcv5P@7yeUWFX)W=$2+&q$74X!J|Rt&wq2jL!Wz;qm|3eOW$X& zim_vjyP9I8sDuoH;yBKU9^Lb1&4hcW5AM8l{(Jk~oXr(4-)#3x(%5r*?dsgmub=nD zRptMFUbA;)QbE5~@u5X|{u`~joxxfk_)_T73d&R1ia>?RQ;SL4gkeYc)rRa~{!Z<)5UA4}r@F8%HF@mFGh z^`)$^s`%N_%-=Su&w6`K+_5UZJ;Z%p#;Tpq&aYe?aGWv!y_)_0li!nS?}T4@CjMpj zhJGQro;uh4MVBQWcz%5PZuz4YdA}P=(57Th2v|xz`}n5N>}8aT7Efq1i0t@dw*)i&LiRXH@3QO%FbUG zTOwk7rR@E!1B;hxY~16nAf%nzdbqCO`f|6j!Yr1Dv)^#N;&6Is`be;4^{1Pyhfe1! zb41@P{U_K`eN(%xE>ZcFwDS(pec7k=ZMe>7JrSQbKkkQ;P4A?5jlX|p#B0=8p3%?I zJ9K#Y&DQXjFK@j$wD!xF%(91XU$$z$e0b)~q1G=2X=M*re|df7&7qZFL@M$Um3hzT zO_^VOUU$m>w~2WRzibY!d$|0~>LY?JpC`u!WHm)5i1I6W*~F4*$uyx+}M zu75Wjo|!(_{Nren&@|cB6_GsGx3Yc=eks23aem=twbY@``Ub8HM=gnJrrg_qV$Im_#G;aI; z~gNSQl+6Vr&CN8t1Sy!iguRnIrRMc=~tEF{scI@ODNv4!% z6I5Iv;QzW)%OlsHSj4}(>hmS--d)E6#CvyZ9*Ieb+_6w;R_5zD8((Ip=iQ4=buqRm zHa2;dHq$!$vi#hgKOdes>zbT@ZqCk^($&RJ&zxPg!Mu61d30mtCUfuf{5p;^oA^vNO`IbEoi(tq1FKO;w|`m=_?cP3-;8Pbh6xz5Zz;KTCFDPfv_lGeLi zErY##Z-#t(=J}y6kM&t(!ZW5~O#^=%AGM4}V diff --git a/app/assets/instagram.png b/app/assets/instagram.png deleted file mode 100644 index c8bcc39c066836a604f8bd10c6979f3c8358e6ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10429 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

^WP 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 Af&c&j diff --git a/app/assets/telegram.png b/app/assets/telegram.png deleted file mode 100644 index 16c408b29ceecadbee296053894dfb15356314d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47798 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ì^ms4oGsh364b=F=_&zIIODf3T-6_wq<8SoMk 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 VT49*{E>7vU<}Drdq8rw){twbw7OwyR diff --git a/app/assets/youtube.png b/app/assets/youtube.png deleted file mode 100644 index f88fdb22f91d5d0416daacf5c293e1226b2cb050..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29350 zcmeEu^;=YH^zTL#jtZip2uP@?h;&JVO@oA_gd#C?cd17dk?s71q(MZaM1}?l zNrw>W9Oka=x!?OQ++V)WInRR*Gkf-a-}SDwKCukGrzTH(g!u@9Ahe1Kw>1%jvK~Pw z#{Z#$SFEQG{tG|OnJH+hB8c~81PO${@4!oezYxSt072$V5kxWpLC!d)RBA}WFQ^_V z%il)G=zni(vZCP?YF9sb}%Nrk$rKQo5Sy{`1&AsY|;6r^u zO;27om>zzH7+z4gdDvVvEGb2@cPU&a{O-+@!s#F8?k)ANmS$#IR?ZEJX5{Sjh%v>P z>mPtSLe8}%;`q=%Ac)#IgcAMv;0Z#5{&YNa03HiL>QDbukN!k-|Mw05yAJ;w5C3~E z{=eo2jw*ef9A)$%o>TSIGD5JCgF$y}cGA4^CMidguRJqPCGFibv0Rl3af(ISz+kx58mXXW>7k;|g36!Q zss3yw7dy80^U~(qefT!~Y`@qPF^$QmTN;Od`L_3ayOkm2&FW}(UD`h%GP%5@E#D-w zwWvs^Eeo`7&0CT_Z0|48a_m>ZJxBzdC#EcAu?zcq%*@a38&B-Iv`sHplP!b$E#kO- z-lW)m)R1_O777W^T||vqxRKcOM*hO`^{pG>3K!Y--)nF&OOQKnoyS-uFI=Qh)Ke?mIk-v6Lj>=&PtDX(ms*d7Z-n&p2zhzWsa^&DdTj$}=X=zKl#D3E9w6}B?yK#$;OB!A*%A_P3lWbFjz1PJ=eOo@ zckh^+no2b2`Mer@7-OZt%ossM-RV!0vM(ueg_c&Cqj7mGjp@Qx$@#%=BX!cUT>K_i z`C^V7&3JzSht<2v7pJ5&VPYxU*%|&~<}-(eu*|AY!REru=~vjPRC~Dd+QQ+T`{O zF_4Fb>B&ZjWgCCQ+#L4HUEDikYpaO4`HZ2;?kC%>R>!Euk(D)e zXgI^H8CyOUH|niCR3mTg5VF~ONFX5SM8RR>G9`m@wV~oW21Pfmt)s4TchY=4gdmv` zUWXkVZ!zoti}=b04~_2o6MqR}HtmUl+(aPaPR#R`ZihYi(*R}!(6bp$AsJ5(JQYCddpDNG3OL_*-ZU~Y!c&c}tT>N& z&88aEc)R7u2}OvsQ>Gk0rkrZDeEHijUa3=-lT{{aPLtxdx&AW6U^ zxT5aXf(9+ckF$aD@)=^I5&kP$#6io6G0Lwr&z>zO>nv6C`faxnIG5rWcvakR=$mJL zFa^rro#@~qH;=(u#?29s1iH4UQ6Kf4C9;gH>Y!Ndd0vw@bDACR2jaeb`641DG@(#Z z{PgL8>6w|#JM{RXB0+d&E{2f7+7H*yy^V^B(hhk1I1z{AqNSn1Rx&cR3DCe>ugb~E z@rEfPKU(}KJe`GPGr9tH9SGl2aeTCa%Dw%ZGFxv?g({Ng$tTm~#6z1N3D#_m`gpIj zaN3>yc(Fl5)$i9Wc0yUdac)XVigtkO;y}?Yhw9~^PuDurey@9%IZrF08;aZi`c;Ti z{Y_7&|Az4J&I1dng8p399L4kIKU9U;{d3Oz2Yq0=24+l_ zNG8>;O*m*7F(WN~!@M$E1)BOe*RdK+4W}GsSL2|E*|oLC+&X#R-^lpb<|_)(+>#Gx z>(yp%HyiEm&wBHQO>sHIR4O(m=GRIazxulTT?QdlE!nj2KiAY{)6|U%eE4K2u$&&H zKZ|&Xk3-hN$ya2yALl4j*7NalW(4e85))@9(yOy@5dZlGWvv^vg>mM%k`gTviB!zP zosm|Nk#Wb*&kw)3D@=1MBO}A0=+PY|Ier9DQ2+f;y`LYUkxn^W`obL!*fvCpRr(xh zoSLw)#yb8XFHZ&T+Y!tD@X9GdB!~Q|BhNK=5)BOudWMH>b}f$`JYZ1iihC6jqP62i zfn4`)-AAOaF|aRhH_JWB;i%_z-_zLnS*JjK3|o0|c6xKSx2Ff2lXG?0#)7wv@Pv|@ zZ~>9hpiD_l&h1DR%UUZrfCR3^j!=kqEp1ZEMGOsT!jh^5-_4j!i}&Au>3UTriwBpN z*YoN$x2*$JDx=%b@5p$53tL;2#l=NtcJ^`^WOjDeX7WoY*KQtE_8M~!g@y%&nK;}2fXsos3E_Nz{LiB-u>aWpGCTR}OFN5kI!Lw>{eVjegm*)=sr zT~;EO(#p!p?#sx?;5W$~EiGL;>+?+SApbtN=T2qX76qv{ZBKh{N!<;DUYq@CZBp7hIOsY!6y!JbOfIXa z2mE)1Xd_5vn%=vMrB(HZA})`58A=X9*+|JKE!7S=!>@Dhcww2Bvk0@BG!h;bmILRE zo}M00)eUKKeZIeKX;W%r5c(X8)>>rm3wt){kfT2ov_(4{Uz0xMpj)?|F*7sUE>Zh# z{dp)){b}ykuX~o3S&Q>65Fc^8hVTIdVZTy!;7?Bs)W3tK$ZY@Md5Pm+XL9g(9p!kw zvNEPpbN#ucC0+Dm9r^S_Lqk2iz2-J#lSTn;ZEb9CuI}(?CnJJ9u3e}wD9qbZD0o44 zB9I~_&0LYwVDi~?M&#U_HLp=+&&K+{jSpERT@@k~K1X);j*i;LUcy&}9OVP&Qd6b*QYB+yF)s1*t9NvCT;<|&!m=0AQ;44o&Q4Fi_3YU* zi1d+auM((ui)n}d-oxSgcM)r&@3s`aBaY{JIlK7~WlcZ78V0@xRyM0s|HYZ)$v_`( zZx)PwYIJlur1q{ormx4+#R5k>kVic2-}tCq-_enL_lM^k@apLI*rCGXV^ zF}vK3*G-Qk-4_zRG&kSZ)3chNB`z#zql?qc-rL)Y!{LG{3djF}++AEO~0&d}O{Z9c3#(L`cg_xc00;-QWIZ7c6yv6IE zhKhNhcKjMBGRw)%E-V{#e00!C%Ep4^Uw6%Rpngr>v3+H_ZQUba(*sW}-d0@dv1BZ> z_oor>!6Bfk)o&6|BTFKx56h}1VUlw4^J6<_OWb4-N5Mh*z+2~uzfK$w2n|gW#ru9F63MC~aMIxYbCJ;nxc(^d*9c_B&qh zx}@u`hwRUhQ_uDtglmi0FB^EwVXgjn-n9Iz!gHOC&q^S=khNEPZDPQpwgx&m@DN@qi8;hs- zh{GwO8!d`(?obS$2;_)-3D0iJTG2PToDC`HCRJi{LxhuU6NUOp_Dmfbwrm8qJXu>TK&wCm4ML-PM} zckV*;r;XXwX~vha&zr+4~4;YJ5Rm5%*h#DyYS%y-{0#9K+JT* zj@zaRGr`%)YNxC3vhuxtHhHI*;;SaB9fm3J5~ktlA^ZjPt)w&RGNy*7}M)Kk;eGSj3?GD$E zjEvwn$VNqvo+~LS{lD8Ex6+n$ilQh){(d&<4aG+&F^~_AP(8!1XN2CqptwXWEh2*5 z*l<@>RUKqdt1;&9NTWdNtIg#R`*&piK#94zsJq=Ihf7a6P>l=>SlP&pKc*i4{oB3_ zj~|j0ayfVW`nHY(EAv$C?{dlAk|xz?7JBJ*wNB6iK)5j+pZS_vQ(72JZGyRw-XWOJ`W z2Pj0v#B%fU+VKYCkB|L(`q&Hj+Kh&V8-}}N`_XEB*|g5MX-Xt;A%5_0RjSIkccu3d zMMQ9=RL1hMcKpOsGzt31jgxjaInB4BPq4;ditG#-gWm1!`R41F1nt+s0*netK}m-L z3rpCpuC8uCJ$_rxwCeVS6RZ->x8Gg-aeHBLvCIwO=@uz_)N~{^E>4Ja0>ZSs{aAfb zLQmI?)mfFsCT_wV^#T#u$T`gi_sq>Rl9G~6{d3SZ@fbAuxbkvc*y#A`Jv3m^4Iuxw zT^X$l?vIP~eEHO^1BK-UuEgF~AW;&gu88qR7}V4dZtwIV%F7ntp`1&4tzdb73Y`r8 z1*H{M{>|nJZ<{9U2=v%?xfC0_q@j;a>3jZlylrXov!u7P!W}<8obf&eX+vDiAkJ;n z%wpoB=WkuH#6^i9m$p4v^RT-a$EfOCube&&iJIGOQ(@R7RxRZvnRWZ@h0{Ab*x3I2!e7Z?s&cYhjUwXyc`4|9)Iom&GUu_avn0~zUQJu3|0*um29Gsk%JK~9|Cx^cj^8nI;LXon$ zC$#Ey@nmHGe5!2tmTxU_Re55&y8h!zNr;9c zpKpy%Tg!~PQ6Q?aU|2LTh2FeVdx0Ovs${PoE%(1 zfjYcCH$UI~>sPk3i_3jYP3KX0ef>m8PnnsSm#1fEE!U*~1Q(tSzAYjkAW%bla(ME` zYTLlTfc|XKy(?JgmmtWer>D8Z#5{JkE5ZSN-oJkz2aR`ZY%FAwe}8sE;B(%6lDQ#J z0>@S{crBJ+x!;77v};CicoV(xJ2vRWw$CSt$d@7_jAOHewSOZ3NjyJ#CglMm^;i{!m;iE0 zEj!s32TSCk)Fkb{p0#=7@!JNj21!QNfgYb&aQf7#U&U>F-B1V19=Dtny>>0A`}bC}MHZ?IH`5WIz$JTz)nGfgQAn`c$ZPYrDCXSzBA%n&?(4|KM?c6u`yB z)djUG%6TF9zbg5K^&{8Zx;HfAiLtxNkHWSgkD|zVsKhedePQ4o{81f3u)85(h8AfQ z$PAC?R7*)PR+|tfu5P?A@Pqz+kZ6nUJxXD)I}d-kITFnwN>?r!Y>Qk(&9P)uSl8a@*~KG073+a zoW5Z8`%+uH_Z*0FY!rkD5zpw_zn`hI?Ktj?s$eUVV> zx0`vZ0F&fWdqZGY))t<3sM0MLZ#SF?ZJgae;f?wJg8tT6ZuE=p>*{9l{L}nM&~Bvi zzG1mN+;Pm}eC14%%~}(`zXr4z@zvEW$ZP5T7Dy*`@_eZCgh#|XoBQpXJ<`1xxKpC5) zYdzf>8-}MzqH8M#Jng!-<+M0lu3qJ_)c3)tYHieKiR;u6)$%Pt8nbU&dmS?=juW2` zqac+nTpqesgL3;+cw_EqZXK)TiKeT3eD2ddPZM{8dAUbD9IRd^eI3!`!$%kIDWa{G8tK4eWCu9U7G4zTy;h=*OpWa=;KYJbv>#EU%OcHCTDt*orR z#-X6mnn=jF%FSJJ2~ks3#Q}rhP_rI~1|O@Gy9#wCU8Siq1B4#=0~`}V2!CyMzG1m_ z*ZVt_E3Mpa+tcyr6X)dRx$cGe@i25l!YXr_RZ|`KVIs>MnvQ+q~E1eChLB#j%u1oU!H#Yr%#_se+0R= z{D8i>iT}ajy2131dX@8h#9Q%->N31Ct9hlXsm3-#h6HCN zlC&1B4OIr3so7o!{;s;V5A<1>q@iN-5MGaM^;F3Wx&7sE@BQuBb?DyFq-tCsmeDb1 z5%jb11>OADNRA=AU9x?}G{cB%x2i#vd;X->jZ3XlpWPMR|0wiG4|+X}x3d0~8PXi0 zxWKPgYM`(od2%--b+^)7UtjcBDgecWg&uT!O!imehsqt&^2O*N1;Lis6x3vzHHTqL zO|N^5`FUs>gkDsJm!aVw^`7TN4-$GJc6N5YN!DiFd{h_G^awIay!+B-vh6sfB0i^zbULcbG9&=qIxBEk4yOa^6_g&dxEE4ZcNOQX0JH#x= zL(_UL28{xMlQY=KTg|PVo&BsHKOXLipC}o*{DO|XZ^?gC3jG!oq+qAUepG1(yO4g5 zRJpB8DZ074&y}Q+@}M;q&T&}xHMd7Hsl=-iGfOQ(ORXYZ*Y6YP)s^`7btK(Yj=b2e z;_#xPMmxQXt?Pi-@7vksL$-_ZzYuyi9T*E86O%Lmbu(+D`}_XGcLT4{+=6lpo#+h$ zU(TbV1ho|Lcg<`*D&cbbAH98iy7{)=w27z!WUX2La+aBerDtFu!M=L=E>zBpN-N|6 zkm;DE(VCs|fL*bgt%(re!PFH^2wGWc#3$5j_f%CwKh*Bb#ZYww2OlQ=qzm{?uP*%# zJ*>XI(u+@*Dgdbmy?C+yD?QvAh%`8mX>mOIQS0Z$ODG-5Tu<-e+d5)p_a0)_=RD

g(~R07)lXAV5o)RQqM(V*uB?bO#*Lg1 zs(N#1CDy)4E&bw@+YUyv^PTjrm_s$6#Sh5=l)i6hm<#=123G3R`1o66&!2~6R=#o! z)dkc&D$*NzF?O&~KtxnD162qh$k1qjf=GBRA@@z*V$b|rb1`<`Kk0ha9rKK}L?0}f z6cE2ZSAb2n2VLh9hl|HUZ1B5=?)0#%a%fG^PXF!O`Z$Sez(%=_*FTZq^|7-0m4`bU z)gjV>?I0&7Oiank?L@xuoHz`5+PuA~rQ#U7Y##gmpBLW0D`uepCe2MCj*-y&c#L|< zllMBwdGRLxgKY?Gw{b7C}EQcEwIe7nTa% zH)xsGtM0!-4~e+F%d03gF3~c8i_Moho5DTyP6)Ojz-T9#d~4@hd4}rQj33pdsg0+Z zOs({eWCb8`Sm3{Km6bzr(VACICAlE7ZgVkV>~i*o5h^MHt~gR91R#2H&_m+AF=z>q z8S8Y0Qe7(e-=Mh46bSy;s!ZNlDCxY6`HKXr6{vGHFVkZ*@bTl z(AP?uSc*(Z&WjezsQ@kQ}M{%d|jI7czi`|1_eP?p)@BuOlQW5g?7TjPA<;IJjd zHAdFho5V3{y(pB@`TpIs?X7B@ImXjd5BkoOb)TKx-QJ-gYeVuFaN*oyVw+KM-6JFU z@@!tWJ7stCZoa#x^Wbee+9AnojXxWzaIwq@IdCo{RnkpKU3MF5?7MuY=}}RsbR2*n zw1-lcBb9P=c+jy*VomlY&frt2wJ-o(>h`Aj*9pq}=H}e#?X>lAmuQcj2t420tC+T% zvSvaKS*s&CfFz@M==mDmmxa&o2`tt!T99*5y6q}2Z`t&eEF38SterVQUe?x1fR~wB zS<9wBFG0e7*hqEgS%Vk9nU$47r_5%GKWW|s@Y02OzI#|t+RvbWtbOGO{{=`J$9F7{ zCz|mbX7*buCV)qj<`(qm-pfsA+}3_+81_TlWn{haR@&WIY#XXA2KB-lcFFb6_>DUy zw&R2Cs{g=^p9mCeY&}g#BjMJ_Btv4=SgcN7obyw-Z|bwGkwVzRM4;pD8yVRRU)NiL zw3O%XVQOlsR@USa`I;Dh^IgQK@2V=gv)%Re*N2P?jjlEdKu1>Ux9cvmJrxafm=YQy ziD6;KWR^eE1LLH=+d%mrlf4dcJXrZgY|K}ypnByMWYCh0y$ek?73_X%U3pUF*iBPcbJyn&A6J9Xs&H%GaMrQwVLkA>|*aZWeA? z9zfgUw*xL=Mk?J_-%KoXG`b03Ev` zT|<|ZHt+=i{&wrfSQ#0=2h(%fN^B=*;zG}gee>BL`}y-BX-2HB3#j^H*}cmNnYg$( z2ARztE_g8#<@mASWE+Rt?U@uR1(h=B%29N)F=T`1AwvWG{adP3ccp}<5G@_u{F%C~ z=diR|Mlslyc5X@_&6+c;EP4jcJ!jyFkX=pO+G`-M*D0~@M8q_gDkiiQ`SK0J^p*bYdCE`d!Z2dxWS6^3^DeQS*v z0L@bF3*VOl$e;&BQ`PIkQHK-Gbb9S%0|}H$<((o&2yXt`t@lvWSt=U5Yh7M-&nA4< zqlcceHHnED5<&Rud%Gcn%br+K8*G8^ot=PvcB0f+a3?2A!fumjapa}YP>Tl$sB5K{ zrc|J0et&oC3@H^fS5&pJZhg~L63?Um{?)5jUPg}SGHlPLdHBlSZ4{VV_l^aE+*BYN zbQ7-{V|kmmw2j}PS{VB*ic)<(5Ft_`5qJ4O;zLHTl(b4bMoZPg0D9R=ZWZWr!3ktZ zyk9S(Iz0s}j+ibWBj80efe$)zNp~&PGMEY+Z1sOWy$qlX)84|Mq9g_~_50LkUh71gM%>FN*R?IX1l(P>A zvEd}SvqA45IzTZF__hR6Fu*XhR-~;t8@{9rl+R^F{5?yq=q<)nj#|` zGc$@K(UvJ@8l~&P{b*zM{nm}pR3i*4hpQUPA~9yDoB8{YD?5x#$q7#bdSgG>Ve z1_kr@G!tki-GBc83g$dCUFO;$fvYVG2u*wJLxubIm$#qA^Tyh56|SwOfz-}0mQ`$< z;L%Rl^1Mr01Z4oFLv&62M2Q?MFK(Vk!BeEd)YDa3I$B!dR7*5I1pzv!ufRmE0Ff3H ze3vTakyBMAMVyvoZxkqX{CU%Fqa>|2Nz_JLPcIu(=|j(Mz}i|reta8ccQKf*Mmo7X zfJawtS50k#4aQ}BHhyuiZ@&bQj%APm`Oyr39#mYLzPv8rQ_J9jr_Y>GS5NI38p<)M za>q1>v0B^MxRl!5eWZki?wZ(V=%CsvwE24^*KcJ1N_~j^qv^ zo=TeTN$3_ls*Zj&rS|!26Cs37f4-VcEs(^yn1zHeRGp@{WbtDppM=G zE8N@PpSI}%h_8o0c+|%F2Lvqms*d?7NmO{?YpCNwiUx3%Krev>nHH^4tSPZP=mCXmc!}4py>rS1J<& zL2d$x5@;bE;CiZ!3*H3mdl}kTK1eS5^kwkj0|I~J8N|V(VHa)n%2js$C5lbJ_NlwHqo`9NYfp@mEVu{svuKG^hI9=U{rg12ytn>%oIO zb>9j4o%y`0Wml_04o7v)W0XJ@Ooc|KymN1`uFS zFbNxCyGsMa1PC8JXKMdEKlpAuznw1@}_IyFSTrKdC<)Cj@+#Sa3I zv>Sh-T+G~85!y`5+$1~sBi!Q`I-0t}aQc(4*%6@5ODz#oEw}{_SQ{D|>U0eMb8a0{ zsq3&^Ini)zCr&3%PcXM@hw@1vh{jl{rD`qE`NKq?gJ1&LLy^c(0uA@D!&L?bhB^GO zeX>iMdAEq$pm{uTF1G+*<_onC;A-ouRV525@QwI49Jv^cQ4$p;$jehWw6%Y5+i92d!bC z9SLV`dP}p7I5yH6lvso=HrFM>5sel)xdtJT3uSiL;1ASdI6UZXuS(YGXlsK5X9pZ& z^LAAY$3vPjv#z(V;WmVXf!9Ys-dY%6S2}t|Y4Zn%A9jf?4t^DS7jddB zkJ*%Kl{{Wt6_l*BjsKG$< z`zht?OUmz=T#K{79Ipm^Q%92M&PsfpZ^QC=Sp_GjB0#OykfFsH-d?_ZnQvQs04g{% zGB&oh?f98aFc(xV6t`*X>q{(|=NXhKL53?T3w8$K3Ye3_^<4BvP6R$=Z+uBT+MAo< z;IFmQC8xYO!r9xWnUWlJ)59*&fK$z)@YO>u5d!TtZ)8CM>C8KV>~Dbo8!(oNan@?#Gv= zp!6Y#VPUj7;t<0vybqxb%7iA;uq_dGJNHB7T-3LG2s(pW-->)n?Mq2FEWPE%+i9Q~ zmk@u&@}ONLW8x8Ug&Rv=F_|DebEpvAPkN^6X>Sq2!HRQ`NHR|B$Ln9s{U}a>Za!P~`32#w$a1fUTY#`L|O<74j$U{rgXS z4W=}WXn}>QSMt7&A+Ser?I-D%yqtGSb3UMYa1<#4w;lGQ5IkDdQ-8dHjRdA`Kr-+l z+DR1{`za3hLy;*e(g5}z-~0XUUs>v3=JA-qQ+1|?QYMxadV2}^v+?tw^IEq4G(aIndc!|;;dwz4M%A;VB zbLuvEOqt1VSbzqkx8@y+^0Knj^2_XqMPo4!a6CjfuF6A*KRo<>cv6nCdMz!jcwZV@ zJG=V<0d@K5a^N-0{rGV!D*isShx2$KWF-CfK5}$#4{`}p7V>bN%secTGP|kV(E)ix ziM+y3Fxh)v>KS}0WkjJ+K`Zj*WAmAjb~vv?1UgS==M_H=p}sw@^|@X!LnQY5 z+NZ;5jr_N#6%8%k zpADvOUVvUWGV(;|>(}k`r0D2qAdC98wmvRWh%x zqtMe7FIkd4_lzkhCYd{5pO@53K1cfXf-sU6lVg)0C$4oToyq4`J{U)UkvMYEYs^Iw zDFA-l*aLJp0$iJe6aX^aty_)N&%B?4MveAWhfxg_B#bgJClp7U>!X@K)JF@^kuFkUr|v3-CW7KFC)mI1VU6-$6H}B z#PZKw`8a_NXxMd4cu6B;isYp+<$hz%)A66>qwdap9Y<^#gCLsnCnhGaZ~lDxSqR)$ zXQhoS$Oe6VeOT&o=y-WeY9Bydb@6uq`3~f$yYlkU2AMAUaT&n1LhLKo4vsH-f@)#A ztMEMvN|iD~CEx%e7|O0`#$%E);Z3%5)`UbpnN^u%?rv_x9-J0FY|u2xLNiHDdATlr zWLOmR(6X{vh~JlYCjFi~(O&hQBt3&N0sK_dz8qQ6ph`zc(}YR`>GUI~? z0If6NT=D^2Ca`p2|7Jtm0qsxcd<}>)%#4hMe}!Ezwj{)uU$PEdJO#8`SJw?%N2Sj^ zk%5sqd;XY*C2O+*e55}w2=R4LI(Vi90vw0h{xr4_GL-EOYe6WX@+{UR0j*c{LZthu8rS)x3X*TG!hP^dnzXNyo%ZT)tnJEye021wFbbO@QKz8IbXN8WW z!Ss7yaxN5W@SF4?Qr}KeFcLdNz&K3IJUe-Q%Yl5ia?crujoEJ~Y=RE&zP5Hu&pF7~ zf~?-nU%uE9$%Yylf=k43tnf1@aSh4`umYu-=HTVb$!XnSHii5@Je-S4{jfeR8ql0y zKR2$xKE6#gj+$hT9UGF3uYAa;SXFVgskyh%W%$b@L2y2w45WAv*w1}mN6Dm87hI)S zhX6x^imRh?12akNAKNliI9$&|(t?$YcLk0)5j7~H8Q9$1eAS-}S=y{y@YLzkT#PDe z@j;(U&$#!4nF?|n`urwzNPAqjXgzF=i~krTiN&%y&FV|qLc5EX4-^_fn+QrRn00?ZNYVNEyu>pH&>-5ZuKZ6_2^)F-t+P{o=+1L^?BtD!XMMur;^GA%a!8@F zzke-A>l_qUS&ntuu#LmAH6L)ax3?$6&2H}66&QuzO_)TP&y7-~tmXwlWJzO7W&c#U6x&$r@uNM0icR@h)P%dBHz7Up2hsY|x{h5iv zn=qjE{dDwHTRO|kTr6!(YoBflZuR&jDKO%XWf#LG{zo7l%IOM~!!7T{3P)r*j zBybufZLY}^5}$~tNK#NApzwzoxGVTtcuGt*!kvxMSa0-n@XXfQ7?`!h<8Vy zrtoZfbsE5p@{nSW01bd)D^Sz`qutYNOZr7NG&Yu9GQXX!0kvJ+{eYUg-Sg-(0T4=n zkT8vt%U{9QD0DjI)RK^JzuEZLuP@Cg#1m)F6!ZgQU^!nQ2o%1jX9BYDk>{h{p^Hts zCH$Zf6VsIXAFwW+p|MO%1mg2mXYNN(et;pwrp7?-{wu+aREpxxT!jM*4%H+NvI((W zAx14VFnW8NwlSiA-VF=9Z~tQz6&3MfJ|rRZ$BzeIER{rdFcrwk%4Ti84hsVz<3}Wt z(th^6aX~*E&9>s1-U3OZ$M&MuRCG183a`|sPlqZQ84-pZl<8zH*8F*Tn>TdzeNkS5 zL5BcMzDb=ixc!w41`fYy1hFi|*k4F54#l9r_?r+E@w@FWRAQ13;6gvGn!z{kD`C{+YJx@v^5hzCX_}F19QEx}_tcW^5u- z?^KlFIv3;m=j~dqiK5(YV$X2$oMweCPts`$JxO79M+fF5bqGS(C-4`3#7>KkP;(_d zvxE9(B{HWsC@(M1S`k4RI0)7xCoI)~z-zBVyThd?JczAdG7MQMod{-<>xWpwD#tEPe^&$ZO|E4dxr@)|WE{f6- zuo}9%=YTntUHMQUZX(%tveFUn>#GS+jAV*Dgf9^igbk+4P8Mg!~l)2{&vMCO_yVR<~Ks9^_^S=^!#P9(m3}OipPL^0MEC z)_kzr;KX2iF}C3bYWN?V#mciss--Bn;UcD?ea^X`tF5W|{=&j6k_i7#KUFo82hQrp??1SfUm z`$V6&*DY|_+26sh1blc`sm+FUQYPdyf5la@lI0G&2IXD@P2)Y#Fud6wV-!2L2j4pmL@z25%Qi=ly)mf>GZ? zWe~6#${vF7mZ3_|*H)};Z2Vzn#^TU{C(6cbqDdvuAGOjjqBKZxGJW^@MZGxDEHhIc zhPDA@A;z@=pAZg<6ZJUh73afqw4Wa>V_uK?YI*N4p|dq%VcPLWN@C5M>4D0E4S?Eg zV`_S?w<*y=KMv)^pt4|j_@k3eBzT!ap)_Jo7xd3ty-ZRLHRoY)!CFXaF$Mh`=r}6% z*dE#NEGBxNPHZj4{yc#hGbV1I!J3dXhw9{dGd?{?w9sKyhkbzc0uYh`4Or=6+2HMf z+?<>!ytJbLHN|Uo z3?IcwTl9%O`38pUx!zni(E3Uf@?-@`T@y_qU~`I!F}GM5vE%opJ$=!L%`=x;8Jj=tfdV6ZQ!OFm_v| zcROXcS><4U=R8xjaZCG$$zV(piujKlJqkXsw7CgXQU&HH2OOvE3;wwp0kA z<3S_7`zK#?;%|>3Z*b5ph{C3#JBfts*-{d{S7feE)td zV0VzFl2$0vRk~5|8P!J?D^h7cCR&dWLbV_&u=9d2_wfAYd9Ud2HQkfTAX9!1*rtSX zevPJODT|76BRMHb?M;mFR{mOhHz9X8Be-WX>vohm1_i4qZ3C>osI+uSadaI34zx(E z$-{twyh6xXCZ;Y*I_Yz1O9bvs*kX_xfD??sKau;dTi|IJUMvgrEaj9cX)Phm#0GXa%abmP}gWwDZcusL46{ zCo%=na{3S>GJ(|_Hl7{@F9Tmp^FAM=+2oFUw#7Vvn`HyXVD=bISRHEygjIpzn%$$VCRs=ruP~c$9qGS_q|sz z#Mt-@Jbo*?(=pyut&hqSoEZKjZ{SL;!S%De&bdSGgMlP(E%@YPE7&?Nv3TV5HWU!w zo8B&2Yg_b$CF7`#rSMJibE!km^v?#;Hr|5*!oZ{V7F2#P(lxggLV@2Q!*EDxLoOdm*&*uFCoNm7@VjCr%g({ zJo07X&IL{N0&oftqSZgkd&#=Jn)&v!ts}bF^Wa^$bFWnk(%!6`hcvZblS{w0-aGZB2E$4m~IQJq2q_BuM+7(X&QX*e*fE z1goO){3eITuH#KpnPSbwZ|AtQZ0p6zM8~p(9!Ay&`#)H0QUj=BW>cL)*;dG%a z#2gPC`Bps9&CDu&MP}vY+9x;^n^;_nc05hu=h+bTXHy6K>rCKW^zD;&Pak=1YZz{> z4=zqfK@WF0U?x!qgt4c9z@39(=lEnsO?aiuZLrsXf2V135Cat}hOAg{(2KU2)d34`38+K^_QD8!@DomRzFrywaEpMGvh zcXrD0%dAC|`jm?ZeJZ`H@L}SS?m9(~6pZs=lU?O5XV{20XSD4hDevq$olbOFRi`bn z@1G-0Q4nKwu}}OnMW4zjy*gaa^eWQ@iKs~Vog~=rLN%MP5W7v0kSgqRacBGY7(Z#a zPO(#(qpZ9+`8uUL7cVDbnXSU=%W+zz`>_v&0(X~HPZ7{FUs85*lQOv)1+o)6G@*Rb za>)Jz(@+i!A?>lhW`~Ea%B*Wk@3BdqqHARFG%f$^bdZTNI?L2Csd@4|JT12xns8=a zzl~=;bZ`5SOWpXA?tzx()%8vK7@_-DF2YPSSTIOi&C3>@^zj#J9h!ka z1ixldb_bZP+XlKMDIRA5v#G~3^VP}sgJ?Y{R9$A5XN4?b@!~Fq%R|u*W4$C`&fFG7 zMKwWbDDwx7%TdDkb>DIBdc};4*9TJHIe&B#wDGS?V|GC>mrfnwn)|+9)jSy)aBS8a zB+y@i(a1txyX;x!yV5Wm@;FRSg_$)L499FF4`QS|)_rF6&Z~pZmc0TaonTByfN|>m z!#L}VGKv+oGg4(n@ z#@agJ2v@YLo1z@K;#BB&TUMN|#`!}oT1H3OpFLy*(>h>;F2MU7^C}iDA8&7`n(D`a zOZ&8Gp%{XB?CbmB#EZ<2Yo5|azAXoNoICEga5qCs^ykaAg{fc53T0(Ih-H+X$`REQ z{*i30+}RZ0Oks?$u<(14#dmjLQ|@oTu+)wUY-%vF@Y(76>?)U-hrL+!vxc{@3LG5w z=>t<^2Ppr4!d%|0lFkv45M#{pXV=y?tpbR0G+`QB} zo?y^c8c^Bun@Io|pnH7GLtTf?bX7~#aDp5M>k9^M{JJ!KNYg2$71Kg!`cd;baG;>i zsdT5jp_3JC>aOUt-2YaQw&|ND7wsTx>5g3M*gAJ@dwaPd_JQ{q%6jShy$W6j$5qUe zGJ)h|l{)+)T3j{RTpv=kGxkRmu=3)wGXaQcd}L%K_C@VcK~*hKDqMbd8iGs+*mc-J zd&o)l7f9OS{%agH;6CndCWD+0zxvM!zv&kae}&ZrluWFcM^9(maiAfTe&=#Ef(Na|~+>bWp}h`tK4e!;oz+x!j6P zi;dybDRJi?r98^O9>8cYW|#x!_Oi0%sp;5K*c_c^iurXKZ5V?NJgL`z;%T7(16Vzv z8oPlqYO%1llBhqID9wheH6E(rM#oqb4@hWwNf=!bN&xZ~@)yUMd(ex3ci^X^IEKO# zkX>-c#qj3zsHl^7pHM|yqoSr}#T+t2$1KRz2OKptB4H|l6-V(VAwgkI$gF5UpA1IOXe9dCJ}R*<0nzh5`-ch zO6hCYG69HVc>uzp)31?7b3p%yv4mAo0;nkS}2hV~j2EZ`~d5rQ&Jv^(TVledPtP*ORQi!^m+K~6N zh897dg@|pO;E6zqhX)cul9+LUNJ3PKZ8pAC@dYw`Qn-(Frg7q8WICc1_)Kd{1$U<0W2x{_+|o*T2Mpf@Z&#pjV^i)t>8bVGQ?N^e}CY<=Q47_Y|RS|XXpM@L7ov=6}M4YQ}ezuvih|9EB-NmENd*)e zp3Iv-lw=KTU{@U@9PiNk`A04DVZ z*aE4ksiP~~!NY4v>G;SxLj_8z-YcFlgXgcbh76el)$lz!0f}5|FdgUN+>8eupgEKN)(Q&@d4b8^ zdFo3B3Q2h-A?bqemf!ncM6l*!}bDyr^ohQvlR+RolNiNywAJ;gDq6vEpRH0eKn{wJFj50!K=EsdezIw1XCzT^bADdAwK#?4^?4<`vKghJ~I;6Tt( z9u9B7v>?pL92}2HKP(bhkqzAseOhPMbX&aC$v|~5WAE?pD;s=+(~RnR3UVzwJKjJt z7!ib^p0XYm34ZbgIA)krfP=F`pA{Ir+Xmb_n2i2=33wIrwL3MeaG=1FG_->HG+^ZV z3a+g>0kS@*uy7@KG+>M@4AEi_z8(-IJvHO{!QYMw%#@CBjk{!%maxyi)|F^!HPr;r z?0c9Q#v}DVFKwa_GVI_ujJm9P?r=aIA6;kG-5JlG z?e0pKk0v~VehGk;NgoV#u-aUTh>y=Ybd=!%K?rC97+J#1%gTTzjm|a1SBF6+Ks`_B zV0aiZ0*JdytIyoN#Zu_?meq%&Nmf*}zd^_VMcAz!DWau+YS!k{g(_od@ zT8H3HLoF?i@a9PcvI1C6z_`aM>-*pHqxa}!j(*h03DkY!9vn6V5q^SM7e-|ye>xvtOk zK36}~VP;;h*K>O;xBGp#k7e=V2+F<9`?1hCi~V~QY80G+V2=dR!94&ppM&sO=a8}S z{Ejg#bSpqY@ZQJ@_k&D~^Dn;zDw8mn#Ms73{WH2G0QUnvSdAk0AfjO;YuT%;(0N@1 zWEf!UNK}juFgRR8Q$tTR9yjVT<$WUMW}jJoBZlR%$U*Gv_7)v*)UI`$vM@y~(tBcV6 zFdoq%jG|Py?#j(7RUoYq1w_vNMhH>CXp7JNLmrNfjzRQ5z!s-OI(I&RP~^b{rf-hU z`1x$F_Vl5lA&nwB${z&KB%+{*$Vg3zyI6eCKteVZf3rKyp~wcSF8i##4Cp{6UBC|X zZ#w~!4$QkgKCXG`xgrN9IJEA=isA*w&BaD16P+=rvJWyW6qF48HeWw(#+wn7@c-HN zt_XD(?e~zc)DZdB&o|=KGm<&tjz>s7fCA?MJG&6Wa(KP~!i=n%Kv|j0zaoBrs_bDa z&m%Fw=+Fw`{diH`FDvYjO^UzmdS*a(gZqgS`$;&=#w#Ix3li`ev%uMj7qV_NQ6;i& zh<=KT9^|x##tXVN;IT%WPYRT7{lE+Gn zb@j6hmNU$4p6d<=$Pej0`x&Bz#vigj8RHat8GRPzaxiTWoG;vI;v2k-Fl zU!$P7MF+x;nV4HkB3wXknrsgup@7e0(zV;J-r5$e32Pf1<_)0ySEd}qt`1DAmIx(K z-zirvv3qs&bdapU4`s9~0WWI?ai5HWawL>F!~}o?eki{k8zX|RUQg! zR@g=m>mNjetZhp+^htz#?(avFq3|(0gPJv!swc(;p+p7>Ky-6?DwFw3mI&z?0`ZpY z>IDlH5QTvy6mCF&6cCQyAG;mX#Qc9C`FPhgHt0!fbg@r$pfg9xaX`Oke#`6_0$*yW zm-x9M3IMu>u@B@G)fRw>RJi(8w9rUWhxkjBs9= zsEa|=(4H-}EMgylbAh9^H)4K}aylevPoF=xL=O3Ui!shLjE<$PZ9IS`9+3{!TT|-^ zqp~mwWnPA>ia=yGI`gREyxECM$`eNqg`ZazyQ}#7m9c469}N8ruOCN`A8rQN=F`mX zYq8#c(?=8p9Ri6&I`Mgt?) z3uhc{lh(P-qX zM5FlY{N1+g+j~vPtW^lM$jODB5P=Bkf$!hs+o1PA5_2$0-WX$-lwh9#A`xO%LMfx& z92xoS$4~$!0hw-tgM+N!Om#RXF-4;~Cv)85>YUb9 z6y9+fTeu2nA}9{fc?yctPX`TT#42pm&mT5QQlEAjM46FczxbcrE(G%)%{vHS8QCy+ zJ83ie-zDwJpztUZw9deEfzV&Iu;kUz{SYJGYDlw<&Fo$twq5(SiNe+p3F#*ExgD7P z{I#dIav(=&IF-|uw9k+1Jd91R(hic!Qt$y?yoihU40=gow_JRt(E+%S`;d?cm#HPvh0s(Uz)&1Hw?sX?;{Mn6J35oO2erG2(Vir!1v% zCi<6TjlQ4)9zLx zW+T8hc~8YSw@P>nLr44>9}|`7rsD!@H1vxs5$f)16R0oPi@)R}G(dWHS54ZBg_waL zb(qTUp9u7#5R&q4Tno`954V2%_dj+FaKHd26G9UKO?FyW*a}Yqw_)V$yf2ordHskc zKI4Dv2o<*fS@9*+b)60s)rW*fkBIM=X5OHtTV+4GI*Z;zLi$ce=uHUm^ksc8eSoB* z4-d2sB0vk3 z6?fE%_}@3`q>zBKurMU()0!M2RfWo3C8=B2v7`V9`YC(!z`#5r3C1btOhaQ}FHn+N zSIA+W^-El*iBf6B0V;j*US_`>x%!v0-l!YEuwm? zp}PpuYA$)i*nWqRO{b=o$1P{(VJF6|@jInUoe1f*GtJ=PZFI)o`n{0UnCD5bxmR;f)z}$ zjenhZ5lI?*gdr+aGG(|LRZPo+x-nCH*1zI)er;?qcIr6R`5SXzR-q6Fz{IHeo14!u zfQFb~)pX$qt~Ne24cqBJxu-NLRq&>xeP1VA18wj_++e175M~LPUaK@H#P$Jlb925y z9cw*&qsVxA0?fX8^27EO@Kh6ox{bK7s&+41y!>>*tjgMrl+~OW3#>mtU7$}HUfhOT zRQOoyxgBbgPrZ~e4YIx>RqHG8T<-aQO_`dSIzZ>n$CSWW@cXSxf(|j%>Qr&u=!%^s zp`h@)xp4h}?Lt*m)jr`QrxBAhY3!P=u|y7cM9UiCH&EuA3DaGMC} zoRKtgsc9_7Vw%#vUvjF{24b80PFxJ7v*q<3l#b?&DIhp%EVjjBHHIp4x2-P^#=p zr3#)>raHtKS@wAHDyCMl{7;u_gMQw{<0Y<&oEB=U-3*8s5bq_uIgZ&pSUl-TL&9KI zPN~6R1FozF^I1mUT>%Oja^t%Gt=^YWDzPk*i7M+IVUcwfTQcPgR?)Tl@N!m;^v1s% z71OB7f@a3s-Z`_sQLOFdX?!co81?gS-;#^EA3Rt?6bjFNdxf);-`Yz_Mr;@jxb?J0 z5rnlU6A*WZRrVZ@@&GbBkBZ9olt#RJE?MG{^i-(uc zIwcvqI2jLN(2_MtNH+)!)@&BiT_Kpv7YQf*c=guhs+E~3Lnyb~E(WYd&@S0&aiss`x87cX7tpP#H8d;&-00$97wd&cM_k1EHC6()m zQ`QO*wkywz2cEekw5WI}!mAJar@`NG-gT-6QD*Q89f>Dl+sBg%ATP*1({C=~nycjB zGQ|8`sNVX3{01C94wi*RHoqSf)xb;SupEtTJM`tK*x+@BGL2tXyDI0Me%NKU{PbF~ zOaPGyQ;3Wx{YWfM8-%XBEGEsAoFgAke#Ye@u^WWwgO#_q&5(Y@%CE%{xMyFuif zscApu;o)olz%UENUNZMUNtoLFP$qrKoMN65u@{vtTGIow6&!>0d%lH`v{>0;s(8gx zOhhuZfBhOfBtBMFnl^i@4$&uC+J$FrW)1@pqYXzhKGVm=MSIAZ1fbEVT*Vf{hyv%M zM}IIxQ@y-ICb&6aAq%ZXiiTSExKYDmZIW#*6AG(~Ti6vtI zQD4MEU^L{E2u>*-dA`0|+Vq8zKOSG$!WG;$PN+4})mVO=+O>Tx*S}=a{#0x3c4xI< z^j^uujunq-(|$O~PQH8<(>Leta)hqP2>65kC8;ncO!lCIL;8~G7A+iB7FiOJx6V&d zO~v_tTGvBxeBq)YG(*Ibt$n;qomel@HK#PIvrhFE`oAkY zbN7&8$#SWTJ90|;J z2-q+8`+gK`26MX>wS|mSl0(z)KZX^vOvKC3oE#Nl4wEFU|dmgLy(w~;ub`Q z@!}nxFzU%PGZRsCg^2!P?q6sBG)0(=^IlJO+uuf=V>mxI0JCHhON05!g@hu(Gn5yU zg~3$|9d@EWBL}BV<_Qa%_S>73l^c1DR3UwyquXwu?Oj@s$hjZw5w->rAnL>!t(iJM&q@834EN@!SKAVt6%)Kd z)_wi5F2ek;l$$4vY=QHEd2DGwy9!;ZI+t?^^M`_ph*%a;9RmAgeDFYPo)xo1m`@xN z5JZ4~y7Xq0q4=+h7+ysTjP3pE50Vv!r$*X%4W?%$XViosnkF_jTqOVQ?1nT%Wkw$_ z-G^+qB^k&Tv5fG8$B-N5me1hD+jB{O$uMnT?#$_iUSX`UNrX%ulaWZG%J6!BQE&?my<&KtfZcq}a^!(3PIhIfxI(b2&VsS*1)D&9%Z6kTnC z@y`mydtZVz)+~)a%L!M%6xt)R`FOjYoYTIi;PrVtR-1o&z0)=ABqZ-9Udg5Cmm=l7 z?;n4MIU5Cm`rPUTc)u!7^TAJ*b21yeUIT>BH{|Sw+P<$j+lxV;ETzdW1jdThHxiu z{_NQSPtU=^u~;lFR!`A~P8?kDzQQVp=>qBjB%^O?I&67O5}P3cN!JK5ZCi9bplpPq zr=FDLPEY5Unh-j4BAT3B|*M(9B z=f8}Siui?6bW(6#zds%M0%8Yzs}*q{XTe2iwQRShXQeqQGJ0?hnB zX0TX7Ef4eBR0l1;dK8}UPwcy9Ud+CI7o*DA0PC#P_O!$Q?mZGry~{iO9+cev9n+3sIN4Y z=;>4bobt2BR-t_9yh{Y3Ms*NyJ!!YY&H|&M&1NG@N6Qvo1>OzFJ&dsTVZaf6Ivl#R z6Ga7>U=Y09#Du&E5(iDpAQWZD<9PMz7349FUgSRT4-8};@cnv<8mb-hcxEE}^rWIrSw9v%{N<-$!=9O{CborfqT>g`*c z-`||^UMpPgOol$(VTx~qra;Dpz5w|%b2=xrdDqwtH?<<4=Ccs7)2^M~rA70GNSmY` z1X+NFp~zt(r1(X#3w!icGvx$bX7y?~t-#F(dr(x9eiOB}F)wRE#eITw`_;z7nc=;j zzGVjUlVliG&z>9Qk7}}n zlL?jaoy?kqIp7Lk=!%&^At)7PW1H9;x=t`0TN^wlv7;lP?!->XZ(H76x!lq^Jtf}~ z6<(GPBSJm6s@y5T6)&uinKo`0F4x+oBoL0(D%0f$nw1tVDs#W|*y8oJqp`YmtC`jc zn(E2fSAu|@H#bbzla#gS`eZpbWD$nrPndR$vt+DyCD zeD!5(#gBK6%c9<`Te8GZ?``dHH?qz(Z6VPItRy*I@ns_qK<~+^{C>`L-SUVr$-(|8 z2fBSw_pNce*8;&%PmNV{?f37^51ZnIz1%Smm)wfH8EWf`)vpGadT!e^>kI%>%7u{& z8(72Th|i)M(*7H0L+FzIKI)>pS26~QVZNTLwbdWQxo8#g&DE_JjmtBvhbOw!^7Qm- zFU+caq&KwquC&rsx{^|asQBI9Q*hfA^VlO+EEOaF)^SL`bK-l#=avLkxvNSrk45Sxq+F3&_|`o}vRs>!pDfa#=N-Qy7csWm{9I8V`>#26 zZ>}_!@y!}P25Cn%`fD}?b-k)*M^8~wa&@1kM?HO-_|z!nY5xy>Z*Q${aXoj=r%SML z4PqX;V%g+NVQx>@Y+1^&4(Y#%RoKOTd50s(B%>MUgl|~+d(QVhR&U0MDengNjDXv? zmMcrd8xM{DI8*U-s!mkV={j@3*he$KOhnr%p{vY)F(SxcOurVGPfu%CmPtC!U(eVa zSW&m?xueOjqKlD{PSQF45cZSut|wJz=OpJ}=eauTk~A9<+4wBK}^;cs3Z)>gf1G9^(w z-BfLXA>{+-M#UXwuzWSk#-i@(W$P|344oJWglZf^Ln4qsWbSt?Rlc_pQ-Q6nU&dZdE!&g`6{u0$o#P6z5>FqnJ1OgeROfprq zGT=pruFheGvhe3*wU$Kt#?TnaT`C3#vBJu}_(KaO7bA5~8AOaK4? diff --git a/app/index.html b/app/index.html deleted file mode 100644 index b8226f86..00000000 --- a/app/index.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - Title - - -

- - \ No newline at end of file diff --git a/app/index.js b/app/index.js deleted file mode 100644 index 8926126a..00000000 --- a/app/index.js +++ /dev/null @@ -1,26 +0,0 @@ -import QrCodeStyling from "qr-code-styling"; -import logo from "./assets/fb_logo.png"; - -const qrCode = new QrCodeStyling({ - width: 300, - height: 300, - data: "https://www.facebook.com/", - image: logo, - qrOptions: { - // typeNumber: 10, - // errorCorrectionLevel: "H", - }, - imageOptions: { - hideBackgroundDots: true, - imageSize: 0.4 - }, - dotsOptions: { - color: "#4267b2", - style: "dots" - }, - backgroundOptions: { - color: "#e9ebee", - } -}); - -qrCode.append(document.getElementById("canvas")); \ No newline at end of file diff --git a/configs/webpack.config.app.js b/configs/webpack.config.app.js deleted file mode 100644 index d1db4301..00000000 --- a/configs/webpack.config.app.js +++ /dev/null @@ -1,55 +0,0 @@ -const path = require("path"); -const HtmlWebpackPlugin = require("html-webpack-plugin"); -const { CleanWebpackPlugin } = require("clean-webpack-plugin"); - -const rootPath = path.resolve(__dirname, "./.."); -const srcPath = path.resolve(rootPath, "src"); -const appPath = path.resolve(rootPath, "app"); -const distPath = path.resolve(rootPath, "dist"); - -const config = { - entry: appPath + "/index.js", - output: { - path: distPath, - filename: 'index.js' - }, - module: { - rules: [ - { - test: /\.js$/, - include: appPath, - loader: "babel-loader" - }, - { - test: /\.(png|jpe?g|gif)$/i, - include: appPath, - loader: "file-loader", - }, - ] - }, - plugins: [ - new CleanWebpackPlugin(), - new HtmlWebpackPlugin({ - template: appPath + "/index.html", - }) - ], - resolve: { - alias: { - "qr-code-styling": srcPath + "/index.js", - } - } -}; - -module.exports = (env, argv) => { - if (argv.mode === "development") { - config.devtool = "inline-source-map"; - config.mode = argv.mode; - } - - if (argv.mode === "production") { - config.devtool = "source-map"; - config.mode = argv.mode; - } - - return config; -}; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 4830dbdc..fcbd1e3c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "qr-code-styling", - "version": "0.2.0", + "version": "0.3.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -836,12 +836,6 @@ "multicast-dns-service-types": "^1.1.0" } }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1039,16 +1033,6 @@ "unset-value": "^1.0.0" } }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "dev": true, - "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" - } - }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -1145,23 +1129,6 @@ } } }, - "clean-css": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", - "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, "clean-webpack-plugin": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz", @@ -1426,24 +1393,6 @@ "randomfill": "^1.0.3" } }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", - "dev": true - }, "cyclist": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", @@ -1493,15 +1442,6 @@ "ip-regex": "^2.1.0" } }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", @@ -1628,64 +1568,12 @@ "buffer-indexof": "^1.0.0" } }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, - "requires": { - "utila": "~0.4" - } - }, - "dom-serializer": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.1.tgz", - "integrity": "sha512-sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", - "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", - "dev": true - } - } - }, "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, "duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", @@ -1757,12 +1645,6 @@ "tapable": "^1.0.0" } }, - "entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", - "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", - "dev": true - }, "errno": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", @@ -1772,31 +1654,6 @@ "prr": "~1.0.1" } }, - "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.0", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-keys": "^1.0.12" - } - }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -2095,28 +1952,6 @@ "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", "dev": true }, - "file-loader": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.2.0.tgz", - "integrity": "sha512-+xZnaK5R8kBJrHK0/6HRlrKNamvVS5rjyuju+rnyxRGuwUJwpAMsVzUl5dz6rK8brkzjV6JpcFNjp6NqV0g1OQ==", - "dev": true, - "requires": { - "loader-utils": "^1.2.3", - "schema-utils": "^2.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.1.0.tgz", - "integrity": "sha512-g6SViEZAfGNrToD82ZPUjq52KUPDYc+fN5+g6Euo5mLokl/9Yx14z0Cu4RR1m55HtBXejO0sBt+qw79axN+Fiw==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -2826,12 +2661,6 @@ } } }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -2962,27 +2791,12 @@ "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", "dev": true }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true - }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -3035,12 +2849,6 @@ "minimalistic-assert": "^1.0.1" } }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -3079,103 +2887,6 @@ "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", "dev": true }, - "html-minifier": { - "version": "3.5.21", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", - "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", - "dev": true, - "requires": { - "camel-case": "3.0.x", - "clean-css": "4.2.x", - "commander": "2.17.x", - "he": "1.2.x", - "param-case": "2.1.x", - "relateurl": "0.2.x", - "uglify-js": "3.4.x" - }, - "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true - } - } - }, - "html-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz", - "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", - "dev": true, - "requires": { - "html-minifier": "^3.2.3", - "loader-utils": "^0.2.16", - "lodash": "^4.17.3", - "pretty-error": "^2.0.2", - "tapable": "^1.0.0", - "toposort": "^1.0.0", - "util.promisify": "1.0.0" - }, - "dependencies": { - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true, - "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0", - "object-assign": "^4.0.1" - } - } - } - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dev": true, - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - }, - "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, "http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", @@ -3384,12 +3095,6 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true - }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -3410,12 +3115,6 @@ } } }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true - }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", @@ -3515,30 +3214,12 @@ "isobject": "^3.0.1" } }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "requires": { - "has": "^1.0.1" - } - }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "dev": true, - "requires": { - "has-symbols": "^1.0.0" - } - }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -3668,12 +3349,6 @@ "integrity": "sha512-LoEDv5pgpvWgPF4kNYuIp0qqSJVWak/dML0RY74xlzMZiT9w77teNAwKYKWBTYjlokMirg+o3jBwp+vlLrcfAA==", "dev": true }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", - "dev": true - }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -3994,15 +3669,6 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "dev": true, - "requires": { - "lower-case": "^1.1.1" - } - }, "node-forge": { "version": "0.7.5", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", @@ -4063,15 +3729,6 @@ "path-key": "^2.0.0" } }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "requires": { - "boolbase": "~1.0.0" - } - }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -4115,12 +3772,6 @@ } } }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -4130,16 +3781,6 @@ "isobject": "^3.0.0" } }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" - } - }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -4288,15 +3929,6 @@ "readable-stream": "^2.1.5" } }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "dev": true, - "requires": { - "no-case": "^2.2.0" - } - }, "parse-asn1": { "version": "5.1.4", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", @@ -4437,16 +4069,6 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "dev": true }, - "pretty-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", - "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", - "dev": true, - "requires": { - "renderkid": "^2.0.1", - "utila": "~0.4" - } - }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -4644,48 +4266,12 @@ "safe-regex": "^1.1.0" } }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true - }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", "dev": true }, - "renderkid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz", - "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==", - "dev": true, - "requires": { - "css-select": "^1.1.0", - "dom-converter": "^0.2", - "htmlparser2": "^3.3.0", - "strip-ansi": "^3.0.0", - "utila": "^0.4.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, "repeat-element": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", @@ -5563,12 +5149,6 @@ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", "dev": true }, - "toposort": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", - "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", - "dev": true - }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", @@ -5603,30 +5183,6 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, - "uglify-js": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", - "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", - "dev": true, - "requires": { - "commander": "~2.19.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -5709,12 +5265,6 @@ "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", "dev": true }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", - "dev": true - }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -5787,22 +5337,6 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", - "dev": true - }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", diff --git a/package.json b/package.json index fbf709e3..b65ce4ed 100644 --- a/package.json +++ b/package.json @@ -14,16 +14,13 @@ "@babel/core": "^7.5.5", "babel-loader": "^8.0.6", "clean-webpack-plugin": "^3.0.0", - "file-loader": "^4.2.0", - "html-webpack-plugin": "^3.2.0", "webpack": "^4.39.2", "webpack-cli": "^3.3.6", "webpack-dev-server": "^3.8.0" }, "scripts": { - "build:lib": "webpack --mode=production --config configs/webpack.config.lib.js", - "build:app": "webpack --mode=production --config configs/webpack.config.app.js", - "start": "webpack-dev-server --mode=development --open --config configs/webpack.config.app.js" + "build": "webpack --mode=production", + "build:dev": "webpack --mode=development" }, "repository": { "type": "git", diff --git a/app/assets/facebook_example.png b/src/assets/facebook_example.png similarity index 100% rename from app/assets/facebook_example.png rename to src/assets/facebook_example.png diff --git a/app/assets/instagram_example.png b/src/assets/instagram_example.png similarity index 100% rename from app/assets/instagram_example.png rename to src/assets/instagram_example.png diff --git a/app/assets/telegram_example.png b/src/assets/telegram_example.png similarity index 100% rename from app/assets/telegram_example.png rename to src/assets/telegram_example.png diff --git a/configs/webpack.config.lib.js b/webpack.config.js similarity index 87% rename from configs/webpack.config.lib.js rename to webpack.config.js index 5a1718af..2cd2bed8 100644 --- a/configs/webpack.config.lib.js +++ b/webpack.config.js @@ -1,10 +1,9 @@ const path = require("path"); const { CleanWebpackPlugin } = require("clean-webpack-plugin"); -const rootPath = path.resolve(__dirname, "./.."); +const rootPath = path.resolve(__dirname, "./"); const srcPath = path.resolve(rootPath, "src"); const libPath = path.resolve(rootPath, "lib"); -const appPath = path.resolve(rootPath, "app"); const config = { entry: srcPath + "/index.js", @@ -19,7 +18,7 @@ const config = { rules: [ { test: /\.js$/, - include: appPath, + include: libPath, loader: "babel-loader" } ] From defde2e78a2562514410871c2e867a5ceab36b1d Mon Sep 17 00:00:00 2001 From: Denys Kozak Date: Sun, 13 Oct 2019 22:03:14 +0300 Subject: [PATCH 03/11] Remove github pages config file --- _config.yml | 1 - 1 file changed, 1 deletion(-) delete mode 100644 _config.yml diff --git a/_config.yml b/_config.yml deleted file mode 100644 index 3397c9a4..00000000 --- a/_config.yml +++ /dev/null @@ -1 +0,0 @@ -theme: jekyll-theme-architect \ No newline at end of file From 3465f81201c818b65d98676d81803cec25dfb8bf Mon Sep 17 00:00:00 2001 From: Denys Kozak Date: Sat, 19 Oct 2019 00:58:10 +0300 Subject: [PATCH 04/11] Covered all files by TS --- .editorconfig | 3 + .eslintignore | 4 + .eslintrc.js | 16 + .prettierrc.js | 7 + jest.config.js | 185 ++ package-lock.json | 3421 +++++++++++++++++++++- package.json | 15 +- src/common.d.ts | 10 + src/constants/dotTypes.ts | 5 + src/constants/errorCorrectLevels.js | 6 - src/constants/errorCorrectLevels.ts | 10 + src/constants/errorCorrectionPercents.js | 6 - src/constants/errorCorrectionPercents.ts | 10 + src/constants/modes.js | 6 - src/constants/modes.ts | 10 + src/constants/qrTypes.ts | 20 + src/constants/types.js | 17 - src/core/QRCanvas.js | 137 - src/core/QRCanvas.ts | 169 ++ src/core/QRCode.js | 7 - src/core/QRCodeStyling.js | 72 - src/core/QRCodeStyling.ts | 56 + src/core/QRDot.js | 52 - src/core/QRDot.ts | 57 + src/core/QROptions.ts | 50 + src/{index.js => index.ts} | 7 +- src/tools/calculateImageSize.js | 44 - src/tools/calculateImageSize.ts | 82 + src/tools/getMode.js | 12 - src/tools/getMode.ts | 12 + src/tools/merge.js | 30 - src/tools/merge.ts | 30 + tsconfig.json | 20 + webpack.config.js | 65 +- 34 files changed, 4147 insertions(+), 506 deletions(-) create mode 100644 .editorconfig create mode 100644 .eslintignore create mode 100644 .eslintrc.js create mode 100644 .prettierrc.js create mode 100644 jest.config.js create mode 100644 src/common.d.ts create mode 100644 src/constants/dotTypes.ts delete mode 100644 src/constants/errorCorrectLevels.js create mode 100644 src/constants/errorCorrectLevels.ts delete mode 100644 src/constants/errorCorrectionPercents.js create mode 100644 src/constants/errorCorrectionPercents.ts delete mode 100644 src/constants/modes.js create mode 100644 src/constants/modes.ts create mode 100644 src/constants/qrTypes.ts delete mode 100644 src/constants/types.js delete mode 100644 src/core/QRCanvas.js create mode 100644 src/core/QRCanvas.ts delete mode 100644 src/core/QRCode.js delete mode 100644 src/core/QRCodeStyling.js create mode 100644 src/core/QRCodeStyling.ts delete mode 100644 src/core/QRDot.js create mode 100644 src/core/QRDot.ts create mode 100644 src/core/QROptions.ts rename src/{index.js => index.ts} (63%) delete mode 100644 src/tools/calculateImageSize.js create mode 100644 src/tools/calculateImageSize.ts delete mode 100644 src/tools/getMode.js create mode 100644 src/tools/getMode.ts delete mode 100644 src/tools/merge.js create mode 100644 src/tools/merge.ts create mode 100644 tsconfig.json diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..2e9ea972 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,3 @@ +[*.{js, ts}] +indent_style = space +indent_size = 2 \ No newline at end of file diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..84b11ac6 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,4 @@ +lib +tests +node_modules +/*.* \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000..218ed932 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,16 @@ +module.exports = { + env: { + node: true + }, + parser: '@typescript-eslint/parser', + extends: [ + "eslint:recommended", + "plugin:prettier/recommended", + "plugin:jest/recommended", + "plugin:@typescript-eslint/recommended", + "plugin:@typescript-eslint/eslint-recommended" + ], + parserOptions: { + sourceType: "module" + } +}; diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 00000000..1ffd35cf --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,7 @@ +module.exports = { + semi: true, + trailingComma: "none", + singleQuote: false, + printWidth: 120, + tabWidth: 2 +}; diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 00000000..f696b609 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,185 @@ +// For a detailed explanation regarding each configuration property, visit: +// https://jestjs.io/docs/en/configuration.html + +module.exports = { + // All imported modules in your tests should be mocked automatically + // automock: false, + + // Stop running tests after `n` failures + // bail: 0, + + // Respect "browser" field in package.json when resolving modules + // browser: false, + + // The directory where Jest should store its cached dependency information + // cacheDirectory: "/tmp/jest_rs", + + // Automatically clear mock calls and instances between every test + // clearMocks: false, + + // Indicates whether the coverage information should be collected while executing the test + collectCoverage: true, + + // An array of glob patterns indicating a set of files for which coverage information should be collected + collectCoverageFrom: ["src/**/*.ts", "!src/**/*.d.ts"], + + // The directory where Jest should output its coverage files + coverageDirectory: "coverage", + + // An array of regexp pattern strings used to skip coverage collection + // coveragePathIgnorePatterns: [ + // "/node_modules/" + // ], + + // A list of reporter names that Jest uses when writing coverage reports + // coverageReporters: [ + // "json", + // "text", + // "lcov", + // "clover" + // ], + + // An object that configures minimum threshold enforcement for coverage results + // coverageThreshold: null, + + // A path to a custom dependency extractor + // dependencyExtractor: null, + + // Make calling deprecated APIs throw helpful error messages + // errorOnDeprecated: false, + + // Force coverage collection from ignored files using an array of glob patterns + // forceCoverageMatch: [], + + // A path to a module which exports an async function that is triggered once before all test suites + // globalSetup: null, + + // A path to a module which exports an async function that is triggered once after all test suites + // globalTeardown: null, + + // A set of global variables that need to be available in all test environments + // globals: {}, + + // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers. + // maxWorkers: "50%", + + // An array of directory names to be searched recursively up from the requiring module's location + // moduleDirectories: [ + // "node_modules" + // ], + + // An array of file extensions your modules use + moduleFileExtensions: ["ts", "js", "json"], + + // A map from regular expressions to module names that allow to stub out resources with a single module + moduleNameMapper: { + "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": + "/tests/mocks/fileMock.js", + "\\.(css|less)$": "/tests/mocks/styleMock.js" + }, + + // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader + // modulePathIgnorePatterns: [], + + // Activates notifications for test results + // notify: false, + + // An enum that specifies notification mode. Requires { notify: true } + // notifyMode: "failure-change", + + // A preset that is used as a base for Jest's configuration + // preset: null, + + // Run tests from one or more projects + // projects: null, + + // Use this configuration option to add custom reporters to Jest + // reporters: undefined, + + // Automatically reset mock state between every test + // resetMocks: false, + + // Reset the module registry before running each individual test + // resetModules: false, + + // A path to a custom resolver + // resolver: null, + + // Automatically restore mock state between every test + // restoreMocks: false, + + // The root directory that Jest should scan for tests and modules within + // rootDir: null, + + // A list of paths to directories that Jest should use to search for files in + roots: ["src"], + + // Allows you to use a custom runner instead of Jest's default test runner + // runner: "jest-runner", + + // The paths to modules that run some code to configure or set up the testing environment before each test + // setupFiles: [], + + // A list of paths to modules that run some code to configure or set up the testing framework before each test + // setupFilesAfterEnv: [], + + // A list of paths to snapshot serializer modules Jest should use for snapshot testing + // snapshotSerializers: [], + + // The test environment that will be used for testing + // testEnvironment: "jsdom", + + // Options that will be passed to the testEnvironment + // testEnvironmentOptions: {}, + + // Adds a location field to test results + // testLocationInResults: false, + + // The glob patterns Jest uses to detect test files + // testMatch: [ + // "**/__tests__/**/*.[jt]s?(x)", + // "**/?(*.)+(spec|test).[tj]s?(x)" + // ], + + // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped + // testPathIgnorePatterns: [ + // "/node_modules/" + // ], + + // The regexp pattern or array of patterns that Jest uses to detect test files + // testRegex: [], + + // This option allows the use of a custom results processor + // testResultsProcessor: null, + + // This option allows use of a custom test runner + // testRunner: "jasmine2", + + // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href + // testURL: "http://localhost", + + // Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout" + // timers: "real", + + // A map from regular expressions to paths to transformers + transform: { + "^.+\\.(js|ts)$": "/node_modules/ts-jest" + } + + // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation + // transformIgnorePatterns: [ + // "/node_modules/" + // ], + + // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them + // unmockedModulePathPatterns: undefined, + + // Indicates whether each individual test should be reported during the run + // verbose: null, + + // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode + // watchPathIgnorePatterns: [], + + // Whether to use watchman for file crawling + // watchman: true, +}; diff --git a/package-lock.json b/package-lock.json index fcbd1e3c..1ab17155 100644 --- a/package-lock.json +++ b/package-lock.json @@ -94,6 +94,12 @@ "@babel/types": "^7.0.0" } }, + "@babel/helper-plugin-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", + "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", + "dev": true + }, "@babel/helper-split-export-declaration": { "version": "7.4.4", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", @@ -131,6 +137,15 @@ "integrity": "sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==", "dev": true }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", + "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, "@babel/template": { "version": "7.4.4", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", @@ -187,12 +202,261 @@ "to-fast-properties": "^2.0.0" } }, + "@cnakazawa/watch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", + "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", + "dev": true, + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, + "@jest/console": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", + "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", + "dev": true, + "requires": { + "@jest/source-map": "^24.9.0", + "chalk": "^2.0.1", + "slash": "^2.0.0" + } + }, + "@jest/core": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", + "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/reporters": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-changed-files": "^24.9.0", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-resolve-dependencies": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "jest-watcher": "^24.9.0", + "micromatch": "^3.1.10", + "p-each-series": "^1.0.0", + "realpath-native": "^1.1.0", + "rimraf": "^2.5.4", + "slash": "^2.0.0", + "strip-ansi": "^5.0.0" + } + }, + "@jest/environment": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", + "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", + "dev": true, + "requires": { + "@jest/fake-timers": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0" + } + }, + "@jest/fake-timers": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", + "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0" + } + }, + "@jest/reporters": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", + "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "istanbul-lib-coverage": "^2.0.2", + "istanbul-lib-instrument": "^3.0.1", + "istanbul-lib-report": "^2.0.4", + "istanbul-lib-source-maps": "^3.0.1", + "istanbul-reports": "^2.2.6", + "jest-haste-map": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.6.0", + "node-notifier": "^5.4.2", + "slash": "^2.0.0", + "source-map": "^0.6.0", + "string-length": "^2.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/source-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", + "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/test-result": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", + "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", + "dev": true, + "requires": { + "@jest/console": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/istanbul-lib-coverage": "^2.0.0" + } + }, + "@jest/test-sequencer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", + "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", + "dev": true, + "requires": { + "@jest/test-result": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0" + } + }, + "@jest/transform": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", + "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^24.9.0", + "babel-plugin-istanbul": "^5.1.0", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.1.15", + "jest-haste-map": "^24.9.0", + "jest-regex-util": "^24.9.0", + "jest-util": "^24.9.0", + "micromatch": "^3.1.10", + "pirates": "^4.0.1", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "2.4.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + } + }, "@types/anymatch": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==", "dev": true }, + "@types/babel__core": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.3.tgz", + "integrity": "sha512-8fBo0UR2CcwWxeX7WIIgJ7lXjasFxoYgRnFHUj+hRvKkpiBJbxhdAPTCY6/ZKM0uxANFVzt4yObSLuTiTnazDA==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.0.tgz", + "integrity": "sha512-c1mZUu4up5cp9KROs/QAw0gTeHrw/x7m52LcnvMxxOZ03DmLwPV0MlGmlgzV3cnSdjhJOZsj7E7FHeioai+egw==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", + "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.7.tgz", + "integrity": "sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", + "dev": true + }, "@types/events": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", @@ -210,6 +474,37 @@ "@types/node": "*" } }, + "@types/istanbul-lib-coverage": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", + "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", + "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", + "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "@types/json-schema": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.3.tgz", + "integrity": "sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A==", + "dev": true + }, "@types/minimatch": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", @@ -228,6 +523,12 @@ "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", "dev": true }, + "@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true + }, "@types/tapable": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.4.tgz", @@ -292,6 +593,189 @@ } } }, + "@types/yargs": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.3.tgz", + "integrity": "sha512-K8/LfZq2duW33XW/tFwEAfnZlqIfVsoyRB3kfXdPXYhl0nfM8mmh7GS0jg7WrX2Dgq/0Ha/pR1PaR+BvmWwjiQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.1.0.tgz", + "integrity": "sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.4.0.tgz", + "integrity": "sha512-se/YCk7PUoyMwSm/u3Ii9E+BgDUc736uw/lXCDpXEqRgPGsoBTtS8Mntue/vZX8EGyzGplYuePBuVyhZDM9EpQ==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "2.4.0", + "eslint-utils": "^1.4.2", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^2.0.1", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.4.0.tgz", + "integrity": "sha512-2cvhNaJoWavgTtnC7e1jUSPZQ7e4U2X9Yoy5sQmkS7lTESuyuZrlRcaoNuFfYEd6hgrmMU7+QoSp8Ad+kT1nfA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "2.4.0", + "eslint-scope": "^5.0.0" + }, + "dependencies": { + "eslint-scope": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", + "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + } + } + }, + "@typescript-eslint/parser": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.4.0.tgz", + "integrity": "sha512-IouAKi/grJ4MFrwdXIJ1GHAwbPWYgkT3b/x8Q49F378c9nwgxVkO76e0rZeUVpwHMaUuoKG2sUeK0XGkwdlwkw==", + "dev": true, + "requires": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "2.4.0", + "@typescript-eslint/typescript-estree": "2.4.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "@typescript-eslint/typescript-estree": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.4.0.tgz", + "integrity": "sha512-/DzDAtMqF5d9IlXrrvu/Id/uoKjnSxf/3FbtKK679a/T7lbDM8qQuirtGvFy6Uh+x0hALuCMwnMfUf0P24/+Iw==", + "dev": true, + "requires": { + "chokidar": "^3.0.2", + "glob": "^7.1.4", + "is-glob": "^4.0.1", + "lodash.unescape": "4.0.1", + "semver": "^6.3.0" + }, + "dependencies": { + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chokidar": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.2.1.tgz", + "integrity": "sha512-/j5PPkb5Feyps9e+jo07jUZGvkB5Aj953NrI4s8xSVScrAo/RHeILrtdb4uzR7N6aaFFxxJ+gt8mA8HfNpw76w==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.0", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.1.3" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.1.tgz", + "integrity": "sha512-4FRPXWETxtigtJW/gxzEDsX1LVbPAM93VleB83kZB+ellqbHMkyt2aJfuzNLRvFPnGi6bcE5SvfxgbXPeKteJw==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "readdirp": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.1.3.tgz", + "integrity": "sha512-ZOsfTGkjO2kqeR5Mzr5RYDbTGYneSkdNKX2fOX2P5jF7vMrd/GNnIAUtDldeHHumHUCQ3V05YfWUdxMPAsRu9Q==", + "dev": true, + "requires": { + "picomatch": "^2.0.4" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, "@webassemblyjs/ast": { "version": "1.8.5", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", @@ -480,6 +964,12 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, + "abab": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.2.tgz", + "integrity": "sha512-2scffjvioEmNz0OyDSLGWDfKCVwaKc6l9Pm9kOIREU13ClXZvHpg/nRL5xyjSSSLhOnXqft2HpsAzNEEA8cFFg==", + "dev": true + }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -496,6 +986,28 @@ "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", "dev": true }, + "acorn-globals": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", + "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", + "dev": true, + "requires": { + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + } + }, + "acorn-jsx": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz", + "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==", + "dev": true + }, + "acorn-walk": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", + "dev": true + }, "ajv": { "version": "6.10.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", @@ -526,6 +1038,12 @@ "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", "dev": true }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, "ansi-html": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", @@ -574,6 +1092,15 @@ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", @@ -592,6 +1119,12 @@ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true + }, "array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", @@ -619,6 +1152,15 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, "asn1.js": { "version": "4.10.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", @@ -657,12 +1199,24 @@ } } }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, "async": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", @@ -681,38 +1235,90 @@ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "dev": true }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, - "babel-loader": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", - "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true + }, + "babel-jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", + "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", "dev": true, "requires": { - "find-cache-dir": "^2.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "pify": "^4.0.1" + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/babel__core": "^7.1.0", + "babel-plugin-istanbul": "^5.1.0", + "babel-preset-jest": "^24.9.0", + "chalk": "^2.4.2", + "slash": "^2.0.0" } }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "babel-plugin-istanbul": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", + "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", "dev": true, "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", + "@babel/helper-plugin-utils": "^7.0.0", + "find-up": "^3.0.0", + "istanbul-lib-instrument": "^3.3.0", + "test-exclude": "^5.2.3" + } + }, + "babel-plugin-jest-hoist": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", + "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", + "dev": true, + "requires": { + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", + "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", + "dev": true, + "requires": { + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "babel-plugin-jest-hoist": "^24.9.0" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", "component-emitter": "^1.2.1", "define-property": "^1.0.0", "isobject": "^3.0.1", @@ -772,6 +1378,15 @@ "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", "dev": true }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -881,6 +1496,29 @@ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", "dev": true }, + "browser-process-hrtime": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", + "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", + "dev": true + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } + } + }, "browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", @@ -952,6 +1590,24 @@ "pako": "~1.0.5" } }, + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, + "bser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.0.tgz", + "integrity": "sha512-8zsjWrQkkBoLK6uxASk1nJ2SKv97ltiGDo6A3wA0/yRPz+CwmEyDo0hUrhIuukG2JHpAl3bvFIixw2/3Hi0DOg==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, "buffer": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", @@ -1033,12 +1689,33 @@ "unset-value": "^1.0.0" } }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "requires": { + "rsvp": "^4.8.4" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -1061,6 +1738,12 @@ } } }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, "chokidar": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", @@ -1096,6 +1779,12 @@ "tslib": "^1.9.0" } }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", @@ -1139,6 +1828,21 @@ "del": "^4.1.1" } }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, "cliui": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", @@ -1150,6 +1854,12 @@ "wrap-ansi": "^5.1.0" } }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -1181,6 +1891,15 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, "commander": { "version": "2.20.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", @@ -1393,12 +2112,60 @@ "randomfill": "^1.0.3" } }, + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "cssstyle": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", + "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", + "dev": true, + "requires": { + "cssom": "0.3.x" + } + }, "cyclist": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", "dev": true }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", + "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" + }, + "dependencies": { + "whatwg-url": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", + "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } + } + }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", @@ -1432,6 +2199,12 @@ "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", "dev": true }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, "default-gateway": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", @@ -1442,6 +2215,15 @@ "ip-regex": "^2.1.0" } }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", @@ -1498,6 +2280,12 @@ "rimraf": "^2.6.3" } }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -1526,12 +2314,24 @@ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", "dev": true }, + "detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", + "dev": true + }, "detect-node": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", "dev": true }, + "diff-sequences": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", + "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", + "dev": true + }, "diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", @@ -1568,12 +2368,30 @@ "buffer-indexof": "^1.0.0" } }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "requires": { + "webidl-conversions": "^4.0.2" + } + }, "duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", @@ -1586,6 +2404,16 @@ "stream-shift": "^1.0.0" } }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -1654,6 +2482,44 @@ "prr": "~1.0.1" } }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.15.0.tgz", + "integrity": "sha512-bhkEqWJ2t2lMeaJDuk7okMkJWI/yqgH/EoGwpcvv0XW9RWQsRspI4wt6xuyuvMvvQE3gg/D9HXppgk21w78GyQ==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.0", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-inspect": "^1.6.0", + "object-keys": "^1.1.1", + "string.prototype.trimleft": "^2.1.0", + "string.prototype.trimright": "^2.1.0" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -1666,74 +2532,313 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "escodegen": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz", + "integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==", "dev": true, "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } } }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "eslint": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.5.1.tgz", + "integrity": "sha512-32h99BoLYStT1iq1v2P9uwpyznQ4M2jRiFB6acitKz52Gqn+vPaMDUTB1bYi1WN4Nquj2w+t+bimYUG83DC55A==", "dev": true, "requires": { - "estraverse": "^4.1.0" + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.2", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.1", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^6.4.1", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "eslint-scope": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", + "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "glob-parent": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "eventemitter3": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", - "dev": true - }, - "events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", - "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", - "dev": true - }, - "eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "eslint-config-prettier": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.4.0.tgz", + "integrity": "sha512-YrKucoFdc7SEko5Sxe4r6ixqXPDP1tunGw91POeZTTRKItf/AMFYt/YLEQtZMkR2LVpAVhcAcZgcWpm1oGPW7w==", "dev": true, "requires": { - "original": "^1.0.0" + "get-stdin": "^6.0.0" } }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "eslint-loader": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.2.1.tgz", + "integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==", "dev": true, "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "loader-fs-cache": "^1.0.0", + "loader-utils": "^1.0.2", + "object-assign": "^4.0.1", + "object-hash": "^1.1.4", + "rimraf": "^2.6.1" } }, + "eslint-plugin-jest": { + "version": "22.19.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-22.19.0.tgz", + "integrity": "sha512-4zUc3rh36ds0SXdl2LywT4YWA3zRe8sfLhz8bPp8qQPIKvynTTkNGwmSCMpl5d9QiZE2JxSinGF+WD8yU+O0Lg==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "^1.13.0" + }, + "dependencies": { + "@typescript-eslint/experimental-utils": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz", + "integrity": "sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "1.13.0", + "eslint-scope": "^4.0.0" + } + }, + "@typescript-eslint/typescript-estree": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz", + "integrity": "sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw==", + "dev": true, + "requires": { + "lodash.unescape": "4.0.1", + "semver": "5.5.0" + } + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + } + } + }, + "eslint-plugin-prettier": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.1.tgz", + "integrity": "sha512-A+TZuHZ0KU0cnn56/9mfR7/KjUJ9QNVXUhwvRFSR7PGPe0zQR6PTkmyqg1AtUUEOzTqeRsUwyKFh0oVZKVCrtA==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz", + "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.0.0" + } + }, + "eslint-visitor-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", + "dev": true + }, + "espree": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.1.tgz", + "integrity": "sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-jsx": "^5.0.2", + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "acorn": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", + "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", + "dev": true + }, + "events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", + "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", + "dev": true + }, + "eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "dev": true, + "requires": { + "original": "^1.0.0" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "exec-sh": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz", + "integrity": "sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==", + "dev": true + }, "execa": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", @@ -1749,6 +2854,12 @@ "strip-eof": "^1.0.0" } }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -1793,6 +2904,20 @@ "homedir-polyfill": "^1.0.1" } }, + "expect": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", + "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "ansi-styles": "^3.2.0", + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.9.0" + } + }, "express": { "version": "4.17.1", "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", @@ -1839,6 +2964,12 @@ } } }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -1860,6 +2991,17 @@ } } }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", @@ -1925,18 +3067,36 @@ } } }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", "dev": true }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", "dev": true }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, "faye-websocket": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", @@ -1946,12 +3106,39 @@ "websocket-driver": ">=0.5.1" } }, + "fb-watchman": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", + "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", + "dev": true, + "requires": { + "bser": "^2.0.0" + } + }, "figgy-pudding": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", "dev": true }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -2022,6 +3209,34 @@ "resolve-dir": "^1.0.1" } }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", + "dev": true + }, "flush-write-stream": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", @@ -2064,6 +3279,23 @@ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", @@ -2661,12 +3893,30 @@ } } }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -2682,6 +3932,15 @@ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "dev": true }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, "glob": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", @@ -2785,18 +4044,75 @@ "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==", "dev": true }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, "handle-thing": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", "dev": true }, + "handlebars": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.4.3.tgz", + "integrity": "sha512-B0W4A2U1ww3q7VVthTKfh+epHx+q4mCt6iK+zEAzbMBpWQAwxCeKxEGpj/1oQTpzPXDNSOG7hmG14TsISH50yw==", + "dev": true, + "requires": { + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -2869,6 +4185,12 @@ "parse-passwd": "^1.0.0" } }, + "hosted-git-info": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", + "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", + "dev": true + }, "hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", @@ -2881,6 +4203,15 @@ "wbuf": "^1.1.0" } }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, "html-entities": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", @@ -2943,6 +4274,17 @@ "micromatch": "^3.1.10" } }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", @@ -2970,6 +4312,30 @@ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "dev": true }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", + "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, "import-local": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", @@ -3014,14 +4380,64 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "dev": true, - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" + "inquirer": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + } + } + }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" } }, "interpret": { @@ -3030,6 +4446,15 @@ "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", "dev": true }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, "invert-kv": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", @@ -3080,6 +4505,12 @@ } } }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, "is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", @@ -3095,6 +4526,21 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -3115,6 +4561,12 @@ } } }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", @@ -3152,6 +4604,12 @@ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, "is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", @@ -3214,12 +4672,42 @@ "isobject": "^3.0.1" } }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -3250,12 +4738,631 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", + "dev": true, + "requires": { + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" + } + }, + "istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", + "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", + "dev": true, + "requires": { + "handlebars": "^4.1.2" + } + }, + "jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", + "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", + "dev": true, + "requires": { + "import-local": "^2.0.0", + "jest-cli": "^24.9.0" + }, + "dependencies": { + "jest-cli": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz", + "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==", + "dev": true, + "requires": { + "@jest/core": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "import-local": "^2.0.0", + "is-ci": "^2.0.0", + "jest-config": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "prompts": "^2.0.1", + "realpath-native": "^1.1.0", + "yargs": "^13.3.0" + } + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + } + } + } + }, + "jest-changed-files": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", + "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "execa": "^1.0.0", + "throat": "^4.0.0" + } + }, + "jest-config": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz", + "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^24.9.0", + "@jest/types": "^24.9.0", + "babel-jest": "^24.9.0", + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^24.9.0", + "jest-environment-node": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "micromatch": "^3.1.10", + "pretty-format": "^24.9.0", + "realpath-native": "^1.1.0" + } + }, + "jest-diff": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", + "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "diff-sequences": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-docblock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", + "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", + "dev": true, + "requires": { + "detect-newline": "^2.1.0" + } + }, + "jest-each": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz", + "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "jest-get-type": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-environment-jsdom": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz", + "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0", + "jsdom": "^11.5.1" + } + }, + "jest-environment-node": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz", + "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0" + } + }, + "jest-get-type": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", + "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", + "dev": true + }, + "jest-haste-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", + "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "anymatch": "^2.0.0", + "fb-watchman": "^2.0.0", + "fsevents": "^1.2.7", + "graceful-fs": "^4.1.15", + "invariant": "^2.2.4", + "jest-serializer": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.9.0", + "micromatch": "^3.1.10", + "sane": "^4.0.3", + "walker": "^1.0.7" + } + }, + "jest-jasmine2": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz", + "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^24.9.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0", + "throat": "^4.0.0" + } + }, + "jest-leak-detector": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz", + "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==", + "dev": true, + "requires": { + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-matcher-utils": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", + "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-message-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", + "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^2.0.1", + "micromatch": "^3.1.10", + "slash": "^2.0.0", + "stack-utils": "^1.0.1" + } + }, + "jest-mock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", + "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0" + } + }, + "jest-pnp-resolver": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", + "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==", + "dev": true + }, + "jest-regex-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", + "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==", + "dev": true + }, + "jest-resolve": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", + "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "jest-pnp-resolver": "^1.2.1", + "realpath-native": "^1.1.0" + } + }, + "jest-resolve-dependencies": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz", + "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-snapshot": "^24.9.0" + } + }, + "jest-runner": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz", + "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.4.2", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-config": "^24.9.0", + "jest-docblock": "^24.3.0", + "jest-haste-map": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-leak-detector": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.6.0", + "source-map-support": "^0.5.6", + "throat": "^4.0.0" + } + }, + "jest-runtime": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", + "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.9.0", + "@jest/source-map": "^24.3.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "strip-bom": "^3.0.0", + "yargs": "^13.3.0" + }, + "dependencies": { + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + } + } + } + }, + "jest-serializer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", + "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", + "dev": true + }, + "jest-snapshot": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz", + "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "expect": "^24.9.0", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^24.9.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "jest-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", + "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", + "dev": true, + "requires": { + "@jest/console": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/source-map": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "callsites": "^3.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.15", + "is-ci": "^2.0.0", + "mkdirp": "^0.5.1", + "slash": "^2.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "jest-validate": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", + "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "camelcase": "^5.3.1", + "chalk": "^2.0.1", + "jest-get-type": "^24.9.0", + "leven": "^3.1.0", + "pretty-format": "^24.9.0" + } + }, + "jest-watcher": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", + "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", + "dev": true, + "requires": { + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "jest-util": "^24.9.0", + "string-length": "^2.0.0" + } + }, + "jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + } + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsdom": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", + "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "acorn": "^5.5.3", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": "^1.0.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.1", + "escodegen": "^1.9.1", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.3.0", + "nwsapi": "^2.0.7", + "parse5": "4.0.0", + "pn": "^1.1.0", + "request": "^2.87.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.4", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.1", + "ws": "^5.2.0", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true + }, + "ws": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", + "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -3268,12 +5375,30 @@ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, "json3": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", @@ -3289,6 +5414,18 @@ "minimist": "^1.2.0" } }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, "killable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", @@ -3301,6 +5438,12 @@ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, "lcid": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", @@ -3310,6 +5453,99 @@ "invert-kv": "^2.0.0" } }, + "left-pad": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", + "dev": true + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "loader-fs-cache": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz", + "integrity": "sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw==", + "dev": true, + "requires": { + "find-cache-dir": "^0.1.1", + "mkdirp": "0.5.1" + }, + "dependencies": { + "find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "mkdirp": "^0.5.1", + "pkg-dir": "^1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "^1.0.0" + } + } + } + }, "loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", @@ -3343,12 +5579,39 @@ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "lodash.unescape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", + "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", + "dev": true + }, "loglevel": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.3.tgz", "integrity": "sha512-LoEDv5pgpvWgPF4kNYuIp0qqSJVWak/dML0RY74xlzMZiT9w77teNAwKYKWBTYjlokMirg+o3jBwp+vlLrcfAA==", "dev": true }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -3368,6 +5631,21 @@ "semver": "^5.6.0" } }, + "make-error": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", + "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", + "dev": true + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dev": true, + "requires": { + "tmpl": "1.0.x" + } + }, "mamacro": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", @@ -3442,6 +5720,12 @@ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", "dev": true }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -3625,6 +5909,12 @@ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", "dev": true }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, "nan": { "version": "2.14.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", @@ -3651,6 +5941,12 @@ "to-regex": "^3.0.1" } }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -3675,6 +5971,12 @@ "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==", "dev": true }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, "node-libs-browser": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", @@ -3714,6 +6016,37 @@ } } }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true + }, + "node-notifier": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", + "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^1.1.0", + "semver": "^5.5.0", + "shellwords": "^0.1.1", + "which": "^1.3.0" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -3735,6 +6068,18 @@ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, + "nwsapi": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz", + "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -3772,6 +6117,24 @@ } } }, + "object-hash": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", + "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==", + "dev": true + }, + "object-inspect": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", + "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -3781,6 +6144,16 @@ "isobject": "^3.0.0" } }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -3820,6 +6193,23 @@ "wrappy": "1" } }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + }, + "dependencies": { + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + } + } + }, "opn": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", @@ -3829,6 +6219,44 @@ "is-wsl": "^1.1.0" } }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + } + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + } + }, "original": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", @@ -3855,12 +6283,27 @@ "mem": "^4.0.0" } }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, "p-defer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", "dev": true }, + "p-each-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", + "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", + "dev": true, + "requires": { + "p-reduce": "^1.0.0" + } + }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", @@ -3897,6 +6340,12 @@ "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true }, + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", + "dev": true + }, "p-retry": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", @@ -3929,6 +6378,15 @@ "readable-stream": "^2.1.5" } }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, "parse-asn1": { "version": "5.1.4", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", @@ -3943,12 +6401,28 @@ "safe-buffer": "^5.1.1" } }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, "parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", "dev": true }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -4009,6 +6483,23 @@ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", "dev": true }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, "pbkdf2": { "version": "3.0.17", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", @@ -4022,6 +6513,18 @@ "sha.js": "^2.4.8" } }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "picomatch": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz", + "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==", + "dev": true + }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", @@ -4043,6 +6546,15 @@ "pinkie": "^2.0.0" } }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, "pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", @@ -4052,6 +6564,12 @@ "find-up": "^3.0.0" } }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, "portfinder": { "version": "1.0.23", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.23.tgz", @@ -4069,6 +6587,39 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "dev": true }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prettier": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz", + "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "pretty-format": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", + "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "ansi-regex": "^4.0.0", + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" + } + }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -4081,12 +6632,28 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", "dev": true }, + "prompts": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.2.1.tgz", + "integrity": "sha512-VObPvJiWPhpZI6C5m60XOzTfnYg/xc/an+r9VYymj9WJW3B/DIH+REzjpAACPf8brwPeP+7vz3bIim3S+AaMjw==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.3" + } + }, "proxy-addr": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", @@ -4103,6 +6670,12 @@ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", "dev": true }, + "psl": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz", + "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==", + "dev": true + }, "public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", @@ -4230,6 +6803,33 @@ } } }, + "react-is": { + "version": "16.10.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.10.2.tgz", + "integrity": "sha512-INBT1QEgtcCCgvccr5/86CfD71fw9EPmDxgiJX4I2Ddr6ZsV6iFXsuby+qWJPtmNuMY0zByTsG4468P7nHuNWA==", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + } + }, "readable-stream": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", @@ -4256,6 +6856,15 @@ "readable-stream": "^2.0.2" } }, + "realpath-native": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", + "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", + "dev": true, + "requires": { + "util.promisify": "^1.0.0" + } + }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -4266,6 +6875,12 @@ "safe-regex": "^1.1.0" } }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -4284,6 +6899,78 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + } + } + }, + "request-promise-core": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", + "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", + "dev": true, + "requires": { + "lodash": "^4.17.11" + } + }, + "request-promise-native": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz", + "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", + "dev": true, + "requires": { + "request-promise-core": "1.1.2", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -4355,6 +7042,16 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -4386,6 +7083,21 @@ "inherits": "^2.0.1" } }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, "run-queue": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", @@ -4395,6 +7107,15 @@ "aproba": "^1.1.1" } }, + "rxjs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", + "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -4416,6 +7137,29 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, + "sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "dev": true, + "requires": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, "schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", @@ -4602,12 +7346,41 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, + "sisteransi": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.3.tgz", + "integrity": "sha512-SbEG75TzH8G7eVXFSN5f9EExILKfly7SUvVY5DhhYLvfhKqhDFY0OzevWa/zwak0RLRfWS5AvfMWpd9gJvr5Yg==", + "dev": true + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -4814,6 +7587,38 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "dev": true + }, "spdy": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", @@ -4895,6 +7700,29 @@ "extend-shallow": "^3.0.0" } }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, "ssri": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", @@ -4904,6 +7732,12 @@ "figgy-pudding": "^3.5.1" } }, + "stack-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", + "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", + "dev": true + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -4931,6 +7765,12 @@ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, "stream-browserify": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", @@ -4970,6 +7810,33 @@ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", "dev": true }, + "string-length": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", + "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", + "dev": true, + "requires": { + "astral-regex": "^1.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -4981,6 +7848,26 @@ "strip-ansi": "^5.1.0" } }, + "string.prototype.trimleft": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", + "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", + "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -4999,12 +7886,24 @@ "ansi-regex": "^4.1.0" } }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, + "strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "dev": true + }, "supports-color": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", @@ -5014,6 +7913,24 @@ "has-flag": "^3.0.0" } }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + } + }, "tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", @@ -5064,6 +7981,36 @@ } } }, + "test-exclude": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", + "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "dev": true, + "requires": { + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^2.0.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "throat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", + "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -5089,6 +8036,21 @@ "setimmediate": "^1.0.4" } }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "dev": true + }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", @@ -5149,24 +8111,184 @@ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", "dev": true }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, + "ts-jest": { + "version": "24.1.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-24.1.0.tgz", + "integrity": "sha512-HEGfrIEAZKfu1pkaxB9au17b1d9b56YZSqz5eCVE8mX68+5reOvlM93xGOzzCREIov9mdH7JBG+s0UyNAqr0tQ==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "buffer-from": "1.x", + "fast-json-stable-stringify": "2.x", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "mkdirp": "0.x", + "resolve": "1.x", + "semver": "^5.5", + "yargs-parser": "10.x" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "json5": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", + "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "ts-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-6.2.0.tgz", + "integrity": "sha512-Da8h3fD+HiZ9GvZJydqzk3mTC9nuOKYlJcpuk+Zv6Y1DPaMvBL+56GRzZFypx2cWrZFMsQr869+Ua2slGoLxvQ==", + "dev": true, + "requires": { + "chalk": "^2.3.0", + "enhanced-resolve": "^4.0.0", + "loader-utils": "^1.0.2", + "micromatch": "^4.0.0", + "semver": "^6.0.0" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, "tslib": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", "dev": true }, + "tsutils": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "dev": true }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -5183,6 +8305,32 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, + "typescript": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.4.tgz", + "integrity": "sha512-unoCll1+l+YK4i4F8f22TaNVPRHcD9PA3yCuZ8g5e0qGqlVlJ/8FSateOLLSagn+Yg5+ZwuPkL8LFUc0Jcvksg==", + "dev": true + }, + "uglify-js": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.1.tgz", + "integrity": "sha512-+dSJLJpXBb6oMHP+Yvw8hUgElz4gLTh82XuX68QiJVTXaE5ibl6buzhNkQdYhBlIhozWOC9ge16wyRmjG4TwVQ==", + "dev": true, + "optional": true, + "requires": { + "commander": "2.20.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -5337,6 +8485,16 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -5355,18 +8513,57 @@ "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==", "dev": true }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "dev": true }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, "vm-browserify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==", "dev": true }, + "w3c-hr-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", + "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", + "dev": true, + "requires": { + "browser-process-hrtime": "^0.1.2" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dev": true, + "requires": { + "makeerror": "1.0.x" + } + }, "watchpack": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", @@ -5387,6 +8584,12 @@ "minimalistic-assert": "^1.0.0" } }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, "webpack": { "version": "4.39.2", "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.39.2.tgz", @@ -5710,6 +8913,32 @@ "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", "dev": true }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -5725,6 +8954,12 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, "worker-farm": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", @@ -5751,6 +8986,26 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "write-file-atomic": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", + "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, "ws": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", @@ -5760,6 +9015,12 @@ "async-limiter": "~1.0.0" } }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index b65ce4ed..35abede3 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,6 @@ "version": "0.3.0", "description": "Add a style and an image to your QR code", "main": "lib/qr-code-styling.js", - "module": "src/index.js", "files": [ "lib" ], @@ -11,9 +10,19 @@ "qrcode-generator": "^1.4.3" }, "devDependencies": { - "@babel/core": "^7.5.5", - "babel-loader": "^8.0.6", + "@typescript-eslint/eslint-plugin": "^2.4.0", + "@typescript-eslint/parser": "^2.4.0", "clean-webpack-plugin": "^3.0.0", + "eslint": "^6.2.1", + "eslint-config-prettier": "^6.1.0", + "eslint-loader": "^2.2.1", + "eslint-plugin-jest": "^22.15.1", + "eslint-plugin-prettier": "^3.1.0", + "jest": "^24.9.0", + "prettier": "^1.18.2", + "ts-jest": "^24.0.2", + "ts-loader": "^6.2.0", + "typescript": "^3.6.4", "webpack": "^4.39.2", "webpack-cli": "^3.3.6", "webpack-dev-server": "^3.8.0" diff --git a/src/common.d.ts b/src/common.d.ts new file mode 100644 index 00000000..795e8588 --- /dev/null +++ b/src/common.d.ts @@ -0,0 +1,10 @@ +interface UnknownObject { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + [key: string]: any; +} + +type DotType = "dots" | "rounded" | "square"; + +interface DotTypes { + [key: string]: DotType; +} diff --git a/src/constants/dotTypes.ts b/src/constants/dotTypes.ts new file mode 100644 index 00000000..4f978861 --- /dev/null +++ b/src/constants/dotTypes.ts @@ -0,0 +1,5 @@ +export default { + dots: "dots", + rounded: "rounded", + square: "square" +} as DotTypes; diff --git a/src/constants/errorCorrectLevels.js b/src/constants/errorCorrectLevels.js deleted file mode 100644 index c4e63b79..00000000 --- a/src/constants/errorCorrectLevels.js +++ /dev/null @@ -1,6 +0,0 @@ -export default { - L: "L", - M: "M", - Q: "Q", - H: "H" -} \ No newline at end of file diff --git a/src/constants/errorCorrectLevels.ts b/src/constants/errorCorrectLevels.ts new file mode 100644 index 00000000..2c8944f5 --- /dev/null +++ b/src/constants/errorCorrectLevels.ts @@ -0,0 +1,10 @@ +interface ErrorCorrectionLevels { + [key: string]: ErrorCorrectionLevel; +} + +export default { + L: "L", + M: "M", + Q: "Q", + H: "H" +} as ErrorCorrectionLevels; diff --git a/src/constants/errorCorrectionPercents.js b/src/constants/errorCorrectionPercents.js deleted file mode 100644 index 278a72dd..00000000 --- a/src/constants/errorCorrectionPercents.js +++ /dev/null @@ -1,6 +0,0 @@ -export default { - L: 0.07, - M: 0.15, - Q: 0.25, - H: 0.30, -}; \ No newline at end of file diff --git a/src/constants/errorCorrectionPercents.ts b/src/constants/errorCorrectionPercents.ts new file mode 100644 index 00000000..41ca902a --- /dev/null +++ b/src/constants/errorCorrectionPercents.ts @@ -0,0 +1,10 @@ +interface ErrorCorrectionPercents { + [key: string]: number; +} + +export default { + L: 0.07, + M: 0.15, + Q: 0.25, + H: 0.3 +} as ErrorCorrectionPercents; diff --git a/src/constants/modes.js b/src/constants/modes.js deleted file mode 100644 index 8c3306b5..00000000 --- a/src/constants/modes.js +++ /dev/null @@ -1,6 +0,0 @@ -export default { - numeric: "Numeric", - alphanumeric: "Alphanumeric", - byte: "Byte", - kanji: "Kanji" -} \ No newline at end of file diff --git a/src/constants/modes.ts b/src/constants/modes.ts new file mode 100644 index 00000000..a08bb3d2 --- /dev/null +++ b/src/constants/modes.ts @@ -0,0 +1,10 @@ +interface Modes { + [key: string]: Mode; +} + +export default { + numeric: "Numeric", + alphanumeric: "Alphanumeric", + byte: "Byte", + kanji: "Kanji" +} as Modes; diff --git a/src/constants/qrTypes.ts b/src/constants/qrTypes.ts new file mode 100644 index 00000000..af2bff05 --- /dev/null +++ b/src/constants/qrTypes.ts @@ -0,0 +1,20 @@ +interface TypesMap { + [key: number]: TypeNumber; +} + +const qrTypes: TypesMap = {}; + +for (let type = 0; type <= 40; type++) { + qrTypes[type] = type as TypeNumber; +} + +// 0 types is autodetect + +// types = { +// 0: 0, +// 1: 1, +// ... +// 40: 40 +// } + +export default qrTypes; diff --git a/src/constants/types.js b/src/constants/types.js deleted file mode 100644 index 89526996..00000000 --- a/src/constants/types.js +++ /dev/null @@ -1,17 +0,0 @@ -const types = {}; - -for(let type = 0; type <= 40; type++) { - types[type] = type; -} - -// 0 types is autodetect - -// types = { -// 0: 0, -// 1: 1, -// 2: 2, -// ... -// 40: 40 -// } - -export default types; \ No newline at end of file diff --git a/src/core/QRCanvas.js b/src/core/QRCanvas.js deleted file mode 100644 index 3147672d..00000000 --- a/src/core/QRCanvas.js +++ /dev/null @@ -1,137 +0,0 @@ -import calculateImageSize from "../tools/calculateImageSize"; -import errorCorrectionPercents from "../constants/errorCorrectionPercents"; -import QRDot from "./QRDot"; - -export default class QRCanvas { - constructor(options) { - this.canvas = document.createElement("canvas"); - this.canvas.width = options.width; - this.canvas.height = options.height; - this.options = options; - } - - get context () { - return this.canvas.getContext("2d"); - } - - get width () { - return this.canvas.width; - } - - get height () { - return this.canvas.height; - } - - getCanvas () { - return this.canvas; - } - - clear () { - const canvasContext = this.context; - - canvasContext.clearRect(0, 0, this.canvas.width, this.canvas.height); - } - - drawQR(qr) { - this.clear(); - this.drawBackground(); - this.qr = qr; - - if (this.options.image) { - this.drawImageAndDots(); - } else { - this.drawDots(); - } - } - - drawBackground() { - const canvasContext = this.context; - const options = this.options; - - canvasContext.fillStyle = options.backgroundOptions.color; - canvasContext.fillRect(0, 0, this.canvas.width, this.canvas.height); - } - - - drawDots(filter) { - const canvasContext = this.context; - const options = this.options; - const count = this.qr.getModuleCount(); - const minSize = Math.min(options.width, options.height); - const dotSize = Math.floor(minSize / count); - const xBeginning = Math.floor((options.width - count * dotSize) / 2); - const yBeginning = Math.floor((options.height - count * dotSize) / 2); - - if (count > options.width || count > options.height) { - throw "The canvas is too small."; - } - - const dot = new QRDot({ context: canvasContext, type: options.dotsOptions.type }); - - for(let i = 0; i < count; i++) { - for(let j = 0; j < count; j++) { - if (filter && !filter(i, j)) { - continue; - } - - if (this.qr.isDark(i, j)) { - canvasContext.fillStyle = options.dotsOptions.color; - dot.draw(xBeginning + i * dotSize, yBeginning + j * dotSize, dotSize, (xOffset, yOffset) => { - if (i + xOffset >= 0 && j + yOffset >= 0 && i + xOffset < count && j + yOffset < count) { - if (filter && !filter(i + xOffset, j + yOffset)) return false; - return this.qr.isDark(i + xOffset, j + yOffset); - } - }); - } - } - } - } - - drawImageAndDots() { - const canvasContext = this.context; - const options = this.options; - const count = this.qr.getModuleCount(); - const minSize = Math.min(options.width, options.height); - const dotSize = Math.floor(minSize / count); - const xBeginning = Math.floor((options.width - count * dotSize) / 2); - const yBeginning = Math.floor((options.height - count * dotSize) / 2); - - const image = new Image(); - const coverLevel = options.imageOptions.imageSize * errorCorrectionPercents[options.qrOptions.errorCorrectionLevel]; - - image.src = options.image; - image.onload = () => { - const maxHiddenDots = Math.floor(coverLevel * count * count); - const { - resizedImageWidth, - resizedImageHeight, - hiddenDotsWidth, - hiddenDotsHeight - } = calculateImageSize({ - originalWidth: image.width, - originalHeight: image.height, - maxHiddenDots, - dotSize - }); - - this.drawDots((i, j) => { - if (!options.imageOptions.hideBackgroundDots) { - return true; - } - return ( - i < (count - hiddenDotsWidth) / 2 - || i >= (count + hiddenDotsWidth) / 2 - || j < (count - hiddenDotsHeight) / 2 - || j >= (count + hiddenDotsHeight) / 2 - ) - }); - - canvasContext.drawImage( - image, - xBeginning + (count * dotSize - resizedImageWidth) / 2, - yBeginning + (count * dotSize - resizedImageHeight) / 2, - resizedImageWidth, - resizedImageHeight); - }; - } -}; \ No newline at end of file diff --git a/src/core/QRCanvas.ts b/src/core/QRCanvas.ts new file mode 100644 index 00000000..203d2911 --- /dev/null +++ b/src/core/QRCanvas.ts @@ -0,0 +1,169 @@ +import calculateImageSize from "../tools/calculateImageSize"; +import errorCorrectionPercents from "../constants/errorCorrectionPercents"; +import QRDot from "./QRDot"; +import { Options } from "./QROptions"; + +type FilterFunction = (i: number, j: number) => boolean; + +export default class QRCanvas { + _canvas: HTMLCanvasElement; + _options: Options; + _qr?: QRCode; + + constructor(options: Options) { + this._canvas = document.createElement("canvas"); + this._canvas.width = options.width; + this._canvas.height = options.height; + this._options = options; + } + + get context(): CanvasRenderingContext2D | null { + return this._canvas.getContext("2d"); + } + + get width(): number { + return this._canvas.width; + } + + get height(): number { + return this._canvas.height; + } + + getCanvas(): HTMLCanvasElement { + return this._canvas; + } + + clear(): void { + const canvasContext = this.context; + + if (canvasContext) { + canvasContext.clearRect(0, 0, this._canvas.width, this._canvas.height); + } + } + + drawQR(qr: QRCode): void { + this.clear(); + this.drawBackground(); + this._qr = qr; + + if (this._options.image) { + this.drawImageAndDots(); + } else { + this.drawDots(); + } + } + + drawBackground(): void { + const canvasContext = this.context; + const options = this._options; + + if (canvasContext) { + canvasContext.fillStyle = options.backgroundOptions.color; + canvasContext.fillRect(0, 0, this._canvas.width, this._canvas.height); + } + } + + drawDots(filter?: FilterFunction): void { + if (!this._qr) { + throw "QR code is not defined"; + } + + const canvasContext = this.context; + + if (!canvasContext) { + throw "QR code is not defined"; + } + + const options = this._options; + const count = this._qr.getModuleCount(); + + if (count > options.width || count > options.height) { + throw "The canvas is too small."; + } + + const minSize = Math.min(options.width, options.height); + const dotSize = Math.floor(minSize / count); + const xBeginning = Math.floor((options.width - count * dotSize) / 2); + const yBeginning = Math.floor((options.height - count * dotSize) / 2); + const dot = new QRDot({ context: canvasContext, type: options.dotsOptions.type }); + + for (let i = 0; i < count; i++) { + for (let j = 0; j < count; j++) { + if (filter && !filter(i, j)) { + continue; + } + if (!this._qr.isDark(i, j)) { + continue; + } + canvasContext.fillStyle = options.dotsOptions.color; + dot.draw( + xBeginning + i * dotSize, + yBeginning + j * dotSize, + dotSize, + (xOffset: number, yOffset: number): boolean => { + if (i + xOffset < 0 || j + yOffset < 0 || i + xOffset >= count || j + yOffset >= count) return false; + if (filter && !filter(i + xOffset, j + yOffset)) return false; + return !!this._qr && this._qr.isDark(i + xOffset, j + yOffset); + } + ); + } + } + } + + drawImageAndDots(): void { + if (!this._qr) { + throw "QR code is not defined"; + } + + const canvasContext = this.context; + + if (!canvasContext) { + throw "QR code is not defined"; + } + + const options = this._options; + const count = this._qr.getModuleCount(); + const minSize = Math.min(options.width, options.height); + const dotSize = Math.floor(minSize / count); + const xBeginning = Math.floor((options.width - count * dotSize) / 2); + const yBeginning = Math.floor((options.height - count * dotSize) / 2); + + const image = new Image(); + const coverLevel = options.imageOptions.imageSize * errorCorrectionPercents[options.qrOptions.errorCorrectionLevel]; + + if (!options.image) { + throw "Image is not defined"; + } + + image.src = options.image; + image.onload = (): void => { + const maxHiddenDots = Math.floor(coverLevel * count * count); + const { resizedImageWidth, resizedImageHeight, hiddenDotsWidth, hiddenDotsHeight } = calculateImageSize({ + originalWidth: image.width, + originalHeight: image.height, + maxHiddenDots, + dotSize + }); + + this.drawDots((i: number, j: number): boolean => { + if (!options.imageOptions.hideBackgroundDots) { + return true; + } + return ( + i < (count - hiddenDotsWidth) / 2 || + i >= (count + hiddenDotsWidth) / 2 || + j < (count - hiddenDotsHeight) / 2 || + j >= (count + hiddenDotsHeight) / 2 + ); + }); + + canvasContext.drawImage( + image, + xBeginning + (count * dotSize - resizedImageWidth) / 2, + yBeginning + (count * dotSize - resizedImageHeight) / 2, + resizedImageWidth, + resizedImageHeight + ); + }; + } +} diff --git a/src/core/QRCode.js b/src/core/QRCode.js deleted file mode 100644 index 0b1985fa..00000000 --- a/src/core/QRCode.js +++ /dev/null @@ -1,7 +0,0 @@ -import qrcode from "qrcode-generator"; - -export default class QRCode extends qrcode { - constructor(options) { - super(options.qrOptions.typeNumber, options.qrOptions.errorCorrectionLevel); - } -}; \ No newline at end of file diff --git a/src/core/QRCodeStyling.js b/src/core/QRCodeStyling.js deleted file mode 100644 index bc9db7c3..00000000 --- a/src/core/QRCodeStyling.js +++ /dev/null @@ -1,72 +0,0 @@ -import getMode from "../tools/getMode"; -import mergeDeep from "../tools/merge"; -import errorCorrectLevels from "../constants/errorCorrectLevels"; -import types from "../constants/types"; -import QRCode from "./QRCode"; -import QRCanvas from "./QRCanvas"; - -const defaultOptions = { - width: 300, - height: 300, - data: undefined, - image: undefined, - qrOptions: { - typeNumber: types[0], - mode: undefined, - errorCorrectionLevel: errorCorrectLevels.Q, - }, - imageOptions: { - hideBackgroundDots: true, - imageSize: 0.4 - }, - dotsOptions: { - type: "square", - color: "#000", - }, - backgroundOptions: { - color: "#fff", - } -}; - -export default class QRCodeStyling { - constructor(options) { - this.options = mergeDeep(defaultOptions, options); - this.update(); - } - - update(options) { - this.clearContainer(this.container); - this.options = mergeDeep(this.options, options); - - if (!this.options.data) { - return; - } - - this.qr = new QRCode(this.options); - this.qr.addData(this.options.data, this.options.qrOptions.mode || getMode(this.options.data)); - this.qr.make(); - this.canvas = new QRCanvas(this.options); - this.canvas.drawQR(this.qr); - this.append(this.container); - } - - clearContainer(container) { - if (container) { - container.innerHTML = ""; - } - } - - append(container) { - if (!container) { - return; - } - - if (typeof container.appendChild !== "function") { - throw "Container should be a single DOM node"; - } - - this.container = container; - - container.appendChild(this.canvas.getCanvas()); - } -}; \ No newline at end of file diff --git a/src/core/QRCodeStyling.ts b/src/core/QRCodeStyling.ts new file mode 100644 index 00000000..51ac79b9 --- /dev/null +++ b/src/core/QRCodeStyling.ts @@ -0,0 +1,56 @@ +import getMode from "../tools/getMode"; +import mergeDeep from "../tools/merge"; +import QRCanvas from "./QRCanvas"; +import defaultOptions, { Options } from "./QROptions"; +import qrcode from "qrcode-generator"; + +console.log("Adfasdf"); +export default class QRCodeStyling { + _options: Options; + _container?: HTMLElement; + _canvas?: QRCanvas; + _qr?: QRCode; + + constructor(options?: Partial) { + this._options = options ? (mergeDeep(defaultOptions, options) as Options) : defaultOptions; + this.update(); + } + + static _clearContainer(container?: HTMLElement): void { + if (container) { + container.innerHTML = ""; + } + } + + update(options?: Partial): void { + QRCodeStyling._clearContainer(this._container); + this._options = options ? (mergeDeep(defaultOptions, options) as Options) : defaultOptions; + + if (!this._options.data) { + return; + } + + this._qr = qrcode(this._options.qrOptions.typeNumber, this._options.qrOptions.errorCorrectionLevel); + this._qr.addData(this._options.data, this._options.qrOptions.mode || getMode(this._options.data)); + this._qr.make(); + this._canvas = new QRCanvas(this._options); + this._canvas.drawQR(this._qr); + this.append(this._container); + } + + append(container?: HTMLElement): void { + if (!container) { + return; + } + + if (typeof container.appendChild !== "function") { + throw "Container should be a single DOM node"; + } + + if (this._canvas) { + container.appendChild(this._canvas.getCanvas()); + } + + this._container = container; + } +} diff --git a/src/core/QRDot.js b/src/core/QRDot.js deleted file mode 100644 index 40cbb8f1..00000000 --- a/src/core/QRDot.js +++ /dev/null @@ -1,52 +0,0 @@ -export default class QRDot { - constructor({ context, type }) { - this.context = context; - this.type = type; - } - - draw(x, y, size, getNeighbor) { - const context = this.context; - const type = this.type; - - if (type === "dots") { - context.beginPath(); - context.arc(x + size / 2, y + size / 2,size / 2,0,Math.PI*2); - context.fill(); - } else if (type === "rounded") { - context.beginPath(); - context.moveTo(x, y + size / 2); - - if (getNeighbor(-1, 0) || getNeighbor(0, -1)) { - context.lineTo(x, y); - context.lineTo(x + size / 2, y); - } else { - context.arc(x + size / 2, y + size / 2,size / 2, - Math.PI,- Math.PI / 2); - } - - if (getNeighbor(0, -1) || getNeighbor(1, 0)) { - context.lineTo(x + size, y); - context.lineTo(x + size, y + size / 2); - } else { - context.arc(x + size / 2, y + size / 2,size / 2,- Math.PI / 2, 0); - } - - if (getNeighbor(1, 0) || getNeighbor(0, 1)) { - context.lineTo(x + size, y + size); - context.lineTo(x + size / 2, y + size); - } else { - context.arc(x + size / 2, y + size / 2,size / 2, 0, Math.PI / 2); - } - - if (getNeighbor(0, 1) || getNeighbor(-1, 0)) { - context.lineTo(x, y + size); - context.lineTo(x, y + size / 2); - } else { - context.arc(x + size / 2, y + size / 2,size / 2, Math.PI / 2, Math.PI); - } - - context.fill(); - } else { - context.fillRect(x, y, size, size); - } - } -}; \ No newline at end of file diff --git a/src/core/QRDot.ts b/src/core/QRDot.ts new file mode 100644 index 00000000..7168205c --- /dev/null +++ b/src/core/QRDot.ts @@ -0,0 +1,57 @@ +type GetNeighbor = (x: number, y: number) => boolean; + +export default class QRDot { + _context: CanvasRenderingContext2D; + _type: DotType; + + constructor({ context, type }: { context: CanvasRenderingContext2D; type: DotType }) { + this._context = context; + this._type = type; + } + + draw(x: number, y: number, size: number, getNeighbor: GetNeighbor): void { + const context = this._context; + const type = this._type; + + if (type === "dots") { + context.beginPath(); + context.arc(x + size / 2, y + size / 2, size / 2, 0, Math.PI * 2); + context.fill(); + } else if (type === "rounded") { + context.beginPath(); + context.moveTo(x, y + size / 2); + + if (getNeighbor(-1, 0) || getNeighbor(0, -1)) { + context.lineTo(x, y); + context.lineTo(x + size / 2, y); + } else { + context.arc(x + size / 2, y + size / 2, size / 2, -Math.PI, -Math.PI / 2); + } + + if (getNeighbor(0, -1) || getNeighbor(1, 0)) { + context.lineTo(x + size, y); + context.lineTo(x + size, y + size / 2); + } else { + context.arc(x + size / 2, y + size / 2, size / 2, -Math.PI / 2, 0); + } + + if (getNeighbor(1, 0) || getNeighbor(0, 1)) { + context.lineTo(x + size, y + size); + context.lineTo(x + size / 2, y + size); + } else { + context.arc(x + size / 2, y + size / 2, size / 2, 0, Math.PI / 2); + } + + if (getNeighbor(0, 1) || getNeighbor(-1, 0)) { + context.lineTo(x, y + size); + context.lineTo(x, y + size / 2); + } else { + context.arc(x + size / 2, y + size / 2, size / 2, Math.PI / 2, Math.PI); + } + + context.fill(); + } else { + context.fillRect(x, y, size, size); + } + } +} diff --git a/src/core/QROptions.ts b/src/core/QROptions.ts new file mode 100644 index 00000000..ab7506e5 --- /dev/null +++ b/src/core/QROptions.ts @@ -0,0 +1,50 @@ +import qrTypes from "../constants/qrTypes"; +import errorCorrectLevels from "../constants/errorCorrectLevels"; + +export type Options = { + width: number; + height: number; + data?: string; + image?: string; + qrOptions: { + typeNumber: TypeNumber; + mode?: Mode; + errorCorrectionLevel: ErrorCorrectionLevel; + }; + imageOptions: { + hideBackgroundDots: boolean; + imageSize: number; + }; + dotsOptions: { + type: DotType; + color: string; + }; + backgroundOptions: { + color: string; + }; +}; + +const defaultOptions: Options = { + width: 300, + height: 300, + data: undefined, + image: undefined, + qrOptions: { + typeNumber: qrTypes[0], + mode: undefined, + errorCorrectionLevel: errorCorrectLevels.Q + }, + imageOptions: { + hideBackgroundDots: true, + imageSize: 0.4 + }, + dotsOptions: { + type: "square", + color: "#000" + }, + backgroundOptions: { + color: "#fff" + } +}; + +export default defaultOptions; diff --git a/src/index.js b/src/index.ts similarity index 63% rename from src/index.js rename to src/index.ts index ea6f2182..bb1c7a3b 100644 --- a/src/index.js +++ b/src/index.ts @@ -1,9 +1,6 @@ import QRCodeStyling from "./core/QRCodeStyling"; import errorCorrectLevels from "./constants/errorCorrectLevels"; -import types from "./constants/types"; +import qrTypes from "./constants/qrTypes"; export default QRCodeStyling; -export { - errorCorrectLevels, - types -} \ No newline at end of file +export { errorCorrectLevels, qrTypes }; diff --git a/src/tools/calculateImageSize.js b/src/tools/calculateImageSize.js deleted file mode 100644 index 6681fb5d..00000000 --- a/src/tools/calculateImageSize.js +++ /dev/null @@ -1,44 +0,0 @@ -export function calculateImageSizeForXAxis ({ originalImageXSize, originalImageYSize, maxHiddenDots, dotSize }) { - let dotsXCount, dotsYCount, imageXSize, imageYSize; - const k = originalImageYSize / originalImageXSize; - - dotsXCount = Math.floor(Math.sqrt(maxHiddenDots / k)); - if (dotsXCount % 2 === 0) dotsXCount--; - imageXSize = dotsXCount * dotSize; - dotsYCount = 1 + 2 * Math.ceil((dotsXCount * k * dotSize - dotSize) / (2 * dotSize)); - imageYSize = Math.ceil(imageXSize * k); - - return { dotsXCount, dotsYCount, imageXSize, imageYSize }; -} - -export default function calculateImageSize ({ originalWidth, originalHeight, maxHiddenDots, dotSize }) { - const maxHorizontalImage = calculateImageSizeForXAxis({ - originalImageXSize: originalWidth, - originalImageYSize: originalHeight, - maxHiddenDots, - dotSize - }); - - const maxVerticalImage = calculateImageSizeForXAxis({ - originalImageXSize: originalHeight, - originalImageYSize: originalWidth, - maxHiddenDots, - dotSize - }); - - if (maxHorizontalImage.imageXSize >= maxVerticalImage.imageYSize) { - return { - resizedImageWidth: maxHorizontalImage.imageXSize, - resizedImageHeight: maxHorizontalImage.imageYSize, - hiddenDotsWidth: maxHorizontalImage.dotsXCount, - hiddenDotsHeight: maxHorizontalImage.dotsYCount - }; - } else { - return { - resizedImageWidth: maxVerticalImage.imageYSize, - resizedImageHeight: maxVerticalImage.imageXSize, - hiddenDotsWidth: maxVerticalImage.dotsYCount, - hiddenDotsHeight: maxVerticalImage.dotsXCount - }; - } -} \ No newline at end of file diff --git a/src/tools/calculateImageSize.ts b/src/tools/calculateImageSize.ts new file mode 100644 index 00000000..d6922838 --- /dev/null +++ b/src/tools/calculateImageSize.ts @@ -0,0 +1,82 @@ +interface ImageSizeForOneAxisOptions { + originalImageXSize: number; + originalImageYSize: number; + maxHiddenDots: number; + dotSize: number; +} + +interface ImageSizeForOneAxisResult { + dotsXCount: number; + dotsYCount: number; + imageXSize: number; + imageYSize: number; +} + +export function calculateImageSizeForXAxis({ + originalImageXSize, + originalImageYSize, + maxHiddenDots, + dotSize +}: ImageSizeForOneAxisOptions): ImageSizeForOneAxisResult { + let dotsXCount; + const k = originalImageYSize / originalImageXSize; + + dotsXCount = Math.floor(Math.sqrt(maxHiddenDots / k)); + if (dotsXCount % 2 === 0) dotsXCount--; + const imageXSize = dotsXCount * dotSize; + const dotsYCount = 1 + 2 * Math.ceil((dotsXCount * k * dotSize - dotSize) / (2 * dotSize)); + const imageYSize = Math.ceil(imageXSize * k); + + return { dotsXCount, dotsYCount, imageXSize, imageYSize }; +} + +interface ImageSizeOptions { + originalWidth: number; + originalHeight: number; + maxHiddenDots: number; + dotSize: number; +} + +interface ImageSizeResult { + resizedImageWidth: number; + resizedImageHeight: number; + hiddenDotsWidth: number; + hiddenDotsHeight: number; +} + +export default function calculateImageSize({ + originalWidth, + originalHeight, + maxHiddenDots, + dotSize +}: ImageSizeOptions): ImageSizeResult { + const maxHorizontalImage = calculateImageSizeForXAxis({ + originalImageXSize: originalWidth, + originalImageYSize: originalHeight, + maxHiddenDots, + dotSize + }); + + const maxVerticalImage = calculateImageSizeForXAxis({ + originalImageXSize: originalHeight, + originalImageYSize: originalWidth, + maxHiddenDots, + dotSize + }); + + if (maxHorizontalImage.imageXSize >= maxVerticalImage.imageYSize) { + return { + resizedImageWidth: maxHorizontalImage.imageXSize, + resizedImageHeight: maxHorizontalImage.imageYSize, + hiddenDotsWidth: maxHorizontalImage.dotsXCount, + hiddenDotsHeight: maxHorizontalImage.dotsYCount + }; + } else { + return { + resizedImageWidth: maxVerticalImage.imageYSize, + resizedImageHeight: maxVerticalImage.imageXSize, + hiddenDotsWidth: maxVerticalImage.dotsYCount, + hiddenDotsHeight: maxVerticalImage.dotsXCount + }; + } +} diff --git a/src/tools/getMode.js b/src/tools/getMode.js deleted file mode 100644 index aac5913a..00000000 --- a/src/tools/getMode.js +++ /dev/null @@ -1,12 +0,0 @@ -import modes from "../constants/modes"; - -export default function getMode(data) { - switch (true) { - case /^[0-9]*$/.test(data): - return modes.numeric; - case /^[0-9A-Z $%*+\-./:]*$/.test(data): - return modes.alphanumeric; - default: - return modes.byte; - } -} \ No newline at end of file diff --git a/src/tools/getMode.ts b/src/tools/getMode.ts new file mode 100644 index 00000000..b9734183 --- /dev/null +++ b/src/tools/getMode.ts @@ -0,0 +1,12 @@ +import modes from "../constants/modes"; + +export default function getMode(data: string): Mode { + switch (true) { + case /^[0-9]*$/.test(data): + return modes.numeric; + case /^[0-9A-Z $%*+\-./:]*$/.test(data): + return modes.alphanumeric; + default: + return modes.byte; + } +} diff --git a/src/tools/merge.js b/src/tools/merge.js deleted file mode 100644 index 6369a1ec..00000000 --- a/src/tools/merge.js +++ /dev/null @@ -1,30 +0,0 @@ -const isObject = (obj) => obj && typeof obj === "object"; - -export default function mergeDeep(target, ...sources) { - let source; - - if (sources.length > 1) { - source = mergeDeep(...sources); - } else { - source = sources[0]; - } - - if (!isObject(target) || !isObject(source)) { - return target; - } - - Object.keys(source).forEach(key => { - const targetValue = target[key]; - const sourceValue = source[key]; - - if (Array.isArray(targetValue) && Array.isArray(sourceValue)) { - target[key] = targetValue.concat(sourceValue); - } else if (isObject(targetValue) && isObject(sourceValue)) { - target[key] = mergeDeep(Object.assign({}, targetValue), sourceValue); - } else { - target[key] = sourceValue; - } - }); - - return target; -} \ No newline at end of file diff --git a/src/tools/merge.ts b/src/tools/merge.ts new file mode 100644 index 00000000..9e70c368 --- /dev/null +++ b/src/tools/merge.ts @@ -0,0 +1,30 @@ +const isObject = (obj: object): boolean => !!obj && typeof obj === "object"; + +export default function mergeDeep(target: UnknownObject, ...sources: UnknownObject[]): UnknownObject { + if (!sources.length) { + return target; + } + + const source = sources.shift(); + + if (source === undefined) { + return target; + } + + if (isObject(target) && isObject(source)) { + Object.keys(source).forEach((key: string): void => { + const targetValue = target[key]; + const sourceValue = source[key]; + + if (Array.isArray(targetValue) && Array.isArray(sourceValue)) { + target[key] = targetValue.concat(sourceValue); + } else if (isObject(targetValue) && isObject(sourceValue)) { + target[key] = mergeDeep(Object.assign({}, targetValue), sourceValue); + } else { + target[key] = sourceValue; + } + }); + } + + return mergeDeep(target, ...sources); +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..ca1b26c8 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "sourceMap": true, + "module": "es6", + "target": "es5", + "allowJs": false, + "moduleResolution": "node", + "strict": true, + "noImplicitAny": true, + "noImplicitThis": true, + "alwaysStrict": true, + "strictNullChecks": true, + "forceConsistentCasingInFileNames": true, + "noImplicitReturns": true, + "noUnusedLocals": true, + "esModuleInterop": true + }, + "include": ["./src/**/*", "./tests/**/*"] +} diff --git a/webpack.config.js b/webpack.config.js index 2cd2bed8..0a75fb86 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -6,38 +6,45 @@ const srcPath = path.resolve(rootPath, "src"); const libPath = path.resolve(rootPath, "lib"); const config = { - entry: srcPath + "/index.js", - output: { - path: libPath, - filename: "qr-code-styling.js", - library: "QrCodeStyling", - libraryTarget: "umd", - libraryExport: "default" - }, - module: { - rules: [ - { - test: /\.js$/, - include: libPath, - loader: "babel-loader" - } - ] - }, - plugins: [ - new CleanWebpackPlugin() + entry: srcPath + "/index.ts", + output: { + path: libPath, + filename: "qr-code-styling.js", + library: "QrCodeStyling", + libraryTarget: "umd", + libraryExport: "default" + }, + module: { + rules: [ + { + test: /\.ts$/, + loader: "ts-loader", + exclude: /node_modules/ + }, + { + enforce: "pre", + test: /\.ts$/, + loader: "eslint-loader", + exclude: /node_modules/ + } ] + }, + plugins: [new CleanWebpackPlugin()], + resolve: { + extensions: [".ts", ".js"] + } }; module.exports = (env, argv) => { - if (argv.mode === "development") { - config.devtool = "inline-source-map"; - config.mode = argv.mode; - } + if (argv.mode === "development") { + config.devtool = "inline-source-map"; + config.mode = argv.mode; + } - if (argv.mode === "production") { - config.devtool = "source-map"; - config.mode = argv.mode; - } + if (argv.mode === "production") { + config.devtool = "source-map"; + config.mode = argv.mode; + } - return config; -}; \ No newline at end of file + return config; +}; From 7fb9759048c06e02f4aaf0535e491e6d267ec36d Mon Sep 17 00:00:00 2001 From: Denys Kozak Date: Sat, 19 Oct 2019 10:28:49 +0300 Subject: [PATCH 05/11] Remove consolelog --- src/core/QRCodeStyling.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/core/QRCodeStyling.ts b/src/core/QRCodeStyling.ts index 51ac79b9..1b640e89 100644 --- a/src/core/QRCodeStyling.ts +++ b/src/core/QRCodeStyling.ts @@ -4,7 +4,6 @@ import QRCanvas from "./QRCanvas"; import defaultOptions, { Options } from "./QROptions"; import qrcode from "qrcode-generator"; -console.log("Adfasdf"); export default class QRCodeStyling { _options: Options; _container?: HTMLElement; From 43e47b3bb92155d39eae27665439328c3042e278 Mon Sep 17 00:00:00 2001 From: Denys Kozak Date: Sat, 19 Oct 2019 15:38:22 +0300 Subject: [PATCH 06/11] Add first test --- .eslintignore | 1 - .gitignore | 5 ++++- jest.config.js | 12 +++++------- package.json | 3 ++- src/constants/modes.test.js | 5 +++++ tsconfig.json | 4 ++-- 6 files changed, 18 insertions(+), 12 deletions(-) create mode 100644 src/constants/modes.test.js diff --git a/.eslintignore b/.eslintignore index 84b11ac6..465de920 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,4 +1,3 @@ lib -tests node_modules /*.* \ No newline at end of file diff --git a/.gitignore b/.gitignore index 19fd1eca..dec06869 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,7 @@ /lib # npm modules -/node_modules \ No newline at end of file +/node_modules + +# Tests coverage results +/coverage \ No newline at end of file diff --git a/jest.config.js b/jest.config.js index f696b609..7d78f29c 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,3 +1,5 @@ +const { defaults: tsjPreset } = require("ts-jest/presets"); + // For a detailed explanation regarding each configuration property, visit: // https://jestjs.io/docs/en/configuration.html @@ -72,11 +74,7 @@ module.exports = { moduleFileExtensions: ["ts", "js", "json"], // A map from regular expressions to module names that allow to stub out resources with a single module - moduleNameMapper: { - "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": - "/tests/mocks/fileMock.js", - "\\.(css|less)$": "/tests/mocks/styleMock.js" - }, + // moduleNameMapper: {}, // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader // modulePathIgnorePatterns: [], @@ -88,7 +86,7 @@ module.exports = { // notifyMode: "failure-change", // A preset that is used as a base for Jest's configuration - // preset: null, + preset: "ts-jest", // Run tests from one or more projects // projects: null, @@ -163,7 +161,7 @@ module.exports = { // A map from regular expressions to paths to transformers transform: { - "^.+\\.(js|ts)$": "/node_modules/ts-jest" + "^.+\\.(js|ts)$": "ts-jest" } // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation diff --git a/package.json b/package.json index 35abede3..09998de0 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,8 @@ }, "scripts": { "build": "webpack --mode=production", - "build:dev": "webpack --mode=development" + "build:dev": "webpack --mode=development", + "test": "jest" }, "repository": { "type": "git", diff --git a/src/constants/modes.test.js b/src/constants/modes.test.js new file mode 100644 index 00000000..b0a44ad7 --- /dev/null +++ b/src/constants/modes.test.js @@ -0,0 +1,5 @@ +import modes from "./modes"; + +test("modes", () => { + expect(modes.numeric).toBe("Numeric"); +}); diff --git a/tsconfig.json b/tsconfig.json index ca1b26c8..97888e8b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,7 +4,7 @@ "sourceMap": true, "module": "es6", "target": "es5", - "allowJs": false, + "allowJs": true, "moduleResolution": "node", "strict": true, "noImplicitAny": true, @@ -16,5 +16,5 @@ "noUnusedLocals": true, "esModuleInterop": true }, - "include": ["./src/**/*", "./tests/**/*"] + "include": ["./src/**/*"] } From 72813a5dafba33525e3293a4c4c69be30652e315 Mon Sep 17 00:00:00 2001 From: Denys Kozak Date: Wed, 30 Oct 2019 20:05:23 +0200 Subject: [PATCH 07/11] Cover all lib by unit tests --- .eslintignore | 1 + README.md | 12 +- jest.config.js | 6 +- package-lock.json | 606 ++++++++++++++++-- package.json | 2 + src/assets/test/image_from_readme.png | Bin 0 -> 5527 bytes src/assets/test/rounded_dots.png | Bin 0 -> 754 bytes src/assets/test/simple_dots.png | Bin 0 -> 1153 bytes src/assets/test/simple_qr.png | Bin 0 -> 596 bytes src/assets/test/simple_qr_with_image.png | Bin 0 -> 598 bytes src/assets/test/simple_square_dot.png | Bin 0 -> 353 bytes src/constants/dotTypes.test.js | 15 + src/constants/errorCorrectionLevels.test.js | 19 + ...rectLevels.ts => errorCorrectionLevels.ts} | 0 src/constants/errorCorrectionPercents.test.js | 15 + src/constants/modes.test.js | 10 +- src/constants/qrTypes.test.js | 19 + src/core/QRCanvas.test.js | 82 +++ src/core/QRCanvas.ts | 113 ++-- src/core/QRCodeStyling.test.js | 39 ++ src/core/QRCodeStyling.ts | 2 +- src/core/QRDot.test.js | 73 +++ src/core/QRDot.ts | 102 +-- src/core/QROptions.test.js | 23 + src/core/QROptions.ts | 4 +- src/index.test.js | 9 + src/index.ts | 7 +- src/tools/calculateImageSize.test.js | 127 ++++ src/tools/calculateImageSize.ts | 114 ++-- src/tools/getMode.test.js | 20 + src/tools/merge.test.js | 56 ++ src/tools/merge.ts | 38 +- webpack.config.js | 2 +- 33 files changed, 1266 insertions(+), 250 deletions(-) create mode 100644 src/assets/test/image_from_readme.png create mode 100644 src/assets/test/rounded_dots.png create mode 100644 src/assets/test/simple_dots.png create mode 100644 src/assets/test/simple_qr.png create mode 100644 src/assets/test/simple_qr_with_image.png create mode 100644 src/assets/test/simple_square_dot.png create mode 100644 src/constants/dotTypes.test.js create mode 100644 src/constants/errorCorrectionLevels.test.js rename src/constants/{errorCorrectLevels.ts => errorCorrectionLevels.ts} (100%) create mode 100644 src/constants/errorCorrectionPercents.test.js create mode 100644 src/constants/qrTypes.test.js create mode 100644 src/core/QRCanvas.test.js create mode 100644 src/core/QRCodeStyling.test.js create mode 100644 src/core/QRDot.test.js create mode 100644 src/core/QROptions.test.js create mode 100644 src/index.test.js create mode 100644 src/tools/calculateImageSize.test.js create mode 100644 src/tools/getMode.test.js create mode 100644 src/tools/merge.test.js diff --git a/.eslintignore b/.eslintignore index 465de920..33fc96e2 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,3 +1,4 @@ lib node_modules +coverage /*.* \ No newline at end of file diff --git a/README.md b/README.md index 945240af..f0f078d9 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ npm install qr-code-styling