From e9807c8ed527dca41c983553119a69705538491e Mon Sep 17 00:00:00 2001 From: MehmetDenizKaya <158476260+MehmetDenizKaya@users.noreply.github.com> Date: Fri, 6 Sep 2024 11:05:13 +0300 Subject: [PATCH 01/11] Add files via upload --- callfile.js | 268 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 268 insertions(+) create mode 100644 callfile.js diff --git a/callfile.js b/callfile.js new file mode 100644 index 0000000..7a95e2b --- /dev/null +++ b/callfile.js @@ -0,0 +1,268 @@ +#!/usr/bin/node + +const { dir } = require("console"); +const fs = require("fs"); +const path = require("path"); +const { Readline } = require("readline/promises"); + +let userInput = require('readline').createInterface({ + input: process.stdin, + output: process.stdout +}); + +let filePathArr = []; +let fileNameArr = []; +let ignoredDirArr = []; +let ignoredAppArr = []; +let packagesArr = []; + +let tempDirArr = []; +let tempAppArr = []; +let package_count = 0; + + +ignoredDirArr.push("node_modules"); +ignoredDirArr.push(".git"); + +function takeAppDir() { + return new Promise((resolveAppDir, rejectAppDir) => { + console.log("App directories ? (x for quit adding new directories)"); + + const appCallback = (appEventListener) => {// appEventListener == user output && appCallback == userInput + if (appEventListener.length === 1 && appEventListener.toLowerCase().includes('x')) { + userInput.removeListener('line', appCallback); + + userInput.question("\nAre you sure about all the directories? (y/n)", (appDirCheck) => { + if (appDirCheck.toLowerCase() === 'y') { //User entered all directories + ignoredAppArr.push(...tempAppArr); + console.log("\nYour app directories\n------------------\n", ignoredAppArr); + writeAppDirJSON(ignoredAppArr); // Go to write + resolveAppDir("Taking app directory is done.");//True Promise + userInput.removeListener('line', appCallback);//make clean userInput for second function + + } else if (appDirCheck.toLowerCase() === 'n') {//User wants to enter new app directories + userInput.question("Do you want to quit adding app directories? (y for quitting)\n", (quitApp) => { + if (quitApp.toLowerCase() === 'y') { + tempAppArr = []; + resolveAppDir("Quitted adding app directories.");//True Promise + userInput.removeListener('line', appCallback); + } else { + console.log("You have entered to continue."); //False Promise + userInput.on('line', appCallback); + } + });//userQuestion (All directories ?) + } else { + rejectAppDir("Invalid input provided."); // Return false promise value + } + }); + } else { + console.log("New app directory added."); + tempAppArr.push(appEventListener); + console.log("\nCurrent App Directories\n-----------------------------\n", tempAppArr); + } + };//userInput (callback) + userInput.on('line', appCallback); + });//Promise +} + +function writeAppDirJSON(appDir) //takeAppDir içinde +{ + const file = './packageInfo.json'; + + let existingDataApp = {}; + if (fs.existsSync(file)) { + const fileContent = fs.readFileSync(file, 'utf8'); + if (fileContent) { + existingDataApp = JSON.parse(fileContent); // Mevcut verileri al + } + } + + existingDataApp.appDirectories = appDir; + ignoredAppArr = appDir; + +}//writeAppJSON + + +function chooseDirectory() {//(2) + return new Promise ((resolveDir) => { + console.log("Do you want to ignore .github (x = no, y = yes)"); + const takeGitCallback = (takeGitInput) => { + userInput.removeListener('line',takeGitCallback); + takeGitInput.toLowerCase(); + console.log("Choice-->", takeGitInput); + if (takeGitInput === "x") { + console.log("You have selected to \"not\" ignore the .github"); + resolveDir("Github section closed."); + } + else if (takeGitInput === "y" || takeGitInput === "yes") { + ignoredDirArr.push(".github"); + console.log("You have selected to ignore .github"); + resolveDir("Github section closed."); + } + else + { + console.log("Wrong input detected, new one required."); + userInput.on('line',takeGitCallback); + } + };//userInput + + userInput.on('line',takeGitCallback); + });//promise +}//chooseDirectory + +function optionalDir() {//chooseDir içinde + return new Promise ((resolveOptDir,rejectOptDir) => { + userInput.question("Is there any directories you want to ignore ? (Write \"yes\" to add new directories, else will quit adding new directories.)\nChoice:", userChoice => { + if (userChoice.toLowerCase() === "yes") { + const optDirCallback = (optDirUserInput) => { + if (optDirUserInput.length == 1 && optDirUserInput.toLowerCase().includes('x')) {// check if user quits + userInput.removeListener('line',optDirCallback); + console.log("-Current ignored directories-\n", ignoredDirArr, "\n----------------------------\n" + ,"-Newly added directories-\n", tempDirArr); + userInput.question("Do you want to ignore these directories ? (Y/N):", (userChoice) => { + //----------------------------------------------------------------------------------------------------// + if (userChoice.length == 1 && userChoice.toLowerCase().includes('y')) {//user entered all directories (quit optionalDir) + ignoredDirArr.push(...tempDirArr);//pushes tempDir's values + resolveOptDir("Optional directories is done.Ignored directories\n---------------------------------\n", ignoredDirArr); + + /*+-----+*/searchDir('.',ignoredDirArr,ignoredAppArr);/*+-----+*/ + + //userInput.removeListener('line',optDirCallback); + } else if (userChoice.length == 1 && userChoice.toLowerCase().includes('n')) {//user wants to enter more or quit to add extra directories + tempDirArr = []; + + userInput.question("Select more or quit ? (M/Q)", (userChoice) => { + if (userChoice.length == 1 && userChoice.toLowerCase().includes('m')) { + console.log("You have selected to continue."); + userInput.on('line',optDirCallback); + } else if (userChoice.length == 1 && userChoice.toLowerCase().includes('q')) {//quit optionalDir + resolveOptDir("You have selected to quit adding more directories. Current directories to be ignored:", ignoredDirArr); + + /*+-----+*/searchDir('.',ignoredDirArr,ignoredAppArr)/*+-----+*/; + + //userInput.removeListener('line',optDirCallback); + } else {//quit optionalDir + rejectOptDir("Wrong input detected. Zenith will end now."); + userInput.off('line',optDirCallback); + } + });//userInput.question (M/Q) + + } + else + console.log("Wrong input detected."); + //----------------------------------------------------------------------------------------------------// + });//outer userQuestion + } else { //outer (main -x input-) if + tempDirArr.push(optDirUserInput); + console.log("Current ignored directories:", tempDirArr) + } + }//userInput (callback) + userInput.on('line',optDirCallback);//start taking input + }//outer (answer == yes) if + else { + console.log("You have selected to quit adding more directories. Current directories to be ignored:", ignoredDirArr); + /*+-----+*/searchDir('.',ignoredDirArr,ignoredAppArr);/*+-----+*/ + } + });//userQuestion () + })//promise +}//optionalDir + +function searchDir(dir, ignoredDirArr,ignoredAppArr) {// + let new_dir = fs.readdirSync(dir);//dir = current dir we are searching, newDir = result of the directories in "dir" in string array + for (const item of new_dir) { + try { + const newDirPath = path.join(dir, item); + let stats = fs.statSync(newDirPath);//newDirPath = current object (it can be dir or file) + if (stats.isDirectory() && !ignoredDirArr.includes(newDirPath) && !ignoredAppArr.includes(newDirPath)) + searchDir(newDirPath, ignoredDirArr,ignoredAppArr); + + else if (stats.isFile()) + searchFile(newDirPath); + + else { + if (ignoredAppArr.includes(newDirPath) || ignoredDirArr.includes(newDirPath)) + console.log("Unknown object type:" + path.basename(newDirPath)); + continue; + } + } catch (error) { + console.log("Error occured when searchin for directories:",error); + } + } +}//searchDir(with arr) + +function searchFile(dir) { //searchDir içinde + let stats = fs.statSync(dir); + if (stats.isDirectory()) + return; + + let readFile = fs.readFileSync(dir, "utf8"); + const fileName = path.basename(dir); + + if (fileName === "package.json" && !filePathArr.includes(dir)) { + const usablefileName = JSON.parse(readFile); + package_count++; + filePathArr.push(dir); + fileNameArr.push(usablefileName.name); + console.log("Count:", package_count, "DIR:", dir); + writeFiletoJSON(filePathArr,fileNameArr); + } +}//searchFile + +function writeFiletoJSON(filePathArr, fileNameArr) { //(4) + const file = './packageInfo.json'; + + let existingDataDir = {}; + if (fs.existsSync(file)) { + const fileContent = fs.readFileSync(file, 'utf8'); + if (fileContent) { + existingDataDir = JSON.parse(fileContent); + } + } + + const newData = filePathArr.reduce((acc, item, index) => { + const dirName = path.dirname(item);//dirname --> gets path, basename --> gets last part + const filePath = fileNameArr[index]; + acc[filePath] = dirName;//item - index + return acc; + }, {}); // {} == başlangıç değerine ait boş nesne ? + + existingDataDir.packages = newData; + packagesArr = newData; + +}//writeFileJSON + +async function startZenith() { +console.log("---------------Zenith Terminal---------------\nType (x) to exit the terminal."); + try { + await takeAppDir();//start first function, await for its promise + await chooseDirectory(); + await optionalDir(); + writetoJSON(ignoredAppArr,ignoredDirArr,packagesArr); + userInput.removeAllListeners('line'); + } catch (error) { + console.log("Error!!!\n---------\n",error); + return; + } +} + + +function writetoJSON(ignoredAppArr,ignoredDirArr,packagesArr){ + + const data = { + appDirectories: ignoredAppArr, + packages: packagesArr, + ignore: ignoredDirArr + }; + + + fs.writeFile('./packageInfo.json', JSON.stringify(data, null, 2), (err) => { + if (err) + console.warn("Error occured while writing:", err); + + console.log("Data written successfully ."); + }); +} + +startZenith(); + + From 0a986f59625ad2719c20a109795ae1a329eec662 Mon Sep 17 00:00:00 2001 From: MehmetDenizKaya <158476260+MehmetDenizKaya@users.noreply.github.com> Date: Fri, 6 Sep 2024 11:28:04 +0300 Subject: [PATCH 02/11] Update and rename callfile.js to setup.js --- callfile.js => setup.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) rename callfile.js => setup.js (96%) diff --git a/callfile.js b/setup.js similarity index 96% rename from callfile.js rename to setup.js index 7a95e2b..a60e67b 100644 --- a/callfile.js +++ b/setup.js @@ -168,11 +168,11 @@ function optionalDir() {//chooseDir içinde }//optionalDir function searchDir(dir, ignoredDirArr,ignoredAppArr) {// - let new_dir = fs.readdirSync(dir);//dir = current dir we are searching, newDir = result of the directories in "dir" in string array + const new_dir = fs.readdirSync(dir);//dir = current dir we are searching, newDir = result of the directories in "dir" in string array for (const item of new_dir) { try { - const newDirPath = path.join(dir, item); - let stats = fs.statSync(newDirPath);//newDirPath = current object (it can be dir or file) + let newDirPath = path.join(dir, item); + const stats = fs.statSync(newDirPath);//newDirPath = current object (it can be dir or file) if (stats.isDirectory() && !ignoredDirArr.includes(newDirPath) && !ignoredAppArr.includes(newDirPath)) searchDir(newDirPath, ignoredDirArr,ignoredAppArr); @@ -191,11 +191,11 @@ function searchDir(dir, ignoredDirArr,ignoredAppArr) {// }//searchDir(with arr) function searchFile(dir) { //searchDir içinde - let stats = fs.statSync(dir); + const stats = fs.statSync(dir); if (stats.isDirectory()) return; - let readFile = fs.readFileSync(dir, "utf8"); + const readFile = fs.readFileSync(dir, "utf8"); const fileName = path.basename(dir); if (fileName === "package.json" && !filePathArr.includes(dir)) { @@ -247,7 +247,6 @@ console.log("---------------Zenith Terminal---------------\nType (x) to exit the function writetoJSON(ignoredAppArr,ignoredDirArr,packagesArr){ - const data = { appDirectories: ignoredAppArr, packages: packagesArr, From 48c090874fb0c295769f6b04374973a449f6f859 Mon Sep 17 00:00:00 2001 From: MehmetDenizKaya <158476260+MehmetDenizKaya@users.noreply.github.com> Date: Fri, 6 Sep 2024 11:29:40 +0300 Subject: [PATCH 03/11] Create bin for adding setup.js --- bin | 1 + 1 file changed, 1 insertion(+) create mode 100644 bin diff --git a/bin b/bin new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/bin @@ -0,0 +1 @@ + From 198f3c5c3d224fe080f6092b98bf55d3dfa9e19e Mon Sep 17 00:00:00 2001 From: MehmetDenizKaya <158476260+MehmetDenizKaya@users.noreply.github.com> Date: Fri, 6 Sep 2024 11:42:41 +0300 Subject: [PATCH 04/11] Update setup.js changed let -> const --- setup.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/setup.js b/setup.js index a60e67b..4de981e 100644 --- a/setup.js +++ b/setup.js @@ -10,11 +10,11 @@ let userInput = require('readline').createInterface({ output: process.stdout }); -let filePathArr = []; -let fileNameArr = []; -let ignoredDirArr = []; -let ignoredAppArr = []; -let packagesArr = []; +const filePathArr = []; +const fileNameArr = []; +const ignoredDirArr = []; +const ignoredAppArr = []; +const packagesArr = []; let tempDirArr = []; let tempAppArr = []; From a140de43b807928ffd4adf6a18b5fdb0f6d3854f Mon Sep 17 00:00:00 2001 From: MehmetDenizKaya <158476260+MehmetDenizKaya@users.noreply.github.com> Date: Fri, 6 Sep 2024 11:47:01 +0300 Subject: [PATCH 05/11] Update setup.js --- setup.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.js b/setup.js index 4de981e..dd9731b 100644 --- a/setup.js +++ b/setup.js @@ -5,7 +5,7 @@ const fs = require("fs"); const path = require("path"); const { Readline } = require("readline/promises"); -let userInput = require('readline').createInterface({ +const userInput = require('readline').createInterface({ input: process.stdin, output: process.stdout }); From 7ff1e393db746d04fd5d056269760f9ab79cb9f0 Mon Sep 17 00:00:00 2001 From: MehmetDenizKaya <158476260+MehmetDenizKaya@users.noreply.github.com> Date: Fri, 6 Sep 2024 11:48:53 +0300 Subject: [PATCH 06/11] Rename bin to abc --- bin => abc | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename bin => abc (100%) diff --git a/bin b/abc similarity index 100% rename from bin rename to abc From a1d86a256684d001e635aa7d20326ef46a8f01f0 Mon Sep 17 00:00:00 2001 From: MehmetDenizKaya <158476260+MehmetDenizKaya@users.noreply.github.com> Date: Fri, 6 Sep 2024 11:49:05 +0300 Subject: [PATCH 07/11] Rename setup.js to bin/setup.js --- setup.js => bin/setup.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename setup.js => bin/setup.js (100%) diff --git a/setup.js b/bin/setup.js similarity index 100% rename from setup.js rename to bin/setup.js From 828498c324838fccaae4faedf34fcd27498a724d Mon Sep 17 00:00:00 2001 From: MehmetDenizKaya <158476260+MehmetDenizKaya@users.noreply.github.com> Date: Fri, 6 Sep 2024 11:54:06 +0300 Subject: [PATCH 08/11] Update package.json changed path --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8cf3c42..b723a85 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "@jotforminc/zenith", + "name": "@jotforminc/bin/setup.js", "packageManager": "yarn@1.22.21", "version": "2.5.0", "description": "", From 6aca432a911fb38caf61de3fca445b47da9e0e53 Mon Sep 17 00:00:00 2001 From: MehmetDenizKaya <158476260+MehmetDenizKaya@users.noreply.github.com> Date: Fri, 6 Sep 2024 11:56:14 +0300 Subject: [PATCH 09/11] Update package.json --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index b723a85..c2d718a 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "@jotforminc/bin/setup.js", + "name": "@jotforminc/zenith", "packageManager": "yarn@1.22.21", "version": "2.5.0", "description": "", @@ -9,7 +9,7 @@ "README.md" ], "bin": { - "zenith": "./build/index.js" + "zenith": "./bin/setup.js" }, "devDependencies": { "@aws-sdk/types": "3.310.0", From e0ba5a3096cb63da1458bf562bb3e548e202b52d Mon Sep 17 00:00:00 2001 From: MehmetDenizKaya <158476260+MehmetDenizKaya@users.noreply.github.com> Date: Fri, 6 Sep 2024 15:27:51 +0300 Subject: [PATCH 10/11] Update setup.js --- bin/setup.js | 103 +++++++++++++++++++++++++-------------------------- 1 file changed, 50 insertions(+), 53 deletions(-) diff --git a/bin/setup.js b/bin/setup.js index dd9731b..d56a4bc 100644 --- a/bin/setup.js +++ b/bin/setup.js @@ -28,31 +28,31 @@ function takeAppDir() { return new Promise((resolveAppDir, rejectAppDir) => { console.log("App directories ? (x for quit adding new directories)"); - const appCallback = (appEventListener) => {// appEventListener == user output && appCallback == userInput + const appCallback = (appEventListener) => { if (appEventListener.length === 1 && appEventListener.toLowerCase().includes('x')) { userInput.removeListener('line', appCallback); userInput.question("\nAre you sure about all the directories? (y/n)", (appDirCheck) => { - if (appDirCheck.toLowerCase() === 'y') { //User entered all directories + if (appDirCheck.toLowerCase() === 'y') { ignoredAppArr.push(...tempAppArr); console.log("\nYour app directories\n------------------\n", ignoredAppArr); - writeAppDirJSON(ignoredAppArr); // Go to write - resolveAppDir("Taking app directory is done.");//True Promise - userInput.removeListener('line', appCallback);//make clean userInput for second function + writeAppDirJSON(ignoredAppArr); + resolveAppDir("Taking app directory is done."); + userInput.removeListener('line', appCallback); - } else if (appDirCheck.toLowerCase() === 'n') {//User wants to enter new app directories + } else if (appDirCheck.toLowerCase() === 'n') { userInput.question("Do you want to quit adding app directories? (y for quitting)\n", (quitApp) => { if (quitApp.toLowerCase() === 'y') { tempAppArr = []; - resolveAppDir("Quitted adding app directories.");//True Promise + resolveAppDir("Quitted adding app directories."); userInput.removeListener('line', appCallback); } else { - console.log("You have entered to continue."); //False Promise + console.log("You have entered to continue."); userInput.on('line', appCallback); } - });//userQuestion (All directories ?) + }); } else { - rejectAppDir("Invalid input provided."); // Return false promise value + rejectAppDir("Invalid input provided."); } }); } else { @@ -60,12 +60,12 @@ function takeAppDir() { tempAppArr.push(appEventListener); console.log("\nCurrent App Directories\n-----------------------------\n", tempAppArr); } - };//userInput (callback) + }; userInput.on('line', appCallback); - });//Promise + }); } -function writeAppDirJSON(appDir) //takeAppDir içinde +function writeAppDirJSON(appDir) { const file = './packageInfo.json'; @@ -73,17 +73,17 @@ function writeAppDirJSON(appDir) //takeAppDir içinde if (fs.existsSync(file)) { const fileContent = fs.readFileSync(file, 'utf8'); if (fileContent) { - existingDataApp = JSON.parse(fileContent); // Mevcut verileri al + existingDataApp = JSON.parse(fileContent); } } existingDataApp.appDirectories = appDir; ignoredAppArr = appDir; -}//writeAppJSON +} -function chooseDirectory() {//(2) +function chooseDirectory() { return new Promise ((resolveDir) => { console.log("Do you want to ignore .github (x = no, y = yes)"); const takeGitCallback = (takeGitInput) => { @@ -104,30 +104,29 @@ function chooseDirectory() {//(2) console.log("Wrong input detected, new one required."); userInput.on('line',takeGitCallback); } - };//userInput + }; userInput.on('line',takeGitCallback); - });//promise -}//chooseDirectory + }); +} -function optionalDir() {//chooseDir içinde +function optionalDir() { return new Promise ((resolveOptDir,rejectOptDir) => { userInput.question("Is there any directories you want to ignore ? (Write \"yes\" to add new directories, else will quit adding new directories.)\nChoice:", userChoice => { if (userChoice.toLowerCase() === "yes") { const optDirCallback = (optDirUserInput) => { - if (optDirUserInput.length == 1 && optDirUserInput.toLowerCase().includes('x')) {// check if user quits + if (optDirUserInput.length == 1 && optDirUserInput.toLowerCase().includes('x')) { userInput.removeListener('line',optDirCallback); console.log("-Current ignored directories-\n", ignoredDirArr, "\n----------------------------\n" ,"-Newly added directories-\n", tempDirArr); userInput.question("Do you want to ignore these directories ? (Y/N):", (userChoice) => { //----------------------------------------------------------------------------------------------------// - if (userChoice.length == 1 && userChoice.toLowerCase().includes('y')) {//user entered all directories (quit optionalDir) - ignoredDirArr.push(...tempDirArr);//pushes tempDir's values + if (userChoice.length == 1 && userChoice.toLowerCase().includes('y')) { + ignoredDirArr.push(...tempDirArr); resolveOptDir("Optional directories is done.Ignored directories\n---------------------------------\n", ignoredDirArr); - - /*+-----+*/searchDir('.',ignoredDirArr,ignoredAppArr);/*+-----+*/ - - //userInput.removeListener('line',optDirCallback); + + searchDir('.',ignoredDirArr,ignoredAppArr); + } else if (userChoice.length == 1 && userChoice.toLowerCase().includes('n')) {//user wants to enter more or quit to add extra directories tempDirArr = []; @@ -138,41 +137,39 @@ function optionalDir() {//chooseDir içinde } else if (userChoice.length == 1 && userChoice.toLowerCase().includes('q')) {//quit optionalDir resolveOptDir("You have selected to quit adding more directories. Current directories to be ignored:", ignoredDirArr); - /*+-----+*/searchDir('.',ignoredDirArr,ignoredAppArr)/*+-----+*/; + searchDir('.',ignoredDirArr,ignoredAppArr); - //userInput.removeListener('line',optDirCallback); - } else {//quit optionalDir + } else { rejectOptDir("Wrong input detected. Zenith will end now."); userInput.off('line',optDirCallback); } - });//userInput.question (M/Q) + }); } else console.log("Wrong input detected."); - //----------------------------------------------------------------------------------------------------// - });//outer userQuestion - } else { //outer (main -x input-) if + }); + } else { tempDirArr.push(optDirUserInput); console.log("Current ignored directories:", tempDirArr) } - }//userInput (callback) - userInput.on('line',optDirCallback);//start taking input - }//outer (answer == yes) if + } + userInput.on('line',optDirCallback); + } else { console.log("You have selected to quit adding more directories. Current directories to be ignored:", ignoredDirArr); - /*+-----+*/searchDir('.',ignoredDirArr,ignoredAppArr);/*+-----+*/ + searchDir('.',ignoredDirArr,ignoredAppArr); } - });//userQuestion () - })//promise -}//optionalDir + }); + }) +} -function searchDir(dir, ignoredDirArr,ignoredAppArr) {// - const new_dir = fs.readdirSync(dir);//dir = current dir we are searching, newDir = result of the directories in "dir" in string array +function searchDir(dir, ignoredDirArr,ignoredAppArr) { + const new_dir = fs.readdirSync(dir); for (const item of new_dir) { try { let newDirPath = path.join(dir, item); - const stats = fs.statSync(newDirPath);//newDirPath = current object (it can be dir or file) + const stats = fs.statSync(newDirPath); if (stats.isDirectory() && !ignoredDirArr.includes(newDirPath) && !ignoredAppArr.includes(newDirPath)) searchDir(newDirPath, ignoredDirArr,ignoredAppArr); @@ -188,9 +185,9 @@ function searchDir(dir, ignoredDirArr,ignoredAppArr) {// console.log("Error occured when searchin for directories:",error); } } -}//searchDir(with arr) +} -function searchFile(dir) { //searchDir içinde +function searchFile(dir) { const stats = fs.statSync(dir); if (stats.isDirectory()) return; @@ -206,9 +203,9 @@ function searchFile(dir) { //searchDir içinde console.log("Count:", package_count, "DIR:", dir); writeFiletoJSON(filePathArr,fileNameArr); } -}//searchFile +} -function writeFiletoJSON(filePathArr, fileNameArr) { //(4) +function writeFiletoJSON(filePathArr, fileNameArr) { const file = './packageInfo.json'; let existingDataDir = {}; @@ -220,21 +217,21 @@ function writeFiletoJSON(filePathArr, fileNameArr) { //(4) } const newData = filePathArr.reduce((acc, item, index) => { - const dirName = path.dirname(item);//dirname --> gets path, basename --> gets last part + const dirName = path.dirname(item); const filePath = fileNameArr[index]; - acc[filePath] = dirName;//item - index + acc[filePath] = dirName; return acc; - }, {}); // {} == başlangıç değerine ait boş nesne ? + }, {}); existingDataDir.packages = newData; packagesArr = newData; -}//writeFileJSON +} async function startZenith() { console.log("---------------Zenith Terminal---------------\nType (x) to exit the terminal."); try { - await takeAppDir();//start first function, await for its promise + await takeAppDir(); await chooseDirectory(); await optionalDir(); writetoJSON(ignoredAppArr,ignoredDirArr,packagesArr); From 90d2b364a4a77abc9cd707dfddf0165a92e1f602 Mon Sep 17 00:00:00 2001 From: MehmetDenizKaya <158476260+MehmetDenizKaya@users.noreply.github.com> Date: Thu, 12 Sep 2024 09:36:08 +0300 Subject: [PATCH 11/11] Update setup.js Final Code --- bin/setup.js | 301 ++++++++++++++++++++++++--------------------------- 1 file changed, 139 insertions(+), 162 deletions(-) diff --git a/bin/setup.js b/bin/setup.js index d56a4bc..1be6e46 100644 --- a/bin/setup.js +++ b/bin/setup.js @@ -1,74 +1,54 @@ #!/usr/bin/node -const { dir } = require("console"); +const { removeTypeDuplicates } = require("@babel/types"); +const { dir, error } = require("console"); const fs = require("fs"); const path = require("path"); const { Readline } = require("readline/promises"); -const userInput = require('readline').createInterface({ +let userInput = require('readline').createInterface({ input: process.stdin, output: process.stdout }); -const filePathArr = []; -const fileNameArr = []; -const ignoredDirArr = []; -const ignoredAppArr = []; -const packagesArr = []; - -let tempDirArr = []; -let tempAppArr = []; -let package_count = 0; - - -ignoredDirArr.push("node_modules"); -ignoredDirArr.push(".git"); - -function takeAppDir() { - return new Promise((resolveAppDir, rejectAppDir) => { - console.log("App directories ? (x for quit adding new directories)"); - - const appCallback = (appEventListener) => { - if (appEventListener.length === 1 && appEventListener.toLowerCase().includes('x')) { - userInput.removeListener('line', appCallback); - - userInput.question("\nAre you sure about all the directories? (y/n)", (appDirCheck) => { - if (appDirCheck.toLowerCase() === 'y') { - ignoredAppArr.push(...tempAppArr); - console.log("\nYour app directories\n------------------\n", ignoredAppArr); - writeAppDirJSON(ignoredAppArr); - resolveAppDir("Taking app directory is done."); - userInput.removeListener('line', appCallback); - - } else if (appDirCheck.toLowerCase() === 'n') { - userInput.question("Do you want to quit adding app directories? (y for quitting)\n", (quitApp) => { - if (quitApp.toLowerCase() === 'y') { - tempAppArr = []; - resolveAppDir("Quitted adding app directories."); - userInput.removeListener('line', appCallback); - } else { - console.log("You have entered to continue."); - userInput.on('line', appCallback); - } - }); - } else { - rejectAppDir("Invalid input provided."); - } - }); +let filePaths = []; +let fileNames = []; +let ignoredDirectories = []; +let ignoredApps = []; +let packages = []; + +let tempDirectories = []; +let tempApps = []; +let packageCount = 0; + +ignoredDirectories.push("node_modules"); +ignoredDirectories.push(".git"); + +const appDirectory = () => { + return new Promise((resolve) => { + console.log("Enter app directories (x to stop)"); + const dirInput = (dirChoice) => { + if (dirChoice.toLowerCase() === 'x') { + console.log("Directory entry stopped."); + ignoredApps.push(...tempApps); + ignoredApps = removeDuplicate(ignoredApps); + console.log("\nYour app directories\n------------------\n", ignoredApps); + searchAppDirJSON(ignoredApps); + resolve("Taking app directory is done."); + userInput.removeListener('line',dirInput); } else { console.log("New app directory added."); - tempAppArr.push(appEventListener); - console.log("\nCurrent App Directories\n-----------------------------\n", tempAppArr); + tempApps.push(dirChoice); + console.log("\nCurrent App Directories\n-----------------------------\n", tempApps); } }; - userInput.on('line', appCallback); + userInput.on('line', dirInput); }); -} +}; -function writeAppDirJSON(appDir) +function searchAppDirJSON(appDir) { const file = './packageInfo.json'; - let existingDataApp = {}; if (fs.existsSync(file)) { const fileContent = fs.readFileSync(file, 'utf8'); @@ -76,138 +56,130 @@ function writeAppDirJSON(appDir) existingDataApp = JSON.parse(fileContent); } } - existingDataApp.appDirectories = appDir; - ignoredAppArr = appDir; - + ignoredApps = appDir; } - function chooseDirectory() { - return new Promise ((resolveDir) => { - console.log("Do you want to ignore .github (x = no, y = yes)"); - const takeGitCallback = (takeGitInput) => { - userInput.removeListener('line',takeGitCallback); - takeGitInput.toLowerCase(); - console.log("Choice-->", takeGitInput); - if (takeGitInput === "x") { + return new Promise (async (resolve) => { + console.log("Do you want to ignore .gitignore (x = no, y = yes)"); + const gitInput = async (gitChoice) => { + userInput.removeListener('line',gitInput); + gitChoice.toLowerCase(); + console.log("Choice-->", gitChoice); + if (gitChoice === "x") { console.log("You have selected to \"not\" ignore the .github"); - resolveDir("Github section closed."); - } - else if (takeGitInput === "y" || takeGitInput === "yes") { - ignoredDirArr.push(".github"); + resolve(); + } else if (gitChoice === "y" || gitChoice === "yes") { + await readGitignore(); console.log("You have selected to ignore .github"); - resolveDir("Github section closed."); - } - else - { + resolve(); + } else { console.log("Wrong input detected, new one required."); - userInput.on('line',takeGitCallback); + userInput.on('line',gitInput); } }; - - userInput.on('line',takeGitCallback); + userInput.on('line',gitInput); }); } -function optionalDir() { - return new Promise ((resolveOptDir,rejectOptDir) => { - userInput.question("Is there any directories you want to ignore ? (Write \"yes\" to add new directories, else will quit adding new directories.)\nChoice:", userChoice => { - if (userChoice.toLowerCase() === "yes") { - const optDirCallback = (optDirUserInput) => { - if (optDirUserInput.length == 1 && optDirUserInput.toLowerCase().includes('x')) { - userInput.removeListener('line',optDirCallback); - console.log("-Current ignored directories-\n", ignoredDirArr, "\n----------------------------\n" - ,"-Newly added directories-\n", tempDirArr); - userInput.question("Do you want to ignore these directories ? (Y/N):", (userChoice) => { - //----------------------------------------------------------------------------------------------------// - if (userChoice.length == 1 && userChoice.toLowerCase().includes('y')) { - ignoredDirArr.push(...tempDirArr); - resolveOptDir("Optional directories is done.Ignored directories\n---------------------------------\n", ignoredDirArr); - - searchDir('.',ignoredDirArr,ignoredAppArr); - - } else if (userChoice.length == 1 && userChoice.toLowerCase().includes('n')) {//user wants to enter more or quit to add extra directories - tempDirArr = []; - - userInput.question("Select more or quit ? (M/Q)", (userChoice) => { - if (userChoice.length == 1 && userChoice.toLowerCase().includes('m')) { - console.log("You have selected to continue."); - userInput.on('line',optDirCallback); - } else if (userChoice.length == 1 && userChoice.toLowerCase().includes('q')) {//quit optionalDir - resolveOptDir("You have selected to quit adding more directories. Current directories to be ignored:", ignoredDirArr); - - searchDir('.',ignoredDirArr,ignoredAppArr); - - } else { - rejectOptDir("Wrong input detected. Zenith will end now."); - userInput.off('line',optDirCallback); - } - }); +function readGitignore () { + return new Promise (resolve => { + try { + const gitPackages = path.resolve('.gitignore'); + fs.readFile(gitPackages, 'utf8', (err,data) => { + const newData = data + .split('\n') + .map(data => data.trim()) + .filter(data => data && !data.startsWith('#')); + + ignoredDirectories.push(...newData); + console.log("gitignore files have been added.",ignoredDirectories); + resolve(); + }); + } catch (error) { + console.log("Error occured when reading github",error) + + if (data == null) + console.log(".gitignore data is null ") + }; + }) +}; - } - else - console.log("Wrong input detected."); - }); +function optionalDir() { + return new Promise (resolve => { + userInput.question("Is there any directories you want to ignore ? (Write \"y\" to add new directories, else will quit adding new directories.)\nChoice:", userChoice => { + console.log("Press \"n\" to quit") + if (userChoice.toLowerCase() === "y") { + const optInput = (optChoice) => { + if (optChoice.length == 1 && optChoice.toLowerCase().includes('n')) { + userInput.removeListener('line',optInput); + console.log("-Current ignored directories-\n", ignoredDirectories, "\n----------------------------\n" + ,"-Newly added directories-\n", tempDirectories); + ignoredDirectories.push(...tempDirectories); + ignoredDirectories = removeDuplicate(ignoredDirectories); + console.log("Optional directories is done. Ignored directories\n---------------------------------\n", ignoredDirectories); + searchDirectory('.',ignoredDirectories,ignoredApps); + resolve(); } else { - tempDirArr.push(optDirUserInput); - console.log("Current ignored directories:", tempDirArr) + tempDirectories.push(optChoice); + console.log("Current ignored directories:", tempDirectories) } - } - userInput.on('line',optDirCallback); - } - else { - console.log("You have selected to quit adding more directories. Current directories to be ignored:", ignoredDirArr); - searchDir('.',ignoredDirArr,ignoredAppArr); + }//optInput + userInput.on('line',optInput); + } else { + console.log("You have selected to quit adding more directories. Current directories to be ignored:", ignoredDirectories); + searchDirectory('.',ignoredDirectories,ignoredApps); } - }); - }) + });//userQuestion + }); } -function searchDir(dir, ignoredDirArr,ignoredAppArr) { +function searchDirectory(dir, ignoredDirArr,ignoredAppArr) { + + if (dir == undefined) + return; + const new_dir = fs.readdirSync(dir); - for (const item of new_dir) { - try { - let newDirPath = path.join(dir, item); - const stats = fs.statSync(newDirPath); - if (stats.isDirectory() && !ignoredDirArr.includes(newDirPath) && !ignoredAppArr.includes(newDirPath)) - searchDir(newDirPath, ignoredDirArr,ignoredAppArr); - - else if (stats.isFile()) - searchFile(newDirPath); - - else { - if (ignoredAppArr.includes(newDirPath) || ignoredDirArr.includes(newDirPath)) - console.log("Unknown object type:" + path.basename(newDirPath)); - continue; + return Promise.all( + new_dir.map(async (item) => { + try { + const newDirPath = path.join(dir, item); + const stats = fs.statSync(newDirPath); + if (stats.isDirectory() && !ignoredDirArr.includes(newDirPath) && !ignoredAppArr.includes(newDirPath)) { + return searchDirectory(newDirPath, ignoredDirArr, ignoredAppArr); + } else if (stats.isFile()) { + searchFile(newDirPath); + } else { + console.log("Unknown object type:", path.basename(newDirPath)); + } + } catch (error) { + console.log("Error occurred when searching for directories:", error); } - } catch (error) { - console.log("Error occured when searchin for directories:",error); - } - } + }) + ); } function searchFile(dir) { - const stats = fs.statSync(dir); + let stats = fs.statSync(dir); + if (stats.isDirectory()) return; - - const readFile = fs.readFileSync(dir, "utf8"); + + let readFile = fs.readFileSync(dir, "utf8"); const fileName = path.basename(dir); - - if (fileName === "package.json" && !filePathArr.includes(dir)) { + if (fileName === "package.json" && !filePaths.includes(dir)) { const usablefileName = JSON.parse(readFile); - package_count++; - filePathArr.push(dir); - fileNameArr.push(usablefileName.name); - console.log("Count:", package_count, "DIR:", dir); - writeFiletoJSON(filePathArr,fileNameArr); + packageCount++; + filePaths.push(dir); + fileNames.push(usablefileName.name); + console.log("Count:", packageCount, "DIR:", dir); + writeFiletoJSON(filePaths,fileNames); } } function writeFiletoJSON(filePathArr, fileNameArr) { const file = './packageInfo.json'; - let existingDataDir = {}; if (fs.existsSync(file)) { const fileContent = fs.readFileSync(file, 'utf8'); @@ -215,26 +187,25 @@ function writeFiletoJSON(filePathArr, fileNameArr) { existingDataDir = JSON.parse(fileContent); } } - const newData = filePathArr.reduce((acc, item, index) => { const dirName = path.dirname(item); const filePath = fileNameArr[index]; acc[filePath] = dirName; return acc; }, {}); - existingDataDir.packages = newData; - packagesArr = newData; - + packages = newData; } async function startZenith() { console.log("---------------Zenith Terminal---------------\nType (x) to exit the terminal."); try { - await takeAppDir(); + await appDirectory(); await chooseDirectory(); await optionalDir(); - writetoJSON(ignoredAppArr,ignoredDirArr,packagesArr); + await searchDirectory(); + writetoJSON(ignoredApps,ignoredDirectories,packages); + userInput.removeAllListeners('line'); } catch (error) { console.log("Error!!!\n---------\n",error); @@ -242,6 +213,15 @@ console.log("---------------Zenith Terminal---------------\nType (x) to exit the } } +function removeDuplicate(arr) +{ + const tempArr = []; + arr.forEach(element => { + if (!tempArr.includes(element)) + tempArr.push(element); + }); + return tempArr; +} function writetoJSON(ignoredAppArr,ignoredDirArr,packagesArr){ const data = { @@ -250,7 +230,6 @@ function writetoJSON(ignoredAppArr,ignoredDirArr,packagesArr){ ignore: ignoredDirArr }; - fs.writeFile('./packageInfo.json', JSON.stringify(data, null, 2), (err) => { if (err) console.warn("Error occured while writing:", err); @@ -260,5 +239,3 @@ function writetoJSON(ignoredAppArr,ignoredDirArr,packagesArr){ } startZenith(); - -