@webpieces/nx-webpieces-rules 0.4.882 → 0.4.883

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 (76) hide show
  1. package/README.md +40 -13
  2. package/package.json +7 -7
  3. package/src/configs/tag-truth-configs.d.ts +15 -0
  4. package/src/configs/tag-truth-configs.js +20 -1
  5. package/src/configs/tag-truth-configs.js.map +1 -1
  6. package/src/executors/generate/executor.js +3 -0
  7. package/src/executors/generate/executor.js.map +1 -1
  8. package/src/index.d.ts +6 -3
  9. package/src/index.js +15 -1
  10. package/src/index.js.map +1 -1
  11. package/src/lib/graph-color-modes.d.ts +50 -6
  12. package/src/lib/graph-color-modes.js +88 -8
  13. package/src/lib/graph-color-modes.js.map +1 -1
  14. package/src/lib/graph-comparator.js +2 -0
  15. package/src/lib/graph-comparator.js.map +1 -1
  16. package/src/lib/graph-entry-levels.d.ts +35 -0
  17. package/src/lib/graph-entry-levels.js +60 -0
  18. package/src/lib/graph-entry-levels.js.map +1 -0
  19. package/src/lib/graph-impact.d.ts +5 -5
  20. package/src/lib/graph-impact.js +5 -5
  21. package/src/lib/graph-impact.js.map +1 -1
  22. package/src/lib/graph-legend.d.ts +11 -1
  23. package/src/lib/graph-legend.js +44 -6
  24. package/src/lib/graph-legend.js.map +1 -1
  25. package/src/lib/graph-level-bands.js +3 -1
  26. package/src/lib/graph-level-bands.js.map +1 -1
  27. package/src/lib/graph-loader.d.ts +7 -1
  28. package/src/lib/graph-loader.js +10 -1
  29. package/src/lib/graph-loader.js.map +1 -1
  30. package/src/lib/graph-metadata.d.ts +2 -0
  31. package/src/lib/graph-metadata.js +19 -0
  32. package/src/lib/graph-metadata.js.map +1 -1
  33. package/src/lib/graph-page-shell.d.ts +28 -6
  34. package/src/lib/graph-page-shell.js +55 -18
  35. package/src/lib/graph-page-shell.js.map +1 -1
  36. package/src/lib/graph-page-styles.js +3 -1
  37. package/src/lib/graph-page-styles.js.map +1 -1
  38. package/src/lib/graph-products.d.ts +79 -0
  39. package/src/lib/graph-products.js +199 -0
  40. package/src/lib/graph-products.js.map +1 -0
  41. package/src/lib/graph-render-model.d.ts +13 -2
  42. package/src/lib/graph-render-model.js +36 -4
  43. package/src/lib/graph-render-model.js.map +1 -1
  44. package/src/lib/graph-sorter.d.ts +13 -0
  45. package/src/lib/graph-sorter.js.map +1 -1
  46. package/src/lib/graph-visualizer.client.d.ts +20 -10
  47. package/src/lib/graph-visualizer.client.js +67 -31
  48. package/src/lib/graph-visualizer.client.js.map +1 -1
  49. package/src/lib/graph-visualizer.js +7 -6
  50. package/src/lib/graph-visualizer.js.map +1 -1
  51. package/src/lib/product-resolver.d.ts +38 -0
  52. package/src/lib/product-resolver.js +63 -0
  53. package/src/lib/product-resolver.js.map +1 -0
  54. package/src/lib/runtime-graph-model.d.ts +7 -0
  55. package/src/lib/runtime-graph-model.js.map +1 -1
  56. package/src/lib/runtime-graph.js +3 -0
  57. package/src/lib/runtime-graph.js.map +1 -1
  58. package/src/lib/runtime-html-page.d.ts +7 -0
  59. package/src/lib/runtime-html-page.js +29 -0
  60. package/src/lib/runtime-html-page.js.map +1 -1
  61. package/src/lib/runtime-visualizer.client.d.ts +7 -0
  62. package/src/lib/runtime-visualizer.client.js +32 -0
  63. package/src/lib/runtime-visualizer.client.js.map +1 -1
  64. package/src/lib/runtime-visualizer.js +3 -1
  65. package/src/lib/runtime-visualizer.js.map +1 -1
  66. package/src/lib/saved-snapshot.js +6 -2
  67. package/src/lib/saved-snapshot.js.map +1 -1
  68. package/src/lib/tag-truth.d.ts +20 -3
  69. package/src/lib/tag-truth.js +48 -7
  70. package/src/lib/tag-truth.js.map +1 -1
  71. package/src/nx-policy-registry.js +1 -0
  72. package/src/nx-policy-registry.js.map +1 -1
  73. package/src/rule-help.js +1 -0
  74. package/src/rule-help.js.map +1 -1
  75. package/src/rule-settings.js +12 -1
  76. package/src/rule-settings.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tag-truth.js","sourceRoot":"","sources":["../../../../../../packages/tooling/nx-webpieces-rules/src/lib/tag-truth.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Tag truth — the three GRAPH rules that make an nx `role:*` / `framework:*` tag true (#1064):\n *\n * api-lib-dependencies (D2) — a `role:api-lib` depends only on other `role:api-lib` projects plus a\n * stated list of outside packages; a `role:api-client` may also import\n * the packages its own config entry names (its SDK, inversify, …).\n * api-lib-path (D10) — every api-lib / api-client lives under the configured api globs, and\n * everything under them carries one of those two roles.\n * framework-folder (D9) — the folder a library lives in and its framework set + role agree,\n * both directions.\n *\n * They run beside `library-types-match-client` and `role-dependency` (graph-metadata.ts), in\n * `architecture:generate` and `validate-architecture-unchanged`, AFTER enrichGraph has resolved every\n * project's framework set and role — so a tag is read exactly one way. Every problem across every\n * project is collected and thrown as one MetadataValidationError, before anything is written.\n *\n * There is NO default (`.claude/rules/no-rule-defaults.md`): each rule's fields come from\n * webpieces.config.json, which must state them or fail to load. `TagTruthRules.none()` is what a unit\n * test or a caller that configured nothing asked for — not a default.\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { loadAndValidate, matchesAnyGlob, RuleOptions } from \"@webpieces/rules-config\";\nimport { ApiClientPackagesEntry, FrameworkFolderEntry } from \"../configs/tag-truth-configs\";\nimport type { EnhancedGraph, GraphEntry } from './graph-sorter';\nimport { APP_ROLES, MetadataValidationError } from './graph-metadata';\nimport { ProjectInfo } from './project-info';\nimport { RuleGate } from './rule-gate';\nimport { DepUsageScanner } from './dep-usage-scanner';\nimport { toError } from '../toError';\n\n/** The only field of a package.json this check reads. */\ntype RawPackageJson = { name?: string };\n\nexport const API_LIB_ROLE = 'api-lib';\nexport const API_CLIENT_ROLE = 'api-client';\nconst API_ROLES: readonly string[] = [API_LIB_ROLE, API_CLIENT_ROLE];\n\n/** `api-lib-dependencies`, resolved: what an api library may import from outside the api-lib set. */\nexport class ApiLibDependenciesRule {\n constructor(\n /** Package / project names (globs allowed) every api-lib and api-client may depend on. */\n public readonly apiLibPackages: readonly string[],\n /** `role:api-client` project → the extra packages it may depend on. */\n public readonly apiClientPackages: ReadonlyMap<string, readonly string[]>,\n ) {}\n}\n\n/** `api-lib-path`, resolved: the globs every api project — and only api projects — lives under. */\nexport class ApiLibPathRule {\n constructor(public readonly paths: readonly string[]) {}\n}\n\n/** One `framework-folder` entry with its framework sets canonicalised (`a+b`, tokens sorted). */\nexport class FrameworkFolder {\n constructor(\n public readonly paths: readonly string[],\n public readonly frameworkSets: readonly string[],\n public readonly roles: readonly string[],\n ) {}\n\n /** A framework set written in any order, canonicalised: `node+browser` → `browser+node`. */\n // webpieces-disable no-function-outside-class -- static helper of this class\n static canonical(frameworks: readonly string[]): string {\n return [...new Set(frameworks.map((each: string) => each.trim()).filter((each: string) => each !== ''))]\n .sort()\n .join('+');\n }\n\n // webpieces-disable no-function-outside-class -- static factory of this class\n static fromEntry(entry: FrameworkFolderEntry): FrameworkFolder {\n return new FrameworkFolder(\n entry.paths,\n entry.frameworkSets.map((set: string) => FrameworkFolder.canonical(set.split('+'))),\n entry.roles,\n );\n }\n}\n\n/** `framework-folder`, resolved. Entry ORDER matters: the first entry whose glob matches governs. */\nexport class FrameworkFolderRule {\n constructor(public readonly folders: readonly FrameworkFolder[]) {}\n}\n\n/**\n * The three rules' switches, read from webpieces.config.json once. A rule that is OFF (or time-boxed /\n * branch-scoped off) is `null`.\n */\nexport class TagTruthRules {\n constructor(\n public readonly apiLibDependencies: ApiLibDependenciesRule | null,\n public readonly apiLibPath: ApiLibPathRule | null,\n public readonly frameworkFolder: FrameworkFolderRule | null,\n ) {}\n\n /** Every rule off — what a caller that configured nothing asked for. */\n // webpieces-disable no-function-outside-class -- static factory of this class\n static none(): TagTruthRules {\n return new TagTruthRules(null, null, null);\n }\n\n anyEnabled(): boolean {\n return this.apiLibDependencies !== null || this.apiLibPath !== null || this.frameworkFolder !== null;\n }\n\n /** `mode: OFF` and both escape hatches come from RuleGate, so there is ONE reading of them. */\n // webpieces-disable no-function-outside-class -- static factory of this class\n static fromConfig(workspaceRoot: string): TagTruthRules {\n const gate = new RuleGate();\n const rules = loadAndValidate(workspaceRoot).resolved.rules;\n // webpieces-disable no-any-unknown -- a validated rule entry is still opaque JSON in the option bag\n const optionsOf = (name: string): RuleOptions | null =>\n gate.isDisabled(workspaceRoot, name, true) ? null : (rules.get(name)?.options ?? null);\n\n const deps = optionsOf(\"api-lib-dependencies\");\n const where = optionsOf(\"api-lib-path\");\n const folder = optionsOf(\"framework-folder\");\n return new TagTruthRules(\n deps === null ? null : TagTruthRules.dependenciesRule(deps),\n where === null ? null : new ApiLibPathRule(where['paths'] as string[]),\n folder === null\n ? null\n : new FrameworkFolderRule((folder['entries'] as FrameworkFolderEntry[]).map(FrameworkFolder.fromEntry)),\n );\n }\n\n // webpieces-disable no-function-outside-class -- private static reader of this class\n private static dependenciesRule(options: RuleOptions): ApiLibDependenciesRule {\n const clients = new Map<string, readonly string[]>();\n for (const entry of options['apiClients'] as ApiClientPackagesEntry[]) clients.set(entry.project, entry.packages);\n return new ApiLibDependenciesRule(options['apiLibPackages'] as string[], clients);\n }\n}\n\n/** What ONE project imports from production source, and the package name others import it by. */\nexport class ProjectImports {\n constructor(\n /** The project's own `package.json` name, or null when it has none. */\n public readonly packageName: string | null,\n /** Bare package names its production (non-test) source imports. */\n public readonly prodPackages: ReadonlySet<string>,\n ) {}\n}\n\n/** The pure check: every tag-truth problem in a graph whose framework sets and roles are resolved. */\nexport class TagTruthValidator {\n constructor(private readonly rules: TagTruthRules) {}\n\n problems(\n graph: EnhancedGraph,\n infos: Map<string, ProjectInfo>,\n imports: ReadonlyMap<string, ProjectImports>,\n ): string[] {\n const problems: string[] = [];\n for (const name of Object.keys(graph).sort()) {\n const entry = graph[name];\n const info = infos.get(name);\n if (info === undefined || info.root === '' || info.root === '.') continue;\n const root = info.root.replace(/\\\\/g, '/').replace(/\\/+$/, '');\n if (this.rules.apiLibDependencies !== null) {\n problems.push(...this.dependencyProblems(name, entry, graph, imports, this.rules.apiLibDependencies));\n }\n if (this.rules.apiLibPath !== null) {\n problems.push(...this.pathProblems(name, root, entry, this.rules.apiLibPath));\n }\n if (this.rules.frameworkFolder !== null) {\n problems.push(...this.folderProblems(name, root, entry, this.rules.frameworkFolder));\n }\n }\n return problems;\n }\n\n /** D2 — the workspace edges and the outside packages of ONE api-lib / api-client. */\n private dependencyProblems(\n name: string,\n entry: GraphEntry,\n graph: EnhancedGraph,\n imports: ReadonlyMap<string, ProjectImports>,\n rule: ApiLibDependenciesRule,\n ): string[] {\n const role = entry.role;\n if (role === undefined || !API_ROLES.includes(role)) return [];\n const rulePrefix = `${\"api-lib-dependencies\"}: '${name}' (role:${role})`;\n const clientPackages = rule.apiClientPackages.get(name);\n if (role === API_CLIENT_ROLE && clientPackages === undefined) {\n return [\n `${rulePrefix} has no apiClients entry — what an api-client talks to is stated, never inferred. ` +\n `Add { \"project\": \"${name}\", \"packages\": [<its SDK, inversify, …>] } to ` +\n `${\"api-lib-dependencies\"}.apiClients in webpieces.config.json, or retag it role:api-lib ` +\n 'if it bundles no implementation.',\n ];\n }\n const allowed = [...rule.apiLibPackages, ...(clientPackages ?? [])];\n const listName =\n role === API_CLIENT_ROLE ? `apiLibPackages or its apiClients entry` : 'apiLibPackages';\n const problems: string[] = [];\n const workspaceNames = new Set<string>();\n for (const dep of entry.dependsOn) {\n const depImports = imports.get(dep);\n if (depImports?.packageName) workspaceNames.add(depImports.packageName);\n const depRole = graph[dep]?.role;\n if (depRole === API_LIB_ROLE) continue;\n if (matchesAnyGlob(dep, allowed)) continue;\n if (depImports?.packageName && matchesAnyGlob(depImports.packageName, allowed)) continue;\n problems.push(\n `${rulePrefix} must not depend on '${dep}' (role:${depRole ?? 'none'}) — an api library depends ` +\n `only on role:api-lib projects and the packages ${listName} lists. Move what it needs into a ` +\n `role:api-lib project, or add '${depImports?.packageName ?? dep}' to ${listName}.`,\n );\n }\n const own = imports.get(name);\n for (const pkg of [...(own?.prodPackages ?? [])].sort()) {\n if (pkg === own?.packageName || workspaceNames.has(pkg) || this.isWorkspacePackage(pkg, imports)) continue;\n if (matchesAnyGlob(pkg, allowed)) continue;\n problems.push(\n `${rulePrefix} imports '${pkg}', which ${listName} does not list — an api library's wire contract ` +\n `must not drag an outside runtime into every consumer. Remove the import, or add '${pkg}' ` +\n `to ${\"api-lib-dependencies\"}.${role === API_CLIENT_ROLE ? `apiClients[\"${name}\"].packages` : 'apiLibPackages'}.`,\n );\n }\n return problems;\n }\n\n /** A package some workspace project publishes — its edge is judged as a workspace dependency above. */\n private isWorkspacePackage(pkg: string, imports: ReadonlyMap<string, ProjectImports>): boolean {\n for (const each of imports.values()) if (each.packageName === pkg) return true;\n return false;\n }\n\n /** D10 — an api project lives under the api globs, and everything there is an api project. */\n private pathProblems(name: string, root: string, entry: GraphEntry, rule: ApiLibPathRule): string[] {\n const isApi = entry.role !== undefined && API_ROLES.includes(entry.role);\n const inPath = matchesAnyGlob(root, rule.paths);\n const globs = `[${rule.paths.join(', ')}]`;\n if (isApi && !inPath) {\n return [\n `${\"api-lib-path\"}: '${name}' is role:${entry.role} but lives at '${root}', outside ` +\n `${\"api-lib-path\"}.paths ${globs} — move it under one of them ` +\n '(nx g @nx/workspace:move), so every contract in the repo is found in one place.',\n ];\n }\n if (inPath && !isApi) {\n return [\n `${\"api-lib-path\"}: '${name}' lives at '${root}', under ${\"api-lib-path\"}.paths ` +\n `${globs}, but is role:${entry.role ?? 'none'} — everything there is a contract. Retag it ` +\n 'role:api-lib (a contract and/or its DTOs) or role:api-client (a contract plus its SDK ' +\n 'adapter), or move it out of the api tree.',\n ];\n }\n return [];\n }\n\n /** D9 — the folder and the tags agree, both directions. */\n private folderProblems(name: string, root: string, entry: GraphEntry, rule: FrameworkFolderRule): string[] {\n if (entry.framework === undefined || entry.role === undefined) return [];\n const set = FrameworkFolder.canonical(entry.framework);\n const role = entry.role;\n const governing = rule.folders.find((folder: FrameworkFolder) => matchesAnyGlob(root, folder.paths));\n const prefix = `${\"framework-folder\"}: '${name}' at '${root}'`;\n if (governing !== undefined) {\n const problems: string[] = [];\n const glob = governing.paths.join(', ');\n if (!governing.frameworkSets.includes(set)) {\n problems.push(\n `${prefix} carries framework set [${set}], but the folder ${glob} holds ` +\n `[${governing.frameworkSets.join(' | ')}] — retag it to the folder's set, or move it to ` +\n 'the folder that holds its set.',\n );\n }\n if (!governing.roles.includes(role)) {\n problems.push(\n `${prefix} is role:${role}, but the folder ${glob} holds role ` +\n `${governing.roles.map((each: string) => `role:${each}`).join(' | ')} — retag it, or move it.`,\n );\n }\n return problems;\n }\n if (APP_ROLES.includes(role) || role === 'bundle') return [];\n const homes = rule.folders.filter(\n (folder: FrameworkFolder) => folder.frameworkSets.includes(set) && folder.roles.includes(role),\n );\n if (homes.length === 0) return [];\n const globs = homes.map((folder: FrameworkFolder) => folder.paths.join(', ')).join(' | ');\n return [\n `${prefix} is a role:${role} carrying [${set}], which ${\"framework-folder\"} places under ` +\n `${globs} — move it there (nx g @nx/workspace:move), so the folder tells a reader what runs where.`,\n ];\n }\n}\n\n/** The executor-facing entry point: read the config and the imports, check, and throw before any write. */\nexport class TagTruthCheck {\n assertTrue(graph: EnhancedGraph, infos: Map<string, ProjectInfo>, workspaceRoot: string): void {\n const rules = TagTruthRules.fromConfig(workspaceRoot);\n if (!rules.anyEnabled()) return;\n const imports = rules.apiLibDependencies === null ? new Map<string, ProjectImports>() : this.importsOf(infos, workspaceRoot);\n const problems = new TagTruthValidator(rules).problems(graph, infos, imports);\n if (problems.length > 0) throw new MetadataValidationError(problems);\n }\n\n /** Every project's production imports and package name, read from its source and package.json. */\n importsOf(infos: Map<string, ProjectInfo>, workspaceRoot: string): Map<string, ProjectImports> {\n const scanner = new DepUsageScanner();\n const found = new Map<string, ProjectImports>();\n for (const info of infos.values()) {\n if (info.root === '' || info.root === '.') continue;\n const abs = path.resolve(workspaceRoot, info.root);\n found.set(info.name, new ProjectImports(this.packageNameOf(abs), scanner.scan(abs).prodPackages));\n }\n return found;\n }\n\n private packageNameOf(projectDir: string): string | null {\n const file = path.join(projectDir, 'package.json');\n if (!fs.existsSync(file)) return null;\n // eslint-disable-next-line @webpieces/no-unmanaged-exceptions\n try {\n const parsed = JSON.parse(fs.readFileSync(file, 'utf-8')) as RawPackageJson;\n return typeof parsed.name === 'string' ? parsed.name : null;\n } catch (err: unknown) {\n const error = toError(err);\n throw new Error(`Failed to parse ${file} while reading the package name tag-truth checks against`, {\n cause: error,\n });\n }\n }\n}\n"]}
1
+ {"version":3,"file":"tag-truth.js","sourceRoot":"","sources":["../../../../../../packages/tooling/nx-webpieces-rules/src/lib/tag-truth.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Tag truth — the four GRAPH rules that make an nx `role:*` / `framework:*` / `product:*` tag true\n * (#1064, #1179):\n *\n * api-lib-dependencies (D2) — a `role:api-lib` depends only on other `role:api-lib` projects plus a\n * stated list of outside packages; a `role:api-client` may also import\n * the packages its own config entry names (its SDK, inversify, …).\n * api-lib-path (D10) — every api-lib / api-client lives under the configured api globs, and\n * everything under them carries one of those two roles.\n * framework-folder (D9) — the folder a library lives in and its framework set + role agree,\n * both directions.\n * product-tags (#1179) — every project whose role is listed (seed: server, client, app)\n * carries a well-formed `product:<name>` tag, the seed the product\n * filter and Product color mode derive membership from.\n *\n * They run beside `library-types-match-client` and `role-dependency` (graph-metadata.ts), in\n * `architecture:generate` and `validate-architecture-unchanged`, AFTER enrichGraph has resolved every\n * project's framework set and role — so a tag is read exactly one way. Every problem across every\n * project is collected and thrown as one MetadataValidationError, before anything is written.\n *\n * There is NO default (`.claude/rules/no-rule-defaults.md`): each rule's fields come from\n * webpieces.config.json, which must state them or fail to load. `TagTruthRules.none()` is what a unit\n * test or a caller that configured nothing asked for — not a default.\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { loadAndValidate, matchesAnyGlob, RuleOptions } from \"@webpieces/rules-config\";\nimport { ApiClientPackagesEntry, FrameworkFolderEntry } from \"../configs/tag-truth-configs\";\nimport type { EnhancedGraph, GraphEntry } from './graph-sorter';\nimport { APP_ROLES, MetadataValidationError } from './graph-metadata';\nimport { ProjectInfo } from './project-info';\nimport { ProductResolver } from './product-resolver';\nimport { RuleGate } from './rule-gate';\nimport { DepUsageScanner } from './dep-usage-scanner';\nimport { toError } from '../toError';\n\n/** The only field of a package.json this check reads. */\ntype RawPackageJson = { name?: string };\n\nexport const API_LIB_ROLE = 'api-lib';\nexport const API_CLIENT_ROLE = 'api-client';\nconst API_ROLES: readonly string[] = [API_LIB_ROLE, API_CLIENT_ROLE];\n\n/** `api-lib-dependencies`, resolved: what an api library may import from outside the api-lib set. */\nexport class ApiLibDependenciesRule {\n constructor(\n /** Package / project names (globs allowed) every api-lib and api-client may depend on. */\n public readonly apiLibPackages: readonly string[],\n /** `role:api-client` project → the extra packages it may depend on. */\n public readonly apiClientPackages: ReadonlyMap<string, readonly string[]>,\n ) {}\n}\n\n/** `api-lib-path`, resolved: the globs every api project — and only api projects — lives under. */\nexport class ApiLibPathRule {\n constructor(public readonly paths: readonly string[]) {}\n}\n\n/** One `framework-folder` entry with its framework sets canonicalised (`a+b`, tokens sorted). */\nexport class FrameworkFolder {\n constructor(\n public readonly paths: readonly string[],\n public readonly frameworkSets: readonly string[],\n public readonly roles: readonly string[],\n ) {}\n\n /** A framework set written in any order, canonicalised: `node+browser` → `browser+node`. */\n // webpieces-disable no-function-outside-class -- static helper of this class\n static canonical(frameworks: readonly string[]): string {\n return [...new Set(frameworks.map((each: string) => each.trim()).filter((each: string) => each !== ''))]\n .sort()\n .join('+');\n }\n\n // webpieces-disable no-function-outside-class -- static factory of this class\n static fromEntry(entry: FrameworkFolderEntry): FrameworkFolder {\n return new FrameworkFolder(\n entry.paths,\n entry.frameworkSets.map((set: string) => FrameworkFolder.canonical(set.split('+'))),\n entry.roles,\n );\n }\n}\n\n/** `framework-folder`, resolved. Entry ORDER matters: the first entry whose glob matches governs. */\nexport class FrameworkFolderRule {\n constructor(public readonly folders: readonly FrameworkFolder[]) {}\n}\n\n/** `product-tags`, resolved: the roles whose every project must declare a `product:<name>` tag. */\nexport class ProductTagsRule {\n constructor(public readonly roles: readonly string[]) {}\n}\n\n/**\n * The four rules' switches, read from webpieces.config.json once. A rule that is OFF (or time-boxed /\n * branch-scoped off) is `null`.\n */\nexport class TagTruthRules {\n constructor(\n public readonly apiLibDependencies: ApiLibDependenciesRule | null,\n public readonly apiLibPath: ApiLibPathRule | null,\n public readonly frameworkFolder: FrameworkFolderRule | null,\n public readonly productTags: ProductTagsRule | null,\n ) {}\n\n /** Every rule off — what a caller that configured nothing asked for. */\n // webpieces-disable no-function-outside-class -- static factory of this class\n static none(): TagTruthRules {\n return new TagTruthRules(null, null, null, null);\n }\n\n anyEnabled(): boolean {\n return (\n this.apiLibDependencies !== null ||\n this.apiLibPath !== null ||\n this.frameworkFolder !== null ||\n this.productTags !== null\n );\n }\n\n /** `mode: OFF` and both escape hatches come from RuleGate, so there is ONE reading of them. */\n // webpieces-disable no-function-outside-class -- static factory of this class\n static fromConfig(workspaceRoot: string): TagTruthRules {\n const gate = new RuleGate();\n const rules = loadAndValidate(workspaceRoot).resolved.rules;\n // webpieces-disable no-any-unknown -- a validated rule entry is still opaque JSON in the option bag\n const optionsOf = (name: string): RuleOptions | null =>\n gate.isDisabled(workspaceRoot, name, true) ? null : (rules.get(name)?.options ?? null);\n\n const deps = optionsOf(\"api-lib-dependencies\");\n const where = optionsOf(\"api-lib-path\");\n const folder = optionsOf(\"framework-folder\");\n const products = optionsOf(\"product-tags\");\n return new TagTruthRules(\n deps === null ? null : TagTruthRules.dependenciesRule(deps),\n where === null ? null : new ApiLibPathRule(where['paths'] as string[]),\n folder === null\n ? null\n : new FrameworkFolderRule((folder['entries'] as FrameworkFolderEntry[]).map(FrameworkFolder.fromEntry)),\n products === null ? null : new ProductTagsRule(products['roles'] as string[]),\n );\n }\n\n // webpieces-disable no-function-outside-class -- private static reader of this class\n private static dependenciesRule(options: RuleOptions): ApiLibDependenciesRule {\n const clients = new Map<string, readonly string[]>();\n for (const entry of options['apiClients'] as ApiClientPackagesEntry[]) clients.set(entry.project, entry.packages);\n return new ApiLibDependenciesRule(options['apiLibPackages'] as string[], clients);\n }\n}\n\n/** What ONE project imports from production source, and the package name others import it by. */\nexport class ProjectImports {\n constructor(\n /** The project's own `package.json` name, or null when it has none. */\n public readonly packageName: string | null,\n /** Bare package names its production (non-test) source imports. */\n public readonly prodPackages: ReadonlySet<string>,\n ) {}\n}\n\n/** The pure check: every tag-truth problem in a graph whose framework sets and roles are resolved. */\nexport class TagTruthValidator {\n constructor(private readonly rules: TagTruthRules) {}\n\n problems(\n graph: EnhancedGraph,\n infos: Map<string, ProjectInfo>,\n imports: ReadonlyMap<string, ProjectImports>,\n ): string[] {\n const problems: string[] = [];\n for (const name of Object.keys(graph).sort()) {\n const entry = graph[name];\n const info = infos.get(name);\n if (info === undefined || info.root === '' || info.root === '.') continue;\n const root = info.root.replace(/\\\\/g, '/').replace(/\\/+$/, '');\n if (this.rules.apiLibDependencies !== null) {\n problems.push(...this.dependencyProblems(name, entry, graph, imports, this.rules.apiLibDependencies));\n }\n if (this.rules.apiLibPath !== null) {\n problems.push(...this.pathProblems(name, root, entry, this.rules.apiLibPath));\n }\n if (this.rules.frameworkFolder !== null) {\n problems.push(...this.folderProblems(name, root, entry, this.rules.frameworkFolder));\n }\n if (this.rules.productTags !== null) {\n problems.push(...this.productTagProblems(info, root, entry, this.rules.productTags));\n }\n }\n return problems;\n }\n\n /**\n * #1179 — a project whose role the rule lists declares at least one well-formed `product:<name>`.\n * The DECLARED tags are read, never the derived `products`: a server inheriting membership from an\n * orchestrator that depends on it still states its own product. A malformed tag is not counted here\n * because enrichGraph already fails on it, naming the tag.\n */\n private productTagProblems(info: ProjectInfo, root: string, entry: GraphEntry, rule: ProductTagsRule): string[] {\n const role = entry.role;\n if (role === undefined || !rule.roles.includes(role)) return [];\n if (new ProductResolver().resolve(info).products.length > 0) return [];\n return [\n `${\"product-tags\"}: '${info.name}' is role:${role} but carries no product tag — every ` +\n `${rule.roles.map((each: string) => `role:${each}`).join(' / ')} must name the product(s) it belongs ` +\n `to, so the architecture graphs can show one product. Add \"product:<name>\" (lowercase kebab, ` +\n `several allowed) to the \"tags\" in ${root}/project.json, e.g. \"tags\": [..., \"product:<name>\"].`,\n ];\n }\n\n /** D2 — the workspace edges and the outside packages of ONE api-lib / api-client. */\n private dependencyProblems(\n name: string,\n entry: GraphEntry,\n graph: EnhancedGraph,\n imports: ReadonlyMap<string, ProjectImports>,\n rule: ApiLibDependenciesRule,\n ): string[] {\n const role = entry.role;\n if (role === undefined || !API_ROLES.includes(role)) return [];\n const rulePrefix = `${\"api-lib-dependencies\"}: '${name}' (role:${role})`;\n const clientPackages = rule.apiClientPackages.get(name);\n if (role === API_CLIENT_ROLE && clientPackages === undefined) {\n return [\n `${rulePrefix} has no apiClients entry — what an api-client talks to is stated, never inferred. ` +\n `Add { \"project\": \"${name}\", \"packages\": [<its SDK, inversify, …>] } to ` +\n `${\"api-lib-dependencies\"}.apiClients in webpieces.config.json, or retag it role:api-lib ` +\n 'if it bundles no implementation.',\n ];\n }\n const allowed = [...rule.apiLibPackages, ...(clientPackages ?? [])];\n const listName =\n role === API_CLIENT_ROLE ? `apiLibPackages or its apiClients entry` : 'apiLibPackages';\n const problems: string[] = [];\n const workspaceNames = new Set<string>();\n for (const dep of entry.dependsOn) {\n const depImports = imports.get(dep);\n if (depImports?.packageName) workspaceNames.add(depImports.packageName);\n const depRole = graph[dep]?.role;\n if (depRole === API_LIB_ROLE) continue;\n if (matchesAnyGlob(dep, allowed)) continue;\n if (depImports?.packageName && matchesAnyGlob(depImports.packageName, allowed)) continue;\n problems.push(\n `${rulePrefix} must not depend on '${dep}' (role:${depRole ?? 'none'}) — an api library depends ` +\n `only on role:api-lib projects and the packages ${listName} lists. Move what it needs into a ` +\n `role:api-lib project, or add '${depImports?.packageName ?? dep}' to ${listName}.`,\n );\n }\n const own = imports.get(name);\n for (const pkg of [...(own?.prodPackages ?? [])].sort()) {\n if (pkg === own?.packageName || workspaceNames.has(pkg) || this.isWorkspacePackage(pkg, imports)) continue;\n if (matchesAnyGlob(pkg, allowed)) continue;\n problems.push(\n `${rulePrefix} imports '${pkg}', which ${listName} does not list — an api library's wire contract ` +\n `must not drag an outside runtime into every consumer. Remove the import, or add '${pkg}' ` +\n `to ${\"api-lib-dependencies\"}.${role === API_CLIENT_ROLE ? `apiClients[\"${name}\"].packages` : 'apiLibPackages'}.`,\n );\n }\n return problems;\n }\n\n /** A package some workspace project publishes — its edge is judged as a workspace dependency above. */\n private isWorkspacePackage(pkg: string, imports: ReadonlyMap<string, ProjectImports>): boolean {\n for (const each of imports.values()) if (each.packageName === pkg) return true;\n return false;\n }\n\n /** D10 — an api project lives under the api globs, and everything there is an api project. */\n private pathProblems(name: string, root: string, entry: GraphEntry, rule: ApiLibPathRule): string[] {\n const isApi = entry.role !== undefined && API_ROLES.includes(entry.role);\n const inPath = matchesAnyGlob(root, rule.paths);\n const globs = `[${rule.paths.join(', ')}]`;\n if (isApi && !inPath) {\n return [\n `${\"api-lib-path\"}: '${name}' is role:${entry.role} but lives at '${root}', outside ` +\n `${\"api-lib-path\"}.paths ${globs} — move it under one of them ` +\n '(nx g @nx/workspace:move), so every contract in the repo is found in one place.',\n ];\n }\n if (inPath && !isApi) {\n return [\n `${\"api-lib-path\"}: '${name}' lives at '${root}', under ${\"api-lib-path\"}.paths ` +\n `${globs}, but is role:${entry.role ?? 'none'} — everything there is a contract. Retag it ` +\n 'role:api-lib (a contract and/or its DTOs) or role:api-client (a contract plus its SDK ' +\n 'adapter), or move it out of the api tree.',\n ];\n }\n return [];\n }\n\n /** D9 — the folder and the tags agree, both directions. */\n private folderProblems(name: string, root: string, entry: GraphEntry, rule: FrameworkFolderRule): string[] {\n if (entry.framework === undefined || entry.role === undefined) return [];\n const set = FrameworkFolder.canonical(entry.framework);\n const role = entry.role;\n const governing = rule.folders.find((folder: FrameworkFolder) => matchesAnyGlob(root, folder.paths));\n const prefix = `${\"framework-folder\"}: '${name}' at '${root}'`;\n if (governing !== undefined) {\n const problems: string[] = [];\n const glob = governing.paths.join(', ');\n if (!governing.frameworkSets.includes(set)) {\n problems.push(\n `${prefix} carries framework set [${set}], but the folder ${glob} holds ` +\n `[${governing.frameworkSets.join(' | ')}] — retag it to the folder's set, or move it to ` +\n 'the folder that holds its set.',\n );\n }\n if (!governing.roles.includes(role)) {\n problems.push(\n `${prefix} is role:${role}, but the folder ${glob} holds role ` +\n `${governing.roles.map((each: string) => `role:${each}`).join(' | ')} — retag it, or move it.`,\n );\n }\n return problems;\n }\n if (APP_ROLES.includes(role) || role === 'bundle') return [];\n const homes = rule.folders.filter(\n (folder: FrameworkFolder) => folder.frameworkSets.includes(set) && folder.roles.includes(role),\n );\n if (homes.length === 0) return [];\n const globs = homes.map((folder: FrameworkFolder) => folder.paths.join(', ')).join(' | ');\n return [\n `${prefix} is a role:${role} carrying [${set}], which ${\"framework-folder\"} places under ` +\n `${globs} — move it there (nx g @nx/workspace:move), so the folder tells a reader what runs where.`,\n ];\n }\n}\n\n/** The executor-facing entry point: read the config and the imports, check, and throw before any write. */\nexport class TagTruthCheck {\n assertTrue(graph: EnhancedGraph, infos: Map<string, ProjectInfo>, workspaceRoot: string): void {\n const rules = TagTruthRules.fromConfig(workspaceRoot);\n if (!rules.anyEnabled()) return;\n const imports = rules.apiLibDependencies === null ? new Map<string, ProjectImports>() : this.importsOf(infos, workspaceRoot);\n const problems = new TagTruthValidator(rules).problems(graph, infos, imports);\n if (problems.length > 0) throw new MetadataValidationError(problems);\n }\n\n /** Every project's production imports and package name, read from its source and package.json. */\n importsOf(infos: Map<string, ProjectInfo>, workspaceRoot: string): Map<string, ProjectImports> {\n const scanner = new DepUsageScanner();\n const found = new Map<string, ProjectImports>();\n for (const info of infos.values()) {\n if (info.root === '' || info.root === '.') continue;\n const abs = path.resolve(workspaceRoot, info.root);\n found.set(info.name, new ProjectImports(this.packageNameOf(abs), scanner.scan(abs).prodPackages));\n }\n return found;\n }\n\n private packageNameOf(projectDir: string): string | null {\n const file = path.join(projectDir, 'package.json');\n if (!fs.existsSync(file)) return null;\n // eslint-disable-next-line @webpieces/no-unmanaged-exceptions\n try {\n const parsed = JSON.parse(fs.readFileSync(file, 'utf-8')) as RawPackageJson;\n return typeof parsed.name === 'string' ? parsed.name : null;\n } catch (err: unknown) {\n const error = toError(err);\n throw new Error(`Failed to parse ${file} while reading the package name tag-truth checks against`, {\n cause: error,\n });\n }\n }\n}\n"]}
@@ -38,5 +38,6 @@ exports.NX_POLICIES = [
38
38
  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),
39
39
  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),
