@mbc-cqrs-serverless/core
Version:
CQRS and event base core
144 lines • 6.21 kB
JavaScript
;
// enable this for local debugging
// import 'source-map-support/register'
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createHandler = createHandler;
const serverless_express_1 = __importDefault(require("@codegenie/serverless-express"));
const common_1 = require("@nestjs/common");
const config_1 = require("@nestjs/config");
const core_1 = require("@nestjs/core");
const rxjs_1 = require("rxjs");
const app_module_1 = require("./app.module");
const constants_1 = require("./constants");
const env_validation_1 = require("./env.validation");
const filters_1 = require("./filters");
const helpers_1 = require("./helpers");
const services_1 = require("./services");
const serverSubject = new rxjs_1.ReplaySubject();
async function bootstrap(opts) {
const logLevel = process.env.LOG_LEVEL ?? 'verbose';
const logger = new services_1.RequestLogger('main', {
logLevels: (0, services_1.getLogLevels)(logLevel),
timestamp: logLevel === 'verbose' || logLevel === 'debug',
});
const app = await core_1.NestFactory.create(app_module_1.AppModule.forRoot(opts), {
cors: true,
logger,
});
app.useGlobalPipes(new common_1.ValidationPipe({
transform: true,
whitelist: true,
}));
app.useGlobalInterceptors(new common_1.ClassSerializerInterceptor(app.get(core_1.Reflector)));
const { httpAdapter } = app.get(core_1.HttpAdapterHost);
app.useGlobalFilters(new filters_1.DynamoDBExceptionFilter(httpAdapter));
//swager init
const configService = app.get(config_1.ConfigService);
if (configService.get('NODE_ENV') === env_validation_1.Environment.Local) {
const { DocumentBuilder, SwaggerModule } = await Promise.resolve().then(() => __importStar(require('@nestjs/swagger')));
const swgConfig = new DocumentBuilder()
.setTitle('serverless')
.setDescription('The serverless API')
.addServer('http://localhost:3000/', env_validation_1.Environment.Local)
.addApiKey({ type: 'apiKey', name: 'Authorization', in: 'header' }, 'Api-Key')
.addSecurityRequirements('Api-Key')
.addGlobalParameters({
in: 'header',
required: false,
name: constants_1.HEADER_TENANT_CODE,
})
.build();
const document = SwaggerModule.createDocument(app, swgConfig, {
deepScanRoutes: true,
});
SwaggerModule.setup('/swagger-ui', app, document);
Promise.resolve().then(() => __importStar(require('fs'))).then((fs) => {
Promise.resolve().then(() => __importStar(require('prettier'))).then((prettier) => {
prettier
.format(JSON.stringify(document), {
parser: 'json',
})
.then((ret) => fs.writeFileSync('swagger.json', ret));
});
});
// const { SpelunkerModule } = await import('nestjs-spelunker')
// const tree = SpelunkerModule.explore(app)
// const root = SpelunkerModule.graph(tree)
// const edges = SpelunkerModule.findGraphEdges(root)
// // eslint-disable-next-line no-console
// console.log('graph LR')
// const mermaidEdges = edges.map(
// ({ from, to }) => ` ${from.module.name}-->${to.module.name}`,
// )
// // eslint-disable-next-line no-console
// console.log(mermaidEdges.join('\n'))
}
if (!helpers_1.IS_LAMBDA_RUNNING) {
await app.listen(configService.get('APP_PORT') || 3000);
return null;
}
await app.init();
const expressApp = app.getHttpAdapter().getInstance();
return (0, serverless_express_1.default)({
app: expressApp,
// resolutionMode: 'CALLBACK',
eventSourceRoutes: {
AWS_SNS: '/event/sns',
AWS_SQS: '/event/sqs',
AWS_DYNAMODB: '/event/dynamodb',
AWS_EVENTBRIDGE: '/event/event-bridge',
AWS_STEP_FUNCTIONS: '/event/step-functions',
AWS_S3: '/event/s3',
AWS_KINESIS_DATA_STREAM: '/event/kinesis-data-stream',
},
logSettings: {
level: logLevel,
},
});
}
function createHandler(opts) {
// Do not wait for lambdaHandler to be called before bootstraping Nest.
bootstrap(opts).then((server) => serverSubject.next(server));
return async (event, context, callback) => {
// Wait for bootstrap to finish, then start handling requests.
const server = await (0, rxjs_1.firstValueFrom)(serverSubject);
return server(event, context, callback);
};
}
//# sourceMappingURL=bootstrap.js.map