Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
1033f8f
initial updateItem commit
rkathir-solink Jun 15, 2021
a48e898
add update operation
rkathir-solink Jun 15, 2021
16a81df
Merge pull request #1 from SolinkCorp/updateItem
rkathir-solink Jun 15, 2021
0d299a4
label update
rkathir-solink Jun 18, 2021
251ffa4
change input name
rkathir-solink Jun 21, 2021
b262094
Merge branch 'master' of https://github.com/SolinkCorp/dynamodb-actions
rkathir-solink Jun 21, 2021
eac44db
update.ts bug fix
rkathir-solink Jun 21, 2021
b05bf3c
remove unnecessary core.getInput command
rkathir-solink Jun 21, 2021
1185185
Update update.ts
rkathir-solink Jun 21, 2021
fe700d3
include update.ts
rkathir-solink Jun 21, 2021
56b279d
Merge branch 'master' of https://github.com/SolinkCorp/dynamodb-actions
rkathir-solink Jun 21, 2021
8b758b2
invoke await for update
rkathir-solink Jun 21, 2021
fc009df
Update update.ts
rkathir-solink Jun 21, 2021
3f96a21
revert
rkathir-solink Jun 21, 2021
a03b605
Merge branch 'master' of https://github.com/SolinkCorp/dynamodb-actions
rkathir-solink Jun 21, 2021
ba3cb23
tsc.cmd changes
rkathir-solink Jun 22, 2021
5333cea
update.ts bug fixes
rkathir-solink Jun 22, 2021
101dd90
view input operations
rkathir-solink Jun 22, 2021
762055d
replace deprecated dependency @hapi/joi with joi
rkathir-solink Jun 22, 2021
c1edbff
initial commit
rkathir-solink Jun 22, 2021
fe6f0cc
revert console log
rkathir-solink Jun 22, 2021
f2dd467
include update data parameters
rkathir-solink Jun 22, 2021
d2bcbef
update details for update operation
rkathir-solink Jun 22, 2021
e280d6b
reorder inputs
rkathir-solink Jun 22, 2021
55d89d8
change format of expressions accepted
rkathir-solink Jun 22, 2021
1796093
take expression attribute as env variable
rkathir-solink Jun 23, 2021
4d57f6b
revert env variable usage
rkathir-solink Jun 23, 2021
bdcb7e1
remove forgivingJSONparse on new parameters + tsc
rkathir-solink Jun 23, 2021
388ebf4
implement ability to read file as input
rkathir-solink Jun 24, 2021
24e7ea6
take file as input for expression values
rkathir-solink Jun 24, 2021
3538ab5
include files in accepted inputs
rkathir-solink Jun 24, 2021
9468519
include files option in action.yml
rkathir-solink Jun 24, 2021
d19a83b
fix item expression
rkathir-solink Jun 24, 2021
48349b0
bug fixes and refactoring
rkathir-solink Jun 24, 2021
92cc551
remove build package
rkathir-solink Jun 24, 2021
4292f42
generalize
rkathir-solink Jun 24, 2021
1d5ce47
build functions for generalization
rkathir-solink Jun 24, 2021
91fc61a
call build functions and console log
rkathir-solink Jun 24, 2021
cd62dec
dynamically build inputs for update
rkathir-solink Jun 25, 2021
4f9f8b3
replace input variables for update and console log
rkathir-solink Jun 25, 2021
26727d8
handle first expression case
rkathir-solink Jun 25, 2021
e639623
handle single expression/attribute case
rkathir-solink Jun 25, 2021
4ebd97b
remove tsc from package.json
rkathir-solink Jun 25, 2021
c31f0a3
string manipulation fix
rkathir-solink Jun 28, 2021
9ff860e
replace concat funtion with += string concat
rkathir-solink Jun 28, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,17 @@ inputs:
description: 'Item Value, Only required for batch-put operation'
required: false

#Update Operation
updateExpression:
description: 'Attribute variables, Only required for update operation'
required: false
expressionAttributeValues:
description: 'Attribute values to be updated, Only required for update operation'
required: false
expressionAttributeFiles:
description: 'Attribute files to be updated, Only required for update operation'
required: false

