mirror of
https://github.com/Lifeforge-app/lifeforge.git
synced 2026-03-03 00:27:01 +00:00
fix(cli): improve error logging and remove actionableError calls
This commit is contained in:
@@ -15,7 +15,7 @@
|
||||
# IDE and editor files
|
||||
**/.vscode
|
||||
**/.idea
|
||||
**/*.swp
|
||||
**/*.swe
|
||||
**/*.swo
|
||||
|
||||
# Test files
|
||||
|
||||
145
bun.lock
145
bun.lock
@@ -53,6 +53,69 @@
|
||||
"vite": "^7.1.9",
|
||||
},
|
||||
},
|
||||
"apps/lifeforge--achievements": {
|
||||
"name": "@lifeforge/lifeforge--achievements",
|
||||
"version": "0.0.8",
|
||||
"peerDependencies": {
|
||||
"@lifeforge/server-utils": "workspace:*",
|
||||
"lifeforge-ui": "workspace:*",
|
||||
"shared": "workspace:*",
|
||||
},
|
||||
},
|
||||
"apps/lifeforge--calendar": {
|
||||
"name": "@lifeforge/lifeforge--calendar",
|
||||
"version": "0.0.5",
|
||||
"dependencies": {
|
||||
"node-ical": "^0.21.0",
|
||||
"react-big-calendar": "^1.19.4",
|
||||
"react-markdown": "^10.1.0",
|
||||
"react-tooltip": "^5.30.0",
|
||||
"rrule": "^2.8.1",
|
||||
"zustand": "^5.0.8",
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/react-big-calendar": "^1.16.3",
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@lifeforge/server-utils": "workspace:*",
|
||||
"lifeforge-ui": "workspace:*",
|
||||
"shared": "workspace:*",
|
||||
},
|
||||
},
|
||||
"apps/lifeforge--movies": {
|
||||
"name": "@lifeforge/lifeforge--movies",
|
||||
"version": "0.0.5",
|
||||
"dependencies": {
|
||||
"qrcode.react": "^4.2.0",
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@lifeforge/server-utils": "workspace:*",
|
||||
"lifeforge-ui": "workspace:*",
|
||||
"shared": "workspace:*",
|
||||
},
|
||||
},
|
||||
"apps/lifeforge--wallet": {
|
||||
"name": "@lifeforge/lifeforge--wallet",
|
||||
"version": "0.0.5",
|
||||
"dependencies": {
|
||||
"@vis.gl/react-google-maps": "^1.5.5",
|
||||
"chart.js": "^4.5.0",
|
||||
"moment-range": "^4.0.2",
|
||||
"react-chartjs-2": "^5.3.0",
|
||||
"react-to-print": "^3.1.1",
|
||||
"react-virtualized": "^9.22.6",
|
||||
"recharts": "^2.15.0",
|
||||
"zustand": "^5.0.8",
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/react-virtualized": "^9.22.3",
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@lifeforge/server-utils": "workspace:*",
|
||||
"lifeforge-ui": "workspace:*",
|
||||
"shared": "workspace:*",
|
||||
},
|
||||
},
|
||||
"client": {
|
||||
"name": "@lifeforge/client",
|
||||
"version": "0.0.0",
|
||||
@@ -661,10 +724,20 @@
|
||||
|
||||
"@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="],
|
||||
|
||||
"@kurkle/color": ["@kurkle/color@0.3.4", "", {}, "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w=="],
|
||||
|
||||
"@lifeforge/client": ["@lifeforge/client@workspace:client"],
|
||||
|
||||
"@lifeforge/lifeforge--achievements": ["@lifeforge/lifeforge--achievements@workspace:apps/lifeforge--achievements"],
|
||||
|
||||
"@lifeforge/lifeforge--calendar": ["@lifeforge/lifeforge--calendar@workspace:apps/lifeforge--calendar"],
|
||||
|
||||
"@lifeforge/lifeforge--lang-en": ["@lifeforge/lifeforge--lang-en@workspace:locales/lifeforge--lang-en"],
|
||||
|
||||
"@lifeforge/lifeforge--movies": ["@lifeforge/lifeforge--movies@workspace:apps/lifeforge--movies"],
|
||||
|
||||
"@lifeforge/lifeforge--wallet": ["@lifeforge/lifeforge--wallet@workspace:apps/lifeforge--wallet"],
|
||||
|
||||
"@lifeforge/log": ["@lifeforge/log@workspace:packages/lifeforge-log"],
|
||||
|
||||
"@lifeforge/server": ["@lifeforge/server@workspace:server"],
|
||||
@@ -749,6 +822,8 @@
|
||||
|
||||
"@polka/url": ["@polka/url@1.0.0-next.29", "", {}, "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww=="],
|
||||
|
||||
"@popperjs/core": ["@popperjs/core@2.11.8", "", {}, "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A=="],
|
||||
|
||||
"@radix-ui/number": ["@radix-ui/number@1.1.1", "", {}, "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g=="],
|
||||
|
||||
"@radix-ui/primitive": ["@radix-ui/primitive@1.1.3", "", {}, "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg=="],
|
||||
@@ -829,6 +904,8 @@
|
||||
|
||||
"@react-types/shared": ["@react-types/shared@3.32.1", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-famxyD5emrGGpFuUlgOP6fVW2h/ZaF405G5KDi3zPHzyjAWys/8W6NAVJtNbkCkhedmvL0xOhvt8feGXyXaw5w=="],
|
||||
|
||||
"@restart/hooks": ["@restart/hooks@0.4.16", "", { "dependencies": { "dequal": "^2.0.3" }, "peerDependencies": { "react": ">=16.8.0" } }, "sha512-f7aCv7c+nU/3mF7NWLtVVr0Ra80RqsO89hO72r+Y/nvQr5+q0UFGkocElTH6MJApvReVh6JHUFYn2cw1WdHF3w=="],
|
||||
|
||||
"@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.27", "", {}, "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA=="],
|
||||
|
||||
"@rollup/pluginutils": ["@rollup/pluginutils@5.3.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q=="],
|
||||
@@ -1071,6 +1148,8 @@
|
||||
|
||||
"@types/d3-zoom": ["@types/d3-zoom@3.0.8", "", { "dependencies": { "@types/d3-interpolate": "*", "@types/d3-selection": "*" } }, "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw=="],
|
||||
|
||||
"@types/date-arithmetic": ["@types/date-arithmetic@4.1.4", "", {}, "sha512-p9eZ2X9B80iKiTW4ukVj8B4K6q9/+xFtQ5MGYA5HWToY9nL4EkhV9+6ftT2VHpVMEZb5Tv00Iel516bVdO+yRw=="],
|
||||
|
||||
"@types/debug": ["@types/debug@4.1.12", "", { "dependencies": { "@types/ms": "*" } }, "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ=="],
|
||||
|
||||
"@types/deep-eql": ["@types/deep-eql@4.0.2", "", {}, "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw=="],
|
||||
@@ -1091,6 +1170,8 @@
|
||||
|
||||
"@types/geojson": ["@types/geojson@7946.0.16", "", {}, "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg=="],
|
||||
|
||||
"@types/google.maps": ["@types/google.maps@3.58.1", "", {}, "sha512-X9QTSvGJ0nCfMzYOnaVs/k6/4L+7F5uCS+4iUmkLEls6J9S/Phv+m/i3mDeyc49ZBgwab3EFO1HEoBY7k98EGQ=="],
|
||||
|
||||
"@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="],
|
||||
|
||||
"@types/http-errors": ["@types/http-errors@2.0.5", "", {}, "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg=="],
|
||||
@@ -1137,6 +1218,8 @@
|
||||
|
||||
"@types/react": ["@types/react@19.2.9", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-Lpo8kgb/igvMIPeNV2rsYKTgaORYdO1XGVZ4Qz3akwOj0ySGYMPlQWa8BaLn0G63D1aSaAQ5ldR06wCpChQCjA=="],
|
||||
|
||||
"@types/react-big-calendar": ["@types/react-big-calendar@1.16.3", "", { "dependencies": { "@types/date-arithmetic": "*", "@types/prop-types": "*", "@types/react": "*" } }, "sha512-CR+5BKMhlr/wPgsp+sXOeNKNkoU1h/+6H1XoWuL7xnurvzGRQv/EnM8jPS9yxxBvXI8pjQBaJcI7RTSGiewG/Q=="],
|
||||
|
||||
"@types/react-custom-scrollbars": ["@types/react-custom-scrollbars@4.0.13", "", { "dependencies": { "@types/react": "*" } }, "sha512-t+15reWgAE1jXlrhaZoxjuH/SQf+EG0rzAzSCzTIkSiP5CDT7KhoExNPwIa6uUxtPkjc3gdW/ry7GetLEwCfGA=="],
|
||||
|
||||
"@types/react-dom": ["@types/react-dom@19.2.3", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ=="],
|
||||
@@ -1173,6 +1256,8 @@
|
||||
|
||||
"@types/uuid": ["@types/uuid@10.0.0", "", {}, "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ=="],
|
||||
|
||||
"@types/warning": ["@types/warning@3.0.3", "", {}, "sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q=="],
|
||||
|
||||
"@types/yauzl": ["@types/yauzl@2.10.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q=="],
|
||||
|
||||
"@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@7.18.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "7.18.0", "@typescript-eslint/type-utils": "7.18.0", "@typescript-eslint/utils": "7.18.0", "@typescript-eslint/visitor-keys": "7.18.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", "ts-api-utils": "^1.3.0" }, "peerDependencies": { "@typescript-eslint/parser": "^7.0.0", "eslint": "^8.56.0" } }, "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw=="],
|
||||
@@ -1259,6 +1344,8 @@
|
||||
|
||||
"@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="],
|
||||
|
||||
"@vis.gl/react-google-maps": ["@vis.gl/react-google-maps@1.7.1", "", { "dependencies": { "@types/google.maps": "^3.54.10", "fast-deep-equal": "^3.1.3" }, "peerDependencies": { "react": ">=16.8.0 || ^19.0 || ^19.0.0-rc", "react-dom": ">=16.8.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-F/GJzJyri7Jqf+bkLNxoi2RcH2hCIo1I3//PyiILqQzdzglMoqZVO1DLXlHPifNdebk1/zib6dMJA3i73nwmuQ=="],
|
||||
|
||||
"@vitejs/plugin-react": ["@vitejs/plugin-react@4.7.0", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-beta.27", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA=="],
|
||||
|
||||
"@vitest/browser": ["@vitest/browser@1.6.1", "", { "dependencies": { "@vitest/utils": "1.6.1", "magic-string": "^0.30.5", "sirv": "^2.0.4" }, "peerDependencies": { "playwright": "*", "vitest": "1.6.1", "webdriverio": "*" }, "optionalPeers": ["playwright", "webdriverio"] }, "sha512-9ZYW6KQ30hJ+rIfJoGH4wAub/KAb4YrFzX0kVLASvTm7nJWVC5EAv5SlzlXVl3h3DaUq5aqHlZl77nmOPnALUQ=="],
|
||||
@@ -1515,6 +1602,8 @@
|
||||
|
||||
"character-reference-invalid": ["character-reference-invalid@1.1.4", "", {}, "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg=="],
|
||||
|
||||
"chart.js": ["chart.js@4.5.1", "", { "dependencies": { "@kurkle/color": "^0.3.0" } }, "sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw=="],
|
||||
|
||||
"check-error": ["check-error@1.0.3", "", { "dependencies": { "get-func-name": "^2.0.2" } }, "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg=="],
|
||||
|
||||
"cheerio": ["cheerio@1.1.2", "", { "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", "domhandler": "^5.0.3", "domutils": "^3.2.2", "encoding-sniffer": "^0.2.1", "htmlparser2": "^10.0.0", "parse5": "^7.3.0", "parse5-htmlparser2-tree-adapter": "^7.1.0", "parse5-parser-stream": "^7.1.2", "undici": "^7.12.0", "whatwg-mimetype": "^4.0.0" } }, "sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg=="],
|
||||
@@ -1653,6 +1742,8 @@
|
||||
|
||||
"cytoscape-fcose": ["cytoscape-fcose@2.2.0", "", { "dependencies": { "cose-base": "^2.2.0" }, "peerDependencies": { "cytoscape": "^3.2.0" } }, "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ=="],
|
||||
|
||||
"d": ["d@1.0.2", "", { "dependencies": { "es5-ext": "^0.10.64", "type": "^2.7.2" } }, "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw=="],
|
||||
|
||||
"d3": ["d3@7.9.0", "", { "dependencies": { "d3-array": "3", "d3-axis": "3", "d3-brush": "3", "d3-chord": "3", "d3-color": "3", "d3-contour": "4", "d3-delaunay": "6", "d3-dispatch": "3", "d3-drag": "3", "d3-dsv": "3", "d3-ease": "3", "d3-fetch": "3", "d3-force": "3", "d3-format": "3", "d3-geo": "3", "d3-hierarchy": "3", "d3-interpolate": "3", "d3-path": "3", "d3-polygon": "3", "d3-quadtree": "3", "d3-random": "3", "d3-scale": "4", "d3-scale-chromatic": "3", "d3-selection": "3", "d3-shape": "3", "d3-time": "3", "d3-time-format": "4", "d3-timer": "3", "d3-transition": "3", "d3-zoom": "3" } }, "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA=="],
|
||||
|
||||
"d3-array": ["d3-array@3.2.4", "", { "dependencies": { "internmap": "1 - 2" } }, "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg=="],
|
||||
@@ -1733,6 +1824,8 @@
|
||||
|
||||
"data-view-byte-offset": ["data-view-byte-offset@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ=="],
|
||||
|
||||
"date-arithmetic": ["date-arithmetic@4.1.0", "", {}, "sha512-QWxYLR5P/6GStZcdem+V1xoto6DMadYWpMXU82ES3/RfR3Wdwr3D0+be7mgOJ+Ov0G9D5Dmb9T17sNLQYj9XOg=="],
|
||||
|
||||
"date-fns": ["date-fns@4.1.0", "", {}, "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg=="],
|
||||
|
||||
"dateformat": ["dateformat@4.6.3", "", {}, "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA=="],
|
||||
@@ -1869,6 +1962,12 @@
|
||||
|
||||
"es-to-primitive": ["es-to-primitive@1.3.0", "", { "dependencies": { "is-callable": "^1.2.7", "is-date-object": "^1.0.5", "is-symbol": "^1.0.4" } }, "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g=="],
|
||||
|
||||
"es5-ext": ["es5-ext@0.10.64", "", { "dependencies": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", "esniff": "^2.0.1", "next-tick": "^1.1.0" } }, "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg=="],
|
||||
|
||||
"es6-iterator": ["es6-iterator@2.0.3", "", { "dependencies": { "d": "1", "es5-ext": "^0.10.35", "es6-symbol": "^3.1.1" } }, "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g=="],
|
||||
|
||||
"es6-symbol": ["es6-symbol@3.1.4", "", { "dependencies": { "d": "^1.0.2", "ext": "^1.7.0" } }, "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg=="],
|
||||
|
||||
"esast-util-from-estree": ["esast-util-from-estree@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "devlop": "^1.0.0", "estree-util-visit": "^2.0.0", "unist-util-position-from-estree": "^2.0.0" } }, "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ=="],
|
||||
|
||||
"esast-util-from-js": ["esast-util-from-js@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "acorn": "^8.0.0", "esast-util-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw=="],
|
||||
@@ -1955,6 +2054,8 @@
|
||||
|
||||
"eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="],
|
||||
|
||||
"esniff": ["esniff@2.0.1", "", { "dependencies": { "d": "^1.0.1", "es5-ext": "^0.10.62", "event-emitter": "^0.3.5", "type": "^2.7.2" } }, "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg=="],
|
||||
|
||||
"espree": ["espree@10.4.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.1" } }, "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ=="],
|
||||
|
||||
"esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="],
|
||||
@@ -1983,6 +2084,8 @@
|
||||
|
||||
"etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="],
|
||||
|
||||
"event-emitter": ["event-emitter@0.3.5", "", { "dependencies": { "d": "1", "es5-ext": "~0.10.14" } }, "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA=="],
|
||||
|
||||
"event-stream": ["event-stream@3.3.4", "", { "dependencies": { "duplexer": "~0.1.1", "from": "~0", "map-stream": "~0.1.0", "pause-stream": "0.0.11", "split": "0.3", "stream-combiner": "~0.0.4", "through": "~2.3.1" } }, "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g=="],
|
||||
|
||||
"event-target-shim": ["event-target-shim@5.0.1", "", {}, "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="],
|
||||
@@ -2003,6 +2106,8 @@
|
||||
|
||||
"exsolve": ["exsolve@1.0.8", "", {}, "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA=="],
|
||||
|
||||
"ext": ["ext@1.7.0", "", { "dependencies": { "type": "^2.7.2" } }, "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw=="],
|
||||
|
||||
"extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="],
|
||||
|
||||
"extend-shallow": ["extend-shallow@2.0.1", "", { "dependencies": { "is-extendable": "^0.1.0" } }, "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug=="],
|
||||
@@ -2149,6 +2254,8 @@
|
||||
|
||||
"global-dirs": ["global-dirs@3.0.1", "", { "dependencies": { "ini": "2.0.0" } }, "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA=="],
|
||||
|
||||
"globalize": ["globalize@0.1.1", "", {}, "sha512-5e01v8eLGfuQSOvx2MsDMOWS0GFtCx1wPzQSmcHw4hkxFzrQDBO3Xwg/m8Hr/7qXMrHeOIE29qWVzyv06u1TZA=="],
|
||||
|
||||
"globals": ["globals@16.5.0", "", {}, "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ=="],
|
||||
|
||||
"globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="],
|
||||
@@ -2227,6 +2334,8 @@
|
||||
|
||||
"html-parse-stringify": ["html-parse-stringify@3.0.1", "", { "dependencies": { "void-elements": "3.1.0" } }, "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg=="],
|
||||
|
||||
"html-url-attributes": ["html-url-attributes@3.0.1", "", {}, "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ=="],
|
||||
|
||||
"htmlparser2": ["htmlparser2@10.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.2.1", "entities": "^6.0.0" } }, "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g=="],
|
||||
|
||||
"http-errors": ["http-errors@2.0.1", "", { "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", "setprototypeof": "~1.2.0", "statuses": "~2.0.2", "toidentifier": "~1.0.1" } }, "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ=="],
|
||||
@@ -2275,6 +2384,8 @@
|
||||
|
||||
"internmap": ["internmap@2.0.3", "", {}, "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg=="],
|
||||
|
||||
"invariant": ["invariant@2.2.4", "", { "dependencies": { "loose-envify": "^1.0.0" } }, "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA=="],
|
||||
|
||||
"ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="],
|
||||
|
||||
"is-accessor-descriptor": ["is-accessor-descriptor@1.0.1", "", { "dependencies": { "hasown": "^2.0.0" } }, "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA=="],
|
||||
@@ -2527,6 +2638,8 @@
|
||||
|
||||
"lru-cache": ["lru-cache@11.2.4", "", {}, "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg=="],
|
||||
|
||||
"luxon": ["luxon@3.7.2", "", {}, "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew=="],
|
||||
|
||||
"lz-string": ["lz-string@1.5.0", "", { "bin": { "lz-string": "bin/bin.js" } }, "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ=="],
|
||||
|
||||
"magic-string": ["magic-string@0.27.0", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.13" } }, "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA=="],
|
||||
@@ -2585,6 +2698,8 @@
|
||||
|
||||
"media-typer": ["media-typer@0.3.0", "", {}, "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="],
|
||||
|
||||
"memoize-one": ["memoize-one@6.0.0", "", {}, "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="],
|
||||
|
||||
"merge-descriptors": ["merge-descriptors@1.0.3", "", {}, "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ=="],
|
||||
|
||||
"merge-stream": ["merge-stream@2.0.0", "", {}, "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="],
|
||||
@@ -2693,6 +2808,12 @@
|
||||
|
||||
"mlly": ["mlly@1.8.0", "", { "dependencies": { "acorn": "^8.15.0", "pathe": "^2.0.3", "pkg-types": "^1.3.1", "ufo": "^1.6.1" } }, "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g=="],
|
||||
|
||||
"moment": ["moment@2.30.1", "", {}, "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how=="],
|
||||
|
||||
"moment-range": ["moment-range@4.0.2", "", { "dependencies": { "es6-symbol": "^3.1.0" }, "peerDependencies": { "moment": ">= 2" } }, "sha512-n8sceWwSTjmz++nFHzeNEUsYtDqjgXgcOBzsHi+BoXQU2FW+eU92LUaK8gqOiSu5PG57Q9sYj1Fz4LRDj4FtKA=="],
|
||||
|
||||
"moment-timezone": ["moment-timezone@0.6.0", "", { "dependencies": { "moment": "^2.29.4" } }, "sha512-ldA5lRNm3iJCWZcBCab4pnNL3HSZYXVb/3TYr75/1WCTWYuTqYUb5f/S384pncYjJ88lbO8Z4uPDvmoluHJc8Q=="],
|
||||
|
||||
"morgan": ["morgan@1.10.1", "", { "dependencies": { "basic-auth": "~2.0.1", "debug": "2.6.9", "depd": "~2.0.0", "on-finished": "~2.3.0", "on-headers": "~1.1.0" } }, "sha512-223dMRJtI/l25dJKWpgij2cMtywuG/WiUKXdvwfbhGKBhy1puASqXwFzmWZ7+K73vUPoR7SS2Qz2cI/g9MKw0A=="],
|
||||
|
||||
"mri": ["mri@1.2.0", "", {}, "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="],
|
||||
@@ -2725,10 +2846,14 @@
|
||||
|
||||
"neo-async": ["neo-async@2.6.2", "", {}, "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="],
|
||||
|
||||
"next-tick": ["next-tick@1.1.0", "", {}, "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ=="],
|
||||
|
||||
"node-domexception": ["node-domexception@1.0.0", "", {}, "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ=="],
|
||||
|
||||
"node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="],
|
||||
|
||||
"node-ical": ["node-ical@0.21.0", "", { "dependencies": { "moment-timezone": "^0.6.0", "rrule": "2.8.1" } }, "sha512-69YB4OnngmGJjGKR5PudfiWEDsjFWi6w2dgHsiyDUaFRiR/3uX4VZG0SjkkiaKrvMFcuqwsoUImfRcoLTVr6uQ=="],
|
||||
|
||||
"node-releases": ["node-releases@2.0.27", "", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="],
|
||||
|
||||
"normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="],
|
||||
@@ -2965,6 +3090,10 @@
|
||||
|
||||
"react": ["react@19.2.3", "", {}, "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA=="],
|
||||
|
||||
"react-big-calendar": ["react-big-calendar@1.19.4", "", { "dependencies": { "@babel/runtime": "^7.20.7", "clsx": "^1.2.1", "date-arithmetic": "^4.1.0", "dayjs": "^1.11.7", "dom-helpers": "^5.2.1", "globalize": "^0.1.1", "invariant": "^2.2.4", "lodash": "^4.17.21", "lodash-es": "^4.17.21", "luxon": "^3.2.1", "memoize-one": "^6.0.0", "moment": "^2.29.4", "moment-timezone": "^0.5.40", "prop-types": "^15.8.1", "react-overlays": "^5.2.1", "uncontrollable": "^7.2.1" }, "peerDependencies": { "react": "^16.14.0 || ^17 || ^18 || ^19", "react-dom": "^16.14.0 || ^17 || ^18 || ^19" } }, "sha512-FrvbDx2LF6JAWFD96LU1jjloppC5OgIvMYUYIPzAw5Aq+ArYFPxAjLqXc4DyxfsQDN0TJTMuS/BIbcSB7Pg0YA=="],
|
||||
|
||||
"react-chartjs-2": ["react-chartjs-2@5.3.1", "", { "peerDependencies": { "chart.js": "^4.1.1", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-h5IPXKg9EXpjoBzUfyWJvllMjG2mQ4EiuHQFhms/AjUm0XSZHhyRy2xVmLXHKrtcdrPO4mnGqRtYoD0vp95A0A=="],
|
||||
|
||||
"react-currency-input-field": ["react-currency-input-field@3.10.0", "", { "peerDependencies": { "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-GRmZogHh1e1LrmgXg/fKHSuRLYUnj/c/AumfvfuDMA0UX1mDR6u2NR0fzDemRdq4tNHNLucJeJ2OKCr3ehqyDA=="],
|
||||
|
||||
"react-custom-scrollbars": ["react-custom-scrollbars@4.2.1", "", { "dependencies": { "dom-css": "^2.0.0", "prop-types": "^15.5.10", "raf": "^3.1.0" }, "peerDependencies": { "react": "^0.14.0 || ^15.0.0 || ^16.0.0", "react-dom": "^0.14.0 || ^15.0.0 || ^16.0.0" } }, "sha512-VtJTUvZ7kPh/auZWIbBRceGPkE30XBYe+HktFxuMWBR2eVQQ+Ur6yFJMoaYcNpyGq22uYJ9Wx4UAEcC0K+LNPQ=="],
|
||||
@@ -2991,10 +3120,14 @@
|
||||
|
||||
"react-lifecycles-compat": ["react-lifecycles-compat@3.0.4", "", {}, "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="],
|
||||
|
||||
"react-markdown": ["react-markdown@10.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "html-url-attributes": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "unified": "^11.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" }, "peerDependencies": { "@types/react": ">=18", "react": ">=18" } }, "sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ=="],
|
||||
|
||||
"react-medium-image-zoom": ["react-medium-image-zoom@5.4.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-BsE+EnFVQzFIlyuuQrZ9iTwyKpKkqdFZV1ImEQN573QPqGrIUuNni7aF+sZwDcxlsuOMayCr6oO/PZR/yJnbRg=="],
|
||||
|
||||
"react-otp-input": ["react-otp-input@3.1.1", "", { "peerDependencies": { "react": ">=16.8.6 || ^17.0.0 || ^18.0.0", "react-dom": ">=16.8.6 || ^17.0.0 || ^18.0.0" } }, "sha512-bjPavgJ0/Zmf/AYi4onj8FbH93IjeD+e8pWwxIJreDEWsU1ILR5fs8jEJmMGWSBe/yyvPP6X/W6Mk9UkOCkTPw=="],
|
||||
|
||||
"react-overlays": ["react-overlays@5.2.1", "", { "dependencies": { "@babel/runtime": "^7.13.8", "@popperjs/core": "^2.11.6", "@restart/hooks": "^0.4.7", "@types/warning": "^3.0.0", "dom-helpers": "^5.2.0", "prop-types": "^15.7.2", "uncontrollable": "^7.2.1", "warning": "^4.0.3" }, "peerDependencies": { "react": ">=16.3.0", "react-dom": ">=16.3.0" } }, "sha512-GLLSOLWr21CqtJn8geSwQfoJufdt3mfdsnIiQswouuQ2MMPns+ihZklxvsTDKD3cR2tF8ELbi5xUsvqVhR6WvA=="],
|
||||
|
||||
"react-photo-album": ["react-photo-album@2.4.1", "", { "peerDependencies": { "react": ">=16.8.0" } }, "sha512-dzqP5QbYAugA0uZTl3qsVldckzDXYDkDOvA8CpACl51hSEfhJmCfwhbnI4WBHnETQHv48nnNQ1jhrulst8njLA=="],
|
||||
|
||||
"react-refresh": ["react-refresh@0.17.0", "", {}, "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ=="],
|
||||
@@ -3015,6 +3148,8 @@
|
||||
|
||||
"react-syntax-highlighter": ["react-syntax-highlighter@15.6.6", "", { "dependencies": { "@babel/runtime": "^7.3.1", "highlight.js": "^10.4.1", "highlightjs-vue": "^1.0.0", "lowlight": "^1.17.0", "prismjs": "^1.30.0", "refractor": "^3.6.0" }, "peerDependencies": { "react": ">= 0.14.0" } }, "sha512-DgXrc+AZF47+HvAPEmn7Ua/1p10jNoVZVI/LoPiYdtY+OM+/nG5yefLHKJwdKqY1adMuHFbeyBaG9j64ML7vTw=="],
|
||||
|
||||
"react-to-print": ["react-to-print@3.2.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ~19" } }, "sha512-IX2D0mebKMgYTBD6s5tf9B7YRL3RFWjRoevYK8JKgRwn94Rep7PFZyeOTGjCmXofKB1SKzvPSzDrAMG4I2PIwg=="],
|
||||
|
||||
"react-toastify": ["react-toastify@11.0.5", "", { "dependencies": { "clsx": "^2.1.1" }, "peerDependencies": { "react": "^18 || ^19", "react-dom": "^18 || ^19" } }, "sha512-EpqHBGvnSTtHYhCPLxML05NLY2ZX0JURbAdNYa6BUkk+amz4wbKBQvoKQAB0ardvSarUBuY4Q4s1sluAzZwkmA=="],
|
||||
|
||||
"react-tooltip": ["react-tooltip@5.30.0", "", { "dependencies": { "@floating-ui/dom": "^1.6.1", "classnames": "^2.3.0" }, "peerDependencies": { "react": ">=16.14.0", "react-dom": ">=16.14.0" } }, "sha512-Yn8PfbgQ/wmqnL7oBpz1QiDaLKrzZMdSUUdk7nVeGTwzbxCAJiJzR4VSYW+eIO42F1INt57sPUmpgKv0KwJKtg=="],
|
||||
@@ -3421,6 +3556,8 @@
|
||||
|
||||
"tweetnacl": ["tweetnacl@0.14.5", "", {}, "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="],
|
||||
|
||||
"type": ["type@2.7.3", "", {}, "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ=="],
|
||||
|
||||
"type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="],
|
||||
|
||||
"type-detect": ["type-detect@4.1.0", "", {}, "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw=="],
|
||||
@@ -3451,6 +3588,8 @@
|
||||
|
||||
"unbox-primitive": ["unbox-primitive@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", "has-symbols": "^1.1.0", "which-boxed-primitive": "^1.1.1" } }, "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw=="],
|
||||
|
||||
"uncontrollable": ["uncontrollable@7.2.1", "", { "dependencies": { "@babel/runtime": "^7.6.3", "@types/react": ">=16.9.11", "invariant": "^2.2.4", "react-lifecycles-compat": "^3.0.4" }, "peerDependencies": { "react": ">=15.0.0" } }, "sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ=="],
|
||||
|
||||
"undici": ["undici@7.18.2", "", {}, "sha512-y+8YjDFzWdQlSE9N5nzKMT3g4a5UBX1HKowfdXh0uvAnTaqqwqB92Jt4UXBAeKekDs5IaDKyJFR4X1gYVCgXcw=="],
|
||||
|
||||
"undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="],
|
||||
@@ -3545,6 +3684,8 @@
|
||||
|
||||
"w3c-xmlserializer": ["w3c-xmlserializer@5.0.0", "", { "dependencies": { "xml-name-validator": "^5.0.0" } }, "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA=="],
|
||||
|
||||
"warning": ["warning@4.0.3", "", { "dependencies": { "loose-envify": "^1.0.0" } }, "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w=="],
|
||||
|
||||
"wasm-feature-detect": ["wasm-feature-detect@1.8.0", "", {}, "sha512-zksaLKM2fVlnB5jQQDqKXXwYHLQUVH9es+5TOOHwGOVJOCeRBCiPjwSg+3tN2AdTCzjgli4jijCH290kXb/zWQ=="],
|
||||
|
||||
"web-streams-polyfill": ["web-streams-polyfill@3.3.3", "", {}, "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw=="],
|
||||
@@ -4053,6 +4194,10 @@
|
||||
|
||||
"rc/strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="],
|
||||
|
||||
"react-big-calendar/clsx": ["clsx@1.2.1", "", {}, "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg=="],
|
||||
|
||||
"react-big-calendar/moment-timezone": ["moment-timezone@0.5.48", "", { "dependencies": { "moment": "^2.29.4" } }, "sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw=="],
|
||||
|
||||
"react-datepicker/@floating-ui/react": ["@floating-ui/react@0.27.16", "", { "dependencies": { "@floating-ui/react-dom": "^2.1.6", "@floating-ui/utils": "^0.2.10", "tabbable": "^6.0.0" }, "peerDependencies": { "react": ">=17.0.0", "react-dom": ">=17.0.0" } }, "sha512-9O8N4SeG2z++TSM8QA/KTeKFBVCNEz/AGS7gWPJf6KFRzmRWixFRnCnkPHRDwSVZW6QPDO6uT0P2SpWNKCc9/g=="],
|
||||
|
||||
"react-docgen/doctrine": ["doctrine@3.0.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w=="],
|
||||
|
||||
@@ -244,7 +244,7 @@ export default function useQRLoginSession({
|
||||
// Connect WebSocket
|
||||
connectWebSocket(sessionId)
|
||||
} catch (error) {
|
||||
console.error('Failed to initialize QR session:', error)
|
||||
console.error('Failed to initialize QR session: ', error)
|
||||
setStatus('error')
|
||||
toast.error(t('messages.unknownError'))
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ const addFontToStylesheet = (font: FontFamily) => {
|
||||
sheet.insertRule(fontFaceRule, ruleIndex)
|
||||
ruleIndices.push(ruleIndex)
|
||||
} catch (err) {
|
||||
console.error('Failed to insert font rule:', fontFaceRule, err)
|
||||
console.error('Failed to insert font rule: ', fontFaceRule, err)
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
@@ -78,8 +78,8 @@ i18n
|
||||
}
|
||||
}
|
||||
})
|
||||
.catch(() => {
|
||||
console.error('Failed to initialize i18n')
|
||||
.catch(err => {
|
||||
console.error('Failed to initialize i18n: ', err)
|
||||
})
|
||||
|
||||
export default i18n
|
||||
|
||||
@@ -7,7 +7,6 @@ import { type Logger, createLogger } from './logger'
|
||||
export interface CLILogger extends Logger {
|
||||
success(message: string): void
|
||||
print(message: string): void
|
||||
actionableError(message: string, suggestion: string): void
|
||||
}
|
||||
|
||||
function wrapWithCLIMethods(logger: Logger): CLILogger {
|
||||
@@ -25,12 +24,7 @@ function wrapWithCLIMethods(logger: Logger): CLILogger {
|
||||
print(message: string) {
|
||||
logger.info(message)
|
||||
},
|
||||
actionableError(message: string, suggestion: string) {
|
||||
logger.error(message)
|
||||
logger.info(
|
||||
`${chalk.yellow('→')} ${chalk.dim('Suggestion:')} ${suggestion}`
|
||||
)
|
||||
},
|
||||
|
||||
child(bindings: object): CLILogger {
|
||||
return wrapWithCLIMethods(logger.child(bindings))
|
||||
}
|
||||
|
||||
@@ -62,8 +62,8 @@ i18n
|
||||
}
|
||||
}
|
||||
})
|
||||
.catch(() => {
|
||||
console.error('Failed to initialize i18n')
|
||||
.catch(err => {
|
||||
console.error('Failed to initialize i18n: ', err)
|
||||
})
|
||||
|
||||
export default i18n
|
||||
|
||||
@@ -14,13 +14,15 @@ export default function EncryptionWrapper({
|
||||
}
|
||||
|
||||
if (error) {
|
||||
console.error('Encryption initialization error: ', error)
|
||||
|
||||
return (
|
||||
<EmptyStateScreen
|
||||
icon="tabler:lock-off"
|
||||
message={{
|
||||
title: 'Encryption failed',
|
||||
description:
|
||||
'Failed to initialize encryption. Please try again later.'
|
||||
'Failed to initialize encryption. Check the console for more details.'
|
||||
}}
|
||||
/>
|
||||
)
|
||||
|
||||
@@ -33,7 +33,7 @@ export default function EncryptionProvider({
|
||||
initializeEncryption(apiHost)
|
||||
.then(() => setReady(true))
|
||||
.catch(err => {
|
||||
console.error('Failed to initialize encryption:', err)
|
||||
console.error('Failed to initialize encryption: ', err)
|
||||
setError(err.message)
|
||||
})
|
||||
}, [apiHost, ready])
|
||||
|
||||
@@ -43,9 +43,8 @@ export async function downloadPocketBaseBinary(): Promise<void> {
|
||||
osName = 'windows'
|
||||
break
|
||||
default:
|
||||
logger.actionableError(
|
||||
`Unsupported platform: ${platform}`,
|
||||
'PocketBase supports darwin, linux, and windows'
|
||||
logger.error(
|
||||
`Unsupported platform: ${platform}. PocketBase supports darwin, linux, and windows`
|
||||
)
|
||||
process.exit(1)
|
||||
}
|
||||
@@ -63,9 +62,8 @@ export async function downloadPocketBaseBinary(): Promise<void> {
|
||||
archName = 'amd64'
|
||||
break
|
||||
default:
|
||||
logger.actionableError(
|
||||
`Unsupported architecture: ${arch}`,
|
||||
'PocketBase supports arm64 and amd64'
|
||||
logger.error(
|
||||
`Unsupported architecture: ${arch}. PocketBase supports arm64 and amd64`
|
||||
)
|
||||
process.exit(1)
|
||||
}
|
||||
@@ -116,10 +114,8 @@ export async function downloadPocketBaseBinary(): Promise<void> {
|
||||
|
||||
logger.success(`Downloaded PocketBase ${chalk.blue(`v${PB_VERSION}`)}`)
|
||||
} catch (error) {
|
||||
logger.actionableError(
|
||||
`Failed to download PocketBase: ${error instanceof Error ? error.message : 'Unknown error'}`,
|
||||
'Check your internet connection and try again'
|
||||
)
|
||||
logger.error('Failed to download PocketBase.')
|
||||
logger.debug(`Error details: ${error}`)
|
||||
process.exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,9 +14,8 @@ export function validatePocketBaseNotInitialized(
|
||||
const pbInitialized = fs.existsSync(PB_DATA_DIR)
|
||||
|
||||
if (pbInitialized && exitOnFailure) {
|
||||
logger.actionableError(
|
||||
`PocketBase is already initialized in ${chalk.blue(PB_DATA_DIR)}, aborting.`,
|
||||
'If you want to re-initialize, please remove the existing pb_data folder in the database directory.'
|
||||
logger.warn(
|
||||
`PocketBase is already initialized in ${chalk.blue(PB_DATA_DIR)}, skipping.`
|
||||
)
|
||||
process.exit(1)
|
||||
}
|
||||
@@ -48,10 +47,8 @@ export function createPocketBaseSuperuser(
|
||||
|
||||
logger.success('Created superuser')
|
||||
} catch (error) {
|
||||
logger.actionableError(
|
||||
`Failed to create superuser: ${error instanceof Error ? error.message : 'Unknown error'}`,
|
||||
'Check your PocketBase configuration and try again'
|
||||
)
|
||||
logger.error(`Failed to create superuser`)
|
||||
logger.debug(`Error details: ${error}`)
|
||||
process.exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,13 +31,8 @@ export async function generateMigrationsHandler(
|
||||
|
||||
logger.success('Migrations generated successfully')
|
||||
} catch (error) {
|
||||
logger.actionableError(
|
||||
'Migration script failed',
|
||||
'Check the schema definitions and PocketBase configuration'
|
||||
)
|
||||
logger.debug(
|
||||
`Error details: ${error instanceof Error ? error.message : String(error)}`
|
||||
)
|
||||
logger.error('Migration script failed')
|
||||
logger.debug(`Error details: ${error}`)
|
||||
|
||||
killPB?.()
|
||||
process.exit(1)
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import chalk from 'chalk'
|
||||
import fs from 'fs'
|
||||
|
||||
import { PB_BINARY_PATH, PB_DIR, PB_KWARGS } from '@/constants/db'
|
||||
@@ -25,17 +24,15 @@ export const SERVICE_COMMANDS: Record<string, ServiceConfig> = {
|
||||
}
|
||||
|
||||
if (checkPortInUse(8090)) {
|
||||
logger.actionableError(
|
||||
'No Pocketbase instance found running, but port 8090 is already in use.',
|
||||
'Please free up the port. Are you using the port for another application? (e.g., port forwarding, etc.)'
|
||||
logger.error(
|
||||
'No Pocketbase instance found running, but port 8090 is already in use.'
|
||||
)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
if (!fs.existsSync(PB_BINARY_PATH)) {
|
||||
logger.actionableError(
|
||||
`PocketBase binary does not exist: ${PB_BINARY_PATH}`,
|
||||
`Please run "${chalk.blue('bun forge db init')}" to initialize the database`
|
||||
logger.error(
|
||||
`PocketBase binary does not exist: ${PB_BINARY_PATH}. Please run "bun forge db init" to initialize the database.`
|
||||
)
|
||||
process.exit(1)
|
||||
}
|
||||
@@ -57,10 +54,7 @@ export const SERVICE_COMMANDS: Record<string, ServiceConfig> = {
|
||||
const PORT = process.env.PORT || '3636'
|
||||
|
||||
if (checkPortInUse(Number(PORT))) {
|
||||
logger.actionableError(
|
||||
`Port ${PORT} is already in use.`,
|
||||
'Please free up the port or set a different PORT environment variable.'
|
||||
)
|
||||
logger.error(`Port ${PORT} is already in use.`)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
|
||||
@@ -65,10 +65,7 @@ export async function startAllServices(): Promise<void> {
|
||||
prefixColors: ['cyan', 'green', 'magenta']
|
||||
})
|
||||
} catch (error) {
|
||||
logger.actionableError(
|
||||
'Failed to start all services',
|
||||
'Ensure PocketBase is properly configured and all dependencies are installed'
|
||||
)
|
||||
logger.error('Failed to start all services')
|
||||
logger.debug(`Error details: ${error}`)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
@@ -30,10 +30,7 @@ export function devHandler(service: string, extraArgs: string[] = []): void {
|
||||
try {
|
||||
startSingleService(service, extraArgs)
|
||||
} catch (error) {
|
||||
logger.actionableError(
|
||||
`Failed to start ${chalk.blue(service)} service`,
|
||||
'Check if all required dependencies are installed and environment variables are set'
|
||||
)
|
||||
logger.error(`Failed to start ${chalk.blue(service)} service`)
|
||||
logger.debug(`Error details: ${error}`)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
@@ -11,9 +11,8 @@ async function ensureLocaleNotInUse(shortName: string) {
|
||||
killPB?.()
|
||||
|
||||
if (user.language === shortName) {
|
||||
logger.actionableError(
|
||||
`Cannot uninstall locale "${shortName}"`,
|
||||
'This language is currently selected. Change your language first.'
|
||||
logger.error(
|
||||
`Cannot uninstall locale "${shortName}". It is currently selected by the user.`
|
||||
)
|
||||
|
||||
process.exit(1)
|
||||
|
||||
@@ -19,10 +19,7 @@ function getPackagesToCheck(langCode?: string) {
|
||||
: localePackages
|
||||
|
||||
if (!packagesToCheck?.length) {
|
||||
logger.actionableError(
|
||||
`Locale "${langCode}" is not installed`,
|
||||
'Run "bun forge locales list" to see installed locales'
|
||||
)
|
||||
logger.error(`Locale "${langCode}" is not installed`)
|
||||
|
||||
process.exit(0)
|
||||
}
|
||||
|
||||
@@ -20,9 +20,8 @@ export default async function validateLocalesAuthor(modulePath: string) {
|
||||
if (usernamePrefix === 'lifeforge') {
|
||||
validateMaintainerAccess(auth.username || '')
|
||||
} else {
|
||||
logger.actionableError(
|
||||
`Cannot publish as "${auth.username}" - package belongs to "${usernamePrefix}"`,
|
||||
`You can only publish packages starting with @lifeforge/${auth.username}--`
|
||||
logger.error(
|
||||
`Cannot publish as "${auth.username}" - package belongs to "${usernamePrefix}". You can only publish packages starting with @lifeforge/${auth.username}--`
|
||||
)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
@@ -15,17 +15,15 @@ export async function installLocaleHandler(langCode: string): Promise<void> {
|
||||
)
|
||||
|
||||
if (!/^@lifeforge\/lang-[a-z]{2}(-[A-Z]{2})?$/i.test(fullName)) {
|
||||
logger.actionableError(
|
||||
`Invalid locale name: ${chalk.blue(langCode)}`,
|
||||
'Locale names should follow the format "xx" or "xx-XX", where "xx" is a two-letter language code and "XX" is a two-letter country code.'
|
||||
logger.error(
|
||||
`Invalid locale name: ${chalk.blue(langCode)}. Locale names should follow the format "xx" or "xx-XX", where "xx" is a two-letter language code and "XX" is a two-letter country code.`
|
||||
)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
if (fs.existsSync(targetDir)) {
|
||||
logger.actionableError(
|
||||
`Locale already exists at locales/${shortName}`,
|
||||
`Remove it first with: bun forge locales uninstall ${shortName}`
|
||||
logger.error(
|
||||
`Locale already exists at locales/${shortName}. Remove it first with: bun forge locales uninstall ${shortName}`
|
||||
)
|
||||
|
||||
process.exit(1)
|
||||
@@ -41,10 +39,8 @@ export async function installLocaleHandler(langCode: string): Promise<void> {
|
||||
|
||||
logger.success(`Installed ${chalk.blue(fullName)}`)
|
||||
} catch (error) {
|
||||
logger.actionableError(
|
||||
`Failed to install ${chalk.blue(fullName)}`,
|
||||
'Make sure the locale exists in the registry'
|
||||
)
|
||||
throw error
|
||||
logger.error(`Failed to install ${chalk.blue(fullName)}`)
|
||||
logger.debug(`Error details: ${error}`)
|
||||
process.exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,12 +16,9 @@ export async function publishLocaleHandler(langCode: string): Promise<void> {
|
||||
const { fullName, targetDir } = normalizePackage(langCode, 'locale')
|
||||
|
||||
if (!fs.existsSync(targetDir)) {
|
||||
logger.actionableError(
|
||||
`Locale "${langCode}" not found in locales/`,
|
||||
'Run "bun forge locales list" to see available locales'
|
||||
)
|
||||
logger.error(`Locale "${langCode}" not found in locales/`)
|
||||
|
||||
return
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
logger.info('Validating locale structure...')
|
||||
@@ -48,11 +45,8 @@ export async function publishLocaleHandler(langCode: string): Promise<void> {
|
||||
} catch (error) {
|
||||
revertPackageVersion(targetDir, oldVersion)
|
||||
|
||||
logger.actionableError(
|
||||
`Failed to publish ${chalk.blue(fullName)}`,
|
||||
'Check if you are properly authenticated with the registry'
|
||||
)
|
||||
|
||||
throw error
|
||||
logger.error(`Failed to publish ${chalk.blue(fullName)}`)
|
||||
logger.debug(`Error details: ${error}`)
|
||||
process.exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,12 +19,9 @@ export async function uninstallLocaleHandler(langCode: string): Promise<void> {
|
||||
const found = findPackageName(fullName)
|
||||
|
||||
if (!found) {
|
||||
logger.actionableError(
|
||||
`Locale "${shortName}" is not installed`,
|
||||
'Run "bun forge locales list" to see installed locales'
|
||||
)
|
||||
logger.error(`Locale "${shortName}" is not installed`)
|
||||
|
||||
return
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
await ensureLocaleNotInUse(shortName)
|
||||
|
||||
@@ -32,7 +32,8 @@ export async function upgradeLocaleHandler(langCode?: string): Promise<void> {
|
||||
logger.success(`Upgraded ${chalk.blue(upgrade.name)}`)
|
||||
upgradedCount++
|
||||
} catch (error) {
|
||||
logger.error(`Failed to upgrade ${chalk.blue(upgrade.name)}: ${error}`)
|
||||
logger.error(`Failed to upgrade ${chalk.blue(upgrade.name)}`)
|
||||
logger.debug(`Error details: ${error}`)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -29,10 +29,7 @@ export function validateLocaleStructureHandler(lang: string) {
|
||||
const { targetDir } = normalizePackage(lang, 'locale')
|
||||
|
||||
if (!fs.existsSync(targetDir)) {
|
||||
logger.actionableError(
|
||||
`Locale "${lang}" not found in locales/`,
|
||||
'Run "bun forge locales list" to see available locales'
|
||||
)
|
||||
logger.error(`Locale "${lang}" not found in locales/`)
|
||||
|
||||
process.exit(1)
|
||||
}
|
||||
@@ -40,10 +37,7 @@ export function validateLocaleStructureHandler(lang: string) {
|
||||
const packageJsonPath = path.join(targetDir, 'package.json')
|
||||
|
||||
if (!fs.existsSync(packageJsonPath)) {
|
||||
logger.actionableError(
|
||||
`Locale "${lang}" is missing package.json`,
|
||||
'Run "bun forge locales list" to see available locales'
|
||||
)
|
||||
logger.error(`Locale "${lang}" is missing package.json`)
|
||||
|
||||
process.exit(1)
|
||||
}
|
||||
@@ -63,9 +57,8 @@ export function validateLocaleStructureHandler(lang: string) {
|
||||
}
|
||||
|
||||
if (`@lifeforge/${lang}` !== packageJson.data.name) {
|
||||
logger.actionableError(
|
||||
`The folder name "${lang}" does not match the package name "${packageJson.data.name}"`,
|
||||
'Please make sure the folder name matches the package name'
|
||||
logger.error(
|
||||
`The folder name "${lang}" does not match the package name "${packageJson.data.name}"`
|
||||
)
|
||||
|
||||
process.exit(1)
|
||||
@@ -82,10 +75,7 @@ export function validateLocaleStructureHandler(lang: string) {
|
||||
file.endsWith('.json')
|
||||
)
|
||||
) {
|
||||
logger.actionableError(
|
||||
`Locale "${lang}" contains non-JSON files`,
|
||||
'Please make sure all files in the locale directory are JSON files'
|
||||
)
|
||||
logger.error(`Locale "${lang}" contains non-JSON files`)
|
||||
|
||||
process.exit(1)
|
||||
}
|
||||
@@ -96,10 +86,7 @@ export function validateLocaleStructureHandler(lang: string) {
|
||||
try {
|
||||
JSON.parse(fs.readFileSync(filePath, 'utf-8'))
|
||||
} catch {
|
||||
logger.actionableError(
|
||||
`Locale "${lang}" contains invalid JSON files "${file}"`,
|
||||
'Please make sure all files in the locale directory are valid JSON files'
|
||||
)
|
||||
logger.error(`Locale "${lang}" contains invalid JSON files "${file}"`)
|
||||
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import logger from '@/utils/logger'
|
||||
import chalk from 'chalk'
|
||||
|
||||
import logger from '@/utils/logger'
|
||||
|
||||
/**
|
||||
* Extract username and module name from a package name format
|
||||
*
|
||||
@@ -19,9 +20,8 @@ export function parsePackageName(
|
||||
|
||||
if (!withoutScope.includes('--')) {
|
||||
if (!isLibModule) {
|
||||
logger.actionableError(
|
||||
`Invalid package name: ${chalk.blue(packageName)}`,
|
||||
'Package name must include "--" separator (e.g., username--module-name)'
|
||||
logger.error(
|
||||
`Invalid package name: ${chalk.blue(packageName)}. Package name must include "--" separator (e.g., username--module-name)`
|
||||
)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
@@ -17,9 +17,8 @@ export default async function validateModuleAuthor(modulePath: string) {
|
||||
)
|
||||
|
||||
if (!packageJson.success) {
|
||||
logger.actionableError(
|
||||
'Invalid package.json',
|
||||
'Please fix the package.json file'
|
||||
logger.error(
|
||||
'Invalid package.json. Please refer to the documentation for the correct format.'
|
||||
)
|
||||
process.exit(1)
|
||||
}
|
||||
@@ -32,9 +31,8 @@ export default async function validateModuleAuthor(modulePath: string) {
|
||||
if (usernamePrefix === 'lifeforge') {
|
||||
validateMaintainerAccess(auth.username || '')
|
||||
} else {
|
||||
logger.actionableError(
|
||||
`Cannot publish as "${auth.username}" - package belongs to "${usernamePrefix}"`,
|
||||
`You can only publish packages starting with @lifeforge/${auth.username}--`
|
||||
logger.error(
|
||||
`Cannot publish as "${auth.username}" - package belongs to "${usernamePrefix}". You can only publish packages starting with @lifeforge/${auth.username}--`
|
||||
)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
@@ -85,7 +85,8 @@ export async function buildModuleHandler(
|
||||
})
|
||||
clientBuiltCount++
|
||||
} catch (error) {
|
||||
logger.error(`Failed to build ${shortName} client: ${error}`)
|
||||
logger.error(`Failed to build ${shortName} client.`)
|
||||
logger.debug(`Error details: ${error}`)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -100,7 +101,8 @@ export async function buildModuleHandler(
|
||||
})
|
||||
serverBuiltCount++
|
||||
} catch (error) {
|
||||
logger.error(`Failed to build ${shortName} server: ${error}`)
|
||||
logger.error(`Failed to build ${shortName} server.`)
|
||||
logger.debug(`Error details: ${error}`)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -194,10 +194,7 @@ async function compareModule(packageName: string): Promise<boolean | null> {
|
||||
const { fullName, shortName, targetDir } = normalizePackage(packageName)
|
||||
|
||||
if (!fs.existsSync(targetDir)) {
|
||||
logger.actionableError(
|
||||
`Module ${chalk.blue(shortName)} is not installed`,
|
||||
'Run "bun forge modules list" to see installed modules'
|
||||
)
|
||||
logger.error(`Module ${chalk.blue(shortName)} is not installed`)
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
@@ -44,26 +44,19 @@ export async function installModuleHandler(
|
||||
const { fullName, shortName, targetDir } = normalizePackage(moduleName)
|
||||
|
||||
if (!/^@lifeforge\/[a-z0-9-_]+--[a-z0-9-_]+$/i.test(fullName)) {
|
||||
logger.actionableError(
|
||||
`Invalid module name: ${chalk.blue(moduleName)}`,
|
||||
'Module names can only contain letters, numbers, hyphens, and underscores.'
|
||||
logger.error(
|
||||
`Invalid module name: ${chalk.blue(moduleName)}. Module names can only contain letters, numbers, hyphens, and underscores.`
|
||||
)
|
||||
continue
|
||||
}
|
||||
|
||||
if (fs.existsSync(targetDir)) {
|
||||
logger.actionableError(
|
||||
`Module already exists at apps/${shortName}`,
|
||||
`Remove it first with: bun forge modules uninstall ${shortName}`
|
||||
)
|
||||
logger.error(`Module already exists at apps/${shortName}`)
|
||||
continue
|
||||
}
|
||||
|
||||
if (!(await checkPackageExists(fullName))) {
|
||||
logger.actionableError(
|
||||
`Module ${chalk.blue(fullName)} does not exist in registry`,
|
||||
'Check the module name and try again'
|
||||
)
|
||||
logger.error(`Module ${chalk.blue(fullName)} does not exist in registry`)
|
||||
continue
|
||||
}
|
||||
|
||||
|
||||
@@ -60,10 +60,7 @@ export async function publishModuleHandler(moduleName: string): Promise<void> {
|
||||
const modulePath = path.join(ROOT_DIR, 'apps', moduleName)
|
||||
|
||||
if (!fs.existsSync(modulePath)) {
|
||||
logger.actionableError(
|
||||
`Module ${chalk.blue(moduleName)} not found in apps/`,
|
||||
'Make sure the module exists in the apps directory'
|
||||
)
|
||||
logger.error(`Module ${chalk.blue(moduleName)} not found in apps/`)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
@@ -96,10 +93,7 @@ export async function publishModuleHandler(moduleName: string): Promise<void> {
|
||||
} catch (error) {
|
||||
revertPackageVersion(modulePath, oldVersion)
|
||||
|
||||
logger.actionableError(
|
||||
`Publish failed for ${chalk.blue(moduleName)}`,
|
||||
'Check npm authentication and try again'
|
||||
)
|
||||
logger.error(`Publish failed for ${chalk.blue(moduleName)}`)
|
||||
logger.debug(`Error: ${error}`)
|
||||
process.exit(1)
|
||||
} finally {
|
||||
|
||||
@@ -31,9 +31,8 @@ export async function uninstallModuleHandler(
|
||||
const { targetDir, fullName } = normalizePackage(moduleName)
|
||||
|
||||
if (!findPackageName(fullName, 'apps')) {
|
||||
logger.actionableError(
|
||||
`Module ${chalk.blue(fullName)} is not installed`,
|
||||
'Run "bun forge modules list" to see installed modules'
|
||||
logger.error(
|
||||
`Module ${chalk.blue(fullName)} not found in apps/package.json`
|
||||
)
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -75,7 +75,8 @@ async function upgradeModule(
|
||||
|
||||
return true
|
||||
} catch (error) {
|
||||
logger.error(`Failed to upgrade ${chalk.blue(fullName)}: ${error}`)
|
||||
logger.error(`Failed to upgrade ${chalk.blue(fullName)}.`)
|
||||
logger.debug(`Error details: ${error}`)
|
||||
|
||||
if (fs.existsSync(backupPath)) {
|
||||
fs.renameSync(backupPath, targetDir)
|
||||
@@ -105,9 +106,8 @@ export async function upgradeModuleHandler(moduleName?: string): Promise<void> {
|
||||
const mod = modules[fullName]
|
||||
|
||||
if (!mod) {
|
||||
logger.actionableError(
|
||||
`Module ${chalk.blue(moduleName)} is not installed`,
|
||||
'Run "bun forge modules list" to see installed modules'
|
||||
logger.error(
|
||||
`Module ${chalk.blue(moduleName)} not found in apps/package.json`
|
||||
)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
@@ -26,9 +26,8 @@ export function validateProjectArguments(projects: string[] | undefined): void {
|
||||
const validation = validateProjects(projects, validProjects)
|
||||
|
||||
if (!validation.isValid) {
|
||||
logger.actionableError(
|
||||
`Invalid project(s): ${validation.invalidProjects.join(', ')}`,
|
||||
'Available projects: ' + validProjects.join(', ')
|
||||
logger.error(
|
||||
`Invalid project(s): ${validation.invalidProjects.join(', ')}. Available projects: ${validProjects.join(', ')}`
|
||||
)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
@@ -38,8 +38,9 @@ export async function getAPIKey(): Promise<string | null> {
|
||||
return CryptoJS.AES.decrypt(apiKey.key, MASTER_KEY).toString(
|
||||
CryptoJS.enc.Utf8
|
||||
)
|
||||
} catch {
|
||||
} catch (error) {
|
||||
logger.error('Failed to decrypt OpenAI API key.')
|
||||
logger.debug(`Error details: ${error}`)
|
||||
|
||||
return null
|
||||
} finally {
|
||||
|
||||
@@ -34,10 +34,8 @@ export default function executeCommand(
|
||||
try {
|
||||
cmd = typeof command === 'function' ? command() : command
|
||||
} catch (error) {
|
||||
logger.actionableError(
|
||||
`Failed to generate command: ${error}`,
|
||||
'Check the command generation logic for errors'
|
||||
)
|
||||
logger.error(`Failed to generate command.`)
|
||||
logger.debug(`Error details: ${error}`)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
@@ -81,10 +79,7 @@ export default function executeCommand(
|
||||
throw error
|
||||
}
|
||||
|
||||
logger.actionableError(
|
||||
`Command execution failed: ${cmd}`,
|
||||
'Check if the command exists and you have the necessary permissions'
|
||||
)
|
||||
logger.error(`Command execution failed: ${cmd}`)
|
||||
logger.debug(`Error details: ${error}`)
|
||||
process.exit(1)
|
||||
}
|
||||
@@ -138,11 +133,7 @@ export function installPackage(
|
||||
const installedPath = path.join(ROOT_DIR, 'node_modules', fullName)
|
||||
|
||||
if (!fs.existsSync(installedPath)) {
|
||||
logger.actionableError(
|
||||
`Failed to install ${fullName}`,
|
||||
'Check if the package exists in the registry'
|
||||
)
|
||||
|
||||
logger.error(`Failed to find installed package at ${installedPath}`)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
|
||||
@@ -61,7 +61,8 @@ export function restartServerContainer(): void {
|
||||
execSync(`docker restart ${SERVER_CONTAINER}`, { stdio: 'inherit' })
|
||||
logger.success('Server container restarted')
|
||||
} catch (error) {
|
||||
logger.error(`Failed to restart Docker server: ${error}`)
|
||||
logger.error(`Failed to restart Docker server.`)
|
||||
logger.debug(`Error details: ${error}`)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -91,7 +92,8 @@ export function stopService(serviceName: string): void {
|
||||
executeCommand(`docker stop ${serviceName}`, { stdio: 'inherit' })
|
||||
logger.success(`Service ${serviceName} stopped`)
|
||||
} catch (error) {
|
||||
logger.error(`Failed to stop Docker service ${serviceName}: ${error}`)
|
||||
logger.error(`Failed to stop Docker service ${serviceName}.`)
|
||||
logger.debug(`Error details: ${error}`)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -105,6 +107,7 @@ export function startService(serviceName: string): void {
|
||||
executeCommand(`docker start ${serviceName}`, { stdio: 'inherit' })
|
||||
logger.success(`Service ${serviceName} started`)
|
||||
} catch (error) {
|
||||
logger.error(`Failed to start Docker service ${serviceName}: ${error}`)
|
||||
logger.error(`Failed to start Docker service ${serviceName}.`)
|
||||
logger.debug(`Error details: ${error}`)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,10 +28,8 @@ export function validateMaintainerAccess(username: string): void {
|
||||
|
||||
process.exit(1)
|
||||
} catch (error) {
|
||||
logger.actionableError(
|
||||
`Failed to check maintainer access for ${username}.`,
|
||||
`Error: ${error instanceof Error ? error.message : String(error)}`
|
||||
)
|
||||
logger.error(`Failed to check maintainer access for ${username}.`)
|
||||
logger.debug(`Error details: ${error}`)
|
||||
|
||||
process.exit(1)
|
||||
}
|
||||
@@ -74,7 +72,8 @@ export function getGithubUser(): { name: string; email: string } | null {
|
||||
|
||||
return null
|
||||
} catch (error) {
|
||||
logger.debug(`Failed to fetch GitHub user info: ${error}`)
|
||||
logger.error(`Failed to fetch GitHub user info.`)
|
||||
logger.debug(`Error details: ${error}`)
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
@@ -33,9 +33,8 @@ export function getEnvVars<const T extends readonly string[]>(
|
||||
}
|
||||
|
||||
if (missing.length > 0) {
|
||||
logger.actionableError(
|
||||
`Missing required environment variables: ${missing.join(', ')}`,
|
||||
'Use the "forge db init" command to set up the environment variables, or set them manually in your env/.env.local file'
|
||||
logger.error(
|
||||
`Missing required environment variables: ${missing.join(', ')}`
|
||||
)
|
||||
process.exit(1)
|
||||
}
|
||||
@@ -62,10 +61,7 @@ export function getEnvVar(varName: string, fallback?: string): string {
|
||||
return fallback
|
||||
}
|
||||
|
||||
logger.actionableError(
|
||||
`Missing required environment variable: ${varName}`,
|
||||
'Use the "forge db init" command to set up the environment variables, or set them manually in your env/.env.local file'
|
||||
)
|
||||
logger.error(`Missing required environment variable: ${varName}`)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
|
||||
@@ -49,6 +49,7 @@ export default function initGitRepository(targetDir: string): void {
|
||||
|
||||
logger.debug(`Git repository initialized with remote: ${repoUrl}`)
|
||||
} catch (error) {
|
||||
logger.debug(`Failed to initialize git repository: ${error}`)
|
||||
logger.error(`Failed to initialize git repository.`)
|
||||
logger.debug(`Error details: ${error}`)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,10 +57,7 @@ function ensurePackageJsonExists(target: PackageJsonTarget): void {
|
||||
}
|
||||
|
||||
if (target === 'root') {
|
||||
logger.actionableError(
|
||||
'Root package.json not found',
|
||||
'Ensure you are in the LifeForge project root directory'
|
||||
)
|
||||
logger.error('Root package.json not found')
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
|
||||
@@ -63,9 +63,8 @@ export function checkRunningPBInstances(exitOnError = true): boolean {
|
||||
|
||||
if (validPids.length > 0) {
|
||||
if (exitOnError) {
|
||||
logger.actionableError(
|
||||
`PocketBase is already running (PID: ${validPids.join(', ')})`,
|
||||
'Stop the existing instance with "pkill -f pocketbase" before proceeding'
|
||||
logger.error(
|
||||
`PocketBase is already running (PID: ${validPids.join(', ')})`
|
||||
)
|
||||
process.exit(1)
|
||||
}
|
||||
@@ -108,10 +107,7 @@ export async function startPBServer(): Promise<number> {
|
||||
}
|
||||
|
||||
if (output.includes('bind: address already in use')) {
|
||||
logger.actionableError(
|
||||
'Port 8090 is already in use',
|
||||
'Run "pkill -f pocketbase" to stop existing instances, or check for other apps using port 8090'
|
||||
)
|
||||
logger.error('Port 8090 is already in use')
|
||||
process.exit(1)
|
||||
}
|
||||
})
|
||||
@@ -160,10 +156,10 @@ export async function startPocketbase(): Promise<(() => void) | null> {
|
||||
killExistingProcess(pbPid)
|
||||
}
|
||||
} catch (error) {
|
||||
logger.actionableError(
|
||||
`Failed to start PocketBase server: ${error instanceof Error ? error.message : 'Unknown error'}`,
|
||||
'Run "bun forge db init" to initialize the database or check if the PocketBase binary exists'
|
||||
logger.error(
|
||||
`Failed to start PocketBase server: ${error instanceof Error ? error.message : 'Unknown error'}`
|
||||
)
|
||||
logger.debug(`Error details: ${error}`)
|
||||
process.exit(1)
|
||||
}
|
||||
}
|
||||
@@ -230,10 +226,8 @@ export default async function getPBInstance(createNewInstance = true): Promise<{
|
||||
killPB
|
||||
}
|
||||
} catch (error) {
|
||||
logger.actionableError(
|
||||
`Authentication failed: ${error instanceof Error ? error.message : 'Unknown error'}`,
|
||||
'Check PB_EMAIL and PB_PASSWORD in env/.env.local are correct'
|
||||
)
|
||||
logger.error(`Pocketbase authentication failed.`)
|
||||
logger.debug(`Error details: ${error}`)
|
||||
process.exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user