AtsTypeScriptCodeGenerator.cs (307)
334WriteLine("""
360WriteLine();
530WriteLine("// ============================================================================");
531WriteLine("// Handle Type Aliases (Internal - not exported to users)");
532WriteLine("// ============================================================================");
533WriteLine();
539WriteLine($"/** {description} */");
541WriteLine($"type {handleName} = Handle<'{typeId}'>;");
542WriteLine();
556WriteLine("// ============================================================================");
557WriteLine("// Enum Types");
558WriteLine("// ============================================================================");
559WriteLine();
566WriteLine($"/** Enum type for {enumType.Name} */");
567WriteLine($"export enum {enumType.Name} {{");
572WriteLine($" {value} = \"{value}\",");
575WriteLine("}");
576WriteLine();
590WriteLine("// ============================================================================");
591WriteLine("// DTO Interfaces");
592WriteLine("// ============================================================================");
593WriteLine();
599WriteLine($"/** DTO interface for {dto.Name} */");
600WriteLine($"export interface {interfaceName} {{");
608WriteLine($" {propName}?: {tsType};");
611WriteLine("}");
612WriteLine();
852WriteLine("// ============================================================================");
853WriteLine("// Options Interfaces");
854WriteLine("// ============================================================================");
855WriteLine();
859WriteLine($"export interface {interfaceName} {{");
863WriteLine($" {param.Name}?: {tsType};");
865WriteLine("}");
866WriteLine();
878WriteLine("// ============================================================================");
879WriteLine($"// {builder.BuilderClassName}");
880WriteLine("// ============================================================================");
881WriteLine();
886WriteLine($"export class {builder.BuilderClassName} extends ResourceBuilderBase<{handleType}> {{");
889WriteLine($" constructor(handle: {handleType}, client: AspireClientRpc) {{");
890WriteLine($" super(handle, client);");
891WriteLine(" }");
892WriteLine();
916WriteLine("}");
917WriteLine();
989WriteLine($" /** {capability.Description} */");
993WriteLine($"): Promise<{returnType}> {{");
998WriteLine($" const {param.Name} = options?.{param.Name};");
1018WriteLine($" return await this._client.invokeCapability<{returnType}>(");
1019WriteLine($" '{capability.CapabilityId}',");
1020WriteLine($" rpcArgs");
1021WriteLine(" );");
1022WriteLine(" }");
1023WriteLine();
1028WriteLine($" /** @internal */");
1032WriteLine();
1053WriteLine($" const result = await this._client.invokeCapability<{returnHandle}>(");
1054WriteLine($" '{capability.CapabilityId}',");
1055WriteLine($" rpcArgs");
1056WriteLine(" );");
1057WriteLine($" return new {returnClassName}(result, this._client);");
1061WriteLine($" await this._client.invokeCapability<void>(");
1062WriteLine($" '{capability.CapabilityId}',");
1063WriteLine($" rpcArgs");
1064WriteLine(" );");
1065WriteLine($" return this;");
1067WriteLine(" }");
1068WriteLine();
1073WriteLine($" /** {capability.Description} */");
1079WriteLine();
1084WriteLine($" const {param.Name} = options?.{param.Name};");
1091WriteLine("));");
1092WriteLine(" }");
1093WriteLine();
1127WriteLine($" const rpcArgs: Record<string, unknown> = {{ {string.Join(", ", requiredArgs)} }};");
1136WriteLine($" if ({paramName} !== undefined) rpcArgs.{paramName} = {argName};");
1144WriteLine($"/**");
1145WriteLine($" * Thenable wrapper for {builder.BuilderClassName} that enables fluent chaining.");
1146WriteLine($" * @example");
1147WriteLine($" * await builder.addSomething().withX().withY();");
1148WriteLine($" */");
1149WriteLine($"export class {promiseClass} implements PromiseLike<{builder.BuilderClassName}> {{");
1150WriteLine($" constructor(private _promise: Promise<{builder.BuilderClassName}>) {{}}");
1151WriteLine();
1154WriteLine($" then<TResult1 = {builder.BuilderClassName}, TResult2 = never>(");
1155WriteLine($" onfulfilled?: ((value: {builder.BuilderClassName}) => TResult1 | PromiseLike<TResult1>) | null,");
1156WriteLine(" onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null");
1157WriteLine(" ): PromiseLike<TResult1 | TResult2> {");
1158WriteLine(" return this._promise.then(onfulfilled, onrejected);");
1159WriteLine(" }");
1160WriteLine();
1206WriteLine($" /** {capability.Description} */");
1215WriteLine($"): Promise<{returnType}> {{");
1218WriteLine("));");
1219WriteLine(" }");
1238WriteLine();
1242WriteLine(")));");
1243WriteLine(" }");
1245WriteLine();
1248WriteLine("}");
1249WriteLine();
1259WriteLine("// ============================================================================");
1260WriteLine("// Entry Point Functions");
1261WriteLine("// ============================================================================");
1262WriteLine();
1299WriteLine($"/**");
1300WriteLine($" * {capability.Description}");
1301WriteLine($" */");
1314WriteLine($"): {returnPromiseWrapper} {{");
1315WriteLine($" const promise = client.invokeCapability<{handleType}>(");
1316WriteLine($" '{capability.CapabilityId}',");
1317WriteLine($" {argsObject}");
1318WriteLine($" ).then(handle => new {returnWrapperClass}(handle, client));");
1319WriteLine($" return new {returnPromiseWrapper}(promise);");
1320WriteLine("}");
1331WriteLine($"): Promise<{returnType}> {{");
1334WriteLine($" await client.invokeCapability<void>(");
1338WriteLine($" return await client.invokeCapability<{returnType}>(");
1340WriteLine($" '{capability.CapabilityId}',");
1341WriteLine($" {argsObject}");
1342WriteLine(" );");
1343WriteLine("}");
1345WriteLine();
1396WriteLine($" const {callbackName}Id = {callbackName} ? registerCallback(async ({paramSignature}) => {{");
1400WriteLine($" const {callbackName}Id = registerCallback(async ({paramSignature}) => {{");
1409WriteLine(" }) : undefined;");
1413WriteLine(" });");
1436WriteLine($" const {paramName}Id = {paramName} ? registerCancellation({paramName}) : undefined;");
1440WriteLine($" const {paramName}Id = registerCancellation({paramName});");
1459WriteLine($" {returnPrefix}await {callbackName}();");
1472WriteLine($" const {cbParam.Name}Handle = wrapIfHandle({cbParam.Name}Data) as {handleType};");
1473WriteLine($" const {cbParam.Name} = new {wrapperClassName}({cbParam.Name}Handle, this._client);");
1478WriteLine($" const {cbParam.Name} = wrapIfHandle({cbParam.Name}Data) as {tsType};");
1481WriteLine($" {returnPrefix}await {callbackName}({cbParam.Name});");
1489WriteLine($" const args = argsData as {{ {destructureWithTypes} }};");
1502WriteLine($" const {cbParam.Name}Handle = wrapIfHandle(args.p{i}) as {handleType};");
1503WriteLine($" const {cbParam.Name} = new {wrapperClassName}({cbParam.Name}Handle, this._client);");
1508WriteLine($" const {cbParam.Name} = wrapIfHandle(args.p{i}) as {tsType};");
1513WriteLine($" {returnPrefix}await {callbackName}({string.Join(", ", callArgs)});");
1521WriteLine($$"""
1588WriteLine();
1593WriteLine("""
1643WriteLine();
1644WriteLine("// ============================================================================");
1645WriteLine("// Handle Wrapper Registrations");
1646WriteLine("// ============================================================================");
1647WriteLine();
1648WriteLine("// Register wrapper factories for typed handle wrapping in callbacks");
1655WriteLine($"registerHandleWrapper('{typeClass.TypeId}', (handle, client) => new {className}(handle as {handleType}, client));");
1663WriteLine($"registerHandleWrapper('{builder.TypeId}', (handle, client) => new {className}(handle as {handleType}, client));");
1666WriteLine();
1680WriteLine("// ============================================================================");
1681WriteLine($"// {className}");
1682WriteLine("// ============================================================================");
1683WriteLine();
1694WriteLine($"/**");
1695WriteLine($" * Type class for {className}.");
1696WriteLine($" */");
1697WriteLine($"export class {className} {{");
1698WriteLine($" constructor(private _handle: {handleType}, private _client: AspireClientRpc) {{}}");
1699WriteLine();
1700WriteLine($" /** Serialize for JSON-RPC transport */");
1701WriteLine($" toJSON(): MarshalledHandle {{ return this._handle.toJSON(); }}");
1702WriteLine();
1734WriteLine("}");
1735WriteLine();
1842WriteLine($" /** {description} */");
1845WriteLine($" {propertyName} = {{");
1850WriteLine($" get: async (): Promise<{returnType}> => {{");
1851WriteLine($" return await this._client.invokeCapability<{returnType}>(");
1852WriteLine($" '{getter.CapabilityId}',");
1853WriteLine($" {{ context: this._handle }}");
1854WriteLine(" );");
1855WriteLine(" },");
1865WriteLine($" set: async (value: {valueType}): Promise<void> => {{");
1866WriteLine($" await this._client.invokeCapability<void>(");
1867WriteLine($" '{setter.CapabilityId}',");
1868WriteLine($" {{ context: this._handle, value }}");
1869WriteLine(" );");
1870WriteLine(" }");
1874WriteLine(" };");
1875WriteLine();
1887WriteLine($" /** {getter.Description} */");
1890WriteLine($" {propertyName} = {{");
1891WriteLine($" get: async (): Promise<{wrapperClassName}> => {{");
1892WriteLine($" const handle = await this._client.invokeCapability<{handleType}>(");
1893WriteLine($" '{getter.CapabilityId}',");
1894WriteLine($" {{ context: this._handle }}");
1895WriteLine(" );");
1896WriteLine($" return new {wrapperClassName}(handle, this._client);");
1897WriteLine(" },");
1898WriteLine(" };");
1899WriteLine();
1943WriteLine($" /** {getter.Description} */");
1948WriteLine($" private _{propertyName}?: AspireDict<{keyType}, {valueType}>;");
1949WriteLine($" get {propertyName}(): AspireDict<{keyType}, {valueType}> {{");
1950WriteLine($" if (!this._{propertyName}) {{");
1951WriteLine($" this._{propertyName} = new AspireDict<{keyType}, {valueType}>(");
1952WriteLine($" this._handle,");
1953WriteLine($" this._client,");
1954WriteLine($" {typeId},");
1955WriteLine($" {getterCapabilityId}");
1956WriteLine(" );");
1957WriteLine(" }");
1958WriteLine($" return this._{propertyName};");
1959WriteLine(" }");
1960WriteLine();
1981WriteLine($" /** {getter.Description} */");
1986WriteLine($" private _{propertyName}?: AspireList<{elementType}>;");
1987WriteLine($" get {propertyName}(): AspireList<{elementType}> {{");
1988WriteLine($" if (!this._{propertyName}) {{");
1989WriteLine($" this._{propertyName} = new AspireList<{elementType}>(");
1990WriteLine($" this._handle,");
1991WriteLine($" this._client,");
1992WriteLine($" {typeId},");
1993WriteLine($" {getterCapabilityId}");
1994WriteLine(" );");
1995WriteLine(" }");
1996WriteLine($" return this._{propertyName};");
1997WriteLine(" }");
1998WriteLine();
2041WriteLine($" /** {method.Description} */");
2047WriteLine($"): Promise<{returnType}> {{");
2052WriteLine($" const {param.Name} = options?.{param.Name};");
2061WriteLine($" const rpcArgs: Record<string, unknown> = {{ {string.Join(", ", requiredArgs)} }};");
2064WriteLine($" if ({param.Name} !== undefined) rpcArgs.{param.Name} = {param.Name};");
2069WriteLine($" await this._client.invokeCapability<void>(");
2073WriteLine($" return await this._client.invokeCapability<{returnType}>(");
2075WriteLine($" '{method.CapabilityId}',");
2076WriteLine($" rpcArgs");
2077WriteLine(" );");
2078WriteLine(" }");
2079WriteLine();
2119WriteLine($" /** {capability.Description} */");
2125WriteLine($"): Promise<{returnType}> {{");
2130WriteLine($" const {param.Name} = options?.{param.Name};");
2139WriteLine($" const rpcArgs: Record<string, unknown> = {{ {string.Join(", ", requiredArgs)} }};");
2142WriteLine($" if ({param.Name} !== undefined) rpcArgs.{param.Name} = {param.Name};");
2147WriteLine($" await this._client.invokeCapability<void>(");
2151WriteLine($" return await this._client.invokeCapability<{returnType}>(");
2153WriteLine($" '{capability.CapabilityId}',");
2154WriteLine($" rpcArgs");
2155WriteLine(" );");
2156WriteLine(" }");
2157WriteLine();
2216WriteLine($" /** {capability.Description} */");
2227WriteLine($" /** @internal */");
2230WriteLine($"): Promise<{returnWrapperClass}> {{");
2242WriteLine($" const result = await this._client.invokeCapability<{returnHandleType}>(");
2243WriteLine($" '{capability.CapabilityId}',");
2244WriteLine($" rpcArgs");
2245WriteLine(" );");
2246WriteLine($" return new {returnWrapperClass}(result, this._client);");
2247WriteLine(" }");
2248WriteLine();
2253WriteLine($"): {returnPromiseWrapper} {{");
2258WriteLine($" const {param.Name} = options?.{param.Name};");
2263WriteLine("));");
2264WriteLine(" }");
2270WriteLine($" /** @internal */");
2273WriteLine($"): Promise<{className}> {{");
2285WriteLine($" await this._client.invokeCapability<void>(");
2286WriteLine($" '{capability.CapabilityId}',");
2287WriteLine($" rpcArgs");
2288WriteLine(" );");
2289WriteLine($" return this;");
2290WriteLine(" }");
2291WriteLine();
2296WriteLine($"): {promiseClass} {{");
2301WriteLine($" const {param.Name} = options?.{param.Name};");
2306WriteLine("));");
2307WriteLine(" }");
2314WriteLine($"): Promise<{returnType}> {{");
2319WriteLine($" const {param.Name} = options?.{param.Name};");
2332WriteLine($" return await this._client.invokeCapability<{returnType}>(");
2333WriteLine($" '{capability.CapabilityId}',");
2334WriteLine($" rpcArgs");
2335WriteLine(" );");
2336WriteLine(" }");
2338WriteLine();
2349WriteLine($"/**");
2350WriteLine($" * Thenable wrapper for {className} that enables fluent chaining.");
2351WriteLine($" */");
2352WriteLine($"export class {promiseClass} implements PromiseLike<{className}> {{");
2353WriteLine($" constructor(private _promise: Promise<{className}>) {{}}");
2354WriteLine();
2357WriteLine($" then<TResult1 = {className}, TResult2 = never>(");
2358WriteLine($" onfulfilled?: ((value: {className}) => TResult1 | PromiseLike<TResult1>) | null,");
2359WriteLine(" onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null");
2360WriteLine(" ): PromiseLike<TResult1 | TResult2> {");
2361WriteLine(" return this._promise.then(onfulfilled, onrejected);");
2362WriteLine(" }");
2363WriteLine();
2412WriteLine($" /** {capability.Description} */");
2420WriteLine($"): {returnPromiseWrapper} {{");
2423WriteLine(")));");
2424WriteLine(" }");
2431WriteLine($"): {promiseClass} {{");
2434WriteLine(")));");
2435WriteLine(" }");
2442WriteLine($"): Promise<{returnType}> {{");
2445WriteLine("));");
2446WriteLine(" }");
2448WriteLine();
2451WriteLine("}");
2452WriteLine();