diff --git a/src/typespec-aaz/src/emit.ts b/src/typespec-aaz/src/emit.ts index 7e04755f..58bc5702 100644 --- a/src/typespec-aaz/src/emit.ts +++ b/src/typespec-aaz/src/emit.ts @@ -6,10 +6,12 @@ import { projectProgram, Program, resolvePath, + Namespace, + getService, } from "@typespec/compiler"; import { buildVersionProjections } from "@typespec/versioning"; -import { HttpService, getAllHttpServices, reportIfNoRoutes } from "@typespec/http"; +import { HttpService, getAllHttpServices, reportIfNoRoutes, getHttpService } from "@typespec/http"; import { getResourcePath, swaggerResourcePathToResourceId, } from "./utils.js"; import { AAZResourceSchema } from "./types.js"; import { AAZEmitterOptions, getTracer } from "./lib.js"; @@ -90,7 +92,6 @@ async function createGetResourceOperationEmitter(context: EmitContext = {}; context.options?.resources?.forEach((id) => { resOps[id] = { @@ -103,18 +104,24 @@ async function createGetResourceOperationEmitter(context: EmitContext apiVersion === v.version ); for (const record of versions) { - projectedProgram = context.program; - if (record.projections.length > 0) { - projectedProgram = projectProgram(context.program, record.projections); - } + const projectedProgram = (program = projectProgram(originalProgram, record.projections)); + const projectedServiceNs: Namespace = projectedProgram + ? (projectedProgram.projector.projectedTypes.get(service.type) as Namespace) + : service.type; + const projectedService = + projectedServiceNs === program.getGlobalNamespaceType() + ? { type: program.getGlobalNamespaceType() } + : getService(program, projectedServiceNs)!; const aazContext: AAZEmitterContext = { - program: projectedProgram, - service: service, + program: program, + service: projectedService, sdkContext: sdkContext, apiVersion: apiVersion, tracer, @@ -135,12 +142,13 @@ async function createGetResourceOperationEmitter(context: EmitContext { - const resourcePath = getResourcePath(context.program, op); + const resourcePath = getResourcePath(program, op); const resourceId = swaggerResourcePathToResourceId(resourcePath); if (resourceId in resOps) { resOps[resourceId]!.path = resourcePath;