Skip to content

Commit

Permalink
TypeScript and ESLint fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
lieser committed Jan 9, 2022
1 parent 52aabda commit 270da98
Show file tree
Hide file tree
Showing 36 changed files with 319 additions and 238 deletions.
6 changes: 6 additions & 0 deletions .eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,12 @@
"nestedBinaryExpressions": false
}
],
"no-unused-vars": [
"error",
{
"argsIgnorePattern": "^_"
}
],
"require-atomic-updates": "warn",
// Best Practices
"array-callback-return": "warn",
Expand Down
2 changes: 1 addition & 1 deletion WebExtensions.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ declare module browser {
declare module folder {
interface MailFolder {
accountId: string,
type?: string,
type?: string | undefined,
}
}

Expand Down
22 changes: 13 additions & 9 deletions content/background.mjs.js
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,9 @@ async function verifyMessage(tabId, message) {

const verifier = new AuthVerifier();
const res = await verifier.verify(message);
if (!res.dkim[0]) {
throw new Error("Result does not contain a DKIM result.");
}
displayedResultsCache.set(tabId, res);
const warnings = res.dkim[0].warnings_str || [];
/** @type {Parameters<typeof browser.dkimHeader.setDkimHeaderResult>[5]} */
Expand Down Expand Up @@ -113,8 +116,7 @@ async function verifyMessage(tabId, message) {
if (prefs.colorFrom) {
switch (res.dkim[0].res_num) {
case AuthVerifier.DKIM_RES.SUCCESS: {
const dkim = res.dkim[0];
if (!dkim.warnings_str || dkim.warnings_str.length === 0) {
if (!res.dkim[0].warnings_str || res.dkim[0].warnings_str.length === 0) {
browser.dkimHeader.highlightFromAddress(tabId, message.id, prefs["color.success.text"], prefs["color.success.background"]);
} else {
browser.dkimHeader.highlightFromAddress(tabId, message.id, prefs["color.warning.text"], prefs["color.warning.background"]);
Expand Down Expand Up @@ -219,19 +221,19 @@ class DisplayAction {
static queryButtonState(tabId) {
const res = displayedResultsCache.get(tabId);
const keyStored = prefs["key.storing"] !== KeyStore.KEY_STORING.DISABLED &&
res?.dkim[0].sdid !== undefined && res?.dkim[0].selector !== undefined;
res?.dkim[0]?.sdid !== undefined && res?.dkim[0].selector !== undefined;
/** @type {RuntimeMessage.DisplayAction.queryButtonStateResult} */
const state = {
reverifyDKIMSignature: res !== undefined,
policyAddUserException:
res?.dkim[0].errorType === "DKIM_POLICYERROR_MISSING_SIG" ||
res?.dkim[0].errorType === "DKIM_POLICYERROR_WRONG_SDID" || (
res?.dkim[0].warnings !== undefined &&
res?.dkim[0]?.errorType === "DKIM_POLICYERROR_MISSING_SIG" ||
res?.dkim[0]?.errorType === "DKIM_POLICYERROR_WRONG_SDID" || (
res?.dkim[0]?.warnings !== undefined &&
res?.dkim[0].warnings.findIndex((e) => {
return e.name === "DKIM_POLICYERROR_WRONG_SDID";
}) !== -1
),
markKeyAsSecure: keyStored && res?.dkim[0].keySecure === false,
markKeyAsSecure: keyStored && res?.dkim[0]?.keySecure === false,
updateKey: keyStored,
};
return state;
Expand Down Expand Up @@ -285,8 +287,8 @@ class DisplayAction {
*/
static async markKeyAsSecure(tabId) {
const res = displayedResultsCache.get(tabId);
const sdid = res?.dkim[0].sdid;
const selector = res?.dkim[0].selector;
const sdid = res?.dkim[0]?.sdid;
const selector = res?.dkim[0]?.selector;
if (sdid === undefined || selector === undefined) {
log.error("Can not mark key as secure, result does not contain an sdid or selector", res);
return;
Expand Down Expand Up @@ -357,4 +359,6 @@ browser.runtime.onMessage.addListener((runtimeMessage, sender, /*sendResponse*/)
// eslint-disable-next-line consistent-return
return promise;
}
log.error("DisplayAction receiver got unknown request.", request);
throw new Error("DisplayAction receiver got unknown request.");
});
2 changes: 1 addition & 1 deletion content/displayAction.mjs.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import { getElementById } from "./domUtils.mjs.js";
*/
async function getCurrentTabId() {
const tab = await browser.tabs.query({ currentWindow: true, active: true });
const tabId = tab[0].id;
const tabId = tab[0]?.id;
if (tabId === undefined) {
throw new Error("active tab has no id");
}
Expand Down
6 changes: 2 additions & 4 deletions content/domUtils.mjs.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,9 @@ export function uploadJsonData() {
const inputElement = document.createElement("input");
inputElement.type = "file";
inputElement.accept = "application/json";
inputElement.addEventListener("change", (event) => {
inputElement.addEventListener("change", (_event) => {
try {
console.log("event:", event);
console.log("files:", inputElement.files);
if (!inputElement.files) {
if (!inputElement.files || !inputElement.files[0]) {
throw new Error("Input element has no file");
}

Expand Down
5 changes: 4 additions & 1 deletion content/options.mjs.js
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ function initNavigation() {
for (const navElement of navElements) {
/** @type {HTMLElement[]} */
const navSelectors = Array.from(navElement.querySelectorAll(":scope>[pane]"));
if (!navSelectors[0]) {
throw new Error("No nav selector found under nav element.");
}
// initialize the navigation to the first navigation selector
setNavigation(navSelectors[0]);
// add navigation callback to click event
Expand Down Expand Up @@ -415,7 +418,7 @@ async function initAccount() {
}

// select first account at start
items[0].click();
items[0]?.click();
}

/**
Expand Down
11 changes: 8 additions & 3 deletions content/table.mjs.js
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,9 @@ export default class DataTable {
*/
constructor(tableElement, editable = false, updatedCellValueCallback = undefined, deleteRowCallback = undefined) {
this._tbody = tableElement.getElementsByTagName("tbody")[0];
if (!this._tbody) {
throw new Error("No tbody element found.");
}
this._isEditable = editable;
this._isEditing = false;
this._updatedCellValueCallback = updatedCellValueCallback;
Expand All @@ -154,12 +157,14 @@ export default class DataTable {
*/
showData(data, sortOrder) {
if (sortOrder) {
data.sort((a,b) => {
data.sort((a, b) => {
for (const column of sortOrder) {
if (a[column] < b[column]) {
const aColumn = a[column] ?? "";
const bColumn = b[column] ?? "";
if (aColumn < bColumn) {
return -1;
}
if (a[column] > b[column]) {
if (aColumn > bColumn) {
return 1;
}
}
Expand Down
5 changes: 2 additions & 3 deletions experiments/dkimHeader.js
Original file line number Diff line number Diff line change
Expand Up @@ -919,11 +919,10 @@ this.dkimHeader = class extends ExtensionCommon.ExtensionAPI {
}

/**
* @param {ExtensionCommon.Context} context
* @param {ExtensionCommon.Context} _context
* @returns {{dkimHeader: browser.dkimHeader}}
*/
// eslint-disable-next-line no-unused-vars
getAPI(context) {
getAPI(_context) {
return {
dkimHeader: {
showDkimHeader: (tabId, messageId, show) => {
Expand Down
6 changes: 3 additions & 3 deletions experiments/jsdns.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
*/
function toType(obj) {
const typeMatch = Object.prototype.toString.call(obj).match(/\s([a-zA-Z]+)/);
if (!typeMatch) {
if (!typeMatch || !typeMatch[1]) {
throw new Error(`Failed to get type for ${obj}`);
}
return typeMatch[1];
Expand Down Expand Up @@ -65,7 +65,7 @@ this.jsdns = class extends ExtensionCommon.ExtensionAPI {
return Promise.resolve();
},
txt(name) {
/** @type {QueryDnsCallback<{resolve: function(browser.jsdns.TxtResult): void, reject: function(Error): void}>} */
/** @type {QueryDnsCallback<{resolve: function(browser.jsdns.TxtResult): void, reject: function(unknown): void}>} */
function dnsCallback(dnsResult, defer, queryError, rcode) {
try {
let resRcode = RCODE.NoError;
Expand All @@ -76,7 +76,7 @@ this.jsdns = class extends ExtensionCommon.ExtensionAPI {
let error = "";
if (typeof queryError === "string") {
error = context.extension.localeData.localizeMessage(queryError);
} else if (toType(queryError) === "Array") {
} else if (toType(queryError) === "Array" && queryError[0]) {
error = context.extension.localeData.localizeMessage(queryError[0], queryError[1]);
}
if (!error) {
Expand Down
4 changes: 2 additions & 2 deletions experiments/libunbound.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ namespace Libunbound {
getNameserversFromOS: boolean,
nameservers: string[],
trustAnchors: string[],
conf?: string,
debuglevel?: number,
conf?: string | undefined,
debuglevel?: number| undefined,
}
interface WorkerRequest extends MessageEvent {
data: Request;
Expand Down
10 changes: 6 additions & 4 deletions experiments/libunbound.js
Original file line number Diff line number Diff line change
Expand Up @@ -349,7 +349,10 @@ this.libunbound = class extends ExtensionCommon.ExtensionAPI {

const aomStartup = Cc[
"@mozilla.org/addons/addon-manager-startup;1"
].getService(Ci.amIAddonManagerStartup);
]?.getService(Ci.amIAddonManagerStartup);
if (!aomStartup) {
throw new Error("Failed to get amIAddonManagerStartup");
}
const manifestURI = Services.io.newURI(
"manifest.json",
null,
Expand All @@ -364,11 +367,10 @@ this.libunbound = class extends ExtensionCommon.ExtensionAPI {
}

/**
* @param {ExtensionCommon.Context} context
* @param {ExtensionCommon.Context} _context
* @returns {{libunbound: browser.libunbound}}
*/
// eslint-disable-next-line no-unused-vars
getAPI(context) {
getAPI(_context) {
const RCODE = {
NoError: 0, // No Error [RFC1035]
FormErr: 1, // Format Error [RFC1035]
Expand Down
22 changes: 11 additions & 11 deletions experiments/libunboundWorker.jsm.js
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,7 @@ function resolve(name, rrtype) {
/** @type {number[]} */
const rdata = new Array(tmp.length);
for (let i = 0; i < tmp.length; i++) {
// @ts-expect-error
rdata[i] = tmp[i];
}
data_raw.push(rdata);
Expand All @@ -222,6 +223,7 @@ function resolve(name, rrtype) {
// read all <character-string>s
while (i < rdata.length) {
// get length of current <character-string>
// @ts-expect-error
j = rdata[i];
i += 1;
// read current <character-string>
Expand Down Expand Up @@ -306,7 +308,7 @@ function load(paths) {
postLog.debug(`loading dependency: ${libDepPath}`);
libDeps.push(ctypes.open(libDepPath));
}
const path = libPaths.slice(-1)[0];
const path = libPaths.slice(-1)[0] ?? "";
postLog.debug(`loading libunbound: ${path}`);
lib = ctypes.open(path);

Expand Down Expand Up @@ -422,40 +424,35 @@ function update_ctx(conf, debuglevel, getNameserversFromOS, nameservers, trustAn
// read config file if specified
if (conf) {
if ((retval = ub_ctx_config(ctx, conf)) !== 0) {
throw new Error(`error in ub_ctx_config: ${
ub_strerror(retval).readString()}. errno: ${ctypes.errno}`);
throw new Error(`error in ub_ctx_config: ${ub_strerror(retval).readString()}. errno: ${ctypes.errno}`);
}
}

// set debuglevel if specified
if (debuglevel) {
if ((retval = ub_ctx_debuglevel(ctx, debuglevel)) !== 0) {
throw new Error(`error in ub_ctx_debuglevel: ${
ub_strerror(retval).readString()}. errno: ${ctypes.errno}`);
throw new Error(`error in ub_ctx_debuglevel: ${ub_strerror(retval).readString()}. errno: ${ctypes.errno}`);
}
}

// get DNS servers form OS
if (getNameserversFromOS) {
if ((retval = ub_ctx_resolvconf(ctx, null)) !== 0) {
throw new Error(`error in ub_ctx_resolvconf: ${
ub_strerror(retval).readString()}. errno: ${ctypes.errno}`);
throw new Error(`error in ub_ctx_resolvconf: ${ub_strerror(retval).readString()}. errno: ${ctypes.errno}`);
}
}

// set additional DNS servers
nameservers.forEach(function (element /*, index, array*/) {
if ((retval = ub_ctx_set_fwd(ctx, element.trim())) !== 0) {
throw new Error(`error in ub_ctx_set_fwd: ${
ub_strerror(retval).readString()}. errno: ${ctypes.errno}`);
throw new Error(`error in ub_ctx_set_fwd: ${ub_strerror(retval).readString()}. errno: ${ctypes.errno}`);
}
});

// add root trust anchors
trustAnchors.forEach(function (element /*, index, array*/) {
if ((retval = ub_ctx_add_ta(ctx, element.trim())) !== 0) {
throw new Error(`error in ub_ctx_add_ta: ${
ub_strerror(retval).readString()}. errno: ${ctypes.errno}`);
throw new Error(`error in ub_ctx_add_ta: ${ub_strerror(retval).readString()}. errno: ${ctypes.errno}`);
}
});

Expand Down Expand Up @@ -508,18 +505,21 @@ onmessage = function (msg) {
result: res,
});
} catch (exception) {
// @ts-expect-error
postLog.debug(`Posting exception back to main script: ${exception}; stack: ${exception.stack}`);
postMessage({
type: "error",
subType: "DKIM_DNSERROR_UNKNOWN",
callId: msg.data.callId,
message: `libunboundWorker: ${exception}`,
// @ts-expect-error
stack: exception.stack,
});
}
} catch (e) {
// @ts-expect-error
dump(`${e}\n`);
// @ts-expect-error
postLog.error(`Exception: ${e}; stack: ${e.stack}`);
}
};
6 changes: 3 additions & 3 deletions experiments/mailUtils.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,10 @@ var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
// eslint-disable-next-line no-invalid-this
this.mailUtils = class extends ExtensionCommon.ExtensionAPI {
/**
* @param {ExtensionCommon.Context} context
* @param {ExtensionCommon.Context} _context
* @returns {{mailUtils: browser.mailUtils}}
*/
// eslint-disable-next-line no-unused-vars
getAPI(context) {
getAPI(_context) {
return {
mailUtils: {
/**
Expand All @@ -44,6 +43,7 @@ this.mailUtils = class extends ExtensionCommon.ExtensionAPI {
// domains like "blogspot.co.uk", "blogspot.com", "googlecode.com"
// are on the public suffix list, but should be valid base domains
// because e-mails may be send from them
// @ts-expect-error
if (e.result === Cr.NS_ERROR_INSUFFICIENT_DOMAIN_LEVELS) {
// add "invalid" subdomain to avoid error
const invalidSub = "invalid.";
Expand Down
5 changes: 2 additions & 3 deletions experiments/migration.js
Original file line number Diff line number Diff line change
Expand Up @@ -78,11 +78,10 @@ this.migration = class extends ExtensionCommon.ExtensionAPI {
}

/**
* @param {ExtensionCommon.Context} context
* @param {ExtensionCommon.Context} _context
* @returns {{migration: browser.migration}}
*/
// eslint-disable-next-line no-unused-vars
getAPI(context) {
getAPI(_context) {
return {
migration: {
getUserPrefs: () => {
Expand Down
5 changes: 2 additions & 3 deletions experiments/storageMessage.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,10 @@ this.storageMessage = class extends ExtensionCommon.ExtensionAPI {
}

/**
* @param {ExtensionCommon.Context} context
* @param {ExtensionCommon.Context} _context
* @returns {{storageMessage: browser.storageMessage}}
*/
// eslint-disable-next-line no-unused-vars
getAPI(context) {
getAPI(_context) {
return {
storageMessage: {
set: (messageId, key, value) => {
Expand Down
Loading

0 comments on commit 270da98

Please sign in to comment.