34 Commits

Author SHA1 Message Date
FinnHornhoover
7956f653fb added comments 2023-11-18 01:21:31 +03:00
FinnHornhoover
fe6f42f67c cleaned up and added docstrings to cache handler 2023-11-18 00:48:51 +03:00
FinnHornhoover
c3dc79b42a fixed added versions not showing up immediately 2023-11-18 00:47:23 +03:00
FinnHornhoover
e11023df54 added linguist-vendored 2023-11-15 10:01:36 +03:00
FinnHornhoover
51f0c06092 fixed config json read, limited hash check 2023-11-13 23:06:38 +03:00
FinnHornhoover
695fcaebb6 fixed valdator function name 2023-11-13 22:43:58 +03:00
FinnHornhoover
01a4318db5 fixed hash check timing on config change 2023-11-13 20:05:02 +03:00
FinnHornhoover
4105472d3c added hash check when cache location is changed 2023-11-13 01:46:23 +03:00
FinnHornhoover
8f05ace344 added config modal, bumped version 2023-11-13 00:15:45 +03:00
FinnHornhoover
b51e49d703 added more proper initial check handling 2023-11-12 16:27:11 +03:00
FinnHornhoover
6f3f3290d7 added default ip, regex for version names 2023-11-12 15:38:33 +03:00
FinnHornhoover
f6ae8f0b6c added fixes for validation 2023-11-12 15:00:11 +03:00
FinnHornhoover
3dc1c1ae45 fixed version url and path bugs, added validation 2023-11-11 23:55:07 +03:00
FinnHornhoover
490d335336 WIP custom build adjustments 2023-11-11 23:55:06 +03:00
FinnHornhoover
cf0737cb60 added build management, WIP custom cache checks 2023-11-11 23:55:05 +03:00
FinnHornhoover
ea1715e27c by default, always use cdn 2023-11-11 23:55:04 +03:00
FinnHornhoover
59f0e155dd removed async, adjusted load logic, and hash check 2023-11-11 23:55:04 +03:00
FinnHornhoover
d391faefb7 edited gitignore for extra files 2023-11-11 23:55:04 +03:00
FinnHornhoover
9c3219f203 removed redundant function 2023-11-11 23:55:04 +03:00
FinnHornhoover
e980ca5d65 do not immediately start checking hashes 2023-11-11 23:55:04 +03:00
FinnHornhoover
9183d3338d reverted version sizes 2023-11-11 23:55:04 +03:00
FinnHornhoover
096fcee49f added script itself and migration logic 2023-11-11 23:55:04 +03:00
FinnHornhoover
e74106e137 added measure against half-flushed objects 2023-11-11 23:55:04 +03:00
FinnHornhoover
9ee982b53c switched to ipc through localhost 2023-11-11 23:55:04 +03:00
FinnHornhoover
b2ba0ba1b6 use python child process to handle cache ops 2023-11-11 23:55:03 +03:00
FinnHornhoover
60aba00ad5 WIP added offline cache pointing logic 2023-11-11 23:55:02 +03:00
FinnHornhoover
1c3e3f81b0 delegated downloads to wget exe due to memory leak 2023-11-11 23:55:02 +03:00
FinnHornhoover
f7d1b73806 implemented delete as ipc, adjusted for cache swap 2023-11-11 23:55:02 +03:00
FinnHornhoover
a1678cb1e9 adjusted download and hash check logic and data 2023-11-11 23:55:02 +03:00
FinnHornhoover
3f56895d3b integrated download and hash functionality 2023-11-11 23:55:02 +03:00
FinnHornhoover
2c5337938a added async hash checking 2023-11-11 23:55:02 +03:00
FinnHornhoover
b644edb774 WIP ipc downloads 2023-11-11 23:55:02 +03:00
FinnHornhoover
ee309319c9 WIP download bugfix 2023-11-11 23:55:02 +03:00
FinnHornhoover
01e329e621 WIP button functionality (download, delete) 2023-11-11 23:55:02 +03:00
12 changed files with 459 additions and 653 deletions

View File

@@ -1,47 +0,0 @@
name: Publish Build
on:
push:
branches: ["main"]
tags: "*"
permissions:
contents: write
jobs:
build:
runs-on: windows-2022
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Node.js 20.x
uses: actions/setup-node@v4
with:
node-version: 20.x
cache: "npm"
- name: Install dependencies
run: npm install
- name: Pack into zip and create installer
run: npm run dist
- name: Upload Artifacts
uses: actions/upload-artifact@master
with:
path: dist
publish-release:
if: contains(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
needs: build
steps:
- name: Download artifact
uses: actions/download-artifact@master
- name: Create release
uses: ncipollo/release-action@v1
with:
artifacts: "artifact/*-ia32-win.zip,artifact/*.exe"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -1,3 +0,0 @@
{
"editor.formatOnSave": true
}

View File

@@ -1,6 +1,6 @@
MIT License MIT License
Copyright (c) 2020-2024 OpenFusion Contributors Copyright (c) 2020-2023 OpenFusion Contributors
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -59,24 +59,12 @@ body {
"Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
} }
#of-about-button-div { #of-versionnumberdiv {
position: fixed; position: fixed;
bottom: 4px; bottom: 4px;
right: 8px; right: 8px;
} }
#of-about-flash-div {
position: fixed;
bottom: 4px;
right: 8px;
}
#of-config-button-div {
position: fixed;
bottom: 4px;
left: 8px;
}
.btn-primary { .btn-primary {
background-image: url("../../assets/img/btn-primary-bg.png"); background-image: url("../../assets/img/btn-primary-bg.png");
background-repeat: repeat; background-repeat: repeat;
@@ -97,18 +85,6 @@ body {
background-repeat: repeat; background-repeat: repeat;
} }
.form-check-input {
width: 25px;
height: 25px;
}
.form-check-label {
height: 25px;
margin-top: 5px;
margin-left: 10px;
font-size: 1rem;
}
#of-aboutmodal > .modal-dialog > .modal-content { #of-aboutmodal > .modal-dialog > .modal-content {
background-color: #093363; background-color: #093363;
border-color: #6699ff; border-color: #6699ff;
@@ -210,19 +186,3 @@ button > i {
background: #000; background: #000;
clear: both; clear: both;
} }
@keyframes pulse {
0% {
opacity: 1;
}
50% {
opacity: 0;
}
100% {
opacity: 1;
}
}
.pulsing {
animation: pulse 2s infinite;
}

View File

