UNPKG

2.4 kBJavaScriptView Raw
1var validations = require('./index'),
2 db = require('../db')
3
4exports.types = {
5 ReturnConsumedCapacity: {
6 type: 'String',
7 enum: ['INDEXES', 'TOTAL', 'NONE'],
8 },
9 RequestItems: {
10 type: 'Map<KeysAndAttributes>',
11 notNull: true,
12 lengthGreaterThanOrEqual: 1,
13 keys: {
14 lengthLessThanOrEqual: 255,
15 lengthGreaterThanOrEqual: 3,
16 regex: '[a-zA-Z0-9_.-]+',
17 },
18 children: {
19 type: 'ValueStruct<KeysAndAttributes>',
20 children: {
21 Keys: {
22 type: 'List',
23 notNull: true,
24 lengthGreaterThanOrEqual: 1,
25 lengthLessThanOrEqual: 100,
26 children: {
27 type: 'ParameterizedMap',
28 children: 'AttrStruct<ValueStruct>',
29 },
30 },
31 AttributesToGet: {
32 type: 'List',
33 lengthGreaterThanOrEqual: 1,
34 lengthLessThanOrEqual: 255,
35 children: 'String',
36 },
37 ConsistentRead: 'Boolean',
38 ProjectionExpression: {
39 type: 'String',
40 },
41 ExpressionAttributeNames: {
42 type: 'Map<java.lang.String>',
43 children: 'String',
44 },
45 },
46 },
47 },
48}
49
50exports.custom = function(data) {
51 var numReqs = 0
52
53 for (var table in data.RequestItems) {
54 var tableData = data.RequestItems[table]
55
56 var msg = validations.validateExpressionParams(tableData, ['ProjectionExpression'], ['AttributesToGet'])
57 if (msg) return msg
58
59 var seenKeys = Object.create(null)
60 for (var i = 0; i < tableData.Keys.length; i++) {
61 var key = tableData.Keys[i]
62
63 for (var attr in key) {
64 msg = validations.validateAttributeValue(key[attr])
65 if (msg) return msg
66 }
67
68 // TODO: this is unnecessarily expensive
69 var keyStr = Object.keys(key).sort().map(function(attr) { return db.toRangeStr(key[attr]) }).join('/')
70 if (seenKeys[keyStr])
71 return 'Provided list of item keys contains duplicates'
72 seenKeys[keyStr] = true
73
74 numReqs++
75 if (numReqs > 100)
76 return 'Too many items requested for the BatchGetItem call'
77 }
78
79 if (tableData.AttributesToGet) {
80 msg = validations.findDuplicate(tableData.AttributesToGet)
81 if (msg) return 'One or more parameter values were invalid: Duplicate value in attribute name: ' + msg
82 }
83
84 msg = validations.validateExpressions(tableData)
85 if (msg) return msg
86 }
87}