From fe0fda63c32eadafcb12c56a5fbe348994f6d3c5 Mon Sep 17 00:00:00 2001 From: Nadeem Patwekar Date: Thu, 4 Sep 2025 16:39:58 +0530 Subject: [PATCH 01/26] refactor: update package dependencies and improve stack configuration - Changed dependencies in package.json to use local tarball files for @contentstack/core and @contentstack/utils. - Updated versions of various dependencies in package-lock.json, including @slack/oauth, @slack/socket-mode, browserslist, caniuse-lite, electron-to-chromium, path-to-regexp, rollup, and terser. - Modified contentstack.ts to enhance request handling by utilizing internal Axios request configuration. - Updated StackConfig interface in types.ts to change the type of region from Region enum to string for better flexibility. --- .talismanrc | 2 +- package-lock.json | 257 +++++++++++++++++++++------------------- package.json | 4 +- src/lib/contentstack.ts | 28 ++++- src/lib/types.ts | 2 +- 5 files changed, 163 insertions(+), 130 deletions(-) diff --git a/.talismanrc b/.talismanrc index 65ba1636..8f7e1417 100644 --- a/.talismanrc +++ b/.talismanrc @@ -1,6 +1,6 @@ fileignoreconfig: - filename: package-lock.json - checksum: dffbcb14c5761976a9b6ab90b96c7e4fc5784eebe381cf48014618cc93355dbc + checksum: 2f932522b599050c23c6a2490897301a3efd9258f0c8bef512d099960c76617f - filename: test/unit/query-optimization-comprehensive.spec.ts checksum: f5aaf6c784d7c101a05ca513c584bbd6e95f963d1e42779f2596050d9bcbac96 version: "" diff --git a/package-lock.json b/package-lock.json index b07ed718..49b1fa3e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,8 +9,8 @@ "version": "4.9.0", "license": "MIT", "dependencies": { - "@contentstack/core": "^1.3.0", - "@contentstack/utils": "^1.4.1", + "@contentstack/core": "file:../contentstack-js-core/contentstack-core-1.2.4.tgz", + "@contentstack/utils": "file:../../contentstack-utils-javascript/contentstack-utils-1.5.0.tgz", "axios": "^1.11.0", "humps": "^2.0.1" }, @@ -1903,9 +1903,9 @@ "license": "MIT" }, "node_modules/@contentstack/core": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@contentstack/core/-/core-1.3.0.tgz", - "integrity": "sha512-WT1+o9Vv42gKMIqy0sel6tD6OyIY681hawB4sstrioBfxpN3HaE2b/MxQpuSq259vbddoleG4525Dwpq9uAEcw==", + "version": "1.2.4", + "resolved": "file:../contentstack-js-core/contentstack-core-1.2.4.tgz", + "integrity": "sha512-9kgdyfSRNAE+ulq6bMNPUjlY7+mQ/hSnyRu3M9FDGr5hUWLMfwW2JvvMNWv9bpxSwDSUahgw9sYE5yRVZOXPsg==", "license": "MIT", "dependencies": { "axios": "^1.11.0", @@ -1930,9 +1930,9 @@ } }, "node_modules/@contentstack/utils": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@contentstack/utils/-/utils-1.4.1.tgz", - "integrity": "sha512-P/1Xk3kku1WUHPd+djjZq1NQrUP/OhmiMLRkdNzixMaS4U9LXEJP6iU02YoYnXXjlFuI2dz/OzthCoI5/DPWQQ==", + "version": "1.5.0", + "resolved": "file:../../contentstack-utils-javascript/contentstack-utils-1.5.0.tgz", + "integrity": "sha512-PM3e4Iru4YcWODZHewtiLg3IoPGaNtOwQUyqS54qjLw8y7s/5rzK4DEwaeHaPVWh2JvuyVbUbY+QL8lGthFX1A==", "license": "MIT" }, "node_modules/@cspotcode/source-map-support": { @@ -3660,9 +3660,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.48.1.tgz", - "integrity": "sha512-rGmb8qoG/zdmKoYELCBwu7vt+9HxZ7Koos3pD0+sH5fR3u3Wb/jGcpnqxcnWsPEKDUyzeLSqksN8LJtgXjqBYw==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.50.0.tgz", + "integrity": "sha512-lVgpeQyy4fWN5QYebtW4buT/4kn4p4IJ+kDNB4uYNT5b8c8DLJDg6titg20NIg7E8RWwdWZORW6vUFfrLyG3KQ==", "cpu": [ "arm" ], @@ -3674,9 +3674,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.48.1.tgz", - "integrity": "sha512-4e9WtTxrk3gu1DFE+imNJr4WsL13nWbD/Y6wQcyku5qadlKHY3OQ3LJ/INrrjngv2BJIHnIzbqMk1GTAC2P8yQ==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.50.0.tgz", + "integrity": "sha512-2O73dR4Dc9bp+wSYhviP6sDziurB5/HCym7xILKifWdE9UsOe2FtNcM+I4xZjKrfLJnq5UR8k9riB87gauiQtw==", "cpu": [ "arm64" ], @@ -3688,9 +3688,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.48.1.tgz", - "integrity": "sha512-+XjmyChHfc4TSs6WUQGmVf7Hkg8ferMAE2aNYYWjiLzAS/T62uOsdfnqv+GHRjq7rKRnYh4mwWb4Hz7h/alp8A==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.50.0.tgz", + "integrity": "sha512-vwSXQN8T4sKf1RHr1F0s98Pf8UPz7pS6P3LG9NSmuw0TVh7EmaE+5Ny7hJOZ0M2yuTctEsHHRTMi2wuHkdS6Hg==", "cpu": [ "arm64" ], @@ -3702,9 +3702,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.48.1.tgz", - "integrity": "sha512-upGEY7Ftw8M6BAJyGwnwMw91rSqXTcOKZnnveKrVWsMTF8/k5mleKSuh7D4v4IV1pLxKAk3Tbs0Lo9qYmii5mQ==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.50.0.tgz", + "integrity": "sha512-cQp/WG8HE7BCGyFVuzUg0FNmupxC+EPZEwWu2FCGGw5WDT1o2/YlENbm5e9SMvfDFR6FRhVCBePLqj0o8MN7Vw==", "cpu": [ "x64" ], @@ -3716,9 +3716,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.48.1.tgz", - "integrity": "sha512-P9ViWakdoynYFUOZhqq97vBrhuvRLAbN/p2tAVJvhLb8SvN7rbBnJQcBu8e/rQts42pXGLVhfsAP0k9KXWa3nQ==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.50.0.tgz", + "integrity": "sha512-UR1uTJFU/p801DvvBbtDD7z9mQL8J80xB0bR7DqW7UGQHRm/OaKzp4is7sQSdbt2pjjSS72eAtRh43hNduTnnQ==", "cpu": [ "arm64" ], @@ -3730,9 +3730,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.48.1.tgz", - "integrity": "sha512-VLKIwIpnBya5/saccM8JshpbxfyJt0Dsli0PjXozHwbSVaHTvWXJH1bbCwPXxnMzU4zVEfgD1HpW3VQHomi2AQ==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.50.0.tgz", + "integrity": "sha512-G/DKyS6PK0dD0+VEzH/6n/hWDNPDZSMBmqsElWnCRGrYOb2jC0VSupp7UAHHQ4+QILwkxSMaYIbQ72dktp8pKA==", "cpu": [ "x64" ], @@ -3744,9 +3744,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.48.1.tgz", - "integrity": "sha512-3zEuZsXfKaw8n/yF7t8N6NNdhyFw3s8xJTqjbTDXlipwrEHo4GtIKcMJr5Ed29leLpB9AugtAQpAHW0jvtKKaQ==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.50.0.tgz", + "integrity": "sha512-u72Mzc6jyJwKjJbZZcIYmd9bumJu7KNmHYdue43vT1rXPm2rITwmPWF0mmPzLm9/vJWxIRbao/jrQmxTO0Sm9w==", "cpu": [ "arm" ], @@ -3758,9 +3758,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.48.1.tgz", - "integrity": "sha512-leo9tOIlKrcBmmEypzunV/2w946JeLbTdDlwEZ7OnnsUyelZ72NMnT4B2vsikSgwQifjnJUbdXzuW4ToN1wV+Q==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.50.0.tgz", + "integrity": "sha512-S4UefYdV0tnynDJV1mdkNawp0E5Qm2MtSs330IyHgaccOFrwqsvgigUD29uT+B/70PDY1eQ3t40+xf6wIvXJyg==", "cpu": [ "arm" ], @@ -3772,9 +3772,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.48.1.tgz", - "integrity": "sha512-Vy/WS4z4jEyvnJm+CnPfExIv5sSKqZrUr98h03hpAMbE2aI0aD2wvK6GiSe8Gx2wGp3eD81cYDpLLBqNb2ydwQ==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.50.0.tgz", + "integrity": "sha512-1EhkSvUQXJsIhk4msxP5nNAUWoB4MFDHhtc4gAYvnqoHlaL9V3F37pNHabndawsfy/Tp7BPiy/aSa6XBYbaD1g==", "cpu": [ "arm64" ], @@ -3786,9 +3786,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.48.1.tgz", - "integrity": "sha512-x5Kzn7XTwIssU9UYqWDB9VpLpfHYuXw5c6bJr4Mzv9kIv242vmJHbI5PJJEnmBYitUIfoMCODDhR7KoZLot2VQ==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.50.0.tgz", + "integrity": "sha512-EtBDIZuDtVg75xIPIK1l5vCXNNCIRM0OBPUG+tbApDuJAy9mKago6QxX+tfMzbCI6tXEhMuZuN1+CU8iDW+0UQ==", "cpu": [ "arm64" ], @@ -3800,9 +3800,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.48.1.tgz", - "integrity": "sha512-yzCaBbwkkWt/EcgJOKDUdUpMHjhiZT/eDktOPWvSRpqrVE04p0Nd6EGV4/g7MARXXeOqstflqsKuXVM3H9wOIQ==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.50.0.tgz", + "integrity": "sha512-BGYSwJdMP0hT5CCmljuSNx7+k+0upweM2M4YGfFBjnFSZMHOLYR0gEEj/dxyYJ6Zc6AiSeaBY8dWOa11GF/ppQ==", "cpu": [ "loong64" ], @@ -3814,9 +3814,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.48.1.tgz", - "integrity": "sha512-UK0WzWUjMAJccHIeOpPhPcKBqax7QFg47hwZTp6kiMhQHeOYJeaMwzeRZe1q5IiTKsaLnHu9s6toSYVUlZ2QtQ==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.50.0.tgz", + "integrity": "sha512-I1gSMzkVe1KzAxKAroCJL30hA4DqSi+wGc5gviD0y3IL/VkvcnAqwBf4RHXHyvH66YVHxpKO8ojrgc4SrWAnLg==", "cpu": [ "ppc64" ], @@ -3828,9 +3828,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.48.1.tgz", - "integrity": "sha512-3NADEIlt+aCdCbWVZ7D3tBjBX1lHpXxcvrLt/kdXTiBrOds8APTdtk2yRL2GgmnSVeX4YS1JIf0imFujg78vpw==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.50.0.tgz", + "integrity": "sha512-bSbWlY3jZo7molh4tc5dKfeSxkqnf48UsLqYbUhnkdnfgZjgufLS/NTA8PcP/dnvct5CCdNkABJ56CbclMRYCA==", "cpu": [ "riscv64" ], @@ -3842,9 +3842,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.48.1.tgz", - "integrity": "sha512-euuwm/QTXAMOcyiFCcrx0/S2jGvFlKJ2Iro8rsmYL53dlblp3LkUQVFzEidHhvIPPvcIsxDhl2wkBE+I6YVGzA==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.50.0.tgz", + "integrity": "sha512-LSXSGumSURzEQLT2e4sFqFOv3LWZsEF8FK7AAv9zHZNDdMnUPYH3t8ZlaeYYZyTXnsob3htwTKeWtBIkPV27iQ==", "cpu": [ "riscv64" ], @@ -3856,9 +3856,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.48.1.tgz", - "integrity": "sha512-w8mULUjmPdWLJgmTYJx/W6Qhln1a+yqvgwmGXcQl2vFBkWsKGUBRbtLRuKJUln8Uaimf07zgJNxOhHOvjSQmBQ==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.50.0.tgz", + "integrity": "sha512-CxRKyakfDrsLXiCyucVfVWVoaPA4oFSpPpDwlMcDFQvrv3XY6KEzMtMZrA+e/goC8xxp2WSOxHQubP8fPmmjOQ==", "cpu": [ "s390x" ], @@ -3870,9 +3870,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.48.1.tgz", - "integrity": "sha512-90taWXCWxTbClWuMZD0DKYohY1EovA+W5iytpE89oUPmT5O1HFdf8cuuVIylE6vCbrGdIGv85lVRzTcpTRZ+kA==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.50.0.tgz", + "integrity": "sha512-8PrJJA7/VU8ToHVEPu14FzuSAqVKyo5gg/J8xUerMbyNkWkO9j2ExBho/68RnJsMGNJq4zH114iAttgm7BZVkA==", "cpu": [ "x64" ], @@ -3884,9 +3884,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.48.1.tgz", - "integrity": "sha512-2Gu29SkFh1FfTRuN1GR1afMuND2GKzlORQUP3mNMJbqdndOg7gNsa81JnORctazHRokiDzQ5+MLE5XYmZW5VWg==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.50.0.tgz", + "integrity": "sha512-SkE6YQp+CzpyOrbw7Oc4MgXFvTw2UIBElvAvLCo230pyxOLmYwRPwZ/L5lBe/VW/qT1ZgND9wJfOsdy0XptRvw==", "cpu": [ "x64" ], @@ -3897,10 +3897,24 @@ "linux" ] }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.50.0.tgz", + "integrity": "sha512-PZkNLPfvXeIOgJWA804zjSFH7fARBBCpCXxgkGDRjjAhRLOR8o0IGS01ykh5GYfod4c2yiiREuDM8iZ+pVsT+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.48.1.tgz", - "integrity": "sha512-6kQFR1WuAO50bxkIlAVeIYsz3RUx+xymwhTo9j94dJ+kmHe9ly7muH23sdfWduD0BA8pD9/yhonUvAjxGh34jQ==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.50.0.tgz", + "integrity": "sha512-q7cIIdFvWQoaCbLDUyUc8YfR3Jh2xx3unO8Dn6/TTogKjfwrax9SyfmGGK6cQhKtjePI7jRfd7iRYcxYs93esg==", "cpu": [ "arm64" ], @@ -3912,9 +3926,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.48.1.tgz", - "integrity": "sha512-RUyZZ/mga88lMI3RlXFs4WQ7n3VyU07sPXmMG7/C1NOi8qisUg57Y7LRarqoGoAiopmGmChUhSwfpvQ3H5iGSQ==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.50.0.tgz", + "integrity": "sha512-XzNOVg/YnDOmFdDKcxxK410PrcbcqZkBmz+0FicpW5jtjKQxcW1BZJEQOF0NJa6JO7CZhett8GEtRN/wYLYJuw==", "cpu": [ "ia32" ], @@ -3926,9 +3940,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.48.1.tgz", - "integrity": "sha512-8a/caCUN4vkTChxkaIJcMtwIVcBhi4X2PQRoT+yCK3qRYaZ7cURrmJFL5Ux9H9RaMIXj9RuihckdmkBX3zZsgg==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.50.0.tgz", + "integrity": "sha512-xMmiWRR8sp72Zqwjgtf3QbZfF1wdh8X2ABu3EaozvZcyHJeU0r+XAnXdKgs4cCAp6ORoYoCygipYP1mjmbjrsg==", "cpu": [ "x64" ], @@ -4007,18 +4021,17 @@ } }, "node_modules/@slack/oauth": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@slack/oauth/-/oauth-3.0.3.tgz", - "integrity": "sha512-N3pLJPacZ57bqmD1HzHDmHe/CNsL9pESZXRw7pfv6QXJVRgufPIW84aRpAez2Xb0616RpGBYZW5dZH0Nbskwyg==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@slack/oauth/-/oauth-3.0.4.tgz", + "integrity": "sha512-+8H0g7mbrHndEUbYCP7uYyBCbwqmm3E6Mo3nfsDvZZW74zKk1ochfH/fWSvGInYNCVvaBUbg3RZBbTp0j8yJCg==", "dev": true, "license": "MIT", "dependencies": { "@slack/logger": "^4", - "@slack/web-api": "^7.9.1", + "@slack/web-api": "^7.10.0", "@types/jsonwebtoken": "^9", "@types/node": ">=18", - "jsonwebtoken": "^9", - "lodash.isstring": "^4" + "jsonwebtoken": "^9" }, "engines": { "node": ">=18", @@ -4026,14 +4039,14 @@ } }, "node_modules/@slack/socket-mode": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@slack/socket-mode/-/socket-mode-2.0.4.tgz", - "integrity": "sha512-PB2fO4TSv47TXJ6WlKY7BeVNdcHcpPOxZsztGyG7isWXp69MVj+xAzQ3KSZ8aVTgV59f8xFJPXSHipn1x2Z5IQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@slack/socket-mode/-/socket-mode-2.0.5.tgz", + "integrity": "sha512-VaapvmrAifeFLAFaDPfGhEwwunTKsI6bQhYzxRXw7BSujZUae5sANO76WqlVsLXuhVtCVrBWPiS2snAQR2RHJQ==", "dev": true, "license": "MIT", "dependencies": { "@slack/logger": "^4", - "@slack/web-api": "^7.9.1", + "@slack/web-api": "^7.10.0", "@types/node": ">=18", "@types/ws": "^8", "eventemitter3": "^5", @@ -5304,9 +5317,9 @@ } }, "node_modules/browserslist": { - "version": "4.25.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.3.tgz", - "integrity": "sha512-cDGv1kkDI4/0e5yON9yM5G/0A5u8sf5TnmdX5C9qHzI9PPu++sQ9zjm1k9NiOrf3riY4OkK0zSGqfvJyJsgCBQ==", + "version": "4.25.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.4.tgz", + "integrity": "sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg==", "dev": true, "funding": [ { @@ -5324,8 +5337,8 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001735", - "electron-to-chromium": "^1.5.204", + "caniuse-lite": "^1.0.30001737", + "electron-to-chromium": "^1.5.211", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.3" }, @@ -5484,9 +5497,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001737", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001737.tgz", - "integrity": "sha512-BiloLiXtQNrY5UyF0+1nSJLXUENuhka2pzy2Fx5pGxqavdrxSCW4U6Pn/PoG3Efspi2frRbHpBV2XsrPE6EDlw==", + "version": "1.0.30001739", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001739.tgz", + "integrity": "sha512-y+j60d6ulelrNSwpPyrHdl+9mJnQzHBr08xm48Qno0nSk4h3Qojh+ziv2qE6rXf4k3tadF4o1J/1tAbVm1NtnA==", "dev": true, "funding": [ { @@ -6153,9 +6166,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.208", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.208.tgz", - "integrity": "sha512-ozZyibehoe7tOhNaf16lKmljVf+3npZcJIEbJRVftVsmAg5TeA1mGS9dVCZzOwr2xT7xK15V0p7+GZqSPgkuPg==", + "version": "1.5.213", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.213.tgz", + "integrity": "sha512-xr9eRzSLNa4neDO0xVFrkXu3vyIzG4Ay08dApecw42Z1NbmCt+keEpXdvlYGVe0wtvY5dhW0Ay0lY0IOfsCg0Q==", "dev": true, "license": "ISC" }, @@ -9796,13 +9809,14 @@ "license": "ISC" }, "node_modules/path-to-regexp": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", - "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=16" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/path-type": { @@ -10307,9 +10321,9 @@ } }, "node_modules/rollup": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.48.1.tgz", - "integrity": "sha512-jVG20NvbhTYDkGAty2/Yh7HK6/q3DGSRH4o8ALKGArmMuaauM9kLfoMZ+WliPwA5+JHr2lTn3g557FxBV87ifg==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.50.0.tgz", + "integrity": "sha512-/Zl4D8zPifNmyGzJS+3kVoyXeDeT/GrsJM94sACNg9RtUE0hrHa1bNPtRSrfHTMH5HjRzce6K7rlTh3Khiw+pw==", "dev": true, "license": "MIT", "dependencies": { @@ -10323,26 +10337,27 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.48.1", - "@rollup/rollup-android-arm64": "4.48.1", - "@rollup/rollup-darwin-arm64": "4.48.1", - "@rollup/rollup-darwin-x64": "4.48.1", - "@rollup/rollup-freebsd-arm64": "4.48.1", - "@rollup/rollup-freebsd-x64": "4.48.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.48.1", - "@rollup/rollup-linux-arm-musleabihf": "4.48.1", - "@rollup/rollup-linux-arm64-gnu": "4.48.1", - "@rollup/rollup-linux-arm64-musl": "4.48.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.48.1", - "@rollup/rollup-linux-ppc64-gnu": "4.48.1", - "@rollup/rollup-linux-riscv64-gnu": "4.48.1", - "@rollup/rollup-linux-riscv64-musl": "4.48.1", - "@rollup/rollup-linux-s390x-gnu": "4.48.1", - "@rollup/rollup-linux-x64-gnu": "4.48.1", - "@rollup/rollup-linux-x64-musl": "4.48.1", - "@rollup/rollup-win32-arm64-msvc": "4.48.1", - "@rollup/rollup-win32-ia32-msvc": "4.48.1", - "@rollup/rollup-win32-x64-msvc": "4.48.1", + "@rollup/rollup-android-arm-eabi": "4.50.0", + "@rollup/rollup-android-arm64": "4.50.0", + "@rollup/rollup-darwin-arm64": "4.50.0", + "@rollup/rollup-darwin-x64": "4.50.0", + "@rollup/rollup-freebsd-arm64": "4.50.0", + "@rollup/rollup-freebsd-x64": "4.50.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.50.0", + "@rollup/rollup-linux-arm-musleabihf": "4.50.0", + "@rollup/rollup-linux-arm64-gnu": "4.50.0", + "@rollup/rollup-linux-arm64-musl": "4.50.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.50.0", + "@rollup/rollup-linux-ppc64-gnu": "4.50.0", + "@rollup/rollup-linux-riscv64-gnu": "4.50.0", + "@rollup/rollup-linux-riscv64-musl": "4.50.0", + "@rollup/rollup-linux-s390x-gnu": "4.50.0", + "@rollup/rollup-linux-x64-gnu": "4.50.0", + "@rollup/rollup-linux-x64-musl": "4.50.0", + "@rollup/rollup-openharmony-arm64": "4.50.0", + "@rollup/rollup-win32-arm64-msvc": "4.50.0", + "@rollup/rollup-win32-ia32-msvc": "4.50.0", + "@rollup/rollup-win32-x64-msvc": "4.50.0", "fsevents": "~2.3.2" } }, @@ -10974,15 +10989,15 @@ } }, "node_modules/terser": { - "version": "5.43.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", - "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.0.tgz", + "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==", "dev": true, "license": "BSD-2-Clause", "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.14.0", + "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, diff --git a/package.json b/package.json index 7672c848..060c30f0 100644 --- a/package.json +++ b/package.json @@ -35,8 +35,8 @@ "husky-check": "npm run build && husky && chmod +x .husky/pre-commit" }, "dependencies": { - "@contentstack/core": "^1.3.0", - "@contentstack/utils": "^1.4.1", + "@contentstack/core": "file:../contentstack-js-core/contentstack-core-1.2.4.tgz", + "@contentstack/utils": "file:../../contentstack-utils-javascript/contentstack-utils-1.5.0.tgz", "axios": "^1.11.0", "humps": "^2.0.1" }, diff --git a/src/lib/contentstack.ts b/src/lib/contentstack.ts index c6d62f4f..7f6ab039 100644 --- a/src/lib/contentstack.ts +++ b/src/lib/contentstack.ts @@ -1,10 +1,11 @@ import { httpClient, retryRequestHandler, retryResponseErrorHandler, retryResponseHandler } from '@contentstack/core'; -import { AxiosRequestHeaders } from 'axios'; +import { AxiosRequestHeaders, InternalAxiosRequestConfig } from 'axios'; import { handleRequest } from './cache'; import { Stack as StackClass } from './stack'; import { Policy, StackConfig } from './types'; import * as Utility from './utils'; -export * as Utils from '@contentstack/utils'; +import * as Utils from '@contentstack/utils'; +export { Utils }; let version = '{{VERSION}}'; @@ -34,7 +35,6 @@ let version = '{{VERSION}}'; // eslint-disable-next-line @typescript-eslint/naming-convention export function stack(config: StackConfig): StackClass { let defaultConfig = { - defaultHostname: 'cdn.contentstack.io', headers: {} as AxiosRequestHeaders, params: {} as any, live_preview: {} as any, @@ -42,8 +42,8 @@ export function stack(config: StackConfig): StackClass { ...config }; - defaultConfig.defaultHostname = config.host || Utility.getHost(config.region, config.host); - config.host = defaultConfig.defaultHostname; + // defaultConfig.defaultHostname = config.host || Utility.getHost(config.region, config.host); + // config.host = defaultConfig.defaultHostname; if (config.apiKey) { defaultConfig.headers.api_key = config.apiKey; @@ -111,6 +111,24 @@ export function stack(config: StackConfig): StackClass { client.interceptors.request.use(retryRequestHandler); client.interceptors.response.use(retryResponseHandler, errorHandler); + client.interceptors.request.use( + async (reqConfig: InternalAxiosRequestConfig): Promise => { + if (config.region) { + const hostt = await Utils.getContentstackEndpoint(config.region, 'CDA', true); + config.defaultHostname = hostt as string; + const protocol = config.insecure ? 'http' : 'https'; + const hostname = config.defaultHostname; + const port = config.port || 443; + const version = config.version || 'v3'; + + reqConfig.baseURL = config.endpoint || `${protocol}://${hostname}:${port}/${version}`; + } else { + reqConfig.baseURL = 'https://cdn.contentstack.io:443/v3'; + } + + return reqConfig; + }); + if (config.plugins) { client.interceptors.request.use((reqConfig: any): any => { if (config && config.plugins) diff --git a/src/lib/types.ts b/src/lib/types.ts index f9c0fd5f..ab9a5eb8 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -28,7 +28,7 @@ export interface StackConfig extends HttpClientParams { environment: string; branch?: string; early_access?: string[]; - region?: Region; + region?: string; locale?: string; plugins?: any[]; logHandler?: (level: string, data: any) => void; From 3094bc1f57a50ba06d061107b75406220f16671f Mon Sep 17 00:00:00 2001 From: "harshitha.d" Date: Mon, 27 Oct 2025 18:33:35 +0530 Subject: [PATCH 02/26] chore: update to version 4.10.1 and upgrade dependencies --- CHANGELOG.md | 4 + package-lock.json | 927 +++++++++++++++++++++++----------------------- package.json | 6 +- 3 files changed, 479 insertions(+), 458 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b0700ef2..9c38140b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +### Version: 4.10.1 +#### Date: Oct-27-2025 +Fix: Upgrade dependecies + ### Version: 4.10.0 #### Date: Sep-22-2025 Fix: Enhance retry logic to use configured retryDelay diff --git a/package-lock.json b/package-lock.json index 044ddbb8..ed6a740b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,16 @@ { "name": "@contentstack/delivery-sdk", - "version": "4.10.0", + "version": "4.10.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@contentstack/delivery-sdk", - "version": "4.10.0", + "version": "4.10.1", "license": "MIT", "dependencies": { - "@contentstack/core": "^1.3.0", - "@contentstack/utils": "^1.4.1", + "@contentstack/core": "^1.3.1", + "@contentstack/utils": "^1.5.0", "axios": "^1.12.2", "humps": "^2.0.1" }, @@ -55,9 +55,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.4.tgz", - "integrity": "sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", "dev": true, "license": "MIT", "engines": { @@ -65,21 +65,21 @@ } }, "node_modules/@babel/core": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz", - "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", + "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.3", + "@babel/generator": "^7.28.5", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.28.3", "@babel/helpers": "^7.28.4", - "@babel/parser": "^7.28.4", + "@babel/parser": "^7.28.5", "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.4", - "@babel/types": "^7.28.4", + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -96,14 +96,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", - "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.3", - "@babel/types": "^7.28.2", + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -143,18 +143,18 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz", - "integrity": "sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz", + "integrity": "sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/traverse": "^7.28.3", + "@babel/traverse": "^7.28.5", "semver": "^6.3.1" }, "engines": { @@ -165,14 +165,14 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", - "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", + "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "regexpu-core": "^6.2.0", + "@babel/helper-annotate-as-pure": "^7.27.3", + "regexpu-core": "^6.3.1", "semver": "^6.3.1" }, "engines": { @@ -210,14 +210,14 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", - "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -339,9 +339,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "dev": true, "license": "MIT", "engines": { @@ -388,13 +388,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", - "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.4" + "@babel/types": "^7.28.5" }, "bin": { "parser": "bin/babel-parser.js" @@ -404,14 +404,14 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz", - "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", + "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/traverse": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -875,9 +875,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.4.tgz", - "integrity": "sha512-1yxmvN0MJHOhPVmAsmoW5liWwoILobu/d/ShymZmj867bAdxGbehIrew1DuLpw2Ukv+qDSSPQdYW1dLNE7t11A==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.5.tgz", + "integrity": "sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==", "dev": true, "license": "MIT", "dependencies": { @@ -963,14 +963,14 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz", - "integrity": "sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", + "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.28.0" + "@babel/traverse": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -1063,9 +1063,9 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", - "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.5.tgz", + "integrity": "sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==", "dev": true, "license": "MIT", "dependencies": { @@ -1162,9 +1162,9 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", - "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz", + "integrity": "sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==", "dev": true, "license": "MIT", "dependencies": { @@ -1228,16 +1228,16 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", - "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz", + "integrity": "sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-module-transforms": "^7.28.3", "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -1382,9 +1382,9 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", - "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz", + "integrity": "sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1515,9 +1515,9 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.3.tgz", - "integrity": "sha512-Y6ab1kGqZ0u42Zv/4a7l0l72n9DKP/MKoKWaUSBylrhNZO2prYuqFOLbn5aW5SIFXwSH93yfjbgllL8lxuGKLg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.5.tgz", + "integrity": "sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w==", "dev": true, "license": "MIT", "dependencies": { @@ -1617,14 +1617,14 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz", - "integrity": "sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.5.tgz", + "integrity": "sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.28.5", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", "@babel/plugin-syntax-typescript": "^7.27.1" @@ -1704,17 +1704,17 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.3.tgz", - "integrity": "sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.5.tgz", + "integrity": "sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.28.0", + "@babel/compat-data": "^7.28.5", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", @@ -1727,42 +1727,42 @@ "@babel/plugin-transform-async-generator-functions": "^7.28.0", "@babel/plugin-transform-async-to-generator": "^7.27.1", "@babel/plugin-transform-block-scoped-functions": "^7.27.1", - "@babel/plugin-transform-block-scoping": "^7.28.0", + "@babel/plugin-transform-block-scoping": "^7.28.5", "@babel/plugin-transform-class-properties": "^7.27.1", "@babel/plugin-transform-class-static-block": "^7.28.3", - "@babel/plugin-transform-classes": "^7.28.3", + "@babel/plugin-transform-classes": "^7.28.4", "@babel/plugin-transform-computed-properties": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-destructuring": "^7.28.5", "@babel/plugin-transform-dotall-regex": "^7.27.1", "@babel/plugin-transform-duplicate-keys": "^7.27.1", "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", "@babel/plugin-transform-dynamic-import": "^7.27.1", "@babel/plugin-transform-explicit-resource-management": "^7.28.0", - "@babel/plugin-transform-exponentiation-operator": "^7.27.1", + "@babel/plugin-transform-exponentiation-operator": "^7.28.5", "@babel/plugin-transform-export-namespace-from": "^7.27.1", "@babel/plugin-transform-for-of": "^7.27.1", "@babel/plugin-transform-function-name": "^7.27.1", "@babel/plugin-transform-json-strings": "^7.27.1", "@babel/plugin-transform-literals": "^7.27.1", - "@babel/plugin-transform-logical-assignment-operators": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.28.5", "@babel/plugin-transform-member-expression-literals": "^7.27.1", "@babel/plugin-transform-modules-amd": "^7.27.1", "@babel/plugin-transform-modules-commonjs": "^7.27.1", - "@babel/plugin-transform-modules-systemjs": "^7.27.1", + "@babel/plugin-transform-modules-systemjs": "^7.28.5", "@babel/plugin-transform-modules-umd": "^7.27.1", "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", "@babel/plugin-transform-new-target": "^7.27.1", "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", "@babel/plugin-transform-numeric-separator": "^7.27.1", - "@babel/plugin-transform-object-rest-spread": "^7.28.0", + "@babel/plugin-transform-object-rest-spread": "^7.28.4", "@babel/plugin-transform-object-super": "^7.27.1", "@babel/plugin-transform-optional-catch-binding": "^7.27.1", - "@babel/plugin-transform-optional-chaining": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.28.5", "@babel/plugin-transform-parameters": "^7.27.7", "@babel/plugin-transform-private-methods": "^7.27.1", "@babel/plugin-transform-private-property-in-object": "^7.27.1", "@babel/plugin-transform-property-literals": "^7.27.1", - "@babel/plugin-transform-regenerator": "^7.28.3", + "@babel/plugin-transform-regenerator": "^7.28.4", "@babel/plugin-transform-regexp-modifiers": "^7.27.1", "@babel/plugin-transform-reserved-words": "^7.27.1", "@babel/plugin-transform-shorthand-properties": "^7.27.1", @@ -1804,9 +1804,9 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz", - "integrity": "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz", + "integrity": "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==", "dev": true, "license": "MIT", "dependencies": { @@ -1814,7 +1814,7 @@ "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-transform-modules-commonjs": "^7.27.1", - "@babel/plugin-transform-typescript": "^7.27.1" + "@babel/plugin-transform-typescript": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -1849,18 +1849,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz", - "integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.3", + "@babel/generator": "^7.28.5", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.4", + "@babel/parser": "^7.28.5", "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4", + "@babel/types": "^7.28.5", "debug": "^4.3.1" }, "engines": { @@ -1868,14 +1868,14 @@ } }, "node_modules/@babel/types": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", - "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -1916,9 +1916,9 @@ } }, "node_modules/@contentstack/utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@contentstack/utils/-/utils-1.4.2.tgz", - "integrity": "sha512-OGRYPws6ceM9Qf+s9CPh5OeG+ujBSchqvuAL0lvxMnoFm5pM9bZkxP42e/fVGOZSP96eoSfUzqZyBZgLupxedg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@contentstack/utils/-/utils-1.5.0.tgz", + "integrity": "sha512-tL1pcC4hJ+zcrvHq9c/ShTLjCVg8ACWahLDZvqT5VAalTsnR5Ik7QltjEcRsfpz/ucLQ1GVyRQRpezELCIon4A==", "license": "MIT" }, "node_modules/@cspotcode/source-map-support": { @@ -1956,9 +1956,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz", - "integrity": "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.11.tgz", + "integrity": "sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==", "cpu": [ "ppc64" ], @@ -1973,9 +1973,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.9.tgz", - "integrity": "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.11.tgz", + "integrity": "sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==", "cpu": [ "arm" ], @@ -1990,9 +1990,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz", - "integrity": "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.11.tgz", + "integrity": "sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==", "cpu": [ "arm64" ], @@ -2007,9 +2007,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.9.tgz", - "integrity": "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.11.tgz", + "integrity": "sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==", "cpu": [ "x64" ], @@ -2024,9 +2024,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz", - "integrity": "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.11.tgz", + "integrity": "sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==", "cpu": [ "arm64" ], @@ -2041,9 +2041,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz", - "integrity": "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.11.tgz", + "integrity": "sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==", "cpu": [ "x64" ], @@ -2058,9 +2058,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz", - "integrity": "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.11.tgz", + "integrity": "sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==", "cpu": [ "arm64" ], @@ -2075,9 +2075,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz", - "integrity": "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.11.tgz", + "integrity": "sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==", "cpu": [ "x64" ], @@ -2092,9 +2092,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz", - "integrity": "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.11.tgz", + "integrity": "sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==", "cpu": [ "arm" ], @@ -2109,9 +2109,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz", - "integrity": "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.11.tgz", + "integrity": "sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==", "cpu": [ "arm64" ], @@ -2126,9 +2126,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz", - "integrity": "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.11.tgz", + "integrity": "sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==", "cpu": [ "ia32" ], @@ -2143,9 +2143,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz", - "integrity": "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.11.tgz", + "integrity": "sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==", "cpu": [ "loong64" ], @@ -2160,9 +2160,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz", - "integrity": "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.11.tgz", + "integrity": "sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==", "cpu": [ "mips64el" ], @@ -2177,9 +2177,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz", - "integrity": "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.11.tgz", + "integrity": "sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==", "cpu": [ "ppc64" ], @@ -2194,9 +2194,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz", - "integrity": "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.11.tgz", + "integrity": "sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==", "cpu": [ "riscv64" ], @@ -2211,9 +2211,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz", - "integrity": "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.11.tgz", + "integrity": "sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==", "cpu": [ "s390x" ], @@ -2228,9 +2228,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz", - "integrity": "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.11.tgz", + "integrity": "sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==", "cpu": [ "x64" ], @@ -2245,9 +2245,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz", - "integrity": "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.11.tgz", + "integrity": "sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==", "cpu": [ "arm64" ], @@ -2262,9 +2262,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz", - "integrity": "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.11.tgz", + "integrity": "sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==", "cpu": [ "x64" ], @@ -2279,9 +2279,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz", - "integrity": "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.11.tgz", + "integrity": "sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==", "cpu": [ "arm64" ], @@ -2296,9 +2296,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz", - "integrity": "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.11.tgz", + "integrity": "sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==", "cpu": [ "x64" ], @@ -2313,9 +2313,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz", - "integrity": "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.11.tgz", + "integrity": "sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==", "cpu": [ "arm64" ], @@ -2330,9 +2330,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz", - "integrity": "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.11.tgz", + "integrity": "sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==", "cpu": [ "x64" ], @@ -2347,9 +2347,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz", - "integrity": "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.11.tgz", + "integrity": "sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==", "cpu": [ "arm64" ], @@ -2364,9 +2364,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz", - "integrity": "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.11.tgz", + "integrity": "sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==", "cpu": [ "ia32" ], @@ -2381,9 +2381,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz", - "integrity": "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.11.tgz", + "integrity": "sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==", "cpu": [ "x64" ], @@ -2995,9 +2995,9 @@ } }, "node_modules/@nx/devkit/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -3078,9 +3078,9 @@ } }, "node_modules/@nx/js/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -3620,9 +3620,9 @@ } }, "node_modules/@nx/workspace/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -3657,9 +3657,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.50.2.tgz", - "integrity": "sha512-uLN8NAiFVIRKX9ZQha8wy6UUs06UNSZ32xj6giK/rmMXAgKahwExvK6SsmgU5/brh4w/nSgj8e0k3c1HBQpa0A==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.5.tgz", + "integrity": "sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==", "cpu": [ "arm" ], @@ -3671,9 +3671,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.50.2.tgz", - "integrity": "sha512-oEouqQk2/zxxj22PNcGSskya+3kV0ZKH+nQxuCCOGJ4oTXBdNTbv+f/E3c74cNLeMO1S5wVWacSws10TTSB77g==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.5.tgz", + "integrity": "sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==", "cpu": [ "arm64" ], @@ -3685,9 +3685,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.50.2.tgz", - "integrity": "sha512-OZuTVTpj3CDSIxmPgGH8en/XtirV5nfljHZ3wrNwvgkT5DQLhIKAeuFSiwtbMto6oVexV0k1F1zqURPKf5rI1Q==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.5.tgz", + "integrity": "sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==", "cpu": [ "arm64" ], @@ -3699,9 +3699,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.50.2.tgz", - "integrity": "sha512-Wa/Wn8RFkIkr1vy1k1PB//VYhLnlnn5eaJkfTQKivirOvzu5uVd2It01ukeQstMursuz7S1bU+8WW+1UPXpa8A==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.5.tgz", + "integrity": "sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==", "cpu": [ "x64" ], @@ -3713,9 +3713,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.50.2.tgz", - "integrity": "sha512-QkzxvH3kYN9J1w7D1A+yIMdI1pPekD+pWx7G5rXgnIlQ1TVYVC6hLl7SOV9pi5q9uIDF9AuIGkuzcbF7+fAhow==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.5.tgz", + "integrity": "sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==", "cpu": [ "arm64" ], @@ -3727,9 +3727,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.50.2.tgz", - "integrity": "sha512-dkYXB0c2XAS3a3jmyDkX4Jk0m7gWLFzq1C3qUnJJ38AyxIF5G/dyS4N9B30nvFseCfgtCEdbYFhk0ChoCGxPog==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.5.tgz", + "integrity": "sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==", "cpu": [ "x64" ], @@ -3741,9 +3741,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.50.2.tgz", - "integrity": "sha512-9VlPY/BN3AgbukfVHAB8zNFWB/lKEuvzRo1NKev0Po8sYFKx0i+AQlCYftgEjcL43F2h9Ui1ZSdVBc4En/sP2w==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.5.tgz", + "integrity": "sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==", "cpu": [ "arm" ], @@ -3755,9 +3755,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.50.2.tgz", - "integrity": "sha512-+GdKWOvsifaYNlIVf07QYan1J5F141+vGm5/Y8b9uCZnG/nxoGqgCmR24mv0koIWWuqvFYnbURRqw1lv7IBINw==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.5.tgz", + "integrity": "sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==", "cpu": [ "arm" ], @@ -3769,9 +3769,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.50.2.tgz", - "integrity": "sha512-df0Eou14ojtUdLQdPFnymEQteENwSJAdLf5KCDrmZNsy1c3YaCNaJvYsEUHnrg+/DLBH612/R0xd3dD03uz2dg==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.5.tgz", + "integrity": "sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==", "cpu": [ "arm64" ], @@ -3783,9 +3783,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.50.2.tgz", - "integrity": "sha512-iPeouV0UIDtz8j1YFR4OJ/zf7evjauqv7jQ/EFs0ClIyL+by++hiaDAfFipjOgyz6y6xbDvJuiU4HwpVMpRFDQ==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.5.tgz", + "integrity": "sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==", "cpu": [ "arm64" ], @@ -3797,9 +3797,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.50.2.tgz", - "integrity": "sha512-OL6KaNvBopLlj5fTa5D5bau4W82f+1TyTZRr2BdnfsrnQnmdxh4okMxR2DcDkJuh4KeoQZVuvHvzuD/lyLn2Kw==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.5.tgz", + "integrity": "sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==", "cpu": [ "loong64" ], @@ -3811,9 +3811,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.50.2.tgz", - "integrity": "sha512-I21VJl1w6z/K5OTRl6aS9DDsqezEZ/yKpbqlvfHbW0CEF5IL8ATBMuUx6/mp683rKTK8thjs/0BaNrZLXetLag==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.5.tgz", + "integrity": "sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==", "cpu": [ "ppc64" ], @@ -3825,9 +3825,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.50.2.tgz", - "integrity": "sha512-Hq6aQJT/qFFHrYMjS20nV+9SKrXL2lvFBENZoKfoTH2kKDOJqff5OSJr4x72ZaG/uUn+XmBnGhfr4lwMRrmqCQ==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.5.tgz", + "integrity": "sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==", "cpu": [ "riscv64" ], @@ -3839,9 +3839,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.50.2.tgz", - "integrity": "sha512-82rBSEXRv5qtKyr0xZ/YMF531oj2AIpLZkeNYxmKNN6I2sVE9PGegN99tYDLK2fYHJITL1P2Lgb4ZXnv0PjQvw==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.5.tgz", + "integrity": "sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==", "cpu": [ "riscv64" ], @@ -3853,9 +3853,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.50.2.tgz", - "integrity": "sha512-4Q3S3Hy7pC6uaRo9gtXUTJ+EKo9AKs3BXKc2jYypEcMQ49gDPFU2P1ariX9SEtBzE5egIX6fSUmbmGazwBVF9w==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.5.tgz", + "integrity": "sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==", "cpu": [ "s390x" ], @@ -3867,9 +3867,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.50.2.tgz", - "integrity": "sha512-9Jie/At6qk70dNIcopcL4p+1UirusEtznpNtcq/u/C5cC4HBX7qSGsYIcG6bdxj15EYWhHiu02YvmdPzylIZlA==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.5.tgz", + "integrity": "sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==", "cpu": [ "x64" ], @@ -3881,9 +3881,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.50.2.tgz", - "integrity": "sha512-HPNJwxPL3EmhzeAnsWQCM3DcoqOz3/IC6de9rWfGR8ZCuEHETi9km66bH/wG3YH0V3nyzyFEGUZeL5PKyy4xvw==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.5.tgz", + "integrity": "sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==", "cpu": [ "x64" ], @@ -3895,9 +3895,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.50.2.tgz", - "integrity": "sha512-nMKvq6FRHSzYfKLHZ+cChowlEkR2lj/V0jYj9JnGUVPL2/mIeFGmVM2mLaFeNa5Jev7W7TovXqXIG2d39y1KYA==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.5.tgz", + "integrity": "sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==", "cpu": [ "arm64" ], @@ -3909,9 +3909,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.50.2.tgz", - "integrity": "sha512-eFUvvnTYEKeTyHEijQKz81bLrUQOXKZqECeiWH6tb8eXXbZk+CXSG2aFrig2BQ/pjiVRj36zysjgILkqarS2YA==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.5.tgz", + "integrity": "sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==", "cpu": [ "arm64" ], @@ -3923,9 +3923,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.50.2.tgz", - "integrity": "sha512-cBaWmXqyfRhH8zmUxK3d3sAhEWLrtMjWBRwdMMHJIXSjvjLKvv49adxiEz+FJ8AP90apSDDBx2Tyd/WylV6ikA==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.5.tgz", + "integrity": "sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==", "cpu": [ "ia32" ], @@ -3936,10 +3936,24 @@ "win32" ] }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.5.tgz", + "integrity": "sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.50.2.tgz", - "integrity": "sha512-APwKy6YUhvZaEoHyM+9xqmTpviEI+9eL7LoCH+aLcvWYHJ663qG5zx7WzWZY+a9qkg5JtzcMyJ9z0WtQBMDmgA==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.5.tgz", + "integrity": "sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==", "cpu": [ "x64" ], @@ -3978,18 +3992,18 @@ } }, "node_modules/@slack/bolt": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@slack/bolt/-/bolt-4.4.0.tgz", - "integrity": "sha512-FjGl1+hUo0w6ZSP2v3ZyjEkpGnA2t83Kz/Et2aEtIe8rRxrHd8R9CKShpd7BesuIcvqaz2eVe33YiKGohOiMKw==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@slack/bolt/-/bolt-4.5.0.tgz", + "integrity": "sha512-1YbgO/UDLYa0vOtGsTohpnl/dSKwo7RbUd29IJMfqNDLn+t81MmIL0w2KPNjZJQLsoevTRNCdHDeh4PJyY8DIA==", "dev": true, "license": "MIT", "dependencies": { "@slack/logger": "^4.0.0", - "@slack/oauth": "^3.0.3", - "@slack/socket-mode": "^2.0.4", - "@slack/types": "^2.14.0", - "@slack/web-api": "^7.9.1", - "axios": "^1.8.3", + "@slack/oauth": "^3.0.4", + "@slack/socket-mode": "^2.0.5", + "@slack/types": "^2.17.0", + "@slack/web-api": "^7.11.0", + "axios": "^1.12.0", "express": "^5.0.0", "path-to-regexp": "^8.1.0", "raw-body": "^3", @@ -4055,9 +4069,9 @@ } }, "node_modules/@slack/types": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/@slack/types/-/types-2.16.0.tgz", - "integrity": "sha512-bICnyukvdklXhwxprR3uF1+ZFkTvWTZge4evlCS4G1H1HU6QLY68AcjqzQRymf7/5gNt6Y4OBb4NdviheyZcAg==", + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/@slack/types/-/types-2.18.0.tgz", + "integrity": "sha512-ZKrdeoppbM+3l2KKOi4/3oFYKCEwiW3dQfdHZDcecJ9rAmEqWPnARYmac9taZNitb0xnSgu6GOpHgwaKI8se2g==", "dev": true, "license": "MIT", "engines": { @@ -4066,14 +4080,14 @@ } }, "node_modules/@slack/web-api": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/@slack/web-api/-/web-api-7.10.0.tgz", - "integrity": "sha512-kT+07JvOqpYH3b/ttVo3iqKIFiHV2NKmD6QUc/F7HrjCgSdSA10zxqi0euXEF2prB49OU7SfjadzQ0WhNc7tiw==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@slack/web-api/-/web-api-7.12.0.tgz", + "integrity": "sha512-LrDxjYyqjeYYQGVdVZ6EYHunFmzveOr2pFpShr6TzW4KNFpdNNnpKekjtMg0PJlOsMibSySLGQqiBZQDasmRCA==", "dev": true, "license": "MIT", "dependencies": { "@slack/logger": "^4.0.0", - "@slack/types": "^2.9.0", + "@slack/types": "^2.18.0", "@types/node": ">=18.0.0", "@types/retry": "0.12.0", "axios": "^1.11.0", @@ -4228,9 +4242,9 @@ "license": "MIT" }, "node_modules/@types/express": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.3.tgz", - "integrity": "sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.4.tgz", + "integrity": "sha512-g64dbryHk7loCIrsa0R3shBnEu5p6LPJ09bu9NG58+jz+cRUjFrc3Bz0kNQ7j9bXeCsrRDvNET1G54P/GJkAyA==", "dev": true, "license": "MIT", "peer": true, @@ -4241,9 +4255,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.7.tgz", - "integrity": "sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.0.tgz", + "integrity": "sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA==", "dev": true, "license": "MIT", "peer": true, @@ -4364,13 +4378,13 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.5.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.5.1.tgz", - "integrity": "sha512-/SQdmUP2xa+1rdx7VwB9yPq8PaKej8TD5cQ+XfKDPWWC+VDJU4rvVVagXqKUzhKjtFoNA8rXDJAkCxQPAe00+Q==", + "version": "24.9.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.1.tgz", + "integrity": "sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~7.12.0" + "undici-types": "~7.16.0" } }, "node_modules/@types/node-localstorage": { @@ -4414,28 +4428,39 @@ "license": "MIT" }, "node_modules/@types/send": { - "version": "0.17.5", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", - "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@types/mime": "^1", "@types/node": "*" } }, "node_modules/@types/serve-static": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", - "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", "dev": true, "license": "MIT", "peer": true, "dependencies": { "@types/http-errors": "*", "@types/node": "*", - "@types/send": "*" + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" } }, "node_modules/@types/stack-utils": { @@ -4463,9 +4488,9 @@ } }, "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "version": "17.0.34", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.34.tgz", + "integrity": "sha512-KExbHVa92aJpw9WDQvzBaGVE2/Pz+pLZQloT2hjL8IqsZnV62rlPOYvNnLmf/L2dyllfVUOVBj64M0z/46eR2A==", "dev": true, "license": "MIT", "dependencies": { @@ -5258,9 +5283,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.4.tgz", - "integrity": "sha512-L+YvJwGAgwJBV1p6ffpSTa2KRc69EeeYGYjRVWKs0GKrK+LON0GC0gV+rKSNtALEDvMDqkvCFq9r1r94/Gjwxw==", + "version": "2.8.20", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.20.tgz", + "integrity": "sha512-JMWsdF+O8Orq3EMukbUN1QfbLK9mX2CkUmQBcW2T0s8OmdAUL5LLM/6wFwSrqXzlXB13yhyK9gTKS1rIizOduQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -5324,9 +5349,9 @@ } }, "node_modules/browserslist": { - "version": "4.26.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.2.tgz", - "integrity": "sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==", + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz", + "integrity": "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==", "dev": true, "funding": [ { @@ -5344,11 +5369,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.8.3", - "caniuse-lite": "^1.0.30001741", - "electron-to-chromium": "^1.5.218", - "node-releases": "^2.0.21", - "update-browserslist-db": "^1.1.3" + "baseline-browser-mapping": "^2.8.19", + "caniuse-lite": "^1.0.30001751", + "electron-to-chromium": "^1.5.238", + "node-releases": "^2.0.26", + "update-browserslist-db": "^1.1.4" }, "bin": { "browserslist": "cli.js" @@ -5505,9 +5530,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001743", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001743.tgz", - "integrity": "sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw==", + "version": "1.0.30001751", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001751.tgz", + "integrity": "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==", "dev": true, "funding": [ { @@ -5680,9 +5705,9 @@ } }, "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", + "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", "dev": true, "license": "MIT" }, @@ -5824,13 +5849,13 @@ } }, "node_modules/core-js-compat": { - "version": "3.45.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.45.1.tgz", - "integrity": "sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==", + "version": "3.46.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.46.0.tgz", + "integrity": "sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.25.3" + "browserslist": "^4.26.3" }, "funding": { "type": "opencollective", @@ -6174,9 +6199,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.220", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.220.tgz", - "integrity": "sha512-TWXijEwR1ggr4BdAKrb1nMNqYLTx1/4aD1fkeZU+FVJGTKu53/T7UyHKXlqEX3Ub02csyHePbHmkvnrjcaYzMA==", + "version": "1.5.240", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.240.tgz", + "integrity": "sha512-OBwbZjWgrCOH+g6uJsA2/7Twpas2OlepS9uvByJjR2datRDuKGYeD+nP8lBBks2qnB7bGJNHDUx7c/YLaT3QMQ==", "dev": true, "license": "ISC" }, @@ -6261,9 +6286,9 @@ } }, "node_modules/envinfo": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", - "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.19.0.tgz", + "integrity": "sha512-DoSM9VyG6O3vqBf+p3Gjgr/Q52HYBBtO3v+4koAxt1MnWr+zEnxE+nke/yXS4lt2P4SYCHQ4V3f1i88LQVOpAw==", "dev": true, "license": "MIT", "bin": { @@ -6337,9 +6362,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz", - "integrity": "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.11.tgz", + "integrity": "sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -6350,32 +6375,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.9", - "@esbuild/android-arm": "0.25.9", - "@esbuild/android-arm64": "0.25.9", - "@esbuild/android-x64": "0.25.9", - "@esbuild/darwin-arm64": "0.25.9", - "@esbuild/darwin-x64": "0.25.9", - "@esbuild/freebsd-arm64": "0.25.9", - "@esbuild/freebsd-x64": "0.25.9", - "@esbuild/linux-arm": "0.25.9", - "@esbuild/linux-arm64": "0.25.9", - "@esbuild/linux-ia32": "0.25.9", - "@esbuild/linux-loong64": "0.25.9", - "@esbuild/linux-mips64el": "0.25.9", - "@esbuild/linux-ppc64": "0.25.9", - "@esbuild/linux-riscv64": "0.25.9", - "@esbuild/linux-s390x": "0.25.9", - "@esbuild/linux-x64": "0.25.9", - "@esbuild/netbsd-arm64": "0.25.9", - "@esbuild/netbsd-x64": "0.25.9", - "@esbuild/openbsd-arm64": "0.25.9", - "@esbuild/openbsd-x64": "0.25.9", - "@esbuild/openharmony-arm64": "0.25.9", - "@esbuild/sunos-x64": "0.25.9", - "@esbuild/win32-arm64": "0.25.9", - "@esbuild/win32-ia32": "0.25.9", - "@esbuild/win32-x64": "0.25.9" + "@esbuild/aix-ppc64": "0.25.11", + "@esbuild/android-arm": "0.25.11", + "@esbuild/android-arm64": "0.25.11", + "@esbuild/android-x64": "0.25.11", + "@esbuild/darwin-arm64": "0.25.11", + "@esbuild/darwin-x64": "0.25.11", + "@esbuild/freebsd-arm64": "0.25.11", + "@esbuild/freebsd-x64": "0.25.11", + "@esbuild/linux-arm": "0.25.11", + "@esbuild/linux-arm64": "0.25.11", + "@esbuild/linux-ia32": "0.25.11", + "@esbuild/linux-loong64": "0.25.11", + "@esbuild/linux-mips64el": "0.25.11", + "@esbuild/linux-ppc64": "0.25.11", + "@esbuild/linux-riscv64": "0.25.11", + "@esbuild/linux-s390x": "0.25.11", + "@esbuild/linux-x64": "0.25.11", + "@esbuild/netbsd-arm64": "0.25.11", + "@esbuild/netbsd-x64": "0.25.11", + "@esbuild/openbsd-arm64": "0.25.11", + "@esbuild/openbsd-x64": "0.25.11", + "@esbuild/openharmony-arm64": "0.25.11", + "@esbuild/sunos-x64": "0.25.11", + "@esbuild/win32-arm64": "0.25.11", + "@esbuild/win32-ia32": "0.25.11", + "@esbuild/win32-x64": "0.25.11" } }, "node_modules/esbuild-plugin-file-path-extensions": { @@ -7763,9 +7788,9 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -8501,9 +8526,9 @@ } }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -8776,9 +8801,9 @@ } }, "node_modules/jsonwebtoken/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -8875,14 +8900,18 @@ } }, "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", + "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", "dev": true, "license": "MIT", "peer": true, "engines": { "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/locate-path": { @@ -9002,9 +9031,9 @@ } }, "node_modules/magic-string": { - "version": "0.30.19", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", - "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9028,9 +9057,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -9273,9 +9302,9 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.21", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.21.tgz", - "integrity": "sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==", + "version": "2.0.26", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.26.tgz", + "integrity": "sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==", "dev": true, "license": "MIT" }, @@ -9306,9 +9335,9 @@ } }, "node_modules/npm-package-arg/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -9448,9 +9477,9 @@ } }, "node_modules/nx/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "peer": true, @@ -10178,16 +10207,16 @@ } }, "node_modules/regexpu-core": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.3.1.tgz", - "integrity": "sha512-DzcswPr252wEr7Qz8AyAVbfyBDKLoYp6eRA1We2Fa9qirRFSdtkP5sHr3yglDKy2BbA0fd2T+j/CUSKes3FeVQ==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", "dev": true, "license": "MIT", "dependencies": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.2.2", "regjsgen": "^0.8.0", - "regjsparser": "^0.12.0", + "regjsparser": "^0.13.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.2.1" }, @@ -10203,31 +10232,18 @@ "license": "MIT" }, "node_modules/regjsparser": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", + "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "jsesc": "~3.0.2" + "jsesc": "~3.1.0" }, "bin": { "regjsparser": "bin/parser" } }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -10257,13 +10273,13 @@ "license": "MIT" }, "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.16.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -10346,9 +10362,9 @@ } }, "node_modules/rollup": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.50.2.tgz", - "integrity": "sha512-BgLRGy7tNS9H66aIMASq1qSYbAAJV6Z6WR4QYTvj5FgF15rZ/ympT1uixHXwzbZUBDbkvqUI1KR0fH1FhMaQ9w==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.5.tgz", + "integrity": "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==", "dev": true, "license": "MIT", "dependencies": { @@ -10362,27 +10378,28 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.50.2", - "@rollup/rollup-android-arm64": "4.50.2", - "@rollup/rollup-darwin-arm64": "4.50.2", - "@rollup/rollup-darwin-x64": "4.50.2", - "@rollup/rollup-freebsd-arm64": "4.50.2", - "@rollup/rollup-freebsd-x64": "4.50.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.50.2", - "@rollup/rollup-linux-arm-musleabihf": "4.50.2", - "@rollup/rollup-linux-arm64-gnu": "4.50.2", - "@rollup/rollup-linux-arm64-musl": "4.50.2", - "@rollup/rollup-linux-loong64-gnu": "4.50.2", - "@rollup/rollup-linux-ppc64-gnu": "4.50.2", - "@rollup/rollup-linux-riscv64-gnu": "4.50.2", - "@rollup/rollup-linux-riscv64-musl": "4.50.2", - "@rollup/rollup-linux-s390x-gnu": "4.50.2", - "@rollup/rollup-linux-x64-gnu": "4.50.2", - "@rollup/rollup-linux-x64-musl": "4.50.2", - "@rollup/rollup-openharmony-arm64": "4.50.2", - "@rollup/rollup-win32-arm64-msvc": "4.50.2", - "@rollup/rollup-win32-ia32-msvc": "4.50.2", - "@rollup/rollup-win32-x64-msvc": "4.50.2", + "@rollup/rollup-android-arm-eabi": "4.52.5", + "@rollup/rollup-android-arm64": "4.52.5", + "@rollup/rollup-darwin-arm64": "4.52.5", + "@rollup/rollup-darwin-x64": "4.52.5", + "@rollup/rollup-freebsd-arm64": "4.52.5", + "@rollup/rollup-freebsd-x64": "4.52.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.52.5", + "@rollup/rollup-linux-arm-musleabihf": "4.52.5", + "@rollup/rollup-linux-arm64-gnu": "4.52.5", + "@rollup/rollup-linux-arm64-musl": "4.52.5", + "@rollup/rollup-linux-loong64-gnu": "4.52.5", + "@rollup/rollup-linux-ppc64-gnu": "4.52.5", + "@rollup/rollup-linux-riscv64-gnu": "4.52.5", + "@rollup/rollup-linux-riscv64-musl": "4.52.5", + "@rollup/rollup-linux-s390x-gnu": "4.52.5", + "@rollup/rollup-linux-x64-gnu": "4.52.5", + "@rollup/rollup-linux-x64-musl": "4.52.5", + "@rollup/rollup-openharmony-arm64": "4.52.5", + "@rollup/rollup-win32-arm64-msvc": "4.52.5", + "@rollup/rollup-win32-ia32-msvc": "4.52.5", + "@rollup/rollup-win32-x64-gnu": "4.52.5", + "@rollup/rollup-win32-x64-msvc": "4.52.5", "fsevents": "~2.3.2" } }, @@ -10469,9 +10486,9 @@ } }, "node_modules/schema-utils": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", - "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", "dev": true, "license": "MIT", "peer": true, @@ -10983,9 +11000,9 @@ "license": "MIT" }, "node_modules/tapable": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.3.tgz", - "integrity": "sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", "dev": true, "license": "MIT", "engines": { @@ -11343,9 +11360,9 @@ "license": "Apache-2.0" }, "node_modules/ts-jest": { - "version": "29.4.2", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.2.tgz", - "integrity": "sha512-pBNOkn4HtuLpNrXTMVRC9b642CBaDnKqWXny4OzuoULT9S7Kf8MMlaRe2veKax12rjf5WcpMBhVPbQurlWGNxA==", + "version": "29.4.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.5.tgz", + "integrity": "sha512-HO3GyiWn2qvTQA4kTgjDcXiMwYQt68a1Y8+JuLRVpdIzm+UOLSHgl/XqR4c6nzJkq5rOkjc02O2I7P7l/Yof0Q==", "dev": true, "license": "MIT", "dependencies": { @@ -11355,7 +11372,7 @@ "json5": "^2.2.3", "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", - "semver": "^7.7.2", + "semver": "^7.7.3", "type-fest": "^4.41.0", "yargs-parser": "^21.1.1" }, @@ -11396,9 +11413,9 @@ } }, "node_modules/ts-jest/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -11443,9 +11460,9 @@ } }, "node_modules/ts-loader/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -11743,9 +11760,9 @@ } }, "node_modules/typescript": { - "version": "5.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", - "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", "peer": true, @@ -11779,9 +11796,9 @@ } }, "node_modules/undici-types": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.12.0.tgz", - "integrity": "sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", "dev": true, "license": "MIT" }, @@ -11850,9 +11867,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", + "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", "dev": true, "funding": [ { @@ -12009,9 +12026,9 @@ } }, "node_modules/webpack": { - "version": "5.101.3", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.101.3.tgz", - "integrity": "sha512-7b0dTKR3Ed//AD/6kkx/o7duS8H3f1a4w3BYpIriX4BzIhjkn4teo05cptsxvLesHFKK5KObnadmCHBwGc+51A==", + "version": "5.102.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.102.1.tgz", + "integrity": "sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ==", "dev": true, "license": "MIT", "peer": true, @@ -12024,7 +12041,7 @@ "@webassemblyjs/wasm-parser": "^1.14.1", "acorn": "^8.15.0", "acorn-import-phases": "^1.0.3", - "browserslist": "^4.24.0", + "browserslist": "^4.26.3", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.17.3", "es-module-lexer": "^1.2.1", @@ -12036,10 +12053,10 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^4.3.2", - "tapable": "^2.1.1", + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", "terser-webpack-plugin": "^5.3.11", - "watchpack": "^2.4.1", + "watchpack": "^2.4.4", "webpack-sources": "^3.3.3" }, "bin": { diff --git a/package.json b/package.json index 3a5e1097..f7202f7f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@contentstack/delivery-sdk", - "version": "4.10.0", + "version": "4.10.1", "type": "module", "license": "MIT", "main": "./dist/legacy/index.cjs", @@ -35,8 +35,8 @@ "husky-check": "npm run build && husky && chmod +x .husky/pre-commit" }, "dependencies": { - "@contentstack/core": "^1.3.0", - "@contentstack/utils": "^1.4.1", + "@contentstack/core": "^1.3.1", + "@contentstack/utils": "^1.5.0", "axios": "^1.12.2", "humps": "^2.0.1" }, From a48ed7388e3d760a450a38d18822621073db3a79 Mon Sep 17 00:00:00 2001 From: Nadeem Patwekar Date: Tue, 28 Oct 2025 18:30:29 +0530 Subject: [PATCH 03/26] feat: Update package dependencies and add postinstall/postupdate scripts - Updated @contentstack/core to version ^1.3.1 and @contentstack/utils to version ^1.5.0 in package.json. - Added postinstall and postupdate scripts to download regions.json from the Contentstack artifacts. refactor: Enhance stack configuration with dynamic host resolution - Introduced getHostforRegion function to resolve host based on cloud region. - Updated stack function to utilize the new host resolution logic. - Removed legacy host resolution code from stack function. test: Add comprehensive tests for getHostforRegion and stack methods - Implemented unit tests for getHostforRegion function covering various regions and edge cases. - Added integration tests for stack class to ensure correct baseURL setting based on region. - Enhanced existing tests for stack and utils to validate new functionality. chore: Enable JSON module resolution in TypeScript configuration - Updated tsconfig.json to include resolveJsonModule for importing JSON files. --- .gitignore | 1 + .npmignore | 3 +- .talismanrc | 6 +- package-lock.json | 168 ++++++---------------------- package.json | 8 +- src/lib/contentstack.ts | 24 +--- src/lib/stack.ts | 17 +++ src/lib/utils.ts | 22 +++- test/unit/contentstack.spec.ts | 146 ++++++++++++++++++++++++- test/unit/stack.spec.ts | 67 ++++++++++++ test/unit/utils.spec.ts | 193 ++++++++++++++++++++++++++++----- tsconfig.json | 1 + 12 files changed, 464 insertions(+), 192 deletions(-) diff --git a/.gitignore b/.gitignore index 0041e521..4887fe2d 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ coverage dist/* *.log .nx/ +regions.json \ No newline at end of file diff --git a/.npmignore b/.npmignore index 47e14fe6..fce34247 100644 --- a/.npmignore +++ b/.npmignore @@ -19,4 +19,5 @@ src *.tgz .talismanrc tap-html.html -.github \ No newline at end of file +.github +regions.json \ No newline at end of file diff --git a/.talismanrc b/.talismanrc index 8f7e1417..41b14d33 100644 --- a/.talismanrc +++ b/.talismanrc @@ -1,6 +1,10 @@ fileignoreconfig: - filename: package-lock.json - checksum: 2f932522b599050c23c6a2490897301a3efd9258f0c8bef512d099960c76617f + checksum: 2d01a92de8d55b56ba719b8c1a497ecda99b084d9a0f35687a363d99265a1d7c +- filename: test/unit/contentstack.spec.ts + checksum: d5b99c01459ab8bc597baaa9e6cc4aa91ac6d9bf78af08e1d0220d0c5db3d0b3 +- filename: test/unit/utils.spec.ts + checksum: 79ce5bd78376db37a34df82c0fea19031e995b66a5a246e73f8262fa05d65a9c - filename: test/unit/query-optimization-comprehensive.spec.ts checksum: f5aaf6c784d7c101a05ca513c584bbd6e95f963d1e42779f2596050d9bcbac96 version: "" diff --git a/package-lock.json b/package-lock.json index 49b1fa3e..ae1c7a74 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,10 +7,11 @@ "": { "name": "@contentstack/delivery-sdk", "version": "4.9.0", + "hasInstallScript": true, "license": "MIT", "dependencies": { - "@contentstack/core": "file:../contentstack-js-core/contentstack-core-1.2.4.tgz", - "@contentstack/utils": "file:../../contentstack-utils-javascript/contentstack-utils-1.5.0.tgz", + "@contentstack/core": "^1.3.1", + "@contentstack/utils": "^1.5.0", "axios": "^1.11.0", "humps": "^2.0.1" }, @@ -84,6 +85,7 @@ "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", @@ -1903,9 +1905,9 @@ "license": "MIT" }, "node_modules/@contentstack/core": { - "version": "1.2.4", - "resolved": "file:../contentstack-js-core/contentstack-core-1.2.4.tgz", - "integrity": "sha512-9kgdyfSRNAE+ulq6bMNPUjlY7+mQ/hSnyRu3M9FDGr5hUWLMfwW2JvvMNWv9bpxSwDSUahgw9sYE5yRVZOXPsg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@contentstack/core/-/core-1.3.1.tgz", + "integrity": "sha512-RuaqNMZreN/ihnFJtGvtxK5NYuQuar1qBwWf0wqMsESHZCp+7Ohk1iSwq5E+7JN8Rzz40eiBiXklllzhoC0+5g==", "license": "MIT", "dependencies": { "axios": "^1.11.0", @@ -1931,8 +1933,8 @@ }, "node_modules/@contentstack/utils": { "version": "1.5.0", - "resolved": "file:../../contentstack-utils-javascript/contentstack-utils-1.5.0.tgz", - "integrity": "sha512-PM3e4Iru4YcWODZHewtiLg3IoPGaNtOwQUyqS54qjLw8y7s/5rzK4DEwaeHaPVWh2JvuyVbUbY+QL8lGthFX1A==", + "resolved": "https://registry.npmjs.org/@contentstack/utils/-/utils-1.5.0.tgz", + "integrity": "sha512-tL1pcC4hJ+zcrvHq9c/ShTLjCVg8ACWahLDZvqT5VAalTsnR5Ik7QltjEcRsfpz/ucLQ1GVyRQRpezELCIon4A==", "license": "MIT" }, "node_modules/@cspotcode/source-map-support": { @@ -2860,7 +2862,6 @@ "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" @@ -2958,7 +2959,6 @@ "integrity": "sha512-gB7Vxa6FReZZEGva03Eh+84W8BSZOjsNyXboglOINu6d8iZZ0eotSXGziKgjpkj3feZ1ofKZMs0PRObVAOROVw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "nx": "18.3.5", "tslib": "^2.3.0" @@ -3150,7 +3150,6 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": ">= 10" } @@ -3168,7 +3167,6 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": ">= 10" } @@ -3186,7 +3184,6 @@ "os": [ "freebsd" ], - "peer": true, "engines": { "node": ">= 10" } @@ -3204,7 +3201,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 10" } @@ -3222,7 +3218,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 10" } @@ -3240,7 +3235,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 10" } @@ -3258,7 +3252,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 10" } @@ -3276,7 +3269,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 10" } @@ -3294,7 +3286,6 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">= 10" } @@ -3312,7 +3303,6 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">= 10" } @@ -4182,7 +4172,6 @@ "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -4194,7 +4183,6 @@ "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/node": "*" } @@ -4205,7 +4193,6 @@ "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -4217,7 +4204,6 @@ "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/eslint": "*", "@types/estree": "*" @@ -4249,7 +4235,6 @@ "integrity": "sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -4272,8 +4257,7 @@ "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@types/humps": { "version": "2.0.6", @@ -4337,8 +4321,7 @@ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@types/jsonwebtoken": { "version": "9.0.10", @@ -4356,8 +4339,7 @@ "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@types/ms": { "version": "2.1.0", @@ -4372,6 +4354,7 @@ "integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~7.10.0" } @@ -4398,16 +4381,14 @@ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@types/retry": { "version": "0.12.0", @@ -4422,7 +4403,6 @@ "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -4434,7 +4414,6 @@ "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/http-errors": "*", "@types/node": "*", @@ -4488,7 +4467,6 @@ "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2" @@ -4499,24 +4477,21 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.13.2", @@ -4524,7 +4499,6 @@ "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.13.2", "@webassemblyjs/helper-api-error": "1.13.2", @@ -4536,8 +4510,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.14.1", @@ -4545,7 +4518,6 @@ "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -4559,7 +4531,6 @@ "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -4570,7 +4541,6 @@ "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@xtuc/long": "4.2.2" } @@ -4580,8 +4550,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.14.1", @@ -4589,7 +4558,6 @@ "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -4607,7 +4575,6 @@ "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", @@ -4622,7 +4589,6 @@ "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -4636,7 +4602,6 @@ "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-api-error": "1.13.2", @@ -4652,7 +4617,6 @@ "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" @@ -4710,16 +4674,14 @@ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true, - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true, - "license": "Apache-2.0", - "peer": true + "license": "Apache-2.0" }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", @@ -4790,6 +4752,7 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -4814,7 +4777,6 @@ "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10.13.0" }, @@ -4882,7 +4844,6 @@ "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ajv": "^8.0.0" }, @@ -4901,7 +4862,6 @@ "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -5017,6 +4977,7 @@ "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", "license": "MIT", + "peer": true, "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.4", @@ -5336,6 +5297,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001737", "electron-to-chromium": "^1.5.211", @@ -5566,7 +5528,6 @@ "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=6.0" } @@ -6298,8 +6259,7 @@ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/es-object-atoms": { "version": "1.1.1", @@ -6335,6 +6295,7 @@ "dev": true, "hasInstallScript": true, "license": "MIT", + "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -6436,7 +6397,6 @@ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "license": "BSD-2-Clause", - "peer": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -6451,7 +6411,6 @@ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, "license": "BSD-2-Clause", - "peer": true, "engines": { "node": ">=4.0" } @@ -6489,7 +6448,6 @@ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "license": "BSD-2-Clause", - "peer": true, "dependencies": { "estraverse": "^5.2.0" }, @@ -6540,7 +6498,6 @@ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=0.8.x" } @@ -6683,8 +6640,7 @@ "url": "https://opencollective.com/fastify" } ], - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/fastest-levenshtein": { "version": "1.0.16", @@ -7102,8 +7058,7 @@ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true, - "license": "BSD-2-Clause", - "peer": true + "license": "BSD-2-Clause" }, "node_modules/glob/node_modules/brace-expansion": { "version": "1.1.12", @@ -7851,6 +7806,7 @@ "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -7919,24 +7875,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-circus/node_modules/babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">=10", - "npm": ">=6" - } - }, "node_modules/jest-circus/node_modules/cosmiconfig": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", @@ -7944,7 +7882,6 @@ "dev": true, "license": "MIT", "optional": true, - "peer": true, "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -8708,8 +8645,7 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", @@ -8872,7 +8808,6 @@ "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=6.11.5" } @@ -9337,7 +9272,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "dependencies": { "@nrwl/tao": "18.3.5", "@yarnpkg/lockfile": "^1.1.0", @@ -9408,8 +9342,7 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, - "license": "Python-2.0", - "peer": true + "license": "Python-2.0" }, "node_modules/nx/node_modules/dotenv": { "version": "16.3.2", @@ -9417,7 +9350,6 @@ "integrity": "sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ==", "dev": true, "license": "BSD-2-Clause", - "peer": true, "engines": { "node": ">=12" }, @@ -9431,7 +9363,6 @@ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "argparse": "^2.0.1" }, @@ -9445,7 +9376,6 @@ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, "license": "ISC", - "peer": true, "bin": { "semver": "bin/semver.js" }, @@ -10052,7 +9982,6 @@ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "safe-buffer": "^5.1.0" } @@ -10219,7 +10148,6 @@ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -10449,7 +10377,6 @@ "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -10503,7 +10430,6 @@ "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "randombytes": "^2.1.0" } @@ -10994,7 +10920,6 @@ "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==", "dev": true, "license": "BSD-2-Clause", - "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.15.0", @@ -11014,7 +10939,6 @@ "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", @@ -11050,7 +10974,6 @@ "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -11066,7 +10989,6 @@ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -11082,8 +11004,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/terser/node_modules/source-map-support": { "version": "0.5.21", @@ -11091,7 +11012,6 @@ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -11214,6 +11134,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -11446,6 +11367,7 @@ "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -11664,21 +11586,6 @@ "webidl-conversions": "^4.0.2" } }, - "node_modules/tsup/node_modules/yaml": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", - "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - } - }, "node_modules/type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", @@ -11954,7 +11861,6 @@ "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -12039,6 +11945,7 @@ "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@discoveryjs/json-ext": "^0.5.0", "@webpack-cli/configtest": "^2.1.1", @@ -12110,7 +12017,6 @@ "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10.13.0" } @@ -12121,7 +12027,6 @@ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.6" } @@ -12132,7 +12037,6 @@ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "mime-db": "1.52.0" }, diff --git a/package.json b/package.json index 060c30f0..90c55337 100644 --- a/package.json +++ b/package.json @@ -32,11 +32,13 @@ "build:cjs": "node tools/cleanup cjs && tsc -p config/tsconfig.cjs.json && node tools/rename-cjs.cjs", "build:esm": "node tools/cleanup esm && tsc -p config/tsconfig.esm.json", "build:types": "node tools/cleanup types && tsc -p config/tsconfig.types.json", - "husky-check": "npm run build && husky && chmod +x .husky/pre-commit" + "husky-check": "npm run build && husky && chmod +x .husky/pre-commit", + "postinstall": "curl -s --max-time 30 --fail https://artifacts.contentstack.com/regions.json -o regions.json || echo 'Warning: Failed to download regions.json, using existing file if available'", + "postupdate": "curl -s --max-time 30 --fail https://artifacts.contentstack.com/regions.json -o regions.json || echo 'Warning: Failed to download regions.json, using existing file if available'" }, "dependencies": { - "@contentstack/core": "file:../contentstack-js-core/contentstack-core-1.2.4.tgz", - "@contentstack/utils": "file:../../contentstack-utils-javascript/contentstack-utils-1.5.0.tgz", + "@contentstack/core": "^1.3.1", + "@contentstack/utils": "^1.5.0", "axios": "^1.11.0", "humps": "^2.0.1" }, diff --git a/src/lib/contentstack.ts b/src/lib/contentstack.ts index 7f6ab039..9c91da6a 100644 --- a/src/lib/contentstack.ts +++ b/src/lib/contentstack.ts @@ -34,7 +34,10 @@ let version = '{{VERSION}}'; */ // eslint-disable-next-line @typescript-eslint/naming-convention export function stack(config: StackConfig): StackClass { + const DEFAULT_HOST = Utility.getHostforRegion(config.region, config.host); + let defaultConfig = { + defaultHostname: DEFAULT_HOST, headers: {} as AxiosRequestHeaders, params: {} as any, live_preview: {} as any, @@ -42,8 +45,7 @@ export function stack(config: StackConfig): StackClass { ...config }; - // defaultConfig.defaultHostname = config.host || Utility.getHost(config.region, config.host); - // config.host = defaultConfig.defaultHostname; + config.host = defaultConfig.defaultHostname; if (config.apiKey) { defaultConfig.headers.api_key = config.apiKey; @@ -111,24 +113,6 @@ export function stack(config: StackConfig): StackClass { client.interceptors.request.use(retryRequestHandler); client.interceptors.response.use(retryResponseHandler, errorHandler); - client.interceptors.request.use( - async (reqConfig: InternalAxiosRequestConfig): Promise => { - if (config.region) { - const hostt = await Utils.getContentstackEndpoint(config.region, 'CDA', true); - config.defaultHostname = hostt as string; - const protocol = config.insecure ? 'http' : 'https'; - const hostname = config.defaultHostname; - const port = config.port || 443; - const version = config.version || 'v3'; - - reqConfig.baseURL = config.endpoint || `${protocol}://${hostname}:${port}/${version}`; - } else { - reqConfig.baseURL = 'https://cdn.contentstack.io:443/v3'; - } - - return reqConfig; - }); - if (config.plugins) { client.interceptors.request.use((reqConfig: any): any => { if (config && config.plugins) diff --git a/src/lib/stack.ts b/src/lib/stack.ts index 324533d5..b4fe63cd 100644 --- a/src/lib/stack.ts +++ b/src/lib/stack.ts @@ -8,6 +8,7 @@ import { synchronization } from './synchronization'; import {TaxonomyQuery} from './taxonomy-query'; import { GlobalFieldQuery } from './global-field-query'; import { GlobalField } from './global-field'; +import { getHostforRegion } from './utils'; export class Stack { readonly config: StackConfig; @@ -227,4 +228,20 @@ export class Stack { if (typeof debug === "boolean") this.config.debug = debug; return this; } + + /** + * @method setHost + * @memberOf Stack + * @description Sets the host based on cloud region + * @param {String} cloudRegion - Cloud region (e.g., 'aws_na', 'aws_eu') + * @param {String} host - Optional custom host + * @return {Promise} - Returns the host URL + * @instance + * */ + async setHost(region: string = "aws_na", host?: string): Promise { + const resolvedHost = getHostforRegion(region, host); + + this._client.defaults.baseURL = `https://${resolvedHost}`; + } + } diff --git a/src/lib/utils.ts b/src/lib/utils.ts index 9ed390e4..87502dfa 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -1,14 +1,26 @@ import { Region, params } from './types'; +import regionsData from '../../regions.json'; -export function getHost(region: Region = Region.US, host?: string) { +export function getHostforRegion(cloudRegion: string = "aws_na", host?: string): string { if (host) return host; - let url = 'cdn.contentstack.io'; - if (region !== Region.US) { - url = region.toString().toLowerCase() + '-cdn.contentstack.com'; + // Handle null, undefined, or empty string cases + if (!cloudRegion || typeof cloudRegion !== 'string') { + throw new Error("Unable to set host using the provided region. Please provide a valid region."); } - return url; + const normalizedRegion = cloudRegion.toLowerCase(); + + const regionObj = regionsData.regions.find(r => + r.id === normalizedRegion || + r.alias.some(alias => alias === normalizedRegion) + ); + + if (!regionObj) { + throw new Error("Unable to set host using the provided region. Please provide a valid region."); + } + + return regionObj ? regionObj.endpoints.contentDelivery.replace(/^https?:\/\//, '') : 'cdn.contentstack.io'; } export function isBrowser() { diff --git a/test/unit/contentstack.spec.ts b/test/unit/contentstack.spec.ts index 2205c668..b65dc462 100644 --- a/test/unit/contentstack.spec.ts +++ b/test/unit/contentstack.spec.ts @@ -1,4 +1,4 @@ -import exp = require("constants"); +import * as exp from "constants"; import * as core from "@contentstack/core"; import * as Contentstack from "../../src/lib/contentstack"; import { Stack } from "../../src/lib/stack"; @@ -9,8 +9,12 @@ import { HOST_AU_REGION, HOST_EU_REGION, HOST_URL, + HOST_AZURE_NA_REGION, + HOST_GCP_NA_REGION, + HOST_GCP_EU_REGION, } from "../utils/constant"; import { AxiosRequestConfig, AxiosResponse } from "axios"; +import * as utils from "../../src/lib/utils"; jest.mock("@contentstack/core"); const createHttpClientMock = >( @@ -257,4 +261,144 @@ describe("Contentstack", () => { createHttpClientMock.mockReset(); done(); }); + + describe('getHostforRegion integration in stack creation', () => { + it('should use getHostforRegion to set default hostname for aws_na region', () => { + const getHostforRegionSpy = jest.spyOn(utils, 'getHostforRegion'); + const config = { + apiKey: "apiKey", + deliveryToken: "delivery", + environment: "env", + region: "aws_na", + }; + + const stackInstance = createStackInstance(config); + + expect(getHostforRegionSpy).toHaveBeenCalledWith("aws_na", undefined); + expect(stackInstance).toBeInstanceOf(Stack); + + getHostforRegionSpy.mockRestore(); + }); + + it('should use getHostforRegion to set default hostname for eu region', () => { + const getHostforRegionSpy = jest.spyOn(utils, 'getHostforRegion'); + const config = { + apiKey: "apiKey", + deliveryToken: "delivery", + environment: "env", + region: "eu", + }; + + const stackInstance = createStackInstance(config); + + expect(getHostforRegionSpy).toHaveBeenCalledWith("eu", undefined); + expect(stackInstance).toBeInstanceOf(Stack); + + getHostforRegionSpy.mockRestore(); + }); + + it('should use getHostforRegion with custom host when both region and host are provided', () => { + const getHostforRegionSpy = jest.spyOn(utils, 'getHostforRegion'); + const config = { + apiKey: "apiKey", + deliveryToken: "delivery", + environment: "env", + region: "eu", + host: CUSTOM_HOST, + }; + + const stackInstance = createStackInstance(config); + + expect(getHostforRegionSpy).toHaveBeenCalledWith("eu", CUSTOM_HOST); + expect(stackInstance).toBeInstanceOf(Stack); + + getHostforRegionSpy.mockRestore(); + }); + + it('should use getHostforRegion for azure-na region', () => { + const getHostforRegionSpy = jest.spyOn(utils, 'getHostforRegion'); + const config = { + apiKey: "apiKey", + deliveryToken: "delivery", + environment: "env", + region: "azure-na", + }; + + const stackInstance = createStackInstance(config); + + expect(getHostforRegionSpy).toHaveBeenCalledWith("azure-na", undefined); + expect(stackInstance).toBeInstanceOf(Stack); + + getHostforRegionSpy.mockRestore(); + }); + + it('should use getHostforRegion for gcp-na region', () => { + const getHostforRegionSpy = jest.spyOn(utils, 'getHostforRegion'); + const config = { + apiKey: "apiKey", + deliveryToken: "delivery", + environment: "env", + region: "gcp-na", + }; + + const stackInstance = createStackInstance(config); + + expect(getHostforRegionSpy).toHaveBeenCalledWith("gcp-na", undefined); + expect(stackInstance).toBeInstanceOf(Stack); + + getHostforRegionSpy.mockRestore(); + }); + + it('should use getHostforRegion for gcp-eu region', () => { + const getHostforRegionSpy = jest.spyOn(utils, 'getHostforRegion'); + const config = { + apiKey: "apiKey", + deliveryToken: "delivery", + environment: "env", + region: "gcp-eu", + }; + + const stackInstance = createStackInstance(config); + + expect(getHostforRegionSpy).toHaveBeenCalledWith("gcp-eu", undefined); + expect(stackInstance).toBeInstanceOf(Stack); + + getHostforRegionSpy.mockRestore(); + }); + + it('should handle getHostforRegion error gracefully', () => { + const getHostforRegionSpy = jest.spyOn(utils, 'getHostforRegion').mockImplementation(() => { + throw new Error('Unable to set host using the provided region. Please provide a valid region.'); + }); + + const config = { + apiKey: "apiKey", + deliveryToken: "delivery", + environment: "env", + region: "invalid_region", + }; + + expect(() => createStackInstance(config)).toThrow( + 'Unable to set host using the provided region. Please provide a valid region.' + ); + + getHostforRegionSpy.mockRestore(); + }); + + it('should use getHostforRegion with undefined region when no region is provided', () => { + const getHostforRegionSpy = jest.spyOn(utils, 'getHostforRegion'); + const config = { + apiKey: "apiKey", + deliveryToken: "delivery", + environment: "env", + }; + + const stackInstance = createStackInstance(config); + + expect(getHostforRegionSpy).toHaveBeenCalledWith(undefined, undefined); + expect(stackInstance).toBeInstanceOf(Stack); + + getHostforRegionSpy.mockRestore(); + }); + }); }); diff --git a/test/unit/stack.spec.ts b/test/unit/stack.spec.ts index c3575aef..3312d74e 100644 --- a/test/unit/stack.spec.ts +++ b/test/unit/stack.spec.ts @@ -10,6 +10,7 @@ import { synchronization } from '../../src/lib/synchronization'; import { ContentTypeQuery } from '../../src/lib/contenttype-query'; import { AssetQuery } from '../../src/lib/asset-query'; import { StackConfig } from '../../src/lib/types'; +import * as utils from '../../src/lib/utils'; jest.mock('../../src/lib/synchronization'); const syncMock = >(synchronization); @@ -157,5 +158,71 @@ describe('Stack class tests', () => { stack.setPort(3000); expect(stack.config.port).toEqual(3000); }); + + describe('setHost method integration tests', () => { + it('should set baseURL correctly for aws_na region', async () => { + await stack.setHost('aws_na'); + expect(client.defaults.baseURL).toBe('https://cdn.contentstack.io'); + }); + + it('should set baseURL correctly for eu region', async () => { + await stack.setHost('eu'); + expect(client.defaults.baseURL).toBe('https://eu-cdn.contentstack.com'); + }); + + it('should set baseURL correctly for au region', async () => { + await stack.setHost('au'); + expect(client.defaults.baseURL).toBe('https://au-cdn.contentstack.com'); + }); + + it('should set baseURL correctly for azure-na region', async () => { + await stack.setHost('azure-na'); + expect(client.defaults.baseURL).toBe('https://azure-na-cdn.contentstack.com'); + }); + + it('should set baseURL correctly for gcp-na region', async () => { + await stack.setHost('gcp-na'); + expect(client.defaults.baseURL).toBe('https://gcp-na-cdn.contentstack.com'); + }); + + it('should set baseURL correctly for gcp-eu region', async () => { + await stack.setHost('gcp-eu'); + expect(client.defaults.baseURL).toBe('https://gcp-eu-cdn.contentstack.com'); + }); + + it('should prioritize custom host over region', async () => { + const customHost = 'custom.example.com'; + await stack.setHost('eu', customHost); + expect(client.defaults.baseURL).toBe(`https://${customHost}`); + }); + + it('should handle case insensitive regions', async () => { + await stack.setHost('EU'); + expect(client.defaults.baseURL).toBe('https://eu-cdn.contentstack.com'); + }); + + it('should use default region when no region provided', async () => { + await stack.setHost(); + expect(client.defaults.baseURL).toBe('https://cdn.contentstack.io'); + }); + + it('should throw error for invalid region', async () => { + await expect(stack.setHost('invalid_region')).rejects.toThrow( + 'Unable to set host using the provided region. Please provide a valid region.' + ); + }); + + it('should handle region aliases correctly', async () => { + await stack.setHost('na'); + expect(client.defaults.baseURL).toBe('https://cdn.contentstack.io'); + + await stack.setHost('us'); + expect(client.defaults.baseURL).toBe('https://cdn.contentstack.io'); + + await stack.setHost('aws-na'); + expect(client.defaults.baseURL).toBe('https://cdn.contentstack.io'); + }); + }); + }); diff --git a/test/unit/utils.spec.ts b/test/unit/utils.spec.ts index ef2be9be..1703b100 100644 --- a/test/unit/utils.spec.ts +++ b/test/unit/utils.spec.ts @@ -1,5 +1,5 @@ import { Region } from "../../src/lib/types"; -import { getHost } from "../../src/lib/utils"; +import { getHostforRegion, encodeQueryParams } from "../../src/lib/utils"; import { DUMMY_URL, HOST_EU_REGION, @@ -8,11 +8,11 @@ import { HOST_URL, MOCK_CLIENT_OPTIONS, HOST_GCP_EU_REGION, + HOST_AZURE_NA_REGION, } from "../utils/constant"; import { httpClient, AxiosInstance } from "@contentstack/core"; import MockAdapter from "axios-mock-adapter"; import { assetQueryFindResponseDataMock } from "../utils/mocks"; -import { encodeQueryParams } from "../../src/lib/utils"; let client: AxiosInstance; let mockClient: MockAdapter; @@ -22,36 +22,171 @@ beforeAll(() => { mockClient = new MockAdapter(client as any); }); -describe("Utils", () => { - it("should return EU host when region or host is passed", () => { - const url = getHost(Region.EU); - expect(url).toEqual(HOST_EU_REGION); - }); - it("should return AU host when region or host is passed", () => { - const url = getHost(Region.AU); - expect(url).toEqual(HOST_AU_REGION); - }); - it("should return GCP NA host when region or host is passed", () => { - const url = getHost(Region.GCP_NA); - expect(url).toEqual(HOST_GCP_NA_REGION); - }); - it("should return GCP EU host when region or host is passed", () => { - const url = getHost(Region.GCP_EU); - expect(url).toEqual(HOST_GCP_EU_REGION); - }); - it("should return proper US region when nothing is passed", () => { - const url = getHost(); - expect(url).toEqual(HOST_URL); - }); +describe("Utils functions", () => { + describe("getHostforRegion function", () => { + it("should return custom host when provided", () => { + const customHost = "custom.example.com"; + const result = getHostforRegion("aws_na", customHost); + expect(result).toBe(customHost); + }); + + it("should return default host for aws_na region", () => { + const result = getHostforRegion("aws_na"); + expect(result).toBe(HOST_URL); + }); + + it("should return default host when no region is provided", () => { + const result = getHostforRegion(); + expect(result).toBe(HOST_URL); + }); + + it("should return correct host for eu region", () => { + const result = getHostforRegion("eu"); + expect(result).toBe(HOST_EU_REGION); + }); + + it("should return correct host for aws_eu region", () => { + const result = getHostforRegion("aws_eu"); + expect(result).toBe(HOST_EU_REGION); + }); + + it("should return correct host for aws-eu region", () => { + const result = getHostforRegion("aws-eu"); + expect(result).toBe(HOST_EU_REGION); + }); + + it("should return correct host for au region", () => { + const result = getHostforRegion("au"); + expect(result).toBe(HOST_AU_REGION); + }); + + it("should return correct host for aws_au region", () => { + const result = getHostforRegion("aws_au"); + expect(result).toBe(HOST_AU_REGION); + }); + + it("should return correct host for aws-au region", () => { + const result = getHostforRegion("aws-au"); + expect(result).toBe(HOST_AU_REGION); + }); + + it("should return correct host for azure-na region", () => { + const result = getHostforRegion("azure-na"); + expect(result).toBe(HOST_AZURE_NA_REGION); + }); + + it("should return correct host for azure_na region", () => { + const result = getHostforRegion("azure_na"); + expect(result).toBe(HOST_AZURE_NA_REGION); + }); + + it("should return correct host for gcp-na region", () => { + const result = getHostforRegion("gcp-na"); + expect(result).toBe(HOST_GCP_NA_REGION); + }); + + it("should return correct host for gcp_na region", () => { + const result = getHostforRegion("gcp_na"); + expect(result).toBe(HOST_GCP_NA_REGION); + }); + + it("should return correct host for gcp-eu region", () => { + const result = getHostforRegion("gcp-eu"); + expect(result).toBe(HOST_GCP_EU_REGION); + }); + + it("should return correct host for gcp_eu region", () => { + const result = getHostforRegion("gcp_eu"); + expect(result).toBe(HOST_GCP_EU_REGION); + }); + + it("should handle case insensitive region names", () => { + expect(getHostforRegion("AWS_NA")).toBe(HOST_URL); + expect(getHostforRegion("EU")).toBe(HOST_EU_REGION); + expect(getHostforRegion("AU")).toBe(HOST_AU_REGION); + expect(getHostforRegion("AZURE-NA")).toBe(HOST_AZURE_NA_REGION); + expect(getHostforRegion("GCP-NA")).toBe(HOST_GCP_NA_REGION); + }); + + it("should handle mixed case region names", () => { + expect(getHostforRegion("Aws_Na")).toBe(HOST_URL); + expect(getHostforRegion("Eu")).toBe(HOST_EU_REGION); + expect(getHostforRegion("Au")).toBe(HOST_AU_REGION); + expect(getHostforRegion("Azure-Na")).toBe(HOST_AZURE_NA_REGION); + expect(getHostforRegion("Gcp-Na")).toBe(HOST_GCP_NA_REGION); + }); + + it("should throw error for invalid region", () => { + expect(() => getHostforRegion("invalid_region")).toThrow( + "Unable to set host using the provided region. Please provide a valid region." + ); + }); + + it("should throw error for empty string region", () => { + expect(() => getHostforRegion("")).toThrow( + "Unable to set host using the provided region. Please provide a valid region." + ); + }); + + it("should throw error for null region", () => { + expect(() => getHostforRegion(null as any)).toThrow( + "Unable to set host using the provided region. Please provide a valid region." + ); + }); - it("should return the host url if host is passed instead of region", () => { - const host = DUMMY_URL; - const url = getHost(Region.US, host); - expect(url).toEqual(DUMMY_URL); + it("should return default host when undefined region is explicitly passed", () => { + // When undefined is passed explicitly, JavaScript uses the default parameter value "aws_na" + const result = getHostforRegion(undefined as any); + expect(result).toBe(HOST_URL); + }); + + it("should throw error for non-string region types", () => { + expect(() => getHostforRegion(123 as any)).toThrow( + "Unable to set host using the provided region. Please provide a valid region." + ); + + expect(() => getHostforRegion({} as any)).toThrow( + "Unable to set host using the provided region. Please provide a valid region." + ); + + expect(() => getHostforRegion([] as any)).toThrow( + "Unable to set host using the provided region. Please provide a valid region." + ); + }); + + it("should prioritize custom host over region", () => { + const customHost = "priority.example.com"; + const result = getHostforRegion("invalid_region", customHost); + expect(result).toBe(customHost); + }); + + it("should handle region aliases correctly", () => { + // Test all aliases for aws_na + expect(getHostforRegion("na")).toBe(HOST_URL); + expect(getHostforRegion("us")).toBe(HOST_URL); + expect(getHostforRegion("aws-na")).toBe(HOST_URL); + expect(getHostforRegion("aws_na")).toBe(HOST_URL); + }); + + it("should strip protocol from content delivery endpoint", () => { + // The function should remove https:// from the endpoint + const result = getHostforRegion("aws_na"); + expect(result).not.toContain("https://"); + expect(result).not.toContain("http://"); + expect(result).toBe(HOST_URL); + }); + + it("should handle azure-eu region", () => { + const result = getHostforRegion("azure-eu"); + expect(result).toBe("azure-eu-cdn.contentstack.com"); + }); + + it("should handle azure_eu region", () => { + const result = getHostforRegion("azure_eu"); + expect(result).toBe("azure-eu-cdn.contentstack.com"); + }); }); -}); -describe("Utils functions", () => { describe("encodeQueryParams function", () => { it("should encode special characters in strings", () => { const testParams = { diff --git a/tsconfig.json b/tsconfig.json index 4971ec59..2fa7cad8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -19,6 +19,7 @@ "noPropertyAccessFromIndexSignature": false, "outDir": "dist", "rootDir": ".", + "resolveJsonModule": true, "skipDefaultLibCheck": true, "skipLibCheck": true, "sourceMap": true, From 4a9ef4d7d697a61d2fe091486c0b2ead48e9b55a Mon Sep 17 00:00:00 2001 From: Nadeem Patwekar Date: Wed, 29 Oct 2025 01:15:06 +0530 Subject: [PATCH 04/26] feat: update regions.json paths and add copying logic in build process --- package.json | 7 ++++--- src/lib/utils.ts | 2 +- tsup.config.js | 32 +++++++++++++++++++++++++++++++- 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 90c55337..dbf3e5b1 100644 --- a/package.json +++ b/package.json @@ -33,8 +33,8 @@ "build:esm": "node tools/cleanup esm && tsc -p config/tsconfig.esm.json", "build:types": "node tools/cleanup types && tsc -p config/tsconfig.types.json", "husky-check": "npm run build && husky && chmod +x .husky/pre-commit", - "postinstall": "curl -s --max-time 30 --fail https://artifacts.contentstack.com/regions.json -o regions.json || echo 'Warning: Failed to download regions.json, using existing file if available'", - "postupdate": "curl -s --max-time 30 --fail https://artifacts.contentstack.com/regions.json -o regions.json || echo 'Warning: Failed to download regions.json, using existing file if available'" + "postinstall": "curl -s --max-time 30 --fail https://artifacts.contentstack.com/regions.json -o src/assets/regions.json || echo 'Warning: Failed to download regions.json, using existing file if available'", + "postupdate": "curl -s --max-time 30 --fail https://artifacts.contentstack.com/regions.json -o src/assets/regions.json || echo 'Warning: Failed to download regions.json, using existing file if available'" }, "dependencies": { "@contentstack/core": "^1.3.1", @@ -45,7 +45,8 @@ "files": [ "dist", "package.json", - "README.md" + "README.md", + "src/assets/regions.json" ], "devDependencies": { "@nrwl/jest": "^17.3.2", diff --git a/src/lib/utils.ts b/src/lib/utils.ts index 87502dfa..43d4892a 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -1,5 +1,5 @@ import { Region, params } from './types'; -import regionsData from '../../regions.json'; +import regionsData from '../assets/regions.json'; export function getHostforRegion(cloudRegion: string = "aws_na", host?: string): string { if (host) return host; diff --git a/tsup.config.js b/tsup.config.js index c1f58349..b2a6de23 100644 --- a/tsup.config.js +++ b/tsup.config.js @@ -1,6 +1,8 @@ import { defineConfig } from 'tsup' import { esbuildPluginFilePathExtensions } from 'esbuild-plugin-file-path-extensions' import packageJson from './package.json' assert { type: "json" }; +import { copyFileSync, existsSync, mkdirSync } from 'fs'; +import { dirname, join } from 'path'; export default defineConfig([ modernConfig({ @@ -30,7 +32,21 @@ function modernConfig(opts) { replace: { '{{VERSION}}': `"${packageJson.version}"`, }, - esbuildPlugins: [esbuildPluginFilePathExtensions({ esmExtension: 'js' })] + esbuildPlugins: [esbuildPluginFilePathExtensions({ esmExtension: 'js' })], + onSuccess: async () => { + // Copy regions.json to dist/modern/assets/ (industry standard structure) + const sourceFile = 'src/assets/regions.json'; + const targetFile = join('dist/modern/assets', 'regions.json'); + + if (existsSync(sourceFile)) { + const targetDir = dirname(targetFile); + if (!existsSync(targetDir)) { + mkdirSync(targetDir, { recursive: true }); + } + copyFileSync(sourceFile, targetFile); + console.log('✓ Copied regions.json to dist/modern/assets'); + } + } } } @@ -54,5 +70,19 @@ function legacyConfig(opts) { options.jsxImportSource = 'preact'; options.jsx = 'automatic' }, + onSuccess: async () => { + // Copy regions.json to dist/legacy/assets/ (industry standard structure) + const sourceFile = 'src/assets/regions.json'; + const targetFile = join('dist/legacy/assets', 'regions.json'); + + if (existsSync(sourceFile)) { + const targetDir = dirname(targetFile); + if (!existsSync(targetDir)) { + mkdirSync(targetDir, { recursive: true }); + } + copyFileSync(sourceFile, targetFile); + console.log('✓ Copied regions.json to dist/legacy/assets'); + } + } } } \ No newline at end of file From f2594bd0d9b020a744a2bd6ee8a96e3a89e3d1b4 Mon Sep 17 00:00:00 2001 From: Nadeem Patwekar Date: Wed, 29 Oct 2025 01:26:41 +0530 Subject: [PATCH 05/26] chore: update axios version to 1.13.1 in package.json and package-lock.json --- .talismanrc | 2 +- package-lock.json | 12 ++++++------ package.json | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.talismanrc b/.talismanrc index df411986..ea390f55 100644 --- a/.talismanrc +++ b/.talismanrc @@ -1,6 +1,6 @@ fileignoreconfig: - filename: package-lock.json - checksum: 2d01a92de8d55b56ba719b8c1a497ecda99b084d9a0f35687a363d99265a1d7c + checksum: 275bc45fd72f2a19f8634536e1e0ea3d6516ea554178d172f9e64d01521b06f7 - filename: test/unit/contentstack.spec.ts checksum: d5b99c01459ab8bc597baaa9e6cc4aa91ac6d9bf78af08e1d0220d0c5db3d0b3 - filename: test/unit/utils.spec.ts diff --git a/package-lock.json b/package-lock.json index ae1c7a74..54e7d2a1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,18 @@ { "name": "@contentstack/delivery-sdk", - "version": "4.9.0", + "version": "4.10.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@contentstack/delivery-sdk", - "version": "4.9.0", + "version": "4.10.1", "hasInstallScript": true, "license": "MIT", "dependencies": { "@contentstack/core": "^1.3.1", "@contentstack/utils": "^1.5.0", - "axios": "^1.11.0", + "axios": "^1.13.1", "humps": "^2.0.1" }, "devDependencies": { @@ -4973,9 +4973,9 @@ "license": "MIT" }, "node_modules/axios": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", - "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.1.tgz", + "integrity": "sha512-hU4EGxxt+j7TQijx1oYdAjw4xuIp1wRQSsbMFwSthCWeBQur1eF+qJ5iQ5sN3Tw8YRzQNKb8jszgBdMDVqwJcw==", "license": "MIT", "peer": true, "dependencies": { diff --git a/package.json b/package.json index 63c8268d..346d6f68 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "dependencies": { "@contentstack/core": "^1.3.1", "@contentstack/utils": "^1.5.0", - "axios": "^1.11.0", + "axios": "^1.13.1", "humps": "^2.0.1" }, "files": [ From 80d26ec002cdaf2c0745379bfb47e04b80008f62 Mon Sep 17 00:00:00 2001 From: Nadeem Patwekar Date: Wed, 29 Oct 2025 16:38:18 +0530 Subject: [PATCH 06/26] feat: implement download script for regions.json and update postinstall/postupdate scripts --- package.json | 5 ++-- scripts/download-regions.cjs | 47 ++++++++++++++++++++++++++++++++++++ scripts/download-regions.js | 1 + 3 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 scripts/download-regions.cjs create mode 100644 scripts/download-regions.js diff --git a/package.json b/package.json index 346d6f68..f706ad29 100644 --- a/package.json +++ b/package.json @@ -33,8 +33,8 @@ "build:esm": "node tools/cleanup esm && tsc -p config/tsconfig.esm.json", "build:types": "node tools/cleanup types && tsc -p config/tsconfig.types.json", "husky-check": "npm run build && husky && chmod +x .husky/pre-commit", - "postinstall": "curl -s --max-time 30 --fail https://artifacts.contentstack.com/regions.json -o src/assets/regions.json || echo 'Warning: Failed to download regions.json, using existing file if available'", - "postupdate": "curl -s --max-time 30 --fail https://artifacts.contentstack.com/regions.json -o src/assets/regions.json || echo 'Warning: Failed to download regions.json, using existing file if available'" + "postinstall": "node scripts/download-regions.cjs", + "postupdate": "node scripts/download-regions.cjs" }, "dependencies": { "@contentstack/core": "^1.3.1", @@ -44,6 +44,7 @@ }, "files": [ "dist", + "scripts/download-regions.cjs", "package.json", "README.md", "src/assets/regions.json" diff --git a/scripts/download-regions.cjs b/scripts/download-regions.cjs new file mode 100644 index 00000000..db8bacbb --- /dev/null +++ b/scripts/download-regions.cjs @@ -0,0 +1,47 @@ +#!/usr/bin/env node +const fs = require('fs'); +const https = require('https'); +const path = require('path'); + +const targetFiles = [ + 'src/assets/regions.json', + 'dist/modern/assets/regions.json', + 'dist/legacy/assets/regions.json' +]; + +function downloadRegions(targetFile) { + const targetDir = path.dirname(targetFile); + + // Ensure directory exists + if (!fs.existsSync(targetDir)) { + fs.mkdirSync(targetDir, { recursive: true }); + } + + const url = 'https://artifacts.contentstack.com/regions.json'; + + https.get(url, { timeout: 30000 }, (response) => { + if (response.statusCode === 200) { + const fileStream = fs.createWriteStream(targetFile); + response.pipe(fileStream); + + fileStream.on('close', () => { + console.log(`✓ Updated ${targetFile}`); + }); + + fileStream.on('error', (err) => { + console.log(`Warning: Failed to write ${targetFile}, using bundled version`); + }); + } else { + console.log(`Warning: HTTP ${response.statusCode}, using bundled regions.json`); + } + }).on('error', (err) => { + console.log(`Warning: Failed to download regions.json (${err.message}), using bundled version`); + }).setTimeout(30000, function() { + this.destroy(); + console.log('Warning: Download timeout, using bundled regions.json'); + }); +} + +// Download to all target locations +targetFiles.forEach(downloadRegions); + diff --git a/scripts/download-regions.js b/scripts/download-regions.js new file mode 100644 index 00000000..0519ecba --- /dev/null +++ b/scripts/download-regions.js @@ -0,0 +1 @@ + \ No newline at end of file From 4901c15304373b76d0fc3ec0a0a8735e0df47741 Mon Sep 17 00:00:00 2001 From: "harshitha.d" Date: Fri, 31 Oct 2025 19:01:19 +0530 Subject: [PATCH 07/26] improve coverage reports --- test/unit/base-query.spec.ts | 95 ++++++++++++ test/unit/contentstack.spec.ts | 258 +++++++++++++++++++++++++++++++++ test/unit/entries.spec.ts | 102 +++++++++++++ test/unit/entry.spec.ts | 111 ++++++++++++++ test/unit/query.spec.ts | 202 ++++++++++++++++++++++++++ test/unit/stack.spec.ts | 59 ++++++++ 6 files changed, 827 insertions(+) diff --git a/test/unit/base-query.spec.ts b/test/unit/base-query.spec.ts index 1a2da5c0..957bdbeb 100644 --- a/test/unit/base-query.spec.ts +++ b/test/unit/base-query.spec.ts @@ -1,4 +1,8 @@ import { BaseQuery } from '../../src/lib/base-query'; +import { httpClient, AxiosInstance } from '@contentstack/core'; +import { MOCK_CLIENT_OPTIONS } from '../utils/constant'; +import MockAdapter from 'axios-mock-adapter'; +import { entryFindMock } from '../utils/mocks'; describe('BaseQuery class', () => { let baseQuery: BaseQuery; @@ -69,4 +73,95 @@ describe('BaseQuery class', () => { baseQuery.removeParam('key2'); expect(baseQuery._queryParams).toEqual({ key1: 'value1' }); }); +}); + +class TestableBaseQuery extends BaseQuery { + constructor(client: AxiosInstance, urlPath: string) { + super(); + this._client = client; + this._urlPath = urlPath; + this._variants = ''; + } + + setVariants(variants: string) { + this._variants = variants; + } + + setParameters(params: any) { + this._parameters = params; + } +} + +describe('BaseQuery find method', () => { + let client: AxiosInstance; + let mockClient: MockAdapter; + let query: TestableBaseQuery; + + beforeAll(() => { + client = httpClient(MOCK_CLIENT_OPTIONS); + mockClient = new MockAdapter(client as any); + }); + + beforeEach(() => { + query = new TestableBaseQuery(client, '/content_types/test_uid/entries'); + mockClient.reset(); + }); + + it('should call find with encode parameter true', async () => { + mockClient.onGet('/content_types/test_uid/entries').reply(200, entryFindMock); + + query.setParameters({ title: 'Test' }); + const result = await query.find(true); + + expect(result).toEqual(entryFindMock); + }); + + it('should call find without parameters', async () => { + mockClient.onGet('/content_types/test_uid/entries').reply(200, entryFindMock); + + const result = await query.find(); + + expect(result).toEqual(entryFindMock); + }); + + it('should call find with variants header when variants are set', async () => { + mockClient.onGet('/content_types/test_uid/entries').reply((config) => { + expect(config.headers?.['x-cs-variant-uid']).toBe('variant1,variant2'); + return [200, entryFindMock]; + }); + + query.setVariants('variant1,variant2'); + await query.find(); + }); + + it('should extract content type UID from URL path', async () => { + mockClient.onGet('/content_types/my_content_type/entries').reply(200, entryFindMock); + + const queryWithContentType = new TestableBaseQuery(client, '/content_types/my_content_type/entries'); + const result = await queryWithContentType.find(); + + expect(result).toEqual(entryFindMock); + }); + + it('should return null for content type UID when URL does not match pattern', async () => { + mockClient.onGet('/assets').reply(200, entryFindMock); + + const queryWithoutContentType = new TestableBaseQuery(client, '/assets'); + const result = await queryWithoutContentType.find(); + + expect(result).toEqual(entryFindMock); + }); + + it('should handle find with both encode and variants', async () => { + mockClient.onGet('/content_types/test_uid/entries').reply((config) => { + expect(config.headers?.['x-cs-variant-uid']).toBe('test-variant'); + return [200, entryFindMock]; + }); + + query.setVariants('test-variant'); + query.setParameters({ status: 'published' }); + const result = await query.find(true); + + expect(result).toEqual(entryFindMock); + }); }); \ No newline at end of file diff --git a/test/unit/contentstack.spec.ts b/test/unit/contentstack.spec.ts index b65dc462..f3db9934 100644 --- a/test/unit/contentstack.spec.ts +++ b/test/unit/contentstack.spec.ts @@ -3,6 +3,7 @@ import * as core from "@contentstack/core"; import * as Contentstack from "../../src/lib/contentstack"; import { Stack } from "../../src/lib/stack"; import { Policy, Region, StackConfig } from "../../src/lib/types"; +import { StorageType } from "../../src/persistance/types/storage-type"; import { CUSTOM_HOST, DUMMY_URL, @@ -401,4 +402,261 @@ describe("Contentstack", () => { getHostforRegionSpy.mockRestore(); }); }); + + describe('locale configuration', () => { + it('should set locale in params when locale is provided in config', () => { + const config = { + apiKey: "apiKey", + deliveryToken: "delivery", + environment: "env", + locale: "fr-fr", + }; + + const stackInstance = createStackInstance(config); + + expect(stackInstance).toBeInstanceOf(Stack); + expect(stackInstance.config.locale).toEqual("fr-fr"); + }); + }); + + describe('live preview configuration in browser environment', () => { + const originalDocument = global.document; + const originalWindow = global.window; + + beforeEach(() => { + // Mock browser environment + (utils.isBrowser as jest.Mock) = jest.fn(); + delete (global as any).document; + delete (global as any).window; + }); + + afterEach(() => { + global.document = originalDocument; + global.window = originalWindow; + jest.restoreAllMocks(); + }); + + it('should extract live_preview params from URL in browser environment', () => { + const isBrowserSpy = jest.spyOn(utils, 'isBrowser').mockReturnValue(true); + + // Mock document.location + const mockSearchParams = new Map([ + ['live_preview', 'test_hash'], + ['release_id', 'release123'], + ['preview_timestamp', '123456789'] + ]); + + (global as any).document = { + location: { + toString: () => 'http://localhost?live_preview=test_hash&release_id=release123&preview_timestamp=123456789' + } + }; + + const config = { + apiKey: "apiKey", + deliveryToken: "delivery", + environment: "env", + live_preview: { + enable: true, + live_preview: 'default_hash' + }, + }; + + const stackInstance = createStackInstance(config); + + expect(isBrowserSpy).toHaveBeenCalled(); + expect(stackInstance).toBeInstanceOf(Stack); + + isBrowserSpy.mockRestore(); + }); + + it('should not extract params when not in browser environment', () => { + const isBrowserSpy = jest.spyOn(utils, 'isBrowser').mockReturnValue(false); + + const config = { + apiKey: "apiKey", + deliveryToken: "delivery", + environment: "env", + live_preview: { + enable: true, + }, + }; + + const stackInstance = createStackInstance(config); + + expect(isBrowserSpy).toHaveBeenCalled(); + expect(stackInstance).toBeInstanceOf(Stack); + + isBrowserSpy.mockRestore(); + }); + }); + + describe('cache adapter configuration', () => { + it('should set cache adapter when cacheOptions with policy is provided', () => { + const mockAdapter = jest.fn(); + const mockClient = { + defaults: { + host: HOST_URL, + adapter: mockAdapter, + }, + interceptors: { + request: { + use: reqInterceptor, + }, + response: { + use: resInterceptor, + }, + }, + }; + + createHttpClientMock.mockReturnValue(mockClient as any); + + const config = { + apiKey: "apiKey", + deliveryToken: "delivery", + environment: "env", + cacheOptions: { + policy: Policy.CACHE_THEN_NETWORK, + storeType: 'localStorage' as StorageType + }, + }; + + const stackInstance = createStackInstance(config); + + expect(stackInstance).toBeInstanceOf(Stack); + expect(mockClient.defaults.adapter).toBeDefined(); + }); + }); + + describe('debug mode with logging interceptors', () => { + it('should add request and response logging interceptors when debug is enabled', () => { + const mockLogHandler = jest.fn(); + const config = { + apiKey: "apiKey", + deliveryToken: "delivery", + environment: "env", + debug: true, + logHandler: mockLogHandler, + }; + + const stackInstance = createStackInstance(config); + + expect(stackInstance).toBeInstanceOf(Stack); + expect(reqInterceptor).toHaveBeenCalled(); + expect(resInterceptor).toHaveBeenCalled(); + }); + }); + + describe('plugin interceptors execution', () => { + it('should execute plugin onRequest and onResponse methods', () => { + const mockOnRequest = jest.fn((req) => req); + const mockOnResponse = jest.fn((req, res, data) => res); + let requestInterceptor: any; + let responseInterceptor: any; + + const mockClient = { + defaults: { + host: HOST_URL, + }, + interceptors: { + request: { + use: jest.fn((interceptor) => { + requestInterceptor = interceptor; + }), + }, + response: { + use: jest.fn((successInterceptor) => { + responseInterceptor = successInterceptor; + }), + }, + }, + }; + + createHttpClientMock.mockReturnValue(mockClient as any); + + const mockPlugin = { + onRequest: mockOnRequest, + onResponse: mockOnResponse, + }; + + const config = { + apiKey: "apiKey", + deliveryToken: "delivery", + environment: "env", + plugins: [mockPlugin], + }; + + createStackInstance(config); + + // Test that interceptors were registered + expect(mockClient.interceptors.request.use).toHaveBeenCalled(); + expect(mockClient.interceptors.response.use).toHaveBeenCalled(); + + // Test request interceptor execution + const mockRequest = { url: '/test' }; + requestInterceptor(mockRequest); + expect(mockOnRequest).toHaveBeenCalledWith(mockRequest); + + // Test response interceptor execution + const mockResponse = { + request: {}, + data: {}, + }; + responseInterceptor(mockResponse); + expect(mockOnResponse).toHaveBeenCalledWith(mockResponse.request, mockResponse, mockResponse.data); + }); + + it('should handle multiple plugins in order', () => { + const executionOrder: string[] = []; + let requestInterceptor: any; + + const mockClient = { + defaults: { + host: HOST_URL, + }, + interceptors: { + request: { + use: jest.fn((interceptor) => { + requestInterceptor = interceptor; + }), + }, + response: { + use: jest.fn(), + }, + }, + }; + + createHttpClientMock.mockReturnValue(mockClient as any); + + const mockPlugin1 = { + onRequest: jest.fn((req) => { + executionOrder.push('plugin1'); + return req; + }), + onResponse: jest.fn((req, res, data) => res), + }; + + const mockPlugin2 = { + onRequest: jest.fn((req) => { + executionOrder.push('plugin2'); + return req; + }), + onResponse: jest.fn((req, res, data) => res), + }; + + const config = { + apiKey: "apiKey", + deliveryToken: "delivery", + environment: "env", + plugins: [mockPlugin1, mockPlugin2], + }; + + createStackInstance(config); + + const mockRequest = { url: '/test' }; + requestInterceptor(mockRequest); + + expect(executionOrder).toEqual(['plugin1', 'plugin2']); + }); + }); }); diff --git a/test/unit/entries.spec.ts b/test/unit/entries.spec.ts index 020b3aef..ed2d34b0 100644 --- a/test/unit/entries.spec.ts +++ b/test/unit/entries.spec.ts @@ -38,6 +38,18 @@ describe('Entries class', () => { expect(entry._queryParams['include[]']).toContain(referenceFieldUid); }); + it('should handle multiple reference field UIDs', () => { + entry.includeReference('ref1', 'ref2', ['ref3', 'ref4']); + expect(entry._queryParams['include[]']).toEqual(['ref1', 'ref2', 'ref3', 'ref4']); + }); + + it('should log error when includeReference called with no arguments', () => { + const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(); + entry.includeReference(); + expect(consoleErrorSpy).toHaveBeenCalledWith('Argument should be a String or an Array.'); + consoleErrorSpy.mockRestore(); + }); + it('should add "include_fallback" in _queryParams when includeFallback method is called', () => { const returnedValue = entry.includeFallback(); expect(returnedValue).toBeInstanceOf(Entries); @@ -109,6 +121,20 @@ describe('Entries class', () => { expect(entry._queryParams).toEqual({ 'except[BASE][]': 'fieldUid2' }); }); + it('should handle except with array of fieldUids', () => { + entry.except(['field1', 'field2', 'field3']); + expect(entry._queryParams['except[BASE][0]']).toBe('field1'); + expect(entry._queryParams['except[BASE][1]']).toBe('field2'); + expect(entry._queryParams['except[BASE][2]']).toBe('field3'); + }); + + it('should handle only with array of fieldUids', () => { + entry.only(['field1', 'field2', 'field3']); + expect(entry._queryParams['only[BASE][0]']).toBe('field1'); + expect(entry._queryParams['only[BASE][1]']).toBe('field2'); + expect(entry._queryParams['only[BASE][2]']).toBe('field3'); + }); + it('should provide proper response when find method is called', async () => { mockClient.onGet(`/content_types/contentTypeUid/entries`).reply(200, entryFindMock); const returnedValue = await entry.find(); @@ -176,6 +202,10 @@ class TestVariants extends Entries { this.variants(['variant1', 'variant2']); return this._variants || ""; } + + getVariants(): string { + return this._variants || ""; + } } describe('Variants test', () => { @@ -191,4 +221,76 @@ describe('Variants test', () => { expect(testVariantObj.setAndGetVariantsHeaders()).toBe('variant1,variant2'); }); + + it('should set variants as string', () => { + const testVariantObj = new TestVariants(client); + testVariantObj.variants('variant1'); + expect(testVariantObj.getVariants()).toBe('variant1'); + }); + + it('should set variants as comma-separated string from array', () => { + const testVariantObj = new TestVariants(client); + testVariantObj.variants(['variant1', 'variant2', 'variant3']); + expect(testVariantObj.getVariants()).toBe('variant1,variant2,variant3'); + }); + + it('should not set variants when empty string is provided', () => { + const testVariantObj = new TestVariants(client); + testVariantObj.variants(''); + expect(testVariantObj.getVariants()).toBe(''); + }); + + it('should not set variants when empty array is provided', () => { + const testVariantObj = new TestVariants(client); + testVariantObj.variants([]); + expect(testVariantObj.getVariants()).toBe(''); + }); +}); + +describe('Find with encode and variants', () => { + let client: AxiosInstance; + let mockClient: MockAdapter; + let entry: Entries; + + beforeAll(() => { + client = httpClient(MOCK_CLIENT_OPTIONS); + mockClient = new MockAdapter(client as any); + }); + + beforeEach(() => { + entry = new Entries(client, 'contentTypeUid'); + mockClient.reset(); + }); + + it('should call find with encode parameter true', async () => { + mockClient.onGet('/content_types/contentTypeUid/entries').reply(200, entryFindMock); + + entry.query().where('title', QueryOperation.EQUALS, 'Test'); + const result = await entry.find(true); + + expect(result).toEqual(entryFindMock); + }); + + it('should call find with variants header when variants are set', async () => { + mockClient.onGet('/content_types/contentTypeUid/entries').reply((config) => { + expect(config.headers?.['x-cs-variant-uid']).toBe('variant1,variant2'); + return [200, entryFindMock]; + }); + + entry.variants(['variant1', 'variant2']); + await entry.find(); + }); + + it('should handle find with both encode and variants', async () => { + mockClient.onGet('/content_types/contentTypeUid/entries').reply((config) => { + expect(config.headers?.['x-cs-variant-uid']).toBe('test-variant'); + return [200, entryFindMock]; + }); + + entry.variants('test-variant'); + entry.query().where('status', QueryOperation.EQUALS, 'published'); + const result = await entry.find(true); + + expect(result).toEqual(entryFindMock); + }); }) \ No newline at end of file diff --git a/test/unit/entry.spec.ts b/test/unit/entry.spec.ts index 58b9453e..47bc5d43 100644 --- a/test/unit/entry.spec.ts +++ b/test/unit/entry.spec.ts @@ -44,6 +44,18 @@ describe('Entry class', () => { expect(entry._queryParams['include[]']).toContain(referenceFieldUid); }); + it('should handle multiple reference field UIDs', () => { + entry.includeReference('ref1', 'ref2', ['ref3', 'ref4']); + expect(entry._queryParams['include[]']).toEqual(['ref1', 'ref2', 'ref3', 'ref4']); + }); + + it('should log error when includeReference called with no arguments', () => { + const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(); + entry.includeReference(); + expect(consoleErrorSpy).toHaveBeenCalledWith('Argument should be a String or an Array.'); + consoleErrorSpy.mockRestore(); + }); + it('should add "include_metadata" in _queryParams when includeMetadata method is called', () => { const returnedValue = entry.includeMetadata(); expect(returnedValue).toBeInstanceOf(Entry); @@ -77,6 +89,13 @@ describe('Entry class', () => { expect(entry._queryParams).toEqual({ 'only[BASE][]': 'fieldUid2' }); }); + it('should handle only with array of fieldUids', () => { + entry.only(['field1', 'field2', 'field3']); + expect(entry._queryParams['only[BASE][0]']).toBe('field1'); + expect(entry._queryParams['only[BASE][1]']).toBe('field2'); + expect(entry._queryParams['only[BASE][2]']).toBe('field3'); + }); + it('should add a fieldUid to the _queryParams object', () => { entry.except('fieldUid'); expect(entry._queryParams).toEqual({ 'except[BASE][]': 'fieldUid' }); @@ -92,6 +111,22 @@ describe('Entry class', () => { expect(entry._queryParams).toEqual({ 'except[BASE][]': 'fieldUid2' }); }); + it('should handle except with array of fieldUids', () => { + entry.except(['field1', 'field2', 'field3']); + expect(entry._queryParams['except[BASE][0]']).toBe('field1'); + expect(entry._queryParams['except[BASE][1]']).toBe('field2'); + expect(entry._queryParams['except[BASE][2]']).toBe('field3'); + }); + + it('should add params to _queryParams using addParams', () => { + const params = { key1: 'value1', key2: 123, key3: ['value3'] }; + const returnedValue = entry.addParams(params); + expect(returnedValue).toBeInstanceOf(Entry); + expect(entry._queryParams.key1).toBe('value1'); + expect(entry._queryParams.key2).toBe(123); + expect(entry._queryParams.key3).toEqual(['value3']); + }); + it('should get the API response when fetch method is called', async () => { mockClient.onGet(`/content_types/contentTypeUid/entries/entryUid`).reply(200, entryFetchMock); const returnedValue = await entry.fetch(); @@ -110,6 +145,10 @@ class TestVariants extends Entry { this.variants(['variant1', 'variant2']); // setting the variants headers so it doesnt give empty string return this._variants || ""; } + + getVariants(): string { + return this._variants || ""; + } } describe('Variants test', () => { @@ -125,4 +164,76 @@ describe('Variants test', () => { expect(testVariantObj.setAndGetVariantsHeaders()).toBe('variant1,variant2'); }); + + it('should set variants as string', () => { + const testVariantObj = new TestVariants(client); + testVariantObj.variants('variant1'); + expect(testVariantObj.getVariants()).toBe('variant1'); + }); + + it('should set variants as comma-separated string from array', () => { + const testVariantObj = new TestVariants(client); + testVariantObj.variants(['variant1', 'variant2', 'variant3']); + expect(testVariantObj.getVariants()).toBe('variant1,variant2,variant3'); + }); + + it('should not set variants when empty string is provided', () => { + const testVariantObj = new TestVariants(client); + testVariantObj.variants(''); + expect(testVariantObj.getVariants()).toBe(''); + }); + + it('should not set variants when empty array is provided', () => { + const testVariantObj = new TestVariants(client); + testVariantObj.variants([]); + expect(testVariantObj.getVariants()).toBe(''); + }); +}); + +describe('Fetch with variants', () => { + let client: AxiosInstance; + let mockClient: MockAdapter; + let entry: Entry; + + beforeAll(() => { + client = httpClient(MOCK_CLIENT_OPTIONS); + mockClient = new MockAdapter(client as any); + }); + + beforeEach(() => { + entry = new Entry(client, 'contentTypeUid', 'entryUid'); + mockClient.reset(); + }); + + it('should call fetch with variants header when variants are set', async () => { + mockClient.onGet('/content_types/contentTypeUid/entries/entryUid').reply((config) => { + expect(config.headers?.['x-cs-variant-uid']).toBe('variant1,variant2'); + return [200, entryFetchMock]; + }); + + entry.variants(['variant1', 'variant2']); + const result = await entry.fetch(); + + expect(result).toEqual(entryFetchMock.entry); + }); + + it('should call fetch without variant header when variants are not set', async () => { + mockClient.onGet('/content_types/contentTypeUid/entries/entryUid').reply((config) => { + expect(config.headers?.['x-cs-variant-uid']).toBeUndefined(); + return [200, entryFetchMock]; + }); + + const result = await entry.fetch(); + + expect(result).toEqual(entryFetchMock.entry); + }); + + it('should return response directly when entry property is not present', async () => { + const responseWithoutEntry = { data: 'test', uid: 'test-uid' }; + mockClient.onGet('/content_types/contentTypeUid/entries/entryUid').reply(200, responseWithoutEntry); + + const result = await entry.fetch(); + + expect(result).toEqual(responseWithoutEntry); + }); }) diff --git a/test/unit/query.spec.ts b/test/unit/query.spec.ts index 301d1244..ec7d6b39 100644 --- a/test/unit/query.spec.ts +++ b/test/unit/query.spec.ts @@ -164,6 +164,208 @@ describe('Query class', () => { const returnedValue = await query.find(); expect(returnedValue).toEqual(entryFindMock); }); + + describe('validation error handling', () => { + let consoleErrorSpy: jest.SpyInstance; + + beforeEach(() => { + consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(); + }); + + afterEach(() => { + consoleErrorSpy.mockRestore(); + }); + + it('should log error and return this when where() receives invalid fieldUid', () => { + const result = query.where('invalid@field!', QueryOperation.EQUALS, 'value'); + expect(consoleErrorSpy).toHaveBeenCalledWith('Invalid fieldUid:', 'invalid@field!'); + expect(result).toBe(query); + expect(query._parameters['invalid@field!']).toBeUndefined(); + }); + + it('should log error and return this when regex() receives invalid fieldUid', () => { + const result = query.regex('invalid@field!', '^test'); + expect(consoleErrorSpy).toHaveBeenCalledWith('Invalid fieldUid:', 'invalid@field!'); + expect(result).toBe(query); + }); + + it('should log error and return this when containedIn() receives invalid key', () => { + const result = query.containedIn('invalid@key!', ['value1', 'value2']); + expect(consoleErrorSpy).toHaveBeenCalledWith('Invalid key:', 'invalid@key!'); + expect(result).toBe(query); + expect(query._parameters['invalid@key!']).toBeUndefined(); + }); + + it('should log error and return this when containedIn() receives invalid value', () => { + const result = query.containedIn('validKey', ['value1', {invalid: 'object'}] as any); + expect(consoleErrorSpy).toHaveBeenCalledWith('Invalid value:', ['value1', {invalid: 'object'}]); + expect(result).toBe(query); + }); + + it('should log error and return this when notContainedIn() receives invalid key', () => { + const result = query.notContainedIn('invalid@key!', ['value1', 'value2']); + expect(consoleErrorSpy).toHaveBeenCalledWith('Invalid key:', 'invalid@key!'); + expect(result).toBe(query); + }); + + it('should log error and return this when notContainedIn() receives invalid value', () => { + const result = query.notContainedIn('validKey', [null] as any); + expect(consoleErrorSpy).toHaveBeenCalledWith('Invalid value:', [null]); + expect(result).toBe(query); + }); + + it('should log error and return this when exists() receives invalid key', () => { + const result = query.exists('invalid@key!'); + expect(consoleErrorSpy).toHaveBeenCalledWith('Invalid key:', 'invalid@key!'); + expect(result).toBe(query); + }); + + it('should log error and return this when notExists() receives invalid key', () => { + const result = query.notExists('invalid@key!'); + expect(consoleErrorSpy).toHaveBeenCalledWith('Invalid key:', 'invalid@key!'); + expect(result).toBe(query); + }); + + it('should log error and return this when equalTo() receives invalid key', () => { + const result = query.equalTo('invalid@key!', 'value'); + expect(consoleErrorSpy).toHaveBeenCalledWith('Invalid key:', 'invalid@key!'); + expect(result).toBe(query); + }); + + it('should log error and return this when equalTo() receives invalid value (null)', () => { + const result = query.equalTo('validKey', null as any); + expect(consoleErrorSpy).toHaveBeenCalledWith('Invalid value (expected string or number):', null); + expect(result).toBe(query); + }); + + it('should log error and return this when equalTo() receives invalid value (undefined)', () => { + const result = query.equalTo('validKey', undefined as any); + expect(consoleErrorSpy).toHaveBeenCalledWith('Invalid value (expected string or number):', undefined); + expect(result).toBe(query); + }); + + it('should log error and return this when notEqualTo() receives invalid key', () => { + const result = query.notEqualTo('invalid@key!', 'value'); + expect(consoleErrorSpy).toHaveBeenCalledWith('Invalid key:', 'invalid@key!'); + expect(result).toBe(query); + }); + + it('should log error and return this when notEqualTo() receives invalid value', () => { + const result = query.notEqualTo('validKey', {} as any); + expect(consoleErrorSpy).toHaveBeenCalledWith('Invalid value (expected string or number):', {}); + expect(result).toBe(query); + }); + + it('should log error and return this when referenceIn() receives invalid key', () => { + const subQuery = getQueryObject(client, 'content_type_uid'); + const result = query.referenceIn('invalid@key!', subQuery); + expect(consoleErrorSpy).toHaveBeenCalledWith('Invalid key:', 'invalid@key!'); + expect(result).toBe(query); + }); + + it('should log error and return this when referenceNotIn() receives invalid key', () => { + const subQuery = getQueryObject(client, 'content_type_uid'); + const result = query.referenceNotIn('invalid@key!', subQuery); + expect(consoleErrorSpy).toHaveBeenCalledWith('Invalid key:', 'invalid@key!'); + expect(result).toBe(query); + }); + + it('should log error and return this when tags() receives invalid value', () => { + const result = query.tags([{invalid: 'object'}] as any); + expect(consoleErrorSpy).toHaveBeenCalledWith('Invalid value:', [{invalid: 'object'}]); + expect(result).toBe(query); + }); + + it('should log error and return this when search() receives invalid key', () => { + const result = query.search('invalid@search!'); + expect(consoleErrorSpy).toHaveBeenCalledWith('Invalid key:', 'invalid@search!'); + expect(result).toBe(query); + }); + + it('should log error and return this when lessThan() receives invalid key', () => { + const result = query.lessThan('invalid@key!', 10); + expect(consoleErrorSpy).toHaveBeenCalledWith('Invalid key:', 'invalid@key!'); + expect(result).toBe(query); + }); + + it('should log error and return this when lessThan() receives invalid value', () => { + const result = query.lessThan('validKey', {} as any); + expect(consoleErrorSpy).toHaveBeenCalledWith('Invalid value (expected string or number):', {}); + expect(result).toBe(query); + }); + + it('should log error and return this when lessThanOrEqualTo() receives invalid key', () => { + const result = query.lessThanOrEqualTo('invalid@key!', 10); + expect(consoleErrorSpy).toHaveBeenCalledWith('Invalid key:', 'invalid@key!'); + expect(result).toBe(query); + }); + + it('should log error and return this when lessThanOrEqualTo() receives invalid value', () => { + const result = query.lessThanOrEqualTo('validKey', [] as any); + expect(consoleErrorSpy).toHaveBeenCalledWith('Invalid value (expected string or number):', []); + expect(result).toBe(query); + }); + + it('should log error and return this when greaterThan() receives invalid key', () => { + const result = query.greaterThan('invalid@key!', 10); + expect(consoleErrorSpy).toHaveBeenCalledWith('Invalid key:', 'invalid@key!'); + expect(result).toBe(query); + }); + + it('should log error and return this when greaterThan() receives invalid value', () => { + const result = query.greaterThan('validKey', null as any); + expect(consoleErrorSpy).toHaveBeenCalledWith('Invalid value (expected string or number):', null); + expect(result).toBe(query); + }); + + it('should log error and return this when greaterThanOrEqualTo() receives invalid key', () => { + const result = query.greaterThanOrEqualTo('invalid@key!', 10); + expect(consoleErrorSpy).toHaveBeenCalledWith('Invalid key:', 'invalid@key!'); + expect(result).toBe(query); + }); + + it('should log error and return this when greaterThanOrEqualTo() receives invalid value', () => { + const result = query.greaterThanOrEqualTo('validKey', undefined as any); + expect(consoleErrorSpy).toHaveBeenCalledWith('Invalid value (expected string or number):', undefined); + expect(result).toBe(query); + }); + + it('should throw error when whereIn() receives invalid referenceUid', () => { + const subQuery = getQueryObject(client, 'content_type_uid'); + expect(() => query.whereIn('invalid@ref!', subQuery)).toThrow('Invalid referenceUid: Must be alphanumeric.'); + }); + + it('should throw error when whereNotIn() receives invalid referenceUid', () => { + const subQuery = getQueryObject(client, 'content_type_uid'); + expect(() => query.whereNotIn('invalid@ref!', subQuery)).toThrow('Invalid referenceUid: Must be alphanumeric.'); + }); + }); + + describe('or() and and() methods', () => { + it('should add or parameter to _parameters', () => { + const query1 = getQueryObject(client, 'content_type_uid'); + query1.containedIn('field1', ['value1']); + + const query2 = getQueryObject(client, 'content_type_uid'); + query2.where('field2', QueryOperation.EQUALS, 'value2'); + + query.or(query1, query2); + + expect(query._parameters.$or).toEqual([query1._parameters, query2._parameters]); + }); + + it('should add and parameter to _parameters', () => { + const query1 = getQueryObject(client, 'content_type_uid'); + query1.containedIn('field1', ['value1']); + + const query2 = getQueryObject(client, 'content_type_uid'); + query2.where('field2', QueryOperation.EQUALS, 'value2'); + + query.and(query1, query2); + + expect(query._parameters.$and).toEqual([query1._parameters, query2._parameters]); + }); + }); }); function getQueryObject(client: AxiosInstance, uid: string, queryObj?: { [key: string]: any }) { diff --git a/test/unit/stack.spec.ts b/test/unit/stack.spec.ts index 3312d74e..b23d1997 100644 --- a/test/unit/stack.spec.ts +++ b/test/unit/stack.spec.ts @@ -146,6 +146,38 @@ describe('Stack class tests', () => { expect(stack.getClient().defaults.headers['preview_timestamp']).toBeUndefined(); }); + it('should handle livePreviewQuery when live_preview config is not set', () => { + delete stack.config.live_preview; + const query = { + live_preview: 'live_preview_hash', + release_id: 'releaseId', + }; + + stack.livePreviewQuery(query); + + expect(stack.getClient().defaults.headers['release_id']).toEqual('releaseId'); + }); + + it('should use content_type_uid and entry_uid fallback properties', () => { + const query = { + live_preview: 'live_preview_hash', + content_type_uid: 'contentTypeUid', + entry_uid: 'entryUid', + }; + + stack.config.live_preview = { enable: true, live_preview: 'true' }; + stack.livePreviewQuery(query); + + expect(stack.getClient().stackConfig.live_preview).toEqual({ + live_preview: 'live_preview_hash', + contentTypeUid: 'contentTypeUid', + enable: true, + entryUid: 'entryUid', + preview_timestamp: '', + include_applied_variants: false, + }); + }); + it('should return last activities', async () => { mockClient.onGet('/content_types').reply(200, contentTypeQueryFindResponseDataMock); const response = await stack.getLastActivities(); @@ -154,11 +186,38 @@ describe('Stack class tests', () => { expect(Array.isArray(response.content_types)).toBe(true); }); + it('should throw error when getLastActivities fails', async () => { + mockClient.onGet('/content_types').networkError(); + + await expect(stack.getLastActivities()).rejects.toThrow('Error fetching last activities'); + }); + it('should set port to 3000', () => { stack.setPort(3000); expect(stack.config.port).toEqual(3000); }); + it('should not set port when provided with non-number', () => { + stack.setPort('3000' as any); + expect(stack.config.port).not.toEqual('3000'); + }); + + it('should set debug to true', () => { + stack.setDebug(true); + expect(stack.config.debug).toEqual(true); + }); + + it('should set debug to false', () => { + stack.setDebug(false); + expect(stack.config.debug).toEqual(false); + }); + + it('should not set debug when provided with non-boolean', () => { + stack.config.debug = false; + stack.setDebug('true' as any); + expect(stack.config.debug).toEqual(false); + }); + describe('setHost method integration tests', () => { it('should set baseURL correctly for aws_na region', async () => { await stack.setHost('aws_na'); From 139f5feaa86a4dba3a369cac20bd498cf7709255 Mon Sep 17 00:00:00 2001 From: "harshitha.d" Date: Fri, 31 Oct 2025 19:12:44 +0530 Subject: [PATCH 08/26] add unit tests for AssetQuery, Asset, BaseQuery, Cache, ContentType, Entries, Pagination, Query, and Stack classes - Added tests for debug logging integration in Contentstack. --- test/unit/asset-query.spec.ts | 6 + test/unit/asset.spec.ts | 15 ++ test/unit/base-query.spec.ts | 18 +- test/unit/cache.spec.ts | 89 ++++++++ .../contentstack-debug-integration.spec.ts | 195 ++++++++++++++++++ test/unit/contenttype.spec.ts | 9 + test/unit/entries.spec.ts | 7 + test/unit/pagination.spec.ts | 23 +++ test/unit/query.spec.ts | 22 +- test/unit/stack.spec.ts | 18 ++ 10 files changed, 397 insertions(+), 5 deletions(-) create mode 100644 test/unit/contentstack-debug-integration.spec.ts diff --git a/test/unit/asset-query.spec.ts b/test/unit/asset-query.spec.ts index 7f290c30..de314bb4 100644 --- a/test/unit/asset-query.spec.ts +++ b/test/unit/asset-query.spec.ts @@ -48,6 +48,12 @@ describe('AssetQuery class', () => { expect(assetQuery._queryParams.include_fallback).toBe('true'); }); + it('should add "include_metadata" in queryParameter when includeMetadata method is called', () => { + const returnedValue = assetQuery.includeMetadata(); + expect(returnedValue).toBeInstanceOf(AssetQuery); + expect(assetQuery._queryParams.include_metadata).toBe('true'); + }); + it('should add "locale" in Parameter when locale method is called', () => { const returnedValue = assetQuery.locale('en-us'); expect(returnedValue).toBeInstanceOf(AssetQuery); diff --git a/test/unit/asset.spec.ts b/test/unit/asset.spec.ts index 7fcedcb4..f8be0b7b 100644 --- a/test/unit/asset.spec.ts +++ b/test/unit/asset.spec.ts @@ -42,6 +42,12 @@ describe('Asset class', () => { expect(asset._queryParams.include_fallback).toBe('true'); }); + it('should add "include_metadata" in _queryParams when includeMetadata method is called', () => { + const returnedValue = asset.includeMetadata(); + expect(returnedValue).toBeInstanceOf(Asset); + expect(asset._queryParams.include_metadata).toBe('true'); + }); + it('should add "relative_urls" in _queryParams when relativeUrl method is called', () => { const returnedValue = asset.relativeUrls(); expect(returnedValue).toBeInstanceOf(Asset); @@ -59,4 +65,13 @@ describe('Asset class', () => { const returnedValue = await asset.fetch(); expect(returnedValue).toEqual(assetFetchDataMock.asset); }); + + it('should return response directly when asset property is not present', async () => { + const responseWithoutAsset = { data: 'test', uid: 'test-uid' }; + mockClient.onGet(`/assets/assetUid`).reply(200, responseWithoutAsset); + + const result = await asset.fetch(); + + expect(result).toEqual(responseWithoutAsset); + }); }); diff --git a/test/unit/base-query.spec.ts b/test/unit/base-query.spec.ts index 957bdbeb..6f8b9431 100644 --- a/test/unit/base-query.spec.ts +++ b/test/unit/base-query.spec.ts @@ -76,10 +76,12 @@ describe('BaseQuery class', () => { }); class TestableBaseQuery extends BaseQuery { - constructor(client: AxiosInstance, urlPath: string) { + constructor(client: AxiosInstance, urlPath: string | null = null) { super(); this._client = client; - this._urlPath = urlPath; + if (urlPath !== null) { + this._urlPath = urlPath; + } this._variants = ''; } @@ -90,6 +92,10 @@ class TestableBaseQuery extends BaseQuery { setParameters(params: any) { this._parameters = params; } + + setUrlPath(path: string) { + this._urlPath = path; + } } describe('BaseQuery find method', () => { @@ -164,4 +170,12 @@ describe('BaseQuery find method', () => { expect(result).toEqual(entryFindMock); }); + + it('should handle empty _urlPath gracefully', () => { + const queryWithoutUrlPath = new TestableBaseQuery(client, null); + queryWithoutUrlPath.setUrlPath(''); + + // Verify that URL path is empty (testing the null check in extractContentTypeUidFromUrl) + expect(queryWithoutUrlPath).toBeInstanceOf(TestableBaseQuery); + }); }); \ No newline at end of file diff --git a/test/unit/cache.spec.ts b/test/unit/cache.spec.ts index 3e42f9cf..1ae933d3 100644 --- a/test/unit/cache.spec.ts +++ b/test/unit/cache.spec.ts @@ -329,4 +329,93 @@ describe("Cache handleRequest function", () => { cacheStore.removeItem(enhancedCacheKey, config.contentTypeUid); }); }); + + describe("Enhanced cache key with entryUid", () => { + it("should extract entryUid from URL pattern", async () => { + const cacheOptions = { policy: Policy.CACHE_THEN_NETWORK, maxAge: 3600 }; + const defaultAdapter = jest.fn((_config) => ({ + data: JSON.stringify("foo"), + })); + const configWithUrl = { + ...config, + url: '/content_types/test_ct/entries/entry123', + }; + + const cacheStore = new PersistanceStore(cacheOptions); + + await handleRequest( + cacheOptions, + apiKey, + defaultAdapter, + resolve, + reject, + configWithUrl + ); + + expect(defaultAdapter).toHaveBeenCalled(); + expect(resolve).toBeCalledWith({ data: "foo" }); + + // Clean up with enhanced key that includes entry UID + const enhancedCacheKey = `${config.contentTypeUid}_${apiKey}_entry_entry123`; + cacheStore.removeItem(enhancedCacheKey, config.contentTypeUid); + }); + + it("should use entryUid from config when available", async () => { + const cacheOptions = { policy: Policy.CACHE_THEN_NETWORK, maxAge: 3600 }; + const defaultAdapter = jest.fn((_config) => ({ + data: JSON.stringify("foo"), + })); + const configWithEntryUid = { + ...config, + entryUid: 'entry456', + }; + + const cacheStore = new PersistanceStore(cacheOptions); + + await handleRequest( + cacheOptions, + apiKey, + defaultAdapter, + resolve, + reject, + configWithEntryUid + ); + + expect(defaultAdapter).toHaveBeenCalled(); + expect(resolve).toBeCalledWith({ data: "foo" }); + + // Clean up with enhanced key that includes entry UID + const enhancedCacheKey = `${config.contentTypeUid}_${apiKey}_entry_entry456`; + cacheStore.removeItem(enhancedCacheKey, config.contentTypeUid); + }); + + it("should return null when URL does not match entry pattern", async () => { + const cacheOptions = { policy: Policy.CACHE_THEN_NETWORK, maxAge: 3600 }; + const defaultAdapter = jest.fn((_config) => ({ + data: JSON.stringify("foo"), + })); + const configWithInvalidUrl = { + ...config, + url: '/assets', + }; + + const cacheStore = new PersistanceStore(cacheOptions); + + await handleRequest( + cacheOptions, + apiKey, + defaultAdapter, + resolve, + reject, + configWithInvalidUrl + ); + + expect(defaultAdapter).toHaveBeenCalled(); + expect(resolve).toBeCalledWith({ data: "foo" }); + + // Clean up with standard enhanced key (no entry UID) + const enhancedCacheKey = `${config.contentTypeUid}_${apiKey}`; + cacheStore.removeItem(enhancedCacheKey, config.contentTypeUid); + }); + }); }); diff --git a/test/unit/contentstack-debug-integration.spec.ts b/test/unit/contentstack-debug-integration.spec.ts new file mode 100644 index 00000000..25d86b84 --- /dev/null +++ b/test/unit/contentstack-debug-integration.spec.ts @@ -0,0 +1,195 @@ +import { httpClient, AxiosInstance } from '@contentstack/core'; +import * as Contentstack from '../../src/lib/contentstack'; +import { Stack } from '../../src/lib/stack'; +import { Policy, StackConfig } from '../../src/lib/types'; +import MockAdapter from 'axios-mock-adapter'; + +describe('Contentstack Debug Logging Integration', () => { + let mockLogHandler: jest.Mock; + + beforeEach(() => { + mockLogHandler = jest.fn(); + }); + + it('should execute debug logging for request interceptor', async () => { + const config: StackConfig = { + apiKey: "apiKey", + deliveryToken: "delivery", + environment: "env", + debug: true, + logHandler: mockLogHandler, + }; + + const stack = Contentstack.stack(config); + const client = stack.getClient(); + const mockClient = new MockAdapter(client); + + mockClient.onGet('/content_types/test').reply(200, { + content_types: [] + }); + + // Make an actual request to trigger interceptors + try { + await client.get('/content_types/test'); + } catch (e) { + // Ignore errors + } + + // Verify request logging was called + const requestLogs = mockLogHandler.mock.calls.filter((call: any) => + call[1]?.type === 'request' + ); + expect(requestLogs.length).toBeGreaterThan(0); + + mockClient.restore(); + }); + + it('should execute debug logging for response interceptor with 2xx status', async () => { + const config: StackConfig = { + apiKey: "apiKey", + deliveryToken: "delivery", + environment: "env", + debug: true, + logHandler: mockLogHandler, + }; + + const stack = Contentstack.stack(config); + const client = stack.getClient(); + const mockClient = new MockAdapter(client); + + mockClient.onGet('/content_types/test').reply(200, { + content_types: [] + }); + + await client.get('/content_types/test'); + + // Verify response logging was called with info level + const responseLogs = mockLogHandler.mock.calls.filter((call: any) => + call[1]?.type === 'response' && call[0] === 'info' + ); + expect(responseLogs.length).toBeGreaterThan(0); + + mockClient.restore(); + }); + + it('should execute debug logging for response interceptor with 3xx status', async () => { + const config: StackConfig = { + apiKey: "apiKey", + deliveryToken: "delivery", + environment: "env", + debug: true, + logHandler: mockLogHandler, + }; + + const stack = Contentstack.stack(config); + const client = stack.getClient(); + const mockClient = new MockAdapter(client); + + // 3xx responses are treated as errors by axios-mock-adapter + mockClient.onGet('/content_types/test').reply(304, {}); + + try { + await client.get('/content_types/test'); + } catch (e) { + // Expected - 3xx responses trigger error handler in mock adapter + } + + // Verify error response logging was called - 3xx goes through error interceptor + const errorLogs = mockLogHandler.mock.calls.filter((call: any) => + call[1]?.type === 'response_error' && call[1]?.status === 304 + ); + expect(errorLogs.length).toBeGreaterThan(0); + + mockClient.restore(); + }); + + it('should execute debug logging for error response interceptor with 4xx status', async () => { + const config: StackConfig = { + apiKey: "apiKey", + deliveryToken: "delivery", + environment: "env", + debug: true, + logHandler: mockLogHandler, + }; + + const stack = Contentstack.stack(config); + const client = stack.getClient(); + const mockClient = new MockAdapter(client); + + mockClient.onGet('/content_types/test').reply(404, { + error: 'Not found' + }); + + try { + await client.get('/content_types/test'); + } catch (e) { + // Expected error + } + + // Verify error logging was called + const errorLogs = mockLogHandler.mock.calls.filter((call: any) => + call[1]?.type === 'response_error' && call[0] === 'error' + ); + expect(errorLogs.length).toBeGreaterThan(0); + + mockClient.restore(); + }); + + it('should execute debug logging for error response without status', async () => { + const config: StackConfig = { + apiKey: "apiKey", + deliveryToken: "delivery", + environment: "env", + debug: true, + logHandler: mockLogHandler, + }; + + const stack = Contentstack.stack(config); + const client = stack.getClient(); + const mockClient = new MockAdapter(client); + + mockClient.onGet('/content_types/test').networkError(); + + try { + await client.get('/content_types/test'); + } catch (e) { + // Expected network error + } + + // Verify error logging was called with debug level for no status + const errorLogs = mockLogHandler.mock.calls.filter((call: any) => + call[1]?.type === 'response_error' && call[0] === 'debug' + ); + expect(errorLogs.length).toBeGreaterThan(0); + + mockClient.restore(); + }); + + it('should execute cache adapter when cacheOptions is provided', async () => { + const config: StackConfig = { + apiKey: "apiKey", + deliveryToken: "delivery", + environment: "env", + cacheOptions: { + policy: Policy.CACHE_THEN_NETWORK, + maxAge: 3600, + }, + }; + + const stack = Contentstack.stack(config); + const client = stack.getClient(); + const mockClient = new MockAdapter(client); + + mockClient.onGet('/content_types/test').reply(200, { + content_types: [] + }); + + // Make request to trigger cache adapter + await client.get('/content_types/test', { contentTypeUid: 'test' }); + + expect(client.defaults.adapter).toBeDefined(); + + mockClient.restore(); + }); +}); + diff --git a/test/unit/contenttype.spec.ts b/test/unit/contenttype.spec.ts index 1b62c341..20b821d2 100644 --- a/test/unit/contenttype.spec.ts +++ b/test/unit/contenttype.spec.ts @@ -41,4 +41,13 @@ describe('ContentType class', () => { const response = await contentType.fetch(); expect(response).toEqual(contentTypeResponseMock.content_type); }); + + it('should return response directly when content_type property is not present', async () => { + const responseWithoutContentType = { data: 'test', uid: 'test-uid' }; + mockClient.onGet('/content_types/contentTypeUid').reply(200, responseWithoutContentType); + + const result = await contentType.fetch(); + + expect(result).toEqual(responseWithoutContentType); + }); }); diff --git a/test/unit/entries.spec.ts b/test/unit/entries.spec.ts index ed2d34b0..aa6f2339 100644 --- a/test/unit/entries.spec.ts +++ b/test/unit/entries.spec.ts @@ -91,6 +91,13 @@ describe('Entries class', () => { expect(returnedValue).toBeInstanceOf(Query); }); + it('should return Query instance with queryObj when query method is called with object', () => { + const queryObj = { title: 'Test' }; + const returnedValue = entry.query(queryObj); + expect(returnedValue).toBeInstanceOf(Query); + expect(returnedValue._parameters).toEqual(queryObj); + }); + it('should add a fieldUid to the _queryParams object', () => { entry.only('fieldUid'); expect(entry._queryParams).toEqual({ 'only[BASE][]': 'fieldUid' }); diff --git a/test/unit/pagination.spec.ts b/test/unit/pagination.spec.ts index 92a0d647..ff999a59 100644 --- a/test/unit/pagination.spec.ts +++ b/test/unit/pagination.spec.ts @@ -25,4 +25,27 @@ describe('Pagination class', () => { pageObject.previous(); expect(pageObject._queryParams).toEqual({ skip: 0, limit: 10 }); }); + + it('should initialize pagination when next is called without prior paginate', () => { + const pageObject = new Pagination(); + pageObject.next(); + expect(pageObject._queryParams).toEqual({ skip: 10, limit: 10 }); + }); + + it('should initialize pagination when previous is called without prior paginate', () => { + const pageObject = new Pagination(); + pageObject.previous(); + expect(pageObject._queryParams).toEqual({ skip: 0, limit: 10 }); + }); + + it('should set skip to 0 when previous would result in negative skip', () => { + const pageObject = new Pagination().paginate({ skip: 5, limit: 10 }); + pageObject.previous(); + expect(pageObject._queryParams.skip).toEqual(0); + }); + + it('should use default values when paginate is called without arguments', () => { + const pageObject = new Pagination().paginate(); + expect(pageObject._queryParams).toEqual({ skip: 0, limit: 10 }); + }); }); diff --git a/test/unit/query.spec.ts b/test/unit/query.spec.ts index ec7d6b39..d244a270 100644 --- a/test/unit/query.spec.ts +++ b/test/unit/query.spec.ts @@ -55,7 +55,7 @@ describe('Query class', () => { }); it('should add a where-in filter to the query parameters', () => { - const subQuery = getQueryObject(client, 'your-referenced-content-type-uid'); + const subQuery = getQueryObject(client, 'referenced-content-type-uid'); subQuery.where('your-field-uid', QueryOperation.EQUALS, 'your-field-value'); query.whereIn('your-reference-field-uid', subQuery); // eslint-disable-next-line prettier/prettier, @typescript-eslint/naming-convention @@ -63,7 +63,7 @@ describe('Query class', () => { }); it('should add a where-not-in filter to the query parameters', () => { - const subQuery = getQueryObject(client, 'your-referenced-content-type-uid'); + const subQuery = getQueryObject(client, 'referenced-content-type-uid'); subQuery.where('your-field-uid', QueryOperation.EQUALS, 'your-field-value'); query.whereNotIn('your-reference-field-uid', subQuery); // eslint-disable-next-line prettier/prettier, @typescript-eslint/naming-convention @@ -84,10 +84,15 @@ describe('Query class', () => { }); it('should result in error when regex method is called with invalid regex', async () => { - const regexQuery = getQueryObject(client, 'your-referenced-content-type-uid'); + const regexQuery = getQueryObject(client, 'referenced-content-type-uid'); expect(() => regexQuery.regex("fieldUid", "[a-z")).toThrow("Invalid regexPattern: Must be a valid regular expression"); }); + it('should throw error when regex method is called with invalid characters', async () => { + const regexQuery = getQueryObject(client, 'referenced-content-type-uid'); + expect(() => regexQuery.regex("fieldUid", "test