@@ -10,8 +10,11 @@ var userData = remote.require("app").getPath("userData");
var configPath = path.join(userData, "config.json"); var configPath = path.join(userData, "config.json");
var serversPath = path.join(userData, "servers.json"); var serversPath = path.join(userData, "servers.json");
var versionsPath = path.join(userData, "versions.json"); var versionsPath = path.join(userData, "versions.json");
var cacheRoot = path.join(userData, "/../../LocalLow/Unity/Web Player/Cache"); var cacheRoot = path.join(
var offlineRootDefault = path.join(cacheRoot, "../OfflineCache"); userData,
"/../../LocalLow/Unity/Web Player/Cache"
);
var offlineRootDefault = path.join(cacheRoot, "Offline");
var offlineRoot = offlineRootDefault; var offlineRoot = offlineRootDefault;
var cdnString = "http://cdn.dexlabs.systems/ff/big"; var cdnString = "http://cdn.dexlabs.systems/ff/big";
@@ -78,36 +81,7 @@ function getAppVersion() {
function setAppVersionText() { function setAppVersionText() {
$("#of-aboutversionnumber").text("Version " + getAppVersion()); $("#of-aboutversionnumber").text("Version " + getAppVersion());
} $("#of-versionnumber").text("v" + getAppVersion());
function checkForNewAppVersion() {
$("#of-about-button").removeClass("pulsing");
setAppVersionText();
if (config["autoupdate-check"] === true) {
$.getJSON(
"https://api.github.com/repos/OpenFusionProject/OpenFusionClient/releases/latest",
{},
function (data) {
$.each(data, function (index, element) {
if (index === "tag_name" && element != remote.require("app").getVersion()) {
console.log("New version available: " + element);
var downloadPage =
"https://github.com/OpenFusionProject/OpenFusionClient/releases/latest";
$("#of-aboutversionnumber").html(
"Version " +
getAppVersion() +
`<br>A new version is available! ` +
`Click <a href="#" onclick='remote.require("shell").openExternal("` +
downloadPage +
`");'>here</a> to download.`
);
$("#of-about-button").addClass("pulsing");
return false; // break out of loop early
}
});
}
);
}
} }
function validateServerSave(modalName) { function validateServerSave(modalName) {
@@ -121,15 +95,14 @@ function validateServerSave(modalName) {
ipInput.classList.remove("invalidinput"); ipInput.classList.remove("invalidinput");
if ( if (
descInput.value.length < descInput.value.length < parseInt(descInput.getAttribute("minlength")) ||
parseInt(descInput.getAttribute("minlength")) ||
descInput.value.length > parseInt(descInput.getAttribute("maxlength")) descInput.value.length > parseInt(descInput.getAttribute("maxlength"))
) { ) {
descInput.classList.add("invalidinput"); descInput.classList.add("invalidinput");
valid = false; valid = false;
} }
if (!new RegExp(ipInput.getAttribute("pattern")).test(ipInput.value)) { if (!(new RegExp(ipInput.getAttribute("pattern"))).test(ipInput.value)) {
ipInput.classList.add("invalidinput"); ipInput.classList.add("invalidinput");
valid = false; valid = false;
} }
@@ -220,17 +193,17 @@ function validateVersionSave(modalName) {
var matchingVersions = versionArray.filter(function (obj) { var matchingVersions = versionArray.filter(function (obj) {
return obj.name === nameInput.value; return obj.name === nameInput.value;
}); });
var allowedMatches = modalName === "edit" ? 1 : 0; var allowedMatches = (modalName === "edit") ? 1 : 0;
if ( if (
matchingVersions.length > allowedMatches || matchingVersions.length > allowedMatches ||
!new RegExp(nameInput.getAttribute("pattern")).test(nameInput.value) !(new RegExp(nameInput.getAttribute("pattern"))).test(nameInput.value)
) { ) {
nameInput.classList.add("invalidinput"); nameInput.classList.add("invalidinput");
valid = false; valid = false;
} }
if (!new RegExp(urlInput.getAttribute("pattern")).test(urlInput.value)) { if (!(new RegExp(urlInput.getAttribute("pattern"))).test(urlInput.value)) {
urlInput.classList.add("invalidinput"); urlInput.classList.add("invalidinput");
valid = false; valid = false;
} }
@@ -273,10 +246,7 @@ function editVersion() {
var editedVersionString = null; var editedVersionString = null;
$.each(jsonToModify["versions"], function (key, value) { $.each(jsonToModify["versions"], function (key, value) {
if ( if (value["name"] == getSelectedVersion() && !defaultHashes.hasOwnProperty(value["name"])) {
value["name"] == getSelectedVersion() &&
!defaultHashes.hasOwnProperty(value["name"])
) {
value["name"] = value["name"] =
$("#editversion-nameinput").val().length == 0 $("#editversion-nameinput").val().length == 0
? value["name"] ? value["name"]
@@ -326,27 +296,18 @@ function restoreDefaultVersions() {
function editConfig() { function editConfig() {
var jsonToModify = JSON.parse(remotefs.readFileSync(configPath)); var jsonToModify = JSON.parse(remotefs.readFileSync(configPath));
jsonToModify["autoupdate-check"] = $("#editconfig-autoupdate").prop( jsonToModify["autoupdate-check"] = $("#editconfig-autoupdate").prop("checked");
"checked" jsonToModify["cache-swapping"] = $("#editconfig-cacheswapping").prop("checked");
); jsonToModify["enable-offline-cache"] = $("#editconfig-enableofflinecache").prop("checked");
jsonToModify["cache-swapping"] = $("#editconfig-cacheswapping").prop( jsonToModify["verify-offline-cache"] = $("#editconfig-verifyofflinecache").prop("checked");
"checked"
);
jsonToModify["enable-offline-cache"] = $(
"#editconfig-enableofflinecache"
).prop("checked");
jsonToModify["verify-offline-cache"] = $(
"#editconfig-verifyofflinecache"
).prop("checked");
var dirInput = $("#editconfig-offlinecachelocation:text").val(); var dirInput = $("#editconfig-offlinecachelocation:text").val();
var shouldChangeRoot = var shouldChangeRoot = (
remotefs.existsSync(dirInput) && remotefs.existsSync(dirInput) &&
remotefs.statSync(dirInput).isDirectory(); remotefs.statSync(dirInput).isDirectory()
);
jsonToModify["offline-cache-location"] = shouldChangeRoot jsonToModify["offline-cache-location"] = shouldChangeRoot ? dirInput : offlineRoot;
? dirInput
: offlineRoot;
remotefs.writeFileSync(configPath, JSON.stringify(jsonToModify, null, 4)); remotefs.writeFileSync(configPath, JSON.stringify(jsonToModify, null, 4));
@@ -358,23 +319,11 @@ function editConfig() {
function validateCacheLocation() { function validateCacheLocation() {
var input = document.getElementById("editconfig-offlinecachelocation"); var input = document.getElementById("editconfig-offlinecachelocation");
var button = document.getElementById("editconfig-savebutton"); var button = document.getElementById("editconfig-savebutton");
var parent = path.join(input.value, "/..");
input.classList.remove("invalidinput"); input.classList.remove("invalidinput");
button.removeAttribute("disabled"); button.removeAttribute("disabled");
// Parent MUST exist and be a directory if (!remotefs.existsSync(input.value) || !remotefs.statSync(input.value).isDirectory()) {
// If the target exists, check that is also a directory
// Also, prevent putting the offline cache inside of
// the normal cache folder to prevent shenanigans
if (
!remotefs.existsSync(parent) ||
!remotefs.statSync(parent).isDirectory() ||
(remotefs.existsSync(input.value) &&
!remotefs.statSync(input.value).isDirectory()) ||
path.join(input.value, ".") === path.join(cacheRoot, "/..") ||
path.join(input.value, ".").startsWith(path.join(cacheRoot))
) {
input.classList.add("invalidinput"); input.classList.add("invalidinput");
button.setAttribute("disabled", ""); button.setAttribute("disabled", "");
} }
@@ -399,20 +348,13 @@ function loadConfig() {
$("#editconfig-autoupdate").prop("checked", config["autoupdate-check"]); $("#editconfig-autoupdate").prop("checked", config["autoupdate-check"]);
$("#editconfig-cacheswapping").prop("checked", config["cache-swapping"]); $("#editconfig-cacheswapping").prop("checked", config["cache-swapping"]);
$("#editconfig-enableofflinecache").prop( $("#editconfig-enableofflinecache").prop("checked", config["enable-offline-cache"]);
"checked", $("#editconfig-verifyofflinecache").prop("checked", config["verify-offline-cache"]);
config["enable-offline-cache"]
);
$("#editconfig-verifyofflinecache").prop(
"checked",
config["verify-offline-cache"]
);
// alter offline root globally // alter offline root globally
offlineRoot = config["offline-cache-location"] || offlineRootDefault; offlineRoot = config["offline-cache-location"] || offlineRootDefault;
$("#editconfig-offlinecachelocation:text").val(offlineRoot); $("#editconfig-offlinecachelocation:text").val(offlineRoot);
checkForNewAppVersion();
validateCacheLocation(); validateCacheLocation();
} }
@@ -453,9 +395,10 @@ function loadCacheList() {
// load default hashes.json for reference while running the cache handler // load default hashes.json for reference while running the cache handler
if (!defaultHashes) { if (!defaultHashes) {
defaultHashes = remotefs.readJsonSync( defaultHashes = remotefs.readJsonSync(path.join(
path.join(__dirname, "/defaults/hashes.json") __dirname,
); "/defaults/hashes.json"
));
} }
deselectVersion(); // Remove selection and disable buttons until another server is selected deselectVersion(); // Remove selection and disable buttons until another server is selected
@@ -463,7 +406,7 @@ function loadCacheList() {
$.each(versionArray, function (key, value) { $.each(versionArray, function (key, value) {
var row = document.createElement("tr"); var row = document.createElement("tr");
row.className = "cache-listing-entry"; row.className = "cache-listing-entry"
row.setAttribute("id", value.name); row.setAttribute("id", value.name);
var cellVersion = document.createElement("td"); var cellVersion = document.createElement("td");
@@ -487,34 +430,24 @@ function loadCacheList() {
} }
function getCacheElemID(versionString, cacheMode, elementName) { function getCacheElemID(versionString, cacheMode, elementName) {
return [versionString, cacheMode, "cache", elementName] return [versionString, cacheMode, "cache", elementName].filter(function (value) {
.filter(function (value) {
return typeof value !== "undefined"; return typeof value !== "undefined";
}) }).join("-");
.join("-");
} }
function getCacheButtonID(versionString, cacheMode, buttonMode) { function getCacheButtonID(versionString, cacheMode, buttonMode) {
return [ return [getCacheElemID(versionString, cacheMode), buttonMode, "button"].join("-");
getCacheElemID(versionString, cacheMode),
buttonMode,
"button",
].join("-");
} }
function getCacheLabelText(sizes) { function getCacheLabelText(sizes) {
if (!sizes || sizes.total === 0) return "?.?? GB / ?.?? GB"; if (!sizes || sizes.total === 0)
return "?.?? GB / ?.?? GB";
var gb = 1 << 30; var gb = 1 << 30;
var labelText = var labelText = (sizes.intact / gb).toFixed(2) + " / " + (sizes.total / gb).toFixed(2) + " GB";
(sizes.intact / gb).toFixed(2) +
" / " +
(sizes.total / gb).toFixed(2) +
" GB";
if (sizes.altered > 0) { if (sizes.altered > 0) {
labelText += labelText += "<br/>(" + (sizes.altered / gb).toFixed(2) + " GB Altered)";
"<br/>(" + (sizes.altered / gb).toFixed(2) + " GB Altered)";
} }
return labelText; return labelText;
@@ -528,18 +461,18 @@ function getCacheInfoCell(versionString, cacheMode) {
download: { download: {
icon: "fas fa-download", icon: "fas fa-download",
class: "btn btn-success mr-1", class: "btn btn-success mr-1",
tooltip: "Download Cache", tooltip: "Download Cache"
}, },
fix: { fix: {
icon: "fas fa-hammer", icon: "fas fa-hammer",
class: "btn btn-warning mr-1", class: "btn btn-warning mr-1",
tooltip: "Fix Altered Files in Cache", tooltip: "Fix Altered Files in Cache"
}, },
delete: { delete: {
icon: "fas fa-trash-alt", icon: "fas fa-trash-alt",
class: "btn btn-danger mr-1", class: "btn btn-danger mr-1",
tooltip: "Delete Cache", tooltip: "Delete Cache"
}, }
}; };
var cellCache = document.createElement("td"); var cellCache = document.createElement("td");
@@ -550,9 +483,9 @@ function getCacheInfoCell(versionString, cacheMode) {
labelCache.setAttribute("for", divID); labelCache.setAttribute("for", divID);
// pull existing info from cacheSizes when available // pull existing info from cacheSizes when available
labelCache.innerHTML = getCacheLabelText( labelCache.innerHTML = getCacheLabelText(
cacheSizes && cacheSizes[versionString] (cacheSizes && cacheSizes[versionString]) ?
? cacheSizes[versionString][cacheMode] cacheSizes[versionString][cacheMode] :
: null null
); );
var divCacheButtons = document.createElement("div"); var divCacheButtons = document.createElement("div");
@@ -575,16 +508,7 @@ function getCacheInfoCell(versionString, cacheMode) {
buttonCache.setAttribute("title", config.tooltip); buttonCache.setAttribute("title", config.tooltip);
buttonCache.setAttribute("type", "button"); buttonCache.setAttribute("type", "button");
// handler setup // handler setup
buttonCache.setAttribute( buttonCache.setAttribute("onclick", "handleCache(\"" + buttonMode + "\", \"" + versionString + "\", \"" + cacheMode + "\");");
"onclick",
'handleCache("' +
buttonMode +
'", "' +
versionString +
'", "' +
cacheMode +
'");'
);
buttonCache.appendChild(iconItalic); buttonCache.appendChild(iconItalic);
divCacheButtons.appendChild(buttonCache); divCacheButtons.appendChild(buttonCache);
@@ -602,12 +526,13 @@ function storageLoadingStart(vString, cMode) {
var versionStrings = []; var versionStrings = [];
$.each(versionArray, function (key, value) { $.each(versionArray, function (key, value) {
if (vString) { if (vString) {
if (vString === value.name) versionStrings.push(value.name); if (vString === value.name)
versionStrings.push(value.name);
} else { } else {
versionStrings.push(value.name); versionStrings.push(value.name);
} }
}); });
var cacheModes = cMode ? [cMode] : ["offline", "playable"]; var cacheModes = (cMode) ? [cMode] : ["offline", "playable"];
// deselect and disable the add version button until they are re-enabled // deselect and disable the add version button until they are re-enabled
deselectVersion(); deselectVersion();
@@ -616,36 +541,21 @@ function storageLoadingStart(vString, cMode) {
// turn buttons into spinners // turn buttons into spinners
$.each(versionStrings, function (vKey, versionString) { $.each(versionStrings, function (vKey, versionString) {
$.each(cacheModes, function (cKey, cacheMode) { $.each(cacheModes, function (cKey, cacheMode) {
var buttonDelete = document.getElementById( var buttonDelete = document.getElementById(getCacheButtonID(versionString, cacheMode, "delete"));
getCacheButtonID(versionString, cacheMode, "delete") var buttonDownload = document.getElementById(getCacheButtonID(versionString, cacheMode, "download"));
); var buttonFix = document.getElementById(getCacheButtonID(versionString, cacheMode, "fix"));
var buttonDownload = document.getElementById(
getCacheButtonID(versionString, cacheMode, "download")
);
var buttonFix = document.getElementById(
getCacheButtonID(versionString, cacheMode, "fix")
);
if (!buttonDelete) return; if (!buttonDelete) return;
buttonDelete.setAttribute("disabled", ""); buttonDelete.setAttribute("disabled", "");
buttonDelete.children[0].setAttribute( buttonDelete.children[0].setAttribute("class", "fas fa-spinner fa-spin fa-fw");
"class",
"fas fa-spinner fa-spin fa-fw"
);
if (cacheMode === "offline") { if (cacheMode === "offline") {
buttonDownload.setAttribute("disabled", ""); buttonDownload.setAttribute("disabled", "");
buttonDownload.children[0].setAttribute( buttonDownload.children[0].setAttribute("class", "fas fa-spinner fa-spin fa-fw");
"class",
"fas fa-spinner fa-spin fa-fw"
);
buttonFix.setAttribute("disabled", ""); buttonFix.setAttribute("disabled", "");
buttonFix.children[0].setAttribute( buttonFix.children[0].setAttribute("class", "fas fa-spinner fa-spin fa-fw");
"class",
"fas fa-spinner fa-spin fa-fw"
);
} }
}); });
}); });
@@ -655,9 +565,7 @@ function storageLoadingUpdate(allSizes) {
// update cacheSizes and display results // update cacheSizes and display results
$.each(allSizes, function (versionString, vSizes) { $.each(allSizes, function (versionString, vSizes) {
$.each(vSizes, function (cacheMode, sizes) { $.each(vSizes, function (cacheMode, sizes) {
var label = document.getElementById( var label = document.getElementById(getCacheElemID(versionString, cacheMode, "label"));
getCacheElemID(versionString, cacheMode, "label")
);
cacheSizes = cacheSizes || {}; cacheSizes = cacheSizes || {};
cacheSizes[versionString] = cacheSizes[versionString] || {}; cacheSizes[versionString] = cacheSizes[versionString] || {};
@@ -674,25 +582,16 @@ function storageLoadingComplete(allSizes) {
// re-enable buttons according to the sizes that were read // re-enable buttons according to the sizes that were read
$.each(allSizes, function (versionString, vSizes) { $.each(allSizes, function (versionString, vSizes) {
$.each(vSizes, function (cacheMode, sizes) { $.each(vSizes, function (cacheMode, sizes) {
var buttonDelete = document.getElementById( var buttonDelete = document.getElementById(getCacheButtonID(versionString, cacheMode, "delete"));
getCacheButtonID(versionString, cacheMode, "delete") var buttonDownload = document.getElementById(getCacheButtonID(versionString, cacheMode, "download"));
); var buttonFix = document.getElementById(getCacheButtonID(versionString, cacheMode, "fix"));
var buttonDownload = document.getElementById(
getCacheButtonID(versionString, cacheMode, "download")
);
var buttonFix = document.getElementById(
getCacheButtonID(versionString, cacheMode, "fix")
);
if (!buttonDelete) return; if (!buttonDelete) return;
buttonDelete.children[0].setAttribute("class", "fas fa-trash-alt"); buttonDelete.children[0].setAttribute("class", "fas fa-trash-alt");
if (cacheMode === "offline") { if (cacheMode === "offline") {
buttonDownload.children[0].setAttribute( buttonDownload.children[0].setAttribute("class", "fas fa-download");
"class",
"fas fa-download"
);
buttonFix.children[0].setAttribute("class", "fas fa-hammer"); buttonFix.children[0].setAttribute("class", "fas fa-hammer");
} }
@@ -727,7 +626,7 @@ function handleCache(operation, versionString, cacheMode, callback) {
return obj.name === versionString; return obj.name === versionString;
}); });
// pull version url from the found object, if none found, use the default cdn link // pull version url from the found object, if none found, use the default cdn link
var cdnRoot = versions.length === 0 ? cdnString : versions[0].url; var cdnRoot = (versions.length === 0) ? cdnString : versions[0].url;
var lastSizes = { intact: 0, altered: 0, total: 0 }; var lastSizes = { intact: 0, altered: 0, total: 0 };
var buf = ""; var buf = "";
@@ -766,42 +665,28 @@ function handleCache(operation, versionString, cacheMode, callback) {
spawn( spawn(
path.join(__dirname, "lib", "cache_handler.exe"), path.join(__dirname, "lib", "cache_handler.exe"),
[ [
"--operation", "--operation", operation,
operation,
// roots below contain version-agnostic main directories for caches // roots below contain version-agnostic main directories for caches
"--playable-root", "--playable-root", cacheRoot,
cacheRoot, "--offline-root", offlineRoot,
"--offline-root", "--user-dir", userData,
offlineRoot,
"--user-dir",
userData,
// CDN root contains version-specific directory, unless cacheMode is "all" // CDN root contains version-specific directory, unless cacheMode is "all"
"--cdn-root", "--cdn-root", cdnRoot,
cdnRoot, "--cache-mode", cacheMode || "all",
"--cache-mode", "--cache-version", versionString || "all",
cacheMode || "all",
"--cache-version",
versionString || "all",
// learn port from the server object and tell the script where to connect // learn port from the server object and tell the script where to connect
"--port", "--port", server.address().port,
server.address().port,
// tell the script which versions and caches are official // tell the script which versions and caches are official
"--official-caches", "--official-caches"
].concat(Object.keys(defaultHashes)), ].concat(Object.keys(defaultHashes)),
{ {
stdio: "inherit", stdio: "inherit"
} }
).on("exit", function (code, signal) { ).on("exit", function (code, signal) {
if (code !== 0 || signal) { if (code !== 0 || signal) {
dialog.showErrorBox( dialog.showErrorBox(
"Sorry!", "Sorry!",
'Process "' + "Process \"" + operation + "\" failed with code " + code + " and signal " + signal + "."
operation +
'" failed with code ' +
code +
" and signal " +
signal +
"."
); );
} }
@@ -828,10 +713,7 @@ function performCacheSwap(newVersion) {
if (remotefs.existsSync(currentCache)) { if (remotefs.existsSync(currentCache)) {
// Cache already exists, find out what version it belongs to // Cache already exists, find out what version it belongs to
if (remotefs.existsSync(record)) { if (remotefs.existsSync(record)) {
var lastVersion = remotefs.readFileSync( var lastVersion = remotefs.readFileSync(record, (encoding = "utf8"));
record,
(encoding = "utf8")
);
if (lastVersion != newVersion) { if (lastVersion != newVersion) {
// Remove the directory we're trying to store the // Remove the directory we're trying to store the
// existing cache to if it already exists for whatever // existing cache to if it already exists for whatever
@@ -891,33 +773,23 @@ function prepGameInfo(serverUUID) {
if (config["verify-offline-cache"]) { if (config["verify-offline-cache"]) {
// if required, do a full hash check, and use the offline cache only if it is fully intact // if required, do a full hash check, and use the offline cache only if it is fully intact
handleCache( handleCache("hash-check", versionInfo.name, "offline", function (sizes) {
"hash-check", var versionURL = (sizes.intact < sizes.total) ? versionInfo.url : offlineURL;
versionInfo.name,
"offline",
function (sizes) {
var versionURL =
sizes.intact < sizes.total ? versionInfo.url : offlineURL;
setGameInfo(serverInfo, versionURL); setGameInfo(serverInfo, versionURL);
} });
);
return; return;
} }
// otherwise, if main.unity3d is present, use the offline cache // otherwise, if main.unity3d is present, use the offline cache
var mainPath = path.join(offlinePath, "main.unity3d"); var mainPath = path.join(offlinePath, "main.unity3d");
var versionURL = !remotefs.existsSync(mainPath) var versionURL = remotefs.existsSync(mainPath) ? versionInfo.url : offlineURL;
? versionInfo.url
: offlineURL;
setGameInfo(serverInfo, versionURL); setGameInfo(serverInfo, versionURL);
} }
// For writing loginInfo.php, assetInfo.php, etc. // For writing loginInfo.php, assetInfo.php, etc.
function setGameInfo(serverInfo, versionURL) { function setGameInfo(serverInfo, versionURL) {
// slash fix if people mess it up via text editors // slash fix if people mess it up via text editors
var versionURLRoot = versionURL.endsWith("/") var versionURLRoot = versionURL.endsWith("/") ? versionURL : versionURL + "/";
? versionURL
: versionURL + "/";
window.assetUrl = versionURLRoot; // game-client.js needs to access this window.assetUrl = versionURLRoot; // game-client.js needs to access this
console.log("Cache will expand from " + versionURLRoot); console.log("Cache will expand from " + versionURLRoot);
@@ -988,17 +860,6 @@ function prepConnection(address, port) {
launchGame(); launchGame();
} }
function browseOfflineCache() {
var browsePath = dialog.showOpenDialog({ properties: ["openDirectory"] });
var offlineCacheInput = document.getElementById(
"editconfig-offlinecachelocation"
);
if (browsePath && offlineCacheInput) {
offlineCacheInput.value = browsePath;
validateCacheLocation();
}
}
// Returns the UUID of the server with the selected background color. // Returns the UUID of the server with the selected background color.
// Yes, there are probably better ways to go about this, but it works well enough. // Yes, there are probably better ways to go about this, but it works well enough.
function getSelectedServer() { function getSelectedServer() {

View File

@@ -1,32 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<assemblyIdentity type="win32" name="OpenFusion.Client" version="1.6.0.0" processorArchitecture="x86" />
<dependency>
<dependentAssembly>
<assemblyIdentity type="Win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*">
</assemblyIdentity>
</dependentAssembly>
</dependency>
<asmv3:trustInfo>
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
</requestedPrivileges>
</security>
</asmv3:trustInfo>
<asmv3:application> <asmv3:application>
<asmv3:windowsSettings> <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2019/WindowsSettings">
<activeCodePage xmlns="urn:schemas-microsoft-com:smi.2019.WindowsSettings">UTF-8</activeCodePage> <activeCodePage>UTF-8</activeCodePage>
<dpiAware xmlns="urn:schemas-microsoft-com:smi.2005.WindowsSettings">True/PM</dpiAware> <dpiAware>true</dpiAware>
</asmv3:windowsSettings> </asmv3:windowsSettings>
</asmv3:application> </asmv3:application>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> </assembly>
<application>
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"></supportedOS>
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"></supportedOS>
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"></supportedOS>
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"></supportedOS>
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"></supportedOS>
</application>
</compatibility>
</asmv1:assembly>

View File

@@ -1,7 +1,7 @@
{ {
"autoupdate-check": true, "autoupdate-check": true,
"cache-swapping": true, "cache-swapping": true,
"enable-offline-cache": true, "enable-offline-cache": false,
"verify-offline-cache": false, "verify-offline-cache": false,
"last-version-initialized": "1.6" "last-version-initialized": "1.6"
} }

View File

@@ -1,4 +1,4 @@
<!doctype html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
@@ -108,6 +108,18 @@
</button> </button>
</div> </div>
<div class="col-4 d-inline-flex justify-content-end"> <div class="col-4 d-inline-flex justify-content-end">
<button
class="btn btn-primary mr-1"
data-toggle="modal"
data-bs-tooltip=""
data-placement="bottom"
id="of-editconfig-button"
type="button"
title="Edit Configuration"
data-target="#of-editconfigmodal"
>
<i class="fas fa-cog"></i>
</button>
<button <button
class="btn btn-primary mr-1" class="btn btn-primary mr-1"
data-toggle="modal" data-toggle="modal"
@@ -161,7 +173,7 @@
APP_VERSION_NUMBER APP_VERSION_NUMBER
</p> </p>
<p> <p>
©2020-2024 OpenFusion Contributors<br />OpenFusion ©2020-2023 OpenFusion Contributors<br />OpenFusion
is licensed under MIT.<br /> is licensed under MIT.<br />
</p> </p>
<a <a
@@ -171,7 +183,6 @@
data-target="#of-restoreserversmodal" data-target="#of-restoreserversmodal"
>Reset to Default Servers</a >Reset to Default Servers</a
> >
<br />
<a <a
href="#of-restoreversionsmodal" href="#of-restoreversionsmodal"
onclick="$('#of-aboutmodal').modal('toggle')" onclick="$('#of-aboutmodal').modal('toggle')"
@@ -490,80 +501,43 @@
</button> </button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<form <form id="editconfig-form" class="needs-validation">
id="editconfig-form" <label for="editconfig-autoupdate"
class="needs-validation form-group" >Automatically update the client:</label
> ><input
<div class="form-check form-row"> class="form-control form-row w-75"
<input
class="form-check-input"
type="checkbox" type="checkbox"
id="editconfig-autoupdate" id="editconfig-autoupdate"
/> />
<label <label for="editconfig-cacheswapping"
class="form-check-label" >Swap game caches to avoid unnecessary downloads:</label
for="editconfig-autoupdate" ><input
>Automatically check for updates</label class="form-control form-row w-75"
>
</div>
<div class="form-check form-row">
<input
class="form-check-input"
type="checkbox" type="checkbox"
id="editconfig-cacheswapping" id="editconfig-cacheswapping"
/> />
<label <label for="editconfig-enableofflinecache"
class="form-check-label" >Use offline caches when they are available:</label
for="editconfig-cacheswapping" ><input
>Swap game caches to avoid unnecessary class="form-control form-row w-75"
downloads</label
>
</div>
<div class="form-check form-row">
<input
class="form-check-input"
type="checkbox" type="checkbox"
id="editconfig-enableofflinecache" id="editconfig-enableofflinecache"
/> />
<label <label for="editconfig-verifyofflinecache"
class="form-check-label" >Verify offline caches every time they are loaded:</label
for="editconfig-enableofflinecache" ><input
>Use offline caches when they are class="form-control form-row w-75"
available</label
>
</div>
<div class="form-check form-row mb-3">
<input
class="form-check-input"
type="checkbox" type="checkbox"
id="editconfig-verifyofflinecache" id="editconfig-verifyofflinecache"
/> />
<label
class="form-check-label"
for="editconfig-verifyofflinecache"
>Verify offline caches every time they
are loaded</label
>
</div>
<label for="editconfig-offlinecachelocation" <label for="editconfig-offlinecachelocation"
><h5>Offline Cache Location:</h5></label >Select Offline Cache Location:</label
> ><input
<div class="form-row"> class="form-control form-row w-75"
<input
class="form-control w-75"
id="editconfig-offlinecachelocation" id="editconfig-offlinecachelocation"
type="text" type="text"
oninput="validateCacheLocation()" oninput="validateCacheLocation()"
/> />
<button
type="button"
class="btn btn-primary ml-1"
onclick="browseOfflineCache()"
title="Browse"
>
<i class="fas fa-folder"></i>
</button>
</div>
</form> </form>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
@@ -594,10 +568,7 @@
tabindex="-1" tabindex="-1"
id="of-editcacheconfigmodal" id="of-editcacheconfigmodal"
> >
<div <div class="modal-dialog modal-dialog-centered modal-lg" role="document">
class="modal-dialog modal-dialog-centered modal-lg"
role="document"
>
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h4 class="modal-title">Edit Game Builds</h4> <h4 class="modal-title">Edit Game Builds</h4>
@@ -665,9 +636,7 @@
class="table-responsive text-center border rounded border-primary" class="table-responsive text-center border rounded border-primary"
id="cache-table" id="cache-table"
> >
<table <table class="table table-striped table-hover mb-0">
class="table table-striped table-hover mb-0"
>
<thead> <thead>
<tr> <tr>
<th>Game Version</th> <th>Game Version</th>
@@ -675,7 +644,8 @@
<th>Offline Cache</th> <th>Offline Cache</th>
</tr> </tr>
</thead> </thead>
<tbody id="cache-tablebody"></tbody> <tbody id="cache-tablebody">
</tbody>
</table> </table>
</div> </div>
</div> </div>
@@ -691,7 +661,7 @@
<div class="modal-dialog modal-dialog-centered" role="document"> <div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h4 class="modal-title">Add Version</h4> <h4 class="modal-title">Add Server</h4>
<button <button
type="button" type="button"
class="close" class="close"
@@ -768,10 +738,7 @@
</button> </button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<form <form id="editversion-form" class="needs-validation">
id="editversion-form"
class="needs-validation"
>
<label for="editversion-nameinput" <label for="editversion-nameinput"
>Version Name</label >Version Name</label
><input ><input
@@ -909,38 +876,15 @@
</div> </div>
</div> </div>
</div> </div>
<div id="of-config-button-div"> <div id="of-versionnumberdiv">
<button <a
class="btn btn-primary mr-1" id="of-versionnumber"
class="text-monospace text-secondary"
href="#of-aboutmodal"
data-toggle="modal" data-toggle="modal"
data-bs-tooltip=""
data-placement="right"
id="of-editconfig-button"
type="button"
title="Edit Configuration"
data-target="#of-editconfigmodal"
>
<i class="fas fa-cog"></i>
</button>
</div>
<div id="of-about-button-div">
<button
class="btn btn-primary mr-1"
data-toggle="modal"
data-bs-tooltip=""
data-placement="left"
id="of-about-button"
type="button"
title="About OpenFusionClient"
data-target="#of-aboutmodal" data-target="#of-aboutmodal"
>v0</a
> >
<i class="fas fa-info-circle"></i>
</button>
</div>
<div id="of-about-flash-div" style="z-index: -1">
<button class="btn btn-warning mr-1" tabindex="-1" type="button">
<i class="fas fa-info-circle"></i>
</button>
</div> </div>
</section> </section>
<section> <section>

View File

@@ -30,83 +30,25 @@ var serversPath = path.join(userData, "servers.json");
var versionsPath = path.join(userData, "versions.json"); var versionsPath = path.join(userData, "versions.json");
var hashPath = path.join(userData, "hashes.json"); var hashPath = path.join(userData, "hashes.json");
function backup() {
if (fs.existsSync(configPath)) fs.copySync(configPath, configPath + ".bak");
if (fs.existsSync(serversPath))
fs.copySync(serversPath, serversPath + ".bak");
if (fs.existsSync(versionsPath))
fs.copySync(versionsPath, versionsPath + ".bak");
if (fs.existsSync(hashPath)) fs.copySync(hashPath, hashPath + ".bak");
}
function patchVersions() {
var current = fs.readJsonSync(versionsPath);
var newDefaults = fs.readJsonSync(
path.join(__dirname, "/defaults/versions.json")
);
for (var i = 0; i < newDefaults["versions"].length; i++) {
var newDefault = newDefaults["versions"][i];
var found = false;
for (var j = 0; j < current["versions"].length; j++) {
var version = current["versions"][j];
if (newDefault["name"] === version["name"]) {
current["versions"][j] = newDefault;
found = true;
break;
}
}
if (!found) {
current["versions"].push(newDefault);
}
}
fs.writeFileSync(versionsPath, JSON.stringify(current, null, 4));
}
function patchServers() {
var current = fs.readJsonSync(serversPath);
var newDefaults = fs.readJsonSync(
path.join(__dirname, "/defaults/servers.json")
);
for (var i = 0; i < newDefaults["servers"].length; i++) {
var newDefault = newDefaults["servers"][i];
var found = false;
for (var j = 0; j < current["servers"].length; j++) {
var server = current["servers"][j];
if (newDefault["uuid"] === server["uuid"]) {
current["servers"][j] = newDefault;
found = true;
break;
}
}
if (!found) {
current["servers"].push(newDefault);
}
}
fs.writeFileSync(serversPath, JSON.stringify(current, null, 4));
}
function initialSetup(firstTime) { function initialSetup(firstTime) {
backup(); if (!firstTime) {
// Migration from pre-1.6
if (firstTime) { // Back everything up, just in case
fs.copySync(configPath, configPath + ".bak");
fs.copySync(serversPath, serversPath + ".bak");
fs.copySync(versionsPath, versionsPath + ".bak");
fs.copySync(hashPath, hashPath + ".bak");
} else {
// First-time setup // First-time setup
// Copy default servers // Copy default servers
fs.copySync( fs.copySync(
path.join(__dirname, "/defaults/servers.json"), path.join(__dirname, "/defaults/servers.json"),
serversPath serversPath
); );
fs.copySync(
path.join(__dirname, "/defaults/versions.json"),
versionsPath
);
} else if (fs.existsSync(serversPath)) {
// Migration
// Update default servers and versions
patchVersions();
patchServers();
} }
// Copy default versions and config // Copy default versions and config
fs.copySync(path.join(__dirname, "/defaults/versions.json"), versionsPath);
fs.copySync(path.join(__dirname, "/defaults/config.json"), configPath); fs.copySync(path.join(__dirname, "/defaults/config.json"), configPath);
fs.copySync(path.join(__dirname, "/defaults/hashes.json"), hashPath); fs.copySync(path.join(__dirname, "/defaults/hashes.json"), hashPath);

421
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{ {
"name": "OpenFusionClient", "name": "OpenFusionClient",
"version": "1.6.0", "version": "1.5.1",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "OpenFusionClient", "name": "OpenFusionClient",
"version": "1.6.0", "version": "1.5.1",
"hasInstallScript": true, "hasInstallScript": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@@ -15,8 +15,8 @@
"devDependencies": { "devDependencies": {
"electron-builder": "^22.14.13", "electron-builder": "^22.14.13",
"electron-prebuilt": "^0.31.2", "electron-prebuilt": "^0.31.2",
"patch-package": "^7.0.2", "patch-package": "^6.5.1",
"prettier": "^3.3.3" "prettier": "^2.7.1"
} }
}, },
"node_modules/@develar/schema-utils": { "node_modules/@develar/schema-utils": {
@@ -112,6 +112,65 @@
"node": ">= 10" "node": ">= 10"
} }
}, },
"node_modules/@malept/cross-spawn-promise/node_modules/cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
"dev": true,
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
"which": "^2.0.1"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/@malept/cross-spawn-promise/node_modules/path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/@malept/cross-spawn-promise/node_modules/shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"dev": true,
"dependencies": {
"shebang-regex": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/@malept/cross-spawn-promise/node_modules/shebang-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/@malept/cross-spawn-promise/node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
"dependencies": {
"isexe": "^2.0.0"
},
"bin": {
"node-which": "bin/node-which"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/@malept/flatpak-bundler": { "node_modules/@malept/flatpak-bundler": {
"version": "0.4.0", "version": "0.4.0",
"resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz",
@@ -937,6 +996,20 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/builder-util/node_modules/cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
"dev": true,
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
"which": "^2.0.1"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/builder-util/node_modules/debug": { "node_modules/builder-util/node_modules/debug": {
"version": "4.3.4", "version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -986,6 +1059,51 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true "dev": true
}, },
"node_modules/builder-util/node_modules/path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/builder-util/node_modules/shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"dev": true,
"dependencies": {
"shebang-regex": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/builder-util/node_modules/shebang-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/builder-util/node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
"dependencies": {
"isexe": "^2.0.0"
},
"bin": {
"node-which": "bin/node-which"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/cacheable-request": { "node_modules/cacheable-request": {
"version": "6.1.0", "version": "6.1.0",
"resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
@@ -1305,17 +1423,19 @@
} }
}, },
"node_modules/cross-spawn": { "node_modules/cross-spawn": {
"version": "7.0.3", "version": "6.0.5",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"path-key": "^3.1.0", "nice-try": "^1.0.4",
"shebang-command": "^2.0.0", "path-key": "^2.0.1",
"which": "^2.0.1" "semver": "^5.5.0",
"shebang-command": "^1.2.0",
"which": "^1.2.9"
}, },
"engines": { "engines": {
"node": ">= 8" "node": ">=4.8"
} }
}, },
"node_modules/crypto-random-string": { "node_modules/crypto-random-string": {
@@ -2477,7 +2597,7 @@
"node_modules/isexe": { "node_modules/isexe": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
"dev": true "dev": true
}, },
"node_modules/isstream": { "node_modules/isstream": {
@@ -2848,6 +2968,12 @@
"ncp": "bin/ncp" "ncp": "bin/ncp"
} }
}, },
"node_modules/nice-try": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
"dev": true
},
"node_modules/node-addon-api": { "node_modules/node-addon-api": {
"version": "1.7.2", "version": "1.7.2",
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz",
@@ -2998,49 +3124,34 @@
} }
}, },
"node_modules/patch-package": { "node_modules/patch-package": {
"version": "7.0.2", "version": "6.5.1",
"resolved": "https://registry.npmjs.org/patch-package/-/patch-package-7.0.2.tgz", "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.5.1.tgz",
"integrity": "sha512-PMYfL8LXxGIRmxXLqlEaBxzKPu7/SdP13ld6GSfAUJUZRmBDPp8chZs0dpzaAFn9TSPnFiMwkC6PJt6pBiAl8Q==", "integrity": "sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/lockfile": "^1.1.0",
"chalk": "^4.1.2", "chalk": "^4.1.2",
"ci-info": "^3.7.0", "cross-spawn": "^6.0.5",
"cross-spawn": "^7.0.3",
"find-yarn-workspace-root": "^2.0.0", "find-yarn-workspace-root": "^2.0.0",
"fs-extra": "^9.0.0", "fs-extra": "^9.0.0",
"is-ci": "^2.0.0",
"klaw-sync": "^6.0.0", "klaw-sync": "^6.0.0",
"minimist": "^1.2.6", "minimist": "^1.2.6",
"open": "^7.4.2", "open": "^7.4.2",
"rimraf": "^2.6.3", "rimraf": "^2.6.3",
"semver": "^7.5.3", "semver": "^5.6.0",
"slash": "^2.0.0", "slash": "^2.0.0",
"tmp": "^0.0.33", "tmp": "^0.0.33",
"yaml": "^2.2.2" "yaml": "^1.10.2"
}, },
"bin": { "bin": {
"patch-package": "index.js" "patch-package": "index.js"
}, },
"engines": { "engines": {
"node": ">=14", "node": ">=10",
"npm": ">5" "npm": ">5"
} }
}, },
"node_modules/patch-package/node_modules/ci-info": {
"version": "3.9.0",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
"integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
"dev": true,
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/sibiraj-s"
}
],
"engines": {
"node": ">=8"
}
},
"node_modules/patch-package/node_modules/fs-extra": { "node_modules/patch-package/node_modules/fs-extra": {
"version": "9.1.0", "version": "9.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
@@ -3088,18 +3199,6 @@
"rimraf": "bin.js" "rimraf": "bin.js"
} }
}, },
"node_modules/patch-package/node_modules/semver": {
"version": "7.6.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
"integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
},
"engines": {
"node": ">=10"
}
},
"node_modules/path-exists": { "node_modules/path-exists": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-1.0.0.tgz", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-1.0.0.tgz",
@@ -3119,12 +3218,12 @@
} }
}, },
"node_modules/path-key": { "node_modules/path-key": {
"version": "3.1.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
"dev": true, "dev": true,
"engines": { "engines": {
"node": ">=8" "node": ">=4"
} }
}, },
"node_modules/path-parse": { "node_modules/path-parse": {
@@ -3224,15 +3323,15 @@
} }
}, },
"node_modules/prettier": { "node_modules/prettier": {
"version": "3.3.3", "version": "2.7.1",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz",
"integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==",
"dev": true, "dev": true,
"bin": { "bin": {
"prettier": "bin/prettier.cjs" "prettier": "bin-prettier.js"
}, },
"engines": { "engines": {
"node": ">=14" "node": ">=10.13.0"
}, },
"funding": { "funding": {
"url": "https://github.com/prettier/prettier?sponsor=1" "url": "https://github.com/prettier/prettier?sponsor=1"
@@ -3582,24 +3681,24 @@
} }
}, },
"node_modules/shebang-command": { "node_modules/shebang-command": {
"version": "2.0.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"shebang-regex": "^3.0.0" "shebang-regex": "^1.0.0"
}, },
"engines": { "engines": {
"node": ">=8" "node": ">=0.10.0"
} }
}, },
"node_modules/shebang-regex": { "node_modules/shebang-regex": {
"version": "3.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
"dev": true, "dev": true,
"engines": { "engines": {
"node": ">=8" "node": ">=0.10.0"
} }
}, },
"node_modules/signal-exit": { "node_modules/signal-exit": {
@@ -4215,18 +4314,15 @@
} }
}, },
"node_modules/which": { "node_modules/which": {
"version": "2.0.2", "version": "1.3.1",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"isexe": "^2.0.0" "isexe": "^2.0.0"
}, },
"bin": { "bin": {
"node-which": "bin/node-which" "which": "bin/which"
},
"engines": {
"node": ">= 8"
} }
}, },
"node_modules/widest-line": { "node_modules/widest-line": {
@@ -4343,15 +4439,12 @@
"dev": true "dev": true
}, },
"node_modules/yaml": { "node_modules/yaml": {
"version": "2.4.5", "version": "1.10.2",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
"integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
"dev": true, "dev": true,
"bin": {
"yaml": "bin.mjs"
},
"engines": { "engines": {
"node": ">= 14" "node": ">= 6"
} }
}, },
"node_modules/yargs": { "node_modules/yargs": {
@@ -4452,6 +4545,49 @@
"dev": true, "dev": true,
"requires": { "requires": {
"cross-spawn": "^7.0.1" "cross-spawn": "^7.0.1"
},
"dependencies": {
"cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
"dev": true,
"requires": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
"which": "^2.0.1"
}
},
"path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"dev": true
},
"shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"dev": true,
"requires": {
"shebang-regex": "^3.0.0"
}
},
"shebang-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true
},
"which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
"requires": {
"isexe": "^2.0.0"
}
}
} }
}, },
"@malept/flatpak-bundler": { "@malept/flatpak-bundler": {
@@ -5071,6 +5207,17 @@
"integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==",
"dev": true "dev": true
}, },
"cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
"dev": true,
"requires": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
"which": "^2.0.1"
}
},
"debug": { "debug": {
"version": "4.3.4", "version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -5105,6 +5252,36 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true "dev": true
},
"path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"dev": true
},
"shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"dev": true,
"requires": {
"shebang-regex": "^3.0.0"
}
},
"shebang-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true
},
"which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
"requires": {
"isexe": "^2.0.0"
}
} }
} }
}, },
@@ -5394,14 +5571,16 @@
} }
}, },
"cross-spawn": { "cross-spawn": {
"version": "7.0.3", "version": "6.0.5",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"path-key": "^3.1.0", "nice-try": "^1.0.4",
"shebang-command": "^2.0.0", "path-key": "^2.0.1",
"which": "^2.0.1" "semver": "^5.5.0",
"shebang-command": "^1.2.0",
"which": "^1.2.9"
} }
}, },
"crypto-random-string": { "crypto-random-string": {
@@ -6307,7 +6486,7 @@
"isexe": { "isexe": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
"dev": true "dev": true
}, },
"isstream": { "isstream": {
@@ -6597,6 +6776,12 @@
"integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=",
"dev": true "dev": true
}, },
"nice-try": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
"dev": true
},
"node-addon-api": { "node-addon-api": {
"version": "1.7.2", "version": "1.7.2",
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz",
@@ -6716,33 +6901,27 @@
} }
}, },
"patch-package": { "patch-package": {
"version": "7.0.2", "version": "6.5.1",
"resolved": "https://registry.npmjs.org/patch-package/-/patch-package-7.0.2.tgz", "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.5.1.tgz",
"integrity": "sha512-PMYfL8LXxGIRmxXLqlEaBxzKPu7/SdP13ld6GSfAUJUZRmBDPp8chZs0dpzaAFn9TSPnFiMwkC6PJt6pBiAl8Q==", "integrity": "sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA==",
"dev": true, "dev": true,
"requires": { "requires": {
"@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/lockfile": "^1.1.0",
"chalk": "^4.1.2", "chalk": "^4.1.2",
"ci-info": "^3.7.0", "cross-spawn": "^6.0.5",
"cross-spawn": "^7.0.3",
"find-yarn-workspace-root": "^2.0.0", "find-yarn-workspace-root": "^2.0.0",
"fs-extra": "^9.0.0", "fs-extra": "^9.0.0",
"is-ci": "^2.0.0",
"klaw-sync": "^6.0.0", "klaw-sync": "^6.0.0",
"minimist": "^1.2.6", "minimist": "^1.2.6",
"open": "^7.4.2", "open": "^7.4.2",
"rimraf": "^2.6.3", "rimraf": "^2.6.3",
"semver": "^7.5.3", "semver": "^5.6.0",
"slash": "^2.0.0", "slash": "^2.0.0",
"tmp": "^0.0.33", "tmp": "^0.0.33",
"yaml": "^2.2.2" "yaml": "^1.10.2"
}, },
"dependencies": { "dependencies": {
"ci-info": {
"version": "3.9.0",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
"integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
"dev": true
},
"fs-extra": { "fs-extra": {
"version": "9.1.0", "version": "9.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
@@ -6777,12 +6956,6 @@
"requires": { "requires": {
"glob": "^7.1.3" "glob": "^7.1.3"
} }
},
"semver": {
"version": "7.6.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
"integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
"dev": true
} }
} }
}, },
@@ -6799,9 +6972,9 @@
"dev": true "dev": true
}, },
"path-key": { "path-key": {
"version": "3.1.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
"dev": true "dev": true
}, },
"path-parse": { "path-parse": {
@@ -6877,9 +7050,9 @@
"dev": true "dev": true
}, },
"prettier": { "prettier": {
"version": "3.3.3", "version": "2.7.1",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz",
"integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==",
"dev": true "dev": true
}, },
"pretty-bytes": { "pretty-bytes": {
@@ -7153,18 +7326,18 @@
} }
}, },
"shebang-command": { "shebang-command": {
"version": "2.0.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
"dev": true, "dev": true,
"requires": { "requires": {
"shebang-regex": "^3.0.0" "shebang-regex": "^1.0.0"
} }
}, },
"shebang-regex": { "shebang-regex": {
"version": "3.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
"dev": true "dev": true
}, },
"signal-exit": { "signal-exit": {
@@ -7660,9 +7833,9 @@
} }
}, },
"which": { "which": {
"version": "2.0.2", "version": "1.3.1",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"isexe": "^2.0.0" "isexe": "^2.0.0"
@@ -7757,9 +7930,9 @@
"dev": true "dev": true
}, },
"yaml": { "yaml": {
"version": "2.4.5", "version": "1.10.2",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
"integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
"dev": true "dev": true
}, },
"yargs": { "yargs": {

View File

@@ -1,13 +1,13 @@
{ {
"name": "OpenFusionClient", "name": "OpenFusionClient",
"version": "1.6.0", "version": "1.5.1",
"description": "OpenFusionClient", "description": "OpenFusionClient",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
"postinstall": "npx patch-package && npm explore electron-prebuilt -- npm run postinstall", "postinstall": "npx patch-package && npm explore electron-prebuilt -- npm run postinstall",
"start": "electron .", "start": "electron .",
"pack": "electron-builder --win --ia32 --dir", "pack": "electron-builder --win --ia32 --dir",
"dist": "electron-builder --win --ia32 --publish=never", "dist": "electron-builder --win --ia32",
"prettier": "npx prettier --write ." "prettier": "npx prettier --write ."
}, },
"author": "OpenFusion Contributors", "author": "OpenFusion Contributors",
@@ -15,8 +15,8 @@
"devDependencies": { "devDependencies": {
"electron-builder": "^22.14.13", "electron-builder": "^22.14.13",
"electron-prebuilt": "^0.31.2", "electron-prebuilt": "^0.31.2",
"patch-package": "^7.0.2", "patch-package": "^6.5.1",
"prettier": "^3.3.3" "prettier": "^2.7.1"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
@@ -25,7 +25,7 @@
"build": { "build": {
"appId": "xyz.openfusion.client", "appId": "xyz.openfusion.client",
"productName": "OpenFusionClient", "productName": "OpenFusionClient",
"copyright": "© 2020-2024 OpenFusion Contributors", "copyright": "© 2020-2023 OpenFusion Contributors",
"electronDownload": { "electronDownload": {
"version": "0.31.2", "version": "0.31.2",
"platform": "win32", "platform": "win32",