40
40
  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),
41
+ new NxPolicy(new rules_sdk_1.OwnedRuleDefinition('product-tags', tag_truth_configs_1.ProductTagsConfig.SCHEMA, rules_sdk_1.RULE_SCHEMA_API_VERSION, rule_settings_1.optionalTuning['product-tags'], rule_settings_1.recommendedSeeds['product-tags'], 'rules', rule_help_1.ruleHelp['product-tags']), actions.graphPolicies),
41
42
  ];
42
43
  //# sourceMappingURL=nx-policy-registry.js.map
@@ -1 +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';\nimport { WiringFormatConfig } from './configs/wiring-format-config';\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('wiring-format', WiringFormatConfig.SCHEMA, RULE_SCHEMA_API_VERSION,\n optionalTuning['wiring-format'], recommendedSeeds['wiring-format'], 'rules', ruleHelp['wiring-format']),\n actions.wiringFormat,\n ),\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"]}
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 ProductTagsConfig,\n} from './configs/tag-truth-configs';\nimport { NativeActions, NativeAction } from './native-actions';\nimport { WiringFormatConfig } from './configs/wiring-format-config';\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('wiring-format', WiringFormatConfig.SCHEMA, RULE_SCHEMA_API_VERSION,\n optionalTuning['wiring-format'], recommendedSeeds['wiring-format'], 'rules', ruleHelp['wiring-format']),\n actions.wiringFormat,\n ),\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 new NxPolicy(\n new OwnedRuleDefinition(\n 'product-tags',\n ProductTagsConfig.SCHEMA,\n RULE_SCHEMA_API_VERSION,\n optionalTuning['product-tags'],\n recommendedSeeds['product-tags'],\n 'rules',\n ruleHelp['product-tags'],\n ),\n actions.graphPolicies,\n ),\n];\n"]}
package/src/rule-help.js CHANGED
@@ -21,5 +21,6 @@ exports.ruleHelp = {
21
21
  'api-lib-dependencies': new rules_sdk_1.RuleHelp('Validate the configured API library dependency relationships.', 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.'),
22
22
  'api-lib-path': new rules_sdk_1.RuleHelp('Use the configured paths for API contract libraries.', 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.'),
23
23
  'framework-folder': new rules_sdk_1.RuleHelp('Align framework declarations with their project folder layout.', 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.'),
24
+ 'product-tags': new rules_sdk_1.RuleHelp('Require a product:<name> nx tag on every project whose role is listed, so the architecture graphs can show one product.', 'Add "product:<name>" to the tags in the named project.json, or review the listed roles in {configFile}. An intentional opt-out requires complete OFF settings.'),
24
25
  };
25
26
  //# sourceMappingURL=rule-help.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rule-help.js","sourceRoot":"","sources":["../../../../../packages/tooling/nx-webpieces-rules/src/rule-help.ts"],"names":[],"mappings":";;;AAAA,oDAAgD;AAEhD,gEAAgE;AACnD,QAAA,QAAQ,GAAuC;IACxD,eAAe,EAAE,IAAI,oBAAQ,CAAC,kJAAkJ,EAAE,qyBAAqyB,CAAC;IACx9B,uBAAuB,EAAE,IAAI,oBAAQ,CACjC,kDAAkD,EAClD,sIAAsI,CACzI;IACD,sBAAsB,EAAE,IAAI,oBAAQ,CAChC,2DAA2D,EAC3D,sIAAsI,CACzI;IACD,WAAW,EAAE,IAAI,oBAAQ,CACrB,mEAAmE,EACnE,sIAAsI,CACzI;IACD,UAAU,EAAE,IAAI,oBAAQ,CACpB,2DAA2D,EAC3D,sIAAsI,CACzI;IACD,2BAA2B,EAAE,IAAI,oBAAQ,CACrC,gEAAgE,EAChE,sIAAsI,CACzI;IACD,iCAAiC,EAAE,IAAI,oBAAQ,CAC3C,0EAA0E,EAC1E,gqBAAgqB,CACnqB;IACD,iCAAiC,EAAE,IAAI,oBAAQ,CAC3C,0DAA0D,EAC1D,sIAAsI,CACzI;IACD,sBAAsB,EAAE,IAAI,oBAAQ,CAChC,gEAAgE,EAChE,sIAAsI,CACzI;IACD,0BAA0B,EAAE,IAAI,oBAAQ,CACpC,gEAAgE,EAChE,sIAAsI,CACzI;IACD,sBAAsB,EAAE,IAAI,oBAAQ,CAChC,8EAA8E,EAC9E,sIAAsI,CACzI;IACD,wBAAwB,EAAE,IAAI,oBAAQ,CAClC,qEAAqE,EACrE,sIAAsI,CACzI;IACD,uBAAuB,EAAE,IAAI,oBAAQ,CACjC,uEAAuE,EACvE,sIAAsI,CACzI;IACD,mBAAmB,EAAE,IAAI,oBAAQ,CAC7B,mEAAmE,EACnE,sIAAsI,CACzI;IACD,sBAAsB,EAAE,IAAI,oBAAQ,CAChC,+DAA+D,EAC/D,sIAAsI,CACzI;IACD,cAAc,EAAE,IAAI,oBAAQ,CACxB,sDAAsD,EACtD,sIAAsI,CACzI;IACD,kBAAkB,EAAE,IAAI,oBAAQ,CAC5B,gEAAgE,EAChE,sIAAsI,CACzI;CACJ,CAAC","sourcesContent":["import { RuleHelp } from '@webpieces/rules-sdk';\n\n/** Owner-authored guidance consumed by the registry catalog. */\nexport const ruleHelp: Readonly<Record<string, RuleHelp>> = {\n 'wiring-format': new RuleHelp('Check every canonical wiring.ts: its Wiring/AppWiring class plus the BindModule/RouteModule classes it selects, with their actual registrations.', 'Declare each owner\\'s Wiring/AppWiring class beside its named BindModule/RouteModule classes and their registrations (binder.createRpcClientAndBind, binder.createPubSubClientAndBind, binder.bindExternal, binder.bind chains, browser binder.provide recipes, addRoutes, addFilter) in its src/wiring.ts; select them with literal getBindModules/getRouteModules/getWirings return arrays. An AppWiring may also select a BindModule declared in a library owner\\'s canonical src/wiring.ts, and only an AppWiring selects library Wirings. Keep constructors as prepared-input storage, keep configuration building, environment discovery and initializer/factory bodies in imported implementations, use direct service strings and explicit WiringPolicy declarations. Set maxLines explicitly (agreed upstream limit: 400).'),\n 'no-file-import-cycles': new RuleHelp(\n 'Keep each project free of circular file imports.',\n 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n 'runtime-architecture': new RuleHelp(\n 'Validate runtime service and API dependency declarations.',\n 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n 'nx-wiring': new RuleHelp(\n 'Wire the required validation targets into the Nx execution graph.',\n 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n 'di-graph': new RuleHelp(\n 'Generate and validate dependency-injection design graphs.',\n 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n 'missing-design-annotation': new RuleHelp(\n 'Declare the application design roots required for DI analysis.',\n 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n 'validate-architecture-unchanged': new RuleHelp(\n 'Keep the committed architecture graph aligned with current dependencies.',\n 'In src/wiring.ts register clients through the BindModule\\'s Binder: binder.createRpcClientAndBind(Api, deployment, new ClientBindOptions(token?, filters?)) and binder.createPubSubClientAndBind(Api, deployment, new PubSubBindOptions(token?)) from @webpieces/http-routing, binder.bindExternal(Api, VendorImpl) for vendor contracts, and the browser binder.createRpcClientAndBind(Api, deployment) and binder.bindExternal(Api, new UseClass(Vendor) | new UseExisting(Token)) from @webpieces/http-client-browser. wiring-format checks canonical wiring.ts in all participating owners; preserve tokens and filters. Review graph changes and runtime-deps.json candidates explicitly.',\n ),\n 'validate-no-architecture-cycles': new RuleHelp(\n 'Keep the project dependency architecture free of cycles.',\n 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n 'validate-packagejson': new RuleHelp(\n 'Align package dependencies with declared project dependencies.',\n 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n 'validate-versions-locked': new RuleHelp(\n 'Pin dependency versions consistently across governed projects.',\n 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n 'validate-eslint-sync': new RuleHelp(\n 'Keep managed ESLint configuration synchronized with its installed templates.',\n 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n 'no-root-union-api-type': new RuleHelp(\n 'Use a stable named root API contract rather than a root union type.',\n 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n 'api-rules-for-openapi': new RuleHelp(\n 'Validate API contracts against their configured OpenAPI requirements.',\n 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n 'api-rules-for-mcp': new RuleHelp(\n 'Validate API contracts against their configured MCP requirements.',\n 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n 'api-lib-dependencies': new RuleHelp(\n 'Validate the configured API library dependency relationships.',\n 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n 'api-lib-path': new RuleHelp(\n 'Use the configured paths for API contract libraries.',\n 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n 'framework-folder': new RuleHelp(\n 'Align framework declarations with their project folder layout.',\n 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n};\n"]}
1
+ {"version":3,"file":"rule-help.js","sourceRoot":"","sources":["../../../../../packages/tooling/nx-webpieces-rules/src/rule-help.ts"],"names":[],"mappings":";;;AAAA,oDAAgD;AAEhD,gEAAgE;AACnD,QAAA,QAAQ,GAAuC;IACxD,eAAe,EAAE,IAAI,oBAAQ,CAAC,kJAAkJ,EAAE,qyBAAqyB,CAAC;IACx9B,uBAAuB,EAAE,IAAI,oBAAQ,CACjC,kDAAkD,EAClD,sIAAsI,CACzI;IACD,sBAAsB,EAAE,IAAI,oBAAQ,CAChC,2DAA2D,EAC3D,sIAAsI,CACzI;IACD,WAAW,EAAE,IAAI,oBAAQ,CACrB,mEAAmE,EACnE,sIAAsI,CACzI;IACD,UAAU,EAAE,IAAI,oBAAQ,CACpB,2DAA2D,EAC3D,sIAAsI,CACzI;IACD,2BAA2B,EAAE,IAAI,oBAAQ,CACrC,gEAAgE,EAChE,sIAAsI,CACzI;IACD,iCAAiC,EAAE,IAAI,oBAAQ,CAC3C,0EAA0E,EAC1E,gqBAAgqB,CACnqB;IACD,iCAAiC,EAAE,IAAI,oBAAQ,CAC3C,0DAA0D,EAC1D,sIAAsI,CACzI;IACD,sBAAsB,EAAE,IAAI,oBAAQ,CAChC,gEAAgE,EAChE,sIAAsI,CACzI;IACD,0BAA0B,EAAE,IAAI,oBAAQ,CACpC,gEAAgE,EAChE,sIAAsI,CACzI;IACD,sBAAsB,EAAE,IAAI,oBAAQ,CAChC,8EAA8E,EAC9E,sIAAsI,CACzI;IACD,wBAAwB,EAAE,IAAI,oBAAQ,CAClC,qEAAqE,EACrE,sIAAsI,CACzI;IACD,uBAAuB,EAAE,IAAI,oBAAQ,CACjC,uEAAuE,EACvE,sIAAsI,CACzI;IACD,mBAAmB,EAAE,IAAI,oBAAQ,CAC7B,mEAAmE,EACnE,sIAAsI,CACzI;IACD,sBAAsB,EAAE,IAAI,oBAAQ,CAChC,+DAA+D,EAC/D,sIAAsI,CACzI;IACD,cAAc,EAAE,IAAI,oBAAQ,CACxB,sDAAsD,EACtD,sIAAsI,CACzI;IACD,kBAAkB,EAAE,IAAI,oBAAQ,CAC5B,gEAAgE,EAChE,sIAAsI,CACzI;IACD,cAAc,EAAE,IAAI,oBAAQ,CACxB,yHAAyH,EACzH,gKAAgK,CACnK;CACJ,CAAC","sourcesContent":["import { RuleHelp } from '@webpieces/rules-sdk';\n\n/** Owner-authored guidance consumed by the registry catalog. */\nexport const ruleHelp: Readonly<Record<string, RuleHelp>> = {\n 'wiring-format': new RuleHelp('Check every canonical wiring.ts: its Wiring/AppWiring class plus the BindModule/RouteModule classes it selects, with their actual registrations.', 'Declare each owner\\'s Wiring/AppWiring class beside its named BindModule/RouteModule classes and their registrations (binder.createRpcClientAndBind, binder.createPubSubClientAndBind, binder.bindExternal, binder.bind chains, browser binder.provide recipes, addRoutes, addFilter) in its src/wiring.ts; select them with literal getBindModules/getRouteModules/getWirings return arrays. An AppWiring may also select a BindModule declared in a library owner\\'s canonical src/wiring.ts, and only an AppWiring selects library Wirings. Keep constructors as prepared-input storage, keep configuration building, environment discovery and initializer/factory bodies in imported implementations, use direct service strings and explicit WiringPolicy declarations. Set maxLines explicitly (agreed upstream limit: 400).'),\n 'no-file-import-cycles': new RuleHelp(\n 'Keep each project free of circular file imports.',\n 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n 'runtime-architecture': new RuleHelp(\n 'Validate runtime service and API dependency declarations.',\n 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n 'nx-wiring': new RuleHelp(\n 'Wire the required validation targets into the Nx execution graph.',\n 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n 'di-graph': new RuleHelp(\n 'Generate and validate dependency-injection design graphs.',\n 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n 'missing-design-annotation': new RuleHelp(\n 'Declare the application design roots required for DI analysis.',\n 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n 'validate-architecture-unchanged': new RuleHelp(\n 'Keep the committed architecture graph aligned with current dependencies.',\n 'In src/wiring.ts register clients through the BindModule\\'s Binder: binder.createRpcClientAndBind(Api, deployment, new ClientBindOptions(token?, filters?)) and binder.createPubSubClientAndBind(Api, deployment, new PubSubBindOptions(token?)) from @webpieces/http-routing, binder.bindExternal(Api, VendorImpl) for vendor contracts, and the browser binder.createRpcClientAndBind(Api, deployment) and binder.bindExternal(Api, new UseClass(Vendor) | new UseExisting(Token)) from @webpieces/http-client-browser. wiring-format checks canonical wiring.ts in all participating owners; preserve tokens and filters. Review graph changes and runtime-deps.json candidates explicitly.',\n ),\n 'validate-no-architecture-cycles': new RuleHelp(\n 'Keep the project dependency architecture free of cycles.',\n 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n 'validate-packagejson': new RuleHelp(\n 'Align package dependencies with declared project dependencies.',\n 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n 'validate-versions-locked': new RuleHelp(\n 'Pin dependency versions consistently across governed projects.',\n 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n 'validate-eslint-sync': new RuleHelp(\n 'Keep managed ESLint configuration synchronized with its installed templates.',\n 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n 'no-root-union-api-type': new RuleHelp(\n 'Use a stable named root API contract rather than a root union type.',\n 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n 'api-rules-for-openapi': new RuleHelp(\n 'Validate API contracts against their configured OpenAPI requirements.',\n 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n 'api-rules-for-mcp': new RuleHelp(\n 'Validate API contracts against their configured MCP requirements.',\n 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n 'api-lib-dependencies': new RuleHelp(\n 'Validate the configured API library dependency relationships.',\n 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n 'api-lib-path': new RuleHelp(\n 'Use the configured paths for API contract libraries.',\n 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n 'framework-folder': new RuleHelp(\n 'Align framework declarations with their project folder layout.',\n 'Apply this policy in source, or review its explicit settings in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n 'product-tags': new RuleHelp(\n 'Require a product:<name> nx tag on every project whose role is listed, so the architecture graphs can show one product.',\n 'Add \"product:<name>\" to the tags in the named project.json, or review the listed roles in {configFile}. An intentional opt-out requires complete OFF settings.',\n ),\n};\n"]}
@@ -19,7 +19,8 @@ exports.optionalTuning = {
19
19
  "api-rules-for-mcp": {},
20
20
  "api-lib-dependencies": {},
21
21
  "api-lib-path": {},
22
- "framework-folder": {}
22
+ "framework-folder": {},
23
+ "product-tags": {}
23
24
  };
24
25
  /** Written for review by setup/sync; never used as a loader fallback. */
25
26
  exports.recommendedSeeds = {
@@ -212,6 +213,16 @@ exports.recommendedSeeds = {
212
213
  ]
213
214
  }
214
215
  ]
216
+ },
217
+ "product-tags": {
218
+ "mode": "RUN_EVERY_TIME",
219
+ "roles": [
220
+ "server",
221
+ "client",
222
+ "app"
223
+ ],
224
+ "turnOffRuleUntilEpoch": 0,
225
+ "turnOffRuleWhileOnBranch": null
215
226
  }
216
227
  };
