frontend-typescript: linting and prettier

This commit is contained in:
chandi 2021-04-04 13:52:04 +02:00
parent 9f138b3a08
commit dee3043405
6 changed files with 917 additions and 190 deletions

View file

@ -1,2 +1,2 @@
*.ts
*.tsx
.eslintrc.js
src/react-app-env.d.ts

View file

@ -4,6 +4,96 @@
"es6": true,
"node": true
},
"overrides": [
{
"files":["**/*.{ts,tsx}"],
"plugins": ["prettier", "@typescript-eslint"],
"extends": ["airbnb-typescript", "react-app", "prettier"],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"project": "./tsconfig.json"
},
"settings": {
"import/resolver": {
"typescript": {
"alwaysTryTypes": true
}
}
},
"rules": {
"object-curly-spacing": ["warn", "always"],
"no-unused-vars": [
"warn",
{
"vars": "all",
"args": "none"
}
],
"@typescript-eslint/semi": [
"off"
],
"@typescript-eslint/no-unused-vars": [
"warn",
{
"vars": "all",
"args": "none"
}
],
"max-len": [
"warn",
{
"code": 100,
"ignoreStrings": true,
"ignoreTemplateLiterals": true,
"ignoreComments": true
}
],
"prefer-destructuring": [
"error",
{
"VariableDeclarator": {
"array": false,
"object": true
},
"AssignmentExpression": {
"array": false,
"object": false
}
}, {
"enforceForRenamedProperties": false
}
],
"no-plusplus": [
"error",
{
"allowForLoopAfterthoughts": true
}
],
"react/jsx-key": "error",
"import/no-extraneous-dependencies": [
"error",
{
"devDependencies": [
"**/*.test.js",
"**/*.test.jsx",
"**/*.test.ts",
"**/*.test.tsx",
"src/tests/**/*"
]
}
],
"react/jsx-props-no-spreading": "off",
"import/prefer-default-export": "off",
"react/jsx-boolean-value": "off",
"react/prop-types": "off",
"react/no-unescaped-entities": "off",
"react/jsx-one-expression-per-line": "off",
"react/jsx-wrap-multilines": "off",
"react/destructuring-assignment": "off"
}
}
],
"plugins": [
"import",
"react"

7
app/.prettierrc Normal file
View file

@ -0,0 +1,7 @@
{
"trailingComma": "es5",
"printWidth": 100,
"semi": false,
"singleQuote": true,
"tabWidth": 2
}

View file

@ -69,7 +69,8 @@
"eject": "react-scripts eject",
"electron": "electron --no-sandbox .",
"dev": "nf start -p 3000",
"lint": "eslint -c .eslintrc.json --ext .js src"
"lint": "eslint -c .eslintrc.json --ext .js,.ts,.tsx src",
"format": "prettier --write 'src/**/*.{ts,tsx}'"
},
"browserslist": [
">0.2%",
@ -78,9 +79,26 @@
"not op_mini all"
],
"devDependencies": {
"@typescript-eslint/eslint-plugin": "^4.20.0",
"@typescript-eslint/parser": "^4.20.0",
"babel-eslint": "^10.1.0",
"electron": "^12.0.0",
"eslint-plugin-react": "^7.19.0",
"eslint-config-airbnb-typescript": "^12.3.1",
"eslint-config-prettier": "^8.1.0",
"eslint-config-react-app": "^6.0.0",
"eslint-import-resolver-typescript": "^2.4.0",
"eslint-plugin-flowtype": "^5.4.0",
"eslint-plugin-import": "^2.22.1",
"eslint-plugin-jest": "^24.3.3",
"eslint-plugin-jsx-a11y": "^6.4.1",
"eslint-plugin-prettier": "^3.3.1",
"eslint-plugin-react": "^7.23.1",
"eslint-plugin-react-hooks": "^4.2.0",
"eslint-webpack-plugin": "^2.5.3",
"foreman": "^3.0.1",
"prettier": "^2.2.1",
"prettier-eslint": "^12.0.0",
"prettier-eslint-cli": "^5.0.1",
"redux-mock-store": "^1.5.3"
}
}

View file

