MCPcopy Index your code
hub / github.com/github/copilot-sdk / emitSessionRpcClasses

Function emitSessionRpcClasses

scripts/codegen/csharp.ts:1947–1982  ·  view source on GitHub ↗
(node: Record<string, unknown>, classes: string[])

Source from the content-addressed store, hash-verified

1945}
1946
1947function emitSessionRpcClasses(node: Record<string, unknown>, classes: string[]): string[] {
1948 const result: string[] = [];
1949 const groups = Object.entries(node).filter(([, v]) => typeof v === "object" && v !== null && !isRpcMethod(v));
1950 const topLevelMethods = Object.entries(node).filter(([, v]) => isRpcMethod(v));
1951
1952 const srLines = [`/// <summary>Provides typed session-scoped RPC methods.</summary>`, `public sealed class SessionRpc`, `{`, ` private readonly CopilotSession _session;`, ""];
1953 srLines.push(` internal SessionRpc(CopilotSession session)`, ` {`, ` _session = session;`);
1954 srLines.push(` }`);
1955 srLines.push("", ` internal CopilotSession Session => _session;`);
1956 for (const [groupName] of groups) {
1957 const propertyName = toPascalCase(groupName);
1958 srLines.push(
1959 "",
1960 ` /// <summary>${propertyName} APIs.</summary>`,
1961 ` public ${propertyName}Api ${propertyName} =>`,
1962 ` field ??`,
1963 ` Interlocked.CompareExchange(ref field, new(_session), null) ??`,
1964 ` field;`
1965 );
1966 }
1967
1968 // Emit top-level session RPC methods directly on the SessionRpc class
1969 const topLevelLines: string[] = [];
1970 for (const [key, value] of topLevelMethods) {
1971 emitSessionMethod(key, value as RpcMethod, topLevelLines, classes, " ", false, false);
1972 }
1973 srLines.push(...topLevelLines);
1974
1975 srLines.push(`}`);
1976 result.push(srLines.join("\n"));
1977
1978 for (const [groupName, groupNode] of groups) {
1979 result.push(...emitSessionApiClass(`${toPascalCase(groupName)}Api`, groupNode as Record<string, unknown>, classes));
1980 }
1981 return result;
1982}
1983
1984function emitSessionMethod(key: string, method: RpcMethod, lines: string[], classes: string[], indent: string, groupExperimental: boolean, groupDeprecated: boolean): void {
1985 const methodName = toPascalCase(key);

Callers 1

generateRpcCodeFunction · 0.85

Calls 6

emitSessionMethodFunction · 0.85
emitSessionApiClassFunction · 0.85
joinMethod · 0.80
isRpcMethodFunction · 0.70
toPascalCaseFunction · 0.70
pushMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…