217
228
  //# sourceMappingURL=rule-settings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rule-settings.js","sourceRoot":"","sources":["../../../../../packages/tooling/nx-webpieces-rules/src/rule-settings.ts"],"names":[],"mappings":"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","sourcesContent":["import { ConfigObject } from '@webpieces/rules-sdk';\n\n/** Optional knobs only. Required behaviour is always supplied by the repository. */\nexport const optionalTuning: Readonly<Record<string, ConfigObject>> = {\n \"wiring-format\": {},\n \"no-file-import-cycles\": {},\n \"runtime-architecture\": {},\n \"nx-wiring\": {},\n \"di-graph\": {},\n \"missing-design-annotation\": {},\n \"validate-architecture-unchanged\": {},\n \"validate-no-architecture-cycles\": {},\n \"validate-packagejson\": {},\n \"validate-versions-locked\": {},\n \"validate-eslint-sync\": {},\n \"no-root-union-api-type\": {},\n \"api-rules-for-openapi\": {},\n \"api-rules-for-mcp\": {},\n \"api-lib-dependencies\": {},\n \"api-lib-path\": {},\n \"framework-folder\": {}\n};\n\n/** Written for review by setup/sync; never used as a loader fallback. */\nexport const recommendedSeeds: Readonly<Record<string, ConfigObject>> = {\n \"wiring-format\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"maxLines\": 400,\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null\n },\n \"no-file-import-cycles\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null\n },\n \"runtime-architecture\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null\n },\n \"nx-wiring\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null\n },\n \"di-graph\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null\n },\n \"missing-design-annotation\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null\n },\n \"validate-architecture-unchanged\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null\n },\n \"validate-no-architecture-cycles\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null\n },\n \"validate-packagejson\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null\n },\n \"validate-versions-locked\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null\n },\n \"validate-eslint-sync\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null\n },\n \"no-root-union-api-type\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null\n },\n \"api-rules-for-openapi\": {\n \"mode\": \"AFFECTED_PROJECT\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null\n },\n \"api-rules-for-mcp\": {\n \"mode\": \"AFFECTED_PROJECT\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null\n },\n \"api-lib-dependencies\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null,\n \"apiLibPackages\": [\n \"@webpieces/core-util\",\n \"tslib\"\n ],\n \"apiClients\": []\n },\n \"api-lib-path\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null,\n \"paths\": [\n \"libraries/apis/**\"\n ]\n },\n \"framework-folder\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null,\n \"entries\": [\n {\n \"paths\": [\n \"libraries/angular/**\"\n ],\n \"frameworkSets\": [\n \"angular\"\n ],\n \"roles\": [\n \"lib\",\n \"designed-lib\"\n ]\n },\n {\n \"paths\": [\n \"libraries/node/**\"\n ],\n \"frameworkSets\": [\n \"node\",\n \"express\"\n ],\n \"roles\": [\n \"lib\",\n \"designed-lib\"\n ]\n },\n {\n \"paths\": [\n \"libraries/universal/**\"\n ],\n \"frameworkSets\": [\n \"browser+node+react-native\"\n ],\n \"roles\": [\n \"lib\",\n \"designed-lib\"\n ]\n },\n {\n \"paths\": [\n \"libraries/rn-browser/**\"\n ],\n \"frameworkSets\": [\n \"browser+react-native\"\n ],\n \"roles\": [\n \"lib\",\n \"designed-lib\"\n ]\n },\n {\n \"paths\": [\n \"libraries/react-native/**\"\n ],\n \"frameworkSets\": [\n \"react-native\"\n ],\n \"roles\": [\n \"lib\",\n \"designed-lib\"\n ]\n },\n {\n \"paths\": [\n \"libraries/apis/internal/**\"\n ],\n \"frameworkSets\": [\n \"browser+node+react-native\"\n ],\n \"roles\": [\n \"api-lib\"\n ]\n },\n {\n \"paths\": [\n \"libraries/apis/external-node/**\"\n ],\n \"frameworkSets\": [\n \"node\"\n ],\n \"roles\": [\n \"api-client\"\n ]\n },\n {\n \"paths\": [\n \"libraries/apis/external-rn-browser/**\"\n ],\n \"frameworkSets\": [\n \"browser+react-native\"\n ],\n \"roles\": [\n \"api-lib\"\n ]\n }\n ]\n }\n};\n"]}
