mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-17 00:40:14 +01:00
📦 chore: Bump Packages (#5791)
* chore: started with updating packages to new version. (a lot are outdated) * fix: eslint to pass when no matching files changed. * fix: eslint to pass when no matching files changed. * fix: issue with strict in actions with the test * chore: update more dependencies * feat: scan for unused imported packages * feat: scan for unused imported packages * feat: scan for unused imported packages * feat: scan for unused imported packages * feat: scan for unused imported packages * feat: scan for unused imported packages * feat: scan for unused imported packages * chore: removed Unused NPM Packages * chore: removed Unused NPM Packages in `client/package.json` * chore: removed Unused NPM Packages in `client/package.json` * chore: Only comments when there are actual unused dependencies. * chore: Only comments when there are actual unused dependencies. * ci: test if it detects unused packages. * ci: removed unused packages. * ci: both static and dynamic i18n keys * ci: revert back to no dynamic. use official nesting * chore: remove override package: ajv
This commit is contained in:
parent
936199b950
commit
404b27d045
8 changed files with 801 additions and 615 deletions
25
.github/workflows/eslint-ci.yml
vendored
25
.github/workflows/eslint-ci.yml
vendored
|
|
@ -41,19 +41,32 @@ jobs:
|
||||||
# Extract the base commit SHA from the pull_request event payload.
|
# Extract the base commit SHA from the pull_request event payload.
|
||||||
BASE_SHA=$(jq --raw-output .pull_request.base.sha "$GITHUB_EVENT_PATH")
|
BASE_SHA=$(jq --raw-output .pull_request.base.sha "$GITHUB_EVENT_PATH")
|
||||||
echo "Base commit SHA: $BASE_SHA"
|
echo "Base commit SHA: $BASE_SHA"
|
||||||
|
|
||||||
# List files changed between the base commit and HEAD, filtering only those in api/ or client/
|
# Get changed files (only JS/TS files in api/ or client/)
|
||||||
CHANGED_FILES=$(git diff --name-only --diff-filter=ACMRTUXB "$BASE_SHA" HEAD | grep -E '^(api|client)/.*\.(js|jsx|ts|tsx)$')
|
CHANGED_FILES=$(git diff --name-only --diff-filter=ACMRTUXB "$BASE_SHA" HEAD | grep -E '^(api|client)/.*\.(js|jsx|ts|tsx)$' || true)
|
||||||
echo "Files to lint:"
|
|
||||||
|
# Debug output
|
||||||
|
echo "Changed files:"
|
||||||
echo "$CHANGED_FILES"
|
echo "$CHANGED_FILES"
|
||||||
|
|
||||||
# Run ESLint on the changed files.
|
# Ensure there are files to lint before running ESLint
|
||||||
|
if [[ -z "$CHANGED_FILES" ]]; then
|
||||||
|
echo "No matching files changed. Skipping ESLint."
|
||||||
|
echo "UPLOAD_SARIF=false" >> $GITHUB_ENV
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set variable to allow SARIF upload
|
||||||
|
echo "UPLOAD_SARIF=true" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
# Run ESLint
|
||||||
npx eslint --no-error-on-unmatched-pattern \
|
npx eslint --no-error-on-unmatched-pattern \
|
||||||
--config eslint.config.mjs \
|
--config eslint.config.mjs \
|
||||||
--format @microsoft/eslint-formatter-sarif \
|
--format @microsoft/eslint-formatter-sarif \
|
||||||
--output-file eslint-results.sarif $CHANGED_FILES || true
|
--output-file eslint-results.sarif $CHANGED_FILES || true
|
||||||
|
|
||||||
- name: Upload analysis results to GitHub
|
- name: Upload analysis results to GitHub
|
||||||
|
if: env.UPLOAD_SARIF == 'true'
|
||||||
uses: github/codeql-action/upload-sarif@v3
|
uses: github/codeql-action/upload-sarif@v3
|
||||||
with:
|
with:
|
||||||
sarif_file: eslint-results.sarif
|
sarif_file: eslint-results.sarif
|
||||||
|
|
|
||||||
147
.github/workflows/unused-packages.yml
vendored
Normal file
147
.github/workflows/unused-packages.yml
vendored
Normal file
|
|
@ -0,0 +1,147 @@
|
||||||
|
name: Detect Unused NPM Packages
|
||||||
|
|
||||||
|
on: [pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
detect-unused-packages:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Use Node.js 20.x
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: 20
|
||||||
|
cache: 'npm'
|
||||||
|
|
||||||
|
- name: Install depcheck
|
||||||
|
run: npm install -g depcheck
|
||||||
|
|
||||||
|
- name: Validate JSON files
|
||||||
|
run: |
|
||||||
|
for FILE in package.json client/package.json api/package.json; do
|
||||||
|
if [[ -f "$FILE" ]]; then
|
||||||
|
jq empty "$FILE" || (echo "::error title=Invalid JSON::$FILE is invalid" && exit 1)
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Extract Dependencies Used in Scripts
|
||||||
|
id: extract-used-scripts
|
||||||
|
run: |
|
||||||
|
extract_deps_from_scripts() {
|
||||||
|
local package_file=$1
|
||||||
|
if [[ -f "$package_file" ]]; then
|
||||||
|
jq -r '.scripts | to_entries[].value' "$package_file" | \
|
||||||
|
grep -oE '([a-zA-Z0-9_-]+)' | sort -u > used_scripts.txt
|
||||||
|
else
|
||||||
|
touch used_scripts.txt
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
extract_deps_from_scripts "package.json"
|
||||||
|
mv used_scripts.txt root_used_deps.txt
|
||||||
|
|
||||||
|
extract_deps_from_scripts "client/package.json"
|
||||||
|
mv used_scripts.txt client_used_deps.txt
|
||||||
|
|
||||||
|
extract_deps_from_scripts "api/package.json"
|
||||||
|
mv used_scripts.txt api_used_deps.txt
|
||||||
|
|
||||||
|
- name: Extract Dependencies Used in Source Code
|
||||||
|
id: extract-used-code
|
||||||
|
run: |
|
||||||
|
extract_deps_from_code() {
|
||||||
|
local folder=$1
|
||||||
|
local output_file=$2
|
||||||
|
if [[ -d "$folder" ]]; then
|
||||||
|
grep -rEho "require\\(['\"]([a-zA-Z0-9@/._-]+)['\"]\\)" "$folder" --include=\*.{js,ts,mjs,cjs} | \
|
||||||
|
sed -E "s/require\\(['\"]([a-zA-Z0-9@/._-]+)['\"]\\)/\1/" > "$output_file"
|
||||||
|
|
||||||
|
grep -rEho "import .* from ['\"]([a-zA-Z0-9@/._-]+)['\"]" "$folder" --include=\*.{js,ts,mjs,cjs} | \
|
||||||
|
sed -E "s/import .* from ['\"]([a-zA-Z0-9@/._-]+)['\"]/\1/" >> "$output_file"
|
||||||
|
|
||||||
|
sort -u "$output_file" -o "$output_file"
|
||||||
|
else
|
||||||
|
touch "$output_file"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
extract_deps_from_code "." root_used_code.txt
|
||||||
|
extract_deps_from_code "client" client_used_code.txt
|
||||||
|
extract_deps_from_code "api" api_used_code.txt
|
||||||
|
|
||||||
|
- name: Run depcheck for root package.json
|
||||||
|
id: check-root
|
||||||
|
run: |
|
||||||
|
if [[ -f "package.json" ]]; then
|
||||||
|
UNUSED=$(depcheck --json | jq -r '.dependencies | join("\n")' || echo "")
|
||||||
|
UNUSED=$(comm -23 <(echo "$UNUSED" | sort) <(cat root_used_deps.txt root_used_code.txt | sort) || echo "")
|
||||||
|
echo "ROOT_UNUSED<<EOF" >> $GITHUB_ENV
|
||||||
|
echo "$UNUSED" >> $GITHUB_ENV
|
||||||
|
echo "EOF" >> $GITHUB_ENV
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Run depcheck for client/package.json
|
||||||
|
id: check-client
|
||||||
|
run: |
|
||||||
|
if [[ -f "client/package.json" ]]; then
|
||||||
|
chmod -R 755 client
|
||||||
|
cd client
|
||||||
|
UNUSED=$(depcheck --json | jq -r '.dependencies | join("\n")' || echo "")
|
||||||
|
UNUSED=$(comm -23 <(echo "$UNUSED" | sort) <(cat ../client_used_deps.txt ../client_used_code.txt | sort) || echo "")
|
||||||
|
echo "CLIENT_UNUSED<<EOF" >> $GITHUB_ENV
|
||||||
|
echo "$UNUSED" >> $GITHUB_ENV
|
||||||
|
echo "EOF" >> $GITHUB_ENV
|
||||||
|
cd ..
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Run depcheck for api/package.json
|
||||||
|
id: check-api
|
||||||
|
run: |
|
||||||
|
if [[ -f "api/package.json" ]]; then
|
||||||
|
chmod -R 755 api
|
||||||
|
cd api
|
||||||
|
UNUSED=$(depcheck --json | jq -r '.dependencies | join("\n")' || echo "")
|
||||||
|
UNUSED=$(comm -23 <(echo "$UNUSED" | sort) <(cat ../api_used_deps.txt ../api_used_code.txt | sort) || echo "")
|
||||||
|
echo "API_UNUSED<<EOF" >> $GITHUB_ENV
|
||||||
|
echo "$UNUSED" >> $GITHUB_ENV
|
||||||
|
echo "EOF" >> $GITHUB_ENV
|
||||||
|
cd ..
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Post comment on PR if unused dependencies are found
|
||||||
|
if: env.ROOT_UNUSED != '' || env.CLIENT_UNUSED != '' || env.API_UNUSED != ''
|
||||||
|
run: |
|
||||||
|
PR_NUMBER=$(jq --raw-output .pull_request.number "$GITHUB_EVENT_PATH")
|
||||||
|
|
||||||
|
ROOT_LIST=$(echo "$ROOT_UNUSED" | awk '{print "- `" $0 "`"}')
|
||||||
|
CLIENT_LIST=$(echo "$CLIENT_UNUSED" | awk '{print "- `" $0 "`"}')
|
||||||
|
API_LIST=$(echo "$API_UNUSED" | awk '{print "- `" $0 "`"}')
|
||||||
|
|
||||||
|
COMMENT_BODY=$(cat <<EOF
|
||||||
|
### 🚨 Unused NPM Packages Detected
|
||||||
|
|
||||||
|
The following **unused dependencies** were found:
|
||||||
|
|
||||||
|
$(if [[ ! -z "$ROOT_UNUSED" ]]; then echo "#### 📂 Root \`package.json\`"; echo ""; echo "$ROOT_LIST"; echo ""; fi)
|
||||||
|
|
||||||
|
$(if [[ ! -z "$CLIENT_UNUSED" ]]; then echo "#### 📂 Client \`client/package.json\`"; echo ""; echo "$CLIENT_LIST"; echo ""; fi)
|
||||||
|
|
||||||
|
$(if [[ ! -z "$API_UNUSED" ]]; then echo "#### 📂 API \`api/package.json\`"; echo ""; echo "$API_LIST"; echo ""; fi)
|
||||||
|
|
||||||
|
⚠️ **Please remove these unused dependencies to keep your project clean.**
|
||||||
|
EOF
|
||||||
|
)
|
||||||
|
|
||||||
|
gh api "repos/${{ github.repository }}/issues/${PR_NUMBER}/comments" \
|
||||||
|
-f body="$COMMENT_BODY" \
|
||||||
|
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}"
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Fail workflow if unused dependencies found
|
||||||
|
if: env.ROOT_UNUSED != '' || env.CLIENT_UNUSED != '' || env.API_UNUSED != ''
|
||||||
|
run: exit 1
|
||||||
|
|
@ -47,9 +47,8 @@
|
||||||
"@langchain/textsplitters": "^0.1.0",
|
"@langchain/textsplitters": "^0.1.0",
|
||||||
"@librechat/agents": "^2.0.3",
|
"@librechat/agents": "^2.0.3",
|
||||||
"@waylaidwanderer/fetch-event-source": "^3.0.1",
|
"@waylaidwanderer/fetch-event-source": "^3.0.1",
|
||||||
"axios": "^1.7.7",
|
"axios": "1.7.8",
|
||||||
"bcryptjs": "^2.4.3",
|
"bcryptjs": "^2.4.3",
|
||||||
"cheerio": "^1.0.0-rc.12",
|
|
||||||
"cohere-ai": "^7.9.1",
|
"cohere-ai": "^7.9.1",
|
||||||
"compression": "^1.7.4",
|
"compression": "^1.7.4",
|
||||||
"connect-redis": "^7.1.0",
|
"connect-redis": "^7.1.0",
|
||||||
|
|
@ -66,7 +65,6 @@
|
||||||
"firebase": "^11.0.2",
|
"firebase": "^11.0.2",
|
||||||
"googleapis": "^126.0.1",
|
"googleapis": "^126.0.1",
|
||||||
"handlebars": "^4.7.7",
|
"handlebars": "^4.7.7",
|
||||||
"html": "^1.0.0",
|
|
||||||
"ioredis": "^5.3.2",
|
"ioredis": "^5.3.2",
|
||||||
"js-yaml": "^4.1.0",
|
"js-yaml": "^4.1.0",
|
||||||
"jsonwebtoken": "^9.0.0",
|
"jsonwebtoken": "^9.0.0",
|
||||||
|
|
@ -91,7 +89,6 @@
|
||||||
"openid-client": "^5.4.2",
|
"openid-client": "^5.4.2",
|
||||||
"passport": "^0.6.0",
|
"passport": "^0.6.0",
|
||||||
"passport-apple": "^2.0.2",
|
"passport-apple": "^2.0.2",
|
||||||
"passport-custom": "^1.1.1",
|
|
||||||
"passport-discord": "^0.1.4",
|
"passport-discord": "^0.1.4",
|
||||||
"passport-facebook": "^3.0.0",
|
"passport-facebook": "^3.0.0",
|
||||||
"passport-github2": "^0.1.12",
|
"passport-github2": "^0.1.12",
|
||||||
|
|
@ -99,7 +96,6 @@
|
||||||
"passport-jwt": "^4.0.1",
|
"passport-jwt": "^4.0.1",
|
||||||
"passport-ldapauth": "^3.0.1",
|
"passport-ldapauth": "^3.0.1",
|
||||||
"passport-local": "^1.0.0",
|
"passport-local": "^1.0.0",
|
||||||
"pino": "^8.12.1",
|
|
||||||
"sharp": "^0.32.6",
|
"sharp": "^0.32.6",
|
||||||
"tiktoken": "^1.0.15",
|
"tiktoken": "^1.0.15",
|
||||||
"traverse": "^0.6.7",
|
"traverse": "^0.6.7",
|
||||||
|
|
@ -111,8 +107,8 @@
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"jest": "^29.7.0",
|
"jest": "^29.7.0",
|
||||||
"mongodb-memory-server": "^10.0.0",
|
"mongodb-memory-server": "^10.1.3",
|
||||||
"nodemon": "^3.0.1",
|
"nodemon": "^3.0.3",
|
||||||
"supertest": "^6.3.3"
|
"supertest": "^7.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -50,11 +50,8 @@
|
||||||
"@radix-ui/react-switch": "^1.0.3",
|
"@radix-ui/react-switch": "^1.0.3",
|
||||||
"@radix-ui/react-tabs": "^1.0.3",
|
"@radix-ui/react-tabs": "^1.0.3",
|
||||||
"@radix-ui/react-toast": "^1.1.5",
|
"@radix-ui/react-toast": "^1.1.5",
|
||||||
"@radix-ui/react-tooltip": "^1.0.6",
|
|
||||||
"@tanstack/react-query": "^4.28.0",
|
"@tanstack/react-query": "^4.28.0",
|
||||||
"@tanstack/react-table": "^8.11.7",
|
"@tanstack/react-table": "^8.11.7",
|
||||||
"@zattoo/use-double-click": "1.2.0",
|
|
||||||
"axios": "^1.7.7",
|
|
||||||
"class-variance-authority": "^0.6.0",
|
"class-variance-authority": "^0.6.0",
|
||||||
"clsx": "^1.2.1",
|
"clsx": "^1.2.1",
|
||||||
"copy-to-clipboard": "^3.3.3",
|
"copy-to-clipboard": "^3.3.3",
|
||||||
|
|
@ -65,7 +62,7 @@
|
||||||
"filenamify": "^6.0.0",
|
"filenamify": "^6.0.0",
|
||||||
"framer-motion": "^11.5.4",
|
"framer-motion": "^11.5.4",
|
||||||
"html-to-image": "^1.11.11",
|
"html-to-image": "^1.11.11",
|
||||||
"image-blob-reduce": "^4.1.0",
|
"i18next": "^24.2.2",
|
||||||
"js-cookie": "^3.0.5",
|
"js-cookie": "^3.0.5",
|
||||||
"librechat-data-provider": "*",
|
"librechat-data-provider": "*",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
|
|
@ -79,10 +76,10 @@
|
||||||
"react-dnd": "^16.0.1",
|
"react-dnd": "^16.0.1",
|
||||||
"react-dnd-html5-backend": "^16.0.1",
|
"react-dnd-html5-backend": "^16.0.1",
|
||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
"react-error-boundary": "^5.0.0",
|
|
||||||
"react-flip-toolkit": "^7.1.0",
|
"react-flip-toolkit": "^7.1.0",
|
||||||
"react-gtm-module": "^2.0.11",
|
"react-gtm-module": "^2.0.11",
|
||||||
"react-hook-form": "^7.43.9",
|
"react-hook-form": "^7.43.9",
|
||||||
|
"react-i18next": "^15.4.0",
|
||||||
"react-lazy-load-image-component": "^1.6.0",
|
"react-lazy-load-image-component": "^1.6.0",
|
||||||
"react-markdown": "^9.0.1",
|
"react-markdown": "^9.0.1",
|
||||||
"react-resizable-panels": "^2.1.1",
|
"react-resizable-panels": "^2.1.1",
|
||||||
|
|
@ -91,8 +88,6 @@
|
||||||
"react-textarea-autosize": "^8.4.0",
|
"react-textarea-autosize": "^8.4.0",
|
||||||
"react-transition-group": "^4.4.5",
|
"react-transition-group": "^4.4.5",
|
||||||
"react-virtualized": "^9.22.6",
|
"react-virtualized": "^9.22.6",
|
||||||
"react-i18next": "^15.4.0",
|
|
||||||
"i18next": "^24.2.2",
|
|
||||||
"recoil": "^0.7.7",
|
"recoil": "^0.7.7",
|
||||||
"regenerator-runtime": "^0.14.1",
|
"regenerator-runtime": "^0.14.1",
|
||||||
"rehype-highlight": "^6.0.0",
|
"rehype-highlight": "^6.0.0",
|
||||||
|
|
@ -105,7 +100,6 @@
|
||||||
"tailwind-merge": "^1.9.1",
|
"tailwind-merge": "^1.9.1",
|
||||||
"tailwindcss-animate": "^1.0.5",
|
"tailwindcss-animate": "^1.0.5",
|
||||||
"tailwindcss-radix": "^2.8.0",
|
"tailwindcss-radix": "^2.8.0",
|
||||||
"url": "^0.11.0",
|
|
||||||
"zod": "^3.22.4"
|
"zod": "^3.22.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
@ -118,30 +112,30 @@
|
||||||
"@testing-library/jest-dom": "^5.16.5",
|
"@testing-library/jest-dom": "^5.16.5",
|
||||||
"@testing-library/react": "^14.0.0",
|
"@testing-library/react": "^14.0.0",
|
||||||
"@testing-library/user-event": "^14.4.3",
|
"@testing-library/user-event": "^14.4.3",
|
||||||
"@types/jest": "^29.5.2",
|
"@types/jest": "^29.5.14",
|
||||||
"@types/js-cookie": "^3.0.6",
|
"@types/js-cookie": "^3.0.6",
|
||||||
"@types/node": "^20.3.0",
|
"@types/node": "^20.3.0",
|
||||||
"@types/react": "^18.2.11",
|
"@types/react": "^18.2.11",
|
||||||
"@types/react-dom": "^18.2.4",
|
"@types/react-dom": "^18.2.4",
|
||||||
"@vitejs/plugin-react": "^4.2.1",
|
"@vitejs/plugin-react": "^4.2.1",
|
||||||
"autoprefixer": "^10.4.13",
|
"autoprefixer": "^10.4.20",
|
||||||
"babel-plugin-replace-ts-export-assignment": "^0.0.2",
|
"babel-plugin-replace-ts-export-assignment": "^0.0.2",
|
||||||
"babel-plugin-root-import": "^6.6.0",
|
"babel-plugin-root-import": "^6.6.0",
|
||||||
"babel-plugin-transform-import-meta": "^2.2.1",
|
"babel-plugin-transform-import-meta": "^2.3.2",
|
||||||
"babel-plugin-transform-vite-meta-env": "^1.0.3",
|
"babel-plugin-transform-vite-meta-env": "^1.0.3",
|
||||||
"eslint-plugin-jest": "^28.11.0",
|
"eslint-plugin-jest": "^28.11.0",
|
||||||
"identity-obj-proxy": "^3.0.0",
|
"identity-obj-proxy": "^3.0.0",
|
||||||
"jest": "^29.5.0",
|
"jest": "^29.7.0",
|
||||||
"jest-canvas-mock": "^2.5.1",
|
"jest-canvas-mock": "^2.5.2",
|
||||||
"jest-environment-jsdom": "^29.5.0",
|
"jest-environment-jsdom": "^29.7.0",
|
||||||
"jest-file-loader": "^1.0.3",
|
"jest-file-loader": "^1.0.3",
|
||||||
"jest-junit": "^16.0.0",
|
"jest-junit": "^16.0.0",
|
||||||
"postcss": "^8.4.31",
|
"postcss": "^8.4.31",
|
||||||
"postcss-loader": "^7.1.0",
|
"postcss-loader": "^7.1.0",
|
||||||
"postcss-preset-env": "^8.2.0",
|
"postcss-preset-env": "^8.2.0",
|
||||||
"tailwindcss": "^3.4.1",
|
"tailwindcss": "^3.4.1",
|
||||||
"ts-jest": "^29.1.0",
|
"ts-jest": "^29.2.5",
|
||||||
"typescript": "^5.0.4",
|
"typescript": "^5.3.3",
|
||||||
"vite": "^5.4.14",
|
"vite": "^5.4.14",
|
||||||
"vite-plugin-node-polyfills": "^0.17.0",
|
"vite-plugin-node-polyfills": "^0.17.0",
|
||||||
"vite-plugin-pwa": "^0.21.1"
|
"vite-plugin-pwa": "^0.21.1"
|
||||||
|
|
|
||||||
|
|
@ -119,7 +119,6 @@ const standardDependencies = {
|
||||||
'@radix-ui/react-switch': '^1.0.3',
|
'@radix-ui/react-switch': '^1.0.3',
|
||||||
'@radix-ui/react-tabs': '^1.0.3',
|
'@radix-ui/react-tabs': '^1.0.3',
|
||||||
'@radix-ui/react-toast': '^1.1.5',
|
'@radix-ui/react-toast': '^1.1.5',
|
||||||
'@radix-ui/react-tooltip': '^1.0.6',
|
|
||||||
'@radix-ui/react-slot': '^1.1.0',
|
'@radix-ui/react-slot': '^1.1.0',
|
||||||
'@radix-ui/react-toggle': '^1.1.0',
|
'@radix-ui/react-toggle': '^1.1.0',
|
||||||
'@radix-ui/react-toggle-group': '^1.1.0',
|
'@radix-ui/react-toggle-group': '^1.1.0',
|
||||||
|
|
|
||||||
1173
package-lock.json
generated
1173
package-lock.json
generated
File diff suppressed because it is too large
Load diff
10
package.json
10
package.json
|
|
@ -84,9 +84,9 @@
|
||||||
"@eslint/compat": "^1.2.6",
|
"@eslint/compat": "^1.2.6",
|
||||||
"@eslint/eslintrc": "^3.2.0",
|
"@eslint/eslintrc": "^3.2.0",
|
||||||
"@eslint/js": "^9.20.0",
|
"@eslint/js": "^9.20.0",
|
||||||
|
"@microsoft/eslint-formatter-sarif": "^3.1.0",
|
||||||
"@playwright/test": "^1.50.1",
|
"@playwright/test": "^1.50.1",
|
||||||
"@types/react-virtualized": "^9.22.0",
|
"@types/react-virtualized": "^9.22.0",
|
||||||
"@microsoft/eslint-formatter-sarif": "^3.1.0",
|
|
||||||
"cross-env": "^7.0.3",
|
"cross-env": "^7.0.3",
|
||||||
"eslint": "^9.20.0",
|
"eslint": "^9.20.0",
|
||||||
"eslint-config-prettier": "^10.0.1",
|
"eslint-config-prettier": "^10.0.1",
|
||||||
|
|
@ -100,13 +100,13 @@
|
||||||
"eslint-plugin-react-hooks": "^5.1.0",
|
"eslint-plugin-react-hooks": "^5.1.0",
|
||||||
"eslint-plugin-simple-import-sort": "^12.1.1",
|
"eslint-plugin-simple-import-sort": "^12.1.1",
|
||||||
"globals": "^15.14.0",
|
"globals": "^15.14.0",
|
||||||
"husky": "^8.0.0",
|
"husky": "^9.1.7",
|
||||||
"jest": "^29.5.0",
|
"jest": "^29.7.0",
|
||||||
"lint-staged": "^15.4.3",
|
"lint-staged": "^15.4.3",
|
||||||
"prettier": "^3.4.2",
|
"prettier": "^3.5.0",
|
||||||
"prettier-eslint": "^16.3.0",
|
"prettier-eslint": "^16.3.0",
|
||||||
"prettier-plugin-tailwindcss": "^0.6.11",
|
"prettier-plugin-tailwindcss": "^0.6.11",
|
||||||
"typescript-eslint": "^8.23.0"
|
"typescript-eslint": "^8.24.0"
|
||||||
},
|
},
|
||||||
"overrides": {
|
"overrides": {
|
||||||
"mdast-util-gfm-autolink-literal": "2.0.0",
|
"mdast-util-gfm-autolink-literal": "2.0.0",
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,8 @@ export type ParametersSchema = {
|
||||||
|
|
||||||
export type OpenAPISchema = OpenAPIV3.SchemaObject &
|
export type OpenAPISchema = OpenAPIV3.SchemaObject &
|
||||||
ParametersSchema & {
|
ParametersSchema & {
|
||||||
items?: OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject;
|
items?: OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type ApiKeyCredentials = {
|
export type ApiKeyCredentials = {
|
||||||
api_key: string;
|
api_key: string;
|
||||||
|
|
@ -43,8 +43,8 @@ export type Credentials = ApiKeyCredentials | OAuthCredentials;
|
||||||
type MediaTypeObject =
|
type MediaTypeObject =
|
||||||
| undefined
|
| undefined
|
||||||
| {
|
| {
|
||||||
[media: string]: OpenAPIV3.MediaTypeObject | undefined;
|
[media: string]: OpenAPIV3.MediaTypeObject | undefined;
|
||||||
};
|
};
|
||||||
|
|
||||||
type RequestBodyObject = Omit<OpenAPIV3.RequestBodyObject, 'content'> & {
|
type RequestBodyObject = Omit<OpenAPIV3.RequestBodyObject, 'content'> & {
|
||||||
content: MediaTypeObject;
|
content: MediaTypeObject;
|
||||||
|
|
@ -125,6 +125,9 @@ function openAPISchemaToZod(schema: OpenAPISchema): z.ZodTypeAny | undefined {
|
||||||
return handler(schema);
|
return handler(schema);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class representing a function signature.
|
||||||
|
*/
|
||||||
export class FunctionSignature {
|
export class FunctionSignature {
|
||||||
name: string;
|
name: string;
|
||||||
description: string;
|
description: string;
|
||||||
|
|
@ -150,7 +153,7 @@ export class FunctionSignature {
|
||||||
name: this.name,
|
name: this.name,
|
||||||
description: this.description,
|
description: this.description,
|
||||||
parameters,
|
parameters,
|
||||||
strict: this.strict,
|
...(this.strict ? { strict: this.strict } : {}),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
@ -374,7 +377,9 @@ function sanitizeOperationId(input: string) {
|
||||||
return input.replace(/[^a-zA-Z0-9_-]/g, '');
|
return input.replace(/[^a-zA-Z0-9_-]/g, '');
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Function to convert OpenAPI spec to function signatures and request builders */
|
/**
|
||||||
|
* Converts an OpenAPI spec to function signatures and request builders.
|
||||||
|
*/
|
||||||
export function openapiToFunction(
|
export function openapiToFunction(
|
||||||
openapiSpec: OpenAPIV3.Document,
|
openapiSpec: OpenAPIV3.Document,
|
||||||
generateZodSchemas = false,
|
generateZodSchemas = false,
|
||||||
|
|
@ -473,6 +478,9 @@ export type ValidationResult = {
|
||||||
spec?: OpenAPIV3.Document;
|
spec?: OpenAPIV3.Document;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validates and parses an OpenAPI spec.
|
||||||
|
*/
|
||||||
export function validateAndParseOpenAPISpec(specString: string): ValidationResult {
|
export function validateAndParseOpenAPISpec(specString: string): ValidationResult {
|
||||||
try {
|
try {
|
||||||
let parsedSpec;
|
let parsedSpec;
|
||||||
|
|
@ -536,4 +544,4 @@ export function validateAndParseOpenAPISpec(specString: string): ValidationResul
|
||||||
console.error(error);
|
console.error(error);
|
||||||
return { status: false, message: 'Error parsing OpenAPI spec.' };
|
return { status: false, message: 'Error parsing OpenAPI spec.' };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue