From a185b3a2cb4b060045b6e2e26ba43005aa916657 Mon Sep 17 00:00:00 2001 From: Denozordec Date: Wed, 19 Aug 2026 01:00:24 +0700 Subject: [PATCH] chore: update dependencies and improve wiki update process - Added new dependencies for @tanstack/router-cli and updated related packages in pnpm-lock.yaml. - Modified the build script in package.json to include `tsr generate` for route generation. - Enhanced the wiki update job in Gitea Actions to use a fallback for the GITEA_TOKEN and improved the authorization method for pushing changes. - Updated .dockerignore to clarify generated files. This commit improves the build process and ensures smoother updates to the wiki documentation. --- .dockerignore | 1 + .gitea/README.md | 2 +- .gitea/workflows/cd.yaml | 28 +++++-- apps/web/package.json | 3 +- apps/web/src/routeTree.gen.ts | 154 +++++++++++++++++----------------- docs/releasing.md | 2 +- pnpm-lock.yaml | 70 +++++++++++++++- 7 files changed, 171 insertions(+), 89 deletions(-) diff --git a/.dockerignore b/.dockerignore index efa05c8..c3dabe3 100644 --- a/.dockerignore +++ b/.dockerignore @@ -22,6 +22,7 @@ node_modules **/node_modules **/dist **/.turbo +# Генерируется `tsr generate` в `web` build (tsc идёт до Vite-плагина). apps/web/src/routeTree.gen.ts apps/web/playwright-report apps/web/test-results diff --git a/.gitea/README.md b/.gitea/README.md index 31f2e36..77fcf3a 100644 --- a/.gitea/README.md +++ b/.gitea/README.md @@ -35,7 +35,7 @@ Runner: `ubuntu-latest`, Docker для **docker-check** (PR) и **publish** (CD) Повтор упавшего **publish** (тег уже есть, bake нет): detect берёт `v*` на `HEAD` и всё равно пушит образы. Подробнее: [docs/releasing.md](../docs/releasing.md#перезапуск-упавшего-job-publish). -Job **update-wiki** идёт **параллельно** publish (не блокирует образы): при diff `docs/Home.md` копирует файл в wiki-репозиторий (`GITEA_TOKEN`). +Job **update-wiki** идёт **параллельно** publish (не блокирует образы): при diff `docs/Home.md` копирует файл в wiki-репозиторий. Clone/push идут с `Authorization: Basic oauth2:` — после clone git вырезает токен из `origin`, без header Gitea отвечает `Repository not found` (часто на внутреннем `GITEA_INSTANCE_URL` раннера). Секрет: **`GITEA_TOKEN`**, fallback **`ACTIONS_PAT`**. ### Секреты diff --git a/.gitea/workflows/cd.yaml b/.gitea/workflows/cd.yaml index 8774045..a9a7331 100644 --- a/.gitea/workflows/cd.yaml +++ b/.gitea/workflows/cd.yaml @@ -37,21 +37,35 @@ jobs: else echo "changed=true" >> "$GITHUB_OUTPUT" fi - - name: Clone Wiki repository - if: steps.check_changes.outputs.changed == 'true' - run: | - WIKI_URL=$(echo "${{ github.server_url }}/${{ github.repository }}.wiki.git" | sed -e "s|://|://gitea-actions:${{ secrets.GITEA_TOKEN }}@|") - git clone "${WIKI_URL}" cfdm.wiki - name: Update and push Wiki content if: steps.check_changes.outputs.changed == 'true' + env: + WIKI_TOKEN: ${{ secrets.GITEA_TOKEN || secrets.ACTIONS_PAT }} + SERVER_URL: ${{ gitea.server_url }} + REPO: ${{ gitea.repository }} run: | + set -euo pipefail + if [ -z "${WIKI_TOKEN:-}" ]; then + echo "GITEA_TOKEN / ACTIONS_PAT is empty — cannot push wiki" + exit 1 + fi + # runner GITEA_INSTANCE_URL часто внутренний (http://192.168.x.x:3000). + # git после clone вырезает userinfo из origin → push без токена даёт 404 + # «Repository not found». Authorization header переживает insteadOf/sanitize. + WIKI_URL="${SERVER_URL}/${REPO}.wiki.git" + AUTH_HEADER="Authorization: Basic $(printf '%s' "oauth2:${WIKI_TOKEN}" | base64 | tr -d '\n')" + git -c http.extraHeader="${AUTH_HEADER}" clone "${WIKI_URL}" cfdm.wiki cp docs/Home.md cfdm.wiki/Home.md cd cfdm.wiki git config user.name "Gitea Actions" git config user.email "actions@gitea" git add Home.md - git diff --staged --quiet || git commit -m "docs: Update Wiki from main repository" - git push + if git diff --staged --quiet; then + echo "Wiki Home.md already up to date" + exit 0 + fi + git commit -m "docs: Update Wiki from main repository" + git -c http.extraHeader="${AUTH_HEADER}" push origin HEAD publish: needs: [quality] diff --git a/apps/web/package.json b/apps/web/package.json index 3b3c539..c8709dc 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -5,7 +5,7 @@ "type": "module", "scripts": { "dev": "vite", - "build": "tsc -b && vite build", + "build": "tsr generate && tsc -b && vite build", "test": "vitest run", "lint": "eslint .", "preview": "vite preview" @@ -42,6 +42,7 @@ }, "devDependencies": { "@eslint/js": "^10.0.1", + "@tanstack/router-cli": "^1.167.31", "@types/node": "^24.12.3", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", diff --git a/apps/web/src/routeTree.gen.ts b/apps/web/src/routeTree.gen.ts index 364b971..0c8247c 100644 --- a/apps/web/src/routeTree.gen.ts +++ b/apps/web/src/routeTree.gen.ts @@ -9,44 +9,39 @@ // Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified. import { Route as rootRouteImport } from './routes/__root' -import { Route as LoginRouteImport } from './routes/login' import { Route as AuthRouteImport } from './routes/_auth' +import { Route as LoginRouteImport } from './routes/login' import { Route as AuthIndexRouteImport } from './routes/_auth/index' -import { Route as AuthCallbackRouteImport } from './routes/auth.callback' -import { Route as AuthServicesRouteImport } from './routes/_auth/services' -import { Route as AuthGroupsRouteImport } from './routes/_auth/groups' import { Route as AuthCertificatesRouteImport } from './routes/_auth/certificates' +import { Route as AuthGroupsRouteImport } from './routes/_auth/groups' +import { Route as AuthServicesRouteImport } from './routes/_auth/services' import { Route as AuthSettingsRouteRouteImport } from './routes/_auth/settings/route' -import { Route as AuthSettingsIndexRouteImport } from './routes/_auth/settings/index' +import { Route as AuthCallbackRouteImport } from './routes/auth.callback' import { Route as AuthDomainsIndexRouteImport } from './routes/_auth/domains/index' -import { Route as AuthSettingsIntegrationsRouteImport } from './routes/_auth/settings/integrations' -import { Route as AuthSettingsAppearanceRouteImport } from './routes/_auth/settings/appearance' import { Route as AuthGroupsGroupIdRouteImport } from './routes/_auth/groups/$groupId' +import { Route as AuthSettingsIndexRouteImport } from './routes/_auth/settings/index' +import { Route as AuthSettingsAppearanceRouteImport } from './routes/_auth/settings/appearance' +import { Route as AuthSettingsIntegrationsRouteImport } from './routes/_auth/settings/integrations' import { Route as AuthDomainsDomainIdIndexRouteImport } from './routes/_auth/domains/$domainId/index' import { Route as AuthDomainsDomainIdDnsRouteImport } from './routes/_auth/domains/$domainId/dns' +const AuthRoute = AuthRouteImport.update({ + id: '/_auth', + getParentRoute: () => rootRouteImport, +} as any) const LoginRoute = LoginRouteImport.update({ id: '/login', path: '/login', getParentRoute: () => rootRouteImport, } as any) -const AuthRoute = AuthRouteImport.update({ - id: '/_auth', - getParentRoute: () => rootRouteImport, -} as any) const AuthIndexRoute = AuthIndexRouteImport.update({ id: '/', path: '/', getParentRoute: () => AuthRoute, } as any) -const AuthCallbackRoute = AuthCallbackRouteImport.update({ - id: '/auth/callback', - path: '/auth/callback', - getParentRoute: () => rootRouteImport, -} as any) -const AuthServicesRoute = AuthServicesRouteImport.update({ - id: '/services', - path: '/services', +const AuthCertificatesRoute = AuthCertificatesRouteImport.update({ + id: '/certificates', + path: '/certificates', getParentRoute: () => AuthRoute, } as any) const AuthGroupsRoute = AuthGroupsRouteImport.update({ @@ -54,9 +49,9 @@ const AuthGroupsRoute = AuthGroupsRouteImport.update({ path: '/groups', getParentRoute: () => AuthRoute, } as any) -const AuthCertificatesRoute = AuthCertificatesRouteImport.update({ - id: '/certificates', - path: '/certificates', +const AuthServicesRoute = AuthServicesRouteImport.update({ + id: '/services', + path: '/services', getParentRoute: () => AuthRoute, } as any) const AuthSettingsRouteRoute = AuthSettingsRouteRouteImport.update({ @@ -64,32 +59,37 @@ const AuthSettingsRouteRoute = AuthSettingsRouteRouteImport.update({ path: '/settings', getParentRoute: () => AuthRoute, } as any) -const AuthSettingsIndexRoute = AuthSettingsIndexRouteImport.update({ - id: '/', - path: '/', - getParentRoute: () => AuthSettingsRouteRoute, +const AuthCallbackRoute = AuthCallbackRouteImport.update({ + id: '/auth/callback', + path: '/auth/callback', + getParentRoute: () => rootRouteImport, } as any) const AuthDomainsIndexRoute = AuthDomainsIndexRouteImport.update({ id: '/domains/', path: '/domains/', getParentRoute: () => AuthRoute, } as any) +const AuthGroupsGroupIdRoute = AuthGroupsGroupIdRouteImport.update({ + id: '/$groupId', + path: '/$groupId', + getParentRoute: () => AuthGroupsRoute, +} as any) +const AuthSettingsIndexRoute = AuthSettingsIndexRouteImport.update({ + id: '/', + path: '/', + getParentRoute: () => AuthSettingsRouteRoute, +} as any) +const AuthSettingsAppearanceRoute = AuthSettingsAppearanceRouteImport.update({ + id: '/appearance', + path: '/appearance', + getParentRoute: () => AuthSettingsRouteRoute, +} as any) const AuthSettingsIntegrationsRoute = AuthSettingsIntegrationsRouteImport.update({ id: '/integrations', path: '/integrations', getParentRoute: () => AuthSettingsRouteRoute, } as any) -const AuthSettingsAppearanceRoute = AuthSettingsAppearanceRouteImport.update({ - id: '/appearance', - path: '/appearance', - getParentRoute: () => AuthSettingsRouteRoute, -} as any) -const AuthGroupsGroupIdRoute = AuthGroupsGroupIdRouteImport.update({ - id: '/$groupId', - path: '/$groupId', - getParentRoute: () => AuthGroupsRoute, -} as any) const AuthDomainsDomainIdIndexRoute = AuthDomainsDomainIdIndexRouteImport.update({ id: '/domains/$domainId/', @@ -210,13 +210,6 @@ export interface RootRouteChildren { declare module '@tanstack/react-router' { interface FileRoutesByPath { - '/login': { - id: '/login' - path: '/login' - fullPath: '/login' - preLoaderRoute: typeof LoginRouteImport - parentRoute: typeof rootRouteImport - } '/_auth': { id: '/_auth' path: '' @@ -224,6 +217,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof AuthRouteImport parentRoute: typeof rootRouteImport } + '/login': { + id: '/login' + path: '/login' + fullPath: '/login' + preLoaderRoute: typeof LoginRouteImport + parentRoute: typeof rootRouteImport + } '/_auth/': { id: '/_auth/' path: '/' @@ -231,18 +231,11 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof AuthIndexRouteImport parentRoute: typeof AuthRoute } - '/auth/callback': { - id: '/auth/callback' - path: '/auth/callback' - fullPath: '/auth/callback' - preLoaderRoute: typeof AuthCallbackRouteImport - parentRoute: typeof rootRouteImport - } - '/_auth/services': { - id: '/_auth/services' - path: '/services' - fullPath: '/services' - preLoaderRoute: typeof AuthServicesRouteImport + '/_auth/certificates': { + id: '/_auth/certificates' + path: '/certificates' + fullPath: '/certificates' + preLoaderRoute: typeof AuthCertificatesRouteImport parentRoute: typeof AuthRoute } '/_auth/groups': { @@ -252,11 +245,11 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof AuthGroupsRouteImport parentRoute: typeof AuthRoute } - '/_auth/certificates': { - id: '/_auth/certificates' - path: '/certificates' - fullPath: '/certificates' - preLoaderRoute: typeof AuthCertificatesRouteImport + '/_auth/services': { + id: '/_auth/services' + path: '/services' + fullPath: '/services' + preLoaderRoute: typeof AuthServicesRouteImport parentRoute: typeof AuthRoute } '/_auth/settings': { @@ -266,12 +259,12 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof AuthSettingsRouteRouteImport parentRoute: typeof AuthRoute } - '/_auth/settings/': { - id: '/_auth/settings/' - path: '/' - fullPath: '/settings/' - preLoaderRoute: typeof AuthSettingsIndexRouteImport - parentRoute: typeof AuthSettingsRouteRoute + '/auth/callback': { + id: '/auth/callback' + path: '/auth/callback' + fullPath: '/auth/callback' + preLoaderRoute: typeof AuthCallbackRouteImport + parentRoute: typeof rootRouteImport } '/_auth/domains/': { id: '/_auth/domains/' @@ -280,11 +273,18 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof AuthDomainsIndexRouteImport parentRoute: typeof AuthRoute } - '/_auth/settings/integrations': { - id: '/_auth/settings/integrations' - path: '/integrations' - fullPath: '/settings/integrations' - preLoaderRoute: typeof AuthSettingsIntegrationsRouteImport + '/_auth/groups/$groupId': { + id: '/_auth/groups/$groupId' + path: '/$groupId' + fullPath: '/groups/$groupId' + preLoaderRoute: typeof AuthGroupsGroupIdRouteImport + parentRoute: typeof AuthGroupsRoute + } + '/_auth/settings/': { + id: '/_auth/settings/' + path: '/' + fullPath: '/settings/' + preLoaderRoute: typeof AuthSettingsIndexRouteImport parentRoute: typeof AuthSettingsRouteRoute } '/_auth/settings/appearance': { @@ -294,12 +294,12 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof AuthSettingsAppearanceRouteImport parentRoute: typeof AuthSettingsRouteRoute } - '/_auth/groups/$groupId': { - id: '/_auth/groups/$groupId' - path: '/$groupId' - fullPath: '/groups/$groupId' - preLoaderRoute: typeof AuthGroupsGroupIdRouteImport - parentRoute: typeof AuthGroupsRoute + '/_auth/settings/integrations': { + id: '/_auth/settings/integrations' + path: '/integrations' + fullPath: '/settings/integrations' + preLoaderRoute: typeof AuthSettingsIntegrationsRouteImport + parentRoute: typeof AuthSettingsRouteRoute } '/_auth/domains/$domainId/': { id: '/_auth/domains/$domainId/' diff --git a/docs/releasing.md b/docs/releasing.md index a717eb0..1ee6ee8 100644 --- a/docs/releasing.md +++ b/docs/releasing.md @@ -51,7 +51,7 @@ Workflows: [.gitea/workflows/ci.yaml](../.gitea/workflows/ci.yaml), [.gitea/work Fallback для **git tag**: `gitea.token`, если PAT недоступен. Push образов в Container Registry — **только `ACTIONS_PAT`** (у job token Gitea нет права packages). -Wiki: секрет **`GITEA_TOKEN`** для clone/push `*.wiki.git`. +Wiki: секрет **`GITEA_TOKEN`** (fallback `ACTIONS_PAT`) для clone/push `*.wiki.git`. Push идёт с HTTP `Authorization`, потому что git после clone вырезает токен из remote URL. ## Источник правды для версии diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6d81317..ad799aa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -206,6 +206,9 @@ importers: '@eslint/js': specifier: ^10.0.1 version: 10.0.1(eslint@10.5.0(jiti@2.7.0)) + '@tanstack/router-cli': + specifier: ^1.167.31 + version: 1.167.31 '@types/node': specifier: ^24.12.3 version: 24.13.2 @@ -596,11 +599,11 @@ packages: '@esbuild-kit/core-utils@3.3.2': resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} - deprecated: 'Merged into tsx: https://tsx.is' + deprecated: 'Merged into tsx: https://tsx.hirok.io' '@esbuild-kit/esm-loader@2.6.5': resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} - deprecated: 'Merged into tsx: https://tsx.is' + deprecated: 'Merged into tsx: https://tsx.hirok.io' '@esbuild/aix-ppc64@0.25.12': resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} @@ -2284,6 +2287,10 @@ packages: resolution: {integrity: sha512-79pf/RkhteYZTRgcR4F9kbk84P2N8rugQJswxfIqovlbRiT3yI7eBE+5QorIrZaOKktsgzRlXh1l/du/xpl4iA==} engines: {node: '>=20.19'} + '@tanstack/history@1.162.1': + resolution: {integrity: sha512-DR9t6lfLVdrjgCwpglrR9DR7Ok8/HlXjcOE+goWXF3zyuLUO/ug7vMbSFxTqrQTtbRghJfyhmIZ0S6LhPIy44w==} + engines: {node: '>=20.19'} + '@tanstack/query-core@5.101.0': resolution: {integrity: sha512-cQetA74EB+seWySv1TTKr828TnP0u39m6LykwDXIo84SNortpDkp30TMEjkqtYCNP9c40uT/iwl6MLiufEt0Ow==} @@ -2318,14 +2325,27 @@ packages: 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 + '@tanstack/router-cli@1.167.31': + resolution: {integrity: sha512-/jjZzcwOdBpcLIXRYsmHzFlchbd3esBD6m9bmeoY8l9mVkv/NZOhfx1h/mEn6nETkpxBT4y3pTJ0Ave2EoYXnQ==} + engines: {node: '>=20.19'} + hasBin: true + '@tanstack/router-core@1.171.13': resolution: {integrity: sha512-+NOwEj1kO/6IGmpHRIZHasYxYWpyBQGNIZAST9aNrk9Q3YlU9SgqVnl1pbLa9qAKfeNdXQIRve0RQb/0kyDeDA==} engines: {node: '>=20.19'} + '@tanstack/router-core@1.171.25': + resolution: {integrity: sha512-w74Al2ar8UKx3Xp4ICTxIZD2Vmd6N9Yn4xH8ILq40gI5UqlxzjPPYoR5l2+5cmv9XCWZehxw7saIofmZpf1G4w==} + engines: {node: '>=20.19'} + '@tanstack/router-generator@1.167.17': resolution: {integrity: sha512-xtB9tB2Ws0tWR6Pi7nc3Qk9IYgoh1mQCKWjHqIl9tf6BNUpKoqniJoPAQ4+LGrK8FeZYU0o0p/qlZEyj9FAulA==} engines: {node: '>=20.19'} + '@tanstack/router-generator@1.167.31': + resolution: {integrity: sha512-xgk+8BCKzAoIONVJPeyyzLRKhb9W0PNWJepPIjx5gRU36+FDZUMNeZ/gjyOBZ4EzQgrUOCPs4/Vkr8JcnuRLLA==} + engines: {node: '>=20.19'} + '@tanstack/router-plugin@1.168.18': resolution: {integrity: sha512-MofS28/axfnfnhOD2RSgJEaU882aX5RsAzhGz5Vc4XhAmvCjy919u9JrNs4QsTWFbTD1P7IJ8WFlFVsrg0pStg==} engines: {node: '>=20.19'} @@ -4875,10 +4895,20 @@ packages: peerDependencies: seroval: ^1.0 + seroval-plugins@1.6.2: + resolution: {integrity: sha512-TfxuUjlbBESzUOWdTkTKqvSmav0ABym+itetDXLK6mDz8SmrpdI30aF8RTXE8Bvq+tH/1yIDkvy3W0lfQb1ipQ==} + engines: {node: '>=10'} + peerDependencies: + seroval: ^1.0 + seroval@1.5.4: resolution: {integrity: sha512-46uFvgrXTVxZcUorgSSRZ4y+ieqLLQRMlG4bnCZKW3qI6BZm7Rg4ntMW4p1mILEEBZWrFlcpp0AyIIlM6jD9iw==} engines: {node: '>=10'} + seroval@1.6.2: + resolution: {integrity: sha512-mPT+SD2TrlB6wvte1KkYOYUkubaTbd6pZ/6Kk3C9nxzrHmCZyhxOO7XGAeL7f+yLKZglzGtM9odUVvg/EhO+vQ==} + engines: {node: '>=10'} + set-cookie-parser@2.7.2: resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} @@ -7288,6 +7318,8 @@ snapshots: '@tanstack/history@1.162.0': {} + '@tanstack/history@1.162.1': {} + '@tanstack/query-core@5.101.0': {} '@tanstack/react-query@5.101.0(react@19.2.7)': @@ -7323,6 +7355,14 @@ snapshots: react: 19.2.7 react-dom: 19.2.7(react@19.2.7) + '@tanstack/router-cli@1.167.31': + dependencies: + '@tanstack/router-generator': 1.167.31 + chokidar: 5.0.0 + yargs: 17.7.3 + transitivePeerDependencies: + - supports-color + '@tanstack/router-core@1.171.13': dependencies: '@tanstack/history': 1.162.0 @@ -7330,6 +7370,13 @@ snapshots: seroval: 1.5.4 seroval-plugins: 1.5.4(seroval@1.5.4) + '@tanstack/router-core@1.171.25': + dependencies: + '@tanstack/history': 1.162.1 + cookie-es: 3.1.1 + seroval: 1.6.2 + seroval-plugins: 1.6.2(seroval@1.6.2) + '@tanstack/router-generator@1.167.17': dependencies: '@babel/types': 7.29.7 @@ -7343,6 +7390,19 @@ snapshots: transitivePeerDependencies: - supports-color + '@tanstack/router-generator@1.167.31': + dependencies: + '@babel/types': 7.29.7 + '@tanstack/router-core': 1.171.25 + '@tanstack/router-utils': 1.162.2 + '@tanstack/virtual-file-routes': 1.162.0 + jiti: 2.7.0 + magic-string: 0.30.21 + prettier: 3.8.4 + zod: 4.4.3 + transitivePeerDependencies: + - supports-color + '@tanstack/router-plugin@1.168.18(@tanstack/react-router@1.170.15(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.9.0))': dependencies: '@babel/core': 7.29.7 @@ -9829,8 +9889,14 @@ snapshots: dependencies: seroval: 1.5.4 + seroval-plugins@1.6.2(seroval@1.6.2): + dependencies: + seroval: 1.6.2 + seroval@1.5.4: {} + seroval@1.6.2: {} + set-cookie-parser@2.7.2: {} setprototypeof@1.2.0: {}