@webpieces/code-rules 0.3.184 → 0.3.186
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/package.json +2 -2
- package/src/cli.js +1 -8
- package/src/cli.js.map +1 -1
- package/src/code-validator.d.ts +18 -0
- package/src/code-validator.js +16 -0
- package/src/code-validator.js.map +1 -0
- package/src/index.d.ts +15 -13
- package/src/index.js +21 -16
- package/src/index.js.map +1 -1
- package/src/validate-catch-error-pattern.d.ts +5 -10
- package/src/validate-catch-error-pattern.js +15 -4
- package/src/validate-catch-error-pattern.js.map +1 -1
- package/src/validate-code.d.ts +11 -5
- package/src/validate-code.js +54 -257
- package/src/validate-code.js.map +1 -1
- package/src/validate-dtos.d.ts +5 -12
- package/src/validate-dtos.js +12 -2
- package/src/validate-dtos.js.map +1 -1
- package/src/validate-modified-files.d.ts +5 -11
- package/src/validate-modified-files.js +13 -3
- package/src/validate-modified-files.js.map +1 -1
- package/src/validate-modified-methods.d.ts +16 -11
- package/src/validate-modified-methods.js +37 -5
- package/src/validate-modified-methods.js.map +1 -1
- package/src/validate-new-methods.d.ts +3 -12
- package/src/validate-new-methods.js +4 -4
- package/src/validate-new-methods.js.map +1 -1
- package/src/validate-no-any-unknown.d.ts +5 -10
- package/src/validate-no-any-unknown.js +14 -3
- package/src/validate-no-any-unknown.js.map +1 -1
- package/src/validate-no-destructure.d.ts +5 -10
- package/src/validate-no-destructure.js +14 -3
- package/src/validate-no-destructure.js.map +1 -1
- package/src/validate-no-direct-api-resolver.d.ts +5 -11
- package/src/validate-no-direct-api-resolver.js +14 -3
- package/src/validate-no-direct-api-resolver.js.map +1 -1
- package/src/validate-no-implicit-any.d.ts +5 -10
- package/src/validate-no-implicit-any.js +14 -3
- package/src/validate-no-implicit-any.js.map +1 -1
- package/src/validate-no-inline-types.d.ts +5 -10
- package/src/validate-no-inline-types.js +14 -3
- package/src/validate-no-inline-types.js.map +1 -1
- package/src/validate-no-symbol-di-tokens.d.ts +6 -12
- package/src/validate-no-symbol-di-tokens.js +14 -3
- package/src/validate-no-symbol-di-tokens.js.map +1 -1
- package/src/validate-no-unmanaged-exceptions.d.ts +5 -10
- package/src/validate-no-unmanaged-exceptions.js +14 -3
- package/src/validate-no-unmanaged-exceptions.js.map +1 -1
- package/src/validate-prisma-converters.d.ts +5 -13
- package/src/validate-prisma-converters.js +14 -3
- package/src/validate-prisma-converters.js.map +1 -1
- package/src/validate-return-types.d.ts +5 -10
- package/src/validate-return-types.js +14 -3
- package/src/validate-return-types.js.map +1 -1
- package/src/wp-ci.js +1 -3
- package/src/wp-ci.js.map +1 -1
- package/src/from-shared-config.d.ts +0 -26
- package/src/from-shared-config.js +0 -44
- package/src/from-shared-config.js.map +0 -1
- package/src/validate-code-options.d.ts +0 -127
- package/src/validate-code-options.js +0 -14
- package/src/validate-code-options.js.map +0 -1
package/src/validate-code.js
CHANGED
|
@@ -1,277 +1,74 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.default = runValidator;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
4
|
const rules_config_1 = require("@webpieces/rules-config");
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
const validate_no_unmanaged_exceptions_1 = tslib_1.__importDefault(require("./validate-no-unmanaged-exceptions"));
|
|
20
|
-
const validate_no_direct_api_resolver_1 = tslib_1.__importDefault(require("./validate-no-direct-api-resolver"));
|
|
21
|
-
const validate_no_symbol_di_tokens_1 = tslib_1.__importDefault(require("./validate-no-symbol-di-tokens"));
|
|
22
|
-
const VALID_MODES = {
|
|
23
|
-
methodMaxLimit: ['OFF', 'NEW_METHODS', 'NEW_AND_MODIFIED_METHODS', 'MODIFIED_FILES'],
|
|
24
|
-
fileMaxLimit: ['OFF', 'MODIFIED_FILES'],
|
|
25
|
-
requireReturnType: ['OFF', 'NEW_METHODS', 'NEW_AND_MODIFIED_METHODS', 'MODIFIED_FILES'],
|
|
26
|
-
noInlineTypeLiterals: ['OFF', 'NEW_METHODS', 'NEW_AND_MODIFIED_METHODS', 'MODIFIED_FILES'],
|
|
27
|
-
noAnyUnknown: ['OFF', 'MODIFIED_CODE', 'MODIFIED_FILES'],
|
|
28
|
-
noImplicitAny: ['OFF', 'MODIFIED_CODE', 'MODIFIED_FILES'],
|
|
29
|
-
validateDtos: ['OFF', 'MODIFIED_CLASS', 'MODIFIED_FILES'],
|
|
30
|
-
prismaConverter: ['OFF', 'NEW_AND_MODIFIED_METHODS', 'MODIFIED_FILES'],
|
|
31
|
-
noDestructure: ['OFF', 'MODIFIED_CODE', 'MODIFIED_FILES'],
|
|
32
|
-
catchErrorPattern: ['OFF', 'MODIFIED_CODE', 'MODIFIED_FILES'],
|
|
33
|
-
noUnmanagedExceptions: ['OFF', 'MODIFIED_CODE', 'MODIFIED_FILES'],
|
|
34
|
-
noDirectApiInResolver: ['OFF', 'MODIFIED_CODE', 'NEW_AND_MODIFIED_METHODS', 'MODIFIED_FILES'],
|
|
35
|
-
noSymbolDiTokens: ['OFF', 'MODIFIED_CODE', 'MODIFIED_FILES'],
|
|
36
|
-
};
|
|
5
|
+
const validate_modified_methods_1 = require("./validate-modified-methods");
|
|
6
|
+
const validate_modified_files_1 = require("./validate-modified-files");
|
|
7
|
+
const validate_return_types_1 = require("./validate-return-types");
|
|
8
|
+
const validate_no_inline_types_1 = require("./validate-no-inline-types");
|
|
9
|
+
const validate_no_any_unknown_1 = require("./validate-no-any-unknown");
|
|
10
|
+
const validate_no_implicit_any_1 = require("./validate-no-implicit-any");
|
|
11
|
+
const validate_dtos_1 = require("./validate-dtos");
|
|
12
|
+
const validate_prisma_converters_1 = require("./validate-prisma-converters");
|
|
13
|
+
const validate_no_destructure_1 = require("./validate-no-destructure");
|
|
14
|
+
const validate_catch_error_pattern_1 = require("./validate-catch-error-pattern");
|
|
15
|
+
const validate_no_unmanaged_exceptions_1 = require("./validate-no-unmanaged-exceptions");
|
|
16
|
+
const validate_no_direct_api_resolver_1 = require("./validate-no-direct-api-resolver");
|
|
17
|
+
const validate_no_symbol_di_tokens_1 = require("./validate-no-symbol-di-tokens");
|
|
37
18
|
/**
|
|
38
|
-
*
|
|
19
|
+
* Build every code validator from the typed WebpiecesRulesConfig. Each validator is
|
|
20
|
+
* constructed with its own `*Config` (the genuinely-consumed config class), so the
|
|
21
|
+
* config types are exercised at compile time. Missing rule keys fall back to an empty
|
|
22
|
+
* config instance — `loadWebpiecesRulesConfig` already validates that configured rules
|
|
23
|
+
* carry an explicit `mode`, so in practice every key is present.
|
|
39
24
|
*/
|
|
40
|
-
function
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
['
|
|
44
|
-
['
|
|
45
|
-
['
|
|
46
|
-
['
|
|
47
|
-
['
|
|
48
|
-
['
|
|
49
|
-
['
|
|
50
|
-
['
|
|
51
|
-
['
|
|
52
|
-
['
|
|
53
|
-
['
|
|
54
|
-
['
|
|
55
|
-
['noSymbolDiTokens', options.noSymbolDiTokens?.mode],
|
|
25
|
+
function buildValidators(config) {
|
|
26
|
+
return [
|
|
27
|
+
new validate_modified_methods_1.MaxMethodLinesValidator(config['max-method-lines'] ?? new rules_config_1.MaxMethodLinesConfig()),
|
|
28
|
+
new validate_modified_files_1.MaxFileLinesValidator(config['max-file-lines'] ?? new rules_config_1.MaxFileLinesConfig()),
|
|
29
|
+
new validate_return_types_1.RequireReturnTypeValidator(config['require-return-type'] ?? new rules_config_1.RequireReturnTypeConfig()),
|
|
30
|
+
new validate_no_inline_types_1.NoInlineTypeLiteralsValidator(config['no-inline-type-literals'] ?? new rules_config_1.NoInlineTypeLiteralsConfig()),
|
|
31
|
+
new validate_no_any_unknown_1.NoAnyUnknownValidator(config['no-any-unknown'] ?? new rules_config_1.NoAnyUnknownConfig()),
|
|
32
|
+
new validate_no_implicit_any_1.NoImplicitAnyValidator(config['no-implicit-any'] ?? new rules_config_1.NoImplicitAnyConfig()),
|
|
33
|
+
new validate_dtos_1.PrismaValidateDtosValidator(config['prisma-validate-dtos'] ?? new rules_config_1.PrismaValidateDtosConfig()),
|
|
34
|
+
new validate_prisma_converters_1.PrismaConverterValidator(config['prisma-converter'] ?? new rules_config_1.PrismaConverterConfig()),
|
|
35
|
+
new validate_no_destructure_1.NoDestructureValidator(config['no-destructure'] ?? new rules_config_1.NoDestructureConfig()),
|
|
36
|
+
new validate_catch_error_pattern_1.CatchErrorPatternValidator(config['catch-error-pattern'] ?? new rules_config_1.CatchErrorPatternConfig()),
|
|
37
|
+
new validate_no_unmanaged_exceptions_1.NoUnmanagedExceptionsValidator(config['no-unmanaged-exceptions'] ?? new rules_config_1.NoUnmanagedExceptionsConfig()),
|
|
38
|
+
new validate_no_direct_api_resolver_1.NoDirectApiResolverValidator(config['angular-no-direct-api-in-resolver'] ?? new rules_config_1.AngularNoDirectApiInResolverConfig()),
|
|
39
|
+
new validate_no_symbol_di_tokens_1.NoSymbolDiTokensValidator(config['no-symbol-di-tokens'] ?? new rules_config_1.NoSymbolDiTokensConfig()),
|
|
56
40
|
];
|
|
57
|
-
for (const entry of modeEntries) {
|
|
58
|
-
const ruleName = entry[0];
|
|
59
|
-
const modeValue = entry[1];
|
|
60
|
-
if (modeValue === undefined)
|
|
61
|
-
continue;
|
|
62
|
-
const validModes = VALID_MODES[ruleName];
|
|
63
|
-
if (!validModes.includes(modeValue)) {
|
|
64
|
-
errors.push(`${ruleName}.mode = '${modeValue}' is invalid. Valid modes: ${validModes.join(', ')}`);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
return errors;
|
|
68
|
-
}
|
|
69
|
-
function resolveMethodMode(normalMode, epoch, branchPattern) {
|
|
70
|
-
if (normalMode === 'OFF') {
|
|
71
|
-
return { mode: 'OFF', override: undefined };
|
|
72
|
-
}
|
|
73
|
-
const skip = (0, resolve_mode_1.shouldSkipRule)(epoch, branchPattern);
|
|
74
|
-
if (skip.skip) {
|
|
75
|
-
return {
|
|
76
|
-
mode: 'OFF',
|
|
77
|
-
override: { active: true, normalMode, reason: skip.reason },
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
return { mode: normalMode, override: undefined };
|
|
81
|
-
}
|
|
82
|
-
function resolveFileMode(normalMode, epoch, branchPattern) {
|
|
83
|
-
if (normalMode === 'OFF') {
|
|
84
|
-
return { mode: 'OFF', override: undefined };
|
|
85
|
-
}
|
|
86
|
-
const skip = (0, resolve_mode_1.shouldSkipRule)(epoch, branchPattern);
|
|
87
|
-
if (skip.skip) {
|
|
88
|
-
return {
|
|
89
|
-
mode: 'OFF',
|
|
90
|
-
override: { active: true, normalMode, reason: skip.reason },
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
return { mode: normalMode, override: undefined };
|
|
94
41
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
methodMode: methodResolved.mode,
|
|
105
|
-
methodDisableAllowed: methodConfig.disableAllowed ?? true,
|
|
106
|
-
methodOverride: methodResolved.override,
|
|
107
|
-
fileLimit: fileConfig.limit ?? 900,
|
|
108
|
-
fileMode: fileResolved.mode,
|
|
109
|
-
fileDisableAllowed: fileConfig.disableAllowed ?? true,
|
|
110
|
-
fileOverride: fileResolved.override,
|
|
111
|
-
returnTypeMode: options.requireReturnType?.mode ?? 'OFF',
|
|
112
|
-
returnTypeDisableAllowed: options.requireReturnType?.disableAllowed ?? true,
|
|
113
|
-
returnTypeIgnoreEpoch: options.requireReturnType?.ignoreModifiedUntilEpoch,
|
|
114
|
-
returnTypeIgnoreBranch: options.requireReturnType?.ignoreRuleWhileOnBranch,
|
|
115
|
-
noInlineTypesMode: options.noInlineTypeLiterals?.mode ?? 'OFF',
|
|
116
|
-
noInlineTypesDisableAllowed: options.noInlineTypeLiterals?.disableAllowed ?? true,
|
|
117
|
-
noInlineTypesIgnoreEpoch: options.noInlineTypeLiterals?.ignoreModifiedUntilEpoch,
|
|
118
|
-
noInlineTypesIgnoreBranch: options.noInlineTypeLiterals?.ignoreRuleWhileOnBranch,
|
|
119
|
-
noAnyUnknownMode: options.noAnyUnknown?.mode ?? 'OFF',
|
|
120
|
-
noAnyUnknownDisableAllowed: options.noAnyUnknown?.disableAllowed ?? true,
|
|
121
|
-
noAnyUnknownIgnoreEpoch: options.noAnyUnknown?.ignoreModifiedUntilEpoch,
|
|
122
|
-
noAnyUnknownIgnoreBranch: options.noAnyUnknown?.ignoreRuleWhileOnBranch,
|
|
123
|
-
noImplicitAnyMode: options.noImplicitAny?.mode ?? 'OFF',
|
|
124
|
-
noImplicitAnyDisableAllowed: options.noImplicitAny?.disableAllowed ?? true,
|
|
125
|
-
noImplicitAnyIgnoreEpoch: options.noImplicitAny?.ignoreModifiedUntilEpoch,
|
|
126
|
-
noImplicitAnyIgnoreBranch: options.noImplicitAny?.ignoreRuleWhileOnBranch,
|
|
127
|
-
validateDtosMode: options.validateDtos?.mode ?? 'OFF',
|
|
128
|
-
validateDtosDisableAllowed: options.validateDtos?.disableAllowed ?? true,
|
|
129
|
-
validateDtosPrismaPath: options.validateDtos?.prismaSchemaPath,
|
|
130
|
-
validateDtosSrcPaths: options.validateDtos?.dtoSourcePaths ?? [],
|
|
131
|
-
validateDtosIgnoreEpoch: options.validateDtos?.ignoreModifiedUntilEpoch,
|
|
132
|
-
validateDtosIgnoreBranch: options.validateDtos?.ignoreRuleWhileOnBranch,
|
|
133
|
-
prismaConverterMode: options.prismaConverter?.mode ?? 'OFF',
|
|
134
|
-
prismaConverterDisableAllowed: options.prismaConverter?.disableAllowed ?? true,
|
|
135
|
-
prismaConverterSchemaPath: options.prismaConverter?.schemaPath,
|
|
136
|
-
prismaConverterConvertersPaths: options.prismaConverter?.convertersPaths ?? [],
|
|
137
|
-
prismaConverterEnforcePaths: options.prismaConverter?.enforcePaths ?? [],
|
|
138
|
-
prismaConverterIgnoreEpoch: options.prismaConverter?.ignoreModifiedUntilEpoch,
|
|
139
|
-
prismaConverterIgnoreBranch: options.prismaConverter?.ignoreRuleWhileOnBranch,
|
|
140
|
-
noDestructureMode: options.noDestructure?.mode ?? 'OFF',
|
|
141
|
-
noDestructureDisableAllowed: options.noDestructure?.disableAllowed ?? true,
|
|
142
|
-
noDestructureIgnoreEpoch: options.noDestructure?.ignoreModifiedUntilEpoch,
|
|
143
|
-
noDestructureIgnoreBranch: options.noDestructure?.ignoreRuleWhileOnBranch,
|
|
144
|
-
catchErrorPatternMode: options.catchErrorPattern?.mode ?? 'OFF',
|
|
145
|
-
catchErrorPatternDisableAllowed: options.catchErrorPattern?.disableAllowed ?? true,
|
|
146
|
-
catchErrorPatternIgnoreEpoch: options.catchErrorPattern?.ignoreModifiedUntilEpoch,
|
|
147
|
-
catchErrorPatternIgnoreBranch: options.catchErrorPattern?.ignoreRuleWhileOnBranch,
|
|
148
|
-
noUnmanagedExceptionsMode: options.noUnmanagedExceptions?.mode ?? 'OFF',
|
|
149
|
-
noUnmanagedExceptionsDisableAllowed: options.noUnmanagedExceptions?.disableAllowed ?? true,
|
|
150
|
-
noUnmanagedExceptionsIgnoreEpoch: options.noUnmanagedExceptions?.ignoreModifiedUntilEpoch,
|
|
151
|
-
noUnmanagedExceptionsIgnoreBranch: options.noUnmanagedExceptions?.ignoreRuleWhileOnBranch,
|
|
152
|
-
noDirectApiResolverMode: options.noDirectApiInResolver?.mode ?? 'OFF',
|
|
153
|
-
noDirectApiResolverDisableAllowed: options.noDirectApiInResolver?.disableAllowed ?? true,
|
|
154
|
-
noDirectApiResolverIgnoreEpoch: options.noDirectApiInResolver?.ignoreModifiedUntilEpoch,
|
|
155
|
-
noDirectApiResolverIgnoreBranch: options.noDirectApiInResolver?.ignoreRuleWhileOnBranch,
|
|
156
|
-
noDirectApiResolverEnforcePaths: options.noDirectApiInResolver?.enforcePaths ?? [],
|
|
157
|
-
noSymbolDiTokensMode: options.noSymbolDiTokens?.mode ?? 'OFF',
|
|
158
|
-
noSymbolDiTokensDisableAllowed: options.noSymbolDiTokens?.disableAllowed ?? true,
|
|
159
|
-
noSymbolDiTokensIgnoreEpoch: options.noSymbolDiTokens?.ignoreModifiedUntilEpoch,
|
|
160
|
-
noSymbolDiTokensIgnoreBranch: options.noSymbolDiTokens?.ignoreRuleWhileOnBranch,
|
|
161
|
-
noSymbolDiTokensAllowedPaths: options.noSymbolDiTokens?.allowedPaths ?? [],
|
|
162
|
-
};
|
|
163
|
-
}
|
|
164
|
-
function formatOverride(override) {
|
|
165
|
-
if (!override) {
|
|
166
|
-
return '';
|
|
167
|
-
}
|
|
168
|
-
return ` (override active, normal: ${override.normalMode}, ${override.reason})`;
|
|
169
|
-
}
|
|
170
|
-
function logConfig(config) {
|
|
171
|
-
console.log('\n\ud83d\udccf Running Code Validations\n');
|
|
172
|
-
console.log(` Method limits: mode=${config.methodMode}${formatOverride(config.methodOverride)}, limit=${config.methodLimit}, disableAllowed=${config.methodDisableAllowed}`);
|
|
173
|
-
console.log(` File limits: mode=${config.fileMode}${formatOverride(config.fileOverride)}, limit=${config.fileLimit}, disableAllowed=${config.fileDisableAllowed}`);
|
|
174
|
-
console.log(` Require return types: mode=${config.returnTypeMode}, disableAllowed=${config.returnTypeDisableAllowed}`);
|
|
175
|
-
console.log(` No inline type literals: mode=${config.noInlineTypesMode}, disableAllowed=${config.noInlineTypesDisableAllowed}`);
|
|
176
|
-
console.log(` No any/unknown: mode=${config.noAnyUnknownMode}, disableAllowed=${config.noAnyUnknownDisableAllowed}`);
|
|
177
|
-
console.log(` No implicit any: mode=${config.noImplicitAnyMode}, disableAllowed=${config.noImplicitAnyDisableAllowed}`);
|
|
178
|
-
console.log(` [Prisma] Validate DTOs: mode=${config.validateDtosMode}, disableAllowed=${config.validateDtosDisableAllowed}`);
|
|
179
|
-
console.log(` [Prisma] Prisma converters: mode=${config.prismaConverterMode}, disableAllowed=${config.prismaConverterDisableAllowed}`);
|
|
180
|
-
console.log(` No destructure: mode=${config.noDestructureMode}, disableAllowed=${config.noDestructureDisableAllowed}`);
|
|
181
|
-
console.log(` Catch error pattern: mode=${config.catchErrorPatternMode}, disableAllowed=${config.catchErrorPatternDisableAllowed}`);
|
|
182
|
-
console.log(` No unmanaged exceptions: mode=${config.noUnmanagedExceptionsMode}, disableAllowed=${config.noUnmanagedExceptionsDisableAllowed}`);
|
|
183
|
-
console.log(` [Angular] No direct API in resolver: mode=${config.noDirectApiResolverMode}, disableAllowed=${config.noDirectApiResolverDisableAllowed}`);
|
|
184
|
-
console.log(` No Symbol DI tokens: mode=${config.noSymbolDiTokensMode}, disableAllowed=${config.noSymbolDiTokensDisableAllowed}`);
|
|
185
|
-
console.log('');
|
|
186
|
-
}
|
|
187
|
-
function isAllOff(config) {
|
|
188
|
-
return config.methodMode === 'OFF' && config.fileMode === 'OFF' &&
|
|
189
|
-
config.returnTypeMode === 'OFF' && config.noInlineTypesMode === 'OFF' &&
|
|
190
|
-
config.noAnyUnknownMode === 'OFF' && config.noImplicitAnyMode === 'OFF' &&
|
|
191
|
-
config.validateDtosMode === 'OFF' &&
|
|
192
|
-
config.prismaConverterMode === 'OFF' && config.noDestructureMode === 'OFF' &&
|
|
193
|
-
config.catchErrorPatternMode === 'OFF' && config.noUnmanagedExceptionsMode === 'OFF' &&
|
|
194
|
-
config.noDirectApiResolverMode === 'OFF' && config.noSymbolDiTokensMode === 'OFF';
|
|
195
|
-
}
|
|
196
|
-
async function runMethodValidators(config, workspaceRoot) {
|
|
197
|
-
const results = [];
|
|
198
|
-
const runNew = config.methodMode === 'NEW_METHODS' || config.methodMode === 'NEW_AND_MODIFIED_METHODS';
|
|
199
|
-
const runModified = config.methodMode === 'NEW_AND_MODIFIED_METHODS' || config.methodMode === 'MODIFIED_FILES';
|
|
200
|
-
if (runNew) {
|
|
201
|
-
results.push(await (0, validate_new_methods_1.default)({
|
|
202
|
-
limit: config.methodLimit,
|
|
203
|
-
mode: config.methodMode, disableAllowed: config.methodDisableAllowed,
|
|
204
|
-
}, workspaceRoot));
|
|
205
|
-
}
|
|
206
|
-
if (runModified) {
|
|
207
|
-
results.push(await (0, validate_modified_methods_1.default)({
|
|
208
|
-
limit: config.methodLimit, mode: config.methodMode, disableAllowed: config.methodDisableAllowed,
|
|
209
|
-
}, workspaceRoot));
|
|
210
|
-
}
|
|
211
|
-
return results;
|
|
212
|
-
}
|
|
213
|
-
async function runLintStyleValidators(config, workspaceRoot) {
|
|
214
|
-
const r = [];
|
|
215
|
-
r.push(await (0, validate_no_destructure_1.default)({ mode: config.noDestructureMode, disableAllowed: config.noDestructureDisableAllowed, ignoreModifiedUntilEpoch: config.noDestructureIgnoreEpoch, ignoreRuleWhileOnBranch: config.noDestructureIgnoreBranch }, workspaceRoot));
|
|
216
|
-
r.push(await (0, validate_catch_error_pattern_1.default)({ mode: config.catchErrorPatternMode, disableAllowed: config.catchErrorPatternDisableAllowed, ignoreModifiedUntilEpoch: config.catchErrorPatternIgnoreEpoch, ignoreRuleWhileOnBranch: config.catchErrorPatternIgnoreBranch }, workspaceRoot));
|
|
217
|
-
r.push(await (0, validate_no_unmanaged_exceptions_1.default)({ mode: config.noUnmanagedExceptionsMode, disableAllowed: config.noUnmanagedExceptionsDisableAllowed, ignoreModifiedUntilEpoch: config.noUnmanagedExceptionsIgnoreEpoch, ignoreRuleWhileOnBranch: config.noUnmanagedExceptionsIgnoreBranch }, workspaceRoot));
|
|
218
|
-
r.push(await (0, validate_no_direct_api_resolver_1.default)({ mode: config.noDirectApiResolverMode, disableAllowed: config.noDirectApiResolverDisableAllowed, ignoreModifiedUntilEpoch: config.noDirectApiResolverIgnoreEpoch, ignoreRuleWhileOnBranch: config.noDirectApiResolverIgnoreBranch, enforcePaths: config.noDirectApiResolverEnforcePaths }, workspaceRoot));
|
|
219
|
-
r.push(await (0, validate_no_symbol_di_tokens_1.default)({ mode: config.noSymbolDiTokensMode, disableAllowed: config.noSymbolDiTokensDisableAllowed, ignoreModifiedUntilEpoch: config.noSymbolDiTokensIgnoreEpoch, ignoreRuleWhileOnBranch: config.noSymbolDiTokensIgnoreBranch, allowedPaths: config.noSymbolDiTokensAllowedPaths }, workspaceRoot));
|
|
220
|
-
return r;
|
|
221
|
-
}
|
|
222
|
-
async function runAllValidators(config, workspaceRoot) {
|
|
223
|
-
const results = [];
|
|
224
|
-
results.push(...await runMethodValidators(config, workspaceRoot));
|
|
225
|
-
results.push(await (0, validate_modified_files_1.default)({
|
|
226
|
-
limit: config.fileLimit, mode: config.fileMode, disableAllowed: config.fileDisableAllowed,
|
|
227
|
-
}, workspaceRoot));
|
|
228
|
-
results.push(await (0, validate_return_types_1.default)({ mode: config.returnTypeMode, disableAllowed: config.returnTypeDisableAllowed, ignoreModifiedUntilEpoch: config.returnTypeIgnoreEpoch, ignoreRuleWhileOnBranch: config.returnTypeIgnoreBranch }, workspaceRoot));
|
|
229
|
-
results.push(await (0, validate_no_inline_types_1.default)({ mode: config.noInlineTypesMode, disableAllowed: config.noInlineTypesDisableAllowed, ignoreModifiedUntilEpoch: config.noInlineTypesIgnoreEpoch, ignoreRuleWhileOnBranch: config.noInlineTypesIgnoreBranch }, workspaceRoot));
|
|
230
|
-
results.push(await (0, validate_no_any_unknown_1.default)({ mode: config.noAnyUnknownMode, disableAllowed: config.noAnyUnknownDisableAllowed, ignoreModifiedUntilEpoch: config.noAnyUnknownIgnoreEpoch, ignoreRuleWhileOnBranch: config.noAnyUnknownIgnoreBranch }, workspaceRoot));
|
|
231
|
-
results.push(await (0, validate_no_implicit_any_1.default)({ mode: config.noImplicitAnyMode, disableAllowed: config.noImplicitAnyDisableAllowed, ignoreModifiedUntilEpoch: config.noImplicitAnyIgnoreEpoch, ignoreRuleWhileOnBranch: config.noImplicitAnyIgnoreBranch }, workspaceRoot));
|
|
232
|
-
results.push(await (0, validate_dtos_1.default)({
|
|
233
|
-
mode: config.validateDtosMode, disableAllowed: config.validateDtosDisableAllowed,
|
|
234
|
-
prismaSchemaPath: config.validateDtosPrismaPath, dtoSourcePaths: config.validateDtosSrcPaths,
|
|
235
|
-
ignoreModifiedUntilEpoch: config.validateDtosIgnoreEpoch, ignoreRuleWhileOnBranch: config.validateDtosIgnoreBranch,
|
|
236
|
-
}, workspaceRoot));
|
|
237
|
-
results.push(await (0, validate_prisma_converters_1.default)({
|
|
238
|
-
mode: config.prismaConverterMode, disableAllowed: config.prismaConverterDisableAllowed,
|
|
239
|
-
schemaPath: config.prismaConverterSchemaPath, convertersPaths: config.prismaConverterConvertersPaths,
|
|
240
|
-
enforcePaths: config.prismaConverterEnforcePaths,
|
|
241
|
-
ignoreModifiedUntilEpoch: config.prismaConverterIgnoreEpoch, ignoreRuleWhileOnBranch: config.prismaConverterIgnoreBranch,
|
|
242
|
-
}, workspaceRoot));
|
|
243
|
-
results.push(...await runLintStyleValidators(config, workspaceRoot));
|
|
244
|
-
return results;
|
|
245
|
-
}
|
|
246
|
-
async function runValidator(_nxOptions, workspaceRoot) {
|
|
247
|
-
// Config comes from webpieces.config.json at the workspace root,
|
|
248
|
-
// loaded via the shared @webpieces/rules-config loader so ai-hooks and
|
|
249
|
-
// this executor agree on every rule's enabled/mode/options.
|
|
42
|
+
/**
|
|
43
|
+
* Run all configured code validators against the workspace.
|
|
44
|
+
*
|
|
45
|
+
* Owns config loading: callers just pass the workspace root. Config comes from
|
|
46
|
+
* webpieces.config.json (loaded via @webpieces/rules-config so ai-hooks and this
|
|
47
|
+
* executor agree on every rule's enabled/mode/options). A validator runs only when
|
|
48
|
+
* `shouldRun()` is true (i.e. its mode is not OFF and no branch/epoch escape hatch matches).
|
|
49
|
+
*/
|
|
50
|
+
async function runValidator(workspaceRoot) {
|
|
250
51
|
const loaded = (0, rules_config_1.loadWebpiecesRulesConfig)(workspaceRoot);
|
|
251
52
|
if (!loaded) {
|
|
252
53
|
console.error('\n❌ No webpieces.config.json found at workspace root (or any ancestor).\n');
|
|
253
54
|
return { success: false };
|
|
254
55
|
}
|
|
255
|
-
const options = (0, from_shared_config_1.toValidateCodeOptions)(loaded.config);
|
|
256
|
-
const modeErrors = validateModes(options);
|
|
257
|
-
if (modeErrors.length > 0) {
|
|
258
|
-
console.error('');
|
|
259
|
-
for (const err of modeErrors) {
|
|
260
|
-
console.error(`❌ ${err}`);
|
|
261
|
-
}
|
|
262
|
-
console.error('');
|
|
263
|
-
return { success: false };
|
|
264
|
-
}
|
|
265
56
|
console.log(`\n📄 Loaded config: ${loaded.configPath}`);
|
|
266
|
-
const
|
|
267
|
-
|
|
268
|
-
|
|
57
|
+
const validators = buildValidators(loaded.config);
|
|
58
|
+
const active = validators.filter((v) => v.shouldRun());
|
|
59
|
+
if (active.length === 0) {
|
|
60
|
+
console.log('\n⏭️ Skipping all code validations (all modes: OFF)\n');
|
|
269
61
|
return { success: true };
|
|
270
62
|
}
|
|
271
|
-
|
|
272
|
-
|
|
63
|
+
console.log('\n📏 Running Code Validations\n');
|
|
64
|
+
console.log(` Active rules: ${active.map((v) => v.name).join(', ')}`);
|
|
65
|
+
console.log('');
|
|
66
|
+
const results = [];
|
|
67
|
+
for (const validator of active) {
|
|
68
|
+
results.push(await validator.run(workspaceRoot));
|
|
69
|
+
}
|
|
273
70
|
const allSuccess = results.every((r) => r.success);
|
|
274
|
-
console.log(allSuccess ? '\n
|
|
71
|
+
console.log(allSuccess ? '\n✅ All code validations passed\n' : '\n❌ Some code validations failed\n');
|
|
275
72
|
return { success: allSuccess };
|
|
276
73
|
}
|
|
277
74
|
//# sourceMappingURL=validate-code.js.map
|
package/src/validate-code.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-code.js","sourceRoot":"","sources":["../../../../../packages/tooling/code-rules/src/validate-code.ts"],"names":[],"mappings":"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","sourcesContent":["import { loadWebpiecesRulesConfig } from '@webpieces/rules-config';\nimport { toValidateCodeOptions } from './from-shared-config';\nimport { shouldSkipRule } from './resolve-mode';\nimport runNewMethodsExecutor from './validate-new-methods';\nimport runModifiedMethodsExecutor from './validate-modified-methods';\nimport runModifiedFilesExecutor from './validate-modified-files';\nimport runReturnTypesExecutor from './validate-return-types';\nimport runNoInlineTypesExecutor from './validate-no-inline-types';\nimport runNoAnyUnknownExecutor from './validate-no-any-unknown';\nimport runNoImplicitAnyExecutor from './validate-no-implicit-any';\nimport runValidateDtosExecutor from './validate-dtos';\nimport runPrismaConvertersExecutor from './validate-prisma-converters';\nimport runNoDestructureExecutor from './validate-no-destructure';\nimport runCatchErrorPatternExecutor from './validate-catch-error-pattern';\nimport runNoUnmanagedExceptionsExecutor from './validate-no-unmanaged-exceptions';\nimport runNoDirectApiResolverExecutor from './validate-no-direct-api-resolver';\nimport runNoSymbolDiTokensExecutor from './validate-no-symbol-di-tokens';\nimport type {\n MethodMaxLimitMode,\n FileMaxLimitMode,\n ReturnTypeMode,\n NoInlineTypesMode,\n NoAnyUnknownMode,\n NoImplicitAnyMode,\n ValidateDtosMode,\n PrismaConverterMode,\n NoDestructureMode,\n CatchErrorPatternMode,\n NoUnmanagedExceptionsMode,\n NoDirectApiResolverMode,\n NoSymbolDiTokensMode,\n MethodMaxLimitConfig,\n FileMaxLimitConfig,\n ValidateCodeOptions,\n} from './validate-code-options';\n\nexport interface ExecutorResult {\n success: boolean;\n}\n\ninterface OverrideInfo {\n active: boolean;\n normalMode: string;\n reason: 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 returnTypeIgnoreBranch: string | undefined;\n noInlineTypesMode: NoInlineTypesMode;\n noInlineTypesDisableAllowed: boolean;\n noInlineTypesIgnoreEpoch: number | undefined;\n noInlineTypesIgnoreBranch: string | undefined;\n noAnyUnknownMode: NoAnyUnknownMode;\n noAnyUnknownDisableAllowed: boolean;\n noAnyUnknownIgnoreEpoch: number | undefined;\n noAnyUnknownIgnoreBranch: string | undefined;\n noImplicitAnyMode: NoImplicitAnyMode;\n noImplicitAnyDisableAllowed: boolean;\n noImplicitAnyIgnoreEpoch: number | undefined;\n noImplicitAnyIgnoreBranch: string | undefined;\n validateDtosMode: ValidateDtosMode;\n validateDtosDisableAllowed: boolean;\n validateDtosPrismaPath: string | undefined;\n validateDtosSrcPaths: string[];\n validateDtosIgnoreEpoch: number | undefined;\n validateDtosIgnoreBranch: string | undefined;\n prismaConverterMode: PrismaConverterMode;\n prismaConverterDisableAllowed: boolean;\n prismaConverterSchemaPath: string | undefined;\n prismaConverterConvertersPaths: string[];\n prismaConverterEnforcePaths: string[];\n prismaConverterIgnoreEpoch: number | undefined;\n prismaConverterIgnoreBranch: string | undefined;\n noDestructureMode: NoDestructureMode;\n noDestructureDisableAllowed: boolean;\n noDestructureIgnoreEpoch: number | undefined;\n noDestructureIgnoreBranch: string | undefined;\n catchErrorPatternMode: CatchErrorPatternMode;\n catchErrorPatternDisableAllowed: boolean;\n catchErrorPatternIgnoreEpoch: number | undefined;\n catchErrorPatternIgnoreBranch: string | undefined;\n noUnmanagedExceptionsMode: NoUnmanagedExceptionsMode;\n noUnmanagedExceptionsDisableAllowed: boolean;\n noUnmanagedExceptionsIgnoreEpoch: number | undefined;\n noUnmanagedExceptionsIgnoreBranch: string | undefined;\n noDirectApiResolverMode: NoDirectApiResolverMode;\n noDirectApiResolverDisableAllowed: boolean;\n noDirectApiResolverIgnoreEpoch: number | undefined;\n noDirectApiResolverIgnoreBranch: string | undefined;\n noDirectApiResolverEnforcePaths: string[];\n noSymbolDiTokensMode: NoSymbolDiTokensMode;\n noSymbolDiTokensDisableAllowed: boolean;\n noSymbolDiTokensIgnoreEpoch: number | undefined;\n noSymbolDiTokensIgnoreBranch: string | undefined;\n noSymbolDiTokensAllowedPaths: 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 noImplicitAny: ['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 catchErrorPattern: ['OFF', 'MODIFIED_CODE', 'MODIFIED_FILES'],\n noUnmanagedExceptions: ['OFF', 'MODIFIED_CODE', 'MODIFIED_FILES'],\n noDirectApiInResolver: ['OFF', 'MODIFIED_CODE', 'NEW_AND_MODIFIED_METHODS', 'MODIFIED_FILES'],\n noSymbolDiTokens: ['OFF', 'MODIFIED_CODE', '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 ['noImplicitAny', options.noImplicitAny?.mode],\n ['validateDtos', options.validateDtos?.mode],\n ['prismaConverter', options.prismaConverter?.mode],\n ['noDestructure', options.noDestructure?.mode],\n ['catchErrorPattern', options.catchErrorPattern?.mode],\n ['noUnmanagedExceptions', options.noUnmanagedExceptions?.mode],\n ['noDirectApiInResolver', options.noDirectApiInResolver?.mode],\n ['noSymbolDiTokens', options.noSymbolDiTokens?.mode],\n ];\n\n for (const entry of modeEntries) {\n const ruleName = entry[0];\n const modeValue = entry[1];\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 resolveMethodMode(\n normalMode: MethodMaxLimitMode, epoch: number | undefined, branchPattern: string | undefined\n): ResolvedMethodMode {\n if (normalMode === 'OFF') {\n return { mode: 'OFF', override: undefined };\n }\n const skip = shouldSkipRule(epoch, branchPattern);\n if (skip.skip) {\n return {\n mode: 'OFF',\n override: { active: true, normalMode, reason: skip.reason! },\n };\n }\n return { mode: normalMode, override: undefined };\n}\n\nfunction resolveFileMode(\n normalMode: FileMaxLimitMode, epoch: number | undefined, branchPattern: string | undefined\n): ResolvedFileMode {\n if (normalMode === 'OFF') {\n return { mode: 'OFF', override: undefined };\n }\n const skip = shouldSkipRule(epoch, branchPattern);\n if (skip.skip) {\n return {\n mode: 'OFF',\n override: { active: true, normalMode, reason: skip.reason! },\n };\n }\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, methodConfig.ignoreRuleWhileOnBranch);\n const fileResolved = resolveFileMode(normalFileMode, fileConfig.ignoreModifiedUntilEpoch, fileConfig.ignoreRuleWhileOnBranch);\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 returnTypeIgnoreBranch: options.requireReturnType?.ignoreRuleWhileOnBranch,\n noInlineTypesMode: options.noInlineTypeLiterals?.mode ?? 'OFF',\n noInlineTypesDisableAllowed: options.noInlineTypeLiterals?.disableAllowed ?? true,\n noInlineTypesIgnoreEpoch: options.noInlineTypeLiterals?.ignoreModifiedUntilEpoch,\n noInlineTypesIgnoreBranch: options.noInlineTypeLiterals?.ignoreRuleWhileOnBranch,\n noAnyUnknownMode: options.noAnyUnknown?.mode ?? 'OFF',\n noAnyUnknownDisableAllowed: options.noAnyUnknown?.disableAllowed ?? true,\n noAnyUnknownIgnoreEpoch: options.noAnyUnknown?.ignoreModifiedUntilEpoch,\n noAnyUnknownIgnoreBranch: options.noAnyUnknown?.ignoreRuleWhileOnBranch,\n noImplicitAnyMode: options.noImplicitAny?.mode ?? 'OFF',\n noImplicitAnyDisableAllowed: options.noImplicitAny?.disableAllowed ?? true,\n noImplicitAnyIgnoreEpoch: options.noImplicitAny?.ignoreModifiedUntilEpoch,\n noImplicitAnyIgnoreBranch: options.noImplicitAny?.ignoreRuleWhileOnBranch,\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 validateDtosIgnoreBranch: options.validateDtos?.ignoreRuleWhileOnBranch,\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 prismaConverterIgnoreBranch: options.prismaConverter?.ignoreRuleWhileOnBranch,\n noDestructureMode: options.noDestructure?.mode ?? 'OFF',\n noDestructureDisableAllowed: options.noDestructure?.disableAllowed ?? true,\n noDestructureIgnoreEpoch: options.noDestructure?.ignoreModifiedUntilEpoch,\n noDestructureIgnoreBranch: options.noDestructure?.ignoreRuleWhileOnBranch,\n catchErrorPatternMode: options.catchErrorPattern?.mode ?? 'OFF',\n catchErrorPatternDisableAllowed: options.catchErrorPattern?.disableAllowed ?? true,\n catchErrorPatternIgnoreEpoch: options.catchErrorPattern?.ignoreModifiedUntilEpoch,\n catchErrorPatternIgnoreBranch: options.catchErrorPattern?.ignoreRuleWhileOnBranch,\n noUnmanagedExceptionsMode: options.noUnmanagedExceptions?.mode ?? 'OFF',\n noUnmanagedExceptionsDisableAllowed: options.noUnmanagedExceptions?.disableAllowed ?? true,\n noUnmanagedExceptionsIgnoreEpoch: options.noUnmanagedExceptions?.ignoreModifiedUntilEpoch,\n noUnmanagedExceptionsIgnoreBranch: options.noUnmanagedExceptions?.ignoreRuleWhileOnBranch,\n noDirectApiResolverMode: options.noDirectApiInResolver?.mode ?? 'OFF',\n noDirectApiResolverDisableAllowed: options.noDirectApiInResolver?.disableAllowed ?? true,\n noDirectApiResolverIgnoreEpoch: options.noDirectApiInResolver?.ignoreModifiedUntilEpoch,\n noDirectApiResolverIgnoreBranch: options.noDirectApiInResolver?.ignoreRuleWhileOnBranch,\n noDirectApiResolverEnforcePaths: options.noDirectApiInResolver?.enforcePaths ?? [],\n noSymbolDiTokensMode: options.noSymbolDiTokens?.mode ?? 'OFF',\n noSymbolDiTokensDisableAllowed: options.noSymbolDiTokens?.disableAllowed ?? true,\n noSymbolDiTokensIgnoreEpoch: options.noSymbolDiTokens?.ignoreModifiedUntilEpoch,\n noSymbolDiTokensIgnoreBranch: options.noSymbolDiTokens?.ignoreRuleWhileOnBranch,\n noSymbolDiTokensAllowedPaths: options.noSymbolDiTokens?.allowedPaths ?? [],\n };\n}\n\nfunction formatOverride(override: OverrideInfo | undefined): string {\n if (!override) {\n return '';\n }\n return ` (override active, normal: ${override.normalMode}, ${override.reason})`;\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(` No implicit any: mode=${config.noImplicitAnyMode}, disableAllowed=${config.noImplicitAnyDisableAllowed}`);\n console.log(` [Prisma] Validate DTOs: mode=${config.validateDtosMode}, disableAllowed=${config.validateDtosDisableAllowed}`);\n console.log(` [Prisma] Prisma converters: mode=${config.prismaConverterMode}, disableAllowed=${config.prismaConverterDisableAllowed}`);\n console.log(` No destructure: mode=${config.noDestructureMode}, disableAllowed=${config.noDestructureDisableAllowed}`);\n console.log(` Catch error pattern: mode=${config.catchErrorPatternMode}, disableAllowed=${config.catchErrorPatternDisableAllowed}`);\n console.log(` No unmanaged exceptions: mode=${config.noUnmanagedExceptionsMode}, disableAllowed=${config.noUnmanagedExceptionsDisableAllowed}`);\n console.log(` [Angular] No direct API in resolver: mode=${config.noDirectApiResolverMode}, disableAllowed=${config.noDirectApiResolverDisableAllowed}`);\n console.log(` No Symbol DI tokens: mode=${config.noSymbolDiTokensMode}, disableAllowed=${config.noSymbolDiTokensDisableAllowed}`);\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.noImplicitAnyMode === 'OFF' &&\n config.validateDtosMode === 'OFF' &&\n config.prismaConverterMode === 'OFF' && config.noDestructureMode === 'OFF' &&\n config.catchErrorPatternMode === 'OFF' && config.noUnmanagedExceptionsMode === 'OFF' &&\n config.noDirectApiResolverMode === 'OFF' && config.noSymbolDiTokensMode === 'OFF';\n}\n\nasync function runMethodValidators(config: ParsedConfig, workspaceRoot: string): 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 }, workspaceRoot));\n }\n if (runModified) {\n results.push(await runModifiedMethodsExecutor({\n limit: config.methodLimit, mode: config.methodMode, disableAllowed: config.methodDisableAllowed,\n }, workspaceRoot));\n }\n return results;\n}\n\nasync function runLintStyleValidators(config: ParsedConfig, workspaceRoot: string): Promise<ExecutorResult[]> {\n const r: ExecutorResult[] = [];\n r.push(await runNoDestructureExecutor({ mode: config.noDestructureMode, disableAllowed: config.noDestructureDisableAllowed, ignoreModifiedUntilEpoch: config.noDestructureIgnoreEpoch, ignoreRuleWhileOnBranch: config.noDestructureIgnoreBranch }, workspaceRoot));\n r.push(await runCatchErrorPatternExecutor({ mode: config.catchErrorPatternMode, disableAllowed: config.catchErrorPatternDisableAllowed, ignoreModifiedUntilEpoch: config.catchErrorPatternIgnoreEpoch, ignoreRuleWhileOnBranch: config.catchErrorPatternIgnoreBranch }, workspaceRoot));\n r.push(await runNoUnmanagedExceptionsExecutor({ mode: config.noUnmanagedExceptionsMode, disableAllowed: config.noUnmanagedExceptionsDisableAllowed, ignoreModifiedUntilEpoch: config.noUnmanagedExceptionsIgnoreEpoch, ignoreRuleWhileOnBranch: config.noUnmanagedExceptionsIgnoreBranch }, workspaceRoot));\n r.push(await runNoDirectApiResolverExecutor({ mode: config.noDirectApiResolverMode, disableAllowed: config.noDirectApiResolverDisableAllowed, ignoreModifiedUntilEpoch: config.noDirectApiResolverIgnoreEpoch, ignoreRuleWhileOnBranch: config.noDirectApiResolverIgnoreBranch, enforcePaths: config.noDirectApiResolverEnforcePaths }, workspaceRoot));\n r.push(await runNoSymbolDiTokensExecutor({ mode: config.noSymbolDiTokensMode, disableAllowed: config.noSymbolDiTokensDisableAllowed, ignoreModifiedUntilEpoch: config.noSymbolDiTokensIgnoreEpoch, ignoreRuleWhileOnBranch: config.noSymbolDiTokensIgnoreBranch, allowedPaths: config.noSymbolDiTokensAllowedPaths }, workspaceRoot));\n return r;\n}\n\nasync function runAllValidators(config: ParsedConfig, workspaceRoot: string): Promise<ExecutorResult[]> {\n const results: ExecutorResult[] = [];\n results.push(...await runMethodValidators(config, workspaceRoot));\n results.push(await runModifiedFilesExecutor({\n limit: config.fileLimit, mode: config.fileMode, disableAllowed: config.fileDisableAllowed,\n }, workspaceRoot));\n results.push(await runReturnTypesExecutor({ mode: config.returnTypeMode, disableAllowed: config.returnTypeDisableAllowed, ignoreModifiedUntilEpoch: config.returnTypeIgnoreEpoch, ignoreRuleWhileOnBranch: config.returnTypeIgnoreBranch }, workspaceRoot));\n results.push(await runNoInlineTypesExecutor({ mode: config.noInlineTypesMode, disableAllowed: config.noInlineTypesDisableAllowed, ignoreModifiedUntilEpoch: config.noInlineTypesIgnoreEpoch, ignoreRuleWhileOnBranch: config.noInlineTypesIgnoreBranch }, workspaceRoot));\n results.push(await runNoAnyUnknownExecutor({ mode: config.noAnyUnknownMode, disableAllowed: config.noAnyUnknownDisableAllowed, ignoreModifiedUntilEpoch: config.noAnyUnknownIgnoreEpoch, ignoreRuleWhileOnBranch: config.noAnyUnknownIgnoreBranch }, workspaceRoot));\n results.push(await runNoImplicitAnyExecutor({ mode: config.noImplicitAnyMode, disableAllowed: config.noImplicitAnyDisableAllowed, ignoreModifiedUntilEpoch: config.noImplicitAnyIgnoreEpoch, ignoreRuleWhileOnBranch: config.noImplicitAnyIgnoreBranch }, workspaceRoot));\n results.push(await runValidateDtosExecutor({\n mode: config.validateDtosMode, disableAllowed: config.validateDtosDisableAllowed,\n prismaSchemaPath: config.validateDtosPrismaPath, dtoSourcePaths: config.validateDtosSrcPaths,\n ignoreModifiedUntilEpoch: config.validateDtosIgnoreEpoch, ignoreRuleWhileOnBranch: config.validateDtosIgnoreBranch,\n }, workspaceRoot));\n results.push(await runPrismaConvertersExecutor({\n mode: config.prismaConverterMode, disableAllowed: config.prismaConverterDisableAllowed,\n schemaPath: config.prismaConverterSchemaPath, convertersPaths: config.prismaConverterConvertersPaths,\n enforcePaths: config.prismaConverterEnforcePaths,\n ignoreModifiedUntilEpoch: config.prismaConverterIgnoreEpoch, ignoreRuleWhileOnBranch: config.prismaConverterIgnoreBranch,\n }, workspaceRoot));\n results.push(...await runLintStyleValidators(config, workspaceRoot));\n return results;\n}\n\nexport default async function runValidator(\n _nxOptions: ValidateCodeOptions,\n workspaceRoot: string\n): Promise<ExecutorResult> {\n // Config comes from webpieces.config.json at the workspace root,\n // loaded via the shared @webpieces/rules-config loader so ai-hooks and\n // this executor agree on every rule's enabled/mode/options.\n const loaded = loadWebpiecesRulesConfig(workspaceRoot);\n if (!loaded) {\n console.error('\\n❌ No webpieces.config.json found at workspace root (or any ancestor).\\n');\n return { success: false };\n }\n const options = toValidateCodeOptions(loaded.config);\n\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 console.log(`\\n📄 Loaded config: ${loaded.configPath}`);\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 results = await runAllValidators(config, workspaceRoot);\n const allSuccess = results.every((r) => r.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"]}
|
|
1
|
+
{"version":3,"file":"validate-code.js","sourceRoot":"","sources":["../../../../../packages/tooling/code-rules/src/validate-code.ts"],"names":[],"mappings":";;AAoEA,+BA6BC;AAjGD,0DAiBiC;AAEjC,2EAAsE;AACtE,uEAAkE;AAClE,mEAAqE;AACrE,yEAA2E;AAC3E,uEAAkE;AAClE,yEAAoE;AACpE,mDAA8D;AAC9D,6EAAwE;AACxE,uEAAmE;AACnE,iFAA4E;AAC5E,yFAAoF;AACpF,uFAAiF;AACjF,iFAA2E;AAI3E;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,MAA4B;IACjD,OAAO;QACH,IAAI,mDAAuB,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,IAAI,mCAAoB,EAAE,CAAC;QACrF,IAAI,+CAAqB,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,IAAI,iCAAkB,EAAE,CAAC;QAC/E,IAAI,kDAA0B,CAAC,MAAM,CAAC,qBAAqB,CAAC,IAAI,IAAI,sCAAuB,EAAE,CAAC;QAC9F,IAAI,wDAA6B,CAAC,MAAM,CAAC,yBAAyB,CAAC,IAAI,IAAI,yCAA0B,EAAE,CAAC;QACxG,IAAI,+CAAqB,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,IAAI,iCAAkB,EAAE,CAAC;QAC/E,IAAI,iDAAsB,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,IAAI,kCAAmB,EAAE,CAAC;QAClF,IAAI,2CAA2B,CAAC,MAAM,CAAC,sBAAsB,CAAC,IAAI,IAAI,uCAAwB,EAAE,CAAC;QACjG,IAAI,qDAAwB,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,IAAI,oCAAqB,EAAE,CAAC;QACvF,IAAI,gDAAsB,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,IAAI,kCAAmB,EAAE,CAAC;QACjF,IAAI,yDAA0B,CAAC,MAAM,CAAC,qBAAqB,CAAC,IAAI,IAAI,sCAAuB,EAAE,CAAC;QAC9F,IAAI,iEAA8B,CAAC,MAAM,CAAC,yBAAyB,CAAC,IAAI,IAAI,0CAA2B,EAAE,CAAC;QAC1G,IAAI,8DAA4B,CAAC,MAAM,CAAC,mCAAmC,CAAC,IAAI,IAAI,iDAAkC,EAAE,CAAC;QACzH,IAAI,wDAAyB,CAAC,MAAM,CAAC,qBAAqB,CAAC,IAAI,IAAI,qCAAsB,EAAE,CAAC;KAC/F,CAAC;AACN,CAAC;AAED;;;;;;;GAOG;AACY,KAAK,UAAU,YAAY,CAAC,aAAqB;IAC5D,MAAM,MAAM,GAAG,IAAA,uCAAwB,EAAC,aAAa,CAAC,CAAC;IACvD,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,2EAA2E,CAAC,CAAC;QAC3F,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IAExD,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAgC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IAEtF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;QACtE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAgC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,KAAK,MAAM,SAAS,IAAI,MAAM,EAAE,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;IACrD,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAEnE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC;IACrG,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACnC,CAAC","sourcesContent":["import {\n loadWebpiecesRulesConfig,\n WebpiecesRulesConfig,\n BaseRuleConfig,\n MaxMethodLinesConfig,\n MaxFileLinesConfig,\n RequireReturnTypeConfig,\n NoInlineTypeLiteralsConfig,\n NoAnyUnknownConfig,\n NoImplicitAnyConfig,\n PrismaValidateDtosConfig,\n PrismaConverterConfig,\n NoDestructureConfig,\n CatchErrorPatternConfig,\n NoUnmanagedExceptionsConfig,\n AngularNoDirectApiInResolverConfig,\n NoSymbolDiTokensConfig,\n} from '@webpieces/rules-config';\nimport { CodeValidator, ExecutorResult } from './code-validator';\nimport { MaxMethodLinesValidator } from './validate-modified-methods';\nimport { MaxFileLinesValidator } from './validate-modified-files';\nimport { RequireReturnTypeValidator } from './validate-return-types';\nimport { NoInlineTypeLiteralsValidator } from './validate-no-inline-types';\nimport { NoAnyUnknownValidator } from './validate-no-any-unknown';\nimport { NoImplicitAnyValidator } from './validate-no-implicit-any';\nimport { PrismaValidateDtosValidator } from './validate-dtos';\nimport { PrismaConverterValidator } from './validate-prisma-converters';\nimport { NoDestructureValidator } from './validate-no-destructure';\nimport { CatchErrorPatternValidator } from './validate-catch-error-pattern';\nimport { NoUnmanagedExceptionsValidator } from './validate-no-unmanaged-exceptions';\nimport { NoDirectApiResolverValidator } from './validate-no-direct-api-resolver';\nimport { NoSymbolDiTokensValidator } from './validate-no-symbol-di-tokens';\n\nexport { ExecutorResult } from './code-validator';\n\n/**\n * Build every code validator from the typed WebpiecesRulesConfig. Each validator is\n * constructed with its own `*Config` (the genuinely-consumed config class), so the\n * config types are exercised at compile time. Missing rule keys fall back to an empty\n * config instance — `loadWebpiecesRulesConfig` already validates that configured rules\n * carry an explicit `mode`, so in practice every key is present.\n */\nfunction buildValidators(config: WebpiecesRulesConfig): CodeValidator<BaseRuleConfig>[] {\n return [\n new MaxMethodLinesValidator(config['max-method-lines'] ?? new MaxMethodLinesConfig()),\n new MaxFileLinesValidator(config['max-file-lines'] ?? new MaxFileLinesConfig()),\n new RequireReturnTypeValidator(config['require-return-type'] ?? new RequireReturnTypeConfig()),\n new NoInlineTypeLiteralsValidator(config['no-inline-type-literals'] ?? new NoInlineTypeLiteralsConfig()),\n new NoAnyUnknownValidator(config['no-any-unknown'] ?? new NoAnyUnknownConfig()),\n new NoImplicitAnyValidator(config['no-implicit-any'] ?? new NoImplicitAnyConfig()),\n new PrismaValidateDtosValidator(config['prisma-validate-dtos'] ?? new PrismaValidateDtosConfig()),\n new PrismaConverterValidator(config['prisma-converter'] ?? new PrismaConverterConfig()),\n new NoDestructureValidator(config['no-destructure'] ?? new NoDestructureConfig()),\n new CatchErrorPatternValidator(config['catch-error-pattern'] ?? new CatchErrorPatternConfig()),\n new NoUnmanagedExceptionsValidator(config['no-unmanaged-exceptions'] ?? new NoUnmanagedExceptionsConfig()),\n new NoDirectApiResolverValidator(config['angular-no-direct-api-in-resolver'] ?? new AngularNoDirectApiInResolverConfig()),\n new NoSymbolDiTokensValidator(config['no-symbol-di-tokens'] ?? new NoSymbolDiTokensConfig()),\n ];\n}\n\n/**\n * Run all configured code validators against the workspace.\n *\n * Owns config loading: callers just pass the workspace root. Config comes from\n * webpieces.config.json (loaded via @webpieces/rules-config so ai-hooks and this\n * executor agree on every rule's enabled/mode/options). A validator runs only when\n * `shouldRun()` is true (i.e. its mode is not OFF and no branch/epoch escape hatch matches).\n */\nexport default async function runValidator(workspaceRoot: string): Promise<ExecutorResult> {\n const loaded = loadWebpiecesRulesConfig(workspaceRoot);\n if (!loaded) {\n console.error('\\n❌ No webpieces.config.json found at workspace root (or any ancestor).\\n');\n return { success: false };\n }\n\n console.log(`\\n📄 Loaded config: ${loaded.configPath}`);\n\n const validators = buildValidators(loaded.config);\n const active = validators.filter((v: CodeValidator<BaseRuleConfig>) => v.shouldRun());\n\n if (active.length === 0) {\n console.log('\\n⏭️ Skipping all code validations (all modes: OFF)\\n');\n return { success: true };\n }\n\n console.log('\\n📏 Running Code Validations\\n');\n console.log(` Active rules: ${active.map((v: CodeValidator<BaseRuleConfig>) => v.name).join(', ')}`);\n console.log('');\n\n const results: ExecutorResult[] = [];\n for (const validator of active) {\n results.push(await validator.run(workspaceRoot));\n }\n const allSuccess = results.every((r: ExecutorResult) => r.success);\n\n console.log(allSuccess ? '\\n✅ All code validations passed\\n' : '\\n❌ Some code validations failed\\n');\n return { success: allSuccess };\n}\n"]}
|
package/src/validate-dtos.d.ts
CHANGED
|
@@ -27,16 +27,9 @@
|
|
|
27
27
|
* - Dto fields must be a subset of Dbo fields
|
|
28
28
|
* - Extra Dbo fields are allowed (e.g., password)
|
|
29
29
|
*/
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
dtoSourcePaths?: string[];
|
|
36
|
-
ignoreModifiedUntilEpoch?: number;
|
|
37
|
-
ignoreRuleWhileOnBranch?: string;
|
|
30
|
+
import { PrismaValidateDtosConfig } from '@webpieces/rules-config';
|
|
31
|
+
import { CodeValidator, ExecutorResult } from './code-validator';
|
|
32
|
+
export declare class PrismaValidateDtosValidator extends CodeValidator<PrismaValidateDtosConfig> {
|
|
33
|
+
constructor(config: PrismaValidateDtosConfig);
|
|
34
|
+
run(workspaceRoot: string): Promise<ExecutorResult>;
|
|
38
35
|
}
|
|
39
|
-
export interface ExecutorResult {
|
|
40
|
-
success: boolean;
|
|
41
|
-
}
|
|
42
|
-
export default function runValidator(options: ValidateDtosOptions, workspaceRoot: string): Promise<ExecutorResult>;
|
package/src/validate-dtos.js
CHANGED
|
@@ -29,12 +29,13 @@
|
|
|
29
29
|
* - Extra Dbo fields are allowed (e.g., password)
|
|
30
30
|
*/
|
|
31
31
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
-
exports.
|
|
32
|
+
exports.PrismaValidateDtosValidator = void 0;
|
|
33
33
|
const tslib_1 = require("tslib");
|
|
34
34
|
const child_process_1 = require("child_process");
|
|
35
35
|
const fs = tslib_1.__importStar(require("fs"));
|
|
36
36
|
const path = tslib_1.__importStar(require("path"));
|
|
37
37
|
const ts = tslib_1.__importStar(require("typescript"));
|
|
38
|
+
const code_validator_1 = require("./code-validator");
|
|
38
39
|
const resolve_mode_1 = require("./resolve-mode");
|
|
39
40
|
/**
|
|
40
41
|
* Auto-detect the base branch by finding the merge-base with origin/main.
|
|
@@ -535,7 +536,7 @@ function resolveMode(normalMode, epoch, branchPattern) {
|
|
|
535
536
|
}
|
|
536
537
|
return normalMode;
|
|
537
538
|
}
|
|
538
|
-
async function
|
|
539
|
+
async function runValidatorImpl(options, workspaceRoot) {
|
|
539
540
|
const mode = resolveMode(options.mode ?? 'OFF', options.ignoreModifiedUntilEpoch, options.ignoreRuleWhileOnBranch);
|
|
540
541
|
if (mode === 'OFF') {
|
|
541
542
|
console.log('\n⏭️ Skipping validate-dtos (mode: OFF)');
|
|
@@ -567,4 +568,13 @@ async function runValidator(options, workspaceRoot) {
|
|
|
567
568
|
const changedFiles = getChangedFiles(workspaceRoot, base, head);
|
|
568
569
|
return validateDtoFiles(workspaceRoot, prismaSchemaPath, changedFiles, dtoSourcePaths, mode, base, head);
|
|
569
570
|
}
|
|
571
|
+
class PrismaValidateDtosValidator extends code_validator_1.CodeValidator {
|
|
572
|
+
constructor(config) {
|
|
573
|
+
super(config, 'prisma-validate-dtos');
|
|
574
|
+
}
|
|
575
|
+
async run(workspaceRoot) {
|
|
576
|
+
return runValidatorImpl(this.config, workspaceRoot);
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
exports.PrismaValidateDtosValidator = PrismaValidateDtosValidator;
|
|
570
580
|
//# sourceMappingURL=validate-dtos.js.map
|