public void write()

in codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/auth/http/integration/AwsSdkCustomizeEndpointRuleSetHttpAuthSchemeProvider.java [193:309]


                public void write(
                    TypeScriptWriter w,
                    String previousText,
                    DefaultHttpAuthSchemeParametersProviderFunctionCodeSection s
                ) {
                    String serviceName = CodegenUtils.getServiceName(
                        s.getSettings(),
                        s.getModel(),
                        s.getSymbolProvider());
                    ServiceIndex serviceIndex = ServiceIndex.of(s.getModel());
                    SupportedHttpAuthSchemesIndex authIndex = new SupportedHttpAuthSchemesIndex(
                        codegenContext.integrations(),
                        s.getModel(),
                        s.getSettings());
                    TopDownIndex topDownIndex = TopDownIndex.of(s.getModel());
                    Map<ShapeId, HttpAuthScheme> effectiveHttpAuthSchemes =
                        AuthUtils.getAllEffectiveNoAuthAwareAuthSchemes(
                            s.getService(),
                            serviceIndex,
                            authIndex,
                            topDownIndex);
                    Map<String, HttpAuthSchemeParameter> httpAuthSchemeParameters =
                        AuthUtils.collectHttpAuthSchemeParameters(effectiveHttpAuthSchemes.values());
                    Symbol serviceSymbol = s.getSymbolProvider().toSymbol(s.getService());
                    w.addRelativeImport(serviceSymbol.getName() + "ResolvedConfig", null,
                        Paths.get(".", serviceSymbol.getNamespace()));
                    w.addDependency(TypeScriptDependency.SMITHY_TYPES);
                    w.addImport("HandlerExecutionContext", null, TypeScriptDependency.SMITHY_TYPES);
                    w.addDependency(TypeScriptDependency.UTIL_MIDDLEWARE);
                    w.addImport("getSmithyContext", null, TypeScriptDependency.UTIL_MIDDLEWARE);
                    w.addDependency(TypeScriptDependency.MIDDLEWARE_ENDPOINTS_V2);
                    w.addImport("EndpointParameterInstructions", null, TypeScriptDependency.MIDDLEWARE_ENDPOINTS_V2);
                    w.addImport("resolveParams", null, TypeScriptDependency.MIDDLEWARE_ENDPOINTS_V2);
                    w.writeDocs("@internal");
                    w.write("""
                        interface EndpointRuleSetSmithyContext {
                          commandInstance?: {
                            constructor?: {
                              getEndpointParameterInstructions(): EndpointParameterInstructions;
                            };
                          };
                        }""");
                    w.writeDocs("@internal");
                    w.write("""
                        interface EndpointRuleSetHttpAuthSchemeParametersProvider<
                          TConfig extends object,
                          TContext extends HandlerExecutionContext,
                          TParameters extends HttpAuthSchemeParameters & EndpointParameters,
                          TInput extends object
                        > extends HttpAuthSchemeParametersProvider<TConfig, TContext, TParameters, TInput> {}""");
                    w.writeDocs("@internal");
                    w.write("""
                        const createEndpointRuleSetHttpAuthSchemeParametersProvider =
                          <
                            TConfig extends object,
                            TContext extends HandlerExecutionContext,
                            THttpAuthSchemeParameters extends HttpAuthSchemeParameters,
                            TEndpointParameters extends EndpointParameters,
                            TParameters extends THttpAuthSchemeParameters & TEndpointParameters,
                            TInput extends object
                          >(
                            defaultHttpAuthSchemeParametersProvider: HttpAuthSchemeParametersProvider<
                              TConfig,
                              TContext,
                              THttpAuthSchemeParameters,
                              TInput
                            >
                          ): EndpointRuleSetHttpAuthSchemeParametersProvider<
                            TConfig,
                            TContext,
                            THttpAuthSchemeParameters & TEndpointParameters,
                            TInput
                          > =>
                            async (config: TConfig, context: TContext, input: TInput): Promise<TParameters> => {
                              if (!input) {
                                throw new Error(`Could not find \\`input\\` for \
                        \\`defaultEndpointRuleSetHttpAuthSchemeParametersProvider\\``);
                              }
                              const defaultParameters = \
                        await defaultHttpAuthSchemeParametersProvider(config, context, input);
                              const instructionsFn = (getSmithyContext(context) as \
                        EndpointRuleSetSmithyContext)?.commandInstance?.constructor
                                ?.getEndpointParameterInstructions;
                              if (!instructionsFn) {
                                throw new Error(`getEndpointParameterInstructions() is not defined on \
                        \\`$${context.commandName!}\\``);
                              }
                              const endpointParameters = await resolveParams(
                                input as Record<string, unknown>,
                                { getEndpointParameterInstructions: instructionsFn! },
                                config as Record<string, unknown>
                              );
                              return Object.assign(defaultParameters, endpointParameters) as TParameters;
                            };""");
                    w.writeDocs("@internal");
                    w.openBlock("""
                        const _default$LHttpAuthSchemeParametersProvider = async (\
                        config: $LResolvedConfig, \
                        context: HandlerExecutionContext, \
                        input: object): Promise<_$LHttpAuthSchemeParameters> => {""", "};",
                        serviceName, serviceSymbol.getName(), serviceName,
                        () -> {
                        w.openBlock("return {", "};", () -> {
                            w.write("operation: getSmithyContext(context).operation as string,");
                            for (HttpAuthSchemeParameter parameter : httpAuthSchemeParameters.values()) {
                                w.write("$L: $C,", parameter.name(), parameter.source());
                            }
                        });
                    });
                    w.writeDocs("@internal");
                    w.write("""
                        export const default$LHttpAuthSchemeParametersProvider: \
                        $LHttpAuthSchemeParametersProvider = createEndpointRuleSetHttpAuthSchemeParametersProvider(\
                        _default$LHttpAuthSchemeParametersProvider);
                        """,
                        serviceName, serviceName, serviceName);
                }