Skip to content

Commit

Permalink
fix: get artifact and metafile paths from sls function object
Browse files Browse the repository at this point in the history
Gets the paths to the metadata file and the zipped artifact from the
FunctionDefinitionHandler object exposed by the Serverless API. This
makes the plugin work correctly when e.g. the handler path is something
like `src/myFunctionHandler.main`.

Previously this was failing for me where e.g. the function name in
Serverless was 'myFunction' but the file path was
`myFunctionHandler.ts`.
  • Loading branch information
smbkr committed Feb 9, 2022
1 parent aa01146 commit cf6c002
Showing 1 changed file with 23 additions and 10 deletions.
33 changes: 23 additions & 10 deletions plugin/bundleVisualizer.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { exec } from 'child_process';
import { readdirSync, statSync } from 'fs';
import { join } from 'path';
import { join, parse } from 'path';
import { FunctionDefinitionHandler } from 'serverless';

import type { ServerlessAnalyzeBundlePlugin } from './serverlessAnalyzeBundle';

Expand Down Expand Up @@ -43,12 +44,10 @@ async function bundleVisualizer(this: ServerlessAnalyzeBundlePlugin): Promise<vo
if (functionName === undefined) {
return;
}
const slsFunction = this.serverless.service.getFunction(functionName);

const functionZipName = this.serverless.service
.getAllFunctionsNames()
.find(fullFunctionName => fullFunctionName.endsWith(functionName));

if (functionZipName === undefined) {
const fullZipPath = slsFunction.package?.artifact;
if (fullZipPath === undefined) {
this.serverless.cli.log(
`🤯 Analyze failed: function ${functionName} was not found`,
'ServerlessAnalyzeBundlePlugin',
Expand All @@ -57,6 +56,7 @@ async function bundleVisualizer(this: ServerlessAnalyzeBundlePlugin): Promise<vo

return;
}
const functionZipName = parse(fullZipPath).base;

this.serverless.cli.log(`⏳ Analyzing function ${functionName}`, 'ServerlessAnalyzeBundlePlugin');

Expand All @@ -65,10 +65,23 @@ async function bundleVisualizer(this: ServerlessAnalyzeBundlePlugin): Promise<vo

await pExec(`unzip .serverless/${functionZipName} -d ${TEMP_DIR_LOCATION}`);

const test = getAllFiles(`${TEMP_DIR_LOCATION}`);
const metafileName = test.filter(
fileName => fileName.includes(`/${functionName}/`) && fileName.endsWith('-meta.json'),
)[0];
const allFiles = getAllFiles(`${TEMP_DIR_LOCATION}`);
const metafileName = allFiles.filter(fileName => {
const handlerPath = (slsFunction as FunctionDefinitionHandler).handler.split('.')[0];

return fileName.includes(handlerPath) && fileName.endsWith('-meta.json');
})[0];

if (!metafileName) {
this.serverless.cli.log(
`🤯 Analyze failed: function ${functionName} metadata was not found`,
'ServerlessAnalyzeBundlePlugin',
{ color: 'red' },
);

return;
}

await pExec(
[
'node_modules/.bin/esbuild-visualizer',
Expand Down

0 comments on commit cf6c002

Please sign in to comment.