CoolFace
Apppublic

admin08077/Githubgemini

sourceHugging Faceotherupdated 10mo agoView on Hugging Face
0likes
githubService-DbuFimKh.js.map1 linesDownload Raw Back to assets
1{"version":3,"file":"githubService-DbuFimKh.js","sources":["../../services/githubService.ts"],"sourcesContent":["import type { Octokit } from 'octokit';\nimport type { Repo, FileNode } from '../types.ts';\nimport { logEvent, logError, measurePerformance } from './index.ts';\n\n// --- Repository-Level Functions ---\n\n/**\n * Fetches the repositories for the authenticated user.\n * @param octokit An authenticated Octokit instance.\n * @returns A promise that resolves to an array of Repo objects.\n */\nexport const getRepos = async (octokit: Octokit): Promise<Repo[]> => {\n    return measurePerformance('getRepos', async () => {\n        logEvent('getRepos_start');\n        try {\n            const { data } = await octokit.request('GET /user/repos', {\n                type: 'owner',\n                sort: 'updated',\n                per_page: 100,\n            });\n            logEvent('getRepos_success', { count: data.length });\n            return data as Repo[];\n        } catch (error) {\n            logError(error as Error, { context: 'getRepos' });\n            throw error;\n        }\n    });\n};\n\n/**\n * Deletes a repository. This is a destructive action.\n * @param octokit An authenticated Octokit instance.\n * @param owner The repository owner's login.\n * @param repo The repository name.\n * @returns A promise that resolves when the deletion is complete.\n */\nexport const deleteRepo = async (octokit: Octokit, owner: string, repo: string): Promise<void> => {\n     return measurePerformance('deleteRepo', async () => {\n        logEvent('deleteRepo_start', { owner, repo });\n        try {\n            await octokit.request('DELETE /repos/{owner}/{repo}', {\n                owner,\n                repo,\n            });\n            logEvent('deleteRepo_success', { owner, repo });\n        } catch (error) {\n            logError(error as Error, { context: 'deleteRepo', owner, repo });\n            throw error;\n        }\n    });\n};\n\n/**\n * Fetches the last 30 commits for a repository.\n * @param octokit An authenticated Octokit instance.\n * @param owner The repository owner's login.\n * @param repo The repository name.\n * @returns A promise that resolves to an array of commit objects.\n */\nexport const getCommitHistory = async (octokit: Octokit, owner: string, repo: string): Promise<any[]> => {\n    return measurePerformance('getCommitHistory', async () => {\n        logEvent('getCommitHistory_start', { owner, repo });\n        try {\n            const { data } = await octokit.request('GET /repos/{owner}/{repo}/commits', {\n                owner,\n                repo,\n                per_page: 30,\n            });\n            logEvent('getCommitHistory_success', { count: data.length });\n            return data;\n        } catch (error) {\n            logError(error as Error, { context: 'getCommitHistory' });\n            throw error;\n        }\n    });\n};\n\n// --- File and Tree Functions ---\n\n/**\n * Fetches the file tree for a repository recursively.\n * @param octokit An authenticated Octokit instance.\n * @param owner The repository owner's login.\n * @param repo The repository name.\n * @returns A promise that resolves to the root FileNode of the repository.\n */\nexport const getRepoTree = async (octokit: Octokit, owner: string, repo: string): Promise<FileNode> => {\n     return measurePerformance('getRepoTree', async () => {\n        logEvent('getRepoTree_start', { owner, repo });\n        try {\n            const { data: repoData } = await octokit.request('GET /repos/{owner}/{repo}', { owner, repo });\n            const defaultBranch = repoData.default_branch;\n\n            const { data: branch } = await octokit.request('GET /repos/{owner}/{repo}/branches/{branch}', {\n                owner,\n                repo,\n                branch: defaultBranch,\n            });\n            const treeSha = branch.commit.commit.tree.sha;\n            \n            const { data: treeData } = await octokit.request('GET /repos/{owner}/{repo}/git/trees/{tree_sha}', {\n                owner,\n                repo,\n                tree_sha: treeSha,\n                recursive: 'true',\n            });\n\n            const root: FileNode = { name: repo, type: 'folder', path: '', children: [] };\n            \n            treeData.tree.forEach((item: any) => {\n                const pathParts = item.path.split('/');\n                let currentNode = root;\n\n                pathParts.forEach((part, index) => {\n                    if (!currentNode.children) {\n                        currentNode.children = [];\n                    }\n                    const currentPath = pathParts.slice(0, index + 1).join('/');\n                    let childNode = currentNode.children.find(child => child.name === part && child.path === currentPath);\n\n                    if (!childNode) {\n                        childNode = {\n                            name: part,\n                            path: item.path,\n                            type: item.type === 'tree' ? 'folder' : 'file',\n                        };\n                        if(item.type === 'tree') {\n                            childNode.children = [];\n                            childNode.path = currentPath; \n                        }\n                        currentNode.children.push(childNode);\n                    }\n                    currentNode = childNode;\n                });\n            });\n\n            logEvent('getRepoTree_success', { owner, repo, items: treeData.tree.length });\n            return root;\n        } catch (error) {\n            logError(error as Error, { context: 'getRepoTree', owner, repo });\n            throw new Error(`Failed to fetch repository tree: ${(error as Error).message}`);\n        }\n    });\n};\n\n/**\n * Fetches the content of a specific file from a repository.\n * @param octokit An authenticated Octokit instance.\n * @param owner The repository owner's login.\n * @param repo The repository name.\n * @param path The full path to the file within the repository.\n * @returns A promise that resolves to the string content of the file.\n */\nexport const getFileContent = async (octokit: Octokit, owner: string, repo: string, path: string): Promise<string> => {\n    return measurePerformance('getFileContent', async () => {\n        logEvent('getFileContent_start', { owner, repo, path });\n        try {\n            const { data } = await octokit.request('GET /repos/{owner}/{repo}/contents/{path}', {\n                owner,\n                repo,\n                path,\n            });\n\n            if (Array.isArray(data) || data.type !== 'file' || typeof data.content !== 'string') {\n                 throw new Error(\"Path did not point to a valid file or content was missing.\");\n            }\n\n            // The content is Base64 encoded, so we need to decode it.\n            const content = atob(data.content);\n            logEvent('getFileContent_success', { owner, repo, path });\n            return content;\n        } catch (error) {\n             logError(error as Error, { context: 'getFileContent', owner, repo, path });\n             throw new Error(`Failed to fetch file content: ${(error as Error).message}`);\n        }\n    });\n};\n\n// --- Commit and Branching Functions ---\n\n/**\n * Commits one or more files to a repository in a single commit.\n * @param octokit An authenticated Octokit instance.\n * @param owner The repository owner's login.\n * @param repo The repository name.\n * @param files An array of file objects with path and content.\n * @param message The commit message.\n * @param branch The branch to commit to (defaults to 'main').\n * @returns A promise that resolves with the URL of the new commit.\n */\nexport const commitFiles = async (\n    octokit: Octokit,\n    owner: string,\n    repo: string,\n    files: { path: string; content: string }[],\n    message: string,\n    branch: string = 'main'\n): Promise<string> => {\n    return measurePerformance('commitFiles', async () => {\n        logEvent('commitFiles_start', { owner, repo, fileCount: files.length, branch });\n\n        try {\n            // 1. Get the latest commit SHA and base tree SHA\n            const { data: refData } = await octokit.request('GET /repos/{owner}/{repo}/git/ref/{ref}', {\n                owner,\n                repo,\n                ref: `heads/${branch}`,\n            });\n            const latestCommitSha = refData.object.sha;\n            const { data: commitData } = await octokit.request('GET /repos/{owner}/{repo}/git/commits/{commit_sha}', {\n                owner,\n                repo,\n                commit_sha: latestCommitSha,\n            });\n            const baseTreeSha = commitData.tree.sha;\n\n            // 2. Create blobs for all new file contents\n            const blobPromises = files.map(file =>\n                octokit.request('POST /repos/{owner}/{repo}/git/blobs', {\n                    owner,\n                    repo,\n                    content: file.content,\n                    encoding: 'utf-8',\n                })\n            );\n            const blobs = await Promise.all(blobPromises);\n            \n            // 3. Create the tree object\n            const tree = blobs.map((blob, index) => ({\n                path: files[index].path,\n                mode: '100644' as const, // file mode\n                type: 'blob' as const,\n                sha: blob.data.sha,\n            }));\n\n            // 4. Create a new tree\n            const { data: newTree } = await octokit.request('POST /repos/{owner}/{repo}/git/trees', {\n                owner,\n                repo,\n                base_tree: baseTreeSha,\n                tree,\n            });\n\n            // 5. Create a new commit\n            const { data: newCommit } = await octokit.request('POST /repos/{owner}/{repo}/git/commits', {\n                owner,\n                repo,\n                message,\n                tree: newTree.sha,\n                parents: [latestCommitSha],\n            });\n\n            // 6. Update the branch reference (fast-forward)\n            await octokit.request('PATCH /repos/{owner}/{repo}/git/refs/{ref}', {\n                owner,\n                repo,\n                ref: `heads/${branch}`,\n                sha: newCommit.sha,\n            });\n\n            logEvent('commitFiles_success', { commitUrl: newCommit.html_url });\n            return newCommit.html_url;\n\n        } catch (error) {\n            logError(error as Error, { context: 'commitFiles', owner, repo, branch });\n            throw new Error(`Failed to commit files: ${(error as Error).message}`);\n        }\n    });\n};"],"names":["getRepos","octokit","measurePerformance","logEvent","data","error","logError","getCommitHistory","owner","repo","getRepoTree","repoData","defaultBranch","branch","treeSha","treeData","root","item","pathParts","currentNode","part","index","currentPath","childNode","child","getFileContent","path","content","commitFiles","files","message","refData","latestCommitSha","commitData","baseTreeSha","blobPromises","file","tree","blob","newTree","newCommit"],"mappings":"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"}