@ -1,151 +1,152 @@
/* eslint-disable global-require */
/* eslint-disable import/no-dynamic-require */
const list = [
{
name : 'English',
file : 'en',
locale : [ 'en', 'en-en' ]
},
{
name : 'Czech',
file : 'cs',
locale : [ 'cs', 'cs-cs' ]
},
{
name : 'Chinese (Simplified)',
file : 'cn',
locale : [ 'zn', 'zn-zn', 'zn-cn' ]
}, // hans
{
name : 'Chinese (Traditional)',
file : 'tw',
locale : [ 'zn-tw', 'zn-hk', 'zn-sg' ]
}, // hant
{
name : 'Croatian',
file : 'hr',
locale : [ 'hr', 'hr-hr' ]
},
{
name : 'Danish',
file : 'dk',
locale : [ 'dk', 'dk-dk' ]
},
{
name : 'French',
file : 'fr',
locale : [ 'fr', 'fr-fr' ]
},
{
name : 'German',
file : 'de',
locale : [ 'de', 'de-de' ]
},
{
name : 'Greek',
file : 'el',
locale : [ 'el', 'el-el' ]
},
{
name : 'Hindi',
file : 'hi',
locale : [ 'hi', 'hi-hi' ]
},
{
name : 'Hungarian',
file : 'hu',
locale : [ 'hu', 'hu-hu' ]
},
{
name : 'Italian',
file : 'it',
locale : [ 'it', 'it-it' ]
},
{
name : 'Kazakh',
file : 'kk',
locale : [ 'kk', 'kk-kz ' ]
},
{
name : 'Latvian',
file : 'lv',
locale : [ 'lv', 'lv-lv' ]
},
{
name : 'Norwegian',
file : 'nb',
locale : [ 'nb', 'nb-no' ]
},
{
name : 'Polish',
file : 'pl',
locale : [ 'pl', 'pl-pl' ]
},
{
name : 'Portuguese',
file : 'pt',
locale : [ 'pt', 'pt-pt' ]
},
{
name : 'Romanian',
file : 'ro',
locale : [ 'ro', 'ro-ro' ]
},
{
name : 'Russian',
file : 'ru',
locale : [ 'ru', 'ru-ru' ]
},
{
name : 'Spanish',
file : 'es',
locale : [ 'es', 'es-es' ]
},
{
name : 'Turkish',
file : 'tr',
locale : [ 'tr', 'tr-tr' ]
},
{
name : 'Ukrainian',
file : 'uk',
locale : [ 'uk', 'uk-uk' ]
}
];
{
name: 'English',
file: 'en',
locale: ['en', 'en-en'],
},
{
name: 'Czech',
file: 'cs',
locale: ['cs', 'cs-cs'],
},
{
name: 'Chinese (Simplified)',
file: 'cn',
locale: ['zn', 'zn-zn', 'zn-cn'],
}, // hans
{
name: 'Chinese (Traditional)',
file: 'tw',
locale: ['zn-tw', 'zn-hk', 'zn-sg'],
}, // hant
{
name: 'Croatian',
file: 'hr',
locale: ['hr', 'hr-hr'],
},
{
name: 'Danish',
file: 'dk',
locale: ['dk', 'dk-dk'],
},
{
name: 'French',
file: 'fr',
locale: ['fr', 'fr-fr'],
},
{
name: 'German',
file: 'de',
locale: ['de', 'de-de'],
},
{
name: 'Greek',
file: 'el',
locale: ['el', 'el-el'],
},
{
name: 'Hindi',
file: 'hi',
locale: ['hi', 'hi-hi'],
},
{
name: 'Hungarian',
file: 'hu',
locale: ['hu', 'hu-hu'],
},
{
name: 'Italian',
file: 'it',
locale: ['it', 'it-it'],
},
{
name: 'Kazakh',
file: 'kk',
locale: ['kk', 'kk-kz '],
},
{
name: 'Latvian',
file: 'lv',
locale: ['lv', 'lv-lv'],
},
{
name: 'Norwegian',
file: 'nb',
locale: ['nb', 'nb-no'],
},
{
name: 'Polish',
file: 'pl',
locale: ['pl', 'pl-pl'],
},
{
name: 'Portuguese',
file: 'pt',
locale: ['pt', 'pt-pt'],
},
{
name: 'Romanian',
file: 'ro',
locale: ['ro', 'ro-ro'],
},
{
name: 'Russian',
file: 'ru',
locale: ['ru', 'ru-ru'],
},
{
name: 'Spanish',
file: 'es',
locale: ['es', 'es-es'],
},
{
name: 'Turkish',
file: 'tr',
locale: ['tr', 'tr-tr'],
},
{
name: 'Ukrainian',
file: 'uk',
locale: ['uk', 'uk-uk'],
},
]
export const detect = () => {
const localeFull = (navigator.language || (navigator as any).browserLanguage).toLowerCase();
const localeFull = (navigator.language || (navigator as any).browserLanguage).toLowerCase()
// const localeCountry = localeFull.split(/[-_]/)[0];
// const localeCountry = localeFull.split(/[-_]/)[0];
// const localeRegion = localeFull.split(/[-_]/)[1] || null;
// const localeRegion = localeFull.split(/[-_]/)[1] || null;
return localeFull;
};
return localeFull
}
export const getList = () => list;
export const getList = () => list
export interface ILocale {
name: string
file: string
locale: string[]
messages: any
name: string
file: string
locale: string[]
messages: any
}
export const loadOne = (locale: string): ILocale => {
let res: any = {};
let res: any = {}
try {
res = list.filter((item) =>
item.locale.includes(locale) || item.locale.includes(locale.split(/[-_]/)[0])
)[0];
try {
res = list.filter(
(item) => item.locale.includes(locale) || item.locale.includes(locale.split(/[-_]/)[0])
)[0]
res.messages = require(`./${res.file}`);
} catch {
res.messages = require(`./${res.file}`)
} catch {
res = list.filter((item) => item.locale.includes('en'))[0]
res = list.filter((item) => item.locale.includes('en'))[0];
res.messages = require(`./${res.file}`)
}
res.messages = require(`./${res.file}`);
}
return res;
};
return res
}

File diff suppressed because it is too large Load diff