Sri
10/20/2021, 7:12 AM[FAILED] from custom resource. Message returned: [src/**/*Controller.ts] globs found 0 controllers.
export class GenerateDocsStack extends sst.Stack {
constructor(scope: <http://sst.App|sst.App>, id: string, props: GenerateDocsStackProps) {
super(scope, id, props);
const { bikeApi } = props;
new sst.Script(this, 'Bike-Api-Docs', {
onCreate: {
handler: 'src/generateDocs.create',
permissions: ['apigateway'],
environment: {
apiId: bikeApi.httpApi.httpApiId,
region: scope.region,
},
timeout: 500,
},
});
}
}
for example this is my generateDocs.ts
import { InternalServerError } from '@local/errorTypes';
import { ApiGatewayV2 } from 'aws-sdk';
import { ExtendedSpecConfig, generateSpec } from 'tsoa';
export const downloadApiGatewaySpec = async (apiId: string, region: string): Promise<Record<string, unknown>> => {
const apiGatewayV2 = new ApiGatewayV2({ region })
.exportApi({
ApiId: apiId,
OutputType: 'JSON',
Specification: 'OAS30',
})
.promise();
try {
const apiSpec = await apiGatewayV2;
const apiString = apiSpec.body?.toString();
return Promise.resolve(apiString && JSON.parse(apiString));
} catch (e) {
console.log(e);
return Promise.reject(e);
}
};
const deepMergeApiSpec = (apiGatewaySpec: Record<string, unknown>) => {
const specOptions: ExtendedSpecConfig = {
entryFile: 'src/handlers.ts',
description: `Api docs`,
specVersion: 3,
outputDirectory: 'docs',
controllerPathGlobs: ['src/**/*Controller.ts'],
noImplicitAdditionalProperties: 'throw-on-extras',
spec: apiGatewaySpec,
specMerging: 'deepmerge',
};
// TODO: push to S3
return generateSpec(specOptions);
};
export const create = async () => {
const { apiId, region } = process.env;
if (!apiId || !region) {
throw new InternalServerError(`Unable to generate api docs. Check apiId ${apiId}`);
}
try {
console.log(`Generating docs for apiId: ${apiId}`);
const apiGatewaySpec = await downloadApiGatewaySpec(apiId, region);
await deepMergeApiSpec(apiGatewaySpec);
return { statusCode: 200, message: 'Success spec generated' };
} catch (e: any) {
console.log(e);
throw new InternalServerError(e.message);
}
};
thdxr
10/20/2021, 3:03 PM