@webpieces/code-rules 0.3.171 → 0.3.174

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webpieces/code-rules",
3
- "version": "0.3.171",
3
+ "version": "0.3.174",
4
4
  "description": "Standalone code validation rules extracted from architecture-validators, no Nx dependency required",
5
5
  "type": "commonjs",
6
6
  "main": "./src/index.js",
@@ -20,7 +20,7 @@
20
20
  "directory": "packages/tooling/code-rules"
21
21
  },
22
22
  "dependencies": {
23
- "@webpieces/rules-config": "0.3.171"
23
+ "@webpieces/rules-config": "0.3.174"
24
24
  },
25
25
  "publishConfig": {
26
26
  "access": "public"
package/src/cli.js CHANGED
@@ -5,16 +5,16 @@ 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
7
  const validate_code_1 = tslib_1.__importDefault(require("./validate-code"));
8
- // webpieces-disable no-unmanaged-exceptions -- global entry point for code-rules CLI
9
8
  async function main() {
9
+ // webpieces-disable no-unmanaged-exceptions -- global entry point for code-rules CLI
10
10
  try {
11
11
  const workspaceRoot = process.cwd();
12
- const shared = (0, rules_config_1.loadConfig)(workspaceRoot);
13
- if (!shared.configPath) {
12
+ const loaded = (0, rules_config_1.loadWebpiecesRulesConfig)(workspaceRoot);
13
+ if (!loaded) {
14
14
  console.error('webpieces.config.json not found — run wp-setup-ai-hooks to initialize.');
15
15
  process.exit(1);
16
16
  }
17
- const options = (0, from_shared_config_1.toValidateCodeOptions)(shared);
17
+ const options = (0, from_shared_config_1.toValidateCodeOptions)(loaded.config);
18
18
  const result = await (0, validate_code_1.default)(options, workspaceRoot);
19
19
  process.exit(result.success ? 0 : 1);
20
20
  }
package/src/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../../../packages/tooling/code-rules/src/cli.ts"],"names":[],"mappings":";;;;AACA,0DAA6E;AAC7E,6DAA6D;AAC7D,4EAA8C;AAE9C,qFAAqF;AACrF,KAAK,UAAU,IAAI;IACf,IAAI,CAAC;QACD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,IAAA,yBAAU,EAAC,aAAa,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAC;YACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,MAAM,OAAO,GAAG,IAAA,0CAAqB,EAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,IAAA,uBAAe,EAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,IAAA,sBAAO,EAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,GAAG,YAAY,4BAAa,EAAE,CAAC;YAC/B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,KAAK,CAAC,kCAAkC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC","sourcesContent":["#!/usr/bin/env node\nimport { loadConfig, InformAiError, toError } from '@webpieces/rules-config';\nimport { toValidateCodeOptions } from './from-shared-config';\nimport runValidateCode from './validate-code';\n\n// webpieces-disable no-unmanaged-exceptions -- global entry point for code-rules CLI\nasync function main(): Promise<void> {\n try {\n const workspaceRoot = process.cwd();\n const shared = loadConfig(workspaceRoot);\n if (!shared.configPath) {\n console.error('webpieces.config.json not found — run wp-setup-ai-hooks to initialize.');\n process.exit(1);\n }\n const options = toValidateCodeOptions(shared);\n const result = await runValidateCode(options, workspaceRoot);\n process.exit(result.success ? 0 : 1);\n } catch (err: unknown) {\n const error = toError(err);\n if (err instanceof InformAiError) {\n console.error(error.message);\n } else {\n console.error(`[code-rules] unexpected error: ${error.message}`);\n }\n process.exit(1);\n }\n}\n\nmain();\n"]}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../../../packages/tooling/code-rules/src/cli.ts"],"names":[],"mappings":";;;;AACA,0DAA2F;AAC3F,6DAA6D;AAC7D,4EAA8C;AAE9C,KAAK,UAAU,IAAI;IACf,qFAAqF;IACrF,IAAI,CAAC;QACD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,IAAA,uCAAwB,EAAC,aAAa,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAC;YACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,MAAM,OAAO,GAAG,IAAA,0CAAqB,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,IAAA,uBAAe,EAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,IAAA,sBAAO,EAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,GAAG,YAAY,4BAAa,EAAE,CAAC;YAC/B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,KAAK,CAAC,kCAAkC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC","sourcesContent":["#!/usr/bin/env node\nimport { loadWebpiecesRulesConfig, InformAiError, toError } from '@webpieces/rules-config';\nimport { toValidateCodeOptions } from './from-shared-config';\nimport runValidateCode from './validate-code';\n\nasync function main(): Promise<void> {\n // webpieces-disable no-unmanaged-exceptions -- global entry point for code-rules CLI\n try {\n const workspaceRoot = process.cwd();\n const loaded = loadWebpiecesRulesConfig(workspaceRoot);\n if (!loaded) {\n console.error('webpieces.config.json not found — run wp-setup-ai-hooks to initialize.');\n process.exit(1);\n }\n const options = toValidateCodeOptions(loaded.config);\n const result = await runValidateCode(options, workspaceRoot);\n process.exit(result.success ? 0 : 1);\n } catch (err: unknown) {\n const error = toError(err);\n if (err instanceof InformAiError) {\n console.error(error.message);\n } else {\n console.error(`[code-rules] unexpected error: ${error.message}`);\n }\n process.exit(1);\n }\n}\n\nmain();\n"]}
@@ -1,28 +1,26 @@
1
1
  /**
2
- * Adapter: map @webpieces/rules-config ResolvedConfig -> legacy ValidateCodeOptions.
2
+ * Adapter: map WebpiecesRulesConfig -> ValidateCodeOptions.
3
3
  *
4
- * We don't want to rewrite the 11 sub-executors in this PR, so this file
5
- * takes the shared webpieces.config.json entries (kebab-case rule names)
6
- * and reconstructs the camelCase ValidateCodeOptions shape the executor
7
- * already understands.
4
+ * Direct field access no opaque option-bag extraction. The per-rule config
5
+ * classes in @webpieces/rules-config are structurally compatible with the
6
+ * *Config interfaces in validate-code-options.ts (same field names/types),
7
+ * so TypeScript verifies the assignment at compile time.
8
8
  *
9
- * Mapping of canonical kebab-case rule name -> ValidateCodeOptions field:
10
- * max-method-lines -> methodMaxLimit
11
- * max-file-lines -> fileMaxLimit
12
- * require-return-type -> requireReturnType
13
- * no-inline-type-literals -> noInlineTypeLiterals
14
- * no-any-unknown -> noAnyUnknown
15
- * no-implicit-any -> noImplicitAny
16
- * prisma-validate-dtos -> validateDtos
17
- * prisma-converter -> prismaConverter
18
- * no-destructure -> noDestructure
19
- * catch-error-pattern -> catchErrorPattern
20
- * no-unmanaged-exceptions -> noUnmanagedExceptions
9
+ * Mapping of webpieces.config.json key -> ValidateCodeOptions field:
10
+ * max-method-lines -> methodMaxLimit
11
+ * max-file-lines -> fileMaxLimit
12
+ * require-return-type -> requireReturnType
13
+ * no-inline-type-literals -> noInlineTypeLiterals
14
+ * no-any-unknown -> noAnyUnknown
15
+ * no-implicit-any -> noImplicitAny
16
+ * prisma-validate-dtos -> validateDtos
17
+ * prisma-converter -> prismaConverter
18
+ * no-destructure -> noDestructure
19
+ * catch-error-pattern -> catchErrorPattern
20
+ * no-unmanaged-exceptions -> noUnmanagedExceptions
21
21
  * angular-no-direct-api-in-resolver -> noDirectApiInResolver
22
- *
23
- * On/off is driven entirely by `mode`: a `mode:'OFF'` entry flows straight
24
- * through to the downstream executor, which short-circuits on it.
22
+ * no-symbol-di-tokens -> noSymbolDiTokens
25
23
  */
26
- import type { ResolvedConfig } from '@webpieces/rules-config';
24
+ import type { WebpiecesRulesConfig } from '@webpieces/rules-config';
27
25
  import type { ValidateCodeOptions } from './validate-code-options';
28
- export declare function toValidateCodeOptions(shared: ResolvedConfig): ValidateCodeOptions;
26
+ export declare function toValidateCodeOptions(config: WebpiecesRulesConfig): ValidateCodeOptions;
@@ -1,84 +1,44 @@
1
1
  "use strict";
2
2
  /**
3
- * Adapter: map @webpieces/rules-config ResolvedConfig -> legacy ValidateCodeOptions.
3
+ * Adapter: map WebpiecesRulesConfig -> ValidateCodeOptions.
4
4
  *
5
- * We don't want to rewrite the 11 sub-executors in this PR, so this file
6
- * takes the shared webpieces.config.json entries (kebab-case rule names)
7
- * and reconstructs the camelCase ValidateCodeOptions shape the executor
8
- * already understands.
5
+ * Direct field access no opaque option-bag extraction. The per-rule config
6
+ * classes in @webpieces/rules-config are structurally compatible with the
7
+ * *Config interfaces in validate-code-options.ts (same field names/types),
8
+ * so TypeScript verifies the assignment at compile time.
9
9
  *
10
- * Mapping of canonical kebab-case rule name -> ValidateCodeOptions field:
11
- * max-method-lines -> methodMaxLimit
12
- * max-file-lines -> fileMaxLimit
13
- * require-return-type -> requireReturnType
14
- * no-inline-type-literals -> noInlineTypeLiterals
15
- * no-any-unknown -> noAnyUnknown
16
- * no-implicit-any -> noImplicitAny
17
- * prisma-validate-dtos -> validateDtos
18
- * prisma-converter -> prismaConverter
19
- * no-destructure -> noDestructure
20
- * catch-error-pattern -> catchErrorPattern
21
- * no-unmanaged-exceptions -> noUnmanagedExceptions
10
+ * Mapping of webpieces.config.json key -> ValidateCodeOptions field:
11
+ * max-method-lines -> methodMaxLimit
12
+ * max-file-lines -> fileMaxLimit
13
+ * require-return-type -> requireReturnType
14
+ * no-inline-type-literals -> noInlineTypeLiterals
15
+ * no-any-unknown -> noAnyUnknown
16
+ * no-implicit-any -> noImplicitAny
17
+ * prisma-validate-dtos -> validateDtos
18
+ * prisma-converter -> prismaConverter
19
+ * no-destructure -> noDestructure
20
+ * catch-error-pattern -> catchErrorPattern
21
+ * no-unmanaged-exceptions -> noUnmanagedExceptions
22
22
  * angular-no-direct-api-in-resolver -> noDirectApiInResolver
23
- *
24
- * On/off is driven entirely by `mode`: a `mode:'OFF'` entry flows straight
25
- * through to the downstream executor, which short-circuits on it.
23
+ * no-symbol-di-tokens -> noSymbolDiTokens
26
24
  */
27
25
  Object.defineProperty(exports, "__esModule", { value: true });
28
26
  exports.toValidateCodeOptions = toValidateCodeOptions;
29
- // webpieces-disable no-any-unknown -- coerces opaque option values pulled from JSON
30
- function opt(rule, key) {
31
- if (!rule)
32
- return undefined;
33
- const value = rule.options[key];
34
- if (value === undefined)
35
- return undefined;
36
- return value;
37
- }
38
- function modeOrOff(rule) {
39
- if (!rule)
40
- return undefined;
41
- const mode = rule.options['mode'];
42
- return mode ?? undefined;
43
- }
44
- function skipOpts(rule) {
45
- return {
46
- disableAllowed: opt(rule, 'disableAllowed'),
47
- ignoreModifiedUntilEpoch: opt(rule, 'ignoreModifiedUntilEpoch'),
48
- ignoreRuleWhileOnBranch: opt(rule, 'ignoreRuleWhileOnBranch'),
49
- };
50
- }
51
- function toValidateCodeOptions(shared) {
52
- const r = (name) => shared.rules.get(name);
27
+ function toValidateCodeOptions(config) {
53
28
  return {
54
- methodMaxLimit: { mode: modeOrOff(r('max-method-lines')), ...skipOpts(r('max-method-lines')), limit: opt(r('max-method-lines'), 'limit') },
55
- fileMaxLimit: { mode: modeOrOff(r('max-file-lines')), ...skipOpts(r('max-file-lines')), limit: opt(r('max-file-lines'), 'limit') },
56
- requireReturnType: { mode: modeOrOff(r('require-return-type')), ...skipOpts(r('require-return-type')) },
57
- noInlineTypeLiterals: { mode: modeOrOff(r('no-inline-type-literals')), ...skipOpts(r('no-inline-type-literals')) },
58
- noAnyUnknown: { mode: modeOrOff(r('no-any-unknown')), ...skipOpts(r('no-any-unknown')) },
59
- noImplicitAny: { mode: modeOrOff(r('no-implicit-any')), ...skipOpts(r('no-implicit-any')) },
60
- validateDtos: {
61
- mode: modeOrOff(r('prisma-validate-dtos')), ...skipOpts(r('prisma-validate-dtos')),
62
- prismaSchemaPath: opt(r('prisma-validate-dtos'), 'prismaSchemaPath'),
63
- dtoSourcePaths: opt(r('prisma-validate-dtos'), 'dtoSourcePaths'),
64
- },
65
- prismaConverter: {
66
- mode: modeOrOff(r('prisma-converter')), ...skipOpts(r('prisma-converter')),
67
- schemaPath: opt(r('prisma-converter'), 'schemaPath'),
68
- convertersPaths: opt(r('prisma-converter'), 'convertersPaths'),
69
- enforcePaths: opt(r('prisma-converter'), 'enforcePaths'),
70
- },
71
- noDestructure: { mode: modeOrOff(r('no-destructure')), ...skipOpts(r('no-destructure')) },
72
- catchErrorPattern: { mode: modeOrOff(r('catch-error-pattern')), ...skipOpts(r('catch-error-pattern')) },
73
- noUnmanagedExceptions: { mode: modeOrOff(r('no-unmanaged-exceptions')), ...skipOpts(r('no-unmanaged-exceptions')) },
74
- noDirectApiInResolver: {
75
- mode: modeOrOff(r('angular-no-direct-api-in-resolver')), ...skipOpts(r('angular-no-direct-api-in-resolver')),
76
- enforcePaths: opt(r('angular-no-direct-api-in-resolver'), 'enforcePaths'),
77
- },
78
- noSymbolDiTokens: {
79
- mode: modeOrOff(r('no-symbol-di-tokens')), ...skipOpts(r('no-symbol-di-tokens')),
80
- allowedPaths: opt(r('no-symbol-di-tokens'), 'allowedPaths'),
81
- },
29
+ methodMaxLimit: config['max-method-lines'],
30
+ fileMaxLimit: config['max-file-lines'],
31
+ requireReturnType: config['require-return-type'],
32
+ noInlineTypeLiterals: config['no-inline-type-literals'],
33
+ noAnyUnknown: config['no-any-unknown'],
34
+ noImplicitAny: config['no-implicit-any'],
35
+ validateDtos: config['prisma-validate-dtos'],
36
+ prismaConverter: config['prisma-converter'],
37
+ noDestructure: config['no-destructure'],
38
+ catchErrorPattern: config['catch-error-pattern'],
39
+ noUnmanagedExceptions: config['no-unmanaged-exceptions'],
40
+ noDirectApiInResolver: config['angular-no-direct-api-in-resolver'],
41
+ noSymbolDiTokens: config['no-symbol-di-tokens'],
82
42
  };
83
43
  }
84
44
  //# sourceMappingURL=from-shared-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"from-shared-config.js","sourceRoot":"","sources":["../../../../../packages/tooling/code-rules/src/from-shared-config.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Adapter: map @webpieces/rules-config ResolvedConfig -> legacy ValidateCodeOptions.\n *\n * We don't want to rewrite the 11 sub-executors in this PR, so this file\n * takes the shared webpieces.config.json entries (kebab-case rule names)\n * and reconstructs the camelCase ValidateCodeOptions shape the executor\n * already understands.\n *\n * Mapping of canonical kebab-case rule name -> ValidateCodeOptions field:\n * max-method-lines -> methodMaxLimit\n * max-file-lines -> fileMaxLimit\n * require-return-type -> requireReturnType\n * no-inline-type-literals -> noInlineTypeLiterals\n * no-any-unknown -> noAnyUnknown\n * no-implicit-any -> noImplicitAny\n * prisma-validate-dtos -> validateDtos\n * prisma-converter -> prismaConverter\n * no-destructure -> noDestructure\n * catch-error-pattern -> catchErrorPattern\n * no-unmanaged-exceptions -> noUnmanagedExceptions\n * angular-no-direct-api-in-resolver -> noDirectApiInResolver\n *\n * On/off is driven entirely by `mode`: a `mode:'OFF'` entry flows straight\n * through to the downstream executor, which short-circuits on it.\n */\n\nimport type { ResolvedConfig, ResolvedRuleConfig } from '@webpieces/rules-config';\nimport type { ValidateCodeOptions } from './validate-code-options';\n\n// webpieces-disable no-any-unknown -- coerces opaque option values pulled from JSON\nfunction opt<T>(rule: ResolvedRuleConfig | undefined, key: string): T | undefined {\n if (!rule) return undefined;\n const value = rule.options[key];\n if (value === undefined) return undefined;\n return value as T;\n}\n\nfunction modeOrOff<T extends string>(rule: ResolvedRuleConfig | undefined): T | undefined {\n if (!rule) return undefined;\n const mode = rule.options['mode'];\n return (mode as T) ?? undefined;\n}\n\ninterface SkipOpts {\n disableAllowed: boolean | undefined;\n ignoreModifiedUntilEpoch: number | undefined;\n ignoreRuleWhileOnBranch: string | undefined;\n}\n\nfunction skipOpts(rule: ResolvedRuleConfig | undefined): SkipOpts {\n return {\n disableAllowed: opt<boolean>(rule, 'disableAllowed'),\n ignoreModifiedUntilEpoch: opt<number>(rule, 'ignoreModifiedUntilEpoch'),\n ignoreRuleWhileOnBranch: opt<string>(rule, 'ignoreRuleWhileOnBranch'),\n };\n}\n\nexport function toValidateCodeOptions(shared: ResolvedConfig): ValidateCodeOptions {\n const r = (name: string): ResolvedRuleConfig | undefined => shared.rules.get(name);\n\n return {\n methodMaxLimit: { mode: modeOrOff(r('max-method-lines')), ...skipOpts(r('max-method-lines')), limit: opt<number>(r('max-method-lines'), 'limit') },\n fileMaxLimit: { mode: modeOrOff(r('max-file-lines')), ...skipOpts(r('max-file-lines')), limit: opt<number>(r('max-file-lines'), 'limit') },\n requireReturnType: { mode: modeOrOff(r('require-return-type')), ...skipOpts(r('require-return-type')) },\n noInlineTypeLiterals: { mode: modeOrOff(r('no-inline-type-literals')), ...skipOpts(r('no-inline-type-literals')) },\n noAnyUnknown: { mode: modeOrOff(r('no-any-unknown')), ...skipOpts(r('no-any-unknown')) },\n noImplicitAny: { mode: modeOrOff(r('no-implicit-any')), ...skipOpts(r('no-implicit-any')) },\n validateDtos: {\n mode: modeOrOff(r('prisma-validate-dtos')), ...skipOpts(r('prisma-validate-dtos')),\n prismaSchemaPath: opt<string>(r('prisma-validate-dtos'), 'prismaSchemaPath'),\n dtoSourcePaths: opt<string[]>(r('prisma-validate-dtos'), 'dtoSourcePaths'),\n },\n prismaConverter: {\n mode: modeOrOff(r('prisma-converter')), ...skipOpts(r('prisma-converter')),\n schemaPath: opt<string>(r('prisma-converter'), 'schemaPath'),\n convertersPaths: opt<string[]>(r('prisma-converter'), 'convertersPaths'),\n enforcePaths: opt<string[]>(r('prisma-converter'), 'enforcePaths'),\n },\n noDestructure: { mode: modeOrOff(r('no-destructure')), ...skipOpts(r('no-destructure')) },\n catchErrorPattern: { mode: modeOrOff(r('catch-error-pattern')), ...skipOpts(r('catch-error-pattern')) },\n noUnmanagedExceptions: { mode: modeOrOff(r('no-unmanaged-exceptions')), ...skipOpts(r('no-unmanaged-exceptions')) },\n noDirectApiInResolver: {\n mode: modeOrOff(r('angular-no-direct-api-in-resolver')), ...skipOpts(r('angular-no-direct-api-in-resolver')),\n enforcePaths: opt<string[]>(r('angular-no-direct-api-in-resolver'), 'enforcePaths'),\n },\n noSymbolDiTokens: {\n mode: modeOrOff(r('no-symbol-di-tokens')), ...skipOpts(r('no-symbol-di-tokens')),\n allowedPaths: opt<string[]>(r('no-symbol-di-tokens'), 'allowedPaths'),\n },\n };\n}\n"]}
1
+ {"version":3,"file":"from-shared-config.js","sourceRoot":"","sources":["../../../../../packages/tooling/code-rules/src/from-shared-config.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;;AAKH,sDAgBC;AAhBD,SAAgB,qBAAqB,CAAC,MAA4B;IAC9D,OAAO;QACH,cAAc,EAAE,MAAM,CAAC,kBAAkB,CAAC;QAC1C,YAAY,EAAE,MAAM,CAAC,gBAAgB,CAAC;QACtC,iBAAiB,EAAE,MAAM,CAAC,qBAAqB,CAAC;QAChD,oBAAoB,EAAE,MAAM,CAAC,yBAAyB,CAAC;QACvD,YAAY,EAAE,MAAM,CAAC,gBAAgB,CAAC;QACtC,aAAa,EAAE,MAAM,CAAC,iBAAiB,CAAC;QACxC,YAAY,EAAE,MAAM,CAAC,sBAAsB,CAAC;QAC5C,eAAe,EAAE,MAAM,CAAC,kBAAkB,CAAC;QAC3C,aAAa,EAAE,MAAM,CAAC,gBAAgB,CAAC;QACvC,iBAAiB,EAAE,MAAM,CAAC,qBAAqB,CAAC;QAChD,qBAAqB,EAAE,MAAM,CAAC,yBAAyB,CAAC;QACxD,qBAAqB,EAAE,MAAM,CAAC,mCAAmC,CAAC;QAClE,gBAAgB,EAAE,MAAM,CAAC,qBAAqB,CAAC;KAClD,CAAC;AACN,CAAC","sourcesContent":["/**\n * Adapter: map WebpiecesRulesConfig -> ValidateCodeOptions.\n *\n * Direct field access no opaque option-bag extraction. The per-rule config\n * classes in @webpieces/rules-config are structurally compatible with the\n * *Config interfaces in validate-code-options.ts (same field names/types),\n * so TypeScript verifies the assignment at compile time.\n *\n * Mapping of webpieces.config.json key -> ValidateCodeOptions field:\n * max-method-lines -> methodMaxLimit\n * max-file-lines -> fileMaxLimit\n * require-return-type -> requireReturnType\n * no-inline-type-literals -> noInlineTypeLiterals\n * no-any-unknown -> noAnyUnknown\n * no-implicit-any -> noImplicitAny\n * prisma-validate-dtos -> validateDtos\n * prisma-converter -> prismaConverter\n * no-destructure -> noDestructure\n * catch-error-pattern -> catchErrorPattern\n * no-unmanaged-exceptions -> noUnmanagedExceptions\n * angular-no-direct-api-in-resolver -> noDirectApiInResolver\n * no-symbol-di-tokens -> noSymbolDiTokens\n */\n\nimport type { WebpiecesRulesConfig } from '@webpieces/rules-config';\nimport type { ValidateCodeOptions } from './validate-code-options';\n\nexport function toValidateCodeOptions(config: WebpiecesRulesConfig): ValidateCodeOptions {\n return {\n methodMaxLimit: config['max-method-lines'],\n fileMaxLimit: config['max-file-lines'],\n requireReturnType: config['require-return-type'],\n noInlineTypeLiterals: config['no-inline-type-literals'],\n noAnyUnknown: config['no-any-unknown'],\n noImplicitAny: config['no-implicit-any'],\n validateDtos: config['prisma-validate-dtos'],\n prismaConverter: config['prisma-converter'],\n noDestructure: config['no-destructure'],\n catchErrorPattern: config['catch-error-pattern'],\n noUnmanagedExceptions: config['no-unmanaged-exceptions'],\n noDirectApiInResolver: config['angular-no-direct-api-in-resolver'],\n noSymbolDiTokens: config['no-symbol-di-tokens'],\n };\n}\n"]}
@@ -247,12 +247,12 @@ async function runValidator(_nxOptions, workspaceRoot) {
247
247
  // Config comes from webpieces.config.json at the workspace root,
248
248
  // loaded via the shared @webpieces/rules-config loader so ai-hooks and
249
249
  // this executor agree on every rule's enabled/mode/options.
250
- const shared = (0, rules_config_1.loadConfig)(workspaceRoot);
251
- if (!shared.configPath) {
250
+ const loaded = (0, rules_config_1.loadWebpiecesRulesConfig)(workspaceRoot);
251
+ if (!loaded) {
252
252
  console.error('\n❌ No webpieces.config.json found at workspace root (or any ancestor).\n');
253
253
  return { success: false };
254
254
  }
255
- const options = (0, from_shared_config_1.toValidateCodeOptions)(shared);
255
+ const options = (0, from_shared_config_1.toValidateCodeOptions)(loaded.config);
256
256
  const modeErrors = validateModes(options);
257
257
  if (modeErrors.length > 0) {
258
258
  console.error('');
@@ -262,7 +262,7 @@ async function runValidator(_nxOptions, workspaceRoot) {
262
262
  console.error('');
263
263
  return { success: false };
264
264
  }
265
- console.log(`\n📄 Loaded config: ${shared.configPath}`);
265
+ console.log(`\n📄 Loaded config: ${loaded.configPath}`);
266
266
  const config = parseConfig(options);
267
267
  if (isAllOff(config)) {
268
268
  console.log('\n\u23ed\ufe0f Skipping all code validations (all modes: OFF)\n');
@@ -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 { 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"]}
1
+ {"version":3,"file":"validate-code.js","sourceRoot":"","sources":["../../../../../packages/tooling/code-rules/src/validate-code.ts"],"names":[],"mappings":";;AA4WA,+BAwCC;;AApZD,0DAAmE;AACnE,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,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;IACD,MAAM,OAAO,GAAG,IAAA,0CAAqB,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAErD,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 { 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"]}
package/src/wp-ci.js CHANGED
@@ -65,13 +65,13 @@ function runNx(root, args) {
65
65
  return 1;
66
66
  }
67
67
  async function runStandalone(cwd) {
68
- const shared = (0, rules_config_1.loadConfig)(cwd);
69
- if (!shared.configPath) {
68
+ const loaded = (0, rules_config_1.loadWebpiecesRulesConfig)(cwd);
69
+ if (!loaded) {
70
70
  console.log('ℹ️ Not an Nx repo and no webpieces.config.json found — nothing to validate.');
71
71
  return 0;
72
72
  }
73
73
  console.log('ℹ️ Not an Nx repo — running standalone webpieces code validators.\n');
74
- const options = (0, from_shared_config_1.toValidateCodeOptions)(shared);
74
+ const options = (0, from_shared_config_1.toValidateCodeOptions)(loaded.config);
75
75
  const result = await (0, validate_code_1.default)(options, cwd);
76
76
  return result.success ? 0 : 1;
77
77
  }
package/src/wp-ci.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"wp-ci.js","sourceRoot":"","sources":["../../../../../packages/tooling/code-rules/src/wp-ci.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n/**\n * wp-ci — the universal webpieces CI entrypoint.\n *\n * Works in BOTH an Nx monorepo and a plain (non-Nx) repo, because the detection of\n * \"are we even in Nx?\" cannot live inside an Nx executor (by the time an executor runs,\n * Nx is already running). Dispatch:\n *\n * - no nx.json (non-Nx repo) -> run the standalone code validators, succeed.\n * - nx.json present, plugin NOT in it -> fail with the exact install command.\n * - nx.json present, plugin registered -> run validators (incl. the wiring guard),\n * then `nx affected --target=ci`.\n *\n * Repos reference this as a bin (`\"webpieces:ci\": \"wp-ci\"`) so the logic is versioned in\n * the npm package instead of copy-pasted into each repo's package.json (which drifts).\n */\n\nimport { spawnSync } from 'child_process';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nimport { loadConfig, InformAiError, toError } from '@webpieces/rules-config';\nimport { toValidateCodeOptions } from './from-shared-config';\nimport runValidateCode from './validate-code';\n\nconst NX_PLUGIN_NAME = '@webpieces/nx-webpieces-rules';\n\ninterface NxPluginObject {\n plugin?: string;\n}\n\ntype NxPluginEntry = string | NxPluginObject;\n\ninterface RawNxJson {\n plugins?: NxPluginEntry[];\n}\n\nfunction findUp(filename: string, startDir: string): string | null {\n let dir = startDir;\n while (true) {\n const candidate = path.join(dir, filename);\n if (fs.existsSync(candidate)) return candidate;\n const parent = path.dirname(dir);\n if (parent === dir) return null;\n dir = parent;\n }\n}\n\nfunction pluginEntryMatches(entry: NxPluginEntry): boolean {\n if (typeof entry === 'string') return entry === NX_PLUGIN_NAME;\n return entry.plugin === NX_PLUGIN_NAME;\n}\n\nfunction isPluginRegistered(nxJsonPath: string): boolean {\n const raw = fs.readFileSync(nxJsonPath, 'utf8');\n // webpieces-disable no-unmanaged-exceptions -- rethrow as InformAiError so global catch surfaces readable message to AI\n try {\n const parsed = JSON.parse(raw) as RawNxJson;\n const plugins = parsed.plugins ?? [];\n return plugins.some((entry: NxPluginEntry) => pluginEntryMatches(entry));\n } catch (err: unknown) {\n const error = toError(err);\n throw new InformAiError(`nx.json has invalid JSON — fix the file, then retry.\\nParse error: ${error.message}\\nFile: ${nxJsonPath}`);\n }\n}\n\nfunction nxBin(root: string): string {\n const local = path.join(root, 'node_modules', '.bin', 'nx');\n return fs.existsSync(local) ? local : 'nx';\n}\n\nfunction runNx(root: string, args: string[]): number {\n const result = spawnSync(nxBin(root), args, { stdio: 'inherit', cwd: root });\n if (typeof result.status === 'number') return result.status;\n return 1;\n}\n\nasync function runStandalone(cwd: string): Promise<number> {\n const shared = loadConfig(cwd);\n if (!shared.configPath) {\n console.log('ℹ️ Not an Nx repo and no webpieces.config.json found — nothing to validate.');\n return 0;\n }\n console.log('ℹ️ Not an Nx repo — running standalone webpieces code validators.\\n');\n const options = toValidateCodeOptions(shared);\n const result = await runValidateCode(options, cwd);\n return result.success ? 0 : 1;\n}\n\nfunction reportPluginMissing(): void {\n console.error('\\n❌ This is an Nx monorepo but the webpieces Nx plugin is not installed.\\n');\n console.error(' Install it so the validators run during CI:\\n');\n console.error(` nx add ${NX_PLUGIN_NAME}\\n`);\n console.error(' (or add it manually to the \"plugins\" array in nx.json).\\n');\n}\n\n// webpieces-disable no-unmanaged-exceptions -- global entry point for wp-ci CLI\nasync function main(): Promise<void> {\n try {\n const cwd = process.cwd();\n const passthrough = process.argv.slice(2);\n\n const nxJsonPath = findUp('nx.json', cwd);\n if (!nxJsonPath) {\n const code = await runStandalone(cwd);\n process.exit(code);\n }\n\n const root = path.dirname(nxJsonPath);\n if (!isPluginRegistered(nxJsonPath)) {\n reportPluginMissing();\n process.exit(1);\n }\n\n // Run the architecture + code validators first (this also runs the wiring guard,\n // which fails loudly if nx.json no longer wires validators into the build).\n if (fs.existsSync(path.join(root, 'architecture'))) {\n const validateCode = runNx(root, ['run', 'architecture:validate-complete']);\n if (validateCode !== 0) process.exit(validateCode);\n }\n\n // Then the Gradle-style ci composite (lint + build + test) across affected projects.\n const ciCode = runNx(root, ['affected', '--target=ci', ...passthrough]);\n process.exit(ciCode);\n } catch (err: unknown) {\n const error = toError(err);\n if (err instanceof InformAiError) {\n console.error(error.message);\n } else {\n console.error(`[wp-ci] unexpected error: ${error.message}`);\n }\n process.exit(1);\n }\n}\n\nvoid main();\n"]}
1
+ {"version":3,"file":"wp-ci.js","sourceRoot":"","sources":["../../../../../packages/tooling/code-rules/src/wp-ci.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n/**\n * wp-ci — the universal webpieces CI entrypoint.\n *\n * Works in BOTH an Nx monorepo and a plain (non-Nx) repo, because the detection of\n * \"are we even in Nx?\" cannot live inside an Nx executor (by the time an executor runs,\n * Nx is already running). Dispatch:\n *\n * - no nx.json (non-Nx repo) -> run the standalone code validators, succeed.\n * - nx.json present, plugin NOT in it -> fail with the exact install command.\n * - nx.json present, plugin registered -> run validators (incl. the wiring guard),\n * then `nx affected --target=ci`.\n *\n * Repos reference this as a bin (`\"webpieces:ci\": \"wp-ci\"`) so the logic is versioned in\n * the npm package instead of copy-pasted into each repo's package.json (which drifts).\n */\n\nimport { spawnSync } from 'child_process';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nimport { loadWebpiecesRulesConfig, InformAiError, toError } from '@webpieces/rules-config';\nimport { toValidateCodeOptions } from './from-shared-config';\nimport runValidateCode from './validate-code';\n\nconst NX_PLUGIN_NAME = '@webpieces/nx-webpieces-rules';\n\ninterface NxPluginObject {\n plugin?: string;\n}\n\ntype NxPluginEntry = string | NxPluginObject;\n\ninterface RawNxJson {\n plugins?: NxPluginEntry[];\n}\n\nfunction findUp(filename: string, startDir: string): string | null {\n let dir = startDir;\n while (true) {\n const candidate = path.join(dir, filename);\n if (fs.existsSync(candidate)) return candidate;\n const parent = path.dirname(dir);\n if (parent === dir) return null;\n dir = parent;\n }\n}\n\nfunction pluginEntryMatches(entry: NxPluginEntry): boolean {\n if (typeof entry === 'string') return entry === NX_PLUGIN_NAME;\n return entry.plugin === NX_PLUGIN_NAME;\n}\n\nfunction isPluginRegistered(nxJsonPath: string): boolean {\n const raw = fs.readFileSync(nxJsonPath, 'utf8');\n // webpieces-disable no-unmanaged-exceptions -- rethrow as InformAiError so global catch surfaces readable message to AI\n try {\n const parsed = JSON.parse(raw) as RawNxJson;\n const plugins = parsed.plugins ?? [];\n return plugins.some((entry: NxPluginEntry) => pluginEntryMatches(entry));\n } catch (err: unknown) {\n const error = toError(err);\n throw new InformAiError(`nx.json has invalid JSON — fix the file, then retry.\\nParse error: ${error.message}\\nFile: ${nxJsonPath}`);\n }\n}\n\nfunction nxBin(root: string): string {\n const local = path.join(root, 'node_modules', '.bin', 'nx');\n return fs.existsSync(local) ? local : 'nx';\n}\n\nfunction runNx(root: string, args: string[]): number {\n const result = spawnSync(nxBin(root), args, { stdio: 'inherit', cwd: root });\n if (typeof result.status === 'number') return result.status;\n return 1;\n}\n\nasync function runStandalone(cwd: string): Promise<number> {\n const loaded = loadWebpiecesRulesConfig(cwd);\n if (!loaded) {\n console.log('ℹ️ Not an Nx repo and no webpieces.config.json found — nothing to validate.');\n return 0;\n }\n console.log('ℹ️ Not an Nx repo — running standalone webpieces code validators.\\n');\n const options = toValidateCodeOptions(loaded.config);\n const result = await runValidateCode(options, cwd);\n return result.success ? 0 : 1;\n}\n\nfunction reportPluginMissing(): void {\n console.error('\\n❌ This is an Nx monorepo but the webpieces Nx plugin is not installed.\\n');\n console.error(' Install it so the validators run during CI:\\n');\n console.error(` nx add ${NX_PLUGIN_NAME}\\n`);\n console.error(' (or add it manually to the \"plugins\" array in nx.json).\\n');\n}\n\n// webpieces-disable no-unmanaged-exceptions -- global entry point for wp-ci CLI\nasync function main(): Promise<void> {\n try {\n const cwd = process.cwd();\n const passthrough = process.argv.slice(2);\n\n const nxJsonPath = findUp('nx.json', cwd);\n if (!nxJsonPath) {\n const code = await runStandalone(cwd);\n process.exit(code);\n }\n\n const root = path.dirname(nxJsonPath);\n if (!isPluginRegistered(nxJsonPath)) {\n reportPluginMissing();\n process.exit(1);\n }\n\n // Run the architecture + code validators first (this also runs the wiring guard,\n // which fails loudly if nx.json no longer wires validators into the build).\n if (fs.existsSync(path.join(root, 'architecture'))) {\n const validateCode = runNx(root, ['run', 'architecture:validate-complete']);\n if (validateCode !== 0) process.exit(validateCode);\n }\n\n // Then the Gradle-style ci composite (lint + build + test) across affected projects.\n const ciCode = runNx(root, ['affected', '--target=ci', ...passthrough]);\n process.exit(ciCode);\n } catch (err: unknown) {\n const error = toError(err);\n if (err instanceof InformAiError) {\n console.error(error.message);\n } else {\n console.error(`[wp-ci] unexpected error: ${error.message}`);\n }\n process.exit(1);\n }\n}\n\nvoid main();\n"]}