diff --git a/README.md b/README.md index a654beb..535f8f0 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ This repo use npm to manage many action. To install dependencies run ```npm install``` To run development server use ```npm start``` To run tests use ```npm test``` -And to build package use ```npom build``` +And to build package use ```npm build``` ### CORS diff --git a/package-lock.json b/package-lock.json index 3e5f120..c545d87 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,25 +1,25 @@ { "name": "thesis-frontend-react", - "version": "0.1.0", + "version": "1.0.2", "lockfileVersion": 2, "requires": true, "packages": { "": { - "version": "0.1.0", + "version": "1.0.2", "dependencies": { - "@babel/core": "^7.14.3", + "@babel/core": "^7.14.5", "@fortawesome/fontawesome-svg-core": "^1.2.35", "@fortawesome/free-brands-svg-icons": "^5.15.3", "@fortawesome/free-solid-svg-icons": "^5.15.3", "@fortawesome/react-fontawesome": "latest", - "@testing-library/jest-dom": "^5.12.0", + "@testing-library/jest-dom": "^5.13.0", "@testing-library/react": "^11.2.7", "@testing-library/user-event": "^13.1.9", "@types/file-saver": "^2.0.1", "@types/jest": "^26.0.23", - "@types/node": "^15.3.1", - "@types/react": "^17.0.6", - "@types/react-dom": "^17.0.5", + "@types/node": "^15.12.2", + "@types/react": "^17.0.11", + "@types/react-dom": "^17.0.7", "@types/react-fontawesome": "^1.6.4", "@types/react-helmet": "^6.1.1", "@types/react-router-dom": "^5.1.5", @@ -27,7 +27,7 @@ "async-mutex": "^0.3.1", "async-parallel": "^1.2.3", "file-saver": "^2.0.5", - "formik": "^2.2.7", + "formik": "^2.2.9", "html-react-parser": "latest", "jsme-editor": "^0.8.2", "jsme-react": "0.0.9", @@ -38,38 +38,44 @@ "react-router-dom": "^5.2.0", "react-scripts": "^4.0.3", "react-select": "^4.3.1", - "sass": "^1.33.0", + "sass": "^1.34.1", "smiles-drawer": "github:privrja/smilesDrawer#2.1.6", - "typescript": "^4.2.4" + "typescript": "^4.3.2" } }, "node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dependencies": { - "@babel/highlight": "^7.12.13" + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.15.tgz", - "integrity": "sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA==" + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.5.tgz", + "integrity": "sha512-kixrYn4JwfAVPa0f2yfzc2AWti6WRRyO3XjWW5PJAvtE11qhSayrrcrEnee05KAtNaPC+EwehE8Qt1UedEVB8w==", + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/core": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", - "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.3", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.14.2", - "@babel/helpers": "^7.14.0", - "@babel/parser": "^7.14.3", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.5.tgz", + "integrity": "sha512-RN/AwP2DJmQTZSfiDaD+JQQ/J99KsIpOCfBE5pL+5jJSt7nI3nYGoAXZu+ffYSQ029NLs2DstZb+eR81uuARgg==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helpers": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -86,13 +92,16 @@ } }, "node_modules/@babel/generator": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", - "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", "dependencies": { - "@babel/types": "^7.14.2", + "@babel/types": "^7.14.5", "jsesc": "^2.5.1", "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-annotate-as-pure": { @@ -113,15 +122,18 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", - "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", "dependencies": { - "@babel/compat-data": "^7.13.15", - "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.14.5", + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", "semver": "^6.3.0" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0" } @@ -180,69 +192,89 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", - "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", "dependencies": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", "dependencies": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz", - "integrity": "sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", "dependencies": { - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.5.tgz", + "integrity": "sha512-UxUeEYPrqH1Q/k0yRku1JE7dyfyehNwT6SVkMHvYvPDv4+uu627VXBckVj891BO8ruKBkiDoGnZf4qPDD8abDQ==", "dependencies": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", "dependencies": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", - "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", "dependencies": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2" + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", "dependencies": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { @@ -261,22 +293,28 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", - "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.12" + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", "dependencies": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { @@ -288,22 +326,31 @@ } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", "dependencies": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==" + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/helper-wrap-function": { "version": "7.13.0", @@ -317,29 +364,35 @@ } }, "node_modules/@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.5.tgz", + "integrity": "sha512-xtcWOuN9VL6nApgVHtq3PPcQv5qFBJzoSZzJ/2c0QK/IP/gxVcoWSNQwFEGvmbQsuS9rhYqjILDGGXcTkA705Q==", "dependencies": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "dependencies": { - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", - "integrity": "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.5.tgz", + "integrity": "sha512-TM8C+xtH/9n1qzX+JNHi7AN2zHMTiPUtspO0ZdHflW8KaskkALhMmuMHb4bCmNdv9VAPzJX3/bXqkVLnAvsPfg==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1380,37 +1433,47 @@ } }, "node_modules/@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", - "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.5.tgz", + "integrity": "sha512-G3BiS15vevepdmFqmUc9X+64y0viZYygubAMO8SvBmKARuF6CPSZtH4Ng9vi/lrWlZFGe3FWdXNy835akH8Glg==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5", "debug": "^4.1.0", "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", - "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@bcoe/v8-coverage": { @@ -2865,9 +2928,9 @@ } }, "node_modules/@testing-library/jest-dom": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.12.0.tgz", - "integrity": "sha512-N9Y82b2Z3j6wzIoAqajlKVF1Zt7sOH0pPee0sUHXHc5cv2Fdn23r+vpWm0MBBoGJtPOly5+Bdx1lnc3CD+A+ow==", + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.13.0.tgz", + "integrity": "sha512-+jXXTn8GjRnZkJfzG/tqK/2Q7dGlBInR412WE7Aml7CT3wdSpx5dMQC0HOwVQoZ3cNTmQUy8fCVGUV/Zhoyvcw==", "dependencies": { "@babel/runtime": "^7.9.2", "@types/testing-library__jest-dom": "^5.9.1", @@ -3115,9 +3178,9 @@ "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==" }, "node_modules/@types/node": { - "version": "15.3.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.3.1.tgz", - "integrity": "sha512-weaeiP4UF4XgF++3rpQhpIJWsCTS4QJw5gvBhQu6cFIxTwyxWIe3xbnrY/o2lTCQ0lsdb8YIUDUvLR4Vuz5rbw==" + "version": "15.12.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz", + "integrity": "sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww==" }, "node_modules/@types/normalize-package-data": { "version": "2.4.0", @@ -3145,9 +3208,9 @@ "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" }, "node_modules/@types/react": { - "version": "17.0.6", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.6.tgz", - "integrity": "sha512-u/TtPoF/hrvb63LdukET6ncaplYsvCvmkceasx8oG84/ZCsoLxz9Z/raPBP4lTAiWW1Jb889Y9svHmv8R26dWw==", + "version": "17.0.11", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.11.tgz", + "integrity": "sha512-yFRQbD+whVonItSk7ZzP/L+gPTJVBkL/7shLEF+i9GC/1cV3JmUxEQz6+9ylhUpWSDuqo1N9qEvqS6vTj4USUA==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -3155,9 +3218,9 @@ } }, "node_modules/@types/react-dom": { - "version": "17.0.5", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.5.tgz", - "integrity": "sha512-ikqukEhH4H9gr4iJCmQVNzTB307kROe3XFfHAOTxOXPOw7lAoEXnM5KWTkzeANGL5Ce6ABfiMl/zJBYNi7ObmQ==", + "version": "17.0.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.7.tgz", + "integrity": "sha512-Wd5xvZRlccOrCTej8jZkoFZuZRKHzanDDv1xglI33oBNFMWrqOSzrvWFw7ngSiZjrpJAzPKFtX7JvuXpkNmQHA==", "dependencies": { "@types/react": "*" } @@ -5064,15 +5127,15 @@ } }, "node_modules/browserslist": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", - "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dependencies": { - "caniuse-lite": "^1.0.30001181", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.649", + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", "escalade": "^3.1.1", - "node-releases": "^1.1.70" + "node-releases": "^1.1.71" }, "bin": { "browserslist": "cli.js" @@ -5286,9 +5349,13 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001208", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001208.tgz", - "integrity": "sha512-OE5UE4+nBOro8Dyvv0lfx+SRtfVIOM9uhKqFmJeUbGriqhhStgp1A0OyBpgy3OUF8AhYCT+PVwPC1gMl2ZcQMA==" + "version": "1.0.30001236", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001236.tgz", + "integrity": "sha512-o0PRQSrSCGJKCPZcgMzl5fUaj5xHe8qA2m4QRvnyY4e1lITqoNkr7q/Oh1NcpGSy0Th97UZ35yoKcINPoq7YOQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } }, "node_modules/capture-exit": { "version": "2.0.0", @@ -6983,9 +7050,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.3.711", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.711.tgz", - "integrity": "sha512-XbklBVCDiUeho0PZQCjC25Ha6uBwqqJeyDhPLwLwfWRAo4x+FZFsmu1pPPkXT+B4MQMQoQULfyaMltDopfeiHQ==" + "version": "1.3.752", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz", + "integrity": "sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==" }, "node_modules/elliptic": { "version": "6.5.4", @@ -8880,9 +8947,9 @@ } }, "node_modules/formik": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/formik/-/formik-2.2.7.tgz", - "integrity": "sha512-j4cso6QL90T8hJWgU29GYsBQuj1vynBfrcURyK91KshArvS5CLoxUkP52hKc3wVpGFACd0uWEJo7y30ZOTzc5g==", + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/formik/-/formik-2.2.9.tgz", + "integrity": "sha512-LQLcISMmf1r5at4/gyJigGn0gOwFbeEAlji+N9InZF6LIMXnFNkO42sCI8Jt84YZggpD4cPWObAZaxpEFtSzNA==", "funding": [ { "type": "individual", @@ -8892,8 +8959,8 @@ "dependencies": { "deepmerge": "^2.1.1", "hoist-non-react-statics": "^3.3.0", - "lodash": "^4.17.14", - "lodash-es": "^4.17.14", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", "react-fast-compare": "^2.0.1", "tiny-warning": "^1.0.2", "tslib": "^1.10.0" @@ -17706,9 +17773,9 @@ "integrity": "sha512-vTxrZz4dX5W86M6oVWVdOVe72ZiPs41Oi7Z6Km4W5Turyz28mrXSJhhEBZoRtzJWIv3833WKVwLSDWWkEfupMg==" }, "node_modules/sass": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.33.0.tgz", - "integrity": "sha512-9v0MUXnSi62FtfjqcwZ+b8B9FIxdwFEb3FPUkjEPXWd0b5KcnPGSp2XF9WrzcH1ZxedfgJVTdA3A1j4eEj53xg==", + "version": "1.34.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.34.1.tgz", + "integrity": "sha512-scLA7EIZM+MmYlej6sdVr0HRbZX5caX5ofDT9asWnUJj21oqgsC+1LuNfm0eg+vM0fCTZHhwImTiCU0sx9h9CQ==", "dependencies": { "chokidar": ">=3.0.0 <4.0.0" }, @@ -19658,9 +19725,9 @@ } }, "node_modules/typescript": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", - "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz", + "integrity": "sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -21912,32 +21979,32 @@ }, "dependencies": { "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "requires": { - "@babel/highlight": "^7.12.13" + "@babel/highlight": "^7.14.5" } }, "@babel/compat-data": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.15.tgz", - "integrity": "sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA==" + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.5.tgz", + "integrity": "sha512-kixrYn4JwfAVPa0f2yfzc2AWti6WRRyO3XjWW5PJAvtE11qhSayrrcrEnee05KAtNaPC+EwehE8Qt1UedEVB8w==" }, "@babel/core": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", - "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.3", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.14.2", - "@babel/helpers": "^7.14.0", - "@babel/parser": "^7.14.3", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.5.tgz", + "integrity": "sha512-RN/AwP2DJmQTZSfiDaD+JQQ/J99KsIpOCfBE5pL+5jJSt7nI3nYGoAXZu+ffYSQ029NLs2DstZb+eR81uuARgg==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helpers": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -21947,11 +22014,11 @@ } }, "@babel/generator": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", - "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", "requires": { - "@babel/types": "^7.14.2", + "@babel/types": "^7.14.5", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -21974,13 +22041,13 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", - "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", "requires": { - "@babel/compat-data": "^7.13.15", - "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.14.5", + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", "semver": "^6.3.0" } }, @@ -22029,69 +22096,68 @@ } }, "@babel/helper-function-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", - "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", "requires": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.14.5" } }, "@babel/helper-hoist-variables": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz", - "integrity": "sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", "requires": { - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/types": "^7.14.5" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.5.tgz", + "integrity": "sha512-UxUeEYPrqH1Q/k0yRku1JE7dyfyehNwT6SVkMHvYvPDv4+uu627VXBckVj891BO8ruKBkiDoGnZf4qPDD8abDQ==", "requires": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.14.5" } }, "@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", "requires": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.14.5" } }, "@babel/helper-module-transforms": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", - "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", "requires": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2" + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", "requires": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.14.5" } }, "@babel/helper-plugin-utils": { @@ -22110,22 +22176,22 @@ } }, "@babel/helper-replace-supers": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", - "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", "requires": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.12" + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", "requires": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.14.5" } }, "@babel/helper-skip-transparent-expression-wrappers": { @@ -22137,22 +22203,22 @@ } }, "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", "requires": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.14.5" } }, "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" }, "@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==" + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==" }, "@babel/helper-wrap-function": { "version": "7.13.0", @@ -22166,29 +22232,29 @@ } }, "@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.5.tgz", + "integrity": "sha512-xtcWOuN9VL6nApgVHtq3PPcQv5qFBJzoSZzJ/2c0QK/IP/gxVcoWSNQwFEGvmbQsuS9rhYqjILDGGXcTkA705Q==", "requires": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "requires": { - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", - "integrity": "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==" + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.5.tgz", + "integrity": "sha512-TM8C+xtH/9n1qzX+JNHi7AN2zHMTiPUtspO0ZdHflW8KaskkALhMmuMHb4bCmNdv9VAPzJX3/bXqkVLnAvsPfg==" }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.13.12", @@ -22982,36 +23048,37 @@ } }, "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", - "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.5.tgz", + "integrity": "sha512-G3BiS15vevepdmFqmUc9X+64y0viZYygubAMO8SvBmKARuF6CPSZtH4Ng9vi/lrWlZFGe3FWdXNy835akH8Glg==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", - "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "requires": { - "@babel/helper-validator-identifier": "^7.14.0", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } }, @@ -24051,9 +24118,9 @@ } }, "@testing-library/jest-dom": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.12.0.tgz", - "integrity": "sha512-N9Y82b2Z3j6wzIoAqajlKVF1Zt7sOH0pPee0sUHXHc5cv2Fdn23r+vpWm0MBBoGJtPOly5+Bdx1lnc3CD+A+ow==", + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.13.0.tgz", + "integrity": "sha512-+jXXTn8GjRnZkJfzG/tqK/2Q7dGlBInR412WE7Aml7CT3wdSpx5dMQC0HOwVQoZ3cNTmQUy8fCVGUV/Zhoyvcw==", "requires": { "@babel/runtime": "^7.9.2", "@types/testing-library__jest-dom": "^5.9.1", @@ -24266,9 +24333,9 @@ "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==" }, "@types/node": { - "version": "15.3.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.3.1.tgz", - "integrity": "sha512-weaeiP4UF4XgF++3rpQhpIJWsCTS4QJw5gvBhQu6cFIxTwyxWIe3xbnrY/o2lTCQ0lsdb8YIUDUvLR4Vuz5rbw==" + "version": "15.12.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz", + "integrity": "sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww==" }, "@types/normalize-package-data": { "version": "2.4.0", @@ -24296,9 +24363,9 @@ "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" }, "@types/react": { - "version": "17.0.6", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.6.tgz", - "integrity": "sha512-u/TtPoF/hrvb63LdukET6ncaplYsvCvmkceasx8oG84/ZCsoLxz9Z/raPBP4lTAiWW1Jb889Y9svHmv8R26dWw==", + "version": "17.0.11", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.11.tgz", + "integrity": "sha512-yFRQbD+whVonItSk7ZzP/L+gPTJVBkL/7shLEF+i9GC/1cV3JmUxEQz6+9ylhUpWSDuqo1N9qEvqS6vTj4USUA==", "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -24306,9 +24373,9 @@ } }, "@types/react-dom": { - "version": "17.0.5", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.5.tgz", - "integrity": "sha512-ikqukEhH4H9gr4iJCmQVNzTB307kROe3XFfHAOTxOXPOw7lAoEXnM5KWTkzeANGL5Ce6ABfiMl/zJBYNi7ObmQ==", + "version": "17.0.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.7.tgz", + "integrity": "sha512-Wd5xvZRlccOrCTej8jZkoFZuZRKHzanDDv1xglI33oBNFMWrqOSzrvWFw7ngSiZjrpJAzPKFtX7JvuXpkNmQHA==", "requires": { "@types/react": "*" } @@ -25848,15 +25915,15 @@ } }, "browserslist": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", - "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "requires": { - "caniuse-lite": "^1.0.30001181", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.649", + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", "escalade": "^3.1.1", - "node-releases": "^1.1.70" + "node-releases": "^1.1.71" } }, "bser": { @@ -26024,9 +26091,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001208", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001208.tgz", - "integrity": "sha512-OE5UE4+nBOro8Dyvv0lfx+SRtfVIOM9uhKqFmJeUbGriqhhStgp1A0OyBpgy3OUF8AhYCT+PVwPC1gMl2ZcQMA==" + "version": "1.0.30001236", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001236.tgz", + "integrity": "sha512-o0PRQSrSCGJKCPZcgMzl5fUaj5xHe8qA2m4QRvnyY4e1lITqoNkr7q/Oh1NcpGSy0Th97UZ35yoKcINPoq7YOQ==" }, "capture-exit": { "version": "2.0.0", @@ -27387,9 +27454,9 @@ "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==" }, "electron-to-chromium": { - "version": "1.3.711", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.711.tgz", - "integrity": "sha512-XbklBVCDiUeho0PZQCjC25Ha6uBwqqJeyDhPLwLwfWRAo4x+FZFsmu1pPPkXT+B4MQMQoQULfyaMltDopfeiHQ==" + "version": "1.3.752", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz", + "integrity": "sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==" }, "elliptic": { "version": "6.5.4", @@ -28827,14 +28894,14 @@ } }, "formik": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/formik/-/formik-2.2.7.tgz", - "integrity": "sha512-j4cso6QL90T8hJWgU29GYsBQuj1vynBfrcURyK91KshArvS5CLoxUkP52hKc3wVpGFACd0uWEJo7y30ZOTzc5g==", + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/formik/-/formik-2.2.9.tgz", + "integrity": "sha512-LQLcISMmf1r5at4/gyJigGn0gOwFbeEAlji+N9InZF6LIMXnFNkO42sCI8Jt84YZggpD4cPWObAZaxpEFtSzNA==", "requires": { "deepmerge": "^2.1.1", "hoist-non-react-statics": "^3.3.0", - "lodash": "^4.17.14", - "lodash-es": "^4.17.14", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", "react-fast-compare": "^2.0.1", "tiny-warning": "^1.0.2", "tslib": "^1.10.0" @@ -35626,9 +35693,9 @@ "integrity": "sha512-vTxrZz4dX5W86M6oVWVdOVe72ZiPs41Oi7Z6Km4W5Turyz28mrXSJhhEBZoRtzJWIv3833WKVwLSDWWkEfupMg==" }, "sass": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.33.0.tgz", - "integrity": "sha512-9v0MUXnSi62FtfjqcwZ+b8B9FIxdwFEb3FPUkjEPXWd0b5KcnPGSp2XF9WrzcH1ZxedfgJVTdA3A1j4eEj53xg==", + "version": "1.34.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.34.1.tgz", + "integrity": "sha512-scLA7EIZM+MmYlej6sdVr0HRbZX5caX5ofDT9asWnUJj21oqgsC+1LuNfm0eg+vM0fCTZHhwImTiCU0sx9h9CQ==", "requires": { "chokidar": ">=3.0.0 <4.0.0" } @@ -37176,9 +37243,9 @@ } }, "typescript": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", - "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==" + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz", + "integrity": "sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==" }, "unbox-primitive": { "version": "1.0.1", diff --git a/package.json b/package.json index 4e5ccda..b7be814 100644 --- a/package.json +++ b/package.json @@ -1,21 +1,21 @@ { "name": "thesis-frontend-react", - "version": "0.1.0", + "version": "1.0.2", "private": true, "dependencies": { - "@babel/core": "^7.14.3", + "@babel/core": "^7.14.5", "@fortawesome/fontawesome-svg-core": "^1.2.35", "@fortawesome/free-brands-svg-icons": "^5.15.3", "@fortawesome/free-solid-svg-icons": "^5.15.3", "@fortawesome/react-fontawesome": "latest", - "@testing-library/jest-dom": "^5.12.0", + "@testing-library/jest-dom": "^5.13.0", "@testing-library/react": "^11.2.7", "@testing-library/user-event": "^13.1.9", "@types/file-saver": "^2.0.1", "@types/jest": "^26.0.23", - "@types/node": "^15.3.1", - "@types/react": "^17.0.6", - "@types/react-dom": "^17.0.5", + "@types/node": "^15.12.2", + "@types/react": "^17.0.11", + "@types/react-dom": "^17.0.7", "@types/react-fontawesome": "^1.6.4", "@types/react-helmet": "^6.1.1", "@types/react-router-dom": "^5.1.5", @@ -23,7 +23,7 @@ "async-mutex": "^0.3.1", "async-parallel": "^1.2.3", "file-saver": "^2.0.5", - "formik": "^2.2.7", + "formik": "^2.2.9", "html-react-parser": "latest", "jsme-editor": "^0.8.2", "jsme-react": "0.0.9", @@ -34,9 +34,9 @@ "react-router-dom": "^5.2.0", "react-scripts": "^4.0.3", "react-select": "^4.3.1", - "sass": "^1.33.0", + "sass": "^1.34.1", "smiles-drawer": "github:privrja/smilesDrawer#2.1.6", - "typescript": "^4.2.4" + "typescript": "^4.3.2" }, "scripts": { "predeploy": "npm run build", diff --git a/src/component/ModificationComponent.tsx b/src/component/ModificationComponent.tsx index 8f85781..56f5048 100644 --- a/src/component/ModificationComponent.tsx +++ b/src/component/ModificationComponent.tsx @@ -195,7 +195,7 @@ class ModificationComponent extends React.Component {

