From 999aeadebff91657f1d88242dea53e8bb1a4778e Mon Sep 17 00:00:00 2001 From: ryan-bennett Date: Wed, 17 Mar 2021 09:45:44 +1000 Subject: [PATCH] Added decimaljs.light for item caculation --- itemsize.js | 4 +++- package-lock.json | 11 +++++++++++ package.json | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/itemsize.js b/itemsize.js index e5c5e7e..6526631 100644 --- a/itemsize.js +++ b/itemsize.js @@ -2,6 +2,7 @@ const BASE_LOGICAL_SIZE_OF_NESTED_TYPES = 1 const LOGICAL_SIZE_OF_EMPTY_DOCUMENT = 3 const { encode } = require('utf8') const atob = require('atob') +const Decimal = require('decimal.js-light') // Inspired by https://zaccharles.github.io/dynamodb-calculator/ and adapted for node @@ -31,7 +32,8 @@ const calculateAttributeSizeInBytes = (attribute) => { const calculateNumberSizeInBytes = (number) => { if (number === 0) return 1 - const fixed = Number.parseFloat(number).toFixed() + const decimal = new Decimal(number) + const fixed = decimal.toFixed() let size = calculateFixedSizeInBytes(fixed.replace('-', '')) + 1 if (fixed.startsWith('-')) size++ if (size > 21) size = 21 diff --git a/package-lock.json b/package-lock.json index ef5319e..6fb4da7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "@aws-sdk/util-dynamodb": "^3.7.0", "abstract-leveldown": "^6.3.0", "atob": "^2.1.2", + "decimal.js-light": "^2.5.1", "inherits": "^2.0.1", "through2": "^4.0.2", "utf8": "^3.0.0" @@ -4654,6 +4655,11 @@ "node": ">=0.10.0" } }, + "node_modules/decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==" + }, "node_modules/decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", @@ -18945,6 +18951,11 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, + "decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==" + }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", diff --git a/package.json b/package.json index 9e7e0a0..74efe4a 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "@aws-sdk/util-dynamodb": "^3.7.0", "abstract-leveldown": "^6.3.0", "atob": "^2.1.2", + "decimal.js-light": "^2.5.1", "inherits": "^2.0.1", "through2": "^4.0.2", "utf8": "^3.0.0"