bitwardenjavascripttypescriptangularelectronclidesktopnodejswebextensionfirefoxbrowser-extensionchromesafari
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
175 lines
5.4 KiB
175 lines
5.4 KiB
{ |
|
"root": true, |
|
"env": { |
|
"browser": true, |
|
"webextensions": true |
|
}, |
|
"overrides": [ |
|
{ |
|
"files": ["*.ts", "*.js"], |
|
"plugins": ["@typescript-eslint", "rxjs", "rxjs-angular", "import"], |
|
"parser": "@typescript-eslint/parser", |
|
"parserOptions": { |
|
"project": ["./tsconfig.eslint.json"], |
|
"sourceType": "module", |
|
"ecmaVersion": 2020 |
|
}, |
|
"extends": [ |
|
"eslint:recommended", |
|
"plugin:@typescript-eslint/recommended", |
|
"plugin:import/recommended", |
|
"plugin:import/typescript", |
|
"prettier", |
|
"plugin:rxjs/recommended" |
|
], |
|
"settings": { |
|
"import/parsers": { |
|
"@typescript-eslint/parser": [".ts"] |
|
}, |
|
"import/resolver": { |
|
"typescript": { |
|
"alwaysTryTypes": true |
|
} |
|
} |
|
}, |
|
"rules": { |
|
"@typescript-eslint/no-explicit-any": "off", // TODO: This should be re-enabled |
|
"@typescript-eslint/no-unused-vars": ["error", { "args": "none" }], |
|
"@typescript-eslint/explicit-member-accessibility": [ |
|
"error", |
|
{ |
|
"accessibility": "no-public" |
|
} |
|
], |
|
"@typescript-eslint/no-this-alias": [ |
|
"error", |
|
{ |
|
"allowedNames": ["self"] |
|
} |
|
], |
|
"no-console": "error", |
|
"import/no-unresolved": "off", // TODO: Look into turning off once each package is an actual package. |
|
"import/order": [ |
|
"error", |
|
{ |
|
"alphabetize": { |
|
"order": "asc" |
|
}, |
|
"newlines-between": "always", |
|
"pathGroups": [ |
|
{ |
|
"pattern": "@bitwarden/**", |
|
"group": "external", |
|
"position": "after" |
|
}, |
|
{ |
|
"pattern": "src/**/*", |
|
"group": "parent", |
|
"position": "before" |
|
} |
|
], |
|
"pathGroupsExcludedImportTypes": ["builtin"] |
|
} |
|
], |
|
"rxjs-angular/prefer-takeuntil": "error", |
|
"rxjs/no-exposed-subjects": ["error", { "allowProtected": true }], |
|
"no-restricted-syntax": [ |
|
"error", |
|
{ |
|
"message": "Calling `svgIcon` directly is not allowed", |
|
"selector": "CallExpression[callee.name='svgIcon']" |
|
}, |
|
{ |
|
"message": "Accessing FormGroup using `get` is not allowed, use `.value` instead", |
|
"selector": "ChainExpression[expression.object.callee.property.name='get'][expression.property.name='value']" |
|
} |
|
], |
|
"curly": ["error", "all"], |
|
"import/namespace": ["off"], // This doesn't resolve namespace imports correctly, but TS will throw for this anyway |
|
"import/no-restricted-paths": [ |
|
"error", |
|
{ |
|
"zones": [ |
|
// Do not allow angular/node code to be imported into common |
|
{ |
|
"target": "./libs/common/**/*", |
|
"from": "./libs/angular/**/*" |
|
}, |
|
{ |
|
"target": "./libs/common/**/*", |
|
"from": "./libs/node/**/*" |
|
}, |
|
{ |
|
"target": "./libs/common/**/*", |
|
"from": "./libs/importer/**/*" |
|
}, |
|
{ |
|
"target": "./libs/common/**/*", |
|
"from": "./libs/exporter/**/*" |
|
} |
|
] |
|
} |
|
], |
|
"no-restricted-imports": [ |
|
"error", |
|
{ "patterns": ["src/**/*"], "paths": ["@fluffy-spoon/substitute"] } |
|
] |
|
} |
|
}, |
|
{ |
|
"files": ["*.html"], |
|
"parser": "@angular-eslint/template-parser", |
|
"plugins": ["@angular-eslint/template", "tailwindcss"], |
|
"rules": { |
|
"@angular-eslint/template/button-has-type": "error", |
|
"tailwindcss/no-custom-classname": [ |
|
"error", |
|
{ |
|
// uses negative lookahead to whitelist any class that doesn't start with "tw-" |
|
// in other words: classnames that start with tw- must be valid TailwindCSS classes |
|
"whitelist": ["(?!(tw)\\-).*"] |
|
} |
|
], |
|
"tailwindcss/enforces-negative-arbitrary-values": "error", |
|
"tailwindcss/enforces-shorthand": "error", |
|
"tailwindcss/no-contradicting-classname": "error" |
|
} |
|
}, |
|
{ |
|
"files": ["libs/common/src/**/*.ts"], |
|
"rules": { |
|
"no-restricted-imports": ["error", { "patterns": ["@bitwarden/common/*", "src/**/*"] }] |
|
} |
|
}, |
|
{ |
|
"files": ["libs/components/src/**/*.ts"], |
|
"rules": { |
|
"no-restricted-imports": ["error", { "patterns": ["@bitwarden/components/*", "src/**/*"] }] |
|
} |
|
}, |
|
{ |
|
"files": ["libs/angular/src/**/*.ts"], |
|
"rules": { |
|
"no-restricted-imports": ["error", { "patterns": ["@bitwarden/angular/*", "src/**/*"] }] |
|
} |
|
}, |
|
{ |
|
"files": ["libs/node/src/**/*.ts"], |
|
"rules": { |
|
"no-restricted-imports": ["error", { "patterns": ["@bitwarden/node/*", "src/**/*"] }] |
|
} |
|
}, |
|
{ |
|
"files": ["libs/importer/src/**/*.ts"], |
|
"rules": { |
|
"no-restricted-imports": ["error", { "patterns": ["@bitwarden/importer/*", "src/**/*"] }] |
|
} |
|
}, |
|
{ |
|
"files": ["libs/exporter/src/**/*.ts"], |
|
"rules": { |
|
"no-restricted-imports": ["error", { "patterns": ["@bitwarden/exporter/*", "src/**/*"] }] |
|
} |
|
} |
|
] |
|
}
|
|
|