{
  "extends": "tslint:all",
  "rules": {
    // TypeScript Specific
    "ban-ts-ignore": false,
    "member-access": [true, "no-public"],
    "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-instance-method",
          "protected-instance-method",
          "private-instance-method"
        ]
      }
    ],
    "no-empty-interface": false,
    "no-import-side-effect": false, // ?
    "no-inferrable-types": [true, "ignore-params", "ignore-properties"],
    "no-magic-numbers": false, // ?
    "no-var-requires": false,
    "only-arrow-functions": false,
    "promise-function-async": false,
    "typedef": [
      true,
      "call-signature",
      "arrow-call-signature",
      "parameter",
      "arrow-parameter",
      "property-declaration",
      "member-variable-declaration"
    ],

    // Functionality
    "await-promise": [true, "Bluebird"],
    "no-floating-promises": [true, "Bluebird"],
    "no-console": false,
    "no-inferred-empty-object-type": false,
    "no-implicit-dependencies": [true, "dev"],
    "no-null-keyword": false,
    "no-object-literal-type-assertion": false,
    "no-submodule-imports": false,
    "no-unbound-method": false,
    "no-unsafe-any": false,
    "no-unused-expression": false,
    "no-unused-variable": false,
    "no-void-expression": [true, "ignore-arrow-function-shorthand"],
    "strict-boolean-expressions": false, // ?
    "strict-type-predicates": false,
    "triple-equals": [true, "allow-null-check", "allow-undefined-check"],

    // Maintainability
    "cyclomatic-complexity": [true, 9],
    "max-classes-per-file": false,
    "max-file-line-count": [true, 300],
    "max-line-length": false,
    "no-default-export": false,
    "no-require-imports": false,
    "object-literal-sort-keys": false,
    "trailing-comma": [
      true,
      {
        "multiline": {
          "objects": "always",
          "arrays": "always",
          "functions": "always",
          "typeLiterals": "never"
        },
        "singleline": {
          "objects": "never",
          "arrays": "never",
          "functions": "never",
          "typeLiterals": "never"
        },
        "esSpecCompliant": true
      }
    ],

    // Style
    "align": [
      true,
      "parameters",
      "statements",
      "elements",
      "members"
    ],
    "arrow-return-shorthand": false,
    "comment-format": false,
    "completed-docs": false,
    "file-name-casing": false,
    "interface-name": false,
    "interface-over-type-literal": false,
    "newline-before-return": false, // ?
    "newline-per-chained-call": false, // ?
    "no-boolean-literal-compare": false,
    "no-parameter-properties": false,
    "object-literal-key-quotes": [true, "as-needed"], // ?
    "ordered-imports": false,
    "prefer-function-over-method": false, // ?
    "quotemark": [true, "single", "avoid-escape"],
    "return-undefined": false,
    "semicolon": [true, "never"],
    "space-before-function-paren": [true, {"anonymous": "never", "named": "never", "asyncArrow": "always"}],
    "type-literal-delimiter": false,
    "variable-name": false
  }
}
