xypriss 2.0.0 → 2.1.1

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 (185) hide show
  1. package/README.md +171 -381
  2. package/dist/cjs/mods/security/src/algorithms/hash-algorithms.js +10 -0
  3. package/dist/cjs/mods/security/src/algorithms/hash-algorithms.js.map +1 -1
  4. package/dist/cjs/mods/security/src/components/cache/cacheSys.utils.js +10 -0
  5. package/dist/cjs/mods/security/src/components/cache/cacheSys.utils.js.map +1 -1
  6. package/dist/cjs/mods/security/src/components/cache/index.js +10 -2
  7. package/dist/cjs/mods/security/src/components/cache/index.js.map +1 -1
  8. package/dist/cjs/mods/security/src/components/fortified-function/index.js +9 -0
  9. package/dist/cjs/mods/security/src/components/fortified-function/index.js.map +1 -1
  10. package/dist/cjs/mods/security/src/components/fortified-function/security/security-handler.js +10 -0
  11. package/dist/cjs/mods/security/src/components/fortified-function/security/security-handler.js.map +1 -1
  12. package/dist/cjs/mods/security/src/core/crypto.js +14 -0
  13. package/dist/cjs/mods/security/src/core/crypto.js.map +1 -1
  14. package/dist/cjs/mods/security/src/index.js +10 -1
  15. package/dist/cjs/mods/security/src/index.js.map +1 -1
  16. package/dist/cjs/shared/logger/Logger.js +372 -29
  17. package/dist/cjs/shared/logger/Logger.js.map +1 -1
  18. package/dist/cjs/src/cluster/bun-cluster-manager.js +91 -1
  19. package/dist/cjs/src/cluster/bun-cluster-manager.js.map +1 -1
  20. package/dist/cjs/src/cluster/cluster-manager.js +15 -3
  21. package/dist/cjs/src/cluster/cluster-manager.js.map +1 -1
  22. package/dist/cjs/src/cluster/modules/AutoScaler.js +4 -4
  23. package/dist/cjs/src/cluster/modules/AutoScaler.js.map +1 -1
  24. package/dist/cjs/src/cluster/modules/CrossPlatformMemory.js +2 -2
  25. package/dist/cjs/src/cluster/modules/CrossPlatformMemory.js.map +1 -1
  26. package/dist/cjs/src/cluster/modules/EventLoopMonitor.js +270 -0
  27. package/dist/cjs/src/cluster/modules/EventLoopMonitor.js.map +1 -0
  28. package/dist/cjs/src/cluster/modules/GCStatsTracker.js +200 -0
  29. package/dist/cjs/src/cluster/modules/GCStatsTracker.js.map +1 -0
  30. package/dist/cjs/src/cluster/modules/HeapStatsCollector.js +111 -0
  31. package/dist/cjs/src/cluster/modules/HeapStatsCollector.js.map +1 -0
  32. package/dist/cjs/src/cluster/modules/NetworkTracker.js +162 -0
  33. package/dist/cjs/src/cluster/modules/NetworkTracker.js.map +1 -0
  34. package/dist/cjs/src/cluster/modules/ThroughputCalculator.js +186 -0
  35. package/dist/cjs/src/cluster/modules/ThroughputCalculator.js.map +1 -0
  36. package/dist/cjs/src/cluster/modules/WorkerManager.js +14 -15
  37. package/dist/cjs/src/cluster/modules/WorkerManager.js.map +1 -1
  38. package/dist/cjs/src/cluster/modules/{LoadBalancer.js → strategy/LoadBalancer.js} +1 -1
  39. package/dist/cjs/src/cluster/modules/strategy/LoadBalancer.js.map +1 -0
  40. package/dist/cjs/src/middleware/built-in/sqlInjection.js +335 -0
  41. package/dist/cjs/src/middleware/built-in/sqlInjection.js.map +1 -0
  42. package/dist/cjs/src/middleware/safe-json-middleware.js +1 -1
  43. package/dist/cjs/src/middleware/safe-json-middleware.js.map +1 -1
  44. package/dist/cjs/src/middleware/security-middleware.js +447 -332
  45. package/dist/cjs/src/middleware/security-middleware.js.map +1 -1
  46. package/dist/cjs/src/plugins/modules/index.js +9 -3
  47. package/dist/cjs/src/plugins/modules/index.js.map +1 -1
  48. package/dist/cjs/src/server/FastServer.js +41 -1
  49. package/dist/cjs/src/server/FastServer.js.map +1 -1
  50. package/dist/cjs/src/server/ServerFactory.js +62 -2
  51. package/dist/cjs/src/server/ServerFactory.js.map +1 -1
  52. package/dist/cjs/src/server/components/fastapi/ClusterManagerComponent.js +32 -6
  53. package/dist/cjs/src/server/components/fastapi/ClusterManagerComponent.js.map +1 -1
  54. package/dist/cjs/src/server/components/fastapi/WorkerPoolComponent.js +206 -0
  55. package/dist/cjs/src/server/components/fastapi/WorkerPoolComponent.js.map +1 -0
  56. package/dist/cjs/src/server/components/fastapi/console/ConsoleInterceptor.js +3 -28
  57. package/dist/cjs/src/server/components/fastapi/console/ConsoleInterceptor.js.map +1 -1
  58. package/dist/cjs/src/server/components/fastapi/modules/UFRP/WorkerPoolManager.js +265 -0
  59. package/dist/cjs/src/server/components/fastapi/modules/UFRP/WorkerPoolManager.js.map +1 -0
  60. package/dist/cjs/src/server/components/fastapi/modules/UFRP/workers/Logger.js +236 -0
  61. package/dist/cjs/src/server/components/fastapi/modules/UFRP/workers/cpu-tasks.js +294 -0
  62. package/dist/cjs/src/server/components/fastapi/modules/UFRP/workers/enhanced-cpu-worker.js +433 -0
  63. package/dist/cjs/src/server/components/fastapi/modules/UFRP/workers/io-worker.js +1615 -0
  64. package/dist/cjs/src/server/components/lifecycle/ServerLifecycleManager.js +143 -24
  65. package/dist/cjs/src/server/components/lifecycle/ServerLifecycleManager.js.map +1 -1
  66. package/dist/cjs/src/server/const/default.js +23 -9
  67. package/dist/cjs/src/server/const/default.js.map +1 -1
  68. package/dist/cjs/src/server/core/HttpServer.js +8 -8
  69. package/dist/cjs/src/server/core/HttpServer.js.map +1 -1
  70. package/dist/cjs/src/server/core/XyprissApp.js +284 -17
  71. package/dist/cjs/src/server/core/XyprissApp.js.map +1 -1
  72. package/dist/cjs/src/server/handlers/NotFoundHandler.js +1 -1
  73. package/dist/cjs/src/server/handlers/NotFoundHandler.js.map +1 -1
  74. package/dist/cjs/src/server/middleware/MiddlewareManager.js +57 -12
  75. package/dist/cjs/src/server/middleware/MiddlewareManager.js.map +1 -1
  76. package/dist/cjs/src/server/utils/forceClosePort.js +1 -1
  77. package/dist/cjs/src/server/utils/forceClosePort.js.map +1 -1
  78. package/dist/esm/mods/security/src/algorithms/hash-algorithms.js +10 -0
  79. package/dist/esm/mods/security/src/algorithms/hash-algorithms.js.map +1 -1
  80. package/dist/esm/mods/security/src/components/cache/cacheSys.utils.js +10 -0
  81. package/dist/esm/mods/security/src/components/cache/cacheSys.utils.js.map +1 -1
  82. package/dist/esm/mods/security/src/components/cache/index.js +10 -2
  83. package/dist/esm/mods/security/src/components/cache/index.js.map +1 -1
  84. package/dist/esm/mods/security/src/components/fortified-function/index.js +9 -0
  85. package/dist/esm/mods/security/src/components/fortified-function/index.js.map +1 -1
  86. package/dist/esm/mods/security/src/components/fortified-function/security/security-handler.js +10 -0
  87. package/dist/esm/mods/security/src/components/fortified-function/security/security-handler.js.map +1 -1
  88. package/dist/esm/mods/security/src/core/crypto.js +14 -0
  89. package/dist/esm/mods/security/src/core/crypto.js.map +1 -1
  90. package/dist/esm/mods/security/src/index.js +10 -1
  91. package/dist/esm/mods/security/src/index.js.map +1 -1
  92. package/dist/esm/shared/logger/Logger.js +372 -29
  93. package/dist/esm/shared/logger/Logger.js.map +1 -1
  94. package/dist/esm/src/cluster/bun-cluster-manager.js +91 -1
  95. package/dist/esm/src/cluster/bun-cluster-manager.js.map +1 -1
  96. package/dist/esm/src/cluster/cluster-manager.js +15 -3
  97. package/dist/esm/src/cluster/cluster-manager.js.map +1 -1
  98. package/dist/esm/src/cluster/modules/AutoScaler.js +4 -4
  99. package/dist/esm/src/cluster/modules/AutoScaler.js.map +1 -1
  100. package/dist/esm/src/cluster/modules/CrossPlatformMemory.js +2 -2
  101. package/dist/esm/src/cluster/modules/CrossPlatformMemory.js.map +1 -1
  102. package/dist/esm/src/cluster/modules/EventLoopMonitor.js +268 -0
  103. package/dist/esm/src/cluster/modules/EventLoopMonitor.js.map +1 -0
  104. package/dist/esm/src/cluster/modules/GCStatsTracker.js +198 -0
  105. package/dist/esm/src/cluster/modules/GCStatsTracker.js.map +1 -0
  106. package/dist/esm/src/cluster/modules/HeapStatsCollector.js +109 -0
  107. package/dist/esm/src/cluster/modules/HeapStatsCollector.js.map +1 -0
  108. package/dist/esm/src/cluster/modules/NetworkTracker.js +160 -0
  109. package/dist/esm/src/cluster/modules/NetworkTracker.js.map +1 -0
  110. package/dist/esm/src/cluster/modules/ThroughputCalculator.js +184 -0
  111. package/dist/esm/src/cluster/modules/ThroughputCalculator.js.map +1 -0
  112. package/dist/esm/src/cluster/modules/WorkerManager.js +14 -14
  113. package/dist/esm/src/cluster/modules/WorkerManager.js.map +1 -1
  114. package/dist/esm/src/cluster/modules/{LoadBalancer.js → strategy/LoadBalancer.js} +1 -1
  115. package/dist/esm/src/cluster/modules/strategy/LoadBalancer.js.map +1 -0
  116. package/dist/esm/src/middleware/built-in/sqlInjection.js +333 -0
  117. package/dist/esm/src/middleware/built-in/sqlInjection.js.map +1 -0
  118. package/dist/esm/src/middleware/safe-json-middleware.js +1 -1
  119. package/dist/esm/src/middleware/safe-json-middleware.js.map +1 -1
  120. package/dist/esm/src/middleware/security-middleware.js +447 -332
  121. package/dist/esm/src/middleware/security-middleware.js.map +1 -1
  122. package/dist/esm/src/plugins/modules/index.js +9 -3
  123. package/dist/esm/src/plugins/modules/index.js.map +1 -1
  124. package/dist/esm/src/server/FastServer.js +41 -1
  125. package/dist/esm/src/server/FastServer.js.map +1 -1
  126. package/dist/esm/src/server/ServerFactory.js +62 -2
  127. package/dist/esm/src/server/ServerFactory.js.map +1 -1
  128. package/dist/esm/src/server/components/fastapi/ClusterManagerComponent.js +32 -6
  129. package/dist/esm/src/server/components/fastapi/ClusterManagerComponent.js.map +1 -1
  130. package/dist/esm/src/server/components/fastapi/WorkerPoolComponent.js +204 -0
  131. package/dist/esm/src/server/components/fastapi/WorkerPoolComponent.js.map +1 -0
  132. package/dist/esm/src/server/components/fastapi/console/ConsoleInterceptor.js +2 -27
  133. package/dist/esm/src/server/components/fastapi/console/ConsoleInterceptor.js.map +1 -1
  134. package/dist/esm/src/server/components/fastapi/modules/UFRP/WorkerPoolManager.js +263 -0
  135. package/dist/esm/src/server/components/fastapi/modules/UFRP/WorkerPoolManager.js.map +1 -0
  136. package/dist/esm/src/server/components/fastapi/modules/UFRP/workers/Logger.js +236 -0
  137. package/dist/esm/src/server/components/fastapi/modules/UFRP/workers/cpu-tasks.js +294 -0
  138. package/dist/esm/src/server/components/fastapi/modules/UFRP/workers/enhanced-cpu-worker.js +433 -0
  139. package/dist/esm/src/server/components/fastapi/modules/UFRP/workers/io-worker.js +1615 -0
  140. package/dist/esm/src/server/components/lifecycle/ServerLifecycleManager.js +143 -24
  141. package/dist/esm/src/server/components/lifecycle/ServerLifecycleManager.js.map +1 -1
  142. package/dist/esm/src/server/const/default.js +23 -9
  143. package/dist/esm/src/server/const/default.js.map +1 -1
  144. package/dist/esm/src/server/core/HttpServer.js +8 -8
  145. package/dist/esm/src/server/core/HttpServer.js.map +1 -1
  146. package/dist/esm/src/server/core/XyprissApp.js +284 -17
  147. package/dist/esm/src/server/core/XyprissApp.js.map +1 -1
  148. package/dist/esm/src/server/handlers/NotFoundHandler.js +1 -1
  149. package/dist/esm/src/server/handlers/NotFoundHandler.js.map +1 -1
  150. package/dist/esm/src/server/middleware/MiddlewareManager.js +57 -12
  151. package/dist/esm/src/server/middleware/MiddlewareManager.js.map +1 -1
  152. package/dist/esm/src/server/utils/forceClosePort.js +1 -1
  153. package/dist/esm/src/server/utils/forceClosePort.js.map +1 -1
  154. package/dist/index.d.ts +675 -516
  155. package/package.json +9 -9
  156. package/dist/cjs/src/cluster/index.js +0 -361
  157. package/dist/cjs/src/cluster/index.js.map +0 -1
  158. package/dist/cjs/src/cluster/modules/ClusterFactory.js +0 -539
  159. package/dist/cjs/src/cluster/modules/ClusterFactory.js.map +0 -1
  160. package/dist/cjs/src/cluster/modules/LoadBalancer.js.map +0 -1
  161. package/dist/cjs/src/server/components/fastapi/UltraFastRequestProcessor.js +0 -668
  162. package/dist/cjs/src/server/components/fastapi/UltraFastRequestProcessor.js.map +0 -1
  163. package/dist/cjs/src/server/components/fastapi/middlewares/MiddlewareAPI.js +0 -347
  164. package/dist/cjs/src/server/components/fastapi/middlewares/MiddlewareAPI.js.map +0 -1
  165. package/dist/cjs/src/server/components/fastapi/middlewares/MiddlewareMethodsManager.js +0 -204
  166. package/dist/cjs/src/server/components/fastapi/middlewares/MiddlewareMethodsManager.js.map +0 -1
  167. package/dist/cjs/src/server/components/fastapi/middlewares/middlewareManager.js +0 -953
  168. package/dist/cjs/src/server/components/fastapi/middlewares/middlewareManager.js.map +0 -1
  169. package/dist/cjs/src/server/components/fastapi/modules/UFRP/WorkerPool.js +0 -56
  170. package/dist/cjs/src/server/components/fastapi/modules/UFRP/WorkerPool.js.map +0 -1
  171. package/dist/esm/src/cluster/index.js +0 -339
  172. package/dist/esm/src/cluster/index.js.map +0 -1
  173. package/dist/esm/src/cluster/modules/ClusterFactory.js +0 -511
  174. package/dist/esm/src/cluster/modules/ClusterFactory.js.map +0 -1
  175. package/dist/esm/src/cluster/modules/LoadBalancer.js.map +0 -1
  176. package/dist/esm/src/server/components/fastapi/UltraFastRequestProcessor.js +0 -647
  177. package/dist/esm/src/server/components/fastapi/UltraFastRequestProcessor.js.map +0 -1
  178. package/dist/esm/src/server/components/fastapi/middlewares/MiddlewareAPI.js +0 -345
  179. package/dist/esm/src/server/components/fastapi/middlewares/MiddlewareAPI.js.map +0 -1
  180. package/dist/esm/src/server/components/fastapi/middlewares/MiddlewareMethodsManager.js +0 -202
  181. package/dist/esm/src/server/components/fastapi/middlewares/MiddlewareMethodsManager.js.map +0 -1
  182. package/dist/esm/src/server/components/fastapi/middlewares/middlewareManager.js +0 -951
  183. package/dist/esm/src/server/components/fastapi/middlewares/middlewareManager.js.map +0 -1
  184. package/dist/esm/src/server/components/fastapi/modules/UFRP/WorkerPool.js +0 -54
  185. package/dist/esm/src/server/components/fastapi/modules/UFRP/WorkerPool.js.map +0 -1
