@oddnetworks/oddworks
Advanced tools
Comparing version 4.7.2 to 4.8.0
@@ -7,3 +7,5 @@ 'use strict'; | ||
const dynamodbMarshaler = require('dynamodb-marshaler'); | ||
// Namespace for helpers (see below). | ||
const DynamoDB = {}; | ||
const hasOwn = Object.prototype.hasOwnProperty; | ||
@@ -45,3 +47,3 @@ // bus - Oddcast Bus Object | ||
return dynamodb | ||
.putItemAsync({TableName: object.type, Item: dynamodbMarshaler.marshalItem(object)}) | ||
.putItemAsync({TableName: object.type, Item: DynamoDB.serializeItem(object)}) | ||
.then(_.constant(object)); | ||
@@ -52,3 +54,3 @@ }; | ||
return new Promise((resolve, reject) => { | ||
dynamodb.putItem({TableName: object.type, Item: dynamodbMarshaler.marshalItem(object)}, err => { | ||
dynamodb.putItem({TableName: object.type, Item: DynamoDB.serializeItem(object)}, err => { | ||
if (err) { | ||
@@ -74,5 +76,5 @@ return reject(err); | ||
return dynamodb | ||
.getItemAsync({TableName: object.type, Key: dynamodbMarshaler.marshalItem(key)}) | ||
.getItemAsync({TableName: object.type, Key: DynamoDB.serializeKey(key)}) | ||
.then(res => { | ||
return (res && res.Item) ? dynamodbMarshaler.unmarshalItem(res.Item) : null; | ||
return (res && res.Item) ? DynamoDB.deserializeItem(res.Item) : null; | ||
}); | ||
@@ -84,7 +86,7 @@ }; | ||
const key = (object.channel) ? {id: object.id, channel: object.channel} : {id: object.id}; | ||
dynamodb.getItem({TableName: object.type, Key: dynamodbMarshaler.marshalItem(key)}, (err, res) => { | ||
dynamodb.getItem({TableName: object.type, Key: DynamoDB.serializeKey(key)}, (err, res) => { | ||
if (err) { | ||
return reject(err); | ||
} | ||
resolve(res && res.Item ? dynamodbMarshaler.unmarshalItem(res.Item) : null); | ||
resolve(res && res.Item ? DynamoDB.deserializeItem(res.Item) : null); | ||
}); | ||
@@ -106,3 +108,3 @@ }); | ||
return dynamodb | ||
.deleteItemAsync({TableName: object.type, Key: dynamodbMarshaler.marshalItem(key)}) | ||
.deleteItemAsync({TableName: object.type, Key: DynamoDB.serializeKey(key)}) | ||
.then(res => { | ||
@@ -116,3 +118,3 @@ return Boolean(res); | ||
const key = (object.channel) ? {id: object.id, channel: object.channel} : {id: object.id}; | ||
dynamodb.deleteItem({TableName: object.type, Key: dynamodbMarshaler.marshalItem(key)}, (err, res) => { | ||
dynamodb.deleteItem({TableName: object.type, Key: DynamoDB.serializeKey(key)}, (err, res) => { | ||
if (err) { | ||
@@ -166,3 +168,3 @@ return reject(err); | ||
} | ||
resolve(res.Items.map(dynamodbMarshaler.unmarshalItem)); | ||
resolve(res.Items.map(DynamoDB.deserializeItem)); | ||
}); | ||
@@ -184,3 +186,3 @@ }); | ||
} | ||
resolve(res.Items.map(dynamodbMarshaler.unmarshalItem)); | ||
resolve(res.Items.map(DynamoDB.deserializeItem)); | ||
}); | ||
@@ -250,3 +252,3 @@ }); | ||
const relationships = entity.relationships || Object.create(null); | ||
const relationships = entity.relationships || {}; | ||
@@ -469,1 +471,126 @@ const commands = _ | ||
}; | ||
function serializeItem(attrs) { | ||
return Object.keys(attrs).reduce((rec, key) => { | ||
const val = DynamoDB.typeCast(attrs[key]); | ||
if (val) { | ||
rec[key] = val; | ||
} | ||
return rec; | ||
}, {}); | ||
} | ||
DynamoDB.serializeItem = serializeItem; | ||
function deserializeItem(obj) { | ||
return Object.keys(obj).reduce((rv, key) => { | ||
rv[key] = DynamoDB.deserializeAttribute(obj[key]); | ||
return rv; | ||
}, {}); | ||
} | ||
DynamoDB.deserializeItem = deserializeItem; | ||
function deserializeAttribute(val) { | ||
if (hasOwn.call(val, 'S')) { | ||
return val.S.toString(); | ||
} else if (hasOwn.call(val, 'N')) { | ||
return parseFloat(val.N); | ||
} else if (val.SS || val.NS) { | ||
return val.SS || val.NS; | ||
} else if (hasOwn.call(val, 'BOOL')) { | ||
return Boolean(val.BOOL); | ||
} else if (hasOwn.call(val, 'M')) { | ||
return DynamoDB.deserializeItem(val.M); | ||
} else if (hasOwn.call(val, 'L')) { | ||
return val.L.map(DynamoDB.deserializeAttribute); | ||
} else if (hasOwn.call(val, 'NULL')) { | ||
return null; | ||
} | ||
} | ||
DynamoDB.deserializeAttribute = deserializeAttribute; | ||
function typeCast(obj) { | ||
switch (typeof obj) { | ||
case 'string': | ||
if (obj.length === 0) { | ||
return null; | ||
} | ||
return {S: obj}; | ||
case 'number': | ||
if (isNaN(obj)) { | ||
return null; | ||
} | ||
return {N: obj.toString()}; | ||
case 'boolean': | ||
return {BOOL: obj}; | ||
case 'function': | ||
case 'undefined': | ||
return null; | ||
default: | ||
if (!obj) { | ||
return {NULL: true}; | ||
} | ||
return Array.isArray(obj) ? DynamoDB.typeCastArray(obj) : DynamoDB.typeCastObject(obj); | ||
} | ||
} | ||
DynamoDB.typeCast = typeCast; | ||
function typeCastArray(obj) { | ||
return {L: obj.map(DynamoDB.typeCast).filter(item => { | ||
return Boolean(item); | ||
})}; | ||
} | ||
DynamoDB.typeCastArray = typeCastArray; | ||
function typeCastObject(obj) { | ||
const keys = Object.keys(obj); | ||
const rv = {M: {}}; | ||
if (keys.length === 0) { | ||
return rv; | ||
} | ||
rv.M = keys.reduce((M, key) => { | ||
const val = DynamoDB.typeCast(obj[key]); | ||
if (val) { | ||
M[key] = val; | ||
} | ||
return M; | ||
}, rv.M); | ||
return rv; | ||
} | ||
DynamoDB.typeCastObject = typeCastObject; | ||
function serializeKey(obj) { | ||
return Object.keys(obj).reduce((keys, key) => { | ||
keys[key] = DynamoDB.typeCastKey(obj[key]); | ||
return keys; | ||
}, {}); | ||
} | ||
DynamoDB.serializeKey = serializeKey; | ||
function typeCastKey(obj) { | ||
const type = typeof obj; | ||
switch (type) { | ||
case 'string': | ||
return {S: obj}; | ||
case 'number': | ||
return {N: obj.toString()}; | ||
case 'boolean': | ||
return {BOOL: obj}; | ||
default: | ||
throw new TypeError( | ||
`Only String, Number or Boolean attributes (not ${type}) may be defined on keys in DynamoDB Engine.` | ||
); | ||
} | ||
} | ||
DynamoDB.typeCastKey = typeCastKey; |
{ | ||
"name": "@oddnetworks/oddworks", | ||
"version": "4.7.2", | ||
"version": "4.8.0", | ||
"description": "An extensible media platform for OTT devices.", | ||
@@ -27,3 +27,2 @@ "main": "./lib/oddworks.js", | ||
"debug": "~2.2.0", | ||
"dynamodb-marshaler": "~2.0.0", | ||
"express": "~4.14.0", | ||
@@ -30,0 +29,0 @@ "header-parser": "~1.0.0", |
205959
15
4839
- Removeddynamodb-marshaler@~2.0.0
- Removeddispatch-recursive@2.0.0(transitive)
- Removeddynamodb-marshaler@2.0.0(transitive)