From d4f3fdc18600c8442103496fed787194904dc321 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Vasconcellos?= Date: Sun, 19 Mar 2023 16:47:10 +0000 Subject: [PATCH] Fix `pnpm format` command failing with some files (#622) * Fix `pnpm format` command failure - Update prettier and plugins dependencies - Add auto-install-peers to .npmrc - Fix formating of previously failing files - Some basic security mitigations (`pnpm audit --fix`) * setup-system.sh: Don't do a full system update on ArchLinux * Revert "Some basic security mitigations (`pnpm audit --fix`)" --- .github/actions/setup/action.yml | 2 +- .github/scripts/setup-system.sh | 2 +- .github/workflows/cache-factory.yaml | 2 +- .npmrc | 1 + apps/desktop/vite.config.ts | 2 +- apps/web/vite.config.ts | 2 +- interface/app/$libraryId/index.tsx | 6 +-- .../app/$libraryId/settings/client/index.ts | 6 +-- .../app/$libraryId/settings/node/index.tsx | 6 +-- .../$libraryId/settings/resources/index.tsx | 6 +-- interface/app/index.tsx | 44 +++++++++--------- interface/package.json | 2 +- package.json | 6 +-- packages/client/src/utils/keys.ts | 16 +++---- pnpm-lock.yaml | Bin 826673 -> 832857 bytes 15 files changed, 53 insertions(+), 50 deletions(-) diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index 12f1bf556..83aa1745d 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -4,7 +4,7 @@ inputs: save-cache: description: Whether to save the Rust cache required: false - default: "false" + default: 'false' runs: using: 'composite' steps: diff --git a/.github/scripts/setup-system.sh b/.github/scripts/setup-system.sh index 4bf080453..c649be4c2 100755 --- a/.github/scripts/setup-system.sh +++ b/.github/scripts/setup-system.sh @@ -121,7 +121,7 @@ if [[ "$OSTYPE" == "linux-gnu"* ]]; then # Protobuf compiler - https://github.com/archlinux/svntogit-packages/blob/packages/protobuf/trunk/PKGBUILD provides `libprotoc` ARCH_LIBP2P_DEPS="protobuf" - sudo pacman -Syu + sudo pacman -Sy sudo pacman -S --needed $ARCH_TAURI_DEPS $ARCH_FFMPEG_DEPS $ARCH_BINDGEN_DEPS $ARCH_LIBP2P_DEPS elif command -v dnf >/dev/null; then echo "Detected dnf!" diff --git a/.github/workflows/cache-factory.yaml b/.github/workflows/cache-factory.yaml index 01f503b89..2247e1b53 100644 --- a/.github/workflows/cache-factory.yaml +++ b/.github/workflows/cache-factory.yaml @@ -25,7 +25,7 @@ jobs: - uses: ./.github/actions/setup with: - save-cache: "true" + save-cache: 'true' - name: Compile workspace with stable Rust run: cargo test --workspace --all-features --no-run diff --git a/.npmrc b/.npmrc index 89f147e1d..98b5bd549 100644 --- a/.npmrc +++ b/.npmrc @@ -5,3 +5,4 @@ prefer-symlinked-executables=false ; necessary for metro + mobile strict-peer-dependencies=false node-linker=hoisted +auto-install-peers=true diff --git a/apps/desktop/vite.config.ts b/apps/desktop/vite.config.ts index 6dcb6cae1..b984a7306 100644 --- a/apps/desktop/vite.config.ts +++ b/apps/desktop/vite.config.ts @@ -17,7 +17,7 @@ export default defineConfig({ svg({ svgrOptions: { icon: true } }), createHtmlPlugin({ minify: true - }), + }) ], css: { modules: { diff --git a/apps/web/vite.config.ts b/apps/web/vite.config.ts index afa1594a5..09555334e 100644 --- a/apps/web/vite.config.ts +++ b/apps/web/vite.config.ts @@ -22,7 +22,7 @@ export default defineConfig({ visualizer({ gzipSize: true, brotliSize: true - }), + }) ], css: { modules: { diff --git a/interface/app/$libraryId/index.tsx b/interface/app/$libraryId/index.tsx index e9987663a..d24676b49 100644 --- a/interface/app/$libraryId/index.tsx +++ b/interface/app/$libraryId/index.tsx @@ -3,17 +3,17 @@ import settingsRoutes from './settings'; export default [ { - lazy: () => import("./PageLayout"), + lazy: () => import('./PageLayout'), children: [ { path: 'overview', lazy: () => import('./overview') }, - { path: 'people', lazy: () => import('./people')}, + { path: 'people', lazy: () => import('./people') }, { path: 'media', lazy: () => import('./media') }, { path: 'spaces', lazy: () => import('./spaces') }, { path: 'debug', lazy: () => import('./debug') }, - { path: 'spacedrop', lazy: () => import('./spacedrop') }, + { path: 'spacedrop', lazy: () => import('./spacedrop') } ] }, { path: 'location/:id', lazy: () => import('./location/$id') }, diff --git a/interface/app/$libraryId/settings/client/index.ts b/interface/app/$libraryId/settings/client/index.ts index 88a56014e..abd764770 100644 --- a/interface/app/$libraryId/settings/client/index.ts +++ b/interface/app/$libraryId/settings/client/index.ts @@ -1,9 +1,9 @@ -import { RouteObject } from "react-router"; +import { RouteObject } from 'react-router'; export default [ { path: 'general', lazy: () => import('./general') }, { path: 'appearance', lazy: () => import('./appearance') }, { path: 'keybindings', lazy: () => import('./keybindings') }, { path: 'extensions', lazy: () => import('./extensions') }, - { path: 'privacy', lazy: () => import('./privacy') }, -] satisfies RouteObject[] + { path: 'privacy', lazy: () => import('./privacy') } +] satisfies RouteObject[]; diff --git a/interface/app/$libraryId/settings/node/index.tsx b/interface/app/$libraryId/settings/node/index.tsx index 3c527ddd8..32bf3ce61 100644 --- a/interface/app/$libraryId/settings/node/index.tsx +++ b/interface/app/$libraryId/settings/node/index.tsx @@ -1,6 +1,6 @@ -import { RouteObject } from "react-router"; +import { RouteObject } from 'react-router'; export default [ { path: 'p2p', lazy: () => import('./p2p') }, - { path: 'libraries', lazy: () => import('./libraries') }, -] satisfies RouteObject[] + { path: 'libraries', lazy: () => import('./libraries') } +] satisfies RouteObject[]; diff --git a/interface/app/$libraryId/settings/resources/index.tsx b/interface/app/$libraryId/settings/resources/index.tsx index 8e1e90455..ea1e6da83 100644 --- a/interface/app/$libraryId/settings/resources/index.tsx +++ b/interface/app/$libraryId/settings/resources/index.tsx @@ -1,8 +1,8 @@ -import { RouteObject } from "react-router"; +import { RouteObject } from 'react-router'; export default [ { path: 'about', lazy: () => import('./about') }, { path: 'changelog', lazy: () => import('./changelog') }, { path: 'dependencies', lazy: () => import('./dependencies') }, - { path: 'support', lazy: () => import('./support') }, -] satisfies RouteObject[] + { path: 'support', lazy: () => import('./support') } +] satisfies RouteObject[]; diff --git a/interface/app/index.tsx b/interface/app/index.tsx index 8754a56fc..03b36590a 100644 --- a/interface/app/index.tsx +++ b/interface/app/index.tsx @@ -1,9 +1,9 @@ import { Navigate, Outlet, RouteObject } from 'react-router-dom'; import { currentLibraryCache, useCachedLibraries, useInvalidateQuery } from '@sd/client'; +import { useKeybindHandler } from '~/hooks/useKeyboardHandler'; import libraryRoutes from './$libraryId'; import onboardingRoutes from './onboarding'; import './style.scss'; -import { useKeybindHandler } from '~/hooks/useKeyboardHandler'; const Index = () => { const libraries = useCachedLibraries(); @@ -19,33 +19,35 @@ const Index = () => { return ; }; - const Wrapper = () => { useKeybindHandler(); useInvalidateQuery(); - return -} + return ; +}; // NOTE: all route `Layout`s below should contain // the `usePlausiblePageViewMonitor` hook, as early as possible (ideally within the layout itself). // the hook should only be included if there's a valid `ClientContext` (so not onboarding) -export const routes = [{ - element: , - children: [ +export const routes = [ { - index: true, - element: - }, - { - path: 'onboarding', - lazy: () => import('./onboarding/Layout'), - children: onboardingRoutes - }, - { - path: ':libraryId', - lazy: () => import('./$libraryId/Layout'), - children: libraryRoutes, - }] -}] satisfies RouteObject[]; + element: , + children: [ + { + index: true, + element: + }, + { + path: 'onboarding', + lazy: () => import('./onboarding/Layout'), + children: onboardingRoutes + }, + { + path: ':libraryId', + lazy: () => import('./$libraryId/Layout'), + children: libraryRoutes + } + ] + } +] satisfies RouteObject[]; diff --git a/interface/package.json b/interface/package.json index 6e8879a45..5006ecb9f 100644 --- a/interface/package.json +++ b/interface/package.json @@ -50,7 +50,7 @@ "react-json-view": "^1.21.3", "react-loading-skeleton": "^3.1.0", "react-qr-code": "^2.0.11", - "react-responsive": "^9.0.2", + "react-responsive": "^9.0.2", "react-router": "6.9.0", "react-router-dom": "6.9.0", "rooks": "^5.14.0", diff --git a/package.json b/package.json index 4ff07ecdc..fd769d373 100644 --- a/package.json +++ b/package.json @@ -33,11 +33,11 @@ "@babel/plugin-syntax-import-assertions": "^7.20.0", "@cspell/dict-rust": "^2.0.1", "@cspell/dict-typescript": "^2.0.2", - "@trivago/prettier-plugin-sort-imports": "^3.4.0", + "@trivago/prettier-plugin-sort-imports": "^4.1.1", "cspell": "^6.12.0", "markdown-link-check": "^3.10.3", - "prettier": "^2.8.3", - "prettier-plugin-tailwindcss": "^0.2.2", + "prettier": "^2.8.4", + "prettier-plugin-tailwindcss": "^0.2.5", "rimraf": "^4.1.1", "turbo": "^1.5.5", "turbo-ignore": "^0.3.0", diff --git a/packages/client/src/utils/keys.ts b/packages/client/src/utils/keys.ts index 644032727..fa2a04af0 100644 --- a/packages/client/src/utils/keys.ts +++ b/packages/client/src/utils/keys.ts @@ -2,13 +2,13 @@ import { z } from 'zod'; import { HashingAlgorithm } from '../core'; export const hashingAlgoSlugSchema = z.union([ - z.literal("Argon2id-s"), - z.literal("Argon2id-h"), - z.literal("Argon2id-p"), - z.literal("BalloonBlake3-s"), - z.literal("BalloonBlake3-h"), - z.literal("BalloonBlake3-p"), -]) + z.literal('Argon2id-s'), + z.literal('Argon2id-h'), + z.literal('Argon2id-p'), + z.literal('BalloonBlake3-s'), + z.literal('BalloonBlake3-h'), + z.literal('BalloonBlake3-p') +]); export type HashingAlgoSlug = z.infer; @@ -21,7 +21,7 @@ export const HASHING_ALGOS = { 'BalloonBlake3-p': { name: 'BalloonBlake3', params: 'Paranoid' } } as const satisfies Record; -export const slugFromHashingAlgo = (hashingAlgorithm: HashingAlgorithm): HashingAlgoSlug => +export const slugFromHashingAlgo = (hashingAlgorithm: HashingAlgorithm): HashingAlgoSlug => Object.entries(HASHING_ALGOS).find( ([_, hashAlg]) => hashAlg.name === hashingAlgorithm.name && hashAlg.params === hashingAlgorithm.params diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3e1f534f05d3ddf99ade2fb682a823c5d317ac43..1a2c8520861233278d5870b5e2775fd505c206c9 100644 GIT binary patch delta 16621 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