lambda-live-debugger
Version:
Debug Lambda functions locally like it is running in the cloud
85 lines (84 loc) • 2.61 kB
JavaScript
import { cdkFramework } from './frameworks/cdkFramework.mjs';
import { slsFramework } from './frameworks/slsFramework.mjs';
import { samFramework } from './frameworks/samFramework.mjs';
import { terraformFramework } from './frameworks/terraformFramework.mjs';
import { openTofuFramework } from './frameworks/openTofuFramework.mjs';
import { Logger } from './logger.mjs';
import path from 'node:path';
/**
* List of supported frameworks
*/
const frameworksSupported = [
cdkFramework,
slsFramework,
samFramework,
terraformFramework,
openTofuFramework,
];
/**
* Get the names of the supported frameworks
*/
function getSupportedFrameworksNames() {
return frameworksSupported.map((f) => f.name);
}
/**
* Get the name of the current framework
*/
async function getCurrentFrameworkName(config) {
const framework = await getCurrentFramework(frameworksSupported, config);
return framework?.name;
}
async function getLambdas(config) {
let resources = undefined;
let frameworks = [...frameworksSupported];
if (config.framework) {
if (config.framework === 'none') {
frameworks = [];
}
else {
frameworks = frameworks.filter((f) => f.name === config.framework);
}
}
const framework = await getCurrentFramework(frameworks, config);
if (framework) {
Logger.verbose(`Getting resources with '${framework.name}' framework`);
resources = await framework.getLambdas(config);
if (config.function && !config.remove) {
// if we are removing the debugger, we don't want to filter by function name
const functionNameFilter = config.function.trim();
resources = resources.filter(
// filter by function name, can use * as wildcard
(l) => l.functionName === functionNameFilter ||
new RegExp('^' + functionNameFilter.split('*').join('.*') + '$').test(l.functionName));
}
}
else {
return undefined;
}
return resources.map((r) => ({
...r,
codePath: path.resolve(r.codePath),
esBuildOptions: {
...r.esBuildOptions,
metafile: true,
},
}));
}
/**
* Get the current framework
*/
async function getCurrentFramework(frameworks, config) {
let framework;
for (const f of frameworks) {
if (await f.canHandle(config)) {
framework = f;
break;
}
}
return framework;
}
export const ResourceDiscovery = {
getSupportedFrameworksNames,
getCurrentFrameworkName,
getLambdas,
};