diff --git a/.gitignore b/.gitignore index b6d9c1a0..f75ba12e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,27 +1,16 @@ +# Dependencies and Package Managers node_modules/ -.expo/ -dist/ -npm-debug.* -*.jks -*.p8 -*.p12 -*.key -*.mobileprovision -*.orig.* -web-build/ -modules/vlc-player/android/build - -# macOS -.DS_Store - -expo-env.d.ts - -Streamyfin.app - -*.mp4 -Streamyfin.app +bun.lock +bun.lockb package-lock.json +# Expo and React Native Build Artifacts +.expo/ +dist/ +web-build/ +.tsbuildinfo + +# Platform-specific Build Directories /ios /android /iostv @@ -29,21 +18,48 @@ package-lock.json /androidmobile /androidtv +# Module-specific Builds +modules/vlc-player/android/build modules/player/android +modules/hls-downloader/android/build -pc-api-7079014811501811218-719-3b9f15aeccf8.json -credentials.json +# Generated Applications +Streamyfin.app *.apk *.ipa -.continuerc.json +*.aab +# Certificates and Keys +*.jks +*.p8 +*.p12 +*.key +*.mobileprovision + +# Debug and Temporary Files +npm-debug.* +*.orig.* +*.mp4 + +# OS-specific Files +# macOS +.DS_Store + +# IDE and Editor Files .vscode/ .idea/ .ruby-lsp -modules/hls-downloader/android/build -streamyfin-4fec1-firebase-adminsdk.json + +# Environment and Configuration +expo-env.d.ts +.continuerc.json .env .env.local -*.aab -/version-backup-* -bun.lockb \ No newline at end of file + +# Secrets and Credentials +pc-api-7079014811501811218-719-3b9f15aeccf8.json +credentials.json +streamyfin-4fec1-firebase-adminsdk.json + +# Version and Backup Files +/version-backup-* \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 00000000..bf643af9 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,24 @@ +{ + // ========================================== + // Streamyfin - Recommended VS Code Extensions + // ========================================== + // Essential extensions for working with Streamyfin + // See .github/copilot-instructions.md for coding standards + + "recommendations": [ + // Code Quality & Formatting + "biomejs.biome", // Fast formatter and linter for JavaScript/TypeScript - replaces ESLint + Prettier + + // React Native & Expo + "expo.vscode-expo-tools", // Official Expo extension - provides commands, debugging, and config IntelliSense + "msjsdiag.vscode-react-native", // React Native debugging and IntelliSense - essential for RN development + + // Developer Experience + "bradlc.vscode-tailwindcss", // Tailwind CSS IntelliSense - autocomplete for NativeWind classes + "yoavbls.pretty-ts-errors", // Makes TypeScript error messages human-readable with formatting and highlights + "usernamehw.errorlens", // Shows errors and warnings inline in the editor - faster debugging + + // Bun Support + "oven.bun-vscode" // Official Bun extension - provides debugging and language support for Bun runtime + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json index b200b485..d1f8a0db 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,24 +1,178 @@ { + // ========================================== + // FORMATTING & LINTING + // ========================================== + + // Biome as default formatter + "editor.defaultFormatter": "biomejs.biome", + "editor.formatOnSave": true, + "editor.formatOnPaste": true, + "editor.formatOnType": false, + + // Language-specific formatters "[javascript]": { "editor.defaultFormatter": "biomejs.biome", "editor.formatOnSave": true }, + "[typescript]": { + "editor.defaultFormatter": "biomejs.biome", + "editor.formatOnSave": true + }, "[typescriptreact]": { "editor.defaultFormatter": "biomejs.biome", "editor.formatOnSave": true }, - "prettier.printWidth": 120, - "[swift]": { - "editor.defaultFormatter": "sswg.swift-lang" - }, - "editor.formatOnSave": true, - "editor.defaultFormatter": "biomejs.biome", - "[typescript]": { - "editor.defaultFormatter": "biomejs.biome", - "editor.formatOnSave": true - }, "[javascriptreact]": { "editor.defaultFormatter": "biomejs.biome", "editor.formatOnSave": true - } + }, + "[json]": { + "editor.defaultFormatter": "biomejs.biome", + "editor.formatOnSave": true + }, + "[jsonc]": { + "editor.defaultFormatter": "biomejs.biome", + "editor.formatOnSave": true + }, + "[swift]": { + "editor.insertSpaces": true, + "editor.tabSize": 2 + }, + + // ========================================== + // TYPESCRIPT & JAVASCRIPT + // ========================================== + + // TypeScript performance optimizations + "typescript.preferences.includePackageJsonAutoImports": "auto", + "typescript.suggest.autoImports": true, + "typescript.updateImportsOnFileMove.enabled": "always", + "typescript.preferences.preferTypeOnlyAutoImports": true, + "typescript.preferences.importModuleSpecifier": "relative", + "typescript.preferences.includeCompletionsForImportStatements": true, + "typescript.preferences.includeCompletionsWithSnippetText": true, + + // JavaScript settings + "javascript.preferences.importModuleSpecifier": "relative", + "javascript.suggest.autoImports": true, + "javascript.updateImportsOnFileMove.enabled": "always", + + // ========================================== + // REACT NATIVE & EXPO + // ========================================== + + // File associations for React Native + "files.associations": { + "*.expo.ts": "typescript", + "*.expo.tsx": "typescriptreact", + "*.expo.js": "javascript", + "*.expo.jsx": "javascriptreact", + "metro.config.js": "javascript", + "babel.config.js": "javascript", + "app.config.js": "javascript", + "eas.json": "jsonc" + }, + + // React Native specific settings + "emmet.includeLanguages": { + "typescriptreact": "html", + "javascriptreact": "html" + }, + "emmet.triggerExpansionOnTab": true, + + // Exclude build directories from search + "search.exclude": { + "**/node_modules": true + }, + + // ========================================== + // EDITOR PERFORMANCE & UX + // ========================================== + + // Performance optimizations + "editor.largeFileOptimizations": true, + "files.watcherExclude": { + "**/.git/objects/**": true, + "**/.git/subtree-cache/**": true, + "**/node_modules/**": true, + "**/.expo/**": true, + "**/ios/**": true, + "**/android/**": true, + "**/build/**": true, + "**/dist/**": true + }, + + // Better editor behavior + "editor.suggestSelection": "first", + "editor.quickSuggestions": { + "strings": true, + "comments": true, + "other": true + }, + "editor.snippetSuggestions": "top", + "editor.tabCompletion": "on", + "editor.wordBasedSuggestions": "off", + + // ========================================== + // TERMINAL & DEVELOPMENT + // ========================================== + + // Terminal settings for Bun (Windows-specific) + "terminal.integrated.profiles.windows": { + "Command Prompt": { + "path": "C:\\Windows\\System32\\cmd.exe", + "env": { + "PATH": "${env:PATH};./node_modules/.bin" + } + } + }, + + // ========================================== + // WORKSPACE & NAVIGATION + // ========================================== + + // Better workspace navigation + "explorer.fileNesting.enabled": true, + "explorer.fileNesting.expand": false, + "explorer.fileNesting.patterns": { + "*.ts": "${capture}.js", + "*.tsx": "${capture}.js", + "*.js": "${capture}.js,${capture}.js.map,${capture}.min.js,${capture}.d.ts", + "*.jsx": "${capture}.js", + "package.json": "package-lock.json,yarn.lock,bun.lock,bun.lockb,.yarnrc,.yarnrc.yml", + "tsconfig.json": "tsconfig.*.json", + ".env": ".env.*", + "app.json": "app.config.js,eas.json,expo-env.d.ts", + "README.md": "LICENSE.txt,SECURITY.md,CODE_OF_CONDUCT.md,CONTRIBUTING.md" + }, + + // Better breadcrumbs and navigation + "breadcrumbs.enabled": true, + "outline.showVariables": true, + "outline.showConstants": true, + + // ========================================== + // GIT & VERSION CONTROL + // ========================================== + + // Git integration + "git.autofetch": true, + "git.enableSmartCommit": true, + "git.confirmSync": false, + "git.ignoreLimitWarning": true, + + // ========================================== + // CODE QUALITY & ERRORS + // ========================================== + + // Better error detection + "typescript.validate.enable": true, + "javascript.validate.enable": true, + "editor.codeActionsOnSave": { + "source.fixAll": "explicit", + "source.organizeImports": "explicit" + }, + + // Problem matcher for better error display + "typescript.tsc.autoDetect": "on" }