diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100755 index 000000000..fa53aef07 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,88 @@ +{ + "env": { + "browser": true, + "es6": true, + "node": true, + "jest": true + }, + "extends": ["react-app", "airbnb", "prettier", "prettier/react"], + "globals": { + "Atomics": "readonly", + "SharedArrayBuffer": "readonly" + }, + "parserOptions": { + "ecmaFeatures": { + "jsx": true + }, + "ecmaVersion": 2018, + "sourceType": "module" + }, + "plugins": ["import", "prettier", "react"], + "rules": { + "prettier/prettier": [ + "error", + { + "printWidth": 120, + "tabWidth": 2, + "useTabs": false, + "semi": true, + "singleQuote": true, + "arrowParens": "always", + "trailingComma": "all", + "jsxBracketSameLine": true, + "jsxSingleQuote": true + } + ], + "class-methods-use-this": [ + "warn", + { + "exceptMethods": [ + "componentDidCatch", + "componentDidMount", + "componentDidUpdate", + "componentWillMount", + "componentWillReceiveProps", + "componentWillUnmount", + "componentWillUpdate", + "render", + "shouldComponentUpdate" + ] + } + ], + "no-alert": "error", + "no-await-in-loop": "warn", + "no-console": "off", + "no-continue": "off", + "no-param-reassign": "off", + "no-plusplus": "off", + "no-restricted-syntax": ["off", "ForOfStatement"], + "no-underscore-dangle": "off", + "no-nested-ternary": "off", + "no-use-before-define": ["error", "nofunc"], + "guard-for-in": "off", + "global-require": "off", + "arrow-body-style": "off", + "prefer-template": "off", + "spaced-comment": "off", + "react/jsx-filename-extension": ["error", { "extensions": [".js", ".jsx"] }], + "react/destructuring-assignment": "off", + "react/no-multi-comp": "off", + "react/no-array-index-key": "off", + "react/no-did-update-set-state": "off", + "import/prefer-default-export": "off", + "jsx-a11y/anchor-is-valid": [ + "error", + { + "components": ["Link"], + "specialLink": ["to"] + } + ] + }, + "settings": { + "import/resolver": { + "node": { + "moduleDirectory": ["node_modules", "src/"] + } + } + } +} diff --git a/.prettierrc b/.prettierrc new file mode 100755 index 000000000..a2e41bb42 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,11 @@ +{ + "printWidth": 120, + "tabWidth": 2, + "useTabs": false, + "semi": true, + "singleQuote": true, + "arrowParens": "always", + "trailingComma": "all", + "jsxBracketSameLine": true, + "jsxSingleQuote": true +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100755 index 000000000..e58f1cc25 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "editor.formatOnPaste": true, + "editor.formatOnSave": true +} \ No newline at end of file diff --git a/jsconfig.json b/jsconfig.json new file mode 100755 index 000000000..51c266b67 --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "*": ["src/*"] + } + } +} \ No newline at end of file diff --git a/package.json b/package.json index 678215315..01d559749 100755 --- a/package.json +++ b/package.json @@ -5,32 +5,28 @@ "homepage": "https://agentlab.ru/rdf-scheme-editor", "dependencies": { "aphrodite": "^2.3.1", - "antd": "^3.14.1", - "i18next": "^15.0.2", + "antd": "^3.16.3", + "global": "^4.3.2", + "i18next": "^15.0.9", "i18next-browser-languagedetector": "^3.0.0", "i18next-xhr-backend": "^2.0.0", "isomorphic-unfetch": "^3.0.0", - "global": "^4.3.2", "prop-types": "^15.6.2", - "react": "^16.8.1", - "react-dom": "^16.8.1", + "react": "^16.8.6", + "react-dom": "^16.8.6", "react-lifecycles-compat": "^3.0.4", - "react-i18next": "^10.0.5", - "react-jsonschema-form-antd": "^0.1.3", - "react-redux": "^6.0.0", - "react-scripts": "2.1.3" + "react-i18next": "^10.7.0", + "react-redux": "^7.0.2", + "react-scripts": "2.1.8" }, "scripts": { "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject", - "storybook": "start-storybook -p 9009 -s public -c .storybook", - "build-storybook": "build-storybook -s public" - }, - "eslintConfig": { - "extends": "react-app" - }, + "storybook": "start-storybook -p 9009 -s ./public -c .storybook", + "build-storybook": "build-storybook -s ./public" + } "browserslist": [ ">0.2%", "not dead", @@ -38,32 +34,48 @@ "not op_mini all" ], "devDependencies": { - "@babel/core": "^7.2.2", - "@storybook/addon-a11y": "4.1.11", - "@storybook/addon-actions": "4.1.11", - "@storybook/addon-backgrounds": "4.1.11", - "@storybook/addon-centered": "4.1.11", + "@babel/core": "^7.4.3", + "@emotion/core": "^10.0.10", + "@storybook/addon-a11y": "^5.0.6", + "@storybook/addon-actions": "^5.0.6", + "@storybook/addon-backgrounds": "^5.0.6", + "@storybook/addon-centered": "^5.0.6", "@storybook/addon-console": "^1.1.0", - "@storybook/addon-events": "4.1.11", - "@storybook/addon-info": "4.1.11", - "@storybook/addon-jest": "4.1.11", - "@storybook/addon-knobs": "4.1.11", - "@storybook/addon-links": "4.1.11", - "@storybook/addon-notes": "4.1.11", - "@storybook/addon-options": "4.1.11", - "@storybook/addon-storyshots": "4.1.11", - "@storybook/addons": "4.1.11", - "@storybook/client-logger": "4.1.11", - "@storybook/react": "4.1.11", - "babel-loader": "^8.0.5", - "react-test-renderer": "^16.8.1", + "@storybook/addon-events": "^5.0.6", + "@storybook/addon-info": "^5.0.6", + "@storybook/addon-jest": "^5.0.6", + "@storybook/addon-knobs": "^5.0.6", + "@storybook/addon-links": "^5.0.6", + "@storybook/addon-notes": "^5.0.6", + "@storybook/addon-options": "^5.0.6", + "@storybook/addon-storyshots": "^5.0.6", + "@storybook/addons": "^5.0.6", + "@storybook/client-logger": "^5.0.6", + "@storybook/react": "^5.0.6", + "enzyme": "^3.9.0", + "enzyme-adapter-react-16": "^1.12.1", + "enzyme-to-json": "^3.3.5", + "eslint": "^5.12.0", + "eslint-config-airbnb": "^17.1.0", + "eslint-config-prettier": "^4.1.0", + "eslint-import-resolver-alias": "^1.1.2", + "eslint-plugin-import": "^2.17.1", + "eslint-plugin-jsx-a11y": "^6.2.1", + "eslint-plugin-prettier": "^3.0.1", + "eslint-plugin-react": "^7.12.4", + "husky": "^1.3.1", + "jest": "23.6.0", + "jest-emotion": "^10.0.10", + "jest-json-schema": "^2.0.2", + "prettier": "1.16.4", + "pretty-quick": "^1.10.0", + "react-test-renderer": "^16.8.6", "require-context.macro": "^1.0.4", - "storybook-addon-i18next": "^0.1.2", - "enzyme": "^3.7.0", - "enzyme-adapter-react-16": "^1.9.1", - "enzyme-to-json": "^3.3.4", - "jest": "^23.6.0", - "jest-emotion": "^10.0.7", - "react-scripts": "^2.1.3" + "storybook-addon-i18next": "^1.0.5" + }, + "husky": { + "hooks": { + "pre-commit": "pretty-quick --staged" + } } } diff --git a/run-in-container.ps1 b/run-in-container.ps1 old mode 100644 new mode 100755 index a203a10b2..79c881bfe --- a/run-in-container.ps1 +++ b/run-in-container.ps1 @@ -1 +1 @@ -docker run -p 3043:3000/tcp -p 3083:9009/tcp -p 35729:35729/tcp --env CHOKIDAR_USEPOLLING=true -it --rm --name rdf-scheme-editor -v ${PWD}:/usr/src/app:rw -w /usr/src/app node:11 bash +docker run -p 3000:3000/tcp -p 9009:9009/tcp -p 9229:9229/tcp -p 35729:35729/tcp --env CHOKIDAR_USEPOLLING=true -it --rm --name rdf-scheme-editor -v ${PWD}:/usr/src/app:rw -w /usr/src/app -u "node" node:11.9 bash diff --git a/run-in-container.sh b/run-in-container.sh index 39e4775f4..84ff1d0ac 100755 --- a/run-in-container.sh +++ b/run-in-container.sh @@ -1,2 +1,2 @@ #!/bin/bash -docker run -p 3043:3000/tcp -p 3083:9009/tcp -it --rm --name rdf-scheme-editor -v "$PWD":/usr/src/app -w /usr/src/app node:11 bash +docker run -p 3000:3000/tcp -p 9009:9009/tcp -p 9229:9229/tcp -it --rm --name rdf-scheme-editor -v "$PWD":/usr/src/app -w /usr/src/app -u "node" node:11.9 bash