@webpieces/nx-webpieces-rules 0.4.956 → 0.4.958

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 (33) hide show
  1. package/package.json +7 -7
  2. package/src/lib/api-usage/api-ast.d.ts +11 -3
  3. package/src/lib/api-usage/api-ast.js +109 -14
  4. package/src/lib/api-usage/api-ast.js.map +1 -1
  5. package/src/lib/api-usage/api-contract-errors.d.ts +6 -1
  6. package/src/lib/api-usage/api-contract-errors.js +24 -6
  7. package/src/lib/api-usage/api-contract-errors.js.map +1 -1
  8. package/src/lib/api-usage/api-contract-evidence.js +1 -0
  9. package/src/lib/api-usage/api-contract-evidence.js.map +1 -1
  10. package/src/lib/api-usage/api-doc-rules-scan.d.ts +8 -8
  11. package/src/lib/api-usage/api-doc-rules-scan.js +8 -8
  12. package/src/lib/api-usage/api-doc-rules-scan.js.map +1 -1
  13. package/src/lib/api-usage/api-doc-rules-verdicts.d.ts +9 -7
  14. package/src/lib/api-usage/api-doc-rules-verdicts.js +15 -14
  15. package/src/lib/api-usage/api-doc-rules-verdicts.js.map +1 -1
  16. package/src/lib/api-usage/api-relations.d.ts +33 -8
  17. package/src/lib/api-usage/api-relations.js +32 -1
  18. package/src/lib/api-usage/api-relations.js.map +1 -1
  19. package/src/lib/api-usage/api-scanner.d.ts +3 -1
  20. package/src/lib/api-usage/api-scanner.js +7 -2
  21. package/src/lib/api-usage/api-scanner.js.map +1 -1
  22. package/src/lib/runtime-graph-model.d.ts +2 -2
  23. package/src/lib/runtime-graph-model.js.map +1 -1
  24. package/src/lib/runtime-graph.js +6 -4
  25. package/src/lib/runtime-graph.js.map +1 -1
  26. package/src/lib/runtime-wiring/service-targets.js +6 -0
  27. package/src/lib/runtime-wiring/service-targets.js.map +1 -1
  28. package/src/lib/runtime-wiring/source-extractor.d.ts +5 -0
  29. package/src/lib/runtime-wiring/source-extractor.js +20 -0
  30. package/src/lib/runtime-wiring/source-extractor.js.map +1 -1
  31. package/src/lib/runtime-wiring/source-values.d.ts +6 -1
  32. package/src/lib/runtime-wiring/source-values.js +21 -0
  33. package/src/lib/runtime-wiring/source-values.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"source-values.js","sourceRoot":"","sources":["../../../../../../../packages/tooling/nx-webpieces-rules/src/lib/runtime-wiring/source-values.ts"],"names":[],"mappings":"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","sourcesContent":["import * as path from 'path';\nimport * as ts from 'typescript';\nimport { Option, RuleFailError } from '@webpieces/rules-config';\nimport type { ProjectInfo } from '../project-info';\nimport { ContractIdentity } from './declaration';\nimport type { DeclaredTarget, PolicyValue } from './declaration';\nimport { PreparedTargets } from './prepared-targets';\nimport { WiringSourceTypes } from './source-types';\n\n/** Resolves imported symbols and bounded literal expressions without invoking application code. */\nexport class WiringSourceValues {\n constructor(\n private readonly workspaceRoot: string,\n private readonly infos: ReadonlyMap<string, ProjectInfo>,\n private readonly checker: ts.TypeChecker,\n ) {}\n\n symbolName(node: ts.Node): string {\n const symbol = this.symbol(node);\n const declaration = symbol?.declarations?.[0];\n if (\n declaration !== undefined &&\n ts.isVariableDeclaration(declaration) &&\n declaration.initializer !== undefined &&\n (ts.isPropertyAccessExpression(declaration.initializer) ||\n ts.isElementAccessExpression(declaration.initializer))\n )\n return this.symbolName(declaration.initializer);\n return symbol?.getName() ?? node.getText().split('.').pop()!;\n }\n\n identity(node: ts.Node): ContractIdentity {\n const symbol = this.symbol(node);\n const declaration = symbol?.declarations?.[0];\n if (declaration === undefined)\n this.fail(`Cannot resolve canonical identity for ${node.getText()}.`);\n const file = path.resolve(declaration!.getSourceFile().fileName);\n const owners = [...this.infos.values()].filter(\n (info) =>\n info.root !== '.' &&\n info.root !== '' &&\n file.startsWith(path.resolve(this.workspaceRoot, info.root) + path.sep),\n );\n owners.sort((left, right) => right.root.length - left.root.length);\n if (owners.length === 0)\n this.fail(\n `No workspace owner for ${node.getText()} at ${file}; configure source tsconfig paths.`,\n );\n return new ContractIdentity(owners[0].name, symbol!.getName());\n }\n\n target(expression: ts.Expression | undefined, depth: number = 0): DeclaredTarget {\n if (expression === undefined || depth > 20)\n this.fail('Missing or cyclic runtime target expression.');\n const value = expression!;\n if (ts.isStringLiteralLike(value)) return { kind: 'service', service: value.text };\n if (ts.isNewExpression(value) && ['ClientConfig', 'TaskClientConfig'].includes(this.symbolName(value.expression)))\n return this.target(value.arguments?.[0], depth + 1);\n const declaration = this.symbol(value)?.declarations?.[0];\n if (declaration !== undefined && ts.isVariableDeclaration(declaration))\n return this.target(declaration.initializer, depth + 1);\n if (declaration !== undefined && ts.isPropertyAssignment(declaration))\n return this.target(declaration.initializer, depth + 1);\n if (declaration !== undefined && ts.isParameter(declaration))\n return { kind: 'parameter', parameter: this.parameterPath(value) };\n if (ts.isPropertyAccessExpression(value)) {\n const type = this.checker.getTypeAtLocation(value);\n if ((type.flags & ts.TypeFlags.StringLike) !== 0)\n return { kind: 'parameter', parameter: this.parameterPath(value) };\n }\n this.fail(\n `Unsupported target ${value.getText()}; use a literal service or a prepared constructor field.`,\n );\n }\n\n transport(expression: ts.Expression): 'rpc' | 'pubsub' {\n const declaration = this.symbol(expression)?.declarations?.[0];\n if (declaration === undefined || !ts.isClassDeclaration(declaration))\n this.fail(`API ${expression.getText()} must resolve to its source contract class.`);\n for (const decorator of ts.getDecorators(declaration as ts.ClassDeclaration) ?? []) {\n const expression = decorator.expression;\n const name = this.symbolName(\n ts.isCallExpression(expression) ? expression.expression : expression,\n );\n if (name === 'PubSub') return 'pubsub';\n }\n return 'rpc';\n }\n\n arguments(invocation: ts.NewExpression | ts.CallExpression): Record<string, DeclaredTarget> {\n const targets: Record<string, DeclaredTarget> = {};\n const signature = this.checker.getResolvedSignature(invocation);\n const prepared = new PreparedTargets(this.checker);\n for (const path of prepared.paths(invocation, 'target')) {\n const parts = path.split('.');\n const name = parts[0];\n const suffix = parts.slice(1);\n const index = signature?.getParameters().findIndex((parameter: ts.Symbol) => parameter.name === name) ?? -1;\n const expression = invocation.arguments?.[index];\n if (expression === undefined) this.fail(`Missing prepared destination argument ${path}.`);\n if (suffix.length === 0) targets[path] = this.target(expression);\n else {\n const value = this.preparedValue(expression!, suffix);\n targets[path] = value instanceof ForwardedParameter\n ? { kind: 'parameter', parameter: value.parameter } : this.target(value);\n }\n }\n return targets;\n }\n\n hasExternalConsumer(\n owner: string,\n project: string,\n exportedName: string,\n program: ts.Program,\n ): boolean {\n const info = this.infos.get(owner);\n if (info === undefined) return false;\n const root = path.resolve(this.workspaceRoot, info.root) + path.sep;\n let found = false;\n const visit = (node: ts.Node): void => {\n if (ts.isClassDeclaration(node)) {\n // An adapter implements a seam; it does not prove a business caller uses that seam.\n const adapter = node.heritageClauses?.some(\n (clause) =>\n clause.token === ts.SyntaxKind.ImplementsKeyword &&\n clause.types.some((type) => {\n if (this.symbol(type.expression)?.getName() !== exportedName)\n return false;\n return this.identity(type.expression).project === project;\n }),\n );\n if (adapter) return;\n for (const member of node.members) {\n if (!ts.isConstructorDeclaration(member)) continue;\n for (const parameter of member.parameters) {\n if (parameter.type === undefined || !ts.isTypeReferenceNode(parameter.type))\n continue;\n const symbol = this.symbol(parameter.type.typeName);\n const declaration = symbol?.declarations?.[0];\n if (\n declaration === undefined ||\n symbol?.getName() !== exportedName ||\n !(\n ts.isInterfaceDeclaration(declaration) ||\n ts.isClassDeclaration(declaration)\n )\n )\n continue;\n const identity = this.identity(parameter.type.typeName);\n if (identity.project === project && identity.exportedName === exportedName)\n found = true;\n }\n }\n }\n ts.forEachChild(node, visit);\n };\n for (const file of program.getSourceFiles()) {\n if (\n file.isDeclarationFile ||\n !file.fileName.startsWith(root) ||\n /(?:\\.spec\\.|\\.test\\.|\\/__tests__\\/)/.test(file.fileName)\n )\n continue;\n visit(file);\n }\n return found;\n }\n\n policies(\n invocation: ts.NewExpression | ts.CallExpression,\n ): Record<string, PolicyValue> {\n const policies: Record<string, PolicyValue> = {};\n const signature = this.checker.getResolvedSignature(invocation);\n const prepared = new PreparedTargets(this.checker);\n for (const path of prepared.paths(invocation, 'policy')) {\n const parts = path.split('.');\n const name = parts[0];\n const suffix = parts.slice(1);\n const index = signature?.getParameters().findIndex((parameter: ts.Symbol) => parameter.name === name) ?? -1;\n const supplied = invocation.arguments?.[index];\n if (supplied === undefined) this.fail(`Missing explicit policy argument ${path}.`);\n const argument = suffix.length === 0 ? supplied! : this.preparedValue(supplied!, suffix);\n if (argument instanceof ForwardedParameter) {\n policies[path] = { parameter: argument.parameter };\n continue;\n }\n if (ts.isIdentifier(argument) || ts.isPropertyAccessExpression(argument)) {\n policies[path] = { parameter: this.parameterPath(argument) };\n continue;\n }\n if (!ts.isNewExpression(argument) || !new WiringSourceTypes(this.checker).isFramework(argument.expression, 'WiringPolicy'))\n this.fail('Pass an explicit named WiringPolicy to conditional modules.');\n const condition = argument.arguments?.[1];\n policies[path] = condition?.kind === ts.SyntaxKind.TrueKeyword ? true\n : condition?.kind === ts.SyntaxKind.FalseKeyword ? false : 'runtime';\n }\n return policies;\n }\n\n condition(call: ts.Node): string | undefined {\n let child = call;\n let node: ts.Node | undefined = call.parent;\n let policy: string | undefined;\n while (\n node !== undefined &&\n !ts.isClassDeclaration(node) &&\n !ts.isFunctionDeclaration(node)\n ) {\n if (ts.isIfStatement(node)) {\n if (policy !== undefined || child === node.elseStatement)\n this.fail(\n 'Nested topology policies and else branches require separate explicitly selected modules.',\n );\n const condition = node.expression;\n if (!ts.isPropertyAccessExpression(condition) || condition.name.text !== 'enabled')\n this.fail('Topology conditions must use a named WiringPolicy.enabled.');\n policy = this.parameterPath((condition as ts.PropertyAccessExpression).expression);\n }\n if (\n ts.isConditionalExpression(node) ||\n ts.isSwitchStatement(node) ||\n ts.isIterationStatement(node, false)\n )\n this.fail('Dynamic topology branches and loops require explicit selected modules.');\n child = node;\n node = node.parent;\n }\n return policy;\n }\n\n private preparedValue(expression: ts.Expression, suffix: readonly string[]): ts.Expression | ForwardedParameter {\n const base = this.symbol(expression)?.declarations?.[0];\n if (base !== undefined && ts.isParameter(base))\n return new ForwardedParameter([this.parameterPath(expression), ...suffix].join('.'));\n if (ts.isPropertyAccessExpression(expression)) {\n const root = expression.expression;\n if (root.kind === ts.SyntaxKind.ThisKeyword || ts.isPropertyAccessExpression(root))\n return new ForwardedParameter([this.parameterPath(expression), ...suffix].join('.'));\n }\n let type = this.checker.getTypeAtLocation(expression);\n let declaration: ts.Declaration | undefined;\n for (const name of suffix) {\n const property = type.getProperty(name);\n declaration = property?.valueDeclaration;\n if (property === undefined || declaration === undefined)\n this.fail(`Cannot resolve prepared destination ${expression.getText()}.${suffix.join('.')}.`);\n type = this.checker.getTypeOfSymbolAtLocation(property!, declaration!);\n }\n if (declaration !== undefined && ts.isPropertyAssignment(declaration))\n return declaration.initializer;\n if (declaration !== undefined && ts.isPropertyDeclaration(declaration) && declaration.initializer !== undefined)\n return declaration.initializer;\n this.fail(`Unresolved destination ${expression.getText()}.${suffix.join('.')}; prepare a statically resolvable destination, never a computed config function.`);\n }\n\n private parameterPath(expression: ts.Expression): string {\n if (ts.isPropertyAccessExpression(expression)) {\n if (expression.expression.kind === ts.SyntaxKind.ThisKeyword) return expression.name.text;\n return `${this.parameterPath(expression.expression)}.${expression.name.text}`;\n }\n if (ts.isIdentifier(expression)) return expression.text;\n this.fail(`Unsupported prepared parameter path ${expression.getText()}.`);\n }\n\n private symbol(node: ts.Node): ts.Symbol | undefined {\n const symbol = this.checker.getSymbolAtLocation(node);\n return symbol !== undefined && (symbol.flags & ts.SymbolFlags.Alias) !== 0\n ? this.checker.getAliasedSymbol(symbol)\n : symbol;\n }\n\n private fail(message: string): never {\n throw new RuleFailError('validate-runtime-architecture', message, undefined, undefined, [\n new Option(\n 'Use qualified imports and bounded target declarations in src/wiring.ts.',\n true,\n ),\n ]);\n }\n}\n\nclass ForwardedParameter {\n constructor(readonly parameter: string) {}\n}\n"]}
