diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5981e49 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +node_modules +.prettierignore \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d61f7c0 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Harry + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..6054a9d --- /dev/null +++ b/README.md @@ -0,0 +1,24 @@ +# GTA V OPT-X + +Optimize/Boost your GTA V FPS according to your PC configuration! You just need NodeJS preinstalled. This works with GTA V online/offline on **Steam, EpicGames, Rockstar** and any other version! + +![OPTX](./screenshot.jpg) + +# Usage + +After installing NodeJS, just run the below command to get started. After that proceed with your prefered configuration. + +```npm +npx goptx +``` + +# Support + +If you found this useful, consider buying me a coffee and starring this repo ⭐
+
+Buy Me A Coffee
+
+ +
+ +This was inspired by ▶️ [GTA V: Dramatically increase performance / FPS with any setup! / Best Settings! GTA 5 Ceyo Perico by Panjno](https://www.youtube.com/watch?v=XvAueyGJTt0) diff --git a/bin/index.js b/bin/index.js new file mode 100644 index 0000000..fd7b13c --- /dev/null +++ b/bin/index.js @@ -0,0 +1,146 @@ +#! /usr/bin/env node + +import dialog from "node-file-dialog"; +import chalk from "chalk"; +import boxen from "boxen"; + +import { + createSettings, + createValues, + setHPET, + writeCommandFile, +} from "../lib/index.js"; + +import inquirer from "inquirer"; +import "./intro.js"; + +const config = { type: "directory" }; + +var optimizationConfig = { + opt: ["Settings", "Registry", "Disable HPET"], + tier: 2, + level: 1, +}; +var gameFolder = ""; +var procCount = false; +var procCountDone = 0; + +inquirer + .prompt([ + { + type: "checkbox", + name: "opt-list", + message: "Check all the optimization you want to do right now", + choices: ["Settings", "Registry", "Disable HPET"], + checked: true, + }, + { + type: "rawlist", + name: "pc-tier", + message: "What's your PC configuration?", + choices: ["Ultra-Low-End", "Low-End", "Mid-End", "High-End"], + }, + { + type: "rawlist", + name: "config-level", + message: "Which optimization would you use?", + choices: [ + "Recomended for Most PCs", + "Good PC but shutters", + "Best FPS with low visual", + ], + }, + ]) + + .then( + (answers) => { + var pc_tier = answers["pc-tier"]; + var pc_opt = answers["opt-list"]; + var pc_level = answers["config-level"]; + + if (pc_opt.length) { + optimizationConfig.opt = pc_opt; + } + + if (pc_tier === "Low-End") { + optimizationConfig.tier = 2; + } else if (pc_tier === "Ultra-Low-End") { + optimizationConfig.tier = 1; + } else if (pc_tier === "High-End") { + optimizationConfig.tier = 4; + } else { + optimizationConfig.tier = 3; + } + + if (pc_level === "Good PC but shutters") { + optimizationConfig.level = 2; + } else if (pc_level === "Best FPS with low visual") { + optimizationConfig.level = 3; + } else { + optimizationConfig.level = 1; + } + + console.log( + "\nNow, you have to choose your game directory to continue. Press any key to go on!" + ); + + process.stdin.setRawMode(true); + process.stdin.resume(); + process.stdin.once("data", function () { + dialog(config) + .then(async (dir) => { + gameFolder = dir[0]; + + procCount = optimizationConfig.opt.length + 1; + + writeCommandFile(gameFolder, optimizationConfig.level, (t) => { + logStatus(t, "Creating commndline file "); + }); + + if (optimizationConfig.opt.includes("Settings")) { + createSettings(optimizationConfig.tier, (t) => { + logStatus(t, "Editing Settings Configuration"); + }); + } + if (optimizationConfig.opt.includes("Registry")) { + await createValues(optimizationConfig, (t) => { + logStatus(t, "Creating Registry Values"); + }); + } + if (optimizationConfig.opt.includes("Disable HPET")) { + setHPET((t) => { + logStatus(t, "Disabling HPET"); + }); + } + }) + .catch((err) => { + console.log("No directory was selected! Aborting.."); + process.exit(); + }); + }); + }, + function (err) { + console.log("we died! %s", err); + } + ); + +function logStatus(s, t) { + procCountDone = procCountDone + 1; + s ? (s = chalk.green("Success")) : chalk.red("Failed!"); + console.log(chalk.gray(procCountDone + "/" + procCount) + " " + t + ": " + s); + checkProcCount(); +} + +function checkProcCount() { + if (procCountDone === procCount) { + console.log( + "\n" + + chalk.yellow( + boxen( + "If this really helped you, please consider buying me a coffee :) https://buymeacoffee.com/harrytom" + ) + ) + ); + process.exit(); + } +} diff --git a/bin/intro.js b/bin/intro.js new file mode 100644 index 0000000..5201e76 --- /dev/null +++ b/bin/intro.js @@ -0,0 +1,19 @@ +import chalk from "chalk"; +import boxen from "boxen"; + +const introText = ` ) ( ) + ( * ) ( ( /( )\\ ) * ) ( /( + )\\ ) ' ) /( )\\ ( ( )\\()) (()/(' ) /( )\\()) +(()/( ( )(_))((((_)( )\\ )\\ ((_)\\ /(_))( )(_))((_)\ + /(_))_ (_(_()) )\\ _ )\\ ((_)((_) ((_) (_)) (_(_()) __((_) +(_)) __||_ _| (_)_\\(_) \\ \\ / / / _ \\ | _ \\|_ _| \\ \\/ / + | (_ | | | / _ \\ \\ V / | (_) || _/ | | > < + \\___| |_| /_/ \\_\\ \\_/ \\___/ |_| |_| /_/\\_\\`; + +const caption = `Optimize/Boost your GTA V FPS according to your PC configuration!\nMade by ${chalk.blue( + "Harry" +)} (https://github.com/Harry260)`; + +console.log(chalk.green(introText)); +console.log("\r\n"); +console.log(boxen(caption), "\r\n"); diff --git a/lib/HPET.js b/lib/HPET.js new file mode 100644 index 0000000..2a68e83 --- /dev/null +++ b/lib/HPET.js @@ -0,0 +1,11 @@ +import { execSync } from "child_process"; + +export default function setHPET(callback = console.log) { + try { + execSync("bcdedit /deletevalue useplatformclock", { + encoding: "utf-8", + }); + } catch { + callback(true); + } +} diff --git a/lib/commands.js b/lib/commands.js new file mode 100644 index 0000000..cb54e18 --- /dev/null +++ b/lib/commands.js @@ -0,0 +1,40 @@ +import fs from "fs"; +import chalk from "chalk"; + +var commands = { + 1: `-borderless +-FrameQueueLimit 0 +-DX11`, + 2: `-noquanttransform +-borderless +-FrameQueueLimit 1 +-DX11 +-disableHyperthreading`, + 3: `-noquanttransform +-fullscreen +-FrameQueueLimit 1 +-DX10 +-cityDensity 0.3 +-anisotropicQualityLevel 0 +-grassQuality 0 +-hdr +-lodScale 0.0 +-noInGameDOF +-particalQuality 0 +-pedLodBias 0.0 +-postFX 0 +-reflectionQuality 0 +-shaderQuality 0 +-vehicleLodBias 0.0`, +}; + +export default function writeCommandFile(gf, level, callback = console.log) { + console.log("Set Game directory to: ", chalk.gray(gf), "\n"); + fs.writeFile(gf + "/commandline.txt", commands[level], function (err) { + if (err) { + callback(false); + } else { + callback(true); + } + }); +} diff --git a/lib/index.js b/lib/index.js new file mode 100644 index 0000000..352efcc --- /dev/null +++ b/lib/index.js @@ -0,0 +1,4 @@ +export { default as createValues } from "../lib/registry.js"; +export { default as setHPET } from "../lib/HPET.js"; +export { default as createSettings } from "../lib/settings.js"; +export { default as writeCommandFile } from "../lib/commands.js"; diff --git a/lib/registry.js b/lib/registry.js new file mode 100644 index 0000000..047bd4e --- /dev/null +++ b/lib/registry.js @@ -0,0 +1,99 @@ +import regedit from "regedit"; + +export default async function createValues( + config = { + opt: ["Settings", "Registry", "Disable HPET"], + tier: 2, + level: 1, + }, + callback = console.log +) { + try { + await regedit.putValue( + { + "HKCU\\System\\GameConfigStore": { + GameDVR_Enabled: { + value: "00000000", + type: "REG_DWORD", + }, + GameDVR_HonorUserFSEBehaviorMode: { + value: "00000001", + type: "REG_DWORD", + }, + GameDVR_DXGIHonorFSEWindowsCompatible: { + value: "00000001", + type: "REG_DWORD", + }, + GameDVR_FSEBehaviorMode: { + value: "00000002", + type: "REG_DWORD", + }, + GameDVR_FSEBehavior: { + value: "00000002", + type: "REG_DWORD", + }, + }, + + "HKLM\\SOFTWARE\\Microsoft\\PolicyManager\\default\\ApplicationManagement\\AllowGameDVR": + { + value: { + value: "00000000", + type: "REG_DWORD", + }, + }, + "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Multimedia\\SystemProfile\\Tasks\\Games": + { + "GPU Priority": { + value: "00000008", + type: "REG_DWORD", + }, + Priority: { + value: "00000006", + type: "REG_DWORD", + }, + "Scheduling Category": { + value: "High", + type: "REG_SZ", + }, + "SFIO Priority": { + value: "High", + type: "REG_SZ", + }, + }, + }, + () => {} + ); + + if (config.tier === 1 || config.tier === 2 || config.tier === 3) { + await regedit.putValue( + { + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Multimedia\\SystemProfile": + { + SystemResponsiveness: { + value: "00000001", + type: "REG_DWORD", + }, + }, + }, + () => {} + ); + } else { + await regedit.putValue( + { + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Multimedia\\SystemProfile": + { + SystemResponsiveness: { + value: "00000000", + type: "REG_DWORD", + }, + }, + }, + () => {} + ); + } + + callback(true); + } catch (error) { + callback(false); + } +} diff --git a/lib/settings-xml.js b/lib/settings-xml.js new file mode 100644 index 0000000..6f8dc13 --- /dev/null +++ b/lib/settings-xml.js @@ -0,0 +1,6 @@ +export default { + 4: `SMC_AUTO`, + 3: `SMC_AUTO`, + 2: `SMC_AUTO`, + 1: `SMC_AUTO`, +}; diff --git a/lib/settings.js b/lib/settings.js new file mode 100644 index 0000000..b79c9f9 --- /dev/null +++ b/lib/settings.js @@ -0,0 +1,86 @@ +import os, { type } from "os"; +import fs from "fs"; +import inquirer from "inquirer"; +import chalk from "chalk"; +import { XMLParser, XMLBuilder } from "fast-xml-parser"; +import settingsXml from "./settings-xml.js"; + +var config = { + tier: 3, + callback: console.log, + filepath: "", +}; + +const options = { + ignoreAttributes: false, + format: true, +}; + +function createSettingsFile() { + fs.readFile(config.filepath, "utf8", function (err, xmlDataStr) { + if (err) { + config.callback(false); + } + + const parser = new XMLParser(options); + let SettingObj = parser.parse(xmlDataStr); + var videoCard = SettingObj.Settings.VideoCardDescription; + + let NewSettingsObj = parser.parse(settingsXml[config.tier]); + NewSettingsObj.Settings.VideoCardDescription = videoCard; + + const builder = new XMLBuilder(options); + const output = builder.build(NewSettingsObj); + + fs.writeFile(config.filepath, output, function (err) { + if (err) { + config.callback(false); + } else { + config.callback(true); + } + }); + fs.writeFile(config.filepath + ".backup.xml", xmlDataStr, () => {}); + }); +} + +function checkPath(path) { + if (fs.existsSync(path)) { + config.filepath = path; + createSettingsFile(); + } else { + console.log( + chalk.red("Couldn't find the GTA V settings path."), + `Type ${chalk.blue("A")} to abort or type the path to ${chalk.blue( + "settings.xml" + )} file` + ); + + AskPath(); + } +} + +function AskPath() { + inquirer + .prompt([ + { + type: "message", + name: "path", + message: `Path to ${chalk.blue("settings.xml")}: `, + }, + ]) + .then((answers) => { + if (answers.path.toLowerCase() === "a") { + callback(false); + } else { + checkPath(answers.path); + } + }); +} + +export default function createSettings(tier = 3, callback = console.log) { + var home = os.homedir(); + var path = home + "\\Documents\\Rockstar Games\\GTA V\\settings.xml"; + config.tier = tier; + config.callback = callback; + checkPath(path); +} diff --git a/lib/tempCodeRunnerFile.js b/lib/tempCodeRunnerFile.js new file mode 100644 index 0000000..6bf0c97 --- /dev/null +++ b/lib/tempCodeRunnerFile.js @@ -0,0 +1 @@ +w \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..669031e --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1165 @@ +{ + "name": "gtav-optx", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "gtav-optx", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "boxen": "^7.0.0", + "chalk": "^5.1.2", + "fast-xml-parser": "^4.0.12", + "inquirer": "^9.1.4", + "node-file-dialog": "^1.0.3", + "regedit": "^5.1.1" + }, + "bin": { + "optx": "index.js" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-escapes": { + "version": "6.0.0", + "license": "MIT", + "dependencies": { + "type-fest": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "6.0.1", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bl": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/boxen": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.0.tgz", + "integrity": "sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^7.0.0", + "chalk": "^5.0.1", + "cli-boxes": "^3.0.0", + "string-width": "^5.1.2", + "type-fest": "^2.13.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.0.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/camelcase": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.0.tgz", + "integrity": "sha512-JToIvOmz6nhGsUhAYScbo2d6Py5wojjNfoxoc2mEVLUdJ70gJK2gnd+ABY1Tc3sVMyK7QDPtN0T/XdlCQWITyQ==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chalk": { + "version": "5.1.2", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "license": "MIT" + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "2.7.0", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.0.0", + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-xml-parser": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.12.tgz", + "integrity": "sha512-/Nmo3823Rfx7UTJosQNz6hBVbszfv1Unb7A4iNJZhvCGCgtIHv/uODmrYIH8vc05+XKZ4hNIOv6SlBejvJgATw==", + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + }, + "funding": { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + }, + "node_modules/figures": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^5.0.0", + "is-unicode-supported": "^1.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/if-async": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/if-async/-/if-async-3.7.4.tgz", + "integrity": "sha512-BFEH2mZyeF6KZKaKLVPZ0wMjIiWOdjvZ7zbx8ENec0qfZhJwKFbX/4jKM5LTKyJEc/GOqUKiiJ2IFKT9yWrZqA==" + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/inquirer": { + "version": "9.1.4", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^6.0.0", + "chalk": "^5.1.2", + "cli-cursor": "^4.0.0", + "cli-width": "^4.0.0", + "external-editor": "^3.0.3", + "figures": "^5.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^6.1.2", + "run-async": "^2.4.0", + "rxjs": "^7.5.7", + "string-width": "^5.1.2", + "strip-ansi": "^7.0.1", + "through": "^2.3.6", + "wrap-ansi": "^8.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-interactive": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "1.3.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, + "node_modules/lodash": { + "version": "4.17.21", + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "license": "ISC" + }, + "node_modules/node-file-dialog": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/node-file-dialog/-/node-file-dialog-1.0.3.tgz", + "integrity": "sha512-hFOeuQHWk1f44jFI6LB7SxDWBRzN/RhLPTTn6PiD4qsRAwv7k5nWpmUbIpHkyIrJvM9Ekpwtz0dxF6zwYndK6g==" + }, + "node_modules/onetime": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "6.1.2", + "license": "MIT", + "dependencies": { + "bl": "^5.0.0", + "chalk": "^5.0.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.6.1", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.1.0", + "log-symbols": "^5.1.0", + "strip-ansi": "^7.0.1", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/regedit": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/regedit/-/regedit-5.1.1.tgz", + "integrity": "sha512-NJ2OZ14czryt3RiQyMM/nptaiu0bF1CT+YVw0PBziMrLJyq8pdmIAvupi9E+NPWJLDJtyHDoKs5g5wcbP8ANIg==", + "dependencies": { + "debug": "^4.1.0", + "if-async": "^3.7.4", + "stream-slicer": "0.0.6", + "through2": "^0.6.3" + } + }, + "node_modules/restore-cursor": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/rxjs": { + "version": "7.6.0", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "license": "ISC" + }, + "node_modules/stream-slicer": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/stream-slicer/-/stream-slicer-0.0.6.tgz", + "integrity": "sha512-QsY0LbweYE5L+e+iBQgtkM5WUIf7+kCMA/m2VULv8rEEDDnlDPsPvOHH4nli6uaZOKQEt64u65h0l/eeZo7lCw==" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-ansi": { + "version": "7.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "node_modules/through": { + "version": "2.3.8", + "license": "MIT" + }, + "node_modules/through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", + "dependencies": { + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + }, + "node_modules/tmp": { + "version": "0.0.33", + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tslib": { + "version": "2.4.1", + "license": "0BSD" + }, + "node_modules/type-fest": { + "version": "3.3.0", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/widest-line": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "dependencies": { + "string-width": "^5.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi": { + "version": "8.0.1", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + } + }, + "dependencies": { + "ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "requires": { + "string-width": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "ansi-escapes": { + "version": "6.0.0", + "requires": { + "type-fest": "^3.0.0" + } + }, + "ansi-regex": { + "version": "6.0.1" + }, + "ansi-styles": { + "version": "6.2.1" + }, + "base64-js": { + "version": "1.5.1" + }, + "bl": { + "version": "5.1.0", + "requires": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "boxen": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.0.tgz", + "integrity": "sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==", + "requires": { + "ansi-align": "^3.0.1", + "camelcase": "^7.0.0", + "chalk": "^5.0.1", + "cli-boxes": "^3.0.0", + "string-width": "^5.1.2", + "type-fest": "^2.13.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.0.1" + }, + "dependencies": { + "type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==" + } + } + }, + "buffer": { + "version": "6.0.3", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "camelcase": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.0.tgz", + "integrity": "sha512-JToIvOmz6nhGsUhAYScbo2d6Py5wojjNfoxoc2mEVLUdJ70gJK2gnd+ABY1Tc3sVMyK7QDPtN0T/XdlCQWITyQ==" + }, + "chalk": { + "version": "5.1.2" + }, + "chardet": { + "version": "0.7.0" + }, + "cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==" + }, + "cli-cursor": { + "version": "4.0.0", + "requires": { + "restore-cursor": "^4.0.0" + } + }, + "cli-spinners": { + "version": "2.7.0" + }, + "cli-width": { + "version": "4.0.0" + }, + "clone": { + "version": "1.0.4" + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "defaults": { + "version": "1.0.4", + "requires": { + "clone": "^1.0.2" + } + }, + "eastasianwidth": { + "version": "0.2.0" + }, + "emoji-regex": { + "version": "9.2.2" + }, + "escape-string-regexp": { + "version": "5.0.0" + }, + "external-editor": { + "version": "3.1.0", + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "fast-xml-parser": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.12.tgz", + "integrity": "sha512-/Nmo3823Rfx7UTJosQNz6hBVbszfv1Unb7A4iNJZhvCGCgtIHv/uODmrYIH8vc05+XKZ4hNIOv6SlBejvJgATw==", + "requires": { + "strnum": "^1.0.5" + } + }, + "figures": { + "version": "5.0.0", + "requires": { + "escape-string-regexp": "^5.0.0", + "is-unicode-supported": "^1.2.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.2.1" + }, + "if-async": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/if-async/-/if-async-3.7.4.tgz", + "integrity": "sha512-BFEH2mZyeF6KZKaKLVPZ0wMjIiWOdjvZ7zbx8ENec0qfZhJwKFbX/4jKM5LTKyJEc/GOqUKiiJ2IFKT9yWrZqA==" + }, + "inherits": { + "version": "2.0.4" + }, + "inquirer": { + "version": "9.1.4", + "requires": { + "ansi-escapes": "^6.0.0", + "chalk": "^5.1.2", + "cli-cursor": "^4.0.0", + "cli-width": "^4.0.0", + "external-editor": "^3.0.3", + "figures": "^5.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^6.1.2", + "run-async": "^2.4.0", + "rxjs": "^7.5.7", + "string-width": "^5.1.2", + "strip-ansi": "^7.0.1", + "through": "^2.3.6", + "wrap-ansi": "^8.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-interactive": { + "version": "2.0.0" + }, + "is-unicode-supported": { + "version": "1.3.0" + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, + "lodash": { + "version": "4.17.21" + }, + "log-symbols": { + "version": "5.1.0", + "requires": { + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" + } + }, + "mimic-fn": { + "version": "2.1.0" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "mute-stream": { + "version": "0.0.8" + }, + "node-file-dialog": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/node-file-dialog/-/node-file-dialog-1.0.3.tgz", + "integrity": "sha512-hFOeuQHWk1f44jFI6LB7SxDWBRzN/RhLPTTn6PiD4qsRAwv7k5nWpmUbIpHkyIrJvM9Ekpwtz0dxF6zwYndK6g==" + }, + "onetime": { + "version": "5.1.2", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "ora": { + "version": "6.1.2", + "requires": { + "bl": "^5.0.0", + "chalk": "^5.0.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.6.1", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.1.0", + "log-symbols": "^5.1.0", + "strip-ansi": "^7.0.1", + "wcwidth": "^1.0.1" + } + }, + "os-tmpdir": { + "version": "1.0.2" + }, + "readable-stream": { + "version": "3.6.0", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "regedit": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/regedit/-/regedit-5.1.1.tgz", + "integrity": "sha512-NJ2OZ14czryt3RiQyMM/nptaiu0bF1CT+YVw0PBziMrLJyq8pdmIAvupi9E+NPWJLDJtyHDoKs5g5wcbP8ANIg==", + "requires": { + "debug": "^4.1.0", + "if-async": "^3.7.4", + "stream-slicer": "0.0.6", + "through2": "^0.6.3" + } + }, + "restore-cursor": { + "version": "4.0.0", + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "run-async": { + "version": "2.4.1" + }, + "rxjs": { + "version": "7.6.0", + "requires": { + "tslib": "^2.1.0" + } + }, + "safe-buffer": { + "version": "5.2.1" + }, + "safer-buffer": { + "version": "2.1.2" + }, + "signal-exit": { + "version": "3.0.7" + }, + "stream-slicer": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/stream-slicer/-/stream-slicer-0.0.6.tgz", + "integrity": "sha512-QsY0LbweYE5L+e+iBQgtkM5WUIf7+kCMA/m2VULv8rEEDDnlDPsPvOHH4nli6uaZOKQEt64u65h0l/eeZo7lCw==" + }, + "string_decoder": { + "version": "1.3.0", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-width": { + "version": "5.1.2", + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "through": { + "version": "2.3.8" + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", + "requires": { + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + }, + "dependencies": { + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + } + } + }, + "tmp": { + "version": "0.0.33", + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tslib": { + "version": "2.4.1" + }, + "type-fest": { + "version": "3.3.0" + }, + "util-deprecate": { + "version": "1.0.2" + }, + "wcwidth": { + "version": "1.0.1", + "requires": { + "defaults": "^1.0.3" + } + }, + "widest-line": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "requires": { + "string-width": "^5.0.1" + } + }, + "wrap-ansi": { + "version": "8.0.1", + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..0425cd3 --- /dev/null +++ b/package.json @@ -0,0 +1,35 @@ +{ + "name": "goptx", + "version": "1.0.69", + "description": "Optimize/Boost your GTA V FPS according to your PC configuration", + "main": "./bin/index.js", + "scripts": { + "test": "node index.js", + "deploy": "optx" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/harry260/GTAV-OPTX.git" + }, + "type": "module", + "keywords": [ + "GTA-V" + ], + "dependencies": { + "boxen": "^7.0.0", + "chalk": "^5.1.2", + "fast-xml-parser": "^4.0.12", + "inquirer": "^9.1.4", + "node-file-dialog": "^1.0.3", + "regedit": "^5.1.1" + }, + "bin": { + "goptx": "bin/index.js" + }, + "author": "Harry", + "license": "MIT", + "bugs": { + "url": "https://github.com/harry260/GTAV-OPTX/issues" + }, + "homepage": "https://github.com/harry260/GTAV-OPTX#readme" +} diff --git a/screenshot.jpg b/screenshot.jpg new file mode 100644 index 0000000..71d9a44 Binary files /dev/null and b/screenshot.jpg differ