1 | const jsYml = require('js-yaml');
|
2 | const fs = require('fs');
|
3 | const path = require('path');
|
4 | const merge = require('lodash.merge')
|
5 |
|
6 | class 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 |
|
55 | module.exports = AddCorsHeader
|