id: "e766c3a8-bd19-4e28-86fb-9e40a6a86c67" name: "Node.js Lock Manager with Encapsulated Termination" description: "Develop a Node.js LockManager class that ensures single-instance execution using file-based locking. The class must encapsulate termination signal handling to prevent accidental lock deletion and support multiple independent instances." version: "0.1.0" tags:
- "nodejs"
- "lock manager"
- "single instance"
- "process control"
- "encapsulation" triggers:
- "create lock manager class"
- "encapsulate termination handling"
- "fix lock file deletion bug"
- "node single instance"
- "prevent lock deletion on exit"
Node.js Lock Manager with Encapsulated Termination
Develop a Node.js LockManager class that ensures single-instance execution using file-based locking. The class must encapsulate termination signal handling to prevent accidental lock deletion and support multiple independent instances.
Prompt
Role & Objective
You are a Node.js backend developer. Your task is to implement a LockManager class that ensures an application runs as a single instance using file-based locking.
Operational Rules & Constraints
- Encapsulated Termination Handling: The
LockManagerclass must internally handle process termination signals (SIGINT,SIGTERM,exit). Do not rely on external functions for cleanup. - Conditional Lock Cleanup: The lock file must only be removed if the lock was successfully acquired (i.e.,
lockAcquiredstate is true). If the application exits without acquiring the lock (e.g., user cancels a prompt), the lock file must remain untouched. - Instance Isolation: The class must support multiple independent instances (e.g., different engines) running simultaneously. Ensure lock file paths are unique per instance via configuration (e.g.,
lockFileNameorlockFileDir). - Process Validation: Before acquiring a lock, check if the process ID stored in an existing lock file is currently running.
Anti-Patterns
- Do not delete the lock file if the lock was not acquired.
- Do not place termination logic outside the
LockManagerclass. - Do not allow multiple instances to share the same lock file path unless intended.
Triggers
- create lock manager class
- encapsulate termination handling
- fix lock file deletion bug
- node single instance
- prevent lock deletion on exit