@joystick.js/cli-canary 0.0.0-canary.154 → 0.0.0-canary.156
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/dev/index.js +1 -28
- package/package.json +1 -1
- package/src/functions/start/index.js +0 -656
- package/src/lib/dev/index.js +1 -34
package/dist/lib/dev/index.js
CHANGED
|
@@ -195,10 +195,6 @@ const handleAddOrChangeFile = async (context = {}, path2 = "", options = {}) =>
|
|
|
195
195
|
);
|
|
196
196
|
return;
|
|
197
197
|
}
|
|
198
|
-
console.log("ADD/CHANGE FILE", {
|
|
199
|
-
context,
|
|
200
|
-
fileResultsHaveErrors
|
|
201
|
-
});
|
|
202
198
|
if (!fileResultsHaveErrors) {
|
|
203
199
|
process.initialBuildComplete = true;
|
|
204
200
|
if (context.isUIUpdate) {
|
|
@@ -209,7 +205,6 @@ const handleAddOrChangeFile = async (context = {}, path2 = "", options = {}) =>
|
|
|
209
205
|
}
|
|
210
206
|
}
|
|
211
207
|
} catch (exception) {
|
|
212
|
-
console.log(exception);
|
|
213
208
|
throw new Error(`[dev.handleAddOrChangeFile] ${exception.message}`);
|
|
214
209
|
}
|
|
215
210
|
};
|
|
@@ -217,9 +212,6 @@ const handleAddDirectory = (context = {}, path2 = "", options = {}) => {
|
|
|
217
212
|
try {
|
|
218
213
|
if (context.isAddDirectory) {
|
|
219
214
|
fs.mkdirSync(`./.joystick/build/${path2}`);
|
|
220
|
-
console.log("ADD DIR", {
|
|
221
|
-
context
|
|
222
|
-
});
|
|
223
215
|
if (context.isUIUpdate) {
|
|
224
216
|
handleNotifyHMRClients(context.isHTMLUpdate);
|
|
225
217
|
} else {
|
|
@@ -234,9 +226,6 @@ const handleCopyFile = (context = {}, path2 = "", options = {}) => {
|
|
|
234
226
|
try {
|
|
235
227
|
if (context.isFileToCopy && !context.isDirectory) {
|
|
236
228
|
fs.writeFileSync(`./.joystick/build/${path2}`, fs.readFileSync(path2));
|
|
237
|
-
console.log("COPY FILE", {
|
|
238
|
-
context
|
|
239
|
-
});
|
|
240
229
|
if (context.isUIUpdate) {
|
|
241
230
|
handleNotifyHMRClients(context.isHTMLUpdate);
|
|
242
231
|
} else {
|
|
@@ -251,9 +240,6 @@ const handleCopyDirectory = (context = {}, path2 = "", options = {}) => {
|
|
|
251
240
|
try {
|
|
252
241
|
if (context.isFileToCopy && context.isDirectory && !context.isExistingDirectoryInBuild) {
|
|
253
242
|
fs.mkdirSync(`./.joystick/build/${path2}`);
|
|
254
|
-
console.log("COPY DIR", {
|
|
255
|
-
context
|
|
256
|
-
});
|
|
257
243
|
if (context.isUIUpdate) {
|
|
258
244
|
handleNotifyHMRClients(context.isHTMLUpdate);
|
|
259
245
|
} else {
|
|
@@ -271,7 +257,6 @@ const handleRestartApplicationProcess = async (options = {}) => {
|
|
|
271
257
|
process.loader.text("Restarting app...");
|
|
272
258
|
}
|
|
273
259
|
process.serverProcess.kill();
|
|
274
|
-
console.log("GETTING TO HERE");
|
|
275
260
|
await handleStartAppServer(options);
|
|
276
261
|
return Promise.resolve();
|
|
277
262
|
}
|
|
@@ -291,12 +276,6 @@ const handleStartAppServer = async (options = {}) => {
|
|
|
291
276
|
port: options?.port,
|
|
292
277
|
sessionsBeforeHMRUpdate: options?.sessionsBeforeHMRUpdate
|
|
293
278
|
});
|
|
294
|
-
console.log({
|
|
295
|
-
nodeMajorVersion: options?.nodeMajorVersion,
|
|
296
|
-
port: options?.port,
|
|
297
|
-
sessionsBeforeHMRUpdate: options?.sessionsBeforeHMRUpdate,
|
|
298
|
-
serverProcess
|
|
299
|
-
});
|
|
300
279
|
if (serverProcess) {
|
|
301
280
|
processIds.push(serverProcess.pid);
|
|
302
281
|
process.serverProcess = serverProcess;
|
|
@@ -309,14 +288,8 @@ const handleStartAppServer = async (options = {}) => {
|
|
|
309
288
|
};
|
|
310
289
|
const handleNotifyHMRClients = async (indexHTMLChanged = false) => {
|
|
311
290
|
try {
|
|
312
|
-
console.log("CALLING HNHMRCLIENTS");
|
|
313
291
|
if (process.hmrProcess) {
|
|
314
|
-
const settings = await loadSettings(process.env.NODE_ENV);
|
|
315
|
-
console.log({
|
|
316
|
-
type: "RESTART_SERVER",
|
|
317
|
-
settings: settings.parsed,
|
|
318
|
-
indexHTMLChanged
|
|
319
|
-
});
|
|
292
|
+
const settings = await loadSettings({ environment: process.env.NODE_ENV });
|
|
320
293
|
process.hmrProcess.send(
|
|
321
294
|
JSON.stringify({
|
|
322
295
|
type: "RESTART_SERVER",
|
package/package.json
CHANGED
|
@@ -1,661 +1,5 @@
|
|
|
1
|
-
/* eslint-disable consistent-return */
|
|
2
|
-
|
|
3
|
-
//import child_process from "child_process";
|
|
4
|
-
//import path, { dirname } from "path";
|
|
5
|
-
//import { fileURLToPath } from "url";
|
|
6
|
-
//import ps from "ps-node";
|
|
7
|
-
//import { killPortProcess } from "kill-port-process";
|
|
8
|
-
//import fs from "fs";
|
|
9
|
-
//import chokidar from "chokidar";
|
|
10
|
-
//import Loader from "../../lib/loader.js";
|
|
11
|
-
//import getFilesToBuild from "./getFilesToBuild.js";
|
|
12
|
-
//import buildFiles from "./buildFiles.js";
|
|
13
|
-
//import filesToCopy from "./filesToCopy.js";
|
|
14
|
-
//import checkIfPortAvailable from "./checkIfPortAvailable.js";
|
|
15
|
-
//import getCodependenciesForFile from "./getCodependenciesForFile.js";
|
|
16
|
-
//import isValidJSONString from "../../lib/isValidJSONString.js";
|
|
17
|
-
//import startDatabaseProvider from "./databases/startProvider.js";
|
|
18
|
-
//import CLILog from "../../lib/CLILog.js";
|
|
19
|
-
//import removeDeletedDependenciesFromMap from "./removeDeletedDependenciesFromMap.js";
|
|
20
|
-
//import validateDatabasesFromSettings from "../../lib/validateDatabasesFromSettings.js";
|
|
21
|
-
//import wait from "../../lib/wait.js";
|
|
22
1
|
import dev from "../../lib/dev/index.js";
|
|
23
2
|
|
|
24
|
-
//const majorVersion = parseInt(
|
|
25
|
-
// process?.version?.split(".")[0]?.replace("v", ""),
|
|
26
|
-
// 10
|
|
27
|
-
//);
|
|
28
|
-
//
|
|
29
|
-
//const __filename = fileURLToPath(import.meta.url);
|
|
30
|
-
//const __dirname = dirname(__filename);
|
|
31
|
-
//
|
|
32
|
-
//const killProcess = (pid = 0) => {
|
|
33
|
-
// return new Promise((resolve) => {
|
|
34
|
-
// ps.kill(pid, () => {
|
|
35
|
-
// resolve();
|
|
36
|
-
// });
|
|
37
|
-
// });
|
|
38
|
-
//};
|
|
39
|
-
//
|
|
40
|
-
//const watchlist = [
|
|
41
|
-
// { path: "ui" },
|
|
42
|
-
// { path: "lib" },
|
|
43
|
-
// { path: "i18n" },
|
|
44
|
-
// { path: "api" },
|
|
45
|
-
// { path: "email" },
|
|
46
|
-
// { path: "fixtures" },
|
|
47
|
-
// { path: "routes" },
|
|
48
|
-
// { path: "index.client.js" },
|
|
49
|
-
// { path: "index.server.js" },
|
|
50
|
-
// ...filesToCopy,
|
|
51
|
-
//];
|
|
52
|
-
//
|
|
53
|
-
//const requiredFileCheck = () => {
|
|
54
|
-
// return new Promise((resolve) => {
|
|
55
|
-
// const requiredFiles = [
|
|
56
|
-
// { path: "index.server.js", type: "file" },
|
|
57
|
-
// { path: "index.html", type: "file" },
|
|
58
|
-
// { path: "index.client.js", type: "file" },
|
|
59
|
-
// { path: "api", type: "directory" },
|
|
60
|
-
// { path: "i18n", type: "directory" },
|
|
61
|
-
// { path: "lib", type: "directory" },
|
|
62
|
-
// { path: "public", type: "directory" },
|
|
63
|
-
// { path: "ui", type: "directory" },
|
|
64
|
-
// { path: "ui/components", type: "directory" },
|
|
65
|
-
// { path: "ui/layouts", type: "directory" },
|
|
66
|
-
// { path: "ui/pages", type: "directory" },
|
|
67
|
-
// ];
|
|
68
|
-
//
|
|
69
|
-
// requiredFiles.forEach((requiredFile) => {
|
|
70
|
-
// const exists = fs.existsSync(`${process.cwd()}/${requiredFile.path}`);
|
|
71
|
-
// const stats =
|
|
72
|
-
// exists && fs.statSync(`${process.cwd()}/${requiredFile.path}`);
|
|
73
|
-
// const isFile = stats && stats.isFile();
|
|
74
|
-
// const isDirectory = stats && stats.isDirectory();
|
|
75
|
-
//
|
|
76
|
-
// if (requiredFile && requiredFile.type === "file") {
|
|
77
|
-
// if (!exists || (exists && !isFile)) {
|
|
78
|
-
// CLILog(
|
|
79
|
-
// `The path ${requiredFile.path} must exist in your project and must be a file (not a directory).`,
|
|
80
|
-
// {
|
|
81
|
-
// level: "danger",
|
|
82
|
-
// docs: "https://github.com/cheatcode/joystick#folder-and-file-structure",
|
|
83
|
-
// }
|
|
84
|
-
// );
|
|
85
|
-
// process.exit(0);
|
|
86
|
-
// }
|
|
87
|
-
// }
|
|
88
|
-
//
|
|
89
|
-
// if (requiredFile && requiredFile.type === "directory") {
|
|
90
|
-
// if (!exists || (exists && !isDirectory)) {
|
|
91
|
-
// CLILog(
|
|
92
|
-
// `The path ${requiredFile.path} must exist in your project and must be a directory (not a file).`,
|
|
93
|
-
// {
|
|
94
|
-
// level: "danger",
|
|
95
|
-
// docs: "https://github.com/cheatcode/joystick#folder-and-file-structure",
|
|
96
|
-
// }
|
|
97
|
-
// );
|
|
98
|
-
// process.exit(0);
|
|
99
|
-
// }
|
|
100
|
-
// }
|
|
101
|
-
// });
|
|
102
|
-
//
|
|
103
|
-
// resolve();
|
|
104
|
-
// });
|
|
105
|
-
//};
|
|
106
|
-
//
|
|
107
|
-
//const handleCleanup = async (
|
|
108
|
-
// processIds = [process?.serverProcess?.pid, process?.hmrProcess?.pid]
|
|
109
|
-
//) => {
|
|
110
|
-
// for (let i = 0; i < processIds?.length; i += 1) {
|
|
111
|
-
// const processId = processIds[i];
|
|
112
|
-
//
|
|
113
|
-
// if (processId) {
|
|
114
|
-
// await killProcess(processId);
|
|
115
|
-
// }
|
|
116
|
-
// }
|
|
117
|
-
//
|
|
118
|
-
// const databases = Object.entries(process._databases || {});
|
|
119
|
-
//
|
|
120
|
-
// for (let i = 0; i < databases?.length; i += 1) {
|
|
121
|
-
// const [provider, providerConnection] = databases[i];
|
|
122
|
-
//
|
|
123
|
-
// if (providerConnection?.pid) {
|
|
124
|
-
// await killProcess(providerConnection.pid);
|
|
125
|
-
// }
|
|
126
|
-
//
|
|
127
|
-
// if (!providerConnection?.pid) {
|
|
128
|
-
// const providerConnections = Object.entries(providerConnection);
|
|
129
|
-
//
|
|
130
|
-
// for (let pc = 0; pc < providerConnections?.length; pc += 1) {
|
|
131
|
-
// const [_connectionName, connection] = providerConnections[pc];
|
|
132
|
-
//
|
|
133
|
-
// if (connection?.pid) {
|
|
134
|
-
// await killProcess(connection?.pid);
|
|
135
|
-
// }
|
|
136
|
-
// }
|
|
137
|
-
// }
|
|
138
|
-
// }
|
|
139
|
-
//};
|
|
140
|
-
//
|
|
141
|
-
//const getDatabaseProcessIds = () => {
|
|
142
|
-
// const databaseProcessIds = [];
|
|
143
|
-
// const databases = Object.entries(process._databases || {});
|
|
144
|
-
//
|
|
145
|
-
// for (let i = 0; i < databases?.length; i += 1) {
|
|
146
|
-
// const [_provider, providerConnection] = databases[i];
|
|
147
|
-
//
|
|
148
|
-
// if (providerConnection?.pid) {
|
|
149
|
-
// databaseProcessIds.push(providerConnection.pid);
|
|
150
|
-
// }
|
|
151
|
-
//
|
|
152
|
-
// if (!providerConnection?.pid) {
|
|
153
|
-
// const providerConnections = Object.entries(providerConnection);
|
|
154
|
-
//
|
|
155
|
-
// for (let pc = 0; pc < providerConnections?.length; pc += 1) {
|
|
156
|
-
// const [_connectionName, connection] = providerConnections[pc];
|
|
157
|
-
//
|
|
158
|
-
// if (connection?.pid) {
|
|
159
|
-
// databaseProcessIds.push(connection.pid);
|
|
160
|
-
// }
|
|
161
|
-
// }
|
|
162
|
-
// }
|
|
163
|
-
// }
|
|
164
|
-
//
|
|
165
|
-
// return databaseProcessIds;
|
|
166
|
-
//};
|
|
167
|
-
//
|
|
168
|
-
//const handleSignalEvents = (processIds = []) => {
|
|
169
|
-
// const execArgv = ["--no-warnings"];
|
|
170
|
-
//
|
|
171
|
-
// if (majorVersion < 19) {
|
|
172
|
-
// execArgv.push("--experimental-specifier-resolution=node");
|
|
173
|
-
// }
|
|
174
|
-
//
|
|
175
|
-
// const cleanupProcess = child_process.fork(
|
|
176
|
-
// path.resolve(`${__dirname}/cleanup/index.js`),
|
|
177
|
-
// [],
|
|
178
|
-
// {
|
|
179
|
-
// // NOTE: Run in detached mode so when parent process dies, the child still runs
|
|
180
|
-
// // and cleanup completes.
|
|
181
|
-
// detached: true,
|
|
182
|
-
// execArgv,
|
|
183
|
-
// // NOTE: Pipe stdin, stdout, and stderr. IPC establishes a message channel so we
|
|
184
|
-
// // communicate with the child_process.
|
|
185
|
-
// silent: true,
|
|
186
|
-
// }
|
|
187
|
-
// );
|
|
188
|
-
//
|
|
189
|
-
// process.on("SIGINT", async () => {
|
|
190
|
-
// const databaseProcessIds = getDatabaseProcessIds();
|
|
191
|
-
// cleanupProcess.send(JSON.stringify(({ processIds: [...processIds, ...databaseProcessIds] })));
|
|
192
|
-
// process.exit();
|
|
193
|
-
// });
|
|
194
|
-
//
|
|
195
|
-
// process.on("SIGTERM", async () => {
|
|
196
|
-
// const databaseProcessIds = getDatabaseProcessIds();
|
|
197
|
-
// cleanupProcess.send(JSON.stringify(({ processIds: [...processIds, ...databaseProcessIds] })));
|
|
198
|
-
// process.exit();
|
|
199
|
-
// });
|
|
200
|
-
//};
|
|
201
|
-
//
|
|
202
|
-
//const handleHMRProcessMessages = () => {
|
|
203
|
-
// process.hmrProcess.on("message", (message) => {
|
|
204
|
-
// const processMessages = [
|
|
205
|
-
// "SERVER_CLOSED",
|
|
206
|
-
// "HAS_HMR_CONNECTIONS",
|
|
207
|
-
// "HAS_NO_HMR_CONNECTIONS",
|
|
208
|
-
// "HMR_UPDATE_COMPLETED",
|
|
209
|
-
// ];
|
|
210
|
-
//
|
|
211
|
-
// if (!processMessages.includes(message?.type)) {
|
|
212
|
-
// process.loader.stable(message);
|
|
213
|
-
// }
|
|
214
|
-
//
|
|
215
|
-
// if (message?.type === "HAS_HMR_CONNECTIONS") {
|
|
216
|
-
// process.hmrProcess.hasConnections = true;
|
|
217
|
-
// }
|
|
218
|
-
//
|
|
219
|
-
// if (message?.type === "HAS_NO_HMR_CONNECTIONS") {
|
|
220
|
-
// process.hmrProcess.hasConnections = false;
|
|
221
|
-
// }
|
|
222
|
-
//
|
|
223
|
-
// if (message?.type === "HMR_UPDATE_COMPLETED") {
|
|
224
|
-
// // NOTE: Do a setTimeout to ensure that server is still available while the HMR update completes.
|
|
225
|
-
// // Necessary because some updates are instance, but others might mount a UI that needs a server
|
|
226
|
-
// // available (e.g., runs API requests).
|
|
227
|
-
// setTimeout(() => {
|
|
228
|
-
// restartApplicationProcess(message?.sessions);
|
|
229
|
-
// }, 500);
|
|
230
|
-
// }
|
|
231
|
-
// });
|
|
232
|
-
//};
|
|
233
|
-
//
|
|
234
|
-
//const handleHMRProcessSTDIO = () => {
|
|
235
|
-
// try {
|
|
236
|
-
// if (process.hmrProcess) {
|
|
237
|
-
// process.hmrProcess.on("error", (error) => {
|
|
238
|
-
// CLILog(error.toString(), {
|
|
239
|
-
// level: "danger",
|
|
240
|
-
// docs: "https://github.com/cheatcode/joystick",
|
|
241
|
-
// });
|
|
242
|
-
// });
|
|
243
|
-
//
|
|
244
|
-
// process.hmrProcess.stdout.on("data", (data) => {
|
|
245
|
-
// console.log(data.toString());
|
|
246
|
-
// });
|
|
247
|
-
//
|
|
248
|
-
// process.hmrProcess.stderr.on("data", (data) => {
|
|
249
|
-
// process.loader.stop();
|
|
250
|
-
// CLILog(data.toString(), {
|
|
251
|
-
// level: "danger",
|
|
252
|
-
// docs: "https://github.com/cheatcode/joystick",
|
|
253
|
-
// });
|
|
254
|
-
// });
|
|
255
|
-
// }
|
|
256
|
-
// } catch (exception) {
|
|
257
|
-
// throw new Error(`[dev.handleHMRProcessSTDIO] ${exception.message}`);
|
|
258
|
-
// }
|
|
259
|
-
//};
|
|
260
|
-
//
|
|
261
|
-
//const startHMRProcess = () => {
|
|
262
|
-
// const execArgv = ["--no-warnings"];
|
|
263
|
-
//
|
|
264
|
-
// if (majorVersion < 19) {
|
|
265
|
-
// execArgv.push("--experimental-specifier-resolution=node");
|
|
266
|
-
// }
|
|
267
|
-
//
|
|
268
|
-
// const hmrProcess = child_process.fork(
|
|
269
|
-
// path.resolve(`${__dirname}/hmrServer.js`),
|
|
270
|
-
// [],
|
|
271
|
-
// {
|
|
272
|
-
// execArgv,
|
|
273
|
-
// // NOTE: Pipe stdin, stdout, and stderr. IPC establishes a message channel so we
|
|
274
|
-
// // communicate with the child_process.
|
|
275
|
-
// silent: true,
|
|
276
|
-
// }
|
|
277
|
-
// );
|
|
278
|
-
//
|
|
279
|
-
// process.hmrProcess = hmrProcess;
|
|
280
|
-
//
|
|
281
|
-
// handleHMRProcessSTDIO();
|
|
282
|
-
// handleHMRProcessMessages();
|
|
283
|
-
//};
|
|
284
|
-
//
|
|
285
|
-
//const notifyHMRClients = (indexHTMLChanged = false) => {
|
|
286
|
-
// const settings = loadSettings(process.env.NODE_ENV);
|
|
287
|
-
// process.hmrProcess.send(
|
|
288
|
-
// JSON.stringify({
|
|
289
|
-
// type: "RESTART_SERVER",
|
|
290
|
-
// settings,
|
|
291
|
-
// indexHTMLChanged,
|
|
292
|
-
// })
|
|
293
|
-
// );
|
|
294
|
-
//};
|
|
295
|
-
//
|
|
296
|
-
//const handleServerProcessMessages = () => {
|
|
297
|
-
// process.serverProcess.on("message", (message) => {
|
|
298
|
-
// const processMessages = ["SERVER_CLOSED"];
|
|
299
|
-
//
|
|
300
|
-
// if (!processMessages.includes(message)) {
|
|
301
|
-
// process.loader.stable(message);
|
|
302
|
-
// }
|
|
303
|
-
// });
|
|
304
|
-
//};
|
|
305
|
-
//
|
|
306
|
-
//const handleServerProcessSTDIO = () => {
|
|
307
|
-
// try {
|
|
308
|
-
// if (process.serverProcess) {
|
|
309
|
-
// process.serverProcess.on("error", (error) => {
|
|
310
|
-
// console.log(error);
|
|
311
|
-
// });
|
|
312
|
-
//
|
|
313
|
-
// process.serverProcess.stdout.on("data", (data) => {
|
|
314
|
-
// const message = data.toString();
|
|
315
|
-
//
|
|
316
|
-
// if (message && message.includes("App running at:")) {
|
|
317
|
-
// process.loader.stable(message);
|
|
318
|
-
// } else {
|
|
319
|
-
// if (message && !message.includes("BUILD_ERROR")) {
|
|
320
|
-
// console.log(message);
|
|
321
|
-
// }
|
|
322
|
-
// }
|
|
323
|
-
// });
|
|
324
|
-
//
|
|
325
|
-
// process.serverProcess.stderr.on("data", (data) => {
|
|
326
|
-
// process.loader.stop();
|
|
327
|
-
// CLILog(data.toString(), {
|
|
328
|
-
// level: "danger",
|
|
329
|
-
// docs: "https://github.com/cheatcode/joystick",
|
|
330
|
-
// });
|
|
331
|
-
// });
|
|
332
|
-
// }
|
|
333
|
-
// } catch (exception) {
|
|
334
|
-
// throw new Error(`[dev.handleServerProcessSTDIO] ${exception.message}`);
|
|
335
|
-
// }
|
|
336
|
-
//};
|
|
337
|
-
//
|
|
338
|
-
//const startApplicationProcess = (sessionsBeforeHMRUpdate = null) => {
|
|
339
|
-
// const execArgv = ["--no-warnings"];
|
|
340
|
-
//
|
|
341
|
-
// if (majorVersion < 19) {
|
|
342
|
-
// execArgv.push("--experimental-specifier-resolution=node");
|
|
343
|
-
// }
|
|
344
|
-
//
|
|
345
|
-
// if (
|
|
346
|
-
// process.env.NODE_ENV === "development" &&
|
|
347
|
-
// process.env.IS_DEBUG_MODE === "true"
|
|
348
|
-
// ) {
|
|
349
|
-
// execArgv.push("--inspect");
|
|
350
|
-
// }
|
|
351
|
-
//
|
|
352
|
-
// const serverProcess = child_process.fork(
|
|
353
|
-
// path.resolve(".joystick/build/index.server.js"),
|
|
354
|
-
// [],
|
|
355
|
-
// {
|
|
356
|
-
// execArgv,
|
|
357
|
-
// // NOTE: Pipe stdin, stdout, and stderr. IPC establishes a message channel so we
|
|
358
|
-
// // communicate with the child_process.
|
|
359
|
-
// silent: true,
|
|
360
|
-
// env: {
|
|
361
|
-
// FORCE_COLOR: "1",
|
|
362
|
-
// LOGS_PATH: process.env.LOGS_PATH,
|
|
363
|
-
// NODE_ENV: process.env.NODE_ENV,
|
|
364
|
-
// ROOT_URL: process.env.ROOT_URL,
|
|
365
|
-
// PORT: process.env.PORT,
|
|
366
|
-
// JOYSTICK_SETTINGS: process.env.JOYSTICK_SETTINGS,
|
|
367
|
-
// HMR_SESSIONS: sessionsBeforeHMRUpdate,
|
|
368
|
-
// },
|
|
369
|
-
// }
|
|
370
|
-
// );
|
|
371
|
-
//
|
|
372
|
-
// process.serverProcess = serverProcess;
|
|
373
|
-
//
|
|
374
|
-
// handleServerProcessSTDIO();
|
|
375
|
-
// handleServerProcessMessages();
|
|
376
|
-
//
|
|
377
|
-
// return serverProcess;
|
|
378
|
-
//};
|
|
379
|
-
//
|
|
380
|
-
//const restartApplicationProcess = async (sessionsBeforeHMRUpdate = null) => {
|
|
381
|
-
// if (process.serverProcess && process.serverProcess.pid) {
|
|
382
|
-
// process.loader.text("Restarting app...");
|
|
383
|
-
// process.serverProcess.kill();
|
|
384
|
-
// startApplicationProcess(sessionsBeforeHMRUpdate);
|
|
385
|
-
// return Promise.resolve();
|
|
386
|
-
// }
|
|
387
|
-
//
|
|
388
|
-
// // NOTE: Original process was never initialized due to an error.
|
|
389
|
-
// process.loader.text("Starting app...");
|
|
390
|
-
// startApplicationProcess();
|
|
391
|
-
//
|
|
392
|
-
// if (!process.hmrProcess) {
|
|
393
|
-
// startHMRProcess();
|
|
394
|
-
// }
|
|
395
|
-
//};
|
|
396
|
-
//
|
|
397
|
-
//const initialBuild = async (buildSettings = {}) => {
|
|
398
|
-
// const buildPath = `.joystick/build`;
|
|
399
|
-
// const fileMapPath = `.joystick/build/fileMap.json`;
|
|
400
|
-
//
|
|
401
|
-
// if (!fs.existsSync(buildPath)) {
|
|
402
|
-
// fs.mkdirSync(".joystick/build");
|
|
403
|
-
// }
|
|
404
|
-
//
|
|
405
|
-
// if (fs.existsSync(fileMapPath)) {
|
|
406
|
-
// fs.unlinkSync(fileMapPath);
|
|
407
|
-
// }
|
|
408
|
-
//
|
|
409
|
-
// process.loader.text("Building app...");
|
|
410
|
-
//
|
|
411
|
-
// await requiredFileCheck();
|
|
412
|
-
//
|
|
413
|
-
// const filesToBuild = getFilesToBuild(buildSettings?.excludedPaths, "start");
|
|
414
|
-
// const fileResults = await buildFiles(
|
|
415
|
-
// filesToBuild,
|
|
416
|
-
// null,
|
|
417
|
-
// process.env.NODE_ENV
|
|
418
|
-
// );
|
|
419
|
-
//
|
|
420
|
-
// const hasErrors = [...fileResults]
|
|
421
|
-
// .filter((result) => !!result)
|
|
422
|
-
// .map(({ success }) => success)
|
|
423
|
-
// .includes(false);
|
|
424
|
-
//
|
|
425
|
-
// if (!hasErrors) {
|
|
426
|
-
// startApplicationProcess();
|
|
427
|
-
// startHMRProcess();
|
|
428
|
-
// // If the file has errors on startup, no way to trigger a restart w/o a watcher.
|
|
429
|
-
// }
|
|
430
|
-
//};
|
|
431
|
-
//
|
|
432
|
-
//const startWatcher = async (buildSettings = {}) => {
|
|
433
|
-
// await initialBuild(buildSettings);
|
|
434
|
-
//
|
|
435
|
-
// const watcher = chokidar.watch(
|
|
436
|
-
// watchlist.map(({ path }) => path),
|
|
437
|
-
// {
|
|
438
|
-
// ignoreInitial: true,
|
|
439
|
-
// }
|
|
440
|
-
// );
|
|
441
|
-
//
|
|
442
|
-
// watcher.on("all", async (event, path) => {
|
|
443
|
-
// await requiredFileCheck();
|
|
444
|
-
// process.loader.text("Rebuilding app...");
|
|
445
|
-
// const isHTMLUpdate = path === "index.html";
|
|
446
|
-
// const isUIPath = path?.includes("ui/") || path === 'index.css' || isHTMLUpdate;
|
|
447
|
-
// const isUIUpdate =
|
|
448
|
-
// (process.hmrProcess.hasConnections && isUIPath) || false;
|
|
449
|
-
//
|
|
450
|
-
// if (
|
|
451
|
-
// ["addDir"].includes(event) &&
|
|
452
|
-
// fs.existsSync(path) &&
|
|
453
|
-
// fs.lstatSync(path).isDirectory() &&
|
|
454
|
-
// !fs.existsSync(`./.joystick/build/${path}`)
|
|
455
|
-
// ) {
|
|
456
|
-
// fs.mkdirSync(`./.joystick/build/${path}`);
|
|
457
|
-
//
|
|
458
|
-
// if (isUIUpdate) {
|
|
459
|
-
// notifyHMRClients(isHTMLUpdate);
|
|
460
|
-
// } else {
|
|
461
|
-
// restartApplicationProcess();
|
|
462
|
-
// }
|
|
463
|
-
//
|
|
464
|
-
// return;
|
|
465
|
-
// }
|
|
466
|
-
//
|
|
467
|
-
// // If path is file to copy...
|
|
468
|
-
// if (!!filesToCopy.find((fileToCopy) => fileToCopy.path === path)) {
|
|
469
|
-
// const isDirectory = fs.statSync(path).isDirectory();
|
|
470
|
-
//
|
|
471
|
-
// // If path to copy is a directory and doesn't exist in the build...
|
|
472
|
-
// if (isDirectory && !fs.existsSync(`./.joystick/build/${path}`)) {
|
|
473
|
-
// fs.mkdirSync(`./.joystick/build/${path}`);
|
|
474
|
-
// }
|
|
475
|
-
//
|
|
476
|
-
// // If path to copy is not a directory...
|
|
477
|
-
// if (!isDirectory) {
|
|
478
|
-
// fs.writeFileSync(`./.joystick/build/${path}`, fs.readFileSync(path));
|
|
479
|
-
// }
|
|
480
|
-
//
|
|
481
|
-
// // Load settings in case we copied new values over...
|
|
482
|
-
// loadSettings(process.env.NODE_ENV);
|
|
483
|
-
//
|
|
484
|
-
// if (isUIUpdate) {
|
|
485
|
-
// notifyHMRClients(isHTMLUpdate);
|
|
486
|
-
// } else {
|
|
487
|
-
// restartApplicationProcess();
|
|
488
|
-
// }
|
|
489
|
-
//
|
|
490
|
-
// return;
|
|
491
|
-
// }
|
|
492
|
-
//
|
|
493
|
-
// if (["add", "change"].includes(event) && fs.existsSync(path)) {
|
|
494
|
-
// const codependencies = getCodependenciesForFile(path);
|
|
495
|
-
// const fileResults = await buildFiles(
|
|
496
|
-
// [path, ...(codependencies?.existing || [])],
|
|
497
|
-
// null,
|
|
498
|
-
// process.env.NODE_ENV
|
|
499
|
-
// );
|
|
500
|
-
// const fileResultsHaveErrors = fileResults
|
|
501
|
-
// .filter((result) => !!result)
|
|
502
|
-
// .map(({ success }) => success)
|
|
503
|
-
// .includes(false);
|
|
504
|
-
//
|
|
505
|
-
// removeDeletedDependenciesFromMap(codependencies.deleted);
|
|
506
|
-
//
|
|
507
|
-
// const hasErrors = fileResultsHaveErrors;
|
|
508
|
-
//
|
|
509
|
-
// if (process.serverProcess && hasErrors) {
|
|
510
|
-
// process.serverProcess.send(
|
|
511
|
-
// JSON.stringify({
|
|
512
|
-
// error: "BUILD_ERROR",
|
|
513
|
-
// paths: fileResults
|
|
514
|
-
// .filter(({ success }) => !success)
|
|
515
|
-
// .map(({ path: pathWithError, error }) => ({
|
|
516
|
-
// path: pathWithError,
|
|
517
|
-
// error,
|
|
518
|
-
// })),
|
|
519
|
-
// })
|
|
520
|
-
// );
|
|
521
|
-
//
|
|
522
|
-
// return;
|
|
523
|
-
// }
|
|
524
|
-
//
|
|
525
|
-
// if (!hasErrors) {
|
|
526
|
-
// process.initialBuildComplete = true;
|
|
527
|
-
//
|
|
528
|
-
// if (isUIUpdate) {
|
|
529
|
-
// notifyHMRClients(isHTMLUpdate);
|
|
530
|
-
// } else {
|
|
531
|
-
// restartApplicationProcess();
|
|
532
|
-
// }
|
|
533
|
-
//
|
|
534
|
-
// return;
|
|
535
|
-
// }
|
|
536
|
-
// }
|
|
537
|
-
//
|
|
538
|
-
// if (
|
|
539
|
-
// ["unlink", "unlinkDir"].includes(event) &&
|
|
540
|
-
// !fs.existsSync(`./.joystick/build/${path}`)
|
|
541
|
-
// ) {
|
|
542
|
-
// if (isUIUpdate) {
|
|
543
|
-
// notifyHMRClients(isHTMLUpdate);
|
|
544
|
-
// } else {
|
|
545
|
-
// restartApplicationProcess();
|
|
546
|
-
// }
|
|
547
|
-
//
|
|
548
|
-
// return;
|
|
549
|
-
// }
|
|
550
|
-
//
|
|
551
|
-
// if (
|
|
552
|
-
// ["unlink", "unlinkDir"].includes(event) &&
|
|
553
|
-
// fs.existsSync(`./.joystick/build/${path}`)
|
|
554
|
-
// ) {
|
|
555
|
-
// const pathToUnlink = `./.joystick/build/${path}`;
|
|
556
|
-
// const stats = fs.lstatSync(pathToUnlink);
|
|
557
|
-
//
|
|
558
|
-
// if (stats.isDirectory()) {
|
|
559
|
-
// fs.rmdirSync(pathToUnlink, { recursive: true });
|
|
560
|
-
// }
|
|
561
|
-
//
|
|
562
|
-
// if (stats.isFile()) {
|
|
563
|
-
// fs.unlinkSync(pathToUnlink);
|
|
564
|
-
// }
|
|
565
|
-
//
|
|
566
|
-
// if (isUIUpdate) {
|
|
567
|
-
// notifyHMRClients(isHTMLUpdate);
|
|
568
|
-
// } else {
|
|
569
|
-
// restartApplicationProcess();
|
|
570
|
-
// }
|
|
571
|
-
//
|
|
572
|
-
// return;
|
|
573
|
-
// }
|
|
574
|
-
// });
|
|
575
|
-
//};
|
|
576
|
-
//
|
|
577
|
-
//const startDatabase = async (database = {}, databasePort = 2610, hasMultipleOfProvider = false) => {
|
|
578
|
-
// process._databases = {
|
|
579
|
-
// ...(process._databases || {}),
|
|
580
|
-
// [database.provider]: !hasMultipleOfProvider ? await startDatabaseProvider(database, databasePort) : {
|
|
581
|
-
// ...((process._databases && process._databases[database.provider]) || {}),
|
|
582
|
-
// [database?.name || `${database.provider}_${databasePort}`]: await startDatabaseProvider(database, databasePort)
|
|
583
|
-
// },
|
|
584
|
-
// };
|
|
585
|
-
//
|
|
586
|
-
// return Promise.resolve(process._databases);
|
|
587
|
-
//};
|
|
588
|
-
//
|
|
589
|
-
//const startDatabases = async (databasePortStart = 2610) => {
|
|
590
|
-
// try {
|
|
591
|
-
// const hasSettings = !!process.env.JOYSTICK_SETTINGS;
|
|
592
|
-
// const settings = hasSettings && JSON.parse(process.env.JOYSTICK_SETTINGS);
|
|
593
|
-
// const databases = settings?.config?.databases || [];
|
|
594
|
-
//
|
|
595
|
-
// if (databases && Array.isArray(databases) && databases.length > 0) {
|
|
596
|
-
// validateDatabasesFromSettings(databases);
|
|
597
|
-
//
|
|
598
|
-
// for (let i = 0; i < databases?.length; i += 1) {
|
|
599
|
-
// const database = databases[i];
|
|
600
|
-
// const hasMultipleOfProvider = (databases?.filter((database) => database?.provider === database?.provider))?.length > 1;
|
|
601
|
-
//
|
|
602
|
-
// // NOTE: Increment each database port using index in the databases array from settings.
|
|
603
|
-
// await startDatabase(database, databasePortStart + i, hasMultipleOfProvider);
|
|
604
|
-
// }
|
|
605
|
-
//
|
|
606
|
-
// return Promise.resolve();
|
|
607
|
-
// }
|
|
608
|
-
//
|
|
609
|
-
// return Promise.resolve();
|
|
610
|
-
// } catch (exception) {
|
|
611
|
-
// console.warn(exception);
|
|
612
|
-
// }
|
|
613
|
-
//};
|
|
614
|
-
//
|
|
615
|
-
//const loadSettings = () => {
|
|
616
|
-
// const environment = process.env.NODE_ENV;
|
|
617
|
-
// const settingsFilePath = `${process.cwd()}/settings.${environment}.json`;
|
|
618
|
-
// const hasSettingsFile = fs.existsSync(settingsFilePath);
|
|
619
|
-
//
|
|
620
|
-
// if (!hasSettingsFile) {
|
|
621
|
-
// CLILog(
|
|
622
|
-
// `A settings file could not be found for this environment (${environment}). Create a settings.${environment}.json file at the root of your project and restart Joystick.`,
|
|
623
|
-
// {
|
|
624
|
-
// level: "danger",
|
|
625
|
-
// docs: "https://github.com/cheatcode/joystick#settings",
|
|
626
|
-
// }
|
|
627
|
-
// );
|
|
628
|
-
// process.exit(0);
|
|
629
|
-
// }
|
|
630
|
-
//
|
|
631
|
-
// const rawSettingsFile = fs.readFileSync(settingsFilePath, "utf-8");
|
|
632
|
-
// const isValidJSON = isValidJSONString(rawSettingsFile);
|
|
633
|
-
//
|
|
634
|
-
// if (!isValidJSON) {
|
|
635
|
-
// CLILog(
|
|
636
|
-
// `Failed to parse settings file. Double-check the syntax in your settings.${environment}.json file at the root of your project and restart Joystick.`,
|
|
637
|
-
// {
|
|
638
|
-
// level: "danger",
|
|
639
|
-
// docs: "https://github.com/cheatcode/joystick#settings",
|
|
640
|
-
// tools: [{ title: "JSON Linter", url: "https://jsonlint.com/" }],
|
|
641
|
-
// }
|
|
642
|
-
// );
|
|
643
|
-
//
|
|
644
|
-
// process.exit(0);
|
|
645
|
-
// }
|
|
646
|
-
//
|
|
647
|
-
// const settingsFile = isValidJSON ? rawSettingsFile : "{}";
|
|
648
|
-
//
|
|
649
|
-
// // NOTE: Child process will inherit this env var from this parent process.
|
|
650
|
-
// process.env.JOYSTICK_SETTINGS = settingsFile;
|
|
651
|
-
//
|
|
652
|
-
// return JSON.parse(settingsFile);
|
|
653
|
-
//};
|
|
654
|
-
//
|
|
655
|
-
//const checkIfJoystickProject = () => {
|
|
656
|
-
// return fs.existsSync(`${process.cwd()}/.joystick`);
|
|
657
|
-
//};
|
|
658
|
-
|
|
659
3
|
export default async (args = {}, options = {}) => {
|
|
660
4
|
await dev({
|
|
661
5
|
environment: args?.environment || 'development',
|
package/src/lib/dev/index.js
CHANGED
|
@@ -242,11 +242,6 @@ const handleAddOrChangeFile = async (context = {}, path = '', options = {}) => {
|
|
|
242
242
|
return;
|
|
243
243
|
}
|
|
244
244
|
|
|
245
|
-
console.log('ADD/CHANGE FILE', {
|
|
246
|
-
context,
|
|
247
|
-
fileResultsHaveErrors,
|
|
248
|
-
});
|
|
249
|
-
|
|
250
245
|
if (!fileResultsHaveErrors) {
|
|
251
246
|
process.initialBuildComplete = true;
|
|
252
247
|
|
|
@@ -258,7 +253,6 @@ const handleAddOrChangeFile = async (context = {}, path = '', options = {}) => {
|
|
|
258
253
|
}
|
|
259
254
|
}
|
|
260
255
|
} catch (exception) {
|
|
261
|
-
console.log(exception);
|
|
262
256
|
throw new Error(`[dev.handleAddOrChangeFile] ${exception.message}`);
|
|
263
257
|
}
|
|
264
258
|
};
|
|
@@ -268,10 +262,6 @@ const handleAddDirectory = (context = {}, path = '', options = {}) => {
|
|
|
268
262
|
if (context.isAddDirectory) {
|
|
269
263
|
fs.mkdirSync(`./.joystick/build/${path}`);
|
|
270
264
|
|
|
271
|
-
console.log('ADD DIR', {
|
|
272
|
-
context,
|
|
273
|
-
});
|
|
274
|
-
|
|
275
265
|
if (context.isUIUpdate) {
|
|
276
266
|
handleNotifyHMRClients(context.isHTMLUpdate);
|
|
277
267
|
} else {
|
|
@@ -288,10 +278,6 @@ const handleCopyFile = (context = {}, path = '', options = {}) => {
|
|
|
288
278
|
if (context.isFileToCopy && !context.isDirectory) {
|
|
289
279
|
fs.writeFileSync(`./.joystick/build/${path}`, fs.readFileSync(path));
|
|
290
280
|
|
|
291
|
-
console.log('COPY FILE', {
|
|
292
|
-
context,
|
|
293
|
-
});
|
|
294
|
-
|
|
295
281
|
if (context.isUIUpdate) {
|
|
296
282
|
handleNotifyHMRClients(context.isHTMLUpdate);
|
|
297
283
|
} else {
|
|
@@ -308,10 +294,6 @@ const handleCopyDirectory = (context = {}, path = '', options = {}) => {
|
|
|
308
294
|
if (context.isFileToCopy && context.isDirectory && !context.isExistingDirectoryInBuild) {
|
|
309
295
|
fs.mkdirSync(`./.joystick/build/${path}`);
|
|
310
296
|
|
|
311
|
-
console.log('COPY DIR', {
|
|
312
|
-
context,
|
|
313
|
-
});
|
|
314
|
-
|
|
315
297
|
if (context.isUIUpdate) {
|
|
316
298
|
handleNotifyHMRClients(context.isHTMLUpdate);
|
|
317
299
|
} else {
|
|
@@ -332,7 +314,6 @@ const handleRestartApplicationProcess = async (options = {}) => {
|
|
|
332
314
|
|
|
333
315
|
process.serverProcess.kill();
|
|
334
316
|
|
|
335
|
-
console.log('GETTING TO HERE');
|
|
336
317
|
await handleStartAppServer(options);
|
|
337
318
|
|
|
338
319
|
return Promise.resolve();
|
|
@@ -358,13 +339,6 @@ const handleStartAppServer = async (options = {}) => {
|
|
|
358
339
|
sessionsBeforeHMRUpdate: options?.sessionsBeforeHMRUpdate,
|
|
359
340
|
});
|
|
360
341
|
|
|
361
|
-
console.log({
|
|
362
|
-
nodeMajorVersion: options?.nodeMajorVersion,
|
|
363
|
-
port: options?.port,
|
|
364
|
-
sessionsBeforeHMRUpdate: options?.sessionsBeforeHMRUpdate,
|
|
365
|
-
serverProcess,
|
|
366
|
-
});
|
|
367
|
-
|
|
368
342
|
if (serverProcess) {
|
|
369
343
|
processIds.push(serverProcess.pid);
|
|
370
344
|
process.serverProcess = serverProcess;
|
|
@@ -378,15 +352,8 @@ const handleStartAppServer = async (options = {}) => {
|
|
|
378
352
|
|
|
379
353
|
const handleNotifyHMRClients = async (indexHTMLChanged = false) => {
|
|
380
354
|
try {
|
|
381
|
-
console.log('CALLING HNHMRCLIENTS');
|
|
382
|
-
|
|
383
355
|
if (process.hmrProcess) {
|
|
384
|
-
const settings = await loadSettings(process.env.NODE_ENV);
|
|
385
|
-
console.log({
|
|
386
|
-
type: "RESTART_SERVER",
|
|
387
|
-
settings: settings.parsed,
|
|
388
|
-
indexHTMLChanged,
|
|
389
|
-
});
|
|
356
|
+
const settings = await loadSettings({ environment: process.env.NODE_ENV });
|
|
390
357
|
process.hmrProcess.send(
|
|
391
358
|
JSON.stringify({
|
|
392
359
|
type: "RESTART_SERVER",
|