@futdevpro/dynamo-eslint 1.15.28 → 1.20.3

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.
Files changed (108) hide show
  1. package/README.md +13 -16
  2. package/__documentations/2026-08-22-angular-20-phase2-release.md +83 -0
  3. package/build/configs/base.d.ts +8 -9
  4. package/build/configs/base.d.ts.map +1 -1
  5. package/build/configs/base.js +149 -150
  6. package/build/configs/base.js.map +1 -1
  7. package/build/configs/fsm.d.ts +1 -1
  8. package/build/configs/fsm.js +7 -7
  9. package/build/configs/ngx-package.d.ts +1 -1
  10. package/build/configs/ngx-package.js +7 -7
  11. package/build/configs/ngx.d.ts +2 -4
  12. package/build/configs/ngx.d.ts.map +1 -1
  13. package/build/configs/ngx.js +88 -91
  14. package/build/configs/ngx.js.map +1 -1
  15. package/build/configs/nts-package.d.ts +1 -1
  16. package/build/configs/nts-package.js +17 -17
  17. package/build/configs/nts.d.ts +1 -1
  18. package/build/configs/nts.js +31 -31
  19. package/build/index.d.ts +1 -1
  20. package/build/index.js +2 -2
  21. package/build/plugin/index.d.ts +52 -52
  22. package/build/plugin/index.js +80 -80
  23. package/build/plugin/rules/angular/angular-for-track-logic.d.ts +7 -7
  24. package/build/plugin/rules/angular/angular-for-track-logic.js +81 -81
  25. package/build/plugin/rules/angular/effect-signal-loop.d.ts +9 -9
  26. package/build/plugin/rules/angular/effect-signal-loop.js +112 -112
  27. package/build/plugin/rules/angular/no-async-ngoninit.d.ts +8 -8
  28. package/build/plugin/rules/angular/no-async-ngoninit.js +42 -42
  29. package/build/plugin/rules/angular/no-component-direct-api.d.ts +9 -9
  30. package/build/plugin/rules/angular/no-component-direct-api.js +75 -75
  31. package/build/plugin/rules/angular/no-method-call-in-template.d.ts +8 -8
  32. package/build/plugin/rules/angular/no-method-call-in-template.js +79 -79
  33. package/build/plugin/rules/angular/no-ngfor-directive.d.ts +7 -7
  34. package/build/plugin/rules/angular/no-ngfor-directive.js +59 -59
  35. package/build/plugin/rules/angular/no-ngif-directive.d.ts +7 -7
  36. package/build/plugin/rules/angular/no-ngif-directive.js +59 -59
  37. package/build/plugin/rules/explicit-types.d.ts +3 -3
  38. package/build/plugin/rules/explicit-types.js +178 -178
  39. package/build/plugin/rules/import/import-order.d.ts +3 -3
  40. package/build/plugin/rules/import/import-order.js +154 -154
  41. package/build/plugin/rules/import/no-import-type.d.ts +3 -3
  42. package/build/plugin/rules/import/no-import-type.js +45 -45
  43. package/build/plugin/rules/import/no-js-import.d.ts +3 -3
  44. package/build/plugin/rules/import/no-js-import.js +40 -40
  45. package/build/plugin/rules/naming-patterns.d.ts +7 -7
  46. package/build/plugin/rules/naming-patterns.js +366 -366
  47. package/build/plugin/rules/no-getter-logic.d.ts +3 -3
  48. package/build/plugin/rules/no-getter-logic.js +194 -194
  49. package/build/plugin/rules/no-getter-logic.js.map +1 -1
  50. package/build/plugin/rules/prefer-enum-over-string-union.d.ts +3 -3
  51. package/build/plugin/rules/prefer-enum-over-string-union.js +289 -289
  52. package/build/plugin/rules/prefer-enum-over-string-union.js.map +1 -1
  53. package/build/plugin/rules/prefer-interface-over-duplicate-types.d.ts +3 -3
  54. package/build/plugin/rules/prefer-interface-over-duplicate-types.js +264 -264
  55. package/build/plugin/rules/prefer-interface-over-duplicate-types.js.map +1 -1
  56. package/build/plugin/rules/require-jsdoc-description.d.ts +3 -3
  57. package/build/plugin/rules/require-jsdoc-description.js +496 -496
  58. package/build/plugin/rules/require-jsdoc-description.js.map +1 -1
  59. package/build/plugin/rules/require-test-description-prefix.d.ts +3 -3
  60. package/build/plugin/rules/require-test-description-prefix.js +135 -135
  61. package/build/plugin/rules/ts/data-model-extends.d.ts +8 -8
  62. package/build/plugin/rules/ts/data-model-extends.js +94 -94
  63. package/build/plugin/rules/ts/no-any-type.d.ts +8 -8
  64. package/build/plugin/rules/ts/no-any-type.js +36 -36
  65. package/build/plugin/rules/ts/no-as-cast.d.ts +8 -8
  66. package/build/plugin/rules/ts/no-as-cast.js +49 -49
  67. package/build/plugin/rules/ts/no-dynamic-imports.d.ts +8 -8
  68. package/build/plugin/rules/ts/no-dynamic-imports.js +50 -50
  69. package/build/plugin/rules/ts/no-native-browser-dialogs.d.ts +8 -8
  70. package/build/plugin/rules/ts/no-native-browser-dialogs.js +78 -78
  71. package/build/plugin/rules/ts/no-plain-function-export.d.ts +9 -9
  72. package/build/plugin/rules/ts/no-plain-function-export.js +69 -69
  73. package/build/plugin/rules/ts/one-export-per-file.d.ts +8 -8
  74. package/build/plugin/rules/ts/one-export-per-file.js +73 -73
  75. package/build/scripts/dynamo-fix.d.ts +26 -26
  76. package/build/scripts/dynamo-fix.js +146 -146
  77. package/build/scripts/dynamo-fix.js.map +1 -1
  78. package/build/scripts/eslintrc-audit.d.ts +26 -26
  79. package/build/scripts/eslintrc-audit.js +100 -100
  80. package/build/scripts/fix-return-types.d.ts +74 -74
  81. package/build/scripts/fix-return-types.d.ts.map +1 -1
  82. package/build/scripts/fix-return-types.js +226 -226
  83. package/build/scripts/fix-return-types.js.map +1 -1
  84. package/build/scripts/validate-imports.d.ts +26 -26
  85. package/build/scripts/validate-imports.js +170 -157
  86. package/build/scripts/validate-imports.js.map +1 -1
  87. package/build/scripts/validate-naming.d.ts +26 -26
  88. package/build/scripts/validate-naming.js +170 -157
  89. package/build/scripts/validate-naming.js.map +1 -1
  90. package/eslint.config.js +1 -1
  91. package/package.json +104 -105
  92. package/pnpm-workspace.yaml +2 -0
  93. package/samples/package.json.example +5 -9
  94. package/src/configs/angular20-compatibility.spec.ts +73 -0
  95. package/src/configs/base.ts +3 -4
  96. package/src/configs/ngx.ts +7 -10
  97. package/src/plugin/rules/no-getter-logic.ts +1 -1
  98. package/src/plugin/rules/prefer-enum-over-string-union.spec.ts +9 -9
  99. package/src/plugin/rules/prefer-enum-over-string-union.ts +7 -8
  100. package/src/plugin/rules/prefer-interface-over-duplicate-types.spec.ts +22 -22
  101. package/src/plugin/rules/prefer-interface-over-duplicate-types.ts +2 -2
  102. package/src/plugin/rules/require-jsdoc-description.spec.ts +2 -2
  103. package/src/plugin/rules/require-jsdoc-description.ts +7 -7
  104. package/src/scripts/dynamo-fix.ts +1 -1
  105. package/src/scripts/fix-return-types.ts +4 -3
  106. package/src/scripts/validate-imports.ts +29 -15
  107. package/src/scripts/validate-naming.ts +29 -20
  108. package/src/scripts/validator-cli.integration.spec.ts +11 -8
