AtsTypeScriptCodeGenerator.cs (339)
379WriteLine("""
406WriteLine();
576WriteLine("// ============================================================================");
577WriteLine("// Handle Type Aliases (Internal - not exported to users)");
578WriteLine("// ============================================================================");
579WriteLine();
585WriteLine($"/** {description} */");
587WriteLine($"type {handleName} = Handle<'{typeId}'>;");
588WriteLine();
602WriteLine("// ============================================================================");
603WriteLine("// Enum Types");
604WriteLine("// ============================================================================");
605WriteLine();
612WriteLine($"/** Enum type for {enumType.Name} */");
613WriteLine($"export enum {enumType.Name} {{");
618WriteLine($" {value} = \"{value}\",");
621WriteLine("}");
622WriteLine();
636WriteLine("// ============================================================================");
637WriteLine("// DTO Interfaces");
638WriteLine("// ============================================================================");
639WriteLine();
645WriteLine($"/** DTO interface for {dto.Name} */");
646WriteLine($"export interface {interfaceName} {{");
654WriteLine($" {propName}?: {tsType};");
657WriteLine("}");
658WriteLine();
898WriteLine("// ============================================================================");
899WriteLine("// Options Interfaces");
900WriteLine("// ============================================================================");
901WriteLine();
905WriteLine($"export interface {interfaceName} {{");
909WriteLine($" {param.Name}?: {tsType};");
911WriteLine("}");
912WriteLine();
924WriteLine("// ============================================================================");
925WriteLine($"// {builder.BuilderClassName}");
926WriteLine("// ============================================================================");
927WriteLine();
932WriteLine($"export class {builder.BuilderClassName} extends ResourceBuilderBase<{handleType}> {{");
935WriteLine($" constructor(handle: {handleType}, client: AspireClientRpc) {{");
936WriteLine($" super(handle, client);");
937WriteLine(" }");
938WriteLine();
962WriteLine("}");
963WriteLine();
1035WriteLine($" /** {capability.Description} */");
1039WriteLine($"): Promise<{returnType}> {{");
1044WriteLine($" const {param.Name} = options?.{param.Name};");
1059WriteLine(" const result = await this._client.invokeCapability<string | null>(");
1060WriteLine($" '{capability.CapabilityId}',");
1061WriteLine(" rpcArgs");
1062WriteLine(" );");
1063WriteLine(" return CancellationToken.fromValue(result);");
1067WriteLine($" return await this._client.invokeCapability<{returnType}>(");
1068WriteLine($" '{capability.CapabilityId}',");
1069WriteLine($" rpcArgs");
1070WriteLine(" );");
1072WriteLine(" }");
1073WriteLine();
1078WriteLine($" /** @internal */");
1082WriteLine();
1096WriteLine($" const result = await this._client.invokeCapability<{returnHandle}>(");
1097WriteLine($" '{capability.CapabilityId}',");
1098WriteLine($" rpcArgs");
1099WriteLine(" );");
1100WriteLine($" return new {returnClassName}(result, this._client);");
1104WriteLine($" await this._client.invokeCapability<void>(");
1105WriteLine($" '{capability.CapabilityId}',");
1106WriteLine($" rpcArgs");
1107WriteLine(" );");
1108WriteLine($" return this;");
1110WriteLine(" }");
1111WriteLine();
1116WriteLine($" /** {capability.Description} */");
1122WriteLine();
1127WriteLine($" const {param.Name} = options?.{param.Name};");
1134WriteLine("));");
1135WriteLine(" }");
1136WriteLine();
1154WriteLine($" const rpcArgs: Record<string, unknown> = {{ {string.Join(", ", requiredArgs)} }};");
1160WriteLine($" if ({param.Name} !== undefined) rpcArgs.{param.Name} = {rpcExpression};");
1168WriteLine($"/**");
1169WriteLine($" * Thenable wrapper for {builder.BuilderClassName} that enables fluent chaining.");
1170WriteLine($" * @example");
1171WriteLine($" * await builder.addSomething().withX().withY();");
1172WriteLine($" */");
1173WriteLine($"export class {promiseClass} implements PromiseLike<{builder.BuilderClassName}> {{");
1174WriteLine($" constructor(private _promise: Promise<{builder.BuilderClassName}>) {{}}");
1175WriteLine();
1178WriteLine($" then<TResult1 = {builder.BuilderClassName}, TResult2 = never>(");
1179WriteLine($" onfulfilled?: ((value: {builder.BuilderClassName}) => TResult1 | PromiseLike<TResult1>) | null,");
1180WriteLine(" onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null");
1181WriteLine(" ): PromiseLike<TResult1 | TResult2> {");
1182WriteLine(" return this._promise.then(onfulfilled, onrejected);");
1183WriteLine(" }");
1184WriteLine();
1230WriteLine($" /** {capability.Description} */");
1239WriteLine($"): Promise<{returnType}> {{");
1242WriteLine("));");
1243WriteLine(" }");
1262WriteLine();
1266WriteLine(")));");
1267WriteLine(" }");
1269WriteLine();
1272WriteLine("}");
1273WriteLine();
1283WriteLine("// ============================================================================");
1284WriteLine("// Entry Point Functions");
1285WriteLine("// ============================================================================");
1286WriteLine();
1318WriteLine($"/**");
1319WriteLine($" * {capability.Description}");
1320WriteLine($" */");
1333WriteLine($"): {returnPromiseWrapper} {{");
1337WriteLine($" const rpcArgs: Record<string, unknown> = {{ {string.Join(", ", requiredArgs)} }};");
1340WriteLine($" if ({param.Name} !== undefined) rpcArgs.{param.Name} = {GetRpcArgumentExpression(param, useRegisteredCallback: false)};");
1342WriteLine($" const promise = client.invokeCapability<{handleType}>(");
1343WriteLine($" '{capability.CapabilityId}',");
1344WriteLine(" rpcArgs");
1345WriteLine($" ).then(handle => new {returnWrapperClass}(handle, client));");
1346WriteLine($" return new {returnPromiseWrapper}(promise);");
1347WriteLine("}");
1358WriteLine($"): Promise<{returnType}> {{");
1362WriteLine($" const rpcArgs: Record<string, unknown> = {{ {string.Join(", ", requiredArgs)} }};");
1365WriteLine($" if ({param.Name} !== undefined) rpcArgs.{param.Name} = {GetRpcArgumentExpression(param, useRegisteredCallback: false)};");
1369WriteLine($" await client.invokeCapability<void>(");
1373WriteLine(" const result = await client.invokeCapability<string | null>(");
1374WriteLine($" '{capability.CapabilityId}',");
1375WriteLine(" rpcArgs");
1376WriteLine(" );");
1377WriteLine(" return CancellationToken.fromValue(result);");
1378WriteLine("}");
1379WriteLine();
1384WriteLine($" return await client.invokeCapability<{returnType}>(");
1386WriteLine($" '{capability.CapabilityId}',");
1387WriteLine(" rpcArgs");
1388WriteLine(" );");
1389WriteLine("}");
1391WriteLine();
1442WriteLine($" const {callbackName}Id = {callbackName} ? registerCallback(async ({paramSignature}) => {{");
1446WriteLine($" const {callbackName}Id = registerCallback(async ({paramSignature}) => {{");
1455WriteLine(" }) : undefined;");
1459WriteLine(" });");
1478WriteLine($" {returnPrefix}await {callbackName}();");
1489WriteLine($" const {cbParam.Name} = CancellationToken.fromValue({cbParam.Name}Data);");
1495WriteLine($" const {cbParam.Name}Handle = wrapIfHandle({cbParam.Name}Data) as {handleType};");
1496WriteLine($" const {cbParam.Name} = new {wrapperClassName}({cbParam.Name}Handle, this._client);");
1501WriteLine($" const {cbParam.Name} = wrapIfHandle({cbParam.Name}Data) as {tsType};");
1504WriteLine($" {returnPrefix}await {callbackName}({cbParam.Name});");
1518WriteLine($" const {cbParam.Name} = CancellationToken.fromValue(args.p{i});");
1524WriteLine($" const {cbParam.Name}Handle = wrapIfHandle({callbackArgName}) as {handleType};");
1525WriteLine($" const {cbParam.Name} = new {wrapperClassName}({cbParam.Name}Handle, this._client);");
1530WriteLine($" const {cbParam.Name} = wrapIfHandle({callbackArgName}) as {tsType};");
1535WriteLine($" {returnPrefix}await {callbackName}({string.Join(", ", callArgs)});");
1543WriteLine($$"""
1610WriteLine();
1615WriteLine("""
1665WriteLine();
1666WriteLine("// ============================================================================");
1667WriteLine("// Handle Wrapper Registrations");
1668WriteLine("// ============================================================================");
1669WriteLine();
1670WriteLine("// Register wrapper factories for typed handle wrapping in callbacks");
1677WriteLine($"registerHandleWrapper('{typeClass.TypeId}', (handle, client) => new {className}(handle as {handleType}, client));");
1685WriteLine($"registerHandleWrapper('{builder.TypeId}', (handle, client) => new {className}(handle as {handleType}, client));");
1688WriteLine();
1702WriteLine("// ============================================================================");
1703WriteLine($"// {className}");
1704WriteLine("// ============================================================================");
1705WriteLine();
1716WriteLine($"/**");
1717WriteLine($" * Type class for {className}.");
1718WriteLine($" */");
1719WriteLine($"export class {className} {{");
1720WriteLine($" constructor(private _handle: {handleType}, private _client: AspireClientRpc) {{}}");
1721WriteLine();
1722WriteLine($" /** Serialize for JSON-RPC transport */");
1723WriteLine($" toJSON(): MarshalledHandle {{ return this._handle.toJSON(); }}");
1724WriteLine();
1756WriteLine("}");
1757WriteLine();
1864WriteLine($" /** {description} */");
1867WriteLine($" {propertyName} = {{");
1872WriteLine($" get: async (): Promise<{returnType}> => {{");
1875WriteLine(" const result = await this._client.invokeCapability<string | null>(");
1876WriteLine($" '{getter.CapabilityId}',");
1877WriteLine(" { context: this._handle }");
1878WriteLine(" );");
1879WriteLine(" return CancellationToken.fromValue(result);");
1883WriteLine($" return await this._client.invokeCapability<{returnType}>(");
1884WriteLine($" '{getter.CapabilityId}',");
1885WriteLine($" {{ context: this._handle }}");
1886WriteLine(" );");
1888WriteLine(" },");
1898WriteLine($" set: async (value: {valueType}): Promise<void> => {{");
1899WriteLine($" await this._client.invokeCapability<void>(");
1900WriteLine($" '{setter.CapabilityId}',");
1901WriteLine($" {{ context: this._handle, {GetRpcArgumentEntry("value", valueParam.Type)} }}");
1902WriteLine(" );");
1903WriteLine(" }");
1907WriteLine(" };");
1908WriteLine();
1920WriteLine($" /** {getter.Description} */");
1923WriteLine($" {propertyName} = {{");
1924WriteLine($" get: async (): Promise<{wrapperClassName}> => {{");
1925WriteLine($" const handle = await this._client.invokeCapability<{handleType}>(");
1926WriteLine($" '{getter.CapabilityId}',");
1927WriteLine($" {{ context: this._handle }}");
1928WriteLine(" );");
1929WriteLine($" return new {wrapperClassName}(handle, this._client);");
1930WriteLine(" },");
1931WriteLine(" };");
1932WriteLine();
1976WriteLine($" /** {getter.Description} */");
1981WriteLine($" private _{propertyName}?: AspireDict<{keyType}, {valueType}>;");
1982WriteLine($" get {propertyName}(): AspireDict<{keyType}, {valueType}> {{");
1983WriteLine($" if (!this._{propertyName}) {{");
1984WriteLine($" this._{propertyName} = new AspireDict<{keyType}, {valueType}>(");
1985WriteLine($" this._handle,");
1986WriteLine($" this._client,");
1987WriteLine($" {typeId},");
1988WriteLine($" {getterCapabilityId}");
1989WriteLine(" );");
1990WriteLine(" }");
1991WriteLine($" return this._{propertyName};");
1992WriteLine(" }");
1993WriteLine();
2014WriteLine($" /** {getter.Description} */");
2019WriteLine($" private _{propertyName}?: AspireList<{elementType}>;");
2020WriteLine($" get {propertyName}(): AspireList<{elementType}> {{");
2021WriteLine($" if (!this._{propertyName}) {{");
2022WriteLine($" this._{propertyName} = new AspireList<{elementType}>(");
2023WriteLine($" this._handle,");
2024WriteLine($" this._client,");
2025WriteLine($" {typeId},");
2026WriteLine($" {getterCapabilityId}");
2027WriteLine(" );");
2028WriteLine(" }");
2029WriteLine($" return this._{propertyName};");
2030WriteLine(" }");
2031WriteLine();
2074WriteLine($" /** {method.Description} */");
2080WriteLine($"): Promise<{returnType}> {{");
2085WriteLine($" const {param.Name} = options?.{param.Name};");
2094WriteLine($" const rpcArgs: Record<string, unknown> = {{ {string.Join(", ", requiredArgs)} }};");
2097WriteLine($" if ({param.Name} !== undefined) rpcArgs.{param.Name} = {GetRpcArgumentValueExpression(param.Name, param.Type)};");
2102WriteLine($" await this._client.invokeCapability<void>(");
2106WriteLine(" const result = await this._client.invokeCapability<string | null>(");
2107WriteLine($" '{method.CapabilityId}',");
2108WriteLine(" rpcArgs");
2109WriteLine(" );");
2110WriteLine(" return CancellationToken.fromValue(result);");
2111WriteLine(" }");
2112WriteLine();
2117WriteLine($" return await this._client.invokeCapability<{returnType}>(");
2119WriteLine($" '{method.CapabilityId}',");
2120WriteLine($" rpcArgs");
2121WriteLine(" );");
2122WriteLine(" }");
2123WriteLine();
2163WriteLine($" /** {capability.Description} */");
2169WriteLine($"): Promise<{returnType}> {{");
2174WriteLine($" const {param.Name} = options?.{param.Name};");
2183WriteLine($" const rpcArgs: Record<string, unknown> = {{ {string.Join(", ", requiredArgs)} }};");
2186WriteLine($" if ({param.Name} !== undefined) rpcArgs.{param.Name} = {GetRpcArgumentValueExpression(param.Name, param.Type)};");
2191WriteLine($" await this._client.invokeCapability<void>(");
2195WriteLine($" return await this._client.invokeCapability<{returnType}>(");
2197WriteLine($" '{capability.CapabilityId}',");
2198WriteLine($" rpcArgs");
2199WriteLine(" );");
2200WriteLine(" }");
2201WriteLine();
2260WriteLine($" /** {capability.Description} */");
2271WriteLine($" /** @internal */");
2274WriteLine($"): Promise<{returnWrapperClass}> {{");
2286WriteLine($" const result = await this._client.invokeCapability<{returnHandleType}>(");
2287WriteLine($" '{capability.CapabilityId}',");
2288WriteLine($" rpcArgs");
2289WriteLine(" );");
2290WriteLine($" return new {returnWrapperClass}(result, this._client);");
2291WriteLine(" }");
2292WriteLine();
2297WriteLine($"): {returnPromiseWrapper} {{");
2302WriteLine($" const {param.Name} = options?.{param.Name};");
2307WriteLine("));");
2308WriteLine(" }");
2314WriteLine($" /** @internal */");
2317WriteLine($"): Promise<{className}> {{");
2329WriteLine($" await this._client.invokeCapability<void>(");
2330WriteLine($" '{capability.CapabilityId}',");
2331WriteLine($" rpcArgs");
2332WriteLine(" );");
2333WriteLine($" return this;");
2334WriteLine(" }");
2335WriteLine();
2340WriteLine($"): {promiseClass} {{");
2345WriteLine($" const {param.Name} = options?.{param.Name};");
2350WriteLine("));");
2351WriteLine(" }");
2358WriteLine($"): Promise<{returnType}> {{");
2363WriteLine($" const {param.Name} = options?.{param.Name};");
2378WriteLine(" const result = await this._client.invokeCapability<string | null>(");
2379WriteLine($" '{capability.CapabilityId}',");
2380WriteLine(" rpcArgs");
2381WriteLine(" );");
2382WriteLine(" return CancellationToken.fromValue(result);");
2386WriteLine($" return await this._client.invokeCapability<{returnType}>(");
2387WriteLine($" '{capability.CapabilityId}',");
2388WriteLine($" rpcArgs");
2389WriteLine(" );");
2391WriteLine(" }");
2393WriteLine();
2404WriteLine($"/**");
2405WriteLine($" * Thenable wrapper for {className} that enables fluent chaining.");
2406WriteLine($" */");
2407WriteLine($"export class {promiseClass} implements PromiseLike<{className}> {{");
2408WriteLine($" constructor(private _promise: Promise<{className}>) {{}}");
2409WriteLine();
2412WriteLine($" then<TResult1 = {className}, TResult2 = never>(");
2413WriteLine($" onfulfilled?: ((value: {className}) => TResult1 | PromiseLike<TResult1>) | null,");
2414WriteLine(" onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null");
2415WriteLine(" ): PromiseLike<TResult1 | TResult2> {");
2416WriteLine(" return this._promise.then(onfulfilled, onrejected);");
2417WriteLine(" }");
2418WriteLine();
2467WriteLine($" /** {capability.Description} */");
2475WriteLine($"): {returnPromiseWrapper} {{");
2478WriteLine(")));");
2479WriteLine(" }");
2486WriteLine($"): {promiseClass} {{");
2489WriteLine(")));");
2490WriteLine(" }");
2497WriteLine($"): Promise<{returnType}> {{");
2500WriteLine("));");
2501WriteLine(" }");
2503WriteLine();
2506WriteLine("}");
2507WriteLine();