@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.
Files changed (239) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +652 -0
  3. package/dist/api/logsRouter.d.ts +20 -0
  4. package/dist/api/logsRouter.d.ts.map +1 -0
  5. package/dist/api/logsRouter.js +515 -0
  6. package/dist/api/logsRouter.js.map +1 -0
  7. package/dist/cli/dev-server.d.ts +7 -0
  8. package/dist/cli/dev-server.d.ts.map +1 -0
  9. package/dist/cli/dev-server.js +640 -0
  10. package/dist/cli/dev-server.js.map +1 -0
  11. package/dist/cli/index.d.ts +7 -0
  12. package/dist/cli/index.d.ts.map +1 -0
  13. package/dist/cli/index.js +26 -0
  14. package/dist/cli/index.js.map +1 -0
  15. package/dist/core/StandardServer.d.ts +129 -0
  16. package/dist/core/StandardServer.d.ts.map +1 -0
  17. package/dist/core/StandardServer.js +453 -0
  18. package/dist/core/StandardServer.js.map +1 -0
  19. package/dist/core/apiResponse.d.ts +69 -0
  20. package/dist/core/apiResponse.d.ts.map +1 -0
  21. package/dist/core/apiResponse.js +127 -0
  22. package/dist/core/apiResponse.js.map +1 -0
  23. package/dist/core/healthCheck.d.ts +160 -0
  24. package/dist/core/healthCheck.d.ts.map +1 -0
  25. package/dist/core/healthCheck.js +398 -0
  26. package/dist/core/healthCheck.js.map +1 -0
  27. package/dist/core/index.d.ts +40 -0
  28. package/dist/core/index.d.ts.map +1 -0
  29. package/dist/core/index.js +40 -0
  30. package/dist/core/index.js.map +1 -0
  31. package/dist/core/logger.d.ts +117 -0
  32. package/dist/core/logger.d.ts.map +1 -0
  33. package/dist/core/logger.js +826 -0
  34. package/dist/core/logger.js.map +1 -0
  35. package/dist/core/portUtils.d.ts +71 -0
  36. package/dist/core/portUtils.d.ts.map +1 -0
  37. package/dist/core/portUtils.js +240 -0
  38. package/dist/core/portUtils.js.map +1 -0
  39. package/dist/core/storageService.d.ts +119 -0
  40. package/dist/core/storageService.d.ts.map +1 -0
  41. package/dist/core/storageService.js +405 -0
  42. package/dist/core/storageService.js.map +1 -0
  43. package/dist/desktop/bundler.d.ts +40 -0
  44. package/dist/desktop/bundler.d.ts.map +1 -0
  45. package/dist/desktop/bundler.js +176 -0
  46. package/dist/desktop/bundler.js.map +1 -0
  47. package/dist/desktop/index.d.ts +25 -0
  48. package/dist/desktop/index.d.ts.map +1 -0
  49. package/dist/desktop/index.js +15 -0
  50. package/dist/desktop/index.js.map +1 -0
  51. package/dist/desktop/native-modules.d.ts +66 -0
  52. package/dist/desktop/native-modules.d.ts.map +1 -0
  53. package/dist/desktop/native-modules.js +200 -0
  54. package/dist/desktop/native-modules.js.map +1 -0
  55. package/dist/index.d.ts +29 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +39 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/logging/LogCategories.d.ts +87 -0
  60. package/dist/logging/LogCategories.d.ts.map +1 -0
  61. package/dist/logging/LogCategories.js +205 -0
  62. package/dist/logging/LogCategories.js.map +1 -0
  63. package/dist/middleware/aiErrorHandler.d.ts +31 -0
  64. package/dist/middleware/aiErrorHandler.d.ts.map +1 -0
  65. package/dist/middleware/aiErrorHandler.js +181 -0
  66. package/dist/middleware/aiErrorHandler.js.map +1 -0
  67. package/dist/middleware/auth.d.ts +101 -0
  68. package/dist/middleware/auth.d.ts.map +1 -0
  69. package/dist/middleware/auth.js +230 -0
  70. package/dist/middleware/auth.js.map +1 -0
  71. package/dist/middleware/cors.d.ts +56 -0
  72. package/dist/middleware/cors.d.ts.map +1 -0
  73. package/dist/middleware/cors.js +123 -0
  74. package/dist/middleware/cors.js.map +1 -0
  75. package/dist/middleware/errorHandler.d.ts +13 -0
  76. package/dist/middleware/errorHandler.d.ts.map +1 -0
  77. package/dist/middleware/errorHandler.js +85 -0
  78. package/dist/middleware/errorHandler.js.map +1 -0
  79. package/dist/middleware/fileUpload.d.ts +62 -0
  80. package/dist/middleware/fileUpload.d.ts.map +1 -0
  81. package/dist/middleware/fileUpload.js +175 -0
  82. package/dist/middleware/fileUpload.js.map +1 -0
  83. package/dist/middleware/health.d.ts +48 -0
  84. package/dist/middleware/health.d.ts.map +1 -0
  85. package/dist/middleware/health.js +143 -0
  86. package/dist/middleware/health.js.map +1 -0
  87. package/dist/middleware/index.d.ts +20 -0
  88. package/dist/middleware/index.d.ts.map +1 -0
  89. package/dist/middleware/index.js +18 -0
  90. package/dist/middleware/index.js.map +1 -0
  91. package/dist/middleware/openapi.d.ts +64 -0
  92. package/dist/middleware/openapi.d.ts.map +1 -0
  93. package/dist/middleware/openapi.js +258 -0
  94. package/dist/middleware/openapi.js.map +1 -0
  95. package/dist/middleware/requestLogging.d.ts +22 -0
  96. package/dist/middleware/requestLogging.d.ts.map +1 -0
  97. package/dist/middleware/requestLogging.js +61 -0
  98. package/dist/middleware/requestLogging.js.map +1 -0
  99. package/dist/middleware/session.d.ts +84 -0
  100. package/dist/middleware/session.d.ts.map +1 -0
  101. package/dist/middleware/session.js +189 -0
  102. package/dist/middleware/session.js.map +1 -0
  103. package/dist/middleware/validation.d.ts +1337 -0
  104. package/dist/middleware/validation.d.ts.map +1 -0
  105. package/dist/middleware/validation.js +483 -0
  106. package/dist/middleware/validation.js.map +1 -0
  107. package/dist/services/aiService.d.ts +180 -0
  108. package/dist/services/aiService.d.ts.map +1 -0
  109. package/dist/services/aiService.js +547 -0
  110. package/dist/services/aiService.js.map +1 -0
  111. package/dist/services/conversationStorage.d.ts +38 -0
  112. package/dist/services/conversationStorage.d.ts.map +1 -0
  113. package/dist/services/conversationStorage.js +158 -0
  114. package/dist/services/conversationStorage.js.map +1 -0
  115. package/dist/services/crossPlatformBuffer.d.ts +84 -0
  116. package/dist/services/crossPlatformBuffer.d.ts.map +1 -0
  117. package/dist/services/crossPlatformBuffer.js +246 -0
  118. package/dist/services/crossPlatformBuffer.js.map +1 -0
  119. package/dist/services/index.d.ts +17 -0
  120. package/dist/services/index.d.ts.map +1 -0
  121. package/dist/services/index.js +18 -0
  122. package/dist/services/index.js.map +1 -0
  123. package/dist/services/networkService.d.ts +81 -0
  124. package/dist/services/networkService.d.ts.map +1 -0
  125. package/dist/services/networkService.js +268 -0
  126. package/dist/services/networkService.js.map +1 -0
  127. package/dist/services/queueService.d.ts +112 -0
  128. package/dist/services/queueService.d.ts.map +1 -0
  129. package/dist/services/queueService.js +338 -0
  130. package/dist/services/queueService.js.map +1 -0
  131. package/dist/services/settingsService.d.ts +135 -0
  132. package/dist/services/settingsService.d.ts.map +1 -0
  133. package/dist/services/settingsService.js +425 -0
  134. package/dist/services/settingsService.js.map +1 -0
  135. package/dist/services/systemMonitor.d.ts +208 -0
  136. package/dist/services/systemMonitor.d.ts.map +1 -0
  137. package/dist/services/systemMonitor.js +693 -0
  138. package/dist/services/systemMonitor.js.map +1 -0
  139. package/dist/services/updateService.d.ts +78 -0
  140. package/dist/services/updateService.d.ts.map +1 -0
  141. package/dist/services/updateService.js +252 -0
  142. package/dist/services/updateService.js.map +1 -0
  143. package/dist/services/websocketEvents.d.ts +372 -0
  144. package/dist/services/websocketEvents.d.ts.map +1 -0
  145. package/dist/services/websocketEvents.js +338 -0
  146. package/dist/services/websocketEvents.js.map +1 -0
  147. package/dist/services/websocketServer.d.ts +80 -0
  148. package/dist/services/websocketServer.d.ts.map +1 -0
  149. package/dist/services/websocketServer.js +299 -0
  150. package/dist/services/websocketServer.js.map +1 -0
  151. package/dist/settings/SettingsSchema.d.ts +151 -0
  152. package/dist/settings/SettingsSchema.d.ts.map +1 -0
  153. package/dist/settings/SettingsSchema.js +424 -0
  154. package/dist/settings/SettingsSchema.js.map +1 -0
  155. package/dist/testing/TestServer.d.ts +69 -0
  156. package/dist/testing/TestServer.d.ts.map +1 -0
  157. package/dist/testing/TestServer.js +250 -0
  158. package/dist/testing/TestServer.js.map +1 -0
  159. package/dist/types/index.d.ts +137 -0
  160. package/dist/types/index.d.ts.map +1 -0
  161. package/dist/types/index.js +5 -0
  162. package/dist/types/index.js.map +1 -0
  163. package/dist/utils/appPaths.d.ts +74 -0
  164. package/dist/utils/appPaths.d.ts.map +1 -0
  165. package/dist/utils/appPaths.js +162 -0
  166. package/dist/utils/appPaths.js.map +1 -0
  167. package/dist/utils/fs-utils.d.ts +50 -0
  168. package/dist/utils/fs-utils.d.ts.map +1 -0
  169. package/dist/utils/fs-utils.js +114 -0
  170. package/dist/utils/fs-utils.js.map +1 -0
  171. package/dist/utils/index.d.ts +12 -0
  172. package/dist/utils/index.d.ts.map +1 -0
  173. package/dist/utils/index.js +10 -0
  174. package/dist/utils/index.js.map +1 -0
  175. package/dist/utils/standardConfig.d.ts +61 -0
  176. package/dist/utils/standardConfig.d.ts.map +1 -0
  177. package/dist/utils/standardConfig.js +109 -0
  178. package/dist/utils/standardConfig.js.map +1 -0
  179. package/dist/utils/startupBanner.d.ts +34 -0
  180. package/dist/utils/startupBanner.d.ts.map +1 -0
  181. package/dist/utils/startupBanner.js +169 -0
  182. package/dist/utils/startupBanner.js.map +1 -0
  183. package/dist/utils/startupLogger.d.ts +45 -0
  184. package/dist/utils/startupLogger.d.ts.map +1 -0
  185. package/dist/utils/startupLogger.js +200 -0
  186. package/dist/utils/startupLogger.js.map +1 -0
  187. package/package.json +151 -0
  188. package/src/api/logsRouter.ts +600 -0
  189. package/src/cli/dev-server.ts +803 -0
  190. package/src/cli/index.ts +31 -0
  191. package/src/core/StandardServer.ts +587 -0
  192. package/src/core/apiResponse.ts +202 -0
  193. package/src/core/healthCheck.ts +565 -0
  194. package/src/core/index.ts +80 -0
  195. package/src/core/logger.ts +1092 -0
  196. package/src/core/portUtils.ts +319 -0
  197. package/src/core/storageService.ts +595 -0
  198. package/src/desktop/bundler.ts +271 -0
  199. package/src/desktop/index.ts +18 -0
  200. package/src/desktop/native-modules.ts +289 -0
  201. package/src/index.ts +142 -0
  202. package/src/logging/LogCategories.ts +302 -0
  203. package/src/middleware/aiErrorHandler.ts +278 -0
  204. package/src/middleware/auth.ts +329 -0
  205. package/src/middleware/cors.ts +187 -0
  206. package/src/middleware/errorHandler.ts +103 -0
  207. package/src/middleware/fileUpload.ts +252 -0
  208. package/src/middleware/health.ts +206 -0
  209. package/src/middleware/index.ts +71 -0
  210. package/src/middleware/openapi.ts +305 -0
  211. package/src/middleware/requestLogging.ts +92 -0
  212. package/src/middleware/session.ts +238 -0
  213. package/src/middleware/validation.ts +603 -0
  214. package/src/services/aiService.ts +789 -0
  215. package/src/services/conversationStorage.ts +232 -0
  216. package/src/services/crossPlatformBuffer.ts +341 -0
  217. package/src/services/index.ts +47 -0
  218. package/src/services/networkService.ts +351 -0
  219. package/src/services/queueService.ts +446 -0
  220. package/src/services/settingsService.ts +549 -0
  221. package/src/services/systemMonitor.ts +936 -0
  222. package/src/services/updateService.ts +334 -0
  223. package/src/services/websocketEvents.ts +409 -0
  224. package/src/services/websocketServer.ts +394 -0
  225. package/src/settings/SettingsSchema.ts +664 -0
  226. package/src/testing/TestServer.ts +312 -0
  227. package/src/types/index.ts +154 -0
  228. package/src/utils/appPaths.ts +196 -0
  229. package/src/utils/fs-utils.ts +130 -0
  230. package/src/utils/index.ts +15 -0
  231. package/src/utils/standardConfig.ts +178 -0
  232. package/src/utils/startupBanner.ts +287 -0
  233. package/src/utils/startupLogger.ts +268 -0
  234. package/ui/dist/index.d.mts +1221 -0
  235. package/ui/dist/index.d.ts +1221 -0
  236. package/ui/dist/index.js +73 -0
  237. package/ui/dist/index.js.map +1 -0
  238. package/ui/dist/index.mjs +73 -0
  239. package/ui/dist/index.mjs.map +1 -0