@@ -31,10 +31,9 @@ import { DyFM_Log } from '@futdevpro/fsm-dynamo';
31
31
 
32
32
  import namingPatternsRule from '../plugin/rules/naming-patterns';
33
33
 
34
- // The parser is a consumer-provided peer whose package exports require Node16 resolution, while this package
35
- // intentionally compiles with legacy Node resolution for fleet compatibility.
36
- // eslint-disable-next-line @futdevpro/dynamo/no-dynamic-imports, @typescript-eslint/no-require-imports
37
- const tsParser = require('@typescript-eslint/parser');
34
+ // The parser is provided by the unified typescript-eslint consumer peer.
35
+ // eslint-disable-next-line @futdevpro/dynamo/no-dynamic-imports, @typescript-eslint/no-require-imports
36
+ const tsParser = require('typescript-eslint').parser;
38
37
 
39
38
  interface LineColumnMessage_Interface {
40
39
  line: number;
@@ -47,12 +46,17 @@ interface LineColumnMessage_Interface {
47
46
  /**
48
47
  * Result of validating naming conventions in a single file
49
48
  */
50
- interface NamingValidationResult {
49
+ interface NamingValidationResult {
51
50
  /** Path to the file that was validated */
52
51
  file: string;
53
52
  /** Array of naming validation errors found in the file */
54
53
  errors: LineColumnMessage_Interface[];
55
- }
54
+ }
55
+
56
+ /** Identifies the informational diagnostic emitted when isolated validators intentionally ignore inline config. */
57
+ function isIgnoredInlineConfigDiagnostic(message: ESLint.LintResult['messages'][number]): boolean {
58
+ return !message.ruleId && message.message.includes("has no effect because you have 'noInlineConfig'");
59
+ }
56
60
 
57
61
  /**
58
62
  * Validates naming conventions in a single TypeScript file
@@ -76,8 +80,9 @@ async function validateNamingInFile(filePath: string): Promise<NamingValidationR
76
80
  overrideConfigFile: true,
77
81
  overrideConfig: [{
78
82
  files: [ '**/*.{ts,tsx}' ],
79
- linterOptions: {
80
- reportUnusedDisableDirectives: 'off',
83
+ linterOptions: {
84
+ noInlineConfig: true,
85
+ reportUnusedDisableDirectives: 'off',
81
86
  },
82
87
  languageOptions: {
83
88
  parser: tsParser,
@@ -106,17 +111,14 @@ async function validateNamingInFile(filePath: string): Promise<NamingValidationR
106
111
  // Transform ESLint messages into our result format
107
112
  return {
108
113
  file: filePath,
109
- errors: result.messages.map((msg: {
110
- line: number;
111
- column: number;
112
- message: string;
113
- ruleId?: string;
114
- }): LineColumnMessage_Interface => ({
115
- line: msg.line,
116
- column: msg.column,
117
- message: msg.message,
118
- ruleId: msg.ruleId || 'unknown',
119
- })),
114
+ errors: result.messages
115
+ .filter((message: ESLint.LintResult['messages'][number]): boolean => !isIgnoredInlineConfigDiagnostic(message))
116
+ .map((message: ESLint.LintResult['messages'][number]): LineColumnMessage_Interface => ({
117
+ line: message.line,
118
+ column: message.column,
119
+ message: message.message,
120
+ ruleId: message.ruleId || 'unknown',
121
+ })),
120
122
  };
121
123
  }
122
124
 
@@ -134,7 +136,14 @@ async function validateNamingInFile(filePath: string): Promise<NamingValidationR
134
136
  async function main(): Promise<void> {
135
137
  // Find all TypeScript files, excluding common directories and test files
136
138
  const files: string[] = await fg([ '**/*.{ts,tsx}' ], {
137
- ignore: [ '**/node_modules/**', '**/build/**', '**/dist/**', '**/*.spec.ts', '**/*.test.ts' ],
139
+ ignore: [
140
+ '**/node_modules/**',
141
+ '**/build/**',
142
+ '**/dist/**',
143
+ '**/samples/**',
144
+ '**/*.spec.ts',
145
+ '**/*.test.ts',
146
+ ],
138
147
  });
139
148
 
140
149
  DyFM_Log.log(`[dynamo-validate-naming] Scanning ${files.length} files...`);
@@ -46,14 +46,15 @@ describe('| Dynamo validator CLI flat-config integration', (): void => {
46
46
  const result: DyESL_ValidatorResult_Interface = runValidator(
47
47
  'validate-imports.js',
48
48
  'clean.ts',
49
- '/* eslint-disable max-params */\n'
49
+ '/* eslint-disable @consumer-only/plugin-rule */\n'
50
50
  + 'import { join } from \'path\';\n\n'
51
51
  + 'export const value: string = join(\'a\', \'b\');\n',
52
52
  );
53
53
 
54
- expect(result.status).toBe(0);
55
- expect(result.output).toContain('All import validations passed');
56
- expect(result.output).not.toContain('ConfigError');
54
+ expect(result.status).toBe(0);
55
+ expect(result.output).toContain('All import validations passed');
56
+ expect(result.output).not.toContain('ConfigError');
57
+ expect(result.output).not.toContain('Definition for rule');
57
58
  });
58
59
 
59
60
  it('| fails only for an import-order violation', (): void => {
@@ -74,12 +75,14 @@ describe('| Dynamo validator CLI flat-config integration', (): void => {
74
75
  const result: DyESL_ValidatorResult_Interface = runValidator(
75
76
  'validate-naming.js',
76
77
  'clean.control-service.ts',
77
- '/* eslint-disable max-params */\nexport class DyESL_Clean_ControlService { public value: string = "ok"; }\n',
78
+ '/* eslint-disable @consumer-only/plugin-rule */\n'
79
+ + 'export class DyESL_Clean_ControlService { public value: string = "ok"; }\n',
78
80
  );
79
81
 
80
- expect(result.status).toBe(0);
81
- expect(result.output).toContain('All naming validations passed');
82
- expect(result.output).not.toContain('JSDoc');
82
+ expect(result.status).toBe(0);
83
+ expect(result.output).toContain('All naming validations passed');
84
+ expect(result.output).not.toContain('JSDoc');
85
+ expect(result.output).not.toContain('Definition for rule');
83
86
  });
84
87
 
85
88
  it('| fails for a naming-pattern violation', (): void => {