diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index ba9da1a5..6ed5ad17 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -29,7 +29,7 @@ jobs:
cache: "pnpm"
- name: Install dependencies
- run: pnpm i
+ run: pnpm i && pnpm build
- name: Run Unit Tests and generate coverage report
- run: pnpm unit.test.coverage
+ run: pnpm new:unit:coverage
diff --git a/.gitignore b/.gitignore
index 0acd3620..1302e6e1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
.idea/
.tmp/
+.temp/
coverage/
node_modules/
.nyc_output/
diff --git a/examples/cypress/package.json b/examples/cypress/package.json
index 1fc2c454..045c7d0d 100644
--- a/examples/cypress/package.json
+++ b/examples/cypress/package.json
@@ -15,11 +15,11 @@
"license": "MIT",
"devDependencies": {
"@badeball/cypress-cucumber-preprocessor": "^20.1.2",
- "@bahmutov/cypress-esbuild-preprocessor": "^2.2.2",
- "@types/node": "^22.5.2",
- "cypress": "^13.13.2",
+ "@bahmutov/cypress-esbuild-preprocessor": "^2.2.3",
+ "@types/node": "^22.5.4",
+ "cypress": "^13.14.2",
"multiple-cucumber-html-reporter": "^3.7.0",
- "typescript": "^5.5.4"
+ "typescript": "^5.6.2"
},
"dependencies": {
"dayjs": "^1.11.13"
diff --git a/examples/cypress/pnpm-lock.yaml b/examples/cypress/pnpm-lock.yaml
index 19ed3cc0..9f73c9b8 100644
--- a/examples/cypress/pnpm-lock.yaml
+++ b/examples/cypress/pnpm-lock.yaml
@@ -14,22 +14,22 @@ importers:
devDependencies:
'@badeball/cypress-cucumber-preprocessor':
specifier: ^20.1.2
- version: 20.1.2(cypress@13.13.2)(typescript@5.5.4)
+ version: 20.1.2(cypress@13.14.2)(typescript@5.6.2)
'@bahmutov/cypress-esbuild-preprocessor':
- specifier: ^2.2.2
- version: 2.2.2(esbuild@0.23.0)
+ specifier: ^2.2.3
+ version: 2.2.3(esbuild@0.23.1)
'@types/node':
- specifier: ^22.5.2
- version: 22.5.2
+ specifier: ^22.5.4
+ version: 22.5.4
cypress:
- specifier: ^13.13.2
- version: 13.13.2
+ specifier: ^13.14.2
+ version: 13.14.2
multiple-cucumber-html-reporter:
specifier: ^3.7.0
version: 3.7.0
typescript:
- specifier: ^5.5.4
- version: 5.5.4
+ specifier: ^5.6.2
+ version: 5.6.2
packages:
@@ -49,13 +49,13 @@ packages:
resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==}
engines: {node: '>=6.9.0'}
- '@babel/parser@7.25.3':
- resolution: {integrity: sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==}
+ '@babel/parser@7.25.6':
+ resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==}
engines: {node: '>=6.0.0'}
hasBin: true
- '@babel/types@7.25.2':
- resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==}
+ '@babel/types@7.25.6':
+ resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==}
engines: {node: '>=6.9.0'}
'@badeball/cypress-configuration@6.1.1':
@@ -72,8 +72,8 @@ packages:
'@cypress/browserify-preprocessor':
optional: true
- '@bahmutov/cypress-esbuild-preprocessor@2.2.2':
- resolution: {integrity: sha512-WE1l3gNqMlSd4P0g565u0AgUJvtQo9OtP6pWt46rK/Dxv0NsL56PIsgZGQoWPEjsOslyyCpq4LLip+RL9bqnDA==}
+ '@bahmutov/cypress-esbuild-preprocessor@2.2.3':
+ resolution: {integrity: sha512-YdrZxCULKC3k5H5bjBeL6boadcsSXsdnJf6GQGHMRcqzUFzDQC1sZGNblauJzUU34XbA4Sko5ym4KajKf4WwAw==}
peerDependencies:
esbuild: '>=0.17.0'
@@ -87,8 +87,8 @@ packages:
'@cucumber/cucumber-expressions@17.1.0':
resolution: {integrity: sha512-PCv/ppsPynniKPWJr5v566daCVe+pbxQpHGrIu/Ev57cCH9Rv+X0F6lio4Id3Z64TaG7btCRLUGewIgLwmrwOA==}
- '@cucumber/cucumber@10.8.0':
- resolution: {integrity: sha512-o8SR6MRQVCKKw4tytWqCqOjfX4cASj9dqpdHKHMi09rZWBCNQHBwH1TO9wj7NKjOa6RfUOTcgvDlayTcjyCH4A==}
+ '@cucumber/cucumber@10.9.0':
+ resolution: {integrity: sha512-7XHJ6nmr9IkIag0nv6or82HfelbSInrEe3H4aT6dMHyTehwFLUifG6eQQ+uE4LZIOXAnzLPH37YmqygEO67vCA==}
engines: {node: 18 || >=20}
hasBin: true
@@ -107,13 +107,13 @@ packages:
'@cucumber/gherkin@28.0.0':
resolution: {integrity: sha512-Ee6zJQq0OmIUPdW0mSnsCsrWA2PZAELNDPICD2pLfs0Oz7RAPgj80UsD2UCtqyAhw2qAR62aqlktKUlai5zl/A==}
- '@cucumber/html-formatter@21.3.1':
- resolution: {integrity: sha512-M1zbre7e8MsecXheqNv62BKY5J06YJSv1LmsD7sJ3mu5t1jirLjj2It1HqPsX5CQAfg9n69xFRugPgLMSte9TA==}
+ '@cucumber/html-formatter@21.6.0':
+ resolution: {integrity: sha512-Qw1tdObBJrgXgXwVjKVjB3hFhFPI8WhIFb+ULy8g5lDl5AdnKDiyDXAMvAWRX+pphnRMMNdkPCt6ZXEfWvUuAA==}
peerDependencies:
'@cucumber/messages': '>=18'
- '@cucumber/html-formatter@21.6.0':
- resolution: {integrity: sha512-Qw1tdObBJrgXgXwVjKVjB3hFhFPI8WhIFb+ULy8g5lDl5AdnKDiyDXAMvAWRX+pphnRMMNdkPCt6ZXEfWvUuAA==}
+ '@cucumber/html-formatter@21.7.0':
+ resolution: {integrity: sha512-bv211aY8mErp6CdmhN426E+7KIsVIES4fGx5ASMlUzYWiMus6NhSdI9UL3Vswx8JXJMgySeIcJJKfznREUFLNA==}
peerDependencies:
'@cucumber/messages': '>=18'
@@ -137,8 +137,8 @@ packages:
'@cucumber/tag-expressions@6.1.0':
resolution: {integrity: sha512-+3DwRumrCJG27AtzCIL37A/X+A/gSfxOPLg8pZaruh5SLumsTmpvilwroVWBT2fPzmno/tGXypeK5a7NHU4RzA==}
- '@cypress/request@3.0.1':
- resolution: {integrity: sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==}
+ '@cypress/request@3.0.4':
+ resolution: {integrity: sha512-eqNHMsxEXuit0sRvvWoGG3/4+Q5qwqjKARWXKM/KoSsKvTNBwWt8pwspg5+TniP3POAZcPPx0O8CiEIQ4e6NWg==}
engines: {node: '>= 6'}
'@cypress/xvfb@1.2.4':
@@ -150,8 +150,8 @@ packages:
cpu: [ppc64]
os: [aix]
- '@esbuild/aix-ppc64@0.23.0':
- resolution: {integrity: sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==}
+ '@esbuild/aix-ppc64@0.23.1':
+ resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
@@ -162,8 +162,8 @@ packages:
cpu: [arm64]
os: [android]
- '@esbuild/android-arm64@0.23.0':
- resolution: {integrity: sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==}
+ '@esbuild/android-arm64@0.23.1':
+ resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
@@ -174,8 +174,8 @@ packages:
cpu: [arm]
os: [android]
- '@esbuild/android-arm@0.23.0':
- resolution: {integrity: sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==}
+ '@esbuild/android-arm@0.23.1':
+ resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
@@ -186,8 +186,8 @@ packages:
cpu: [x64]
os: [android]
- '@esbuild/android-x64@0.23.0':
- resolution: {integrity: sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==}
+ '@esbuild/android-x64@0.23.1':
+ resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
@@ -198,8 +198,8 @@ packages:
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-arm64@0.23.0':
- resolution: {integrity: sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==}
+ '@esbuild/darwin-arm64@0.23.1':
+ resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
@@ -210,8 +210,8 @@ packages:
cpu: [x64]
os: [darwin]
- '@esbuild/darwin-x64@0.23.0':
- resolution: {integrity: sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==}
+ '@esbuild/darwin-x64@0.23.1':
+ resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
@@ -222,8 +222,8 @@ packages:
cpu: [arm64]
os: [freebsd]
- '@esbuild/freebsd-arm64@0.23.0':
- resolution: {integrity: sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==}
+ '@esbuild/freebsd-arm64@0.23.1':
+ resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
@@ -234,8 +234,8 @@ packages:
cpu: [x64]
os: [freebsd]
- '@esbuild/freebsd-x64@0.23.0':
- resolution: {integrity: sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==}
+ '@esbuild/freebsd-x64@0.23.1':
+ resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
@@ -246,8 +246,8 @@ packages:
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm64@0.23.0':
- resolution: {integrity: sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==}
+ '@esbuild/linux-arm64@0.23.1':
+ resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
@@ -258,8 +258,8 @@ packages:
cpu: [arm]
os: [linux]
- '@esbuild/linux-arm@0.23.0':
- resolution: {integrity: sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==}
+ '@esbuild/linux-arm@0.23.1':
+ resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
@@ -270,8 +270,8 @@ packages:
cpu: [ia32]
os: [linux]
- '@esbuild/linux-ia32@0.23.0':
- resolution: {integrity: sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==}
+ '@esbuild/linux-ia32@0.23.1':
+ resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
@@ -282,8 +282,8 @@ packages:
cpu: [loong64]
os: [linux]
- '@esbuild/linux-loong64@0.23.0':
- resolution: {integrity: sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==}
+ '@esbuild/linux-loong64@0.23.1':
+ resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
@@ -294,8 +294,8 @@ packages:
cpu: [mips64el]
os: [linux]
- '@esbuild/linux-mips64el@0.23.0':
- resolution: {integrity: sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==}
+ '@esbuild/linux-mips64el@0.23.1':
+ resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
@@ -306,8 +306,8 @@ packages:
cpu: [ppc64]
os: [linux]
- '@esbuild/linux-ppc64@0.23.0':
- resolution: {integrity: sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==}
+ '@esbuild/linux-ppc64@0.23.1':
+ resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
@@ -318,8 +318,8 @@ packages:
cpu: [riscv64]
os: [linux]
- '@esbuild/linux-riscv64@0.23.0':
- resolution: {integrity: sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==}
+ '@esbuild/linux-riscv64@0.23.1':
+ resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
@@ -330,8 +330,8 @@ packages:
cpu: [s390x]
os: [linux]
- '@esbuild/linux-s390x@0.23.0':
- resolution: {integrity: sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==}
+ '@esbuild/linux-s390x@0.23.1':
+ resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
@@ -342,8 +342,8 @@ packages:
cpu: [x64]
os: [linux]
- '@esbuild/linux-x64@0.23.0':
- resolution: {integrity: sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==}
+ '@esbuild/linux-x64@0.23.1':
+ resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
@@ -354,14 +354,14 @@ packages:
cpu: [x64]
os: [netbsd]
- '@esbuild/netbsd-x64@0.23.0':
- resolution: {integrity: sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==}
+ '@esbuild/netbsd-x64@0.23.1':
+ resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
- '@esbuild/openbsd-arm64@0.23.0':
- resolution: {integrity: sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==}
+ '@esbuild/openbsd-arm64@0.23.1':
+ resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
@@ -372,8 +372,8 @@ packages:
cpu: [x64]
os: [openbsd]
- '@esbuild/openbsd-x64@0.23.0':
- resolution: {integrity: sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==}
+ '@esbuild/openbsd-x64@0.23.1':
+ resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
@@ -384,8 +384,8 @@ packages:
cpu: [x64]
os: [sunos]
- '@esbuild/sunos-x64@0.23.0':
- resolution: {integrity: sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==}
+ '@esbuild/sunos-x64@0.23.1':
+ resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
@@ -396,8 +396,8 @@ packages:
cpu: [arm64]
os: [win32]
- '@esbuild/win32-arm64@0.23.0':
- resolution: {integrity: sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==}
+ '@esbuild/win32-arm64@0.23.1':
+ resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
@@ -408,8 +408,8 @@ packages:
cpu: [ia32]
os: [win32]
- '@esbuild/win32-ia32@0.23.0':
- resolution: {integrity: sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==}
+ '@esbuild/win32-ia32@0.23.1':
+ resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
@@ -420,8 +420,8 @@ packages:
cpu: [x64]
os: [win32]
- '@esbuild/win32-x64@0.23.0':
- resolution: {integrity: sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==}
+ '@esbuild/win32-x64@0.23.1':
+ resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==}
engines: {node: '>=18'}
cpu: [x64]
os: [win32]
@@ -438,8 +438,8 @@ packages:
resolution: {integrity: sha512-ID7fosbc50TbT0MK0EG12O+gAP3W3Aa/Pz4DaTtQtEvlc9Odaqi0de+xuZ7Li2GtK4HzEX7IuRWS/JmZLksR3Q==}
engines: {node: '>=14'}
- '@types/node@22.5.2':
- resolution: {integrity: sha512-acJsPTEqYqulZS/Yp/S3GgeE6GZ0qYODUR8aVr/DkhHQ8l9nd4j5x1/ZJy9/gHrRlFMqkO6i0I3E27Alu4jjPg==}
+ '@types/node@22.5.4':
+ resolution: {integrity: sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==}
'@types/normalize-package-data@2.4.4':
resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
@@ -523,8 +523,8 @@ packages:
resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==}
engines: {node: '>=8'}
- async@3.2.5:
- resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==}
+ async@3.2.6:
+ resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
@@ -536,8 +536,8 @@ packages:
aws-sign2@0.7.0:
resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==}
- aws4@1.13.0:
- resolution: {integrity: sha512-3AungXC4I8kKsS9PuS4JH2nc+0bVY/mjgrephHTIi8fpEeGsTHBUJeosp0Wc1myYMElmD0B3Oc4XL/HVJ4PV2g==}
+ aws4@1.13.2:
+ resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==}
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
@@ -718,8 +718,8 @@ packages:
resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
engines: {node: '>= 8'}
- cypress@13.13.2:
- resolution: {integrity: sha512-PvJQU33933NvS1StfzEb8/mu2kMy4dABwCF+yd5Bi7Qly1HOVf+Bufrygee/tlmty/6j5lX+KIi8j9Q3JUMbhA==}
+ cypress@13.14.2:
+ resolution: {integrity: sha512-lsiQrN17vHMB2fnvxIrKLAjOr9bPwsNbPZNrWf99s4u+DVmCY6U+w7O3GGG9FvP4EUVYaDu+guWeNLiUzBrqvA==}
engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0}
hasBin: true
@@ -738,8 +738,8 @@ packages:
supports-color:
optional: true
- debug@4.3.6:
- resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==}
+ debug@4.3.7:
+ resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
engines: {node: '>=6.0'}
peerDependencies:
supports-color: '*'
@@ -813,13 +813,13 @@ packages:
engines: {node: '>=12'}
hasBin: true
- esbuild@0.23.0:
- resolution: {integrity: sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==}
+ esbuild@0.23.1:
+ resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==}
engines: {node: '>=18'}
hasBin: true
- escalade@3.1.2:
- resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
escape-string-regexp@1.0.5:
@@ -886,8 +886,8 @@ packages:
forever-agent@0.6.1:
resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==}
- form-data@2.3.3:
- resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==}
+ form-data@2.5.1:
+ resolution: {integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==}
engines: {node: '>= 0.12'}
fs-extra@11.2.0:
@@ -993,8 +993,8 @@ packages:
hosted-git-info@2.8.9:
resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
- http-signature@1.3.6:
- resolution: {integrity: sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==}
+ http-signature@1.4.0:
+ resolution: {integrity: sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==}
engines: {node: '>=0.10'}
human-signals@1.1.1:
@@ -1034,8 +1034,8 @@ packages:
resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==}
hasBin: true
- is-core-module@2.15.0:
- resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==}
+ is-core-module@2.15.1:
+ resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==}
engines: {node: '>= 0.4'}
is-docker@2.2.1:
@@ -1178,8 +1178,8 @@ packages:
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
- lru-cache@11.0.0:
- resolution: {integrity: sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==}
+ lru-cache@11.0.1:
+ resolution: {integrity: sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==}
engines: {node: 20 || >=22}
lru-cache@6.0.0:
@@ -1205,6 +1205,11 @@ packages:
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
engines: {node: '>= 0.6'}
+ mime@3.0.0:
+ resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
+ engines: {node: '>=10.0.0'}
+ hasBin: true
+
mimic-fn@2.1.0:
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
engines: {node: '>=6'}
@@ -1241,9 +1246,6 @@ packages:
engines: {node: '>= 14.0.0'}
hasBin: true
- ms@2.1.2:
- resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
-
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
@@ -1360,8 +1362,8 @@ packages:
performance-now@2.1.0:
resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==}
- picocolors@1.0.1:
- resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
+ picocolors@1.1.0:
+ resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==}
picomatch@2.3.1:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
@@ -1399,8 +1401,8 @@ packages:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
- qs@6.10.4:
- resolution: {integrity: sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==}
+ qs@6.13.0:
+ resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==}
engines: {node: '>=0.6'}
querystringify@2.2.0:
@@ -1555,8 +1557,8 @@ packages:
spdx-expression-parse@3.0.1:
resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
- spdx-license-ids@3.0.18:
- resolution: {integrity: sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==}
+ spdx-license-ids@3.0.20:
+ resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==}
split@1.0.1:
resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==}
@@ -1655,8 +1657,8 @@ packages:
resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==}
engines: {node: '>=6.10'}
- tslib@2.6.3:
- resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==}
+ tslib@2.7.0:
+ resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==}
tunnel-agent@0.6.0:
resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
@@ -1680,12 +1682,12 @@ packages:
resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
engines: {node: '>=12.20'}
- type-fest@4.24.0:
- resolution: {integrity: sha512-spAaHzc6qre0TlZQQ2aA/nGMe+2Z/wyGk5Z+Ru2VUfdNwT6kWO6TjevOlpebsATEG1EIQ2sOiDszud3lO5mt/Q==}
+ type-fest@4.26.1:
+ resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==}
engines: {node: '>=16'}
- typescript@5.5.4:
- resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==}
+ typescript@5.6.2:
+ resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==}
engines: {node: '>=14.17'}
hasBin: true
@@ -1766,8 +1768,8 @@ packages:
yallist@4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
- yaml@2.5.0:
- resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==}
+ yaml@2.5.1:
+ resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==}
engines: {node: '>= 14'}
hasBin: true
@@ -1798,7 +1800,7 @@ snapshots:
'@babel/code-frame@7.24.7':
dependencies:
'@babel/highlight': 7.24.7
- picocolors: 1.0.1
+ picocolors: 1.1.0
'@babel/helper-string-parser@7.24.8': {}
@@ -1809,13 +1811,13 @@ snapshots:
'@babel/helper-validator-identifier': 7.24.7
chalk: 2.4.2
js-tokens: 4.0.0
- picocolors: 1.0.1
+ picocolors: 1.1.0
- '@babel/parser@7.25.3':
+ '@babel/parser@7.25.6':
dependencies:
- '@babel/types': 7.25.2
+ '@babel/types': 7.25.6
- '@babel/types@7.25.2':
+ '@babel/types@7.25.6':
dependencies:
'@babel/helper-string-parser': 7.24.8
'@babel/helper-validator-identifier': 7.24.7
@@ -1823,8 +1825,8 @@ snapshots:
'@badeball/cypress-configuration@6.1.1':
dependencies:
- '@babel/parser': 7.25.3
- debug: 4.3.6(supports-color@8.1.1)
+ '@babel/parser': 7.25.6
+ debug: 4.3.7(supports-color@8.1.1)
esbuild: 0.19.12
glob: 7.2.3
minimatch: 3.1.2
@@ -1832,27 +1834,27 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@badeball/cypress-cucumber-preprocessor@20.1.2(cypress@13.13.2)(typescript@5.5.4)':
+ '@badeball/cypress-cucumber-preprocessor@20.1.2(cypress@13.14.2)(typescript@5.6.2)':
dependencies:
'@badeball/cypress-configuration': 6.1.1
'@cucumber/ci-environment': 10.0.1
- '@cucumber/cucumber': 10.8.0
+ '@cucumber/cucumber': 10.9.0
'@cucumber/cucumber-expressions': 17.1.0
'@cucumber/gherkin': 28.0.0
- '@cucumber/html-formatter': 21.6.0(@cucumber/messages@25.0.1)
+ '@cucumber/html-formatter': 21.7.0(@cucumber/messages@25.0.1)
'@cucumber/message-streams': 4.0.1(@cucumber/messages@25.0.1)
'@cucumber/messages': 25.0.1
- '@cucumber/pretty-formatter': 1.0.1(@cucumber/cucumber@10.8.0)(@cucumber/messages@25.0.1)
+ '@cucumber/pretty-formatter': 1.0.1(@cucumber/cucumber@10.9.0)(@cucumber/messages@25.0.1)
'@cucumber/tag-expressions': 6.1.0
base64-js: 1.5.1
chalk: 4.1.2
cli-table: 0.3.11
common-ancestor-path: 1.0.1
- cosmiconfig: 9.0.0(typescript@5.5.4)
- cypress: 13.13.2
- debug: 4.3.6(supports-color@8.1.1)
+ cosmiconfig: 9.0.0(typescript@5.6.2)
+ cypress: 13.14.2
+ debug: 4.3.7(supports-color@8.1.1)
error-stack-parser: 2.1.4
- esbuild: 0.23.0
+ esbuild: 0.23.1
glob: 11.0.0
is-path-inside: 3.0.3
mocha: 10.7.3
@@ -1864,10 +1866,10 @@ snapshots:
- supports-color
- typescript
- '@bahmutov/cypress-esbuild-preprocessor@2.2.2(esbuild@0.23.0)':
+ '@bahmutov/cypress-esbuild-preprocessor@2.2.3(esbuild@0.23.1)':
dependencies:
- debug: 4.3.6(supports-color@8.1.1)
- esbuild: 0.23.0
+ debug: 4.3.7(supports-color@8.1.1)
+ esbuild: 0.23.1
transitivePeerDependencies:
- supports-color
@@ -1880,14 +1882,14 @@ snapshots:
dependencies:
regexp-match-indices: 1.0.2
- '@cucumber/cucumber@10.8.0':
+ '@cucumber/cucumber@10.9.0':
dependencies:
'@cucumber/ci-environment': 10.0.1
'@cucumber/cucumber-expressions': 17.1.0
'@cucumber/gherkin': 28.0.0
- '@cucumber/gherkin-streams': 5.0.1(@cucumber/gherkin@28.0.0)(@cucumber/message-streams@4.0.1(@cucumber/messages@24.1.0))(@cucumber/messages@24.1.0)
+ '@cucumber/gherkin-streams': 5.0.1(@cucumber/gherkin@28.0.0)(@cucumber/message-streams@4.0.1(@cucumber/messages@25.0.1))(@cucumber/messages@24.1.0)
'@cucumber/gherkin-utils': 9.0.0
- '@cucumber/html-formatter': 21.3.1(@cucumber/messages@24.1.0)
+ '@cucumber/html-formatter': 21.6.0(@cucumber/messages@24.1.0)
'@cucumber/message-streams': 4.0.1(@cucumber/messages@24.1.0)
'@cucumber/messages': 24.1.0
'@cucumber/tag-expressions': 6.1.0
@@ -1896,7 +1898,7 @@ snapshots:
chalk: 4.1.2
cli-table3: 0.6.3
commander: 10.0.1
- debug: 4.3.6(supports-color@8.1.1)
+ debug: 4.3.7(supports-color@8.1.1)
error-stack-parser: 2.1.4
figures: 3.2.0
glob: 10.4.5
@@ -1908,6 +1910,7 @@ snapshots:
lodash.merge: 4.6.2
lodash.mergewith: 4.6.2
luxon: 3.2.1
+ mime: 3.0.0
mkdirp: 2.1.6
mz: 2.7.0
progress: 2.0.3
@@ -1918,13 +1921,13 @@ snapshots:
strip-ansi: 6.0.1
supports-color: 8.1.1
tmp: 0.2.3
- type-fest: 4.24.0
+ type-fest: 4.26.1
util-arity: 1.1.0
xmlbuilder: 15.1.1
- yaml: 2.5.0
+ yaml: 2.5.1
yup: 1.2.0
- '@cucumber/gherkin-streams@5.0.1(@cucumber/gherkin@28.0.0)(@cucumber/message-streams@4.0.1(@cucumber/messages@24.1.0))(@cucumber/messages@24.1.0)':
+ '@cucumber/gherkin-streams@5.0.1(@cucumber/gherkin@28.0.0)(@cucumber/message-streams@4.0.1(@cucumber/messages@25.0.1))(@cucumber/messages@24.1.0)':
dependencies:
'@cucumber/gherkin': 28.0.0
'@cucumber/message-streams': 4.0.1(@cucumber/messages@24.1.0)
@@ -1944,11 +1947,11 @@ snapshots:
dependencies:
'@cucumber/messages': 24.1.0
- '@cucumber/html-formatter@21.3.1(@cucumber/messages@24.1.0)':
+ '@cucumber/html-formatter@21.6.0(@cucumber/messages@24.1.0)':
dependencies:
'@cucumber/messages': 24.1.0
- '@cucumber/html-formatter@21.6.0(@cucumber/messages@25.0.1)':
+ '@cucumber/html-formatter@21.7.0(@cucumber/messages@25.0.1)':
dependencies:
'@cucumber/messages': 25.0.1
@@ -1974,9 +1977,9 @@ snapshots:
reflect-metadata: 0.2.2
uuid: 9.0.1
- '@cucumber/pretty-formatter@1.0.1(@cucumber/cucumber@10.8.0)(@cucumber/messages@25.0.1)':
+ '@cucumber/pretty-formatter@1.0.1(@cucumber/cucumber@10.9.0)(@cucumber/messages@25.0.1)':
dependencies:
- '@cucumber/cucumber': 10.8.0
+ '@cucumber/cucumber': 10.9.0
'@cucumber/messages': 25.0.1
ansi-styles: 5.2.0
cli-table3: 0.6.5
@@ -1985,22 +1988,22 @@ snapshots:
'@cucumber/tag-expressions@6.1.0': {}
- '@cypress/request@3.0.1':
+ '@cypress/request@3.0.4':
dependencies:
aws-sign2: 0.7.0
- aws4: 1.13.0
+ aws4: 1.13.2
caseless: 0.12.0
combined-stream: 1.0.8
extend: 3.0.2
forever-agent: 0.6.1
- form-data: 2.3.3
- http-signature: 1.3.6
+ form-data: 2.5.1
+ http-signature: 1.4.0
is-typedarray: 1.0.0
isstream: 0.1.2
json-stringify-safe: 5.0.1
mime-types: 2.1.35
performance-now: 2.1.0
- qs: 6.10.4
+ qs: 6.13.0
safe-buffer: 5.2.1
tough-cookie: 4.1.4
tunnel-agent: 0.6.0
@@ -2016,142 +2019,142 @@ snapshots:
'@esbuild/aix-ppc64@0.19.12':
optional: true
- '@esbuild/aix-ppc64@0.23.0':
+ '@esbuild/aix-ppc64@0.23.1':
optional: true
'@esbuild/android-arm64@0.19.12':
optional: true
- '@esbuild/android-arm64@0.23.0':
+ '@esbuild/android-arm64@0.23.1':
optional: true
'@esbuild/android-arm@0.19.12':
optional: true
- '@esbuild/android-arm@0.23.0':
+ '@esbuild/android-arm@0.23.1':
optional: true
'@esbuild/android-x64@0.19.12':
optional: true
- '@esbuild/android-x64@0.23.0':
+ '@esbuild/android-x64@0.23.1':
optional: true
'@esbuild/darwin-arm64@0.19.12':
optional: true
- '@esbuild/darwin-arm64@0.23.0':
+ '@esbuild/darwin-arm64@0.23.1':
optional: true
'@esbuild/darwin-x64@0.19.12':
optional: true
- '@esbuild/darwin-x64@0.23.0':
+ '@esbuild/darwin-x64@0.23.1':
optional: true
'@esbuild/freebsd-arm64@0.19.12':
optional: true
- '@esbuild/freebsd-arm64@0.23.0':
+ '@esbuild/freebsd-arm64@0.23.1':
optional: true
'@esbuild/freebsd-x64@0.19.12':
optional: true
- '@esbuild/freebsd-x64@0.23.0':
+ '@esbuild/freebsd-x64@0.23.1':
optional: true
'@esbuild/linux-arm64@0.19.12':
optional: true
- '@esbuild/linux-arm64@0.23.0':
+ '@esbuild/linux-arm64@0.23.1':
optional: true
'@esbuild/linux-arm@0.19.12':
optional: true
- '@esbuild/linux-arm@0.23.0':
+ '@esbuild/linux-arm@0.23.1':
optional: true
'@esbuild/linux-ia32@0.19.12':
optional: true
- '@esbuild/linux-ia32@0.23.0':
+ '@esbuild/linux-ia32@0.23.1':
optional: true
'@esbuild/linux-loong64@0.19.12':
optional: true
- '@esbuild/linux-loong64@0.23.0':
+ '@esbuild/linux-loong64@0.23.1':
optional: true
'@esbuild/linux-mips64el@0.19.12':
optional: true
- '@esbuild/linux-mips64el@0.23.0':
+ '@esbuild/linux-mips64el@0.23.1':
optional: true
'@esbuild/linux-ppc64@0.19.12':
optional: true
- '@esbuild/linux-ppc64@0.23.0':
+ '@esbuild/linux-ppc64@0.23.1':
optional: true
'@esbuild/linux-riscv64@0.19.12':
optional: true
- '@esbuild/linux-riscv64@0.23.0':
+ '@esbuild/linux-riscv64@0.23.1':
optional: true
'@esbuild/linux-s390x@0.19.12':
optional: true
- '@esbuild/linux-s390x@0.23.0':
+ '@esbuild/linux-s390x@0.23.1':
optional: true
'@esbuild/linux-x64@0.19.12':
optional: true
- '@esbuild/linux-x64@0.23.0':
+ '@esbuild/linux-x64@0.23.1':
optional: true
'@esbuild/netbsd-x64@0.19.12':
optional: true
- '@esbuild/netbsd-x64@0.23.0':
+ '@esbuild/netbsd-x64@0.23.1':
optional: true
- '@esbuild/openbsd-arm64@0.23.0':
+ '@esbuild/openbsd-arm64@0.23.1':
optional: true
'@esbuild/openbsd-x64@0.19.12':
optional: true
- '@esbuild/openbsd-x64@0.23.0':
+ '@esbuild/openbsd-x64@0.23.1':
optional: true
'@esbuild/sunos-x64@0.19.12':
optional: true
- '@esbuild/sunos-x64@0.23.0':
+ '@esbuild/sunos-x64@0.23.1':
optional: true
'@esbuild/win32-arm64@0.19.12':
optional: true
- '@esbuild/win32-arm64@0.23.0':
+ '@esbuild/win32-arm64@0.23.1':
optional: true
'@esbuild/win32-ia32@0.19.12':
optional: true
- '@esbuild/win32-ia32@0.23.0':
+ '@esbuild/win32-ia32@0.23.1':
optional: true
'@esbuild/win32-x64@0.19.12':
optional: true
- '@esbuild/win32-x64@0.23.0':
+ '@esbuild/win32-x64@0.23.1':
optional: true
'@isaacs/cliui@8.0.2':
@@ -2168,7 +2171,7 @@ snapshots:
'@teppeis/multimaps@3.0.0': {}
- '@types/node@22.5.2':
+ '@types/node@22.5.4':
dependencies:
undici-types: 6.19.8
@@ -2182,7 +2185,7 @@ snapshots:
'@types/yauzl@2.10.3':
dependencies:
- '@types/node': 22.5.2
+ '@types/node': 22.5.4
optional: true
aggregate-error@3.1.0:
@@ -2239,7 +2242,7 @@ snapshots:
astral-regex@2.0.0: {}
- async@3.2.5: {}
+ async@3.2.6: {}
asynckit@0.4.0: {}
@@ -2247,7 +2250,7 @@ snapshots:
aws-sign2@0.7.0: {}
- aws4@1.13.0: {}
+ aws4@1.13.2: {}
balanced-match@1.0.2: {}
@@ -2304,7 +2307,7 @@ snapshots:
capital-case@1.0.4:
dependencies:
no-case: 3.0.4
- tslib: 2.6.3
+ tslib: 2.7.0
upper-case-first: 2.0.2
caseless@0.12.0: {}
@@ -2407,14 +2410,14 @@ snapshots:
core-util-is@1.0.2: {}
- cosmiconfig@9.0.0(typescript@5.5.4):
+ cosmiconfig@9.0.0(typescript@5.6.2):
dependencies:
env-paths: 2.2.1
import-fresh: 3.3.0
js-yaml: 4.1.0
parse-json: 5.2.0
optionalDependencies:
- typescript: 5.5.4
+ typescript: 5.6.2
cross-spawn@7.0.3:
dependencies:
@@ -2422,9 +2425,9 @@ snapshots:
shebang-command: 2.0.0
which: 2.0.2
- cypress@13.13.2:
+ cypress@13.14.2:
dependencies:
- '@cypress/request': 3.0.1
+ '@cypress/request': 3.0.4
'@cypress/xvfb': 1.2.4(supports-color@8.1.1)
'@types/sinonjs__fake-timers': 8.1.1
'@types/sizzle': 2.3.8
@@ -2440,7 +2443,7 @@ snapshots:
commander: 6.2.1
common-tags: 1.8.2
dayjs: 1.11.13
- debug: 4.3.6(supports-color@8.1.1)
+ debug: 4.3.7(supports-color@8.1.1)
enquirer: 2.4.1
eventemitter2: 6.4.7
execa: 4.1.0
@@ -2479,9 +2482,9 @@ snapshots:
optionalDependencies:
supports-color: 8.1.1
- debug@4.3.6(supports-color@8.1.1):
+ debug@4.3.7(supports-color@8.1.1):
dependencies:
- ms: 2.1.2
+ ms: 2.1.3
optionalDependencies:
supports-color: 8.1.1
@@ -2563,34 +2566,34 @@ snapshots:
'@esbuild/win32-ia32': 0.19.12
'@esbuild/win32-x64': 0.19.12
- esbuild@0.23.0:
+ esbuild@0.23.1:
optionalDependencies:
- '@esbuild/aix-ppc64': 0.23.0
- '@esbuild/android-arm': 0.23.0
- '@esbuild/android-arm64': 0.23.0
- '@esbuild/android-x64': 0.23.0
- '@esbuild/darwin-arm64': 0.23.0
- '@esbuild/darwin-x64': 0.23.0
- '@esbuild/freebsd-arm64': 0.23.0
- '@esbuild/freebsd-x64': 0.23.0
- '@esbuild/linux-arm': 0.23.0
- '@esbuild/linux-arm64': 0.23.0
- '@esbuild/linux-ia32': 0.23.0
- '@esbuild/linux-loong64': 0.23.0
- '@esbuild/linux-mips64el': 0.23.0
- '@esbuild/linux-ppc64': 0.23.0
- '@esbuild/linux-riscv64': 0.23.0
- '@esbuild/linux-s390x': 0.23.0
- '@esbuild/linux-x64': 0.23.0
- '@esbuild/netbsd-x64': 0.23.0
- '@esbuild/openbsd-arm64': 0.23.0
- '@esbuild/openbsd-x64': 0.23.0
- '@esbuild/sunos-x64': 0.23.0
- '@esbuild/win32-arm64': 0.23.0
- '@esbuild/win32-ia32': 0.23.0
- '@esbuild/win32-x64': 0.23.0
-
- escalade@3.1.2: {}
+ '@esbuild/aix-ppc64': 0.23.1
+ '@esbuild/android-arm': 0.23.1
+ '@esbuild/android-arm64': 0.23.1
+ '@esbuild/android-x64': 0.23.1
+ '@esbuild/darwin-arm64': 0.23.1
+ '@esbuild/darwin-x64': 0.23.1
+ '@esbuild/freebsd-arm64': 0.23.1
+ '@esbuild/freebsd-x64': 0.23.1
+ '@esbuild/linux-arm': 0.23.1
+ '@esbuild/linux-arm64': 0.23.1
+ '@esbuild/linux-ia32': 0.23.1
+ '@esbuild/linux-loong64': 0.23.1
+ '@esbuild/linux-mips64el': 0.23.1
+ '@esbuild/linux-ppc64': 0.23.1
+ '@esbuild/linux-riscv64': 0.23.1
+ '@esbuild/linux-s390x': 0.23.1
+ '@esbuild/linux-x64': 0.23.1
+ '@esbuild/netbsd-x64': 0.23.1
+ '@esbuild/openbsd-arm64': 0.23.1
+ '@esbuild/openbsd-x64': 0.23.1
+ '@esbuild/sunos-x64': 0.23.1
+ '@esbuild/win32-arm64': 0.23.1
+ '@esbuild/win32-ia32': 0.23.1
+ '@esbuild/win32-x64': 0.23.1
+
+ escalade@3.2.0: {}
escape-string-regexp@1.0.5: {}
@@ -2618,7 +2621,7 @@ snapshots:
extract-zip@2.0.1(supports-color@8.1.1):
dependencies:
- debug: 4.3.6(supports-color@8.1.1)
+ debug: 4.3.7(supports-color@8.1.1)
get-stream: 5.2.0
yauzl: 2.10.0
optionalDependencies:
@@ -2663,7 +2666,7 @@ snapshots:
forever-agent@0.6.1: {}
- form-data@2.3.3:
+ form-data@2.5.1:
dependencies:
asynckit: 0.4.0
combined-stream: 1.0.8
@@ -2705,7 +2708,7 @@ snapshots:
getos@3.2.1:
dependencies:
- async: 3.2.5
+ async: 3.2.6
getpass@0.1.7:
dependencies:
@@ -2784,7 +2787,7 @@ snapshots:
hosted-git-info@2.8.9: {}
- http-signature@1.3.6:
+ http-signature@1.4.0:
dependencies:
assert-plus: 1.0.0
jsprim: 2.0.2
@@ -2820,7 +2823,7 @@ snapshots:
dependencies:
ci-info: 3.9.0
- is-core-module@2.15.0:
+ is-core-module@2.15.1:
dependencies:
hasown: 2.0.2
@@ -2949,11 +2952,11 @@ snapshots:
lower-case@2.0.2:
dependencies:
- tslib: 2.6.3
+ tslib: 2.7.0
lru-cache@10.4.3: {}
- lru-cache@11.0.0: {}
+ lru-cache@11.0.1: {}
lru-cache@6.0.0:
dependencies:
@@ -2971,6 +2974,8 @@ snapshots:
dependencies:
mime-db: 1.52.0
+ mime@3.0.0: {}
+
mimic-fn@2.1.0: {}
minimatch@10.0.1:
@@ -3000,7 +3005,7 @@ snapshots:
ansi-colors: 4.1.3
browser-stdout: 1.3.1
chokidar: 3.6.0
- debug: 4.3.6(supports-color@8.1.1)
+ debug: 4.3.7(supports-color@8.1.1)
diff: 5.2.0
escape-string-regexp: 4.0.0
find-up: 5.0.0
@@ -3018,8 +3023,6 @@ snapshots:
yargs-parser: 20.2.9
yargs-unparser: 2.0.0
- ms@2.1.2: {}
-
ms@2.1.3: {}
multiple-cucumber-html-reporter@3.7.0:
@@ -3041,7 +3044,7 @@ snapshots:
no-case@3.0.4:
dependencies:
lower-case: 2.0.2
- tslib: 2.6.3
+ tslib: 2.7.0
node-hook@1.0.0: {}
@@ -3132,14 +3135,14 @@ snapshots:
path-scurry@2.0.0:
dependencies:
- lru-cache: 11.0.0
+ lru-cache: 11.0.1
minipass: 7.1.2
pend@1.2.0: {}
performance-now@2.1.0: {}
- picocolors@1.0.1: {}
+ picocolors@1.1.0: {}
picomatch@2.3.1: {}
@@ -3164,7 +3167,7 @@ snapshots:
punycode@2.3.1: {}
- qs@6.10.4:
+ qs@6.13.0:
dependencies:
side-channel: 1.0.6
@@ -3221,7 +3224,7 @@ snapshots:
resolve@1.22.8:
dependencies:
- is-core-module: 2.15.0
+ is-core-module: 2.15.1
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
@@ -3234,7 +3237,7 @@ snapshots:
rxjs@7.8.1:
dependencies:
- tslib: 2.6.3
+ tslib: 2.7.0
safe-buffer@5.2.1: {}
@@ -3306,16 +3309,16 @@ snapshots:
spdx-correct@3.2.0:
dependencies:
spdx-expression-parse: 3.0.1
- spdx-license-ids: 3.0.18
+ spdx-license-ids: 3.0.20
spdx-exceptions@2.5.0: {}
spdx-expression-parse@3.0.1:
dependencies:
spdx-exceptions: 2.5.0
- spdx-license-ids: 3.0.18
+ spdx-license-ids: 3.0.20
- spdx-license-ids@3.0.18: {}
+ spdx-license-ids@3.0.20: {}
split@1.0.1:
dependencies:
@@ -3410,7 +3413,7 @@ snapshots:
ts-dedent@2.2.0: {}
- tslib@2.6.3: {}
+ tslib@2.7.0: {}
tunnel-agent@0.6.0:
dependencies:
@@ -3426,9 +3429,9 @@ snapshots:
type-fest@2.19.0: {}
- type-fest@4.24.0: {}
+ type-fest@4.26.1: {}
- typescript@5.5.4: {}
+ typescript@5.6.2: {}
undici-types@6.19.8: {}
@@ -3440,7 +3443,7 @@ snapshots:
upper-case-first@2.0.2:
dependencies:
- tslib: 2.6.3
+ tslib: 2.7.0
url-parse@1.5.10:
dependencies:
@@ -3498,7 +3501,7 @@ snapshots:
yallist@4.0.0: {}
- yaml@2.5.0: {}
+ yaml@2.5.1: {}
yargs-parser@20.2.9: {}
@@ -3512,7 +3515,7 @@ snapshots:
yargs@16.2.0:
dependencies:
cliui: 7.0.4
- escalade: 3.1.2
+ escalade: 3.2.0
get-caller-file: 2.0.5
require-directory: 2.1.1
string-width: 4.2.3
diff --git a/jest.config.ts b/jest.config.ts
new file mode 100644
index 00000000..3d4075c1
--- /dev/null
+++ b/jest.config.ts
@@ -0,0 +1,23 @@
+import type { Config } from "jest";
+
+const config: Config = {
+ preset: "ts-jest/presets/js-with-ts-esm",
+ testEnvironment: "node",
+ verbose: true,
+ clearMocks: true,
+ collectCoverage: false,
+ coverageDirectory: "coverage",
+ coverageReporters: ["json-summary", "text", "lcov"],
+ coveragePathIgnorePatterns: ["/node_modules/", "/dist/", "/src/templates/"],
+ transform: {},
+ collectCoverageFrom: ["src/**"],
+ testMatch: ["**/*.spec.ts"],
+ moduleFileExtensions: ["ts", "js"],
+ moduleNameMapper: {
+ "\\.(css|less)$": "identity-obj-proxy",
+ "^(.+?)\\.js$": "$1",
+ },
+ extensionsToTreatAsEsm: [".ts"],
+};
+
+export default config;
diff --git a/lib/collect-jsons.js b/lib/collect-jsons.js
deleted file mode 100644
index b1215ed9..00000000
--- a/lib/collect-jsons.js
+++ /dev/null
@@ -1,131 +0,0 @@
-'use strict';
-
-const find = require('find');
-const fs = require('fs-extra');
-const jsonFile = require('jsonfile');
-const path = require('node:path');
-const { DateTime } = require('luxon');
-
-/**
- * Formats input date to yyyy/MM/dd HH:mm:ss
- *
- * @param {Date} date
- * @returns {string} formatted date in ISO format local time
- */
-function formatToLocalIso(date) {
- return typeof date === 'string' ?
- DateTime.fromISO(date).toFormat('yyyy/MM/dd HH:mm:ss')
- :
- DateTime.fromJSDate(date).toFormat('yyyy/MM/dd HH:mm:ss');
-}
-
-module.exports = function collectJSONS(options) {
- const jsonOutput = [];
- let files;
-
- try {
- files = find.fileSync(/\.json$/, path.resolve(process.cwd(), options.jsonDir));
- } catch (e) {
- throw new Error(`There were issues reading JSON-files from '${options.jsonDir}'.`);
- }
-
- if (files.length > 0) {
- files.map(file => {
- // Cucumber json can be empty, it's likely being created by another process (#47)
- const data = fs.readFileSync(file).toString() || "[]";
- const stats = fs.statSync(file);
- const reportTime = stats.birthtime;
-
- JSON.parse(data).map(json => {
- if (options.metadata && !json.metadata) {
- json.metadata = options.metadata;
- } else {
- json = Object.assign({
- "metadata": {
- "browser": {
- "name": "not known",
- "version": "not known"
- },
- "device": "not known",
- "platform": {
- "name": "not known",
- "version": "not known"
- }
- }
- }, json);
- }
-
- if (json.metadata && options.displayReportTime && reportTime) {
- json.metadata = Object.assign({reportTime: reportTime}, json.metadata)
- json.metadata.reportTime = formatToLocalIso(json.metadata.reportTime);
- }
-
- // Only check the feature hooks if there are elements (fail-safe)
- const {elements} = json;
-
- if (elements) {
- json.elements = elements.map(scenario => {
- const {before, after} = scenario;
-
- if (before) {
- scenario.steps = parseFeatureHooks(before, 'Before').concat(scenario.steps);
- }
- if (after) {
- scenario.steps = scenario.steps.concat(parseFeatureHooks(after, 'After'));
- }
-
- return scenario
- })
- }
-
- jsonOutput.push(json)
- });
- });
-
- if (options.saveCollectedJSON) {
- const file = path.resolve(options.reportPath, 'merged-output.json');
- fs.ensureDirSync(options.reportPath);
- jsonFile.writeFileSync(file, jsonOutput, {spaces: 2});
- }
-
- return jsonOutput;
- }
-
- console.log('\x1b[33m%s\x1b[0m', `WARNING: No JSON files found in '${options.jsonDir}'. NO REPORT CAN BE CREATED!`);
- return [];
-};
-
-/**
- * Add the feature hooks to the steps so the report will pick them up properly
- *
- * @param {object} data
- * @param {string} keyword
- * @returns {{
- * arguments: array,
- * keyword: string,
- * name: string,
- * result: {
- * status: string,
- * },
- * line: string,
- * match: {
- * location: string
- * },
- * embeddings: []
- * }}
- */
-function parseFeatureHooks(data, keyword) {
- return data.map(step => {
- const match = step.match && step.match.location ? step.match : {location: 'can not be determined'};
-
- return {
- arguments: step.arguments || [],
- keyword: keyword,
- name: 'Hook',
- result: step.result,
- line: '',
- match,
- embeddings: step.embeddings || []
- }
- })
-}
diff --git a/lib/generate-report.js b/lib/generate-report.js
deleted file mode 100755
index f05fadfe..00000000
--- a/lib/generate-report.js
+++ /dev/null
@@ -1,707 +0,0 @@
-'use strict';
-
-const _ = require('lodash');
-const fs = require('fs-extra');
-const jsonFile = require('jsonfile');
-const open = require('open');
-const path = require('node:path');
-const { v4: uuid } = require('uuid');
-const { Duration } = require('luxon');
-const collectJSONS = require('./collect-jsons');
-
-const REPORT_STYLESHEET = 'style.css';
-const GENERIC_JS = 'generic.js';
-const INDEX_HTML = 'index.html';
-const FEATURE_FOLDER = 'features';
-const FEATURES_OVERVIEW_INDEX_TEMPLATE = 'features-overview.index.tmpl';
-const CUSTOM_DATA_TEMPLATE = 'components/custom-data.tmpl';
-let FEATURES_OVERVIEW_TEMPLATE = 'components/features-overview.tmpl';
-const FEATURES_OVERVIEW_CUSTOM_METADATA_TEMPLATE =
- 'components/features-overview-custom-metadata.tmpl';
-const FEATURES_OVERVIEW_CHART_TEMPLATE =
- 'components/features-overview.chart.tmpl';
-const SCENARIOS_OVERVIEW_CHART_TEMPLATE =
- 'components/scenarios-overview.chart.tmpl';
-const FEATURE_OVERVIEW_INDEX_TEMPLATE = 'feature-overview.index.tmpl';
-let FEATURE_METADATA_OVERVIEW_TEMPLATE =
- 'components/feature-metadata-overview.tmpl';
-const FEATURE_CUSTOM_METADATA_OVERVIEW_TEMPLATE =
- 'components/feature-custom-metadata-overview.tmpl';
-const SCENARIOS_TEMPLATE = 'components/scenarios.tmpl';
-const RESULT_STATUS = {
- passed: 'passed',
- failed: 'failed',
- skipped: 'skipped',
- pending: 'pending',
- notDefined: 'undefined',
- ambiguous: 'ambiguous',
-};
-const DEFAULT_REPORT_NAME = 'Multiple Cucumber HTML Reporter';
-
-function generateReport(options) {
- if (!options) {
- throw new Error('Options need to be provided.');
- }
-
- if (!options.jsonDir) {
- throw new Error('A path which holds the JSON files should be provided.');
- }
-
- if (!options.reportPath) {
- throw new Error(
- 'An output path for the reports should be defined, no path was provided.'
- );
- }
-
- const customMetadata = !!options.customMetadata;
- const customData = options.customData || null;
- const plainDescription = !!options.plainDescription;
- const style = options.overrideStyle || REPORT_STYLESHEET;
- const customStyle = options.customStyle;
- const disableLog = !!options.disableLog;
- const openReportInBrowser = !!options.openReportInBrowser;
- const reportName = options.reportName || DEFAULT_REPORT_NAME;
- const reportPath = path.resolve(process.cwd(), options.reportPath);
- const saveCollectedJSON = !!options.saveCollectedJSON;
- const displayDuration = !!options.displayDuration;
- const displayReportTime = !!options.displayReportTime;
- const durationInMS = !!options.durationInMS;
- const hideMetadata = !!options.hideMetadata;
- const pageTitle = options.pageTitle || 'Multiple Cucumber HTML Reporter';
- const pageFooter = options.pageFooter || null;
- const useCDN = !!options.useCDN;
- const staticFilePath = !!options.staticFilePath;
-
- fs.ensureDirSync(reportPath);
- fs.ensureDirSync(path.resolve(reportPath, FEATURE_FOLDER));
-
- const allFeatures = collectJSONS(options);
-
- let suite = {
- app: 0,
- customMetadata: customMetadata,
- customData: customData,
- style: style,
- customStyle: customStyle,
- useCDN: useCDN,
- hideMetadata: hideMetadata,
- displayReportTime: displayReportTime,
- displayDuration: displayDuration,
- browser: 0,
- name: '',
- version: 'version',
- time: new Date(),
- features: allFeatures,
- featureCount: {
- ambiguous: 0,
- failed: 0,
- passed: 0,
- notDefined: 0,
- pending: 0,
- skipped: 0,
- total: 0,
- ambiguousPercentage: 0,
- failedPercentage: 0,
- notDefinedPercentage: 0,
- pendingPercentage: 0,
- skippedPercentage: 0,
- passedPercentage: 0,
- },
- reportName: reportName,
- scenarios: {
- failed: 0,
- ambiguous: 0,
- notDefined: 0,
- pending: 0,
- skipped: 0,
- passed: 0,
- total: 0,
- },
- totalTime: 0,
- };
-
- _parseFeatures(suite);
-
- // Percentages
- suite.featureCount.ambiguousPercentage = _calculatePercentage(
- suite.featureCount.ambiguous,
- suite.featureCount.total
- );
- suite.featureCount.failedPercentage = _calculatePercentage(
- suite.featureCount.failed,
- suite.featureCount.total
- );
- suite.featureCount.notDefinedPercentage = _calculatePercentage(
- suite.featureCount.notDefined,
- suite.featureCount.total
- );
- suite.featureCount.pendingPercentage = _calculatePercentage(
- suite.featureCount.pending,
- suite.featureCount.total
- );
- suite.featureCount.skippedPercentage = _calculatePercentage(
- suite.featureCount.skipped,
- suite.featureCount.total
- );
- suite.featureCount.passedPercentage = _calculatePercentage(
- suite.featureCount.passed,
- suite.featureCount.total
- );
-
- /**
- * Calculate and return the percentage
- * @param {number} amount
- * @param {number} total
- * @return {string} percentage
- * @private
- */
- function _calculatePercentage(amount, total) {
- return ((amount / total) * 100).toFixed(2);
- }
-
- /* istanbul ignore else */
- if (saveCollectedJSON) {
- jsonFile.writeFileSync(
- path.resolve(reportPath, 'enriched-output.json'),
- suite,
- { spaces: 2 }
- );
- }
-
- _createFeaturesOverviewIndexPage(suite);
- _createFeatureIndexPages(suite);
-
- /* istanbul ignore else */
- if (!disableLog) {
- console.log(
- '\x1b[34m%s\x1b[0m',
- `\n
-=====================================================================================
- Multiple Cucumber HTML report generated in:
-
- ${path.join(reportPath, INDEX_HTML)}
-=====================================================================================\n`
- );
- }
-
- /* istanbul ignore if */
- if (openReportInBrowser) {
- open(path.join(reportPath, INDEX_HTML));
- }
-
- function _parseFeatures(suite) {
- suite.features.forEach((feature) => {
- feature.scenarios = {
- passed: 0,
- failed: 0,
- notDefined: 0,
- skipped: 0,
- pending: 0,
- ambiguous: 0,
- passedPercentage: 0,
- failedPercentage: 0,
- notDefinedPercentage: 0,
- skippedPercentage: 0,
- pendingPercentage: 0,
- ambiguousPercentage: 0,
- total: 0,
- };
- feature.duration = 0;
- feature.time = '00:00:00.000';
- feature.isFailed = false;
- feature.isAmbiguous = false;
- feature.isSkipped = false;
- feature.isNotdefined = false;
- feature.isPending = false;
- suite.featureCount.total++;
- const idPrefix = staticFilePath ? '' : `${uuid()}.`;
- feature.id = `${idPrefix}${feature.id}`.replace(/[^a-zA-Z0-9-_]/g, '-');
- feature.app = 0;
- feature.browser = 0;
-
- if (!feature.elements) {
- return;
- }
-
- feature = _parseScenarios(feature, suite);
-
- if (feature.isFailed) {
- suite.featureCount.failed++;
- feature.failed++;
- } else if (feature.isAmbiguous) {
- suite.featureCount.ambiguous++;
- feature.ambiguous++;
- } else if (feature.isNotdefined) {
- feature.notDefined++;
- suite.featureCount.notDefined++;
- } else if (feature.isPending) {
- feature.pending++;
- suite.featureCount.pending++;
- } else if (feature.isSkipped) {
- feature.skipped++;
- suite.featureCount.skipped++;
- } else {
- feature.passed++;
- suite.featureCount.passed++;
- }
-
- if (feature.duration) {
- feature.totalTime += feature.duration;
- feature.time = formatDuration(feature.duration);
- }
-
- // Check if browser / app is used
- suite.app = feature.metadata.app ? suite.app + 1 : suite.app;
- suite.browser = feature.metadata.browser
- ? suite.browser + 1
- : suite.browser;
-
- // Percentages
- feature.scenarios.ambiguousPercentage = _calculatePercentage(
- feature.scenarios.ambiguous,
- feature.scenarios.total
- );
- feature.scenarios.failedPercentage = _calculatePercentage(
- feature.scenarios.failed,
- feature.scenarios.total
- );
- feature.scenarios.notDefinedPercentage = _calculatePercentage(
- feature.scenarios.notDefined,
- feature.scenarios.total
- );
- feature.scenarios.passedPercentage = _calculatePercentage(
- feature.scenarios.passed,
- feature.scenarios.total
- );
- feature.scenarios.pendingPercentage = _calculatePercentage(
- feature.scenarios.pending,
- feature.scenarios.total
- );
- feature.scenarios.skippedPercentage = _calculatePercentage(
- feature.scenarios.skipped,
- feature.scenarios.total
- );
- suite.scenarios.ambiguousPercentage = _calculatePercentage(
- suite.scenarios.ambiguous,
- suite.scenarios.total
- );
- suite.scenarios.failedPercentage = _calculatePercentage(
- suite.scenarios.failed,
- suite.scenarios.total
- );
- suite.scenarios.notDefinedPercentage = _calculatePercentage(
- suite.scenarios.notDefined,
- suite.scenarios.total
- );
- suite.scenarios.passedPercentage = _calculatePercentage(
- suite.scenarios.passed,
- suite.scenarios.total
- );
- suite.scenarios.pendingPercentage = _calculatePercentage(
- suite.scenarios.pending,
- suite.scenarios.total
- );
- suite.scenarios.skippedPercentage = _calculatePercentage(
- suite.scenarios.skipped,
- suite.scenarios.total
- );
- });
- }
-
- /**
- * Parse each scenario within a feature
- * @param {object} feature a feature with all the scenarios in it
- * @return {object} return the parsed feature
- * @private
- */
- function _parseScenarios(feature) {
- feature.elements.forEach((scenario) => {
- scenario.passed = 0;
- scenario.failed = 0;
- scenario.notDefined = 0;
- scenario.skipped = 0;
- scenario.pending = 0;
- scenario.ambiguous = 0;
- scenario.duration = 0;
- scenario.time = '00:00:00.000';
-
- scenario = _parseSteps(scenario);
-
- if (scenario.duration > 0) {
- feature.duration += scenario.duration;
- scenario.time = formatDuration(scenario.duration);
- }
-
- if (scenario.hasOwnProperty('description') && scenario.description) {
- scenario.description = scenario.description.replace(
- new RegExp('\r?\n', 'g'),
- '
'
- );
- }
-
- if (scenario.type === 'background') {
- return;
- }
-
- if (scenario.failed > 0) {
- suite.scenarios.total++;
- suite.scenarios.failed++;
- feature.scenarios.total++;
- feature.isFailed = true;
- return feature.scenarios.failed++;
- }
-
- if (scenario.ambiguous > 0) {
- suite.scenarios.total++;
- suite.scenarios.ambiguous++;
- feature.scenarios.total++;
- feature.isAmbiguous = true;
- return feature.scenarios.ambiguous++;
- }
-
- if (scenario.notDefined > 0) {
- suite.scenarios.total++;
- suite.scenarios.notDefined++;
- feature.scenarios.total++;
- feature.isNotdefined = true;
- return feature.scenarios.notDefined++;
- }
-
- if (scenario.pending > 0) {
- suite.scenarios.total++;
- suite.scenarios.pending++;
- feature.scenarios.total++;
- feature.isPending = true;
- return feature.scenarios.pending++;
- }
-
- if (scenario.skipped > 0) {
- suite.scenarios.total++;
- suite.scenarios.skipped++;
- feature.scenarios.total++;
- return feature.scenarios.skipped++;
- }
-
- /* istanbul ignore else */
- if (scenario.passed > 0) {
- suite.scenarios.total++;
- suite.scenarios.passed++;
- feature.scenarios.total++;
- return feature.scenarios.passed++;
- }
- });
-
- feature.isSkipped = feature.scenarios.total === feature.scenarios.skipped;
-
- return feature;
- }
-
- /**
- * Parse all the scenario steps and enrich them with the correct data
- * @param {object} scenario Preparsed scenario
- * @return {object} A parsed scenario
- * @private
- */
- function _parseSteps(scenario) {
- scenario.steps.forEach((step) => {
- if (step.embeddings !== undefined) {
- step.attachments = [];
- step.embeddings.forEach((embedding, embeddingIndex) => {
- /* Decode Base64 for Text-ish attachements */
- if(
- embedding.mime_type === 'text/html' ||
- embedding.mime_type === 'text/plain'
- ) {
- embedding.data = Buffer.from(embedding.data.toString(), 'base64')
- }
- /* istanbul ignore else */
- if (
- embedding.mime_type === 'application/json' ||
- (embedding.media && embedding.media.type === 'application/json')
- ) {
- embedding.data = Buffer.from(embedding.data, 'base64').toString()
- step.json = (step.json ? step.json : []).concat([
- typeof embedding.data === 'string'
- ? JSON.parse(embedding.data)
- : embedding.data,
- ]);
- } else if (
- embedding.mime_type === 'text/html' ||
- (embedding.media && embedding.media.type === 'text/html')
- ) {
- step.html = (step.html ? step.html : []).concat([embedding.data]);
- } else if (
- embedding.mime_type === 'text/plain' ||
- (embedding.media && embedding.media.type === 'text/plain')
- ) {
- step.text = (step.text ? step.text : []).concat([
- _escapeHtml(embedding.data),
- ]);
- } else if (
- embedding.mime_type === 'image/png' ||
- (embedding.media && embedding.media.type === 'image/png')
- ) {
- step.image = (step.image ? step.image : []).concat([
- 'data:image/png;base64,' + embedding.data,
- ]);
- step.embeddings[embeddingIndex] = {};
- } else if (
- embedding.mime_type === 'video/webm' ||
- (embedding.media && embedding.media.type === 'video/webm')
- ) {
- step.video = (step.video ? step.video : []).concat([
- 'data:video/webm;base64,' + embedding.data,
- ]);
- step.embeddings[embeddingIndex] = {};
- } else {
- let embeddingType = 'text/plain';
- if (embedding.mime_type) {
- embeddingType = embedding.mime_type;
- } else if (embedding.media && embedding.media.type) {
- embeddingType = embedding.media.type;
- }
- step.attachments.push({
- data: 'data:' + embeddingType + ';base64,' + embedding.data,
- type: embeddingType,
- });
- step.embeddings[embeddingIndex] = {};
- }
- });
- }
-
- if (step.doc_string !== undefined) {
- step.id = `${uuid()}.${scenario.id}.${step.name}`.replace(
- /[^a-zA-Z0-9-_]/g,
- '-'
- );
- step.restWireData = _escapeHtml(step.doc_string.value).replace(
- new RegExp('\r?\n', 'g'),
- '
'
- );
- }
-
- if (
- !step.result ||
- // Don't log steps that don't have a text/hidden/images/attachments unless they are failed.
- // This is for the hooks
- (step.hidden &&
- !step.text &&
- !step.image &&
- !step.video &&
- _.size(step.attachments) === 0 &&
- step.result.status !== RESULT_STATUS.failed)
- ) {
- return 0;
- }
-
- if (step.result.duration) {
- scenario.duration += step.result.duration;
- step.time = formatDuration(step.result.duration);
- }
-
- if (step.result.status.toLowerCase() === RESULT_STATUS.passed) {
- return scenario.passed++;
- }
-
- if (step.result.status.toLowerCase() === RESULT_STATUS.failed) {
- return scenario.failed++;
- }
-
- if (step.result.status.toLowerCase() === RESULT_STATUS.notDefined) {
- return scenario.notDefined++;
- }
-
- if (step.result.status.toLowerCase() === RESULT_STATUS.pending) {
- return scenario.pending++;
- }
-
- if (step.result.status.toLowerCase() === RESULT_STATUS.ambiguous) {
- return scenario.ambiguous++;
- }
-
- scenario.skipped++;
- });
-
- return scenario;
- }
-
- /**
- * Read a template file and return it's content
- * @param {string} fileName
- * @return {*} Content of the file
- * @private
- */
- function _readTemplateFile(fileName) {
- if (fileName) {
- try {
- fs.accessSync(fileName, fs.constants.R_OK);
- return fs.readFileSync(fileName, 'utf-8');
- } catch (err) {
- return fs.readFileSync(
- path.join(__dirname, '..', 'templates', fileName),
- 'utf-8'
- );
- }
- } else {
- return '';
- }
- }
-
- /**
- * Escape html in string
- * @param string
- * @return {string}
- * @private
- */
- function _escapeHtml(string) {
- return typeof string === 'string' || string instanceof String
- ? string.replace(
- /[^0-9A-Za-z ]/g,
- (chr) => '' + chr.charCodeAt(0) + ';'
- )
- : string;
- }
-
- /**
- * Generate the features overview
- * @param {object} suite JSON object with all the features and scenarios
- * @private
- */
- function _createFeaturesOverviewIndexPage(suite) {
- const featuresOverviewIndex = path.resolve(reportPath, INDEX_HTML);
- if (suite.customMetadata && options.metadata) {
- suite.features.forEach((feature) => {
- if (!feature.metadata) {
- feature.metadata = options.metadata;
- }
- });
- }
- FEATURES_OVERVIEW_TEMPLATE = suite.customMetadata
- ? FEATURES_OVERVIEW_CUSTOM_METADATA_TEMPLATE
- : FEATURES_OVERVIEW_TEMPLATE;
-
- fs.writeFileSync(
- featuresOverviewIndex,
- _.template(_readTemplateFile(FEATURES_OVERVIEW_INDEX_TEMPLATE))({
- suite: suite,
- featuresOverview: _.template(
- _readTemplateFile(FEATURES_OVERVIEW_TEMPLATE)
- )({
- suite: suite,
- _: _,
- }),
- featuresScenariosOverviewChart: _.template(
- _readTemplateFile(SCENARIOS_OVERVIEW_CHART_TEMPLATE)
- )({
- overviewPage: true,
- scenarios: suite.scenarios,
- _: _,
- }),
- customDataOverview: _.template(_readTemplateFile(CUSTOM_DATA_TEMPLATE))(
- {
- suite: suite,
- _: _,
- }
- ),
- featuresOverviewChart: _.template(
- _readTemplateFile(FEATURES_OVERVIEW_CHART_TEMPLATE)
- )({
- suite: suite,
- _: _,
- }),
- customStyle: _readTemplateFile(suite.customStyle),
- styles: _readTemplateFile(suite.style),
- useCDN: suite.useCDN,
- genericScript: _readTemplateFile(GENERIC_JS),
- pageTitle: pageTitle,
- reportName: reportName,
- pageFooter: pageFooter,
- })
- );
- }
-
- /**
- * Generate the feature pages
- * @param suite suite JSON object with all the features and scenarios
- * @private
- */
- function _createFeatureIndexPages(suite) {
- // Set custom metadata overview for the feature
- FEATURE_METADATA_OVERVIEW_TEMPLATE = suite.customMetadata
- ? FEATURE_CUSTOM_METADATA_OVERVIEW_TEMPLATE
- : FEATURE_METADATA_OVERVIEW_TEMPLATE;
-
- suite.features.forEach((feature) => {
- const featurePage = path.resolve(
- reportPath,
- `${FEATURE_FOLDER}/${feature.id}.html`
- );
- fs.writeFileSync(
- featurePage,
- _.template(_readTemplateFile(FEATURE_OVERVIEW_INDEX_TEMPLATE))({
- feature: feature,
- suite: suite,
- featureScenariosOverviewChart: _.template(
- _readTemplateFile(SCENARIOS_OVERVIEW_CHART_TEMPLATE)
- )({
- overviewPage: false,
- feature: feature,
- suite: suite,
- scenarios: feature.scenarios,
- _: _,
- }),
- featureMetadataOverview: _.template(
- _readTemplateFile(FEATURE_METADATA_OVERVIEW_TEMPLATE)
- )({
- metadata: feature.metadata,
- _: _,
- }),
- scenarioTemplate: _.template(_readTemplateFile(SCENARIOS_TEMPLATE))({
- suite: suite,
- scenarios: feature.elements,
- _: _,
- }),
- useCDN: suite.useCDN,
- customStyle: _readTemplateFile(suite.customStyle),
- styles: _readTemplateFile(suite.style),
- genericScript: _readTemplateFile(GENERIC_JS),
- pageTitle: pageTitle,
- reportName: reportName,
- pageFooter: pageFooter,
- plainDescription: plainDescription,
- })
- );
- // Copy the assets, but first check if they don't exist and not useCDN
- if (
- !fs.pathExistsSync(path.resolve(reportPath, 'assets')) &&
- !suite.useCDN
- ) {
- fs.copySync(
- path.resolve(
- path.dirname(require.resolve('../package.json')),
- 'templates/assets'
- ),
- path.resolve(reportPath, 'assets')
- );
- }
- });
- }
-
- /**
- * Formats the duration to HH:mm:ss.SSS.
- *
- * @param {number} duration a time duration usually in ns form; it can be
- * possible to interpret the value as ms, see the option {durationInMS}.
- *
- * @return {string} the duration formatted as a string
- */
- function formatDuration(duration) {
- return Duration.fromMillis(
- durationInMS ? duration : duration / 1000000
- ).toFormat('hh:mm:ss.SSS');
- }
-}
-
-module.exports = {
- generate: generateReport,
-};
diff --git a/package.json b/package.json
index dae3c6f7..1b9db539 100644
--- a/package.json
+++ b/package.json
@@ -2,6 +2,7 @@
"name": "multiple-cucumber-html-reporter",
"version": "3.7.0",
"description": "Generate beautiful Cucumber.js reports for multiple instances (browsers / devices)",
+ "type": "module",
"keywords": [
"cucumber",
"html",
@@ -10,7 +11,12 @@
"html report",
"json to html"
],
- "main": "lib/generate-report.js",
+ "main": "dist/generate-report.js",
+ "files": [
+ "dist",
+ "README.md",
+ "LICENSE"
+ ],
"license": "MIT",
"scripts": {
"release": "release-it",
@@ -18,9 +24,13 @@
"release.patch": "pnpm release.ci patch",
"release.minor": "pnpm release.ci minor",
"release.major": "pnpm release.ci major",
+ "clean": "rm -rf dist",
+ "build": "pnpm clean && tsc && cp -R src/templates dist/templates",
+ "dev": "pnpm build -w",
"test": "node ./test/test.js",
- "unit.test": "jasmine JASMINE_CONFIG_PATH=test/unit/jasmine.json",
- "unit.test.coverage": "JASMINE_CONFIG_PATH=test/unit/jasmine.json nyc jasmine"
+ "new:test": "pnpm node ./src/test/test.mjs",
+ "new:unit:test": "NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest",
+ "new:unit:coverage": "pnpm new:unit:test --coverage"
},
"repository": {
"type": "git",
@@ -32,18 +42,28 @@
},
"homepage": "https://github.com/WasiqB/multiple-cucumber-html-reporter#readme",
"dependencies": {
- "find": "^0.3.0",
"fs-extra": "^11.2.0",
- "jsonfile": "^6.1.0",
"lodash": "^4.17.21",
- "luxon": "^3.4.4",
- "open": "^8.4.2",
+ "luxon": "^3.5.0",
+ "open": "^10.1.0",
"uuid": "^10.0.0"
},
"devDependencies": {
- "jasmine": "^5.1.0",
- "nyc": "^17.0.0",
- "release-it": "^17.6.0"
+ "@types/find": "^0.2.4",
+ "@types/fs-extra": "^11.0.4",
+ "@types/jest": "^29.5.12",
+ "@types/jsonfile": "^6.1.4",
+ "@types/lodash": "^4.17.7",
+ "@types/luxon": "^3.4.2",
+ "@types/node": "^22.5.4",
+ "@types/uuid": "^10.0.0",
+ "find": "^0.3.0",
+ "jest": "^29.7.0",
+ "jsonfile": "^6.1.0",
+ "release-it": "^17.6.0",
+ "ts-jest": "^29.2.5",
+ "ts-node": "^10.9.2",
+ "typescript": "^5.6.2"
},
- "packageManager": "pnpm@9.5.0"
+ "packageManager": "pnpm@9.9.0"
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 66db3e6a..376f7166 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -8,37 +8,67 @@ importers:
.:
dependencies:
- find:
- specifier: ^0.3.0
- version: 0.3.0
fs-extra:
specifier: ^11.2.0
version: 11.2.0
- jsonfile:
- specifier: ^6.1.0
- version: 6.1.0
lodash:
specifier: ^4.17.21
version: 4.17.21
luxon:
- specifier: ^3.4.4
- version: 3.4.4
+ specifier: ^3.5.0
+ version: 3.5.0
open:
- specifier: ^8.4.2
- version: 8.4.2
+ specifier: ^10.1.0
+ version: 10.1.0
uuid:
specifier: ^10.0.0
version: 10.0.0
devDependencies:
- jasmine:
- specifier: ^5.1.0
- version: 5.1.0
- nyc:
- specifier: ^17.0.0
- version: 17.0.0
+ '@types/find':
+ specifier: ^0.2.4
+ version: 0.2.4
+ '@types/fs-extra':
+ specifier: ^11.0.4
+ version: 11.0.4
+ '@types/jest':
+ specifier: ^29.5.12
+ version: 29.5.12
+ '@types/jsonfile':
+ specifier: ^6.1.4
+ version: 6.1.4
+ '@types/lodash':
+ specifier: ^4.17.7
+ version: 4.17.7
+ '@types/luxon':
+ specifier: ^3.4.2
+ version: 3.4.2
+ '@types/node':
+ specifier: ^22.5.4
+ version: 22.5.4
+ '@types/uuid':
+ specifier: ^10.0.0
+ version: 10.0.0
+ find:
+ specifier: ^0.3.0
+ version: 0.3.0
+ jest:
+ specifier: ^29.7.0
+ version: 29.7.0(@types/node@22.5.4)(ts-node@10.9.2(@types/node@22.5.4)(typescript@5.6.2))
+ jsonfile:
+ specifier: ^6.1.0
+ version: 6.1.0
release-it:
specifier: ^17.6.0
- version: 17.6.0
+ version: 17.6.0(typescript@5.6.2)
+ ts-jest:
+ specifier: ^29.2.5
+ version: 29.2.5(@babel/core@7.24.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(jest@29.7.0(@types/node@22.5.4)(ts-node@10.9.2(@types/node@22.5.4)(typescript@5.6.2)))(typescript@5.6.2)
+ ts-node:
+ specifier: ^10.9.2
+ version: 10.9.2(@types/node@22.5.4)(typescript@5.6.2)
+ typescript:
+ specifier: ^5.6.2
+ version: 5.6.2
packages:
@@ -88,6 +118,10 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0
+ '@babel/helper-plugin-utils@7.24.8':
+ resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-simple-access@7.24.7':
resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==}
engines: {node: '>=6.9.0'}
@@ -121,6 +155,97 @@ packages:
engines: {node: '>=6.0.0'}
hasBin: true
+ '@babel/plugin-syntax-async-generators@7.8.4':
+ resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-bigint@7.8.3':
+ resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-class-properties@7.12.13':
+ resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-class-static-block@7.14.5':
+ resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-import-attributes@7.25.6':
+ resolution: {integrity: sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-import-meta@7.10.4':
+ resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-json-strings@7.8.3':
+ resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-jsx@7.24.7':
+ resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-logical-assignment-operators@7.10.4':
+ resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3':
+ resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-numeric-separator@7.10.4':
+ resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-object-rest-spread@7.8.3':
+ resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-optional-catch-binding@7.8.3':
+ resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-optional-chaining@7.8.3':
+ resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-private-property-in-object@7.14.5':
+ resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-top-level-await@7.14.5':
+ resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-typescript@7.25.4':
+ resolution: {integrity: sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/template@7.24.7':
resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==}
engines: {node: '>=6.9.0'}
@@ -133,6 +258,13 @@ packages:
resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==}
engines: {node: '>=6.9.0'}
+ '@bcoe/v8-coverage@0.2.3':
+ resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
+
+ '@cspotcode/source-map-support@0.8.1':
+ resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
+ engines: {node: '>=12'}
+
'@iarna/toml@2.2.5':
resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==}
@@ -140,10 +272,6 @@ packages:
resolution: {integrity: sha512-R7Gsg6elpuqdn55fBH2y9oYzrU/yKrSmIsDX4ROT51vohrECFzTf2zw9BfUbOW8xjfmM2QbVoVYdTwhrtEKWSQ==}
engines: {node: '>=18'}
- '@isaacs/cliui@8.0.2':
- resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
- engines: {node: '>=12'}
-
'@istanbuljs/load-nyc-config@1.1.0':
resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==}
engines: {node: '>=8'}
@@ -152,6 +280,72 @@ packages:
resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
engines: {node: '>=8'}
+ '@jest/console@29.7.0':
+ resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/core@29.7.0':
+ resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ peerDependencies:
+ node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
+ peerDependenciesMeta:
+ node-notifier:
+ optional: true
+
+ '@jest/environment@29.7.0':
+ resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/expect-utils@29.7.0':
+ resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/expect@29.7.0':
+ resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/fake-timers@29.7.0':
+ resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/globals@29.7.0':
+ resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/reporters@29.7.0':
+ resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ peerDependencies:
+ node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
+ peerDependenciesMeta:
+ node-notifier:
+ optional: true
+
+ '@jest/schemas@29.6.3':
+ resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/source-map@29.6.3':
+ resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/test-result@29.7.0':
+ resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/test-sequencer@29.7.0':
+ resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/transform@29.7.0':
+ resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/types@29.6.3':
+ resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
'@jridgewell/gen-mapping@0.3.5':
resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
engines: {node: '>=6.0.0'}
@@ -170,6 +364,9 @@ packages:
'@jridgewell/trace-mapping@0.3.25':
resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
+ '@jridgewell/trace-mapping@0.3.9':
+ resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
+
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
@@ -234,10 +431,6 @@ packages:
'@octokit/types@13.5.0':
resolution: {integrity: sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==}
- '@pkgjs/parseargs@0.11.0':
- resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
- engines: {node: '>=14'}
-
'@pnpm/config.env-replace@1.1.0':
resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==}
engines: {node: '>=12.22.0'}
@@ -250,6 +443,9 @@ packages:
resolution: {integrity: sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==}
engines: {node: '>=12'}
+ '@sinclair/typebox@0.27.8':
+ resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
+
'@sindresorhus/is@5.6.0':
resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==}
engines: {node: '>=14.16'}
@@ -258,6 +454,12 @@ packages:
resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==}
engines: {node: '>=18'}
+ '@sinonjs/commons@3.0.1':
+ resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==}
+
+ '@sinonjs/fake-timers@10.3.0':
+ resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==}
+
'@szmarczak/http-timer@5.0.1':
resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==}
engines: {node: '>=14.16'}
@@ -265,17 +467,91 @@ packages:
'@tootallnate/quickjs-emscripten@0.23.0':
resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==}
+ '@tsconfig/node10@1.0.11':
+ resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
+
+ '@tsconfig/node12@1.0.11':
+ resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
+
+ '@tsconfig/node14@1.0.3':
+ resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
+
+ '@tsconfig/node16@1.0.4':
+ resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
+
+ '@types/babel__core@7.20.5':
+ resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
+
+ '@types/babel__generator@7.6.8':
+ resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==}
+
+ '@types/babel__template@7.4.4':
+ resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
+
+ '@types/babel__traverse@7.20.6':
+ resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==}
+
+ '@types/find@0.2.4':
+ resolution: {integrity: sha512-8cw1q8jruVOJoojgx8CimvFC4SP+sevnKOifRJTKXsngeWi/md1womzXRBv/LWNCoDEh4U51zc3r8HUAH2QyEg==}
+
+ '@types/fs-extra@11.0.4':
+ resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==}
+
+ '@types/graceful-fs@4.1.9':
+ resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==}
+
'@types/http-cache-semantics@4.0.4':
resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==}
+ '@types/istanbul-lib-coverage@2.0.6':
+ resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
+
+ '@types/istanbul-lib-report@3.0.3':
+ resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==}
+
+ '@types/istanbul-reports@3.0.4':
+ resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==}
+
+ '@types/jest@29.5.12':
+ resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==}
+
+ '@types/jsonfile@6.1.4':
+ resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==}
+
+ '@types/lodash@4.17.7':
+ resolution: {integrity: sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==}
+
+ '@types/luxon@3.4.2':
+ resolution: {integrity: sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==}
+
+ '@types/node@22.5.4':
+ resolution: {integrity: sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==}
+
+ '@types/stack-utils@2.0.3':
+ resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==}
+
+ '@types/uuid@10.0.0':
+ resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==}
+
+ '@types/yargs-parser@21.0.3':
+ resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
+
+ '@types/yargs@17.0.33':
+ resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==}
+
+ acorn-walk@8.3.3:
+ resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==}
+ engines: {node: '>=0.4.0'}
+
+ acorn@8.12.1:
+ resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
agent-base@7.1.1:
resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==}
engines: {node: '>= 14'}
- aggregate-error@3.1.0:
- resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
- engines: {node: '>=8'}
-
ansi-align@3.0.1:
resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
@@ -299,16 +575,20 @@ packages:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
+ ansi-styles@5.2.0:
+ resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
+ engines: {node: '>=10'}
+
ansi-styles@6.2.1:
resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
engines: {node: '>=12'}
- append-transform@2.0.0:
- resolution: {integrity: sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==}
- engines: {node: '>=8'}
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
- archy@1.0.0:
- resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==}
+ arg@4.1.3:
+ resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
argparse@1.0.10:
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
@@ -323,6 +603,34 @@ packages:
async-retry@1.3.3:
resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==}
+ async@3.2.6:
+ resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
+
+ babel-jest@29.7.0:
+ resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ peerDependencies:
+ '@babel/core': ^7.8.0
+
+ babel-plugin-istanbul@6.1.1:
+ resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==}
+ engines: {node: '>=8'}
+
+ babel-plugin-jest-hoist@29.6.3:
+ resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ babel-preset-current-node-syntax@1.1.0:
+ resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ babel-preset-jest@29.6.3:
+ resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
@@ -358,6 +666,16 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
+ bs-logger@0.2.6:
+ resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==}
+ engines: {node: '>= 6'}
+
+ bser@2.1.1:
+ resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
buffer@5.7.1:
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
@@ -373,10 +691,6 @@ packages:
resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==}
engines: {node: '>=14.16'}
- caching-transform@4.0.0:
- resolution: {integrity: sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==}
- engines: {node: '>=8'}
-
callsites@3.1.0:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
@@ -385,6 +699,10 @@ packages:
resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
engines: {node: '>=6'}
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
camelcase@7.0.1:
resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==}
engines: {node: '>=14.16'}
@@ -404,6 +722,10 @@ packages:
resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+ char-regex@1.0.2:
+ resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
+ engines: {node: '>=10'}
+
chardet@0.7.0:
resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
@@ -411,9 +733,8 @@ packages:
resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
engines: {node: '>=8'}
- clean-stack@2.2.0:
- resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
- engines: {node: '>=6'}
+ cjs-module-lexer@1.4.1:
+ resolution: {integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==}
cli-boxes@3.0.0:
resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==}
@@ -435,13 +756,21 @@ packages:
resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
engines: {node: '>= 12'}
- cliui@6.0.0:
- resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==}
+ cliui@8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
clone@1.0.4:
resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
engines: {node: '>=0.8'}
+ co@4.6.0:
+ resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==}
+ engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'}
+
+ collect-v8-coverage@1.0.2:
+ resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==}
+
color-convert@1.9.3:
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
@@ -455,9 +784,6 @@ packages:
color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
- commondir@1.0.1:
- resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
-
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
@@ -468,9 +794,6 @@ packages:
resolution: {integrity: sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==}
engines: {node: '>=12'}
- convert-source-map@1.9.0:
- resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
-
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
@@ -483,6 +806,14 @@ packages:
typescript:
optional: true
+ create-jest@29.7.0:
+ resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ hasBin: true
+
+ create-require@1.1.1:
+ resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
+
cross-spawn@7.0.3:
resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
engines: {node: '>= 8'}
@@ -508,18 +839,26 @@ packages:
supports-color:
optional: true
- decamelize@1.2.0:
- resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
- engines: {node: '>=0.10.0'}
-
decompress-response@6.0.0:
resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
engines: {node: '>=10'}
+ dedent@1.5.3:
+ resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==}
+ peerDependencies:
+ babel-plugin-macros: ^3.1.0
+ peerDependenciesMeta:
+ babel-plugin-macros:
+ optional: true
+
deep-extend@0.6.0:
resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
engines: {node: '>=4.0.0'}
+ deepmerge@4.3.1:
+ resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
+ engines: {node: '>=0.10.0'}
+
default-browser-id@5.0.0:
resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==}
engines: {node: '>=18'}
@@ -528,10 +867,6 @@ packages:
resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==}
engines: {node: '>=18'}
- default-require-extensions@3.0.1:
- resolution: {integrity: sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==}
- engines: {node: '>=8'}
-
defaults@1.0.4:
resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
@@ -539,10 +874,6 @@ packages:
resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==}
engines: {node: '>=10'}
- define-lazy-prop@2.0.0:
- resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
- engines: {node: '>=8'}
-
define-lazy-prop@3.0.0:
resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
engines: {node: '>=12'}
@@ -554,6 +885,18 @@ packages:
deprecation@2.3.1:
resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==}
+ detect-newline@3.1.0:
+ resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==}
+ engines: {node: '>=8'}
+
+ diff-sequences@29.6.3:
+ resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ diff@4.0.2:
+ resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
+ engines: {node: '>=0.3.1'}
+
dot-prop@6.0.1:
resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==}
engines: {node: '>=10'}
@@ -561,9 +904,18 @@ packages:
eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+ ejs@3.1.10:
+ resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+
electron-to-chromium@1.4.803:
resolution: {integrity: sha512-61H9mLzGOCLLVsnLiRzCbc63uldP0AniRYPV3hbGVtONA1pI7qSGILdbofR7A8TMbOypDocEAjH/e+9k1QIe3g==}
+ emittery@0.13.1:
+ resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==}
+ engines: {node: '>=12'}
+
emoji-regex@10.3.0:
resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==}
@@ -580,9 +932,6 @@ packages:
error-ex@1.3.2:
resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
- es6-error@4.1.1:
- resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==}
-
escalade@3.1.2:
resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
engines: {node: '>=6'}
@@ -595,6 +944,10 @@ packages:
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
engines: {node: '>=0.8.0'}
+ escape-string-regexp@2.0.0:
+ resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
+ engines: {node: '>=8'}
+
escodegen@2.1.0:
resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==}
engines: {node: '>=6.0'}
@@ -621,6 +974,14 @@ packages:
resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
engines: {node: '>=16.17'}
+ exit@0.1.2:
+ resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==}
+ engines: {node: '>= 0.8.0'}
+
+ expect@29.7.0:
+ resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
external-editor@3.1.0:
resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
engines: {node: '>=4'}
@@ -629,21 +990,26 @@ packages:
resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
engines: {node: '>=8.6.0'}
+ fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
fastq@1.17.1:
resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
+ fb-watchman@2.0.2:
+ resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
+
fetch-blob@3.2.0:
resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==}
engines: {node: ^12.20 || >= 14.13}
+ filelist@1.0.4:
+ resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
+
fill-range@7.1.1:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
- find-cache-dir@3.3.2:
- resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==}
- engines: {node: '>=8'}
-
find-up@4.1.0:
resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
engines: {node: '>=8'}
@@ -651,14 +1017,6 @@ packages:
find@0.3.0:
resolution: {integrity: sha512-iSd+O4OEYV/I36Zl8MdYJO0xD82wH528SaCieTVHhclgiYNe9y+yPKSwK+A7/WsmHL1EZ+pYUJBXWTL5qofksw==}
- foreground-child@2.0.0:
- resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==}
- engines: {node: '>=8.0.0'}
-
- foreground-child@3.2.1:
- resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==}
- engines: {node: '>=14'}
-
form-data-encoder@2.1.4:
resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==}
engines: {node: '>= 14.17'}
@@ -667,9 +1025,6 @@ packages:
resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
engines: {node: '>=12.20.0'}
- fromentries@1.3.2:
- resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==}
-
fs-extra@11.2.0:
resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==}
engines: {node: '>=14.14'}
@@ -677,6 +1032,11 @@ packages:
fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
@@ -718,11 +1078,6 @@ packages:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'}
- glob@10.4.1:
- resolution: {integrity: sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==}
- engines: {node: '>=16 || 14 >=14.18'}
- hasBin: true
-
glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
deprecated: Glob versions prior to v9 are no longer supported
@@ -757,10 +1112,6 @@ packages:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'}
- hasha@5.2.2:
- resolution: {integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==}
- engines: {node: '>=8'}
-
hasown@2.0.2:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
@@ -810,14 +1161,15 @@ packages:
resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==}
engines: {node: '>=8'}
+ import-local@3.2.0:
+ resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==}
+ engines: {node: '>=8'}
+ hasBin: true
+
imurmurhash@0.1.4:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines: {node: '>=0.8.19'}
- indent-string@4.0.0:
- resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
- engines: {node: '>=8'}
-
inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
@@ -855,11 +1207,6 @@ packages:
resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==}
engines: {node: '>= 0.4'}
- is-docker@2.2.1:
- resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
- engines: {node: '>=8'}
- hasBin: true
-
is-docker@3.0.0:
resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -873,6 +1220,10 @@ packages:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
+ is-generator-fn@2.1.0:
+ resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==}
+ engines: {node: '>=6'}
+
is-glob@4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
@@ -941,14 +1292,6 @@ packages:
resolution: {integrity: sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==}
engines: {node: '>=18'}
- is-windows@1.0.2:
- resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
- engines: {node: '>=0.10.0'}
-
- is-wsl@2.2.0:
- resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
- engines: {node: '>=8'}
-
is-wsl@3.1.0:
resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==}
engines: {node: '>=16'}
@@ -964,18 +1307,14 @@ packages:
resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
engines: {node: '>=8'}
- istanbul-lib-hook@3.0.0:
- resolution: {integrity: sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==}
+ istanbul-lib-instrument@5.2.1:
+ resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==}
engines: {node: '>=8'}
istanbul-lib-instrument@6.0.2:
resolution: {integrity: sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==}
engines: {node: '>=10'}
- istanbul-lib-processinfo@2.0.3:
- resolution: {integrity: sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==}
- engines: {node: '>=8'}
-
istanbul-lib-report@3.0.1:
resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
engines: {node: '>=10'}
@@ -988,16 +1327,139 @@ packages:
resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==}
engines: {node: '>=8'}
- jackspeak@3.4.0:
- resolution: {integrity: sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==}
- engines: {node: '>=14'}
+ jake@10.9.2:
+ resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ jest-changed-files@29.7.0:
+ resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-circus@29.7.0:
+ resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-cli@29.7.0:
+ resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ hasBin: true
+ peerDependencies:
+ node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
+ peerDependenciesMeta:
+ node-notifier:
+ optional: true
+
+ jest-config@29.7.0:
+ resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ peerDependencies:
+ '@types/node': '*'
+ ts-node: '>=9.0.0'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ ts-node:
+ optional: true
+
+ jest-diff@29.7.0:
+ resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- jasmine-core@5.1.2:
- resolution: {integrity: sha512-2oIUMGn00FdUiqz6epiiJr7xcFyNYj3rDcfmnzfkBnHyBQ3cBQUs4mmyGsOb7TTLb9kxk7dBcmEmqhDKkBoDyA==}
+ jest-docblock@29.7.0:
+ resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- jasmine@5.1.0:
- resolution: {integrity: sha512-prmJlC1dbLhti4nE4XAPDWmfJesYO15sjGXVp7Cs7Ym5I9Xtwa/hUHxxJXjnpfLO72+ySttA0Ztf8g/RiVnUKw==}
+ jest-each@29.7.0:
+ resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-environment-node@29.7.0:
+ resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-get-type@29.6.3:
+ resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-haste-map@29.7.0:
+ resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-leak-detector@29.7.0:
+ resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-matcher-utils@29.7.0:
+ resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-message-util@29.7.0:
+ resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-mock@29.7.0:
+ resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-pnp-resolver@1.2.3:
+ resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==}
+ engines: {node: '>=6'}
+ peerDependencies:
+ jest-resolve: '*'
+ peerDependenciesMeta:
+ jest-resolve:
+ optional: true
+
+ jest-regex-util@29.6.3:
+ resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-resolve-dependencies@29.7.0:
+ resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-resolve@29.7.0:
+ resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-runner@29.7.0:
+ resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-runtime@29.7.0:
+ resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-snapshot@29.7.0:
+ resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-util@29.7.0:
+ resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-validate@29.7.0:
+ resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-watcher@29.7.0:
+ resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-worker@29.7.0:
+ resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest@29.7.0:
+ resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
hasBin: true
+ peerDependencies:
+ node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
+ peerDependenciesMeta:
+ node-notifier:
+ optional: true
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
@@ -1035,6 +1497,10 @@ packages:
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+ kleur@3.0.3:
+ resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
+ engines: {node: '>=6'}
+
ky@1.4.0:
resolution: {integrity: sha512-tPhhoGUiEiU/WXR4rt8klIoLdnTtyu+9jVKHd/wauEjYud32jyn63mzKWQweaQrHWxBQtYoVtdcEnYX1LosnFQ==}
engines: {node: '>=18'}
@@ -1043,6 +1509,10 @@ packages:
resolution: {integrity: sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==}
engines: {node: '>=18'}
+ leven@3.1.0:
+ resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
+ engines: {node: '>=6'}
+
lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
@@ -1056,15 +1526,15 @@ packages:
lodash.escaperegexp@4.1.2:
resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==}
- lodash.flattendeep@4.4.0:
- resolution: {integrity: sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==}
-
lodash.isplainobject@4.0.6:
resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
lodash.isstring@4.0.1:
resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==}
+ lodash.memoize@4.1.2:
+ resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
+
lodash.uniqby@4.7.0:
resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==}
@@ -1083,10 +1553,6 @@ packages:
resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- lru-cache@10.2.2:
- resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==}
- engines: {node: 14 || >=16.14}
-
lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
@@ -1094,22 +1560,24 @@ packages:
resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==}
engines: {node: '>=12'}
- luxon@3.4.4:
- resolution: {integrity: sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==}
+ luxon@3.5.0:
+ resolution: {integrity: sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==}
engines: {node: '>=12'}
macos-release@3.2.0:
resolution: {integrity: sha512-fSErXALFNsnowREYZ49XCdOHF8wOPWuFOGQrAhP7x5J/BqQv+B02cNsTykGpDgRVx43EKg++6ANmTaGTtW+hUA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- make-dir@3.1.0:
- resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
- engines: {node: '>=8'}
-
make-dir@4.0.0:
resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
engines: {node: '>=10'}
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ makeerror@1.0.12:
+ resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==}
+
merge-stream@2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
@@ -1148,17 +1616,13 @@ packages:
minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
- minimatch@9.0.4:
- resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==}
- engines: {node: '>=16 || 14 >=14.17'}
+ minimatch@5.1.6:
+ resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+ engines: {node: '>=10'}
minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
- minipass@7.1.2:
- resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
- engines: {node: '>=16 || 14 >=14.17'}
-
ms@2.1.2:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
@@ -1166,6 +1630,9 @@ packages:
resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ natural-compare@1.4.0:
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+
netmask@2.0.2:
resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==}
engines: {node: '>= 0.4.0'}
@@ -1182,13 +1649,16 @@ packages:
resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- node-preload@0.2.1:
- resolution: {integrity: sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==}
- engines: {node: '>=8'}
+ node-int64@0.4.0:
+ resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
node-releases@2.0.14:
resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==}
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
normalize-url@8.0.1:
resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==}
engines: {node: '>=14.16'}
@@ -1201,11 +1671,6 @@ packages:
resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- nyc@17.0.0:
- resolution: {integrity: sha512-ISp44nqNCaPugLLGGfknzQwSwt10SSS5IMoPR7GLoMAyS18Iw5js8U7ga2VF9lYuMZ42gOHr3UddZw4WZltxKg==}
- engines: {node: '>=18'}
- hasBin: true
-
once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
@@ -1221,10 +1686,6 @@ packages:
resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==}
engines: {node: '>=18'}
- open@8.4.2:
- resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
- engines: {node: '>=12'}
-
ora@5.4.1:
resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
engines: {node: '>=10'}
@@ -1249,14 +1710,14 @@ packages:
resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
engines: {node: '>=6'}
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
p-locate@4.1.0:
resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
engines: {node: '>=8'}
- p-map@3.0.0:
- resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==}
- engines: {node: '>=8'}
-
p-try@2.2.0:
resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
engines: {node: '>=6'}
@@ -1269,10 +1730,6 @@ packages:
resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==}
engines: {node: '>= 14'}
- package-hash@4.0.0:
- resolution: {integrity: sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==}
- engines: {node: '>=8'}
-
package-json@10.0.1:
resolution: {integrity: sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==}
engines: {node: '>=18'}
@@ -1310,10 +1767,6 @@ packages:
path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
- path-scurry@1.11.1:
- resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
- engines: {node: '>=16 || 14 >=14.18'}
-
path-type@5.0.0:
resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==}
engines: {node: '>=12'}
@@ -1325,13 +1778,21 @@ packages:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
+ pirates@4.0.6:
+ resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
+ engines: {node: '>= 6'}
+
pkg-dir@4.2.0:
resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
engines: {node: '>=8'}
- process-on-spawn@1.0.0:
- resolution: {integrity: sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==}
- engines: {node: '>=8'}
+ pretty-format@29.7.0:
+ resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ prompts@2.4.2:
+ resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
+ engines: {node: '>= 6'}
proto-list@1.2.4:
resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
@@ -1350,6 +1811,9 @@ packages:
resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==}
engines: {node: '>=12.20'}
+ pure-rand@6.1.0:
+ resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==}
+
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
@@ -1361,6 +1825,9 @@ packages:
resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
hasBin: true
+ react-is@18.3.1:
+ resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
+
readable-stream@3.6.2:
resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
engines: {node: '>= 6'}
@@ -1382,20 +1849,17 @@ packages:
engines: {node: ^18.18.0 || ^20.9.0 || ^22.0.0}
hasBin: true
- release-zalgo@1.0.0:
- resolution: {integrity: sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==}
- engines: {node: '>=4'}
-
require-directory@2.1.1:
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
engines: {node: '>=0.10.0'}
- require-main-filename@2.0.0:
- resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
-
resolve-alpn@1.2.1:
resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==}
+ resolve-cwd@3.0.0:
+ resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
+ engines: {node: '>=8'}
+
resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
@@ -1404,6 +1868,10 @@ packages:
resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
engines: {node: '>=8'}
+ resolve.exports@2.0.2:
+ resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==}
+ engines: {node: '>=10'}
+
resolve@1.22.8:
resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
hasBin: true
@@ -1428,11 +1896,6 @@ packages:
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
- rimraf@3.0.2:
- resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
- deprecated: Rimraf versions prior to v4 are no longer supported
- hasBin: true
-
run-applescript@7.0.0:
resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==}
engines: {node: '>=18'}
@@ -1466,8 +1929,10 @@ packages:
engines: {node: '>=10'}
hasBin: true
- set-blocking@2.0.0:
- resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
+ semver@7.6.3:
+ resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
+ engines: {node: '>=10'}
+ hasBin: true
shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
@@ -1489,6 +1954,13 @@ packages:
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
engines: {node: '>=14'}
+ sisteransi@1.0.5:
+ resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
+
+ slash@3.0.0:
+ resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
+ engines: {node: '>=8'}
+
slash@5.1.0:
resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==}
engines: {node: '>=14.16'}
@@ -1505,24 +1977,31 @@ packages:
resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==}
engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
+ source-map-support@0.5.13:
+ resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==}
+
source-map@0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
- spawn-wrap@2.0.0:
- resolution: {integrity: sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==}
- engines: {node: '>=8'}
-
sprintf-js@1.0.3:
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
sprintf-js@1.1.3:
resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==}
+ stack-utils@2.0.6:
+ resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
+ engines: {node: '>=10'}
+
stdin-discarder@0.2.2:
resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==}
engines: {node: '>=18'}
+ string-length@4.0.2:
+ resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==}
+ engines: {node: '>=10'}
+
string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'}
@@ -1562,6 +2041,10 @@ packages:
resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
engines: {node: '>=0.10.0'}
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
supports-color@5.5.0:
resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
engines: {node: '>=4'}
@@ -1570,6 +2053,10 @@ packages:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
supports-preserve-symlinks-flag@1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
@@ -1582,6 +2069,9 @@ packages:
resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
engines: {node: '>=0.6.0'}
+ tmpl@1.0.5:
+ resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==}
+
to-fast-properties@2.0.0:
resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
engines: {node: '>=4'}
@@ -1593,17 +2083,55 @@ packages:
traverse-chain@0.1.0:
resolution: {integrity: sha512-up6Yvai4PYKhpNp5PkYtx50m3KbwQrqDwbuZP/ItyL64YEWHAvH6Md83LFLV/GRSk/BoUVwwgUzX6SOQSbsfAg==}
+ ts-jest@29.2.5:
+ resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@babel/core': '>=7.0.0-beta.0 <8'
+ '@jest/transform': ^29.0.0
+ '@jest/types': ^29.0.0
+ babel-jest: ^29.0.0
+ esbuild: '*'
+ jest: ^29.0.0
+ typescript: '>=4.3 <6'
+ peerDependenciesMeta:
+ '@babel/core':
+ optional: true
+ '@jest/transform':
+ optional: true
+ '@jest/types':
+ optional: true
+ babel-jest:
+ optional: true
+ esbuild:
+ optional: true
+
+ ts-node@10.9.2:
+ resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
+ hasBin: true
+ peerDependencies:
+ '@swc/core': '>=1.2.50'
+ '@swc/wasm': '>=1.2.50'
+ '@types/node': '*'
+ typescript: '>=2.7'
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ '@swc/wasm':
+ optional: true
+
tslib@2.6.3:
resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==}
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
type-fest@0.21.3:
resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
engines: {node: '>=10'}
- type-fest@0.8.1:
- resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==}
- engines: {node: '>=8'}
-
type-fest@1.4.0:
resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==}
engines: {node: '>=10'}
@@ -1615,6 +2143,14 @@ packages:
typedarray-to-buffer@3.1.5:
resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==}
+ typescript@5.6.2:
+ resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ undici-types@6.19.8:
+ resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
+
unicorn-magic@0.1.0:
resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==}
engines: {node: '>=18'}
@@ -1655,9 +2191,15 @@ packages:
resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==}
hasBin: true
- uuid@8.3.2:
- resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
- hasBin: true
+ v8-compile-cache-lib@3.0.1:
+ resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
+
+ v8-to-istanbul@9.3.0:
+ resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==}
+ engines: {node: '>=10.12.0'}
+
+ walker@1.0.8:
+ resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
wcwidth@1.0.1:
resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
@@ -1666,9 +2208,6 @@ packages:
resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
engines: {node: '>= 8'}
- which-module@2.0.1:
- resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==}
-
which@2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
engines: {node: '>= 8'}
@@ -1703,27 +2242,36 @@ packages:
write-file-atomic@3.0.3:
resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==}
+ write-file-atomic@4.0.2:
+ resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==}
+ engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+
xdg-basedir@5.1.0:
resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==}
engines: {node: '>=12'}
- y18n@4.0.3:
- resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
- yargs-parser@18.1.3:
- resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
- engines: {node: '>=6'}
-
yargs-parser@21.1.1:
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
engines: {node: '>=12'}
- yargs@15.4.1:
- resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==}
- engines: {node: '>=8'}
+ yargs@17.7.2:
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+ engines: {node: '>=12'}
+
+ yn@3.1.1:
+ resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
+ engines: {node: '>=6'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
yoctocolors-cjs@2.1.2:
resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==}
@@ -1809,6 +2357,8 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/helper-plugin-utils@7.24.8': {}
+
'@babel/helper-simple-access@7.24.7':
dependencies:
'@babel/traverse': 7.24.7
@@ -1842,6 +2392,91 @@ snapshots:
dependencies:
'@babel/types': 7.24.7
+ '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.7)':
+ dependencies:
+ '@babel/core': 7.24.7
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.7)':
+ dependencies:
+ '@babel/core': 7.24.7
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.7)':
+ dependencies:
+ '@babel/core': 7.24.7
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.7)':
+ dependencies:
+ '@babel/core': 7.24.7
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-import-attributes@7.25.6(@babel/core@7.24.7)':
+ dependencies:
+ '@babel/core': 7.24.7
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.7)':
+ dependencies:
+ '@babel/core': 7.24.7
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.7)':
+ dependencies:
+ '@babel/core': 7.24.7
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.7)':
+ dependencies:
+ '@babel/core': 7.24.7
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.7)':
+ dependencies:
+ '@babel/core': 7.24.7
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.7)':
+ dependencies:
+ '@babel/core': 7.24.7
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.7)':
+ dependencies:
+ '@babel/core': 7.24.7
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.7)':
+ dependencies:
+ '@babel/core': 7.24.7
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.7)':
+ dependencies:
+ '@babel/core': 7.24.7
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.7)':
+ dependencies:
+ '@babel/core': 7.24.7
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.7)':
+ dependencies:
+ '@babel/core': 7.24.7
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.7)':
+ dependencies:
+ '@babel/core': 7.24.7
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-typescript@7.25.4(@babel/core@7.24.7)':
+ dependencies:
+ '@babel/core': 7.24.7
+ '@babel/helper-plugin-utils': 7.24.8
+
'@babel/template@7.24.7':
dependencies:
'@babel/code-frame': 7.24.7
@@ -1869,19 +2504,16 @@ snapshots:
'@babel/helper-validator-identifier': 7.24.7
to-fast-properties: 2.0.0
+ '@bcoe/v8-coverage@0.2.3': {}
+
+ '@cspotcode/source-map-support@0.8.1':
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.9
+
'@iarna/toml@2.2.5': {}
'@inquirer/figures@1.0.4': {}
- '@isaacs/cliui@8.0.2':
- dependencies:
- string-width: 5.1.2
- string-width-cjs: string-width@4.2.3
- strip-ansi: 7.1.0
- strip-ansi-cjs: strip-ansi@6.0.1
- wrap-ansi: 8.1.0
- wrap-ansi-cjs: wrap-ansi@7.0.0
-
'@istanbuljs/load-nyc-config@1.1.0':
dependencies:
camelcase: 5.3.1
@@ -1892,6 +2524,168 @@ snapshots:
'@istanbuljs/schema@0.1.3': {}
+ '@jest/console@29.7.0':
+ dependencies:
+ '@jest/types': 29.6.3
+ '@types/node': 22.5.4
+ chalk: 4.1.2
+ jest-message-util: 29.7.0
+ jest-util: 29.7.0
+ slash: 3.0.0
+
+ '@jest/core@29.7.0(ts-node@10.9.2(@types/node@22.5.4)(typescript@5.6.2))':
+ dependencies:
+ '@jest/console': 29.7.0
+ '@jest/reporters': 29.7.0
+ '@jest/test-result': 29.7.0
+ '@jest/transform': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 22.5.4
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ ci-info: 3.9.0
+ exit: 0.1.2
+ graceful-fs: 4.2.11
+ jest-changed-files: 29.7.0
+ jest-config: 29.7.0(@types/node@22.5.4)(ts-node@10.9.2(@types/node@22.5.4)(typescript@5.6.2))
+ jest-haste-map: 29.7.0
+ jest-message-util: 29.7.0
+ jest-regex-util: 29.6.3
+ jest-resolve: 29.7.0
+ jest-resolve-dependencies: 29.7.0
+ jest-runner: 29.7.0
+ jest-runtime: 29.7.0
+ jest-snapshot: 29.7.0
+ jest-util: 29.7.0
+ jest-validate: 29.7.0
+ jest-watcher: 29.7.0
+ micromatch: 4.0.7
+ pretty-format: 29.7.0
+ slash: 3.0.0
+ strip-ansi: 6.0.1
+ transitivePeerDependencies:
+ - babel-plugin-macros
+ - supports-color
+ - ts-node
+
+ '@jest/environment@29.7.0':
+ dependencies:
+ '@jest/fake-timers': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 22.5.4
+ jest-mock: 29.7.0
+
+ '@jest/expect-utils@29.7.0':
+ dependencies:
+ jest-get-type: 29.6.3
+
+ '@jest/expect@29.7.0':
+ dependencies:
+ expect: 29.7.0
+ jest-snapshot: 29.7.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@jest/fake-timers@29.7.0':
+ dependencies:
+ '@jest/types': 29.6.3
+ '@sinonjs/fake-timers': 10.3.0
+ '@types/node': 22.5.4
+ jest-message-util: 29.7.0
+ jest-mock: 29.7.0
+ jest-util: 29.7.0
+
+ '@jest/globals@29.7.0':
+ dependencies:
+ '@jest/environment': 29.7.0
+ '@jest/expect': 29.7.0
+ '@jest/types': 29.6.3
+ jest-mock: 29.7.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@jest/reporters@29.7.0':
+ dependencies:
+ '@bcoe/v8-coverage': 0.2.3
+ '@jest/console': 29.7.0
+ '@jest/test-result': 29.7.0
+ '@jest/transform': 29.7.0
+ '@jest/types': 29.6.3
+ '@jridgewell/trace-mapping': 0.3.25
+ '@types/node': 22.5.4
+ chalk: 4.1.2
+ collect-v8-coverage: 1.0.2
+ exit: 0.1.2
+ glob: 7.2.3
+ graceful-fs: 4.2.11
+ istanbul-lib-coverage: 3.2.2
+ istanbul-lib-instrument: 6.0.2
+ istanbul-lib-report: 3.0.1
+ istanbul-lib-source-maps: 4.0.1
+ istanbul-reports: 3.1.7
+ jest-message-util: 29.7.0
+ jest-util: 29.7.0
+ jest-worker: 29.7.0
+ slash: 3.0.0
+ string-length: 4.0.2
+ strip-ansi: 6.0.1
+ v8-to-istanbul: 9.3.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@jest/schemas@29.6.3':
+ dependencies:
+ '@sinclair/typebox': 0.27.8
+
+ '@jest/source-map@29.6.3':
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.25
+ callsites: 3.1.0
+ graceful-fs: 4.2.11
+
+ '@jest/test-result@29.7.0':
+ dependencies:
+ '@jest/console': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/istanbul-lib-coverage': 2.0.6
+ collect-v8-coverage: 1.0.2
+
+ '@jest/test-sequencer@29.7.0':
+ dependencies:
+ '@jest/test-result': 29.7.0
+ graceful-fs: 4.2.11
+ jest-haste-map: 29.7.0
+ slash: 3.0.0
+
+ '@jest/transform@29.7.0':
+ dependencies:
+ '@babel/core': 7.24.7
+ '@jest/types': 29.6.3
+ '@jridgewell/trace-mapping': 0.3.25
+ babel-plugin-istanbul: 6.1.1
+ chalk: 4.1.2
+ convert-source-map: 2.0.0
+ fast-json-stable-stringify: 2.1.0
+ graceful-fs: 4.2.11
+ jest-haste-map: 29.7.0
+ jest-regex-util: 29.6.3
+ jest-util: 29.7.0
+ micromatch: 4.0.7
+ pirates: 4.0.6
+ slash: 3.0.0
+ write-file-atomic: 4.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@jest/types@29.6.3':
+ dependencies:
+ '@jest/schemas': 29.6.3
+ '@types/istanbul-lib-coverage': 2.0.6
+ '@types/istanbul-reports': 3.0.4
+ '@types/node': 22.5.4
+ '@types/yargs': 17.0.33
+ chalk: 4.1.2
+
'@jridgewell/gen-mapping@0.3.5':
dependencies:
'@jridgewell/set-array': 1.2.1
@@ -1909,6 +2703,11 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.4.15
+ '@jridgewell/trace-mapping@0.3.9':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.4.15
+
'@nodelib/fs.scandir@2.1.5':
dependencies:
'@nodelib/fs.stat': 2.0.5
@@ -1984,9 +2783,6 @@ snapshots:
dependencies:
'@octokit/openapi-types': 22.2.0
- '@pkgjs/parseargs@0.11.0':
- optional: true
-
'@pnpm/config.env-replace@1.1.0': {}
'@pnpm/network.ca-file@1.0.2':
@@ -1999,29 +2795,117 @@ snapshots:
'@pnpm/network.ca-file': 1.0.2
config-chain: 1.1.13
+ '@sinclair/typebox@0.27.8': {}
+
'@sindresorhus/is@5.6.0': {}
'@sindresorhus/merge-streams@2.3.0': {}
+ '@sinonjs/commons@3.0.1':
+ dependencies:
+ type-detect: 4.0.8
+
+ '@sinonjs/fake-timers@10.3.0':
+ dependencies:
+ '@sinonjs/commons': 3.0.1
+
'@szmarczak/http-timer@5.0.1':
dependencies:
defer-to-connect: 2.0.1
'@tootallnate/quickjs-emscripten@0.23.0': {}
+ '@tsconfig/node10@1.0.11': {}
+
+ '@tsconfig/node12@1.0.11': {}
+
+ '@tsconfig/node14@1.0.3': {}
+
+ '@tsconfig/node16@1.0.4': {}
+
+ '@types/babel__core@7.20.5':
+ dependencies:
+ '@babel/parser': 7.24.7
+ '@babel/types': 7.24.7
+ '@types/babel__generator': 7.6.8
+ '@types/babel__template': 7.4.4
+ '@types/babel__traverse': 7.20.6
+
+ '@types/babel__generator@7.6.8':
+ dependencies:
+ '@babel/types': 7.24.7
+
+ '@types/babel__template@7.4.4':
+ dependencies:
+ '@babel/parser': 7.24.7
+ '@babel/types': 7.24.7
+
+ '@types/babel__traverse@7.20.6':
+ dependencies:
+ '@babel/types': 7.24.7
+
+ '@types/find@0.2.4': {}
+
+ '@types/fs-extra@11.0.4':
+ dependencies:
+ '@types/jsonfile': 6.1.4
+ '@types/node': 22.5.4
+
+ '@types/graceful-fs@4.1.9':
+ dependencies:
+ '@types/node': 22.5.4
+
'@types/http-cache-semantics@4.0.4': {}
+ '@types/istanbul-lib-coverage@2.0.6': {}
+
+ '@types/istanbul-lib-report@3.0.3':
+ dependencies:
+ '@types/istanbul-lib-coverage': 2.0.6
+
+ '@types/istanbul-reports@3.0.4':
+ dependencies:
+ '@types/istanbul-lib-report': 3.0.3
+
+ '@types/jest@29.5.12':
+ dependencies:
+ expect: 29.7.0
+ pretty-format: 29.7.0
+
+ '@types/jsonfile@6.1.4':
+ dependencies:
+ '@types/node': 22.5.4
+
+ '@types/lodash@4.17.7': {}
+
+ '@types/luxon@3.4.2': {}
+
+ '@types/node@22.5.4':
+ dependencies:
+ undici-types: 6.19.8
+
+ '@types/stack-utils@2.0.3': {}
+
+ '@types/uuid@10.0.0': {}
+
+ '@types/yargs-parser@21.0.3': {}
+
+ '@types/yargs@17.0.33':
+ dependencies:
+ '@types/yargs-parser': 21.0.3
+
+ acorn-walk@8.3.3:
+ dependencies:
+ acorn: 8.12.1
+
+ acorn@8.12.1: {}
+
agent-base@7.1.1:
dependencies:
debug: 4.3.5
transitivePeerDependencies:
- supports-color
- aggregate-error@3.1.0:
- dependencies:
- clean-stack: 2.2.0
- indent-string: 4.0.0
-
ansi-align@3.0.1:
dependencies:
string-width: 4.2.3
@@ -2042,13 +2926,16 @@ snapshots:
dependencies:
color-convert: 2.0.1
+ ansi-styles@5.2.0: {}
+
ansi-styles@6.2.1: {}
- append-transform@2.0.0:
+ anymatch@3.1.3:
dependencies:
- default-require-extensions: 3.0.1
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
- archy@1.0.0: {}
+ arg@4.1.3: {}
argparse@1.0.10:
dependencies:
@@ -2064,6 +2951,63 @@ snapshots:
dependencies:
retry: 0.13.1
+ async@3.2.6: {}
+
+ babel-jest@29.7.0(@babel/core@7.24.7):
+ dependencies:
+ '@babel/core': 7.24.7
+ '@jest/transform': 29.7.0
+ '@types/babel__core': 7.20.5
+ babel-plugin-istanbul: 6.1.1
+ babel-preset-jest: 29.6.3(@babel/core@7.24.7)
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ slash: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-istanbul@6.1.1:
+ dependencies:
+ '@babel/helper-plugin-utils': 7.24.8
+ '@istanbuljs/load-nyc-config': 1.1.0
+ '@istanbuljs/schema': 0.1.3
+ istanbul-lib-instrument: 5.2.1
+ test-exclude: 6.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-jest-hoist@29.6.3:
+ dependencies:
+ '@babel/template': 7.24.7
+ '@babel/types': 7.24.7
+ '@types/babel__core': 7.20.5
+ '@types/babel__traverse': 7.20.6
+
+ babel-preset-current-node-syntax@1.1.0(@babel/core@7.24.7):
+ dependencies:
+ '@babel/core': 7.24.7
+ '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7)
+ '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.7)
+ '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.7)
+ '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.7)
+ '@babel/plugin-syntax-import-attributes': 7.25.6(@babel/core@7.24.7)
+ '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.7)
+ '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7)
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7)
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7)
+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7)
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7)
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7)
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7)
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.7)
+ '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.7)
+
+ babel-preset-jest@29.6.3(@babel/core@7.24.7):
+ dependencies:
+ '@babel/core': 7.24.7
+ babel-plugin-jest-hoist: 29.6.3
+ babel-preset-current-node-syntax: 1.1.0(@babel/core@7.24.7)
+
balanced-match@1.0.2: {}
base64-js@1.5.1: {}
@@ -2109,6 +3053,16 @@ snapshots:
node-releases: 2.0.14
update-browserslist-db: 1.0.16(browserslist@4.23.1)
+ bs-logger@0.2.6:
+ dependencies:
+ fast-json-stable-stringify: 2.1.0
+
+ bser@2.1.1:
+ dependencies:
+ node-int64: 0.4.0
+
+ buffer-from@1.1.2: {}
+
buffer@5.7.1:
dependencies:
base64-js: 1.5.1
@@ -2130,17 +3084,12 @@ snapshots:
normalize-url: 8.0.1
responselike: 3.0.0
- caching-transform@4.0.0:
- dependencies:
- hasha: 5.2.2
- make-dir: 3.1.0
- package-hash: 4.0.0
- write-file-atomic: 3.0.3
-
callsites@3.1.0: {}
camelcase@5.3.1: {}
+ camelcase@6.3.0: {}
+
camelcase@7.0.1: {}
caniuse-lite@1.0.30001634: {}
@@ -2158,11 +3107,13 @@ snapshots:
chalk@5.3.0: {}
+ char-regex@1.0.2: {}
+
chardet@0.7.0: {}
ci-info@3.9.0: {}
- clean-stack@2.2.0: {}
+ cjs-module-lexer@1.4.1: {}
cli-boxes@3.0.0: {}
@@ -2178,14 +3129,18 @@ snapshots:
cli-width@4.1.0: {}
- cliui@6.0.0:
+ cliui@8.0.1:
dependencies:
string-width: 4.2.3
strip-ansi: 6.0.1
- wrap-ansi: 6.2.0
+ wrap-ansi: 7.0.0
clone@1.0.4: {}
+ co@4.6.0: {}
+
+ collect-v8-coverage@1.0.2: {}
+
color-convert@1.9.3:
dependencies:
color-name: 1.1.3
@@ -2198,8 +3153,6 @@ snapshots:
color-name@1.1.4: {}
- commondir@1.0.1: {}
-
concat-map@0.0.1: {}
config-chain@1.1.13:
@@ -2215,16 +3168,33 @@ snapshots:
write-file-atomic: 3.0.3
xdg-basedir: 5.1.0
- convert-source-map@1.9.0: {}
-
convert-source-map@2.0.0: {}
- cosmiconfig@9.0.0:
+ cosmiconfig@9.0.0(typescript@5.6.2):
dependencies:
env-paths: 2.2.1
import-fresh: 3.3.0
js-yaml: 4.1.0
parse-json: 5.2.0
+ optionalDependencies:
+ typescript: 5.6.2
+
+ create-jest@29.7.0(@types/node@22.5.4)(ts-node@10.9.2(@types/node@22.5.4)(typescript@5.6.2)):
+ dependencies:
+ '@jest/types': 29.6.3
+ chalk: 4.1.2
+ exit: 0.1.2
+ graceful-fs: 4.2.11
+ jest-config: 29.7.0(@types/node@22.5.4)(ts-node@10.9.2(@types/node@22.5.4)(typescript@5.6.2))
+ jest-util: 29.7.0
+ prompts: 2.4.2
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - supports-color
+ - ts-node
+
+ create-require@1.1.1: {}
cross-spawn@7.0.3:
dependencies:
@@ -2244,14 +3214,16 @@ snapshots:
dependencies:
ms: 2.1.2
- decamelize@1.2.0: {}
-
decompress-response@6.0.0:
dependencies:
mimic-response: 3.1.0
+ dedent@1.5.3: {}
+
deep-extend@0.6.0: {}
+ deepmerge@4.3.1: {}
+
default-browser-id@5.0.0: {}
default-browser@5.2.1:
@@ -2259,18 +3231,12 @@ snapshots:
bundle-name: 4.1.0
default-browser-id: 5.0.0
- default-require-extensions@3.0.1:
- dependencies:
- strip-bom: 4.0.0
-
defaults@1.0.4:
dependencies:
clone: 1.0.4
defer-to-connect@2.0.1: {}
- define-lazy-prop@2.0.0: {}
-
define-lazy-prop@3.0.0: {}
degenerator@5.0.1:
@@ -2281,14 +3247,26 @@ snapshots:
deprecation@2.3.1: {}
+ detect-newline@3.1.0: {}
+
+ diff-sequences@29.6.3: {}
+
+ diff@4.0.2: {}
+
dot-prop@6.0.1:
dependencies:
is-obj: 2.0.0
eastasianwidth@0.2.0: {}
+ ejs@3.1.10:
+ dependencies:
+ jake: 10.9.2
+
electron-to-chromium@1.4.803: {}
+ emittery@0.13.1: {}
+
emoji-regex@10.3.0: {}
emoji-regex@8.0.0: {}
@@ -2301,14 +3279,14 @@ snapshots:
dependencies:
is-arrayish: 0.2.1
- es6-error@4.1.1: {}
-
escalade@3.1.2: {}
escape-goat@4.0.0: {}
escape-string-regexp@1.0.5: {}
+ escape-string-regexp@2.0.0: {}
+
escodegen@2.1.0:
dependencies:
esprima: 4.0.1
@@ -2347,6 +3325,16 @@ snapshots:
signal-exit: 4.1.0
strip-final-newline: 3.0.0
+ exit@0.1.2: {}
+
+ expect@29.7.0:
+ dependencies:
+ '@jest/expect-utils': 29.7.0
+ jest-get-type: 29.6.3
+ jest-matcher-utils: 29.7.0
+ jest-message-util: 29.7.0
+ jest-util: 29.7.0
+
external-editor@3.1.0:
dependencies:
chardet: 0.7.0
@@ -2361,24 +3349,28 @@ snapshots:
merge2: 1.4.1
micromatch: 4.0.7
+ fast-json-stable-stringify@2.1.0: {}
+
fastq@1.17.1:
dependencies:
reusify: 1.0.4
+ fb-watchman@2.0.2:
+ dependencies:
+ bser: 2.1.1
+
fetch-blob@3.2.0:
dependencies:
node-domexception: 1.0.0
web-streams-polyfill: 3.3.3
- fill-range@7.1.1:
+ filelist@1.0.4:
dependencies:
- to-regex-range: 5.0.1
+ minimatch: 5.1.6
- find-cache-dir@3.3.2:
+ fill-range@7.1.1:
dependencies:
- commondir: 1.0.1
- make-dir: 3.1.0
- pkg-dir: 4.2.0
+ to-regex-range: 5.0.1
find-up@4.1.0:
dependencies:
@@ -2389,24 +3381,12 @@ snapshots:
dependencies:
traverse-chain: 0.1.0
- foreground-child@2.0.0:
- dependencies:
- cross-spawn: 7.0.3
- signal-exit: 3.0.7
-
- foreground-child@3.2.1:
- dependencies:
- cross-spawn: 7.0.3
- signal-exit: 4.1.0
-
form-data-encoder@2.1.4: {}
formdata-polyfill@4.0.10:
dependencies:
fetch-blob: 3.2.0
- fromentries@1.3.2: {}
-
fs-extra@11.2.0:
dependencies:
graceful-fs: 4.2.10
@@ -2415,6 +3395,9 @@ snapshots:
fs.realpath@1.0.0: {}
+ fsevents@2.3.3:
+ optional: true
+
function-bind@1.1.2: {}
gensync@1.0.0-beta.2: {}
@@ -2451,14 +3434,6 @@ snapshots:
dependencies:
is-glob: 4.0.3
- glob@10.4.1:
- dependencies:
- foreground-child: 3.2.1
- jackspeak: 3.4.0
- minimatch: 9.0.4
- minipass: 7.1.2
- path-scurry: 1.11.1
-
glob@7.2.3:
dependencies:
fs.realpath: 1.0.0
@@ -2505,11 +3480,6 @@ snapshots:
has-flag@4.0.0: {}
- hasha@5.2.2:
- dependencies:
- is-stream: 2.0.1
- type-fest: 0.8.1
-
hasown@2.0.2:
dependencies:
function-bind: 1.1.2
@@ -2556,9 +3526,12 @@ snapshots:
import-lazy@4.0.0: {}
- imurmurhash@0.1.4: {}
+ import-local@3.2.0:
+ dependencies:
+ pkg-dir: 4.2.0
+ resolve-cwd: 3.0.0
- indent-string@4.0.0: {}
+ imurmurhash@0.1.4: {}
inflight@1.0.6:
dependencies:
@@ -2603,14 +3576,14 @@ snapshots:
dependencies:
hasown: 2.0.2
- is-docker@2.2.1: {}
-
is-docker@3.0.0: {}
is-extglob@2.1.1: {}
is-fullwidth-code-point@3.0.0: {}
+ is-generator-fn@2.1.0: {}
+
is-glob@4.0.3:
dependencies:
is-extglob: 2.1.1
@@ -2654,12 +3627,6 @@ snapshots:
is-unicode-supported@2.0.0: {}
- is-windows@1.0.2: {}
-
- is-wsl@2.2.0:
- dependencies:
- is-docker: 2.2.1
-
is-wsl@3.1.0:
dependencies:
is-inside-container: 1.0.0
@@ -2676,9 +3643,15 @@ snapshots:
istanbul-lib-coverage@3.2.2: {}
- istanbul-lib-hook@3.0.0:
+ istanbul-lib-instrument@5.2.1:
dependencies:
- append-transform: 2.0.0
+ '@babel/core': 7.24.7
+ '@babel/parser': 7.24.7
+ '@istanbuljs/schema': 0.1.3
+ istanbul-lib-coverage: 3.2.2
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
istanbul-lib-instrument@6.0.2:
dependencies:
@@ -2690,15 +3663,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- istanbul-lib-processinfo@2.0.3:
- dependencies:
- archy: 1.0.0
- cross-spawn: 7.0.3
- istanbul-lib-coverage: 3.2.2
- p-map: 3.0.0
- rimraf: 3.0.2
- uuid: 8.3.2
-
istanbul-lib-report@3.0.1:
dependencies:
istanbul-lib-coverage: 3.2.2
@@ -2718,18 +3682,321 @@ snapshots:
html-escaper: 2.0.2
istanbul-lib-report: 3.0.1
- jackspeak@3.4.0:
+ jake@10.9.2:
+ dependencies:
+ async: 3.2.6
+ chalk: 4.1.2
+ filelist: 1.0.4
+ minimatch: 3.1.2
+
+ jest-changed-files@29.7.0:
+ dependencies:
+ execa: 5.1.1
+ jest-util: 29.7.0
+ p-limit: 3.1.0
+
+ jest-circus@29.7.0:
+ dependencies:
+ '@jest/environment': 29.7.0
+ '@jest/expect': 29.7.0
+ '@jest/test-result': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 22.5.4
+ chalk: 4.1.2
+ co: 4.6.0
+ dedent: 1.5.3
+ is-generator-fn: 2.1.0
+ jest-each: 29.7.0
+ jest-matcher-utils: 29.7.0
+ jest-message-util: 29.7.0
+ jest-runtime: 29.7.0
+ jest-snapshot: 29.7.0
+ jest-util: 29.7.0
+ p-limit: 3.1.0
+ pretty-format: 29.7.0
+ pure-rand: 6.1.0
+ slash: 3.0.0
+ stack-utils: 2.0.6
+ transitivePeerDependencies:
+ - babel-plugin-macros
+ - supports-color
+
+ jest-cli@29.7.0(@types/node@22.5.4)(ts-node@10.9.2(@types/node@22.5.4)(typescript@5.6.2)):
+ dependencies:
+ '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.5.4)(typescript@5.6.2))
+ '@jest/test-result': 29.7.0
+ '@jest/types': 29.6.3
+ chalk: 4.1.2
+ create-jest: 29.7.0(@types/node@22.5.4)(ts-node@10.9.2(@types/node@22.5.4)(typescript@5.6.2))
+ exit: 0.1.2
+ import-local: 3.2.0
+ jest-config: 29.7.0(@types/node@22.5.4)(ts-node@10.9.2(@types/node@22.5.4)(typescript@5.6.2))
+ jest-util: 29.7.0
+ jest-validate: 29.7.0
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - supports-color
+ - ts-node
+
+ jest-config@29.7.0(@types/node@22.5.4)(ts-node@10.9.2(@types/node@22.5.4)(typescript@5.6.2)):
+ dependencies:
+ '@babel/core': 7.24.7
+ '@jest/test-sequencer': 29.7.0
+ '@jest/types': 29.6.3
+ babel-jest: 29.7.0(@babel/core@7.24.7)
+ chalk: 4.1.2
+ ci-info: 3.9.0
+ deepmerge: 4.3.1
+ glob: 7.2.3
+ graceful-fs: 4.2.11
+ jest-circus: 29.7.0
+ jest-environment-node: 29.7.0
+ jest-get-type: 29.6.3
+ jest-regex-util: 29.6.3
+ jest-resolve: 29.7.0
+ jest-runner: 29.7.0
+ jest-util: 29.7.0
+ jest-validate: 29.7.0
+ micromatch: 4.0.7
+ parse-json: 5.2.0
+ pretty-format: 29.7.0
+ slash: 3.0.0
+ strip-json-comments: 3.1.1
+ optionalDependencies:
+ '@types/node': 22.5.4
+ ts-node: 10.9.2(@types/node@22.5.4)(typescript@5.6.2)
+ transitivePeerDependencies:
+ - babel-plugin-macros
+ - supports-color
+
+ jest-diff@29.7.0:
+ dependencies:
+ chalk: 4.1.2
+ diff-sequences: 29.6.3
+ jest-get-type: 29.6.3
+ pretty-format: 29.7.0
+
+ jest-docblock@29.7.0:
+ dependencies:
+ detect-newline: 3.1.0
+
+ jest-each@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ chalk: 4.1.2
+ jest-get-type: 29.6.3
+ jest-util: 29.7.0
+ pretty-format: 29.7.0
+
+ jest-environment-node@29.7.0:
+ dependencies:
+ '@jest/environment': 29.7.0
+ '@jest/fake-timers': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 22.5.4
+ jest-mock: 29.7.0
+ jest-util: 29.7.0
+
+ jest-get-type@29.6.3: {}
+
+ jest-haste-map@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ '@types/graceful-fs': 4.1.9
+ '@types/node': 22.5.4
+ anymatch: 3.1.3
+ fb-watchman: 2.0.2
+ graceful-fs: 4.2.11
+ jest-regex-util: 29.6.3
+ jest-util: 29.7.0
+ jest-worker: 29.7.0
+ micromatch: 4.0.7
+ walker: 1.0.8
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ jest-leak-detector@29.7.0:
+ dependencies:
+ jest-get-type: 29.6.3
+ pretty-format: 29.7.0
+
+ jest-matcher-utils@29.7.0:
+ dependencies:
+ chalk: 4.1.2
+ jest-diff: 29.7.0
+ jest-get-type: 29.6.3
+ pretty-format: 29.7.0
+
+ jest-message-util@29.7.0:
+ dependencies:
+ '@babel/code-frame': 7.24.7
+ '@jest/types': 29.6.3
+ '@types/stack-utils': 2.0.3
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ micromatch: 4.0.7
+ pretty-format: 29.7.0
+ slash: 3.0.0
+ stack-utils: 2.0.6
+
+ jest-mock@29.7.0:
dependencies:
- '@isaacs/cliui': 8.0.2
+ '@jest/types': 29.6.3
+ '@types/node': 22.5.4
+ jest-util: 29.7.0
+
+ jest-pnp-resolver@1.2.3(jest-resolve@29.7.0):
optionalDependencies:
- '@pkgjs/parseargs': 0.11.0
+ jest-resolve: 29.7.0
+
+ jest-regex-util@29.6.3: {}
+
+ jest-resolve-dependencies@29.7.0:
+ dependencies:
+ jest-regex-util: 29.6.3
+ jest-snapshot: 29.7.0
+ transitivePeerDependencies:
+ - supports-color
+
+ jest-resolve@29.7.0:
+ dependencies:
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ jest-haste-map: 29.7.0
+ jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0)
+ jest-util: 29.7.0
+ jest-validate: 29.7.0
+ resolve: 1.22.8
+ resolve.exports: 2.0.2
+ slash: 3.0.0
+
+ jest-runner@29.7.0:
+ dependencies:
+ '@jest/console': 29.7.0
+ '@jest/environment': 29.7.0
+ '@jest/test-result': 29.7.0
+ '@jest/transform': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 22.5.4
+ chalk: 4.1.2
+ emittery: 0.13.1
+ graceful-fs: 4.2.11
+ jest-docblock: 29.7.0
+ jest-environment-node: 29.7.0
+ jest-haste-map: 29.7.0
+ jest-leak-detector: 29.7.0
+ jest-message-util: 29.7.0
+ jest-resolve: 29.7.0
+ jest-runtime: 29.7.0
+ jest-util: 29.7.0
+ jest-watcher: 29.7.0
+ jest-worker: 29.7.0
+ p-limit: 3.1.0
+ source-map-support: 0.5.13
+ transitivePeerDependencies:
+ - supports-color
+
+ jest-runtime@29.7.0:
+ dependencies:
+ '@jest/environment': 29.7.0
+ '@jest/fake-timers': 29.7.0
+ '@jest/globals': 29.7.0
+ '@jest/source-map': 29.6.3
+ '@jest/test-result': 29.7.0
+ '@jest/transform': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 22.5.4
+ chalk: 4.1.2
+ cjs-module-lexer: 1.4.1
+ collect-v8-coverage: 1.0.2
+ glob: 7.2.3
+ graceful-fs: 4.2.11
+ jest-haste-map: 29.7.0
+ jest-message-util: 29.7.0
+ jest-mock: 29.7.0
+ jest-regex-util: 29.6.3
+ jest-resolve: 29.7.0
+ jest-snapshot: 29.7.0
+ jest-util: 29.7.0
+ slash: 3.0.0
+ strip-bom: 4.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ jest-snapshot@29.7.0:
+ dependencies:
+ '@babel/core': 7.24.7
+ '@babel/generator': 7.24.7
+ '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7)
+ '@babel/plugin-syntax-typescript': 7.25.4(@babel/core@7.24.7)
+ '@babel/types': 7.24.7
+ '@jest/expect-utils': 29.7.0
+ '@jest/transform': 29.7.0
+ '@jest/types': 29.6.3
+ babel-preset-current-node-syntax: 1.1.0(@babel/core@7.24.7)
+ chalk: 4.1.2
+ expect: 29.7.0
+ graceful-fs: 4.2.11
+ jest-diff: 29.7.0
+ jest-get-type: 29.6.3
+ jest-matcher-utils: 29.7.0
+ jest-message-util: 29.7.0
+ jest-util: 29.7.0
+ natural-compare: 1.4.0
+ pretty-format: 29.7.0
+ semver: 7.6.2
+ transitivePeerDependencies:
+ - supports-color
+
+ jest-util@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ '@types/node': 22.5.4
+ chalk: 4.1.2
+ ci-info: 3.9.0
+ graceful-fs: 4.2.11
+ picomatch: 2.3.1
+
+ jest-validate@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ camelcase: 6.3.0
+ chalk: 4.1.2
+ jest-get-type: 29.6.3
+ leven: 3.1.0
+ pretty-format: 29.7.0
+
+ jest-watcher@29.7.0:
+ dependencies:
+ '@jest/test-result': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 22.5.4
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ emittery: 0.13.1
+ jest-util: 29.7.0
+ string-length: 4.0.2
- jasmine-core@5.1.2: {}
+ jest-worker@29.7.0:
+ dependencies:
+ '@types/node': 22.5.4
+ jest-util: 29.7.0
+ merge-stream: 2.0.0
+ supports-color: 8.1.1
- jasmine@5.1.0:
+ jest@29.7.0(@types/node@22.5.4)(ts-node@10.9.2(@types/node@22.5.4)(typescript@5.6.2)):
dependencies:
- glob: 10.4.1
- jasmine-core: 5.1.2
+ '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.5.4)(typescript@5.6.2))
+ '@jest/types': 29.6.3
+ import-local: 3.2.0
+ jest-cli: 29.7.0(@types/node@22.5.4)(ts-node@10.9.2(@types/node@22.5.4)(typescript@5.6.2))
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - supports-color
+ - ts-node
js-tokens@4.0.0: {}
@@ -2762,12 +4029,16 @@ snapshots:
dependencies:
json-buffer: 3.0.1
+ kleur@3.0.3: {}
+
ky@1.4.0: {}
latest-version@9.0.0:
dependencies:
package-json: 10.0.1
+ leven@3.1.0: {}
+
lines-and-columns@1.2.4: {}
locate-path@5.0.0:
@@ -2778,12 +4049,12 @@ snapshots:
lodash.escaperegexp@4.1.2: {}
- lodash.flattendeep@4.4.0: {}
-
lodash.isplainobject@4.0.6: {}
lodash.isstring@4.0.1: {}
+ lodash.memoize@4.1.2: {}
+
lodash.uniqby@4.7.0: {}
lodash@4.17.21: {}
@@ -2800,26 +4071,26 @@ snapshots:
lowercase-keys@3.0.0: {}
- lru-cache@10.2.2: {}
-
lru-cache@5.1.1:
dependencies:
yallist: 3.1.1
lru-cache@7.18.3: {}
- luxon@3.4.4: {}
+ luxon@3.5.0: {}
macos-release@3.2.0: {}
- make-dir@3.1.0:
- dependencies:
- semver: 6.3.1
-
make-dir@4.0.0:
dependencies:
semver: 7.6.2
+ make-error@1.3.6: {}
+
+ makeerror@1.0.12:
+ dependencies:
+ tmpl: 1.0.5
+
merge-stream@2.0.0: {}
merge2@1.4.1: {}
@@ -2847,18 +4118,18 @@ snapshots:
dependencies:
brace-expansion: 1.1.11
- minimatch@9.0.4:
+ minimatch@5.1.6:
dependencies:
brace-expansion: 2.0.1
minimist@1.2.8: {}
- minipass@7.1.2: {}
-
ms@2.1.2: {}
mute-stream@1.0.0: {}
+ natural-compare@1.4.0: {}
+
netmask@2.0.2: {}
new-github-release-url@2.0.0:
@@ -2873,12 +4144,12 @@ snapshots:
fetch-blob: 3.2.0
formdata-polyfill: 4.0.10
- node-preload@0.2.1:
- dependencies:
- process-on-spawn: 1.0.0
+ node-int64@0.4.0: {}
node-releases@2.0.14: {}
+ normalize-path@3.0.0: {}
+
normalize-url@8.0.1: {}
npm-run-path@4.0.1:
@@ -2889,38 +4160,6 @@ snapshots:
dependencies:
path-key: 4.0.0
- nyc@17.0.0:
- dependencies:
- '@istanbuljs/load-nyc-config': 1.1.0
- '@istanbuljs/schema': 0.1.3
- caching-transform: 4.0.0
- convert-source-map: 1.9.0
- decamelize: 1.2.0
- find-cache-dir: 3.3.2
- find-up: 4.1.0
- foreground-child: 2.0.0
- get-package-type: 0.1.0
- glob: 7.2.3
- istanbul-lib-coverage: 3.2.2
- istanbul-lib-hook: 3.0.0
- istanbul-lib-instrument: 6.0.2
- istanbul-lib-processinfo: 2.0.3
- istanbul-lib-report: 3.0.1
- istanbul-lib-source-maps: 4.0.1
- istanbul-reports: 3.1.7
- make-dir: 3.1.0
- node-preload: 0.2.1
- p-map: 3.0.0
- process-on-spawn: 1.0.0
- resolve-from: 5.0.0
- rimraf: 3.0.2
- signal-exit: 3.0.7
- spawn-wrap: 2.0.0
- test-exclude: 6.0.0
- yargs: 15.4.1
- transitivePeerDependencies:
- - supports-color
-
once@1.4.0:
dependencies:
wrappy: 1.0.2
@@ -2940,12 +4179,6 @@ snapshots:
is-inside-container: 1.0.0
is-wsl: 3.1.0
- open@8.4.2:
- dependencies:
- define-lazy-prop: 2.0.0
- is-docker: 2.2.1
- is-wsl: 2.2.0
-
ora@5.4.1:
dependencies:
bl: 4.1.0
@@ -2983,13 +4216,13 @@ snapshots:
dependencies:
p-try: 2.2.0
- p-locate@4.1.0:
+ p-limit@3.1.0:
dependencies:
- p-limit: 2.3.0
+ yocto-queue: 0.1.0
- p-map@3.0.0:
+ p-locate@4.1.0:
dependencies:
- aggregate-error: 3.1.0
+ p-limit: 2.3.0
p-try@2.2.0: {}
@@ -3011,13 +4244,6 @@ snapshots:
degenerator: 5.0.1
netmask: 2.0.2
- package-hash@4.0.0:
- dependencies:
- graceful-fs: 4.2.11
- hasha: 5.2.2
- lodash.flattendeep: 4.4.0
- release-zalgo: 1.0.0
-
package-json@10.0.1:
dependencies:
ky: 1.4.0
@@ -3054,24 +4280,28 @@ snapshots:
path-parse@1.0.7: {}
- path-scurry@1.11.1:
- dependencies:
- lru-cache: 10.2.2
- minipass: 7.1.2
-
path-type@5.0.0: {}
picocolors@1.0.1: {}
picomatch@2.3.1: {}
+ pirates@4.0.6: {}
+
pkg-dir@4.2.0:
dependencies:
find-up: 4.1.0
- process-on-spawn@1.0.0:
+ pretty-format@29.7.0:
+ dependencies:
+ '@jest/schemas': 29.6.3
+ ansi-styles: 5.2.0
+ react-is: 18.3.1
+
+ prompts@2.4.2:
dependencies:
- fromentries: 1.3.2
+ kleur: 3.0.3
+ sisteransi: 1.0.5
proto-list@1.2.4: {}
@@ -3096,6 +4326,8 @@ snapshots:
dependencies:
escape-goat: 4.0.0
+ pure-rand@6.1.0: {}
+
queue-microtask@1.2.3: {}
quick-lru@5.1.1: {}
@@ -3107,6 +4339,8 @@ snapshots:
minimist: 1.2.8
strip-json-comments: 2.0.1
+ react-is@18.3.1: {}
+
readable-stream@3.6.2:
dependencies:
inherits: 2.0.4
@@ -3125,13 +4359,13 @@ snapshots:
dependencies:
rc: 1.2.8
- release-it@17.6.0:
+ release-it@17.6.0(typescript@5.6.2):
dependencies:
'@iarna/toml': 2.2.5
'@octokit/rest': 20.1.1
async-retry: 1.3.3
chalk: 5.3.0
- cosmiconfig: 9.0.0
+ cosmiconfig: 9.0.0(typescript@5.6.2)
execa: 8.0.1
git-url-parse: 14.0.0
globby: 14.0.2
@@ -3157,20 +4391,20 @@ snapshots:
- supports-color
- typescript
- release-zalgo@1.0.0:
- dependencies:
- es6-error: 4.1.1
-
require-directory@2.1.1: {}
- require-main-filename@2.0.0: {}
-
resolve-alpn@1.2.1: {}
+ resolve-cwd@3.0.0:
+ dependencies:
+ resolve-from: 5.0.0
+
resolve-from@4.0.0: {}
resolve-from@5.0.0: {}
+ resolve.exports@2.0.2: {}
+
resolve@1.22.8:
dependencies:
is-core-module: 2.15.0
@@ -3195,10 +4429,6 @@ snapshots:
reusify@1.0.4: {}
- rimraf@3.0.2:
- dependencies:
- glob: 7.2.3
-
run-applescript@7.0.0: {}
run-async@3.0.0: {}
@@ -3223,7 +4453,7 @@ snapshots:
semver@7.6.2: {}
- set-blocking@2.0.0: {}
+ semver@7.6.3: {}
shebang-command@2.0.0:
dependencies:
@@ -3241,6 +4471,10 @@ snapshots:
signal-exit@4.1.0: {}
+ sisteransi@1.0.5: {}
+
+ slash@3.0.0: {}
+
slash@5.1.0: {}
smart-buffer@4.2.0: {}
@@ -3258,23 +4492,28 @@ snapshots:
ip-address: 9.0.5
smart-buffer: 4.2.0
- source-map@0.6.1: {}
-
- spawn-wrap@2.0.0:
+ source-map-support@0.5.13:
dependencies:
- foreground-child: 2.0.0
- is-windows: 1.0.2
- make-dir: 3.1.0
- rimraf: 3.0.2
- signal-exit: 3.0.7
- which: 2.0.2
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
sprintf-js@1.0.3: {}
sprintf-js@1.1.3: {}
+ stack-utils@2.0.6:
+ dependencies:
+ escape-string-regexp: 2.0.0
+
stdin-discarder@0.2.2: {}
+ string-length@4.0.2:
+ dependencies:
+ char-regex: 1.0.2
+ strip-ansi: 6.0.1
+
string-width@4.2.3:
dependencies:
emoji-regex: 8.0.0
@@ -3313,6 +4552,8 @@ snapshots:
strip-json-comments@2.0.1: {}
+ strip-json-comments@3.1.1: {}
+
supports-color@5.5.0:
dependencies:
has-flag: 3.0.0
@@ -3321,6 +4562,10 @@ snapshots:
dependencies:
has-flag: 4.0.0
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
supports-preserve-symlinks-flag@1.0.0: {}
test-exclude@6.0.0:
@@ -3333,6 +4578,8 @@ snapshots:
dependencies:
os-tmpdir: 1.0.2
+ tmpl@1.0.5: {}
+
to-fast-properties@2.0.0: {}
to-regex-range@5.0.1:
@@ -3341,11 +4588,48 @@ snapshots:
traverse-chain@0.1.0: {}
+ ts-jest@29.2.5(@babel/core@7.24.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(jest@29.7.0(@types/node@22.5.4)(ts-node@10.9.2(@types/node@22.5.4)(typescript@5.6.2)))(typescript@5.6.2):
+ dependencies:
+ bs-logger: 0.2.6
+ ejs: 3.1.10
+ fast-json-stable-stringify: 2.1.0
+ jest: 29.7.0(@types/node@22.5.4)(ts-node@10.9.2(@types/node@22.5.4)(typescript@5.6.2))
+ jest-util: 29.7.0
+ json5: 2.2.3
+ lodash.memoize: 4.1.2
+ make-error: 1.3.6
+ semver: 7.6.3
+ typescript: 5.6.2
+ yargs-parser: 21.1.1
+ optionalDependencies:
+ '@babel/core': 7.24.7
+ '@jest/transform': 29.7.0
+ '@jest/types': 29.6.3
+ babel-jest: 29.7.0(@babel/core@7.24.7)
+
+ ts-node@10.9.2(@types/node@22.5.4)(typescript@5.6.2):
+ dependencies:
+ '@cspotcode/source-map-support': 0.8.1
+ '@tsconfig/node10': 1.0.11
+ '@tsconfig/node12': 1.0.11
+ '@tsconfig/node14': 1.0.3
+ '@tsconfig/node16': 1.0.4
+ '@types/node': 22.5.4
+ acorn: 8.12.1
+ acorn-walk: 8.3.3
+ arg: 4.1.3
+ create-require: 1.1.1
+ diff: 4.0.2
+ make-error: 1.3.6
+ typescript: 5.6.2
+ v8-compile-cache-lib: 3.0.1
+ yn: 3.1.1
+
tslib@2.6.3: {}
- type-fest@0.21.3: {}
+ type-detect@4.0.8: {}
- type-fest@0.8.1: {}
+ type-fest@0.21.3: {}
type-fest@1.4.0: {}
@@ -3355,6 +4639,10 @@ snapshots:
dependencies:
is-typedarray: 1.0.0
+ typescript@5.6.2: {}
+
+ undici-types@6.19.8: {}
+
unicorn-magic@0.1.0: {}
unique-string@3.0.0:
@@ -3394,7 +4682,17 @@ snapshots:
uuid@10.0.0: {}
- uuid@8.3.2: {}
+ v8-compile-cache-lib@3.0.1: {}
+
+ v8-to-istanbul@9.3.0:
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.25
+ '@types/istanbul-lib-coverage': 2.0.6
+ convert-source-map: 2.0.0
+
+ walker@1.0.8:
+ dependencies:
+ makeerror: 1.0.12
wcwidth@1.0.1:
dependencies:
@@ -3402,8 +4700,6 @@ snapshots:
web-streams-polyfill@3.3.3: {}
- which-module@2.0.1: {}
-
which@2.0.2:
dependencies:
isexe: 2.0.0
@@ -3445,31 +4741,31 @@ snapshots:
signal-exit: 3.0.7
typedarray-to-buffer: 3.1.5
+ write-file-atomic@4.0.2:
+ dependencies:
+ imurmurhash: 0.1.4
+ signal-exit: 3.0.7
+
xdg-basedir@5.1.0: {}
- y18n@4.0.3: {}
+ y18n@5.0.8: {}
yallist@3.1.1: {}
- yargs-parser@18.1.3:
- dependencies:
- camelcase: 5.3.1
- decamelize: 1.2.0
-
yargs-parser@21.1.1: {}
- yargs@15.4.1:
+ yargs@17.7.2:
dependencies:
- cliui: 6.0.0
- decamelize: 1.2.0
- find-up: 4.1.0
+ cliui: 8.0.1
+ escalade: 3.1.2
get-caller-file: 2.0.5
require-directory: 2.1.1
- require-main-filename: 2.0.0
- set-blocking: 2.0.0
string-width: 4.2.3
- which-module: 2.0.1
- y18n: 4.0.3
- yargs-parser: 18.1.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+
+ yn@3.1.1: {}
+
+ yocto-queue@0.1.0: {}
yoctocolors-cjs@2.1.2: {}
diff --git a/src/collect-jsons.ts b/src/collect-jsons.ts
new file mode 100644
index 00000000..d2ceec07
--- /dev/null
+++ b/src/collect-jsons.ts
@@ -0,0 +1,83 @@
+import find from "find";
+import fs from "fs-extra";
+import jsonFile from "jsonfile";
+import path from "node:path";
+import { Feature, FeatureHook, Options } from "./types/report-types.js";
+import { formatToLocalIso } from "./utils/common.js";
+
+const parseFeatureHooks = (data: any[], keyword: string): FeatureHook[] => {
+ return data.map((step) => {
+ const match =
+ step.match && step.match.location
+ ? step.match
+ : { location: "can not be determined" };
+
+ return {
+ arguments: step.arguments || [],
+ keyword: keyword,
+ name: "Hook",
+ result: step.result,
+ line: "",
+ match,
+ embeddings: step.embeddings || [],
+ };
+ });
+};
+
+export const collectFeatures = (options: Options): Feature[] => {
+ const features: Feature[] = [];
+ const jsonDirPath = path.resolve(process.cwd(), options.jsonDir || "");
+
+ let files: string[];
+ try {
+ files = find.fileSync(/\.json$/, jsonDirPath);
+ } catch {
+ throw new Error(`Unable to read JSON files from '${options.jsonDir}'.`);
+ }
+
+ if (files.length === 0) {
+ console.warn(
+ `WARNING: No JSON files found in '${options.jsonDir}'. NO REPORT CAN BE CREATED!`
+ );
+ return [];
+ }
+
+ files.forEach((file) => {
+ const data = fs.readFileSync(file, "utf-8") || "[]";
+ const reportTime = fs.statSync(file).birthtime;
+
+ JSON.parse(data).forEach((json: Feature) => {
+ json.metadata = json.metadata ||
+ options.metadata || {
+ browser: { name: "not known", version: "not known" },
+ device: "not known",
+ platform: { name: "not known", version: "not known" },
+ };
+
+ if (options.displayReportTime && reportTime) {
+ json.metadata.reportTime = formatToLocalIso(reportTime);
+ }
+
+ if (json.elements) {
+ json.elements = json.elements.map((scenario) => ({
+ ...scenario,
+ steps: [
+ ...parseFeatureHooks(scenario.before || [], "Before"),
+ ...(scenario.steps || []),
+ ...parseFeatureHooks(scenario.after || [], "After"),
+ ],
+ }));
+ }
+
+ features.push(json);
+ });
+ });
+
+ if (options.saveCollectedJSON) {
+ const outputFile = path.resolve(options.reportPath!, "merged-output.json");
+ fs.ensureDirSync(options.reportPath!);
+ jsonFile.writeFileSync(outputFile, features, { spaces: 2 });
+ }
+
+ return features;
+};
diff --git a/src/generate-report.ts b/src/generate-report.ts
new file mode 100644
index 00000000..0b6fb740
--- /dev/null
+++ b/src/generate-report.ts
@@ -0,0 +1,392 @@
+import _ from "lodash";
+import fs from "fs-extra";
+import jsonFile from "jsonfile";
+import open from "open";
+import path from "node:path";
+import { v4 as uuid } from "uuid";
+import { collectFeatures } from "./collect-jsons.js";
+import { Feature, Options, Scenario, Suite } from "./types/report-types.js";
+import { calculatePercentage, formatDuration } from "./utils/common.js";
+import {
+ _createFeatureIndexPages,
+ _createFeaturesOverviewIndexPage,
+ _escapeHtml,
+} from "./utils/template.js";
+
+const RESULT_STATUS = {
+ passed: "passed",
+ failed: "failed",
+ skipped: "skipped",
+ pending: "pending",
+ notDefined: "undefined",
+ ambiguous: "ambiguous",
+};
+
+const REPORT_STYLESHEET = "style.css";
+const INDEX_HTML = "index.html";
+const FEATURE_FOLDER = "features";
+const DEFAULT_REPORT_NAME = "Multiple Cucumber HTML Reporter";
+
+const parseFeatures = (suite: Suite, options: Options): void => {
+ suite.features.forEach((feature) => {
+ feature.scenarios = {
+ passed: 0,
+ failed: 0,
+ notDefined: 0,
+ skipped: 0,
+ pending: 0,
+ ambiguous: 0,
+ passedPercentage: 0,
+ failedPercentage: 0,
+ notDefinedPercentage: 0,
+ skippedPercentage: 0,
+ pendingPercentage: 0,
+ ambiguousPercentage: 0,
+ total: 0,
+ };
+ feature.duration = 0;
+ feature.time = "00:00:00.000";
+ feature.isFailed = false;
+ feature.isAmbiguous = false;
+ feature.isSkipped = false;
+ feature.isNotdefined = false;
+ feature.isPending = false;
+ suite.featureCount.total++;
+ const idPrefix = options.staticFilePath ? "" : `${uuid()}.`;
+ feature.id = `${idPrefix}${feature.id}`.replace(/[^a-zA-Z0-9-_]/g, "-");
+ feature.app = 0;
+ feature.browser = 0;
+
+ if (feature.elements) {
+ feature = parseScenarios(feature, suite, options);
+ }
+
+ if (feature.isFailed) {
+ suite.featureCount.failed++;
+ } else if (feature.isAmbiguous) {
+ suite.featureCount.ambiguous++;
+ } else if (feature.isNotdefined) {
+ suite.featureCount.notDefined++;
+ } else if (feature.isPending) {
+ suite.featureCount.pending++;
+ } else if (feature.isSkipped) {
+ suite.featureCount.skipped++;
+ } else {
+ suite.featureCount.passed++;
+ }
+
+ if (feature.duration) {
+ suite.totalTime += feature.duration;
+ feature.time = formatDuration(feature.duration, !!options.durationInMS);
+ }
+
+ suite.app += feature.metadata?.app ? 1 : 0;
+ suite.browser += feature.metadata?.browser ? 1 : 0;
+ });
+};
+
+const parseScenarios = (
+ feature: Feature,
+ suite: Suite,
+ options: Options
+): Feature => {
+ feature.elements?.forEach((scenario) => {
+ scenario.passed = 0;
+ scenario.failed = 0;
+ scenario.notDefined = 0;
+ scenario.skipped = 0;
+ scenario.pending = 0;
+ scenario.ambiguous = 0;
+ scenario.duration = 0;
+ scenario.time = "00:00:00.000";
+
+ scenario = parseSteps(scenario, options);
+
+ if (scenario.duration > 0) {
+ feature.duration += scenario.duration;
+ scenario.time = formatDuration(scenario.duration, !!options.durationInMS);
+ }
+
+ if (scenario.description) {
+ scenario.description = scenario.description.replace(/\r?\n/g, "
");
+ }
+
+ if (scenario.type === "background") return;
+
+ suite.scenarios.total++;
+ feature.scenarios.total++;
+
+ if (scenario.failed > 0) {
+ suite.scenarios.failed++;
+ feature.scenarios.failed++;
+ feature.isFailed = true;
+ } else if (scenario.ambiguous > 0) {
+ suite.scenarios.ambiguous++;
+ feature.scenarios.ambiguous++;
+ feature.isAmbiguous = true;
+ } else if (scenario.notDefined > 0) {
+ suite.scenarios.notDefined++;
+ feature.scenarios.notDefined++;
+ feature.isNotdefined = true;
+ } else if (scenario.pending > 0) {
+ suite.scenarios.pending++;
+ feature.scenarios.pending++;
+ feature.isPending = true;
+ } else if (scenario.skipped > 0) {
+ suite.scenarios.skipped++;
+ feature.scenarios.skipped++;
+ feature.isSkipped = true;
+ } else {
+ suite.scenarios.passed++;
+ feature.scenarios.passed++;
+ }
+ });
+ return feature;
+};
+
+const parseSteps = (
+ scenario: Scenario,
+ { durationInMS = false }: Options
+): Scenario => {
+ scenario.steps.forEach((step) => {
+ if (!step.embeddings) {
+ return;
+ }
+
+ step.attachments = step.attachments || [];
+
+ step.embeddings.forEach((embedding, embeddingIndex) => {
+ const { mime_type, media, data } = embedding;
+ const type = mime_type || media?.type;
+
+ if ((type === "text/html" || type === "text/plain") && data) {
+ embedding.data = Buffer.from(data.toString(), "base64").toString();
+ }
+
+ switch (type) {
+ case "application/json":
+ if (data) {
+ embedding.data = Buffer.from(data, "base64").toString();
+ step.json = (step.json || []).concat([
+ typeof embedding.data === "string"
+ ? JSON.parse(embedding.data)
+ : embedding.data,
+ ]);
+ }
+ break;
+ case "text/html":
+ step.html = (step.html || []).concat([data || ""]);
+ break;
+ case "text/plain":
+ step.text = (step.text || []).concat([_escapeHtml(data)]);
+ break;
+ case "image/png":
+ step.image = (step.image || []).concat([
+ `data:image/png;base64,${data}`,
+ ]);
+ if (step.embeddings) {
+ step.embeddings[embeddingIndex] = {};
+ }
+ break;
+ case "video/webm":
+ step.video = (step.video || []).concat([
+ `data:video/webm;base64,${data}`,
+ ]);
+ if (step.embeddings) {
+ step.embeddings[embeddingIndex] = {};
+ }
+ break;
+ default:
+ step.attachments?.push({
+ data: `data:${type || "text/plain"};base64,${data}`,
+ media: { type: type || "text/plain" },
+ });
+ if (step.embeddings) {
+ step.embeddings[embeddingIndex] = {};
+ }
+ }
+ });
+
+ if (step.doc_string) {
+ step.id = `${uuid()}.${scenario.id}.${step.name}`.replace(
+ /[^a-zA-Z0-9-_]/g,
+ "-"
+ );
+ step.restWireData = _escapeHtml(step.doc_string.value).replace(
+ /\r?\n/g,
+ "
"
+ );
+ }
+
+ if (step.result) {
+ const { status, duration } = step.result;
+ if (duration) {
+ scenario.duration += duration;
+ step.time = formatDuration(duration, durationInMS);
+ }
+
+ switch (status.toLowerCase()) {
+ case RESULT_STATUS.passed:
+ scenario.passed++;
+ break;
+ case RESULT_STATUS.failed:
+ scenario.failed++;
+ break;
+ case RESULT_STATUS.notDefined:
+ scenario.notDefined++;
+ break;
+ case RESULT_STATUS.pending:
+ scenario.pending++;
+ break;
+ case RESULT_STATUS.ambiguous:
+ scenario.ambiguous++;
+ break;
+ default:
+ scenario.skipped++;
+ }
+ }
+
+ if (
+ !step.result ||
+ (step.hidden &&
+ !step.text &&
+ !step.image &&
+ !step.video &&
+ step.attachments?.length === 0 &&
+ step.result.status !== RESULT_STATUS.failed)
+ ) {
+ return;
+ }
+ });
+
+ return scenario;
+};
+
+export const generateReport = (options: Options): void => {
+ if (!options.jsonDir)
+ throw new Error("A path holding the JSON files should be provided.");
+ if (!options.reportPath)
+ throw new Error("An output path for the reports should be defined.");
+
+ const {
+ customMetadata = false,
+ customData = null,
+ overrideStyle = REPORT_STYLESHEET,
+ customStyle,
+ disableLog = false,
+ openReportInBrowser = false,
+ reportName = DEFAULT_REPORT_NAME,
+ reportPath: reportPathOption,
+ saveCollectedJSON = false,
+ displayDuration = false,
+ displayReportTime = false,
+ hideMetadata = false,
+ useCDN = false,
+ } = options;
+
+ const reportPath = path.resolve(process.cwd(), reportPathOption);
+
+ fs.ensureDirSync(reportPath);
+ fs.ensureDirSync(path.resolve(reportPath, FEATURE_FOLDER));
+
+ const allFeatures = collectFeatures(options);
+
+ let suite: Suite = {
+ app: 0,
+ customMetadata,
+ customData,
+ style: overrideStyle,
+ customStyle,
+ useCDN,
+ hideMetadata,
+ displayReportTime,
+ displayDuration,
+ browser: 0,
+ name: "",
+ version: "version",
+ time: new Date(),
+ features: allFeatures,
+ featureCount: {
+ ambiguous: 0,
+ failed: 0,
+ passed: 0,
+ notDefined: 0,
+ pending: 0,
+ skipped: 0,
+ total: 0,
+ ambiguousPercentage: 0,
+ failedPercentage: 0,
+ notDefinedPercentage: 0,
+ pendingPercentage: 0,
+ skippedPercentage: 0,
+ passedPercentage: 0,
+ },
+ reportName,
+ scenarios: {
+ failed: 0,
+ ambiguous: 0,
+ notDefined: 0,
+ pending: 0,
+ skipped: 0,
+ passed: 0,
+ total: 0,
+ },
+ totalTime: 0,
+ };
+
+ parseFeatures(suite, options);
+
+ suite.featureCount.passedPercentage = calculatePercentage(
+ suite.featureCount.passed,
+ suite.featureCount.total
+ );
+ suite.featureCount.failedPercentage = calculatePercentage(
+ suite.featureCount.failed,
+ suite.featureCount.total
+ );
+ suite.featureCount.notDefinedPercentage = calculatePercentage(
+ suite.featureCount.notDefined,
+ suite.featureCount.total
+ );
+ suite.featureCount.pendingPercentage = calculatePercentage(
+ suite.featureCount.pending,
+ suite.featureCount.total
+ );
+ suite.featureCount.skippedPercentage = calculatePercentage(
+ suite.featureCount.skipped,
+ suite.featureCount.total
+ );
+ suite.featureCount.ambiguousPercentage = calculatePercentage(
+ suite.featureCount.ambiguous,
+ suite.featureCount.total
+ );
+
+ if (saveCollectedJSON) {
+ jsonFile.writeFileSync(
+ path.resolve(reportPath, "enriched-output.json"),
+ suite,
+ { spaces: 2 }
+ );
+ }
+
+ // Additional logging, browser opening, and report generation logic can be added here
+ _createFeaturesOverviewIndexPage(suite, options);
+ _createFeatureIndexPages(suite, options);
+
+ /* istanbul ignore else */
+ if (!disableLog) {
+ console.log(
+ "\x1b[34m%s\x1b[0m",
+ `\n
+=====================================================================================
+ Multiple Cucumber HTML report generated in:
+
+ ${path.join(reportPath, INDEX_HTML)}
+=====================================================================================\n`
+ );
+ }
+
+ if (openReportInBrowser) {
+ open(path.join(reportPath, INDEX_HTML));
+ }
+};
diff --git a/templates/assets/css/bootstrap.min.css b/src/templates/assets/css/bootstrap.min.css
similarity index 100%
rename from templates/assets/css/bootstrap.min.css
rename to src/templates/assets/css/bootstrap.min.css
diff --git a/templates/assets/css/dataTables.bootstrap.min.css b/src/templates/assets/css/dataTables.bootstrap.min.css
similarity index 100%
rename from templates/assets/css/dataTables.bootstrap.min.css
rename to src/templates/assets/css/dataTables.bootstrap.min.css
diff --git a/templates/assets/css/font-awesome.min.css b/src/templates/assets/css/font-awesome.min.css
similarity index 100%
rename from templates/assets/css/font-awesome.min.css
rename to src/templates/assets/css/font-awesome.min.css
diff --git a/templates/assets/css/responsive.dataTables.min.css b/src/templates/assets/css/responsive.dataTables.min.css
similarity index 100%
rename from templates/assets/css/responsive.dataTables.min.css
rename to src/templates/assets/css/responsive.dataTables.min.css
diff --git a/templates/assets/fonts/FontAwesome.otf b/src/templates/assets/fonts/FontAwesome.otf
similarity index 100%
rename from templates/assets/fonts/FontAwesome.otf
rename to src/templates/assets/fonts/FontAwesome.otf
diff --git a/templates/assets/fonts/fontawesome-webfont.eot b/src/templates/assets/fonts/fontawesome-webfont.eot
similarity index 100%
rename from templates/assets/fonts/fontawesome-webfont.eot
rename to src/templates/assets/fonts/fontawesome-webfont.eot
diff --git a/templates/assets/fonts/fontawesome-webfont.svg b/src/templates/assets/fonts/fontawesome-webfont.svg
similarity index 100%
rename from templates/assets/fonts/fontawesome-webfont.svg
rename to src/templates/assets/fonts/fontawesome-webfont.svg
diff --git a/templates/assets/fonts/fontawesome-webfont.ttf b/src/templates/assets/fonts/fontawesome-webfont.ttf
similarity index 100%
rename from templates/assets/fonts/fontawesome-webfont.ttf
rename to src/templates/assets/fonts/fontawesome-webfont.ttf
diff --git a/templates/assets/fonts/fontawesome-webfont.woff b/src/templates/assets/fonts/fontawesome-webfont.woff
similarity index 100%
rename from templates/assets/fonts/fontawesome-webfont.woff
rename to src/templates/assets/fonts/fontawesome-webfont.woff
diff --git a/templates/assets/fonts/fontawesome-webfont.woff2 b/src/templates/assets/fonts/fontawesome-webfont.woff2
similarity index 100%
rename from templates/assets/fonts/fontawesome-webfont.woff2
rename to src/templates/assets/fonts/fontawesome-webfont.woff2
diff --git a/templates/assets/fonts/glyphicons-halflings-regular.eot b/src/templates/assets/fonts/glyphicons-halflings-regular.eot
similarity index 100%
rename from templates/assets/fonts/glyphicons-halflings-regular.eot
rename to src/templates/assets/fonts/glyphicons-halflings-regular.eot
diff --git a/templates/assets/fonts/glyphicons-halflings-regular.svg b/src/templates/assets/fonts/glyphicons-halflings-regular.svg
similarity index 100%
rename from templates/assets/fonts/glyphicons-halflings-regular.svg
rename to src/templates/assets/fonts/glyphicons-halflings-regular.svg
diff --git a/templates/assets/fonts/glyphicons-halflings-regular.ttf b/src/templates/assets/fonts/glyphicons-halflings-regular.ttf
similarity index 100%
rename from templates/assets/fonts/glyphicons-halflings-regular.ttf
rename to src/templates/assets/fonts/glyphicons-halflings-regular.ttf
diff --git a/templates/assets/fonts/glyphicons-halflings-regular.woff b/src/templates/assets/fonts/glyphicons-halflings-regular.woff
similarity index 100%
rename from templates/assets/fonts/glyphicons-halflings-regular.woff
rename to src/templates/assets/fonts/glyphicons-halflings-regular.woff
diff --git a/templates/assets/fonts/glyphicons-halflings-regular.woff2 b/src/templates/assets/fonts/glyphicons-halflings-regular.woff2
similarity index 100%
rename from templates/assets/fonts/glyphicons-halflings-regular.woff2
rename to src/templates/assets/fonts/glyphicons-halflings-regular.woff2
diff --git a/templates/assets/img/ghost.svg b/src/templates/assets/img/ghost.svg
similarity index 100%
rename from templates/assets/img/ghost.svg
rename to src/templates/assets/img/ghost.svg
diff --git a/templates/assets/js/Chart.min.js b/src/templates/assets/js/Chart.min.js
similarity index 100%
rename from templates/assets/js/Chart.min.js
rename to src/templates/assets/js/Chart.min.js
diff --git a/templates/assets/js/bootstrap.min.js b/src/templates/assets/js/bootstrap.min.js
similarity index 100%
rename from templates/assets/js/bootstrap.min.js
rename to src/templates/assets/js/bootstrap.min.js
diff --git a/templates/assets/js/darkmode.js b/src/templates/assets/js/darkmode.js
similarity index 100%
rename from templates/assets/js/darkmode.js
rename to src/templates/assets/js/darkmode.js
diff --git a/templates/assets/js/dataTables.bootstrap.min.js b/src/templates/assets/js/dataTables.bootstrap.min.js
similarity index 100%
rename from templates/assets/js/dataTables.bootstrap.min.js
rename to src/templates/assets/js/dataTables.bootstrap.min.js
diff --git a/templates/assets/js/dataTables.responsive.min.js b/src/templates/assets/js/dataTables.responsive.min.js
similarity index 100%
rename from templates/assets/js/dataTables.responsive.min.js
rename to src/templates/assets/js/dataTables.responsive.min.js
diff --git a/templates/assets/js/html5shiv.min.js b/src/templates/assets/js/html5shiv.min.js
similarity index 100%
rename from templates/assets/js/html5shiv.min.js
rename to src/templates/assets/js/html5shiv.min.js
diff --git a/templates/assets/js/jquery-3.2.1.min.js b/src/templates/assets/js/jquery-3.2.1.min.js
similarity index 100%
rename from templates/assets/js/jquery-3.2.1.min.js
rename to src/templates/assets/js/jquery-3.2.1.min.js
diff --git a/templates/assets/js/jquery.dataTables.min.js b/src/templates/assets/js/jquery.dataTables.min.js
similarity index 100%
rename from templates/assets/js/jquery.dataTables.min.js
rename to src/templates/assets/js/jquery.dataTables.min.js
diff --git a/templates/assets/js/respond.min.js b/src/templates/assets/js/respond.min.js
similarity index 100%
rename from templates/assets/js/respond.min.js
rename to src/templates/assets/js/respond.min.js
diff --git a/templates/components/custom-data.tmpl b/src/templates/components/custom-data.tmpl
similarity index 100%
rename from templates/components/custom-data.tmpl
rename to src/templates/components/custom-data.tmpl
diff --git a/templates/components/feature-custom-metadata-overview.tmpl b/src/templates/components/feature-custom-metadata-overview.tmpl
similarity index 100%
rename from templates/components/feature-custom-metadata-overview.tmpl
rename to src/templates/components/feature-custom-metadata-overview.tmpl
diff --git a/templates/components/feature-metadata-overview.tmpl b/src/templates/components/feature-metadata-overview.tmpl
similarity index 100%
rename from templates/components/feature-metadata-overview.tmpl
rename to src/templates/components/feature-metadata-overview.tmpl
diff --git a/templates/components/features-overview-custom-metadata.tmpl b/src/templates/components/features-overview-custom-metadata.tmpl
similarity index 100%
rename from templates/components/features-overview-custom-metadata.tmpl
rename to src/templates/components/features-overview-custom-metadata.tmpl
diff --git a/templates/components/features-overview.chart.tmpl b/src/templates/components/features-overview.chart.tmpl
similarity index 100%
rename from templates/components/features-overview.chart.tmpl
rename to src/templates/components/features-overview.chart.tmpl
diff --git a/templates/components/features-overview.tmpl b/src/templates/components/features-overview.tmpl
similarity index 100%
rename from templates/components/features-overview.tmpl
rename to src/templates/components/features-overview.tmpl
diff --git a/templates/components/scenarios-overview.chart.tmpl b/src/templates/components/scenarios-overview.chart.tmpl
similarity index 100%
rename from templates/components/scenarios-overview.chart.tmpl
rename to src/templates/components/scenarios-overview.chart.tmpl
diff --git a/templates/components/scenarios.tmpl b/src/templates/components/scenarios.tmpl
similarity index 100%
rename from templates/components/scenarios.tmpl
rename to src/templates/components/scenarios.tmpl
diff --git a/templates/feature-overview.index.tmpl b/src/templates/feature-overview.index.tmpl
similarity index 100%
rename from templates/feature-overview.index.tmpl
rename to src/templates/feature-overview.index.tmpl
diff --git a/templates/features-overview.index.tmpl b/src/templates/features-overview.index.tmpl
similarity index 100%
rename from templates/features-overview.index.tmpl
rename to src/templates/features-overview.index.tmpl
diff --git a/templates/generic.js b/src/templates/generic.js
similarity index 100%
rename from templates/generic.js
rename to src/templates/generic.js
diff --git a/templates/style.css b/src/templates/style.css
similarity index 100%
rename from templates/style.css
rename to src/templates/style.css
diff --git a/src/test/collect-feature.spec.ts b/src/test/collect-feature.spec.ts
new file mode 100644
index 00000000..fe2b3d2d
--- /dev/null
+++ b/src/test/collect-feature.spec.ts
@@ -0,0 +1,119 @@
+import jsonFile from "jsonfile";
+import path from "path";
+import { collectFeatures } from "../collect-jsons";
+import { Options } from "../types/report-types";
+
+const reportPath = path.resolve(process.cwd(), "./.temp/test");
+
+describe("collect-features.ts", () => {
+ describe("Happy flows", () => {
+ it("should return an output from the merged found JSON files", () => {
+ const result = collectFeatures({
+ jsonDir: "./src/test/data/json",
+ reportPath,
+ });
+ const expectedOutput = jsonFile.readFileSync(
+ path.resolve(process.cwd(), "./src/test/data/output/merged-output.json")
+ );
+
+ expect(result).toEqual(expectedOutput);
+ });
+
+ it("should return an output from the merged found JSON files and add the provided metadata", () => {
+ const result = collectFeatures({
+ jsonDir: "./src/test/data/collect-json",
+ reportPath,
+ metadata: {
+ browser: {
+ name: "chrome",
+ version: "1",
+ },
+ device: "Local test machine",
+ platform: {
+ name: "Ubuntu",
+ version: "16.04",
+ },
+ },
+ });
+ const expectedOutput = jsonFile.readFileSync(
+ path.resolve(
+ process.cwd(),
+ "./src/test/data/output/provided-metadata.json"
+ )
+ );
+
+ expect(result).toEqual(expectedOutput);
+ });
+
+ it("should save an output from the merged found JSON files", () => {
+ const result = collectFeatures({
+ jsonDir: "./src/test/data/json",
+ reportPath,
+ saveCollectedJSON: true,
+ });
+ const expectedOutput = jsonFile.readFileSync(
+ path.resolve(process.cwd(), "./src/test/data/output/merged-output.json")
+ );
+
+ expect(result).toEqual(expectedOutput);
+ });
+
+ it("should collect the creation date of JSON files", () => {
+ const options: Options = {
+ jsonDir: "./src/test/data/json",
+ reportPath,
+ displayReportTime: true,
+ };
+
+ const collectedFeatures = collectFeatures(options);
+
+ collectedFeatures.forEach((json) => {
+ expect(json.metadata?.reportTime).toBeDefined();
+ expect(json.metadata?.reportTime?.length).toBe(
+ "YYYY/MM/DD HH:mm:ss".length
+ );
+ });
+ });
+ });
+
+ describe("Failures", () => {
+ it("should throw an error when the JSON folder does not exist", () => {
+ expect(() => {
+ collectFeatures({
+ jsonDir: "./src/test/data/nonexistent",
+ reportPath,
+ });
+ }).toThrow(
+ new Error(
+ `Unable to read JSON files from './src/test/data/nonexistent'.`
+ )
+ );
+ });
+
+ it("should print a console message when no JSON files could be found", () => {
+ const consoleSpy = import.meta.jest
+ .spyOn(console, "warn")
+ .mockImplementation();
+
+ collectFeatures({
+ jsonDir: "./src/test/data/no-jsons",
+ reportPath,
+ });
+
+ expect(consoleSpy).toHaveBeenCalledWith(
+ `WARNING: No JSON files found in './src/test/data/no-jsons'. NO REPORT CAN BE CREATED!`
+ );
+ consoleSpy.mockRestore();
+ });
+
+ it("should return an empty array when no JSON files could be found", () => {
+ const result = collectFeatures({
+ jsonDir: "./src/test/data/no-jsons",
+ reportPath,
+ });
+
+ expect(Array.isArray(result)).toBe(true);
+ expect(result.length).toBe(0);
+ });
+ });
+});
diff --git a/test/custom.css b/src/test/custom.css
similarity index 100%
rename from test/custom.css
rename to src/test/custom.css
diff --git a/test/unit/data/collect-json/no-metadata.json b/src/test/data/collect-json/no-metadata.json
similarity index 100%
rename from test/unit/data/collect-json/no-metadata.json
rename to src/test/data/collect-json/no-metadata.json
diff --git a/test/unit/data/custom-metadata-json/ambiguous_scenarios_specified_v1.json b/src/test/data/custom-metadata-json/ambiguous_scenarios_specified_v1.json
similarity index 100%
rename from test/unit/data/custom-metadata-json/ambiguous_scenarios_specified_v1.json
rename to src/test/data/custom-metadata-json/ambiguous_scenarios_specified_v1.json
diff --git a/test/unit/data/custom-metadata-json/ambiguous_scenarios_specified_v2.json b/src/test/data/custom-metadata-json/ambiguous_scenarios_specified_v2.json
similarity index 100%
rename from test/unit/data/custom-metadata-json/ambiguous_scenarios_specified_v2.json
rename to src/test/data/custom-metadata-json/ambiguous_scenarios_specified_v2.json
diff --git a/test/unit/data/custom-metadata-json/failure_report_v3.json b/src/test/data/custom-metadata-json/failure_report_v3.json
similarity index 100%
rename from test/unit/data/custom-metadata-json/failure_report_v3.json
rename to src/test/data/custom-metadata-json/failure_report_v3.json
diff --git a/test/unit/data/custom-metadata-json/multiple_different_attachements.json b/src/test/data/custom-metadata-json/multiple_different_attachements.json
similarity index 100%
rename from test/unit/data/custom-metadata-json/multiple_different_attachements.json
rename to src/test/data/custom-metadata-json/multiple_different_attachements.json
diff --git a/test/unit/data/custom-metadata-json/pending_scenarios_specified_v1.json b/src/test/data/custom-metadata-json/pending_scenarios_specified_v1.json
similarity index 100%
rename from test/unit/data/custom-metadata-json/pending_scenarios_specified_v1.json
rename to src/test/data/custom-metadata-json/pending_scenarios_specified_v1.json
diff --git a/test/unit/data/custom-metadata-json/skipped_scenarios.json b/src/test/data/custom-metadata-json/skipped_scenarios.json
similarity index 100%
rename from test/unit/data/custom-metadata-json/skipped_scenarios.json
rename to src/test/data/custom-metadata-json/skipped_scenarios.json
diff --git a/test/unit/data/custom-metadata-json/undefined_scenarios_specified_v3.json b/src/test/data/custom-metadata-json/undefined_scenarios_specified_v3.json
similarity index 100%
rename from test/unit/data/custom-metadata-json/undefined_scenarios_specified_v3.json
rename to src/test/data/custom-metadata-json/undefined_scenarios_specified_v3.json
diff --git a/test/unit/data/embedded-array-json/embedded_success_v1.json b/src/test/data/embedded-array-json/embedded_success_v1.json
similarity index 100%
rename from test/unit/data/embedded-array-json/embedded_success_v1.json
rename to src/test/data/embedded-array-json/embedded_success_v1.json
diff --git a/test/unit/data/embedded-array-json/failure_report_multi_attachment_v3.json b/src/test/data/embedded-array-json/failure_report_multi_attachment_v3.json
similarity index 100%
rename from test/unit/data/embedded-array-json/failure_report_multi_attachment_v3.json
rename to src/test/data/embedded-array-json/failure_report_multi_attachment_v3.json
diff --git a/test/unit/data/embedded-array-json/failure_report_v3.json b/src/test/data/embedded-array-json/failure_report_v3.json
similarity index 100%
rename from test/unit/data/embedded-array-json/failure_report_v3.json
rename to src/test/data/embedded-array-json/failure_report_v3.json
diff --git a/test/unit/data/embedded-array-json/happy_flow_v2.json b/src/test/data/embedded-array-json/happy_flow_v2.json
similarity index 100%
rename from test/unit/data/embedded-array-json/happy_flow_v2.json
rename to src/test/data/embedded-array-json/happy_flow_v2.json
diff --git a/test/unit/data/embedded-array-json/happy_flow_v3.json b/src/test/data/embedded-array-json/happy_flow_v3.json
similarity index 100%
rename from test/unit/data/embedded-array-json/happy_flow_v3.json
rename to src/test/data/embedded-array-json/happy_flow_v3.json
diff --git a/test/unit/data/json/after.hook.error.json b/src/test/data/json/after.hook.error.json
similarity index 100%
rename from test/unit/data/json/after.hook.error.json
rename to src/test/data/json/after.hook.error.json
diff --git a/test/unit/data/json/ambiguous_scenarios_specified_v1.json b/src/test/data/json/ambiguous_scenarios_specified_v1.json
similarity index 100%
rename from test/unit/data/json/ambiguous_scenarios_specified_v1.json
rename to src/test/data/json/ambiguous_scenarios_specified_v1.json
diff --git a/test/unit/data/json/ambiguous_scenarios_specified_v2.json b/src/test/data/json/ambiguous_scenarios_specified_v2.json
similarity index 100%
rename from test/unit/data/json/ambiguous_scenarios_specified_v2.json
rename to src/test/data/json/ambiguous_scenarios_specified_v2.json
diff --git a/test/unit/data/json/ambiguous_scenarios_specified_v3.json b/src/test/data/json/ambiguous_scenarios_specified_v3.json
similarity index 100%
rename from test/unit/data/json/ambiguous_scenarios_specified_v3.json
rename to src/test/data/json/ambiguous_scenarios_specified_v3.json
diff --git a/test/unit/data/json/background.json b/src/test/data/json/background.json
similarity index 100%
rename from test/unit/data/json/background.json
rename to src/test/data/json/background.json
diff --git a/test/unit/data/json/background2.json b/src/test/data/json/background2.json
similarity index 100%
rename from test/unit/data/json/background2.json
rename to src/test/data/json/background2.json
diff --git a/test/unit/data/json/before-and-after-hook.json b/src/test/data/json/before-and-after-hook.json
similarity index 100%
rename from test/unit/data/json/before-and-after-hook.json
rename to src/test/data/json/before-and-after-hook.json
diff --git a/test/unit/data/json/before.hook.error.json b/src/test/data/json/before.hook.error.json
similarity index 100%
rename from test/unit/data/json/before.hook.error.json
rename to src/test/data/json/before.hook.error.json
diff --git a/test/unit/data/json/embeddings.json b/src/test/data/json/embeddings.json
similarity index 100%
rename from test/unit/data/json/embeddings.json
rename to src/test/data/json/embeddings.json
diff --git a/test/unit/data/json/empty_json.json b/src/test/data/json/empty_json.json
similarity index 100%
rename from test/unit/data/json/empty_json.json
rename to src/test/data/json/empty_json.json
diff --git a/test/unit/data/json/failure_report_v1.json b/src/test/data/json/failure_report_v1.json
similarity index 100%
rename from test/unit/data/json/failure_report_v1.json
rename to src/test/data/json/failure_report_v1.json
diff --git a/test/unit/data/json/failure_report_v2.json b/src/test/data/json/failure_report_v2.json
similarity index 100%
rename from test/unit/data/json/failure_report_v2.json
rename to src/test/data/json/failure_report_v2.json
diff --git a/test/unit/data/json/failure_report_v3.json b/src/test/data/json/failure_report_v3.json
similarity index 100%
rename from test/unit/data/json/failure_report_v3.json
rename to src/test/data/json/failure_report_v3.json
diff --git a/test/unit/data/json/happy_flow_app_android.json b/src/test/data/json/happy_flow_app_android.json
similarity index 100%
rename from test/unit/data/json/happy_flow_app_android.json
rename to src/test/data/json/happy_flow_app_android.json
diff --git a/test/unit/data/json/happy_flow_app_ios.json b/src/test/data/json/happy_flow_app_ios.json
similarity index 100%
rename from test/unit/data/json/happy_flow_app_ios.json
rename to src/test/data/json/happy_flow_app_ios.json
diff --git a/test/unit/data/json/happy_flow_v1.json b/src/test/data/json/happy_flow_v1.json
similarity index 100%
rename from test/unit/data/json/happy_flow_v1.json
rename to src/test/data/json/happy_flow_v1.json
diff --git a/test/unit/data/json/happy_flow_v2.json b/src/test/data/json/happy_flow_v2.json
similarity index 100%
rename from test/unit/data/json/happy_flow_v2.json
rename to src/test/data/json/happy_flow_v2.json
diff --git a/test/unit/data/json/happy_flow_v3.json b/src/test/data/json/happy_flow_v3.json
similarity index 100%
rename from test/unit/data/json/happy_flow_v3.json
rename to src/test/data/json/happy_flow_v3.json
diff --git a/test/unit/data/json/no_elements.json b/src/test/data/json/no_elements.json
similarity index 100%
rename from test/unit/data/json/no_elements.json
rename to src/test/data/json/no_elements.json
diff --git a/test/unit/data/json/no_elements_v2.json b/src/test/data/json/no_elements_v2.json
similarity index 100%
rename from test/unit/data/json/no_elements_v2.json
rename to src/test/data/json/no_elements_v2.json
diff --git a/test/unit/data/json/no_elements_v3.json b/src/test/data/json/no_elements_v3.json
similarity index 100%
rename from test/unit/data/json/no_elements_v3.json
rename to src/test/data/json/no_elements_v3.json
diff --git a/test/unit/data/json/pending_scenarios_specified_v1.json b/src/test/data/json/pending_scenarios_specified_v1.json
similarity index 100%
rename from test/unit/data/json/pending_scenarios_specified_v1.json
rename to src/test/data/json/pending_scenarios_specified_v1.json
diff --git a/test/unit/data/json/pending_scenarios_specified_v2.json b/src/test/data/json/pending_scenarios_specified_v2.json
similarity index 100%
rename from test/unit/data/json/pending_scenarios_specified_v2.json
rename to src/test/data/json/pending_scenarios_specified_v2.json
diff --git a/test/unit/data/json/pending_scenarios_specified_v3.json b/src/test/data/json/pending_scenarios_specified_v3.json
similarity index 100%
rename from test/unit/data/json/pending_scenarios_specified_v3.json
rename to src/test/data/json/pending_scenarios_specified_v3.json
diff --git a/test/unit/data/json/skipped_scenarios.json b/src/test/data/json/skipped_scenarios.json
similarity index 100%
rename from test/unit/data/json/skipped_scenarios.json
rename to src/test/data/json/skipped_scenarios.json
diff --git a/test/unit/data/json/undefined_scenarios_specified_v1.json b/src/test/data/json/undefined_scenarios_specified_v1.json
similarity index 100%
rename from test/unit/data/json/undefined_scenarios_specified_v1.json
rename to src/test/data/json/undefined_scenarios_specified_v1.json
diff --git a/test/unit/data/json/undefined_scenarios_specified_v2.json b/src/test/data/json/undefined_scenarios_specified_v2.json
similarity index 100%
rename from test/unit/data/json/undefined_scenarios_specified_v2.json
rename to src/test/data/json/undefined_scenarios_specified_v2.json
diff --git a/test/unit/data/json/undefined_scenarios_specified_v3.json b/src/test/data/json/undefined_scenarios_specified_v3.json
similarity index 100%
rename from test/unit/data/json/undefined_scenarios_specified_v3.json
rename to src/test/data/json/undefined_scenarios_specified_v3.json
diff --git a/test/unit/data/json/undefined_succeeded_pending_scenarios_specified_v3.json b/src/test/data/json/undefined_succeeded_pending_scenarios_specified_v3.json
similarity index 100%
rename from test/unit/data/json/undefined_succeeded_pending_scenarios_specified_v3.json
rename to src/test/data/json/undefined_succeeded_pending_scenarios_specified_v3.json
diff --git a/test/unit/data/json/with_rest_doc_string.json b/src/test/data/json/with_rest_doc_string.json
similarity index 100%
rename from test/unit/data/json/with_rest_doc_string.json
rename to src/test/data/json/with_rest_doc_string.json
diff --git a/test/unit/data/no-jsons/empty.md b/src/test/data/no-jsons/empty.md
similarity index 100%
rename from test/unit/data/no-jsons/empty.md
rename to src/test/data/no-jsons/empty.md
diff --git a/test/unit/data/output/merged-output.json b/src/test/data/output/merged-output.json
similarity index 100%
rename from test/unit/data/output/merged-output.json
rename to src/test/data/output/merged-output.json
diff --git a/test/unit/data/output/provided-metadata.json b/src/test/data/output/provided-metadata.json
similarity index 100%
rename from test/unit/data/output/provided-metadata.json
rename to src/test/data/output/provided-metadata.json
diff --git a/src/test/generate-report.spec.ts b/src/test/generate-report.spec.ts
new file mode 100644
index 00000000..7ca7cbbe
--- /dev/null
+++ b/src/test/generate-report.spec.ts
@@ -0,0 +1,153 @@
+import fs from "fs-extra";
+import path from "path";
+import { generateReport } from "../generate-report";
+import { getCurrentDir } from "../utils/constants";
+const REPORT_PATH = "./.tmp/";
+
+describe("generate-report.ts", () => {
+ const cleanUp = () => {
+ if (fs.pathExistsSync(REPORT_PATH)) {
+ fs.removeSync(REPORT_PATH);
+ }
+ };
+
+ const reportPathExists = (filePath: string) => fs.pathExistsSync(filePath);
+
+ describe("Happy flows", () => {
+ beforeEach(() => cleanUp());
+ afterEach(() => cleanUp());
+
+ it("should create a report from the merged found json files without provided custom data", () => {
+ generateReport({
+ jsonDir: "./src/test/data/json",
+ reportPath: REPORT_PATH,
+ saveCollectedJSON: true,
+ displayDuration: true,
+ });
+
+ expect(reportPathExists(path.join(REPORT_PATH, "index.html"))).toBe(true);
+ expect(() =>
+ fs.statSync(path.join(REPORT_PATH, "features/happy-flow-v2.html"))
+ ).toThrow();
+ expect(
+ reportPathExists(path.join(REPORT_PATH, "merged-output.json"))
+ ).toBe(true);
+ expect(
+ reportPathExists(path.join(REPORT_PATH, "enriched-output.json"))
+ ).toBe(true);
+ });
+
+ it("should create a report with the report time", () => {
+ generateReport({
+ jsonDir: "./src/test/data/json",
+ reportPath: REPORT_PATH,
+ saveCollectedJSON: true,
+ displayDuration: true,
+ displayReportTime: true,
+ });
+
+ expect(reportPathExists(path.join(REPORT_PATH, "index.html"))).toBe(true);
+ const indexHtmlContent = fs.readFileSync(
+ path.join(REPORT_PATH, "index.html"),
+ "utf8"
+ );
+ expect(indexHtmlContent).toContain(">Date");
+ });
+
+ it("should create a report from the merged found json files with custom data with static file paths", () => {
+ generateReport({
+ jsonDir: "./src/test/data/json",
+ reportPath: REPORT_PATH,
+ staticFilePath: true,
+ saveCollectedJSON: true,
+ reportName: "You can adjust this report name",
+ customData: {
+ title: "Run info",
+ data: [
+ { label: "Project", value: "Custom project" },
+ { label: "Release", value: "1.2.3" },
+ { label: "Cycle", value: "B11221.34321" },
+ {
+ label: "Execution Start Time",
+ value: "Nov 19th 2017, 02:31 PM EST",
+ },
+ {
+ label: "Execution End Time",
+ value: "Nov 19th 2017, 02:56 PM EST",
+ },
+ ],
+ },
+ displayDuration: true,
+ durationInMS: true,
+ });
+
+ expect(reportPathExists(path.join(REPORT_PATH, "index.html"))).toBe(true);
+ expect(
+ reportPathExists(path.join(REPORT_PATH, "features/happy-flow-v2.html"))
+ ).toBe(true);
+ expect(
+ reportPathExists(path.join(REPORT_PATH, "merged-output.json"))
+ ).toBe(true);
+ expect(
+ reportPathExists(path.join(REPORT_PATH, "enriched-output.json"))
+ ).toBe(true);
+ });
+
+ it("should create a report from the merged found json files with custom metadata", () => {
+ try {
+ generateReport({
+ jsonDir: "./src/test/data/custom-metadata-json/",
+ reportPath: REPORT_PATH,
+ customMetadata: true,
+ });
+ } catch (error) {
+ console.log(error);
+ }
+
+ expect(
+ reportPathExists(path.join(process.cwd(), REPORT_PATH, "index.html"))
+ ).toBe(true);
+ });
+
+ it("should create a report from the merged found json files and with array of embedded items", () => {
+ generateReport({
+ jsonDir: "./src/test/data/embedded-array-json/",
+ reportName: "Embedded array of various mimeType",
+ reportPath: REPORT_PATH,
+ customStyle: path.join(getCurrentDir(import.meta.url), "my.css"),
+ customMetadata: false,
+ });
+
+ expect(reportPathExists(path.join(REPORT_PATH, "index.html"))).toBe(true);
+ });
+
+ it("should open report in browser", () => {
+ generateReport({
+ jsonDir: "./src/test/data/embedded-array-json/",
+ reportName: "Embedded array of various mimeType",
+ reportPath: REPORT_PATH,
+ openReportInBrowser: true,
+ customStyle: path.join(getCurrentDir(import.meta.url), "my.css"),
+ customMetadata: false,
+ });
+
+ expect(reportPathExists(path.join(REPORT_PATH, "index.html"))).toBe(true);
+ });
+ });
+
+ describe("Failures", () => {
+ it("should throw an error when the json folder does not exist", () => {
+ expect(() => generateReport({})).toThrow(
+ "A path holding the JSON files should be provided."
+ );
+ });
+
+ it("should throw an error when the report folder is not provided", () => {
+ expect(() =>
+ generateReport({
+ jsonDir: "./src/test/data/json",
+ })
+ ).toThrow("An output path for the reports should be defined.");
+ });
+ });
+});
diff --git a/test/my.css b/src/test/my.css
similarity index 100%
rename from test/my.css
rename to src/test/my.css
diff --git a/src/test/test.mjs b/src/test/test.mjs
new file mode 100644
index 00000000..0053279f
--- /dev/null
+++ b/src/test/test.mjs
@@ -0,0 +1,96 @@
+import path from "node:path";
+import { generateReport } from "../../dist/generate-report.js";
+import { getCurrentDir } from "../../dist/utils/constants.js";
+
+const __dirname = getCurrentDir(import.meta.url);
+
+/**
+ * Generate a report for browsers
+ */
+generateReport({
+ saveCollectedJSON: true,
+ useCDN: true,
+ jsonDir: "./src/test/data/json/",
+ reportPath: "./.tmp/browsers/",
+ reportName: "You can adjust this report name",
+ customMetadata: false,
+ displayDuration: true,
+ durationInMS: true,
+ customData: {
+ title: "Run info",
+ data: [
+ { label: "Project", value: "Custom project" },
+ { label: "Release", value: "1.2.3" },
+ { label: "Cycle", value: "B11221.34321" },
+ { label: "Execution Start Time", value: "Nov 19th 2017, 02:31 PM EST" },
+ { label: "Execution End Time", value: "Nov 19th 2017, 02:56 PM EST" },
+ ],
+ },
+});
+
+/**
+ * Generate a report with array of embedded data
+ */
+generateReport({
+ saveCollectedJSON: true,
+ jsonDir: "./src/test/data/embedded-array-json/",
+ reportPath: "./.tmp/embedded-array/",
+ customStyle: path.join(__dirname, "./custom.css"),
+ overrideStyle: path.join(__dirname, "./my.css"),
+ customMetadata: false,
+ pageTitle: "A custom page title",
+ pageFooter: "
Some custom footer data can be placed here
Some custom footer data can be placed here