@webpieces/code-rules 0.3.139 → 0.3.140

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 (52) hide show
  1. package/package.json +2 -2
  2. package/src/from-shared-config.js +20 -59
  3. package/src/from-shared-config.js.map +1 -1
  4. package/src/resolve-mode.d.ts +6 -0
  5. package/src/resolve-mode.js +40 -0
  6. package/src/resolve-mode.js.map +1 -0
  7. package/src/validate-catch-error-pattern.d.ts +1 -0
  8. package/src/validate-catch-error-pattern.js +7 -7
  9. package/src/validate-catch-error-pattern.js.map +1 -1
  10. package/src/validate-code-options.d.ts +13 -0
  11. package/src/validate-code-options.js.map +1 -1
  12. package/src/validate-code.js +49 -83
  13. package/src/validate-code.js.map +1 -1
  14. package/src/validate-dtos.d.ts +1 -0
  15. package/src/validate-dtos.js +7 -7
  16. package/src/validate-dtos.js.map +1 -1
  17. package/src/validate-modified-files.d.ts +2 -0
  18. package/src/validate-modified-files.js +6 -2
  19. package/src/validate-modified-files.js.map +1 -1
  20. package/src/validate-modified-methods.d.ts +2 -0
  21. package/src/validate-modified-methods.js +6 -2
  22. package/src/validate-modified-methods.js.map +1 -1
  23. package/src/validate-new-methods.d.ts +2 -0
  24. package/src/validate-new-methods.js +6 -2
  25. package/src/validate-new-methods.js.map +1 -1
  26. package/src/validate-no-any-unknown.d.ts +1 -0
  27. package/src/validate-no-any-unknown.js +7 -7
  28. package/src/validate-no-any-unknown.js.map +1 -1
  29. package/src/validate-no-destructure.d.ts +1 -0
  30. package/src/validate-no-destructure.js +7 -7
  31. package/src/validate-no-destructure.js.map +1 -1
  32. package/src/validate-no-direct-api-resolver.d.ts +1 -0
  33. package/src/validate-no-direct-api-resolver.js +7 -7
  34. package/src/validate-no-direct-api-resolver.js.map +1 -1
  35. package/src/validate-no-implicit-any.d.ts +1 -0
  36. package/src/validate-no-implicit-any.js +7 -7
  37. package/src/validate-no-implicit-any.js.map +1 -1
  38. package/src/validate-no-inline-types.d.ts +1 -0
  39. package/src/validate-no-inline-types.js +7 -7
  40. package/src/validate-no-inline-types.js.map +1 -1
  41. package/src/validate-no-symbol-di-tokens.d.ts +1 -0
  42. package/src/validate-no-symbol-di-tokens.js +7 -7
  43. package/src/validate-no-symbol-di-tokens.js.map +1 -1
  44. package/src/validate-no-unmanaged-exceptions.d.ts +1 -0
  45. package/src/validate-no-unmanaged-exceptions.js +7 -7
  46. package/src/validate-no-unmanaged-exceptions.js.map +1 -1
  47. package/src/validate-prisma-converters.d.ts +1 -0
  48. package/src/validate-prisma-converters.js +7 -7
  49. package/src/validate-prisma-converters.js.map +1 -1
  50. package/src/validate-return-types.d.ts +1 -0
  51. package/src/validate-return-types.js +7 -7
  52. package/src/validate-return-types.js.map +1 -1
@@ -4,6 +4,7 @@ exports.default = runValidator;
4
4
  const tslib_1 = require("tslib");
5
5
  const rules_config_1 = require("@webpieces/rules-config");
6
6
  const from_shared_config_1 = require("./from-shared-config");
7
+ const resolve_mode_1 = require("./resolve-mode");
7
8
  const validate_new_methods_1 = tslib_1.__importDefault(require("./validate-new-methods"));
8
9
  const validate_modified_methods_1 = tslib_1.__importDefault(require("./validate-modified-methods"));
9
10
  const validate_modified_files_1 = tslib_1.__importDefault(require("./validate-modified-files"));
@@ -65,38 +66,30 @@ function validateModes(options) {
65
66
  }
66
67
  return errors;
67
68
  }
68
- function formatEpochDate(epoch) {
69
- return new Date(epoch * 1000).toISOString().split('T')[0];
70
- }
71
- function resolveMethodMode(normalMode, epoch) {
72
- if (epoch === undefined) {
73
- return { mode: normalMode, override: undefined };
69
+ function resolveMethodMode(normalMode, epoch, branchPattern) {
70
+ if (normalMode === 'OFF') {
71
+ return { mode: 'OFF', override: undefined };
74
72
  }
75
- const nowSeconds = Date.now() / 1000;
76
- if (nowSeconds < epoch) {
77
- // Active: downgrade to skip modified checking
78
- const downgraded = normalMode === 'OFF' ? 'OFF' : 'NEW_METHODS';
73
+ const skip = (0, resolve_mode_1.shouldSkipRule)(epoch, branchPattern);
74
+ if (skip.skip) {
79
75
  return {
80
- mode: downgraded,
81
- override: { active: true, normalMode, expiresDate: formatEpochDate(epoch) },
76
+ mode: 'OFF',
77
+ override: { active: true, normalMode, reason: skip.reason },
82
78
  };
83
79
  }
84
- // Expired
85
80
  return { mode: normalMode, override: undefined };
86
81
  }
87
- function resolveFileMode(normalMode, epoch) {
88
- if (epoch === undefined) {
89
- return { mode: normalMode, override: undefined };
82
+ function resolveFileMode(normalMode, epoch, branchPattern) {
83
+ if (normalMode === 'OFF') {
84
+ return { mode: 'OFF', override: undefined };
90
85
  }
91
- const nowSeconds = Date.now() / 1000;
92
- if (nowSeconds < epoch) {
93
- // Active: file checking is inherently about modified files, so skip entirely
86
+ const skip = (0, resolve_mode_1.shouldSkipRule)(epoch, branchPattern);
87
+ if (skip.skip) {
94
88
  return {
95
89
  mode: 'OFF',
96
- override: { active: true, normalMode, expiresDate: formatEpochDate(epoch) },
90
+ override: { active: true, normalMode, reason: skip.reason },
97
91
  };
98
92
  }
99
- // Expired
100
93
  return { mode: normalMode, override: undefined };
101
94
  }
102
95
  function parseConfig(options) {
@@ -104,8 +97,8 @@ function parseConfig(options) {
104
97
  const fileConfig = options.fileMaxLimit ?? {};
105
98
  const normalMethodMode = methodConfig.mode ?? 'NEW_AND_MODIFIED_METHODS';
106
99
  const normalFileMode = fileConfig.mode ?? 'MODIFIED_FILES';
107
- const methodResolved = resolveMethodMode(normalMethodMode, methodConfig.ignoreModifiedUntilEpoch);
108
- const fileResolved = resolveFileMode(normalFileMode, fileConfig.ignoreModifiedUntilEpoch);
100
+ const methodResolved = resolveMethodMode(normalMethodMode, methodConfig.ignoreModifiedUntilEpoch, methodConfig.ignoreRuleWhileOnBranch);
101
+ const fileResolved = resolveFileMode(normalFileMode, fileConfig.ignoreModifiedUntilEpoch, fileConfig.ignoreRuleWhileOnBranch);
109
102
  return {
110
103
  methodLimit: methodConfig.limit ?? 80,
111
104
  methodMode: methodResolved.mode,
@@ -118,42 +111,53 @@ function parseConfig(options) {
118
111
  returnTypeMode: options.requireReturnType?.mode ?? 'OFF',
119
112
  returnTypeDisableAllowed: options.requireReturnType?.disableAllowed ?? true,
120
113
  returnTypeIgnoreEpoch: options.requireReturnType?.ignoreModifiedUntilEpoch,
114
+ returnTypeIgnoreBranch: options.requireReturnType?.ignoreRuleWhileOnBranch,
121
115
  noInlineTypesMode: options.noInlineTypeLiterals?.mode ?? 'OFF',
122
116
  noInlineTypesDisableAllowed: options.noInlineTypeLiterals?.disableAllowed ?? true,
123
117
  noInlineTypesIgnoreEpoch: options.noInlineTypeLiterals?.ignoreModifiedUntilEpoch,
118
+ noInlineTypesIgnoreBranch: options.noInlineTypeLiterals?.ignoreRuleWhileOnBranch,
124
119
  noAnyUnknownMode: options.noAnyUnknown?.mode ?? 'OFF',
125
120
  noAnyUnknownDisableAllowed: options.noAnyUnknown?.disableAllowed ?? true,
126
121
  noAnyUnknownIgnoreEpoch: options.noAnyUnknown?.ignoreModifiedUntilEpoch,
122
+ noAnyUnknownIgnoreBranch: options.noAnyUnknown?.ignoreRuleWhileOnBranch,
127
123
  noImplicitAnyMode: options.noImplicitAny?.mode ?? 'OFF',
128
124
  noImplicitAnyDisableAllowed: options.noImplicitAny?.disableAllowed ?? true,
129
125
  noImplicitAnyIgnoreEpoch: options.noImplicitAny?.ignoreModifiedUntilEpoch,
126
+ noImplicitAnyIgnoreBranch: options.noImplicitAny?.ignoreRuleWhileOnBranch,
130
127
  validateDtosMode: options.validateDtos?.mode ?? 'OFF',
131
128
  validateDtosDisableAllowed: options.validateDtos?.disableAllowed ?? true,
132
129
  validateDtosPrismaPath: options.validateDtos?.prismaSchemaPath,
133
130
  validateDtosSrcPaths: options.validateDtos?.dtoSourcePaths ?? [],
134
131
  validateDtosIgnoreEpoch: options.validateDtos?.ignoreModifiedUntilEpoch,
132
+ validateDtosIgnoreBranch: options.validateDtos?.ignoreRuleWhileOnBranch,
135
133
  prismaConverterMode: options.prismaConverter?.mode ?? 'OFF',
136
134
  prismaConverterDisableAllowed: options.prismaConverter?.disableAllowed ?? true,
137
135
  prismaConverterSchemaPath: options.prismaConverter?.schemaPath,
138
136
  prismaConverterConvertersPaths: options.prismaConverter?.convertersPaths ?? [],
139
137
  prismaConverterEnforcePaths: options.prismaConverter?.enforcePaths ?? [],
140
138
  prismaConverterIgnoreEpoch: options.prismaConverter?.ignoreModifiedUntilEpoch,
139
+ prismaConverterIgnoreBranch: options.prismaConverter?.ignoreRuleWhileOnBranch,
141
140
  noDestructureMode: options.noDestructure?.mode ?? 'OFF',
142
141
  noDestructureDisableAllowed: options.noDestructure?.disableAllowed ?? true,
143
142
  noDestructureIgnoreEpoch: options.noDestructure?.ignoreModifiedUntilEpoch,
143
+ noDestructureIgnoreBranch: options.noDestructure?.ignoreRuleWhileOnBranch,
144
144
  catchErrorPatternMode: options.catchErrorPattern?.mode ?? 'OFF',
145
145
  catchErrorPatternDisableAllowed: options.catchErrorPattern?.disableAllowed ?? true,
146
146
  catchErrorPatternIgnoreEpoch: options.catchErrorPattern?.ignoreModifiedUntilEpoch,
147
+ catchErrorPatternIgnoreBranch: options.catchErrorPattern?.ignoreRuleWhileOnBranch,
147
148
  noUnmanagedExceptionsMode: options.noUnmanagedExceptions?.mode ?? 'OFF',
148
149
  noUnmanagedExceptionsDisableAllowed: options.noUnmanagedExceptions?.disableAllowed ?? true,
149
150
  noUnmanagedExceptionsIgnoreEpoch: options.noUnmanagedExceptions?.ignoreModifiedUntilEpoch,
151
+ noUnmanagedExceptionsIgnoreBranch: options.noUnmanagedExceptions?.ignoreRuleWhileOnBranch,
150
152
  noDirectApiResolverMode: options.noDirectApiInResolver?.mode ?? 'OFF',
151
153
  noDirectApiResolverDisableAllowed: options.noDirectApiInResolver?.disableAllowed ?? true,
152
154
  noDirectApiResolverIgnoreEpoch: options.noDirectApiInResolver?.ignoreModifiedUntilEpoch,
155
+ noDirectApiResolverIgnoreBranch: options.noDirectApiInResolver?.ignoreRuleWhileOnBranch,
153
156
  noDirectApiResolverEnforcePaths: options.noDirectApiInResolver?.enforcePaths ?? [],
154
157
  noSymbolDiTokensMode: options.noSymbolDiTokens?.mode ?? 'OFF',
155
158
  noSymbolDiTokensDisableAllowed: options.noSymbolDiTokens?.disableAllowed ?? true,
156
159
  noSymbolDiTokensIgnoreEpoch: options.noSymbolDiTokens?.ignoreModifiedUntilEpoch,
160
+ noSymbolDiTokensIgnoreBranch: options.noSymbolDiTokens?.ignoreRuleWhileOnBranch,
157
161
  noSymbolDiTokensAllowedPaths: options.noSymbolDiTokens?.allowedPaths ?? [],
158
162
  };
159
163
  }
@@ -161,7 +165,7 @@ function formatOverride(override) {
161
165
  if (!override) {
162
166
  return '';
163
167
  }
164
- return ` (override active, normal: ${override.normalMode}, expires: ${override.expiresDate})`;
168
+ return ` (override active, normal: ${override.normalMode}, ${override.reason})`;
165
169
  }
166
170
  function logConfig(config) {
167
171
  console.log('\n\ud83d\udccf Running Code Validations\n');
@@ -206,75 +210,37 @@ async function runMethodValidators(config, workspaceRoot) {
206
210
  }
207
211
  return results;
208
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
+ }
209
222
  async function runAllValidators(config, workspaceRoot) {
210
223
  const results = [];
211
- const methodResults = await runMethodValidators(config, workspaceRoot);
212
- results.push(...methodResults);
224
+ results.push(...await runMethodValidators(config, workspaceRoot));
213
225
  results.push(await (0, validate_modified_files_1.default)({
214
226
  limit: config.fileLimit, mode: config.fileMode, disableAllowed: config.fileDisableAllowed,
215
227
  }, workspaceRoot));
216
- results.push(await (0, validate_return_types_1.default)({
217
- mode: config.returnTypeMode,
218
- disableAllowed: config.returnTypeDisableAllowed,
219
- ignoreModifiedUntilEpoch: config.returnTypeIgnoreEpoch,
220
- }, workspaceRoot));
221
- results.push(await (0, validate_no_inline_types_1.default)({
222
- mode: config.noInlineTypesMode,
223
- disableAllowed: config.noInlineTypesDisableAllowed,
224
- ignoreModifiedUntilEpoch: config.noInlineTypesIgnoreEpoch,
225
- }, workspaceRoot));
226
- results.push(await (0, validate_no_any_unknown_1.default)({
227
- mode: config.noAnyUnknownMode,
228
- disableAllowed: config.noAnyUnknownDisableAllowed,
229
- ignoreModifiedUntilEpoch: config.noAnyUnknownIgnoreEpoch,
230
- }, workspaceRoot));
231
- results.push(await (0, validate_no_implicit_any_1.default)({
232
- mode: config.noImplicitAnyMode,
233
- disableAllowed: config.noImplicitAnyDisableAllowed,
234
- ignoreModifiedUntilEpoch: config.noImplicitAnyIgnoreEpoch,
235
- }, 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));
236
232
  results.push(await (0, validate_dtos_1.default)({
237
- mode: config.validateDtosMode,
238
- disableAllowed: config.validateDtosDisableAllowed,
239
- prismaSchemaPath: config.validateDtosPrismaPath,
240
- dtoSourcePaths: config.validateDtosSrcPaths,
241
- ignoreModifiedUntilEpoch: config.validateDtosIgnoreEpoch,
233
+ mode: config.validateDtosMode, disableAllowed: config.validateDtosDisableAllowed,
234
+ prismaSchemaPath: config.validateDtosPrismaPath, dtoSourcePaths: config.validateDtosSrcPaths,
235
+ ignoreModifiedUntilEpoch: config.validateDtosIgnoreEpoch, ignoreRuleWhileOnBranch: config.validateDtosIgnoreBranch,
242
236
  }, workspaceRoot));
243
237
  results.push(await (0, validate_prisma_converters_1.default)({
244
- mode: config.prismaConverterMode,
245
- disableAllowed: config.prismaConverterDisableAllowed,
246
- schemaPath: config.prismaConverterSchemaPath,
247
- convertersPaths: config.prismaConverterConvertersPaths,
238
+ mode: config.prismaConverterMode, disableAllowed: config.prismaConverterDisableAllowed,
239
+ schemaPath: config.prismaConverterSchemaPath, convertersPaths: config.prismaConverterConvertersPaths,
248
240
  enforcePaths: config.prismaConverterEnforcePaths,
249
- ignoreModifiedUntilEpoch: config.prismaConverterIgnoreEpoch,
250
- }, workspaceRoot));
251
- results.push(await (0, validate_no_destructure_1.default)({
252
- mode: config.noDestructureMode,
253
- disableAllowed: config.noDestructureDisableAllowed,
254
- ignoreModifiedUntilEpoch: config.noDestructureIgnoreEpoch,
255
- }, workspaceRoot));
256
- results.push(await (0, validate_catch_error_pattern_1.default)({
257
- mode: config.catchErrorPatternMode,
258
- disableAllowed: config.catchErrorPatternDisableAllowed,
259
- ignoreModifiedUntilEpoch: config.catchErrorPatternIgnoreEpoch,
260
- }, workspaceRoot));
261
- results.push(await (0, validate_no_unmanaged_exceptions_1.default)({
262
- mode: config.noUnmanagedExceptionsMode,
263
- disableAllowed: config.noUnmanagedExceptionsDisableAllowed,
264
- ignoreModifiedUntilEpoch: config.noUnmanagedExceptionsIgnoreEpoch,
265
- }, workspaceRoot));
266
- results.push(await (0, validate_no_direct_api_resolver_1.default)({
267
- mode: config.noDirectApiResolverMode,
268
- disableAllowed: config.noDirectApiResolverDisableAllowed,
269
- ignoreModifiedUntilEpoch: config.noDirectApiResolverIgnoreEpoch,
270
- enforcePaths: config.noDirectApiResolverEnforcePaths,
271
- }, workspaceRoot));
272
- results.push(await (0, validate_no_symbol_di_tokens_1.default)({
273
- mode: config.noSymbolDiTokensMode,
274
- disableAllowed: config.noSymbolDiTokensDisableAllowed,
275
- ignoreModifiedUntilEpoch: config.noSymbolDiTokensIgnoreEpoch,
276
- allowedPaths: config.noSymbolDiTokensAllowedPaths,
241
+ ignoreModifiedUntilEpoch: config.prismaConverterIgnoreEpoch, ignoreRuleWhileOnBranch: config.prismaConverterIgnoreBranch,
277
242
  }, workspaceRoot));
243
+ results.push(...await runLintStyleValidators(config, workspaceRoot));
278
244
  return results;
279
245
  }
280
246
  async function runValidator(_nxOptions, workspaceRoot) {
@@ -1 +1 @@
1
- {"version":3,"file":"validate-code.js","sourceRoot":"","sources":["../../../../../packages/tooling/code-rules/src/validate-code.ts"],"names":[],"mappings":";;AAoYA,+BAwCC;;AA5aD,0DAAqD;AACrD,6DAA6D;AAC7D,0FAA2D;AAC3D,oGAAqE;AACrE,gGAAiE;AACjE,4FAA6D;AAC7D,kGAAkE;AAClE,gGAAgE;AAChE,kGAAkE;AAClE,4EAAsD;AACtD,sGAAuE;AACvE,gGAAiE;AACjE,0GAA0E;AAC1E,kHAAkF;AAClF,gHAA+E;AAC/E,0GAAyE;AA2FzE,MAAM,WAAW,GAA6B;IAC1C,cAAc,EAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,0BAA0B,EAAE,gBAAgB,CAAC;IAC1F,YAAY,EAAU,CAAC,KAAK,EAAE,gBAAgB,CAAC;IAC/C,iBAAiB,EAAK,CAAC,KAAK,EAAE,aAAa,EAAE,0BAA0B,EAAE,gBAAgB,CAAC;IAC1F,oBAAoB,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,0BAA0B,EAAE,gBAAgB,CAAC;IAC1F,YAAY,EAAU,CAAC,KAAK,EAAE,eAAe,EAAE,gBAAgB,CAAC;IAChE,aAAa,EAAS,CAAC,KAAK,EAAE,eAAe,EAAE,gBAAgB,CAAC;IAChE,YAAY,EAAU,CAAC,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;IACjE,eAAe,EAAO,CAAC,KAAK,EAAE,0BAA0B,EAAE,gBAAgB,CAAC;IAC3E,aAAa,EAAS,CAAC,KAAK,EAAE,eAAe,EAAE,gBAAgB,CAAC;IAChE,iBAAiB,EAAK,CAAC,KAAK,EAAE,eAAe,EAAE,gBAAgB,CAAC;IAChE,qBAAqB,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,gBAAgB,CAAC;IACjE,qBAAqB,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,0BAA0B,EAAE,gBAAgB,CAAC;IAC7F,gBAAgB,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,gBAAgB,CAAC;CAC/D,CAAC;AAEF;;GAEG;AACH,SAAS,aAAa,CAAC,OAA4B;IAC/C,MAAM,MAAM,GAAa,EAAE,CAAC;IAG5B,MAAM,WAAW,GAAgB;QAC7B,CAAC,gBAAgB,EAAE,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;QAChD,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;QAC5C,CAAC,mBAAmB,EAAE,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;QACtD,CAAC,sBAAsB,EAAE,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC;QAC5D,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;QAC5C,CAAC,eAAe,EAAE,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC;QAC9C,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;QAC5C,CAAC,iBAAiB,EAAE,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC;QAClD,CAAC,eAAe,EAAE,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC;QAC9C,CAAC,mBAAmB,EAAE,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;QACtD,CAAC,uBAAuB,EAAE,OAAO,CAAC,qBAAqB,EAAE,IAAI,CAAC;QAC9D,CAAC,uBAAuB,EAAE,OAAO,CAAC,qBAAqB,EAAE,IAAI,CAAC;QAC9D,CAAC,kBAAkB,EAAE,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC;KACvD,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,SAAS,KAAK,SAAS;YAAE,SAAS;QACtC,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,YAAY,SAAS,8BAA8B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvG,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IAClC,OAAO,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,iBAAiB,CACtB,UAA8B,EAAE,KAAyB;IAEzD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACrD,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;IACrC,IAAI,UAAU,GAAG,KAAK,EAAE,CAAC;QACrB,8CAA8C;QAC9C,MAAM,UAAU,GACZ,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC;QACjD,OAAO;YACH,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,CAAC,KAAK,CAAC,EAAE;SAC9E,CAAC;IACN,CAAC;IACD,UAAU;IACV,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,eAAe,CACpB,UAA4B,EAAE,KAAyB;IAEvD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACrD,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;IACrC,IAAI,UAAU,GAAG,KAAK,EAAE,CAAC;QACrB,6EAA6E;QAC7E,OAAO;YACH,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,CAAC,KAAK,CAAC,EAAE;SAC9E,CAAC;IACN,CAAC;IACD,UAAU;IACV,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,WAAW,CAAC,OAA4B;IAC7C,MAAM,YAAY,GAAyB,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC;IACxE,MAAM,UAAU,GAAuB,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;IAElE,MAAM,gBAAgB,GAAG,YAAY,CAAC,IAAI,IAAI,0BAA0B,CAAC;IACzE,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,IAAI,gBAAgB,CAAC;IAE3D,MAAM,cAAc,GAAG,iBAAiB,CAAC,gBAAgB,EAAE,YAAY,CAAC,wBAAwB,CAAC,CAAC;IAClG,MAAM,YAAY,GAAG,eAAe,CAAC,cAAc,EAAE,UAAU,CAAC,wBAAwB,CAAC,CAAC;IAE1F,OAAO;QACH,WAAW,EAAE,YAAY,CAAC,KAAK,IAAI,EAAE;QACrC,UAAU,EAAE,cAAc,CAAC,IAAI;QAC/B,oBAAoB,EAAE,YAAY,CAAC,cAAc,IAAI,IAAI;QACzD,cAAc,EAAE,cAAc,CAAC,QAAQ;QACvC,SAAS,EAAE,UAAU,CAAC,KAAK,IAAI,GAAG;QAClC,QAAQ,EAAE,YAAY,CAAC,IAAI;QAC3B,kBAAkB,EAAE,UAAU,CAAC,cAAc,IAAI,IAAI;QACrD,YAAY,EAAE,YAAY,CAAC,QAAQ;QACnC,cAAc,EAAE,OAAO,CAAC,iBAAiB,EAAE,IAAI,IAAI,KAAK;QACxD,wBAAwB,EAAE,OAAO,CAAC,iBAAiB,EAAE,cAAc,IAAI,IAAI;QAC3E,qBAAqB,EAAE,OAAO,CAAC,iBAAiB,EAAE,wBAAwB;QAC1E,iBAAiB,EAAE,OAAO,CAAC,oBAAoB,EAAE,IAAI,IAAI,KAAK;QAC9D,2BAA2B,EAAE,OAAO,CAAC,oBAAoB,EAAE,cAAc,IAAI,IAAI;QACjF,wBAAwB,EAAE,OAAO,CAAC,oBAAoB,EAAE,wBAAwB;QAChF,gBAAgB,EAAE,OAAO,CAAC,YAAY,EAAE,IAAI,IAAI,KAAK;QACrD,0BAA0B,EAAE,OAAO,CAAC,YAAY,EAAE,cAAc,IAAI,IAAI;QACxE,uBAAuB,EAAE,OAAO,CAAC,YAAY,EAAE,wBAAwB;QACvE,iBAAiB,EAAE,OAAO,CAAC,aAAa,EAAE,IAAI,IAAI,KAAK;QACvD,2BAA2B,EAAE,OAAO,CAAC,aAAa,EAAE,cAAc,IAAI,IAAI;QAC1E,wBAAwB,EAAE,OAAO,CAAC,aAAa,EAAE,wBAAwB;QACzE,gBAAgB,EAAE,OAAO,CAAC,YAAY,EAAE,IAAI,IAAI,KAAK;QACrD,0BAA0B,EAAE,OAAO,CAAC,YAAY,EAAE,cAAc,IAAI,IAAI;QACxE,sBAAsB,EAAE,OAAO,CAAC,YAAY,EAAE,gBAAgB;QAC9D,oBAAoB,EAAE,OAAO,CAAC,YAAY,EAAE,cAAc,IAAI,EAAE;QAChE,uBAAuB,EAAE,OAAO,CAAC,YAAY,EAAE,wBAAwB;QACvE,mBAAmB,EAAE,OAAO,CAAC,eAAe,EAAE,IAAI,IAAI,KAAK;QAC3D,6BAA6B,EAAE,OAAO,CAAC,eAAe,EAAE,cAAc,IAAI,IAAI;QAC9E,yBAAyB,EAAE,OAAO,CAAC,eAAe,EAAE,UAAU;QAC9D,8BAA8B,EAAE,OAAO,CAAC,eAAe,EAAE,eAAe,IAAI,EAAE;QAC9E,2BAA2B,EAAE,OAAO,CAAC,eAAe,EAAE,YAAY,IAAI,EAAE;QACxE,0BAA0B,EAAE,OAAO,CAAC,eAAe,EAAE,wBAAwB;QAC7E,iBAAiB,EAAE,OAAO,CAAC,aAAa,EAAE,IAAI,IAAI,KAAK;QACvD,2BAA2B,EAAE,OAAO,CAAC,aAAa,EAAE,cAAc,IAAI,IAAI;QAC1E,wBAAwB,EAAE,OAAO,CAAC,aAAa,EAAE,wBAAwB;QACzE,qBAAqB,EAAE,OAAO,CAAC,iBAAiB,EAAE,IAAI,IAAI,KAAK;QAC/D,+BAA+B,EAAE,OAAO,CAAC,iBAAiB,EAAE,cAAc,IAAI,IAAI;QAClF,4BAA4B,EAAE,OAAO,CAAC,iBAAiB,EAAE,wBAAwB;QACjF,yBAAyB,EAAE,OAAO,CAAC,qBAAqB,EAAE,IAAI,IAAI,KAAK;QACvE,mCAAmC,EAAE,OAAO,CAAC,qBAAqB,EAAE,cAAc,IAAI,IAAI;QAC1F,gCAAgC,EAAE,OAAO,CAAC,qBAAqB,EAAE,wBAAwB;QACzF,uBAAuB,EAAE,OAAO,CAAC,qBAAqB,EAAE,IAAI,IAAI,KAAK;QACrE,iCAAiC,EAAE,OAAO,CAAC,qBAAqB,EAAE,cAAc,IAAI,IAAI;QACxF,8BAA8B,EAAE,OAAO,CAAC,qBAAqB,EAAE,wBAAwB;QACvF,+BAA+B,EAAE,OAAO,CAAC,qBAAqB,EAAE,YAAY,IAAI,EAAE;QAClF,oBAAoB,EAAE,OAAO,CAAC,gBAAgB,EAAE,IAAI,IAAI,KAAK;QAC7D,8BAA8B,EAAE,OAAO,CAAC,gBAAgB,EAAE,cAAc,IAAI,IAAI;QAChF,2BAA2B,EAAE,OAAO,CAAC,gBAAgB,EAAE,wBAAwB;QAC/E,4BAA4B,EAAE,OAAO,CAAC,gBAAgB,EAAE,YAAY,IAAI,EAAE;KAC7E,CAAC;AACN,CAAC;AAED,SAAS,cAAc,CAAC,QAAkC;IACtD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;IACd,CAAC;IACD,OAAO,8BAA8B,QAAQ,CAAC,UAAU,cAAc,QAAQ,CAAC,WAAW,GAAG,CAAC;AAClG,CAAC;AAED,SAAS,SAAS,CAAC,MAAoB;IACnC,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,MAAM,CAAC,WAAW,oBAAoB,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC/K,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,MAAM,CAAC,SAAS,oBAAoB,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACrK,OAAO,CAAC,GAAG,CAAC,iCAAiC,MAAM,CAAC,cAAc,oBAAoB,MAAM,CAAC,wBAAwB,EAAE,CAAC,CAAC;IACzH,OAAO,CAAC,GAAG,CAAC,oCAAoC,MAAM,CAAC,iBAAiB,oBAAoB,MAAM,CAAC,2BAA2B,EAAE,CAAC,CAAC;IAClI,OAAO,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,gBAAgB,oBAAoB,MAAM,CAAC,0BAA0B,EAAE,CAAC,CAAC;IACvH,OAAO,CAAC,GAAG,CAAC,4BAA4B,MAAM,CAAC,iBAAiB,oBAAoB,MAAM,CAAC,2BAA2B,EAAE,CAAC,CAAC;IAC1H,OAAO,CAAC,GAAG,CAAC,mCAAmC,MAAM,CAAC,gBAAgB,oBAAoB,MAAM,CAAC,0BAA0B,EAAE,CAAC,CAAC;IAC/H,OAAO,CAAC,GAAG,CAAC,uCAAuC,MAAM,CAAC,mBAAmB,oBAAoB,MAAM,CAAC,6BAA6B,EAAE,CAAC,CAAC;IACzI,OAAO,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,iBAAiB,oBAAoB,MAAM,CAAC,2BAA2B,EAAE,CAAC,CAAC;IACzH,OAAO,CAAC,GAAG,CAAC,gCAAgC,MAAM,CAAC,qBAAqB,oBAAoB,MAAM,CAAC,+BAA+B,EAAE,CAAC,CAAC;IACtI,OAAO,CAAC,GAAG,CAAC,oCAAoC,MAAM,CAAC,yBAAyB,oBAAoB,MAAM,CAAC,mCAAmC,EAAE,CAAC,CAAC;IAClJ,OAAO,CAAC,GAAG,CAAC,gDAAgD,MAAM,CAAC,uBAAuB,oBAAoB,MAAM,CAAC,iCAAiC,EAAE,CAAC,CAAC;IAC1J,OAAO,CAAC,GAAG,CAAC,gCAAgC,MAAM,CAAC,oBAAoB,oBAAoB,MAAM,CAAC,8BAA8B,EAAE,CAAC,CAAC;IACpI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,QAAQ,CAAC,MAAoB;IAClC,OAAO,MAAM,CAAC,UAAU,KAAK,KAAK,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK;QAC3D,MAAM,CAAC,cAAc,KAAK,KAAK,IAAI,MAAM,CAAC,iBAAiB,KAAK,KAAK;QACrE,MAAM,CAAC,gBAAgB,KAAK,KAAK,IAAI,MAAM,CAAC,iBAAiB,KAAK,KAAK;QACvE,MAAM,CAAC,gBAAgB,KAAK,KAAK;QACjC,MAAM,CAAC,mBAAmB,KAAK,KAAK,IAAI,MAAM,CAAC,iBAAiB,KAAK,KAAK;QAC1E,MAAM,CAAC,qBAAqB,KAAK,KAAK,IAAI,MAAM,CAAC,yBAAyB,KAAK,KAAK;QACpF,MAAM,CAAC,uBAAuB,KAAK,KAAK,IAAI,MAAM,CAAC,oBAAoB,KAAK,KAAK,CAAC;AAC1F,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,MAAoB,EAAE,aAAqB;IAC1E,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,KAAK,aAAa,IAAI,MAAM,CAAC,UAAU,KAAK,0BAA0B,CAAC;IACvG,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,KAAK,0BAA0B,IAAI,MAAM,CAAC,UAAU,KAAK,gBAAgB,CAAC;IAE/G,IAAI,MAAM,EAAE,CAAC;QACT,OAAO,CAAC,IAAI,CAAC,MAAM,IAAA,8BAAqB,EAAC;YACrC,KAAK,EAAE,MAAM,CAAC,WAAW;YACzB,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,cAAc,EAAE,MAAM,CAAC,oBAAoB;SACvE,EAAE,aAAa,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,WAAW,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,MAAM,IAAA,mCAA0B,EAAC;YAC1C,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,cAAc,EAAE,MAAM,CAAC,oBAAoB;SAClG,EAAE,aAAa,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,MAAoB,EAAE,aAAqB;IACvE,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,MAAM,aAAa,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACvE,OAAO,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;IAC/B,OAAO,CAAC,IAAI,CAAC,MAAM,IAAA,iCAAwB,EAAC;QACxC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,CAAC,kBAAkB;KAC5F,EAAE,aAAa,CAAC,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,MAAM,IAAA,+BAAsB,EAAC;QACtC,IAAI,EAAE,MAAM,CAAC,cAAc;QAC3B,cAAc,EAAE,MAAM,CAAC,wBAAwB;QAC/C,wBAAwB,EAAE,MAAM,CAAC,qBAAqB;KACzD,EAAE,aAAa,CAAC,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,MAAM,IAAA,kCAAwB,EAAC;QACxC,IAAI,EAAE,MAAM,CAAC,iBAAiB;QAC9B,cAAc,EAAE,MAAM,CAAC,2BAA2B;QAClD,wBAAwB,EAAE,MAAM,CAAC,wBAAwB;KAC5D,EAAE,aAAa,CAAC,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,MAAM,IAAA,iCAAuB,EAAC;QACvC,IAAI,EAAE,MAAM,CAAC,gBAAgB;QAC7B,cAAc,EAAE,MAAM,CAAC,0BAA0B;QACjD,wBAAwB,EAAE,MAAM,CAAC,uBAAuB;KAC3D,EAAE,aAAa,CAAC,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,MAAM,IAAA,kCAAwB,EAAC;QACxC,IAAI,EAAE,MAAM,CAAC,iBAAiB;QAC9B,cAAc,EAAE,MAAM,CAAC,2BAA2B;QAClD,wBAAwB,EAAE,MAAM,CAAC,wBAAwB;KAC5D,EAAE,aAAa,CAAC,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,MAAM,IAAA,uBAAuB,EAAC;QACvC,IAAI,EAAE,MAAM,CAAC,gBAAgB;QAC7B,cAAc,EAAE,MAAM,CAAC,0BAA0B;QACjD,gBAAgB,EAAE,MAAM,CAAC,sBAAsB;QAC/C,cAAc,EAAE,MAAM,CAAC,oBAAoB;QAC3C,wBAAwB,EAAE,MAAM,CAAC,uBAAuB;KAC3D,EAAE,aAAa,CAAC,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,MAAM,IAAA,oCAA2B,EAAC;QAC3C,IAAI,EAAE,MAAM,CAAC,mBAAmB;QAChC,cAAc,EAAE,MAAM,CAAC,6BAA6B;QACpD,UAAU,EAAE,MAAM,CAAC,yBAAyB;QAC5C,eAAe,EAAE,MAAM,CAAC,8BAA8B;QACtD,YAAY,EAAE,MAAM,CAAC,2BAA2B;QAChD,wBAAwB,EAAE,MAAM,CAAC,0BAA0B;KAC9D,EAAE,aAAa,CAAC,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,MAAM,IAAA,iCAAwB,EAAC;QACxC,IAAI,EAAE,MAAM,CAAC,iBAAiB;QAC9B,cAAc,EAAE,MAAM,CAAC,2BAA2B;QAClD,wBAAwB,EAAE,MAAM,CAAC,wBAAwB;KAC5D,EAAE,aAAa,CAAC,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,MAAM,IAAA,sCAA4B,EAAC;QAC5C,IAAI,EAAE,MAAM,CAAC,qBAAqB;QAClC,cAAc,EAAE,MAAM,CAAC,+BAA+B;QACtD,wBAAwB,EAAE,MAAM,CAAC,4BAA4B;KAChE,EAAE,aAAa,CAAC,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,MAAM,IAAA,0CAAgC,EAAC;QAChD,IAAI,EAAE,MAAM,CAAC,yBAAyB;QACtC,cAAc,EAAE,MAAM,CAAC,mCAAmC;QAC1D,wBAAwB,EAAE,MAAM,CAAC,gCAAgC;KACpE,EAAE,aAAa,CAAC,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,MAAM,IAAA,yCAA8B,EAAC;QAC9C,IAAI,EAAE,MAAM,CAAC,uBAAuB;QACpC,cAAc,EAAE,MAAM,CAAC,iCAAiC;QACxD,wBAAwB,EAAE,MAAM,CAAC,8BAA8B;QAC/D,YAAY,EAAE,MAAM,CAAC,+BAA+B;KACvD,EAAE,aAAa,CAAC,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,MAAM,IAAA,sCAA2B,EAAC;QAC3C,IAAI,EAAE,MAAM,CAAC,oBAAoB;QACjC,cAAc,EAAE,MAAM,CAAC,8BAA8B;QACrD,wBAAwB,EAAE,MAAM,CAAC,2BAA2B;QAC5D,YAAY,EAAE,MAAM,CAAC,4BAA4B;KACpD,EAAE,aAAa,CAAC,CAAC,CAAC;IACnB,OAAO,OAAO,CAAC;AACnB,CAAC;AAEc,KAAK,UAAU,YAAY,CACtC,UAA+B,EAC/B,aAAqB;IAErB,iEAAiE;IACjE,uEAAuE;IACvE,4DAA4D;IAC5D,MAAM,MAAM,GAAG,IAAA,yBAAU,EAAC,aAAa,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACrB,OAAO,CAAC,KAAK,CAAC,2EAA2E,CAAC,CAAC;QAC3F,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;IACD,MAAM,OAAO,GAAG,IAAA,0CAAqB,EAAC,MAAM,CAAC,CAAC;IAE9C,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IAExD,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAEpC,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;QAChF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,SAAS,CAAC,MAAM,CAAC,CAAC;IAElB,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAEnD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC,CAAC,yCAAyC,CAAC,CAAC;IAC/G,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACnC,CAAC","sourcesContent":["import { loadConfig } from '@webpieces/rules-config';\nimport { toValidateCodeOptions } from './from-shared-config';\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 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 noImplicitAnyMode: NoImplicitAnyMode;\n noImplicitAnyDisableAllowed: boolean;\n noImplicitAnyIgnoreEpoch: 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 catchErrorPatternMode: CatchErrorPatternMode;\n catchErrorPatternDisableAllowed: boolean;\n catchErrorPatternIgnoreEpoch: number | undefined;\n noUnmanagedExceptionsMode: NoUnmanagedExceptionsMode;\n noUnmanagedExceptionsDisableAllowed: boolean;\n noUnmanagedExceptionsIgnoreEpoch: number | undefined;\n noDirectApiResolverMode: NoDirectApiResolverMode;\n noDirectApiResolverDisableAllowed: boolean;\n noDirectApiResolverIgnoreEpoch: number | undefined;\n noDirectApiResolverEnforcePaths: string[];\n noSymbolDiTokensMode: NoSymbolDiTokensMode;\n noSymbolDiTokensDisableAllowed: boolean;\n noSymbolDiTokensIgnoreEpoch: number | 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 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 noImplicitAnyMode: options.noImplicitAny?.mode ?? 'OFF',\n noImplicitAnyDisableAllowed: options.noImplicitAny?.disableAllowed ?? true,\n noImplicitAnyIgnoreEpoch: options.noImplicitAny?.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 catchErrorPatternMode: options.catchErrorPattern?.mode ?? 'OFF',\n catchErrorPatternDisableAllowed: options.catchErrorPattern?.disableAllowed ?? true,\n catchErrorPatternIgnoreEpoch: options.catchErrorPattern?.ignoreModifiedUntilEpoch,\n noUnmanagedExceptionsMode: options.noUnmanagedExceptions?.mode ?? 'OFF',\n noUnmanagedExceptionsDisableAllowed: options.noUnmanagedExceptions?.disableAllowed ?? true,\n noUnmanagedExceptionsIgnoreEpoch: options.noUnmanagedExceptions?.ignoreModifiedUntilEpoch,\n noDirectApiResolverMode: options.noDirectApiInResolver?.mode ?? 'OFF',\n noDirectApiResolverDisableAllowed: options.noDirectApiInResolver?.disableAllowed ?? true,\n noDirectApiResolverIgnoreEpoch: options.noDirectApiInResolver?.ignoreModifiedUntilEpoch,\n noDirectApiResolverEnforcePaths: options.noDirectApiInResolver?.enforcePaths ?? [],\n noSymbolDiTokensMode: options.noSymbolDiTokens?.mode ?? 'OFF',\n noSymbolDiTokensDisableAllowed: options.noSymbolDiTokens?.disableAllowed ?? true,\n noSymbolDiTokensIgnoreEpoch: options.noSymbolDiTokens?.ignoreModifiedUntilEpoch,\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}, 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(` 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 runAllValidators(config: ParsedConfig, workspaceRoot: string): Promise<ExecutorResult[]> {\n const results: ExecutorResult[] = [];\n const methodResults = await runMethodValidators(config, workspaceRoot);\n results.push(...methodResults);\n results.push(await runModifiedFilesExecutor({\n limit: config.fileLimit, mode: config.fileMode, disableAllowed: config.fileDisableAllowed,\n }, workspaceRoot));\n results.push(await runReturnTypesExecutor({\n mode: config.returnTypeMode,\n disableAllowed: config.returnTypeDisableAllowed,\n ignoreModifiedUntilEpoch: config.returnTypeIgnoreEpoch,\n }, workspaceRoot));\n results.push(await runNoInlineTypesExecutor({\n mode: config.noInlineTypesMode,\n disableAllowed: config.noInlineTypesDisableAllowed,\n ignoreModifiedUntilEpoch: config.noInlineTypesIgnoreEpoch,\n }, workspaceRoot));\n results.push(await runNoAnyUnknownExecutor({\n mode: config.noAnyUnknownMode,\n disableAllowed: config.noAnyUnknownDisableAllowed,\n ignoreModifiedUntilEpoch: config.noAnyUnknownIgnoreEpoch,\n }, workspaceRoot));\n results.push(await runNoImplicitAnyExecutor({\n mode: config.noImplicitAnyMode,\n disableAllowed: config.noImplicitAnyDisableAllowed,\n ignoreModifiedUntilEpoch: config.noImplicitAnyIgnoreEpoch,\n }, workspaceRoot));\n results.push(await runValidateDtosExecutor({\n mode: config.validateDtosMode,\n disableAllowed: config.validateDtosDisableAllowed,\n prismaSchemaPath: config.validateDtosPrismaPath,\n dtoSourcePaths: config.validateDtosSrcPaths,\n ignoreModifiedUntilEpoch: config.validateDtosIgnoreEpoch,\n }, workspaceRoot));\n results.push(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 }, workspaceRoot));\n results.push(await runNoDestructureExecutor({\n mode: config.noDestructureMode,\n disableAllowed: config.noDestructureDisableAllowed,\n ignoreModifiedUntilEpoch: config.noDestructureIgnoreEpoch,\n }, workspaceRoot));\n results.push(await runCatchErrorPatternExecutor({\n mode: config.catchErrorPatternMode,\n disableAllowed: config.catchErrorPatternDisableAllowed,\n ignoreModifiedUntilEpoch: config.catchErrorPatternIgnoreEpoch,\n }, workspaceRoot));\n results.push(await runNoUnmanagedExceptionsExecutor({\n mode: config.noUnmanagedExceptionsMode,\n disableAllowed: config.noUnmanagedExceptionsDisableAllowed,\n ignoreModifiedUntilEpoch: config.noUnmanagedExceptionsIgnoreEpoch,\n }, workspaceRoot));\n results.push(await runNoDirectApiResolverExecutor({\n mode: config.noDirectApiResolverMode,\n disableAllowed: config.noDirectApiResolverDisableAllowed,\n ignoreModifiedUntilEpoch: config.noDirectApiResolverIgnoreEpoch,\n enforcePaths: config.noDirectApiResolverEnforcePaths,\n }, workspaceRoot));\n results.push(await runNoSymbolDiTokensExecutor({\n mode: config.noSymbolDiTokensMode,\n disableAllowed: config.noSymbolDiTokensDisableAllowed,\n ignoreModifiedUntilEpoch: config.noSymbolDiTokensIgnoreEpoch,\n allowedPaths: config.noSymbolDiTokensAllowedPaths,\n }, 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 shared = loadConfig(workspaceRoot);\n if (!shared.configPath) {\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(shared);\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: ${shared.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":";;AA4WA,+BAwCC;;AApZD,0DAAqD;AACrD,6DAA6D;AAC7D,iDAAgD;AAChD,0FAA2D;AAC3D,oGAAqE;AACrE,gGAAiE;AACjE,4FAA6D;AAC7D,kGAAkE;AAClE,gGAAgE;AAChE,kGAAkE;AAClE,4EAAsD;AACtD,sGAAuE;AACvE,gGAAiE;AACjE,0GAA0E;AAC1E,kHAAkF;AAClF,gHAA+E;AAC/E,0GAAyE;AAsGzE,MAAM,WAAW,GAA6B;IAC1C,cAAc,EAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,0BAA0B,EAAE,gBAAgB,CAAC;IAC1F,YAAY,EAAU,CAAC,KAAK,EAAE,gBAAgB,CAAC;IAC/C,iBAAiB,EAAK,CAAC,KAAK,EAAE,aAAa,EAAE,0BAA0B,EAAE,gBAAgB,CAAC;IAC1F,oBAAoB,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,0BAA0B,EAAE,gBAAgB,CAAC;IAC1F,YAAY,EAAU,CAAC,KAAK,EAAE,eAAe,EAAE,gBAAgB,CAAC;IAChE,aAAa,EAAS,CAAC,KAAK,EAAE,eAAe,EAAE,gBAAgB,CAAC;IAChE,YAAY,EAAU,CAAC,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;IACjE,eAAe,EAAO,CAAC,KAAK,EAAE,0BAA0B,EAAE,gBAAgB,CAAC;IAC3E,aAAa,EAAS,CAAC,KAAK,EAAE,eAAe,EAAE,gBAAgB,CAAC;IAChE,iBAAiB,EAAK,CAAC,KAAK,EAAE,eAAe,EAAE,gBAAgB,CAAC;IAChE,qBAAqB,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,gBAAgB,CAAC;IACjE,qBAAqB,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,0BAA0B,EAAE,gBAAgB,CAAC;IAC7F,gBAAgB,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,gBAAgB,CAAC;CAC/D,CAAC;AAEF;;GAEG;AACH,SAAS,aAAa,CAAC,OAA4B;IAC/C,MAAM,MAAM,GAAa,EAAE,CAAC;IAG5B,MAAM,WAAW,GAAgB;QAC7B,CAAC,gBAAgB,EAAE,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;QAChD,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;QAC5C,CAAC,mBAAmB,EAAE,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;QACtD,CAAC,sBAAsB,EAAE,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC;QAC5D,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;QAC5C,CAAC,eAAe,EAAE,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC;QAC9C,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;QAC5C,CAAC,iBAAiB,EAAE,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC;QAClD,CAAC,eAAe,EAAE,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC;QAC9C,CAAC,mBAAmB,EAAE,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;QACtD,CAAC,uBAAuB,EAAE,OAAO,CAAC,qBAAqB,EAAE,IAAI,CAAC;QAC9D,CAAC,uBAAuB,EAAE,OAAO,CAAC,qBAAqB,EAAE,IAAI,CAAC;QAC9D,CAAC,kBAAkB,EAAE,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC;KACvD,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,SAAS,KAAK,SAAS;YAAE,SAAS;QACtC,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,YAAY,SAAS,8BAA8B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvG,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAS,iBAAiB,CACtB,UAA8B,EAAE,KAAyB,EAAE,aAAiC;IAE5F,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QACvB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IAChD,CAAC;IACD,MAAM,IAAI,GAAG,IAAA,6BAAc,EAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAClD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO;YACH,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,MAAO,EAAE;SAC/D,CAAC;IACN,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,eAAe,CACpB,UAA4B,EAAE,KAAyB,EAAE,aAAiC;IAE1F,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QACvB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IAChD,CAAC;IACD,MAAM,IAAI,GAAG,IAAA,6BAAc,EAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAClD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO;YACH,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,MAAO,EAAE;SAC/D,CAAC;IACN,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,WAAW,CAAC,OAA4B;IAC7C,MAAM,YAAY,GAAyB,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC;IACxE,MAAM,UAAU,GAAuB,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;IAElE,MAAM,gBAAgB,GAAG,YAAY,CAAC,IAAI,IAAI,0BAA0B,CAAC;IACzE,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,IAAI,gBAAgB,CAAC;IAE3D,MAAM,cAAc,GAAG,iBAAiB,CAAC,gBAAgB,EAAE,YAAY,CAAC,wBAAwB,EAAE,YAAY,CAAC,uBAAuB,CAAC,CAAC;IACxI,MAAM,YAAY,GAAG,eAAe,CAAC,cAAc,EAAE,UAAU,CAAC,wBAAwB,EAAE,UAAU,CAAC,uBAAuB,CAAC,CAAC;IAE9H,OAAO;QACH,WAAW,EAAE,YAAY,CAAC,KAAK,IAAI,EAAE;QACrC,UAAU,EAAE,cAAc,CAAC,IAAI;QAC/B,oBAAoB,EAAE,YAAY,CAAC,cAAc,IAAI,IAAI;QACzD,cAAc,EAAE,cAAc,CAAC,QAAQ;QACvC,SAAS,EAAE,UAAU,CAAC,KAAK,IAAI,GAAG;QAClC,QAAQ,EAAE,YAAY,CAAC,IAAI;QAC3B,kBAAkB,EAAE,UAAU,CAAC,cAAc,IAAI,IAAI;QACrD,YAAY,EAAE,YAAY,CAAC,QAAQ;QACnC,cAAc,EAAE,OAAO,CAAC,iBAAiB,EAAE,IAAI,IAAI,KAAK;QACxD,wBAAwB,EAAE,OAAO,CAAC,iBAAiB,EAAE,cAAc,IAAI,IAAI;QAC3E,qBAAqB,EAAE,OAAO,CAAC,iBAAiB,EAAE,wBAAwB;QAC1E,sBAAsB,EAAE,OAAO,CAAC,iBAAiB,EAAE,uBAAuB;QAC1E,iBAAiB,EAAE,OAAO,CAAC,oBAAoB,EAAE,IAAI,IAAI,KAAK;QAC9D,2BAA2B,EAAE,OAAO,CAAC,oBAAoB,EAAE,cAAc,IAAI,IAAI;QACjF,wBAAwB,EAAE,OAAO,CAAC,oBAAoB,EAAE,wBAAwB;QAChF,yBAAyB,EAAE,OAAO,CAAC,oBAAoB,EAAE,uBAAuB;QAChF,gBAAgB,EAAE,OAAO,CAAC,YAAY,EAAE,IAAI,IAAI,KAAK;QACrD,0BAA0B,EAAE,OAAO,CAAC,YAAY,EAAE,cAAc,IAAI,IAAI;QACxE,uBAAuB,EAAE,OAAO,CAAC,YAAY,EAAE,wBAAwB;QACvE,wBAAwB,EAAE,OAAO,CAAC,YAAY,EAAE,uBAAuB;QACvE,iBAAiB,EAAE,OAAO,CAAC,aAAa,EAAE,IAAI,IAAI,KAAK;QACvD,2BAA2B,EAAE,OAAO,CAAC,aAAa,EAAE,cAAc,IAAI,IAAI;QAC1E,wBAAwB,EAAE,OAAO,CAAC,aAAa,EAAE,wBAAwB;QACzE,yBAAyB,EAAE,OAAO,CAAC,aAAa,EAAE,uBAAuB;QACzE,gBAAgB,EAAE,OAAO,CAAC,YAAY,EAAE,IAAI,IAAI,KAAK;QACrD,0BAA0B,EAAE,OAAO,CAAC,YAAY,EAAE,cAAc,IAAI,IAAI;QACxE,sBAAsB,EAAE,OAAO,CAAC,YAAY,EAAE,gBAAgB;QAC9D,oBAAoB,EAAE,OAAO,CAAC,YAAY,EAAE,cAAc,IAAI,EAAE;QAChE,uBAAuB,EAAE,OAAO,CAAC,YAAY,EAAE,wBAAwB;QACvE,wBAAwB,EAAE,OAAO,CAAC,YAAY,EAAE,uBAAuB;QACvE,mBAAmB,EAAE,OAAO,CAAC,eAAe,EAAE,IAAI,IAAI,KAAK;QAC3D,6BAA6B,EAAE,OAAO,CAAC,eAAe,EAAE,cAAc,IAAI,IAAI;QAC9E,yBAAyB,EAAE,OAAO,CAAC,eAAe,EAAE,UAAU;QAC9D,8BAA8B,EAAE,OAAO,CAAC,eAAe,EAAE,eAAe,IAAI,EAAE;QAC9E,2BAA2B,EAAE,OAAO,CAAC,eAAe,EAAE,YAAY,IAAI,EAAE;QACxE,0BAA0B,EAAE,OAAO,CAAC,eAAe,EAAE,wBAAwB;QAC7E,2BAA2B,EAAE,OAAO,CAAC,eAAe,EAAE,uBAAuB;QAC7E,iBAAiB,EAAE,OAAO,CAAC,aAAa,EAAE,IAAI,IAAI,KAAK;QACvD,2BAA2B,EAAE,OAAO,CAAC,aAAa,EAAE,cAAc,IAAI,IAAI;QAC1E,wBAAwB,EAAE,OAAO,CAAC,aAAa,EAAE,wBAAwB;QACzE,yBAAyB,EAAE,OAAO,CAAC,aAAa,EAAE,uBAAuB;QACzE,qBAAqB,EAAE,OAAO,CAAC,iBAAiB,EAAE,IAAI,IAAI,KAAK;QAC/D,+BAA+B,EAAE,OAAO,CAAC,iBAAiB,EAAE,cAAc,IAAI,IAAI;QAClF,4BAA4B,EAAE,OAAO,CAAC,iBAAiB,EAAE,wBAAwB;QACjF,6BAA6B,EAAE,OAAO,CAAC,iBAAiB,EAAE,uBAAuB;QACjF,yBAAyB,EAAE,OAAO,CAAC,qBAAqB,EAAE,IAAI,IAAI,KAAK;QACvE,mCAAmC,EAAE,OAAO,CAAC,qBAAqB,EAAE,cAAc,IAAI,IAAI;QAC1F,gCAAgC,EAAE,OAAO,CAAC,qBAAqB,EAAE,wBAAwB;QACzF,iCAAiC,EAAE,OAAO,CAAC,qBAAqB,EAAE,uBAAuB;QACzF,uBAAuB,EAAE,OAAO,CAAC,qBAAqB,EAAE,IAAI,IAAI,KAAK;QACrE,iCAAiC,EAAE,OAAO,CAAC,qBAAqB,EAAE,cAAc,IAAI,IAAI;QACxF,8BAA8B,EAAE,OAAO,CAAC,qBAAqB,EAAE,wBAAwB;QACvF,+BAA+B,EAAE,OAAO,CAAC,qBAAqB,EAAE,uBAAuB;QACvF,+BAA+B,EAAE,OAAO,CAAC,qBAAqB,EAAE,YAAY,IAAI,EAAE;QAClF,oBAAoB,EAAE,OAAO,CAAC,gBAAgB,EAAE,IAAI,IAAI,KAAK;QAC7D,8BAA8B,EAAE,OAAO,CAAC,gBAAgB,EAAE,cAAc,IAAI,IAAI;QAChF,2BAA2B,EAAE,OAAO,CAAC,gBAAgB,EAAE,wBAAwB;QAC/E,4BAA4B,EAAE,OAAO,CAAC,gBAAgB,EAAE,uBAAuB;QAC/E,4BAA4B,EAAE,OAAO,CAAC,gBAAgB,EAAE,YAAY,IAAI,EAAE;KAC7E,CAAC;AACN,CAAC;AAED,SAAS,cAAc,CAAC,QAAkC;IACtD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;IACd,CAAC;IACD,OAAO,8BAA8B,QAAQ,CAAC,UAAU,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC;AACpF,CAAC;AAED,SAAS,SAAS,CAAC,MAAoB;IACnC,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,MAAM,CAAC,WAAW,oBAAoB,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC/K,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,MAAM,CAAC,SAAS,oBAAoB,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACrK,OAAO,CAAC,GAAG,CAAC,iCAAiC,MAAM,CAAC,cAAc,oBAAoB,MAAM,CAAC,wBAAwB,EAAE,CAAC,CAAC;IACzH,OAAO,CAAC,GAAG,CAAC,oCAAoC,MAAM,CAAC,iBAAiB,oBAAoB,MAAM,CAAC,2BAA2B,EAAE,CAAC,CAAC;IAClI,OAAO,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,gBAAgB,oBAAoB,MAAM,CAAC,0BAA0B,EAAE,CAAC,CAAC;IACvH,OAAO,CAAC,GAAG,CAAC,4BAA4B,MAAM,CAAC,iBAAiB,oBAAoB,MAAM,CAAC,2BAA2B,EAAE,CAAC,CAAC;IAC1H,OAAO,CAAC,GAAG,CAAC,mCAAmC,MAAM,CAAC,gBAAgB,oBAAoB,MAAM,CAAC,0BAA0B,EAAE,CAAC,CAAC;IAC/H,OAAO,CAAC,GAAG,CAAC,uCAAuC,MAAM,CAAC,mBAAmB,oBAAoB,MAAM,CAAC,6BAA6B,EAAE,CAAC,CAAC;IACzI,OAAO,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,iBAAiB,oBAAoB,MAAM,CAAC,2BAA2B,EAAE,CAAC,CAAC;IACzH,OAAO,CAAC,GAAG,CAAC,gCAAgC,MAAM,CAAC,qBAAqB,oBAAoB,MAAM,CAAC,+BAA+B,EAAE,CAAC,CAAC;IACtI,OAAO,CAAC,GAAG,CAAC,oCAAoC,MAAM,CAAC,yBAAyB,oBAAoB,MAAM,CAAC,mCAAmC,EAAE,CAAC,CAAC;IAClJ,OAAO,CAAC,GAAG,CAAC,gDAAgD,MAAM,CAAC,uBAAuB,oBAAoB,MAAM,CAAC,iCAAiC,EAAE,CAAC,CAAC;IAC1J,OAAO,CAAC,GAAG,CAAC,gCAAgC,MAAM,CAAC,oBAAoB,oBAAoB,MAAM,CAAC,8BAA8B,EAAE,CAAC,CAAC;IACpI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,QAAQ,CAAC,MAAoB;IAClC,OAAO,MAAM,CAAC,UAAU,KAAK,KAAK,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK;QAC3D,MAAM,CAAC,cAAc,KAAK,KAAK,IAAI,MAAM,CAAC,iBAAiB,KAAK,KAAK;QACrE,MAAM,CAAC,gBAAgB,KAAK,KAAK,IAAI,MAAM,CAAC,iBAAiB,KAAK,KAAK;QACvE,MAAM,CAAC,gBAAgB,KAAK,KAAK;QACjC,MAAM,CAAC,mBAAmB,KAAK,KAAK,IAAI,MAAM,CAAC,iBAAiB,KAAK,KAAK;QAC1E,MAAM,CAAC,qBAAqB,KAAK,KAAK,IAAI,MAAM,CAAC,yBAAyB,KAAK,KAAK;QACpF,MAAM,CAAC,uBAAuB,KAAK,KAAK,IAAI,MAAM,CAAC,oBAAoB,KAAK,KAAK,CAAC;AAC1F,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,MAAoB,EAAE,aAAqB;IAC1E,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,KAAK,aAAa,IAAI,MAAM,CAAC,UAAU,KAAK,0BAA0B,CAAC;IACvG,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,KAAK,0BAA0B,IAAI,MAAM,CAAC,UAAU,KAAK,gBAAgB,CAAC;IAE/G,IAAI,MAAM,EAAE,CAAC;QACT,OAAO,CAAC,IAAI,CAAC,MAAM,IAAA,8BAAqB,EAAC;YACrC,KAAK,EAAE,MAAM,CAAC,WAAW;YACzB,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,cAAc,EAAE,MAAM,CAAC,oBAAoB;SACvE,EAAE,aAAa,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,WAAW,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,MAAM,IAAA,mCAA0B,EAAC;YAC1C,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,cAAc,EAAE,MAAM,CAAC,oBAAoB;SAClG,EAAE,aAAa,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,MAAoB,EAAE,aAAqB;IAC7E,MAAM,CAAC,GAAqB,EAAE,CAAC;IAC/B,CAAC,CAAC,IAAI,CAAC,MAAM,IAAA,iCAAwB,EAAC,EAAE,IAAI,EAAE,MAAM,CAAC,iBAAiB,EAAE,cAAc,EAAE,MAAM,CAAC,2BAA2B,EAAE,wBAAwB,EAAE,MAAM,CAAC,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,CAAC,yBAAyB,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;IACpQ,CAAC,CAAC,IAAI,CAAC,MAAM,IAAA,sCAA4B,EAAC,EAAE,IAAI,EAAE,MAAM,CAAC,qBAAqB,EAAE,cAAc,EAAE,MAAM,CAAC,+BAA+B,EAAE,wBAAwB,EAAE,MAAM,CAAC,4BAA4B,EAAE,uBAAuB,EAAE,MAAM,CAAC,6BAA6B,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;IACxR,CAAC,CAAC,IAAI,CAAC,MAAM,IAAA,0CAAgC,EAAC,EAAE,IAAI,EAAE,MAAM,CAAC,yBAAyB,EAAE,cAAc,EAAE,MAAM,CAAC,mCAAmC,EAAE,wBAAwB,EAAE,MAAM,CAAC,gCAAgC,EAAE,uBAAuB,EAAE,MAAM,CAAC,iCAAiC,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;IAC5S,CAAC,CAAC,IAAI,CAAC,MAAM,IAAA,yCAA8B,EAAC,EAAE,IAAI,EAAE,MAAM,CAAC,uBAAuB,EAAE,cAAc,EAAE,MAAM,CAAC,iCAAiC,EAAE,wBAAwB,EAAE,MAAM,CAAC,8BAA8B,EAAE,uBAAuB,EAAE,MAAM,CAAC,+BAA+B,EAAE,YAAY,EAAE,MAAM,CAAC,+BAA+B,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;IACxV,CAAC,CAAC,IAAI,CAAC,MAAM,IAAA,sCAA2B,EAAC,EAAE,IAAI,EAAE,MAAM,CAAC,oBAAoB,EAAE,cAAc,EAAE,MAAM,CAAC,8BAA8B,EAAE,wBAAwB,EAAE,MAAM,CAAC,2BAA2B,EAAE,uBAAuB,EAAE,MAAM,CAAC,4BAA4B,EAAE,YAAY,EAAE,MAAM,CAAC,4BAA4B,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;IACtU,OAAO,CAAC,CAAC;AACb,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,MAAoB,EAAE,aAAqB;IACvE,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IAClE,OAAO,CAAC,IAAI,CAAC,MAAM,IAAA,iCAAwB,EAAC;QACxC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,CAAC,kBAAkB;KAC5F,EAAE,aAAa,CAAC,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,MAAM,IAAA,+BAAsB,EAAC,EAAE,IAAI,EAAE,MAAM,CAAC,cAAc,EAAE,cAAc,EAAE,MAAM,CAAC,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,CAAC,sBAAsB,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;IAC5P,OAAO,CAAC,IAAI,CAAC,MAAM,IAAA,kCAAwB,EAAC,EAAE,IAAI,EAAE,MAAM,CAAC,iBAAiB,EAAE,cAAc,EAAE,MAAM,CAAC,2BAA2B,EAAE,wBAAwB,EAAE,MAAM,CAAC,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,CAAC,yBAAyB,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;IAC1Q,OAAO,CAAC,IAAI,CAAC,MAAM,IAAA,iCAAuB,EAAC,EAAE,IAAI,EAAE,MAAM,CAAC,gBAAgB,EAAE,cAAc,EAAE,MAAM,CAAC,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,CAAC,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,CAAC,wBAAwB,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;IACrQ,OAAO,CAAC,IAAI,CAAC,MAAM,IAAA,kCAAwB,EAAC,EAAE,IAAI,EAAE,MAAM,CAAC,iBAAiB,EAAE,cAAc,EAAE,MAAM,CAAC,2BAA2B,EAAE,wBAAwB,EAAE,MAAM,CAAC,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,CAAC,yBAAyB,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;IAC1Q,OAAO,CAAC,IAAI,CAAC,MAAM,IAAA,uBAAuB,EAAC;QACvC,IAAI,EAAE,MAAM,CAAC,gBAAgB,EAAE,cAAc,EAAE,MAAM,CAAC,0BAA0B;QAChF,gBAAgB,EAAE,MAAM,CAAC,sBAAsB,EAAE,cAAc,EAAE,MAAM,CAAC,oBAAoB;QAC5F,wBAAwB,EAAE,MAAM,CAAC,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,CAAC,wBAAwB;KACrH,EAAE,aAAa,CAAC,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,MAAM,IAAA,oCAA2B,EAAC;QAC3C,IAAI,EAAE,MAAM,CAAC,mBAAmB,EAAE,cAAc,EAAE,MAAM,CAAC,6BAA6B;QACtF,UAAU,EAAE,MAAM,CAAC,yBAAyB,EAAE,eAAe,EAAE,MAAM,CAAC,8BAA8B;QACpG,YAAY,EAAE,MAAM,CAAC,2BAA2B;QAChD,wBAAwB,EAAE,MAAM,CAAC,0BAA0B,EAAE,uBAAuB,EAAE,MAAM,CAAC,2BAA2B;KAC3H,EAAE,aAAa,CAAC,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,sBAAsB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IACrE,OAAO,OAAO,CAAC;AACnB,CAAC;AAEc,KAAK,UAAU,YAAY,CACtC,UAA+B,EAC/B,aAAqB;IAErB,iEAAiE;IACjE,uEAAuE;IACvE,4DAA4D;IAC5D,MAAM,MAAM,GAAG,IAAA,yBAAU,EAAC,aAAa,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACrB,OAAO,CAAC,KAAK,CAAC,2EAA2E,CAAC,CAAC;QAC3F,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;IACD,MAAM,OAAO,GAAG,IAAA,0CAAqB,EAAC,MAAM,CAAC,CAAC;IAE9C,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IAExD,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAEpC,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;QAChF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,SAAS,CAAC,MAAM,CAAC,CAAC;IAElB,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAEnD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC,CAAC,yCAAyC,CAAC,CAAC;IAC/G,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACnC,CAAC","sourcesContent":["import { loadConfig } 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 shared = loadConfig(workspaceRoot);\n if (!shared.configPath) {\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(shared);\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: ${shared.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"]}
@@ -34,6 +34,7 @@ export interface ValidateDtosOptions {
34
34
  prismaSchemaPath?: string;
35
35
  dtoSourcePaths?: string[];
36
36
  ignoreModifiedUntilEpoch?: number;
37
+ ignoreRuleWhileOnBranch?: string;
37
38
  }
38
39
  export interface ExecutorResult {
39
40
  success: boolean;
@@ -35,6 +35,7 @@ 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 resolve_mode_1 = require("./resolve-mode");
38
39
  /**
39
40
  * Auto-detect the base branch by finding the merge-base with origin/main.
40
41
  */
@@ -522,21 +523,20 @@ function validateDtoFiles(workspaceRoot, prismaSchemaPath, changedFiles, dtoSour
522
523
  * Resolve mode considering ignoreModifiedUntilEpoch override.
523
524
  * When active, downgrades to OFF. When expired, logs a warning.
524
525
  */
525
- function resolveMode(normalMode, epoch) {
526
- if (epoch === undefined || normalMode === 'OFF') {
526
+ function resolveMode(normalMode, epoch, branchPattern) {
527
+ if (normalMode === 'OFF') {
527
528
  return normalMode;
528
529
  }
529
- const nowSeconds = Date.now() / 1000;
530
- if (nowSeconds < epoch) {
531
- const expiresDate = new Date(epoch * 1000).toISOString().split('T')[0];
532
- console.log(`\n⏭️ Skipping validate-dtos (ignoreModifiedUntilEpoch active, expires: ${expiresDate})`);
530
+ const skip = (0, resolve_mode_1.shouldSkipRule)(epoch, branchPattern);
531
+ if (skip.skip) {
532
+ console.log(`\n⏭️ Skipping validate-dtos (${skip.reason})`);
533
533
  console.log('');
534
534
  return 'OFF';
535
535
  }
536
536
  return normalMode;
537
537
  }
538
538
  async function runValidator(options, workspaceRoot) {
539
- const mode = resolveMode(options.mode ?? 'OFF', options.ignoreModifiedUntilEpoch);
539
+ const mode = resolveMode(options.mode ?? 'OFF', options.ignoreModifiedUntilEpoch, options.ignoreRuleWhileOnBranch);
540
540
  if (mode === 'OFF') {
541
541
  console.log('\n⏭️ Skipping validate-dtos (mode: OFF)');
542
542
  console.log('');