AtsTypeScriptCodeGenerator.cs (293)
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();
935WriteLine($" const rpcArgs: Record<string, unknown> = {{ {string.Join(", ", requiredArgs)} }};");
944WriteLine($" if ({paramName} !== undefined) rpcArgs.{rpcParamName} = {argName};");
952WriteLine($"/**");
953WriteLine($" * Thenable wrapper for {builder.BuilderClassName} that enables fluent chaining.");
954WriteLine($" * @example");
955WriteLine($" * await builder.addSomething().withX().withY();");
956WriteLine($" */");
957WriteLine($"export class {promiseClass} implements PromiseLike<{builder.BuilderClassName}> {{");
958WriteLine($" constructor(private _promise: Promise<{builder.BuilderClassName}>) {{}}");
959WriteLine();
962WriteLine($" then<TResult1 = {builder.BuilderClassName}, TResult2 = never>(");
963WriteLine($" onfulfilled?: ((value: {builder.BuilderClassName}) => TResult1 | PromiseLike<TResult1>) | null,");
964WriteLine(" onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null");
965WriteLine(" ): PromiseLike<TResult1 | TResult2> {");
966WriteLine(" return this._promise.then(onfulfilled, onrejected);");
967WriteLine(" }");
968WriteLine();
1014WriteLine($" /** {capability.Description} */");
1023WriteLine($"): Promise<{returnType}> {{");
1026WriteLine("));");
1027WriteLine(" }");
1035WriteLine();
1039WriteLine(")));");
1040WriteLine(" }");
1042WriteLine();
1045WriteLine("}");
1046WriteLine();
1056WriteLine("// ============================================================================");
1057WriteLine("// Entry Point Functions");
1058WriteLine("// ============================================================================");
1059WriteLine();
1096WriteLine($"/**");
1097WriteLine($" * {capability.Description}");
1098WriteLine($" */");
1111WriteLine($"): {returnPromiseWrapper} {{");
1112WriteLine($" const promise = client.invokeCapability<{handleType}>(");
1113WriteLine($" '{capability.CapabilityId}',");
1114WriteLine($" {argsObject}");
1115WriteLine($" ).then(handle => new {returnWrapperClass}(handle, client));");
1116WriteLine($" return new {returnPromiseWrapper}(promise);");
1117WriteLine("}");
1128WriteLine($"): Promise<{returnType}> {{");
1131WriteLine($" await client.invokeCapability<void>(");
1135WriteLine($" return await client.invokeCapability<{returnType}>(");
1137WriteLine($" '{capability.CapabilityId}',");
1138WriteLine($" {argsObject}");
1139WriteLine(" );");
1140WriteLine("}");
1142WriteLine();
1193WriteLine($" const {callbackName}Id = {callbackName} ? registerCallback(async ({paramSignature}) => {{");
1197WriteLine($" const {callbackName}Id = registerCallback(async ({paramSignature}) => {{");
1206WriteLine(" }) : undefined;");
1210WriteLine(" });");
1233WriteLine($" const {paramName}Id = {paramName} ? registerCancellation({paramName}) : undefined;");
1237WriteLine($" const {paramName}Id = registerCancellation({paramName});");
1256WriteLine($" {returnPrefix}await {callbackName}();");
1269WriteLine($" const {cbParam.Name}Handle = wrapIfHandle({cbParam.Name}Data) as {handleType};");
1270WriteLine($" const {cbParam.Name} = new {wrapperClassName}({cbParam.Name}Handle, this._client);");
1275WriteLine($" const {cbParam.Name} = wrapIfHandle({cbParam.Name}Data) as {tsType};");
1278WriteLine($" {returnPrefix}await {callbackName}({cbParam.Name});");
1286WriteLine($" const args = argsData as {{ {destructure}: unknown }};");
1299WriteLine($" const {cbParam.Name}Handle = wrapIfHandle(args.p{i}) as {handleType};");
1300WriteLine($" const {cbParam.Name} = new {wrapperClassName}({cbParam.Name}Handle, this._client);");
1305WriteLine($" const {cbParam.Name} = wrapIfHandle(args.p{i}) as {tsType};");
1310WriteLine($" {returnPrefix}await {callbackName}({string.Join(", ", callArgs)});");
1318WriteLine($$"""
1383WriteLine();
1388WriteLine("""
1432WriteLine();
1433WriteLine("// ============================================================================");
1434WriteLine("// Handle Wrapper Registrations");
1435WriteLine("// ============================================================================");
1436WriteLine();
1437WriteLine("// Register wrapper factories for typed handle wrapping in callbacks");
1444WriteLine($"registerHandleWrapper('{typeClass.TypeId}', (handle, client) => new {className}(handle as {handleType}, client));");
1452WriteLine($"registerHandleWrapper('{builder.TypeId}', (handle, client) => new {className}(handle as {handleType}, client));");
1455WriteLine();
1469WriteLine("// ============================================================================");
1470WriteLine($"// {className}");
1471WriteLine("// ============================================================================");
1472WriteLine();
1483WriteLine($"/**");
1484WriteLine($" * Type class for {className}.");
1485WriteLine($" */");
1486WriteLine($"export class {className} {{");
1487WriteLine($" constructor(private _handle: {handleType}, private _client: AspireClientRpc) {{}}");
1488WriteLine();
1489WriteLine($" /** Serialize for JSON-RPC transport */");
1490WriteLine($" toJSON(): MarshalledHandle {{ return this._handle.toJSON(); }}");
1491WriteLine();
1523WriteLine("}");
1524WriteLine();
1624WriteLine($" /** {description} */");
1627WriteLine($" {propertyName} = {{");
1632WriteLine($" get: async (): Promise<{returnType}> => {{");
1633WriteLine($" return await this._client.invokeCapability<{returnType}>(");
1634WriteLine($" '{getter.CapabilityId}',");
1635WriteLine($" {{ context: this._handle }}");
1636WriteLine(" );");
1637WriteLine(" },");
1647WriteLine($" set: async (value: {valueType}): Promise<void> => {{");
1648WriteLine($" await this._client.invokeCapability<void>(");
1649WriteLine($" '{setter.CapabilityId}',");
1650WriteLine($" {{ context: this._handle, value }}");
1651WriteLine(" );");
1652WriteLine(" }");
1656WriteLine(" };");
1657WriteLine();
1669WriteLine($" /** {getter.Description} */");
1672WriteLine($" {propertyName} = {{");
1673WriteLine($" get: async (): Promise<{wrapperClassName}> => {{");
1674WriteLine($" const handle = await this._client.invokeCapability<{handleType}>(");
1675WriteLine($" '{getter.CapabilityId}',");
1676WriteLine($" {{ context: this._handle }}");
1677WriteLine(" );");
1678WriteLine($" return new {wrapperClassName}(handle, this._client);");
1679WriteLine(" },");
1680WriteLine(" };");
1681WriteLine();
1717WriteLine($" /** {getter.Description} */");
1722WriteLine($" private _{propertyName}?: AspireDict<{keyType}, {valueType}>;");
1723WriteLine($" get {propertyName}(): AspireDict<{keyType}, {valueType}> {{");
1724WriteLine($" if (!this._{propertyName}) {{");
1725WriteLine($" this._{propertyName} = new AspireDict<{keyType}, {valueType}>(");
1726WriteLine($" this._handle,");
1727WriteLine($" this._client,");
1728WriteLine($" {typeId},");
1729WriteLine($" {getterCapabilityId}");
1730WriteLine(" );");
1731WriteLine(" }");
1732WriteLine($" return this._{propertyName};");
1733WriteLine(" }");
1734WriteLine();
1777WriteLine($" /** {method.Description} */");
1783WriteLine($"): Promise<{returnType}> {{");
1788WriteLine($" const {param.Name} = options?.{param.Name};");
1797WriteLine($" const rpcArgs: Record<string, unknown> = {{ {string.Join(", ", requiredArgs)} }};");
1800WriteLine($" if ({param.Name} !== undefined) rpcArgs.{param.Name} = {param.Name};");
1805WriteLine($" await this._client.invokeCapability<void>(");
1809WriteLine($" return await this._client.invokeCapability<{returnType}>(");
1811WriteLine($" '{method.CapabilityId}',");
1812WriteLine($" rpcArgs");
1813WriteLine(" );");
1814WriteLine(" }");
1815WriteLine();
1855WriteLine($" /** {capability.Description} */");
1861WriteLine($"): Promise<{returnType}> {{");
1866WriteLine($" const {param.Name} = options?.{param.Name};");
1875WriteLine($" const rpcArgs: Record<string, unknown> = {{ {string.Join(", ", requiredArgs)} }};");
1878WriteLine($" if ({param.Name} !== undefined) rpcArgs.{param.Name} = {param.Name};");
1883WriteLine($" await this._client.invokeCapability<void>(");
1887WriteLine($" return await this._client.invokeCapability<{returnType}>(");
1889WriteLine($" '{capability.CapabilityId}',");
1890WriteLine($" rpcArgs");
1891WriteLine(" );");
1892WriteLine(" }");
1893WriteLine();
1952WriteLine($" /** {capability.Description} */");
1963WriteLine($" /** @internal */");
1966WriteLine($"): Promise<{returnWrapperClass}> {{");
1978WriteLine($" const result = await this._client.invokeCapability<{returnHandleType}>(");
1979WriteLine($" '{capability.CapabilityId}',");
1980WriteLine($" rpcArgs");
1981WriteLine(" );");
1982WriteLine($" return new {returnWrapperClass}(result, this._client);");
1983WriteLine(" }");
1984WriteLine();
1989WriteLine($"): {returnPromiseWrapper} {{");
1994WriteLine($" const {param.Name} = options?.{param.Name};");
1999WriteLine("));");
2000WriteLine(" }");
2006WriteLine($" /** @internal */");
2009WriteLine($"): Promise<{className}> {{");
2021WriteLine($" await this._client.invokeCapability<void>(");
2022WriteLine($" '{capability.CapabilityId}',");
2023WriteLine($" rpcArgs");
2024WriteLine(" );");
2025WriteLine($" return this;");
2026WriteLine(" }");
2027WriteLine();
2032WriteLine($"): {promiseClass} {{");
2037WriteLine($" const {param.Name} = options?.{param.Name};");
2042WriteLine("));");
2043WriteLine(" }");
2050WriteLine($"): Promise<{returnType}> {{");
2055WriteLine($" const {param.Name} = options?.{param.Name};");
2068WriteLine($" return await this._client.invokeCapability<{returnType}>(");
2069WriteLine($" '{capability.CapabilityId}',");
2070WriteLine($" rpcArgs");
2071WriteLine(" );");
2072WriteLine(" }");
2074WriteLine();
2085WriteLine($"/**");
2086WriteLine($" * Thenable wrapper for {className} that enables fluent chaining.");
2087WriteLine($" */");
2088WriteLine($"export class {promiseClass} implements PromiseLike<{className}> {{");
2089WriteLine($" constructor(private _promise: Promise<{className}>) {{}}");
2090WriteLine();
2093WriteLine($" then<TResult1 = {className}, TResult2 = never>(");
2094WriteLine($" onfulfilled?: ((value: {className}) => TResult1 | PromiseLike<TResult1>) | null,");
2095WriteLine(" onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null");
2096WriteLine(" ): PromiseLike<TResult1 | TResult2> {");
2097WriteLine(" return this._promise.then(onfulfilled, onrejected);");
2098WriteLine(" }");
2099WriteLine();
2148WriteLine($" /** {capability.Description} */");
2156WriteLine($"): {returnPromiseWrapper} {{");
2159WriteLine(")));");
2160WriteLine(" }");
2167WriteLine($"): {promiseClass} {{");
2170WriteLine(")));");
2171WriteLine(" }");
2178WriteLine($"): Promise<{returnType}> {{");
2181WriteLine("));");
2182WriteLine(" }");
2184WriteLine();
2187WriteLine("}");
2188WriteLine();