Skip to content

Commit 26b326e

Browse files
Merge pull request #266 from xcomponent/fixpackagejson
remove old dependencies (xmlparser, buffer, node websocket)
2 parents ad8820d + 77ff88b commit 26b326e

23 files changed

Lines changed: 810 additions & 278 deletions

config/jest/setup.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
global.crypto = {
2+
randomUUID: () => 'mocked-uuid',
3+
};

package.json

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
{
22
"name": "reactivexcomponent.js",
3-
"version": "7.0.4",
3+
"version": "7.0.6",
44
"description": "Javascript reactive client API for XComponent",
5-
"main": "dist/index.js",
65
"module": "dist/index.js",
6+
"main": "dist/index.js",
77
"types": "dist/index.d.ts",
88
"exports": {
99
"import": "./dist/index.js",
@@ -14,6 +14,7 @@
1414
"lib": "./lib"
1515
},
1616
"scripts": {
17+
"build:browser": "rollup -c",
1718
"build": "node scripts/clean.js && tsc",
1819
"watch": "node scripts/clean.js && tsc -w",
1920
"test": "node scripts/test.js --env=jsdom",
@@ -80,15 +81,16 @@
8081
"@types/xml2js": "0.4.8",
8182
"@types/xmldom": "^0.1.28",
8283
"atob": "^2.0.3",
83-
"log4ts": "^0.4.2",
8484
"pako": "^1.0.3",
8585
"rxjs": "^6.0.0",
8686
"rxjs-compat": "^6",
87-
"uuid": "^7.0.0",
88-
"websocket": "^1.0.25",
89-
"xml2js": "^0.4.17"
87+
"tslib": "^2.8.1"
9088
},
9189
"devDependencies": {
90+
"@rollup/plugin-commonjs": "^28.0.3",
91+
"@rollup/plugin-json": "^6.1.0",
92+
"@rollup/plugin-node-resolve": "^16.0.1",
93+
"@rollup/plugin-typescript": "^12.1.2",
9294
"clean-webpack-plugin": "^1.0.0",
9395
"compression": "^1.6.2",
9496
"husky": "^6.0.0",
@@ -98,6 +100,7 @@
98100
"mock-socket": "^9.0.0",
99101
"prettier": "^1.14.0",
100102
"pretty-quick": "^2.0.0",
103+
"rollup": "^4.39.0",
101104
"source-map-loader": "^0.2.0",
102105
"ts-jest": "^25.0.0",
103106
"ts-loader": "^5.0.0",

rollup.config.cjs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
const resolve = require('@rollup/plugin-node-resolve');
2+
const commonjs = require('@rollup/plugin-commonjs');
3+
const typescript = require('@rollup/plugin-typescript');
4+
const json = require('@rollup/plugin-json');
5+
6+
7+
module.exports = {
8+
input: 'src/index.ts',
9+
output: [
10+
{ file: 'dist/index.js', format: 'esm' },
11+
{ file: 'dist/index.umd.js', format: 'umd', name: 'ReactiveXComponent' }
12+
],
13+
plugins: [
14+
resolve(),
15+
commonjs(),
16+
json(),
17+
typescript({
18+
tsconfig: './tsconfig.json',
19+
tslib: require.resolve('tslib')
20+
})
21+
]
22+
};

src/XComponent.ts

Lines changed: 47 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,80 +1,66 @@
1-
import { WebSocketConnection } from "./communication/WebSocketConnection";
2-
import { Connection } from "./interfaces/Connection";
3-
import { ErrorListener } from "./interfaces/ErrorListener";
4-
import { Logger, LoggerConfig } from "log4ts";
5-
import BasicLayout from "log4ts/build/layouts/BasicLayout";
6-
import ConsoleAppender from "log4ts/build/appenders/ConsoleAppender";
7-
import { LogLevel } from "log4ts/build/LogLevel";
8-
import { WebSocketBridgeCommunication } from "./communication/WebSocketBridgeCommunication";
9-
import { w3cwebsocket as WebSocketLib } from "websocket";
1+
import { WebSocketConnection } from './communication/WebSocketConnection';
2+
import { Connection } from './interfaces/Connection';
3+
import { ErrorListener } from './interfaces/ErrorListener';
4+
import { Logger } from './utils/Logger';
5+
import { WebSocketBridgeCommunication } from './communication/WebSocketBridgeCommunication';
106

117
export class XComponent {
12-
private logger: Logger = Logger.getLogger("XComponent");
13-
private loggerconfig: LoggerConfig;
8+
private logger = Logger.getLogger('XComponent');
149
private initialized: boolean = false;
1510

16-
public connect(serverUrl: string, errorListener?: ErrorListener, heartbeatIntervalSeconds: number = 10): Promise<Connection> {
11+
public connect(
12+
serverUrl: string,
13+
errorListener?: ErrorListener,
14+
heartbeatIntervalSeconds: number = 10
15+
): Promise<Connection> {
1716
this.ensureInitialized();
18-
return new Promise((resolve, reject): void => {
19-
let webSocket;
20-
if (this.isNodeApplication()) {
21-
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
22-
webSocket = new WebSocketLib(serverUrl);
23-
} else {
24-
webSocket = new WebSocket(serverUrl);
25-
}
26-
let webSocketBridgeCommunication = new WebSocketBridgeCommunication(webSocket);
27-
let connection = new WebSocketConnection(webSocket, webSocketBridgeCommunication);
28-
29-
webSocket.onopen = ((e: Event) => {
30-
connection.closedByUser = false;
31-
webSocketBridgeCommunication.startHeartbeat(heartbeatIntervalSeconds);
32-
this.logger.info("connection started on " + serverUrl + ".");
33-
resolve(connection);
34-
}).bind(this);
35-
36-
webSocket.onerror = ((error: Event) => {
37-
if (errorListener) {
38-
errorListener.onError(new Error(error.toString()));
39-
reject(error);
17+
return new Promise(
18+
(resolve, reject): void => {
19+
let webSocket;
20+
if (this.isNodeApplication()) {
21+
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
22+
webSocket = new WebSocket(serverUrl);
23+
} else {
24+
webSocket = new WebSocket(serverUrl);
4025
}
41-
this.logger.error("Error on " + serverUrl + ".", error);
42-
}).bind(this);
26+
let webSocketBridgeCommunication = new WebSocketBridgeCommunication(webSocket);
27+
let connection = new WebSocketConnection(webSocket, webSocketBridgeCommunication);
4328

44-
webSocket.onclose = ((closeEvent: CloseEvent) => {
45-
this.logger.info("connection on " + serverUrl + " closed.", closeEvent);
46-
if (!connection.closedByUser && errorListener) {
47-
errorListener.onError(new Error("Unxecpected connection close on " + serverUrl));
48-
reject(closeEvent);
49-
}
50-
webSocketBridgeCommunication.dispose();
51-
connection.dispose();
52-
}).bind(this);
53-
});
54-
}
29+
webSocket.onopen = ((e: Event) => {
30+
connection.closedByUser = false;
31+
webSocketBridgeCommunication.startHeartbeat(heartbeatIntervalSeconds);
32+
this.logger.info('connection started on ' + serverUrl + '.');
33+
resolve(connection);
34+
}).bind(this);
5535

56-
public setLogLevel(logLevel: LogLevel): void {
57-
this.ensureInitialized();
58-
this.loggerconfig.setLevel(logLevel);
59-
}
36+
webSocket.onerror = ((error: Event) => {
37+
if (errorListener) {
38+
errorListener.onError(new Error(error.toString()));
39+
reject(error);
40+
}
41+
this.logger.error('Error on ' + serverUrl + '.', error);
42+
}).bind(this);
6043

61-
public getLogLevel(): LogLevel {
62-
this.ensureInitialized();
63-
return this.loggerconfig.getLevel();
44+
webSocket.onclose = ((closeEvent: CloseEvent) => {
45+
this.logger.info('connection on ' + serverUrl + ' closed.', closeEvent);
46+
if (!connection.closedByUser && errorListener) {
47+
errorListener.onError(new Error('Unxecpected connection close on ' + serverUrl));
48+
reject(closeEvent);
49+
}
50+
webSocketBridgeCommunication.dispose();
51+
connection.dispose();
52+
}).bind(this);
53+
}
54+
);
6455
}
6556

6657
private ensureInitialized() {
6758
if (!this.initialized) {
68-
let consoleAppender = new ConsoleAppender();
69-
consoleAppender.setLayout(new BasicLayout());
70-
this.loggerconfig = new LoggerConfig(consoleAppender, LogLevel.INFO);
71-
Logger.setConfig(this.loggerconfig);
7259
this.initialized = true;
7360
}
7461
}
7562

7663
private isNodeApplication() {
77-
return typeof process === "object" &&
78-
process + "" === "[object process]" && typeof window === "undefined";
64+
return typeof process === 'object' && process + '' === '[object process]' && typeof window === 'undefined';
7965
}
80-
}
66+
}

src/communication/WebSocketBridgeCommunication.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ import { filter, first, map, takeWhile } from 'rxjs/operators';
33
import { Commands } from '../configuration/xcWebSocketBridgeConfiguration';
44
import { CompositionModel, DeserializedData, Serializer, Deserializer } from './xcomponentMessages';
55
import 'rxjs/add/observable/fromEvent';
6-
import { Logger } from 'log4ts';
6+
import { Logger } from '../utils/Logger';
77
import { DefaultApiConfigurationParser } from '../configuration/apiConfigurationParser';
88
import { ApiConfiguration } from '../configuration/apiConfiguration';
99

1010
export class WebSocketBridgeCommunication {
11-
private logger: Logger = Logger.getLogger('HeartbeatManager');
11+
private logger = Logger.getLogger('HeartbeatManager');
1212
private updates$: Observable<DeserializedData>;
1313
private deserializer: Deserializer;
1414
private serializer: Serializer;
@@ -33,7 +33,7 @@ export class WebSocketBridgeCommunication {
3333
this.updates$
3434
.pipe(filter((data: DeserializedData) => data.command === command))
3535
.subscribe((data: DeserializedData) => {
36-
this.logger.trace('Heartbeat received successfully');
36+
this.logger.debug('Heartbeat received successfully');
3737
});
3838
let commandData = {
3939
Command: command,
@@ -42,7 +42,7 @@ export class WebSocketBridgeCommunication {
4242
let input = thisWebSocketBridgeCommunication.serializer.convertCommandDataToWebsocketInputFormat(commandData);
4343
this.heartbeatTimer = setInterval(() => {
4444
thisWebSocketBridgeCommunication.webSocket.send(input);
45-
this.logger.trace('Heartbeat sent');
45+
this.logger.debug('Heartbeat sent');
4646
}, heartbeatIntervalSeconds * 1000);
4747
}
4848

src/communication/WebSocketConnection.test.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { WebSocket, Server } from 'mock-socket';
33
import { ErrorListener } from '../../src/interfaces/ErrorListener';
44
import Mock from '../utils/mockSubscriberDependencies';
55
import pako = require('pako');
6-
import * as uuid from 'uuid/v4';
6+
import { generateUUID } from '../utils/uuid';
77

88
const encodeServerMessage = (strData: string) => {
99
let binaryString = pako.deflate(strData, { to: 'string' });
@@ -12,7 +12,7 @@ const encodeServerMessage = (strData: string) => {
1212
};
1313

1414
describe('Test Connection module', function() {
15-
let mockServer: Server;
15+
let mockServer: Server | undefined;
1616

1717
beforeEach(function() {
1818
// tslint:disable-next-line:no-any
@@ -21,12 +21,12 @@ describe('Test Connection module', function() {
2121
(<any>window).isTestEnvironnement = true;
2222
});
2323

24-
afterEach(() => {
24+
afterEach((done) => {
2525
if (mockServer) {
26-
mockServer.stop(() => {
27-
/**/
28-
});
26+
mockServer.close(); // Utiliser close() et non stop()
27+
mockServer = undefined;
2928
}
29+
done(); // Pour Jest : signaler la fin du teardown
3030
});
3131

3232
describe('Test createSession method', function() {
@@ -41,7 +41,7 @@ describe('Test Connection module', function() {
4141
})
4242
.then(session => {
4343
expect(session).not.toBe(null);
44-
mockServer.stop(done);
44+
mockServer?.stop(done);
4545
})
4646
.catch(err => {
4747
console.log(err);
@@ -72,7 +72,7 @@ describe('Test Connection module', function() {
7272
connection.createSession(xcApiFileName).catch(error => {
7373
// it refers explicitly to the unknown Api on the error message, not to some random crash
7474
expect(error.message).toMatch(xcApiFileName);
75-
mockServer.stop(done);
75+
mockServer?.stop(done);
7676
});
7777
});
7878

@@ -90,7 +90,7 @@ describe('Test Connection module', function() {
9090
mockServer = new Server(serverUrl);
9191
const xcApiFileName = 'api.xcApi';
9292
mockServer.on('connection', server => {
93-
mockServer.close(undefined);
93+
mockServer?.close(undefined);
9494
});
9595
new XComponent()
9696
.connect(serverUrl, new FakeErrorHandler(err => done()))
@@ -114,7 +114,7 @@ describe('Test Connection module', function() {
114114
describe('Test getModel method', function() {
115115
let serverMock: Server, serverUrl: string;
116116
beforeEach(function() {
117-
serverUrl = 'wss://' + uuid();
117+
serverUrl = 'wss://' + generateUUID();
118118
serverMock = new Server(serverUrl);
119119
});
120120

src/communication/WebSocketSubscriber.test.ts

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,31 @@ import { Deserializer } from '../../src/communication/xcomponentMessages';
44
import Mock from '../utils/mockSubscriberDependencies';
55
import { EventEmitter } from 'events';
66
import { PrivateTopics } from '../../src/interfaces/PrivateTopics';
7-
import * as uuid from 'uuid/v4';
7+
import { generateUUID } from '../utils/uuid';
88
import { verify, instance, mock, anything } from '../../node_modules/ts-mockito/lib/ts-mockito';
99
import { WebSocketWrapper } from '../../src/communication/WebSocketWrapper';
1010

1111
describe('Test xcWebSocketSubscriber module', function() {
12+
let mockServer: Server | undefined;
1213
beforeEach(function() {
1314
// tslint:disable-next-line:no-any
1415
(<any>window).WebSocket = WebSocket;
1516
// tslint:disable-next-line:no-any
1617
(<any>window).isTestEnvironnement = true;
1718
});
1819

20+
21+
afterEach(() => {
22+
if (mockServer) {
23+
mockServer.close();
24+
mockServer = undefined;
25+
}
26+
});
27+
1928
describe('Test subscribe method', function() {
20-
let subscriber, mockServer: Server, mockWebSocket;
29+
let subscriber, mockWebSocket;
2130
beforeEach(function() {
22-
let serverUrl = 'wss://' + uuid();
31+
let serverUrl = 'wss://' + generateUUID();
2332
mockServer = new Server(serverUrl);
2433
mockWebSocket = new WebSocket(serverUrl);
2534
subscriber = new WebSocketSubscriber(new WebSocketWrapper(mockWebSocket), Mock.configuration);
@@ -38,14 +47,14 @@ describe('Test xcWebSocketSubscriber module', function() {
3847
expect(data.stateMachineRef.StateName).toEqual(Mock.correctReceivedData.stateMachineRef.StateName);
3948
expect(data.stateMachineRef.send).toEqual(expect.any(Function));
4049
expect(data.jsonMessage).toEqual(Mock.correctReceivedData.jsonMessage);
41-
mockServer.stop(done);
50+
mockServer?.stop(done);
4251
};
4352
// subscribe send a message (subscribe request)
4453
subscriber.subscribe('component', 'stateMachine', { onStateMachineUpdate: stateMachineUpdateListener });
4554
};
4655

4756
// tslint:disable-next-line:no-any
48-
mockServer.on('connection', function(server: any) {
57+
mockServer?.on('connection', function(server: any) {
4958
// when subscribe request is received, we send send jsonData
5059
// tslint:disable-next-line:no-any
5160
server.on('message', function(subscribeRequest: any) {
@@ -103,9 +112,9 @@ describe('Test xcWebSocketSubscriber module', function() {
103112
});
104113

105114
describe('Test getSnapshot method', function() {
106-
let subscriber, mockServer: Server, mockWebSocket, privateTopics;
115+
let subscriber, mockWebSocket, privateTopics;
107116
beforeEach(function() {
108-
let serverUrl = 'wss://' + uuid();
117+
let serverUrl = 'wss://' + generateUUID();
109118
mockServer = new Server(serverUrl);
110119
mockWebSocket = new WebSocket(serverUrl);
111120
subscriber = new WebSocketSubscriber(new WebSocketWrapper(mockWebSocket), Mock.configuration);
@@ -117,7 +126,7 @@ describe('Test xcWebSocketSubscriber module', function() {
117126
let deserializer = new Deserializer();
118127

119128
// tslint:disable-next-line:no-any
120-
mockServer.on('connection', function(server: any) {
129+
mockServer?.on('connection', function(server: any) {
121130
let n = -3;
122131
let topic: string = '';
123132

@@ -164,7 +173,7 @@ describe('Test xcWebSocketSubscriber module', function() {
164173
mockWebSocket.onopen = function() {
165174
subscriber
166175
.getSnapshot('component', 'stateMachine', privateTopics)
167-
.then(items => mockServer.stop(done))
176+
.then(items => mockServer?.stop(done))
168177
.catch(err => {
169178
console.error(err);
170179
});

0 commit comments

Comments
 (0)