serial-core 0.2.0-dev.5 → 0.2.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.
@@ -14,28 +14,51 @@ export declare class SerialService extends EventEmitter {
14
14
  protected config: SerialConfig;
15
15
  protected intentionalDisconnect: boolean;
16
16
  protected reconnectTimer: NodeJS.Timeout | null;
17
+ /**
18
+ * Initializes the SerialService with the provided configuration.
19
+ * @param config - Configuration object for serial connection
20
+ */
17
21
  constructor(config: SerialConfig);
22
+ /**
23
+ * Gets the autoConnect configuration value.
24
+ * @returns Whether the service should automatically connect on instantiation
25
+ */
18
26
  get autoConnect(): boolean;
27
+ /**
28
+ * Gets the current connection status.
29
+ * @returns The current serial connection status
30
+ */
19
31
  get status(): SerialStatus;
20
32
  /**
21
- * Updates status and emits the corresponding event.
33
+ * Updates the service status and emits the corresponding event.
34
+ * @param newStatus - The new status to set
22
35
  */
23
36
  protected setStatus(newStatus: SerialStatus): void;
24
37
  /**
25
38
  * Starts the connection process.
26
39
  * Handles both direct connection (known path) and scanning (VID/PID).
40
+ * @throws Will emit error events if connection fails
27
41
  */
28
42
  connect(): Promise<void>;
29
43
  /**
30
- * Physically opens the port and configures listeners.
44
+ * Physically opens the serial port and configures all necessary listeners.
45
+ * @param path - The port path to open (e.g., '/dev/ttyUSB0' or 'COM3')
31
46
  */
32
47
  protected openPort(path: string): void;
33
48
  /**
34
- * Manual disconnection.
49
+ * Manually disconnects from the serial port.
50
+ * @returns A promise that resolves when the port is fully closed
35
51
  */
36
52
  disconnect(): Promise<void>;
37
53
  /**
38
- * Public method to send data. Uses internal queue.
54
+ * Sends data through the serial port using the internal queue.
55
+ * @param data - The data to send (string or Buffer)
56
+ * @param options - Optional send configuration
57
+ * @param options.alias - A command identifier to correlate with responses
58
+ * @param options.timeout - Maximum time to wait for the operation in milliseconds
59
+ * @param options.waitResponse - If true, wait for a response before processing the next item in the queue
60
+ * @returns A promise that resolves when the data has been written to the port
61
+ * @throws If the port is not connected
39
62
  */
40
63
  send(data: string | Buffer, options?: {
41
64
  alias?: string;
@@ -43,24 +66,30 @@ export declare class SerialService extends EventEmitter {
43
66
  waitResponse?: boolean;
44
67
  }): Promise<void>;
45
68
  /**
46
- * Low-level write logic, handled by QueueManager.
47
- * Handles backpressure (drain).
69
+ * Low-level write logic executed by the QueueManager.
70
+ * Handles backpressure through the 'drain' event.
71
+ * @param data - The data to write to the port
72
+ * @returns A promise that resolves when the data has been fully written
48
73
  */
49
74
  protected performWrite(data: string | Buffer): Promise<void>;
50
75
  /**
51
- * Centralized connection failure handling.
76
+ * Handles connection failures in a centralized manner.
77
+ * Emits error events and schedules reconnection attempts if not intentional.
78
+ * @param reason - The reason for the connection failure
52
79
  */
53
80
  protected handleConnectionFailure(reason: string): void;
54
81
  /**
55
- * Schedules next connection attempt with simple backoff.
82
+ * Schedules the next connection attempt with a simple backoff strategy.
56
83
  */
57
84
  protected scheduleReconnect(): void;
58
85
  /**
59
- * Resource cleanup.
86
+ * Cleans up resources and listeners.
87
+ * Unregisters the port and removes all event listeners.
60
88
  */
61
89
  protected cleanup(): void;
62
90
  /**
63
- * Executes connection handshake.
91
+ * Executes the connection handshake to verify device responsiveness.
92
+ * Sends a handshake command and waits for a pattern match in the response.
64
93
  */
65
94
  protected performHandshake(): void;
66
95
  }
@@ -14,28 +14,51 @@ export declare class SerialService extends EventEmitter {
14
14
  protected config: SerialConfig;
15
15
  protected intentionalDisconnect: boolean;
16
16
  protected reconnectTimer: NodeJS.Timeout | null;
17
+ /**
18
+ * Initializes the SerialService with the provided configuration.
19
+ * @param config - Configuration object for serial connection
20
+ */
17
21
  constructor(config: SerialConfig);
22
+ /**
23
+ * Gets the autoConnect configuration value.
24
+ * @returns Whether the service should automatically connect on instantiation
25
+ */
18
26
  get autoConnect(): boolean;
27
+ /**
28
+ * Gets the current connection status.
29
+ * @returns The current serial connection status
30
+ */
19
31
  get status(): SerialStatus;
20
32
  /**
21
- * Updates status and emits the corresponding event.
33
+ * Updates the service status and emits the corresponding event.
34
+ * @param newStatus - The new status to set
22
35
  */
23
36
  protected setStatus(newStatus: SerialStatus): void;
24
37
  /**
25
38
  * Starts the connection process.
26
39
  * Handles both direct connection (known path) and scanning (VID/PID).
40
+ * @throws Will emit error events if connection fails
27
41
  */
28
42
  connect(): Promise<void>;
29
43
  /**
30
- * Physically opens the port and configures listeners.
44
+ * Physically opens the serial port and configures all necessary listeners.
45
+ * @param path - The port path to open (e.g., '/dev/ttyUSB0' or 'COM3')
31
46
  */
32
47
  protected openPort(path: string): void;
33
48
  /**
34
- * Manual disconnection.
49
+ * Manually disconnects from the serial port.
50
+ * @returns A promise that resolves when the port is fully closed
35
51
  */
36
52
  disconnect(): Promise<void>;
37
53
  /**
38
- * Public method to send data. Uses internal queue.
54
+ * Sends data through the serial port using the internal queue.
55
+ * @param data - The data to send (string or Buffer)
56
+ * @param options - Optional send configuration
57
+ * @param options.alias - A command identifier to correlate with responses
58
+ * @param options.timeout - Maximum time to wait for the operation in milliseconds
59
+ * @param options.waitResponse - If true, wait for a response before processing the next item in the queue
60
+ * @returns A promise that resolves when the data has been written to the port
61
+ * @throws If the port is not connected
39
62
  */
40
63
  send(data: string | Buffer, options?: {
41
64
  alias?: string;
@@ -43,24 +66,30 @@ export declare class SerialService extends EventEmitter {
43
66
  waitResponse?: boolean;
44
67
  }): Promise<void>;
45
68
  /**
46
- * Low-level write logic, handled by QueueManager.
47
- * Handles backpressure (drain).
69
+ * Low-level write logic executed by the QueueManager.
70
+ * Handles backpressure through the 'drain' event.
71
+ * @param data - The data to write to the port
72
+ * @returns A promise that resolves when the data has been fully written
48
73
  */
49
74
  protected performWrite(data: string | Buffer): Promise<void>;
50
75
  /**
51
- * Centralized connection failure handling.
76
+ * Handles connection failures in a centralized manner.
77
+ * Emits error events and schedules reconnection attempts if not intentional.
78
+ * @param reason - The reason for the connection failure
52
79
  */
53
80
  protected handleConnectionFailure(reason: string): void;
54
81
  /**
55
- * Schedules next connection attempt with simple backoff.
82
+ * Schedules the next connection attempt with a simple backoff strategy.
56
83
  */
57
84
  protected scheduleReconnect(): void;
58
85
  /**
59
- * Resource cleanup.
86
+ * Cleans up resources and listeners.
87
+ * Unregisters the port and removes all event listeners.
60
88
  */
61
89
  protected cleanup(): void;
62
90
  /**
63
- * Executes connection handshake.
91
+ * Executes the connection handshake to verify device responsiveness.
92
+ * Sends a handshake command and waits for a pattern match in the response.
64
93
  */
65
94
  protected performHandshake(): void;
66
95
  }
@@ -7,18 +7,26 @@ export declare class PortRegistry {
7
7
  private static instance;
8
8
  private lockedPorts;
9
9
  private constructor();
10
+ /**
11
+ * Gets the singleton instance of the PortRegistry.
12
+ * @returns The PortRegistry singleton instance
13
+ */
10
14
  static getInstance(): PortRegistry;
11
15
  /**
12
16
  * Attempts to register (lock) exclusive use of a port.
13
- * Returns true if registered successfully, false if already occupied.
17
+ * @param path - The port path to register
18
+ * @returns True if successfully registered, false if already in use
14
19
  */
15
20
  register(path: string): boolean;
16
21
  /**
17
22
  * Releases the port so it can be used again.
23
+ * @param path - The port path to unregister
18
24
  */
19
25
  unregister(path: string): void;
20
26
  /**
21
- * Checks if a port is currently in use by the library.
27
+ * Checks if a port is currently locked by the library.
28
+ * @param path - The port path to check
29
+ * @returns True if the port is in use, false otherwise
22
30
  */
23
31
  isLocked(path: string): boolean;
24
32
  }
@@ -7,18 +7,26 @@ export declare class PortRegistry {
7
7
  private static instance;
8
8
  private lockedPorts;
9
9
  private constructor();
10
+ /**
11
+ * Gets the singleton instance of the PortRegistry.
12
+ * @returns The PortRegistry singleton instance
13
+ */
10
14
  static getInstance(): PortRegistry;
11
15
  /**
12
16
  * Attempts to register (lock) exclusive use of a port.
13
- * Returns true if registered successfully, false if already occupied.
17
+ * @param path - The port path to register
18
+ * @returns True if successfully registered, false if already in use
14
19
  */
15
20
  register(path: string): boolean;
16
21
  /**
17
22
  * Releases the port so it can be used again.
23
+ * @param path - The port path to unregister
18
24
  */
19
25
  unregister(path: string): void;
20
26
  /**
21
- * Checks if a port is currently in use by the library.
27
+ * Checks if a port is currently locked by the library.
28
+ * @param path - The port path to check
29
+ * @returns True if the port is in use, false otherwise
22
30
  */
23
31
  isLocked(path: string): boolean;
24
32
  }
@@ -4,8 +4,12 @@
4
4
  */
5
5
  export declare class PortScanner {
6
6
  /**
7
- * Search for a port matching the provided VID and/or PID.
8
- * Normalizes strings to avoid case sensitivity issues.
7
+ * Searches for a serial port matching the provided Vendor ID and/or Product ID.
8
+ * Normalizes strings to handle case sensitivity and '0x' prefixes.
9
+ * @param vendorId - The USB vendor ID to search for (optional if productId provided)
10
+ * @param productId - The USB product ID to search for (optional)
11
+ * @returns The port path if found, null otherwise
12
+ * @throws Error if neither vendorId nor productId is provided
9
13
  */
10
14
  static findPort(vendorId?: string, productId?: string): Promise<string | null>;
11
15
  }
@@ -4,8 +4,12 @@
4
4
  */
5
5
  export declare class PortScanner {
6
6
  /**
7
- * Search for a port matching the provided VID and/or PID.
8
- * Normalizes strings to avoid case sensitivity issues.
7
+ * Searches for a serial port matching the provided Vendor ID and/or Product ID.
8
+ * Normalizes strings to handle case sensitivity and '0x' prefixes.
9
+ * @param vendorId - The USB vendor ID to search for (optional if productId provided)
10
+ * @param productId - The USB product ID to search for (optional)
11
+ * @returns The port path if found, null otherwise
12
+ * @throws Error if neither vendorId nor productId is provided
9
13
  */
10
14
  static findPort(vendorId?: string, productId?: string): Promise<string | null>;
11
15
  }
@@ -11,10 +11,19 @@ export declare class QueueManager {
11
11
  private currentTimeoutTimer;
12
12
  private currentItem;
13
13
  private writeHandler;
14
+ /**
15
+ * Initializes the QueueManager with a write handler function.
16
+ * @param writeHandler - Function to execute when writing data to the port
17
+ */
14
18
  constructor(writeHandler: (data: Buffer | string) => Promise<void>);
15
19
  /**
16
- * Adds a command to the queue and returns a promise
17
- * that resolves when the command has been drained to the port.
20
+ * Adds a command to the queue and returns a promise that resolves when processed.
21
+ * @param data - The data to queue (string or Buffer)
22
+ * @param options - Optional queue item configuration
23
+ * @param options.alias - Command identifier for response correlation
24
+ * @param options.timeout - Maximum time to wait for operation/response in milliseconds
25
+ * @param options.waitResponse - If true, block queue until response is received
26
+ * @returns Promise that resolves when the command has been processed
18
27
  */
19
28
  add(data: Buffer | string, options?: {
20
29
  alias?: string;
@@ -22,27 +31,38 @@ export declare class QueueManager {
22
31
  waitResponse?: boolean;
23
32
  }): Promise<void>;
24
33
  /**
25
- * Getter for the alias of the command currently processing (or just processed).
26
- * Useful for correlating responses.
34
+ * Gets the alias of the command currently processing or just processed.
35
+ * Useful for correlating received responses with sent commands.
36
+ * @returns The alias of the current command, or undefined if none
27
37
  */
28
38
  get currentAlias(): string | undefined;
29
39
  /**
30
- * Clears the queue (useful on abrupt disconnections)
40
+ * Clears all pending items from the queue.
41
+ * Useful when handling abrupt disconnections.
42
+ * All pending items will be rejected with a disconnection error.
31
43
  */
32
44
  clear(): void;
33
45
  /**
34
- * Notification from service that data was received.
35
- * If we are waiting for a response, this signals we can move on.
46
+ * Notifies the queue that a response has been received.
47
+ * If waiting for a response, this triggers resolution of the current command
48
+ * and processes the next item in the queue.
36
49
  */
37
50
  notifyResponse(): void;
38
51
  /**
39
- * Recursive processing loop
52
+ * Processes the queue recursively, executing items one by one.
53
+ * Handles timeouts and response waiting when configured.
54
+ * @private
40
55
  */
41
56
  private process;
57
+ /**
58
+ * Handles timeout when waiting for a response to a sent command.
59
+ * @private
60
+ * @param item - The queue item that timed out
61
+ */
42
62
  private handleResponseTimeout;
43
63
  /**
44
- * Indicates whether the queue is idle (no pending items,
45
- * not processing, not waiting for response)
64
+ * Checks if the queue is idle (no pending items, not processing, not waiting for response).
65
+ * @returns True if the queue has no pending operations
46
66
  */
47
67
  isIdle(): boolean;
48
68
  }
@@ -11,10 +11,19 @@ export declare class QueueManager {
11
11
  private currentTimeoutTimer;
12
12
  private currentItem;
13
13
  private writeHandler;
14
+ /**
15
+ * Initializes the QueueManager with a write handler function.
16
+ * @param writeHandler - Function to execute when writing data to the port
17
+ */
14
18
  constructor(writeHandler: (data: Buffer | string) => Promise<void>);
15
19
  /**
16
- * Adds a command to the queue and returns a promise
17
- * that resolves when the command has been drained to the port.
20
+ * Adds a command to the queue and returns a promise that resolves when processed.
21
+ * @param data - The data to queue (string or Buffer)
22
+ * @param options - Optional queue item configuration
23
+ * @param options.alias - Command identifier for response correlation
24
+ * @param options.timeout - Maximum time to wait for operation/response in milliseconds
25
+ * @param options.waitResponse - If true, block queue until response is received
26
+ * @returns Promise that resolves when the command has been processed
18
27
  */
19
28
  add(data: Buffer | string, options?: {
20
29
  alias?: string;
@@ -22,27 +31,38 @@ export declare class QueueManager {
22
31
  waitResponse?: boolean;
23
32
  }): Promise<void>;
24
33
  /**
25
- * Getter for the alias of the command currently processing (or just processed).
26
- * Useful for correlating responses.
34
+ * Gets the alias of the command currently processing or just processed.
35
+ * Useful for correlating received responses with sent commands.
36
+ * @returns The alias of the current command, or undefined if none
27
37
  */
28
38
  get currentAlias(): string | undefined;
29
39
  /**
30
- * Clears the queue (useful on abrupt disconnections)
40
+ * Clears all pending items from the queue.
41
+ * Useful when handling abrupt disconnections.
42
+ * All pending items will be rejected with a disconnection error.
31
43
  */
32
44
  clear(): void;
33
45
  /**
34
- * Notification from service that data was received.
35
- * If we are waiting for a response, this signals we can move on.
46
+ * Notifies the queue that a response has been received.
47
+ * If waiting for a response, this triggers resolution of the current command
48
+ * and processes the next item in the queue.
36
49
  */
37
50
  notifyResponse(): void;
38
51
  /**
39
- * Recursive processing loop
52
+ * Processes the queue recursively, executing items one by one.
53
+ * Handles timeouts and response waiting when configured.
54
+ * @private
40
55
  */
41
56
  private process;
57
+ /**
58
+ * Handles timeout when waiting for a response to a sent command.
59
+ * @private
60
+ * @param item - The queue item that timed out
61
+ */
42
62
  private handleResponseTimeout;
43
63
  /**
44
- * Indicates whether the queue is idle (no pending items,
45
- * not processing, not waiting for response)
64
+ * Checks if the queue is idle (no pending items, not processing, not waiting for response).
65
+ * @returns True if the queue has no pending operations
46
66
  */
47
67
  isIdle(): boolean;
48
68
  }
@@ -5,23 +5,35 @@
5
5
  /**
6
6
  * Efficiently converts various input types to Buffer.
7
7
  * If input is already a Buffer, returns it as is (zero-copy).
8
+ * @param data - The data to convert (string, number array, Uint8Array, or Buffer)
9
+ * @returns A Buffer instance
8
10
  */
9
11
  export declare function toBuffer(data: string | number[] | Uint8Array | Buffer): Buffer;
10
12
  /**
11
13
  * Converts a Buffer to Uint8Array.
12
14
  * In Node.js, Buffers ARE Uint8Arrays, so this is ideally zero-copy.
15
+ * @param buf - The buffer to convert
16
+ * @returns The buffer as a Uint8Array
13
17
  */
14
18
  export declare function toUint8Array(buf: Buffer): Uint8Array;
15
19
  /**
16
20
  * Converts a Buffer to string with optional encoding (default utf8).
17
21
  * Wrapper alias for toString().
22
+ * @param buf - The buffer to convert
23
+ * @param encoding - The character encoding to use (default: 'utf8')
24
+ * @returns The buffer contents as a string
18
25
  */
19
26
  export declare function toString(buf: Buffer, encoding?: BufferEncoding): string;
20
27
  /**
21
- * Optimally converts to ASCII.
28
+ * Converts a Buffer to ASCII string representation.
29
+ * @param buf - The buffer to convert
30
+ * @returns The buffer contents as an ASCII string
22
31
  */
23
32
  export declare function toAscii(buf: Buffer): string;
24
33
  /**
25
- * Converts a Buffer to an Array of numbers (bytes).
34
+ * Converts a Buffer to an array of byte values.
35
+ * Note: Using spread operator may be slow for very large buffers.
36
+ * @param buf - The buffer to convert
37
+ * @returns An array of numbers representing each byte
26
38
  */
27
39
  export declare function toArray(buf: Buffer): number[];
@@ -5,23 +5,35 @@
5
5
  /**
6
6
  * Efficiently converts various input types to Buffer.
7
7
  * If input is already a Buffer, returns it as is (zero-copy).
8
+ * @param data - The data to convert (string, number array, Uint8Array, or Buffer)
9
+ * @returns A Buffer instance
8
10
  */
9
11
  export declare function toBuffer(data: string | number[] | Uint8Array | Buffer): Buffer;
10
12
  /**
11
13
  * Converts a Buffer to Uint8Array.
12
14
  * In Node.js, Buffers ARE Uint8Arrays, so this is ideally zero-copy.
15
+ * @param buf - The buffer to convert
16
+ * @returns The buffer as a Uint8Array
13
17
  */
14
18
  export declare function toUint8Array(buf: Buffer): Uint8Array;
15
19
  /**
16
20
  * Converts a Buffer to string with optional encoding (default utf8).
17
21
  * Wrapper alias for toString().
22
+ * @param buf - The buffer to convert
23
+ * @param encoding - The character encoding to use (default: 'utf8')
24
+ * @returns The buffer contents as a string
18
25
  */
19
26
  export declare function toString(buf: Buffer, encoding?: BufferEncoding): string;
20
27
  /**
21
- * Optimally converts to ASCII.
28
+ * Converts a Buffer to ASCII string representation.
29
+ * @param buf - The buffer to convert
30
+ * @returns The buffer contents as an ASCII string
22
31
  */
23
32
  export declare function toAscii(buf: Buffer): string;
24
33
  /**
25
- * Converts a Buffer to an Array of numbers (bytes).
34
+ * Converts a Buffer to an array of byte values.
35
+ * Note: Using spread operator may be slow for very large buffers.
36
+ * @param buf - The buffer to convert
37
+ * @returns An array of numbers representing each byte
26
38
  */
27
39
  export declare function toArray(buf: Buffer): number[];
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "serial-core",
3
3
  "type": "module",
4
- "version": "0.2.0-dev.5",
4
+ "version": "0.2.0",
5
5
  "description": "Resilient serial communication service with automatic reconnection and queues.",
6
6
  "author": "Danidoble <danidoble@gmail.com>",
7
7
  "license": "GPL-3.0-only",