Eu tenho esses microsserviços sem servidor criados usando uma estrutura sem servidor. Tudo funciona bem, mas existem algumas situações irritantes não relacionadas ao serverless.
Quando algum dos meus lambdas precisa chamar outro lambda tenho um método auxiliar que me ajuda a criar chamadas lambda, para tudo funcionar bem, preciso passar as tipagens de entrada e saída, o nome do lambda e o nome do serviço. Com a seguinte estrutura, posso chamar esse lambda em qualquer lugar que eu quiser, com a verificação de tipo necessária. Vou chamar o seguinte de cliente
export const createWallet = getLambda<CreateWalletEvent, Wallet>({
lambdaShortName: 'createWallet',
serviceName: 'bolico-wallets-svc'
});
export const populateWallets = getLambda<PopulateWalletsEvent, PopulateResultReponse>({
lambdaShortName: 'populateWallets',
serviceName: 'bolico-wallets-svc'
});
Este formato está funcionando bem com uma exceção. Preciso recriar todas as tipificações para cada microsserviço. Criar aquelas chamadas de lambdas para cada serviço é bem chato, preciso exportar as digitações, e preencher um novo getLambda<T,R>
para cada novo lambda manualmente. Então, quero criar um script para gerar os arquivos de que preciso.
Todas as minhas funções lambda se parecem com o seguinte, chamarei este manipulador :
export const handler = async (event: CreateWalletInput): Promise<Wallet> => {
return walletService.createWallet(event);
}
Então, o que eu preciso fazer é gerar um cliente baseado no manipulador com os tipos apropriados
É possível ler esse manipulador ou qualquer arquivo typescript e obter algum tipo de metadados?
Para o código do manipulador , por exemplo, gostaria de ter algum tipo de array:
[
{
type: "function",
name: "handler",
input: ["CreateWalletInput"],
output: ["Promise<Wallet>"],
exported: true,
}
]
Alguém conhece alguma biblioteca ou ferramenta para obter esse tipo de metadados? Neste ponto, posso pensar apenas em ler o arquivo e tentar encontrar alguns regexes para obter o que preciso.