From a8237521dd10d8ca9b35ade961004bbdc855ae09 Mon Sep 17 00:00:00 2001 From: Artm2210 Date: Sat, 23 May 2026 21:20:41 +0300 Subject: [PATCH 1/4] =?UTF-8?q?=D0=9D=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BB?= =?UTF-8?q?=20rpgsaga?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rpgsaga/.pnp.cjs | 11260 +++++++++++++++++++++++++ rpgsaga/.pnp.loader.mjs | 2126 +++++ rpgsaga/.yarn/install-state.gz | Bin 0 -> 250685 bytes rpgsaga/src/factories/HeroFactory.ts | 47 + rpgsaga/src/game/Game.ts | 116 + rpgsaga/src/index.ts | 28 +- rpgsaga/src/models/Archer.ts | 51 + rpgsaga/src/models/Hero.ts | 75 + rpgsaga/src/models/Knight.ts | 24 + rpgsaga/src/models/Mage.ts | 38 + rpgsaga/src/types/types.ts | 12 + rpgsaga/src/utils/Logger.ts | 16 + rpgsaga/tests/Game.test.ts | 79 + rpgsaga/tests/sum.test.ts | 15 - rpgsaga/yarn.lock | 2993 +++++++ 15 files changed, 16850 insertions(+), 30 deletions(-) create mode 100644 rpgsaga/.pnp.cjs create mode 100644 rpgsaga/.pnp.loader.mjs create mode 100644 rpgsaga/.yarn/install-state.gz create mode 100644 rpgsaga/src/factories/HeroFactory.ts create mode 100644 rpgsaga/src/game/Game.ts create mode 100644 rpgsaga/src/models/Archer.ts create mode 100644 rpgsaga/src/models/Hero.ts create mode 100644 rpgsaga/src/models/Knight.ts create mode 100644 rpgsaga/src/models/Mage.ts create mode 100644 rpgsaga/src/types/types.ts create mode 100644 rpgsaga/src/utils/Logger.ts create mode 100644 rpgsaga/tests/Game.test.ts delete mode 100644 rpgsaga/tests/sum.test.ts create mode 100644 rpgsaga/yarn.lock diff --git a/rpgsaga/.pnp.cjs b/rpgsaga/.pnp.cjs new file mode 100644 index 0000000..ca05d2b --- /dev/null +++ b/rpgsaga/.pnp.cjs @@ -0,0 +1,11260 @@ +#!/usr/bin/env node +/* eslint-disable */ +// @ts-nocheck +"use strict"; + +const RAW_RUNTIME_STATE = +'{\ + "__info": [\ + "This file is automatically generated. Do not touch it, or risk",\ + "your modifications being lost."\ + ],\ + "dependencyTreeRoots": [\ + {\ + "name": "rpgsaga",\ + "reference": "workspace:."\ + }\ + ],\ + "enableTopLevelFallback": true,\ + "ignorePatternData": "(^(?:\\\\.yarn\\\\/sdks(?:\\\\/(?!\\\\.{1,2}(?:\\\\/|$))(?:(?:(?!(?:^|\\\\/)\\\\.{1,2}(?:\\\\/|$)).)*?)|$))$)",\ + "pnpZipBackend": "libzip",\ + "fallbackExclusionList": [\ + ["rpgsaga", ["workspace:."]]\ + ],\ + "fallbackPool": [\ + ],\ + "packageRegistryData": [\ + [null, [\ + [null, {\ + "packageLocation": "./",\ + "packageDependencies": [\ + ["@eslint/js", "npm:9.39.4"],\ + ["@types/node", "npm:22.19.19"],\ + ["eslint", "virtual:fb40b28bf5dd657a89e2a490e6cb230984558896db8ba52f5d3d2b23720eb08f5628820d022e92dfac9e2146d57f850a209b45e09bf2802fb7fa55ce7d579121#npm:9.39.4"],\ + ["eslint-config-prettier", "virtual:fb40b28bf5dd657a89e2a490e6cb230984558896db8ba52f5d3d2b23720eb08f5628820d022e92dfac9e2146d57f850a209b45e09bf2802fb7fa55ce7d579121#npm:10.1.8"],\ + ["eslint-plugin-prettier", "virtual:fb40b28bf5dd657a89e2a490e6cb230984558896db8ba52f5d3d2b23720eb08f5628820d022e92dfac9e2146d57f850a209b45e09bf2802fb7fa55ce7d579121#npm:5.5.5"],\ + ["husky", "npm:9.1.7"],\ + ["lint-staged", "npm:15.5.2"],\ + ["prettier", "npm:3.8.3"],\ + ["rpgsaga", "workspace:."],\ + ["tsx", "npm:4.22.3"],\ + ["typescript", "patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5"],\ + ["typescript-eslint", "virtual:fb40b28bf5dd657a89e2a490e6cb230984558896db8ba52f5d3d2b23720eb08f5628820d022e92dfac9e2146d57f850a209b45e09bf2802fb7fa55ce7d579121#npm:8.59.4"],\ + ["vitest", "virtual:fb40b28bf5dd657a89e2a490e6cb230984558896db8ba52f5d3d2b23720eb08f5628820d022e92dfac9e2146d57f850a209b45e09bf2802fb7fa55ce7d579121#npm:3.2.4"]\ + ],\ + "linkType": "SOFT"\ + }]\ + ]],\ + ["@esbuild/aix-ppc64", [\ + ["npm:0.27.7", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-aix-ppc64-npm-0.27.7-772b4c7734/node_modules/@esbuild/aix-ppc64/",\ + "packageDependencies": [\ + ["@esbuild/aix-ppc64", "npm:0.27.7"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:0.28.0", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-aix-ppc64-npm-0.28.0-f6acc91844/node_modules/@esbuild/aix-ppc64/",\ + "packageDependencies": [\ + ["@esbuild/aix-ppc64", "npm:0.28.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/android-arm", [\ + ["npm:0.27.7", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-android-arm-npm-0.27.7-429fa41d7b/node_modules/@esbuild/android-arm/",\ + "packageDependencies": [\ + ["@esbuild/android-arm", "npm:0.27.7"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:0.28.0", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-android-arm-npm-0.28.0-ad57e515c6/node_modules/@esbuild/android-arm/",\ + "packageDependencies": [\ + ["@esbuild/android-arm", "npm:0.28.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/android-arm64", [\ + ["npm:0.27.7", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-android-arm64-npm-0.27.7-07c052612f/node_modules/@esbuild/android-arm64/",\ + "packageDependencies": [\ + ["@esbuild/android-arm64", "npm:0.27.7"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:0.28.0", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-android-arm64-npm-0.28.0-6d91cc5aac/node_modules/@esbuild/android-arm64/",\ + "packageDependencies": [\ + ["@esbuild/android-arm64", "npm:0.28.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/android-x64", [\ + ["npm:0.27.7", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-android-x64-npm-0.27.7-7a2378f303/node_modules/@esbuild/android-x64/",\ + "packageDependencies": [\ + ["@esbuild/android-x64", "npm:0.27.7"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:0.28.0", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-android-x64-npm-0.28.0-660b77d2b6/node_modules/@esbuild/android-x64/",\ + "packageDependencies": [\ + ["@esbuild/android-x64", "npm:0.28.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/darwin-arm64", [\ + ["npm:0.27.7", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-darwin-arm64-npm-0.27.7-a0319000e7/node_modules/@esbuild/darwin-arm64/",\ + "packageDependencies": [\ + ["@esbuild/darwin-arm64", "npm:0.27.7"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:0.28.0", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-darwin-arm64-npm-0.28.0-5b2f673123/node_modules/@esbuild/darwin-arm64/",\ + "packageDependencies": [\ + ["@esbuild/darwin-arm64", "npm:0.28.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/darwin-x64", [\ + ["npm:0.27.7", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-darwin-x64-npm-0.27.7-2966d80d22/node_modules/@esbuild/darwin-x64/",\ + "packageDependencies": [\ + ["@esbuild/darwin-x64", "npm:0.27.7"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:0.28.0", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-darwin-x64-npm-0.28.0-8f8f986b3e/node_modules/@esbuild/darwin-x64/",\ + "packageDependencies": [\ + ["@esbuild/darwin-x64", "npm:0.28.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/freebsd-arm64", [\ + ["npm:0.27.7", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-freebsd-arm64-npm-0.27.7-a93faacd83/node_modules/@esbuild/freebsd-arm64/",\ + "packageDependencies": [\ + ["@esbuild/freebsd-arm64", "npm:0.27.7"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:0.28.0", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-freebsd-arm64-npm-0.28.0-a6ff95e0e1/node_modules/@esbuild/freebsd-arm64/",\ + "packageDependencies": [\ + ["@esbuild/freebsd-arm64", "npm:0.28.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/freebsd-x64", [\ + ["npm:0.27.7", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-freebsd-x64-npm-0.27.7-8e5cda0dbb/node_modules/@esbuild/freebsd-x64/",\ + "packageDependencies": [\ + ["@esbuild/freebsd-x64", "npm:0.27.7"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:0.28.0", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-freebsd-x64-npm-0.28.0-0c54f30254/node_modules/@esbuild/freebsd-x64/",\ + "packageDependencies": [\ + ["@esbuild/freebsd-x64", "npm:0.28.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/linux-arm", [\ + ["npm:0.27.7", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-arm-npm-0.27.7-c957dca1fe/node_modules/@esbuild/linux-arm/",\ + "packageDependencies": [\ + ["@esbuild/linux-arm", "npm:0.27.7"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:0.28.0", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-arm-npm-0.28.0-033d644548/node_modules/@esbuild/linux-arm/",\ + "packageDependencies": [\ + ["@esbuild/linux-arm", "npm:0.28.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/linux-arm64", [\ + ["npm:0.27.7", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-arm64-npm-0.27.7-ed035ebcb5/node_modules/@esbuild/linux-arm64/",\ + "packageDependencies": [\ + ["@esbuild/linux-arm64", "npm:0.27.7"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:0.28.0", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-arm64-npm-0.28.0-4042417272/node_modules/@esbuild/linux-arm64/",\ + "packageDependencies": [\ + ["@esbuild/linux-arm64", "npm:0.28.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/linux-ia32", [\ + ["npm:0.27.7", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-ia32-npm-0.27.7-3962a363f8/node_modules/@esbuild/linux-ia32/",\ + "packageDependencies": [\ + ["@esbuild/linux-ia32", "npm:0.27.7"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:0.28.0", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-ia32-npm-0.28.0-29e62efd53/node_modules/@esbuild/linux-ia32/",\ + "packageDependencies": [\ + ["@esbuild/linux-ia32", "npm:0.28.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/linux-loong64", [\ + ["npm:0.27.7", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-loong64-npm-0.27.7-52cfe4bbe3/node_modules/@esbuild/linux-loong64/",\ + "packageDependencies": [\ + ["@esbuild/linux-loong64", "npm:0.27.7"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:0.28.0", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-loong64-npm-0.28.0-0a218ff526/node_modules/@esbuild/linux-loong64/",\ + "packageDependencies": [\ + ["@esbuild/linux-loong64", "npm:0.28.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/linux-mips64el", [\ + ["npm:0.27.7", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-mips64el-npm-0.27.7-1c5fd336b5/node_modules/@esbuild/linux-mips64el/",\ + "packageDependencies": [\ + ["@esbuild/linux-mips64el", "npm:0.27.7"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:0.28.0", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-mips64el-npm-0.28.0-209ac1f0eb/node_modules/@esbuild/linux-mips64el/",\ + "packageDependencies": [\ + ["@esbuild/linux-mips64el", "npm:0.28.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/linux-ppc64", [\ + ["npm:0.27.7", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-ppc64-npm-0.27.7-61f7028345/node_modules/@esbuild/linux-ppc64/",\ + "packageDependencies": [\ + ["@esbuild/linux-ppc64", "npm:0.27.7"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:0.28.0", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-ppc64-npm-0.28.0-52e8165024/node_modules/@esbuild/linux-ppc64/",\ + "packageDependencies": [\ + ["@esbuild/linux-ppc64", "npm:0.28.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/linux-riscv64", [\ + ["npm:0.27.7", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-riscv64-npm-0.27.7-c1a96aac7e/node_modules/@esbuild/linux-riscv64/",\ + "packageDependencies": [\ + ["@esbuild/linux-riscv64", "npm:0.27.7"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:0.28.0", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-riscv64-npm-0.28.0-5c87eb4e54/node_modules/@esbuild/linux-riscv64/",\ + "packageDependencies": [\ + ["@esbuild/linux-riscv64", "npm:0.28.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/linux-s390x", [\ + ["npm:0.27.7", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-s390x-npm-0.27.7-f5831733de/node_modules/@esbuild/linux-s390x/",\ + "packageDependencies": [\ + ["@esbuild/linux-s390x", "npm:0.27.7"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:0.28.0", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-s390x-npm-0.28.0-2987061487/node_modules/@esbuild/linux-s390x/",\ + "packageDependencies": [\ + ["@esbuild/linux-s390x", "npm:0.28.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/linux-x64", [\ + ["npm:0.27.7", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-x64-npm-0.27.7-565545a421/node_modules/@esbuild/linux-x64/",\ + "packageDependencies": [\ + ["@esbuild/linux-x64", "npm:0.27.7"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:0.28.0", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-x64-npm-0.28.0-b9b390819a/node_modules/@esbuild/linux-x64/",\ + "packageDependencies": [\ + ["@esbuild/linux-x64", "npm:0.28.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/netbsd-arm64", [\ + ["npm:0.27.7", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-netbsd-arm64-npm-0.27.7-558ef9c574/node_modules/@esbuild/netbsd-arm64/",\ + "packageDependencies": [\ + ["@esbuild/netbsd-arm64", "npm:0.27.7"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:0.28.0", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-netbsd-arm64-npm-0.28.0-35029917ba/node_modules/@esbuild/netbsd-arm64/",\ + "packageDependencies": [\ + ["@esbuild/netbsd-arm64", "npm:0.28.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/netbsd-x64", [\ + ["npm:0.27.7", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-netbsd-x64-npm-0.27.7-4c7f4037fd/node_modules/@esbuild/netbsd-x64/",\ + "packageDependencies": [\ + ["@esbuild/netbsd-x64", "npm:0.27.7"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:0.28.0", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-netbsd-x64-npm-0.28.0-28061fb933/node_modules/@esbuild/netbsd-x64/",\ + "packageDependencies": [\ + ["@esbuild/netbsd-x64", "npm:0.28.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/openbsd-arm64", [\ + ["npm:0.27.7", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-openbsd-arm64-npm-0.27.7-3abf23c14d/node_modules/@esbuild/openbsd-arm64/",\ + "packageDependencies": [\ + ["@esbuild/openbsd-arm64", "npm:0.27.7"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:0.28.0", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-openbsd-arm64-npm-0.28.0-1c04ad499a/node_modules/@esbuild/openbsd-arm64/",\ + "packageDependencies": [\ + ["@esbuild/openbsd-arm64", "npm:0.28.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/openbsd-x64", [\ + ["npm:0.27.7", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-openbsd-x64-npm-0.27.7-29291c7ad9/node_modules/@esbuild/openbsd-x64/",\ + "packageDependencies": [\ + ["@esbuild/openbsd-x64", "npm:0.27.7"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:0.28.0", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-openbsd-x64-npm-0.28.0-514ec76c32/node_modules/@esbuild/openbsd-x64/",\ + "packageDependencies": [\ + ["@esbuild/openbsd-x64", "npm:0.28.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/openharmony-arm64", [\ + ["npm:0.27.7", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-openharmony-arm64-npm-0.27.7-f9fb3d2c0b/node_modules/@esbuild/openharmony-arm64/",\ + "packageDependencies": [\ + ["@esbuild/openharmony-arm64", "npm:0.27.7"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:0.28.0", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-openharmony-arm64-npm-0.28.0-d9650fc1f8/node_modules/@esbuild/openharmony-arm64/",\ + "packageDependencies": [\ + ["@esbuild/openharmony-arm64", "npm:0.28.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/sunos-x64", [\ + ["npm:0.27.7", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-sunos-x64-npm-0.27.7-e0c917a507/node_modules/@esbuild/sunos-x64/",\ + "packageDependencies": [\ + ["@esbuild/sunos-x64", "npm:0.27.7"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:0.28.0", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-sunos-x64-npm-0.28.0-fd35202fcd/node_modules/@esbuild/sunos-x64/",\ + "packageDependencies": [\ + ["@esbuild/sunos-x64", "npm:0.28.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/win32-arm64", [\ + ["npm:0.27.7", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-win32-arm64-npm-0.27.7-7394ad2c25/node_modules/@esbuild/win32-arm64/",\ + "packageDependencies": [\ + ["@esbuild/win32-arm64", "npm:0.27.7"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:0.28.0", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-win32-arm64-npm-0.28.0-77c6272795/node_modules/@esbuild/win32-arm64/",\ + "packageDependencies": [\ + ["@esbuild/win32-arm64", "npm:0.28.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/win32-ia32", [\ + ["npm:0.27.7", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-win32-ia32-npm-0.27.7-c720e2c640/node_modules/@esbuild/win32-ia32/",\ + "packageDependencies": [\ + ["@esbuild/win32-ia32", "npm:0.27.7"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:0.28.0", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-win32-ia32-npm-0.28.0-94f8464af9/node_modules/@esbuild/win32-ia32/",\ + "packageDependencies": [\ + ["@esbuild/win32-ia32", "npm:0.28.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/win32-x64", [\ + ["npm:0.27.7", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-win32-x64-npm-0.27.7-18b847315a/node_modules/@esbuild/win32-x64/",\ + "packageDependencies": [\ + ["@esbuild/win32-x64", "npm:0.27.7"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:0.28.0", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-win32-x64-npm-0.28.0-a4f1e967cb/node_modules/@esbuild/win32-x64/",\ + "packageDependencies": [\ + ["@esbuild/win32-x64", "npm:0.28.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@eslint-community/eslint-utils", [\ + ["npm:4.9.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@eslint-community-eslint-utils-npm-4.9.1-30ad3d49de-10c0.zip/node_modules/@eslint-community/eslint-utils/",\ + "packageDependencies": [\ + ["@eslint-community/eslint-utils", "npm:4.9.1"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:6439e89f252049757932c683c25d134f34c167642350e64deb97abfa9a92a2a7ab1554e686e544d5597aa8ea41bb40ffa3574d5e2fd90b2f71baee6f79182a3a#npm:4.9.1", {\ + "packageLocation": "./.yarn/__virtual__/@eslint-community-eslint-utils-virtual-a976fa149e/5/C:/Users/solov/AppData/Local/Yarn/Berry/cache/@eslint-community-eslint-utils-npm-4.9.1-30ad3d49de-10c0.zip/node_modules/@eslint-community/eslint-utils/",\ + "packageDependencies": [\ + ["@eslint-community/eslint-utils", "virtual:6439e89f252049757932c683c25d134f34c167642350e64deb97abfa9a92a2a7ab1554e686e544d5597aa8ea41bb40ffa3574d5e2fd90b2f71baee6f79182a3a#npm:4.9.1"],\ + ["@types/eslint", null],\ + ["eslint", "virtual:fb40b28bf5dd657a89e2a490e6cb230984558896db8ba52f5d3d2b23720eb08f5628820d022e92dfac9e2146d57f850a209b45e09bf2802fb7fa55ce7d579121#npm:9.39.4"],\ + ["eslint-visitor-keys", "npm:3.4.3"]\ + ],\ + "packagePeers": [\ + "@types/eslint",\ + "eslint"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@eslint-community/regexpp", [\ + ["npm:4.12.2", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@eslint-community-regexpp-npm-4.12.2-3d54624470-10c0.zip/node_modules/@eslint-community/regexpp/",\ + "packageDependencies": [\ + ["@eslint-community/regexpp", "npm:4.12.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@eslint/config-array", [\ + ["npm:0.21.2", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@eslint-config-array-npm-0.21.2-a0cc6c6855-10c0.zip/node_modules/@eslint/config-array/",\ + "packageDependencies": [\ + ["@eslint/config-array", "npm:0.21.2"],\ + ["@eslint/object-schema", "npm:2.1.7"],\ + ["debug", "virtual:5de9f8ff0d4128b8d5bbd52c1e252e7e7f0420f4b53cf63e45919981984854b91f8a057dfa32073fc3af76a734ef0c239531e2abb4b80367de6bf769365617ce#npm:4.4.3"],\ + ["minimatch", "npm:3.1.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@eslint/config-helpers", [\ + ["npm:0.4.2", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@eslint-config-helpers-npm-0.4.2-a55655f805-10c0.zip/node_modules/@eslint/config-helpers/",\ + "packageDependencies": [\ + ["@eslint/config-helpers", "npm:0.4.2"],\ + ["@eslint/core", "npm:0.17.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@eslint/core", [\ + ["npm:0.17.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@eslint-core-npm-0.17.0-8579df04c4-10c0.zip/node_modules/@eslint/core/",\ + "packageDependencies": [\ + ["@eslint/core", "npm:0.17.0"],\ + ["@types/json-schema", "npm:7.0.15"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@eslint/eslintrc", [\ + ["npm:3.3.5", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@eslint-eslintrc-npm-3.3.5-7ab5ba52b9-10c0.zip/node_modules/@eslint/eslintrc/",\ + "packageDependencies": [\ + ["@eslint/eslintrc", "npm:3.3.5"],\ + ["ajv", "npm:6.15.0"],\ + ["debug", "virtual:5de9f8ff0d4128b8d5bbd52c1e252e7e7f0420f4b53cf63e45919981984854b91f8a057dfa32073fc3af76a734ef0c239531e2abb4b80367de6bf769365617ce#npm:4.4.3"],\ + ["espree", "npm:10.4.0"],\ + ["globals", "npm:14.0.0"],\ + ["ignore", "npm:5.3.2"],\ + ["import-fresh", "npm:3.3.1"],\ + ["js-yaml", "npm:4.1.1"],\ + ["minimatch", "npm:3.1.5"],\ + ["strip-json-comments", "npm:3.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@eslint/js", [\ + ["npm:9.39.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@eslint-js-npm-9.39.4-d661bbea79-10c0.zip/node_modules/@eslint/js/",\ + "packageDependencies": [\ + ["@eslint/js", "npm:9.39.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@eslint/object-schema", [\ + ["npm:2.1.7", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@eslint-object-schema-npm-2.1.7-cb962a5b9b-10c0.zip/node_modules/@eslint/object-schema/",\ + "packageDependencies": [\ + ["@eslint/object-schema", "npm:2.1.7"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@eslint/plugin-kit", [\ + ["npm:0.4.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@eslint-plugin-kit-npm-0.4.1-3df70dd079-10c0.zip/node_modules/@eslint/plugin-kit/",\ + "packageDependencies": [\ + ["@eslint/core", "npm:0.17.0"],\ + ["@eslint/plugin-kit", "npm:0.4.1"],\ + ["levn", "npm:0.4.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@humanfs/core", [\ + ["npm:0.19.2", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@humanfs-core-npm-0.19.2-ad081ed090-10c0.zip/node_modules/@humanfs/core/",\ + "packageDependencies": [\ + ["@humanfs/core", "npm:0.19.2"],\ + ["@humanfs/types", "npm:0.15.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@humanfs/node", [\ + ["npm:0.16.8", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@humanfs-node-npm-0.16.8-80d1509ded-10c0.zip/node_modules/@humanfs/node/",\ + "packageDependencies": [\ + ["@humanfs/core", "npm:0.19.2"],\ + ["@humanfs/node", "npm:0.16.8"],\ + ["@humanfs/types", "npm:0.15.0"],\ + ["@humanwhocodes/retry", "npm:0.4.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@humanfs/types", [\ + ["npm:0.15.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@humanfs-types-npm-0.15.0-e47e8568ba-10c0.zip/node_modules/@humanfs/types/",\ + "packageDependencies": [\ + ["@humanfs/types", "npm:0.15.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@humanwhocodes/module-importer", [\ + ["npm:1.0.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@humanwhocodes-module-importer-npm-1.0.1-9d07ed2e4a-10c0.zip/node_modules/@humanwhocodes/module-importer/",\ + "packageDependencies": [\ + ["@humanwhocodes/module-importer", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@humanwhocodes/retry", [\ + ["npm:0.4.3", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@humanwhocodes-retry-npm-0.4.3-a8d7ca1663-10c0.zip/node_modules/@humanwhocodes/retry/",\ + "packageDependencies": [\ + ["@humanwhocodes/retry", "npm:0.4.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@isaacs/fs-minipass", [\ + ["npm:4.0.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@isaacs-fs-minipass-npm-4.0.1-677026e841-10c0.zip/node_modules/@isaacs/fs-minipass/",\ + "packageDependencies": [\ + ["@isaacs/fs-minipass", "npm:4.0.1"],\ + ["minipass", "npm:7.1.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@jridgewell/sourcemap-codec", [\ + ["npm:1.5.5", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@jridgewell-sourcemap-codec-npm-1.5.5-5189d9fc79-10c0.zip/node_modules/@jridgewell/sourcemap-codec/",\ + "packageDependencies": [\ + ["@jridgewell/sourcemap-codec", "npm:1.5.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@pkgr/core", [\ + ["npm:0.2.9", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@pkgr-core-npm-0.2.9-c65fc09be3-10c0.zip/node_modules/@pkgr/core/",\ + "packageDependencies": [\ + ["@pkgr/core", "npm:0.2.9"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-android-arm-eabi", [\ + ["npm:4.60.4", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-android-arm-eabi-npm-4.60.4-6b6d43b0b3/node_modules/@rollup/rollup-android-arm-eabi/",\ + "packageDependencies": [\ + ["@rollup/rollup-android-arm-eabi", "npm:4.60.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-android-arm64", [\ + ["npm:4.60.4", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-android-arm64-npm-4.60.4-4f52437651/node_modules/@rollup/rollup-android-arm64/",\ + "packageDependencies": [\ + ["@rollup/rollup-android-arm64", "npm:4.60.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-darwin-arm64", [\ + ["npm:4.60.4", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-darwin-arm64-npm-4.60.4-3b29515b21/node_modules/@rollup/rollup-darwin-arm64/",\ + "packageDependencies": [\ + ["@rollup/rollup-darwin-arm64", "npm:4.60.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-darwin-x64", [\ + ["npm:4.60.4", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-darwin-x64-npm-4.60.4-e734245f9a/node_modules/@rollup/rollup-darwin-x64/",\ + "packageDependencies": [\ + ["@rollup/rollup-darwin-x64", "npm:4.60.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-freebsd-arm64", [\ + ["npm:4.60.4", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-freebsd-arm64-npm-4.60.4-2e3756133e/node_modules/@rollup/rollup-freebsd-arm64/",\ + "packageDependencies": [\ + ["@rollup/rollup-freebsd-arm64", "npm:4.60.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-freebsd-x64", [\ + ["npm:4.60.4", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-freebsd-x64-npm-4.60.4-c844011def/node_modules/@rollup/rollup-freebsd-x64/",\ + "packageDependencies": [\ + ["@rollup/rollup-freebsd-x64", "npm:4.60.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-linux-arm-gnueabihf", [\ + ["npm:4.60.4", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-arm-gnueabihf-npm-4.60.4-850eb38d21/node_modules/@rollup/rollup-linux-arm-gnueabihf/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-arm-gnueabihf", "npm:4.60.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-linux-arm-musleabihf", [\ + ["npm:4.60.4", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-arm-musleabihf-npm-4.60.4-695fc0268a/node_modules/@rollup/rollup-linux-arm-musleabihf/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-arm-musleabihf", "npm:4.60.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-linux-arm64-gnu", [\ + ["npm:4.60.4", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-arm64-gnu-npm-4.60.4-5e34749f20/node_modules/@rollup/rollup-linux-arm64-gnu/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-arm64-gnu", "npm:4.60.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-linux-arm64-musl", [\ + ["npm:4.60.4", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-arm64-musl-npm-4.60.4-8a50da2207/node_modules/@rollup/rollup-linux-arm64-musl/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-arm64-musl", "npm:4.60.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-linux-loong64-gnu", [\ + ["npm:4.60.4", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-loong64-gnu-npm-4.60.4-1effba996a/node_modules/@rollup/rollup-linux-loong64-gnu/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-loong64-gnu", "npm:4.60.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-linux-loong64-musl", [\ + ["npm:4.60.4", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-loong64-musl-npm-4.60.4-bd1ef5e443/node_modules/@rollup/rollup-linux-loong64-musl/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-loong64-musl", "npm:4.60.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-linux-ppc64-gnu", [\ + ["npm:4.60.4", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-ppc64-gnu-npm-4.60.4-ce7e65d8d5/node_modules/@rollup/rollup-linux-ppc64-gnu/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-ppc64-gnu", "npm:4.60.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-linux-ppc64-musl", [\ + ["npm:4.60.4", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-ppc64-musl-npm-4.60.4-8dd9d256f6/node_modules/@rollup/rollup-linux-ppc64-musl/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-ppc64-musl", "npm:4.60.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-linux-riscv64-gnu", [\ + ["npm:4.60.4", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-riscv64-gnu-npm-4.60.4-a28977156f/node_modules/@rollup/rollup-linux-riscv64-gnu/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-riscv64-gnu", "npm:4.60.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-linux-riscv64-musl", [\ + ["npm:4.60.4", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-riscv64-musl-npm-4.60.4-aff04c2d56/node_modules/@rollup/rollup-linux-riscv64-musl/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-riscv64-musl", "npm:4.60.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-linux-s390x-gnu", [\ + ["npm:4.60.4", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-s390x-gnu-npm-4.60.4-698c8cf8dd/node_modules/@rollup/rollup-linux-s390x-gnu/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-s390x-gnu", "npm:4.60.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-linux-x64-gnu", [\ + ["npm:4.60.4", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-x64-gnu-npm-4.60.4-d05f6a1949/node_modules/@rollup/rollup-linux-x64-gnu/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-x64-gnu", "npm:4.60.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-linux-x64-musl", [\ + ["npm:4.60.4", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-x64-musl-npm-4.60.4-de1c11b5fc/node_modules/@rollup/rollup-linux-x64-musl/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-x64-musl", "npm:4.60.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-openbsd-x64", [\ + ["npm:4.60.4", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-openbsd-x64-npm-4.60.4-4528fff4db/node_modules/@rollup/rollup-openbsd-x64/",\ + "packageDependencies": [\ + ["@rollup/rollup-openbsd-x64", "npm:4.60.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-openharmony-arm64", [\ + ["npm:4.60.4", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-openharmony-arm64-npm-4.60.4-8f80b7b06c/node_modules/@rollup/rollup-openharmony-arm64/",\ + "packageDependencies": [\ + ["@rollup/rollup-openharmony-arm64", "npm:4.60.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-win32-arm64-msvc", [\ + ["npm:4.60.4", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-win32-arm64-msvc-npm-4.60.4-bfaa18279c/node_modules/@rollup/rollup-win32-arm64-msvc/",\ + "packageDependencies": [\ + ["@rollup/rollup-win32-arm64-msvc", "npm:4.60.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-win32-ia32-msvc", [\ + ["npm:4.60.4", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-win32-ia32-msvc-npm-4.60.4-0f13b41a02/node_modules/@rollup/rollup-win32-ia32-msvc/",\ + "packageDependencies": [\ + ["@rollup/rollup-win32-ia32-msvc", "npm:4.60.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-win32-x64-gnu", [\ + ["npm:4.60.4", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-win32-x64-gnu-npm-4.60.4-94ecb6e3e8/node_modules/@rollup/rollup-win32-x64-gnu/",\ + "packageDependencies": [\ + ["@rollup/rollup-win32-x64-gnu", "npm:4.60.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-win32-x64-msvc", [\ + ["npm:4.60.4", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-win32-x64-msvc-npm-4.60.4-94827fab97/node_modules/@rollup/rollup-win32-x64-msvc/",\ + "packageDependencies": [\ + ["@rollup/rollup-win32-x64-msvc", "npm:4.60.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@types/chai", [\ + ["npm:5.2.3", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@types-chai-npm-5.2.3-5f61dbddda-10c0.zip/node_modules/@types/chai/",\ + "packageDependencies": [\ + ["@types/chai", "npm:5.2.3"],\ + ["@types/deep-eql", "npm:4.0.2"],\ + ["assertion-error", "npm:2.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@types/deep-eql", [\ + ["npm:4.0.2", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@types-deep-eql-npm-4.0.2-e6bc68cc92-10c0.zip/node_modules/@types/deep-eql/",\ + "packageDependencies": [\ + ["@types/deep-eql", "npm:4.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@types/estree", [\ + ["npm:1.0.8", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@types-estree-npm-1.0.8-2195bac6d6-10c0.zip/node_modules/@types/estree/",\ + "packageDependencies": [\ + ["@types/estree", "npm:1.0.8"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:1.0.9", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@types-estree-npm-1.0.9-63428f58ff-10c0.zip/node_modules/@types/estree/",\ + "packageDependencies": [\ + ["@types/estree", "npm:1.0.9"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@types/json-schema", [\ + ["npm:7.0.15", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@types-json-schema-npm-7.0.15-fd16381786-10c0.zip/node_modules/@types/json-schema/",\ + "packageDependencies": [\ + ["@types/json-schema", "npm:7.0.15"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@types/node", [\ + ["npm:22.19.19", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@types-node-npm-22.19.19-3d24e4ae91-10c0.zip/node_modules/@types/node/",\ + "packageDependencies": [\ + ["@types/node", "npm:22.19.19"],\ + ["undici-types", "npm:6.21.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@typescript-eslint/eslint-plugin", [\ + ["npm:8.59.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@typescript-eslint-eslint-plugin-npm-8.59.4-e2b34eb135-10c0.zip/node_modules/@typescript-eslint/eslint-plugin/",\ + "packageDependencies": [\ + ["@typescript-eslint/eslint-plugin", "npm:8.59.4"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:1dfa483f44ea3e77e5b205b5951360565ac1d42aca8e7cd2e6c6d38a444111d7e081a934641bcbea91b213cc5bcde153cc4c1e374e7e7497be09869da1b22310#npm:8.59.4", {\ + "packageLocation": "./.yarn/__virtual__/@typescript-eslint-eslint-plugin-virtual-6b473b7238/5/C:/Users/solov/AppData/Local/Yarn/Berry/cache/@typescript-eslint-eslint-plugin-npm-8.59.4-e2b34eb135-10c0.zip/node_modules/@typescript-eslint/eslint-plugin/",\ + "packageDependencies": [\ + ["@eslint-community/regexpp", "npm:4.12.2"],\ + ["@types/eslint", null],\ + ["@types/typescript", null],\ + ["@types/typescript-eslint__parser", null],\ + ["@typescript-eslint/eslint-plugin", "virtual:1dfa483f44ea3e77e5b205b5951360565ac1d42aca8e7cd2e6c6d38a444111d7e081a934641bcbea91b213cc5bcde153cc4c1e374e7e7497be09869da1b22310#npm:8.59.4"],\ + ["@typescript-eslint/parser", "virtual:1dfa483f44ea3e77e5b205b5951360565ac1d42aca8e7cd2e6c6d38a444111d7e081a934641bcbea91b213cc5bcde153cc4c1e374e7e7497be09869da1b22310#npm:8.59.4"],\ + ["@typescript-eslint/scope-manager", "npm:8.59.4"],\ + ["@typescript-eslint/type-utils", "virtual:6b473b7238d717bf68245e7bce8ad5c5724550ac119862fd048f7398bdf1a8975241a8219d1021133969646a1902ff8da3729fe6025faabf64baa2e9187ae5b2#npm:8.59.4"],\ + ["@typescript-eslint/utils", "virtual:1dfa483f44ea3e77e5b205b5951360565ac1d42aca8e7cd2e6c6d38a444111d7e081a934641bcbea91b213cc5bcde153cc4c1e374e7e7497be09869da1b22310#npm:8.59.4"],\ + ["@typescript-eslint/visitor-keys", "npm:8.59.4"],\ + ["eslint", "virtual:fb40b28bf5dd657a89e2a490e6cb230984558896db8ba52f5d3d2b23720eb08f5628820d022e92dfac9e2146d57f850a209b45e09bf2802fb7fa55ce7d579121#npm:9.39.4"],\ + ["ignore", "npm:7.0.5"],\ + ["natural-compare", "npm:1.4.0"],\ + ["ts-api-utils", "virtual:6b473b7238d717bf68245e7bce8ad5c5724550ac119862fd048f7398bdf1a8975241a8219d1021133969646a1902ff8da3729fe6025faabf64baa2e9187ae5b2#npm:2.5.0"],\ + ["typescript", "patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5"]\ + ],\ + "packagePeers": [\ + "@types/eslint",\ + "@types/typescript-eslint__parser",\ + "@types/typescript",\ + "@typescript-eslint/parser",\ + "eslint",\ + "typescript"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@typescript-eslint/parser", [\ + ["npm:8.59.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@typescript-eslint-parser-npm-8.59.4-a950e7b733-10c0.zip/node_modules/@typescript-eslint/parser/",\ + "packageDependencies": [\ + ["@typescript-eslint/parser", "npm:8.59.4"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:1dfa483f44ea3e77e5b205b5951360565ac1d42aca8e7cd2e6c6d38a444111d7e081a934641bcbea91b213cc5bcde153cc4c1e374e7e7497be09869da1b22310#npm:8.59.4", {\ + "packageLocation": "./.yarn/__virtual__/@typescript-eslint-parser-virtual-f1abf11c5c/5/C:/Users/solov/AppData/Local/Yarn/Berry/cache/@typescript-eslint-parser-npm-8.59.4-a950e7b733-10c0.zip/node_modules/@typescript-eslint/parser/",\ + "packageDependencies": [\ + ["@types/eslint", null],\ + ["@types/typescript", null],\ + ["@typescript-eslint/parser", "virtual:1dfa483f44ea3e77e5b205b5951360565ac1d42aca8e7cd2e6c6d38a444111d7e081a934641bcbea91b213cc5bcde153cc4c1e374e7e7497be09869da1b22310#npm:8.59.4"],\ + ["@typescript-eslint/scope-manager", "npm:8.59.4"],\ + ["@typescript-eslint/types", "npm:8.59.4"],\ + ["@typescript-eslint/typescript-estree", "virtual:1dfa483f44ea3e77e5b205b5951360565ac1d42aca8e7cd2e6c6d38a444111d7e081a934641bcbea91b213cc5bcde153cc4c1e374e7e7497be09869da1b22310#npm:8.59.4"],\ + ["@typescript-eslint/visitor-keys", "npm:8.59.4"],\ + ["debug", "virtual:5de9f8ff0d4128b8d5bbd52c1e252e7e7f0420f4b53cf63e45919981984854b91f8a057dfa32073fc3af76a734ef0c239531e2abb4b80367de6bf769365617ce#npm:4.4.3"],\ + ["eslint", "virtual:fb40b28bf5dd657a89e2a490e6cb230984558896db8ba52f5d3d2b23720eb08f5628820d022e92dfac9e2146d57f850a209b45e09bf2802fb7fa55ce7d579121#npm:9.39.4"],\ + ["typescript", "patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5"]\ + ],\ + "packagePeers": [\ + "@types/eslint",\ + "@types/typescript",\ + "eslint",\ + "typescript"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@typescript-eslint/project-service", [\ + ["npm:8.59.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@typescript-eslint-project-service-npm-8.59.4-36ac74ebdd-10c0.zip/node_modules/@typescript-eslint/project-service/",\ + "packageDependencies": [\ + ["@typescript-eslint/project-service", "npm:8.59.4"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:54cccfd29d2e749605f8031fc26fbe94a6e8beda7f1ce9ba2463e782d736e5411a914d251932fe497ca8b3af70070a80ca325d3711636da17753ea4972709b58#npm:8.59.4", {\ + "packageLocation": "./.yarn/__virtual__/@typescript-eslint-project-service-virtual-b02faee4aa/5/C:/Users/solov/AppData/Local/Yarn/Berry/cache/@typescript-eslint-project-service-npm-8.59.4-36ac74ebdd-10c0.zip/node_modules/@typescript-eslint/project-service/",\ + "packageDependencies": [\ + ["@types/typescript", null],\ + ["@typescript-eslint/project-service", "virtual:54cccfd29d2e749605f8031fc26fbe94a6e8beda7f1ce9ba2463e782d736e5411a914d251932fe497ca8b3af70070a80ca325d3711636da17753ea4972709b58#npm:8.59.4"],\ + ["@typescript-eslint/tsconfig-utils", "virtual:54cccfd29d2e749605f8031fc26fbe94a6e8beda7f1ce9ba2463e782d736e5411a914d251932fe497ca8b3af70070a80ca325d3711636da17753ea4972709b58#npm:8.59.4"],\ + ["@typescript-eslint/types", "npm:8.59.4"],\ + ["debug", "virtual:5de9f8ff0d4128b8d5bbd52c1e252e7e7f0420f4b53cf63e45919981984854b91f8a057dfa32073fc3af76a734ef0c239531e2abb4b80367de6bf769365617ce#npm:4.4.3"],\ + ["typescript", "patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5"]\ + ],\ + "packagePeers": [\ + "@types/typescript",\ + "typescript"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@typescript-eslint/scope-manager", [\ + ["npm:8.59.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@typescript-eslint-scope-manager-npm-8.59.4-372cd448df-10c0.zip/node_modules/@typescript-eslint/scope-manager/",\ + "packageDependencies": [\ + ["@typescript-eslint/scope-manager", "npm:8.59.4"],\ + ["@typescript-eslint/types", "npm:8.59.4"],\ + ["@typescript-eslint/visitor-keys", "npm:8.59.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@typescript-eslint/tsconfig-utils", [\ + ["npm:8.59.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@typescript-eslint-tsconfig-utils-npm-8.59.4-53097f6061-10c0.zip/node_modules/@typescript-eslint/tsconfig-utils/",\ + "packageDependencies": [\ + ["@typescript-eslint/tsconfig-utils", "npm:8.59.4"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:54cccfd29d2e749605f8031fc26fbe94a6e8beda7f1ce9ba2463e782d736e5411a914d251932fe497ca8b3af70070a80ca325d3711636da17753ea4972709b58#npm:8.59.4", {\ + "packageLocation": "./.yarn/__virtual__/@typescript-eslint-tsconfig-utils-virtual-6627fc39a9/5/C:/Users/solov/AppData/Local/Yarn/Berry/cache/@typescript-eslint-tsconfig-utils-npm-8.59.4-53097f6061-10c0.zip/node_modules/@typescript-eslint/tsconfig-utils/",\ + "packageDependencies": [\ + ["@types/typescript", null],\ + ["@typescript-eslint/tsconfig-utils", "virtual:54cccfd29d2e749605f8031fc26fbe94a6e8beda7f1ce9ba2463e782d736e5411a914d251932fe497ca8b3af70070a80ca325d3711636da17753ea4972709b58#npm:8.59.4"],\ + ["typescript", "patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5"]\ + ],\ + "packagePeers": [\ + "@types/typescript",\ + "typescript"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@typescript-eslint/type-utils", [\ + ["npm:8.59.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@typescript-eslint-type-utils-npm-8.59.4-9d46dc3585-10c0.zip/node_modules/@typescript-eslint/type-utils/",\ + "packageDependencies": [\ + ["@typescript-eslint/type-utils", "npm:8.59.4"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:6b473b7238d717bf68245e7bce8ad5c5724550ac119862fd048f7398bdf1a8975241a8219d1021133969646a1902ff8da3729fe6025faabf64baa2e9187ae5b2#npm:8.59.4", {\ + "packageLocation": "./.yarn/__virtual__/@typescript-eslint-type-utils-virtual-93523218db/5/C:/Users/solov/AppData/Local/Yarn/Berry/cache/@typescript-eslint-type-utils-npm-8.59.4-9d46dc3585-10c0.zip/node_modules/@typescript-eslint/type-utils/",\ + "packageDependencies": [\ + ["@types/eslint", null],\ + ["@types/typescript", null],\ + ["@typescript-eslint/type-utils", "virtual:6b473b7238d717bf68245e7bce8ad5c5724550ac119862fd048f7398bdf1a8975241a8219d1021133969646a1902ff8da3729fe6025faabf64baa2e9187ae5b2#npm:8.59.4"],\ + ["@typescript-eslint/types", "npm:8.59.4"],\ + ["@typescript-eslint/typescript-estree", "virtual:1dfa483f44ea3e77e5b205b5951360565ac1d42aca8e7cd2e6c6d38a444111d7e081a934641bcbea91b213cc5bcde153cc4c1e374e7e7497be09869da1b22310#npm:8.59.4"],\ + ["@typescript-eslint/utils", "virtual:1dfa483f44ea3e77e5b205b5951360565ac1d42aca8e7cd2e6c6d38a444111d7e081a934641bcbea91b213cc5bcde153cc4c1e374e7e7497be09869da1b22310#npm:8.59.4"],\ + ["debug", "virtual:5de9f8ff0d4128b8d5bbd52c1e252e7e7f0420f4b53cf63e45919981984854b91f8a057dfa32073fc3af76a734ef0c239531e2abb4b80367de6bf769365617ce#npm:4.4.3"],\ + ["eslint", "virtual:fb40b28bf5dd657a89e2a490e6cb230984558896db8ba52f5d3d2b23720eb08f5628820d022e92dfac9e2146d57f850a209b45e09bf2802fb7fa55ce7d579121#npm:9.39.4"],\ + ["ts-api-utils", "virtual:6b473b7238d717bf68245e7bce8ad5c5724550ac119862fd048f7398bdf1a8975241a8219d1021133969646a1902ff8da3729fe6025faabf64baa2e9187ae5b2#npm:2.5.0"],\ + ["typescript", "patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5"]\ + ],\ + "packagePeers": [\ + "@types/eslint",\ + "@types/typescript",\ + "eslint",\ + "typescript"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@typescript-eslint/types", [\ + ["npm:8.59.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@typescript-eslint-types-npm-8.59.4-5837bbb296-10c0.zip/node_modules/@typescript-eslint/types/",\ + "packageDependencies": [\ + ["@typescript-eslint/types", "npm:8.59.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@typescript-eslint/typescript-estree", [\ + ["npm:8.59.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@typescript-eslint-typescript-estree-npm-8.59.4-6624bb7b39-10c0.zip/node_modules/@typescript-eslint/typescript-estree/",\ + "packageDependencies": [\ + ["@typescript-eslint/typescript-estree", "npm:8.59.4"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:1dfa483f44ea3e77e5b205b5951360565ac1d42aca8e7cd2e6c6d38a444111d7e081a934641bcbea91b213cc5bcde153cc4c1e374e7e7497be09869da1b22310#npm:8.59.4", {\ + "packageLocation": "./.yarn/__virtual__/@typescript-eslint-typescript-estree-virtual-54cccfd29d/5/C:/Users/solov/AppData/Local/Yarn/Berry/cache/@typescript-eslint-typescript-estree-npm-8.59.4-6624bb7b39-10c0.zip/node_modules/@typescript-eslint/typescript-estree/",\ + "packageDependencies": [\ + ["@types/typescript", null],\ + ["@typescript-eslint/project-service", "virtual:54cccfd29d2e749605f8031fc26fbe94a6e8beda7f1ce9ba2463e782d736e5411a914d251932fe497ca8b3af70070a80ca325d3711636da17753ea4972709b58#npm:8.59.4"],\ + ["@typescript-eslint/tsconfig-utils", "virtual:54cccfd29d2e749605f8031fc26fbe94a6e8beda7f1ce9ba2463e782d736e5411a914d251932fe497ca8b3af70070a80ca325d3711636da17753ea4972709b58#npm:8.59.4"],\ + ["@typescript-eslint/types", "npm:8.59.4"],\ + ["@typescript-eslint/typescript-estree", "virtual:1dfa483f44ea3e77e5b205b5951360565ac1d42aca8e7cd2e6c6d38a444111d7e081a934641bcbea91b213cc5bcde153cc4c1e374e7e7497be09869da1b22310#npm:8.59.4"],\ + ["@typescript-eslint/visitor-keys", "npm:8.59.4"],\ + ["debug", "virtual:5de9f8ff0d4128b8d5bbd52c1e252e7e7f0420f4b53cf63e45919981984854b91f8a057dfa32073fc3af76a734ef0c239531e2abb4b80367de6bf769365617ce#npm:4.4.3"],\ + ["minimatch", "npm:10.2.5"],\ + ["semver", "npm:7.8.1"],\ + ["tinyglobby", "npm:0.2.16"],\ + ["ts-api-utils", "virtual:6b473b7238d717bf68245e7bce8ad5c5724550ac119862fd048f7398bdf1a8975241a8219d1021133969646a1902ff8da3729fe6025faabf64baa2e9187ae5b2#npm:2.5.0"],\ + ["typescript", "patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5"]\ + ],\ + "packagePeers": [\ + "@types/typescript",\ + "typescript"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@typescript-eslint/utils", [\ + ["npm:8.59.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@typescript-eslint-utils-npm-8.59.4-4a48b0826c-10c0.zip/node_modules/@typescript-eslint/utils/",\ + "packageDependencies": [\ + ["@typescript-eslint/utils", "npm:8.59.4"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:1dfa483f44ea3e77e5b205b5951360565ac1d42aca8e7cd2e6c6d38a444111d7e081a934641bcbea91b213cc5bcde153cc4c1e374e7e7497be09869da1b22310#npm:8.59.4", {\ + "packageLocation": "./.yarn/__virtual__/@typescript-eslint-utils-virtual-48a53c14a1/5/C:/Users/solov/AppData/Local/Yarn/Berry/cache/@typescript-eslint-utils-npm-8.59.4-4a48b0826c-10c0.zip/node_modules/@typescript-eslint/utils/",\ + "packageDependencies": [\ + ["@eslint-community/eslint-utils", "virtual:6439e89f252049757932c683c25d134f34c167642350e64deb97abfa9a92a2a7ab1554e686e544d5597aa8ea41bb40ffa3574d5e2fd90b2f71baee6f79182a3a#npm:4.9.1"],\ + ["@types/eslint", null],\ + ["@types/typescript", null],\ + ["@typescript-eslint/scope-manager", "npm:8.59.4"],\ + ["@typescript-eslint/types", "npm:8.59.4"],\ + ["@typescript-eslint/typescript-estree", "virtual:1dfa483f44ea3e77e5b205b5951360565ac1d42aca8e7cd2e6c6d38a444111d7e081a934641bcbea91b213cc5bcde153cc4c1e374e7e7497be09869da1b22310#npm:8.59.4"],\ + ["@typescript-eslint/utils", "virtual:1dfa483f44ea3e77e5b205b5951360565ac1d42aca8e7cd2e6c6d38a444111d7e081a934641bcbea91b213cc5bcde153cc4c1e374e7e7497be09869da1b22310#npm:8.59.4"],\ + ["eslint", "virtual:fb40b28bf5dd657a89e2a490e6cb230984558896db8ba52f5d3d2b23720eb08f5628820d022e92dfac9e2146d57f850a209b45e09bf2802fb7fa55ce7d579121#npm:9.39.4"],\ + ["typescript", "patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5"]\ + ],\ + "packagePeers": [\ + "@types/eslint",\ + "@types/typescript",\ + "eslint",\ + "typescript"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@typescript-eslint/visitor-keys", [\ + ["npm:8.59.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@typescript-eslint-visitor-keys-npm-8.59.4-56790977c0-10c0.zip/node_modules/@typescript-eslint/visitor-keys/",\ + "packageDependencies": [\ + ["@typescript-eslint/types", "npm:8.59.4"],\ + ["@typescript-eslint/visitor-keys", "npm:8.59.4"],\ + ["eslint-visitor-keys", "npm:5.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@vitest/expect", [\ + ["npm:3.2.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@vitest-expect-npm-3.2.4-97c526d5cc-10c0.zip/node_modules/@vitest/expect/",\ + "packageDependencies": [\ + ["@types/chai", "npm:5.2.3"],\ + ["@vitest/expect", "npm:3.2.4"],\ + ["@vitest/spy", "npm:3.2.4"],\ + ["@vitest/utils", "npm:3.2.4"],\ + ["chai", "npm:5.3.3"],\ + ["tinyrainbow", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@vitest/mocker", [\ + ["npm:3.2.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@vitest-mocker-npm-3.2.4-48badb1f19-10c0.zip/node_modules/@vitest/mocker/",\ + "packageDependencies": [\ + ["@vitest/mocker", "npm:3.2.4"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:4d91e8ac007eccde5310421ec26a7240652e847ccee0eed7a8ce482e96840259d5808dd3b068027dd146585635f2c15edeafc3d448608ab967719cd52cb6ba46#npm:3.2.4", {\ + "packageLocation": "./.yarn/__virtual__/@vitest-mocker-virtual-1b72f53c0b/5/C:/Users/solov/AppData/Local/Yarn/Berry/cache/@vitest-mocker-npm-3.2.4-48badb1f19-10c0.zip/node_modules/@vitest/mocker/",\ + "packageDependencies": [\ + ["@types/msw", null],\ + ["@types/vite", null],\ + ["@vitest/mocker", "virtual:4d91e8ac007eccde5310421ec26a7240652e847ccee0eed7a8ce482e96840259d5808dd3b068027dd146585635f2c15edeafc3d448608ab967719cd52cb6ba46#npm:3.2.4"],\ + ["@vitest/spy", "npm:3.2.4"],\ + ["estree-walker", "npm:3.0.3"],\ + ["magic-string", "npm:0.30.21"],\ + ["msw", null],\ + ["vite", "virtual:4d91e8ac007eccde5310421ec26a7240652e847ccee0eed7a8ce482e96840259d5808dd3b068027dd146585635f2c15edeafc3d448608ab967719cd52cb6ba46#npm:7.3.3"]\ + ],\ + "packagePeers": [\ + "@types/msw",\ + "@types/vite",\ + "msw",\ + "vite"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@vitest/pretty-format", [\ + ["npm:3.2.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@vitest-pretty-format-npm-3.2.4-d7da0d3faf-10c0.zip/node_modules/@vitest/pretty-format/",\ + "packageDependencies": [\ + ["@vitest/pretty-format", "npm:3.2.4"],\ + ["tinyrainbow", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@vitest/runner", [\ + ["npm:3.2.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@vitest-runner-npm-3.2.4-b2e96befcb-10c0.zip/node_modules/@vitest/runner/",\ + "packageDependencies": [\ + ["@vitest/runner", "npm:3.2.4"],\ + ["@vitest/utils", "npm:3.2.4"],\ + ["pathe", "npm:2.0.3"],\ + ["strip-literal", "npm:3.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@vitest/snapshot", [\ + ["npm:3.2.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@vitest-snapshot-npm-3.2.4-c43292ea8b-10c0.zip/node_modules/@vitest/snapshot/",\ + "packageDependencies": [\ + ["@vitest/pretty-format", "npm:3.2.4"],\ + ["@vitest/snapshot", "npm:3.2.4"],\ + ["magic-string", "npm:0.30.21"],\ + ["pathe", "npm:2.0.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@vitest/spy", [\ + ["npm:3.2.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@vitest-spy-npm-3.2.4-ed1c68e965-10c0.zip/node_modules/@vitest/spy/",\ + "packageDependencies": [\ + ["@vitest/spy", "npm:3.2.4"],\ + ["tinyspy", "npm:4.0.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@vitest/utils", [\ + ["npm:3.2.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/@vitest-utils-npm-3.2.4-2d32b4da53-10c0.zip/node_modules/@vitest/utils/",\ + "packageDependencies": [\ + ["@vitest/pretty-format", "npm:3.2.4"],\ + ["@vitest/utils", "npm:3.2.4"],\ + ["loupe", "npm:3.2.1"],\ + ["tinyrainbow", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["abbrev", [\ + ["npm:4.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/abbrev-npm-4.0.0-7d848a1ef0-10c0.zip/node_modules/abbrev/",\ + "packageDependencies": [\ + ["abbrev", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["acorn", [\ + ["npm:8.16.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/acorn-npm-8.16.0-b2096bf83f-10c0.zip/node_modules/acorn/",\ + "packageDependencies": [\ + ["acorn", "npm:8.16.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["acorn-jsx", [\ + ["npm:5.3.2", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/acorn-jsx-npm-5.3.2-d7594599ea-10c0.zip/node_modules/acorn-jsx/",\ + "packageDependencies": [\ + ["acorn-jsx", "npm:5.3.2"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:9633b00e55c5aebf81b0127f50addd44705c175a47a287258963782da8f9f4e66c2da6640a60ed2826e19f024f73cd554a58729ee1644f93800bbd0d7b7ddd79#npm:5.3.2", {\ + "packageLocation": "./.yarn/__virtual__/acorn-jsx-virtual-642bf0c873/5/C:/Users/solov/AppData/Local/Yarn/Berry/cache/acorn-jsx-npm-5.3.2-d7594599ea-10c0.zip/node_modules/acorn-jsx/",\ + "packageDependencies": [\ + ["@types/acorn", null],\ + ["acorn", "npm:8.16.0"],\ + ["acorn-jsx", "virtual:9633b00e55c5aebf81b0127f50addd44705c175a47a287258963782da8f9f4e66c2da6640a60ed2826e19f024f73cd554a58729ee1644f93800bbd0d7b7ddd79#npm:5.3.2"]\ + ],\ + "packagePeers": [\ + "@types/acorn",\ + "acorn"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ajv", [\ + ["npm:6.15.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/ajv-npm-6.15.0-0a6bf8fa72-10c0.zip/node_modules/ajv/",\ + "packageDependencies": [\ + ["ajv", "npm:6.15.0"],\ + ["fast-deep-equal", "npm:3.1.3"],\ + ["fast-json-stable-stringify", "npm:2.1.0"],\ + ["json-schema-traverse", "npm:0.4.1"],\ + ["uri-js", "npm:4.4.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ansi-escapes", [\ + ["npm:7.3.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/ansi-escapes-npm-7.3.0-f8978d12b5-10c0.zip/node_modules/ansi-escapes/",\ + "packageDependencies": [\ + ["ansi-escapes", "npm:7.3.0"],\ + ["environment", "npm:1.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ansi-regex", [\ + ["npm:6.2.2", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/ansi-regex-npm-6.2.2-f2d6691eb1-10c0.zip/node_modules/ansi-regex/",\ + "packageDependencies": [\ + ["ansi-regex", "npm:6.2.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ansi-styles", [\ + ["npm:4.3.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/ansi-styles-npm-4.3.0-245c7d42c7-10c0.zip/node_modules/ansi-styles/",\ + "packageDependencies": [\ + ["ansi-styles", "npm:4.3.0"],\ + ["color-convert", "npm:2.0.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:6.2.3", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/ansi-styles-npm-6.2.3-6fc7ca2bf5-10c0.zip/node_modules/ansi-styles/",\ + "packageDependencies": [\ + ["ansi-styles", "npm:6.2.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["argparse", [\ + ["npm:2.0.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/argparse-npm-2.0.1-faff7999e6-10c0.zip/node_modules/argparse/",\ + "packageDependencies": [\ + ["argparse", "npm:2.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["assertion-error", [\ + ["npm:2.0.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/assertion-error-npm-2.0.1-8169d136f2-10c0.zip/node_modules/assertion-error/",\ + "packageDependencies": [\ + ["assertion-error", "npm:2.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["balanced-match", [\ + ["npm:1.0.2", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/balanced-match-npm-1.0.2-a53c126459-10c0.zip/node_modules/balanced-match/",\ + "packageDependencies": [\ + ["balanced-match", "npm:1.0.2"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:4.0.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/balanced-match-npm-4.0.4-fd666b3c7f-10c0.zip/node_modules/balanced-match/",\ + "packageDependencies": [\ + ["balanced-match", "npm:4.0.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["brace-expansion", [\ + ["npm:1.1.14", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/brace-expansion-npm-1.1.14-a997f4f4e7-10c0.zip/node_modules/brace-expansion/",\ + "packageDependencies": [\ + ["balanced-match", "npm:1.0.2"],\ + ["brace-expansion", "npm:1.1.14"],\ + ["concat-map", "npm:0.0.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:5.0.6", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/brace-expansion-npm-5.0.6-abf39a1281-10c0.zip/node_modules/brace-expansion/",\ + "packageDependencies": [\ + ["balanced-match", "npm:4.0.4"],\ + ["brace-expansion", "npm:5.0.6"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["braces", [\ + ["npm:3.0.3", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/braces-npm-3.0.3-582c14023c-10c0.zip/node_modules/braces/",\ + "packageDependencies": [\ + ["braces", "npm:3.0.3"],\ + ["fill-range", "npm:7.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["cac", [\ + ["npm:6.7.14", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/cac-npm-6.7.14-c46284e425-10c0.zip/node_modules/cac/",\ + "packageDependencies": [\ + ["cac", "npm:6.7.14"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["callsites", [\ + ["npm:3.1.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/callsites-npm-3.1.0-268f989910-10c0.zip/node_modules/callsites/",\ + "packageDependencies": [\ + ["callsites", "npm:3.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["chai", [\ + ["npm:5.3.3", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/chai-npm-5.3.3-ebef71cdac-10c0.zip/node_modules/chai/",\ + "packageDependencies": [\ + ["assertion-error", "npm:2.0.1"],\ + ["chai", "npm:5.3.3"],\ + ["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", [\ + ["npm:4.1.2", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/chalk-npm-4.1.2-ba8b67ab80-10c0.zip/node_modules/chalk/",\ + "packageDependencies": [\ + ["ansi-styles", "npm:4.3.0"],\ + ["chalk", "npm:4.1.2"],\ + ["supports-color", "npm:7.2.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:5.6.2", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/chalk-npm-5.6.2-ecbd482482-10c0.zip/node_modules/chalk/",\ + "packageDependencies": [\ + ["chalk", "npm:5.6.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["check-error", [\ + ["npm:2.1.3", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/check-error-npm-2.1.3-e17bcf3ed8-10c0.zip/node_modules/check-error/",\ + "packageDependencies": [\ + ["check-error", "npm:2.1.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["chownr", [\ + ["npm:3.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/chownr-npm-3.0.0-5275e85d25-10c0.zip/node_modules/chownr/",\ + "packageDependencies": [\ + ["chownr", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["cli-cursor", [\ + ["npm:5.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/cli-cursor-npm-5.0.0-444bec1bef-10c0.zip/node_modules/cli-cursor/",\ + "packageDependencies": [\ + ["cli-cursor", "npm:5.0.0"],\ + ["restore-cursor", "npm:5.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["cli-truncate", [\ + ["npm:4.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/cli-truncate-npm-4.0.0-3113917cdb-10c0.zip/node_modules/cli-truncate/",\ + "packageDependencies": [\ + ["cli-truncate", "npm:4.0.0"],\ + ["slice-ansi", "npm:5.0.0"],\ + ["string-width", "npm:7.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["color-convert", [\ + ["npm:2.0.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/color-convert-npm-2.0.1-79730e935b-10c0.zip/node_modules/color-convert/",\ + "packageDependencies": [\ + ["color-convert", "npm:2.0.1"],\ + ["color-name", "npm:1.1.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["color-name", [\ + ["npm:1.1.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/color-name-npm-1.1.4-025792b0ea-10c0.zip/node_modules/color-name/",\ + "packageDependencies": [\ + ["color-name", "npm:1.1.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["colorette", [\ + ["npm:2.0.20", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/colorette-npm-2.0.20-692d428726-10c0.zip/node_modules/colorette/",\ + "packageDependencies": [\ + ["colorette", "npm:2.0.20"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["commander", [\ + ["npm:13.1.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/commander-npm-13.1.0-bdbbfaaf9d-10c0.zip/node_modules/commander/",\ + "packageDependencies": [\ + ["commander", "npm:13.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["concat-map", [\ + ["npm:0.0.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/concat-map-npm-0.0.1-85a921b7ee-10c0.zip/node_modules/concat-map/",\ + "packageDependencies": [\ + ["concat-map", "npm:0.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["cross-spawn", [\ + ["npm:7.0.6", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/cross-spawn-npm-7.0.6-264bddf921-10c0.zip/node_modules/cross-spawn/",\ + "packageDependencies": [\ + ["cross-spawn", "npm:7.0.6"],\ + ["path-key", "npm:3.1.1"],\ + ["shebang-command", "npm:2.0.0"],\ + ["which", "npm:2.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["debug", [\ + ["npm:4.4.3", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/debug-npm-4.4.3-0105c6123a-10c0.zip/node_modules/debug/",\ + "packageDependencies": [\ + ["debug", "npm:4.4.3"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:5de9f8ff0d4128b8d5bbd52c1e252e7e7f0420f4b53cf63e45919981984854b91f8a057dfa32073fc3af76a734ef0c239531e2abb4b80367de6bf769365617ce#npm:4.4.3", {\ + "packageLocation": "./.yarn/__virtual__/debug-virtual-e9d2e66516/5/C:/Users/solov/AppData/Local/Yarn/Berry/cache/debug-npm-4.4.3-0105c6123a-10c0.zip/node_modules/debug/",\ + "packageDependencies": [\ + ["@types/supports-color", null],\ + ["debug", "virtual:5de9f8ff0d4128b8d5bbd52c1e252e7e7f0420f4b53cf63e45919981984854b91f8a057dfa32073fc3af76a734ef0c239531e2abb4b80367de6bf769365617ce#npm:4.4.3"],\ + ["ms", "npm:2.1.3"],\ + ["supports-color", null]\ + ],\ + "packagePeers": [\ + "@types/supports-color",\ + "supports-color"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["deep-eql", [\ + ["npm:5.0.2", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/deep-eql-npm-5.0.2-3bce58289f-10c0.zip/node_modules/deep-eql/",\ + "packageDependencies": [\ + ["deep-eql", "npm:5.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["deep-is", [\ + ["npm:0.1.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/deep-is-npm-0.1.4-88938b5a67-10c0.zip/node_modules/deep-is/",\ + "packageDependencies": [\ + ["deep-is", "npm:0.1.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["emoji-regex", [\ + ["npm:10.6.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/emoji-regex-npm-10.6.0-c849a5dbe0-10c0.zip/node_modules/emoji-regex/",\ + "packageDependencies": [\ + ["emoji-regex", "npm:10.6.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["env-paths", [\ + ["npm:2.2.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/env-paths-npm-2.2.1-7c7577428c-10c0.zip/node_modules/env-paths/",\ + "packageDependencies": [\ + ["env-paths", "npm:2.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["environment", [\ + ["npm:1.1.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/environment-npm-1.1.0-3f2409b698-10c0.zip/node_modules/environment/",\ + "packageDependencies": [\ + ["environment", "npm:1.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["es-module-lexer", [\ + ["npm:1.7.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/es-module-lexer-npm-1.7.0-456b47a08a-10c0.zip/node_modules/es-module-lexer/",\ + "packageDependencies": [\ + ["es-module-lexer", "npm:1.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["esbuild", [\ + ["npm:0.27.7", {\ + "packageLocation": "./.yarn/unplugged/esbuild-npm-0.27.7-53394ab392/node_modules/esbuild/",\ + "packageDependencies": [\ + ["@esbuild/aix-ppc64", "npm:0.27.7"],\ + ["@esbuild/android-arm", "npm:0.27.7"],\ + ["@esbuild/android-arm64", "npm:0.27.7"],\ + ["@esbuild/android-x64", "npm:0.27.7"],\ + ["@esbuild/darwin-arm64", "npm:0.27.7"],\ + ["@esbuild/darwin-x64", "npm:0.27.7"],\ + ["@esbuild/freebsd-arm64", "npm:0.27.7"],\ + ["@esbuild/freebsd-x64", "npm:0.27.7"],\ + ["@esbuild/linux-arm", "npm:0.27.7"],\ + ["@esbuild/linux-arm64", "npm:0.27.7"],\ + ["@esbuild/linux-ia32", "npm:0.27.7"],\ + ["@esbuild/linux-loong64", "npm:0.27.7"],\ + ["@esbuild/linux-mips64el", "npm:0.27.7"],\ + ["@esbuild/linux-ppc64", "npm:0.27.7"],\ + ["@esbuild/linux-riscv64", "npm:0.27.7"],\ + ["@esbuild/linux-s390x", "npm:0.27.7"],\ + ["@esbuild/linux-x64", "npm:0.27.7"],\ + ["@esbuild/netbsd-arm64", "npm:0.27.7"],\ + ["@esbuild/netbsd-x64", "npm:0.27.7"],\ + ["@esbuild/openbsd-arm64", "npm:0.27.7"],\ + ["@esbuild/openbsd-x64", "npm:0.27.7"],\ + ["@esbuild/openharmony-arm64", "npm:0.27.7"],\ + ["@esbuild/sunos-x64", "npm:0.27.7"],\ + ["@esbuild/win32-arm64", "npm:0.27.7"],\ + ["@esbuild/win32-ia32", "npm:0.27.7"],\ + ["@esbuild/win32-x64", "npm:0.27.7"],\ + ["esbuild", "npm:0.27.7"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:0.28.0", {\ + "packageLocation": "./.yarn/unplugged/esbuild-npm-0.28.0-a0b033d09e/node_modules/esbuild/",\ + "packageDependencies": [\ + ["@esbuild/aix-ppc64", "npm:0.28.0"],\ + ["@esbuild/android-arm", "npm:0.28.0"],\ + ["@esbuild/android-arm64", "npm:0.28.0"],\ + ["@esbuild/android-x64", "npm:0.28.0"],\ + ["@esbuild/darwin-arm64", "npm:0.28.0"],\ + ["@esbuild/darwin-x64", "npm:0.28.0"],\ + ["@esbuild/freebsd-arm64", "npm:0.28.0"],\ + ["@esbuild/freebsd-x64", "npm:0.28.0"],\ + ["@esbuild/linux-arm", "npm:0.28.0"],\ + ["@esbuild/linux-arm64", "npm:0.28.0"],\ + ["@esbuild/linux-ia32", "npm:0.28.0"],\ + ["@esbuild/linux-loong64", "npm:0.28.0"],\ + ["@esbuild/linux-mips64el", "npm:0.28.0"],\ + ["@esbuild/linux-ppc64", "npm:0.28.0"],\ + ["@esbuild/linux-riscv64", "npm:0.28.0"],\ + ["@esbuild/linux-s390x", "npm:0.28.0"],\ + ["@esbuild/linux-x64", "npm:0.28.0"],\ + ["@esbuild/netbsd-arm64", "npm:0.28.0"],\ + ["@esbuild/netbsd-x64", "npm:0.28.0"],\ + ["@esbuild/openbsd-arm64", "npm:0.28.0"],\ + ["@esbuild/openbsd-x64", "npm:0.28.0"],\ + ["@esbuild/openharmony-arm64", "npm:0.28.0"],\ + ["@esbuild/sunos-x64", "npm:0.28.0"],\ + ["@esbuild/win32-arm64", "npm:0.28.0"],\ + ["@esbuild/win32-ia32", "npm:0.28.0"],\ + ["@esbuild/win32-x64", "npm:0.28.0"],\ + ["esbuild", "npm:0.28.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["escape-string-regexp", [\ + ["npm:4.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/escape-string-regexp-npm-4.0.0-4b531d8d59-10c0.zip/node_modules/escape-string-regexp/",\ + "packageDependencies": [\ + ["escape-string-regexp", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["eslint", [\ + ["npm:9.39.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/eslint-npm-9.39.4-81a84865c0-10c0.zip/node_modules/eslint/",\ + "packageDependencies": [\ + ["eslint", "npm:9.39.4"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:fb40b28bf5dd657a89e2a490e6cb230984558896db8ba52f5d3d2b23720eb08f5628820d022e92dfac9e2146d57f850a209b45e09bf2802fb7fa55ce7d579121#npm:9.39.4", {\ + "packageLocation": "./.yarn/__virtual__/eslint-virtual-6439e89f25/5/C:/Users/solov/AppData/Local/Yarn/Berry/cache/eslint-npm-9.39.4-81a84865c0-10c0.zip/node_modules/eslint/",\ + "packageDependencies": [\ + ["@eslint-community/eslint-utils", "virtual:6439e89f252049757932c683c25d134f34c167642350e64deb97abfa9a92a2a7ab1554e686e544d5597aa8ea41bb40ffa3574d5e2fd90b2f71baee6f79182a3a#npm:4.9.1"],\ + ["@eslint-community/regexpp", "npm:4.12.2"],\ + ["@eslint/config-array", "npm:0.21.2"],\ + ["@eslint/config-helpers", "npm:0.4.2"],\ + ["@eslint/core", "npm:0.17.0"],\ + ["@eslint/eslintrc", "npm:3.3.5"],\ + ["@eslint/js", "npm:9.39.4"],\ + ["@eslint/plugin-kit", "npm:0.4.1"],\ + ["@humanfs/node", "npm:0.16.8"],\ + ["@humanwhocodes/module-importer", "npm:1.0.1"],\ + ["@humanwhocodes/retry", "npm:0.4.3"],\ + ["@types/estree", "npm:1.0.9"],\ + ["@types/jiti", null],\ + ["ajv", "npm:6.15.0"],\ + ["chalk", "npm:4.1.2"],\ + ["cross-spawn", "npm:7.0.6"],\ + ["debug", "virtual:5de9f8ff0d4128b8d5bbd52c1e252e7e7f0420f4b53cf63e45919981984854b91f8a057dfa32073fc3af76a734ef0c239531e2abb4b80367de6bf769365617ce#npm:4.4.3"],\ + ["escape-string-regexp", "npm:4.0.0"],\ + ["eslint", "virtual:fb40b28bf5dd657a89e2a490e6cb230984558896db8ba52f5d3d2b23720eb08f5628820d022e92dfac9e2146d57f850a209b45e09bf2802fb7fa55ce7d579121#npm:9.39.4"],\ + ["eslint-scope", "npm:8.4.0"],\ + ["eslint-visitor-keys", "npm:4.2.1"],\ + ["espree", "npm:10.4.0"],\ + ["esquery", "npm:1.7.0"],\ + ["esutils", "npm:2.0.3"],\ + ["fast-deep-equal", "npm:3.1.3"],\ + ["file-entry-cache", "npm:8.0.0"],\ + ["find-up", "npm:5.0.0"],\ + ["glob-parent", "npm:6.0.2"],\ + ["ignore", "npm:5.3.2"],\ + ["imurmurhash", "npm:0.1.4"],\ + ["is-glob", "npm:4.0.3"],\ + ["jiti", null],\ + ["json-stable-stringify-without-jsonify", "npm:1.0.1"],\ + ["lodash.merge", "npm:4.6.2"],\ + ["minimatch", "npm:3.1.5"],\ + ["natural-compare", "npm:1.4.0"],\ + ["optionator", "npm:0.9.4"]\ + ],\ + "packagePeers": [\ + "@types/jiti",\ + "jiti"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["eslint-config-prettier", [\ + ["npm:10.1.8", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/eslint-config-prettier-npm-10.1.8-c1c834370f-10c0.zip/node_modules/eslint-config-prettier/",\ + "packageDependencies": [\ + ["eslint-config-prettier", "npm:10.1.8"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:fb40b28bf5dd657a89e2a490e6cb230984558896db8ba52f5d3d2b23720eb08f5628820d022e92dfac9e2146d57f850a209b45e09bf2802fb7fa55ce7d579121#npm:10.1.8", {\ + "packageLocation": "./.yarn/__virtual__/eslint-config-prettier-virtual-dc1b1633cf/5/C:/Users/solov/AppData/Local/Yarn/Berry/cache/eslint-config-prettier-npm-10.1.8-c1c834370f-10c0.zip/node_modules/eslint-config-prettier/",\ + "packageDependencies": [\ + ["@types/eslint", null],\ + ["eslint", "virtual:fb40b28bf5dd657a89e2a490e6cb230984558896db8ba52f5d3d2b23720eb08f5628820d022e92dfac9e2146d57f850a209b45e09bf2802fb7fa55ce7d579121#npm:9.39.4"],\ + ["eslint-config-prettier", "virtual:fb40b28bf5dd657a89e2a490e6cb230984558896db8ba52f5d3d2b23720eb08f5628820d022e92dfac9e2146d57f850a209b45e09bf2802fb7fa55ce7d579121#npm:10.1.8"]\ + ],\ + "packagePeers": [\ + "@types/eslint",\ + "eslint"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["eslint-plugin-prettier", [\ + ["npm:5.5.5", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/eslint-plugin-prettier-npm-5.5.5-60d71e7039-10c0.zip/node_modules/eslint-plugin-prettier/",\ + "packageDependencies": [\ + ["eslint-plugin-prettier", "npm:5.5.5"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:fb40b28bf5dd657a89e2a490e6cb230984558896db8ba52f5d3d2b23720eb08f5628820d022e92dfac9e2146d57f850a209b45e09bf2802fb7fa55ce7d579121#npm:5.5.5", {\ + "packageLocation": "./.yarn/__virtual__/eslint-plugin-prettier-virtual-0f8ef6faa8/5/C:/Users/solov/AppData/Local/Yarn/Berry/cache/eslint-plugin-prettier-npm-5.5.5-60d71e7039-10c0.zip/node_modules/eslint-plugin-prettier/",\ + "packageDependencies": [\ + ["@types/eslint", null],\ + ["@types/eslint-config-prettier", null],\ + ["@types/prettier", null],\ + ["eslint", "virtual:fb40b28bf5dd657a89e2a490e6cb230984558896db8ba52f5d3d2b23720eb08f5628820d022e92dfac9e2146d57f850a209b45e09bf2802fb7fa55ce7d579121#npm:9.39.4"],\ + ["eslint-config-prettier", "virtual:fb40b28bf5dd657a89e2a490e6cb230984558896db8ba52f5d3d2b23720eb08f5628820d022e92dfac9e2146d57f850a209b45e09bf2802fb7fa55ce7d579121#npm:10.1.8"],\ + ["eslint-plugin-prettier", "virtual:fb40b28bf5dd657a89e2a490e6cb230984558896db8ba52f5d3d2b23720eb08f5628820d022e92dfac9e2146d57f850a209b45e09bf2802fb7fa55ce7d579121#npm:5.5.5"],\ + ["prettier", "npm:3.8.3"],\ + ["prettier-linter-helpers", "npm:1.0.1"],\ + ["synckit", "npm:0.11.12"]\ + ],\ + "packagePeers": [\ + "@types/eslint-config-prettier",\ + "@types/eslint",\ + "@types/prettier",\ + "eslint-config-prettier",\ + "eslint",\ + "prettier"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["eslint-scope", [\ + ["npm:8.4.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/eslint-scope-npm-8.4.0-8ed12feb40-10c0.zip/node_modules/eslint-scope/",\ + "packageDependencies": [\ + ["eslint-scope", "npm:8.4.0"],\ + ["esrecurse", "npm:4.3.0"],\ + ["estraverse", "npm:5.3.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["eslint-visitor-keys", [\ + ["npm:3.4.3", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/eslint-visitor-keys-npm-3.4.3-a356ac7e46-10c0.zip/node_modules/eslint-visitor-keys/",\ + "packageDependencies": [\ + ["eslint-visitor-keys", "npm:3.4.3"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:4.2.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/eslint-visitor-keys-npm-4.2.1-435d5be22a-10c0.zip/node_modules/eslint-visitor-keys/",\ + "packageDependencies": [\ + ["eslint-visitor-keys", "npm:4.2.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:5.0.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/eslint-visitor-keys-npm-5.0.1-30a44b062b-10c0.zip/node_modules/eslint-visitor-keys/",\ + "packageDependencies": [\ + ["eslint-visitor-keys", "npm:5.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["espree", [\ + ["npm:10.4.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/espree-npm-10.4.0-9633b00e55-10c0.zip/node_modules/espree/",\ + "packageDependencies": [\ + ["acorn", "npm:8.16.0"],\ + ["acorn-jsx", "virtual:9633b00e55c5aebf81b0127f50addd44705c175a47a287258963782da8f9f4e66c2da6640a60ed2826e19f024f73cd554a58729ee1644f93800bbd0d7b7ddd79#npm:5.3.2"],\ + ["eslint-visitor-keys", "npm:4.2.1"],\ + ["espree", "npm:10.4.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["esquery", [\ + ["npm:1.7.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/esquery-npm-1.7.0-c1e8da438a-10c0.zip/node_modules/esquery/",\ + "packageDependencies": [\ + ["esquery", "npm:1.7.0"],\ + ["estraverse", "npm:5.3.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["esrecurse", [\ + ["npm:4.3.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/esrecurse-npm-4.3.0-10b86a887a-10c0.zip/node_modules/esrecurse/",\ + "packageDependencies": [\ + ["esrecurse", "npm:4.3.0"],\ + ["estraverse", "npm:5.3.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["estraverse", [\ + ["npm:5.3.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/estraverse-npm-5.3.0-03284f8f63-10c0.zip/node_modules/estraverse/",\ + "packageDependencies": [\ + ["estraverse", "npm:5.3.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["estree-walker", [\ + ["npm:3.0.3", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/estree-walker-npm-3.0.3-0372979673-10c0.zip/node_modules/estree-walker/",\ + "packageDependencies": [\ + ["@types/estree", "npm:1.0.9"],\ + ["estree-walker", "npm:3.0.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["esutils", [\ + ["npm:2.0.3", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/esutils-npm-2.0.3-f865beafd5-10c0.zip/node_modules/esutils/",\ + "packageDependencies": [\ + ["esutils", "npm:2.0.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["eventemitter3", [\ + ["npm:5.0.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/eventemitter3-npm-5.0.4-012eae30d7-10c0.zip/node_modules/eventemitter3/",\ + "packageDependencies": [\ + ["eventemitter3", "npm:5.0.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["execa", [\ + ["npm:8.0.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/execa-npm-8.0.1-0211bd404c-10c0.zip/node_modules/execa/",\ + "packageDependencies": [\ + ["cross-spawn", "npm:7.0.6"],\ + ["execa", "npm:8.0.1"],\ + ["get-stream", "npm:8.0.1"],\ + ["human-signals", "npm:5.0.0"],\ + ["is-stream", "npm:3.0.0"],\ + ["merge-stream", "npm:2.0.0"],\ + ["npm-run-path", "npm:5.3.0"],\ + ["onetime", "npm:6.0.0"],\ + ["signal-exit", "npm:4.1.0"],\ + ["strip-final-newline", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["expect-type", [\ + ["npm:1.3.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/expect-type-npm-1.3.0-95a4384745-10c0.zip/node_modules/expect-type/",\ + "packageDependencies": [\ + ["expect-type", "npm:1.3.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["exponential-backoff", [\ + ["npm:3.1.3", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/exponential-backoff-npm-3.1.3-28be78d98e-10c0.zip/node_modules/exponential-backoff/",\ + "packageDependencies": [\ + ["exponential-backoff", "npm:3.1.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["fast-deep-equal", [\ + ["npm:3.1.3", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/fast-deep-equal-npm-3.1.3-790edcfcf5-10c0.zip/node_modules/fast-deep-equal/",\ + "packageDependencies": [\ + ["fast-deep-equal", "npm:3.1.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["fast-diff", [\ + ["npm:1.3.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/fast-diff-npm-1.3.0-9f19e3b743-10c0.zip/node_modules/fast-diff/",\ + "packageDependencies": [\ + ["fast-diff", "npm:1.3.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["fast-json-stable-stringify", [\ + ["npm:2.1.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/fast-json-stable-stringify-npm-2.1.0-02e8905fda-10c0.zip/node_modules/fast-json-stable-stringify/",\ + "packageDependencies": [\ + ["fast-json-stable-stringify", "npm:2.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["fast-levenshtein", [\ + ["npm:2.0.6", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/fast-levenshtein-npm-2.0.6-fcd74b8df5-10c0.zip/node_modules/fast-levenshtein/",\ + "packageDependencies": [\ + ["fast-levenshtein", "npm:2.0.6"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["fdir", [\ + ["npm:6.5.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/fdir-npm-6.5.0-8814a0dec7-10c0.zip/node_modules/fdir/",\ + "packageDependencies": [\ + ["fdir", "npm:6.5.0"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:102914a73b14bffc325c2cdf701d5ae063b57309ea75829f709b4273a7ea0d0e11784f2d6f2635e156595ab235d9a24869844d54ab73f4ad81d3a7b01b185214#npm:6.5.0", {\ + "packageLocation": "./.yarn/__virtual__/fdir-virtual-c9b12f80ea/5/C:/Users/solov/AppData/Local/Yarn/Berry/cache/fdir-npm-6.5.0-8814a0dec7-10c0.zip/node_modules/fdir/",\ + "packageDependencies": [\ + ["@types/picomatch", null],\ + ["fdir", "virtual:102914a73b14bffc325c2cdf701d5ae063b57309ea75829f709b4273a7ea0d0e11784f2d6f2635e156595ab235d9a24869844d54ab73f4ad81d3a7b01b185214#npm:6.5.0"],\ + ["picomatch", "npm:4.0.4"]\ + ],\ + "packagePeers": [\ + "@types/picomatch",\ + "picomatch"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["file-entry-cache", [\ + ["npm:8.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/file-entry-cache-npm-8.0.0-5b09d19a83-10c0.zip/node_modules/file-entry-cache/",\ + "packageDependencies": [\ + ["file-entry-cache", "npm:8.0.0"],\ + ["flat-cache", "npm:4.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["fill-range", [\ + ["npm:7.1.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/fill-range-npm-7.1.1-bf491486db-10c0.zip/node_modules/fill-range/",\ + "packageDependencies": [\ + ["fill-range", "npm:7.1.1"],\ + ["to-regex-range", "npm:5.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["find-up", [\ + ["npm:5.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/find-up-npm-5.0.0-e03e9b796d-10c0.zip/node_modules/find-up/",\ + "packageDependencies": [\ + ["find-up", "npm:5.0.0"],\ + ["locate-path", "npm:6.0.0"],\ + ["path-exists", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["flat-cache", [\ + ["npm:4.0.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/flat-cache-npm-4.0.1-12bf2455f7-10c0.zip/node_modules/flat-cache/",\ + "packageDependencies": [\ + ["flat-cache", "npm:4.0.1"],\ + ["flatted", "npm:3.4.2"],\ + ["keyv", "npm:4.5.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["flatted", [\ + ["npm:3.4.2", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/flatted-npm-3.4.2-e32280259b-10c0.zip/node_modules/flatted/",\ + "packageDependencies": [\ + ["flatted", "npm:3.4.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["fsevents", [\ + ["patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1", {\ + "packageLocation": "./.yarn/unplugged/fsevents-patch-6b67494872/node_modules/fsevents/",\ + "packageDependencies": [\ + ["fsevents", "patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1"],\ + ["node-gyp", "npm:12.3.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["get-east-asian-width", [\ + ["npm:1.6.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/get-east-asian-width-npm-1.6.0-1350227ead-10c0.zip/node_modules/get-east-asian-width/",\ + "packageDependencies": [\ + ["get-east-asian-width", "npm:1.6.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["get-stream", [\ + ["npm:8.0.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/get-stream-npm-8.0.1-c921b4840e-10c0.zip/node_modules/get-stream/",\ + "packageDependencies": [\ + ["get-stream", "npm:8.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["glob-parent", [\ + ["npm:6.0.2", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/glob-parent-npm-6.0.2-2cbef12738-10c0.zip/node_modules/glob-parent/",\ + "packageDependencies": [\ + ["glob-parent", "npm:6.0.2"],\ + ["is-glob", "npm:4.0.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["globals", [\ + ["npm:14.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/globals-npm-14.0.0-5fc3d8d5da-10c0.zip/node_modules/globals/",\ + "packageDependencies": [\ + ["globals", "npm:14.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["graceful-fs", [\ + ["npm:4.2.11", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/graceful-fs-npm-4.2.11-24bb648a68-10c0.zip/node_modules/graceful-fs/",\ + "packageDependencies": [\ + ["graceful-fs", "npm:4.2.11"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["has-flag", [\ + ["npm:4.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/has-flag-npm-4.0.0-32af9f0536-10c0.zip/node_modules/has-flag/",\ + "packageDependencies": [\ + ["has-flag", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["human-signals", [\ + ["npm:5.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/human-signals-npm-5.0.0-ed25a9f58c-10c0.zip/node_modules/human-signals/",\ + "packageDependencies": [\ + ["human-signals", "npm:5.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["husky", [\ + ["npm:9.1.7", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/husky-npm-9.1.7-5b02eaabc4-10c0.zip/node_modules/husky/",\ + "packageDependencies": [\ + ["husky", "npm:9.1.7"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ignore", [\ + ["npm:5.3.2", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/ignore-npm-5.3.2-346d3ba017-10c0.zip/node_modules/ignore/",\ + "packageDependencies": [\ + ["ignore", "npm:5.3.2"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:7.0.5", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/ignore-npm-7.0.5-dea34ee430-10c0.zip/node_modules/ignore/",\ + "packageDependencies": [\ + ["ignore", "npm:7.0.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["import-fresh", [\ + ["npm:3.3.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/import-fresh-npm-3.3.1-1916794950-10c0.zip/node_modules/import-fresh/",\ + "packageDependencies": [\ + ["import-fresh", "npm:3.3.1"],\ + ["parent-module", "npm:1.0.1"],\ + ["resolve-from", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["imurmurhash", [\ + ["npm:0.1.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/imurmurhash-npm-0.1.4-610c5068a0-10c0.zip/node_modules/imurmurhash/",\ + "packageDependencies": [\ + ["imurmurhash", "npm:0.1.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-extglob", [\ + ["npm:2.1.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/is-extglob-npm-2.1.1-0870ea68b5-10c0.zip/node_modules/is-extglob/",\ + "packageDependencies": [\ + ["is-extglob", "npm:2.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-fullwidth-code-point", [\ + ["npm:4.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/is-fullwidth-code-point-npm-4.0.0-848488b60d-10c0.zip/node_modules/is-fullwidth-code-point/",\ + "packageDependencies": [\ + ["is-fullwidth-code-point", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:5.1.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/is-fullwidth-code-point-npm-5.1.0-4eb5872a79-10c0.zip/node_modules/is-fullwidth-code-point/",\ + "packageDependencies": [\ + ["get-east-asian-width", "npm:1.6.0"],\ + ["is-fullwidth-code-point", "npm:5.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-glob", [\ + ["npm:4.0.3", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/is-glob-npm-4.0.3-cb87bf1bdb-10c0.zip/node_modules/is-glob/",\ + "packageDependencies": [\ + ["is-extglob", "npm:2.1.1"],\ + ["is-glob", "npm:4.0.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-number", [\ + ["npm:7.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/is-number-npm-7.0.0-060086935c-10c0.zip/node_modules/is-number/",\ + "packageDependencies": [\ + ["is-number", "npm:7.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-stream", [\ + ["npm:3.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/is-stream-npm-3.0.0-a77ac9a62e-10c0.zip/node_modules/is-stream/",\ + "packageDependencies": [\ + ["is-stream", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["isexe", [\ + ["npm:2.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/isexe-npm-2.0.0-b58870bd2e-10c0.zip/node_modules/isexe/",\ + "packageDependencies": [\ + ["isexe", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:4.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/isexe-npm-4.0.0-588229ad74-10c0.zip/node_modules/isexe/",\ + "packageDependencies": [\ + ["isexe", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["js-tokens", [\ + ["npm:9.0.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/js-tokens-npm-9.0.1-3ed793c0c1-10c0.zip/node_modules/js-tokens/",\ + "packageDependencies": [\ + ["js-tokens", "npm:9.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["js-yaml", [\ + ["npm:4.1.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/js-yaml-npm-4.1.1-86ec786790-10c0.zip/node_modules/js-yaml/",\ + "packageDependencies": [\ + ["argparse", "npm:2.0.1"],\ + ["js-yaml", "npm:4.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["json-buffer", [\ + ["npm:3.0.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/json-buffer-npm-3.0.1-f8f6d20603-10c0.zip/node_modules/json-buffer/",\ + "packageDependencies": [\ + ["json-buffer", "npm:3.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["json-schema-traverse", [\ + ["npm:0.4.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/json-schema-traverse-npm-0.4.1-4759091693-10c0.zip/node_modules/json-schema-traverse/",\ + "packageDependencies": [\ + ["json-schema-traverse", "npm:0.4.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["json-stable-stringify-without-jsonify", [\ + ["npm:1.0.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/json-stable-stringify-without-jsonify-npm-1.0.1-b65772b28b-10c0.zip/node_modules/json-stable-stringify-without-jsonify/",\ + "packageDependencies": [\ + ["json-stable-stringify-without-jsonify", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["keyv", [\ + ["npm:4.5.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/keyv-npm-4.5.4-4c8e2cf7f7-10c0.zip/node_modules/keyv/",\ + "packageDependencies": [\ + ["json-buffer", "npm:3.0.1"],\ + ["keyv", "npm:4.5.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["levn", [\ + ["npm:0.4.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/levn-npm-0.4.1-d183b2d7bb-10c0.zip/node_modules/levn/",\ + "packageDependencies": [\ + ["levn", "npm:0.4.1"],\ + ["prelude-ls", "npm:1.2.1"],\ + ["type-check", "npm:0.4.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lilconfig", [\ + ["npm:3.1.3", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/lilconfig-npm-3.1.3-74a77377bb-10c0.zip/node_modules/lilconfig/",\ + "packageDependencies": [\ + ["lilconfig", "npm:3.1.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lint-staged", [\ + ["npm:15.5.2", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/lint-staged-npm-15.5.2-5de9f8ff0d-10c0.zip/node_modules/lint-staged/",\ + "packageDependencies": [\ + ["chalk", "npm:5.6.2"],\ + ["commander", "npm:13.1.0"],\ + ["debug", "virtual:5de9f8ff0d4128b8d5bbd52c1e252e7e7f0420f4b53cf63e45919981984854b91f8a057dfa32073fc3af76a734ef0c239531e2abb4b80367de6bf769365617ce#npm:4.4.3"],\ + ["execa", "npm:8.0.1"],\ + ["lilconfig", "npm:3.1.3"],\ + ["lint-staged", "npm:15.5.2"],\ + ["listr2", "npm:8.3.3"],\ + ["micromatch", "npm:4.0.8"],\ + ["pidtree", "npm:0.6.0"],\ + ["string-argv", "npm:0.3.2"],\ + ["yaml", "npm:2.9.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["listr2", [\ + ["npm:8.3.3", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/listr2-npm-8.3.3-378fa43619-10c0.zip/node_modules/listr2/",\ + "packageDependencies": [\ + ["cli-truncate", "npm:4.0.0"],\ + ["colorette", "npm:2.0.20"],\ + ["eventemitter3", "npm:5.0.4"],\ + ["listr2", "npm:8.3.3"],\ + ["log-update", "npm:6.1.0"],\ + ["rfdc", "npm:1.4.1"],\ + ["wrap-ansi", "npm:9.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["locate-path", [\ + ["npm:6.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/locate-path-npm-6.0.0-06a1e4c528-10c0.zip/node_modules/locate-path/",\ + "packageDependencies": [\ + ["locate-path", "npm:6.0.0"],\ + ["p-locate", "npm:5.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lodash.merge", [\ + ["npm:4.6.2", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/lodash.merge-npm-4.6.2-77cb4416bf-10c0.zip/node_modules/lodash.merge/",\ + "packageDependencies": [\ + ["lodash.merge", "npm:4.6.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["log-update", [\ + ["npm:6.1.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/log-update-npm-6.1.0-2ca9435417-10c0.zip/node_modules/log-update/",\ + "packageDependencies": [\ + ["ansi-escapes", "npm:7.3.0"],\ + ["cli-cursor", "npm:5.0.0"],\ + ["log-update", "npm:6.1.0"],\ + ["slice-ansi", "npm:7.1.2"],\ + ["strip-ansi", "npm:7.2.0"],\ + ["wrap-ansi", "npm:9.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["loupe", [\ + ["npm:3.2.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/loupe-npm-3.2.1-a8f491982f-10c0.zip/node_modules/loupe/",\ + "packageDependencies": [\ + ["loupe", "npm:3.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["magic-string", [\ + ["npm:0.30.21", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/magic-string-npm-0.30.21-9a226cb21e-10c0.zip/node_modules/magic-string/",\ + "packageDependencies": [\ + ["@jridgewell/sourcemap-codec", "npm:1.5.5"],\ + ["magic-string", "npm:0.30.21"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["merge-stream", [\ + ["npm:2.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/merge-stream-npm-2.0.0-2ac83efea5-10c0.zip/node_modules/merge-stream/",\ + "packageDependencies": [\ + ["merge-stream", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["micromatch", [\ + ["npm:4.0.8", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/micromatch-npm-4.0.8-c9570e4aca-10c0.zip/node_modules/micromatch/",\ + "packageDependencies": [\ + ["braces", "npm:3.0.3"],\ + ["micromatch", "npm:4.0.8"],\ + ["picomatch", "npm:2.3.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["mimic-fn", [\ + ["npm:4.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/mimic-fn-npm-4.0.0-feaeda79f7-10c0.zip/node_modules/mimic-fn/",\ + "packageDependencies": [\ + ["mimic-fn", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["mimic-function", [\ + ["npm:5.0.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/mimic-function-npm-5.0.1-5078456e31-10c0.zip/node_modules/mimic-function/",\ + "packageDependencies": [\ + ["mimic-function", "npm:5.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["minimatch", [\ + ["npm:10.2.5", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/minimatch-npm-10.2.5-f1c8297822-10c0.zip/node_modules/minimatch/",\ + "packageDependencies": [\ + ["brace-expansion", "npm:5.0.6"],\ + ["minimatch", "npm:10.2.5"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:3.1.5", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/minimatch-npm-3.1.5-86958baf50-10c0.zip/node_modules/minimatch/",\ + "packageDependencies": [\ + ["brace-expansion", "npm:1.1.14"],\ + ["minimatch", "npm:3.1.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["minipass", [\ + ["npm:7.1.3", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/minipass-npm-7.1.3-b73a16498d-10c0.zip/node_modules/minipass/",\ + "packageDependencies": [\ + ["minipass", "npm:7.1.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["minizlib", [\ + ["npm:3.1.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/minizlib-npm-3.1.0-6680befdba-10c0.zip/node_modules/minizlib/",\ + "packageDependencies": [\ + ["minipass", "npm:7.1.3"],\ + ["minizlib", "npm:3.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ms", [\ + ["npm:2.1.3", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/ms-npm-2.1.3-81ff3cfac1-10c0.zip/node_modules/ms/",\ + "packageDependencies": [\ + ["ms", "npm:2.1.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["nanoid", [\ + ["npm:3.3.12", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/nanoid-npm-3.3.12-41f8e0bb94-10c0.zip/node_modules/nanoid/",\ + "packageDependencies": [\ + ["nanoid", "npm:3.3.12"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["natural-compare", [\ + ["npm:1.4.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/natural-compare-npm-1.4.0-97b75b362d-10c0.zip/node_modules/natural-compare/",\ + "packageDependencies": [\ + ["natural-compare", "npm:1.4.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["node-gyp", [\ + ["npm:12.3.0", {\ + "packageLocation": "./.yarn/unplugged/node-gyp-npm-12.3.0-82a454c18d/node_modules/node-gyp/",\ + "packageDependencies": [\ + ["env-paths", "npm:2.2.1"],\ + ["exponential-backoff", "npm:3.1.3"],\ + ["graceful-fs", "npm:4.2.11"],\ + ["node-gyp", "npm:12.3.0"],\ + ["nopt", "npm:9.0.0"],\ + ["proc-log", "npm:6.1.0"],\ + ["semver", "npm:7.8.1"],\ + ["tar", "npm:7.5.15"],\ + ["tinyglobby", "npm:0.2.16"],\ + ["undici", "npm:6.25.0"],\ + ["which", "npm:6.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["nopt", [\ + ["npm:9.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/nopt-npm-9.0.0-81316ec15c-10c0.zip/node_modules/nopt/",\ + "packageDependencies": [\ + ["abbrev", "npm:4.0.0"],\ + ["nopt", "npm:9.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["npm-run-path", [\ + ["npm:5.3.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/npm-run-path-npm-5.3.0-193efca236-10c0.zip/node_modules/npm-run-path/",\ + "packageDependencies": [\ + ["npm-run-path", "npm:5.3.0"],\ + ["path-key", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["onetime", [\ + ["npm:6.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/onetime-npm-6.0.0-4f3684e29a-10c0.zip/node_modules/onetime/",\ + "packageDependencies": [\ + ["mimic-fn", "npm:4.0.0"],\ + ["onetime", "npm:6.0.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:7.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/onetime-npm-7.0.0-cfdd2a579d-10c0.zip/node_modules/onetime/",\ + "packageDependencies": [\ + ["mimic-function", "npm:5.0.1"],\ + ["onetime", "npm:7.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["optionator", [\ + ["npm:0.9.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/optionator-npm-0.9.4-1f114b00e8-10c0.zip/node_modules/optionator/",\ + "packageDependencies": [\ + ["deep-is", "npm:0.1.4"],\ + ["fast-levenshtein", "npm:2.0.6"],\ + ["levn", "npm:0.4.1"],\ + ["optionator", "npm:0.9.4"],\ + ["prelude-ls", "npm:1.2.1"],\ + ["type-check", "npm:0.4.0"],\ + ["word-wrap", "npm:1.2.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["p-limit", [\ + ["npm:3.1.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/p-limit-npm-3.1.0-05d2ede37f-10c0.zip/node_modules/p-limit/",\ + "packageDependencies": [\ + ["p-limit", "npm:3.1.0"],\ + ["yocto-queue", "npm:0.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["p-locate", [\ + ["npm:5.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/p-locate-npm-5.0.0-92cc7c7a3e-10c0.zip/node_modules/p-locate/",\ + "packageDependencies": [\ + ["p-limit", "npm:3.1.0"],\ + ["p-locate", "npm:5.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["parent-module", [\ + ["npm:1.0.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/parent-module-npm-1.0.1-1fae11b095-10c0.zip/node_modules/parent-module/",\ + "packageDependencies": [\ + ["callsites", "npm:3.1.0"],\ + ["parent-module", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["path-exists", [\ + ["npm:4.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/path-exists-npm-4.0.0-e9e4f63eb0-10c0.zip/node_modules/path-exists/",\ + "packageDependencies": [\ + ["path-exists", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["path-key", [\ + ["npm:3.1.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/path-key-npm-3.1.1-0e66ea8321-10c0.zip/node_modules/path-key/",\ + "packageDependencies": [\ + ["path-key", "npm:3.1.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:4.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/path-key-npm-4.0.0-2bce99f089-10c0.zip/node_modules/path-key/",\ + "packageDependencies": [\ + ["path-key", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["pathe", [\ + ["npm:2.0.3", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/pathe-npm-2.0.3-0924246ee0-10c0.zip/node_modules/pathe/",\ + "packageDependencies": [\ + ["pathe", "npm:2.0.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["pathval", [\ + ["npm:2.0.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/pathval-npm-2.0.1-7fb9ae82ba-10c0.zip/node_modules/pathval/",\ + "packageDependencies": [\ + ["pathval", "npm:2.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["picocolors", [\ + ["npm:1.1.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/picocolors-npm-1.1.1-4fede47cf1-10c0.zip/node_modules/picocolors/",\ + "packageDependencies": [\ + ["picocolors", "npm:1.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["picomatch", [\ + ["npm:2.3.2", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/picomatch-npm-2.3.2-4d85543a37-10c0.zip/node_modules/picomatch/",\ + "packageDependencies": [\ + ["picomatch", "npm:2.3.2"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:4.0.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/picomatch-npm-4.0.4-e82d450244-10c0.zip/node_modules/picomatch/",\ + "packageDependencies": [\ + ["picomatch", "npm:4.0.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["pidtree", [\ + ["npm:0.6.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/pidtree-npm-0.6.0-3d92e16117-10c0.zip/node_modules/pidtree/",\ + "packageDependencies": [\ + ["pidtree", "npm:0.6.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["postcss", [\ + ["npm:8.5.15", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/postcss-npm-8.5.15-8e6eef9b78-10c0.zip/node_modules/postcss/",\ + "packageDependencies": [\ + ["nanoid", "npm:3.3.12"],\ + ["picocolors", "npm:1.1.1"],\ + ["postcss", "npm:8.5.15"],\ + ["source-map-js", "npm:1.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["prelude-ls", [\ + ["npm:1.2.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/prelude-ls-npm-1.2.1-3e4d272a55-10c0.zip/node_modules/prelude-ls/",\ + "packageDependencies": [\ + ["prelude-ls", "npm:1.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["prettier", [\ + ["npm:3.8.3", {\ + "packageLocation": "./.yarn/unplugged/prettier-npm-3.8.3-ecd857a540/node_modules/prettier/",\ + "packageDependencies": [\ + ["prettier", "npm:3.8.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["prettier-linter-helpers", [\ + ["npm:1.0.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/prettier-linter-helpers-npm-1.0.1-269f5b4fc0-10c0.zip/node_modules/prettier-linter-helpers/",\ + "packageDependencies": [\ + ["fast-diff", "npm:1.3.0"],\ + ["prettier-linter-helpers", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["proc-log", [\ + ["npm:6.1.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/proc-log-npm-6.1.0-84e609b3f4-10c0.zip/node_modules/proc-log/",\ + "packageDependencies": [\ + ["proc-log", "npm:6.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["punycode", [\ + ["npm:2.3.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/punycode-npm-2.3.1-97543c420d-10c0.zip/node_modules/punycode/",\ + "packageDependencies": [\ + ["punycode", "npm:2.3.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["resolve-from", [\ + ["npm:4.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/resolve-from-npm-4.0.0-f758ec21bf-10c0.zip/node_modules/resolve-from/",\ + "packageDependencies": [\ + ["resolve-from", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["restore-cursor", [\ + ["npm:5.1.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/restore-cursor-npm-5.1.0-b8fd1128bf-10c0.zip/node_modules/restore-cursor/",\ + "packageDependencies": [\ + ["onetime", "npm:7.0.0"],\ + ["restore-cursor", "npm:5.1.0"],\ + ["signal-exit", "npm:4.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["rfdc", [\ + ["npm:1.4.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/rfdc-npm-1.4.1-1a1c63d052-10c0.zip/node_modules/rfdc/",\ + "packageDependencies": [\ + ["rfdc", "npm:1.4.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["rollup", [\ + ["npm:4.60.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/rollup-npm-4.60.4-e335ee554f-10c0.zip/node_modules/rollup/",\ + "packageDependencies": [\ + ["@rollup/rollup-android-arm-eabi", "npm:4.60.4"],\ + ["@rollup/rollup-android-arm64", "npm:4.60.4"],\ + ["@rollup/rollup-darwin-arm64", "npm:4.60.4"],\ + ["@rollup/rollup-darwin-x64", "npm:4.60.4"],\ + ["@rollup/rollup-freebsd-arm64", "npm:4.60.4"],\ + ["@rollup/rollup-freebsd-x64", "npm:4.60.4"],\ + ["@rollup/rollup-linux-arm-gnueabihf", "npm:4.60.4"],\ + ["@rollup/rollup-linux-arm-musleabihf", "npm:4.60.4"],\ + ["@rollup/rollup-linux-arm64-gnu", "npm:4.60.4"],\ + ["@rollup/rollup-linux-arm64-musl", "npm:4.60.4"],\ + ["@rollup/rollup-linux-loong64-gnu", "npm:4.60.4"],\ + ["@rollup/rollup-linux-loong64-musl", "npm:4.60.4"],\ + ["@rollup/rollup-linux-ppc64-gnu", "npm:4.60.4"],\ + ["@rollup/rollup-linux-ppc64-musl", "npm:4.60.4"],\ + ["@rollup/rollup-linux-riscv64-gnu", "npm:4.60.4"],\ + ["@rollup/rollup-linux-riscv64-musl", "npm:4.60.4"],\ + ["@rollup/rollup-linux-s390x-gnu", "npm:4.60.4"],\ + ["@rollup/rollup-linux-x64-gnu", "npm:4.60.4"],\ + ["@rollup/rollup-linux-x64-musl", "npm:4.60.4"],\ + ["@rollup/rollup-openbsd-x64", "npm:4.60.4"],\ + ["@rollup/rollup-openharmony-arm64", "npm:4.60.4"],\ + ["@rollup/rollup-win32-arm64-msvc", "npm:4.60.4"],\ + ["@rollup/rollup-win32-ia32-msvc", "npm:4.60.4"],\ + ["@rollup/rollup-win32-x64-gnu", "npm:4.60.4"],\ + ["@rollup/rollup-win32-x64-msvc", "npm:4.60.4"],\ + ["@types/estree", "npm:1.0.8"],\ + ["fsevents", "patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1"],\ + ["rollup", "npm:4.60.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["rpgsaga", [\ + ["workspace:.", {\ + "packageLocation": "./",\ + "packageDependencies": [\ + ["@eslint/js", "npm:9.39.4"],\ + ["@types/node", "npm:22.19.19"],\ + ["eslint", "virtual:fb40b28bf5dd657a89e2a490e6cb230984558896db8ba52f5d3d2b23720eb08f5628820d022e92dfac9e2146d57f850a209b45e09bf2802fb7fa55ce7d579121#npm:9.39.4"],\ + ["eslint-config-prettier", "virtual:fb40b28bf5dd657a89e2a490e6cb230984558896db8ba52f5d3d2b23720eb08f5628820d022e92dfac9e2146d57f850a209b45e09bf2802fb7fa55ce7d579121#npm:10.1.8"],\ + ["eslint-plugin-prettier", "virtual:fb40b28bf5dd657a89e2a490e6cb230984558896db8ba52f5d3d2b23720eb08f5628820d022e92dfac9e2146d57f850a209b45e09bf2802fb7fa55ce7d579121#npm:5.5.5"],\ + ["husky", "npm:9.1.7"],\ + ["lint-staged", "npm:15.5.2"],\ + ["prettier", "npm:3.8.3"],\ + ["rpgsaga", "workspace:."],\ + ["tsx", "npm:4.22.3"],\ + ["typescript", "patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5"],\ + ["typescript-eslint", "virtual:fb40b28bf5dd657a89e2a490e6cb230984558896db8ba52f5d3d2b23720eb08f5628820d022e92dfac9e2146d57f850a209b45e09bf2802fb7fa55ce7d579121#npm:8.59.4"],\ + ["vitest", "virtual:fb40b28bf5dd657a89e2a490e6cb230984558896db8ba52f5d3d2b23720eb08f5628820d022e92dfac9e2146d57f850a209b45e09bf2802fb7fa55ce7d579121#npm:3.2.4"]\ + ],\ + "linkType": "SOFT"\ + }]\ + ]],\ + ["semver", [\ + ["npm:7.8.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/semver-npm-7.8.1-9448873cc9-10c0.zip/node_modules/semver/",\ + "packageDependencies": [\ + ["semver", "npm:7.8.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["shebang-command", [\ + ["npm:2.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/shebang-command-npm-2.0.0-eb2b01921d-10c0.zip/node_modules/shebang-command/",\ + "packageDependencies": [\ + ["shebang-command", "npm:2.0.0"],\ + ["shebang-regex", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["shebang-regex", [\ + ["npm:3.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/shebang-regex-npm-3.0.0-899a0cd65e-10c0.zip/node_modules/shebang-regex/",\ + "packageDependencies": [\ + ["shebang-regex", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["siginfo", [\ + ["npm:2.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/siginfo-npm-2.0.0-9bbac931f8-10c0.zip/node_modules/siginfo/",\ + "packageDependencies": [\ + ["siginfo", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["signal-exit", [\ + ["npm:4.1.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/signal-exit-npm-4.1.0-61fb957687-10c0.zip/node_modules/signal-exit/",\ + "packageDependencies": [\ + ["signal-exit", "npm:4.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["slice-ansi", [\ + ["npm:5.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/slice-ansi-npm-5.0.0-8cd4f226df-10c0.zip/node_modules/slice-ansi/",\ + "packageDependencies": [\ + ["ansi-styles", "npm:6.2.3"],\ + ["is-fullwidth-code-point", "npm:4.0.0"],\ + ["slice-ansi", "npm:5.0.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:7.1.2", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/slice-ansi-npm-7.1.2-704a2770d3-10c0.zip/node_modules/slice-ansi/",\ + "packageDependencies": [\ + ["ansi-styles", "npm:6.2.3"],\ + ["is-fullwidth-code-point", "npm:5.1.0"],\ + ["slice-ansi", "npm:7.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["source-map-js", [\ + ["npm:1.2.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/source-map-js-npm-1.2.1-b9a47d7e1a-10c0.zip/node_modules/source-map-js/",\ + "packageDependencies": [\ + ["source-map-js", "npm:1.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["stackback", [\ + ["npm:0.0.2", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/stackback-npm-0.0.2-73273dc92e-10c0.zip/node_modules/stackback/",\ + "packageDependencies": [\ + ["stackback", "npm:0.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["std-env", [\ + ["npm:3.10.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/std-env-npm-3.10.0-30d3e2646f-10c0.zip/node_modules/std-env/",\ + "packageDependencies": [\ + ["std-env", "npm:3.10.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["string-argv", [\ + ["npm:0.3.2", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/string-argv-npm-0.3.2-6e057a88f1-10c0.zip/node_modules/string-argv/",\ + "packageDependencies": [\ + ["string-argv", "npm:0.3.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["string-width", [\ + ["npm:7.2.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/string-width-npm-7.2.0-93572222c9-10c0.zip/node_modules/string-width/",\ + "packageDependencies": [\ + ["emoji-regex", "npm:10.6.0"],\ + ["get-east-asian-width", "npm:1.6.0"],\ + ["string-width", "npm:7.2.0"],\ + ["strip-ansi", "npm:7.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["strip-ansi", [\ + ["npm:7.2.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/strip-ansi-npm-7.2.0-f2a3a63299-10c0.zip/node_modules/strip-ansi/",\ + "packageDependencies": [\ + ["ansi-regex", "npm:6.2.2"],\ + ["strip-ansi", "npm:7.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["strip-final-newline", [\ + ["npm:3.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/strip-final-newline-npm-3.0.0-7972cbec8b-10c0.zip/node_modules/strip-final-newline/",\ + "packageDependencies": [\ + ["strip-final-newline", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["strip-json-comments", [\ + ["npm:3.1.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/strip-json-comments-npm-3.1.1-dcb2324823-10c0.zip/node_modules/strip-json-comments/",\ + "packageDependencies": [\ + ["strip-json-comments", "npm:3.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["strip-literal", [\ + ["npm:3.1.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/strip-literal-npm-3.1.0-b0340463b3-10c0.zip/node_modules/strip-literal/",\ + "packageDependencies": [\ + ["js-tokens", "npm:9.0.1"],\ + ["strip-literal", "npm:3.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["supports-color", [\ + ["npm:7.2.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/supports-color-npm-7.2.0-606bfcf7da-10c0.zip/node_modules/supports-color/",\ + "packageDependencies": [\ + ["has-flag", "npm:4.0.0"],\ + ["supports-color", "npm:7.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["synckit", [\ + ["npm:0.11.12", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/synckit-npm-0.11.12-cdf9ac5b7c-10c0.zip/node_modules/synckit/",\ + "packageDependencies": [\ + ["@pkgr/core", "npm:0.2.9"],\ + ["synckit", "npm:0.11.12"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["tar", [\ + ["npm:7.5.15", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/tar-npm-7.5.15-f915901510-10c0.zip/node_modules/tar/",\ + "packageDependencies": [\ + ["@isaacs/fs-minipass", "npm:4.0.1"],\ + ["chownr", "npm:3.0.0"],\ + ["minipass", "npm:7.1.3"],\ + ["minizlib", "npm:3.1.0"],\ + ["tar", "npm:7.5.15"],\ + ["yallist", "npm:5.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["tinybench", [\ + ["npm:2.9.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/tinybench-npm-2.9.0-2861a048db-10c0.zip/node_modules/tinybench/",\ + "packageDependencies": [\ + ["tinybench", "npm:2.9.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["tinyexec", [\ + ["npm:0.3.2", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/tinyexec-npm-0.3.2-381b1e349c-10c0.zip/node_modules/tinyexec/",\ + "packageDependencies": [\ + ["tinyexec", "npm:0.3.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["tinyglobby", [\ + ["npm:0.2.16", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/tinyglobby-npm-0.2.16-102914a73b-10c0.zip/node_modules/tinyglobby/",\ + "packageDependencies": [\ + ["fdir", "virtual:102914a73b14bffc325c2cdf701d5ae063b57309ea75829f709b4273a7ea0d0e11784f2d6f2635e156595ab235d9a24869844d54ab73f4ad81d3a7b01b185214#npm:6.5.0"],\ + ["picomatch", "npm:4.0.4"],\ + ["tinyglobby", "npm:0.2.16"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["tinypool", [\ + ["npm:1.1.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/tinypool-npm-1.1.1-6772421283-10c0.zip/node_modules/tinypool/",\ + "packageDependencies": [\ + ["tinypool", "npm:1.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["tinyrainbow", [\ + ["npm:2.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/tinyrainbow-npm-2.0.0-b4ba575b93-10c0.zip/node_modules/tinyrainbow/",\ + "packageDependencies": [\ + ["tinyrainbow", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["tinyspy", [\ + ["npm:4.0.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/tinyspy-npm-4.0.4-94a3f61e82-10c0.zip/node_modules/tinyspy/",\ + "packageDependencies": [\ + ["tinyspy", "npm:4.0.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["to-regex-range", [\ + ["npm:5.0.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/to-regex-range-npm-5.0.1-f1e8263b00-10c0.zip/node_modules/to-regex-range/",\ + "packageDependencies": [\ + ["is-number", "npm:7.0.0"],\ + ["to-regex-range", "npm:5.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ts-api-utils", [\ + ["npm:2.5.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/ts-api-utils-npm-2.5.0-6bde2b2eb9-10c0.zip/node_modules/ts-api-utils/",\ + "packageDependencies": [\ + ["ts-api-utils", "npm:2.5.0"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:6b473b7238d717bf68245e7bce8ad5c5724550ac119862fd048f7398bdf1a8975241a8219d1021133969646a1902ff8da3729fe6025faabf64baa2e9187ae5b2#npm:2.5.0", {\ + "packageLocation": "./.yarn/__virtual__/ts-api-utils-virtual-475cce00ad/5/C:/Users/solov/AppData/Local/Yarn/Berry/cache/ts-api-utils-npm-2.5.0-6bde2b2eb9-10c0.zip/node_modules/ts-api-utils/",\ + "packageDependencies": [\ + ["@types/typescript", null],\ + ["ts-api-utils", "virtual:6b473b7238d717bf68245e7bce8ad5c5724550ac119862fd048f7398bdf1a8975241a8219d1021133969646a1902ff8da3729fe6025faabf64baa2e9187ae5b2#npm:2.5.0"],\ + ["typescript", "patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5"]\ + ],\ + "packagePeers": [\ + "@types/typescript",\ + "typescript"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["tsx", [\ + ["npm:4.22.3", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/tsx-npm-4.22.3-d2381d3532-10c0.zip/node_modules/tsx/",\ + "packageDependencies": [\ + ["esbuild", "npm:0.28.0"],\ + ["fsevents", "patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1"],\ + ["tsx", "npm:4.22.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["type-check", [\ + ["npm:0.4.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/type-check-npm-0.4.0-60565800ce-10c0.zip/node_modules/type-check/",\ + "packageDependencies": [\ + ["prelude-ls", "npm:1.2.1"],\ + ["type-check", "npm:0.4.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["typescript", [\ + ["patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/typescript-patch-6fda4d02cf-10c0.zip/node_modules/typescript/",\ + "packageDependencies": [\ + ["typescript", "patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["typescript-eslint", [\ + ["npm:8.59.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/typescript-eslint-npm-8.59.4-8e2e3ce7cd-10c0.zip/node_modules/typescript-eslint/",\ + "packageDependencies": [\ + ["typescript-eslint", "npm:8.59.4"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:fb40b28bf5dd657a89e2a490e6cb230984558896db8ba52f5d3d2b23720eb08f5628820d022e92dfac9e2146d57f850a209b45e09bf2802fb7fa55ce7d579121#npm:8.59.4", {\ + "packageLocation": "./.yarn/__virtual__/typescript-eslint-virtual-1dfa483f44/5/C:/Users/solov/AppData/Local/Yarn/Berry/cache/typescript-eslint-npm-8.59.4-8e2e3ce7cd-10c0.zip/node_modules/typescript-eslint/",\ + "packageDependencies": [\ + ["@types/eslint", null],\ + ["@types/typescript", null],\ + ["@typescript-eslint/eslint-plugin", "virtual:1dfa483f44ea3e77e5b205b5951360565ac1d42aca8e7cd2e6c6d38a444111d7e081a934641bcbea91b213cc5bcde153cc4c1e374e7e7497be09869da1b22310#npm:8.59.4"],\ + ["@typescript-eslint/parser", "virtual:1dfa483f44ea3e77e5b205b5951360565ac1d42aca8e7cd2e6c6d38a444111d7e081a934641bcbea91b213cc5bcde153cc4c1e374e7e7497be09869da1b22310#npm:8.59.4"],\ + ["@typescript-eslint/typescript-estree", "virtual:1dfa483f44ea3e77e5b205b5951360565ac1d42aca8e7cd2e6c6d38a444111d7e081a934641bcbea91b213cc5bcde153cc4c1e374e7e7497be09869da1b22310#npm:8.59.4"],\ + ["@typescript-eslint/utils", "virtual:1dfa483f44ea3e77e5b205b5951360565ac1d42aca8e7cd2e6c6d38a444111d7e081a934641bcbea91b213cc5bcde153cc4c1e374e7e7497be09869da1b22310#npm:8.59.4"],\ + ["eslint", "virtual:fb40b28bf5dd657a89e2a490e6cb230984558896db8ba52f5d3d2b23720eb08f5628820d022e92dfac9e2146d57f850a209b45e09bf2802fb7fa55ce7d579121#npm:9.39.4"],\ + ["typescript", "patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5"],\ + ["typescript-eslint", "virtual:fb40b28bf5dd657a89e2a490e6cb230984558896db8ba52f5d3d2b23720eb08f5628820d022e92dfac9e2146d57f850a209b45e09bf2802fb7fa55ce7d579121#npm:8.59.4"]\ + ],\ + "packagePeers": [\ + "@types/eslint",\ + "@types/typescript",\ + "eslint",\ + "typescript"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["undici", [\ + ["npm:6.25.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/undici-npm-6.25.0-6002e70879-10c0.zip/node_modules/undici/",\ + "packageDependencies": [\ + ["undici", "npm:6.25.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["undici-types", [\ + ["npm:6.21.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/",\ + "packageDependencies": [\ + ["undici-types", "npm:6.21.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["uri-js", [\ + ["npm:4.4.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/uri-js-npm-4.4.1-66d11cbcaf-10c0.zip/node_modules/uri-js/",\ + "packageDependencies": [\ + ["punycode", "npm:2.3.1"],\ + ["uri-js", "npm:4.4.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["vite", [\ + ["npm:7.3.3", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/vite-npm-7.3.3-85845a2842-10c0.zip/node_modules/vite/",\ + "packageDependencies": [\ + ["vite", "npm:7.3.3"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:4d91e8ac007eccde5310421ec26a7240652e847ccee0eed7a8ce482e96840259d5808dd3b068027dd146585635f2c15edeafc3d448608ab967719cd52cb6ba46#npm:7.3.3", {\ + "packageLocation": "./.yarn/__virtual__/vite-virtual-3a6fe29a7c/5/C:/Users/solov/AppData/Local/Yarn/Berry/cache/vite-npm-7.3.3-85845a2842-10c0.zip/node_modules/vite/",\ + "packageDependencies": [\ + ["@types/jiti", null],\ + ["@types/less", null],\ + ["@types/lightningcss", null],\ + ["@types/node", "npm:22.19.19"],\ + ["@types/sass", null],\ + ["@types/sass-embedded", null],\ + ["@types/stylus", null],\ + ["@types/sugarss", null],\ + ["@types/terser", null],\ + ["@types/tsx", null],\ + ["@types/yaml", null],\ + ["esbuild", "npm:0.27.7"],\ + ["fdir", "virtual:102914a73b14bffc325c2cdf701d5ae063b57309ea75829f709b4273a7ea0d0e11784f2d6f2635e156595ab235d9a24869844d54ab73f4ad81d3a7b01b185214#npm:6.5.0"],\ + ["fsevents", "patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1"],\ + ["jiti", null],\ + ["less", null],\ + ["lightningcss", null],\ + ["picomatch", "npm:4.0.4"],\ + ["postcss", "npm:8.5.15"],\ + ["rollup", "npm:4.60.4"],\ + ["sass", null],\ + ["sass-embedded", null],\ + ["stylus", null],\ + ["sugarss", null],\ + ["terser", null],\ + ["tinyglobby", "npm:0.2.16"],\ + ["tsx", null],\ + ["vite", "virtual:4d91e8ac007eccde5310421ec26a7240652e847ccee0eed7a8ce482e96840259d5808dd3b068027dd146585635f2c15edeafc3d448608ab967719cd52cb6ba46#npm:7.3.3"],\ + ["yaml", null]\ + ],\ + "packagePeers": [\ + "@types/jiti",\ + "@types/less",\ + "@types/lightningcss",\ + "@types/node",\ + "@types/sass-embedded",\ + "@types/sass",\ + "@types/stylus",\ + "@types/sugarss",\ + "@types/terser",\ + "@types/tsx",\ + "@types/yaml",\ + "jiti",\ + "less",\ + "lightningcss",\ + "sass-embedded",\ + "sass",\ + "stylus",\ + "sugarss",\ + "terser",\ + "tsx",\ + "yaml"\ + ],\ + "linkType": "HARD"\ + }],\ + ["virtual:cb1d79df3b4901790c8808db427c397bd3f613c8181bce1e1c99f654fcf8f1484eb3efeaaa7477306f7c95ff2d882d1e762cb59fa3743be7fbfd628566f4b6c1#npm:7.3.3", {\ + "packageLocation": "./.yarn/__virtual__/vite-virtual-d611508291/5/C:/Users/solov/AppData/Local/Yarn/Berry/cache/vite-npm-7.3.3-85845a2842-10c0.zip/node_modules/vite/",\ + "packageDependencies": [\ + ["@types/jiti", null],\ + ["@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],\ + ["@types/tsx", null],\ + ["@types/yaml", null],\ + ["esbuild", "npm:0.27.7"],\ + ["fdir", "virtual:102914a73b14bffc325c2cdf701d5ae063b57309ea75829f709b4273a7ea0d0e11784f2d6f2635e156595ab235d9a24869844d54ab73f4ad81d3a7b01b185214#npm:6.5.0"],\ + ["fsevents", "patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1"],\ + ["jiti", null],\ + ["less", null],\ + ["lightningcss", null],\ + ["picomatch", "npm:4.0.4"],\ + ["postcss", "npm:8.5.15"],\ + ["rollup", "npm:4.60.4"],\ + ["sass", null],\ + ["sass-embedded", null],\ + ["stylus", null],\ + ["sugarss", null],\ + ["terser", null],\ + ["tinyglobby", "npm:0.2.16"],\ + ["tsx", null],\ + ["vite", "virtual:cb1d79df3b4901790c8808db427c397bd3f613c8181bce1e1c99f654fcf8f1484eb3efeaaa7477306f7c95ff2d882d1e762cb59fa3743be7fbfd628566f4b6c1#npm:7.3.3"],\ + ["yaml", null]\ + ],\ + "packagePeers": [\ + "@types/jiti",\ + "@types/less",\ + "@types/lightningcss",\ + "@types/node",\ + "@types/sass-embedded",\ + "@types/sass",\ + "@types/stylus",\ + "@types/sugarss",\ + "@types/terser",\ + "@types/tsx",\ + "@types/yaml",\ + "jiti",\ + "less",\ + "lightningcss",\ + "sass-embedded",\ + "sass",\ + "stylus",\ + "sugarss",\ + "terser",\ + "tsx",\ + "yaml"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["vite-node", [\ + ["npm:3.2.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/vite-node-npm-3.2.4-cb1d79df3b-10c0.zip/node_modules/vite-node/",\ + "packageDependencies": [\ + ["cac", "npm:6.7.14"],\ + ["debug", "virtual:5de9f8ff0d4128b8d5bbd52c1e252e7e7f0420f4b53cf63e45919981984854b91f8a057dfa32073fc3af76a734ef0c239531e2abb4b80367de6bf769365617ce#npm:4.4.3"],\ + ["es-module-lexer", "npm:1.7.0"],\ + ["pathe", "npm:2.0.3"],\ + ["vite", "virtual:cb1d79df3b4901790c8808db427c397bd3f613c8181bce1e1c99f654fcf8f1484eb3efeaaa7477306f7c95ff2d882d1e762cb59fa3743be7fbfd628566f4b6c1#npm:7.3.3"],\ + ["vite-node", "npm:3.2.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["vitest", [\ + ["npm:3.2.4", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/vitest-npm-3.2.4-7a07f931b1-10c0.zip/node_modules/vitest/",\ + "packageDependencies": [\ + ["vitest", "npm:3.2.4"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:fb40b28bf5dd657a89e2a490e6cb230984558896db8ba52f5d3d2b23720eb08f5628820d022e92dfac9e2146d57f850a209b45e09bf2802fb7fa55ce7d579121#npm:3.2.4", {\ + "packageLocation": "./.yarn/__virtual__/vitest-virtual-4d91e8ac00/5/C:/Users/solov/AppData/Local/Yarn/Berry/cache/vitest-npm-3.2.4-7a07f931b1-10c0.zip/node_modules/vitest/",\ + "packageDependencies": [\ + ["@edge-runtime/vm", null],\ + ["@types/chai", "npm:5.2.3"],\ + ["@types/debug", null],\ + ["@types/edge-runtime__vm", null],\ + ["@types/happy-dom", null],\ + ["@types/jsdom", null],\ + ["@types/node", "npm:22.19.19"],\ + ["@types/vitest__browser", null],\ + ["@types/vitest__ui", null],\ + ["@vitest/browser", null],\ + ["@vitest/expect", "npm:3.2.4"],\ + ["@vitest/mocker", "virtual:4d91e8ac007eccde5310421ec26a7240652e847ccee0eed7a8ce482e96840259d5808dd3b068027dd146585635f2c15edeafc3d448608ab967719cd52cb6ba46#npm:3.2.4"],\ + ["@vitest/pretty-format", "npm:3.2.4"],\ + ["@vitest/runner", "npm:3.2.4"],\ + ["@vitest/snapshot", "npm:3.2.4"],\ + ["@vitest/spy", "npm:3.2.4"],\ + ["@vitest/ui", null],\ + ["@vitest/utils", "npm:3.2.4"],\ + ["chai", "npm:5.3.3"],\ + ["debug", "virtual:5de9f8ff0d4128b8d5bbd52c1e252e7e7f0420f4b53cf63e45919981984854b91f8a057dfa32073fc3af76a734ef0c239531e2abb4b80367de6bf769365617ce#npm:4.4.3"],\ + ["expect-type", "npm:1.3.0"],\ + ["happy-dom", null],\ + ["jsdom", null],\ + ["magic-string", "npm:0.30.21"],\ + ["pathe", "npm:2.0.3"],\ + ["picomatch", "npm:4.0.4"],\ + ["std-env", "npm:3.10.0"],\ + ["tinybench", "npm:2.9.0"],\ + ["tinyexec", "npm:0.3.2"],\ + ["tinyglobby", "npm:0.2.16"],\ + ["tinypool", "npm:1.1.1"],\ + ["tinyrainbow", "npm:2.0.0"],\ + ["vite", "virtual:4d91e8ac007eccde5310421ec26a7240652e847ccee0eed7a8ce482e96840259d5808dd3b068027dd146585635f2c15edeafc3d448608ab967719cd52cb6ba46#npm:7.3.3"],\ + ["vite-node", "npm:3.2.4"],\ + ["vitest", "virtual:fb40b28bf5dd657a89e2a490e6cb230984558896db8ba52f5d3d2b23720eb08f5628820d022e92dfac9e2146d57f850a209b45e09bf2802fb7fa55ce7d579121#npm:3.2.4"],\ + ["why-is-node-running", "npm:2.3.0"]\ + ],\ + "packagePeers": [\ + "@edge-runtime/vm",\ + "@types/debug",\ + "@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"\ + }]\ + ]],\ + ["which", [\ + ["npm:2.0.2", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/which-npm-2.0.2-320ddf72f7-10c0.zip/node_modules/which/",\ + "packageDependencies": [\ + ["isexe", "npm:2.0.0"],\ + ["which", "npm:2.0.2"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:6.0.1", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/which-npm-6.0.1-afc3b2db90-10c0.zip/node_modules/which/",\ + "packageDependencies": [\ + ["isexe", "npm:4.0.0"],\ + ["which", "npm:6.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["why-is-node-running", [\ + ["npm:2.3.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/why-is-node-running-npm-2.3.0-011cf61a18-10c0.zip/node_modules/why-is-node-running/",\ + "packageDependencies": [\ + ["siginfo", "npm:2.0.0"],\ + ["stackback", "npm:0.0.2"],\ + ["why-is-node-running", "npm:2.3.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["word-wrap", [\ + ["npm:1.2.5", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/word-wrap-npm-1.2.5-42d00c4b09-10c0.zip/node_modules/word-wrap/",\ + "packageDependencies": [\ + ["word-wrap", "npm:1.2.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["wrap-ansi", [\ + ["npm:9.0.2", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/wrap-ansi-npm-9.0.2-b66ec4013c-10c0.zip/node_modules/wrap-ansi/",\ + "packageDependencies": [\ + ["ansi-styles", "npm:6.2.3"],\ + ["string-width", "npm:7.2.0"],\ + ["strip-ansi", "npm:7.2.0"],\ + ["wrap-ansi", "npm:9.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["yallist", [\ + ["npm:5.0.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/yallist-npm-5.0.0-8732dd9f1c-10c0.zip/node_modules/yallist/",\ + "packageDependencies": [\ + ["yallist", "npm:5.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["yaml", [\ + ["npm:2.9.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/yaml-npm-2.9.0-0cdd9bc0bc-10c0.zip/node_modules/yaml/",\ + "packageDependencies": [\ + ["yaml", "npm:2.9.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["yocto-queue", [\ + ["npm:0.1.0", {\ + "packageLocation": "../../../../C:/Users/solov/AppData/Local/Yarn/Berry/cache/yocto-queue-npm-0.1.0-c6c9a7db29-10c0.zip/node_modules/yocto-queue/",\ + "packageDependencies": [\ + ["yocto-queue", "npm:0.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]]\ + ]\ +}'; + +function $$SETUP_STATE(hydrateRuntimeState, basePath) { + return hydrateRuntimeState(JSON.parse(RAW_RUNTIME_STATE), {basePath: basePath || __dirname}); +} + +const fs = require('fs'); +const path = require('path'); +const crypto = require('crypto'); +const os = require('os'); +const events = require('events'); +const nodeUtils = require('util'); +const stream = require('stream'); +const zlib = require('zlib'); +const require$$0 = require('module'); +const StringDecoder = require('string_decoder'); +const url = require('url'); +const buffer = require('buffer'); +const readline = require('readline'); +const assert = require('assert'); + +const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e }; + +function _interopNamespace(e) { + if (e && e.__esModule) return e; + const n = Object.create(null); + if (e) { + for (const k in e) { + if (k !== 'default') { + const d = Object.getOwnPropertyDescriptor(e, k); + Object.defineProperty(n, k, d.get ? d : { + enumerable: true, + get: () => e[k] + }); + } + } + } + n.default = e; + return Object.freeze(n); +} + +const fs__default = /*#__PURE__*/_interopDefaultLegacy(fs); +const path__default = /*#__PURE__*/_interopDefaultLegacy(path); +const nodeUtils__namespace = /*#__PURE__*/_interopNamespace(nodeUtils); +const zlib__default = /*#__PURE__*/_interopDefaultLegacy(zlib); +const require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0); +const StringDecoder__default = /*#__PURE__*/_interopDefaultLegacy(StringDecoder); +const buffer__default = /*#__PURE__*/_interopDefaultLegacy(buffer); +const assert__default = /*#__PURE__*/_interopDefaultLegacy(assert); + +const S_IFMT = 61440; +const S_IFDIR = 16384; +const S_IFREG = 32768; +const S_IFLNK = 40960; +const SAFE_TIME = 456789e3; + +function makeError$1(code, message) { + return Object.assign(new Error(`${code}: ${message}`), { code }); +} +function EBUSY(message) { + return makeError$1(`EBUSY`, message); +} +function ENOSYS(message, reason) { + return makeError$1(`ENOSYS`, `${message}, ${reason}`); +} +function EINVAL(reason) { + return makeError$1(`EINVAL`, `invalid argument, ${reason}`); +} +function EBADF(reason) { + return makeError$1(`EBADF`, `bad file descriptor, ${reason}`); +} +function ENOENT(reason) { + return makeError$1(`ENOENT`, `no such file or directory, ${reason}`); +} +function ENOTDIR(reason) { + return makeError$1(`ENOTDIR`, `not a directory, ${reason}`); +} +function EISDIR(reason) { + return makeError$1(`EISDIR`, `illegal operation on a directory, ${reason}`); +} +function EEXIST(reason) { + return makeError$1(`EEXIST`, `file already exists, ${reason}`); +} +function EROFS(reason) { + return makeError$1(`EROFS`, `read-only filesystem, ${reason}`); +} +function ENOTEMPTY(reason) { + return makeError$1(`ENOTEMPTY`, `directory not empty, ${reason}`); +} +function EOPNOTSUPP(reason) { + return makeError$1(`EOPNOTSUPP`, `operation not supported, ${reason}`); +} +function ERR_DIR_CLOSED() { + return makeError$1(`ERR_DIR_CLOSED`, `Directory handle was closed`); +} + +const DEFAULT_MODE = S_IFREG | 420; +class StatEntry { + uid = 0; + gid = 0; + size = 0; + blksize = 0; + atimeMs = 0; + mtimeMs = 0; + ctimeMs = 0; + birthtimeMs = 0; + atime = /* @__PURE__ */ new Date(0); + mtime = /* @__PURE__ */ new Date(0); + ctime = /* @__PURE__ */ new Date(0); + birthtime = /* @__PURE__ */ new Date(0); + dev = 0; + ino = 0; + mode = DEFAULT_MODE; + nlink = 1; + rdev = 0; + blocks = 1; + isBlockDevice() { + return false; + } + isCharacterDevice() { + return false; + } + isDirectory() { + return (this.mode & S_IFMT) === S_IFDIR; + } + isFIFO() { + return false; + } + isFile() { + return (this.mode & S_IFMT) === S_IFREG; + } + isSocket() { + return false; + } + isSymbolicLink() { + return (this.mode & S_IFMT) === S_IFLNK; + } +} +class BigIntStatsEntry { + uid = BigInt(0); + gid = BigInt(0); + size = BigInt(0); + blksize = BigInt(0); + atimeMs = BigInt(0); + mtimeMs = BigInt(0); + ctimeMs = BigInt(0); + birthtimeMs = BigInt(0); + atimeNs = BigInt(0); + mtimeNs = BigInt(0); + ctimeNs = BigInt(0); + birthtimeNs = BigInt(0); + atime = /* @__PURE__ */ new Date(0); + mtime = /* @__PURE__ */ new Date(0); + ctime = /* @__PURE__ */ new Date(0); + birthtime = /* @__PURE__ */ new Date(0); + dev = BigInt(0); + ino = BigInt(0); + mode = BigInt(DEFAULT_MODE); + nlink = BigInt(1); + rdev = BigInt(0); + blocks = BigInt(1); + isBlockDevice() { + return false; + } + isCharacterDevice() { + return false; + } + isDirectory() { + return (this.mode & BigInt(S_IFMT)) === BigInt(S_IFDIR); + } + isFIFO() { + return false; + } + isFile() { + return (this.mode & BigInt(S_IFMT)) === BigInt(S_IFREG); + } + isSocket() { + return false; + } + isSymbolicLink() { + return (this.mode & BigInt(S_IFMT)) === BigInt(S_IFLNK); + } +} +function makeDefaultStats() { + return new StatEntry(); +} +function clearStats(stats) { + for (const key in stats) { + if (Object.hasOwn(stats, key)) { + const element = stats[key]; + if (typeof element === `number`) { + stats[key] = 0; + } else if (typeof element === `bigint`) { + stats[key] = BigInt(0); + } else if (nodeUtils__namespace.types.isDate(element)) { + stats[key] = /* @__PURE__ */ new Date(0); + } + } + } + return stats; +} +function convertToBigIntStats(stats) { + const bigintStats = new BigIntStatsEntry(); + for (const key in stats) { + if (Object.hasOwn(stats, key)) { + const element = stats[key]; + if (typeof element === `number`) { + bigintStats[key] = BigInt(element); + } else if (nodeUtils__namespace.types.isDate(element)) { + bigintStats[key] = new Date(element); + } + } + } + bigintStats.atimeNs = bigintStats.atimeMs * BigInt(1e6); + bigintStats.mtimeNs = bigintStats.mtimeMs * BigInt(1e6); + bigintStats.ctimeNs = bigintStats.ctimeMs * BigInt(1e6); + bigintStats.birthtimeNs = bigintStats.birthtimeMs * BigInt(1e6); + return bigintStats; +} +function areStatsEqual(a, b) { + if (a.atimeMs !== b.atimeMs) + return false; + if (a.birthtimeMs !== b.birthtimeMs) + return false; + if (a.blksize !== b.blksize) + return false; + if (a.blocks !== b.blocks) + return false; + if (a.ctimeMs !== b.ctimeMs) + return false; + if (a.dev !== b.dev) + return false; + if (a.gid !== b.gid) + return false; + if (a.ino !== b.ino) + return false; + if (a.isBlockDevice() !== b.isBlockDevice()) + return false; + if (a.isCharacterDevice() !== b.isCharacterDevice()) + return false; + if (a.isDirectory() !== b.isDirectory()) + return false; + if (a.isFIFO() !== b.isFIFO()) + return false; + if (a.isFile() !== b.isFile()) + return false; + if (a.isSocket() !== b.isSocket()) + return false; + if (a.isSymbolicLink() !== b.isSymbolicLink()) + return false; + if (a.mode !== b.mode) + return false; + if (a.mtimeMs !== b.mtimeMs) + return false; + if (a.nlink !== b.nlink) + return false; + if (a.rdev !== b.rdev) + return false; + if (a.size !== b.size) + return false; + if (a.uid !== b.uid) + return false; + const aN = a; + const bN = b; + if (aN.atimeNs !== bN.atimeNs) + return false; + if (aN.mtimeNs !== bN.mtimeNs) + return false; + if (aN.ctimeNs !== bN.ctimeNs) + return false; + if (aN.birthtimeNs !== bN.birthtimeNs) + return false; + return true; +} + +const PortablePath = { + root: `/`, + dot: `.`, + parent: `..` +}; +const Filename = { + home: `~`, + nodeModules: `node_modules`, + manifest: `package.json`, + lockfile: `yarn.lock`, + virtual: `__virtual__`, + /** + * @deprecated + */ + pnpJs: `.pnp.js`, + pnpCjs: `.pnp.cjs`, + pnpData: `.pnp.data.json`, + pnpEsmLoader: `.pnp.loader.mjs`, + rc: `.yarnrc.yml`, + env: `.env` +}; +const npath = Object.create(path__default.default); +const ppath = Object.create(path__default.default.posix); +npath.cwd = () => process.cwd(); +ppath.cwd = process.platform === `win32` ? () => toPortablePath(process.cwd()) : process.cwd; +if (process.platform === `win32`) { + ppath.resolve = (...segments) => { + if (segments.length > 0 && ppath.isAbsolute(segments[0])) { + return path__default.default.posix.resolve(...segments); + } else { + return path__default.default.posix.resolve(ppath.cwd(), ...segments); + } + }; +} +const contains = function(pathUtils, from, to) { + from = pathUtils.normalize(from); + to = pathUtils.normalize(to); + if (from === to) + return `.`; + if (!from.endsWith(pathUtils.sep)) + from = from + pathUtils.sep; + if (to.startsWith(from)) { + return to.slice(from.length); + } else { + return null; + } +}; +npath.contains = (from, to) => contains(npath, from, to); +ppath.contains = (from, to) => contains(ppath, from, to); +const WINDOWS_PATH_REGEXP = /^([a-zA-Z]:.*)$/; +const UNC_WINDOWS_PATH_REGEXP = /^\/\/(\.\/)?(.*)$/; +const PORTABLE_PATH_REGEXP = /^\/([a-zA-Z]:.*)$/; +const UNC_PORTABLE_PATH_REGEXP = /^\/unc\/(\.dot\/)?(.*)$/; +function fromPortablePathWin32(p) { + let portablePathMatch, uncPortablePathMatch; + if (portablePathMatch = p.match(PORTABLE_PATH_REGEXP)) + p = portablePathMatch[1]; + else if (uncPortablePathMatch = p.match(UNC_PORTABLE_PATH_REGEXP)) + p = `\\\\${uncPortablePathMatch[1] ? `.\\` : ``}${uncPortablePathMatch[2]}`; + else + return p; + return p.replace(/\//g, `\\`); +} +function toPortablePathWin32(p) { + p = p.replace(/\\/g, `/`); + let windowsPathMatch, uncWindowsPathMatch; + if (windowsPathMatch = p.match(WINDOWS_PATH_REGEXP)) + p = `/${windowsPathMatch[1]}`; + else if (uncWindowsPathMatch = p.match(UNC_WINDOWS_PATH_REGEXP)) + p = `/unc/${uncWindowsPathMatch[1] ? `.dot/` : ``}${uncWindowsPathMatch[2]}`; + return p; +} +const toPortablePath = process.platform === `win32` ? toPortablePathWin32 : (p) => p; +const fromPortablePath = process.platform === `win32` ? fromPortablePathWin32 : (p) => p; +npath.fromPortablePath = fromPortablePath; +npath.toPortablePath = toPortablePath; +function convertPath(targetPathUtils, sourcePath) { + return targetPathUtils === npath ? fromPortablePath(sourcePath) : toPortablePath(sourcePath); +} + +const defaultTime = new Date(SAFE_TIME * 1e3); +const defaultTimeMs = defaultTime.getTime(); +async function copyPromise(destinationFs, destination, sourceFs, source, opts) { + const normalizedDestination = destinationFs.pathUtils.normalize(destination); + const normalizedSource = sourceFs.pathUtils.normalize(source); + const prelayout = []; + const postlayout = []; + const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : await sourceFs.lstatPromise(normalizedSource); + await destinationFs.mkdirpPromise(destinationFs.pathUtils.dirname(destination), { utimes: [atime, mtime] }); + await copyImpl(prelayout, postlayout, destinationFs, normalizedDestination, sourceFs, normalizedSource, { ...opts, didParentExist: true }); + for (const operation of prelayout) + await operation(); + await Promise.all(postlayout.map((operation) => { + return operation(); + })); +} +async function copyImpl(prelayout, postlayout, destinationFs, destination, sourceFs, source, opts) { + const destinationStat = opts.didParentExist ? await maybeLStat(destinationFs, destination) : null; + const sourceStat = await sourceFs.lstatPromise(source); + const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : sourceStat; + let updated; + switch (true) { + case sourceStat.isDirectory(): + { + updated = await copyFolder(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); + } + break; + case sourceStat.isFile(): + { + updated = await copyFile(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); + } + break; + case sourceStat.isSymbolicLink(): + { + updated = await copySymlink(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); + } + break; + default: { + throw new Error(`Unsupported file type (${sourceStat.mode})`); + } + } + if (opts.linkStrategy?.type !== `HardlinkFromIndex` || !sourceStat.isFile()) { + if (updated || destinationStat?.mtime?.getTime() !== mtime.getTime() || destinationStat?.atime?.getTime() !== atime.getTime()) { + postlayout.push(() => destinationFs.lutimesPromise(destination, atime, mtime)); + updated = true; + } + if (destinationStat === null || (destinationStat.mode & 511) !== (sourceStat.mode & 511)) { + postlayout.push(() => destinationFs.chmodPromise(destination, sourceStat.mode & 511)); + updated = true; + } + } + return updated; +} +async function maybeLStat(baseFs, p) { + try { + return await baseFs.lstatPromise(p); + } catch { + return null; + } +} +async function copyFolder(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { + if (destinationStat !== null && !destinationStat.isDirectory()) { + if (opts.overwrite) { + prelayout.push(async () => destinationFs.removePromise(destination)); + destinationStat = null; + } else { + return false; + } + } + let updated = false; + if (destinationStat === null) { + prelayout.push(async () => { + try { + await destinationFs.mkdirPromise(destination, { mode: sourceStat.mode }); + } catch (err) { + if (err.code !== `EEXIST`) { + throw err; + } + } + }); + updated = true; + } + const entries = await sourceFs.readdirPromise(source); + const nextOpts = opts.didParentExist && !destinationStat ? { ...opts, didParentExist: false } : opts; + if (opts.stableSort) { + for (const entry of entries.sort()) { + if (await copyImpl(prelayout, postlayout, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts)) { + updated = true; + } + } + } else { + const entriesUpdateStatus = await Promise.all(entries.map(async (entry) => { + await copyImpl(prelayout, postlayout, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts); + })); + if (entriesUpdateStatus.some((status) => status)) { + updated = true; + } + } + return updated; +} +async function copyFileViaIndex(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts, linkStrategy) { + const sourceHash = await sourceFs.checksumFilePromise(source, { algorithm: `sha1` }); + const defaultMode = 420; + const sourceMode = sourceStat.mode & 511; + const indexFileName = `${sourceHash}${sourceMode !== defaultMode ? sourceMode.toString(8) : ``}`; + const indexPath = destinationFs.pathUtils.join(linkStrategy.indexPath, sourceHash.slice(0, 2), `${indexFileName}.dat`); + let AtomicBehavior; + ((AtomicBehavior2) => { + AtomicBehavior2[AtomicBehavior2["Lock"] = 0] = "Lock"; + AtomicBehavior2[AtomicBehavior2["Rename"] = 1] = "Rename"; + })(AtomicBehavior || (AtomicBehavior = {})); + let atomicBehavior = 1 /* Rename */; + let indexStat = await maybeLStat(destinationFs, indexPath); + if (destinationStat) { + const isDestinationHardlinkedFromIndex = indexStat && destinationStat.dev === indexStat.dev && destinationStat.ino === indexStat.ino; + const isIndexModified = indexStat?.mtimeMs !== defaultTimeMs; + if (isDestinationHardlinkedFromIndex) { + if (isIndexModified && linkStrategy.autoRepair) { + atomicBehavior = 0 /* Lock */; + indexStat = null; + } + } + if (!isDestinationHardlinkedFromIndex) { + if (opts.overwrite) { + prelayout.push(async () => destinationFs.removePromise(destination)); + destinationStat = null; + } else { + return false; + } + } + } + const tempPath = !indexStat && atomicBehavior === 1 /* Rename */ ? `${indexPath}.${Math.floor(Math.random() * 4294967296).toString(16).padStart(8, `0`)}` : null; + let tempPathCleaned = false; + prelayout.push(async () => { + if (!indexStat) { + if (atomicBehavior === 0 /* Lock */) { + await destinationFs.lockPromise(indexPath, async () => { + const content = await sourceFs.readFilePromise(source); + await destinationFs.writeFilePromise(indexPath, content); + }); + } + if (atomicBehavior === 1 /* Rename */ && tempPath) { + const content = await sourceFs.readFilePromise(source); + await destinationFs.writeFilePromise(tempPath, content); + try { + await destinationFs.linkPromise(tempPath, indexPath); + } catch (err) { + if (err.code === `EEXIST`) { + tempPathCleaned = true; + await destinationFs.unlinkPromise(tempPath); + } else { + throw err; + } + } + } + } + if (!destinationStat) { + await destinationFs.linkPromise(indexPath, destination); + } + }); + postlayout.push(async () => { + if (!indexStat) { + await destinationFs.lutimesPromise(indexPath, defaultTime, defaultTime); + if (sourceMode !== defaultMode) { + await destinationFs.chmodPromise(indexPath, sourceMode); + } + } + if (tempPath && !tempPathCleaned) { + await destinationFs.unlinkPromise(tempPath); + } + }); + return false; +} +async function copyFileDirect(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { + if (destinationStat !== null) { + if (opts.overwrite) { + prelayout.push(async () => destinationFs.removePromise(destination)); + destinationStat = null; + } else { + return false; + } + } + prelayout.push(async () => { + const content = await sourceFs.readFilePromise(source); + await destinationFs.writeFilePromise(destination, content); + }); + return true; +} +async function copyFile(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { + if (opts.linkStrategy?.type === `HardlinkFromIndex`) { + return copyFileViaIndex(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts, opts.linkStrategy); + } else { + return copyFileDirect(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); + } +} +async function copySymlink(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { + if (destinationStat !== null) { + if (opts.overwrite) { + prelayout.push(async () => destinationFs.removePromise(destination)); + destinationStat = null; + } else { + return false; + } + } + prelayout.push(async () => { + await destinationFs.symlinkPromise(convertPath(destinationFs.pathUtils, await sourceFs.readlinkPromise(source)), destination); + }); + return true; +} + +class CustomDir { + constructor(path, nextDirent, opts = {}) { + this.path = path; + this.nextDirent = nextDirent; + this.opts = opts; + } + closed = false; + throwIfClosed() { + if (this.closed) { + throw ERR_DIR_CLOSED(); + } + } + async *[Symbol.asyncIterator]() { + try { + let dirent; + while ((dirent = await this.read()) !== null) { + yield dirent; + } + } finally { + await this.close(); + } + } + read(cb) { + const dirent = this.readSync(); + if (typeof cb !== `undefined`) + return cb(null, dirent); + return Promise.resolve(dirent); + } + readSync() { + this.throwIfClosed(); + return this.nextDirent(); + } + close(cb) { + this.closeSync(); + if (typeof cb !== `undefined`) + return cb(null); + return Promise.resolve(); + } + closeSync() { + this.throwIfClosed(); + this.opts.onClose?.(); + this.closed = true; + } +} +function opendir(fakeFs, path, entries, opts) { + const nextDirent = () => { + const filename = entries.shift(); + if (typeof filename === `undefined`) + return null; + const entryPath = fakeFs.pathUtils.join(path, filename); + return Object.assign(fakeFs.statSync(entryPath), { + name: filename, + path: void 0 + }); + }; + return new CustomDir(path, nextDirent, opts); +} + +function assertStatus(current, expected) { + if (current !== expected) { + throw new Error(`Invalid StatWatcher status: expected '${expected}', got '${current}'`); + } +} +class CustomStatWatcher extends events.EventEmitter { + fakeFs; + path; + bigint; + status = "ready" /* Ready */; + changeListeners = /* @__PURE__ */ new Map(); + lastStats; + startTimeout = null; + static create(fakeFs, path, opts) { + const statWatcher = new CustomStatWatcher(fakeFs, path, opts); + statWatcher.start(); + return statWatcher; + } + constructor(fakeFs, path, { bigint = false } = {}) { + super(); + this.fakeFs = fakeFs; + this.path = path; + this.bigint = bigint; + this.lastStats = this.stat(); + } + start() { + assertStatus(this.status, "ready" /* Ready */); + this.status = "running" /* Running */; + this.startTimeout = setTimeout(() => { + this.startTimeout = null; + if (!this.fakeFs.existsSync(this.path)) { + this.emit("change" /* Change */, this.lastStats, this.lastStats); + } + }, 3); + } + stop() { + assertStatus(this.status, "running" /* Running */); + this.status = "stopped" /* Stopped */; + if (this.startTimeout !== null) { + clearTimeout(this.startTimeout); + this.startTimeout = null; + } + this.emit("stop" /* Stop */); + } + stat() { + try { + return this.fakeFs.statSync(this.path, { bigint: this.bigint }); + } catch { + const statInstance = this.bigint ? new BigIntStatsEntry() : new StatEntry(); + return clearStats(statInstance); + } + } + /** + * Creates an interval whose callback compares the current stats with the previous stats and notifies all listeners in case of changes. + * + * @param opts.persistent Decides whether the interval should be immediately unref-ed. + */ + makeInterval(opts) { + const interval = setInterval(() => { + const currentStats = this.stat(); + const previousStats = this.lastStats; + if (areStatsEqual(currentStats, previousStats)) + return; + this.lastStats = currentStats; + this.emit("change" /* Change */, currentStats, previousStats); + }, opts.interval); + return opts.persistent ? interval : interval.unref(); + } + /** + * Registers a listener and assigns it an interval. + */ + registerChangeListener(listener, opts) { + this.addListener("change" /* Change */, listener); + this.changeListeners.set(listener, this.makeInterval(opts)); + } + /** + * Unregisters the listener and clears the assigned interval. + */ + unregisterChangeListener(listener) { + this.removeListener("change" /* Change */, listener); + const interval = this.changeListeners.get(listener); + if (typeof interval !== `undefined`) + clearInterval(interval); + this.changeListeners.delete(listener); + } + /** + * Unregisters all listeners and clears all assigned intervals. + */ + unregisterAllChangeListeners() { + for (const listener of this.changeListeners.keys()) { + this.unregisterChangeListener(listener); + } + } + hasChangeListeners() { + return this.changeListeners.size > 0; + } + /** + * Refs all stored intervals. + */ + ref() { + for (const interval of this.changeListeners.values()) + interval.ref(); + return this; + } + /** + * Unrefs all stored intervals. + */ + unref() { + for (const interval of this.changeListeners.values()) + interval.unref(); + return this; + } +} + +const statWatchersByFakeFS = /* @__PURE__ */ new WeakMap(); +function watchFile(fakeFs, path, a, b) { + let bigint; + let persistent; + let interval; + let listener; + switch (typeof a) { + case `function`: + { + bigint = false; + persistent = true; + interval = 5007; + listener = a; + } + break; + default: + { + ({ + bigint = false, + persistent = true, + interval = 5007 + } = a); + listener = b; + } + break; + } + let statWatchers = statWatchersByFakeFS.get(fakeFs); + if (typeof statWatchers === `undefined`) + statWatchersByFakeFS.set(fakeFs, statWatchers = /* @__PURE__ */ new Map()); + let statWatcher = statWatchers.get(path); + if (typeof statWatcher === `undefined`) { + statWatcher = CustomStatWatcher.create(fakeFs, path, { bigint }); + statWatchers.set(path, statWatcher); + } + statWatcher.registerChangeListener(listener, { persistent, interval }); + return statWatcher; +} +function unwatchFile(fakeFs, path, cb) { + const statWatchers = statWatchersByFakeFS.get(fakeFs); + if (typeof statWatchers === `undefined`) + return; + const statWatcher = statWatchers.get(path); + if (typeof statWatcher === `undefined`) + return; + if (typeof cb === `undefined`) + statWatcher.unregisterAllChangeListeners(); + else + statWatcher.unregisterChangeListener(cb); + if (!statWatcher.hasChangeListeners()) { + statWatcher.stop(); + statWatchers.delete(path); + } +} +function unwatchAllFiles(fakeFs) { + const statWatchers = statWatchersByFakeFS.get(fakeFs); + if (typeof statWatchers === `undefined`) + return; + for (const path of statWatchers.keys()) { + unwatchFile(fakeFs, path); + } +} + +class FakeFS { + pathUtils; + constructor(pathUtils) { + this.pathUtils = pathUtils; + } + async *genTraversePromise(init, { stableSort = false } = {}) { + const stack = [init]; + while (stack.length > 0) { + const p = stack.shift(); + const entry = await this.lstatPromise(p); + if (entry.isDirectory()) { + const entries = await this.readdirPromise(p); + if (stableSort) { + for (const entry2 of entries.sort()) { + stack.push(this.pathUtils.join(p, entry2)); + } + } else { + throw new Error(`Not supported`); + } + } else { + yield p; + } + } + } + async checksumFilePromise(path, { algorithm = `sha512` } = {}) { + const fd = await this.openPromise(path, `r`); + try { + const CHUNK_SIZE = 65536; + const chunk = Buffer.allocUnsafeSlow(CHUNK_SIZE); + const hash = crypto.createHash(algorithm); + let bytesRead = 0; + while ((bytesRead = await this.readPromise(fd, chunk, 0, CHUNK_SIZE)) !== 0) + hash.update(bytesRead === CHUNK_SIZE ? chunk : chunk.slice(0, bytesRead)); + return hash.digest(`hex`); + } finally { + await this.closePromise(fd); + } + } + async removePromise(p, { recursive = true, maxRetries = 5 } = {}) { + let stat; + try { + stat = await this.lstatPromise(p); + } catch (error) { + if (error.code === `ENOENT`) { + return; + } else { + throw error; + } + } + if (stat.isDirectory()) { + if (recursive) { + const entries = await this.readdirPromise(p); + await Promise.all(entries.map((entry) => { + return this.removePromise(this.pathUtils.resolve(p, entry)); + })); + } + for (let t = 0; t <= maxRetries; t++) { + try { + await this.rmdirPromise(p); + break; + } catch (error) { + if (error.code !== `EBUSY` && error.code !== `ENOTEMPTY`) { + throw error; + } else if (t < maxRetries) { + await new Promise((resolve) => setTimeout(resolve, t * 100)); + } + } + } + } else { + await this.unlinkPromise(p); + } + } + removeSync(p, { recursive = true } = {}) { + let stat; + try { + stat = this.lstatSync(p); + } catch (error) { + if (error.code === `ENOENT`) { + return; + } else { + throw error; + } + } + if (stat.isDirectory()) { + if (recursive) + for (const entry of this.readdirSync(p)) + this.removeSync(this.pathUtils.resolve(p, entry)); + this.rmdirSync(p); + } else { + this.unlinkSync(p); + } + } + async mkdirpPromise(p, { chmod, utimes } = {}) { + p = this.resolve(p); + if (p === this.pathUtils.dirname(p)) + return void 0; + const parts = p.split(this.pathUtils.sep); + let createdDirectory; + for (let u = 2; u <= parts.length; ++u) { + const subPath = parts.slice(0, u).join(this.pathUtils.sep); + if (!this.existsSync(subPath)) { + try { + await this.mkdirPromise(subPath); + } catch (error) { + if (error.code === `EEXIST`) { + continue; + } else { + throw error; + } + } + createdDirectory ??= subPath; + if (chmod != null) + await this.chmodPromise(subPath, chmod); + if (utimes != null) { + await this.utimesPromise(subPath, utimes[0], utimes[1]); + } else { + const parentStat = await this.statPromise(this.pathUtils.dirname(subPath)); + await this.utimesPromise(subPath, parentStat.atime, parentStat.mtime); + } + } + } + return createdDirectory; + } + mkdirpSync(p, { chmod, utimes } = {}) { + p = this.resolve(p); + if (p === this.pathUtils.dirname(p)) + return void 0; + const parts = p.split(this.pathUtils.sep); + let createdDirectory; + for (let u = 2; u <= parts.length; ++u) { + const subPath = parts.slice(0, u).join(this.pathUtils.sep); + if (!this.existsSync(subPath)) { + try { + this.mkdirSync(subPath); + } catch (error) { + if (error.code === `EEXIST`) { + continue; + } else { + throw error; + } + } + createdDirectory ??= subPath; + if (chmod != null) + this.chmodSync(subPath, chmod); + if (utimes != null) { + this.utimesSync(subPath, utimes[0], utimes[1]); + } else { + const parentStat = this.statSync(this.pathUtils.dirname(subPath)); + this.utimesSync(subPath, parentStat.atime, parentStat.mtime); + } + } + } + return createdDirectory; + } + async copyPromise(destination, source, { baseFs = this, overwrite = true, stableSort = false, stableTime = false, linkStrategy = null } = {}) { + return await copyPromise(this, destination, baseFs, source, { overwrite, stableSort, stableTime, linkStrategy }); + } + copySync(destination, source, { baseFs = this, overwrite = true } = {}) { + const stat = baseFs.lstatSync(source); + const exists = this.existsSync(destination); + if (stat.isDirectory()) { + this.mkdirpSync(destination); + const directoryListing = baseFs.readdirSync(source); + for (const entry of directoryListing) { + this.copySync(this.pathUtils.join(destination, entry), baseFs.pathUtils.join(source, entry), { baseFs, overwrite }); + } + } else if (stat.isFile()) { + if (!exists || overwrite) { + if (exists) + this.removeSync(destination); + const content = baseFs.readFileSync(source); + this.writeFileSync(destination, content); + } + } else if (stat.isSymbolicLink()) { + if (!exists || overwrite) { + if (exists) + this.removeSync(destination); + const target = baseFs.readlinkSync(source); + this.symlinkSync(convertPath(this.pathUtils, target), destination); + } + } else { + throw new Error(`Unsupported file type (file: ${source}, mode: 0o${stat.mode.toString(8).padStart(6, `0`)})`); + } + const mode = stat.mode & 511; + this.chmodSync(destination, mode); + } + async changeFilePromise(p, content, opts = {}) { + if (Buffer.isBuffer(content)) { + return this.changeFileBufferPromise(p, content, opts); + } else { + return this.changeFileTextPromise(p, content, opts); + } + } + async changeFileBufferPromise(p, content, { mode } = {}) { + let current = Buffer.alloc(0); + try { + current = await this.readFilePromise(p); + } catch { + } + if (Buffer.compare(current, content) === 0) + return; + await this.writeFilePromise(p, content, { mode }); + } + async changeFileTextPromise(p, content, { automaticNewlines, mode } = {}) { + let current = ``; + try { + current = await this.readFilePromise(p, `utf8`); + } catch { + } + const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content; + if (current === normalizedContent) + return; + await this.writeFilePromise(p, normalizedContent, { mode }); + } + changeFileSync(p, content, opts = {}) { + if (Buffer.isBuffer(content)) { + return this.changeFileBufferSync(p, content, opts); + } else { + return this.changeFileTextSync(p, content, opts); + } + } + changeFileBufferSync(p, content, { mode } = {}) { + let current = Buffer.alloc(0); + try { + current = this.readFileSync(p); + } catch { + } + if (Buffer.compare(current, content) === 0) + return; + this.writeFileSync(p, content, { mode }); + } + changeFileTextSync(p, content, { automaticNewlines = false, mode } = {}) { + let current = ``; + try { + current = this.readFileSync(p, `utf8`); + } catch { + } + const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content; + if (current === normalizedContent) + return; + this.writeFileSync(p, normalizedContent, { mode }); + } + async movePromise(fromP, toP) { + try { + await this.renamePromise(fromP, toP); + } catch (error) { + if (error.code === `EXDEV`) { + await this.copyPromise(toP, fromP); + await this.removePromise(fromP); + } else { + throw error; + } + } + } + moveSync(fromP, toP) { + try { + this.renameSync(fromP, toP); + } catch (error) { + if (error.code === `EXDEV`) { + this.copySync(toP, fromP); + this.removeSync(fromP); + } else { + throw error; + } + } + } + async lockPromise(affectedPath, callback) { + const lockPath = `${affectedPath}.flock`; + const interval = 1e3 / 60; + const startTime = Date.now(); + let fd = null; + const isAlive = async () => { + let pid; + try { + [pid] = await this.readJsonPromise(lockPath); + } catch { + return Date.now() - startTime < 500; + } + try { + process.kill(pid, 0); + return true; + } catch { + return false; + } + }; + while (fd === null) { + try { + fd = await this.openPromise(lockPath, `wx`); + } catch (error) { + if (error.code === `EEXIST`) { + if (!await isAlive()) { + try { + await this.unlinkPromise(lockPath); + continue; + } catch { + } + } + if (Date.now() - startTime < 60 * 1e3) { + await new Promise((resolve) => setTimeout(resolve, interval)); + } else { + throw new Error(`Couldn't acquire a lock in a reasonable time (via ${lockPath})`); + } + } else { + throw error; + } + } + } + await this.writePromise(fd, JSON.stringify([process.pid])); + try { + return await callback(); + } finally { + try { + await this.closePromise(fd); + await this.unlinkPromise(lockPath); + } catch { + } + } + } + async readJsonPromise(p) { + const content = await this.readFilePromise(p, `utf8`); + try { + return JSON.parse(content); + } catch (error) { + error.message += ` (in ${p})`; + throw error; + } + } + readJsonSync(p) { + const content = this.readFileSync(p, `utf8`); + try { + return JSON.parse(content); + } catch (error) { + error.message += ` (in ${p})`; + throw error; + } + } + async writeJsonPromise(p, data, { compact = false } = {}) { + const space = compact ? 0 : 2; + return await this.writeFilePromise(p, `${JSON.stringify(data, null, space)} +`); + } + writeJsonSync(p, data, { compact = false } = {}) { + const space = compact ? 0 : 2; + return this.writeFileSync(p, `${JSON.stringify(data, null, space)} +`); + } + async preserveTimePromise(p, cb) { + const stat = await this.lstatPromise(p); + const result = await cb(); + if (typeof result !== `undefined`) + p = result; + await this.lutimesPromise(p, stat.atime, stat.mtime); + } + async preserveTimeSync(p, cb) { + const stat = this.lstatSync(p); + const result = cb(); + if (typeof result !== `undefined`) + p = result; + this.lutimesSync(p, stat.atime, stat.mtime); + } +} +class BasePortableFakeFS extends FakeFS { + constructor() { + super(ppath); + } +} +function getEndOfLine(content) { + const matches = content.match(/\r?\n/g); + if (matches === null) + return os.EOL; + const crlf = matches.filter((nl) => nl === `\r +`).length; + const lf = matches.length - crlf; + return crlf > lf ? `\r +` : ` +`; +} +function normalizeLineEndings(originalContent, newContent) { + return newContent.replace(/\r?\n/g, getEndOfLine(originalContent)); +} + +class ProxiedFS extends FakeFS { + getExtractHint(hints) { + return this.baseFs.getExtractHint(hints); + } + resolve(path) { + return this.mapFromBase(this.baseFs.resolve(this.mapToBase(path))); + } + getRealPath() { + return this.mapFromBase(this.baseFs.getRealPath()); + } + async openPromise(p, flags, mode) { + return this.baseFs.openPromise(this.mapToBase(p), flags, mode); + } + openSync(p, flags, mode) { + return this.baseFs.openSync(this.mapToBase(p), flags, mode); + } + async opendirPromise(p, opts) { + return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(p), opts), { path: p }); + } + opendirSync(p, opts) { + return Object.assign(this.baseFs.opendirSync(this.mapToBase(p), opts), { path: p }); + } + async readPromise(fd, buffer, offset, length, position) { + return await this.baseFs.readPromise(fd, buffer, offset, length, position); + } + readSync(fd, buffer, offset, length, position) { + return this.baseFs.readSync(fd, buffer, offset, length, position); + } + async writePromise(fd, buffer, offset, length, position) { + if (typeof buffer === `string`) { + return await this.baseFs.writePromise(fd, buffer, offset); + } else { + return await this.baseFs.writePromise(fd, buffer, offset, length, position); + } + } + writeSync(fd, buffer, offset, length, position) { + if (typeof buffer === `string`) { + return this.baseFs.writeSync(fd, buffer, offset); + } else { + return this.baseFs.writeSync(fd, buffer, offset, length, position); + } + } + async closePromise(fd) { + return this.baseFs.closePromise(fd); + } + closeSync(fd) { + this.baseFs.closeSync(fd); + } + createReadStream(p, opts) { + return this.baseFs.createReadStream(p !== null ? this.mapToBase(p) : p, opts); + } + createWriteStream(p, opts) { + return this.baseFs.createWriteStream(p !== null ? this.mapToBase(p) : p, opts); + } + async realpathPromise(p) { + return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(p))); + } + realpathSync(p) { + return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(p))); + } + async existsPromise(p) { + return this.baseFs.existsPromise(this.mapToBase(p)); + } + existsSync(p) { + return this.baseFs.existsSync(this.mapToBase(p)); + } + accessSync(p, mode) { + return this.baseFs.accessSync(this.mapToBase(p), mode); + } + async accessPromise(p, mode) { + return this.baseFs.accessPromise(this.mapToBase(p), mode); + } + async statPromise(p, opts) { + return this.baseFs.statPromise(this.mapToBase(p), opts); + } + statSync(p, opts) { + return this.baseFs.statSync(this.mapToBase(p), opts); + } + async fstatPromise(fd, opts) { + return this.baseFs.fstatPromise(fd, opts); + } + fstatSync(fd, opts) { + return this.baseFs.fstatSync(fd, opts); + } + lstatPromise(p, opts) { + return this.baseFs.lstatPromise(this.mapToBase(p), opts); + } + lstatSync(p, opts) { + return this.baseFs.lstatSync(this.mapToBase(p), opts); + } + async fchmodPromise(fd, mask) { + return this.baseFs.fchmodPromise(fd, mask); + } + fchmodSync(fd, mask) { + return this.baseFs.fchmodSync(fd, mask); + } + async chmodPromise(p, mask) { + return this.baseFs.chmodPromise(this.mapToBase(p), mask); + } + chmodSync(p, mask) { + return this.baseFs.chmodSync(this.mapToBase(p), mask); + } + async fchownPromise(fd, uid, gid) { + return this.baseFs.fchownPromise(fd, uid, gid); + } + fchownSync(fd, uid, gid) { + return this.baseFs.fchownSync(fd, uid, gid); + } + async chownPromise(p, uid, gid) { + return this.baseFs.chownPromise(this.mapToBase(p), uid, gid); + } + chownSync(p, uid, gid) { + return this.baseFs.chownSync(this.mapToBase(p), uid, gid); + } + async renamePromise(oldP, newP) { + return this.baseFs.renamePromise(this.mapToBase(oldP), this.mapToBase(newP)); + } + renameSync(oldP, newP) { + return this.baseFs.renameSync(this.mapToBase(oldP), this.mapToBase(newP)); + } + async copyFilePromise(sourceP, destP, flags = 0) { + return this.baseFs.copyFilePromise(this.mapToBase(sourceP), this.mapToBase(destP), flags); + } + copyFileSync(sourceP, destP, flags = 0) { + return this.baseFs.copyFileSync(this.mapToBase(sourceP), this.mapToBase(destP), flags); + } + async appendFilePromise(p, content, opts) { + return this.baseFs.appendFilePromise(this.fsMapToBase(p), content, opts); + } + appendFileSync(p, content, opts) { + return this.baseFs.appendFileSync(this.fsMapToBase(p), content, opts); + } + async writeFilePromise(p, content, opts) { + return this.baseFs.writeFilePromise(this.fsMapToBase(p), content, opts); + } + writeFileSync(p, content, opts) { + return this.baseFs.writeFileSync(this.fsMapToBase(p), content, opts); + } + async unlinkPromise(p) { + return this.baseFs.unlinkPromise(this.mapToBase(p)); + } + unlinkSync(p) { + return this.baseFs.unlinkSync(this.mapToBase(p)); + } + async utimesPromise(p, atime, mtime) { + return this.baseFs.utimesPromise(this.mapToBase(p), atime, mtime); + } + utimesSync(p, atime, mtime) { + return this.baseFs.utimesSync(this.mapToBase(p), atime, mtime); + } + async lutimesPromise(p, atime, mtime) { + return this.baseFs.lutimesPromise(this.mapToBase(p), atime, mtime); + } + lutimesSync(p, atime, mtime) { + return this.baseFs.lutimesSync(this.mapToBase(p), atime, mtime); + } + async mkdirPromise(p, opts) { + return this.baseFs.mkdirPromise(this.mapToBase(p), opts); + } + mkdirSync(p, opts) { + return this.baseFs.mkdirSync(this.mapToBase(p), opts); + } + async rmdirPromise(p, opts) { + return this.baseFs.rmdirPromise(this.mapToBase(p), opts); + } + rmdirSync(p, opts) { + return this.baseFs.rmdirSync(this.mapToBase(p), opts); + } + async rmPromise(p, opts) { + return this.baseFs.rmPromise(this.mapToBase(p), opts); + } + rmSync(p, opts) { + return this.baseFs.rmSync(this.mapToBase(p), opts); + } + async linkPromise(existingP, newP) { + return this.baseFs.linkPromise(this.mapToBase(existingP), this.mapToBase(newP)); + } + linkSync(existingP, newP) { + return this.baseFs.linkSync(this.mapToBase(existingP), this.mapToBase(newP)); + } + async symlinkPromise(target, p, type) { + const mappedP = this.mapToBase(p); + if (this.pathUtils.isAbsolute(target)) + return this.baseFs.symlinkPromise(this.mapToBase(target), mappedP, type); + const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target)); + const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget); + return this.baseFs.symlinkPromise(mappedTarget, mappedP, type); + } + symlinkSync(target, p, type) { + const mappedP = this.mapToBase(p); + if (this.pathUtils.isAbsolute(target)) + return this.baseFs.symlinkSync(this.mapToBase(target), mappedP, type); + const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target)); + const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget); + return this.baseFs.symlinkSync(mappedTarget, mappedP, type); + } + async readFilePromise(p, encoding) { + return this.baseFs.readFilePromise(this.fsMapToBase(p), encoding); + } + readFileSync(p, encoding) { + return this.baseFs.readFileSync(this.fsMapToBase(p), encoding); + } + readdirPromise(p, opts) { + return this.baseFs.readdirPromise(this.mapToBase(p), opts); + } + readdirSync(p, opts) { + return this.baseFs.readdirSync(this.mapToBase(p), opts); + } + async readlinkPromise(p) { + return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(p))); + } + readlinkSync(p) { + return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(p))); + } + async truncatePromise(p, len) { + return this.baseFs.truncatePromise(this.mapToBase(p), len); + } + truncateSync(p, len) { + return this.baseFs.truncateSync(this.mapToBase(p), len); + } + async ftruncatePromise(fd, len) { + return this.baseFs.ftruncatePromise(fd, len); + } + ftruncateSync(fd, len) { + return this.baseFs.ftruncateSync(fd, len); + } + watch(p, a, b) { + return this.baseFs.watch( + this.mapToBase(p), + // @ts-expect-error - reason TBS + a, + b + ); + } + watchFile(p, a, b) { + return this.baseFs.watchFile( + this.mapToBase(p), + // @ts-expect-error - reason TBS + a, + b + ); + } + unwatchFile(p, cb) { + return this.baseFs.unwatchFile(this.mapToBase(p), cb); + } + fsMapToBase(p) { + if (typeof p === `number`) { + return p; + } else { + return this.mapToBase(p); + } + } +} + +function direntToPortable(dirent) { + const portableDirent = dirent; + if (typeof dirent.path === `string`) + portableDirent.path = npath.toPortablePath(dirent.path); + return portableDirent; +} +class NodeFS extends BasePortableFakeFS { + realFs; + constructor(realFs = fs__default.default) { + super(); + this.realFs = realFs; + } + getExtractHint() { + return false; + } + getRealPath() { + return PortablePath.root; + } + resolve(p) { + return ppath.resolve(p); + } + async openPromise(p, flags, mode) { + return await new Promise((resolve, reject) => { + this.realFs.open(npath.fromPortablePath(p), flags, mode, this.makeCallback(resolve, reject)); + }); + } + openSync(p, flags, mode) { + return this.realFs.openSync(npath.fromPortablePath(p), flags, mode); + } + async opendirPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (typeof opts !== `undefined`) { + this.realFs.opendir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.opendir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }).then((dir) => { + const dirWithFixedPath = dir; + Object.defineProperty(dirWithFixedPath, `path`, { + value: p, + configurable: true, + writable: true + }); + return dirWithFixedPath; + }); + } + opendirSync(p, opts) { + const dir = typeof opts !== `undefined` ? this.realFs.opendirSync(npath.fromPortablePath(p), opts) : this.realFs.opendirSync(npath.fromPortablePath(p)); + const dirWithFixedPath = dir; + Object.defineProperty(dirWithFixedPath, `path`, { + value: p, + configurable: true, + writable: true + }); + return dirWithFixedPath; + } + async readPromise(fd, buffer, offset = 0, length = 0, position = -1) { + return await new Promise((resolve, reject) => { + this.realFs.read(fd, buffer, offset, length, position, (error, bytesRead) => { + if (error) { + reject(error); + } else { + resolve(bytesRead); + } + }); + }); + } + readSync(fd, buffer, offset, length, position) { + return this.realFs.readSync(fd, buffer, offset, length, position); + } + async writePromise(fd, buffer, offset, length, position) { + return await new Promise((resolve, reject) => { + if (typeof buffer === `string`) { + return this.realFs.write(fd, buffer, offset, this.makeCallback(resolve, reject)); + } else { + return this.realFs.write(fd, buffer, offset, length, position, this.makeCallback(resolve, reject)); + } + }); + } + writeSync(fd, buffer, offset, length, position) { + if (typeof buffer === `string`) { + return this.realFs.writeSync(fd, buffer, offset); + } else { + return this.realFs.writeSync(fd, buffer, offset, length, position); + } + } + async closePromise(fd) { + await new Promise((resolve, reject) => { + this.realFs.close(fd, this.makeCallback(resolve, reject)); + }); + } + closeSync(fd) { + this.realFs.closeSync(fd); + } + createReadStream(p, opts) { + const realPath = p !== null ? npath.fromPortablePath(p) : p; + return this.realFs.createReadStream(realPath, opts); + } + createWriteStream(p, opts) { + const realPath = p !== null ? npath.fromPortablePath(p) : p; + return this.realFs.createWriteStream(realPath, opts); + } + async realpathPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.realpath(npath.fromPortablePath(p), {}, this.makeCallback(resolve, reject)); + }).then((path) => { + return npath.toPortablePath(path); + }); + } + realpathSync(p) { + return npath.toPortablePath(this.realFs.realpathSync(npath.fromPortablePath(p), {})); + } + async existsPromise(p) { + return await new Promise((resolve) => { + this.realFs.exists(npath.fromPortablePath(p), resolve); + }); + } + accessSync(p, mode) { + return this.realFs.accessSync(npath.fromPortablePath(p), mode); + } + async accessPromise(p, mode) { + return await new Promise((resolve, reject) => { + this.realFs.access(npath.fromPortablePath(p), mode, this.makeCallback(resolve, reject)); + }); + } + existsSync(p) { + return this.realFs.existsSync(npath.fromPortablePath(p)); + } + async statPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.stat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.stat(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + statSync(p, opts) { + if (opts) { + return this.realFs.statSync(npath.fromPortablePath(p), opts); + } else { + return this.realFs.statSync(npath.fromPortablePath(p)); + } + } + async fstatPromise(fd, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.fstat(fd, opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.fstat(fd, this.makeCallback(resolve, reject)); + } + }); + } + fstatSync(fd, opts) { + if (opts) { + return this.realFs.fstatSync(fd, opts); + } else { + return this.realFs.fstatSync(fd); + } + } + async lstatPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.lstat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.lstat(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + lstatSync(p, opts) { + if (opts) { + return this.realFs.lstatSync(npath.fromPortablePath(p), opts); + } else { + return this.realFs.lstatSync(npath.fromPortablePath(p)); + } + } + async fchmodPromise(fd, mask) { + return await new Promise((resolve, reject) => { + this.realFs.fchmod(fd, mask, this.makeCallback(resolve, reject)); + }); + } + fchmodSync(fd, mask) { + return this.realFs.fchmodSync(fd, mask); + } + async chmodPromise(p, mask) { + return await new Promise((resolve, reject) => { + this.realFs.chmod(npath.fromPortablePath(p), mask, this.makeCallback(resolve, reject)); + }); + } + chmodSync(p, mask) { + return this.realFs.chmodSync(npath.fromPortablePath(p), mask); + } + async fchownPromise(fd, uid, gid) { + return await new Promise((resolve, reject) => { + this.realFs.fchown(fd, uid, gid, this.makeCallback(resolve, reject)); + }); + } + fchownSync(fd, uid, gid) { + return this.realFs.fchownSync(fd, uid, gid); + } + async chownPromise(p, uid, gid) { + return await new Promise((resolve, reject) => { + this.realFs.chown(npath.fromPortablePath(p), uid, gid, this.makeCallback(resolve, reject)); + }); + } + chownSync(p, uid, gid) { + return this.realFs.chownSync(npath.fromPortablePath(p), uid, gid); + } + async renamePromise(oldP, newP) { + return await new Promise((resolve, reject) => { + this.realFs.rename(npath.fromPortablePath(oldP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject)); + }); + } + renameSync(oldP, newP) { + return this.realFs.renameSync(npath.fromPortablePath(oldP), npath.fromPortablePath(newP)); + } + async copyFilePromise(sourceP, destP, flags = 0) { + return await new Promise((resolve, reject) => { + this.realFs.copyFile(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags, this.makeCallback(resolve, reject)); + }); + } + copyFileSync(sourceP, destP, flags = 0) { + return this.realFs.copyFileSync(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags); + } + async appendFilePromise(p, content, opts) { + return await new Promise((resolve, reject) => { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.appendFile(fsNativePath, content, opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.appendFile(fsNativePath, content, this.makeCallback(resolve, reject)); + } + }); + } + appendFileSync(p, content, opts) { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.appendFileSync(fsNativePath, content, opts); + } else { + this.realFs.appendFileSync(fsNativePath, content); + } + } + async writeFilePromise(p, content, opts) { + return await new Promise((resolve, reject) => { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.writeFile(fsNativePath, content, opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.writeFile(fsNativePath, content, this.makeCallback(resolve, reject)); + } + }); + } + writeFileSync(p, content, opts) { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.writeFileSync(fsNativePath, content, opts); + } else { + this.realFs.writeFileSync(fsNativePath, content); + } + } + async unlinkPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.unlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + }); + } + unlinkSync(p) { + return this.realFs.unlinkSync(npath.fromPortablePath(p)); + } + async utimesPromise(p, atime, mtime) { + return await new Promise((resolve, reject) => { + this.realFs.utimes(npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject)); + }); + } + utimesSync(p, atime, mtime) { + this.realFs.utimesSync(npath.fromPortablePath(p), atime, mtime); + } + async lutimesPromise(p, atime, mtime) { + return await new Promise((resolve, reject) => { + this.realFs.lutimes(npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject)); + }); + } + lutimesSync(p, atime, mtime) { + this.realFs.lutimesSync(npath.fromPortablePath(p), atime, mtime); + } + async mkdirPromise(p, opts) { + return await new Promise((resolve, reject) => { + this.realFs.mkdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + }); + } + mkdirSync(p, opts) { + return this.realFs.mkdirSync(npath.fromPortablePath(p), opts); + } + async rmdirPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.rmdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.rmdir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + rmdirSync(p, opts) { + return this.realFs.rmdirSync(npath.fromPortablePath(p), opts); + } + async rmPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.rm(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.rm(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + rmSync(p, opts) { + return this.realFs.rmSync(npath.fromPortablePath(p), opts); + } + async linkPromise(existingP, newP) { + return await new Promise((resolve, reject) => { + this.realFs.link(npath.fromPortablePath(existingP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject)); + }); + } + linkSync(existingP, newP) { + return this.realFs.linkSync(npath.fromPortablePath(existingP), npath.fromPortablePath(newP)); + } + async symlinkPromise(target, p, type) { + return await new Promise((resolve, reject) => { + this.realFs.symlink(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type, this.makeCallback(resolve, reject)); + }); + } + symlinkSync(target, p, type) { + return this.realFs.symlinkSync(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type); + } + async readFilePromise(p, encoding) { + return await new Promise((resolve, reject) => { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + this.realFs.readFile(fsNativePath, encoding, this.makeCallback(resolve, reject)); + }); + } + readFileSync(p, encoding) { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + return this.realFs.readFileSync(fsNativePath, encoding); + } + async readdirPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + if (opts.recursive && process.platform === `win32`) { + if (opts.withFileTypes) { + this.realFs.readdir(npath.fromPortablePath(p), opts, this.makeCallback((results) => resolve(results.map(direntToPortable)), reject)); + } else { + this.realFs.readdir(npath.fromPortablePath(p), opts, this.makeCallback((results) => resolve(results.map(npath.toPortablePath)), reject)); + } + } else { + this.realFs.readdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } + } else { + this.realFs.readdir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + readdirSync(p, opts) { + if (opts) { + if (opts.recursive && process.platform === `win32`) { + if (opts.withFileTypes) { + return this.realFs.readdirSync(npath.fromPortablePath(p), opts).map(direntToPortable); + } else { + return this.realFs.readdirSync(npath.fromPortablePath(p), opts).map(npath.toPortablePath); + } + } else { + return this.realFs.readdirSync(npath.fromPortablePath(p), opts); + } + } else { + return this.realFs.readdirSync(npath.fromPortablePath(p)); + } + } + async readlinkPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.readlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + }).then((path) => { + return npath.toPortablePath(path); + }); + } + readlinkSync(p) { + return npath.toPortablePath(this.realFs.readlinkSync(npath.fromPortablePath(p))); + } + async truncatePromise(p, len) { + return await new Promise((resolve, reject) => { + this.realFs.truncate(npath.fromPortablePath(p), len, this.makeCallback(resolve, reject)); + }); + } + truncateSync(p, len) { + return this.realFs.truncateSync(npath.fromPortablePath(p), len); + } + async ftruncatePromise(fd, len) { + return await new Promise((resolve, reject) => { + this.realFs.ftruncate(fd, len, this.makeCallback(resolve, reject)); + }); + } + ftruncateSync(fd, len) { + return this.realFs.ftruncateSync(fd, len); + } + watch(p, a, b) { + return this.realFs.watch( + npath.fromPortablePath(p), + // @ts-expect-error - reason TBS + a, + b + ); + } + watchFile(p, a, b) { + return this.realFs.watchFile( + npath.fromPortablePath(p), + // @ts-expect-error - reason TBS + a, + b + ); + } + unwatchFile(p, cb) { + return this.realFs.unwatchFile(npath.fromPortablePath(p), cb); + } + makeCallback(resolve, reject) { + return (err, result) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }; + } +} + +const MOUNT_MASK = 4278190080; +class MountFS extends BasePortableFakeFS { + baseFs; + mountInstances; + fdMap = /* @__PURE__ */ new Map(); + nextFd = 3; + factoryPromise; + factorySync; + filter; + getMountPoint; + magic; + maxAge; + maxOpenFiles; + typeCheck; + isMount = /* @__PURE__ */ new Set(); + notMount = /* @__PURE__ */ new Set(); + realPaths = /* @__PURE__ */ new Map(); + constructor({ baseFs = new NodeFS(), filter = null, magicByte = 42, maxOpenFiles = Infinity, useCache = true, maxAge = 5e3, typeCheck = fs.constants.S_IFREG, getMountPoint, factoryPromise, factorySync }) { + if (Math.floor(magicByte) !== magicByte || !(magicByte > 1 && magicByte <= 127)) + throw new Error(`The magic byte must be set to a round value between 1 and 127 included`); + super(); + this.baseFs = baseFs; + this.mountInstances = useCache ? /* @__PURE__ */ new Map() : null; + this.factoryPromise = factoryPromise; + this.factorySync = factorySync; + this.filter = filter; + this.getMountPoint = getMountPoint; + this.magic = magicByte << 24; + this.maxAge = maxAge; + this.maxOpenFiles = maxOpenFiles; + this.typeCheck = typeCheck; + } + getExtractHint(hints) { + return this.baseFs.getExtractHint(hints); + } + getRealPath() { + return this.baseFs.getRealPath(); + } + saveAndClose() { + unwatchAllFiles(this); + if (this.mountInstances) { + for (const [path, { childFs }] of this.mountInstances.entries()) { + childFs.saveAndClose?.(); + this.mountInstances.delete(path); + } + } + } + discardAndClose() { + unwatchAllFiles(this); + if (this.mountInstances) { + for (const [path, { childFs }] of this.mountInstances.entries()) { + childFs.discardAndClose?.(); + this.mountInstances.delete(path); + } + } + } + resolve(p) { + return this.baseFs.resolve(p); + } + remapFd(mountFs, fd) { + const remappedFd = this.nextFd++ | this.magic; + this.fdMap.set(remappedFd, [mountFs, fd]); + return remappedFd; + } + async openPromise(p, flags, mode) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.openPromise(p, flags, mode); + }, async (mountFs, { subPath }) => { + return this.remapFd(mountFs, await mountFs.openPromise(subPath, flags, mode)); + }); + } + openSync(p, flags, mode) { + return this.makeCallSync(p, () => { + return this.baseFs.openSync(p, flags, mode); + }, (mountFs, { subPath }) => { + return this.remapFd(mountFs, mountFs.openSync(subPath, flags, mode)); + }); + } + async opendirPromise(p, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.opendirPromise(p, opts); + }, async (mountFs, { subPath }) => { + return await mountFs.opendirPromise(subPath, opts); + }, { + requireSubpath: false + }); + } + opendirSync(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.opendirSync(p, opts); + }, (mountFs, { subPath }) => { + return mountFs.opendirSync(subPath, opts); + }, { + requireSubpath: false + }); + } + async readPromise(fd, buffer, offset, length, position) { + if ((fd & MOUNT_MASK) !== this.magic) + return await this.baseFs.readPromise(fd, buffer, offset, length, position); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`read`); + const [mountFs, realFd] = entry; + return await mountFs.readPromise(realFd, buffer, offset, length, position); + } + readSync(fd, buffer, offset, length, position) { + if ((fd & MOUNT_MASK) !== this.magic) + return this.baseFs.readSync(fd, buffer, offset, length, position); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`readSync`); + const [mountFs, realFd] = entry; + return mountFs.readSync(realFd, buffer, offset, length, position); + } + async writePromise(fd, buffer, offset, length, position) { + if ((fd & MOUNT_MASK) !== this.magic) { + if (typeof buffer === `string`) { + return await this.baseFs.writePromise(fd, buffer, offset); + } else { + return await this.baseFs.writePromise(fd, buffer, offset, length, position); + } + } + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`write`); + const [mountFs, realFd] = entry; + if (typeof buffer === `string`) { + return await mountFs.writePromise(realFd, buffer, offset); + } else { + return await mountFs.writePromise(realFd, buffer, offset, length, position); + } + } + writeSync(fd, buffer, offset, length, position) { + if ((fd & MOUNT_MASK) !== this.magic) { + if (typeof buffer === `string`) { + return this.baseFs.writeSync(fd, buffer, offset); + } else { + return this.baseFs.writeSync(fd, buffer, offset, length, position); + } + } + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`writeSync`); + const [mountFs, realFd] = entry; + if (typeof buffer === `string`) { + return mountFs.writeSync(realFd, buffer, offset); + } else { + return mountFs.writeSync(realFd, buffer, offset, length, position); + } + } + async closePromise(fd) { + if ((fd & MOUNT_MASK) !== this.magic) + return await this.baseFs.closePromise(fd); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`close`); + this.fdMap.delete(fd); + const [mountFs, realFd] = entry; + return await mountFs.closePromise(realFd); + } + closeSync(fd) { + if ((fd & MOUNT_MASK) !== this.magic) + return this.baseFs.closeSync(fd); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`closeSync`); + this.fdMap.delete(fd); + const [mountFs, realFd] = entry; + return mountFs.closeSync(realFd); + } + createReadStream(p, opts) { + if (p === null) + return this.baseFs.createReadStream(p, opts); + return this.makeCallSync(p, () => { + return this.baseFs.createReadStream(p, opts); + }, (mountFs, { archivePath, subPath }) => { + const stream = mountFs.createReadStream(subPath, opts); + stream.path = npath.fromPortablePath(this.pathUtils.join(archivePath, subPath)); + return stream; + }); + } + createWriteStream(p, opts) { + if (p === null) + return this.baseFs.createWriteStream(p, opts); + return this.makeCallSync(p, () => { + return this.baseFs.createWriteStream(p, opts); + }, (mountFs, { subPath }) => { + return mountFs.createWriteStream(subPath, opts); + }); + } + async realpathPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.realpathPromise(p); + }, async (mountFs, { archivePath, subPath }) => { + let realArchivePath = this.realPaths.get(archivePath); + if (typeof realArchivePath === `undefined`) { + realArchivePath = await this.baseFs.realpathPromise(archivePath); + this.realPaths.set(archivePath, realArchivePath); + } + return this.pathUtils.join(realArchivePath, this.pathUtils.relative(PortablePath.root, await mountFs.realpathPromise(subPath))); + }); + } + realpathSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.realpathSync(p); + }, (mountFs, { archivePath, subPath }) => { + let realArchivePath = this.realPaths.get(archivePath); + if (typeof realArchivePath === `undefined`) { + realArchivePath = this.baseFs.realpathSync(archivePath); + this.realPaths.set(archivePath, realArchivePath); + } + return this.pathUtils.join(realArchivePath, this.pathUtils.relative(PortablePath.root, mountFs.realpathSync(subPath))); + }); + } + async existsPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.existsPromise(p); + }, async (mountFs, { subPath }) => { + return await mountFs.existsPromise(subPath); + }); + } + existsSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.existsSync(p); + }, (mountFs, { subPath }) => { + return mountFs.existsSync(subPath); + }); + } + async accessPromise(p, mode) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.accessPromise(p, mode); + }, async (mountFs, { subPath }) => { + return await mountFs.accessPromise(subPath, mode); + }); + } + accessSync(p, mode) { + return this.makeCallSync(p, () => { + return this.baseFs.accessSync(p, mode); + }, (mountFs, { subPath }) => { + return mountFs.accessSync(subPath, mode); + }); + } + async statPromise(p, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.statPromise(p, opts); + }, async (mountFs, { subPath }) => { + return await mountFs.statPromise(subPath, opts); + }); + } + statSync(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.statSync(p, opts); + }, (mountFs, { subPath }) => { + return mountFs.statSync(subPath, opts); + }); + } + async fstatPromise(fd, opts) { + if ((fd & MOUNT_MASK) !== this.magic) + return this.baseFs.fstatPromise(fd, opts); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`fstat`); + const [mountFs, realFd] = entry; + return mountFs.fstatPromise(realFd, opts); + } + fstatSync(fd, opts) { + if ((fd & MOUNT_MASK) !== this.magic) + return this.baseFs.fstatSync(fd, opts); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`fstatSync`); + const [mountFs, realFd] = entry; + return mountFs.fstatSync(realFd, opts); + } + async lstatPromise(p, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.lstatPromise(p, opts); + }, async (mountFs, { subPath }) => { + return await mountFs.lstatPromise(subPath, opts); + }); + } + lstatSync(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.lstatSync(p, opts); + }, (mountFs, { subPath }) => { + return mountFs.lstatSync(subPath, opts); + }); + } + async fchmodPromise(fd, mask) { + if ((fd & MOUNT_MASK) !== this.magic) + return this.baseFs.fchmodPromise(fd, mask); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`fchmod`); + const [mountFs, realFd] = entry; + return mountFs.fchmodPromise(realFd, mask); + } + fchmodSync(fd, mask) { + if ((fd & MOUNT_MASK) !== this.magic) + return this.baseFs.fchmodSync(fd, mask); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`fchmodSync`); + const [mountFs, realFd] = entry; + return mountFs.fchmodSync(realFd, mask); + } + async chmodPromise(p, mask) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.chmodPromise(p, mask); + }, async (mountFs, { subPath }) => { + return await mountFs.chmodPromise(subPath, mask); + }); + } + chmodSync(p, mask) { + return this.makeCallSync(p, () => { + return this.baseFs.chmodSync(p, mask); + }, (mountFs, { subPath }) => { + return mountFs.chmodSync(subPath, mask); + }); + } + async fchownPromise(fd, uid, gid) { + if ((fd & MOUNT_MASK) !== this.magic) + return this.baseFs.fchownPromise(fd, uid, gid); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`fchown`); + const [zipFs, realFd] = entry; + return zipFs.fchownPromise(realFd, uid, gid); + } + fchownSync(fd, uid, gid) { + if ((fd & MOUNT_MASK) !== this.magic) + return this.baseFs.fchownSync(fd, uid, gid); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`fchownSync`); + const [zipFs, realFd] = entry; + return zipFs.fchownSync(realFd, uid, gid); + } + async chownPromise(p, uid, gid) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.chownPromise(p, uid, gid); + }, async (mountFs, { subPath }) => { + return await mountFs.chownPromise(subPath, uid, gid); + }); + } + chownSync(p, uid, gid) { + return this.makeCallSync(p, () => { + return this.baseFs.chownSync(p, uid, gid); + }, (mountFs, { subPath }) => { + return mountFs.chownSync(subPath, uid, gid); + }); + } + async renamePromise(oldP, newP) { + return await this.makeCallPromise(oldP, async () => { + return await this.makeCallPromise(newP, async () => { + return await this.baseFs.renamePromise(oldP, newP); + }, async () => { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + }); + }, async (mountFsO, { subPath: subPathO }) => { + return await this.makeCallPromise(newP, async () => { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + }, async (mountFsN, { subPath: subPathN }) => { + if (mountFsO !== mountFsN) { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + } else { + return await mountFsO.renamePromise(subPathO, subPathN); + } + }); + }); + } + renameSync(oldP, newP) { + return this.makeCallSync(oldP, () => { + return this.makeCallSync(newP, () => { + return this.baseFs.renameSync(oldP, newP); + }, () => { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + }); + }, (mountFsO, { subPath: subPathO }) => { + return this.makeCallSync(newP, () => { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + }, (mountFsN, { subPath: subPathN }) => { + if (mountFsO !== mountFsN) { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + } else { + return mountFsO.renameSync(subPathO, subPathN); + } + }); + }); + } + async copyFilePromise(sourceP, destP, flags = 0) { + const fallback = async (sourceFs, sourceP2, destFs, destP2) => { + if ((flags & fs.constants.COPYFILE_FICLONE_FORCE) !== 0) + throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${sourceP2}' -> ${destP2}'`), { code: `EXDEV` }); + if (flags & fs.constants.COPYFILE_EXCL && await this.existsPromise(sourceP2)) + throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EEXIST` }); + let content; + try { + content = await sourceFs.readFilePromise(sourceP2); + } catch { + throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EINVAL` }); + } + await destFs.writeFilePromise(destP2, content); + }; + return await this.makeCallPromise(sourceP, async () => { + return await this.makeCallPromise(destP, async () => { + return await this.baseFs.copyFilePromise(sourceP, destP, flags); + }, async (mountFsD, { subPath: subPathD }) => { + return await fallback(this.baseFs, sourceP, mountFsD, subPathD); + }); + }, async (mountFsS, { subPath: subPathS }) => { + return await this.makeCallPromise(destP, async () => { + return await fallback(mountFsS, subPathS, this.baseFs, destP); + }, async (mountFsD, { subPath: subPathD }) => { + if (mountFsS !== mountFsD) { + return await fallback(mountFsS, subPathS, mountFsD, subPathD); + } else { + return await mountFsS.copyFilePromise(subPathS, subPathD, flags); + } + }); + }); + } + copyFileSync(sourceP, destP, flags = 0) { + const fallback = (sourceFs, sourceP2, destFs, destP2) => { + if ((flags & fs.constants.COPYFILE_FICLONE_FORCE) !== 0) + throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${sourceP2}' -> ${destP2}'`), { code: `EXDEV` }); + if (flags & fs.constants.COPYFILE_EXCL && this.existsSync(sourceP2)) + throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EEXIST` }); + let content; + try { + content = sourceFs.readFileSync(sourceP2); + } catch { + throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EINVAL` }); + } + destFs.writeFileSync(destP2, content); + }; + return this.makeCallSync(sourceP, () => { + return this.makeCallSync(destP, () => { + return this.baseFs.copyFileSync(sourceP, destP, flags); + }, (mountFsD, { subPath: subPathD }) => { + return fallback(this.baseFs, sourceP, mountFsD, subPathD); + }); + }, (mountFsS, { subPath: subPathS }) => { + return this.makeCallSync(destP, () => { + return fallback(mountFsS, subPathS, this.baseFs, destP); + }, (mountFsD, { subPath: subPathD }) => { + if (mountFsS !== mountFsD) { + return fallback(mountFsS, subPathS, mountFsD, subPathD); + } else { + return mountFsS.copyFileSync(subPathS, subPathD, flags); + } + }); + }); + } + async appendFilePromise(p, content, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.appendFilePromise(p, content, opts); + }, async (mountFs, { subPath }) => { + return await mountFs.appendFilePromise(subPath, content, opts); + }); + } + appendFileSync(p, content, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.appendFileSync(p, content, opts); + }, (mountFs, { subPath }) => { + return mountFs.appendFileSync(subPath, content, opts); + }); + } + async writeFilePromise(p, content, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.writeFilePromise(p, content, opts); + }, async (mountFs, { subPath }) => { + return await mountFs.writeFilePromise(subPath, content, opts); + }); + } + writeFileSync(p, content, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.writeFileSync(p, content, opts); + }, (mountFs, { subPath }) => { + return mountFs.writeFileSync(subPath, content, opts); + }); + } + async unlinkPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.unlinkPromise(p); + }, async (mountFs, { subPath }) => { + return await mountFs.unlinkPromise(subPath); + }); + } + unlinkSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.unlinkSync(p); + }, (mountFs, { subPath }) => { + return mountFs.unlinkSync(subPath); + }); + } + async utimesPromise(p, atime, mtime) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.utimesPromise(p, atime, mtime); + }, async (mountFs, { subPath }) => { + return await mountFs.utimesPromise(subPath, atime, mtime); + }); + } + utimesSync(p, atime, mtime) { + return this.makeCallSync(p, () => { + return this.baseFs.utimesSync(p, atime, mtime); + }, (mountFs, { subPath }) => { + return mountFs.utimesSync(subPath, atime, mtime); + }); + } + async lutimesPromise(p, atime, mtime) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.lutimesPromise(p, atime, mtime); + }, async (mountFs, { subPath }) => { + return await mountFs.lutimesPromise(subPath, atime, mtime); + }); + } + lutimesSync(p, atime, mtime) { + return this.makeCallSync(p, () => { + return this.baseFs.lutimesSync(p, atime, mtime); + }, (mountFs, { subPath }) => { + return mountFs.lutimesSync(subPath, atime, mtime); + }); + } + async mkdirPromise(p, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.mkdirPromise(p, opts); + }, async (mountFs, { subPath }) => { + return await mountFs.mkdirPromise(subPath, opts); + }); + } + mkdirSync(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.mkdirSync(p, opts); + }, (mountFs, { subPath }) => { + return mountFs.mkdirSync(subPath, opts); + }); + } + async rmdirPromise(p, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.rmdirPromise(p, opts); + }, async (mountFs, { subPath }) => { + return await mountFs.rmdirPromise(subPath, opts); + }); + } + rmdirSync(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.rmdirSync(p, opts); + }, (mountFs, { subPath }) => { + return mountFs.rmdirSync(subPath, opts); + }); + } + async rmPromise(p, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.rmPromise(p, opts); + }, async (mountFs, { subPath }) => { + return await mountFs.rmPromise(subPath, opts); + }); + } + rmSync(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.rmSync(p, opts); + }, (mountFs, { subPath }) => { + return mountFs.rmSync(subPath, opts); + }); + } + async linkPromise(existingP, newP) { + return await this.makeCallPromise(newP, async () => { + return await this.baseFs.linkPromise(existingP, newP); + }, async (mountFs, { subPath }) => { + return await mountFs.linkPromise(existingP, subPath); + }); + } + linkSync(existingP, newP) { + return this.makeCallSync(newP, () => { + return this.baseFs.linkSync(existingP, newP); + }, (mountFs, { subPath }) => { + return mountFs.linkSync(existingP, subPath); + }); + } + async symlinkPromise(target, p, type) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.symlinkPromise(target, p, type); + }, async (mountFs, { subPath }) => { + return await mountFs.symlinkPromise(target, subPath); + }); + } + symlinkSync(target, p, type) { + return this.makeCallSync(p, () => { + return this.baseFs.symlinkSync(target, p, type); + }, (mountFs, { subPath }) => { + return mountFs.symlinkSync(target, subPath); + }); + } + async readFilePromise(p, encoding) { + return this.makeCallPromise(p, async () => { + return await this.baseFs.readFilePromise(p, encoding); + }, async (mountFs, { subPath }) => { + return await mountFs.readFilePromise(subPath, encoding); + }); + } + readFileSync(p, encoding) { + return this.makeCallSync(p, () => { + return this.baseFs.readFileSync(p, encoding); + }, (mountFs, { subPath }) => { + return mountFs.readFileSync(subPath, encoding); + }); + } + async readdirPromise(p, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.readdirPromise(p, opts); + }, async (mountFs, { subPath }) => { + return await mountFs.readdirPromise(subPath, opts); + }, { + requireSubpath: false + }); + } + readdirSync(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.readdirSync(p, opts); + }, (mountFs, { subPath }) => { + return mountFs.readdirSync(subPath, opts); + }, { + requireSubpath: false + }); + } + async readlinkPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.readlinkPromise(p); + }, async (mountFs, { subPath }) => { + return await mountFs.readlinkPromise(subPath); + }); + } + readlinkSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.readlinkSync(p); + }, (mountFs, { subPath }) => { + return mountFs.readlinkSync(subPath); + }); + } + async truncatePromise(p, len) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.truncatePromise(p, len); + }, async (mountFs, { subPath }) => { + return await mountFs.truncatePromise(subPath, len); + }); + } + truncateSync(p, len) { + return this.makeCallSync(p, () => { + return this.baseFs.truncateSync(p, len); + }, (mountFs, { subPath }) => { + return mountFs.truncateSync(subPath, len); + }); + } + async ftruncatePromise(fd, len) { + if ((fd & MOUNT_MASK) !== this.magic) + return this.baseFs.ftruncatePromise(fd, len); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`ftruncate`); + const [mountFs, realFd] = entry; + return mountFs.ftruncatePromise(realFd, len); + } + ftruncateSync(fd, len) { + if ((fd & MOUNT_MASK) !== this.magic) + return this.baseFs.ftruncateSync(fd, len); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`ftruncateSync`); + const [mountFs, realFd] = entry; + return mountFs.ftruncateSync(realFd, len); + } + watch(p, a, b) { + return this.makeCallSync(p, () => { + return this.baseFs.watch( + p, + // @ts-expect-error - reason TBS + a, + b + ); + }, (mountFs, { subPath }) => { + return mountFs.watch( + subPath, + // @ts-expect-error - reason TBS + a, + b + ); + }); + } + watchFile(p, a, b) { + return this.makeCallSync(p, () => { + return this.baseFs.watchFile( + p, + // @ts-expect-error - reason TBS + a, + b + ); + }, () => { + return watchFile(this, p, a, b); + }); + } + unwatchFile(p, cb) { + return this.makeCallSync(p, () => { + return this.baseFs.unwatchFile(p, cb); + }, () => { + return unwatchFile(this, p, cb); + }); + } + async makeCallPromise(p, discard, accept, { requireSubpath = true } = {}) { + if (typeof p !== `string`) + return await discard(); + const normalizedP = this.resolve(p); + const mountInfo = this.findMount(normalizedP); + if (!mountInfo) + return await discard(); + if (requireSubpath && mountInfo.subPath === `/`) + return await discard(); + return await this.getMountPromise(mountInfo.archivePath, async (mountFs) => await accept(mountFs, mountInfo)); + } + makeCallSync(p, discard, accept, { requireSubpath = true } = {}) { + if (typeof p !== `string`) + return discard(); + const normalizedP = this.resolve(p); + const mountInfo = this.findMount(normalizedP); + if (!mountInfo) + return discard(); + if (requireSubpath && mountInfo.subPath === `/`) + return discard(); + return this.getMountSync(mountInfo.archivePath, (mountFs) => accept(mountFs, mountInfo)); + } + findMount(p) { + if (this.filter && !this.filter.test(p)) + return null; + let filePath = ``; + while (true) { + const pathPartWithArchive = p.substring(filePath.length); + const mountPoint = this.getMountPoint(pathPartWithArchive, filePath); + if (!mountPoint) + return null; + filePath = this.pathUtils.join(filePath, mountPoint); + if (!this.isMount.has(filePath)) { + if (this.notMount.has(filePath)) + continue; + try { + if (this.typeCheck !== null && (this.baseFs.statSync(filePath).mode & fs.constants.S_IFMT) !== this.typeCheck) { + this.notMount.add(filePath); + continue; + } + } catch { + return null; + } + this.isMount.add(filePath); + } + return { + archivePath: filePath, + subPath: this.pathUtils.join(PortablePath.root, p.substring(filePath.length)) + }; + } + } + limitOpenFilesTimeout = null; + limitOpenFiles(max) { + if (this.mountInstances === null) + return; + const now = Date.now(); + let nextExpiresAt = now + this.maxAge; + let closeCount = max === null ? 0 : this.mountInstances.size - max; + for (const [path, { childFs, expiresAt, refCount }] of this.mountInstances.entries()) { + if (refCount !== 0 || childFs.hasOpenFileHandles?.()) { + continue; + } else if (now >= expiresAt) { + childFs.saveAndClose?.(); + this.mountInstances.delete(path); + closeCount -= 1; + continue; + } else if (max === null || closeCount <= 0) { + nextExpiresAt = expiresAt; + break; + } + childFs.saveAndClose?.(); + this.mountInstances.delete(path); + closeCount -= 1; + } + if (this.limitOpenFilesTimeout === null && (max === null && this.mountInstances.size > 0 || max !== null) && isFinite(nextExpiresAt)) { + this.limitOpenFilesTimeout = setTimeout(() => { + this.limitOpenFilesTimeout = null; + this.limitOpenFiles(null); + }, nextExpiresAt - now).unref(); + } + } + async getMountPromise(p, accept) { + if (this.mountInstances) { + let cachedMountFs = this.mountInstances.get(p); + if (!cachedMountFs) { + const createFsInstance = await this.factoryPromise(this.baseFs, p); + cachedMountFs = this.mountInstances.get(p); + if (!cachedMountFs) { + cachedMountFs = { + childFs: createFsInstance(), + expiresAt: 0, + refCount: 0 + }; + } + } + this.mountInstances.delete(p); + this.limitOpenFiles(this.maxOpenFiles - 1); + this.mountInstances.set(p, cachedMountFs); + cachedMountFs.expiresAt = Date.now() + this.maxAge; + cachedMountFs.refCount += 1; + try { + return await accept(cachedMountFs.childFs); + } finally { + cachedMountFs.refCount -= 1; + } + } else { + const mountFs = (await this.factoryPromise(this.baseFs, p))(); + try { + return await accept(mountFs); + } finally { + mountFs.saveAndClose?.(); + } + } + } + getMountSync(p, accept) { + if (this.mountInstances) { + let cachedMountFs = this.mountInstances.get(p); + if (!cachedMountFs) { + cachedMountFs = { + childFs: this.factorySync(this.baseFs, p), + expiresAt: 0, + refCount: 0 + }; + } + this.mountInstances.delete(p); + this.limitOpenFiles(this.maxOpenFiles - 1); + this.mountInstances.set(p, cachedMountFs); + cachedMountFs.expiresAt = Date.now() + this.maxAge; + return accept(cachedMountFs.childFs); + } else { + const childFs = this.factorySync(this.baseFs, p); + try { + return accept(childFs); + } finally { + childFs.saveAndClose?.(); + } + } + } +} + +class PosixFS extends ProxiedFS { + baseFs; + constructor(baseFs) { + super(npath); + this.baseFs = baseFs; + } + mapFromBase(path) { + return npath.fromPortablePath(path); + } + mapToBase(path) { + return npath.toPortablePath(path); + } +} + +const NUMBER_REGEXP = /^[0-9]+$/; +const VIRTUAL_REGEXP = /^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/; +const VALID_COMPONENT = /^([^/]+-)?[a-f0-9]+$/; +class VirtualFS extends ProxiedFS { + baseFs; + static makeVirtualPath(base, component, to) { + if (ppath.basename(base) !== `__virtual__`) + throw new Error(`Assertion failed: Virtual folders must be named "__virtual__"`); + if (!ppath.basename(component).match(VALID_COMPONENT)) + throw new Error(`Assertion failed: Virtual components must be ended by an hexadecimal hash`); + const target = ppath.relative(ppath.dirname(base), to); + const segments = target.split(`/`); + let depth = 0; + while (depth < segments.length && segments[depth] === `..`) + depth += 1; + const finalSegments = segments.slice(depth); + const fullVirtualPath = ppath.join(base, component, String(depth), ...finalSegments); + return fullVirtualPath; + } + static resolveVirtual(p) { + const match = p.match(VIRTUAL_REGEXP); + if (!match || !match[3] && match[5]) + return p; + const target = ppath.dirname(match[1]); + if (!match[3] || !match[4]) + return target; + const isnum = NUMBER_REGEXP.test(match[4]); + if (!isnum) + return p; + const depth = Number(match[4]); + const backstep = `../`.repeat(depth); + const subpath = match[5] || `.`; + return VirtualFS.resolveVirtual(ppath.join(target, backstep, subpath)); + } + constructor({ baseFs = new NodeFS() } = {}) { + super(ppath); + this.baseFs = baseFs; + } + getExtractHint(hints) { + return this.baseFs.getExtractHint(hints); + } + getRealPath() { + return this.baseFs.getRealPath(); + } + realpathSync(p) { + const match = p.match(VIRTUAL_REGEXP); + if (!match) + return this.baseFs.realpathSync(p); + if (!match[5]) + return p; + const realpath = this.baseFs.realpathSync(this.mapToBase(p)); + return VirtualFS.makeVirtualPath(match[1], match[3], realpath); + } + async realpathPromise(p) { + const match = p.match(VIRTUAL_REGEXP); + if (!match) + return await this.baseFs.realpathPromise(p); + if (!match[5]) + return p; + const realpath = await this.baseFs.realpathPromise(this.mapToBase(p)); + return VirtualFS.makeVirtualPath(match[1], match[3], realpath); + } + mapToBase(p) { + if (p === ``) + return p; + if (this.pathUtils.isAbsolute(p)) + return VirtualFS.resolveVirtual(p); + const resolvedRoot = VirtualFS.resolveVirtual(this.baseFs.resolve(PortablePath.dot)); + const resolvedP = VirtualFS.resolveVirtual(this.baseFs.resolve(p)); + return ppath.relative(resolvedRoot, resolvedP) || PortablePath.dot; + } + mapFromBase(p) { + return p; + } +} + +const URL = Number(process.versions.node.split('.', 1)[0]) < 20 ? url.URL : globalThis.URL; + +class NodePathFS extends ProxiedFS { + baseFs; + constructor(baseFs) { + super(npath); + this.baseFs = baseFs; + } + mapFromBase(path) { + return path; + } + mapToBase(path) { + if (typeof path === `string`) + return path; + if (path instanceof URL) + return url.fileURLToPath(path); + if (Buffer.isBuffer(path)) { + const str = path.toString(); + if (!isUtf8(path, str)) + throw new Error(`Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942`); + return str; + } + throw new Error(`Unsupported path type: ${nodeUtils.inspect(path)}`); + } +} +function isUtf8(buf, str) { + if (typeof buffer__default.default.isUtf8 !== `undefined`) + return buffer__default.default.isUtf8(buf); + return Buffer.byteLength(str) === buf.byteLength; +} + +const kBaseFs = Symbol(`kBaseFs`); +const kFd = Symbol(`kFd`); +const kClosePromise = Symbol(`kClosePromise`); +const kCloseResolve = Symbol(`kCloseResolve`); +const kCloseReject = Symbol(`kCloseReject`); +const kRefs = Symbol(`kRefs`); +const kRef = Symbol(`kRef`); +const kUnref = Symbol(`kUnref`); +class FileHandle { + [kBaseFs]; + [kFd]; + [kRefs] = 1; + [kClosePromise] = void 0; + [kCloseResolve] = void 0; + [kCloseReject] = void 0; + constructor(fd, baseFs) { + this[kBaseFs] = baseFs; + this[kFd] = fd; + } + get fd() { + return this[kFd]; + } + async appendFile(data, options) { + try { + this[kRef](this.appendFile); + const encoding = (typeof options === `string` ? options : options?.encoding) ?? void 0; + return await this[kBaseFs].appendFilePromise(this.fd, data, encoding ? { encoding } : void 0); + } finally { + this[kUnref](); + } + } + async chown(uid, gid) { + try { + this[kRef](this.chown); + return await this[kBaseFs].fchownPromise(this.fd, uid, gid); + } finally { + this[kUnref](); + } + } + async chmod(mode) { + try { + this[kRef](this.chmod); + return await this[kBaseFs].fchmodPromise(this.fd, mode); + } finally { + this[kUnref](); + } + } + createReadStream(options) { + return this[kBaseFs].createReadStream(null, { ...options, fd: this.fd }); + } + createWriteStream(options) { + return this[kBaseFs].createWriteStream(null, { ...options, fd: this.fd }); + } + // FIXME: Missing FakeFS version + datasync() { + throw new Error(`Method not implemented.`); + } + // FIXME: Missing FakeFS version + sync() { + throw new Error(`Method not implemented.`); + } + async read(bufferOrOptions, offset, length, position) { + try { + this[kRef](this.read); + let buffer; + if (!Buffer.isBuffer(bufferOrOptions)) { + bufferOrOptions ??= {}; + buffer = bufferOrOptions.buffer ?? Buffer.alloc(16384); + offset = bufferOrOptions.offset || 0; + length = bufferOrOptions.length ?? buffer.byteLength; + position = bufferOrOptions.position ?? null; + } else { + buffer = bufferOrOptions; + } + offset ??= 0; + length ??= 0; + if (length === 0) { + return { + bytesRead: length, + buffer + }; + } + const bytesRead = await this[kBaseFs].readPromise(this.fd, buffer, offset, length, position); + return { + bytesRead, + buffer + }; + } finally { + this[kUnref](); + } + } + async readFile(options) { + try { + this[kRef](this.readFile); + const encoding = (typeof options === `string` ? options : options?.encoding) ?? void 0; + return await this[kBaseFs].readFilePromise(this.fd, encoding); + } finally { + this[kUnref](); + } + } + readLines(options) { + return readline.createInterface({ + input: this.createReadStream(options), + crlfDelay: Infinity + }); + } + async stat(opts) { + try { + this[kRef](this.stat); + return await this[kBaseFs].fstatPromise(this.fd, opts); + } finally { + this[kUnref](); + } + } + async truncate(len) { + try { + this[kRef](this.truncate); + return await this[kBaseFs].ftruncatePromise(this.fd, len); + } finally { + this[kUnref](); + } + } + // FIXME: Missing FakeFS version + utimes(atime, mtime) { + throw new Error(`Method not implemented.`); + } + async writeFile(data, options) { + try { + this[kRef](this.writeFile); + const encoding = (typeof options === `string` ? options : options?.encoding) ?? void 0; + await this[kBaseFs].writeFilePromise(this.fd, data, encoding); + } finally { + this[kUnref](); + } + } + async write(...args) { + try { + this[kRef](this.write); + if (ArrayBuffer.isView(args[0])) { + const [buffer, offset, length, position] = args; + const bytesWritten = await this[kBaseFs].writePromise(this.fd, buffer, offset ?? void 0, length ?? void 0, position ?? void 0); + return { bytesWritten, buffer }; + } else { + const [data, position, encoding] = args; + const bytesWritten = await this[kBaseFs].writePromise(this.fd, data, position, encoding); + return { bytesWritten, buffer: data }; + } + } finally { + this[kUnref](); + } + } + // TODO: Use writev from FakeFS when that is implemented + async writev(buffers, position) { + try { + this[kRef](this.writev); + let bytesWritten = 0; + if (typeof position !== `undefined`) { + for (const buffer of buffers) { + const writeResult = await this.write(buffer, void 0, void 0, position); + bytesWritten += writeResult.bytesWritten; + position += writeResult.bytesWritten; + } + } else { + for (const buffer of buffers) { + const writeResult = await this.write(buffer); + bytesWritten += writeResult.bytesWritten; + } + } + return { + buffers, + bytesWritten + }; + } finally { + this[kUnref](); + } + } + // FIXME: Missing FakeFS version + readv(buffers, position) { + throw new Error(`Method not implemented.`); + } + close() { + if (this[kFd] === -1) return Promise.resolve(); + if (this[kClosePromise]) return this[kClosePromise]; + this[kRefs]--; + if (this[kRefs] === 0) { + const fd = this[kFd]; + this[kFd] = -1; + this[kClosePromise] = this[kBaseFs].closePromise(fd).finally(() => { + this[kClosePromise] = void 0; + }); + } else { + this[kClosePromise] = new Promise((resolve, reject) => { + this[kCloseResolve] = resolve; + this[kCloseReject] = reject; + }).finally(() => { + this[kClosePromise] = void 0; + this[kCloseReject] = void 0; + this[kCloseResolve] = void 0; + }); + } + return this[kClosePromise]; + } + [kRef](caller) { + if (this[kFd] === -1) { + const err = new Error(`file closed`); + err.code = `EBADF`; + err.syscall = caller.name; + throw err; + } + this[kRefs]++; + } + [kUnref]() { + this[kRefs]--; + if (this[kRefs] === 0) { + const fd = this[kFd]; + this[kFd] = -1; + this[kBaseFs].closePromise(fd).then(this[kCloseResolve], this[kCloseReject]); + } + } +} + +const SYNC_IMPLEMENTATIONS = /* @__PURE__ */ new Set([ + `accessSync`, + `appendFileSync`, + `createReadStream`, + `createWriteStream`, + `chmodSync`, + `fchmodSync`, + `chownSync`, + `fchownSync`, + `closeSync`, + `copyFileSync`, + `linkSync`, + `lstatSync`, + `fstatSync`, + `lutimesSync`, + `mkdirSync`, + `openSync`, + `opendirSync`, + `readlinkSync`, + `readFileSync`, + `readdirSync`, + `readlinkSync`, + `realpathSync`, + `renameSync`, + `rmdirSync`, + `rmSync`, + `statSync`, + `symlinkSync`, + `truncateSync`, + `ftruncateSync`, + `unlinkSync`, + `unwatchFile`, + `utimesSync`, + `watch`, + `watchFile`, + `writeFileSync`, + `writeSync` +]); +const ASYNC_IMPLEMENTATIONS = /* @__PURE__ */ new Set([ + `accessPromise`, + `appendFilePromise`, + `fchmodPromise`, + `chmodPromise`, + `fchownPromise`, + `chownPromise`, + `closePromise`, + `copyFilePromise`, + `linkPromise`, + `fstatPromise`, + `lstatPromise`, + `lutimesPromise`, + `mkdirPromise`, + `openPromise`, + `opendirPromise`, + `readdirPromise`, + `realpathPromise`, + `readFilePromise`, + `readdirPromise`, + `readlinkPromise`, + `renamePromise`, + `rmdirPromise`, + `rmPromise`, + `statPromise`, + `symlinkPromise`, + `truncatePromise`, + `ftruncatePromise`, + `unlinkPromise`, + `utimesPromise`, + `writeFilePromise`, + `writeSync` +]); +function patchFs(patchedFs, fakeFs) { + fakeFs = new NodePathFS(fakeFs); + const setupFn = (target, name, replacement) => { + const orig = target[name]; + target[name] = replacement; + if (typeof orig?.[nodeUtils.promisify.custom] !== `undefined`) { + replacement[nodeUtils.promisify.custom] = orig[nodeUtils.promisify.custom]; + } + }; + { + setupFn(patchedFs, `exists`, (p, ...args) => { + const hasCallback = typeof args[args.length - 1] === `function`; + const callback = hasCallback ? args.pop() : () => { + }; + process.nextTick(() => { + fakeFs.existsPromise(p).then((exists) => { + callback(exists); + }, () => { + callback(false); + }); + }); + }); + setupFn(patchedFs, `read`, (...args) => { + let [fd, buffer, offset, length, position, callback] = args; + if (args.length <= 3) { + let options = {}; + if (args.length < 3) { + callback = args[1]; + } else { + options = args[1]; + callback = args[2]; + } + ({ + buffer = Buffer.alloc(16384), + offset = 0, + length = buffer.byteLength, + position + } = options); + } + if (offset == null) + offset = 0; + length |= 0; + if (length === 0) { + process.nextTick(() => { + callback(null, 0, buffer); + }); + return; + } + if (position == null) + position = -1; + process.nextTick(() => { + fakeFs.readPromise(fd, buffer, offset, length, position).then((bytesRead) => { + callback(null, bytesRead, buffer); + }, (error) => { + callback(error, 0, buffer); + }); + }); + }); + for (const fnName of ASYNC_IMPLEMENTATIONS) { + const origName = fnName.replace(/Promise$/, ``); + if (typeof patchedFs[origName] === `undefined`) + continue; + const fakeImpl = fakeFs[fnName]; + if (typeof fakeImpl === `undefined`) + continue; + const wrapper = (...args) => { + const hasCallback = typeof args[args.length - 1] === `function`; + const callback = hasCallback ? args.pop() : () => { + }; + process.nextTick(() => { + fakeImpl.apply(fakeFs, args).then((result) => { + callback(null, result); + }, (error) => { + callback(error); + }); + }); + }; + setupFn(patchedFs, origName, wrapper); + } + patchedFs.realpath.native = patchedFs.realpath; + } + { + setupFn(patchedFs, `existsSync`, (p) => { + try { + return fakeFs.existsSync(p); + } catch { + return false; + } + }); + setupFn(patchedFs, `readSync`, (...args) => { + let [fd, buffer, offset, length, position] = args; + if (args.length <= 3) { + const options = args[2] || {}; + ({ offset = 0, length = buffer.byteLength, position } = options); + } + if (offset == null) + offset = 0; + length |= 0; + if (length === 0) + return 0; + if (position == null) + position = -1; + return fakeFs.readSync(fd, buffer, offset, length, position); + }); + for (const fnName of SYNC_IMPLEMENTATIONS) { + const origName = fnName; + if (typeof patchedFs[origName] === `undefined`) + continue; + const fakeImpl = fakeFs[fnName]; + if (typeof fakeImpl === `undefined`) + continue; + setupFn(patchedFs, origName, fakeImpl.bind(fakeFs)); + } + patchedFs.realpathSync.native = patchedFs.realpathSync; + } + { + const patchedFsPromises = patchedFs.promises; + for (const fnName of ASYNC_IMPLEMENTATIONS) { + const origName = fnName.replace(/Promise$/, ``); + if (typeof patchedFsPromises[origName] === `undefined`) + continue; + const fakeImpl = fakeFs[fnName]; + if (typeof fakeImpl === `undefined`) + continue; + if (fnName === `open`) + continue; + setupFn(patchedFsPromises, origName, (pathLike, ...args) => { + if (pathLike instanceof FileHandle) { + return pathLike[origName].apply(pathLike, args); + } else { + return fakeImpl.call(fakeFs, pathLike, ...args); + } + }); + } + setupFn(patchedFsPromises, `open`, async (...args) => { + const fd = await fakeFs.openPromise(...args); + return new FileHandle(fd, fakeFs); + }); + } + { + patchedFs.read[nodeUtils.promisify.custom] = async (fd, buffer, ...args) => { + const res = fakeFs.readPromise(fd, buffer, ...args); + return { bytesRead: await res, buffer }; + }; + patchedFs.write[nodeUtils.promisify.custom] = async (fd, buffer, ...args) => { + const res = fakeFs.writePromise(fd, buffer, ...args); + return { bytesWritten: await res, buffer }; + }; + } +} + +let cachedInstance; +let registeredFactory = () => { + throw new Error(`Assertion failed: No libzip instance is available, and no factory was configured`); +}; +function setFactory(factory) { + registeredFactory = factory; +} +function getInstance() { + if (typeof cachedInstance === `undefined`) + cachedInstance = registeredFactory(); + return cachedInstance; +} + +var libzipSync = {exports: {}}; + +(function (module, exports) { +var frozenFs = Object.assign({}, fs__default.default); +var createModule = function() { + var _scriptDir = void 0; + if (typeof __filename !== "undefined") _scriptDir = _scriptDir || __filename; + return function(createModule2) { + createModule2 = createModule2 || {}; + var Module = typeof createModule2 !== "undefined" ? createModule2 : {}; + var readyPromiseResolve, readyPromiseReject; + Module["ready"] = new Promise(function(resolve, reject) { + readyPromiseResolve = resolve; + readyPromiseReject = reject; + }); + var moduleOverrides = {}; + var key; + for (key in Module) { + if (Module.hasOwnProperty(key)) { + moduleOverrides[key] = Module[key]; + } + } + var scriptDirectory = ""; + function locateFile(path) { + if (Module["locateFile"]) { + return Module["locateFile"](path, scriptDirectory); + } + return scriptDirectory + path; + } + var read_, readBinary; + var nodeFS; + var nodePath; + { + { + scriptDirectory = __dirname + "/"; + } + read_ = function shell_read(filename, binary) { + var ret = tryParseAsDataURI(filename); + if (ret) { + return binary ? ret : ret.toString(); + } + if (!nodeFS) nodeFS = frozenFs; + if (!nodePath) nodePath = path__default.default; + filename = nodePath["normalize"](filename); + return nodeFS["readFileSync"](filename, binary ? null : "utf8"); + }; + readBinary = function readBinary2(filename) { + var ret = read_(filename, true); + if (!ret.buffer) { + ret = new Uint8Array(ret); + } + assert(ret.buffer); + return ret; + }; + if (process["argv"].length > 1) { + process["argv"][1].replace(/\\/g, "/"); + } + process["argv"].slice(2); + Module["inspect"] = function() { + return "[Emscripten Module object]"; + }; + } + Module["print"] || console.log.bind(console); + var err = Module["printErr"] || console.warn.bind(console); + for (key in moduleOverrides) { + if (moduleOverrides.hasOwnProperty(key)) { + Module[key] = moduleOverrides[key]; + } + } + moduleOverrides = null; + if (Module["arguments"]) ; + if (Module["thisProgram"]) ; + if (Module["quit"]) ; + var wasmBinary; + if (Module["wasmBinary"]) wasmBinary = Module["wasmBinary"]; + Module["noExitRuntime"] || true; + if (typeof WebAssembly !== "object") { + abort("no native wasm support detected"); + } + function getValue(ptr, type, noSafe) { + type = type || "i8"; + if (type.charAt(type.length - 1) === "*") type = "i32"; + switch (type) { + case "i1": + return HEAP8[ptr >> 0]; + case "i8": + return HEAP8[ptr >> 0]; + case "i16": + return LE_HEAP_LOAD_I16((ptr >> 1) * 2); + case "i32": + return LE_HEAP_LOAD_I32((ptr >> 2) * 4); + case "i64": + return LE_HEAP_LOAD_I32((ptr >> 2) * 4); + case "float": + return LE_HEAP_LOAD_F32((ptr >> 2) * 4); + case "double": + return LE_HEAP_LOAD_F64((ptr >> 3) * 8); + default: + abort("invalid type for getValue: " + type); + } + return null; + } + var wasmMemory; + var ABORT = false; + function assert(condition, text) { + if (!condition) { + abort("Assertion failed: " + text); + } + } + function getCFunc(ident) { + var func = Module["_" + ident]; + assert( + func, + "Cannot call unknown function " + ident + ", make sure it is exported" + ); + return func; + } + function ccall(ident, returnType, argTypes, args, opts) { + var toC = { + string: function(str) { + var ret2 = 0; + if (str !== null && str !== void 0 && str !== 0) { + var len = (str.length << 2) + 1; + ret2 = stackAlloc(len); + stringToUTF8(str, ret2, len); + } + return ret2; + }, + array: function(arr) { + var ret2 = stackAlloc(arr.length); + writeArrayToMemory(arr, ret2); + return ret2; + } + }; + function convertReturnValue(ret2) { + if (returnType === "string") return UTF8ToString(ret2); + if (returnType === "boolean") return Boolean(ret2); + return ret2; + } + var func = getCFunc(ident); + var cArgs = []; + var stack = 0; + if (args) { + for (var i = 0; i < args.length; i++) { + var converter = toC[argTypes[i]]; + if (converter) { + if (stack === 0) stack = stackSave(); + cArgs[i] = converter(args[i]); + } else { + cArgs[i] = args[i]; + } + } + } + var ret = func.apply(null, cArgs); + ret = convertReturnValue(ret); + if (stack !== 0) stackRestore(stack); + return ret; + } + function cwrap(ident, returnType, argTypes, opts) { + argTypes = argTypes || []; + var numericArgs = argTypes.every(function(type) { + return type === "number"; + }); + var numericRet = returnType !== "string"; + if (numericRet && numericArgs && !opts) { + return getCFunc(ident); + } + return function() { + return ccall(ident, returnType, argTypes, arguments); + }; + } + var UTF8Decoder = new TextDecoder("utf8"); + function UTF8ToString(ptr, maxBytesToRead) { + if (!ptr) return ""; + var maxPtr = ptr + maxBytesToRead; + for (var end = ptr; !(end >= maxPtr) && HEAPU8[end]; ) ++end; + return UTF8Decoder.decode(HEAPU8.subarray(ptr, end)); + } + function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) { + if (!(maxBytesToWrite > 0)) return 0; + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; + for (var i = 0; i < str.length; ++i) { + var u = str.charCodeAt(i); + if (u >= 55296 && u <= 57343) { + var u1 = str.charCodeAt(++i); + u = 65536 + ((u & 1023) << 10) | u1 & 1023; + } + if (u <= 127) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 2047) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 192 | u >> 6; + heap[outIdx++] = 128 | u & 63; + } else if (u <= 65535) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 224 | u >> 12; + heap[outIdx++] = 128 | u >> 6 & 63; + heap[outIdx++] = 128 | u & 63; + } else { + if (outIdx + 3 >= endIdx) break; + heap[outIdx++] = 240 | u >> 18; + heap[outIdx++] = 128 | u >> 12 & 63; + heap[outIdx++] = 128 | u >> 6 & 63; + heap[outIdx++] = 128 | u & 63; + } + } + heap[outIdx] = 0; + return outIdx - startIdx; + } + function stringToUTF8(str, outPtr, maxBytesToWrite) { + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + } + function lengthBytesUTF8(str) { + var len = 0; + for (var i = 0; i < str.length; ++i) { + var u = str.charCodeAt(i); + if (u >= 55296 && u <= 57343) + u = 65536 + ((u & 1023) << 10) | str.charCodeAt(++i) & 1023; + if (u <= 127) ++len; + else if (u <= 2047) len += 2; + else if (u <= 65535) len += 3; + else len += 4; + } + return len; + } + function allocateUTF8(str) { + var size = lengthBytesUTF8(str) + 1; + var ret = _malloc(size); + if (ret) stringToUTF8Array(str, HEAP8, ret, size); + return ret; + } + function writeArrayToMemory(array, buffer2) { + HEAP8.set(array, buffer2); + } + function alignUp(x, multiple) { + if (x % multiple > 0) { + x += multiple - x % multiple; + } + return x; + } + var buffer, HEAP8, HEAPU8; + var HEAP_DATA_VIEW; + function updateGlobalBufferAndViews(buf) { + buffer = buf; + Module["HEAP_DATA_VIEW"] = HEAP_DATA_VIEW = new DataView(buf); + Module["HEAP8"] = HEAP8 = new Int8Array(buf); + Module["HEAP16"] = new Int16Array(buf); + Module["HEAP32"] = new Int32Array(buf); + Module["HEAPU8"] = HEAPU8 = new Uint8Array(buf); + Module["HEAPU16"] = new Uint16Array(buf); + Module["HEAPU32"] = new Uint32Array(buf); + Module["HEAPF32"] = new Float32Array(buf); + Module["HEAPF64"] = new Float64Array(buf); + } + Module["INITIAL_MEMORY"] || 16777216; + var wasmTable; + var __ATPRERUN__ = []; + var __ATINIT__ = []; + var __ATPOSTRUN__ = []; + function preRun() { + if (Module["preRun"]) { + if (typeof Module["preRun"] == "function") + Module["preRun"] = [Module["preRun"]]; + while (Module["preRun"].length) { + addOnPreRun(Module["preRun"].shift()); + } + } + callRuntimeCallbacks(__ATPRERUN__); + } + function initRuntime() { + callRuntimeCallbacks(__ATINIT__); + } + function postRun() { + if (Module["postRun"]) { + if (typeof Module["postRun"] == "function") + Module["postRun"] = [Module["postRun"]]; + while (Module["postRun"].length) { + addOnPostRun(Module["postRun"].shift()); + } + } + callRuntimeCallbacks(__ATPOSTRUN__); + } + function addOnPreRun(cb) { + __ATPRERUN__.unshift(cb); + } + function addOnInit(cb) { + __ATINIT__.unshift(cb); + } + function addOnPostRun(cb) { + __ATPOSTRUN__.unshift(cb); + } + var runDependencies = 0; + var dependenciesFulfilled = null; + function addRunDependency(id) { + runDependencies++; + if (Module["monitorRunDependencies"]) { + Module["monitorRunDependencies"](runDependencies); + } + } + function removeRunDependency(id) { + runDependencies--; + if (Module["monitorRunDependencies"]) { + Module["monitorRunDependencies"](runDependencies); + } + if (runDependencies == 0) { + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); + } + } + } + Module["preloadedImages"] = {}; + Module["preloadedAudios"] = {}; + function abort(what) { + if (Module["onAbort"]) { + Module["onAbort"](what); + } + what += ""; + err(what); + ABORT = true; + what = "abort(" + what + "). Build with -s ASSERTIONS=1 for more info."; + var e = new WebAssembly.RuntimeError(what); + readyPromiseReject(e); + throw e; + } + var dataURIPrefix = "data:application/octet-stream;base64,"; + function isDataURI(filename) { + return filename.startsWith(dataURIPrefix); + } + var wasmBinaryFile = "data:application/octet-stream;base64,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QCAAKAJIIgEgASADaiADEAcaAkAgAyAAKAJsIgFNBEAgACABIANrNgJsDAELIABCADcCbAsgACAAKAJoIANrIgE2AmggACAAKAJYIANrNgJYIAEgACgChC5JBEAgACABNgKELgsgAEH8gAEoAgARAwAgAiADaiECCwJAIAAoAgAiASgCBCIERQ0AIAAoAjwhBSAAIAIgBCACIARJGyICBH8gACgCSCAAKAJoaiAFaiEFIAEgBCACazYCBAJAAkACQAJAIAEoAhwiBCgCFEEBaw4CAQACCyAEQaABaiAFIAEoAgAgAkHcgAEoAgARCAAMAgsgASABKAIwIAUgASgCACACQcSAASgCABEEADYCMAwBCyAFIAEoAgAgAhAHGgsgASABKAIAIAJqNgIAIAEgASgCCCACajYCCCAAKAI8BSAFCyACaiICNgI8AkAgACgChC4iASACakEDSQ0AIAAoAmggAWshAQJAIAAoAnRBgQhPBEAgACAAIAAoAkggAWoiAi0AACACLQABIAAoAnwRAAA2AlQMAQsgAUUNACAAIAFBAWsgACgChAERAgAaCyAAKAKELiAAKAI8IgJBAUZrIgRFDQAgACABIAQgACgCgAERBQAgACAAKAKELiAEazYChC4gACgCPCECCyACQYUCSw0AIAAoAgAoAgRFDQAgACgCMCEBDAELCwJAIAAoAkQiAiAAKAJAIgNNDQAgAAJ/IAAoAjwgACgCaGoiASADSwRAIAAoAkggAWpBACACIAFrIgNBggIgA0GCAkkbIgMQGSABIANqDAELIAFBggJqIgEgA00NASAAKAJIIANqQQAgAiADayICIAEgA2siAyACIANJGyIDEBkgACgCQCADags2AkALC50CAQF/AkAgAAJ/IAAoAqAuIgFBwABGBEAgACgCBCAAKAIQaiAAKQOYLjcAACAAQgA3A5guIAAgACgCEEEIajYCEEEADAELIAFBIE4EQCAAKAIEIAAoAhBqIAApA5guPgAAIAAgAEGcLmo1AgA3A5guIAAgACgCEEEEajYCECAAIAAoAqAuQSBrIgE2AqAuCyABQRBOBEAgACgCBCAAKAIQaiAAKQOYLj0AACAAIAAoAhBBAmo2AhAgACAAKQOYLkIQiDcDmC4gACAAKAKgLkEQayIBNgKgLgsgAUEISA0BIAAgACgCECIBQQFqNgIQ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KAJUIgEEfyABQQAgARAiEBkgACgCVAVBAAsQBiAAQQA2AlQLC9wMAgl/AX4jAEFAaiIGJAACQAJAAkACQAJAIAEoAjBBABAjIgVBAkZBACABKAI4QQAQIyIEQQFGGw0AIAVBAUZBACAEQQJGGw0AIAVBAkciAw0BIARBAkcNAQsgASABLwEMQYAQcjsBDEEAIQMMAQsgASABLwEMQf/vA3E7AQxBACEFIANFBEBB9eABIAEoAjAgAEEIahBpIgVFDQILIAJBgAJxBEAgBSEDDAELIARBAkcEQCAFIQMMAQtB9cYBIAEoAjggAEEIahBpIgNFBEAgBRAcDAILIAMgBTYCAAsgASABLwEMQf7/A3EgAS8BUiIFQQBHcjsBDAJAAkACQAJAAn8CQAJAIAEpAyhC/v///w9WDQAgASkDIEL+////D1YNACACQYAEcUUNASABKQNIQv////8PVA0BCyAFQYECa0H//wNxQQNJIQdBAQwBCyAFQYECa0H//wNxIQQgAkGACnFBgApHDQEgBEEDSSEHQQALIQkgBkIcEBciBEUEQCAAQQhqIgAEQCAAQQA2AgQgAEEONgIACyADEBwMBQsgAkGACHEhBQJAAkAgAkGAAnEEQAJAIAUNACABKQMgQv////8PVg0AIAEpAyhCgICAgBBUDQMLIAQgASkDKBAYIAEpAyAhDAwBCwJAAkACQCAFDQAgASkDIEL/////D1YNACABKQMoIgxC/////w9WDQEgASkDSEKAgICAEFQNBAsgASkDKCIMQv////8PVA0BCyAEIAwQGAsgASkDICIMQv////8PWgRAIAQgDBAYCyABKQNIIgxC/////w9UDQELIAQgDBAYCyAELQAARQRAIABBCGoiAARAIABBADYCBCAAQRQ2AgALIAQQCCADEBwMBQtBASEKQQEgBC0AAAR+IAQpAxAFQgALp0H//wNxIAYQRyEFIAQQCCAFIAM2AgAgBw0BDAILIAMhBSAEQQJLDQELIAZCBxAXIgRFBEAgAEEIaiIABEAgAEEANgIEIABBDjYCAAsgBRAcDAMLIARBAhANIARBhxJBAhAsIAQgAS0AUhBwIAQgAS8BEBANIAQtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAsgBBAIDAILQYGyAkEHIAYQRyEDIAQQCCADIAU2AgBBASEL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NgIEIABB7A42AhggGiEdDAMLIARB/wFxIgJBwABxRQRAIAggDSADLwECQQJ0aiAdp0F/IAJ0QX9zcUECdGoiAy0AASICayEIIB0gAq2IIR0gAy0AACIERQ0HDAELCyAEQSBxBEAgB0G//gA2AgQgASECDAgLIAdB0f4ANgIEIABB0A42AhggASECDAcLIB1BfyAGdEF/c62DIBt8IhunIQUgCCAEQQ9xIgNrIQggGiAErUIPg4ghHSABIBdrIgYgAjMBAiAaQX8gA3RBf3Otg3ynIgRPDQIgBCAGayIGIBlNDQEgBygCjEdFDQEgB0HR/gA2AgQgAEG5DDYCGAsgASECIAshBQwFCwJAIA5FBEAgDCARIAZraiEDDAELIAYgDk0EQCAMIA4gBmtqIQMMAQsgDCARIAYgDmsiBmtqIQMgBSAGTQ0AIAUgBmshBQJAAkAgASADTSABIA8gAWusIhogBq0iGyAaIBtUGyIapyIGaiICIANLcQ0AIAMgBmogAUsgASADT3ENACABIAMgBhAHGiACIQEMAQsgASADIAMgAWsiASABQR91IgFqIAFzIgIQByACaiEBIBogAq0iHn0iHFANACACIANqIQIDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgASACKQAANwAAIAEgAikAGDcAGCABIAIpABA3ABAgASACKQAINwAIIBpCIH0hGiACQSBqIQIgAUEgaiEBIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAEgAikAADcAACABIAIpABg3ABggASACKQAQNwAQIAEgAikACDcACCABIAIpADg3ADggASACKQAwNwAwIAEgAikAKDcAKCABIAIpACA3ACAgASACKQBYNwBYIAEgAikAUDcAUCABIAIpAEg3AEggASACKQBANwBAIAEgAikAYDcAYCABIAIpAGg3AGggASACKQBwNwBwIAEgAikAeDcAeCACQYABaiECIAFBgAFqIQEgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAEgAikAADcAACABIAIpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCABIAIpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCABIAIoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCABIAIvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCABIAItAAA6AAAgAkEBaiECIAFBAWohAQsgHEIAUg0ACwsgDiEGIAwhAwsgBSAGSwRAAkACQCABIANNIAEgDyABa6wiGiAGrSIbIBogG1QbIhqnIglqIgIgA0txDQAgAyAJaiABSyABIANPcQ0AIAEgAyAJEAcaDAELIAEgAyADIAFrIgEgAUEfdSIBaiABcyIBEAcgAWohAiAaIAGtIh59IhxQDQAgASADaiEBA0ACQCAcIB4gHCAeVBsiG0IgVARAIBshGgwBCyAbIhpCIH0iIEIFiEIBfEIDgyIfUEUEQANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCAaQiB9IRogAUEgaiEBIAJBIGohAiAfQgF9Ih9CAFINAAsLICBC4ABUDQADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggAiABKQA4NwA4IAIgASkAMDcAMCACIAEpACg3ACggAiABKQAgNwAgIAIgASkAWDcAWCACIAEpAFA3AFAgAiABKQBINwBIIAIgASkAQDcAQCACIAEpAGA3AGAgAiABKQBoNwBoIAIgASkAcDcAcCACIAEpAHg3AHggAUGAAWohASACQYABaiECIBpCgAF9IhpCH1YNAAsLIBpCEFoEQCACIAEpAAA3AAAgAiABKQAINwAIIBpCEH0hGiACQRBqIQIgAUEQaiEBCyAaQghaBEAgAiABKQAANwAAIBpCCH0hGiACQQhqIQIgAUEIaiEBCyAaQgRaBEAgAiABKAAANgAAIBpCBH0hGiACQQRqIQIgAUEEaiEBCyAaQgJaBEAgAiABLwAAOwAAIBpCAn0hGiACQQJqIQIgAUECaiEBCyAcIBt9IRwgGlBFBEAgAiABLQAAOgAAIAJBAWohAiABQQFqIQELIBxCAFINAAsLIAUgBmshAUEAIARrIQUCQCAEQQdLBEAgBCEDDAELIAEgBE0EQCAEIQMMAQsgAiAEayEFA0ACQCACIAUpAAA3AAAgBEEBdCEDIAEgBGshASACIARqIQIgBEEDSw0AIAMhBCABIANLDQELC0EAIANrIQULIAIgBWohBAJAIAUgDyACa6wiGiABrSIbIBogG1QbIhqnIgFIIAVBf0pxDQAgBUEBSCABIARqIAJLcQ0AIAIgBCABEAcgAWohAgwDCyACIAQgAyADQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANAiABIARqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAILAkAgASADTSABIA8gAWusIhogBa0iGyAaIBtUGyIapyIEaiICIANLcQ0AIAMgBGogAUsgASADT3ENACABIAMgBBAHGgwCCyABIAMgAyABayIBIAFBH3UiAWogAXMiARAHIAFqIQIgGiABrSIefSIcUA0BIAEgA2ohAQNAAkAgHCAeIBwgHlQbIhtCIFQEQCAbIRoMAQsgGyIaQiB9IiBCBYhCAXxCA4MiH1BFBEADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggGkIgfSEaIAFBIGohASACQSBqIQIgH0IBfSIfQgBSDQALCyAgQuAAVA0AA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIAIgASkAODcAOCACIAEpADA3ADAgAiABKQAoNwAoIAIgASkAIDcAICACIAEpAFg3AFggAiABKQBQNwBQIAIgASkASDcASCACIAEpAEA3AEAgAiABKQBgNwBgIAIgASkAaDcAaCACIAEpAHA3AHAgAiABKQB4NwB4IAFBgAFqIQEgAkGAAWohAiAaQoABfSIaQh9WDQALCyAaQhBaBEAgAiABKQAANwAAIAIgASkACDcACCAaQhB9IRogAkEQaiECIAFBEGohAQsgGkIIWgRAIAIgASkAADcAACAaQgh9IRogAkEIaiECIAFBCGohAQsgGkIEWgRAIAIgASgAADYAACAaQgR9IRogAkEEaiECIAFBBGohAQsgGkICWgRAIAIgAS8AADsAACAaQgJ9IRogAkECaiECIAFBAmohAQsgHCAbfSEcIBpQRQRAIAIgAS0AADoAACACQQFqIQIgAUEBaiEBCyAcUEUNAAsMAQsCQAJAIBYEQAJAIAQgBUkEQCAHKAKYRyAESw0BCyABIARrIQMCQEEAIARrIgVBf0ogDyABa6wiGiAbIBogG1QbIhqnIgIgBUpxDQAgBUEBSCACIANqIAFLcQ0AIAEgAyACEAcgAmohAgwFCyABIAMgBCAEQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANBCABIANqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAQLIBAgAWsiCUEBaiIGIAUgBSAGSxshAyABIARrIQIgAUEHcUUNAiADRQ0CIAEgAi0AADoAACACQQFqIQIgAUEBaiIGQQdxQQAgA0EBayIFGw0BIAYhASAFIQMgCSEGDAILAkAgBCAFSQRAIAcoAphHIARLDQELIAEgASAEayIGKQAANwAAIAEgBUEBa0EHcUEBaiIDaiECIAUgA2siBEUNAyADIAZqIQEDQCACIAEpAAA3AAAgAUEIaiEBIAJBCGohAiAEQQhrIgQNAAsMAwsgASAEIAUQPyECDAILIAEgAi0AADoAASAJQQFrIQYgA0ECayEFIAJBAWohAgJAIAFBAmoiCkEHcUUNACAFRQ0AIAEgAi0AADoAAiAJQQJrIQYgA0EDayEFIAJBAWohAgJAIAFBA2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAAyAJQQNrIQYgA0EEayEFIAJBAWohAgJAIAFBBGoiCkEHcUUNACAFRQ0AIAEgAi0AADoABCAJQQRrIQYgA0EFayEFIAJBAWohAgJAIAFBBWoiCkEHcUUNACAFRQ0AIAEgAi0AADoABSAJQQVrIQYgA0EGayEFIAJBAWohAgJAIAFBBmoiCkEHcUUNACAFRQ0AIAEgAi0AADoABiAJQQZrIQYgA0EHayEFIAJBAWohAgJAIAFBB2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAByAJQQdrIQYgA0EIayEDIAFBCGohASACQQFqIQIMBgsgCiEBIAUhAwwFCyAKIQEgBSEDDAQLIAohASAFIQMMAwsgCiEBIAUhAwwCCyAKIQEgBSEDDAELIAohASAFIQMLAkACQCAGQRdNBEAgA0UNASADQQFrIQUgA0EHcSIEBEADQCABIAItAAA6AAAgA0EBayEDIAFBAWohASACQQFqIQIgBEEBayIEDQALCyAFQQdJDQEDQCABIAItAAA6AAAgASACLQABOgABIAEgAi0AAjoAAiABIAItAAM6AAMgASACLQAEOgAEIAEgAi0ABToABSABIAItAAY6AAYgASACLQAHOgAHIAFBCGohASACQQhqIQIgA0EIayIDDQALDAELIAMNAQsgASECDAELIAEgBCADED8hAgsgCyEFDAELIAEgAy0AAjoAACABQQFqIQILIAUgFE8NACACIBNJDQELCyAAIAI2AgwgACAFIAhBA3ZrIgE2AgAgACATIAJrQYMCajYCECAAIBQgAWtBDmo2AgQgByAIQQdxIgA2AogBIAcgHUJ/IACthkJ/hYM+AoQBC+cFAQR/IAMgAiACIANLGyEEIAAgAWshAgJAIABBB3FFDQAgBEUNACAAIAItAAA6AAAgA0EBayEGIAJBAWohAiAAQQFqIgdBB3FBACAEQQFrIgUbRQRAIAchACAFIQQgBiEDDAELIAAgAi0AADoAASADQQJrIQYgBEECayEFIAJBAWohAgJAIABBAmoiB0EHcUUNACAFRQ0AIAAgAi0AADoAAiADQQNrIQYgBEEDayEFIAJBAWohAgJAIABBA2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAAyADQQRrIQYgBEEEayEFIAJBAWohAgJAIABBBGoiB0EHcUUNACAFRQ0AIAAgAi0AADoABCADQQVrIQYgBEEFayEFIAJBAWohAgJAIABBBWoiB0EHcUUNACAFRQ0AIAAgAi0AADoABSADQQZrIQYgBEEGayEFIAJBAWohAgJAIABBBmoiB0EHcUUNACAFRQ0AIAAgAi0AADoABiADQQdrIQYgBEEHayEFIAJBAWohAgJAIABBB2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAByADQQhrIQMgBEEIayEEIABBCGohACACQQFqIQIMBgsgByEAIAUhBCAGIQMMBQsgByEAIAUhBCAGIQMMBAsgByEAIAUhBCAGIQMMAwsgByEAIAUhBCAGIQMMAgsgByEAIAUhBCAGIQMMAQsgByEAIAUhBCAGIQMLAkAgA0EXTQRAIARFDQEgBEEBayEBIARBB3EiAwRAA0AgACACLQAAOgAAIARBAWshBCAAQQFqIQAgAkEBaiECIANBAWsi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CyAAIAMtAAAEfiADKQMQBUIAC6dB//8DcSADKAIEEEcLIQUgAxAICyAEQRBqJAAgBQvgAQICfwF+QTAQCSICRQRAIAEEQCABQQA2AgQgAUEONgIAC0EADwsgAkIANwMIIAJBADYCACACQgA3AxAgAkIANwMYIAJCADcDICACQgA3ACUgAFAEQCACDwsCQCAAQv////8AVg0AIACnQQR0EAkiA0UNACACIAM2AgBBACEBQgEhBANAIAMgAUEEdGoiAUIANwIAIAFCADcABSAAIARSBEAgBKchASAEQgF8IQQMAQsLIAIgADcDCCACIAA3AxAgAg8LIAEEQCABQQA2AgQgAUEONgIAC0EAEBAgAhAGQQAL7gECA38BfiMAQRBrIgQkAAJAIARBDGpCBBAXIgNFBEBBfyECDAELAkAgAQRAIAJBgAZxIQUDQAJAIAUgASgCBHFFDQACQCADKQMIQgBUBEAgA0EAOgAADAELIANCADcDECADQQE6AAALIAMgAS8BCBANIAMgAS8BChANIAMtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAtBfyECDAQLQX8hAiAAIARBDGpCBBAbQQBIDQMgATMBCiIGUA0AIAAgASgCDCAGEBtBAEgNAwsgASgCACIBDQALC0EAIQILIAMQCAsgBEEQaiQAIAILPAEBfyAABEAgAUGABnEhAQNAIAEgACgCBHEEQCACIAAvAQpqQQRqIQILIAAoAgAiAA0ACwsgAkH//wNxC5wBAQN/IABFBEBBAA8LIAAhAwNAAn8CQAJAIAAvAQgiAUH04AFNBEAgAUEBRg0BIAFB9cYBRg0BDAILIAFBgbICRg0AIAFB9eABRw0BCyAAKAIAIQEgAEEANgIAIAAoAgwQBiAAEAYgASADIAAgA0YbIQMCQCACRQRAQQAhAgwBCyACIAE2AgALIAEMAQsgACICKAIACyIADQALIAMLsgQCBX8BfgJAAkACQCAAIAGtEBciAQRAIAEtAAANAUEAIQAMAgsgBARAIARBADYCBCAEQQ42AgALQQAPC0EAIQADQCABLQAABH4gASkDCCABKQMQfQVCAAtCBFQNASABEAwhByABIAEQDCIGrRATIghFBEBBACECIAQEQCAEQQA2AgQgBEEVNgIACyABEAggAEUNAwNAIAAoAgAhASAAKAIMEAYg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DCAAQRg2AggLDAMLIAAgBiAFLwFqQQAgBCABEQYAIQEgBhALIAFFDQILAkAgDUUEQCABIQMMAQsgACABIAUvAWgQgQEhAyABEAsgA0UNAQsCQCAJRSAMckUEQCADIQEMAQsgACADQQEQgAEhASADEAsgAUUNAQsgASEDDAELQQAhAwsgBUHwAGokACADC4UBAQF/IAFFBEAgAEEIaiIABEAgAEEANgIEIABBEjYCAAtBAA8LQTgQCSIDRQRAIABBCGoiAARAIABBADYCBCAAQQ42AgALQQAPCyADQQA2AhAgA0IANwIIIANCADcDKCADQQA2AgQgAyACNgIAIANCADcDGCADQQA2AjAgACABQTsgAxBCCw8AIAAgASACQQBBABCCAQusAgECfyABRQRAIABBCGoiAARAIABBADYCBCAAQRI2AgALQQAPCwJAIAJBfUsNACACQf//A3FBCEYNACAAQQhqIgAEQCAAQQA2AgQgAEEQNgIAC0EADwsCQEGwwAAQCSIFBEAgBUEANgIIIAVCADcCACAFQYiBAUGogQEgAxs2AqhAIAUgAjYCFCAFIAM6ABAgBUEAOgAPIAVBADsBDCAFIAMgAkF9SyIGcToADiAFQQggAiAGG0H//wNxIAQgBUGIgQFBqIEBIAMbKAIAEQAAIgI2AqxAIAINASAFEDEgBRAGCyAAQQhqIgAEQCAAQQA2AgQgAEEONgIAC0EADwsgACABQTogBRBCIgAEfyAABSAFKAKsQCAFKAKoQCgCBBEDACAFEDEgBRAGQQALC6ABAQF/IAIgACgCBCIDIAIgA0kbIgIEQCAAIAMgAms2AgQCQAJAAkACQCAAKAIcIgMoAhRBAWsOAgEAAgsgA0GgAWogASAAKAIAIAJB3IABKAIAEQgADAILIAAgACgCMCABIAAoAgAgAkHEgAEoAgARBAA2AjAMAQsgASAAKAIAIAIQBxoLIAAgACgCACACajYCACAAIAAoAgggAmo2AggLC7cCAQR/QX4hAgJAIABFDQAgACgCIEUNACAAKAIkIgRFDQAgACgCHCIBRQ0AIAEoAgAgAEcNAAJAAkAgASgCICIDQTlrDjkBAgICAgICAgICAgIBAgICAQICAgICAgICAgICAgICAgICAQICAgICAgICAgICAQICAgICAgICAgEACyADQZoFRg0AIANBKkcN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DCABajYCDCAGIAYoAgggAWo2AgggBSAFKAIUIAFqNgIUIAUgBSgCECABazYCECAGIAYoAhAgAWsiATYCECABDQAgBiAGKAIENgIIC0EAIQRBACEJIAMoAhBFDQAMCgsgAygCHCgCJCEGIAMgAygCGCIBQQFqNgIYIAEgBmotAAAhASADIARBAWo2AhAgAygCBCAEaiABOgAAIAEEQCADKAIQIQQMAQsLIAMoAhwoAixFDQAgAygCECIGIAlNDQAgBQJ/IAUoAjAhBEEAIAMoAgQgCWoiAUUNABogBCABIAYgCWtB1IABKAIAEQAACzYCMAsgA0HnADYCIAsCQCADKAIcKAIsBEAgAygCDCADKAIQIgFBAmpJBH8gBRAKIAMoAhANAkEABSABCyADKAIEaiAFKAIwOwAAIAMgAygCEEECajYCECADQaABakHkgAEoAgARAQAaCyADQfEANgIgIAUQCiADKAIQRQ0BDAcLDAYLIAUoAgQNAQsgAygCPA0AIApFDQEgAygCIEGaBUYNAQsCfyADKAKIASIBRQRAIAMgChCFAQwBCwJAAkACQCADKAKMAUECaw4CAAECCwJ/AkADQAJAAkAgAygCPA0AIAMQLyADKAI8DQAgCg0BQQAMBAsgAygCSCADKAJoai0AACEEIAMgAygC8C0iAUEBajYC8C0gASADKALsLWpBADoAACADIAMoAvAtIgFBAWo2AvAtIAEgAygC7C1qQQA6AAAgAyADKALwLSIBQQFqNgLwLSABIAMoAuwtaiAEOgAAIAMgBEECdGoiASABLwHkAUEBajsB5AEgAyADKAI8QQFrNgI8IAMgAygCaEEBaiIBNgJoIAMoAvAtIAMoAvQtRw0BQQAhBCADIAMoAlgiBkEATgR/IAMoAkggBmoFQQALIAEgBmtBABAPIAMgAygCaDYCWCADKAIAEAogAygCACgCEA0BDAILCyADQQA2AoQuIApBBEYEQCADIAMoAlgiAUEATgR/IAMoAkggAWoFQQALIAMoAmggAWtBARAPIAMgAygCaDYCWCADKAIAEApBA0ECIAMoAgAoAhAbDAILIAMoAvAtBEBBACEEIAMgAygCWCIBQQBOBH8gAygCSCABagVBAAsgAygCaCABa0EAEA8gAyADKAJoNgJYIAMoAgAQCiADKAIAKAIQRQ0BC0EBIQQLIAQL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bGl0ZXJhbC9sZW5ndGhzIHNldABpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQAdW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0AGludmFsaWQgZGlzdGFuY2VzIHNldABpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0AEZpbGUgYWxyZWFkeSBleGlzdHMAdG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMAaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocwAlcyVzJXMAYnVmZmVyIGVycm9yAE5vIGVycm9yAHN0cmVhbSBlcnJvcgBUZWxsIGVycm9yAEludGVybmFsIGVycm9yAFNlZWsgZXJyb3IAV3JpdGUgZXJyb3IAZmlsZSBlcnJvcgBSZWFkIGVycm9yAFpsaWIgZXJyb3IAZGF0YSBlcnJvcgBDUkMgZXJyb3IAaW5jb21wYXRpYmxlIHZlcnNpb24AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoADEuMi4xMy56bGliLW5nAGludmFsaWQgd2luZG93IHNpemUAUmVhZC1vbmx5IGFyY2hpdmUATm90IGEgemlwIGFyY2hpdmUAUmVzb3VyY2Ugc3RpbGwgaW4gdXNlAE1hbGxvYyBmYWlsdXJlAGludmFsaWQgYmxvY2sgdHlwZQBGYWlsdXJlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZQBDYW4ndCBvcGVuIGZpbGUATm8gc3VjaCBmaWxlAFByZW1hdHVyZSBlbmQgb2YgZmlsZQBDYW4ndCByZW1vdmUgZmlsZQBpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUAaW52YWxpZCBkaXN0YW5jZSBjb2RlAHVua25vd24gY29tcHJlc3Npb24gbWV0aG9kAHN0cmVhbSBlbmQAQ29tcHJlc3NlZCBkYXRhIGludmFsaWQATXVsdGktZGlzayB6aXAgYXJjaGl2ZXMgbm90IHN1cHBvcnRl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UgAIANIACAAyAAgAsgAIAHIACADyAAgACgAIAIoACABKAAgAygAIACoACACqAAgAagAIAOoACAAaAAgAmgAIAFoACADaAAgAOgAIALoACAB6AAgA+gAIAAYACACGAAgARgAIAMYACAAmAAgApgAIAGYACADmAAgAFgAIAJYACABWAAgA1gAIADYACAC2AAgAdgAIAPYACAAOAAgAjgAIAE4ACADOAAgALgAIAK4ACABuAAgA7gAIAB4ACACeAAgAXgAIAN4ACAA+AAgAvgAIAH4ACAD+AAgAAQAIAIEACABBAAgAwQAIACEACAChAAgAYQAIAOEACAARAAgAkQAIAFEACADRAAgAMQAIALEACABxAAgA8QAIAAkACACJAAgASQAIAMkACAApAAgAqQAIAGkACADpAAgAGQAIAJkACABZAAgA2QAIADkACAC5AAgAeQAIAPkACAAFAAgAhQAIAEUACADFAAgAJQAIAKUACABlAAgA5QAIABUACACVAAgAVQAIANUACAA1AAgAtQAIAHUACAD1AAgADQAIAI0ACABNAAgAzQAIAC0ACACtAAgAbQAIAO0ACAAdAAgAnQAIAF0ACADdAAgAPQAIAL0ACAB9AAgA/QAIABMACQATAQkAkwAJAJMBCQBTAAkAUwEJANMACQDTAQkAMwAJADMBCQCzAAkAswEJAHMACQBzAQkA8wAJAPMBCQALAAkACwEJAIsACQCLAQkASwAJAEsBCQDLAAkAywEJACsACQArAQkAqwAJAKsBCQBrAAkAawEJAOsACQDrAQkAGwAJABsBCQCbAAkAmwEJAFsACQBbAQkA2wAJANsBCQA7AAkAOwEJALsACQC7AQkAewAJAHsBCQD7AAkA+wEJAAcACQAHAQkAhwAJAIcBCQBHAAkARwEJAMcACQDHAQkAJwAJACcBCQCnAAkApwEJAGcACQBnAQkA5wAJAOcBCQAXAAkAFwEJAJcACQCXAQkAVwAJAFcBCQDXAAkA1wEJADcACQA3AQkAtwAJALcBCQB3AAkAdwEJAPcACQD3AQkADwAJAA8BCQCPAAkAjwEJAE8ACQBPAQkAzwAJAM8BCQAvAAkALwEJAK8ACQCvAQkAbwAJAG8BCQDvAAkA7wEJAB8ACQAfAQkAnwAJAJ8BCQBfAAkAXwEJAN8ACQDfAQkAPwAJAD8BCQC/AAkA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SXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AQcCAAQuFARMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAgERQADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAAADgAQfSCAQsCXEQAQbCDAQsQ/////////////////////w=="; + if (!isDataURI(wasmBinaryFile)) { + wasmBinaryFile = locateFile(wasmBinaryFile); + } + function getBinary(file) { + try { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + var binary = tryParseAsDataURI(file); + if (binary) { + return binary; + } + if (readBinary) { + return readBinary(file); + } else { + throw "sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)"; + } + } catch (err2) { + abort(err2); + } + } + function instantiateSync(file, info) { + var instance; + var module2; + var binary; + try { + binary = getBinary(file); + module2 = new WebAssembly.Module(binary); + instance = new WebAssembly.Instance(module2, info); + } catch (e) { + var str = e.toString(); + err("failed to compile wasm module: " + str); + if (str.includes("imported Memory") || str.includes("memory import")) { + err( + "Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time)." + ); + } + throw e; + } + return [instance, module2]; + } + function createWasm() { + var info = { a: asmLibraryArg }; + function receiveInstance(instance, module2) { + var exports3 = instance.exports; + Module["asm"] = exports3; + wasmMemory = Module["asm"]["g"]; + updateGlobalBufferAndViews(wasmMemory.buffer); + wasmTable = Module["asm"]["W"]; + addOnInit(Module["asm"]["h"]); + removeRunDependency(); + } + addRunDependency(); + if (Module["instantiateWasm"]) { + try { + var exports2 = Module["instantiateWasm"](info, receiveInstance); + return exports2; + } catch (e) { + err("Module.instantiateWasm callback failed with error: " + e); + return false; + } + } + var result = instantiateSync(wasmBinaryFile, info); + receiveInstance(result[0]); + return Module["asm"]; + } + function LE_HEAP_LOAD_F32(byteOffset) { + return HEAP_DATA_VIEW.getFloat32(byteOffset, true); + } + function LE_HEAP_LOAD_F64(byteOffset) { + return HEAP_DATA_VIEW.getFloat64(byteOffset, true); + } + function LE_HEAP_LOAD_I16(byteOffset) { + return HEAP_DATA_VIEW.getInt16(byteOffset, true); + } + function LE_HEAP_LOAD_I32(byteOffset) { + return HEAP_DATA_VIEW.getInt32(byteOffset, true); + } + function LE_HEAP_STORE_I32(byteOffset, value) { + HEAP_DATA_VIEW.setInt32(byteOffset, value, true); + } + function callRuntimeCallbacks(callbacks) { + while (callbacks.length > 0) { + var callback = callbacks.shift(); + if (typeof callback == "function") { + callback(Module); + continue; + } + var func = callback.func; + if (typeof func === "number") { + if (callback.arg === void 0) { + wasmTable.get(func)(); + } else { + wasmTable.get(func)(callback.arg); + } + } else { + func(callback.arg === void 0 ? null : callback.arg); + } + } + } + function _gmtime_r(time, tmPtr) { + var date = new Date(LE_HEAP_LOAD_I32((time >> 2) * 4) * 1e3); + LE_HEAP_STORE_I32((tmPtr >> 2) * 4, date.getUTCSeconds()); + LE_HEAP_STORE_I32((tmPtr + 4 >> 2) * 4, date.getUTCMinutes()); + LE_HEAP_STORE_I32((tmPtr + 8 >> 2) * 4, date.getUTCHours()); + LE_HEAP_STORE_I32((tmPtr + 12 >> 2) * 4, date.getUTCDate()); + LE_HEAP_STORE_I32((tmPtr + 16 >> 2) * 4, date.getUTCMonth()); + LE_HEAP_STORE_I32((tmPtr + 20 >> 2) * 4, date.getUTCFullYear() - 1900); + LE_HEAP_STORE_I32((tmPtr + 24 >> 2) * 4, date.getUTCDay()); + LE_HEAP_STORE_I32((tmPtr + 36 >> 2) * 4, 0); + LE_HEAP_STORE_I32((tmPtr + 32 >> 2) * 4, 0); + var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0); + var yday = (date.getTime() - start) / (1e3 * 60 * 60 * 24) | 0; + LE_HEAP_STORE_I32((tmPtr + 28 >> 2) * 4, yday); + if (!_gmtime_r.GMTString) _gmtime_r.GMTString = allocateUTF8("GMT"); + LE_HEAP_STORE_I32((tmPtr + 40 >> 2) * 4, _gmtime_r.GMTString); + return tmPtr; + } + function ___gmtime_r(a0, a1) { + return _gmtime_r(a0, a1); + } + function _emscripten_memcpy_big(dest, src, num) { + HEAPU8.copyWithin(dest, src, src + num); + } + function emscripten_realloc_buffer(size) { + try { + wasmMemory.grow(size - buffer.byteLength + 65535 >>> 16); + updateGlobalBufferAndViews(wasmMemory.buffer); + return 1; + } catch (e) { + } + } + function _emscripten_resize_heap(requestedSize) { + var oldSize = HEAPU8.length; + requestedSize = requestedSize >>> 0; + var maxHeapSize = 2147483648; + if (requestedSize > maxHeapSize) { + return false; + } + for (var cutDown = 1; cutDown <= 4; cutDown *= 2) { + var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown); + overGrownHeapSize = Math.min( + overGrownHeapSize, + requestedSize + 100663296 + ); + var newSize = Math.min( + maxHeapSize, + alignUp(Math.max(requestedSize, overGrownHeapSize), 65536) + ); + var replacement = emscripten_realloc_buffer(newSize); + if (replacement) { + return true; + } + } + return false; + } + function _setTempRet0(val) { + } + function _time(ptr) { + var ret = Date.now() / 1e3 | 0; + if (ptr) { + LE_HEAP_STORE_I32((ptr >> 2) * 4, ret); + } + return ret; + } + function _tzset() { + if (_tzset.called) return; + _tzset.called = true; + var currentYear = (/* @__PURE__ */ new Date()).getFullYear(); + var winter = new Date(currentYear, 0, 1); + var summer = new Date(currentYear, 6, 1); + var winterOffset = winter.getTimezoneOffset(); + var summerOffset = summer.getTimezoneOffset(); + var stdTimezoneOffset = Math.max(winterOffset, summerOffset); + LE_HEAP_STORE_I32((__get_timezone() >> 2) * 4, stdTimezoneOffset * 60); + LE_HEAP_STORE_I32( + (__get_daylight() >> 2) * 4, + Number(winterOffset != summerOffset) + ); + function extractZone(date) { + var match = date.toTimeString().match(/\(([A-Za-z ]+)\)$/); + return match ? match[1] : "GMT"; + } + var winterName = extractZone(winter); + var summerName = extractZone(summer); + var winterNamePtr = allocateUTF8(winterName); + var summerNamePtr = allocateUTF8(summerName); + if (summerOffset < winterOffset) { + LE_HEAP_STORE_I32((__get_tzname() >> 2) * 4, winterNamePtr); + LE_HEAP_STORE_I32((__get_tzname() + 4 >> 2) * 4, summerNamePtr); + } else { + LE_HEAP_STORE_I32((__get_tzname() >> 2) * 4, summerNamePtr); + LE_HEAP_STORE_I32((__get_tzname() + 4 >> 2) * 4, winterNamePtr); + } + } + function _timegm(tmPtr) { + _tzset(); + var time = Date.UTC( + LE_HEAP_LOAD_I32((tmPtr + 20 >> 2) * 4) + 1900, + LE_HEAP_LOAD_I32((tmPtr + 16 >> 2) * 4), + LE_HEAP_LOAD_I32((tmPtr + 12 >> 2) * 4), + LE_HEAP_LOAD_I32((tmPtr + 8 >> 2) * 4), + LE_HEAP_LOAD_I32((tmPtr + 4 >> 2) * 4), + LE_HEAP_LOAD_I32((tmPtr >> 2) * 4), + 0 + ); + var date = new Date(time); + LE_HEAP_STORE_I32((tmPtr + 24 >> 2) * 4, date.getUTCDay()); + var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0); + var yday = (date.getTime() - start) / (1e3 * 60 * 60 * 24) | 0; + LE_HEAP_STORE_I32((tmPtr + 28 >> 2) * 4, yday); + return date.getTime() / 1e3 | 0; + } + function intArrayFromBase64(s) { + { + var buf; + try { + buf = Buffer.from(s, "base64"); + } catch (_) { + buf = new Buffer(s, "base64"); + } + return new Uint8Array( + buf["buffer"], + buf["byteOffset"], + buf["byteLength"] + ); + } + } + function tryParseAsDataURI(filename) { + if (!isDataURI(filename)) { + return; + } + return intArrayFromBase64(filename.slice(dataURIPrefix.length)); + } + var asmLibraryArg = { + e: ___gmtime_r, + c: _emscripten_memcpy_big, + d: _emscripten_resize_heap, + a: _setTempRet0, + b: _time, + f: _timegm + }; + var asm = createWasm(); + Module["___wasm_call_ctors"] = asm["h"]; + Module["_zip_ext_count_symlinks"] = asm["i"]; + Module["_zip_file_get_external_attributes"] = asm["j"]; + Module["_zipstruct_statS"] = asm["k"]; + Module["_zipstruct_stat_size"] = asm["l"]; + Module["_zipstruct_stat_mtime"] = asm["m"]; + Module["_zipstruct_stat_crc"] = asm["n"]; + Module["_zipstruct_errorS"] = asm["o"]; + Module["_zipstruct_error_code_zip"] = asm["p"]; + Module["_zipstruct_stat_comp_size"] = asm["q"]; + Module["_zipstruct_stat_comp_method"] = asm["r"]; + Module["_zip_close"] = asm["s"]; + Module["_zip_delete"] = asm["t"]; + Module["_zip_dir_add"] = asm["u"]; + Module["_zip_discard"] = asm["v"]; + Module["_zip_error_init_with_code"] = asm["w"]; + Module["_zip_get_error"] = asm["x"]; + Module["_zip_file_get_error"] = asm["y"]; + Module["_zip_error_strerror"] = asm["z"]; + Module["_zip_fclose"] = asm["A"]; + Module["_zip_file_add"] = asm["B"]; + Module["_free"] = asm["C"]; + var _malloc = Module["_malloc"] = asm["D"]; + Module["_zip_source_error"] = asm["E"]; + Module["_zip_source_seek"] = asm["F"]; + Module["_zip_file_set_external_attributes"] = asm["G"]; + Module["_zip_file_set_mtime"] = asm["H"]; + Module["_zip_fopen_index"] = asm["I"]; + Module["_zip_fread"] = asm["J"]; + Module["_zip_get_name"] = asm["K"]; + Module["_zip_get_num_entries"] = asm["L"]; + Module["_zip_source_read"] = asm["M"]; + Module["_zip_name_locate"] = asm["N"]; + Module["_zip_open_from_source"] = asm["O"]; + Module["_zip_set_file_compression"] = asm["P"]; + Module["_zip_source_buffer"] = asm["Q"]; + Module["_zip_source_buffer_create"] = asm["R"]; + Module["_zip_source_close"] = asm["S"]; + Module["_zip_source_free"] = asm["T"]; + Module["_zip_source_keep"] = asm["U"]; + Module["_zip_source_open"] = asm["V"]; + Module["_zip_source_tell"] = asm["X"]; + Module["_zip_stat_index"] = asm["Y"]; + var __get_tzname = Module["__get_tzname"] = asm["Z"]; + var __get_daylight = Module["__get_daylight"] = asm["_"]; + var __get_timezone = Module["__get_timezone"] = asm["$"]; + var stackSave = Module["stackSave"] = asm["aa"]; + var stackRestore = Module["stackRestore"] = asm["ba"]; + var stackAlloc = Module["stackAlloc"] = asm["ca"]; + Module["cwrap"] = cwrap; + Module["getValue"] = getValue; + var calledRun; + dependenciesFulfilled = function runCaller() { + if (!calledRun) run(); + if (!calledRun) dependenciesFulfilled = runCaller; + }; + function run(args) { + if (runDependencies > 0) { + return; + } + preRun(); + if (runDependencies > 0) { + return; + } + function doRun() { + if (calledRun) return; + calledRun = true; + Module["calledRun"] = true; + if (ABORT) return; + initRuntime(); + readyPromiseResolve(Module); + if (Module["onRuntimeInitialized"]) Module["onRuntimeInitialized"](); + postRun(); + } + if (Module["setStatus"]) { + Module["setStatus"]("Running..."); + setTimeout(function() { + setTimeout(function() { + Module["setStatus"](""); + }, 1); + doRun(); + }, 1); + } else { + doRun(); + } + } + Module["run"] = run; + if (Module["preInit"]) { + if (typeof Module["preInit"] == "function") + Module["preInit"] = [Module["preInit"]]; + while (Module["preInit"].length > 0) { + Module["preInit"].pop()(); + } + } + run(); + return createModule2; + }; +}(); +module.exports = createModule; +}(libzipSync)); + +const createModule = libzipSync.exports; + +const number64 = [ + `number`, + // low + `number` + // high +]; +var Errors = /* @__PURE__ */ ((Errors2) => { + Errors2[Errors2["ZIP_ER_OK"] = 0] = "ZIP_ER_OK"; + Errors2[Errors2["ZIP_ER_MULTIDISK"] = 1] = "ZIP_ER_MULTIDISK"; + Errors2[Errors2["ZIP_ER_RENAME"] = 2] = "ZIP_ER_RENAME"; + Errors2[Errors2["ZIP_ER_CLOSE"] = 3] = "ZIP_ER_CLOSE"; + Errors2[Errors2["ZIP_ER_SEEK"] = 4] = "ZIP_ER_SEEK"; + Errors2[Errors2["ZIP_ER_READ"] = 5] = "ZIP_ER_READ"; + Errors2[Errors2["ZIP_ER_WRITE"] = 6] = "ZIP_ER_WRITE"; + Errors2[Errors2["ZIP_ER_CRC"] = 7] = "ZIP_ER_CRC"; + Errors2[Errors2["ZIP_ER_ZIPCLOSED"] = 8] = "ZIP_ER_ZIPCLOSED"; + Errors2[Errors2["ZIP_ER_NOENT"] = 9] = "ZIP_ER_NOENT"; + Errors2[Errors2["ZIP_ER_EXISTS"] = 10] = "ZIP_ER_EXISTS"; + Errors2[Errors2["ZIP_ER_OPEN"] = 11] = "ZIP_ER_OPEN"; + Errors2[Errors2["ZIP_ER_TMPOPEN"] = 12] = "ZIP_ER_TMPOPEN"; + Errors2[Errors2["ZIP_ER_ZLIB"] = 13] = "ZIP_ER_ZLIB"; + Errors2[Errors2["ZIP_ER_MEMORY"] = 14] = "ZIP_ER_MEMORY"; + Errors2[Errors2["ZIP_ER_CHANGED"] = 15] = "ZIP_ER_CHANGED"; + Errors2[Errors2["ZIP_ER_COMPNOTSUPP"] = 16] = "ZIP_ER_COMPNOTSUPP"; + Errors2[Errors2["ZIP_ER_EOF"] = 17] = "ZIP_ER_EOF"; + Errors2[Errors2["ZIP_ER_INVAL"] = 18] = "ZIP_ER_INVAL"; + Errors2[Errors2["ZIP_ER_NOZIP"] = 19] = "ZIP_ER_NOZIP"; + Errors2[Errors2["ZIP_ER_INTERNAL"] = 20] = "ZIP_ER_INTERNAL"; + Errors2[Errors2["ZIP_ER_INCONS"] = 21] = "ZIP_ER_INCONS"; + Errors2[Errors2["ZIP_ER_REMOVE"] = 22] = "ZIP_ER_REMOVE"; + Errors2[Errors2["ZIP_ER_DELETED"] = 23] = "ZIP_ER_DELETED"; + Errors2[Errors2["ZIP_ER_ENCRNOTSUPP"] = 24] = "ZIP_ER_ENCRNOTSUPP"; + Errors2[Errors2["ZIP_ER_RDONLY"] = 25] = "ZIP_ER_RDONLY"; + Errors2[Errors2["ZIP_ER_NOPASSWD"] = 26] = "ZIP_ER_NOPASSWD"; + Errors2[Errors2["ZIP_ER_WRONGPASSWD"] = 27] = "ZIP_ER_WRONGPASSWD"; + Errors2[Errors2["ZIP_ER_OPNOTSUPP"] = 28] = "ZIP_ER_OPNOTSUPP"; + Errors2[Errors2["ZIP_ER_INUSE"] = 29] = "ZIP_ER_INUSE"; + Errors2[Errors2["ZIP_ER_TELL"] = 30] = "ZIP_ER_TELL"; + Errors2[Errors2["ZIP_ER_COMPRESSED_DATA"] = 31] = "ZIP_ER_COMPRESSED_DATA"; + return Errors2; +})(Errors || {}); +const makeInterface = (emZip) => ({ + // Those are getters because they can change after memory growth + get HEAPU8() { + return emZip.HEAPU8; + }, + errors: Errors, + SEEK_SET: 0, + SEEK_CUR: 1, + SEEK_END: 2, + ZIP_CHECKCONS: 4, + ZIP_EXCL: 2, + ZIP_RDONLY: 16, + ZIP_FL_OVERWRITE: 8192, + ZIP_FL_COMPRESSED: 4, + ZIP_OPSYS_DOS: 0, + ZIP_OPSYS_AMIGA: 1, + ZIP_OPSYS_OPENVMS: 2, + ZIP_OPSYS_UNIX: 3, + ZIP_OPSYS_VM_CMS: 4, + ZIP_OPSYS_ATARI_ST: 5, + ZIP_OPSYS_OS_2: 6, + ZIP_OPSYS_MACINTOSH: 7, + ZIP_OPSYS_Z_SYSTEM: 8, + ZIP_OPSYS_CPM: 9, + ZIP_OPSYS_WINDOWS_NTFS: 10, + ZIP_OPSYS_MVS: 11, + ZIP_OPSYS_VSE: 12, + ZIP_OPSYS_ACORN_RISC: 13, + ZIP_OPSYS_VFAT: 14, + ZIP_OPSYS_ALTERNATE_MVS: 15, + ZIP_OPSYS_BEOS: 16, + ZIP_OPSYS_TANDEM: 17, + ZIP_OPSYS_OS_400: 18, + ZIP_OPSYS_OS_X: 19, + ZIP_CM_DEFAULT: -1, + ZIP_CM_STORE: 0, + ZIP_CM_DEFLATE: 8, + uint08S: emZip._malloc(1), + uint32S: emZip._malloc(4), + malloc: emZip._malloc, + free: emZip._free, + getValue: emZip.getValue, + openFromSource: emZip.cwrap(`zip_open_from_source`, `number`, [`number`, `number`, `number`]), + close: emZip.cwrap(`zip_close`, `number`, [`number`]), + discard: emZip.cwrap(`zip_discard`, null, [`number`]), + getError: emZip.cwrap(`zip_get_error`, `number`, [`number`]), + getName: emZip.cwrap(`zip_get_name`, `string`, [`number`, `number`, `number`]), + getNumEntries: emZip.cwrap(`zip_get_num_entries`, `number`, [`number`, `number`]), + delete: emZip.cwrap(`zip_delete`, `number`, [`number`, `number`]), + statIndex: emZip.cwrap(`zip_stat_index`, `number`, [`number`, ...number64, `number`, `number`]), + fopenIndex: emZip.cwrap(`zip_fopen_index`, `number`, [`number`, ...number64, `number`]), + fread: emZip.cwrap(`zip_fread`, `number`, [`number`, `number`, `number`, `number`]), + fclose: emZip.cwrap(`zip_fclose`, `number`, [`number`]), + dir: { + add: emZip.cwrap(`zip_dir_add`, `number`, [`number`, `string`]) + }, + file: { + add: emZip.cwrap(`zip_file_add`, `number`, [`number`, `string`, `number`, `number`]), + getError: emZip.cwrap(`zip_file_get_error`, `number`, [`number`]), + getExternalAttributes: emZip.cwrap(`zip_file_get_external_attributes`, `number`, [`number`, ...number64, `number`, `number`, `number`]), + setExternalAttributes: emZip.cwrap(`zip_file_set_external_attributes`, `number`, [`number`, ...number64, `number`, `number`, `number`]), + setMtime: emZip.cwrap(`zip_file_set_mtime`, `number`, [`number`, ...number64, `number`, `number`]), + setCompression: emZip.cwrap(`zip_set_file_compression`, `number`, [`number`, ...number64, `number`, `number`]) + }, + ext: { + countSymlinks: emZip.cwrap(`zip_ext_count_symlinks`, `number`, [`number`]) + }, + error: { + initWithCode: emZip.cwrap(`zip_error_init_with_code`, null, [`number`, `number`]), + strerror: emZip.cwrap(`zip_error_strerror`, `string`, [`number`]) + }, + name: { + locate: emZip.cwrap(`zip_name_locate`, `number`, [`number`, `string`, `number`]) + }, + source: { + fromUnattachedBuffer: emZip.cwrap(`zip_source_buffer_create`, `number`, [`number`, ...number64, `number`, `number`]), + fromBuffer: emZip.cwrap(`zip_source_buffer`, `number`, [`number`, `number`, ...number64, `number`]), + free: emZip.cwrap(`zip_source_free`, null, [`number`]), + keep: emZip.cwrap(`zip_source_keep`, null, [`number`]), + open: emZip.cwrap(`zip_source_open`, `number`, [`number`]), + close: emZip.cwrap(`zip_source_close`, `number`, [`number`]), + seek: emZip.cwrap(`zip_source_seek`, `number`, [`number`, ...number64, `number`]), + tell: emZip.cwrap(`zip_source_tell`, `number`, [`number`]), + read: emZip.cwrap(`zip_source_read`, `number`, [`number`, `number`, `number`]), + error: emZip.cwrap(`zip_source_error`, `number`, [`number`]) + }, + struct: { + statS: emZip.cwrap(`zipstruct_statS`, `number`, []), + statSize: emZip.cwrap(`zipstruct_stat_size`, `number`, [`number`]), + statCompSize: emZip.cwrap(`zipstruct_stat_comp_size`, `number`, [`number`]), + statCompMethod: emZip.cwrap(`zipstruct_stat_comp_method`, `number`, [`number`]), + statMtime: emZip.cwrap(`zipstruct_stat_mtime`, `number`, [`number`]), + statCrc: emZip.cwrap(`zipstruct_stat_crc`, `number`, [`number`]), + errorS: emZip.cwrap(`zipstruct_errorS`, `number`, []), + errorCodeZip: emZip.cwrap(`zipstruct_error_code_zip`, `number`, [`number`]) + } +}); + +function getArchivePart(path, extension) { + let idx = path.indexOf(extension); + if (idx <= 0) + return null; + let nextCharIdx = idx; + while (idx >= 0) { + nextCharIdx = idx + extension.length; + if (path[nextCharIdx] === ppath.sep) + break; + if (path[idx - 1] === ppath.sep) + return null; + idx = path.indexOf(extension, nextCharIdx); + } + if (path.length > nextCharIdx && path[nextCharIdx] !== ppath.sep) + return null; + return path.slice(0, nextCharIdx); +} +class ZipOpenFS extends MountFS { + static async openPromise(fn, opts) { + const zipOpenFs = new ZipOpenFS(opts); + try { + return await fn(zipOpenFs); + } finally { + zipOpenFs.saveAndClose(); + } + } + constructor(opts = {}) { + const fileExtensions = opts.fileExtensions; + const readOnlyArchives = opts.readOnlyArchives; + const getMountPoint = typeof fileExtensions === `undefined` ? (path) => getArchivePart(path, `.zip`) : (path) => { + for (const extension of fileExtensions) { + const result = getArchivePart(path, extension); + if (result) { + return result; + } + } + return null; + }; + const factorySync = (baseFs, p) => { + return new ZipFS(p, { + baseFs, + readOnly: readOnlyArchives, + stats: baseFs.statSync(p), + customZipImplementation: opts.customZipImplementation + }); + }; + const factoryPromise = async (baseFs, p) => { + const zipOptions = { + baseFs, + readOnly: readOnlyArchives, + stats: await baseFs.statPromise(p), + customZipImplementation: opts.customZipImplementation + }; + return () => { + return new ZipFS(p, zipOptions); + }; + }; + super({ + ...opts, + factorySync, + factoryPromise, + getMountPoint + }); + } +} + +class LibzipError extends Error { + code; + constructor(message, code) { + super(message); + this.name = `Libzip Error`; + this.code = code; + } +} +class LibZipImpl { + libzip; + lzSource; + zip; + listings; + symlinkCount; + filesShouldBeCached = true; + constructor(opts) { + const buffer = `buffer` in opts ? opts.buffer : opts.baseFs.readFileSync(opts.path); + this.libzip = getInstance(); + const errPtr = this.libzip.malloc(4); + try { + let flags = 0; + if (opts.readOnly) + flags |= this.libzip.ZIP_RDONLY; + const lzSource = this.allocateUnattachedSource(buffer); + try { + this.zip = this.libzip.openFromSource(lzSource, flags, errPtr); + this.lzSource = lzSource; + } catch (error) { + this.libzip.source.free(lzSource); + throw error; + } + if (this.zip === 0) { + const error = this.libzip.struct.errorS(); + this.libzip.error.initWithCode(error, this.libzip.getValue(errPtr, `i32`)); + throw this.makeLibzipError(error); + } + } finally { + this.libzip.free(errPtr); + } + const entryCount = this.libzip.getNumEntries(this.zip, 0); + const listings = new Array(entryCount); + for (let t = 0; t < entryCount; ++t) + listings[t] = this.libzip.getName(this.zip, t, 0); + this.listings = listings; + this.symlinkCount = this.libzip.ext.countSymlinks(this.zip); + if (this.symlinkCount === -1) { + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + } + getSymlinkCount() { + return this.symlinkCount; + } + getListings() { + return this.listings; + } + stat(entry) { + const stat = this.libzip.struct.statS(); + const rc = this.libzip.statIndex(this.zip, entry, 0, 0, stat); + if (rc === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + const size = this.libzip.struct.statSize(stat) >>> 0; + const mtime = this.libzip.struct.statMtime(stat) >>> 0; + const crc = this.libzip.struct.statCrc(stat) >>> 0; + return { size, mtime, crc }; + } + makeLibzipError(error) { + const errorCode = this.libzip.struct.errorCodeZip(error); + const strerror = this.libzip.error.strerror(error); + const libzipError = new LibzipError(strerror, this.libzip.errors[errorCode]); + if (errorCode === this.libzip.errors.ZIP_ER_CHANGED) + throw new Error(`Assertion failed: Unexpected libzip error: ${libzipError.message}`); + return libzipError; + } + setFileSource(target, compression, buffer) { + const lzSource = this.allocateSource(buffer); + try { + const newIndex = this.libzip.file.add(this.zip, target, lzSource, this.libzip.ZIP_FL_OVERWRITE); + if (newIndex === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + if (compression !== null) { + const rc = this.libzip.file.setCompression(this.zip, newIndex, 0, compression[0], compression[1]); + if (rc === -1) { + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + } + return newIndex; + } catch (error) { + this.libzip.source.free(lzSource); + throw error; + } + } + setMtime(entry, mtime) { + const rc = this.libzip.file.setMtime(this.zip, entry, 0, mtime, 0); + if (rc === -1) { + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + } + getExternalAttributes(index) { + const attrs = this.libzip.file.getExternalAttributes(this.zip, index, 0, 0, this.libzip.uint08S, this.libzip.uint32S); + if (attrs === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + const opsys = this.libzip.getValue(this.libzip.uint08S, `i8`) >>> 0; + const attributes = this.libzip.getValue(this.libzip.uint32S, `i32`) >>> 0; + return [opsys, attributes]; + } + setExternalAttributes(index, opsys, attributes) { + const rc = this.libzip.file.setExternalAttributes(this.zip, index, 0, 0, opsys, attributes); + if (rc === -1) { + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + } + locate(name) { + return this.libzip.name.locate(this.zip, name, 0); + } + getFileSource(index) { + const stat = this.libzip.struct.statS(); + const rc = this.libzip.statIndex(this.zip, index, 0, 0, stat); + if (rc === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + const size = this.libzip.struct.statCompSize(stat); + const compressionMethod = this.libzip.struct.statCompMethod(stat); + const buffer = this.libzip.malloc(size); + try { + const file = this.libzip.fopenIndex(this.zip, index, 0, this.libzip.ZIP_FL_COMPRESSED); + if (file === 0) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + try { + const rc2 = this.libzip.fread(file, buffer, size, 0); + if (rc2 === -1) + throw this.makeLibzipError(this.libzip.file.getError(file)); + else if (rc2 < size) + throw new Error(`Incomplete read`); + else if (rc2 > size) + throw new Error(`Overread`); + const memory = this.libzip.HEAPU8.subarray(buffer, buffer + size); + const data = Buffer.from(memory); + return { data, compressionMethod }; + } finally { + this.libzip.fclose(file); + } + } finally { + this.libzip.free(buffer); + } + } + deleteEntry(index) { + const rc = this.libzip.delete(this.zip, index); + if (rc === -1) { + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + } + addDirectory(path) { + const index = this.libzip.dir.add(this.zip, path); + if (index === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + return index; + } + getBufferAndClose() { + try { + this.libzip.source.keep(this.lzSource); + if (this.libzip.close(this.zip) === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + if (this.libzip.source.open(this.lzSource) === -1) + throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); + if (this.libzip.source.seek(this.lzSource, 0, 0, this.libzip.SEEK_END) === -1) + throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); + const size = this.libzip.source.tell(this.lzSource); + if (size === -1) + throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); + if (this.libzip.source.seek(this.lzSource, 0, 0, this.libzip.SEEK_SET) === -1) + throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); + const buffer = this.libzip.malloc(size); + if (!buffer) + throw new Error(`Couldn't allocate enough memory`); + try { + const rc = this.libzip.source.read(this.lzSource, buffer, size); + if (rc === -1) + throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); + else if (rc < size) + throw new Error(`Incomplete read`); + else if (rc > size) + throw new Error(`Overread`); + let result = Buffer.from(this.libzip.HEAPU8.subarray(buffer, buffer + size)); + if (process.env.YARN_IS_TEST_ENV && process.env.YARN_ZIP_DATA_EPILOGUE) + result = Buffer.concat([result, Buffer.from(process.env.YARN_ZIP_DATA_EPILOGUE)]); + return result; + } finally { + this.libzip.free(buffer); + } + } finally { + this.libzip.source.close(this.lzSource); + this.libzip.source.free(this.lzSource); + } + } + allocateBuffer(content) { + if (!Buffer.isBuffer(content)) + content = Buffer.from(content); + const buffer = this.libzip.malloc(content.byteLength); + if (!buffer) + throw new Error(`Couldn't allocate enough memory`); + const heap = new Uint8Array(this.libzip.HEAPU8.buffer, buffer, content.byteLength); + heap.set(content); + return { buffer, byteLength: content.byteLength }; + } + allocateUnattachedSource(content) { + const error = this.libzip.struct.errorS(); + const { buffer, byteLength } = this.allocateBuffer(content); + const source = this.libzip.source.fromUnattachedBuffer(buffer, byteLength, 0, 1, error); + if (source === 0) { + this.libzip.free(error); + throw this.makeLibzipError(error); + } + return source; + } + allocateSource(content) { + const { buffer, byteLength } = this.allocateBuffer(content); + const source = this.libzip.source.fromBuffer(this.zip, buffer, byteLength, 0, 1); + if (source === 0) { + this.libzip.free(buffer); + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + return source; + } + discard() { + this.libzip.discard(this.zip); + } +} + +const ZIP_UNIX = 3; +const STORE = 0; +const DEFLATE = 8; +const DEFAULT_COMPRESSION_LEVEL = `mixed`; +function toUnixTimestamp(time) { + if (typeof time === `string` && String(+time) === time) + return +time; + if (typeof time === `number` && Number.isFinite(time)) { + if (time < 0) { + return Date.now() / 1e3; + } else { + return time; + } + } + if (nodeUtils.types.isDate(time)) + return time.getTime() / 1e3; + throw new Error(`Invalid time`); +} +function makeEmptyArchive() { + return Buffer.from([ + 80, + 75, + 5, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ]); +} +class ZipFS extends BasePortableFakeFS { + baseFs; + path; + stats; + level; + zipImpl; + listings = /* @__PURE__ */ new Map(); + entries = /* @__PURE__ */ new Map(); + /** + * A cache of indices mapped to file sources. + * Populated by `setFileSource` calls. + * Required for supporting read after write. + */ + fileSources = /* @__PURE__ */ new Map(); + symlinkCount; + fds = /* @__PURE__ */ new Map(); + nextFd = 0; + ready = false; + readOnly = false; + constructor(source, opts = {}) { + super(); + if (opts.readOnly) + this.readOnly = true; + const pathOptions = opts; + this.level = typeof pathOptions.level !== `undefined` ? pathOptions.level : DEFAULT_COMPRESSION_LEVEL; + const ZipImplCls = opts.customZipImplementation ?? LibZipImpl; + if (typeof source === `string`) { + const { baseFs = new NodeFS() } = pathOptions; + this.baseFs = baseFs; + this.path = source; + } else { + this.path = null; + this.baseFs = null; + } + if (opts.stats) { + this.stats = opts.stats; + } else { + if (typeof source === `string`) { + try { + this.stats = this.baseFs.statSync(source); + } catch (error) { + if (error.code === `ENOENT` && pathOptions.create) { + this.stats = makeDefaultStats(); + } else { + throw error; + } + } + } else { + this.stats = makeDefaultStats(); + } + } + if (typeof source === `string`) { + if (opts.create) { + this.zipImpl = new ZipImplCls({ buffer: makeEmptyArchive(), readOnly: this.readOnly }); + } else { + this.zipImpl = new ZipImplCls({ path: source, baseFs: this.baseFs, readOnly: this.readOnly, size: this.stats.size }); + } + } else { + this.zipImpl = new ZipImplCls({ buffer: source ?? makeEmptyArchive(), readOnly: this.readOnly }); + } + this.listings.set(PortablePath.root, /* @__PURE__ */ new Set()); + const listings = this.zipImpl.getListings(); + for (let t = 0; t < listings.length; t++) { + const raw = listings[t]; + if (ppath.isAbsolute(raw)) + continue; + const p = ppath.resolve(PortablePath.root, raw); + this.registerEntry(p, t); + if (raw.endsWith(`/`)) { + this.registerListing(p); + } + } + this.symlinkCount = this.zipImpl.getSymlinkCount(); + this.ready = true; + } + getExtractHint(hints) { + for (const fileName of this.entries.keys()) { + const ext = this.pathUtils.extname(fileName); + if (hints.relevantExtensions.has(ext)) { + return true; + } + } + return false; + } + getAllFiles() { + return Array.from(this.entries.keys()); + } + getRealPath() { + if (!this.path) + throw new Error(`ZipFS don't have real paths when loaded from a buffer`); + return this.path; + } + prepareClose() { + if (!this.ready) + throw EBUSY(`archive closed, close`); + unwatchAllFiles(this); + } + getBufferAndClose() { + this.prepareClose(); + if (this.entries.size === 0) { + this.discardAndClose(); + return makeEmptyArchive(); + } + try { + return this.zipImpl.getBufferAndClose(); + } finally { + this.ready = false; + } + } + discardAndClose() { + this.prepareClose(); + this.zipImpl.discard(); + this.ready = false; + } + saveAndClose() { + if (!this.path || !this.baseFs) + throw new Error(`ZipFS cannot be saved and must be discarded when loaded from a buffer`); + if (this.readOnly) { + this.discardAndClose(); + return; + } + const newMode = this.baseFs.existsSync(this.path) || this.stats.mode === DEFAULT_MODE ? void 0 : this.stats.mode; + this.baseFs.writeFileSync(this.path, this.getBufferAndClose(), { mode: newMode }); + this.ready = false; + } + resolve(p) { + return ppath.resolve(PortablePath.root, p); + } + async openPromise(p, flags, mode) { + return this.openSync(p, flags, mode); + } + openSync(p, flags, mode) { + const fd = this.nextFd++; + this.fds.set(fd, { cursor: 0, p }); + return fd; + } + hasOpenFileHandles() { + return !!this.fds.size; + } + async opendirPromise(p, opts) { + return this.opendirSync(p, opts); + } + opendirSync(p, opts = {}) { + const resolvedP = this.resolveFilename(`opendir '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw ENOENT(`opendir '${p}'`); + const directoryListing = this.listings.get(resolvedP); + if (!directoryListing) + throw ENOTDIR(`opendir '${p}'`); + const entries = [...directoryListing]; + const fd = this.openSync(resolvedP, `r`); + const onClose = () => { + this.closeSync(fd); + }; + return opendir(this, resolvedP, entries, { onClose }); + } + async readPromise(fd, buffer, offset, length, position) { + return this.readSync(fd, buffer, offset, length, position); + } + readSync(fd, buffer, offset = 0, length = buffer.byteLength, position = -1) { + const entry = this.fds.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`read`); + const realPosition = position === -1 || position === null ? entry.cursor : position; + const source = this.readFileSync(entry.p); + source.copy(buffer, offset, realPosition, realPosition + length); + const bytesRead = Math.max(0, Math.min(source.length - realPosition, length)); + if (position === -1 || position === null) + entry.cursor += bytesRead; + return bytesRead; + } + async writePromise(fd, buffer, offset, length, position) { + if (typeof buffer === `string`) { + return this.writeSync(fd, buffer, position); + } else { + return this.writeSync(fd, buffer, offset, length, position); + } + } + writeSync(fd, buffer, offset, length, position) { + const entry = this.fds.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`read`); + throw new Error(`Unimplemented`); + } + async closePromise(fd) { + return this.closeSync(fd); + } + closeSync(fd) { + const entry = this.fds.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`read`); + this.fds.delete(fd); + } + createReadStream(p, { encoding } = {}) { + if (p === null) + throw new Error(`Unimplemented`); + const fd = this.openSync(p, `r`); + const stream$1 = Object.assign( + new stream.PassThrough({ + emitClose: true, + autoDestroy: true, + destroy: (error, callback) => { + clearImmediate(immediate); + this.closeSync(fd); + callback(error); + } + }), + { + close() { + stream$1.destroy(); + }, + bytesRead: 0, + path: p, + // "This property is `true` if the underlying file has not been opened yet" + pending: false + } + ); + const immediate = setImmediate(async () => { + try { + const data = await this.readFilePromise(p, encoding); + stream$1.bytesRead = data.length; + stream$1.end(data); + } catch (error) { + stream$1.destroy(error); + } + }); + return stream$1; + } + createWriteStream(p, { encoding } = {}) { + if (this.readOnly) + throw EROFS(`open '${p}'`); + if (p === null) + throw new Error(`Unimplemented`); + const chunks = []; + const fd = this.openSync(p, `w`); + const stream$1 = Object.assign( + new stream.PassThrough({ + autoDestroy: true, + emitClose: true, + destroy: (error, callback) => { + try { + if (error) { + callback(error); + } else { + this.writeFileSync(p, Buffer.concat(chunks), encoding); + callback(null); + } + } catch (err) { + callback(err); + } finally { + this.closeSync(fd); + } + } + }), + { + close() { + stream$1.destroy(); + }, + bytesWritten: 0, + path: p, + // "This property is `true` if the underlying file has not been opened yet" + pending: false + } + ); + stream$1.on(`data`, (chunk) => { + const chunkBuffer = Buffer.from(chunk); + stream$1.bytesWritten += chunkBuffer.length; + chunks.push(chunkBuffer); + }); + return stream$1; + } + async realpathPromise(p) { + return this.realpathSync(p); + } + realpathSync(p) { + const resolvedP = this.resolveFilename(`lstat '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw ENOENT(`lstat '${p}'`); + return resolvedP; + } + async existsPromise(p) { + return this.existsSync(p); + } + existsSync(p) { + if (!this.ready) + throw EBUSY(`archive closed, existsSync '${p}'`); + if (this.symlinkCount === 0) { + const resolvedP2 = ppath.resolve(PortablePath.root, p); + return this.entries.has(resolvedP2) || this.listings.has(resolvedP2); + } + let resolvedP; + try { + resolvedP = this.resolveFilename(`stat '${p}'`, p, void 0, false); + } catch { + return false; + } + if (resolvedP === void 0) + return false; + return this.entries.has(resolvedP) || this.listings.has(resolvedP); + } + async accessPromise(p, mode) { + return this.accessSync(p, mode); + } + accessSync(p, mode = fs.constants.F_OK) { + const resolvedP = this.resolveFilename(`access '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw ENOENT(`access '${p}'`); + if (this.readOnly && mode & fs.constants.W_OK) { + throw EROFS(`access '${p}'`); + } + } + async statPromise(p, opts = { bigint: false }) { + if (opts.bigint) + return this.statSync(p, { bigint: true }); + return this.statSync(p); + } + statSync(p, opts = { bigint: false, throwIfNoEntry: true }) { + const resolvedP = this.resolveFilename(`stat '${p}'`, p, void 0, opts.throwIfNoEntry); + if (resolvedP === void 0) + return void 0; + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) { + if (opts.throwIfNoEntry === false) + return void 0; + throw ENOENT(`stat '${p}'`); + } + if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) + throw ENOTDIR(`stat '${p}'`); + return this.statImpl(`stat '${p}'`, resolvedP, opts); + } + async fstatPromise(fd, opts) { + return this.fstatSync(fd, opts); + } + fstatSync(fd, opts) { + const entry = this.fds.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`fstatSync`); + const { p } = entry; + const resolvedP = this.resolveFilename(`stat '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw ENOENT(`stat '${p}'`); + if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) + throw ENOTDIR(`stat '${p}'`); + return this.statImpl(`fstat '${p}'`, resolvedP, opts); + } + async lstatPromise(p, opts = { bigint: false }) { + if (opts.bigint) + return this.lstatSync(p, { bigint: true }); + return this.lstatSync(p); + } + lstatSync(p, opts = { bigint: false, throwIfNoEntry: true }) { + const resolvedP = this.resolveFilename(`lstat '${p}'`, p, false, opts.throwIfNoEntry); + if (resolvedP === void 0) + return void 0; + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) { + if (opts.throwIfNoEntry === false) + return void 0; + throw ENOENT(`lstat '${p}'`); + } + if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) + throw ENOTDIR(`lstat '${p}'`); + return this.statImpl(`lstat '${p}'`, resolvedP, opts); + } + statImpl(reason, p, opts = {}) { + const entry = this.entries.get(p); + if (typeof entry !== `undefined`) { + const stat = this.zipImpl.stat(entry); + const crc = stat.crc; + const size = stat.size; + const mtimeMs = stat.mtime * 1e3; + const uid = this.stats.uid; + const gid = this.stats.gid; + const blksize = 512; + const blocks = Math.ceil(stat.size / blksize); + const atimeMs = mtimeMs; + const birthtimeMs = mtimeMs; + const ctimeMs = mtimeMs; + const atime = new Date(atimeMs); + const birthtime = new Date(birthtimeMs); + const ctime = new Date(ctimeMs); + const mtime = new Date(mtimeMs); + const type = this.listings.has(p) ? fs.constants.S_IFDIR : this.isSymbolicLink(entry) ? fs.constants.S_IFLNK : fs.constants.S_IFREG; + const defaultMode = type === fs.constants.S_IFDIR ? 493 : 420; + const mode = type | this.getUnixMode(entry, defaultMode) & 511; + const statInstance = Object.assign(new StatEntry(), { uid, gid, size, blksize, blocks, atime, birthtime, ctime, mtime, atimeMs, birthtimeMs, ctimeMs, mtimeMs, mode, crc }); + return opts.bigint === true ? convertToBigIntStats(statInstance) : statInstance; + } + if (this.listings.has(p)) { + const uid = this.stats.uid; + const gid = this.stats.gid; + const size = 0; + const blksize = 512; + const blocks = 0; + const atimeMs = this.stats.mtimeMs; + const birthtimeMs = this.stats.mtimeMs; + const ctimeMs = this.stats.mtimeMs; + const mtimeMs = this.stats.mtimeMs; + const atime = new Date(atimeMs); + const birthtime = new Date(birthtimeMs); + const ctime = new Date(ctimeMs); + const mtime = new Date(mtimeMs); + const mode = fs.constants.S_IFDIR | 493; + const crc = 0; + const statInstance = Object.assign(new StatEntry(), { uid, gid, size, blksize, blocks, atime, birthtime, ctime, mtime, atimeMs, birthtimeMs, ctimeMs, mtimeMs, mode, crc }); + return opts.bigint === true ? convertToBigIntStats(statInstance) : statInstance; + } + throw new Error(`Unreachable`); + } + getUnixMode(index, defaultMode) { + const [opsys, attributes] = this.zipImpl.getExternalAttributes(index); + if (opsys !== ZIP_UNIX) + return defaultMode; + return attributes >>> 16; + } + registerListing(p) { + const existingListing = this.listings.get(p); + if (existingListing) + return existingListing; + const parentListing = this.registerListing(ppath.dirname(p)); + parentListing.add(ppath.basename(p)); + const newListing = /* @__PURE__ */ new Set(); + this.listings.set(p, newListing); + return newListing; + } + registerEntry(p, index) { + const parentListing = this.registerListing(ppath.dirname(p)); + parentListing.add(ppath.basename(p)); + this.entries.set(p, index); + } + unregisterListing(p) { + this.listings.delete(p); + const parentListing = this.listings.get(ppath.dirname(p)); + parentListing?.delete(ppath.basename(p)); + } + unregisterEntry(p) { + this.unregisterListing(p); + const entry = this.entries.get(p); + this.entries.delete(p); + if (typeof entry === `undefined`) + return; + this.fileSources.delete(entry); + if (this.isSymbolicLink(entry)) { + this.symlinkCount--; + } + } + deleteEntry(p, index) { + this.unregisterEntry(p); + this.zipImpl.deleteEntry(index); + } + resolveFilename(reason, p, resolveLastComponent = true, throwIfNoEntry = true) { + if (!this.ready) + throw EBUSY(`archive closed, ${reason}`); + let resolvedP = ppath.resolve(PortablePath.root, p); + if (resolvedP === `/`) + return PortablePath.root; + const fileIndex = this.entries.get(resolvedP); + if (resolveLastComponent && fileIndex !== void 0) { + if (this.symlinkCount !== 0 && this.isSymbolicLink(fileIndex)) { + const target = this.getFileSource(fileIndex).toString(); + return this.resolveFilename(reason, ppath.resolve(ppath.dirname(resolvedP), target), true, throwIfNoEntry); + } else { + return resolvedP; + } + } + while (true) { + const parentP = this.resolveFilename(reason, ppath.dirname(resolvedP), true, throwIfNoEntry); + if (parentP === void 0) + return parentP; + const isDir = this.listings.has(parentP); + const doesExist = this.entries.has(parentP); + if (!isDir && !doesExist) { + if (throwIfNoEntry === false) + return void 0; + throw ENOENT(reason); + } + if (!isDir) + throw ENOTDIR(reason); + resolvedP = ppath.resolve(parentP, ppath.basename(resolvedP)); + if (!resolveLastComponent || this.symlinkCount === 0) + break; + const index = this.zipImpl.locate(resolvedP.slice(1)); + if (index === -1) + break; + if (this.isSymbolicLink(index)) { + const target = this.getFileSource(index).toString(); + resolvedP = ppath.resolve(ppath.dirname(resolvedP), target); + } else { + break; + } + } + return resolvedP; + } + setFileSource(p, content) { + const buffer = Buffer.isBuffer(content) ? content : Buffer.from(content); + const target = ppath.relative(PortablePath.root, p); + let compression = null; + if (this.level !== `mixed`) { + const method = this.level === 0 ? STORE : DEFLATE; + compression = [method, this.level]; + } + const newIndex = this.zipImpl.setFileSource(target, compression, buffer); + this.fileSources.set(newIndex, buffer); + return newIndex; + } + isSymbolicLink(index) { + if (this.symlinkCount === 0) + return false; + const [opsys, attrs] = this.zipImpl.getExternalAttributes(index); + if (opsys !== ZIP_UNIX) + return false; + const attributes = attrs >>> 16; + return (attributes & fs.constants.S_IFMT) === fs.constants.S_IFLNK; + } + getFileSource(index, opts = { asyncDecompress: false }) { + const cachedFileSource = this.fileSources.get(index); + if (typeof cachedFileSource !== `undefined`) + return cachedFileSource; + const { data, compressionMethod } = this.zipImpl.getFileSource(index); + if (compressionMethod === STORE) { + if (this.zipImpl.filesShouldBeCached) + this.fileSources.set(index, data); + return data; + } else if (compressionMethod === DEFLATE) { + if (opts.asyncDecompress) { + return new Promise((resolve, reject) => { + zlib__default.default.inflateRaw(data, (error, result) => { + if (error) { + reject(error); + } else { + if (this.zipImpl.filesShouldBeCached) + this.fileSources.set(index, result); + resolve(result); + } + }); + }); + } else { + const decompressedData = zlib__default.default.inflateRawSync(data); + if (this.zipImpl.filesShouldBeCached) + this.fileSources.set(index, decompressedData); + return decompressedData; + } + } else { + throw new Error(`Unsupported compression method: ${compressionMethod}`); + } + } + async fchmodPromise(fd, mask) { + return this.chmodPromise(this.fdToPath(fd, `fchmod`), mask); + } + fchmodSync(fd, mask) { + return this.chmodSync(this.fdToPath(fd, `fchmodSync`), mask); + } + async chmodPromise(p, mask) { + return this.chmodSync(p, mask); + } + chmodSync(p, mask) { + if (this.readOnly) + throw EROFS(`chmod '${p}'`); + mask &= 493; + const resolvedP = this.resolveFilename(`chmod '${p}'`, p, false); + const entry = this.entries.get(resolvedP); + if (typeof entry === `undefined`) + throw new Error(`Assertion failed: The entry should have been registered (${resolvedP})`); + const oldMod = this.getUnixMode(entry, fs.constants.S_IFREG | 0); + const newMod = oldMod & ~511 | mask; + this.zipImpl.setExternalAttributes(entry, ZIP_UNIX, newMod << 16); + } + async fchownPromise(fd, uid, gid) { + return this.chownPromise(this.fdToPath(fd, `fchown`), uid, gid); + } + fchownSync(fd, uid, gid) { + return this.chownSync(this.fdToPath(fd, `fchownSync`), uid, gid); + } + async chownPromise(p, uid, gid) { + return this.chownSync(p, uid, gid); + } + chownSync(p, uid, gid) { + throw new Error(`Unimplemented`); + } + async renamePromise(oldP, newP) { + return this.renameSync(oldP, newP); + } + renameSync(oldP, newP) { + throw new Error(`Unimplemented`); + } + async copyFilePromise(sourceP, destP, flags) { + const { indexSource, indexDest, resolvedDestP } = this.prepareCopyFile(sourceP, destP, flags); + const source = await this.getFileSource(indexSource, { asyncDecompress: true }); + const newIndex = this.setFileSource(resolvedDestP, source); + if (newIndex !== indexDest) { + this.registerEntry(resolvedDestP, newIndex); + } + } + copyFileSync(sourceP, destP, flags = 0) { + const { indexSource, indexDest, resolvedDestP } = this.prepareCopyFile(sourceP, destP, flags); + const source = this.getFileSource(indexSource); + const newIndex = this.setFileSource(resolvedDestP, source); + if (newIndex !== indexDest) { + this.registerEntry(resolvedDestP, newIndex); + } + } + prepareCopyFile(sourceP, destP, flags = 0) { + if (this.readOnly) + throw EROFS(`copyfile '${sourceP} -> '${destP}'`); + if ((flags & fs.constants.COPYFILE_FICLONE_FORCE) !== 0) + throw ENOSYS(`unsupported clone operation`, `copyfile '${sourceP}' -> ${destP}'`); + const resolvedSourceP = this.resolveFilename(`copyfile '${sourceP} -> ${destP}'`, sourceP); + const indexSource = this.entries.get(resolvedSourceP); + if (typeof indexSource === `undefined`) + throw EINVAL(`copyfile '${sourceP}' -> '${destP}'`); + const resolvedDestP = this.resolveFilename(`copyfile '${sourceP}' -> ${destP}'`, destP); + const indexDest = this.entries.get(resolvedDestP); + if ((flags & (fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE_FORCE)) !== 0 && typeof indexDest !== `undefined`) + throw EEXIST(`copyfile '${sourceP}' -> '${destP}'`); + return { + indexSource, + resolvedDestP, + indexDest + }; + } + async appendFilePromise(p, content, opts) { + if (this.readOnly) + throw EROFS(`open '${p}'`); + if (typeof opts === `undefined`) + opts = { flag: `a` }; + else if (typeof opts === `string`) + opts = { flag: `a`, encoding: opts }; + else if (typeof opts.flag === `undefined`) + opts = { flag: `a`, ...opts }; + return this.writeFilePromise(p, content, opts); + } + appendFileSync(p, content, opts = {}) { + if (this.readOnly) + throw EROFS(`open '${p}'`); + if (typeof opts === `undefined`) + opts = { flag: `a` }; + else if (typeof opts === `string`) + opts = { flag: `a`, encoding: opts }; + else if (typeof opts.flag === `undefined`) + opts = { flag: `a`, ...opts }; + return this.writeFileSync(p, content, opts); + } + fdToPath(fd, reason) { + const path = this.fds.get(fd)?.p; + if (typeof path === `undefined`) + throw EBADF(reason); + return path; + } + async writeFilePromise(p, content, opts) { + const { encoding, mode, index, resolvedP } = this.prepareWriteFile(p, opts); + if (index !== void 0 && typeof opts === `object` && opts.flag && opts.flag.includes(`a`)) + content = Buffer.concat([await this.getFileSource(index, { asyncDecompress: true }), Buffer.from(content)]); + if (encoding !== null) + content = content.toString(encoding); + const newIndex = this.setFileSource(resolvedP, content); + if (newIndex !== index) + this.registerEntry(resolvedP, newIndex); + if (mode !== null) { + await this.chmodPromise(resolvedP, mode); + } + } + writeFileSync(p, content, opts) { + const { encoding, mode, index, resolvedP } = this.prepareWriteFile(p, opts); + if (index !== void 0 && typeof opts === `object` && opts.flag && opts.flag.includes(`a`)) + content = Buffer.concat([this.getFileSource(index), Buffer.from(content)]); + if (encoding !== null) + content = content.toString(encoding); + const newIndex = this.setFileSource(resolvedP, content); + if (newIndex !== index) + this.registerEntry(resolvedP, newIndex); + if (mode !== null) { + this.chmodSync(resolvedP, mode); + } + } + prepareWriteFile(p, opts) { + if (typeof p === `number`) + p = this.fdToPath(p, `read`); + if (this.readOnly) + throw EROFS(`open '${p}'`); + const resolvedP = this.resolveFilename(`open '${p}'`, p); + if (this.listings.has(resolvedP)) + throw EISDIR(`open '${p}'`); + let encoding = null, mode = null; + if (typeof opts === `string`) { + encoding = opts; + } else if (typeof opts === `object`) { + ({ + encoding = null, + mode = null + } = opts); + } + const index = this.entries.get(resolvedP); + return { + encoding, + mode, + resolvedP, + index + }; + } + async unlinkPromise(p) { + return this.unlinkSync(p); + } + unlinkSync(p) { + if (this.readOnly) + throw EROFS(`unlink '${p}'`); + const resolvedP = this.resolveFilename(`unlink '${p}'`, p); + if (this.listings.has(resolvedP)) + throw EISDIR(`unlink '${p}'`); + const index = this.entries.get(resolvedP); + if (typeof index === `undefined`) + throw EINVAL(`unlink '${p}'`); + this.deleteEntry(resolvedP, index); + } + async utimesPromise(p, atime, mtime) { + return this.utimesSync(p, atime, mtime); + } + utimesSync(p, atime, mtime) { + if (this.readOnly) + throw EROFS(`utimes '${p}'`); + const resolvedP = this.resolveFilename(`utimes '${p}'`, p); + this.utimesImpl(resolvedP, mtime); + } + async lutimesPromise(p, atime, mtime) { + return this.lutimesSync(p, atime, mtime); + } + lutimesSync(p, atime, mtime) { + if (this.readOnly) + throw EROFS(`lutimes '${p}'`); + const resolvedP = this.resolveFilename(`utimes '${p}'`, p, false); + this.utimesImpl(resolvedP, mtime); + } + utimesImpl(resolvedP, mtime) { + if (this.listings.has(resolvedP)) { + if (!this.entries.has(resolvedP)) + this.hydrateDirectory(resolvedP); + } + const entry = this.entries.get(resolvedP); + if (entry === void 0) + throw new Error(`Unreachable`); + this.zipImpl.setMtime(entry, toUnixTimestamp(mtime)); + } + async mkdirPromise(p, opts) { + return this.mkdirSync(p, opts); + } + mkdirSync(p, { mode = 493, recursive = false } = {}) { + if (recursive) + return this.mkdirpSync(p, { chmod: mode }); + if (this.readOnly) + throw EROFS(`mkdir '${p}'`); + const resolvedP = this.resolveFilename(`mkdir '${p}'`, p); + if (this.entries.has(resolvedP) || this.listings.has(resolvedP)) + throw EEXIST(`mkdir '${p}'`); + this.hydrateDirectory(resolvedP); + this.chmodSync(resolvedP, mode); + return void 0; + } + async rmdirPromise(p, opts) { + return this.rmdirSync(p, opts); + } + rmdirSync(p, { recursive = false } = {}) { + if (this.readOnly) + throw EROFS(`rmdir '${p}'`); + if (recursive) { + this.removeSync(p); + return; + } + const resolvedP = this.resolveFilename(`rmdir '${p}'`, p); + const directoryListing = this.listings.get(resolvedP); + if (!directoryListing) + throw ENOTDIR(`rmdir '${p}'`); + if (directoryListing.size > 0) + throw ENOTEMPTY(`rmdir '${p}'`); + const index = this.entries.get(resolvedP); + if (typeof index === `undefined`) + throw EINVAL(`rmdir '${p}'`); + this.deleteEntry(p, index); + } + async rmPromise(p, opts) { + return this.rmSync(p, opts); + } + rmSync(p, { recursive = false } = {}) { + if (this.readOnly) + throw EROFS(`rm '${p}'`); + if (recursive) { + this.removeSync(p); + return; + } + const resolvedP = this.resolveFilename(`rm '${p}'`, p); + const directoryListing = this.listings.get(resolvedP); + if (!directoryListing) + throw ENOTDIR(`rm '${p}'`); + if (directoryListing.size > 0) + throw ENOTEMPTY(`rm '${p}'`); + const index = this.entries.get(resolvedP); + if (typeof index === `undefined`) + throw EINVAL(`rm '${p}'`); + this.deleteEntry(p, index); + } + hydrateDirectory(resolvedP) { + const index = this.zipImpl.addDirectory(ppath.relative(PortablePath.root, resolvedP)); + this.registerListing(resolvedP); + this.registerEntry(resolvedP, index); + return index; + } + async linkPromise(existingP, newP) { + return this.linkSync(existingP, newP); + } + linkSync(existingP, newP) { + throw EOPNOTSUPP(`link '${existingP}' -> '${newP}'`); + } + async symlinkPromise(target, p) { + return this.symlinkSync(target, p); + } + symlinkSync(target, p) { + if (this.readOnly) + throw EROFS(`symlink '${target}' -> '${p}'`); + const resolvedP = this.resolveFilename(`symlink '${target}' -> '${p}'`, p); + if (this.listings.has(resolvedP)) + throw EISDIR(`symlink '${target}' -> '${p}'`); + if (this.entries.has(resolvedP)) + throw EEXIST(`symlink '${target}' -> '${p}'`); + const index = this.setFileSource(resolvedP, target); + this.registerEntry(resolvedP, index); + this.zipImpl.setExternalAttributes(index, ZIP_UNIX, (fs.constants.S_IFLNK | 511) << 16); + this.symlinkCount += 1; + } + async readFilePromise(p, encoding) { + if (typeof encoding === `object`) + encoding = encoding ? encoding.encoding : void 0; + const data = await this.readFileBuffer(p, { asyncDecompress: true }); + return encoding ? data.toString(encoding) : data; + } + readFileSync(p, encoding) { + if (typeof encoding === `object`) + encoding = encoding ? encoding.encoding : void 0; + const data = this.readFileBuffer(p); + return encoding ? data.toString(encoding) : data; + } + readFileBuffer(p, opts = { asyncDecompress: false }) { + if (typeof p === `number`) + p = this.fdToPath(p, `read`); + const resolvedP = this.resolveFilename(`open '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw ENOENT(`open '${p}'`); + if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) + throw ENOTDIR(`open '${p}'`); + if (this.listings.has(resolvedP)) + throw EISDIR(`read`); + const entry = this.entries.get(resolvedP); + if (entry === void 0) + throw new Error(`Unreachable`); + return this.getFileSource(entry, opts); + } + async readdirPromise(p, opts) { + return this.readdirSync(p, opts); + } + readdirSync(p, opts) { + const resolvedP = this.resolveFilename(`scandir '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw ENOENT(`scandir '${p}'`); + const directoryListing = this.listings.get(resolvedP); + if (!directoryListing) + throw ENOTDIR(`scandir '${p}'`); + if (opts?.recursive) { + if (opts?.withFileTypes) { + const entries = Array.from(directoryListing, (name) => { + return Object.assign(this.statImpl(`lstat`, ppath.join(p, name)), { + name, + path: PortablePath.dot, + parentPath: PortablePath.dot + }); + }); + for (const entry of entries) { + if (!entry.isDirectory()) + continue; + const subPath = ppath.join(entry.path, entry.name); + const subListing = this.listings.get(ppath.join(resolvedP, subPath)); + for (const child of subListing) { + entries.push(Object.assign(this.statImpl(`lstat`, ppath.join(p, subPath, child)), { + name: child, + path: subPath, + parentPath: subPath + })); + } + } + return entries; + } else { + const entries = [...directoryListing]; + for (const subPath of entries) { + const subListing = this.listings.get(ppath.join(resolvedP, subPath)); + if (typeof subListing === `undefined`) + continue; + for (const child of subListing) { + entries.push(ppath.join(subPath, child)); + } + } + return entries; + } + } else if (opts?.withFileTypes) { + return Array.from(directoryListing, (name) => { + return Object.assign(this.statImpl(`lstat`, ppath.join(p, name)), { + name, + path: void 0, + parentPath: void 0 + }); + }); + } else { + return [...directoryListing]; + } + } + async readlinkPromise(p) { + const entry = this.prepareReadlink(p); + return (await this.getFileSource(entry, { asyncDecompress: true })).toString(); + } + readlinkSync(p) { + const entry = this.prepareReadlink(p); + return this.getFileSource(entry).toString(); + } + prepareReadlink(p) { + const resolvedP = this.resolveFilename(`readlink '${p}'`, p, false); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw ENOENT(`readlink '${p}'`); + if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) + throw ENOTDIR(`open '${p}'`); + if (this.listings.has(resolvedP)) + throw EINVAL(`readlink '${p}'`); + const entry = this.entries.get(resolvedP); + if (entry === void 0) + throw new Error(`Unreachable`); + if (!this.isSymbolicLink(entry)) + throw EINVAL(`readlink '${p}'`); + return entry; + } + async truncatePromise(p, len = 0) { + const resolvedP = this.resolveFilename(`open '${p}'`, p); + const index = this.entries.get(resolvedP); + if (typeof index === `undefined`) + throw EINVAL(`open '${p}'`); + const source = await this.getFileSource(index, { asyncDecompress: true }); + const truncated = Buffer.alloc(len, 0); + source.copy(truncated); + return await this.writeFilePromise(p, truncated); + } + truncateSync(p, len = 0) { + const resolvedP = this.resolveFilename(`open '${p}'`, p); + const index = this.entries.get(resolvedP); + if (typeof index === `undefined`) + throw EINVAL(`open '${p}'`); + const source = this.getFileSource(index); + const truncated = Buffer.alloc(len, 0); + source.copy(truncated); + return this.writeFileSync(p, truncated); + } + async ftruncatePromise(fd, len) { + return this.truncatePromise(this.fdToPath(fd, `ftruncate`), len); + } + ftruncateSync(fd, len) { + return this.truncateSync(this.fdToPath(fd, `ftruncateSync`), len); + } + watch(p, a, b) { + let persistent; + switch (typeof a) { + case `function`: + case `string`: + case `undefined`: + { + persistent = true; + } + break; + default: + { + ({ persistent = true } = a); + } + break; + } + if (!persistent) + return { on: () => { + }, close: () => { + } }; + const interval = setInterval(() => { + }, 24 * 60 * 60 * 1e3); + return { + on: () => { + }, + close: () => { + clearInterval(interval); + } + }; + } + watchFile(p, a, b) { + const resolvedP = ppath.resolve(PortablePath.root, p); + return watchFile(this, resolvedP, a, b); + } + unwatchFile(p, cb) { + const resolvedP = ppath.resolve(PortablePath.root, p); + return unwatchFile(this, resolvedP, cb); + } +} + +const SIGNATURE = { + CENTRAL_DIRECTORY: 33639248, + END_OF_CENTRAL_DIRECTORY: 101010256 +}; +const noCommentCDSize = 22; +class JsZipImpl { + fd; + baseFs; + entries; + filesShouldBeCached = false; + constructor(opts) { + if (`buffer` in opts) + throw new Error(`Buffer based zip archives are not supported`); + if (!opts.readOnly) + throw new Error(`Writable zip archives are not supported`); + this.baseFs = opts.baseFs; + this.fd = this.baseFs.openSync(opts.path, `r`); + try { + this.entries = JsZipImpl.readZipSync(this.fd, this.baseFs, opts.size); + } catch (error) { + this.baseFs.closeSync(this.fd); + this.fd = `closed`; + throw error; + } + } + static readZipSync(fd, baseFs, fileSize) { + if (fileSize < noCommentCDSize) + throw new Error(`Invalid ZIP file: EOCD not found`); + let eocdOffset = -1; + let eocdBuffer = Buffer.alloc(noCommentCDSize); + baseFs.readSync( + fd, + eocdBuffer, + 0, + noCommentCDSize, + fileSize - noCommentCDSize + ); + if (eocdBuffer.readUInt32LE(0) === SIGNATURE.END_OF_CENTRAL_DIRECTORY) { + eocdOffset = 0; + } else { + const bufferSize = Math.min(65557, fileSize); + eocdBuffer = Buffer.alloc(bufferSize); + baseFs.readSync( + fd, + eocdBuffer, + 0, + bufferSize, + Math.max(0, fileSize - bufferSize) + ); + for (let i = eocdBuffer.length - 4; i >= 0; i--) { + if (eocdBuffer.readUInt32LE(i) === SIGNATURE.END_OF_CENTRAL_DIRECTORY) { + eocdOffset = i; + break; + } + } + if (eocdOffset === -1) { + throw new Error(`Not a zip archive`); + } + } + const totalEntries = eocdBuffer.readUInt16LE(eocdOffset + 10); + const centralDirSize = eocdBuffer.readUInt32LE(eocdOffset + 12); + const centralDirOffset = eocdBuffer.readUInt32LE(eocdOffset + 16); + const commentLength = eocdBuffer.readUInt16LE(eocdOffset + 20); + if (eocdOffset + commentLength + noCommentCDSize > eocdBuffer.length) + throw new Error(`Zip archive inconsistent`); + if (totalEntries == 65535 || centralDirSize == 4294967295 || centralDirOffset == 4294967295) + throw new Error(`Zip 64 is not supported`); + if (centralDirSize > fileSize) + throw new Error(`Zip archive inconsistent`); + if (totalEntries > centralDirSize / 46) + throw new Error(`Zip archive inconsistent`); + const cdBuffer = Buffer.alloc(centralDirSize); + if (baseFs.readSync(fd, cdBuffer, 0, cdBuffer.length, centralDirOffset) !== cdBuffer.length) + throw new Error(`Zip archive inconsistent`); + const entries = []; + let offset = 0; + let index = 0; + let sumCompressedSize = 0; + while (index < totalEntries) { + if (offset + 46 > cdBuffer.length) + throw new Error(`Zip archive inconsistent`); + if (cdBuffer.readUInt32LE(offset) !== SIGNATURE.CENTRAL_DIRECTORY) + throw new Error(`Zip archive inconsistent`); + const versionMadeBy = cdBuffer.readUInt16LE(offset + 4); + const os = versionMadeBy >>> 8; + const flags = cdBuffer.readUInt16LE(offset + 8); + if ((flags & 1) !== 0) + throw new Error(`Encrypted zip files are not supported`); + const compressionMethod = cdBuffer.readUInt16LE(offset + 10); + const crc = cdBuffer.readUInt32LE(offset + 16); + const nameLength = cdBuffer.readUInt16LE(offset + 28); + const extraLength = cdBuffer.readUInt16LE(offset + 30); + const commentLength2 = cdBuffer.readUInt16LE(offset + 32); + const localHeaderOffset = cdBuffer.readUInt32LE(offset + 42); + const name = cdBuffer.toString(`utf8`, offset + 46, offset + 46 + nameLength).replaceAll(`\0`, ` `); + if (name.includes(`\0`)) + throw new Error(`Invalid ZIP file`); + const compressedSize = cdBuffer.readUInt32LE(offset + 20); + const externalAttributes = cdBuffer.readUInt32LE(offset + 38); + entries.push({ + name, + os, + mtime: SAFE_TIME, + //we dont care, + crc, + compressionMethod, + isSymbolicLink: os === ZIP_UNIX && (externalAttributes >>> 16 & S_IFMT) === S_IFLNK, + size: cdBuffer.readUInt32LE(offset + 24), + compressedSize, + externalAttributes, + localHeaderOffset + }); + sumCompressedSize += compressedSize; + index += 1; + offset += 46 + nameLength + extraLength + commentLength2; + } + if (sumCompressedSize > fileSize) + throw new Error(`Zip archive inconsistent`); + if (offset !== cdBuffer.length) + throw new Error(`Zip archive inconsistent`); + return entries; + } + getExternalAttributes(index) { + const entry = this.entries[index]; + return [entry.os, entry.externalAttributes]; + } + getListings() { + return this.entries.map((e) => e.name); + } + getSymlinkCount() { + let count = 0; + for (const entry of this.entries) + if (entry.isSymbolicLink) + count += 1; + return count; + } + stat(index) { + const entry = this.entries[index]; + return { + crc: entry.crc, + mtime: entry.mtime, + size: entry.size + }; + } + locate(name) { + for (let ind = 0; ind < this.entries.length; ind++) + if (this.entries[ind].name === name) + return ind; + return -1; + } + getFileSource(index) { + if (this.fd === `closed`) + throw new Error(`ZIP file is closed`); + const entry = this.entries[index]; + const localHeaderBuf = Buffer.alloc(30); + this.baseFs.readSync( + this.fd, + localHeaderBuf, + 0, + localHeaderBuf.length, + entry.localHeaderOffset + ); + const nameLength = localHeaderBuf.readUInt16LE(26); + const extraLength = localHeaderBuf.readUInt16LE(28); + const buffer = Buffer.alloc(entry.compressedSize); + if (this.baseFs.readSync(this.fd, buffer, 0, entry.compressedSize, entry.localHeaderOffset + 30 + nameLength + extraLength) !== entry.compressedSize) + throw new Error(`Invalid ZIP file`); + return { data: buffer, compressionMethod: entry.compressionMethod }; + } + discard() { + if (this.fd !== `closed`) { + this.baseFs.closeSync(this.fd); + this.fd = `closed`; + } + } + addDirectory(path) { + throw new Error(`Not implemented`); + } + deleteEntry(index) { + throw new Error(`Not implemented`); + } + setMtime(index, mtime) { + throw new Error(`Not implemented`); + } + getBufferAndClose() { + throw new Error(`Not implemented`); + } + setFileSource(target, compression, buffer) { + throw new Error(`Not implemented`); + } + setExternalAttributes(index, opsys, attributes) { + throw new Error(`Not implemented`); + } +} + +setFactory(() => { + const emZip = createModule(); + return makeInterface(emZip); +}); + +var ErrorCode = /* @__PURE__ */ ((ErrorCode2) => { + ErrorCode2["API_ERROR"] = `API_ERROR`; + ErrorCode2["BUILTIN_NODE_RESOLUTION_FAILED"] = `BUILTIN_NODE_RESOLUTION_FAILED`; + ErrorCode2["EXPORTS_RESOLUTION_FAILED"] = `EXPORTS_RESOLUTION_FAILED`; + ErrorCode2["MISSING_DEPENDENCY"] = `MISSING_DEPENDENCY`; + ErrorCode2["MISSING_PEER_DEPENDENCY"] = `MISSING_PEER_DEPENDENCY`; + ErrorCode2["QUALIFIED_PATH_RESOLUTION_FAILED"] = `QUALIFIED_PATH_RESOLUTION_FAILED`; + ErrorCode2["INTERNAL"] = `INTERNAL`; + ErrorCode2["UNDECLARED_DEPENDENCY"] = `UNDECLARED_DEPENDENCY`; + ErrorCode2["UNSUPPORTED"] = `UNSUPPORTED`; + return ErrorCode2; +})(ErrorCode || {}); +const MODULE_NOT_FOUND_ERRORS = /* @__PURE__ */ new Set([ + "BUILTIN_NODE_RESOLUTION_FAILED" /* BUILTIN_NODE_RESOLUTION_FAILED */, + "MISSING_DEPENDENCY" /* MISSING_DEPENDENCY */, + "MISSING_PEER_DEPENDENCY" /* MISSING_PEER_DEPENDENCY */, + "QUALIFIED_PATH_RESOLUTION_FAILED" /* QUALIFIED_PATH_RESOLUTION_FAILED */, + "UNDECLARED_DEPENDENCY" /* UNDECLARED_DEPENDENCY */ +]); +function makeError(pnpCode, message, data = {}, code) { + code ??= MODULE_NOT_FOUND_ERRORS.has(pnpCode) ? `MODULE_NOT_FOUND` : pnpCode; + const propertySpec = { + configurable: true, + writable: true, + enumerable: false + }; + return Object.defineProperties(new Error(message), { + code: { + ...propertySpec, + value: code + }, + pnpCode: { + ...propertySpec, + value: pnpCode + }, + data: { + ...propertySpec, + value: data + } + }); +} +function getIssuerModule(parent) { + let issuer = parent; + while (issuer && (issuer.id === `[eval]` || issuer.id === `` || !issuer.filename)) + issuer = issuer.parent; + return issuer || null; +} +function getPathForDisplay(p) { + return npath.normalize(npath.fromPortablePath(p)); +} + +const [major, minor] = process.versions.node.split(`.`).map((value) => parseInt(value, 10)); +const WATCH_MODE_MESSAGE_USES_ARRAYS = major > 19 || major === 19 && minor >= 2 || major === 18 && minor >= 13; + +function readPackageScope(checkPath) { + const rootSeparatorIndex = checkPath.indexOf(npath.sep); + let separatorIndex; + do { + separatorIndex = checkPath.lastIndexOf(npath.sep); + checkPath = checkPath.slice(0, separatorIndex); + if (checkPath.endsWith(`${npath.sep}node_modules`)) + return false; + const pjson = readPackage(checkPath + npath.sep); + if (pjson) { + return { + data: pjson, + path: checkPath + }; + } + } while (separatorIndex > rootSeparatorIndex); + return false; +} +function readPackage(requestPath) { + const jsonPath = npath.resolve(requestPath, `package.json`); + if (!fs__default.default.existsSync(jsonPath)) + return null; + return JSON.parse(fs__default.default.readFileSync(jsonPath, `utf8`)); +} +function ERR_REQUIRE_ESM(filename, parentPath = null) { + const basename = parentPath && path__default.default.basename(filename) === path__default.default.basename(parentPath) ? filename : path__default.default.basename(filename); + const msg = `require() of ES Module ${filename}${parentPath ? ` from ${parentPath}` : ``} not supported. +Instead change the require of ${basename} in ${parentPath} to a dynamic import() which is available in all CommonJS modules.`; + const err = new Error(msg); + err.code = `ERR_REQUIRE_ESM`; + return err; +} +function reportRequiredFilesToWatchMode(files) { + if (process.env.WATCH_REPORT_DEPENDENCIES && process.send) { + files = files.map((filename) => npath.fromPortablePath(VirtualFS.resolveVirtual(npath.toPortablePath(filename)))); + if (WATCH_MODE_MESSAGE_USES_ARRAYS) { + process.send({ "watch:require": files }); + } else { + for (const filename of files) { + process.send({ "watch:require": filename }); + } + } + } +} + +function applyPatch(pnpapi, opts) { + let enableNativeHooks = true; + process.versions.pnp = String(pnpapi.VERSIONS.std); + const moduleExports = require$$0__default.default; + moduleExports.findPnpApi = (lookupSource) => { + const lookupPath = lookupSource instanceof URL ? url.fileURLToPath(lookupSource) : lookupSource; + const apiPath = opts.manager.findApiPathFor(lookupPath); + if (apiPath === null) + return null; + const apiEntry = opts.manager.getApiEntry(apiPath, true); + return apiEntry.instance.findPackageLocator(lookupPath) ? apiEntry.instance : null; + }; + function getRequireStack(parent) { + const requireStack = []; + for (let cursor = parent; cursor; cursor = cursor.parent) + requireStack.push(cursor.filename || cursor.id); + return requireStack; + } + const originalModuleLoad = require$$0.Module._load; + require$$0.Module._load = function(request, parent, isMain) { + if (request === `pnpapi`) { + const parentApiPath = opts.manager.getApiPathFromParent(parent); + if (parentApiPath) { + return opts.manager.getApiEntry(parentApiPath, true).instance; + } + } + return originalModuleLoad.call(require$$0.Module, request, parent, isMain); + }; + function getIssuerSpecsFromPaths(paths) { + return paths.map((path) => ({ + apiPath: opts.manager.findApiPathFor(path), + path, + module: null + })); + } + function getIssuerSpecsFromModule(module) { + if (module && module.id !== `` && module.id !== `internal/preload` && !module.parent && !module.filename && module.paths.length > 0) { + return [{ + apiPath: opts.manager.findApiPathFor(module.paths[0]), + path: module.paths[0], + module + }]; + } + const issuer = getIssuerModule(module); + if (issuer !== null) { + const path = npath.dirname(issuer.filename); + const apiPath = opts.manager.getApiPathFromParent(issuer); + return [{ apiPath, path, module }]; + } else { + const path = process.cwd(); + const apiPath = opts.manager.findApiPathFor(npath.join(path, `[file]`)) ?? opts.manager.getApiPathFromParent(null); + return [{ apiPath, path, module }]; + } + } + function makeFakeParent(path) { + const fakeParent = new require$$0.Module(``); + const fakeFilePath = npath.join(path, `[file]`); + fakeParent.paths = require$$0.Module._nodeModulePaths(fakeFilePath); + return fakeParent; + } + const pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:@[^/]+\/)?[^/]+)\/*(.*|)$/; + const originalModuleResolveFilename = require$$0.Module._resolveFilename; + require$$0.Module._resolveFilename = function(request, parent, isMain, options) { + if (require$$0.isBuiltin(request)) + return request; + if (!enableNativeHooks) + return originalModuleResolveFilename.call(require$$0.Module, request, parent, isMain, options); + if (options && options.plugnplay === false) { + const { plugnplay, ...forwardedOptions } = options; + try { + enableNativeHooks = false; + return originalModuleResolveFilename.call(require$$0.Module, request, parent, isMain, forwardedOptions); + } finally { + enableNativeHooks = true; + } + } + if (options) { + const optionNames = new Set(Object.keys(options)); + optionNames.delete(`paths`); + optionNames.delete(`plugnplay`); + if (optionNames.size > 0) { + throw makeError( + ErrorCode.UNSUPPORTED, + `Some options passed to require() aren't supported by PnP yet (${Array.from(optionNames).join(`, `)})` + ); + } + } + const issuerSpecs = options && options.paths ? getIssuerSpecsFromPaths(options.paths) : getIssuerSpecsFromModule(parent); + if (request.match(pathRegExp) === null) { + const parentDirectory = parent?.filename != null ? npath.dirname(parent.filename) : null; + const absoluteRequest = npath.isAbsolute(request) ? request : parentDirectory !== null ? npath.resolve(parentDirectory, request) : null; + if (absoluteRequest !== null) { + const apiPath = parent && parentDirectory === npath.dirname(absoluteRequest) ? opts.manager.getApiPathFromParent(parent) : opts.manager.findApiPathFor(absoluteRequest); + if (apiPath !== null) { + issuerSpecs.unshift({ + apiPath, + path: parentDirectory, + module: null + }); + } + } + } + let firstError; + for (const { apiPath, path, module } of issuerSpecs) { + let resolution; + const issuerApi = apiPath !== null ? opts.manager.getApiEntry(apiPath, true).instance : null; + try { + if (issuerApi !== null) { + resolution = issuerApi.resolveRequest(request, path !== null ? `${path}/` : null); + } else { + if (path === null) + throw new Error(`Assertion failed: Expected the path to be set`); + resolution = originalModuleResolveFilename.call(require$$0.Module, request, module || makeFakeParent(path), isMain); + } + } catch (error) { + firstError = firstError || error; + continue; + } + if (resolution !== null) { + return resolution; + } + } + const requireStack = getRequireStack(parent); + Object.defineProperty(firstError, `requireStack`, { + configurable: true, + writable: true, + enumerable: false, + value: requireStack + }); + if (requireStack.length > 0) + firstError.message += ` +Require stack: +- ${requireStack.join(` +- `)}`; + if (typeof firstError.pnpCode === `string`) + Error.captureStackTrace(firstError); + throw firstError; + }; + const originalFindPath = require$$0.Module._findPath; + require$$0.Module._findPath = function(request, paths, isMain) { + if (request === `pnpapi`) + return false; + if (!enableNativeHooks) + return originalFindPath.call(require$$0.Module, request, paths, isMain); + const isAbsolute = npath.isAbsolute(request); + if (isAbsolute) + paths = [``]; + else if (!paths || paths.length === 0) + return false; + for (const path of paths) { + let resolution; + try { + const pnpApiPath = opts.manager.findApiPathFor(isAbsolute ? request : path); + if (pnpApiPath !== null) { + const api = opts.manager.getApiEntry(pnpApiPath, true).instance; + resolution = api.resolveRequest(request, path) || false; + } else { + resolution = originalFindPath.call(require$$0.Module, request, [path], isMain); + } + } catch { + continue; + } + if (resolution) { + return resolution; + } + } + return false; + }; + if (!process.features.require_module) { + const originalExtensionJSFunction = require$$0.Module._extensions[`.js`]; + require$$0.Module._extensions[`.js`] = function(module, filename) { + if (filename.endsWith(`.js`)) { + const pkg = readPackageScope(filename); + if (pkg && pkg.data?.type === `module`) { + const err = ERR_REQUIRE_ESM(filename, module.parent?.filename); + Error.captureStackTrace(err); + throw err; + } + } + originalExtensionJSFunction.call(this, module, filename); + }; + } + const originalDlopen = process.dlopen; + process.dlopen = function(...args) { + const [module, filename, ...rest] = args; + return originalDlopen.call( + this, + module, + npath.fromPortablePath(VirtualFS.resolveVirtual(npath.toPortablePath(filename))), + ...rest + ); + }; + const originalEmit = process.emit; + process.emit = function(name, data, ...args) { + if (name === `warning` && typeof data === `object` && data.name === `ExperimentalWarning` && (data.message.includes(`--experimental-loader`) || data.message.includes(`Custom ESM Loaders is an experimental feature`))) + return false; + return originalEmit.apply(process, arguments); + }; + patchFs(fs__default.default, new PosixFS(opts.fakeFs)); +} + +function hydrateRuntimeState(data, { basePath }) { + const portablePath = npath.toPortablePath(basePath); + const absolutePortablePath = ppath.resolve(portablePath); + const ignorePattern = data.ignorePatternData !== null ? new RegExp(data.ignorePatternData) : null; + const packageLocatorsByLocations = /* @__PURE__ */ new Map(); + const packageRegistry = new Map(data.packageRegistryData.map(([packageName, packageStoreData]) => { + return [packageName, new Map(packageStoreData.map(([packageReference, packageInformationData]) => { + if (packageName === null !== (packageReference === null)) + throw new Error(`Assertion failed: The name and reference should be null, or neither should`); + const discardFromLookup = packageInformationData.discardFromLookup ?? false; + const packageLocator = { name: packageName, reference: packageReference }; + const entry = packageLocatorsByLocations.get(packageInformationData.packageLocation); + if (!entry) { + packageLocatorsByLocations.set(packageInformationData.packageLocation, { locator: packageLocator, discardFromLookup }); + } else { + entry.discardFromLookup = entry.discardFromLookup && discardFromLookup; + if (!discardFromLookup) { + entry.locator = packageLocator; + } + } + let resolvedPackageLocation = null; + return [packageReference, { + packageDependencies: new Map(packageInformationData.packageDependencies), + packagePeers: new Set(packageInformationData.packagePeers), + linkType: packageInformationData.linkType, + discardFromLookup, + // we only need this for packages that are used by the currently running script + // this is a lazy getter because `ppath.join` has some overhead + get packageLocation() { + return resolvedPackageLocation || (resolvedPackageLocation = ppath.join(absolutePortablePath, packageInformationData.packageLocation)); + } + }]; + }))]; + })); + const fallbackExclusionList = new Map(data.fallbackExclusionList.map(([packageName, packageReferences]) => { + return [packageName, new Set(packageReferences)]; + })); + const fallbackPool = new Map(data.fallbackPool); + const dependencyTreeRoots = data.dependencyTreeRoots; + const enableTopLevelFallback = data.enableTopLevelFallback; + return { + basePath: portablePath, + dependencyTreeRoots, + enableTopLevelFallback, + fallbackExclusionList, + pnpZipBackend: data.pnpZipBackend, + fallbackPool, + ignorePattern, + packageLocatorsByLocations, + packageRegistry + }; +} + +const ArrayIsArray = Array.isArray; +const JSONStringify = JSON.stringify; +const ObjectGetOwnPropertyNames = Object.getOwnPropertyNames; +const ObjectPrototypeHasOwnProperty = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop); +const RegExpPrototypeExec = (obj, string) => RegExp.prototype.exec.call(obj, string); +const RegExpPrototypeSymbolReplace = (obj, ...rest) => RegExp.prototype[Symbol.replace].apply(obj, rest); +const StringPrototypeEndsWith = (str, ...rest) => String.prototype.endsWith.apply(str, rest); +const StringPrototypeIncludes = (str, ...rest) => String.prototype.includes.apply(str, rest); +const StringPrototypeLastIndexOf = (str, ...rest) => String.prototype.lastIndexOf.apply(str, rest); +const StringPrototypeIndexOf = (str, ...rest) => String.prototype.indexOf.apply(str, rest); +const StringPrototypeReplace = (str, ...rest) => String.prototype.replace.apply(str, rest); +const StringPrototypeSlice = (str, ...rest) => String.prototype.slice.apply(str, rest); +const StringPrototypeStartsWith = (str, ...rest) => String.prototype.startsWith.apply(str, rest); +const SafeMap = Map; +const JSONParse = JSON.parse; + +function createErrorType(code, messageCreator, errorType) { + return class extends errorType { + constructor(...args) { + super(messageCreator(...args)); + this.code = code; + this.name = `${errorType.name} [${code}]`; + } + }; +} +const ERR_PACKAGE_IMPORT_NOT_DEFINED = createErrorType( + `ERR_PACKAGE_IMPORT_NOT_DEFINED`, + (specifier, packagePath, base) => { + return `Package import specifier "${specifier}" is not defined${packagePath ? ` in package ${packagePath}package.json` : ``} imported from ${base}`; + }, + TypeError +); +const ERR_INVALID_MODULE_SPECIFIER = createErrorType( + `ERR_INVALID_MODULE_SPECIFIER`, + (request, reason, base = void 0) => { + return `Invalid module "${request}" ${reason}${base ? ` imported from ${base}` : ``}`; + }, + TypeError +); +const ERR_INVALID_PACKAGE_TARGET = createErrorType( + `ERR_INVALID_PACKAGE_TARGET`, + (pkgPath, key, target, isImport = false, base = void 0) => { + const relError = typeof target === `string` && !isImport && target.length && !StringPrototypeStartsWith(target, `./`); + if (key === `.`) { + assert__default.default(isImport === false); + return `Invalid "exports" main target ${JSONStringify(target)} defined in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`; + } + return `Invalid "${isImport ? `imports` : `exports`}" target ${JSONStringify( + target + )} defined for '${key}' in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`; + }, + Error +); +const ERR_INVALID_PACKAGE_CONFIG = createErrorType( + `ERR_INVALID_PACKAGE_CONFIG`, + (path, base, message) => { + return `Invalid package config ${path}${base ? ` while importing ${base}` : ``}${message ? `. ${message}` : ``}`; + }, + Error +); +const ERR_PACKAGE_PATH_NOT_EXPORTED = createErrorType( + "ERR_PACKAGE_PATH_NOT_EXPORTED", + (pkgPath, subpath, base = void 0) => { + if (subpath === ".") + return `No "exports" main defined in ${pkgPath}package.json${base ? ` imported from ${base}` : ""}`; + return `Package subpath '${subpath}' is not defined by "exports" in ${pkgPath}package.json${base ? ` imported from ${base}` : ""}`; + }, + Error +); + +function filterOwnProperties(source, keys) { + const filtered = /* @__PURE__ */ Object.create(null); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + if (ObjectPrototypeHasOwnProperty(source, key)) { + filtered[key] = source[key]; + } + } + return filtered; +} + +const packageJSONCache = new SafeMap(); +function getPackageConfig(path, specifier, base, readFileSyncFn) { + const existing = packageJSONCache.get(path); + if (existing !== void 0) { + return existing; + } + const source = readFileSyncFn(path); + if (source === void 0) { + const packageConfig2 = { + pjsonPath: path, + exists: false, + main: void 0, + name: void 0, + type: "none", + exports: void 0, + imports: void 0 + }; + packageJSONCache.set(path, packageConfig2); + return packageConfig2; + } + let packageJSON; + try { + packageJSON = JSONParse(source); + } catch (error) { + throw new ERR_INVALID_PACKAGE_CONFIG( + path, + (base ? `"${specifier}" from ` : "") + url.fileURLToPath(base || specifier), + error.message + ); + } + let { imports, main, name, type } = filterOwnProperties(packageJSON, [ + "imports", + "main", + "name", + "type" + ]); + const exports = ObjectPrototypeHasOwnProperty(packageJSON, "exports") ? packageJSON.exports : void 0; + if (typeof imports !== "object" || imports === null) { + imports = void 0; + } + if (typeof main !== "string") { + main = void 0; + } + if (typeof name !== "string") { + name = void 0; + } + if (type !== "module" && type !== "commonjs") { + type = "none"; + } + const packageConfig = { + pjsonPath: path, + exists: true, + main, + name, + type, + exports, + imports + }; + packageJSONCache.set(path, packageConfig); + return packageConfig; +} +function getPackageScopeConfig(resolved, readFileSyncFn) { + let packageJSONUrl = new URL("./package.json", resolved); + while (true) { + const packageJSONPath2 = packageJSONUrl.pathname; + if (StringPrototypeEndsWith(packageJSONPath2, "node_modules/package.json")) { + break; + } + const packageConfig2 = getPackageConfig( + url.fileURLToPath(packageJSONUrl), + resolved, + void 0, + readFileSyncFn + ); + if (packageConfig2.exists) { + return packageConfig2; + } + const lastPackageJSONUrl = packageJSONUrl; + packageJSONUrl = new URL("../package.json", packageJSONUrl); + if (packageJSONUrl.pathname === lastPackageJSONUrl.pathname) { + break; + } + } + const packageJSONPath = url.fileURLToPath(packageJSONUrl); + const packageConfig = { + pjsonPath: packageJSONPath, + exists: false, + main: void 0, + name: void 0, + type: "none", + exports: void 0, + imports: void 0 + }; + packageJSONCache.set(packageJSONPath, packageConfig); + return packageConfig; +} + +function throwImportNotDefined(specifier, packageJSONUrl, base) { + throw new ERR_PACKAGE_IMPORT_NOT_DEFINED( + specifier, + packageJSONUrl && url.fileURLToPath(new URL(".", packageJSONUrl)), + url.fileURLToPath(base) + ); +} +function throwInvalidSubpath(subpath, packageJSONUrl, internal, base) { + const reason = `request is not a valid subpath for the "${internal ? "imports" : "exports"}" resolution of ${url.fileURLToPath(packageJSONUrl)}`; + throw new ERR_INVALID_MODULE_SPECIFIER( + subpath, + reason, + base && url.fileURLToPath(base) + ); +} +function throwInvalidPackageTarget(subpath, target, packageJSONUrl, internal, base) { + if (typeof target === "object" && target !== null) { + target = JSONStringify(target, null, ""); + } else { + target = `${target}`; + } + throw new ERR_INVALID_PACKAGE_TARGET( + url.fileURLToPath(new URL(".", packageJSONUrl)), + subpath, + target, + internal, + base && url.fileURLToPath(base) + ); +} +const invalidSegmentRegEx = /(^|\\|\/)((\.|%2e)(\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))(\\|\/|$)/i; +const patternRegEx = /\*/g; +function resolvePackageTargetString(target, subpath, match, packageJSONUrl, base, pattern, internal, conditions) { + if (subpath !== "" && !pattern && target[target.length - 1] !== "/") + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + if (!StringPrototypeStartsWith(target, "./")) { + if (internal && !StringPrototypeStartsWith(target, "../") && !StringPrototypeStartsWith(target, "/")) { + let isURL = false; + try { + new URL(target); + isURL = true; + } catch { + } + if (!isURL) { + const exportTarget = pattern ? RegExpPrototypeSymbolReplace(patternRegEx, target, () => subpath) : target + subpath; + return exportTarget; + } + } + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + } + if (RegExpPrototypeExec( + invalidSegmentRegEx, + StringPrototypeSlice(target, 2) + ) !== null) + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + const resolved = new URL(target, packageJSONUrl); + const resolvedPath = resolved.pathname; + const packagePath = new URL(".", packageJSONUrl).pathname; + if (!StringPrototypeStartsWith(resolvedPath, packagePath)) + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + if (subpath === "") return resolved; + if (RegExpPrototypeExec(invalidSegmentRegEx, subpath) !== null) { + const request = pattern ? StringPrototypeReplace(match, "*", () => subpath) : match + subpath; + throwInvalidSubpath(request, packageJSONUrl, internal, base); + } + if (pattern) { + return new URL( + RegExpPrototypeSymbolReplace(patternRegEx, resolved.href, () => subpath) + ); + } + return new URL(subpath, resolved); +} +function isArrayIndex(key) { + const keyNum = +key; + if (`${keyNum}` !== key) return false; + return keyNum >= 0 && keyNum < 4294967295; +} +function resolvePackageTarget(packageJSONUrl, target, subpath, packageSubpath, base, pattern, internal, conditions) { + if (typeof target === "string") { + return resolvePackageTargetString( + target, + subpath, + packageSubpath, + packageJSONUrl, + base, + pattern, + internal); + } else if (ArrayIsArray(target)) { + if (target.length === 0) { + return null; + } + let lastException; + for (let i = 0; i < target.length; i++) { + const targetItem = target[i]; + let resolveResult; + try { + resolveResult = resolvePackageTarget( + packageJSONUrl, + targetItem, + subpath, + packageSubpath, + base, + pattern, + internal, + conditions + ); + } catch (e) { + lastException = e; + if (e.code === "ERR_INVALID_PACKAGE_TARGET") { + continue; + } + throw e; + } + if (resolveResult === void 0) { + continue; + } + if (resolveResult === null) { + lastException = null; + continue; + } + return resolveResult; + } + if (lastException === void 0 || lastException === null) + return lastException; + throw lastException; + } else if (typeof target === "object" && target !== null) { + const keys = ObjectGetOwnPropertyNames(target); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + if (isArrayIndex(key)) { + throw new ERR_INVALID_PACKAGE_CONFIG( + url.fileURLToPath(packageJSONUrl), + base, + '"exports" cannot contain numeric property keys.' + ); + } + } + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + if (key === "default" || conditions.has(key)) { + const conditionalTarget = target[key]; + const resolveResult = resolvePackageTarget( + packageJSONUrl, + conditionalTarget, + subpath, + packageSubpath, + base, + pattern, + internal, + conditions + ); + if (resolveResult === void 0) continue; + return resolveResult; + } + } + return void 0; + } else if (target === null) { + return null; + } + throwInvalidPackageTarget( + packageSubpath, + target, + packageJSONUrl, + internal, + base + ); +} +function patternKeyCompare(a, b) { + const aPatternIndex = StringPrototypeIndexOf(a, "*"); + const bPatternIndex = StringPrototypeIndexOf(b, "*"); + const baseLenA = aPatternIndex === -1 ? a.length : aPatternIndex + 1; + const baseLenB = bPatternIndex === -1 ? b.length : bPatternIndex + 1; + if (baseLenA > baseLenB) return -1; + if (baseLenB > baseLenA) return 1; + if (aPatternIndex === -1) return 1; + if (bPatternIndex === -1) return -1; + if (a.length > b.length) return -1; + if (b.length > a.length) return 1; + return 0; +} +function isConditionalExportsMainSugar(exports, packageJSONUrl, base) { + if (typeof exports === "string" || ArrayIsArray(exports)) return true; + if (typeof exports !== "object" || exports === null) return false; + const keys = ObjectGetOwnPropertyNames(exports); + let isConditionalSugar = false; + let i = 0; + for (let j = 0; j < keys.length; j++) { + const key = keys[j]; + const curIsConditionalSugar = key === "" || key[0] !== "."; + if (i++ === 0) { + isConditionalSugar = curIsConditionalSugar; + } else if (isConditionalSugar !== curIsConditionalSugar) { + throw new ERR_INVALID_PACKAGE_CONFIG( + url.fileURLToPath(packageJSONUrl), + base, + `"exports" cannot contain some keys starting with '.' and some not. The exports object must either be an object of package subpath keys or an object of main entry condition name keys only.` + ); + } + } + return isConditionalSugar; +} +function throwExportsNotFound(subpath, packageJSONUrl, base) { + throw new ERR_PACKAGE_PATH_NOT_EXPORTED( + url.fileURLToPath(new URL(".", packageJSONUrl)), + subpath, + base && url.fileURLToPath(base) + ); +} +const emittedPackageWarnings = /* @__PURE__ */ new Set(); +function emitTrailingSlashPatternDeprecation(match, pjsonUrl, base) { + const pjsonPath = url.fileURLToPath(pjsonUrl); + if (emittedPackageWarnings.has(pjsonPath + "|" + match)) return; + emittedPackageWarnings.add(pjsonPath + "|" + match); + process.emitWarning( + `Use of deprecated trailing slash pattern mapping "${match}" in the "exports" field module resolution of the package at ${pjsonPath}${base ? ` imported from ${url.fileURLToPath(base)}` : ""}. Mapping specifiers ending in "/" is no longer supported.`, + "DeprecationWarning", + "DEP0155" + ); +} +function packageExportsResolve({ + packageJSONUrl, + packageSubpath, + exports, + base, + conditions +}) { + if (isConditionalExportsMainSugar(exports, packageJSONUrl, base)) + exports = { ".": exports }; + if (ObjectPrototypeHasOwnProperty(exports, packageSubpath) && !StringPrototypeIncludes(packageSubpath, "*") && !StringPrototypeEndsWith(packageSubpath, "/")) { + const target = exports[packageSubpath]; + const resolveResult = resolvePackageTarget( + packageJSONUrl, + target, + "", + packageSubpath, + base, + false, + false, + conditions + ); + if (resolveResult == null) { + throwExportsNotFound(packageSubpath, packageJSONUrl, base); + } + return resolveResult; + } + let bestMatch = ""; + let bestMatchSubpath; + const keys = ObjectGetOwnPropertyNames(exports); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + const patternIndex = StringPrototypeIndexOf(key, "*"); + if (patternIndex !== -1 && StringPrototypeStartsWith( + packageSubpath, + StringPrototypeSlice(key, 0, patternIndex) + )) { + if (StringPrototypeEndsWith(packageSubpath, "/")) + emitTrailingSlashPatternDeprecation( + packageSubpath, + packageJSONUrl, + base + ); + const patternTrailer = StringPrototypeSlice(key, patternIndex + 1); + if (packageSubpath.length >= key.length && StringPrototypeEndsWith(packageSubpath, patternTrailer) && patternKeyCompare(bestMatch, key) === 1 && StringPrototypeLastIndexOf(key, "*") === patternIndex) { + bestMatch = key; + bestMatchSubpath = StringPrototypeSlice( + packageSubpath, + patternIndex, + packageSubpath.length - patternTrailer.length + ); + } + } + } + if (bestMatch) { + const target = exports[bestMatch]; + const resolveResult = resolvePackageTarget( + packageJSONUrl, + target, + bestMatchSubpath, + bestMatch, + base, + true, + false, + conditions + ); + if (resolveResult == null) { + throwExportsNotFound(packageSubpath, packageJSONUrl, base); + } + return resolveResult; + } + throwExportsNotFound(packageSubpath, packageJSONUrl, base); +} +function packageImportsResolve({ name, base, conditions, readFileSyncFn }) { + if (name === "#" || StringPrototypeStartsWith(name, "#/") || StringPrototypeEndsWith(name, "/")) { + const reason = "is not a valid internal imports specifier name"; + throw new ERR_INVALID_MODULE_SPECIFIER(name, reason, url.fileURLToPath(base)); + } + let packageJSONUrl; + const packageConfig = getPackageScopeConfig(base, readFileSyncFn); + if (packageConfig.exists) { + packageJSONUrl = url.pathToFileURL(packageConfig.pjsonPath); + const imports = packageConfig.imports; + if (imports) { + if (ObjectPrototypeHasOwnProperty(imports, name) && !StringPrototypeIncludes(name, "*")) { + const resolveResult = resolvePackageTarget( + packageJSONUrl, + imports[name], + "", + name, + base, + false, + true, + conditions + ); + if (resolveResult != null) { + return resolveResult; + } + } else { + let bestMatch = ""; + let bestMatchSubpath; + const keys = ObjectGetOwnPropertyNames(imports); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + const patternIndex = StringPrototypeIndexOf(key, "*"); + if (patternIndex !== -1 && StringPrototypeStartsWith( + name, + StringPrototypeSlice(key, 0, patternIndex) + )) { + const patternTrailer = StringPrototypeSlice(key, patternIndex + 1); + if (name.length >= key.length && StringPrototypeEndsWith(name, patternTrailer) && patternKeyCompare(bestMatch, key) === 1 && StringPrototypeLastIndexOf(key, "*") === patternIndex) { + bestMatch = key; + bestMatchSubpath = StringPrototypeSlice( + name, + patternIndex, + name.length - patternTrailer.length + ); + } + } + } + if (bestMatch) { + const target = imports[bestMatch]; + const resolveResult = resolvePackageTarget( + packageJSONUrl, + target, + bestMatchSubpath, + bestMatch, + base, + true, + true, + conditions + ); + if (resolveResult != null) { + return resolveResult; + } + } + } + } + } + throwImportNotDefined(name, packageJSONUrl, base); +} + +const flagSymbol = Symbol('arg flag'); + +class ArgError extends Error { + constructor(msg, code) { + super(msg); + this.name = 'ArgError'; + this.code = code; + + Object.setPrototypeOf(this, ArgError.prototype); + } +} + +function arg( + opts, + { + argv = process.argv.slice(2), + permissive = false, + stopAtPositional = false + } = {} +) { + if (!opts) { + throw new ArgError( + 'argument specification object is required', + 'ARG_CONFIG_NO_SPEC' + ); + } + + const result = { _: [] }; + + const aliases = {}; + const handlers = {}; + + for (const key of Object.keys(opts)) { + if (!key) { + throw new ArgError( + 'argument key cannot be an empty string', + 'ARG_CONFIG_EMPTY_KEY' + ); + } + + if (key[0] !== '-') { + throw new ArgError( + `argument key must start with '-' but found: '${key}'`, + 'ARG_CONFIG_NONOPT_KEY' + ); + } + + if (key.length === 1) { + throw new ArgError( + `argument key must have a name; singular '-' keys are not allowed: ${key}`, + 'ARG_CONFIG_NONAME_KEY' + ); + } + + if (typeof opts[key] === 'string') { + aliases[key] = opts[key]; + continue; + } + + let type = opts[key]; + let isFlag = false; + + if ( + Array.isArray(type) && + type.length === 1 && + typeof type[0] === 'function' + ) { + const [fn] = type; + type = (value, name, prev = []) => { + prev.push(fn(value, name, prev[prev.length - 1])); + return prev; + }; + isFlag = fn === Boolean || fn[flagSymbol] === true; + } else if (typeof type === 'function') { + isFlag = type === Boolean || type[flagSymbol] === true; + } else { + throw new ArgError( + `type missing or not a function or valid array type: ${key}`, + 'ARG_CONFIG_VAD_TYPE' + ); + } + + if (key[1] !== '-' && key.length > 2) { + throw new ArgError( + `short argument keys (with a single hyphen) must have only one character: ${key}`, + 'ARG_CONFIG_SHORTOPT_TOOLONG' + ); + } + + handlers[key] = [type, isFlag]; + } + + for (let i = 0, len = argv.length; i < len; i++) { + const wholeArg = argv[i]; + + if (stopAtPositional && result._.length > 0) { + result._ = result._.concat(argv.slice(i)); + break; + } + + if (wholeArg === '--') { + result._ = result._.concat(argv.slice(i + 1)); + break; + } + + if (wholeArg.length > 1 && wholeArg[0] === '-') { + /* eslint-disable operator-linebreak */ + const separatedArguments = + wholeArg[1] === '-' || wholeArg.length === 2 + ? [wholeArg] + : wholeArg + .slice(1) + .split('') + .map((a) => `-${a}`); + /* eslint-enable operator-linebreak */ + + for (let j = 0; j < separatedArguments.length; j++) { + const arg = separatedArguments[j]; + const [originalArgName, argStr] = + arg[1] === '-' ? arg.split(/=(.*)/, 2) : [arg, undefined]; + + let argName = originalArgName; + while (argName in aliases) { + argName = aliases[argName]; + } + + if (!(argName in handlers)) { + if (permissive) { + result._.push(arg); + continue; + } else { + throw new ArgError( + `unknown or unexpected option: ${originalArgName}`, + 'ARG_UNKNOWN_OPTION' + ); + } + } + + const [type, isFlag] = handlers[argName]; + + if (!isFlag && j + 1 < separatedArguments.length) { + throw new ArgError( + `option requires argument (but was followed by another short argument): ${originalArgName}`, + 'ARG_MISSING_REQUIRED_SHORTARG' + ); + } + + if (isFlag) { + result[argName] = type(true, argName, result[argName]); + } else if (argStr === undefined) { + if ( + argv.length < i + 2 || + (argv[i + 1].length > 1 && + argv[i + 1][0] === '-' && + !( + argv[i + 1].match(/^-?\d*(\.(?=\d))?\d*$/) && + (type === Number || + // eslint-disable-next-line no-undef + (typeof BigInt !== 'undefined' && type === BigInt)) + )) + ) { + const extended = + originalArgName === argName ? '' : ` (alias for ${argName})`; + throw new ArgError( + `option requires argument: ${originalArgName}${extended}`, + 'ARG_MISSING_REQUIRED_LONGARG' + ); + } + + result[argName] = type(argv[i + 1], argName, result[argName]); + ++i; + } else { + result[argName] = type(argStr, argName, result[argName]); + } + } + } else { + result._.push(wholeArg); + } + } + + return result; +} + +arg.flag = (fn) => { + fn[flagSymbol] = true; + return fn; +}; + +// Utility types +arg.COUNT = arg.flag((v, name, existingCount) => (existingCount || 0) + 1); + +// Expose error class +arg.ArgError = ArgError; + +var arg_1 = arg; + +/** + @license + The MIT License (MIT) + + Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ +function getOptionValue(opt) { + parseOptions(); + return options[opt]; +} +let options; +function parseOptions() { + if (!options) { + options = { + "--conditions": [], + ...parseArgv(getNodeOptionsEnvArgv()), + ...parseArgv(process.execArgv) + }; + } +} +function parseArgv(argv) { + return arg_1( + { + "--conditions": [String], + "-C": "--conditions" + }, + { + argv, + permissive: true + } + ); +} +function getNodeOptionsEnvArgv() { + const errors = []; + const envArgv = ParseNodeOptionsEnvVar(process.env.NODE_OPTIONS || "", errors); + if (errors.length !== 0) ; + return envArgv; +} +function ParseNodeOptionsEnvVar(node_options, errors) { + const env_argv = []; + let is_in_string = false; + let will_start_new_arg = true; + for (let index = 0; index < node_options.length; ++index) { + let c = node_options[index]; + if (c === "\\" && is_in_string) { + if (index + 1 === node_options.length) { + errors.push("invalid value for NODE_OPTIONS (invalid escape)\n"); + return env_argv; + } else { + c = node_options[++index]; + } + } else if (c === " " && !is_in_string) { + will_start_new_arg = true; + continue; + } else if (c === '"') { + is_in_string = !is_in_string; + continue; + } + if (will_start_new_arg) { + env_argv.push(c); + will_start_new_arg = false; + } else { + env_argv[env_argv.length - 1] += c; + } + } + if (is_in_string) { + errors.push("invalid value for NODE_OPTIONS (unterminated string)\n"); + } + return env_argv; +} + +function makeApi(runtimeState, opts) { + const alwaysWarnOnFallback = Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK) > 0; + const debugLevel = Number(process.env.PNP_DEBUG_LEVEL); + const pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/; + const isStrictRegExp = /^(\/|\.{1,2}(\/|$))/; + const isDirRegExp = /\/$/; + const isRelativeRegexp = /^\.{0,2}\//; + const topLevelLocator = { name: null, reference: null }; + const fallbackLocators = []; + const emittedWarnings = /* @__PURE__ */ new Set(); + if (runtimeState.enableTopLevelFallback === true) + fallbackLocators.push(topLevelLocator); + if (opts.compatibilityMode !== false) { + for (const name of [`react-scripts`, `gatsby`]) { + const packageStore = runtimeState.packageRegistry.get(name); + if (packageStore) { + for (const reference of packageStore.keys()) { + if (reference === null) { + throw new Error(`Assertion failed: This reference shouldn't be null`); + } else { + fallbackLocators.push({ name, reference }); + } + } + } + } + } + const { + ignorePattern, + packageRegistry, + packageLocatorsByLocations + } = runtimeState; + function makeLogEntry(name, args) { + return { + fn: name, + args, + error: null, + result: null + }; + } + function trace(entry) { + const colors = process.stderr?.hasColors?.() ?? process.stdout.isTTY; + const c = (n, str) => `\x1B[${n}m${str}\x1B[0m`; + const error = entry.error; + if (error) + console.error(c(`31;1`, `\u2716 ${entry.error?.message.replace(/\n.*/s, ``)}`)); + else + console.error(c(`33;1`, `\u203C Resolution`)); + if (entry.args.length > 0) + console.error(); + for (const arg of entry.args) + console.error(` ${c(`37;1`, `In \u2190`)} ${nodeUtils.inspect(arg, { colors, compact: true })}`); + if (entry.result) { + console.error(); + console.error(` ${c(`37;1`, `Out \u2192`)} ${nodeUtils.inspect(entry.result, { colors, compact: true })}`); + } + const stack = new Error().stack.match(/(?<=^ +)at.*/gm)?.slice(2) ?? []; + if (stack.length > 0) { + console.error(); + for (const line of stack) { + console.error(` ${c(`38;5;244`, line)}`); + } + } + console.error(); + } + function maybeLog(name, fn) { + if (opts.allowDebug === false) + return fn; + if (Number.isFinite(debugLevel)) { + if (debugLevel >= 2) { + return (...args) => { + const logEntry = makeLogEntry(name, args); + try { + return logEntry.result = fn(...args); + } catch (error) { + throw logEntry.error = error; + } finally { + trace(logEntry); + } + }; + } else if (debugLevel >= 1) { + return (...args) => { + try { + return fn(...args); + } catch (error) { + const logEntry = makeLogEntry(name, args); + logEntry.error = error; + trace(logEntry); + throw error; + } + }; + } + } + return fn; + } + function getPackageInformationSafe(packageLocator) { + const packageInformation = getPackageInformation(packageLocator); + if (!packageInformation) { + throw makeError( + ErrorCode.INTERNAL, + `Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)` + ); + } + return packageInformation; + } + function isDependencyTreeRoot(packageLocator) { + if (packageLocator.name === null) + return true; + for (const dependencyTreeRoot of runtimeState.dependencyTreeRoots) + if (dependencyTreeRoot.name === packageLocator.name && dependencyTreeRoot.reference === packageLocator.reference) + return true; + return false; + } + const defaultExportsConditions = /* @__PURE__ */ new Set([ + `node`, + `require`, + ...getOptionValue(`--conditions`) + ]); + function applyNodeExportsResolution(unqualifiedPath, conditions = defaultExportsConditions, issuer) { + const locator = findPackageLocator(ppath.join(unqualifiedPath, `internal.js`), { + resolveIgnored: true, + includeDiscardFromLookup: true + }); + if (locator === null) { + throw makeError( + ErrorCode.INTERNAL, + `The locator that owns the "${unqualifiedPath}" path can't be found inside the dependency tree (this is probably an internal error)` + ); + } + const { packageLocation } = getPackageInformationSafe(locator); + const manifestPath = ppath.join(packageLocation, Filename.manifest); + if (!opts.fakeFs.existsSync(manifestPath)) + return null; + const pkgJson = JSON.parse(opts.fakeFs.readFileSync(manifestPath, `utf8`)); + if (pkgJson.exports == null) + return null; + let subpath = ppath.contains(packageLocation, unqualifiedPath); + if (subpath === null) { + throw makeError( + ErrorCode.INTERNAL, + `unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)` + ); + } + if (subpath !== `.` && !isRelativeRegexp.test(subpath)) + subpath = `./${subpath}`; + try { + const resolvedExport = packageExportsResolve({ + packageJSONUrl: url.pathToFileURL(npath.fromPortablePath(manifestPath)), + packageSubpath: subpath, + exports: pkgJson.exports, + base: issuer ? url.pathToFileURL(npath.fromPortablePath(issuer)) : null, + conditions + }); + return npath.toPortablePath(url.fileURLToPath(resolvedExport)); + } catch (error) { + throw makeError( + ErrorCode.EXPORTS_RESOLUTION_FAILED, + error.message, + { unqualifiedPath: getPathForDisplay(unqualifiedPath), locator, pkgJson, subpath: getPathForDisplay(subpath), conditions }, + error.code + ); + } + } + function applyNodeExtensionResolution(unqualifiedPath, candidates, { extensions }) { + let stat; + try { + candidates.push(unqualifiedPath); + stat = opts.fakeFs.statSync(unqualifiedPath); + } catch { + } + if (stat && !stat.isDirectory()) + return opts.fakeFs.realpathSync(unqualifiedPath); + if (stat && stat.isDirectory()) { + let pkgJson; + try { + pkgJson = JSON.parse(opts.fakeFs.readFileSync(ppath.join(unqualifiedPath, Filename.manifest), `utf8`)); + } catch { + } + let nextUnqualifiedPath; + if (pkgJson && pkgJson.main) + nextUnqualifiedPath = ppath.resolve(unqualifiedPath, pkgJson.main); + if (nextUnqualifiedPath && nextUnqualifiedPath !== unqualifiedPath) { + const resolution = applyNodeExtensionResolution(nextUnqualifiedPath, candidates, { extensions }); + if (resolution !== null) { + return resolution; + } + } + } + for (let i = 0, length = extensions.length; i < length; i++) { + const candidateFile = `${unqualifiedPath}${extensions[i]}`; + candidates.push(candidateFile); + if (opts.fakeFs.existsSync(candidateFile)) { + return candidateFile; + } + } + if (stat && stat.isDirectory()) { + for (let i = 0, length = extensions.length; i < length; i++) { + const candidateFile = ppath.format({ dir: unqualifiedPath, name: `index`, ext: extensions[i] }); + candidates.push(candidateFile); + if (opts.fakeFs.existsSync(candidateFile)) { + return candidateFile; + } + } + } + return null; + } + function makeFakeModule(path) { + const fakeModule = new require$$0.Module(path, null); + fakeModule.filename = path; + fakeModule.paths = require$$0.Module._nodeModulePaths(path); + return fakeModule; + } + function callNativeResolution(request, issuer) { + if (issuer.endsWith(`/`)) + issuer = ppath.join(issuer, `internal.js`); + return require$$0.Module._resolveFilename(npath.fromPortablePath(request), makeFakeModule(npath.fromPortablePath(issuer)), false, { plugnplay: false }); + } + function isPathIgnored(path) { + if (ignorePattern === null) + return false; + const subPath = ppath.contains(runtimeState.basePath, path); + if (subPath === null) + return false; + if (ignorePattern.test(subPath.replace(/\/$/, ``))) { + return true; + } else { + return false; + } + } + const VERSIONS = { std: 3, resolveVirtual: 1, getAllLocators: 1 }; + const topLevel = topLevelLocator; + function getPackageInformation({ name, reference }) { + const packageInformationStore = packageRegistry.get(name); + if (!packageInformationStore) + return null; + const packageInformation = packageInformationStore.get(reference); + if (!packageInformation) + return null; + return packageInformation; + } + function findPackageDependents({ name, reference }) { + const dependents = []; + for (const [dependentName, packageInformationStore] of packageRegistry) { + if (dependentName === null) + continue; + for (const [dependentReference, packageInformation] of packageInformationStore) { + if (dependentReference === null) + continue; + const dependencyReference = packageInformation.packageDependencies.get(name); + if (dependencyReference !== reference) + continue; + if (dependentName === name && dependentReference === reference) + continue; + dependents.push({ + name: dependentName, + reference: dependentReference + }); + } + } + return dependents; + } + function findBrokenPeerDependencies(dependency, initialPackage) { + const brokenPackages = /* @__PURE__ */ new Map(); + const alreadyVisited = /* @__PURE__ */ new Set(); + const traversal = (currentPackage) => { + const identifier = JSON.stringify(currentPackage.name); + if (alreadyVisited.has(identifier)) + return; + alreadyVisited.add(identifier); + const dependents = findPackageDependents(currentPackage); + for (const dependent of dependents) { + const dependentInformation = getPackageInformationSafe(dependent); + if (dependentInformation.packagePeers.has(dependency)) { + traversal(dependent); + } else { + let brokenSet = brokenPackages.get(dependent.name); + if (typeof brokenSet === `undefined`) + brokenPackages.set(dependent.name, brokenSet = /* @__PURE__ */ new Set()); + brokenSet.add(dependent.reference); + } + } + }; + traversal(initialPackage); + const brokenList = []; + for (const name of [...brokenPackages.keys()].sort()) + for (const reference of [...brokenPackages.get(name)].sort()) + brokenList.push({ name, reference }); + return brokenList; + } + function findPackageLocator(location, { resolveIgnored = false, includeDiscardFromLookup = false } = {}) { + if (isPathIgnored(location) && !resolveIgnored) + return null; + let relativeLocation = ppath.relative(runtimeState.basePath, location); + if (!relativeLocation.match(isStrictRegExp)) + relativeLocation = `./${relativeLocation}`; + if (!relativeLocation.endsWith(`/`)) + relativeLocation = `${relativeLocation}/`; + do { + const entry = packageLocatorsByLocations.get(relativeLocation); + if (typeof entry === `undefined` || entry.discardFromLookup && !includeDiscardFromLookup) { + relativeLocation = relativeLocation.substring(0, relativeLocation.lastIndexOf(`/`, relativeLocation.length - 2) + 1); + continue; + } + return entry.locator; + } while (relativeLocation !== ``); + return null; + } + function tryReadFile(filePath) { + try { + return opts.fakeFs.readFileSync(npath.toPortablePath(filePath), `utf8`); + } catch (err) { + if (err.code === `ENOENT`) + return void 0; + throw err; + } + } + function resolveToUnqualified(request, issuer, { considerBuiltins = true } = {}) { + if (request.startsWith(`#`)) + throw new Error(`resolveToUnqualified can not handle private import mappings`); + if (request === `pnpapi`) + return npath.toPortablePath(opts.pnpapiResolution); + if (considerBuiltins && require$$0.isBuiltin(request)) + return null; + const requestForDisplay = getPathForDisplay(request); + const issuerForDisplay = issuer && getPathForDisplay(issuer); + if (issuer && isPathIgnored(issuer)) { + if (!ppath.isAbsolute(request) || findPackageLocator(request) === null) { + const result = callNativeResolution(request, issuer); + if (result === false) { + throw makeError( + ErrorCode.BUILTIN_NODE_RESOLUTION_FAILED, + `The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp) + +Require request: "${requestForDisplay}" +Required by: ${issuerForDisplay} +`, + { request: requestForDisplay, issuer: issuerForDisplay } + ); + } + return npath.toPortablePath(result); + } + } + let unqualifiedPath; + const dependencyNameMatch = request.match(pathRegExp); + if (!dependencyNameMatch) { + if (ppath.isAbsolute(request)) { + unqualifiedPath = ppath.normalize(request); + } else { + if (!issuer) { + throw makeError( + ErrorCode.API_ERROR, + `The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute`, + { request: requestForDisplay, issuer: issuerForDisplay } + ); + } + const absoluteIssuer = ppath.resolve(issuer); + if (issuer.match(isDirRegExp)) { + unqualifiedPath = ppath.normalize(ppath.join(absoluteIssuer, request)); + } else { + unqualifiedPath = ppath.normalize(ppath.join(ppath.dirname(absoluteIssuer), request)); + } + } + } else { + if (!issuer) { + throw makeError( + ErrorCode.API_ERROR, + `The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute`, + { request: requestForDisplay, issuer: issuerForDisplay } + ); + } + const [, dependencyName, subPath] = dependencyNameMatch; + const issuerLocator = findPackageLocator(issuer); + if (!issuerLocator) { + const result = callNativeResolution(request, issuer); + if (result === false) { + throw makeError( + ErrorCode.BUILTIN_NODE_RESOLUTION_FAILED, + `The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree). + +Require path: "${requestForDisplay}" +Required by: ${issuerForDisplay} +`, + { request: requestForDisplay, issuer: issuerForDisplay } + ); + } + return npath.toPortablePath(result); + } + const issuerInformation = getPackageInformationSafe(issuerLocator); + let dependencyReference = issuerInformation.packageDependencies.get(dependencyName); + let fallbackReference = null; + if (dependencyReference == null) { + if (issuerLocator.name !== null) { + const exclusionEntry = runtimeState.fallbackExclusionList.get(issuerLocator.name); + const canUseFallbacks = !exclusionEntry || !exclusionEntry.has(issuerLocator.reference); + if (canUseFallbacks) { + for (let t = 0, T = fallbackLocators.length; t < T; ++t) { + const fallbackInformation = getPackageInformationSafe(fallbackLocators[t]); + const reference = fallbackInformation.packageDependencies.get(dependencyName); + if (reference == null) + continue; + if (alwaysWarnOnFallback) + fallbackReference = reference; + else + dependencyReference = reference; + break; + } + if (runtimeState.enableTopLevelFallback) { + if (dependencyReference == null && fallbackReference === null) { + const reference = runtimeState.fallbackPool.get(dependencyName); + if (reference != null) { + fallbackReference = reference; + } + } + } + } + } + } + let error = null; + if (dependencyReference === null) { + if (isDependencyTreeRoot(issuerLocator)) { + error = makeError( + ErrorCode.MISSING_PEER_DEPENDENCY, + `Your application tried to access ${dependencyName} (a peer dependency); this isn't allowed as there is no ancestor to satisfy the requirement. Use a devDependency if needed. + +Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerForDisplay} +`, + { request: requestForDisplay, issuer: issuerForDisplay, dependencyName } + ); + } else { + const brokenAncestors = findBrokenPeerDependencies(dependencyName, issuerLocator); + if (brokenAncestors.every((ancestor) => isDependencyTreeRoot(ancestor))) { + error = makeError( + ErrorCode.MISSING_PEER_DEPENDENCY, + `${issuerLocator.name} tried to access ${dependencyName} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound. + +Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay}) +${brokenAncestors.map((ancestorLocator) => `Ancestor breaking the chain: ${ancestorLocator.name}@${ancestorLocator.reference} +`).join(``)} +`, + { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName, brokenAncestors } + ); + } else { + error = makeError( + ErrorCode.MISSING_PEER_DEPENDENCY, + `${issuerLocator.name} tried to access ${dependencyName} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound. + +Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay}) + +${brokenAncestors.map((ancestorLocator) => `Ancestor breaking the chain: ${ancestorLocator.name}@${ancestorLocator.reference} +`).join(``)} +`, + { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName, brokenAncestors } + ); + } + } + } else if (dependencyReference === void 0) { + if (!considerBuiltins && require$$0.isBuiltin(request)) { + if (isDependencyTreeRoot(issuerLocator)) { + error = makeError( + ErrorCode.UNDECLARED_DEPENDENCY, + `Your application tried to access ${dependencyName}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${dependencyName} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound. + +Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerForDisplay} +`, + { request: requestForDisplay, issuer: issuerForDisplay, dependencyName } + ); + } else { + error = makeError( + ErrorCode.UNDECLARED_DEPENDENCY, + `${issuerLocator.name} tried to access ${dependencyName}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${dependencyName} isn't otherwise declared in ${issuerLocator.name}'s dependencies, this makes the require call ambiguous and unsound. + +Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerForDisplay} +`, + { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName } + ); + } + } else { + if (isDependencyTreeRoot(issuerLocator)) { + error = makeError( + ErrorCode.UNDECLARED_DEPENDENCY, + `Your application tried to access ${dependencyName}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound. + +Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerForDisplay} +`, + { request: requestForDisplay, issuer: issuerForDisplay, dependencyName } + ); + } else { + error = makeError( + ErrorCode.UNDECLARED_DEPENDENCY, + `${issuerLocator.name} tried to access ${dependencyName}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound. + +Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay}) +`, + { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName } + ); + } + } + } + if (dependencyReference == null) { + if (fallbackReference === null || error === null) + throw error || new Error(`Assertion failed: Expected an error to have been set`); + dependencyReference = fallbackReference; + const message = error.message.replace(/\n.*/g, ``); + error.message = message; + if (!emittedWarnings.has(message) && debugLevel !== 0) { + emittedWarnings.add(message); + process.emitWarning(error); + } + } + const dependencyLocator = Array.isArray(dependencyReference) ? { name: dependencyReference[0], reference: dependencyReference[1] } : { name: dependencyName, reference: dependencyReference }; + const dependencyInformation = getPackageInformationSafe(dependencyLocator); + if (!dependencyInformation.packageLocation) { + throw makeError( + ErrorCode.MISSING_DEPENDENCY, + `A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod. + +Required package: ${dependencyLocator.name}@${dependencyLocator.reference}${dependencyLocator.name !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay}) +`, + { request: requestForDisplay, issuer: issuerForDisplay, dependencyLocator: Object.assign({}, dependencyLocator) } + ); + } + const dependencyLocation = dependencyInformation.packageLocation; + if (subPath) { + unqualifiedPath = ppath.join(dependencyLocation, subPath); + } else { + unqualifiedPath = dependencyLocation; + } + } + return ppath.normalize(unqualifiedPath); + } + function resolveUnqualifiedExport(request, unqualifiedPath, conditions = defaultExportsConditions, issuer) { + if (isStrictRegExp.test(request)) + return unqualifiedPath; + const unqualifiedExportPath = applyNodeExportsResolution(unqualifiedPath, conditions, issuer); + if (unqualifiedExportPath) { + return ppath.normalize(unqualifiedExportPath); + } else { + return unqualifiedPath; + } + } + function resolveUnqualified(unqualifiedPath, { extensions = Object.keys(require$$0.Module._extensions) } = {}) { + const candidates = []; + const qualifiedPath = applyNodeExtensionResolution(unqualifiedPath, candidates, { extensions }); + if (qualifiedPath) { + return ppath.normalize(qualifiedPath); + } else { + reportRequiredFilesToWatchMode(candidates.map((candidate) => npath.fromPortablePath(candidate))); + const unqualifiedPathForDisplay = getPathForDisplay(unqualifiedPath); + const containingPackage = findPackageLocator(unqualifiedPath); + if (containingPackage) { + const { packageLocation } = getPackageInformationSafe(containingPackage); + let exists = true; + try { + opts.fakeFs.accessSync(packageLocation); + } catch (err) { + if (err?.code === `ENOENT`) { + exists = false; + } else { + const readableError = (err?.message ?? err ?? `empty exception thrown`).replace(/^[A-Z]/, ($0) => $0.toLowerCase()); + throw makeError(ErrorCode.QUALIFIED_PATH_RESOLUTION_FAILED, `Required package exists but could not be accessed (${readableError}). + +Missing package: ${containingPackage.name}@${containingPackage.reference} +Expected package location: ${getPathForDisplay(packageLocation)} +`, { unqualifiedPath: unqualifiedPathForDisplay, extensions }); + } + } + if (!exists) { + const errorMessage = packageLocation.includes(`/unplugged/`) ? `Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).` : `Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.`; + throw makeError( + ErrorCode.QUALIFIED_PATH_RESOLUTION_FAILED, + `${errorMessage} + +Missing package: ${containingPackage.name}@${containingPackage.reference} +Expected package location: ${getPathForDisplay(packageLocation)} +`, + { unqualifiedPath: unqualifiedPathForDisplay, extensions } + ); + } + } + throw makeError( + ErrorCode.QUALIFIED_PATH_RESOLUTION_FAILED, + `Qualified path resolution failed: we looked for the following paths, but none could be accessed. + +Source path: ${unqualifiedPathForDisplay} +${candidates.map((candidate) => `Not found: ${getPathForDisplay(candidate)} +`).join(``)}`, + { unqualifiedPath: unqualifiedPathForDisplay, extensions } + ); + } + } + function resolvePrivateRequest(request, issuer, opts2) { + if (!issuer) + throw new Error(`Assertion failed: An issuer is required to resolve private import mappings`); + const resolved = packageImportsResolve({ + name: request, + base: url.pathToFileURL(npath.fromPortablePath(issuer)), + conditions: opts2.conditions ?? defaultExportsConditions, + readFileSyncFn: tryReadFile + }); + if (resolved instanceof URL) { + return resolveUnqualified(npath.toPortablePath(url.fileURLToPath(resolved)), { extensions: opts2.extensions }); + } else { + if (resolved.startsWith(`#`)) + throw new Error(`Mapping from one private import to another isn't allowed`); + return resolveRequest(resolved, issuer, opts2); + } + } + function resolveRequest(request, issuer, opts2 = {}) { + try { + if (request.startsWith(`#`)) + return resolvePrivateRequest(request, issuer, opts2); + const { considerBuiltins, extensions, conditions } = opts2; + const unqualifiedPath = resolveToUnqualified(request, issuer, { considerBuiltins }); + if (request === `pnpapi`) + return unqualifiedPath; + if (unqualifiedPath === null) + return null; + const isIssuerIgnored = () => issuer !== null ? isPathIgnored(issuer) : false; + const remappedPath = (!considerBuiltins || !require$$0.isBuiltin(request)) && !isIssuerIgnored() ? resolveUnqualifiedExport(request, unqualifiedPath, conditions, issuer) : unqualifiedPath; + return resolveUnqualified(remappedPath, { extensions }); + } catch (error) { + if (Object.hasOwn(error, `pnpCode`)) + Object.assign(error.data, { request: getPathForDisplay(request), issuer: issuer && getPathForDisplay(issuer) }); + throw error; + } + } + function resolveVirtual(request) { + const normalized = ppath.normalize(request); + const resolved = VirtualFS.resolveVirtual(normalized); + return resolved !== normalized ? resolved : null; + } + return { + VERSIONS, + topLevel, + getLocator: (name, referencish) => { + if (Array.isArray(referencish)) { + return { name: referencish[0], reference: referencish[1] }; + } else { + return { name, reference: referencish }; + } + }, + getDependencyTreeRoots: () => { + return [...runtimeState.dependencyTreeRoots]; + }, + getAllLocators() { + const locators = []; + for (const [name, entry] of packageRegistry) + for (const reference of entry.keys()) + if (name !== null && reference !== null) + locators.push({ name, reference }); + return locators; + }, + getPackageInformation: (locator) => { + const info = getPackageInformation(locator); + if (info === null) + return null; + const packageLocation = npath.fromPortablePath(info.packageLocation); + const nativeInfo = { ...info, packageLocation }; + return nativeInfo; + }, + findPackageLocator: (path) => { + return findPackageLocator(npath.toPortablePath(path)); + }, + resolveToUnqualified: maybeLog(`resolveToUnqualified`, (request, issuer, opts2) => { + const portableIssuer = issuer !== null ? npath.toPortablePath(issuer) : null; + const resolution = resolveToUnqualified(npath.toPortablePath(request), portableIssuer, opts2); + if (resolution === null) + return null; + return npath.fromPortablePath(resolution); + }), + resolveUnqualified: maybeLog(`resolveUnqualified`, (unqualifiedPath, opts2) => { + return npath.fromPortablePath(resolveUnqualified(npath.toPortablePath(unqualifiedPath), opts2)); + }), + resolveRequest: maybeLog(`resolveRequest`, (request, issuer, opts2) => { + const portableIssuer = issuer !== null ? npath.toPortablePath(issuer) : null; + const resolution = resolveRequest(npath.toPortablePath(request), portableIssuer, opts2); + if (resolution === null) + return null; + return npath.fromPortablePath(resolution); + }), + resolveVirtual: maybeLog(`resolveVirtual`, (path) => { + const result = resolveVirtual(npath.toPortablePath(path)); + if (result !== null) { + return npath.fromPortablePath(result); + } else { + return null; + } + }) + }; +} + +function makeManager(pnpapi, opts) { + const initialApiPath = npath.toPortablePath(pnpapi.resolveToUnqualified(`pnpapi`, null)); + const initialApiStats = opts.fakeFs.statSync(npath.toPortablePath(initialApiPath)); + const apiMetadata = /* @__PURE__ */ new Map([ + [initialApiPath, { + instance: pnpapi, + stats: initialApiStats, + lastRefreshCheck: Date.now() + }] + ]); + function loadApiInstance(pnpApiPath) { + const nativePath = npath.fromPortablePath(pnpApiPath); + const module = new require$$0.Module(nativePath, null); + module.load(nativePath); + return module.exports; + } + function refreshApiEntry(pnpApiPath, apiEntry) { + const timeNow = Date.now(); + if (timeNow - apiEntry.lastRefreshCheck < 500) + return; + apiEntry.lastRefreshCheck = timeNow; + const stats = opts.fakeFs.statSync(pnpApiPath); + if (stats.mtime > apiEntry.stats.mtime) { + process.emitWarning(`[Warning] The runtime detected new information in a PnP file; reloading the API instance (${npath.fromPortablePath(pnpApiPath)})`); + apiEntry.stats = stats; + apiEntry.instance = loadApiInstance(pnpApiPath); + } + } + function getApiEntry(pnpApiPath, refresh = false) { + let apiEntry = apiMetadata.get(pnpApiPath); + if (typeof apiEntry !== `undefined`) { + if (refresh) { + refreshApiEntry(pnpApiPath, apiEntry); + } + } else { + apiMetadata.set(pnpApiPath, apiEntry = { + instance: loadApiInstance(pnpApiPath), + stats: opts.fakeFs.statSync(pnpApiPath), + lastRefreshCheck: Date.now() + }); + } + return apiEntry; + } + const findApiPathCache = /* @__PURE__ */ new Map(); + function addToCacheAndReturn(start, end, target) { + if (target !== null) { + target = VirtualFS.resolveVirtual(target); + target = opts.fakeFs.realpathSync(target); + } + let curr; + let next = start; + do { + curr = next; + findApiPathCache.set(curr, target); + next = ppath.dirname(curr); + } while (curr !== end); + return target; + } + function findApiPathFor(modulePath) { + let bestCandidate = null; + for (const [apiPath, apiEntry] of apiMetadata) { + const locator = apiEntry.instance.findPackageLocator(modulePath); + if (!locator) + continue; + if (apiMetadata.size === 1) + return apiPath; + const packageInformation = apiEntry.instance.getPackageInformation(locator); + if (!packageInformation) + throw new Error(`Assertion failed: Couldn't get package information for '${modulePath}'`); + if (!bestCandidate) + bestCandidate = { packageLocation: packageInformation.packageLocation, apiPaths: [] }; + if (packageInformation.packageLocation === bestCandidate.packageLocation) { + bestCandidate.apiPaths.push(apiPath); + } else if (packageInformation.packageLocation.length > bestCandidate.packageLocation.length) { + bestCandidate = { packageLocation: packageInformation.packageLocation, apiPaths: [apiPath] }; + } + } + if (bestCandidate) { + if (bestCandidate.apiPaths.length === 1) + return bestCandidate.apiPaths[0]; + const controlSegment = bestCandidate.apiPaths.map((apiPath) => ` ${npath.fromPortablePath(apiPath)}`).join(` +`); + throw new Error(`Unable to locate pnpapi, the module '${modulePath}' is controlled by multiple pnpapi instances. +This is usually caused by using the global cache (enableGlobalCache: true) + +Controlled by: +${controlSegment} +`); + } + const start = ppath.resolve(npath.toPortablePath(modulePath)); + let curr; + let next = start; + do { + curr = next; + const cached = findApiPathCache.get(curr); + if (cached !== void 0) + return addToCacheAndReturn(start, curr, cached); + const cjsCandidate = ppath.join(curr, Filename.pnpCjs); + if (opts.fakeFs.existsSync(cjsCandidate) && opts.fakeFs.statSync(cjsCandidate).isFile()) + return addToCacheAndReturn(start, curr, cjsCandidate); + const legacyCjsCandidate = ppath.join(curr, Filename.pnpJs); + if (opts.fakeFs.existsSync(legacyCjsCandidate) && opts.fakeFs.statSync(legacyCjsCandidate).isFile()) + return addToCacheAndReturn(start, curr, legacyCjsCandidate); + next = ppath.dirname(curr); + } while (curr !== PortablePath.root); + return addToCacheAndReturn(start, curr, null); + } + const moduleToApiPathCache = /* @__PURE__ */ new WeakMap(); + function getApiPathFromParent(parent) { + if (parent == null) + return initialApiPath; + let apiPath = moduleToApiPathCache.get(parent); + if (typeof apiPath !== `undefined`) + return apiPath; + apiPath = parent.filename ? findApiPathFor(parent.filename) : null; + moduleToApiPathCache.set(parent, apiPath); + return apiPath; + } + return { + getApiPathFromParent, + findApiPathFor, + getApiEntry + }; +} + +const localFs = { ...fs__default.default }; +const nodeFs = new NodeFS(localFs); +const defaultRuntimeState = $$SETUP_STATE(hydrateRuntimeState); +const defaultPnpapiResolution = __filename; +const customZipImplementation = defaultRuntimeState.pnpZipBackend === `js` ? JsZipImpl : void 0; +const defaultFsLayer = new VirtualFS({ + baseFs: new ZipOpenFS({ + customZipImplementation, + baseFs: nodeFs, + maxOpenFiles: 80, + readOnlyArchives: true + }) +}); +class DynamicFS extends ProxiedFS { + baseFs = defaultFsLayer; + constructor() { + super(ppath); + } + mapToBase(p) { + return p; + } + mapFromBase(p) { + return p; + } +} +const dynamicFsLayer = new DynamicFS(); +let manager; +const defaultApi = Object.assign(makeApi(defaultRuntimeState, { + fakeFs: dynamicFsLayer, + pnpapiResolution: defaultPnpapiResolution +}), { + /** + * Can be used to generate a different API than the default one (for example + * to map it on `/` rather than the local directory path, or to use a + * different FS layer than the default one). + */ + makeApi: ({ + basePath = void 0, + fakeFs = dynamicFsLayer, + pnpapiResolution = defaultPnpapiResolution, + ...rest + }) => { + const apiRuntimeState = typeof basePath !== `undefined` ? $$SETUP_STATE(hydrateRuntimeState, basePath) : defaultRuntimeState; + return makeApi(apiRuntimeState, { + fakeFs, + pnpapiResolution, + ...rest + }); + }, + /** + * Will inject the specified API into the environment, monkey-patching FS. Is + * automatically called when the hook is loaded through `--require`. + */ + setup: (api) => { + applyPatch(api || defaultApi, { + fakeFs: defaultFsLayer, + manager + }); + dynamicFsLayer.baseFs = new NodeFS(fs__default.default); + } +}); +manager = makeManager(defaultApi, { + fakeFs: dynamicFsLayer +}); +if (module.parent && module.parent.id === `internal/preload`) { + defaultApi.setup(); + if (module.filename) { + delete require$$0__default.default._cache[module.filename]; + } +} +if (process.mainModule === module) { + const reportError = (code, message, data) => { + process.stdout.write(`${JSON.stringify([{ code, message, data }, null])} +`); + }; + const reportSuccess = (resolution) => { + process.stdout.write(`${JSON.stringify([null, resolution])} +`); + }; + const processResolution = (request, issuer) => { + try { + reportSuccess(defaultApi.resolveRequest(request, issuer)); + } catch (error) { + reportError(error.code, error.message, error.data); + } + }; + const processRequest = (data) => { + try { + const [request, issuer] = JSON.parse(data); + processResolution(request, issuer); + } catch (error) { + reportError(`INVALID_JSON`, error.message, error.data); + } + }; + if (process.argv.length > 2) { + if (process.argv.length !== 4) { + process.stderr.write(`Usage: ${process.argv[0]} ${process.argv[1]} +`); + process.exitCode = 64; + } else { + processResolution(process.argv[2], process.argv[3]); + } + } else { + let buffer = ``; + const decoder = new StringDecoder__default.default.StringDecoder(); + process.stdin.on(`data`, (chunk) => { + buffer += decoder.write(chunk); + do { + const index = buffer.indexOf(` +`); + if (index === -1) + break; + const line = buffer.slice(0, index); + buffer = buffer.slice(index + 1); + processRequest(line); + } while (true); + }); + } +} + +module.exports = defaultApi; diff --git a/rpgsaga/.pnp.loader.mjs b/rpgsaga/.pnp.loader.mjs new file mode 100644 index 0000000..2d5a584 --- /dev/null +++ b/rpgsaga/.pnp.loader.mjs @@ -0,0 +1,2126 @@ +/* eslint-disable */ +// @ts-nocheck + +import fs from 'fs'; +import { URL as URL$1, fileURLToPath, pathToFileURL } from 'url'; +import path from 'path'; +import { createHash } from 'crypto'; +import { EOL } from 'os'; +import esmModule, { createRequire, isBuiltin } from 'module'; +import assert from 'assert'; + +const SAFE_TIME = 456789e3; + +const PortablePath = { + root: `/`, + dot: `.`, + parent: `..` +}; +const npath = Object.create(path); +const ppath = Object.create(path.posix); +npath.cwd = () => process.cwd(); +ppath.cwd = process.platform === `win32` ? () => toPortablePath(process.cwd()) : process.cwd; +if (process.platform === `win32`) { + ppath.resolve = (...segments) => { + if (segments.length > 0 && ppath.isAbsolute(segments[0])) { + return path.posix.resolve(...segments); + } else { + return path.posix.resolve(ppath.cwd(), ...segments); + } + }; +} +const contains = function(pathUtils, from, to) { + from = pathUtils.normalize(from); + to = pathUtils.normalize(to); + if (from === to) + return `.`; + if (!from.endsWith(pathUtils.sep)) + from = from + pathUtils.sep; + if (to.startsWith(from)) { + return to.slice(from.length); + } else { + return null; + } +}; +npath.contains = (from, to) => contains(npath, from, to); +ppath.contains = (from, to) => contains(ppath, from, to); +const WINDOWS_PATH_REGEXP = /^([a-zA-Z]:.*)$/; +const UNC_WINDOWS_PATH_REGEXP = /^\/\/(\.\/)?(.*)$/; +const PORTABLE_PATH_REGEXP = /^\/([a-zA-Z]:.*)$/; +const UNC_PORTABLE_PATH_REGEXP = /^\/unc\/(\.dot\/)?(.*)$/; +function fromPortablePathWin32(p) { + let portablePathMatch, uncPortablePathMatch; + if (portablePathMatch = p.match(PORTABLE_PATH_REGEXP)) + p = portablePathMatch[1]; + else if (uncPortablePathMatch = p.match(UNC_PORTABLE_PATH_REGEXP)) + p = `\\\\${uncPortablePathMatch[1] ? `.\\` : ``}${uncPortablePathMatch[2]}`; + else + return p; + return p.replace(/\//g, `\\`); +} +function toPortablePathWin32(p) { + p = p.replace(/\\/g, `/`); + let windowsPathMatch, uncWindowsPathMatch; + if (windowsPathMatch = p.match(WINDOWS_PATH_REGEXP)) + p = `/${windowsPathMatch[1]}`; + else if (uncWindowsPathMatch = p.match(UNC_WINDOWS_PATH_REGEXP)) + p = `/unc/${uncWindowsPathMatch[1] ? `.dot/` : ``}${uncWindowsPathMatch[2]}`; + return p; +} +const toPortablePath = process.platform === `win32` ? toPortablePathWin32 : (p) => p; +const fromPortablePath = process.platform === `win32` ? fromPortablePathWin32 : (p) => p; +npath.fromPortablePath = fromPortablePath; +npath.toPortablePath = toPortablePath; +function convertPath(targetPathUtils, sourcePath) { + return targetPathUtils === npath ? fromPortablePath(sourcePath) : toPortablePath(sourcePath); +} + +const defaultTime = new Date(SAFE_TIME * 1e3); +const defaultTimeMs = defaultTime.getTime(); +async function copyPromise(destinationFs, destination, sourceFs, source, opts) { + const normalizedDestination = destinationFs.pathUtils.normalize(destination); + const normalizedSource = sourceFs.pathUtils.normalize(source); + const prelayout = []; + const postlayout = []; + const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : await sourceFs.lstatPromise(normalizedSource); + await destinationFs.mkdirpPromise(destinationFs.pathUtils.dirname(destination), { utimes: [atime, mtime] }); + await copyImpl(prelayout, postlayout, destinationFs, normalizedDestination, sourceFs, normalizedSource, { ...opts, didParentExist: true }); + for (const operation of prelayout) + await operation(); + await Promise.all(postlayout.map((operation) => { + return operation(); + })); +} +async function copyImpl(prelayout, postlayout, destinationFs, destination, sourceFs, source, opts) { + const destinationStat = opts.didParentExist ? await maybeLStat(destinationFs, destination) : null; + const sourceStat = await sourceFs.lstatPromise(source); + const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : sourceStat; + let updated; + switch (true) { + case sourceStat.isDirectory(): + { + updated = await copyFolder(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); + } + break; + case sourceStat.isFile(): + { + updated = await copyFile(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); + } + break; + case sourceStat.isSymbolicLink(): + { + updated = await copySymlink(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); + } + break; + default: { + throw new Error(`Unsupported file type (${sourceStat.mode})`); + } + } + if (opts.linkStrategy?.type !== `HardlinkFromIndex` || !sourceStat.isFile()) { + if (updated || destinationStat?.mtime?.getTime() !== mtime.getTime() || destinationStat?.atime?.getTime() !== atime.getTime()) { + postlayout.push(() => destinationFs.lutimesPromise(destination, atime, mtime)); + updated = true; + } + if (destinationStat === null || (destinationStat.mode & 511) !== (sourceStat.mode & 511)) { + postlayout.push(() => destinationFs.chmodPromise(destination, sourceStat.mode & 511)); + updated = true; + } + } + return updated; +} +async function maybeLStat(baseFs, p) { + try { + return await baseFs.lstatPromise(p); + } catch { + return null; + } +} +async function copyFolder(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { + if (destinationStat !== null && !destinationStat.isDirectory()) { + if (opts.overwrite) { + prelayout.push(async () => destinationFs.removePromise(destination)); + destinationStat = null; + } else { + return false; + } + } + let updated = false; + if (destinationStat === null) { + prelayout.push(async () => { + try { + await destinationFs.mkdirPromise(destination, { mode: sourceStat.mode }); + } catch (err) { + if (err.code !== `EEXIST`) { + throw err; + } + } + }); + updated = true; + } + const entries = await sourceFs.readdirPromise(source); + const nextOpts = opts.didParentExist && !destinationStat ? { ...opts, didParentExist: false } : opts; + if (opts.stableSort) { + for (const entry of entries.sort()) { + if (await copyImpl(prelayout, postlayout, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts)) { + updated = true; + } + } + } else { + const entriesUpdateStatus = await Promise.all(entries.map(async (entry) => { + await copyImpl(prelayout, postlayout, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts); + })); + if (entriesUpdateStatus.some((status) => status)) { + updated = true; + } + } + return updated; +} +async function copyFileViaIndex(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts, linkStrategy) { + const sourceHash = await sourceFs.checksumFilePromise(source, { algorithm: `sha1` }); + const defaultMode = 420; + const sourceMode = sourceStat.mode & 511; + const indexFileName = `${sourceHash}${sourceMode !== defaultMode ? sourceMode.toString(8) : ``}`; + const indexPath = destinationFs.pathUtils.join(linkStrategy.indexPath, sourceHash.slice(0, 2), `${indexFileName}.dat`); + let AtomicBehavior; + ((AtomicBehavior2) => { + AtomicBehavior2[AtomicBehavior2["Lock"] = 0] = "Lock"; + AtomicBehavior2[AtomicBehavior2["Rename"] = 1] = "Rename"; + })(AtomicBehavior || (AtomicBehavior = {})); + let atomicBehavior = 1 /* Rename */; + let indexStat = await maybeLStat(destinationFs, indexPath); + if (destinationStat) { + const isDestinationHardlinkedFromIndex = indexStat && destinationStat.dev === indexStat.dev && destinationStat.ino === indexStat.ino; + const isIndexModified = indexStat?.mtimeMs !== defaultTimeMs; + if (isDestinationHardlinkedFromIndex) { + if (isIndexModified && linkStrategy.autoRepair) { + atomicBehavior = 0 /* Lock */; + indexStat = null; + } + } + if (!isDestinationHardlinkedFromIndex) { + if (opts.overwrite) { + prelayout.push(async () => destinationFs.removePromise(destination)); + destinationStat = null; + } else { + return false; + } + } + } + const tempPath = !indexStat && atomicBehavior === 1 /* Rename */ ? `${indexPath}.${Math.floor(Math.random() * 4294967296).toString(16).padStart(8, `0`)}` : null; + let tempPathCleaned = false; + prelayout.push(async () => { + if (!indexStat) { + if (atomicBehavior === 0 /* Lock */) { + await destinationFs.lockPromise(indexPath, async () => { + const content = await sourceFs.readFilePromise(source); + await destinationFs.writeFilePromise(indexPath, content); + }); + } + if (atomicBehavior === 1 /* Rename */ && tempPath) { + const content = await sourceFs.readFilePromise(source); + await destinationFs.writeFilePromise(tempPath, content); + try { + await destinationFs.linkPromise(tempPath, indexPath); + } catch (err) { + if (err.code === `EEXIST`) { + tempPathCleaned = true; + await destinationFs.unlinkPromise(tempPath); + } else { + throw err; + } + } + } + } + if (!destinationStat) { + await destinationFs.linkPromise(indexPath, destination); + } + }); + postlayout.push(async () => { + if (!indexStat) { + await destinationFs.lutimesPromise(indexPath, defaultTime, defaultTime); + if (sourceMode !== defaultMode) { + await destinationFs.chmodPromise(indexPath, sourceMode); + } + } + if (tempPath && !tempPathCleaned) { + await destinationFs.unlinkPromise(tempPath); + } + }); + return false; +} +async function copyFileDirect(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { + if (destinationStat !== null) { + if (opts.overwrite) { + prelayout.push(async () => destinationFs.removePromise(destination)); + destinationStat = null; + } else { + return false; + } + } + prelayout.push(async () => { + const content = await sourceFs.readFilePromise(source); + await destinationFs.writeFilePromise(destination, content); + }); + return true; +} +async function copyFile(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { + if (opts.linkStrategy?.type === `HardlinkFromIndex`) { + return copyFileViaIndex(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts, opts.linkStrategy); + } else { + return copyFileDirect(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); + } +} +async function copySymlink(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { + if (destinationStat !== null) { + if (opts.overwrite) { + prelayout.push(async () => destinationFs.removePromise(destination)); + destinationStat = null; + } else { + return false; + } + } + prelayout.push(async () => { + await destinationFs.symlinkPromise(convertPath(destinationFs.pathUtils, await sourceFs.readlinkPromise(source)), destination); + }); + return true; +} + +class FakeFS { + pathUtils; + constructor(pathUtils) { + this.pathUtils = pathUtils; + } + async *genTraversePromise(init, { stableSort = false } = {}) { + const stack = [init]; + while (stack.length > 0) { + const p = stack.shift(); + const entry = await this.lstatPromise(p); + if (entry.isDirectory()) { + const entries = await this.readdirPromise(p); + if (stableSort) { + for (const entry2 of entries.sort()) { + stack.push(this.pathUtils.join(p, entry2)); + } + } else { + throw new Error(`Not supported`); + } + } else { + yield p; + } + } + } + async checksumFilePromise(path, { algorithm = `sha512` } = {}) { + const fd = await this.openPromise(path, `r`); + try { + const CHUNK_SIZE = 65536; + const chunk = Buffer.allocUnsafeSlow(CHUNK_SIZE); + const hash = createHash(algorithm); + let bytesRead = 0; + while ((bytesRead = await this.readPromise(fd, chunk, 0, CHUNK_SIZE)) !== 0) + hash.update(bytesRead === CHUNK_SIZE ? chunk : chunk.slice(0, bytesRead)); + return hash.digest(`hex`); + } finally { + await this.closePromise(fd); + } + } + async removePromise(p, { recursive = true, maxRetries = 5 } = {}) { + let stat; + try { + stat = await this.lstatPromise(p); + } catch (error) { + if (error.code === `ENOENT`) { + return; + } else { + throw error; + } + } + if (stat.isDirectory()) { + if (recursive) { + const entries = await this.readdirPromise(p); + await Promise.all(entries.map((entry) => { + return this.removePromise(this.pathUtils.resolve(p, entry)); + })); + } + for (let t = 0; t <= maxRetries; t++) { + try { + await this.rmdirPromise(p); + break; + } catch (error) { + if (error.code !== `EBUSY` && error.code !== `ENOTEMPTY`) { + throw error; + } else if (t < maxRetries) { + await new Promise((resolve) => setTimeout(resolve, t * 100)); + } + } + } + } else { + await this.unlinkPromise(p); + } + } + removeSync(p, { recursive = true } = {}) { + let stat; + try { + stat = this.lstatSync(p); + } catch (error) { + if (error.code === `ENOENT`) { + return; + } else { + throw error; + } + } + if (stat.isDirectory()) { + if (recursive) + for (const entry of this.readdirSync(p)) + this.removeSync(this.pathUtils.resolve(p, entry)); + this.rmdirSync(p); + } else { + this.unlinkSync(p); + } + } + async mkdirpPromise(p, { chmod, utimes } = {}) { + p = this.resolve(p); + if (p === this.pathUtils.dirname(p)) + return void 0; + const parts = p.split(this.pathUtils.sep); + let createdDirectory; + for (let u = 2; u <= parts.length; ++u) { + const subPath = parts.slice(0, u).join(this.pathUtils.sep); + if (!this.existsSync(subPath)) { + try { + await this.mkdirPromise(subPath); + } catch (error) { + if (error.code === `EEXIST`) { + continue; + } else { + throw error; + } + } + createdDirectory ??= subPath; + if (chmod != null) + await this.chmodPromise(subPath, chmod); + if (utimes != null) { + await this.utimesPromise(subPath, utimes[0], utimes[1]); + } else { + const parentStat = await this.statPromise(this.pathUtils.dirname(subPath)); + await this.utimesPromise(subPath, parentStat.atime, parentStat.mtime); + } + } + } + return createdDirectory; + } + mkdirpSync(p, { chmod, utimes } = {}) { + p = this.resolve(p); + if (p === this.pathUtils.dirname(p)) + return void 0; + const parts = p.split(this.pathUtils.sep); + let createdDirectory; + for (let u = 2; u <= parts.length; ++u) { + const subPath = parts.slice(0, u).join(this.pathUtils.sep); + if (!this.existsSync(subPath)) { + try { + this.mkdirSync(subPath); + } catch (error) { + if (error.code === `EEXIST`) { + continue; + } else { + throw error; + } + } + createdDirectory ??= subPath; + if (chmod != null) + this.chmodSync(subPath, chmod); + if (utimes != null) { + this.utimesSync(subPath, utimes[0], utimes[1]); + } else { + const parentStat = this.statSync(this.pathUtils.dirname(subPath)); + this.utimesSync(subPath, parentStat.atime, parentStat.mtime); + } + } + } + return createdDirectory; + } + async copyPromise(destination, source, { baseFs = this, overwrite = true, stableSort = false, stableTime = false, linkStrategy = null } = {}) { + return await copyPromise(this, destination, baseFs, source, { overwrite, stableSort, stableTime, linkStrategy }); + } + copySync(destination, source, { baseFs = this, overwrite = true } = {}) { + const stat = baseFs.lstatSync(source); + const exists = this.existsSync(destination); + if (stat.isDirectory()) { + this.mkdirpSync(destination); + const directoryListing = baseFs.readdirSync(source); + for (const entry of directoryListing) { + this.copySync(this.pathUtils.join(destination, entry), baseFs.pathUtils.join(source, entry), { baseFs, overwrite }); + } + } else if (stat.isFile()) { + if (!exists || overwrite) { + if (exists) + this.removeSync(destination); + const content = baseFs.readFileSync(source); + this.writeFileSync(destination, content); + } + } else if (stat.isSymbolicLink()) { + if (!exists || overwrite) { + if (exists) + this.removeSync(destination); + const target = baseFs.readlinkSync(source); + this.symlinkSync(convertPath(this.pathUtils, target), destination); + } + } else { + throw new Error(`Unsupported file type (file: ${source}, mode: 0o${stat.mode.toString(8).padStart(6, `0`)})`); + } + const mode = stat.mode & 511; + this.chmodSync(destination, mode); + } + async changeFilePromise(p, content, opts = {}) { + if (Buffer.isBuffer(content)) { + return this.changeFileBufferPromise(p, content, opts); + } else { + return this.changeFileTextPromise(p, content, opts); + } + } + async changeFileBufferPromise(p, content, { mode } = {}) { + let current = Buffer.alloc(0); + try { + current = await this.readFilePromise(p); + } catch { + } + if (Buffer.compare(current, content) === 0) + return; + await this.writeFilePromise(p, content, { mode }); + } + async changeFileTextPromise(p, content, { automaticNewlines, mode } = {}) { + let current = ``; + try { + current = await this.readFilePromise(p, `utf8`); + } catch { + } + const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content; + if (current === normalizedContent) + return; + await this.writeFilePromise(p, normalizedContent, { mode }); + } + changeFileSync(p, content, opts = {}) { + if (Buffer.isBuffer(content)) { + return this.changeFileBufferSync(p, content, opts); + } else { + return this.changeFileTextSync(p, content, opts); + } + } + changeFileBufferSync(p, content, { mode } = {}) { + let current = Buffer.alloc(0); + try { + current = this.readFileSync(p); + } catch { + } + if (Buffer.compare(current, content) === 0) + return; + this.writeFileSync(p, content, { mode }); + } + changeFileTextSync(p, content, { automaticNewlines = false, mode } = {}) { + let current = ``; + try { + current = this.readFileSync(p, `utf8`); + } catch { + } + const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content; + if (current === normalizedContent) + return; + this.writeFileSync(p, normalizedContent, { mode }); + } + async movePromise(fromP, toP) { + try { + await this.renamePromise(fromP, toP); + } catch (error) { + if (error.code === `EXDEV`) { + await this.copyPromise(toP, fromP); + await this.removePromise(fromP); + } else { + throw error; + } + } + } + moveSync(fromP, toP) { + try { + this.renameSync(fromP, toP); + } catch (error) { + if (error.code === `EXDEV`) { + this.copySync(toP, fromP); + this.removeSync(fromP); + } else { + throw error; + } + } + } + async lockPromise(affectedPath, callback) { + const lockPath = `${affectedPath}.flock`; + const interval = 1e3 / 60; + const startTime = Date.now(); + let fd = null; + const isAlive = async () => { + let pid; + try { + [pid] = await this.readJsonPromise(lockPath); + } catch { + return Date.now() - startTime < 500; + } + try { + process.kill(pid, 0); + return true; + } catch { + return false; + } + }; + while (fd === null) { + try { + fd = await this.openPromise(lockPath, `wx`); + } catch (error) { + if (error.code === `EEXIST`) { + if (!await isAlive()) { + try { + await this.unlinkPromise(lockPath); + continue; + } catch { + } + } + if (Date.now() - startTime < 60 * 1e3) { + await new Promise((resolve) => setTimeout(resolve, interval)); + } else { + throw new Error(`Couldn't acquire a lock in a reasonable time (via ${lockPath})`); + } + } else { + throw error; + } + } + } + await this.writePromise(fd, JSON.stringify([process.pid])); + try { + return await callback(); + } finally { + try { + await this.closePromise(fd); + await this.unlinkPromise(lockPath); + } catch { + } + } + } + async readJsonPromise(p) { + const content = await this.readFilePromise(p, `utf8`); + try { + return JSON.parse(content); + } catch (error) { + error.message += ` (in ${p})`; + throw error; + } + } + readJsonSync(p) { + const content = this.readFileSync(p, `utf8`); + try { + return JSON.parse(content); + } catch (error) { + error.message += ` (in ${p})`; + throw error; + } + } + async writeJsonPromise(p, data, { compact = false } = {}) { + const space = compact ? 0 : 2; + return await this.writeFilePromise(p, `${JSON.stringify(data, null, space)} +`); + } + writeJsonSync(p, data, { compact = false } = {}) { + const space = compact ? 0 : 2; + return this.writeFileSync(p, `${JSON.stringify(data, null, space)} +`); + } + async preserveTimePromise(p, cb) { + const stat = await this.lstatPromise(p); + const result = await cb(); + if (typeof result !== `undefined`) + p = result; + await this.lutimesPromise(p, stat.atime, stat.mtime); + } + async preserveTimeSync(p, cb) { + const stat = this.lstatSync(p); + const result = cb(); + if (typeof result !== `undefined`) + p = result; + this.lutimesSync(p, stat.atime, stat.mtime); + } +} +class BasePortableFakeFS extends FakeFS { + constructor() { + super(ppath); + } +} +function getEndOfLine(content) { + const matches = content.match(/\r?\n/g); + if (matches === null) + return EOL; + const crlf = matches.filter((nl) => nl === `\r +`).length; + const lf = matches.length - crlf; + return crlf > lf ? `\r +` : ` +`; +} +function normalizeLineEndings(originalContent, newContent) { + return newContent.replace(/\r?\n/g, getEndOfLine(originalContent)); +} + +class ProxiedFS extends FakeFS { + getExtractHint(hints) { + return this.baseFs.getExtractHint(hints); + } + resolve(path) { + return this.mapFromBase(this.baseFs.resolve(this.mapToBase(path))); + } + getRealPath() { + return this.mapFromBase(this.baseFs.getRealPath()); + } + async openPromise(p, flags, mode) { + return this.baseFs.openPromise(this.mapToBase(p), flags, mode); + } + openSync(p, flags, mode) { + return this.baseFs.openSync(this.mapToBase(p), flags, mode); + } + async opendirPromise(p, opts) { + return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(p), opts), { path: p }); + } + opendirSync(p, opts) { + return Object.assign(this.baseFs.opendirSync(this.mapToBase(p), opts), { path: p }); + } + async readPromise(fd, buffer, offset, length, position) { + return await this.baseFs.readPromise(fd, buffer, offset, length, position); + } + readSync(fd, buffer, offset, length, position) { + return this.baseFs.readSync(fd, buffer, offset, length, position); + } + async writePromise(fd, buffer, offset, length, position) { + if (typeof buffer === `string`) { + return await this.baseFs.writePromise(fd, buffer, offset); + } else { + return await this.baseFs.writePromise(fd, buffer, offset, length, position); + } + } + writeSync(fd, buffer, offset, length, position) { + if (typeof buffer === `string`) { + return this.baseFs.writeSync(fd, buffer, offset); + } else { + return this.baseFs.writeSync(fd, buffer, offset, length, position); + } + } + async closePromise(fd) { + return this.baseFs.closePromise(fd); + } + closeSync(fd) { + this.baseFs.closeSync(fd); + } + createReadStream(p, opts) { + return this.baseFs.createReadStream(p !== null ? this.mapToBase(p) : p, opts); + } + createWriteStream(p, opts) { + return this.baseFs.createWriteStream(p !== null ? this.mapToBase(p) : p, opts); + } + async realpathPromise(p) { + return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(p))); + } + realpathSync(p) { + return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(p))); + } + async existsPromise(p) { + return this.baseFs.existsPromise(this.mapToBase(p)); + } + existsSync(p) { + return this.baseFs.existsSync(this.mapToBase(p)); + } + accessSync(p, mode) { + return this.baseFs.accessSync(this.mapToBase(p), mode); + } + async accessPromise(p, mode) { + return this.baseFs.accessPromise(this.mapToBase(p), mode); + } + async statPromise(p, opts) { + return this.baseFs.statPromise(this.mapToBase(p), opts); + } + statSync(p, opts) { + return this.baseFs.statSync(this.mapToBase(p), opts); + } + async fstatPromise(fd, opts) { + return this.baseFs.fstatPromise(fd, opts); + } + fstatSync(fd, opts) { + return this.baseFs.fstatSync(fd, opts); + } + lstatPromise(p, opts) { + return this.baseFs.lstatPromise(this.mapToBase(p), opts); + } + lstatSync(p, opts) { + return this.baseFs.lstatSync(this.mapToBase(p), opts); + } + async fchmodPromise(fd, mask) { + return this.baseFs.fchmodPromise(fd, mask); + } + fchmodSync(fd, mask) { + return this.baseFs.fchmodSync(fd, mask); + } + async chmodPromise(p, mask) { + return this.baseFs.chmodPromise(this.mapToBase(p), mask); + } + chmodSync(p, mask) { + return this.baseFs.chmodSync(this.mapToBase(p), mask); + } + async fchownPromise(fd, uid, gid) { + return this.baseFs.fchownPromise(fd, uid, gid); + } + fchownSync(fd, uid, gid) { + return this.baseFs.fchownSync(fd, uid, gid); + } + async chownPromise(p, uid, gid) { + return this.baseFs.chownPromise(this.mapToBase(p), uid, gid); + } + chownSync(p, uid, gid) { + return this.baseFs.chownSync(this.mapToBase(p), uid, gid); + } + async renamePromise(oldP, newP) { + return this.baseFs.renamePromise(this.mapToBase(oldP), this.mapToBase(newP)); + } + renameSync(oldP, newP) { + return this.baseFs.renameSync(this.mapToBase(oldP), this.mapToBase(newP)); + } + async copyFilePromise(sourceP, destP, flags = 0) { + return this.baseFs.copyFilePromise(this.mapToBase(sourceP), this.mapToBase(destP), flags); + } + copyFileSync(sourceP, destP, flags = 0) { + return this.baseFs.copyFileSync(this.mapToBase(sourceP), this.mapToBase(destP), flags); + } + async appendFilePromise(p, content, opts) { + return this.baseFs.appendFilePromise(this.fsMapToBase(p), content, opts); + } + appendFileSync(p, content, opts) { + return this.baseFs.appendFileSync(this.fsMapToBase(p), content, opts); + } + async writeFilePromise(p, content, opts) { + return this.baseFs.writeFilePromise(this.fsMapToBase(p), content, opts); + } + writeFileSync(p, content, opts) { + return this.baseFs.writeFileSync(this.fsMapToBase(p), content, opts); + } + async unlinkPromise(p) { + return this.baseFs.unlinkPromise(this.mapToBase(p)); + } + unlinkSync(p) { + return this.baseFs.unlinkSync(this.mapToBase(p)); + } + async utimesPromise(p, atime, mtime) { + return this.baseFs.utimesPromise(this.mapToBase(p), atime, mtime); + } + utimesSync(p, atime, mtime) { + return this.baseFs.utimesSync(this.mapToBase(p), atime, mtime); + } + async lutimesPromise(p, atime, mtime) { + return this.baseFs.lutimesPromise(this.mapToBase(p), atime, mtime); + } + lutimesSync(p, atime, mtime) { + return this.baseFs.lutimesSync(this.mapToBase(p), atime, mtime); + } + async mkdirPromise(p, opts) { + return this.baseFs.mkdirPromise(this.mapToBase(p), opts); + } + mkdirSync(p, opts) { + return this.baseFs.mkdirSync(this.mapToBase(p), opts); + } + async rmdirPromise(p, opts) { + return this.baseFs.rmdirPromise(this.mapToBase(p), opts); + } + rmdirSync(p, opts) { + return this.baseFs.rmdirSync(this.mapToBase(p), opts); + } + async rmPromise(p, opts) { + return this.baseFs.rmPromise(this.mapToBase(p), opts); + } + rmSync(p, opts) { + return this.baseFs.rmSync(this.mapToBase(p), opts); + } + async linkPromise(existingP, newP) { + return this.baseFs.linkPromise(this.mapToBase(existingP), this.mapToBase(newP)); + } + linkSync(existingP, newP) { + return this.baseFs.linkSync(this.mapToBase(existingP), this.mapToBase(newP)); + } + async symlinkPromise(target, p, type) { + const mappedP = this.mapToBase(p); + if (this.pathUtils.isAbsolute(target)) + return this.baseFs.symlinkPromise(this.mapToBase(target), mappedP, type); + const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target)); + const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget); + return this.baseFs.symlinkPromise(mappedTarget, mappedP, type); + } + symlinkSync(target, p, type) { + const mappedP = this.mapToBase(p); + if (this.pathUtils.isAbsolute(target)) + return this.baseFs.symlinkSync(this.mapToBase(target), mappedP, type); + const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target)); + const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget); + return this.baseFs.symlinkSync(mappedTarget, mappedP, type); + } + async readFilePromise(p, encoding) { + return this.baseFs.readFilePromise(this.fsMapToBase(p), encoding); + } + readFileSync(p, encoding) { + return this.baseFs.readFileSync(this.fsMapToBase(p), encoding); + } + readdirPromise(p, opts) { + return this.baseFs.readdirPromise(this.mapToBase(p), opts); + } + readdirSync(p, opts) { + return this.baseFs.readdirSync(this.mapToBase(p), opts); + } + async readlinkPromise(p) { + return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(p))); + } + readlinkSync(p) { + return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(p))); + } + async truncatePromise(p, len) { + return this.baseFs.truncatePromise(this.mapToBase(p), len); + } + truncateSync(p, len) { + return this.baseFs.truncateSync(this.mapToBase(p), len); + } + async ftruncatePromise(fd, len) { + return this.baseFs.ftruncatePromise(fd, len); + } + ftruncateSync(fd, len) { + return this.baseFs.ftruncateSync(fd, len); + } + watch(p, a, b) { + return this.baseFs.watch( + this.mapToBase(p), + // @ts-expect-error - reason TBS + a, + b + ); + } + watchFile(p, a, b) { + return this.baseFs.watchFile( + this.mapToBase(p), + // @ts-expect-error - reason TBS + a, + b + ); + } + unwatchFile(p, cb) { + return this.baseFs.unwatchFile(this.mapToBase(p), cb); + } + fsMapToBase(p) { + if (typeof p === `number`) { + return p; + } else { + return this.mapToBase(p); + } + } +} + +function direntToPortable(dirent) { + const portableDirent = dirent; + if (typeof dirent.path === `string`) + portableDirent.path = npath.toPortablePath(dirent.path); + return portableDirent; +} +class NodeFS extends BasePortableFakeFS { + realFs; + constructor(realFs = fs) { + super(); + this.realFs = realFs; + } + getExtractHint() { + return false; + } + getRealPath() { + return PortablePath.root; + } + resolve(p) { + return ppath.resolve(p); + } + async openPromise(p, flags, mode) { + return await new Promise((resolve, reject) => { + this.realFs.open(npath.fromPortablePath(p), flags, mode, this.makeCallback(resolve, reject)); + }); + } + openSync(p, flags, mode) { + return this.realFs.openSync(npath.fromPortablePath(p), flags, mode); + } + async opendirPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (typeof opts !== `undefined`) { + this.realFs.opendir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.opendir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }).then((dir) => { + const dirWithFixedPath = dir; + Object.defineProperty(dirWithFixedPath, `path`, { + value: p, + configurable: true, + writable: true + }); + return dirWithFixedPath; + }); + } + opendirSync(p, opts) { + const dir = typeof opts !== `undefined` ? this.realFs.opendirSync(npath.fromPortablePath(p), opts) : this.realFs.opendirSync(npath.fromPortablePath(p)); + const dirWithFixedPath = dir; + Object.defineProperty(dirWithFixedPath, `path`, { + value: p, + configurable: true, + writable: true + }); + return dirWithFixedPath; + } + async readPromise(fd, buffer, offset = 0, length = 0, position = -1) { + return await new Promise((resolve, reject) => { + this.realFs.read(fd, buffer, offset, length, position, (error, bytesRead) => { + if (error) { + reject(error); + } else { + resolve(bytesRead); + } + }); + }); + } + readSync(fd, buffer, offset, length, position) { + return this.realFs.readSync(fd, buffer, offset, length, position); + } + async writePromise(fd, buffer, offset, length, position) { + return await new Promise((resolve, reject) => { + if (typeof buffer === `string`) { + return this.realFs.write(fd, buffer, offset, this.makeCallback(resolve, reject)); + } else { + return this.realFs.write(fd, buffer, offset, length, position, this.makeCallback(resolve, reject)); + } + }); + } + writeSync(fd, buffer, offset, length, position) { + if (typeof buffer === `string`) { + return this.realFs.writeSync(fd, buffer, offset); + } else { + return this.realFs.writeSync(fd, buffer, offset, length, position); + } + } + async closePromise(fd) { + await new Promise((resolve, reject) => { + this.realFs.close(fd, this.makeCallback(resolve, reject)); + }); + } + closeSync(fd) { + this.realFs.closeSync(fd); + } + createReadStream(p, opts) { + const realPath = p !== null ? npath.fromPortablePath(p) : p; + return this.realFs.createReadStream(realPath, opts); + } + createWriteStream(p, opts) { + const realPath = p !== null ? npath.fromPortablePath(p) : p; + return this.realFs.createWriteStream(realPath, opts); + } + async realpathPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.realpath(npath.fromPortablePath(p), {}, this.makeCallback(resolve, reject)); + }).then((path) => { + return npath.toPortablePath(path); + }); + } + realpathSync(p) { + return npath.toPortablePath(this.realFs.realpathSync(npath.fromPortablePath(p), {})); + } + async existsPromise(p) { + return await new Promise((resolve) => { + this.realFs.exists(npath.fromPortablePath(p), resolve); + }); + } + accessSync(p, mode) { + return this.realFs.accessSync(npath.fromPortablePath(p), mode); + } + async accessPromise(p, mode) { + return await new Promise((resolve, reject) => { + this.realFs.access(npath.fromPortablePath(p), mode, this.makeCallback(resolve, reject)); + }); + } + existsSync(p) { + return this.realFs.existsSync(npath.fromPortablePath(p)); + } + async statPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.stat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.stat(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + statSync(p, opts) { + if (opts) { + return this.realFs.statSync(npath.fromPortablePath(p), opts); + } else { + return this.realFs.statSync(npath.fromPortablePath(p)); + } + } + async fstatPromise(fd, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.fstat(fd, opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.fstat(fd, this.makeCallback(resolve, reject)); + } + }); + } + fstatSync(fd, opts) { + if (opts) { + return this.realFs.fstatSync(fd, opts); + } else { + return this.realFs.fstatSync(fd); + } + } + async lstatPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.lstat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.lstat(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + lstatSync(p, opts) { + if (opts) { + return this.realFs.lstatSync(npath.fromPortablePath(p), opts); + } else { + return this.realFs.lstatSync(npath.fromPortablePath(p)); + } + } + async fchmodPromise(fd, mask) { + return await new Promise((resolve, reject) => { + this.realFs.fchmod(fd, mask, this.makeCallback(resolve, reject)); + }); + } + fchmodSync(fd, mask) { + return this.realFs.fchmodSync(fd, mask); + } + async chmodPromise(p, mask) { + return await new Promise((resolve, reject) => { + this.realFs.chmod(npath.fromPortablePath(p), mask, this.makeCallback(resolve, reject)); + }); + } + chmodSync(p, mask) { + return this.realFs.chmodSync(npath.fromPortablePath(p), mask); + } + async fchownPromise(fd, uid, gid) { + return await new Promise((resolve, reject) => { + this.realFs.fchown(fd, uid, gid, this.makeCallback(resolve, reject)); + }); + } + fchownSync(fd, uid, gid) { + return this.realFs.fchownSync(fd, uid, gid); + } + async chownPromise(p, uid, gid) { + return await new Promise((resolve, reject) => { + this.realFs.chown(npath.fromPortablePath(p), uid, gid, this.makeCallback(resolve, reject)); + }); + } + chownSync(p, uid, gid) { + return this.realFs.chownSync(npath.fromPortablePath(p), uid, gid); + } + async renamePromise(oldP, newP) { + return await new Promise((resolve, reject) => { + this.realFs.rename(npath.fromPortablePath(oldP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject)); + }); + } + renameSync(oldP, newP) { + return this.realFs.renameSync(npath.fromPortablePath(oldP), npath.fromPortablePath(newP)); + } + async copyFilePromise(sourceP, destP, flags = 0) { + return await new Promise((resolve, reject) => { + this.realFs.copyFile(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags, this.makeCallback(resolve, reject)); + }); + } + copyFileSync(sourceP, destP, flags = 0) { + return this.realFs.copyFileSync(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags); + } + async appendFilePromise(p, content, opts) { + return await new Promise((resolve, reject) => { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.appendFile(fsNativePath, content, opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.appendFile(fsNativePath, content, this.makeCallback(resolve, reject)); + } + }); + } + appendFileSync(p, content, opts) { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.appendFileSync(fsNativePath, content, opts); + } else { + this.realFs.appendFileSync(fsNativePath, content); + } + } + async writeFilePromise(p, content, opts) { + return await new Promise((resolve, reject) => { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.writeFile(fsNativePath, content, opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.writeFile(fsNativePath, content, this.makeCallback(resolve, reject)); + } + }); + } + writeFileSync(p, content, opts) { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.writeFileSync(fsNativePath, content, opts); + } else { + this.realFs.writeFileSync(fsNativePath, content); + } + } + async unlinkPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.unlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + }); + } + unlinkSync(p) { + return this.realFs.unlinkSync(npath.fromPortablePath(p)); + } + async utimesPromise(p, atime, mtime) { + return await new Promise((resolve, reject) => { + this.realFs.utimes(npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject)); + }); + } + utimesSync(p, atime, mtime) { + this.realFs.utimesSync(npath.fromPortablePath(p), atime, mtime); + } + async lutimesPromise(p, atime, mtime) { + return await new Promise((resolve, reject) => { + this.realFs.lutimes(npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject)); + }); + } + lutimesSync(p, atime, mtime) { + this.realFs.lutimesSync(npath.fromPortablePath(p), atime, mtime); + } + async mkdirPromise(p, opts) { + return await new Promise((resolve, reject) => { + this.realFs.mkdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + }); + } + mkdirSync(p, opts) { + return this.realFs.mkdirSync(npath.fromPortablePath(p), opts); + } + async rmdirPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.rmdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.rmdir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + rmdirSync(p, opts) { + return this.realFs.rmdirSync(npath.fromPortablePath(p), opts); + } + async rmPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.rm(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.rm(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + rmSync(p, opts) { + return this.realFs.rmSync(npath.fromPortablePath(p), opts); + } + async linkPromise(existingP, newP) { + return await new Promise((resolve, reject) => { + this.realFs.link(npath.fromPortablePath(existingP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject)); + }); + } + linkSync(existingP, newP) { + return this.realFs.linkSync(npath.fromPortablePath(existingP), npath.fromPortablePath(newP)); + } + async symlinkPromise(target, p, type) { + return await new Promise((resolve, reject) => { + this.realFs.symlink(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type, this.makeCallback(resolve, reject)); + }); + } + symlinkSync(target, p, type) { + return this.realFs.symlinkSync(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type); + } + async readFilePromise(p, encoding) { + return await new Promise((resolve, reject) => { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + this.realFs.readFile(fsNativePath, encoding, this.makeCallback(resolve, reject)); + }); + } + readFileSync(p, encoding) { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + return this.realFs.readFileSync(fsNativePath, encoding); + } + async readdirPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + if (opts.recursive && process.platform === `win32`) { + if (opts.withFileTypes) { + this.realFs.readdir(npath.fromPortablePath(p), opts, this.makeCallback((results) => resolve(results.map(direntToPortable)), reject)); + } else { + this.realFs.readdir(npath.fromPortablePath(p), opts, this.makeCallback((results) => resolve(results.map(npath.toPortablePath)), reject)); + } + } else { + this.realFs.readdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } + } else { + this.realFs.readdir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + readdirSync(p, opts) { + if (opts) { + if (opts.recursive && process.platform === `win32`) { + if (opts.withFileTypes) { + return this.realFs.readdirSync(npath.fromPortablePath(p), opts).map(direntToPortable); + } else { + return this.realFs.readdirSync(npath.fromPortablePath(p), opts).map(npath.toPortablePath); + } + } else { + return this.realFs.readdirSync(npath.fromPortablePath(p), opts); + } + } else { + return this.realFs.readdirSync(npath.fromPortablePath(p)); + } + } + async readlinkPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.readlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + }).then((path) => { + return npath.toPortablePath(path); + }); + } + readlinkSync(p) { + return npath.toPortablePath(this.realFs.readlinkSync(npath.fromPortablePath(p))); + } + async truncatePromise(p, len) { + return await new Promise((resolve, reject) => { + this.realFs.truncate(npath.fromPortablePath(p), len, this.makeCallback(resolve, reject)); + }); + } + truncateSync(p, len) { + return this.realFs.truncateSync(npath.fromPortablePath(p), len); + } + async ftruncatePromise(fd, len) { + return await new Promise((resolve, reject) => { + this.realFs.ftruncate(fd, len, this.makeCallback(resolve, reject)); + }); + } + ftruncateSync(fd, len) { + return this.realFs.ftruncateSync(fd, len); + } + watch(p, a, b) { + return this.realFs.watch( + npath.fromPortablePath(p), + // @ts-expect-error - reason TBS + a, + b + ); + } + watchFile(p, a, b) { + return this.realFs.watchFile( + npath.fromPortablePath(p), + // @ts-expect-error - reason TBS + a, + b + ); + } + unwatchFile(p, cb) { + return this.realFs.unwatchFile(npath.fromPortablePath(p), cb); + } + makeCallback(resolve, reject) { + return (err, result) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }; + } +} + +const NUMBER_REGEXP = /^[0-9]+$/; +const VIRTUAL_REGEXP = /^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/; +const VALID_COMPONENT = /^([^/]+-)?[a-f0-9]+$/; +class VirtualFS extends ProxiedFS { + baseFs; + static makeVirtualPath(base, component, to) { + if (ppath.basename(base) !== `__virtual__`) + throw new Error(`Assertion failed: Virtual folders must be named "__virtual__"`); + if (!ppath.basename(component).match(VALID_COMPONENT)) + throw new Error(`Assertion failed: Virtual components must be ended by an hexadecimal hash`); + const target = ppath.relative(ppath.dirname(base), to); + const segments = target.split(`/`); + let depth = 0; + while (depth < segments.length && segments[depth] === `..`) + depth += 1; + const finalSegments = segments.slice(depth); + const fullVirtualPath = ppath.join(base, component, String(depth), ...finalSegments); + return fullVirtualPath; + } + static resolveVirtual(p) { + const match = p.match(VIRTUAL_REGEXP); + if (!match || !match[3] && match[5]) + return p; + const target = ppath.dirname(match[1]); + if (!match[3] || !match[4]) + return target; + const isnum = NUMBER_REGEXP.test(match[4]); + if (!isnum) + return p; + const depth = Number(match[4]); + const backstep = `../`.repeat(depth); + const subpath = match[5] || `.`; + return VirtualFS.resolveVirtual(ppath.join(target, backstep, subpath)); + } + constructor({ baseFs = new NodeFS() } = {}) { + super(ppath); + this.baseFs = baseFs; + } + getExtractHint(hints) { + return this.baseFs.getExtractHint(hints); + } + getRealPath() { + return this.baseFs.getRealPath(); + } + realpathSync(p) { + const match = p.match(VIRTUAL_REGEXP); + if (!match) + return this.baseFs.realpathSync(p); + if (!match[5]) + return p; + const realpath = this.baseFs.realpathSync(this.mapToBase(p)); + return VirtualFS.makeVirtualPath(match[1], match[3], realpath); + } + async realpathPromise(p) { + const match = p.match(VIRTUAL_REGEXP); + if (!match) + return await this.baseFs.realpathPromise(p); + if (!match[5]) + return p; + const realpath = await this.baseFs.realpathPromise(this.mapToBase(p)); + return VirtualFS.makeVirtualPath(match[1], match[3], realpath); + } + mapToBase(p) { + if (p === ``) + return p; + if (this.pathUtils.isAbsolute(p)) + return VirtualFS.resolveVirtual(p); + const resolvedRoot = VirtualFS.resolveVirtual(this.baseFs.resolve(PortablePath.dot)); + const resolvedP = VirtualFS.resolveVirtual(this.baseFs.resolve(p)); + return ppath.relative(resolvedRoot, resolvedP) || PortablePath.dot; + } + mapFromBase(p) { + return p; + } +} + +const URL = Number(process.versions.node.split('.', 1)[0]) < 20 ? URL$1 : globalThis.URL; + +const [major, minor] = process.versions.node.split(`.`).map((value) => parseInt(value, 10)); +const WATCH_MODE_MESSAGE_USES_ARRAYS = major > 19 || major === 19 && minor >= 2 || major === 18 && minor >= 13; +const HAS_LAZY_LOADED_TRANSLATORS = major === 20 && minor < 6 || major === 19 && minor >= 3; +const SUPPORTS_IMPORT_ATTRIBUTES = major >= 21 || major === 20 && minor >= 10 || major === 18 && minor >= 20; +const SUPPORTS_IMPORT_ATTRIBUTES_ONLY = major >= 22; + +function readPackageScope(checkPath) { + const rootSeparatorIndex = checkPath.indexOf(npath.sep); + let separatorIndex; + do { + separatorIndex = checkPath.lastIndexOf(npath.sep); + checkPath = checkPath.slice(0, separatorIndex); + if (checkPath.endsWith(`${npath.sep}node_modules`)) + return false; + const pjson = readPackage(checkPath + npath.sep); + if (pjson) { + return { + data: pjson, + path: checkPath + }; + } + } while (separatorIndex > rootSeparatorIndex); + return false; +} +function readPackage(requestPath) { + const jsonPath = npath.resolve(requestPath, `package.json`); + if (!fs.existsSync(jsonPath)) + return null; + return JSON.parse(fs.readFileSync(jsonPath, `utf8`)); +} + +async function tryReadFile$1(path2) { + try { + return await fs.promises.readFile(path2, `utf8`); + } catch (error) { + if (error.code === `ENOENT`) + return null; + throw error; + } +} +function tryParseURL(str, base) { + try { + return new URL(str, base); + } catch { + return null; + } +} +let entrypointPath = null; +function setEntrypointPath(file) { + entrypointPath = file; +} +function getFileFormat(filepath) { + const ext = path.extname(filepath); + switch (ext) { + case `.mjs`: { + return `module`; + } + case `.cjs`: { + return `commonjs`; + } + case `.wasm`: { + throw new Error( + `Unknown file extension ".wasm" for ${filepath}` + ); + } + case `.json`: { + return `json`; + } + case `.js`: { + const pkg = readPackageScope(filepath); + if (!pkg) + return `commonjs`; + return pkg.data.type ?? `commonjs`; + } + default: { + if (entrypointPath !== filepath) + return null; + const pkg = readPackageScope(filepath); + if (!pkg) + return `commonjs`; + if (pkg.data.type === `module`) + return null; + return pkg.data.type ?? `commonjs`; + } + } +} + +async function load$1(urlString, context, nextLoad) { + const url = tryParseURL(urlString); + if (url?.protocol !== `file:`) + return nextLoad(urlString, context, nextLoad); + const filePath = fileURLToPath(url); + const format = getFileFormat(filePath); + if (!format) + return nextLoad(urlString, context, nextLoad); + if (format === `json`) { + if (SUPPORTS_IMPORT_ATTRIBUTES_ONLY) { + if (context.importAttributes?.type !== `json`) { + const err = new TypeError(`[ERR_IMPORT_ATTRIBUTE_MISSING]: Module "${urlString}" needs an import attribute of "type: json"`); + err.code = `ERR_IMPORT_ATTRIBUTE_MISSING`; + throw err; + } + } else { + const type = `importAttributes` in context ? context.importAttributes?.type : context.importAssertions?.type; + if (type !== `json`) { + const err = new TypeError(`[ERR_IMPORT_ASSERTION_TYPE_MISSING]: Module "${urlString}" needs an import ${SUPPORTS_IMPORT_ATTRIBUTES ? `attribute` : `assertion`} of type "json"`); + err.code = `ERR_IMPORT_ASSERTION_TYPE_MISSING`; + throw err; + } + } + } + if (process.env.WATCH_REPORT_DEPENDENCIES && process.send) { + const pathToSend = pathToFileURL( + npath.fromPortablePath( + VirtualFS.resolveVirtual(npath.toPortablePath(filePath)) + ) + ).href; + process.send({ + "watch:import": WATCH_MODE_MESSAGE_USES_ARRAYS ? [pathToSend] : pathToSend + }); + } + return { + format, + source: format === `commonjs` ? void 0 : await fs.promises.readFile(filePath, `utf8`), + shortCircuit: true + }; +} + +const ArrayIsArray = Array.isArray; +const JSONStringify = JSON.stringify; +const ObjectGetOwnPropertyNames = Object.getOwnPropertyNames; +const ObjectPrototypeHasOwnProperty = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop); +const RegExpPrototypeExec = (obj, string) => RegExp.prototype.exec.call(obj, string); +const RegExpPrototypeSymbolReplace = (obj, ...rest) => RegExp.prototype[Symbol.replace].apply(obj, rest); +const StringPrototypeEndsWith = (str, ...rest) => String.prototype.endsWith.apply(str, rest); +const StringPrototypeIncludes = (str, ...rest) => String.prototype.includes.apply(str, rest); +const StringPrototypeLastIndexOf = (str, ...rest) => String.prototype.lastIndexOf.apply(str, rest); +const StringPrototypeIndexOf = (str, ...rest) => String.prototype.indexOf.apply(str, rest); +const StringPrototypeReplace = (str, ...rest) => String.prototype.replace.apply(str, rest); +const StringPrototypeSlice = (str, ...rest) => String.prototype.slice.apply(str, rest); +const StringPrototypeStartsWith = (str, ...rest) => String.prototype.startsWith.apply(str, rest); +const SafeMap = Map; +const JSONParse = JSON.parse; + +function createErrorType(code, messageCreator, errorType) { + return class extends errorType { + constructor(...args) { + super(messageCreator(...args)); + this.code = code; + this.name = `${errorType.name} [${code}]`; + } + }; +} +const ERR_PACKAGE_IMPORT_NOT_DEFINED = createErrorType( + `ERR_PACKAGE_IMPORT_NOT_DEFINED`, + (specifier, packagePath, base) => { + return `Package import specifier "${specifier}" is not defined${packagePath ? ` in package ${packagePath}package.json` : ``} imported from ${base}`; + }, + TypeError +); +const ERR_INVALID_MODULE_SPECIFIER = createErrorType( + `ERR_INVALID_MODULE_SPECIFIER`, + (request, reason, base = void 0) => { + return `Invalid module "${request}" ${reason}${base ? ` imported from ${base}` : ``}`; + }, + TypeError +); +const ERR_INVALID_PACKAGE_TARGET = createErrorType( + `ERR_INVALID_PACKAGE_TARGET`, + (pkgPath, key, target, isImport = false, base = void 0) => { + const relError = typeof target === `string` && !isImport && target.length && !StringPrototypeStartsWith(target, `./`); + if (key === `.`) { + assert(isImport === false); + return `Invalid "exports" main target ${JSONStringify(target)} defined in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`; + } + return `Invalid "${isImport ? `imports` : `exports`}" target ${JSONStringify( + target + )} defined for '${key}' in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`; + }, + Error +); +const ERR_INVALID_PACKAGE_CONFIG = createErrorType( + `ERR_INVALID_PACKAGE_CONFIG`, + (path, base, message) => { + return `Invalid package config ${path}${base ? ` while importing ${base}` : ``}${message ? `. ${message}` : ``}`; + }, + Error +); + +function filterOwnProperties(source, keys) { + const filtered = /* @__PURE__ */ Object.create(null); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + if (ObjectPrototypeHasOwnProperty(source, key)) { + filtered[key] = source[key]; + } + } + return filtered; +} + +const packageJSONCache = new SafeMap(); +function getPackageConfig(path, specifier, base, readFileSyncFn) { + const existing = packageJSONCache.get(path); + if (existing !== void 0) { + return existing; + } + const source = readFileSyncFn(path); + if (source === void 0) { + const packageConfig2 = { + pjsonPath: path, + exists: false, + main: void 0, + name: void 0, + type: "none", + exports: void 0, + imports: void 0 + }; + packageJSONCache.set(path, packageConfig2); + return packageConfig2; + } + let packageJSON; + try { + packageJSON = JSONParse(source); + } catch (error) { + throw new ERR_INVALID_PACKAGE_CONFIG( + path, + (base ? `"${specifier}" from ` : "") + fileURLToPath(base || specifier), + error.message + ); + } + let { imports, main, name, type } = filterOwnProperties(packageJSON, [ + "imports", + "main", + "name", + "type" + ]); + const exports = ObjectPrototypeHasOwnProperty(packageJSON, "exports") ? packageJSON.exports : void 0; + if (typeof imports !== "object" || imports === null) { + imports = void 0; + } + if (typeof main !== "string") { + main = void 0; + } + if (typeof name !== "string") { + name = void 0; + } + if (type !== "module" && type !== "commonjs") { + type = "none"; + } + const packageConfig = { + pjsonPath: path, + exists: true, + main, + name, + type, + exports, + imports + }; + packageJSONCache.set(path, packageConfig); + return packageConfig; +} +function getPackageScopeConfig(resolved, readFileSyncFn) { + let packageJSONUrl = new URL("./package.json", resolved); + while (true) { + const packageJSONPath2 = packageJSONUrl.pathname; + if (StringPrototypeEndsWith(packageJSONPath2, "node_modules/package.json")) { + break; + } + const packageConfig2 = getPackageConfig( + fileURLToPath(packageJSONUrl), + resolved, + void 0, + readFileSyncFn + ); + if (packageConfig2.exists) { + return packageConfig2; + } + const lastPackageJSONUrl = packageJSONUrl; + packageJSONUrl = new URL("../package.json", packageJSONUrl); + if (packageJSONUrl.pathname === lastPackageJSONUrl.pathname) { + break; + } + } + const packageJSONPath = fileURLToPath(packageJSONUrl); + const packageConfig = { + pjsonPath: packageJSONPath, + exists: false, + main: void 0, + name: void 0, + type: "none", + exports: void 0, + imports: void 0 + }; + packageJSONCache.set(packageJSONPath, packageConfig); + return packageConfig; +} + +function throwImportNotDefined(specifier, packageJSONUrl, base) { + throw new ERR_PACKAGE_IMPORT_NOT_DEFINED( + specifier, + packageJSONUrl && fileURLToPath(new URL(".", packageJSONUrl)), + fileURLToPath(base) + ); +} +function throwInvalidSubpath(subpath, packageJSONUrl, internal, base) { + const reason = `request is not a valid subpath for the "${internal ? "imports" : "exports"}" resolution of ${fileURLToPath(packageJSONUrl)}`; + throw new ERR_INVALID_MODULE_SPECIFIER( + subpath, + reason, + base && fileURLToPath(base) + ); +} +function throwInvalidPackageTarget(subpath, target, packageJSONUrl, internal, base) { + if (typeof target === "object" && target !== null) { + target = JSONStringify(target, null, ""); + } else { + target = `${target}`; + } + throw new ERR_INVALID_PACKAGE_TARGET( + fileURLToPath(new URL(".", packageJSONUrl)), + subpath, + target, + internal, + base && fileURLToPath(base) + ); +} +const invalidSegmentRegEx = /(^|\\|\/)((\.|%2e)(\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))(\\|\/|$)/i; +const patternRegEx = /\*/g; +function resolvePackageTargetString(target, subpath, match, packageJSONUrl, base, pattern, internal, conditions) { + if (subpath !== "" && !pattern && target[target.length - 1] !== "/") + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + if (!StringPrototypeStartsWith(target, "./")) { + if (internal && !StringPrototypeStartsWith(target, "../") && !StringPrototypeStartsWith(target, "/")) { + let isURL = false; + try { + new URL(target); + isURL = true; + } catch { + } + if (!isURL) { + const exportTarget = pattern ? RegExpPrototypeSymbolReplace(patternRegEx, target, () => subpath) : target + subpath; + return exportTarget; + } + } + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + } + if (RegExpPrototypeExec( + invalidSegmentRegEx, + StringPrototypeSlice(target, 2) + ) !== null) + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + const resolved = new URL(target, packageJSONUrl); + const resolvedPath = resolved.pathname; + const packagePath = new URL(".", packageJSONUrl).pathname; + if (!StringPrototypeStartsWith(resolvedPath, packagePath)) + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + if (subpath === "") return resolved; + if (RegExpPrototypeExec(invalidSegmentRegEx, subpath) !== null) { + const request = pattern ? StringPrototypeReplace(match, "*", () => subpath) : match + subpath; + throwInvalidSubpath(request, packageJSONUrl, internal, base); + } + if (pattern) { + return new URL( + RegExpPrototypeSymbolReplace(patternRegEx, resolved.href, () => subpath) + ); + } + return new URL(subpath, resolved); +} +function isArrayIndex(key) { + const keyNum = +key; + if (`${keyNum}` !== key) return false; + return keyNum >= 0 && keyNum < 4294967295; +} +function resolvePackageTarget(packageJSONUrl, target, subpath, packageSubpath, base, pattern, internal, conditions) { + if (typeof target === "string") { + return resolvePackageTargetString( + target, + subpath, + packageSubpath, + packageJSONUrl, + base, + pattern, + internal); + } else if (ArrayIsArray(target)) { + if (target.length === 0) { + return null; + } + let lastException; + for (let i = 0; i < target.length; i++) { + const targetItem = target[i]; + let resolveResult; + try { + resolveResult = resolvePackageTarget( + packageJSONUrl, + targetItem, + subpath, + packageSubpath, + base, + pattern, + internal, + conditions + ); + } catch (e) { + lastException = e; + if (e.code === "ERR_INVALID_PACKAGE_TARGET") { + continue; + } + throw e; + } + if (resolveResult === void 0) { + continue; + } + if (resolveResult === null) { + lastException = null; + continue; + } + return resolveResult; + } + if (lastException === void 0 || lastException === null) + return lastException; + throw lastException; + } else if (typeof target === "object" && target !== null) { + const keys = ObjectGetOwnPropertyNames(target); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + if (isArrayIndex(key)) { + throw new ERR_INVALID_PACKAGE_CONFIG( + fileURLToPath(packageJSONUrl), + base, + '"exports" cannot contain numeric property keys.' + ); + } + } + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + if (key === "default" || conditions.has(key)) { + const conditionalTarget = target[key]; + const resolveResult = resolvePackageTarget( + packageJSONUrl, + conditionalTarget, + subpath, + packageSubpath, + base, + pattern, + internal, + conditions + ); + if (resolveResult === void 0) continue; + return resolveResult; + } + } + return void 0; + } else if (target === null) { + return null; + } + throwInvalidPackageTarget( + packageSubpath, + target, + packageJSONUrl, + internal, + base + ); +} +function patternKeyCompare(a, b) { + const aPatternIndex = StringPrototypeIndexOf(a, "*"); + const bPatternIndex = StringPrototypeIndexOf(b, "*"); + const baseLenA = aPatternIndex === -1 ? a.length : aPatternIndex + 1; + const baseLenB = bPatternIndex === -1 ? b.length : bPatternIndex + 1; + if (baseLenA > baseLenB) return -1; + if (baseLenB > baseLenA) return 1; + if (aPatternIndex === -1) return 1; + if (bPatternIndex === -1) return -1; + if (a.length > b.length) return -1; + if (b.length > a.length) return 1; + return 0; +} +function packageImportsResolve({ name, base, conditions, readFileSyncFn }) { + if (name === "#" || StringPrototypeStartsWith(name, "#/") || StringPrototypeEndsWith(name, "/")) { + const reason = "is not a valid internal imports specifier name"; + throw new ERR_INVALID_MODULE_SPECIFIER(name, reason, fileURLToPath(base)); + } + let packageJSONUrl; + const packageConfig = getPackageScopeConfig(base, readFileSyncFn); + if (packageConfig.exists) { + packageJSONUrl = pathToFileURL(packageConfig.pjsonPath); + const imports = packageConfig.imports; + if (imports) { + if (ObjectPrototypeHasOwnProperty(imports, name) && !StringPrototypeIncludes(name, "*")) { + const resolveResult = resolvePackageTarget( + packageJSONUrl, + imports[name], + "", + name, + base, + false, + true, + conditions + ); + if (resolveResult != null) { + return resolveResult; + } + } else { + let bestMatch = ""; + let bestMatchSubpath; + const keys = ObjectGetOwnPropertyNames(imports); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + const patternIndex = StringPrototypeIndexOf(key, "*"); + if (patternIndex !== -1 && StringPrototypeStartsWith( + name, + StringPrototypeSlice(key, 0, patternIndex) + )) { + const patternTrailer = StringPrototypeSlice(key, patternIndex + 1); + if (name.length >= key.length && StringPrototypeEndsWith(name, patternTrailer) && patternKeyCompare(bestMatch, key) === 1 && StringPrototypeLastIndexOf(key, "*") === patternIndex) { + bestMatch = key; + bestMatchSubpath = StringPrototypeSlice( + name, + patternIndex, + name.length - patternTrailer.length + ); + } + } + } + if (bestMatch) { + const target = imports[bestMatch]; + const resolveResult = resolvePackageTarget( + packageJSONUrl, + target, + bestMatchSubpath, + bestMatch, + base, + true, + true, + conditions + ); + if (resolveResult != null) { + return resolveResult; + } + } + } + } + } + throwImportNotDefined(name, packageJSONUrl, base); +} + +let findPnpApi = esmModule.findPnpApi; +if (!findPnpApi) { + const require = createRequire(import.meta.url); + const pnpApi = require(structuredClone(`./.pnp.cjs`)); + pnpApi.setup(); + findPnpApi = esmModule.findPnpApi; +} +const pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/; +const isRelativeRegexp = /^\.{0,2}\//; +function tryReadFile(filePath) { + try { + return fs.readFileSync(filePath, `utf8`); + } catch (err) { + if (err.code === `ENOENT`) + return void 0; + throw err; + } +} +async function resolvePrivateRequest(specifier, issuer, context, nextResolve) { + const resolved = packageImportsResolve({ + name: specifier, + base: pathToFileURL(issuer), + conditions: new Set(context.conditions), + readFileSyncFn: tryReadFile + }); + if (resolved instanceof URL) { + return { url: resolved.href, shortCircuit: true }; + } else { + if (resolved.startsWith(`#`)) + throw new Error(`Mapping from one private import to another isn't allowed`); + return resolve$1(resolved, context, nextResolve); + } +} +async function resolve$1(originalSpecifier, context, nextResolve) { + if (!findPnpApi || isBuiltin(originalSpecifier)) + return nextResolve(originalSpecifier, context, nextResolve); + let specifier = originalSpecifier; + const url = tryParseURL(specifier, isRelativeRegexp.test(specifier) ? context.parentURL : void 0); + if (url) { + if (url.protocol !== `file:`) + return nextResolve(originalSpecifier, context, nextResolve); + specifier = fileURLToPath(url); + } + const { parentURL, conditions = [] } = context; + const issuer = parentURL && tryParseURL(parentURL)?.protocol === `file:` ? fileURLToPath(parentURL) : process.cwd(); + const pnpapi = findPnpApi(issuer) ?? (url ? findPnpApi(specifier) : null); + if (!pnpapi) + return nextResolve(originalSpecifier, context, nextResolve); + if (specifier.startsWith(`#`)) + return resolvePrivateRequest(specifier, issuer, context, nextResolve); + const dependencyNameMatch = specifier.match(pathRegExp); + let allowLegacyResolve = false; + if (dependencyNameMatch) { + const [, dependencyName, subPath] = dependencyNameMatch; + if (subPath === `` && dependencyName !== `pnpapi`) { + const resolved = pnpapi.resolveToUnqualified(`${dependencyName}/package.json`, issuer); + if (resolved) { + const content = await tryReadFile$1(resolved); + if (content) { + const pkg = JSON.parse(content); + allowLegacyResolve = pkg.exports == null; + } + } + } + } + let result; + try { + result = pnpapi.resolveRequest(specifier, issuer, { + conditions: new Set(conditions), + // TODO: Handle --experimental-specifier-resolution=node + extensions: allowLegacyResolve ? void 0 : [] + }); + } catch (err) { + if (err instanceof Error && `code` in err && err.code === `MODULE_NOT_FOUND`) + err.code = `ERR_MODULE_NOT_FOUND`; + throw err; + } + if (!result) + throw new Error(`Resolving '${specifier}' from '${issuer}' failed`); + const resultURL = pathToFileURL(result); + if (url) { + resultURL.search = url.search; + resultURL.hash = url.hash; + } + if (!parentURL) + setEntrypointPath(fileURLToPath(resultURL)); + return { + url: resultURL.href, + shortCircuit: true + }; +} + +if (!HAS_LAZY_LOADED_TRANSLATORS) { + const binding = process.binding(`fs`); + const originalReadFile = binding.readFileUtf8 || binding.readFileSync; + if (originalReadFile) { + binding[originalReadFile.name] = function(...args) { + try { + return fs.readFileSync(args[0], { + encoding: `utf8`, + // @ts-expect-error - The docs says it needs to be a string but + // links to https://nodejs.org/dist/latest-v20.x/docs/api/fs.html#file-system-flags + // which says it can be a number which matches the implementation. + flag: args[1] + }); + } catch { + } + return originalReadFile.apply(this, args); + }; + } else { + const binding2 = process.binding(`fs`); + const originalfstat = binding2.fstat; + const ZIP_MASK = 4278190080; + const ZIP_MAGIC = 704643072; + binding2.fstat = function(...args) { + const [fd, useBigint, req] = args; + if ((fd & ZIP_MASK) === ZIP_MAGIC && useBigint === false && req === void 0) { + try { + const stats = fs.fstatSync(fd); + return new Float64Array([ + stats.dev, + stats.mode, + stats.nlink, + stats.uid, + stats.gid, + stats.rdev, + stats.blksize, + stats.ino, + stats.size, + stats.blocks + // atime sec + // atime ns + // mtime sec + // mtime ns + // ctime sec + // ctime ns + // birthtime sec + // birthtime ns + ]); + } catch { + } + } + return originalfstat.apply(this, args); + }; + } +} + +const resolve = resolve$1; +const load = load$1; + +export { load, resolve }; diff --git a/rpgsaga/.yarn/install-state.gz b/rpgsaga/.yarn/install-state.gz new file mode 100644 index 0000000000000000000000000000000000000000..b6369d01720a363a2ca83c7c267f09501e8ecfc2 GIT binary patch literal 250685 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

DA)9g3p)26$! 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%0A+tIfhSg#hy7x#)(fg~7bSPV-9# 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 z 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

tYBoerMbM6lp_FDIp7 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

*q^y>#!f)w63A((iiZTzJQz+c>2G$+9olCJ)yj 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 hero !== null && hero !== undefined); + + if (this.heroes.length === 0) { + throw new Error('Нет героев для игры'); + } + if (this.heroes.length % 2 !== 0) { + throw new Error('Количество игроков должно быть четным'); + } + this.logHeroesStats(); + } + + private logHeroesStats(): void { + Logger.log('=== Начальные характеристики героев ==='); + this.heroes.forEach(hero => { + if (hero && hero.getType) { + Logger.log(`${hero.getType()} ${hero.getName()}: Здоровье=${hero.getHealth()}, Сила=${hero.getStrength()}`); + } + }); + Logger.log('=====================================\n'); + } + + start(): Hero { + let turn = 0; + + while (this.heroes.length > 1) { + this.round++; + Logger.log(`\nКон ${this.round}.`); + + const winners = this.fightRound(turn); + this.heroes = winners.filter(winner => winner && winner.isAlive && winner.isAlive()); + + if (this.heroes.length === 0) { + throw new Error('Все герои погибли'); + } + + turn++; + } + + const winner = this.heroes[0]; + console.log(`\nПОБЕДИТЕЛЬ ТУРНИРА: ${winner.getType()} ${winner.getName()}`); + return winner; + } + + private fightRound(startTurn: number): Hero[] { + const fights = this.createFights(); + const winners: Hero[] = []; + + for (const fight of fights) { + if (fight && fight.hero1 && fight.hero2) { + Logger.log(`\n${fight.hero1.getType()} ${fight.hero1.getName()} vs ${fight.hero2.getType()} ${fight.hero2.getName()}`); + const winner = this.fight(fight.hero1, fight.hero2, startTurn); + if (winner) { + winners.push(winner); + } + } + } + + return winners; + } + + private createFights(): Array<{hero1: Hero, hero2: Hero}> { + const shuffled = [...this.heroes]; + for (let i = shuffled.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]]; + } + + const fights = []; + for (let i = 0; i < shuffled.length - 1; i += 2) { + if (shuffled[i] && shuffled[i + 1]) { + fights.push({ hero1: shuffled[i], hero2: shuffled[i + 1] }); + } + } + return fights; + } + + private fight(hero1: Hero, hero2: Hero, startTurn: number): Hero { + let turn = startTurn; + let turnCount = 0; + + while (hero1.isAlive() && hero2.isAlive() && turnCount < 100) { + turn++; + turnCount++; + + hero1.applyEffects(turn); + hero2.applyEffects(turn); + + if (!hero1.isAlive() || !hero2.isAlive()) break; + + if (!Mage.shouldSkipTurn(hero1)) { + hero1.attack(hero2, turn); + } + + if (!hero2.isAlive()) break; + + if (!Mage.shouldSkipTurn(hero2)) { + hero2.attack(hero1, turn); + } + } + + const winner = hero1.isAlive() ? hero1 : hero2; + if (this.heroes.length > 3) { + Logger.log(`\nПобедитель боя: ${winner.getType()} ${winner.getName()}`); + } + return winner; + } +} \ No newline at end of file diff --git a/rpgsaga/src/index.ts b/rpgsaga/src/index.ts index 60dba4d..5b62d49 100644 --- a/rpgsaga/src/index.ts +++ b/rpgsaga/src/index.ts @@ -1,18 +1,16 @@ -export function sum(a: number, b: number): number { - return a + b; -} - -// Example usage of the addNumbers function -console.log("Hello world"); +import { HeroFactory } from './factories/HeroFactory'; +import { Game } from './game/Game'; +import { Logger } from './utils/Logger'; -// Adding two integers -const result1 = sum(5, 3); -console.log(`5 + 3 = ${result1}`); +const playerCount = 6; -// Adding two floating-point numbers -const result2 = sum(2.5, 3.7); -console.log(`2.5 + 3.7 = ${result2}`); +function startGame() { + Logger.clear(); + console.log(`Создаем ${playerCount} игроков...\n`); + + const heroes = HeroFactory.createRandomHeroes(playerCount); + const game = new Game(heroes); + const winner = game.start(); +} -// Adding an integer and a floating-point number -const result3 = sum(10, 4.2); -console.log(`10 + 4.2 = ${result3}`); +startGame(); \ No newline at end of file diff --git a/rpgsaga/src/models/Archer.ts b/rpgsaga/src/models/Archer.ts new file mode 100644 index 0000000..21cc5ef --- /dev/null +++ b/rpgsaga/src/models/Archer.ts @@ -0,0 +1,51 @@ +import { Hero } from './Hero'; +import { Logger } from '../utils/Logger'; + +export class Archer extends Hero { + private fireArrowsUsed: boolean = false; + private iceArrowsCount: number = 0; + + attack(target: Hero, turn: number): void { + const random = Math.random(); + + if (!this.fireArrowsUsed && random < 0.33) { + this.useFireArrows(target, turn); + } else if (this.iceArrowsCount < 2 && random < 0.66) { + this.useIceArrows(target, turn); + } else { + this.normalAttack(target); + } + } + + private useFireArrows(target: Hero, turn: number): void { + this.fireArrowsUsed = true; + Logger.log(`${this.getName()} (Лучник) использует (Огненные стрелы) - ${target.getName()} загорается`); + target.addEffect({ + type: 'fire', + damage: 2, + duration: Infinity, + startTurn: turn + }); + } + + private useIceArrows(target: Hero, turn: number): void { + this.iceArrowsCount++; + Logger.log(`${this.getName()} (Лучник) использует (Ледяные стрелы) - ${target.getName()} заморожен`); + target.addEffect({ + type: 'ice', + damage: 3, + duration: 3, + startTurn: turn + }); + } + + private normalAttack(target: Hero): void { + const damage = this.strength; + Logger.log(`${this.getName()} (Лучник) наносит урон ${damage} противнику ${target.getName()}`); + target.takeDamage(damage, this); + } + + getType(): string { + return 'Лучник'; + } +} \ No newline at end of file diff --git a/rpgsaga/src/models/Hero.ts b/rpgsaga/src/models/Hero.ts new file mode 100644 index 0000000..fd9306c --- /dev/null +++ b/rpgsaga/src/models/Hero.ts @@ -0,0 +1,75 @@ +import type {Stats, Effect} from '../types/types'; +import { Logger } from '../utils/Logger'; + +export abstract class Hero { + protected health: number; + protected strength: number; + protected name: string; + protected effects: Effect[] = []; + protected currentTurn: number = 0; + protected alive: boolean = true; + + constructor(stats: Stats) { + this.health = stats.health; + this.strength = stats.strength; + this.name = stats.name; + } + + getHealth(): number { + return this.health; + } + + getStrength(): number { + return this.strength; + } + + getName(): string { + return this.name; + } + + isAlive(): boolean { + return this.alive && this.health > 0; + } + + takeDamage(damage: number, attacker: Hero): void { + this.health -= damage; + Logger.log(`${attacker.getName()} наносит урон ${damage} противнику ${this.getName()}`); + + if (this.health <= 0) { + this.health = 0; + this.alive = false; + Logger.log(`${this.getName()} погибает`); + } + } + + applyEffects(turn: number): void { + this.currentTurn = turn; + let totalDamage = 0; + + this.effects = this.effects.filter(effect => { + if (turn <= effect.startTurn + effect.duration) { + totalDamage += effect.damage; + const effectName = effect.type === 'fire' ? 'огненных' : effect.type === 'ice' ? 'ледяных' : 'отравленных'; + Logger.log(`${this.getName()} получает ${effect.damage} урона от ${effectName} стрел`); + return true; + } + return false; + }); + + if (totalDamage > 0) { + this.health -= totalDamage; + if (this.health <= 0) { + this.health = 0; + this.alive = false; + Logger.log(`${this.getName()} погибает от эффектов`); + } + } + } + + addEffect(effect: Effect): void { + this.effects.push(effect); + } + + abstract attack(target: Hero, turn: number): void; + abstract getType(): string; +} \ No newline at end of file diff --git a/rpgsaga/src/models/Knight.ts b/rpgsaga/src/models/Knight.ts new file mode 100644 index 0000000..819139c --- /dev/null +++ b/rpgsaga/src/models/Knight.ts @@ -0,0 +1,24 @@ +import { Hero } from "./Hero"; +import { Logger } from '../utils/Logger'; + +export class Knight extends Hero { + private readonly VENGEANCE_BONUS = 0.3; + + attack(target: Hero, turn: number): void { + const useAbility = Math.random() < 0.5; + + if (useAbility) { + const damage = Math.floor(this.strength * (1 + this.VENGEANCE_BONUS)); + Logger.log(`${this.getName()} (Рыцарь) использует (Удар возмездия) и наносит урон ${damage} противнику ${target.getName()}`); + target.takeDamage(damage, this); + } else { + const damage = this.strength; + Logger.log(`${this.getName()} (Рыцарь) наносит урон ${damage} противнику ${target.getName()}`); + target.takeDamage(damage, this); + } + } + + getType(): string { + return 'Рыцарь'; + } +} \ No newline at end of file diff --git a/rpgsaga/src/models/Mage.ts b/rpgsaga/src/models/Mage.ts new file mode 100644 index 0000000..60fa1b7 --- /dev/null +++ b/rpgsaga/src/models/Mage.ts @@ -0,0 +1,38 @@ +import { Hero } from './Hero'; +import { Logger } from '../utils/Logger'; + +export class Mage extends Hero { + private static charmedTargets: Set = new Set(); + + attack(target: Hero, turn: number): void { + const useAbility = Math.random() < 0.5; + + if (useAbility) { + if (target instanceof Mage) { + Logger.log(`${this.getName()} (Маг) пытается заворожить ${target.getName()}, но маг невосприимчив к заворожению`); + const damage = this.strength; + target.takeDamage(damage, this); + } else { + Logger.log(`${this.getName()} (Маг) использует (Заворожение) - ${target.getName()} пропускает ход`); + Mage.charmedTargets.add(target); + } + } else { + const damage = this.strength; + Logger.log(`${this.getName()} (Маг) наносит урон ${damage} противнику ${target.getName()}`); + target.takeDamage(damage, this); + } + } + + static shouldSkipTurn(hero: Hero): boolean { + if (Mage.charmedTargets.has(hero)) { + Logger.log(`${hero.getName()} пропускает ход из-за заворожения`); + Mage.charmedTargets.delete(hero); + return true; + } + return false; + } + + getType(): string { + return 'Маг'; + } +} \ No newline at end of file diff --git a/rpgsaga/src/types/types.ts b/rpgsaga/src/types/types.ts new file mode 100644 index 0000000..c727251 --- /dev/null +++ b/rpgsaga/src/types/types.ts @@ -0,0 +1,12 @@ +export type Stats = { + health: number; + strength: number; + name: string; +}; + +export type Effect = { + type: 'fire' | 'ice' | 'poison'; + damage: number; + duration: number; + startTurn: number; +}; \ No newline at end of file diff --git a/rpgsaga/src/utils/Logger.ts b/rpgsaga/src/utils/Logger.ts new file mode 100644 index 0000000..841cf2d --- /dev/null +++ b/rpgsaga/src/utils/Logger.ts @@ -0,0 +1,16 @@ +export class Logger { + private static logs: string[] = []; + + static log(message: string): void { + console.log(message); + this.logs.push(message); + } + + static clear(): void { + this.logs = []; + } + + static getLogs(): string[] { + return [...this.logs]; + } +} \ No newline at end of file diff --git a/rpgsaga/tests/Game.test.ts b/rpgsaga/tests/Game.test.ts new file mode 100644 index 0000000..94a6e51 --- /dev/null +++ b/rpgsaga/tests/Game.test.ts @@ -0,0 +1,79 @@ +import { describe, test, expect, beforeEach } from 'vitest'; +import { HeroFactory } from '../src/factories/HeroFactory'; +import { Game } from '../src/game/Game'; +import { Logger } from '../src/utils/Logger'; + +describe('RPG Saga Tests', () => { + beforeEach(() => { + Logger.clear(); + }); + + test('Создание героев через фабрику', () => { + const knight = HeroFactory.createSpecificHero('Рыцарь', 'Тест', 100, 20); + expect(knight.getType()).toBe('Рыцарь'); + expect(knight.getHealth()).toBe(100); + }); + + test('Рыцарь наносит урон', () => { + const knight = HeroFactory.createSpecificHero('Рыцарь', 'Артур', 100, 20); + const target = HeroFactory.createSpecificHero('Маг', 'Враг', 50, 10); + + const initialHealth = target.getHealth(); + knight.attack(target, 0); + expect(target.getHealth()).toBeLessThan(initialHealth); + }); + + test('Маг может использовать заворожение', () => { + const mage = HeroFactory.createSpecificHero('Маг', 'Гэндальф', 100, 20); + const target = HeroFactory.createSpecificHero('Рыцарь', 'Враг', 100, 20); + + let charmUsed = false; + for (let i = 0; i < 20; i++) { + Logger.clear(); + mage.attack(target, 0); + if (Logger.getLogs().some(log => log.includes('Заворожение'))) { + charmUsed = true; + break; + } + } + + expect(charmUsed).toBe(true); + }); + + test('Лучник может использовать огненные стрелы', () => { + const archer = HeroFactory.createSpecificHero('Лучник', 'Леголас', 100, 20); + const target = HeroFactory.createSpecificHero('Рыцарь', 'Враг', 100, 20); + + let fireArrowsUsed = false; + for (let i = 0; i < 20; i++) { + Logger.clear(); + archer.attack(target, 0); + if (Logger.getLogs().some(log => log.includes('Огненные стрелы'))) { + fireArrowsUsed = true; + break; + } + } + + expect(fireArrowsUsed).toBe(true); + }); + + test('Игра с четным количеством игроков', () => { + const heroes = HeroFactory.createRandomHeroes(4); + expect(() => new Game(heroes)).not.toThrow(); + }); + + test('Игра с нечетным количеством игроков выбрасывает ошибку', () => { + const heroes = HeroFactory.createRandomHeroes(3); + expect(() => new Game(heroes)).toThrow('Количество игроков должно быть четным'); + }); + + test('Полный цикл игры', () => { + const heroes = HeroFactory.createRandomHeroes(4); + const game = new Game(heroes); + const winner = game.start(); + + expect(winner).toBeDefined(); + expect(winner.isAlive()).toBe(true); + expect(Logger.getLogs().length).toBeGreaterThan(0); + }); +}); \ No newline at end of file diff --git a/rpgsaga/tests/sum.test.ts b/rpgsaga/tests/sum.test.ts deleted file mode 100644 index ea5fcc7..0000000 --- a/rpgsaga/tests/sum.test.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { describe, expect, it } from "vitest"; - -import { sum } from "../src"; - -describe("Tests for sum function", () => { - it("should sum a and b", () => { - expect(sum(2, 3)).toBe(5); - }); - it("should sum negative numbers", () => { - expect(sum(-1, -2)).toBe(-3); - }); - it("should sum decimal numbers", () => { - expect(sum(0.1, 0.2)).toBeCloseTo(0.3, 10); - }); -}); diff --git a/rpgsaga/yarn.lock b/rpgsaga/yarn.lock new file mode 100644 index 0000000..1ab5c29 --- /dev/null +++ b/rpgsaga/yarn.lock @@ -0,0 +1,2993 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 8 + cacheKey: 10c0 + +"@esbuild/aix-ppc64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/aix-ppc64@npm:0.27.7" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/aix-ppc64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/aix-ppc64@npm:0.28.0" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/android-arm64@npm:0.27.7" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/android-arm64@npm:0.28.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/android-arm@npm:0.27.7" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/android-arm@npm:0.28.0" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/android-x64@npm:0.27.7" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/android-x64@npm:0.28.0" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/darwin-arm64@npm:0.27.7" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/darwin-arm64@npm:0.28.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/darwin-x64@npm:0.27.7" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/darwin-x64@npm:0.28.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/freebsd-arm64@npm:0.27.7" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/freebsd-arm64@npm:0.28.0" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/freebsd-x64@npm:0.27.7" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/freebsd-x64@npm:0.28.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-arm64@npm:0.27.7" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/linux-arm64@npm:0.28.0" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-arm@npm:0.27.7" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/linux-arm@npm:0.28.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-ia32@npm:0.27.7" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/linux-ia32@npm:0.28.0" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-loong64@npm:0.27.7" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/linux-loong64@npm:0.28.0" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-mips64el@npm:0.27.7" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/linux-mips64el@npm:0.28.0" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-ppc64@npm:0.27.7" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/linux-ppc64@npm:0.28.0" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-riscv64@npm:0.27.7" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/linux-riscv64@npm:0.28.0" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-s390x@npm:0.27.7" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/linux-s390x@npm:0.28.0" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-x64@npm:0.27.7" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/linux-x64@npm:0.28.0" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/netbsd-arm64@npm:0.27.7" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/netbsd-arm64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/netbsd-arm64@npm:0.28.0" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/netbsd-x64@npm:0.27.7" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/netbsd-x64@npm:0.28.0" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/openbsd-arm64@npm:0.27.7" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openbsd-arm64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/openbsd-arm64@npm:0.28.0" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/openbsd-x64@npm:0.27.7" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/openbsd-x64@npm:0.28.0" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openharmony-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/openharmony-arm64@npm:0.27.7" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openharmony-arm64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/openharmony-arm64@npm:0.28.0" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/sunos-x64@npm:0.27.7" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/sunos-x64@npm:0.28.0" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/win32-arm64@npm:0.27.7" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/win32-arm64@npm:0.28.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/win32-ia32@npm:0.27.7" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/win32-ia32@npm:0.28.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/win32-x64@npm:0.27.7" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/win32-x64@npm:0.28.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@eslint-community/eslint-utils@npm:^4.8.0, @eslint-community/eslint-utils@npm:^4.9.1": + version: 4.9.1 + resolution: "@eslint-community/eslint-utils@npm:4.9.1" + dependencies: + eslint-visitor-keys: "npm:^3.4.3" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: 10c0/dc4ab5e3e364ef27e33666b11f4b86e1a6c1d7cbf16f0c6ff87b1619b3562335e9201a3d6ce806221887ff780ec9d828962a290bb910759fd40a674686503f02 + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.12.1, @eslint-community/regexpp@npm:^4.12.2": + version: 4.12.2 + resolution: "@eslint-community/regexpp@npm:4.12.2" + checksum: 10c0/fddcbc66851b308478d04e302a4d771d6917a0b3740dc351513c0da9ca2eab8a1adf99f5e0aa7ab8b13fa0df005c81adeee7e63a92f3effd7d367a163b721c2d + languageName: node + linkType: hard + +"@eslint/config-array@npm:^0.21.2": + version: 0.21.2 + resolution: "@eslint/config-array@npm:0.21.2" + dependencies: + "@eslint/object-schema": "npm:^2.1.7" + debug: "npm:^4.3.1" + minimatch: "npm:^3.1.5" + checksum: 10c0/89dfe815d18456177c0a1f238daf4593107fd20298b3598e0103054360d3b8d09d967defd8318f031185d68df1f95cfa68becf1390a9c5c6887665f1475142e3 + languageName: node + linkType: hard + +"@eslint/config-helpers@npm:^0.4.2": + version: 0.4.2 + resolution: "@eslint/config-helpers@npm:0.4.2" + dependencies: + "@eslint/core": "npm:^0.17.0" + checksum: 10c0/92efd7a527b2d17eb1a148409d71d80f9ac160b565ac73ee092252e8bf08ecd08670699f46b306b94f13d22e88ac88a612120e7847570dd7cdc72f234d50dcb4 + languageName: node + linkType: hard + +"@eslint/core@npm:^0.17.0": + version: 0.17.0 + resolution: "@eslint/core@npm:0.17.0" + dependencies: + "@types/json-schema": "npm:^7.0.15" + checksum: 10c0/9a580f2246633bc752298e7440dd942ec421860d1946d0801f0423830e67887e4aeba10ab9a23d281727a978eb93d053d1922a587d502942a713607f40ed704e + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^3.3.5": + version: 3.3.5 + resolution: "@eslint/eslintrc@npm:3.3.5" + dependencies: + ajv: "npm:^6.14.0" + debug: "npm:^4.3.2" + espree: "npm:^10.0.1" + globals: "npm:^14.0.0" + ignore: "npm:^5.2.0" + import-fresh: "npm:^3.2.1" + js-yaml: "npm:^4.1.1" + minimatch: "npm:^3.1.5" + strip-json-comments: "npm:^3.1.1" + checksum: 10c0/9fb9f1ca65e46d6173966e3aaa5bd353e3a65d7f1f582bebf77f578fab7d7960a399fac1ecfb1e7d52bd61f5cefd6531087ca52a3a3c388f2e1b4f1ebd3da8b7 + languageName: node + linkType: hard + +"@eslint/js@npm:9.39.4, @eslint/js@npm:^9.15.0": + version: 9.39.4 + resolution: "@eslint/js@npm:9.39.4" + checksum: 10c0/5aa7dea2cbc5decf7f5e3b0c6f86a084ccee0f792d288ca8e839f8bc1b64e03e227068968e49b26096e6f71fd857ab6e42691d1b993826b9a3883f1bdd7a0e46 + languageName: node + linkType: hard + +"@eslint/object-schema@npm:^2.1.7": + version: 2.1.7 + resolution: "@eslint/object-schema@npm:2.1.7" + checksum: 10c0/936b6e499853d1335803f556d526c86f5fe2259ed241bc665000e1d6353828edd913feed43120d150adb75570cae162cf000b5b0dfc9596726761c36b82f4e87 + languageName: node + linkType: hard + +"@eslint/plugin-kit@npm:^0.4.1": + version: 0.4.1 + resolution: "@eslint/plugin-kit@npm:0.4.1" + dependencies: + "@eslint/core": "npm:^0.17.0" + levn: "npm:^0.4.1" + checksum: 10c0/51600f78b798f172a9915dffb295e2ffb44840d583427bc732baf12ecb963eb841b253300e657da91d890f4b323d10a1bd12934bf293e3018d8bb66fdce5217b + languageName: node + linkType: hard + +"@humanfs/core@npm:^0.19.2": + version: 0.19.2 + resolution: "@humanfs/core@npm:0.19.2" + dependencies: + "@humanfs/types": "npm:^0.15.0" + checksum: 10c0/d0a1d52d7b30c27d49475a53072d1510b81c5803e44b342fb8faf3887f1aa27593a1e6dc76a45268e7892d3f4e198146659281f6b6d55eacf3fd5a38bac30c5c + languageName: node + linkType: hard + +"@humanfs/node@npm:^0.16.6": + version: 0.16.8 + resolution: "@humanfs/node@npm:0.16.8" + dependencies: + "@humanfs/core": "npm:^0.19.2" + "@humanfs/types": "npm:^0.15.0" + "@humanwhocodes/retry": "npm:^0.4.0" + checksum: 10c0/56140579db811af4e160b195d45d0f29acf644d192c93fe24c9e594ebf06f19dfc157494a07c84540b8a071c0e4b37209c2362765d31734f4d0be869c2422e25 + languageName: node + linkType: hard + +"@humanfs/types@npm:^0.15.0": + version: 0.15.0 + resolution: "@humanfs/types@npm:0.15.0" + checksum: 10c0/fc26b9a024b0e55f7eaf64036df94345bf5d36d6a41ef80ef38e78f1f7430ce26cf435af736adae58913baae18eac3f38c18739054a3d379102015978eae862e + languageName: node + linkType: hard + +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 10c0/909b69c3b86d482c26b3359db16e46a32e0fb30bd306a3c176b8313b9e7313dba0f37f519de6aa8b0a1921349e505f259d19475e123182416a506d7f87e7f529 + languageName: node + linkType: hard + +"@humanwhocodes/retry@npm:^0.4.0, @humanwhocodes/retry@npm:^0.4.2": + version: 0.4.3 + resolution: "@humanwhocodes/retry@npm:0.4.3" + checksum: 10c0/3775bb30087d4440b3f7406d5a057777d90e4b9f435af488a4923ef249e93615fb78565a85f173a186a076c7706a81d0d57d563a2624e4de2c5c9c66c486ce42 + languageName: node + linkType: hard + +"@isaacs/fs-minipass@npm:^4.0.0": + version: 4.0.1 + resolution: "@isaacs/fs-minipass@npm:4.0.1" + dependencies: + minipass: "npm:^7.0.4" + checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 + 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 + +"@pkgr/core@npm:^0.2.9": + version: 0.2.9 + resolution: "@pkgr/core@npm:0.2.9" + checksum: 10c0/ac8e4e8138b1a7a4ac6282873aef7389c352f1f8b577b4850778f5182e4a39a5241facbe48361fec817f56d02b51691b383010843fb08b34a8e8ea3614688fd5 + languageName: node + linkType: hard + +"@rollup/rollup-android-arm-eabi@npm:4.60.4": + version: 4.60.4 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.60.4" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@rollup/rollup-android-arm64@npm:4.60.4": + version: 4.60.4 + resolution: "@rollup/rollup-android-arm64@npm:4.60.4" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-arm64@npm:4.60.4": + version: 4.60.4 + resolution: "@rollup/rollup-darwin-arm64@npm:4.60.4" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-x64@npm:4.60.4": + version: 4.60.4 + resolution: "@rollup/rollup-darwin-x64@npm:4.60.4" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-arm64@npm:4.60.4": + version: 4.60.4 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.60.4" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-x64@npm:4.60.4": + version: 4.60.4 + resolution: "@rollup/rollup-freebsd-x64@npm:4.60.4" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-gnueabihf@npm:4.60.4": + version: 4.60.4 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.60.4" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-musleabihf@npm:4.60.4": + version: 4.60.4 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.60.4" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-gnu@npm:4.60.4": + version: 4.60.4 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.60.4" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-musl@npm:4.60.4": + version: 4.60.4 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.60.4" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-loong64-gnu@npm:4.60.4": + version: 4.60.4 + resolution: "@rollup/rollup-linux-loong64-gnu@npm:4.60.4" + conditions: os=linux & cpu=loong64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-loong64-musl@npm:4.60.4": + version: 4.60.4 + resolution: "@rollup/rollup-linux-loong64-musl@npm:4.60.4" + conditions: os=linux & cpu=loong64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-ppc64-gnu@npm:4.60.4": + version: 4.60.4 + resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.60.4" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-ppc64-musl@npm:4.60.4": + version: 4.60.4 + resolution: "@rollup/rollup-linux-ppc64-musl@npm:4.60.4" + conditions: os=linux & cpu=ppc64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-gnu@npm:4.60.4": + version: 4.60.4 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.60.4" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-musl@npm:4.60.4": + version: 4.60.4 + resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.60.4" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-s390x-gnu@npm:4.60.4": + version: 4.60.4 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.60.4" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-gnu@npm:4.60.4": + version: 4.60.4 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.60.4" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-musl@npm:4.60.4": + version: 4.60.4 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.60.4" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-openbsd-x64@npm:4.60.4": + version: 4.60.4 + resolution: "@rollup/rollup-openbsd-x64@npm:4.60.4" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-openharmony-arm64@npm:4.60.4": + version: 4.60.4 + resolution: "@rollup/rollup-openharmony-arm64@npm:4.60.4" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-arm64-msvc@npm:4.60.4": + version: 4.60.4 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.60.4" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-ia32-msvc@npm:4.60.4": + version: 4.60.4 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.60.4" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-gnu@npm:4.60.4": + version: 4.60.4 + resolution: "@rollup/rollup-win32-x64-gnu@npm:4.60.4" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-msvc@npm:4.60.4": + version: 4.60.4 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.60.4" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@types/chai@npm:^5.2.2": + version: 5.2.3 + resolution: "@types/chai@npm:5.2.3" + dependencies: + "@types/deep-eql": "npm:*" + assertion-error: "npm:^2.0.1" + checksum: 10c0/e0ef1de3b6f8045a5e473e867c8565788c444271409d155588504840ad1a53611011f85072188c2833941189400228c1745d78323dac13fcede9c2b28bacfb2f + languageName: node + linkType: hard + +"@types/deep-eql@npm:*": + version: 4.0.2 + resolution: "@types/deep-eql@npm:4.0.2" + checksum: 10c0/bf3f811843117900d7084b9d0c852da9a044d12eb40e6de73b552598a6843c21291a8a381b0532644574beecd5e3491c5ff3a0365ab86b15d59862c025384844 + 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:^1.0.0, @types/estree@npm:^1.0.6": + version: 1.0.9 + resolution: "@types/estree@npm:1.0.9" + checksum: 10c0/3ad3286ca2988cd550dafb8f2ad599c8474868e954fa601a36655bdfefd8039f7c714b8c1c7f2ae219ffbd58bd4660e66fa7479a0120fc02d4777057d4865387 + languageName: node + linkType: hard + +"@types/json-schema@npm:^7.0.15": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db + languageName: node + linkType: hard + +"@types/node@npm:^22.10.0": + version: 22.19.19 + resolution: "@types/node@npm:22.19.19" + dependencies: + undici-types: "npm:~6.21.0" + checksum: 10c0/402e0f088c94cabda3cd721546bd8e4e75e098e0b342f6e03b90ca1e19c28986f9650112c64fcfd09fc8cebc0f8b20291a513153e90489331cf666e1e5503e16 + languageName: node + linkType: hard + +"@typescript-eslint/eslint-plugin@npm:8.59.4": + version: 8.59.4 + resolution: "@typescript-eslint/eslint-plugin@npm:8.59.4" + dependencies: + "@eslint-community/regexpp": "npm:^4.12.2" + "@typescript-eslint/scope-manager": "npm:8.59.4" + "@typescript-eslint/type-utils": "npm:8.59.4" + "@typescript-eslint/utils": "npm:8.59.4" + "@typescript-eslint/visitor-keys": "npm:8.59.4" + ignore: "npm:^7.0.5" + natural-compare: "npm:^1.4.0" + ts-api-utils: "npm:^2.5.0" + peerDependencies: + "@typescript-eslint/parser": ^8.59.4 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: ">=4.8.4 <6.1.0" + checksum: 10c0/53639bb5cbb5cb22d5e8d52c404a217cb1af4b1c3a8f6f3bb15824807b4db4bed49008d3b3f7688295285e764c7aff3b682b56dece3013a81de83f47bdf2b36c + languageName: node + linkType: hard + +"@typescript-eslint/parser@npm:8.59.4": + version: 8.59.4 + resolution: "@typescript-eslint/parser@npm:8.59.4" + dependencies: + "@typescript-eslint/scope-manager": "npm:8.59.4" + "@typescript-eslint/types": "npm:8.59.4" + "@typescript-eslint/typescript-estree": "npm:8.59.4" + "@typescript-eslint/visitor-keys": "npm:8.59.4" + debug: "npm:^4.4.3" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: ">=4.8.4 <6.1.0" + checksum: 10c0/7dccab1bec898aee2c8aa8e08560ce6d439ef174358e98d5d92ee3f8a9fc0b044534ce0eecf57521f284858f937ec968941200c1df9ffd0baa0795bffa3de97d + languageName: node + linkType: hard + +"@typescript-eslint/project-service@npm:8.59.4": + version: 8.59.4 + resolution: "@typescript-eslint/project-service@npm:8.59.4" + dependencies: + "@typescript-eslint/tsconfig-utils": "npm:^8.59.4" + "@typescript-eslint/types": "npm:^8.59.4" + debug: "npm:^4.4.3" + peerDependencies: + typescript: ">=4.8.4 <6.1.0" + checksum: 10c0/ba466e3b4091f79bd9ae8c29591d4858760293c2bc5d355642b9bf04b9c6fcd4418ff255485aaaf005edb84f6aaefeb53a3c1627bbbb70a905a4786d20f0b06a + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:8.59.4": + version: 8.59.4 + resolution: "@typescript-eslint/scope-manager@npm:8.59.4" + dependencies: + "@typescript-eslint/types": "npm:8.59.4" + "@typescript-eslint/visitor-keys": "npm:8.59.4" + checksum: 10c0/0e4701f8c3384c7406f372cb06762d6bf943aba3afe2c231e4e942ee2e8b4cd4e9e7667ec503502dc4a159b826892dbe1487e2a8d143e190c850744b2a329857 + languageName: node + linkType: hard + +"@typescript-eslint/tsconfig-utils@npm:8.59.4, @typescript-eslint/tsconfig-utils@npm:^8.59.4": + version: 8.59.4 + resolution: "@typescript-eslint/tsconfig-utils@npm:8.59.4" + peerDependencies: + typescript: ">=4.8.4 <6.1.0" + checksum: 10c0/ef6cf20eb93cb5e12439bc9713f5d9c619d516aefd3ecd4f111d9b23ef9f36e5c13f1bbcd55faa6a4b788b146b2a8724a418504107d4d377d0463f419fe9e1f3 + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:8.59.4": + version: 8.59.4 + resolution: "@typescript-eslint/type-utils@npm:8.59.4" + dependencies: + "@typescript-eslint/types": "npm:8.59.4" + "@typescript-eslint/typescript-estree": "npm:8.59.4" + "@typescript-eslint/utils": "npm:8.59.4" + debug: "npm:^4.4.3" + ts-api-utils: "npm:^2.5.0" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: ">=4.8.4 <6.1.0" + checksum: 10c0/93b1a96c395b22da81990655d2fc86d627f5ad815d33faa474b83463c27d34de86a8efedce6cd911d479fcfdc5a758476efa350933f5f97a4181fd226c4ccb6d + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:8.59.4, @typescript-eslint/types@npm:^8.59.4": + version: 8.59.4 + resolution: "@typescript-eslint/types@npm:8.59.4" + checksum: 10c0/5bb831f9acf98057b3dce6ebfc1df5f1796e701cdf035e71fdee6d0bb7f7e7d9c428bac38f46db4e08381ad8903424fcfbe55bcae223a6244b9133de8e0be190 + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:8.59.4": + version: 8.59.4 + resolution: "@typescript-eslint/typescript-estree@npm:8.59.4" + dependencies: + "@typescript-eslint/project-service": "npm:8.59.4" + "@typescript-eslint/tsconfig-utils": "npm:8.59.4" + "@typescript-eslint/types": "npm:8.59.4" + "@typescript-eslint/visitor-keys": "npm:8.59.4" + debug: "npm:^4.4.3" + minimatch: "npm:^10.2.2" + semver: "npm:^7.7.3" + tinyglobby: "npm:^0.2.15" + ts-api-utils: "npm:^2.5.0" + peerDependencies: + typescript: ">=4.8.4 <6.1.0" + checksum: 10c0/2f427f9ba3ea1c7d1f476883f9769827c7082ff3cefcb189dcdb2dc33b16fa459e40894152d42583df90d0ed1041a1043830ecba5326c0b1de6becb9cf22fcee + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:8.59.4": + version: 8.59.4 + resolution: "@typescript-eslint/utils@npm:8.59.4" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.9.1" + "@typescript-eslint/scope-manager": "npm:8.59.4" + "@typescript-eslint/types": "npm:8.59.4" + "@typescript-eslint/typescript-estree": "npm:8.59.4" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: ">=4.8.4 <6.1.0" + checksum: 10c0/f2e7f6237defd49e578731762e8736e7316e4873e326d48ec56651dcd0204962367f3e91692939e1636f443a8ded524336b7ee0874b6267940e77f5dc8fce175 + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:8.59.4": + version: 8.59.4 + resolution: "@typescript-eslint/visitor-keys@npm:8.59.4" + dependencies: + "@typescript-eslint/types": "npm:8.59.4" + eslint-visitor-keys: "npm:^5.0.0" + checksum: 10c0/fcef4078988d725f0e56104038cc903d78cb5527e10e4da2c29ae7cb65e5b46c6a8f3f20d2be3e83b4cbaf27a723d1d2b31027006b5f1d43bf1fb0baed8e7641 + languageName: node + linkType: hard + +"@vitest/expect@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/expect@npm:3.2.4" + dependencies: + "@types/chai": "npm:^5.2.2" + "@vitest/spy": "npm:3.2.4" + "@vitest/utils": "npm:3.2.4" + chai: "npm:^5.2.0" + tinyrainbow: "npm:^2.0.0" + checksum: 10c0/7586104e3fd31dbe1e6ecaafb9a70131e4197dce2940f727b6a84131eee3decac7b10f9c7c72fa5edbdb68b6f854353bd4c0fa84779e274207fb7379563b10db + languageName: node + linkType: hard + +"@vitest/mocker@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/mocker@npm:3.2.4" + dependencies: + "@vitest/spy": "npm:3.2.4" + estree-walker: "npm:^3.0.3" + magic-string: "npm:^0.30.17" + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + checksum: 10c0/f7a4aea19bbbf8f15905847ee9143b6298b2c110f8b64789224cb0ffdc2e96f9802876aa2ca83f1ec1b6e1ff45e822abb34f0054c24d57b29ab18add06536ccd + languageName: node + linkType: hard + +"@vitest/pretty-format@npm:3.2.4, @vitest/pretty-format@npm:^3.2.4": + version: 3.2.4 + resolution: "@vitest/pretty-format@npm:3.2.4" + dependencies: + tinyrainbow: "npm:^2.0.0" + checksum: 10c0/5ad7d4278e067390d7d633e307fee8103958806a419ca380aec0e33fae71b44a64415f7a9b4bc11635d3c13d4a9186111c581d3cef9c65cc317e68f077456887 + languageName: node + linkType: hard + +"@vitest/runner@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/runner@npm:3.2.4" + dependencies: + "@vitest/utils": "npm:3.2.4" + pathe: "npm:^2.0.3" + strip-literal: "npm:^3.0.0" + checksum: 10c0/e8be51666c72b3668ae3ea348b0196656a4a5adb836cb5e270720885d9517421815b0d6c98bfdf1795ed02b994b7bfb2b21566ee356a40021f5bf4f6ed4e418a + languageName: node + linkType: hard + +"@vitest/snapshot@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/snapshot@npm:3.2.4" + dependencies: + "@vitest/pretty-format": "npm:3.2.4" + magic-string: "npm:^0.30.17" + pathe: "npm:^2.0.3" + checksum: 10c0/f8301a3d7d1559fd3d59ed51176dd52e1ed5c2d23aa6d8d6aa18787ef46e295056bc726a021698d8454c16ed825ecba163362f42fa90258bb4a98cfd2c9424fc + languageName: node + linkType: hard + +"@vitest/spy@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/spy@npm:3.2.4" + dependencies: + tinyspy: "npm:^4.0.3" + checksum: 10c0/6ebf0b4697dc238476d6b6a60c76ba9eb1dd8167a307e30f08f64149612fd50227682b876420e4c2e09a76334e73f72e3ebf0e350714dc22474258292e202024 + languageName: node + linkType: hard + +"@vitest/utils@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/utils@npm:3.2.4" + dependencies: + "@vitest/pretty-format": "npm:3.2.4" + loupe: "npm:^3.1.4" + tinyrainbow: "npm:^2.0.0" + checksum: 10c0/024a9b8c8bcc12cf40183c246c244b52ecff861c6deb3477cbf487ac8781ad44c68a9c5fd69f8c1361878e55b97c10d99d511f2597f1f7244b5e5101d028ba64 + languageName: node + linkType: hard + +"abbrev@npm:^4.0.0": + version: 4.0.0 + resolution: "abbrev@npm:4.0.0" + checksum: 10c0/b4cc16935235e80702fc90192e349e32f8ef0ed151ef506aa78c81a7c455ec18375c4125414b99f84b2e055199d66383e787675f0bcd87da7a4dbd59f9eac1d5 + languageName: node + linkType: hard + +"acorn-jsx@npm:^5.3.2": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 10c0/4c54868fbef3b8d58927d5e33f0a4de35f59012fe7b12cf9dfbb345fb8f46607709e1c4431be869a23fb63c151033d84c4198fa9f79385cec34fcb1dd53974c1 + languageName: node + linkType: hard + +"acorn@npm:^8.15.0": + version: 8.16.0 + resolution: "acorn@npm:8.16.0" + bin: + acorn: bin/acorn + checksum: 10c0/c9c52697227661b68d0debaf972222d4f622aa06b185824164e153438afa7b08273432ca43ea792cadb24dada1d46f6f6bb1ef8de9956979288cc1b96bf9914e + languageName: node + linkType: hard + +"ajv@npm:^6.14.0": + version: 6.15.0 + resolution: "ajv@npm:6.15.0" + dependencies: + fast-deep-equal: "npm:^3.1.1" + fast-json-stable-stringify: "npm:^2.0.0" + json-schema-traverse: "npm:^0.4.1" + uri-js: "npm:^4.2.2" + checksum: 10c0/67966499dd272ecde1c2e467084411132891523d057487587879d39ac04207f4351b7b2324c83198013967fbfa632c1612adc960114a30770fbe07a0773b32c2 + languageName: node + linkType: hard + +"ansi-escapes@npm:^7.0.0": + version: 7.3.0 + resolution: "ansi-escapes@npm:7.3.0" + dependencies: + environment: "npm:^1.0.0" + checksum: 10c0/068961d99f0ef28b661a4a9f84a5d645df93ccf3b9b93816cc7d46bbe1913321d4cdf156bb842a4e1e4583b7375c631fa963efb43001c4eb7ff9ab8f78fc0679 + languageName: node + linkType: hard + +"ansi-regex@npm:^6.2.2": + version: 6.2.2 + resolution: "ansi-regex@npm:6.2.2" + checksum: 10c0/05d4acb1d2f59ab2cf4b794339c7b168890d44dda4bf0ce01152a8da0213aca207802f930442ce8cd22d7a92f44907664aac6508904e75e038fa944d2601b30f + languageName: node + linkType: hard + +"ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: "npm:^2.0.1" + checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.0.0, ansi-styles@npm:^6.2.1": + version: 6.2.3 + resolution: "ansi-styles@npm:6.2.3" + checksum: 10c0/23b8a4ce14e18fb854693b95351e286b771d23d8844057ed2e7d083cd3e708376c3323707ec6a24365f7d7eda3ca00327fe04092e29e551499ec4c8b7bfac868 + languageName: node + linkType: hard + +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 10c0/c5640c2d89045371c7cedd6a70212a04e360fd34d6edeae32f6952c63949e3525ea77dbec0289d8213a99bbaeab5abfa860b5c12cf88a2e6cf8106e90dd27a7e + 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 + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee + languageName: node + linkType: hard + +"balanced-match@npm:^4.0.2": + version: 4.0.4 + resolution: "balanced-match@npm:4.0.4" + checksum: 10c0/07e86102a3eb2ee2a6a1a89164f29d0dbaebd28f2ca3f5ca786f36b8b23d9e417eb3be45a4acf754f837be5ac0a2317de90d3fcb7f4f4dc95720a1f36b26a17b + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.14 + resolution: "brace-expansion@npm:1.1.14" + dependencies: + balanced-match: "npm:^1.0.0" + concat-map: "npm:0.0.1" + checksum: 10c0/b6fdac832bc4e36a753658c9ed052c2e1a2be221763b002df25d1efbf7d21724334e726a6cd5eadc72a4b19ec3efb632d629cc003bc9c62f7af7a7915ffa4385 + languageName: node + linkType: hard + +"brace-expansion@npm:^5.0.5": + version: 5.0.6 + resolution: "brace-expansion@npm:5.0.6" + dependencies: + balanced-match: "npm:^4.0.2" + checksum: 10c0/8c919869b90f61d533b341d3340be5ee4413232ea89b8246cbc2f38eb014f1d8182785c98a006eaf6111d02dc9eeffefdc240d5ac158625b2ed084dccd4bbf9b + languageName: node + linkType: hard + +"braces@npm:^3.0.3": + version: 3.0.3 + resolution: "braces@npm:3.0.3" + dependencies: + fill-range: "npm:^7.1.1" + checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 + 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 + +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 + languageName: node + linkType: hard + +"chai@npm:^5.2.0": + 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:^4.0.0": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 + languageName: node + linkType: hard + +"chalk@npm:^5.4.1": + version: 5.6.2 + resolution: "chalk@npm:5.6.2" + checksum: 10c0/99a4b0f0e7991796b1e7e3f52dceb9137cae2a9dfc8fc0784a550dc4c558e15ab32ed70b14b21b52beb2679b4892b41a0aa44249bcb996f01e125d58477c6976 + 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 + +"chownr@npm:^3.0.0": + version: 3.0.0 + resolution: "chownr@npm:3.0.0" + checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 + languageName: node + linkType: hard + +"cli-cursor@npm:^5.0.0": + version: 5.0.0 + resolution: "cli-cursor@npm:5.0.0" + dependencies: + restore-cursor: "npm:^5.0.0" + checksum: 10c0/7ec62f69b79f6734ab209a3e4dbdc8af7422d44d360a7cb1efa8a0887bbe466a6e625650c466fe4359aee44dbe2dc0b6994b583d40a05d0808a5cb193641d220 + languageName: node + linkType: hard + +"cli-truncate@npm:^4.0.0": + version: 4.0.0 + resolution: "cli-truncate@npm:4.0.0" + dependencies: + slice-ansi: "npm:^5.0.0" + string-width: "npm:^7.0.0" + checksum: 10c0/d7f0b73e3d9b88cb496e6c086df7410b541b56a43d18ade6a573c9c18bd001b1c3fba1ad578f741a4218fdc794d042385f8ac02c25e1c295a2d8b9f3cb86eb4c + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: "npm:~1.1.4" + checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 + languageName: node + linkType: hard + +"colorette@npm:^2.0.20": + version: 2.0.20 + resolution: "colorette@npm:2.0.20" + checksum: 10c0/e94116ff33b0ff56f3b83b9ace895e5bf87c2a7a47b3401b8c3f3226e050d5ef76cf4072fb3325f9dc24d1698f9b730baf4e05eeaf861d74a1883073f4c98a40 + languageName: node + linkType: hard + +"commander@npm:^13.1.0": + version: 13.1.0 + resolution: "commander@npm:13.1.0" + checksum: 10c0/7b8c5544bba704fbe84b7cab2e043df8586d5c114a4c5b607f83ae5060708940ed0b5bd5838cf8ce27539cde265c1cbd59ce3c8c6b017ed3eec8943e3a415164 + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.3, cross-spawn@npm:^7.0.6": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 + languageName: node + linkType: hard + +"debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.4.0, debug@npm:^4.4.1, debug@npm:^4.4.3": + 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 + +"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-is@npm:^0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: 10c0/7f0ee496e0dff14a573dc6127f14c95061b448b87b995fc96c017ce0a1e66af1675e73f1d6064407975bc4ea6ab679497a29fff7b5b9c4e99cb10797c1ad0b4c + languageName: node + linkType: hard + +"emoji-regex@npm:^10.3.0": + version: 10.6.0 + resolution: "emoji-regex@npm:10.6.0" + checksum: 10c0/1e4aa097bb007301c3b4b1913879ae27327fdc48e93eeefefe3b87e495eb33c5af155300be951b4349ff6ac084f4403dc9eff970acba7c1c572d89396a9a32d7 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 + languageName: node + linkType: hard + +"environment@npm:^1.0.0": + version: 1.1.0 + resolution: "environment@npm:1.1.0" + checksum: 10c0/fb26434b0b581ab397039e51ff3c92b34924a98b2039dcb47e41b7bca577b9dbf134a8eadb364415c74464b682e2d3afe1a4c0eb9873dc44ea814c5d3103331d + languageName: node + linkType: hard + +"es-module-lexer@npm:^1.7.0": + version: 1.7.0 + resolution: "es-module-lexer@npm:1.7.0" + checksum: 10c0/4c935affcbfeba7fb4533e1da10fa8568043df1e3574b869385980de9e2d475ddc36769891936dbb07036edb3c3786a8b78ccf44964cd130dedc1f2c984b6c7b + languageName: node + linkType: hard + +"esbuild@npm:^0.27.0": + version: 0.27.7 + resolution: "esbuild@npm:0.27.7" + dependencies: + "@esbuild/aix-ppc64": "npm:0.27.7" + "@esbuild/android-arm": "npm:0.27.7" + "@esbuild/android-arm64": "npm:0.27.7" + "@esbuild/android-x64": "npm:0.27.7" + "@esbuild/darwin-arm64": "npm:0.27.7" + "@esbuild/darwin-x64": "npm:0.27.7" + "@esbuild/freebsd-arm64": "npm:0.27.7" + "@esbuild/freebsd-x64": "npm:0.27.7" + "@esbuild/linux-arm": "npm:0.27.7" + "@esbuild/linux-arm64": "npm:0.27.7" + "@esbuild/linux-ia32": "npm:0.27.7" + "@esbuild/linux-loong64": "npm:0.27.7" + "@esbuild/linux-mips64el": "npm:0.27.7" + "@esbuild/linux-ppc64": "npm:0.27.7" + "@esbuild/linux-riscv64": "npm:0.27.7" + "@esbuild/linux-s390x": "npm:0.27.7" + "@esbuild/linux-x64": "npm:0.27.7" + "@esbuild/netbsd-arm64": "npm:0.27.7" + "@esbuild/netbsd-x64": "npm:0.27.7" + "@esbuild/openbsd-arm64": "npm:0.27.7" + "@esbuild/openbsd-x64": "npm:0.27.7" + "@esbuild/openharmony-arm64": "npm:0.27.7" + "@esbuild/sunos-x64": "npm:0.27.7" + "@esbuild/win32-arm64": "npm:0.27.7" + "@esbuild/win32-ia32": "npm:0.27.7" + "@esbuild/win32-x64": "npm:0.27.7" + 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-arm64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/openharmony-arm64": + 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/ccd51f0555708bc9ff4ec9dc3ac92d3daacd45ecaac949ca8645984c5c323bf8cefe98c2df307418685e0b4ce37f9a3bdbfe8e3651fe632a0059a436195a17d4 + languageName: node + linkType: hard + +"esbuild@npm:~0.28.0": + version: 0.28.0 + resolution: "esbuild@npm:0.28.0" + dependencies: + "@esbuild/aix-ppc64": "npm:0.28.0" + "@esbuild/android-arm": "npm:0.28.0" + "@esbuild/android-arm64": "npm:0.28.0" + "@esbuild/android-x64": "npm:0.28.0" + "@esbuild/darwin-arm64": "npm:0.28.0" + "@esbuild/darwin-x64": "npm:0.28.0" + "@esbuild/freebsd-arm64": "npm:0.28.0" + "@esbuild/freebsd-x64": "npm:0.28.0" + "@esbuild/linux-arm": "npm:0.28.0" + "@esbuild/linux-arm64": "npm:0.28.0" + "@esbuild/linux-ia32": "npm:0.28.0" + "@esbuild/linux-loong64": "npm:0.28.0" + "@esbuild/linux-mips64el": "npm:0.28.0" + "@esbuild/linux-ppc64": "npm:0.28.0" + "@esbuild/linux-riscv64": "npm:0.28.0" + "@esbuild/linux-s390x": "npm:0.28.0" + "@esbuild/linux-x64": "npm:0.28.0" + "@esbuild/netbsd-arm64": "npm:0.28.0" + "@esbuild/netbsd-x64": "npm:0.28.0" + "@esbuild/openbsd-arm64": "npm:0.28.0" + "@esbuild/openbsd-x64": "npm:0.28.0" + "@esbuild/openharmony-arm64": "npm:0.28.0" + "@esbuild/sunos-x64": "npm:0.28.0" + "@esbuild/win32-arm64": "npm:0.28.0" + "@esbuild/win32-ia32": "npm:0.28.0" + "@esbuild/win32-x64": "npm:0.28.0" + 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-arm64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/openharmony-arm64": + 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/8acd95c238ec6c4a9d16163277faf228a8994b642d187b3fe667ffbb469008e6748cde144fdc3c175bf8e78ee49e15a0ed9b9f183fdb5fcea1772f87fb1372a4 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 10c0/9497d4dd307d845bd7f75180d8188bb17ea8c151c1edbf6b6717c100e104d629dc2dfb687686181b0f4b7d732c7dfdc4d5e7a8ff72de1b0ca283a75bbb3a9cd9 + languageName: node + linkType: hard + +"eslint-config-prettier@npm:^10.0.1": + version: 10.1.8 + resolution: "eslint-config-prettier@npm:10.1.8" + peerDependencies: + eslint: ">=7.0.0" + bin: + eslint-config-prettier: bin/cli.js + checksum: 10c0/e1bcfadc9eccd526c240056b1e59c5cd26544fe59feb85f38f4f1f116caed96aea0b3b87868e68b3099e55caaac3f2e5b9f58110f85db893e83a332751192682 + languageName: node + linkType: hard + +"eslint-plugin-prettier@npm:^5.5.5": + version: 5.5.5 + resolution: "eslint-plugin-prettier@npm:5.5.5" + dependencies: + prettier-linter-helpers: "npm:^1.0.1" + synckit: "npm:^0.11.12" + peerDependencies: + "@types/eslint": ">=8.0.0" + eslint: ">=8.0.0" + eslint-config-prettier: ">= 7.0.0 <10.0.0 || >=10.1.0" + prettier: ">=3.0.0" + peerDependenciesMeta: + "@types/eslint": + optional: true + eslint-config-prettier: + optional: true + checksum: 10c0/091449b28c77ab2efbbf674e977181f2c8453d95a4df68218bddd87a4dfaa9ecc4eda60164e416f5986fb5d577e66e8d8e1e23d81e8555f8d735375598b03257 + languageName: node + linkType: hard + +"eslint-scope@npm:^8.4.0": + version: 8.4.0 + resolution: "eslint-scope@npm:8.4.0" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^5.2.0" + checksum: 10c0/407f6c600204d0f3705bd557f81bd0189e69cd7996f408f8971ab5779c0af733d1af2f1412066b40ee1588b085874fc37a2333986c6521669cdbdd36ca5058e0 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^4.2.1": + version: 4.2.1 + resolution: "eslint-visitor-keys@npm:4.2.1" + checksum: 10c0/fcd43999199d6740db26c58dbe0c2594623e31ca307e616ac05153c9272f12f1364f5a0b1917a8e962268fdecc6f3622c1c2908b4fcc2e047a106fe6de69dc43 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^5.0.0": + version: 5.0.1 + resolution: "eslint-visitor-keys@npm:5.0.1" + checksum: 10c0/16190bdf2cbae40a1109384c94450c526a79b0b9c3cb21e544256ed85ac48a4b84db66b74a6561d20fe6ab77447f150d711c2ad5ad74df4fcc133736bce99678 + languageName: node + linkType: hard + +"eslint@npm:^9.15.0": + version: 9.39.4 + resolution: "eslint@npm:9.39.4" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.8.0" + "@eslint-community/regexpp": "npm:^4.12.1" + "@eslint/config-array": "npm:^0.21.2" + "@eslint/config-helpers": "npm:^0.4.2" + "@eslint/core": "npm:^0.17.0" + "@eslint/eslintrc": "npm:^3.3.5" + "@eslint/js": "npm:9.39.4" + "@eslint/plugin-kit": "npm:^0.4.1" + "@humanfs/node": "npm:^0.16.6" + "@humanwhocodes/module-importer": "npm:^1.0.1" + "@humanwhocodes/retry": "npm:^0.4.2" + "@types/estree": "npm:^1.0.6" + ajv: "npm:^6.14.0" + chalk: "npm:^4.0.0" + cross-spawn: "npm:^7.0.6" + debug: "npm:^4.3.2" + escape-string-regexp: "npm:^4.0.0" + eslint-scope: "npm:^8.4.0" + eslint-visitor-keys: "npm:^4.2.1" + espree: "npm:^10.4.0" + esquery: "npm:^1.5.0" + esutils: "npm:^2.0.2" + fast-deep-equal: "npm:^3.1.3" + file-entry-cache: "npm:^8.0.0" + find-up: "npm:^5.0.0" + glob-parent: "npm:^6.0.2" + ignore: "npm:^5.2.0" + imurmurhash: "npm:^0.1.4" + is-glob: "npm:^4.0.0" + json-stable-stringify-without-jsonify: "npm:^1.0.1" + lodash.merge: "npm:^4.6.2" + minimatch: "npm:^3.1.5" + natural-compare: "npm:^1.4.0" + optionator: "npm:^0.9.3" + peerDependencies: + jiti: "*" + peerDependenciesMeta: + jiti: + optional: true + bin: + eslint: bin/eslint.js + checksum: 10c0/1955067c2d991f0c84f4c4abfafe31bb47fa3b717a7fd3e43fe1e511c6f859d7700cbca969f85661dc4c130f7aeced5e5444884314198a54428f5e5141db9337 + languageName: node + linkType: hard + +"espree@npm:^10.0.1, espree@npm:^10.4.0": + version: 10.4.0 + resolution: "espree@npm:10.4.0" + dependencies: + acorn: "npm:^8.15.0" + acorn-jsx: "npm:^5.3.2" + eslint-visitor-keys: "npm:^4.2.1" + checksum: 10c0/c63fe06131c26c8157b4083313cb02a9a54720a08e21543300e55288c40e06c3fc284bdecf108d3a1372c5934a0a88644c98714f38b6ae8ed272b40d9ea08d6b + languageName: node + linkType: hard + +"esquery@npm:^1.5.0": + version: 1.7.0 + resolution: "esquery@npm:1.7.0" + dependencies: + estraverse: "npm:^5.1.0" + checksum: 10c0/77d5173db450b66f3bc685d11af4c90cffeedb340f34a39af96d43509a335ce39c894fd79233df32d38f5e4e219fa0f7076f6ec90bae8320170ba082c0db4793 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: "npm:^5.2.0" + checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 + languageName: node + linkType: hard + +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 + 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" + checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 + languageName: node + linkType: hard + +"eventemitter3@npm:^5.0.1": + version: 5.0.4 + resolution: "eventemitter3@npm:5.0.4" + checksum: 10c0/575b8cac8d709e1473da46f8f15ef311b57ff7609445a7c71af5cd42598583eee6f098fa7a593e30f27e94b8865642baa0689e8fa97c016f742abdb3b1bf6d9a + languageName: node + linkType: hard + +"execa@npm:^8.0.1": + version: 8.0.1 + resolution: "execa@npm:8.0.1" + dependencies: + cross-spawn: "npm:^7.0.3" + get-stream: "npm:^8.0.1" + human-signals: "npm:^5.0.0" + is-stream: "npm:^3.0.0" + merge-stream: "npm:^2.0.0" + npm-run-path: "npm:^5.1.0" + onetime: "npm:^6.0.0" + signal-exit: "npm:^4.1.0" + strip-final-newline: "npm:^3.0.0" + checksum: 10c0/2c52d8775f5bf103ce8eec9c7ab3059909ba350a5164744e9947ed14a53f51687c040a250bda833f906d1283aa8803975b84e6c8f7a7c42f99dc8ef80250d1af + languageName: node + linkType: hard + +"expect-type@npm:^1.2.1": + 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.3 + resolution: "exponential-backoff@npm:3.1.3" + checksum: 10c0/77e3ae682b7b1f4972f563c6dbcd2b0d54ac679e62d5d32f3e5085feba20483cf28bd505543f520e287a56d4d55a28d7874299941faf637e779a1aa5994d1267 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 + languageName: node + linkType: hard + +"fast-diff@npm:^1.1.2": + version: 1.3.0 + resolution: "fast-diff@npm:1.3.0" + checksum: 10c0/5c19af237edb5d5effda008c891a18a585f74bf12953be57923f17a3a4d0979565fc64dbc73b9e20926b9d895f5b690c618cbb969af0cf022e3222471220ad29 + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:^2.0.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b + languageName: node + linkType: hard + +"fast-levenshtein@npm:^2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: 10c0/111972b37338bcb88f7d9e2c5907862c280ebf4234433b95bc611e518d192ccb2d38119c4ac86e26b668d75f7f3894f4ff5c4982899afced7ca78633b08287c4 + languageName: node + linkType: hard + +"fdir@npm:^6.5.0": + version: 6.5.0 + resolution: "fdir@npm:6.5.0" + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + checksum: 10c0/e345083c4306b3aed6cb8ec551e26c36bab5c511e99ea4576a16750ddc8d3240e63826cc624f5ae17ad4dc82e68a253213b60d556c11bfad064b7607847ed07f + languageName: node + linkType: hard + +"file-entry-cache@npm:^8.0.0": + version: 8.0.0 + resolution: "file-entry-cache@npm:8.0.0" + dependencies: + flat-cache: "npm:^4.0.0" + checksum: 10c0/9e2b5938b1cd9b6d7e3612bdc533afd4ac17b2fc646569e9a8abbf2eb48e5eb8e316bc38815a3ef6a1b456f4107f0d0f055a614ca613e75db6bf9ff4d72c1638 + languageName: node + linkType: hard + +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" + dependencies: + to-regex-range: "npm:^5.0.1" + checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 + languageName: node + linkType: hard + +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: "npm:^6.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a + languageName: node + linkType: hard + +"flat-cache@npm:^4.0.0": + version: 4.0.1 + resolution: "flat-cache@npm:4.0.1" + dependencies: + flatted: "npm:^3.2.9" + keyv: "npm:^4.5.4" + checksum: 10c0/2c59d93e9faa2523e4fda6b4ada749bed432cfa28c8e251f33b25795e426a1c6dbada777afb1f74fcfff33934fdbdea921ee738fcc33e71adc9d6eca984a1cfc + languageName: node + linkType: hard + +"flatted@npm:^3.2.9": + version: 3.4.2 + resolution: "flatted@npm:3.4.2" + checksum: 10c0/a65b67aae7172d6cdf63691be7de6c5cd5adbdfdfe2e9da1a09b617c9512ed794037741ee53d93114276bff3f93cd3b0d97d54f9b316e1e4885dde6e9ffdf7ed + languageName: node + linkType: hard + +"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + +"get-east-asian-width@npm:^1.0.0, get-east-asian-width@npm:^1.3.1": + version: 1.6.0 + resolution: "get-east-asian-width@npm:1.6.0" + checksum: 10c0/7e72e9550fd49ca5b246f9af6bb2afc129c96412845ff6556b3274fd44817a381702ca17028efe9866b261a3d44254cbf21e6c90cf05b4b61675630af776d431 + languageName: node + linkType: hard + +"get-stream@npm:^8.0.1": + version: 8.0.1 + resolution: "get-stream@npm:8.0.1" + checksum: 10c0/5c2181e98202b9dae0bb4a849979291043e5892eb40312b47f0c22b9414fc9b28a3b6063d2375705eb24abc41ecf97894d9a51f64ff021511b504477b27b4290 + languageName: node + linkType: hard + +"glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: "npm:^4.0.3" + checksum: 10c0/317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8 + languageName: node + linkType: hard + +"globals@npm:^14.0.0": + version: 14.0.0 + resolution: "globals@npm:14.0.0" + checksum: 10c0/b96ff42620c9231ad468d4c58ff42afee7777ee1c963013ff8aabe095a451d0ceeb8dcd8ef4cbd64d2538cef45f787a78ba3a9574f4a634438963e334471302d + languageName: node + linkType: hard + +"graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 + languageName: node + linkType: hard + +"human-signals@npm:^5.0.0": + version: 5.0.0 + resolution: "human-signals@npm:5.0.0" + checksum: 10c0/5a9359073fe17a8b58e5a085e9a39a950366d9f00217c4ff5878bd312e09d80f460536ea6a3f260b5943a01fe55c158d1cea3fc7bee3d0520aeef04f6d915c82 + languageName: node + linkType: hard + +"husky@npm:^9.1.7": + version: 9.1.7 + resolution: "husky@npm:9.1.7" + bin: + husky: bin.js + checksum: 10c0/35bb110a71086c48906aa7cd3ed4913fb913823715359d65e32e0b964cb1e255593b0ae8014a5005c66a68e6fa66c38dcfa8056dbbdfb8b0187c0ffe7ee3a58f + languageName: node + linkType: hard + +"ignore@npm:^5.2.0": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 + languageName: node + linkType: hard + +"ignore@npm:^7.0.5": + version: 7.0.5 + resolution: "ignore@npm:7.0.5" + checksum: 10c0/ae00db89fe873064a093b8999fe4cc284b13ef2a178636211842cceb650b9c3e390d3339191acb145d81ed5379d2074840cf0c33a20bdbd6f32821f79eb4ad5d + languageName: node + linkType: hard + +"import-fresh@npm:^3.2.1": + version: 3.3.1 + resolution: "import-fresh@npm:3.3.1" + dependencies: + parent-module: "npm:^1.0.0" + resolve-from: "npm:^4.0.0" + checksum: 10c0/bf8cc494872fef783249709385ae883b447e3eb09db0ebd15dcead7d9afe7224dad7bd7591c6b73b0b19b3c0f9640eb8ee884f01cfaf2887ab995b0b36a0cbec + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^4.0.0": + version: 4.0.0 + resolution: "is-fullwidth-code-point@npm:4.0.0" + checksum: 10c0/df2a717e813567db0f659c306d61f2f804d480752526886954a2a3e2246c7745fd07a52b5fecf2b68caf0a6c79dcdace6166fdf29cc76ed9975cc334f0a018b8 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^5.0.0": + version: 5.1.0 + resolution: "is-fullwidth-code-point@npm:5.1.0" + dependencies: + get-east-asian-width: "npm:^1.3.1" + checksum: 10c0/c1172c2e417fb73470c56c431851681591f6a17233603a9e6f94b7ba870b2e8a5266506490573b607fb1081318589372034aa436aec07b465c2029c0bc7f07a4 + languageName: node + linkType: hard + +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.3": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: "npm:^2.1.1" + checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 + languageName: node + linkType: hard + +"is-stream@npm:^3.0.0": + version: 3.0.0 + resolution: "is-stream@npm:3.0.0" + checksum: 10c0/eb2f7127af02ee9aa2a0237b730e47ac2de0d4e76a4a905a50a11557f2339df5765eaea4ceb8029f1efa978586abe776908720bfcb1900c20c6ec5145f6f29d8 + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d + languageName: node + linkType: hard + +"isexe@npm:^4.0.0": + version: 4.0.0 + resolution: "isexe@npm:4.0.0" + checksum: 10c0/5884815115bceac452877659a9c7726382531592f43dc29e5d48b7c4100661aed54018cb90bd36cb2eaeba521092570769167acbb95c18d39afdccbcca06c5ce + languageName: node + linkType: hard + +"js-tokens@npm:^9.0.1": + version: 9.0.1 + resolution: "js-tokens@npm:9.0.1" + checksum: 10c0/68dcab8f233dde211a6b5fd98079783cbcd04b53617c1250e3553ee16ab3e6134f5e65478e41d82f6d351a052a63d71024553933808570f04dbf828d7921e80e + languageName: node + linkType: hard + +"js-yaml@npm:^4.1.1": + version: 4.1.1 + resolution: "js-yaml@npm:4.1.1" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/561c7d7088c40a9bb53cc75becbfb1df6ae49b34b5e6e5a81744b14ae8667ec564ad2527709d1a6e7d5e5fa6d483aa0f373a50ad98d42fde368ec4a190d4fae7 + languageName: node + linkType: hard + +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 10c0/0d1c91569d9588e7eef2b49b59851f297f3ab93c7b35c7c221e288099322be6b562767d11e4821da500f3219542b9afd2e54c5dc573107c1126ed1080f8e96d7 + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce + languageName: node + linkType: hard + +"json-stable-stringify-without-jsonify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" + checksum: 10c0/cb168b61fd4de83e58d09aaa6425ef71001bae30d260e2c57e7d09a5fd82223e2f22a042dedaab8db23b7d9ae46854b08bb1f91675a8be11c5cffebef5fb66a5 + languageName: node + linkType: hard + +"keyv@npm:^4.5.4": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: "npm:3.0.1" + checksum: 10c0/aa52f3c5e18e16bb6324876bb8b59dd02acf782a4b789c7b2ae21107fab95fab3890ed448d4f8dba80ce05391eeac4bfabb4f02a20221342982f806fa2cf271e + languageName: node + linkType: hard + +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: "npm:^1.2.1" + type-check: "npm:~0.4.0" + checksum: 10c0/effb03cad7c89dfa5bd4f6989364bfc79994c2042ec5966cb9b95990e2edee5cd8969ddf42616a0373ac49fac1403437deaf6e9050fbbaa3546093a59b9ac94e + languageName: node + linkType: hard + +"lilconfig@npm:^3.1.3": + version: 3.1.3 + resolution: "lilconfig@npm:3.1.3" + checksum: 10c0/f5604e7240c5c275743561442fbc5abf2a84ad94da0f5adc71d25e31fa8483048de3dcedcb7a44112a942fed305fd75841cdf6c9681c7f640c63f1049e9a5dcc + languageName: node + linkType: hard + +"lint-staged@npm:^15.5.2": + version: 15.5.2 + resolution: "lint-staged@npm:15.5.2" + dependencies: + chalk: "npm:^5.4.1" + commander: "npm:^13.1.0" + debug: "npm:^4.4.0" + execa: "npm:^8.0.1" + lilconfig: "npm:^3.1.3" + listr2: "npm:^8.2.5" + micromatch: "npm:^4.0.8" + pidtree: "npm:^0.6.0" + string-argv: "npm:^0.3.2" + yaml: "npm:^2.7.0" + bin: + lint-staged: bin/lint-staged.js + checksum: 10c0/618386254600ada3af3672486a9d082250108245e7c0863d9dfe0a21e7764e3b2eb6416b0f8970e548f4e9d368637331598b27df5a1306925feabbaf16a667e1 + languageName: node + linkType: hard + +"listr2@npm:^8.2.5": + version: 8.3.3 + resolution: "listr2@npm:8.3.3" + dependencies: + cli-truncate: "npm:^4.0.0" + colorette: "npm:^2.0.20" + eventemitter3: "npm:^5.0.1" + log-update: "npm:^6.1.0" + rfdc: "npm:^1.4.1" + wrap-ansi: "npm:^9.0.0" + checksum: 10c0/0792f8a7fd482fa516e21689e012e07081cab3653172ca606090622cfa0024c784a1eba8095a17948a0e9a4aa98a80f7c9c90f78a0dd35173d6802f9cc123a82 + languageName: node + linkType: hard + +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: "npm:^5.0.0" + checksum: 10c0/d3972ab70dfe58ce620e64265f90162d247e87159b6126b01314dd67be43d50e96a50b517bce2d9452a79409c7614054c277b5232377de50416564a77ac7aad3 + languageName: node + linkType: hard + +"lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: 10c0/402fa16a1edd7538de5b5903a90228aa48eb5533986ba7fa26606a49db2572bf414ff73a2c9f5d5fd36b31c46a5d5c7e1527749c07cbcf965ccff5fbdf32c506 + languageName: node + linkType: hard + +"log-update@npm:^6.1.0": + version: 6.1.0 + resolution: "log-update@npm:6.1.0" + dependencies: + ansi-escapes: "npm:^7.0.0" + cli-cursor: "npm:^5.0.0" + slice-ansi: "npm:^7.1.0" + strip-ansi: "npm:^7.1.0" + wrap-ansi: "npm:^9.0.0" + checksum: 10c0/4b350c0a83d7753fea34dcac6cd797d1dc9603291565de009baa4aa91c0447eab0d3815a05c8ec9ac04fdfffb43c82adcdb03ec1fceafd8518e1a8c1cff4ff89 + languageName: node + linkType: hard + +"loupe@npm:^3.1.0, loupe@npm:^3.1.4": + version: 3.2.1 + resolution: "loupe@npm:3.2.1" + checksum: 10c0/910c872cba291309664c2d094368d31a68907b6f5913e989d301b5c25f30e97d76d77f23ab3bf3b46d0f601ff0b6af8810c10c31b91d2c6b2f132809ca2cc705 + languageName: node + linkType: hard + +"magic-string@npm:^0.30.17": + 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 + +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 10c0/867fdbb30a6d58b011449b8885601ec1690c3e41c759ecd5a9d609094f7aed0096c37823ff4a7190ef0b8f22cc86beb7049196ff68c016e3b3c671d0dac91ce5 + languageName: node + linkType: hard + +"micromatch@npm:^4.0.8": + version: 4.0.8 + resolution: "micromatch@npm:4.0.8" + dependencies: + braces: "npm:^3.0.3" + picomatch: "npm:^2.3.1" + checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 + languageName: node + linkType: hard + +"mimic-fn@npm:^4.0.0": + version: 4.0.0 + resolution: "mimic-fn@npm:4.0.0" + checksum: 10c0/de9cc32be9996fd941e512248338e43407f63f6d497abe8441fa33447d922e927de54d4cc3c1a3c6d652857acd770389d5a3823f311a744132760ce2be15ccbf + languageName: node + linkType: hard + +"mimic-function@npm:^5.0.0": + version: 5.0.1 + resolution: "mimic-function@npm:5.0.1" + checksum: 10c0/f3d9464dd1816ecf6bdf2aec6ba32c0728022039d992f178237d8e289b48764fee4131319e72eedd4f7f094e22ded0af836c3187a7edc4595d28dd74368fd81d + languageName: node + linkType: hard + +"minimatch@npm:^10.2.2": + version: 10.2.5 + resolution: "minimatch@npm:10.2.5" + dependencies: + brace-expansion: "npm:^5.0.5" + checksum: 10c0/6bb058bd6324104b9ec2f763476a35386d05079c1f5fe4fbf1f324a25237cd4534d6813ecd71f48208f4e635c1221899bef94c3c89f7df55698fe373aaae20fd + languageName: node + linkType: hard + +"minimatch@npm:^3.1.5": + version: 3.1.5 + resolution: "minimatch@npm:3.1.5" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 10c0/2ecbdc0d33f07bddb0315a8b5afbcb761307a8778b48f0b312418ccbced99f104a2d17d8aca7573433c70e8ccd1c56823a441897a45e384ea76ef401a26ace70 + languageName: node + linkType: hard + +"minipass@npm:^7.0.4, minipass@npm:^7.1.2": + version: 7.1.3 + resolution: "minipass@npm:7.1.3" + checksum: 10c0/539da88daca16533211ea5a9ee98dc62ff5742f531f54640dd34429e621955e91cc280a91a776026264b7f9f6735947629f920944e9c1558369e8bf22eb33fbb + languageName: node + linkType: hard + +"minizlib@npm:^3.1.0": + version: 3.1.0 + resolution: "minizlib@npm:3.1.0" + dependencies: + minipass: "npm:^7.1.2" + checksum: 10c0/5aad75ab0090b8266069c9aabe582c021ae53eb33c6c691054a13a45db3b4f91a7fb1bd79151e6b4e9e9a86727b522527c0a06ec7d45206b745d54cd3097bcec + languageName: node + linkType: hard + +"ms@npm:^2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 + languageName: node + linkType: hard + +"nanoid@npm:^3.3.12": + version: 3.3.12 + resolution: "nanoid@npm:3.3.12" + bin: + nanoid: bin/nanoid.cjs + checksum: 10c0/ba142b7b39e11e80c16dd74b0365d407880c87c1cf7e1480956981ae940ee36060fa5b6f092cd1e315184dd19244c657bd017d03327bd3c62247d691c5e8edfb + languageName: node + linkType: hard + +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: 10c0/f5f9a7974bfb28a91afafa254b197f0f22c684d4a1731763dda960d2c8e375b36c7d690e0d9dc8fba774c537af14a7e979129bca23d88d052fbeb9466955e447 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 12.3.0 + resolution: "node-gyp@npm:12.3.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + graceful-fs: "npm:^4.2.6" + nopt: "npm:^9.0.0" + proc-log: "npm:^6.0.0" + semver: "npm:^7.3.5" + tar: "npm:^7.5.4" + tinyglobby: "npm:^0.2.12" + undici: "npm:^6.25.0" + which: "npm:^6.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/9d9032b405cbe42f72a105259d9eb679376470c102df4a2dbaa51e07d59bf741dcffb85897087ea9d8318b9cabb824a8978af51508ae142f0239ae1e6a3c2329 + languageName: node + linkType: hard + +"nopt@npm:^9.0.0": + version: 9.0.0 + resolution: "nopt@npm:9.0.0" + dependencies: + abbrev: "npm:^4.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/1822eb6f9b020ef6f7a7516d7b64a8036e09666ea55ac40416c36e4b2b343122c3cff0e2f085675f53de1d2db99a2a89a60ccea1d120bcd6a5347bf6ceb4a7fd + languageName: node + linkType: hard + +"npm-run-path@npm:^5.1.0": + version: 5.3.0 + resolution: "npm-run-path@npm:5.3.0" + dependencies: + path-key: "npm:^4.0.0" + checksum: 10c0/124df74820c40c2eb9a8612a254ea1d557ddfab1581c3e751f825e3e366d9f00b0d76a3c94ecd8398e7f3eee193018622677e95816e8491f0797b21e30b2deba + languageName: node + linkType: hard + +"onetime@npm:^6.0.0": + version: 6.0.0 + resolution: "onetime@npm:6.0.0" + dependencies: + mimic-fn: "npm:^4.0.0" + checksum: 10c0/4eef7c6abfef697dd4479345a4100c382d73c149d2d56170a54a07418c50816937ad09500e1ed1e79d235989d073a9bade8557122aee24f0576ecde0f392bb6c + languageName: node + linkType: hard + +"onetime@npm:^7.0.0": + version: 7.0.0 + resolution: "onetime@npm:7.0.0" + dependencies: + mimic-function: "npm:^5.0.0" + checksum: 10c0/5cb9179d74b63f52a196a2e7037ba2b9a893245a5532d3f44360012005c9cadb60851d56716ebff18a6f47129dab7168022445df47c2aff3b276d92585ed1221 + languageName: node + linkType: hard + +"optionator@npm:^0.9.3": + version: 0.9.4 + resolution: "optionator@npm:0.9.4" + dependencies: + deep-is: "npm:^0.1.3" + fast-levenshtein: "npm:^2.0.6" + levn: "npm:^0.4.1" + prelude-ls: "npm:^1.2.1" + type-check: "npm:^0.4.0" + word-wrap: "npm:^1.2.5" + checksum: 10c0/4afb687a059ee65b61df74dfe87d8d6815cd6883cb8b3d5883a910df72d0f5d029821f37025e4bccf4048873dbdb09acc6d303d27b8f76b1a80dd5a7d5334675 + languageName: node + linkType: hard + +"p-limit@npm:^3.0.2": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: "npm:^0.1.0" + checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a + languageName: node + linkType: hard + +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: "npm:^3.0.2" + checksum: 10c0/2290d627ab7903b8b70d11d384fee714b797f6040d9278932754a6860845c4d3190603a0772a663c8cb5a7b21d1b16acb3a6487ebcafa9773094edc3dfe6009a + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: "npm:^3.0.0" + checksum: 10c0/c63d6e80000d4babd11978e0d3fee386ca7752a02b035fd2435960ffaa7219dc42146f07069fb65e6e8bf1caef89daf9af7535a39bddf354d78bf50d8294f556 + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c + languageName: node + linkType: hard + +"path-key@npm:^4.0.0": + version: 4.0.0 + resolution: "path-key@npm:4.0.0" + checksum: 10c0/794efeef32863a65ac312f3c0b0a99f921f3e827ff63afa5cb09a377e202c262b671f7b3832a4e64731003fa94af0263713962d317b9887bd1e0c48a342efba3 + languageName: node + linkType: hard + +"pathe@npm:^2.0.3": + version: 2.0.3 + resolution: "pathe@npm:2.0.3" + checksum: 10c0/c118dc5a8b5c4166011b2b70608762e260085180bb9e33e80a50dcdb1e78c010b1624f4280c492c92b05fc276715a4c357d1f9edc570f8f1b3d90b6839ebaca1 + 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 + +"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.3.1": + version: 2.3.2 + resolution: "picomatch@npm:2.3.2" + checksum: 10c0/a554d1709e59be97d1acb9eaedbbc700a5c03dbd4579807baed95100b00420bc729335440ef15004ae2378984e2487a7c1cebd743cfdb72b6fa9ab69223c0d61 + languageName: node + linkType: hard + +"picomatch@npm:^4.0.2, picomatch@npm:^4.0.3, picomatch@npm:^4.0.4": + version: 4.0.4 + resolution: "picomatch@npm:4.0.4" + checksum: 10c0/e2c6023372cc7b5764719a5ffb9da0f8e781212fa7ca4bd0562db929df8e117460f00dff3cb7509dacfc06b86de924b247f504d0ce1806a37fac4633081466b0 + languageName: node + linkType: hard + +"pidtree@npm:^0.6.0": + version: 0.6.0 + resolution: "pidtree@npm:0.6.0" + bin: + pidtree: bin/pidtree.js + checksum: 10c0/0829ec4e9209e230f74ebf4265f5ccc9ebfb488334b525cb13f86ff801dca44b362c41252cd43ae4d7653a10a5c6ab3be39d2c79064d6895e0d78dc50a5ed6e9 + languageName: node + linkType: hard + +"postcss@npm:^8.5.6": + version: 8.5.15 + resolution: "postcss@npm:8.5.15" + dependencies: + nanoid: "npm:^3.3.12" + picocolors: "npm:^1.1.1" + source-map-js: "npm:^1.2.1" + checksum: 10c0/7f2e63ae22fbe43aace1bf652bd99da4e90737c64194d49e51ddc9cd0f9e51ff2861a7d734379b494deffa03a880a5c65eec70bc29ee9ebaa7136dde3eee8f31 + languageName: node + linkType: hard + +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: 10c0/b00d617431e7886c520a6f498a2e14c75ec58f6d93ba48c3b639cf241b54232d90daa05d83a9e9b9fef6baa63cb7e1e4602c2372fea5bc169668401eb127d0cd + languageName: node + linkType: hard + +"prettier-linter-helpers@npm:^1.0.1": + version: 1.0.1 + resolution: "prettier-linter-helpers@npm:1.0.1" + dependencies: + fast-diff: "npm:^1.1.2" + checksum: 10c0/91cea965681bc5f62c9d26bd3ca6358b81557261d4802e96ec1cf0acbd99d4b61632d53320cd2c3ec7d7f7805a81345644108a41ef46ddc9688e783a9ac792d1 + languageName: node + linkType: hard + +"prettier@npm:^3.4.2": + version: 3.8.3 + resolution: "prettier@npm:3.8.3" + bin: + prettier: bin/prettier.cjs + checksum: 10c0/754816fd7593eb80f6376d7476d463e832c38a12f32775a82683adb6e35b772b1f484d65f19401507b983a8c8a7cd5a4a9f12006bd56491e8f35503473f77473 + languageName: node + linkType: hard + +"proc-log@npm:^6.0.0": + version: 6.1.0 + resolution: "proc-log@npm:6.1.0" + checksum: 10c0/4f178d4062733ead9d71a9b1ab24ebcecdfe2250916a5b1555f04fe2eda972a0ec76fbaa8df1ad9c02707add6749219d118a4fc46dc56bdfe4dde4b47d80bb82 + languageName: node + linkType: hard + +"punycode@npm:^2.1.0": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 + languageName: node + linkType: hard + +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: 10c0/8408eec31a3112ef96e3746c37be7d64020cda07c03a920f5024e77290a218ea758b26ca9529fd7b1ad283947f34b2291c1c0f6aa0ed34acfdda9c6014c8d190 + languageName: node + linkType: hard + +"restore-cursor@npm:^5.0.0": + version: 5.1.0 + resolution: "restore-cursor@npm:5.1.0" + dependencies: + onetime: "npm:^7.0.0" + signal-exit: "npm:^4.1.0" + checksum: 10c0/c2ba89131eea791d1b25205bdfdc86699767e2b88dee2a590b1a6caa51737deac8bad0260a5ded2f7c074b7db2f3a626bcf1fcf3cdf35974cbeea5e2e6764f60 + languageName: node + linkType: hard + +"rfdc@npm:^1.4.1": + version: 1.4.1 + resolution: "rfdc@npm:1.4.1" + checksum: 10c0/4614e4292356cafade0b6031527eea9bc90f2372a22c012313be1dcc69a3b90c7338158b414539be863fa95bfcb2ddcd0587be696841af4e6679d85e62c060c7 + languageName: node + linkType: hard + +"rollup@npm:^4.43.0": + version: 4.60.4 + resolution: "rollup@npm:4.60.4" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.60.4" + "@rollup/rollup-android-arm64": "npm:4.60.4" + "@rollup/rollup-darwin-arm64": "npm:4.60.4" + "@rollup/rollup-darwin-x64": "npm:4.60.4" + "@rollup/rollup-freebsd-arm64": "npm:4.60.4" + "@rollup/rollup-freebsd-x64": "npm:4.60.4" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.60.4" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.60.4" + "@rollup/rollup-linux-arm64-gnu": "npm:4.60.4" + "@rollup/rollup-linux-arm64-musl": "npm:4.60.4" + "@rollup/rollup-linux-loong64-gnu": "npm:4.60.4" + "@rollup/rollup-linux-loong64-musl": "npm:4.60.4" + "@rollup/rollup-linux-ppc64-gnu": "npm:4.60.4" + "@rollup/rollup-linux-ppc64-musl": "npm:4.60.4" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.60.4" + "@rollup/rollup-linux-riscv64-musl": "npm:4.60.4" + "@rollup/rollup-linux-s390x-gnu": "npm:4.60.4" + "@rollup/rollup-linux-x64-gnu": "npm:4.60.4" + "@rollup/rollup-linux-x64-musl": "npm:4.60.4" + "@rollup/rollup-openbsd-x64": "npm:4.60.4" + "@rollup/rollup-openharmony-arm64": "npm:4.60.4" + "@rollup/rollup-win32-arm64-msvc": "npm:4.60.4" + "@rollup/rollup-win32-ia32-msvc": "npm:4.60.4" + "@rollup/rollup-win32-x64-gnu": "npm:4.60.4" + "@rollup/rollup-win32-x64-msvc": "npm:4.60.4" + "@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/2734511579da220408eefb877b51281767d790652cee25da8fcd4936c947e3db14882b5edb1d0d5d5bf60f2a71a58ae7d5f7f46c11e3fdf33182538953886243 + languageName: node + linkType: hard + +"rpgsaga@workspace:.": + version: 0.0.0-use.local + resolution: "rpgsaga@workspace:." + dependencies: + "@eslint/js": "npm:^9.15.0" + "@types/node": "npm:^22.10.0" + eslint: "npm:^9.15.0" + eslint-config-prettier: "npm:^10.0.1" + eslint-plugin-prettier: "npm:^5.5.5" + husky: "npm:^9.1.7" + lint-staged: "npm:^15.5.2" + prettier: "npm:^3.4.2" + tsx: "npm:^4.19.4" + typescript: "npm:^5.7.2" + typescript-eslint: "npm:^8.17.0" + vitest: "npm:^3.1.4" + languageName: unknown + linkType: soft + +"semver@npm:^7.3.5, semver@npm:^7.7.3": + version: 7.8.1 + resolution: "semver@npm:7.8.1" + bin: + semver: bin/semver.js + checksum: 10c0/92d6871d6347e1f99d0ba396a70f2545ccf2a032cda3d378fa0699edf7506b5c6d266aed55c8b88e72bd91a30d2351e4f39db479375374430fcdc4b58f4e3c1a + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: "npm:^3.0.0" + checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 + 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:^4.1.0": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 + languageName: node + linkType: hard + +"slice-ansi@npm:^5.0.0": + version: 5.0.0 + resolution: "slice-ansi@npm:5.0.0" + dependencies: + ansi-styles: "npm:^6.0.0" + is-fullwidth-code-point: "npm:^4.0.0" + checksum: 10c0/2d4d40b2a9d5cf4e8caae3f698fe24ae31a4d778701724f578e984dcb485ec8c49f0c04dab59c401821e80fcdfe89cace9c66693b0244e40ec485d72e543914f + languageName: node + linkType: hard + +"slice-ansi@npm:^7.1.0": + version: 7.1.2 + resolution: "slice-ansi@npm:7.1.2" + dependencies: + ansi-styles: "npm:^6.2.1" + is-fullwidth-code-point: "npm:^5.0.0" + checksum: 10c0/36742f2eb0c03e2e81a38ed14d13a64f7b732fe38c3faf96cce0599788a345011e840db35f1430ca606ea3f8db2abeb92a8d25c2753a819e3babaa10c2e289a2 + 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 + +"stackback@npm:0.0.2": + version: 0.0.2 + resolution: "stackback@npm:0.0.2" + checksum: 10c0/89a1416668f950236dd5ac9f9a6b2588e1b9b62b1b6ad8dff1bfc5d1a15dbf0aafc9b52d2226d00c28dffff212da464eaeebfc6b7578b9d180cef3e3782c5983 + languageName: node + linkType: hard + +"std-env@npm:^3.9.0": + version: 3.10.0 + resolution: "std-env@npm:3.10.0" + checksum: 10c0/1814927a45004d36dde6707eaf17552a546769bc79a6421be2c16ce77d238158dfe5de30910b78ec30d95135cc1c59ea73ee22d2ca170f8b9753f84da34c427f + languageName: node + linkType: hard + +"string-argv@npm:^0.3.2": + version: 0.3.2 + resolution: "string-argv@npm:0.3.2" + checksum: 10c0/75c02a83759ad1722e040b86823909d9a2fc75d15dd71ec4b537c3560746e33b5f5a07f7332d1e3f88319909f82190843aa2f0a0d8c8d591ec08e93d5b8dec82 + languageName: node + linkType: hard + +"string-width@npm:^7.0.0": + version: 7.2.0 + resolution: "string-width@npm:7.2.0" + dependencies: + emoji-regex: "npm:^10.3.0" + get-east-asian-width: "npm:^1.0.0" + strip-ansi: "npm:^7.1.0" + checksum: 10c0/eb0430dd43f3199c7a46dcbf7a0b34539c76fe3aa62763d0b0655acdcbdf360b3f66f3d58ca25ba0205f42ea3491fa00f09426d3b7d3040e506878fc7664c9b9 + languageName: node + linkType: hard + +"strip-ansi@npm:^7.1.0": + version: 7.2.0 + resolution: "strip-ansi@npm:7.2.0" + dependencies: + ansi-regex: "npm:^6.2.2" + checksum: 10c0/544d13b7582f8254811ea97db202f519e189e59d35740c46095897e254e4f1aa9fe1524a83ad6bc5ad67d4dd6c0281d2e0219ed62b880a6238a16a17d375f221 + languageName: node + linkType: hard + +"strip-final-newline@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-final-newline@npm:3.0.0" + checksum: 10c0/a771a17901427bac6293fd416db7577e2bc1c34a19d38351e9d5478c3c415f523f391003b42ed475f27e33a78233035df183525395f731d3bfb8cdcbd4da08ce + languageName: node + linkType: hard + +"strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd + languageName: node + linkType: hard + +"strip-literal@npm:^3.0.0": + version: 3.1.0 + resolution: "strip-literal@npm:3.1.0" + dependencies: + js-tokens: "npm:^9.0.1" + checksum: 10c0/50918f669915d9ad0fe4b7599902b735f853f2201c97791ead00104a654259c0c61bc2bc8fa3db05109339b61f4cf09e47b94ecc874ffbd0e013965223893af8 + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124 + languageName: node + linkType: hard + +"synckit@npm:^0.11.12": + version: 0.11.12 + resolution: "synckit@npm:0.11.12" + dependencies: + "@pkgr/core": "npm:^0.2.9" + checksum: 10c0/cc4d446806688ae0d728ae7bb3f53176d065cf9536647fb85bdd721dcefbd7bf94874df6799ff61580f2b03a392659219b778a9254ad499f9a1f56c34787c235 + languageName: node + linkType: hard + +"tar@npm:^7.5.4": + version: 7.5.15 + resolution: "tar@npm:7.5.15" + dependencies: + "@isaacs/fs-minipass": "npm:^4.0.0" + chownr: "npm:^3.0.0" + minipass: "npm:^7.1.2" + minizlib: "npm:^3.1.0" + yallist: "npm:^5.0.0" + checksum: 10c0/8f039edb1d12fdd7df6c6f9877d125afe9f3da3f5f9317df326fdd090d48793d6998cede1506a1471f3e3a250db270a89dace28005eb5e99c5a9132d704ac956 + 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.2": + version: 0.3.2 + resolution: "tinyexec@npm:0.3.2" + checksum: 10c0/3efbf791a911be0bf0821eab37a3445c2ba07acc1522b1fa84ae1e55f10425076f1290f680286345ed919549ad67527d07281f1c19d584df3b74326909eb1f90 + languageName: node + linkType: hard + +"tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.14, tinyglobby@npm:^0.2.15": + version: 0.2.16 + resolution: "tinyglobby@npm:0.2.16" + dependencies: + fdir: "npm:^6.5.0" + picomatch: "npm:^4.0.4" + checksum: 10c0/f2e09fd93dd95c41e522113b686ff6f7c13020962f8698a864a257f3d7737599afc47722b7ab726e12f8a813f779906187911ff8ee6701ede65072671a7e934b + languageName: node + linkType: hard + +"tinypool@npm:^1.1.1": + version: 1.1.1 + resolution: "tinypool@npm:1.1.1" + checksum: 10c0/bf26727d01443061b04fa863f571016950888ea994ba0cd8cba3a1c51e2458d84574341ab8dbc3664f1c3ab20885c8cf9ff1cc4b18201f04c2cde7d317fff69b + languageName: node + linkType: hard + +"tinyrainbow@npm:^2.0.0": + version: 2.0.0 + resolution: "tinyrainbow@npm:2.0.0" + checksum: 10c0/c83c52bef4e0ae7fb8ec6a722f70b5b6fa8d8be1c85792e829f56c0e1be94ab70b293c032dc5048d4d37cfe678f1f5babb04bdc65fd123098800148ca989184f + languageName: node + linkType: hard + +"tinyspy@npm:^4.0.3": + version: 4.0.4 + resolution: "tinyspy@npm:4.0.4" + checksum: 10c0/a8020fc17799251e06a8398dcc352601d2770aa91c556b9531ecd7a12581161fd1c14e81cbdaff0c1306c93bfdde8ff6d1c1a3f9bbe6d91604f0fd4e01e2f1eb + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: "npm:^7.0.0" + checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 + languageName: node + linkType: hard + +"ts-api-utils@npm:^2.5.0": + version: 2.5.0 + resolution: "ts-api-utils@npm:2.5.0" + peerDependencies: + typescript: ">=4.8.4" + checksum: 10c0/767849383c114e7f1971fa976b20e73ac28fd0c70d8d65c0004790bf4d8f89888c7e4cf6d5949f9c1beae9bc3c64835bef77bbe27fddf45a3c7b60cebcf85c8c + languageName: node + linkType: hard + +"tsx@npm:^4.19.4": + version: 4.22.3 + resolution: "tsx@npm:4.22.3" + dependencies: + esbuild: "npm:~0.28.0" + fsevents: "npm:~2.3.3" + dependenciesMeta: + fsevents: + optional: true + bin: + tsx: dist/cli.mjs + checksum: 10c0/09a5a7d354ff75e5af6285217d709ec80a46c2ee19e0d9b5c5d00eab81047c3ea6b2a5498a2c5255f3960d6e7acd1a1eee34b9433dc56fb32907ca3b38271f41 + languageName: node + linkType: hard + +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" + dependencies: + prelude-ls: "npm:^1.2.1" + checksum: 10c0/7b3fd0ed43891e2080bf0c5c504b418fbb3e5c7b9708d3d015037ba2e6323a28152ec163bcb65212741fa5d2022e3075ac3c76440dbd344c9035f818e8ecee58 + languageName: node + linkType: hard + +"typescript-eslint@npm:^8.17.0": + version: 8.59.4 + resolution: "typescript-eslint@npm:8.59.4" + dependencies: + "@typescript-eslint/eslint-plugin": "npm:8.59.4" + "@typescript-eslint/parser": "npm:8.59.4" + "@typescript-eslint/typescript-estree": "npm:8.59.4" + "@typescript-eslint/utils": "npm:8.59.4" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: ">=4.8.4 <6.1.0" + checksum: 10c0/96241e50eac4e646e56b7950405aa861ff2f744e4268c98e240ee702db0b45463a1e9146f09fbc71bfd8dc53b2b3c43c2f1fab6a92154c7e1c2b7373bcd5c90e + languageName: node + linkType: hard + +"typescript@npm:^5.7.2": + version: 5.9.3 + resolution: "typescript@npm:5.9.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/6bd7552ce39f97e711db5aa048f6f9995b53f1c52f7d8667c1abdc1700c68a76a308f579cd309ce6b53646deb4e9a1be7c813a93baaf0a28ccd536a30270e1c5 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A^5.7.2#optional!builtin": + version: 5.9.3 + resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/ad09fdf7a756814dce65bc60c1657b40d44451346858eea230e10f2e95a289d9183b6e32e5c11e95acc0ccc214b4f36289dcad4bf1886b0adb84d711d336a430 + languageName: node + linkType: hard + +"undici-types@npm:~6.21.0": + version: 6.21.0 + resolution: "undici-types@npm:6.21.0" + checksum: 10c0/c01ed51829b10aa72fc3ce64b747f8e74ae9b60eafa19a7b46ef624403508a54c526ffab06a14a26b3120d055e1104d7abe7c9017e83ced038ea5cf52f8d5e04 + languageName: node + linkType: hard + +"undici@npm:^6.25.0": + version: 6.25.0 + resolution: "undici@npm:6.25.0" + checksum: 10c0/2597cc6689bdb02c210c557b1f85febbfda65becae6e6fc1061508e2f33734d25207f81cd8af56ada9956329eb3a7bd7431e87dcfeceba20ee87059b57dcf985 + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: "npm:^2.1.0" + checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c + languageName: node + linkType: hard + +"vite-node@npm:3.2.4": + version: 3.2.4 + resolution: "vite-node@npm:3.2.4" + dependencies: + cac: "npm:^6.7.14" + debug: "npm:^4.4.1" + es-module-lexer: "npm:^1.7.0" + pathe: "npm:^2.0.3" + vite: "npm:^5.0.0 || ^6.0.0 || ^7.0.0-0" + bin: + vite-node: vite-node.mjs + checksum: 10c0/6ceca67c002f8ef6397d58b9539f80f2b5d79e103a18367288b3f00a8ab55affa3d711d86d9112fce5a7fa658a212a087a005a045eb8f4758947dd99af2a6c6b + languageName: node + linkType: hard + +"vite@npm:^5.0.0 || ^6.0.0 || ^7.0.0-0": + version: 7.3.3 + resolution: "vite@npm:7.3.3" + dependencies: + esbuild: "npm:^0.27.0" + fdir: "npm:^6.5.0" + fsevents: "npm:~2.3.3" + picomatch: "npm:^4.0.3" + postcss: "npm:^8.5.6" + rollup: "npm:^4.43.0" + tinyglobby: "npm:^0.2.15" + peerDependencies: + "@types/node": ^20.19.0 || >=22.12.0 + jiti: ">=1.21.0" + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: ">=0.54.8" + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + bin: + vite: bin/vite.js + checksum: 10c0/44fed2591d5d0a9d1f6313e0a4330659b7f1eec57e542558f12a924c53b450a84b9fad6d57ac28ec739eca1cf5ff0f62e41b965e3806c47eefdbbe13b74ec9ae + languageName: node + linkType: hard + +"vitest@npm:^3.1.4": + version: 3.2.4 + resolution: "vitest@npm:3.2.4" + dependencies: + "@types/chai": "npm:^5.2.2" + "@vitest/expect": "npm:3.2.4" + "@vitest/mocker": "npm:3.2.4" + "@vitest/pretty-format": "npm:^3.2.4" + "@vitest/runner": "npm:3.2.4" + "@vitest/snapshot": "npm:3.2.4" + "@vitest/spy": "npm:3.2.4" + "@vitest/utils": "npm:3.2.4" + chai: "npm:^5.2.0" + debug: "npm:^4.4.1" + expect-type: "npm:^1.2.1" + magic-string: "npm:^0.30.17" + pathe: "npm:^2.0.3" + picomatch: "npm:^4.0.2" + std-env: "npm:^3.9.0" + tinybench: "npm:^2.9.0" + tinyexec: "npm:^0.3.2" + tinyglobby: "npm:^0.2.14" + tinypool: "npm:^1.1.1" + tinyrainbow: "npm:^2.0.0" + vite: "npm:^5.0.0 || ^6.0.0 || ^7.0.0-0" + vite-node: "npm:3.2.4" + why-is-node-running: "npm:^2.3.0" + peerDependencies: + "@edge-runtime/vm": "*" + "@types/debug": ^4.1.12 + "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 + "@vitest/browser": 3.2.4 + "@vitest/ui": 3.2.4 + happy-dom: "*" + jsdom: "*" + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@types/debug": + 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/5bf53ede3ae6a0e08956d72dab279ae90503f6b5a05298a6a5e6ef47d2fd1ab386aaf48fafa61ed07a0ebfe9e371772f1ccbe5c258dd765206a8218bf2eb79eb + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: ./bin/node-which + checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f + languageName: node + linkType: hard + +"which@npm:^6.0.0": + version: 6.0.1 + resolution: "which@npm:6.0.1" + dependencies: + isexe: "npm:^4.0.0" + bin: + node-which: bin/which.js + checksum: 10c0/7e710e54ea36d2d6183bee2f9caa27a3b47b9baf8dee55a199b736fcf85eab3b9df7556fca3d02b50af7f3dfba5ea3a45644189836df06267df457e354da66d5 + 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 + +"word-wrap@npm:^1.2.5": + version: 1.2.5 + resolution: "word-wrap@npm:1.2.5" + checksum: 10c0/e0e4a1ca27599c92a6ca4c32260e8a92e8a44f4ef6ef93f803f8ed823f486e0889fc0b93be4db59c8d51b3064951d25e43d434e95dc8c960cc3a63d65d00ba20 + languageName: node + linkType: hard + +"wrap-ansi@npm:^9.0.0": + version: 9.0.2 + resolution: "wrap-ansi@npm:9.0.2" + dependencies: + ansi-styles: "npm:^6.2.1" + string-width: "npm:^7.0.0" + strip-ansi: "npm:^7.1.0" + checksum: 10c0/3305839b9a0d6fb930cb63a52f34d3936013d8b0682ff3ec133c9826512620f213800ffa19ea22904876d5b7e9a3c1f40682f03597d986a4ca881fa7b033688c + languageName: node + linkType: hard + +"yallist@npm:^5.0.0": + version: 5.0.0 + resolution: "yallist@npm:5.0.0" + checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 + languageName: node + linkType: hard + +"yaml@npm:^2.7.0": + version: 2.9.0 + resolution: "yaml@npm:2.9.0" + bin: + yaml: bin.mjs + checksum: 10c0/f340718df45e97a9551b9bf9dac61c80050bc464513b710debfb5067c380c8472e3b67809cffacb4ab5ffb5e66ef9310816c88b05f371cec60abfedd8c88e0a2 + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f + languageName: node + linkType: hard From d221ad4e48c8ab2016eb3fd24350c26c85045bd0 Mon Sep 17 00:00:00 2001 From: Artm2210 Date: Sat, 23 May 2026 21:30:59 +0300 Subject: [PATCH 2/4] =?UTF-8?q?=D0=9D=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BB?= =?UTF-8?q?=20=D0=BA=D0=BB=D0=B8=D0=B5=D0=BD=D1=82-=D1=81=D0=B5=D1=80?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=BD=D0=BE=D0=B5=20=D0=BF=D1=80=D0=B8=D0=BB?= =?UTF-8?q?=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- clientserver/client/src/App.tsx | 231 +++++++++++++++++++++++++++++- clientserver/client/src/index.css | 7 + clientserver/server/src/app.ts | 170 +++++++++++++++++++++- 3 files changed, 395 insertions(+), 13 deletions(-) diff --git a/clientserver/client/src/App.tsx b/clientserver/client/src/App.tsx index 2aafbc8..5d6df54 100644 --- a/clientserver/client/src/App.tsx +++ b/clientserver/client/src/App.tsx @@ -1,8 +1,225 @@ -export default function App() { - return ( - <> -

Hello world

-

React + TypeScript клиент для clientserver.

- - ); +import React, { useState, useEffect } from 'react'; + +interface Book { + isbn: string; + name: string; + author: string; + pages: number; + year: number; + addedOn: string; } + +export default function App() { + const [books, setBooks] = useState([]); + const [loading, setLoading] = useState(false); + const [showModal, setShowModal] = useState(false); + const [editingBook, setEditingBook] = useState(null); + const [form, setForm] = useState({ isbn: '', name: '', author: '', pages: 0, year: new Date().getFullYear() }); + const [page, setPage] = useState(1); + const [totalPages, setTotalPages] = useState(1); + const [filter, setFilter] = useState(''); + + const fetchBooks = async () => { + setLoading(true); + try { + const res = await fetch(`http://localhost:3001/api/books?page=${page}&take=10&filter=${filter}`); + const data = await res.json(); + setBooks(data.data); + setTotalPages(data.total_pages); + } catch (err) { + console.error(err); + } + setLoading(false); + }; + + useEffect(() => { + fetchBooks(); + }, [page, filter]); + + const handleSubmit = async () => { + const url = editingBook + ? `http://localhost:3001/api/books/${editingBook.isbn}` + : 'http://localhost:3001/api/books'; + const method = editingBook ? 'PATCH' : 'POST'; + + const res = await fetch(url, { + method, + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(form) + }); + + if (res.ok) { + setShowModal(false); + setEditingBook(null); + setForm({ isbn: '', name: '', author: '', pages: 0, year: new Date().getFullYear() }); + fetchBooks(); + } + }; + + const handleDelete = async (isbn: string) => { + if (confirm('Удалить книгу?')) { + await fetch(`http://localhost:3001/api/books/${isbn}`, { method: 'DELETE' }); + fetchBooks(); + } + }; + + const openEdit = (book: Book) => { + setEditingBook(book); + setForm({ isbn: book.isbn, name: book.name, author: book.author, pages: book.pages, year: book.year }); + setShowModal(true); + }; + + return ( +
+

Библиотека

+ +
+ { setFilter(e.target.value); setPage(1); }} + style={{ padding: 8, flex: 1, border: '1px solid #ddd', borderRadius: 5 }} + /> + +
+ + {loading &&
Загрузка...
} + + {!loading && ( + + + + + + + + + + + + {books.map(book => ( + + + + + + + + ))} + +
ISBNНазваниеАвторГодДействия
{book.isbn}{book.name}{book.author}{book.year} + + +
+ )} + + {totalPages > 1 && ( +
+ + {page} / {totalPages} + +
+ )} + + {showModal && ( +
+
+

{editingBook ? 'Редактировать' : 'Добавить книгу'}

+ + {!editingBook && ( +
+ setForm({...form, isbn: e.target.value})} + style={{ width: '100%', padding: 8, border: '1px solid #ddd', borderRadius: 5 }} + /> +
+ )} + +
+ setForm({...form, name: e.target.value})} + style={{ width: '100%', padding: 8, border: '1px solid #ddd', borderRadius: 5 }} + /> +
+ +
+ setForm({...form, author: e.target.value})} + style={{ width: '100%', padding: 8, border: '1px solid #ddd', borderRadius: 5 }} + /> +
+ +
+ setForm({...form, year: parseInt(e.target.value)})} + style={{ flex: 1, padding: 8, border: '1px solid #ddd', borderRadius: 5 }} + /> + setForm({...form, pages: parseInt(e.target.value)})} + style={{ flex: 1, padding: 8, border: '1px solid #ddd', borderRadius: 5 }} + /> +
+ +
+ + +
+
+
+ )} +
+ ); +} \ No newline at end of file diff --git a/clientserver/client/src/index.css b/clientserver/client/src/index.css index 87c64de..34cb558 100644 --- a/clientserver/client/src/index.css +++ b/clientserver/client/src/index.css @@ -8,4 +8,11 @@ body { margin: 0; font-family: system-ui, sans-serif; padding: 1.5rem; + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + min-height: 100vh; } + +#root { + max-width: 1400px; + margin: 0 auto; +} \ No newline at end of file diff --git a/clientserver/server/src/app.ts b/clientserver/server/src/app.ts index 139aac8..3cd7f0a 100644 --- a/clientserver/server/src/app.ts +++ b/clientserver/server/src/app.ts @@ -1,9 +1,167 @@ import express from "express"; -export function createApp() { - const app = express(); - app.get("/", (_req, res) => { - res.send("ok"); - }); - return app; +interface Book { + isbn: string; + name: string; + author: string; + pages: number; + year: number; + addedOn: string; + deleted?: boolean; } + +const books: Record = {}; + +const sampleBooks: Omit[] = [ + { isbn: "978-5-699-12011-6", name: "Война и мир", author: "Лев Толстой", pages: 1300, year: 1869 }, + { isbn: "978-5-17-118903-7", name: "Преступление и наказание", author: "Федор Достоевский", pages: 672, year: 1866 }, + { isbn: "978-5-389-15744-4", name: "Мастер и Маргарита", author: "Михаил Булгаков", pages: 480, year: 1967 }, +]; + +sampleBooks.forEach(book => { + books[book.isbn] = { ...book, addedOn: new Date().toISOString() }; +}); + +export function createApp() { + const app = express(); + + app.use((_req, res, next) => { + res.header("Access-Control-Allow-Origin", "*"); + res.header("Access-Control-Allow-Methods", "GET, POST, PATCH, DELETE, OPTIONS"); + res.header("Access-Control-Allow-Headers", "Content-Type"); + + if (_req.method === "OPTIONS") { + res.sendStatus(200); + return; + } + next(); + }); + + app.use(express.json()); + + app.get("/api/books", (req, res) => { + const page = parseInt(req.query.page as string) || 1; + const take = parseInt(req.query.take as string) || 10; + const sort = (req.query.sort as string) || "addedOn"; + const filter = ((req.query.filter as string) || "").toLowerCase(); + + let items = Object.values(books).filter(b => !b.deleted); + + if (filter) { + items = items.filter(b => + b.name.toLowerCase().includes(filter) || + b.author.toLowerCase().includes(filter) || + b.isbn.toLowerCase().includes(filter) + ); + } + + const reverse = sort.startsWith("-"); + const sortField = reverse ? sort.slice(1) : sort; + items.sort((a, b) => { + const aVal = a[sortField as keyof Book]; + const bVal = b[sortField as keyof Book]; + if (typeof aVal === "string" && typeof bVal === "string") { + return reverse ? bVal.localeCompare(aVal) : aVal.localeCompare(bVal); + } + if (typeof aVal === "number" && typeof bVal === "number") { + return reverse ? bVal - aVal : aVal - bVal; + } + return 0; + }); + + const total = items.length; + const start = (page - 1) * take; + const data = items.slice(start, start + take); + + res.json({ + data, + total, + page, + take, + total_pages: Math.ceil(total / take) + }); + }); + + app.post("/api/books", (req, res) => { + const { isbn, name, author, pages, year } = req.body; + + if (!isbn || !name || !author) { + res.status(400).json({ type: "ValidationError", message: "ISBN, name and author are required" }); + return; + } + + if (books[isbn] && !books[isbn].deleted) { + res.status(400).json({ type: "ValidationError", message: "Book already exists" }); + return; + } + + const book: Book = { + isbn, + name, + author, + pages: parseInt(pages) || 0, + year: parseInt(year) || 0, + addedOn: new Date().toISOString() + }; + + books[isbn] = book; + res.status(201).json(book); + }); + + app.get("/api/books/:isbn", (req, res) => { + const book = books[req.params.isbn]; + + if (!book || book.deleted) { + res.status(404).json({ type: "NotFound", message: "Book not found" }); + return; + } + + res.json(book); + }); + + app.patch("/api/books/:isbn", (req, res) => { + const book = books[req.params.isbn]; + + if (!book || book.deleted) { + res.status(404).json({ type: "NotFound", message: "Book not found" }); + return; + } + + const { name, author, pages, year } = req.body; + if (name) book.name = name; + if (author) book.author = author; + if (pages) book.pages = parseInt(pages); + if (year) book.year = parseInt(year); + + res.json(book); + }); + + app.delete("/api/books/:isbn", (req, res) => { + const book = books[req.params.isbn]; + + if (!book || book.deleted) { + res.status(404).json({ type: "NotFound", message: "Book not found" }); + return; + } + + book.deleted = true; + res.json({ message: "Book deleted successfully" }); + }); + + app.get("/api/books/:isbn/status", (req, res) => { + const book = books[req.params.isbn]; + + if (!book || book.deleted) { + res.status(404).json({ type: "NotFound", message: "Book not found" }); + return; + } + + res.json({ + total: 1, + available: 1, + popularity: 0 + }); + }); + + return app; +} \ No newline at end of file From 9e2d30a7b89b13d609479df7d2c13a612f5e9415 Mon Sep 17 00:00:00 2001 From: Artm2210 Date: Sat, 23 May 2026 21:45:02 +0300 Subject: [PATCH 3/4] fix client-server --- clientserver/client/src/App.tsx | 131 ++++++++++++++++++-------------- clientserver/server/src/app.ts | 118 ++++++++++++++-------------- 2 files changed, 137 insertions(+), 112 deletions(-) diff --git a/clientserver/client/src/App.tsx b/clientserver/client/src/App.tsx index 5d6df54..0b76356 100644 --- a/clientserver/client/src/App.tsx +++ b/clientserver/client/src/App.tsx @@ -1,30 +1,31 @@ import React, { useState, useEffect } from 'react'; -interface Book { - isbn: string; +interface Ship { + id: string; name: string; - author: string; - pages: number; + type: string; + captain: string; + crew: number; year: number; addedOn: string; } export default function App() { - const [books, setBooks] = useState([]); + const [ships, setShips] = useState([]); const [loading, setLoading] = useState(false); const [showModal, setShowModal] = useState(false); - const [editingBook, setEditingBook] = useState(null); - const [form, setForm] = useState({ isbn: '', name: '', author: '', pages: 0, year: new Date().getFullYear() }); + const [editingShip, setEditingShip] = useState(null); + const [form, setForm] = useState({ id: '', name: '', type: '', captain: '', crew: 0, year: new Date().getFullYear() }); const [page, setPage] = useState(1); const [totalPages, setTotalPages] = useState(1); const [filter, setFilter] = useState(''); - const fetchBooks = async () => { + const fetchShips = async () => { setLoading(true); try { - const res = await fetch(`http://localhost:3001/api/books?page=${page}&take=10&filter=${filter}`); + const res = await fetch(`http://localhost:3001/api/ships?page=${page}&take=10&filter=${filter}`); const data = await res.json(); - setBooks(data.data); + setShips(data.data); setTotalPages(data.total_pages); } catch (err) { console.error(err); @@ -33,14 +34,14 @@ export default function App() { }; useEffect(() => { - fetchBooks(); + fetchShips(); }, [page, filter]); const handleSubmit = async () => { - const url = editingBook - ? `http://localhost:3001/api/books/${editingBook.isbn}` - : 'http://localhost:3001/api/books'; - const method = editingBook ? 'PATCH' : 'POST'; + const url = editingShip + ? `http://localhost:3001/api/ships/${editingShip.id}` + : 'http://localhost:3001/api/ships'; + const method = editingShip ? 'PATCH' : 'POST'; const res = await fetch(url, { method, @@ -50,41 +51,46 @@ export default function App() { if (res.ok) { setShowModal(false); - setEditingBook(null); - setForm({ isbn: '', name: '', author: '', pages: 0, year: new Date().getFullYear() }); - fetchBooks(); + setEditingShip(null); + setForm({ id: '', name: '', type: '', captain: '', crew: 0, year: new Date().getFullYear() }); + fetchShips(); + } else { + const error = await res.json(); + alert(error.message || 'Ошибка при сохранении'); } }; - const handleDelete = async (isbn: string) => { - if (confirm('Удалить книгу?')) { - await fetch(`http://localhost:3001/api/books/${isbn}`, { method: 'DELETE' }); - fetchBooks(); + const handleDelete = async (id: string) => { + if (confirm('Удалить корабль?')) { + const res = await fetch(`http://localhost:3001/api/ships/${id}`, { method: 'DELETE' }); + if (res.ok) { + fetchShips(); + } } }; - const openEdit = (book: Book) => { - setEditingBook(book); - setForm({ isbn: book.isbn, name: book.name, author: book.author, pages: book.pages, year: book.year }); + const openEdit = (ship: Ship) => { + setEditingShip(ship); + setForm({ id: ship.id, name: ship.name, type: ship.type, captain: ship.captain, crew: ship.crew, year: ship.year }); setShowModal(true); }; return (
-

Библиотека

+

Корабли

{ setFilter(e.target.value); setPage(1); }} style={{ padding: 8, flex: 1, border: '1px solid #ddd', borderRadius: 5 }} />
@@ -94,29 +100,33 @@ export default function App() { - + - + + + - {books.map(book => ( - - - - - + {ships.map(ship => ( + + + + + + +
ISBNID НазваниеАвторТипКапитанКоманда Год Действия
{book.isbn}{book.name}{book.author}{book.year}
{ship.id}{ship.name}{ship.type}{ship.captain}{ship.crew}{ship.year} @@ -154,15 +164,15 @@ export default function App() { background: 'rgba(0,0,0,0.5)', display: 'flex', alignItems: 'center', justifyContent: 'center', zIndex: 1000 }}> -
-

{editingBook ? 'Редактировать' : 'Добавить книгу'}

+
+

{editingShip ? '✏️ Редактировать корабль' : '⛵ Добавить корабль'}

- {!editingBook && ( + {!editingShip && (
setForm({...form, isbn: e.target.value})} + placeholder="ID корабля (например SHIP-001)" + value={form.id} + onChange={e => setForm({...form, id: e.target.value})} style={{ width: '100%', padding: 8, border: '1px solid #ddd', borderRadius: 5 }} />
@@ -179,9 +189,18 @@ export default function App() {
setForm({...form, author: e.target.value})} + placeholder="Тип судна" + value={form.type} + onChange={e => setForm({...form, type: e.target.value})} + style={{ width: '100%', padding: 8, border: '1px solid #ddd', borderRadius: 5 }} + /> +
+ +
+ setForm({...form, captain: e.target.value})} style={{ width: '100%', padding: 8, border: '1px solid #ddd', borderRadius: 5 }} />
@@ -189,23 +208,23 @@ export default function App() {
setForm({...form, year: parseInt(e.target.value)})} + placeholder="Команда (человек)" + value={form.crew} + onChange={e => setForm({...form, crew: parseInt(e.target.value)})} style={{ flex: 1, padding: 8, border: '1px solid #ddd', borderRadius: 5 }} /> setForm({...form, pages: parseInt(e.target.value)})} + placeholder="Год спуска на воду" + value={form.year} + onChange={e => setForm({...form, year: parseInt(e.target.value)})} style={{ flex: 1, padding: 8, border: '1px solid #ddd', borderRadius: 5 }} />