outputs:
item:
description: 'JSON-serialized Item'
Expand Down
6 changes: 5 additions & 1 deletion dist/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ const processor = new processor_1.Processor();
operation: (_a = core.getInput("operation")) === null || _a === void 0 ? void 0 : _a.toLowerCase(),
region: core.getInput("region"),
table: core.getInput("table"),
// Get / Delete Operation
// Get / Delete / Update Operation
key: helpers_1.forgivingJSONParse(core.getInput("key")),
consistent: helpers_1.forgivingJSONParse(core.getInput("consistent")),
// Put Operation
Expand All @@ -20,6 +20,10 @@ const processor = new processor_1.Processor();
// BatchPut Operation
items: helpers_1.forgivingJSONParse(core.getInput("items")),
files: core.getInput("files"),
// Update Operation
updateExpression: core.getInput("updateExpression"),
expressionAttributeValues: core.getInput("expressionAttributeValues"),
expressionAttributeFiles: core.getInput("expressionAttributeFiles")
};
const output = await processor.process(input);
if (output) {
Expand Down
2 changes: 1 addition & 1 deletion dist/operations/batch-put.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
Object.defineProperty(exports, "__esModule", { value: true });
exports.BatchPutOperation = void 0;
const glob = require("@actions/glob");
const Joi = require("@hapi/joi");
const Joi = require("joi");
const fs_1 = require("fs");
const helpers_1 = require("../helpers");
const BaseInputSchema = Joi.object({
Expand Down
2 changes: 1 addition & 1 deletion dist/operations/delete.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.DeleteOperation = void 0;
const Joi = require("@hapi/joi");
const Joi = require("joi");
const helpers_1 = require("../helpers");
const InputSchema = Joi.object({
operation: Joi.string().lowercase().valid("delete").required(),
Expand Down
2 changes: 1 addition & 1 deletion dist/operations/get.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.GetOperation = void 0;
const Joi = require("@hapi/joi");
const Joi = require("joi");
const helpers_1 = require("../helpers");
const InputSchema = Joi.object({
operation: Joi.string().lowercase().valid("get").required(),
Expand Down
3 changes: 2 additions & 1 deletion dist/operations/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,12 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
__exportStar(require("./base"), exports);
__exportStar(require("./batch-put"), exports);
__exportStar(require("./delete"), exports);
__exportStar(require("./get"), exports);
__exportStar(require("./put"), exports);
__exportStar(require("./update"), exports);
2 changes: 1 addition & 1 deletion dist/operations/put.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.PutOperation = void 0;
const Joi = require("@hapi/joi");
const Joi = require("joi");
const fs_1 = require("fs");
const helpers_1 = require("../helpers");
const BaseInputSchema = Joi.object({
Expand Down
96 changes: 96 additions & 0 deletions dist/operations/update.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.UpdateOperation = void 0;
const Joi = require("joi");
const fs_1 = require("fs");
const helpers_1 = require("../helpers");
const BaseInputSchema = Joi.object({
operation: Joi.string().lowercase().valid("update").required(),
region: Joi.string().lowercase().required(),
table: Joi.string().required(),
updateExpression: Joi.string().required()
});
const InputSchema = Joi.alternatives([
BaseInputSchema.append({
expressionAttributeValues: Joi.string().required(),
key: Joi.object().required(),
}),
BaseInputSchema.append({
expressionAttributeFiles: Joi.string().required(),
key: Joi.object().required(),
}),
]).required();
class UpdateOperation {
constructor() {
this.name = "update";
}
async validate(input) {
const validationResult = InputSchema.validate(input, {
stripUnknown: true,
});
if (validationResult.error) {
throw validationResult.error;
}
return validationResult.value;
}
async execute(input) {
const ddb = helpers_1.createClient(input.region);
let updateExp = ``;
let attValues = {};
const expressions = await this.buildExpression(updateExp, input);
const attributes = await this.buildAttributes(expressions, attValues, input);
console.log(expressions);
console.log(attributes);
await ddb.update({
TableName: input.table,
Key: input.key,
UpdateExpression: expressions,
ExpressionAttributeValues: attributes
}).promise();
}
async read(path) {
const content = await fs_1.promises.readFile(path, { encoding: "utf8" });
return JSON.parse(content);
}
async buildExpression(updateExp, input) {
const updateExpressions = input.updateExpression.split(',');
for (let i = 0; i < updateExpressions.length; i++) {
if (i === 0 && updateExpressions.length > 1) {
updateExp = `set ${updateExpressions[i]} = :${updateExpressions[i]},`;
}
else if (i === 0 && updateExpressions.length === 1) {
updateExp = `set ${updateExpressions[i]} = :${updateExpressions[i]}`;
}
else if (i === updateExpressions.length - 1) {
updateExp += ` ${updateExpressions[i]} = :${updateExpressions[i]}`;
}
else {
updateExp += ` ${updateExpressions[i]} = :${updateExpressions[i]},`;
}
}
return updateExp;
}
async buildAttributes(updateExp, attValues, input) {
const updateExpressions = updateExp.split(',');
if (input.expressionAttributeValues) {
const expAttValues = input.expressionAttributeValues.split(', ');
const keyValues = [];
for (let i = 0; i < updateExpressions.length; i++) {
updateExpressions[i] = updateExpressions[i].substring(updateExpressions[i].indexOf(":"));
keyValues[i] = [updateExpressions[i], expAttValues[i]];
}
attValues = Object.fromEntries(keyValues);
}
else if (input.expressionAttributeFiles) {
const expAttValues = input.expressionAttributeFiles.split(',');
const keyValues = [];
for (let i = 0; i < updateExpressions.length; i++) {
updateExpressions[i] = updateExpressions[i].substring(updateExpressions[i].indexOf(":"));
keyValues[i] = [updateExpressions[i], await this.read(expAttValues[i])];
}
attValues = Object.fromEntries(keyValues);
}
return attValues;
}
}
exports.UpdateOperation = UpdateOperation;
1 change: 1 addition & 0 deletions dist/processor.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ class Processor {
new operations_1.DeleteOperation(),
new operations_1.GetOperation(),
new operations_1.PutOperation(),
new operations_1.UpdateOperation()
];
}
async process(input) {
Expand Down
118 changes: 75 additions & 43 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading