@webpieces/nx-webpieces-rules 0.4.846 → 0.4.848

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 (117) hide show
  1. package/README.md +54 -15
  2. package/executors.json +3 -68
  3. package/package.json +9 -9
  4. package/src/executors/help/executor.js +6 -4
  5. package/src/executors/help/executor.js.map +1 -1
  6. package/src/executors/validate-architecture-unchanged/executor.d.ts +8 -0
  7. package/src/executors/validate-architecture-unchanged/executor.js +20 -18
  8. package/src/executors/validate-architecture-unchanged/executor.js.map +1 -1
  9. package/src/executors/validate-code/executor.d.ts +2 -7
  10. package/src/executors/validate-code/executor.js +31 -2
  11. package/src/executors/validate-code/executor.js.map +1 -1
  12. package/src/executors/validate-code/schema.json +6 -281
  13. package/src/executors/validate-runtime-architecture/schema.json +1 -1
  14. package/src/executors/visualize/executor.js +7 -9
  15. package/src/executors/visualize/executor.js.map +1 -1
  16. package/src/executors/visualize/schema.json +1 -1
  17. package/src/executors/visualize-runtime/executor.js +8 -9
  18. package/src/executors/visualize-runtime/executor.js.map +1 -1
  19. package/src/executors/visualize-runtime/schema.json +1 -1
  20. package/src/lib/api-usage/wire-closure.d.ts +3 -3
  21. package/src/lib/api-usage/wire-closure.js +5 -5
  22. package/src/lib/api-usage/wire-closure.js.map +1 -1
  23. package/src/lib/api-usage/wire-suffix-entry.d.ts +5 -0
  24. package/src/lib/api-usage/wire-suffix-entry.js +10 -0
  25. package/src/lib/api-usage/wire-suffix-entry.js.map +1 -0
  26. package/src/lib/graph-loader.js +2 -2
  27. package/src/lib/graph-loader.js.map +1 -1
  28. package/src/lib/graph-visualizer.d.ts +1 -0
  29. package/src/lib/graph-visualizer.js +3 -0
  30. package/src/lib/graph-visualizer.js.map +1 -1
  31. package/src/lib/rule-gate.d.ts +1 -2
  32. package/src/lib/rule-gate.js +3 -4
  33. package/src/lib/rule-gate.js.map +1 -1
  34. package/src/lib/runtime-html-page.d.ts +35 -0
  35. package/src/lib/runtime-html-page.js +112 -0
  36. package/src/lib/runtime-html-page.js.map +1 -0
  37. package/src/lib/runtime-visualizer.d.ts +4 -38
  38. package/src/lib/runtime-visualizer.js +5 -108
  39. package/src/lib/runtime-visualizer.js.map +1 -1
  40. package/src/lib/saved-snapshot.d.ts +16 -0
  41. package/src/lib/saved-snapshot.js +80 -0
  42. package/src/lib/saved-snapshot.js.map +1 -0
  43. package/src/native-actions.d.ts +23 -0
  44. package/src/native-actions.js +69 -0
  45. package/src/native-actions.js.map +1 -0
  46. package/src/nx-policy-registry.d.ts +8 -0
  47. package/src/nx-policy-registry.js +40 -0
  48. package/src/nx-policy-registry.js.map +1 -0
  49. package/src/pack-build-runner.d.ts +6 -0
  50. package/src/pack-build-runner.js +46 -0
  51. package/src/pack-build-runner.js.map +1 -0
  52. package/src/plugin.js +8 -42
  53. package/src/plugin.js.map +1 -1
  54. package/src/rule-help.d.ts +3 -0
  55. package/src/rule-help.js +24 -0
  56. package/src/rule-help.js.map +1 -0
  57. package/src/rule-pack.js +5 -28
  58. package/src/rule-pack.js.map +1 -1
  59. package/src/rule-runtime.d.ts +5 -0
  60. package/src/rule-runtime.js +94 -0
  61. package/src/rule-runtime.js.map +1 -0
  62. package/src/runtime-targets.js +2 -2
  63. package/src/runtime-targets.js.map +1 -1
  64. package/src/validation-targets.js +21 -5
  65. package/src/validation-targets.js.map +1 -1
  66. package/src/executors/validate-catch-error-pattern/executor.d.ts +0 -4
  67. package/src/executors/validate-catch-error-pattern/executor.js +0 -8
  68. package/src/executors/validate-catch-error-pattern/executor.js.map +0 -1
  69. package/src/executors/validate-catch-error-pattern/schema.json +0 -24
  70. package/src/executors/validate-dtos/executor.d.ts +0 -4
  71. package/src/executors/validate-dtos/executor.js +0 -8
  72. package/src/executors/validate-dtos/executor.js.map +0 -1
  73. package/src/executors/validate-dtos/schema.json +0 -33
  74. package/src/executors/validate-modified-files/executor.d.ts +0 -4
  75. package/src/executors/validate-modified-files/executor.js +0 -8
  76. package/src/executors/validate-modified-files/executor.js.map +0 -1
  77. package/src/executors/validate-modified-files/schema.json +0 -25
  78. package/src/executors/validate-modified-methods/executor.d.ts +0 -4
  79. package/src/executors/validate-modified-methods/executor.js +0 -8
  80. package/src/executors/validate-modified-methods/executor.js.map +0 -1
  81. package/src/executors/validate-modified-methods/schema.json +0 -25
  82. package/src/executors/validate-new-methods/executor.d.ts +0 -4
  83. package/src/executors/validate-new-methods/executor.js +0 -8
  84. package/src/executors/validate-new-methods/executor.js.map +0 -1
  85. package/src/executors/validate-new-methods/schema.json +0 -25
  86. package/src/executors/validate-no-any-unknown/executor.d.ts +0 -4
  87. package/src/executors/validate-no-any-unknown/executor.js +0 -8
  88. package/src/executors/validate-no-any-unknown/executor.js.map +0 -1
  89. package/src/executors/validate-no-any-unknown/schema.json +0 -24
  90. package/src/executors/validate-no-destructure/executor.d.ts +0 -4
  91. package/src/executors/validate-no-destructure/executor.js +0 -8
  92. package/src/executors/validate-no-destructure/executor.js.map +0 -1
  93. package/src/executors/validate-no-destructure/schema.json +0 -24
  94. package/src/executors/validate-no-direct-api-resolver/executor.d.ts +0 -4
  95. package/src/executors/validate-no-direct-api-resolver/executor.js +0 -8
  96. package/src/executors/validate-no-direct-api-resolver/executor.js.map +0 -1
  97. package/src/executors/validate-no-direct-api-resolver/schema.json +0 -29
  98. package/src/executors/validate-no-implicit-any/executor.d.ts +0 -4
  99. package/src/executors/validate-no-implicit-any/executor.js +0 -8
  100. package/src/executors/validate-no-implicit-any/executor.js.map +0 -1
  101. package/src/executors/validate-no-implicit-any/schema.json +0 -24
  102. package/src/executors/validate-no-inline-types/executor.d.ts +0 -4
  103. package/src/executors/validate-no-inline-types/executor.js +0 -8
  104. package/src/executors/validate-no-inline-types/executor.js.map +0 -1
  105. package/src/executors/validate-no-inline-types/schema.json +0 -24
  106. package/src/executors/validate-no-unmanaged-exceptions/executor.d.ts +0 -4
  107. package/src/executors/validate-no-unmanaged-exceptions/executor.js +0 -8
  108. package/src/executors/validate-no-unmanaged-exceptions/executor.js.map +0 -1
  109. package/src/executors/validate-no-unmanaged-exceptions/schema.json +0 -24
  110. package/src/executors/validate-prisma-converters/executor.d.ts +0 -4
  111. package/src/executors/validate-prisma-converters/executor.js +0 -8
  112. package/src/executors/validate-prisma-converters/executor.js.map +0 -1
  113. package/src/executors/validate-prisma-converters/schema.json +0 -38
  114. package/src/executors/validate-return-types/executor.d.ts +0 -4
  115. package/src/executors/validate-return-types/executor.js +0 -8
  116. package/src/executors/validate-return-types/executor.js.map +0 -1
  117. package/src/executors/validate-return-types/schema.json +0 -24
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SavedSnapshot = void 0;
4
+ const rules_config_1 = require("@webpieces/rules-config");
5
+ const graph_loader_1 = require("./graph-loader");
6
+ const runtime_graph_io_1 = require("./runtime-graph-io");
7
+ const toError_1 = require("../toError");
8
+ /** Saved graphs have no reliable generation timestamp; file mtimes also change on checkout. */
9
+ class SavedSnapshot {
10
+ refresh() {
11
+ return 'Refresh explicitly: pnpm nx run architecture:generate';
12
+ }
13
+ message() {
14
+ return ('Saved generated snapshot. Viewing does not refresh architecture facts. ' +
15
+ 'Freshness unknown: no reliable generation provenance is recorded; current source has not been checked. ' +
16
+ this.refresh());
17
+ }
18
+ html() {
19
+ return (`<p class="hint"><strong>Saved generated snapshot.</strong> Viewing does not refresh architecture facts. ` +
20
+ `Freshness unknown; current source has not been checked. ` +
21
+ `Refresh explicitly: <code>pnpm nx run architecture:generate</code>.</p>`);
22
+ }
23
+ loadProjects(workspaceRoot, graphPath) {
24
+ const file = this.readArtifact(graphPath, () => (0, graph_loader_1.loadBlessedGraph)(workspaceRoot, graphPath));
25
+ if (file === null)
26
+ throw this.failure(`No saved graph found at ${graphPath}`);
27
+ this.validateProjects(file.projects, graphPath);
28
+ return file;
29
+ }
30
+ loadRuntime(workspaceRoot) {
31
+ if (!(0, runtime_graph_io_1.runtimeGraphFileExists)(workspaceRoot)) {
32
+ throw this.failure(`No saved graph found at ${runtime_graph_io_1.DEFAULT_RUNTIME_GRAPH_PATH}`);
33
+ }
34
+ const graph = this.readArtifact(runtime_graph_io_1.DEFAULT_RUNTIME_GRAPH_PATH, () => (0, runtime_graph_io_1.loadRuntimeGraph)(workspaceRoot));
35
+ this.validateRuntime(graph);
36
+ return graph;
37
+ }
38
+ readArtifact(graphPath, load) {
39
+ // eslint-disable-next-line @webpieces/no-unmanaged-exceptions -- saved JSON decoding boundary adds the artifact path and repair while preserving the cause
40
+ try {
41
+ return load();
42
+ }
43
+ catch (err) {
44
+ const error = (0, toError_1.toError)(err);
45
+ if (error instanceof rules_config_1.RuleFailError)
46
+ throw error;
47
+ throw this.failure(`Failed to read saved graph at ${graphPath}: ${error.message}`, error);
48
+ }
49
+ }
50
+ failure(message, cause) {
51
+ return new rules_config_1.RuleFailError('saved-architecture-snapshot', message, undefined, undefined, [new rules_config_1.Option(this.refresh(), true)], undefined, cause);
52
+ }
53
+ // webpieces-disable no-any-unknown -- saved JSON is untrusted until its shape has been checked
54
+ isMap(value) {
55
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
56
+ }
57
+ validateProjects(graph, graphPath) {
58
+ if (!this.isMap(graph) ||
59
+ Object.values(graph).some((entry) => !this.isMap(entry) ||
60
+ !Number.isFinite(entry.level) ||
61
+ !Array.isArray(entry.dependsOn) ||
62
+ entry.dependsOn.some((dep) => typeof dep !== 'string'))) {
63
+ throw this.failure(`Unusable saved project graph at ${graphPath}: expected projects with numeric level and string dependsOn arrays`);
64
+ }
65
+ }
66
+ validateRuntime(graph) {
67
+ if (graph === null ||
68
+ !this.isMap(graph) ||
69
+ !this.isMap(graph.services) ||
70
+ !this.isMap(graph.apis) ||
71
+ !this.isMap(graph.queues) ||
72
+ !Array.isArray(graph.runtimeEdges) ||
73
+ !Array.isArray(graph.unresolvedUses) ||
74
+ !Array.isArray(graph.triggers)) {
75
+ throw this.failure(`Unusable saved runtime graph at ${runtime_graph_io_1.DEFAULT_RUNTIME_GRAPH_PATH}: expected services, apis, queues and runtimeEdges, unresolvedUses, triggers arrays`);
76
+ }
77
+ }
78
+ }
79
+ exports.SavedSnapshot = SavedSnapshot;
80
+ //# sourceMappingURL=saved-snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"saved-snapshot.js","sourceRoot":"","sources":["../../../../../../packages/tooling/nx-webpieces-rules/src/lib/saved-snapshot.ts"],"names":[],"mappings":"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","sourcesContent":["import { RuleFailError, Option } from '@webpieces/rules-config';\nimport type { EnhancedGraph } from './graph-sorter';\nimport type { RuntimeGraph } from './runtime-graph-model';\nimport { DependenciesFile, loadBlessedGraph } from './graph-loader';\nimport {\n DEFAULT_RUNTIME_GRAPH_PATH,\n loadRuntimeGraph,\n runtimeGraphFileExists,\n} from './runtime-graph-io';\nimport { toError } from '../toError';\n\n/** Saved graphs have no reliable generation timestamp; file mtimes also change on checkout. */\nexport class SavedSnapshot {\n refresh(): string {\n return 'Refresh explicitly: pnpm nx run architecture:generate';\n }\n\n message(): string {\n return (\n 'Saved generated snapshot. Viewing does not refresh architecture facts. ' +\n 'Freshness unknown: no reliable generation provenance is recorded; current source has not been checked. ' +\n this.refresh()\n );\n }\n\n html(): string {\n return (\n `<p class=\"hint\"><strong>Saved generated snapshot.</strong> Viewing does not refresh architecture facts. ` +\n `Freshness unknown; current source has not been checked. ` +\n `Refresh explicitly: <code>pnpm nx run architecture:generate</code>.</p>`\n );\n }\n\n loadProjects(workspaceRoot: string, graphPath: string): DependenciesFile {\n const file = this.readArtifact(graphPath, () => loadBlessedGraph(workspaceRoot, graphPath));\n if (file === null) throw this.failure(`No saved graph found at ${graphPath}`);\n this.validateProjects(file.projects, graphPath);\n return file;\n }\n\n loadRuntime(workspaceRoot: string): RuntimeGraph {\n if (!runtimeGraphFileExists(workspaceRoot)) {\n throw this.failure(`No saved graph found at ${DEFAULT_RUNTIME_GRAPH_PATH}`);\n }\n const graph = this.readArtifact(DEFAULT_RUNTIME_GRAPH_PATH, () =>\n loadRuntimeGraph(workspaceRoot),\n );\n this.validateRuntime(graph);\n return graph;\n }\n\n private readArtifact<T>(graphPath: string, load: () => T): T {\n // eslint-disable-next-line @webpieces/no-unmanaged-exceptions -- saved JSON decoding boundary adds the artifact path and repair while preserving the cause\n try {\n return load();\n } catch (err: unknown) {\n const error = toError(err);\n if (error instanceof RuleFailError) throw error;\n throw this.failure(\n `Failed to read saved graph at ${graphPath}: ${error.message}`,\n error,\n );\n }\n }\n\n private failure(message: string, cause?: Error): RuleFailError {\n return new RuleFailError(\n 'saved-architecture-snapshot',\n message,\n undefined,\n undefined,\n [new Option(this.refresh(), true)],\n undefined,\n cause,\n );\n }\n\n // webpieces-disable no-any-unknown -- saved JSON is untrusted until its shape has been checked\n private isMap(value: unknown): boolean {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n }\n\n validateProjects(graph: EnhancedGraph, graphPath: string): void {\n if (\n !this.isMap(graph) ||\n Object.values(graph).some(\n (entry) =>\n !this.isMap(entry) ||\n !Number.isFinite(entry.level) ||\n !Array.isArray(entry.dependsOn) ||\n entry.dependsOn.some((dep) => typeof dep !== 'string'),\n )\n ) {\n throw this.failure(\n `Unusable saved project graph at ${graphPath}: expected projects with numeric level and string dependsOn arrays`,\n );\n }\n }\n\n validateRuntime(graph: RuntimeGraph | null): asserts graph is RuntimeGraph {\n if (\n graph === null ||\n !this.isMap(graph) ||\n !this.isMap(graph.services) ||\n !this.isMap(graph.apis) ||\n !this.isMap(graph.queues) ||\n !Array.isArray(graph.runtimeEdges) ||\n !Array.isArray(graph.unresolvedUses) ||\n !Array.isArray(graph.triggers)\n ) {\n throw this.failure(\n `Unusable saved runtime graph at ${DEFAULT_RUNTIME_GRAPH_PATH}: expected services, apis, queues and runtimeEdges, unresolvedUses, triggers arrays`,\n );\n }\n }\n}\n"]}
@@ -0,0 +1,23 @@
1
+ import type { ExecutorContext } from '@nx/devkit';
2
+ import { BuildPolicyResult } from '@webpieces/rules-sdk';
3
+ /** Native owner actions are shared where one existing scan enforces several configured policies. */
4
+ export declare class NativeAction {
5
+ readonly name: string;
6
+ readonly scope: 'workspace' | 'projects';
7
+ readonly execute: (context: ExecutorContext) => Promise<BuildPolicyResult>;
8
+ constructor(name: string, scope: 'workspace' | 'projects', execute: (context: ExecutorContext) => Promise<BuildPolicyResult>);
9
+ }
10
+ /** Metadata holds lazy imports only; importing the pack never imports an executor or the Nx runtime. */
11
+ export declare class NativeActions {
12
+ readonly fileCycles: NativeAction;
13
+ readonly runtime: NativeAction;
14
+ readonly wiring: NativeAction;
15
+ readonly design: NativeAction;
16
+ readonly architecture: NativeAction;
17
+ readonly cycles: NativeAction;
18
+ readonly packageJson: NativeAction;
19
+ readonly versions: NativeAction;
20
+ readonly eslintSync: NativeAction;
21
+ readonly tsInSrc: NativeAction;
22
+ readonly graphPolicies: NativeAction;
23
+ }
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.NativeActions = exports.NativeAction = void 0;
37
+ const rules_sdk_1 = require("@webpieces/rules-sdk");
38
+ /** Native owner actions are shared where one existing scan enforces several configured policies. */
39
+ class NativeAction {
40
+ name;
41
+ scope;
42
+ execute;
43
+ constructor(name, scope, execute) {
44
+ this.name = name;
45
+ this.scope = scope;
46
+ this.execute = execute;
47
+ }
48
+ }
49
+ exports.NativeAction = NativeAction;
50
+ /** Metadata holds lazy imports only; importing the pack never imports an executor or the Nx runtime. */
51
+ class NativeActions {
52
+ fileCycles = new NativeAction('file-cycles', 'projects', async (context) => (await Promise.resolve().then(() => __importStar(require('./executors/validate-no-file-import-cycles/executor')))).default({}, context));
53
+ runtime = new NativeAction('runtime', 'workspace', async (context) => (await Promise.resolve().then(() => __importStar(require('./executors/validate-runtime-architecture/executor')))).default({}, context));
54
+ wiring = new NativeAction('wiring', 'workspace', async (context) => (await Promise.resolve().then(() => __importStar(require('./executors/validate-nx-wiring/executor')))).default({}, context));
55
+ design = new NativeAction('design', 'projects', async (context) => (await Promise.resolve().then(() => __importStar(require('./executors/di-graph-generate/executor')))).default({}, context));
56
+ architecture = new NativeAction('architecture', 'workspace', async (context) => (await Promise.resolve().then(() => __importStar(require('./executors/validate-architecture-unchanged/executor')))).default({}, context));
57
+ cycles = new NativeAction('cycles', 'workspace', async (context) => (await Promise.resolve().then(() => __importStar(require('./executors/validate-no-architecture-cycles/executor')))).default({}, context));
58
+ packageJson = new NativeAction('package-json', 'workspace', async (context) => (await Promise.resolve().then(() => __importStar(require('./executors/validate-packagejson/executor')))).default({}, context));
59
+ versions = new NativeAction('versions', 'workspace', async (context) => (await Promise.resolve().then(() => __importStar(require('./executors/validate-versions-locked/executor')))).default({}, context));
60
+ eslintSync = new NativeAction('eslint-sync', 'workspace', async (context) => (await Promise.resolve().then(() => __importStar(require('./executors/validate-eslint-sync/executor')))).default({}, context));
61
+ tsInSrc = new NativeAction('ts-in-src', 'workspace', async (context) => (await Promise.resolve().then(() => __importStar(require('./executors/validate-ts-in-src/executor')))).default({}, context));
62
+ graphPolicies = new NativeAction('graph-policies', 'workspace', async (context) => {
63
+ const graph = await Promise.resolve().then(() => __importStar(require('./executors/validate-architecture-unchanged/executor')));
64
+ await new graph.CurrentGraphBuilder().build(context.root);
65
+ return new rules_sdk_1.BuildPolicyResult(true);
66
+ });
67
+ }
68
+ exports.NativeActions = NativeActions;
69
+ //# sourceMappingURL=native-actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-actions.js","sourceRoot":"","sources":["../../../../../packages/tooling/nx-webpieces-rules/src/native-actions.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExecutorContext } from '@nx/devkit';\nimport { BuildPolicyResult } from '@webpieces/rules-sdk';\n\n/** Native owner actions are shared where one existing scan enforces several configured policies. */\nexport class NativeAction {\n constructor(\n readonly name: string,\n readonly scope: 'workspace' | 'projects',\n readonly execute: (context: ExecutorContext) => Promise<BuildPolicyResult>,\n ) {}\n}\n\n/** Metadata holds lazy imports only; importing the pack never imports an executor or the Nx runtime. */\nexport class NativeActions {\n readonly fileCycles = new NativeAction(\n 'file-cycles',\n 'projects',\n async (context: ExecutorContext) =>\n (await import('./executors/validate-no-file-import-cycles/executor')).default(\n {},\n context,\n ),\n );\n readonly runtime = new NativeAction('runtime', 'workspace', async (context: ExecutorContext) =>\n (await import('./executors/validate-runtime-architecture/executor')).default({}, context),\n );\n readonly wiring = new NativeAction('wiring', 'workspace', async (context: ExecutorContext) =>\n (await import('./executors/validate-nx-wiring/executor')).default({}, context),\n );\n readonly design = new NativeAction('design', 'projects', async (context: ExecutorContext) =>\n (await import('./executors/di-graph-generate/executor')).default({}, context),\n );\n readonly architecture = new NativeAction(\n 'architecture',\n 'workspace',\n async (context: ExecutorContext) =>\n (await import('./executors/validate-architecture-unchanged/executor')).default(\n {},\n context,\n ),\n );\n readonly cycles = new NativeAction('cycles', 'workspace', async (context: ExecutorContext) =>\n (await import('./executors/validate-no-architecture-cycles/executor')).default({}, context),\n );\n readonly packageJson = new NativeAction(\n 'package-json',\n 'workspace',\n async (context: ExecutorContext) =>\n (await import('./executors/validate-packagejson/executor')).default({}, context),\n );\n readonly versions = new NativeAction(\n 'versions',\n 'workspace',\n async (context: ExecutorContext) =>\n (await import('./executors/validate-versions-locked/executor')).default({}, context),\n );\n readonly eslintSync = new NativeAction(\n 'eslint-sync',\n 'workspace',\n async (context: ExecutorContext) =>\n (await import('./executors/validate-eslint-sync/executor')).default({}, context),\n );\n readonly tsInSrc = new NativeAction(\n 'ts-in-src',\n 'workspace',\n async (context: ExecutorContext) =>\n (await import('./executors/validate-ts-in-src/executor')).default({}, context),\n );\n readonly graphPolicies = new NativeAction(\n 'graph-policies',\n 'workspace',\n async (context: ExecutorContext) => {\n const graph = await import('./executors/validate-architecture-unchanged/executor');\n await new graph.CurrentGraphBuilder().build(context.root);\n return new BuildPolicyResult(true);\n },\n );\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import { OwnedRuleDefinition } from '@webpieces/rules-sdk';
2
+ import { NativeAction } from './native-actions';
3
+ export declare class NxPolicy {
4
+ readonly definition: OwnedRuleDefinition;
5
+ readonly action: NativeAction;
6
+ constructor(definition: OwnedRuleDefinition, action: NativeAction);
7
+ }
8
+ export declare const NX_POLICIES: readonly NxPolicy[];
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NX_POLICIES = exports.NxPolicy = void 0;
4
+ const rule_help_1 = require("./rule-help");
5
+ const rule_settings_1 = require("./rule-settings");
6
+ const rules_sdk_1 = require("@webpieces/rules-sdk");
7
+ const rule_configs_1 = require("./configs/rule-configs");
8
+ const no_root_union_config_1 = require("./configs/no-root-union-config");
9
+ const api_doc_rules_config_1 = require("./configs/api-doc-rules-config");
10
+ const tag_truth_configs_1 = require("./configs/tag-truth-configs");
11
+ const native_actions_1 = require("./native-actions");
12
+ class NxPolicy {
13
+ definition;
14
+ action;
15
+ constructor(definition, action) {
16
+ this.definition = definition;
17
+ this.action = action;
18
+ }
19
+ }
20
+ exports.NxPolicy = NxPolicy;
21
+ const actions = new native_actions_1.NativeActions();
22
+ exports.NX_POLICIES = [
23
+ new NxPolicy(new rules_sdk_1.OwnedRuleDefinition('no-file-import-cycles', rule_configs_1.NoFileImportCyclesConfig.SCHEMA, rules_sdk_1.RULE_SCHEMA_API_VERSION, rule_settings_1.optionalTuning['no-file-import-cycles'], rule_settings_1.recommendedSeeds['no-file-import-cycles'], 'rules', rule_help_1.ruleHelp['no-file-import-cycles']), actions.fileCycles),
24
+ new NxPolicy(new rules_sdk_1.OwnedRuleDefinition('runtime-architecture', rule_configs_1.RuntimeArchitectureConfig.SCHEMA, rules_sdk_1.RULE_SCHEMA_API_VERSION, rule_settings_1.optionalTuning['runtime-architecture'], rule_settings_1.recommendedSeeds['runtime-architecture'], 'rules', rule_help_1.ruleHelp['runtime-architecture']), actions.runtime),
25
+ new NxPolicy(new rules_sdk_1.OwnedRuleDefinition('nx-wiring', rule_configs_1.NxWiringConfig.SCHEMA, rules_sdk_1.RULE_SCHEMA_API_VERSION, rule_settings_1.optionalTuning['nx-wiring'], rule_settings_1.recommendedSeeds['nx-wiring'], 'rules', rule_help_1.ruleHelp['nx-wiring']), actions.wiring),
26
+ new NxPolicy(new rules_sdk_1.OwnedRuleDefinition('di-graph', rule_configs_1.DiGraphConfig.SCHEMA, rules_sdk_1.RULE_SCHEMA_API_VERSION, rule_settings_1.optionalTuning['di-graph'], rule_settings_1.recommendedSeeds['di-graph'], 'rules', rule_help_1.ruleHelp['di-graph']), actions.design),
27
+ new NxPolicy(new rules_sdk_1.OwnedRuleDefinition('missing-design-annotation', rule_configs_1.MissingDesignAnnotationConfig.SCHEMA, rules_sdk_1.RULE_SCHEMA_API_VERSION, rule_settings_1.optionalTuning['missing-design-annotation'], rule_settings_1.recommendedSeeds['missing-design-annotation'], 'rules', rule_help_1.ruleHelp['missing-design-annotation']), actions.design),
28
+ new NxPolicy(new rules_sdk_1.OwnedRuleDefinition('validate-architecture-unchanged', rule_configs_1.ValidateArchitectureUnchangedConfig.SCHEMA, rules_sdk_1.RULE_SCHEMA_API_VERSION, rule_settings_1.optionalTuning['validate-architecture-unchanged'], rule_settings_1.recommendedSeeds['validate-architecture-unchanged'], 'rules', rule_help_1.ruleHelp['validate-architecture-unchanged']), actions.architecture),
29
+ new NxPolicy(new rules_sdk_1.OwnedRuleDefinition('validate-no-architecture-cycles', rule_configs_1.ValidateNoArchitectureCyclesConfig.SCHEMA, rules_sdk_1.RULE_SCHEMA_API_VERSION, rule_settings_1.optionalTuning['validate-no-architecture-cycles'], rule_settings_1.recommendedSeeds['validate-no-architecture-cycles'], 'rules', rule_help_1.ruleHelp['validate-no-architecture-cycles']), actions.cycles),
30
+ new NxPolicy(new rules_sdk_1.OwnedRuleDefinition('validate-packagejson', rule_configs_1.ValidatePackageJsonConfig.SCHEMA, rules_sdk_1.RULE_SCHEMA_API_VERSION, rule_settings_1.optionalTuning['validate-packagejson'], rule_settings_1.recommendedSeeds['validate-packagejson'], 'rules', rule_help_1.ruleHelp['validate-packagejson']), actions.packageJson),
31
+ new NxPolicy(new rules_sdk_1.OwnedRuleDefinition('validate-versions-locked', rule_configs_1.ValidateVersionsLockedConfig.SCHEMA, rules_sdk_1.RULE_SCHEMA_API_VERSION, rule_settings_1.optionalTuning['validate-versions-locked'], rule_settings_1.recommendedSeeds['validate-versions-locked'], 'rules', rule_help_1.ruleHelp['validate-versions-locked']), actions.versions),
32
+ new NxPolicy(new rules_sdk_1.OwnedRuleDefinition('validate-eslint-sync', rule_configs_1.ValidateEslintSyncConfig.SCHEMA, rules_sdk_1.RULE_SCHEMA_API_VERSION, rule_settings_1.optionalTuning['validate-eslint-sync'], rule_settings_1.recommendedSeeds['validate-eslint-sync'], 'rules', rule_help_1.ruleHelp['validate-eslint-sync']), actions.eslintSync),
33
+ new NxPolicy(new rules_sdk_1.OwnedRuleDefinition('no-root-union-api-type', no_root_union_config_1.NoRootUnionApiTypeConfig.SCHEMA, rules_sdk_1.RULE_SCHEMA_API_VERSION, rule_settings_1.optionalTuning['no-root-union-api-type'], rule_settings_1.recommendedSeeds['no-root-union-api-type'], 'rules', rule_help_1.ruleHelp['no-root-union-api-type']), actions.graphPolicies),
34
+ new NxPolicy(new rules_sdk_1.OwnedRuleDefinition('api-rules-for-openapi', api_doc_rules_config_1.ApiRulesForOpenApiConfig.SCHEMA, rules_sdk_1.RULE_SCHEMA_API_VERSION, rule_settings_1.optionalTuning['api-rules-for-openapi'], rule_settings_1.recommendedSeeds['api-rules-for-openapi'], 'rules', rule_help_1.ruleHelp['api-rules-for-openapi']), actions.graphPolicies),
35
+ new NxPolicy(new rules_sdk_1.OwnedRuleDefinition('api-rules-for-mcp', api_doc_rules_config_1.ApiRulesForMcpConfig.SCHEMA, rules_sdk_1.RULE_SCHEMA_API_VERSION, rule_settings_1.optionalTuning['api-rules-for-mcp'], rule_settings_1.recommendedSeeds['api-rules-for-mcp'], 'rules', rule_help_1.ruleHelp['api-rules-for-mcp']), actions.graphPolicies),
36
+ new NxPolicy(new rules_sdk_1.OwnedRuleDefinition('api-lib-dependencies', tag_truth_configs_1.ApiLibDependenciesConfig.SCHEMA, rules_sdk_1.RULE_SCHEMA_API_VERSION, rule_settings_1.optionalTuning['api-lib-dependencies'], rule_settings_1.recommendedSeeds['api-lib-dependencies'], 'rules', rule_help_1.ruleHelp['api-lib-dependencies']), actions.graphPolicies),
37
+ new NxPolicy(new rules_sdk_1.OwnedRuleDefinition('api-lib-path', tag_truth_configs_1.ApiLibPathConfig.SCHEMA, rules_sdk_1.RULE_SCHEMA_API_VERSION, rule_settings_1.optionalTuning['api-lib-path'], rule_settings_1.recommendedSeeds['api-lib-path'], 'rules', rule_help_1.ruleHelp['api-lib-path']), actions.graphPolicies),
38
+ new NxPolicy(new rules_sdk_1.OwnedRuleDefinition('framework-folder', tag_truth_configs_1.FrameworkFolderConfig.SCHEMA, rules_sdk_1.RULE_SCHEMA_API_VERSION, rule_settings_1.optionalTuning['framework-folder'], rule_settings_1.recommendedSeeds['framework-folder'], 'rules', rule_help_1.ruleHelp['framework-folder']), actions.graphPolicies),
39
+ ];
40
+ //# sourceMappingURL=nx-policy-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nx-policy-registry.js","sourceRoot":"","sources":["../../../../../packages/tooling/nx-webpieces-rules/src/nx-policy-registry.ts"],"names":[],"mappings":"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","sourcesContent":["import { ruleHelp } from './rule-help';\nimport { optionalTuning, recommendedSeeds } from './rule-settings';\nimport { OwnedRuleDefinition, RULE_SCHEMA_API_VERSION } from '@webpieces/rules-sdk';\nimport {\n NoFileImportCyclesConfig,\n RuntimeArchitectureConfig,\n NxWiringConfig,\n DiGraphConfig,\n MissingDesignAnnotationConfig,\n ValidateArchitectureUnchangedConfig,\n ValidateNoArchitectureCyclesConfig,\n ValidatePackageJsonConfig,\n ValidateVersionsLockedConfig,\n ValidateEslintSyncConfig,\n} from './configs/rule-configs';\nimport { NoRootUnionApiTypeConfig } from './configs/no-root-union-config';\nimport { ApiRulesForOpenApiConfig, ApiRulesForMcpConfig } from './configs/api-doc-rules-config';\nimport {\n ApiLibDependenciesConfig,\n ApiLibPathConfig,\n FrameworkFolderConfig,\n} from './configs/tag-truth-configs';\nimport { NativeActions, NativeAction } from './native-actions';\n\nexport class NxPolicy {\n constructor(\n readonly definition: OwnedRuleDefinition,\n readonly action: NativeAction,\n ) {}\n}\n\nconst actions = new NativeActions();\nexport const NX_POLICIES: readonly NxPolicy[] = [\n new NxPolicy(\n new OwnedRuleDefinition(\n 'no-file-import-cycles',\n NoFileImportCyclesConfig.SCHEMA,\n RULE_SCHEMA_API_VERSION,\n optionalTuning['no-file-import-cycles'],\n recommendedSeeds['no-file-import-cycles'],\n 'rules',\n ruleHelp['no-file-import-cycles'],\n ),\n actions.fileCycles,\n ),\n new NxPolicy(\n new OwnedRuleDefinition(\n 'runtime-architecture',\n RuntimeArchitectureConfig.SCHEMA,\n RULE_SCHEMA_API_VERSION,\n optionalTuning['runtime-architecture'],\n recommendedSeeds['runtime-architecture'],\n 'rules',\n ruleHelp['runtime-architecture'],\n ),\n actions.runtime,\n ),\n new NxPolicy(\n new OwnedRuleDefinition(\n 'nx-wiring',\n NxWiringConfig.SCHEMA,\n RULE_SCHEMA_API_VERSION,\n optionalTuning['nx-wiring'],\n recommendedSeeds['nx-wiring'],\n 'rules',\n ruleHelp['nx-wiring'],\n ),\n actions.wiring,\n ),\n new NxPolicy(\n new OwnedRuleDefinition(\n 'di-graph',\n DiGraphConfig.SCHEMA,\n RULE_SCHEMA_API_VERSION,\n optionalTuning['di-graph'],\n recommendedSeeds['di-graph'],\n 'rules',\n ruleHelp['di-graph'],\n ),\n actions.design,\n ),\n new NxPolicy(\n new OwnedRuleDefinition(\n 'missing-design-annotation',\n MissingDesignAnnotationConfig.SCHEMA,\n RULE_SCHEMA_API_VERSION,\n optionalTuning['missing-design-annotation'],\n recommendedSeeds['missing-design-annotation'],\n 'rules',\n ruleHelp['missing-design-annotation'],\n ),\n actions.design,\n ),\n new NxPolicy(\n new OwnedRuleDefinition(\n 'validate-architecture-unchanged',\n ValidateArchitectureUnchangedConfig.SCHEMA,\n RULE_SCHEMA_API_VERSION,\n optionalTuning['validate-architecture-unchanged'],\n recommendedSeeds['validate-architecture-unchanged'],\n 'rules',\n ruleHelp['validate-architecture-unchanged'],\n ),\n actions.architecture,\n ),\n new NxPolicy(\n new OwnedRuleDefinition(\n 'validate-no-architecture-cycles',\n ValidateNoArchitectureCyclesConfig.SCHEMA,\n RULE_SCHEMA_API_VERSION,\n optionalTuning['validate-no-architecture-cycles'],\n recommendedSeeds['validate-no-architecture-cycles'],\n 'rules',\n ruleHelp['validate-no-architecture-cycles'],\n ),\n actions.cycles,\n ),\n new NxPolicy(\n new OwnedRuleDefinition(\n 'validate-packagejson',\n ValidatePackageJsonConfig.SCHEMA,\n RULE_SCHEMA_API_VERSION,\n optionalTuning['validate-packagejson'],\n recommendedSeeds['validate-packagejson'],\n 'rules',\n ruleHelp['validate-packagejson'],\n ),\n actions.packageJson,\n ),\n new NxPolicy(\n new OwnedRuleDefinition(\n 'validate-versions-locked',\n ValidateVersionsLockedConfig.SCHEMA,\n RULE_SCHEMA_API_VERSION,\n optionalTuning['validate-versions-locked'],\n recommendedSeeds['validate-versions-locked'],\n 'rules',\n ruleHelp['validate-versions-locked'],\n ),\n actions.versions,\n ),\n new NxPolicy(\n new OwnedRuleDefinition(\n 'validate-eslint-sync',\n ValidateEslintSyncConfig.SCHEMA,\n RULE_SCHEMA_API_VERSION,\n optionalTuning['validate-eslint-sync'],\n recommendedSeeds['validate-eslint-sync'],\n 'rules',\n ruleHelp['validate-eslint-sync'],\n ),\n actions.eslintSync,\n ),\n new NxPolicy(\n new OwnedRuleDefinition(\n 'no-root-union-api-type',\n NoRootUnionApiTypeConfig.SCHEMA,\n RULE_SCHEMA_API_VERSION,\n optionalTuning['no-root-union-api-type'],\n recommendedSeeds['no-root-union-api-type'],\n 'rules',\n ruleHelp['no-root-union-api-type'],\n ),\n actions.graphPolicies,\n ),\n new NxPolicy(\n new OwnedRuleDefinition(\n 'api-rules-for-openapi',\n ApiRulesForOpenApiConfig.SCHEMA,\n RULE_SCHEMA_API_VERSION,\n optionalTuning['api-rules-for-openapi'],\n recommendedSeeds['api-rules-for-openapi'],\n 'rules',\n ruleHelp['api-rules-for-openapi'],\n ),\n actions.graphPolicies,\n ),\n new NxPolicy(\n new OwnedRuleDefinition(\n 'api-rules-for-mcp',\n ApiRulesForMcpConfig.SCHEMA,\n RULE_SCHEMA_API_VERSION,\n optionalTuning['api-rules-for-mcp'],\n recommendedSeeds['api-rules-for-mcp'],\n 'rules',\n ruleHelp['api-rules-for-mcp'],\n ),\n actions.graphPolicies,\n ),\n new NxPolicy(\n new OwnedRuleDefinition(\n 'api-lib-dependencies',\n ApiLibDependenciesConfig.SCHEMA,\n RULE_SCHEMA_API_VERSION,\n optionalTuning['api-lib-dependencies'],\n recommendedSeeds['api-lib-dependencies'],\n 'rules',\n ruleHelp['api-lib-dependencies'],\n ),\n actions.graphPolicies,\n ),\n new NxPolicy(\n new OwnedRuleDefinition(\n 'api-lib-path',\n ApiLibPathConfig.SCHEMA,\n RULE_SCHEMA_API_VERSION,\n optionalTuning['api-lib-path'],\n recommendedSeeds['api-lib-path'],\n 'rules',\n ruleHelp['api-lib-path'],\n ),\n actions.graphPolicies,\n ),\n new NxPolicy(\n new OwnedRuleDefinition(\n 'framework-folder',\n FrameworkFolderConfig.SCHEMA,\n RULE_SCHEMA_API_VERSION,\n optionalTuning['framework-folder'],\n recommendedSeeds['framework-folder'],\n 'rules',\n ruleHelp['framework-folder'],\n ),\n actions.graphPolicies,\n ),\n];\n"]}
@@ -0,0 +1,6 @@
1
+ import { BuildPolicyResult } from '@webpieces/rules-sdk';
2
+ import { LoadedConfig } from '@webpieces/rules-config';
3
+ /** Native checks retain their targets; one generic target runs other declared build providers. */
4
+ export declare class PackBuildRunner {
5
+ run(root: string, loaded: LoadedConfig): Promise<BuildPolicyResult>;
6
+ }
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PackBuildRunner = void 0;
4
+ const rules_sdk_1 = require("@webpieces/rules-sdk");
5
+ const rules_config_1 = require("@webpieces/rules-config");
6
+ const toError_1 = require("./toError");
7
+ const rule_pack_1 = require("./rule-pack");
8
+ class BuildActivation extends rules_config_1.AbstractRule {
9
+ }
10
+ /** Native checks retain their targets; one generic target runs other declared build providers. */
11
+ class PackBuildRunner {
12
+ async run(root, loaded) {
13
+ const modules = new rules_config_1.RuleRuntimeModules(), loader = new rules_config_1.NodeRuleRuntimeModuleLoader(root);
14
+ let success = true;
15
+ const groups = modules
16
+ .groups(loaded.ruleRegistry, 'build')
17
+ .filter((group) => group.providerPack !== rule_pack_1.rulePackManifest.packageName);
18
+ for (const group of groups) {
19
+ const request = modules.request(root, loaded.rulesConfig, group);
20
+ const exports = modules.load(group, loaded.ruleRegistry.manifestModules, loader);
21
+ const checks = await modules.createBuildPolicies(exports, request);
22
+ for (const check of checks) {
23
+ const activation = new BuildActivation(request.configs[check.configKey], check.name, check.configKey);
24
+ if (!activation.shouldRun() || !check.shouldRun())
25
+ continue;
26
+ // eslint-disable-next-line @webpieces/no-unmanaged-exceptions -- isolate checks and preserve human-facing policy failures
27
+ try {
28
+ const result = await check.run(root);
29
+ if (!result || result.success !== true)
30
+ success = false;
31
+ // webpieces-disable no-any-unknown -- external JSON or runtime exports are validated before policy execution
32
+ }
33
+ catch (err) {
34
+ const error = (0, toError_1.toError)(err);
35
+ console.error(error instanceof rules_config_1.RuleFailError
36
+ ? (0, rules_config_1.renderRuleFailForHuman)(error)
37
+ : `Build policy ${check.name} failed: ${error.message}`);
38
+ success = false;
39
+ }
40
+ }
41
+ }
42
+ return new rules_sdk_1.BuildPolicyResult(success);
43
+ }
44
+ }
45
+ exports.PackBuildRunner = PackBuildRunner;
46
+ //# sourceMappingURL=pack-build-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack-build-runner.js","sourceRoot":"","sources":["../../../../../packages/tooling/nx-webpieces-rules/src/pack-build-runner.ts"],"names":[],"mappings":";;;AAAA,oDAAuF;AACvF,0DAQiC;AACjC,uCAAoC;AACpC,2CAA+C;AAE/C,MAAM,eAAgB,SAAQ,2BAA4B;CAAG;AAE7D,kGAAkG;AAClG,MAAa,eAAe;IACxB,KAAK,CAAC,GAAG,CAAC,IAAY,EAAE,MAAoB;QACxC,MAAM,OAAO,GAAG,IAAI,iCAAkB,EAAE,EACpC,MAAM,GAAG,IAAI,0CAA2B,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,MAAM,MAAM,GAAG,OAAO;aACjB,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC;aACpC,MAAM,CACH,CAAC,KAA+B,EAAE,EAAE,CAChC,KAAK,CAAC,YAAY,KAAK,4BAAgB,CAAC,WAAW,CAC1D,CAAC;QACN,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAC3B,IAAI,EACJ,MAAM,CAAC,WAA2C,EAClD,KAAK,CACR,CAAC;YACF,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;YACjF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACnE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBACzB,MAAM,UAAU,GAAG,IAAI,eAAe,CAClC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAmB,EAClD,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,SAAS,CAClB,CAAC;gBACF,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;oBAAE,SAAS;gBAC5D,0HAA0H;gBAC1H,IAAI,CAAC;oBACD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACrC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI;wBAAE,OAAO,GAAG,KAAK,CAAC;oBAC5D,6GAA6G;gBAC7G,CAAC;gBAAC,OAAO,GAAY,EAAE,CAAC;oBACpB,MAAM,KAAK,GAAG,IAAA,iBAAO,EAAC,GAAG,CAAC,CAAC;oBAC3B,OAAO,CAAC,KAAK,CACT,KAAK,YAAY,4BAAa;wBAC1B,CAAC,CAAC,IAAA,qCAAsB,EAAC,KAAK,CAAC;wBAC/B,CAAC,CAAC,gBAAgB,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC,OAAO,EAAE,CAC9D,CAAC;oBACF,OAAO,GAAG,KAAK,CAAC;gBACpB,CAAC;YACL,CAAC;QACL,CAAC;QACD,OAAO,IAAI,6BAAiB,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;CACJ;AA5CD,0CA4CC","sourcesContent":["import { BaseRuleConfig, ConfigObject, BuildPolicyResult } from '@webpieces/rules-sdk';\nimport {\n AbstractRule,\n LoadedConfig,\n NodeRuleRuntimeModuleLoader,\n RuleRuntimeModules,\n RuntimeContributionGroup,\n renderRuleFailForHuman,\n RuleFailError,\n} from '@webpieces/rules-config';\nimport { toError } from './toError';\nimport { rulePackManifest } from './rule-pack';\n\nclass BuildActivation extends AbstractRule<BaseRuleConfig> {}\n\n/** Native checks retain their targets; one generic target runs other declared build providers. */\nexport class PackBuildRunner {\n async run(root: string, loaded: LoadedConfig): Promise<BuildPolicyResult> {\n const modules = new RuleRuntimeModules(),\n loader = new NodeRuleRuntimeModuleLoader(root);\n let success = true;\n const groups = modules\n .groups(loaded.ruleRegistry, 'build')\n .filter(\n (group: RuntimeContributionGroup) =>\n group.providerPack !== rulePackManifest.packageName,\n );\n for (const group of groups) {\n const request = modules.request(\n root,\n loaded.rulesConfig as Record<string, ConfigObject>,\n group,\n );\n const exports = modules.load(group, loaded.ruleRegistry.manifestModules, loader);\n const checks = await modules.createBuildPolicies(exports, request);\n for (const check of checks) {\n const activation = new BuildActivation(\n request.configs[check.configKey] as BaseRuleConfig,\n check.name,\n check.configKey,\n );\n if (!activation.shouldRun() || !check.shouldRun()) continue;\n // eslint-disable-next-line @webpieces/no-unmanaged-exceptions -- isolate checks and preserve human-facing policy failures\n try {\n const result = await check.run(root);\n if (!result || result.success !== true) success = false;\n // webpieces-disable no-any-unknown -- external JSON or runtime exports are validated before policy execution\n } catch (err: unknown) {\n const error = toError(err);\n console.error(\n error instanceof RuleFailError\n ? renderRuleFailForHuman(error)\n : `Build policy ${check.name} failed: ${error.message}`,\n );\n success = false;\n }\n }\n }\n return new BuildPolicyResult(success);\n }\n}\n"]}
package/src/plugin.js CHANGED
@@ -177,7 +177,9 @@ function addPerProjectTargets(results, projectFiles, opts, context) {
177
177
  processedRoots.add(projectRoot);
178
178
  const architectureEnabled = opts.workspace.enabled === true &&
179
179
  (0, fs_1.existsSync)((0, path_1.join)(context.workspaceRoot, 'architecture'));
180
- const targets = buildPerProjectTargets(isProjectJson, projectRoot, opts, architectureEnabled, isProjectJson ? new generate_targets_1.RawProjectJsonReader().read(context.workspaceRoot, projectFile, projectRoot) : undefined);
180
+ const targets = buildPerProjectTargets(isProjectJson, projectRoot, opts, architectureEnabled, isProjectJson
181
+ ? new generate_targets_1.RawProjectJsonReader().read(context.workspaceRoot, projectFile, projectRoot)
182
+ : undefined);
181
183
  if (Object.keys(targets).length === 0)
182
184
  continue;
183
185
  const result = {
@@ -311,8 +313,8 @@ function createWorkspaceTargetsWithoutPrefix(opts) {
311
313
  // ci aggregate so it does not change existing gate behavior — consumers point a required check at it.
312
314
  targets['validate-checklist-docs'] = targetFactory.checklistDocs();
313
315
  // Use combined validate-code instead of 3 separate targets
314
- // Options come from webpieces.config.json at the workspace root
315
- // (loaded via @webpieces/rules-config; same source of truth as @webpieces/ai-hook-rules)
316
+ // Options come from declared owner files' direct policy-ID maps, resolved by
317
+ // @webpieces/rules-config from the root rulePacks declaration.
316
318
  if (validations.validateNewMethods ||
317
319
  validations.validateModifiedMethods ||
318
320
  validations.validateModifiedFiles) {
@@ -363,11 +365,11 @@ function createGenerateTarget(graphPath) {
363
365
  function createVisualizeTargetWithoutPrefix(graphPath) {
364
366
  return {
365
367
  executor: '@webpieces/nx-webpieces-rules:visualize',
366
- dependsOn: ['generate'],
368
+ cache: false,
367
369
  options: { graphPath },
368
370
  metadata: {
369
371
  technologies: ['nx'],
370
- description: 'Generate visual representations of the architecture graph',
372
+ description: 'View saved architecture without refreshing; refresh: pnpm nx run architecture:generate',
371
373
  },
372
374
  };
373
375
  }
@@ -383,42 +385,6 @@ function createValidateUnchangedTarget(graphPath) {
383
385
  },
384
386
  };
385
387
  }
386
- function createValidateNewMethodsTarget(maxLines, mode) {
387
- return {
388
- executor: '@webpieces/nx-webpieces-rules:validate-new-methods',
389
- cache: false, // Don't cache - depends on git state
390
- inputs: ['default'],
391
- options: { max: maxLines, mode },
392
- metadata: {
393
- technologies: ['nx'],
394
- description: `Validate new methods do not exceed ${maxLines} lines (only runs in affected mode)`,
395
- },
396
- };
397
- }
398
- function createValidateModifiedMethodsTarget(maxLines, mode) {
399
- return {
400
- executor: '@webpieces/nx-webpieces-rules:validate-modified-methods',
401
- cache: false, // Don't cache - depends on git state
402
- inputs: ['default'],
403
- options: { max: maxLines, mode },
404
- metadata: {
405
- technologies: ['nx'],
406
- description: `Validate new and modified methods do not exceed ${maxLines} lines (encourages gradual cleanup)`,
407
- },
408
- };
409
- }
410
- function createValidateModifiedFilesTarget(maxLines, mode) {
411
- return {
412
- executor: '@webpieces/nx-webpieces-rules:validate-modified-files',
413
- cache: false, // Don't cache - depends on git state
414
- inputs: ['default'],
415
- options: { max: maxLines, mode },
416
- metadata: {
417
- technologies: ['nx'],
418
- description: `Validate modified files do not exceed ${maxLines} lines (encourages keeping files small)`,
419
- },
420
- };
421
- }
422
388
  function createValidateCompleteTarget(validationTargets) {
423
389
  return {
424
390
  executor: 'nx:noop',
@@ -493,7 +459,7 @@ function createHelpTarget() {
493
459
  *
494
460
  * Uses the `validate-no-file-import-cycles` executor (which bundles madge as a
495
461
  * dependency) rather than a runtime `npx madge` fetch. The executor reads
496
- * webpieces.config.json so the gate can be turned on/off (`mode`) and
462
+ * the declared Nx owner file's direct policy-ID map to turn the gate on/off (`mode`) and
497
463
  * time-boxed (`turnOffRuleUntilEpoch`) like every other webpieces rule.
498
464
  *
499
465
  * Note `projectRoot` is intentionally unused now — the executor derives the