mirror of
https://github.com/hensm/fx_cast.git
synced 2026-06-11 10:09:59 +00:00
Enable strict mode for extension build
This commit is contained in:
@@ -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");
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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
19
ext/src/lib/logger.ts
Normal 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");
|
||||
@@ -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: ""
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user