1
+ {"version":3,"file":"rule-settings.js","sourceRoot":"","sources":["../../../../../packages/tooling/nx-webpieces-rules/src/rule-settings.ts"],"names":[],"mappings":"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","sourcesContent":["import { ConfigObject } from '@webpieces/rules-sdk';\n\n/** Optional knobs only. Required behaviour is always supplied by the repository. */\nexport const optionalTuning: Readonly<Record<string, ConfigObject>> = {\n \"wiring-format\": {},\n \"no-file-import-cycles\": {},\n \"runtime-architecture\": {},\n \"nx-wiring\": {},\n \"di-graph\": {},\n \"missing-design-annotation\": {},\n \"validate-architecture-unchanged\": {},\n \"validate-no-architecture-cycles\": {},\n \"validate-packagejson\": {},\n \"validate-versions-locked\": {},\n \"validate-eslint-sync\": {},\n \"no-root-union-api-type\": {},\n \"api-rules-for-openapi\": {},\n \"api-rules-for-mcp\": {},\n \"api-lib-dependencies\": {},\n \"api-lib-path\": {},\n \"framework-folder\": {},\n \"product-tags\": {}\n};\n\n/** Written for review by setup/sync; never used as a loader fallback. */\nexport const recommendedSeeds: Readonly<Record<string, ConfigObject>> = {\n \"wiring-format\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"maxLines\": 400,\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null\n },\n \"no-file-import-cycles\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null\n },\n \"runtime-architecture\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null\n },\n \"nx-wiring\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null\n },\n \"di-graph\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null\n },\n \"missing-design-annotation\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null\n },\n \"validate-architecture-unchanged\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null\n },\n \"validate-no-architecture-cycles\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null\n },\n \"validate-packagejson\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null\n },\n \"validate-versions-locked\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null\n },\n \"validate-eslint-sync\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null\n },\n \"no-root-union-api-type\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null\n },\n \"api-rules-for-openapi\": {\n \"mode\": \"AFFECTED_PROJECT\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null\n },\n \"api-rules-for-mcp\": {\n \"mode\": \"AFFECTED_PROJECT\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null\n },\n \"api-lib-dependencies\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null,\n \"apiLibPackages\": [\n \"@webpieces/core-util\",\n \"tslib\"\n ],\n \"apiClients\": []\n },\n \"api-lib-path\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null,\n \"paths\": [\n \"libraries/apis/**\"\n ]\n },\n \"framework-folder\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null,\n \"entries\": [\n {\n \"paths\": [\n \"libraries/angular/**\"\n ],\n \"frameworkSets\": [\n \"angular\"\n ],\n \"roles\": [\n \"lib\",\n \"designed-lib\"\n ]\n },\n {\n \"paths\": [\n \"libraries/node/**\"\n ],\n \"frameworkSets\": [\n \"node\",\n \"express\"\n ],\n \"roles\": [\n \"lib\",\n \"designed-lib\"\n ]\n },\n {\n \"paths\": [\n \"libraries/universal/**\"\n ],\n \"frameworkSets\": [\n \"browser+node+react-native\"\n ],\n \"roles\": [\n \"lib\",\n \"designed-lib\"\n ]\n },\n {\n \"paths\": [\n \"libraries/rn-browser/**\"\n ],\n \"frameworkSets\": [\n \"browser+react-native\"\n ],\n \"roles\": [\n \"lib\",\n \"designed-lib\"\n ]\n },\n {\n \"paths\": [\n \"libraries/react-native/**\"\n ],\n \"frameworkSets\": [\n \"react-native\"\n ],\n \"roles\": [\n \"lib\",\n \"designed-lib\"\n ]\n },\n {\n \"paths\": [\n \"libraries/apis/internal/**\"\n ],\n \"frameworkSets\": [\n \"browser+node+react-native\"\n ],\n \"roles\": [\n \"api-lib\"\n ]\n },\n {\n \"paths\": [\n \"libraries/apis/external-node/**\"\n ],\n \"frameworkSets\": [\n \"node\"\n ],\n \"roles\": [\n \"api-client\"\n ]\n },\n {\n \"paths\": [\n \"libraries/apis/external-rn-browser/**\"\n ],\n \"frameworkSets\": [\n \"browser+react-native\"\n ],\n \"roles\": [\n \"api-lib\"\n ]\n }\n ]\n },\n \"product-tags\": {\n \"mode\": \"RUN_EVERY_TIME\",\n \"roles\": [\n \"server\",\n \"client\",\n \"app\"\n ],\n \"turnOffRuleUntilEpoch\": 0,\n \"turnOffRuleWhileOnBranch\": null\n }\n};\n"]}