1
+ {"version":3,"file":"source-values.js","sourceRoot":"","sources":["../../../../../../../packages/tooling/nx-webpieces-rules/src/lib/runtime-wiring/source-values.ts"],"names":[],"mappings":"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","sourcesContent":["import * as path from 'path';\nimport * as ts from 'typescript';\nimport { Option, RuleFailError } from '@webpieces/rules-config';\nimport type { ProjectInfo } from '../project-info';\nimport { ContractIdentity } from './declaration';\nimport type { DeclaredTarget, PolicyValue } from './declaration';\nimport { PreparedTargets } from './prepared-targets';\nimport { WiringSourceTypes } from './source-types';\n\n/** Resolves imported symbols and bounded literal expressions without invoking application code. */\nexport class WiringSourceValues {\n constructor(\n private readonly workspaceRoot: string,\n private readonly infos: ReadonlyMap<string, ProjectInfo>,\n private readonly checker: ts.TypeChecker,\n ) {}\n\n symbolName(node: ts.Node): string {\n const symbol = this.symbol(node);\n const declaration = symbol?.declarations?.[0];\n if (\n declaration !== undefined &&\n ts.isVariableDeclaration(declaration) &&\n declaration.initializer !== undefined &&\n (ts.isPropertyAccessExpression(declaration.initializer) ||\n ts.isElementAccessExpression(declaration.initializer))\n )\n return this.symbolName(declaration.initializer);\n return symbol?.getName() ?? node.getText().split('.').pop()!;\n }\n\n identity(node: ts.Node): ContractIdentity {\n const symbol = this.symbol(node);\n const declaration = symbol?.declarations?.[0];\n if (declaration === undefined)\n this.fail(`Cannot resolve canonical identity for ${node.getText()}.`);\n const file = path.resolve(declaration!.getSourceFile().fileName);\n const owners = [...this.infos.values()].filter(\n (info) =>\n info.root !== '.' &&\n info.root !== '' &&\n file.startsWith(path.resolve(this.workspaceRoot, info.root) + path.sep),\n );\n owners.sort((left, right) => right.root.length - left.root.length);\n if (owners.length === 0)\n this.fail(\n `No workspace owner for ${node.getText()} at ${file}; configure source tsconfig paths.`,\n );\n return new ContractIdentity(owners[0].name, symbol!.getName());\n }\n\n target(expression: ts.Expression | undefined, depth: number = 0): DeclaredTarget {\n if (expression === undefined || depth > 20)\n this.fail('Missing or cyclic runtime target expression.');\n const value = expression!;\n if (ts.isStringLiteralLike(value)) return { kind: 'service', service: value.text };\n if (ts.isNewExpression(value) && ['ClientConfig', 'TaskClientConfig'].includes(this.symbolName(value.expression)))\n return this.target(value.arguments?.[0], depth + 1);\n const declaration = this.symbol(value)?.declarations?.[0];\n if (declaration !== undefined && ts.isVariableDeclaration(declaration))\n return this.target(declaration.initializer, depth + 1);\n if (declaration !== undefined && ts.isPropertyAssignment(declaration))\n return this.target(declaration.initializer, depth + 1);\n if (declaration !== undefined && ts.isParameter(declaration))\n return { kind: 'parameter', parameter: this.parameterPath(value) };\n if (ts.isPropertyAccessExpression(value)) {\n const type = this.checker.getTypeAtLocation(value);\n if ((type.flags & ts.TypeFlags.StringLike) !== 0)\n return { kind: 'parameter', parameter: this.parameterPath(value) };\n }\n this.fail(\n `Unsupported target ${value.getText()}; use a literal service or a prepared constructor field.`,\n );\n }\n\n transport(expression: ts.Expression): 'rpc' | 'pubsub' | 'external' {\n const declaration = this.symbol(expression)?.declarations?.[0];\n if (declaration === undefined || !ts.isClassDeclaration(declaration))\n this.fail(`API ${expression.getText()} must resolve to its source contract class.`);\n if (this.isExternalOutbound(declaration as ts.ClassDeclaration)) return 'external';\n for (const decorator of ts.getDecorators(declaration as ts.ClassDeclaration) ?? []) {\n const expression = decorator.expression;\n const name = this.symbolName(\n ts.isCallExpression(expression) ? expression.expression : expression,\n );\n if (name === 'PubSub') return 'pubsub';\n }\n return 'rpc';\n }\n\n /**\n * True when every `@Endpoint` of the contract declares `EXTERNAL_OUTBOUND` (its 4th argument): an\n * outside system's API, which a client reaches as a VENDOR node and no server here implements.\n */\n private isExternalOutbound(declaration: ts.ClassDeclaration): boolean {\n let endpoints = 0;\n for (const member of declaration.members) {\n for (const decorator of ts.canHaveDecorators(member) ? (ts.getDecorators(member) ?? []) : []) {\n const call = decorator.expression;\n if (!ts.isCallExpression(call) || this.symbolName(call.expression) !== 'Endpoint') continue;\n endpoints++;\n const kind = call.arguments[3];\n if (kind === undefined || this.symbolName(kind) !== 'EXTERNAL_OUTBOUND') return false;\n }\n }\n return endpoints > 0;\n }\n\n arguments(invocation: ts.NewExpression | ts.CallExpression): Record<string, DeclaredTarget> {\n const targets: Record<string, DeclaredTarget> = {};\n const signature = this.checker.getResolvedSignature(invocation);\n const prepared = new PreparedTargets(this.checker);\n for (const path of prepared.paths(invocation, 'target')) {\n const parts = path.split('.');\n const name = parts[0];\n const suffix = parts.slice(1);\n const index = signature?.getParameters().findIndex((parameter: ts.Symbol) => parameter.name === name) ?? -1;\n const expression = invocation.arguments?.[index];\n if (expression === undefined) this.fail(`Missing prepared destination argument ${path}.`);\n if (suffix.length === 0) targets[path] = this.target(expression);\n else {\n const value = this.preparedValue(expression!, suffix);\n targets[path] = value instanceof ForwardedParameter\n ? { kind: 'parameter', parameter: value.parameter } : this.target(value);\n }\n }\n return targets;\n }\n\n hasExternalConsumer(\n owner: string,\n project: string,\n exportedName: string,\n program: ts.Program,\n ): boolean {\n const info = this.infos.get(owner);\n if (info === undefined) return false;\n const root = path.resolve(this.workspaceRoot, info.root) + path.sep;\n let found = false;\n const visit = (node: ts.Node): void => {\n if (ts.isClassDeclaration(node)) {\n // An adapter implements a seam; it does not prove a business caller uses that seam.\n const adapter = node.heritageClauses?.some(\n (clause) =>\n clause.token === ts.SyntaxKind.ImplementsKeyword &&\n clause.types.some((type) => {\n if (this.symbol(type.expression)?.getName() !== exportedName)\n return false;\n return this.identity(type.expression).project === project;\n }),\n );\n if (adapter) return;\n for (const member of node.members) {\n if (!ts.isConstructorDeclaration(member)) continue;\n for (const parameter of member.parameters) {\n if (parameter.type === undefined || !ts.isTypeReferenceNode(parameter.type))\n continue;\n const symbol = this.symbol(parameter.type.typeName);\n const declaration = symbol?.declarations?.[0];\n if (\n declaration === undefined ||\n symbol?.getName() !== exportedName ||\n !(\n ts.isInterfaceDeclaration(declaration) ||\n ts.isClassDeclaration(declaration)\n )\n )\n continue;\n const identity = this.identity(parameter.type.typeName);\n if (identity.project === project && identity.exportedName === exportedName)\n found = true;\n }\n }\n }\n ts.forEachChild(node, visit);\n };\n for (const file of program.getSourceFiles()) {\n if (\n file.isDeclarationFile ||\n !file.fileName.startsWith(root) ||\n /(?:\\.spec\\.|\\.test\\.|\\/__tests__\\/)/.test(file.fileName)\n )\n continue;\n visit(file);\n }\n return found;\n }\n\n policies(\n invocation: ts.NewExpression | ts.CallExpression,\n ): Record<string, PolicyValue> {\n const policies: Record<string, PolicyValue> = {};\n const signature = this.checker.getResolvedSignature(invocation);\n const prepared = new PreparedTargets(this.checker);\n for (const path of prepared.paths(invocation, 'policy')) {\n const parts = path.split('.');\n const name = parts[0];\n const suffix = parts.slice(1);\n const index = signature?.getParameters().findIndex((parameter: ts.Symbol) => parameter.name === name) ?? -1;\n const supplied = invocation.arguments?.[index];\n if (supplied === undefined) this.fail(`Missing explicit policy argument ${path}.`);\n const argument = suffix.length === 0 ? supplied! : this.preparedValue(supplied!, suffix);\n if (argument instanceof ForwardedParameter) {\n policies[path] = { parameter: argument.parameter };\n continue;\n }\n if (ts.isIdentifier(argument) || ts.isPropertyAccessExpression(argument)) {\n policies[path] = { parameter: this.parameterPath(argument) };\n continue;\n }\n if (!ts.isNewExpression(argument) || !new WiringSourceTypes(this.checker).isFramework(argument.expression, 'WiringPolicy'))\n this.fail('Pass an explicit named WiringPolicy to conditional modules.');\n const condition = argument.arguments?.[1];\n policies[path] = condition?.kind === ts.SyntaxKind.TrueKeyword ? true\n : condition?.kind === ts.SyntaxKind.FalseKeyword ? false : 'runtime';\n }\n return policies;\n }\n\n condition(call: ts.Node): string | undefined {\n let child = call;\n let node: ts.Node | undefined = call.parent;\n let policy: string | undefined;\n while (\n node !== undefined &&\n !ts.isClassDeclaration(node) &&\n !ts.isFunctionDeclaration(node)\n ) {\n if (ts.isIfStatement(node)) {\n if (policy !== undefined || child === node.elseStatement)\n this.fail(\n 'Nested topology policies and else branches require separate explicitly selected modules.',\n );\n const condition = node.expression;\n if (!ts.isPropertyAccessExpression(condition) || condition.name.text !== 'enabled')\n this.fail('Topology conditions must use a named WiringPolicy.enabled.');\n policy = this.parameterPath((condition as ts.PropertyAccessExpression).expression);\n }\n if (\n ts.isConditionalExpression(node) ||\n ts.isSwitchStatement(node) ||\n ts.isIterationStatement(node, false)\n )\n this.fail('Dynamic topology branches and loops require explicit selected modules.');\n child = node;\n node = node.parent;\n }\n return policy;\n }\n\n private preparedValue(expression: ts.Expression, suffix: readonly string[]): ts.Expression | ForwardedParameter {\n const base = this.symbol(expression)?.declarations?.[0];\n if (base !== undefined && ts.isParameter(base))\n return new ForwardedParameter([this.parameterPath(expression), ...suffix].join('.'));\n if (ts.isPropertyAccessExpression(expression)) {\n const root = expression.expression;\n if (root.kind === ts.SyntaxKind.ThisKeyword || ts.isPropertyAccessExpression(root))\n return new ForwardedParameter([this.parameterPath(expression), ...suffix].join('.'));\n }\n let type = this.checker.getTypeAtLocation(expression);\n let declaration: ts.Declaration | undefined;\n for (const name of suffix) {\n const property = type.getProperty(name);\n declaration = property?.valueDeclaration;\n if (property === undefined || declaration === undefined)\n this.fail(`Cannot resolve prepared destination ${expression.getText()}.${suffix.join('.')}.`);\n type = this.checker.getTypeOfSymbolAtLocation(property!, declaration!);\n }\n if (declaration !== undefined && ts.isPropertyAssignment(declaration))\n return declaration.initializer;\n if (declaration !== undefined && ts.isPropertyDeclaration(declaration) && declaration.initializer !== undefined)\n return declaration.initializer;\n this.fail(`Unresolved destination ${expression.getText()}.${suffix.join('.')}; prepare a statically resolvable destination, never a computed config function.`);\n }\n\n private parameterPath(expression: ts.Expression): string {\n if (ts.isPropertyAccessExpression(expression)) {\n if (expression.expression.kind === ts.SyntaxKind.ThisKeyword) return expression.name.text;\n return `${this.parameterPath(expression.expression)}.${expression.name.text}`;\n }\n if (ts.isIdentifier(expression)) return expression.text;\n this.fail(`Unsupported prepared parameter path ${expression.getText()}.`);\n }\n\n private symbol(node: ts.Node): ts.Symbol | undefined {\n const symbol = this.checker.getSymbolAtLocation(node);\n return symbol !== undefined && (symbol.flags & ts.SymbolFlags.Alias) !== 0\n ? this.checker.getAliasedSymbol(symbol)\n : symbol;\n }\n\n private fail(message: string): never {\n throw new RuleFailError('validate-runtime-architecture', message, undefined, undefined, [\n new Option(\n 'Use qualified imports and bounded target declarations in src/wiring.ts.',\n true,\n ),\n ]);\n }\n}\n\nclass ForwardedParameter {\n constructor(readonly parameter: string) {}\n}\n"]}