From ec1e62d0793395142edb9831d93579047b1dd4d6 Mon Sep 17 00:00:00 2001 From: Vitalii Vozniak Date: Thu, 13 Jul 2023 16:15:02 +0300 Subject: [PATCH] chore(cip-1694): temporary deleted husky --- .githooks/commit-msg | 18 + .husky/commit-msg | 4 - .husky/pre-commit | 6 - ui/cip-1694/.eslintignore | 1 + ui/cip-1694/.eslintrc.json | 2 +- ui/cip-1694/.husky/commit-msg | 4 - ui/cip-1694/.husky/pre-commit | 4 - ui/cip-1694/package-lock.json | 336 +++++++++++------- ui/cip-1694/package.json | 3 - ui/cip-1694/src/common/redux/actions.ts | 29 -- .../src/common/redux/configureStore/index.js | 23 -- .../src/common/redux/configureStore/index.ts | 22 -- ui/cip-1694/src/common/redux/index.ts | 7 - .../src/{commons => common}/store/index.ts | 0 .../src/{commons => common}/store/types.ts | 2 +- .../{commons => common}/store/userSlice.ts | 9 +- .../{ToggleButton.js => ToggleButton.ts} | 4 +- .../src/common/styles/overrides/index.js | 5 - .../src/common/styles/overrides/index.ts | 6 + ui/cip-1694/src/common/utils/sessionUtils.ts | 2 +- .../ConnectWalletModal/ConnectWalletModal.tsx | 97 +++-- .../CountDownTimer/CountDownTimer.cy.tsx | 10 +- .../CountDownTimer/CountDownTimer.tsx | 4 +- .../components/OptionCard/OptionCard.cy.tsx | 27 +- .../components/OptionCard/OptionCard.types.ts | 4 +- .../src/components/common/Header/Header.tsx | 4 +- .../common/SidePage/SidePage.types.ts | 3 +- ui/cip-1694/src/pages/Vote/Vote.tsx | 44 +-- ui/cip-1694/src/pages/Vote/Vote.types.ts | 16 +- ui/cip-1694/src/pages/__tests__/App.cy.tsx | 10 +- .../src/types/backend-services-types.ts | 1 - ui/cip-1694/tsconfig.json | 41 ++- ui/cip-1694/tslint.json | 5 + 33 files changed, 382 insertions(+), 371 deletions(-) create mode 100644 .githooks/commit-msg delete mode 100755 .husky/commit-msg delete mode 100755 .husky/pre-commit delete mode 100755 ui/cip-1694/.husky/commit-msg delete mode 100755 ui/cip-1694/.husky/pre-commit delete mode 100644 ui/cip-1694/src/common/redux/actions.ts delete mode 100644 ui/cip-1694/src/common/redux/configureStore/index.js delete mode 100644 ui/cip-1694/src/common/redux/configureStore/index.ts delete mode 100644 ui/cip-1694/src/common/redux/index.ts rename ui/cip-1694/src/{commons => common}/store/index.ts (100%) rename ui/cip-1694/src/{commons => common}/store/types.ts (87%) rename ui/cip-1694/src/{commons => common}/store/userSlice.ts (84%) rename ui/cip-1694/src/common/styles/overrides/{ToggleButton.js => ToggleButton.ts} (70%) delete mode 100644 ui/cip-1694/src/common/styles/overrides/index.js create mode 100644 ui/cip-1694/src/common/styles/overrides/index.ts create mode 100644 ui/cip-1694/tslint.json diff --git a/.githooks/commit-msg b/.githooks/commit-msg new file mode 100644 index 000000000..18dfedf5c --- /dev/null +++ b/.githooks/commit-msg @@ -0,0 +1,18 @@ +#!/bin/bash + +COLOR_RED=$(tput setaf 1) +COLOR_GREEN=$(tput setaf 2) +COLOR_RESET=$(tput sgr0) + +COMMIT_MESSAGE=$(head -1 $1) +TYPES_REGEXP="build|ci|docs|feat|fix|perf|refactor|style|test|chore|revert" +COMPLETE_REGEXP="^($TYPES_REGEXP)(\(.+\))?: " + +if [[ ! ${COMMIT_MESSAGE} =~ ${COMPLETE_REGEXP} ]] +then + echo -e "${COLOR_RED}[!] INVALID COMMIT MESSAGE ${COLOR_RESET}" + echo -e "${COLOR_GREEN}[+]${COLOR_RESET} It needs to follow conventional commits structure:" + echo -e " type(scope): message" + echo -e "${COLOR_GREEN}[+]${COLOR_RESET} Following types are supported: $TYPES_REGEXP" + exit 1 +fi diff --git a/.husky/commit-msg b/.husky/commit-msg deleted file mode 100755 index 2372c75f0..000000000 --- a/.husky/commit-msg +++ /dev/null @@ -1,4 +0,0 @@ -# #!/bin/sh -# . "$(dirname "$0")/_/husky.sh" - -# npx --no -- commitlint --edit ${1} diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100755 index 4be249e4c..000000000 --- a/.husky/pre-commit +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - -cd ./ui/cip-1694/ -echo 'asd1' -npx lint-staged diff --git a/ui/cip-1694/.eslintignore b/ui/cip-1694/.eslintignore index a9439ead2..acfa5b244 100644 --- a/ui/cip-1694/.eslintignore +++ b/ui/cip-1694/.eslintignore @@ -4,4 +4,5 @@ *jest.config.js public/* cypress/* +src/types/*.ts **/*.js diff --git a/ui/cip-1694/.eslintrc.json b/ui/cip-1694/.eslintrc.json index a72b5e47d..127d0a38d 100644 --- a/ui/cip-1694/.eslintrc.json +++ b/ui/cip-1694/.eslintrc.json @@ -23,7 +23,7 @@ "rules": { "@typescript-eslint/no-duplicate-enum-values": "error", "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-explicit-any": "error", "react/no-unescaped-entities": 0, "react/react-in-jsx-scope": "off", "unicorn/prefer-module": "off", diff --git a/ui/cip-1694/.husky/commit-msg b/ui/cip-1694/.husky/commit-msg deleted file mode 100755 index 2372c75f0..000000000 --- a/ui/cip-1694/.husky/commit-msg +++ /dev/null @@ -1,4 +0,0 @@ -# #!/bin/sh -# . "$(dirname "$0")/_/husky.sh" - -# npx --no -- commitlint --edit ${1} diff --git a/ui/cip-1694/.husky/pre-commit b/ui/cip-1694/.husky/pre-commit deleted file mode 100755 index 36af21989..000000000 --- a/ui/cip-1694/.husky/pre-commit +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - -npx lint-staged diff --git a/ui/cip-1694/package-lock.json b/ui/cip-1694/package-lock.json index c0c1d3f48..c0da3a98e 100644 --- a/ui/cip-1694/package-lock.json +++ b/ui/cip-1694/package-lock.json @@ -1,12 +1,12 @@ { "name": "cardanovoting", - "version": "0.2.2", + "version": "0.2.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "cardanovoting", - "version": "0.2.2", + "version": "0.2.3", "hasInstallScript": true, "dependencies": { "@cardano-foundation/cardano-connect-with-wallet": "^0.1.57", @@ -53,8 +53,6 @@ "@types/react-dom": "^18.2.4", "cypress": "^12.14.0", "eslint-plugin-cypress": "^2.13.3", - "husky": "^8.0.0", - "lint-staged": "11.1.4", "path-exists-cli": "^2.0.0", "process": "^0.11.10", "sort-package-json": "^2.5.1" @@ -2282,6 +2280,76 @@ "node": ">=v14" } }, + "node_modules/@commitlint/format/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@commitlint/format/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@commitlint/format/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@commitlint/format/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@commitlint/format/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/format/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@commitlint/is-ignored": { "version": "17.6.6", "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.6.6.tgz", @@ -2368,12 +2436,61 @@ "node": ">=v14" } }, + "node_modules/@commitlint/load/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/@commitlint/load/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/@commitlint/load/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@commitlint/load/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@commitlint/load/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/@commitlint/load/node_modules/cosmiconfig": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", @@ -2392,6 +2509,15 @@ "url": "https://github.com/sponsors/d-fischer" } }, + "node_modules/@commitlint/load/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@commitlint/load/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -2413,6 +2539,18 @@ "node": ">=8" } }, + "node_modules/@commitlint/load/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@commitlint/message": { "version": "17.4.2", "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-17.4.2.tgz", @@ -2585,6 +2723,76 @@ "node": ">=v14" } }, + "node_modules/@commitlint/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@commitlint/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@commitlint/types/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@commitlint/types/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@commitlint/types/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -11871,21 +12079,6 @@ "node": ">=8.12.0" } }, - "node_modules/husky": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", - "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", - "dev": true, - "bin": { - "husky": "lib/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -15078,87 +15271,6 @@ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, - "node_modules/lint-staged": { - "version": "11.1.4", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-11.1.4.tgz", - "integrity": "sha512-zpCrFQ8Kvfucvxez5nQwWevnbB/4SBrL1oAHxRwfMVk9xAMIA+ufEiQVE+Dvx8EonIOX8AKPBSA0A6WM8OZuoQ==", - "dev": true, - "dependencies": { - "chalk": "^4.1.1", - "cli-truncate": "^2.1.0", - "commander": "^7.2.0", - "cosmiconfig": "^7.0.0", - "debug": "^4.3.1", - "enquirer": "^2.3.6", - "execa": "^5.0.0", - "listr2": "^3.8.2", - "log-symbols": "^4.1.0", - "micromatch": "^4.0.4", - "normalize-path": "^3.0.0", - "please-upgrade-node": "^3.2.0", - "string-argv": "0.3.1", - "stringify-object": "^3.3.0" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" - } - }, - "node_modules/lint-staged/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/lint-staged/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, "node_modules/listr2": { "version": "3.14.0", "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", @@ -17024,15 +17136,6 @@ "node": ">=4" } }, - "node_modules/please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "dev": true, - "dependencies": { - "semver-compare": "^1.0.0" - } - }, "node_modules/postcss": { "version": "8.4.25", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.25.tgz", @@ -19839,12 +19942,6 @@ "node": ">=10" } }, - "node_modules/semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", - "dev": true - }, "node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -20779,15 +20876,6 @@ "safe-buffer": "~5.2.0" } }, - "node_modules/string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true, - "engines": { - "node": ">=0.6.19" - } - }, "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", diff --git a/ui/cip-1694/package.json b/ui/cip-1694/package.json index b67484977..0739b4be7 100644 --- a/ui/cip-1694/package.json +++ b/ui/cip-1694/package.json @@ -50,14 +50,11 @@ "@types/react-dom": "^18.2.4", "cypress": "^12.14.0", "eslint-plugin-cypress": "^2.13.3", - "husky": "^8.0.0", - "lint-staged": "11.1.4", "path-exists-cli": "^2.0.0", "process": "^0.11.10", "sort-package-json": "^2.5.1" }, "scripts": { - "prepare": "cd .. && cd .. && husky install ui/.husky", "buildTSTypesFromBEServices": "cd ../../backend-services/voting-app/ && ./gradlew buildAndCopyTypescriptTypes", "safeBuildTSTypesFromBEServices": "path-exists ../cip-1694/src/types/backend-services-types.ts && echo 'backend-services-types.ts exists' || npm run buildTSTypesFromBEServices", "preinstall": "npm run safeBuildTSTypesFromBEServices", diff --git a/ui/cip-1694/src/common/redux/actions.ts b/ui/cip-1694/src/common/redux/actions.ts deleted file mode 100644 index 4bac1d87b..000000000 --- a/ui/cip-1694/src/common/redux/actions.ts +++ /dev/null @@ -1,29 +0,0 @@ -import {REDUX_ERROR, SET_USER, SET_USER_IS_VERIFIED} from './actionTypes'; - -export const setUser = (user: any) => (dispatch: any) => { - try { - dispatch({ - type: SET_USER, - user - }); - } catch (error) { - dispatch({ - type: REDUX_ERROR, - error - }); - } -}; - -export const setUserIsVerified = (isVerified: any) => (dispatch: any) => { - try { - dispatch({ - type: SET_USER_IS_VERIFIED, - isVerified - }); - } catch (error) { - dispatch({ - type: REDUX_ERROR, - error - }); - } -}; diff --git a/ui/cip-1694/src/common/redux/configureStore/index.js b/ui/cip-1694/src/common/redux/configureStore/index.js deleted file mode 100644 index 745a998c8..000000000 --- a/ui/cip-1694/src/common/redux/configureStore/index.js +++ /dev/null @@ -1,23 +0,0 @@ -import { configureStore } from '@reduxjs/toolkit'; -import { persistReducer, persistStore } from 'redux-persist'; -import thunk from 'redux-thunk'; -import reduxReset from 'redux-reset'; -import storage from 'redux-persist/lib/storage'; -import userSessionReducer from './userSlice'; - -const userPersistConfig = { - key: 'user', - storage, - blacklist: ['isLoggedIn'], -}; - -export const store = configureStore({ - reducer: persistReducer(userPersistConfig, userSessionReducer), - devTools: process.env.NODE_ENV !== 'production', - middleware: [thunk, reduxReset], -}); - -export const persistor = persistStore(store); - -export type RootState = ReturnType; -export type AppDispatch = typeof store.dispatch; diff --git a/ui/cip-1694/src/common/redux/configureStore/index.ts b/ui/cip-1694/src/common/redux/configureStore/index.ts deleted file mode 100644 index 109152d28..000000000 --- a/ui/cip-1694/src/common/redux/configureStore/index.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { configureStore } from '@reduxjs/toolkit'; -import { persistReducer, persistStore } from 'redux-persist'; -import thunk from 'redux-thunk'; -import reduxReset from 'redux-reset'; -import storage from 'redux-persist/lib/storage'; -import userSessionReducer from '../index'; - -const userPersistConfig = { - key: 'user', - storage, - blacklist: ['isLoggedIn'], -}; - -const persistedReducer = persistReducer(userPersistConfig, userSessionReducer); - -export const store = configureStore({ - reducer: persistedReducer, - devTools: process.env.NODE_ENV !== 'production', - middleware: [thunk, reduxReset], -}); - -export const persistor = persistStore(store); diff --git a/ui/cip-1694/src/common/redux/index.ts b/ui/cip-1694/src/common/redux/index.ts deleted file mode 100644 index 4ac8968a5..000000000 --- a/ui/cip-1694/src/common/redux/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { combineReducers } from 'redux' -import reducers from './reducers' - -// TODO: are we shoulkd we need the redux here? could we maybe consider something smaller? eg: RTK, zustand or some kind of their alternatives? -export default combineReducers({ - session: reducers -}) diff --git a/ui/cip-1694/src/commons/store/index.ts b/ui/cip-1694/src/common/store/index.ts similarity index 100% rename from ui/cip-1694/src/commons/store/index.ts rename to ui/cip-1694/src/common/store/index.ts diff --git a/ui/cip-1694/src/commons/store/types.ts b/ui/cip-1694/src/common/store/types.ts similarity index 87% rename from ui/cip-1694/src/commons/store/types.ts rename to ui/cip-1694/src/common/store/types.ts index e20df02d9..5fd304f7f 100644 --- a/ui/cip-1694/src/commons/store/types.ts +++ b/ui/cip-1694/src/common/store/types.ts @@ -3,5 +3,5 @@ export interface UserState { isVerified: boolean; termsAndPrivacy: boolean; error: string; - user?: any; + user?: object; } diff --git a/ui/cip-1694/src/commons/store/userSlice.ts b/ui/cip-1694/src/common/store/userSlice.ts similarity index 84% rename from ui/cip-1694/src/commons/store/userSlice.ts rename to ui/cip-1694/src/common/store/userSlice.ts index 5716f53c3..742c32d20 100644 --- a/ui/cip-1694/src/commons/store/userSlice.ts +++ b/ui/cip-1694/src/common/store/userSlice.ts @@ -13,13 +13,14 @@ export const userSlice = createSlice({ name: 'user', initialState, reducers: { - setSession: (state, action: PayloadAction<{ session: any }>) => { - state = { + setSession: (state, action: PayloadAction<{ session: object }>) => { + return { + ...initialState, ...action.payload.session, isLoggedIn: true, }; }, - setUser: (state, action: PayloadAction<{ user: any }>) => { + setUser: (state, action: PayloadAction<{ user: object }>) => { state.user = action.payload.user; }, setUserIsVerified: (state, action: PayloadAction<{ isVerified: boolean }>) => { @@ -29,7 +30,7 @@ export const userSlice = createSlice({ state.error = action.payload.error; }, clearSession: (state, action: PayloadAction<{ termsAndPrivacy: boolean }>) => { - state = { + return { ...initialState, termsAndPrivacy: action.payload.termsAndPrivacy, }; diff --git a/ui/cip-1694/src/common/styles/overrides/ToggleButton.js b/ui/cip-1694/src/common/styles/overrides/ToggleButton.ts similarity index 70% rename from ui/cip-1694/src/common/styles/overrides/ToggleButton.js rename to ui/cip-1694/src/common/styles/overrides/ToggleButton.ts index 37f137ccf..fe60987cc 100644 --- a/ui/cip-1694/src/common/styles/overrides/ToggleButton.js +++ b/ui/cip-1694/src/common/styles/overrides/ToggleButton.ts @@ -1,5 +1,7 @@ +import { createTheme } from '@mui/material'; + // TODO: lets' scope these under the component folder? -export default function ToggleButton(theme) { +export default function toggleButton(theme: ReturnType) { return { MuiToggleButton: { styleOverrides: { diff --git a/ui/cip-1694/src/common/styles/overrides/index.js b/ui/cip-1694/src/common/styles/overrides/index.js deleted file mode 100644 index d6f76958a..000000000 --- a/ui/cip-1694/src/common/styles/overrides/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import toggleButton from './ToggleButton'; - -export default function ComponentsOverrides(theme) { - return Object.assign(toggleButton(theme)); -} diff --git a/ui/cip-1694/src/common/styles/overrides/index.ts b/ui/cip-1694/src/common/styles/overrides/index.ts new file mode 100644 index 000000000..864400dc2 --- /dev/null +++ b/ui/cip-1694/src/common/styles/overrides/index.ts @@ -0,0 +1,6 @@ +import { createTheme } from '@mui/material'; +import toggleButton from './ToggleButton'; + +export default function ComponentsOverrides(theme: ReturnType) { + return Object.assign(toggleButton(theme)); +} diff --git a/ui/cip-1694/src/common/utils/sessionUtils.ts b/ui/cip-1694/src/common/utils/sessionUtils.ts index 80dd7ecce..4623a58cb 100644 --- a/ui/cip-1694/src/common/utils/sessionUtils.ts +++ b/ui/cip-1694/src/common/utils/sessionUtils.ts @@ -2,7 +2,7 @@ import { USER_SESSION_KEY } from '../constants/localConstants'; // import { store } from '../store'; // import { CLEAR_SESSION } from '../store/actionTypes'; -export const saveUserInSession = (session: any) => +export const saveUserInSession = (session: object) => sessionStorage.setItem(USER_SESSION_KEY, JSON.stringify(session)); export const loadUserInSession = () => { diff --git a/ui/cip-1694/src/components/ConnectWalletModal/ConnectWalletModal.tsx b/ui/cip-1694/src/components/ConnectWalletModal/ConnectWalletModal.tsx index bbd89e4e0..f32ca4f64 100644 --- a/ui/cip-1694/src/components/ConnectWalletModal/ConnectWalletModal.tsx +++ b/ui/cip-1694/src/components/ConnectWalletModal/ConnectWalletModal.tsx @@ -1,43 +1,36 @@ -import React from "react"; -import Dialog from "@mui/material/Dialog"; -import DialogActions from "@mui/material/DialogActions"; -import DialogContent from "@mui/material/DialogContent"; -import DialogContentText from "@mui/material/DialogContentText"; -import DialogTitle from "@mui/material/DialogTitle"; -import { Box, Button, styled } from "@mui/material"; -import Grid from "@mui/material/Grid"; -import { useTheme } from "@mui/material/styles"; -import { ConnectWalletList } from "@cardano-foundation/cardano-connect-with-wallet"; +import React from 'react'; +import Dialog from '@mui/material/Dialog'; +import DialogActions from '@mui/material/DialogActions'; +import DialogContent from '@mui/material/DialogContent'; +import DialogContentText from '@mui/material/DialogContentText'; +import DialogTitle from '@mui/material/DialogTitle'; +import { Box, Button, styled } from '@mui/material'; +import Grid from '@mui/material/Grid'; +import { useTheme } from '@mui/material/styles'; +import { ConnectWalletList } from '@cardano-foundation/cardano-connect-with-wallet'; const ConnectGrid = styled(Grid)(({ theme }) => ({ - width: "100%", + width: '100%', ...theme.typography.body2, '& [role="separator"]': { margin: theme.spacing(0, 2), }, })); -const ConnectWalletModal = (props: { - name: any; - id: any; - openStatus: any; - title: any; - action: any; - onConnectWallet: any; - onCloseFn: any; - buttonLabel: any; -}) => { +type ConnectWalletModalProps = { + name: string; + id: string; + openStatus: boolean; + title: string; + action: boolean; + onConnectWallet: () => void; + onCloseFn: () => void; + buttonLabel: string; +}; + +const ConnectWalletModal = (props: ConnectWalletModalProps) => { const theme = useTheme(); - const { - name, - id, - openStatus, - title, - action, - onConnectWallet, - onCloseFn, - buttonLabel, - } = props; + const { name, id, openStatus, title, action, onConnectWallet, onCloseFn, buttonLabel } = props; return ( {title} - + @@ -106,4 +93,4 @@ const ConnectWalletModal = (props: { ); }; -export default ConnectWalletModal; \ No newline at end of file +export default ConnectWalletModal; diff --git a/ui/cip-1694/src/components/CountDownTimer/CountDownTimer.cy.tsx b/ui/cip-1694/src/components/CountDownTimer/CountDownTimer.cy.tsx index 465e86bfa..af7906333 100644 --- a/ui/cip-1694/src/components/CountDownTimer/CountDownTimer.cy.tsx +++ b/ui/cip-1694/src/components/CountDownTimer/CountDownTimer.cy.tsx @@ -1,11 +1,11 @@ /// -import React from 'react' -import CountDownTimer from './CountDownTimer' +import React from 'react'; +import CountDownTimer from './CountDownTimer'; describe('', () => { it('renders', () => { // see: https://on.cypress.io/mounting-react - cy.mount() - }) -}) \ No newline at end of file + cy.mount(); + }); +}); diff --git a/ui/cip-1694/src/components/CountDownTimer/CountDownTimer.tsx b/ui/cip-1694/src/components/CountDownTimer/CountDownTimer.tsx index 14e8210f9..fe890a0b1 100644 --- a/ui/cip-1694/src/components/CountDownTimer/CountDownTimer.tsx +++ b/ui/cip-1694/src/components/CountDownTimer/CountDownTimer.tsx @@ -1,11 +1,11 @@ -import moment from 'moment'; import React from 'react'; +import moment from 'moment'; import { useTimer } from 'react-timer-hook'; export default function CountDownTimer() { const time = new Date(); const endTime = moment('09-01-2023', 'MM-DD-YYYY'); // summit date - time.setSeconds(time.getSeconds() + endTime.diff(time, 'seconds')); // time left for summit date + time.setSeconds(time.getSeconds() + endTime.diff(time, 'seconds')); // time left for summit date const { seconds, minutes, hours, days } = useTimer({ expiryTimestamp: time }); diff --git a/ui/cip-1694/src/components/OptionCard/OptionCard.cy.tsx b/ui/cip-1694/src/components/OptionCard/OptionCard.cy.tsx index 1e0887cca..8436dc46b 100644 --- a/ui/cip-1694/src/components/OptionCard/OptionCard.cy.tsx +++ b/ui/cip-1694/src/components/OptionCard/OptionCard.cy.tsx @@ -1,33 +1,38 @@ /// import React from 'react'; +import DoneIcon from '@mui/icons-material/Done'; +import CloseIcon from '@mui/icons-material/Close'; +import DoDisturbIcon from '@mui/icons-material/DoDisturb'; import OptionCard from './OptionCard'; -import DoneIcon from "@mui/icons-material/Done"; -import CloseIcon from "@mui/icons-material/Close"; -import DoDisturbIcon from "@mui/icons-material/DoDisturb"; const items = [ { - label: "Yes", + label: 'Yes', icon: , }, { - label: "No", + label: 'No', icon: , }, { - label: "Abstain", + label: 'Abstain', icon: , }, ]; const onChangeOption = (option: string) => { - return option -} + return option; +}; describe('', () => { it('renders', () => { cy.fixture('items.json').as('items'); - cy.mount(); - }) -}) \ No newline at end of file + cy.mount( + + ); + }); +}); diff --git a/ui/cip-1694/src/components/OptionCard/OptionCard.types.ts b/ui/cip-1694/src/components/OptionCard/OptionCard.types.ts index ed0997f9b..77300baf5 100644 --- a/ui/cip-1694/src/components/OptionCard/OptionCard.types.ts +++ b/ui/cip-1694/src/components/OptionCard/OptionCard.types.ts @@ -1,6 +1,8 @@ +import React from 'react'; + interface OptionItem { label: string; - icon: any; + icon: React.ReactElement | null; } interface OptionProps { diff --git a/ui/cip-1694/src/components/common/Header/Header.tsx b/ui/cip-1694/src/components/common/Header/Header.tsx index d36c251c5..fb51e4392 100644 --- a/ui/cip-1694/src/components/common/Header/Header.tsx +++ b/ui/cip-1694/src/components/common/Header/Header.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react'; +import React,{ useEffect, useState } from 'react'; import { Grid, Typography } from '@mui/material'; import { useTheme, styled } from '@mui/material/styles'; import { useNavigate, useLocation } from 'react-router-dom'; @@ -45,7 +45,7 @@ export default function Header() { navigate('/'); }; - const onConnectWallet = (walletName: any) => { + const onConnectWallet = (walletName: string) => { console.log(walletName); }; diff --git a/ui/cip-1694/src/components/common/SidePage/SidePage.types.ts b/ui/cip-1694/src/components/common/SidePage/SidePage.types.ts index 3794a28f8..9c721bf40 100644 --- a/ui/cip-1694/src/components/common/SidePage/SidePage.types.ts +++ b/ui/cip-1694/src/components/common/SidePage/SidePage.types.ts @@ -1,7 +1,8 @@ +import React from 'react'; type Anchor = 'top' | 'left' | 'bottom' | 'right'; interface SidePageProps { - children: any; + children: React.ReactElement; anchor: Anchor; open: boolean; setOpen: (open: boolean) => void; diff --git a/ui/cip-1694/src/pages/Vote/Vote.tsx b/ui/cip-1694/src/pages/Vote/Vote.tsx index 2b0074bab..4f589a964 100644 --- a/ui/cip-1694/src/pages/Vote/Vote.tsx +++ b/ui/cip-1694/src/pages/Vote/Vote.tsx @@ -22,6 +22,12 @@ import { ChainTip } from '../../types/backend-services-types'; import { HttpError } from '../../common/handlers/httpHandler'; import ConnectWalletModal from '../../components/ConnectWalletModal/ConnectWalletModal'; +const errorsMap = { + INVALID_VOTING_POWER: 'To cast a vote, Voting Power should be more than 0', + EXPIRED_SLOT: "CIP-93's envelope slot is expired!", + VOTE_CANNOT_BE_CHANGED: 'You have already voted! Vote cannot be changed for this stake address', +}; + const items: OptionItem[] = [ { label: 'Yes', @@ -100,9 +106,8 @@ const Vote = () => { } else console.log('Failed to fetch votingPower', error); return; } - if (absoluteSlot !== '' && votingPower !== '') { - return; - } + if (absoluteSlot === '') return; + const canonicalVoteInput = buildCanonicalVoteInputJson({ option: optionId?.toUpperCase(), voter: stakeAddress, @@ -111,33 +116,28 @@ const Vote = () => { votePower: votingPower, }); signMessage(canonicalVoteInput, async (signature, key) => { + // TODO: castAVoteWithDigitalSignature are incompatible with requestVoteObject + if (typeof key === 'undefined') return; + const requestVoteObject = { cosePublicKey: key, coseSignature: isConnected && signature, }; try { - const { status, title } = await voteService.castAVoteWithDigitalSignature(requestVoteObject); - if (status === 400 && title === 'INVALID_VOTING_POWER') { - notify('To cast a vote, Voting Power should be more than 0'); - setOptionId(''); - setIsDisabled(true); - } else if (status === 400 && title === 'EXPIRED_SLOT') { - notify("CIP-93's envelope slot is expired!"); - setOptionId(''); - setIsDisabled(true); - } else if (status == 400 && title === 'VOTE_CANNOT_BE_CHANGED') { - notify('You have already voted! Vote cannot be changed for this stake address'); + await voteService.castAVoteWithDigitalSignature(requestVoteObject); + notify('You vote has been successfully submitted!'); + setOptionId(''); + setShowVoteReceipt(true); + } catch (error) { + if (error instanceof HttpError && error.code === 400) { + notify(errorsMap[error?.message as keyof typeof errorsMap] || error?.message); setOptionId(''); setIsDisabled(true); - } else { - notify('You vote has been successfully submitted!'); - setOptionId(''); - setShowVoteReceipt(true); + } else if (error instanceof Error) { + notify(error?.message); + console.log('Failed to cast e vote', error); } - } catch (error) { - notify(error); - console.log('Failed to cast e vote', error); } }); }; @@ -260,7 +260,7 @@ const Vote = () => { name="connect-wallet-list" id="connect-wallet-list" title="Choose your preferred wallet to connect" - action="true" + action buttonLabel="Close" onConnectWallet={onConnectWallet} /> diff --git a/ui/cip-1694/src/pages/Vote/Vote.types.ts b/ui/cip-1694/src/pages/Vote/Vote.types.ts index 828a19a63..fb84fe779 100644 --- a/ui/cip-1694/src/pages/Vote/Vote.types.ts +++ b/ui/cip-1694/src/pages/Vote/Vote.types.ts @@ -1,10 +1,10 @@ -interface VoteItem { - question: string; - options: any; -} +// interface VoteItem { +// question: string; +// options: any; +// } -interface VoteProps { - items: VoteItem[]; -} +// interface VoteProps { +// items: VoteItem[]; +// } -export type { VoteItem, VoteProps }; +// export type { VoteItem, VoteProps }; diff --git a/ui/cip-1694/src/pages/__tests__/App.cy.tsx b/ui/cip-1694/src/pages/__tests__/App.cy.tsx index d2075849a..702dbfcce 100644 --- a/ui/cip-1694/src/pages/__tests__/App.cy.tsx +++ b/ui/cip-1694/src/pages/__tests__/App.cy.tsx @@ -1,9 +1,9 @@ -import React from 'react' -import App from '../../App' +import React from 'react'; +import App from '../../App'; describe('', () => { it('renders', () => { // see: https://on.cypress.io/mounting-react - cy.mount() - }) -}) + cy.mount(); + }); +}); diff --git a/ui/cip-1694/src/types/backend-services-types.ts b/ui/cip-1694/src/types/backend-services-types.ts index c880e52da..28c60acad 100644 --- a/ui/cip-1694/src/types/backend-services-types.ts +++ b/ui/cip-1694/src/types/backend-services-types.ts @@ -768,7 +768,6 @@ export interface Problem { export interface Serializable { } - export interface MerkleElement { empty: boolean; } diff --git a/ui/cip-1694/tsconfig.json b/ui/cip-1694/tsconfig.json index 7cfca6e32..006fe5ff3 100644 --- a/ui/cip-1694/tsconfig.json +++ b/ui/cip-1694/tsconfig.json @@ -1,23 +1,26 @@ { "compilerOptions": { - "allowJs": true, - "allowSyntheticDefaultImports": true, - "declaration": true, - "declarationDir": "./", - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "jsx": "react-jsx", - "lib": ["dom", "dom.iterable", "esnext"], - "module": "esnext", - "moduleResolution": "node", - "noEmit": true, - "noFallthroughCasesInSwitch": true, - "outDir": "dist/", + "outDir": "./public/", + "rootDir": "./", + "baseUrl": "src", "resolveJsonModule": true, - "skipLibCheck": true, - "strict": true, - "target": "ES2018" - }, - "exclude": ["public"] + "noEmitOnError": false, + "composite": true, + "module": "es2020", + "target": "es2016", + "jsx": "react", + "allowJs": false, + "moduleResolution": "node", + "esModuleInterop": true, + "declaration": true, + "declarationMap": true, + "noImplicitAny": true, + "noUnusedParameters": false, + "noUnusedLocals": true, + "removeComments": true, + "preserveConstEnums": true, + "sourceMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true + } } diff --git a/ui/cip-1694/tslint.json b/ui/cip-1694/tslint.json new file mode 100644 index 000000000..9e67247ba --- /dev/null +++ b/ui/cip-1694/tslint.json @@ -0,0 +1,5 @@ +{ + "rules": { + "noExplicitAny": true + } +}