@@ -0,0 +1,236 @@
1
+ export class Logger {
2
+ constructor(config) {
3
+ const defaultConfig = {
4
+ enabled: true,
5
+ level: "info",
6
+ components: {
7
+ server: true,
8
+ cache: true,
9
+ cluster: true,
10
+ performance: true,
11
+ fileWatcher: true,
12
+ plugins: true,
13
+ security: true,
14
+ monitoring: true,
15
+ routes: true,
16
+ userApp: true,
17
+ console: false, // Console interception system logs (can be verbose)
18
+ ipc: true, // Inter-process communication logs
19
+ memory: true, // Memory monitoring and detection logs
20
+ lifecycle: true, // Server lifecycle management logs
21
+ routing: true, // Fast routing system logs
22
+ },
23
+ types: {
24
+ startup: true,
25
+ warnings: true,
26
+ errors: true,
27
+ performance: true,
28
+ debug: false,
29
+ hotReload: true,
30
+ portSwitching: true,
31
+ },
32
+ format: {
33
+ timestamps: false,
34
+ colors: true,
35
+ prefix: true,
36
+ compact: false,
37
+ },
38
+ };
39
+ this.config = this.deepMerge(defaultConfig, config || {});
40
+ }
41
+ /**
42
+ * Get or create singleton instance
43
+ */
44
+ static getInstance(config) {
45
+ if (!Logger.instance) {
46
+ Logger.instance = new Logger(config);
47
+ }
48
+ else if (config) {
49
+ Logger.instance.updateConfig(config);
50
+ }
51
+ return Logger.instance;
52
+ }
53
+ /**
54
+ * Deep merge two objects
55
+ */
56
+ deepMerge(target, source) {
57
+ const result = { ...target };
58
+ for (const key in source) {
59
+ if (source[key] &&
60
+ typeof source[key] === "object" &&
61
+ !Array.isArray(source[key])) {
62
+ result[key] = this.deepMerge(target[key] || {}, source[key]);
63
+ }
64
+ else {
65
+ result[key] = source[key];
66
+ }
67
+ }
68
+ return result;
69
+ }
70
+ /**
71
+ * Update logger configuration
72
+ */
73
+ updateConfig(config) {
74
+ this.config = this.deepMerge(this.config, config || {});
75
+ }
76
+ /**
77
+ * Get current logger configuration (for debugging)
78
+ */
79
+ getConfig() {
80
+ return this.config;
81
+ }
82
+ /**
83
+ * Check if logging is enabled for a specific component and type
84
+ */
85
+ shouldLog(level, component, type) {
86
+ // Master switch
87
+ if (!this.config?.enabled)
88
+ return false;
89
+ // Silent mode
90
+ // if (this.config?.level === "silent") return false;
91
+ // Always show errors unless silent
92
+ if (level === "error" &&
93
+ this.config?.level &&
94
+ this.config?.level !== "silent")
95
+ return true;
96
+ // Check log level hierarchy
97
+ const levels = [
98
+ "error",
99
+ "warn",
100
+ "info",
101
+ "debug",
102
+ "verbose",
103
+ ];
104
+ const currentLevelIndex = levels.indexOf(this.config?.level);
105
+ const messageLevelIndex = levels.indexOf(level);
106
+ if (messageLevelIndex > currentLevelIndex)
107
+ return false;
108
+ // Check component-specific settings
109
+ if (this.config?.components &&
110
+ this.config?.components[component] === false)
111
+ return false;
112
+ // Check type-specific settings
113
+ if (type && this.config?.types && this.config?.types[type] === false)
114
+ return false;
115
+ return true;
116
+ }
117
+ /**
118
+ * Format log message
119
+ */
120
+ formatMessage(level, component, message) {
121
+ const colors = {
122
+ error: "\x1b[31m", // Red
123
+ warn: "\x1b[33m", // Yellow
124
+ info: "\x1b[36m", // Cyan
125
+ debug: "\x1b[35m", // Magenta
126
+ verbose: "\x1b[37m", // White
127
+ reset: "\x1b[0m", // Reset
128
+ sys: "\x1b[32m",
129
+ };
130
+ let formatted = message;
131
+ if (this.config?.format?.prefix && !this.config?.format?.compact) {
132
+ const prefix = `[${component === "server"
133
+ ? "SYSTEM".toUpperCase()
134
+ : component.toUpperCase()}]`;
135
+ if (level === "silent") {
136
+ formatted = `${prefix} ${message}`;
137
+ }
138
+ else {
139
+ if (component === "server") {
140
+ const color = colors[level] || colors.info;
141
+ formatted = `${colors.sys}${prefix}${colors.reset} ${color}${message}${colors.reset}`;
142
+ }
143
+ else {
144
+ formatted = `${prefix} ${message}`;
145
+ }
146
+ }
147
+ }
148
+ if (this.config?.format?.timestamps) {
149
+ const timestamp = new Date().toISOString();
150
+ formatted = `${timestamp} ${formatted}`;
151
+ }
152
+ if (this.config?.format?.colors &&
153
+ level !== "silent" &&
154
+ typeof process !== "undefined" &&
155
+ process.stdout?.isTTY) {
156
+ const color = colors[level] || colors.info;
157
+ formatted = `${color}${formatted}${colors.reset}`;
158
+ }
159
+ return formatted;
160
+ }
161
+ /**
162
+ * Log a message
163
+ */
164
+ log(level, component, type, message, ...args) {
165
+ if (!this.shouldLog(level, component, type))
166
+ return;
167
+ if (this.config?.customLogger) {
168
+ this.config?.customLogger(level, component, message, ...args);
169
+ return;
170
+ }
171
+ const formatted = this.formatMessage(level, component, message);
172
+ switch (level) {
173
+ case "error":
174
+ console.error(formatted, ...args);
175
+ break;
176
+ case "warn":
177
+ console.warn(formatted, ...args);
178
+ break;
179
+ default:
180
+ console.log(formatted, ...args);
181
+ break;
182
+ }
183
+ }
184
+ // Public logging methods
185
+ error(component, message, ...args) {
186
+ this.log("error", component, "errors", message, ...args);
187
+ }
188
+ warn(component, message, ...args) {
189
+ this.log("warn", component, "warnings", message, ...args);
190
+ }
191
+ info(component, message, ...args) {
192
+ this.log("info", component, undefined, message, ...args);
193
+ }
194
+ debug(component, message, ...args) {
195
+ this.log("debug", component, "debug", message, ...args);
196
+ }
197
+ startup(component, message, ...args) {
198
+ this.log("info", component, "startup", message, ...args);
199
+ }
200
+ performance(component, message, ...args) {
201
+ this.log("info", component, "performance", message, ...args);
202
+ }
203
+ hotReload(component, message, ...args) {
204
+ this.log("info", component, "hotReload", message, ...args);
205
+ }
206
+ portSwitching(component, message, ...args) {
207
+ this.log("info", component, "portSwitching", message, ...args);
208
+ }
209
+ securityWarning(message, ...args) {
210
+ this.log("warn", "security", "warnings", message, ...args);
211
+ }
212
+ // Utility methods
213
+ isEnabled() {
214
+ return this.config?.enabled || false;
215
+ }
216
+ getLevel() {
217
+ return this.config?.level || "info";
218
+ }
219
+ isComponentEnabled(component) {
220
+ return this.config?.components?.[component] !== false;
221
+ }
222
+ isTypeEnabled(type) {
223
+ return this.config?.types?.[type] !== false;
224
+ }
225
+ }
226
+ /**
227
+ * Global logger instance
228
+ */
229
+ export const logger = Logger.getInstance();
230
+ /**
231
+ * Initialize logger with configuration
232
+ */
233
+ export function initializeLogger(config) {
234
+ return Logger.getInstance(config);
235
+ }
236
+ //# sourceMappingURL=Logger.js.map
@@ -0,0 +1,294 @@
1
+ /**
2
+ * Real CPU-Intensive Task Implementations
3
+ * These replace the mock implementations with actual CPU-intensive operations
4
+ */
5
+
6
+ const crypto = require("crypto");
7
+
8
+ /**
9
+ * Real CPU-intensive data processing tasks
10
+ */
11
+
12
+ /**
13
+ * Prime number calculation - CPU intensive
14
+ */
15
+ function calculatePrimes(limit) {
16
+ const primes = [];
17
+ const sieve = new Array(limit + 1).fill(true);
18
+ sieve[0] = sieve[1] = false;
19
+
20
+ for (let i = 2; i * i <= limit; i++) {
21
+ if (sieve[i]) {
22
+ for (let j = i * i; j <= limit; j += i) {
23
+ sieve[j] = false;
24
+ }
25
+ }
26
+ }
27
+
28
+ for (let i = 2; i <= limit; i++) {
29
+ if (sieve[i]) primes.push(i);
30
+ }
31
+
32
+ return primes;
33
+ }
34
+
35
+ /**
36
+ * Fibonacci sequence calculation - CPU intensive
37
+ */
38
+ function calculateFibonacci(n) {
39
+ if (n <= 1) return n;
40
+
41
+ let a = 0,
42
+ b = 1;
43
+ const sequence = [a, b];
44
+
45
+ for (let i = 2; i < n; i++) {
46
+ const next = a + b;
47
+ sequence.push(next);
48
+ a = b;
49
+ b = next;
50
+ }
51
+
52
+ return sequence;
53
+ }
54
+
55
+ /**
56
+ * Matrix multiplication - CPU intensive
57
+ */
58
+ function multiplyMatrices(matrixA, matrixB) {
59
+ const rowsA = matrixA.length;
60
+ const colsA = matrixA[0].length;
61
+ const rowsB = matrixB.length;
62
+ const colsB = matrixB[0].length;
63
+
64
+ if (colsA !== rowsB) {
65
+ throw new Error("Matrix dimensions don't match for multiplication");
66
+ }
67
+
68
+ const result = Array(rowsA)
69
+ .fill()
70
+ .map(() => Array(colsB).fill(0));
71
+
72
+ for (let i = 0; i < rowsA; i++) {
73
+ for (let j = 0; j < colsB; j++) {
74
+ for (let k = 0; k < colsA; k++) {
75
+ result[i][j] += matrixA[i][k] * matrixB[k][j];
76
+ }
77
+ }
78
+ }
79
+
80
+ return result;
81
+ }
82
+
83
+ /**
84
+ * Hash computation - CPU intensive
85
+ */
86
+ function computeHashes(data, iterations = 10000) {
87
+ let hash = crypto
88
+ .createHash("sha256")
89
+ .update(JSON.stringify(data))
90
+ .digest("hex");
91
+
92
+ for (let i = 0; i < iterations; i++) {
93
+ hash = crypto.createHash("sha256").update(hash).digest("hex");
94
+ }
95
+
96
+ return hash;
97
+ }
98
+
99
+ /**
100
+ * Data sorting and analysis - CPU intensive
101
+ */
102
+ function analyzeDataset(dataset) {
103
+ if (!Array.isArray(dataset) || dataset.length === 0) {
104
+ return { error: "Invalid dataset" };
105
+ }
106
+
107
+ // Sort the dataset
108
+ const sorted = [...dataset].sort((a, b) => a - b);
109
+
110
+ // Calculate statistics
111
+ const sum = dataset.reduce((acc, val) => acc + val, 0);
112
+ const mean = sum / dataset.length;
113
+ const median =
114
+ sorted.length % 2 === 0
115
+ ? (sorted[sorted.length / 2 - 1] + sorted[sorted.length / 2]) / 2
116
+ : sorted[Math.floor(sorted.length / 2)];
117
+
118
+ // Calculate standard deviation
119
+ const variance =
120
+ dataset.reduce((acc, val) => acc + Math.pow(val - mean, 2), 0) /
121
+ dataset.length;
122
+ const stdDev = Math.sqrt(variance);
123
+
124
+ return {
125
+ count: dataset.length,
126
+ sum,
127
+ mean,
128
+ median,
129
+ min: sorted[0],
130
+ max: sorted[sorted.length - 1],
131
+ standardDeviation: stdDev,
132
+ variance,
133
+ sorted: sorted.slice(0, 100), // Return first 100 sorted values
134
+ };
135
+ }
136
+
137
+ /**
138
+ * Text processing and analysis - CPU intensive
139
+ */
140
+ function analyzeText(text) {
141
+ if (typeof text !== "string") {
142
+ return { error: "Invalid text input" };
143
+ }
144
+
145
+ const words = text.toLowerCase().match(/\b\w+\b/g) || [];
146
+ const wordCount = {};
147
+ const charCount = {};
148
+
149
+ // Count words
150
+ words.forEach((word) => {
151
+ wordCount[word] = (wordCount[word] || 0) + 1;
152
+ });
153
+
154
+ // Count characters
155
+ for (const char of text.toLowerCase()) {
156
+ if (char.match(/[a-z]/)) {
157
+ charCount[char] = (charCount[char] || 0) + 1;
158
+ }
159
+ }
160
+
161
+ // Find most common words
162
+ const sortedWords = Object.entries(wordCount)
163
+ .sort(([, a], [, b]) => b - a)
164
+ .slice(0, 10);
165
+
166
+ return {
167
+ totalWords: words.length,
168
+ uniqueWords: Object.keys(wordCount).length,
169
+ totalCharacters: text.length,
170
+ alphabeticCharacters: Object.values(charCount).reduce(
171
+ (a, b) => a + b,
172
+ 0
173
+ ),
174
+ mostCommonWords: sortedWords,
175
+ averageWordLength:
176
+ words.reduce((acc, word) => acc + word.length, 0) / words.length,
177
+ wordFrequency: wordCount,
178
+ };
179
+ }
180
+
181
+ /**
182
+ * Image processing simulation - CPU intensive
183
+ */
184
+ function processImageData(imageData) {
185
+ if (
186
+ !imageData ||
187
+ !imageData.width ||
188
+ !imageData.height ||
189
+ !imageData.pixels
190
+ ) {
191
+ return { error: "Invalid image data" };
192
+ }
193
+
194
+ const { width, height, pixels } = imageData;
195
+ const processedPixels = [];
196
+
197
+ // Apply a simple blur filter (CPU intensive)
198
+ for (let y = 1; y < height - 1; y++) {
199
+ for (let x = 1; x < width - 1; x++) {
200
+ const index = y * width + x;
201
+
202
+ // Get surrounding pixels
203
+ const surrounding = [
204
+ pixels[index - width - 1],
205
+ pixels[index - width],
206
+ pixels[index - width + 1],
207
+ pixels[index - 1],
208
+ pixels[index],
209
+ pixels[index + 1],
210
+ pixels[index + width - 1],
211
+ pixels[index + width],
212
+ pixels[index + width + 1],
213
+ ];
214
+
215
+ // Calculate average (blur effect)
216
+ const average =
217
+ surrounding.reduce((sum, pixel) => sum + pixel, 0) / 9;
218
+ processedPixels[index] = Math.round(average);
219
+ }
220
+ }
221
+
222
+ return {
223
+ width,
224
+ height,
225
+ originalPixelCount: pixels.length,
226
+ processedPixelCount: processedPixels.length,
227
+ processingType: "blur_filter",
228
+ checksum: crypto
229
+ .createHash("md5")
230
+ .update(processedPixels.join(","))
231
+ .digest("hex"),
232
+ };
233
+ }
234
+
235
+ /**
236
+ * Cryptographic operations - CPU intensive
237
+ */
238
+ function performCryptographicOperations(data, operations = 1000) {
239
+ const results = {
240
+ hashes: [],
241
+ encryptions: [],
242
+ signatures: [],
243
+ };
244
+
245
+ const dataString = JSON.stringify(data);
246
+
247
+ // Generate multiple hashes
248
+ for (let i = 0; i < operations; i++) {
249
+ const hash = crypto
250
+ .createHash("sha256")
251
+ .update(dataString + i)
252
+ .digest("hex");
253
+ results.hashes.push(hash);
254
+ }
255
+
256
+ // Perform encryption operations
257
+ for (let i = 0; i < Math.min(operations, 100); i++) {
258
+ const key = crypto.randomBytes(32);
259
+ const iv = crypto.randomBytes(16);
260
+ const cipher = crypto.createCipheriv("aes-256-cbc", key, iv);
261
+
262
+ let encrypted = cipher.update(dataString, "utf8", "hex");
263
+ encrypted += cipher.final("hex");
264
+
265
+ results.encryptions.push({
266
+ encrypted: encrypted.substring(0, 32), // Store only first 32 chars
267
+ keyHash: crypto
268
+ .createHash("sha256")
269
+ .update(key)
270
+ .digest("hex")
271
+ .substring(0, 16),
272
+ });
273
+ }
274
+
275
+ return {
276
+ operationsPerformed: operations,
277
+ hashCount: results.hashes.length,
278
+ encryptionCount: results.encryptions.length,
279
+ totalProcessingTime: Date.now(),
280
+ finalHash: results.hashes[results.hashes.length - 1],
281
+ };
282
+ }
283
+
284
+ module.exports = {
285
+ calculatePrimes,
286
+ calculateFibonacci,
287
+ multiplyMatrices,
288
+ computeHashes,
289
+ analyzeDataset,
290
+ analyzeText,
291
+ processImageData,
292
+ performCryptographicOperations,
293
+ };
294
+