Skip to content

Commit b099d07

Browse files
deadlyjackAjit Kumargreptile-apps[bot]
authored
feat: hot restart (#2153)
* feat: hot restart * fix: formatting * Update utils/scripts/dev.js Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> * Update utils/scripts/dev.js Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> * fix: issues * fix: formatting * fix: issues --------- Co-authored-by: Ajit Kumar <dellevenjack@gmail> Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
1 parent 666fe8a commit b099d07

7 files changed

Lines changed: 619 additions & 14 deletions

File tree

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,5 @@ graphify-out/
1919
.gradle/
2020
local.properties
2121
tsconfig.tsbuildinfo
22+
.dev-cert.pem
23+
.dev-key.pem

package-lock.json

Lines changed: 31 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
"lang": "node ./utils/lang.js",
88
"build": "sh utils/scripts/build.sh",
99
"start": "sh utils/scripts/start.sh",
10+
"dev": "node utils/scripts/dev.js",
11+
"dev:android": "node utils/scripts/dev.js android",
1012
"clean": "sh utils/scripts/clean.sh android android",
1113
"plugin": "sh utils/scripts/plugin.sh",
1214
"setup": "node ./utils/setup.js",
@@ -74,6 +76,7 @@
7476
"@types/url-parse": "^1.4.11",
7577
"autoprefixer": "^10.5.0",
7678
"babel-loader": "^10.1.1",
79+
"chokidar": "^4.0.3",
7780
"com.foxdebug.acode.rk.auth": "file:src/plugins/auth",
7881
"com.foxdebug.acode.rk.customtabs": "file:src/plugins/custom-tabs",
7982
"com.foxdebug.acode.rk.exec.proot": "file:src/plugins/proot",
@@ -106,7 +109,8 @@
106109
"terminal": "^0.1.4",
107110
"ts-loader": "^9.5.7",
108111
"typescript": "^5.9.3",
109-
"vscode-languageserver-types": "^3.17.5"
112+
"vscode-languageserver-types": "^3.17.5",
113+
"ws": "^8.21.0"
110114
},
111115
"dependencies": {
112116
"@codemirror/autocomplete": "^6.20.2",

rspack.config.js

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,13 @@ const { rspack } = require('@rspack/core');
44
module.exports = (env, options) => {
55
const { mode = 'development' } = options;
66
const prod = mode === 'production';
7+
const isDev = process.env.DEV_MODE === 'true';
8+
const devHost = process.env.DEV_HOST || '';
9+
const devPort = process.env.DEV_PORT || '';
10+
const devProto = isDev ? (process.env.DEV_PROTO || '') : '';
11+
const devOrigin = isDev && devHost && devPort && devProto
12+
? ''.concat(devProto, '://', devHost, ':', devPort)
13+
: '';
714

815
const rules = [
916
// TypeScript/TSX files - Custom JSX loader + SWC
@@ -113,6 +120,7 @@ module.exports = (env, options) => {
113120
const main = {
114121
mode,
115122
entry: {
123+
boot: './src/boot.js',
116124
main: './src/main.js',
117125
console: './src/lib/console.js',
118126
searchInFilesWorker: './src/sidebarApps/searchInFiles/worker.js',
@@ -122,8 +130,8 @@ module.exports = (env, options) => {
122130
filename: '[name].js',
123131
chunkFilename: '[name].chunk.js',
124132
assetModuleFilename: '[name][ext]',
125-
publicPath: '/build/',
126-
clean: true,
133+
publicPath: devOrigin ? ''.concat(devOrigin, '/build/') : '/build/',
134+
clean: !isDev,
127135
},
128136
module: {
129137
rules,
@@ -144,6 +152,12 @@ module.exports = (env, options) => {
144152
roots: [],
145153
},
146154
plugins: [
155+
new rspack.DefinePlugin({
156+
__DEV_MODE__: JSON.stringify(isDev),
157+
__DEV_HOST__: JSON.stringify(devHost),
158+
__DEV_PORT__: JSON.stringify(devPort),
159+
__DEV_PROTO__: JSON.stringify(devProto),
160+
}),
147161
new rspack.CssExtractRspackPlugin({
148162
filename: '[name].css',
149163
}),

src/boot.js

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
// boot.js — Entry point loaded by index.html
2+
// Routes between development (HTTP dev server) and production (local assets).
3+
// main.js is never imported directly; it's loaded dynamically so the dev server
4+
// can serve a freshly compiled version on every reload.
5+
6+
(function boot() {
7+
"use strict";
8+
9+
var DEV_MODE = typeof __DEV_MODE__ !== "undefined" && __DEV_MODE__;
10+
var DEV_HOST = typeof __DEV_HOST__ !== "undefined" ? __DEV_HOST__ : "";
11+
var DEV_PORT = typeof __DEV_PORT__ !== "undefined" ? __DEV_PORT__ : "";
12+
var DEV_PROTO = typeof __DEV_PROTO__ !== "undefined" ? __DEV_PROTO__ : "";
13+
var DEV_ORIGIN =
14+
DEV_HOST && DEV_PORT && DEV_PROTO
15+
? DEV_PROTO.concat("://", DEV_HOST, ":", DEV_PORT)
16+
: "";
17+
18+
function loadScript(src) {
19+
var script = document.createElement("script");
20+
script.src = src;
21+
document.head.appendChild(script);
22+
}
23+
24+
function loadCSS(href) {
25+
var link = document.createElement("link");
26+
link.rel = "stylesheet";
27+
link.href = href;
28+
document.head.appendChild(link);
29+
}
30+
31+
if (DEV_MODE && DEV_ORIGIN) {
32+
// --- Development mode: load everything from the dev server ---
33+
loadCSS("".concat(DEV_ORIGIN, "/build/main.css"));
34+
loadScript("".concat(DEV_ORIGIN, "/build/main.js"));
35+
36+
// WebSocket reload channel
37+
(function connectWS() {
38+
var wsProto = DEV_PROTO === "https" ? "wss" : "ws";
39+
var ws;
40+
41+
try {
42+
ws = new WebSocket("".concat(wsProto, "://", DEV_HOST, ":", DEV_PORT));
43+
} catch (_e) {
44+
setTimeout(connectWS, 1000);
45+
return;
46+
}
47+
48+
ws.onmessage = function (e) {
49+
if (e.data === "reload") {
50+
window.location.reload();
51+
}
52+
};
53+
54+
ws.onclose = function () {
55+
setTimeout(connectWS, 1000);
56+
};
57+
58+
ws.onerror = function () {
59+
// Will trigger onclose and retry
60+
};
61+
})();
62+
} else {
63+
// --- Production / fallback: load local bundle ---
64+
loadCSS("./build/main.css");
65+
loadScript("./build/main.js");
66+
}
67+
})();

0 commit comments

Comments
 (0)