diff --git a/.babelrc b/.babelrc
index 38bb56bdf..5a7af638e 100644
--- a/.babelrc
+++ b/.babelrc
@@ -1,7 +1,7 @@
{
"presets": [
"@babel/preset-react",
- "@babel/preset-flow",
+ "@babel/preset-typescript",
[
"@babel/preset-env",
{
diff --git a/.circleci/config.yml b/.circleci/config.yml
index bf7e67546..e847cf3b1 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -41,8 +41,8 @@ jobs:
name: lint
command: yarn lint
- run:
- name: flow
- command: yarn flow check --max-workers 4
+ name: typescript
+ command: yarn tsc
- run:
name: test
command: yarn test
diff --git a/.dockerignore b/.dockerignore
index 9a2b306ca..f2dc90801 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -6,14 +6,13 @@ __mocks__
.DS_Store
.env*
.eslint*
-.flowconfig
.log
Makefile
Procfile
app.json
+crowdin.yml
build
docker-compose.yml
fakes3
-flow-typed
node_modules
-setupJest.js
\ No newline at end of file
+tsconfig.json
diff --git a/.eslintrc b/.eslintrc
index 8eeaa95b1..7e2d5b354 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -1,20 +1,34 @@
{
- "parser": "babel-eslint",
+ "parser": "@typescript-eslint/parser",
+ "parserOptions": {
+ "sourceType": "module",
+ "extraFileExtensions": [".json"],
+ "ecmaFeatures": {
+ "jsx": true
+ }
+ },
"extends": [
- "react-app",
- "plugin:import/errors",
- "plugin:import/warnings",
- "plugin:flowtype/recommended",
- "plugin:react-hooks/recommended"
+ "eslint:recommended",
+ "plugin:@typescript-eslint/recommended",
+ "plugin:import/recommended",
+ "plugin:import/typescript",
+ "plugin:react-hooks/recommended",
+ "plugin:prettier/recommended"
],
"plugins": [
- "prettier",
- "flowtype"
+ "@typescript-eslint",
+ "eslint-plugin-import",
+ "eslint-plugin-node",
+ "eslint-plugin-react",
+ "eslint-plugin-react-hooks",
+ "import"
],
"rules": {
"eqeqeq": 2,
- "no-unused-vars": 2,
"no-mixed-operators": "off",
+ "padding-line-between-statements": ["error", { "blankLine": "always", "prev": "*", "next": "export" }],
+ "lines-between-class-members": ["error", "always", { "exceptAfterSingleLine": true }],
+ "import/newline-after-import": 2,
"import/order": [
"error",
{
@@ -23,53 +37,48 @@
},
"pathGroups": [
{
- "pattern": "shared/**",
+ "pattern": "@shared/**",
"group": "external",
"position": "after"
},
{
- "pattern": "stores",
+ "pattern": "@server/**",
"group": "external",
"position": "after"
},
{
- "pattern": "stores/**",
+ "pattern": "~/stores",
"group": "external",
"position": "after"
},
{
- "pattern": "models/**",
+ "pattern": "~/stores/**",
"group": "external",
"position": "after"
},
{
- "pattern": "scenes/**",
+ "pattern": "~/models/**",
"group": "external",
"position": "after"
},
{
- "pattern": "components/**",
+ "pattern": "~/scenes/**",
+ "group": "external",
+ "position": "after"
+ },
+ {
+ "pattern": "~/components/**",
+ "group": "external",
+ "position": "after"
+ },
+ {
+ "pattern": "~/**",
"group": "external",
"position": "after"
}
]
}
],
- "flowtype/require-valid-file-annotation": [
- 2,
- "always",
- {
- "annotationStyle": "line"
- }
- ],
- "flowtype/space-after-type-colon": [
- 2,
- "always"
- ],
- "flowtype/space-before-type-colon": [
- 2,
- "never"
- ],
"prettier/prettier": [
"error",
{
@@ -84,21 +93,13 @@
"pragma": "React",
"version": "detect"
},
- "import/resolver": {
- "node": {
- "paths": [
- "app",
- "."
- ]
- }
+ "import/parsers": {
+ "@typescript-eslint/parser": [".ts", ".tsx"]
},
- "flowtype": {
- "onlyFilesWithFlowAnnotation": false
+ "import/resolver": {
+ "typescript": {}
}
},
- "env": {
- "jest": true
- },
"globals": {
"EDITOR_VERSION": true
}
diff --git a/.flowconfig b/.flowconfig
deleted file mode 100644
index 7e630b565..000000000
--- a/.flowconfig
+++ /dev/null
@@ -1,44 +0,0 @@
-[include]
-.*/app/.*
-.*/server/.*
-.*/shared/.*
-
-[ignore]
-.*/node_modules/tiny-cookie/flow/.*
-.*/node_modules/styled-components/.*
-.*/node_modules/polished/.*
-.*/node_modules/mobx/.*.flow
-.*/node_modules/react-side-effect/.*
-.*/node_modules/fbjs/.*
-.*/node_modules/config-chain/.*
-.*/node_modules/yjs/.*
-.*/node_modules/y-prosemirror/.*
-.*/node_modules/y-protocols/.*
-.*/node_modules/y-indexeddb/.*
-.*/node_modules/lib0/.*
-.*/server/scripts/.*
-*.test.js
-
-[libs]
-
-[options]
-emoji=true
-sharedmemory.heap_size=3221225472
-
-module.system.node.resolve_dirname=node_modules
-module.system.node.resolve_dirname=app
-
-module.name_mapper='^\(.*\)\.md$' -> 'empty/object'
-module.name_mapper='^shared\/\(.*\)$' -> '