AtsTypeScriptCodeGenerator.cs (467)
201WriteLine($"{indent}/** {lines[0]} */");
205WriteLine($"{indent}/**");
208WriteLine(line.Length == 0 ? $"{indent} *" : $"{indent} * {line}");
210WriteLine($"{indent} */");
459WriteLine("""
512WriteLine();
590WriteLine("// ============================================================================");
591WriteLine("// Handle Type Aliases (Internal - not exported to users)");
592WriteLine("// ============================================================================");
593WriteLine();
601WriteLine($"type {handleName} = Handle<'{typeId}'>;");
602WriteLine();
625WriteLine("// ============================================================================");
626WriteLine("// Enum Types");
627WriteLine("// ============================================================================");
628WriteLine();
633WriteLine($"export enum {enumType.Name} {{");
643WriteLine($" {value.Name} = \"{value.Name}\",");
646WriteLine("}");
647WriteLine();
665WriteLine("// ============================================================================");
666WriteLine("// DTO Interfaces");
667WriteLine("// ============================================================================");
668WriteLine();
675WriteLine($"export interface {interfaceName} {{");
686WriteLine($" {propName}?: {tsType};");
693WriteLine($" /** {clientOnly.Summary} */");
694WriteLine($" {clientOnly.Name}?: {clientOnly.Type};");
697WriteLine("}");
698WriteLine();
711WriteLine("// ============================================================================");
712WriteLine("// Exported Values");
713WriteLine("// ============================================================================");
714WriteLine();
718WriteLine(exportedNamespace.Content);
719WriteLine();
733WriteLine("// ============================================================================");
734WriteLine("// Options Interfaces");
735WriteLine("// ============================================================================");
736WriteLine();
740WriteLine($"export interface {interfaceName} {{");
745WriteLine($" {param.Name}?: {tsType};");
747WriteLine("}");
748WriteLine();
756WriteLine($" {propertyName}(): {returnType};");
774WriteLine($" readonly {propertyName}: AspireDict<{keyType}, {valueType}>;");
782WriteLine($" readonly {propertyName}: AspireList<{elementType}>;");
788WriteLine($" {propertyName}: {{");
794WriteLine($" get: () => {promiseInterfaceName};");
799WriteLine($" get: () => Promise<{returnTypeName}>;");
809WriteLine($" set: (value: {valueType}) => Promise<void>;");
813WriteLine(" };");
820WriteLine("// ============================================================================");
821WriteLine($"// {interfaceName}");
822WriteLine("// ============================================================================");
823WriteLine();
825WriteLine($"export interface {interfaceName} {{");
826WriteLine(" toJSON(): MarshalledHandle;");
851WriteLine($" {capability.MethodName}({signature.ParameterList}): {promiseInterfaceName};");
856WriteLine($" {capability.MethodName}({signature.ParameterList}): Promise<{returnType}>;");
861WriteLine($" {capability.MethodName}({signature.ParameterList}): {_projector.GetBuilderPromiseInterfaceForMethod(builder, capability)};");
865WriteLine("}");
866WriteLine();
888WriteLine($"export interface {promiseInterfaceName} extends PromiseLike<{interfaceName}> {{");
905WriteLine($" {capability.MethodName}({signature.ParameterList}): {returnPromiseInterfaceName};");
910WriteLine($" {capability.MethodName}({signature.ParameterList}): Promise<{returnType}>;");
915WriteLine($" {capability.MethodName}({signature.ParameterList}): {_projector.GetBuilderPromiseInterfaceForMethod(builder, capability)};");
919WriteLine("}");
920WriteLine();
931WriteLine($" {signature.MethodName}({signature.ParameterList}): {_projector.GetPublicPromiseInterfaceName(capability.ReturnType.TypeId)};");
935WriteLine($" {signature.MethodName}({signature.ParameterList}): {TypeScriptApiProjector.GetPromiseInterfaceName(className)};");
940WriteLine($" {signature.MethodName}({signature.ParameterList}): Promise<{returnType}>;");
949WriteLine("// ============================================================================");
950WriteLine($"// {interfaceName}");
951WriteLine("// ============================================================================");
952WriteLine();
954WriteLine($"export interface {interfaceName} {{");
955WriteLine(" toJSON(): MarshalledHandle;");
978WriteLine("}");
979WriteLine();
987WriteLine($"export interface {promiseInterfaceName} extends PromiseLike<{interfaceName}> {{");
996WriteLine("}");
997WriteLine();
1007WriteLine("// ============================================================================");
1008WriteLine($"// {implementationClassName}");
1009WriteLine("// ============================================================================");
1010WriteLine();
1016WriteLine($"class {implementationClassName} extends ResourceBuilderBase<{handleType}> implements {builder.BuilderClassName} {{");
1019WriteLine($" constructor(handle: {handleType}, client: AspireClientRpc) {{");
1020WriteLine($" super(handle, client);");
1021WriteLine(" }");
1022WriteLine();
1046WriteLine("}");
1047WriteLine();
1145WriteLine($"): {returnPromiseInterfaceName} {{");
1146WriteLine(" const promise = (async () => {");
1151WriteLine($" {(_projector.IsWidenedHandleType(param.Type) ? "let" : "const")} {localParameterName} = {publicOptionsParamName}?.{param.Name};");
1163WriteLine($" const handle = await this._client.invokeCapability<{returnHandleType}>(");
1164WriteLine($" '{capability.CapabilityId}',");
1165WriteLine(" rpcArgs");
1166WriteLine(" );");
1167WriteLine($" return new {returnImplementationClassNameForWrapper}(handle, this._client);");
1168WriteLine(" })();");
1169WriteLine($" return new {returnPromiseImplementationClassName}(promise, this._client);");
1170WriteLine(" }");
1171WriteLine();
1181WriteLine($"): Promise<{returnType}> {{");
1187WriteLine($" {(_projector.IsWidenedHandleType(param.Type) ? "let" : "const")} {localParameterName} = {publicOptionsParamName}?.{param.Name};");
1205WriteLine(" const result = await this._client.invokeCapability<string | null>(");
1206WriteLine($" '{capability.CapabilityId}',");
1207WriteLine(" rpcArgs");
1208WriteLine(" );");
1209WriteLine(" return CancellationToken.fromValue(result);");
1213WriteLine($" return await this._client.invokeCapability<{returnType}>(");
1214WriteLine($" '{capability.CapabilityId}',");
1215WriteLine($" rpcArgs");
1216WriteLine(" );");
1218WriteLine(" }");
1219WriteLine();
1224WriteLine($" /** @internal */");
1228WriteLine();
1245WriteLine($" const result = await this._client.invokeCapability<{returnHandle}>(");
1246WriteLine($" '{capability.CapabilityId}',");
1247WriteLine($" rpcArgs");
1248WriteLine(" );");
1249WriteLine($" return new {returnImplementationClassName}(result, this._client);");
1253WriteLine($" await this._client.invokeCapability<void>(");
1254WriteLine($" '{capability.CapabilityId}',");
1255WriteLine($" rpcArgs");
1256WriteLine(" );");
1257WriteLine($" return this;");
1259WriteLine(" }");
1260WriteLine();
1269WriteLine();
1275WriteLine($" {(_projector.IsWidenedHandleType(param.Type) ? "let" : "const")} {localParameterName} = {publicOptionsParamName}?.{param.Name};");
1288WriteLine($" const flushAndBuild = async () => {{ await this._client.flushPendingPromises(); return {internalCall}; }};");
1292WriteLine($" return new {promiseImplementationClass}(flushAndBuild(), this._client, false);");
1296WriteLine($" return new {promiseImplementationClass}({internalCall}, this._client);");
1298WriteLine(" }");
1299WriteLine();
1326WriteLine($"{indent}{param.Name} = isPromiseLike({param.Name}) ? await {param.Name} : {param.Name};");
1345WriteLine($"{indent}{paramName} = isPromiseLike({paramName}) ? await {paramName} : {paramName};");
1387WriteLine($"{indent}const rpcArgs: Record<string, unknown> = {{ {string.Join(", ", requiredArgs)} }};");
1394WriteLine($"{indent}if ({localParameterName} !== undefined) rpcArgs.{param.Name} = {rpcExpression};");
1420WriteLine($"{indent}const rpcArgs: Record<string, unknown> = {{ {string.Join(", ", requiredArgs)} }};");
1427WriteLine($"{indent}if ({localParameterName} !== undefined) rpcArgs.{param.Name} = {rpcExpression};");
1454WriteLine($"{indent}const {dtoRpcLocalName} = {localParameterName} === undefined || {localParameterName} === null ? {localParameterName} : {{ ...{localParameterName} }};");
1455WriteLine($"{indent}if ({dtoRpcLocalName} !== undefined && {dtoRpcLocalName} !== null) {{");
1457WriteLine($"{indent}}}");
1461WriteLine($"{indent}const {dtoRpcLocalName} = {localParameterName} === null ? {localParameterName} : {{ ...{localParameterName} }};");
1462WriteLine($"{indent}if ({dtoRpcLocalName} !== null) {{");
1464WriteLine($"{indent}}}");
1477WriteLine($"{indent}const {dtoDataLocalName} = {dtoRpcLocalName} as Record<string, unknown>;");
1485WriteLine($"{indent}const {callbackLocalName} = {dtoRpcLocalName}.{propertyName};");
1486WriteLine($"{indent}if ({callbackLocalName} !== undefined) {{");
1488WriteLine($"{indent} {dtoDataLocalName}[\"{propertyName}\"] = {callbackLocalName}Id;");
1489WriteLine($"{indent}}}");
1521WriteLine($"{indent}const {dtoPropertyLocalName} = {dtoRpcLocalName}.{propertyName};");
1522WriteLine($"{indent}if ({dtoPropertyLocalName} !== undefined && {dtoPropertyLocalName} !== null) {{");
1523WriteLine($"{indent} const {nestedDtoRpcLocalName} = {{ ...{dtoPropertyLocalName} }};");
1525WriteLine($"{indent} {dtoDataLocalName}[\"{propertyName}\"] = {nestedDtoRpcLocalName};");
1526WriteLine($"{indent}}}");
1635WriteLine("/** @internal */");
1636WriteLine($"const {promiseImplementationClass} = $aspireCreateFluentPromiseClass<{className}, {promiseClass}>((): $aspireFluentPromiseTransitions => ({{");
1642WriteLine($" [{methodNameLiteral}]: null,");
1654WriteLine($" [{methodNameLiteral}]: {transitionExpression},");
1656WriteLine("}));");
1657WriteLine();
1667WriteLine("// ============================================================================");
1668WriteLine("// Entry Point Functions");
1669WriteLine("// ============================================================================");
1670WriteLine();
1727WriteLine($"): {signature.ReturnType} {{");
1729WriteLine($" const promise = (async () => {{");
1735WriteLine($" {param.Name} = isPromiseLike({param.Name}) ? await {param.Name} : {param.Name};");
1742WriteLine($" const rpcArgs: Record<string, unknown> = {{ {string.Join(", ", requiredArgs)} }};");
1745WriteLine($" if ({param.Name} !== undefined) rpcArgs.{param.Name} = {GetRpcArgumentExpressionForParam(param, param.Name, useRegisteredCallback: false)};");
1747WriteLine($" const handle = await client.invokeCapability<{handleType}>(");
1748WriteLine($" '{capability.CapabilityId}',");
1749WriteLine(" rpcArgs");
1750WriteLine(" );");
1751WriteLine($" return new {returnWrapperImplementationClass}(handle, client);");
1752WriteLine($" }})();");
1753WriteLine($" return new {returnPromiseImplementationClass}(promise, client);");
1754WriteLine("}");
1765WriteLine($"): {signature.ReturnType} {{");
1771WriteLine($" {param.Name} = isPromiseLike({param.Name}) ? await {param.Name} : {param.Name};");
1778WriteLine($" const rpcArgs: Record<string, unknown> = {{ {string.Join(", ", requiredArgs)} }};");
1781WriteLine($" if ({param.Name} !== undefined) rpcArgs.{param.Name} = {GetRpcArgumentExpressionForParam(param, param.Name, useRegisteredCallback: false)};");
1785WriteLine($" await client.invokeCapability<void>(");
1789WriteLine(" const result = await client.invokeCapability<string | null>(");
1790WriteLine($" '{capability.CapabilityId}',");
1791WriteLine(" rpcArgs");
1792WriteLine(" );");
1793WriteLine(" return CancellationToken.fromValue(result);");
1794WriteLine("}");
1795WriteLine();
1800WriteLine($" return await client.invokeCapability<{returnType}>(");
1802WriteLine($" '{capability.CapabilityId}',");
1803WriteLine(" rpcArgs");
1804WriteLine(" );");
1805WriteLine("}");
1807WriteLine();
1834WriteLine($"{indent}const {callbackName}Id = {callbackName} ? registerCallback(async ({paramSignature}) => {{");
1838WriteLine($"{indent}const {callbackName}Id = registerCallback(async ({paramSignature}) => {{");
1847WriteLine(indent + "}) : undefined;");
1851WriteLine(indent + "});");
1871WriteLine($"{bodyIndent}{returnPrefix}await {callbackName}();");
1879WriteLine($"{bodyIndent}{returnPrefix}await {callbackName}({cbParam.Name});");
1893WriteLine($"{bodyIndent}{returnPrefix}await {callbackName}({string.Join(", ", callArgs)});");
1904WriteLine($"{indent}const {callbackParameter.Name} = CancellationToken.fromValue({callbackArgName});");
1912WriteLine($"{indent}const {callbackParameter.Name}Handle = wrapIfHandle({callbackArgName}) as {handleType};");
1913WriteLine($"{indent}const {callbackParameter.Name} = new AspireDict<{keyType}, {valueType}>({callbackParameter.Name}Handle, {clientExpression}, '{cbTypeId}');");
1918WriteLine($"{indent}const {callbackParameter.Name}Handle = wrapIfHandle({callbackArgName}) as {handleType};");
1919WriteLine($"{indent}const {callbackParameter.Name} = new {TypeScriptApiProjector.GetImplementationClassName(wrapperClassName)}({callbackParameter.Name}Handle, {clientExpression});");
1923WriteLine($"{indent}const {callbackParameter.Name} = wrapIfHandle({callbackArgName}) as {tsType};");
1931WriteLine($$"""
2007WriteLine();
2012WriteLine("""
2070WriteLine();
2071WriteLine("// ============================================================================");
2072WriteLine("// Handle Wrapper Registrations");
2073WriteLine("// ============================================================================");
2074WriteLine();
2075WriteLine("// Register wrapper factories for typed handle wrapping in callbacks");
2082WriteLine($"registerHandleWrapper('{typeClass.TypeId}', (handle, client) => new {TypeScriptApiProjector.GetImplementationClassName(className)}(handle as {handleType}, client));");
2090WriteLine($"registerHandleWrapper('{builder.TypeId}', (handle, client) => new {TypeScriptApiProjector.GetImplementationClassName(className)}(handle as {handleType}, client));");
2102WriteLine($"registerHandleWrapper('{aliasTypeId}', (handle, client) => new {TypeScriptApiProjector.GetImplementationClassName(className)}(handle as {handleType}, client));");
2105WriteLine();
2121WriteLine("// ============================================================================");
2122WriteLine($"// {implementationClassName}");
2123WriteLine("// ============================================================================");
2124WriteLine();
2135WriteLine($"class {implementationClassName} implements {className} {{");
2136WriteLine($" constructor(private _handle: {handleType}, private _client: AspireClientRpc) {{}}");
2137WriteLine();
2138WriteLine($" /** Serialize for JSON-RPC transport */");
2139WriteLine($" toJSON(): MarshalledHandle {{ return this._handle.toJSON(); }}");
2140WriteLine();
2175WriteLine("}");
2176WriteLine();
2247WriteLine($" {propertyName} = {{");
2252WriteLine($" get: async (): Promise<{returnType}> => {{");
2255WriteLine(" const result = await this._client.invokeCapability<string | null>(");
2256WriteLine($" '{getter.CapabilityId}',");
2257WriteLine(" { context: this._handle }");
2258WriteLine(" );");
2259WriteLine(" return CancellationToken.fromValue(result);");
2263WriteLine($" return await this._client.invokeCapability<{returnType}>(");
2264WriteLine($" '{getter.CapabilityId}',");
2265WriteLine($" {{ context: this._handle }}");
2266WriteLine(" );");
2268WriteLine(" },");
2278WriteLine($" set: async (value: {valueType}): Promise<void> => {{");
2280WriteLine($" await this._client.invokeCapability<void>(");
2281WriteLine($" '{setter.CapabilityId}',");
2282WriteLine($" {{ context: this._handle, {GetRpcArgumentEntry("value", valueParam.Type)} }}");
2283WriteLine(" );");
2284WriteLine(" }");
2288WriteLine(" };");
2289WriteLine();
2320WriteLine($" {propertyName}(): {promiseInterfaceName} {{");
2321WriteLine($" return new {promiseImplementationClassName}(this._client.invokeCapability<{collectionType}>(");
2322WriteLine($" '{getter.CapabilityId}',");
2323WriteLine(" { context: this._handle }");
2324WriteLine(" ), this._client, false);");
2325WriteLine(" }");
2326WriteLine();
2332WriteLine($" async {propertyName}(): Promise<{returnType}> {{");
2335WriteLine(" const result = await this._client.invokeCapability<string | null>(");
2336WriteLine($" '{getter.CapabilityId}',");
2337WriteLine(" { context: this._handle }");
2338WriteLine(" );");
2339WriteLine(" return CancellationToken.fromValue(result);");
2343WriteLine($" return await this._client.invokeCapability<{returnType}>(");
2344WriteLine($" '{getter.CapabilityId}',");
2345WriteLine(" { context: this._handle }");
2346WriteLine(" );");
2348WriteLine(" }");
2349WriteLine();
2359WriteLine($" {propertyName}(): {promiseInterfaceName} {{");
2360WriteLine(" const promise = (async () => {");
2361WriteLine($" const handle = await this._client.invokeCapability<{handleType}>(");
2362WriteLine($" '{getter.CapabilityId}',");
2363WriteLine(" { context: this._handle }");
2364WriteLine(" );");
2365WriteLine($" return new {wrapperImplementationClassName}(handle, this._client);");
2366WriteLine(" })();");
2367WriteLine($" return new {promiseImplementationClassName}(promise, this._client, false);");
2368WriteLine(" }");
2369WriteLine();
2373WriteLine($" async {propertyName}(): Promise<{wrapperClassName}> {{");
2374WriteLine($" const handle = await this._client.invokeCapability<{handleType}>(");
2375WriteLine($" '{getter.CapabilityId}',");
2376WriteLine(" { context: this._handle }");
2377WriteLine(" );");
2378WriteLine($" return new {wrapperImplementationClassName}(handle, this._client);");
2379WriteLine(" }");
2380WriteLine();
2411WriteLine($" {propertyName} = {{");
2414WriteLine($" get: (): {promiseInterfaceName} => {{");
2415WriteLine(" const promise = (async () => {");
2416WriteLine($" const handle = await this._client.invokeCapability<{handleType}>(");
2417WriteLine($" '{getter.CapabilityId}',");
2418WriteLine($" {{ context: this._handle }}");
2419WriteLine(" );");
2420WriteLine($" return new {wrapperImplementationClassName}(handle, this._client);");
2421WriteLine(" })();");
2422WriteLine($" return new {promiseImplementationClassName}(promise, this._client, false);");
2423WriteLine(" },");
2427WriteLine($" get: async (): Promise<{wrapperClassName}> => {{");
2428WriteLine($" const handle = await this._client.invokeCapability<{handleType}>(");
2429WriteLine($" '{getter.CapabilityId}',");
2430WriteLine($" {{ context: this._handle }}");
2431WriteLine(" );");
2432WriteLine($" return new {wrapperImplementationClassName}(handle, this._client);");
2433WriteLine(" },");
2442WriteLine($" set: async (value: {valueType}): Promise<void> => {{");
2444WriteLine($" await this._client.invokeCapability<void>(");
2445WriteLine($" '{setter.CapabilityId}',");
2446WriteLine($" {{ context: this._handle, {GetRpcArgumentEntry("value", valueParam.Type)} }}");
2447WriteLine(" );");
2448WriteLine(" }");
2452WriteLine(" };");
2453WriteLine();
2480WriteLine($" private _{propertyName}?: AspireDict<{keyType}, {valueType}>;");
2481WriteLine($" async {propertyName}(): Promise<AspireDict<{keyType}, {valueType}>> {{");
2482WriteLine($" if (!this._{propertyName}) {{");
2483WriteLine($" this._{propertyName} = new AspireDict<{keyType}, {valueType}>(");
2484WriteLine($" this._handle,");
2485WriteLine($" this._client,");
2486WriteLine($" {typeId},");
2487WriteLine($" {getterCapabilityId}");
2488WriteLine(" );");
2489WriteLine(" }");
2490WriteLine($" return this._{propertyName};");
2491WriteLine(" }");
2492WriteLine();
2513WriteLine($" private _{propertyName}?: AspireDict<{keyType}, {valueType}>;");
2514WriteLine($" get {propertyName}(): AspireDict<{keyType}, {valueType}> {{");
2515WriteLine($" if (!this._{propertyName}) {{");
2516WriteLine($" this._{propertyName} = new AspireDict<{keyType}, {valueType}>(");
2517WriteLine($" this._handle,");
2518WriteLine($" this._client,");
2519WriteLine($" {typeId},");
2520WriteLine($" {getterCapabilityId}");
2521WriteLine(" );");
2522WriteLine(" }");
2523WriteLine($" return this._{propertyName};");
2524WriteLine(" }");
2525WriteLine();
2545WriteLine($" private _{propertyName}?: AspireList<{elementType}>;");
2546WriteLine($" async {propertyName}(): Promise<AspireList<{elementType}>> {{");
2547WriteLine($" if (!this._{propertyName}) {{");
2548WriteLine($" this._{propertyName} = new AspireList<{elementType}>(");
2549WriteLine($" this._handle,");
2550WriteLine($" this._client,");
2551WriteLine($" {typeId},");
2552WriteLine($" {getterCapabilityId}");
2553WriteLine(" );");
2554WriteLine(" }");
2555WriteLine($" return this._{propertyName};");
2556WriteLine(" }");
2557WriteLine();
2572WriteLine($" private _{propertyName}?: AspireList<{elementType}>;");
2573WriteLine($" get {propertyName}(): AspireList<{elementType}> {{");
2574WriteLine($" if (!this._{propertyName}) {{");
2575WriteLine($" this._{propertyName} = new AspireList<{elementType}>(");
2576WriteLine($" this._handle,");
2577WriteLine($" this._client,");
2578WriteLine($" {typeId},");
2579WriteLine($" {getterCapabilityId}");
2580WriteLine(" );");
2581WriteLine(" }");
2582WriteLine($" return this._{propertyName};");
2583WriteLine(" }");
2584WriteLine();
2639WriteLine($"): {returnPromiseInterfaceName} {{");
2640WriteLine(" const promise = (async () => {");
2645WriteLine($" {(_projector.IsWidenedHandleType(param.Type) ? "let" : "const")} {localParameterName} = {publicOptionsParamName}?.{param.Name};");
2650WriteLine($" const handle = await this._client.invokeCapability<{returnHandleType}>(");
2651WriteLine($" '{method.CapabilityId}',");
2652WriteLine(" rpcArgs");
2653WriteLine(" );");
2654WriteLine($" return new {returnImplementationClassName}(handle, this._client);");
2655WriteLine(" })();");
2656WriteLine($" return new {returnPromiseImplementationClassName}(promise, this._client);");
2657WriteLine(" }");
2658WriteLine();
2666WriteLine($"): Promise<{returnType}> {{");
2672WriteLine($" {(_projector.IsWidenedHandleType(param.Type) ? "let" : "const")} {localParameterName} = {publicOptionsParamName}?.{param.Name};");
2680WriteLine($" await this._client.invokeCapability<void>(");
2684WriteLine(" const result = await this._client.invokeCapability<string | null>(");
2685WriteLine($" '{method.CapabilityId}',");
2686WriteLine(" rpcArgs");
2687WriteLine(" );");
2688WriteLine(" return CancellationToken.fromValue(result);");
2689WriteLine(" }");
2690WriteLine();
2695WriteLine($" return await this._client.invokeCapability<{returnType}>(");
2697WriteLine($" '{method.CapabilityId}',");
2698WriteLine($" rpcArgs");
2699WriteLine(" );");
2700WriteLine(" }");
2701WriteLine();
2752WriteLine($"): {returnPromiseInterfaceName} {{");
2753WriteLine(" const promise = (async () => {");
2758WriteLine($" {(_projector.IsWidenedHandleType(param.Type) ? "let" : "const")} {localParameterName} = {publicOptionsParamName}?.{param.Name};");
2763WriteLine($" const handle = await this._client.invokeCapability<{returnHandleType}>(");
2764WriteLine($" '{capability.CapabilityId}',");
2765WriteLine(" rpcArgs");
2766WriteLine(" );");
2767WriteLine($" return new {returnImplementationClassName}(handle, this._client);");
2768WriteLine(" })();");
2769WriteLine($" return new {returnPromiseImplementationClassName}(promise, this._client);");
2770WriteLine(" }");
2771WriteLine();
2779WriteLine($"): Promise<{returnType}> {{");
2785WriteLine($" {(_projector.IsWidenedHandleType(param.Type) ? "let" : "const")} {localParameterName} = {publicOptionsParamName}?.{param.Name};");
2793WriteLine($" await this._client.invokeCapability<void>(");
2797WriteLine($" return await this._client.invokeCapability<{returnType}>(");
2799WriteLine($" '{capability.CapabilityId}',");
2800WriteLine($" rpcArgs");
2801WriteLine(" );");
2802WriteLine(" }");
2803WriteLine();
2882WriteLine($" /** @internal */");
2885WriteLine($"): Promise<{returnWrapperClass}> {{");
2900WriteLine($" const result = await this._client.invokeCapability<{returnHandleType}>(");
2901WriteLine($" '{capability.CapabilityId}',");
2902WriteLine($" rpcArgs");
2903WriteLine(" );");
2904WriteLine($" return new {returnWrapperImplementationClass}(result, this._client);");
2905WriteLine(" }");
2906WriteLine();
2912WriteLine($"): {returnPromiseWrapper} {{");
2918WriteLine($" {(_projector.IsWidenedHandleType(param.Type) ? "let" : "const")} {localParameterName} = {publicOptionsParamName}?.{param.Name};");
2927WriteLine($" const flushAndBuild = async () => {{ await this._client.flushPendingPromises(); return {internalCall}; }};");
2928WriteLine($" return new {returnPromiseImplementationClass}(flushAndBuild(), this._client, false);");
2932WriteLine($" return new {returnPromiseImplementationClass}({internalCall}, this._client);");
2934WriteLine(" }");
2940WriteLine($" /** @internal */");
2943WriteLine($"): Promise<{className}> {{");
2958WriteLine($" await this._client.invokeCapability<void>(");
2959WriteLine($" '{capability.CapabilityId}',");
2960WriteLine($" rpcArgs");
2961WriteLine(" );");
2962WriteLine($" return this;");
2963WriteLine(" }");
2964WriteLine();
2970WriteLine($"): {promiseClass} {{");
2976WriteLine($" {(_projector.IsWidenedHandleType(param.Type) ? "let" : "const")} {localParameterName} = {publicOptionsParamName}?.{param.Name};");
2981WriteLine("), this._client);");
2982WriteLine(" }");
2990WriteLine($"): Promise<{returnType}> {{");
2996WriteLine($" {(_projector.IsWidenedHandleType(param.Type) ? "let" : "const")} {localParameterName} = {publicOptionsParamName}?.{param.Name};");
3014WriteLine(" const result = await this._client.invokeCapability<string | null>(");
3015WriteLine($" '{capability.CapabilityId}',");
3016WriteLine(" rpcArgs");
3017WriteLine(" );");
3018WriteLine(" return CancellationToken.fromValue(result);");
3022WriteLine($" return await this._client.invokeCapability<{returnType}>(");
3023WriteLine($" '{capability.CapabilityId}',");
3024WriteLine($" rpcArgs");
3025WriteLine(" );");
3027WriteLine(" }");
3029WriteLine();