nmtjs 0.16.0 → 0.17.0-beta.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 (224) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +41 -1
  3. package/dist/index.d.ts +22 -121
  4. package/dist/index.js +24 -53
  5. package/dist/index.js.map +1 -1
  6. package/package.json +11 -63
  7. package/src/index.ts +71 -91
  8. package/bin/cli.js +0 -2
  9. package/dist/cli.d.ts +0 -1
  10. package/dist/cli.js +0 -137
  11. package/dist/cli.js.map +0 -1
  12. package/dist/codegen.d.ts +0 -5
  13. package/dist/codegen.js +0 -18
  14. package/dist/codegen.js.map +0 -1
  15. package/dist/config.d.ts +0 -47
  16. package/dist/config.js +0 -16
  17. package/dist/config.js.map +0 -1
  18. package/dist/entrypoints/cli.d.ts +0 -1
  19. package/dist/entrypoints/cli.js +0 -12
  20. package/dist/entrypoints/cli.js.map +0 -1
  21. package/dist/entrypoints/main.d.ts +0 -5
  22. package/dist/entrypoints/main.js +0 -248
  23. package/dist/entrypoints/main.js.map +0 -1
  24. package/dist/entrypoints/thread.d.ts +0 -16
  25. package/dist/entrypoints/thread.js +0 -182
  26. package/dist/entrypoints/thread.js.map +0 -1
  27. package/dist/entrypoints/worker.d.ts +0 -9
  28. package/dist/entrypoints/worker.js +0 -143
  29. package/dist/entrypoints/worker.js.map +0 -1
  30. package/dist/resolver.d.ts +0 -2
  31. package/dist/resolver.js +0 -7
  32. package/dist/resolver.js.map +0 -1
  33. package/dist/runtime/application/index.d.ts +0 -1
  34. package/dist/runtime/application/index.js +0 -2
  35. package/dist/runtime/application/index.js.map +0 -1
  36. package/dist/runtime/constants.d.ts +0 -8
  37. package/dist/runtime/constants.js +0 -5
  38. package/dist/runtime/constants.js.map +0 -1
  39. package/dist/runtime/enums.d.ts +0 -10
  40. package/dist/runtime/enums.js +0 -13
  41. package/dist/runtime/enums.js.map +0 -1
  42. package/dist/runtime/hooks.d.ts +0 -1
  43. package/dist/runtime/hooks.js +0 -2
  44. package/dist/runtime/hooks.js.map +0 -1
  45. package/dist/runtime/index.d.ts +0 -28
  46. package/dist/runtime/index.js +0 -29
  47. package/dist/runtime/index.js.map +0 -1
  48. package/dist/runtime/injectables.d.ts +0 -28
  49. package/dist/runtime/injectables.js +0 -24
  50. package/dist/runtime/injectables.js.map +0 -1
  51. package/dist/runtime/jobs/job.d.ts +0 -146
  52. package/dist/runtime/jobs/job.js +0 -89
  53. package/dist/runtime/jobs/job.js.map +0 -1
  54. package/dist/runtime/jobs/manager.d.ts +0 -131
  55. package/dist/runtime/jobs/manager.js +0 -309
  56. package/dist/runtime/jobs/manager.js.map +0 -1
  57. package/dist/runtime/jobs/router.d.ts +0 -296
  58. package/dist/runtime/jobs/router.js +0 -458
  59. package/dist/runtime/jobs/router.js.map +0 -1
  60. package/dist/runtime/jobs/runner.d.ts +0 -103
  61. package/dist/runtime/jobs/runner.js +0 -425
  62. package/dist/runtime/jobs/runner.js.map +0 -1
  63. package/dist/runtime/jobs/step.d.ts +0 -26
  64. package/dist/runtime/jobs/step.js +0 -18
  65. package/dist/runtime/jobs/step.js.map +0 -1
  66. package/dist/runtime/jobs/types.d.ts +0 -86
  67. package/dist/runtime/jobs/types.js +0 -5
  68. package/dist/runtime/jobs/types.js.map +0 -1
  69. package/dist/runtime/metrics/metric.d.ts +0 -8
  70. package/dist/runtime/metrics/metric.js +0 -11
  71. package/dist/runtime/metrics/metric.js.map +0 -1
  72. package/dist/runtime/metrics/registry.d.ts +0 -3
  73. package/dist/runtime/metrics/registry.js +0 -5
  74. package/dist/runtime/metrics/registry.js.map +0 -1
  75. package/dist/runtime/metrics/server.d.ts +0 -7
  76. package/dist/runtime/metrics/server.js +0 -53
  77. package/dist/runtime/metrics/server.js.map +0 -1
  78. package/dist/runtime/plugin.d.ts +0 -2
  79. package/dist/runtime/plugin.js +0 -2
  80. package/dist/runtime/plugin.js.map +0 -1
  81. package/dist/runtime/runtime.d.ts +0 -27
  82. package/dist/runtime/runtime.js +0 -77
  83. package/dist/runtime/runtime.js.map +0 -1
  84. package/dist/runtime/scheduler/index.d.ts +0 -22
  85. package/dist/runtime/scheduler/index.js +0 -20
  86. package/dist/runtime/scheduler/index.js.map +0 -1
  87. package/dist/runtime/server/applications.d.ts +0 -91
  88. package/dist/runtime/server/applications.js +0 -171
  89. package/dist/runtime/server/applications.js.map +0 -1
  90. package/dist/runtime/server/config.d.ts +0 -148
  91. package/dist/runtime/server/config.js +0 -33
  92. package/dist/runtime/server/config.js.map +0 -1
  93. package/dist/runtime/server/environment.d.ts +0 -43
  94. package/dist/runtime/server/environment.js +0 -33
  95. package/dist/runtime/server/environment.js.map +0 -1
  96. package/dist/runtime/server/error-policy.d.ts +0 -62
  97. package/dist/runtime/server/error-policy.js +0 -73
  98. package/dist/runtime/server/error-policy.js.map +0 -1
  99. package/dist/runtime/server/hmr-coordinator.d.ts +0 -37
  100. package/dist/runtime/server/hmr-coordinator.js +0 -94
  101. package/dist/runtime/server/hmr-coordinator.js.map +0 -1
  102. package/dist/runtime/server/jobs.d.ts +0 -54
  103. package/dist/runtime/server/jobs.js +0 -176
  104. package/dist/runtime/server/jobs.js.map +0 -1
  105. package/dist/runtime/server/lifecycle.d.ts +0 -85
  106. package/dist/runtime/server/lifecycle.js +0 -177
  107. package/dist/runtime/server/lifecycle.js.map +0 -1
  108. package/dist/runtime/server/managed-worker.d.ts +0 -158
  109. package/dist/runtime/server/managed-worker.js +0 -420
  110. package/dist/runtime/server/managed-worker.js.map +0 -1
  111. package/dist/runtime/server/pool-manager.d.ts +0 -85
  112. package/dist/runtime/server/pool-manager.js +0 -129
  113. package/dist/runtime/server/pool-manager.js.map +0 -1
  114. package/dist/runtime/server/proxy.d.ts +0 -21
  115. package/dist/runtime/server/proxy.js +0 -76
  116. package/dist/runtime/server/proxy.js.map +0 -1
  117. package/dist/runtime/server/server.d.ts +0 -60
  118. package/dist/runtime/server/server.js +0 -163
  119. package/dist/runtime/server/server.js.map +0 -1
  120. package/dist/runtime/server/types.d.ts +0 -31
  121. package/dist/runtime/server/types.js +0 -2
  122. package/dist/runtime/server/types.js.map +0 -1
  123. package/dist/runtime/server/worker-pool.d.ts +0 -121
  124. package/dist/runtime/server/worker-pool.js +0 -171
  125. package/dist/runtime/server/worker-pool.js.map +0 -1
  126. package/dist/runtime/store/index.d.ts +0 -3
  127. package/dist/runtime/store/index.js +0 -23
  128. package/dist/runtime/store/index.js.map +0 -1
  129. package/dist/runtime/subscription/manager.d.ts +0 -49
  130. package/dist/runtime/subscription/manager.js +0 -170
  131. package/dist/runtime/subscription/manager.js.map +0 -1
  132. package/dist/runtime/subscription/redis.d.ts +0 -18
  133. package/dist/runtime/subscription/redis.js +0 -120
  134. package/dist/runtime/subscription/redis.js.map +0 -1
  135. package/dist/runtime/types.d.ts +0 -95
  136. package/dist/runtime/types.js +0 -2
  137. package/dist/runtime/types.js.map +0 -1
  138. package/dist/runtime/workers/application.d.ts +0 -29
  139. package/dist/runtime/workers/application.js +0 -77
  140. package/dist/runtime/workers/application.js.map +0 -1
  141. package/dist/runtime/workers/base.d.ts +0 -16
  142. package/dist/runtime/workers/base.js +0 -46
  143. package/dist/runtime/workers/base.js.map +0 -1
  144. package/dist/runtime/workers/cli.d.ts +0 -1
  145. package/dist/runtime/workers/cli.js +0 -2
  146. package/dist/runtime/workers/cli.js.map +0 -1
  147. package/dist/runtime/workers/job.d.ts +0 -20
  148. package/dist/runtime/workers/job.js +0 -170
  149. package/dist/runtime/workers/job.js.map +0 -1
  150. package/dist/vite/builder.d.ts +0 -5
  151. package/dist/vite/builder.js +0 -79
  152. package/dist/vite/builder.js.map +0 -1
  153. package/dist/vite/config.d.ts +0 -28
  154. package/dist/vite/config.js +0 -22
  155. package/dist/vite/config.js.map +0 -1
  156. package/dist/vite/plugins.d.ts +0 -2
  157. package/dist/vite/plugins.js +0 -43
  158. package/dist/vite/plugins.js.map +0 -1
  159. package/dist/vite/runners/worker.d.ts +0 -3
  160. package/dist/vite/runners/worker.js +0 -34
  161. package/dist/vite/runners/worker.js.map +0 -1
  162. package/dist/vite/server.d.ts +0 -3
  163. package/dist/vite/server.js +0 -36
  164. package/dist/vite/server.js.map +0 -1
  165. package/dist/vite/servers/main.d.ts +0 -8
  166. package/dist/vite/servers/main.js +0 -24
  167. package/dist/vite/servers/main.js.map +0 -1
  168. package/dist/vite/servers/worker.d.ts +0 -13
  169. package/dist/vite/servers/worker.js +0 -124
  170. package/dist/vite/servers/worker.js.map +0 -1
  171. package/src/cli.ts +0 -162
  172. package/src/codegen.ts +0 -30
  173. package/src/config.ts +0 -69
  174. package/src/entrypoints/cli.ts +0 -13
  175. package/src/entrypoints/main.ts +0 -317
  176. package/src/entrypoints/thread.ts +0 -223
  177. package/src/entrypoints/worker.ts +0 -174
  178. package/src/resolver.ts +0 -7
  179. package/src/runtime/application/index.ts +0 -1
  180. package/src/runtime/constants.ts +0 -13
  181. package/src/runtime/enums.ts +0 -12
  182. package/src/runtime/hooks.ts +0 -1
  183. package/src/runtime/index.ts +0 -29
  184. package/src/runtime/injectables.ts +0 -72
  185. package/src/runtime/jobs/job.ts +0 -467
  186. package/src/runtime/jobs/manager.ts +0 -454
  187. package/src/runtime/jobs/router.ts +0 -967
  188. package/src/runtime/jobs/runner.ts +0 -583
  189. package/src/runtime/jobs/step.ts +0 -66
  190. package/src/runtime/jobs/types.ts +0 -116
  191. package/src/runtime/metrics/metric.ts +0 -18
  192. package/src/runtime/metrics/registry.ts +0 -11
  193. package/src/runtime/metrics/server.ts +0 -69
  194. package/src/runtime/plugin.ts +0 -2
  195. package/src/runtime/runtime.ts +0 -103
  196. package/src/runtime/scheduler/index.ts +0 -39
  197. package/src/runtime/server/applications.ts +0 -264
  198. package/src/runtime/server/config.ts +0 -199
  199. package/src/runtime/server/environment.ts +0 -71
  200. package/src/runtime/server/error-policy.ts +0 -132
  201. package/src/runtime/server/hmr-coordinator.ts +0 -116
  202. package/src/runtime/server/jobs.ts +0 -266
  203. package/src/runtime/server/lifecycle.ts +0 -234
  204. package/src/runtime/server/managed-worker.ts +0 -546
  205. package/src/runtime/server/pool-manager.ts +0 -187
  206. package/src/runtime/server/proxy.ts +0 -119
  207. package/src/runtime/server/server.ts +0 -218
  208. package/src/runtime/server/types.ts +0 -32
  209. package/src/runtime/server/worker-pool.ts +0 -275
  210. package/src/runtime/store/index.ts +0 -30
  211. package/src/runtime/subscription/manager.ts +0 -310
  212. package/src/runtime/subscription/redis.ts +0 -157
  213. package/src/runtime/types.ts +0 -84
  214. package/src/runtime/workers/application.ts +0 -133
  215. package/src/runtime/workers/base.ts +0 -71
  216. package/src/runtime/workers/cli.ts +0 -0
  217. package/src/runtime/workers/job.ts +0 -142
  218. package/src/vite/builder.ts +0 -94
  219. package/src/vite/config.ts +0 -45
  220. package/src/vite/plugins.ts +0 -53
  221. package/src/vite/runners/worker.ts +0 -55
  222. package/src/vite/server.ts +0 -55
  223. package/src/vite/servers/main.ts +0 -41
  224. package/src/vite/servers/worker.ts +0 -177
