@joystick.js/cli-canary 0.0.0-canary.155 → 0.0.0-canary.157
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 -15
- package/package.json +1 -1
- package/src/functions/start/index.js +0 -656
- package/src/lib/dev/index.js +2 -19
package/dist/lib/dev/index.js
CHANGED
|
@@ -176,6 +176,7 @@ const handleServerProcessSTDIO = () => {
|
|
|
176
176
|
const handleAddOrChangeFile = async (context = {}, path2 = "", options = {}) => {
|
|
177
177
|
try {
|
|
178
178
|
if (context.isAddingOrChangingFile) {
|
|
179
|
+
console.log("ADDING OR CHANGING FILE");
|
|
179
180
|
const codependencies = await getCodependenciesForFile(path2);
|
|
180
181
|
const fileResults = await buildFiles({
|
|
181
182
|
files: [path2, ...codependencies?.existing || []],
|
|
@@ -195,10 +196,6 @@ const handleAddOrChangeFile = async (context = {}, path2 = "", options = {}) =>
|
|
|
195
196
|
);
|
|
196
197
|
return;
|
|
197
198
|
}
|
|
198
|
-
console.log("ADD/CHANGE FILE", {
|
|
199
|
-
context,
|
|
200
|
-
fileResultsHaveErrors
|
|
201
|
-
});
|
|
202
199
|
if (!fileResultsHaveErrors) {
|
|
203
200
|
process.initialBuildComplete = true;
|
|
204
201
|
if (context.isUIUpdate) {
|
|
@@ -209,7 +206,6 @@ const handleAddOrChangeFile = async (context = {}, path2 = "", options = {}) =>
|
|
|
209
206
|
}
|
|
210
207
|
}
|
|
211
208
|
} catch (exception) {
|
|
212
|
-
console.log(exception);
|
|
213
209
|
throw new Error(`[dev.handleAddOrChangeFile] ${exception.message}`);
|
|
214
210
|
}
|
|
215
211
|
};
|
|
@@ -217,9 +213,6 @@ const handleAddDirectory = (context = {}, path2 = "", options = {}) => {
|
|
|
217
213
|
try {
|
|
218
214
|
if (context.isAddDirectory) {
|
|
219
215
|
fs.mkdirSync(`./.joystick/build/${path2}`);
|
|
220
|
-
console.log("ADD DIR", {
|
|
221
|
-
context
|
|
222
|
-
});
|
|
223
216
|
if (context.isUIUpdate) {
|
|
224
217
|
handleNotifyHMRClients(context.isHTMLUpdate);
|
|
225
218
|
} else {
|
|
@@ -234,9 +227,6 @@ const handleCopyFile = (context = {}, path2 = "", options = {}) => {
|
|
|
234
227
|
try {
|
|
235
228
|
if (context.isFileToCopy && !context.isDirectory) {
|
|
236
229
|
fs.writeFileSync(`./.joystick/build/${path2}`, fs.readFileSync(path2));
|
|
237
|
-
console.log("COPY FILE", {
|
|
238
|
-
context
|
|
239
|
-
});
|
|
240
230
|
if (context.isUIUpdate) {
|
|
241
231
|
handleNotifyHMRClients(context.isHTMLUpdate);
|
|
242
232
|
} else {
|
|
@@ -251,9 +241,6 @@ const handleCopyDirectory = (context = {}, path2 = "", options = {}) => {
|
|
|
251
241
|
try {
|
|
252
242
|
if (context.isFileToCopy && context.isDirectory && !context.isExistingDirectoryInBuild) {
|
|
253
243
|
fs.mkdirSync(`./.joystick/build/${path2}`);
|
|
254
|
-
console.log("COPY DIR", {
|
|
255
|
-
context
|
|
256
|
-
});
|
|
257
244
|
if (context.isUIUpdate) {
|
|
258
245
|
handleNotifyHMRClients(context.isHTMLUpdate);
|
|
259
246
|
} else {
|
|
@@ -271,7 +258,6 @@ const handleRestartApplicationProcess = async (options = {}) => {
|
|
|
271
258
|
process.loader.text("Restarting app...");
|
|
272
259
|
}
|
|
273
260
|
process.serverProcess.kill();
|
|
274
|
-
console.log("GETTING TO HERE");
|
|
275
261
|
await handleStartAppServer(options);
|
|
276
262
|
return Promise.resolve();
|
|
277
263
|
}
|
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
|
@@ -211,6 +211,8 @@ const handleServerProcessSTDIO = () => {
|
|
|
211
211
|
const handleAddOrChangeFile = async (context = {}, path = '', options = {}) => {
|
|
212
212
|
try {
|
|
213
213
|
if (context.isAddingOrChangingFile) {
|
|
214
|
+
console.log('ADDING OR CHANGING FILE');
|
|
215
|
+
|
|
214
216
|
const codependencies = await getCodependenciesForFile(path);
|
|
215
217
|
const fileResults = await buildFiles({
|
|
216
218
|
files: [path, ...(codependencies?.existing || [])],
|
|
@@ -242,11 +244,6 @@ const handleAddOrChangeFile = async (context = {}, path = '', options = {}) => {
|
|
|
242
244
|
return;
|
|
243
245
|
}
|
|
244
246
|
|
|
245
|
-
console.log('ADD/CHANGE FILE', {
|
|
246
|
-
context,
|
|
247
|
-
fileResultsHaveErrors,
|
|
248
|
-
});
|
|
249
|
-
|
|
250
247
|
if (!fileResultsHaveErrors) {
|
|
251
248
|
process.initialBuildComplete = true;
|
|
252
249
|
|
|
@@ -258,7 +255,6 @@ const handleAddOrChangeFile = async (context = {}, path = '', options = {}) => {
|
|
|
258
255
|
}
|
|
259
256
|
}
|
|
260
257
|
} catch (exception) {
|
|
261
|
-
console.log(exception);
|
|
262
258
|
throw new Error(`[dev.handleAddOrChangeFile] ${exception.message}`);
|
|
263
259
|
}
|
|
264
260
|
};
|
|
@@ -268,10 +264,6 @@ const handleAddDirectory = (context = {}, path = '', options = {}) => {
|
|
|
268
264
|
if (context.isAddDirectory) {
|
|
269
265
|
fs.mkdirSync(`./.joystick/build/${path}`);
|
|
270
266
|
|
|
271
|
-
console.log('ADD DIR', {
|
|
272
|
-
context,
|
|
273
|
-
});
|
|
274
|
-
|
|
275
267
|
if (context.isUIUpdate) {
|
|
276
268
|
handleNotifyHMRClients(context.isHTMLUpdate);
|
|
277
269
|
} else {
|
|
@@ -288,10 +280,6 @@ const handleCopyFile = (context = {}, path = '', options = {}) => {
|
|
|
288
280
|
if (context.isFileToCopy && !context.isDirectory) {
|
|
289
281
|
fs.writeFileSync(`./.joystick/build/${path}`, fs.readFileSync(path));
|
|
290
282
|
|
|
291
|
-
console.log('COPY FILE', {
|
|
292
|
-
context,
|
|
293
|
-
});
|
|
294
|
-
|
|
295
283
|
if (context.isUIUpdate) {
|
|
296
284
|
handleNotifyHMRClients(context.isHTMLUpdate);
|
|
297
285
|
} else {
|
|
@@ -308,10 +296,6 @@ const handleCopyDirectory = (context = {}, path = '', options = {}) => {
|
|
|
308
296
|
if (context.isFileToCopy && context.isDirectory && !context.isExistingDirectoryInBuild) {
|
|
309
297
|
fs.mkdirSync(`./.joystick/build/${path}`);
|
|
310
298
|
|
|
311
|
-
console.log('COPY DIR', {
|
|
312
|
-
context,
|
|
313
|
-
});
|
|
314
|
-
|
|
315
299
|
if (context.isUIUpdate) {
|
|
316
300
|
handleNotifyHMRClients(context.isHTMLUpdate);
|
|
317
301
|
} else {
|
|
@@ -332,7 +316,6 @@ const handleRestartApplicationProcess = async (options = {}) => {
|
|
|
332
316
|
|
|
333
317
|
process.serverProcess.kill();
|
|
334
318
|
|
|
335
|
-
console.log('GETTING TO HERE');
|
|
336
319
|
await handleStartAppServer(options);
|
|
337
320
|
|
|
338
321
|
return Promise.resolve();
|