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

@@ -2,6 +2,7 @@
import semver from "semver";
import logger from "./logger";
import nativeMessaging from "./nativeMessaging";
import options from "./options";
@@ -13,7 +14,7 @@ async function connect (): Promise<browser.runtime.Port> {
bridgePort.onDisconnect.addListener(() => {
if (bridgePort.error) {
console.error(`${applicationName} disconnected:`
, this.bridgePort.error.message);
, bridgePort.error.message);
} else {
console.info(`${applicationName} disconnected`);
}
@@ -35,6 +36,10 @@ export interface BridgeInfo {
async function getInfo (): Promise<BridgeInfo> {
const applicationName = await options.get("bridgeApplicationName");
if (!applicationName) {
throw logger.error("Bridge application name not found.");
}
let applicationVersion: string;
try {
@@ -45,7 +50,7 @@ async function getInfo (): Promise<BridgeInfo> {
, { subject: "bridge:/getInfo"
, data: version });
} catch (err) {
return null;
throw logger.error("Failed to connect to bridge application");
}
/**

View File

@@ -1,5 +1,6 @@
"use strict";
import logger from "./logger";
import { stringify } from "./utils";
import { ReceiverSelection
@@ -27,6 +28,11 @@ export default async function loadSender (opts: LoadSenderOptions) {
switch (opts.selection.mediaType) {
case ReceiverSelectorMediaType.App: {
const shim = ShimManager.getShim(opts.tabId, opts.frameId);
if (!shim) {
throw logger.error(`Shim not found at tabId ${
opts.tabId} / frameId ${opts.frameId}`)
}
shim.contentPort.postMessage({
subject: "shim:/launchApp"
, data: { receiver: opts.selection.receiver }

19
ext/src/lib/logger.ts Normal file
View File

@@ -0,0 +1,19 @@
"use strict";
export class Logger {
constructor (private prefix: string) {}
log (message: string) {
console.log(`${this.prefix} (Log): ${message}`);
}
debug (message: string) {
console.debug(`${this.prefix} (Debug): ${message}`);
}
error (message: string) {
const formattedMessage = `${this.prefix} (Error): ${message}`;
console.error(formattedMessage);
return new Error(formattedMessage);
}
}
export default new Logger("fx_cast");

View File

@@ -116,7 +116,7 @@ function connectNative (application: string) {
socket.addEventListener("close", ev => {
if (ev.code !== 1000) {
this.error = {
portObject.error = {
// TODO: Set a proper error message
message: ""
};

View File

@@ -2,6 +2,8 @@
import defaultOptions from "../defaultOptions";
import logger from "./logger";
import { ReceiverSelectorType } from "../background/receiverSelector";
import { TypedEventTarget } from "./typedEvents";
import { TypedStorageArea } from "./typedStorage";
@@ -116,6 +118,8 @@ export default new class extends TypedEventTarget<EventMap> {
if (options.hasOwnProperty(name)) {
return options[name];
} else {
throw logger.error(`Failed to find option ${name} in storage.`);
}
}
@@ -139,20 +143,16 @@ export default new class extends TypedEventTarget<EventMap> {
* storage are set. Does not override any existing options.
*/
public async update (defaults = defaultOptions): Promise<void> {
const oldOpts = await this.getAll();
const newOpts: Partial<Options> = {};
const newOpts = await this.getAll();
// Find options not already in storage
for (const [ optName, optVal ] of Object.entries(defaults)) {
if (!oldOpts.hasOwnProperty(optName)) {
if (!newOpts.hasOwnProperty(optName)) {
newOpts[optName] = optVal;
}
}
// Update storage with default values of new options
return this.setAll({
...oldOpts
, ...newOpts
});
return this.setAll(newOpts);
}
};

View File

@@ -5,13 +5,17 @@ export interface TypedEvents {
}
export class TypedEventTarget<T extends TypedEvents> extends EventTarget {
// @ts-ignore
public addEventListener<K extends keyof T> (
type: K, listener: (ev: CustomEvent<T[K]>) => void): void {
// @ts-ignore
super.addEventListener(type as string, listener);
}
// @ts-ignore
public removeEventListener<K extends keyof T> (
type: K, listener: (ev: CustomEvent<T[K]>) => void): void {
// @ts-ignore
super.removeEventListener(type as string, listener);
}

View File

@@ -11,7 +11,7 @@ const UA_CHROME_LEGACY = "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.288
const UA_SAFARI = "AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Safari/605.1.15";
function getPlatformComponent (platform: string): string {
function getPlatformComponent (platform: string): string | undefined {
switch (platform) {
case "mac": return PLATFORM_MAC; break;
case "win": return PLATFORM_WIN; break;

View File

@@ -1,5 +1,7 @@
"use strict";
import logger from "./logger";
import { ReceiverSelectorMediaType } from "../background/receiverSelector";
@@ -10,6 +12,8 @@ export function getNextEllipsis (ellipsis: string): string {
if (ellipsis === "..") return "...";
if (ellipsis === "...") return "";
/* tslint:enable:curly */
return "";
}
/**
@@ -79,7 +83,7 @@ export function getMediaTypesForPageUrl (
}
interface WindowCenteredProps {
export interface WindowCenteredProps {
width: number;
height: number;
left: number;
@@ -91,6 +95,11 @@ export function getWindowCenteredProps (
, width: number
, height: number): WindowCenteredProps {
if (refWin.left === undefined || refWin.width === undefined
|| refWin.top === undefined || refWin.height === undefined) {
throw logger.error("refWin missing positional attributes.");
}
const centerX = refWin.left + (refWin.width / 2);
const centerY = refWin.top + (refWin.height / 3);