AtsTypeScriptCodeGenerator.cs (307)
323WriteLine("""
348WriteLine();
504WriteLine("// ============================================================================");
505WriteLine("// Handle Type Aliases (Internal - not exported to users)");
506WriteLine("// ============================================================================");
507WriteLine();
513WriteLine($"/** {description} */");
515WriteLine($"type {handleName} = Handle<'{typeId}'>;");
516WriteLine();
530WriteLine("// ============================================================================");
531WriteLine("// Enum Types");
532WriteLine("// ============================================================================");
533WriteLine();
540WriteLine($"/** Enum type for {enumType.Name} */");
541WriteLine($"export enum {enumType.Name} {{");
546WriteLine($" {value} = \"{value}\",");
549WriteLine("}");
550WriteLine();
564WriteLine("// ============================================================================");
565WriteLine("// DTO Interfaces");
566WriteLine("// ============================================================================");
567WriteLine();
573WriteLine($"/** DTO interface for {dto.Name} */");
574WriteLine($"export interface {interfaceName} {{");
582WriteLine($" {propName}?: {tsType};");
585WriteLine("}");
586WriteLine();
688WriteLine("// ============================================================================");
689WriteLine("// Options Interfaces");
690WriteLine("// ============================================================================");
691WriteLine();
695WriteLine($"export interface {interfaceName} {{");
699WriteLine($" {param.Name}?: {tsType};");
701WriteLine("}");
702WriteLine();
714WriteLine("// ============================================================================");
715WriteLine($"// {builder.BuilderClassName}");
716WriteLine("// ============================================================================");
717WriteLine();
722WriteLine($"export class {builder.BuilderClassName} extends ResourceBuilderBase<{handleType}> {{");
725WriteLine($" constructor(handle: {handleType}, client: AspireClientRpc) {{");
726WriteLine($" super(handle, client);");
727WriteLine(" }");
728WriteLine();
740WriteLine("}");
741WriteLine();
798WriteLine($" /** {capability.Description} */");
802WriteLine($"): Promise<{returnType}> {{");
807WriteLine($" const {param.Name} = options?.{param.Name};");
827WriteLine($" return await this._client.invokeCapability<{returnType}>(");
828WriteLine($" '{capability.CapabilityId}',");
829WriteLine($" rpcArgs");
830WriteLine(" );");
831WriteLine(" }");
832WriteLine();
837WriteLine($" /** @internal */");
841WriteLine();
862WriteLine($" const result = await this._client.invokeCapability<{returnHandle}>(");
863WriteLine($" '{capability.CapabilityId}',");
864WriteLine($" rpcArgs");
865WriteLine(" );");
866WriteLine($" return new {builder.BuilderClassName}(result, this._client);");
870WriteLine($" await this._client.invokeCapability<void>(");
871WriteLine($" '{capability.CapabilityId}',");
872WriteLine($" rpcArgs");
873WriteLine(" );");
874WriteLine($" return this;");
876WriteLine(" }");
877WriteLine();
882WriteLine($" /** {capability.Description} */");
888WriteLine();
893WriteLine($" const {param.Name} = options?.{param.Name};");
900WriteLine("));");
901WriteLine(" }");
902WriteLine();
936WriteLine($" const rpcArgs: Record<string, unknown> = {{ {string.Join(", ", requiredArgs)} }};");
945WriteLine($" if ({paramName} !== undefined) rpcArgs.{paramName} = {argName};");
953WriteLine($"/**");
954WriteLine($" * Thenable wrapper for {builder.BuilderClassName} that enables fluent chaining.");
955WriteLine($" * @example");
956WriteLine($" * await builder.addSomething().withX().withY();");
957WriteLine($" */");
958WriteLine($"export class {promiseClass} implements PromiseLike<{builder.BuilderClassName}> {{");
959WriteLine($" constructor(private _promise: Promise<{builder.BuilderClassName}>) {{}}");
960WriteLine();
963WriteLine($" then<TResult1 = {builder.BuilderClassName}, TResult2 = never>(");
964WriteLine($" onfulfilled?: ((value: {builder.BuilderClassName}) => TResult1 | PromiseLike<TResult1>) | null,");
965WriteLine(" onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null");
966WriteLine(" ): PromiseLike<TResult1 | TResult2> {");
967WriteLine(" return this._promise.then(onfulfilled, onrejected);");
968WriteLine(" }");
969WriteLine();
1015WriteLine($" /** {capability.Description} */");
1024WriteLine($"): Promise<{returnType}> {{");
1027WriteLine("));");
1028WriteLine(" }");
1036WriteLine();
1040WriteLine(")));");
1041WriteLine(" }");
1043WriteLine();
1046WriteLine("}");
1047WriteLine();
1057WriteLine("// ============================================================================");
1058WriteLine("// Entry Point Functions");
1059WriteLine("// ============================================================================");
1060WriteLine();
1097WriteLine($"/**");
1098WriteLine($" * {capability.Description}");
1099WriteLine($" */");
1112WriteLine($"): {returnPromiseWrapper} {{");
1113WriteLine($" const promise = client.invokeCapability<{handleType}>(");
1114WriteLine($" '{capability.CapabilityId}',");
1115WriteLine($" {argsObject}");
1116WriteLine($" ).then(handle => new {returnWrapperClass}(handle, client));");
1117WriteLine($" return new {returnPromiseWrapper}(promise);");
1118WriteLine("}");
1129WriteLine($"): Promise<{returnType}> {{");
1132WriteLine($" await client.invokeCapability<void>(");
1136WriteLine($" return await client.invokeCapability<{returnType}>(");
1138WriteLine($" '{capability.CapabilityId}',");
1139WriteLine($" {argsObject}");
1140WriteLine(" );");
1141WriteLine("}");
1143WriteLine();
1194WriteLine($" const {callbackName}Id = {callbackName} ? registerCallback(async ({paramSignature}) => {{");
1198WriteLine($" const {callbackName}Id = registerCallback(async ({paramSignature}) => {{");
1207WriteLine(" }) : undefined;");
1211WriteLine(" });");
1234WriteLine($" const {paramName}Id = {paramName} ? registerCancellation({paramName}) : undefined;");
1238WriteLine($" const {paramName}Id = registerCancellation({paramName});");
1257WriteLine($" {returnPrefix}await {callbackName}();");
1270WriteLine($" const {cbParam.Name}Handle = wrapIfHandle({cbParam.Name}Data) as {handleType};");
1271WriteLine($" const {cbParam.Name} = new {wrapperClassName}({cbParam.Name}Handle, this._client);");
1276WriteLine($" const {cbParam.Name} = wrapIfHandle({cbParam.Name}Data) as {tsType};");
1279WriteLine($" {returnPrefix}await {callbackName}({cbParam.Name});");
1287WriteLine($" const args = argsData as {{ {destructure}: unknown }};");
1300WriteLine($" const {cbParam.Name}Handle = wrapIfHandle(args.p{i}) as {handleType};");
1301WriteLine($" const {cbParam.Name} = new {wrapperClassName}({cbParam.Name}Handle, this._client);");
1306WriteLine($" const {cbParam.Name} = wrapIfHandle(args.p{i}) as {tsType};");
1311WriteLine($" {returnPrefix}await {callbackName}({string.Join(", ", callArgs)});");
1319WriteLine($$"""
1386WriteLine();
1391WriteLine("""
1435WriteLine();
1436WriteLine("// ============================================================================");
1437WriteLine("// Handle Wrapper Registrations");
1438WriteLine("// ============================================================================");
1439WriteLine();
1440WriteLine("// Register wrapper factories for typed handle wrapping in callbacks");
1447WriteLine($"registerHandleWrapper('{typeClass.TypeId}', (handle, client) => new {className}(handle as {handleType}, client));");
1455WriteLine($"registerHandleWrapper('{builder.TypeId}', (handle, client) => new {className}(handle as {handleType}, client));");
1458WriteLine();
1472WriteLine("// ============================================================================");
1473WriteLine($"// {className}");
1474WriteLine("// ============================================================================");
1475WriteLine();
1486WriteLine($"/**");
1487WriteLine($" * Type class for {className}.");
1488WriteLine($" */");
1489WriteLine($"export class {className} {{");
1490WriteLine($" constructor(private _handle: {handleType}, private _client: AspireClientRpc) {{}}");
1491WriteLine();
1492WriteLine($" /** Serialize for JSON-RPC transport */");
1493WriteLine($" toJSON(): MarshalledHandle {{ return this._handle.toJSON(); }}");
1494WriteLine();
1526WriteLine("}");
1527WriteLine();
1634WriteLine($" /** {description} */");
1637WriteLine($" {propertyName} = {{");
1642WriteLine($" get: async (): Promise<{returnType}> => {{");
1643WriteLine($" return await this._client.invokeCapability<{returnType}>(");
1644WriteLine($" '{getter.CapabilityId}',");
1645WriteLine($" {{ context: this._handle }}");
1646WriteLine(" );");
1647WriteLine(" },");
1657WriteLine($" set: async (value: {valueType}): Promise<void> => {{");
1658WriteLine($" await this._client.invokeCapability<void>(");
1659WriteLine($" '{setter.CapabilityId}',");
1660WriteLine($" {{ context: this._handle, value }}");
1661WriteLine(" );");
1662WriteLine(" }");
1666WriteLine(" };");
1667WriteLine();
1679WriteLine($" /** {getter.Description} */");
1682WriteLine($" {propertyName} = {{");
1683WriteLine($" get: async (): Promise<{wrapperClassName}> => {{");
1684WriteLine($" const handle = await this._client.invokeCapability<{handleType}>(");
1685WriteLine($" '{getter.CapabilityId}',");
1686WriteLine($" {{ context: this._handle }}");
1687WriteLine(" );");
1688WriteLine($" return new {wrapperClassName}(handle, this._client);");
1689WriteLine(" },");
1690WriteLine(" };");
1691WriteLine();
1735WriteLine($" /** {getter.Description} */");
1740WriteLine($" private _{propertyName}?: AspireDict<{keyType}, {valueType}>;");
1741WriteLine($" get {propertyName}(): AspireDict<{keyType}, {valueType}> {{");
1742WriteLine($" if (!this._{propertyName}) {{");
1743WriteLine($" this._{propertyName} = new AspireDict<{keyType}, {valueType}>(");
1744WriteLine($" this._handle,");
1745WriteLine($" this._client,");
1746WriteLine($" {typeId},");
1747WriteLine($" {getterCapabilityId}");
1748WriteLine(" );");
1749WriteLine(" }");
1750WriteLine($" return this._{propertyName};");
1751WriteLine(" }");
1752WriteLine();
1773WriteLine($" /** {getter.Description} */");
1778WriteLine($" private _{propertyName}?: AspireList<{elementType}>;");
1779WriteLine($" get {propertyName}(): AspireList<{elementType}> {{");
1780WriteLine($" if (!this._{propertyName}) {{");
1781WriteLine($" this._{propertyName} = new AspireList<{elementType}>(");
1782WriteLine($" this._handle,");
1783WriteLine($" this._client,");
1784WriteLine($" {typeId},");
1785WriteLine($" {getterCapabilityId}");
1786WriteLine(" );");
1787WriteLine(" }");
1788WriteLine($" return this._{propertyName};");
1789WriteLine(" }");
1790WriteLine();
1833WriteLine($" /** {method.Description} */");
1839WriteLine($"): Promise<{returnType}> {{");
1844WriteLine($" const {param.Name} = options?.{param.Name};");
1853WriteLine($" const rpcArgs: Record<string, unknown> = {{ {string.Join(", ", requiredArgs)} }};");
1856WriteLine($" if ({param.Name} !== undefined) rpcArgs.{param.Name} = {param.Name};");
1861WriteLine($" await this._client.invokeCapability<void>(");
1865WriteLine($" return await this._client.invokeCapability<{returnType}>(");
1867WriteLine($" '{method.CapabilityId}',");
1868WriteLine($" rpcArgs");
1869WriteLine(" );");
1870WriteLine(" }");
1871WriteLine();
1911WriteLine($" /** {capability.Description} */");
1917WriteLine($"): Promise<{returnType}> {{");
1922WriteLine($" const {param.Name} = options?.{param.Name};");
1931WriteLine($" const rpcArgs: Record<string, unknown> = {{ {string.Join(", ", requiredArgs)} }};");
1934WriteLine($" if ({param.Name} !== undefined) rpcArgs.{param.Name} = {param.Name};");
1939WriteLine($" await this._client.invokeCapability<void>(");
1943WriteLine($" return await this._client.invokeCapability<{returnType}>(");
1945WriteLine($" '{capability.CapabilityId}',");
1946WriteLine($" rpcArgs");
1947WriteLine(" );");
1948WriteLine(" }");
1949WriteLine();
2008WriteLine($" /** {capability.Description} */");
2019WriteLine($" /** @internal */");
2022WriteLine($"): Promise<{returnWrapperClass}> {{");
2034WriteLine($" const result = await this._client.invokeCapability<{returnHandleType}>(");
2035WriteLine($" '{capability.CapabilityId}',");
2036WriteLine($" rpcArgs");
2037WriteLine(" );");
2038WriteLine($" return new {returnWrapperClass}(result, this._client);");
2039WriteLine(" }");
2040WriteLine();
2045WriteLine($"): {returnPromiseWrapper} {{");
2050WriteLine($" const {param.Name} = options?.{param.Name};");
2055WriteLine("));");
2056WriteLine(" }");
2062WriteLine($" /** @internal */");
2065WriteLine($"): Promise<{className}> {{");
2077WriteLine($" await this._client.invokeCapability<void>(");
2078WriteLine($" '{capability.CapabilityId}',");
2079WriteLine($" rpcArgs");
2080WriteLine(" );");
2081WriteLine($" return this;");
2082WriteLine(" }");
2083WriteLine();
2088WriteLine($"): {promiseClass} {{");
2093WriteLine($" const {param.Name} = options?.{param.Name};");
2098WriteLine("));");
2099WriteLine(" }");
2106WriteLine($"): Promise<{returnType}> {{");
2111WriteLine($" const {param.Name} = options?.{param.Name};");
2124WriteLine($" return await this._client.invokeCapability<{returnType}>(");
2125WriteLine($" '{capability.CapabilityId}',");
2126WriteLine($" rpcArgs");
2127WriteLine(" );");
2128WriteLine(" }");
2130WriteLine();
2141WriteLine($"/**");
2142WriteLine($" * Thenable wrapper for {className} that enables fluent chaining.");
2143WriteLine($" */");
2144WriteLine($"export class {promiseClass} implements PromiseLike<{className}> {{");
2145WriteLine($" constructor(private _promise: Promise<{className}>) {{}}");
2146WriteLine();
2149WriteLine($" then<TResult1 = {className}, TResult2 = never>(");
2150WriteLine($" onfulfilled?: ((value: {className}) => TResult1 | PromiseLike<TResult1>) | null,");
2151WriteLine(" onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null");
2152WriteLine(" ): PromiseLike<TResult1 | TResult2> {");
2153WriteLine(" return this._promise.then(onfulfilled, onrejected);");
2154WriteLine(" }");
2155WriteLine();
2204WriteLine($" /** {capability.Description} */");
2212WriteLine($"): {returnPromiseWrapper} {{");
2215WriteLine(")));");
2216WriteLine(" }");
2223WriteLine($"): {promiseClass} {{");
2226WriteLine(")));");
2227WriteLine(" }");
2234WriteLine($"): Promise<{returnType}> {{");
2237WriteLine("));");
2238WriteLine(" }");
2240WriteLine();
2243WriteLine("}");
2244WriteLine();