@aws-sdk/util-dynamodb 3.32.0 → 3.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +38 -0
- package/dist-cjs/convertToAttr.js +168 -0
- package/dist-cjs/convertToNative.js +63 -0
- package/dist-cjs/index.js +8 -0
- package/dist-cjs/marshall.js +6 -0
- package/dist-cjs/models.js +2 -0
- package/dist-cjs/unmarshall.js +6 -0
- package/dist-es/convertToAttr.js +176 -0
- package/dist-es/convertToNative.js +76 -0
- package/{dist/types/index.d.ts → dist-es/index.js} +0 -0
- package/dist-es/marshall.js +2 -0
- package/dist-es/models.js +1 -0
- package/dist-es/unmarshall.js +4 -0
- package/{dist/types → dist-types}/convertToAttr.d.ts +0 -0
- package/{dist/types → dist-types}/convertToNative.d.ts +0 -0
- package/{src/index.ts → dist-types/index.d.ts} +0 -0
- package/{dist/types → dist-types}/marshall.d.ts +0 -0
- package/{dist/types → dist-types}/models.d.ts +0 -0
- package/{dist/types → dist-types}/ts3.4/convertToAttr.d.ts +0 -0
- package/{dist/types → dist-types}/ts3.4/convertToNative.d.ts +0 -0
- package/{dist/types → dist-types}/ts3.4/index.d.ts +0 -0
- package/{dist/types → dist-types}/ts3.4/marshall.d.ts +0 -0
- package/{dist/types → dist-types}/ts3.4/models.d.ts +0 -0
- package/{dist/types → dist-types}/ts3.4/unmarshall.d.ts +0 -0
- package/{dist/types → dist-types}/unmarshall.d.ts +0 -0
- package/package.json +13 -9
- package/dist/cjs/convertToAttr.js +0 -181
- package/dist/cjs/convertToNative.js +0 -71
- package/dist/cjs/index.js +0 -9
- package/dist/cjs/marshall.js +0 -13
- package/dist/cjs/models.js +0 -3
- package/dist/cjs/unmarshall.js +0 -13
- package/dist/es/convertToAttr.js +0 -189
- package/dist/es/convertToNative.js +0 -84
- package/dist/es/index.js +0 -6
- package/dist/es/marshall.js +0 -9
- package/dist/es/models.js +0 -2
- package/dist/es/unmarshall.js +0 -11
- package/src/convertToAttr.ts +0 -190
- package/src/convertToNative.ts +0 -82
- package/src/marshall.ts +0 -33
- package/src/models.ts +0 -46
- package/src/unmarshall.ts +0 -27
- package/tsconfig.cjs.json +0 -10
- package/tsconfig.es.json +0 -11
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { __assign, __read, __values } from "tslib";
|
|
2
|
-
/**
|
|
3
|
-
* Convert a DynamoDB AttributeValue object to its equivalent JavaScript type.
|
|
4
|
-
*
|
|
5
|
-
* @param {AttributeValue} data - The DynamoDB record to convert to JavaScript type.
|
|
6
|
-
* @param {unmarshallOptions} options - An optional configuration object for `convertToNative`.
|
|
7
|
-
*/
|
|
8
|
-
export var convertToNative = function (data, options) {
|
|
9
|
-
var e_1, _a;
|
|
10
|
-
try {
|
|
11
|
-
for (var _b = __values(Object.entries(data)), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
12
|
-
var _d = __read(_c.value, 2), key = _d[0], value = _d[1];
|
|
13
|
-
if (value !== undefined) {
|
|
14
|
-
switch (key) {
|
|
15
|
-
case "NULL":
|
|
16
|
-
return null;
|
|
17
|
-
case "BOOL":
|
|
18
|
-
return Boolean(value);
|
|
19
|
-
case "N":
|
|
20
|
-
return convertNumber(value, options);
|
|
21
|
-
case "B":
|
|
22
|
-
return convertBinary(value);
|
|
23
|
-
case "S":
|
|
24
|
-
return convertString(value);
|
|
25
|
-
case "L":
|
|
26
|
-
return convertList(value, options);
|
|
27
|
-
case "M":
|
|
28
|
-
return convertMap(value, options);
|
|
29
|
-
case "NS":
|
|
30
|
-
return new Set(value.map(function (item) { return convertNumber(item, options); }));
|
|
31
|
-
case "BS":
|
|
32
|
-
return new Set(value.map(convertBinary));
|
|
33
|
-
case "SS":
|
|
34
|
-
return new Set(value.map(convertString));
|
|
35
|
-
default:
|
|
36
|
-
throw new Error("Unsupported type passed: " + key);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
42
|
-
finally {
|
|
43
|
-
try {
|
|
44
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
45
|
-
}
|
|
46
|
-
finally { if (e_1) throw e_1.error; }
|
|
47
|
-
}
|
|
48
|
-
throw new Error("No value defined: " + JSON.stringify(data));
|
|
49
|
-
};
|
|
50
|
-
var convertNumber = function (numString, options) {
|
|
51
|
-
if (options === null || options === void 0 ? void 0 : options.wrapNumbers) {
|
|
52
|
-
return { value: numString };
|
|
53
|
-
}
|
|
54
|
-
var num = Number(numString);
|
|
55
|
-
var infinityValues = [Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY];
|
|
56
|
-
if ((num > Number.MAX_SAFE_INTEGER || num < Number.MIN_SAFE_INTEGER) && !infinityValues.includes(num)) {
|
|
57
|
-
if (typeof BigInt === "function") {
|
|
58
|
-
try {
|
|
59
|
-
return BigInt(numString);
|
|
60
|
-
}
|
|
61
|
-
catch (error) {
|
|
62
|
-
throw new Error(numString + " can't be converted to BigInt. Set options.wrapNumbers to get string value.");
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
throw new Error(numString + " is outside SAFE_INTEGER bounds. Set options.wrapNumbers to get string value.");
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
return num;
|
|
70
|
-
};
|
|
71
|
-
// For future-proofing: Functions from scalar value as well as set value
|
|
72
|
-
var convertString = function (stringValue) { return stringValue; };
|
|
73
|
-
var convertBinary = function (binaryValue) { return binaryValue; };
|
|
74
|
-
var convertList = function (list, options) {
|
|
75
|
-
return list.map(function (item) { return convertToNative(item, options); });
|
|
76
|
-
};
|
|
77
|
-
var convertMap = function (map, options) {
|
|
78
|
-
return Object.entries(map).reduce(function (acc, _a) {
|
|
79
|
-
var _b;
|
|
80
|
-
var _c = __read(_a, 2), key = _c[0], value = _c[1];
|
|
81
|
-
return (__assign(__assign({}, acc), (_b = {}, _b[key] = convertToNative(value, options), _b)));
|
|
82
|
-
}, {});
|
|
83
|
-
};
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydFRvTmF0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnZlcnRUb05hdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBS0E7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsSUFBTSxlQUFlLEdBQUcsVUFBQyxJQUFvQixFQUFFLE9BQTJCOzs7UUFDL0UsS0FBMkIsSUFBQSxLQUFBLFNBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQSxnQkFBQSw0QkFBRTtZQUF0QyxJQUFBLEtBQUEsbUJBQVksRUFBWCxHQUFHLFFBQUEsRUFBRSxLQUFLLFFBQUE7WUFDcEIsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO2dCQUN2QixRQUFRLEdBQUcsRUFBRTtvQkFDWCxLQUFLLE1BQU07d0JBQ1QsT0FBTyxJQUFJLENBQUM7b0JBQ2QsS0FBSyxNQUFNO3dCQUNULE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN4QixLQUFLLEdBQUc7d0JBQ04sT0FBTyxhQUFhLENBQUMsS0FBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUNqRCxLQUFLLEdBQUc7d0JBQ04sT0FBTyxhQUFhLENBQUMsS0FBbUIsQ0FBQyxDQUFDO29CQUM1QyxLQUFLLEdBQUc7d0JBQ04sT0FBTyxhQUFhLENBQUMsS0FBZSxDQUFDLENBQUM7b0JBQ3hDLEtBQUssR0FBRzt3QkFDTixPQUFPLFdBQVcsQ0FBQyxLQUF5QixFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUN6RCxLQUFLLEdBQUc7d0JBQ04sT0FBTyxVQUFVLENBQUMsS0FBMEMsRUFBRSxPQUFPLENBQUMsQ0FBQztvQkFDekUsS0FBSyxJQUFJO3dCQUNQLE9BQU8sSUFBSSxHQUFHLENBQUUsS0FBa0IsQ0FBQyxHQUFHLENBQUMsVUFBQyxJQUFJLElBQUssT0FBQSxhQUFhLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUE1QixDQUE0QixDQUFDLENBQUMsQ0FBQztvQkFDbEYsS0FBSyxJQUFJO3dCQUNQLE9BQU8sSUFBSSxHQUFHLENBQUUsS0FBc0IsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztvQkFDN0QsS0FBSyxJQUFJO3dCQUNQLE9BQU8sSUFBSSxHQUFHLENBQUUsS0FBa0IsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztvQkFDekQ7d0JBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBNEIsR0FBSyxDQUFDLENBQUM7aUJBQ3REO2FBQ0Y7U0FDRjs7Ozs7Ozs7O0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBcUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUcsQ0FBQyxDQUFDO0FBQy9ELENBQUMsQ0FBQztBQUVGLElBQU0sYUFBYSxHQUFHLFVBQUMsU0FBaUIsRUFBRSxPQUEyQjtJQUNuRSxJQUFJLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxXQUFXLEVBQUU7UUFDeEIsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQztLQUM3QjtJQUVELElBQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5QixJQUFNLGNBQWMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUM1RSxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3JHLElBQUksT0FBTyxNQUFNLEtBQUssVUFBVSxFQUFFO1lBQ2hDLElBQUk7Z0JBQ0YsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDMUI7WUFBQyxPQUFPLEtBQUssRUFBRTtnQkFDZCxNQUFNLElBQUksS0FBSyxDQUFJLFNBQVMsZ0ZBQTZFLENBQUMsQ0FBQzthQUM1RztTQUNGO2FBQU07WUFDTCxNQUFNLElBQUksS0FBSyxDQUFJLFNBQVMsa0ZBQStFLENBQUMsQ0FBQztTQUM5RztLQUNGO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDLENBQUM7QUFFRix3RUFBd0U7QUFDeEUsSUFBTSxhQUFhLEdBQUcsVUFBQyxXQUFtQixJQUFhLE9BQUEsV0FBVyxFQUFYLENBQVcsQ0FBQztBQUNuRSxJQUFNLGFBQWEsR0FBRyxVQUFDLFdBQXVCLElBQWlCLE9BQUEsV0FBVyxFQUFYLENBQVcsQ0FBQztBQUUzRSxJQUFNLFdBQVcsR0FBRyxVQUFDLElBQXNCLEVBQUUsT0FBMkI7SUFDdEUsT0FBQSxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQUMsSUFBSSxJQUFLLE9BQUEsZUFBZSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsRUFBOUIsQ0FBOEIsQ0FBQztBQUFsRCxDQUFrRCxDQUFDO0FBRXJELElBQU0sVUFBVSxHQUFHLFVBQ2pCLEdBQXNDLEVBQ3RDLE9BQTJCO0lBRTNCLE9BQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQ3hCLFVBQUMsR0FBNEMsRUFBRSxFQUFzQzs7WUFBdEMsS0FBQSxhQUFzQyxFQUFyQyxHQUFHLFFBQUEsRUFBRSxLQUFLLFFBQUE7UUFBZ0MsT0FBQSx1QkFDckYsR0FBRyxnQkFDTCxHQUFHLElBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsT0FDdEM7SUFId0YsQ0FHeEYsRUFDRixFQUFFLENBQ0g7QUFORCxDQU1DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdHRyaWJ1dGVWYWx1ZSB9IGZyb20gXCJAYXdzLXNkay9jbGllbnQtZHluYW1vZGJcIjtcblxuaW1wb3J0IHsgTmF0aXZlQXR0cmlidXRlVmFsdWUsIE51bWJlclZhbHVlIH0gZnJvbSBcIi4vbW9kZWxzXCI7XG5pbXBvcnQgeyB1bm1hcnNoYWxsT3B0aW9ucyB9IGZyb20gXCIuL3VubWFyc2hhbGxcIjtcblxuLyoqXG4gKiBDb252ZXJ0IGEgRHluYW1vREIgQXR0cmlidXRlVmFsdWUgb2JqZWN0IHRvIGl0cyBlcXVpdmFsZW50IEphdmFTY3JpcHQgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge0F0dHJpYnV0ZVZhbHVlfSBkYXRhIC0gVGhlIER5bmFtb0RCIHJlY29yZCB0byBjb252ZXJ0IHRvIEphdmFTY3JpcHQgdHlwZS5cbiAqIEBwYXJhbSB7dW5tYXJzaGFsbE9wdGlvbnN9IG9wdGlvbnMgLSBBbiBvcHRpb25hbCBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgYGNvbnZlcnRUb05hdGl2ZWAuXG4gKi9cbmV4cG9ydCBjb25zdCBjb252ZXJ0VG9OYXRpdmUgPSAoZGF0YTogQXR0cmlidXRlVmFsdWUsIG9wdGlvbnM/OiB1bm1hcnNoYWxsT3B0aW9ucyk6IE5hdGl2ZUF0dHJpYnV0ZVZhbHVlID0+IHtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgY2FzZSBcIk5VTExcIjpcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY2FzZSBcIkJPT0xcIjpcbiAgICAgICAgICByZXR1cm4gQm9vbGVhbih2YWx1ZSk7XG4gICAgICAgIGNhc2UgXCJOXCI6XG4gICAgICAgICAgcmV0dXJuIGNvbnZlcnROdW1iZXIodmFsdWUgYXMgc3RyaW5nLCBvcHRpb25zKTtcbiAgICAgICAgY2FzZSBcIkJcIjpcbiAgICAgICAgICByZXR1cm4gY29udmVydEJpbmFyeSh2YWx1ZSBhcyBVaW50OEFycmF5KTtcbiAgICAgICAgY2FzZSBcIlNcIjpcbiAgICAgICAgICByZXR1cm4gY29udmVydFN0cmluZyh2YWx1ZSBhcyBzdHJpbmcpO1xuICAgICAgICBjYXNlIFwiTFwiOlxuICAgICAgICAgIHJldHVybiBjb252ZXJ0TGlzdCh2YWx1ZSBhcyBBdHRyaWJ1dGVWYWx1ZVtdLCBvcHRpb25zKTtcbiAgICAgICAgY2FzZSBcIk1cIjpcbiAgICAgICAgICByZXR1cm4gY29udmVydE1hcCh2YWx1ZSBhcyB7IFtrZXk6IHN0cmluZ106IEF0dHJpYnV0ZVZhbHVlIH0sIG9wdGlvbnMpO1xuICAgICAgICBjYXNlIFwiTlNcIjpcbiAgICAgICAgICByZXR1cm4gbmV3IFNldCgodmFsdWUgYXMgc3RyaW5nW10pLm1hcCgoaXRlbSkgPT4gY29udmVydE51bWJlcihpdGVtLCBvcHRpb25zKSkpO1xuICAgICAgICBjYXNlIFwiQlNcIjpcbiAgICAgICAgICByZXR1cm4gbmV3IFNldCgodmFsdWUgYXMgVWludDhBcnJheVtdKS5tYXAoY29udmVydEJpbmFyeSkpO1xuICAgICAgICBjYXNlIFwiU1NcIjpcbiAgICAgICAgICByZXR1cm4gbmV3IFNldCgodmFsdWUgYXMgc3RyaW5nW10pLm1hcChjb252ZXJ0U3RyaW5nKSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCB0eXBlIHBhc3NlZDogJHtrZXl9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBFcnJvcihgTm8gdmFsdWUgZGVmaW5lZDogJHtKU09OLnN0cmluZ2lmeShkYXRhKX1gKTtcbn07XG5cbmNvbnN0IGNvbnZlcnROdW1iZXIgPSAobnVtU3RyaW5nOiBzdHJpbmcsIG9wdGlvbnM/OiB1bm1hcnNoYWxsT3B0aW9ucyk6IG51bWJlciB8IGJpZ2ludCB8IE51bWJlclZhbHVlID0+IHtcbiAgaWYgKG9wdGlvbnM/LndyYXBOdW1iZXJzKSB7XG4gICAgcmV0dXJuIHsgdmFsdWU6IG51bVN0cmluZyB9O1xuICB9XG5cbiAgY29uc3QgbnVtID0gTnVtYmVyKG51bVN0cmluZyk7XG4gIGNvbnN0IGluZmluaXR5VmFsdWVzID0gW051bWJlci5QT1NJVElWRV9JTkZJTklUWSwgTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZXTtcbiAgaWYgKChudW0gPiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiB8fCBudW0gPCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUikgJiYgIWluZmluaXR5VmFsdWVzLmluY2x1ZGVzKG51bSkpIHtcbiAgICBpZiAodHlwZW9mIEJpZ0ludCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gQmlnSW50KG51bVN0cmluZyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bnVtU3RyaW5nfSBjYW4ndCBiZSBjb252ZXJ0ZWQgdG8gQmlnSW50LiBTZXQgb3B0aW9ucy53cmFwTnVtYmVycyB0byBnZXQgc3RyaW5nIHZhbHVlLmApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bnVtU3RyaW5nfSBpcyBvdXRzaWRlIFNBRkVfSU5URUdFUiBib3VuZHMuIFNldCBvcHRpb25zLndyYXBOdW1iZXJzIHRvIGdldCBzdHJpbmcgdmFsdWUuYCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBudW07XG59O1xuXG4vLyBGb3IgZnV0dXJlLXByb29maW5nOiBGdW5jdGlvbnMgZnJvbSBzY2FsYXIgdmFsdWUgYXMgd2VsbCBhcyBzZXQgdmFsdWVcbmNvbnN0IGNvbnZlcnRTdHJpbmcgPSAoc3RyaW5nVmFsdWU6IHN0cmluZyk6IHN0cmluZyA9PiBzdHJpbmdWYWx1ZTtcbmNvbnN0IGNvbnZlcnRCaW5hcnkgPSAoYmluYXJ5VmFsdWU6IFVpbnQ4QXJyYXkpOiBVaW50OEFycmF5ID0+IGJpbmFyeVZhbHVlO1xuXG5jb25zdCBjb252ZXJ0TGlzdCA9IChsaXN0OiBBdHRyaWJ1dGVWYWx1ZVtdLCBvcHRpb25zPzogdW5tYXJzaGFsbE9wdGlvbnMpOiBOYXRpdmVBdHRyaWJ1dGVWYWx1ZVtdID0+XG4gIGxpc3QubWFwKChpdGVtKSA9PiBjb252ZXJ0VG9OYXRpdmUoaXRlbSwgb3B0aW9ucykpO1xuXG5jb25zdCBjb252ZXJ0TWFwID0gKFxuICBtYXA6IHsgW2tleTogc3RyaW5nXTogQXR0cmlidXRlVmFsdWUgfSxcbiAgb3B0aW9ucz86IHVubWFyc2hhbGxPcHRpb25zXG4pOiB7IFtrZXk6IHN0cmluZ106IE5hdGl2ZUF0dHJpYnV0ZVZhbHVlIH0gPT5cbiAgT2JqZWN0LmVudHJpZXMobWFwKS5yZWR1Y2UoXG4gICAgKGFjYzogeyBba2V5OiBzdHJpbmddOiBOYXRpdmVBdHRyaWJ1dGVWYWx1ZSB9LCBba2V5LCB2YWx1ZV06IFtzdHJpbmcsIEF0dHJpYnV0ZVZhbHVlXSkgPT4gKHtcbiAgICAgIC4uLmFjYyxcbiAgICAgIFtrZXldOiBjb252ZXJ0VG9OYXRpdmUodmFsdWUsIG9wdGlvbnMpLFxuICAgIH0pLFxuICAgIHt9XG4gICk7XG4iXX0=
|
package/dist/es/index.js
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export * from "./convertToAttr";
|
|
2
|
-
export * from "./convertToNative";
|
|
3
|
-
export * from "./marshall";
|
|
4
|
-
export * from "./models";
|
|
5
|
-
export * from "./unmarshall";
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vY29udmVydFRvQXR0clwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29udmVydFRvTmF0aXZlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9tYXJzaGFsbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbW9kZWxzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91bm1hcnNoYWxsXCI7XG4iXX0=
|
package/dist/es/marshall.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { convertToAttr } from "./convertToAttr";
|
|
2
|
-
/**
|
|
3
|
-
* Convert a JavaScript object into a DynamoDB record.
|
|
4
|
-
*
|
|
5
|
-
* @param {any} data - The data to convert to a DynamoDB record
|
|
6
|
-
* @param {marshallOptions} options - An optional configuration object for `marshall`
|
|
7
|
-
*/
|
|
8
|
-
export var marshall = function (data, options) { return convertToAttr(data, options).M; };
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFyc2hhbGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWFyc2hhbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBcUJoRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxJQUFNLFFBQVEsR0FBRyxVQUN0QixJQUFPLEVBQ1AsT0FBeUIsSUFDYSxPQUFBLGFBQWEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBc0MsRUFBbkUsQ0FBbUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0dHJpYnV0ZVZhbHVlIH0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1keW5hbW9kYlwiO1xuXG5pbXBvcnQgeyBjb252ZXJ0VG9BdHRyIH0gZnJvbSBcIi4vY29udmVydFRvQXR0clwiO1xuaW1wb3J0IHsgTmF0aXZlQXR0cmlidXRlVmFsdWUgfSBmcm9tIFwiLi9tb2RlbHNcIjtcblxuLyoqXG4gKiBBbiBvcHRpb25hbCBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgYG1hcnNoYWxsYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIG1hcnNoYWxsT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgY29udmVydCBlbXB0eSBzdHJpbmdzLCBibG9icywgYW5kIHNldHMgdG8gYG51bGxgXG4gICAqL1xuICBjb252ZXJ0RW1wdHlWYWx1ZXM/OiBib29sZWFuO1xuICAvKipcbiAgICogV2hldGhlciB0byByZW1vdmUgdW5kZWZpbmVkIHZhbHVlcyB3aGlsZSBtYXJzaGFsbGluZy5cbiAgICovXG4gIHJlbW92ZVVuZGVmaW5lZFZhbHVlcz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNvbnZlcnQgdHlwZW9mIG9iamVjdCB0byBtYXAgYXR0cmlidXRlLlxuICAgKi9cbiAgY29udmVydENsYXNzSW5zdGFuY2VUb01hcD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydCBhIEphdmFTY3JpcHQgb2JqZWN0IGludG8gYSBEeW5hbW9EQiByZWNvcmQuXG4gKlxuICogQHBhcmFtIHthbnl9IGRhdGEgLSBUaGUgZGF0YSB0byBjb252ZXJ0IHRvIGEgRHluYW1vREIgcmVjb3JkXG4gKiBAcGFyYW0ge21hcnNoYWxsT3B0aW9uc30gb3B0aW9ucyAtIEFuIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciBgbWFyc2hhbGxgXG4gKi9cbmV4cG9ydCBjb25zdCBtYXJzaGFsbCA9IDxUIGV4dGVuZHMgeyBbSyBpbiBrZXlvZiBUXTogTmF0aXZlQXR0cmlidXRlVmFsdWUgfT4oXG4gIGRhdGE6IFQsXG4gIG9wdGlvbnM/OiBtYXJzaGFsbE9wdGlvbnNcbik6IHsgW2tleTogc3RyaW5nXTogQXR0cmlidXRlVmFsdWUgfSA9PiBjb252ZXJ0VG9BdHRyKGRhdGEsIG9wdGlvbnMpLk0gYXMgeyBba2V5OiBzdHJpbmddOiBBdHRyaWJ1dGVWYWx1ZSB9O1xuIl19
|
package/dist/es/models.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBIGludGVyZmFjZSByZWNvZ25pemFibGUgYXMgYSBudW1lcmljIHZhbHVlIHRoYXQgc3RvcmVzIHRoZSB1bmRlcmx5aW5nIG51bWJlclxuICogYXMgYSBzdHJpbmcuXG4gKlxuICogSW50ZW5kZWQgdG8gYmUgYSBkZXNlcmlhbGl6YXRpb24gdGFyZ2V0IGZvciB0aGUgRHluYW1vREIgRG9jdW1lbnQgQ2xpZW50IHdoZW5cbiAqIHRoZSBgd3JhcE51bWJlcnNgIGZsYWcgaXMgc2V0LiBUaGlzIGFsbG93cyBmb3IgbnVtZXJpYyB2YWx1ZXMgdGhhdCBsb3NlXG4gKiBwcmVjaXNpb24gd2hlbiBjb252ZXJ0ZWQgdG8gSmF2YVNjcmlwdCdzIGBudW1iZXJgIHR5cGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTnVtYmVyVmFsdWUge1xuICByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBOYXRpdmVBdHRyaWJ1dGVWYWx1ZSA9XG4gIHwgTmF0aXZlU2NhbGFyQXR0cmlidXRlVmFsdWVcbiAgfCB7IFtrZXk6IHN0cmluZ106IE5hdGl2ZUF0dHJpYnV0ZVZhbHVlIH1cbiAgfCBOYXRpdmVBdHRyaWJ1dGVWYWx1ZVtdXG4gIHwgU2V0PG51bWJlciB8IGJpZ2ludCB8IE51bWJlclZhbHVlIHwgc3RyaW5nIHwgTmF0aXZlQXR0cmlidXRlQmluYXJ5IHwgdW5kZWZpbmVkPlxuICB8IEluc3RhbmNlVHlwZTx7IG5ldyAoLi4uYXJnczogYW55W10pOiBhbnkgfT47IC8vIGFjY2VwdHMgYW55IGNsYXNzIGluc3RhbmNlIHdpdGggb3B0aW9ucy5jb252ZXJ0Q2xhc3NJbnN0YW5jZVRvTWFwXG5cbmV4cG9ydCB0eXBlIE5hdGl2ZVNjYWxhckF0dHJpYnV0ZVZhbHVlID1cbiAgfCBudWxsXG4gIHwgdW5kZWZpbmVkXG4gIHwgYm9vbGVhblxuICB8IG51bWJlclxuICB8IE51bWJlclZhbHVlXG4gIHwgYmlnaW50XG4gIHwgTmF0aXZlQXR0cmlidXRlQmluYXJ5XG4gIHwgc3RyaW5nO1xuXG5leHBvcnQgdHlwZSBOYXRpdmVBdHRyaWJ1dGVCaW5hcnkgPVxuICB8IEFycmF5QnVmZmVyXG4gIHwgQmxvYlxuICB8IEJ1ZmZlclxuICB8IERhdGFWaWV3XG4gIHwgRmlsZVxuICB8IEludDhBcnJheVxuICB8IFVpbnQ4QXJyYXlcbiAgfCBVaW50OENsYW1wZWRBcnJheVxuICB8IEludDE2QXJyYXlcbiAgfCBVaW50MTZBcnJheVxuICB8IEludDMyQXJyYXlcbiAgfCBVaW50MzJBcnJheVxuICB8IEZsb2F0MzJBcnJheVxuICB8IEZsb2F0NjRBcnJheVxuICB8IEJpZ0ludDY0QXJyYXlcbiAgfCBCaWdVaW50NjRBcnJheTtcbiJdfQ==
|
package/dist/es/unmarshall.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { convertToNative } from "./convertToNative";
|
|
2
|
-
/**
|
|
3
|
-
* Convert a DynamoDB record into a JavaScript object.
|
|
4
|
-
*
|
|
5
|
-
* @param {any} data - The DynamoDB record
|
|
6
|
-
* @param {unmarshallOptions} options - An optional configuration object for `unmarshall`
|
|
7
|
-
*/
|
|
8
|
-
export var unmarshall = function (data, options) {
|
|
9
|
-
return convertToNative({ M: data }, options);
|
|
10
|
-
};
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5tYXJzaGFsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91bm1hcnNoYWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQWNwRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxJQUFNLFVBQVUsR0FBRyxVQUN4QixJQUF1QyxFQUN2QyxPQUEyQjtJQUUzQixPQUFBLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLENBQTRDO0FBQWhGLENBQWdGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdHRyaWJ1dGVWYWx1ZSB9IGZyb20gXCJAYXdzLXNkay9jbGllbnQtZHluYW1vZGJcIjtcblxuaW1wb3J0IHsgY29udmVydFRvTmF0aXZlIH0gZnJvbSBcIi4vY29udmVydFRvTmF0aXZlXCI7XG5pbXBvcnQgeyBOYXRpdmVBdHRyaWJ1dGVWYWx1ZSB9IGZyb20gXCIuL21vZGVsc1wiO1xuXG4vKipcbiAqIEFuIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciBgY29udmVydFRvTmF0aXZlYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIHVubWFyc2hhbGxPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmV0dXJuIG51bWJlcnMgYXMgYSBzdHJpbmcgaW5zdGVhZCBvZiBjb252ZXJ0aW5nIHRoZW0gdG8gbmF0aXZlIEphdmFTY3JpcHQgbnVtYmVycy5cbiAgICogVGhpcyBhbGxvd3MgZm9yIHRoZSBzYWZlIHJvdW5kLXRyaXAgdHJhbnNwb3J0IG9mIG51bWJlcnMgb2YgYXJiaXRyYXJ5IHNpemUuXG4gICAqL1xuICB3cmFwTnVtYmVycz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydCBhIER5bmFtb0RCIHJlY29yZCBpbnRvIGEgSmF2YVNjcmlwdCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHthbnl9IGRhdGEgLSBUaGUgRHluYW1vREIgcmVjb3JkXG4gKiBAcGFyYW0ge3VubWFyc2hhbGxPcHRpb25zfSBvcHRpb25zIC0gQW4gb3B0aW9uYWwgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIGB1bm1hcnNoYWxsYFxuICovXG5leHBvcnQgY29uc3QgdW5tYXJzaGFsbCA9IChcbiAgZGF0YTogeyBba2V5OiBzdHJpbmddOiBBdHRyaWJ1dGVWYWx1ZSB9LFxuICBvcHRpb25zPzogdW5tYXJzaGFsbE9wdGlvbnNcbik6IHsgW2tleTogc3RyaW5nXTogTmF0aXZlQXR0cmlidXRlVmFsdWUgfSA9PlxuICBjb252ZXJ0VG9OYXRpdmUoeyBNOiBkYXRhIH0sIG9wdGlvbnMpIGFzIHsgW2tleTogc3RyaW5nXTogTmF0aXZlQXR0cmlidXRlVmFsdWUgfTtcbiJdfQ==
|
package/src/convertToAttr.ts
DELETED
|
@@ -1,190 +0,0 @@
|
|
|
1
|
-
import { AttributeValue } from "@aws-sdk/client-dynamodb";
|
|
2
|
-
|
|
3
|
-
import { marshallOptions } from "./marshall";
|
|
4
|
-
import { NativeAttributeBinary, NativeAttributeValue, NativeScalarAttributeValue } from "./models";
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Convert a JavaScript value to its equivalent DynamoDB AttributeValue type
|
|
8
|
-
*
|
|
9
|
-
* @param {NativeAttributeValue} data - The data to convert to a DynamoDB AttributeValue
|
|
10
|
-
* @param {marshallOptions} options - An optional configuration object for `convertToAttr`
|
|
11
|
-
*/
|
|
12
|
-
export const convertToAttr = (data: NativeAttributeValue, options?: marshallOptions): AttributeValue => {
|
|
13
|
-
if (data === undefined) {
|
|
14
|
-
throw new Error(`Pass options.removeUndefinedValues=true to remove undefined values from map/array/set.`);
|
|
15
|
-
} else if (data === null && typeof data === "object") {
|
|
16
|
-
return convertToNullAttr();
|
|
17
|
-
} else if (Array.isArray(data)) {
|
|
18
|
-
return convertToListAttr(data, options);
|
|
19
|
-
} else if (data?.constructor?.name === "Set") {
|
|
20
|
-
return convertToSetAttr(data as Set<any>, options);
|
|
21
|
-
} else if (data?.constructor?.name === "Map") {
|
|
22
|
-
return convertToMapAttrFromIterable(data as Map<string, NativeAttributeValue>, options);
|
|
23
|
-
} else if (
|
|
24
|
-
data?.constructor?.name === "Object" ||
|
|
25
|
-
// for object which is result of Object.create(null), which doesn't have constructor defined
|
|
26
|
-
(!data.constructor && typeof data === "object")
|
|
27
|
-
) {
|
|
28
|
-
return convertToMapAttrFromEnumerableProps(data as { [key: string]: NativeAttributeValue }, options);
|
|
29
|
-
} else if (isBinary(data)) {
|
|
30
|
-
if (data.length === 0 && options?.convertEmptyValues) {
|
|
31
|
-
return convertToNullAttr();
|
|
32
|
-
}
|
|
33
|
-
// Do not alter binary data passed https://github.com/aws/aws-sdk-js-v3/issues/1530
|
|
34
|
-
// @ts-expect-error Type '{ B: NativeAttributeBinary; }' is not assignable to type 'AttributeValue'
|
|
35
|
-
return convertToBinaryAttr(data);
|
|
36
|
-
} else if (typeof data === "boolean" || data?.constructor?.name === "Boolean") {
|
|
37
|
-
return { BOOL: data.valueOf() };
|
|
38
|
-
} else if (typeof data === "number" || data?.constructor?.name === "Number") {
|
|
39
|
-
return convertToNumberAttr(data);
|
|
40
|
-
} else if (typeof data === "bigint") {
|
|
41
|
-
return convertToBigIntAttr(data);
|
|
42
|
-
} else if (typeof data === "string" || data?.constructor?.name === "String") {
|
|
43
|
-
if (data.length === 0 && options?.convertEmptyValues) {
|
|
44
|
-
return convertToNullAttr();
|
|
45
|
-
}
|
|
46
|
-
return convertToStringAttr(data);
|
|
47
|
-
} else if (options?.convertClassInstanceToMap && typeof data === "object") {
|
|
48
|
-
return convertToMapAttrFromEnumerableProps(data as { [key: string]: NativeAttributeValue }, options);
|
|
49
|
-
}
|
|
50
|
-
throw new Error(
|
|
51
|
-
`Unsupported type passed: ${data}. Pass options.convertClassInstanceToMap=true to marshall typeof object as map attribute.`
|
|
52
|
-
);
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
const convertToListAttr = (data: NativeAttributeValue[], options?: marshallOptions): { L: AttributeValue[] } => ({
|
|
56
|
-
L: data
|
|
57
|
-
.filter((item) => !options?.removeUndefinedValues || (options?.removeUndefinedValues && item !== undefined))
|
|
58
|
-
.map((item) => convertToAttr(item, options)),
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
const convertToSetAttr = (
|
|
62
|
-
set: Set<any>,
|
|
63
|
-
options?: marshallOptions
|
|
64
|
-
): { NS: string[] } | { BS: Uint8Array[] } | { SS: string[] } | { NULL: true } => {
|
|
65
|
-
const setToOperate = options?.removeUndefinedValues ? new Set([...set].filter((value) => value !== undefined)) : set;
|
|
66
|
-
|
|
67
|
-
if (!options?.removeUndefinedValues && setToOperate.has(undefined)) {
|
|
68
|
-
throw new Error(`Pass options.removeUndefinedValues=true to remove undefined values from map/array/set.`);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
if (setToOperate.size === 0) {
|
|
72
|
-
if (options?.convertEmptyValues) {
|
|
73
|
-
return convertToNullAttr();
|
|
74
|
-
}
|
|
75
|
-
throw new Error(`Pass a non-empty set, or options.convertEmptyValues=true.`);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
const item = setToOperate.values().next().value;
|
|
79
|
-
if (typeof item === "number") {
|
|
80
|
-
return {
|
|
81
|
-
NS: Array.from(setToOperate)
|
|
82
|
-
.map(convertToNumberAttr)
|
|
83
|
-
.map((item) => item.N),
|
|
84
|
-
};
|
|
85
|
-
} else if (typeof item === "bigint") {
|
|
86
|
-
return {
|
|
87
|
-
NS: Array.from(setToOperate)
|
|
88
|
-
.map(convertToBigIntAttr)
|
|
89
|
-
.map((item) => item.N),
|
|
90
|
-
};
|
|
91
|
-
} else if (typeof item === "string") {
|
|
92
|
-
return {
|
|
93
|
-
SS: Array.from(setToOperate)
|
|
94
|
-
.map(convertToStringAttr)
|
|
95
|
-
.map((item) => item.S),
|
|
96
|
-
};
|
|
97
|
-
} else if (isBinary(item)) {
|
|
98
|
-
return {
|
|
99
|
-
// Do not alter binary data passed https://github.com/aws/aws-sdk-js-v3/issues/1530
|
|
100
|
-
// @ts-expect-error Type 'ArrayBuffer' is not assignable to type 'Uint8Array'
|
|
101
|
-
BS: Array.from(setToOperate)
|
|
102
|
-
.map(convertToBinaryAttr)
|
|
103
|
-
.map((item) => item.B),
|
|
104
|
-
};
|
|
105
|
-
} else {
|
|
106
|
-
throw new Error(`Only Number Set (NS), Binary Set (BS) or String Set (SS) are allowed.`);
|
|
107
|
-
}
|
|
108
|
-
};
|
|
109
|
-
|
|
110
|
-
const convertToMapAttrFromIterable = (
|
|
111
|
-
data: Map<string, NativeAttributeValue>,
|
|
112
|
-
options?: marshallOptions
|
|
113
|
-
): { M: { [key: string]: AttributeValue } } => ({
|
|
114
|
-
M: ((data) => {
|
|
115
|
-
const map: { [key: string]: AttributeValue } = {};
|
|
116
|
-
for (const [key, value] of data) {
|
|
117
|
-
if (typeof value !== "function" && (value !== undefined || !options?.removeUndefinedValues)) {
|
|
118
|
-
map[key] = convertToAttr(value, options);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
return map;
|
|
122
|
-
})(data),
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
const convertToMapAttrFromEnumerableProps = (
|
|
126
|
-
data: { [key: string]: NativeAttributeValue },
|
|
127
|
-
options?: marshallOptions
|
|
128
|
-
): { M: { [key: string]: AttributeValue } } => ({
|
|
129
|
-
M: ((data) => {
|
|
130
|
-
const map: { [key: string]: AttributeValue } = {};
|
|
131
|
-
for (const key in data) {
|
|
132
|
-
const value = data[key];
|
|
133
|
-
if (typeof value !== "function" && (value !== undefined || !options?.removeUndefinedValues)) {
|
|
134
|
-
map[key] = convertToAttr(value, options);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
return map;
|
|
138
|
-
})(data),
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
// For future-proofing: this functions are called from multiple places
|
|
142
|
-
const convertToNullAttr = (): { NULL: true } => ({ NULL: true });
|
|
143
|
-
const convertToBinaryAttr = (data: NativeAttributeBinary): { B: NativeAttributeBinary } => ({ B: data });
|
|
144
|
-
const convertToStringAttr = (data: string | String): { S: string } => ({ S: data.toString() });
|
|
145
|
-
const convertToBigIntAttr = (data: bigint): { N: string } => ({ N: data.toString() });
|
|
146
|
-
|
|
147
|
-
const validateBigIntAndThrow = (errorPrefix: string) => {
|
|
148
|
-
throw new Error(`${errorPrefix} ${typeof BigInt === "function" ? "Use BigInt." : "Pass string value instead."} `);
|
|
149
|
-
};
|
|
150
|
-
|
|
151
|
-
const convertToNumberAttr = (num: number | Number): { N: string } => {
|
|
152
|
-
if (
|
|
153
|
-
[Number.NaN, Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY]
|
|
154
|
-
.map((val) => val.toString())
|
|
155
|
-
.includes(num.toString())
|
|
156
|
-
) {
|
|
157
|
-
throw new Error(`Special numeric value ${num.toString()} is not allowed`);
|
|
158
|
-
} else if (num > Number.MAX_SAFE_INTEGER) {
|
|
159
|
-
validateBigIntAndThrow(`Number ${num.toString()} is greater than Number.MAX_SAFE_INTEGER.`);
|
|
160
|
-
} else if (num < Number.MIN_SAFE_INTEGER) {
|
|
161
|
-
validateBigIntAndThrow(`Number ${num.toString()} is lesser than Number.MIN_SAFE_INTEGER.`);
|
|
162
|
-
}
|
|
163
|
-
return { N: num.toString() };
|
|
164
|
-
};
|
|
165
|
-
|
|
166
|
-
const isBinary = (data: any): boolean => {
|
|
167
|
-
const binaryTypes = [
|
|
168
|
-
"ArrayBuffer",
|
|
169
|
-
"Blob",
|
|
170
|
-
"Buffer",
|
|
171
|
-
"DataView",
|
|
172
|
-
"File",
|
|
173
|
-
"Int8Array",
|
|
174
|
-
"Uint8Array",
|
|
175
|
-
"Uint8ClampedArray",
|
|
176
|
-
"Int16Array",
|
|
177
|
-
"Uint16Array",
|
|
178
|
-
"Int32Array",
|
|
179
|
-
"Uint32Array",
|
|
180
|
-
"Float32Array",
|
|
181
|
-
"Float64Array",
|
|
182
|
-
"BigInt64Array",
|
|
183
|
-
"BigUint64Array",
|
|
184
|
-
];
|
|
185
|
-
|
|
186
|
-
if (data?.constructor) {
|
|
187
|
-
return binaryTypes.includes(data.constructor.name);
|
|
188
|
-
}
|
|
189
|
-
return false;
|
|
190
|
-
};
|
package/src/convertToNative.ts
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { AttributeValue } from "@aws-sdk/client-dynamodb";
|
|
2
|
-
|
|
3
|
-
import { NativeAttributeValue, NumberValue } from "./models";
|
|
4
|
-
import { unmarshallOptions } from "./unmarshall";
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Convert a DynamoDB AttributeValue object to its equivalent JavaScript type.
|
|
8
|
-
*
|
|
9
|
-
* @param {AttributeValue} data - The DynamoDB record to convert to JavaScript type.
|
|
10
|
-
* @param {unmarshallOptions} options - An optional configuration object for `convertToNative`.
|
|
11
|
-
*/
|
|
12
|
-
export const convertToNative = (data: AttributeValue, options?: unmarshallOptions): NativeAttributeValue => {
|
|
13
|
-
for (const [key, value] of Object.entries(data)) {
|
|
14
|
-
if (value !== undefined) {
|
|
15
|
-
switch (key) {
|
|
16
|
-
case "NULL":
|
|
17
|
-
return null;
|
|
18
|
-
case "BOOL":
|
|
19
|
-
return Boolean(value);
|
|
20
|
-
case "N":
|
|
21
|
-
return convertNumber(value as string, options);
|
|
22
|
-
case "B":
|
|
23
|
-
return convertBinary(value as Uint8Array);
|
|
24
|
-
case "S":
|
|
25
|
-
return convertString(value as string);
|
|
26
|
-
case "L":
|
|
27
|
-
return convertList(value as AttributeValue[], options);
|
|
28
|
-
case "M":
|
|
29
|
-
return convertMap(value as { [key: string]: AttributeValue }, options);
|
|
30
|
-
case "NS":
|
|
31
|
-
return new Set((value as string[]).map((item) => convertNumber(item, options)));
|
|
32
|
-
case "BS":
|
|
33
|
-
return new Set((value as Uint8Array[]).map(convertBinary));
|
|
34
|
-
case "SS":
|
|
35
|
-
return new Set((value as string[]).map(convertString));
|
|
36
|
-
default:
|
|
37
|
-
throw new Error(`Unsupported type passed: ${key}`);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
throw new Error(`No value defined: ${JSON.stringify(data)}`);
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
const convertNumber = (numString: string, options?: unmarshallOptions): number | bigint | NumberValue => {
|
|
45
|
-
if (options?.wrapNumbers) {
|
|
46
|
-
return { value: numString };
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
const num = Number(numString);
|
|
50
|
-
const infinityValues = [Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY];
|
|
51
|
-
if ((num > Number.MAX_SAFE_INTEGER || num < Number.MIN_SAFE_INTEGER) && !infinityValues.includes(num)) {
|
|
52
|
-
if (typeof BigInt === "function") {
|
|
53
|
-
try {
|
|
54
|
-
return BigInt(numString);
|
|
55
|
-
} catch (error) {
|
|
56
|
-
throw new Error(`${numString} can't be converted to BigInt. Set options.wrapNumbers to get string value.`);
|
|
57
|
-
}
|
|
58
|
-
} else {
|
|
59
|
-
throw new Error(`${numString} is outside SAFE_INTEGER bounds. Set options.wrapNumbers to get string value.`);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
return num;
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
// For future-proofing: Functions from scalar value as well as set value
|
|
66
|
-
const convertString = (stringValue: string): string => stringValue;
|
|
67
|
-
const convertBinary = (binaryValue: Uint8Array): Uint8Array => binaryValue;
|
|
68
|
-
|
|
69
|
-
const convertList = (list: AttributeValue[], options?: unmarshallOptions): NativeAttributeValue[] =>
|
|
70
|
-
list.map((item) => convertToNative(item, options));
|
|
71
|
-
|
|
72
|
-
const convertMap = (
|
|
73
|
-
map: { [key: string]: AttributeValue },
|
|
74
|
-
options?: unmarshallOptions
|
|
75
|
-
): { [key: string]: NativeAttributeValue } =>
|
|
76
|
-
Object.entries(map).reduce(
|
|
77
|
-
(acc: { [key: string]: NativeAttributeValue }, [key, value]: [string, AttributeValue]) => ({
|
|
78
|
-
...acc,
|
|
79
|
-
[key]: convertToNative(value, options),
|
|
80
|
-
}),
|
|
81
|
-
{}
|
|
82
|
-
);
|
package/src/marshall.ts
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { AttributeValue } from "@aws-sdk/client-dynamodb";
|
|
2
|
-
|
|
3
|
-
import { convertToAttr } from "./convertToAttr";
|
|
4
|
-
import { NativeAttributeValue } from "./models";
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* An optional configuration object for `marshall`
|
|
8
|
-
*/
|
|
9
|
-
export interface marshallOptions {
|
|
10
|
-
/**
|
|
11
|
-
* Whether to automatically convert empty strings, blobs, and sets to `null`
|
|
12
|
-
*/
|
|
13
|
-
convertEmptyValues?: boolean;
|
|
14
|
-
/**
|
|
15
|
-
* Whether to remove undefined values while marshalling.
|
|
16
|
-
*/
|
|
17
|
-
removeUndefinedValues?: boolean;
|
|
18
|
-
/**
|
|
19
|
-
* Whether to convert typeof object to map attribute.
|
|
20
|
-
*/
|
|
21
|
-
convertClassInstanceToMap?: boolean;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Convert a JavaScript object into a DynamoDB record.
|
|
26
|
-
*
|
|
27
|
-
* @param {any} data - The data to convert to a DynamoDB record
|
|
28
|
-
* @param {marshallOptions} options - An optional configuration object for `marshall`
|
|
29
|
-
*/
|
|
30
|
-
export const marshall = <T extends { [K in keyof T]: NativeAttributeValue }>(
|
|
31
|
-
data: T,
|
|
32
|
-
options?: marshallOptions
|
|
33
|
-
): { [key: string]: AttributeValue } => convertToAttr(data, options).M as { [key: string]: AttributeValue };
|
package/src/models.ts
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A interface recognizable as a numeric value that stores the underlying number
|
|
3
|
-
* as a string.
|
|
4
|
-
*
|
|
5
|
-
* Intended to be a deserialization target for the DynamoDB Document Client when
|
|
6
|
-
* the `wrapNumbers` flag is set. This allows for numeric values that lose
|
|
7
|
-
* precision when converted to JavaScript's `number` type.
|
|
8
|
-
*/
|
|
9
|
-
export interface NumberValue {
|
|
10
|
-
readonly value: string;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export type NativeAttributeValue =
|
|
14
|
-
| NativeScalarAttributeValue
|
|
15
|
-
| { [key: string]: NativeAttributeValue }
|
|
16
|
-
| NativeAttributeValue[]
|
|
17
|
-
| Set<number | bigint | NumberValue | string | NativeAttributeBinary | undefined>
|
|
18
|
-
| InstanceType<{ new (...args: any[]): any }>; // accepts any class instance with options.convertClassInstanceToMap
|
|
19
|
-
|
|
20
|
-
export type NativeScalarAttributeValue =
|
|
21
|
-
| null
|
|
22
|
-
| undefined
|
|
23
|
-
| boolean
|
|
24
|
-
| number
|
|
25
|
-
| NumberValue
|
|
26
|
-
| bigint
|
|
27
|
-
| NativeAttributeBinary
|
|
28
|
-
| string;
|
|
29
|
-
|
|
30
|
-
export type NativeAttributeBinary =
|
|
31
|
-
| ArrayBuffer
|
|
32
|
-
| Blob
|
|
33
|
-
| Buffer
|
|
34
|
-
| DataView
|
|
35
|
-
| File
|
|
36
|
-
| Int8Array
|
|
37
|
-
| Uint8Array
|
|
38
|
-
| Uint8ClampedArray
|
|
39
|
-
| Int16Array
|
|
40
|
-
| Uint16Array
|
|
41
|
-
| Int32Array
|
|
42
|
-
| Uint32Array
|
|
43
|
-
| Float32Array
|
|
44
|
-
| Float64Array
|
|
45
|
-
| BigInt64Array
|
|
46
|
-
| BigUint64Array;
|
package/src/unmarshall.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { AttributeValue } from "@aws-sdk/client-dynamodb";
|
|
2
|
-
|
|
3
|
-
import { convertToNative } from "./convertToNative";
|
|
4
|
-
import { NativeAttributeValue } from "./models";
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* An optional configuration object for `convertToNative`
|
|
8
|
-
*/
|
|
9
|
-
export interface unmarshallOptions {
|
|
10
|
-
/**
|
|
11
|
-
* Whether to return numbers as a string instead of converting them to native JavaScript numbers.
|
|
12
|
-
* This allows for the safe round-trip transport of numbers of arbitrary size.
|
|
13
|
-
*/
|
|
14
|
-
wrapNumbers?: boolean;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Convert a DynamoDB record into a JavaScript object.
|
|
19
|
-
*
|
|
20
|
-
* @param {any} data - The DynamoDB record
|
|
21
|
-
* @param {unmarshallOptions} options - An optional configuration object for `unmarshall`
|
|
22
|
-
*/
|
|
23
|
-
export const unmarshall = (
|
|
24
|
-
data: { [key: string]: AttributeValue },
|
|
25
|
-
options?: unmarshallOptions
|
|
26
|
-
): { [key: string]: NativeAttributeValue } =>
|
|
27
|
-
convertToNative({ M: data }, options) as { [key: string]: NativeAttributeValue };
|
package/tsconfig.cjs.json
DELETED
package/tsconfig.es.json
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"lib": ["dom", "es5", "es2015.promise", "es2015.collection", "es2015.iterable", "es2015.symbol.wellknown"],
|
|
4
|
-
"declarationDir": "./dist/types",
|
|
5
|
-
"rootDir": "./src",
|
|
6
|
-
"outDir": "./dist/es",
|
|
7
|
-
"baseUrl": "."
|
|
8
|
-
},
|
|
9
|
-
"extends": "../../tsconfig.es.json",
|
|
10
|
-
"include": ["src/"]
|
|
11
|
-
}
|