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();
752WriteLine("}");
753WriteLine();
825WriteLine($" /** {capability.Description} */");
829WriteLine($"): Promise<{returnType}> {{");
834WriteLine($" const {param.Name} = options?.{param.Name};");
854WriteLine($" return await this._client.invokeCapability<{returnType}>(");
855WriteLine($" '{capability.CapabilityId}',");
856WriteLine($" rpcArgs");
857WriteLine(" );");
858WriteLine(" }");
859WriteLine();
864WriteLine($" /** @internal */");
868WriteLine();
889WriteLine($" const result = await this._client.invokeCapability<{returnHandle}>(");
890WriteLine($" '{capability.CapabilityId}',");
891WriteLine($" rpcArgs");
892WriteLine(" );");
893WriteLine($" return new {returnClassName}(result, this._client);");
897WriteLine($" await this._client.invokeCapability<void>(");
898WriteLine($" '{capability.CapabilityId}',");
899WriteLine($" rpcArgs");
900WriteLine(" );");
901WriteLine($" return this;");
903WriteLine(" }");
904WriteLine();
909WriteLine($" /** {capability.Description} */");
915WriteLine();
920WriteLine($" const {param.Name} = options?.{param.Name};");
927WriteLine("));");
928WriteLine(" }");
929WriteLine();
963WriteLine($" const rpcArgs: Record<string, unknown> = {{ {string.Join(", ", requiredArgs)} }};");
972WriteLine($" if ({paramName} !== undefined) rpcArgs.{paramName} = {argName};");
980WriteLine($"/**");
981WriteLine($" * Thenable wrapper for {builder.BuilderClassName} that enables fluent chaining.");
982WriteLine($" * @example");
983WriteLine($" * await builder.addSomething().withX().withY();");
984WriteLine($" */");
985WriteLine($"export class {promiseClass} implements PromiseLike<{builder.BuilderClassName}> {{");
986WriteLine($" constructor(private _promise: Promise<{builder.BuilderClassName}>) {{}}");
987WriteLine();
990WriteLine($" then<TResult1 = {builder.BuilderClassName}, TResult2 = never>(");
991WriteLine($" onfulfilled?: ((value: {builder.BuilderClassName}) => TResult1 | PromiseLike<TResult1>) | null,");
992WriteLine(" onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null");
993WriteLine(" ): PromiseLike<TResult1 | TResult2> {");
994WriteLine(" return this._promise.then(onfulfilled, onrejected);");
995WriteLine(" }");
996WriteLine();
1042WriteLine($" /** {capability.Description} */");
1051WriteLine($"): Promise<{returnType}> {{");
1054WriteLine("));");
1055WriteLine(" }");
1074WriteLine();
1078WriteLine(")));");
1079WriteLine(" }");
1081WriteLine();
1084WriteLine("}");
1085WriteLine();
1095WriteLine("// ============================================================================");
1096WriteLine("// Entry Point Functions");
1097WriteLine("// ============================================================================");
1098WriteLine();
1135WriteLine($"/**");
1136WriteLine($" * {capability.Description}");
1137WriteLine($" */");
1150WriteLine($"): {returnPromiseWrapper} {{");
1151WriteLine($" const promise = client.invokeCapability<{handleType}>(");
1152WriteLine($" '{capability.CapabilityId}',");
1153WriteLine($" {argsObject}");
1154WriteLine($" ).then(handle => new {returnWrapperClass}(handle, client));");
1155WriteLine($" return new {returnPromiseWrapper}(promise);");
1156WriteLine("}");
1167WriteLine($"): Promise<{returnType}> {{");
1170WriteLine($" await client.invokeCapability<void>(");
1174WriteLine($" return await client.invokeCapability<{returnType}>(");
1176WriteLine($" '{capability.CapabilityId}',");
1177WriteLine($" {argsObject}");
1178WriteLine(" );");
1179WriteLine("}");
1181WriteLine();
1232WriteLine($" const {callbackName}Id = {callbackName} ? registerCallback(async ({paramSignature}) => {{");
1236WriteLine($" const {callbackName}Id = registerCallback(async ({paramSignature}) => {{");
1245WriteLine(" }) : undefined;");
1249WriteLine(" });");
1272WriteLine($" const {paramName}Id = {paramName} ? registerCancellation({paramName}) : undefined;");
1276WriteLine($" const {paramName}Id = registerCancellation({paramName});");
1295WriteLine($" {returnPrefix}await {callbackName}();");
1308WriteLine($" const {cbParam.Name}Handle = wrapIfHandle({cbParam.Name}Data) as {handleType};");
1309WriteLine($" const {cbParam.Name} = new {wrapperClassName}({cbParam.Name}Handle, this._client);");
1314WriteLine($" const {cbParam.Name} = wrapIfHandle({cbParam.Name}Data) as {tsType};");
1317WriteLine($" {returnPrefix}await {callbackName}({cbParam.Name});");
1325WriteLine($" const args = argsData as {{ {destructure}: unknown }};");
1338WriteLine($" const {cbParam.Name}Handle = wrapIfHandle(args.p{i}) as {handleType};");
1339WriteLine($" const {cbParam.Name} = new {wrapperClassName}({cbParam.Name}Handle, this._client);");
1344WriteLine($" const {cbParam.Name} = wrapIfHandle(args.p{i}) as {tsType};");
1349WriteLine($" {returnPrefix}await {callbackName}({string.Join(", ", callArgs)});");
1357WriteLine($$"""
1424WriteLine();
1429WriteLine("""
1473WriteLine();
1474WriteLine("// ============================================================================");
1475WriteLine("// Handle Wrapper Registrations");
1476WriteLine("// ============================================================================");
1477WriteLine();
1478WriteLine("// Register wrapper factories for typed handle wrapping in callbacks");
1485WriteLine($"registerHandleWrapper('{typeClass.TypeId}', (handle, client) => new {className}(handle as {handleType}, client));");
1493WriteLine($"registerHandleWrapper('{builder.TypeId}', (handle, client) => new {className}(handle as {handleType}, client));");
1496WriteLine();
1510WriteLine("// ============================================================================");
1511WriteLine($"// {className}");
1512WriteLine("// ============================================================================");
1513WriteLine();
1524WriteLine($"/**");
1525WriteLine($" * Type class for {className}.");
1526WriteLine($" */");
1527WriteLine($"export class {className} {{");
1528WriteLine($" constructor(private _handle: {handleType}, private _client: AspireClientRpc) {{}}");
1529WriteLine();
1530WriteLine($" /** Serialize for JSON-RPC transport */");
1531WriteLine($" toJSON(): MarshalledHandle {{ return this._handle.toJSON(); }}");
1532WriteLine();
1564WriteLine("}");
1565WriteLine();
1672WriteLine($" /** {description} */");
1675WriteLine($" {propertyName} = {{");
1680WriteLine($" get: async (): Promise<{returnType}> => {{");
1681WriteLine($" return await this._client.invokeCapability<{returnType}>(");
1682WriteLine($" '{getter.CapabilityId}',");
1683WriteLine($" {{ context: this._handle }}");
1684WriteLine(" );");
1685WriteLine(" },");
1695WriteLine($" set: async (value: {valueType}): Promise<void> => {{");
1696WriteLine($" await this._client.invokeCapability<void>(");
1697WriteLine($" '{setter.CapabilityId}',");
1698WriteLine($" {{ context: this._handle, value }}");
1699WriteLine(" );");
1700WriteLine(" }");
1704WriteLine(" };");
1705WriteLine();
1717WriteLine($" /** {getter.Description} */");
1720WriteLine($" {propertyName} = {{");
1721WriteLine($" get: async (): Promise<{wrapperClassName}> => {{");
1722WriteLine($" const handle = await this._client.invokeCapability<{handleType}>(");
1723WriteLine($" '{getter.CapabilityId}',");
1724WriteLine($" {{ context: this._handle }}");
1725WriteLine(" );");
1726WriteLine($" return new {wrapperClassName}(handle, this._client);");
1727WriteLine(" },");
1728WriteLine(" };");
1729WriteLine();
1773WriteLine($" /** {getter.Description} */");
1778WriteLine($" private _{propertyName}?: AspireDict<{keyType}, {valueType}>;");
1779WriteLine($" get {propertyName}(): AspireDict<{keyType}, {valueType}> {{");
1780WriteLine($" if (!this._{propertyName}) {{");
1781WriteLine($" this._{propertyName} = new AspireDict<{keyType}, {valueType}>(");
1782WriteLine($" this._handle,");
1783WriteLine($" this._client,");
1784WriteLine($" {typeId},");
1785WriteLine($" {getterCapabilityId}");
1786WriteLine(" );");
1787WriteLine(" }");
1788WriteLine($" return this._{propertyName};");
1789WriteLine(" }");
1790WriteLine();
1811WriteLine($" /** {getter.Description} */");
1816WriteLine($" private _{propertyName}?: AspireList<{elementType}>;");
1817WriteLine($" get {propertyName}(): AspireList<{elementType}> {{");
1818WriteLine($" if (!this._{propertyName}) {{");
1819WriteLine($" this._{propertyName} = new AspireList<{elementType}>(");
1820WriteLine($" this._handle,");
1821WriteLine($" this._client,");
1822WriteLine($" {typeId},");
1823WriteLine($" {getterCapabilityId}");
1824WriteLine(" );");
1825WriteLine(" }");
1826WriteLine($" return this._{propertyName};");
1827WriteLine(" }");
1828WriteLine();
1871WriteLine($" /** {method.Description} */");
1877WriteLine($"): Promise<{returnType}> {{");
1882WriteLine($" const {param.Name} = options?.{param.Name};");
1891WriteLine($" const rpcArgs: Record<string, unknown> = {{ {string.Join(", ", requiredArgs)} }};");
1894WriteLine($" if ({param.Name} !== undefined) rpcArgs.{param.Name} = {param.Name};");
1899WriteLine($" await this._client.invokeCapability<void>(");
1903WriteLine($" return await this._client.invokeCapability<{returnType}>(");
1905WriteLine($" '{method.CapabilityId}',");
1906WriteLine($" rpcArgs");
1907WriteLine(" );");
1908WriteLine(" }");
1909WriteLine();
1949WriteLine($" /** {capability.Description} */");
1955WriteLine($"): Promise<{returnType}> {{");
1960WriteLine($" const {param.Name} = options?.{param.Name};");
1969WriteLine($" const rpcArgs: Record<string, unknown> = {{ {string.Join(", ", requiredArgs)} }};");
1972WriteLine($" if ({param.Name} !== undefined) rpcArgs.{param.Name} = {param.Name};");
1977WriteLine($" await this._client.invokeCapability<void>(");
1981WriteLine($" return await this._client.invokeCapability<{returnType}>(");
1983WriteLine($" '{capability.CapabilityId}',");
1984WriteLine($" rpcArgs");
1985WriteLine(" );");
1986WriteLine(" }");
1987WriteLine();
2046WriteLine($" /** {capability.Description} */");
2057WriteLine($" /** @internal */");
2060WriteLine($"): Promise<{returnWrapperClass}> {{");
2072WriteLine($" const result = await this._client.invokeCapability<{returnHandleType}>(");
2073WriteLine($" '{capability.CapabilityId}',");
2074WriteLine($" rpcArgs");
2075WriteLine(" );");
2076WriteLine($" return new {returnWrapperClass}(result, this._client);");
2077WriteLine(" }");
2078WriteLine();
2083WriteLine($"): {returnPromiseWrapper} {{");
2088WriteLine($" const {param.Name} = options?.{param.Name};");
2093WriteLine("));");
2094WriteLine(" }");
2100WriteLine($" /** @internal */");
2103WriteLine($"): Promise<{className}> {{");
2115WriteLine($" await this._client.invokeCapability<void>(");
2116WriteLine($" '{capability.CapabilityId}',");
2117WriteLine($" rpcArgs");
2118WriteLine(" );");
2119WriteLine($" return this;");
2120WriteLine(" }");
2121WriteLine();
2126WriteLine($"): {promiseClass} {{");
2131WriteLine($" const {param.Name} = options?.{param.Name};");
2136WriteLine("));");
2137WriteLine(" }");
2144WriteLine($"): Promise<{returnType}> {{");
2149WriteLine($" const {param.Name} = options?.{param.Name};");
2162WriteLine($" return await this._client.invokeCapability<{returnType}>(");
2163WriteLine($" '{capability.CapabilityId}',");
2164WriteLine($" rpcArgs");
2165WriteLine(" );");
2166WriteLine(" }");
2168WriteLine();
2179WriteLine($"/**");
2180WriteLine($" * Thenable wrapper for {className} that enables fluent chaining.");
2181WriteLine($" */");
2182WriteLine($"export class {promiseClass} implements PromiseLike<{className}> {{");
2183WriteLine($" constructor(private _promise: Promise<{className}>) {{}}");
2184WriteLine();
2187WriteLine($" then<TResult1 = {className}, TResult2 = never>(");
2188WriteLine($" onfulfilled?: ((value: {className}) => TResult1 | PromiseLike<TResult1>) | null,");
2189WriteLine(" onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null");
2190WriteLine(" ): PromiseLike<TResult1 | TResult2> {");
2191WriteLine(" return this._promise.then(onfulfilled, onrejected);");
2192WriteLine(" }");
2193WriteLine();
2242WriteLine($" /** {capability.Description} */");
2250WriteLine($"): {returnPromiseWrapper} {{");
2253WriteLine(")));");
2254WriteLine(" }");
2261WriteLine($"): {promiseClass} {{");
2264WriteLine(")));");
2265WriteLine(" }");
2272WriteLine($"): Promise<{returnType}> {{");
2275WriteLine("));");
2276WriteLine(" }");
2278WriteLine();
2281WriteLine("}");
2282WriteLine();