Fixed some stiff for windows
This commit is contained in:
parent
86640da695
commit
f01c9caf2d
@ -58,7 +58,7 @@ function compile_native() {
|
|||||||
[[ ! -z "$traroot_library" ]] && _arguments="${_arguments} -DLIBRARY_PATH=\"$traroot_library\""
|
[[ ! -z "$traroot_library" ]] && _arguments="${_arguments} -DLIBRARY_PATH=\"$traroot_library\""
|
||||||
|
|
||||||
local _generator=""
|
local _generator=""
|
||||||
[[ ${build_os_type} == "win32" ]] && _generator='-G"Visual Studio 15 2017 Win64"'
|
[[ ${build_os_type} == "win32" ]] && _generator='-G"Visual Studio 16 2019"'
|
||||||
|
|
||||||
_command="cmake ../../ ${_generator} -DCMAKE_BUILD_TYPE=RelWithDebInfo ${_arguments}"
|
_command="cmake ../../ ${_generator} -DCMAKE_BUILD_TYPE=RelWithDebInfo ${_arguments}"
|
||||||
echo "Executing cmake command $_command"
|
echo "Executing cmake command $_command"
|
||||||
@ -117,8 +117,8 @@ function deploy_client() {
|
|||||||
end_task "${project_name}_package" "Client successfully deployed!"
|
end_task "${project_name}_package" "Client successfully deployed!"
|
||||||
}
|
}
|
||||||
|
|
||||||
install_npm
|
#install_npm
|
||||||
compile_scripts
|
#compile_scripts
|
||||||
compile_native
|
compile_native
|
||||||
package_client
|
package_client
|
||||||
deploy_client
|
deploy_client
|
||||||
|
@ -110,6 +110,7 @@ if (MSVC)
|
|||||||
foreach(CompilerFlag ${CompilerFlags})
|
foreach(CompilerFlag ${CompilerFlags})
|
||||||
string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
|
string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
|
||||||
endforeach()
|
endforeach()
|
||||||
|
add_compile_options("/MTd")
|
||||||
add_compile_options("/EHsc") #We require exception handling
|
add_compile_options("/EHsc") #We require exception handling
|
||||||
else()
|
else()
|
||||||
#This is a bad thing here!
|
#This is a bad thing here!
|
||||||
|
@ -44,9 +44,6 @@ NAN_METHOD(finalize) {
|
|||||||
tc::signal::finalize();
|
tc::signal::finalize();
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <experimental/filesystem>
|
|
||||||
namespace fs = std::experimental::filesystem;
|
|
||||||
|
|
||||||
NAN_METHOD(crash) {
|
NAN_METHOD(crash) {
|
||||||
std::thread([] {
|
std::thread([] {
|
||||||
while (true) {
|
while (true) {
|
||||||
|
@ -2,11 +2,14 @@
|
|||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
|
#include <filesystem>
|
||||||
|
namespace fs = std::filesystem;
|
||||||
#else
|
#else
|
||||||
#include <client/linux/handler/exception_handler.h>
|
#include <client/linux/handler/exception_handler.h>
|
||||||
|
#include <experimental/filesystem>
|
||||||
|
namespace fs = std::experimental::filesystem;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <experimental/filesystem>
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
#include "base64.h"
|
#include "base64.h"
|
||||||
@ -14,7 +17,6 @@
|
|||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace tc;
|
using namespace tc;
|
||||||
using namespace tc::signal;
|
using namespace tc::signal;
|
||||||
namespace fs = std::experimental::filesystem;
|
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
unique_ptr<google_breakpad::ExceptionHandler> global_crash_handler;
|
unique_ptr<google_breakpad::ExceptionHandler> global_crash_handler;
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
|
@ -4,10 +4,14 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <strsafe.h>
|
#include <strsafe.h>
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
#include <experimental/filesystem>
|
#ifdef WIN32
|
||||||
namespace fs = std::experimental::filesystem;
|
#include <filesystem>
|
||||||
|
namespace fs = std::filesystem;
|
||||||
|
#else
|
||||||
|
#include <experimental/filesystem>
|
||||||
|
namespace fs = std::experimental::filesystem;
|
||||||
|
#endif
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
extern void win_crash_callback(const fs::path& source_file, const std::string& error, bool success);
|
extern void win_crash_callback(const fs::path& source_file, const std::string& error, bool success);
|
||||||
|
6
native/dist/ext_nan/include/NanStrings.h
vendored
6
native/dist/ext_nan/include/NanStrings.h
vendored
@ -9,7 +9,7 @@ namespace Nan {
|
|||||||
inline v8::Local<v8::String> LocalStringUTF8(std::string_view buffer) {
|
inline v8::Local<v8::String> LocalStringUTF8(std::string_view buffer) {
|
||||||
auto isolate = Nan::GetCurrentContext()->GetIsolate();
|
auto isolate = Nan::GetCurrentContext()->GetIsolate();
|
||||||
v8::EscapableHandleScope scope{isolate};
|
v8::EscapableHandleScope scope{isolate};
|
||||||
auto data = v8::String::NewFromUtf8(isolate, buffer.data(), v8::NewStringType::kNormal, buffer.length());
|
auto data = v8::String::NewFromUtf8(isolate, buffer.data(), v8::NewStringType::kNormal, (int) buffer.length());
|
||||||
|
|
||||||
v8::Local<v8::String> response{};
|
v8::Local<v8::String> response{};
|
||||||
if(!data.ToLocal(&response))
|
if(!data.ToLocal(&response))
|
||||||
@ -34,7 +34,7 @@ namespace Nan {
|
|||||||
inline v8::Local<v8::String> LocalString(std::string_view buffer) {
|
inline v8::Local<v8::String> LocalString(std::string_view buffer) {
|
||||||
auto isolate = Nan::GetCurrentContext()->GetIsolate();
|
auto isolate = Nan::GetCurrentContext()->GetIsolate();
|
||||||
//v8::EscapableHandleScope scope{isolate};
|
//v8::EscapableHandleScope scope{isolate};
|
||||||
auto data = v8::String::NewFromOneByte(isolate, (uint8_t*) buffer.data(), v8::NewStringType::kNormal, buffer.length());
|
auto data = v8::String::NewFromOneByte(isolate, (uint8_t*) buffer.data(), v8::NewStringType::kNormal, (int) buffer.length());
|
||||||
|
|
||||||
v8::Local<v8::String> response{};
|
v8::Local<v8::String> response{};
|
||||||
if(!data.ToLocal(&response))
|
if(!data.ToLocal(&response))
|
||||||
@ -60,7 +60,7 @@ namespace Nan {
|
|||||||
inline v8::Local<v8::String> LocalString(std::wstring_view buffer) {
|
inline v8::Local<v8::String> LocalString(std::wstring_view buffer) {
|
||||||
auto isolate = Nan::GetCurrentContext()->GetIsolate();
|
auto isolate = Nan::GetCurrentContext()->GetIsolate();
|
||||||
v8::EscapableHandleScope scope{isolate};
|
v8::EscapableHandleScope scope{isolate};
|
||||||
auto data = v8::String::NewFromTwoByte(isolate, (uint16_t*) buffer.data(), v8::NewStringType::kNormal, buffer.length());
|
auto data = v8::String::NewFromTwoByte(isolate, (uint16_t*) buffer.data(), v8::NewStringType::kNormal, (int) buffer.length());
|
||||||
|
|
||||||
v8::Local<v8::String> response{};
|
v8::Local<v8::String> response{};
|
||||||
if(!data.ToLocal(&response))
|
if(!data.ToLocal(&response))
|
||||||
|
@ -21,10 +21,11 @@ namespace tc {
|
|||||||
return std::unique_lock<std::timed_mutex>(this->_execute_mutex);
|
return std::unique_lock<std::timed_mutex>(this->_execute_mutex);
|
||||||
else {
|
else {
|
||||||
auto lock = std::unique_lock<std::timed_mutex>(this->_execute_mutex, std::defer_lock);
|
auto lock = std::unique_lock<std::timed_mutex>(this->_execute_mutex, std::defer_lock);
|
||||||
if(this->execute_lock_timeout.count() > 0)
|
if(this->execute_lock_timeout.count() > 0) {
|
||||||
lock.try_lock_for(this->execute_lock_timeout);
|
(void) lock.try_lock_for(this->execute_lock_timeout);
|
||||||
else
|
} else {
|
||||||
lock.try_lock();
|
(void) lock.try_lock();
|
||||||
|
}
|
||||||
return lock;
|
return lock;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,14 +30,14 @@ bool UDPSocket::initialize() {
|
|||||||
if(this->file_descriptor > 0)
|
if(this->file_descriptor > 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
this->file_descriptor = socket(this->_remote_address.ss_family, SOCK_DGRAM | SOCK_NONBLOCK, 0);
|
this->file_descriptor = (int) socket(this->_remote_address.ss_family, SOCK_DGRAM | SOCK_NONBLOCK, 0);
|
||||||
if(this->file_descriptor < 2) {
|
if(this->file_descriptor < 2) {
|
||||||
this->file_descriptor = 0;
|
this->file_descriptor = 0;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
u_long enabled = 0;
|
u_long enabled = 1;
|
||||||
auto non_block_rs = ioctlsocket(this->file_descriptor, FIONBIO, &enabled);
|
auto non_block_rs = ioctlsocket(this->file_descriptor, FIONBIO, &enabled);
|
||||||
if (non_block_rs != NO_ERROR) {
|
if (non_block_rs != NO_ERROR) {
|
||||||
log_warn(category::connection, tr("Failed to enable noblock!"));
|
log_warn(category::connection, tr("Failed to enable noblock!"));
|
||||||
@ -130,8 +130,9 @@ void UDPSocket::_io_execute(void *_ptr_socket) {
|
|||||||
|
|
||||||
void UDPSocket::io_execute() {
|
void UDPSocket::io_execute() {
|
||||||
while(this->io_base) {
|
while(this->io_base) {
|
||||||
event_base_loop(this->io_base, 0);
|
event_base_loop(this->io_base, EVLOOP_NO_EXIT_ON_EMPTY);
|
||||||
}
|
}
|
||||||
|
logger::trace(category::socket, tr("Socket IO loop exited"));
|
||||||
}
|
}
|
||||||
void UDPSocket::callback_read(evutil_socket_t fd) {
|
void UDPSocket::callback_read(evutil_socket_t fd) {
|
||||||
sockaddr source_address{};
|
sockaddr source_address{};
|
||||||
@ -144,7 +145,7 @@ void UDPSocket::callback_read(evutil_socket_t fd) {
|
|||||||
size_t read_count = 0;
|
size_t read_count = 0;
|
||||||
while(true) { //TODO: Some kind of timeout
|
while(true) { //TODO: Some kind of timeout
|
||||||
source_address_length = sizeof(sockaddr);
|
source_address_length = sizeof(sockaddr);
|
||||||
read_length = recvfrom(fd, (char*) buffer, buffer_length, MSG_DONTWAIT, &source_address, &source_address_length);
|
read_length = recvfrom(fd, (char*) buffer, (int) buffer_length, MSG_DONTWAIT, &source_address, &source_address_length);
|
||||||
if(read_length <= 0) {
|
if(read_length <= 0) {
|
||||||
if(errno == EAGAIN)
|
if(errno == EAGAIN)
|
||||||
break;
|
break;
|
||||||
@ -153,6 +154,7 @@ void UDPSocket::callback_read(evutil_socket_t fd) {
|
|||||||
break; /* this should never happen! */
|
break; /* this should never happen! */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//logger::trace(category::socket, tr("Read {} bytes"), read_length);
|
||||||
read_count++;
|
read_count++;
|
||||||
if(this->on_data)
|
if(this->on_data)
|
||||||
this->on_data(pipes::buffer_view{buffer, (size_t) read_length});
|
this->on_data(pipes::buffer_view{buffer, (size_t) read_length});
|
||||||
@ -168,7 +170,7 @@ void UDPSocket::callback_write(evutil_socket_t fd) {
|
|||||||
this->write_queue.pop_front();
|
this->write_queue.pop_front();
|
||||||
lock.unlock();
|
lock.unlock();
|
||||||
|
|
||||||
auto written = sendto(fd, buffer.data_ptr<char>(), buffer.length(), MSG_DONTWAIT, (sockaddr*) &this->_remote_address, sizeof(this->_remote_address));
|
auto written = sendto(fd, buffer.data_ptr<char>(), (int) buffer.length(), MSG_DONTWAIT, (sockaddr*) &this->_remote_address, sizeof(this->_remote_address));
|
||||||
if(written != buffer.length()) {
|
if(written != buffer.length()) {
|
||||||
if(errno == EAGAIN) {
|
if(errno == EAGAIN) {
|
||||||
lock.lock();
|
lock.lock();
|
||||||
@ -179,6 +181,8 @@ void UDPSocket::callback_write(evutil_socket_t fd) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return; /* this should never happen! */
|
return; /* this should never happen! */
|
||||||
|
} else {
|
||||||
|
//logger::trace(category::socket, tr("Wrote {} bytes"), buffer.length());
|
||||||
}
|
}
|
||||||
|
|
||||||
lock.lock();
|
lock.lock();
|
||||||
@ -191,6 +195,9 @@ void UDPSocket::send_message(const pipes::buffer_view &buffer) {
|
|||||||
|
|
||||||
unique_lock lock(this->io_lock);
|
unique_lock lock(this->io_lock);
|
||||||
this->write_queue.push_back(buf);
|
this->write_queue.push_back(buf);
|
||||||
if(this->event_write)
|
if(this->event_write) {
|
||||||
event_add(this->event_write, nullptr);
|
event_add(this->event_write, nullptr);
|
||||||
|
} else {
|
||||||
|
logger::warn(category::socket, tr("Dropping write event schedule because we have no write event."));
|
||||||
|
}
|
||||||
}
|
}
|
@ -14,7 +14,7 @@ using namespace tc::connection;
|
|||||||
VoiceSender::VoiceSender(tc::connection::VoiceConnection *handle) : handle(handle) {}
|
VoiceSender::VoiceSender(tc::connection::VoiceConnection *handle) : handle(handle) {}
|
||||||
|
|
||||||
VoiceSender::~VoiceSender() {
|
VoiceSender::~VoiceSender() {
|
||||||
audio::encode_event_loop->cancel(static_pointer_cast<event::EventEntry>(this->_ref.lock()));
|
audio::encode_event_loop->cancel(dynamic_pointer_cast<event::EventEntry>(this->_ref.lock()));
|
||||||
this->clear_buffer(); /* buffer might be accessed within encode_raw_frame, but this could not be trigered while this will be deallocated! */
|
this->clear_buffer(); /* buffer might be accessed within encode_raw_frame, but this could not be trigered while this will be deallocated! */
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,7 +81,7 @@ void VoiceSender::send_data(const void *data, size_t samples, size_t rate, size_
|
|||||||
this->raw_audio_buffers.push_back(move(frame));
|
this->raw_audio_buffers.push_back(move(frame));
|
||||||
}
|
}
|
||||||
|
|
||||||
audio::encode_event_loop->schedule(static_pointer_cast<event::EventEntry>(this->_ref.lock()));
|
audio::encode_event_loop->schedule(dynamic_pointer_cast<event::EventEntry>(this->_ref.lock()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void VoiceSender::send_stop() {
|
void VoiceSender::send_stop() {
|
||||||
@ -104,7 +104,7 @@ void VoiceSender::send_stop() {
|
|||||||
this->raw_audio_buffers.push_back(move(frame));
|
this->raw_audio_buffers.push_back(move(frame));
|
||||||
}
|
}
|
||||||
|
|
||||||
audio::encode_event_loop->schedule(static_pointer_cast<event::EventEntry>(this->_ref.lock()));
|
audio::encode_event_loop->schedule(dynamic_pointer_cast<event::EventEntry>(this->_ref.lock()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void VoiceSender::finalize() {
|
void VoiceSender::finalize() {
|
||||||
@ -137,7 +137,7 @@ void VoiceSender::event_execute(const std::chrono::system_clock::time_point &poi
|
|||||||
|
|
||||||
if(reschedule) {
|
if(reschedule) {
|
||||||
log_warn(category::voice_connection, tr("Audio data decode will take longer than {} us. Enqueueing for later"), chrono::duration_cast<chrono::microseconds>(max_time).count());
|
log_warn(category::voice_connection, tr("Audio data decode will take longer than {} us. Enqueueing for later"), chrono::duration_cast<chrono::microseconds>(max_time).count());
|
||||||
audio::decode_event_loop->schedule(static_pointer_cast<event::EventEntry>(this->_ref.lock()));
|
audio::decode_event_loop->schedule(dynamic_pointer_cast<event::EventEntry>(this->_ref.lock()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -227,7 +227,7 @@ VoiceClient::VoiceClient(const std::shared_ptr<VoiceConnection>&, uint16_t clien
|
|||||||
this->set_state(state::buffering);
|
this->set_state(state::buffering);
|
||||||
}
|
}
|
||||||
|
|
||||||
audio::decode_event_loop->schedule(static_pointer_cast<event::EventEntry>(this->ref()));
|
audio::decode_event_loop->schedule(dynamic_pointer_cast<event::EventEntry>(this->ref()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -368,7 +368,7 @@ void VoiceClient::process_packet(uint16_t packet_id, const pipes::buffer_view& b
|
|||||||
codec_data.process_pending = true;
|
codec_data.process_pending = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
audio::decode_event_loop->schedule(static_pointer_cast<event::EventEntry>(this->ref()));
|
audio::decode_event_loop->schedule(dynamic_pointer_cast<event::EventEntry>(this->ref()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void VoiceClient::cancel_replay() {
|
void VoiceClient::cancel_replay() {
|
||||||
@ -376,7 +376,7 @@ void VoiceClient::cancel_replay() {
|
|||||||
|
|
||||||
this->output_source->clear();
|
this->output_source->clear();
|
||||||
this->set_state(state::stopped);
|
this->set_state(state::stopped);
|
||||||
audio::decode_event_loop->cancel(static_pointer_cast<event::EventEntry>(this->ref()));
|
audio::decode_event_loop->cancel(dynamic_pointer_cast<event::EventEntry>(this->ref()));
|
||||||
|
|
||||||
auto execute_lock = this->execute_lock(true);
|
auto execute_lock = this->execute_lock(true);
|
||||||
for(auto& codec : this->codec) {
|
for(auto& codec : this->codec) {
|
||||||
@ -549,7 +549,7 @@ void VoiceClient::event_execute(const std::chrono::system_clock::time_point &sch
|
|||||||
if(reschedule) {
|
if(reschedule) {
|
||||||
log_warn(category::voice_connection, tr("Audio data decode will take longer than {} us. Enqueueing for later"),
|
log_warn(category::voice_connection, tr("Audio data decode will take longer than {} us. Enqueueing for later"),
|
||||||
chrono::duration_cast<chrono::microseconds>(max_time).count());
|
chrono::duration_cast<chrono::microseconds>(max_time).count());
|
||||||
audio::decode_event_loop->schedule(static_pointer_cast<event::EventEntry>(this->ref()));
|
audio::decode_event_loop->schedule(dynamic_pointer_cast<event::EventEntry>(this->ref()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,9 +2,14 @@
|
|||||||
#include "../../logger.h"
|
#include "../../logger.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
#include <experimental/filesystem>
|
#ifdef WIN32
|
||||||
|
#include <filesystem>
|
||||||
|
namespace fs = std::filesystem;
|
||||||
|
#else
|
||||||
|
#include <experimental/filesystem>
|
||||||
|
namespace fs = std::experimental::filesystem;
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace fs = std::experimental::filesystem;
|
|
||||||
using namespace tc;
|
using namespace tc;
|
||||||
using namespace tc::ft;
|
using namespace tc::ft;
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
@ -7,12 +7,14 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
#define EXPERIMENTAL_FS
|
#ifndef WIN32
|
||||||
|
#define EXPERIMENTAL_FS
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef EXPERIMENTAL_FS
|
#ifdef EXPERIMENTAL_FS
|
||||||
#include <experimental/filesystem>
|
#include <experimental/filesystem>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
namespace fs = std::experimental::filesystem;
|
||||||
namespace fs = std::experimental::filesystem;
|
|
||||||
#else
|
#else
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
namespace fs = std::filesystem;
|
namespace fs = std::filesystem;
|
||||||
|
10
package.json
10
package.json
@ -37,9 +37,14 @@
|
|||||||
"asar": "^2.0.1",
|
"asar": "^2.0.1",
|
||||||
"cmake-js": "^4.0.1",
|
"cmake-js": "^4.0.1",
|
||||||
"ejs": "^2.7.1",
|
"ejs": "^2.7.1",
|
||||||
|
"electron-installer-windows": "^1.1.1",
|
||||||
"electron-packager": "8.7.2",
|
"electron-packager": "8.7.2",
|
||||||
|
"electron-winstaller": "^2.7.0",
|
||||||
|
"electron-wix-msi": "^2.2.0",
|
||||||
"nodemon": "^1.19.4",
|
"nodemon": "^1.19.4",
|
||||||
"platform-dependent-modules": "0.0.14",
|
"platform-dependent-modules": "0.0.14",
|
||||||
|
"rc": "^1.2.8",
|
||||||
|
"rcedit": "^1.1.2",
|
||||||
"sass": "^1.23.2",
|
"sass": "^1.23.2",
|
||||||
"typescript": "^3.7.2"
|
"typescript": "^3.7.2"
|
||||||
},
|
},
|
||||||
@ -52,11 +57,8 @@
|
|||||||
"aws-sign2": "^0.7.0",
|
"aws-sign2": "^0.7.0",
|
||||||
"aws4": "^1.8.0",
|
"aws4": "^1.8.0",
|
||||||
"electron": "7.1.2",
|
"electron": "7.1.2",
|
||||||
"electron-installer-windows": "^1.1.1",
|
|
||||||
"electron-navigation": "^1.5.8",
|
"electron-navigation": "^1.5.8",
|
||||||
"electron-rebuild": "^1.8.6",
|
"electron-rebuild": "^1.8.6",
|
||||||
"electron-winstaller": "^2.7.0",
|
|
||||||
"electron-wix-msi": "^2.2.0",
|
|
||||||
"extend": "^3.0.2",
|
"extend": "^3.0.2",
|
||||||
"extsprintf": "^1.4.0",
|
"extsprintf": "^1.4.0",
|
||||||
"fs-extra": "^8.1.0",
|
"fs-extra": "^8.1.0",
|
||||||
@ -70,8 +72,6 @@
|
|||||||
"only": "0.0.2",
|
"only": "0.0.2",
|
||||||
"psl": "^1.4.0",
|
"psl": "^1.4.0",
|
||||||
"pure-uuid": "^1.5.7",
|
"pure-uuid": "^1.5.7",
|
||||||
"rc": "^1.2.8",
|
|
||||||
"rcedit": "^1.1.2",
|
|
||||||
"request": "^2.47.1",
|
"request": "^2.47.1",
|
||||||
"request-progress": "^3.0.0",
|
"request-progress": "^3.0.0",
|
||||||
"request-promise": "^4.2.5",
|
"request-promise": "^4.2.5",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user