(key: string, method: RpcMethod, lines: string[], classes: string[], indent: string, groupExperimental: boolean, groupDeprecated: boolean)
| 1982 | } |
| 1983 | |
| 1984 | function emitSessionMethod(key: string, method: RpcMethod, lines: string[], classes: string[], indent: string, groupExperimental: boolean, groupDeprecated: boolean): void { |
| 1985 | const methodName = toPascalCase(key); |
| 1986 | const isInternal = method.visibility === "internal"; |
| 1987 | const methodVisibility = isInternal ? "internal" : "public"; |
| 1988 | const resultSchema = getMethodResultSchema(method); |
| 1989 | let resultClassName = !isVoidSchema(resultSchema) ? resultTypeName(method) : ""; |
| 1990 | if (!isVoidSchema(resultSchema) && method.stability === "experimental" && !nonExperimentalRpcTypes.has(resultClassName)) { |
| 1991 | experimentalRpcTypes.add(resultClassName); |
| 1992 | } |
| 1993 | if (!isVoidSchema(resultSchema)) { |
| 1994 | resultClassName = emitRpcResultType(resultClassName, resultSchema!, methodVisibility, classes); |
| 1995 | } |
| 1996 | |
| 1997 | const effectiveParams = resolveMethodParamsSchema(method); |
| 1998 | const paramEntries = (effectiveParams?.properties ? Object.entries(effectiveParams.properties) : []).filter(([k]) => k !== "sessionId"); |
| 1999 | const requiredSet = new Set(effectiveParams?.required || []); |
| 2000 | const useRequestParameter = |
| 2001 | paramEntries.length > 0 && |
| 2002 | !!getNullableInner(method.params) && |
| 2003 | paramEntries.every(([name]) => !requiredSet.has(name)); |
| 2004 | |
| 2005 | // Sort so required params come before optional (C# requires defaults at end) |
| 2006 | paramEntries.sort((a, b) => { |
| 2007 | const aReq = requiredSet.has(a[0]) ? 0 : 1; |
| 2008 | const bReq = requiredSet.has(b[0]) ? 0 : 1; |
| 2009 | return aReq - bReq; |
| 2010 | }); |
| 2011 | |
| 2012 | const requestClassName = paramsTypeName(method); |
| 2013 | const wireRequestClassName = useRequestParameter ? `${requestClassName}WithSession` : requestClassName; |
| 2014 | if (method.stability === "experimental" && !nonExperimentalRpcTypes.has(requestClassName)) { |
| 2015 | experimentalRpcTypes.add(requestClassName); |
| 2016 | if (useRequestParameter && !nonExperimentalRpcTypes.has(wireRequestClassName)) { |
| 2017 | experimentalRpcTypes.add(wireRequestClassName); |
| 2018 | } |
| 2019 | } |
| 2020 | if (effectiveParams?.properties && Object.keys(effectiveParams.properties).length > 0) { |
| 2021 | if (useRequestParameter) { |
| 2022 | const publicParams: JSONSchema7 = { |
| 2023 | ...effectiveParams, |
| 2024 | properties: Object.fromEntries(paramEntries), |
| 2025 | required: effectiveParams.required?.filter((name) => name !== "sessionId"), |
| 2026 | }; |
| 2027 | const publicReqClass = emitRpcClass(requestClassName, publicParams, methodVisibility, classes); |
| 2028 | if (publicReqClass) classes.push(publicReqClass); |
| 2029 | const wireReqClass = emitRpcClass(wireRequestClassName, effectiveParams, "internal", classes); |
| 2030 | if (wireReqClass) classes.push(wireReqClass); |
| 2031 | } else { |
| 2032 | const reqClass = emitRpcClass(requestClassName, effectiveParams, "internal", classes); |
| 2033 | if (reqClass) classes.push(reqClass); |
| 2034 | } |
| 2035 | } |
| 2036 | |
| 2037 | const sigParams: string[] = []; |
| 2038 | const bodyAssignments = [`SessionId = _session.SessionId`]; |
| 2039 | const argumentNullChecks: string[] = []; |
| 2040 | const parameterDescriptions: Array<{ name: string; description?: string; escapeDescription?: boolean }> = []; |
| 2041 |
no test coverage detected
searching dependent graphs…