diff --git a/.changeset/funny-melons-hug.md b/.changeset/funny-melons-hug.md new file mode 100644 index 0000000..c70c117 --- /dev/null +++ b/.changeset/funny-melons-hug.md @@ -0,0 +1,5 @@ +--- +"@effect/docgen": patch +--- + +update to effect framework package diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 8aa9179..d3c5eeb 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -21,7 +21,7 @@ module.exports = { "eslint:recommended", "plugin:@typescript-eslint/eslint-recommended", "plugin:@typescript-eslint/recommended", - "plugin:@repo-tooling/dprint/recommended" + "plugin:@effect/recommended" ], plugins: ["deprecation", "import", "sort-destructure-keys", "simple-import-sort", "codegen"], rules: { @@ -63,7 +63,7 @@ module.exports = { "@typescript-eslint/no-array-constructor": "off", "@typescript-eslint/no-use-before-define": "off", "@typescript-eslint/no-namespace": "off", - "@repo-tooling/dprint/dprint": [ + "@effect/dprint": [ "error", { config: { diff --git a/package.json b/package.json index 54ee4d6..bbf3929 100644 --- a/package.json +++ b/package.json @@ -34,13 +34,12 @@ }, "homepage": "https://github.com/effect-ts/docgen", "dependencies": { - "@effect/data": "^0.12.10", - "@effect/io": "^0.28.0", - "@effect/schema": "^0.21.1", - "chalk": "^2.4.2", + "@effect/schema": "^0.33.0", + "chalk": "^5.3.0", "doctrine": "^3.0.0", + "effect": "2.0.0-next.24", "fs-extra": "^11.1.1", - "glob": "^10.3.1", + "glob": "^10.3.3", "markdown-toc": "^1.2.0", "prettier": "^2.8.8", "rimraf": "^5.0.1", @@ -50,27 +49,27 @@ "devDependencies": { "@changesets/changelog-github": "^0.4.8", "@changesets/cli": "^2.26.2", - "@repo-tooling/eslint-plugin-dprint": "^0.0.4", + "@effect/eslint-plugin": "^0.1.2", "@types/doctrine": "0.0.5", "@types/fs-extra": "^11.0.1", "@types/glob": "^8.1.0", - "@types/node": "^20.3.3", + "@types/node": "^20.4.8", "@types/prettier": "^2.7.3", "@types/rimraf": "^4.0.5", - "@typescript-eslint/eslint-plugin": "^5.60.1", - "@typescript-eslint/parser": "^5.60.1", - "@vitest/coverage-v8": "^0.32.2", - "eslint": "^8.44.0", + "@typescript-eslint/eslint-plugin": "^6.2.1", + "@typescript-eslint/parser": "^6.2.1", + "@vitest/coverage-v8": "^0.34.1", + "eslint": "^8.46.0", "eslint-import-resolver-typescript": "^3.5.5", "eslint-plugin-codegen": "^0.17.0", - "eslint-plugin-deprecation": "^1.4.1", - "eslint-plugin-import": "^2.27.5", + "eslint-plugin-deprecation": "^1.5.0", + "eslint-plugin-import": "^2.28.0", "eslint-plugin-simple-import-sort": "^10.0.0", "eslint-plugin-sort-destructure-keys": "^1.5.0", - "tsup": "^7.1.0", + "tsup": "^7.2.0", "typescript": "^5.1.6", - "vite": "^4.3.9", - "vitest": "^0.32.2" + "vite": "^4.4.8", + "vitest": "^0.34.1" }, "peerDependencies": { "typescript": "^5.x" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 097c390..e0551d5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,31 +1,28 @@ -lockfileVersion: '6.1' +lockfileVersion: '6.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false dependencies: - '@effect/data': - specifier: ^0.12.10 - version: 0.12.10 - '@effect/io': - specifier: ^0.28.0 - version: 0.28.0 '@effect/schema': - specifier: ^0.21.1 - version: 0.21.1 + specifier: ^0.33.0 + version: 0.33.0(@effect/data@0.17.1)(@effect/io@0.38.0) chalk: - specifier: ^2.4.2 - version: 2.4.2 + specifier: ^5.3.0 + version: 5.3.0 doctrine: specifier: ^3.0.0 version: 3.0.0 + effect: + specifier: 2.0.0-next.24 + version: 2.0.0-next.24(@effect/data@0.17.1)(@effect/io@0.38.0)(@effect/match@0.32.0)(@effect/stm@0.22.0)(@effect/stream@0.34.0) fs-extra: specifier: ^11.1.1 version: 11.1.1 glob: - specifier: ^10.3.1 - version: 10.3.1 + specifier: ^10.3.3 + version: 10.3.3 markdown-toc: specifier: ^1.2.0 version: 1.2.0 @@ -40,7 +37,7 @@ dependencies: version: 19.0.0 ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@20.3.3)(typescript@5.1.6) + version: 10.9.1(@types/node@20.4.8)(typescript@5.1.6) devDependencies: '@changesets/changelog-github': @@ -49,9 +46,9 @@ devDependencies: '@changesets/cli': specifier: ^2.26.2 version: 2.26.2 - '@repo-tooling/eslint-plugin-dprint': - specifier: ^0.0.4 - version: 0.0.4(typescript@5.1.6) + '@effect/eslint-plugin': + specifier: ^0.1.2 + version: 0.1.2 '@types/doctrine': specifier: 0.0.5 version: 0.0.5 @@ -62,8 +59,8 @@ devDependencies: specifier: ^8.1.0 version: 8.1.0 '@types/node': - specifier: ^20.3.3 - version: 20.3.3 + specifier: ^20.4.8 + version: 20.4.8 '@types/prettier': specifier: ^2.7.3 version: 2.7.3 @@ -71,47 +68,47 @@ devDependencies: specifier: ^4.0.5 version: 4.0.5 '@typescript-eslint/eslint-plugin': - specifier: ^5.60.1 - version: 5.60.1(@typescript-eslint/parser@5.60.1)(eslint@8.44.0)(typescript@5.1.6) + specifier: ^6.2.1 + version: 6.2.1(@typescript-eslint/parser@6.2.1)(eslint@8.46.0)(typescript@5.1.6) '@typescript-eslint/parser': - specifier: ^5.60.1 - version: 5.60.1(eslint@8.44.0)(typescript@5.1.6) + specifier: ^6.2.1 + version: 6.2.1(eslint@8.46.0)(typescript@5.1.6) '@vitest/coverage-v8': - specifier: ^0.32.2 - version: 0.32.2(vitest@0.32.2) + specifier: ^0.34.1 + version: 0.34.1(vitest@0.34.1) eslint: - specifier: ^8.44.0 - version: 8.44.0 + specifier: ^8.46.0 + version: 8.46.0 eslint-import-resolver-typescript: specifier: ^3.5.5 - version: 3.5.5(@typescript-eslint/parser@5.60.1)(eslint-plugin-import@2.27.5)(eslint@8.44.0) + version: 3.5.5(@typescript-eslint/parser@6.2.1)(eslint-plugin-import@2.28.0)(eslint@8.46.0) eslint-plugin-codegen: specifier: ^0.17.0 version: 0.17.0 eslint-plugin-deprecation: - specifier: ^1.4.1 - version: 1.4.1(eslint@8.44.0)(typescript@5.1.6) + specifier: ^1.5.0 + version: 1.5.0(eslint@8.46.0)(typescript@5.1.6) eslint-plugin-import: - specifier: ^2.27.5 - version: 2.27.5(@typescript-eslint/parser@5.60.1)(eslint-import-resolver-typescript@3.5.5)(eslint@8.44.0) + specifier: ^2.28.0 + version: 2.28.0(@typescript-eslint/parser@6.2.1)(eslint-import-resolver-typescript@3.5.5)(eslint@8.46.0) eslint-plugin-simple-import-sort: specifier: ^10.0.0 - version: 10.0.0(eslint@8.44.0) + version: 10.0.0(eslint@8.46.0) eslint-plugin-sort-destructure-keys: specifier: ^1.5.0 - version: 1.5.0(eslint@8.44.0) + version: 1.5.0(eslint@8.46.0) tsup: - specifier: ^7.1.0 - version: 7.1.0(ts-node@10.9.1)(typescript@5.1.6) + specifier: ^7.2.0 + version: 7.2.0(ts-node@10.9.1)(typescript@5.1.6) typescript: specifier: ^5.1.6 version: 5.1.6 vite: - specifier: ^4.3.9 - version: 4.3.9(@types/node@20.3.3) + specifier: ^4.4.8 + version: 4.4.8(@types/node@20.4.8) vitest: - specifier: ^0.32.2 - version: 0.32.2 + specifier: ^0.34.1 + version: 0.34.1 packages: @@ -158,7 +155,7 @@ packages: debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.3 - semver: 6.3.0 + semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true @@ -192,7 +189,7 @@ packages: '@babel/helper-validator-option': 7.21.0 browserslist: 4.21.5 lru-cache: 5.1.1 - semver: 6.3.0 + semver: 6.3.1 dev: true /@babel/helper-environment-visitor@7.21.5: @@ -555,63 +552,82 @@ packages: resolution: {integrity: sha512-E1q1JaOPeEUBhG//IUayqJQvNpqprZ0OCF8B/bIhUqSsMIp0Y74PgF8JPvDCrOdq43qiGUYAavVO8iCBHOoU/A==} dev: true - /@dprint/typescript@0.68.5: - resolution: {integrity: sha512-dHoRj84w5C8YerucLj//195nDkuHtAtwISByoHJg7OUzJNSu93oh29wBxbSShJQ/jkF335BwqiMbhPTXbTvzhA==} + /@dprint/typescript@0.85.1: + resolution: {integrity: sha512-rPwwm/RrFIolz6xHa8Kzpshuwpe+xu/XcEw9iUmRF2tnyIwxxaW7XoFKaQ+GfPju81cKpH4vJeq7/2IizKvyjg==} dev: true - /@effect/data@0.12.10: - resolution: {integrity: sha512-zIz/DgumH2LgGdr1Wc9ChET5JSG0k/G5kDc8rn4a6yIJ0v2d5rfnbRWIJO2fWmdFvc+128JyaBvYguIyz9JaAQ==} + /@effect/data@0.17.1: + resolution: {integrity: sha512-QCYkLE5Y5Dm5Yax5R3GmW4ZIgTx7W+kSZ7yq5eqQ/mFWa8i4yxbLuu8cudqzdeZtRtTGZKlhDxfFfgVtMywXJg==} dev: false - /@effect/io@0.27.2: - resolution: {integrity: sha512-J9s+v2JyGUKzxG5I6v1/X5v+I/e9dST4Afk3y6ZYBEXzU3Slo+3ZDf7XlazicS7koAoTEnvJ6zt79aM4LLkoWA==} + /@effect/eslint-plugin@0.1.2: + resolution: {integrity: sha512-spBoeM9kF0rTM1JP8dfaubVUqUrkfijIUKqE6bh4gDw9qMYweT1HV9iXLzF5Dsj589wwVfk6sx5uqO09C4+w2w==} + dependencies: + '@dprint/formatter': 0.2.0 + '@dprint/typescript': 0.85.1 + diff: 5.1.0 + dev: true + + /@effect/io@0.38.0(@effect/data@0.17.1): + resolution: {integrity: sha512-qlVC9ASxNC+L2NKX5qOV9672CE5wWizfwBSFaX2XLI7CC118WRvohCTIPQ52n50Bj5TmR20+na+U9C7e4VkqzA==} + peerDependencies: + '@effect/data': ^0.17.1 dependencies: - '@effect/data': 0.12.10 + '@effect/data': 0.17.1 dev: false - /@effect/io@0.28.0: - resolution: {integrity: sha512-FzGyTAoRZMsXsji6I45/lLDqqFxV38rEhqebhLiXc995tfIvS+xAHkiTN+nrLFadTP0JL0H4ystSz4kcYgTy5Q==} + /@effect/match@0.32.0(@effect/data@0.17.1)(@effect/schema@0.33.0): + resolution: {integrity: sha512-04QfnIgCcMnnNbGxTv2xa9/7q1c5kgpsBodqTUZ8eX86A/EdE8Czz+JkVarG00/xE+nYhQLXOXCN9Zj+dtqVkQ==} + peerDependencies: + '@effect/data': ^0.17.1 + '@effect/schema': ^0.33.0 dependencies: - '@effect/data': 0.12.10 + '@effect/data': 0.17.1 + '@effect/schema': 0.33.0(@effect/data@0.17.1)(@effect/io@0.38.0) dev: false - /@effect/schema@0.21.1: - resolution: {integrity: sha512-ZKxrkOPFo158lw21di+cxcGc7XnvnhQ334hAlXYP4DMEAAmp4bVVuPuDSjVYLLVkg1y3bdYyVqfT7+v1ZfpJNg==} + /@effect/schema@0.33.0(@effect/data@0.17.1)(@effect/io@0.38.0): + resolution: {integrity: sha512-K/IDp8aZpqqy2IBydnRtjNF7Sg/qZjiR5t+OANDZ2yOmTHRgtvWM4fwYV5kGYzEBZaBZEqUGjzj4KOqbsQhCEw==} + peerDependencies: + '@effect/data': ^0.17.1 + '@effect/io': ^0.38.0 dependencies: - '@effect/data': 0.12.10 - '@effect/io': 0.27.2 - fast-check: 3.10.0 + '@effect/data': 0.17.1 + '@effect/io': 0.38.0(@effect/data@0.17.1) + fast-check: 3.12.0 dev: false - /@esbuild/android-arm64@0.17.19: - resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true + /@effect/stm@0.22.0(@effect/data@0.17.1)(@effect/io@0.38.0): + resolution: {integrity: sha512-K+v05Iveg9h//xZbo/JekZE4mHln8QA7dpfl84L3VKQlUfiAZOiN4ABTyb41Ly+n+YywSSbeTdbOya0ccxx/rQ==} + peerDependencies: + '@effect/data': ^0.17.1 + '@effect/io': ^0.38.0 + dependencies: + '@effect/data': 0.17.1 + '@effect/io': 0.38.0(@effect/data@0.17.1) + dev: false - /@esbuild/android-arm64@0.18.11: - resolution: {integrity: sha512-snieiq75Z1z5LJX9cduSAjUr7vEI1OdlzFPMw0HH5YI7qQHDd3qs+WZoMrWYDsfRJSq36lIA6mfZBkvL46KoIw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true + /@effect/stream@0.34.0(@effect/data@0.17.1)(@effect/io@0.38.0): + resolution: {integrity: sha512-8eDDQ0JG+ctsstLH/Qo4ojBkcEIFtqpEsWZS6leAwY9gXVmEG54PMWXZiX6dTchgQXKmSnLkEh36leAq4piawQ==} + peerDependencies: + '@effect/data': ^0.17.1 + '@effect/io': ^0.38.0 + dependencies: + '@effect/data': 0.17.1 + '@effect/io': 0.38.0(@effect/data@0.17.1) + dev: false - /@esbuild/android-arm@0.17.19: - resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} + /@esbuild/android-arm64@0.18.18: + resolution: {integrity: sha512-dkAPYzRHq3dNXIzOyAknYOzsx8o3KWaNiuu56B2rP9IFPmFWMS58WQcTlUQi6iloku8ZyHHMluCe5sTWhKq/Yw==} engines: {node: '>=12'} - cpu: [arm] + cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@esbuild/android-arm@0.18.11: - resolution: {integrity: sha512-q4qlUf5ucwbUJZXF5tEQ8LF7y0Nk4P58hOsGk3ucY0oCwgQqAnqXVbUuahCddVHfrxmpyewRpiTHwVHIETYu7Q==} + /@esbuild/android-arm@0.18.18: + resolution: {integrity: sha512-oBymf7ZwplAawSxmiSlBCf+FMcY0f4bs5QP2jn43JKUf0M9DnrUTjqa5RvFPl1elw+sMfcpfBRPK+rb+E1q7zg==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -619,8 +635,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.17.19: - resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} + /@esbuild/android-x64@0.18.18: + resolution: {integrity: sha512-r7/pVcrUQMYkjvtE/1/n6BxhWM+/9tvLxDG1ev1ce4z3YsqoxMK9bbOM6bFcj0BowMeGQvOZWcBV182lFFKmrw==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -628,17 +644,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.18.11: - resolution: {integrity: sha512-iPuoxQEV34+hTF6FT7om+Qwziv1U519lEOvekXO9zaMMlT9+XneAhKL32DW3H7okrCOBQ44BMihE8dclbZtTuw==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-arm64@0.17.19: - resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} + /@esbuild/darwin-arm64@0.18.18: + resolution: {integrity: sha512-MSe2iV9MAH3wfP0g+vzN9bp36rtPPuCSk+bT5E2vv/d8krvW5uB/Pi/Q5+txUZuxsG3GcO8dhygjnFq0wJU9hQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -646,26 +653,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.18.11: - resolution: {integrity: sha512-Gm0QkI3k402OpfMKyQEEMG0RuW2LQsSmI6OeO4El2ojJMoF5NLYb3qMIjvbG/lbMeLOGiW6ooU8xqc+S0fgz2w==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-x64@0.17.19: - resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-x64@0.18.11: - resolution: {integrity: sha512-N15Vzy0YNHu6cfyDOjiyfJlRJCB/ngKOAvoBf1qybG3eOq0SL2Lutzz9N7DYUbb7Q23XtHPn6lMDF6uWbGv9Fw==} + /@esbuild/darwin-x64@0.18.18: + resolution: {integrity: sha512-ARFYISOWkaifjcr48YtO70gcDNeOf1H2RnmOj6ip3xHIj66f3dAbhcd5Nph5np6oHI7DhHIcr9MWO18RvUL1bw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -673,17 +662,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.17.19: - resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-arm64@0.18.11: - resolution: {integrity: sha512-atEyuq6a3omEY5qAh5jIORWk8MzFnCpSTUruBgeyN9jZq1K/QI9uke0ATi3MHu4L8c59CnIi4+1jDKMuqmR71A==} + /@esbuild/freebsd-arm64@0.18.18: + resolution: {integrity: sha512-BHnXmexzEWRU2ZySJosU0Ts0NRnJnNrMB6t4EiIaOSel73I8iLsNiTPLH0rJulAh19cYZutsB5XHK6N8fi5eMg==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -691,17 +671,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.17.19: - resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-x64@0.18.11: - resolution: {integrity: sha512-XtuPrEfBj/YYYnAAB7KcorzzpGTvOr/dTtXPGesRfmflqhA4LMF0Gh/n5+a9JBzPuJ+CGk17CA++Hmr1F/gI0Q==} + /@esbuild/freebsd-x64@0.18.18: + resolution: {integrity: sha512-n823w35wm0ZOobbuE//0sJjuz1Qj619+AwjgOcAJMN2pomZhH9BONCtn+KlfrmM/NWZ+27yB/eGVFzUIWLeh3w==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -709,8 +680,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.17.19: - resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} + /@esbuild/linux-arm64@0.18.18: + resolution: {integrity: sha512-zANxnwF0sCinDcAqoMohGoWBK9QaFJ65Vgh0ZE+RXtURaMwx+RfmfLElqtnn7X8OYNckMoIXSg7u+tZ3tqTlrA==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -718,17 +689,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.18.11: - resolution: {integrity: sha512-c6Vh2WS9VFKxKZ2TvJdA7gdy0n6eSy+yunBvv4aqNCEhSWVor1TU43wNRp2YLO9Vng2G+W94aRz+ILDSwAiYog==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm@0.17.19: - resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} + /@esbuild/linux-arm@0.18.18: + resolution: {integrity: sha512-Kck3jxPLQU4VeAGwe8Q4NU+IWIx+suULYOFUI9T0C2J1+UQlOHJ08ITN+MaJJ+2youzJOmKmcphH/t3SJxQ1Tw==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -736,17 +698,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.18.11: - resolution: {integrity: sha512-Idipz+Taso/toi2ETugShXjQ3S59b6m62KmLHkJlSq/cBejixmIydqrtM2XTvNCywFl3VC7SreSf6NV0i6sRyg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ia32@0.17.19: - resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} + /@esbuild/linux-ia32@0.18.18: + resolution: {integrity: sha512-+VHz2sIRlY5u8IlaLJpdf5TL2kM76yx186pW7bpTB+vLWpzcFQVP04L842ZB2Ty13A1VXUvy3DbU1jV65P2skg==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -754,17 +707,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.18.11: - resolution: {integrity: sha512-S3hkIF6KUqRh9n1Q0dSyYcWmcVa9Cg+mSoZEfFuzoYXXsk6196qndrM+ZiHNwpZKi3XOXpShZZ+9dfN5ykqjjw==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-loong64@0.17.19: - resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} + /@esbuild/linux-loong64@0.18.18: + resolution: {integrity: sha512-fXPEPdeGBvguo/1+Na8OIWz3667BN1cwbGtTEZWTd0qdyTsk5gGf9jVX8MblElbDb/Cpw6y5JiaQuL96YmvBwQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -772,26 +716,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.18.11: - resolution: {integrity: sha512-MRESANOoObQINBA+RMZW+Z0TJWpibtE7cPFnahzyQHDCA9X9LOmGh68MVimZlM9J8n5Ia8lU773te6O3ILW8kw==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-mips64el@0.17.19: - resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-mips64el@0.18.11: - resolution: {integrity: sha512-qVyPIZrXNMOLYegtD1u8EBccCrBVshxMrn5MkuFc3mEVsw7CCQHaqZ4jm9hbn4gWY95XFnb7i4SsT3eflxZsUg==} + /@esbuild/linux-mips64el@0.18.18: + resolution: {integrity: sha512-dLvRB87pIBIRnEIC32LIcgwK1JzlIuADIRjLKdUIpxauKwMuS/xMpN+cFl+0nN4RHNYOZ57DmXFFmQAcdlFOmw==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -799,17 +725,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.17.19: - resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ppc64@0.18.11: - resolution: {integrity: sha512-T3yd8vJXfPirZaUOoA9D2ZjxZX4Gr3QuC3GztBJA6PklLotc/7sXTOuuRkhE9W/5JvJP/K9b99ayPNAD+R+4qQ==} + /@esbuild/linux-ppc64@0.18.18: + resolution: {integrity: sha512-fRChqIJZ7hLkXSKfBLYgsX9Ssb5OGCjk3dzCETF5QSS1qjTgayLv0ALUdJDB9QOh/nbWwp+qfLZU6md4XcjL7w==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -817,8 +734,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.17.19: - resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} + /@esbuild/linux-riscv64@0.18.18: + resolution: {integrity: sha512-ALK/BT3u7Hoa/vHjow6W6+MKF0ohYcVcVA1EpskI4bkBPVuDLrUDqt2YFifg5UcZc8qup0CwQqWmFUd6VMNgaA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -826,26 +743,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.18.11: - resolution: {integrity: sha512-evUoRPWiwuFk++snjH9e2cAjF5VVSTj+Dnf+rkO/Q20tRqv+644279TZlPK8nUGunjPAtQRCj1jQkDAvL6rm2w==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-s390x@0.17.19: - resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-s390x@0.18.11: - resolution: {integrity: sha512-/SlRJ15XR6i93gRWquRxYCfhTeC5PdqEapKoLbX63PLCmAkXZHY2uQm2l9bN0oPHBsOw2IswRZctMYS0MijFcg==} + /@esbuild/linux-s390x@0.18.18: + resolution: {integrity: sha512-crT7jtOXd9iirY65B+mJQ6W0HWdNy8dtkZqKGWNcBnunpLcTCfne5y5bKic9bhyYzKpQEsO+C/VBPD8iF0RhRw==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -853,8 +752,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.17.19: - resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} + /@esbuild/linux-x64@0.18.18: + resolution: {integrity: sha512-/NSgghjBOW9ELqjXDYxOCCIsvQUZpvua1/6NdnA9Vnrp9UzEydyDdFXljUjMMS9p5KxMzbMO9frjHYGVHBfCHg==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -862,17 +761,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.18.11: - resolution: {integrity: sha512-xcncej+wF16WEmIwPtCHi0qmx1FweBqgsRtEL1mSHLFR6/mb3GEZfLQnx+pUDfRDEM4DQF8dpXIW7eDOZl1IbA==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/netbsd-x64@0.17.19: - resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} + /@esbuild/netbsd-x64@0.18.18: + resolution: {integrity: sha512-8Otf05Vx5sZjLLDulgr5QS5lsWXMplKZEyHMArH9/S4olLlhzmdhQBPhzhJTNwaL2FJNdWcUPNGAcoD5zDTfUA==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -880,26 +770,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.18.11: - resolution: {integrity: sha512-aSjMHj/F7BuS1CptSXNg6S3M4F3bLp5wfFPIJM+Km2NfIVfFKhdmfHF9frhiCLIGVzDziggqWll0B+9AUbud/Q==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/openbsd-x64@0.17.19: - resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/openbsd-x64@0.18.11: - resolution: {integrity: sha512-tNBq+6XIBZtht0xJGv7IBB5XaSyvYPCm1PxJ33zLQONdZoLVM0bgGqUrXnJyiEguD9LU4AHiu+GCXy/Hm9LsdQ==} + /@esbuild/openbsd-x64@0.18.18: + resolution: {integrity: sha512-tFiFF4kT5L5qhVrWJUNxEXWvvX8nK/UX9ZrB7apuTwY3f6+Xy4aFMBPwAVrBYtBd5MOUuyOVHK6HBZCAHkwUlw==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -907,8 +779,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.17.19: - resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} + /@esbuild/sunos-x64@0.18.18: + resolution: {integrity: sha512-MPogVV8Bzh8os4OM+YDGGsSzCzmNRiyKGtHoJyZLtI4BMmd6EcxmGlcEGK1uM46h1BiOyi7Z7teUtzzQhvkC+w==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -916,26 +788,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.18.11: - resolution: {integrity: sha512-kxfbDOrH4dHuAAOhr7D7EqaYf+W45LsAOOhAet99EyuxxQmjbk8M9N4ezHcEiCYPaiW8Dj3K26Z2V17Gt6p3ng==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-arm64@0.17.19: - resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-arm64@0.18.11: - resolution: {integrity: sha512-Sh0dDRyk1Xi348idbal7lZyfSkjhJsdFeuC13zqdipsvMetlGiFQNdO+Yfp6f6B4FbyQm7qsk16yaZk25LChzg==} + /@esbuild/win32-arm64@0.18.18: + resolution: {integrity: sha512-YKD6LF/XXY9REu+ZL5RAsusiG48n602qxsMVh/E8FFD9hp4OyTQaL9fpE1ovxwQXqFio+tT0ITUGjDSSSPN13w==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -943,8 +797,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.17.19: - resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} + /@esbuild/win32-ia32@0.18.18: + resolution: {integrity: sha512-NjSBmBsyZBTsZB6ga6rA6PfG/RHnwruUz/9YEVXcm4STGauFWvhYhOMhEyw1yU5NVgYYm8CH5AltCm77TS21/Q==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -952,26 +806,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.18.11: - resolution: {integrity: sha512-o9JUIKF1j0rqJTFbIoF4bXj6rvrTZYOrfRcGyL0Vm5uJ/j5CkBD/51tpdxe9lXEDouhRgdr/BYzUrDOvrWwJpg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-x64@0.17.19: - resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-x64@0.18.11: - resolution: {integrity: sha512-rQI4cjLHd2hGsM1LqgDI7oOCYbQ6IBOVsX9ejuRMSze0GqXUG2ekwiKkiBU1pRGSeCqFFHxTrcEydB2Hyoz9CA==} + /@esbuild/win32-x64@0.18.18: + resolution: {integrity: sha512-eTSg/gC3p3tdjj4roDhe5xu94l1s2jMazP8u2FsYO8SEKvSpPOO71EucprDn/IuErDPvTFUhV9lTw5z5WJCRKQ==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -979,28 +815,28 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.44.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.46.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.44.0 - eslint-visitor-keys: 3.4.1 + eslint: 8.46.0 + eslint-visitor-keys: 3.4.2 dev: true - /@eslint-community/regexpp@4.5.1: - resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==} + /@eslint-community/regexpp@4.6.2: + resolution: {integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc@2.1.0: - resolution: {integrity: sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==} + /@eslint/eslintrc@2.1.1: + resolution: {integrity: sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4 - espree: 9.6.0 + espree: 9.6.1 globals: 13.20.0 ignore: 5.2.4 import-fresh: 3.3.0 @@ -1011,8 +847,8 @@ packages: - supports-color dev: true - /@eslint/js@8.44.0: - resolution: {integrity: sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==} + /@eslint/js@8.46.0: + resolution: {integrity: sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -1052,13 +888,20 @@ packages: engines: {node: '>=8'} dev: true + /@jest/schemas@29.6.0: + resolution: {integrity: sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': 0.27.8 + dev: true + /@jest/types@26.6.2: resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==} engines: {node: '>= 10.14.2'} dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 20.3.3 + '@types/node': 20.4.8 '@types/yargs': 15.0.15 chalk: 4.1.2 dev: true @@ -1157,17 +1000,8 @@ packages: tslib: 2.5.2 dev: true - /@repo-tooling/eslint-plugin-dprint@0.0.4(typescript@5.1.6): - resolution: {integrity: sha512-1gQXioqAlyYoRLAQ/4GQ3id8VI9nNO8KKGbbSl5xZf+lo/7Q2zDFhFiuG6owHFYh+2nslQLHy4wJJjOPm2yWEw==} - dependencies: - '@dprint/formatter': 0.2.0 - '@dprint/typescript': 0.68.5 - '@typescript-eslint/utils': 5.59.7(eslint@8.44.0)(typescript@5.1.6) - diff: 5.1.0 - eslint: 8.44.0 - transitivePeerDependencies: - - supports-color - - typescript + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true /@ts-morph/common@0.20.0: @@ -1209,14 +1043,14 @@ packages: resolution: {integrity: sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==} dependencies: '@types/jsonfile': 6.1.1 - '@types/node': 20.3.3 + '@types/node': 20.4.8 dev: true /@types/glob@8.1.0: resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.3.3 + '@types/node': 20.4.8 dev: true /@types/is-ci@3.0.0: @@ -1252,7 +1086,7 @@ packages: /@types/jsonfile@6.1.1: resolution: {integrity: sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==} dependencies: - '@types/node': 20.3.3 + '@types/node': 20.4.8 dev: true /@types/minimatch@5.1.2: @@ -1267,8 +1101,8 @@ packages: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} dev: true - /@types/node@20.3.3: - resolution: {integrity: sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==} + /@types/node@20.4.8: + resolution: {integrity: sha512-0mHckf6D2DiIAzh8fM8f3HQCvMKDpK94YQ0DSVkfWTG9BZleYIWudw9cJxX8oCk9bM+vAkDyujDV6dmKHbvQpg==} /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -1303,102 +1137,105 @@ packages: '@types/yargs-parser': 21.0.0 dev: true - /@typescript-eslint/eslint-plugin@5.60.1(@typescript-eslint/parser@5.60.1)(eslint@8.44.0)(typescript@5.1.6): - resolution: {integrity: sha512-KSWsVvsJsLJv3c4e73y/Bzt7OpqMCADUO846bHcuWYSYM19bldbAeDv7dYyV0jwkbMfJ2XdlzwjhXtuD7OY6bw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/eslint-plugin@6.2.1(@typescript-eslint/parser@6.2.1)(eslint@8.46.0)(typescript@5.1.6): + resolution: {integrity: sha512-iZVM/ALid9kO0+I81pnp1xmYiFyqibAHzrqX4q5YvvVEyJqY+e6rfTXSCsc2jUxGNqJqTfFSSij/NFkZBiBzLw==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.5.1 - '@typescript-eslint/parser': 5.60.1(eslint@8.44.0)(typescript@5.1.6) - '@typescript-eslint/scope-manager': 5.60.1 - '@typescript-eslint/type-utils': 5.60.1(eslint@8.44.0)(typescript@5.1.6) - '@typescript-eslint/utils': 5.60.1(eslint@8.44.0)(typescript@5.1.6) + '@eslint-community/regexpp': 4.6.2 + '@typescript-eslint/parser': 6.2.1(eslint@8.46.0)(typescript@5.1.6) + '@typescript-eslint/scope-manager': 6.2.1 + '@typescript-eslint/type-utils': 6.2.1(eslint@8.46.0)(typescript@5.1.6) + '@typescript-eslint/utils': 6.2.1(eslint@8.46.0)(typescript@5.1.6) + '@typescript-eslint/visitor-keys': 6.2.1 debug: 4.3.4 - eslint: 8.44.0 - grapheme-splitter: 1.0.4 + eslint: 8.46.0 + graphemer: 1.4.0 ignore: 5.2.4 + natural-compare: 1.4.0 natural-compare-lite: 1.4.0 - semver: 7.5.3 - tsutils: 3.21.0(typescript@5.1.6) + semver: 7.5.4 + ts-api-utils: 1.0.1(typescript@5.1.6) typescript: 5.1.6 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.60.1(eslint@8.44.0)(typescript@5.1.6): - resolution: {integrity: sha512-pHWlc3alg2oSMGwsU/Is8hbm3XFbcrb6P5wIxcQW9NsYBfnrubl/GhVVD/Jm/t8HXhA2WncoIRfBtnCgRGV96Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/parser@6.2.1(eslint@8.46.0)(typescript@5.1.6): + resolution: {integrity: sha512-Ld+uL1kYFU8e6btqBFpsHkwQ35rw30IWpdQxgOqOh4NfxSDH6uCkah1ks8R/RgQqI5hHPXMaLy9fbFseIe+dIg==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.60.1 - '@typescript-eslint/types': 5.60.1 - '@typescript-eslint/typescript-estree': 5.60.1(typescript@5.1.6) + '@typescript-eslint/scope-manager': 6.2.1 + '@typescript-eslint/types': 6.2.1 + '@typescript-eslint/typescript-estree': 6.2.1(typescript@5.1.6) + '@typescript-eslint/visitor-keys': 6.2.1 debug: 4.3.4 - eslint: 8.44.0 + eslint: 8.46.0 typescript: 5.1.6 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@5.59.7: - resolution: {integrity: sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ==} + /@typescript-eslint/scope-manager@5.62.0: + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.59.7 - '@typescript-eslint/visitor-keys': 5.59.7 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 dev: true - /@typescript-eslint/scope-manager@5.60.1: - resolution: {integrity: sha512-Dn/LnN7fEoRD+KspEOV0xDMynEmR3iSHdgNsarlXNLGGtcUok8L4N71dxUgt3YvlO8si7E+BJ5Fe3wb5yUw7DQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/scope-manager@6.2.1: + resolution: {integrity: sha512-UCqBF9WFqv64xNsIEPfBtenbfodPXsJ3nPAr55mGPkQIkiQvgoWNo+astj9ZUfJfVKiYgAZDMnM6dIpsxUMp3Q==} + engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 5.60.1 - '@typescript-eslint/visitor-keys': 5.60.1 + '@typescript-eslint/types': 6.2.1 + '@typescript-eslint/visitor-keys': 6.2.1 dev: true - /@typescript-eslint/type-utils@5.60.1(eslint@8.44.0)(typescript@5.1.6): - resolution: {integrity: sha512-vN6UztYqIu05nu7JqwQGzQKUJctzs3/Hg7E2Yx8rz9J+4LgtIDFWjjl1gm3pycH0P3mHAcEUBd23LVgfrsTR8A==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/type-utils@6.2.1(eslint@8.46.0)(typescript@5.1.6): + resolution: {integrity: sha512-fTfCgomBMIgu2Dh2Or3gMYgoNAnQm3RLtRp+jP7A8fY+LJ2+9PNpi5p6QB5C4RSP+U3cjI0vDlI3mspAkpPVbQ==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: '*' + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.60.1(typescript@5.1.6) - '@typescript-eslint/utils': 5.60.1(eslint@8.44.0)(typescript@5.1.6) + '@typescript-eslint/typescript-estree': 6.2.1(typescript@5.1.6) + '@typescript-eslint/utils': 6.2.1(eslint@8.46.0)(typescript@5.1.6) debug: 4.3.4 - eslint: 8.44.0 - tsutils: 3.21.0(typescript@5.1.6) + eslint: 8.46.0 + ts-api-utils: 1.0.1(typescript@5.1.6) typescript: 5.1.6 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@5.59.7: - resolution: {integrity: sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A==} + /@typescript-eslint/types@5.62.0: + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/types@5.60.1: - resolution: {integrity: sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/types@6.2.1: + resolution: {integrity: sha512-528bGcoelrpw+sETlyM91k51Arl2ajbNT9L4JwoXE2dvRe1yd8Q64E4OL7vHYw31mlnVsf+BeeLyAZUEQtqahQ==} + engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@5.59.7(typescript@5.1.6): - resolution: {integrity: sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ==} + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.1.6): + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -1406,177 +1243,175 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.59.7 - '@typescript-eslint/visitor-keys': 5.59.7 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.3 + semver: 7.5.4 tsutils: 3.21.0(typescript@5.1.6) typescript: 5.1.6 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@5.60.1(typescript@5.1.6): - resolution: {integrity: sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/typescript-estree@6.2.1(typescript@5.1.6): + resolution: {integrity: sha512-G+UJeQx9AKBHRQBpmvr8T/3K5bJa485eu+4tQBxFq0KoT22+jJyzo1B50JDT9QdC1DEmWQfdKsa8ybiNWYsi0Q==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.60.1 - '@typescript-eslint/visitor-keys': 5.60.1 + '@typescript-eslint/types': 6.2.1 + '@typescript-eslint/visitor-keys': 6.2.1 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.3 - tsutils: 3.21.0(typescript@5.1.6) + semver: 7.5.4 + ts-api-utils: 1.0.1(typescript@5.1.6) typescript: 5.1.6 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.59.7(eslint@8.44.0)(typescript@5.1.6): - resolution: {integrity: sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ==} + /@typescript-eslint/utils@5.62.0(eslint@8.46.0)(typescript@5.1.6): + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.44.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0) '@types/json-schema': 7.0.12 '@types/semver': 7.5.0 - '@typescript-eslint/scope-manager': 5.59.7 - '@typescript-eslint/types': 5.59.7 - '@typescript-eslint/typescript-estree': 5.59.7(typescript@5.1.6) - eslint: 8.44.0 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.1.6) + eslint: 8.46.0 eslint-scope: 5.1.1 - semver: 7.5.3 + semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/utils@5.60.1(eslint@8.44.0)(typescript@5.1.6): - resolution: {integrity: sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/utils@6.2.1(eslint@8.46.0)(typescript@5.1.6): + resolution: {integrity: sha512-eBIXQeupYmxVB6S7x+B9SdBeB6qIdXKjgQBge2J+Ouv8h9Cxm5dHf/gfAZA6dkMaag+03HdbVInuXMmqFB/lKQ==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.44.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0) '@types/json-schema': 7.0.12 '@types/semver': 7.5.0 - '@typescript-eslint/scope-manager': 5.60.1 - '@typescript-eslint/types': 5.60.1 - '@typescript-eslint/typescript-estree': 5.60.1(typescript@5.1.6) - eslint: 8.44.0 - eslint-scope: 5.1.1 - semver: 7.5.3 + '@typescript-eslint/scope-manager': 6.2.1 + '@typescript-eslint/types': 6.2.1 + '@typescript-eslint/typescript-estree': 6.2.1(typescript@5.1.6) + eslint: 8.46.0 + semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@5.59.7: - resolution: {integrity: sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ==} + /@typescript-eslint/visitor-keys@5.62.0: + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.59.7 - eslint-visitor-keys: 3.4.1 + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.2 dev: true - /@typescript-eslint/visitor-keys@5.60.1: - resolution: {integrity: sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/visitor-keys@6.2.1: + resolution: {integrity: sha512-iTN6w3k2JEZ7cyVdZJTVJx2Lv7t6zFA8DCrJEHD2mwfc16AEvvBWVhbFh34XyG2NORCd0viIgQY1+u7kPI0WpA==} + engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 5.60.1 - eslint-visitor-keys: 3.4.1 + '@typescript-eslint/types': 6.2.1 + eslint-visitor-keys: 3.4.2 dev: true - /@vitest/coverage-v8@0.32.2(vitest@0.32.2): - resolution: {integrity: sha512-/+V3nB3fyeuuSeKxCfi6XmWjDIxpky7AWSkGVfaMjAk7di8igBwRsThLjultwIZdTDH1RAxpjmCXEfSqsMFZOA==} + /@vitest/coverage-v8@0.34.1(vitest@0.34.1): + resolution: {integrity: sha512-lRgUwjTMr8idXEbUPSNH4jjRZJXJCVY3BqUa+LDXyJVe3pldxYMn/r0HMqatKUGTp0Kyf1j5LfFoY6kRqRp7jw==} peerDependencies: vitest: '>=0.32.0 <1' dependencies: '@ampproject/remapping': 2.2.1 '@bcoe/v8-coverage': 0.2.3 istanbul-lib-coverage: 3.2.0 - istanbul-lib-report: 3.0.0 + istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.5 - magic-string: 0.30.0 + istanbul-reports: 3.1.6 + magic-string: 0.30.2 picocolors: 1.0.0 std-env: 3.3.3 test-exclude: 6.0.0 v8-to-istanbul: 9.1.0 - vitest: 0.32.2 + vitest: 0.34.1 transitivePeerDependencies: - supports-color dev: true - /@vitest/expect@0.32.2: - resolution: {integrity: sha512-6q5yzweLnyEv5Zz1fqK5u5E83LU+gOMVBDuxBl2d2Jfx1BAp5M+rZgc5mlyqdnxquyoiOXpXmFNkcGcfFnFH3Q==} + /@vitest/expect@0.34.1: + resolution: {integrity: sha512-q2CD8+XIsQ+tHwypnoCk8Mnv5e6afLFvinVGCq3/BOT4kQdVQmY6rRfyKkwcg635lbliLPqbunXZr+L1ssUWiQ==} dependencies: - '@vitest/spy': 0.32.2 - '@vitest/utils': 0.32.2 + '@vitest/spy': 0.34.1 + '@vitest/utils': 0.34.1 chai: 4.3.7 dev: true - /@vitest/runner@0.32.2: - resolution: {integrity: sha512-06vEL0C1pomOEktGoLjzZw+1Fb+7RBRhmw/06WkDrd1akkT9i12su0ku+R/0QM69dfkIL/rAIDTG+CSuQVDcKw==} + /@vitest/runner@0.34.1: + resolution: {integrity: sha512-YfQMpYzDsYB7yqgmlxZ06NI4LurHWfrH7Wy3Pvf/z/vwUSgq1zLAb1lWcItCzQG+NVox+VvzlKQrYEXb47645g==} dependencies: - '@vitest/utils': 0.32.2 - concordance: 5.0.4 + '@vitest/utils': 0.34.1 p-limit: 4.0.0 pathe: 1.1.1 dev: true - /@vitest/snapshot@0.32.2: - resolution: {integrity: sha512-JwhpeH/PPc7GJX38vEfCy9LtRzf9F4er7i4OsAJyV7sjPwjj+AIR8cUgpMTWK4S3TiamzopcTyLsZDMuldoi5A==} + /@vitest/snapshot@0.34.1: + resolution: {integrity: sha512-0O9LfLU0114OqdF8lENlrLsnn024Tb1CsS9UwG0YMWY2oGTQfPtkW+B/7ieyv0X9R2Oijhi3caB1xgGgEgclSQ==} dependencies: - magic-string: 0.30.0 + magic-string: 0.30.2 pathe: 1.1.1 - pretty-format: 27.5.1 + pretty-format: 29.6.2 dev: true - /@vitest/spy@0.32.2: - resolution: {integrity: sha512-Q/ZNILJ4ca/VzQbRM8ur3Si5Sardsh1HofatG9wsJY1RfEaw0XKP8IVax2lI1qnrk9YPuG9LA2LkZ0EI/3d4ug==} + /@vitest/spy@0.34.1: + resolution: {integrity: sha512-UT4WcI3EAPUNO8n6y9QoEqynGGEPmmRxC+cLzneFFXpmacivjHZsNbiKD88KUScv5DCHVDgdBsLD7O7s1enFcQ==} dependencies: tinyspy: 2.1.1 dev: true - /@vitest/utils@0.32.2: - resolution: {integrity: sha512-lnJ0T5i03j0IJaeW73hxe2AuVnZ/y1BhhCOuIcl9LIzXnbpXJT9Lrt6brwKHXLOiA7MZ6N5hSJjt0xE1dGNCzQ==} + /@vitest/utils@0.34.1: + resolution: {integrity: sha512-/ql9dsFi4iuEbiNcjNHQWXBum7aL8pyhxvfnD9gNtbjR9fUKAjxhj4AA3yfLXg6gJpMGGecvtF8Au2G9y3q47Q==} dependencies: diff-sequences: 29.4.3 loupe: 2.3.6 - pretty-format: 27.5.1 + pretty-format: 29.6.2 dev: true - /acorn-jsx@5.3.2(acorn@8.9.0): + /acorn-jsx@5.3.2(acorn@8.10.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.9.0 + acorn: 8.10.0 dev: true /acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} - /acorn@8.8.2: - resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} + /acorn@8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} hasBin: true + dev: true - /acorn@8.9.0: - resolution: {integrity: sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==} + /acorn@8.8.2: + resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} hasBin: true - dev: true /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -1612,6 +1447,7 @@ packages: engines: {node: '>=4'} dependencies: color-convert: 1.9.3 + dev: true /ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} @@ -1670,7 +1506,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 get-intrinsic: 1.2.1 is-string: 1.0.7 dev: true @@ -1680,13 +1516,24 @@ packages: engines: {node: '>=8'} dev: true + /array.prototype.findlastindex@1.2.2: + resolution: {integrity: sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + es-shim-unscopables: 1.0.0 + get-intrinsic: 1.2.1 + dev: true + /array.prototype.flat@1.3.1: resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 es-shim-unscopables: 1.0.0 dev: true @@ -1696,10 +1543,22 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 es-shim-unscopables: 1.0.0 dev: true + /arraybuffer.prototype.slice@1.0.1: + resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.2 + define-properties: 1.2.0 + get-intrinsic: 1.2.1 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 + dev: true + /arrify@1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} @@ -1740,10 +1599,6 @@ packages: engines: {node: '>=8'} dev: true - /blueimp-md5@2.19.0: - resolution: {integrity: sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==} - dev: true - /bplist-parser@0.2.0: resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} engines: {node: '>= 5.10.0'} @@ -1797,13 +1652,13 @@ packages: run-applescript: 5.0.0 dev: true - /bundle-require@4.0.1(esbuild@0.18.11): + /bundle-require@4.0.1(esbuild@0.18.18): resolution: {integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: esbuild: '>=0.17' dependencies: - esbuild: 0.18.11 + esbuild: 0.18.18 load-tsconfig: 0.2.5 dev: true @@ -1862,6 +1717,7 @@ packages: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 + dev: true /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -1871,6 +1727,11 @@ packages: supports-color: 7.2.0 dev: true + /chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: false + /chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} dev: true @@ -1936,6 +1797,7 @@ packages: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 + dev: true /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} @@ -1945,6 +1807,7 @@ packages: /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: true /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -1974,20 +1837,6 @@ packages: source-map: 0.6.1 dev: false - /concordance@5.0.4: - resolution: {integrity: sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==} - engines: {node: '>=10.18.0 <11 || >=12.14.0 <13 || >=14'} - dependencies: - date-time: 3.1.0 - esutils: 2.0.3 - fast-diff: 1.3.0 - js-string-escape: 1.0.1 - lodash: 4.17.21 - md5-hex: 3.0.1 - semver: 7.5.3 - well-known-symbols: 2.0.0 - dev: true - /convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} dev: true @@ -2041,13 +1890,6 @@ packages: resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} dev: true - /date-time@3.1.0: - resolution: {integrity: sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==} - engines: {node: '>=6'} - dependencies: - time-zone: 1.0.0 - dev: true - /debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: @@ -2109,7 +1951,7 @@ packages: dependencies: bundle-name: 3.0.0 default-browser-id: 3.0.0 - execa: 7.1.1 + execa: 7.2.0 titleize: 3.0.0 dev: true @@ -2189,6 +2031,22 @@ packages: /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + /effect@2.0.0-next.24(@effect/data@0.17.1)(@effect/io@0.38.0)(@effect/match@0.32.0)(@effect/stm@0.22.0)(@effect/stream@0.34.0): + resolution: {integrity: sha512-vPGoP5oLrc6TahWNcPWIMPYilVkJpmthv/pBTm+2FvSBYR9AcrzspUbpB2poMDaQ5pcKQTAMSVAmPpfAjssCTg==} + peerDependencies: + '@effect/data': '>=0.17.1 <0.18.0' + '@effect/io': '>=0.38.0 <0.39.0' + '@effect/match': '>=0.32.0 <0.33.0' + '@effect/stm': '>=0.22.0 <0.23.0' + '@effect/stream': '>=0.34.0 <0.35.0' + dependencies: + '@effect/data': 0.17.1 + '@effect/io': 0.38.0(@effect/data@0.17.1) + '@effect/match': 0.32.0(@effect/data@0.17.1)(@effect/schema@0.33.0) + '@effect/stm': 0.22.0(@effect/data@0.17.1)(@effect/io@0.38.0) + '@effect/stream': 0.34.0(@effect/data@0.17.1)(@effect/io@0.38.0) + dev: false + /electron-to-chromium@1.4.408: resolution: {integrity: sha512-vjeaj0u/UYnzA/CIdGXzzcxRLCqRwREYc9YfaWInjIEr7/XPttZ6ShpyqapchEy0S2r6LpLjDBTnNj7ZxnxJKg==} dev: true @@ -2260,6 +2118,51 @@ packages: which-typed-array: 1.1.9 dev: true + /es-abstract@1.22.1: + resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.1 + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + es-set-tostringtag: 2.0.1 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.5 + get-intrinsic: 1.2.1 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 + has: 1.0.3 + has-property-descriptors: 1.0.0 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + is-array-buffer: 3.0.2 + is-callable: 1.2.7 + is-negative-zero: 2.0.2 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + is-string: 1.0.7 + is-typed-array: 1.1.12 + is-weakref: 1.0.2 + object-inspect: 1.12.3 + object-keys: 1.1.1 + object.assign: 4.1.4 + regexp.prototype.flags: 1.5.0 + safe-array-concat: 1.0.0 + safe-regex-test: 1.0.0 + string.prototype.trim: 1.2.7 + string.prototype.trimend: 1.0.6 + string.prototype.trimstart: 1.0.6 + typed-array-buffer: 1.0.0 + typed-array-byte-length: 1.0.0 + typed-array-byte-offset: 1.0.0 + typed-array-length: 1.0.4 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.11 + dev: true + /es-set-tostringtag@2.0.1: resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} engines: {node: '>= 0.4'} @@ -2284,64 +2187,34 @@ packages: is-symbol: 1.0.4 dev: true - /esbuild@0.17.19: - resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} + /esbuild@0.18.18: + resolution: {integrity: sha512-UckDPWvdVJLNT0npk5AMTpVwGRQhS76rWFLmHwEtgNvWlR9sgVV1eyc/oeBtM86q9s8ABBLMmm0CwNxhVemOiw==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.17.19 - '@esbuild/android-arm64': 0.17.19 - '@esbuild/android-x64': 0.17.19 - '@esbuild/darwin-arm64': 0.17.19 - '@esbuild/darwin-x64': 0.17.19 - '@esbuild/freebsd-arm64': 0.17.19 - '@esbuild/freebsd-x64': 0.17.19 - '@esbuild/linux-arm': 0.17.19 - '@esbuild/linux-arm64': 0.17.19 - '@esbuild/linux-ia32': 0.17.19 - '@esbuild/linux-loong64': 0.17.19 - '@esbuild/linux-mips64el': 0.17.19 - '@esbuild/linux-ppc64': 0.17.19 - '@esbuild/linux-riscv64': 0.17.19 - '@esbuild/linux-s390x': 0.17.19 - '@esbuild/linux-x64': 0.17.19 - '@esbuild/netbsd-x64': 0.17.19 - '@esbuild/openbsd-x64': 0.17.19 - '@esbuild/sunos-x64': 0.17.19 - '@esbuild/win32-arm64': 0.17.19 - '@esbuild/win32-ia32': 0.17.19 - '@esbuild/win32-x64': 0.17.19 - dev: true - - /esbuild@0.18.11: - resolution: {integrity: sha512-i8u6mQF0JKJUlGR3OdFLKldJQMMs8OqM9Cc3UCi9XXziJ9WERM5bfkHaEAy0YAvPRMgqSW55W7xYn84XtEFTtA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.18.11 - '@esbuild/android-arm64': 0.18.11 - '@esbuild/android-x64': 0.18.11 - '@esbuild/darwin-arm64': 0.18.11 - '@esbuild/darwin-x64': 0.18.11 - '@esbuild/freebsd-arm64': 0.18.11 - '@esbuild/freebsd-x64': 0.18.11 - '@esbuild/linux-arm': 0.18.11 - '@esbuild/linux-arm64': 0.18.11 - '@esbuild/linux-ia32': 0.18.11 - '@esbuild/linux-loong64': 0.18.11 - '@esbuild/linux-mips64el': 0.18.11 - '@esbuild/linux-ppc64': 0.18.11 - '@esbuild/linux-riscv64': 0.18.11 - '@esbuild/linux-s390x': 0.18.11 - '@esbuild/linux-x64': 0.18.11 - '@esbuild/netbsd-x64': 0.18.11 - '@esbuild/openbsd-x64': 0.18.11 - '@esbuild/sunos-x64': 0.18.11 - '@esbuild/win32-arm64': 0.18.11 - '@esbuild/win32-ia32': 0.18.11 - '@esbuild/win32-x64': 0.18.11 + '@esbuild/android-arm': 0.18.18 + '@esbuild/android-arm64': 0.18.18 + '@esbuild/android-x64': 0.18.18 + '@esbuild/darwin-arm64': 0.18.18 + '@esbuild/darwin-x64': 0.18.18 + '@esbuild/freebsd-arm64': 0.18.18 + '@esbuild/freebsd-x64': 0.18.18 + '@esbuild/linux-arm': 0.18.18 + '@esbuild/linux-arm64': 0.18.18 + '@esbuild/linux-ia32': 0.18.18 + '@esbuild/linux-loong64': 0.18.18 + '@esbuild/linux-mips64el': 0.18.18 + '@esbuild/linux-ppc64': 0.18.18 + '@esbuild/linux-riscv64': 0.18.18 + '@esbuild/linux-s390x': 0.18.18 + '@esbuild/linux-x64': 0.18.18 + '@esbuild/netbsd-x64': 0.18.18 + '@esbuild/openbsd-x64': 0.18.18 + '@esbuild/sunos-x64': 0.18.18 + '@esbuild/win32-arm64': 0.18.18 + '@esbuild/win32-ia32': 0.18.18 + '@esbuild/win32-x64': 0.18.18 dev: true /escalade@3.1.1: @@ -2352,6 +2225,7 @@ packages: /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} + dev: true /escape-string-regexp@2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} @@ -2363,17 +2237,17 @@ packages: engines: {node: '>=10'} dev: true - /eslint-import-resolver-node@0.3.7: - resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} + /eslint-import-resolver-node@0.3.8: + resolution: {integrity: sha512-tEe+Pok22qIGaK3KoMP+N96GVDS66B/zreoVVmiavLvRUEmGRtvb4B8wO9jwnb8d2lvHtrkhZ7UD73dWBVnf/Q==} dependencies: debug: 3.2.7 - is-core-module: 2.12.1 - resolve: 1.22.2 + is-core-module: 2.13.0 + resolve: 1.22.4 transitivePeerDependencies: - supports-color dev: true - /eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.60.1)(eslint-plugin-import@2.27.5)(eslint@8.44.0): + /eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@6.2.1)(eslint-plugin-import@2.28.0)(eslint@8.46.0): resolution: {integrity: sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -2382,9 +2256,9 @@ packages: dependencies: debug: 4.3.4 enhanced-resolve: 5.14.1 - eslint: 8.44.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.60.1)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.44.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.60.1)(eslint-import-resolver-typescript@3.5.5)(eslint@8.44.0) + eslint: 8.46.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.2.1)(eslint-import-resolver-node@0.3.8)(eslint-import-resolver-typescript@3.5.5)(eslint@8.46.0) + eslint-plugin-import: 2.28.0(@typescript-eslint/parser@6.2.1)(eslint-import-resolver-typescript@3.5.5)(eslint@8.46.0) get-tsconfig: 4.5.0 globby: 13.1.4 is-core-module: 2.12.1 @@ -2397,7 +2271,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.60.1)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.44.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.2.1)(eslint-import-resolver-node@0.3.8)(eslint-import-resolver-typescript@3.5.5)(eslint@8.46.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -2418,11 +2292,11 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.60.1(eslint@8.44.0)(typescript@5.1.6) + '@typescript-eslint/parser': 6.2.1(eslint@8.46.0)(typescript@5.1.6) debug: 3.2.7 - eslint: 8.44.0 - eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.60.1)(eslint-plugin-import@2.27.5)(eslint@8.44.0) + eslint: 8.46.0 + eslint-import-resolver-node: 0.3.8 + eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@6.2.1)(eslint-plugin-import@2.28.0)(eslint@8.46.0) transitivePeerDependencies: - supports-color dev: true @@ -2447,23 +2321,23 @@ packages: - supports-color dev: true - /eslint-plugin-deprecation@1.4.1(eslint@8.44.0)(typescript@5.1.6): - resolution: {integrity: sha512-4vxTghWzxsBukPJVQupi6xlTuDc8Pyi1QlRCrFiLgwLPMJQW3cJCNaehJUKQqQFvuue5m4W27e179Y3Qjzeghg==} + /eslint-plugin-deprecation@1.5.0(eslint@8.46.0)(typescript@5.1.6): + resolution: {integrity: sha512-mRcssI/tLROueBQ6yf4LnnGTijbMsTCPIpbRbPj5R5wGYVCpk1zDmAS0SEkgcUDXOPc22qMNFR24Qw7vSPrlTA==} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 typescript: ^3.7.5 || ^4.0.0 || ^5.0.0 dependencies: - '@typescript-eslint/utils': 5.59.7(eslint@8.44.0)(typescript@5.1.6) - eslint: 8.44.0 - tslib: 2.5.2 + '@typescript-eslint/utils': 5.62.0(eslint@8.46.0)(typescript@5.1.6) + eslint: 8.46.0 + tslib: 2.6.1 tsutils: 3.21.0(typescript@5.1.6) typescript: 5.1.6 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.60.1)(eslint-import-resolver-typescript@3.5.5)(eslint@8.44.0): - resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} + /eslint-plugin-import@2.28.0(@typescript-eslint/parser@6.2.1)(eslint-import-resolver-typescript@3.5.5)(eslint@8.46.0): + resolution: {integrity: sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -2472,22 +2346,25 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.60.1(eslint@8.44.0)(typescript@5.1.6) + '@typescript-eslint/parser': 6.2.1(eslint@8.46.0)(typescript@5.1.6) array-includes: 3.1.6 + array.prototype.findlastindex: 1.2.2 array.prototype.flat: 1.3.1 array.prototype.flatmap: 1.3.1 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.44.0 - eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.60.1)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.44.0) + eslint: 8.46.0 + eslint-import-resolver-node: 0.3.8 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.2.1)(eslint-import-resolver-node@0.3.8)(eslint-import-resolver-typescript@3.5.5)(eslint@8.46.0) has: 1.0.3 - is-core-module: 2.12.1 + is-core-module: 2.13.0 is-glob: 4.0.3 minimatch: 3.1.2 + object.fromentries: 2.0.6 + object.groupby: 1.0.0 object.values: 1.1.6 - resolve: 1.22.2 - semver: 6.3.0 + resolve: 1.22.4 + semver: 6.3.1 tsconfig-paths: 3.14.2 transitivePeerDependencies: - eslint-import-resolver-typescript @@ -2495,21 +2372,21 @@ packages: - supports-color dev: true - /eslint-plugin-simple-import-sort@10.0.0(eslint@8.44.0): + /eslint-plugin-simple-import-sort@10.0.0(eslint@8.46.0): resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==} peerDependencies: eslint: '>=5.0.0' dependencies: - eslint: 8.44.0 + eslint: 8.46.0 dev: true - /eslint-plugin-sort-destructure-keys@1.5.0(eslint@8.44.0): + /eslint-plugin-sort-destructure-keys@1.5.0(eslint@8.46.0): resolution: {integrity: sha512-xGLyqHtbFXZNXQSvAiQ4ISBYokrbUywEhmaA50fKtSKgceCv5y3zjoNuZwcnajdM6q29Nxj+oXC9KcqfMsAPrg==} engines: {node: '>=6.0.0'} peerDependencies: eslint: 3 - 8 dependencies: - eslint: 8.44.0 + eslint: 8.46.0 natural-compare-lite: 1.4.0 dev: true @@ -2521,28 +2398,28 @@ packages: estraverse: 4.3.0 dev: true - /eslint-scope@7.2.0: - resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==} + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 dev: true - /eslint-visitor-keys@3.4.1: - resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} + /eslint-visitor-keys@3.4.2: + resolution: {integrity: sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.44.0: - resolution: {integrity: sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==} + /eslint@8.46.0: + resolution: {integrity: sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.44.0) - '@eslint-community/regexpp': 4.5.1 - '@eslint/eslintrc': 2.1.0 - '@eslint/js': 8.44.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0) + '@eslint-community/regexpp': 4.6.2 + '@eslint/eslintrc': 2.1.1 + '@eslint/js': 8.46.0 '@humanwhocodes/config-array': 0.11.10 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 @@ -2552,9 +2429,9 @@ packages: debug: 4.3.4 doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.0 - eslint-visitor-keys: 3.4.1 - espree: 9.6.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.2 + espree: 9.6.1 esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -2564,7 +2441,6 @@ packages: globals: 13.20.0 graphemer: 1.4.0 ignore: 5.2.4 - import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -2576,19 +2452,18 @@ packages: natural-compare: 1.4.0 optionator: 0.9.3 strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 text-table: 0.2.0 transitivePeerDependencies: - supports-color dev: true - /espree@9.6.0: - resolution: {integrity: sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==} + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.9.0 - acorn-jsx: 5.3.2(acorn@8.9.0) - eslint-visitor-keys: 3.4.1 + acorn: 8.10.0 + acorn-jsx: 5.3.2(acorn@8.10.0) + eslint-visitor-keys: 3.4.2 dev: true /esprima@4.0.1: @@ -2639,8 +2514,8 @@ packages: strip-final-newline: 2.0.0 dev: true - /execa@7.1.1: - resolution: {integrity: sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==} + /execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} dependencies: cross-spawn: 7.0.3 @@ -2693,8 +2568,8 @@ packages: tmp: 0.0.33 dev: true - /fast-check@3.10.0: - resolution: {integrity: sha512-I2FldZwnCbcY6iL+H0rp9m4D+O3PotuFu9FasWjMCzUedYHMP89/37JbSt6/n7Yq/IZmJDW0B2h30sPYdzrfzw==} + /fast-check@3.12.0: + resolution: {integrity: sha512-SqahE9mlL3+lhjJ39joMLwcj6F+24hfZdf/tchlNO8sHcTdrUUdA5P/ZbSFZM9Xpzs36XaneGwE0FWepm/zyOA==} engines: {node: '>=8.0.0'} dependencies: pure-rand: 6.0.2 @@ -2704,10 +2579,6 @@ packages: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true - /fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - dev: true - /fast-glob@3.2.12: resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} engines: {node: '>=8.6.0'} @@ -2728,6 +2599,18 @@ packages: glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 + dev: false + + /fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -2817,7 +2700,7 @@ packages: engines: {node: '>=14'} dependencies: cross-spawn: 7.0.3 - signal-exit: 4.0.2 + signal-exit: 4.1.0 /fp-ts@2.16.0: resolution: {integrity: sha512-bLq+KgbiXdTEoT1zcARrWEpa5z6A/8b7PcDW7Gef3NSisQ+VS7ll2Xbf1E+xsgik0rWub/8u0qP/iTTjj+PhxQ==} @@ -2933,16 +2816,16 @@ packages: is-glob: 4.0.3 dev: true - /glob@10.3.1: - resolution: {integrity: sha512-9BKYcEeIs7QwlCYs+Y3GBvqAMISufUS0i2ELd11zpZjxI5V9iyRj0HgzB5/cLf2NY4vcYBTYzJ7GIui7j/4DOw==} + /glob@10.3.3: + resolution: {integrity: sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==} engines: {node: '>=16 || 14 >=14.17'} hasBin: true dependencies: foreground-child: 3.1.1 - jackspeak: 2.2.1 - minimatch: 9.0.2 - minipass: 6.0.2 - path-scurry: 1.10.0 + jackspeak: 2.2.2 + minimatch: 9.0.3 + minipass: 7.0.2 + path-scurry: 1.10.1 /glob@7.1.6: resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} @@ -2991,7 +2874,7 @@ packages: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.3.0 + fast-glob: 3.3.1 ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 @@ -3057,6 +2940,7 @@ packages: /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} + dev: true /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} @@ -3234,6 +3118,12 @@ packages: has: 1.0.3 dev: true + /is-core-module@2.13.0: + resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} + dependencies: + has: 1.0.3 + dev: true + /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} @@ -3388,6 +3278,13 @@ packages: has-tostringtag: 1.0.0 dev: true + /is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.11 + dev: true + /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: @@ -3410,6 +3307,10 @@ packages: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} dev: false + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true + /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -3430,12 +3331,12 @@ packages: engines: {node: '>=8'} dev: true - /istanbul-lib-report@3.0.0: - resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} - engines: {node: '>=8'} + /istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} dependencies: istanbul-lib-coverage: 3.2.0 - make-dir: 3.1.0 + make-dir: 4.0.0 supports-color: 7.2.0 dev: true @@ -3450,16 +3351,16 @@ packages: - supports-color dev: true - /istanbul-reports@3.1.5: - resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} + /istanbul-reports@3.1.6: + resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} engines: {node: '>=8'} dependencies: html-escaper: 2.0.2 - istanbul-lib-report: 3.0.0 + istanbul-lib-report: 3.0.1 dev: true - /jackspeak@2.2.1: - resolution: {integrity: sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==} + /jackspeak@2.2.2: + resolution: {integrity: sha512-mgNtVv4vUuaKA97yxUHoA3+FkuhtxkjdXEWOyB/N76fjy0FjezEt34oy3epBtvCvS+7DyKwqCFWx/oJLV5+kCg==} engines: {node: '>=14'} dependencies: '@isaacs/cliui': 8.0.2 @@ -3516,11 +3417,6 @@ packages: engines: {node: '>=10'} dev: true - /js-string-escape@1.0.1: - resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==} - engines: {node: '>= 0.8'} - dev: true - /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true @@ -3735,18 +3631,18 @@ packages: yallist: 4.0.0 dev: true - /magic-string@0.30.0: - resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==} + /magic-string@0.30.2: + resolution: {integrity: sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==} engines: {node: '>=12'} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 dev: true - /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'} dependencies: - semver: 6.3.0 + semver: 7.5.4 dev: true /make-error@1.3.6: @@ -3790,13 +3686,6 @@ packages: resolution: {integrity: sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==} dev: false - /md5-hex@3.0.1: - resolution: {integrity: sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==} - engines: {node: '>=8'} - dependencies: - blueimp-md5: 2.19.0 - dev: true - /meow@6.1.1: resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} engines: {node: '>=8'} @@ -3857,8 +3746,8 @@ packages: brace-expansion: 2.0.1 dev: false - /minimatch@9.0.2: - resolution: {integrity: sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg==} + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 @@ -3875,8 +3764,8 @@ packages: /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - /minipass@6.0.2: - resolution: {integrity: sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==} + /minipass@7.0.2: + resolution: {integrity: sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==} engines: {node: '>=16 || 14 >=14.17'} /mixin-deep@1.3.2: @@ -3901,10 +3790,10 @@ packages: /mlly@1.4.0: resolution: {integrity: sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==} dependencies: - acorn: 8.9.0 + acorn: 8.10.0 pathe: 1.1.1 pkg-types: 1.0.3 - ufo: 1.1.2 + ufo: 1.2.0 dev: true /ms@2.1.2: @@ -3957,8 +3846,8 @@ packages: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.2 - semver: 5.7.1 + resolve: 1.22.4 + semver: 5.7.2 validate-npm-package-license: 3.0.4 dev: true @@ -4005,6 +3894,24 @@ packages: object-keys: 1.1.1 dev: true + /object.fromentries@2.0.6: + resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: true + + /object.groupby@1.0.0: + resolution: {integrity: sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + get-intrinsic: 1.2.1 + dev: true + /object.pick@1.3.0: resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} engines: {node: '>=0.10.0'} @@ -4018,7 +3925,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 dev: true /once@1.4.0: @@ -4168,12 +4075,12 @@ packages: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true - /path-scurry@1.10.0: - resolution: {integrity: sha512-tZFEaRQbMLjwrsmidsGJ6wDMv0iazJWk6SfIKnY4Xru8auXgmJkOBa5DUbYFcFD2Rzk2+KDlIiF0GVXNCbgC7g==} + /path-scurry@1.10.1: + resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} engines: {node: '>=16 || 14 >=14.17'} dependencies: lru-cache: 10.0.0 - minipass: 6.0.2 + minipass: 7.0.2 /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} @@ -4234,12 +4141,12 @@ packages: optional: true dependencies: lilconfig: 2.1.0 - ts-node: 10.9.1(@types/node@20.3.3)(typescript@5.1.6) + ts-node: 10.9.1(@types/node@20.4.8)(typescript@5.1.6) yaml: 2.3.1 dev: true - /postcss@8.4.24: - resolution: {integrity: sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==} + /postcss@8.4.27: + resolution: {integrity: sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.6 @@ -4277,13 +4184,13 @@ packages: react-is: 17.0.2 dev: true - /pretty-format@27.5.1: - resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /pretty-format@29.6.2: + resolution: {integrity: sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - ansi-regex: 5.0.1 + '@jest/schemas': 29.6.0 ansi-styles: 5.2.0 - react-is: 17.0.2 + react-is: 18.2.0 dev: true /process-nextick-args@2.0.1: @@ -4324,6 +4231,10 @@ packages: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} dev: true + /react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + dev: true + /read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} @@ -4431,11 +4342,11 @@ packages: engines: {node: '>=8'} dev: true - /resolve@1.22.2: - resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} + /resolve@1.22.4: + resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} hasBin: true dependencies: - is-core-module: 2.12.1 + is-core-module: 2.13.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: true @@ -4456,10 +4367,10 @@ packages: engines: {node: '>=14'} hasBin: true dependencies: - glob: 10.3.1 + glob: 10.3.3 - /rollup@3.26.0: - resolution: {integrity: sha512-YzJH0eunH2hr3knvF3i6IkLO/jTjAEwU4HoMUbQl4//Tnl3ou0e7P5SjxdDr8HQJdeUJShlbEHXrrnEHy1l7Yg==} + /rollup@3.27.2: + resolution: {integrity: sha512-YGwmHf7h2oUHkVBT248x0yt6vZkYQ3/rvE5iQuVBh3WO8GcJ6BNeOkpoX1yMHIiBm18EMLjBPIoUDkhgnyxGOQ==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: @@ -4478,6 +4389,16 @@ packages: dependencies: queue-microtask: 1.2.3 + /safe-array-concat@1.0.0: + resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true + /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: false @@ -4494,13 +4415,13 @@ packages: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: true - /semver@5.7.1: - resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} + /semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true dev: true - /semver@6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true dev: true @@ -4512,6 +4433,14 @@ packages: lru-cache: 6.0.0 dev: true + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true @@ -4561,8 +4490,8 @@ packages: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true - /signal-exit@4.0.2: - resolution: {integrity: sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==} + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} /slash@3.0.0: @@ -4766,14 +4695,14 @@ packages: engines: {node: '>=8'} dev: true - /strip-literal@1.0.1: - resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==} + /strip-literal@1.3.0: + resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} dependencies: - acorn: 8.9.0 + acorn: 8.10.0 dev: true - /sucrase@3.32.0: - resolution: {integrity: sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==} + /sucrase@3.34.0: + resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} engines: {node: '>=8'} hasBin: true dependencies: @@ -4791,6 +4720,7 @@ packages: engines: {node: '>=4'} dependencies: has-flag: 3.0.0 + dev: true /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} @@ -4855,17 +4785,12 @@ packages: xtend: 4.0.2 dev: false - /time-zone@1.0.0: - resolution: {integrity: sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==} - engines: {node: '>=4'} - dev: true - /tinybench@2.5.0: resolution: {integrity: sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==} dev: true - /tinypool@0.5.0: - resolution: {integrity: sha512-paHQtnrlS1QZYKF/GnLoOM/DN9fqaGOFbCbxzAhwniySnzl9Ebk8w73/dd34DAhe/obUbPAOldTyYXQZxnPBPQ==} + /tinypool@0.7.0: + resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==} engines: {node: '>=14.0.0'} dev: true @@ -4928,6 +4853,15 @@ packages: engines: {node: '>=8'} dev: true + /ts-api-utils@1.0.1(typescript@5.1.6): + resolution: {integrity: sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.1.6 + dev: true + /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true @@ -4939,7 +4873,7 @@ packages: code-block-writer: 12.0.0 dev: false - /ts-node@10.9.1(@types/node@20.3.3)(typescript@5.1.6): + /ts-node@10.9.1(@types/node@20.4.8)(typescript@5.1.6): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -4958,7 +4892,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.3.3 + '@types/node': 20.4.8 acorn: 8.8.2 acorn-walk: 8.2.0 arg: 4.1.3 @@ -4986,8 +4920,12 @@ packages: resolution: {integrity: sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==} dev: true - /tsup@7.1.0(ts-node@10.9.1)(typescript@5.1.6): - resolution: {integrity: sha512-mazl/GRAk70j8S43/AbSYXGgvRP54oQeX8Un4iZxzATHt0roW0t6HYDVZIXMw0ZQIpvr1nFMniIVnN5186lW7w==} + /tslib@2.6.1: + resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==} + dev: true + + /tsup@7.2.0(ts-node@10.9.1)(typescript@5.1.6): + resolution: {integrity: sha512-vDHlczXbgUvY3rWvqFEbSqmC1L7woozbzngMqTtL2PGBODTtWlRwGDDawhvWzr5c1QjKe4OAKqJGfE1xeXUvtQ==} engines: {node: '>=16.14'} hasBin: true peerDependencies: @@ -5002,19 +4940,19 @@ packages: typescript: optional: true dependencies: - bundle-require: 4.0.1(esbuild@0.18.11) + bundle-require: 4.0.1(esbuild@0.18.18) cac: 6.7.14 chokidar: 3.5.3 debug: 4.3.4 - esbuild: 0.18.11 + esbuild: 0.18.18 execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 postcss-load-config: 4.0.1(ts-node@10.9.1) resolve-from: 5.0.0 - rollup: 3.26.0 + rollup: 3.27.2 source-map: 0.8.0-beta.0 - sucrase: 3.32.0 + sucrase: 3.34.0 tree-kill: 1.2.2 typescript: 5.1.6 transitivePeerDependencies: @@ -5078,6 +5016,36 @@ packages: engines: {node: '>=8'} dev: true + /typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: true + /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: @@ -5095,8 +5063,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - /ufo@1.1.2: - resolution: {integrity: sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ==} + /ufo@1.2.0: + resolution: {integrity: sha512-RsPyTbqORDNDxqAdQPQBpgqhWle1VcTSou/FraClYlHf6TZnQcGslpLcAphNR+sQW4q5lLWLbOsRlh9j24baQg==} dev: true /unbox-primitive@1.0.2: @@ -5163,8 +5131,8 @@ packages: spdx-expression-parse: 3.0.1 dev: true - /vite-node@0.32.2(@types/node@20.3.3): - resolution: {integrity: sha512-dTQ1DCLwl2aEseov7cfQ+kDMNJpM1ebpyMMMwWzBvLbis8Nla/6c9WQcqpPssTwS6Rp/+U6KwlIj8Eapw4bLdA==} + /vite-node@0.34.1(@types/node@20.4.8): + resolution: {integrity: sha512-odAZAL9xFMuAg8aWd7nSPT+hU8u2r9gU3LRm9QKjxBEF2rRdWpMuqkrkjvyVQEdNFiBctqr2Gg4uJYizm5Le6w==} engines: {node: '>=v14.18.0'} hasBin: true dependencies: @@ -5173,10 +5141,11 @@ packages: mlly: 1.4.0 pathe: 1.1.1 picocolors: 1.0.0 - vite: 4.3.9(@types/node@20.3.3) + vite: 4.4.8(@types/node@20.4.8) transitivePeerDependencies: - '@types/node' - less + - lightningcss - sass - stylus - sugarss @@ -5184,13 +5153,14 @@ packages: - terser dev: true - /vite@4.3.9(@types/node@20.3.3): - resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} + /vite@4.4.8(@types/node@20.4.8): + resolution: {integrity: sha512-LONawOUUjxQridNWGQlNizfKH89qPigK36XhMI7COMGztz8KNY0JHim7/xDd71CZwGT4HtSRgI7Hy+RlhG0Gvg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: '@types/node': '>= 14' less: '*' + lightningcss: ^1.21.0 sass: '*' stylus: '*' sugarss: '*' @@ -5200,6 +5170,8 @@ packages: optional: true less: optional: true + lightningcss: + optional: true sass: optional: true stylus: @@ -5209,16 +5181,16 @@ packages: terser: optional: true dependencies: - '@types/node': 20.3.3 - esbuild: 0.17.19 - postcss: 8.4.24 - rollup: 3.26.0 + '@types/node': 20.4.8 + esbuild: 0.18.18 + postcss: 8.4.27 + rollup: 3.27.2 optionalDependencies: fsevents: 2.3.2 dev: true - /vitest@0.32.2: - resolution: {integrity: sha512-hU8GNNuQfwuQmqTLfiKcqEhZY72Zxb7nnN07koCUNmntNxbKQnVbeIS6sqUgR3eXSlbOpit8+/gr1KpqoMgWCQ==} + /vitest@0.34.1: + resolution: {integrity: sha512-G1PzuBEq9A75XSU88yO5G4vPT20UovbC/2osB2KEuV/FisSIIsw7m5y2xMdB7RsAGHAfg2lPmp2qKr3KWliVlQ==} engines: {node: '>=v14.18.0'} hasBin: true peerDependencies: @@ -5250,31 +5222,31 @@ packages: dependencies: '@types/chai': 4.3.5 '@types/chai-subset': 1.3.3 - '@types/node': 20.3.3 - '@vitest/expect': 0.32.2 - '@vitest/runner': 0.32.2 - '@vitest/snapshot': 0.32.2 - '@vitest/spy': 0.32.2 - '@vitest/utils': 0.32.2 - acorn: 8.9.0 + '@types/node': 20.4.8 + '@vitest/expect': 0.34.1 + '@vitest/runner': 0.34.1 + '@vitest/snapshot': 0.34.1 + '@vitest/spy': 0.34.1 + '@vitest/utils': 0.34.1 + acorn: 8.10.0 acorn-walk: 8.2.0 cac: 6.7.14 chai: 4.3.7 - concordance: 5.0.4 debug: 4.3.4 local-pkg: 0.4.3 - magic-string: 0.30.0 + magic-string: 0.30.2 pathe: 1.1.1 picocolors: 1.0.0 std-env: 3.3.3 - strip-literal: 1.0.1 + strip-literal: 1.3.0 tinybench: 2.5.0 - tinypool: 0.5.0 - vite: 4.3.9(@types/node@20.3.3) - vite-node: 0.32.2(@types/node@20.3.3) + tinypool: 0.7.0 + vite: 4.4.8(@types/node@20.4.8) + vite-node: 0.34.1(@types/node@20.4.8) why-is-node-running: 2.2.2 transitivePeerDependencies: - less + - lightningcss - sass - stylus - sugarss @@ -5296,11 +5268,6 @@ packages: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} dev: true - /well-known-symbols@2.0.0: - resolution: {integrity: sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==} - engines: {node: '>=6'} - dev: true - /whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: @@ -5338,6 +5305,17 @@ packages: path-exists: 4.0.0 dev: true + /which-typed-array@1.1.11: + resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + dev: true + /which-typed-array@1.1.9: resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} engines: {node: '>= 0.4'} diff --git a/scripts/copy-package-json.ts b/scripts/copy-package-json.ts index b1f1c63..e326067 100644 --- a/scripts/copy-package-json.ts +++ b/scripts/copy-package-json.ts @@ -1,15 +1,14 @@ -import { pipe } from "@effect/data/Function" -import * as ReadonlyRecord from "@effect/data/ReadonlyRecord" -import * as Effect from "@effect/io/Effect" +import { Effect, ReadonlyRecord } from "effect" import * as path from "node:path" import * as FileSystem from "../src/FileSystem" +const excludedPrefixes = ["@effect", "effect", "chalk"] + const excludeEffectPackages = (deps: Record): Record => { - return ReadonlyRecord.filter(deps, (_, k) => !k.startsWith("@effect")) + return ReadonlyRecord.filter(deps, (_, k) => !excludedPrefixes.some((_) => k.startsWith(_))) } -const read = pipe( - FileSystem.FileSystem, +const read = FileSystem.FileSystem.pipe( Effect.flatMap((fileSystem) => fileSystem.readJsonFile("package.json")), Effect.map((json: any) => ({ name: json.name, @@ -33,14 +32,13 @@ const read = pipe( const pathTo = path.join("dist", "package.json") const write = (pkg: object) => - pipe( + Effect.flatMap( FileSystem.FileSystem, - Effect.flatMap((fileSystem) => fileSystem.writeFile(pathTo, JSON.stringify(pkg, null, 2))) + (fileSystem) => fileSystem.writeFile(pathTo, JSON.stringify(pkg, null, 2)) ) -const program = pipe( - Effect.sync(() => console.log(`copying package.json to ${pathTo}...`)), - Effect.flatMap(() => read), +const program = Effect.sync(() => console.log(`copying package.json to ${pathTo}...`)).pipe( + Effect.zipRight(read), Effect.flatMap(write), Effect.provideLayer(FileSystem.FileSystemLive) ) diff --git a/src/ChildProcess.ts b/src/ChildProcess.ts index ca0a8c8..16acfed 100644 --- a/src/ChildProcess.ts +++ b/src/ChildProcess.ts @@ -1,11 +1,7 @@ /** * @since 1.0.0 */ -import * as Context from "@effect/data/Context" -import * as Data from "@effect/data/Data" -import { pipe } from "@effect/data/Function" -import * as Effect from "@effect/io/Effect" -import * as Layer from "@effect/io/Layer" +import { Context, Data, Effect, Layer } from "effect" import * as NodeChildProcess from "node:child_process" /** @@ -81,20 +77,22 @@ export const ChildProcessLive = Layer.succeed( ChildProcess, ChildProcess.of({ spawn: (command, executable) => - pipe( - Effect.tryCatch(() => + Effect.try({ + try: () => NodeChildProcess.spawnSync(command, [executable], { stdio: "pipe", encoding: "utf8" - }), (error) => + }), + catch: (error) => SpawnError({ command, args: [executable], error: error instanceof Error ? error : new Error(String(error)) - })), + }) + }).pipe( Effect.flatMap(({ status, stderr }) => status === 0 - ? Effect.unit() + ? Effect.unit : Effect.fail(ExecutionError({ command, stderr })) ) ) diff --git a/src/Config.ts b/src/Config.ts index 0315117..f8dde64 100644 --- a/src/Config.ts +++ b/src/Config.ts @@ -1,15 +1,10 @@ /** * @since 1.0.0 */ -import * as Context from "@effect/data/Context" -import * as Data from "@effect/data/Data" -import { pipe } from "@effect/data/Function" -import * as Option from "@effect/data/Option" -import * as Effect from "@effect/io/Effect" -import * as Layer from "@effect/io/Layer" import * as Schema from "@effect/schema/Schema" import * as TreeFormatter from "@effect/schema/TreeFormatter" import chalk from "chalk" +import { Context, Data, Effect, Layer, Option } from "effect" import * as NodePath from "node:path" import * as FileSystem from "./FileSystem" import * as Process from "./Process" @@ -83,11 +78,9 @@ const parseJsonFile = ( path: string, fileSystem: FileSystem.FileSystem ): Effect.Effect => - pipe( - fileSystem.readJsonFile(path), + fileSystem.readJsonFile(path).pipe( Effect.flatMap((content) => - pipe( - Schema.parseEither(schema)(content), + Schema.parse(schema)(content).pipe( Effect.mapError((e) => ConfigError({ message: TreeFormatter.formatErrors(e.errors) })) ) ) @@ -116,18 +109,18 @@ const loadConfig = ( ConfigError | FileSystem.ReadFileError | FileSystem.ParseJsonError, Option.Option> > => - Effect.ifEffect( - fileSystem.pathExists(path), - pipe( - Effect.logInfo(chalk.bold("Configuration file found")), + Effect.if(fileSystem.pathExists(path), { + onTrue: Effect.logInfo(chalk.bold("Configuration file found")).pipe( Effect.zipRight(parseJsonFile(PartialConfigSchema, path, fileSystem)), - Effect.map(Option.some) + Effect.asSome ), - pipe( - Effect.logInfo(chalk.bold("No configuration file detected, using default configuration")), - Effect.as(Option.none()) + onFalse: Effect.as( + Effect.logInfo( + chalk.bold("No configuration file detected, using default configuration") + ), + Option.none() ) - ) + }) /** * @category service @@ -151,11 +144,10 @@ export const ConfigLive = Layer.effect( const maybeConfig = yield* $(loadConfig(configPath, fileSystem)) return Config.of( - Option.match( - maybeConfig, - () => defaultConfig, - (loadedConfig) => ({ ...defaultConfig, ...loadedConfig }) - ) + Option.match(maybeConfig, { + onNone: () => defaultConfig, + onSome: (loadedConfig) => ({ ...defaultConfig, ...loadedConfig }) + }) ) }) ) diff --git a/src/Core.ts b/src/Core.ts index 6a4b6cb..d3b4e32 100644 --- a/src/Core.ts +++ b/src/Core.ts @@ -2,15 +2,8 @@ * @since 1.0.0 */ -import * as Data from "@effect/data/Data" -import { pipe } from "@effect/data/Function" -import * as ReadonlyArray from "@effect/data/ReadonlyArray" -import * as String from "@effect/data/String" -import * as Effect from "@effect/io/Effect" -import * as Layer from "@effect/io/Layer" -import * as Logger from "@effect/io/Logger" -import * as LogLevel from "@effect/io/Logger/Level" import chalk from "chalk" +import { Data, Effect, Layer, Logger, LoggerLevel, pipe, ReadonlyArray, String } from "effect" import * as NodePath from "path" import * as ChildProcess from "./ChildProcess" import * as Config from "./Config" @@ -27,19 +20,16 @@ import * as Process from "./Process" const join = (...paths: Array): string => NodePath.normalize(NodePath.join(...paths)) -const readFiles = pipe( - Effect.all(Config.Config, FileSystem.FileSystem), +const readFiles = Effect.all([Config.Config, FileSystem.FileSystem]).pipe( Effect.flatMap(([config, fileSystem]) => - pipe( - fileSystem.glob(join(config.srcDir, "**", "*.ts"), config.exclude), + fileSystem.glob(join(config.srcDir, "**", "*.ts"), config.exclude).pipe( Effect.tap((paths) => Effect.logInfo(chalk.bold(`${paths.length} module(s) found`))), Effect.flatMap( - Effect.forEachPar((path) => + Effect.forEach((path) => Effect.map( fileSystem.readFile(path), (content) => FileSystem.makeFile(path, content, false) - ) - ) + ), { concurrency: "inherit" }) ) ) ) @@ -52,16 +42,14 @@ const writeFile = ( FileSystem.ReadFileError | FileSystem.WriteFileError, void > => - pipe( - Effect.all(Config.Config, FileSystem.FileSystem, Process.Process), + Effect.all([Config.Config, FileSystem.FileSystem, Process.Process]).pipe( Effect.flatMap(([config, fileSystem, process]) => - pipe( - process.cwd, + process.cwd.pipe( Effect.map((cwd) => NodePath.relative(NodePath.join(cwd, config.outDir), file.path)), Effect.flatMap((fileName) => { - const overwrite = pipe( + const overwrite = Effect.flatMap( Effect.logDebug(`overwriting file ${chalk.black(fileName)}`), - Effect.flatMap(() => fileSystem.writeFile(file.path, file.content)) + () => fileSystem.writeFile(file.path, file.content) ) const skip = Effect.logDebug( @@ -70,11 +58,10 @@ const writeFile = ( const write = fileSystem.writeFile(file.path, file.content) - return Effect.ifEffect( - fileSystem.pathExists(file.path), - file.overwrite ? overwrite : skip, - write - ) + return Effect.if(fileSystem.pathExists(file.path), { + onTrue: file.overwrite ? overwrite : skip, + onFalse: write + }) }) ) ) @@ -102,8 +89,7 @@ export interface ParseError extends Data.Case { export const ParseError = Data.tagged("ParseError") const getModules = (files: ReadonlyArray) => - pipe( - Parser.parseFiles(files), + Parser.parseFiles(files).pipe( Effect.mapError((errors) => ParseError({ message: errors @@ -118,96 +104,81 @@ const getModules = (files: ReadonlyArray) => // ------------------------------------------------------------------------------------- const typeCheckExamples = (modules: ReadonlyArray) => - pipe( - getExampleFiles(modules), - Effect.flatMap(handleImports), - Effect.flatMap((examples) => - examples.length === 0 - ? cleanExamples - : pipe( - writeExamples(examples), - Effect.flatMap(() => writeTsConfigJson), - Effect.flatMap(() => spawnTsNode), - Effect.flatMap(() => cleanExamples) - ) + getExampleFiles(modules) + .pipe( + Effect.flatMap(handleImports), + Effect.flatMap((examples) => + examples.length === 0 + ? cleanExamples + : writeExamples(examples).pipe( + Effect.zipRight(writeTsConfigJson), + Effect.zipRight(spawnTsNode), + Effect.zipRight(cleanExamples) + ) + ) ) - ) - -const combineAllFiles = ReadonlyArray.getMonoid().combineAll const getExampleFiles = (modules: ReadonlyArray) => Effect.map(Config.Config, (config) => - pipe( - modules, - ReadonlyArray.flatMap((module) => { - const prefix = module.path.join("-") - - const getDocumentableExamples = (id: string) => - ( - documentable: Domain.Documentable - ): ReadonlyArray => - pipe( - documentable.examples, - ReadonlyArray.map((content, i) => - FileSystem.makeFile( - join( - config.outDir, - "examples", - `${prefix}-${id}-${documentable.name}-${i}.ts` - ), - `${content}\n`, - true - ) - ) + ReadonlyArray.flatMap(modules, (module) => { + const prefix = module.path.join("-") + + const getDocumentableExamples = (id: string) => + ( + documentable: Domain.Documentable + ): ReadonlyArray => + ReadonlyArray.map( + documentable.examples, + (content, i) => + FileSystem.makeFile( + join( + config.outDir, + "examples", + `${prefix}-${id}-${documentable.name}-${i}.ts` + ), + `${content}\n`, + true ) + ) - const moduleExamples = getDocumentableExamples("module")(module) - const methods = pipe( - module.classes, - ReadonlyArray.flatMap((c) => - combineAllFiles([ - pipe( - c.methods, - ReadonlyArray.flatMap( - getDocumentableExamples(`${c.name}-method`) - ) - ), - pipe( - c.staticMethods, - ReadonlyArray.flatMap( - getDocumentableExamples(`${c.name}-staticmethod`) - ) - ) - ]) + const moduleExamples = getDocumentableExamples("module")(module) + const methods = ReadonlyArray.flatMap(module.classes, (c) => + ReadonlyArray.flatten([ + ReadonlyArray.flatMap( + c.methods, + getDocumentableExamples(`${c.name}-method`) + ), + ReadonlyArray.flatMap( + c.staticMethods, + getDocumentableExamples(`${c.name}-staticmethod`) ) - ) - const interfaces = pipe( - module.interfaces, - ReadonlyArray.flatMap(getDocumentableExamples("interface")) - ) - const typeAliases = pipe( - module.typeAliases, - ReadonlyArray.flatMap(getDocumentableExamples("typealias")) - ) - const constants = pipe( - module.constants, - ReadonlyArray.flatMap(getDocumentableExamples("constant")) - ) - const functions = pipe( - module.functions, - ReadonlyArray.flatMap(getDocumentableExamples("function")) - ) + ])) + const interfaces = ReadonlyArray.flatMap( + module.interfaces, + getDocumentableExamples("interface") + ) + const typeAliases = ReadonlyArray.flatMap( + module.typeAliases, + getDocumentableExamples("typealias") + ) + const constants = ReadonlyArray.flatMap( + module.constants, + getDocumentableExamples("constant") + ) + const functions = ReadonlyArray.flatMap( + module.functions, + getDocumentableExamples("function") + ) - return combineAllFiles([ - moduleExamples, - methods, - interfaces, - typeAliases, - constants, - functions - ]) - }) - )) + return ReadonlyArray.flatten([ + moduleExamples, + methods, + interfaces, + typeAliases, + constants, + functions + ]) + })) const addAssertImport = (code: string): string => code.indexOf("assert.") !== -1 @@ -232,8 +203,7 @@ const replaceProjectName = (source: string) => const handleImports = (files: ReadonlyArray) => Effect.forEach(files, (file) => - pipe( - replaceProjectName(file.content), + replaceProjectName(file.content).pipe( Effect.map(addAssertImport), Effect.map((content) => FileSystem.makeFile(file.path, content, file.overwrite)) )) @@ -241,9 +211,10 @@ const handleImports = (files: ReadonlyArray) => const getExampleIndex = (examples: ReadonlyArray) => { const content = pipe( examples, - ReadonlyArray.combineMap(String.Monoid)( - (example) => `import './${NodePath.basename(example.path, ".ts")}'\n` - ) + ReadonlyArray.map( + (example) => `import './${NodePath.basename(example.path, ".ts")}'` + ), + ReadonlyArray.join("\n") ) return Effect.map(Config.Config, (config) => FileSystem.makeFile( @@ -254,16 +225,14 @@ const getExampleIndex = (examples: ReadonlyArray) => { } const cleanExamples = Effect.flatMap( - Effect.all(Config.Config, FileSystem.FileSystem), + Effect.all([Config.Config, FileSystem.FileSystem]), ([config, fileSystem]) => fileSystem.removeFile(join(config.outDir, "examples")) ) -const spawnTsNode = pipe( - Effect.logDebug("Type checking examples..."), - Effect.flatMap(() => Effect.all(ChildProcess.ChildProcess, Config.Config, Process.Process)), +const spawnTsNode = Effect.logDebug("Type checking examples...").pipe( + Effect.flatMap(() => Effect.all([ChildProcess.ChildProcess, Config.Config, Process.Process])), Effect.flatMap(([childProcess, config, process]) => - pipe( - Effect.all([process.cwd, process.platform]), + Effect.all([process.cwd, process.platform]).pipe( Effect.flatMap(([cwd, platform]) => { const command = platform === "win32" ? "ts-node.cmd" : "ts-node" const executable = join(cwd, config.outDir, "examples", "index.ts") @@ -275,33 +244,24 @@ const spawnTsNode = pipe( const writeFiles = ( files: ReadonlyArray -) => Effect.forEachDiscard(files, writeFile) +) => Effect.forEach(files, writeFile, { discard: true }) const writeExamples = (examples: ReadonlyArray) => - pipe( - Effect.logDebug("Writing examples..."), + Effect.logDebug("Writing examples...").pipe( Effect.flatMap(() => getExampleIndex(examples)), Effect.map((index) => pipe(examples, ReadonlyArray.prepend(index))), Effect.flatMap(writeFiles) ) -const writeTsConfigJson = pipe( - Effect.logDebug("Writing examples tsconfig..."), - Effect.flatMap(() => Effect.all(Config.Config, Process.Process)), +const writeTsConfigJson = Effect.logDebug("Writing examples tsconfig...").pipe( + Effect.flatMap(() => Effect.all([Config.Config, Process.Process])), Effect.flatMap(([config, process]) => - pipe( - process.cwd, + process.cwd.pipe( Effect.flatMap((cwd) => writeFile( FileSystem.makeFile( join(cwd, config.outDir, "examples", "tsconfig.json"), - JSON.stringify( - { - compilerOptions: config.examplesCompilerOptions - }, - null, - 2 - ), + JSON.stringify({ compilerOptions: config.examplesCompilerOptions }, null, 2), true ) ) @@ -315,8 +275,7 @@ const writeTsConfigJson = pipe( // ------------------------------------------------------------------------------------- const getMarkdown = (modules: ReadonlyArray) => - pipe( - Effect.Do(), + Effect.Do.pipe( Effect.bind("home", () => getHome), Effect.bind("index", () => getModulesIndex), Effect.bind("yml", () => getConfigYML), @@ -328,11 +287,9 @@ const getMarkdown = (modules: ReadonlyArray) => ) ) -const getHome = pipe( - Effect.all(Config.Config, Process.Process), +const getHome = Effect.all([Config.Config, Process.Process]).pipe( Effect.flatMap(([config, process]) => - pipe( - process.cwd, + process.cwd.pipe( Effect.map((cwd) => FileSystem.makeFile( join(cwd, config.outDir, "index.md"), @@ -350,34 +307,34 @@ const getHome = pipe( ) ) -const getModulesIndex = pipe( - Effect.all(Config.Config, Process.Process), +const getModulesIndex = Effect.all([Config.Config, Process.Process]).pipe( Effect.flatMap(([config, process]) => - pipe( - process.cwd, - Effect.map((cwd) => - FileSystem.makeFile( - join(cwd, config.outDir, "modules", "index.md"), - String.stripMargin( - `|--- + process.cwd + .pipe( + Effect.map((cwd) => + FileSystem.makeFile( + join(cwd, config.outDir, "modules", "index.md"), + String.stripMargin( + `|--- |title: Modules |has_children: true |permalink: /docs/modules |nav_order: 2 |--- |` - ), - false + ), + false + ) ) ) - ) ) ) const replace = ( searchValue: string | RegExp, replaceValue: string -): ((s: string) => string) => (s) => s.replace(searchValue, replaceValue) +): (s: string) => string => +(s) => s.replace(searchValue, replaceValue) const resolveConfigYML = ( previousContent: string, @@ -398,24 +355,21 @@ const getHomepageNavigationHeader = (config: Config.Config): string => { return isGitHub ? config.projectName + " on GitHub" : "Homepage" } -const getConfigYML = pipe( - Effect.all(Config.Config, FileSystem.FileSystem, Process.Process), +const getConfigYML = Effect.all([Config.Config, FileSystem.FileSystem, Process.Process]).pipe( Effect.flatMap(([config, fileSystem, process]) => Effect.flatMap(process.cwd, (cwd) => { const filePath = join(cwd, config.outDir, "_config.yml") - return pipe( - fileSystem.pathExists(filePath), + return fileSystem.pathExists(filePath).pipe( Effect.flatMap((exists) => exists - ? pipe( + ? Effect.map( fileSystem.readFile(filePath), - Effect.map((content) => + (content) => FileSystem.makeFile( filePath, resolveConfigYML(content, config), true ) - ) ) : Effect.succeed( FileSystem.makeFile( @@ -449,21 +403,20 @@ const getMarkdownOutputPath = (module: Domain.Module) => )) const getModuleMarkdownFiles = (modules: ReadonlyArray) => - Effect.forEachWithIndex(modules, (module, order) => - pipe( - Effect.Do(), - Effect.bind("outputPath", () => getMarkdownOutputPath(module)), - Effect.bind("content", () => Effect.succeed(printModule(module, order + 1))), - Effect.map(({ content, outputPath }) => FileSystem.makeFile(outputPath, content, true)) - )) + Effect.forEach(modules, (module, order) => + Effect.Do + .pipe( + Effect.bind("outputPath", () => getMarkdownOutputPath(module)), + Effect.bind("content", () => Effect.succeed(printModule(module, order + 1))), + Effect.map(({ content, outputPath }) => FileSystem.makeFile(outputPath, content, true)) + )) // ------------------------------------------------------------------------------------- // writeMarkdown // ------------------------------------------------------------------------------------- const writeMarkdown = (files: ReadonlyArray) => - pipe( - Effect.map(Config.Config, (config) => join(config.outDir, "**/*.ts.md")), + Effect.map(Config.Config, (config) => join(config.outDir, "**/*.ts.md")).pipe( Effect.tap((pattern) => Effect.logDebug(`deleting ${chalk.black(pattern)}`)), Effect.flatMap((pattern) => Effect.flatMap(FileSystem.FileSystem, (fileSystem) => fileSystem.removeFile(pattern)) @@ -471,8 +424,7 @@ const writeMarkdown = (files: ReadonlyArray) => Effect.flatMap(() => writeFiles(files)) ) -const MainLayer = pipe( - Logger.replace(Logger.defaultLogger, SimpleLogger), +const MainLayer = Logger.replace(Logger.defaultLogger, SimpleLogger).pipe( Layer.merge(ChildProcess.ChildProcessLive), Layer.merge(FileSystem.FileSystemLive), Layer.merge(Process.ProcessLive), @@ -483,8 +435,7 @@ const MainLayer = pipe( * @category main * @since 1.0.0 */ -export const main: Effect.Effect = pipe( - Effect.logInfo("reading modules..."), +export const main: Effect.Effect = Effect.logInfo("reading modules...").pipe( Effect.zipRight(readFiles), Effect.zipLeft(Effect.logInfo("parsing modules...")), Effect.flatMap(getModules), @@ -495,7 +446,7 @@ export const main: Effect.Effect = pipe( Effect.zipLeft(Effect.logInfo("writing markdown files...")), Effect.flatMap(writeMarkdown), Effect.zipLeft(Effect.logInfo(chalk.bold.green("Docs generation succeeded!"))), - Logger.withMinimumLogLevel(LogLevel.Debug), + Logger.withMinimumLogLevel(LoggerLevel.Debug), Effect.provideLayer(MainLayer), Effect.catchTags({ // Configuration errors diff --git a/src/Domain.ts b/src/Domain.ts index 69aa8da..cfb8c5f 100644 --- a/src/Domain.ts +++ b/src/Domain.ts @@ -1,10 +1,8 @@ /** * @since 1.0.0 */ - -import type * as Option from "@effect/data/Option" -import * as String from "@effect/data/String" -import * as order from "@effect/data/typeclass/Order" +import { Order as order, String } from "effect" +import type { Option } from "effect" /** * @category model @@ -272,7 +270,7 @@ export const createExport = ( * @category instances * @since 1.0.0 */ -export const Order: order.Order = order.contramap( +export const Order: order.Order = order.mapInput( String.Order, (module: Module) => module.path.join("/").toLowerCase() ) diff --git a/src/FileSystem.ts b/src/FileSystem.ts index de9d318..c0c2871 100644 --- a/src/FileSystem.ts +++ b/src/FileSystem.ts @@ -1,10 +1,7 @@ /** * @since 1.0.0 */ -import * as Context from "@effect/data/Context" -import * as Data from "@effect/data/Data" -import * as Effect from "@effect/io/Effect" -import * as Layer from "@effect/io/Layer" +import { Context, Data, Effect, Layer } from "effect" import * as NodeFS from "fs-extra" import * as Glob from "glob" import * as Rimraf from "rimraf" @@ -169,33 +166,33 @@ export const FileSystemLive = Layer.effect( path: string ): Effect.Effect => Effect.flatMap(readFile(path), (content) => - Effect.tryCatch( - () => JSON.parse(content), - (error) => + Effect.try({ + try: () => JSON.parse(content), + catch: (error) => ParseJsonError({ content, error: error instanceof Error ? error : new Error(String(error)) }) - )) + })) const writeFile = (path: string, content: string): Effect.Effect => Effect.async((resume) => NodeFS.outputFile(path, content, "utf8", (error) => { if (error) { resume(Effect.fail(WriteFileError({ path, error }))) } else { - resume(Effect.unit()) + resume(Effect.unit) } }) ) const removeFile = (path: string): Effect.Effect => - Effect.tryCatchPromise( - () => Rimraf.rimraf(path), - (error) => + Effect.tryPromise({ + try: () => Rimraf.rimraf(path), + catch: (error) => RemoveFileError({ error: error instanceof Error ? error : new Error(String(error)), path }) - ) + }) const pathExists = (path: string): Effect.Effect => Effect.async((resume) => @@ -211,15 +208,15 @@ export const FileSystemLive = Layer.effect( pattern: string, exclude: Array = [] ): Effect.Effect> => - Effect.tryCatchPromise( - () => Glob.glob(pattern, { ignore: exclude, withFileTypes: false }), - (error) => + Effect.tryPromise({ + try: () => Glob.glob(pattern, { ignore: exclude, withFileTypes: false }), + catch: (error) => GlobError({ error: error instanceof Error ? error : new Error(String(error)), exclude, pattern }) - ) + }) return FileSystem.of({ readFile, readJsonFile, diff --git a/src/Logger.ts b/src/Logger.ts index f3b4f35..e3cef5e 100644 --- a/src/Logger.ts +++ b/src/Logger.ts @@ -1,14 +1,14 @@ /** * @since 1.0.0 */ -import * as Logger from "@effect/io/Logger" import chalk from "chalk" +import { Logger } from "effect" /** * @category logging * @since 1.0.0 */ -export const SimpleLogger = Logger.make((_, logLevel, message) => { +export const SimpleLogger = Logger.make(({ logLevel, message }) => { if (logLevel._tag === "Debug") { globalThis.console.log(chalk.gray(`[${logLevel.label}] ${message}`)) } else { diff --git a/src/Markdown.ts b/src/Markdown.ts index f148498..0f06252 100644 --- a/src/Markdown.ts +++ b/src/Markdown.ts @@ -1,12 +1,7 @@ /** * @since 1.0.0 */ -import { pipe } from "@effect/data/Function" -import * as Option from "@effect/data/Option" -import * as ReadonlyArray from "@effect/data/ReadonlyArray" -import * as ReadonlyRecord from "@effect/data/ReadonlyRecord" -import * as String from "@effect/data/String" -import * as Order from "@effect/data/typeclass/Order" +import { Option, Order, pipe, ReadonlyArray, ReadonlyRecord, String } from "effect" import * as Prettier from "prettier" import type * as Domain from "./Domain" @@ -30,8 +25,8 @@ const paragraph = (...content: ReadonlyArray) => "\n" + content.join("") const strikethrough = (content: string) => `~~${content}~~` -const createHeader = (level: number) => - (content: string): string => "#".repeat(level) + " " + content + "\n\n" +const createHeader = (level: number) => (content: string): string => + "#".repeat(level) + " " + content + "\n\n" const h1 = createHeader(1) @@ -39,20 +34,19 @@ const h2 = createHeader(2) const h3 = createHeader(3) -const getSince: (v: Option.Option) => string = Option.match( - () => "", - (v) => paragraph(`Added in v${v}`) -) +const getSince: (v: Option.Option) => string = Option.match({ + onNone: () => "", + onSome: (v) => paragraph(`Added in v${v}`) +}) const getTitle = (s: string, deprecated: boolean, type?: string): string => { const name = s.trim() === "hasOwnProperty" ? `${s} (function)` : s const title = deprecated ? strikethrough(name) : name - return pipe( - Option.fromNullable(type), - Option.match( - () => title, - (t) => title + ` ${t}` - ) + return Option.fromNullable(type).pipe( + Option.match({ + onNone: () => title, + onSome: (t) => title + ` ${t}` + }) ) } @@ -209,7 +203,7 @@ export const fromPrintable = (p: Printable): string => { } const getPrintables = (module: Domain.Module): ReadonlyArray => - ReadonlyArray.getMonoid().combineAll([ + ReadonlyArray.flatten([ module.classes, module.constants, module.exports, @@ -231,15 +225,10 @@ export const printModule = (module: Domain.Module, order: number): string => { const content = pipe( getPrintables(module), - ReadonlyArray.groupBy(({ category }) => - pipe( - category, - Option.getOrElse(() => DEFAULT_CATEGORY) - ) - ), + ReadonlyArray.groupBy(({ category }) => Option.getOrElse(category, () => DEFAULT_CATEGORY)), ReadonlyRecord.toEntries, ReadonlyArray.sort( - Order.contramap(String.Order, ([category]: [string, unknown]) => category) + Order.mapInput(String.Order, ([category]: [string, unknown]) => category) ), ReadonlyArray.map(([category, printables]) => [ @@ -247,7 +236,7 @@ export const printModule = (module: Domain.Module, order: number): string => { ...pipe( printables, ReadonlyArray.sort( - Order.contramap( + Order.mapInput( String.Order, (printable: Printable) => printable.name ) diff --git a/src/Parser.ts b/src/Parser.ts index cdae72a..69b7993 100644 --- a/src/Parser.ts +++ b/src/Parser.ts @@ -1,20 +1,20 @@ /** * @since 1.0.0 */ -import * as Boolean from "@effect/data/Boolean" -import * as Context from "@effect/data/Context" -import * as Either from "@effect/data/Either" -import { flow, pipe } from "@effect/data/Function" -import * as Option from "@effect/data/Option" -import type { Predicate } from "@effect/data/Predicate" -import { not } from "@effect/data/Predicate" -import * as ReadonlyArray from "@effect/data/ReadonlyArray" -import * as ReadonlyRecord from "@effect/data/ReadonlyRecord" -import * as String from "@effect/data/String" -import * as Order from "@effect/data/typeclass/Order" -import * as Effect from "@effect/io/Effect" import chalk from "chalk" import * as doctrine from "doctrine" +import { + Context, + Effect, + Option, + Order, + pipe, + Predicate, + ReadonlyArray, + ReadonlyRecord, + String +} from "effect" +import { flow } from "effect/Function" import * as NodePath from "node:path" import * as ast from "ts-morph" import * as Config from "./Config" @@ -59,15 +59,15 @@ const createCommentInfo = ( category }) -const every = (predicates: ReadonlyArray>) => - (a: A): boolean => predicates.every((p) => p(a)) +const every = (predicates: ReadonlyArray>) => (a: A): boolean => + predicates.every((p) => p(a)) -const some = (predicates: ReadonlyArray>) => - (a: A): boolean => predicates.some((p) => p(a)) +const some = (predicates: ReadonlyArray>) => (a: A): boolean => + predicates.some((p) => p(a)) const byName = pipe( String.Order, - Order.contramap(({ name }: { name: string }) => name) + Order.mapInput(({ name }: { name: string }) => name) ) const sortModules = ReadonlyArray.sort(Domain.Order) @@ -79,19 +79,19 @@ const isNonEmptyString = (s: string) => s.length > 0 */ export const stripImportTypes = (s: string): string => s.replace(/import\("((?!").)*"\)./g, "") -const getJSDocText: (jsdocs: ReadonlyArray) => string = ReadonlyArray.matchRight( - () => "", - (_, last) => last.getText() -) +const getJSDocText: (jsdocs: ReadonlyArray) => string = ReadonlyArray.matchRight({ + onEmpty: () => "", + onNonEmpty: (_, last) => last.getText() +}) -const hasTag = (tag: string) => - (comment: Comment) => pipe(comment.tags, ReadonlyRecord.get(tag), Option.isSome) +const hasTag = (tag: string) => (comment: Comment) => + pipe(comment.tags, ReadonlyRecord.get(tag), Option.isSome) const hasInternalTag = hasTag("internal") const hasIgnoreTag = hasTag("ignore") -const shouldIgnore: Predicate = some([hasInternalTag, hasIgnoreTag]) +const shouldIgnore: Predicate.Predicate = some([hasInternalTag, hasIgnoreTag]) const isVariableDeclarationList = ( u: ast.VariableDeclarationList | ast.CatchClause @@ -129,18 +129,17 @@ const getMissingTagError = ( const getSinceTag = (name: string, comment: Comment) => pipe( - Effect.all(Config.Config, Source), + Effect.all([Config.Config, Source]), Effect.flatMap(([config, source]) => pipe( comment.tags, ReadonlyRecord.get("since"), Option.flatMap(ReadonlyArray.headNonEmpty), - Option.match( - () => - config.enforceVersion - ? Either.left(getMissingTagError("@since", source.path, name)) - : Either.right(Option.none()), - (since) => Either.right(Option.some(since)) + Effect.asSome, + Effect.catchAll(() => + config.enforceVersion + ? Effect.fail(getMissingTagError("@since", source.path, name)) + : Effect.succeed(Option.none()) ) ) ) @@ -152,59 +151,51 @@ const getCategoryTag = (name: string, comment: Comment) => comment.tags, ReadonlyRecord.get("category"), Option.flatMap(ReadonlyArray.headNonEmpty), - Either.liftPredicate( - not( - every([ - Option.isNone, - () => ReadonlyRecord.has(comment.tags, "category") - ]) - ), - () => getMissingTagError("@category", source.path, name) + Effect.asSome, + Effect.catchAll(() => + ReadonlyRecord.has(comment.tags, "category") + ? Effect.fail(getMissingTagError("@category", source.path, name)) + : Effect.succeed(Option.none()) ) )) const getDescription = (name: string, comment: Comment) => pipe( - Effect.all(Config.Config, Source), + Effect.all([Config.Config, Source]), Effect.flatMap(([config, source]) => pipe( comment.description, - Option.match( - () => + Option.match({ + onNone: () => config.enforceDescriptions - ? Either.left(getMissingError("description", source.path, name)) - : Either.right(Option.none()), - (description) => Either.right(Option.some(description)) - ) + ? Effect.fail(getMissingError("description", source.path, name)) + : Effect.succeed(Option.none()), + onSome: (description) => Effect.succeed(Option.some(description)) + }) ) ) ) const getExamples = (name: string, comment: Comment, isModule: boolean) => pipe( - Effect.all(Config.Config, Source), + Effect.all([Config.Config, Source]), Effect.flatMap(([config, source]) => pipe( comment.tags, ReadonlyRecord.get("example"), Option.map(ReadonlyArray.compact), - Option.match( - () => - Boolean.MonoidEvery.combineAll([ - config.enforceExamples, - !isModule - ]) - ? Either.left(getMissingTagError("@example", source.path, name)) - : Either.right([]), - (examples) => - Boolean.MonoidEvery.combineAll([ - config.enforceExamples, - ReadonlyArray.isEmptyArray(examples), - !isModule - ]) - ? Either.left(getMissingTagError("@example", source.path, name)) - : Either.right(examples.slice()) - ) + Option.match({ + onNone: () => + config.enforceExamples && !isModule + ? Effect.fail(getMissingTagError("@example", source.path, name)) + : Effect.succeed([]), + onSome: (examples) => + config.enforceExamples && + ReadonlyArray.isEmptyArray(examples) && + !isModule + ? Effect.fail(getMissingTagError("@example", source.path, name)) + : Effect.succeed(examples) + }) ) ) ) @@ -212,29 +203,28 @@ const getExamples = (name: string, comment: Comment, isModule: boolean) => /** * @internal */ -export const getCommentInfo = (name: string, isModule = false) => - (text: string) => - pipe( - Effect.Do(), - Effect.bind("comment", () => Either.right(parseComment(text))), - Effect.bind("since", ({ comment }) => getSinceTag(name, comment)), - Effect.bind("category", ({ comment }) => getCategoryTag(name, comment)), - Effect.bind("description", ({ comment }) => getDescription(name, comment)), - Effect.bind("examples", ({ comment }) => getExamples(name, comment, isModule)), - Effect.bind("deprecated", ({ comment }) => - Either.right( - pipe(comment.tags, ReadonlyRecord.get("deprecated"), Option.isSome) - )), - Effect.map(({ category, deprecated, description, examples, since }) => { - return createCommentInfo( - description, - since, - deprecated, - examples, - category - ) - }) - ) +export const getCommentInfo = (name: string, isModule = false) => (text: string) => + pipe( + Effect.Do, + Effect.let("comment", () => parseComment(text)), + Effect.bind("since", ({ comment }) => getSinceTag(name, comment)), + Effect.bind("category", ({ comment }) => getCategoryTag(name, comment)), + Effect.bind("description", ({ comment }) => getDescription(name, comment)), + Effect.bind("examples", ({ comment }) => getExamples(name, comment, isModule)), + Effect.bind("deprecated", ({ comment }) => + Effect.succeed( + pipe(comment.tags, ReadonlyRecord.get("deprecated"), Option.isSome) + )), + Effect.map(({ category, deprecated, description, examples, since }) => { + return createCommentInfo( + description, + since, + deprecated, + examples, + category + ) + }) + ) /** * @internal @@ -299,7 +289,7 @@ export const parseInterfaces = pipe( (id) => pipe( id.getJsDocs(), - not(flow(getJSDocText, parseComment, shouldIgnore)) + Predicate.not(flow(getJSDocText, parseComment, shouldIgnore)) ) ]) ) @@ -323,15 +313,15 @@ const getFunctionDeclarationSignature = ( const text = f.getText() return pipe( Option.fromNullable(f.compilerNode.body), - Option.match( - () => text.replace("export function ", "export declare function "), - (body) => { + Option.match({ + onNone: () => text.replace("export function ", "export declare function "), + onSome: (body) => { const end = body.getStart() - f.getStart() - 1 return text .substring(0, end) .replace("export function ", "export declare function ") } - ) + }) ) } @@ -340,10 +330,10 @@ const getFunctionDeclarationJSDocs = ( ): Array => pipe( fd.getOverloads(), - ReadonlyArray.matchLeft( - () => fd.getJsDocs(), - (firstOverload) => firstOverload.getJsDocs() - ) + ReadonlyArray.matchLeft({ + onEmpty: () => fd.getJsDocs(), + onNonEmpty: (firstOverload) => firstOverload.getJsDocs() + }) ) const parseFunctionDeclaration = (fd: ast.FunctionDeclaration) => @@ -352,7 +342,7 @@ const parseFunctionDeclaration = (fd: ast.FunctionDeclaration) => pipe( Option.fromNullable(fd.getName()), Option.flatMap(Option.liftPredicate((name) => name.length > 0)), - Option.toEither( + Effect.mapError( () => `Missing function name in module ${source.path.join("/")}` ) )), @@ -363,14 +353,14 @@ const parseFunctionDeclaration = (fd: ast.FunctionDeclaration) => Effect.map((info) => { const signatures = pipe( fd.getOverloads(), - ReadonlyArray.matchRight( - () => [getFunctionDeclarationSignature(fd)], - (init, last) => + ReadonlyArray.matchRight({ + onEmpty: () => [getFunctionDeclarationSignature(fd)], + onNonEmpty: (init, last) => pipe( init.map(getFunctionDeclarationSignature), ReadonlyArray.append(getFunctionDeclarationSignature(last)) ) - ) + }) ) return Domain.createFunction( Domain.createDocumentable( @@ -422,7 +412,7 @@ const getFunctionDeclarations = pipe( ReadonlyArray.filter( every([ (fd) => fd.isExported(), - not( + Predicate.not( flow( getFunctionDeclarationJSDocs, getJSDocText, @@ -455,7 +445,7 @@ const getFunctionDeclarations = pipe( ( vd.getParent().getParent() as ast.VariableStatement ).getJsDocs(), - not(flow(getJSDocText, parseComment, shouldIgnore)) + Predicate.not(flow(getJSDocText, parseComment, shouldIgnore)) ), () => ( @@ -474,7 +464,7 @@ const getFunctionDeclarations = pipe( * @since 1.0.0 */ export const parseFunctions = pipe( - Effect.Do(), + Effect.Do, Effect.bind("getFunctionDeclarations", () => getFunctionDeclarations), Effect.bind("functionDeclarations", ({ getFunctionDeclarations }) => pipe( @@ -533,7 +523,7 @@ export const parseTypeAliases = pipe( (alias) => pipe( alias.getJsDocs(), - not(flow(getJSDocText, parseComment, shouldIgnore)) + Predicate.not(flow(getJSDocText, parseComment, shouldIgnore)) ) ]) ) @@ -592,7 +582,7 @@ export const parseConstants = pipe( Option.fromNullable, Option.flatMap( Option.liftPredicate( - not(ast.Node.isFunctionLikeDeclaration) + Predicate.not(ast.Node.isFunctionLikeDeclaration) ) ), Option.isSome @@ -602,7 +592,7 @@ export const parseConstants = pipe( ( vd.getParent().getParent() as ast.VariableStatement ).getJsDocs(), - not(flow(getJSDocText, parseComment, shouldIgnore)) + Predicate.not(flow(getJSDocText, parseComment, shouldIgnore)) ), () => ( @@ -628,7 +618,7 @@ export const parseConstants = pipe( const parseExportSpecifier = (es: ast.ExportSpecifier) => Effect.flatMap(Source, (source) => pipe( - Effect.Do(), + Effect.Do, Effect.bind("name", () => Effect.succeed(es.compilerNode.name.text)), Effect.bind("type", () => Effect.succeed(stripImportTypes(es.getType().getText(es)))), Effect.bind( @@ -639,7 +629,7 @@ const parseExportSpecifier = (es: ast.ExportSpecifier) => pipe( es.getLeadingCommentRanges(), ReadonlyArray.head, - Option.toEither( + Effect.mapError( () => `Missing ${name} documentation in ${source.path.join("/")}` ), Effect.flatMap((commentRange) => pipe(commentRange.getText(), getCommentInfo(name))), @@ -672,7 +662,10 @@ export const parseExports = pipe( Effect.flatMap((exportDeclarations) => pipe(exportDeclarations, Effect.validateAll(parseExportDeclaration)) ), - Effect.mapBoth(ReadonlyArray.flatten, ReadonlyArray.flatten) + Effect.mapBoth({ + onFailure: ReadonlyArray.flatten, + onSuccess: ReadonlyArray.flatten + }) ) // ------------------------------------------------------------------------------------- @@ -686,28 +679,28 @@ const getTypeParameters = ( const getMethodSignature = (md: ast.MethodDeclaration): string => pipe( Option.fromNullable(md.compilerNode.body), - Option.match( - () => md.getText(), - (body) => { + Option.match({ + onNone: () => md.getText(), + onSome: (body) => { const end = body.getStart() - md.getStart() - 1 return md.getText().substring(0, end) } - ) + }) ) const parseMethod = (md: ast.MethodDeclaration) => pipe( - Effect.Do(), + Effect.Do, Effect.bind("name", () => Effect.succeed(md.getName())), Effect.bind("overloads", () => Effect.succeed(md.getOverloads())), Effect.bind("jsdocs", ({ overloads }) => Effect.succeed( pipe( overloads, - ReadonlyArray.matchLeft( - () => md.getJsDocs(), - (x) => x.getJsDocs() - ) + ReadonlyArray.matchLeft({ + onEmpty: () => md.getJsDocs(), + onNonEmpty: (x) => x.getJsDocs() + }) ) )), Effect.flatMap(({ jsdocs, name, overloads }) => @@ -719,14 +712,14 @@ const parseMethod = (md: ast.MethodDeclaration) => Effect.map((info) => { const signatures = pipe( overloads, - ReadonlyArray.matchRight( - () => [getMethodSignature(md)], - (init, last) => + ReadonlyArray.matchRight({ + onEmpty: () => [getMethodSignature(md)], + onNonEmpty: (init, last) => pipe( init.map((md) => md.getText()), ReadonlyArray.append(getMethodSignature(last)) ) - ) + }) ) return Option.some( Domain.createMethod( @@ -746,38 +739,37 @@ const parseMethod = (md: ast.MethodDeclaration) => ) ) -const parseProperty = (classname: string) => - (pd: ast.PropertyDeclaration) => { - const name = pd.getName() - return pipe( - getJSDocText(pd.getJsDocs()), - getCommentInfo(`${classname}#${name}`), - Effect.map((info) => { - const type = stripImportTypes(pd.getType().getText(pd)) - const readonly = pipe( - Option.fromNullable( - pd.getFirstModifierByKind(ast.ts.SyntaxKind.ReadonlyKeyword) - ), - Option.match( - () => "", - () => "readonly " - ) - ) - const signature = `${readonly}${name}: ${type}` - return Domain.createProperty( - Domain.createDocumentable( - name, - info.description, - info.since, - info.deprecated, - info.examples, - info.category - ), - signature - ) - }) - ) - } +const parseProperty = (classname: string) => (pd: ast.PropertyDeclaration) => { + const name = pd.getName() + return pipe( + getJSDocText(pd.getJsDocs()), + getCommentInfo(`${classname}#${name}`), + Effect.map((info) => { + const type = stripImportTypes(pd.getType().getText(pd)) + const readonly = pipe( + Option.fromNullable( + pd.getFirstModifierByKind(ast.ts.SyntaxKind.ReadonlyKeyword) + ), + Option.match({ + onNone: () => "", + onSome: () => "readonly " + }) + ) + const signature = `${readonly}${name}: ${type}` + return Domain.createProperty( + Domain.createDocumentable( + name, + info.description, + info.since, + info.deprecated, + info.examples, + info.category + ), + signature + ) + }) + ) +} const parseProperties = (name: string, c: ast.ClassDeclaration) => pipe( @@ -794,7 +786,7 @@ const parseProperties = (name: string, c: ast.ClassDeclaration) => (prop) => pipe( prop.getJsDocs(), - not(flow(getJSDocText, parseComment, shouldIgnore)) + Predicate.not(flow(getJSDocText, parseComment, shouldIgnore)) ) ]) ), @@ -809,22 +801,20 @@ export const getConstructorDeclarationSignature = ( ): string => pipe( Option.fromNullable(c.compilerNode.body), - Option.match( - () => c.getText(), - (body) => { + Option.match({ + onNone: () => c.getText(), + onSome: (body) => { const end = body.getStart() - c.getStart() - 1 return c.getText().substring(0, end) } - ) + }) ) const getClassName = (c: ast.ClassDeclaration) => Effect.flatMap(Source, (source) => - pipe( + Effect.mapError( Option.fromNullable(c.getName()), - Option.toEither( - () => `Missing class name in module ${source.path.join("/")}` - ) + () => `Missing class name in module ${source.path.join("/")}` )) const getClassCommentInfo = (name: string, c: ast.ClassDeclaration) => @@ -836,22 +826,22 @@ const getClassDeclarationSignature = (name: string, c: ast.ClassDeclaration) => Effect.map((typeParameters) => pipe( c.getConstructors(), - ReadonlyArray.matchLeft( - () => `export declare class ${name}${typeParameters}`, - (head) => + ReadonlyArray.matchLeft({ + onEmpty: () => `export declare class ${name}${typeParameters}`, + onNonEmpty: (head) => `export declare class ${name}${typeParameters} { ${ getConstructorDeclarationSignature( head ) } }` - ) + }) ) ) ) const parseClass = (c: ast.ClassDeclaration) => pipe( - Effect.Do(), + Effect.Do, Effect.bind("name", () => Effect.mapError(getClassName(c), (e) => [e])), Effect.bind("info", ({ name }) => Effect.mapError(getClassCommentInfo(name, c), (e) => [e])), Effect.bind("signature", ({ name }) => getClassDeclarationSignature(name, c)), @@ -900,7 +890,7 @@ export const parseClasses = pipe( (id) => pipe( id.getJsDocs(), - not(flow(getJSDocText, parseComment, shouldIgnore)) + Predicate.not(flow(getJSDocText, parseComment, shouldIgnore)) ) ])) )), @@ -908,7 +898,10 @@ export const parseClasses = pipe( pipe( classDeclarations, Effect.validateAll(parseClass), - Effect.mapBoth(ReadonlyArray.flatten, ReadonlyArray.sort(byName)) + Effect.mapBoth({ + onFailure: ReadonlyArray.flatten, + onSuccess: ReadonlyArray.sort(byName) + }) ) ) ) @@ -925,21 +918,18 @@ const getModuleName = ( * @internal */ export const parseModuleDocumentation = pipe( - Effect.all(Config.Config, Source), + Effect.all([Config.Config, Source]), Effect.flatMap(([config, source]) => { const name = getModuleName(source.path) // if any of the settings enforcing documentation are set to `true`, then // a module should have associated documentation - const isDocumentationRequired = Boolean.MonoidSome.combineAll([ - config.enforceDescriptions, - config.enforceVersion - ]) + const isDocumentationRequired = config.enforceDescriptions || config.enforceVersion const onMissingDocumentation = () => isDocumentationRequired - ? Either.left( + ? Effect.fail( `Missing documentation in ${source.path.join("/")} module` ) - : Either.right( + : Effect.succeed( Domain.createDocumentable( name, Option.none(), @@ -949,12 +939,12 @@ export const parseModuleDocumentation = pipe( Option.none() ) ) - return pipe( - source.sourceFile.getStatements(), - ReadonlyArray.matchLeft(onMissingDocumentation, (statement) => - pipe( - statement.getLeadingCommentRanges(), - ReadonlyArray.matchLeft(onMissingDocumentation, (commentRange) => + return ReadonlyArray.matchLeft(source.sourceFile.getStatements(), { + onEmpty: onMissingDocumentation, + onNonEmpty: (statement) => + ReadonlyArray.matchLeft(statement.getLeadingCommentRanges(), { + onEmpty: onMissingDocumentation, + onNonEmpty: (commentRange) => pipe( getCommentInfo(name, true)(commentRange.getText()), Effect.map((info) => @@ -967,9 +957,9 @@ export const parseModuleDocumentation = pipe( info.category ) ) - )) - )) - ) + ) + }) + }) }) ) @@ -980,7 +970,7 @@ export const parseModuleDocumentation = pipe( export const parseModule = pipe( Effect.flatMap(Source, (source) => pipe( - Effect.Do(), + Effect.Do, Effect.bind("documentation", () => Effect.mapError(parseModuleDocumentation, (e) => [e])), Effect.bind("interfaces", () => parseInterfaces), Effect.bind("functions", () => parseFunctions), @@ -1016,21 +1006,21 @@ export const parseModule = pipe( * @internal */ export const parseFile = (project: ast.Project) => - ( - file: FileSystem.File - ): Effect.Effect, Domain.Module> => { - const path = file.path.split( - NodePath.sep - ) as any as ReadonlyArray.NonEmptyReadonlyArray - const sourceFile = project.getSourceFile(file.path) - if (sourceFile !== undefined) { - return pipe( - parseModule, - Effect.provideService(Source, { path, sourceFile }) - ) - } - return Either.left([`Unable to locate file: ${file.path}`]) +( + file: FileSystem.File +): Effect.Effect, Domain.Module> => { + const path = file.path.split( + NodePath.sep + ) as any as ReadonlyArray.NonEmptyReadonlyArray + const sourceFile = project.getSourceFile(file.path) + if (sourceFile !== undefined) { + return pipe( + parseModule, + Effect.provideService(Source, { path, sourceFile }) + ) } + return Effect.fail([`Unable to locate file: ${file.path}`]) +} const createProject = (files: ReadonlyArray) => pipe( diff --git a/src/Process.ts b/src/Process.ts index 95bef3d..50a5e0f 100644 --- a/src/Process.ts +++ b/src/Process.ts @@ -1,9 +1,8 @@ /** * @since 1.0.0 */ -import * as Context from "@effect/data/Context" -import * as Effect from "@effect/io/Effect" -import * as Layer from "@effect/io/Layer" + +import { Context, Effect, Layer } from "effect" /** * Represents a handle to the currently executing process. diff --git a/src/bin.ts b/src/bin.ts index 81ed99d..bd8d56a 100644 --- a/src/bin.ts +++ b/src/bin.ts @@ -6,8 +6,8 @@ * @since 1.0.0 */ -import * as Effect from "@effect/io/Effect" import chalk from "chalk" +import { Effect } from "effect" import { main } from "./index" Effect.runPromise(main).catch((defect) => { diff --git a/src/index.ts b/src/index.ts index 7b3e268..3a8f0e4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,15 +1,11 @@ /** * @since 1.0.0 */ -import { pipe } from "@effect/data/Function" -import * as Effect from "@effect/io/Effect" +import { Effect } from "effect" import * as Core from "./Core" /** * @category main * @since 1.0.0 */ -export const main = pipe( - Core.main, - Effect.tapErrorCause(Effect.logErrorCause) -) +export const main = Effect.tapErrorCause(Core.main, Effect.logError) diff --git a/test/Domain.ts b/test/Domain.ts index 1d1ccd5..b76d0a5 100644 --- a/test/Domain.ts +++ b/test/Domain.ts @@ -1,7 +1,5 @@ -import { pipe } from "@effect/data/Function" -import * as Option from "@effect/data/Option" -import * as ReadonlyArray from "@effect/data/ReadonlyArray" import * as assert from "assert" +import { Option, ReadonlyArray } from "effect" import * as Domain from "../src/Domain" const documentable = (name: string) => @@ -171,7 +169,7 @@ describe.concurrent("Domain", () => { [] ) - const sorted = pipe([m2, m1], ReadonlyArray.sort(Domain.Order)) + const sorted = ReadonlyArray.sort([m2, m1], Domain.Order) assert.deepStrictEqual(sorted, [m1, m2]) }) diff --git a/test/FileSystem.ts b/test/FileSystem.ts index ba5d72c..237ce2c 100644 --- a/test/FileSystem.ts +++ b/test/FileSystem.ts @@ -1,23 +1,20 @@ -import * as Either from "@effect/data/Either" -import { pipe } from "@effect/data/Function" -import * as Effect from "@effect/io/Effect" import * as assert from "assert" +import { Effect, Exit } from "effect" import * as FileSystem from "../src/FileSystem" describe.concurrent("FileSystem", () => { describe.concurrent("readFile", () => { it("should error out on non existing files", async () => { - const program = pipe( - Effect.flatMap( - FileSystem.FileSystem, - (fileSystem) => fileSystem.readFile("non-existent.txt") - ), + const program = Effect.flatMap( + FileSystem.FileSystem, + (fileSystem) => fileSystem.readFile("non-existent.txt") + ).pipe( Effect.mapError(({ error }) => error.message), Effect.provideLayer(FileSystem.FileSystemLive) ) assert.deepStrictEqual( - await Effect.runPromiseEither(program), - Either.left("ENOENT: no such file or directory, open 'non-existent.txt'") + Exit.unannotate(await Effect.runPromiseExit(program)), + Exit.fail("ENOENT: no such file or directory, open 'non-existent.txt'") ) }) }) diff --git a/test/Markdown.ts b/test/Markdown.ts index 69971fc..3db4506 100644 --- a/test/Markdown.ts +++ b/test/Markdown.ts @@ -1,8 +1,6 @@ -import { flow } from "@effect/data/Function" -import * as Option from "@effect/data/Option" import * as assert from "assert" -import * as _ from "../src/Markdown" - +import { Option } from "effect" +import { flow } from "effect/Function" import { createClass, createConstant, @@ -15,6 +13,7 @@ import { createProperty, createTypeAlias } from "../src/Domain" +import * as _ from "../src/Markdown" const testCases = { class: createClass( diff --git a/test/Parser.ts b/test/Parser.ts index 15b74d4..a43ecd9 100644 --- a/test/Parser.ts +++ b/test/Parser.ts @@ -1,10 +1,6 @@ -import * as Either from "@effect/data/Either" -import { pipe } from "@effect/data/Function" -import * as Option from "@effect/data/Option" -import * as String from "@effect/data/String" -import * as Effect from "@effect/io/Effect" import * as assert from "assert" import chalk from "chalk" +import { Effect, Exit, Option, String } from "effect" import * as ast from "ts-morph" import * as Config from "../src/Config" import * as FileSystem from "../src/FileSystem" @@ -37,51 +33,51 @@ const getParser = (sourceText: string): Parser.Source => ({ sourceFile: project.createSourceFile(`test-${testCounter++}.ts`, sourceText) }) -const expectLeft = ( +const expectFailure = ( sourceText: string, eff: Effect.Effect, - left: E, + failure: E, config?: Partial ) => { expect( - pipe( - eff, + eff.pipe( Effect.provideService(Parser.Source, getParser(sourceText)), Effect.provideService(Config.Config, { ...defaultConfig, ...config }), - Effect.runSyncEither + Effect.runSyncExit, + Exit.unannotate ) - ).toEqual(Either.left(left)) + ).toEqual(Exit.fail(failure)) } -const expectRight = ( +const expectSuccess = ( sourceText: string, eff: Effect.Effect, a: A, config?: Partial ) => { expect( - pipe( - eff, - Effect.provideService(Parser.Source, getParser(sourceText)), - Effect.provideService(Config.Config, { ...defaultConfig, ...config }), - Effect.runSyncEither - ) - ).toEqual(Either.right(a)) + eff + .pipe( + Effect.provideService(Parser.Source, getParser(sourceText)), + Effect.provideService(Config.Config, { ...defaultConfig, ...config }), + Effect.runSyncExit + ) + ).toEqual(Exit.succeed(a)) } describe.concurrent("Parser", () => { describe.concurrent("parsers", () => { describe.concurrent("parseInterfaces", () => { it("should return no `Interface`s if the file is empty", () => { - expectRight("", Parser.parseInterfaces, []) + expectSuccess("", Parser.parseInterfaces, []) }) it("should return no `Interface`s if there are no exported interfaces", () => { - expectRight("interface A {}", Parser.parseInterfaces, []) + expectSuccess("interface A {}", Parser.parseInterfaces, []) }) it("should return an `Interface`", () => { - expectRight( + expectSuccess( `/** * a description... * @since 1.0.0 @@ -105,7 +101,7 @@ describe.concurrent("Parser", () => { }) it("should return interfaces sorted by name", () => { - expectRight( + expectSuccess( ` /** * @since 1.0.0 @@ -145,7 +141,7 @@ describe.concurrent("Parser", () => { describe.concurrent("parseFunctions", () => { it("should raise an error if the function is anonymous", () => { - expectLeft( + expectFailure( `export function(a: number, b: number): number { return a + b }`, Parser.parseFunctions, ["Missing function name in module test"] @@ -153,7 +149,7 @@ describe.concurrent("Parser", () => { }) it("should not return private function declarations", () => { - expectRight( + expectSuccess( `function sum(a: number, b: number): number { return a + b }`, Parser.parseFunctions, [] @@ -161,7 +157,7 @@ describe.concurrent("Parser", () => { }) it("should not return ignored function declarations", () => { - expectRight( + expectSuccess( `/** * @ignore */ @@ -172,7 +168,7 @@ describe.concurrent("Parser", () => { }) it("should not return ignored function declarations with overloads", () => { - expectRight( + expectSuccess( `/** * @ignore */ @@ -184,7 +180,7 @@ describe.concurrent("Parser", () => { }) it("should not return internal function declarations", () => { - expectRight( + expectSuccess( `/** * @internal */ @@ -195,7 +191,7 @@ describe.concurrent("Parser", () => { }) it("should not return internal function declarations even with overloads", () => { - expectRight( + expectSuccess( `/** * @internal */ @@ -207,7 +203,7 @@ describe.concurrent("Parser", () => { }) it("should not return private const function declarations", () => { - expectRight( + expectSuccess( `const sum = (a: number, b: number): number => a + b `, Parser.parseFunctions, [] @@ -215,7 +211,7 @@ describe.concurrent("Parser", () => { }) it("should not return internal const function declarations", () => { - expectRight( + expectSuccess( `/** * @internal */ @@ -226,7 +222,7 @@ describe.concurrent("Parser", () => { }) it("should account for nullable polymorphic return types", () => { - expectRight( + expectSuccess( `/** * @since 1.0.0 */ @@ -250,7 +246,7 @@ describe.concurrent("Parser", () => { }) it("should return a const function declaration", () => { - expectRight( + expectSuccess( `/** * a description... * @since 1.0.0 @@ -283,7 +279,7 @@ describe.concurrent("Parser", () => { }) it("should return a function declaration", () => { - expectRight( + expectSuccess( `/** * @since 1.0.0 */ @@ -307,7 +303,7 @@ describe.concurrent("Parser", () => { }) it("should return a function with comments", () => { - expectRight( + expectSuccess( `/** * a description... * @since 1.0.0 @@ -333,7 +329,7 @@ describe.concurrent("Parser", () => { }) it("should handle overloadings", () => { - expectRight( + expectSuccess( `/** * a description... * @since 1.0.0 @@ -364,7 +360,7 @@ describe.concurrent("Parser", () => { describe.concurrent("parseTypeAlias", () => { it("should return a `TypeAlias`", () => { - expectRight( + expectSuccess( `/** * a description... * @since 1.0.0 @@ -390,7 +386,7 @@ describe.concurrent("Parser", () => { describe.concurrent("parseConstants", () => { it("should handle a constant value", () => { - expectRight( + expectSuccess( `/** * a description... * @since 1.0.0 @@ -414,7 +410,7 @@ describe.concurrent("Parser", () => { }) it("should support constants with default type parameters", () => { - expectRight( + expectSuccess( `/** * @since 1.0.0 */ @@ -436,7 +432,7 @@ describe.concurrent("Parser", () => { }) it("should support untyped constants", () => { - expectRight( + expectSuccess( ` class A {} /** @@ -460,7 +456,7 @@ describe.concurrent("Parser", () => { }) it("should handle constants with typeof annotations", () => { - expectRight( + expectSuccess( ` const task: { a: number } = { a: 1 } @@ -488,7 +484,7 @@ describe.concurrent("Parser", () => { }) it("should not include variables declared in for loops", () => { - expectRight( + expectSuccess( ` const object = { a: 1, b: 2, c: 3 }; for (const property in object) { @@ -502,27 +498,27 @@ describe.concurrent("Parser", () => { describe.concurrent("parseClasses", () => { it("should raise an error if the class is anonymous", () => { - expectLeft(`export class {}`, Parser.parseClasses, [ + expectFailure(`export class {}`, Parser.parseClasses, [ "Missing class name in module test" ]) }) it("should raise an error if an `@since` tag is missing in a module", () => { - expectLeft(`export class MyClass {}`, Parser.parseClasses, [ + expectFailure(`export class MyClass {}`, Parser.parseClasses, [ `Missing ${chalk.bold("@since")} tag in ${chalk.bold("test#MyClass")} documentation` ]) }) it("should ignore internal classes", () => { - expectRight(`/** @internal */export class MyClass {}`, Parser.parseClasses, []) + expectSuccess(`/** @internal */export class MyClass {}`, Parser.parseClasses, []) }) it("should ignore `@ignore`d classes", () => { - expectRight(`/** @ignore */export class MyClass {}`, Parser.parseClasses, []) + expectSuccess(`/** @ignore */export class MyClass {}`, Parser.parseClasses, []) }) it("should raise an error if `@since` is missing in a property", () => { - expectLeft( + expectFailure( `/** * @since 1.0.0 */ @@ -535,7 +531,7 @@ describe.concurrent("Parser", () => { }) it("should skip ignored properties", () => { - expectRight( + expectSuccess( `/** * @since 1.0.0 */ @@ -565,7 +561,7 @@ describe.concurrent("Parser", () => { }) it("should skip the constructor body", () => { - expectRight( + expectSuccess( `/** * description * @since 1.0.0 @@ -614,7 +610,7 @@ describe.concurrent("Parser", () => { }) it("should handle non-readonly properties", () => { - expectRight( + expectSuccess( `/** * description * @since 1.0.0 @@ -655,7 +651,7 @@ describe.concurrent("Parser", () => { }) it("should return a `Class`", () => { - expectRight( + expectSuccess( `/** * a class description... * @since 1.0.0 @@ -737,7 +733,7 @@ describe.concurrent("Parser", () => { }) it("should handle method overloadings", () => { - expectRight( + expectSuccess( `/** * a class description... * @since 1.0.0 @@ -810,7 +806,7 @@ describe.concurrent("Parser", () => { }) it("should ignore internal/ignored methods (#42)", () => { - expectRight( + expectSuccess( `/** * a class description... * @since 1.0.0 @@ -849,7 +845,7 @@ describe.concurrent("Parser", () => { describe.concurrent("parseModuleDocumentation", () => { it("should return a description field and a deprecated field", () => { - expectRight( + expectSuccess( `/** * Manages the configuration settings for the widget * @deprecated @@ -874,7 +870,7 @@ describe.concurrent("Parser", () => { }) it("should return an error when documentation is enforced but no documentation is provided", () => { - expectLeft( + expectFailure( "export const a: number = 1", Parser.parseModuleDocumentation, "Missing documentation in test module" @@ -882,7 +878,7 @@ describe.concurrent("Parser", () => { }) it("should support absence of module documentation when no documentation is enforced", () => { - expectRight( + expectSuccess( "export const a: number = 1", Parser.parseModuleDocumentation, { @@ -900,11 +896,11 @@ describe.concurrent("Parser", () => { describe.concurrent("parseExports", () => { it("should return no `Export`s if the file is empty", () => { - expectRight("", Parser.parseExports, []) + expectSuccess("", Parser.parseExports, []) }) it("should handle renamimg", () => { - expectRight( + expectSuccess( `const a = 1; export { /** @@ -929,7 +925,7 @@ describe.concurrent("Parser", () => { }) it("should return an `Export`", () => { - expectRight( + expectSuccess( `export { /** * description_of_a @@ -969,7 +965,7 @@ describe.concurrent("Parser", () => { }) it("should raise an error if `@since` tag is missing in export", () => { - expectLeft("export { a }", Parser.parseExports, [ + expectFailure("export { a }", Parser.parseExports, [ "Missing a documentation in test" ]) }) @@ -987,17 +983,16 @@ describe.concurrent("Parser", () => { b }` ) - const actual = pipe( - Parser.parseExports, + const actual = Parser.parseExports.pipe( Effect.provideService(Parser.Source, { path: ["test"], sourceFile }), Effect.provideService(Config.Config, defaultConfig), - Effect.runSyncEither + Effect.runSyncExit ) expect(actual).toEqual( - Either.right([ + Exit.succeed([ { _tag: "Export", name: "b", @@ -1015,13 +1010,13 @@ describe.concurrent("Parser", () => { describe.concurrent("parseModule", () => { it("should raise an error if `@since` tag is missing", async () => { - expectLeft(`import * as assert from 'assert'`, Parser.parseModule, [ + expectFailure(`import * as assert from 'assert'`, Parser.parseModule, [ "Missing documentation in test module" ]) }) it("should not require an example for modules when `enforceExamples` is set to true (#38)", () => { - expectRight( + expectSuccess( `/** * This is the assert module. * @@ -1079,12 +1074,12 @@ export const foo = 'foo'`, const project = new ast.Project({ useInMemoryFileSystem: true }) assert.deepStrictEqual( - pipe( - Parser.parseFile(project)(file), + Parser.parseFile(project)(file).pipe( Effect.provideService(Config.Config, defaultConfig), - Effect.runSyncEither + Effect.runSyncExit, + Exit.unannotate ), - Either.left(["Unable to locate file: non-existent.ts"]) + Exit.fail(["Unable to locate file: non-existent.ts"]) ) }) }) @@ -1100,7 +1095,7 @@ export const foo = 'foo'`, | * @since 1.0.0 | */` ) - expectRight("", Parser.getCommentInfo("name")(text), { + expectSuccess("", Parser.getCommentInfo("name")(text), { description: Option.some("description"), since: Option.some("1.0.0"), category: Option.some("instances"), @@ -1116,7 +1111,7 @@ export const foo = 'foo'`, | * @since 1.0.0 | */` ) - expectLeft( + expectFailure( "", Parser.getCommentInfo("name")(text), `Missing ${chalk.bold("@category")} tag in ${chalk.bold("test#name")} documentation` @@ -1130,7 +1125,7 @@ export const foo = 'foo'`, | * @since 1.0.0 | */` ) - expectLeft( + expectFailure( "", Parser.getCommentInfo("name")(text), `Missing ${chalk.bold("description")} in ${chalk.bold("test#name")} documentation`, @@ -1148,7 +1143,7 @@ export const foo = 'foo'`, | * @since 1.0.0 | */` ) - expectLeft( + expectFailure( "", Parser.getCommentInfo("name")(text), `Missing ${chalk.bold("@example")} tag in ${chalk.bold("test#name")} documentation`, @@ -1167,7 +1162,7 @@ export const foo = 'foo'`, | * @since 1.0.0 | */` ) - expectLeft( + expectFailure( "", Parser.getCommentInfo("name")(text), `Missing ${chalk.bold("@example")} tag in ${chalk.bold("test#name")} documentation`, @@ -1183,7 +1178,7 @@ export const foo = 'foo'`, * @category instances */` - expectRight( + expectSuccess( "", Parser.getCommentInfo("name")(text), { diff --git a/tsup.config.ts b/tsup.config.ts index 469f1b3..343c563 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -4,5 +4,5 @@ export default defineConfig({ entry: ["src/bin.ts"], clean: true, publicDir: true, - noExternal: [/@effect/] + noExternal: [/(effect|@effect|chalk)/] })