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 @@