@@ -1,85 +0,0 @@
1
- import EventEmitter from 'node:events';
2
- import type { Logger } from '@nmtjs/core';
3
- import type { RuntimeEnvironment } from './environment.ts';
4
- import type { ApplicationServer } from './server.ts';
5
- /**
6
- * States in the server lifecycle state machine.
7
- */
8
- export type LifecycleState = 'idle' | 'starting' | 'running' | 'reloading' | 'stopping' | 'stopped' | 'failed';
9
- /**
10
- * Events emitted by the ServerLifecycle.
11
- */
12
- export interface LifecycleEvents {
13
- 'state-change': [from: LifecycleState, to: LifecycleState];
14
- error: [error: Error, handled: boolean];
15
- }
16
- /**
17
- * Factory function type for creating ApplicationServer instances.
18
- */
19
- export type ServerFactory = () => ApplicationServer | Promise<ApplicationServer>;
20
- /**
21
- * ServerLifecycle manages the application server lifecycle with a clean state machine.
22
- *
23
- * States:
24
- * - idle: Initial state, server not started
25
- * - starting: Server is being started
26
- * - running: Server is running normally
27
- * - reloading: Server is being reloaded (stop + start)
28
- * - stopping: Server is being stopped
29
- * - stopped: Server has been stopped (terminal state)
30
- * - failed: Server failed to start (can recover via reload in dev mode)
31
- *
32
- * Transitions:
33
- * - idle -> starting (via start())
34
- * - starting -> running (success) | failed (error)
35
- * - running -> reloading (via reload()) | stopping (via stop())
36
- * - reloading -> running (success) | failed (error)
37
- * - failed -> reloading (via reload()) | stopping (via stop())
38
- * - stopping -> stopped
39
- */
40
- export declare class ServerLifecycle extends EventEmitter<LifecycleEvents> {
41
- private readonly env;
42
- private readonly createServer;
43
- private state;
44
- private server;
45
- private logger;
46
- constructor(env: RuntimeEnvironment, createServer: ServerFactory, logger: Logger);
47
- /** Current lifecycle state */
48
- get currentState(): LifecycleState;
49
- /** Whether the server is currently running */
50
- get isRunning(): boolean;
51
- /** Whether the server can be started */
52
- get canStart(): boolean;
53
- /** Whether the server can be stopped */
54
- get canStop(): boolean;
55
- /** Whether the server can be reloaded */
56
- get canReload(): boolean;
57
- /** Get the current server instance (if running) */
58
- getServer(): ApplicationServer | null;
59
- /**
60
- * Start the server.
61
- * Can only be called from 'idle' or 'failed' states.
62
- */
63
- start(): Promise<void>;
64
- /**
65
- * Stop the server.
66
- * Can be called from 'running', 'failed', or 'reloading' states.
67
- * No-op if already stopped or idle.
68
- */
69
- stop(): Promise<void>;
70
- /**
71
- * Reload the server (stop current instance and start a new one).
72
- * Can be called from 'running' or 'failed' states.
73
- */
74
- reload(): Promise<void>;
75
- private handleStartupError;
76
- /**
77
- * Transition to a new state, emitting the state-change event.
78
- */
79
- private transition;
80
- /**
81
- * Assert that the current state is one of the allowed states.
82
- * Throws if not.
83
- */
84
- private assertState;
85
- }
@@ -1,177 +0,0 @@
1
- import EventEmitter from 'node:events';
2
- /**
3
- * ServerLifecycle manages the application server lifecycle with a clean state machine.
4
- *
5
- * States:
6
- * - idle: Initial state, server not started
7
- * - starting: Server is being started
8
- * - running: Server is running normally
9
- * - reloading: Server is being reloaded (stop + start)
10
- * - stopping: Server is being stopped
11
- * - stopped: Server has been stopped (terminal state)
12
- * - failed: Server failed to start (can recover via reload in dev mode)
13
- *
14
- * Transitions:
15
- * - idle -> starting (via start())
16
- * - starting -> running (success) | failed (error)
17
- * - running -> reloading (via reload()) | stopping (via stop())
18
- * - reloading -> running (success) | failed (error)
19
- * - failed -> reloading (via reload()) | stopping (via stop())
20
- * - stopping -> stopped
21
- */
22
- export class ServerLifecycle extends EventEmitter {
23
- env;
24
- createServer;
25
- state = 'idle';
26
- server = null;
27
- logger;
28
- constructor(env, createServer, logger) {
29
- super();
30
- this.env = env;
31
- this.createServer = createServer;
32
- this.logger = logger.child({ component: 'ServerLifecycle' });
33
- }
34
- /** Current lifecycle state */
35
- get currentState() {
36
- return this.state;
37
- }
38
- /** Whether the server is currently running */
39
- get isRunning() {
40
- return this.state === 'running';
41
- }
42
- /** Whether the server can be started */
43
- get canStart() {
44
- return this.state === 'idle' || this.state === 'failed';
45
- }
46
- /** Whether the server can be stopped */
47
- get canStop() {
48
- return (this.state === 'running' ||
49
- this.state === 'failed' ||
50
- this.state === 'reloading');
51
- }
52
- /** Whether the server can be reloaded */
53
- get canReload() {
54
- return this.state === 'running' || this.state === 'failed';
55
- }
56
- /** Get the current server instance (if running) */
57
- getServer() {
58
- return this.server;
59
- }
60
- /**
61
- * Start the server.
62
- * Can only be called from 'idle' or 'failed' states.
63
- */
64
- async start() {
65
- this.assertState('idle', 'failed');
66
- this.transition('starting');
67
- try {
68
- this.server = await this.createServer();
69
- await this.server.start();
70
- this.transition('running');
71
- }
72
- catch (error) {
73
- this.transition('failed');
74
- await this.handleStartupError(error);
75
- }
76
- }
77
- /**
78
- * Stop the server.
79
- * Can be called from 'running', 'failed', or 'reloading' states.
80
- * No-op if already stopped or idle.
81
- */
82
- async stop() {
83
- if (this.state === 'stopped' || this.state === 'idle')
84
- return;
85
- this.assertState('running', 'failed', 'reloading');
86
- this.transition('stopping');
87
- try {
88
- await this.server?.stop();
89
- }
90
- catch (error) {
91
- this.logger.error(new Error('Error while stopping server (continuing shutdown)', {
92
- cause: error,
93
- }));
94
- }
95
- finally {
96
- this.server = null;
97
- this.transition('stopped');
98
- }
99
- }
100
- /**
101
- * Reload the server (stop current instance and start a new one).
102
- * Can be called from 'running' or 'failed' states.
103
- */
104
- async reload() {
105
- this.assertState('running', 'failed');
106
- this.transition('reloading');
107
- try {
108
- // Stop current server if exists
109
- if (this.server) {
110
- await this.server.stop();
111
- this.server = null;
112
- }
113
- // Create and start new server
114
- this.server = await this.createServer();
115
- await this.server.start();
116
- this.transition('running');
117
- }
118
- catch (error) {
119
- this.server = null;
120
- this.transition('failed');
121
- await this.handleStartupError(error);
122
- }
123
- }
124
- /**
125
- * Handle startup/reload error according to the error policy.
126
- */
127
- async handleStartupError(error) {
128
- const action = this.env.errorPolicy.onStartupError(error);
129
- const handled = action.type !== 'exit';
130
- this.emit('error', error, handled);
131
- switch (action.type) {
132
- case 'exit':
133
- this.logger.fatal(new Error('Startup failed, exiting', { cause: error }));
134
- process.exit(action.code);
135
- break;
136
- case 'wait':
137
- // Dev mode: stay alive, HMR will call reload()
138
- this.logger.error(new Error('Startup failed, waiting for fix via HMR', {
139
- cause: error,
140
- }));
141
- break;
142
- case 'restart':
143
- this.logger.warn({ error, delay: action.delay }, 'Startup failed, scheduling restart');
144
- setTimeout(() => {
145
- // Only restart if still in failed state
146
- if (this.state === 'failed') {
147
- this.start().catch((e) => {
148
- this.logger.error(new Error('Restart failed', { cause: e }));
149
- });
150
- }
151
- }, action.delay);
152
- break;
153
- case 'ignore':
154
- this.logger.warn({ error }, 'Startup failed, ignoring');
155
- break;
156
- }
157
- }
158
- /**
159
- * Transition to a new state, emitting the state-change event.
160
- */
161
- transition(to) {
162
- const from = this.state;
163
- this.state = to;
164
- this.logger.debug({ from, to }, 'State transition');
165
- this.emit('state-change', from, to);
166
- }
167
- /**
168
- * Assert that the current state is one of the allowed states.
169
- * Throws if not.
170
- */
171
- assertState(...allowed) {
172
- if (!allowed.includes(this.state)) {
173
- throw new Error(`Invalid state: ${this.state}, expected one of: ${allowed.join(', ')}`);
174
- }
175
- }
176
- }
177
- //# sourceMappingURL=lifecycle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../src/runtime/server/lifecycle.ts"],"names":[],"mappings":"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"}
@@ -1,158 +0,0 @@
1
- import type { MessagePort, WorkerOptions } from 'node:worker_threads';
2
- import EventEmitter from 'node:events';
3
- import { Worker } from 'node:worker_threads';
4
- import type { Logger } from '@nmtjs/core';
5
- import type { WorkerType } from '../enums.ts';
6
- import type { JobTaskResult, ServerPortMessageTypes, ThreadPortMessageTypes, WorkerJobTask, WorkerThreadError } from '../types.ts';
7
- import type { ErrorPolicy } from './error-policy.ts';
8
- /**
9
- * States in the worker state machine.
10
- */
11
- export type WorkerState = 'idle' | 'starting' | 'ready' | 'error' | 'restarting' | 'stopping' | 'stopped';
12
- /**
13
- * Context tracked for each managed worker.
14
- */
15
- export interface ManagedWorkerContext {
16
- consecutiveFailures: number;
17
- totalFailures: number;
18
- lastStableTime: number | null;
19
- lastError: Error | null;
20
- }
21
- /**
22
- * Configuration for creating a managed worker.
23
- */
24
- export interface ManagedWorkerConfig {
25
- id: string;
26
- name: string;
27
- index: number;
28
- workerType: WorkerType;
29
- path: string;
30
- workerData?: any;
31
- workerOptions?: Partial<WorkerOptions>;
32
- onWorker?: (registration: {
33
- worker: Worker;
34
- vitePort?: MessagePort;
35
- }) => void;
36
- }
37
- /**
38
- * Events emitted by ManagedWorker.
39
- */
40
- export interface ManagedWorkerEvents {
41
- 'state-change': [from: WorkerState, to: WorkerState];
42
- ready: [hosts?: ThreadPortMessageTypes['ready']['hosts']];
43
- error: [error: WorkerThreadError];
44
- task: [data: ThreadPortMessageTypes['task']];
45
- }
46
- /**
47
- * ManagedWorker wraps a Node.js Worker thread with:
48
- * - Explicit state machine
49
- * - Automatic restart with exponential backoff
50
- * - Error tracking and stability detection
51
- * - Integration with ErrorPolicy for restart decisions
52
- *
53
- * State Machine:
54
- * - idle: Initial state, worker not created
55
- * - starting: Worker created, waiting for ready message
56
- * - ready: Worker is running and healthy
57
- * - error: Worker crashed or failed to start
58
- * - restarting: Worker is scheduled for restart (waiting for delay)
59
- * - stopping: Worker is being terminated
60
- * - stopped: Worker has been terminated (terminal state)
61
- */
62
- export declare class ManagedWorker extends EventEmitter<ManagedWorkerEvents> {
63
- readonly config: ManagedWorkerConfig;
64
- protected readonly policy: ErrorPolicy;
65
- protected state: WorkerState;
66
- protected ctx: ManagedWorkerContext;
67
- protected worker: Worker | null;
68
- protected port: MessagePort | null;
69
- protected vitePort: MessagePort | null;
70
- protected restartTimer: ReturnType<typeof setTimeout> | null;
71
- protected startPromise: Promise<void> | null;
72
- protected pendingTaskIds: Set<string>;
73
- protected logger: Logger;
74
- constructor(config: ManagedWorkerConfig, policy: ErrorPolicy, logger: Logger);
75
- /** Current worker state */
76
- get currentState(): WorkerState;
77
- /** Whether the worker is healthy (ready state) */
78
- get isHealthy(): boolean;
79
- /** Get a copy of the worker context */
80
- get context(): ManagedWorkerContext;
81
- /**
82
- * Reset failure counts. Called when HMR update comes in to give the worker
83
- * a fresh start after code has been fixed.
84
- */
85
- resetFailureCount(): void;
86
- /** Get the underlying Worker instance (if exists) */
87
- getWorker(): Worker | null;
88
- /**
89
- * Start the worker.
90
- * Can only be called from 'idle' or 'error' states.
91
- */
92
- start(): Promise<void>;
93
- /**
94
- * Stop the worker.
95
- * Can be called from any state except 'stopped'.
96
- * Clears any pending restart timers and rejects pending run() tasks.
97
- */
98
- stop(): Promise<void>;
99
- /**
100
- * Run a task on this worker (for job workers).
101
- * The worker must be in 'ready' state.
102
- */
103
- run(task: WorkerJobTask): Promise<JobTaskResult>;
104
- /**
105
- * Send a message to the worker.
106
- */
107
- send<T extends keyof ServerPortMessageTypes>(type: T, ...[data]: ServerPortMessageTypes[T] extends undefined ? [] : [data: ServerPortMessageTypes[T]]): void;
108
- /**
109
- * Internal: Start the worker and wait for it to be ready.
110
- */
111
- protected doStart(): Promise<void>;
112
- /**
113
- * Wait for the worker to emit a 'ready' message or timeout.
114
- */
115
- protected waitForReady(): Promise<void>;
116
- /**
117
- * Attach listeners for port and worker events.
118
- */
119
- protected attachListeners(): void;
120
- /**
121
- * Handle worker ready event.
122
- */
123
- protected handleReady(hosts?: ThreadPortMessageTypes['ready']['hosts']): void;
124
- /**
125
- * Handle worker error.
126
- */
127
- protected handleError(error: Error): void;
128
- /**
129
- * Schedule a restart after the given delay.
130
- */
131
- protected scheduleRestart(delay: number): void;
132
- /**
133
- * Clear any pending restart timer.
134
- */
135
- protected clearRestartTimer(): void;
136
- /**
137
- * Terminate the underlying worker thread.
138
- */
139
- protected terminateWorker(): Promise<void>;
140
- /**
141
- * Cleanup internal state.
142
- */
143
- protected cleanup(): void;
144
- /**
145
- * Reject all pending run() calls by emitting an error result
146
- * for each tracked task id. This unblocks callers waiting on
147
- * `once(this, 'task-<id>')` so they don't hang during shutdown.
148
- */
149
- protected rejectPendingTasks(): void;
150
- /**
151
- * Transition to a new state, emitting the state-change event.
152
- */
153
- protected transition(to: WorkerState): void;
154
- /**
155
- * Assert that the current state is one of the allowed states.
156
- */
157
- protected assertState(...allowed: WorkerState[]): void;
158
- }