@superdangerous/app-framework 4.9.0
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/LICENSE +21 -0
- package/README.md +652 -0
- package/dist/api/logsRouter.d.ts +20 -0
- package/dist/api/logsRouter.d.ts.map +1 -0
- package/dist/api/logsRouter.js +515 -0
- package/dist/api/logsRouter.js.map +1 -0
- package/dist/cli/dev-server.d.ts +7 -0
- package/dist/cli/dev-server.d.ts.map +1 -0
- package/dist/cli/dev-server.js +640 -0
- package/dist/cli/dev-server.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +26 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/StandardServer.d.ts +129 -0
- package/dist/core/StandardServer.d.ts.map +1 -0
- package/dist/core/StandardServer.js +453 -0
- package/dist/core/StandardServer.js.map +1 -0
- package/dist/core/apiResponse.d.ts +69 -0
- package/dist/core/apiResponse.d.ts.map +1 -0
- package/dist/core/apiResponse.js +127 -0
- package/dist/core/apiResponse.js.map +1 -0
- package/dist/core/healthCheck.d.ts +160 -0
- package/dist/core/healthCheck.d.ts.map +1 -0
- package/dist/core/healthCheck.js +398 -0
- package/dist/core/healthCheck.js.map +1 -0
- package/dist/core/index.d.ts +40 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +40 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/logger.d.ts +117 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +826 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/portUtils.d.ts +71 -0
- package/dist/core/portUtils.d.ts.map +1 -0
- package/dist/core/portUtils.js +240 -0
- package/dist/core/portUtils.js.map +1 -0
- package/dist/core/storageService.d.ts +119 -0
- package/dist/core/storageService.d.ts.map +1 -0
- package/dist/core/storageService.js +405 -0
- package/dist/core/storageService.js.map +1 -0
- package/dist/desktop/bundler.d.ts +40 -0
- package/dist/desktop/bundler.d.ts.map +1 -0
- package/dist/desktop/bundler.js +176 -0
- package/dist/desktop/bundler.js.map +1 -0
- package/dist/desktop/index.d.ts +25 -0
- package/dist/desktop/index.d.ts.map +1 -0
- package/dist/desktop/index.js +15 -0
- package/dist/desktop/index.js.map +1 -0
- package/dist/desktop/native-modules.d.ts +66 -0
- package/dist/desktop/native-modules.d.ts.map +1 -0
- package/dist/desktop/native-modules.js +200 -0
- package/dist/desktop/native-modules.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/logging/LogCategories.d.ts +87 -0
- package/dist/logging/LogCategories.d.ts.map +1 -0
- package/dist/logging/LogCategories.js +205 -0
- package/dist/logging/LogCategories.js.map +1 -0
- package/dist/middleware/aiErrorHandler.d.ts +31 -0
- package/dist/middleware/aiErrorHandler.d.ts.map +1 -0
- package/dist/middleware/aiErrorHandler.js +181 -0
- package/dist/middleware/aiErrorHandler.js.map +1 -0
- package/dist/middleware/auth.d.ts +101 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +230 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/cors.d.ts +56 -0
- package/dist/middleware/cors.d.ts.map +1 -0
- package/dist/middleware/cors.js +123 -0
- package/dist/middleware/cors.js.map +1 -0
- package/dist/middleware/errorHandler.d.ts +13 -0
- package/dist/middleware/errorHandler.d.ts.map +1 -0
- package/dist/middleware/errorHandler.js +85 -0
- package/dist/middleware/errorHandler.js.map +1 -0
- package/dist/middleware/fileUpload.d.ts +62 -0
- package/dist/middleware/fileUpload.d.ts.map +1 -0
- package/dist/middleware/fileUpload.js +175 -0
- package/dist/middleware/fileUpload.js.map +1 -0
- package/dist/middleware/health.d.ts +48 -0
- package/dist/middleware/health.d.ts.map +1 -0
- package/dist/middleware/health.js +143 -0
- package/dist/middleware/health.js.map +1 -0
- package/dist/middleware/index.d.ts +20 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +18 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/openapi.d.ts +64 -0
- package/dist/middleware/openapi.d.ts.map +1 -0
- package/dist/middleware/openapi.js +258 -0
- package/dist/middleware/openapi.js.map +1 -0
- package/dist/middleware/requestLogging.d.ts +22 -0
- package/dist/middleware/requestLogging.d.ts.map +1 -0
- package/dist/middleware/requestLogging.js +61 -0
- package/dist/middleware/requestLogging.js.map +1 -0
- package/dist/middleware/session.d.ts +84 -0
- package/dist/middleware/session.d.ts.map +1 -0
- package/dist/middleware/session.js +189 -0
- package/dist/middleware/session.js.map +1 -0
- package/dist/middleware/validation.d.ts +1337 -0
- package/dist/middleware/validation.d.ts.map +1 -0
- package/dist/middleware/validation.js +483 -0
- package/dist/middleware/validation.js.map +1 -0
- package/dist/services/aiService.d.ts +180 -0
- package/dist/services/aiService.d.ts.map +1 -0
- package/dist/services/aiService.js +547 -0
- package/dist/services/aiService.js.map +1 -0
- package/dist/services/conversationStorage.d.ts +38 -0
- package/dist/services/conversationStorage.d.ts.map +1 -0
- package/dist/services/conversationStorage.js +158 -0
- package/dist/services/conversationStorage.js.map +1 -0
- package/dist/services/crossPlatformBuffer.d.ts +84 -0
- package/dist/services/crossPlatformBuffer.d.ts.map +1 -0
- package/dist/services/crossPlatformBuffer.js +246 -0
- package/dist/services/crossPlatformBuffer.js.map +1 -0
- package/dist/services/index.d.ts +17 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +18 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/networkService.d.ts +81 -0
- package/dist/services/networkService.d.ts.map +1 -0
- package/dist/services/networkService.js +268 -0
- package/dist/services/networkService.js.map +1 -0
- package/dist/services/queueService.d.ts +112 -0
- package/dist/services/queueService.d.ts.map +1 -0
- package/dist/services/queueService.js +338 -0
- package/dist/services/queueService.js.map +1 -0
- package/dist/services/settingsService.d.ts +135 -0
- package/dist/services/settingsService.d.ts.map +1 -0
- package/dist/services/settingsService.js +425 -0
- package/dist/services/settingsService.js.map +1 -0
- package/dist/services/systemMonitor.d.ts +208 -0
- package/dist/services/systemMonitor.d.ts.map +1 -0
- package/dist/services/systemMonitor.js +693 -0
- package/dist/services/systemMonitor.js.map +1 -0
- package/dist/services/updateService.d.ts +78 -0
- package/dist/services/updateService.d.ts.map +1 -0
- package/dist/services/updateService.js +252 -0
- package/dist/services/updateService.js.map +1 -0
- package/dist/services/websocketEvents.d.ts +372 -0
- package/dist/services/websocketEvents.d.ts.map +1 -0
- package/dist/services/websocketEvents.js +338 -0
- package/dist/services/websocketEvents.js.map +1 -0
- package/dist/services/websocketServer.d.ts +80 -0
- package/dist/services/websocketServer.d.ts.map +1 -0
- package/dist/services/websocketServer.js +299 -0
- package/dist/services/websocketServer.js.map +1 -0
- package/dist/settings/SettingsSchema.d.ts +151 -0
- package/dist/settings/SettingsSchema.d.ts.map +1 -0
- package/dist/settings/SettingsSchema.js +424 -0
- package/dist/settings/SettingsSchema.js.map +1 -0
- package/dist/testing/TestServer.d.ts +69 -0
- package/dist/testing/TestServer.d.ts.map +1 -0
- package/dist/testing/TestServer.js +250 -0
- package/dist/testing/TestServer.js.map +1 -0
- package/dist/types/index.d.ts +137 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/appPaths.d.ts +74 -0
- package/dist/utils/appPaths.d.ts.map +1 -0
- package/dist/utils/appPaths.js +162 -0
- package/dist/utils/appPaths.js.map +1 -0
- package/dist/utils/fs-utils.d.ts +50 -0
- package/dist/utils/fs-utils.d.ts.map +1 -0
- package/dist/utils/fs-utils.js +114 -0
- package/dist/utils/fs-utils.js.map +1 -0
- package/dist/utils/index.d.ts +12 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +10 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/standardConfig.d.ts +61 -0
- package/dist/utils/standardConfig.d.ts.map +1 -0
- package/dist/utils/standardConfig.js +109 -0
- package/dist/utils/standardConfig.js.map +1 -0
- package/dist/utils/startupBanner.d.ts +34 -0
- package/dist/utils/startupBanner.d.ts.map +1 -0
- package/dist/utils/startupBanner.js +169 -0
- package/dist/utils/startupBanner.js.map +1 -0
- package/dist/utils/startupLogger.d.ts +45 -0
- package/dist/utils/startupLogger.d.ts.map +1 -0
- package/dist/utils/startupLogger.js +200 -0
- package/dist/utils/startupLogger.js.map +1 -0
- package/package.json +151 -0
- package/src/api/logsRouter.ts +600 -0
- package/src/cli/dev-server.ts +803 -0
- package/src/cli/index.ts +31 -0
- package/src/core/StandardServer.ts +587 -0
- package/src/core/apiResponse.ts +202 -0
- package/src/core/healthCheck.ts +565 -0
- package/src/core/index.ts +80 -0
- package/src/core/logger.ts +1092 -0
- package/src/core/portUtils.ts +319 -0
- package/src/core/storageService.ts +595 -0
- package/src/desktop/bundler.ts +271 -0
- package/src/desktop/index.ts +18 -0
- package/src/desktop/native-modules.ts +289 -0
- package/src/index.ts +142 -0
- package/src/logging/LogCategories.ts +302 -0
- package/src/middleware/aiErrorHandler.ts +278 -0
- package/src/middleware/auth.ts +329 -0
- package/src/middleware/cors.ts +187 -0
- package/src/middleware/errorHandler.ts +103 -0
- package/src/middleware/fileUpload.ts +252 -0
- package/src/middleware/health.ts +206 -0
- package/src/middleware/index.ts +71 -0
- package/src/middleware/openapi.ts +305 -0
- package/src/middleware/requestLogging.ts +92 -0
- package/src/middleware/session.ts +238 -0
- package/src/middleware/validation.ts +603 -0
- package/src/services/aiService.ts +789 -0
- package/src/services/conversationStorage.ts +232 -0
- package/src/services/crossPlatformBuffer.ts +341 -0
- package/src/services/index.ts +47 -0
- package/src/services/networkService.ts +351 -0
- package/src/services/queueService.ts +446 -0
- package/src/services/settingsService.ts +549 -0
- package/src/services/systemMonitor.ts +936 -0
- package/src/services/updateService.ts +334 -0
- package/src/services/websocketEvents.ts +409 -0
- package/src/services/websocketServer.ts +394 -0
- package/src/settings/SettingsSchema.ts +664 -0
- package/src/testing/TestServer.ts +312 -0
- package/src/types/index.ts +154 -0
- package/src/utils/appPaths.ts +196 -0
- package/src/utils/fs-utils.ts +130 -0
- package/src/utils/index.ts +15 -0
- package/src/utils/standardConfig.ts +178 -0
- package/src/utils/startupBanner.ts +287 -0
- package/src/utils/startupLogger.ts +268 -0
- package/ui/dist/index.d.mts +1221 -0
- package/ui/dist/index.d.ts +1221 -0
- package/ui/dist/index.js +73 -0
- package/ui/dist/index.js.map +1 -0
- package/ui/dist/index.mjs +73 -0
- package/ui/dist/index.mjs.map +1 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File system utilities to replace fs-extra with native Node.js fs
|
|
3
|
+
* Provides cross-platform compatibility without ESM issues
|
|
4
|
+
*/
|
|
5
|
+
import fs from "fs/promises";
|
|
6
|
+
import { createReadStream, createWriteStream } from "fs";
|
|
7
|
+
/**
|
|
8
|
+
* Ensure a directory exists, creating it if necessary
|
|
9
|
+
*/
|
|
10
|
+
export declare function ensureDir(dir: string): Promise<void>;
|
|
11
|
+
/**
|
|
12
|
+
* Check if a path exists
|
|
13
|
+
*/
|
|
14
|
+
export declare function pathExists(filePath: string): Promise<boolean>;
|
|
15
|
+
/**
|
|
16
|
+
* Copy a file or directory
|
|
17
|
+
*/
|
|
18
|
+
export declare function copy(src: string, dest: string): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Move a file or directory
|
|
21
|
+
*/
|
|
22
|
+
export declare function move(src: string, dest: string, options?: {
|
|
23
|
+
overwrite?: boolean;
|
|
24
|
+
}): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Remove a file or directory
|
|
27
|
+
*/
|
|
28
|
+
export declare function remove(filePath: string): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Read a JSON file
|
|
31
|
+
*/
|
|
32
|
+
export declare function readJson(filePath: string): Promise<any>;
|
|
33
|
+
/**
|
|
34
|
+
* Write a JSON file
|
|
35
|
+
*/
|
|
36
|
+
export declare function writeJson(filePath: string, data: any, options?: {
|
|
37
|
+
spaces?: number;
|
|
38
|
+
}): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Empty a directory without removing it
|
|
41
|
+
*/
|
|
42
|
+
export declare function emptyDir(dir: string): Promise<void>;
|
|
43
|
+
export { fs };
|
|
44
|
+
export { createReadStream, createWriteStream };
|
|
45
|
+
export declare const readFile: typeof fs.readFile;
|
|
46
|
+
export declare const writeFile: typeof fs.writeFile;
|
|
47
|
+
export declare const readdir: typeof fs.readdir;
|
|
48
|
+
export declare const stat: typeof fs.stat;
|
|
49
|
+
export declare const unlink: typeof fs.unlink;
|
|
50
|
+
//# sourceMappingURL=fs-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-utils.d.ts","sourceRoot":"","sources":["../../src/utils/fs-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,IAAI,CAAC;AAGzD;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1D;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBnE;AAED;;GAEG;AACH,wBAAsB,IAAI,CACxB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAChC,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5D;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAG7D;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,GAAG,EACT,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5B,OAAO,CAAC,IAAI,CAAC,CAIf;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASzD;AAGD,OAAO,EAAE,EAAE,EAAE,CAAC;AACd,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;AAC/C,eAAO,MAAM,QAAQ,oBAAuB,CAAC;AAC7C,eAAO,MAAM,SAAS,qBAAwB,CAAC;AAC/C,eAAO,MAAM,OAAO,mBAAsB,CAAC;AAC3C,eAAO,MAAM,IAAI,gBAAmB,CAAC;AACrC,eAAO,MAAM,MAAM,kBAAY,CAAC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File system utilities to replace fs-extra with native Node.js fs
|
|
3
|
+
* Provides cross-platform compatibility without ESM issues
|
|
4
|
+
*/
|
|
5
|
+
import fs from "fs/promises";
|
|
6
|
+
import { createReadStream, createWriteStream } from "fs";
|
|
7
|
+
import path from "path";
|
|
8
|
+
/**
|
|
9
|
+
* Ensure a directory exists, creating it if necessary
|
|
10
|
+
*/
|
|
11
|
+
export async function ensureDir(dir) {
|
|
12
|
+
await fs.mkdir(dir, { recursive: true });
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Check if a path exists
|
|
16
|
+
*/
|
|
17
|
+
export async function pathExists(filePath) {
|
|
18
|
+
try {
|
|
19
|
+
await fs.access(filePath);
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Copy a file or directory
|
|
28
|
+
*/
|
|
29
|
+
export async function copy(src, dest) {
|
|
30
|
+
const stats = await fs.stat(src);
|
|
31
|
+
if (stats.isDirectory()) {
|
|
32
|
+
await ensureDir(dest);
|
|
33
|
+
const entries = await fs.readdir(src, { withFileTypes: true });
|
|
34
|
+
for (const entry of entries) {
|
|
35
|
+
const srcPath = path.join(src, entry.name);
|
|
36
|
+
const destPath = path.join(dest, entry.name);
|
|
37
|
+
if (entry.isDirectory()) {
|
|
38
|
+
await copy(srcPath, destPath);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
await fs.copyFile(srcPath, destPath);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
await fs.copyFile(src, dest);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Move a file or directory
|
|
51
|
+
*/
|
|
52
|
+
export async function move(src, dest, options) {
|
|
53
|
+
const { overwrite = true } = options || {};
|
|
54
|
+
if (!overwrite && (await pathExists(dest))) {
|
|
55
|
+
throw new Error(`Destination already exists: ${dest}`);
|
|
56
|
+
}
|
|
57
|
+
try {
|
|
58
|
+
await fs.rename(src, dest);
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
// If cross-device move, copy then delete
|
|
62
|
+
if (error.code === "EXDEV") {
|
|
63
|
+
await copy(src, dest);
|
|
64
|
+
await fs.rm(src, { recursive: true, force: true });
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
throw error;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Remove a file or directory
|
|
73
|
+
*/
|
|
74
|
+
export async function remove(filePath) {
|
|
75
|
+
await fs.rm(filePath, { recursive: true, force: true });
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Read a JSON file
|
|
79
|
+
*/
|
|
80
|
+
export async function readJson(filePath) {
|
|
81
|
+
const content = await fs.readFile(filePath, "utf8");
|
|
82
|
+
return JSON.parse(content);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Write a JSON file
|
|
86
|
+
*/
|
|
87
|
+
export async function writeJson(filePath, data, options) {
|
|
88
|
+
const { spaces = 2 } = options || {};
|
|
89
|
+
const content = JSON.stringify(data, null, spaces);
|
|
90
|
+
await fs.writeFile(filePath, content, "utf8");
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Empty a directory without removing it
|
|
94
|
+
*/
|
|
95
|
+
export async function emptyDir(dir) {
|
|
96
|
+
if (await pathExists(dir)) {
|
|
97
|
+
const entries = await fs.readdir(dir);
|
|
98
|
+
for (const entry of entries) {
|
|
99
|
+
await remove(path.join(dir, entry));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
await ensureDir(dir);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Re-export native fs methods that don't need replacement
|
|
107
|
+
export { fs };
|
|
108
|
+
export { createReadStream, createWriteStream };
|
|
109
|
+
export const readFile = fs.readFile.bind(fs);
|
|
110
|
+
export const writeFile = fs.writeFile.bind(fs);
|
|
111
|
+
export const readdir = fs.readdir.bind(fs);
|
|
112
|
+
export const stat = fs.stat.bind(fs);
|
|
113
|
+
export const unlink = fs.unlink;
|
|
114
|
+
//# sourceMappingURL=fs-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-utils.js","sourceRoot":"","sources":["../../src/utils/fs-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utilities Module Exports
|
|
3
|
+
*/
|
|
4
|
+
export { default as startupLogger } from "./startupLogger.js";
|
|
5
|
+
export * from "../core/apiResponse.js";
|
|
6
|
+
export { displayStartupBanner, displayMinimalStartup, } from "./startupBanner.js";
|
|
7
|
+
export type { StartupBannerOptions } from "./startupBanner.js";
|
|
8
|
+
export { loadStandardConfig, getDefaultPorts } from "./standardConfig.js";
|
|
9
|
+
export type { StandardAppConfig } from "./standardConfig.js";
|
|
10
|
+
export * from "./appPaths.js";
|
|
11
|
+
export * as fsUtils from "./fs-utils.js";
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC9D,cAAc,wBAAwB,CAAC;AACvC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC1E,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,cAAc,eAAe,CAAC;AAC9B,OAAO,KAAK,OAAO,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utilities Module Exports
|
|
3
|
+
*/
|
|
4
|
+
export { default as startupLogger } from "./startupLogger.js";
|
|
5
|
+
export * from "../core/apiResponse.js";
|
|
6
|
+
export { displayStartupBanner, displayMinimalStartup, } from "./startupBanner.js";
|
|
7
|
+
export { loadStandardConfig, getDefaultPorts } from "./standardConfig.js";
|
|
8
|
+
export * from "./appPaths.js";
|
|
9
|
+
export * as fsUtils from "./fs-utils.js";
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC9D,cAAc,wBAAwB,CAAC;AACvC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE1E,cAAc,eAAe,CAAC;AAC9B,OAAO,KAAK,OAAO,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standard Configuration Loader
|
|
3
|
+
* Provides consistent config loading across all SuperDangerous applications
|
|
4
|
+
*/
|
|
5
|
+
export interface StandardAppConfig {
|
|
6
|
+
app: {
|
|
7
|
+
name: string;
|
|
8
|
+
version: string;
|
|
9
|
+
title: string;
|
|
10
|
+
description?: string;
|
|
11
|
+
};
|
|
12
|
+
server: {
|
|
13
|
+
port: number;
|
|
14
|
+
host: string;
|
|
15
|
+
webPort?: number;
|
|
16
|
+
websocketPort?: number;
|
|
17
|
+
};
|
|
18
|
+
ui?: {
|
|
19
|
+
theme?: "light" | "dark";
|
|
20
|
+
branding?: {
|
|
21
|
+
logo?: string;
|
|
22
|
+
primaryColor?: string;
|
|
23
|
+
secondaryColor?: string;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
logging?: {
|
|
27
|
+
level?: string;
|
|
28
|
+
directory?: string;
|
|
29
|
+
file_pattern?: string;
|
|
30
|
+
maxSize?: string;
|
|
31
|
+
maxFiles?: string;
|
|
32
|
+
console_level?: string;
|
|
33
|
+
};
|
|
34
|
+
desktop?: {
|
|
35
|
+
enabled: boolean;
|
|
36
|
+
window?: {
|
|
37
|
+
width?: number;
|
|
38
|
+
height?: number;
|
|
39
|
+
minWidth?: number;
|
|
40
|
+
minHeight?: number;
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
defaults?: {
|
|
44
|
+
timeout?: number;
|
|
45
|
+
retryAttempts?: number;
|
|
46
|
+
};
|
|
47
|
+
[key: string]: any;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Load application configuration with environment variable overrides
|
|
51
|
+
*/
|
|
52
|
+
export declare function loadStandardConfig(dirname: string): StandardAppConfig;
|
|
53
|
+
/**
|
|
54
|
+
* Get default ports for an application
|
|
55
|
+
* Applications can override these by providing their own configuration
|
|
56
|
+
*/
|
|
57
|
+
export declare function getDefaultPorts(_appName: string): {
|
|
58
|
+
api: number;
|
|
59
|
+
web: number;
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=standardConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standardConfig.d.ts","sourceRoot":"","sources":["../../src/utils/standardConfig.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE;QACH,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,EAAE,CAAC,EAAE;QACH,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;QACzB,QAAQ,CAAC,EAAE;YACT,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,cAAc,CAAC,EAAE,MAAM,CAAC;SACzB,CAAC;KACH,CAAC;IACF,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE;YACP,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,SAAS,CAAC,EAAE,MAAM,CAAC;SACpB,CAAC;KACH,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,CA6GrE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG;IACjD,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb,CAGA"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standard Configuration Loader
|
|
3
|
+
* Provides consistent config loading across all SuperDangerous applications
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync, existsSync } from "fs";
|
|
6
|
+
import path from "path";
|
|
7
|
+
/**
|
|
8
|
+
* Load application configuration with environment variable overrides
|
|
9
|
+
*/
|
|
10
|
+
export function loadStandardConfig(dirname) {
|
|
11
|
+
// Load package.json for defaults
|
|
12
|
+
const packageJsonPath = path.join(dirname, "../package.json");
|
|
13
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
|
|
14
|
+
// Load app.json config if it exists
|
|
15
|
+
const configPath = path.join(dirname, "../data/config/app.json");
|
|
16
|
+
let appConfig = {};
|
|
17
|
+
if (existsSync(configPath)) {
|
|
18
|
+
appConfig = JSON.parse(readFileSync(configPath, "utf-8"));
|
|
19
|
+
}
|
|
20
|
+
// Normalize config structure (handle different formats)
|
|
21
|
+
const normalizedConfig = {
|
|
22
|
+
app: {
|
|
23
|
+
name: process.env.APP_NAME ||
|
|
24
|
+
appConfig.app?.name ||
|
|
25
|
+
packageJson.name ||
|
|
26
|
+
"SuperDangerous App",
|
|
27
|
+
version: appConfig.app?.version || packageJson.version || "1.0.0",
|
|
28
|
+
title: process.env.APP_TITLE ||
|
|
29
|
+
appConfig.app?.title ||
|
|
30
|
+
appConfig.app_title || // Legacy support
|
|
31
|
+
packageJson.displayName || // Some packages use displayName
|
|
32
|
+
packageJson.name
|
|
33
|
+
?.replace(/@[^/]+\//, "")
|
|
34
|
+
.replace(/-/g, " ")
|
|
35
|
+
.replace(/\b\w/g, (l) => l.toUpperCase()) ||
|
|
36
|
+
"SuperDangerous Application",
|
|
37
|
+
description: process.env.APP_DESCRIPTION ||
|
|
38
|
+
appConfig.app?.description ||
|
|
39
|
+
packageJson.description,
|
|
40
|
+
},
|
|
41
|
+
server: {
|
|
42
|
+
port: Number(process.env.PORT ||
|
|
43
|
+
process.env.API_PORT ||
|
|
44
|
+
appConfig.server?.port ||
|
|
45
|
+
appConfig.server?.api?.port ||
|
|
46
|
+
appConfig.api?.port ||
|
|
47
|
+
8080),
|
|
48
|
+
host: process.env.HOST ||
|
|
49
|
+
appConfig.server?.host ||
|
|
50
|
+
appConfig.server?.api?.host ||
|
|
51
|
+
appConfig.api?.host ||
|
|
52
|
+
"0.0.0.0",
|
|
53
|
+
webPort: Number(process.env.WEB_PORT ||
|
|
54
|
+
appConfig.server?.webPort ||
|
|
55
|
+
appConfig.server?.web?.port ||
|
|
56
|
+
appConfig.webPort ||
|
|
57
|
+
5173),
|
|
58
|
+
websocketPort: Number(process.env.WEBSOCKET_PORT ||
|
|
59
|
+
appConfig.server?.websocketPort ||
|
|
60
|
+
appConfig.server?.websocket?.port ||
|
|
61
|
+
appConfig.webSocketPort ||
|
|
62
|
+
appConfig.server?.port ||
|
|
63
|
+
appConfig.api?.port),
|
|
64
|
+
},
|
|
65
|
+
ui: appConfig.ui || {},
|
|
66
|
+
logging: {
|
|
67
|
+
level: process.env.LOG_LEVEL || appConfig.logging?.level || "INFO",
|
|
68
|
+
directory: appConfig.logging?.directory || "logs",
|
|
69
|
+
file_pattern: appConfig.logging?.file_pattern || "app.log",
|
|
70
|
+
maxSize: appConfig.logging?.maxSize || "20m",
|
|
71
|
+
maxFiles: appConfig.logging?.maxFiles || "14d",
|
|
72
|
+
console_level: process.env.CONSOLE_LOG_LEVEL ||
|
|
73
|
+
appConfig.logging?.console_level ||
|
|
74
|
+
"INFO",
|
|
75
|
+
},
|
|
76
|
+
desktop: {
|
|
77
|
+
enabled: process.env.DESKTOP === "true" || appConfig.desktop?.enabled || false,
|
|
78
|
+
...appConfig.desktop,
|
|
79
|
+
},
|
|
80
|
+
defaults: appConfig.defaults || {
|
|
81
|
+
timeout: 5000,
|
|
82
|
+
retryAttempts: 3,
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
// Merge in any app-specific config
|
|
86
|
+
Object.keys(appConfig).forEach((key) => {
|
|
87
|
+
if (![
|
|
88
|
+
"app",
|
|
89
|
+
"server",
|
|
90
|
+
"api",
|
|
91
|
+
"ui",
|
|
92
|
+
"logging",
|
|
93
|
+
"desktop",
|
|
94
|
+
"defaults",
|
|
95
|
+
].includes(key)) {
|
|
96
|
+
normalizedConfig[key] = appConfig[key];
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
return normalizedConfig;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get default ports for an application
|
|
103
|
+
* Applications can override these by providing their own configuration
|
|
104
|
+
*/
|
|
105
|
+
export function getDefaultPorts(_appName) {
|
|
106
|
+
// Return sensible defaults - applications should define their own ports
|
|
107
|
+
return { api: 8080, web: 3000 };
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=standardConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standardConfig.js","sourceRoot":"","sources":["../../src/utils/standardConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standardized Startup Banner for SuperDangerous Applications
|
|
3
|
+
*/
|
|
4
|
+
export interface BannerOptions {
|
|
5
|
+
appName: string;
|
|
6
|
+
appVersion: string;
|
|
7
|
+
environment?: string;
|
|
8
|
+
port?: number;
|
|
9
|
+
additionalInfo?: string[];
|
|
10
|
+
showTips?: boolean;
|
|
11
|
+
showCredits?: boolean;
|
|
12
|
+
color?: "blue" | "green" | "yellow" | "red";
|
|
13
|
+
}
|
|
14
|
+
export interface StartupBannerOptions extends BannerOptions {
|
|
15
|
+
appName: string;
|
|
16
|
+
appVersion: string;
|
|
17
|
+
packageName?: string;
|
|
18
|
+
description?: string;
|
|
19
|
+
port: number;
|
|
20
|
+
webPort?: number;
|
|
21
|
+
webSocketPort?: number;
|
|
22
|
+
environment?: string;
|
|
23
|
+
startTime?: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Display a standardized startup banner for SuperDangerous applications
|
|
27
|
+
* All apps should use this exact same format for consistency
|
|
28
|
+
*/
|
|
29
|
+
export declare function displayStartupBanner(options: StartupBannerOptions): void;
|
|
30
|
+
/**
|
|
31
|
+
* Display a minimal startup message (for silent mode)
|
|
32
|
+
*/
|
|
33
|
+
export declare function displayMinimalStartup(appName: string, port: number): void;
|
|
34
|
+
//# sourceMappingURL=startupBanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startupBanner.d.ts","sourceRoot":"","sources":["../../src/utils/startupBanner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoEH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;CAC7C;AAED,MAAM,WAAW,oBAAqB,SAAQ,aAAa;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAiLxE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAOzE"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standardized Startup Banner for SuperDangerous Applications
|
|
3
|
+
*/
|
|
4
|
+
import chalk from "chalk";
|
|
5
|
+
import fs from "fs";
|
|
6
|
+
import path from "path";
|
|
7
|
+
// Force colors to ensure consistent output
|
|
8
|
+
chalk.level = 3; // Full color support
|
|
9
|
+
// Get framework version dynamically
|
|
10
|
+
function getFrameworkVersion() {
|
|
11
|
+
// Try multiple strategies to find the framework version
|
|
12
|
+
const strategies = [
|
|
13
|
+
// Strategy 1: Check if we're in the framework itself (during development)
|
|
14
|
+
() => {
|
|
15
|
+
const localPkg = path.join(__dirname, "../../package.json");
|
|
16
|
+
if (fs.existsSync(localPkg)) {
|
|
17
|
+
const pkg = JSON.parse(fs.readFileSync(localPkg, "utf-8"));
|
|
18
|
+
if (pkg.name === "@superdangerous/app-framework") {
|
|
19
|
+
return pkg.version;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return null;
|
|
23
|
+
},
|
|
24
|
+
// Strategy 2: Check node_modules in current working directory
|
|
25
|
+
() => {
|
|
26
|
+
const nodeModulesPath = path.join(process.cwd(), "node_modules", "@superdangerous", "app-framework", "package.json");
|
|
27
|
+
if (fs.existsSync(nodeModulesPath)) {
|
|
28
|
+
const pkg = JSON.parse(fs.readFileSync(nodeModulesPath, "utf-8"));
|
|
29
|
+
return pkg.version;
|
|
30
|
+
}
|
|
31
|
+
return null;
|
|
32
|
+
},
|
|
33
|
+
// Strategy 3: Try require.resolve to find the module
|
|
34
|
+
() => {
|
|
35
|
+
try {
|
|
36
|
+
const pkgPath = require.resolve("@superdangerous/app-framework/package.json", { paths: [process.cwd()] });
|
|
37
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
|
|
38
|
+
return pkg.version;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
];
|
|
45
|
+
for (const strategy of strategies) {
|
|
46
|
+
try {
|
|
47
|
+
const version = strategy();
|
|
48
|
+
if (version)
|
|
49
|
+
return version;
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// Try next strategy
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return "unknown";
|
|
56
|
+
}
|
|
57
|
+
const version = getFrameworkVersion();
|
|
58
|
+
/**
|
|
59
|
+
* Display a standardized startup banner for SuperDangerous applications
|
|
60
|
+
* All apps should use this exact same format for consistency
|
|
61
|
+
*/
|
|
62
|
+
export function displayStartupBanner(options) {
|
|
63
|
+
const { appName, appVersion, description, port, webPort, // Use separate web port if provided
|
|
64
|
+
webSocketPort, // WebSocket port
|
|
65
|
+
environment = process.env.NODE_ENV || "development", startTime, } = options;
|
|
66
|
+
const width = 50; // Reduced width to match horizontal dividers
|
|
67
|
+
const border = "─".repeat(width); // Full width for top/bottom borders
|
|
68
|
+
// Calculate startup time if provided
|
|
69
|
+
const startupTime = startTime
|
|
70
|
+
? `${((Date.now() - startTime) / 1000).toFixed(1)}s`
|
|
71
|
+
: "0.0s";
|
|
72
|
+
// Helper to create a line with proper padding
|
|
73
|
+
const makeLine = (content, align = "center") => {
|
|
74
|
+
// eslint-disable-next-line no-control-regex
|
|
75
|
+
const visibleLength = content.replace(/\x1b\[[0-9;]*m/g, "").length; // Strip ANSI codes for length calculation
|
|
76
|
+
if (align === "center") {
|
|
77
|
+
const leftPad = Math.max(0, Math.floor((width - visibleLength) / 2));
|
|
78
|
+
const rightPad = Math.max(0, width - visibleLength - leftPad);
|
|
79
|
+
return (chalk.gray("│") +
|
|
80
|
+
" ".repeat(leftPad) +
|
|
81
|
+
content +
|
|
82
|
+
" ".repeat(rightPad) +
|
|
83
|
+
chalk.gray("│"));
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
const padding = Math.max(0, width - visibleLength);
|
|
87
|
+
return chalk.gray("│") + content + " ".repeat(padding) + chalk.gray("│");
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
// Helper to wrap text
|
|
91
|
+
const wrapText = (text, maxWidth) => {
|
|
92
|
+
const words = text.split(" ");
|
|
93
|
+
const lines = [];
|
|
94
|
+
let currentLine = "";
|
|
95
|
+
for (const word of words) {
|
|
96
|
+
if ((currentLine + " " + word).trim().length <= maxWidth) {
|
|
97
|
+
currentLine = currentLine ? `${currentLine} ${word}` : word;
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
if (currentLine)
|
|
101
|
+
lines.push(currentLine);
|
|
102
|
+
currentLine = word;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (currentLine)
|
|
106
|
+
lines.push(currentLine);
|
|
107
|
+
return lines;
|
|
108
|
+
};
|
|
109
|
+
const emptyLine = chalk.gray("│") + " ".repeat(width) + chalk.gray("│");
|
|
110
|
+
const separator = chalk.gray("│ ") + chalk.gray("─".repeat(width - 2)) + chalk.gray(" │");
|
|
111
|
+
// Build the banner
|
|
112
|
+
console.log("");
|
|
113
|
+
console.log(chalk.gray("╭" + border + "╮"));
|
|
114
|
+
console.log(chalk.gray(emptyLine));
|
|
115
|
+
// App name in light gray
|
|
116
|
+
console.log(makeLine(chalk.gray(appName)));
|
|
117
|
+
console.log(emptyLine);
|
|
118
|
+
// Version in amber to match Ctrl+C
|
|
119
|
+
console.log(makeLine(chalk.yellow(`v${appVersion}`)));
|
|
120
|
+
console.log(emptyLine);
|
|
121
|
+
// Description (wrapped if needed)
|
|
122
|
+
if (description) {
|
|
123
|
+
const wrappedLines = wrapText(description, width - 4);
|
|
124
|
+
for (const line of wrappedLines) {
|
|
125
|
+
console.log(makeLine(line));
|
|
126
|
+
}
|
|
127
|
+
console.log(emptyLine);
|
|
128
|
+
}
|
|
129
|
+
console.log(separator);
|
|
130
|
+
console.log(emptyLine);
|
|
131
|
+
// URLs - no emojis, keys dark gray, values light gray
|
|
132
|
+
if (webPort && webPort !== port) {
|
|
133
|
+
// Both web UI and API are configured on different ports
|
|
134
|
+
console.log(makeLine(`${chalk.gray(" Web UI :")} ${chalk.gray(`http://localhost:${webPort}`)}`, "left"));
|
|
135
|
+
console.log(makeLine(`${chalk.gray(" API :")} ${chalk.gray(`http://localhost:${port}/api`)}`, "left"));
|
|
136
|
+
}
|
|
137
|
+
else if (webPort === port) {
|
|
138
|
+
// Web UI and API share the same port (production mode)
|
|
139
|
+
console.log(makeLine(`${chalk.gray(" Web UI :")} ${chalk.gray(`http://localhost:${port}`)}`, "left"));
|
|
140
|
+
console.log(makeLine(`${chalk.gray(" API :")} ${chalk.gray(`http://localhost:${port}/api`)}`, "left"));
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
// API-only mode
|
|
144
|
+
console.log(makeLine(`${chalk.gray(" API Server :")} ${chalk.gray(`http://localhost:${port}`)}`, "left"));
|
|
145
|
+
console.log(makeLine(`${chalk.gray(" Endpoints :")} ${chalk.gray(`http://localhost:${port}/api/*`)}`, "left"));
|
|
146
|
+
}
|
|
147
|
+
console.log(makeLine(`${chalk.gray(" WebSocket :")} ${chalk.gray(`ws://localhost:${webSocketPort || port}`)}`, "left"));
|
|
148
|
+
console.log(emptyLine);
|
|
149
|
+
console.log(separator);
|
|
150
|
+
console.log(emptyLine);
|
|
151
|
+
// Status lines
|
|
152
|
+
console.log(makeLine(`${chalk.gray(" Ready in")} ${chalk.green(startupTime)}`, "left"));
|
|
153
|
+
console.log(makeLine(`${chalk.gray(" Environment:")} ${chalk.gray(environment)}`, "left"));
|
|
154
|
+
console.log(makeLine(`${chalk.gray(" Framework:")} ${chalk.gray(`@superdangerous/app-framework v${version}`)}`, "left"));
|
|
155
|
+
console.log(emptyLine);
|
|
156
|
+
console.log(separator);
|
|
157
|
+
console.log(emptyLine);
|
|
158
|
+
console.log(makeLine(`${chalk.gray(" Press")} ${chalk.yellow("Ctrl+C")} ${chalk.gray("to stop")}`, "left"));
|
|
159
|
+
console.log(chalk.gray(emptyLine));
|
|
160
|
+
console.log(chalk.gray("╰" + border + "╯"));
|
|
161
|
+
console.log("");
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Display a minimal startup message (for silent mode)
|
|
165
|
+
*/
|
|
166
|
+
export function displayMinimalStartup(appName, port) {
|
|
167
|
+
console.log(chalk.green("✓"), chalk.bold(appName), "started on port", chalk.cyan(port));
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=startupBanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startupBanner.js","sourceRoot":"","sources":["../../src/utils/startupBanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Startup logger for clean console output
|
|
3
|
+
*/
|
|
4
|
+
interface ConflictInfo {
|
|
5
|
+
port: number;
|
|
6
|
+
process?: {
|
|
7
|
+
pid: number;
|
|
8
|
+
command: string;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
interface StartupConfig {
|
|
12
|
+
get?: (key: string) => any;
|
|
13
|
+
app_title?: string;
|
|
14
|
+
appTitle?: string;
|
|
15
|
+
version?: string;
|
|
16
|
+
webStarted?: boolean;
|
|
17
|
+
webPort?: number;
|
|
18
|
+
apiPort?: number;
|
|
19
|
+
}
|
|
20
|
+
declare class StartupLogger {
|
|
21
|
+
private startTime;
|
|
22
|
+
private steps;
|
|
23
|
+
private concise;
|
|
24
|
+
constructor();
|
|
25
|
+
startSuppression(): void;
|
|
26
|
+
stopSuppression(): void;
|
|
27
|
+
banner(config?: StartupConfig | null): void;
|
|
28
|
+
section(title: string): void;
|
|
29
|
+
step(icon: string, message: string, details?: string): void;
|
|
30
|
+
success(message: string, details?: string): void;
|
|
31
|
+
warning(message: string, details?: string): void;
|
|
32
|
+
error(message: string, details?: string): void;
|
|
33
|
+
info(message: string, details?: string): void;
|
|
34
|
+
loading(message: string): void;
|
|
35
|
+
getElapsedTime(): string;
|
|
36
|
+
summary(config: StartupConfig): void;
|
|
37
|
+
portConflict(conflicts: ConflictInfo[]): void;
|
|
38
|
+
table(title: string, data: Record<string, any>): void;
|
|
39
|
+
setConcise(concise: boolean): void;
|
|
40
|
+
isConcise(): boolean;
|
|
41
|
+
}
|
|
42
|
+
export declare function getStartupLogger(): StartupLogger;
|
|
43
|
+
export declare const logger: StartupLogger;
|
|
44
|
+
export default logger;
|
|
45
|
+
//# sourceMappingURL=startupLogger.d.ts.map
|