🎉 Initial commit
commit
a1ba928468
|
@ -0,0 +1,2 @@
|
|||
.idea
|
||||
node_modules
|
|
@ -0,0 +1,93 @@
|
|||
const canBeJsonString = str => str.startsWith('{') && str.endsWith('}') || str.startsWith('[') && str.endsWith(']');
|
||||
|
||||
module.exports = ({
|
||||
executeStatement,
|
||||
secretArn: defaultSecretArn,
|
||||
resourceArn: defaultResourceArn,
|
||||
database: defaultDatabase
|
||||
}) => ({
|
||||
secretArn = defaultSecretArn,
|
||||
resourceArn = defaultResourceArn,
|
||||
database = defaultDatabase,
|
||||
sql,
|
||||
data
|
||||
}) => {
|
||||
const request = executeStatement({
|
||||
secretArn,
|
||||
resourceArn,
|
||||
database,
|
||||
sql,
|
||||
parameters: Object.entries(data).map(([name, value]) => {
|
||||
const type = typeof value;
|
||||
switch(type){
|
||||
case 'string':
|
||||
case 'boolean': return {
|
||||
name,
|
||||
value: { [`${type}Value`]: value }
|
||||
};
|
||||
case 'number': return {
|
||||
name,
|
||||
value: Number.isInteger(value)
|
||||
? { longValue: value }
|
||||
: { doubleValue: value }
|
||||
};
|
||||
case 'object': return {
|
||||
name,
|
||||
value: value === null
|
||||
? { isNull: true }
|
||||
: { stringValue: JSON.stringify(value) }
|
||||
};
|
||||
}
|
||||
}),
|
||||
includeResultMetadata: true
|
||||
});
|
||||
return {
|
||||
abort: () => request.abort(),
|
||||
promise: async () => {
|
||||
const {
|
||||
columnMetadata = [],
|
||||
generatedFields = [],
|
||||
numberOfRecordsUpdated = 0,
|
||||
records = []
|
||||
} = await request.promise();
|
||||
return {
|
||||
columns: columnMetadata.map(item => ({
|
||||
name: item.name,
|
||||
label: item.label,
|
||||
type: item.typeName
|
||||
})),
|
||||
generatedFields,
|
||||
updatedRecordCount: numberOfRecordsUpdated,
|
||||
records: records.map(record => record.map((entry, index) => {
|
||||
const
|
||||
[[type, value]] = Object.entries(entry),
|
||||
{
|
||||
[index]: {
|
||||
typeName
|
||||
}
|
||||
} = columnMetadata;
|
||||
switch(type){
|
||||
case 'stringValue': {
|
||||
return canBeJsonString(value)
|
||||
? JSON.parse(value.toString())
|
||||
: typeName === 'DECIMAL'
|
||||
? parseFloat(value)
|
||||
: value;
|
||||
}
|
||||
case 'longValue':
|
||||
case 'doubleValue':
|
||||
case 'booleanValue':
|
||||
return value;
|
||||
case 'blobValue': {
|
||||
const stringValue = value.toString();
|
||||
return canBeJsonString(stringValue)
|
||||
? JSON.parse(stringValue)
|
||||
: stringValue;
|
||||
}
|
||||
case 'isNull': return null;
|
||||
}
|
||||
}))
|
||||
};
|
||||
}
|
||||
};
|
||||
};
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"name": "aws-rds-data-wrapper",
|
||||
"version": "1.0.0",
|
||||
"main": "mod.js",
|
||||
"repository": "https://git.kaki87.net/KaKi87/aws-rds-data-wrapper.git",
|
||||
"author": "KaKi87 <KaKi87@pm.me>",
|
||||
"license": "MIT"
|
||||
}
|
Reference in New Issue