{
  "extends": "tslint:latest",
  "rules": {
    "no-unnecessary-type-assertion": true,
    "array-type": [
      true,
      "array"
    ],
    "ban-types": {
      "options": [
        [
          "Object",
          "Avoid using the `Object` type. Did you mean `object`?"
        ],
        [
          "Function",
          "Avoid using the `Function` type. Prefer a specific function type, like `() => void`, or use `ts.AnyFunction`."
        ],
        [
          "Boolean",
          "Avoid using the `Boolean` type. Did you mean `boolean`?"
        ],
        [
          "Number",
          "Avoid using the `Number` type. Did you mean `number`?"
        ],
        [
          "String",
          "Avoid using the `String` type. Did you mean `string`?"
        ]
      ]
    },
    "jsdoc-format": true,
    "no-internal-module": true,
    "no-null-keyword": true,
    "no-unnecessary-qualifier": true,
    "object-literal-shorthand": true,
    "space-within-parens": true,
    "triple-equals": true,
    // Config different from tslint:latest
    "no-implicit-dependencies": [
      true,
      "dev"
    ],
    "arrow-parens": [true, "ban-single-arg-parens"],
    "member-access": [true, "no-public"],
    "no-conditional-assignment": true,
    "no-console": true,
    "no-debugger": true,
    "no-eval": true,
    "no-object-literal-type-assertion": false,
    "no-shadowed-variable": true,
    "no-submodule-imports": false,
    "ordered-imports": false,
    "prefer-conditional-expression": false,
    "radix": true,
    "file-name-casing": [true, "kebab-case"],
    "eofline": true,
    "max-line-length": [true, 120],
    "ban-comma-operator": true,
    "no-angle-bracket-type-assertion": true,
    "no-bitwise": false,
    "object-literal-sort-keys": false,
    "adjacent-overload-signatures": true,
    "align": [true, "parameters"],
    "arrow-return-shorthand": true,
    "await-promise": true,
    "callable-types": true,
    "class-name": true,
    "comment-format": [true, "check-space", "check-uppercase"],
    "completed-docs": false, // Should be enabled for domain/busines logic packages
    "curly": true,
    "cyclomatic-complexity": [true, 20],
    "forin": true,
    "import-blacklist": [
      true,
      ".",
      "./",
      "./.",
      "../",
      "../.",
      "../../",
      "../../.",
      "../../../",
      "../../../."
    ],
    "import-spacing": true,
    "indent": [true, "spaces", 2],
    "interface-name": [true, "never-prefix"],
    "interface-over-type-literal": true,
    "label-position": true,
    "linebreak-style": [true, "LF"],
    "max-classes-per-file": [true, 1],
    "max-file-line-count": [true, 500],
    "member-ordering": [true, {
      "order": [
        "public-static-field",
        "protected-static-field",
        "private-static-field",
        "public-instance-field",
        "protected-instance-field",
        "private-instance-field",
        "public-constructor",
        "protected-constructor",
        "private-constructor",
        "public-static-method",
        "protected-static-method",
        "private-static-method",
        "public-instance-method",
        "protected-instance-method",
        "private-instance-method"
      ]
    }],
    "new-parens": true,
    "no-any": true,
    "no-arg": true,
    "no-boolean-literal-compare": true,
    "no-consecutive-blank-lines": [true, 2],
    "no-construct": true,
    "no-default-export": true,
    "no-duplicate-variable": true,
    "no-empty": true,
    "no-empty-interface": false,
    "no-floating-promises": true,
    "no-for-in-array": true,
    "no-inferrable-types": [true, "ignore-params"],
    "no-inferred-empty-object-type": true,
    "no-invalid-this": [true, "check-function-in-method"],
    "no-magic-numbers": [true,
      -1, 0, 1, 2, // Common numbers in tests etc
      10, // Decimal number radix
      16, // Hexidecimal number radix
      100, // Percentage maximum value
      1000, // MS in a second
      60 // Seconds in a minute, minutes in an hour
    ],
    "no-misused-new": true,
    "no-namespace": [true, "allow-declarations"],
    "no-parameter-properties": false,
    "no-reference": true,
    "no-string-literal": true,
    "no-string-throw": true,
    "no-switch-case-fall-through": true,
    "no-trailing-whitespace": true,
    "no-unbound-method": true,
    "no-unnecessary-initializer": true,
    "no-unsafe-any": true,
    "no-unused-expression": true,
    "no-use-before-declare": false,
    "no-var-keyword": true,
    "no-var-requires": true,
    "no-void-expression": false,
    "object-literal-key-quotes": [true, "as-needed"],
    "one-line": [true, "check-catch", "check-finally", "check-else", "check-open-brace", "check-whitespace"],
    "one-variable-per-declaration": true,
    "prefer-const": true,
    "prefer-for-of": true,
    "prefer-function-over-method": [true, "allow-public", "allow-protected"],
    "prefer-method-signature": true,
    "promise-function-async": true,
    "quotemark": [true, "single", "avoid-escape"],
    "restrict-plus-operands": true,
    "semicolon": [true, "never"],
    "space-before-function-paren": [true, "always"],
    "strict-boolean-expressions": false,
    "strict-type-predicates": true,
    "switch-default": true,
    "trailing-comma": [true, { "multiline": "never", "singleline": "never" }],
    "typedef": [ true, "call-signature" ],
    "typedef-whitespace": [true, {
      "call-signature": "nospace",
      "index-signature": "nospace",
      "parameter": "nospace",
      "property-declaration": "nospace",
      "variable-declaration": "nospace"
    }, {
      "call-signature": "onespace",
      "index-signature": "onespace",
      "parameter": "onespace",
      "property-declaration": "onespace",
      "variable-declaration": "onespace"
    }],
    "unified-signatures": true,
    "use-isnan": true,
    "variable-name": [true, "ban-keywords", "check-format"],
    "whitespace": [
      true,
      "check-branch",
      "check-decl",
      "check-operator",
      "check-module",
      "check-separator",
      "check-type",
      "check-typecast"
    ]
  }
}
