From 9ad9ae481ba45951a32ecae16cf63cc21895bf81 Mon Sep 17 00:00:00 2001 From: Nadeem Patwekar Date: Tue, 16 Jan 2024 14:00:22 +0530 Subject: [PATCH 1/5] test: :white_check_mark: moves persistance test files --- .talismanrc | 2 +- package-lock.json | 434 ++++++++++++++++-- package.json | 5 +- test/unit/persistance/local-storage.spec.ts | 74 +++ test/unit/persistance/memory-storage.spec.ts | 72 +++ .../unit/persistance/preference-store.spec.ts | 167 +++++++ 6 files changed, 724 insertions(+), 30 deletions(-) create mode 100644 test/unit/persistance/local-storage.spec.ts create mode 100644 test/unit/persistance/memory-storage.spec.ts create mode 100644 test/unit/persistance/preference-store.spec.ts diff --git a/.talismanrc b/.talismanrc index 0b6c5f16..c4cdc25d 100644 --- a/.talismanrc +++ b/.talismanrc @@ -5,5 +5,5 @@ fileignoreconfig: - filename: test/utils/mocks.ts checksum: a1cb4b1890a584f1facd30f2a0974c97a66f91417022be79d00516338e244227 - filename: package-lock.json - checksum: c836dacebd78b36e1264e1f99d0e70be665b34b31c03b4f46d272d0581146311 + checksum: 2ff3b3b65202c8337fdd9332e4361868b0c6501c297c8b264917dd7cef4531c9 version: "" \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 347ff42d..82efc10a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,14 +1,14 @@ { - "name": "@contentstack/typescript", + "name": "@contentstack/delivery", "version": "0.0.1", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "@contentstack/typescript", + "name": "@contentstack/delivery", "version": "0.0.1", "dependencies": { - "@contentstack/core": "file:contentstack-core-0.0.1.tgz", + "@contentstack/core": "^1.0.1", "@contentstack/utils": "^1.1.3", "@types/humps": "^2.0.2", "dotenv": "^16.3.1", @@ -25,7 +25,8 @@ "jest-junit": "^16.0.0", "ts-jest": "^29.1.1", "ts-loader": "^9.4.4", - "ts-node": "10.9.1" + "ts-node": "10.9.1", + "webpack-cli": "^5.1.4" } }, "node_modules/@ampproject/remapping": { @@ -1854,12 +1855,12 @@ "dev": true }, "node_modules/@contentstack/core": { - "version": "0.0.1", - "resolved": "file:contentstack-core-0.0.1.tgz", - "integrity": "sha512-JcTfK8pCDkqiEYbkP0rVmGVuNcX95+XT78kb2y1OkUB0obSr+HgPl6JgP3OZDVRjV+fhiK76AvVDob2oMh6oag==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@contentstack/core/-/core-1.0.1.tgz", + "integrity": "sha512-D2sv/5soSPEXGRntRgOzN9e0vfZGQebClfD6ghHoHQEaMyZb2Kt9V6tT/qsiz56Vcbno7X1G9j2ydaWUWLdLTQ==", "dependencies": { - "axios": "^1.6.2", - "axios-mock-adapter": "^1.21.2", + "axios": "^1.6.5", + "axios-mock-adapter": "^1.22.0", "lodash": "^4.17.21", "qs": "^6.11.0", "tslib": "^2.4.1" @@ -1892,6 +1893,15 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -3976,6 +3986,50 @@ "@xtuc/long": "4.2.2" } }, + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -4208,11 +4262,11 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/axios": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", - "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz", + "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==", "dependencies": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.4", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -4815,6 +4869,20 @@ "node": ">=0.8" } }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -4846,6 +4914,12 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, "node_modules/columnify": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", @@ -5306,6 +5380,18 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/envinfo": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz", + "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -5526,6 +5612,15 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, "node_modules/fastq": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", @@ -5624,9 +5719,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", - "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", + "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==", "funding": [ { "type": "individual", @@ -6094,6 +6189,15 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -6206,6 +6310,18 @@ "node": ">=0.12.0" } }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -6254,6 +6370,15 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", @@ -8304,6 +8429,15 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -9443,6 +9577,18 @@ "node": ">= 6" } }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -9736,6 +9882,18 @@ "node": ">= 0.4" } }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -10761,6 +10919,74 @@ } } }, + "node_modules/webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", @@ -10820,6 +11046,12 @@ "node": ">= 8" } }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -12260,11 +12492,12 @@ "dev": true }, "@contentstack/core": { - "version": "file:contentstack-core-0.0.1.tgz", - "integrity": "sha512-JcTfK8pCDkqiEYbkP0rVmGVuNcX95+XT78kb2y1OkUB0obSr+HgPl6JgP3OZDVRjV+fhiK76AvVDob2oMh6oag==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@contentstack/core/-/core-1.0.1.tgz", + "integrity": "sha512-D2sv/5soSPEXGRntRgOzN9e0vfZGQebClfD6ghHoHQEaMyZb2Kt9V6tT/qsiz56Vcbno7X1G9j2ydaWUWLdLTQ==", "requires": { - "axios": "^1.6.2", - "axios-mock-adapter": "^1.21.2", + "axios": "^1.6.5", + "axios-mock-adapter": "^1.22.0", "lodash": "^4.17.21", "qs": "^6.11.0", "tslib": "^2.4.1" @@ -12296,6 +12529,12 @@ } } }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -13886,6 +14125,27 @@ "@xtuc/long": "4.2.2" } }, + "@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "requires": {} + }, + "@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "requires": {} + }, + "@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, + "requires": {} + }, "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -14072,11 +14332,11 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "axios": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", - "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz", + "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==", "requires": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.4", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -14506,6 +14766,17 @@ "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -14533,6 +14804,12 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, "columnify": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", @@ -14875,6 +15152,12 @@ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true }, + "envinfo": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz", + "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==", + "dev": true + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -15039,6 +15322,12 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, + "fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true + }, "fastq": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", @@ -15121,9 +15410,9 @@ "dev": true }, "follow-redirects": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", - "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==" + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", + "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==" }, "form-data": { "version": "4.0.0", @@ -15448,6 +15737,12 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -15513,6 +15808,15 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, "is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -15546,6 +15850,12 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, "istanbul-lib-coverage": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", @@ -17073,6 +17383,12 @@ "universalify": "^2.0.0" } }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, "kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -17919,6 +18235,15 @@ "util-deprecate": "^1.0.1" } }, + "rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "requires": { + "resolve": "^1.20.0" + } + }, "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -18127,6 +18452,15 @@ "has-property-descriptors": "^1.0.0" } }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -18855,6 +19189,46 @@ "webpack-sources": "^3.2.3" } }, + "webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "dependencies": { + "commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true + } + } + }, + "webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + } + }, "webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", @@ -18896,6 +19270,12 @@ "isexe": "^2.0.0" } }, + "wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", diff --git a/package.json b/package.json index 04cfcb70..674b235f 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "build:types": "node tools/cleanup types && tsc -p config/tsconfig.types.json" }, "dependencies": { - "@contentstack/core": "file:contentstack-core-0.0.1.tgz", + "@contentstack/core": "^1.0.1", "@contentstack/utils": "^1.1.3", "@types/humps": "^2.0.2", "dotenv": "^16.3.1", @@ -41,6 +41,7 @@ "jest-junit": "^16.0.0", "ts-jest": "^29.1.1", "ts-loader": "^9.4.4", - "ts-node": "10.9.1" + "ts-node": "10.9.1", + "webpack-cli": "^5.1.4" } } diff --git a/test/unit/persistance/local-storage.spec.ts b/test/unit/persistance/local-storage.spec.ts new file mode 100644 index 00000000..d5da9c47 --- /dev/null +++ b/test/unit/persistance/local-storage.spec.ts @@ -0,0 +1,74 @@ +import { iGlobal } from '../../../src/persistance/helper/utils'; +import { localStorage } from '../../../src/persistance/storages/local-storage'; +import { Storage } from '../../../src/persistance/types/storage'; +describe('local store', () => { + let store: Storage; + + beforeAll(() => { + store = localStorage; + }); + + it('should create store store', () => { + expect(store.name).toEqual('localStorage'); + expect(typeof store.clear).toEqual('function'); + expect(typeof store.each).toEqual('function'); + expect(typeof store.getItem).toEqual('function'); + expect(typeof store.setItem).toEqual('function'); + expect(typeof store.removeItem).toEqual('function'); + }); + + it('should set item for key with value', () => { + store.setItem('foo', 'bar'); + expect(store.getItem('foo')).toEqual('bar'); + }); + + it('should not blank key', () => { + store.setItem('', 'bar'); + expect(store.getItem('')).toEqual(null); + }); + + it('should remove item for key', () => { + store.removeItem('foo'); + expect(store.getItem('foo')).toEqual(null); + }); + + it('should not throw on blank or not present key', () => { + store.removeItem(''); + store.removeItem('foo'); + expect(store.getItem('')).toEqual(null); + }); + + it('should update item for key', () => { + store.setItem('foo', 'bar1'); + store.setItem('foo', 'bar2'); + expect(store.getItem('foo')).toEqual('bar2'); + }); + + it('should contain key value on removed another key', () => { + store.setItem('foo', 'bar'); + store.setItem('bar', 'foo'); + store.removeItem('foo'); + expect(store.getItem('foo')).toEqual(null); + expect(store.getItem('bar')).toEqual('foo'); + }); + + it('should not contain key value clear', () => { + store.setItem('foo', 'bar'); + store.setItem('bar', 'foo'); + store.clear(); + expect(store.getItem('foo')).toEqual(null); + expect(store.getItem('bar')).toEqual(null); + }); + + it('should not contain key value clear', () => { + iGlobal.document.cookie = ' = ; path=/'; + store.setItem('foo', 'bar'); + store.setItem('bar', 'foo'); + store.each((_, key) => { + expect(['foo', 'bar'].includes(key)).toBeTruthy(); + }); + store.clear(); + expect(store.getItem('foo')).toEqual(null); + expect(store.getItem('bar')).toEqual(null); + }); +}); diff --git a/test/unit/persistance/memory-storage.spec.ts b/test/unit/persistance/memory-storage.spec.ts new file mode 100644 index 00000000..fb5e3fd5 --- /dev/null +++ b/test/unit/persistance/memory-storage.spec.ts @@ -0,0 +1,72 @@ +import { memoryStorage } from '../../../src/persistance/storages/memory-storage'; +import { Storage } from '../../../src/persistance/types/storage'; +describe('memory store', () => { + let store: Storage; + + beforeAll(() => { + store = memoryStorage; + }); + + it('should create store store', () => { + expect(store.name).toEqual('memoryStorage'); + expect(typeof store.clear).toEqual('function'); + expect(typeof store.each).toEqual('function'); + expect(typeof store.getItem).toEqual('function'); + expect(typeof store.setItem).toEqual('function'); + expect(typeof store.removeItem).toEqual('function'); + }); + + it('should set item for key with value', () => { + store.setItem('foo', 'bar'); + expect(store.getItem('foo')).toEqual('bar'); + }); + + it('should not blank key', () => { + store.setItem('', 'bar'); + expect(store.getItem('')).toEqual(undefined); + }); + + it('should remove item for key', () => { + store.removeItem('foo'); + expect(store.getItem('foo')).toEqual(undefined); + }); + + it('should not throw on blank or not present key', () => { + store.removeItem(''); + store.removeItem('foo'); + expect(store.getItem('')).toEqual(undefined); + }); + + it('should update item for key', () => { + store.setItem('foo', 'bar1'); + store.setItem('foo', 'bar2'); + expect(store.getItem('foo')).toEqual('bar2'); + }); + + it('should contain key value on removed another key', () => { + store.setItem('foo', 'bar'); + store.setItem('bar', 'foo'); + store.removeItem('foo'); + expect(store.getItem('foo')).toEqual(undefined); + expect(store.getItem('bar')).toEqual('foo'); + }); + + it('should not contain key value clear', () => { + store.setItem('foo', 'bar'); + store.setItem('bar', 'foo'); + store.clear(); + expect(store.getItem('foo')).toEqual(undefined); + expect(store.getItem('bar')).toEqual(undefined); + }); + + it('should not contain key value clear', () => { + store.setItem('foo', 'bar'); + store.setItem('bar', 'foo'); + store.each((_, key) => { + expect(['foo', 'bar'].includes(key)).toBeTruthy(); + }); + store.clear(); + expect(store.getItem('foo')).toEqual(undefined); + expect(store.getItem('bar')).toEqual(undefined); + }); +}); diff --git a/test/unit/persistance/preference-store.spec.ts b/test/unit/persistance/preference-store.spec.ts new file mode 100644 index 00000000..f55997a6 --- /dev/null +++ b/test/unit/persistance/preference-store.spec.ts @@ -0,0 +1,167 @@ +import { PersistanceStore } from '../../../src/persistance/persistance-store'; +import { StorageType } from '../../../src/persistance/types/storage-type'; +import { memoryStorage } from '../../../src/persistance/storages/memory-storage'; +describe('persistance store intiialization test', () => { + it('should initialize default persistance ', () => { + const persistance = new PersistanceStore(); + expect(persistance).toBeDefined(); + expect(persistance.config).toBeDefined(); + expect(persistance.config.maxAge).toEqual(86400000); + expect(persistance.config.storageType).toEqual('localStorage'); + }); + + it('should initialize persistance with name and local storage type ', () => { + const storageType = 'localStorage'; + const persistance = makePersistance({ storageType }); + expect(persistance).toBeDefined(); + expect(persistance.config).toBeDefined(); + expect(persistance.config.maxAge).toEqual(86400000); + expect(persistance.config.storageType).toEqual(storageType); + }); + it('should initialize persistance with name and memory storage type ', () => { + const storageType = 'memoryStorage'; + const persistance = makePersistance({ storageType }); + expect(persistance).toBeDefined(); + expect(persistance.config).toBeDefined(); + expect(persistance.config.maxAge).toEqual(86400000); + expect(persistance.config.storageType).toEqual(storageType); + }); + it('should initialize persistance with name and local storage type ', () => { + const storageType = 'customStorage'; + const persistance = makePersistance({ storageType }); + expect(persistance).toBeDefined(); + expect(persistance.config).toBeDefined(); + expect(persistance.config.maxAge).toEqual(86400000); + expect(persistance.config.storageType).toEqual(storageType); + }); + it('should throw error on custom storage without storage', () => { + const config: any = { name: 'foobar', storageType: 'customStorage' }; + config.storage = ''; + const persistance = () => { + new PersistanceStore(config); + }; + expect(persistance).toThrow(TypeError); + }); +}); + +describe('persistance store init', () => { + it('should set max age, serializer and deserializer', () => { + const serializer = jest.fn(); + const deserializer = jest.fn(); + const maxAge = 1000 * 60; + const persistance = new PersistanceStore({ serializer, deserializer, maxAge }); + expect(persistance.config.maxAge).toEqual(maxAge); + persistance.config.serializer!('foo'); + persistance.config.deserializer!('foo'); + expect(serializer.mock.calls.length).toEqual(1); + expect(deserializer.mock.calls.length).toEqual(1); + }); +}); + +describe('persistance functionality', () => { + const persistance = new PersistanceStore(); + const namespace = 'namespace'; + it('should set item for key with value', () => { + persistance.setItem('foo', 'bar'); + expect(persistance.getItem('foo')).toEqual('bar'); + }); + it('should not blank key', () => { + persistance.setItem('', 'bar'); + expect(persistance.getItem('')).toEqual(undefined); + }); + it('should remove item for key', () => { + persistance.setItem('foo', 'bar', namespace); + persistance.removeItem('foo'); + expect(persistance.getItem('foo')).toEqual(undefined); + expect(persistance.getItem('foo', namespace)).toEqual('bar'); + }); + + it('should not throw on blank or not present key', () => { + persistance.removeItem(''); + persistance.removeItem('foo'); + expect(persistance.getItem('')).toEqual(undefined); + }); + + it('should update item for key', () => { + persistance.setItem('foo', 'bar1'); + persistance.setItem('foo', 'bar2'); + expect(persistance.getItem('foo')).toEqual('bar2'); + }); + it('should contain key value on removed another key', () => { + persistance.setItem('foo', 'bar'); + persistance.setItem('bar', 'foo'); + persistance.removeItem('foo'); + expect(persistance.getItem('foo')).toEqual(undefined); + expect(persistance.getItem('bar')).toEqual('foo'); + }); + it('should return undefined on expiry', (done) => { + persistance.setItem('foo', 'bar', undefined, 10); + setTimeout(() => { + expect(persistance.getItem('foo')).toEqual(undefined); + done(); + }, 20); + }); + + it('should allow to set value undefined', () => { + persistance.setItem('foo', 'bar'); + persistance.setItem('foo', undefined); + + expect(persistance.getItem('foo')).toEqual(undefined); + }); + it('should not contain key value clear', () => { + persistance.setItem('foo', 'bar'); + persistance.setItem('bar', 'foo'); + persistance.clear(); + expect(persistance.getItem('foo')).toEqual(undefined); + expect(persistance.getItem('bar')).toEqual(undefined); + }); +}); + +describe('persistance with namespace functionality', () => { + const persistance = new PersistanceStore(); + const namespace = 'namespace'; + + it('should set item for key, value', () => { + persistance.setItem('foo', 'bar', namespace); + expect(persistance.getItem('foo')).toEqual(undefined); + expect(persistance.getItem('foo', namespace)).toEqual('bar'); + }); + it('should remove item for key', () => { + persistance.setItem('foo', 'bar'); + persistance.removeItem('foo', namespace); + expect(persistance.getItem('foo')).toEqual('bar'); + expect(persistance.getItem('foo', namespace)).toEqual(undefined); + }); + it('should update item for key', () => { + persistance.setItem('foo', 'bar1', namespace); + persistance.setItem('foo', 'bar2', namespace); + expect(persistance.getItem('foo', namespace)).toEqual('bar2'); + }); + + it('should contain key value on removed another key', () => { + persistance.setItem('foo', 'bar', namespace); + persistance.setItem('bar', 'foo', namespace); + persistance.removeItem('foo', namespace); + expect(persistance.getItem('foo', namespace)).toEqual(undefined); + expect(persistance.getItem('bar', namespace)).toEqual('foo'); + }); + it('should not contain key value clear', () => { + persistance.setItem('foo', 'bar', namespace); + persistance.setItem('bar', 'foo', namespace); + persistance.clear(namespace); + expect(persistance.getItem('foo', namespace)).toEqual(undefined); + expect(persistance.getItem('bar', namespace)).toEqual(undefined); + }); +}); + +describe('persistance with 0 maxAge', () => { + it('should allow max age to be set to 0', () => { + const persistance = new PersistanceStore({ maxAge: 0 }); + persistance.setItem('foo', 'bar'); + expect(persistance.getItem('foo')).toEqual(undefined); + }); +}); + +function makePersistance(config: { storageType: StorageType | 'customStorage' }) { + return new PersistanceStore({ storageType: config.storageType, storage: memoryStorage }); +} From 31376978797f9434d2ce4739219fef89940a9110 Mon Sep 17 00:00:00 2001 From: Nadeem Patwekar Date: Tue, 16 Jan 2024 14:01:18 +0530 Subject: [PATCH 2/5] test: :white_check_mark: adds plugin test in contentstack.spec.ts --- src/lib/contentstack.ts | 34 +++++++++---------- test/unit/contentstack.spec.ts | 62 ++++++++++++++++++++++------------ 2 files changed, 58 insertions(+), 38 deletions(-) diff --git a/src/lib/contentstack.ts b/src/lib/contentstack.ts index 2913f0b9..7d286f60 100644 --- a/src/lib/contentstack.ts +++ b/src/lib/contentstack.ts @@ -80,25 +80,25 @@ export function Stack(config: StackConfig): StackClass { client.interceptors.request.use(retryRequestHandler); client.interceptors.response.use(retryResponseHandler, errorHandler); - // if (config.plugins) { - // client.interceptors.request.use((reqConfig: InternalAxiosRequestConfig): InternalAxiosRequestConfig => { - // if (config && config.plugins) - // config.plugins.forEach((pluginInstance) => { - // reqConfig = pluginInstance.onRequest(reqConfig); - // }); + if (config.plugins) { + client.interceptors.request.use((reqConfig: InternalAxiosRequestConfig): InternalAxiosRequestConfig => { + if (config && config.plugins) + config.plugins.forEach((pluginInstance) => { + reqConfig = pluginInstance.onRequest(reqConfig); + }); + + return reqConfig; + }); - // return reqConfig; - // }); + client.interceptors.response.use((response: AxiosResponse) => { + if (config && config.plugins) + config.plugins.forEach((pluginInstance) => { + response = pluginInstance.onResponse(response.request, response, response.data); + }); - // client.interceptors.response.use((response: AxiosResponse) => { - // if (config && config.plugins) - // config.plugins.forEach((pluginInstance) => { - // response = pluginInstance.onResponse(response.request, response, response.data); - // }); - - // return response; - // }); - // } + return response; + }); + } return new StackClass(client, config); } diff --git a/test/unit/contentstack.spec.ts b/test/unit/contentstack.spec.ts index 5773a583..38ee0e27 100644 --- a/test/unit/contentstack.spec.ts +++ b/test/unit/contentstack.spec.ts @@ -4,32 +4,12 @@ import * as Contentstack from '../../src/lib/contentstack'; import { Stack } from '../../src/lib/stack'; import { Region, StackConfig } from '../../src/lib/types'; import { DUMMY_URL, HOST_EU_REGION, HOST_URL } from '../utils/constant'; +import { AxiosRequestConfig, AxiosResponse } from 'axios'; jest.mock('@contentstack/core'); const createHttpClientMock = >(core.httpClient); describe('Contentstack', () => { - beforeEach(() => - createHttpClientMock.mockReturnValue({ - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - defaults: { - host: HOST_URL, - }, - interceptors: { - request: { - use: jest.fn(), - }, - response: { - use: jest.fn(), - }, - }, - }) - ); - afterEach(() => { - createHttpClientMock.mockReset(); - }); - const createStackInstance = (config: StackConfig) => Contentstack.Stack(config); it('should throw error when api key is empty', (done) => { const config = { @@ -161,4 +141,44 @@ describe('Contentstack', () => { expect(stackInstance).toBeInstanceOf(Stack); done(); }); + + it('should add plugins onRequest and onResponse as req and res interceptors when plugin is passed', (done) => { + const reqInterceptor = jest.fn(); + const resInterceptor = jest.fn(); + + createHttpClientMock.mockReturnValue({ + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + defaults: { + host: HOST_URL, + }, + interceptors: { + request: { + use: reqInterceptor, + }, + response: { + use: resInterceptor, + }, + }, + }) + + const mockPlugin = { + onRequest: jest.fn((request) => request), + onResponse: jest.fn((response) => response), + }; + + const stackInstance = createStackInstance({ + apiKey: 'apiKey', + deliveryToken: 'delivery', + environment: 'env', + plugins: [mockPlugin], + }); + + expect(stackInstance).toBeInstanceOf(Stack); + expect(reqInterceptor).toHaveBeenCalledWith(expect.any(Function)); + expect(resInterceptor).toHaveBeenCalledWith(expect.any(Function)); + + createHttpClientMock.mockReset(); + done(); + }); }); From b8fcc92138cec79089a34b74e952527ff258b34b Mon Sep 17 00:00:00 2001 From: Nadeem Patwekar Date: Tue, 16 Jan 2024 18:16:04 +0530 Subject: [PATCH 3/5] fix: :fire: removes redundant persistance test files --- test/persistance/local-storage.spec.ts | 74 ---------- test/persistance/memory-storage.spec.ts | 72 ---------- test/persistance/preference-store.spec.ts | 167 ---------------------- test/unit/contentstack.spec.ts | 64 ++++++--- test/unit/plugins.spec.ts | 55 ------- 5 files changed, 45 insertions(+), 387 deletions(-) delete mode 100644 test/persistance/local-storage.spec.ts delete mode 100644 test/persistance/memory-storage.spec.ts delete mode 100644 test/persistance/preference-store.spec.ts delete mode 100644 test/unit/plugins.spec.ts diff --git a/test/persistance/local-storage.spec.ts b/test/persistance/local-storage.spec.ts deleted file mode 100644 index ecf99d50..00000000 --- a/test/persistance/local-storage.spec.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { iGlobal } from '../../src/persistance/helper/utils'; -import { localStorage } from '../../src/persistance/storages/local-storage'; -import { Storage } from '../../src/persistance/types/storage'; -describe('local store', () => { - let store: Storage; - - beforeAll(() => { - store = localStorage; - }); - - it('should create store store', () => { - expect(store.name).toEqual('localStorage'); - expect(typeof store.clear).toEqual('function'); - expect(typeof store.each).toEqual('function'); - expect(typeof store.getItem).toEqual('function'); - expect(typeof store.setItem).toEqual('function'); - expect(typeof store.removeItem).toEqual('function'); - }); - - it('should set item for key with value', () => { - store.setItem('foo', 'bar'); - expect(store.getItem('foo')).toEqual('bar'); - }); - - it('should not blank key', () => { - store.setItem('', 'bar'); - expect(store.getItem('')).toEqual(null); - }); - - it('should remove item for key', () => { - store.removeItem('foo'); - expect(store.getItem('foo')).toEqual(null); - }); - - it('should not throw on blank or not present key', () => { - store.removeItem(''); - store.removeItem('foo'); - expect(store.getItem('')).toEqual(null); - }); - - it('should update item for key', () => { - store.setItem('foo', 'bar1'); - store.setItem('foo', 'bar2'); - expect(store.getItem('foo')).toEqual('bar2'); - }); - - it('should contain key value on removed another key', () => { - store.setItem('foo', 'bar'); - store.setItem('bar', 'foo'); - store.removeItem('foo'); - expect(store.getItem('foo')).toEqual(null); - expect(store.getItem('bar')).toEqual('foo'); - }); - - it('should not contain key value clear', () => { - store.setItem('foo', 'bar'); - store.setItem('bar', 'foo'); - store.clear(); - expect(store.getItem('foo')).toEqual(null); - expect(store.getItem('bar')).toEqual(null); - }); - - it('should not contain key value clear', () => { - iGlobal.document.cookie = ' = ; path=/'; - store.setItem('foo', 'bar'); - store.setItem('bar', 'foo'); - store.each((_, key) => { - expect(['foo', 'bar'].includes(key)).toBeTruthy(); - }); - store.clear(); - expect(store.getItem('foo')).toEqual(null); - expect(store.getItem('bar')).toEqual(null); - }); -}); diff --git a/test/persistance/memory-storage.spec.ts b/test/persistance/memory-storage.spec.ts deleted file mode 100644 index aaa4c6e5..00000000 --- a/test/persistance/memory-storage.spec.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { memoryStorage } from '../../src/persistance/storages/memory-storage'; -import { Storage } from '../../src/persistance/types/storage'; -describe('memory store', () => { - let store: Storage; - - beforeAll(() => { - store = memoryStorage; - }); - - it('should create store store', () => { - expect(store.name).toEqual('memoryStorage'); - expect(typeof store.clear).toEqual('function'); - expect(typeof store.each).toEqual('function'); - expect(typeof store.getItem).toEqual('function'); - expect(typeof store.setItem).toEqual('function'); - expect(typeof store.removeItem).toEqual('function'); - }); - - it('should set item for key with value', () => { - store.setItem('foo', 'bar'); - expect(store.getItem('foo')).toEqual('bar'); - }); - - it('should not blank key', () => { - store.setItem('', 'bar'); - expect(store.getItem('')).toEqual(undefined); - }); - - it('should remove item for key', () => { - store.removeItem('foo'); - expect(store.getItem('foo')).toEqual(undefined); - }); - - it('should not throw on blank or not present key', () => { - store.removeItem(''); - store.removeItem('foo'); - expect(store.getItem('')).toEqual(undefined); - }); - - it('should update item for key', () => { - store.setItem('foo', 'bar1'); - store.setItem('foo', 'bar2'); - expect(store.getItem('foo')).toEqual('bar2'); - }); - - it('should contain key value on removed another key', () => { - store.setItem('foo', 'bar'); - store.setItem('bar', 'foo'); - store.removeItem('foo'); - expect(store.getItem('foo')).toEqual(undefined); - expect(store.getItem('bar')).toEqual('foo'); - }); - - it('should not contain key value clear', () => { - store.setItem('foo', 'bar'); - store.setItem('bar', 'foo'); - store.clear(); - expect(store.getItem('foo')).toEqual(undefined); - expect(store.getItem('bar')).toEqual(undefined); - }); - - it('should not contain key value clear', () => { - store.setItem('foo', 'bar'); - store.setItem('bar', 'foo'); - store.each((_, key) => { - expect(['foo', 'bar'].includes(key)).toBeTruthy(); - }); - store.clear(); - expect(store.getItem('foo')).toEqual(undefined); - expect(store.getItem('bar')).toEqual(undefined); - }); -}); diff --git a/test/persistance/preference-store.spec.ts b/test/persistance/preference-store.spec.ts deleted file mode 100644 index f5ae73c3..00000000 --- a/test/persistance/preference-store.spec.ts +++ /dev/null @@ -1,167 +0,0 @@ -import { PersistanceStore } from '../../src/persistance/persistance-store'; -import { StorageType } from '../../src/persistance/types/storage-type'; -import { memoryStorage } from '../../src/persistance/storages/memory-storage'; -describe('persistance store intiialization test', () => { - it('should initialize default persistance ', () => { - const persistance = new PersistanceStore(); - expect(persistance).toBeDefined(); - expect(persistance.config).toBeDefined(); - expect(persistance.config.maxAge).toEqual(86400000); - expect(persistance.config.storageType).toEqual('localStorage'); - }); - - it('should initialize persistance with name and local storage type ', () => { - const storageType = 'localStorage'; - const persistance = makePersistance({ storageType }); - expect(persistance).toBeDefined(); - expect(persistance.config).toBeDefined(); - expect(persistance.config.maxAge).toEqual(86400000); - expect(persistance.config.storageType).toEqual(storageType); - }); - it('should initialize persistance with name and memory storage type ', () => { - const storageType = 'memoryStorage'; - const persistance = makePersistance({ storageType }); - expect(persistance).toBeDefined(); - expect(persistance.config).toBeDefined(); - expect(persistance.config.maxAge).toEqual(86400000); - expect(persistance.config.storageType).toEqual(storageType); - }); - it('should initialize persistance with name and local storage type ', () => { - const storageType = 'customStorage'; - const persistance = makePersistance({ storageType }); - expect(persistance).toBeDefined(); - expect(persistance.config).toBeDefined(); - expect(persistance.config.maxAge).toEqual(86400000); - expect(persistance.config.storageType).toEqual(storageType); - }); - it('should throw error on custom storage without storage', () => { - const config: any = { name: 'foobar', storageType: 'customStorage' }; - config.storage = ''; - const persistance = () => { - new PersistanceStore(config); - }; - expect(persistance).toThrow(TypeError); - }); -}); - -describe('persistance store init', () => { - it('should set max age, serializer and deserializer', () => { - const serializer = jest.fn(); - const deserializer = jest.fn(); - const maxAge = 1000 * 60; - const persistance = new PersistanceStore({ serializer, deserializer, maxAge }); - expect(persistance.config.maxAge).toEqual(maxAge); - persistance.config.serializer!('foo'); - persistance.config.deserializer!('foo'); - expect(serializer.mock.calls.length).toEqual(1); - expect(deserializer.mock.calls.length).toEqual(1); - }); -}); - -describe('persistance functionality', () => { - const persistance = new PersistanceStore(); - const namespace = 'namespace'; - it('should set item for key with value', () => { - persistance.setItem('foo', 'bar'); - expect(persistance.getItem('foo')).toEqual('bar'); - }); - it('should not blank key', () => { - persistance.setItem('', 'bar'); - expect(persistance.getItem('')).toEqual(undefined); - }); - it('should remove item for key', () => { - persistance.setItem('foo', 'bar', namespace); - persistance.removeItem('foo'); - expect(persistance.getItem('foo')).toEqual(undefined); - expect(persistance.getItem('foo', namespace)).toEqual('bar'); - }); - - it('should not throw on blank or not present key', () => { - persistance.removeItem(''); - persistance.removeItem('foo'); - expect(persistance.getItem('')).toEqual(undefined); - }); - - it('should update item for key', () => { - persistance.setItem('foo', 'bar1'); - persistance.setItem('foo', 'bar2'); - expect(persistance.getItem('foo')).toEqual('bar2'); - }); - it('should contain key value on removed another key', () => { - persistance.setItem('foo', 'bar'); - persistance.setItem('bar', 'foo'); - persistance.removeItem('foo'); - expect(persistance.getItem('foo')).toEqual(undefined); - expect(persistance.getItem('bar')).toEqual('foo'); - }); - it('should return undefined on expiry', (done) => { - persistance.setItem('foo', 'bar', undefined, 10); - setTimeout(() => { - expect(persistance.getItem('foo')).toEqual(undefined); - done(); - }, 20); - }); - - it('should allow to set value undefined', () => { - persistance.setItem('foo', 'bar'); - persistance.setItem('foo', undefined); - - expect(persistance.getItem('foo')).toEqual(undefined); - }); - it('should not contain key value clear', () => { - persistance.setItem('foo', 'bar'); - persistance.setItem('bar', 'foo'); - persistance.clear(); - expect(persistance.getItem('foo')).toEqual(undefined); - expect(persistance.getItem('bar')).toEqual(undefined); - }); -}); - -describe('persistance with namespace functionality', () => { - const persistance = new PersistanceStore(); - const namespace = 'namespace'; - - it('should set item for key, value', () => { - persistance.setItem('foo', 'bar', namespace); - expect(persistance.getItem('foo')).toEqual(undefined); - expect(persistance.getItem('foo', namespace)).toEqual('bar'); - }); - it('should remove item for key', () => { - persistance.setItem('foo', 'bar'); - persistance.removeItem('foo', namespace); - expect(persistance.getItem('foo')).toEqual('bar'); - expect(persistance.getItem('foo', namespace)).toEqual(undefined); - }); - it('should update item for key', () => { - persistance.setItem('foo', 'bar1', namespace); - persistance.setItem('foo', 'bar2', namespace); - expect(persistance.getItem('foo', namespace)).toEqual('bar2'); - }); - - it('should contain key value on removed another key', () => { - persistance.setItem('foo', 'bar', namespace); - persistance.setItem('bar', 'foo', namespace); - persistance.removeItem('foo', namespace); - expect(persistance.getItem('foo', namespace)).toEqual(undefined); - expect(persistance.getItem('bar', namespace)).toEqual('foo'); - }); - it('should not contain key value clear', () => { - persistance.setItem('foo', 'bar', namespace); - persistance.setItem('bar', 'foo', namespace); - persistance.clear(namespace); - expect(persistance.getItem('foo', namespace)).toEqual(undefined); - expect(persistance.getItem('bar', namespace)).toEqual(undefined); - }); -}); - -describe('persistance with 0 maxAge', () => { - it('should allow max age to be set to 0', () => { - const persistance = new PersistanceStore({ maxAge: 0 }); - persistance.setItem('foo', 'bar'); - expect(persistance.getItem('foo')).toEqual(undefined); - }); -}); - -function makePersistance(config: { storageType: StorageType | 'customStorage' }) { - return new PersistanceStore({ storageType: config.storageType, storage: memoryStorage }); -} diff --git a/test/unit/contentstack.spec.ts b/test/unit/contentstack.spec.ts index 38ee0e27..8e2d1e35 100644 --- a/test/unit/contentstack.spec.ts +++ b/test/unit/contentstack.spec.ts @@ -2,15 +2,40 @@ import exp = require('constants'); import * as core from '@contentstack/core'; import * as Contentstack from '../../src/lib/contentstack'; import { Stack } from '../../src/lib/stack'; -import { Region, StackConfig } from '../../src/lib/types'; +import { Policy, Region, StackConfig } from '../../src/lib/types'; import { DUMMY_URL, HOST_EU_REGION, HOST_URL } from '../utils/constant'; import { AxiosRequestConfig, AxiosResponse } from 'axios'; jest.mock('@contentstack/core'); const createHttpClientMock = >(core.httpClient); +const reqInterceptor = jest.fn(); +const resInterceptor = jest.fn(); + describe('Contentstack', () => { + beforeEach(() => + createHttpClientMock.mockReturnValue({ + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + defaults: { + host: HOST_URL, + }, + interceptors: { + request: { + use: reqInterceptor, + }, + response: { + use: resInterceptor, + }, + }, + }) + ); + afterEach(() => { + createHttpClientMock.mockReset(); + }); + const createStackInstance = (config: StackConfig) => Contentstack.Stack(config); + it('should throw error when api key is empty', (done) => { const config = { apiKey: '', @@ -142,25 +167,26 @@ describe('Contentstack', () => { done(); }); - it('should add plugins onRequest and onResponse as req and res interceptors when plugin is passed', (done) => { - const reqInterceptor = jest.fn(); - const resInterceptor = jest.fn(); + it('should add logHandler', async () => { + const mockLogHandler = jest.fn(); + const config = { + apiKey: 'apiKey', + deliveryToken: 'delivery', + environment: 'env', + region: Region.AZURE_NA, + logHandler: mockLogHandler, + cacheOptions: { + policy: Policy.IGNORE_CACHE + } + }; - createHttpClientMock.mockReturnValue({ - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - defaults: { - host: HOST_URL, - }, - interceptors: { - request: { - use: reqInterceptor, - }, - response: { - use: resInterceptor, - }, - }, - }) + const stackInstance = createStackInstance(config); + expect(stackInstance).toBeInstanceOf(Stack); + expect(mockLogHandler).not.toHaveBeenCalled(); + mockLogHandler.mockReset(); + }); + + it('should add plugins onRequest and onResponse as req and res interceptors when plugin is passed', (done) => { const mockPlugin = { onRequest: jest.fn((request) => request), diff --git a/test/unit/plugins.spec.ts b/test/unit/plugins.spec.ts deleted file mode 100644 index 0f484048..00000000 --- a/test/unit/plugins.spec.ts +++ /dev/null @@ -1,55 +0,0 @@ -import exp = require('constants'); -import * as core from '@contentstack/core'; -import { AxiosRequestConfig, AxiosResponse } from 'axios'; -import axios from 'axios'; -import MockAdapter from 'axios-mock-adapter'; -import * as Contentstack from '../../src/lib/contentstack'; -import { Stack } from '../../src/lib/stack'; -import { StackConfig } from '../../src/lib/types'; -import { MOCK_CLIENT_OPTIONS } from '../utils/constant'; - -jest.mock('axios'); - -describe('Contentstack', () => { - - it('should add plugins to stack when plugins in config is passed', async () => { - // const spy = jest.spyOn(axios.interceptors.request, 'use'); - - // spy.mockImplementationOnce((callback) => { - // // Simulate the request interceptor logic - // const modifiedConfig = callback(config); - // // Modify the config or assert as needed - // modifiedConfig.headers.Authorization = 'Bearer yourToken'; - - // return Promise.resolve(modifiedConfig); - // }); - - const client = core.httpClient(MOCK_CLIENT_OPTIONS); - const mockClient = new MockAdapter(client as any); - - mockClient.onGet('/asset/myAsset').reply(200, {}); - class CustomPlugin { - onRequest(request: AxiosRequestConfig) { - request.data = { ...request.data, key1: 'value1' }; - - return request; - } - async onResponse(request: AxiosRequestConfig, response: AxiosResponse) { - response.data = { ...response.data, assetDetails: 'addedDetails' }; - - return response; - } - } - - const stackInstance = Contentstack.Stack({ - apiKey: 'apiKey', - deliveryToken: 'delivery', - environment: 'env', - plugins: [new CustomPlugin()], - }); - - const myasset = await stackInstance.Asset('myAsset').fetch(); - console.log('🚀 ~ file: contentstack.spec.ts:195 ~ it ~ myasset:', myasset); - expect(stackInstance).toBeInstanceOf(Stack); - }); -}); From 88ec73ccffeeda9109c0ac5bfa9a5bd671a0faaa Mon Sep 17 00:00:00 2001 From: Nadeem Patwekar Date: Wed, 17 Jan 2024 15:01:06 +0530 Subject: [PATCH 4/5] chore: updates LICENSE file --- LICENSE.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE.txt b/LICENSE.txt index adddc83c..eebdf5a6 100755 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,7 +1,7 @@ The MIT License (MIT) -Copyright (c) 2016-2023 Contentstack +Copyright (c) 2016-2024 Contentstack Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From 9140a6b548a2405f0d73b11cb1979a87b85025c5 Mon Sep 17 00:00:00 2001 From: Nadeem Patwekar Date: Wed, 17 Jan 2024 15:13:22 +0530 Subject: [PATCH 5/5] chore: updates package-lock file --- .talismanrc | 2 +- package-lock.json | 456 ++-------------------------------------------- 2 files changed, 14 insertions(+), 444 deletions(-) diff --git a/.talismanrc b/.talismanrc index 05868c92..37810c2b 100644 --- a/.talismanrc +++ b/.talismanrc @@ -5,7 +5,7 @@ fileignoreconfig: - filename: test/utils/mocks.ts checksum: a1cb4b1890a584f1facd30f2a0974c97a66f91417022be79d00516338e244227 - filename: package-lock.json - checksum: 2ff3b3b65202c8337fdd9332e4361868b0c6501c297c8b264917dd7cef4531c9 + checksum: af15bd4d7d590b3f88eee77ff66a06561b03888a30bd5e2b11b899f9ba4aca00 - filename: test/typescript/taxonomy.test.ts checksum: e4bdf633e147fd60d929d379f20c814eed5f68b11421d7b53ec8826e9142de37 - filename: src/core/modules/taxonomy.js diff --git a/package-lock.json b/package-lock.json index 3fc88782..f594abb6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1859,7 +1859,7 @@ "resolved": "https://registry.npmjs.org/@contentstack/core/-/core-1.0.1.tgz", "integrity": "sha512-D2sv/5soSPEXGRntRgOzN9e0vfZGQebClfD6ghHoHQEaMyZb2Kt9V6tT/qsiz56Vcbno7X1G9j2ydaWUWLdLTQ==", "dependencies": { - "axios": "^1.6.5" + "axios": "^1.6.5", "axios-mock-adapter": "^1.22.0", "lodash": "^4.17.21", "qs": "^6.11.0", @@ -3007,159 +3007,6 @@ "node": ">= 10" } }, - "node_modules/@nx/nx-darwin-x64": { - "version": "17.2.3", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-17.2.3.tgz", - "integrity": "sha512-oabtuc8j9pzCUI1RPihyKCVvZL1gLZa+n9M0w6nkHLYBu+D+Ot1NxW2m+AT5+H8euKhr9ozk+A4BySuq+Wr+Yg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-freebsd-x64": { - "version": "17.2.3", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-17.2.3.tgz", - "integrity": "sha512-2hKiqLwBJwZT5lZ2hO/MVhCqfre746zy+QhMptwK4b6lVVdC/4x75bkQA7VoInIg7357DTem2PSyB4/0d90TaQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "17.2.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-17.2.3.tgz", - "integrity": "sha512-mG1QNFRvN4BnYbQwLhKH5ewvF70tYYsijPR40opptrJYdi0jBjv50yRgRUzrrDjkyYiBW2ARzcEPVYqP39Rltw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-arm64-gnu": { - "version": "17.2.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-17.2.3.tgz", - "integrity": "sha512-w5fbbS9wxiFG/mUd9bm3doHautyzRTk16K8a3M4t/M6c+JciTunTIivUC/rQpclyFhq0T8oKx2n7ZPHrxHIbFQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-arm64-musl": { - "version": "17.2.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-17.2.3.tgz", - "integrity": "sha512-1jupF1CJGw5DsO03/zkqhsk8vbOijf4ldpe4OrGJimKomIvtlvbUikjy7QupGBsHfg2MEs5wWa/1W5W9nYWocA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-x64-gnu": { - "version": "17.2.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-17.2.3.tgz", - "integrity": "sha512-S5eJpbUHrmQNxGmdUg2trwtajBhablyV7fArWsI/Nvhe75aVZLAVHLDuEKJgt1U9GtBU65qx+Ne25zlGC9xEQg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-x64-musl": { - "version": "17.2.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-17.2.3.tgz", - "integrity": "sha512-abLPQi1egb3/SM3HwbJkHX1Z9Mvvmf0i2FQ4/tPJFSffJhfogEBGhcP5jtrVSn5dtPwFRQgrA2zcCUVtzoxA3w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-win32-arm64-msvc": { - "version": "17.2.3", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-17.2.3.tgz", - "integrity": "sha512-dIIKVRBjz6DXpZGbljJ7g3jd2T1tkCl7xnqHARpvrBvOPHucKbmm2aK43AdM/uEorfGHR0J+SqDb8uVUVeE9CQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-win32-x64-msvc": { - "version": "17.2.3", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-17.2.3.tgz", - "integrity": "sha512-E9nNdHHQLhyZd/sOewAko3ZIgK4mrAmNKVcb1bVVYMgKad786OjMoUkQbDobgEV6pO4hKvQXGDFXg4bNwpT6Qw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, "node_modules/@nx/workspace": { "version": "16.10.0", "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-16.10.0.tgz", @@ -3206,150 +3053,6 @@ "node": ">= 10" } }, - "node_modules/@nx/workspace/node_modules/@nx/nx-darwin-x64": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-16.10.0.tgz", - "integrity": "sha512-ypi6YxwXgb0kg2ixKXE3pwf5myVNUgWf1CsV5OzVccCM8NzheMO51KDXTDmEpXdzUsfT0AkO1sk5GZeCjhVONg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/workspace/node_modules/@nx/nx-freebsd-x64": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-16.10.0.tgz", - "integrity": "sha512-UeEYFDmdbbDkTQamqvtU8ibgu5jQLgFF1ruNb/U4Ywvwutw2d4ruOMl2e0u9hiNja9NFFAnDbvzrDcMo7jYqYw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/workspace/node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.10.0.tgz", - "integrity": "sha512-WV3XUC2DB6/+bz1sx+d1Ai9q2Cdr+kTZRN50SOkfmZUQyEBaF6DRYpx/a4ahhxH3ktpNfyY8Maa9OEYxGCBkQA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/workspace/node_modules/@nx/nx-linux-arm64-gnu": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.10.0.tgz", - "integrity": "sha512-aWIkOUw995V3ItfpAi5FuxQ+1e9EWLS1cjWM1jmeuo+5WtaKToJn5itgQOkvSlPz+HSLgM3VfXMvOFALNk125g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/workspace/node_modules/@nx/nx-linux-arm64-musl": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.10.0.tgz", - "integrity": "sha512-uO6Gg+irqpVcCKMcEPIQcTFZ+tDI02AZkqkP7koQAjniLEappd8DnUBSQdcn53T086pHpdc264X/ZEpXFfrKWQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/workspace/node_modules/@nx/nx-linux-x64-gnu": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.10.0.tgz", - "integrity": "sha512-134PW/u/arNFAQKpqMJniC7irbChMPz+W+qtyKPAUXE0XFKPa7c1GtlI/wK2dvP9qJDZ6bKf0KtA0U/m2HMUOA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/workspace/node_modules/@nx/nx-linux-x64-musl": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.10.0.tgz", - "integrity": "sha512-q8sINYLdIJxK/iUx9vRk5jWAWb/2O0PAbOJFwv4qkxBv4rLoN7y+otgCZ5v0xfx/zztFgk/oNY4lg5xYjIso2Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/workspace/node_modules/@nx/nx-win32-arm64-msvc": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.10.0.tgz", - "integrity": "sha512-moJkL9kcqxUdJSRpG7dET3UeLIciwrfP08mzBQ12ewo8K8FzxU8ZUsTIVVdNrwt01CXOdXoweGfdQLjJ4qTURA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/workspace/node_modules/@nx/nx-win32-x64-msvc": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.10.0.tgz", - "integrity": "sha512-5iV2NKZnzxJwZZ4DM5JVbRG/nkhAbzEskKaLBB82PmYGKzaDHuMHP1lcPoD/rtYMlowZgNA/RQndfKvPBPwmXA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, "node_modules/@nx/workspace/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -9869,14 +9572,15 @@ } }, "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", + "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", "dependencies": { "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.2", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -13386,78 +13090,6 @@ "optional": true, "peer": true }, - "@nx/nx-darwin-x64": { - "version": "17.2.3", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-17.2.3.tgz", - "integrity": "sha512-oabtuc8j9pzCUI1RPihyKCVvZL1gLZa+n9M0w6nkHLYBu+D+Ot1NxW2m+AT5+H8euKhr9ozk+A4BySuq+Wr+Yg==", - "dev": true, - "optional": true, - "peer": true - }, - "@nx/nx-freebsd-x64": { - "version": "17.2.3", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-17.2.3.tgz", - "integrity": "sha512-2hKiqLwBJwZT5lZ2hO/MVhCqfre746zy+QhMptwK4b6lVVdC/4x75bkQA7VoInIg7357DTem2PSyB4/0d90TaQ==", - "dev": true, - "optional": true, - "peer": true - }, - "@nx/nx-linux-arm-gnueabihf": { - "version": "17.2.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-17.2.3.tgz", - "integrity": "sha512-mG1QNFRvN4BnYbQwLhKH5ewvF70tYYsijPR40opptrJYdi0jBjv50yRgRUzrrDjkyYiBW2ARzcEPVYqP39Rltw==", - "dev": true, - "optional": true, - "peer": true - }, - "@nx/nx-linux-arm64-gnu": { - "version": "17.2.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-17.2.3.tgz", - "integrity": "sha512-w5fbbS9wxiFG/mUd9bm3doHautyzRTk16K8a3M4t/M6c+JciTunTIivUC/rQpclyFhq0T8oKx2n7ZPHrxHIbFQ==", - "dev": true, - "optional": true, - "peer": true - }, - "@nx/nx-linux-arm64-musl": { - "version": "17.2.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-17.2.3.tgz", - "integrity": "sha512-1jupF1CJGw5DsO03/zkqhsk8vbOijf4ldpe4OrGJimKomIvtlvbUikjy7QupGBsHfg2MEs5wWa/1W5W9nYWocA==", - "dev": true, - "optional": true, - "peer": true - }, - "@nx/nx-linux-x64-gnu": { - "version": "17.2.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-17.2.3.tgz", - "integrity": "sha512-S5eJpbUHrmQNxGmdUg2trwtajBhablyV7fArWsI/Nvhe75aVZLAVHLDuEKJgt1U9GtBU65qx+Ne25zlGC9xEQg==", - "dev": true, - "optional": true, - "peer": true - }, - "@nx/nx-linux-x64-musl": { - "version": "17.2.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-17.2.3.tgz", - "integrity": "sha512-abLPQi1egb3/SM3HwbJkHX1Z9Mvvmf0i2FQ4/tPJFSffJhfogEBGhcP5jtrVSn5dtPwFRQgrA2zcCUVtzoxA3w==", - "dev": true, - "optional": true, - "peer": true - }, - "@nx/nx-win32-arm64-msvc": { - "version": "17.2.3", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-17.2.3.tgz", - "integrity": "sha512-dIIKVRBjz6DXpZGbljJ7g3jd2T1tkCl7xnqHARpvrBvOPHucKbmm2aK43AdM/uEorfGHR0J+SqDb8uVUVeE9CQ==", - "dev": true, - "optional": true, - "peer": true - }, - "@nx/nx-win32-x64-msvc": { - "version": "17.2.3", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-17.2.3.tgz", - "integrity": "sha512-E9nNdHHQLhyZd/sOewAko3ZIgK4mrAmNKVcb1bVVYMgKad786OjMoUkQbDobgEV6pO4hKvQXGDFXg4bNwpT6Qw==", - "dev": true, - "optional": true, - "peer": true - }, "@nx/workspace": { "version": "16.10.0", "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-16.10.0.tgz", @@ -13492,69 +13124,6 @@ "dev": true, "optional": true }, - "@nx/nx-darwin-x64": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-16.10.0.tgz", - "integrity": "sha512-ypi6YxwXgb0kg2ixKXE3pwf5myVNUgWf1CsV5OzVccCM8NzheMO51KDXTDmEpXdzUsfT0AkO1sk5GZeCjhVONg==", - "dev": true, - "optional": true - }, - "@nx/nx-freebsd-x64": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-16.10.0.tgz", - "integrity": "sha512-UeEYFDmdbbDkTQamqvtU8ibgu5jQLgFF1ruNb/U4Ywvwutw2d4ruOMl2e0u9hiNja9NFFAnDbvzrDcMo7jYqYw==", - "dev": true, - "optional": true - }, - "@nx/nx-linux-arm-gnueabihf": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.10.0.tgz", - "integrity": "sha512-WV3XUC2DB6/+bz1sx+d1Ai9q2Cdr+kTZRN50SOkfmZUQyEBaF6DRYpx/a4ahhxH3ktpNfyY8Maa9OEYxGCBkQA==", - "dev": true, - "optional": true - }, - "@nx/nx-linux-arm64-gnu": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.10.0.tgz", - "integrity": "sha512-aWIkOUw995V3ItfpAi5FuxQ+1e9EWLS1cjWM1jmeuo+5WtaKToJn5itgQOkvSlPz+HSLgM3VfXMvOFALNk125g==", - "dev": true, - "optional": true - }, - "@nx/nx-linux-arm64-musl": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.10.0.tgz", - "integrity": "sha512-uO6Gg+irqpVcCKMcEPIQcTFZ+tDI02AZkqkP7koQAjniLEappd8DnUBSQdcn53T086pHpdc264X/ZEpXFfrKWQ==", - "dev": true, - "optional": true - }, - "@nx/nx-linux-x64-gnu": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.10.0.tgz", - "integrity": "sha512-134PW/u/arNFAQKpqMJniC7irbChMPz+W+qtyKPAUXE0XFKPa7c1GtlI/wK2dvP9qJDZ6bKf0KtA0U/m2HMUOA==", - "dev": true, - "optional": true - }, - "@nx/nx-linux-x64-musl": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.10.0.tgz", - "integrity": "sha512-q8sINYLdIJxK/iUx9vRk5jWAWb/2O0PAbOJFwv4qkxBv4rLoN7y+otgCZ5v0xfx/zztFgk/oNY4lg5xYjIso2Q==", - "dev": true, - "optional": true - }, - "@nx/nx-win32-arm64-msvc": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.10.0.tgz", - "integrity": "sha512-moJkL9kcqxUdJSRpG7dET3UeLIciwrfP08mzBQ12ewo8K8FzxU8ZUsTIVVdNrwt01CXOdXoweGfdQLjJ4qTURA==", - "dev": true, - "optional": true - }, - "@nx/nx-win32-x64-msvc": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.10.0.tgz", - "integrity": "sha512-5iV2NKZnzxJwZZ4DM5JVbRG/nkhAbzEskKaLBB82PmYGKzaDHuMHP1lcPoD/rtYMlowZgNA/RQndfKvPBPwmXA==", - "dev": true, - "optional": true - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -18442,14 +18011,15 @@ } }, "set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", + "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", "requires": { "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.2", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.1" } }, "shallow-clone": {