Enable strict mode for extension build

This commit is contained in:
hensm
2020-01-23 00:58:33 +00:00
parent 3553912584
commit 7f84b90431
59 changed files with 526 additions and 331 deletions

View File

@@ -33,7 +33,7 @@ export default class NativeReceiverSelector
extends TypedEventTarget<ReceiverSelectorEvents>
implements ReceiverSelector {
private bridgePort: browser.runtime.Port;
private bridgePort: (browser.runtime.Port | null) = null;
private wasReceiverSelected: boolean = false;
private _isOpen: boolean = false;

View File

@@ -4,10 +4,11 @@ import ReceiverSelector, {
ReceiverSelectorEvents
, ReceiverSelectorMediaType } from "./ReceiverSelector";
import logger from "../../lib/logger";
import options from "../../lib/options";
import { TypedEventTarget } from "../../lib/typedEvents";
import { getWindowCenteredProps } from "../../lib/utils";
import { getWindowCenteredProps, WindowCenteredProps } from "../../lib/utils";
import { Message, Receiver } from "../../types";
@@ -15,19 +16,19 @@ export default class PopupReceiverSelector
extends TypedEventTarget<ReceiverSelectorEvents>
implements ReceiverSelector {
private windowId: number;
private windowId?: number;
private messagePort: browser.runtime.Port;
private messagePortDisconnected: boolean;
private messagePort?: browser.runtime.Port;
private messagePortDisconnected?: boolean;
private receivers: Receiver[];
private defaultMediaType: ReceiverSelectorMediaType;
private availableMediaTypes: ReceiverSelectorMediaType;
private receivers?: Receiver[];
private defaultMediaType?: ReceiverSelectorMediaType;
private availableMediaTypes?: ReceiverSelectorMediaType;
private wasReceiverSelected: boolean = false;
private _isOpen: boolean = false;
private requestedAppId: string;
private requestedAppId?: string;
constructor () {
@@ -97,9 +98,22 @@ export default class PopupReceiverSelector
this.defaultMediaType = defaultMediaType;
this.availableMediaTypes = availableMediaTypes;
// Calculate centered size/position based on current window
const centeredProps = getWindowCenteredProps(
await browser.windows.getCurrent(), 350, 200);
let centeredProps: WindowCenteredProps = {
left: 100
, top: 100
, width: 350
, height: 200
};
try {
// Calculate centered size/position based on current window
centeredProps = getWindowCenteredProps(
await browser.windows.getCurrent()
, centeredProps.width, centeredProps.height);
} catch {
// Shouldn't ever hit this, but defaults are provided in case
}
const popup = await browser.windows.create({
url: "ui/popup/index.html"
@@ -107,6 +121,10 @@ export default class PopupReceiverSelector
, ...centeredProps
});
if (popup?.id === undefined) {
throw logger.error("Failed to create receiver selector popup.");
}
this._isOpen = true;
this.windowId = popup.id;
@@ -132,7 +150,7 @@ export default class PopupReceiverSelector
}
this._isOpen = false;
this.requestedAppId = null;
this.requestedAppId = undefined;
if (this.messagePort && !this.messagePortDisconnected) {
this.messagePort.disconnect();
@@ -183,10 +201,11 @@ export default class PopupReceiverSelector
}
// Cleanup
this.windowId = null;
this.messagePort = null;
this.receivers = null;
this.defaultMediaType = null;
this.windowId = undefined;
this.messagePort = undefined;
this.receivers = undefined;
this.defaultMediaType = undefined;
this.availableMediaTypes = undefined;
this.wasReceiverSelected = false;
}
@@ -203,7 +222,9 @@ export default class PopupReceiverSelector
browser.windows.onFocusChanged.removeListener(
this.onWindowsFocusChanged);
browser.windows.remove(this.windowId);
if (this.windowId) {
browser.windows.remove(this.windowId);
}
}
}
}

View File

@@ -1,6 +1,7 @@
"use strict";
import options from "../../lib/options";
import logger from "../../lib/logger";
import ShimManager from "../ShimManager";
import StatusManager from "../StatusManager";
@@ -38,7 +39,11 @@ let sharedSelector: ReceiverSelector;
async function getSelector () {
if (!sharedSelector) {
sharedSelector = await createSelector();
try {
sharedSelector = await createSelector();
} catch (err) {
throw logger.error("Failed to create receiver selector.");
}
}
return sharedSelector;
@@ -59,7 +64,7 @@ async function getSelection (
contextTabId: number
, contextFrameId = 0
, withMediaSender = false)
: Promise<ReceiverSelection> {
: Promise<ReceiverSelection | null> {
return new Promise(async (resolve, reject) => {
let currentShim = ShimManager.getShim(
@@ -71,7 +76,7 @@ async function getSelection (
*/
if (currentShim?.requestedAppId ===
await options.get("mirroringAppId")) {
currentShim = null;
currentShim = undefined;
}
let defaultMediaType = ReceiverSelectorMediaType.Tab;
@@ -164,8 +169,7 @@ async function getSelection (
Array.from(StatusManager.getReceivers())
, defaultMediaType
, availableMediaTypes
, currentShim?.requestedAppId
?? (withMediaSender && DEFAULT_MEDIA_RECEIVER_APP_ID));
, currentShim?.requestedAppId ?? DEFAULT_MEDIA_RECEIVER_APP_ID);
});
}