From 8e5885834677ef8d7f70d3cc791238deec64f604 Mon Sep 17 00:00:00 2001 From: Eric Amodio Date: Tue, 5 Mar 2019 01:17:49 -0500 Subject: [PATCH] Updates dependencies & more Adds bundle analyzer Adds circular deps analyzer Switches to es2018 output Removes many circular dependencies --- package-lock.json | 830 +++++++++++++++++++++++++++++++++++++++++---------- package.json | 18 +- src/config.ts | 385 ++++++++++++++++++++++++ src/configuration.ts | 59 +--- src/container.ts | 72 ++++- src/extension.ts | 6 +- src/logger.ts | 42 +-- src/ui/config.ts | 391 ------------------------ src/ui/ipc.ts | 2 +- tsconfig.json | 6 +- ui.tsconfig.json | 11 +- webpack.config.js | 29 +- 12 files changed, 1205 insertions(+), 646 deletions(-) create mode 100644 src/config.ts delete mode 100644 src/ui/config.ts diff --git a/package-lock.json b/package-lock.json index 592270e..191f664 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "gitlens", - "version": "9.5.0", + "version": "9.5.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -79,15 +79,15 @@ } }, "@types/lodash": { - "version": "4.14.120", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.120.tgz", - "integrity": "sha512-jQ21kQ120mo+IrDs1nFNVm/AsdFxIx2+vZ347DbogHJPd/JzKNMOqU6HCYin1W6v8l5R9XSO2/e9cxmn7HAnVw==", + "version": "4.14.121", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.121.tgz", + "integrity": "sha512-ORj7IBWj13iYufXt/VXrCNMbUuCTJfhzme5kx9U/UtcIPdJYuvPDUAlHlbNhz/8lKCLy9XGIZnGrqXOtQbPGoQ==", "dev": true }, "@types/lodash-es": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.1.tgz", - "integrity": "sha512-3EDZjphPfdjnsWvY11ufYImFMPyQJwIH1eFYRgWQsjOctce06fmNgVf5sfvXBRiaS1o0X50bAln1lfWs8ZO3BA==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.2.tgz", + "integrity": "sha512-Bpl6bh7kF9IdepJEfSd6g/E6OPq99jcIQP5g0xqv47P1FjLOP1+PENCy2vWvrzY+KwnnHwGAbUcTxbEr+WAnUw==", "dev": true, "requires": { "@types/lodash": "*" @@ -140,175 +140,179 @@ } }, "@webassemblyjs/ast": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz", - "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.3.tgz", + "integrity": "sha512-xy3m06+Iu4D32+6soz6zLnwznigXJRuFNTovBX2M4GqVqLb0dnyWLbPnpcXvUSdEN+9DVyDeaq2jyH1eIL2LZQ==", "dev": true, "requires": { - "@webassemblyjs/helper-module-context": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/wast-parser": "1.7.11" + "@webassemblyjs/helper-module-context": "1.8.3", + "@webassemblyjs/helper-wasm-bytecode": "1.8.3", + "@webassemblyjs/wast-parser": "1.8.3" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz", - "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.3.tgz", + "integrity": "sha512-vq1TISG4sts4f0lDwMUM0f3kpe0on+G3YyV5P0IySHFeaLKRYZ++n2fCFfG4TcCMYkqFeTUYFxm75L3ddlk2xA==", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz", - "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.3.tgz", + "integrity": "sha512-BmWEynI4FnZbjk8CaYZXwcv9a6gIiu+rllRRouQUo73hglanXD3AGFJE7Q4JZCoVE0p5/jeX6kf5eKa3D4JxwQ==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz", - "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.3.tgz", + "integrity": "sha512-iVIMhWnNHoFB94+/2l7LpswfCsXeMRnWfExKtqsZ/E2NxZyUx9nTeKK/MEMKTQNEpyfznIUX06OchBHQ+VKi/Q==", "dev": true }, "@webassemblyjs/helper-code-frame": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz", - "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.3.tgz", + "integrity": "sha512-K1UxoJML7GKr1QXR+BG7eXqQkvu+eEeTjlSl5wUFQ6W6vaOc5OwSxTcb3oE9x/3+w4NHhrIKD4JXXCZmLdL2cg==", "dev": true, "requires": { - "@webassemblyjs/wast-printer": "1.7.11" + "@webassemblyjs/wast-printer": "1.8.3" } }, "@webassemblyjs/helper-fsm": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz", - "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.3.tgz", + "integrity": "sha512-387zipfrGyO77/qm7/SDUiZBjQ5KGk4qkrVIyuoubmRNIiqn3g+6ijY8BhnlGqsCCQX5bYKOnttJobT5xoyviA==", "dev": true }, "@webassemblyjs/helper-module-context": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz", - "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==", - "dev": true + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.3.tgz", + "integrity": "sha512-lPLFdQfaRssfnGEJit5Sk785kbBPPPK4ZS6rR5W/8hlUO/5v3F+rN8XuUcMj/Ny9iZiyKhhuinWGTUuYL4VKeQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.3", + "mamacro": "^0.0.3" + } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz", - "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.3.tgz", + "integrity": "sha512-R1nJW7bjyJLjsJQR5t3K/9LJ0QWuZezl8fGa49DZq4IVaejgvkbNlKEQxLYTC579zgT4IIIVHb5JA59uBPHXyw==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz", - "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.3.tgz", + "integrity": "sha512-P6F7D61SJY73Yz+fs49Q3+OzlYAZP86OfSpaSY448KzUy65NdfzDmo2NPVte+Rw4562MxEAacvq/mnDuvRWOcg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11" + "@webassemblyjs/ast": "1.8.3", + "@webassemblyjs/helper-buffer": "1.8.3", + "@webassemblyjs/helper-wasm-bytecode": "1.8.3", + "@webassemblyjs/wasm-gen": "1.8.3" } }, "@webassemblyjs/ieee754": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz", - "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.3.tgz", + "integrity": "sha512-UD4HuLU99hjIvWz1pD68b52qsepWQlYCxDYVFJQfHh3BHyeAyAlBJ+QzLR1nnS5J6hAzjki3I3AoJeobNNSZlg==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz", - "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.3.tgz", + "integrity": "sha512-XXd3s1BmkC1gpGABuCRLqCGOD6D2L+Ma2BpwpjrQEHeQATKWAQtxAyU9Z14/z8Ryx6IG+L4/NDkIGHrccEhRUg==", "dev": true, "requires": { - "@xtuc/long": "4.2.1" + "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz", - "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.3.tgz", + "integrity": "sha512-Wv/WH9Zo5h5ZMyfCNpUrjFsLZ3X1amdfEuwdb7MLdG3cPAjRS6yc6ElULlpjLiiBTuzvmLhr3ENsuGyJ3wyCgg==", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz", - "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.3.tgz", + "integrity": "sha512-nB19eUx3Yhi1Vvv3yev5r+bqQixZprMtaoCs1brg9Efyl8Hto3tGaUoZ0Yb4Umn/gQCyoEGFfUxPLp1/8+Jvnw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/helper-wasm-section": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11", - "@webassemblyjs/wasm-opt": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11", - "@webassemblyjs/wast-printer": "1.7.11" + "@webassemblyjs/ast": "1.8.3", + "@webassemblyjs/helper-buffer": "1.8.3", + "@webassemblyjs/helper-wasm-bytecode": "1.8.3", + "@webassemblyjs/helper-wasm-section": "1.8.3", + "@webassemblyjs/wasm-gen": "1.8.3", + "@webassemblyjs/wasm-opt": "1.8.3", + "@webassemblyjs/wasm-parser": "1.8.3", + "@webassemblyjs/wast-printer": "1.8.3" } }, "@webassemblyjs/wasm-gen": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz", - "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.3.tgz", + "integrity": "sha512-sDNmu2nLBJZ/huSzlJvd9IK8B1EjCsOl7VeMV9VJPmxKYgTJ47lbkSP+KAXMgZWGcArxmcrznqm7FrAPQ7vVGg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/ieee754": "1.7.11", - "@webassemblyjs/leb128": "1.7.11", - "@webassemblyjs/utf8": "1.7.11" + "@webassemblyjs/ast": "1.8.3", + "@webassemblyjs/helper-wasm-bytecode": "1.8.3", + "@webassemblyjs/ieee754": "1.8.3", + "@webassemblyjs/leb128": "1.8.3", + "@webassemblyjs/utf8": "1.8.3" } }, "@webassemblyjs/wasm-opt": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz", - "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.3.tgz", + "integrity": "sha512-j8lmQVFR+FR4/645VNgV4R/Jz8i50eaPAj93GZyd3EIJondVshE/D9pivpSDIXyaZt+IkCodlzOoZUE4LnQbeA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11" + "@webassemblyjs/ast": "1.8.3", + "@webassemblyjs/helper-buffer": "1.8.3", + "@webassemblyjs/wasm-gen": "1.8.3", + "@webassemblyjs/wasm-parser": "1.8.3" } }, "@webassemblyjs/wasm-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz", - "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.3.tgz", + "integrity": "sha512-NBI3SNNtRoy4T/KBsRZCAWUzE9lI94RH2nneLwa1KKIrt/2zzcTavWg6oY05ArCbb/PZDk3OUi63CD1RYtN65w==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-api-error": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/ieee754": "1.7.11", - "@webassemblyjs/leb128": "1.7.11", - "@webassemblyjs/utf8": "1.7.11" + "@webassemblyjs/ast": "1.8.3", + "@webassemblyjs/helper-api-error": "1.8.3", + "@webassemblyjs/helper-wasm-bytecode": "1.8.3", + "@webassemblyjs/ieee754": "1.8.3", + "@webassemblyjs/leb128": "1.8.3", + "@webassemblyjs/utf8": "1.8.3" } }, "@webassemblyjs/wast-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz", - "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.3.tgz", + "integrity": "sha512-gZPst4CNcmGtKC1eYQmgCx6gwQvxk4h/nPjfPBbRoD+Raw3Hs+BS3yhrfgyRKtlYP+BJ8LcY9iFODEQofl2qbg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/floating-point-hex-parser": "1.7.11", - "@webassemblyjs/helper-api-error": "1.7.11", - "@webassemblyjs/helper-code-frame": "1.7.11", - "@webassemblyjs/helper-fsm": "1.7.11", - "@xtuc/long": "4.2.1" + "@webassemblyjs/ast": "1.8.3", + "@webassemblyjs/floating-point-hex-parser": "1.8.3", + "@webassemblyjs/helper-api-error": "1.8.3", + "@webassemblyjs/helper-code-frame": "1.8.3", + "@webassemblyjs/helper-fsm": "1.8.3", + "@xtuc/long": "4.2.2" } }, "@webassemblyjs/wast-printer": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz", - "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.3.tgz", + "integrity": "sha512-DTA6kpXuHK4PHu16yAD9QVuT1WZQRT7079oIFFmFSjqjLWGXS909I/7kiLTn931mcj7wGsaUNungjwNQ2lGQ3Q==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/wast-parser": "1.7.11", - "@xtuc/long": "4.2.1" + "@webassemblyjs/ast": "1.8.3", + "@webassemblyjs/wast-parser": "1.8.3", + "@xtuc/long": "4.2.2" } }, "@xtuc/ieee754": { @@ -318,9 +322,9 @@ "dev": true }, "@xtuc/long": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz", - "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, "abbrev": { @@ -329,10 +333,20 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "dev": true, + "requires": { + "mime-types": "~2.1.18", + "negotiator": "0.6.1" + } + }, "acorn": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.7.tgz", - "integrity": "sha512-HNJNgE60C9eOTgn974Tlp3dpLZdUr+SoxxDwPaY9J/kDNOLQTkaDgwBUXAF4SSsrAwD9RpdxuHK/EbuF+W9Ahw==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", "dev": true }, "acorn-dynamic-import": { @@ -539,6 +553,12 @@ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", "dev": true }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, "array-slice": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", @@ -642,6 +662,12 @@ "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", "dev": true }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "dev": true + }, "async-throttle": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/async-throttle/-/async-throttle-1.1.0.tgz", @@ -796,6 +822,18 @@ "tweetnacl": "^0.14.3" } }, + "bfj": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.1.tgz", + "integrity": "sha512-+GUNvzHR4nRyGybQc2WpNJL4MJazMuvf92ueIyA0bIkPRwhhQu3IfZQ2PSoVPpCBJfmoSdOxu5rnotfFLlvYRQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.1", + "check-types": "^7.3.0", + "hoopy": "^0.1.2", + "tryer": "^1.0.0" + } + }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -1076,6 +1114,35 @@ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", "dev": true }, + "body-parser": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "~1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "~2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "~1.6.16" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -1272,6 +1339,12 @@ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, "cacache": { "version": "11.3.2", "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz", @@ -1429,6 +1502,12 @@ } } }, + "check-types": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-7.4.0.tgz", + "integrity": "sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg==", + "dev": true + }, "cheerio": { "version": "1.0.0-rc.2", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz", @@ -1453,17 +1532,17 @@ } }, "htmlparser2": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.0.tgz", - "integrity": "sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ==", + "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.0", + "domelementtype": "^1.3.1", "domhandler": "^2.3.0", "domutils": "^1.5.1", "entities": "^1.1.1", "inherits": "^2.0.1", - "readable-stream": "^3.0.6" + "readable-stream": "^3.1.1" } }, "readable-stream": { @@ -1489,9 +1568,9 @@ } }, "chokidar": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.0.tgz", - "integrity": "sha512-5t6G2SH8eO6lCvYOoUpaRnF5Qfd//gd7qJAkwRUw9qlGVkiQ13uwQngqbWWaurOsaAm9+kUGbITADxt6H0XFNQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.2.tgz", + "integrity": "sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg==", "dev": true, "requires": { "anymatch": "^2.0.0", @@ -1541,6 +1620,12 @@ "safe-buffer": "^5.0.1" } }, + "circular-dependency-plugin": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.0.2.tgz", + "integrity": "sha512-oC7/DVAyfcY3UWKm0sN/oVoDedQDQiw/vIiAnuTWTpE5s0zWf7l3WY417Xw/Fbi/QbAjctAkxgMiS9P0s3zkmA==", + "dev": true + }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -1846,6 +1931,12 @@ "safe-buffer": "5.1.2" } }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, "convert-source-map": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", @@ -1855,6 +1946,18 @@ "safe-buffer": "~5.1.1" } }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, "copy-concurrently": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", @@ -2325,6 +2428,12 @@ "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=", "dev": true }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, "des.js": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", @@ -2335,6 +2444,12 @@ "minimalistic-assert": "^1.0.0" } }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, "detect-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", @@ -2525,6 +2640,18 @@ "safer-buffer": "^2.1.0" } }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "ejs": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", + "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==", + "dev": true + }, "elliptic": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", @@ -2546,6 +2673,12 @@ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", "dev": true }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, "end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", @@ -2615,6 +2748,12 @@ "is-symbol": "^1.0.2" } }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -2658,6 +2797,12 @@ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, "event-stream": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", @@ -2786,6 +2931,52 @@ "homedir-polyfill": "^1.0.1" } }, + "express": { + "version": "4.16.4", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", + "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.3", + "content-disposition": "0.5.2", + "content-type": "~1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.4", + "qs": "6.5.2", + "range-parser": "~1.2.0", + "safe-buffer": "5.1.2", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "~1.4.0", + "type-is": "~1.6.16", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "dev": true + } + } + }, "ext-list": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", @@ -2983,6 +3174,12 @@ "trim-repeated": "^1.0.0" } }, + "filesize": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", + "dev": true + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -3006,6 +3203,21 @@ } } }, + "finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" + } + }, "find-cache-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz", @@ -3069,30 +3281,40 @@ } }, "flush-write-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.0.tgz", - "integrity": "sha512-6MHED/cmsyux1G4/Cek2Z776y9t7WCNd3h2h/HW91vFeU7pzMhA8XvAlDhHcanG5IWuIh/xcC7JASY4WQpG6xg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", "dev": true, "requires": { "inherits": "^2.0.3", - "readable-stream": "^3.1.1" + "readable-stream": "^2.3.6" }, "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, "readable-stream": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", - "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "string_decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", - "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" @@ -3132,6 +3354,12 @@ "mime-types": "^2.1.12" } }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -3141,6 +3369,12 @@ "map-cache": "^0.2.2" } }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, "from": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", @@ -3284,7 +3518,8 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", @@ -3411,7 +3646,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -3423,6 +3659,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -3548,7 +3785,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -3681,6 +3919,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -4243,6 +4482,24 @@ } } }, + "gzip-size": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.0.0.tgz", + "integrity": "sha512-5iI7omclyqrnWw4XbXAmGhPsABkSIDQonv2K0h61lybgofWa6iZyvrI3r2zsJH4P8Nb64fFVzlvfhs0g7BBxAA==", + "dev": true, + "requires": { + "duplexer": "^0.1.1", + "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 + } + } + }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", @@ -4388,6 +4645,12 @@ "parse-passwd": "^1.0.0" } }, + "hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "dev": true + }, "hosted-git-info": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", @@ -4496,6 +4759,18 @@ "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", "dev": true }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -4766,6 +5041,12 @@ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", "dev": true }, + "ipaddr.js": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=", + "dev": true + }, "is": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz", @@ -5476,6 +5757,12 @@ } } }, + "mamacro": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", + "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", + "dev": true + }, "map-age-cleaner": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", @@ -5548,6 +5835,12 @@ "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", "dev": true }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, "mem": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", @@ -5617,12 +5910,24 @@ "trim-newlines": "^1.0.0" } }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, "merge2": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==", "dev": true }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -5946,6 +6251,12 @@ "to-regex": "^3.0.1" } }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, "neo-async": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", @@ -6026,12 +6337,6 @@ "vm-browserify": "0.0.4" }, "dependencies": { - "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", - "dev": true - }, "buffer": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", @@ -6388,6 +6693,15 @@ "has": "^1.0.3" } }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -6397,6 +6711,12 @@ "wrappy": "1" } }, + "opener": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", + "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==", + "dev": true + }, "optipng-bin": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-5.1.0.tgz", @@ -6641,9 +6961,9 @@ } }, "parse-asn1": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.3.tgz", - "integrity": "sha512-VrPoetlz7B/FqjBLD2f5wBVZvsZVLnRUrxVLfRYhGXCODa/NWE4p3Wp+6+aV3ZPL3KM7/OZmxDIwwijD7yuucg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", + "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", "dev": true, "requires": { "asn1.js": "^4.0.0", @@ -6687,6 +7007,12 @@ "@types/node": "*" } }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "dev": true + }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", @@ -6732,6 +7058,12 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "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", @@ -7180,6 +7512,16 @@ "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", "dev": true }, + "proxy-addr": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", + "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.8.0" + } + }, "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -7302,9 +7644,9 @@ } }, "randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { "safe-buffer": "^5.1.0" @@ -7320,6 +7662,35 @@ "safe-buffer": "^5.1.0" } }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "raw-body": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "dev": true, + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, "read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", @@ -7832,12 +8203,53 @@ "semver": "^5.3.0" } }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "dependencies": { + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true + } + } + }, "serialize-javascript": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz", "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==", "dev": true }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + } + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -7873,6 +8285,12 @@ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", "dev": true }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, "sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", @@ -8254,6 +8672,12 @@ } } }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + }, "stdout-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", @@ -8675,9 +9099,9 @@ } }, "terser-webpack-plugin": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.2.tgz", - "integrity": "sha512-1DMkTk286BzmfylAvLXwpJrI7dWa5BnFmscV/2dCr8+c56egFcbaeFAl7+sujAjdmpLam21XRdhA4oifLyiWWg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.3.tgz", + "integrity": "sha512-GOK7q85oAb/5kE12fMuLdn2btOS9OBZn4VsecpHDywoUC/jLhSAKOiYo0ezx7ss2EXPMzyEWFoE0s1WLE+4+oA==", "dev": true, "requires": { "cacache": "^11.0.2", @@ -8893,6 +9317,12 @@ "glob": "^7.1.2" } }, + "tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", + "dev": true + }, "ts-loader": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-5.3.3.tgz", @@ -8912,9 +9342,9 @@ "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" }, "tslint": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.12.1.tgz", - "integrity": "sha512-sfodBHOucFg6egff8d1BvuofoOQ/nOeYNfbp7LDlKBcLNrL3lmS5zoiDGyOMdT7YsEXAwWpTdAHwOGOc8eRZAw==", + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.13.0.tgz", + "integrity": "sha512-ECOOQRxXCYnUUePG5h/+Z1Zouobk3KFpIHA9aKBB/nnMxs97S1JJPDGt5J4cGm1y9U9VmVlfboOxA8n1kSNzGw==", "dev": true, "requires": { "babel-code-frame": "^6.22.0", @@ -8925,6 +9355,7 @@ "glob": "^7.1.1", "js-yaml": "^3.7.0", "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", "resolve": "^1.3.2", "semver": "^5.3.0", "tslib": "^1.8.0", @@ -8986,6 +9417,16 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.18" + } + }, "typed-rest-client": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-0.9.0.tgz", @@ -9117,6 +9558,12 @@ "through2-filter": "^3.0.0" } }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, "unquote": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", @@ -9282,6 +9729,12 @@ "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", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, "uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", @@ -9310,6 +9763,12 @@ "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", "dev": true }, + "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", @@ -9477,9 +9936,9 @@ } }, "vsce": { - "version": "1.57.0", - "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.57.0.tgz", - "integrity": "sha512-ULiWDQBt0XZAA5PI7XL0TxeKZ6cXk3e3ZH/lL9xk93WeckqWzR79D3xNsf0GRacOGYU+UmbhXWRtP8C6wnDNmg==", + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.57.1.tgz", + "integrity": "sha512-fqrUSJZY67pznkk95eeiqgPnT5/BudqtzIyAvsm521TREd772yXzCTWb3IuDx98mJvxIT2GyoBXEgMCeNvkF/A==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -9503,9 +9962,9 @@ } }, "vscode": { - "version": "1.1.29", - "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.29.tgz", - "integrity": "sha512-E6hzqGtCD65BnBxdZzSIi8FPCM4seEEK/bbTeYdJntg+4D5R6GLbdYFySE9DNTtMJF4iB9UGoucKU/p8Guts1g==", + "version": "1.1.30", + "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.30.tgz", + "integrity": "sha512-YDj5w0TGOcS8XLIdekT4q6LlLV6hv1ZvuT2aGT3KJll4gMz6dUPDgo2VVAf0i0E8igbbZthwvmaUGRwW9yPIaw==", "dev": true, "requires": { "glob": "^7.1.2", @@ -9553,15 +10012,15 @@ } }, "webpack": { - "version": "4.29.3", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.29.3.tgz", - "integrity": "sha512-xPJvFeB+8tUflXFq+OgdpiSnsCD5EANyv56co5q8q8+YtEasn5Sj3kzY44mta+csCIEB0vneSxnuaHkOL2h94A==", + "version": "4.29.5", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.29.5.tgz", + "integrity": "sha512-DuWlYUT982c7XVHodrLO9quFbNpVq5FNxLrMUfYUTlgKW0+yPimynYf1kttSQpEneAL1FH3P3OLNgkyImx8qIQ==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-module-context": "1.7.11", - "@webassemblyjs/wasm-edit": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11", + "@webassemblyjs/ast": "1.8.3", + "@webassemblyjs/helper-module-context": "1.8.3", + "@webassemblyjs/wasm-edit": "1.8.3", + "@webassemblyjs/wasm-parser": "1.8.3", "acorn": "^6.0.5", "acorn-dynamic-import": "^4.0.0", "ajv": "^6.1.0", @@ -9584,6 +10043,40 @@ "webpack-sources": "^1.3.0" } }, + "webpack-bundle-analyzer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.0.4.tgz", + "integrity": "sha512-ggDUgtKuQki4vmc93Ej65GlYxeCUR/0THa7gA+iqAGC2FFAxO+r+RM9sAUa8HWdw4gJ3/NZHX/QUcVgRjdIsDg==", + "dev": true, + "requires": { + "acorn": "^5.7.3", + "bfj": "^6.1.1", + "chalk": "^2.4.1", + "commander": "^2.18.0", + "ejs": "^2.6.1", + "express": "^4.16.3", + "filesize": "^3.6.1", + "gzip-size": "^5.0.0", + "lodash": "^4.17.10", + "mkdirp": "^0.5.1", + "opener": "^1.5.1", + "ws": "^6.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 + }, + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "dev": true + } + } + }, "webpack-cli": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.2.3.tgz", @@ -9886,6 +10379,15 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "ws": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", + "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", diff --git a/package.json b/package.json index 0b98f9b..1b7a541 100644 --- a/package.json +++ b/package.json @@ -4865,6 +4865,8 @@ } }, "scripts": { + "analyze:bundle": "webpack --env.analyzeBundle", + "analyze:deps": "webpack --env.analyzeDeps", "build": "webpack --env.development", "bundle": "webpack --env.production", "clean": "git clean -Xdf -e !.cache-images -e !node_modules -e !node_modules/**/*", @@ -4889,9 +4891,10 @@ "vsls": "0.3.967" }, "devDependencies": { - "@types/lodash-es": "4.17.1", + "@types/lodash-es": "4.17.2", "@types/node": "10.1.4", "clean-webpack-plugin": "1.0.1", + "circular-dependency-plugin": "5.0.2", "css-loader": "2.1.0", "html-webpack-inline-source-plugin": "0.0.10", "html-webpack-plugin": "3.2.0", @@ -4901,15 +4904,16 @@ "prettier": "1.16.4", "prettier-tslint": "0.4.2", "sass-loader": "7.1.0", - "terser-webpack-plugin": "1.2.2", - "tslint": "5.12.1", + "terser-webpack-plugin": "1.2.3", + "tslint": "5.13.0", "tslint-loader": "3.5.4", "tslint-prettiest": "0.0.1", "ts-loader": "5.3.3", "typescript": "3.2.4", - "vsce": "1.57.0", - "vscode": "1.1.29", - "webpack": "4.29.3", - "webpack-cli": "3.2.3" + "vsce": "1.57.1", + "vscode": "1.1.30", + "webpack": "4.29.5", + "webpack-cli": "3.2.3", + "webpack-bundle-analyzer": "3.0.4" } } diff --git a/src/config.ts b/src/config.ts new file mode 100644 index 0000000..f160bd3 --- /dev/null +++ b/src/config.ts @@ -0,0 +1,385 @@ +'use strict'; +import { TraceLevel } from './logger'; + +export interface Config { + blame: { + avatars: boolean; + compact: boolean; + dateFormat: string | null; + format: string; + heatmap: { + enabled: boolean; + location: 'left' | 'right'; + }; + highlight: { + enabled: boolean; + locations: HighlightLocations[]; + }; + ignoreWhitespace: boolean; + separateLines: boolean; + toggleMode: AnnotationsToggleMode; + }; + currentLine: { + scrollable: boolean; + dateFormat: string | null; + enabled: boolean; + format: string; + }; + codeLens: CodeLensConfig; + debug: boolean; + defaultDateFormat: string | null; + defaultDateShortFormat: string | null; + defaultDateStyle: DateStyle; + defaultGravatarsStyle: GravatarDefaultStyle; + heatmap: { + ageThreshold: number; + coldColor: string; + hotColor: string; + toggleMode: AnnotationsToggleMode; + }; + hovers: { + annotations: { + changes: boolean; + details: boolean; + enabled: boolean; + over: 'line' | 'annotation'; + }; + currentLine: { + changes: boolean; + details: boolean; + enabled: boolean; + over: 'line' | 'annotation'; + }; + avatars: boolean; + detailsMarkdownFormat: string; + enabled: boolean; + }; + insiders: boolean; + keymap: KeyMap; + liveshare: { + allowGuestAccess: boolean; + }; + menus: boolean | MenuConfig; + mode: { + active: string; + statusBar: { + enabled: boolean; + alignment: 'left' | 'right'; + }; + }; + modes: { [key: string]: ModeConfig }; + outputLevel: TraceLevel; + recentChanges: { + highlight: { + locations: HighlightLocations[]; + }; + toggleMode: AnnotationsToggleMode; + }; + remotes: RemotesConfig[]; + showWhatsNewAfterUpgrades: boolean; + statusBar: { + alignment: 'left' | 'right'; + command: StatusBarCommand; + dateFormat: string | null; + enabled: boolean; + format: string; + reduceFlicker: boolean; + }; + strings: { + codeLens: { + unsavedChanges: { + recentChangeAndAuthors: string; + recentChangeOnly: string; + authorsOnly: string; + }; + }; + }; + views: ViewsConfig; + advanced: AdvancedConfig; +} + +export enum AnnotationsToggleMode { + File = 'file', + Window = 'window' +} + +export enum CodeLensCommand { + DiffWithPrevious = 'gitlens.diffWithPrevious', + ShowQuickCommitDetails = 'gitlens.showQuickCommitDetails', + ShowQuickCommitFileDetails = 'gitlens.showQuickCommitFileDetails', + ShowQuickCurrentBranchHistory = 'gitlens.showQuickRepoHistory', + ShowQuickFileHistory = 'gitlens.showQuickFileHistory', + ToggleFileBlame = 'gitlens.toggleFileBlame' +} + +export enum CodeLensScopes { + Document = 'document', + Containers = 'containers', + Blocks = 'blocks' +} + +export enum CustomRemoteType { + Bitbucket = 'Bitbucket', + BitbucketServer = 'BitbucketServer', + Custom = 'Custom', + GitHub = 'GitHub', + GitLab = 'GitLab' +} + +export enum DateStyle { + Absolute = 'absolute', + Relative = 'relative' +} + +export enum FileAnnotationType { + Blame = 'blame', + Heatmap = 'heatmap', + RecentChanges = 'recentChanges' +} + +export enum GravatarDefaultStyle { + Faces = 'wavatar', + Geometric = 'identicon', + Monster = 'monsterid', + MysteryPerson = 'mp', + Retro = 'retro', + Robot = 'robohash' +} + +export enum HighlightLocations { + Gutter = 'gutter', + Line = 'line', + Overview = 'overview' +} + +export enum KeyMap { + Alternate = 'alternate', + Chorded = 'chorded', + None = 'none' +} + +export enum StatusBarCommand { + DiffWithPrevious = 'gitlens.diffWithPrevious', + DiffWithWorking = 'gitlens.diffWithWorking', + ShowQuickCommitDetails = 'gitlens.showQuickCommitDetails', + ShowQuickCommitFileDetails = 'gitlens.showQuickCommitFileDetails', + ShowQuickCurrentBranchHistory = 'gitlens.showQuickRepoHistory', + ShowQuickFileHistory = 'gitlens.showQuickFileHistory', + ToggleCodeLens = 'gitlens.toggleCodeLens', + ToggleFileBlame = 'gitlens.toggleFileBlame' +} + +export enum ViewBranchesLayout { + List = 'list', + Tree = 'tree' +} + +export enum ViewFilesLayout { + Auto = 'auto', + List = 'list', + Tree = 'tree' +} + +export interface AdvancedConfig { + abbreviatedShaLength: number; + blame: { + customArguments: string[] | null; + delayAfterEdit: number; + sizeThresholdAfterEdit: number; + }; + caching: { + enabled: boolean; + }; + fileHistoryFollowsRenames: boolean; + maxListItems: number; + messages: { + suppressCommitHasNoPreviousCommitWarning: boolean; + suppressCommitNotFoundWarning: boolean; + suppressFileNotUnderSourceControlWarning: boolean; + suppressGitDisabledWarning: boolean; + suppressGitVersionWarning: boolean; + suppressLineUncommittedWarning: boolean; + suppressNoRepositoryWarning: boolean; + suppressSupportGitLensNotification: boolean; + }; + quickPick: { + closeOnFocusOut: boolean; + }; + repositorySearchDepth: number; + telemetry: { + enabled: boolean; + }; +} + +export interface CodeLensConfig { + authors: { + enabled: boolean; + command: CodeLensCommand; + }; + enabled: boolean; + includeSingleLineSymbols: boolean; + recentChange: { + enabled: boolean; + command: CodeLensCommand; + }; + scopes: CodeLensScopes[]; + scopesByLanguage: CodeLensLanguageScope[]; + symbolScopes: string[]; +} + +export interface CodeLensLanguageScope { + language: string | undefined; + scopes?: CodeLensScopes[]; + symbolScopes?: string[]; +} + +export interface CompareViewConfig { + avatars: boolean; + enabled: boolean; + files: ViewsFilesConfig; + location: 'explorer' | 'gitlens' | 'scm'; +} + +export interface FileHistoryViewConfig { + avatars: boolean; + enabled: boolean; + location: 'explorer' | 'gitlens' | 'scm'; +} + +export interface LineHistoryViewConfig { + avatars: boolean; + enabled: boolean; + location: 'explorer' | 'gitlens' | 'scm'; +} + +export interface MenuConfig { + editor: + | false + | { + blame: boolean; + clipboard: boolean; + compare: boolean; + details: boolean; + history: boolean; + remote: boolean; + }; + editorGroup: + | false + | { + compare: boolean; + history: boolean; + }; + editorTab: + | false + | { + clipboard: boolean; + compare: boolean; + history: boolean; + remote: boolean; + }; + explorer: + | false + | { + clipboard: boolean; + compare: boolean; + history: boolean; + remote: boolean; + }; + scmGroup: + | false + | { + compare: boolean; + openClose: boolean; + stash: boolean; + stashInline: boolean; + }; + scmItem: + | false + | { + clipboard: boolean; + compare: boolean; + history: boolean; + remote: boolean; + stash: boolean; + }; +} + +export interface ModeConfig { + name: string; + statusBarItemName?: string; + description?: string; + annotations?: 'blame' | 'heatmap' | 'recentChanges'; + codeLens?: boolean; + currentLine?: boolean; + hovers?: boolean; + statusBar?: boolean; + views?: boolean; +} + +export interface RemotesConfig { + domain: string; + name?: string; + protocol?: string; + type: CustomRemoteType; + urls?: RemotesUrlsConfig; +} + +export interface RemotesUrlsConfig { + repository: string; + branches: string; + branch: string; + commit: string; + file: string; + fileInBranch: string; + fileInCommit: string; + fileLine: string; + fileRange: string; +} + +export interface RepositoriesViewConfig { + autoRefresh: boolean; + autoReveal: boolean; + avatars: boolean; + branches: { + layout: ViewBranchesLayout; + }; + compact: boolean; + enabled: boolean; + files: ViewsFilesConfig; + includeWorkingTree: boolean; + location: 'explorer' | 'gitlens' | 'scm'; + showTrackingBranch: boolean; +} + +export interface SearchViewConfig { + avatars: boolean; + enabled: boolean; + files: ViewsFilesConfig; + location: 'explorer' | 'gitlens' | 'scm'; +} + +export interface ViewsConfig { + fileHistory: FileHistoryViewConfig; + commitFileDescriptionFormat: string; + commitFileFormat: string; + commitDescriptionFormat: string; + commitFormat: string; + compare: CompareViewConfig; + defaultItemLimit: number; + lineHistory: LineHistoryViewConfig; + repositories: RepositoriesViewConfig; + search: SearchViewConfig; + showRelativeDateMarkers: boolean; + stashFileDescriptionFormat: string; + stashFileFormat: string; + stashDescriptionFormat: string; + stashFormat: string; + statusFileDescriptionFormat: string; + statusFileFormat: string; +} + +export interface ViewsFilesConfig { + compact: boolean; + layout: ViewFilesLayout; + threshold: number; +} diff --git a/src/configuration.ts b/src/configuration.ts index edc1344..82cf5c4 100644 --- a/src/configuration.ts +++ b/src/configuration.ts @@ -1,5 +1,5 @@ 'use strict'; -export * from './ui/config'; +export * from './config'; import { ConfigurationChangeEvent, @@ -10,11 +10,9 @@ import { Uri, workspace } from 'vscode'; +import { Config } from './config'; import { extensionId } from './constants'; -import { Container } from './container'; -import { clearGravatarCache } from './git/gitService'; import { Functions } from './system'; -import { Config } from './ui/config'; const emptyConfig: any = new Proxy({} as Config, { get(target, propKey, receiver) { @@ -22,6 +20,11 @@ const emptyConfig: any = new Proxy({} as Config, { } }); +export interface ConfigurationWillChangeEvent { + change: ConfigurationChangeEvent; + transform?(e: ConfigurationChangeEvent): ConfigurationChangeEvent; +} + export class Configuration { static configure(context: ExtensionContext) { context.subscriptions.push( @@ -34,51 +37,21 @@ export class Configuration { return this._onDidChange.event; } - private readonly _configAffectedByMode: string[]; - - constructor() { - this._configAffectedByMode = [ - `gitlens.${this.name('mode').value}`, - `gitlens.${this.name('modes').value}`, - `gitlens.${this.name('blame')('toggleMode').value}`, - `gitlens.${this.name('codeLens').value}`, - `gitlens.${this.name('currentLine').value}`, - `gitlens.${this.name('heatmap')('toggleMode').value}`, - `gitlens.${this.name('hovers').value}`, - `gitlens.${this.name('recentChanges')('toggleMode').value}`, - `gitlens.${this.name('statusBar').value}`, - `gitlens.${this.name('views')('compare').value}`, - `gitlens.${this.name('views')('fileHistory').value}`, - `gitlens.${this.name('views')('lineHistory').value}`, - `gitlens.${this.name('views')('repositories').value}`, - `gitlens.${this.name('views')('search').value}` - ]; + private _onWillChange = new EventEmitter(); + get onWillChange(): Event { + return this._onWillChange.event; } private onConfigurationChanged(e: ConfigurationChangeEvent) { if (!e.affectsConfiguration(extensionId, null!)) return; - Container.resetConfig(); - - if (configuration.changed(e, configuration.name('defaultGravatarsStyle').value)) { - clearGravatarCache(); - } + const evt: ConfigurationWillChangeEvent = { + change: e + }; + this._onWillChange.fire(evt); - if ( - configuration.changed(e, configuration.name('mode').value) || - configuration.changed(e, configuration.name('modes').value) - ) { - const original = e.affectsConfiguration; - e = { - ...e, - affectsConfiguration: (section: string, resource?: Uri) => { - if (this._configAffectedByMode.some(n => section.startsWith(n))) { - return true; - } - - return original(section, resource); - } - } as ConfigurationChangeEvent; + if (evt.transform !== undefined) { + e = evt.transform(e); } this._onDidChange.fire(e); diff --git a/src/container.ts b/src/container.ts index c2d561b..9390171 100644 --- a/src/container.ts +++ b/src/container.ts @@ -1,14 +1,16 @@ 'use strict'; -import { commands, Disposable, ExtensionContext } from 'vscode'; +import { commands, ConfigurationChangeEvent, Disposable, ExtensionContext, Uri } from 'vscode'; import { FileAnnotationController } from './annotations/fileAnnotationController'; import { LineAnnotationController } from './annotations/lineAnnotationController'; import { GitCodeLensController } from './codelens/codeLensController'; import { Commands, ToggleFileBlameCommandArgs } from './commands'; -import { AnnotationsToggleMode, Config, configuration } from './configuration'; +import { AnnotationsToggleMode, Config, configuration, ConfigurationWillChangeEvent } from './configuration'; import { GitFileSystemProvider } from './git/fsProvider'; import { GitService } from './git/gitService'; +import { clearGravatarCache } from './git/gitService'; import { LineHoverController } from './hovers/lineHoverController'; import { Keyboard } from './keyboard'; +import { Logger, TraceLevel } from './logger'; import { StatusBarController } from './statusbar/statusBarController'; import { GitDocumentTracker } from './trackers/gitDocumentTracker'; import { GitLineTracker } from './trackers/gitLineTracker'; @@ -23,6 +25,11 @@ import { SettingsEditor } from './webviews/settingsEditor'; import { WelcomeEditor } from './webviews/welcomeEditor'; export class Container { + private static _configsAffectedByMode: string[] | undefined; + private static _applyModeConfigurationTransformBound: + | ((e: ConfigurationChangeEvent) => ConfigurationChangeEvent) + | undefined; + static initialize(context: ExtensionContext, config: Config) { this._context = context; this._config = Container.applyMode(config); @@ -111,6 +118,30 @@ export class Container { } context.subscriptions.push(new GitFileSystemProvider()); + + context.subscriptions.push(configuration.onWillChange(this.onConfigurationChanging, this)); + } + + private static onConfigurationChanging(e: ConfigurationWillChangeEvent) { + this._config = undefined; + + if (configuration.changed(e.change, configuration.name('outputLevel').value)) { + Logger.level = configuration.get(configuration.name('outputLevel').value); + } + + if (configuration.changed(e.change, configuration.name('defaultGravatarsStyle').value)) { + clearGravatarCache(); + } + + if ( + configuration.changed(e.change, configuration.name('mode').value) || + configuration.changed(e.change, configuration.name('modes').value) + ) { + if (this._applyModeConfigurationTransformBound === undefined) { + this._applyModeConfigurationTransformBound = this.applyModeConfigurationTransform.bind(this); + } + e.transform = this._applyModeConfigurationTransformBound; + } } private static _codeLensController: GitCodeLensController; @@ -235,10 +266,6 @@ export class Container { return this._welcomeEditor; } - static resetConfig() { - this._config = undefined; - } - private static applyMode(config: Config) { if (!config.mode.active) return config; @@ -308,4 +335,37 @@ export class Container { return config; } + + private static applyModeConfigurationTransform(e: ConfigurationChangeEvent): ConfigurationChangeEvent { + if (this._configsAffectedByMode === undefined) { + this._configsAffectedByMode = [ + `gitlens.${configuration.name('mode').value}`, + `gitlens.${configuration.name('modes').value}`, + `gitlens.${configuration.name('blame')('toggleMode').value}`, + `gitlens.${configuration.name('codeLens').value}`, + `gitlens.${configuration.name('currentLine').value}`, + `gitlens.${configuration.name('heatmap')('toggleMode').value}`, + `gitlens.${configuration.name('hovers').value}`, + `gitlens.${configuration.name('recentChanges')('toggleMode').value}`, + `gitlens.${configuration.name('statusBar').value}`, + `gitlens.${configuration.name('views')('compare').value}`, + `gitlens.${configuration.name('views')('fileHistory').value}`, + `gitlens.${configuration.name('views')('lineHistory').value}`, + `gitlens.${configuration.name('views')('repositories').value}`, + `gitlens.${configuration.name('views')('search').value}` + ]; + } + + const original = e.affectsConfiguration; + return { + ...e, + affectsConfiguration: (section: string, resource?: Uri) => { + if (this._configsAffectedByMode && this._configsAffectedByMode.some(n => section.startsWith(n))) { + return true; + } + + return original(section, resource); + } + }; + } } diff --git a/src/extension.ts b/src/extension.ts index 311b298..82d0891 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,14 +1,14 @@ 'use strict'; import { commands, ExtensionContext, extensions, window, workspace } from 'vscode'; import { Commands, registerCommands } from './commands'; +import { ModeConfig } from './config'; import { Config, configuration, Configuration } from './configuration'; import { CommandContext, extensionQualifiedId, GlobalState, GlyphChars, setCommandContext } from './constants'; import { Container } from './container'; import { GitCommit, GitService, GitUri } from './git/gitService'; -import { Logger } from './logger'; +import { Logger, TraceLevel } from './logger'; import { Messages } from './messages'; import { Strings, Versions } from './system'; -import { ModeConfig } from './ui/config'; // import { Telemetry } from './telemetry'; export async function activate(context: ExtensionContext) { @@ -17,7 +17,7 @@ export async function activate(context: ExtensionContext) { // Pretend we are enabled (until we know otherwise) and set the view contexts to reduce flashing on load setCommandContext(CommandContext.Enabled, true); - Logger.configure(context, o => { + Logger.configure(context, configuration.get(configuration.name('outputLevel').value), o => { if (o instanceof GitUri) { return `GitUri(${o.toString(true)}${o.repoPath ? ` repoPath=${o.repoPath}` : ''}${ o.sha ? ` sha=${o.sha}` : '' diff --git a/src/logger.ts b/src/logger.ts index 2ac8e33..019cf8a 100644 --- a/src/logger.ts +++ b/src/logger.ts @@ -1,11 +1,15 @@ 'use strict'; -import { ConfigurationChangeEvent, ExtensionContext, OutputChannel, Uri, window } from 'vscode'; -import { configuration, TraceLevel } from './configuration'; +import { ExtensionContext, OutputChannel, Uri, window } from 'vscode'; import { extensionOutputChannelName } from './constants'; import { getCorrelationContext } from './system'; // import { Telemetry } from './telemetry'; -export { TraceLevel } from './configuration'; +export enum TraceLevel { + Silent = 'silent', + Errors = 'errors', + Verbose = 'verbose', + Debug = 'debug' +} const ConsolePrefix = `[${extensionOutputChannelName}]`; @@ -18,32 +22,30 @@ export interface LogCorrelationContext { } export class Logger { - static level: TraceLevel = TraceLevel.Silent; static output: OutputChannel | undefined; static customLoggableFn: ((o: object) => string | undefined) | undefined; - static configure(context: ExtensionContext, loggableFn?: (o: any) => string | undefined) { + static configure(context: ExtensionContext, level: TraceLevel, loggableFn?: (o: any) => string | undefined) { this.customLoggableFn = loggableFn; - context.subscriptions.push(configuration.onDidChange(this.onConfigurationChanged, this)); - this.onConfigurationChanged(configuration.initializingChangeEvent); + this.level = level; } - private static onConfigurationChanged(e: ConfigurationChangeEvent) { - const section = configuration.name('outputLevel').value; - if (configuration.changed(e, section)) { - this.level = configuration.get(section); - - if (this.level === TraceLevel.Silent) { - if (this.output !== undefined) { - this.output.dispose(); - this.output = undefined; - } - } - else { - this.output = this.output || window.createOutputChannel(extensionOutputChannelName); + private static _level: TraceLevel = TraceLevel.Silent; + static get level() { + return this._level; + } + static set level(value: TraceLevel) { + this._level = value; + if (value === TraceLevel.Silent) { + if (this.output !== undefined) { + this.output.dispose(); + this.output = undefined; } } + else { + this.output = this.output || window.createOutputChannel(extensionOutputChannelName); + } } static debug(message: string, ...params: any[]): void; diff --git a/src/ui/config.ts b/src/ui/config.ts deleted file mode 100644 index 42e94f1..0000000 --- a/src/ui/config.ts +++ /dev/null @@ -1,391 +0,0 @@ -'use strict'; - -export interface Config { - blame: { - avatars: boolean; - compact: boolean; - dateFormat: string | null; - format: string; - heatmap: { - enabled: boolean; - location: 'left' | 'right'; - }; - highlight: { - enabled: boolean; - locations: HighlightLocations[]; - }; - ignoreWhitespace: boolean; - separateLines: boolean; - toggleMode: AnnotationsToggleMode; - }; - currentLine: { - scrollable: boolean; - dateFormat: string | null; - enabled: boolean; - format: string; - }; - codeLens: CodeLensConfig; - debug: boolean; - defaultDateFormat: string | null; - defaultDateShortFormat: string | null; - defaultDateStyle: DateStyle; - defaultGravatarsStyle: GravatarDefaultStyle; - heatmap: { - ageThreshold: number; - coldColor: string; - hotColor: string; - toggleMode: AnnotationsToggleMode; - }; - hovers: { - annotations: { - changes: boolean; - details: boolean; - enabled: boolean; - over: 'line' | 'annotation'; - }; - currentLine: { - changes: boolean; - details: boolean; - enabled: boolean; - over: 'line' | 'annotation'; - }; - avatars: boolean; - detailsMarkdownFormat: string; - enabled: boolean; - }; - insiders: boolean; - keymap: KeyMap; - liveshare: { - allowGuestAccess: boolean; - }; - menus: boolean | MenuConfig; - mode: { - active: string; - statusBar: { - enabled: boolean; - alignment: 'left' | 'right'; - }; - }; - modes: { [key: string]: ModeConfig }; - outputLevel: TraceLevel; - recentChanges: { - highlight: { - locations: HighlightLocations[]; - }; - toggleMode: AnnotationsToggleMode; - }; - remotes: RemotesConfig[]; - showWhatsNewAfterUpgrades: boolean; - statusBar: { - alignment: 'left' | 'right'; - command: StatusBarCommand; - dateFormat: string | null; - enabled: boolean; - format: string; - reduceFlicker: boolean; - }; - strings: { - codeLens: { - unsavedChanges: { - recentChangeAndAuthors: string; - recentChangeOnly: string; - authorsOnly: string; - }; - }; - }; - views: ViewsConfig; - advanced: AdvancedConfig; -} - -export enum AnnotationsToggleMode { - File = 'file', - Window = 'window' -} - -export enum CodeLensCommand { - DiffWithPrevious = 'gitlens.diffWithPrevious', - ShowQuickCommitDetails = 'gitlens.showQuickCommitDetails', - ShowQuickCommitFileDetails = 'gitlens.showQuickCommitFileDetails', - ShowQuickCurrentBranchHistory = 'gitlens.showQuickRepoHistory', - ShowQuickFileHistory = 'gitlens.showQuickFileHistory', - ToggleFileBlame = 'gitlens.toggleFileBlame' -} - -export enum CodeLensScopes { - Document = 'document', - Containers = 'containers', - Blocks = 'blocks' -} - -export enum CustomRemoteType { - Bitbucket = 'Bitbucket', - BitbucketServer = 'BitbucketServer', - Custom = 'Custom', - GitHub = 'GitHub', - GitLab = 'GitLab' -} - -export enum DateStyle { - Absolute = 'absolute', - Relative = 'relative' -} - -export enum FileAnnotationType { - Blame = 'blame', - Heatmap = 'heatmap', - RecentChanges = 'recentChanges' -} - -export enum GravatarDefaultStyle { - Faces = 'wavatar', - Geometric = 'identicon', - Monster = 'monsterid', - MysteryPerson = 'mp', - Retro = 'retro', - Robot = 'robohash' -} - -export enum HighlightLocations { - Gutter = 'gutter', - Line = 'line', - Overview = 'overview' -} - -export enum KeyMap { - Alternate = 'alternate', - Chorded = 'chorded', - None = 'none' -} - -export enum TraceLevel { - Silent = 'silent', - Errors = 'errors', - Verbose = 'verbose', - Debug = 'debug' -} - -export enum StatusBarCommand { - DiffWithPrevious = 'gitlens.diffWithPrevious', - DiffWithWorking = 'gitlens.diffWithWorking', - ShowQuickCommitDetails = 'gitlens.showQuickCommitDetails', - ShowQuickCommitFileDetails = 'gitlens.showQuickCommitFileDetails', - ShowQuickCurrentBranchHistory = 'gitlens.showQuickRepoHistory', - ShowQuickFileHistory = 'gitlens.showQuickFileHistory', - ToggleCodeLens = 'gitlens.toggleCodeLens', - ToggleFileBlame = 'gitlens.toggleFileBlame' -} - -export enum ViewBranchesLayout { - List = 'list', - Tree = 'tree' -} - -export enum ViewFilesLayout { - Auto = 'auto', - List = 'list', - Tree = 'tree' -} - -export interface AdvancedConfig { - abbreviatedShaLength: number; - blame: { - customArguments: string[] | null; - delayAfterEdit: number; - sizeThresholdAfterEdit: number; - }; - caching: { - enabled: boolean; - }; - fileHistoryFollowsRenames: boolean; - maxListItems: number; - messages: { - suppressCommitHasNoPreviousCommitWarning: boolean; - suppressCommitNotFoundWarning: boolean; - suppressFileNotUnderSourceControlWarning: boolean; - suppressGitDisabledWarning: boolean; - suppressGitVersionWarning: boolean; - suppressLineUncommittedWarning: boolean; - suppressNoRepositoryWarning: boolean; - suppressSupportGitLensNotification: boolean; - }; - quickPick: { - closeOnFocusOut: boolean; - }; - repositorySearchDepth: number; - telemetry: { - enabled: boolean; - }; -} - -export interface CodeLensConfig { - authors: { - enabled: boolean; - command: CodeLensCommand; - }; - enabled: boolean; - includeSingleLineSymbols: boolean; - recentChange: { - enabled: boolean; - command: CodeLensCommand; - }; - scopes: CodeLensScopes[]; - scopesByLanguage: CodeLensLanguageScope[]; - symbolScopes: string[]; -} - -export interface CodeLensLanguageScope { - language: string | undefined; - scopes?: CodeLensScopes[]; - symbolScopes?: string[]; -} - -export interface CompareViewConfig { - avatars: boolean; - enabled: boolean; - files: ViewsFilesConfig; - location: 'explorer' | 'gitlens' | 'scm'; -} - -export interface FileHistoryViewConfig { - avatars: boolean; - enabled: boolean; - location: 'explorer' | 'gitlens' | 'scm'; -} - -export interface LineHistoryViewConfig { - avatars: boolean; - enabled: boolean; - location: 'explorer' | 'gitlens' | 'scm'; -} - -export interface MenuConfig { - editor: - | false - | { - blame: boolean; - clipboard: boolean; - compare: boolean; - details: boolean; - history: boolean; - remote: boolean; - }; - editorGroup: - | false - | { - compare: boolean; - history: boolean; - }; - editorTab: - | false - | { - clipboard: boolean; - compare: boolean; - history: boolean; - remote: boolean; - }; - explorer: - | false - | { - clipboard: boolean; - compare: boolean; - history: boolean; - remote: boolean; - }; - scmGroup: - | false - | { - compare: boolean; - openClose: boolean; - stash: boolean; - stashInline: boolean; - }; - scmItem: - | false - | { - clipboard: boolean; - compare: boolean; - history: boolean; - remote: boolean; - stash: boolean; - }; -} - -export interface ModeConfig { - name: string; - statusBarItemName?: string; - description?: string; - annotations?: 'blame' | 'heatmap' | 'recentChanges'; - codeLens?: boolean; - currentLine?: boolean; - hovers?: boolean; - statusBar?: boolean; - views?: boolean; -} - -export interface RemotesConfig { - domain: string; - name?: string; - protocol?: string; - type: CustomRemoteType; - urls?: RemotesUrlsConfig; -} - -export interface RemotesUrlsConfig { - repository: string; - branches: string; - branch: string; - commit: string; - file: string; - fileInBranch: string; - fileInCommit: string; - fileLine: string; - fileRange: string; -} - -export interface RepositoriesViewConfig { - autoRefresh: boolean; - autoReveal: boolean; - avatars: boolean; - branches: { - layout: ViewBranchesLayout; - }; - compact: boolean; - enabled: boolean; - files: ViewsFilesConfig; - includeWorkingTree: boolean; - location: 'explorer' | 'gitlens' | 'scm'; - showTrackingBranch: boolean; -} - -export interface SearchViewConfig { - avatars: boolean; - enabled: boolean; - files: ViewsFilesConfig; - location: 'explorer' | 'gitlens' | 'scm'; -} - -export interface ViewsConfig { - fileHistory: FileHistoryViewConfig; - commitFileDescriptionFormat: string; - commitFileFormat: string; - commitDescriptionFormat: string; - commitFormat: string; - compare: CompareViewConfig; - defaultItemLimit: number; - lineHistory: LineHistoryViewConfig; - repositories: RepositoriesViewConfig; - search: SearchViewConfig; - showRelativeDateMarkers: boolean; - stashFileDescriptionFormat: string; - stashFileFormat: string; - stashDescriptionFormat: string; - stashFormat: string; - statusFileDescriptionFormat: string; - statusFileFormat: string; -} - -export interface ViewsFilesConfig { - compact: boolean; - layout: ViewFilesLayout; - threshold: number; -} diff --git a/src/ui/ipc.ts b/src/ui/ipc.ts index 03902fc..e439ec3 100644 --- a/src/ui/ipc.ts +++ b/src/ui/ipc.ts @@ -1,5 +1,5 @@ 'use strict'; -import { Config } from './config'; +import { Config } from '../config'; export interface Bootstrap { config: Config; diff --git a/tsconfig.json b/tsconfig.json index 277468a..ea6a711 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,17 +3,17 @@ "experimentalDecorators": true, "forceConsistentCasingInFileNames": true, "importHelpers": true, - "lib": ["es2015", "es2016", "es2017"], + "lib": ["es2018"], "module": "esnext", "moduleResolution": "node", "noFallthroughCasesInSwitch": true, "noImplicitReturns": true, "noUnusedLocals": false, "outDir": "dist", - "rootDir": "./src", + "rootDir": "src", "sourceMap": true, "strict": true, - "target": "es2017" + "target": "es2018" }, "exclude": ["node_modules", "test", "src/ui"] } diff --git a/ui.tsconfig.json b/ui.tsconfig.json index b6cea4e..04adffa 100644 --- a/ui.tsconfig.json +++ b/ui.tsconfig.json @@ -1,19 +1,20 @@ { "compilerOptions": { + "experimentalDecorators": true, "forceConsistentCasingInFileNames": true, - "lib": ["dom", "dom.iterable", "es2015", "es2015.iterable", "es2016"], - "module": "es2015", + "lib": ["dom", "dom.iterable", "es2018"], + "module": "esnext", "moduleResolution": "node", "noFallthroughCasesInSwitch": true, "noImplicitReturns": true, "noUnusedLocals": false, "outDir": "dist/ui", - "rootDir": "./src/ui", + "rootDir": "src", "skipLibCheck": true, "sourceMap": true, "strict": true, - "target": "es2016" + "target": "es2018" }, - "include": ["src/ui/**/*"], + "include": ["src/config.ts", "src/ui/**/*"], "exclude": ["node_modules"] } diff --git a/webpack.config.js b/webpack.config.js index 5219e61..c0734a7 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -3,7 +3,9 @@ const fs = require('fs'); const glob = require('glob'); const path = require('path'); const webpack = require('webpack'); +const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; const CleanPlugin = require('clean-webpack-plugin'); +const CircularDependencyPlugin = require('circular-dependency-plugin'); const HtmlInlineSourcePlugin = require('html-webpack-inline-source-plugin'); const HtmlPlugin = require('html-webpack-plugin'); const ImageminPlugin = require('imagemin-webpack-plugin').default; @@ -12,7 +14,9 @@ const TerserPlugin = require('terser-webpack-plugin'); module.exports = function(env, argv) { env = env || {}; - env.production = Boolean(env.production); + env.analyzeBundle = Boolean(env.analyzeBundle); + env.analyzeDeps = Boolean(env.analyzeDeps); + env.production = env.analyzeBundle || Boolean(env.production); env.optimizeImages = env.production || Boolean(env.optimizeImages); if (!env.optimizeImages && !fs.existsSync(path.resolve(__dirname, 'images/settings'))) { @@ -57,6 +61,25 @@ module.exports = function(env, argv) { function getExtensionConfig(env) { const plugins = [new CleanPlugin(['dist'], { verbose: false }), new webpack.IgnorePlugin(/^spawn-sync$/)]; + if (env.analyzeDeps) { + plugins.push( + new CircularDependencyPlugin({ + cwd: __dirname, + exclude: /node_modules/, + failOnError: false, + onDetected({ module: webpackModuleRecord, paths, compilation }) { + if (paths.some(p => /container\.ts/.test(p))) return; + + compilation.warnings.push(new Error(paths.join(' -> '))); + } + }) + ); + } + + if (env.analyzeBundle) { + plugins.push(new BundleAnalyzerPlugin()); + } + return { name: 'extension', entry: './src/extension.ts', @@ -107,7 +130,7 @@ function getExtensionConfig(env) { exprContextCritical: false }, resolve: { - extensions: ['.ts', '.tsx', '.js', '.jsx'] + extensions: ['.ts', '.tsx', '.js', '.jsx', '.json'] }, plugins: plugins, stats: { @@ -258,7 +281,7 @@ function getUIConfig(env) { ] }, resolve: { - extensions: ['.ts', '.tsx', '.js', '.jsx'], + extensions: ['.ts', '.tsx', '.js', '.jsx', '.json'], modules: [path.resolve(__dirname, 'src/ui'), 'node_modules'] }, plugins: plugins,