From 138133c0726c7bb4d17c3a3aaca7ce39a898542e Mon Sep 17 00:00:00 2001 From: hexdrinker Date: Sat, 2 May 2026 00:17:51 +0900 Subject: [PATCH 1/6] =?UTF-8?q?chore(admin):=20vitest=20=EC=84=A4=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pnp.cjs | 877 +++++++++++++++++++++++++++++++++++++- apps/admin/package.json | 7 +- yarn.lock | 911 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 1792 insertions(+), 3 deletions(-) diff --git a/.pnp.cjs b/.pnp.cjs index be2d3818..f3727b8b 100755 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -3506,6 +3506,13 @@ const RAW_RUNTIME_STATE = ["@esbuild/aix-ppc64", "npm:0.19.11"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-aix-ppc64-npm-0.21.5-ebeb42da03/node_modules/@esbuild/aix-ppc64/",\ + "packageDependencies": [\ + ["@esbuild/aix-ppc64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["@esbuild/android-arm", [\ @@ -3522,6 +3529,13 @@ const RAW_RUNTIME_STATE = ["@esbuild/android-arm", "npm:0.19.11"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-android-arm-npm-0.21.5-7e30e7b6d7/node_modules/@esbuild/android-arm/",\ + "packageDependencies": [\ + ["@esbuild/android-arm", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["@esbuild/android-arm64", [\ @@ -3538,6 +3552,13 @@ const RAW_RUNTIME_STATE = ["@esbuild/android-arm64", "npm:0.19.11"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-android-arm64-npm-0.21.5-916e33d43e/node_modules/@esbuild/android-arm64/",\ + "packageDependencies": [\ + ["@esbuild/android-arm64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["@esbuild/android-x64", [\ @@ -3554,6 +3575,13 @@ const RAW_RUNTIME_STATE = ["@esbuild/android-x64", "npm:0.19.11"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-android-x64-npm-0.21.5-07abfd6fa9/node_modules/@esbuild/android-x64/",\ + "packageDependencies": [\ + ["@esbuild/android-x64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["@esbuild/darwin-arm64", [\ @@ -3570,6 +3598,13 @@ const RAW_RUNTIME_STATE = ["@esbuild/darwin-arm64", "npm:0.19.11"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-darwin-arm64-npm-0.21.5-62349c1520/node_modules/@esbuild/darwin-arm64/",\ + "packageDependencies": [\ + ["@esbuild/darwin-arm64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["@esbuild/darwin-x64", [\ @@ -3586,6 +3621,13 @@ const RAW_RUNTIME_STATE = ["@esbuild/darwin-x64", "npm:0.19.11"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-darwin-x64-npm-0.21.5-491c2ae06c/node_modules/@esbuild/darwin-x64/",\ + "packageDependencies": [\ + ["@esbuild/darwin-x64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["@esbuild/freebsd-arm64", [\ @@ -3602,6 +3644,13 @@ const RAW_RUNTIME_STATE = ["@esbuild/freebsd-arm64", "npm:0.19.11"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-freebsd-arm64-npm-0.21.5-2465c8f200/node_modules/@esbuild/freebsd-arm64/",\ + "packageDependencies": [\ + ["@esbuild/freebsd-arm64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["@esbuild/freebsd-x64", [\ @@ -3618,6 +3667,13 @@ const RAW_RUNTIME_STATE = ["@esbuild/freebsd-x64", "npm:0.19.11"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-freebsd-x64-npm-0.21.5-f866a2f0cc/node_modules/@esbuild/freebsd-x64/",\ + "packageDependencies": [\ + ["@esbuild/freebsd-x64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["@esbuild/linux-arm", [\ @@ -3634,6 +3690,13 @@ const RAW_RUNTIME_STATE = ["@esbuild/linux-arm", "npm:0.19.11"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-arm-npm-0.21.5-9485bcbfc7/node_modules/@esbuild/linux-arm/",\ + "packageDependencies": [\ + ["@esbuild/linux-arm", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["@esbuild/linux-arm64", [\ @@ -3650,6 +3713,13 @@ const RAW_RUNTIME_STATE = ["@esbuild/linux-arm64", "npm:0.19.11"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-arm64-npm-0.21.5-c6a54cd648/node_modules/@esbuild/linux-arm64/",\ + "packageDependencies": [\ + ["@esbuild/linux-arm64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["@esbuild/linux-ia32", [\ @@ -3666,6 +3736,13 @@ const RAW_RUNTIME_STATE = ["@esbuild/linux-ia32", "npm:0.19.11"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-ia32-npm-0.21.5-499a15b672/node_modules/@esbuild/linux-ia32/",\ + "packageDependencies": [\ + ["@esbuild/linux-ia32", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["@esbuild/linux-loong64", [\ @@ -3682,6 +3759,13 @@ const RAW_RUNTIME_STATE = ["@esbuild/linux-loong64", "npm:0.19.11"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-loong64-npm-0.21.5-b2d213a264/node_modules/@esbuild/linux-loong64/",\ + "packageDependencies": [\ + ["@esbuild/linux-loong64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["@esbuild/linux-mips64el", [\ @@ -3698,6 +3782,13 @@ const RAW_RUNTIME_STATE = ["@esbuild/linux-mips64el", "npm:0.19.11"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-mips64el-npm-0.21.5-6534e468c0/node_modules/@esbuild/linux-mips64el/",\ + "packageDependencies": [\ + ["@esbuild/linux-mips64el", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["@esbuild/linux-ppc64", [\ @@ -3714,6 +3805,13 @@ const RAW_RUNTIME_STATE = ["@esbuild/linux-ppc64", "npm:0.19.11"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-ppc64-npm-0.21.5-38298ce68c/node_modules/@esbuild/linux-ppc64/",\ + "packageDependencies": [\ + ["@esbuild/linux-ppc64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["@esbuild/linux-riscv64", [\ @@ -3730,6 +3828,13 @@ const RAW_RUNTIME_STATE = ["@esbuild/linux-riscv64", "npm:0.19.11"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-riscv64-npm-0.21.5-73ca00d59e/node_modules/@esbuild/linux-riscv64/",\ + "packageDependencies": [\ + ["@esbuild/linux-riscv64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["@esbuild/linux-s390x", [\ @@ -3746,6 +3851,13 @@ const RAW_RUNTIME_STATE = ["@esbuild/linux-s390x", "npm:0.19.11"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-s390x-npm-0.21.5-44720430f0/node_modules/@esbuild/linux-s390x/",\ + "packageDependencies": [\ + ["@esbuild/linux-s390x", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["@esbuild/linux-x64", [\ @@ -3762,6 +3874,13 @@ const RAW_RUNTIME_STATE = ["@esbuild/linux-x64", "npm:0.19.11"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-x64-npm-0.21.5-88079726c4/node_modules/@esbuild/linux-x64/",\ + "packageDependencies": [\ + ["@esbuild/linux-x64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["@esbuild/netbsd-x64", [\ @@ -3778,6 +3897,13 @@ const RAW_RUNTIME_STATE = ["@esbuild/netbsd-x64", "npm:0.19.11"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-netbsd-x64-npm-0.21.5-5f21539ffa/node_modules/@esbuild/netbsd-x64/",\ + "packageDependencies": [\ + ["@esbuild/netbsd-x64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["@esbuild/openbsd-x64", [\ @@ -3794,6 +3920,13 @@ const RAW_RUNTIME_STATE = ["@esbuild/openbsd-x64", "npm:0.19.11"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-openbsd-x64-npm-0.21.5-23fbf4de2b/node_modules/@esbuild/openbsd-x64/",\ + "packageDependencies": [\ + ["@esbuild/openbsd-x64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["@esbuild/sunos-x64", [\ @@ -3810,6 +3943,13 @@ const RAW_RUNTIME_STATE = ["@esbuild/sunos-x64", "npm:0.19.11"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-sunos-x64-npm-0.21.5-855a15205a/node_modules/@esbuild/sunos-x64/",\ + "packageDependencies": [\ + ["@esbuild/sunos-x64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["@esbuild/win32-arm64", [\ @@ -3826,6 +3966,13 @@ const RAW_RUNTIME_STATE = ["@esbuild/win32-arm64", "npm:0.19.11"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-win32-arm64-npm-0.21.5-d0ef444aab/node_modules/@esbuild/win32-arm64/",\ + "packageDependencies": [\ + ["@esbuild/win32-arm64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["@esbuild/win32-ia32", [\ @@ -3842,6 +3989,13 @@ const RAW_RUNTIME_STATE = ["@esbuild/win32-ia32", "npm:0.19.11"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-win32-ia32-npm-0.21.5-a4fb03dad4/node_modules/@esbuild/win32-ia32/",\ + "packageDependencies": [\ + ["@esbuild/win32-ia32", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["@esbuild/win32-x64", [\ @@ -3858,6 +4012,13 @@ const RAW_RUNTIME_STATE = ["@esbuild/win32-x64", "npm:0.19.11"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-win32-x64-npm-0.21.5-eddc2b5ad6/node_modules/@esbuild/win32-x64/",\ + "packageDependencies": [\ + ["@esbuild/win32-x64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["@eslint-community/eslint-utils", [\ @@ -4217,6 +4378,13 @@ const RAW_RUNTIME_STATE = ["@jridgewell/sourcemap-codec", "npm:1.4.15"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:1.5.5", {\ + "packageLocation": "./.yarn/cache/@jridgewell-sourcemap-codec-npm-1.5.5-5189d9fc79-f9e538f302.zip/node_modules/@jridgewell/sourcemap-codec/",\ + "packageDependencies": [\ + ["@jridgewell/sourcemap-codec", "npm:1.5.5"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["@jridgewell/trace-mapping", [\ @@ -6284,6 +6452,13 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@rollup/rollup-android-arm-eabi", [\ + ["npm:4.60.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-android-arm-eabi-npm-4.60.2-71c565341c/node_modules/@rollup/rollup-android-arm-eabi/",\ + "packageDependencies": [\ + ["@rollup/rollup-android-arm-eabi", "npm:4.60.2"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:4.9.5", {\ "packageLocation": "./.yarn/unplugged/@rollup-rollup-android-arm-eabi-npm-4.9.5-61e16d95f2/node_modules/@rollup/rollup-android-arm-eabi/",\ "packageDependencies": [\ @@ -6293,6 +6468,13 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@rollup/rollup-android-arm64", [\ + ["npm:4.60.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-android-arm64-npm-4.60.2-6d8278e570/node_modules/@rollup/rollup-android-arm64/",\ + "packageDependencies": [\ + ["@rollup/rollup-android-arm64", "npm:4.60.2"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:4.9.5", {\ "packageLocation": "./.yarn/unplugged/@rollup-rollup-android-arm64-npm-4.9.5-6ccfc7470d/node_modules/@rollup/rollup-android-arm64/",\ "packageDependencies": [\ @@ -6302,6 +6484,13 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@rollup/rollup-darwin-arm64", [\ + ["npm:4.60.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-darwin-arm64-npm-4.60.2-f1fd9c6149/node_modules/@rollup/rollup-darwin-arm64/",\ + "packageDependencies": [\ + ["@rollup/rollup-darwin-arm64", "npm:4.60.2"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:4.9.5", {\ "packageLocation": "./.yarn/unplugged/@rollup-rollup-darwin-arm64-npm-4.9.5-16e34a3e7b/node_modules/@rollup/rollup-darwin-arm64/",\ "packageDependencies": [\ @@ -6311,6 +6500,13 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@rollup/rollup-darwin-x64", [\ + ["npm:4.60.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-darwin-x64-npm-4.60.2-d7fc3c1a3a/node_modules/@rollup/rollup-darwin-x64/",\ + "packageDependencies": [\ + ["@rollup/rollup-darwin-x64", "npm:4.60.2"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:4.9.5", {\ "packageLocation": "./.yarn/unplugged/@rollup-rollup-darwin-x64-npm-4.9.5-b519416430/node_modules/@rollup/rollup-darwin-x64/",\ "packageDependencies": [\ @@ -6319,7 +6515,32 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["@rollup/rollup-freebsd-arm64", [\ + ["npm:4.60.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-freebsd-arm64-npm-4.60.2-cf6f286b9a/node_modules/@rollup/rollup-freebsd-arm64/",\ + "packageDependencies": [\ + ["@rollup/rollup-freebsd-arm64", "npm:4.60.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-freebsd-x64", [\ + ["npm:4.60.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-freebsd-x64-npm-4.60.2-d606b454cb/node_modules/@rollup/rollup-freebsd-x64/",\ + "packageDependencies": [\ + ["@rollup/rollup-freebsd-x64", "npm:4.60.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["@rollup/rollup-linux-arm-gnueabihf", [\ + ["npm:4.60.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-arm-gnueabihf-npm-4.60.2-2566e33606/node_modules/@rollup/rollup-linux-arm-gnueabihf/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-arm-gnueabihf", "npm:4.60.2"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:4.9.5", {\ "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-arm-gnueabihf-npm-4.9.5-40be8c3d35/node_modules/@rollup/rollup-linux-arm-gnueabihf/",\ "packageDependencies": [\ @@ -6328,7 +6549,23 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["@rollup/rollup-linux-arm-musleabihf", [\ + ["npm:4.60.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-arm-musleabihf-npm-4.60.2-7b65868f98/node_modules/@rollup/rollup-linux-arm-musleabihf/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-arm-musleabihf", "npm:4.60.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["@rollup/rollup-linux-arm64-gnu", [\ + ["npm:4.60.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-arm64-gnu-npm-4.60.2-7fd0d28e0e/node_modules/@rollup/rollup-linux-arm64-gnu/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-arm64-gnu", "npm:4.60.2"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:4.9.5", {\ "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-arm64-gnu-npm-4.9.5-9441a712f1/node_modules/@rollup/rollup-linux-arm64-gnu/",\ "packageDependencies": [\ @@ -6338,6 +6575,13 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@rollup/rollup-linux-arm64-musl", [\ + ["npm:4.60.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-arm64-musl-npm-4.60.2-b89d5a75c1/node_modules/@rollup/rollup-linux-arm64-musl/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-arm64-musl", "npm:4.60.2"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:4.9.5", {\ "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-arm64-musl-npm-4.9.5-f4080391bd/node_modules/@rollup/rollup-linux-arm64-musl/",\ "packageDependencies": [\ @@ -6346,7 +6590,50 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["@rollup/rollup-linux-loong64-gnu", [\ + ["npm:4.60.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-loong64-gnu-npm-4.60.2-f8e6426200/node_modules/@rollup/rollup-linux-loong64-gnu/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-loong64-gnu", "npm:4.60.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-linux-loong64-musl", [\ + ["npm:4.60.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-loong64-musl-npm-4.60.2-16d52ed3b7/node_modules/@rollup/rollup-linux-loong64-musl/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-loong64-musl", "npm:4.60.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-linux-ppc64-gnu", [\ + ["npm:4.60.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-ppc64-gnu-npm-4.60.2-afcf799166/node_modules/@rollup/rollup-linux-ppc64-gnu/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-ppc64-gnu", "npm:4.60.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-linux-ppc64-musl", [\ + ["npm:4.60.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-ppc64-musl-npm-4.60.2-5c21c51159/node_modules/@rollup/rollup-linux-ppc64-musl/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-ppc64-musl", "npm:4.60.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["@rollup/rollup-linux-riscv64-gnu", [\ + ["npm:4.60.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-riscv64-gnu-npm-4.60.2-8646365256/node_modules/@rollup/rollup-linux-riscv64-gnu/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-riscv64-gnu", "npm:4.60.2"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:4.9.5", {\ "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-riscv64-gnu-npm-4.9.5-d720fe8d34/node_modules/@rollup/rollup-linux-riscv64-gnu/",\ "packageDependencies": [\ @@ -6355,7 +6642,32 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["@rollup/rollup-linux-riscv64-musl", [\ + ["npm:4.60.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-riscv64-musl-npm-4.60.2-919094f3c2/node_modules/@rollup/rollup-linux-riscv64-musl/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-riscv64-musl", "npm:4.60.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-linux-s390x-gnu", [\ + ["npm:4.60.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-s390x-gnu-npm-4.60.2-23ea4f6333/node_modules/@rollup/rollup-linux-s390x-gnu/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-s390x-gnu", "npm:4.60.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["@rollup/rollup-linux-x64-gnu", [\ + ["npm:4.60.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-x64-gnu-npm-4.60.2-37a65134ce/node_modules/@rollup/rollup-linux-x64-gnu/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-x64-gnu", "npm:4.60.2"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:4.9.5", {\ "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-x64-gnu-npm-4.9.5-dc241948bc/node_modules/@rollup/rollup-linux-x64-gnu/",\ "packageDependencies": [\ @@ -6365,6 +6677,13 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@rollup/rollup-linux-x64-musl", [\ + ["npm:4.60.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-x64-musl-npm-4.60.2-463db9bff5/node_modules/@rollup/rollup-linux-x64-musl/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-x64-musl", "npm:4.60.2"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:4.9.5", {\ "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-x64-musl-npm-4.9.5-fed94cd7c4/node_modules/@rollup/rollup-linux-x64-musl/",\ "packageDependencies": [\ @@ -6373,7 +6692,32 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["@rollup/rollup-openbsd-x64", [\ + ["npm:4.60.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-openbsd-x64-npm-4.60.2-f2724864cd/node_modules/@rollup/rollup-openbsd-x64/",\ + "packageDependencies": [\ + ["@rollup/rollup-openbsd-x64", "npm:4.60.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-openharmony-arm64", [\ + ["npm:4.60.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-openharmony-arm64-npm-4.60.2-aa66809329/node_modules/@rollup/rollup-openharmony-arm64/",\ + "packageDependencies": [\ + ["@rollup/rollup-openharmony-arm64", "npm:4.60.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["@rollup/rollup-win32-arm64-msvc", [\ + ["npm:4.60.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-win32-arm64-msvc-npm-4.60.2-3ef030b183/node_modules/@rollup/rollup-win32-arm64-msvc/",\ + "packageDependencies": [\ + ["@rollup/rollup-win32-arm64-msvc", "npm:4.60.2"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:4.9.5", {\ "packageLocation": "./.yarn/unplugged/@rollup-rollup-win32-arm64-msvc-npm-4.9.5-ffba176332/node_modules/@rollup/rollup-win32-arm64-msvc/",\ "packageDependencies": [\ @@ -6383,6 +6727,13 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@rollup/rollup-win32-ia32-msvc", [\ + ["npm:4.60.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-win32-ia32-msvc-npm-4.60.2-481817b574/node_modules/@rollup/rollup-win32-ia32-msvc/",\ + "packageDependencies": [\ + ["@rollup/rollup-win32-ia32-msvc", "npm:4.60.2"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:4.9.5", {\ "packageLocation": "./.yarn/unplugged/@rollup-rollup-win32-ia32-msvc-npm-4.9.5-f1996a16ec/node_modules/@rollup/rollup-win32-ia32-msvc/",\ "packageDependencies": [\ @@ -6391,7 +6742,23 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["@rollup/rollup-win32-x64-gnu", [\ + ["npm:4.60.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-win32-x64-gnu-npm-4.60.2-5a35131ab6/node_modules/@rollup/rollup-win32-x64-gnu/",\ + "packageDependencies": [\ + ["@rollup/rollup-win32-x64-gnu", "npm:4.60.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["@rollup/rollup-win32-x64-msvc", [\ + ["npm:4.60.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-win32-x64-msvc-npm-4.60.2-e6b830e6f1/node_modules/@rollup/rollup-win32-x64-msvc/",\ + "packageDependencies": [\ + ["@rollup/rollup-win32-x64-msvc", "npm:4.60.2"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:4.9.5", {\ "packageLocation": "./.yarn/unplugged/@rollup-rollup-win32-x64-msvc-npm-4.9.5-b56946ea61/node_modules/@rollup/rollup-win32-x64-msvc/",\ "packageDependencies": [\ @@ -7895,6 +8262,13 @@ const RAW_RUNTIME_STATE = ["@types/estree", "npm:1.0.6"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:1.0.8", {\ + "packageLocation": "./.yarn/cache/@types-estree-npm-1.0.8-2195bac6d6-39d34d1afa.zip/node_modules/@types/estree/",\ + "packageDependencies": [\ + ["@types/estree", "npm:1.0.8"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["@types/estree-jsx", [\ @@ -8738,6 +9112,79 @@ const RAW_RUNTIME_STATE = ["chai", "npm:4.4.1"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:2.1.9", {\ + "packageLocation": "./.yarn/cache/@vitest-expect-npm-2.1.9-4e945bd225-98d1cf0291.zip/node_modules/@vitest/expect/",\ + "packageDependencies": [\ + ["@vitest/expect", "npm:2.1.9"],\ + ["@vitest/spy", "npm:2.1.9"],\ + ["@vitest/utils", "npm:2.1.9"],\ + ["chai", "npm:5.3.3"],\ + ["tinyrainbow", "npm:1.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@vitest/mocker", [\ + ["npm:2.1.9", {\ + "packageLocation": "./.yarn/cache/@vitest-mocker-npm-2.1.9-2c6df8716a-f734490d8d.zip/node_modules/@vitest/mocker/",\ + "packageDependencies": [\ + ["@vitest/mocker", "npm:2.1.9"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:4ef281dea3e72cfe15e22e03d459f7e49ac98abc0eff779dcfafbc624bade1c8b1eb2686128e667fb643824bfc3b95d8c57430c45b296c7269745563de98aaf0#npm:2.1.9", {\ + "packageLocation": "./.yarn/__virtual__/@vitest-mocker-virtual-cc9fdd9495/0/cache/@vitest-mocker-npm-2.1.9-2c6df8716a-f734490d8d.zip/node_modules/@vitest/mocker/",\ + "packageDependencies": [\ + ["@vitest/mocker", "virtual:4ef281dea3e72cfe15e22e03d459f7e49ac98abc0eff779dcfafbc624bade1c8b1eb2686128e667fb643824bfc3b95d8c57430c45b296c7269745563de98aaf0#npm:2.1.9"],\ + ["@types/msw", null],\ + ["@types/vite", null],\ + ["@vitest/spy", "npm:2.1.9"],\ + ["estree-walker", "npm:3.0.3"],\ + ["magic-string", "npm:0.30.21"],\ + ["msw", null],\ + ["vite", "virtual:84dcff71db8be9cbe950d0756a4f7772695095a485baf88f1cc98436fdd0ea49e9c6ac7f535ec4b7b26fd24d60bd4323cc6ed6d8629d5b2015f92d4613c7ffb6#npm:5.4.21"]\ + ],\ + "packagePeers": [\ + "@types/msw",\ + "@types/vite",\ + "msw",\ + "vite"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@vitest/pretty-format", [\ + ["npm:2.1.9", {\ + "packageLocation": "./.yarn/cache/@vitest-pretty-format-npm-2.1.9-94ea1cc996-155f9ede50.zip/node_modules/@vitest/pretty-format/",\ + "packageDependencies": [\ + ["@vitest/pretty-format", "npm:2.1.9"],\ + ["tinyrainbow", "npm:1.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@vitest/runner", [\ + ["npm:2.1.9", {\ + "packageLocation": "./.yarn/cache/@vitest-runner-npm-2.1.9-1d50535316-e81f176bad.zip/node_modules/@vitest/runner/",\ + "packageDependencies": [\ + ["@vitest/runner", "npm:2.1.9"],\ + ["@vitest/utils", "npm:2.1.9"],\ + ["pathe", "npm:1.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@vitest/snapshot", [\ + ["npm:2.1.9", {\ + "packageLocation": "./.yarn/cache/@vitest-snapshot-npm-2.1.9-ad091136c0-394974b3a1.zip/node_modules/@vitest/snapshot/",\ + "packageDependencies": [\ + ["@vitest/snapshot", "npm:2.1.9"],\ + ["@vitest/pretty-format", "npm:2.1.9"],\ + ["magic-string", "npm:0.30.21"],\ + ["pathe", "npm:1.1.2"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["@vitest/spy", [\ @@ -8748,6 +9195,14 @@ const RAW_RUNTIME_STATE = ["tinyspy", "npm:2.2.0"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:2.1.9", {\ + "packageLocation": "./.yarn/cache/@vitest-spy-npm-2.1.9-d16af87e46-12a59b5095.zip/node_modules/@vitest/spy/",\ + "packageDependencies": [\ + ["@vitest/spy", "npm:2.1.9"],\ + ["tinyspy", "npm:3.0.2"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["@vitest/utils", [\ @@ -8760,6 +9215,16 @@ const RAW_RUNTIME_STATE = ["pretty-format", "npm:29.7.0"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:2.1.9", {\ + "packageLocation": "./.yarn/cache/@vitest-utils-npm-2.1.9-355aea689e-81a346cd72.zip/node_modules/@vitest/utils/",\ + "packageDependencies": [\ + ["@vitest/utils", "npm:2.1.9"],\ + ["@vitest/pretty-format", "npm:2.1.9"],\ + ["loupe", "npm:3.2.1"],\ + ["tinyrainbow", "npm:1.2.0"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["@xobotyi/scrollbar-width", [\ @@ -8979,7 +9444,8 @@ const RAW_RUNTIME_STATE = ["the-new-css-reset", "npm:1.11.2"],\ ["typescript", "patch:typescript@npm%3A5.3.3#optional!builtin::version=5.3.3&hash=e012d7"],\ ["vconsole", "npm:3.15.1"],\ - ["vite", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:5.0.11"]\ + ["vite", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:5.0.11"],\ + ["vitest", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:2.1.9"]\ ],\ "linkType": "SOFT"\ }]\ @@ -9369,6 +9835,13 @@ const RAW_RUNTIME_STATE = ["assertion-error", "npm:1.1.0"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:2.0.1", {\ + "packageLocation": "./.yarn/cache/assertion-error-npm-2.0.1-8169d136f2-bbbcb117ac.zip/node_modules/assertion-error/",\ + "packageDependencies": [\ + ["assertion-error", "npm:2.0.1"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["ast-types", [\ @@ -9833,6 +10306,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["cac", [\ + ["npm:6.7.14", {\ + "packageLocation": "./.yarn/cache/cac-npm-6.7.14-c46284e425-4ee06aaa7b.zip/node_modules/cac/",\ + "packageDependencies": [\ + ["cac", "npm:6.7.14"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["cacache", [\ ["npm:18.0.2", {\ "packageLocation": "./.yarn/cache/cacache-npm-18.0.2-d6329a1b9d-7992665305.zip/node_modules/cacache/",\ @@ -9929,6 +10411,18 @@ const RAW_RUNTIME_STATE = ["type-detect", "npm:4.0.8"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:5.3.3", {\ + "packageLocation": "./.yarn/cache/chai-npm-5.3.3-ebef71cdac-b360fd4d38.zip/node_modules/chai/",\ + "packageDependencies": [\ + ["chai", "npm:5.3.3"],\ + ["assertion-error", "npm:2.0.1"],\ + ["check-error", "npm:2.1.3"],\ + ["deep-eql", "npm:5.0.2"],\ + ["loupe", "npm:3.2.1"],\ + ["pathval", "npm:2.0.1"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["chalk", [\ @@ -10005,6 +10499,13 @@ const RAW_RUNTIME_STATE = ["get-func-name", "npm:2.0.2"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:2.1.3", {\ + "packageLocation": "./.yarn/cache/check-error-npm-2.1.3-e17bcf3ed8-878e99038f.zip/node_modules/check-error/",\ + "packageDependencies": [\ + ["check-error", "npm:2.1.3"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["chokidar", [\ @@ -10557,6 +11058,13 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ + ["npm:4.4.3", {\ + "packageLocation": "./.yarn/cache/debug-npm-4.4.3-0105c6123a-d79136ec6c.zip/node_modules/debug/",\ + "packageDependencies": [\ + ["debug", "npm:4.4.3"]\ + ],\ + "linkType": "SOFT"\ + }],\ ["virtual:1ff4b5f90832ba0a9c93ba1223af226e44ba70c1126a3740d93562b97bc36544e896a5e95908196f7458713e6a6089a34bfc67362fc6df7fa093bd06c878be47#npm:4.3.4", {\ "packageLocation": "./.yarn/__virtual__/debug-virtual-1040418e3c/0/cache/debug-npm-4.3.4-4513954577-cedbec4529.zip/node_modules/debug/",\ "packageDependencies": [\ @@ -10612,6 +11120,20 @@ const RAW_RUNTIME_STATE = "supports-color"\ ],\ "linkType": "HARD"\ + }],\ + ["virtual:84dcff71db8be9cbe950d0756a4f7772695095a485baf88f1cc98436fdd0ea49e9c6ac7f535ec4b7b26fd24d60bd4323cc6ed6d8629d5b2015f92d4613c7ffb6#npm:4.4.3", {\ + "packageLocation": "./.yarn/__virtual__/debug-virtual-7416b00f5c/0/cache/debug-npm-4.4.3-0105c6123a-d79136ec6c.zip/node_modules/debug/",\ + "packageDependencies": [\ + ["debug", "virtual:84dcff71db8be9cbe950d0756a4f7772695095a485baf88f1cc98436fdd0ea49e9c6ac7f535ec4b7b26fd24d60bd4323cc6ed6d8629d5b2015f92d4613c7ffb6#npm:4.4.3"],\ + ["@types/supports-color", null],\ + ["ms", "npm:2.1.3"],\ + ["supports-color", null]\ + ],\ + "packagePeers": [\ + "@types/supports-color",\ + "supports-color"\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["decode-named-character-reference", [\ @@ -10642,6 +11164,13 @@ const RAW_RUNTIME_STATE = ["type-detect", "npm:4.0.8"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:5.0.2", {\ + "packageLocation": "./.yarn/cache/deep-eql-npm-5.0.2-3bce58289f-7102cf3b7b.zip/node_modules/deep-eql/",\ + "packageDependencies": [\ + ["deep-eql", "npm:5.0.2"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["deep-equal", [\ @@ -11210,6 +11739,13 @@ const RAW_RUNTIME_STATE = ["es-module-lexer", "npm:0.9.3"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:1.7.0", {\ + "packageLocation": "./.yarn/cache/es-module-lexer-npm-1.7.0-456b47a08a-4c935affcb.zip/node_modules/es-module-lexer/",\ + "packageDependencies": [\ + ["es-module-lexer", "npm:1.7.0"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["es-set-tostringtag", [\ @@ -11305,6 +11841,36 @@ const RAW_RUNTIME_STATE = ["@esbuild/win32-x64", "npm:0.19.11"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/esbuild-npm-0.21.5-d85dfbc965/node_modules/esbuild/",\ + "packageDependencies": [\ + ["esbuild", "npm:0.21.5"],\ + ["@esbuild/aix-ppc64", "npm:0.21.5"],\ + ["@esbuild/android-arm", "npm:0.21.5"],\ + ["@esbuild/android-arm64", "npm:0.21.5"],\ + ["@esbuild/android-x64", "npm:0.21.5"],\ + ["@esbuild/darwin-arm64", "npm:0.21.5"],\ + ["@esbuild/darwin-x64", "npm:0.21.5"],\ + ["@esbuild/freebsd-arm64", "npm:0.21.5"],\ + ["@esbuild/freebsd-x64", "npm:0.21.5"],\ + ["@esbuild/linux-arm", "npm:0.21.5"],\ + ["@esbuild/linux-arm64", "npm:0.21.5"],\ + ["@esbuild/linux-ia32", "npm:0.21.5"],\ + ["@esbuild/linux-loong64", "npm:0.21.5"],\ + ["@esbuild/linux-mips64el", "npm:0.21.5"],\ + ["@esbuild/linux-ppc64", "npm:0.21.5"],\ + ["@esbuild/linux-riscv64", "npm:0.21.5"],\ + ["@esbuild/linux-s390x", "npm:0.21.5"],\ + ["@esbuild/linux-x64", "npm:0.21.5"],\ + ["@esbuild/netbsd-x64", "npm:0.21.5"],\ + ["@esbuild/openbsd-x64", "npm:0.21.5"],\ + ["@esbuild/sunos-x64", "npm:0.21.5"],\ + ["@esbuild/win32-arm64", "npm:0.21.5"],\ + ["@esbuild/win32-ia32", "npm:0.21.5"],\ + ["@esbuild/win32-x64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["esbuild-plugin-alias", [\ @@ -11769,6 +12335,14 @@ const RAW_RUNTIME_STATE = ["estree-walker", "npm:2.0.2"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:3.0.3", {\ + "packageLocation": "./.yarn/cache/estree-walker-npm-3.0.3-0372979673-c12e3c2b26.zip/node_modules/estree-walker/",\ + "packageDependencies": [\ + ["estree-walker", "npm:3.0.3"],\ + ["@types/estree", "npm:1.0.5"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["esutils", [\ @@ -11841,6 +12415,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["expect-type", [\ + ["npm:1.3.0", {\ + "packageLocation": "./.yarn/cache/expect-type-npm-1.3.0-95a4384745-8412b3fe4f.zip/node_modules/expect-type/",\ + "packageDependencies": [\ + ["expect-type", "npm:1.3.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["exponential-backoff", [\ ["npm:3.1.1", {\ "packageLocation": "./.yarn/cache/exponential-backoff-npm-3.1.1-04df458b30-160456d2d6.zip/node_modules/exponential-backoff/",\ @@ -14271,6 +14854,13 @@ const RAW_RUNTIME_STATE = ["get-func-name", "npm:2.0.2"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:3.2.1", {\ + "packageLocation": "./.yarn/cache/loupe-npm-3.2.1-a8f491982f-910c872cba.zip/node_modules/loupe/",\ + "packageDependencies": [\ + ["loupe", "npm:3.2.1"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["lru-cache", [\ @@ -14316,6 +14906,14 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ + ["npm:0.30.21", {\ + "packageLocation": "./.yarn/cache/magic-string-npm-0.30.21-9a226cb21e-299378e38f.zip/node_modules/magic-string/",\ + "packageDependencies": [\ + ["magic-string", "npm:0.30.21"],\ + ["@jridgewell/sourcemap-codec", "npm:1.5.5"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:0.30.6", {\ "packageLocation": "./.yarn/cache/magic-string-npm-0.30.6-ac832d24b6-e8835de342.zip/node_modules/magic-string/",\ "packageDependencies": [\ @@ -15251,6 +15849,13 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["nanoid", [\ + ["npm:3.3.12", {\ + "packageLocation": "./.yarn/cache/nanoid-npm-3.3.12-41f8e0bb94-ba142b7b39.zip/node_modules/nanoid/",\ + "packageDependencies": [\ + ["nanoid", "npm:3.3.12"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:3.3.7", {\ "packageLocation": "./.yarn/cache/nanoid-npm-3.3.7-98824ba130-e3fb661aa0.zip/node_modules/nanoid/",\ "packageDependencies": [\ @@ -15904,6 +16509,13 @@ const RAW_RUNTIME_STATE = ["pathval", "npm:1.1.1"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:2.0.1", {\ + "packageLocation": "./.yarn/cache/pathval-npm-2.0.1-7fb9ae82ba-460f470947.zip/node_modules/pathval/",\ + "packageDependencies": [\ + ["pathval", "npm:2.0.1"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["pdfjs-dist", [\ @@ -15945,6 +16557,13 @@ const RAW_RUNTIME_STATE = ["picocolors", "npm:1.0.0"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:1.1.1", {\ + "packageLocation": "./.yarn/cache/picocolors-npm-1.1.1-4fede47cf1-e2e3e8170a.zip/node_modules/picocolors/",\ + "packageDependencies": [\ + ["picocolors", "npm:1.1.1"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["picomatch", [\ @@ -16020,6 +16639,16 @@ const RAW_RUNTIME_STATE = ["source-map-js", "npm:1.0.2"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:8.5.13", {\ + "packageLocation": "./.yarn/cache/postcss-npm-8.5.13-a1d77c1b0b-3aa7c8cbdf.zip/node_modules/postcss/",\ + "packageDependencies": [\ + ["postcss", "npm:8.5.13"],\ + ["nanoid", "npm:3.3.12"],\ + ["picocolors", "npm:1.1.1"],\ + ["source-map-js", "npm:1.2.1"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["postcss-value-parser", [\ @@ -18866,6 +19495,40 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ + ["npm:4.60.2", {\ + "packageLocation": "./.yarn/cache/rollup-npm-4.60.2-81a73351f6-f67d6156fc.zip/node_modules/rollup/",\ + "packageDependencies": [\ + ["rollup", "npm:4.60.2"],\ + ["@rollup/rollup-android-arm-eabi", "npm:4.60.2"],\ + ["@rollup/rollup-android-arm64", "npm:4.60.2"],\ + ["@rollup/rollup-darwin-arm64", "npm:4.60.2"],\ + ["@rollup/rollup-darwin-x64", "npm:4.60.2"],\ + ["@rollup/rollup-freebsd-arm64", "npm:4.60.2"],\ + ["@rollup/rollup-freebsd-x64", "npm:4.60.2"],\ + ["@rollup/rollup-linux-arm-gnueabihf", "npm:4.60.2"],\ + ["@rollup/rollup-linux-arm-musleabihf", "npm:4.60.2"],\ + ["@rollup/rollup-linux-arm64-gnu", "npm:4.60.2"],\ + ["@rollup/rollup-linux-arm64-musl", "npm:4.60.2"],\ + ["@rollup/rollup-linux-loong64-gnu", "npm:4.60.2"],\ + ["@rollup/rollup-linux-loong64-musl", "npm:4.60.2"],\ + ["@rollup/rollup-linux-ppc64-gnu", "npm:4.60.2"],\ + ["@rollup/rollup-linux-ppc64-musl", "npm:4.60.2"],\ + ["@rollup/rollup-linux-riscv64-gnu", "npm:4.60.2"],\ + ["@rollup/rollup-linux-riscv64-musl", "npm:4.60.2"],\ + ["@rollup/rollup-linux-s390x-gnu", "npm:4.60.2"],\ + ["@rollup/rollup-linux-x64-gnu", "npm:4.60.2"],\ + ["@rollup/rollup-linux-x64-musl", "npm:4.60.2"],\ + ["@rollup/rollup-openbsd-x64", "npm:4.60.2"],\ + ["@rollup/rollup-openharmony-arm64", "npm:4.60.2"],\ + ["@rollup/rollup-win32-arm64-msvc", "npm:4.60.2"],\ + ["@rollup/rollup-win32-ia32-msvc", "npm:4.60.2"],\ + ["@rollup/rollup-win32-x64-gnu", "npm:4.60.2"],\ + ["@rollup/rollup-win32-x64-msvc", "npm:4.60.2"],\ + ["@types/estree", "npm:1.0.8"],\ + ["fsevents", "patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:4.9.5", {\ "packageLocation": "./.yarn/cache/rollup-npm-4.9.5-deca2874bb-7f241ad402.zip/node_modules/rollup/",\ "packageDependencies": [\ @@ -19159,6 +19822,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["siginfo", [\ + ["npm:2.0.0", {\ + "packageLocation": "./.yarn/cache/siginfo-npm-2.0.0-9bbac931f8-3def8f8e51.zip/node_modules/siginfo/",\ + "packageDependencies": [\ + ["siginfo", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["signal-exit", [\ ["npm:3.0.7", {\ "packageLocation": "./.yarn/cache/signal-exit-npm-3.0.7-bd270458a3-25d272fa73.zip/node_modules/signal-exit/",\ @@ -19286,6 +19958,13 @@ const RAW_RUNTIME_STATE = ["source-map-js", "npm:1.0.2"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:1.2.1", {\ + "packageLocation": "./.yarn/cache/source-map-js-npm-1.2.1-b9a47d7e1a-7bda1fc4c1.zip/node_modules/source-map-js/",\ + "packageDependencies": [\ + ["source-map-js", "npm:1.2.1"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["source-map-support", [\ @@ -19384,6 +20063,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["stackback", [\ + ["npm:0.0.2", {\ + "packageLocation": "./.yarn/cache/stackback-npm-0.0.2-73273dc92e-89a1416668.zip/node_modules/stackback/",\ + "packageDependencies": [\ + ["stackback", "npm:0.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["stackframe", [\ ["npm:1.3.4", {\ "packageLocation": "./.yarn/cache/stackframe-npm-1.3.4-bf4b7cc8fd-18410f7a1e.zip/node_modules/stackframe/",\ @@ -19425,6 +20113,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["std-env", [\ + ["npm:3.10.0", {\ + "packageLocation": "./.yarn/cache/std-env-npm-3.10.0-30d3e2646f-1814927a45.zip/node_modules/std-env/",\ + "packageDependencies": [\ + ["std-env", "npm:3.10.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["stop-iteration-iterator", [\ ["npm:1.0.0", {\ "packageLocation": "./.yarn/cache/stop-iteration-iterator-npm-1.0.0-ea451e1609-c4158d6188.zip/node_modules/stop-iteration-iterator/",\ @@ -20057,6 +20754,42 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["tinybench", [\ + ["npm:2.9.0", {\ + "packageLocation": "./.yarn/cache/tinybench-npm-2.9.0-2861a048db-c3500b0f60.zip/node_modules/tinybench/",\ + "packageDependencies": [\ + ["tinybench", "npm:2.9.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["tinyexec", [\ + ["npm:0.3.2", {\ + "packageLocation": "./.yarn/cache/tinyexec-npm-0.3.2-381b1e349c-3efbf791a9.zip/node_modules/tinyexec/",\ + "packageDependencies": [\ + ["tinyexec", "npm:0.3.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["tinypool", [\ + ["npm:1.1.1", {\ + "packageLocation": "./.yarn/cache/tinypool-npm-1.1.1-6772421283-bf26727d01.zip/node_modules/tinypool/",\ + "packageDependencies": [\ + ["tinypool", "npm:1.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["tinyrainbow", [\ + ["npm:1.2.0", {\ + "packageLocation": "./.yarn/cache/tinyrainbow-npm-1.2.0-456cccee06-7f78a4b997.zip/node_modules/tinyrainbow/",\ + "packageDependencies": [\ + ["tinyrainbow", "npm:1.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["tinyspy", [\ ["npm:2.2.0", {\ "packageLocation": "./.yarn/cache/tinyspy-npm-2.2.0-226debb582-8c7b70748d.zip/node_modules/tinyspy/",\ @@ -20064,6 +20797,13 @@ const RAW_RUNTIME_STATE = ["tinyspy", "npm:2.2.0"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:3.0.2", {\ + "packageLocation": "./.yarn/cache/tinyspy-npm-3.0.2-4f17593a18-55ffad24e3.zip/node_modules/tinyspy/",\ + "packageDependencies": [\ + ["tinyspy", "npm:3.0.2"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["tmpl", [\ @@ -21019,6 +21759,56 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ + ["npm:5.4.21", {\ + "packageLocation": "./.yarn/cache/vite-npm-5.4.21-12a8265f9b-468336a140.zip/node_modules/vite/",\ + "packageDependencies": [\ + ["vite", "npm:5.4.21"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:84dcff71db8be9cbe950d0756a4f7772695095a485baf88f1cc98436fdd0ea49e9c6ac7f535ec4b7b26fd24d60bd4323cc6ed6d8629d5b2015f92d4613c7ffb6#npm:5.4.21", {\ + "packageLocation": "./.yarn/__virtual__/vite-virtual-1fe349d1ee/0/cache/vite-npm-5.4.21-12a8265f9b-468336a140.zip/node_modules/vite/",\ + "packageDependencies": [\ + ["vite", "virtual:84dcff71db8be9cbe950d0756a4f7772695095a485baf88f1cc98436fdd0ea49e9c6ac7f535ec4b7b26fd24d60bd4323cc6ed6d8629d5b2015f92d4613c7ffb6#npm:5.4.21"],\ + ["@types/less", null],\ + ["@types/lightningcss", null],\ + ["@types/node", null],\ + ["@types/sass", null],\ + ["@types/sass-embedded", null],\ + ["@types/stylus", null],\ + ["@types/sugarss", null],\ + ["@types/terser", null],\ + ["esbuild", "npm:0.21.5"],\ + ["fsevents", "patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1"],\ + ["less", null],\ + ["lightningcss", null],\ + ["postcss", "npm:8.5.13"],\ + ["rollup", "npm:4.60.2"],\ + ["sass", null],\ + ["sass-embedded", null],\ + ["stylus", null],\ + ["sugarss", null],\ + ["terser", null]\ + ],\ + "packagePeers": [\ + "@types/less",\ + "@types/lightningcss",\ + "@types/node",\ + "@types/sass-embedded",\ + "@types/sass",\ + "@types/stylus",\ + "@types/sugarss",\ + "@types/terser",\ + "less",\ + "lightningcss",\ + "sass-embedded",\ + "sass",\ + "stylus",\ + "sugarss",\ + "terser"\ + ],\ + "linkType": "HARD"\ + }],\ ["virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:5.0.11", {\ "packageLocation": "./.yarn/__virtual__/vite-virtual-d72c85a35b/0/cache/vite-npm-5.0.11-d5457a8b86-74a3ddc6d4.zip/node_modules/vite/",\ "packageDependencies": [\ @@ -21071,6 +21861,80 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["vite-node", [\ + ["npm:2.1.9", {\ + "packageLocation": "./.yarn/cache/vite-node-npm-2.1.9-84dcff71db-0d3589f9f4.zip/node_modules/vite-node/",\ + "packageDependencies": [\ + ["vite-node", "npm:2.1.9"],\ + ["cac", "npm:6.7.14"],\ + ["debug", "virtual:84dcff71db8be9cbe950d0756a4f7772695095a485baf88f1cc98436fdd0ea49e9c6ac7f535ec4b7b26fd24d60bd4323cc6ed6d8629d5b2015f92d4613c7ffb6#npm:4.4.3"],\ + ["es-module-lexer", "npm:1.7.0"],\ + ["pathe", "npm:1.1.2"],\ + ["vite", "virtual:84dcff71db8be9cbe950d0756a4f7772695095a485baf88f1cc98436fdd0ea49e9c6ac7f535ec4b7b26fd24d60bd4323cc6ed6d8629d5b2015f92d4613c7ffb6#npm:5.4.21"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["vitest", [\ + ["npm:2.1.9", {\ + "packageLocation": "./.yarn/cache/vitest-npm-2.1.9-da245b091d-e339e16dcc.zip/node_modules/vitest/",\ + "packageDependencies": [\ + ["vitest", "npm:2.1.9"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:2.1.9", {\ + "packageLocation": "./.yarn/__virtual__/vitest-virtual-4ef281dea3/0/cache/vitest-npm-2.1.9-da245b091d-e339e16dcc.zip/node_modules/vitest/",\ + "packageDependencies": [\ + ["vitest", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:2.1.9"],\ + ["@edge-runtime/vm", null],\ + ["@types/edge-runtime__vm", null],\ + ["@types/happy-dom", null],\ + ["@types/jsdom", null],\ + ["@types/node", null],\ + ["@types/vitest__browser", null],\ + ["@types/vitest__ui", null],\ + ["@vitest/browser", null],\ + ["@vitest/expect", "npm:2.1.9"],\ + ["@vitest/mocker", "virtual:4ef281dea3e72cfe15e22e03d459f7e49ac98abc0eff779dcfafbc624bade1c8b1eb2686128e667fb643824bfc3b95d8c57430c45b296c7269745563de98aaf0#npm:2.1.9"],\ + ["@vitest/pretty-format", "npm:2.1.9"],\ + ["@vitest/runner", "npm:2.1.9"],\ + ["@vitest/snapshot", "npm:2.1.9"],\ + ["@vitest/spy", "npm:2.1.9"],\ + ["@vitest/ui", null],\ + ["@vitest/utils", "npm:2.1.9"],\ + ["chai", "npm:5.3.3"],\ + ["debug", "virtual:84dcff71db8be9cbe950d0756a4f7772695095a485baf88f1cc98436fdd0ea49e9c6ac7f535ec4b7b26fd24d60bd4323cc6ed6d8629d5b2015f92d4613c7ffb6#npm:4.4.3"],\ + ["expect-type", "npm:1.3.0"],\ + ["happy-dom", null],\ + ["jsdom", null],\ + ["magic-string", "npm:0.30.21"],\ + ["pathe", "npm:1.1.2"],\ + ["std-env", "npm:3.10.0"],\ + ["tinybench", "npm:2.9.0"],\ + ["tinyexec", "npm:0.3.2"],\ + ["tinypool", "npm:1.1.1"],\ + ["tinyrainbow", "npm:1.2.0"],\ + ["vite", "virtual:84dcff71db8be9cbe950d0756a4f7772695095a485baf88f1cc98436fdd0ea49e9c6ac7f535ec4b7b26fd24d60bd4323cc6ed6d8629d5b2015f92d4613c7ffb6#npm:5.4.21"],\ + ["vite-node", "npm:2.1.9"],\ + ["why-is-node-running", "npm:2.3.0"]\ + ],\ + "packagePeers": [\ + "@edge-runtime/vm",\ + "@types/edge-runtime__vm",\ + "@types/happy-dom",\ + "@types/jsdom",\ + "@types/node",\ + "@types/vitest__browser",\ + "@types/vitest__ui",\ + "@vitest/browser",\ + "@vitest/ui",\ + "happy-dom",\ + "jsdom"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["void-elements", [\ ["npm:3.1.0", {\ "packageLocation": "./.yarn/cache/void-elements-npm-3.1.0-4f43780839-0b8686f9f9.zip/node_modules/void-elements/",\ @@ -21227,6 +22091,17 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["why-is-node-running", [\ + ["npm:2.3.0", {\ + "packageLocation": "./.yarn/cache/why-is-node-running-npm-2.3.0-011cf61a18-1cde0b01b8.zip/node_modules/why-is-node-running/",\ + "packageDependencies": [\ + ["why-is-node-running", "npm:2.3.0"],\ + ["siginfo", "npm:2.0.0"],\ + ["stackback", "npm:0.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["wide-align", [\ ["npm:1.1.5", {\ "packageLocation": "./.yarn/cache/wide-align-npm-1.1.5-889d77e592-1d9c2a3e36.zip/node_modules/wide-align/",\ diff --git a/apps/admin/package.json b/apps/admin/package.json index baeef449..046d5370 100644 --- a/apps/admin/package.json +++ b/apps/admin/package.json @@ -9,7 +9,9 @@ "lint": "eslint . --ext ts,tsx --report-unused-disable-directives", "lint:fix": "TIMING=1 eslint . --ext ts,tsx --fix", "type-check": "tsc --noEmit", - "preview": "vite preview" + "preview": "vite preview", + "test": "vitest run", + "test:watch": "vitest" }, "dependencies": { "@boolti/api": "*", @@ -60,6 +62,7 @@ "@types/react-dom": "^18.2.17", "@vitejs/plugin-react": "^4.2.1", "typescript": "^5.2.2", - "vite": "^5.0.8" + "vite": "^5.0.8", + "vitest": "^2.1.9" } } diff --git a/yarn.lock b/yarn.lock index f2fe6909..d8e80a04 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2078,6 +2078,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/aix-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/aix-ppc64@npm:0.21.5" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/android-arm64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/android-arm64@npm:0.18.20" @@ -2092,6 +2099,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm64@npm:0.21.5" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/android-arm@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/android-arm@npm:0.18.20" @@ -2106,6 +2120,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm@npm:0.21.5" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@esbuild/android-x64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/android-x64@npm:0.18.20" @@ -2120,6 +2141,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-x64@npm:0.21.5" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + "@esbuild/darwin-arm64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/darwin-arm64@npm:0.18.20" @@ -2134,6 +2162,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-arm64@npm:0.21.5" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/darwin-x64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/darwin-x64@npm:0.18.20" @@ -2148,6 +2183,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-x64@npm:0.21.5" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@esbuild/freebsd-arm64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/freebsd-arm64@npm:0.18.20" @@ -2162,6 +2204,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-arm64@npm:0.21.5" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/freebsd-x64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/freebsd-x64@npm:0.18.20" @@ -2176,6 +2225,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-x64@npm:0.21.5" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/linux-arm64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/linux-arm64@npm:0.18.20" @@ -2190,6 +2246,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm64@npm:0.21.5" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/linux-arm@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/linux-arm@npm:0.18.20" @@ -2204,6 +2267,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm@npm:0.21.5" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + "@esbuild/linux-ia32@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/linux-ia32@npm:0.18.20" @@ -2218,6 +2288,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ia32@npm:0.21.5" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/linux-loong64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/linux-loong64@npm:0.18.20" @@ -2232,6 +2309,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-loong64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-loong64@npm:0.21.5" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + "@esbuild/linux-mips64el@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/linux-mips64el@npm:0.18.20" @@ -2246,6 +2330,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-mips64el@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-mips64el@npm:0.21.5" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + "@esbuild/linux-ppc64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/linux-ppc64@npm:0.18.20" @@ -2260,6 +2351,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ppc64@npm:0.21.5" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/linux-riscv64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/linux-riscv64@npm:0.18.20" @@ -2274,6 +2372,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-riscv64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-riscv64@npm:0.21.5" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + "@esbuild/linux-s390x@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/linux-s390x@npm:0.18.20" @@ -2288,6 +2393,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-s390x@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-s390x@npm:0.21.5" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + "@esbuild/linux-x64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/linux-x64@npm:0.18.20" @@ -2302,6 +2414,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-x64@npm:0.21.5" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + "@esbuild/netbsd-x64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/netbsd-x64@npm:0.18.20" @@ -2316,6 +2435,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/netbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/netbsd-x64@npm:0.21.5" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/openbsd-x64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/openbsd-x64@npm:0.18.20" @@ -2330,6 +2456,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/openbsd-x64@npm:0.21.5" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/sunos-x64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/sunos-x64@npm:0.18.20" @@ -2344,6 +2477,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/sunos-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/sunos-x64@npm:0.21.5" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + "@esbuild/win32-arm64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/win32-arm64@npm:0.18.20" @@ -2358,6 +2498,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-arm64@npm:0.21.5" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/win32-ia32@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/win32-ia32@npm:0.18.20" @@ -2372,6 +2519,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-ia32@npm:0.21.5" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/win32-x64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/win32-x64@npm:0.18.20" @@ -2386,6 +2540,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-x64@npm:0.21.5" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": version: 4.4.0 resolution: "@eslint-community/eslint-utils@npm:4.4.0" @@ -2651,6 +2812,13 @@ __metadata: languageName: node linkType: hard +"@jridgewell/sourcemap-codec@npm:^1.5.5": + version: 1.5.5 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.5" + checksum: 10c0/f9e538f302b63c0ebc06eecb1dd9918dd4289ed36147a0ddce35d6ea4d7ebbda243cda7b2213b6a5e1d8087a298d5cf630fb2bd39329cdecb82017023f6081a0 + languageName: node + linkType: hard + "@jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": version: 0.3.21 resolution: "@jridgewell/trace-mapping@npm:0.3.21" @@ -3753,6 +3921,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm-eabi@npm:4.60.2": + version: 4.60.2 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.60.2" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@rollup/rollup-android-arm-eabi@npm:4.9.5": version: 4.9.5 resolution: "@rollup/rollup-android-arm-eabi@npm:4.9.5" @@ -3760,6 +3935,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm64@npm:4.60.2": + version: 4.60.2 + resolution: "@rollup/rollup-android-arm64@npm:4.60.2" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-android-arm64@npm:4.9.5": version: 4.9.5 resolution: "@rollup/rollup-android-arm64@npm:4.9.5" @@ -3767,6 +3949,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-darwin-arm64@npm:4.60.2": + version: 4.60.2 + resolution: "@rollup/rollup-darwin-arm64@npm:4.60.2" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-darwin-arm64@npm:4.9.5": version: 4.9.5 resolution: "@rollup/rollup-darwin-arm64@npm:4.9.5" @@ -3774,6 +3963,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-darwin-x64@npm:4.60.2": + version: 4.60.2 + resolution: "@rollup/rollup-darwin-x64@npm:4.60.2" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@rollup/rollup-darwin-x64@npm:4.9.5": version: 4.9.5 resolution: "@rollup/rollup-darwin-x64@npm:4.9.5" @@ -3781,6 +3977,27 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-freebsd-arm64@npm:4.60.2": + version: 4.60.2 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.60.2" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-x64@npm:4.60.2": + version: 4.60.2 + resolution: "@rollup/rollup-freebsd-x64@npm:4.60.2" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-gnueabihf@npm:4.60.2": + version: 4.60.2 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.60.2" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-arm-gnueabihf@npm:4.9.5": version: 4.9.5 resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.9.5" @@ -3788,6 +4005,20 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm-musleabihf@npm:4.60.2": + version: 4.60.2 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.60.2" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-gnu@npm:4.60.2": + version: 4.60.2 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.60.2" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-arm64-gnu@npm:4.9.5": version: 4.9.5 resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.9.5" @@ -3795,6 +4026,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm64-musl@npm:4.60.2": + version: 4.60.2 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.60.2" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-linux-arm64-musl@npm:4.9.5": version: 4.9.5 resolution: "@rollup/rollup-linux-arm64-musl@npm:4.9.5" @@ -3802,6 +4040,41 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-loong64-gnu@npm:4.60.2": + version: 4.60.2 + resolution: "@rollup/rollup-linux-loong64-gnu@npm:4.60.2" + conditions: os=linux & cpu=loong64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-loong64-musl@npm:4.60.2": + version: 4.60.2 + resolution: "@rollup/rollup-linux-loong64-musl@npm:4.60.2" + conditions: os=linux & cpu=loong64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-ppc64-gnu@npm:4.60.2": + version: 4.60.2 + resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.60.2" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-ppc64-musl@npm:4.60.2": + version: 4.60.2 + resolution: "@rollup/rollup-linux-ppc64-musl@npm:4.60.2" + conditions: os=linux & cpu=ppc64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-gnu@npm:4.60.2": + version: 4.60.2 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.60.2" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-riscv64-gnu@npm:4.9.5": version: 4.9.5 resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.9.5" @@ -3809,6 +4082,27 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-riscv64-musl@npm:4.60.2": + version: 4.60.2 + resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.60.2" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-s390x-gnu@npm:4.60.2": + version: 4.60.2 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.60.2" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-gnu@npm:4.60.2": + version: 4.60.2 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.60.2" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-x64-gnu@npm:4.9.5": version: 4.9.5 resolution: "@rollup/rollup-linux-x64-gnu@npm:4.9.5" @@ -3816,6 +4110,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-x64-musl@npm:4.60.2": + version: 4.60.2 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.60.2" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-linux-x64-musl@npm:4.9.5": version: 4.9.5 resolution: "@rollup/rollup-linux-x64-musl@npm:4.9.5" @@ -3823,6 +4124,27 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-openbsd-x64@npm:4.60.2": + version: 4.60.2 + resolution: "@rollup/rollup-openbsd-x64@npm:4.60.2" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-openharmony-arm64@npm:4.60.2": + version: 4.60.2 + resolution: "@rollup/rollup-openharmony-arm64@npm:4.60.2" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-arm64-msvc@npm:4.60.2": + version: 4.60.2 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.60.2" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-win32-arm64-msvc@npm:4.9.5": version: 4.9.5 resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.9.5" @@ -3830,6 +4152,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-ia32-msvc@npm:4.60.2": + version: 4.60.2 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.60.2" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@rollup/rollup-win32-ia32-msvc@npm:4.9.5": version: 4.9.5 resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.9.5" @@ -3837,6 +4166,20 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-x64-gnu@npm:4.60.2": + version: 4.60.2 + resolution: "@rollup/rollup-win32-x64-gnu@npm:4.60.2" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-msvc@npm:4.60.2": + version: 4.60.2 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.60.2" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@rollup/rollup-win32-x64-msvc@npm:4.9.5": version: 4.9.5 resolution: "@rollup/rollup-win32-x64-msvc@npm:4.9.5" @@ -4918,6 +5261,13 @@ __metadata: languageName: node linkType: hard +"@types/estree@npm:1.0.8": + version: 1.0.8 + resolution: "@types/estree@npm:1.0.8" + checksum: 10c0/39d34d1afaa338ab9763f37ad6066e3f349444f9052b9676a7cc0252ef9485a41c6d81c9c4e0d26e9077993354edf25efc853f3224dd4b447175ef62bdcc86a5 + languageName: node + linkType: hard + "@types/estree@npm:^0.0.51": version: 0.0.51 resolution: "@types/estree@npm:0.0.51" @@ -5501,6 +5851,18 @@ __metadata: languageName: node linkType: hard +"@vitest/expect@npm:2.1.9": + version: 2.1.9 + resolution: "@vitest/expect@npm:2.1.9" + dependencies: + "@vitest/spy": "npm:2.1.9" + "@vitest/utils": "npm:2.1.9" + chai: "npm:^5.1.2" + tinyrainbow: "npm:^1.2.0" + checksum: 10c0/98d1cf02917316bebef9e4720723e38298a1c12b3c8f3a81f259bb822de4288edf594e69ff64f0b88afbda6d04d7a4f0c2f720f3fec16b4c45f5e2669f09fdbb + languageName: node + linkType: hard + "@vitest/expect@npm:^0.34.2": version: 0.34.7 resolution: "@vitest/expect@npm:0.34.7" @@ -5512,6 +5874,55 @@ __metadata: languageName: node linkType: hard +"@vitest/mocker@npm:2.1.9": + version: 2.1.9 + resolution: "@vitest/mocker@npm:2.1.9" + dependencies: + "@vitest/spy": "npm:2.1.9" + estree-walker: "npm:^3.0.3" + magic-string: "npm:^0.30.12" + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + checksum: 10c0/f734490d8d1206a7f44dfdfca459282f5921d73efa72935bb1dc45307578defd38a4131b14853316373ec364cbe910dbc74594ed4137e0da35aa4d9bb716f190 + languageName: node + linkType: hard + +"@vitest/pretty-format@npm:2.1.9, @vitest/pretty-format@npm:^2.1.9": + version: 2.1.9 + resolution: "@vitest/pretty-format@npm:2.1.9" + dependencies: + tinyrainbow: "npm:^1.2.0" + checksum: 10c0/155f9ede5090eabed2a73361094bb35ed4ec6769ae3546d2a2af139166569aec41bb80e031c25ff2da22b71dd4ed51e5468e66a05e6aeda5f14b32e30bc18f00 + languageName: node + linkType: hard + +"@vitest/runner@npm:2.1.9": + version: 2.1.9 + resolution: "@vitest/runner@npm:2.1.9" + dependencies: + "@vitest/utils": "npm:2.1.9" + pathe: "npm:^1.1.2" + checksum: 10c0/e81f176badb12a815cbbd9bd97e19f7437a0b64e8934d680024b0f768d8670d59cad698ef0e3dada5241b6731d77a7bb3cd2c7cb29f751fd4dd35eb11c42963a + languageName: node + linkType: hard + +"@vitest/snapshot@npm:2.1.9": + version: 2.1.9 + resolution: "@vitest/snapshot@npm:2.1.9" + dependencies: + "@vitest/pretty-format": "npm:2.1.9" + magic-string: "npm:^0.30.12" + pathe: "npm:^1.1.2" + checksum: 10c0/394974b3a1fe96186a3c87f933b2f7f1f7b7cc42f9c781d80271dbb4c987809bf035fecd7398b8a3a2d54169e3ecb49655e38a0131d0e7fea5ce88960613b526 + languageName: node + linkType: hard + "@vitest/spy@npm:0.34.7, @vitest/spy@npm:^0.34.1": version: 0.34.7 resolution: "@vitest/spy@npm:0.34.7" @@ -5521,6 +5932,15 @@ __metadata: languageName: node linkType: hard +"@vitest/spy@npm:2.1.9": + version: 2.1.9 + resolution: "@vitest/spy@npm:2.1.9" + dependencies: + tinyspy: "npm:^3.0.2" + checksum: 10c0/12a59b5095e20188b819a1d797e0a513d991b4e6a57db679927c43b362a3eff52d823b34e855a6dd9e73c9fa138dcc5ef52210841a93db5cbf047957a60ca83c + languageName: node + linkType: hard + "@vitest/utils@npm:0.34.7, @vitest/utils@npm:^0.34.6": version: 0.34.7 resolution: "@vitest/utils@npm:0.34.7" @@ -5532,6 +5952,17 @@ __metadata: languageName: node linkType: hard +"@vitest/utils@npm:2.1.9": + version: 2.1.9 + resolution: "@vitest/utils@npm:2.1.9" + dependencies: + "@vitest/pretty-format": "npm:2.1.9" + loupe: "npm:^3.1.2" + tinyrainbow: "npm:^1.2.0" + checksum: 10c0/81a346cd72b47941f55411f5df4cc230e5f740d1e97e0d3f771b27f007266fc1f28d0438582f6409ea571bc0030ed37f684c64c58d1947d6298d770c21026fdf + languageName: node + linkType: hard + "@xobotyi/scrollbar-width@npm:^1.9.5": version: 1.9.5 resolution: "@xobotyi/scrollbar-width@npm:1.9.5" @@ -5702,6 +6133,7 @@ __metadata: typescript: "npm:^5.2.2" vconsole: "npm:^3.15.1" vite: "npm:^5.0.8" + vitest: "npm:^2.1.9" languageName: unknown linkType: soft @@ -6050,6 +6482,13 @@ __metadata: languageName: node linkType: hard +"assertion-error@npm:^2.0.1": + version: 2.0.1 + resolution: "assertion-error@npm:2.0.1" + checksum: 10c0/bbbcb117ac6480138f8c93cf7f535614282dea9dc828f540cdece85e3c665e8f78958b96afac52f29ff883c72638e6a87d469ecc9fe5bc902df03ed24a55dba8 + languageName: node + linkType: hard + "ast-types@npm:^0.16.1": version: 0.16.1 resolution: "ast-types@npm:0.16.1" @@ -6419,6 +6858,13 @@ __metadata: languageName: node linkType: hard +"cac@npm:^6.7.14": + version: 6.7.14 + resolution: "cac@npm:6.7.14" + checksum: 10c0/4ee06aaa7bab8981f0d54e5f5f9d4adcd64058e9697563ce336d8a3878ed018ee18ebe5359b2430eceae87e0758e62ea2019c3f52ae6e211b1bd2e133856cd10 + languageName: node + linkType: hard + "cacache@npm:^18.0.0": version: 18.0.2 resolution: "cacache@npm:18.0.2" @@ -6505,6 +6951,19 @@ __metadata: languageName: node linkType: hard +"chai@npm:^5.1.2": + version: 5.3.3 + resolution: "chai@npm:5.3.3" + dependencies: + assertion-error: "npm:^2.0.1" + check-error: "npm:^2.1.1" + deep-eql: "npm:^5.0.1" + loupe: "npm:^3.1.0" + pathval: "npm:^2.0.0" + checksum: 10c0/b360fd4d38861622e5010c2f709736988b05c7f31042305fa3f4e9911f6adb80ccfb4e302068bf8ed10e835c2e2520cba0f5edc13d878b886987e5aa62483f53 + languageName: node + linkType: hard + "chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" @@ -6573,6 +7032,13 @@ __metadata: languageName: node linkType: hard +"check-error@npm:^2.1.1": + version: 2.1.3 + resolution: "check-error@npm:2.1.3" + checksum: 10c0/878e99038fb6476316b74668cd6a498c7e66df3efe48158fa40db80a06ba4258742ac3ee2229c4a2a98c5e73f5dff84eb3e50ceb6b65bbd8f831eafc8338607d + languageName: node + linkType: hard + "chokidar@npm:^3.5.3": version: 3.5.3 resolution: "chokidar@npm:3.5.3" @@ -7068,6 +7534,18 @@ __metadata: languageName: node linkType: hard +"debug@npm:^4.3.7": + version: 4.4.3 + resolution: "debug@npm:4.4.3" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/d79136ec6c83ecbefd0f6a5593da6a9c91ec4d7ddc4b54c883d6e71ec9accb5f67a1a5e96d00a328196b5b5c86d365e98d8a3a70856aaf16b4e7b1985e67f5a6 + languageName: node + linkType: hard + "decode-named-character-reference@npm:^1.0.0": version: 1.0.2 resolution: "decode-named-character-reference@npm:1.0.2" @@ -7095,6 +7573,13 @@ __metadata: languageName: node linkType: hard +"deep-eql@npm:^5.0.1": + version: 5.0.2 + resolution: "deep-eql@npm:5.0.2" + checksum: 10c0/7102cf3b7bb719c6b9c0db2e19bf0aa9318d141581befe8c7ce8ccd39af9eaa4346e5e05adef7f9bd7015da0f13a3a25dcfe306ef79dc8668aedbecb658dd247 + languageName: node + linkType: hard + "deep-equal@npm:^2.0.5": version: 2.2.3 resolution: "deep-equal@npm:2.2.3" @@ -7587,6 +8072,13 @@ __metadata: languageName: node linkType: hard +"es-module-lexer@npm:^1.5.4": + version: 1.7.0 + resolution: "es-module-lexer@npm:1.7.0" + checksum: 10c0/4c935affcbfeba7fb4533e1da10fa8568043df1e3574b869385980de9e2d475ddc36769891936dbb07036edb3c3786a8b78ccf44964cd130dedc1f2c984b6c7b + languageName: node + linkType: hard + "es-set-tostringtag@npm:^2.0.1": version: 2.0.2 resolution: "es-set-tostringtag@npm:2.0.2" @@ -7793,6 +8285,86 @@ __metadata: languageName: node linkType: hard +"esbuild@npm:^0.21.3": + version: 0.21.5 + resolution: "esbuild@npm:0.21.5" + dependencies: + "@esbuild/aix-ppc64": "npm:0.21.5" + "@esbuild/android-arm": "npm:0.21.5" + "@esbuild/android-arm64": "npm:0.21.5" + "@esbuild/android-x64": "npm:0.21.5" + "@esbuild/darwin-arm64": "npm:0.21.5" + "@esbuild/darwin-x64": "npm:0.21.5" + "@esbuild/freebsd-arm64": "npm:0.21.5" + "@esbuild/freebsd-x64": "npm:0.21.5" + "@esbuild/linux-arm": "npm:0.21.5" + "@esbuild/linux-arm64": "npm:0.21.5" + "@esbuild/linux-ia32": "npm:0.21.5" + "@esbuild/linux-loong64": "npm:0.21.5" + "@esbuild/linux-mips64el": "npm:0.21.5" + "@esbuild/linux-ppc64": "npm:0.21.5" + "@esbuild/linux-riscv64": "npm:0.21.5" + "@esbuild/linux-s390x": "npm:0.21.5" + "@esbuild/linux-x64": "npm:0.21.5" + "@esbuild/netbsd-x64": "npm:0.21.5" + "@esbuild/openbsd-x64": "npm:0.21.5" + "@esbuild/sunos-x64": "npm:0.21.5" + "@esbuild/win32-arm64": "npm:0.21.5" + "@esbuild/win32-ia32": "npm:0.21.5" + "@esbuild/win32-x64": "npm:0.21.5" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/fa08508adf683c3f399e8a014a6382a6b65542213431e26206c0720e536b31c09b50798747c2a105a4bbba1d9767b8d3615a74c2f7bf1ddf6d836cd11eb672de + languageName: node + linkType: hard + "escalade@npm:^3.1.1": version: 3.1.1 resolution: "escalade@npm:3.1.1" @@ -8094,6 +8666,15 @@ __metadata: languageName: node linkType: hard +"estree-walker@npm:^3.0.3": + version: 3.0.3 + resolution: "estree-walker@npm:3.0.3" + dependencies: + "@types/estree": "npm:^1.0.0" + checksum: 10c0/c12e3c2b2642d2bcae7d5aa495c60fa2f299160946535763969a1c83fc74518ffa9c2cd3a8b69ac56aea547df6a8aac25f729a342992ef0bbac5f1c73e78995d + languageName: node + linkType: hard + "esutils@npm:^2.0.2": version: 2.0.3 resolution: "esutils@npm:2.0.3" @@ -8156,6 +8737,13 @@ __metadata: languageName: node linkType: hard +"expect-type@npm:^1.1.0": + version: 1.3.0 + resolution: "expect-type@npm:1.3.0" + checksum: 10c0/8412b3fe4f392c420ab41dae220b09700e4e47c639a29ba7ba2e83cc6cffd2b4926f7ac9e47d7e277e8f4f02acda76fd6931cb81fd2b382fa9477ef9ada953fd + languageName: node + linkType: hard + "exponential-backoff@npm:^3.1.1": version: 3.1.1 resolution: "exponential-backoff@npm:3.1.1" @@ -10281,6 +10869,13 @@ __metadata: languageName: node linkType: hard +"loupe@npm:^3.1.0, loupe@npm:^3.1.2": + version: 3.2.1 + resolution: "loupe@npm:3.2.1" + checksum: 10c0/910c872cba291309664c2d094368d31a68907b6f5913e989d301b5c25f30e97d76d77f23ab3bf3b46d0f601ff0b6af8810c10c31b91d2c6b2f132809ca2cc705 + languageName: node + linkType: hard + "lru-cache@npm:^10.0.1, lru-cache@npm:^9.1.1 || ^10.0.0": version: 10.1.0 resolution: "lru-cache@npm:10.1.0" @@ -10333,6 +10928,15 @@ __metadata: languageName: node linkType: hard +"magic-string@npm:^0.30.12": + version: 0.30.21 + resolution: "magic-string@npm:0.30.21" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.5" + checksum: 10c0/299378e38f9a270069fc62358522ddfb44e94244baa0d6a8980ab2a9b2490a1d03b236b447eee309e17eb3bddfa482c61259d47960eb018a904f0ded52780c4a + languageName: node + linkType: hard + "make-cancellable-promise@npm:^1.3.1": version: 1.3.2 resolution: "make-cancellable-promise@npm:1.3.2" @@ -11133,6 +11737,15 @@ __metadata: languageName: node linkType: hard +"nanoid@npm:^3.3.11": + version: 3.3.12 + resolution: "nanoid@npm:3.3.12" + bin: + nanoid: bin/nanoid.cjs + checksum: 10c0/ba142b7b39e11e80c16dd74b0365d407880c87c1cf7e1480956981ae940ee36060fa5b6f092cd1e315184dd19244c657bd017d03327bd3c62247d691c5e8edfb + languageName: node + linkType: hard + "nanoid@npm:^3.3.7": version: 3.3.7 resolution: "nanoid@npm:3.3.7" @@ -11718,6 +12331,13 @@ __metadata: languageName: node linkType: hard +"pathval@npm:^2.0.0": + version: 2.0.1 + resolution: "pathval@npm:2.0.1" + checksum: 10c0/460f4709479fbf2c45903a65655fc8f0a5f6d808f989173aeef5fdea4ff4f303dc13f7870303999add60ec49d4c14733895c0a869392e9866f1091fa64fd7581 + languageName: node + linkType: hard + "pdfjs-dist@npm:4.3.136": version: 4.3.136 resolution: "pdfjs-dist@npm:4.3.136" @@ -11758,6 +12378,13 @@ __metadata: languageName: node linkType: hard +"picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 + languageName: node + linkType: hard + "picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.0, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" @@ -11833,6 +12460,17 @@ __metadata: languageName: node linkType: hard +"postcss@npm:^8.4.43": + version: 8.5.13 + resolution: "postcss@npm:8.5.13" + dependencies: + nanoid: "npm:^3.3.11" + picocolors: "npm:^1.1.1" + source-map-js: "npm:^1.2.1" + checksum: 10c0/3aa7c8cbdfbfd99b34406a433cef56d164dd135fc9cb9e63d487cc363291f877a55ec7b8ff6ec15348c17c2d98a43be46bfad671e6340403041a3e79f70c2f2f + languageName: node + linkType: hard + "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" @@ -13675,6 +14313,96 @@ __metadata: languageName: node linkType: hard +"rollup@npm:^4.20.0": + version: 4.60.2 + resolution: "rollup@npm:4.60.2" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.60.2" + "@rollup/rollup-android-arm64": "npm:4.60.2" + "@rollup/rollup-darwin-arm64": "npm:4.60.2" + "@rollup/rollup-darwin-x64": "npm:4.60.2" + "@rollup/rollup-freebsd-arm64": "npm:4.60.2" + "@rollup/rollup-freebsd-x64": "npm:4.60.2" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.60.2" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.60.2" + "@rollup/rollup-linux-arm64-gnu": "npm:4.60.2" + "@rollup/rollup-linux-arm64-musl": "npm:4.60.2" + "@rollup/rollup-linux-loong64-gnu": "npm:4.60.2" + "@rollup/rollup-linux-loong64-musl": "npm:4.60.2" + "@rollup/rollup-linux-ppc64-gnu": "npm:4.60.2" + "@rollup/rollup-linux-ppc64-musl": "npm:4.60.2" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.60.2" + "@rollup/rollup-linux-riscv64-musl": "npm:4.60.2" + "@rollup/rollup-linux-s390x-gnu": "npm:4.60.2" + "@rollup/rollup-linux-x64-gnu": "npm:4.60.2" + "@rollup/rollup-linux-x64-musl": "npm:4.60.2" + "@rollup/rollup-openbsd-x64": "npm:4.60.2" + "@rollup/rollup-openharmony-arm64": "npm:4.60.2" + "@rollup/rollup-win32-arm64-msvc": "npm:4.60.2" + "@rollup/rollup-win32-ia32-msvc": "npm:4.60.2" + "@rollup/rollup-win32-x64-gnu": "npm:4.60.2" + "@rollup/rollup-win32-x64-msvc": "npm:4.60.2" + "@types/estree": "npm:1.0.8" + fsevents: "npm:~2.3.2" + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-freebsd-arm64": + optional: true + "@rollup/rollup-freebsd-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-loong64-gnu": + optional: true + "@rollup/rollup-linux-loong64-musl": + optional: true + "@rollup/rollup-linux-ppc64-gnu": + optional: true + "@rollup/rollup-linux-ppc64-musl": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-riscv64-musl": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-openbsd-x64": + optional: true + "@rollup/rollup-openharmony-arm64": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-gnu": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10c0/f67d6156fc5b895f33b929a4762392906d00fa5550f0a1f5e66519ab1c05d835aec5f201b4e748c29d1c87f024d3d9c4b0a2d1285668456db661d82b961d379c + languageName: node + linkType: hard + "rtl-css-js@npm:^1.16.1": version: 1.16.1 resolution: "rtl-css-js@npm:1.16.1" @@ -13922,6 +14650,13 @@ __metadata: languageName: node linkType: hard +"siginfo@npm:^2.0.0": + version: 2.0.0 + resolution: "siginfo@npm:2.0.0" + checksum: 10c0/3def8f8e516fbb34cb6ae415b07ccc5d9c018d85b4b8611e3dc6f8be6d1899f693a4382913c9ed51a06babb5201639d76453ab297d1c54a456544acf5c892e34 + languageName: node + linkType: hard + "signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" @@ -14012,6 +14747,13 @@ __metadata: languageName: node linkType: hard +"source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf + languageName: node + linkType: hard + "source-map-support@npm:^0.5.16": version: 0.5.21 resolution: "source-map-support@npm:0.5.21" @@ -14116,6 +14858,13 @@ __metadata: languageName: node linkType: hard +"stackback@npm:0.0.2": + version: 0.0.2 + resolution: "stackback@npm:0.0.2" + checksum: 10c0/89a1416668f950236dd5ac9f9a6b2588e1b9b62b1b6ad8dff1bfc5d1a15dbf0aafc9b52d2226d00c28dffff212da464eaeebfc6b7578b9d180cef3e3782c5983 + languageName: node + linkType: hard + "stackframe@npm:^1.3.4": version: 1.3.4 resolution: "stackframe@npm:1.3.4" @@ -14151,6 +14900,13 @@ __metadata: languageName: node linkType: hard +"std-env@npm:^3.8.0": + version: 3.10.0 + resolution: "std-env@npm:3.10.0" + checksum: 10c0/1814927a45004d36dde6707eaf17552a546769bc79a6421be2c16ce77d238158dfe5de30910b78ec30d95135cc1c59ea73ee22d2ca170f8b9753f84da34c427f + languageName: node + linkType: hard + "stop-iteration-iterator@npm:^1.0.0": version: 1.0.0 resolution: "stop-iteration-iterator@npm:1.0.0" @@ -14707,6 +15463,34 @@ __metadata: languageName: node linkType: hard +"tinybench@npm:^2.9.0": + version: 2.9.0 + resolution: "tinybench@npm:2.9.0" + checksum: 10c0/c3500b0f60d2eb8db65250afe750b66d51623057ee88720b7f064894a6cb7eb93360ca824a60a31ab16dab30c7b1f06efe0795b352e37914a9d4bad86386a20c + languageName: node + linkType: hard + +"tinyexec@npm:^0.3.1": + version: 0.3.2 + resolution: "tinyexec@npm:0.3.2" + checksum: 10c0/3efbf791a911be0bf0821eab37a3445c2ba07acc1522b1fa84ae1e55f10425076f1290f680286345ed919549ad67527d07281f1c19d584df3b74326909eb1f90 + languageName: node + linkType: hard + +"tinypool@npm:^1.0.1": + version: 1.1.1 + resolution: "tinypool@npm:1.1.1" + checksum: 10c0/bf26727d01443061b04fa863f571016950888ea994ba0cd8cba3a1c51e2458d84574341ab8dbc3664f1c3ab20885c8cf9ff1cc4b18201f04c2cde7d317fff69b + languageName: node + linkType: hard + +"tinyrainbow@npm:^1.2.0": + version: 1.2.0 + resolution: "tinyrainbow@npm:1.2.0" + checksum: 10c0/7f78a4b997e5ba0f5ecb75e7ed786f30bab9063716e7dff24dd84013fb338802e43d176cb21ed12480561f5649a82184cf31efb296601a29d38145b1cdb4c192 + languageName: node + linkType: hard + "tinyspy@npm:^2.1.1": version: 2.2.0 resolution: "tinyspy@npm:2.2.0" @@ -14714,6 +15498,13 @@ __metadata: languageName: node linkType: hard +"tinyspy@npm:^3.0.2": + version: 3.0.2 + resolution: "tinyspy@npm:3.0.2" + checksum: 10c0/55ffad24e346622b59292e097c2ee30a63919d5acb7ceca87fc0d1c223090089890587b426e20054733f97a58f20af2c349fb7cc193697203868ab7ba00bcea0 + languageName: node + linkType: hard + "tmpl@npm:1.0.5": version: 1.0.5 resolution: "tmpl@npm:1.0.5" @@ -15470,6 +16261,64 @@ __metadata: languageName: node linkType: hard +"vite-node@npm:2.1.9": + version: 2.1.9 + resolution: "vite-node@npm:2.1.9" + dependencies: + cac: "npm:^6.7.14" + debug: "npm:^4.3.7" + es-module-lexer: "npm:^1.5.4" + pathe: "npm:^1.1.2" + vite: "npm:^5.0.0" + bin: + vite-node: vite-node.mjs + checksum: 10c0/0d3589f9f4e9cff696b5b49681fdb75d1638c75053728be52b4013f70792f38cb0120a9c15e3a4b22bdd6b795ad7c2da13bcaf47242d439f0906049e73bdd756 + languageName: node + linkType: hard + +"vite@npm:^5.0.0": + version: 5.4.21 + resolution: "vite@npm:5.4.21" + dependencies: + esbuild: "npm:^0.21.3" + fsevents: "npm:~2.3.3" + postcss: "npm:^8.4.43" + rollup: "npm:^4.20.0" + peerDependencies: + "@types/node": ^18.0.0 || >=20.0.0 + less: "*" + lightningcss: ^1.21.0 + sass: "*" + sass-embedded: "*" + stylus: "*" + sugarss: "*" + terser: ^5.4.0 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + bin: + vite: bin/vite.js + checksum: 10c0/468336a1409f728b464160cbf02672e72271fb688d0e605e776b74a89d27e1029509eef3a3a6c755928d8011e474dbf234824d054d07960be5f23cd176bc72de + languageName: node + linkType: hard + "vite@npm:^5.0.8": version: 5.0.11 resolution: "vite@npm:5.0.11" @@ -15510,6 +16359,56 @@ __metadata: languageName: node linkType: hard +"vitest@npm:^2.1.9": + version: 2.1.9 + resolution: "vitest@npm:2.1.9" + dependencies: + "@vitest/expect": "npm:2.1.9" + "@vitest/mocker": "npm:2.1.9" + "@vitest/pretty-format": "npm:^2.1.9" + "@vitest/runner": "npm:2.1.9" + "@vitest/snapshot": "npm:2.1.9" + "@vitest/spy": "npm:2.1.9" + "@vitest/utils": "npm:2.1.9" + chai: "npm:^5.1.2" + debug: "npm:^4.3.7" + expect-type: "npm:^1.1.0" + magic-string: "npm:^0.30.12" + pathe: "npm:^1.1.2" + std-env: "npm:^3.8.0" + tinybench: "npm:^2.9.0" + tinyexec: "npm:^0.3.1" + tinypool: "npm:^1.0.1" + tinyrainbow: "npm:^1.2.0" + vite: "npm:^5.0.0" + vite-node: "npm:2.1.9" + why-is-node-running: "npm:^2.3.0" + peerDependencies: + "@edge-runtime/vm": "*" + "@types/node": ^18.0.0 || >=20.0.0 + "@vitest/browser": 2.1.9 + "@vitest/ui": 2.1.9 + happy-dom: "*" + jsdom: "*" + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@types/node": + optional: true + "@vitest/browser": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + bin: + vitest: vitest.mjs + checksum: 10c0/e339e16dccacf4589ff43cb1f38c7b4d14427956ae8ef48702af6820a9842347c2b6c77356aeddb040329759ca508a3cb2b104ddf78103ea5bc98ab8f2c3a54e + languageName: node + linkType: hard + "void-elements@npm:3.1.0": version: 3.1.0 resolution: "void-elements@npm:3.1.0" @@ -15652,6 +16551,18 @@ __metadata: languageName: node linkType: hard +"why-is-node-running@npm:^2.3.0": + version: 2.3.0 + resolution: "why-is-node-running@npm:2.3.0" + dependencies: + siginfo: "npm:^2.0.0" + stackback: "npm:0.0.2" + bin: + why-is-node-running: cli.js + checksum: 10c0/1cde0b01b827d2cf4cb11db962f3958b9175d5d9e7ac7361d1a7b0e2dc6069a263e69118bd974c4f6d0a890ef4eedfe34cf3d5167ec14203dbc9a18620537054 + languageName: node + linkType: hard + "wide-align@npm:^1.1.2": version: 1.1.5 resolution: "wide-align@npm:1.1.5" From d750894d37a9b0dedcb2321ec2602913197d712c Mon Sep 17 00:00:00 2001 From: hexdrinker Date: Sat, 2 May 2026 00:18:06 +0900 Subject: [PATCH 2/6] =?UTF-8?q?feat(admin):=20util=20=ED=95=A8=EC=88=98=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/admin/src/utils/format.test.ts | 33 +++++++ apps/admin/src/utils/format.ts | 26 +++++- apps/admin/src/utils/phone.test.ts | 116 ++++++++++++++++++++++++ apps/admin/src/utils/replace.test.ts | 31 +++++++ apps/admin/src/utils/validation.test.ts | 51 +++++++++++ 5 files changed, 254 insertions(+), 3 deletions(-) create mode 100644 apps/admin/src/utils/format.test.ts create mode 100644 apps/admin/src/utils/phone.test.ts create mode 100644 apps/admin/src/utils/replace.test.ts create mode 100644 apps/admin/src/utils/validation.test.ts diff --git a/apps/admin/src/utils/format.test.ts b/apps/admin/src/utils/format.test.ts new file mode 100644 index 00000000..b0a8b9f5 --- /dev/null +++ b/apps/admin/src/utils/format.test.ts @@ -0,0 +1,33 @@ +import { describe, expect, it } from 'vitest'; + +import { formatPhoneNumber } from './format'; + +describe('formatPhoneNumber', () => { + it('+82 국제번호 형식을 포맷한다', () => { + expect(formatPhoneNumber('821012341234')).toBe('+82-10-1234-1234'); + expect(formatPhoneNumber('82212345678')).toBe('+82-2-1234-5678'); + }); + + it('대표번호(15xx) 형식을 포맷한다', () => { + expect(formatPhoneNumber('15881234')).toBe('1588-1234'); + }); + + it('국내 전화번호 형식을 포맷한다', () => { + expect(formatPhoneNumber('0212345678')).toBe('02-1234-5678'); + expect(formatPhoneNumber('01012341234')).toBe('010-1234-1234'); + expect(formatPhoneNumber('0311234567')).toBe('031-123-4567'); + }); + + it('0504, 0505 번호를 포맷한다', () => { + expect(formatPhoneNumber('050512341234')).toBe('0505-1234-1234'); + expect(formatPhoneNumber('050412345678')).toBe('0504-1234-5678'); + }); + + it('이미 하이픈이 포함된 값은 원본 문자열을 유지한다', () => { + expect(formatPhoneNumber('010-1234-5678')).toBe('010-1234-5678'); + }); + + it('짧은 입력도 가능한 형태로 안전하게 포맷한다', () => { + expect(formatPhoneNumber('0101234')).toBe('010-1234'); + }); +}); diff --git a/apps/admin/src/utils/format.ts b/apps/admin/src/utils/format.ts index b42c502c..79d23d3d 100644 --- a/apps/admin/src/utils/format.ts +++ b/apps/admin/src/utils/format.ts @@ -1,11 +1,31 @@ export const formatPhoneNumber = (phoneNumber: string) => { + const joinPhoneParts = (...parts: Array) => parts.filter(Boolean).join('-'); + if (phoneNumber.indexOf('82') == 0) { // +82 - return phoneNumber.replace(/(^82)(2|\d{2})(\d+)?(\d{4})$/, '+$1-$2-$3-$4'); + const match = phoneNumber.match(/(^82)(2|\d{2})(\d+)?(\d{4})$/); + + if (!match) { + return phoneNumber; + } + + return `+${joinPhoneParts(match[1], match[2], match[3], match[4])}`; } else if (phoneNumber.indexOf('1') == 0) { // 1588, 1566, 1677, ... - return phoneNumber.replace(/(^1\d{3})(\d{4})$/, '$1-$2'); + const match = phoneNumber.match(/(^1\d{3})(\d{4})$/); + + if (!match) { + return phoneNumber; + } + + return joinPhoneParts(match[1], match[2]); } // 02/0504/0505/010/011/031 - return phoneNumber.replace(/(^02|^0504|^0505|^0\d{2})(\d+)?(\d{4})$/, '$1-$2-$3'); + const match = phoneNumber.match(/(^02|^0504|^0505|^0\d{2})(\d+)?(\d{4})$/); + + if (!match) { + return phoneNumber; + } + + return joinPhoneParts(match[1], match[2], match[3]); }; diff --git a/apps/admin/src/utils/phone.test.ts b/apps/admin/src/utils/phone.test.ts new file mode 100644 index 00000000..cb4fe70a --- /dev/null +++ b/apps/admin/src/utils/phone.test.ts @@ -0,0 +1,116 @@ +import { describe, expect, it } from 'vitest'; + +import { + detectPhoneType, + formatPhoneDynamic, + getLengthRangeByType, + stripNonDigits, + validatePhoneOnBlur, +} from './phone'; + +describe('stripNonDigits', () => { + it('숫자가 아닌 문자를 제거한다', () => { + expect(stripNonDigits('010-1234-5678')).toBe('01012345678'); + }); + + it('빈 문자열이면 빈 문자열을 반환한다', () => { + expect(stripNonDigits('')).toBe(''); + }); +}); + +describe('detectPhoneType', () => { + it('전화번호 접두사로 타입을 판별한다', () => { + expect(detectPhoneType('0212345678')).toBe('seoul'); + expect(detectPhoneType('01012345678')).toBe('mobile'); + expect(detectPhoneType('07012345678')).toBe('voip'); + expect(detectPhoneType('0311234567')).toBe('region'); + expect(detectPhoneType('0161234567')).toBe('legacyMobile'); + expect(detectPhoneType('15881234')).toBe('special'); + }); + + it('지원하지 않는 접두사면 unknown을 반환한다', () => { + expect(detectPhoneType('99912345678')).toBe('unknown'); + }); +}); + +describe('getLengthRangeByType', () => { + it('타입별 길이 범위를 반환한다', () => { + expect(getLengthRangeByType('seoul')).toEqual({ min: 9, max: 10 }); + expect(getLengthRangeByType('mobile')).toEqual({ min: 11, max: 11 }); + expect(getLengthRangeByType('special')).toEqual({ min: 8, max: 8 }); + }); +}); + +describe('formatPhoneDynamic', () => { + it('빈 입력이면 빈 formatted를 반환한다', () => { + expect(formatPhoneDynamic('')).toEqual({ + formatted: '', + type: 'unknown', + maxLength: 11, + }); + }); + + it('서울 지역번호를 포맷한다', () => { + expect(formatPhoneDynamic('0212345678')).toEqual({ + formatted: '02-1234-5678', + type: 'seoul', + maxLength: 10, + }); + }); + + it('서울 9자리 번호를 포맷한다', () => { + expect(formatPhoneDynamic('021234567')).toEqual({ + formatted: '02-123-4567', + type: 'seoul', + maxLength: 10, + }); + }); + + it('휴대폰 번호를 포맷한다', () => { + expect(formatPhoneDynamic('01012345678')).toEqual({ + formatted: '010-1234-5678', + type: 'mobile', + maxLength: 11, + }); + }); + + it('대표번호를 포맷한다', () => { + expect(formatPhoneDynamic('15881234')).toEqual({ + formatted: '1588-1234', + type: 'special', + maxLength: 8, + }); + }); + + it('지원하지 않는 번호는 unknown 타입으로 3-중간-4 형식에 맞춰 포맷한다', () => { + expect(formatPhoneDynamic('12345678901')).toEqual({ + formatted: '123-4567-8901', + type: 'unknown', + maxLength: 11, + }); + }); +}); + +describe('validatePhoneOnBlur', () => { + it('유효한 번호면 true를 반환한다', () => { + expect(validatePhoneOnBlur('010-1234-5678')).toBe(true); + expect(validatePhoneOnBlur('02-1234-5678')).toBe(true); + expect(validatePhoneOnBlur('1588-1234')).toBe(true); + }); + + it('유효하지 않거나 알 수 없는 번호면 false를 반환한다', () => { + expect(validatePhoneOnBlur('0101234')).toBe(false); + expect(validatePhoneOnBlur('99912345678')).toBe(false); + }); + + it('서울 번호 길이 경계(9자리/10자리)를 허용한다', () => { + expect(validatePhoneOnBlur('021234567')).toBe(true); + expect(validatePhoneOnBlur('0212345678')).toBe(true); + }); + + it('대표번호는 8자리만 허용한다', () => { + expect(validatePhoneOnBlur('15881234')).toBe(true); + expect(validatePhoneOnBlur('1588123')).toBe(false); + expect(validatePhoneOnBlur('158812345')).toBe(false); + }); +}); diff --git a/apps/admin/src/utils/replace.test.ts b/apps/admin/src/utils/replace.test.ts new file mode 100644 index 00000000..6bf9462f --- /dev/null +++ b/apps/admin/src/utils/replace.test.ts @@ -0,0 +1,31 @@ +import { describe, expect, it } from 'vitest'; + +import { replaceUserCode } from './replace'; + +describe('replaceUserCode', () => { + it('허용된 문자만 유지한다', () => { + expect(replaceUserCode('Abc_123')).toBe('Abc_123'); + }); + + it('허용되지 않은 문자를 제거한다', () => { + expect(replaceUserCode('A!b@c#한글-123')).toBe('Abc123'); + }); + + it('결과 길이를 20자로 제한한다', () => { + expect(replaceUserCode('abcdefghijklmnopqrstuvwxyz_0123')).toBe( + 'abcdefghijklmnopqrst', + ); + }); + + it('길이가 정확히 20자면 그대로 유지한다', () => { + expect(replaceUserCode('abcdefghijklmnopqrst')).toBe('abcdefghijklmnopqrst'); + }); + + it('빈 문자열이면 빈 문자열을 반환한다', () => { + expect(replaceUserCode('')).toBe(''); + }); + + it('언더스코어와 숫자 조합을 유지한다', () => { + expect(replaceUserCode('__user_001__')).toBe('__user_001__'); + }); +}); diff --git a/apps/admin/src/utils/validation.test.ts b/apps/admin/src/utils/validation.test.ts new file mode 100644 index 00000000..eb2017ce --- /dev/null +++ b/apps/admin/src/utils/validation.test.ts @@ -0,0 +1,51 @@ +import { describe, expect, it } from 'vitest'; + +import { validateAccountHolder, validateAccountNumber } from './validation'; + +describe('validateAccountNumber', () => { + it('계좌번호 길이가 정확히 11이면 true를 반환한다', () => { + expect(validateAccountNumber('12345678901')).toBe(true); + }); + + it('계좌번호 길이가 정확히 14이면 true를 반환한다', () => { + expect(validateAccountNumber('12345678901234')).toBe(true); + }); + + it('계좌번호 길이가 11 미만이면 false를 반환한다', () => { + expect(validateAccountNumber('1234567890')).toBe(false); + }); + + it('계좌번호 길이가 11 이상 14 이하이면 true를 반환한다', () => { + expect(validateAccountNumber('12345678901')).toBe(true); + expect(validateAccountNumber('12345678901234')).toBe(true); + }); + + it('계좌번호 길이가 14 초과이면 false를 반환한다', () => { + expect(validateAccountNumber('123456789012345')).toBe(false); + }); + + it('빈 문자열이면 false를 반환한다', () => { + expect(validateAccountNumber('')).toBe(false); + }); +}); + +describe('validateAccountHolder', () => { + it('예금주명이 한글이면 true를 반환한다', () => { + expect(validateAccountHolder('홍길동')).toBe(true); + }); + + it('예금주명에 한글 이외 문자가 포함되면 false를 반환한다', () => { + expect(validateAccountHolder('John')).toBe(false); + expect(validateAccountHolder('홍길동1')).toBe(false); + expect(validateAccountHolder('홍 길동')).toBe(false); + }); + + it('자모만 입력된 경우 true를 반환한다', () => { + expect(validateAccountHolder('ㄱㄴㄷ')).toBe(true); + }); + + it('앞뒤 공백이 포함되면 false를 반환한다', () => { + expect(validateAccountHolder(' 홍길동')).toBe(false); + expect(validateAccountHolder('홍길동 ')).toBe(false); + }); +}); From a5fbc7d99665f1a8db0a419ae04e00093eeccde4 Mon Sep 17 00:00:00 2001 From: hexdrinker Date: Sat, 2 May 2026 00:28:28 +0900 Subject: [PATCH 3/6] =?UTF-8?q?chore(admin):=20jsdom=20=EC=84=A4=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pnp.cjs | 415 +++++++++++++++++++++++++++++++++++++++- apps/admin/package.json | 1 + yarn.lock | 327 ++++++++++++++++++++++++++++++- 3 files changed, 740 insertions(+), 3 deletions(-) diff --git a/.pnp.cjs b/.pnp.cjs index f3727b8b..5a8f5bf0 100755 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -241,6 +241,20 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["@asamuzakjp/css-color", [\ + ["npm:3.2.0", {\ + "packageLocation": "./.yarn/cache/@asamuzakjp-css-color-npm-3.2.0-ed5b7465ba-a4bf1c8317.zip/node_modules/@asamuzakjp/css-color/",\ + "packageDependencies": [\ + ["@asamuzakjp/css-color", "npm:3.2.0"],\ + ["@csstools/css-calc", "virtual:ed5b7465ba8cf0eb21975dec62bfcf6d291ea8fcead25822592225aae1675a11a9ab5730181ed5da294a62f7379a3e67d78ef9ef50d04ba4802b6770c14cecdd#npm:2.1.4"],\ + ["@csstools/css-color-parser", "virtual:ed5b7465ba8cf0eb21975dec62bfcf6d291ea8fcead25822592225aae1675a11a9ab5730181ed5da294a62f7379a3e67d78ef9ef50d04ba4802b6770c14cecdd#npm:3.1.0"],\ + ["@csstools/css-parser-algorithms", "virtual:ed5b7465ba8cf0eb21975dec62bfcf6d291ea8fcead25822592225aae1675a11a9ab5730181ed5da294a62f7379a3e67d78ef9ef50d04ba4802b6770c14cecdd#npm:3.0.5"],\ + ["@csstools/css-tokenizer", "npm:3.0.4"],\ + ["lru-cache", "npm:10.4.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["@aw-web-design/x-default-browser", [\ ["npm:1.4.126", {\ "packageLocation": "./.yarn/cache/@aw-web-design-x-default-browser-npm-1.4.126-91a892f901-634c7fad7a.zip/node_modules/@aw-web-design/x-default-browser/",\ @@ -3127,6 +3141,100 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["@csstools/color-helpers", [\ + ["npm:5.1.0", {\ + "packageLocation": "./.yarn/cache/@csstools-color-helpers-npm-5.1.0-d44a2a6134-b7f99d2e45.zip/node_modules/@csstools/color-helpers/",\ + "packageDependencies": [\ + ["@csstools/color-helpers", "npm:5.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@csstools/css-calc", [\ + ["npm:2.1.4", {\ + "packageLocation": "./.yarn/cache/@csstools-css-calc-npm-2.1.4-81c74a3511-42ce5793e5.zip/node_modules/@csstools/css-calc/",\ + "packageDependencies": [\ + ["@csstools/css-calc", "npm:2.1.4"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:ed5b7465ba8cf0eb21975dec62bfcf6d291ea8fcead25822592225aae1675a11a9ab5730181ed5da294a62f7379a3e67d78ef9ef50d04ba4802b6770c14cecdd#npm:2.1.4", {\ + "packageLocation": "./.yarn/__virtual__/@csstools-css-calc-virtual-768d5baeff/0/cache/@csstools-css-calc-npm-2.1.4-81c74a3511-42ce5793e5.zip/node_modules/@csstools/css-calc/",\ + "packageDependencies": [\ + ["@csstools/css-calc", "virtual:ed5b7465ba8cf0eb21975dec62bfcf6d291ea8fcead25822592225aae1675a11a9ab5730181ed5da294a62f7379a3e67d78ef9ef50d04ba4802b6770c14cecdd#npm:2.1.4"],\ + ["@csstools/css-parser-algorithms", "virtual:ed5b7465ba8cf0eb21975dec62bfcf6d291ea8fcead25822592225aae1675a11a9ab5730181ed5da294a62f7379a3e67d78ef9ef50d04ba4802b6770c14cecdd#npm:3.0.5"],\ + ["@csstools/css-tokenizer", "npm:3.0.4"],\ + ["@types/csstools__css-parser-algorithms", null],\ + ["@types/csstools__css-tokenizer", null]\ + ],\ + "packagePeers": [\ + "@csstools/css-parser-algorithms",\ + "@csstools/css-tokenizer",\ + "@types/csstools__css-parser-algorithms",\ + "@types/csstools__css-tokenizer"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@csstools/css-color-parser", [\ + ["npm:3.1.0", {\ + "packageLocation": "./.yarn/cache/@csstools-css-color-parser-npm-3.1.0-005f6b530f-0e0c670ad5.zip/node_modules/@csstools/css-color-parser/",\ + "packageDependencies": [\ + ["@csstools/css-color-parser", "npm:3.1.0"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:ed5b7465ba8cf0eb21975dec62bfcf6d291ea8fcead25822592225aae1675a11a9ab5730181ed5da294a62f7379a3e67d78ef9ef50d04ba4802b6770c14cecdd#npm:3.1.0", {\ + "packageLocation": "./.yarn/__virtual__/@csstools-css-color-parser-virtual-67160b3f38/0/cache/@csstools-css-color-parser-npm-3.1.0-005f6b530f-0e0c670ad5.zip/node_modules/@csstools/css-color-parser/",\ + "packageDependencies": [\ + ["@csstools/css-color-parser", "virtual:ed5b7465ba8cf0eb21975dec62bfcf6d291ea8fcead25822592225aae1675a11a9ab5730181ed5da294a62f7379a3e67d78ef9ef50d04ba4802b6770c14cecdd#npm:3.1.0"],\ + ["@csstools/color-helpers", "npm:5.1.0"],\ + ["@csstools/css-calc", "virtual:ed5b7465ba8cf0eb21975dec62bfcf6d291ea8fcead25822592225aae1675a11a9ab5730181ed5da294a62f7379a3e67d78ef9ef50d04ba4802b6770c14cecdd#npm:2.1.4"],\ + ["@csstools/css-parser-algorithms", "virtual:ed5b7465ba8cf0eb21975dec62bfcf6d291ea8fcead25822592225aae1675a11a9ab5730181ed5da294a62f7379a3e67d78ef9ef50d04ba4802b6770c14cecdd#npm:3.0.5"],\ + ["@csstools/css-tokenizer", "npm:3.0.4"],\ + ["@types/csstools__css-parser-algorithms", null],\ + ["@types/csstools__css-tokenizer", null]\ + ],\ + "packagePeers": [\ + "@csstools/css-parser-algorithms",\ + "@csstools/css-tokenizer",\ + "@types/csstools__css-parser-algorithms",\ + "@types/csstools__css-tokenizer"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@csstools/css-parser-algorithms", [\ + ["npm:3.0.5", {\ + "packageLocation": "./.yarn/cache/@csstools-css-parser-algorithms-npm-3.0.5-a0aa2fe05e-d9a1c888bd.zip/node_modules/@csstools/css-parser-algorithms/",\ + "packageDependencies": [\ + ["@csstools/css-parser-algorithms", "npm:3.0.5"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:ed5b7465ba8cf0eb21975dec62bfcf6d291ea8fcead25822592225aae1675a11a9ab5730181ed5da294a62f7379a3e67d78ef9ef50d04ba4802b6770c14cecdd#npm:3.0.5", {\ + "packageLocation": "./.yarn/__virtual__/@csstools-css-parser-algorithms-virtual-acabe76f5f/0/cache/@csstools-css-parser-algorithms-npm-3.0.5-a0aa2fe05e-d9a1c888bd.zip/node_modules/@csstools/css-parser-algorithms/",\ + "packageDependencies": [\ + ["@csstools/css-parser-algorithms", "virtual:ed5b7465ba8cf0eb21975dec62bfcf6d291ea8fcead25822592225aae1675a11a9ab5730181ed5da294a62f7379a3e67d78ef9ef50d04ba4802b6770c14cecdd#npm:3.0.5"],\ + ["@csstools/css-tokenizer", "npm:3.0.4"],\ + ["@types/csstools__css-tokenizer", null]\ + ],\ + "packagePeers": [\ + "@csstools/css-tokenizer",\ + "@types/csstools__css-tokenizer"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@csstools/css-tokenizer", [\ + ["npm:3.0.4", {\ + "packageLocation": "./.yarn/cache/@csstools-css-tokenizer-npm-3.0.4-342d48d326-3b589f8e99.zip/node_modules/@csstools/css-tokenizer/",\ + "packageDependencies": [\ + ["@csstools/css-tokenizer", "npm:3.0.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["@ctrl/tinycolor", [\ ["npm:3.6.1", {\ "packageLocation": "./.yarn/cache/@ctrl-tinycolor-npm-3.6.1-069c7f7e08-444d81612c.zip/node_modules/@ctrl/tinycolor/",\ @@ -9424,6 +9532,7 @@ const RAW_RUNTIME_STATE = ["framer-motion", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:11.2.10"],\ ["i18next", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:24.2.2"],\ ["jotai", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:2.8.3"],\ + ["jsdom", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:26.1.0"],\ ["jwt-decode", "npm:4.0.0"],\ ["lodash.debounce", "npm:4.0.8"],\ ["qrcode.react", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:3.1.0"],\ @@ -9473,6 +9582,13 @@ const RAW_RUNTIME_STATE = ["debug", "virtual:1ff4b5f90832ba0a9c93ba1223af226e44ba70c1126a3740d93562b97bc36544e896a5e95908196f7458713e6a6089a34bfc67362fc6df7fa093bd06c878be47#npm:4.3.4"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:7.1.4", {\ + "packageLocation": "./.yarn/cache/agent-base-npm-7.1.4-cb8b4604d5-c2c9ab7599.zip/node_modules/agent-base/",\ + "packageDependencies": [\ + ["agent-base", "npm:7.1.4"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["aggregate-error", [\ @@ -10995,6 +11111,17 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["cssstyle", [\ + ["npm:4.6.0", {\ + "packageLocation": "./.yarn/cache/cssstyle-npm-4.6.0-ef3d5f305b-71add1b0ff.zip/node_modules/cssstyle/",\ + "packageDependencies": [\ + ["cssstyle", "npm:4.6.0"],\ + ["@asamuzakjp/css-color", "npm:3.2.0"],\ + ["rrweb-cssom", "npm:0.8.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["csstype", [\ ["npm:3.1.3", {\ "packageLocation": "./.yarn/cache/csstype-npm-3.1.3-e9a1c85013-80c089d6f7.zip/node_modules/csstype/",\ @@ -11004,6 +11131,17 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["data-urls", [\ + ["npm:5.0.0", {\ + "packageLocation": "./.yarn/cache/data-urls-npm-5.0.0-4b58b89bfe-1b894d7d41.zip/node_modules/data-urls/",\ + "packageDependencies": [\ + ["data-urls", "npm:5.0.0"],\ + ["whatwg-mimetype", "npm:4.0.0"],\ + ["whatwg-url", "npm:14.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["date-fns", [\ ["npm:3.3.1", {\ "packageLocation": "./.yarn/cache/date-fns-npm-3.3.1-794b72f5e7-e04ff79244.zip/node_modules/date-fns/",\ @@ -11136,6 +11274,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["decimal.js", [\ + ["npm:10.6.0", {\ + "packageLocation": "./.yarn/cache/decimal.js-npm-10.6.0-a72c1b8a2f-07d69fbcc5.zip/node_modules/decimal.js/",\ + "packageDependencies": [\ + ["decimal.js", "npm:10.6.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["decode-named-character-reference", [\ ["npm:1.0.2", {\ "packageLocation": "./.yarn/cache/decode-named-character-reference-npm-1.0.2-db17a755fd-66a9fc5d9b.zip/node_modules/decode-named-character-reference/",\ @@ -11619,6 +11766,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["entities", [\ + ["npm:6.0.1", {\ + "packageLocation": "./.yarn/cache/entities-npm-6.0.1-84692dab43-ed836ddac5.zip/node_modules/entities/",\ + "packageDependencies": [\ + ["entities", "npm:6.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["env-paths", [\ ["npm:2.2.1", {\ "packageLocation": "./.yarn/cache/env-paths-npm-2.2.1-7c7577428c-285325677b.zip/node_modules/env-paths/",\ @@ -13445,6 +13601,16 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["html-encoding-sniffer", [\ + ["npm:4.0.0", {\ + "packageLocation": "./.yarn/cache/html-encoding-sniffer-npm-4.0.0-5f6627070d-523398055d.zip/node_modules/html-encoding-sniffer/",\ + "packageDependencies": [\ + ["html-encoding-sniffer", "npm:4.0.0"],\ + ["whatwg-encoding", "npm:3.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["html-parse-stringify", [\ ["npm:3.0.1", {\ "packageLocation": "./.yarn/cache/html-parse-stringify-npm-3.0.1-5762cd4b01-159292753d.zip/node_modules/html-parse-stringify/",\ @@ -13505,6 +13671,15 @@ const RAW_RUNTIME_STATE = ["debug", "virtual:1ff4b5f90832ba0a9c93ba1223af226e44ba70c1126a3740d93562b97bc36544e896a5e95908196f7458713e6a6089a34bfc67362fc6df7fa093bd06c878be47#npm:4.3.4"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:7.0.2", {\ + "packageLocation": "./.yarn/cache/http-proxy-agent-npm-7.0.2-643ed7cc33-4207b06a45.zip/node_modules/http-proxy-agent/",\ + "packageDependencies": [\ + ["http-proxy-agent", "npm:7.0.2"],\ + ["agent-base", "npm:7.1.0"],\ + ["debug", "virtual:1ff4b5f90832ba0a9c93ba1223af226e44ba70c1126a3740d93562b97bc36544e896a5e95908196f7458713e6a6089a34bfc67362fc6df7fa093bd06c878be47#npm:4.3.4"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["https-proxy-agent", [\ @@ -13534,6 +13709,15 @@ const RAW_RUNTIME_STATE = ["debug", "virtual:1ff4b5f90832ba0a9c93ba1223af226e44ba70c1126a3740d93562b97bc36544e896a5e95908196f7458713e6a6089a34bfc67362fc6df7fa093bd06c878be47#npm:4.3.4"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:7.0.6", {\ + "packageLocation": "./.yarn/cache/https-proxy-agent-npm-7.0.6-27a95c2690-f729219bc7.zip/node_modules/https-proxy-agent/",\ + "packageDependencies": [\ + ["https-proxy-agent", "npm:7.0.6"],\ + ["agent-base", "npm:7.1.4"],\ + ["debug", "virtual:1ff4b5f90832ba0a9c93ba1223af226e44ba70c1126a3740d93562b97bc36544e896a5e95908196f7458713e6a6089a34bfc67362fc6df7fa093bd06c878be47#npm:4.3.4"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["human-signals", [\ @@ -14067,6 +14251,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["is-potential-custom-element-name", [\ + ["npm:1.0.1", {\ + "packageLocation": "./.yarn/cache/is-potential-custom-element-name-npm-1.0.1-f352f606f8-b73e2f22bc.zip/node_modules/is-potential-custom-element-name/",\ + "packageDependencies": [\ + ["is-potential-custom-element-name", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["is-regex", [\ ["npm:1.1.4", {\ "packageLocation": "./.yarn/cache/is-regex-npm-1.1.4-cca193ef11-bb72aae604.zip/node_modules/is-regex/",\ @@ -14469,6 +14662,48 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["jsdom", [\ + ["npm:26.1.0", {\ + "packageLocation": "./.yarn/cache/jsdom-npm-26.1.0-3857255f02-5b14a5bc32.zip/node_modules/jsdom/",\ + "packageDependencies": [\ + ["jsdom", "npm:26.1.0"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:26.1.0", {\ + "packageLocation": "./.yarn/__virtual__/jsdom-virtual-c9bba951cb/0/cache/jsdom-npm-26.1.0-3857255f02-5b14a5bc32.zip/node_modules/jsdom/",\ + "packageDependencies": [\ + ["jsdom", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:26.1.0"],\ + ["@types/canvas", null],\ + ["canvas", null],\ + ["cssstyle", "npm:4.6.0"],\ + ["data-urls", "npm:5.0.0"],\ + ["decimal.js", "npm:10.6.0"],\ + ["html-encoding-sniffer", "npm:4.0.0"],\ + ["http-proxy-agent", "npm:7.0.2"],\ + ["https-proxy-agent", "npm:7.0.6"],\ + ["is-potential-custom-element-name", "npm:1.0.1"],\ + ["nwsapi", "npm:2.2.23"],\ + ["parse5", "npm:7.3.0"],\ + ["rrweb-cssom", "npm:0.8.0"],\ + ["saxes", "npm:6.0.0"],\ + ["symbol-tree", "npm:3.2.4"],\ + ["tough-cookie", "npm:5.1.2"],\ + ["w3c-xmlserializer", "npm:5.0.0"],\ + ["webidl-conversions", "npm:7.0.0"],\ + ["whatwg-encoding", "npm:3.1.1"],\ + ["whatwg-mimetype", "npm:4.0.0"],\ + ["whatwg-url", "npm:14.2.0"],\ + ["ws", "virtual:c9bba951cbe0fd558b01bda93a1fe2973b37ad4969d84fe59620375ce44d6b7b439cf261bf7ef68d149ad578f029969f223887153ac4e4053d1a4da5841e5222#npm:8.20.0"],\ + ["xml-name-validator", "npm:5.0.0"]\ + ],\ + "packagePeers": [\ + "@types/canvas",\ + "canvas"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["jsesc", [\ ["npm:0.5.0", {\ "packageLocation": "./.yarn/cache/jsesc-npm-0.5.0-6827074492-f93792440a.zip/node_modules/jsesc/",\ @@ -14871,6 +15106,13 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ + ["npm:10.4.3", {\ + "packageLocation": "./.yarn/cache/lru-cache-npm-10.4.3-30c10b861a-ebd04fbca9.zip/node_modules/lru-cache/",\ + "packageDependencies": [\ + ["lru-cache", "npm:10.4.3"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:5.1.1", {\ "packageLocation": "./.yarn/cache/lru-cache-npm-5.1.1-f475882a51-89b2ef2ef4.zip/node_modules/lru-cache/",\ "packageDependencies": [\ @@ -16058,6 +16300,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["nwsapi", [\ + ["npm:2.2.23", {\ + "packageLocation": "./.yarn/cache/nwsapi-npm-2.2.23-aa3710d724-e44bfc9246.zip/node_modules/nwsapi/",\ + "packageDependencies": [\ + ["nwsapi", "npm:2.2.23"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["nypm", [\ ["npm:0.3.6", {\ "packageLocation": "./.yarn/cache/nypm-npm-0.3.6-5527ee7f3b-addc0a0f2e.zip/node_modules/nypm/",\ @@ -16396,6 +16647,16 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["parse5", [\ + ["npm:7.3.0", {\ + "packageLocation": "./.yarn/cache/parse5-npm-7.3.0-b0410074a3-7fd2e4e247.zip/node_modules/parse5/",\ + "packageDependencies": [\ + ["parse5", "npm:7.3.0"],\ + ["entities", "npm:6.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["parseurl", [\ ["npm:1.3.3", {\ "packageLocation": "./.yarn/cache/parseurl-npm-1.3.3-1542397e00-90dd4760d6.zip/node_modules/parseurl/",\ @@ -19552,6 +19813,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["rrweb-cssom", [\ + ["npm:0.8.0", {\ + "packageLocation": "./.yarn/cache/rrweb-cssom-npm-0.8.0-0c92f2366d-56f2bfd567.zip/node_modules/rrweb-cssom/",\ + "packageDependencies": [\ + ["rrweb-cssom", "npm:0.8.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["rtl-css-js", [\ ["npm:1.16.1", {\ "packageLocation": "./.yarn/cache/rtl-css-js-npm-1.16.1-b3547849c7-4b81ef50e5.zip/node_modules/rtl-css-js/",\ @@ -19622,6 +19892,16 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["saxes", [\ + ["npm:6.0.0", {\ + "packageLocation": "./.yarn/cache/saxes-npm-6.0.0-31558949f5-3847b839f0.zip/node_modules/saxes/",\ + "packageDependencies": [\ + ["saxes", "npm:6.0.0"],\ + ["xmlchars", "npm:2.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["scheduler", [\ ["npm:0.17.0", {\ "packageLocation": "./.yarn/cache/scheduler-npm-0.17.0-5c42088cec-662a665a47.zip/node_modules/scheduler/",\ @@ -20567,6 +20847,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["symbol-tree", [\ + ["npm:3.2.4", {\ + "packageLocation": "./.yarn/cache/symbol-tree-npm-3.2.4-fe70cdb75b-dfbe201ae0.zip/node_modules/symbol-tree/",\ + "packageDependencies": [\ + ["symbol-tree", "npm:3.2.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["synchronous-promise", [\ ["npm:2.0.17", {\ "packageLocation": "./.yarn/cache/synchronous-promise-npm-2.0.17-949e3e408d-1babe643d8.zip/node_modules/synchronous-promise/",\ @@ -20806,6 +21095,25 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["tldts", [\ + ["npm:6.1.86", {\ + "packageLocation": "./.yarn/cache/tldts-npm-6.1.86-45627de9ca-27ae7526d9.zip/node_modules/tldts/",\ + "packageDependencies": [\ + ["tldts", "npm:6.1.86"],\ + ["tldts-core", "npm:6.1.86"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["tldts-core", [\ + ["npm:6.1.86", {\ + "packageLocation": "./.yarn/cache/tldts-core-npm-6.1.86-540def5eb4-8133c29375.zip/node_modules/tldts-core/",\ + "packageDependencies": [\ + ["tldts-core", "npm:6.1.86"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["tmpl", [\ ["npm:1.0.5", {\ "packageLocation": "./.yarn/cache/tmpl-npm-1.0.5-d399ba37e2-f935537799.zip/node_modules/tmpl/",\ @@ -20861,6 +21169,16 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["tough-cookie", [\ + ["npm:5.1.2", {\ + "packageLocation": "./.yarn/cache/tough-cookie-npm-5.1.2-bb11a20ec3-5f95023a47.zip/node_modules/tough-cookie/",\ + "packageDependencies": [\ + ["tough-cookie", "npm:5.1.2"],\ + ["tldts", "npm:6.1.86"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["tr46", [\ ["npm:0.0.3", {\ "packageLocation": "./.yarn/cache/tr46-npm-0.0.3-de53018915-047cb209a6.zip/node_modules/tr46/",\ @@ -20868,6 +21186,14 @@ const RAW_RUNTIME_STATE = ["tr46", "npm:0.0.3"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:5.1.1", {\ + "packageLocation": "./.yarn/cache/tr46-npm-5.1.1-88f3ca645b-ae270e194d.zip/node_modules/tr46/",\ + "packageDependencies": [\ + ["tr46", "npm:5.1.1"],\ + ["punycode", "npm:2.3.1"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["trim-lines", [\ @@ -21907,7 +22233,7 @@ const RAW_RUNTIME_STATE = ["debug", "virtual:84dcff71db8be9cbe950d0756a4f7772695095a485baf88f1cc98436fdd0ea49e9c6ac7f535ec4b7b26fd24d60bd4323cc6ed6d8629d5b2015f92d4613c7ffb6#npm:4.4.3"],\ ["expect-type", "npm:1.3.0"],\ ["happy-dom", null],\ - ["jsdom", null],\ + ["jsdom", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:26.1.0"],\ ["magic-string", "npm:0.30.21"],\ ["pathe", "npm:1.1.2"],\ ["std-env", "npm:3.10.0"],\ @@ -21953,6 +22279,16 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["w3c-xmlserializer", [\ + ["npm:5.0.0", {\ + "packageLocation": "./.yarn/cache/w3c-xmlserializer-npm-5.0.0-589edd7bff-8712774c1a.zip/node_modules/w3c-xmlserializer/",\ + "packageDependencies": [\ + ["w3c-xmlserializer", "npm:5.0.0"],\ + ["xml-name-validator", "npm:5.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["walker", [\ ["npm:1.0.8", {\ "packageLocation": "./.yarn/cache/walker-npm-1.0.8-b0a05b9478-a17e037bcc.zip/node_modules/walker/",\ @@ -22001,6 +22337,13 @@ const RAW_RUNTIME_STATE = ["webidl-conversions", "npm:3.0.1"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:7.0.0", {\ + "packageLocation": "./.yarn/cache/webidl-conversions-npm-7.0.0-e8c8e30c68-228d8cb6d2.zip/node_modules/webidl-conversions/",\ + "packageDependencies": [\ + ["webidl-conversions", "npm:7.0.0"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["webpack-sources", [\ @@ -22021,7 +22364,35 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["whatwg-encoding", [\ + ["npm:3.1.1", {\ + "packageLocation": "./.yarn/cache/whatwg-encoding-npm-3.1.1-7dfe21cf7d-273b5f441c.zip/node_modules/whatwg-encoding/",\ + "packageDependencies": [\ + ["whatwg-encoding", "npm:3.1.1"],\ + ["iconv-lite", "npm:0.6.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["whatwg-mimetype", [\ + ["npm:4.0.0", {\ + "packageLocation": "./.yarn/cache/whatwg-mimetype-npm-4.0.0-ebb293a688-a773cdc812.zip/node_modules/whatwg-mimetype/",\ + "packageDependencies": [\ + ["whatwg-mimetype", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["whatwg-url", [\ + ["npm:14.2.0", {\ + "packageLocation": "./.yarn/cache/whatwg-url-npm-14.2.0-67b670990c-f746fc2f4c.zip/node_modules/whatwg-url/",\ + "packageDependencies": [\ + ["whatwg-url", "npm:14.2.0"],\ + ["tr46", "npm:5.1.1"],\ + ["webidl-conversions", "npm:7.0.0"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:5.0.0", {\ "packageLocation": "./.yarn/cache/whatwg-url-npm-5.0.0-374fb45e60-1588bed84d.zip/node_modules/whatwg-url/",\ "packageDependencies": [\ @@ -22188,6 +22559,13 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ + ["npm:8.20.0", {\ + "packageLocation": "./.yarn/cache/ws-npm-8.20.0-b8684d1fe3-956ac5f117.zip/node_modules/ws/",\ + "packageDependencies": [\ + ["ws", "npm:8.20.0"]\ + ],\ + "linkType": "SOFT"\ + }],\ ["virtual:0c2ef15c4fb96e600a7765c97f9f2fe2428b6e6e6d199f974a4512d619d48603b40a3bbc9cc566d1f2111997770a0cf482e601990f90f050c0fad0d3f6694077#npm:6.2.2", {\ "packageLocation": "./.yarn/__virtual__/ws-virtual-fc9f73a998/0/cache/ws-npm-6.2.2-ca62a10fa0-d628a1e956.zip/node_modules/ws/",\ "packageDependencies": [\ @@ -22222,6 +22600,41 @@ const RAW_RUNTIME_STATE = "utf-8-validate"\ ],\ "linkType": "HARD"\ + }],\ + ["virtual:c9bba951cbe0fd558b01bda93a1fe2973b37ad4969d84fe59620375ce44d6b7b439cf261bf7ef68d149ad578f029969f223887153ac4e4053d1a4da5841e5222#npm:8.20.0", {\ + "packageLocation": "./.yarn/__virtual__/ws-virtual-37e951a5e8/0/cache/ws-npm-8.20.0-b8684d1fe3-956ac5f117.zip/node_modules/ws/",\ + "packageDependencies": [\ + ["ws", "virtual:c9bba951cbe0fd558b01bda93a1fe2973b37ad4969d84fe59620375ce44d6b7b439cf261bf7ef68d149ad578f029969f223887153ac4e4053d1a4da5841e5222#npm:8.20.0"],\ + ["@types/bufferutil", null],\ + ["@types/utf-8-validate", null],\ + ["bufferutil", null],\ + ["utf-8-validate", null]\ + ],\ + "packagePeers": [\ + "@types/bufferutil",\ + "@types/utf-8-validate",\ + "bufferutil",\ + "utf-8-validate"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["xml-name-validator", [\ + ["npm:5.0.0", {\ + "packageLocation": "./.yarn/cache/xml-name-validator-npm-5.0.0-0e0ec66944-3fcf44e7b7.zip/node_modules/xml-name-validator/",\ + "packageDependencies": [\ + ["xml-name-validator", "npm:5.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["xmlchars", [\ + ["npm:2.2.0", {\ + "packageLocation": "./.yarn/cache/xmlchars-npm-2.2.0-8b78f0f5e4-b64b535861.zip/node_modules/xmlchars/",\ + "packageDependencies": [\ + ["xmlchars", "npm:2.2.0"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["xtend", [\ diff --git a/apps/admin/package.json b/apps/admin/package.json index 046d5370..cda71fdd 100644 --- a/apps/admin/package.json +++ b/apps/admin/package.json @@ -61,6 +61,7 @@ "@types/react": "^18.2.43", "@types/react-dom": "^18.2.17", "@vitejs/plugin-react": "^4.2.1", + "jsdom": "^26.1.0", "typescript": "^5.2.2", "vite": "^5.0.8", "vitest": "^2.1.9" diff --git a/yarn.lock b/yarn.lock index d8e80a04..15557014 100644 --- a/yarn.lock +++ b/yarn.lock @@ -94,6 +94,19 @@ __metadata: languageName: node linkType: hard +"@asamuzakjp/css-color@npm:^3.2.0": + version: 3.2.0 + resolution: "@asamuzakjp/css-color@npm:3.2.0" + dependencies: + "@csstools/css-calc": "npm:^2.1.3" + "@csstools/css-color-parser": "npm:^3.0.9" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + lru-cache: "npm:^10.4.3" + checksum: 10c0/a4bf1c831751b1fae46b437e37e8a38c0b5bd58d23230157ae210bd1e905fe509b89b7c243e63d1522d852668a6292ed730a160e21342772b4e5b7b8ea14c092 + languageName: node + linkType: hard + "@aw-web-design/x-default-browser@npm:1.4.126": version: 1.4.126 resolution: "@aw-web-design/x-default-browser@npm:1.4.126" @@ -1835,6 +1848,52 @@ __metadata: languageName: node linkType: hard +"@csstools/color-helpers@npm:^5.1.0": + version: 5.1.0 + resolution: "@csstools/color-helpers@npm:5.1.0" + checksum: 10c0/b7f99d2e455cf1c9b41a67a5327d5d02888cd5c8802a68b1887dffef537d9d4bc66b3c10c1e62b40bbed638b6c1d60b85a232f904ed7b39809c4029cb36567db + languageName: node + linkType: hard + +"@csstools/css-calc@npm:^2.1.3, @csstools/css-calc@npm:^2.1.4": + version: 2.1.4 + resolution: "@csstools/css-calc@npm:2.1.4" + peerDependencies: + "@csstools/css-parser-algorithms": ^3.0.5 + "@csstools/css-tokenizer": ^3.0.4 + checksum: 10c0/42ce5793e55ec4d772083808a11e9fb2dfe36db3ec168713069a276b4c3882205b3507c4680224c28a5d35fe0bc2d308c77f8f2c39c7c09aad8747708eb8ddd8 + languageName: node + linkType: hard + +"@csstools/css-color-parser@npm:^3.0.9": + version: 3.1.0 + resolution: "@csstools/css-color-parser@npm:3.1.0" + dependencies: + "@csstools/color-helpers": "npm:^5.1.0" + "@csstools/css-calc": "npm:^2.1.4" + peerDependencies: + "@csstools/css-parser-algorithms": ^3.0.5 + "@csstools/css-tokenizer": ^3.0.4 + checksum: 10c0/0e0c670ad54ec8ec4d9b07568b80defd83b9482191f5e8ca84ab546b7be6db5d7cc2ba7ac9fae54488b129a4be235d6183d3aab4416fec5e89351f73af4222c5 + languageName: node + linkType: hard + +"@csstools/css-parser-algorithms@npm:^3.0.4": + version: 3.0.5 + resolution: "@csstools/css-parser-algorithms@npm:3.0.5" + peerDependencies: + "@csstools/css-tokenizer": ^3.0.4 + checksum: 10c0/d9a1c888bd43849ae3437ca39251d5c95d2c8fd6b5ccdb7c45491dfd2c1cbdc3075645e80901d120e4d2c1993db9a5b2d83793b779dbbabcfb132adb142eb7f7 + languageName: node + linkType: hard + +"@csstools/css-tokenizer@npm:^3.0.3": + version: 3.0.4 + resolution: "@csstools/css-tokenizer@npm:3.0.4" + checksum: 10c0/3b589f8e9942075a642213b389bab75a2d50d05d203727fcdac6827648a5572674caff07907eff3f9a2389d86a4ee47308fafe4f8588f4a77b7167c588d2559f + languageName: node + linkType: hard + "@ctrl/tinycolor@npm:^3.6.1": version: 3.6.1 resolution: "@ctrl/tinycolor@npm:3.6.1" @@ -6112,6 +6171,7 @@ __metadata: framer-motion: "npm:^11.2.10" i18next: "npm:^24.2.2" jotai: "npm:^2.8.3" + jsdom: "npm:^26.1.0" jwt-decode: "npm:^4.0.0" lodash.debounce: "npm:^4.0.8" qrcode.react: "npm:^3.1.0" @@ -6162,6 +6222,13 @@ __metadata: languageName: node linkType: hard +"agent-base@npm:^7.1.2": + version: 7.1.4 + resolution: "agent-base@npm:7.1.4" + checksum: 10c0/c2c9ab7599692d594b6a161559ada307b7a624fa4c7b03e3afdb5a5e31cd0e53269115b620fcab024c5ac6a6f37fa5eb2e004f076ad30f5f7e6b8b671f7b35fe + languageName: node + linkType: hard + "aggregate-error@npm:^3.0.0": version: 3.1.0 resolution: "aggregate-error@npm:3.1.0" @@ -7464,6 +7531,16 @@ __metadata: languageName: node linkType: hard +"cssstyle@npm:^4.2.1": + version: 4.6.0 + resolution: "cssstyle@npm:4.6.0" + dependencies: + "@asamuzakjp/css-color": "npm:^3.2.0" + rrweb-cssom: "npm:^0.8.0" + checksum: 10c0/71add1b0ffafa1bedbef6855db6189b9523d3320e015a0bf3fbd504760efb9a81e1f1a225228d5fa892ee58e56d06994ca372e7f4e461cda7c4c9985fe075f65 + languageName: node + linkType: hard + "csstype@npm:^3.0.2, csstype@npm:^3.1.2, csstype@npm:^3.1.3": version: 3.1.3 resolution: "csstype@npm:3.1.3" @@ -7471,6 +7548,16 @@ __metadata: languageName: node linkType: hard +"data-urls@npm:^5.0.0": + version: 5.0.0 + resolution: "data-urls@npm:5.0.0" + dependencies: + whatwg-mimetype: "npm:^4.0.0" + whatwg-url: "npm:^14.0.0" + checksum: 10c0/1b894d7d41c861f3a4ed2ae9b1c3f0909d4575ada02e36d3d3bc584bdd84278e20709070c79c3b3bff7ac98598cb191eb3e86a89a79ea4ee1ef360e1694f92ad + languageName: node + linkType: hard + "date-fns@npm:^3.3.1": version: 3.3.1 resolution: "date-fns@npm:3.3.1" @@ -7546,6 +7633,13 @@ __metadata: languageName: node linkType: hard +"decimal.js@npm:^10.5.0": + version: 10.6.0 + resolution: "decimal.js@npm:10.6.0" + checksum: 10c0/07d69fbcc54167a340d2d97de95f546f9ff1f69d2b45a02fd7a5292412df3cd9eb7e23065e532a318f5474a2e1bccf8392fdf0443ef467f97f3bf8cb0477e5aa + languageName: node + linkType: hard + "decode-named-character-reference@npm:^1.0.0": version: 1.0.2 resolution: "decode-named-character-reference@npm:1.0.2" @@ -7960,6 +8054,13 @@ __metadata: languageName: node linkType: hard +"entities@npm:^6.0.0": + version: 6.0.1 + resolution: "entities@npm:6.0.1" + checksum: 10c0/ed836ddac5acb34341094eb495185d527bd70e8632b6c0d59548cbfa23defdbae70b96f9a405c82904efa421230b5b3fd2283752447d737beffd3f3e6ee74414 + languageName: node + linkType: hard + "env-paths@npm:^2.2.0": version: 2.2.1 resolution: "env-paths@npm:2.2.1" @@ -9647,6 +9748,15 @@ __metadata: languageName: node linkType: hard +"html-encoding-sniffer@npm:^4.0.0": + version: 4.0.0 + resolution: "html-encoding-sniffer@npm:4.0.0" + dependencies: + whatwg-encoding: "npm:^3.1.1" + checksum: 10c0/523398055dc61ac9b34718a719cb4aa691e4166f29187e211e1607de63dc25ac7af52ca7c9aead0c4b3c0415ffecb17326396e1202e2e86ff4bca4c0ee4c6140 + languageName: node + linkType: hard + "html-parse-stringify@npm:^3.0.1": version: 3.0.1 resolution: "html-parse-stringify@npm:3.0.1" @@ -9700,6 +9810,16 @@ __metadata: languageName: node linkType: hard +"http-proxy-agent@npm:^7.0.2": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: "npm:^7.1.0" + debug: "npm:^4.3.4" + checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 + languageName: node + linkType: hard + "https-proxy-agent@npm:^4.0.0": version: 4.0.0 resolution: "https-proxy-agent@npm:4.0.0" @@ -9730,6 +9850,16 @@ __metadata: languageName: node linkType: hard +"https-proxy-agent@npm:^7.0.6": + version: 7.0.6 + resolution: "https-proxy-agent@npm:7.0.6" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:4" + checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac + languageName: node + linkType: hard + "human-signals@npm:^2.1.0": version: 2.1.0 resolution: "human-signals@npm:2.1.0" @@ -9781,7 +9911,7 @@ __metadata: languageName: node linkType: hard -"iconv-lite@npm:^0.6.2": +"iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2": version: 0.6.3 resolution: "iconv-lite@npm:0.6.3" dependencies: @@ -10174,6 +10304,13 @@ __metadata: languageName: node linkType: hard +"is-potential-custom-element-name@npm:^1.0.1": + version: 1.0.1 + resolution: "is-potential-custom-element-name@npm:1.0.1" + checksum: 10c0/b73e2f22bc863b0939941d369486d308b43d7aef1f9439705e3582bfccaa4516406865e32c968a35f97a99396dac84e2624e67b0a16b0a15086a785e16ce7db9 + languageName: node + linkType: hard + "is-regex@npm:^1.1.4": version: 1.1.4 resolution: "is-regex@npm:1.1.4" @@ -10534,6 +10671,39 @@ __metadata: languageName: node linkType: hard +"jsdom@npm:^26.1.0": + version: 26.1.0 + resolution: "jsdom@npm:26.1.0" + dependencies: + cssstyle: "npm:^4.2.1" + data-urls: "npm:^5.0.0" + decimal.js: "npm:^10.5.0" + html-encoding-sniffer: "npm:^4.0.0" + http-proxy-agent: "npm:^7.0.2" + https-proxy-agent: "npm:^7.0.6" + is-potential-custom-element-name: "npm:^1.0.1" + nwsapi: "npm:^2.2.16" + parse5: "npm:^7.2.1" + rrweb-cssom: "npm:^0.8.0" + saxes: "npm:^6.0.0" + symbol-tree: "npm:^3.2.4" + tough-cookie: "npm:^5.1.1" + w3c-xmlserializer: "npm:^5.0.0" + webidl-conversions: "npm:^7.0.0" + whatwg-encoding: "npm:^3.1.1" + whatwg-mimetype: "npm:^4.0.0" + whatwg-url: "npm:^14.1.1" + ws: "npm:^8.18.0" + xml-name-validator: "npm:^5.0.0" + peerDependencies: + canvas: ^3.0.0 + peerDependenciesMeta: + canvas: + optional: true + checksum: 10c0/5b14a5bc32ce077a06fb42d1ab95b1191afa5cbbce8859e3b96831c5143becbbcbf0511d4d4934e922d2901443ced2cdc3b734c1cf30b5f73b3e067ce457d0f4 + languageName: node + linkType: hard + "jsesc@npm:^2.5.1": version: 2.5.2 resolution: "jsesc@npm:2.5.2" @@ -10883,6 +11053,13 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^10.4.3": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb + languageName: node + linkType: hard + "lru-cache@npm:^5.1.1": version: 5.1.1 resolution: "lru-cache@npm:5.1.1" @@ -11929,6 +12106,13 @@ __metadata: languageName: node linkType: hard +"nwsapi@npm:^2.2.16": + version: 2.2.23 + resolution: "nwsapi@npm:2.2.23" + checksum: 10c0/e44bfc9246baf659581206ed716d291a1905185247795fb8a302cb09315c943a31023b4ac4d026a5eaf32b2def51d77b3d0f9ebf4f3d35f70e105fcb6447c76e + languageName: node + linkType: hard + "nypm@npm:^0.3.3": version: 0.3.6 resolution: "nypm@npm:0.3.6" @@ -12237,6 +12421,15 @@ __metadata: languageName: node linkType: hard +"parse5@npm:^7.2.1": + version: 7.3.0 + resolution: "parse5@npm:7.3.0" + dependencies: + entities: "npm:^6.0.0" + checksum: 10c0/7fd2e4e247e85241d6f2a464d0085eed599a26d7b0a5233790c49f53473232eb85350e8133344d9b3fd58b89339e7ad7270fe1f89d28abe50674ec97b87f80b5 + languageName: node + linkType: hard + "parseurl@npm:~1.3.3": version: 1.3.3 resolution: "parseurl@npm:1.3.3" @@ -12708,7 +12901,7 @@ __metadata: languageName: node linkType: hard -"punycode@npm:^2.1.0": +"punycode@npm:^2.1.0, punycode@npm:^2.3.1": version: 2.3.1 resolution: "punycode@npm:2.3.1" checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 @@ -14403,6 +14596,13 @@ __metadata: languageName: node linkType: hard +"rrweb-cssom@npm:^0.8.0": + version: 0.8.0 + resolution: "rrweb-cssom@npm:0.8.0" + checksum: 10c0/56f2bfd56733adb92c0b56e274c43f864b8dd48784d6fe946ef5ff8d438234015e59ad837fc2ad54714b6421384141c1add4eb569e72054e350d1f8a50b8ac7b + languageName: node + linkType: hard + "rtl-css-js@npm:^1.16.1": version: 1.16.1 resolution: "rtl-css-js@npm:1.16.1" @@ -14465,6 +14665,15 @@ __metadata: languageName: node linkType: hard +"saxes@npm:^6.0.0": + version: 6.0.0 + resolution: "saxes@npm:6.0.0" + dependencies: + xmlchars: "npm:^2.2.0" + checksum: 10c0/3847b839f060ef3476eb8623d099aa502ad658f5c40fd60c105ebce86d244389b0d76fcae30f4d0c728d7705ceb2f7e9b34bb54717b6a7dbedaf5dad2d9a4b74 + languageName: node + linkType: hard + "scheduler@npm:^0.17.0": version: 0.17.0 resolution: "scheduler@npm:0.17.0" @@ -15299,6 +15508,13 @@ __metadata: languageName: node linkType: hard +"symbol-tree@npm:^3.2.4": + version: 3.2.4 + resolution: "symbol-tree@npm:3.2.4" + checksum: 10c0/dfbe201ae09ac6053d163578778c53aa860a784147ecf95705de0cd23f42c851e1be7889241495e95c37cabb058edb1052f141387bef68f705afc8f9dd358509 + languageName: node + linkType: hard + "synchronous-promise@npm:^2.0.15": version: 2.0.17 resolution: "synchronous-promise@npm:2.0.17" @@ -15505,6 +15721,24 @@ __metadata: languageName: node linkType: hard +"tldts-core@npm:^6.1.86": + version: 6.1.86 + resolution: "tldts-core@npm:6.1.86" + checksum: 10c0/8133c29375f3f99f88fce5f4d62f6ecb9532b106f31e5423b27c1eb1b6e711bd41875184a456819ceaed5c8b94f43911b1ad57e25c6eb86e1fc201228ff7e2af + languageName: node + linkType: hard + +"tldts@npm:^6.1.32": + version: 6.1.86 + resolution: "tldts@npm:6.1.86" + dependencies: + tldts-core: "npm:^6.1.86" + bin: + tldts: bin/cli.js + checksum: 10c0/27ae7526d9d78cb97b2de3f4d102e0b4321d1ccff0648a7bb0e039ed54acbce86bacdcd9cd3c14310e519b457854e7bafbef1f529f58a1e217a737ced63f0940 + languageName: node + linkType: hard + "tmpl@npm:1.0.5": version: 1.0.5 resolution: "tmpl@npm:1.0.5" @@ -15549,6 +15783,24 @@ __metadata: languageName: node linkType: hard +"tough-cookie@npm:^5.1.1": + version: 5.1.2 + resolution: "tough-cookie@npm:5.1.2" + dependencies: + tldts: "npm:^6.1.32" + checksum: 10c0/5f95023a47de0f30a902bba951664b359725597d8adeabc66a0b93a931c3af801e1e697dae4b8c21a012056c0ea88bd2bf4dfe66b2adcf8e2f42cd9796fe0626 + languageName: node + linkType: hard + +"tr46@npm:^5.1.0": + version: 5.1.1 + resolution: "tr46@npm:5.1.1" + dependencies: + punycode: "npm:^2.3.1" + checksum: 10c0/ae270e194d52ec67ebd695c1a42876e0f19b96e4aca2ab464ab1d9d17dc3acd3e18764f5034c93897db73421563be27c70c98359c4501136a497e46deda5d5ec + languageName: node + linkType: hard + "tr46@npm:~0.0.3": version: 0.0.3 resolution: "tr46@npm:0.0.3" @@ -16423,6 +16675,15 @@ __metadata: languageName: node linkType: hard +"w3c-xmlserializer@npm:^5.0.0": + version: 5.0.0 + resolution: "w3c-xmlserializer@npm:5.0.0" + dependencies: + xml-name-validator: "npm:^5.0.0" + checksum: 10c0/8712774c1aeb62dec22928bf1cdfd11426c2c9383a1a63f2bcae18db87ca574165a0fbe96b312b73652149167ac6c7f4cf5409f2eb101d9c805efe0e4bae798b + languageName: node + linkType: hard + "walker@npm:^1.0.8": version: 1.0.8 resolution: "walker@npm:1.0.8" @@ -16467,6 +16728,13 @@ __metadata: languageName: node linkType: hard +"webidl-conversions@npm:^7.0.0": + version: 7.0.0 + resolution: "webidl-conversions@npm:7.0.0" + checksum: 10c0/228d8cb6d270c23b0720cb2d95c579202db3aaf8f633b4e9dd94ec2000a04e7e6e43b76a94509cdb30479bd00ae253ab2371a2da9f81446cc313f89a4213a2c4 + languageName: node + linkType: hard + "webpack-sources@npm:^3.2.3": version: 3.2.3 resolution: "webpack-sources@npm:3.2.3" @@ -16481,6 +16749,32 @@ __metadata: languageName: node linkType: hard +"whatwg-encoding@npm:^3.1.1": + version: 3.1.1 + resolution: "whatwg-encoding@npm:3.1.1" + dependencies: + iconv-lite: "npm:0.6.3" + checksum: 10c0/273b5f441c2f7fda3368a496c3009edbaa5e43b71b09728f90425e7f487e5cef9eb2b846a31bd760dd8077739c26faf6b5ca43a5f24033172b003b72cf61a93e + languageName: node + linkType: hard + +"whatwg-mimetype@npm:^4.0.0": + version: 4.0.0 + resolution: "whatwg-mimetype@npm:4.0.0" + checksum: 10c0/a773cdc8126b514d790bdae7052e8bf242970cebd84af62fb2f35a33411e78e981f6c0ab9ed1fe6ec5071b09d5340ac9178e05b52d35a9c4bcf558ba1b1551df + languageName: node + linkType: hard + +"whatwg-url@npm:^14.0.0, whatwg-url@npm:^14.1.1": + version: 14.2.0 + resolution: "whatwg-url@npm:14.2.0" + dependencies: + tr46: "npm:^5.1.0" + webidl-conversions: "npm:^7.0.0" + checksum: 10c0/f746fc2f4c906607d09537de1227b13f9494c171141e5427ed7d2c0dd0b6a48b43d8e71abaae57d368d0c06b673fd8ec63550b32ad5ed64990c7b0266c2b4272 + languageName: node + linkType: hard + "whatwg-url@npm:^5.0.0": version: 5.0.0 resolution: "whatwg-url@npm:5.0.0" @@ -16638,6 +16932,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:^8.18.0": + version: 8.20.0 + resolution: "ws@npm:8.20.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/956ac5f11738c914089b65878b9223692ace77337ba55379ae68e1ecbeae9b47a0c6eb9403688f609999a58c80d83d99865fe0029b229d308b08c1ef93d4ea14 + languageName: node + linkType: hard + "ws@npm:^8.2.3": version: 8.16.0 resolution: "ws@npm:8.16.0" @@ -16653,6 +16962,20 @@ __metadata: languageName: node linkType: hard +"xml-name-validator@npm:^5.0.0": + version: 5.0.0 + resolution: "xml-name-validator@npm:5.0.0" + checksum: 10c0/3fcf44e7b73fb18be917fdd4ccffff3639373c7cb83f8fc35df6001fecba7942f1dbead29d91ebb8315e2f2ff786b508f0c9dc0215b6353f9983c6b7d62cb1f5 + languageName: node + linkType: hard + +"xmlchars@npm:^2.2.0": + version: 2.2.0 + resolution: "xmlchars@npm:2.2.0" + checksum: 10c0/b64b535861a6f310c5d9bfa10834cf49127c71922c297da9d4d1b45eeaae40bf9b4363275876088fbe2667e5db028d2cd4f8ee72eed9bede840a67d57dab7593 + languageName: node + linkType: hard + "xtend@npm:~4.0.1": version: 4.0.2 resolution: "xtend@npm:4.0.2" From 30237bb373e66a20a4744dcea017bd7ee9eacd8f Mon Sep 17 00:00:00 2001 From: hexdrinker Date: Sat, 2 May 2026 00:29:13 +0900 Subject: [PATCH 4/6] =?UTF-8?q?feat(admin):=20jsdom=EC=9D=84=20=EC=9D=B4?= =?UTF-8?q?=EC=9A=A9=ED=95=9C=20util=20=EC=9C=A0=EB=8B=9B=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/admin/src/utils/app.test.ts | 89 +++++++++++++++++++++++++ apps/admin/src/utils/boldText.test.ts | 21 ++++++ apps/admin/src/utils/highlight.test.tsx | 42 ++++++++++++ apps/admin/src/utils/link.test.ts | 53 +++++++++++++++ 4 files changed, 205 insertions(+) create mode 100644 apps/admin/src/utils/app.test.ts create mode 100644 apps/admin/src/utils/boldText.test.ts create mode 100644 apps/admin/src/utils/highlight.test.tsx create mode 100644 apps/admin/src/utils/link.test.ts diff --git a/apps/admin/src/utils/app.test.ts b/apps/admin/src/utils/app.test.ts new file mode 100644 index 00000000..a1a80469 --- /dev/null +++ b/apps/admin/src/utils/app.test.ts @@ -0,0 +1,89 @@ +// @vitest-environment jsdom +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; + +import { navigateToAppScheme } from './app'; + +const setUserAgent = (value: string) => { + Object.defineProperty(window.navigator, 'userAgent', { + value, + configurable: true, + }); +}; + +const setDocumentHidden = (value: boolean) => { + Object.defineProperty(document, 'hidden', { + value, + configurable: true, + }); +}; + +describe('navigateToAppScheme', () => { + beforeEach(() => { + vi.useFakeTimers(); + setDocumentHidden(false); + }); + + afterEach(() => { + vi.useRealTimers(); + document.body.innerHTML = ''; + }); + + it('iOS에서 blur 이벤트가 발생하면 true를 반환한다', async () => { + setUserAgent('Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)'); + + const promise = navigateToAppScheme('#boolti-app'); + window.dispatchEvent(new Event('blur')); + + await expect(promise).resolves.toBe(true); + }); + + it('iOS에서 앱 전환 이벤트가 없으면 timeout 후 false를 반환한다', async () => { + setUserAgent('Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)'); + + const promise = navigateToAppScheme('#boolti-app'); + vi.advanceTimersByTime(1500); + + await expect(promise).resolves.toBe(false); + }); + + it('iOS에서 visibilitychange로 hidden 상태가 되면 true를 반환한다', async () => { + setUserAgent('Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)'); + + const promise = navigateToAppScheme('#boolti-app'); + setDocumentHidden(true); + document.dispatchEvent(new Event('visibilitychange')); + + await expect(promise).resolves.toBe(true); + }); + + it('비 iOS에서 visibilitychange로 hidden 상태가 되면 true를 반환한다', async () => { + setUserAgent('Mozilla/5.0 (Linux; Android 14; Pixel 8)'); + + const promise = navigateToAppScheme('#boolti-app'); + setDocumentHidden(true); + document.dispatchEvent(new Event('visibilitychange')); + + await expect(promise).resolves.toBe(true); + }); + + it('비 iOS에서 timeout 시 false를 반환하고 생성한 iframe을 제거한다', async () => { + setUserAgent('Mozilla/5.0 (Linux; Android 14; Pixel 8)'); + + const promise = navigateToAppScheme('#boolti-app'); + expect(document.querySelectorAll('iframe').length).toBe(1); + + vi.advanceTimersByTime(1000); + + await expect(promise).resolves.toBe(false); + expect(document.querySelectorAll('iframe').length).toBe(0); + }); + + it('비 iOS에서 blur 이벤트가 발생하면 true를 반환한다', async () => { + setUserAgent('Mozilla/5.0 (Linux; Android 14; Pixel 8)'); + + const promise = navigateToAppScheme('#boolti-app'); + window.dispatchEvent(new Event('blur')); + + await expect(promise).resolves.toBe(true); + }); +}); diff --git a/apps/admin/src/utils/boldText.test.ts b/apps/admin/src/utils/boldText.test.ts new file mode 100644 index 00000000..5b7c67e8 --- /dev/null +++ b/apps/admin/src/utils/boldText.test.ts @@ -0,0 +1,21 @@ +import { describe, expect, it } from 'vitest'; + +import { boldText } from './boldText'; + +describe('boldText', () => { + it('키워드가 없으면 원본 문자열을 반환한다', () => { + expect(boldText('불티 관리자', '')).toBe('불티 관리자'); + }); + + it('키워드와 일치하는 텍스트를 strong 태그로 감싼다', () => { + expect(boldText('01012341234', '1234')).toBe('01012341234'); + }); + + it('정규식 특수문자가 포함된 키워드도 안전하게 처리한다', () => { + expect(boldText('a+b+c', 'a+b')).toBe('a+b+c'); + }); + + it('일치하는 키워드가 없으면 원본 문자열을 반환한다', () => { + expect(boldText('boolti admin', 'hello')).toBe('boolti admin'); + }); +}); diff --git a/apps/admin/src/utils/highlight.test.tsx b/apps/admin/src/utils/highlight.test.tsx new file mode 100644 index 00000000..baacd924 --- /dev/null +++ b/apps/admin/src/utils/highlight.test.tsx @@ -0,0 +1,42 @@ +import React from 'react'; +import { renderToStaticMarkup } from 'react-dom/server'; +import { describe, expect, it } from 'vitest'; + +import { highlightText } from './highlight'; + +const Highlight = ({ children }: { children: React.ReactNode }) => {children}; + +describe('highlightText', () => { + it('검색어가 비어 있으면 원본 텍스트를 반환한다', () => { + const result = highlightText('Boolti Admin', ' ', Highlight); + expect(result).toBe('Boolti Admin'); + }); + + it('대소문자를 무시하고 일치하는 부분을 하이라이트한다', () => { + const result = highlightText('Boolti Admin BOOLTI', 'boolti', Highlight); + const html = renderToStaticMarkup(<>{result}); + + expect(html).toBe('Boolti Admin BOOLTI'); + }); + + it('정규식 특수문자가 포함된 검색어를 안전하게 처리한다', () => { + const result = highlightText('a+b a+b', 'a+b', Highlight); + const html = renderToStaticMarkup(<>{result}); + + expect(html).toBe('a+b a+b'); + }); + + it('일치하는 검색어가 없으면 원본 텍스트를 유지한다', () => { + const result = highlightText('Boolti Admin', 'hello', Highlight); + const html = renderToStaticMarkup(<>{result}); + + expect(html).toBe('Boolti Admin'); + }); + + it('한글 검색어도 하이라이트한다', () => { + const result = highlightText('불티 관리자 불티', '불티', Highlight); + const html = renderToStaticMarkup(<>{result}); + + expect(html).toBe('불티 관리자 불티'); + }); +}); diff --git a/apps/admin/src/utils/link.test.ts b/apps/admin/src/utils/link.test.ts new file mode 100644 index 00000000..020ee9ef --- /dev/null +++ b/apps/admin/src/utils/link.test.ts @@ -0,0 +1,53 @@ +// @vitest-environment jsdom +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; + +vi.mock('~/constants/link', () => ({ + LINK: { + IOS_STORE: '#ios-store', + ANDROID_STORE: '#android-store', + }, +})); + +import { getStoreLink, openStoreLink } from './link'; + +const setUserAgent = (value: string) => { + Object.defineProperty(window.navigator, 'userAgent', { + value, + configurable: true, + }); +}; + +describe('getStoreLink', () => { + beforeEach(() => { + setUserAgent('Mozilla/5.0'); + }); + + afterEach(() => { + window.history.replaceState({}, '', '/'); + }); + + it('iOS userAgent면 iOS 스토어 링크를 반환한다', () => { + setUserAgent('Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)'); + expect(getStoreLink()).toBe('#ios-store'); + }); + + it('iOS가 아니면 안드로이드 스토어 링크를 반환한다', () => { + setUserAgent('Mozilla/5.0 (Linux; Android 14; Pixel 8)'); + expect(getStoreLink()).toBe('#android-store'); + }); + + it('userAgent 대소문자와 관계없이 iOS를 판별한다', () => { + setUserAgent('MOZILLA/5.0 (IPHONE; CPU IPHONE OS 17_0 LIKE MAC OS X)'); + expect(getStoreLink()).toBe('#ios-store'); + }); +}); + +describe('openStoreLink', () => { + it('현재 userAgent에 맞는 스토어 링크로 이동한다', () => { + setUserAgent('Mozilla/5.0 (iPad; CPU OS 17_0 like Mac OS X)'); + + openStoreLink(); + + expect(window.location.hash).toBe('#ios-store'); + }); +}); From 93d82357139b5f2a47350dc5bdc4441caa27dd4b Mon Sep 17 00:00:00 2001 From: hexdrinker Date: Sat, 2 May 2026 14:59:50 +0900 Subject: [PATCH 5/6] =?UTF-8?q?chore(admin):=20testing-library=20=ED=8C=A8?= =?UTF-8?q?=ED=82=A4=EC=A7=80=20=EC=84=A4=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pnp.cjs | 48 ++++++++++++++++++++++++++++++++++++ apps/admin/package.json | 2 ++ yarn.lock | 54 +++++++++++++++++++++++++++++++++++------ 3 files changed, 96 insertions(+), 8 deletions(-) diff --git a/.pnp.cjs b/.pnp.cjs index 5a8f5bf0..61824c15 100755 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -8115,6 +8115,21 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@testing-library/dom", [\ + ["npm:10.4.1", {\ + "packageLocation": "./.yarn/cache/@testing-library-dom-npm-10.4.1-928d6cd2a7-19ce048012.zip/node_modules/@testing-library/dom/",\ + "packageDependencies": [\ + ["@testing-library/dom", "npm:10.4.1"],\ + ["@babel/code-frame", "npm:7.23.5"],\ + ["@babel/runtime", "npm:7.23.8"],\ + ["@types/aria-query", "npm:5.0.4"],\ + ["aria-query", "npm:5.3.0"],\ + ["dom-accessibility-api", "npm:0.5.16"],\ + ["lz-string", "npm:1.5.0"],\ + ["picocolors", "npm:1.1.1"],\ + ["pretty-format", "npm:27.5.1"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:9.3.4", {\ "packageLocation": "./.yarn/cache/@testing-library-dom-npm-9.3.4-cfb609c4fc-147da340e8.zip/node_modules/@testing-library/dom/",\ "packageDependencies": [\ @@ -8171,6 +8186,37 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["@testing-library/react", [\ + ["npm:16.3.2", {\ + "packageLocation": "./.yarn/cache/@testing-library-react-npm-16.3.2-67b0b894c8-f9c7f0915e.zip/node_modules/@testing-library/react/",\ + "packageDependencies": [\ + ["@testing-library/react", "npm:16.3.2"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:16.3.2", {\ + "packageLocation": "./.yarn/__virtual__/@testing-library-react-virtual-bc3875b179/0/cache/@testing-library-react-npm-16.3.2-67b0b894c8-f9c7f0915e.zip/node_modules/@testing-library/react/",\ + "packageDependencies": [\ + ["@testing-library/react", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:16.3.2"],\ + ["@babel/runtime", "npm:7.23.8"],\ + ["@testing-library/dom", "npm:10.4.1"],\ + ["@types/react", "npm:18.2.48"],\ + ["@types/react-dom", "npm:18.2.18"],\ + ["@types/testing-library__dom", null],\ + ["react", "npm:18.2.0"],\ + ["react-dom", "virtual:de80dc576383b2386358abc0e9fe49c00e3397fe355a0337462b73ab3115c2e557eb85784ee0fe776394cc11dd020b4e84dbbd75acf72ee6d54415d82d21f5c5#npm:18.2.0"]\ + ],\ + "packagePeers": [\ + "@testing-library/dom",\ + "@types/react-dom",\ + "@types/react",\ + "@types/testing-library__dom",\ + "react-dom",\ + "react"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["@testing-library/user-event", [\ ["npm:14.3.0", {\ "packageLocation": "./.yarn/cache/@testing-library-user-event-npm-14.3.0-570c508fee-8a0e708709.zip/node_modules/@testing-library/user-event/",\ @@ -9522,6 +9568,8 @@ const RAW_RUNTIME_STATE = ["@emotion/styled", "virtual:85869d3eba7afdb6f94c001c9503942ddc4354e881daf63c24e9d58366ea9f25c6bac2df65ae0f5266c54cd36fe68f0d9568da3a1ab62446405c98ac852f4431#npm:11.11.0"],\ ["@react-pdf/renderer", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:3.4.4"],\ ["@tanstack/react-table", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:8.12.0"],\ + ["@testing-library/dom", "npm:10.4.1"],\ + ["@testing-library/react", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:16.3.2"],\ ["@types/js-cookie", "npm:3.0.6"],\ ["@types/lodash.debounce", "npm:4.0.9"],\ ["@types/navermaps", "npm:3.7.9"],\ diff --git a/apps/admin/package.json b/apps/admin/package.json index cda71fdd..3f038c3e 100644 --- a/apps/admin/package.json +++ b/apps/admin/package.json @@ -56,6 +56,8 @@ "@boolti/eslint-config": "*", "@boolti/typescript-config": "*", "@emotion/babel-plugin": "^11.11.0", + "@testing-library/dom": "^10.4.0", + "@testing-library/react": "^16.0.1", "@types/js-cookie": "^3.0.6", "@types/navermaps": "^3.7.9", "@types/react": "^18.2.43", diff --git a/yarn.lock b/yarn.lock index 15557014..503f5a62 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5105,6 +5105,22 @@ __metadata: languageName: node linkType: hard +"@testing-library/dom@npm:^10.4.0": + version: 10.4.1 + resolution: "@testing-library/dom@npm:10.4.1" + dependencies: + "@babel/code-frame": "npm:^7.10.4" + "@babel/runtime": "npm:^7.12.5" + "@types/aria-query": "npm:^5.0.1" + aria-query: "npm:5.3.0" + dom-accessibility-api: "npm:^0.5.9" + lz-string: "npm:^1.5.0" + picocolors: "npm:1.1.1" + pretty-format: "npm:^27.0.2" + checksum: 10c0/19ce048012d395ad0468b0dbcc4d0911f6f9e39464d7a8464a587b29707eed5482000dad728f5acc4ed314d2f4d54f34982999a114d2404f36d048278db815b1 + languageName: node + linkType: hard + "@testing-library/dom@npm:^9.3.1": version: 9.3.4 resolution: "@testing-library/dom@npm:9.3.4" @@ -5154,6 +5170,26 @@ __metadata: languageName: node linkType: hard +"@testing-library/react@npm:^16.0.1": + version: 16.3.2 + resolution: "@testing-library/react@npm:16.3.2" + dependencies: + "@babel/runtime": "npm:^7.12.5" + peerDependencies: + "@testing-library/dom": ^10.0.0 + "@types/react": ^18.0.0 || ^19.0.0 + "@types/react-dom": ^18.0.0 || ^19.0.0 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 10c0/f9c7f0915e1b5f7b750e6c7d8b51f091b8ae7ea99bacb761d7b8505ba25de9cfcb749a0f779f1650fb268b499dd79165dc7e1ee0b8b4cb63430d3ddc81ffe044 + languageName: node + linkType: hard + "@testing-library/user-event@npm:14.3.0": version: 14.3.0 resolution: "@testing-library/user-event@npm:14.3.0" @@ -6161,6 +6197,8 @@ __metadata: "@emotion/styled": "npm:^11.11.0" "@react-pdf/renderer": "npm:^3.4.4" "@tanstack/react-table": "npm:^8.12.0" + "@testing-library/dom": "npm:^10.4.0" + "@testing-library/react": "npm:^16.0.1" "@types/js-cookie": "npm:^3.0.6" "@types/lodash.debounce": "npm:^4.0.9" "@types/navermaps": "npm:^3.7.9" @@ -6424,7 +6462,7 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:^5.0.0": +"aria-query@npm:5.3.0, aria-query@npm:^5.0.0": version: 5.3.0 resolution: "aria-query@npm:5.3.0" dependencies: @@ -12564,6 +12602,13 @@ __metadata: languageName: node linkType: hard +"picocolors@npm:1.1.1, picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 + languageName: node + linkType: hard + "picocolors@npm:^1.0.0": version: 1.0.0 resolution: "picocolors@npm:1.0.0" @@ -12571,13 +12616,6 @@ __metadata: languageName: node linkType: hard -"picocolors@npm:^1.1.1": - version: 1.1.1 - resolution: "picocolors@npm:1.1.1" - checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 - languageName: node - linkType: hard - "picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.0, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" From 6055f50f10a460d3e4861db972cbc125848b60dd Mon Sep 17 00:00:00 2001 From: hexdrinker Date: Sat, 2 May 2026 15:17:11 +0900 Subject: [PATCH 6/6] =?UTF-8?q?feat(admin):=20=EC=9C=A0=ED=8B=B8=20?= =?UTF-8?q?=ED=95=A8=EC=88=98=20=EC=82=AC=EC=9A=A9=EC=B2=98=EC=9D=98=20?= =?UTF-8?q?=ED=86=B5=ED=95=A9=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EnteranceTable.integration.test.tsx | 65 ++++++++++++++ .../MobileCardList.integration.test.tsx | 59 +++++++++++++ .../ReservationTable.integration.test.tsx | 86 +++++++++++++++++++ .../AppStoreBridge.integration.test.tsx | 67 +++++++++++++++ apps/admin/src/utils/vConsole.test.ts | 51 +++++++++++ 5 files changed, 328 insertions(+) create mode 100644 apps/admin/src/components/EnteranceTable/EnteranceTable.integration.test.tsx create mode 100644 apps/admin/src/components/MobileCardList/MobileCardList.integration.test.tsx create mode 100644 apps/admin/src/components/ReservationTable/ReservationTable.integration.test.tsx create mode 100644 apps/admin/src/pages/AppStoreBridge/AppStoreBridge.integration.test.tsx create mode 100644 apps/admin/src/utils/vConsole.test.ts diff --git a/apps/admin/src/components/EnteranceTable/EnteranceTable.integration.test.tsx b/apps/admin/src/components/EnteranceTable/EnteranceTable.integration.test.tsx new file mode 100644 index 00000000..f66ad08e --- /dev/null +++ b/apps/admin/src/components/EnteranceTable/EnteranceTable.integration.test.tsx @@ -0,0 +1,65 @@ +// @vitest-environment jsdom +// 통합 테스트 목적: +// 1) EnteranceTable에서 연락처가 formatPhoneNumber 결과로 렌더링되는지 검증 +// 2) 검색어가 boldText를 통해 하이라이트로 렌더링되는지 검증 +import React from 'react'; +import { render } from '@testing-library/react'; +import { describe, expect, it, vi } from 'vitest'; + +import EnteranceTable from './index'; + +type EnteranceRow = React.ComponentProps['data'][number]; + +vi.mock('@boolti/ui', () => ({ + Button: (props: React.ButtonHTMLAttributes) => ( +