-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
89 lines (72 loc) · 2.6 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
const s3select = require("./s3select");
const _METHOD = process.env.METHOD || "GET";
const _BUCKET = process.env.BUCKET;
const _FILE = process.env.FILE;
const _QUERY = _METHOD==="GET" ? process.env.QUERY : null;
const _COMPRESSION_TYPE = process.env.COMPRESSION_TYPE || "NONE";
const _TYPE = process.env.TYPE || "CSV";
const _CSV_FILE_HEADER = process.env.CSV_FILE_HEADER || "USE";
const _CSV_FIELD_DELIMITER = process.env.CSV_FIELD_DELIMITER;
const _CSV_COMMENTS = process.env.CSV_COMMENTS;
const _CSV_QUOTE_CHARACTER = process.env.CSV_QUOTE_CHARACTER;
const _CSV_QUOTE_ESCAPE_CHARACTER = process.env.CSV_QUOTE_ESCAPE_CHARACTER;
const _JSON_TYPE = process.env.JSON_TYPE || "LINES";
//Changes interpolated vars in envvar QUERY with values from querystring or body
const interpolateQueryParams = (query, params) => {
const re = /{([^}]+)}/g;
let match;
if(!params){
return null;
}
while(match=re.exec(query)) {
if(!params[match[1]]){return null;}
query = query.replace(match[0], params[match[1]]);
}
return query.replace(/\"/g,"'");
};
exports.handler = async (event) => {
let response = {
statusCode: '200',
body: "[]",
headers: {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin' : '*',
'Access-Control-Allow-Credentials' : true
}
};
let request_params = event.queryStringParameters;
if(event.body && event.body !== "" && _METHOD==="POST") {
request_params = JSON.parse(event.body);
}
if(!_QUERY && !request_params.QUERY){
response.body = "{\"error\":\"wrong setup - QUERY not found\"}";
return response;
}
const _SQL = _QUERY && _METHOD==="GET" ? interpolateQueryParams(_QUERY, request_params) : request_params.QUERY;
if(_SQL===null){
response.body = "{\"error\":\"wrong params\"}";
return response;
}
const params = {
"Bucket" : _BUCKET,
"Key": _FILE,
"Expression": _SQL,
"InputSerialization" : {
"CompressionType": _COMPRESSION_TYPE,
..._TYPE && { [_TYPE] : {
..._TYPE==="JSON" && {"Type": _JSON_TYPE},
..._TYPE==="CSV" && {"FileHeaderInfo": _CSV_FILE_HEADER},
..._TYPE==="CSV" &&_CSV_FIELD_DELIMITER && {"FieldDelimiter":_CSV_FIELD_DELIMITER},
..._TYPE==="CSV" &&_CSV_COMMENTS && {"Comments":_CSV_COMMENTS},
..._TYPE==="CSV" &&_CSV_QUOTE_CHARACTER && {"QuoteCharacter":_CSV_QUOTE_CHARACTER},
..._TYPE==="CSV" &&_CSV_QUOTE_ESCAPE_CHARACTER && {"QuoteEscapeCharacter":_CSV_QUOTE_ESCAPE_CHARACTER}
}}
},
};
try{
response.body = await s3select.query(params);
}catch(e){
console.log(e);
}
return response;
};