--- /dev/null
+{
+ "root": true,
+ "ignorePatterns": [
+ "package.json"
+ ],
+ "overrides": [
+ {
+ "files": [
+ "*.ts"
+ ],
+ "parser": "@typescript-eslint/parser",
+ "parserOptions": {
+ "project": [
+ "**/tsconfig.json"
+ ],
+ "createDefaultProgram": true
+ },
+ "env": {
+ "browser": true,
+ "es6": true
+ },
+ "extends": [
+ "plugin:@angular-eslint/ng-cli-compat",
+ "plugin:@angular-eslint/ng-cli-compat--formatting-add-on",
+ "plugin:@angular-eslint/template/process-inline-templates",
+ "plugin:@typescript-eslint/recommended",
+ "plugin:@typescript-eslint/recommended-requiring-type-checking",
+ "plugin:@microsoft/sdl/required",
+ "plugin:@microsoft/sdl/typescript",
+ "plugin:jsx-a11y/recommended",
+ "plugin:security/recommended",
+ "eslint:recommended",
+ "plugin:node/recommended-module"
+ ],
+ "plugins": [
+ "eslint-plugin-jest",
+ "eslint-plugin-no-null",
+ "jsdoc",
+ "@microsoft/sdl",
+ "jsx-a11y",
+ "security",
+ "deprecation",
+ "lodash",
+ "prefer-arrow"
+ ],
+ "rules": {
+ "@typescript-eslint/await-thenable": "error",
+ "@typescript-eslint/consistent-type-definitions": "error",
+ "@typescript-eslint/explicit-member-accessibility": [
+ "off",
+ {
+ "accessibility": "explicit"
+ }
+ ],
+ "@typescript-eslint/no-empty-function": "error",
+ "@typescript-eslint/no-explicit-any": "warn",
+ "@typescript-eslint/no-floating-promises": "warn",
+ "@typescript-eslint/no-for-in-array": "error",
+ "@typescript-eslint/no-inferrable-types": "off",
+ "@typescript-eslint/no-parameter-properties": "error",
+ "@typescript-eslint/no-require-imports": "error",
+ "@typescript-eslint/no-unnecessary-qualifier": "error",
+ "@typescript-eslint/no-var-requires": "error",
+ "@typescript-eslint/promise-function-async": "error",
+ "@typescript-eslint/restrict-plus-operands": "off",
+ "@typescript-eslint/strict-boolean-expressions": "off",
+ "@typescript-eslint/triple-slash-reference": "error",
+ "@typescript-eslint/type-annotation-spacing": "off",
+ "arrow-parens": [
+ "error",
+ "always"
+ ],
+ "brace-style": [
+ "off",
+ "off"
+ ],
+ "comma-dangle": "error",
+ "complexity": "error",
+ "default-case": "error",
+ "id-blacklist": "error",
+ "import/no-default-export": "error",
+ "import/order": [
+ "error",
+ {
+ "alphabetize": {
+ "order": "asc",
+ "caseInsensitive": true
+ }
+ }
+ ],
+ "jest/no-focused-tests": "error",
+ "linebreak-style": "off",
+ "max-classes-per-file": [
+ "error",
+ 3
+ ],
+ "max-lines": [
+ "error",
+ {
+ "max": 1000,
+ "skipComments": true,
+ "skipBlankLines": true
+ }
+ ],
+ "no-constant-condition": "error",
+ "no-control-regex": "error",
+ "no-empty": "error",
+ "no-extra-semi": "error",
+ "no-invalid-regexp": "error",
+ "no-invalid-this": "error",
+ "no-multi-str": "error",
+ "no-multiple-empty-lines": "error",
+ "no-null/no-null": "off",
+ "no-octal": "error",
+ "no-octal-escape": "error",
+ "no-redeclare": "error",
+ "no-regex-spaces": "error",
+ "no-sparse-arrays": "error",
+ "no-void": "error",
+ "space-before-function-paren": "off",
+ "valid-typeof": "error",
+ "require-jsdoc": [
+ "error",
+ {
+ "require": {
+ "FunctionDeclaration": true,
+ "MethodDefinition": false,
+ "ClassDeclaration": false,
+ "ArrowFunctionExpression": false,
+ "FunctionExpression": false
+ }
+ }
+ ],
+ "max-statements": [
+ "error",
+ 100
+ ],
+ "max-len": [
+ "error",
+ 500
+ ],
+ "@microsoft/sdl/no-cookies": "error",
+ "@typescript-eslint/no-dynamic-delete": "error",
+ "@microsoft/sdl/no-msapp-exec-unsafe": "error",
+ "@microsoft/sdl/no-winjs-html-unsafe": "error",
+ "constructor-super": "error",
+ "padded-blocks": [
+ "error",
+ "never"
+ ],
+ "func-style": "error",
+ "@microsoft/sdl/no-insecure-url": [
+ "error",
+ {
+ "blocklist": [
+ "^(http|ftp):\\/\\/",
+ "^https:\\/\\/www\\.disallow-example\\.com"
+ ],
+ "exceptions": [
+ "^http:\\/\\/schemas\\.microsoft\\.com\\/\\/?.*"
+ ]
+ }
+ ],
+ "@microsoft/sdl/no-insecure-random": "off",
+ "@microsoft/sdl/no-inner-html": "error",
+ "@microsoft/sdl/no-html-method": "error",
+ "@typescript-eslint/no-implied-eval": "error",
+ "no-undef-init": "error",
+ "no-with": "error",
+ "security/detect-non-literal-require": "error",
+ "security/detect-possible-timing-attacks": "error",
+ "@typescript-eslint/no-array-constructor": "error",
+ "@typescript-eslint/method-signature-style": "error",
+ "jsx-a11y/anchor-is-valid": [
+ "off",
+ {
+ "components": [
+ "Link"
+ ],
+ "specialLink": [
+ "hrefLeft",
+ "hrefRight"
+ ],
+ "aspects": [
+ "noHref",
+ "invalidHref",
+ "preferButton"
+ ]
+ }
+ ],
+ "jsx-a11y/aria-unsupported-elements": "error",
+ "jsx-a11y/no-static-element-interactions": "error",
+ "jsx-a11y/alt-text": "error",
+ "jsx-a11y/lang": "error",
+ "jsx-a11y/aria-props": "error",
+ "jsx-a11y/aria-proptypes": "error",
+ "jsx-a11y/aria-role": "error",
+ "jsx-a11y/role-has-required-aria-props": "error",
+ "jsx-a11y/role-supports-aria-props": "error",
+ "jsx-a11y/tabindex-no-positive": "error",
+ "react/jsx-no-target-blank": "error",
+ "@microsoft/sdl/react-iframe-missing-sandbox": "error",
+ "react/no-danger": "error",
+ "react/jsx-curly-spacing": "error",
+ "react/no-unused-state": "error",
+ "lodash/chaining": "error",
+ "@typescript-eslint/ban-types": "off",
+ "deprecation/deprecation": "warn",
+ "@typescript-eslint/naming-convention": [
+ "warn",
+ {
+ "selector": "variableLike",
+ "format": null
+ }
+ ],
+ "@typescript-eslint/member-ordering": [
+ "error",
+ {
+ "default": [
+ "field"
+ ]
+ }
+ ],
+ "@typescript-eslint/no-unsafe-member-access": "off",
+ "@typescript-eslint/no-unused-vars": "off",
+ "no-unused-vars": "off",
+ "no-unsafe-finally": "error",
+ "jsdoc/newline-after-description": [
+ "warn",
+ "never"
+ ],
+ "@typescript-eslint/unbound-method": "off",
+ "no-underscore-dangle": "off",
+ "no-magic-numbers": "off",
+ "@typescript-eslint/no-magic-numbers": [
+ "warn",
+ {
+ "ignore": [
+ -1,
+ 0,
+ 1
+ ],
+ "ignoreArrayIndexes": true,
+ "ignoreDefaultValues": true
+ }
+ ],
+ "@typescript-eslint/no-unsafe-assignment": "off",
+ "prefer-arrow/prefer-arrow-functions": [
+ "warn",
+ {
+ "disallowPrototype": true,
+ "singleReturnOnly": false,
+ "classPropertiesAllowed": false
+ }
+ ],
+ "@angular-eslint/use-lifecycle-interface": "off",
+ "security/detect-non-literal-fs-filename": "error",
+ "@typescript-eslint/no-unsafe-call": "off",
+ "@typescript-eslint/no-unsafe-return": "off",
+ "security/detect-unsafe-regex": "off",
+ "security/detect-non-literal-regexp": "error",
+ "no-console": "error",
+ "sort-keys": "off",
+ "node/no-deprecated-api": [
+ "warn",
+ {
+ "ignoreModuleItems": [
+ "util.isNullOrUndefined"
+ ]
+ }
+ ],
+ "node/no-missing-import": [
+ "off"
+ ],
+ "@typescript-eslint/member-delimiter-style": "off",
+ "node/no-unsupported-features/node-builtins": [
+ "off"
+ ],
+ "security/detect-object-injection": "warn"
+ }
+ },
+ {
+ "files": [
+ "*.html"
+ ],
+ "extends": [
+ "plugin:@angular-eslint/template/recommended",
+ "plugin:node/recommended-module"
+ ],
+ "rules": {}
+ }
+ ]
+}