@webpieces/dev-config 0.2.94 → 0.2.97

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 (183) hide show
  1. package/config/eslint/base.mjs +1 -1
  2. package/executors.json +6 -91
  3. package/package.json +6 -19
  4. package/{executors → src/executors}/help/executor.d.ts +4 -2
  5. package/src/executors/help/executor.js.map +1 -0
  6. package/{executors → src/executors}/validate-eslint-sync/executor.d.ts +3 -2
  7. package/src/executors/validate-eslint-sync/executor.js.map +1 -0
  8. package/{executors → src/executors}/validate-versions-locked/executor.js +5 -3
  9. package/src/executors/validate-versions-locked/executor.js.map +1 -0
  10. package/src/generators/init/generator.js.map +1 -1
  11. package/src/index.d.ts +1 -1
  12. package/src/index.js +1 -1
  13. package/src/index.js.map +1 -1
  14. package/src/plugin.d.ts +86 -0
  15. package/{plugin.js → src/plugin.js} +31 -15
  16. package/src/plugin.js.map +1 -0
  17. package/src/toError.d.ts +5 -0
  18. package/src/toError.js +37 -0
  19. package/src/toError.js.map +1 -0
  20. package/templates/eslint.webpieces.config.mjs +1 -1
  21. package/templates/webpieces.exceptions.md +15 -15
  22. package/architecture/executors/diff-utils.d.ts +0 -24
  23. package/architecture/executors/diff-utils.js +0 -119
  24. package/architecture/executors/diff-utils.js.map +0 -1
  25. package/architecture/executors/diff-utils.ts +0 -127
  26. package/architecture/executors/generate/executor.d.ts +0 -16
  27. package/architecture/executors/generate/executor.js +0 -44
  28. package/architecture/executors/generate/executor.js.map +0 -1
  29. package/architecture/executors/generate/executor.ts +0 -59
  30. package/architecture/executors/generate/schema.json +0 -14
  31. package/architecture/executors/validate-architecture-unchanged/executor.d.ts +0 -17
  32. package/architecture/executors/validate-architecture-unchanged/executor.js +0 -229
  33. package/architecture/executors/validate-architecture-unchanged/executor.js.map +0 -1
  34. package/architecture/executors/validate-architecture-unchanged/executor.ts +0 -251
  35. package/architecture/executors/validate-architecture-unchanged/schema.json +0 -14
  36. package/architecture/executors/validate-code/executor.d.ts +0 -78
  37. package/architecture/executors/validate-code/executor.js +0 -243
  38. package/architecture/executors/validate-code/executor.js.map +0 -1
  39. package/architecture/executors/validate-code/executor.ts +0 -406
  40. package/architecture/executors/validate-code/schema.json +0 -227
  41. package/architecture/executors/validate-dtos/executor.d.ts +0 -42
  42. package/architecture/executors/validate-dtos/executor.js +0 -561
  43. package/architecture/executors/validate-dtos/executor.js.map +0 -1
  44. package/architecture/executors/validate-dtos/executor.ts +0 -689
  45. package/architecture/executors/validate-dtos/schema.json +0 -33
  46. package/architecture/executors/validate-modified-files/executor.d.ts +0 -25
  47. package/architecture/executors/validate-modified-files/executor.js +0 -501
  48. package/architecture/executors/validate-modified-files/executor.js.map +0 -1
  49. package/architecture/executors/validate-modified-files/executor.ts +0 -571
  50. package/architecture/executors/validate-modified-files/schema.json +0 -25
  51. package/architecture/executors/validate-modified-methods/executor.d.ts +0 -31
  52. package/architecture/executors/validate-modified-methods/executor.js +0 -694
  53. package/architecture/executors/validate-modified-methods/executor.js.map +0 -1
  54. package/architecture/executors/validate-modified-methods/executor.ts +0 -797
  55. package/architecture/executors/validate-modified-methods/schema.json +0 -25
  56. package/architecture/executors/validate-new-methods/executor.d.ts +0 -28
  57. package/architecture/executors/validate-new-methods/executor.js +0 -513
  58. package/architecture/executors/validate-new-methods/executor.js.map +0 -1
  59. package/architecture/executors/validate-new-methods/executor.ts +0 -584
  60. package/architecture/executors/validate-new-methods/schema.json +0 -25
  61. package/architecture/executors/validate-no-any-unknown/executor.d.ts +0 -42
  62. package/architecture/executors/validate-no-any-unknown/executor.js +0 -462
  63. package/architecture/executors/validate-no-any-unknown/executor.js.map +0 -1
  64. package/architecture/executors/validate-no-any-unknown/executor.ts +0 -540
  65. package/architecture/executors/validate-no-any-unknown/schema.json +0 -24
  66. package/architecture/executors/validate-no-architecture-cycles/executor.d.ts +0 -16
  67. package/architecture/executors/validate-no-architecture-cycles/executor.js +0 -48
  68. package/architecture/executors/validate-no-architecture-cycles/executor.js.map +0 -1
  69. package/architecture/executors/validate-no-architecture-cycles/executor.ts +0 -60
  70. package/architecture/executors/validate-no-architecture-cycles/schema.json +0 -8
  71. package/architecture/executors/validate-no-destructure/executor.d.ts +0 -52
  72. package/architecture/executors/validate-no-destructure/executor.js +0 -491
  73. package/architecture/executors/validate-no-destructure/executor.js.map +0 -1
  74. package/architecture/executors/validate-no-destructure/executor.ts +0 -578
  75. package/architecture/executors/validate-no-destructure/schema.json +0 -24
  76. package/architecture/executors/validate-no-direct-api-resolver/executor.d.ts +0 -47
  77. package/architecture/executors/validate-no-direct-api-resolver/executor.js +0 -566
  78. package/architecture/executors/validate-no-direct-api-resolver/executor.js.map +0 -1
  79. package/architecture/executors/validate-no-direct-api-resolver/executor.ts +0 -666
  80. package/architecture/executors/validate-no-direct-api-resolver/schema.json +0 -29
  81. package/architecture/executors/validate-no-inline-types/executor.d.ts +0 -91
  82. package/architecture/executors/validate-no-inline-types/executor.js +0 -669
  83. package/architecture/executors/validate-no-inline-types/executor.js.map +0 -1
  84. package/architecture/executors/validate-no-inline-types/executor.ts +0 -775
  85. package/architecture/executors/validate-no-inline-types/schema.json +0 -24
  86. package/architecture/executors/validate-no-skiplevel-deps/executor.d.ts +0 -19
  87. package/architecture/executors/validate-no-skiplevel-deps/executor.js +0 -227
  88. package/architecture/executors/validate-no-skiplevel-deps/executor.js.map +0 -1
  89. package/architecture/executors/validate-no-skiplevel-deps/executor.ts +0 -267
  90. package/architecture/executors/validate-no-skiplevel-deps/schema.json +0 -8
  91. package/architecture/executors/validate-packagejson/executor.d.ts +0 -16
  92. package/architecture/executors/validate-packagejson/executor.js +0 -57
  93. package/architecture/executors/validate-packagejson/executor.js.map +0 -1
  94. package/architecture/executors/validate-packagejson/executor.ts +0 -74
  95. package/architecture/executors/validate-packagejson/schema.json +0 -8
  96. package/architecture/executors/validate-prisma-converters/executor.d.ts +0 -60
  97. package/architecture/executors/validate-prisma-converters/executor.js +0 -634
  98. package/architecture/executors/validate-prisma-converters/executor.js.map +0 -1
  99. package/architecture/executors/validate-prisma-converters/executor.ts +0 -822
  100. package/architecture/executors/validate-prisma-converters/schema.json +0 -38
  101. package/architecture/executors/validate-return-types/executor.d.ts +0 -29
  102. package/architecture/executors/validate-return-types/executor.js +0 -439
  103. package/architecture/executors/validate-return-types/executor.js.map +0 -1
  104. package/architecture/executors/validate-return-types/executor.ts +0 -524
  105. package/architecture/executors/validate-return-types/schema.json +0 -24
  106. package/architecture/executors/visualize/executor.d.ts +0 -17
  107. package/architecture/executors/visualize/executor.js +0 -49
  108. package/architecture/executors/visualize/executor.js.map +0 -1
  109. package/architecture/executors/visualize/executor.ts +0 -63
  110. package/architecture/executors/visualize/schema.json +0 -14
  111. package/architecture/index.d.ts +0 -19
  112. package/architecture/index.js +0 -23
  113. package/architecture/index.js.map +0 -1
  114. package/architecture/index.ts +0 -20
  115. package/architecture/lib/graph-comparator.d.ts +0 -39
  116. package/architecture/lib/graph-comparator.js +0 -100
  117. package/architecture/lib/graph-comparator.js.map +0 -1
  118. package/architecture/lib/graph-comparator.ts +0 -141
  119. package/architecture/lib/graph-generator.d.ts +0 -19
  120. package/architecture/lib/graph-generator.js +0 -84
  121. package/architecture/lib/graph-generator.js.map +0 -1
  122. package/architecture/lib/graph-generator.ts +0 -97
  123. package/architecture/lib/graph-loader.d.ts +0 -31
  124. package/architecture/lib/graph-loader.js +0 -98
  125. package/architecture/lib/graph-loader.js.map +0 -1
  126. package/architecture/lib/graph-loader.ts +0 -116
  127. package/architecture/lib/graph-sorter.d.ts +0 -37
  128. package/architecture/lib/graph-sorter.js +0 -110
  129. package/architecture/lib/graph-sorter.js.map +0 -1
  130. package/architecture/lib/graph-sorter.ts +0 -137
  131. package/architecture/lib/graph-visualizer.d.ts +0 -29
  132. package/architecture/lib/graph-visualizer.js +0 -217
  133. package/architecture/lib/graph-visualizer.js.map +0 -1
  134. package/architecture/lib/graph-visualizer.ts +0 -231
  135. package/architecture/lib/package-validator.d.ts +0 -38
  136. package/architecture/lib/package-validator.js +0 -126
  137. package/architecture/lib/package-validator.js.map +0 -1
  138. package/architecture/lib/package-validator.ts +0 -170
  139. package/eslint-plugin/__tests__/catch-error-pattern.test.ts +0 -359
  140. package/eslint-plugin/__tests__/max-file-lines.test.ts +0 -207
  141. package/eslint-plugin/__tests__/max-method-lines.test.ts +0 -258
  142. package/eslint-plugin/__tests__/no-unmanaged-exceptions.test.ts +0 -359
  143. package/eslint-plugin/index.d.ts +0 -23
  144. package/eslint-plugin/index.js +0 -30
  145. package/eslint-plugin/index.js.map +0 -1
  146. package/eslint-plugin/index.ts +0 -29
  147. package/eslint-plugin/rules/catch-error-pattern.d.ts +0 -11
  148. package/eslint-plugin/rules/catch-error-pattern.js +0 -196
  149. package/eslint-plugin/rules/catch-error-pattern.js.map +0 -1
  150. package/eslint-plugin/rules/catch-error-pattern.ts +0 -281
  151. package/eslint-plugin/rules/enforce-architecture.d.ts +0 -15
  152. package/eslint-plugin/rules/enforce-architecture.js +0 -476
  153. package/eslint-plugin/rules/enforce-architecture.js.map +0 -1
  154. package/eslint-plugin/rules/enforce-architecture.ts +0 -543
  155. package/eslint-plugin/rules/max-file-lines.d.ts +0 -12
  156. package/eslint-plugin/rules/max-file-lines.js +0 -257
  157. package/eslint-plugin/rules/max-file-lines.js.map +0 -1
  158. package/eslint-plugin/rules/max-file-lines.ts +0 -272
  159. package/eslint-plugin/rules/max-method-lines.d.ts +0 -12
  160. package/eslint-plugin/rules/max-method-lines.js +0 -240
  161. package/eslint-plugin/rules/max-method-lines.js.map +0 -1
  162. package/eslint-plugin/rules/max-method-lines.ts +0 -287
  163. package/eslint-plugin/rules/no-unmanaged-exceptions.d.ts +0 -22
  164. package/eslint-plugin/rules/no-unmanaged-exceptions.js +0 -160
  165. package/eslint-plugin/rules/no-unmanaged-exceptions.js.map +0 -1
  166. package/eslint-plugin/rules/no-unmanaged-exceptions.ts +0 -179
  167. package/executors/help/executor.js.map +0 -1
  168. package/executors/help/executor.ts +0 -61
  169. package/executors/validate-eslint-sync/executor.js.map +0 -1
  170. package/executors/validate-eslint-sync/executor.ts +0 -83
  171. package/executors/validate-versions-locked/executor.js.map +0 -1
  172. package/executors/validate-versions-locked/executor.ts +0 -367
  173. package/plugin/README.md +0 -243
  174. package/plugin/index.d.ts +0 -4
  175. package/plugin/index.js +0 -8
  176. package/plugin/index.js.map +0 -1
  177. package/plugin/index.ts +0 -4
  178. /package/{executors → src/executors}/help/executor.js +0 -0
  179. /package/{executors → src/executors}/help/schema.json +0 -0
  180. /package/{executors → src/executors}/validate-eslint-sync/executor.js +0 -0
  181. /package/{executors → src/executors}/validate-eslint-sync/schema.json +0 -0
  182. /package/{executors → src/executors}/validate-versions-locked/executor.d.ts +0 -0
  183. /package/{executors → src/executors}/validate-versions-locked/schema.json +0 -0
