From 830dc65871058431c41a40797319d0d237e9949b Mon Sep 17 00:00:00 2001 From: optrader Date: Sat, 1 Nov 2025 22:03:42 +0900 Subject: [PATCH] [251101] fix: CheckOutPanel Mock-3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ๐Ÿ• ์ปค๋ฐ‹ ์‹œ๊ฐ„: 2025. 11. 01. 22:03:38 ๐Ÿ“Š ๋ณ€๊ฒฝ ํ†ต๊ณ„: โ€ข ์ด ํŒŒ์ผ: 7๊ฐœ โ€ข ์ถ”๊ฐ€: +484์ค„ โ€ข ์‚ญ์ œ: -162์ค„ ๐Ÿ“ ์ถ”๊ฐ€๋œ ํŒŒ์ผ: + com.twin.app.shoptime/get_console_logs.js ๐Ÿ“ ์ˆ˜์ •๋œ ํŒŒ์ผ: ~ com.twin.app.shoptime/package-lock.json ~ com.twin.app.shoptime/package.json ~ com.twin.app.shoptime/src/utils/mockDataSafetyUtils.js ~ com.twin.app.shoptime/src/views/CheckOutPanel/CheckOutPanel.jsx ~ com.twin.app.shoptime/src/views/CheckOutPanel/container/SummaryContainerMock.jsx ~ com.twin.app.shoptime/src/views/DetailPanel/components/BuyOption.jsx ๐Ÿ”ง ์ฃผ์š” ๋ณ€๊ฒฝ ๋‚ด์šฉ: โ€ข ํ”„๋กœ์ ํŠธ ์˜์กด์„ฑ ๊ด€๋ฆฌ ๊ฐœ์„  โ€ข ๊ณตํ†ต ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜ ์ตœ์ ํ™” โ€ข UI ์ปดํฌ๋„ŒํŠธ ์•„ํ‚คํ…์ฒ˜ ๊ฐœ์„  โ€ข ๋กœ๊น… ์‹œ์Šคํ…œ ๊ฐœ์„  โ€ข ๋Œ€๊ทœ๋ชจ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ โ€ข ๋ชจ๋“ˆ ๊ตฌ์กฐ ๊ฐœ์„  BREAKING CHANGE: API ๋˜๋Š” ์„ค์ • ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ํ˜ธํ™˜์„ฑ ์˜ํ–ฅ ๊ฐ€๋Šฅ --- com.twin.app.shoptime/get_console_logs.js | 70 ++++ com.twin.app.shoptime/package-lock.json | 320 ++++++++++++++---- com.twin.app.shoptime/package.json | 3 +- .../src/utils/mockDataSafetyUtils.js | 76 ++++- .../src/views/CheckOutPanel/CheckOutPanel.jsx | 104 +++--- .../container/SummaryContainerMock.jsx | 43 ++- .../DetailPanel/components/BuyOption.jsx | 100 +++++- 7 files changed, 554 insertions(+), 162 deletions(-) create mode 100644 com.twin.app.shoptime/get_console_logs.js diff --git a/com.twin.app.shoptime/get_console_logs.js b/com.twin.app.shoptime/get_console_logs.js new file mode 100644 index 00000000..22ed0fc5 --- /dev/null +++ b/com.twin.app.shoptime/get_console_logs.js @@ -0,0 +1,70 @@ +const WebSocket = require('ws'); +const http = require('http'); + +async function getConsoleLogs() { + try { + // Shop Time ํƒญ์˜ WebSocket URL + const wsUrl = 'ws://localhost:9222/devtools/page/FB23F44B50DA1DD3F02A80346F3D67CF'; + + const ws = new WebSocket(wsUrl); + + ws.on('open', () => { + console.log('๐Ÿ”— Chrome CDP์— ์—ฐ๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.'); + + // Runtime ๋„๋ฉ”์ธ ํ™œ์„ฑํ™” + ws.send(JSON.stringify({ + id: 1, + method: 'Runtime.enable', + params: {} + })); + + // Console ๋„๋ฉ”์ธ ํ™œ์„ฑํ™” + ws.send(JSON.stringify({ + id: 2, + method: 'Console.enable', + params: {} + })); + + // 5์ดˆ ํ›„์— ์—ฐ๊ฒฐ ์ข…๋ฃŒ + setTimeout(() => { + console.log('๐Ÿ“ ์ฝ˜์†” ๋กœ๊ทธ ์ˆ˜์ง‘ ์™„๋ฃŒ'); + ws.close(); + }, 5000); + }); + + let logCount = 0; + ws.on('message', (data) => { + const message = JSON.parse(data); + + // ์ฝ˜์†” ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ + if (message.method === 'Console.messageAdded' && logCount < 10) { + const log = message.params.message; + const timestamp = new Date(log.timestamp).toLocaleTimeString(); + console.log(`[${timestamp}] ${log.level}: ${log.text}`); + logCount++; + } + + // Runtime ์ฝ˜์†” API ํ˜ธ์ถœ ์ฒ˜๋ฆฌ + if (message.method === 'Runtime.consoleAPICalled' && logCount < 10) { + const timestamp = new Date().toLocaleTimeString(); + const args = message.params.args.map(arg => arg.value || arg.description).join(' '); + console.log(`[${timestamp}] ${message.params.type}: ${args}`); + logCount++; + } + }); + + ws.on('error', (error) => { + console.error('โŒ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜:', error.message); + }); + + ws.on('close', () => { + console.log('โœ… ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.'); + process.exit(0); + }); + + } catch (error) { + console.error('โŒ ์˜ค๋ฅ˜ ๋ฐœ์ƒ:', error.message); + } +} + +getConsoleLogs(); \ No newline at end of file diff --git a/com.twin.app.shoptime/package-lock.json b/com.twin.app.shoptime/package-lock.json index 419b3248..f8aad77f 100644 --- a/com.twin.app.shoptime/package-lock.json +++ b/com.twin.app.shoptime/package-lock.json @@ -30,7 +30,8 @@ "react-player": "^1.15.3", "react-redux": "^7.2.3", "redux": "^3.7.2", - "redux-thunk": "2.3.0" + "redux-thunk": "2.3.0", + "ws": "^8.18.3" }, "devDependencies": { "prettier": "^3.5.3" @@ -170,6 +171,7 @@ "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "peer": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" @@ -179,6 +181,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "peer": true, "engines": { "node": ">=6.0.0" } @@ -187,6 +190,7 @@ "version": "0.3.11", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "peer": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" @@ -195,12 +199,14 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "peer": true }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.30", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", + "peer": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -215,6 +221,7 @@ "version": "9.6.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "peer": true, "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -224,6 +231,7 @@ "version": "3.7.7", "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "peer": true, "dependencies": { "@types/eslint": "*", "@types/estree": "*" @@ -232,7 +240,8 @@ "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==" + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "peer": true }, "node_modules/@types/hoist-non-react-statics": { "version": "3.3.7", @@ -254,6 +263,7 @@ "version": "24.3.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz", "integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==", + "peer": true, "dependencies": { "undici-types": "~7.10.0" } @@ -262,7 +272,6 @@ "version": "19.1.10", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.10.tgz", "integrity": "sha512-EhBeSYX0Y6ye8pNebpKrwFJq7BoQ8J5SO6NlvNwwHjSj6adXJViPQrKlsyPw7hLBLvckEMO1yxeGdR82YBBlDg==", - "peer": true, "dependencies": { "csstype": "^3.0.2" } @@ -290,6 +299,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "peer": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2" @@ -298,22 +308,26 @@ "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==" + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "peer": true }, "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==" + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "peer": true }, "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==" + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "peer": true }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "peer": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.13.2", "@webassemblyjs/helper-api-error": "1.13.2", @@ -323,12 +337,14 @@ "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==" + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "peer": true }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -340,6 +356,7 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "peer": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -348,6 +365,7 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "peer": true, "dependencies": { "@xtuc/long": "4.2.2" } @@ -355,12 +373,14 @@ "node_modules/@webassemblyjs/utf8": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==" + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "peer": true }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -376,6 +396,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", @@ -388,6 +409,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -399,6 +421,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-api-error": "1.13.2", @@ -412,6 +435,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" @@ -420,12 +444,14 @@ "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "peer": true }, "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==" + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "peer": true }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", @@ -448,6 +474,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "peer": true, "engines": { "node": ">=10.13.0" }, @@ -459,7 +486,6 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -475,6 +501,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "peer": true, "dependencies": { "ajv": "^8.0.0" }, @@ -491,6 +518,7 @@ "version": "8.17.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -505,7 +533,8 @@ "node_modules/ajv-formats/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "peer": true }, "node_modules/ajv-keywords": { "version": "3.5.2", @@ -654,7 +683,8 @@ "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "peer": true }, "node_modules/call-bind": { "version": "1.0.8", @@ -717,7 +747,8 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "peer": true }, "node_modules/chalk": { "version": "4.1.2", @@ -743,6 +774,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "peer": true, "engines": { "node": ">=6.0" } @@ -790,7 +822,8 @@ "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "peer": true }, "node_modules/concat-map": { "version": "0.0.1", @@ -895,7 +928,8 @@ "node_modules/electron-to-chromium": { "version": "1.5.203", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.203.tgz", - "integrity": "sha512-uz4i0vLhfm6dLZWbz/iH88KNDV+ivj5+2SA+utpgjKaj9Q0iDLuwk6Idhe9BTxciHudyx6IvTvijhkPvFGUQ0g==" + "integrity": "sha512-uz4i0vLhfm6dLZWbz/iH88KNDV+ivj5+2SA+utpgjKaj9Q0iDLuwk6Idhe9BTxciHudyx6IvTvijhkPvFGUQ0g==", + "peer": true }, "node_modules/emojis-list": { "version": "3.0.0", @@ -917,6 +951,7 @@ "version": "5.18.3", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", + "peer": true, "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -944,7 +979,8 @@ "node_modules/es-module-lexer": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==" + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "peer": true }, "node_modules/es-object-atoms": { "version": "1.1.1", @@ -961,6 +997,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "peer": true, "engines": { "node": ">=6" } @@ -969,6 +1006,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "peer": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -981,6 +1019,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "peer": true, "dependencies": { "estraverse": "^5.2.0" }, @@ -992,6 +1031,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "peer": true, "engines": { "node": ">=4.0" } @@ -1000,6 +1040,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "peer": true, "engines": { "node": ">=4.0" } @@ -1008,6 +1049,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "peer": true, "engines": { "node": ">=0.8.x" } @@ -1035,7 +1077,8 @@ "type": "opencollective", "url": "https://opencollective.com/fastify" } - ] + ], + "peer": true }, "node_modules/fbjs": { "version": "0.8.18", @@ -1199,7 +1242,8 @@ "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "peer": true }, "node_modules/global": { "version": "4.4.0", @@ -1312,8 +1356,7 @@ "node_modules/ilib": { "version": "14.21.1", "resolved": "https://registry.npmjs.org/ilib/-/ilib-14.21.1.tgz", - "integrity": "sha512-HpiZsfjdsl2pKhLkdxWXM/inenTWE/tgiwIHeyaqck8YjzUCQI4/8eos+1jAbU5L++OcGbOyjOIjbwxLrOj/3g==", - "peer": true + "integrity": "sha512-HpiZsfjdsl2pKhLkdxWXM/inenTWE/tgiwIHeyaqck8YjzUCQI4/8eos+1jAbU5L++OcGbOyjOIjbwxLrOj/3g==" }, "node_modules/immediate": { "version": "3.0.6", @@ -1451,6 +1494,7 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "peer": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -1464,6 +1508,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -1482,7 +1527,8 @@ "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "peer": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", @@ -1562,6 +1608,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "peer": true, "engines": { "node": ">=6.11.5" } @@ -1619,7 +1666,8 @@ "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "peer": true }, "node_modules/micromatch": { "version": "4.0.8", @@ -1637,6 +1685,7 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "peer": true, "engines": { "node": ">= 0.6" } @@ -1645,6 +1694,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "peer": true, "dependencies": { "mime-db": "1.52.0" }, @@ -1682,7 +1732,8 @@ "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "peer": true }, "node_modules/node-fetch": { "version": "1.7.3", @@ -1696,7 +1747,8 @@ "node_modules/node-releases": { "version": "2.0.19", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==" + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "peer": true }, "node_modules/object-assign": { "version": "4.1.1", @@ -1803,7 +1855,8 @@ "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "peer": true }, "node_modules/picomatch": { "version": "2.3.1", @@ -1880,6 +1933,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "peer": true, "dependencies": { "safe-buffer": "^5.1.0" } @@ -1907,7 +1961,6 @@ "version": "16.14.0", "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", - "peer": true, "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -2017,6 +2070,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -2050,7 +2104,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "peer": true }, "node_modules/safer-buffer": { "version": "2.1.2", @@ -2103,6 +2158,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "peer": true, "dependencies": { "randombytes": "^2.1.0" } @@ -2159,6 +2215,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -2167,6 +2224,7 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "peer": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -2195,6 +2253,7 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", + "peer": true, "engines": { "node": ">=6" } @@ -2203,6 +2262,7 @@ "version": "5.43.1", "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", + "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.14.0", @@ -2220,6 +2280,7 @@ "version": "5.3.14", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", @@ -2269,6 +2330,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -2279,12 +2341,14 @@ "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "peer": true }, "node_modules/terser-webpack-plugin/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==", + "peer": true, "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -2349,7 +2413,8 @@ "node_modules/undici-types": { "version": "7.10.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", - "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==" + "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", + "peer": true }, "node_modules/universalify": { "version": "2.0.1", @@ -2377,6 +2442,7 @@ "url": "https://github.com/sponsors/ai" } ], + "peer": true, "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" @@ -2408,6 +2474,7 @@ "version": "2.4.4", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", + "peer": true, "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -2420,6 +2487,7 @@ "version": "5.101.2", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.101.2.tgz", "integrity": "sha512-4JLXU0tD6OZNVqlwzm3HGEhAHufSiyv+skb7q0d2367VDMzrU1Q/ZeepvkcHH0rZie6uqEtTQQe0OEOOluH3Mg==", + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -2467,6 +2535,7 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", + "peer": true, "engines": { "node": ">=10.13.0" } @@ -2491,6 +2560,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -2501,12 +2571,14 @@ "node_modules/webpack/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "peer": true }, "node_modules/webpack/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==", + "peer": true, "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -2545,6 +2617,27 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, + "node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/xhr": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", @@ -2705,6 +2798,7 @@ "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "peer": true, "requires": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" @@ -2713,12 +2807,14 @@ "@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==" + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "peer": true }, "@jridgewell/source-map": { "version": "0.3.11", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "peer": true, "requires": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" @@ -2727,12 +2823,14 @@ "@jridgewell/sourcemap-codec": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "peer": true }, "@jridgewell/trace-mapping": { "version": "0.3.30", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", + "peer": true, "requires": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -2747,6 +2845,7 @@ "version": "9.6.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "peer": true, "requires": { "@types/estree": "*", "@types/json-schema": "*" @@ -2756,6 +2855,7 @@ "version": "3.7.7", "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "peer": true, "requires": { "@types/eslint": "*", "@types/estree": "*" @@ -2764,7 +2864,8 @@ "@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==" + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "peer": true }, "@types/hoist-non-react-statics": { "version": "3.3.7", @@ -2783,6 +2884,7 @@ "version": "24.3.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz", "integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==", + "peer": true, "requires": { "undici-types": "~7.10.0" } @@ -2791,7 +2893,6 @@ "version": "19.1.10", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.10.tgz", "integrity": "sha512-EhBeSYX0Y6ye8pNebpKrwFJq7BoQ8J5SO6NlvNwwHjSj6adXJViPQrKlsyPw7hLBLvckEMO1yxeGdR82YBBlDg==", - "peer": true, "requires": { "csstype": "^3.0.2" } @@ -2821,6 +2922,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "peer": true, "requires": { "@webassemblyjs/helper-numbers": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2" @@ -2829,22 +2931,26 @@ "@webassemblyjs/floating-point-hex-parser": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==" + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "peer": true }, "@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==" + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "peer": true }, "@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==" + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "peer": true }, "@webassemblyjs/helper-numbers": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "peer": true, "requires": { "@webassemblyjs/floating-point-hex-parser": "1.13.2", "@webassemblyjs/helper-api-error": "1.13.2", @@ -2854,12 +2960,14 @@ "@webassemblyjs/helper-wasm-bytecode": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==" + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "peer": true }, "@webassemblyjs/helper-wasm-section": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "peer": true, "requires": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -2871,6 +2979,7 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "peer": true, "requires": { "@xtuc/ieee754": "^1.2.0" } @@ -2879,6 +2988,7 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "peer": true, "requires": { "@xtuc/long": "4.2.2" } @@ -2886,12 +2996,14 @@ "@webassemblyjs/utf8": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==" + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "peer": true }, "@webassemblyjs/wasm-edit": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "peer": true, "requires": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -2907,6 +3019,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "peer": true, "requires": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", @@ -2919,6 +3032,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "peer": true, "requires": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -2930,6 +3044,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "peer": true, "requires": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-api-error": "1.13.2", @@ -2943,6 +3058,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "peer": true, "requires": { "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" @@ -2951,12 +3067,14 @@ "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "peer": true }, "@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==" + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "peer": true }, "@yarnpkg/lockfile": { "version": "1.1.0", @@ -2973,13 +3091,13 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "peer": true, "requires": {} }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "peer": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -2991,6 +3109,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "peer": true, "requires": { "ajv": "^8.0.0" }, @@ -2999,6 +3118,7 @@ "version": "8.17.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "peer": true, "requires": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -3009,7 +3129,8 @@ "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "peer": true } } }, @@ -3111,7 +3232,8 @@ "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "peer": true }, "call-bind": { "version": "1.0.8", @@ -3145,7 +3267,8 @@ "caniuse-lite": { "version": "1.0.30001735", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001735.tgz", - "integrity": "sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==" + "integrity": "sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==", + "peer": true }, "chalk": { "version": "4.1.2", @@ -3164,7 +3287,8 @@ "chrome-trace-event": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==" + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "peer": true }, "ci-info": { "version": "3.9.0", @@ -3197,7 +3321,8 @@ "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "peer": true }, "concat-map": { "version": "0.0.1", @@ -3279,7 +3404,8 @@ "electron-to-chromium": { "version": "1.5.203", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.203.tgz", - "integrity": "sha512-uz4i0vLhfm6dLZWbz/iH88KNDV+ivj5+2SA+utpgjKaj9Q0iDLuwk6Idhe9BTxciHudyx6IvTvijhkPvFGUQ0g==" + "integrity": "sha512-uz4i0vLhfm6dLZWbz/iH88KNDV+ivj5+2SA+utpgjKaj9Q0iDLuwk6Idhe9BTxciHudyx6IvTvijhkPvFGUQ0g==", + "peer": true }, "emojis-list": { "version": "3.0.0", @@ -3298,6 +3424,7 @@ "version": "5.18.3", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", + "peer": true, "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -3316,7 +3443,8 @@ "es-module-lexer": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==" + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "peer": true }, "es-object-atoms": { "version": "1.1.1", @@ -3329,12 +3457,14 @@ "escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "peer": true }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "peer": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -3344,6 +3474,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "peer": true, "requires": { "estraverse": "^5.2.0" }, @@ -3351,19 +3482,22 @@ "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "peer": true } } }, "estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "peer": true }, "events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "peer": true }, "fast-deep-equal": { "version": "3.1.3", @@ -3378,7 +3512,8 @@ "fast-uri": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==" + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "peer": true }, "fbjs": { "version": "0.8.18", @@ -3485,7 +3620,8 @@ "glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "peer": true }, "global": { "version": "4.4.0", @@ -3561,8 +3697,7 @@ "ilib": { "version": "14.21.1", "resolved": "https://registry.npmjs.org/ilib/-/ilib-14.21.1.tgz", - "integrity": "sha512-HpiZsfjdsl2pKhLkdxWXM/inenTWE/tgiwIHeyaqck8YjzUCQI4/8eos+1jAbU5L++OcGbOyjOIjbwxLrOj/3g==", - "peer": true + "integrity": "sha512-HpiZsfjdsl2pKhLkdxWXM/inenTWE/tgiwIHeyaqck8YjzUCQI4/8eos+1jAbU5L++OcGbOyjOIjbwxLrOj/3g==" }, "immediate": { "version": "3.0.6", @@ -3669,6 +3804,7 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "peer": true, "requires": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -3679,6 +3815,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "peer": true, "requires": { "has-flag": "^4.0.0" } @@ -3693,7 +3830,8 @@ "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "peer": true }, "json-schema-traverse": { "version": "0.4.1", @@ -3755,7 +3893,8 @@ "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==" + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "peer": true }, "loader-utils": { "version": "2.0.4", @@ -3801,7 +3940,8 @@ "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "peer": true }, "micromatch": { "version": "4.0.8", @@ -3815,12 +3955,14 @@ "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "peer": true }, "mime-types": { "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "peer": true, "requires": { "mime-db": "1.52.0" } @@ -3849,7 +3991,8 @@ "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "peer": true }, "node-fetch": { "version": "1.7.3", @@ -3863,7 +4006,8 @@ "node-releases": { "version": "2.0.19", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==" + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "peer": true }, "object-assign": { "version": "4.1.1", @@ -3942,7 +4086,8 @@ "picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "peer": true }, "picomatch": { "version": "2.3.1", @@ -3997,6 +4142,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "peer": true, "requires": { "safe-buffer": "^5.1.0" } @@ -4014,7 +4160,6 @@ "version": "16.14.0", "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", - "peer": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -4104,7 +4249,8 @@ "require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "peer": true }, "rimraf": { "version": "2.7.1", @@ -4117,7 +4263,8 @@ "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "peer": true }, "safer-buffer": { "version": "2.1.2", @@ -4157,6 +4304,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "peer": true, "requires": { "randombytes": "^2.1.0" } @@ -4200,12 +4348,14 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "peer": true }, "source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "peer": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -4227,12 +4377,14 @@ "tapable": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", - "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==" + "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", + "peer": true }, "terser": { "version": "5.43.1", "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", + "peer": true, "requires": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.14.0", @@ -4244,6 +4396,7 @@ "version": "5.3.14", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "peer": true, "requires": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", @@ -4268,6 +4421,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "peer": true, "requires": { "fast-deep-equal": "^3.1.3" } @@ -4275,12 +4429,14 @@ "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "peer": true }, "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==", + "peer": true, "requires": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -4314,7 +4470,8 @@ "undici-types": { "version": "7.10.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", - "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==" + "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", + "peer": true }, "universalify": { "version": "2.0.1", @@ -4325,6 +4482,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "peer": true, "requires": { "escalade": "^3.2.0", "picocolors": "^1.1.1" @@ -4350,6 +4508,7 @@ "version": "2.4.4", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", + "peer": true, "requires": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -4359,6 +4518,7 @@ "version": "5.101.2", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.101.2.tgz", "integrity": "sha512-4JLXU0tD6OZNVqlwzm3HGEhAHufSiyv+skb7q0d2367VDMzrU1Q/ZeepvkcHH0rZie6uqEtTQQe0OEOOluH3Mg==", + "peer": true, "requires": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -4403,6 +4563,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "peer": true, "requires": { "fast-deep-equal": "^3.1.3" } @@ -4410,12 +4571,14 @@ "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "peer": true }, "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==", + "peer": true, "requires": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -4428,7 +4591,8 @@ "webpack-sources": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", - "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==" + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", + "peer": true }, "whatwg-fetch": { "version": "3.6.20", @@ -4448,6 +4612,12 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, + "ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "requires": {} + }, "xhr": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", diff --git a/com.twin.app.shoptime/package.json b/com.twin.app.shoptime/package.json index ba3e5b65..219582f6 100644 --- a/com.twin.app.shoptime/package.json +++ b/com.twin.app.shoptime/package.json @@ -58,7 +58,8 @@ "react-player": "^1.15.3", "react-redux": "^7.2.3", "redux": "^3.7.2", - "redux-thunk": "2.3.0" + "redux-thunk": "2.3.0", + "ws": "^8.18.3" }, "browserslist": [ "chrome 38" diff --git a/com.twin.app.shoptime/src/utils/mockDataSafetyUtils.js b/com.twin.app.shoptime/src/utils/mockDataSafetyUtils.js index 4949ae67..bfdfcceb 100644 --- a/com.twin.app.shoptime/src/utils/mockDataSafetyUtils.js +++ b/com.twin.app.shoptime/src/utils/mockDataSafetyUtils.js @@ -243,11 +243,33 @@ export const getSafeCurrencyInfo = (product) => { * @param {Object} productInfo - ์›๋ณธ productInfo ๊ฐ์ฒด * @returns {Object} ORDER SUMMARY์šฉ ๊ฐ€๊ฒฉ ๋ฐ์ดํ„ฐ */ +/** + * ๊ฐ€๊ฒฉ ๋ฌธ์ž์—ด์—์„œ ์ˆซ์ž๋งŒ ์ถ”์ถœํ•˜๋Š” ํ—ฌํผ ํ•จ์ˆ˜ + * @param {string|number} value - ๊ฐ€๊ฒฉ๊ฐ’ + * @returns {number} ์ˆซ์ž + */ +const extractPrice = (value) => { + if (typeof value === 'number') return Math.max(0, value); + if (typeof value === 'string') { + const num = parseFloat(value.replace(/[^\d.]/g, '')); + return isNaN(num) ? 0 : Math.max(0, num); + } + return 0; +}; + export const calculateOrderSummaryFromProductInfo = (productInfo) => { - console.log('[calculateOrderSummaryFromProductInfo] Input productInfo:', productInfo); + console.log('[BuyOption][CheckOutPanel] calculateOrderSummaryFromProductInfo - Input productInfo:', productInfo); + console.log('[BuyOption][CheckOutPanel] calculateOrderSummaryFromProductInfo - Available price fields:', { + price2: productInfo?.price2, + price5: productInfo?.price5, + finalPrice: productInfo?.finalPrice, + discountPrice: productInfo?.discountPrice, + origPrice: productInfo?.origPrice, + discount: productInfo?.discount, + }); if (!productInfo) { - console.log('[calculateOrderSummaryFromProductInfo] No productInfo, using defaults'); + console.log('[BuyOption][CheckOutPanel] calculateOrderSummaryFromProductInfo - No productInfo, using defaults'); return { items: 0, couponSavings: 0, @@ -259,28 +281,56 @@ export const calculateOrderSummaryFromProductInfo = (productInfo) => { }; } - // 1. Items (์ƒํ’ˆ ๊ฐ€๊ฒฉ) - price2 ์‚ฌ์šฉ - const itemsPrice = parseFloat( - productInfo.price2?.replace(/[^\d.]/g, '') || + // 1. Items (์ƒํ’ˆ ๊ฐ€๊ฒฉ) - ์ตœ์šฐ์„ ์ˆœ์œ„ Fallback ์ฒด์ธ + const itemsPrice = extractPrice( + productInfo.price2 || productInfo.finalPrice || + productInfo.discountPrice || + productInfo.dcAftrPrc || // logInfo์—์„œ ์˜ค๋Š” ํ• ์ธ ํ›„ ๊ฐ€๊ฒฉ 0 ); + console.log('[BuyOption][CheckOutPanel] calculateOrderSummaryFromProductInfo - itemsPrice calculated:', itemsPrice); - // 2. Your Coupon Savings (์ฟ ํฐ ํ• ์ธ) - price5๋ฅผ ํ• ์ธ์•ก์œผ๋กœ ์‚ฌ์šฉ - const couponSavings = parseFloat( - productInfo.price5?.replace(/[^\d.]/g, '') || + // 2. Your Coupon Savings (์ฟ ํฐ ํ• ์ธ) - ์ตœ์šฐ์„ ์ˆœ์œ„ Fallback ์ฒด์ธ + const couponSavings = extractPrice( + productInfo.price5 || productInfo.discount || + (extractPrice(productInfo.origPrice) - extractPrice(productInfo.finalPrice)) || + (extractPrice(productInfo.dcBefPrc) - extractPrice(productInfo.dcAftrPrc)) || // logInfo์—์„œ ์˜ค๋Š” ์›๊ฐ€ - ํ• ์ธ๊ฐ€ 0 ); + console.log('[BuyOption][CheckOutPanel] calculateOrderSummaryFromProductInfo - couponSavings calculated:', couponSavings); // 3. Shipping & Handling (๋ฐฐ์†ก๋น„) - shippingCharge ์‚ฌ์šฉ - const shippingCharge = parseFloat( - productInfo.shippingCharge?.replace(/[^\d.]/g, '') || + const shippingCharge = extractPrice( + productInfo.shippingCharge || 0 ); + // ๋งŒ์•ฝ itemsPrice๊ฐ€ 0์ด๋ฉด, ์ƒํ’ˆ ์ •๋ณด์—์„œ ์ตœ์†Œํ•œ ํ•˜๋‚˜์˜ ๊ฐ€๊ฒฉ์ด๋ผ๋„ ์ฐพ์•„์„œ ์‚ฌ์šฉ + let finalItemsPrice = itemsPrice; + if (finalItemsPrice === 0) { + console.warn('[BuyOption][CheckOutPanel] calculateOrderSummaryFromProductInfo - itemsPrice is 0, searching for any available price'); + + // ProductAllSection์—์„œ ํ‘œ์‹œ๋˜์—ˆ๋˜ ๊ฐ€๊ฒฉ ์ถ”์ถœ ์‹œ๋„ + const anyAvailablePrice = extractPrice( + productInfo.origPrice || + productInfo.discountPrice || + productInfo.finalPrice || + productInfo.price || + productInfo.dcBefPrc || // logInfo ์›๊ฐ€ + productInfo.dcAftrPrc || // logInfo ํ• ์ธ๊ฐ€ + 0 + ); + + if (anyAvailablePrice > 0) { + console.log('[BuyOption][CheckOutPanel] calculateOrderSummaryFromProductInfo - Found fallback price:', anyAvailablePrice); + finalItemsPrice = anyAvailablePrice; + } + } + // 4. Subtotal (์„ธ์ „ ์ด๊ณ„) = itemsPrice - couponSavings + shippingCharge - const subtotal = Math.max(0, itemsPrice - couponSavings + shippingCharge); + const subtotal = Math.max(0, finalItemsPrice - couponSavings + shippingCharge); // 5. Tax (์„ธ๊ธˆ) = subtotal์˜ 10% const tax = Math.round((subtotal * 0.1) * 100) / 100; @@ -295,7 +345,7 @@ export const calculateOrderSummaryFromProductInfo = (productInfo) => { }; const result = { - items: itemsPrice, + items: finalItemsPrice, couponSavings: couponSavings, shipping: shippingCharge, subtotal: subtotal, @@ -304,7 +354,7 @@ export const calculateOrderSummaryFromProductInfo = (productInfo) => { currency: currency }; - console.log('[calculateOrderSummaryFromProductInfo] Calculated result:', result); + console.log('[BuyOption][CheckOutPanel] calculateOrderSummaryFromProductInfo - Calculated result:', result); return result; }; diff --git a/com.twin.app.shoptime/src/views/CheckOutPanel/CheckOutPanel.jsx b/com.twin.app.shoptime/src/views/CheckOutPanel/CheckOutPanel.jsx index b47d81ce..e40bb60c 100644 --- a/com.twin.app.shoptime/src/views/CheckOutPanel/CheckOutPanel.jsx +++ b/com.twin.app.shoptime/src/views/CheckOutPanel/CheckOutPanel.jsx @@ -45,13 +45,13 @@ import SummaryContainerMock from './container/SummaryContainerMock'; import InformationContainerMock from './container/InformationContainerMock'; export default function CheckOutPanel({ panelInfo }) { - console.log('[CheckOutPanel] Component mounted'); - console.log('[CheckOutPanel] panelInfo:', panelInfo); - console.log('[CheckOutPanel] panelInfo.logInfo:', panelInfo?.logInfo); + console.log('%c[BuyOption][CheckOutPanel] โ–ถ๏ธ Component mounted START', 'background: blue; color: white; font-weight: bold; padding: 5px;'); + console.log('[BuyOption][CheckOutPanel] panelInfo:', panelInfo); + console.log('[BuyOption][CheckOutPanel] panelInfo.logInfo:', panelInfo?.logInfo); const dispatch = useDispatch(); const panels = useSelector((state) => state.panels.panels); console.log( - '[CheckOutPanel] panels:', + '[BuyOption][CheckOutPanel] panels:', panels?.map((p) => p.name) ); const { userNumber } = useSelector((state) => state.common.appStatus.loginUserData); @@ -62,21 +62,26 @@ export default function CheckOutPanel({ panelInfo }) { const { popupVisible, activePopup } = useSelector((state) => state.common.popup); const popup = useSelector((state) => state.common.popup); - // Mock Mode: panelInfo.mockProductInfo ๋˜๋Š” Redux์—์„œ ์ƒํ’ˆ ๋ฐ์ดํ„ฐ ์‚ฌ์šฉ + // Mock Mode: panelInfo.productInfo ๋˜๋Š” Redux์—์„œ ์ƒํ’ˆ ๋ฐ์ดํ„ฐ ์‚ฌ์šฉ const productData = BUYNOW_CONFIG.isMockMode() ? (() => { + console.log('[BuyOption][CheckOutPanel] Mock Mode - panelInfo:', panelInfo); + console.log('[BuyOption][CheckOutPanel] Mock Mode - panelInfo.productInfo:', panelInfo?.productInfo); + // 1์ˆœ์œ„: BuyOption์—์„œ ์ „๋‹ฌ๋œ productInfo - if (panelInfo?.productInfo) { - console.log('[CheckOutPanel] Using panelInfo.productInfo:', panelInfo.productInfo); + if (panelInfo?.productInfo && panelInfo.productInfo.prdtId) { + console.log('%c[BuyOption][CheckOutPanel] โœ… SUCCESS - Using panelInfo.productInfo:', 'background: green; color: white; font-weight: bold; padding: 5px;', 'prdtId=' + panelInfo.productInfo.prdtId); return [panelInfo.productInfo]; } + // 2์ˆœ์œ„: Redux์—์„œ ๊ฐ€์ ธ์˜จ ์ƒํ’ˆ ๋ฐ์ดํ„ฐ - if (reduxProductData && reduxProductData.length > 0) { - console.log('[CheckOutPanel] Using reduxProductData:', reduxProductData); + if (reduxProductData && Array.isArray(reduxProductData) && reduxProductData.length > 0) { + console.log('%c[BuyOption][CheckOutPanel] โœ… SUCCESS - Using reduxProductData:', 'background: green; color: white; font-weight: bold; padding: 5px;', 'count=' + reduxProductData.length); return reduxProductData; } - // 3์ˆœ์œ„: ๊ธฐ๋ณธ Hardcoded Mock ๋ฐ์ดํ„ฐ - console.log('[CheckOutPanel] Using default hardcoded mock data'); + + // 3์ˆœ์œ„: ๊ธฐ๋ณธ Hardcoded Mock ๋ฐ์ดํ„ฐ (์‹คํŒจ ์ผ€์ด์Šค) + console.error('%c[BuyOption][CheckOutPanel] โŒ FAIL - Using fallback mock data:', 'background: red; color: white; font-weight: bold; padding: 5px;', 'panelInfo=', panelInfo, 'reduxProductData=', reduxProductData); return [ { prdtId: 'MOCK_PRODUCT_1', @@ -94,27 +99,25 @@ export default function CheckOutPanel({ panelInfo }) { })() : reduxProductData; - console.log('[CheckOutPanel] isMockMode:', BUYNOW_CONFIG.isMockMode()); - console.log('[CheckOutPanel] panelInfo:', panelInfo); - console.log('[CheckOutPanel] reduxProductData:', reduxProductData); - console.log('[CheckOutPanel] productData (raw):', productData); - console.log('[BuyOption][CheckOutPanel] ์ƒํ’ˆ ์ •๋ณด:', productData); + console.log('[BuyOption][CheckOutPanel] isMockMode:', BUYNOW_CONFIG.isMockMode()); + console.log('[BuyOption][CheckOutPanel] productData loaded:', productData && productData.length, 'items'); + console.log('[BuyOption][CheckOutPanel] productData[0].prdtId:', productData?.[0]?.prdtId); // ํ‘œ์‹œ์šฉ์œผ๋กœ ๋ชจ๋“  ์ƒํ’ˆ ๋ฐ์ดํ„ฐ ์ •๊ทœํ™” (์—†๋Š” ํ•„๋“œ๋Š” ์•ˆ์ „ํ•œ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ) // Mock ๋ชจ๋“œ์—์„œ๋Š” ํ•ญ์ƒ ์ •๊ทœํ™”, API ๋ชจ๋“œ์—์„œ๋Š” ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ const normalizedProductData = productData?.map((prod) => normalizeProductDataForDisplay(prod)) || []; const safeProductData = BUYNOW_CONFIG.isMockMode() ? normalizedProductData : productData; - console.log('[CheckOutPanel] productData (normalized):', normalizedProductData); - console.log('[CheckOutPanel] safeProductData (final):', safeProductData); + console.log('[BuyOption][CheckOutPanel] productData (normalized):', normalizedProductData); + console.log('[BuyOption][CheckOutPanel] safeProductData (final):', safeProductData); // ์ฒซ ๋ฒˆ์งธ ์ƒํ’ˆ ์ •๋ณด๋กœ ํ†ตํ™” ์ •๋ณด ์ถ”์ถœ const firstProduct = getSafeFirstProduct(safeProductData); const { currSign, currSignLoc } = firstProduct ? getSafeCurrencyInfo(firstProduct) : { currSign: '$', currSignLoc: 'left' }; - console.log('[CheckOutPanel] firstProduct:', firstProduct); - console.log('[CheckOutPanel] currSign:', currSign, 'currSignLoc:', currSignLoc); + console.log('[BuyOption][CheckOutPanel] firstProduct:', firstProduct); + console.log('[BuyOption][CheckOutPanel] currSign:', currSign, 'currSignLoc:', currSignLoc); const [orderSideBarOpen, setOrderSideBarOpen] = useState(false); const [offerSideBarOpen, setOfferSideBarOpen] = useState(false); @@ -133,11 +136,11 @@ export default function CheckOutPanel({ panelInfo }) { const spotJob = useRef(new Job((func) => func(), 0)); useEffect(() => { - console.log('[CheckOutPanel] sendLogGNB useEffect - isOrderSuccessful:', isOrderSuccessful); + console.log('[BuyOption][CheckOutPanel] sendLogGNB useEffect - isOrderSuccessful:', isOrderSuccessful); let nowMenu; if (isOrderSuccessful) { - console.log('[CheckOutPanel] Order successful, returning early'); + console.log('[BuyOption][CheckOutPanel] Order successful, returning early'); return; } // @@ -149,22 +152,22 @@ export default function CheckOutPanel({ panelInfo }) { nowMenu = Config.LOG_MENU.CHECKOUT_PIN_CODE; } - console.log('[CheckOutPanel] Dispatching sendLogGNB with menu:', nowMenu); + console.log('[BuyOption][CheckOutPanel] Dispatching sendLogGNB with menu:', nowMenu); dispatch(sendLogGNB(nowMenu)); }, [isOrderSuccessful, placeOrderPopup, popupVisible]); useEffect(() => { - console.log('[CheckOutPanel] isMounted useEffect'); + console.log('[BuyOption][CheckOutPanel] isMounted useEffect'); isMounted.current = true; return () => { - console.log('[CheckOutPanel] isMounted cleanup - component unmounting'); + console.log('[BuyOption][CheckOutPanel] isMounted cleanup - component unmounting'); isMounted.current = false; }; }, []); useEffect(() => { - console.log('[CheckOutPanel] getShoptimeTerms useEffect'); + console.log('[BuyOption][CheckOutPanel] getShoptimeTerms useEffect'); dispatch(getShoptimeTerms()); }, [dispatch]); @@ -183,17 +186,17 @@ export default function CheckOutPanel({ panelInfo }) { } useEffect(() => { - console.log('[CheckOutPanel] checkout total amount useEffect triggered'); - console.log('[CheckOutPanel] infoForCheckoutData:', infoForCheckoutData); - console.log('[CheckOutPanel] productData length:', productData?.length); + console.log('[BuyOption][CheckOutPanel] checkout total amount useEffect triggered'); + console.log('[BuyOption][CheckOutPanel] infoForCheckoutData:', infoForCheckoutData); + console.log('[BuyOption][CheckOutPanel] productData length:', productData?.length); // Mock Mode: API ํ˜ธ์ถœ ์Šคํ‚ต if (BUYNOW_CONFIG.isMockMode()) { - console.log('[CheckOutPanel] Mock Mode - Skipping checkout total amount calculation'); + console.log('[BuyOption][CheckOutPanel] Mock Mode - Skipping checkout total amount calculation'); return; } - console.log('[CheckOutPanel] API Mode - calling getCheckoutTotalAmt'); + console.log('[BuyOption][CheckOutPanel] API Mode - calling getCheckoutTotalAmt'); // API Mode: ๊ธฐ์กด ๋กœ์ง ์œ ์ง€ if (infoForCheckoutData && productData) { const orderProductCoupontUse = Object.keys(selectedCoupons).map((productId) => { @@ -242,20 +245,20 @@ export default function CheckOutPanel({ panelInfo }) { newTabList.push(term.termsTypeName); }); - console.log('[CheckOutPanel] Setting tabList:', newTabList); + console.log('[BuyOption][CheckOutPanel] Setting tabList:', newTabList); setTabList(newTabList); } }, [empTermsData]); useEffect(() => { - console.log('[CheckOutPanel] cleanup useEffect - setting up cleanup'); + console.log('[BuyOption][CheckOutPanel] cleanup useEffect - setting up cleanup'); return () => { - console.log('[CheckOutPanel] cleanup useEffect - calling resetCheckoutData'); + console.log('[BuyOption][CheckOutPanel] cleanup useEffect - calling resetCheckoutData'); // Mock ๋ชจ๋“œ์ผ ๋•Œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•ด์•ผ ๋‹ค์‹œ ์ง„์ž…ํ–ˆ์„ ๋•Œ ์˜ฌ๋ฐ”๋ฅธ ์ƒํ’ˆ ์ •๋ณด ๋กœ๋“œ ๊ฐ€๋Šฅ if (!BUYNOW_CONFIG.isMockMode()) { dispatch(resetCheckoutData()); } else { - console.log('[CheckOutPanel] Mock Mode - Skipping resetCheckoutData to preserve product data'); + console.log('[BuyOption][CheckOutPanel] Mock Mode - Skipping resetCheckoutData to preserve product data'); } }; }, [dispatch]); @@ -277,12 +280,12 @@ export default function CheckOutPanel({ panelInfo }) { }, [activePopup]); const onBackClick = useCallback(() => { - console.log('[CheckOutPanel] onBackClick called - dispatching popPanel'); + console.log('[BuyOption][CheckOutPanel] onBackClick called - dispatching popPanel'); dispatch(popPanel()); }, [dispatch]); const toggleOrderSideBar = useCallback(() => { - console.log('[CheckOutPanel] toggleOrderSideBar called - current state:', orderSideBarOpen); + console.log('[BuyOption][CheckOutPanel] toggleOrderSideBar called - current state:', orderSideBarOpen); if (!orderSideBarOpen) { dispatch(sendLogCheckOutBtnClick({ btnNm: 'ORDER ITEMS' })); dispatch( @@ -300,7 +303,7 @@ export default function CheckOutPanel({ panelInfo }) { }, [orderSideBarOpen, dispatch]); const toggleOfferSideBar = useCallback(() => { - console.log('[CheckOutPanel] toggleOfferSideBar called - current state:', offerSideBarOpen); + console.log('[BuyOption][CheckOutPanel] toggleOfferSideBar called - current state:', offerSideBarOpen); if (!offerSideBarOpen) { dispatch(sendLogCheckOutBtnClick({ btnNm: 'OFFERS & PROMOTION' })); dispatch( @@ -318,29 +321,29 @@ export default function CheckOutPanel({ panelInfo }) { }, [offerSideBarOpen, dispatch]); const onClosePopup = useCallback(() => { - console.log('[CheckOutPanel] onClosePopup called'); + console.log('[BuyOption][CheckOutPanel] onClosePopup called'); setPlaceOrderPopup(false); setTimeout(() => Spotlight.focus(), 0); }, []); const onCloseTermsPopup = useCallback(() => { - console.log('[CheckOutPanel] onCloseTermsPopup called'); + console.log('[BuyOption][CheckOutPanel] onCloseTermsPopup called'); dispatch(setHidePopup()); }, [dispatch]); const handlePopPanel = useCallback(() => { - console.log('[CheckOutPanel] handlePopPanel called - dispatching setHidePopup and popPanel'); + console.log('[BuyOption][CheckOutPanel] handlePopPanel called - dispatching setHidePopup and popPanel'); dispatch(setHidePopup()); dispatch(popPanel()); }, [dispatch]); const handleTermsClick = useCallback( (termsID) => { - console.log('[CheckOutPanel] handleTermsClick called with termsID:', termsID); + console.log('[BuyOption][CheckOutPanel] handleTermsClick called with termsID:', termsID); if (empTermsData) { const selectedTerms = empTermsData.find((term) => term.termsID === termsID); - console.log('[CheckOutPanel] Selected terms:', selectedTerms?.termsTypeName); + console.log('[BuyOption][CheckOutPanel] Selected terms:', selectedTerms?.termsTypeName); dispatch( sendLogTotalRecommend({ buttonTitle: selectedTerms.termsTypeName, @@ -383,9 +386,9 @@ export default function CheckOutPanel({ panelInfo }) { const onCancelCheckoutPanel = useCallback( (e) => { - console.log('[CheckOutPanel] onCancelCheckoutPanel called'); + console.log('[BuyOption][CheckOutPanel] onCancelCheckoutPanel called'); if (orderSideBarOpen) { - console.log('[CheckOutPanel] Closing order sidebar'); + console.log('[BuyOption][CheckOutPanel] Closing order sidebar'); setOrderSideBarOpen(false); setTimeout(() => Spotlight.focus(), 0); @@ -393,7 +396,7 @@ export default function CheckOutPanel({ panelInfo }) { } if (offerSideBarOpen) { - console.log('[CheckOutPanel] Closing offer sidebar'); + console.log('[BuyOption][CheckOutPanel] Closing offer sidebar'); setOfferSideBarOpen(false); setTimeout(() => Spotlight.focus(), 0); @@ -401,7 +404,7 @@ export default function CheckOutPanel({ panelInfo }) { } if (!orderSideBarOpen && !offerSideBarOpen) { - console.log('[CheckOutPanel] Calling popPanel()'); + console.log('[BuyOption][CheckOutPanel] Calling popPanel()'); dispatch(popPanel()); e.stopPropagation(); } @@ -472,7 +475,7 @@ export default function CheckOutPanel({ panelInfo }) { BUYNOW_CONFIG.isMockMode() ); if (BUYNOW_CONFIG.isMockMode()) { - console.log('[CheckOutPanel] Rendering InformationContainerMock'); + console.log('[BuyOption][CheckOutPanel] Rendering InformationContainerMock'); return ( ); } else { - console.log('[CheckOutPanel] Rendering InformationContainer'); + console.log('[BuyOption][CheckOutPanel] Rendering InformationContainer'); return ( +
+ {console.log('%c[BuyOption][CheckOutPanel] โœ… Component rendering COMPLETE', 'background: lightgreen; color: black; font-weight: bold; padding: 5px;')} +
); } diff --git a/com.twin.app.shoptime/src/views/CheckOutPanel/container/SummaryContainerMock.jsx b/com.twin.app.shoptime/src/views/CheckOutPanel/container/SummaryContainerMock.jsx index a5af1ff1..910af758 100644 --- a/com.twin.app.shoptime/src/views/CheckOutPanel/container/SummaryContainerMock.jsx +++ b/com.twin.app.shoptime/src/views/CheckOutPanel/container/SummaryContainerMock.jsx @@ -17,24 +17,45 @@ export default function SummaryContainerMock({ productInfo, defaultPrice, }) { - console.log('[CheckOutPanel] SummaryContainerMock - START render'); - console.log('[CheckOutPanel] SummaryContainerMock - empTermsData:', empTermsData); - console.log('[CheckOutPanel] SummaryContainerMock - currSign:', currSign); - console.log('[CheckOutPanel] SummaryContainerMock - productData:', productData); - console.log('[CheckOutPanel] SummaryContainerMock - productInfo:', productInfo); + console.log('[BuyOption][CheckOutPanel] SummaryContainerMock - START render'); + console.log('[BuyOption][CheckOutPanel] SummaryContainerMock - empTermsData:', empTermsData); + console.log('[BuyOption][CheckOutPanel] SummaryContainerMock - currSign:', currSign); + console.log('[BuyOption][CheckOutPanel] SummaryContainerMock - productData:', productData); + console.log('[BuyOption][CheckOutPanel] SummaryContainerMock - productInfo:', productInfo); + console.log('[BuyOption][CheckOutPanel] SummaryContainerMock - productInfo.price2:', productInfo?.price2); + console.log('[BuyOption][CheckOutPanel] SummaryContainerMock - productInfo.price5:', productInfo?.price5); // Mock Mode: productInfo๋กœ๋ถ€ํ„ฐ ORDER SUMMARY์šฉ ๊ฐ€๊ฒฉ ๋ฐ์ดํ„ฐ ๊ณ„์‚ฐ const orderSummaryData = useMemo(() => { if (productInfo) { // productInfo๊ฐ€ ์žˆ์œผ๋ฉด ์ง์ ‘ ๊ณ„์‚ฐ + console.log('[BuyOption][CheckOutPanel] SummaryContainerMock - Using calculateOrderSummaryFromProductInfo'); return calculateOrderSummaryFromProductInfo(productInfo); } else { // productInfo๊ฐ€ ์—†์œผ๋ฉด ๊ธฐ์กด ๋ฐฉ์‹์œผ๋กœ fallback + console.log('[BuyOption][CheckOutPanel] SummaryContainerMock - Using fallback calculation (no productInfo)'); const selectedProduct = getSafeFirstProduct(productData); - const productPrice = parseFloat(defaultPrice || selectedProduct?.price || 0); + + // ์ตœ์†Œํ•œ ํ•˜๋‚˜์˜ ๊ฐ€๊ฒฉ์ด๋ผ๋„ ์ฐพ๊ธฐ + const anyPrice = parseFloat( + defaultPrice || + selectedProduct?.finalPrice || + selectedProduct?.discountPrice || + selectedProduct?.price || + 0 + ); + + const productPrice = anyPrice > 0 ? anyPrice : 0; const productDiscount = parseFloat(selectedProduct?.discount || 0); const tax = Math.round((productPrice * 0.1) * 100) / 100; + console.log('[BuyOption][CheckOutPanel] SummaryContainerMock - Fallback calculation:', { + productPrice, + productDiscount, + tax, + selectedProduct + }); + return { items: productPrice, couponSavings: productDiscount, @@ -47,7 +68,7 @@ export default function SummaryContainerMock({ } }, [productInfo, productData, defaultPrice, currSign, currSignLoc]); - console.log('[CheckOutPanel] SummaryContainerMock - orderSummaryData:', orderSummaryData); + console.log('[BuyOption][CheckOutPanel] SummaryContainerMock - orderSummaryData:', orderSummaryData); // ๊ธฐ์กด ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด effectivePriceTotalData ์œ ์ง€ const effectivePriceTotalData = { @@ -59,7 +80,7 @@ export default function SummaryContainerMock({ ordPmtReqAmt: orderSummaryData.total, }; - console.log('[CheckOutPanel] SummaryContainerMock - effectivePriceTotalData:', effectivePriceTotalData); + console.log('[BuyOption][CheckOutPanel] SummaryContainerMock - effectivePriceTotalData:', effectivePriceTotalData); // Mock Mode: ๊ธฐ๋ณธ ์ƒํ’ˆ ์ •๋ณด const productList = { @@ -101,7 +122,7 @@ export default function SummaryContainerMock({ setPlaceOrderPopup(true); }, [doSendLogPaymentEntry, setPlaceOrderPopup]); - console.log('[CheckOutPanel] SummaryContainerMock - items:', items); + console.log('[BuyOption][CheckOutPanel] SummaryContainerMock - items:', items); const renderItemList = useCallback( () => @@ -133,13 +154,13 @@ export default function SummaryContainerMock({ ); const estimatedTotal = useMemo(() => { - console.log('[CheckOutPanel] SummaryContainerMock - estimatedTotal useMemo'); + console.log('[BuyOption][CheckOutPanel] SummaryContainerMock - estimatedTotal useMemo'); return formatCurrencyValue(effectivePriceTotalData.ordPmtReqAmt, orderSummaryData.currency.currSign, orderSummaryData.currency.currSignLoc); }, [effectivePriceTotalData, orderSummaryData.currency]); const showAuctionNotice = productList?.auctProdYn === 'Y' && !productList.auctFinalPriceChgDt; - console.log('[CheckOutPanel] SummaryContainerMock - about to return JSX'); + console.log('[BuyOption][CheckOutPanel] SummaryContainerMock - about to return JSX'); return ( <> diff --git a/com.twin.app.shoptime/src/views/DetailPanel/components/BuyOption.jsx b/com.twin.app.shoptime/src/views/DetailPanel/components/BuyOption.jsx index fcdac5ac..5f4d7f86 100644 --- a/com.twin.app.shoptime/src/views/DetailPanel/components/BuyOption.jsx +++ b/com.twin.app.shoptime/src/views/DetailPanel/components/BuyOption.jsx @@ -23,6 +23,7 @@ import { showError, } from '../../../actions/commonActions'; import { getProductCouponSearch } from '../../../actions/couponActions'; +import { getSafeProductPrice } from '../../../utils/mockDataSafetyUtils'; import { sendLogPaymentEntry, sendLogTotalRecommend, @@ -448,26 +449,58 @@ const BuyOption = ({ if (userNumber && selectedPatnrId && selectedPrdtId && quantity) { const { prodOptCval, priceInfo } = selectedOptions || {}; const { patncNm, brndNm, catNm, prdtNm, prdtId } = productInfo; + + console.log('[BuyOption] handleClickOrder - productInfo:', productInfo); console.log('[BuyOption] handleClickOrder - selectedOptions:', selectedOptions); console.log('[BuyOption] handleClickOrder - priceInfo:', priceInfo); console.log('[BuyOption] handleClickOrder - logInfo:', logInfo); - // priceInfo ํŒŒ์‹ฑ ๋ฐ ์ˆซ์ž ๋ณ€ํ™˜ - let regularPrice = parseInt(priceInfo?.split('|')[0], 10) || 0; - let discountPrice = parseInt(priceInfo?.split('|')[1], 10) || 0; + // productInfo์—์„œ ์ง์ ‘ price2, price5 ์ถ”์ถœ (๊ฐ€์žฅ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์†Œ์Šค) + // price2 = ์ƒํ’ˆ ๊ฐ€๊ฒฉ ("$ 521.66" ํ˜•์‹) + // price5 = ์ฟ ํฐ ํ• ์ธ ("$ 104.33" ํ˜•์‹) + const extractNumericPrice = (priceStr) => { + if (typeof priceStr === 'number') return priceStr; + if (typeof priceStr === 'string') { + const numMatch = priceStr.match(/[\d.]+/); + return numMatch ? parseFloat(numMatch[0]) : 0; + } + return 0; + }; + + const price2Value = extractNumericPrice(productInfo?.price2); + const price5Value = extractNumericPrice(productInfo?.price5); + + console.log('[BuyOption] handleClickOrder - productInfo.price2:', productInfo?.price2, '-> extracted:', price2Value); + console.log('[BuyOption] handleClickOrder - productInfo.price5:', productInfo?.price5, '-> extracted:', price5Value); + + // ๊ฐ€๊ฒฉ ๊ณ„์‚ฐ: + // discountPrice = price2 (์ƒํ’ˆ ๊ฐ€๊ฒฉ) + // regularPrice = price2 + price5 (์ƒํ’ˆ ๊ฐ€๊ฒฉ + ํ• ์ธ์•ก = ์›๋ž˜ ๊ฐ€๊ฒฉ) + let discountPrice = price2Value > 0 ? price2Value : 0; + let regularPrice = price2Value + price5Value; // price2 + price5 = ์›๋ž˜ ๊ฐ€๊ฒฉ + const discountRate = priceInfo?.split('|')[4]; - // selectedOptions๊ฐ€ ์—†์œผ๋ฉด logInfo์—์„œ ๊ฐ€๊ฒฉ ์ถ”์ถœ + console.log('[BuyOption] handleClickOrder - Calculated prices - regularPrice:', regularPrice, 'discountPrice:', discountPrice); + + // selectedOptions๊ฐ€ ์—†๊ณ  logInfo๊ฐ€ ์žˆ์œผ๋ฉด, logInfo์˜ ๊ฐ€๊ฒฉ๋„ ๊ณ ๋ ค if (!selectedOptions && logInfo) { - console.log('[BuyOption] handleClickOrder - selectedOptions is undefined, using logInfo prices'); + console.log('[BuyOption] handleClickOrder - selectedOptions is undefined, checking logInfo prices'); // logInfo์˜ dcBefPrc์™€ dcAftrPrc๋Š” "$ 521.66" ํ˜•์‹์ด๋ฏ€๋กœ ์ˆซ์ž๋งŒ ์ถ”์ถœ (์†Œ์ˆ˜์  ํฌํ•จ) const dcBefPrcMatch = logInfo.dcBefPrc?.match(/[\d.]+/); const dcAftrPrcMatch = logInfo.dcAftrPrc?.match(/[\d.]+/); - regularPrice = dcBefPrcMatch ? parseFloat(dcBefPrcMatch[0]) : 0; - discountPrice = dcAftrPrcMatch ? parseFloat(dcAftrPrcMatch[0]) : regularPrice; - console.log('[BuyOption] handleClickOrder - extracted from logInfo - dcBefPrc:', logInfo.dcBefPrc, 'dcAftrPrc:', logInfo.dcAftrPrc); + const logRegularPrice = dcBefPrcMatch ? parseFloat(dcBefPrcMatch[0]) : 0; + const logDiscountPrice = dcAftrPrcMatch ? parseFloat(dcAftrPrcMatch[0]) : logRegularPrice; + + // logInfo์˜ ๊ฐ€๊ฒฉ์ด ์žˆ์œผ๋ฉด ์šฐ์„  + if (logRegularPrice > 0 || logDiscountPrice > 0) { + regularPrice = logRegularPrice > 0 ? logRegularPrice : regularPrice; + discountPrice = logDiscountPrice > 0 ? logDiscountPrice : discountPrice; + console.log('[BuyOption] handleClickOrder - Using logInfo prices - regularPrice:', regularPrice, 'discountPrice:', discountPrice); + } } - console.log('[BuyOption] handleClickOrder - regularPrice:', regularPrice, 'discountPrice:', discountPrice, 'discountRate:', discountRate); + + console.log('[BuyOption] handleClickOrder - Final prices - regularPrice:', regularPrice, 'discountPrice:', discountPrice, 'discountRate:', discountRate); dispatch( sendLogTotalRecommend({ @@ -538,22 +571,63 @@ const BuyOption = ({ imgUrl: imgUrl, // ์ƒํ’ˆ ์ด๋ฏธ์ง€ URL ์ถ”๊ฐ€ }; + // ํ•„์ˆ˜ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ + if (!productInfo || !productInfo.prdtId) { + console.error('%c[BuyOption] โŒ FAIL - productInfo is invalid:', 'background: red; color: white; font-weight: bold; padding: 5px;', productInfo); + dispatch(showError(null, 'Product information is missing', false, null, null)); + return; + } + + console.log('%c[BuyOption] โœ… SUCCESS - productInfo is valid:', 'background: green; color: white; font-weight: bold; padding: 5px;', productInfo.prdtId); + const checkoutPanelInfo = { logInfo: { ...logInfo, cartTpSno: `MOCK_${Date.now()}` }, - productInfo: productInfo, + productInfo: { + prdtId: productInfo.prdtId, + prdtNm: productInfo.prdtNm, + patnrId: selectedPatnrId, + patncNm: patncNm, + // calculateOrderSummaryFromProductInfo ํ•จ์ˆ˜๊ฐ€ ํ•„์š”ํ•œ ํ•„๋“œ๋“ค + // productInfo์—์„œ ์ง์ ‘ ์ถ”์ถœํ•œ ๊ฐ’์„ ์ „๋‹ฌ + price2: price2Value, // Items (์ƒํ’ˆ ๊ฐ€๊ฒฉ) + price5: price5Value, // Coupon Savings (ํ• ์ธ์•ก) + finalPrice: discountPrice, + discount: price5Value, + origPrice: regularPrice, + discountPrice: discountPrice, + // ์ถ”๊ฐ€ ๊ฐ€๊ฒฉ ํ•„๋“œ๋“ค (fallback์šฉ) + price: discountPrice, + originalPrice: regularPrice, + // ์ด๋ฏธ์ง€ ์ •๋ณด + ...(productInfo.imgList && { imgList: productInfo.imgList }), + ...(productInfo.thumbnailUrl && { thumbnailUrl: productInfo.thumbnailUrl }), + ...(productInfo.imgUrls && { imgUrls: productInfo.imgUrls }), + shippingCharge: 0, // ๋ฐฐ์†ก๋น„ + currSign: '$', + currSignLoc: 'left', + }, defaultPrice: discountPrice, }; - console.log('[BuyOption] Mock Mode - mockProductInfo:', mockProductInfo); - console.log('[BuyOption] Mock Mode - regularPrice(์ˆซ์ž):', regularPrice, 'discountPrice(์ˆซ์ž):', discountPrice); + console.log('[BuyOption] Mock Mode - checkoutPanelInfo.productInfo price fields:', { + price2: price2Value, + price5: price5Value, + finalPrice: discountPrice, + origPrice: regularPrice, + discountPrice: discountPrice, + }); + console.log('[BuyOption] Mock Mode - checkoutPanelInfo:', checkoutPanelInfo); + console.log('[BuyOption] Mock Mode - regularPrice:', regularPrice, 'discountPrice:', discountPrice); + + console.log('%c[BuyOption] โ–ถ๏ธ BEFORE pushPanel dispatch', 'background: orange; color: white; font-weight: bold; padding: 5px;'); dispatch( pushPanel({ name: Config.panel_names.CHECKOUT_PANEL, panelInfo: checkoutPanelInfo, }) ); - console.log('[BuyOption] pushPanel dispatch completed'); + console.log('%c[BuyOption] โœ… AFTER pushPanel dispatch', 'background: orange; color: white; font-weight: bold; padding: 5px;'); } } dispatch(clearAllToasts());