🎉 Initial commit

master
KaKi87 2022-05-06 11:45:06 +02:00
commit a1ba928468
4 changed files with 107 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
.idea
node_modules

93
mod.js Normal file
View File

@ -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;
}
}))
};
}
};
};

8
package.json Normal file
View File

@ -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"
}

4
yarn.lock Normal file
View File

@ -0,0 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1