Skip to content

Commit 415e630

Browse files
committed
enable strict typescript mode
1 parent 4ed7973 commit 415e630

6 files changed

Lines changed: 72 additions & 37 deletions

File tree

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
# Package management
55
node_modules/
6-
yarn-error.json
6+
yarn-error.log
77
.yarn/*
88
!.yarn/releases
99
!.yarn/plugins

package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,11 @@
1010
"license": "Apache-2.0",
1111
"devDependencies": {
1212
"@types/chrome": "^0.0.128",
13+
"@types/classnames": "^2.2.11",
1314
"@types/react": "^16.14.2",
1415
"@types/react-dom": "^16.9.10",
16+
"@types/react-fontawesome": "^1.6.4",
17+
"@types/react-inspector": "^4.0.1",
1518
"@types/rsocket-core": "^0.0.6",
1619
"@types/rsocket-types": "^0.0.2",
1720
"@types/rsocket-websocket-client": "^0.0.3",

src/inspector.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import React from 'react';
22
import ReactDOM from 'react-dom';
33
import './reset.css';
4-
import App from './viewer/App';
4+
import App, {ChromeHandlers} from './viewer/App';
55

6-
const handlers = {};
6+
const handlers: ChromeHandlers = {};
77

88
declare let window: any;
99
if (!window.inspectors) {
@@ -49,7 +49,7 @@ if (inspector && inspector.active) {
4949
}
5050

5151
function startDebugging() {
52-
chrome.debugger.sendCommand({tabId}, "Network.enable", null, () => {
52+
chrome.debugger.sendCommand({tabId}, "Network.enable", undefined, () => {
5353
if (chrome.runtime.lastError) {
5454
console.error(chrome.runtime.lastError.message);
5555
} else {

src/viewer/App.tsx

Lines changed: 36 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import React, {MouseEventHandler} from 'react';
2+
// @ts-ignore no types for the package
23
import Panel from 'react-flex-panel';
34
import FontAwesome from 'react-fontawesome';
45
import classNames from 'classnames';
@@ -16,7 +17,7 @@ import {
1617
} from "rsocket-core";
1718
import {Encoders} from "rsocket-core/RSocketEncoding";
1819

19-
function getRSocketType(type) {
20+
function getRSocketType(type: number): string {
2021
for (const [name, code] of Object.entries(FRAME_TYPES)) {
2122
if (code === type) {
2223
return name;
@@ -25,32 +26,33 @@ function getRSocketType(type) {
2526
return toHex(type);
2627
}
2728

28-
function toHex(n) {
29+
function toHex(n: number): string {
2930
return '0x' + n.toString(16);
3031
}
3132

3233
function shortFrame(frame: Frame) {
3334
const name = getRSocketType(frame.type);
3435
const flags: string[] = [];
3536
for (const [name, flag] of Object.entries(FLAGS)) {
37+
// noinspection JSBitwiseOperatorUsage
3638
if (frame.flags & flag) {
3739
flags.push(name);
3840
}
3941
}
4042
return `${name} [${flags.join(", ")}]`;
4143
}
4244

43-
const padded = (num, d) => num.toFixed(0).padStart(d, '0');
45+
const padded = (num: number, d: number) => num.toFixed(0).padStart(d, '0');
4446

45-
const stringToBuffer = str => {
47+
function stringToBuffer(str: string) {
4648
const ui8 = new Uint8Array(str.length);
4749
for (let i = 0; i < str.length; ++i) {
4850
ui8[i] = str.charCodeAt(i);
4951
}
5052
return ui8;
51-
};
53+
}
5254

53-
const TimeStamp = ({time}) => {
55+
const TimeStamp = ({time}: { time: Date }) => {
5456
const h = time.getHours();
5557
const m = time.getMinutes();
5658
const s = time.getSeconds();
@@ -92,8 +94,8 @@ interface RSocketFrameProps {
9294
}
9395

9496
class RSocketFrame extends React.Component<RSocketFrameProps, any> {
95-
private hexView: HTMLUListElement;
96-
private asciiView: HTMLUListElement;
97+
private hexView: HTMLUListElement | null = null;
98+
private asciiView: HTMLUListElement | null = null;
9799

98100
render() {
99101
const {frame, data, className, ...props} = this.props;
@@ -107,7 +109,7 @@ class RSocketFrame extends React.Component<RSocketFrameProps, any> {
107109
const row = [...(data as any).subarray(pos, pos + 16)];
108110
lineNumbers.push(<li key={pos}>{pos.toString(16).padStart(numDigits, '0')}:</li>);
109111
hexView.push(<li key={pos}>
110-
{row.map((byte, i) => <span key={i}>{byte.toString(16).padStart(2, '0')}</span>)}
112+
{row.map((byte: number, i) => <span key={i}>{byte.toString(16).padStart(2, '0')}</span>)}
111113
{row.length < 16 && [...Array(16 - row.length)].map((nil, i) => <span key={i}
112114
className="padding">{" "}</span>)}
113115
</li>);
@@ -172,7 +174,7 @@ class FrameList extends React.Component<any, any> {
172174
<FontAwesome className="list-button" name="stop" onClick={onStop} title="Stop"/>
173175
</div>
174176
<ul className="frame-list" onClick={() => onSelect(null)}>
175-
{frames.map(frame =>
177+
{frames.map((frame: WsFrame) =>
176178
<FrameEntry key={frame.id}
177179
frame={frame}
178180
selected={frame.id === activeId}
@@ -187,7 +189,7 @@ class FrameList extends React.Component<any, any> {
187189
}
188190
}
189191

190-
const TextViewer = ({data}) => (
192+
const TextViewer = ({data}: { data: string | Uint8Array }) => (
191193
<div className="TextViewer tab-pane">
192194
{data}
193195
</div>
@@ -197,7 +199,7 @@ const TextViewer = ({data}) => (
197199
let cachedEncoders: Encoders<any> = Utf8Encoders
198200
let cachedLengthPrefixedFrames: boolean = false;
199201

200-
function tryDeserializeFrameWith(data: string, buffer: Buffer, lengthPrefixedFrames, encoders: Encoders<any>) {
202+
function tryDeserializeFrameWith(data: string, buffer: Buffer, lengthPrefixedFrames: boolean, encoders: Encoders<any>) {
201203
try {
202204
return lengthPrefixedFrames
203205
? deserializeFrameWithLength(buffer, encoders)
@@ -234,7 +236,7 @@ function tryDeserializeFrame(data: string): Frame | undefined {
234236
return undefined;
235237
}
236238

237-
const RSocketViewer = ({frame, data}) => {
239+
const RSocketViewer = ({frame, data}: { frame: Frame, data: string }) => {
238240
try {
239241
return (
240242
<div className="TextViewer tab-pane">
@@ -255,7 +257,7 @@ const RSocketViewer = ({frame, data}) => {
255257
class FrameView extends React.Component<{ wsFrame: WsFrame }, { panel?: string }> {
256258
constructor(props: { wsFrame: WsFrame }) {
257259
super(props);
258-
this.state = {panel: null};
260+
this.state = {panel: undefined};
259261
}
260262

261263
render() {
@@ -264,8 +266,8 @@ class FrameView extends React.Component<{ wsFrame: WsFrame }, { panel?: string }
264266
const panel = rsocketFrame
265267
? <RSocketViewer frame={rsocketFrame} data={wsFrame.payload}/>
266268
: wsFrame.text
267-
? <TextViewer data={wsFrame.text}/>
268-
: <TextViewer data={wsFrame.binary}/>;
269+
? <TextViewer data={wsFrame.text}/>
270+
: <TextViewer data={wsFrame.binary!}/>;
269271
return (
270272
<div className="FrameView">
271273
{panel}
@@ -302,29 +304,31 @@ interface WebSocketFrame {
302304
interface AppState {
303305
frames: WsFrame[];
304306
capturing: boolean;
305-
activeId: null
307+
activeId?: number
306308
}
307309

308-
export default class App extends React.Component<any, AppState> {
310+
export type ChromeHandlers = { [name: string]: any };
311+
312+
export default class App extends React.Component<{ handlers: ChromeHandlers, }, AppState> {
309313
_uniqueId = 0;
310-
issueTime = null;
311-
issueWallTime = null;
314+
issueTime?: number = undefined;
315+
issueWallTime?: number = undefined;
312316

313317
state: AppState = {
314318
frames: [],
315-
activeId: null,
319+
activeId: undefined,
316320
capturing: true,
317321
}
318322

319-
getTime(timestamp): Date {
320-
if (this.issueTime == null) {
323+
getTime(timestamp: number): Date {
324+
if (this.issueTime === undefined || this.issueWallTime === undefined) {
321325
this.issueTime = timestamp;
322326
this.issueWallTime = new Date().getTime();
323327
}
324328
return new Date((timestamp - this.issueTime) * 1000 + this.issueWallTime);
325329
}
326330

327-
constructor(props) {
331+
constructor(props: { handlers: ChromeHandlers, }) {
328332
super(props);
329333

330334
props.handlers["Network.webSocketFrameReceived"] = this.frameReceived.bind(this);
@@ -355,7 +359,7 @@ export default class App extends React.Component<any, AppState> {
355359
);
356360
}
357361

358-
selectFrame = id => {
362+
selectFrame = (id: number) => {
359363
this.setState({activeId: id});
360364
};
361365

@@ -371,7 +375,7 @@ export default class App extends React.Component<any, AppState> {
371375
this.setState({capturing: false});
372376
}
373377

374-
addFrame(type, timestamp, response: WebSocketFrame) {
378+
addFrame(type: 'incoming' | 'outgoing', timestamp: number, response: WebSocketFrame) {
375379
if (response.opcode === 1 || response.opcode === 2) {
376380
const frame: WsFrame = {
377381
type,
@@ -389,15 +393,15 @@ export default class App extends React.Component<any, AppState> {
389393
}
390394
}
391395

392-
frameReceived({timestamp, response}: { timestamp: any, response: WebSocketFrame }) {
393-
if (this.state.capturing === true) {
394-
this.addFrame("incoming", timestamp, response);
396+
frameReceived({timestamp, response}: { timestamp: number, response: WebSocketFrame }) {
397+
if (this.state.capturing) {
398+
this.addFrame('incoming', timestamp, response);
395399
}
396400
}
397401

398-
frameSent({timestamp, response}: { timestamp: any, response: WebSocketFrame }) {
399-
if (this.state.capturing === true) {
400-
this.addFrame("outgoing", timestamp, response);
402+
frameSent({timestamp, response}: { timestamp: number, response: WebSocketFrame }) {
403+
if (this.state.capturing) {
404+
this.addFrame('outgoing', timestamp, response);
401405
}
402406
}
403407
}

tsconfig.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"compilerOptions": {
3-
"allowSyntheticDefaultImports": true,
3+
"strict": true,
44
"esModuleInterop": true,
55
"jsx": "react",
66
"lib": ["ES2017", "dom"],

yarn.lock

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,11 @@
5656
"@types/filesystem" "*"
5757
"@types/har-format" "*"
5858

59+
"@types/classnames@^2.2.11":
60+
version "2.2.11"
61+
resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.2.11.tgz#2521cc86f69d15c5b90664e4829d84566052c1cf"
62+
integrity sha512-2koNhpWm3DgWRp5tpkiJ8JGc1xTn2q0l+jUNUE7oMKXUf5NpI9AIdC4kbjGNFBdHtcxBD18LAksoudAVhFKCjw==
63+
5964
"@types/filesystem@*":
6065
version "0.0.29"
6166
resolved "https://registry.yarnpkg.com/@types/filesystem/-/filesystem-0.0.29.tgz#ee3748eb5be140dcf980c3bd35f11aec5f7a3748"
@@ -113,6 +118,29 @@
113118
dependencies:
114119
"@types/react" "^16"
115120

121+
"@types/react-fontawesome@^1.6.4":
122+
version "1.6.4"
123+
resolved "https://registry.yarnpkg.com/@types/react-fontawesome/-/react-fontawesome-1.6.4.tgz#95884bd8df906b423a254e00d5050f7fe75b3e76"
124+
integrity sha512-/fHr+BoUX+3MYpCkb8a+Bpt+Je2/0FgFi1XSaHH0ga1hqMy5PS7Ny/XV0Qh5cJHeKvkONbKWPSwgPlqK7UtdqA==
125+
dependencies:
126+
"@types/react" "*"
127+
128+
"@types/react-inspector@^4.0.1":
129+
version "4.0.1"
130+
resolved "https://registry.yarnpkg.com/@types/react-inspector/-/react-inspector-4.0.1.tgz#2009e91321e41b86f7c5a7494f316fcff149a971"
131+
integrity sha512-upvnwdUq6lw3PXIXuHxbO8E51stPg73Rf0TTFXnDpCQD6yDgq/h3yIDrSLL1i3STx2/WsSU4oFYczkNnPp+5Ng==
132+
dependencies:
133+
"@types/react" "*"
134+
csstype "^3.0.2"
135+
136+
"@types/react@*":
137+
version "17.0.0"
138+
resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.0.tgz#5af3eb7fad2807092f0046a1302b7823e27919b8"
139+
integrity sha512-aj/L7RIMsRlWML3YB6KZiXB3fV2t41+5RBGYF8z+tAKU43Px8C3cYUZsDvf1/+Bm4FK21QWBrDutu8ZJ/70qOw==
140+
dependencies:
141+
"@types/prop-types" "*"
142+
csstype "^3.0.2"
143+
116144
"@types/react@^16", "@types/react@^16.14.2":
117145
version "16.14.2"
118146
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.14.2.tgz#85dcc0947d0645349923c04ccef6018a1ab7538c"

0 commit comments

Comments
 (0)