import type { Refkey } from "@alloy-js/core";
import { code, For, refkey, StatementList } from "@alloy-js/core";
import * as ts from "@alloy-js/typescript";
import type { ModelProperty } from "@typespec/compiler";
import { useTransformNamePolicy } from "@typespec/emitter-framework";
import { getDefaultValue } from "../../utils/parameters.jsx";
export interface ParametrizedEndpointProps {
refkey: Refkey;
template: string;
params: ModelProperty[];
}
export function ParametrizedEndpoint(props: ParametrizedEndpointProps) {
const propNamer = useTransformNamePolicy();
const paramsRef = refkey();
const params = (
"} refkey={paramsRef}>
{(p) => {
const applicationName = propNamer.getApplicationName(p);
const transportName = propNamer.getTransportName(p);
const defaultValue = p.defaultValue ? ` ?? ${getDefaultValue(p)}` : "";
const itemRef = p.optional
? `options?.${applicationName}${defaultValue}`
: applicationName;
return ;
}}
);
const resolvedEndpoint = (
{code`
"${props.template}".replace(/{([^}]+)}/g, (_, key) =>
key in ${paramsRef} ? String(params[key]) : (() => { throw new Error(\`Missing parameter: $\{key}\`); })()
);
`}
);
return (
{params}
{resolvedEndpoint}
);
}