diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 97a78ad303..e520bbc37a 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -17,6 +17,7 @@ dependencies: '@rush-temp/misk-web-tab-palette-exemplar': file:projects/misk-web-tab-palette-exemplar.tgz '@rush-temp/misk-web-tab-palette-lts': file:projects/misk-web-tab-palette-lts.tgz '@rush-temp/misk-web-tab-starter-basic': file:projects/misk-web-tab-starter-basic.tgz + '@rush-temp/misk-web-tab-template-basic': file:projects/misk-web-tab-template-basic.tgz '@rush-temp/prettier': file:projects/prettier.tgz '@rush-temp/simpleredux': file:projects/simpleredux.tgz '@rush-temp/test': file:projects/test.tgz_react-dom@16.13.1+react@16.13.1 @@ -64,6 +65,7 @@ dependencies: klaw: 3.0.0 lodash: 4.17.21 mini-css-extract-plugin: 0.12.0_webpack@4.43.0 + node-plop: 0.26.2 node-sass: 4.14.1 optimize-css-assets-webpack-plugin: 5.0.8_webpack@4.43.0 pkg: 4.4.8 @@ -92,19 +94,19 @@ dependencies: style-loader: 1.2.1_webpack@4.43.0 styled-components: 4.4.1_react-dom@16.13.1+react@16.13.1 ts-jest: 24.3.0_jest@24.9.0 - ts-loader: 7.0.5_typescript@3.9.9 + ts-loader: 7.0.5_typescript@3.9.10 tslib: 2.3.0 - tslint: 5.20.1_typescript@3.9.9 + tslint: 5.20.1_typescript@3.9.10 tslint-blueprint: 0.1.0 - tslint-clean-code: 0.2.10_tslint@5.20.1+typescript@3.9.9 + tslint-clean-code: 0.2.10_tslint@5.20.1+typescript@3.9.10 tslint-config-prettier: 1.18.0 - tslint-consistent-codestyle: 1.16.0_tslint@5.20.1+typescript@3.9.9 - tslint-eslint-rules: 5.4.0_tslint@5.20.1+typescript@3.9.9 - tslint-immutable: 6.0.1_tslint@5.20.1+typescript@3.9.9 - tslint-react: 4.1.0_tslint@5.20.1+typescript@3.9.9 - tslint-sonarts: 1.9.0_tslint@5.20.1+typescript@3.9.9 - typescript: 3.9.9 - typescript-plugin-styled-components: 1.4.4_typescript@3.9.9 + tslint-consistent-codestyle: 1.16.0_tslint@5.20.1+typescript@3.9.10 + tslint-eslint-rules: 5.4.0_tslint@5.20.1+typescript@3.9.10 + tslint-immutable: 6.0.1_tslint@5.20.1+typescript@3.9.10 + tslint-react: 4.1.0_tslint@5.20.1+typescript@3.9.10 + tslint-sonarts: 1.9.0_tslint@5.20.1+typescript@3.9.10 + typescript: 3.9.10 + typescript-plugin-styled-components: 1.4.4_typescript@3.9.10 webpack: 4.43.0 webpack-bundle-analyzer: 3.7.0 webpack-cli: 3.3.11_webpack@4.43.0 @@ -625,27 +627,27 @@ packages: dev: false resolution: integrity: sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== - /@fimbul/bifrost/0.21.0_tslint@5.20.1+typescript@3.9.9: + /@fimbul/bifrost/0.21.0_tslint@5.20.1+typescript@3.9.10: dependencies: - '@fimbul/ymir': 0.21.0_tsutils@3.21.0+typescript@3.9.9 + '@fimbul/ymir': 0.21.0_tsutils@3.21.0+typescript@3.9.10 get-caller-file: 2.0.5 tslib: 1.13.0 - tslint: 5.20.1_typescript@3.9.9 - tsutils: 3.21.0_typescript@3.9.9 - typescript: 3.9.9 + tslint: 5.20.1_typescript@3.9.10 + tsutils: 3.21.0_typescript@3.9.10 + typescript: 3.9.10 dev: false peerDependencies: tslint: ^5.0.0 typescript: '>= 3.3.0 || >= 3.6.0-dev || >= 3.7.0-dev' resolution: integrity: sha512-ou8VU+nTmOW1jeg+FT+sn+an/M0Xb9G16RucrfhjXGWv1Q97kCoM5CG9Qj7GYOSdu7km72k7nY83Eyr53Bkakg== - /@fimbul/ymir/0.21.0_tsutils@3.21.0+typescript@3.9.9: + /@fimbul/ymir/0.21.0_tsutils@3.21.0+typescript@3.9.10: dependencies: inversify: 5.1.1 reflect-metadata: 0.1.13 tslib: 1.13.0 - tsutils: 3.21.0_typescript@3.9.9 - typescript: 3.9.9 + tsutils: 3.21.0_typescript@3.9.10 + typescript: 3.9.10 dev: false peerDependencies: tsutils: '>=2.29.0' @@ -980,6 +982,10 @@ packages: dev: false resolution: integrity: sha512-Rt4IC1T7xkCWa0OG1oSsPa0iqnxlDeQqKXZAHrQGLb7wFGncWm85MaxKUjAGejOrUynOgWlFi4c6S6IyJwoK4g== + /@types/fined/1.1.3: + dev: false + resolution: + integrity: sha512-CWYnSRnun3CGbt6taXeVo2lCbuaj4mchVJ4UF/BdU5TSuIn3AmS13pGMwCsBUoehGbhZrBrpNJZSZI5EVilXww== /@types/fs-extra/9.0.12: dependencies: '@types/node': 14.17.6 @@ -989,7 +995,7 @@ packages: /@types/glob/7.1.4: dependencies: '@types/minimatch': 3.0.5 - '@types/node': 11.13.1 + '@types/node': 14.17.6 dev: false resolution: integrity: sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA== @@ -1004,6 +1010,19 @@ packages: dev: false resolution: integrity: sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== + /@types/inquirer/6.5.0: + dependencies: + '@types/through': 0.0.30 + rxjs: 6.6.7 + dev: false + resolution: + integrity: sha512-rjaYQ9b9y/VFGOpqBEXRavc3jh0a+e6evAbI31tMda8VlPaSy0AZJfXsvmIe3wklc7W6C3zCSfleuMXR7NOyXw== + /@types/interpret/1.1.1: + dependencies: + '@types/node': 14.17.6 + dev: false + resolution: + integrity: sha512-HZ4d0m2Ebl8DmrOdYZHgYyipj/8Ftq1/ssB/oQR7fqfUrwtTP7IW3BDi2V445nhPBLzZjEkApaPVp83moSCXlA== /@types/istanbul-lib-coverage/2.0.3: dev: false resolution: @@ -1042,6 +1061,14 @@ packages: dev: false resolution: integrity: sha512-acnF3n9mYOr1aFJKFyvfNX0am9EtPUsYPq22QUCGdJE+MVt6UyAN1jwo+PmOPqXD4K7ZS9MtxDEp/un0lxFccA== + /@types/liftoff/2.5.1: + dependencies: + '@types/fined': 1.1.3 + '@types/interpret': 1.1.1 + '@types/node': 14.17.6 + dev: false + resolution: + integrity: sha512-nB3R6Q9CZcM07JgiTK6ibxqrG1reiHE+UX7em/W1DKwVBxDlfKWOefQjk4jubY5xX+GDxVsWR2KD1SenPby8ow== /@types/lodash/4.14.150: dev: false resolution: @@ -1187,6 +1214,12 @@ packages: dev: false resolution: integrity: sha512-mj1aH4cj3XUpMEgVpognma5kHVtbm6U6cHZmEFzCRiXPvKkuHrFr3+yXdGLXvfFRBaQIVshPGHI+hGTOJlhS/g== + /@types/through/0.0.30: + dependencies: + '@types/node': 14.17.6 + dev: false + resolution: + integrity: sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg== /@types/uglify-js/3.13.1: dependencies: source-map: 0.6.1 @@ -1424,6 +1457,15 @@ packages: hasBin: true resolution: integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + /aggregate-error/3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + dev: false + engines: + node: '>=8' + resolution: + integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== /ajv-errors/1.0.1_ajv@6.12.6: dependencies: ajv: 6.12.6 @@ -1471,6 +1513,14 @@ packages: node: '>=4' resolution: integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + /ansi-escapes/4.3.2: + dependencies: + type-fest: 0.21.3 + dev: false + engines: + node: '>=8' + resolution: + integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== /ansi-html/0.0.7: dev: false engines: @@ -1584,6 +1634,12 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + /array-each/1.0.1: + dev: false + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-p5SvDAWrF1KEbudTofIRoFugxE8= /array-equal/1.0.0: dev: false resolution: @@ -1602,6 +1658,12 @@ packages: dev: false resolution: integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + /array-slice/1.1.0: + dev: false + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w== /array-union/1.0.2: dependencies: array-uniq: 1.0.3 @@ -2267,6 +2329,42 @@ packages: node: '>=8' resolution: integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + /chalk/4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: false + engines: + node: '>=10' + resolution: + integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + /change-case/3.1.0: + dependencies: + camel-case: 3.0.0 + constant-case: 2.0.0 + dot-case: 2.1.1 + header-case: 1.0.1 + is-lower-case: 1.1.3 + is-upper-case: 1.1.2 + lower-case: 1.1.4 + lower-case-first: 1.0.2 + no-case: 2.3.2 + param-case: 2.1.1 + pascal-case: 2.0.1 + path-case: 2.1.1 + sentence-case: 2.1.1 + snake-case: 2.1.0 + swap-case: 1.1.2 + title-case: 2.1.1 + upper-case: 1.1.3 + upper-case-first: 1.1.2 + dev: false + resolution: + integrity: sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw== + /chardet/0.7.0: + dev: false + resolution: + integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== /check-types/8.0.3: dev: false resolution: @@ -2350,6 +2448,40 @@ packages: node: '>= 4.0' resolution: integrity: sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== + /clean-stack/2.2.0: + dev: false + engines: + node: '>=6' + resolution: + integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + /cli-cursor/2.1.0: + dependencies: + restore-cursor: 2.0.0 + dev: false + engines: + node: '>=4' + resolution: + integrity: sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + /cli-cursor/3.1.0: + dependencies: + restore-cursor: 3.1.0 + dev: false + engines: + node: '>=8' + resolution: + integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + /cli-spinners/2.6.0: + dev: false + engines: + node: '>=6' + resolution: + integrity: sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q== + /cli-width/3.0.0: + dev: false + engines: + node: '>= 10' + resolution: + integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== /cliui/5.0.0: dependencies: string-width: 3.1.0 @@ -2376,6 +2508,12 @@ packages: node: '>=6' resolution: integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + /clone/1.0.4: + dev: false + engines: + node: '>=0.8' + resolution: + integrity: sha1-2jCcwmPfFZlMaIypAheco8fNfH4= /co/4.6.0: dev: false engines: @@ -2546,6 +2684,13 @@ packages: dev: false resolution: integrity: sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + /constant-case/2.0.0: + dependencies: + snake-case: 2.1.0 + upper-case: 1.1.3 + dev: false + resolution: + integrity: sha1-QXV2TTidP6nI7NKRhu1gBSQ7akY= /constants-browserify/1.0.0: dev: false resolution: @@ -3075,6 +3220,12 @@ packages: node: '>=6' resolution: integrity: sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + /defaults/1.0.3: + dependencies: + clone: 1.0.4 + dev: false + resolution: + integrity: sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= /define-properties/1.1.3: dependencies: object-keys: 1.1.1 @@ -3122,6 +3273,21 @@ packages: node: '>=6' resolution: integrity: sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + /del/5.1.0: + dependencies: + globby: 10.0.2 + graceful-fs: 4.2.6 + is-glob: 4.0.1 + is-path-cwd: 2.2.0 + is-path-inside: 3.0.3 + p-map: 3.0.0 + rimraf: 3.0.2 + slash: 3.0.0 + dev: false + engines: + node: '>=8' + resolution: + integrity: sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA== /delayed-stream/1.0.0: dev: false engines: @@ -3346,6 +3512,12 @@ packages: dev: false resolution: integrity: sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg== + /dot-case/2.1.1: + dependencies: + no-case: 2.3.2 + dev: false + resolution: + integrity: sha1-NNzzf1Co6TwrO8qLt/uRVcfaO+4= /dot-prop/5.3.0: dependencies: is-obj: 2.0.0 @@ -3751,6 +3923,16 @@ packages: dev: false resolution: integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + /external-editor/3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + dev: false + engines: + node: '>=4' + resolution: + integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== /extglob/2.0.4: dependencies: array-unique: 0.3.2 @@ -3837,6 +4019,14 @@ packages: dev: false resolution: integrity: sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + /figures/3.2.0: + dependencies: + escape-string-regexp: 1.0.5 + dev: false + engines: + node: '>=8' + resolution: + integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== /file-loader/6.0.0_webpack@4.43.0: dependencies: loader-utils: 2.0.0 @@ -3933,6 +4123,17 @@ packages: node: '>=8' resolution: integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + /findup-sync/2.0.0: + dependencies: + detect-file: 1.0.0 + is-glob: 3.1.0 + micromatch: 3.1.10 + resolve-dir: 1.0.1 + dev: false + engines: + node: '>= 0.10' + resolution: + integrity: sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw= /findup-sync/3.0.0: dependencies: detect-file: 1.0.0 @@ -3944,6 +4145,24 @@ packages: node: '>= 0.10' resolution: integrity: sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== + /fined/1.2.0: + dependencies: + expand-tilde: 2.0.2 + is-plain-object: 2.0.4 + object.defaults: 1.1.0 + object.pick: 1.3.0 + parse-filepath: 1.0.2 + dev: false + engines: + node: '>= 0.10' + resolution: + integrity: sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng== + /flagged-respawn/1.0.1: + dev: false + engines: + node: '>= 0.10' + resolution: + integrity: sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q== /flush-write-stream/1.1.1: dependencies: inherits: 2.0.4 @@ -3987,6 +4206,14 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + /for-own/1.0.0: + dependencies: + for-in: 1.0.2 + dev: false + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs= /forever-agent/0.6.1: dev: false resolution: @@ -4246,6 +4473,21 @@ packages: node: '>=4' resolution: integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + /globby/10.0.2: + dependencies: + '@types/glob': 7.1.4 + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.2.7 + glob: 7.1.7 + ignore: 5.1.8 + merge2: 1.4.1 + slash: 3.0.0 + dev: false + engines: + node: '>=8' + resolution: + integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== /globby/11.0.4: dependencies: array-union: 2.1.0 @@ -4319,6 +4561,20 @@ packages: dev: false resolution: integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + /handlebars/4.7.7: + dependencies: + minimist: 1.2.5 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + dev: false + engines: + node: '>=0.4.7' + hasBin: true + optionalDependencies: + uglify-js: 3.4.10 + resolution: + integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== /har-schema/2.0.0: dev: false engines: @@ -4434,6 +4690,13 @@ packages: hasBin: true resolution: integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + /header-case/1.0.1: + dependencies: + no-case: 2.3.2 + upper-case: 1.1.3 + dev: false + resolution: + integrity: sha1-lTWXMZfBRLCWE81l0xfvGZY70C0= /hex-color-regex/1.1.0: dev: false resolution: @@ -4760,6 +5023,12 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= + /indent-string/4.0.0: + dev: false + engines: + node: '>=8' + resolution: + integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== /indexes-of/1.0.1: dev: false resolution: @@ -4791,6 +5060,26 @@ packages: dev: false resolution: integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + /inquirer/7.3.3: + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + run-async: 2.4.1 + rxjs: 6.6.7 + string-width: 4.2.2 + strip-ansi: 6.0.0 + through: 2.3.8 + dev: false + engines: + node: '>=8.0.0' + resolution: + integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== /internal-ip/4.3.0: dependencies: default-gateway: 4.2.0 @@ -4865,6 +5154,15 @@ packages: node: '>=8' resolution: integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== + /is-absolute/1.0.0: + dependencies: + is-relative: 1.0.0 + is-windows: 1.0.2 + dev: false + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== /is-accessor-descriptor/0.1.6: dependencies: kind-of: 3.2.2 @@ -5075,6 +5373,12 @@ packages: node: '>=0.10.0' resolution: integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + /is-lower-case/1.1.3: + dependencies: + lower-case: 1.1.4 + dev: false + resolution: + integrity: sha1-fhR75HaNxGbbO/shzGCzHmrWk5M= /is-negative-zero/2.0.1: dev: false engines: @@ -5129,6 +5433,12 @@ packages: node: '>=6' resolution: integrity: sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + /is-path-inside/3.0.3: + dev: false + engines: + node: '>=8' + resolution: + integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== /is-plain-obj/1.1.0: dev: false engines: @@ -5152,6 +5462,14 @@ packages: node: '>= 0.4' resolution: integrity: sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== + /is-relative/1.0.0: + dependencies: + is-unc-path: 1.0.0 + dev: false + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== /is-resolvable/1.1.0: dev: false resolution: @@ -5180,6 +5498,20 @@ packages: dev: false resolution: integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + /is-unc-path/1.0.0: + dependencies: + unc-path-regex: 0.1.2 + dev: false + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== + /is-upper-case/1.1.2: + dependencies: + upper-case: 1.1.3 + dev: false + resolution: + integrity: sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8= /is-utf8/0.2.1: dev: false resolution: @@ -5208,6 +5540,12 @@ packages: dev: false resolution: integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + /isbinaryfile/4.0.8: + dev: false + engines: + node: '>= 8.0.0' + resolution: + integrity: sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w== /isexe/2.0.0: dev: false resolution: @@ -5911,6 +6249,21 @@ packages: node: '>= 0.8.0' resolution: integrity: sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + /liftoff/2.5.0: + dependencies: + extend: 3.0.2 + findup-sync: 2.0.0 + fined: 1.2.0 + flagged-respawn: 1.0.1 + is-plain-object: 2.0.4 + object.map: 1.0.1 + rechoir: 0.6.2 + resolve: 1.20.0 + dev: false + engines: + node: '>= 0.8' + resolution: + integrity: sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew= /lines-and-columns/1.1.6: dev: false resolution: @@ -6000,6 +6353,10 @@ packages: node: '>=8' resolution: integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + /lodash.get/4.4.2: + dev: false + resolution: + integrity: sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= /lodash.memoize/4.1.2: dev: false resolution: @@ -6020,6 +6377,14 @@ packages: dev: false resolution: integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + /log-symbols/2.2.0: + dependencies: + chalk: 2.4.2 + dev: false + engines: + node: '>=4' + resolution: + integrity: sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== /loglevel/1.7.1: dev: false engines: @@ -6042,6 +6407,12 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= + /lower-case-first/1.0.2: + dependencies: + lower-case: 1.1.4 + dev: false + resolution: + integrity: sha1-5dp8JvKacHO+AtUrrJmA5ZIq36E= /lower-case/1.1.4: dev: false resolution: @@ -6072,6 +6443,14 @@ packages: dev: false resolution: integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + /make-iterator/1.0.1: + dependencies: + kind-of: 6.0.3 + dev: false + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw== /makeerror/1.0.11: dependencies: tmpl: 1.0.4 @@ -6270,6 +6649,12 @@ packages: hasBin: true resolution: integrity: sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== + /mimic-fn/1.2.0: + dev: false + engines: + node: '>=4' + resolution: + integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== /mimic-fn/2.1.0: dev: false engines: @@ -6415,6 +6800,10 @@ packages: dev: false resolution: integrity: sha512-xasv76hl6nr1dEy3lPvy7Ej7K/Lx3O/FCvwge8PeVJpciPPoNCbaANcNiBug3IpdvTveZUcAV0DJzdnUDMesNQ== + /mute-stream/0.0.8: + dev: false + resolution: + integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== /nan/2.14.2: dev: false resolution: @@ -6535,6 +6924,24 @@ packages: dev: false resolution: integrity: sha512-tVbHs7DyTLtzOiN78izLA85zRqB9NvEXkAf014Vx3jtSvn/xBl6bR8ZYifj+dFcFrKI21huSQgJZ6ZtL3B4HfQ== + /node-plop/0.26.2: + dependencies: + '@babel/runtime-corejs3': 7.14.8 + '@types/inquirer': 6.5.0 + change-case: 3.1.0 + del: 5.1.0 + globby: 10.0.2 + handlebars: 4.7.7 + inquirer: 7.3.3 + isbinaryfile: 4.0.8 + lodash.get: 4.4.2 + mkdirp: 0.5.5 + resolve: 1.20.0 + dev: false + engines: + node: '>=8.9.4' + resolution: + integrity: sha512-q444beWkMvZwAiYC3BRGJUHgRlpOItQHy+xdy6egXg8KjxDY/Ro309spQTNvH01qK9A8XF6pc0xLKbrHDpxW7w== /node-releases/1.1.73: dev: false resolution: @@ -6713,6 +7120,17 @@ packages: node: '>= 0.4' resolution: integrity: sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + /object.defaults/1.1.0: + dependencies: + array-each: 1.0.1 + array-slice: 1.1.0 + for-own: 1.0.0 + isobject: 3.0.1 + dev: false + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8= /object.getownpropertydescriptors/2.1.2: dependencies: call-bind: 1.0.2 @@ -6723,6 +7141,15 @@ packages: node: '>= 0.8' resolution: integrity: sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== + /object.map/1.0.1: + dependencies: + for-own: 1.0.0 + make-iterator: 1.0.1 + dev: false + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-z4Plncj8wK1fQlDh94s7gb2AHTc= /object.pick/1.3.0: dependencies: isobject: 3.0.1 @@ -6765,6 +7192,22 @@ packages: dev: false resolution: integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + /onetime/2.0.1: + dependencies: + mimic-fn: 1.2.0 + dev: false + engines: + node: '>=4' + resolution: + integrity: sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + /onetime/5.1.2: + dependencies: + mimic-fn: 2.1.0 + dev: false + engines: + node: '>=6' + resolution: + integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== /opener/1.5.2: dev: false hasBin: true @@ -6801,6 +7244,19 @@ packages: node: '>= 0.8.0' resolution: integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + /ora/3.4.0: + dependencies: + chalk: 2.4.2 + cli-cursor: 2.1.0 + cli-spinners: 2.6.0 + log-symbols: 2.2.0 + strip-ansi: 5.2.0 + wcwidth: 1.0.1 + dev: false + engines: + node: '>=6' + resolution: + integrity: sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== /original/1.0.2: dependencies: url-parse: 1.5.1 @@ -6902,6 +7358,14 @@ packages: node: '>=6' resolution: integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + /p-map/3.0.0: + dependencies: + aggregate-error: 3.1.0 + dev: false + engines: + node: '>=8' + resolution: + integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== /p-reduce/1.0.0: dev: false engines: @@ -6962,6 +7426,16 @@ packages: dev: false resolution: integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + /parse-filepath/1.0.2: + dependencies: + is-absolute: 1.0.0 + map-cache: 0.2.2 + path-root: 0.1.1 + dev: false + engines: + node: '>=0.8' + resolution: + integrity: sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE= /parse-json/2.2.0: dependencies: error-ex: 1.3.2 @@ -7006,6 +7480,13 @@ packages: node: '>= 0.8' resolution: integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + /pascal-case/2.0.1: + dependencies: + camel-case: 3.0.0 + upper-case-first: 1.1.2 + dev: false + resolution: + integrity: sha1-LVeNNFX2YNpl7KGO+VtODekSdh4= /pascalcase/0.1.1: dev: false engines: @@ -7016,6 +7497,12 @@ packages: dev: false resolution: integrity: sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + /path-case/2.1.1: + dependencies: + no-case: 2.3.2 + dev: false + resolution: + integrity: sha1-lLgDfDctP+KQbkZbtF4l0ibo7qU= /path-dirname/1.0.2: dev: false resolution: @@ -7066,6 +7553,20 @@ packages: dev: false resolution: integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + /path-root-regex/0.1.2: + dev: false + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0= + /path-root/0.1.1: + dependencies: + path-root-regex: 0.1.2 + dev: false + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc= /path-to-regexp/0.1.7: dev: false resolution: @@ -7206,6 +7707,22 @@ packages: hasBin: true resolution: integrity: sha512-Fqqv0iaX48U3CFZxd6Dq6JKe7BrAWbgRAqMJkz/m8W3H5cqJ6suvsUWe5AJPRlN/AhbBYXBJ0XG9QlYPTXcVFA== + /plop/2.7.1: + dependencies: + '@types/liftoff': 2.5.1 + chalk: 1.1.3 + interpret: 1.4.0 + liftoff: 2.5.0 + minimist: 1.2.5 + node-plop: 0.26.2 + ora: 3.4.0 + v8flags: 2.1.1 + dev: false + engines: + node: '>=8.9.4' + hasBin: true + resolution: + integrity: sha512-2c1CDgi/88AmDNWyQcHILvjFxiyG/nS7CbDUUvzuWdrunW5QUWtQRKJRoITkGNze3ZcpUO9OOGCdh6BxHI+viA== /pn/1.1.0: dev: false resolution: @@ -8313,6 +8830,24 @@ packages: dev: false resolution: integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + /restore-cursor/2.0.0: + dependencies: + onetime: 2.0.1 + signal-exit: 3.0.3 + dev: false + engines: + node: '>=4' + resolution: + integrity: sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + /restore-cursor/3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.3 + dev: false + engines: + node: '>=8' + resolution: + integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== /ret/0.1.15: dev: false engines: @@ -8347,6 +8882,13 @@ packages: hasBin: true resolution: integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + /rimraf/3.0.2: + dependencies: + glob: 7.1.7 + dev: false + hasBin: true + resolution: + integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== /ripemd160/2.0.2: dependencies: hash-base: 3.1.0 @@ -8366,6 +8908,12 @@ packages: node: 6.* || >= 7.* resolution: integrity: sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== + /run-async/2.4.1: + dev: false + engines: + node: '>=0.12.0' + resolution: + integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== /run-parallel/1.2.0: dependencies: queue-microtask: 1.2.3 @@ -8378,6 +8926,14 @@ packages: dev: false resolution: integrity: sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + /rxjs/6.6.7: + dependencies: + tslib: 1.13.0 + dev: false + engines: + npm: '>=2.0.0' + resolution: + integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== /safe-buffer/5.1.2: dev: false resolution: @@ -8548,6 +9104,13 @@ packages: node: '>= 0.8.0' resolution: integrity: sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + /sentence-case/2.1.1: + dependencies: + no-case: 2.3.2 + upper-case-first: 1.1.2 + dev: false + resolution: + integrity: sha1-H24t2jnBaL+S0T+G1KkYkz9mftQ= /serialize-javascript/2.1.2: dev: false resolution: @@ -8709,6 +9272,12 @@ packages: node: '>=8' resolution: integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + /snake-case/2.1.0: + dependencies: + no-case: 2.3.2 + dev: false + resolution: + integrity: sha1-Qb2xtz8w7GagTU4srRt2OH1NbZ8= /snapdragon-node/2.1.1: dependencies: define-property: 1.0.0 @@ -9231,6 +9800,13 @@ packages: hasBin: true resolution: integrity: sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + /swap-case/1.1.2: + dependencies: + lower-case: 1.1.4 + upper-case: 1.1.3 + dev: false + resolution: + integrity: sha1-w5IDpFhzhfrTyFCgvRvK+ggZdOM= /symbol-observable/1.2.0: dev: false engines: @@ -9310,6 +9886,10 @@ packages: dev: false resolution: integrity: sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw= + /through/2.3.8: + dev: false + resolution: + integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= /through2/2.0.5: dependencies: readable-stream: 2.3.7 @@ -9341,6 +9921,21 @@ packages: dev: false resolution: integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + /title-case/2.1.1: + dependencies: + no-case: 2.3.2 + upper-case: 1.1.3 + dev: false + resolution: + integrity: sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o= + /tmp/0.0.33: + dependencies: + os-tmpdir: 1.0.2 + dev: false + engines: + node: '>=0.6.0' + resolution: + integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== /tmpl/1.0.4: dev: false resolution: @@ -9453,14 +10048,14 @@ packages: jest: '>=24 <25' resolution: integrity: sha512-Hb94C/+QRIgjVZlJyiWwouYUF+siNJHJHknyspaOcZ+OQAIdFG/UrdQVXw/0B8Z3No34xkUXZJpOTy9alOWdVQ== - /ts-loader/7.0.5_typescript@3.9.9: + /ts-loader/7.0.5_typescript@3.9.10: dependencies: chalk: 2.4.2 enhanced-resolve: 4.5.0 loader-utils: 1.4.0 micromatch: 4.0.4 semver: 6.3.0 - typescript: 3.9.9 + typescript: 3.9.10 dev: false engines: node: '>=10.0.0' @@ -9492,11 +10087,11 @@ packages: dev: false resolution: integrity: sha1-tbbhyLGNulpFT6eQWsdRFecoSv0= - /tslint-clean-code/0.2.10_tslint@5.20.1+typescript@3.9.9: + /tslint-clean-code/0.2.10_tslint@5.20.1+typescript@3.9.10: dependencies: memoize-decorator: 1.0.2 - tslint: 5.20.1_typescript@3.9.9 - tsutils: 2.7.1_typescript@3.9.9 + tslint: 5.20.1_typescript@3.9.10 + tsutils: 2.7.1_typescript@3.9.10 dev: false peerDependencies: tslint: '>=5.1.0' @@ -9510,59 +10105,59 @@ packages: hasBin: true resolution: integrity: sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg== - /tslint-consistent-codestyle/1.16.0_tslint@5.20.1+typescript@3.9.9: + /tslint-consistent-codestyle/1.16.0_tslint@5.20.1+typescript@3.9.10: dependencies: - '@fimbul/bifrost': 0.21.0_tslint@5.20.1+typescript@3.9.9 + '@fimbul/bifrost': 0.21.0_tslint@5.20.1+typescript@3.9.10 tslib: 1.11.1 - tslint: 5.20.1_typescript@3.9.9 - tsutils: 2.29.0_typescript@3.9.9 - typescript: 3.9.9 + tslint: 5.20.1_typescript@3.9.10 + tsutils: 2.29.0_typescript@3.9.10 + typescript: 3.9.10 dev: false peerDependencies: tslint: ^5.0.0 typescript: '>=2.1.4 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >=3.1.0-dev || >=3.2.0-dev || >=3.3.0-dev || >=3.4.0-dev' resolution: integrity: sha512-ebR/xHyMEuU36hGNOgCfjGBNYxBPixf0yU1Yoo6s3BrpBRFccjPOmIVaVvQsWAUAMdmfzHOCihVkcaMfimqvHw== - /tslint-eslint-rules/5.4.0_tslint@5.20.1+typescript@3.9.9: + /tslint-eslint-rules/5.4.0_tslint@5.20.1+typescript@3.9.10: dependencies: doctrine: 0.7.2 tslib: 1.9.0 - tslint: 5.20.1_typescript@3.9.9 - tsutils: 3.21.0_typescript@3.9.9 - typescript: 3.9.9 + tslint: 5.20.1_typescript@3.9.10 + tsutils: 3.21.0_typescript@3.9.10 + typescript: 3.9.10 dev: false peerDependencies: tslint: ^5.0.0 typescript: ^2.2.0 || ^3.0.0 resolution: integrity: sha512-WlSXE+J2vY/VPgIcqQuijMQiel+UtmXS+4nvK4ZzlDiqBfXse8FAvkNnTcYhnQyOTW5KFM+uRRGXxYhFpuBc6w== - /tslint-immutable/6.0.1_tslint@5.20.1+typescript@3.9.9: + /tslint-immutable/6.0.1_tslint@5.20.1+typescript@3.9.10: dependencies: - tslint: 5.20.1_typescript@3.9.9 - tsutils: 3.21.0_typescript@3.9.9 - typescript: 3.9.9 + tslint: 5.20.1_typescript@3.9.10 + tsutils: 3.21.0_typescript@3.9.10 + typescript: 3.9.10 dev: false peerDependencies: tslint: ^5.8.0 typescript: ^2.8.0 || ^3.0.0 resolution: integrity: sha512-3GQ6HffN64gLmT/N1YzyVMqyf6uBjMvhNaevK8B0K01/QC0OU5AQZrH4TjMHo1IdG3JpqsZvuRy9IW1LA3zjwA== - /tslint-react/4.1.0_tslint@5.20.1+typescript@3.9.9: + /tslint-react/4.1.0_tslint@5.20.1+typescript@3.9.10: dependencies: - tslint: 5.20.1_typescript@3.9.9 - tsutils: 3.21.0_typescript@3.9.9 - typescript: 3.9.9 + tslint: 5.20.1_typescript@3.9.10 + tsutils: 3.21.0_typescript@3.9.10 + typescript: 3.9.10 dev: false peerDependencies: tslint: ^5.1.0 typescript: '>=2.8.0' resolution: integrity: sha512-Y7CbFn09X7Mpg6rc7t/WPbmjx9xPI8p1RsQyiGCLWgDR6sh3+IBSlT+bEkc0PSZcWwClOkqq2wPsID8Vep6szQ== - /tslint-sonarts/1.9.0_tslint@5.20.1+typescript@3.9.9: + /tslint-sonarts/1.9.0_tslint@5.20.1+typescript@3.9.10: dependencies: immutable: 3.8.2 - tslint: 5.20.1_typescript@3.9.9 - typescript: 3.9.9 + tslint: 5.20.1_typescript@3.9.10 + typescript: 3.9.10 deprecated: Package no longer supported. Consider using eslint-plugin-sonarjs. dev: false engines: @@ -9573,7 +10168,7 @@ packages: typescript: ^2.2 || ^3.0 resolution: integrity: sha512-CJWt+IiYI8qggb2O/JPkS6CkC5DY1IcqRsm9EHJ+AxoWK70lvtP7jguochyNDMP2vIz/giGdWCfEM39x/I/Vnw== - /tslint/5.20.1_typescript@3.9.9: + /tslint/5.20.1_typescript@3.9.10: dependencies: '@babel/code-frame': 7.14.5 builtin-modules: 1.1.1 @@ -9587,8 +10182,8 @@ packages: resolve: 1.20.0 semver: 5.7.1 tslib: 1.11.1 - tsutils: 2.29.0_typescript@3.9.9 - typescript: 3.9.9 + tsutils: 2.29.0_typescript@3.9.10 + typescript: 3.9.10 dev: false engines: node: '>=4.8.0' @@ -9597,28 +10192,28 @@ packages: typescript: '>=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev' resolution: integrity: sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg== - /tsutils/2.29.0_typescript@3.9.9: + /tsutils/2.29.0_typescript@3.9.10: dependencies: tslib: 1.13.0 - typescript: 3.9.9 + typescript: 3.9.10 dev: false peerDependencies: typescript: '>=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev' resolution: integrity: sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== - /tsutils/2.7.1_typescript@3.9.9: + /tsutils/2.7.1_typescript@3.9.10: dependencies: tslib: 1.13.0 - typescript: 3.9.9 + typescript: 3.9.10 dev: false peerDependencies: typescript: '>=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >= 2.4.0-dev || >= 2.5.0-dev || >= 2.6.0-dev' resolution: integrity: sha1-QRoOlGZSWisoaSYKVWINcpIVXiQ= - /tsutils/3.21.0_typescript@3.9.9: + /tsutils/3.21.0_typescript@3.9.10: dependencies: tslib: 1.13.0 - typescript: 3.9.9 + typescript: 3.9.10 dev: false engines: node: '>= 6' @@ -9648,6 +10243,12 @@ packages: node: '>= 0.8.0' resolution: integrity: sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + /type-fest/0.21.3: + dev: false + engines: + node: '>=10' + resolution: + integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== /type-is/1.6.18: dependencies: media-typer: 0.3.0 @@ -9675,9 +10276,9 @@ packages: dev: false resolution: integrity: sha512-zXFars5LUkI3zP492ls0VskH3TtdeHCqu0i7/duGt60i5IGPIpAHE/DWo5FqJ6EjQ15YKXrt+AETjv60Dat34Q== - /typescript-plugin-styled-components/1.4.4_typescript@3.9.9: + /typescript-plugin-styled-components/1.4.4_typescript@3.9.10: dependencies: - typescript: 3.9.9 + typescript: 3.9.10 dev: false peerDependencies: typescript: ^2.5.2 || ^3.0 @@ -9689,13 +10290,13 @@ packages: dev: false resolution: integrity: sha512-Zcr0lbt8z5ZdEzERHAMAniTiIKerFCMgd7yjq1fPnDJ43et/k9twIFQMUYff9k5oXcsQ0WpvFcgzK2ZKASoW6Q== - /typescript/3.9.9: + /typescript/3.9.10: dev: false engines: node: '>=4.2.0' hasBin: true resolution: - integrity: sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w== + integrity: sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== /uglify-js/3.4.10: dependencies: commander: 2.19.0 @@ -9719,6 +10320,12 @@ packages: dev: false resolution: integrity: sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + /unc-path-regex/0.1.2: + dev: false + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-5z3T17DXxe2G+6xrCufYxqadUPo= /union-value/1.0.1: dependencies: arr-union: 3.1.0 @@ -9797,6 +10404,12 @@ packages: node: '>=4' resolution: integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + /upper-case-first/1.1.2: + dependencies: + upper-case: 1.1.3 + dev: false + resolution: + integrity: sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU= /upper-case/1.1.3: dev: false resolution: @@ -9832,6 +10445,13 @@ packages: node: '>=0.10.0' resolution: integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + /user-home/1.1.1: + dev: false + engines: + node: '>=0.10.0' + hasBin: true + resolution: + integrity: sha1-K1viOjK2Onyd640PKNSFcko98ZA= /util-deprecate/1.0.2: dev: false resolution: @@ -9894,6 +10514,14 @@ packages: dev: false resolution: integrity: sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w== + /v8flags/2.1.1: + dependencies: + user-home: 1.1.1 + dev: false + engines: + node: '>= 0.10.0' + resolution: + integrity: sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ= /validate-npm-package-license/3.0.4: dependencies: spdx-correct: 3.1.1 @@ -9974,6 +10602,12 @@ packages: dev: false resolution: integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + /wcwidth/1.0.1: + dependencies: + defaults: 1.0.3 + dev: false + resolution: + integrity: sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= /webidl-conversions/4.0.2: dev: false resolution: @@ -10230,6 +10864,10 @@ packages: node: '>=0.10.0' resolution: integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + /wordwrap/1.0.0: + dev: false + resolution: + integrity: sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= /worker-farm/1.7.0: dependencies: errno: 0.1.8 @@ -10398,14 +11036,16 @@ packages: jest-serializer-html: 7.1.0 klaw: 3.0.0 lodash: 4.17.21 + node-plop: 0.26.2 pkg: 4.4.8 + plop: 2.7.1 prettier: 1.19.1 progress: 2.0.3 root-require: 0.3.1 shelljs: 0.8.3 ts-jest: 24.3.0_jest@24.9.0 tslib: 2.3.0 - typescript: 3.9.9 + typescript: 3.9.10 yargs: 15.3.1 dev: false id: file:projects/cli.tgz @@ -10414,7 +11054,7 @@ packages: react: '*' react-dom: '*' resolution: - integrity: sha512-iBXtap0v2vGWy5JXFLlEo6PJkAhJrGcBF/udpFOh3t97ffXX4niFzATNT11zvLssMa/17/L8zkL8hgmps2PLDw== + integrity: sha512-4Pvc4vbGqZ5f31BNFmCvEtZzIO6/8jxyTKa0n25VZYPpq/pVe8cQmnkArlZ1twuAey4fSURwClMd77oUY7CVuw== tarball: file:projects/cli.tgz version: 0.0.0 file:projects/common.tgz: @@ -10480,10 +11120,10 @@ packages: status-code-enum: 1.0.0 style-loader: 1.2.1_webpack@4.43.0 styled-components: 4.4.1_react-dom@16.13.1+react@16.13.1 - ts-loader: 7.0.5_typescript@3.9.9 + ts-loader: 7.0.5_typescript@3.9.10 tslib: 2.3.0 - typescript: 3.9.9 - typescript-plugin-styled-components: 1.4.4_typescript@3.9.9 + typescript: 3.9.10 + typescript-plugin-styled-components: 1.4.4_typescript@3.9.10 webpack: 4.43.0 webpack-bundle-analyzer: 3.7.0 webpack-cli: 3.3.11_webpack@4.43.0 @@ -10492,7 +11132,7 @@ packages: dev: false name: '@rush-temp/common' resolution: - integrity: sha512-uj/kheBo4+K/n20mrzVNY/zKSGdZs4Jdv2bDvEBzf4TmcgXE6iUOFg0eEYYkhqhOcj0CqAaGkDvfqCAAzZ4LAA== + integrity: sha512-AeQzZLlr9DAy80dKcjmdW80dDwIBVm6xvfbhlWO1AONu9ng/vakb3ZYQFEdfW/zFU3dHKHlJloNbPoQPJCJelA== tarball: file:projects/common.tgz version: 0.0.0 file:projects/core.tgz: @@ -10564,9 +11204,9 @@ packages: status-code-enum: 1.0.0 style-loader: 1.2.1_webpack@4.43.0 ts-jest: 24.3.0_jest@24.9.0 - ts-loader: 7.0.5_typescript@3.9.9 + ts-loader: 7.0.5_typescript@3.9.10 tslib: 2.3.0 - typescript: 3.9.9 + typescript: 3.9.10 webpack: 4.43.0 webpack-bundle-analyzer: 3.7.0 webpack-cli: 3.3.11_webpack@4.43.0 @@ -10575,7 +11215,7 @@ packages: dev: false name: '@rush-temp/core' resolution: - integrity: sha512-m4hoCP0p8ehmoKngoHXblOVVnv2j819IjpkfEu8oPKqyGto8MDeNiD8my2jejM96xNNPlhh+br7gsg/Ee+zpEA== + integrity: sha512-sBA6bxuKcSjCeX8uFc8rQR+kX39zhFbE6yrHbho0Rpvs5p7nmISvULTHM7TGjz/bjFSmI/6gqpFy+LJDp8qSGw== tarball: file:projects/core.tgz version: 0.0.0 file:projects/dev.tgz: @@ -10609,10 +11249,10 @@ packages: sass-loader: 8.0.2_56fe2a874e892cdce65d322b2f761424 source-map-loader: 0.2.4 style-loader: 1.2.1_webpack@4.43.0 - ts-loader: 7.0.5_typescript@3.9.9 + ts-loader: 7.0.5_typescript@3.9.10 tslib: 2.3.0 - typescript: 3.9.9 - typescript-plugin-styled-components: 1.4.4_typescript@3.9.9 + typescript: 3.9.10 + typescript-plugin-styled-components: 1.4.4_typescript@3.9.10 webpack: 4.43.0 webpack-bundle-analyzer: 3.7.0 webpack-cli: 3.3.11_webpack@4.43.0 @@ -10621,7 +11261,7 @@ packages: dev: false name: '@rush-temp/dev' resolution: - integrity: sha512-QttPSbnxYsUXrWWA43pgiT6WqTyIynflvn1dQ8iOQRg27ENkl9r/KJOxllVCTP2vxqbOxFyc/dVO77KlXyLKfw== + integrity: sha512-vkmCXa/c4aadb+Z6VN2zOTPugh8CukVy+X6Kad63USHwkoEWyRfuQmeNWTyaie3gSAjD+Nkq4BCOoKCl0ON6sQ== tarball: file:projects/dev.tgz version: 0.0.0 file:projects/misk-web-examples-data.tgz: @@ -10633,11 +11273,11 @@ packages: fs-extra: 9.1.0 prettier: 1.19.1 tslib: 2.3.0 - typescript: 3.9.9 + typescript: 3.9.10 dev: false name: '@rush-temp/misk-web-examples-data' resolution: - integrity: sha512-sBcRAmxzCNXG205yJ0laAdeoVfRWYyB98FabXEXkmpLitV+/Z6oUwFS0cY+TC9fFwDdYwmX/8maDl92yXcQGCw== + integrity: sha512-X4gx7Asm3BGrTA1lBs7QXXzB37+bcZ92Ym6Q5Jdp62t4BPx+lMqgCWQilU9zCLjygxmIUN+tURrOEXtGPqNVDQ== tarball: file:projects/misk-web-examples-data.tgz version: 0.0.0 file:projects/misk-web-tab-dashboard.tgz: @@ -10706,10 +11346,10 @@ packages: style-loader: 1.2.1_webpack@4.43.0 styled-components: 4.4.1_react-dom@16.13.1+react@16.13.1 ts-jest: 24.3.0_jest@24.9.0 - ts-loader: 7.0.5_typescript@3.9.9 + ts-loader: 7.0.5_typescript@3.9.10 tslib: 2.3.0 - typescript: 3.9.9 - typescript-plugin-styled-components: 1.4.4_typescript@3.9.9 + typescript: 3.9.10 + typescript-plugin-styled-components: 1.4.4_typescript@3.9.10 webpack: 4.43.0 webpack-bundle-analyzer: 3.7.0 webpack-cli: 3.3.11_webpack@4.43.0 @@ -10718,7 +11358,7 @@ packages: dev: false name: '@rush-temp/misk-web-tab-dashboard' resolution: - integrity: sha512-Mw0U/dPFuYif0/+6HXLGGJuY7tkQ2Zy5kiUoaHUfRBCJZNocmE020+ByodFnEo5EXyhcHTgvC+q0iCGvw4eC1Q== + integrity: sha512-sxyq+E7aFXAXG7yT24eqmEQSceo00z9OzlvIvRoTrOJJNr7B0hxfaRVtbAYfHVtXLWnpci1mWmKLzfhO++t8SQ== tarball: file:projects/misk-web-tab-dashboard.tgz version: 0.0.0 file:projects/misk-web-tab-palette-exemplar.tgz: @@ -10790,10 +11430,10 @@ packages: style-loader: 1.2.1_webpack@4.43.0 styled-components: 4.4.1_react-dom@16.13.1+react@16.13.1 ts-jest: 24.3.0_jest@24.9.0 - ts-loader: 7.0.5_typescript@3.9.9 + ts-loader: 7.0.5_typescript@3.9.10 tslib: 2.3.0 - typescript: 3.9.9 - typescript-plugin-styled-components: 1.4.4_typescript@3.9.9 + typescript: 3.9.10 + typescript-plugin-styled-components: 1.4.4_typescript@3.9.10 webpack: 4.43.0 webpack-bundle-analyzer: 3.7.0 webpack-cli: 3.3.11_webpack@4.43.0 @@ -10802,7 +11442,7 @@ packages: dev: false name: '@rush-temp/misk-web-tab-palette-exemplar' resolution: - integrity: sha512-2+d1tevm00bgqgc231iyCq0S6DP/S/2MdWx+pk6NMdlep7gW+U89KjdU0KUGBB9/2OOK/R9HSyhXjrc9d6C/wA== + integrity: sha512-9g2clKZwKfJhF4KAiQiOGWpw58FENe4zOQgIguv9ia2tjuv0dfpSxTtI1zjQgaTNA+9kEbbL6vFNs1QtRL5IbA== tarball: file:projects/misk-web-tab-palette-exemplar.tgz version: 0.0.0 file:projects/misk-web-tab-palette-lts.tgz: @@ -10873,10 +11513,10 @@ packages: style-loader: 1.2.1_webpack@4.43.0 styled-components: 4.4.1_react-dom@16.13.1+react@16.13.1 ts-jest: 24.3.0_jest@24.9.0 - ts-loader: 7.0.5_typescript@3.9.9 + ts-loader: 7.0.5_typescript@3.9.10 tslib: 2.3.0 - typescript: 3.9.9 - typescript-plugin-styled-components: 1.4.4_typescript@3.9.9 + typescript: 3.9.10 + typescript-plugin-styled-components: 1.4.4_typescript@3.9.10 webpack: 4.43.0 webpack-bundle-analyzer: 3.7.0 webpack-cli: 3.3.11_webpack@4.43.0 @@ -10885,7 +11525,7 @@ packages: dev: false name: '@rush-temp/misk-web-tab-palette-lts' resolution: - integrity: sha512-ldeeeQWdEiSdAJqJf/F33cCnHZKtiWDyR86Pp68qlTYWaKr4joQwLrC9sYiJfO6TZiXj5bnQxG6xke8BXkRRbw== + integrity: sha512-6lgMlO3rPTjbg7X90uyDj2vy11Ea8mSOoTGNSBOQlSVV3IyemG13ku5ketczSP/OeJzILmx81Xab7lpeKgPW5g== tarball: file:projects/misk-web-tab-palette-lts.tgz version: 0.0.0 file:projects/misk-web-tab-starter-basic.tgz: @@ -10957,10 +11597,10 @@ packages: style-loader: 1.2.1_webpack@4.43.0 styled-components: 4.4.1_react-dom@16.13.1+react@16.13.1 ts-jest: 24.3.0_jest@24.9.0 - ts-loader: 7.0.5_typescript@3.9.9 + ts-loader: 7.0.5_typescript@3.9.10 tslib: 2.3.0 - typescript: 3.9.9 - typescript-plugin-styled-components: 1.4.4_typescript@3.9.9 + typescript: 3.9.10 + typescript-plugin-styled-components: 1.4.4_typescript@3.9.10 webpack: 4.43.0 webpack-bundle-analyzer: 3.7.0 webpack-cli: 3.3.11_webpack@4.43.0 @@ -10969,9 +11609,93 @@ packages: dev: false name: '@rush-temp/misk-web-tab-starter-basic' resolution: - integrity: sha512-qSdBbsz+5RvEulJz35BzVn0QFy61cGnV8lROsdt7QT9MYusK85i44kTHA4QClelu6Z7zFvg0piZiVx/pHpyYgA== + integrity: sha512-FN/+D+TyJ9TcYiuRomiFT2Bi4PINHIL7CWRR1VqbeDCZ1ifCKb5JZPSLMYIexI30iuv04VyhDJap8+azyuEchw== tarball: file:projects/misk-web-tab-starter-basic.tgz version: 0.0.0 + file:projects/misk-web-tab-template-basic.tgz: + dependencies: + '@blueprintjs/core': 3.19.1_react-dom@16.13.1+react@16.13.1 + '@blueprintjs/datetime': 3.13.0_react-dom@16.13.1+react@16.13.1 + '@blueprintjs/icons': 3.13.0 + '@blueprintjs/select': 3.16.6_react-dom@16.13.1+react@16.13.1 + '@blueprintjs/table': 3.9.0_react-dom@16.13.1+react@16.13.1 + '@blueprintjs/timezone': 3.9.6_react-dom@16.13.1+react@16.13.1 + '@redux-saga/core': 1.1.3 + '@testing-library/dom': 7.2.2 + '@testing-library/react': 9.1.1_react-dom@16.13.1+react@16.13.1 + '@types/history': 4.7.5 + '@types/jest': 25.2.3 + '@types/lodash': 4.14.150 + '@types/node': 14.17.6 + '@types/react': 16.14.11 + '@types/react-dom': 16.9.14 + '@types/react-helmet': 6.0.0 + '@types/react-hot-loader': 4.1.0 + '@types/react-redux': 7.1.8 + '@types/react-router': 5.1.7 + '@types/react-router-dom': 5.1.5 + '@types/styled-components': 4.4.3 + '@types/webpack': 4.41.13 + '@types/webpack-env': 1.15.2 + axios: 0.21.1 + connected-react-router: 6.6.1_6c0e8a7b503a8d2f33d3b08b31746841 + copy-webpack-plugin: 5.1.1_webpack@4.43.0 + cross-env: 7.0.2 + css-loader: 3.5.3_webpack@4.43.0 + dayjs: 1.8.26 + enum-utils: 1.0.0 + fibers: 5.0.0 + file-loader: 6.0.0_webpack@4.43.0 + history: 4.10.1 + html-parser: 0.11.0 + html-webpack-harddisk-plugin: 1.0.1_4bdb23e17c1669cd6b8d9492b9e85ea2 + html-webpack-plugin: 3.2.0_webpack@4.43.0 + http-method-enum: 1.0.0 + immutable: 4.0.0-rc.12 + jest: 24.9.0 + jest-emotion: 10.0.14 + jest-serializer-html: 7.1.0 + lodash: 4.17.21 + mini-css-extract-plugin: 0.12.0_webpack@4.43.0 + node-sass: 4.14.1 + optimize-css-assets-webpack-plugin: 5.0.8_webpack@4.43.0 + prettier: 1.19.1 + prop-types: 15.7.2 + re-reselect: 3.4.0_reselect@4.0.0 + react: 16.13.1 + react-dom: 16.13.1_react@16.13.1 + react-helmet: 6.0.0_react@16.13.1 + react-hot-loader: 4.12.21_908e8ddad1684ce94377a11dbc674611 + react-redux: 7.2.0_49f644e2f7de4182503f8b93abece808 + react-router: 5.2.0_react@16.13.1 + react-router-dom: 5.2.0_react@16.13.1 + react-transition-group: 4.4.1_react-dom@16.13.1+react@16.13.1 + redux: 4.0.5 + redux-saga: 1.1.3 + reselect: 4.0.0 + sass: 1.36.0 + sass-loader: 8.0.2_56fe2a874e892cdce65d322b2f761424 + skeleton-css: 2.0.4 + source-map-loader: 0.2.4 + status-code-enum: 1.0.0 + style-loader: 1.2.1_webpack@4.43.0 + styled-components: 4.4.1_react-dom@16.13.1+react@16.13.1 + ts-jest: 24.3.0_jest@24.9.0 + ts-loader: 7.0.5_typescript@3.9.10 + tslib: 2.3.0 + typescript: 3.9.10 + typescript-plugin-styled-components: 1.4.4_typescript@3.9.10 + webpack: 4.43.0 + webpack-bundle-analyzer: 3.7.0 + webpack-cli: 3.3.11_webpack@4.43.0 + webpack-dev-server: 3.11.0_6bb071789035dbb53b131cf2ad63510b + webpack-merge: 4.2.2 + dev: false + name: '@rush-temp/misk-web-tab-template-basic' + resolution: + integrity: sha512-m3BJvz7QLpcS+rsYLU95kYdqM9ftjHh0AAayQ9bbSZlJQHAyYT1TRXFiIFJSrvuEh5ql+OZkW0n0dzWubKysmQ== + tarball: file:projects/misk-web-tab-template-basic.tgz + version: 0.0.0 file:projects/prettier.tgz: dependencies: prettier: 1.19.1 @@ -11049,10 +11773,10 @@ packages: style-loader: 1.2.1_webpack@4.43.0 styled-components: 4.4.1_react-dom@16.13.1+react@16.13.1 ts-jest: 24.3.0_jest@24.9.0 - ts-loader: 7.0.5_typescript@3.9.9 + ts-loader: 7.0.5_typescript@3.9.10 tslib: 2.3.0 - typescript: 3.9.9 - typescript-plugin-styled-components: 1.4.4_typescript@3.9.9 + typescript: 3.9.10 + typescript-plugin-styled-components: 1.4.4_typescript@3.9.10 webpack: 4.43.0 webpack-bundle-analyzer: 3.7.0 webpack-cli: 3.3.11_webpack@4.43.0 @@ -11061,7 +11785,7 @@ packages: dev: false name: '@rush-temp/simpleredux' resolution: - integrity: sha512-Eb6S3QKL/E28/vUE0ieWZOATBM0izj0UYWlRITlKQXCrsemTxsEhJBAmlPmueJf5Bg421aXZNyA7ia1EQrl6gg== + integrity: sha512-cD0VYstsxVcis+4GE+TyZ2rZxdgWTee0U3zrnxrXg0RbYodynate7235cdkPbX3ken6+3OT93r9GJTddpuvO3g== tarball: file:projects/simpleredux.tgz version: 0.0.0 file:projects/test.tgz_react-dom@16.13.1+react@16.13.1: @@ -11075,7 +11799,7 @@ packages: jest-serializer-html: 7.1.0 ts-jest: 24.3.0_jest@24.9.0 tslib: 2.3.0 - typescript: 3.9.9 + typescript: 3.9.10 dev: false id: file:projects/test.tgz name: '@rush-temp/test' @@ -11083,25 +11807,25 @@ packages: react: '*' react-dom: '*' resolution: - integrity: sha512-vyoZgDFIFdadpTrqh23/c6zCLbWd7/KqRT1Vb/+xIQEl6LVFrncKuEGOSeUoLZzt+CbUXk8YPqA43DBwbP9DvQ== + integrity: sha512-2QQsuTOPVIzuZnAIN077nIbNQC9oOkdtt0vBY9mnYUbd9yD5FNi+6Vr8sGF4pCCBemZ+308EEZYl5RQngXm/Eg== tarball: file:projects/test.tgz version: 0.0.0 file:projects/tslint.tgz: dependencies: - tslint: 5.20.1_typescript@3.9.9 + tslint: 5.20.1_typescript@3.9.10 tslint-blueprint: 0.1.0 - tslint-clean-code: 0.2.10_tslint@5.20.1+typescript@3.9.9 + tslint-clean-code: 0.2.10_tslint@5.20.1+typescript@3.9.10 tslint-config-prettier: 1.18.0 - tslint-consistent-codestyle: 1.16.0_tslint@5.20.1+typescript@3.9.9 - tslint-eslint-rules: 5.4.0_tslint@5.20.1+typescript@3.9.9 - tslint-immutable: 6.0.1_tslint@5.20.1+typescript@3.9.9 - tslint-react: 4.1.0_tslint@5.20.1+typescript@3.9.9 - tslint-sonarts: 1.9.0_tslint@5.20.1+typescript@3.9.9 - typescript: 3.9.9 + tslint-consistent-codestyle: 1.16.0_tslint@5.20.1+typescript@3.9.10 + tslint-eslint-rules: 5.4.0_tslint@5.20.1+typescript@3.9.10 + tslint-immutable: 6.0.1_tslint@5.20.1+typescript@3.9.10 + tslint-react: 4.1.0_tslint@5.20.1+typescript@3.9.10 + tslint-sonarts: 1.9.0_tslint@5.20.1+typescript@3.9.10 + typescript: 3.9.10 dev: false name: '@rush-temp/tslint' resolution: - integrity: sha512-zQcLlcMIKurAaM3lMCjNoss4fulWVW4TE4mRR1tcINw94b0ZNwgilDsJz78l7AbVBS0JJaftdYF4R5T1FSVz/g== + integrity: sha512-MUVP5g/U3u1dvzMn3ApKXu5d/bB9O9jLMwU8yFIvoRArxRjG8+Oz4kHLgOnoZKa88vTEp9tX3eTHxosfntnAEA== tarball: file:projects/tslint.tgz version: 0.0.0 specifiers: @@ -11123,6 +11847,7 @@ specifiers: '@rush-temp/misk-web-tab-palette-exemplar': file:./projects/misk-web-tab-palette-exemplar.tgz '@rush-temp/misk-web-tab-palette-lts': file:./projects/misk-web-tab-palette-lts.tgz '@rush-temp/misk-web-tab-starter-basic': file:./projects/misk-web-tab-starter-basic.tgz + '@rush-temp/misk-web-tab-template-basic': file:./projects/misk-web-tab-template-basic.tgz '@rush-temp/prettier': file:./projects/prettier.tgz '@rush-temp/simpleredux': file:./projects/simpleredux.tgz '@rush-temp/test': file:./projects/test.tgz @@ -11170,6 +11895,7 @@ specifiers: klaw: 3.0.0 lodash: 4.17.21 mini-css-extract-plugin: 0.12.0 + node-plop: 0.26.2 node-sass: 4.14.1 optimize-css-assets-webpack-plugin: 5.0.8 pkg: 4.4.8 @@ -11209,7 +11935,7 @@ specifiers: tslint-immutable: 6.0.1 tslint-react: 4.1.0 tslint-sonarts: 1.9.0 - typescript: 3.9.9 + typescript: 3.9.10 typescript-plugin-styled-components: 1.4.4 webpack: 4.43.0 webpack-bundle-analyzer: 3.7.0 diff --git a/examples/tabs/starter-basic/starter-basic.tgz b/examples/tabs/starter-basic/starter-basic.tgz index 11aa727f86..debb430fa4 100644 Binary files a/examples/tabs/starter-basic/starter-basic.tgz and b/examples/tabs/starter-basic/starter-basic.tgz differ diff --git a/packages/@misk/cli/package.json b/packages/@misk/cli/package.json index 9ce0fbf3e5..2c1dd59f7a 100644 --- a/packages/@misk/cli/package.json +++ b/packages/@misk/cli/package.json @@ -10,7 +10,9 @@ }, "files": [ "lib", - "miskweb" + "miskweb", + "plopfile.js", + "plop-templates" ], "engines": { "node": ">= 0.2.0" @@ -39,6 +41,7 @@ "fs-extra": "9.1.0", "klaw": "3.0.0", "lodash": "4.17.21", + "node-plop": "0.26.2", "pkg": "4.4.8", "prettier": "1.19.1", "progress": "2.0.3", @@ -71,7 +74,7 @@ "transform": { "^.+\\.tsx?$": "ts-jest" }, - "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(tsx?|jsx?)$", + "testRegex": "cli/tests/.*(/__tests__/.*|\\.(test|spec))\\.(tsx?|jsx?)$", "moduleFileExtensions": [ "ts", "tsx", diff --git a/packages/@misk/cli/plop-templates/basic/.gitignore b/packages/@misk/cli/plop-templates/basic/.gitignore new file mode 100644 index 0000000000..dbbcc33250 --- /dev/null +++ b/packages/@misk/cli/plop-templates/basic/.gitignore @@ -0,0 +1,22 @@ +.git +.DS_Store +**/@misk/web +cachedUrls +logs +*.log +npm-debug.log* +coverage +node_modules +.npm +build +dist +lib +.hash +.old_build_files +prettier.config.js +tsconfig.json +tslint.json +webpack.config.js +*.js.map + +// Generated by @misk/cli. diff --git a/packages/@misk/cli/plop-templates/basic/miskTab.json b/packages/@misk/cli/plop-templates/basic/miskTab.json new file mode 100644 index 0000000000..0e1ee47d04 --- /dev/null +++ b/packages/@misk/cli/plop-templates/basic/miskTab.json @@ -0,0 +1,18 @@ +{ + "name": "{{titleCaseName}}", + "output_path": "lib/web/_tab/template-basic", + "port": "3150", + "rawGitginore": "", + "rawIndex": false, + "rawPackageJson": {}, + "rawTsconfig": {}, + "rawTslint": {}, + "rawWebpackConfig": {}, + "relative_path_prefix": "", + "slug": "template-basic", + "useWebpackBundleAnalyzer": false, + "useWebpackExternals": true, + "version": "0.3.0", + "zipOnBuild": false, + "___DeprecatedKeys": "Any keys below this point in your miskTab.json are deprecated and can be safely removed." +} diff --git a/packages/@misk/cli/plop-templates/basic/package.json b/packages/@misk/cli/plop-templates/basic/package.json new file mode 100644 index 0000000000..0d8a4c28ac --- /dev/null +++ b/packages/@misk/cli/plop-templates/basic/package.json @@ -0,0 +1,133 @@ +{ + "name": "misk-web-tab-template-basic", + "version": "0.3.0", + "license": "SEE LICENSE IN https://github.com/cashapp/misk-web", + "main": "src/index.tsx", + "scripts": { + "build": "npm run-script prebuild && npm run-script lib && npm run-script test ", + "ci-build": "npm install && npm run-script clean && npm run-script prebuild && cross-env NODE_ENV=production npm run-script lib && npm run-script test ", + "dev-build": "npm run-script dev-lib ", + "clean": "rm -rf demo lib", + "clean-build-files": "rm .hash package-lock.json package.json tsconfig.json tslint.json webpack.config.js", + "lib": "cross-env NODE_ENV=production webpack", + "dev-lib": "cross-env NODE_ENV=development webpack", + "lint": "prettier --write --config package.json \".{/src/**/,/}*.{md,css,scss,less,json,js,jsx,ts,tsx}\"", + "prebuild": "miskweb prebuild && npm run-script lint", + "reinstall": "rm -rf node_modules && npm run-script install", + "start": "npm run-script prebuild && cross-env NODE_ENV=development webpack-dev-server", + "test": "jest --passWithNoTests --maxWorkers=2", + "zip": "tar --exclude='.gitignore' --exclude='.old_build_files' --exclude='package.json' --exclude='package-lock.json' --exclude='prettier.config.js' --exclude='tsconfig.json' --exclude='tslint.json' --exclude='webpack.config.js' --exclude='yarn.lock' --exclude='demo' --exclude='lib' --exclude='.DS_Store' --exclude='*.log' --exclude='node_modules' --exclude='template-basic.tgz' -czvf template-basic.tgz ./" + }, + "dependencies": { + "@misk/cli": "0.3.0", + "@misk/common": "0.3.0", + "@misk/core": "0.3.0", + "@misk/simpleredux": "0.3.0", + "@blueprintjs/core": "3.19.1", + "@blueprintjs/datetime": "3.13.0", + "@blueprintjs/icons": "3.13.0", + "@blueprintjs/select": "3.16.6", + "@blueprintjs/table": "3.9.0", + "@blueprintjs/timezone": "3.9.6", + "@redux-saga/core": "1.1.3", + "axios": "0.21.1", + "connected-react-router": "6.6.1", + "dayjs": "1.8.26", + "enum-utils": "1.0.0", + "history": "4.10.1", + "http-method-enum": "1.0.0", + "immutable": "4.0.0-rc.12", + "lodash": "4.17.21", + "react": "16.13.1", + "react-dom": "16.13.1", + "react-helmet": "6.0.0", + "react-hot-loader": "4.12.21", + "react-redux": "7.2.0", + "react-router": "5.2.0", + "react-router-dom": "5.2.0", + "react-transition-group": "4.4.1", + "redux": "4.0.5", + "redux-saga": "1.1.3", + "reselect": "4.0.0", + "re-reselect": "3.4.0", + "skeleton-css": "2.0.4", + "status-code-enum": "1.0.0", + "styled-components": "4.4.1" + }, + "devDependencies": { + "@misk/dev": "0.3.0", + "@misk/prettier": "0.3.0", + "@misk/test": "0.3.0", + "jest-emotion": "10.0.14", + "@misk/tslint": "0.3.0", + "@testing-library/dom": "7.2.2", + "@testing-library/react": "9.1.1", + "@types/history": "4.7.5", + "@types/jest": "25.2.3", + "@types/lodash": "4.14.150", + "@types/node": "14.17.6", + "@types/react": "16.14.11", + "@types/react-dom": "16.9.14", + "@types/react-helmet": "6.0.0", + "@types/react-hot-loader": "4.1.0", + "@types/react-redux": "7.1.8", + "@types/react-router": "5.1.7", + "@types/react-router-dom": "5.1.5", + "@types/styled-components": "4.4.3", + "@types/webpack": "4.41.13", + "@types/webpack-env": "1.15.2", + "copy-webpack-plugin": "5.1.1", + "cross-env": "7.0.2", + "css-loader": "3.5.3", + "fibers": "5.0.0", + "file-loader": "6.0.0", + "html-parser": "0.11.0", + "html-webpack-harddisk-plugin": "1.0.1", + "html-webpack-plugin": "3.2.0", + "jest": "24.9.0", + "jest-serializer-html": "7.1.0", + "mini-css-extract-plugin": "0.12.0", + "optimize-css-assets-webpack-plugin": "5.0.8", + "node-sass": "4.14.1", + "prettier": "1.19.1", + "prop-types": "15.7.2", + "sass": "1.36.0", + "sass-loader": "8.0.2", + "source-map-loader": "0.2.4", + "style-loader": "1.2.1", + "ts-jest": "24.3.0", + "ts-loader": "7.0.5", + "tslib": "2.3.0", + "typescript": "3.9.10", + "typescript-plugin-styled-components": "1.4.4", + "webpack": "4.43.0", + "webpack-cli": "3.3.11", + "webpack-bundle-analyzer": "3.7.0", + "webpack-dev-server": "3.11.0", + "webpack-merge": "4.2.2" + }, + "jest": { + "testEnvironment": "jsdom", + "snapshotSerializers": [ + "jest-serializer-html", + "jest-emotion" + ], + "transform": { + "^.+\\.tsx?$": "ts-jest" + }, + "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(tsx?|jsx?)$", + "moduleFileExtensions": [ + "ts", + "tsx", + "js", + "json", + "jsx" + ], + "moduleNameMapper": { + "^src(.*)$": "/src/$1", + "^tests(.*)$": "/tests/$1" + } + }, + "prettier": "@misk/prettier", + "generated": "// Generated by @misk/cli." +} diff --git a/packages/@misk/cli/plop-templates/basic/src/components/HowToComponent.tsx b/packages/@misk/cli/plop-templates/basic/src/components/HowToComponent.tsx new file mode 100644 index 0000000000..83dcac0ac2 --- /dev/null +++ b/packages/@misk/cli/plop-templates/basic/src/components/HowToComponent.tsx @@ -0,0 +1,34 @@ +import { H1, H3 } from "@blueprintjs/core" +import * as React from "react" +export const HowToComponent = () => { + return ( +
+

Welcome to your new Misk-Web tab!

+

+ Take a look around! There are some{" "} + + pure components and connected containers + + , examples of form fields, and network requests. +

+

+ For larger examples, check out the{" "} + + palette-exemplar tab in Misk-Web repo + + , or play around with the palette-exemplar demo in the{" "} + + docs + + . +

+

+ Good luck building on Misk-Web! See the{" "} + docs or{" "} + repo to learn more. +

+
+ ) +} + +export default HowToComponent diff --git a/packages/@misk/cli/plop-templates/basic/src/components/index.ts b/packages/@misk/cli/plop-templates/basic/src/components/index.ts new file mode 100644 index 0000000000..86c87cdadb --- /dev/null +++ b/packages/@misk/cli/plop-templates/basic/src/components/index.ts @@ -0,0 +1,2 @@ +import HowToComponent from "./HowToComponent" +export { HowToComponent } diff --git a/packages/@misk/cli/plop-templates/basic/src/containers/LoadDataFormContainer.tsx b/packages/@misk/cli/plop-templates/basic/src/containers/LoadDataFormContainer.tsx new file mode 100644 index 0000000000..a7bab1c03a --- /dev/null +++ b/packages/@misk/cli/plop-templates/basic/src/containers/LoadDataFormContainer.tsx @@ -0,0 +1,86 @@ +import { Button, FormGroup, Intent, InputGroup } from "@blueprintjs/core" +import { + handler, + mergeSagaMapKeysToTags, + simpleSelectorGet +} from "@misk/simpleredux" +import * as React from "react" +import { connect } from "react-redux" +import { + IDispatchProps, + IState, + mapDispatchToProps, + mapStateToProps +} from "src/ducks" + +interface OwnProps { + tag: string +} + +export const LoadDataFormContainer = ( + props: IState & IDispatchProps & OwnProps +) => { + const { tag } = props + const seedData = { + key: "cars", + range: [50, 75], + url: "https://cashapp.github.io/misk-web/examples/data/demo/cars.json" + } + const keyTagLookup = { + key: `${tag}::dataKey`, + range: `${tag}::dataRange`, + url: `${tag}::dataUrl` + } + return ( +
+ +
+ ) +} + +export default connect( + mapStateToProps, + mapDispatchToProps +)(LoadDataFormContainer) diff --git a/packages/@misk/cli/plop-templates/basic/src/containers/LoadDataTableContainer.tsx b/packages/@misk/cli/plop-templates/basic/src/containers/LoadDataTableContainer.tsx new file mode 100644 index 0000000000..f5c019c412 --- /dev/null +++ b/packages/@misk/cli/plop-templates/basic/src/containers/LoadDataTableContainer.tsx @@ -0,0 +1,71 @@ +import { Intent, ProgressBar, RangeSlider } from "@blueprintjs/core" +import { Table } from "@misk/core" +import { simpleSelectorGet, handler } from "@misk/simpleredux" +import * as React from "react" +import { connect } from "react-redux" +import { + IDispatchProps, + IState, + mapDispatchToProps, + mapStateToProps +} from "src/ducks" + +interface OwnProps { + tag: string +} + +export const LoadDataTableContainer = ( + props: IState & IDispatchProps & OwnProps +) => { + const { tag } = props + const responseData = simpleSelectorGet( + props.simpleRedux, + [ + `${tag}::dataRequest`, + "data", + simpleSelectorGet(props.simpleRedux, [`${tag}::dataKey`, "data"]) + ], + [] + ) + const responseDataLength = responseData.length + const labelStepSize = Math.max(1, Math.round(responseDataLength / 25)) + return ( +
+ {responseDataLength == 0 ? ( + + ) : ( + + )} + + + + ) +} + +export default connect( + mapStateToProps, + mapDispatchToProps +)(LoadDataTableContainer) diff --git a/packages/@misk/cli/plop-templates/basic/src/containers/TabContainer.tsx b/packages/@misk/cli/plop-templates/basic/src/containers/TabContainer.tsx new file mode 100644 index 0000000000..775370c328 --- /dev/null +++ b/packages/@misk/cli/plop-templates/basic/src/containers/TabContainer.tsx @@ -0,0 +1,23 @@ +import * as React from "react" +import { connect } from "react-redux" +import { HowToComponent } from "src/components" +import { LoadDataFormContainer, LoadDataTableContainer } from "src/containers" +import { + IDispatchProps, + IState, + mapDispatchToProps, + mapStateToProps +} from "src/ducks" + +const TabContainer = (props: IState & IDispatchProps) => { + const tag = "LoadData" + return ( +
+ + + +
+ ) +} + +export default connect(mapStateToProps, mapDispatchToProps)(TabContainer) diff --git a/packages/@misk/cli/plop-templates/basic/src/containers/index.ts b/packages/@misk/cli/plop-templates/basic/src/containers/index.ts new file mode 100644 index 0000000000..04b15bea67 --- /dev/null +++ b/packages/@misk/cli/plop-templates/basic/src/containers/index.ts @@ -0,0 +1,4 @@ +import LoadDataFormContainer from "./LoadDataFormContainer" +import LoadDataTableContainer from "./LoadDataTableContainer" +import TabContainer from "./TabContainer" +export { LoadDataFormContainer, LoadDataTableContainer, TabContainer } diff --git a/packages/@misk/cli/plop-templates/basic/src/ducks/index.ts b/packages/@misk/cli/plop-templates/basic/src/ducks/index.ts new file mode 100644 index 0000000000..75e49c68a6 --- /dev/null +++ b/packages/@misk/cli/plop-templates/basic/src/ducks/index.ts @@ -0,0 +1,74 @@ +import { + IRouterProvidedProps, + SimpleReduxSaga, + simpleRootSelector, + ISimpleReduxState, + dispatchSimpleRedux, + IDispatchSimpleRedux, + ISimpleReduxImmutableState, + SimpleReduxReducer, + watchSimpleReduxSagas +} from "@misk/simpleredux" +import { + connectRouter, + LocationChangeAction, + RouterState +} from "connected-react-router" +import { History } from "history" +import { AnyAction, combineReducers, Reducer } from "redux" +import { all, fork } from "redux-saga/effects" + +/** + * Redux Store State + */ +export interface IState { + router: Reducer + simpleRedux: ISimpleReduxState +} + +/** + * Dispatcher + */ +export interface IDispatchProps + extends IDispatchSimpleRedux, + IRouterProvidedProps {} + +export const rootDispatcher: IDispatchProps = { + ...dispatchSimpleRedux +} + +/** + * State Selectors + */ +export const rootSelectors = (state: IState) => ({ + router: state.router, + simpleRedux: simpleRootSelector( + "simpleRedux", + state + ) +}) + +/** + * Reducers + */ +export const rootReducer = (history: History): Reducer => + combineReducers({ + router: connectRouter(history), + simpleRedux: SimpleReduxReducer + }) + +/** + * Sagas + */ +export function* rootSaga(): SimpleReduxSaga { + yield all([fork(watchSimpleReduxSagas)]) +} + +/** + * Map Dispatch/State to Props + */ +export const mapStateToProps = (state: IState) => rootSelectors(state) + +export const mapDispatchToProps: IDispatchProps = { + ...rootDispatcher +} diff --git a/packages/@misk/cli/plop-templates/basic/src/index.html b/packages/@misk/cli/plop-templates/basic/src/index.html new file mode 100644 index 0000000000..e58fc07246 --- /dev/null +++ b/packages/@misk/cli/plop-templates/basic/src/index.html @@ -0,0 +1,23 @@ + + + + + + + + + + +
+ + + + + + + + + + + + diff --git a/packages/@misk/cli/plop-templates/basic/src/index.tsx b/packages/@misk/cli/plop-templates/basic/src/index.tsx new file mode 100644 index 0000000000..18ac278665 --- /dev/null +++ b/packages/@misk/cli/plop-templates/basic/src/index.tsx @@ -0,0 +1,7 @@ +import { createApp, createIndex } from "@misk/core" +import * as Ducks from "./ducks" +import routes from "./routes" +export * from "./components" +export * from "./containers" + +createIndex("{{name}}", createApp(routes), Ducks) diff --git a/packages/@misk/cli/plop-templates/basic/src/routes/index.tsx b/packages/@misk/cli/plop-templates/basic/src/routes/index.tsx new file mode 100644 index 0000000000..067fc6ca59 --- /dev/null +++ b/packages/@misk/cli/plop-templates/basic/src/routes/index.tsx @@ -0,0 +1,15 @@ +import * as React from "react" +import { Route, Switch } from "react-router" +import { TabContainer } from "src/containers" + +const routes = ( +
+ + + {/* Do not include a Route without a path or it will display during on all tabs */} + + +
+) + +export default routes diff --git a/packages/@misk/cli/plop-templates/basic/src/static/.gitkeep b/packages/@misk/cli/plop-templates/basic/src/static/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/@misk/cli/plop-templates/basic/tests/components/HowToComponent.test.tsx b/packages/@misk/cli/plop-templates/basic/tests/components/HowToComponent.test.tsx new file mode 100644 index 0000000000..fa0a77bc00 --- /dev/null +++ b/packages/@misk/cli/plop-templates/basic/tests/components/HowToComponent.test.tsx @@ -0,0 +1,11 @@ +import React from "react" +import { cleanup, render } from "@testing-library/react" +import { HowToComponent } from "src/components" + +describe("HowToComponent", () => { + afterEach(cleanup) + it("HowToComponent can render", () => { + const { asFragment } = render() + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/packages/@misk/cli/plop-templates/basic/tests/components/__snapshots__/HowToComponent.test.tsx.snap b/packages/@misk/cli/plop-templates/basic/tests/components/__snapshots__/HowToComponent.test.tsx.snap new file mode 100644 index 0000000000..09ff76572d --- /dev/null +++ b/packages/@misk/cli/plop-templates/basic/tests/components/__snapshots__/HowToComponent.test.tsx.snap @@ -0,0 +1,54 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`HowToComponent HowToComponent can render 1`] = ` + +
+

+ Welcome to your new Misk-Web tab! +

+

+ Take a look around! There are some + + pure components and connected containers + + , examples of form fields, and network requests. +

+

+ For larger examples, check out the + + palette-exemplar tab in Misk-Web repo + + , or play around with the palette-exemplar demo in the + + docs + + . +

+

+ Good luck building on Misk-Web! See the + + docs + + or + + repo + + to learn more. +

+
+
+`; diff --git a/packages/@misk/cli/plop-templates/basic/tests/containers/LoadDataFormContainer.test.tsx b/packages/@misk/cli/plop-templates/basic/tests/containers/LoadDataFormContainer.test.tsx new file mode 100644 index 0000000000..7bf9e94e18 --- /dev/null +++ b/packages/@misk/cli/plop-templates/basic/tests/containers/LoadDataFormContainer.test.tsx @@ -0,0 +1,22 @@ +import React from "react" +import { cleanup } from "@testing-library/react" +import { LoadDataFormContainer } from "src/containers" +import { renderWithRedux } from "../upstreamableTestUtilities" +import { stateWithData } from "./testFixtures" + +describe("LoadDataFormContainer", () => { + afterEach(cleanup) + it("LoadDataFormContainer can render with redux", () => { + const { asFragment } = renderWithRedux( + + ) + expect(asFragment()).toMatchSnapshot() + }) + it("LoadDataFormContainer can render with data", () => { + const { asFragment } = renderWithRedux( + , + stateWithData + ) + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/packages/@misk/cli/plop-templates/basic/tests/containers/LoadDataTableContainer.test.tsx b/packages/@misk/cli/plop-templates/basic/tests/containers/LoadDataTableContainer.test.tsx new file mode 100644 index 0000000000..0c54b3b276 --- /dev/null +++ b/packages/@misk/cli/plop-templates/basic/tests/containers/LoadDataTableContainer.test.tsx @@ -0,0 +1,22 @@ +import React from "react" +import { cleanup } from "@testing-library/react" +import { LoadDataTableContainer } from "src/containers" +import { renderWithRedux } from "../upstreamableTestUtilities" +import { stateWithData } from "./testFixtures" + +describe("LoadDataTableContainer", () => { + afterEach(cleanup) + it("LoadDataTableContainer can render with redux", () => { + const { asFragment } = renderWithRedux( + + ) + expect(asFragment()).toMatchSnapshot() + }) + it("LoadDataTableContainer can render with data", () => { + const { asFragment } = renderWithRedux( + , + stateWithData + ) + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/packages/@misk/cli/plop-templates/basic/tests/containers/TabContainer.test.tsx b/packages/@misk/cli/plop-templates/basic/tests/containers/TabContainer.test.tsx new file mode 100644 index 0000000000..5303f95733 --- /dev/null +++ b/packages/@misk/cli/plop-templates/basic/tests/containers/TabContainer.test.tsx @@ -0,0 +1,12 @@ +import React from "react" +import { cleanup } from "@testing-library/react" +import { TabContainer } from "src/containers" +import { renderWithRedux } from "../upstreamableTestUtilities" + +describe("TabContainer", () => { + afterEach(cleanup) + it("TabContainer can render with redux", () => { + const { asFragment } = renderWithRedux() + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/packages/@misk/cli/plop-templates/basic/tests/containers/__snapshots__/LoadDataFormContainer.test.tsx.snap b/packages/@misk/cli/plop-templates/basic/tests/containers/__snapshots__/LoadDataFormContainer.test.tsx.snap new file mode 100644 index 0000000000..db0d2a66a7 --- /dev/null +++ b/packages/@misk/cli/plop-templates/basic/tests/containers/__snapshots__/LoadDataFormContainer.test.tsx.snap @@ -0,0 +1,115 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`LoadDataFormContainer LoadDataFormContainer can render with data 1`] = ` + +
+
+
+ +
+ +
+
+ +
+ +
+
+
+
+`; + +exports[`LoadDataFormContainer LoadDataFormContainer can render with redux 1`] = ` + +
+
+
+ +
+ +
+
+ +
+ +
+
+
+
+`; diff --git a/packages/@misk/cli/plop-templates/basic/tests/containers/__snapshots__/LoadDataTableContainer.test.tsx.snap b/packages/@misk/cli/plop-templates/basic/tests/containers/__snapshots__/LoadDataTableContainer.test.tsx.snap new file mode 100644 index 0000000000..26c1a41f2a --- /dev/null +++ b/packages/@misk/cli/plop-templates/basic/tests/containers/__snapshots__/LoadDataTableContainer.test.tsx.snap @@ -0,0 +1,193 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`LoadDataTableContainer LoadDataTableContainer can render with data 1`] = ` + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + +
+

+ lorem ipsum 1234 5678 +

+
+

+ lorem ipsum 1234 5678 +

+
+

+ lorem ipsum 1234 5678 +

+
+

+ lorem ipsum 1234 5678 +

+
+

+ lorem ipsum 1234 5678 +

+
+

+ lorem ipsum 1234 5678 +

+
+

+ lorem ipsum 1234 5678 +

+
+

+ lorem ipsum 1234 5678 +

+
+

+ lorem ipsum 1234 5678 +

+
+

+ lorem ipsum 1234 5678 +

+
+
+ +`; + +exports[`LoadDataTableContainer LoadDataTableContainer can render with redux 1`] = ` + +
+
+
+
+ + + + + + + + + + + + + + + + + + + +
+

+ lorem ipsum 1234 5678 +

+
+

+ lorem ipsum 1234 5678 +

+
+

+ lorem ipsum 1234 5678 +

+
+

+ lorem ipsum 1234 5678 +

+
+

+ lorem ipsum 1234 5678 +

+
+

+ lorem ipsum 1234 5678 +

+
+

+ lorem ipsum 1234 5678 +

+
+

+ lorem ipsum 1234 5678 +

+
+

+ lorem ipsum 1234 5678 +

+
+

+ lorem ipsum 1234 5678 +

+
+
+ +`; diff --git a/packages/@misk/cli/plop-templates/basic/tests/containers/__snapshots__/TabContainer.test.tsx.snap b/packages/@misk/cli/plop-templates/basic/tests/containers/__snapshots__/TabContainer.test.tsx.snap new file mode 100644 index 0000000000..324266e2c6 --- /dev/null +++ b/packages/@misk/cli/plop-templates/basic/tests/containers/__snapshots__/TabContainer.test.tsx.snap @@ -0,0 +1,199 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`TabContainer TabContainer can render with redux 1`] = ` + +
+
+

+ Welcome to your new Misk-Web tab! +

+

+ Take a look around! There are some + + pure components and connected containers + + , examples of form fields, and network requests. +

+

+ For larger examples, check out the + + palette-exemplar tab in Misk-Web repo + + , or play around with the palette-exemplar demo in the + + docs + + . +

+

+ Good luck building on Misk-Web! See the + + docs + + or + + repo + + to learn more. +

+
+
+
+
+ +
+ +
+
+ +
+ +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + +
+

+ lorem ipsum 1234 5678 +

+
+

+ lorem ipsum 1234 5678 +

+
+

+ lorem ipsum 1234 5678 +

+
+

+ lorem ipsum 1234 5678 +

+
+

+ lorem ipsum 1234 5678 +

+
+

+ lorem ipsum 1234 5678 +

+
+

+ lorem ipsum 1234 5678 +

+
+

+ lorem ipsum 1234 5678 +

+
+

+ lorem ipsum 1234 5678 +

+
+

+ lorem ipsum 1234 5678 +

+
+
+
+ +`; diff --git a/packages/@misk/cli/plop-templates/basic/tests/containers/testFixtures.ts b/packages/@misk/cli/plop-templates/basic/tests/containers/testFixtures.ts new file mode 100644 index 0000000000..42f7a05437 --- /dev/null +++ b/packages/@misk/cli/plop-templates/basic/tests/containers/testFixtures.ts @@ -0,0 +1,231 @@ +export const stateWithData = { + simpleRedux: { + success: false, + "LoadData::dataRange": { + data: 5, + error: null as any, + loading: false, + success: true, + tag: "LoadData::dataRange" + }, + "LoadData::dataKey": { + data: "cars", + error: null as any, + loading: false, + success: true, + tag: "LoadData::dataKey" + }, + simpleTag: "simpleRedux", + error: null as any, + data: [] as any[], + "LoadData::dataRequest": { + error: null as any, + loading: false, + success: true, + tag: "LoadData::dataRequest", + url: "https://cashapp.github.io/misk-web/examples/data/demo/cars.json", + data: { + data: { + cars: [ + { + id: "26f7ab1f-4060-497c-9a7e-a772c2bc1e50", + make: "Buick", + model: "LaCrosse", + model_year: 2011, + quantity: 41, + price: "€21530,26", + slogan: "Integrated even-keeled array", + latitude: 41.3006835, + longitude: -8.4787949, + manufactured_date: "4/17/2018", + created_at: "3:19:26.000", + updated_at: "6:44:28.000" + }, + { + id: "2545bae7-dcf7-4082-ad9c-9e68a68d579a", + make: "Oldsmobile", + model: "Silhouette", + model_year: 2003, + quantity: 18, + price: "$25266.44", + slogan: "Horizontal exuding framework", + latitude: 46.1854516, + longitude: 30.3414908, + manufactured_date: "3/21/2018", + created_at: "15:11:57.000", + updated_at: "13:07:56.000" + }, + { + id: "2f0909dd-1298-4469-ac86-e96269009ee8", + make: "Mercedes-Benz", + model: "Sprinter 3500", + model_year: 2011, + quantity: 88, + price: "¥36824.84", + slogan: "Ameliorated human-resource neural-net", + latitude: 14.5975238, + longitude: -91.7270911, + manufactured_date: "4/15/2018", + created_at: "9:55:18.000", + updated_at: "2:45:01.000" + }, + { + id: "e76594d6-e59c-4cec-ae98-560a41b7066e", + make: "Ford", + model: "Mustang", + model_year: 2007, + quantity: 65, + price: "$24100.94", + slogan: "Seamless needs-based policy", + latitude: 31.129098, + longitude: 120.839842, + manufactured_date: "4/4/2018", + created_at: "5:22:24.000", + updated_at: "14:04:49.000" + }, + { + id: "a4145f72-a953-4c1d-8cdd-1b4dd9fc7e1a", + make: "Lexus", + model: "GX", + model_year: 2008, + quantity: 73, + price: "$8585.63", + slogan: "User-centric 24/7 attitude", + latitude: -20.5360441, + longitude: 29.2814687, + manufactured_date: "11/11/2018", + created_at: "4:55:37.000", + updated_at: "5:22:04.000" + }, + { + id: "90688155-b258-408b-b5af-d1631101a119", + make: "Audi", + model: "RS 4", + model_year: 2008, + quantity: 3, + price: "$19244.95", + slogan: "Open-source methodical knowledge user", + latitude: -8.6852273, + longitude: 120.409835, + manufactured_date: "5/29/2018", + created_at: "11:54:06.000", + updated_at: "20:53:58.000" + }, + { + id: "6faa8d74-ef65-4e9b-bcf3-410ec10da3ac", + make: "Lexus", + model: "RX", + model_year: 2009, + quantity: 53, + price: "$2814.21", + slogan: "Upgradable composite algorithm", + latitude: -7.7018672, + longitude: 112.548349, + manufactured_date: "1/6/2018", + created_at: "12:56:58.000", + updated_at: "21:59:14.000" + }, + { + id: "4d833b1c-dc83-4063-ba80-7aacf0cde31a", + make: "Lexus", + model: "LX", + model_year: 2007, + quantity: 31, + price: "€14548,97", + slogan: "Managed 4th generation contingency", + latitude: 36.5072263, + longitude: 8.7756556, + manufactured_date: "2/21/2018", + created_at: "20:19:37.000", + updated_at: "2:32:30.000" + }, + { + id: "639dbc68-9d99-4670-a6ac-8154b1b8f502", + make: "Mercedes-Benz", + model: "CL-Class", + model_year: 2002, + quantity: 37, + price: "$5261.36", + slogan: "Business-focused clear-thinking adapter", + latitude: 51.2250373, + longitude: 22.7850797, + manufactured_date: "3/10/2018", + created_at: "19:02:30.000", + updated_at: "3:21:01.000" + }, + { + id: "e1373313-621c-4802-861a-2a31866aa558", + make: "Land Rover", + model: "LR2", + model_year: 2008, + quantity: 24, + price: "€22533,33", + slogan: "Future-proofed multi-tasking implementation", + latitude: 32.51, + longitude: -93.75, + manufactured_date: "10/6/2018", + created_at: "4:16:15.000", + updated_at: "20:45:56.000" + }, + { + id: "c1c223fd-f94d-40b8-bb2f-8c5353c0dcad", + make: "Maserati", + model: "Biturbo", + model_year: 1986, + quantity: 82, + price: "£28339.94", + slogan: "Organized full-range neural-net", + latitude: 54.1439356, + longitude: 39.7408655, + manufactured_date: "9/17/2018", + created_at: "13:19:14.000", + updated_at: "15:36:30.000" + }, + { + id: "993d4d22-aef6-4ec7-95f2-951e7f5fb92d", + make: "Kia", + model: "Sorento", + model_year: 2005, + quantity: 71, + price: "£14042.57", + slogan: "Exclusive 4th generation instruction set", + latitude: "49.44998", + longitude: "-112.65185", + manufactured_date: "6/26/2018", + created_at: "21:27:54.000", + updated_at: "12:55:31.000" + }, + { + id: "4593210b-7227-4f01-be44-0e8ea068d5bb", + make: "Toyota", + model: "Venza", + model_year: 2010, + quantity: 17, + price: "£36747.51", + slogan: "Synchronised global functionalities", + latitude: 49.5962241, + longitude: 19.1332531, + manufactured_date: "4/13/2018", + created_at: "12:37:15.000", + updated_at: "5:07:23.000" + }, + { + id: "14595c44-5b06-4d89-9298-690c48f250ae", + make: "Hyundai", + model: "Sonata", + model_year: 1995, + quantity: 60, + price: "£28214.33", + slogan: "Decentralized modular data-warehouse", + latitude: 44.889488, + longitude: 117.470597, + manufactured_date: "5/9/2018", + created_at: "1:07:05.000", + updated_at: "19:40:37.000" + } + ] + } + } + } + } +} diff --git a/packages/@misk/cli/plop-templates/basic/tests/upstreamableTestUtilities.tsx b/packages/@misk/cli/plop-templates/basic/tests/upstreamableTestUtilities.tsx new file mode 100644 index 0000000000..a1b20b8849 --- /dev/null +++ b/packages/@misk/cli/plop-templates/basic/tests/upstreamableTestUtilities.tsx @@ -0,0 +1,38 @@ +import { createBrowserHistory } from "history" +import React from "react" +import { Provider } from "react-redux" +import { render } from "@testing-library/react" +import { createStore } from "redux" +import { rootReducer } from "src/ducks" + +// this is a handy function that I normally make available for all my tests +// that deal with connected components. +// you can provide initialState or the entire store that the ui is rendered with +export const renderWithRedux: ( + ui: React.ReactElement< + any, + | string + | (( + props: any + ) => React.ReactElement< + any, + string | (new (props: any) => React.Component) + >) + | (new (props: any) => React.Component) + >, + { initialState, store }?: any +) => any = ( + ui, + { + initialState, + store = createStore(rootReducer(createBrowserHistory()), initialState) + }: any = {} +) => { + return { + ...render({ui}), + // adding `store` to the returned utilities to allow us + // to reference it in our tests (just try to avoid using + // this to test implementation details). + store + } +} diff --git a/packages/@misk/cli/plopfile.js b/packages/@misk/cli/plopfile.js new file mode 100644 index 0000000000..b4e12e8f94 --- /dev/null +++ b/packages/@misk/cli/plopfile.js @@ -0,0 +1,36 @@ +module.exports = function (plop) { + // controller generator + plop.setGenerator('basic', { + description: 'New basic misk-web tab', + prompts: [{ + type: 'new', + name: 'new', + message: 'unused' + },{ + type: 'input', + name: 'titleCaseName', + message: 'New tab name, in title case' + },{ + type: 'input', + name: 'name', + message: 'New tab name, in slug case' + }], + actions: [{ + type: 'addMany', + destination: '{{name}}/', + base: 'plop-templates/basic/', + templateFiles: [ + 'plop-templates/basic/.gitignore', + 'plop-templates/basic/miskTab.json', + 'plop-templates/basic/package.json', + 'plop-templates/basic/src/**/*', + 'plop-templates/basic/tests/**/*', + ], + transform: (s, data) => { + // Handlebars handles most of these, but need to have a valid package name + // to test the template project, so do a custom find-and-replace here. + return s.replace("template-basic", data.name) + } + }] + }); +}; diff --git a/packages/@misk/cli/src/commands/new.ts b/packages/@misk/cli/src/commands/new.ts index 591a90024e..270473b480 100644 --- a/packages/@misk/cli/src/commands/new.ts +++ b/packages/@misk/cli/src/commands/new.ts @@ -1,23 +1,28 @@ -import { execute, handleCommand, logDebug, parseArgs } from "../utils" +import nodePlop from "node-plop" +import { handleCommand, logDebug, parseArgs } from "../utils" + export const command = "new " export const desc = 'create a new tab in the current directory\n title space case name of new tab, surround with quotes (ex. "Alpha Bravo")\n slug case name of new tab, surround with quotes (ex. "alpha-bravo")\n' export const handlerFn = async (...args: any) => { const cmd = "new" const { rawArgs } = parseArgs(...args) - - logDebug(cmd, desc) - execute( - "curl -s https://raw.githubusercontent.com/cashapp/misk-web/master/new-tab/get-new-tab.sh | bash -s", - ...args - ) - const { titleCase, slugCase } = rawArgs[0] - logDebug(cmd, "New tab being created with") - logDebug(cmd, `title: ${titleCase}`) - logDebug(cmd, `slug: ${slugCase}`) - execute(`./new-tab-starter-basic.sh "${titleCase}" "${slugCase}"`) + logDebug(cmd, desc) + + const plop = nodePlop("plopfile.js") + const generator = plop.getGenerator("basic"); + generator.runActions({ + // This isn't needed (we can title-case a name ourselves), but keeps the command's behaviour the + // same. This should be removed in a future version. + titleCaseName: titleCase, + name: slugCase + }).then(value => { + console.info(value.changes, value.failures) + }).catch(error => { + console.error(error) + }) } export const handler = async (yargs: any) => handleCommand(yargs, handlerFn, ["e", "each"]) diff --git a/rush.json b/rush.json index 4b708563a8..80c24c1c65 100644 --- a/rush.json +++ b/rush.json @@ -303,6 +303,12 @@ "projectFolder": "examples/tabs/palette-lts", "versionPolicyName": "MiskWeb", "shouldPublish": false + }, + { + "packageName": "misk-web-tab-template-basic", + "projectFolder": "packages/@misk/cli/plop-templates/basic", + "versionPolicyName": "MiskWeb", + "shouldPublish": false } // { // /**