Skip to content

Commit

Permalink
Revert "Revert "Bump serialport to 10.5.0 (#607)""
Browse files Browse the repository at this point in the history
This reverts commit 022136a.
  • Loading branch information
Koenkk committed Jan 7, 2023
1 parent 132dea4 commit 0382ed6
Show file tree
Hide file tree
Showing 10 changed files with 837 additions and 1,487 deletions.
2,171 changes: 748 additions & 1,423 deletions package-lock.json

Large diffs are not rendered by default.

5 changes: 3 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,14 @@
}
],
"dependencies": {
"@serialport/bindings-cpp": "^10.8.0",
"@serialport/parser-delimiter": "^10.5.0",
"@serialport/stream": "^10.5.0",
"debounce": "^1.2.1",
"debug": "^4.3.4",
"fast-deep-equal": "^3.1.3",
"mixin-deep": "^2.0.1",
"mz": "^2.7.0",
"serialport": "9.2.8",
"slip": "^1.0.2"
},
"deprecated": false,
Expand All @@ -48,7 +50,6 @@
"@types/mz": "^2.7.4",
"@types/nedb": "*",
"@types/node": "*",
"@types/serialport": "*",
"@typescript-eslint/eslint-plugin": "*",
"@typescript-eslint/parser": "*",
"babel-jest": "*",
Expand Down
4 changes: 2 additions & 2 deletions src/adapter/deconz/driver/driver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
/* eslint-disable */
import Debug from 'debug';
import events from 'events';
import SerialPort from 'serialport';
import Writer from './writer';
import Parser from './parser';
import Frame from './frame';
import PARAM from './constants';
import * as Events from '../../events';
import {SerialPort} from '../../serialPort';
import SerialPortUtils from '../../serialPortUtils';
import SocketPortUtils from '../../socketPortUtils';
import net from 'net';
Expand Down Expand Up @@ -184,7 +184,7 @@ class Driver extends events.EventEmitter {

public openSerialPort(): Promise<void> {
debug(`Opening with ${this.path}`);
this.serialPort = new SerialPort(this.path, {baudRate: 38400, autoOpen: false});
this.serialPort = new SerialPort({path: this.path, baudRate: 38400, autoOpen: false});

this.writer = new Writer();
// @ts-ignore
Expand Down
7 changes: 4 additions & 3 deletions src/adapter/ezsp/driver/uart.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/* istanbul ignore file */
import {EventEmitter} from 'events';
import SerialPort from 'serialport';
import net from 'net';
import {SerialPort} from '../../serialPort';
import SocketPortUtils from '../../socketPortUtils';
import {Deferred, crc16ccitt} from './utils';
import {Queue, Waitress} from '../../../utils';
Expand Down Expand Up @@ -67,13 +67,14 @@ export class SerialDriver extends EventEmitter {

private async openSerialPort(path: string, opt: Record<string, number|boolean>): Promise<void> {
const options = {
path,
baudRate: typeof opt.baudRate === 'number' ? opt.baudRate : 115200,
rtscts: typeof opt.rtscts === 'boolean' ? opt.rtscts : false,
autoOpen: false
};

debug(`Opening SerialPort with ${path} and ${JSON.stringify(options)}`);
this.serialPort = new SerialPort(path, options);
debug(`Opening SerialPort with ${JSON.stringify(options)}`);
this.serialPort = new SerialPort(options);

this.writer = new Writer();
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
Expand Down
23 changes: 23 additions & 0 deletions src/adapter/serialPort.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/* istanbul ignore file */
/* eslint-disable max-len */
/* eslint-disable @typescript-eslint/semi */
// This file was copied from https://github.com/serialport/node-serialport/blob/master/packages/serialport/lib/serialport.ts.
import {ErrorCallback, OpenOptions, SerialPortStream, StreamOptions} from '@serialport/stream';
import {autoDetect, AutoDetectTypes, OpenOptionsFromBinding} from '@serialport/bindings-cpp';

const DetectedBinding = autoDetect();

export type SerialPortOpenOptions<T extends AutoDetectTypes> = Omit<StreamOptions<T>, 'binding'> & OpenOptionsFromBinding<T>

export class SerialPort<T extends AutoDetectTypes = AutoDetectTypes> extends SerialPortStream<T> {
static list = DetectedBinding.list;
static readonly binding = DetectedBinding;

constructor(options: SerialPortOpenOptions<T>, openCallback?: ErrorCallback) {
const opts: OpenOptions<T> = {
binding: DetectedBinding as T,
...options,
};
super(opts, openCallback);
}
}
4 changes: 2 additions & 2 deletions src/adapter/serialPortUtils.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import SerialPort from 'serialport';
import {SerialPort} from './serialPort';
import {EqualsPartial} from '../utils';

interface PortInfoMatch {
Expand All @@ -23,4 +23,4 @@ async function is(path: string, matchers: PortInfoMatch[]): Promise<boolean> {
return matchers.find((matcher) => EqualsPartial(device, matcher)) != null;
}

export default {is, find};
export default {is, find};
8 changes: 4 additions & 4 deletions src/adapter/z-stack/znp/znp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {

import {Wait, Queue, Waitress, RealpathSync} from '../../../utils';

import {SerialPort} from '../../serialPort';
import SerialPortUtils from '../../serialPortUtils';
import SocketPortUtils from '../../socketPortUtils';

Expand All @@ -15,7 +16,6 @@ import ZpiObject from './zpiObject';
import {ZpiObjectPayload} from './tstype';
import {Subsystem, Type} from '../unpi/constants';

import SerialPort from 'serialport';
import net from 'net';
import events from 'events';
import Equals from 'fast-deep-equal/es6';
Expand Down Expand Up @@ -126,10 +126,10 @@ class Znp extends events.EventEmitter {
}

private async openSerialPort(): Promise<void> {
const options = {baudRate: this.baudRate, rtscts: this.rtscts, autoOpen: false};
const options = {path: this.path, baudRate: this.baudRate, rtscts: this.rtscts, autoOpen: false};

debug.log(`Opening SerialPort with ${this.path} and ${JSON.stringify(options)}`);
this.serialPort = new SerialPort(this.path, options);
debug.log(`Opening SerialPort with ${JSON.stringify(options)}`);
this.serialPort = new SerialPort(options);

this.unpiWriter = new UnpiWriter();
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
Expand Down
10 changes: 6 additions & 4 deletions src/adapter/zigate/driver/zigate.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
/* istanbul ignore file */
/* eslint-disable */

import SerialPort from 'serialport';
import {DelimiterParser} from '@serialport/parser-delimiter'
import {EventEmitter} from 'events';
import {Debug} from '../debug';
import {SerialPort} from '../../serialPort';
import SerialPortUtils from "../../serialPortUtils";
import SocketPortUtils from "../../socketPortUtils";
import net from "net";
Expand Down Expand Up @@ -202,7 +203,8 @@ export default class ZiGate extends EventEmitter {
}

private async openSerialPort(): Promise<void> {
this.serialPort = new SerialPort(this.path, {
this.serialPort = new SerialPort({
path: this.path,
baudRate: this.baudRate,
dataBits: 8,
parity: 'none', /* one of ['none', 'even', 'mark', 'odd', 'space'] */
Expand All @@ -211,7 +213,7 @@ export default class ZiGate extends EventEmitter {
autoOpen: false
});
this.parser = this.serialPort.pipe(
new SerialPort.parsers.Delimiter(
new DelimiterParser(
{delimiter: [ZiGateFrame.STOP_BYTE], includeDelimiter: true}
),
);
Expand Down Expand Up @@ -251,7 +253,7 @@ export default class ZiGate extends EventEmitter {


this.parser = this.socketPort.pipe(
new SerialPort.parsers.Delimiter({delimiter: [ZiGateFrame.STOP_BYTE], includeDelimiter: true}),
new DelimiterParser({delimiter: [ZiGateFrame.STOP_BYTE], includeDelimiter: true}),
);
this.parser.on('data', this.onSerialData.bind(this));

Expand Down
41 changes: 21 additions & 20 deletions test/adapter/ezsp/uart.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import "regenerator-runtime/runtime";
import SerialPort from 'serialport';
import {SerialPort} from '../../../src/adapter/serialPort';
import {SerialDriver} from '../../../src/adapter/ezsp/driver/uart';
import {Writer} from '../../../src/adapter/ezsp/driver/writer';

Expand All @@ -18,22 +18,24 @@ const mockSerialPortWrite = jest.fn((buffer, cb) => (cb) ? cb() : null);
let mockSerialPortIsOpen = false;


jest.mock('serialport', () => {
return jest.fn().mockImplementation(() => {
return {
close: mockSerialPortClose,
constructor: mockSerialPortConstructor,
emit: () => {},
on: () => {},
once: mockSerialPortOnce,
open: mockSerialPortOpen,
pipe: mockSerialPortPipe,
set: mockSerialPortSet,
write: mockSerialPortWrite,
flush: mockSerialPortFlush,
isOpen: mockSerialPortIsOpen,
};
});
jest.mock('../../../src/adapter/serialPort', () => {
return {
SerialPort: jest.fn().mockImplementation(() => {
return {
close: mockSerialPortClose,
constructor: mockSerialPortConstructor,
emit: () => {},
on: () => {},
once: mockSerialPortOnce,
open: mockSerialPortOpen,
pipe: mockSerialPortPipe,
set: mockSerialPortSet,
write: mockSerialPortWrite,
flush: mockSerialPortFlush,
isOpen: mockSerialPortIsOpen,
};
})
};
});

let writeBufferSpy;
Expand Down Expand Up @@ -79,8 +81,7 @@ describe('UART', () => {

expect(SerialPort).toHaveBeenCalledTimes(1);
expect(SerialPort).toHaveBeenCalledWith(
"/dev/ttyACM0",
{"autoOpen": false, "baudRate": 115200, "rtscts": false},
{"path": "/dev/ttyACM0", "autoOpen": false, "baudRate": 115200, "rtscts": false},
);

expect(mockSerialPortPipe).toHaveBeenCalledTimes(1);
Expand All @@ -106,4 +107,4 @@ describe('UART', () => {
serialDriver.sendDATA(Buffer.from([1,2,3]));
expect(writeBufferSpy).toHaveBeenCalledTimes(9);
});
});
});
51 changes: 24 additions & 27 deletions test/adapter/z-stack/znp.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import "regenerator-runtime/runtime";
import {Znp, ZpiObject} from '../../../src/adapter/z-stack/znp';
import SerialPort from 'serialport';
import {SerialPort} from '../../../src/adapter/serialPort';
import net from 'net';
import {Frame as UnpiFrame, Constants as UnpiConstants} from '../../../src/adapter/z-stack/unpi';
import {duplicateArray, ieeeaAddr1, ieeeaAddr2} from '../../testUtils';
Expand All @@ -21,22 +21,24 @@ jest.mock('../../../src/utils/wait', () => {
return jest.fn();
});

jest.mock('serialport', () => {
return jest.fn().mockImplementation(() => {
return {
close: mockSerialPortClose,
constructor: mockSerialPortConstructor,
emit: () => {},
on: () => {},
once: mockSerialPortOnce,
open: mockSerialPortOpen,
pipe: mockSerialPortPipe,
set: mockSerialPortSet,
write: mockSerialPortWrite,
flush: mockSerialPortFlush,
isOpen: mockSerialPortIsOpen,
};
});
jest.mock('../../../src/adapter/serialPort', () => {
return {
SerialPort: jest.fn().mockImplementation(() => {
return {
close: mockSerialPortClose,
constructor: mockSerialPortConstructor,
emit: () => {},
on: () => {},
once: mockSerialPortOnce,
open: mockSerialPortOpen,
pipe: mockSerialPortPipe,
set: mockSerialPortSet,
write: mockSerialPortWrite,
flush: mockSerialPortFlush,
isOpen: mockSerialPortIsOpen,
};
}),
};
});

const mockSocketSetNoDelay = jest.fn();
Expand Down Expand Up @@ -141,8 +143,7 @@ describe('ZNP', () => {

expect(SerialPort).toHaveBeenCalledTimes(1);
expect(SerialPort).toHaveBeenCalledWith(
"/dev/ttyACM0",
{"autoOpen": false, "baudRate": 100, "rtscts": true},
{"path": "/dev/ttyACM0", "autoOpen": false, "baudRate": 100, "rtscts": true},
);

expect(mockSerialPortPipe).toHaveBeenCalledTimes(1);
Expand All @@ -157,8 +158,7 @@ describe('ZNP', () => {

expect(SerialPort).toHaveBeenCalledTimes(1);
expect(SerialPort).toHaveBeenCalledWith(
"/dev/ttyACM0",
{"autoOpen": false, "baudRate": 100, "rtscts": true},
{"path": "/dev/ttyACM0", "autoOpen": false, "baudRate": 100, "rtscts": true},
);

expect(mockSerialPortPipe).toHaveBeenCalledTimes(1);
Expand All @@ -174,8 +174,7 @@ describe('ZNP', () => {

expect(SerialPort).toHaveBeenCalledTimes(1);
expect(SerialPort).toHaveBeenCalledWith(
"/dev/ttyACM0",
{"autoOpen": false, "baudRate": 115200, "rtscts": false},
{"path": "/dev/ttyACM0", "autoOpen": false, "baudRate": 115200, "rtscts": false},
);

expect(mockSerialPortPipe).toHaveBeenCalledTimes(1);
Expand Down Expand Up @@ -284,8 +283,7 @@ describe('ZNP', () => {

expect(SerialPort).toHaveBeenCalledTimes(1);
expect(SerialPort).toHaveBeenCalledWith(
"/dev/ttyACM0",
{"autoOpen": false, "baudRate": 100, "rtscts": true},
{"path": "/dev/ttyACM0", "autoOpen": false, "baudRate": 100, "rtscts": true},
);

expect(error).toEqual(new Error("Error while opening serialport 'failed!'"));
Expand All @@ -310,8 +308,7 @@ describe('ZNP', () => {

expect(SerialPort).toHaveBeenCalledTimes(1);
expect(SerialPort).toHaveBeenCalledWith(
"/dev/ttyACM0",
{"autoOpen": false, "baudRate": 100, "rtscts": true},
{"path": "/dev/ttyACM0", "autoOpen": false, "baudRate": 100, "rtscts": true},
);

expect(error).toEqual(new Error("Error while opening serialport 'failed!'"));
Expand Down

0 comments on commit 0382ed6

Please sign in to comment.