From 82391ea00a4cba44937d5e33083e1fc3317525e8 Mon Sep 17 00:00:00 2001 From: Naor Peled Date: Sat, 8 Apr 2023 14:01:15 +0300 Subject: [PATCH] chore: cleanup unused code (#494) --- package-lock.json | 880 ------------------ package.json | 1 - src/__tests__/entity-creation.unit.test.ts | 3 +- src/__tests__/entity.parse.unit.test.ts | 4 +- src/__tests__/entity.update.unit.test.ts | 134 +-- src/__tests__/misc-tests.unit.test.ts | 4 +- src/__tests__/parse.unit.test.ts | 2 +- src/__tests__/projectionBuilder.unit.test.ts | 5 +- src/__tests__/put.int.test.ts | 71 -- src/__tests__/table-creation.unit.test.ts | 192 ++-- src/__tests__/table.batchWrite.unit.test.ts | 28 +- src/__tests__/table.entities.unit.test.ts | 1 + .../table.entity-actions.unit.test.ts | 2 +- src/__tests__/table.transactGet.unit.test.ts | 2 +- .../table.transactWrite.unit.test.ts | 9 +- src/classes/Entity/Entity.ts | 39 +- src/classes/Table/Table.ts | 90 +- src/lib/checkAttribute.ts | 2 +- src/lib/expressionBuilder.ts | 11 +- src/lib/normalizeData.ts | 6 +- src/lib/parseCompositeKey.ts | 2 +- src/lib/parseEntityAttributes.ts | 2 +- src/lib/parseMapping.ts | 4 +- src/lib/parseTable.ts | 10 +- src/lib/projectionBuilder.ts | 17 +- src/lib/validateTypes.ts | 2 +- 26 files changed, 301 insertions(+), 1222 deletions(-) delete mode 100644 src/__tests__/put.int.test.ts diff --git a/package-lock.json b/package-lock.json index 4d5152a89..e3fc3a196 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,6 @@ "@typescript-eslint/eslint-plugin": "^5.43.0", "@typescript-eslint/parser": "^5.43.0", "coveralls": "^3.1.0", - "dynalite": "^3.2.1", "eslint": "^8.2.0", "jest": "^29.2.2", "prettier": "^2.2.1", @@ -2952,46 +2951,6 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/abstract-leveldown/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, "node_modules/acorn": { "version": "8.5.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", @@ -3147,15 +3106,6 @@ "node": ">=0.8" } }, - "node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "dependencies": { - "lodash": "^4.17.14" - } - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -3274,26 +3224,6 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -3303,15 +3233,6 @@ "tweetnacl": "^0.14.3" } }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/bowser": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", @@ -3389,15 +3310,6 @@ "node-int64": "^0.4.0" } }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -3698,25 +3610,6 @@ "node": ">=0.10.0" } }, - "node_modules/deferred-leveldown": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", - "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", - "dev": true, - "dependencies": { - "abstract-leveldown": "~6.2.1", - "inherits": "^2.0.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/defined": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-0.0.0.tgz", - "integrity": "sha1-817qfXBekzuvE7LwOz+D2SFAOz4=", - "dev": true - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -3768,30 +3661,6 @@ "node": ">=6.0.0" } }, - "node_modules/dynalite": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/dynalite/-/dynalite-3.2.1.tgz", - "integrity": "sha512-PgpagYk1ecSzhjGuFMuFHEuWJ0BNddqTrG89ra+Jhs0zgjr/IPoNCmrAdBUumy2Ds2hx8V3aNuLKpPbaGcVwtQ==", - "dev": true, - "dependencies": { - "async": "^2.6.3", - "big.js": "^5.2.2", - "buffer-crc32": "^0.2.13", - "lazy": "^1.0.11", - "levelup": "^4.4.0", - "lock": "^1.1.0", - "memdown": "^5.1.0", - "minimist": "^1.2.5", - "once": "^1.4.0", - "subleveldown": "^5.0.0" - }, - "bin": { - "dynalite": "cli.js" - }, - "optionalDependencies": { - "leveldown": "^5.2.1" - } - }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -3826,21 +3695,6 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "node_modules/encoding-down": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", - "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", - "dev": true, - "dependencies": { - "abstract-leveldown": "^6.2.1", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", @@ -3853,18 +3707,6 @@ "node": ">=8.6" } }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -4593,12 +4435,6 @@ "node": ">=10.17.0" } }, - "node_modules/ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true - }, "node_modules/ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -4608,12 +4444,6 @@ "node": ">= 4" } }, - "node_modules/immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", - "dev": true - }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -5599,15 +5429,6 @@ "node": ">=6" } }, - "node_modules/lazy": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/lazy/-/lazy-1.0.11.tgz", - "integrity": "sha1-2qBoIGKCVCwIgojpdcKXwa53tpA=", - "dev": true, - "engines": { - "node": ">=0.2.0" - } - }, "node_modules/lcov-parse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", @@ -5617,130 +5438,6 @@ "lcov-parse": "bin/cli.js" } }, - "node_modules/level-codec": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", - "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", - "dev": true, - "dependencies": { - "buffer": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-codec/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", - "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", - "dev": true, - "dependencies": { - "errno": "~0.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-iterator-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", - "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", - "dev": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.4.0", - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-option-wrap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/level-option-wrap/-/level-option-wrap-1.1.0.tgz", - "integrity": "sha1-rSDmjZ88IsiJdTHMaqevWWse0Sk=", - "dev": true, - "dependencies": { - "defined": "~0.0.0" - } - }, - "node_modules/level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "dependencies": { - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/leveldown": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz", - "integrity": "sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "dependencies": { - "abstract-leveldown": "~6.2.1", - "napi-macros": "~2.0.0", - "node-gyp-build": "~4.1.0" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/levelup": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", - "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", - "dev": true, - "dependencies": { - "deferred-leveldown": "~5.3.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~4.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -5781,18 +5478,6 @@ "node": ">=8" } }, - "node_modules/lock": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/lock/-/lock-1.1.0.tgz", - "integrity": "sha1-UxV0mdFlOxNspmRRBx/KYVcD+lU=", - "dev": true - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -5842,12 +5527,6 @@ "node": ">=10" } }, - "node_modules/ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=", - "dev": true - }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -5899,49 +5578,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/memdown": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", - "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", - "dev": true, - "dependencies": { - "abstract-leveldown": "~6.2.1", - "functional-red-black-tree": "~1.0.1", - "immediate": "~3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/memdown/node_modules/immediate": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", - "integrity": "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=", - "dev": true - }, - "node_modules/memdown/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/meow": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", @@ -6094,13 +5730,6 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/napi-macros": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", - "dev": true, - "optional": true - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -6113,18 +5742,6 @@ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true }, - "node_modules/node-gyp-build": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz", - "integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==", - "dev": true, - "optional": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -6466,12 +6083,6 @@ "node": ">= 6" } }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, "node_modules/psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", @@ -6525,15 +6136,6 @@ "node": ">=8" } }, - "node_modules/reachdown": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reachdown/-/reachdown-1.1.0.tgz", - "integrity": "sha512-6LsdRe4cZyOjw4NnvbhUd/rGG7WQ9HMopPr+kyL018Uci4kijtxcGR5kVb5Ln13k4PEE+fEFQbjfOvNw7cnXmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", @@ -6617,20 +6219,6 @@ "node": ">=8" } }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -6982,35 +6570,6 @@ "node": ">=8" } }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -7098,63 +6657,6 @@ "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", "dev": true }, - "node_modules/subleveldown": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/subleveldown/-/subleveldown-5.0.1.tgz", - "integrity": "sha512-cVqd/URpp7si1HWu5YqQ3vqQkjuolAwHypY1B4itPlS71/lsf6TQPZ2Y0ijT22EYVkvH5ove9JFJf4u7VGPuZw==", - "dev": true, - "dependencies": { - "abstract-leveldown": "^6.3.0", - "encoding-down": "^6.2.0", - "inherits": "^2.0.3", - "level-option-wrap": "^1.1.0", - "levelup": "^4.4.0", - "reachdown": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/subleveldown/node_modules/abstract-leveldown": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", - "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/subleveldown/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -7433,12 +6935,6 @@ "punycode": "^2.1.0" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, "node_modules/uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", @@ -7562,15 +7058,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -10160,31 +9647,6 @@ "eslint-visitor-keys": "^3.3.0" } }, - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - } - } - }, "acorn": { "version": "8.5.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", @@ -10294,15 +9756,6 @@ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -10397,12 +9850,6 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -10412,12 +9859,6 @@ "tweetnacl": "^0.14.3" } }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, "bowser": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", @@ -10473,12 +9914,6 @@ "node-int64": "^0.4.0" } }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true - }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -10702,22 +10137,6 @@ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true }, - "deferred-leveldown": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", - "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", - "dev": true, - "requires": { - "abstract-leveldown": "~6.2.1", - "inherits": "^2.0.3" - } - }, - "defined": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-0.0.0.tgz", - "integrity": "sha1-817qfXBekzuvE7LwOz+D2SFAOz4=", - "dev": true - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -10754,25 +10173,6 @@ "esutils": "^2.0.2" } }, - "dynalite": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/dynalite/-/dynalite-3.2.1.tgz", - "integrity": "sha512-PgpagYk1ecSzhjGuFMuFHEuWJ0BNddqTrG89ra+Jhs0zgjr/IPoNCmrAdBUumy2Ds2hx8V3aNuLKpPbaGcVwtQ==", - "dev": true, - "requires": { - "async": "^2.6.3", - "big.js": "^5.2.2", - "buffer-crc32": "^0.2.13", - "lazy": "^1.0.11", - "leveldown": "^5.2.1", - "levelup": "^4.4.0", - "lock": "^1.1.0", - "memdown": "^5.1.0", - "minimist": "^1.2.5", - "once": "^1.4.0", - "subleveldown": "^5.0.0" - } - }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -10801,18 +10201,6 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "encoding-down": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", - "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", - "dev": true, - "requires": { - "abstract-leveldown": "^6.2.1", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0" - } - }, "enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", @@ -10822,15 +10210,6 @@ "ansi-colors": "^4.1.1" } }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -11382,24 +10761,12 @@ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true - }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, - "immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", - "dev": true - }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -12147,108 +11514,12 @@ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true }, - "lazy": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/lazy/-/lazy-1.0.11.tgz", - "integrity": "sha1-2qBoIGKCVCwIgojpdcKXwa53tpA=", - "dev": true - }, "lcov-parse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", "dev": true }, - "level-codec": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", - "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", - "dev": true, - "requires": { - "buffer": "^5.6.0" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - } - } - }, - "level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", - "dev": true - }, - "level-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", - "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", - "dev": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", - "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.4.0", - "xtend": "^4.0.2" - } - }, - "level-option-wrap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/level-option-wrap/-/level-option-wrap-1.1.0.tgz", - "integrity": "sha1-rSDmjZ88IsiJdTHMaqevWWse0Sk=", - "dev": true, - "requires": { - "defined": "~0.0.0" - } - }, - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "requires": { - "xtend": "^4.0.2" - } - }, - "leveldown": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz", - "integrity": "sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==", - "dev": true, - "optional": true, - "requires": { - "abstract-leveldown": "~6.2.1", - "napi-macros": "~2.0.0", - "node-gyp-build": "~4.1.0" - } - }, - "levelup": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", - "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", - "dev": true, - "requires": { - "deferred-leveldown": "~5.3.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~4.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, "leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -12280,18 +11551,6 @@ "p-locate": "^4.1.0" } }, - "lock": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/lock/-/lock-1.1.0.tgz", - "integrity": "sha1-UxV0mdFlOxNspmRRBx/KYVcD+lU=", - "dev": true - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -12329,12 +11588,6 @@ "yallist": "^4.0.0" } }, - "ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=", - "dev": true - }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -12373,34 +11626,6 @@ "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true }, - "memdown": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", - "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", - "dev": true, - "requires": { - "abstract-leveldown": "~6.2.1", - "functional-red-black-tree": "~1.0.1", - "immediate": "~3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "immediate": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", - "integrity": "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=", - "dev": true - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, "meow": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", @@ -12519,13 +11744,6 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "napi-macros": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", - "dev": true, - "optional": true - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -12538,13 +11756,6 @@ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true }, - "node-gyp-build": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz", - "integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==", - "dev": true, - "optional": true - }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -12792,12 +12003,6 @@ "sisteransi": "^1.0.5" } }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", @@ -12828,12 +12033,6 @@ "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true }, - "reachdown": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reachdown/-/reachdown-1.1.0.tgz", - "integrity": "sha512-6LsdRe4cZyOjw4NnvbhUd/rGG7WQ9HMopPr+kyL018Uci4kijtxcGR5kVb5Ln13k4PEE+fEFQbjfOvNw7cnXmA==", - "dev": true - }, "react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", @@ -12903,17 +12102,6 @@ } } }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, "redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -13181,23 +12369,6 @@ } } }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, "string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -13261,45 +12432,6 @@ "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", "dev": true }, - "subleveldown": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/subleveldown/-/subleveldown-5.0.1.tgz", - "integrity": "sha512-cVqd/URpp7si1HWu5YqQ3vqQkjuolAwHypY1B4itPlS71/lsf6TQPZ2Y0ijT22EYVkvH5ove9JFJf4u7VGPuZw==", - "dev": true, - "requires": { - "abstract-leveldown": "^6.3.0", - "encoding-down": "^6.2.0", - "inherits": "^2.0.3", - "level-option-wrap": "^1.1.0", - "levelup": "^4.4.0", - "reachdown": "^1.1.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", - "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - } - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -13482,12 +12614,6 @@ "punycode": "^2.1.0" } }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, "uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", @@ -13583,12 +12709,6 @@ "signal-exit": "^3.0.7" } }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/package.json b/package.json index af7382e70..e486bf532 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,6 @@ "@aws-sdk/lib-dynamodb": "^3.287.0", "@aws-sdk/client-dynamodb": "^3.287.0", "coveralls": "^3.1.0", - "dynalite": "^3.2.1", "eslint": "^8.2.0", "jest": "^29.2.2", "prettier": "^2.2.1", diff --git a/src/__tests__/entity-creation.unit.test.ts b/src/__tests__/entity-creation.unit.test.ts index d644ed416..e5939e521 100644 --- a/src/__tests__/entity-creation.unit.test.ts +++ b/src/__tests__/entity-creation.unit.test.ts @@ -393,6 +393,7 @@ describe('Entity creation', () => { DocumentClient }) + // eslint-disable-next-line @typescript-eslint/no-unused-vars const TestEntity = new Entity({ name: 'TestEnt', attributes: { @@ -402,7 +403,7 @@ describe('Entity creation', () => { default: 'pkDef' }, test: { - format: (val: string, data: any) => { + format: (val: string) => { return val.toUpperCase() }, default: () => 'defaultVal' diff --git a/src/__tests__/entity.parse.unit.test.ts b/src/__tests__/entity.parse.unit.test.ts index acce5ceea..09709e2ca 100644 --- a/src/__tests__/entity.parse.unit.test.ts +++ b/src/__tests__/entity.parse.unit.test.ts @@ -1,4 +1,4 @@ -import { DocumentClient, DocumentClientWithWrappedNumbers } from './bootstrap.test' +import { DocumentClientWithWrappedNumbers } from './bootstrap.test' import Table from '../classes/Table' import Entity from '../classes/Entity' @@ -257,4 +257,4 @@ describe('parse', () => { ] }) }) -}) // end parse +}) diff --git a/src/__tests__/entity.update.unit.test.ts b/src/__tests__/entity.update.unit.test.ts index 660ba0a17..cf962080f 100644 --- a/src/__tests__/entity.update.unit.test.ts +++ b/src/__tests__/entity.update.unit.test.ts @@ -4,6 +4,7 @@ import { } from '../constants' import { Table, Entity } from '../index' import { DocumentClient } from './bootstrap.test' +import assert from 'assert' const TestTable = new Table({ name: 'test-table', @@ -124,13 +125,15 @@ describe('update', () => { '#test_number_coerce': 'test_number_coerce', '#_et': '_et' }) + + assert.ok(ExpressionAttributeValues !== undefined, 'ExpressionAttributeValues is undefined') expect(ExpressionAttributeValues).toHaveProperty(':_ct') expect(ExpressionAttributeValues).toHaveProperty(':_md') expect(ExpressionAttributeValues).toHaveProperty(':test_string') expect(ExpressionAttributeValues).toHaveProperty(':test_number_coerce') expect(ExpressionAttributeValues).toHaveProperty(':test_boolean_default') expect(ExpressionAttributeValues).toHaveProperty(':_et') - expect(ExpressionAttributeValues![':_et']).toBe('TestEntity') + expect(ExpressionAttributeValues?.[':_et']).toBe('TestEntity') expect(Key).toEqual({ pk: 'test-pk', sk: 'test-sk' }) expect(TableName).toBe('test-table') }) @@ -167,15 +170,17 @@ describe('update', () => { '#test_number_coerce': 'test_number_coerce', '#_et': '_et' }) + + assert.ok(ExpressionAttributeValues !== undefined, 'ExpressionAttributeValues is undefined') expect(ExpressionAttributeValues).toHaveProperty(':_md') expect(ExpressionAttributeValues).toHaveProperty(':_ct') expect(ExpressionAttributeValues).not.toHaveProperty(':pk') expect(ExpressionAttributeValues).not.toHaveProperty(':sk') - expect(ExpressionAttributeValues![':test_string']).toBe('test string') + expect(ExpressionAttributeValues?.[':test_string']).toBe('test string') expect(ExpressionAttributeValues).toHaveProperty(':test_number_coerce') expect(ExpressionAttributeValues).toHaveProperty(':test_boolean_default') expect(ExpressionAttributeValues).toHaveProperty(':_et') - expect(ExpressionAttributeValues![':_et']).toBe('TestEntity') + expect(ExpressionAttributeValues?.[':_et']).toBe('TestEntity') expect(Key).toEqual({ pk: 'test-pk', sk: 'test-sk' }) expect(TableName).toBe('test-table') }) @@ -191,8 +196,8 @@ describe('update', () => { test_boolean_default: true }) - expect(ExpressionAttributeNames!['#test_boolean_default']).toBe('test_boolean_default') - expect(ExpressionAttributeValues![':test_boolean_default']).toBe(true) + expect(ExpressionAttributeNames?.['#test_boolean_default']).toBe('test_boolean_default') + expect(ExpressionAttributeValues?.[':test_boolean_default']).toBe(true) expect(UpdateExpression).toBe( 'SET #test_string = if_not_exists(#test_string,:test_string), #test_number_coerce = if_not_exists(#test_number_coerce,:test_number_coerce), #test_boolean_default = :test_boolean_default, #_ct = if_not_exists(#_ct,:_ct), #_md = :_md, #_et = if_not_exists(#_et,:_et)' @@ -288,14 +293,14 @@ describe('update', () => { 'SET #test_string = :test_string, #test_number_coerce = :test_number_coerce, #test_boolean_default = :test_boolean_default, #_ct = if_not_exists(#_ct,:_ct), #_md = :_md, #_et = if_not_exists(#_et,:_et), #test_number = :test_number, #test_boolean = :test_boolean, #test_list = :test_list, #test_map = :test_map, #test_binary = :test_binary' ) - expect(ExpressionAttributeValues![':test_string']).toBe('test') - expect(ExpressionAttributeValues![':test_number']).toBe(1) - expect(ExpressionAttributeValues![':test_number_coerce']).toBe(0) - expect(ExpressionAttributeValues![':test_boolean']).toBe(false) - expect(ExpressionAttributeValues![':test_boolean_default']).toBe(false) - expect(ExpressionAttributeValues![':test_list']).toEqual(['a', 'b', 'c']) - expect(ExpressionAttributeValues![':test_map']).toEqual({ a: 1, b: 2 }) - expect(ExpressionAttributeValues![':test_binary']).toEqual(Buffer.from('test')) + expect(ExpressionAttributeValues?.[':test_string']).toBe('test') + expect(ExpressionAttributeValues?.[':test_number']).toBe(1) + expect(ExpressionAttributeValues?.[':test_number_coerce']).toBe(0) + expect(ExpressionAttributeValues?.[':test_boolean']).toBe(false) + expect(ExpressionAttributeValues?.[':test_boolean_default']).toBe(false) + expect(ExpressionAttributeValues?.[':test_list']).toEqual(['a', 'b', 'c']) + expect(ExpressionAttributeValues?.[':test_map']).toEqual({ a: 1, b: 2 }) + expect(ExpressionAttributeValues?.[':test_binary']).toEqual(Buffer.from('test')) expect(Key).toEqual({ pk: 'test-pk', sk: 'test-sk' }) expect(TableName).toBe('test-table') }) @@ -314,10 +319,11 @@ describe('update', () => { test_list_coerce: 'a, b, c' }) - expect(ExpressionAttributeValues![':test_string_coerce']).toBe('1') - expect(ExpressionAttributeValues![':test_number_coerce']).toBe(1) - expect(ExpressionAttributeValues![':test_boolean_coerce']).toBe(true) - expect(ExpressionAttributeValues![':test_list_coerce']).toEqual(['a', 'b', 'c']) + assert.ok(ExpressionAttributeValues !== undefined, 'ExpressionAttributeValues is undefined') + expect(ExpressionAttributeValues?.[':test_string_coerce']).toBe('1') + expect(ExpressionAttributeValues?.[':test_number_coerce']).toBe(1) + expect(ExpressionAttributeValues?.[':test_boolean_coerce']).toBe(true) + expect(ExpressionAttributeValues?.[':test_list_coerce']).toEqual(['a', 'b', 'c']) expect(Key).toEqual({ pk: 'test-pk', sk: 'test-sk' }) expect(TableName).toBe('test-table') }) @@ -329,7 +335,7 @@ describe('update', () => { // @ts-expect-error 💥 TODO: Support coerce keyword test_boolean_coerce: 'false' }) - expect(ExpressionAttributeValues![':test_boolean_coerce']).toBe(false) + expect(ExpressionAttributeValues?.[':test_boolean_coerce']).toBe(false) }) it('creates a set', () => { @@ -344,16 +350,16 @@ describe('update', () => { test_binary_set_type: [Buffer.from('1'), Buffer.from('2'), Buffer.from('3')] }) - expect(ExpressionAttributeValues![':test_string_set']).toEqual(new Set(['1', '2', '3'])) - expect(ExpressionAttributeValues![':test_number_set']).toEqual(new Set([1, 2, 3])) - expect(ExpressionAttributeValues![':test_binary_set']).toEqual(new Set([ + expect(ExpressionAttributeValues?.[':test_string_set']).toEqual(new Set(['1', '2', '3'])) + expect(ExpressionAttributeValues?.[':test_number_set']).toEqual(new Set([1, 2, 3])) + expect(ExpressionAttributeValues?.[':test_binary_set']).toEqual(new Set([ Buffer.from('1'), Buffer.from('2'), Buffer.from('3') ])) - expect(ExpressionAttributeValues![':test_string_set_type']).toEqual(new Set(['1', '2', '3'])) - expect(ExpressionAttributeValues![':test_number_set_type']).toEqual(new Set([1, 2, 3])) - expect(ExpressionAttributeValues![':test_binary_set_type']).toEqual(new Set([ + expect(ExpressionAttributeValues?.[':test_string_set_type']).toEqual(new Set(['1', '2', '3'])) + expect(ExpressionAttributeValues?.[':test_number_set_type']).toEqual(new Set([1, 2, 3])) + expect(ExpressionAttributeValues?.[':test_binary_set_type']).toEqual(new Set([ Buffer.from('1'), Buffer.from('2'), Buffer.from('3') @@ -388,14 +394,16 @@ describe('update', () => { '#test_number_set_type': 'test_number_set_type', '#test_number_coerce': 'test_number_coerce' }) + + assert.ok(ExpressionAttributeValues !== undefined, 'ExpressionAttributeValues is undefined') expect(ExpressionAttributeValues).toHaveProperty(':_md') expect(ExpressionAttributeValues).toHaveProperty(':_ct') expect(ExpressionAttributeValues).not.toHaveProperty(':pk') expect(ExpressionAttributeValues).not.toHaveProperty(':sk') expect(ExpressionAttributeValues).toHaveProperty(':_et') - expect(ExpressionAttributeValues![':_et']).toBe('TestEntity') - expect(ExpressionAttributeValues![':test_number']).toBe(10) - expect(Array.from(ExpressionAttributeValues![':test_number_set_type'])).toEqual([1, 2, 3]) + expect(ExpressionAttributeValues?.[':_et']).toBe('TestEntity') + expect(ExpressionAttributeValues?.[':test_number']).toBe(10) + expect(Array.from(ExpressionAttributeValues?.[':test_number_set_type'])).toEqual([1, 2, 3]) expect(Key).toEqual({ pk: 'test-pk', sk: 'test-sk' }) expect(TableName).toBe('test-table') }) @@ -446,14 +454,16 @@ describe('update', () => { '#test_number_set_type': 'test_number_set_type', '#test_number_coerce': 'test_number_coerce' }) + + assert.ok(ExpressionAttributeValues !== undefined, 'ExpressionAttributeValues is undefined') expect(ExpressionAttributeValues).toHaveProperty(':_md') expect(ExpressionAttributeValues).toHaveProperty(':_ct') expect(ExpressionAttributeValues).not.toHaveProperty(':pk') expect(ExpressionAttributeValues).not.toHaveProperty(':sk') expect(ExpressionAttributeValues).toHaveProperty(':_et') - expect(ExpressionAttributeValues![':_et']).toBe('TestEntity') - expect(Array.from(ExpressionAttributeValues![':test_string_set_type'])).toEqual(['1', '2', '3']) - expect(Array.from(ExpressionAttributeValues![':test_number_set_type'])).toEqual([1, 2, 3]) + expect(ExpressionAttributeValues?.[':_et']).toBe('TestEntity') + expect(Array.from(ExpressionAttributeValues?.[':test_string_set_type'])).toEqual(['1', '2', '3']) + expect(Array.from(ExpressionAttributeValues?.[':test_number_set_type'])).toEqual([1, 2, 3]) expect(Key).toEqual({ pk: 'test-pk', sk: 'test-sk' }) expect(TableName).toBe('test-table') }) @@ -473,6 +483,8 @@ describe('update', () => { expect(UpdateExpression).toBe( 'SET #test_string = if_not_exists(#test_string,:test_string), #test_number_coerce = if_not_exists(#test_number_coerce,:test_number_coerce), #test_boolean_default = if_not_exists(#test_boolean_default,:test_boolean_default), #_ct = if_not_exists(#_ct,:_ct), #_md = :_md, #_et = if_not_exists(#_et,:_et) REMOVE #test_list[2], #test_list[3], #test_list[8]' ) + + assert.ok(ExpressionAttributeValues !== undefined, 'ExpressionAttributeValues is undefined') expect(ExpressionAttributeNames).toEqual({ '#test_string': 'test_string', '#_et': '_et', @@ -487,7 +499,7 @@ describe('update', () => { expect(ExpressionAttributeValues).not.toHaveProperty(':pk') expect(ExpressionAttributeValues).not.toHaveProperty(':sk') expect(ExpressionAttributeValues).toHaveProperty(':_et') - expect(ExpressionAttributeValues![':_et']).toBe('TestEntity') + expect(ExpressionAttributeValues?.[':_et']).toBe('TestEntity') expect(Key).toEqual({ pk: 'test-pk', sk: 'test-sk' }) expect(TableName).toBe('test-table') }) @@ -508,6 +520,8 @@ describe('update', () => { expect(UpdateExpression).toBe( 'SET #test_string = if_not_exists(#test_string,:test_string), #test_number_coerce = if_not_exists(#test_number_coerce,:test_number_coerce), #test_boolean_default = if_not_exists(#test_boolean_default,:test_boolean_default), #_ct = if_not_exists(#_ct,:_ct), #_md = :_md, #_et = if_not_exists(#_et,:_et), #test_list[2] = :test_list_2, #test_list[5] = :test_list_5' ) + + assert.ok(ExpressionAttributeValues !== undefined, 'ExpressionAttributeValues is undefined') expect(ExpressionAttributeNames).toEqual({ '#test_string': 'test_string', '#_et': '_et', @@ -522,9 +536,9 @@ describe('update', () => { expect(ExpressionAttributeValues).not.toHaveProperty(':pk') expect(ExpressionAttributeValues).not.toHaveProperty(':sk') expect(ExpressionAttributeValues).toHaveProperty(':_et') - expect(ExpressionAttributeValues![':_et']).toBe('TestEntity') - expect(ExpressionAttributeValues![':test_list_2']).toBe('Test2') - expect(ExpressionAttributeValues![':test_list_5']).toBe('Test5') + expect(ExpressionAttributeValues?.[':_et']).toBe('TestEntity') + expect(ExpressionAttributeValues?.[':test_list_2']).toBe('Test2') + expect(ExpressionAttributeValues?.[':test_list_5']).toBe('Test5') expect(Key).toEqual({ pk: 'test-pk', sk: 'test-sk' }) expect(TableName).toBe('test-table') }) @@ -545,6 +559,8 @@ describe('update', () => { expect(UpdateExpression).toBe( `SET #test_string = if_not_exists(#test_string,:test_string), #test_number_coerce = if_not_exists(#test_number_coerce,:test_number_coerce), #test_boolean_default = if_not_exists(#test_boolean_default,:test_boolean_default), #_ct = if_not_exists(#_ct,:_ct), #_md = :_md, #_et = if_not_exists(#_et,:_et), #test_list = list_append(if_not_exists(#test_list, :${ATTRIBUTE_VALUES_LIST_DEFAULT_KEY}) ,:test_list), #test_list_coerce = list_append(:test_list_coerce, if_not_exists(#test_list_coerce, :${ATTRIBUTE_VALUES_LIST_DEFAULT_KEY}))` ) + + assert.ok(ExpressionAttributeValues !== undefined, 'ExpressionAttributeValues is undefined') expect(ExpressionAttributeNames).toEqual({ '#test_string': 'test_string', '#_et': '_et', @@ -560,9 +576,9 @@ describe('update', () => { expect(ExpressionAttributeValues).not.toHaveProperty(':pk') expect(ExpressionAttributeValues).not.toHaveProperty(':sk') expect(ExpressionAttributeValues).toHaveProperty(':_et') - expect(ExpressionAttributeValues![':_et']).toBe('TestEntity') - expect(ExpressionAttributeValues![':test_list']).toEqual([1, 2, 3]) - expect(ExpressionAttributeValues![':test_list_coerce']).toEqual([1, 2, 3]) + expect(ExpressionAttributeValues?.[':_et']).toBe('TestEntity') + expect(ExpressionAttributeValues?.[':test_list']).toEqual([1, 2, 3]) + expect(ExpressionAttributeValues?.[':test_list_coerce']).toEqual([1, 2, 3]) expect(Key).toEqual({ pk: 'test-pk', sk: 'test-sk' }) expect(TableName).toBe('test-table') }) @@ -578,7 +594,8 @@ describe('update', () => { expect(TableName).toBe('test-table') expect(Key).toEqual({ pk: 'test-pk', sk: 'test-sk' }) - expect(ExpressionAttributeValues![`:${ATTRIBUTE_VALUES_LIST_DEFAULT_KEY}`]).toBe( + assert.ok(ExpressionAttributeValues !== undefined, 'ExpressionAttributeValues is undefined') + expect(ExpressionAttributeValues?.[`:${ATTRIBUTE_VALUES_LIST_DEFAULT_KEY}`]).toBe( ATTRIBUTE_VALUES_LIST_DEFAULT_VALUE ) }) @@ -656,6 +673,8 @@ describe('update', () => { expect(UpdateExpression).toBe( 'SET #test_string = if_not_exists(#test_string,:test_string), #test_number_coerce = if_not_exists(#test_number_coerce,:test_number_coerce), #test_boolean_default = if_not_exists(#test_boolean_default,:test_boolean_default), #_ct = if_not_exists(#_ct,:_ct), #_md = :_md, #_et = if_not_exists(#_et,:_et), #test_map.#test_map_prop1 = :test_map_prop1, #test_map.#test_map_prop2[1] = :test_map_prop2_1, #test_map.#test_map_prop2[4] = :test_map_prop2_4, #test_map.#test_map_prop3.#test_map_prop3_prop4 = :test_map_prop3_prop4, #test_map.#test_map_prop5 = :test_map_prop5' ) + + assert.ok(ExpressionAttributeValues !== undefined, 'ExpressionAttributeValues is undefined') expect(ExpressionAttributeNames).toEqual({ '#_et': '_et', '#_ct': '_ct', @@ -671,13 +690,13 @@ describe('update', () => { '#test_number_coerce': 'test_number_coerce' }) expect(ExpressionAttributeValues).toHaveProperty(':_et') - expect(ExpressionAttributeValues![':_et']).toBe('TestEntity') - expect(ExpressionAttributeValues![':test_string']).toBe('default string') - expect(ExpressionAttributeValues![':test_map_prop1']).toBe('some value') - expect(ExpressionAttributeValues![':test_map_prop2_1']).toBe('list value') - expect(ExpressionAttributeValues![':test_map_prop2_4']).toBe('list value4') - expect(ExpressionAttributeValues![':test_map_prop3_prop4']).toBe('nested') - expect(ExpressionAttributeValues![':test_map_prop5']).toEqual([1, 2, 3]) + expect(ExpressionAttributeValues?.[':_et']).toBe('TestEntity') + expect(ExpressionAttributeValues?.[':test_string']).toBe('default string') + expect(ExpressionAttributeValues?.[':test_map_prop1']).toBe('some value') + expect(ExpressionAttributeValues?.[':test_map_prop2_1']).toBe('list value') + expect(ExpressionAttributeValues?.[':test_map_prop2_4']).toBe('list value4') + expect(ExpressionAttributeValues?.[':test_map_prop3_prop4']).toBe('nested') + expect(ExpressionAttributeValues?.[':test_map_prop5']).toEqual([1, 2, 3]) expect(Key).toEqual({ pk: 'test-pk', sk: 'test-sk' }) expect(TableName).toBe('test-table') }) @@ -714,6 +733,7 @@ describe('update', () => { `SET #test_string = if_not_exists(#test_string,:test_string), #test_number_coerce = if_not_exists(#test_number_coerce,:test_number_coerce), #test_boolean_default = if_not_exists(#test_boolean_default,:test_boolean_default), #_ct = if_not_exists(#_ct,:_ct), #_md = :_md, #_et = if_not_exists(#_et,:_et), #test_map.#test_map_prop1 = list_append(if_not_exists(#test_map.#test_map_prop1, :${ATTRIBUTE_VALUES_LIST_DEFAULT_KEY}), :test_map_prop1), #test_map.#test_map_prop2 = list_append(:test_map_prop2, if_not_exists(#test_map.#test_map_prop2, :${ATTRIBUTE_VALUES_LIST_DEFAULT_KEY})), #test_map.#test_map_prop3.#test_map_prop3_prop4 = list_append(if_not_exists(#test_map.#test_map_prop3.#test_map_prop3_prop4, :${ATTRIBUTE_VALUES_LIST_DEFAULT_KEY}), :test_map_prop3_prop4)` ) + assert.ok(ExpressionAttributeValues !== undefined, 'ExpressionAttributeValues is undefined') expect(ExpressionAttributeNames).toEqual( expect.objectContaining({ '#test_map': 'test_map', @@ -762,11 +782,13 @@ describe('update', () => { '#test_map_prop2': 'prop2', '#test_number_coerce': 'test_number_coerce' }) + + assert.ok(ExpressionAttributeValues !== undefined, 'ExpressionAttributeValues is undefined') expect(ExpressionAttributeValues).toHaveProperty(':_et') - expect(ExpressionAttributeValues![':_et']).toBe('TestEntity') - expect(ExpressionAttributeValues![':test_string']).toBe('default string') - expect(ExpressionAttributeValues!).not.toHaveProperty(':test_map_prop1') - expect(ExpressionAttributeValues!).not.toHaveProperty(':test_map_prop2') + expect(ExpressionAttributeValues?.[':_et']).toBe('TestEntity') + expect(ExpressionAttributeValues?.[':test_string']).toBe('default string') + expect(ExpressionAttributeValues).not.toHaveProperty(':test_map_prop1') + expect(ExpressionAttributeValues).not.toHaveProperty(':test_map_prop2') expect(UpdateExpression).toBe( 'SET #test_string = if_not_exists(#test_string,:test_string), #test_number_coerce = if_not_exists(#test_number_coerce,:test_number_coerce), #test_boolean_default = if_not_exists(#test_boolean_default,:test_boolean_default), #_ct = if_not_exists(#_ct,:_ct), #_md = :_md, #_et = if_not_exists(#_et,:_et) REMOVE #test_map.#test_map_prop1, #test_map.#test_map_prop2' @@ -803,10 +825,10 @@ describe('update', () => { '#test_number_coerce': 'test_number_coerce' }) expect(ExpressionAttributeValues).toHaveProperty(':_et') - expect(ExpressionAttributeValues![':_et']).toBe('TestEntity') - expect(ExpressionAttributeValues![':test_string']).toBe('default string') - expect(ExpressionAttributeValues![':test_number']).toBe(10) - expect(ExpressionAttributeValues![':test_map']).toEqual({ a: 1, b: 2 }) + expect(ExpressionAttributeValues?.[':_et']).toBe('TestEntity') + expect(ExpressionAttributeValues?.[':test_string']).toBe('default string') + expect(ExpressionAttributeValues?.[':test_number']).toBe(10) + expect(ExpressionAttributeValues?.[':test_map']).toEqual({ a: 1, b: 2 }) expect(Key).toEqual({ pk: 'test@test.com', sk: 'test-sk' }) expect(TableName).toBe('test-table') }) @@ -817,7 +839,7 @@ describe('update', () => { test2: 'test', test3: 0 }) - expect(ExpressionAttributeValues![':test3']).toBe(0) + expect(ExpressionAttributeValues?.[':test3']).toBe(0) }) it('allows using list operations on a required list field', ()=> { @@ -828,7 +850,7 @@ describe('update', () => { $prepend: [1, 2, 3] } }) - expect(ExpressionAttributeValues![':test_list_required']).toEqual([1, 2, 3]) + expect(ExpressionAttributeValues?.[':test_list_required']).toEqual([1, 2, 3]) }) it('removes unused expression values/names when using $set for a map field with an empty object', () => { @@ -1175,4 +1197,4 @@ describe('update', () => { ':test_string': 'default string' }) }) -}) // end describe +}) diff --git a/src/__tests__/misc-tests.unit.test.ts b/src/__tests__/misc-tests.unit.test.ts index 2322cb3a7..b6426a7bf 100644 --- a/src/__tests__/misc-tests.unit.test.ts +++ b/src/__tests__/misc-tests.unit.test.ts @@ -930,9 +930,9 @@ describe('Misc Tests (development only)', () => { // ProjectionExpression = projections // _EntityProjections = entities // _TableProjections = tableAttrs -// } // end if names +// } -// } // end if projections +// } // // Error if extra arguments are provided along with keys // if (keys !== undefined && Object.keys(args).length > 0) diff --git a/src/__tests__/parse.unit.test.ts b/src/__tests__/parse.unit.test.ts index 3feea06cb..54204a770 100644 --- a/src/__tests__/parse.unit.test.ts +++ b/src/__tests__/parse.unit.test.ts @@ -145,4 +145,4 @@ describe('parse', () => { // test_composite3: 'foo' // }) // }) -}) // end parse +}) diff --git a/src/__tests__/projectionBuilder.unit.test.ts b/src/__tests__/projectionBuilder.unit.test.ts index 9dac5d2e6..51338279a 100644 --- a/src/__tests__/projectionBuilder.unit.test.ts +++ b/src/__tests__/projectionBuilder.unit.test.ts @@ -1,17 +1,15 @@ import projectionBuilder from '../lib/projectionBuilder' -// Require Table and Entity classes import Table from '../classes/Table' import Entity from '../classes/Entity' -// Create basic table const DefaultTable = new Table({ name: 'test-table', partitionKey: 'pk', sortKey: 'sk' }) -// Create basic entity +// eslint-disable-next-line @typescript-eslint/no-unused-vars const User = new Entity({ name: 'User', attributes: { @@ -26,6 +24,7 @@ const User = new Entity({ table: DefaultTable } as const) +// eslint-disable-next-line @typescript-eslint/no-unused-vars const Pet = new Entity({ name: 'Pet', attributes: { diff --git a/src/__tests__/put.int.test.ts b/src/__tests__/put.int.test.ts deleted file mode 100644 index 126d04201..000000000 --- a/src/__tests__/put.int.test.ts +++ /dev/null @@ -1,71 +0,0 @@ -// const createTableParams = require('./create-table.json') - -// // Include dynalite and config server (use in memory) -// const dynalite = require('dynalite') -// const dynaliteServer = dynalite({ -// createTableMs: 0, -// updateTableMs: 0, -// deleteTableMs: 0 -// }) - -// const AWS = require('aws-sdk') - -// // Create DynamoDB connection to dynalite -// const DynamoDB = new AWS.DynamoDB({ -// endpoint: 'http://localhost:4567', -// region: 'us-east-1', -// credentials: new AWS.Credentials({ accessKeyId: 'test', secretAccessKey: 'test' }) -// }) - -// // Create our document client -// const DocumentClient = new AWS.DynamoDB.DocumentClient({ -// endpoint: 'http://localhost:4567', -// region: 'us-east-1', -// credentials: new AWS.Credentials({ accessKeyId: 'test', secretAccessKey: 'test' }) -// }) - -// // Start up Dynalite on port 4567 -// beforeAll(async () => { -// // Listen on port 4567 -// await new Promise((resolve,reject) => { -// dynaliteServer.listen(4567, function(err) { -// if (err) reject(err) -// console.log('Dynalite started on port 4567') -// resolve(true) -// }) -// }) - -// // Create test tables -// await DynamoDB.createTable(Object.assign(createTableParams,{ TableName: 'test-table'})).promise() -// // let data = await DynamoDB.listTables().promise() -// // console.log('TABLES:',data); -// }) - -// afterAll(async () => { -// await DynamoDB.deleteTable({ TableName: 'test-table'}).promise() -// // let data = await DynamoDB.listTables().promise() -// // console.log('TABLES:',data); -// dynaliteServer.close() -// }) - -// describe('put',()=>{ - -// it.skip('creates basic item',async () => { - -// // Generate params -// let params = TestModel.put({ pk: 'test-pk', sk: 'test-sk' }) - -// // Put to DynamoDB -// await DocumentClient.put(params).promise() - -// // Grab item from DynamoDB -// let getParams = TestModel.get({ pk: 'test-pk', sk: 'test-sk' }) -// let get = await DocumentClient.get(getParams).promise() -// // console.log(get); - -// // Simple test -// expect(get.Item.pk).toBe('test-pk') - -// }) - -// }) diff --git a/src/__tests__/table-creation.unit.test.ts b/src/__tests__/table-creation.unit.test.ts index d4dd1b0f0..b5ab06ed6 100644 --- a/src/__tests__/table-creation.unit.test.ts +++ b/src/__tests__/table-creation.unit.test.ts @@ -8,17 +8,20 @@ describe('Table creation', () => { partitionKey: 'pk' }) - expect(TestTable instanceof Table).toBe(true) - expect(TestTable.name).toBe('test-table') - expect(TestTable.Table.partitionKey).toBe('pk') - expect(TestTable.Table.sortKey).toBeNull() - expect(TestTable.Table.entityField).toBe('_et') - expect(TestTable.Table.indexes).toEqual({}) - expect(TestTable.Table.attributes).toEqual({ _et: { type: 'string', mappings: {} } }) - expect(TestTable.autoExecute).toBe(true) - expect(TestTable.autoParse).toBe(true) - expect(TestTable.entities).toEqual([]) - }) // end table + expect(TestTable).toEqual(expect.objectContaining({ + name: 'test-table', + Table: expect.objectContaining({ + partitionKey: 'pk', + sortKey: null, + entityField: '_et', + indexes: {}, + attributes: { _et: { type: 'string', mappings: {} } } + }), + autoExecute: true, + autoParse: true, + entities: [] + })) + }) it('creates table w/ options', async () => { const TestTable = new Table({ @@ -30,17 +33,20 @@ describe('Table creation', () => { autoParse: false }) - expect(TestTable instanceof Table).toBe(true) - expect(TestTable.name).toBe('test-table') - expect(TestTable.Table.partitionKey).toBe('pk') - expect(TestTable.Table.sortKey).toBe('sk') - expect(TestTable.Table.entityField).toBe('entity') - expect(TestTable.Table.indexes).toEqual({}) - expect(TestTable.Table.attributes).toEqual({ entity: { type: 'string', mappings: {} } }) - expect(TestTable.autoExecute).toBe(false) - expect(TestTable.autoParse).toBe(false) - expect(TestTable.entities).toEqual([]) - }) // end table w/ options + expect(TestTable).toEqual(expect.objectContaining({ + name: 'test-table', + Table: expect.objectContaining({ + partitionKey: 'pk', + sortKey: 'sk', + entityField: 'entity', + indexes: {}, + attributes: { entity: { type: 'string', mappings: {} } } + }), + autoExecute: false, + autoParse: false, + entities: [] + })) + }) it('creates table w/ attributes', async () => { const TestTable = new Table({ @@ -59,65 +65,62 @@ describe('Table creation', () => { } }) - expect(TestTable instanceof Table).toBe(true) - expect(TestTable.name).toBe('test-table') - expect(TestTable.Table.partitionKey).toBe('pk') - expect(TestTable.Table.sortKey).toBeNull() - expect(TestTable.Table.entityField).toBe('_et') - expect(TestTable.Table.indexes).toEqual({}) - expect(TestTable.autoExecute).toBe(true) - expect(TestTable.autoParse).toBe(true) - expect(TestTable.entities).toEqual([]) - - // Check attribute parsing - expect(TestTable.Table.attributes).toEqual({ - stringAttr: { type: 'string', mappings: {} }, - numberAttr: { type: 'number', mappings: {} }, - binaryAttr: { type: 'binary', mappings: {} }, - booleanAttr: { type: 'boolean', mappings: {} }, - listAttr: { type: 'list', mappings: {} }, - mapAttr: { type: 'map', mappings: {} }, - stringSetAttr: { type: 'set', mappings: {} }, - numberSetAttr: { type: 'set', setType: 'number', mappings: {} }, - binarySetAttr: { type: 'set', setType: 'binary', mappings: {} }, - _et: { type: 'string', mappings: {} } - }) - }) // end table w/ attributes + expect(TestTable).toEqual(expect.objectContaining({ + name: 'test-table', + Table: expect.objectContaining({ + partitionKey: 'pk', + sortKey: null, + entityField: '_et', + indexes: {}, + attributes: { + stringAttr: { type: 'string', mappings: {} }, + numberAttr: { type: 'number', mappings: {} }, + binaryAttr: { type: 'binary', mappings: {} }, + booleanAttr: { type: 'boolean', mappings: {} }, + listAttr: { type: 'list', mappings: {} }, + mapAttr: { type: 'map', mappings: {} }, + stringSetAttr: { type: 'set', mappings: {} }, + numberSetAttr: { type: 'set', setType: 'number', mappings: {} }, + binarySetAttr: { type: 'set', setType: 'binary', mappings: {} }, + _et: { type: 'string', mappings: {} } + } + }) + })) + }) it('creates table w/ indexes', async () => { const TestTable = new Table({ name: 'test-table', partitionKey: 'pk', indexes: { - // GSI w/ pk and sk GSI1: { partitionKey: 'GSI1pk', sortKey: 'GSI1sk' }, - // GSI w/ only pk GSI2: { partitionKey: 'GSI2pk' }, - // LSI w/ reused pk LSI1: { partitionKey: 'pk', sortKey: 'LSI1sk' }, - // LSI w/ only sk LSI2: { sortKey: 'LSI2sk' } } }) - expect(TestTable instanceof Table).toBe(true) - expect(TestTable.name).toBe('test-table') - expect(TestTable.Table.partitionKey).toBe('pk') - expect(TestTable.Table.sortKey).toBeNull() - expect(TestTable.Table.entityField).toBe('_et') - expect(TestTable.Table.attributes).toEqual({ _et: { type: 'string', mappings: {} } }) - expect(TestTable.autoExecute).toBe(true) - expect(TestTable.autoParse).toBe(true) - expect(TestTable.entities).toEqual([]) - - // Verify index parsing - expect(TestTable.Table.indexes).toEqual({ - GSI1: { partitionKey: 'GSI1pk', sortKey: 'GSI1sk', type: 'GSI' }, - GSI2: { partitionKey: 'GSI2pk', type: 'GSI' }, - LSI1: { sortKey: 'LSI1sk', type: 'LSI' }, - LSI2: { sortKey: 'LSI2sk', type: 'LSI' } - }) - }) // end table w/ indexes + expect(TestTable).toEqual(expect.objectContaining({ + name: 'test-table', + Table: expect.objectContaining({ + partitionKey: 'pk', + sortKey: null, + entityField: '_et', + indexes: { + GSI1: { partitionKey: 'GSI1pk', sortKey: 'GSI1sk', type: 'GSI' }, + GSI2: { partitionKey: 'GSI2pk', type: 'GSI' }, + LSI1: { sortKey: 'LSI1sk', type: 'LSI' }, + LSI2: { sortKey: 'LSI2sk', type: 'LSI' } + }, + attributes: { + _et: { type: 'string', mappings: {} } + }, + }), + autoExecute: true, + autoParse: true, + entities: [], + })) + }) it('creates table w/ DocumentClient', async () => { const TestTable = new Table({ @@ -126,18 +129,21 @@ describe('Table creation', () => { DocumentClient }) - expect(TestTable instanceof Table).toBe(true) - expect(TestTable.DocumentClient!.constructor.name).toBe('DynamoDBDocumentClient') - expect(TestTable.name).toBe('test-table') - expect(TestTable.Table.partitionKey).toBe('pk') - expect(TestTable.Table.sortKey).toBeNull() - expect(TestTable.Table.entityField).toBe('_et') - expect(TestTable.Table.indexes).toEqual({}) - expect(TestTable.Table.attributes).toEqual({ _et: { type: 'string', mappings: {} } }) - expect(TestTable.autoExecute).toBe(true) - expect(TestTable.autoParse).toBe(true) - expect(TestTable.entities).toEqual([]) - }) // end create table w/ DocumentClient + expect(TestTable.DocumentClient.constructor.name).toBe('DynamoDBDocumentClient') + expect(TestTable).toEqual(expect.objectContaining({ + name: 'test-table', + Table: expect.objectContaining({ + partitionKey: 'pk', + sortKey: null, + entityField: '_et', + indexes: {}, + attributes: { _et: { type: 'string', mappings: {} } }, + }), + autoExecute: true, + autoParse: true, + entities: [], + })) + }) it('creates table, then add DocumentClient', async () => { const TestTable = new Table({ @@ -145,19 +151,21 @@ describe('Table creation', () => { partitionKey: 'pk' }) - // Add the DocumentClient TestTable.DocumentClient = DocumentClient - expect(TestTable instanceof Table).toBe(true) expect(TestTable.DocumentClient.constructor.name).toBe('DynamoDBDocumentClient') - expect(TestTable.name).toBe('test-table') - expect(TestTable.Table.partitionKey).toBe('pk') - expect(TestTable.Table.sortKey).toBeNull() - expect(TestTable.Table.entityField).toBe('_et') - expect(TestTable.Table.indexes).toEqual({}) - expect(TestTable.Table.attributes).toEqual({ _et: { type: 'string', mappings: {} } }) - expect(TestTable.autoExecute).toBe(true) - expect(TestTable.autoParse).toBe(true) - expect(TestTable.entities).toEqual([]) - }) // end create table w/ DocumentClient + expect(TestTable).toEqual(expect.objectContaining({ + name: 'test-table', + Table: expect.objectContaining({ + partitionKey: 'pk', + sortKey: null, + entityField: '_et', + indexes: {}, + attributes: { _et: { type: 'string', mappings: {} } }, + }), + entities: [], + autoExecute: true, + autoParse: true, + })) + }) }) diff --git a/src/__tests__/table.batchWrite.unit.test.ts b/src/__tests__/table.batchWrite.unit.test.ts index 777018d37..a76df783b 100644 --- a/src/__tests__/table.batchWrite.unit.test.ts +++ b/src/__tests__/table.batchWrite.unit.test.ts @@ -1,6 +1,7 @@ import { BatchWriteCommandInput } from '@aws-sdk/lib-dynamodb' import { Entity, Table } from '../index' import { DocumentClient as docClient } from './bootstrap.test' +import assert from 'assert' const TestTable = new Table({ name: 'test-table', @@ -40,9 +41,11 @@ describe('batchWrite', () => { const result = TestTable.batchWriteParams( TestEntity.putBatch({ email: 'test', sort: 'testsk', test: 'test' }) ) as BatchWriteCommandInput - expect(result.RequestItems!['test-table']![0]!.PutRequest!.Item!.pk).toBe('test') - expect(result.RequestItems!['test-table']![0]!.PutRequest!.Item!.sk).toBe('testsk') - expect(result.RequestItems!['test-table']![0]!.PutRequest!.Item!.test).toBe('test') + + assert.ok(result?.RequestItems?.['test-table']?.[0]?.PutRequest?.Item !== undefined, 'PutRequest.Item is undefined') + expect(result.RequestItems['test-table'][0].PutRequest.Item.pk).toBe('test') + expect(result.RequestItems['test-table'][0].PutRequest.Item.sk).toBe('testsk') + expect(result.RequestItems['test-table'][0].PutRequest.Item.test).toBe('test') }) it('fails when extra options', () => { @@ -82,7 +85,8 @@ describe('batchWrite', () => { expect(result.ReturnConsumedCapacity).toBe('TOTAL') expect(result.ReturnItemCollectionMetrics).toBe('SIZE') - expect(result.RequestItems!['test-table']![0]!.PutRequest!.Item).toEqual(expect.objectContaining({ + + expect(result.RequestItems?.['test-table']?.[0]?.PutRequest?.Item).toEqual(expect.objectContaining({ pk: 'test', sk: 'testsk', test: 'test' @@ -97,7 +101,7 @@ describe('batchWrite', () => { 'test' ) as BatchWriteCommandInput - expect(result.RequestItems!['test-table'][0].PutRequest!.Item).toEqual(expect.objectContaining({ + expect(result.RequestItems?.['test-table']?.[0]?.PutRequest?.Item).toEqual(expect.objectContaining({ pk: 'test', sk: 'testsk', test: 'test' @@ -113,7 +117,7 @@ describe('batchWrite', () => { ) as { payload: BatchWriteCommandInput; Tables: any } expect(result).toHaveProperty('Tables') - expect(result.payload.RequestItems!['test-table'][0].PutRequest!.Item).toEqual(expect.objectContaining({ + expect(result.payload.RequestItems?.['test-table']?.[0]?.PutRequest?.Item).toEqual(expect.objectContaining({ pk: 'test', sk: 'testsk', test: 'test' @@ -127,17 +131,17 @@ describe('batchWrite', () => { TestEntity.deleteBatch({ email: 'test', sort: 'testsk3' }) ]) as BatchWriteCommandInput - expect(result.RequestItems!['test-table']![0].PutRequest!.Item).toEqual(expect.objectContaining({ + expect(result.RequestItems?.['test-table']?.[0]?.PutRequest?.Item).toEqual(expect.objectContaining({ pk: 'test', sk: 'testsk1', test: 'test1' })) - expect(result.RequestItems!['test-table']![1].PutRequest!.Item).toEqual(expect.objectContaining({ + expect(result.RequestItems?.['test-table']?.[1]?.PutRequest?.Item).toEqual(expect.objectContaining({ pk: 'test', sk: 'testsk2', test: 'test2' })) - expect(result.RequestItems!['test-table']![2].DeleteRequest!.Key).toEqual(expect.objectContaining({ + expect(result.RequestItems?.['test-table']?.[2]?.DeleteRequest?.Key).toEqual(expect.objectContaining({ pk: 'test', sk: 'testsk3' })) @@ -170,17 +174,17 @@ describe('batchWrite', () => { TestEntity2.putBatch({ email: 'test', sort: 'testsk3', test: 'test3' }) ]) as BatchWriteCommandInput - expect(result.RequestItems!['test-table']![0]!.PutRequest!.Item).toEqual(expect.objectContaining({ + expect(result.RequestItems?.['test-table']?.[0]?.PutRequest?.Item).toEqual(expect.objectContaining({ pk: 'test', sk: 'testsk1', test: 'test1' })) - expect(result.RequestItems!['test-table']![1]!.PutRequest!.Item).toEqual(expect.objectContaining({ + expect(result.RequestItems?.['test-table']?.[1]?.PutRequest?.Item).toEqual(expect.objectContaining({ pk: 'test', sk: 'testsk2', test: 'test2' })) - expect(result.RequestItems!['test-table2']![0]!.PutRequest!.Item).toEqual(expect.objectContaining({ + expect(result.RequestItems?.['test-table2']?.[0]?.PutRequest?.Item).toEqual(expect.objectContaining({ pk: 'test', sk: 'testsk3', test: 'test3' diff --git a/src/__tests__/table.entities.unit.test.ts b/src/__tests__/table.entities.unit.test.ts index 343eea88f..feff685a7 100644 --- a/src/__tests__/table.entities.unit.test.ts +++ b/src/__tests__/table.entities.unit.test.ts @@ -3,6 +3,7 @@ import { DocumentClient } from './bootstrap.test' let TestTable: any let TestEntity: any +// eslint-disable-next-line @typescript-eslint/no-unused-vars let TestEntity2: any describe('entities', () => { diff --git a/src/__tests__/table.entity-actions.unit.test.ts b/src/__tests__/table.entity-actions.unit.test.ts index 3d4cc149b..27eb70bfa 100644 --- a/src/__tests__/table.entity-actions.unit.test.ts +++ b/src/__tests__/table.entity-actions.unit.test.ts @@ -100,4 +100,4 @@ describe('table.parse', () => { // @ts-expect-error expect(TestTable.parse('TestEntityX')).rejects.toThrow(`'TestEntityX' is not a valid Entity`) }) -}) // end table.parse +}) diff --git a/src/__tests__/table.transactGet.unit.test.ts b/src/__tests__/table.transactGet.unit.test.ts index 6f21e41d7..edf459a2d 100644 --- a/src/__tests__/table.transactGet.unit.test.ts +++ b/src/__tests__/table.transactGet.unit.test.ts @@ -40,7 +40,7 @@ describe('transactGet', () => { TestEntity.getTransaction({ email: 'test', sort: 'testsk' }) ]) expect(result).toHaveProperty('TransactItems') - expect(result.TransactItems![0]).toEqual({ + expect(result.TransactItems?.[0]).toEqual({ Get: { TableName: 'test-table', Key: { pk: 'test', sk: 'testsk' } diff --git a/src/__tests__/table.transactWrite.unit.test.ts b/src/__tests__/table.transactWrite.unit.test.ts index 3b63778dd..e148a247b 100644 --- a/src/__tests__/table.transactWrite.unit.test.ts +++ b/src/__tests__/table.transactWrite.unit.test.ts @@ -1,6 +1,6 @@ -// import { DocumentClient } from 'aws-sdk/clients/dynamodb' import { Table, Entity } from '../index' import { DocumentClient as docClient } from './bootstrap.test' +import assert from 'assert' const TestTable = new Table({ name: 'test-table', @@ -43,11 +43,12 @@ describe('transactWrite', () => { TestEntity.deleteTransaction({ email: 'test', sort: 'testsk3' }) ]) - expect(result!.TransactItems![0]!.Put!.Item!.sk!).toBe('testsk1') - expect(result!.TransactItems![1]!.Update!.UpdateExpression!).toBe( + assert.ok(result.TransactItems !== undefined, 'result is undefined') + expect(result.TransactItems[0]?.Put?.Item?.sk).toBe('testsk1') + expect(result.TransactItems[1]?.Update?.UpdateExpression).toBe( 'SET #_ct = if_not_exists(#_ct,:_ct), #_md = :_md, #_et = if_not_exists(#_et,:_et), #test = :test' ) - expect(result!.TransactItems![2]!.Delete!.Key!.sk!).toBe('testsk3') + expect(result.TransactItems[2]?.Delete?.Key?.sk).toBe('testsk3') }) it('fails when extra options', () => { diff --git a/src/classes/Entity/Entity.ts b/src/classes/Entity/Entity.ts index cd01de986..7d75333ec 100644 --- a/src/classes/Entity/Entity.ts +++ b/src/classes/Entity/Entity.ts @@ -237,7 +237,7 @@ class Entity 0 ? { @@ -1065,8 +1065,8 @@ class Table false }, // TODO: How should this return? - ) // end parse assign - } // end parseBatchGetResponse + ) + } // Generate BatchGet Params batchGetParams( @@ -1126,7 +1126,7 @@ class Table false }, // TODO: How should this return? - ) // end parse assign - } // end parseBatchWriteResponse + ) + } /** * Generates parameters for a batchWrite @@ -1369,8 +1369,8 @@ class Table { } else { return error(`'${attr}' is not a valid attribute within the given entity/table.`) } -} // end checkAttribute +} diff --git a/src/lib/expressionBuilder.ts b/src/lib/expressionBuilder.ts index 92960de19..c0e3fdaff 100644 --- a/src/lib/expressionBuilder.ts +++ b/src/lib/expressionBuilder.ts @@ -7,7 +7,6 @@ // TODO: allow for nesting (use arrays) and boolean settings // https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.OperatorsAndFunctions.html -// Import standard error handler import { A } from 'ts-toolbelt' import checkAttribute from './checkAttribute' @@ -108,7 +107,7 @@ const buildExpression = < // Capture the first logic indicator at this level logic = logic ? logic : clause.logic } - }) // end for + }) return { logic, @@ -322,7 +321,7 @@ const parseClause = ( } else { clause = `${size ? `size(${operand})` : operand} ${operator} :attr${grp}` } - } // end if-else + } // Negate the clause if (negate) { @@ -330,9 +329,7 @@ const parseClause = ( } } else { error('A condition is required') - } // end if operator - - // console.log('CLAUSE:',clause,'\nNAMES:',names,'\nVALUES:',values) + } return { logic: or ? 'OR' : 'AND', @@ -340,4 +337,4 @@ const parseClause = ( names, values } -} // end parseClause +} diff --git a/src/lib/normalizeData.ts b/src/lib/normalizeData.ts index 15df4921e..23f977f23 100644 --- a/src/lib/normalizeData.ts +++ b/src/lib/normalizeData.ts @@ -38,7 +38,7 @@ export default () => ( } else { error(`'${dependent}' is not a valid attribute or alias name`) } - }) // end dependency loop + }) map[attr] = map[attr](map) return map @@ -52,7 +52,7 @@ export default () => ( } return map } - } // end dependsOn + } // Generate normalized data object const dataMap = Object.keys(data).reduce( @@ -125,7 +125,7 @@ export default () => ( // Return the merged data return Object.assign(composites, _data) -} // end normalizeData +} // Generate final data and evaluate function expressions // let _data = Object.keys(dataMap.data).reduce((acc,field) => { diff --git a/src/lib/parseCompositeKey.ts b/src/lib/parseCompositeKey.ts index 215b5f117..95dda93ba 100644 --- a/src/lib/parseCompositeKey.ts +++ b/src/lib/parseCompositeKey.ts @@ -59,7 +59,7 @@ const parseCompositeKey = < [sub_config.alias]: Object.assign({}, sub_config, { map: field }) } : {} - ) // end assign + ) } else { error(`Composite key configurations must have 2 or 3 items`) } diff --git a/src/lib/parseEntityAttributes.ts b/src/lib/parseEntityAttributes.ts index d826f7ff7..4bf048f70 100644 --- a/src/lib/parseEntityAttributes.ts +++ b/src/lib/parseEntityAttributes.ts @@ -74,6 +74,6 @@ const parseEntityAttributes = < keys: track.keys, attributes: parsedAttributes } -} // end parseEntityAttrbutes +} export default parseEntityAttributes diff --git a/src/lib/parseMapping.ts b/src/lib/parseMapping.ts index 044b8a82a..68c0cdaa8 100644 --- a/src/lib/parseMapping.ts +++ b/src/lib/parseMapping.ts @@ -127,7 +127,7 @@ export default ( } else { error(`Index assignments for '${field}' must be string or boolean values`) } - } // end for + } } else { error(`'${prop}' must be a boolean, string, or array`) } @@ -172,5 +172,5 @@ export default ( [map]: Object.assign({}, _config, { alias: field }) } : {} - ) // end assign + ) } diff --git a/src/lib/parseTable.ts b/src/lib/parseTable.ts index 39c47ab7e..eab4f9930 100644 --- a/src/lib/parseTable.ts +++ b/src/lib/parseTable.ts @@ -112,12 +112,12 @@ export const parseTable = < autoExecute, autoParse, removeNullAttributes, - _entities: [] // init Entity tracker + _entities: [] }, - DocumentClient ? { DocumentClient } : {}, // end DocumentClient - entities ? { entities } : {} // end entities + DocumentClient ? { DocumentClient } : {}, + entities ? { entities } : {} ) -} // end parseTable +} // Parse Indexes const parseIndexes = (indexes: TableIndexes, pk: string): TableIndexes => @@ -152,7 +152,7 @@ const parseIndexes = (indexes: TableIndexes, pk: string): TableIndexes => partitionKey && type === 'GSI' ? { partitionKey } : {}, sortKey ? { sortKey } : {}, { type } - ) // end + ) }) }, {}) diff --git a/src/lib/projectionBuilder.ts b/src/lib/projectionBuilder.ts index 9b036d2ea..221672e90 100644 --- a/src/lib/projectionBuilder.ts +++ b/src/lib/projectionBuilder.ts @@ -8,7 +8,6 @@ import { A } from 'ts-toolbelt' -// Import standard error handler import { TableDef } from '../classes/Table' import { error } from './utils' import checkAttribute from './checkAttribute' @@ -45,7 +44,7 @@ const projectionBuilder = ( // Check that table is valid and contains attributes if (!table || !table.Table || Object.keys(table.Table.attributes).length == 0) { throw new Error('Tables must be valid and contain attributes') - } // end check table + } // Add entityField if exists if (type && table.Table.entityField) attrs.push(table.Table.entityField) @@ -68,7 +67,7 @@ const projectionBuilder = ( if (!Object.values(names).includes(attr)) { names[`#proj${++index}`] = attr tableAttrs.push(attribute) - } // end if + } } else if (typeof attribute === 'object') { // If an object, loop through keys for (const entity in attribute) { @@ -97,20 +96,20 @@ const projectionBuilder = ( if (!Object.values(names).includes(attr)) { names[`#proj${++index}`] = attr - } // end if + } entities[entity].push(attr) - } // end for + } } else { error(`'${entity}' is not a valid entity on this table`) - } // end if valid entity - } // end for loop + } + } // Throw error if invalid type } else { error(`'${typeof attribute}' is an invalid type. Projections require strings or arrays`) } - } // end for + } return { names, @@ -120,6 +119,6 @@ const projectionBuilder = ( }, {}), tableAttrs } -} // end module +} export default projectionBuilder diff --git a/src/lib/validateTypes.ts b/src/lib/validateTypes.ts index 46bcb5a91..2fcd69cae 100644 --- a/src/lib/validateTypes.ts +++ b/src/lib/validateTypes.ts @@ -113,4 +113,4 @@ export default () => (mapping: any, field: any, value: any) => { // TODO: Binary validation return value } -} // end validateTypes +}