Skip to content

Commit 3cc80b1

Browse files
committed
fix: add correction to binary generation
1 parent 6e4cb72 commit 3cc80b1

File tree

6 files changed

+77
-58
lines changed

6 files changed

+77
-58
lines changed

package.json

+7-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"name": "mem-gui",
3-
"description": "A graphical interface (GUI) for managing Memcached databases and cache. Provides an intuitive way to list, create, edit, and delete keys, as well as manage multiple server connections efficiently.",
2+
"name": "MemGUI",
3+
"description": "GUI for managing Memcached",
44
"private": false,
55
"version": "0.1.0",
66
"author": {
@@ -11,18 +11,19 @@
1111
"license": "SEE LICENSE IN LICENSE",
1212
"scripts": {
1313
"clean": "rimraf dist && rimraf release",
14-
"prestart": "yarn clean && tsc && node scripts/fix-server-extension.js",
15-
"predev": "yarn clean && tsc && node scripts/fix-server-extension.js",
14+
"prestart": "yarn clean && tsc && node scripts/build-server.js",
15+
"predev": "yarn clean && tsc && node scripts/build-server.js",
1616
"dev": "concurrently \"npm run ui\" \"wait-on http://localhost:5173 && npm run electron\"",
1717
"ui": "vite",
1818
"server": "tsx src/server/index.ts",
1919
"electron": "electron .",
2020
"build:server": "tsc",
2121
"build:ui": "vite build",
22-
"build:all": "yarn clean && yarn build:ui && yarn build:server && node scripts/fix-server-extension.js && electron-builder",
22+
"build:all": "yarn clean && yarn build:ui && yarn build:server && node scripts/build-server.js && electron-builder",
2323
"start": "electron ."
2424
},
2525
"build": {
26+
"asar": false,
2627
"extraFiles": [
2728
{
2829
"from": "dist/",
@@ -79,6 +80,7 @@
7980
"electron": "^34.0.2",
8081
"electron-builder": "^25.1.8",
8182
"electron-is-dev": "^3.0.1",
83+
"esbuild": "^0.24.2",
8284
"eslint": "^9.17.0",
8385
"eslint-plugin-react": "^7.37.2",
8486
"eslint-plugin-react-hooks": "^5.0.0",

scripts/build-server.js

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/* eslint-disable no-undef */
2+
import { build } from 'esbuild';
3+
import path from 'path';
4+
5+
const inputFilePath = path.join('src/server/index.ts');
6+
const outputFilePath = path.join('dist/server/index.cjs');
7+
8+
build({
9+
entryPoints: [inputFilePath],
10+
bundle: true,
11+
platform: 'node',
12+
target: 'node22',
13+
outfile: outputFilePath,
14+
external: [],
15+
sourcemap: true,
16+
}).catch(() => process.exit(1));

scripts/fix-server-extension.js

-12
This file was deleted.

src/electron/main.cjs

+40-21
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,54 @@
11
const { app, BrowserWindow, ipcMain, screen } = require('electron');
22
const path = require('path');
3-
const { spawn } = require('child_process');
3+
const net = require('net');
4+
5+
const DEFAULT_SERVER_PORT = 33080;
46

57
const isDev = !app.isPackaged;
68

79
const serverPath = isDev
810
? path.join(__dirname, '../../dist/server/index.cjs')
911
: path.join(process.resourcesPath, 'server/index.cjs');
1012

11-
app.whenReady().then(() => {
12-
const primaryDisplay = screen.getPrimaryDisplay();
13-
const { width, height } = primaryDisplay.workAreaSize;
13+
const startURL = isDev
14+
? 'http://localhost:5173'
15+
: `http://localhost:${DEFAULT_SERVER_PORT}/index.html`;
16+
17+
async function isPortInUse(port) {
18+
return new Promise((resolve) => {
19+
const server = net.createServer();
20+
server.once('error', (err) => {
21+
if (err.code === 'EADDRINUSE') {
22+
resolve(true);
23+
} else {
24+
resolve(false);
25+
}
26+
});
27+
28+
server.once('listening', () => {
29+
server.close();
30+
resolve(false);
31+
});
1432

15-
const apiProcess = spawn('node', [serverPath], {
16-
windowsHide: true,
17-
stdio: 'ignore',
33+
server.listen(port);
1834
});
35+
}
36+
37+
app.whenReady().then(async () => {
38+
try {
39+
const { server } = require(serverPath);
40+
41+
const isUsed = await isPortInUse(DEFAULT_SERVER_PORT);
42+
43+
if (!isUsed) {
44+
await server.listen(DEFAULT_SERVER_PORT);
45+
}
46+
} catch (error) {
47+
console.error('Unable to create a new http sever', error);
48+
}
49+
50+
const primaryDisplay = screen.getPrimaryDisplay();
51+
const { width, height } = primaryDisplay.workAreaSize;
1952

2053
const iconPath = path.join(__dirname, '..', '..', 'assets', 'mem-gui.ico');
2154

@@ -34,22 +67,8 @@ app.whenReady().then(() => {
3467
icon: iconPath,
3568
});
3669

37-
const startURL = isDev
38-
? 'http://localhost:5173'
39-
: 'http://localhost:33080/index.html';
40-
4170
mainWindow.loadURL(startURL);
4271

43-
app.on('quit', () => {
44-
if (apiProcess) {
45-
try {
46-
process.kill(apiProcess.pid);
47-
} catch (error) {
48-
console.error('Erro ao encerrar o subprocesso:', error);
49-
}
50-
}
51-
});
52-
5372
mainWindow.on('maximize', () => {
5473
mainWindow.webContents.send('window-maximized');
5574
});

src/server/index.ts

+13-19
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import { v4 as uuidv4 } from 'uuid';
1212

1313
const TELNET_TIMEOUT = 5000;
1414
const MAX_CONCURRENT_REQUESTS = 10;
15-
const DEFAULT_SERVER_PORT = 33080;
1615
const CONNECTION_TIMEOUT = 300_000;
1716

1817
const STATIC_FILES_PATH = path.join(__dirname, '..', 'ui');
@@ -47,13 +46,13 @@ interface MemcachedConnection {
4746
lastActive: Date;
4847
}
4948

50-
const app = express();
51-
app.use(cors());
52-
app.use(express.json());
49+
const server = express();
50+
server.use(cors());
51+
server.use(express.json());
5352

54-
app.use(express.static(STATIC_FILES_PATH));
53+
server.use(express.static(STATIC_FILES_PATH));
5554

56-
app.use(
55+
server.use(
5756
(
5857
err: Error,
5958
req: express.Request,
@@ -472,7 +471,7 @@ const CacheController = {
472471
},
473472
};
474473

475-
app.post(
474+
server.post(
476475
'/api/connections',
477476
validateRequest([
478477
body('host').isString(),
@@ -481,23 +480,23 @@ app.post(
481480
ConnectionController.connect
482481
);
483482

484-
app.delete(
483+
server.delete(
485484
'/api/connections',
486485
checkConnection,
487486
ConnectionController.disconnect
488487
);
489488

490-
app.get('/api/connections', checkConnection, ConnectionController.status);
489+
server.get('/api/connections', checkConnection, ConnectionController.status);
491490

492-
app.get('/api/keys', checkConnection, CacheController.listKeys);
491+
server.get('/api/keys', checkConnection, CacheController.listKeys);
493492

494-
app.get(
493+
server.get(
495494
'/api/keys/:key',
496495
checkConnection,
497496
validateRequest([param('key').isString().notEmpty()]),
498497
CacheController.getKey
499498
);
500-
app.post(
499+
server.post(
501500
'/api/keys',
502501
checkConnection,
503502
validateRequest([
@@ -507,16 +506,11 @@ app.post(
507506
]),
508507
CacheController.setKey
509508
);
510-
app.delete(
509+
server.delete(
511510
'/api/keys/:key',
512511
checkConnection,
513512
validateRequest([param('key').isString().notEmpty()]),
514513
CacheController.deleteKey
515514
);
516515

517-
const PORT = DEFAULT_SERVER_PORT;
518-
app.listen(PORT, () => {
519-
logger.info(`Servidor iniciado na porta ${PORT}`);
520-
});
521-
522-
export default app;
516+
export { server };

yarn.lock

+1-1
Original file line numberDiff line numberDiff line change
@@ -2294,7 +2294,7 @@ es6-error@^4.1.1:
22942294

22952295
esbuild@^0.24.2:
22962296
version "0.24.2"
2297-
resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz"
2297+
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.24.2.tgz#b5b55bee7de017bff5fb8a4e3e44f2ebe2c3567d"
22982298
integrity sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==
22992299
optionalDependencies:
23002300
"@esbuild/aix-ppc64" "0.24.2"

0 commit comments

Comments
 (0)