diff --git a/README.md b/README.md index 54b27a4..ad03109 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Random Github Repository Generator -A website that give you random GitHub repository to get inspired +A website that gives you random GitHub repositories to get inspired diff --git a/package-lock.json b/package-lock.json index 0b6e67d..f2fcb9c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -944,6 +944,7 @@ "integrity": "sha512-JSQIQT6XvdchCRQEm7BABxPC56WP5RYVONAi+09S8tmzeP43fBsRlr95bFmsTQM2RHBldfgQk+jgdnsKI75daA==", "dev": true, "hasInstallScript": true, + "peer": true, "dependencies": { "@sveltejs/vite-plugin-svelte": "^2.5.0", "@types/cookie": "^0.5.1", @@ -975,6 +976,7 @@ "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.5.2.tgz", "integrity": "sha512-Dfy0Rbl+IctOVfJvWGxrX/3m6vxPLH8o0x+8FA5QEyMUQMo4kGOVIojjryU7YomBAexOTAuYf1RT7809yDziaA==", "dev": true, + "peer": true, "dependencies": { "@sveltejs/vite-plugin-svelte-inspector": "^1.0.4", "debug": "^4.3.4", @@ -1120,6 +1122,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.11.0.tgz", "integrity": "sha512-+whEdjk+d5do5nxfxx73oanLL9ghKO3EwM9kBCkUtWMRwWuPaFv9ScuqlYfQ6pAD6ZiJhky7TZ2ZYhrMsfMxVQ==", "dev": true, + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "6.11.0", "@typescript-eslint/types": "6.11.0", @@ -1285,6 +1288,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", "dev": true, + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -1546,6 +1550,7 @@ "url": "https://github.com/sponsors/ai" } ], + "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001541", "electron-to-chromium": "^1.4.535", @@ -1995,15 +2000,6 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, "node_modules/env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -2088,6 +2084,7 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz", "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==", "dev": true, + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -3784,6 +3781,7 @@ "url": "https://github.com/sponsors/ai" } ], + "peer": true, "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", @@ -3952,6 +3950,7 @@ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, + "peer": true, "bin": { "prettier": "bin-prettier.js" }, @@ -4121,6 +4120,7 @@ "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", "dev": true, + "peer": true, "bin": { "rollup": "dist/bin/rollup" }, @@ -4623,6 +4623,7 @@ "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.3.tgz", "integrity": "sha512-sqmG9KC6uUc7fb3ZuWoxXvqk6MI9Uu4ABA1M0fYDgTlFYu1k02xp96u6U9+yJZiVm84m9zge7rrA/BNZdFpOKw==", "dev": true, + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.1", "@jridgewell/sourcemap-codec": "^1.4.15", @@ -5007,6 +5008,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", "dev": true, + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -5124,6 +5126,7 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.3.tgz", "integrity": "sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==", "dev": true, + "peer": true, "dependencies": { "esbuild": "^0.18.10", "postcss": "^8.4.27", diff --git a/src/app.html b/src/app.html index 9c964c9..4a0343d 100644 --- a/src/app.html +++ b/src/app.html @@ -9,10 +9,7 @@ - - - - + Random Github Repository Generator | Get inspired - setTimeout(resolve, 5000)); - return fetchGithubApi(apiUrl, currentRetry + 1); + return fetchGithubApi(apiUrl, currentRetry); } else return await response.text(); } - return null!; + return null; } diff --git a/src/lib/server/index.ts b/src/lib/server/index.ts index abed08f..67c3825 100644 --- a/src/lib/server/index.ts +++ b/src/lib/server/index.ts @@ -1,6 +1,6 @@ // place files you want to import through the `$lib` alias in this folder. -import Repo from '$lib/models/Repo.ts'; -import Topic from '$lib/models/Topic.ts'; +import Repo from '$lib/models/Repo.js'; +import Topic from '$lib/models/Topic.js'; import { Sequelize } from '@sequelize/core'; import fs from 'fs'; diff --git a/src/lib/server/repoAdder.ts b/src/lib/server/repoAdder.ts index 52de0aa..1525df2 100644 --- a/src/lib/server/repoAdder.ts +++ b/src/lib/server/repoAdder.ts @@ -1,8 +1,8 @@ -import Topic from '$lib/models/Topic.ts'; +import Topic from '$lib/models/Topic.js'; import { Op } from '@sequelize/core'; -import Variables from '../../routes/api/globalVariables.js'; -import { fetchGithubApi } from '../fetchExtensions.js'; -import Repo from '$lib/models/Repo.ts'; +import Variables from '$api/globalVariables.js'; +import { fetchGithubApi } from '$lib/fetchExtensions.js'; +import Repo from '$lib/models/Repo.js'; async function addReposLoop(specialLoop: boolean = false) { let removedTopics: string[] = []; @@ -19,89 +19,85 @@ async function addReposLoop(specialLoop: boolean = false) { for (let page = 1; page <= 5; page++) { tasks.push( new Promise(async (resolve) => { - if (Variables.processAddingRepos) { - if (!Variables.processAddingRepos) { - await waitToContinue(); - } + // Wait if adding repos is paused + if (!Variables.processAddingRepos) { + await waitToContinue(); + } - if (!specialLoop || removedTopics.includes(topic.tag)) { - // Attend un temps aléatoire afin de ne pas avoir les mêmes réponses à chaque fois - const randomTime = Math.random() * 3000 + 500; // Random time between 0.5 and 3.5 seconds - await new Promise((resolve) => setTimeout(resolve, randomTime)); - console.log('Waited ' + randomTime + 'ms...'); - } + if (!specialLoop || removedTopics.includes(topic.tag)) { + // Wait a random time to avoid getting the same responses each time + const randomTime = Math.random() * 3000 + 500; // Random time between 0.5 and 3.5 seconds + await new Promise((resolve) => setTimeout(resolve, randomTime)); + console.log('Waited ' + randomTime + 'ms...'); + } - let numberOfAddedRepos = 0; + let numberOfAddedRepos = 0; - console.log('Adding repos for topic ' + topic.tag + ' on page ' + page); + console.log('Adding repos for topic ' + topic.tag + ' on page ' + page); - const url = - specialLoop && !removedTopics.includes(topic.tag) - ? `https://api.github.com/search/repositories?q=${encodeURI( - topic.name - )}&sort=updated&per_page=100&page=${page}` - : `https://api.github.com/search/repositories?q=stars:>0&sort=updated&order=desc&per_page=100&page=1`; + const url = + specialLoop && !removedTopics.includes(topic.tag) + ? `https://api.github.com/search/repositories?q=${encodeURI( + topic.name + )}&sort=updated&per_page=100&page=${page}` + : `https://api.github.com/search/repositories?q=stars:>0&sort=updated&order=desc&per_page=100&page=1`; - const json = await fetchGithubApi(url); + const json = await fetchGithubApi(url); - if (json !== null) { - const searchResult = JSON.parse(json); - for (let index = 0; index < searchResult.items.length; index++) { - const element = searchResult.items[index]; + if (json !== null) { + const searchResult = JSON.parse(json); + for (let index = 0; index < searchResult.items.length; index++) { + const element = searchResult.items[index]; - if (!Variables.processAddingRepos) { - await waitToContinue(); - } + if (!Variables.processAddingRepos) { + await waitToContinue(); + } - const repoId = element.id; - const star = element.stargazers_count ?? 0; - const tags = element.topics as string[]; - const description = element.description ?? ''; - - if (description.trim() === '') continue; // pas de description, on passe - - let formattedTopics = tags.join(','); - - description.split(' ').forEach((word: string) => { - const lowerCaseWord = word.toLocaleLowerCase(); - if ( - formattedTopics.includes(',' + lowerCaseWord + ',') === false && - topics.some( - (topic) => - topic.name.toLowerCase() === lowerCaseWord || topic.tag === lowerCaseWord - ) - ) { - formattedTopics += formattedTopics.length !== 0 ? ',' : '' + lowerCaseWord; - } - }); - - if (formattedTopics.length > 0) { - formattedTopics = ',' + formattedTopics + ','; - formattedTopics = formattedTopics.replace(/,+/g, ','); // Remove duplicate commas + const repoId = element.id; + const star = element.stargazers_count ?? 0; + const tags = element.topics as string[]; + const description = element.description ?? ''; + + if (description.trim() === '') continue; // No description, skip + + let formattedTopics = tags.join(','); + + description.split(' ').forEach((word: string) => { + const lowerCaseWord = word.toLocaleLowerCase(); + if ( + formattedTopics.includes(',' + lowerCaseWord + ',') === false && + topics.some( + (topic) => + topic.name.toLowerCase() === lowerCaseWord || topic.tag === lowerCaseWord + ) + ) { + formattedTopics += formattedTopics.length !== 0 ? ',' : '' + lowerCaseWord; } + }); + + if (formattedTopics.length > 0) { + formattedTopics = ',' + formattedTopics + ','; + formattedTopics = formattedTopics.replace(/,+/g, ','); // Remove duplicate commas + } - if (repoId) { - // If it don't exist yet, create it - if ((await Repo.count({ where: { repoId: repoId } })) === 0) { - console.log( - //'Creating repo ' + repoId + ' : ' + formattedTopics + ' : ' + star + '...' - '+1' - ); - Repo.create({ - repoId: repoId, - star: star, - topics: formattedTopics - }); - numberOfAddedRepos++; - } + if (repoId) { + // If it doesn't exist yet, create it + if ((await Repo.count({ where: { repoId: repoId } })) === 0) { + console.log('+1'); + await Repo.create({ + repoId: repoId, + star: star, + topics: formattedTopics + }); + numberOfAddedRepos++; } } + } - console.log('Done adding repos for topic ' + topic.tag + ' on page ' + page); + console.log('Done adding repos for topic ' + topic.tag + ' on page ' + page); - if (numberOfAddedRepos === 0) { - removedTopics.push(topic.tag); - } + if (numberOfAddedRepos === 0) { + removedTopics.push(topic.tag); } } @@ -113,7 +109,7 @@ async function addReposLoop(specialLoop: boolean = false) { await Promise.all(tasks); } - // Recalcul le nombre de repo pour chaque topic + // Recalculate the number of repos for each topic for (let i = 0; i < topics.length; i++) { const topic = topics[i]; const numberOfRepo = await Repo.count({ @@ -123,8 +119,8 @@ async function addReposLoop(specialLoop: boolean = false) { } } }); - topic.update({ numberOfRepo: numberOfRepo }); - topic.save(); + await topic.update({ numberOfRepo: numberOfRepo }); + await topic.save(); } Variables.specialLoopIndex += 1; diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 0f7577a..5b20ae3 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,16 +1,16 @@
diff --git a/src/routes/components/topics/SelectedTopics.svelte b/src/routes/components/topics/SelectedTopics.svelte index 5a68ecb..6194a2b 100644 --- a/src/routes/components/topics/SelectedTopics.svelte +++ b/src/routes/components/topics/SelectedTopics.svelte @@ -1,6 +1,6 @@