@@ -1,251 +0,0 @@
1
- /**
2
- * Validate Architecture Unchanged Executor
3
- *
4
- * Validates that the current architecture graph matches the saved blessed graph.
5
- * This ensures no unapproved architecture changes have been made.
6
- *
7
- * Usage:
8
- * nx run architecture:validate-architecture-unchanged
9
- */
10
-
11
- import type { ExecutorContext } from '@nx/devkit';
12
- import * as fs from 'fs';
13
- import * as path from 'path';
14
- import { generateGraph } from '../../lib/graph-generator';
15
- import { sortGraphTopologically } from '../../lib/graph-sorter';
16
- import { compareGraphs } from '../../lib/graph-comparator';
17
- import { loadBlessedGraph, graphFileExists } from '../../lib/graph-loader';
18
-
19
- export interface ValidateArchitectureUnchangedOptions {
20
- graphPath?: string;
21
- }
22
-
23
- export interface ExecutorResult {
24
- success: boolean;
25
- }
26
-
27
- const TMP_DIR = 'tmp/webpieces';
28
- const TMP_MD_FILE = 'webpieces.dependencies.md';
29
-
30
- const DEPENDENCIES_DOC_CONTENT = `# Instructions: Architecture Dependency Violation
31
-
32
- IN GENERAL, it is better to avoid these changes and find a different way by moving classes
33
- around to existing packages you already depend on. It is not always avoidable though.
34
- A clean dependency graph keeps you out of huge trouble later.
35
-
36
- If you are a human, simply run these commands:
37
- * nx run architecture:visualize - to see the new dependencies and validate that change is desired
38
- * nx run architecture:generate - updates the dep graph
39
- * git diff architecture/dependencies.json - to see the deps changes you made
40
-
41
- **READ THIS FILE FIRST before making any changes!**
42
-
43
- ## ⚠️ CRITICAL WARNING ⚠️
44
-
45
- **This is a VERY IMPORTANT change that has LARGE REPERCUSSIONS later!**
46
-
47
- Adding new dependencies creates technical debt that compounds over time:
48
- - Creates coupling between packages that may be hard to undo
49
- - Can create circular dependency tangles
50
- - Makes packages harder to test in isolation
51
- - Increases build times and bundle sizes
52
- - May force unnecessary upgrades across the codebase
53
-
54
- **DO NOT add dependencies without senior developer approval!**
55
-
56
- ## Understanding the Error
57
-
58
- You've attempted to import from a package that is not in your project's allowed dependencies.
59
- The architecture enforces a layered dependency structure where:
60
- - Level 0 packages are foundation packages with NO dependencies on other @webpieces packages
61
- - Higher level packages can only depend on lower level packages
62
- - All dependencies must be explicitly declared
63
-
64
- ## Steps to Resolve
65
-
66
- ### Step 1: Generate Current Dependency Graph
67
- Run this command to see the current architecture:
68
- \`\`\`bash
69
- npx nx run architecture:generate
70
- \`\`\`
71
- This creates/updates \`architecture/dependencies.json\` showing all packages and their levels.
72
-
73
- ### Step 2: Analyze the Proposed Change
74
- Ask yourself:
75
- 1. **Is this import truly necessary?** Can you refactor to avoid it?
76
- 2. **Should the code move instead?** Maybe the code belongs in a different package.
77
- 3. **Will this create a cycle?** Use \`npx nx graph\` to visualize dependencies.
78
- 4. **Can you use an interface/abstraction?** Define interface in lower-level package, implement in higher-level.
79
-
80
- ### Step 3: Get Senior Developer Approval
81
-
82
- ## 🛑 AI AGENTS: STOP HERE AND ASK FOR HUMAN APPROVAL! 🛑
83
-
84
- **YOU MUST NOT PROCEED TO STEP 4 WITHOUT EXPLICIT HUMAN APPROVAL!**
85
-
86
- **REQUIRED**: Discuss this architectural change with a senior developer before proceeding.
87
- - Explain why the dependency is needed
88
- - Show you've considered alternatives (Step 2)
89
- - **WAIT for explicit approval before making ANY changes to project.json or package.json**
90
-
91
- **AI Agent Instructions:**
92
- 1. Present your analysis from Step 2 to the human
93
- 2. Explain which package needs which dependency and why
94
- 3. ASK: "Do you approve adding this dependency?"
95
- 4. **DO NOT modify project.json or package.json until you receive explicit "yes" or approval**
96
-
97
- ### Step 4: If Approved, Add the Dependency
98
-
99
- ## ⛔ NEVER MODIFY THESE FILES WITHOUT HUMAN APPROVAL FROM STEP 3! ⛔
100
-
101
- Only after receiving explicit human approval in Step 3, make these changes:
102
-
103
- 1. **Update project.json** - Add to \`build.dependsOn\`:
104
- \`\`\`json
105
- {
106
- "targets": {
107
- "build": {
108
- "dependsOn": ["^build", "dep1:build", "NEW_PACKAGE:build"]
109
- }
110
- }
111
- }
112
- \`\`\`
113
-
114
- 2. **Update package.json** - Add to \`dependencies\`:
115
- \`\`\`json
116
- {
117
- "dependencies": {
118
- "@webpieces/NEW_PACKAGE": "*"
119
- }
120
- }
121
- \`\`\`
122
-
123
- ### Step 5: Update Architecture Definition
124
- Run this command to validate and update the architecture:
125
- \`\`\`bash
126
- npx nx run architecture:generate
127
- \`\`\`
128
-
129
- This will:
130
- - Detect any cycles (which MUST be fixed before proceeding)
131
- - Update \`architecture/dependencies.json\` with the new dependency
132
- - Recalculate package levels
133
-
134
- ### Step 6: Verify No Cycles
135
- \`\`\`bash
136
- npx nx run architecture:validate-no-architecture-cycles
137
- \`\`\`
138
-
139
- If cycles are detected, you MUST refactor to break the cycle. Common strategies:
140
- - Move shared code to a lower-level package
141
- - Use dependency inversion (interfaces in low-level, implementations in high-level)
142
- - Restructure package boundaries
143
-
144
- ## Alternative Solutions (Preferred over adding dependencies)
145
-
146
- ### Option A: Move the Code
147
- If you need functionality from another package, consider moving that code to a shared lower-level package.
148
-
149
- ### Option B: Dependency Inversion
150
- Define an interface in the lower-level package, implement it in the higher-level package:
151
- \`\`\`typescript
152
- // In foundation package (level 0)
153
- export interface Logger { log(msg: string): void; }
154
-
155
- // In higher-level package
156
- export class ConsoleLogger implements Logger { ... }
157
- \`\`\`
158
-
159
- ### Option C: Pass Dependencies as Parameters
160
- Instead of importing, receive the dependency as a constructor or method parameter.
161
-
162
- ## Remember
163
- - Every dependency you add today is technical debt for tomorrow
164
- - The best dependency is the one you don't need
165
- - When in doubt, refactor rather than add dependencies
166
- `;
167
-
168
- /**
169
- * Write the instructions documentation to tmp directory
170
- */
171
- function writeTmpInstructionsFile(workspaceRoot: string): string {
172
- const tmpDir = path.join(workspaceRoot, TMP_DIR);
173
- const mdPath = path.join(tmpDir, TMP_MD_FILE);
174
-
175
- // Ensure tmp directory exists
176
- fs.mkdirSync(tmpDir, { recursive: true });
177
-
178
- // Write documentation MD file
179
- fs.writeFileSync(mdPath, DEPENDENCIES_DOC_CONTENT);
180
-
181
- return mdPath;
182
- }
183
-
184
- export default async function runExecutor(
185
- options: ValidateArchitectureUnchangedOptions,
186
- context: ExecutorContext
187
- ): Promise<ExecutorResult> {
188
- const { graphPath } = options;
189
- const workspaceRoot = context.root;
190
-
191
- console.log('\n🔍 Validating Architecture Unchanged\n');
192
-
193
- try {
194
- // Check if saved graph exists
195
- if (!graphFileExists(workspaceRoot, graphPath)) {
196
- console.error('❌ No saved graph found at architecture/dependencies.json');
197
- console.error('');
198
- console.error('To initialize:');
199
- console.error(' 1. Run: nx run architecture:generate');
200
- console.error(' 2. Run: nx run architecture:visualize');
201
- console.error(' 3. Manually inspect the generated graph to confirm it is the desired architecture');
202
- console.error(' 4. Commit architecture/dependencies.json');
203
- return { success: false };
204
- }
205
-
206
- // Step 1: Generate current graph from project.json files
207
- console.log('📊 Generating current dependency graph...');
208
- const rawGraph = await generateGraph();
209
-
210
- // Step 2: Topological sort (to get enhanced graph with levels)
211
- console.log('🔄 Computing topological layers...');
212
- const currentGraph = sortGraphTopologically(rawGraph);
213
-
214
- // Step 3: Load saved graph
215
- console.log('📂 Loading saved graph...');
216
- const savedGraph = loadBlessedGraph(workspaceRoot, graphPath);
217
-
218
- if (!savedGraph) {
219
- console.error('❌ Could not load saved graph');
220
- return { success: false };
221
- }
222
-
223
- // Step 4: Compare graphs
224
- console.log('🔍 Comparing current graph to saved graph...');
225
- const comparison = compareGraphs(currentGraph, savedGraph);
226
-
227
- if (comparison.identical) {
228
- console.log('✅ Architecture unchanged - current graph matches saved graph');
229
- return { success: true };
230
- } else {
231
- // Write instructions file for AI agent
232
- const mdPath = writeTmpInstructionsFile(workspaceRoot);
233
-
234
- console.error('❌ Architecture has changed since last update!');
235
- console.error('\nDifferences:');
236
- console.error(comparison.summary);
237
- console.error('');
238
- console.error('⚠️ *** Refer to ' + mdPath + ' for instructions on how to fix *** ⚠️');
239
- console.error('');
240
- console.error('To fix:');
241
- console.error(' 1. Review the changes above');
242
- console.error(' 2. If intentional, ASK USER to run: nx run architecture:generate since this is a critical change');
243
- console.error(' 3. Commit the updated architecture/dependencies.json');
244
- return { success: false };
245
- }
246
- } catch (err: unknown) {
247
- const error = err instanceof Error ? err : new Error(String(err));
248
- console.error('❌ Architecture validation failed:', error.message);
249
- return { success: false };
250
- }
251
- }
@@ -1,14 +0,0 @@
1
- {
2
- "$schema": "http://json-schema.org/schema",
3
- "title": "Validate Architecture Unchanged Executor",
4
- "description": "Validates that the current architecture matches the saved graph",
5
- "type": "object",
6
- "properties": {
7
- "graphPath": {
8
- "type": "string",
9
- "description": "Path to the graph file (relative to workspace root)",
10
- "default": "architecture/dependencies.json"
11
- }
12
- },
13
- "required": []
14
- }
@@ -1,78 +0,0 @@
1
- import { ExecutorContext } from '@nx/devkit';
2
- import { ReturnTypeMode } from '../validate-return-types/executor';
3
- import { NoInlineTypesMode } from '../validate-no-inline-types/executor';
4
- import { NoAnyUnknownMode } from '../validate-no-any-unknown/executor';
5
- import { ValidateDtosMode } from '../validate-dtos/executor';
6
- import { PrismaConverterMode } from '../validate-prisma-converters/executor';
7
- import { NoDestructureMode } from '../validate-no-destructure/executor';
8
- import { NoDirectApiResolverMode } from '../validate-no-direct-api-resolver/executor';
9
- export type MethodMaxLimitMode = 'OFF' | 'NEW_METHODS' | 'NEW_AND_MODIFIED_METHODS' | 'MODIFIED_FILES';
10
- export type FileMaxLimitMode = 'OFF' | 'MODIFIED_FILES';
11
- export interface MethodMaxLimitConfig {
12
- limit?: number;
13
- mode?: MethodMaxLimitMode;
14
- disableAllowed?: boolean;
15
- ignoreModifiedUntilEpoch?: number;
16
- }
17
- export interface FileMaxLimitConfig {
18
- limit?: number;
19
- mode?: FileMaxLimitMode;
20
- disableAllowed?: boolean;
21
- ignoreModifiedUntilEpoch?: number;
22
- }
23
- export interface RequireReturnTypeConfig {
24
- mode?: ReturnTypeMode;
25
- disableAllowed?: boolean;
26
- ignoreModifiedUntilEpoch?: number;
27
- }
28
- export interface NoInlineTypeLiteralsConfig {
29
- mode?: NoInlineTypesMode;
30
- disableAllowed?: boolean;
31
- ignoreModifiedUntilEpoch?: number;
32
- }
33
- export interface NoAnyUnknownConfig {
34
- mode?: NoAnyUnknownMode;
35
- disableAllowed?: boolean;
36
- ignoreModifiedUntilEpoch?: number;
37
- }
38
- export interface ValidateDtosConfig {
39
- mode?: ValidateDtosMode;
40
- disableAllowed?: boolean;
41
- prismaSchemaPath?: string;
42
- dtoSourcePaths?: string[];
43
- ignoreModifiedUntilEpoch?: number;
44
- }
45
- export interface PrismaConverterConfig {
46
- mode?: PrismaConverterMode;
47
- disableAllowed?: boolean;
48
- schemaPath?: string;
49
- convertersPaths?: string[];
50
- enforcePaths?: string[];
51
- ignoreModifiedUntilEpoch?: number;
52
- }
53
- export interface NoDestructureConfig {
54
- mode?: NoDestructureMode;
55
- disableAllowed?: boolean;
56
- ignoreModifiedUntilEpoch?: number;
57
- }
58
- export interface NoDirectApiResolverConfig {
59
- mode?: NoDirectApiResolverMode;
60
- disableAllowed?: boolean;
61
- ignoreModifiedUntilEpoch?: number;
62
- enforcePaths?: string[];
63
- }
64
- export interface ValidateCodeOptions {
65
- methodMaxLimit?: MethodMaxLimitConfig;
66
- fileMaxLimit?: FileMaxLimitConfig;
67
- requireReturnType?: RequireReturnTypeConfig;
68
- noInlineTypeLiterals?: NoInlineTypeLiteralsConfig;
69
- noAnyUnknown?: NoAnyUnknownConfig;
70
- validateDtos?: ValidateDtosConfig;
71
- prismaConverter?: PrismaConverterConfig;
72
- noDestructure?: NoDestructureConfig;
73
- noDirectApiInResolver?: NoDirectApiResolverConfig;
74
- }
75
- export interface ExecutorResult {
76
- success: boolean;
77
- }
78
- export default function runExecutor(options: ValidateCodeOptions, context: ExecutorContext): Promise<ExecutorResult>;
@@ -1,243 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = runExecutor;
4
- const tslib_1 = require("tslib");
5
- const executor_1 = tslib_1.__importDefault(require("../validate-new-methods/executor"));
6
- const executor_2 = tslib_1.__importDefault(require("../validate-modified-methods/executor"));
7
- const executor_3 = tslib_1.__importDefault(require("../validate-modified-files/executor"));
8
- const executor_4 = tslib_1.__importDefault(require("../validate-return-types/executor"));
9
- const executor_5 = tslib_1.__importDefault(require("../validate-no-inline-types/executor"));
10
- const executor_6 = tslib_1.__importDefault(require("../validate-no-any-unknown/executor"));
11
- const executor_7 = tslib_1.__importDefault(require("../validate-dtos/executor"));
12
- const executor_8 = tslib_1.__importDefault(require("../validate-prisma-converters/executor"));
13
- const executor_9 = tslib_1.__importDefault(require("../validate-no-destructure/executor"));
14
- const executor_10 = tslib_1.__importDefault(require("../validate-no-direct-api-resolver/executor"));
15
- const VALID_MODES = {
16
- methodMaxLimit: ['OFF', 'NEW_METHODS', 'NEW_AND_MODIFIED_METHODS', 'MODIFIED_FILES'],
17
- fileMaxLimit: ['OFF', 'MODIFIED_FILES'],
18
- requireReturnType: ['OFF', 'NEW_METHODS', 'NEW_AND_MODIFIED_METHODS', 'MODIFIED_FILES'],
19
- noInlineTypeLiterals: ['OFF', 'NEW_METHODS', 'NEW_AND_MODIFIED_METHODS', 'MODIFIED_FILES'],
20
- noAnyUnknown: ['OFF', 'MODIFIED_CODE', 'MODIFIED_FILES'],
21
- validateDtos: ['OFF', 'MODIFIED_CLASS', 'MODIFIED_FILES'],
22
- prismaConverter: ['OFF', 'NEW_AND_MODIFIED_METHODS', 'MODIFIED_FILES'],
23
- noDestructure: ['OFF', 'MODIFIED_CODE', 'MODIFIED_FILES'],
24
- noDirectApiInResolver: ['OFF', 'MODIFIED_CODE', 'NEW_AND_MODIFIED_METHODS', 'MODIFIED_FILES'],
25
- };
26
- /**
27
- * Validate that all configured modes are valid. Produces clear error messages naming the rule.
28
- */
29
- function validateModes(options) {
30
- const errors = [];
31
- const modeEntries = [
32
- ['methodMaxLimit', options.methodMaxLimit?.mode],
33
- ['fileMaxLimit', options.fileMaxLimit?.mode],
34
- ['requireReturnType', options.requireReturnType?.mode],
35
- ['noInlineTypeLiterals', options.noInlineTypeLiterals?.mode],
36
- ['noAnyUnknown', options.noAnyUnknown?.mode],
37
- ['validateDtos', options.validateDtos?.mode],
38
- ['prismaConverter', options.prismaConverter?.mode],
39
- ['noDestructure', options.noDestructure?.mode],
40
- ['noDirectApiInResolver', options.noDirectApiInResolver?.mode],
41
- ];
42
- for (const [ruleName, modeValue] of modeEntries) {
43
- if (modeValue === undefined)
44
- continue;
45
- const validModes = VALID_MODES[ruleName];
46
- if (!validModes.includes(modeValue)) {
47
- errors.push(`${ruleName}.mode = '${modeValue}' is invalid. Valid modes: ${validModes.join(', ')}`);
48
- }
49
- }
50
- return errors;
51
- }
52
- function formatEpochDate(epoch) {
53
- return new Date(epoch * 1000).toISOString().split('T')[0];
54
- }
55
- function resolveMethodMode(normalMode, epoch) {
56
- if (epoch === undefined) {
57
- return { mode: normalMode, override: undefined };
58
- }
59
- const nowSeconds = Date.now() / 1000;
60
- if (nowSeconds < epoch) {
61
- // Active: downgrade to skip modified checking
62
- const downgraded = normalMode === 'OFF' ? 'OFF' : 'NEW_METHODS';
63
- return {
64
- mode: downgraded,
65
- override: { active: true, normalMode, expiresDate: formatEpochDate(epoch) },
66
- };
67
- }
68
- // Expired
69
- return { mode: normalMode, override: undefined };
70
- }
71
- function resolveFileMode(normalMode, epoch) {
72
- if (epoch === undefined) {
73
- return { mode: normalMode, override: undefined };
74
- }
75
- const nowSeconds = Date.now() / 1000;
76
- if (nowSeconds < epoch) {
77
- // Active: file checking is inherently about modified files, so skip entirely
78
- return {
79
- mode: 'OFF',
80
- override: { active: true, normalMode, expiresDate: formatEpochDate(epoch) },
81
- };
82
- }
83
- // Expired
84
- return { mode: normalMode, override: undefined };
85
- }
86
- function parseConfig(options) {
87
- const methodConfig = options.methodMaxLimit ?? {};
88
- const fileConfig = options.fileMaxLimit ?? {};
89
- const normalMethodMode = methodConfig.mode ?? 'NEW_AND_MODIFIED_METHODS';
90
- const normalFileMode = fileConfig.mode ?? 'MODIFIED_FILES';
91
- const methodResolved = resolveMethodMode(normalMethodMode, methodConfig.ignoreModifiedUntilEpoch);
92
- const fileResolved = resolveFileMode(normalFileMode, fileConfig.ignoreModifiedUntilEpoch);
93
- return {
94
- methodLimit: methodConfig.limit ?? 80,
95
- methodMode: methodResolved.mode,
96
- methodDisableAllowed: methodConfig.disableAllowed ?? true,
97
- methodOverride: methodResolved.override,
98
- fileLimit: fileConfig.limit ?? 900,
99
- fileMode: fileResolved.mode,
100
- fileDisableAllowed: fileConfig.disableAllowed ?? true,
101
- fileOverride: fileResolved.override,
102
- returnTypeMode: options.requireReturnType?.mode ?? 'OFF',
103
- returnTypeDisableAllowed: options.requireReturnType?.disableAllowed ?? true,
104
- returnTypeIgnoreEpoch: options.requireReturnType?.ignoreModifiedUntilEpoch,
105
- noInlineTypesMode: options.noInlineTypeLiterals?.mode ?? 'OFF',
106
- noInlineTypesDisableAllowed: options.noInlineTypeLiterals?.disableAllowed ?? true,
107
- noInlineTypesIgnoreEpoch: options.noInlineTypeLiterals?.ignoreModifiedUntilEpoch,
108
- noAnyUnknownMode: options.noAnyUnknown?.mode ?? 'OFF',
109
- noAnyUnknownDisableAllowed: options.noAnyUnknown?.disableAllowed ?? true,
110
- noAnyUnknownIgnoreEpoch: options.noAnyUnknown?.ignoreModifiedUntilEpoch,
111
- validateDtosMode: options.validateDtos?.mode ?? 'OFF',
112
- validateDtosDisableAllowed: options.validateDtos?.disableAllowed ?? true,
113
- validateDtosPrismaPath: options.validateDtos?.prismaSchemaPath,
114
- validateDtosSrcPaths: options.validateDtos?.dtoSourcePaths ?? [],
115
- validateDtosIgnoreEpoch: options.validateDtos?.ignoreModifiedUntilEpoch,
116
- prismaConverterMode: options.prismaConverter?.mode ?? 'OFF',
117
- prismaConverterDisableAllowed: options.prismaConverter?.disableAllowed ?? true,
118
- prismaConverterSchemaPath: options.prismaConverter?.schemaPath,
119
- prismaConverterConvertersPaths: options.prismaConverter?.convertersPaths ?? [],
120
- prismaConverterEnforcePaths: options.prismaConverter?.enforcePaths ?? [],
121
- prismaConverterIgnoreEpoch: options.prismaConverter?.ignoreModifiedUntilEpoch,
122
- noDestructureMode: options.noDestructure?.mode ?? 'OFF',
123
- noDestructureDisableAllowed: options.noDestructure?.disableAllowed ?? true,
124
- noDestructureIgnoreEpoch: options.noDestructure?.ignoreModifiedUntilEpoch,
125
- noDirectApiResolverMode: options.noDirectApiInResolver?.mode ?? 'OFF',
126
- noDirectApiResolverDisableAllowed: options.noDirectApiInResolver?.disableAllowed ?? true,
127
- noDirectApiResolverIgnoreEpoch: options.noDirectApiInResolver?.ignoreModifiedUntilEpoch,
128
- noDirectApiResolverEnforcePaths: options.noDirectApiInResolver?.enforcePaths ?? [],
129
- };
130
- }
131
- function formatOverride(override) {
132
- if (!override) {
133
- return '';
134
- }
135
- return ` (override active, normal: ${override.normalMode}, expires: ${override.expiresDate})`;
136
- }
137
- function logConfig(config) {
138
- console.log('\n\ud83d\udccf Running Code Validations\n');
139
- console.log(` Method limits: mode=${config.methodMode}${formatOverride(config.methodOverride)}, limit=${config.methodLimit}, disableAllowed=${config.methodDisableAllowed}`);
140
- console.log(` File limits: mode=${config.fileMode}${formatOverride(config.fileOverride)}, limit=${config.fileLimit}, disableAllowed=${config.fileDisableAllowed}`);
141
- console.log(` Require return types: mode=${config.returnTypeMode}, disableAllowed=${config.returnTypeDisableAllowed}`);
142
- console.log(` No inline type literals: mode=${config.noInlineTypesMode}, disableAllowed=${config.noInlineTypesDisableAllowed}`);
143
- console.log(` No any/unknown: mode=${config.noAnyUnknownMode}, disableAllowed=${config.noAnyUnknownDisableAllowed}`);
144
- console.log(` Validate DTOs: mode=${config.validateDtosMode}, disableAllowed=${config.validateDtosDisableAllowed}`);
145
- console.log(` Prisma converters: mode=${config.prismaConverterMode}, disableAllowed=${config.prismaConverterDisableAllowed}`);
146
- console.log(` No destructure: mode=${config.noDestructureMode}, disableAllowed=${config.noDestructureDisableAllowed}`);
147
- console.log(` No direct API in resolver: mode=${config.noDirectApiResolverMode}, disableAllowed=${config.noDirectApiResolverDisableAllowed}`);
148
- console.log('');
149
- }
150
- function isAllOff(config) {
151
- return config.methodMode === 'OFF' && config.fileMode === 'OFF' &&
152
- config.returnTypeMode === 'OFF' && config.noInlineTypesMode === 'OFF' &&
153
- config.noAnyUnknownMode === 'OFF' && config.validateDtosMode === 'OFF' &&
154
- config.prismaConverterMode === 'OFF' && config.noDestructureMode === 'OFF' &&
155
- config.noDirectApiResolverMode === 'OFF';
156
- }
157
- async function runMethodValidators(config, context) {
158
- const results = [];
159
- const runNew = config.methodMode === 'NEW_METHODS' || config.methodMode === 'NEW_AND_MODIFIED_METHODS';
160
- const runModified = config.methodMode === 'NEW_AND_MODIFIED_METHODS' || config.methodMode === 'MODIFIED_FILES';
161
- if (runNew) {
162
- results.push(await (0, executor_1.default)({
163
- limit: config.methodLimit,
164
- mode: config.methodMode, disableAllowed: config.methodDisableAllowed,
165
- }, context));
166
- }
167
- if (runModified) {
168
- results.push(await (0, executor_2.default)({
169
- limit: config.methodLimit, mode: config.methodMode, disableAllowed: config.methodDisableAllowed,
170
- }, context));
171
- }
172
- return results;
173
- }
174
- async function runExecutor(options, context) {
175
- const modeErrors = validateModes(options);
176
- if (modeErrors.length > 0) {
177
- console.error('');
178
- for (const err of modeErrors) {
179
- console.error(`❌ ${err}`);
180
- }
181
- console.error('');
182
- return { success: false };
183
- }
184
- const config = parseConfig(options);
185
- if (isAllOff(config)) {
186
- console.log('\n\u23ed\ufe0f Skipping all code validations (all modes: OFF)\n');
187
- return { success: true };
188
- }
189
- logConfig(config);
190
- const methodResults = await runMethodValidators(config, context);
191
- const fileResult = await (0, executor_3.default)({
192
- limit: config.fileLimit, mode: config.fileMode, disableAllowed: config.fileDisableAllowed,
193
- }, context);
194
- const returnTypesResult = await (0, executor_4.default)({
195
- mode: config.returnTypeMode,
196
- disableAllowed: config.returnTypeDisableAllowed,
197
- ignoreModifiedUntilEpoch: config.returnTypeIgnoreEpoch,
198
- }, context);
199
- const noInlineTypesResult = await (0, executor_5.default)({
200
- mode: config.noInlineTypesMode,
201
- disableAllowed: config.noInlineTypesDisableAllowed,
202
- ignoreModifiedUntilEpoch: config.noInlineTypesIgnoreEpoch,
203
- }, context);
204
- const noAnyUnknownResult = await (0, executor_6.default)({
205
- mode: config.noAnyUnknownMode,
206
- disableAllowed: config.noAnyUnknownDisableAllowed,
207
- ignoreModifiedUntilEpoch: config.noAnyUnknownIgnoreEpoch,
208
- }, context);
209
- const validateDtosResult = await (0, executor_7.default)({
210
- mode: config.validateDtosMode,
211
- disableAllowed: config.validateDtosDisableAllowed,
212
- prismaSchemaPath: config.validateDtosPrismaPath,
213
- dtoSourcePaths: config.validateDtosSrcPaths,
214
- ignoreModifiedUntilEpoch: config.validateDtosIgnoreEpoch,
215
- }, context);
216
- const prismaConverterResult = await (0, executor_8.default)({
217
- mode: config.prismaConverterMode,
218
- disableAllowed: config.prismaConverterDisableAllowed,
219
- schemaPath: config.prismaConverterSchemaPath,
220
- convertersPaths: config.prismaConverterConvertersPaths,
221
- enforcePaths: config.prismaConverterEnforcePaths,
222
- ignoreModifiedUntilEpoch: config.prismaConverterIgnoreEpoch,
223
- }, context);
224
- const noDestructureResult = await (0, executor_9.default)({
225
- mode: config.noDestructureMode,
226
- disableAllowed: config.noDestructureDisableAllowed,
227
- ignoreModifiedUntilEpoch: config.noDestructureIgnoreEpoch,
228
- }, context);
229
- const noDirectApiResolverResult = await (0, executor_10.default)({
230
- mode: config.noDirectApiResolverMode,
231
- disableAllowed: config.noDirectApiResolverDisableAllowed,
232
- ignoreModifiedUntilEpoch: config.noDirectApiResolverIgnoreEpoch,
233
- enforcePaths: config.noDirectApiResolverEnforcePaths,
234
- }, context);
235
- const allSuccess = methodResults.every((r) => r.success) &&
236
- fileResult.success && returnTypesResult.success &&
237
- noInlineTypesResult.success && noAnyUnknownResult.success &&
238
- validateDtosResult.success && prismaConverterResult.success &&
239
- noDestructureResult.success && noDirectApiResolverResult.success;
240
- console.log(allSuccess ? '\n\u2705 All code validations passed\n' : '\n\u274c Some code validations failed\n');
241
- return { success: allSuccess };
242
- }
243
- //# sourceMappingURL=executor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../../../../../packages/tooling/dev-config/architecture/executors/validate-code/executor.ts"],"names":[],"mappings":"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","sourcesContent":["import { ExecutorContext } from '@nx/devkit';\nimport runNewMethodsExecutor from '../validate-new-methods/executor';\nimport runModifiedMethodsExecutor from '../validate-modified-methods/executor';\nimport runModifiedFilesExecutor from '../validate-modified-files/executor';\nimport runReturnTypesExecutor, { ReturnTypeMode } from '../validate-return-types/executor';\nimport runNoInlineTypesExecutor, { NoInlineTypesMode } from '../validate-no-inline-types/executor';\nimport runNoAnyUnknownExecutor, { NoAnyUnknownMode } from '../validate-no-any-unknown/executor';\nimport runValidateDtosExecutor, { ValidateDtosMode } from '../validate-dtos/executor';\nimport runPrismaConvertersExecutor, { PrismaConverterMode } from '../validate-prisma-converters/executor';\nimport runNoDestructureExecutor, { NoDestructureMode } from '../validate-no-destructure/executor';\nimport runNoDirectApiResolverExecutor, { NoDirectApiResolverMode } from '../validate-no-direct-api-resolver/executor';\n\nexport type MethodMaxLimitMode = 'OFF' | 'NEW_METHODS' | 'NEW_AND_MODIFIED_METHODS' | 'MODIFIED_FILES';\nexport type FileMaxLimitMode = 'OFF' | 'MODIFIED_FILES';\n\nexport interface MethodMaxLimitConfig {\n limit?: number;\n mode?: MethodMaxLimitMode;\n disableAllowed?: boolean;\n ignoreModifiedUntilEpoch?: number;\n}\n\nexport interface FileMaxLimitConfig {\n limit?: number;\n mode?: FileMaxLimitMode;\n disableAllowed?: boolean;\n ignoreModifiedUntilEpoch?: number;\n}\n\nexport interface RequireReturnTypeConfig {\n mode?: ReturnTypeMode;\n disableAllowed?: boolean;\n ignoreModifiedUntilEpoch?: number;\n}\n\nexport interface NoInlineTypeLiteralsConfig {\n mode?: NoInlineTypesMode;\n disableAllowed?: boolean;\n ignoreModifiedUntilEpoch?: number;\n}\n\nexport interface NoAnyUnknownConfig {\n mode?: NoAnyUnknownMode;\n disableAllowed?: boolean;\n ignoreModifiedUntilEpoch?: number;\n}\n\nexport interface ValidateDtosConfig {\n mode?: ValidateDtosMode;\n disableAllowed?: boolean;\n prismaSchemaPath?: string;\n dtoSourcePaths?: string[];\n ignoreModifiedUntilEpoch?: number;\n}\n\nexport interface PrismaConverterConfig {\n mode?: PrismaConverterMode;\n disableAllowed?: boolean;\n schemaPath?: string;\n convertersPaths?: string[];\n enforcePaths?: string[];\n ignoreModifiedUntilEpoch?: number;\n}\n\nexport interface NoDestructureConfig {\n mode?: NoDestructureMode;\n disableAllowed?: boolean;\n ignoreModifiedUntilEpoch?: number;\n}\n\nexport interface NoDirectApiResolverConfig {\n mode?: NoDirectApiResolverMode;\n disableAllowed?: boolean;\n ignoreModifiedUntilEpoch?: number;\n enforcePaths?: string[];\n}\n\nexport interface ValidateCodeOptions {\n methodMaxLimit?: MethodMaxLimitConfig;\n fileMaxLimit?: FileMaxLimitConfig;\n requireReturnType?: RequireReturnTypeConfig;\n noInlineTypeLiterals?: NoInlineTypeLiteralsConfig;\n noAnyUnknown?: NoAnyUnknownConfig;\n validateDtos?: ValidateDtosConfig;\n prismaConverter?: PrismaConverterConfig;\n noDestructure?: NoDestructureConfig;\n noDirectApiInResolver?: NoDirectApiResolverConfig;\n}\n\nexport interface ExecutorResult {\n success: boolean;\n}\n\ninterface OverrideInfo {\n active: boolean;\n normalMode: string;\n expiresDate: string;\n}\n\ninterface ParsedConfig {\n methodLimit: number;\n methodMode: MethodMaxLimitMode;\n methodDisableAllowed: boolean;\n methodOverride: OverrideInfo | undefined;\n fileLimit: number;\n fileMode: FileMaxLimitMode;\n fileDisableAllowed: boolean;\n fileOverride: OverrideInfo | undefined;\n returnTypeMode: ReturnTypeMode;\n returnTypeDisableAllowed: boolean;\n returnTypeIgnoreEpoch: number | undefined;\n noInlineTypesMode: NoInlineTypesMode;\n noInlineTypesDisableAllowed: boolean;\n noInlineTypesIgnoreEpoch: number | undefined;\n noAnyUnknownMode: NoAnyUnknownMode;\n noAnyUnknownDisableAllowed: boolean;\n noAnyUnknownIgnoreEpoch: number | undefined;\n validateDtosMode: ValidateDtosMode;\n validateDtosDisableAllowed: boolean;\n validateDtosPrismaPath: string | undefined;\n validateDtosSrcPaths: string[];\n validateDtosIgnoreEpoch: number | undefined;\n prismaConverterMode: PrismaConverterMode;\n prismaConverterDisableAllowed: boolean;\n prismaConverterSchemaPath: string | undefined;\n prismaConverterConvertersPaths: string[];\n prismaConverterEnforcePaths: string[];\n prismaConverterIgnoreEpoch: number | undefined;\n noDestructureMode: NoDestructureMode;\n noDestructureDisableAllowed: boolean;\n noDestructureIgnoreEpoch: number | undefined;\n noDirectApiResolverMode: NoDirectApiResolverMode;\n noDirectApiResolverDisableAllowed: boolean;\n noDirectApiResolverIgnoreEpoch: number | undefined;\n noDirectApiResolverEnforcePaths: string[];\n}\n\ninterface ResolvedMethodMode {\n mode: MethodMaxLimitMode;\n override: OverrideInfo | undefined;\n}\n\ninterface ResolvedFileMode {\n mode: FileMaxLimitMode;\n override: OverrideInfo | undefined;\n}\n\nconst VALID_MODES: Record<string, string[]> = {\n methodMaxLimit: ['OFF', 'NEW_METHODS', 'NEW_AND_MODIFIED_METHODS', 'MODIFIED_FILES'],\n fileMaxLimit: ['OFF', 'MODIFIED_FILES'],\n requireReturnType: ['OFF', 'NEW_METHODS', 'NEW_AND_MODIFIED_METHODS', 'MODIFIED_FILES'],\n noInlineTypeLiterals: ['OFF', 'NEW_METHODS', 'NEW_AND_MODIFIED_METHODS', 'MODIFIED_FILES'],\n noAnyUnknown: ['OFF', 'MODIFIED_CODE', 'MODIFIED_FILES'],\n validateDtos: ['OFF', 'MODIFIED_CLASS', 'MODIFIED_FILES'],\n prismaConverter: ['OFF', 'NEW_AND_MODIFIED_METHODS', 'MODIFIED_FILES'],\n noDestructure: ['OFF', 'MODIFIED_CODE', 'MODIFIED_FILES'],\n noDirectApiInResolver: ['OFF', 'MODIFIED_CODE', 'NEW_AND_MODIFIED_METHODS', 'MODIFIED_FILES'],\n};\n\n/**\n * Validate that all configured modes are valid. Produces clear error messages naming the rule.\n */\nfunction validateModes(options: ValidateCodeOptions): string[] {\n const errors: string[] = [];\n\n type ModeEntry = [string, string | undefined];\n const modeEntries: ModeEntry[] = [\n ['methodMaxLimit', options.methodMaxLimit?.mode],\n ['fileMaxLimit', options.fileMaxLimit?.mode],\n ['requireReturnType', options.requireReturnType?.mode],\n ['noInlineTypeLiterals', options.noInlineTypeLiterals?.mode],\n ['noAnyUnknown', options.noAnyUnknown?.mode],\n ['validateDtos', options.validateDtos?.mode],\n ['prismaConverter', options.prismaConverter?.mode],\n ['noDestructure', options.noDestructure?.mode],\n ['noDirectApiInResolver', options.noDirectApiInResolver?.mode],\n ];\n\n for (const [ruleName, modeValue] of modeEntries) {\n if (modeValue === undefined) continue;\n const validModes = VALID_MODES[ruleName];\n if (!validModes.includes(modeValue)) {\n errors.push(`${ruleName}.mode = '${modeValue}' is invalid. Valid modes: ${validModes.join(', ')}`);\n }\n }\n\n return errors;\n}\n\nfunction formatEpochDate(epoch: number): string {\n return new Date(epoch * 1000).toISOString().split('T')[0];\n}\n\nfunction resolveMethodMode(\n normalMode: MethodMaxLimitMode, epoch: number | undefined\n): ResolvedMethodMode {\n if (epoch === undefined) {\n return { mode: normalMode, override: undefined };\n }\n const nowSeconds = Date.now() / 1000;\n if (nowSeconds < epoch) {\n // Active: downgrade to skip modified checking\n const downgraded: MethodMaxLimitMode =\n normalMode === 'OFF' ? 'OFF' : 'NEW_METHODS';\n return {\n mode: downgraded,\n override: { active: true, normalMode, expiresDate: formatEpochDate(epoch) },\n };\n }\n // Expired\n return { mode: normalMode, override: undefined };\n}\n\nfunction resolveFileMode(\n normalMode: FileMaxLimitMode, epoch: number | undefined\n): ResolvedFileMode {\n if (epoch === undefined) {\n return { mode: normalMode, override: undefined };\n }\n const nowSeconds = Date.now() / 1000;\n if (nowSeconds < epoch) {\n // Active: file checking is inherently about modified files, so skip entirely\n return {\n mode: 'OFF',\n override: { active: true, normalMode, expiresDate: formatEpochDate(epoch) },\n };\n }\n // Expired\n return { mode: normalMode, override: undefined };\n}\n\nfunction parseConfig(options: ValidateCodeOptions): ParsedConfig {\n const methodConfig: MethodMaxLimitConfig = options.methodMaxLimit ?? {};\n const fileConfig: FileMaxLimitConfig = options.fileMaxLimit ?? {};\n\n const normalMethodMode = methodConfig.mode ?? 'NEW_AND_MODIFIED_METHODS';\n const normalFileMode = fileConfig.mode ?? 'MODIFIED_FILES';\n\n const methodResolved = resolveMethodMode(normalMethodMode, methodConfig.ignoreModifiedUntilEpoch);\n const fileResolved = resolveFileMode(normalFileMode, fileConfig.ignoreModifiedUntilEpoch);\n\n return {\n methodLimit: methodConfig.limit ?? 80,\n methodMode: methodResolved.mode,\n methodDisableAllowed: methodConfig.disableAllowed ?? true,\n methodOverride: methodResolved.override,\n fileLimit: fileConfig.limit ?? 900,\n fileMode: fileResolved.mode,\n fileDisableAllowed: fileConfig.disableAllowed ?? true,\n fileOverride: fileResolved.override,\n returnTypeMode: options.requireReturnType?.mode ?? 'OFF',\n returnTypeDisableAllowed: options.requireReturnType?.disableAllowed ?? true,\n returnTypeIgnoreEpoch: options.requireReturnType?.ignoreModifiedUntilEpoch,\n noInlineTypesMode: options.noInlineTypeLiterals?.mode ?? 'OFF',\n noInlineTypesDisableAllowed: options.noInlineTypeLiterals?.disableAllowed ?? true,\n noInlineTypesIgnoreEpoch: options.noInlineTypeLiterals?.ignoreModifiedUntilEpoch,\n noAnyUnknownMode: options.noAnyUnknown?.mode ?? 'OFF',\n noAnyUnknownDisableAllowed: options.noAnyUnknown?.disableAllowed ?? true,\n noAnyUnknownIgnoreEpoch: options.noAnyUnknown?.ignoreModifiedUntilEpoch,\n validateDtosMode: options.validateDtos?.mode ?? 'OFF',\n validateDtosDisableAllowed: options.validateDtos?.disableAllowed ?? true,\n validateDtosPrismaPath: options.validateDtos?.prismaSchemaPath,\n validateDtosSrcPaths: options.validateDtos?.dtoSourcePaths ?? [],\n validateDtosIgnoreEpoch: options.validateDtos?.ignoreModifiedUntilEpoch,\n prismaConverterMode: options.prismaConverter?.mode ?? 'OFF',\n prismaConverterDisableAllowed: options.prismaConverter?.disableAllowed ?? true,\n prismaConverterSchemaPath: options.prismaConverter?.schemaPath,\n prismaConverterConvertersPaths: options.prismaConverter?.convertersPaths ?? [],\n prismaConverterEnforcePaths: options.prismaConverter?.enforcePaths ?? [],\n prismaConverterIgnoreEpoch: options.prismaConverter?.ignoreModifiedUntilEpoch,\n noDestructureMode: options.noDestructure?.mode ?? 'OFF',\n noDestructureDisableAllowed: options.noDestructure?.disableAllowed ?? true,\n noDestructureIgnoreEpoch: options.noDestructure?.ignoreModifiedUntilEpoch,\n noDirectApiResolverMode: options.noDirectApiInResolver?.mode ?? 'OFF',\n noDirectApiResolverDisableAllowed: options.noDirectApiInResolver?.disableAllowed ?? true,\n noDirectApiResolverIgnoreEpoch: options.noDirectApiInResolver?.ignoreModifiedUntilEpoch,\n noDirectApiResolverEnforcePaths: options.noDirectApiInResolver?.enforcePaths ?? [],\n };\n}\n\nfunction formatOverride(override: OverrideInfo | undefined): string {\n if (!override) {\n return '';\n }\n return ` (override active, normal: ${override.normalMode}, expires: ${override.expiresDate})`;\n}\n\nfunction logConfig(config: ParsedConfig): void {\n console.log('\\n\\ud83d\\udccf Running Code Validations\\n');\n console.log(` Method limits: mode=${config.methodMode}${formatOverride(config.methodOverride)}, limit=${config.methodLimit}, disableAllowed=${config.methodDisableAllowed}`);\n console.log(` File limits: mode=${config.fileMode}${formatOverride(config.fileOverride)}, limit=${config.fileLimit}, disableAllowed=${config.fileDisableAllowed}`);\n console.log(` Require return types: mode=${config.returnTypeMode}, disableAllowed=${config.returnTypeDisableAllowed}`);\n console.log(` No inline type literals: mode=${config.noInlineTypesMode}, disableAllowed=${config.noInlineTypesDisableAllowed}`);\n console.log(` No any/unknown: mode=${config.noAnyUnknownMode}, disableAllowed=${config.noAnyUnknownDisableAllowed}`);\n console.log(` Validate DTOs: mode=${config.validateDtosMode}, disableAllowed=${config.validateDtosDisableAllowed}`);\n console.log(` Prisma converters: mode=${config.prismaConverterMode}, disableAllowed=${config.prismaConverterDisableAllowed}`);\n console.log(` No destructure: mode=${config.noDestructureMode}, disableAllowed=${config.noDestructureDisableAllowed}`);\n console.log(` No direct API in resolver: mode=${config.noDirectApiResolverMode}, disableAllowed=${config.noDirectApiResolverDisableAllowed}`);\n console.log('');\n}\n\nfunction isAllOff(config: ParsedConfig): boolean {\n return config.methodMode === 'OFF' && config.fileMode === 'OFF' &&\n config.returnTypeMode === 'OFF' && config.noInlineTypesMode === 'OFF' &&\n config.noAnyUnknownMode === 'OFF' && config.validateDtosMode === 'OFF' &&\n config.prismaConverterMode === 'OFF' && config.noDestructureMode === 'OFF' &&\n config.noDirectApiResolverMode === 'OFF';\n}\n\nasync function runMethodValidators(config: ParsedConfig, context: ExecutorContext): Promise<ExecutorResult[]> {\n const results: ExecutorResult[] = [];\n const runNew = config.methodMode === 'NEW_METHODS' || config.methodMode === 'NEW_AND_MODIFIED_METHODS';\n const runModified = config.methodMode === 'NEW_AND_MODIFIED_METHODS' || config.methodMode === 'MODIFIED_FILES';\n\n if (runNew) {\n results.push(await runNewMethodsExecutor({\n limit: config.methodLimit,\n mode: config.methodMode, disableAllowed: config.methodDisableAllowed,\n }, context));\n }\n if (runModified) {\n results.push(await runModifiedMethodsExecutor({\n limit: config.methodLimit, mode: config.methodMode, disableAllowed: config.methodDisableAllowed,\n }, context));\n }\n return results;\n}\n\nexport default async function runExecutor(\n options: ValidateCodeOptions,\n context: ExecutorContext\n): Promise<ExecutorResult> {\n const modeErrors = validateModes(options);\n if (modeErrors.length > 0) {\n console.error('');\n for (const err of modeErrors) {\n console.error(`❌ ${err}`);\n }\n console.error('');\n return { success: false };\n }\n\n const config = parseConfig(options);\n\n if (isAllOff(config)) {\n console.log('\\n\\u23ed\\ufe0f Skipping all code validations (all modes: OFF)\\n');\n return { success: true };\n }\n\n logConfig(config);\n\n const methodResults = await runMethodValidators(config, context);\n const fileResult = await runModifiedFilesExecutor({\n limit: config.fileLimit, mode: config.fileMode, disableAllowed: config.fileDisableAllowed,\n }, context);\n const returnTypesResult = await runReturnTypesExecutor({\n mode: config.returnTypeMode,\n disableAllowed: config.returnTypeDisableAllowed,\n ignoreModifiedUntilEpoch: config.returnTypeIgnoreEpoch,\n }, context);\n const noInlineTypesResult = await runNoInlineTypesExecutor({\n mode: config.noInlineTypesMode,\n disableAllowed: config.noInlineTypesDisableAllowed,\n ignoreModifiedUntilEpoch: config.noInlineTypesIgnoreEpoch,\n }, context);\n const noAnyUnknownResult = await runNoAnyUnknownExecutor({\n mode: config.noAnyUnknownMode,\n disableAllowed: config.noAnyUnknownDisableAllowed,\n ignoreModifiedUntilEpoch: config.noAnyUnknownIgnoreEpoch,\n }, context);\n const validateDtosResult = await runValidateDtosExecutor({\n mode: config.validateDtosMode,\n disableAllowed: config.validateDtosDisableAllowed,\n prismaSchemaPath: config.validateDtosPrismaPath,\n dtoSourcePaths: config.validateDtosSrcPaths,\n ignoreModifiedUntilEpoch: config.validateDtosIgnoreEpoch,\n }, context);\n const prismaConverterResult = await runPrismaConvertersExecutor({\n mode: config.prismaConverterMode,\n disableAllowed: config.prismaConverterDisableAllowed,\n schemaPath: config.prismaConverterSchemaPath,\n convertersPaths: config.prismaConverterConvertersPaths,\n enforcePaths: config.prismaConverterEnforcePaths,\n ignoreModifiedUntilEpoch: config.prismaConverterIgnoreEpoch,\n }, context);\n const noDestructureResult = await runNoDestructureExecutor({\n mode: config.noDestructureMode,\n disableAllowed: config.noDestructureDisableAllowed,\n ignoreModifiedUntilEpoch: config.noDestructureIgnoreEpoch,\n }, context);\n const noDirectApiResolverResult = await runNoDirectApiResolverExecutor({\n mode: config.noDirectApiResolverMode,\n disableAllowed: config.noDirectApiResolverDisableAllowed,\n ignoreModifiedUntilEpoch: config.noDirectApiResolverIgnoreEpoch,\n enforcePaths: config.noDirectApiResolverEnforcePaths,\n }, context);\n\n const allSuccess = methodResults.every((r) => r.success) &&\n fileResult.success && returnTypesResult.success &&\n noInlineTypesResult.success && noAnyUnknownResult.success &&\n validateDtosResult.success && prismaConverterResult.success &&\n noDestructureResult.success && noDirectApiResolverResult.success;\n\n console.log(allSuccess ? '\\n\\u2705 All code validations passed\\n' : '\\n\\u274c Some code validations failed\\n');\n return { success: allSuccess };\n}\n"]}