angular-typed-router-eslint 0.1.1-4 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,3 +1,66 @@
1
- # eslint plugin for angular-typed-router
1
+ # angular-typed-router-eslint
2
2
 
3
- ## Attention: Still in experimental phase
3
+ ESLint rules that complement [`angular-typed-router`](../typed-router/README.md) by forbidding patterns that bypass its type safety.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install --save-dev angular-typed-router-eslint
9
+ # or
10
+ pnpm add -D angular-typed-router-eslint
11
+ # or
12
+ yarn add -D angular-typed-router-eslint
13
+ ```
14
+
15
+ ## Setup (flat config)
16
+
17
+ The package ships a ready-to-use flat config that registers the plugin and enables all rules:
18
+
19
+ ```js
20
+ // eslint.config.js
21
+ import typedRouter from 'angular-typed-router-eslint/configs/flat-config';
22
+
23
+ export default [
24
+ // ...your other configs
25
+ ...typedRouter,
26
+ ];
27
+ ```
28
+
29
+ Or wire it up manually if you want to pick rules individually:
30
+
31
+ ```js
32
+ // eslint.config.js
33
+ import typedRouterPlugin from 'angular-typed-router-eslint';
34
+
35
+ export default [
36
+ {
37
+ files: ['**/*.ts', '**/*.html'],
38
+ plugins: { 'angular-typed-router': typedRouterPlugin },
39
+ rules: {
40
+ 'angular-typed-router/no-relative-to-navigation': 'error',
41
+ 'angular-typed-router/no-trailing-slash-navigation': 'error',
42
+ // Forbid the untyped Router / RouterLink so contributors can't bypass the typed APIs
43
+ 'no-restricted-imports': [
44
+ 'error',
45
+ {
46
+ paths: [
47
+ {
48
+ name: '@angular/router',
49
+ importNames: ['Router', 'RouterLink'],
50
+ message: 'Use TypedRouter and TypedRouterLink from angular-typed-router instead.',
51
+ },
52
+ ],
53
+ },
54
+ ],
55
+ },
56
+ },
57
+ ];
58
+ ```
59
+
60
+ ## What you get
61
+
62
+ | Rule | What it does |
63
+ | --------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
64
+ | `angular-typed-router/no-relative-to-navigation` | Disallows `relativeTo` in `navigate` / `navigateByUrl` / `createUrlTree` calls. Typed paths and commands are absolute. |
65
+ | `angular-typed-router/no-trailing-slash-navigation` | Disallows trailing slashes in `routerLink` attributes and `navigateByUrl` string arguments (auto-fixable). |
66
+ | `no-restricted-imports` (built-in, preconfigured) | Forbids importing `Router` and `RouterLink` from `@angular/router` so contributors can't bypass `TypedRouter` / `TypedRouterLink`. |
package/package.json CHANGED
@@ -1,6 +1,22 @@
1
1
  {
2
2
  "name": "angular-typed-router-eslint",
3
- "version": "0.1.1-4",
3
+ "version": "2.0.0",
4
+ "description": "ESLint rules that complement angular-typed-router by forbidding patterns that bypass its type safety.",
5
+ "keywords": [
6
+ "angular",
7
+ "router",
8
+ "eslint",
9
+ "eslint-plugin",
10
+ "eslintplugin",
11
+ "typescript",
12
+ "angular-typed-router"
13
+ ],
14
+ "author": "Dominic Bachmann",
15
+ "license": "MIT",
16
+ "homepage": "https://github.com/dominicbachmann/angular-typed-router/tree/main/libs/eslint-plugin#readme",
17
+ "bugs": {
18
+ "url": "https://github.com/dominicbachmann/angular-typed-router/issues"
19
+ },
4
20
  "type": "commonjs",
5
21
  "main": "./src/index.js",
6
22
  "types": "./src/index.d.ts",
@@ -10,8 +26,12 @@
10
26
  "directory": "libs/eslint-plugin"
11
27
  },
12
28
  "dependencies": {
29
+ "@typescript-eslint/utils": "^8.0.0",
13
30
  "tslib": "^2.3.0"
14
31
  },
32
+ "peerDependencies": {
33
+ "eslint": ">=9.0.0"
34
+ },
15
35
  "exports": {
16
36
  "./package.json": "./package.json",
17
37
  ".": {
@@ -3,8 +3,8 @@ declare const config: {
3
3
  plugins: {
4
4
  'angular-typed-router': {
5
5
  rules: {
6
- 'no-relative-to-navigation': import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<"relativeTo", [], unknown, import("@typescript-eslint/utils/dist/ts-eslint").RuleListener>;
7
- 'no-trailing-slash-navigation': import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<"navTrailing", [], unknown, import("@typescript-eslint/utils/dist/ts-eslint").RuleListener>;
6
+ 'no-relative-to-navigation': import("@typescript-eslint/utils/ts-eslint").RuleModule<"relativeTo", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
7
+ 'no-trailing-slash-navigation': import("@typescript-eslint/utils/ts-eslint").RuleModule<"navTrailing", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
8
8
  };
9
9
  };
10
10
  };
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const plugin_1 = require("../lib/plugin");
3
+ const tslib_1 = require("tslib");
4
+ const plugin_1 = tslib_1.__importDefault(require("../lib/plugin"));
4
5
  const config = [
5
6
  {
6
7
  files: ['**/*.ts', '**/*.html'],
@@ -1 +1 @@
1
- {"version":3,"file":"flat-config.js","sourceRoot":"","sources":["../../../../../libs/eslint-plugin/src/configs/flat-config.ts"],"names":[],"mappings":";;AAAA,0CAAmC;AAEnC,MAAM,MAAM,GAAG;IACb;QACE,KAAK,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC;QAC/B,OAAO,EAAE;YACP,sBAAsB,EAAE,gBAAM;SAC/B;QACD,KAAK,EAAE;YACL,gDAAgD,EAAE,OAAO;YACzD,mDAAmD,EAAE,OAAO;YAC5D,6DAA6D;YAC7D,uBAAuB,EAAE;gBACvB,OAAO;gBACP;oBACE,KAAK,EAAE;wBACL;4BACE,IAAI,EAAE,iBAAiB;4BACvB,WAAW,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC;4BACrC,OAAO,EAAE,qHAAqH;yBAC/H;qBACF;iBACF;aACF;SACF;KACF;CACF,CAAC;AAEF,kBAAe,MAAM,CAAC;AACtB,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC"}
1
+ {"version":3,"file":"flat-config.js","sourceRoot":"","sources":["../../../../../libs/eslint-plugin/src/configs/flat-config.ts"],"names":[],"mappings":";;;AAAA,mEAAmC;AAEnC,MAAM,MAAM,GAAG;IACb;QACE,KAAK,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC;QAC/B,OAAO,EAAE;YACP,sBAAsB,EAAE,gBAAM;SAC/B;QACD,KAAK,EAAE;YACL,gDAAgD,EAAE,OAAO;YACzD,mDAAmD,EAAE,OAAO;YAC5D,6DAA6D;YAC7D,uBAAuB,EAAE;gBACvB,OAAO;gBACP;oBACE,KAAK,EAAE;wBACL;4BACE,IAAI,EAAE,iBAAiB;4BACvB,WAAW,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC;4BACrC,OAAO,EAAE,qHAAqH;yBAC/H;qBACF;iBACF;aACF;SACF;KACF;CACF,CAAC;AAEF,kBAAe,MAAM,CAAC;AACtB,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC"}
@@ -1,11 +1,11 @@
1
1
  export declare const rules: {
2
- 'no-relative-to-navigation': import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<"relativeTo", [], unknown, import("@typescript-eslint/utils/dist/ts-eslint").RuleListener>;
3
- 'no-trailing-slash-navigation': import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<"navTrailing", [], unknown, import("@typescript-eslint/utils/dist/ts-eslint").RuleListener>;
2
+ 'no-relative-to-navigation': import("@typescript-eslint/utils/ts-eslint").RuleModule<"relativeTo", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
3
+ 'no-trailing-slash-navigation': import("@typescript-eslint/utils/ts-eslint").RuleModule<"navTrailing", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
4
4
  };
5
5
  declare const _default: {
6
6
  rules: {
7
- 'no-relative-to-navigation': import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<"relativeTo", [], unknown, import("@typescript-eslint/utils/dist/ts-eslint").RuleListener>;
8
- 'no-trailing-slash-navigation': import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<"navTrailing", [], unknown, import("@typescript-eslint/utils/dist/ts-eslint").RuleListener>;
7
+ 'no-relative-to-navigation': import("@typescript-eslint/utils/ts-eslint").RuleModule<"relativeTo", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
8
+ 'no-trailing-slash-navigation': import("@typescript-eslint/utils/ts-eslint").RuleModule<"navTrailing", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
9
9
  };
10
10
  };
11
11
  export default _default;
package/src/lib/plugin.js CHANGED
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.rules = void 0;
4
- const no_relative_to_navigation_1 = require("./rules/no-relative-to-navigation");
5
- const no_trailing_slash_navigation_1 = require("./rules/no-trailing-slash-navigation");
4
+ const tslib_1 = require("tslib");
5
+ const no_relative_to_navigation_1 = tslib_1.__importDefault(require("./rules/no-relative-to-navigation"));
6
+ const no_trailing_slash_navigation_1 = tslib_1.__importDefault(require("./rules/no-trailing-slash-navigation"));
6
7
  exports.rules = {
7
8
  'no-relative-to-navigation': no_relative_to_navigation_1.default,
8
9
  'no-trailing-slash-navigation': no_trailing_slash_navigation_1.default,
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../../../libs/eslint-plugin/src/lib/plugin.ts"],"names":[],"mappings":";;;AAAA,iFAAuE;AACvE,uFAA6E;AAEhE,QAAA,KAAK,GAAG;IACnB,2BAA2B,EAAE,mCAAsB;IACnD,8BAA8B,EAAE,sCAAyB;CAC1D,CAAC;AAEF,kBAAe,EAAE,KAAK,EAAL,aAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../../../libs/eslint-plugin/src/lib/plugin.ts"],"names":[],"mappings":";;;;AAAA,0GAAuE;AACvE,gHAA6E;AAEhE,QAAA,KAAK,GAAG;IACnB,2BAA2B,EAAE,mCAAsB;IACnD,8BAA8B,EAAE,sCAAyB;CAC1D,CAAC;AAEF,kBAAe,EAAE,KAAK,EAAL,aAAK,EAAE,CAAC"}