Sequence - {this.props.blockLength} blocks

+ options={SequenceEnumHelper.getOptions()} onChange={this.updateModifications} selected={SequenceEnumHelper.getValue(this.props.sequenceType ?? '').toString()}/>
diff --git a/src/enum/SearchEnum.ts b/src/enum/SearchEnum.ts index b912913..5bcc3d1 100644 --- a/src/enum/SearchEnum.ts +++ b/src/enum/SearchEnum.ts @@ -69,6 +69,7 @@ export class SearchEnumHelper { static getOptionsBySource(source: ServerEnum) { switch (source) { case ServerEnum.PUBCHEM: + case ServerEnum.COCONUT: return [ new SelectOption(SearchEnum.NAME.toString(), this.getName(SearchEnum.NAME)), new SelectOption(SearchEnum.SMILES.toString(), this.getName(SearchEnum.SMILES)), @@ -88,6 +89,7 @@ export class SearchEnumHelper { case ServerEnum.CHEBI: case ServerEnum.CHEMSPIDER: case ServerEnum.MASS_SPEC_BLOCKS: + case ServerEnum.NP_ATLAS: default: return this.getOptions(); } diff --git a/src/enum/ServerEnum.ts b/src/enum/ServerEnum.ts index 3b3356d..6af6398 100644 --- a/src/enum/ServerEnum.ts +++ b/src/enum/ServerEnum.ts @@ -7,9 +7,11 @@ import ChemSpiderFinder from "../finder/ChemSpiderFinder"; import MassSpecBlocksFinder from "../finder/MassSpecBlocksFinder"; import {SELECTED_CONTAINER, TOKEN} from "../constant/ApiConstants"; import ChebiFinder from "../finder/ChebiFinder"; +import CoconutFinder from "../finder/CoconutFinder"; +import NPAtlasFinder from "../finder/NPAtlasFinder"; export enum ServerEnum { - PUBCHEM, CHEMSPIDER, NORINE, PDB, CHEBI, MASS_SPEC_BLOCKS, DOI, SIDEROPHORE_BASE, LIPID_MAPS + PUBCHEM, CHEMSPIDER, NORINE, PDB, CHEBI, MASS_SPEC_BLOCKS, DOI, SIDEROPHORE_BASE, LIPID_MAPS, COCONUT, NP_ATLAS } export class ServerEnumHelper { @@ -24,7 +26,9 @@ export class ServerEnumHelper { new SelectOption(ServerEnum.MASS_SPEC_BLOCKS.toString(), this.getName(ServerEnum.MASS_SPEC_BLOCKS) + (containerName ? (' - ' + containerName) : '')), new SelectOption(ServerEnum.DOI.toString(), this.getName(ServerEnum.DOI)), new SelectOption(ServerEnum.SIDEROPHORE_BASE.toString(), this.getName(ServerEnum.SIDEROPHORE_BASE)), - new SelectOption(ServerEnum.LIPID_MAPS.toString(), this.getName(ServerEnum.LIPID_MAPS)) + new SelectOption(ServerEnum.LIPID_MAPS.toString(), this.getName(ServerEnum.LIPID_MAPS)), + new SelectOption(ServerEnum.COCONUT.toString(), this.getName(ServerEnum.COCONUT)), + new SelectOption(ServerEnum.NP_ATLAS.toString(), this.getName(ServerEnum.NP_ATLAS)) ]; } @@ -35,6 +39,8 @@ export class ServerEnumHelper { new SelectOption(ServerEnum.NORINE.toString(), this.getName(ServerEnum.NORINE)), new SelectOption(ServerEnum.PDB.toString(), this.getName(ServerEnum.PDB)), new SelectOption(ServerEnum.CHEBI.toString(), this.getName(ServerEnum.CHEBI)), + new SelectOption(ServerEnum.COCONUT.toString(), this.getName(ServerEnum.COCONUT)), + new SelectOption(ServerEnum.NP_ATLAS.toString(), this.getName(ServerEnum.NP_ATLAS)), new SelectOption(ServerEnum.MASS_SPEC_BLOCKS.toString(), this.getName(ServerEnum.MASS_SPEC_BLOCKS) + (containerName ? (' - ' + containerName) : '')) ]; } @@ -60,6 +66,11 @@ export class ServerEnumHelper { if (container) { return new MassSpecBlocksFinder(Number(container), token ?? undefined); } + break; + case ServerEnum.COCONUT: + return new CoconutFinder(); + case ServerEnum.NP_ATLAS: + return new NPAtlasFinder(); } return new PubChemFinder(); } @@ -85,6 +96,10 @@ export class ServerEnumHelper { return 'Siderophore Base'; case ServerEnum.LIPID_MAPS: return 'Lipid Maps'; + case ServerEnum.COCONUT: + return 'COCONUT'; + case ServerEnum.NP_ATLAS: + return 'NPAtlas'; } } @@ -107,6 +122,10 @@ export class ServerEnumHelper { return "http://bertrandsamuel.free.fr/siderophore_base/siderophore.php?id=" + identifier; case ServerEnum.LIPID_MAPS: return "https://www.lipidmaps.org/data/LMSDRecord.php?LMID=" + identifier; + case ServerEnum.COCONUT: + return "https://coconut.naturalproducts.net/compound/coconut_id/" + identifier; + case ServerEnum.NP_ATLAS: + return "https://www.npatlas.org/explore/compounds/" + identifier; } } @@ -115,7 +134,13 @@ export class ServerEnumHelper { identifier = "0"; } if (identifier.toUpperCase().includes('CHEBI:')) { - return identifier; + return identifier.toUpperCase(); + } + if (identifier.toUpperCase().includes('CNP')) { + return identifier.toUpperCase(); + } + if (identifier.toUpperCase().includes('NPA')) { + return identifier.toUpperCase(); } switch (database) { default: @@ -129,13 +154,17 @@ export class ServerEnumHelper { case ServerEnum.PDB: return 'PDB: ' + identifier; case ServerEnum.CHEBI: - return 'ChEBI:' + identifier; + return 'CHEBI:' + identifier; case ServerEnum.MASS_SPEC_BLOCKS: return 'MSB: ' + identifier; case ServerEnum.DOI: return 'DOI: ' + identifier; case ServerEnum.SIDEROPHORE_BASE: return 'SB: ' + identifier; + case ServerEnum.COCONUT: + return 'CNP' + '0'.repeat(7 - identifier.length) + identifier; + case ServerEnum.NP_ATLAS: + return 'NPA' + '0'.repeat(6 - identifier.length) + identifier; } } diff --git a/src/finder/CoconutFinder.ts b/src/finder/CoconutFinder.ts new file mode 100644 index 0000000..e3dc8c7 --- /dev/null +++ b/src/finder/CoconutFinder.ts @@ -0,0 +1,103 @@ +import IFinder from "./IFinder"; +import SingleStructure from "./SingleStructure"; +import Sleep from "../helper/Sleep"; +import {ServerEnum} from "../enum/ServerEnum"; +import ComputeHelper from "../helper/ComputeHelper"; + +const ENDPOINT_URI = "https://guarded-atoll-36331.herokuapp.com/https://coconut.naturalproducts.net/api/search/"; + +interface Molecule { + coconut_id: string; + name: string; + unique_smiles: string; + molecular_formula: string; +} + +class CoconutFinder implements IFinder { + + async simpleFind(parameter: string, query: string = 'simple?query=') { + if (parameter === '') { + return Sleep.noSleepPromise(); + } + if (query.includes('simple?query')) { + query += parameter; + } + return fetch(ENDPOINT_URI + query).then(async response => { + if (response.status === 200) { + let json = await response.json().catch(() => []); + if (json.naturalProducts.length > 0) { + return json.naturalProducts.map((molecule: Molecule) => { + let mass = 0; + try { + mass = ComputeHelper.computeMass(ComputeHelper.removeUnnecessaryCharactersFromFormula(molecule.molecular_formula ?? '')); + } catch (e) { + } + return new SingleStructure( + molecule.coconut_id, + ServerEnum.COCONUT, + molecule.name, + molecule.unique_smiles, + molecule.molecular_formula, + mass + ) + }); + } + } + return []; + }).catch(() => []); + } + + findByFormula(formula: string): Promise { + return this.simpleFind(formula); + } + + async findByIdentifier(id: string): Promise { + if (id === '') { + return Sleep.noSleepPromise(); + } + return fetch(ENDPOINT_URI + 'simple?query=' + id).then(async response => { + if (response.status === 200) { + let json = await response.json().catch(() => []); + if (json.naturalProducts.length > 0) { + let mass = 0; + try { + mass = ComputeHelper.computeMass(ComputeHelper.removeUnnecessaryCharactersFromFormula(json.naturalProducts[0].molecular_formula ?? '')); + } catch (e) { + } + return [new SingleStructure( + json.naturalProducts[0].coconut_id, + ServerEnum.COCONUT, + json.naturalProducts[0].name, + json.naturalProducts[0].unique_smiles, + json.naturalProducts[0].molecular_formula, + mass + )]; + } else { + return []; + } + } else { + return []; + } + }).catch(() => []); + } + + findByIdentifiers(ids: string[]): Promise { + return Sleep.noSleepPromise(); + } + + findByMass(mass: number): Promise { + return Sleep.noSleepPromise(); + } + + findByName(name: string): Promise { + return this.simpleFind(name); + } + + findBySmiles(smiles: string): Promise { + return this.simpleFind(smiles, 'exact-structure?type=inchi&max-hits=100&smiles=' + smiles); + } + + +} + +export default CoconutFinder; diff --git a/src/finder/NPAtlasFinder.ts b/src/finder/NPAtlasFinder.ts new file mode 100644 index 0000000..027367d --- /dev/null +++ b/src/finder/NPAtlasFinder.ts @@ -0,0 +1,90 @@ +import IFinder from "./IFinder"; +import SingleStructure from "./SingleStructure"; +import Sleep from "../helper/Sleep"; +import {ServerEnum} from "../enum/ServerEnum"; +import ComputeHelper from "../helper/ComputeHelper"; + +const ENDPOINT_URI = "https://guarded-atoll-36331.herokuapp.com/https://www.npatlas.org/api/v1/"; + +interface Molecule { + npaid: string; + original_name: string; + smiles: string; + mol_formula: string; +} + +const BASIC_SEARCH = 'compounds/basicSearch?'; +const PARAMS = '&threshold=0&origin_type=all&rank=all&skip=0&limit=100'; + +class NPAtlasFinder implements IFinder { + + basicSearch(endpoint: string, method: string, oneResult: boolean = false): Promise { + return fetch(endpoint, {method: method}).then(async response => { + if (response.status === 200) { + let json = await response.json().catch(() => []); + if (oneResult) { + let mass = 0; + try { + mass = ComputeHelper.computeMass(ComputeHelper.removeUnnecessaryCharactersFromFormula(json.mol_formula ?? '')); + } catch (e) { + } + return [new SingleStructure(json.npaid, ServerEnum.NP_ATLAS, json.original_name, json.smiles, json.mol_formula, mass)]; + } else { + if (json.length > 0) { + return json.map((molecule: Molecule) => { + let mass = 0; + try { + mass = ComputeHelper.computeMass(ComputeHelper.removeUnnecessaryCharactersFromFormula(molecule.mol_formula ?? '')); + } catch (e) { + } + return new SingleStructure(molecule.npaid, ServerEnum.NP_ATLAS, molecule.original_name, molecule.smiles, molecule.mol_formula, mass); + }); + } + } + } + return []; + }).catch(() => []); + } + + findByFormula(formula: string): Promise { + if (formula === '') { + return Sleep.noSleepPromise(); + } + return this.basicSearch(ENDPOINT_URI + BASIC_SEARCH + 'formula=' + formula + PARAMS, 'POST'); + } + + async findByIdentifier(id: string): Promise { + if (id === '') { + return Sleep.noSleepPromise(); + } + return this.basicSearch(ENDPOINT_URI + 'compound/' + id, 'GET', true); + } + + findByIdentifiers(ids: string[]): Promise { + return Sleep.noSleepPromise(); + } + + findByMass(mass: number): Promise { + if (mass === 0) { + return Sleep.noSleepPromise(); + } + return this.basicSearch(ENDPOINT_URI + 'compounds/massSearch?mass=' + mass + '&type=exact_mass&range=100&skip=0&limit=100', 'POST'); + } + + findByName(name: string): Promise { + if (name === '') { + return Sleep.noSleepPromise(); + } + return this.basicSearch(ENDPOINT_URI + BASIC_SEARCH + 'name=' + name + PARAMS, 'POST'); + } + + findBySmiles(smiles: string): Promise { + if (smiles === '') { + return Sleep.noSleepPromise(); + } + return this.basicSearch(ENDPOINT_URI + BASIC_SEARCH + 'smiles=' + smiles + '&method=sub' + PARAMS, 'POST'); + } + +} + +export default NPAtlasFinder; diff --git a/src/helper/ComputeHelper.ts b/src/helper/ComputeHelper.ts index f7e0cac..23dca23 100644 --- a/src/helper/ComputeHelper.ts +++ b/src/helper/ComputeHelper.ts @@ -122,6 +122,10 @@ export const H2 = 'H2'; class ComputeHelper { + public static removeUnnecessaryCharactersFromFormula(formula: string) { + return formula.replaceAll(/[[\]+\-*/\\?.,;{}:"'|<>~!@#$%^&()]/g, ''); + } + public static computeMass(formula: string) { let mass = 0; let map = this.formulaMap(formula); diff --git a/src/helper/FetchHelper.ts b/src/helper/FetchHelper.ts index 1963765..1962db7 100644 --- a/src/helper/FetchHelper.ts +++ b/src/helper/FetchHelper.ts @@ -3,6 +3,8 @@ import FlashType from "../component/FlashType"; import Flash from "../component/Flash"; import Sleep from "./Sleep"; import {CHEMSPIDER_ONE_KEY, ENDPOINT} from "../constant/Constants"; +import PubChemFinder from "../finder/PubChemFinder"; +import {ServerEnum} from "../enum/ServerEnum"; class FetchHelper { @@ -116,6 +118,19 @@ class FetchHelper { } } + static async findReference(key: number, smiles: string, context: any, SEL_EDIT_SOURCE: string, TXT_EDIT_IDENTIFIER: string) { + let finder = new PubChemFinder(); + let blocks = await finder.findBySmiles(smiles); + if (blocks.length > 0) { + context.flashRef.current!.activate(FlashType.OK, 'Reference found CID: ' + blocks[0].identifier); + context.setState({editable: key}, () => { + (document.getElementById(SEL_EDIT_SOURCE) as HTMLSelectElement).selectedIndex = ServerEnum.PUBCHEM; + (document.getElementById(TXT_EDIT_IDENTIFIER) as HTMLInputElement).value = blocks[0].identifier; + }); + } else { + context.flashRef.current!.activate(FlashType.BAD, 'Reference not found'); + } + } } diff --git a/src/import/AbstractImport.ts b/src/import/AbstractImport.ts index 9490b59..2c2e87a 100644 --- a/src/import/AbstractImport.ts +++ b/src/import/AbstractImport.ts @@ -8,6 +8,9 @@ import ChebiFinder from "../finder/ChebiFinder"; import ChemSpiderFinder from "../finder/ChemSpiderFinder"; import NorineFinder from "../finder/NorineFinder"; import FetchHelper from "../helper/FetchHelper"; +import CoconutFinder from "../finder/CoconutFinder"; +import NPAtlasFinder from "../finder/NPAtlasFinder"; +import IFinder from "../finder/IFinder"; abstract class AbstractImport { @@ -25,6 +28,7 @@ abstract class AbstractImport { this.getType = this.getType.bind(this); this.getLineLength = this.getLineLength.bind(this); this.transformation = this.transformation.bind(this); + this.setupSmiles = this.setupSmiles.bind(this); } async import(): Promise { @@ -46,7 +50,6 @@ abstract class AbstractImport { let errorStackBeforeLength = this.errorStack.length; await this.finder(); let send = await this.send(); - console.log(this.okStack.length, this.errorStack.length, errorStackBeforeLength); this.importedOk = this.okStack.length - (this.errorStack.length - errorStackBeforeLength); return send; } @@ -114,7 +117,7 @@ abstract class AbstractImport { } find(key: string) { - return this.okStack.find(e => e.identifier === key); + return this.okStack.filter(e => e.identifier === key); } abstract getType(): string; @@ -127,41 +130,35 @@ abstract class AbstractImport { return true; } - protected async finders(identifiers: string[], chebiIds: string[], chemspiderIds: string[], norineIds: string[]) { - let finder = new PubChemFinder(); - await finder.findByIdentifiers(identifiers).then(blocks => { - blocks.forEach(block => { - this.find(block.identifier).smiles = block.smiles; - }); - }); - - let chebiFinder = new ChebiFinder(); - await chebiFinder.findByIdentifiers(chebiIds).then(blocks => { - blocks.forEach(block => { - this.find(block.identifier).smiles = block.smiles; - }); - }); - + protected async finders(identifiers: string[], chebiIds: string[], chemspiderIds: string[], norineIds: string[], coconutIds: string[], npatlasIds: string[]) { let apikey = localStorage.getItem(CHEMSPIDER_KEY); if (!apikey) { FetchHelper.initializeChemSpider(); apikey = localStorage.getItem(CHEMSPIDER_KEY); } - let chemSpiderFinder = new ChemSpiderFinder(apikey ?? ''); - await chemSpiderFinder.findByIdentifiers(chemspiderIds).then(blocks => { - blocks.forEach(block => { - this.find(block.identifier).smiles = block.smiles; - }); - }); + await this.finderAll(new PubChemFinder(), identifiers); + await this.finderAll(new ChebiFinder(), chebiIds); + await this.finderAll(new ChemSpiderFinder(apikey ?? ''), chemspiderIds); + await this.finderAll(new NorineFinder(), norineIds); + await this.forFinder(new CoconutFinder(), coconutIds); + await this.forFinder(new NPAtlasFinder(), npatlasIds); + } - let norineFinder = new NorineFinder(); - await norineFinder.findByIdentifiers(norineIds).then(blocks => { - blocks.forEach(block => { - this.find(block.identifier).smiles = block.smiles; - }); - }); + async finderAll(finder: IFinder, ids: string[]) { + await finder.findByIdentifiers(ids).then(this.setupSmiles); + } + + async forFinder(finder: IFinder, ids: string[]) { + for (const id of ids) { + await finder.findByIdentifier(id).then(this.setupSmiles); + } } + setupSmiles(blocks: any[]) { + blocks.forEach(block => { + this.find(block.identifier).forEach(e => e.smiles = block.smiles); + }); + } } diff --git a/src/import/BlockImport.ts b/src/import/BlockImport.ts index 09e51c7..9a7a67c 100644 --- a/src/import/BlockImport.ts +++ b/src/import/BlockImport.ts @@ -34,6 +34,8 @@ class BlockImport extends AbstractImport { let norineIds: string[] = []; let chebiIds: string[] = []; let chemspiderIds: string[] = []; + let coconutIds: string[] = []; + let npatlasIds: string[] = []; this.okStack.forEach((item: any) => { if (item.smiles === null && item.source === ServerEnum.PUBCHEM && item.identifier) { identifiers.push(item.identifier); @@ -43,9 +45,13 @@ class BlockImport extends AbstractImport { chebiIds.push(item.identifier); } else if (item.smiles === null && item.source === ServerEnum.NORINE && item.identifier) { norineIds.push(item.identifier); + } else if (item.smiles === null && item.source === ServerEnum.COCONUT && item.identifier) { + coconutIds.push(item.identifier); + } else if (item.smiles === null && item.source === ServerEnum.NP_ATLAS && item.identifier) { + npatlasIds.push(item.identifier); } }); - await this.finders(identifiers, chebiIds, chemspiderIds, norineIds); + await this.finders(identifiers, chebiIds, chemspiderIds, norineIds, coconutIds, npatlasIds); return true; } diff --git a/src/import/SequenceImport.ts b/src/import/SequenceImport.ts index d6bb6ac..e1836e9 100644 --- a/src/import/SequenceImport.ts +++ b/src/import/SequenceImport.ts @@ -33,6 +33,8 @@ class SequenceImport extends AbstractImport { let norineIds: string[] = []; let chebiIds: string[] = []; let chemspiderIds: string[] = []; + let coconutIds: string[] = []; + let npatlasIds: string[] = []; this.okStack.forEach((item: any) => { if (item.smiles === null && item.identifier) { if (item.source === ServerEnum.PUBCHEM) { @@ -43,10 +45,14 @@ class SequenceImport extends AbstractImport { chebiIds.push(item.identifier); } else if (item.source === ServerEnum.CHEMSPIDER) { chemspiderIds.push(item.identifier); + } else if (item.source === ServerEnum.COCONUT) { + coconutIds.push(item.identifier); + } else if (item.source === ServerEnum.NP_ATLAS) { + npatlasIds.push(item.identifier); } } }); - await this.finders(pubChemIds, chebiIds, chemspiderIds, norineIds); + await this.finders(pubChemIds, chebiIds, chemspiderIds, norineIds, coconutIds, npatlasIds); return true; } diff --git a/src/page/BlockPage.tsx b/src/page/BlockPage.tsx index c0d64db..b288544 100644 --- a/src/page/BlockPage.tsx +++ b/src/page/BlockPage.tsx @@ -20,7 +20,7 @@ import PopupYesNo from "../component/PopupYesNo"; import TextInput from "../component/TextInput"; import ListComponent, {ListState} from "../component/ListComponent"; import {ERROR_LOGIN_NEEDED} from "../constant/FlashConstants"; -import {ServerEnum, ServerEnumHelper} from "../enum/ServerEnum"; +import {ServerEnumHelper} from "../enum/ServerEnum"; import {SelectInput} from "../component/SelectInput"; import PopupSmilesDrawer from "../component/PopupSmilesDrawer"; // @ts-ignore @@ -30,7 +30,6 @@ import Creatable from "react-select/creatable"; import FetchHelper from "../helper/FetchHelper"; import {DECIMAL_PLACES, ENDPOINT, SHOW_ID} from "../constant/Constants"; import ComputeHelper, {H2, H2O} from "../helper/ComputeHelper"; -import PubChemFinder from "../finder/PubChemFinder"; const TXT_EDIT_BLOCK_NAME = 'txt-edit-blockName'; const TXT_EDIT_ACRONYM = 'txt-edit-acronym'; @@ -104,7 +103,6 @@ class BlockPage extends ListComponent { this.newFamilyChange = this.newFamilyChange.bind(this); this.familyEditChange = this.familyEditChange.bind(this); this.refreshSmiles = this.refreshSmiles.bind(this); - this.findReference = this.findReference.bind(this); this.state = { list: [], familyOptions: [], @@ -372,20 +370,6 @@ class BlockPage extends ListComponent { }); } - async findReference(key: number, smiles: string) { - let finder = new PubChemFinder(); - let blocks = await finder.findBySmiles(smiles); - if (blocks.length > 0) { - this.flashRef.current!.activate(FlashType.OK, 'Reference found CID: ' + blocks[0].identifier); - this.setState({editable: key}, () => { - (document.getElementById(SEL_EDIT_SOURCE) as HTMLSelectElement).selectedIndex = ServerEnum.PUBCHEM; - (document.getElementById(TXT_EDIT_IDENTIFIER) as HTMLInputElement).value = blocks[0].identifier; - }); - } else { - this.flashRef.current!.activate(FlashType.BAD, 'Reference not found'); - } - } - render() { return (
@@ -531,8 +515,7 @@ class BlockPage extends ListComponent { - + :
} + diff --git a/src/page/ReferencePage.tsx b/src/page/ReferencePage.tsx index 058f270..18f94b1 100644 --- a/src/page/ReferencePage.tsx +++ b/src/page/ReferencePage.tsx @@ -59,6 +59,16 @@ class ReferencePage extends React.Component { DOI: 10.1093/nar/28.1.235

+

COCONUT

+

COCONUT is COlleCtion of Open Natural prodUcTs used by MSB to search information.
+ DOI: 10.1186/s13321-020-00478-9 +

+ +

NP Atlas

+

NP Atlas is The Natural Products Atlas used by MSB to search information.
+ DOI: 10.1021/acscentsci.9b00806 +

+

Bbdgnc

Bbdgnc is first version of this application developed for my bachelor's thesis.
Github: version

diff --git a/src/parser/CoconutParser.ts b/src/parser/CoconutParser.ts new file mode 100644 index 0000000..2ccefcc --- /dev/null +++ b/src/parser/CoconutParser.ts @@ -0,0 +1,20 @@ +import IParser, {Accept, ParseResult, Reject} from "./IParser"; +import {Reference} from "./ReferenceParser"; +import {ServerEnum} from "../enum/ServerEnum"; + +class CoconutParser implements IParser { + + parse(text: string): ParseResult { + if (text.match('^CNP[0-9]{7}')) { + return new Accept(new Reference(ServerEnum.COCONUT, text.substring(0, 10)), text.substring(10)); + } + return this.reject(); + } + + reject(): Reject { + return new Reject('Not match CNP'); + } + +} + +export default CoconutParser; diff --git a/src/parser/NPAtlasParser.ts b/src/parser/NPAtlasParser.ts new file mode 100644 index 0000000..1748285 --- /dev/null +++ b/src/parser/NPAtlasParser.ts @@ -0,0 +1,20 @@ +import IParser, {Accept, ParseResult, Reject} from "./IParser"; +import {Reference} from "./ReferenceParser"; +import {ServerEnum} from "../enum/ServerEnum"; + +class NPAtlasParser implements IParser { + + parse(text: string): ParseResult { + if (text.match('^NPA[0-9]{6}')) { + return new Accept(new Reference(ServerEnum.NP_ATLAS, text.substring(0, 9)), text.substring(9)); + } + return this.reject(); + } + + reject(): Reject { + return new Reject('Not match NPA'); + } + +} + +export default NPAtlasParser; diff --git a/src/parser/ReferenceParser.ts b/src/parser/ReferenceParser.ts index cc82186..bc47221 100644 --- a/src/parser/ReferenceParser.ts +++ b/src/parser/ReferenceParser.ts @@ -6,6 +6,8 @@ import SmilesReferenceParser from "./SmilesReferenceParser"; import NorineReferenceParser from "./NorineReferenceParser"; import DoiParser from "./DoiParser"; import LmfaParser from "./LmfaParser"; +import CoconutParser from "./CoconutParser"; +import NPAtlasParser from "./NPAtlasParser"; export class Reference { source: ServerEnum | null = null; @@ -56,6 +58,19 @@ class ReferenceParser implements IParser { if (lfmaResult.isAccepted()) { return lfmaResult; } + + let coconutParser = new CoconutParser(); + let coconutResult = coconutParser.parse(text); + if (coconutResult.isAccepted()) { + return coconutResult; + } + + let npAtlasParser = new NPAtlasParser(); + let npAtlasResult = npAtlasParser.parse(text); + if (npAtlasResult.isAccepted()) { + return npAtlasResult; + } + return this.reject(); } diff --git a/src/parser/ServerNumReferenceParser.ts b/src/parser/ServerNumReferenceParser.ts index 89b3693..ab9a5be 100644 --- a/src/parser/ServerNumReferenceParser.ts +++ b/src/parser/ServerNumReferenceParser.ts @@ -3,6 +3,7 @@ import ServerNumParser from "./ServerNumParser"; import NatParser from "./NatParser"; import {Reference} from "./ReferenceParser"; import ZeroParser from "./ZeroParser"; +import {ServerEnum} from "../enum/ServerEnum"; class ServerNumReferenceParser implements IParser { parse(text: string): ParseResult { @@ -21,11 +22,11 @@ class ServerNumReferenceParser implements IParser { } return this.reject(); } - return new Accept(new Reference(serverResult.getResult(), result.getResult()), result.getReminder()); + return new Accept(new Reference(serverResult.getResult(), (serverResult.getResult() === ServerEnum.CHEBI ? 'CHEBI:' : '') + result.getResult()), result.getReminder()); } reject(): Reject { - return new Reject('Not match CSID: number | CID: number'); + return new Reject('Not match CSID: | CID: | CHEBI: '); } } diff --git a/src/tests/Reference.test.tsx b/src/tests/Reference.test.tsx index ef78285..7e05360 100644 --- a/src/tests/Reference.test.tsx +++ b/src/tests/Reference.test.tsx @@ -100,5 +100,5 @@ test('ChEBI reference test ok', () => { let parser = new ServerNumReferenceParser(); let result = parser.parse('CHEBI: 69618'); expect(result.isAccepted()).toEqual(true); - expect(result.getResult()).toEqual(new Reference(ServerEnum.CHEBI, '69618')); + expect(result.getResult()).toEqual(new Reference(ServerEnum.CHEBI, 'CHEBI:69618')); });