https://github.com/angular/angular
Raw File
Tip revision: 8e65bdc84821b23ba5e15f056321f840d38ce789 authored by Alex Rickabaugh on 22 February 2024, 01:58:54 UTC
release: cut the v17.3.0-next.0 release
Tip revision: 8e65bdc
tslint.json
{
  "rulesDirectory": [
    "tools/tslint",
    "node_modules/@angular/build-tooling/lint-rules/tslint",
    "node_modules/vrsource-tslint-rules/rules",
    "node_modules/tslint-eslint-rules/dist/rules",
    "node_modules/tslint-no-toplevel-property-access/rules"
  ],
  "rules": {
    // The first rule needs to be `ts-node-loader` which sets up `ts-node` within TSLint so
    // that rules written in TypeScript can be loaded without needing to be transpiled.
    "ts-node-loader": true,
    // Custom rules written in TypeScript.
    "require-internal-with-underscore": true,
    "no-implicit-override-abstract": true,
    "validate-import-for-esm-cjs-interop": [
      true,
      {
        // The following CommonJS modules have type definitions that suggest the existence of
        // named exports. This is not true at runtime when imported from an ES module (because
        // the ESM interop only exposes statically-discoverable named exports). Instead
        // default imports should be used to ensure compatibility with both ESM or CommonJS.
        "noNamedExports": [
          "typescript/lib/tsserverlibrary",
          "typescript",
          "minimist",
          "magic-string",
          "semver",
          "yargs",
          "glob",
          "convert-source-map"
        ],
        // The following CommonJS modules appear to have a default export available (due to the `esModuleInterop` flag),
        // but at runtime with CJS (e.g. for devmode output/tests) there is no default export as these modules set
        // `__esModule`. This does not match with what happens in ESM NodeJS runtime where NodeJS exposes
        // `module.exports` as `export default`. Instead, named exports should be used for compat with CJS/ESM.
        "noDefaultExport": [],
        // List of modules which are incompatible and should never be imported at all.
        "incompatibleModules": {}
      }
    ],
    "eofline": true,
    "file-header": [
      true,
      {
        "match": "Copyright Google LLC",
        "allow-single-line-comments": false,
        "default": "@license\nCopyright Google LLC All Rights Reserved.\n\nUse of this source code is governed by an MIT-style license that can be\nfound in the LICENSE file at https://angular.io/license"
      }
    ],
    "no-console": [true, "log"],
    "no-construct": true,
    "no-duplicate-imports": true,
    "no-duplicate-variable": true,
    "no-var-keyword": true,
    "prefer-literal": [true, "object"],
    "no-toplevel-property-access": [
      true,
      "packages/animations/src/",
      "packages/animations/browser/",
      "packages/common/src/",
      "packages/core/src/",
      "packages/elements/src/",
      "packages/forms/src/",
      "packages/platform-browser/src/",
      "packages/router/src/"
    ],
    "semicolon": [true],
    "variable-name": [true, "ban-keywords"],
    "no-inner-declarations": [true, "function"],
    "no-debugger": true,
    "ban": [
      true,
      {"name": "fdescribe", "message": "Don't keep jasmine focus methods."},
      {"name": "fit", "message": "Don't keep jasmine focus methods."},
      {
        "name": ["*", "getMutableClone"],
        "message": "Use a ts.factory.update* or ts.factory.create* method instead."
      },
      {"name": ["performance", "mark"], "message": "`performance` methods aren't not fully supported in all environments like JSDOM and Cloudflare workers. Use 'performanceMark' from '@angular/core' instead."}
    ]
  },
  "jsRules": {
    // The first rule needs to be `ts-node-loader` which sets up `ts-node` within TSLint so
    // that rules written in TypeScript can be loaded without needing to be transpiled.
    "ts-node-loader": true,
    // Custom rules written in TypeScript.
    "require-internal-with-underscore": true,

    "eofline": true,
    "file-header": [
      true,
      {
        "match": "Copyright Google LLC",
        "allow-single-line-comments": false,
        "default": "@license\nCopyright Google LLC All Rights Reserved.\n\nUse of this source code is governed by an MIT-style license that can be\nfound in the LICENSE file at https://angular.io/license"
      }
    ],
    "no-console": [true, "log"],
    "no-duplicate-imports": true,
    "no-duplicate-variable": true,
    "semicolon": [true],
    "variable-name": [true, "ban-keywords"],
    "no-inner-declarations": [true, "function"],
    "ban": [
      true,
      {"name": "fdescribe", "message": "Don't keep jasmine focus methods."},
      {"name": "fit", "message": "Don't keep jasmine focus methods."}
    ]
  },
  "linterOptions": {
    "exclude": [
      "**/node_modules/**/*",
      // Ignore AIO and integration tests.
      "./aio/**/*",
      "./integration/**/*",
      // Ignore output directories
      "./built/**/*",
      "./dist/**/*",
      "./bazel-out/**/*",
      // Ignore special files
      "**/*.externs.js",
      // Ignore test files
      "./packages/compiler-cli/test/compliance/test_cases/**/*",
      "./packages/localize/**/test_files/**/*",
      "./tools/public_api_guard/**/*.d.ts",
      "./modules/benchmarks_external/**/*",
      // Ignore zone.js directory
      // TODO(JiaLiPassion): add zone.js back later
      "./packages/zone.js/**/*",

      "./devtools/bazel-out/**/*",
      "./devtools/projects/ng-devtools/src/lib/vendor/**/*",

      // Ignore vendored code
      "./third_party/**/*"
    ]
  }
}
back to top