AtsTypeScriptCodeGenerator.cs (467)
201WriteLine($"{indent}/** {lines[0]} */");
205WriteLine($"{indent}/**");
208WriteLine(line.Length == 0 ? $"{indent} *" : $"{indent} * {line}");
210WriteLine($"{indent} */");
458WriteLine("""
511WriteLine();
589WriteLine("// ============================================================================");
590WriteLine("// Handle Type Aliases (Internal - not exported to users)");
591WriteLine("// ============================================================================");
592WriteLine();
600WriteLine($"type {handleName} = Handle<'{typeId}'>;");
601WriteLine();
624WriteLine("// ============================================================================");
625WriteLine("// Enum Types");
626WriteLine("// ============================================================================");
627WriteLine();
632WriteLine($"export enum {enumType.Name} {{");
642WriteLine($" {value.Name} = \"{value.Name}\",");
645WriteLine("}");
646WriteLine();
664WriteLine("// ============================================================================");
665WriteLine("// DTO Interfaces");
666WriteLine("// ============================================================================");
667WriteLine();
674WriteLine($"export interface {interfaceName} {{");
685WriteLine($" {propName}?: {tsType};");
692WriteLine($" /** {clientOnly.Summary} */");
693WriteLine($" {clientOnly.Name}?: {clientOnly.Type};");
696WriteLine("}");
697WriteLine();
710WriteLine("// ============================================================================");
711WriteLine("// Exported Values");
712WriteLine("// ============================================================================");
713WriteLine();
717WriteLine(exportedNamespace.Content);
718WriteLine();
732WriteLine("// ============================================================================");
733WriteLine("// Options Interfaces");
734WriteLine("// ============================================================================");
735WriteLine();
739WriteLine($"export interface {interfaceName} {{");
744WriteLine($" {param.Name}?: {tsType};");
746WriteLine("}");
747WriteLine();
755WriteLine($" {propertyName}(): {returnType};");
773WriteLine($" readonly {propertyName}: AspireDict<{keyType}, {valueType}>;");
781WriteLine($" readonly {propertyName}: AspireList<{elementType}>;");
787WriteLine($" {propertyName}: {{");
793WriteLine($" get: () => {promiseInterfaceName};");
798WriteLine($" get: () => Promise<{returnTypeName}>;");
808WriteLine($" set: (value: {valueType}) => Promise<void>;");
812WriteLine(" };");
819WriteLine("// ============================================================================");
820WriteLine($"// {interfaceName}");
821WriteLine("// ============================================================================");
822WriteLine();
824WriteLine($"export interface {interfaceName} {{");
825WriteLine(" toJSON(): MarshalledHandle;");
850WriteLine($" {capability.MethodName}({signature.ParameterList}): {promiseInterfaceName};");
855WriteLine($" {capability.MethodName}({signature.ParameterList}): Promise<{returnType}>;");
860WriteLine($" {capability.MethodName}({signature.ParameterList}): {_projector.GetBuilderPromiseInterfaceForMethod(builder, capability)};");
864WriteLine("}");
865WriteLine();
887WriteLine($"export interface {promiseInterfaceName} extends PromiseLike<{interfaceName}> {{");
904WriteLine($" {capability.MethodName}({signature.ParameterList}): {returnPromiseInterfaceName};");
909WriteLine($" {capability.MethodName}({signature.ParameterList}): Promise<{returnType}>;");
914WriteLine($" {capability.MethodName}({signature.ParameterList}): {_projector.GetBuilderPromiseInterfaceForMethod(builder, capability)};");
918WriteLine("}");
919WriteLine();
930WriteLine($" {signature.MethodName}({signature.ParameterList}): {_projector.GetPublicPromiseInterfaceName(capability.ReturnType.TypeId)};");
934WriteLine($" {signature.MethodName}({signature.ParameterList}): {TypeScriptApiProjector.GetPromiseInterfaceName(className)};");
939WriteLine($" {signature.MethodName}({signature.ParameterList}): Promise<{returnType}>;");
948WriteLine("// ============================================================================");
949WriteLine($"// {interfaceName}");
950WriteLine("// ============================================================================");
951WriteLine();
953WriteLine($"export interface {interfaceName} {{");
954WriteLine(" toJSON(): MarshalledHandle;");
977WriteLine("}");
978WriteLine();
986WriteLine($"export interface {promiseInterfaceName} extends PromiseLike<{interfaceName}> {{");
995WriteLine("}");
996WriteLine();
1006WriteLine("// ============================================================================");
1007WriteLine($"// {implementationClassName}");
1008WriteLine("// ============================================================================");
1009WriteLine();
1015WriteLine($"class {implementationClassName} extends ResourceBuilderBase<{handleType}> implements {builder.BuilderClassName} {{");
1018WriteLine($" constructor(handle: {handleType}, client: AspireClientRpc) {{");
1019WriteLine($" super(handle, client);");
1020WriteLine(" }");
1021WriteLine();
1045WriteLine("}");
1046WriteLine();
1144WriteLine($"): {returnPromiseInterfaceName} {{");
1145WriteLine(" const promise = (async () => {");
1150WriteLine($" {(_projector.IsWidenedHandleType(param.Type) ? "let" : "const")} {localParameterName} = {publicOptionsParamName}?.{param.Name};");
1162WriteLine($" const handle = await this._client.invokeCapability<{returnHandleType}>(");
1163WriteLine($" '{capability.CapabilityId}',");
1164WriteLine(" rpcArgs");
1165WriteLine(" );");
1166WriteLine($" return new {returnImplementationClassNameForWrapper}(handle, this._client);");
1167WriteLine(" })();");
1168WriteLine($" return new {returnPromiseImplementationClassName}(promise, this._client);");
1169WriteLine(" }");
1170WriteLine();
1180WriteLine($"): Promise<{returnType}> {{");
1186WriteLine($" {(_projector.IsWidenedHandleType(param.Type) ? "let" : "const")} {localParameterName} = {publicOptionsParamName}?.{param.Name};");
1204WriteLine(" const result = await this._client.invokeCapability<string | null>(");
1205WriteLine($" '{capability.CapabilityId}',");
1206WriteLine(" rpcArgs");
1207WriteLine(" );");
1208WriteLine(" return CancellationToken.fromValue(result);");
1212WriteLine($" return await this._client.invokeCapability<{returnType}>(");
1213WriteLine($" '{capability.CapabilityId}',");
1214WriteLine($" rpcArgs");
1215WriteLine(" );");
1217WriteLine(" }");
1218WriteLine();
1223WriteLine($" /** @internal */");
1227WriteLine();
1244WriteLine($" const result = await this._client.invokeCapability<{returnHandle}>(");
1245WriteLine($" '{capability.CapabilityId}',");
1246WriteLine($" rpcArgs");
1247WriteLine(" );");
1248WriteLine($" return new {returnImplementationClassName}(result, this._client);");
1252WriteLine($" await this._client.invokeCapability<void>(");
1253WriteLine($" '{capability.CapabilityId}',");
1254WriteLine($" rpcArgs");
1255WriteLine(" );");
1256WriteLine($" return this;");
1258WriteLine(" }");
1259WriteLine();
1268WriteLine();
1274WriteLine($" {(_projector.IsWidenedHandleType(param.Type) ? "let" : "const")} {localParameterName} = {publicOptionsParamName}?.{param.Name};");
1287WriteLine($" const flushAndBuild = async () => {{ await this._client.flushPendingPromises(); return {internalCall}; }};");
1291WriteLine($" return new {promiseImplementationClass}(flushAndBuild(), this._client, false);");
1295WriteLine($" return new {promiseImplementationClass}({internalCall}, this._client);");
1297WriteLine(" }");
1298WriteLine();
1325WriteLine($"{indent}{param.Name} = isPromiseLike({param.Name}) ? await {param.Name} : {param.Name};");
1344WriteLine($"{indent}{paramName} = isPromiseLike({paramName}) ? await {paramName} : {paramName};");
1386WriteLine($"{indent}const rpcArgs: Record<string, unknown> = {{ {string.Join(", ", requiredArgs)} }};");
1393WriteLine($"{indent}if ({localParameterName} !== undefined) rpcArgs.{param.Name} = {rpcExpression};");
1419WriteLine($"{indent}const rpcArgs: Record<string, unknown> = {{ {string.Join(", ", requiredArgs)} }};");
1426WriteLine($"{indent}if ({localParameterName} !== undefined) rpcArgs.{param.Name} = {rpcExpression};");
1453WriteLine($"{indent}const {dtoRpcLocalName} = {localParameterName} === undefined || {localParameterName} === null ? {localParameterName} : {{ ...{localParameterName} }};");
1454WriteLine($"{indent}if ({dtoRpcLocalName} !== undefined && {dtoRpcLocalName} !== null) {{");
1456WriteLine($"{indent}}}");
1460WriteLine($"{indent}const {dtoRpcLocalName} = {localParameterName} === null ? {localParameterName} : {{ ...{localParameterName} }};");
1461WriteLine($"{indent}if ({dtoRpcLocalName} !== null) {{");
1463WriteLine($"{indent}}}");
1476WriteLine($"{indent}const {dtoDataLocalName} = {dtoRpcLocalName} as Record<string, unknown>;");
1484WriteLine($"{indent}const {callbackLocalName} = {dtoRpcLocalName}.{propertyName};");
1485WriteLine($"{indent}if ({callbackLocalName} !== undefined) {{");
1487WriteLine($"{indent} {dtoDataLocalName}[\"{propertyName}\"] = {callbackLocalName}Id;");
1488WriteLine($"{indent}}}");
1520WriteLine($"{indent}const {dtoPropertyLocalName} = {dtoRpcLocalName}.{propertyName};");
1521WriteLine($"{indent}if ({dtoPropertyLocalName} !== undefined && {dtoPropertyLocalName} !== null) {{");
1522WriteLine($"{indent} const {nestedDtoRpcLocalName} = {{ ...{dtoPropertyLocalName} }};");
1524WriteLine($"{indent} {dtoDataLocalName}[\"{propertyName}\"] = {nestedDtoRpcLocalName};");
1525WriteLine($"{indent}}}");
1634WriteLine("/** @internal */");
1635WriteLine($"const {promiseImplementationClass} = $aspireCreateFluentPromiseClass<{className}, {promiseClass}>((): $aspireFluentPromiseTransitions => ({{");
1641WriteLine($" [{methodNameLiteral}]: null,");
1653WriteLine($" [{methodNameLiteral}]: {transitionExpression},");
1655WriteLine("}));");
1656WriteLine();
1666WriteLine("// ============================================================================");
1667WriteLine("// Entry Point Functions");
1668WriteLine("// ============================================================================");
1669WriteLine();
1726WriteLine($"): {signature.ReturnType} {{");
1728WriteLine($" const promise = (async () => {{");
1734WriteLine($" {param.Name} = isPromiseLike({param.Name}) ? await {param.Name} : {param.Name};");
1741WriteLine($" const rpcArgs: Record<string, unknown> = {{ {string.Join(", ", requiredArgs)} }};");
1744WriteLine($" if ({param.Name} !== undefined) rpcArgs.{param.Name} = {GetRpcArgumentExpressionForParam(param, param.Name, useRegisteredCallback: false)};");
1746WriteLine($" const handle = await client.invokeCapability<{handleType}>(");
1747WriteLine($" '{capability.CapabilityId}',");
1748WriteLine(" rpcArgs");
1749WriteLine(" );");
1750WriteLine($" return new {returnWrapperImplementationClass}(handle, client);");
1751WriteLine($" }})();");
1752WriteLine($" return new {returnPromiseImplementationClass}(promise, client);");
1753WriteLine("}");
1764WriteLine($"): {signature.ReturnType} {{");
1770WriteLine($" {param.Name} = isPromiseLike({param.Name}) ? await {param.Name} : {param.Name};");
1777WriteLine($" const rpcArgs: Record<string, unknown> = {{ {string.Join(", ", requiredArgs)} }};");
1780WriteLine($" if ({param.Name} !== undefined) rpcArgs.{param.Name} = {GetRpcArgumentExpressionForParam(param, param.Name, useRegisteredCallback: false)};");
1784WriteLine($" await client.invokeCapability<void>(");
1788WriteLine(" const result = await client.invokeCapability<string | null>(");
1789WriteLine($" '{capability.CapabilityId}',");
1790WriteLine(" rpcArgs");
1791WriteLine(" );");
1792WriteLine(" return CancellationToken.fromValue(result);");
1793WriteLine("}");
1794WriteLine();
1799WriteLine($" return await client.invokeCapability<{returnType}>(");
1801WriteLine($" '{capability.CapabilityId}',");
1802WriteLine(" rpcArgs");
1803WriteLine(" );");
1804WriteLine("}");
1806WriteLine();
1833WriteLine($"{indent}const {callbackName}Id = {callbackName} ? registerCallback(async ({paramSignature}) => {{");
1837WriteLine($"{indent}const {callbackName}Id = registerCallback(async ({paramSignature}) => {{");
1846WriteLine(indent + "}) : undefined;");
1850WriteLine(indent + "});");
1870WriteLine($"{bodyIndent}{returnPrefix}await {callbackName}();");
1878WriteLine($"{bodyIndent}{returnPrefix}await {callbackName}({cbParam.Name});");
1892WriteLine($"{bodyIndent}{returnPrefix}await {callbackName}({string.Join(", ", callArgs)});");
1903WriteLine($"{indent}const {callbackParameter.Name} = CancellationToken.fromValue({callbackArgName});");
1911WriteLine($"{indent}const {callbackParameter.Name}Handle = wrapIfHandle({callbackArgName}) as {handleType};");
1912WriteLine($"{indent}const {callbackParameter.Name} = new AspireDict<{keyType}, {valueType}>({callbackParameter.Name}Handle, {clientExpression}, '{cbTypeId}');");
1917WriteLine($"{indent}const {callbackParameter.Name}Handle = wrapIfHandle({callbackArgName}) as {handleType};");
1918WriteLine($"{indent}const {callbackParameter.Name} = new {TypeScriptApiProjector.GetImplementationClassName(wrapperClassName)}({callbackParameter.Name}Handle, {clientExpression});");
1922WriteLine($"{indent}const {callbackParameter.Name} = wrapIfHandle({callbackArgName}) as {tsType};");
1930WriteLine($$"""
2006WriteLine();
2011WriteLine("""
2069WriteLine();
2070WriteLine("// ============================================================================");
2071WriteLine("// Handle Wrapper Registrations");
2072WriteLine("// ============================================================================");
2073WriteLine();
2074WriteLine("// Register wrapper factories for typed handle wrapping in callbacks");
2081WriteLine($"registerHandleWrapper('{typeClass.TypeId}', (handle, client) => new {TypeScriptApiProjector.GetImplementationClassName(className)}(handle as {handleType}, client));");
2089WriteLine($"registerHandleWrapper('{builder.TypeId}', (handle, client) => new {TypeScriptApiProjector.GetImplementationClassName(className)}(handle as {handleType}, client));");
2101WriteLine($"registerHandleWrapper('{aliasTypeId}', (handle, client) => new {TypeScriptApiProjector.GetImplementationClassName(className)}(handle as {handleType}, client));");
2104WriteLine();
2120WriteLine("// ============================================================================");
2121WriteLine($"// {implementationClassName}");
2122WriteLine("// ============================================================================");
2123WriteLine();
2134WriteLine($"class {implementationClassName} implements {className} {{");
2135WriteLine($" constructor(private _handle: {handleType}, private _client: AspireClientRpc) {{}}");
2136WriteLine();
2137WriteLine($" /** Serialize for JSON-RPC transport */");
2138WriteLine($" toJSON(): MarshalledHandle {{ return this._handle.toJSON(); }}");
2139WriteLine();
2174WriteLine("}");
2175WriteLine();
2246WriteLine($" {propertyName} = {{");
2251WriteLine($" get: async (): Promise<{returnType}> => {{");
2254WriteLine(" const result = await this._client.invokeCapability<string | null>(");
2255WriteLine($" '{getter.CapabilityId}',");
2256WriteLine(" { context: this._handle }");
2257WriteLine(" );");
2258WriteLine(" return CancellationToken.fromValue(result);");
2262WriteLine($" return await this._client.invokeCapability<{returnType}>(");
2263WriteLine($" '{getter.CapabilityId}',");
2264WriteLine($" {{ context: this._handle }}");
2265WriteLine(" );");
2267WriteLine(" },");
2277WriteLine($" set: async (value: {valueType}): Promise<void> => {{");
2279WriteLine($" await this._client.invokeCapability<void>(");
2280WriteLine($" '{setter.CapabilityId}',");
2281WriteLine($" {{ context: this._handle, {GetRpcArgumentEntry("value", valueParam.Type)} }}");
2282WriteLine(" );");
2283WriteLine(" }");
2287WriteLine(" };");
2288WriteLine();
2319WriteLine($" {propertyName}(): {promiseInterfaceName} {{");
2320WriteLine($" return new {promiseImplementationClassName}(this._client.invokeCapability<{collectionType}>(");
2321WriteLine($" '{getter.CapabilityId}',");
2322WriteLine(" { context: this._handle }");
2323WriteLine(" ), this._client, false);");
2324WriteLine(" }");
2325WriteLine();
2331WriteLine($" async {propertyName}(): Promise<{returnType}> {{");
2334WriteLine(" const result = await this._client.invokeCapability<string | null>(");
2335WriteLine($" '{getter.CapabilityId}',");
2336WriteLine(" { context: this._handle }");
2337WriteLine(" );");
2338WriteLine(" return CancellationToken.fromValue(result);");
2342WriteLine($" return await this._client.invokeCapability<{returnType}>(");
2343WriteLine($" '{getter.CapabilityId}',");
2344WriteLine(" { context: this._handle }");
2345WriteLine(" );");
2347WriteLine(" }");
2348WriteLine();
2358WriteLine($" {propertyName}(): {promiseInterfaceName} {{");
2359WriteLine(" const promise = (async () => {");
2360WriteLine($" const handle = await this._client.invokeCapability<{handleType}>(");
2361WriteLine($" '{getter.CapabilityId}',");
2362WriteLine(" { context: this._handle }");
2363WriteLine(" );");
2364WriteLine($" return new {wrapperImplementationClassName}(handle, this._client);");
2365WriteLine(" })();");
2366WriteLine($" return new {promiseImplementationClassName}(promise, this._client, false);");
2367WriteLine(" }");
2368WriteLine();
2372WriteLine($" async {propertyName}(): Promise<{wrapperClassName}> {{");
2373WriteLine($" const handle = await this._client.invokeCapability<{handleType}>(");
2374WriteLine($" '{getter.CapabilityId}',");
2375WriteLine(" { context: this._handle }");
2376WriteLine(" );");
2377WriteLine($" return new {wrapperImplementationClassName}(handle, this._client);");
2378WriteLine(" }");
2379WriteLine();
2410WriteLine($" {propertyName} = {{");
2413WriteLine($" get: (): {promiseInterfaceName} => {{");
2414WriteLine(" const promise = (async () => {");
2415WriteLine($" const handle = await this._client.invokeCapability<{handleType}>(");
2416WriteLine($" '{getter.CapabilityId}',");
2417WriteLine($" {{ context: this._handle }}");
2418WriteLine(" );");
2419WriteLine($" return new {wrapperImplementationClassName}(handle, this._client);");
2420WriteLine(" })();");
2421WriteLine($" return new {promiseImplementationClassName}(promise, this._client, false);");
2422WriteLine(" },");
2426WriteLine($" get: async (): Promise<{wrapperClassName}> => {{");
2427WriteLine($" const handle = await this._client.invokeCapability<{handleType}>(");
2428WriteLine($" '{getter.CapabilityId}',");
2429WriteLine($" {{ context: this._handle }}");
2430WriteLine(" );");
2431WriteLine($" return new {wrapperImplementationClassName}(handle, this._client);");
2432WriteLine(" },");
2441WriteLine($" set: async (value: {valueType}): Promise<void> => {{");
2443WriteLine($" await this._client.invokeCapability<void>(");
2444WriteLine($" '{setter.CapabilityId}',");
2445WriteLine($" {{ context: this._handle, {GetRpcArgumentEntry("value", valueParam.Type)} }}");
2446WriteLine(" );");
2447WriteLine(" }");
2451WriteLine(" };");
2452WriteLine();
2479WriteLine($" private _{propertyName}?: AspireDict<{keyType}, {valueType}>;");
2480WriteLine($" async {propertyName}(): Promise<AspireDict<{keyType}, {valueType}>> {{");
2481WriteLine($" if (!this._{propertyName}) {{");
2482WriteLine($" this._{propertyName} = new AspireDict<{keyType}, {valueType}>(");
2483WriteLine($" this._handle,");
2484WriteLine($" this._client,");
2485WriteLine($" {typeId},");
2486WriteLine($" {getterCapabilityId}");
2487WriteLine(" );");
2488WriteLine(" }");
2489WriteLine($" return this._{propertyName};");
2490WriteLine(" }");
2491WriteLine();
2512WriteLine($" private _{propertyName}?: AspireDict<{keyType}, {valueType}>;");
2513WriteLine($" get {propertyName}(): AspireDict<{keyType}, {valueType}> {{");
2514WriteLine($" if (!this._{propertyName}) {{");
2515WriteLine($" this._{propertyName} = new AspireDict<{keyType}, {valueType}>(");
2516WriteLine($" this._handle,");
2517WriteLine($" this._client,");
2518WriteLine($" {typeId},");
2519WriteLine($" {getterCapabilityId}");
2520WriteLine(" );");
2521WriteLine(" }");
2522WriteLine($" return this._{propertyName};");
2523WriteLine(" }");
2524WriteLine();
2544WriteLine($" private _{propertyName}?: AspireList<{elementType}>;");
2545WriteLine($" async {propertyName}(): Promise<AspireList<{elementType}>> {{");
2546WriteLine($" if (!this._{propertyName}) {{");
2547WriteLine($" this._{propertyName} = new AspireList<{elementType}>(");
2548WriteLine($" this._handle,");
2549WriteLine($" this._client,");
2550WriteLine($" {typeId},");
2551WriteLine($" {getterCapabilityId}");
2552WriteLine(" );");
2553WriteLine(" }");
2554WriteLine($" return this._{propertyName};");
2555WriteLine(" }");
2556WriteLine();
2571WriteLine($" private _{propertyName}?: AspireList<{elementType}>;");
2572WriteLine($" get {propertyName}(): AspireList<{elementType}> {{");
2573WriteLine($" if (!this._{propertyName}) {{");
2574WriteLine($" this._{propertyName} = new AspireList<{elementType}>(");
2575WriteLine($" this._handle,");
2576WriteLine($" this._client,");
2577WriteLine($" {typeId},");
2578WriteLine($" {getterCapabilityId}");
2579WriteLine(" );");
2580WriteLine(" }");
2581WriteLine($" return this._{propertyName};");
2582WriteLine(" }");
2583WriteLine();
2638WriteLine($"): {returnPromiseInterfaceName} {{");
2639WriteLine(" const promise = (async () => {");
2644WriteLine($" {(_projector.IsWidenedHandleType(param.Type) ? "let" : "const")} {localParameterName} = {publicOptionsParamName}?.{param.Name};");
2649WriteLine($" const handle = await this._client.invokeCapability<{returnHandleType}>(");
2650WriteLine($" '{method.CapabilityId}',");
2651WriteLine(" rpcArgs");
2652WriteLine(" );");
2653WriteLine($" return new {returnImplementationClassName}(handle, this._client);");
2654WriteLine(" })();");
2655WriteLine($" return new {returnPromiseImplementationClassName}(promise, this._client);");
2656WriteLine(" }");
2657WriteLine();
2665WriteLine($"): Promise<{returnType}> {{");
2671WriteLine($" {(_projector.IsWidenedHandleType(param.Type) ? "let" : "const")} {localParameterName} = {publicOptionsParamName}?.{param.Name};");
2679WriteLine($" await this._client.invokeCapability<void>(");
2683WriteLine(" const result = await this._client.invokeCapability<string | null>(");
2684WriteLine($" '{method.CapabilityId}',");
2685WriteLine(" rpcArgs");
2686WriteLine(" );");
2687WriteLine(" return CancellationToken.fromValue(result);");
2688WriteLine(" }");
2689WriteLine();
2694WriteLine($" return await this._client.invokeCapability<{returnType}>(");
2696WriteLine($" '{method.CapabilityId}',");
2697WriteLine($" rpcArgs");
2698WriteLine(" );");
2699WriteLine(" }");
2700WriteLine();
2751WriteLine($"): {returnPromiseInterfaceName} {{");
2752WriteLine(" const promise = (async () => {");
2757WriteLine($" {(_projector.IsWidenedHandleType(param.Type) ? "let" : "const")} {localParameterName} = {publicOptionsParamName}?.{param.Name};");
2762WriteLine($" const handle = await this._client.invokeCapability<{returnHandleType}>(");
2763WriteLine($" '{capability.CapabilityId}',");
2764WriteLine(" rpcArgs");
2765WriteLine(" );");
2766WriteLine($" return new {returnImplementationClassName}(handle, this._client);");
2767WriteLine(" })();");
2768WriteLine($" return new {returnPromiseImplementationClassName}(promise, this._client);");
2769WriteLine(" }");
2770WriteLine();
2778WriteLine($"): Promise<{returnType}> {{");
2784WriteLine($" {(_projector.IsWidenedHandleType(param.Type) ? "let" : "const")} {localParameterName} = {publicOptionsParamName}?.{param.Name};");
2792WriteLine($" await this._client.invokeCapability<void>(");
2796WriteLine($" return await this._client.invokeCapability<{returnType}>(");
2798WriteLine($" '{capability.CapabilityId}',");
2799WriteLine($" rpcArgs");
2800WriteLine(" );");
2801WriteLine(" }");
2802WriteLine();
2881WriteLine($" /** @internal */");
2884WriteLine($"): Promise<{returnWrapperClass}> {{");
2899WriteLine($" const result = await this._client.invokeCapability<{returnHandleType}>(");
2900WriteLine($" '{capability.CapabilityId}',");
2901WriteLine($" rpcArgs");
2902WriteLine(" );");
2903WriteLine($" return new {returnWrapperImplementationClass}(result, this._client);");
2904WriteLine(" }");
2905WriteLine();
2911WriteLine($"): {returnPromiseWrapper} {{");
2917WriteLine($" {(_projector.IsWidenedHandleType(param.Type) ? "let" : "const")} {localParameterName} = {publicOptionsParamName}?.{param.Name};");
2926WriteLine($" const flushAndBuild = async () => {{ await this._client.flushPendingPromises(); return {internalCall}; }};");
2927WriteLine($" return new {returnPromiseImplementationClass}(flushAndBuild(), this._client, false);");
2931WriteLine($" return new {returnPromiseImplementationClass}({internalCall}, this._client);");
2933WriteLine(" }");
2939WriteLine($" /** @internal */");
2942WriteLine($"): Promise<{className}> {{");
2957WriteLine($" await this._client.invokeCapability<void>(");
2958WriteLine($" '{capability.CapabilityId}',");
2959WriteLine($" rpcArgs");
2960WriteLine(" );");
2961WriteLine($" return this;");
2962WriteLine(" }");
2963WriteLine();
2969WriteLine($"): {promiseClass} {{");
2975WriteLine($" {(_projector.IsWidenedHandleType(param.Type) ? "let" : "const")} {localParameterName} = {publicOptionsParamName}?.{param.Name};");
2980WriteLine("), this._client);");
2981WriteLine(" }");
2989WriteLine($"): Promise<{returnType}> {{");
2995WriteLine($" {(_projector.IsWidenedHandleType(param.Type) ? "let" : "const")} {localParameterName} = {publicOptionsParamName}?.{param.Name};");
3013WriteLine(" const result = await this._client.invokeCapability<string | null>(");
3014WriteLine($" '{capability.CapabilityId}',");
3015WriteLine(" rpcArgs");
3016WriteLine(" );");
3017WriteLine(" return CancellationToken.fromValue(result);");
3021WriteLine($" return await this._client.invokeCapability<{returnType}>(");
3022WriteLine($" '{capability.CapabilityId}',");
3023WriteLine($" rpcArgs");
3024WriteLine(" );");
3026WriteLine(" }");
3028WriteLine();