@@ -0,0 +1,424 @@
1
+ /**
2
+ * Settings Schema System
3
+ * Consolidated settings system with all features from both implementations
4
+ */
5
+ /**
6
+ * Built-in validation functions
7
+ */
8
+ export const Validators = {
9
+ required: (message = "This field is required") => (value) => {
10
+ if (!value || (typeof value === "string" && !value.trim())) {
11
+ return message;
12
+ }
13
+ return null;
14
+ },
15
+ email: (message = "Invalid email address") => (value) => {
16
+ if (value && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value)) {
17
+ return message;
18
+ }
19
+ return null;
20
+ },
21
+ url: (message = "Invalid URL") => (value) => {
22
+ if (value) {
23
+ try {
24
+ new URL(value);
25
+ }
26
+ catch {
27
+ return message;
28
+ }
29
+ }
30
+ return null;
31
+ },
32
+ ipAddress: (message = "Invalid IP address") => (value) => {
33
+ if (value) {
34
+ const parts = value.split(".");
35
+ if (parts.length !== 4)
36
+ return message;
37
+ for (const part of parts) {
38
+ const num = parseInt(part, 10);
39
+ if (isNaN(num) || num < 0 || num > 255)
40
+ return message;
41
+ }
42
+ }
43
+ return null;
44
+ },
45
+ port: (message = "Invalid port number") => (value) => {
46
+ if (value < 1 || value > 65535) {
47
+ return message;
48
+ }
49
+ return null;
50
+ },
51
+ range: (min, max, message) => (value) => {
52
+ if (value < min || value > max) {
53
+ return message || `Value must be between ${min} and ${max}`;
54
+ }
55
+ return null;
56
+ },
57
+ pattern: (pattern, message = "Invalid format") => (value) => {
58
+ if (value && !pattern.test(value)) {
59
+ return message;
60
+ }
61
+ return null;
62
+ },
63
+ minLength: (min, message) => (value) => {
64
+ if (value && value.length < min) {
65
+ return message || `Must be at least ${min} characters`;
66
+ }
67
+ return null;
68
+ },
69
+ maxLength: (max, message) => (value) => {
70
+ if (value && value.length > max) {
71
+ return message || `Must be at most ${max} characters`;
72
+ }
73
+ return null;
74
+ },
75
+ };
76
+ /**
77
+ * Helper to create a settings schema
78
+ */
79
+ export function createSettingsSchema(schema) {
80
+ // Sort categories by order
81
+ schema.categories.sort((a, b) => (a.order || 0) - (b.order || 0));
82
+ return schema;
83
+ }
84
+ /**
85
+ * Get setting by key from categories
86
+ */
87
+ export function getSettingByKey(categories, key) {
88
+ for (const category of categories) {
89
+ const setting = category.settings.find((s) => s.key === key);
90
+ if (setting)
91
+ return setting;
92
+ }
93
+ return undefined;
94
+ }
95
+ /**
96
+ * Validate a single setting
97
+ */
98
+ export function validateSetting(setting, value) {
99
+ // Check required
100
+ if (setting.required &&
101
+ (!value || (typeof value === "string" && !value.trim()))) {
102
+ return setting.validationMessage || "This field is required";
103
+ }
104
+ // Type-specific validation
105
+ switch (setting.type) {
106
+ case "string":
107
+ case "password":
108
+ case "textarea":
109
+ if (value && typeof value !== "string") {
110
+ return setting.validationMessage || "Must be a string";
111
+ }
112
+ if (setting.validation) {
113
+ if (setting.validation.minLength !== undefined &&
114
+ value.length < setting.validation.minLength) {
115
+ return (setting.validationMessage ||
116
+ `Must be at least ${setting.validation.minLength} characters`);
117
+ }
118
+ if (setting.validation.maxLength !== undefined &&
119
+ value.length > setting.validation.maxLength) {
120
+ return (setting.validationMessage ||
121
+ `Must be at most ${setting.validation.maxLength} characters`);
122
+ }
123
+ if (setting.validation.pattern &&
124
+ !new RegExp(setting.validation.pattern).test(value)) {
125
+ return setting.validationMessage || "Invalid format";
126
+ }
127
+ }
128
+ break;
129
+ case "email":
130
+ if (value && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value)) {
131
+ return setting.validationMessage || "Invalid email address";
132
+ }
133
+ break;
134
+ case "url":
135
+ try {
136
+ if (value)
137
+ new URL(value);
138
+ }
139
+ catch {
140
+ return setting.validationMessage || "Invalid URL";
141
+ }
142
+ break;
143
+ case "ipaddress":
144
+ if (value) {
145
+ const parts = value.split(".");
146
+ if (parts.length !== 4) {
147
+ return setting.validationMessage || "Invalid IP address";
148
+ }
149
+ for (const part of parts) {
150
+ const num = parseInt(part, 10);
151
+ if (isNaN(num) || num < 0 || num > 255) {
152
+ return setting.validationMessage || "Invalid IP address";
153
+ }
154
+ }
155
+ }
156
+ break;
157
+ case "number":
158
+ if (typeof value !== "number" || isNaN(value)) {
159
+ return setting.validationMessage || "Must be a valid number";
160
+ }
161
+ if (setting.validation) {
162
+ if (setting.validation.min !== undefined &&
163
+ value < setting.validation.min) {
164
+ return (setting.validationMessage ||
165
+ `Must be at least ${setting.validation.min}`);
166
+ }
167
+ if (setting.validation.max !== undefined &&
168
+ value > setting.validation.max) {
169
+ return (setting.validationMessage ||
170
+ `Must be at most ${setting.validation.max}`);
171
+ }
172
+ }
173
+ // Also check min/max at root level for backward compatibility
174
+ if (setting.min !== undefined && value < setting.min) {
175
+ return setting.validationMessage || `Must be at least ${setting.min}`;
176
+ }
177
+ if (setting.max !== undefined && value > setting.max) {
178
+ return setting.validationMessage || `Must be at most ${setting.max}`;
179
+ }
180
+ break;
181
+ case "boolean":
182
+ if (typeof value !== "boolean") {
183
+ return setting.validationMessage || "Must be true or false";
184
+ }
185
+ break;
186
+ case "select":
187
+ case "multiselect":
188
+ if (setting.options) {
189
+ if (setting.type === "select" &&
190
+ !setting.options.some((opt) => opt.value === value)) {
191
+ return setting.validationMessage || "Must select a valid option";
192
+ }
193
+ if (setting.type === "multiselect" && Array.isArray(value)) {
194
+ const validValues = setting.options.map((opt) => opt.value);
195
+ if (!value.every((v) => validValues.includes(v))) {
196
+ return setting.validationMessage || "Invalid selection";
197
+ }
198
+ }
199
+ }
200
+ break;
201
+ case "date":
202
+ case "time":
203
+ case "datetime":
204
+ if (value && !Date.parse(value)) {
205
+ return setting.validationMessage || "Invalid date/time";
206
+ }
207
+ break;
208
+ case "color":
209
+ if (value && !/^#[0-9A-Fa-f]{6}$/.test(value)) {
210
+ return (setting.validationMessage || "Invalid color (must be hex format)");
211
+ }
212
+ break;
213
+ }
214
+ // Custom validation
215
+ if (setting.validation?.custom) {
216
+ const error = setting.validation.custom(value);
217
+ if (error)
218
+ return error;
219
+ }
220
+ return null;
221
+ }
222
+ /**
223
+ * Validate all settings against schema
224
+ */
225
+ export function validateSettings(schema, settings) {
226
+ const errors = {};
227
+ for (const category of schema.categories) {
228
+ for (const setting of category.settings) {
229
+ if (setting.hidden)
230
+ continue;
231
+ const value = settings[setting.key];
232
+ const error = validateSetting(setting, value);
233
+ if (error) {
234
+ errors[setting.key] = error;
235
+ }
236
+ }
237
+ }
238
+ // Run custom validation
239
+ if (schema.onValidate) {
240
+ const customErrors = schema.onValidate(settings);
241
+ if (customErrors) {
242
+ Object.assign(errors, customErrors);
243
+ }
244
+ }
245
+ return errors;
246
+ }
247
+ /**
248
+ * Validate all settings (returns result object)
249
+ */
250
+ export function validateAllSettings(categories, values) {
251
+ const errors = {};
252
+ for (const category of categories) {
253
+ for (const setting of category.settings) {
254
+ if (setting.hidden)
255
+ continue;
256
+ const value = values[setting.key];
257
+ const error = validateSetting(setting, value);
258
+ if (error) {
259
+ errors[setting.key] = error;
260
+ }
261
+ }
262
+ }
263
+ return {
264
+ isValid: Object.keys(errors).length === 0,
265
+ errors,
266
+ };
267
+ }
268
+ /**
269
+ * Helper to flatten nested settings for storage
270
+ */
271
+ export function flattenSettings(settings, prefix = "") {
272
+ const flattened = {};
273
+ for (const [key, value] of Object.entries(settings)) {
274
+ const fullKey = prefix ? `${prefix}.${key}` : key;
275
+ if (value &&
276
+ typeof value === "object" &&
277
+ !Array.isArray(value) &&
278
+ !(value instanceof Date)) {
279
+ Object.assign(flattened, flattenSettings(value, fullKey));
280
+ }
281
+ else {
282
+ flattened[fullKey] = value;
283
+ }
284
+ }
285
+ return flattened;
286
+ }
287
+ // Alias for consistency
288
+ export const flattenSettingsValues = flattenSettings;
289
+ /**
290
+ * Helper to unflatten settings from storage
291
+ */
292
+ export function unflattenSettings(flattened) {
293
+ const settings = {};
294
+ for (const [key, value] of Object.entries(flattened)) {
295
+ const parts = key.split(".");
296
+ let current = settings;
297
+ for (let i = 0; i < parts.length - 1; i++) {
298
+ const part = parts[i];
299
+ if (!part)
300
+ continue;
301
+ if (!current[part]) {
302
+ current[part] = {};
303
+ }
304
+ current = current[part];
305
+ }
306
+ const lastPart = parts[parts.length - 1];
307
+ if (lastPart) {
308
+ current[lastPart] = value;
309
+ }
310
+ }
311
+ return settings;
312
+ }
313
+ // Alias for consistency
314
+ export const unflattenSettingsValues = unflattenSettings;
315
+ /**
316
+ * Get all settings that require restart
317
+ */
318
+ export function getRestartRequiredSettings(schema, changedSettings) {
319
+ const restartRequired = [];
320
+ // Handle both schema and categories array
321
+ const categories = Array.isArray(schema) ? schema : schema.categories;
322
+ // Handle both changed settings object and array of keys
323
+ const changedKeys = Array.isArray(changedSettings)
324
+ ? changedSettings
325
+ : Object.keys(changedSettings);
326
+ for (const category of categories) {
327
+ for (const setting of category.settings) {
328
+ if (setting.requiresRestart && changedKeys.includes(setting.key)) {
329
+ restartRequired.push(setting.key);
330
+ }
331
+ }
332
+ }
333
+ return restartRequired;
334
+ }
335
+ /**
336
+ * Get default values from settings
337
+ */
338
+ export function getDefaultSettingsValues(categories) {
339
+ const defaults = {};
340
+ for (const category of categories) {
341
+ for (const setting of category.settings) {
342
+ if (!setting.hidden && setting.defaultValue !== undefined) {
343
+ defaults[setting.key] = setting.defaultValue;
344
+ }
345
+ }
346
+ }
347
+ return defaults;
348
+ }
349
+ /**
350
+ * Evaluate conditional visibility for a field
351
+ */
352
+ export function evaluateFieldVisibility(field, currentValues) {
353
+ if (!field.showIf) {
354
+ return true;
355
+ }
356
+ try {
357
+ return field.showIf(currentValues);
358
+ }
359
+ catch (_error) {
360
+ console.error(`Error evaluating showIf for field ${field.key}:`, _error);
361
+ return true; // Show field if evaluation fails
362
+ }
363
+ }
364
+ /**
365
+ * Group fields by their group property
366
+ */
367
+ export function groupFields(fields) {
368
+ const groups = new Map();
369
+ // First, add ungrouped fields
370
+ const ungrouped = fields.filter((f) => !f.group);
371
+ if (ungrouped.length > 0) {
372
+ groups.set("_default", ungrouped);
373
+ }
374
+ // Then, group the rest
375
+ fields
376
+ .filter((f) => f.group)
377
+ .forEach((field) => {
378
+ const group = field.group;
379
+ if (!groups.has(group)) {
380
+ groups.set(group, []);
381
+ }
382
+ groups.get(group).push(field);
383
+ });
384
+ // Sort fields within each group by order
385
+ groups.forEach((groupFields) => {
386
+ groupFields.sort((a, b) => (a.order || 999) - (b.order || 999));
387
+ });
388
+ return groups;
389
+ }
390
+ /**
391
+ * Apply toStorage transform
392
+ */
393
+ export function applyToStorageTransform(field, value) {
394
+ if (field.transform?.toStorage) {
395
+ return field.transform.toStorage(value);
396
+ }
397
+ return value;
398
+ }
399
+ /**
400
+ * Apply fromStorage transform
401
+ */
402
+ export function applyFromStorageTransform(field, value) {
403
+ if (field.transform?.fromStorage) {
404
+ return field.transform.fromStorage(value);
405
+ }
406
+ return value;
407
+ }
408
+ /**
409
+ * Create settings form state
410
+ */
411
+ export function createSettingsFormState(categories, initialValues) {
412
+ const defaults = getDefaultSettingsValues(categories);
413
+ const values = { ...defaults, ...initialValues };
414
+ const validation = validateAllSettings(categories, values);
415
+ return {
416
+ values,
417
+ errors: validation.errors,
418
+ touched: {},
419
+ dirty: {},
420
+ isValid: validation.isValid,
421
+ isSubmitting: false,
422
+ };
423
+ }
424
+ //# sourceMappingURL=SettingsSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsSchema.js","sourceRoot":"","sources":["../../src/settings/SettingsSchema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Test Server Utility
3
+ * Provides standardized test server management for all SuperDangerous applications
4
+ */
5
+ export interface TestServerConfig {
6
+ /** Path to the application entry point */
7
+ entryPoint: string;
8
+ /** Port to run the server on */
9
+ port: number;
10
+ /** API base URL */
11
+ apiBase?: string;
12
+ /** Environment variables */
13
+ env?: Record<string, string>;
14
+ /** Timeout for server startup (ms) */
15
+ startupTimeout?: number;
16
+ /** Health check endpoint */
17
+ healthEndpoint?: string;
18
+ /** Whether to suppress server output */
19
+ silent?: boolean;
20
+ }
21
+ export declare class TestServer {
22
+ private process;
23
+ private config;
24
+ private startPromise;
25
+ port: number;
26
+ constructor(config: TestServerConfig);
27
+ /**
28
+ * Clean up any existing processes on the port
29
+ */
30
+ private cleanupPort;
31
+ /**
32
+ * Wait for the server to be ready
33
+ */
34
+ private waitForServer;
35
+ /**
36
+ * Start the test server
37
+ */
38
+ start(): Promise<void>;
39
+ private _start;
40
+ /**
41
+ * Stop the test server
42
+ */
43
+ stop(): Promise<void>;
44
+ /**
45
+ * Get the API base URL
46
+ */
47
+ getApiBase(): string;
48
+ /**
49
+ * Make a request to the test server
50
+ */
51
+ request(endpoint: string, options?: any): Promise<any>;
52
+ }
53
+ /**
54
+ * Create a test server instance
55
+ */
56
+ export declare function createTestServer(config: TestServerConfig): TestServer;
57
+ /**
58
+ * Setup function for Jest beforeAll
59
+ */
60
+ export declare function setupTestServer(config: TestServerConfig): Promise<void>;
61
+ /**
62
+ * Teardown function for Jest afterAll
63
+ */
64
+ export declare function teardownTestServer(): Promise<void>;
65
+ /**
66
+ * Get the global test server instance
67
+ */
68
+ export declare function getTestServer(): TestServer | null;
69
+ //# sourceMappingURL=TestServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TestServer.d.ts","sourceRoot":"","sources":["../../src/testing/TestServer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAeH,MAAM,WAAW,gBAAgB;IAC/B,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,sCAAsC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4BAA4B;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wCAAwC;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,YAAY,CAA8B;IAC3C,IAAI,EAAE,MAAM,CAAC;gBAER,MAAM,EAAE,gBAAgB;IAYpC;;OAEG;IACH,OAAO,CAAC,WAAW;IA+BnB;;OAEG;YACW,aAAa;IA2C3B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAed,MAAM;IAkDpB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmC3B;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;OAEG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,GAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;CAyBjE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU,CAErE;AAOD;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAG7E;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAKxD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,UAAU,GAAG,IAAI,CAEjD"}