Skip to content

Commit 0f4fdaf

Browse files
Convert adapters and port to TS, remove Evented from port (#2617)
1 parent 6408d35 commit 0f4fdaf

12 files changed

+211
-184
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
import { scheduleOnce } from '@ember/runloop';
22
import { action } from '@ember/object';
3-
import DatePicker from 'ember-inspector/components/ember-flatpickr';
3+
import DatePicker from 'ember-flatpickr/components/ember-flatpickr';
44

55
export default class DatePropertyFieldComponent extends DatePicker {
66
@action
7-
onInsert(element) {
7+
onInsert(element: HTMLInputElement) {
88
super.onInsert(element);
99

1010
scheduleOnce('afterRender', this, this._openFlatpickr);
1111
}
1212

1313
_openFlatpickr() {
14-
this.flatpickrRef.open();
14+
this.flatpickrRef?.open();
1515
}
1616
}

app/config/environment.d.ts

+2
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33
* import config from 'my-app/config/environment'
44
*/
55
declare const config: {
6+
emberVersionsSupported: [fromVersion: string, tillVersion: string];
67
environment: string;
78
modulePrefix: string;
89
podModulePrefix: string;
910
locationType: 'history' | 'hash' | 'none' | 'auto';
11+
previousEmberVersionsSupported: Array<string>;
1012
rootURL: string;
1113
APP: Record<string, unknown>;
1214
};

app/services/adapters/basic.js app/services/adapters/basic.ts

+26-25
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,25 @@
1414
import Service, { inject as service } from '@ember/service';
1515
import { action } from '@ember/object';
1616
import { tracked } from '@glimmer/tracking';
17+
import type { AnyFn } from 'ember/-private/type-utils';
1718
import config from 'ember-inspector/config/environment';
19+
import type PortService from '../port';
20+
import type { Message } from '../port';
1821

19-
export default class Basic extends Service {
20-
@service port;
22+
export default abstract class Basic extends Service {
23+
@service declare port: PortService;
2124

22-
@tracked canOpenResource = false;
25+
_messageCallbacks: Array<AnyFn>;
2326
name = 'basic';
2427

28+
@tracked canOpenResource = false;
29+
2530
/**
2631
* Called when the adapter is created (when
2732
* the inspector app boots).
28-
*
29-
* @method init
3033
*/
31-
init() {
32-
super.init(...arguments);
34+
constructor(properties?: object) {
35+
super(properties);
3336
this._messageCallbacks = [];
3437
this._checkVersion();
3538
}
@@ -41,7 +44,6 @@ export default class Basic extends Service {
4144
* Ember version and needs to switch to an inspector version
4245
* that does.
4346
*
44-
* @method _checkVersion
4547
* @private
4648
*/
4749
_checkVersion() {
@@ -73,35 +75,35 @@ export default class Basic extends Service {
7375
* to switch to an older/new inspector version
7476
* that supports this Ember version.
7577
*
76-
* @method onVersionMismatch
77-
* @param {String} neededVersion (The version to go to)
78+
* @param _neededVersion (The version to go to)
7879
*/
79-
onVersionMismatch() {}
80+
onVersionMismatch(_neededVersion?: string) {}
8081

8182
/**
8283
Used to send messages to EmberDebug
8384
84-
@param type {Object} the message to the send
85+
@param _message the message to send
8586
**/
86-
sendMessage() {}
87+
sendMessage(_message: Partial<Message>) {}
8788

8889
/**
8990
Register functions to be called
9091
when a message from EmberDebug is received
9192
**/
92-
onMessageReceived(callback) {
93+
onMessageReceived(callback: AnyFn) {
9394
this._messageCallbacks.push(callback);
9495
}
9596

96-
_messageReceived(...args) {
97+
_messageReceived(...args: Array<any>) {
9798
this._messageCallbacks.forEach((callback) => {
9899
callback(...args);
99100
});
100101
}
101102

103+
abstract reloadTab(): void;
102104
// Called when the "Reload" is clicked by the user
103105
willReload() {}
104-
openResource /* file, line */() {}
106+
openResource(_file: string, _line: number) {}
105107

106108
@action
107109
refreshPage() {
@@ -126,15 +128,14 @@ export default class Basic extends Service {
126128
* 0 if version1 == version2
127129
* 1 if version1 > version2
128130
*
129-
* @param {String} version1
130-
* @param {String} version2
131-
* @return {Boolean} result of the comparison
131+
* @return result of the comparison
132132
*/
133-
function compareVersion(version1, version2) {
134-
version1 = cleanupVersion(version1).split('.');
135-
version2 = cleanupVersion(version2).split('.');
133+
function compareVersion(version1: string, version2: string) {
134+
const v1 = cleanupVersion(version1).split('.');
135+
const v2 = cleanupVersion(version2).split('.');
136136
for (let i = 0; i < 3; i++) {
137-
let compared = compare(+version1[i], +version2[i]);
137+
// @ts-expect-error TODO: refactor this to make TS happy
138+
let compared = compare(+v1[i], +v2[i]);
138139
if (compared !== 0) {
139140
return compared;
140141
}
@@ -143,11 +144,11 @@ function compareVersion(version1, version2) {
143144
}
144145

145146
/* Remove -alpha, -beta, etc from versions */
146-
function cleanupVersion(version) {
147+
function cleanupVersion(version: string) {
147148
return version.replace(/-.*/g, '');
148149
}
149150

150-
function compare(val, number) {
151+
function compare(val: number, number: number) {
151152
if (val === number) {
152153
return 0;
153154
} else if (val < number) {

app/services/adapters/bookmarklet.js app/services/adapters/bookmarklet.ts

+8-17
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,34 @@
11
/* eslint-disable no-useless-escape */
2-
import { computed } from '@ember/object';
3-
42
import BasicAdapter from './basic';
3+
import type { Message } from '../port';
54

65
export default class Bookmarklet extends BasicAdapter {
76
name = 'bookmarklet';
87

98
/**
109
* Called when the adapter is created.
11-
*
12-
* @method init
1310
*/
14-
init() {
11+
constructor(properties?: object) {
12+
super(properties);
1513
this._connect();
16-
return super.init(...arguments);
1714
}
1815

19-
@computed
2016
get inspectedWindow() {
2117
return window.opener || window.parent;
2218
}
2319

24-
@computed
2520
get inspectedWindowURL() {
2621
return loadPageVar('inspectedWindowURL');
2722
}
2823

29-
sendMessage(options) {
30-
options = options || {};
31-
this.inspectedWindow.postMessage(options, this.inspectedWindowURL);
24+
sendMessage(message?: Partial<Message>) {
25+
this.inspectedWindow.postMessage(message ?? {}, this.inspectedWindowURL);
3226
}
3327

3428
/**
3529
* Redirect to the correct inspector version.
36-
*
37-
* @method onVersionMismatch
38-
* @param {String} goToVersion
3930
*/
40-
onVersionMismatch(goToVersion) {
31+
onVersionMismatch(goToVersion: string) {
4132
this.sendMessage({ name: 'version-mismatch', version: goToVersion });
4233
window.location.href = `../panes-${goToVersion.replace(
4334
/\./g,
@@ -47,7 +38,7 @@ export default class Bookmarklet extends BasicAdapter {
4738

4839
_connect() {
4940
window.addEventListener('message', (e) => {
50-
let message = e.data;
41+
let message = e.data as Message;
5142
if (e.origin !== this.inspectedWindowURL) {
5243
return;
5344
}
@@ -62,7 +53,7 @@ export default class Bookmarklet extends BasicAdapter {
6253
}
6354
}
6455

65-
function loadPageVar(sVar) {
56+
function loadPageVar(sVar: string) {
6657
return decodeURI(
6758
window.location.search.replace(
6859
new RegExp(

app/services/adapters/chrome.js app/services/adapters/chrome.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ export default class Chrome extends WebExtension {
55
name = 'chrome';
66
@tracked canOpenResource = true;
77

8-
openResource(file, line) {
9-
/*global chrome */
8+
openResource(file: string, line: number) {
109
// For some reason it opens the line after the one specified
1110
chrome.devtools.panels.openResource(file, line - 1);
1211
}
File renamed without changes.

app/services/adapters/web-extension.js app/services/adapters/web-extension.ts

+24-30
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,30 @@
1-
/* globals chrome */
2-
import { computed } from '@ember/object';
31
import { tracked } from '@glimmer/tracking';
42

53
import BasicAdapter from './basic';
64
import config from 'ember-inspector/config/environment';
5+
import type { Message } from '../port';
76

8-
let emberDebug = null;
7+
let emberDebug: string | null = null;
98

109
export default class WebExtension extends BasicAdapter {
1110
@tracked canOpenResource = false;
1211
name = 'web-extension';
1312

1413
/**
1514
* Called when the adapter is created.
16-
*
17-
* @method init
1815
*/
19-
init() {
16+
constructor(properties?: object) {
17+
super(properties);
18+
2019
this._connect();
2120
this._handleReload();
2221
this._setThemeColors();
2322

2423
Promise.resolve().then(() => this._sendEmberDebug());
25-
26-
return super.init(...arguments);
2724
}
2825

29-
sendMessage(options) {
30-
options = options || {};
31-
this._chromePort.postMessage(options);
26+
sendMessage(message?: Partial<Message>) {
27+
this._chromePort.postMessage(message ?? {});
3228
}
3329

3430
_sendEmberDebug() {
@@ -44,17 +40,16 @@ export default class WebExtension extends BasicAdapter {
4440
this.onMessageReceived((message, sender) => {
4541
if (message === 'ember-content-script-ready') {
4642
this.sendMessage({
43+
frameId: sender.frameId,
4744
from: 'devtools',
45+
tabId: chrome.devtools.inspectedWindow.tabId,
4846
type: 'inject-ember-debug',
4947
value: url,
50-
tabId: chrome.devtools.inspectedWindow.tabId,
51-
frameId: sender.frameId,
5248
});
5349
}
5450
});
5551
}
5652

57-
@computed
5853
get _chromePort() {
5954
return chrome.runtime.connect();
6055
}
@@ -77,17 +72,20 @@ export default class WebExtension extends BasicAdapter {
7772
let self = this;
7873
chrome.devtools.network.onNavigated.addListener(function () {
7974
self._injectDebugger();
80-
location.reload(true);
75+
location.reload();
8176
});
8277
}
8378

8479
_injectDebugger() {
8580
loadEmberDebug().then((emberDebug) => {
86-
chrome.devtools.inspectedWindow.eval(emberDebug, (success, error) => {
87-
if (success === undefined && error) {
88-
throw error;
89-
}
90-
});
81+
chrome.devtools.inspectedWindow.eval(
82+
emberDebug as string,
83+
(success, error) => {
84+
if (success === undefined && error) {
85+
throw error;
86+
}
87+
},
88+
);
9189
});
9290
}
9391

@@ -108,11 +106,8 @@ export default class WebExtension extends BasicAdapter {
108106

109107
/**
110108
* Open the devtools "Elements" or "Sources" tab and select a specific DOM node or function.
111-
*
112-
* @method inspectJSValue
113-
* @param {String} name
114109
*/
115-
inspectJSValue(name) {
110+
inspectJSValue(name: string) {
116111
chrome.devtools.inspectedWindow.eval(`
117112
inspect(window[${JSON.stringify(name)}]);
118113
delete window[${JSON.stringify(name)}];
@@ -121,11 +116,8 @@ export default class WebExtension extends BasicAdapter {
121116

122117
/**
123118
* Redirect to the correct inspector version.
124-
*
125-
* @method onVersionMismatch
126-
* @param {String} goToVersion
127119
*/
128-
onVersionMismatch(goToVersion) {
120+
onVersionMismatch(goToVersion: string) {
129121
window.location.href = `../panes-${goToVersion.replace(
130122
/\./g,
131123
'-',
@@ -138,14 +130,16 @@ export default class WebExtension extends BasicAdapter {
138130
*/
139131
reloadTab() {
140132
loadEmberDebug().then((emberDebug) => {
141-
chrome.devtools.inspectedWindow.reload({ injectedScript: emberDebug });
133+
chrome.devtools.inspectedWindow.reload({
134+
injectedScript: emberDebug as string,
135+
});
142136
});
143137
}
144138
}
145139

146140
function loadEmberDebug() {
147141
let minimumVersion = config.emberVersionsSupported[0].replace(/\./g, '-');
148-
let xhr;
142+
let xhr: XMLHttpRequest;
149143

150144
return new Promise((resolve) => {
151145
if (!emberDebug) {

app/services/adapters/websocket.js app/services/adapters/websocket.ts

+9-6
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,23 @@
11
import { run } from '@ember/runloop';
22
import BasicAdapter from './basic';
3+
import type { Message } from '../port';
34

45
export default class Websocket extends BasicAdapter {
5-
init() {
6-
super.init();
6+
socket: any;
7+
8+
constructor(properties?: object) {
9+
super(properties);
10+
// @ts-expect-error TODO: figure out how to type this stuff
711
this.socket = window.EMBER_INSPECTOR_CONFIG.remoteDebugSocket;
812
this._connect();
913
}
1014

11-
sendMessage(options) {
12-
options = options || {};
13-
this.socket.emit('emberInspectorMessage', options);
15+
sendMessage(message?: Partial<Message>) {
16+
this.socket.emit('emberInspectorMessage', message ?? {});
1417
}
1518

1619
_connect() {
17-
this.socket.on('emberInspectorMessage', (message) => {
20+
this.socket.on('emberInspectorMessage', (message: Message) => {
1821
run(() => {
1922
this._messageReceived(message);
2023
});

0 commit comments

Comments
 (0)