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 10, 2022
1 parent aa01146 commit 41aaba8
Showing 1 changed file with 21 additions and 9 deletions.
30 changes: 21 additions & 9 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,22 @@ 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'),
const allFiles = getAllFiles(`${TEMP_DIR_LOCATION}`);
const handlerPath = (slsFunction as FunctionDefinitionHandler).handler.split('.')[0];
const metafileName = allFiles.filter(
fileName => 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 41aaba8

Please sign in to comment.