我使用无服务器框架创建了这些无服务器微服务。一切工作正常,但有一些与无服务器无关的恼人情况。
当我的一些 lambda 需要调用另一个 lambda 时,我有一个辅助方法可以帮助我创建 lambda 调用,为了一切正常,我需要传递输入和输出类型、lambda 名称和服务名称。通过以下结构,我可以在任何我想要的地方调用这个 lambda,并进行我需要的类型检查。我将称以下为客户
export const createWallet = getLambda<CreateWalletEvent, Wallet>({
lambdaShortName: 'createWallet',
serviceName: 'bolico-wallets-svc'
});
export const populateWallets = getLambda<PopulateWalletsEvent, PopulateResultReponse>({
lambdaShortName: 'populateWallets',
serviceName: 'bolico-wallets-svc'
});
这种格式工作正常,但有一个例外。我需要为每个微服务重新创建所有类型。为每个服务创建这些 lambda 调用非常烦人,我需要导出类型,并getLambda<T,R>
手动为每个新 lambda 填充一个新的。所以我想创建一个脚本来生成我需要的文件。
我的所有 lambda 函数如下所示,我将调用此处理程序:
export const handler = async (event: CreateWalletInput): Promise<Wallet> => {
return walletService.createWallet(event);
}
所以,我需要做的是根据具有正确类型的处理程序生成一个客户端
是否可以读取该处理程序或任何打字稿文件并获取某种元数据?
例如,对于处理程序代码,我想要某种数组:
[
{
type: "function",
name: "handler",
input: ["CreateWalletInput"],
output: ["Promise<Wallet>"],
exported: true,
}
]
有谁知道有什么库或工具可以获取此类元数据?此时,我只能考虑读取文件并尝试找到一些正则表达式来获取我需要的内容。
也许
ts-morph
会有帮助?看起来它们部分支持了您所需要的功能,例如https://ts-morph.com/manipulation/structs。我不是专家 - 您需要阅读他们的自述文件和文档,看看它是否是满足您需求的正确工具;)您的情况似乎需要一个可以以编程方式从源代码中提取某些标记的工具。也许看看ts-ast-viewer.com
ts-morph
上的幕后繁重工作:希望有帮助。