summaryrefslogtreecommitdiff
path: root/ext/node/polyfills/cluster.ts
diff options
context:
space:
mode:
authorMarvin Hagemeister <marvin@deno.com>2024-08-26 11:19:58 +0200
committerGitHub <noreply@github.com>2024-08-26 11:19:58 +0200
commit1dad29aa044967db5f16568dc2591ba2976699b0 (patch)
treec2f1d5324b87652ec6b7d1f90d9c985c1b96926b /ext/node/polyfills/cluster.ts
parentaebe8947ae602d22734498b1ef3a771afe7a9adc (diff)
fix(node/cluster): improve stubs to make log4js work (#25146)
- Add missing exports to `node:cluster` - Fix default export not being an instance of `EventEmitter` - Fix aliasing of properties - Fix `disconnected` -> `disconnect` export naming This makes `log4js` work in Deno. `karma` starts too, but somehow the server isn't responding. That looks like a different issue. Fixes https://github.com/denoland/deno/issues/24858
Diffstat (limited to 'ext/node/polyfills/cluster.ts')
-rw-r--r--ext/node/polyfills/cluster.ts71
1 files changed, 47 insertions, 24 deletions
diff --git a/ext/node/polyfills/cluster.ts b/ext/node/polyfills/cluster.ts
index 5839c1add..8abc2fedc 100644
--- a/ext/node/polyfills/cluster.ts
+++ b/ext/node/polyfills/cluster.ts
@@ -2,6 +2,7 @@
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
import { notImplemented } from "ext:deno_node/_utils.ts";
+import { EventEmitter } from "node:events";
/** A Worker object contains all public information and method about a worker.
* In the primary it can be obtained using cluster.workers. In a worker it can
@@ -13,20 +14,23 @@ export class Worker {
}
}
/** Calls .disconnect() on each worker in cluster.workers. */
-export function disconnected() {
- notImplemented("cluster.disconnected");
+export function disconnect() {
+ notImplemented("cluster.disconnect");
}
/** Spawn a new worker process. */
-export function fork() {
+// deno-lint-ignore no-explicit-any
+export function fork(_env?: any): Worker {
notImplemented("cluster.fork");
}
/** True if the process is a primary. This is determined by
* the process.env.NODE_UNIQUE_ID. If process.env.NODE_UNIQUE_ID is undefined,
* then isPrimary is true. */
-export const isPrimary = undefined;
+// TODO(@marvinhagemeister): Replace this with an env check once
+// we properly set NODE_UNIQUE_ID
+export const isPrimary = true;
/** True if the process is not a primary (it is the negation of
* cluster.isPrimary). */
-export const isWorker = undefined;
+export const isWorker = false;
/** Deprecated alias for cluster.isPrimary. details. */
export const isMaster = isPrimary;
/** The scheduling policy, either cluster.SCHED_RR for round-robin or
@@ -35,35 +39,54 @@ export const isMaster = isPrimary;
* .setupPrimary() is called, whichever comes first. */
export const schedulingPolicy = undefined;
/** The settings object */
-export const settings = undefined;
-/** Deprecated alias for .setupPrimary(). */
-export function setupMaster() {
- notImplemented("cluster.setupMaster");
-}
+export const settings = {};
/** setupPrimary is used to change the default 'fork' behavior. Once called,
* the settings will be present in cluster.settings. */
export function setupPrimary() {
notImplemented("cluster.setupPrimary");
}
+/** Deprecated alias for .setupPrimary(). */
+export const setupMaster = setupPrimary;
/** A reference to the current worker object. Not available in the primary
* process. */
export const worker = undefined;
/** A hash that stores the active worker objects, keyed by id field. Makes it
* easy to loop through all the workers. It is only available in the primary
* process. */
-export const workers = undefined;
+export const workers = {};
-export default {
- Worker,
- disconnected,
- fork,
- isPrimary,
- isWorker,
- isMaster,
- schedulingPolicy,
- settings,
- setupMaster,
- setupPrimary,
- worker,
- workers,
+export const SCHED_NONE = 1;
+export const SCHED_RR = 2;
+
+const cluster = new EventEmitter() as EventEmitter & {
+ isWorker: boolean;
+ isMaster: boolean;
+ isPrimary: boolean;
+ Worker: Worker;
+ workers: Record<string, Worker>;
+ settings: Record<string, unknown>;
+ // deno-lint-ignore no-explicit-any
+ setupPrimary(options?: any): void;
+ // deno-lint-ignore no-explicit-any
+ setupMaster(options?: any): void;
+ // deno-lint-ignore no-explicit-any
+ fork(env: any): Worker;
+ // deno-lint-ignore no-explicit-any
+ disconnect(cb: any): void;
+ SCHED_NONE: 1;
+ SCHED_RR: 2;
};
+cluster.isWorker = isWorker;
+cluster.isMaster = isMaster;
+cluster.isPrimary = isPrimary;
+cluster.Worker = Worker;
+cluster.workers = workers;
+cluster.settings = {};
+cluster.setupPrimary = setupPrimary;
+cluster.setupMaster = setupMaster;
+cluster.fork = fork;
+cluster.disconnect = disconnect;
+cluster.SCHED_NONE = SCHED_NONE;
+cluster.SCHED_RR = SCHED_RR;
+
+export default cluster;