From 5a22d81d36dd7f74c65596944d95ddb5a90b12bb Mon Sep 17 00:00:00 2001 From: Sachin Date: Mon, 17 Feb 2025 20:03:50 +0530 Subject: [PATCH 1/2] refactor: Remove unused files and update index.html for new redirect --- .gitignore | 24 ----- README.md | 33 ------ bun.lockb | Bin 22434 -> 0 bytes github/fetcher.js => fetcher.js | 0 github/index.html | 64 ------------ index.html | 5 +- package.json | 15 --- src/fetcher.js | 150 ---------------------------- src/styles.css | 171 -------------------------------- github/styles.css => styles.css | 0 10 files changed, 4 insertions(+), 458 deletions(-) delete mode 100644 .gitignore delete mode 100644 README.md delete mode 100644 bun.lockb rename github/fetcher.js => fetcher.js (100%) delete mode 100644 github/index.html delete mode 100644 package.json delete mode 100644 src/fetcher.js delete mode 100644 src/styles.css rename github/styles.css => styles.css (100%) diff --git a/.gitignore b/.gitignore deleted file mode 100644 index a547bf3..0000000 --- a/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -dist -dist-ssr -*.local - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? diff --git a/README.md b/README.md deleted file mode 100644 index bf5819a..0000000 --- a/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# 🚀 GitRepo Zip Fetcher - -Effortlessly download GitHub repositories and folders as ZIP files with just a few clicks! 🖱️ - -## ✨ Features - -- 📦 Fetch entire GitHub repos or specific folders -- 🗜️ Download repositories as ZIP files -- 🔒 Support for both public and private repositories -- 🔑 Optional GitHub Personal Access Token integration -- 📊 Real-time progress tracking -- 📱 Responsive design for all your devices - -## 🚀 How to Use - -1. 🌐 Open the app in your favorite web browser -2. 📝 Enter a GitHub repository URL -3. 🔑 (Optional) Click "Use Token" to enter your GitHub Personal Access Token -4. 🚀 Hit the "Fetch" button or press Enter -5. 📊 Watch the progress in the status output area -6. 💾 When it's done, your ZIP file will start downloading automatically! - -## 🛠️ Dependencies - -- [JSZip](https://stuk.github.io/jszip/): ZIP file wizardry 🧙‍♂️ -- [FileSaver.js](https://github.com/eligrey/FileSaver.js/): Download magic 🪄 -- [Octokit](https://github.com/octokit/octokit.js): GitHub API sorcery 🔮 - -## 📝 Note - -Your privacy is our top priority! 🛡️ This app runs entirely in your browser and doesn't collect or send any personal data. All operations happen on your device for maximum security. 🔒 - -Enjoy fetching your GitHub repositories with ease! 🎉 diff --git a/bun.lockb b/bun.lockb deleted file mode 100644 index 11539cbb498425446a9fff3102cf93fd15265919..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22434 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 - - - - - GitRepo Zip Fetcher - - - - - - - - -
-
-

GitRepo Zip Fetcher

-

Effortlessly download GitHub repositories and folders

-
-
-
- - - - -
- - - -
-
-

Made with ❤️ by Sachin Sharma

-

Note: This application runs locally on your computer and does not collect or transmit any personal data.

