UNPKG

1.94 kBJavaScriptView Raw
1const jsYml = require('js-yaml');
2const fs = require('fs');
3const path = require('path');
4const merge = require('lodash.merge')
5
6class AddCorsHeader {
7 invoke(options, content, serverless) {
8 try {
9 if (!options.cors) {
10 return content;
11 }
12 const cors = this.readTemplate(serverless)
13 Object.entries(content.paths).forEach(([path, pathContent]) => {
14 Object.entries(pathContent).forEach(([method, methodContent]) => {
15 Object.entries(methodContent.responses).forEach(([response, responseContent]) => {
16 if (!responseContent.hasOwnProperty('headers')) {
17 let headers = {headers: cors};
18 Object.assign(responseContent, merge(responseContent, headers));
19 } else {
20 Object.assign(responseContent.headers, merge(responseContent.headers, cors));
21 }
22 });
23 });
24 });
25
26 return content;
27 } catch (e) {
28 console.log(e);
29 }
30 return content
31 }
32
33 readTemplate(serverless) {
34 const templatePath = path.resolve(process.cwd(), 'openapi-integration/headers.yml')
35 try {
36 if (fs.existsSync(templatePath)) {
37 serverless.cli.log(
38 `Process custom CORS header template`,
39 'OpenApi Integration Plugin',
40 );
41 return jsYml.load(fs.readFileSync(templatePath))
42 }
43 } catch (err) {
44 console.error(err)
45 }
46
47 serverless.cli.log(
48 `Process default CORS header template`,
49 'OpenApi Integration Plugin'
50 );
51 return jsYml.load(fs.readFileSync(__dirname + '/../../templates/cors/headers.yml'));
52 }
53}
54
55module.exports = AddCorsHeader