Skip to content

Commit 0fb9e5f

Browse files
committed
fix undefined error
1 parent 09ddf4f commit 0fb9e5f

File tree

2 files changed

+25
-5
lines changed

2 files changed

+25
-5
lines changed

src/__tests__/entity.update.unit.test.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,26 @@ describe('update',()=>{
312312
expect(Key).toEqual({ pk: 'test-pk', sk: 'test-sk' })
313313
expect(TableName).toBe('test-table')
314314
})
315+
316+
it('ignores fields with no value', () => {
317+
let { ExpressionAttributeValues } = TestEntity.updateParams({
318+
pk: 'test-pk',
319+
sk: 'test-pk',
320+
test_string: undefined,
321+
test_number: undefined,
322+
test_number_set: undefined,
323+
test_string_set: undefined,
324+
test_list: undefined,
325+
test_map: undefined,
326+
})
327+
328+
expect(ExpressionAttributeValues).not.toHaveProperty(':test_string')
329+
expect(ExpressionAttributeValues).not.toHaveProperty(':test_number')
330+
expect(ExpressionAttributeValues).not.toHaveProperty(':test_number_set')
331+
expect(ExpressionAttributeValues).not.toHaveProperty(':test_string_set')
332+
expect(ExpressionAttributeValues).not.toHaveProperty(':test_list')
333+
expect(ExpressionAttributeValues).not.toHaveProperty(':test_map')
334+
})
315335

316336

317337
it('performs a delete operation', () => {

src/classes/Entity.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -801,27 +801,27 @@ class Entity<
801801
&& (!mapping.link || (mapping.link && mapping.save === true))
802802
) {
803803
// If a number or a set and adding
804-
if (['number','set'].includes(mapping.type) && data[field].$add) {
804+
if (['number','set'].includes(mapping.type) && data[field]?.$add) {
805805
ADD.push(`#${field} :${field}`)
806806
values[`:${field}`] = validateType(mapping,field,data[field].$add)
807807
// Add field to names
808808
names[`#${field}`] = field
809809
// if a set and deleting items
810-
} else if (mapping.type === 'set' && data[field].$delete) {
810+
} else if (mapping.type === 'set' && data[field]?.$delete) {
811811
DELETE.push(`#${field} :${field}`)
812812
values[`:${field}`] = validateType(mapping,field,data[field].$delete)
813813
// Add field to names
814814
names[`#${field}`] = field
815815
// if a list and removing items by index
816-
} else if (mapping.type === 'list' && Array.isArray(data[field].$remove)) {
816+
} else if (mapping.type === 'list' && Array.isArray(data[field]?.$remove)) {
817817
data[field].$remove.forEach((i:number) => {
818818
if (typeof i !== 'number') error(`Remove array for '${field}' must only contain numeric indexes`)
819819
REMOVE.push(`#${field}[${i}]`)
820820
})
821821
// Add field to names
822822
names[`#${field}`] = field
823823
// if list and appending or prepending
824-
} else if (mapping.type === 'list' && (data[field].$append || data[field].$prepend)) {
824+
} else if (mapping.type === 'list' && (data[field]?.$append || data[field]?.$prepend)) {
825825
if (data[field].$append) {
826826
SET.push(`#${field} = list_append(#${field},:${field})`)
827827
values[`:${field}`] = validateType(mapping,field,data[field].$append)
@@ -841,7 +841,7 @@ class Entity<
841841
// Add field to names
842842
names[`#${field}`] = field
843843
// if a map and updating by nested attribute/index
844-
} else if (mapping.type === 'map' && data[field].$set) {
844+
} else if (mapping.type === 'map' && data[field]?.$set) {
845845
Object.keys(data[field].$set).forEach(f => {
846846

847847
// TODO: handle null values to remove

0 commit comments

Comments
 (0)