-
-
- - - - - - - - diff --git a/index.html b/index.html index 5e62a73..8f7bf14 100644 --- a/index.html +++ b/index.html @@ -11,7 +11,10 @@ - + +
diff --git a/package.json b/package.json deleted file mode 100644 index 4570039..0000000 --- a/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "github-repo-downloader", - "private": true, - "version": "1.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite preview" - }, - "devDependencies": { - "@vercel/analytics": "^1.3.1", - "vite": "^6.1.0" - } -} diff --git a/src/fetcher.js b/src/fetcher.js deleted file mode 100644 index 919e145..0000000 --- a/src/fetcher.js +++ /dev/null @@ -1,150 +0,0 @@ -import { Octokit } from "https://cdn.skypack.dev/@octokit/rest"; - -document.addEventListener("DOMContentLoaded", () => { - const repoInput = document.getElementById("repoInput"); - const tokenInput = document.getElementById("tokenInput"); - const fetchBtn = document.getElementById("fetchBtn"); - const statusLog = document.getElementById("statusLog"); - const statusOutput = document.getElementById("statusOutput"); - const fileListElement = document.getElementById("fileList"); - const fileListWrapper = document.getElementById("fileListWrapper"); - const toggleTokenBtn = document.getElementById("toggleTokenBtn"); - const tokenInfo = document.getElementById("tokenInfo"); - - let fetchedFiles = []; - let progressPercentage = 0; - - const updateStatus = (message) => { - statusLog.textContent = message; - statusOutput.style.display = "block"; - }; - - const updateProgress = (percent) => { - progressPercentage = percent; - statusLog.style.background = `linear-gradient(to right, rgba(100, 255, 218, 0.3) ${percent}%, transparent ${percent}%)`; - statusLog.innerHTML = `${statusLog.textContent} ${percent}% Complete`; - }; - - const fetchFolderContents = async (octokit, owner, repo, path) => { - const response = await octokit.rest.repos.getContent({ - owner, - repo, - path, - }); - return response.data; - }; - - const fetchFileContent = async (octokit, owner, repo, path, fileName, totalSize) => { - const response = await octokit.rest.repos.getContent({ - owner, - repo, - path, - mediaType: { - format: "raw", - }, - }); - updateStatus(`Fetching ${fileName}`); - updateProgress(100); - return response.data; - }; - - const processFolderContents = async (octokit, owner, repo, folder, zip, path = "") => { - for (const item of folder) { - if (item.type === "file") { - updateStatus(`Queueing fetch of ${item.name}`); - const fileContent = await fetchFileContent(octokit, owner, repo, item.path, item.name, item.size); - fetchedFiles.push(item); - updateFileList(); - zip.file(item.name, fileContent); - } else if (item.type === "dir") { - const subFolder = await fetchFolderContents(octokit, owner, repo, item.path); - const subFolderZip = zip.folder(item.name); - await processFolderContents(octokit, owner, repo, subFolder, subFolderZip, item.path); - } - } - }; - - const fetchRepositoryContents = async (octokit, owner, repo, path) => { - try { - const folderData = await fetchFolderContents(octokit, owner, repo, path); - const zip = new JSZip(); - await processFolderContents(octokit, owner, repo, folderData, zip, path); - return zip; - } catch (error) { - console.error(`Error: ${error}`); - throw error; - } - }; - - const updateFileList = () => { - fileListElement.innerHTML = ""; - fetchedFiles.forEach((file) => { - const li = document.createElement("li"); - li.textContent = file.name; - fileListElement.appendChild(li); - }); - fileListWrapper.style.display = "block"; - fileListElement.scrollTop = fileListElement.scrollHeight; - }; - - const fetchRepo = async () => { - updateStatus(""); - fetchedFiles = []; - fileListWrapper.style.display = "none"; - - const repoUrl = repoInput.value; - const token = tokenInput.value.trim(); - - if (!repoUrl.includes("github.com")) { - updateStatus("Invalid URL. Please enter a valid GitHub repository URL."); - return; - } - - const [, , , owner, repo, , , ...dirParts] = repoUrl.split("/"); - const path = dirParts.join("/"); - - const octokit = new Octokit({ auth: token }); - - updateStatus("Fetching repository contents..."); - try { - const zip = await fetchRepositoryContents(octokit, owner, repo, path); - - updateStatus("Compressing files..."); - const content = await zip.generateAsync({ type: "blob" }); - saveAs(content, `${path ? path.replace(/\/|%20/g, "-") : repo}.zip`); - - const fileList = zip.file(/.*/); - - updateProgress(0); - updateStatus( - `Fetched ${fileList.length} files\nUser: ${owner}\nRepository: ${repoUrl}\nFolder: ${path}\nSize: ${( - content.size / - 1024 / - 1024 - ).toFixed(2)} MB` - ); - } catch (error) { - if (error.status === 403) { - updateStatus("Rate limit exceeded. Please try again in a few minutes or use a GitHub Personal Access Token."); - } else { - updateStatus(`Error: ${error.message}`); - } - } - }; - - fetchBtn.addEventListener("click", fetchRepo); - repoInput.addEventListener("keydown", (e) => { - if (e.key === "Enter") { - fetchRepo(); - } - }); - - toggleTokenBtn.addEventListener("click", () => { - const isHidden = tokenInput.style.display === "none"; - tokenInput.style.display = isHidden ? "block" : "none"; - tokenInfo.style.display = isHidden ? "block" : "none"; - toggleTokenBtn.textContent = isHidden ? "Hide Token" : "Use Token"; - }); - - repoInput.focus(); -}); diff --git a/src/styles.css b/src/styles.css deleted file mode 100644 index 7b75470..0000000 --- a/src/styles.css +++ /dev/null @@ -1,171 +0,0 @@ -:root { - --accent-color: #64ffda; - --bg-color: #0a192f; - --surface-color: #112240; - --text-color: #ccd6f6; - --error-color: #ff5370; -} - -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -body { - background: linear-gradient(135deg, #0a192f, #112240); - font-family: "Poppins", sans-serif; - color: var(--text-color); - min-height: 100vh; -} - -.container { - display: flex; - flex-direction: column; - min-height: 100vh; -} - -header { - background-color: var(--surface-color); - padding: 2rem; - text-align: center; - box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); -} - -h1 { - font-weight: 500; - margin-bottom: 0.5rem; - color: var(--accent-color); - font-size: 2.5rem; -} - -main { - flex-grow: 1; - padding: 2rem; - max-width: 800px; - margin: 0 auto; - width: 100%; -} - -.input-wrapper { - display: flex; - flex-direction: column; - gap: 1rem; - margin-bottom: 1rem; -} - -input { - flex-grow: 1; - padding: 0.75rem 1rem; - border: 2px solid var(--accent-color); - border-radius: 4px; - background-color: var(--surface-color); - color: var(--text-color); - font-size: 1rem; - font-family: "Poppins", sans-serif; -} - -button { - display: flex; - align-items: center; - justify-content: center; - gap: 0.3rem; - padding: 0.75rem 1.5rem; - border: none; - border-radius: 4px; - background-color: var(--accent-color); - color: var(--bg-color); - font-size: 1rem; - font-weight: 500; - cursor: pointer; - transition: background-color 0.3s ease, transform 0.1s ease; -} - -button:hover { - background-color: #45e0bc; - transform: translateY(-2px); -} - -.token-info { - font-size: 0.9rem; - color: var(--accent-color); - margin-bottom: 1rem; -} - -.toggle-token-btn { - align-self: flex-start; - padding: 0.5rem 1rem; - font-size: 0.9rem; - background-color: var(--surface-color); - color: var(--accent-color); - border: 1px solid var(--accent-color); - cursor: pointer; - transition: background-color 0.3s ease; -} - -.toggle-token-btn:hover { - background-color: rgba(100, 255, 218, 0.1); -} - -.status-output { - background-color: var(--surface-color); - border-radius: 4px; - padding: 1rem; - margin-bottom: 2rem; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); -} - -.status-log { - font-family: "Courier New", monospace; - white-space: pre-wrap; - word-break: break-all; - font-size: 0.9rem; - line-height: 1.5; -} - -.file-list { - list-style-type: none; - max-height: 250px; - overflow-y: auto; -} - -.file-list li { - padding: 0.5rem 0; - border-bottom: 1px solid rgba(255, 255, 255, 0.1); - font-size: 0.9rem; -} - -footer { - background-color: var(--surface-color); - padding: 1rem; - text-align: center; - font-size: 0.9rem; -} - -footer a { - color: var(--accent-color); - text-decoration: none; - font-weight: 500; -} - -.note { - font-size: 0.8rem; - color: var(--error-color); - margin-top: 0.5rem; -} - -@media (max-width: 600px) { - h1 { - font-size: 1.8rem; - } - - p { - font-size: 0.9rem; - } - .input-wrapper { - flex-direction: column; - } - input { - font-size: 0.8rem; - } -} diff --git a/github/styles.css b/styles.css similarity index 100% rename from github/styles.css rename to styles.css From f52aa0a810cc2ac52e6ce2b8176889b29ff671ba Mon Sep 17 00:00:00 2001 From: Sachin Date: Thu, 22 May 2025 14:31:46 +0530 Subject: [PATCH 2/2] feat: Add Google site verification meta tag to index.html and create .gitignore for node_modules --- .gitignore | 1 + index.html | 1 + 2 files changed, 2 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..30bc162 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/node_modules \ No newline at end of file diff --git a/index.html b/index.html index 8f7bf14..aa50d79 100644 --- a/index.html +++ b/index.html @@ -9,6 +9,7 @@ content="GitRepo Zip Fetcher is a sleek tool for effortlessly downloading GitHub repositories and folders as ZIP files." /> +