From c55e0d0425b8f67378a28f069816b47d545a45f8 Mon Sep 17 00:00:00 2001 From: Xavier Stouder Date: Sun, 10 Jan 2016 20:11:35 +0100 Subject: [PATCH 1/3] Use "as" keyword for type assertions everywhere, fixes #21 --- SupCore/Data/Base/index.ts | 4 +- SupCore/Data/Entries.ts | 2 +- .../src/dialogs/CreateOrEditProjectDialog.ts | 4 +- client/src/project/index.ts | 80 +++++++++---------- launcher/src/myServer.ts | 6 +- launcher/src/panes/community.ts | 4 +- launcher/src/panes/index.ts | 18 ++--- launcher/src/panes/servers.ts | 4 +- launcher/src/panes/settings.ts | 8 +- launcher/src/splash/index.ts | 8 +- server/BaseRemoteClient.ts | 10 +-- server/ProjectServer.ts | 2 +- server/RemoteProjectClient.ts | 4 +- server/authenticate.ts | 4 +- server/index.ts | 10 +-- 15 files changed, 84 insertions(+), 84 deletions(-) diff --git a/SupCore/Data/Base/index.ts b/SupCore/Data/Base/index.ts index 68d62eff..f3062016 100644 --- a/SupCore/Data/Base/index.ts +++ b/SupCore/Data/Base/index.ts @@ -71,7 +71,7 @@ export function getRuleViolation(value: any, rule: Rule, create = false): Violat case "enum": { if (typeof value !== "string") return { message: "Expected string for enum" }; - let items = rule.items; + let items = (rule as string[]).items; if (items.indexOf(value) === -1) return { message: `Invalid enum value: ${value}` }; } break; @@ -130,7 +130,7 @@ export function getRuleViolation(value: any, rule: Rule, create = false): Violat if (rule.items != null) { for (let index = 0; index < value.length; index++) { let item: any = value[index]; - let violation = getRuleViolation(item, rule.items, true); + let violation = getRuleViolation(item, (rule as Rule).items, true); if (violation != null) { let violationPath = (violation.path != null) ? `[${index}].${violation.path}` : `[${index}]`; return { message: violation.message, path: violationPath }; diff --git a/SupCore/Data/Entries.ts b/SupCore/Data/Entries.ts index aca551ba..69a7f989 100644 --- a/SupCore/Data/Entries.ts +++ b/SupCore/Data/Entries.ts @@ -80,7 +80,7 @@ export default class Entries extends SupData.Base.TreeById { } remove(id: string, callback: (err: string) => any) { - let node = this.byId[id]; + let node = (this as EntryNode).byId[id]; if (node == null) { callback(`Invalid node id: ${id}`); return; } if (node.type == null && node.children.length !== 0) { callback("The folder must be empty"); return; } diff --git a/client/src/dialogs/CreateOrEditProjectDialog.ts b/client/src/dialogs/CreateOrEditProjectDialog.ts index 4e54e4f0..9e08be3b 100644 --- a/client/src/dialogs/CreateOrEditProjectDialog.ts +++ b/client/src/dialogs/CreateOrEditProjectDialog.ts @@ -107,7 +107,7 @@ export default class CreateOrEditProjectDialog extends SupClient.dialogs.BaseDia // Description this.descriptionInputElt = document.createElement("textarea"); this.descriptionInputElt.style.flex = "1"; - (this.descriptionInputElt.style).resize = "none"; + ((this as any).descriptionInputElt.style).resize = "none"; this.descriptionInputElt.placeholder = SupClient.i18n.t("hub:newProject.descriptionPlaceholder"); this.descriptionInputElt.addEventListener("keypress", this.onFieldKeyDown); textContainerElt.appendChild(this.descriptionInputElt); @@ -247,7 +247,7 @@ export default class CreateOrEditProjectDialog extends SupClient.dialogs.BaseDia } else { this.iconFile = this.iconInputElt.files[0]; let reader = new FileReader(); - reader.addEventListener("load", (event) => { this.iconElt.src = (event.target).result; }); + reader.addEventListener("load", (event) => { this.iconElt.src = ((event as any).target).result; }); reader.readAsDataURL(this.iconFile); } }; diff --git a/client/src/project/index.ts b/client/src/project/index.ts index afdbf74e..895cfb22 100644 --- a/client/src/project/index.ts +++ b/client/src/project/index.ts @@ -55,7 +55,7 @@ function start() { // Development mode if (localStorage.getItem("superpowers-dev-mode") != null) { - let projectManagementDiv = document.querySelector(".project-management"); + let projectManagementDiv = (document as HTMLDivElement).querySelector(".project-management"); projectManagementDiv.style.backgroundColor = "#37d"; // According to http://stackoverflow.com/a/12747364/915914, window.onerror @@ -96,9 +96,9 @@ function start() { document.querySelector(".project-buttons .stop").addEventListener("click", () => { stopProject(); }); if (!SupClient.isApp) { - (document.querySelector(".project-buttons .publish")).title = SupClient.i18n.t("project:header.publishDisabled"); - (document.querySelector(".project-buttons .debug")).hidden = true; - (document.querySelector(".project-buttons .stop")).hidden = true; + ((document as HTMLButtonElement).querySelector(".project-buttons .publish")).title = SupClient.i18n.t("project:header.publishDisabled"); + ((document as HTMLButtonElement).querySelector(".project-buttons .debug")).hidden = true; + ((document as HTMLButtonElement).querySelector(".project-buttons .stop")).hidden = true; } // Entries tree view @@ -136,7 +136,7 @@ function start() { }); // Global controls - let toggleNotificationsButton = document.querySelector(".top .controls button.toggle-notifications"); + let toggleNotificationsButton = (document as HTMLButtonElement).querySelector(".top .controls button.toggle-notifications"); toggleNotificationsButton.addEventListener("click", onClickToggleNotifications); if (localStorage.getItem("superpowers-disable-notifications") != null) { @@ -148,8 +148,8 @@ function start() { } // Panes and tools - ui.panesElt = document.querySelector(".main .panes"); - ui.toolsElt = document.querySelector(".sidebar .tools ul"); + ui.panesElt = (document as HTMLDivElement).querySelector(".main .panes"); + ui.toolsElt = (document as HTMLUListElement).querySelector(".sidebar .tools ul"); // Messaging window.addEventListener("message", onMessage); @@ -293,14 +293,14 @@ function onDisconnected() { ui.entriesTreeView.treeRoot.innerHTML = ""; updateSelectedEntry(); - (document.querySelector(".project-buttons .run")).disabled = true; - (document.querySelector(".project-buttons .debug")).disabled = true; - (document.querySelector(".project-buttons .stop")).disabled = true; - (document.querySelector(".project-buttons .publish")).disabled = true; - (document.querySelector(".entries-buttons .new-asset")).disabled = true; - (document.querySelector(".entries-buttons .new-folder")).disabled = true; - (document.querySelector(".entries-buttons .search")).disabled = true; - (document.querySelector(".connecting")).hidden = false; + ((document as HTMLButtonElement).querySelector(".project-buttons .run")).disabled = true; + ((document as HTMLButtonElement).querySelector(".project-buttons .debug")).disabled = true; + ((document as HTMLButtonElement).querySelector(".project-buttons .stop")).disabled = true; + ((document as HTMLButtonElement).querySelector(".project-buttons .publish")).disabled = true; + ((document as HTMLButtonElement).querySelector(".entries-buttons .new-asset")).disabled = true; + ((document as HTMLButtonElement).querySelector(".entries-buttons .new-folder")).disabled = true; + ((document as HTMLButtonElement).querySelector(".entries-buttons .search")).disabled = true; + ((document as HTMLDivElement).querySelector(".connecting")).hidden = false; } function onWelcome(clientId: number, config: { buildPort: number; systemName: string; }) { @@ -336,14 +336,14 @@ function onEntriesReceived(err: string, entries: SupCore.Data.EntryNode[]) { ui.entriesTreeView.clearSelection(); ui.entriesTreeView.treeRoot.innerHTML = ""; - (document.querySelector(".connecting")).hidden = true; + ((document as HTMLDivElement).querySelector(".connecting")).hidden = true; - if (SupClient.isApp) (document.querySelector(".project-buttons .publish")).disabled = false; - (document.querySelector(".project-buttons .run")).disabled = false; - (document.querySelector(".project-buttons .debug")).disabled = false; - (document.querySelector(".entries-buttons .new-asset")).disabled = false; - (document.querySelector(".entries-buttons .new-folder")).disabled = false; - (document.querySelector(".entries-buttons .search")).disabled = false; + if (SupClient.isApp) ((document as HTMLButtonElement).querySelector(".project-buttons .publish")).disabled = false; + ((document as HTMLButtonElement).querySelector(".project-buttons .run")).disabled = false; + ((document as HTMLButtonElement).querySelector(".project-buttons .debug")).disabled = false; + ((document as HTMLButtonElement).querySelector(".entries-buttons .new-asset")).disabled = false; + ((document as HTMLButtonElement).querySelector(".entries-buttons .new-folder")).disabled = false; + ((document as HTMLButtonElement).querySelector(".entries-buttons .search")).disabled = false; function walk(entry: SupCore.Data.EntryNode, parentEntry: SupCore.Data.EntryNode, parentElt: HTMLLIElement) { let liElt = createEntryElement(entry); @@ -402,11 +402,11 @@ function onEntryAddedAck(err: string, id: string) { function onEntryMoved(id: string, parentId: string, index: number) { data.entries.client_move(id, parentId, index); - let entryElt = ui.entriesTreeView.treeRoot.querySelector(`[data-id='${id}']`); + let entryElt = (ui as HTMLLIElement).entriesTreeView.treeRoot.querySelector(`[data-id='${id}']`); let oldParentId: string = entryElt.dataset["parentId"]; if (oldParentId != null) { - let oldParentElt = ui.entriesTreeView.treeRoot.querySelector(`[data-id='${oldParentId}']`); + let oldParentElt = (ui as HTMLLIElement).entriesTreeView.treeRoot.querySelector(`[data-id='${oldParentId}']`); let parentEntry = data.entries.byId[oldParentId]; let childrenElt = oldParentElt.querySelector("span.children"); childrenElt.textContent = `(${parentEntry.children.length})`; @@ -447,7 +447,7 @@ function onEntryTrashed(id: string) { let oldParentId: string = entryElt.dataset["parentId"]; if (oldParentId != null) { - let oldParentElt = ui.entriesTreeView.treeRoot.querySelector(`[data-id='${oldParentId}']`); + let oldParentElt = (ui as HTMLLIElement).entriesTreeView.treeRoot.querySelector(`[data-id='${oldParentId}']`); let parentEntry = data.entries.byId[oldParentId]; let childrenElt = oldParentElt.querySelector("span.children"); childrenElt.textContent = `(${parentEntry.children.length})`; @@ -645,7 +645,7 @@ function onEntryDrop(dropInfo: any, orderedNodes: any) { function updateSelectedEntry() { let allButtons = document.querySelectorAll(".entries-buttons button.edit"); for (let index = 0; index < allButtons.length; index++) { - let button = allButtons.item(index); + let button = (all as HTMLButtonElement)Buttons.item(index); let disabled = (ui.entriesTreeView.selectedNodes.length === 0 || (button.classList.contains("single") && ui.entriesTreeView.selectedNodes.length !== 1) || (button.classList.contains("asset-only") && ui.entriesTreeView.selectedNodes[0].classList.contains("group"))); @@ -670,7 +670,7 @@ function onMessage(event: any) { } function onWindowDevError() { - let projectManagementDiv = document.querySelector(".project-management"); + let projectManagementDiv = (document as HTMLDivElement).querySelector(".project-management"); projectManagementDiv.style.backgroundColor = "#c42"; return false; } @@ -685,7 +685,7 @@ function onMessageChat(message: string) { function doNotification() { let title = SupClient.i18n.t("project:header.notifications.new", { projectName: data.manifest.pub.name }); - let notification = new (window).Notification(title, { icon: "/images/icon.png", body: message }); + let notification = new ((window as any)).Notification(title, { icon: "/images/icon.png", body: message }); let closeTimeoutId = setTimeout(() => { notification.close(); }, 5000); @@ -697,11 +697,11 @@ function onMessageChat(message: string) { }); } - if ((window).Notification.permission === "granted") doNotification(); - else if ((window).Notification.permission !== "denied") { - (window).Notification.requestPermission((status: string) => { - (window).Notification.permission = status; - if ((window).Notification.permission === "granted") doNotification(); + if (((window as any)).Notification.permission === "granted") doNotification(); + else if (((window as any)).Notification.permission !== "denied") { + ((window as any)).Notification.requestPermission((status: string) => { + ((window as any)).Notification.permission = status; + if (((window as any)).Notification.permission === "granted") doNotification(); }); } } @@ -753,7 +753,7 @@ function openEntry(id: string, state?: {[name: string]: any}) { if (entry.type == null) { ui.entriesTreeView.selectedNodes[0].classList.toggle("collapsed"); return; } let tab = ui.tabStrip.tabsRoot.querySelector(`li[data-asset-id='${id}']`); - let iframe = ui.panesElt.querySelector(`iframe[data-asset-id='${id}']`); + let iframe = (ui as HTMLIFrameElement).panesElt.querySelector(`iframe[data-asset-id='${id}']`); if (tab == null) { tab = createAssetTabElement(entry); @@ -772,7 +772,7 @@ function openEntry(id: string, state?: {[name: string]: any}) { function openTool(name: string, state?: {[name: string]: any}) { let tab = ui.tabStrip.tabsRoot.querySelector(`li[data-pane='${name}']`); - let iframe = ui.panesElt.querySelector(`iframe[data-name='${name}']`); + let iframe = (ui as HTMLIFrameElement).panesElt.querySelector(`iframe[data-name='${name}']`); if (tab == null) { let tool = data.toolsByName[name]; @@ -1031,7 +1031,7 @@ function onTabActivate(tabElement: any) { if (activeTab != null) { activeTab.classList.remove("active"); - let activeIframe = (ui.panesElt.querySelector("iframe.active")); + let activeIframe = ((ui as HTMLIFrameElement).panesElt.querySelector("iframe.active")); activeIframe.contentWindow.postMessage({ type: "deactivate" }, window.location.origin); activeIframe.classList.remove("active"); } @@ -1041,8 +1041,8 @@ function onTabActivate(tabElement: any) { let assetId = tabElement.dataset["assetId"]; let tabIframe: HTMLIFrameElement; - if (assetId != null) tabIframe = ui.panesElt.querySelector(`iframe[data-asset-id='${assetId}']`); - else tabIframe = ui.panesElt.querySelector(`iframe[data-name='${tabElement.dataset.pane}']`); + if (assetId != null) tabIframe = (ui as HTMLIFrameElement).panesElt.querySelector(`iframe[data-asset-id='${assetId}']`); + else tabIframe = (ui as HTMLIFrameElement).panesElt.querySelector(`iframe[data-name='${tabElement.dataset.pane}']`); tabIframe.classList.add("active"); tabIframe.contentWindow.focus(); @@ -1052,12 +1052,12 @@ function onTabActivate(tabElement: any) { function onTabClose(tabElement: HTMLLIElement) { let assetId = tabElement.dataset["assetId"]; let frameElt: HTMLIFrameElement; - if (assetId != null) frameElt = ui.panesElt.querySelector(`iframe[data-asset-id='${assetId}']`); + if (assetId != null) frameElt = (ui as HTMLIFrameElement).panesElt.querySelector(`iframe[data-asset-id='${assetId}']`); else { let toolName = tabElement.dataset["pane"]; if (toolName === "main") return; - frameElt = ui.panesElt.querySelector(`iframe[data-name='${toolName}']`); + frameElt = (ui as HTMLIFrameElement).panesElt.querySelector(`iframe[data-name='${toolName}']`); } if (tabElement.classList.contains("active")) { diff --git a/launcher/src/myServer.ts b/launcher/src/myServer.ts index 15a4cf12..cf5e78c6 100644 --- a/launcher/src/myServer.ts +++ b/launcher/src/myServer.ts @@ -8,17 +8,17 @@ let childProcess = nodeRequire("child_process"); let myServerElt = document.querySelector(".my-server"); -let myServerTextarea = myServerElt.querySelector("textarea"); +let myServerTextarea = (my as HTMLTextAreaElement)ServerElt.querySelector("textarea"); export let serverProcess: dummy_childProcess.ChildProcess = null; -let autoStartServerCheckbox = document.getElementById("auto-start-server"); +let autoStartServerCheckbox = (document as HTMLInputElement).getElementById("auto-start-server"); autoStartServerCheckbox.checked = config.autoStartServer; autoStartServerCheckbox.addEventListener("change", (event) => { config.autoStartServer = autoStartServerCheckbox.checked; }); -let startStopServerButton = myServerElt.querySelector("button.start-stop-server"); +let startStopServerButton = (my as HTMLButtonElement)ServerElt.querySelector("button.start-stop-server"); startStopServerButton.addEventListener("click", () => { if (serverProcess != null) { startStopServerButton.textContent = "Start"; diff --git a/launcher/src/panes/community.ts b/launcher/src/panes/community.ts index 2f05f300..6dd5bdd0 100644 --- a/launcher/src/panes/community.ts +++ b/launcher/src/panes/community.ts @@ -3,8 +3,8 @@ export {}; let electron: GitHubElectron.Electron = nodeRequire("electron"); document.querySelector(".panes .community").addEventListener("click", (event) => { - if ((event.target).tagName !== "A") return; + if (((event as Element).target).tagName !== "A") return; event.preventDefault(); - electron.shell.openExternal((event.target).href); + electron.shell.openExternal(((event as HTMLAnchorElement).target).href); }); diff --git a/launcher/src/panes/index.ts b/launcher/src/panes/index.ts index 6baf1b25..59261994 100644 --- a/launcher/src/panes/index.ts +++ b/launcher/src/panes/index.ts @@ -3,19 +3,19 @@ import "./settings"; import "./community"; // Panes -let paneButtonsContainer = document.querySelector(".pane-buttons"); -let panesContainer = document.querySelector(".panes"); +let paneButtonsContainer = (document as HTMLDivElement).querySelector(".pane-buttons"); +let panesContainer = (document as HTMLDivElement).querySelector(".panes"); for (let i = 0; i < paneButtonsContainer.children.length; i++) { ((button: HTMLButtonElement, i: number) => { button.addEventListener("click", (event) => { - (paneButtonsContainer.querySelector("button.active")).classList.remove("active"); - (panesContainer.querySelector(".active")).classList.remove("active"); - (event.target).classList.add("active"); - (panesContainer.children[i]).classList.add("active"); + ((pane as HTMLButtonElement)ButtonsContainer.querySelector("button.active")).classList.remove("active"); + ((panes as HTMLDivElement)Container.querySelector(".active")).classList.remove("active"); + ((event as HTMLButtonElement).target).classList.add("active"); + ((panes as HTMLDivElement)Container.children[i]).classList.add("active"); }); - })(paneButtonsContainer.children[i], i); + })((pane as HTMLButtonElement)ButtonsContainer.children[i], i); } -(paneButtonsContainer.children[0]).classList.add("active"); -(panesContainer.children[0]).classList.add("active"); +((pane as HTMLButtonElement)ButtonsContainer.children[0]).classList.add("active"); +((panes as HTMLDivElement)Container.children[0]).classList.add("active"); diff --git a/launcher/src/panes/servers.ts b/launcher/src/panes/servers.ts index 71ade08f..732c51d5 100644 --- a/launcher/src/panes/servers.ts +++ b/launcher/src/panes/servers.ts @@ -23,11 +23,11 @@ function start() { } function createServerElement(entry: { name: string; address: string; }) { - let liElt = document.createElement("li"); + let liElt = (document as HTMLLIElement).createElement("li"); liElt.dataset["name"] = entry.name; liElt.dataset["address"] = entry.address; - let nameSpan = document.createElement("span"); + let nameSpan = (document as HTMLSpanElement).createElement("span"); nameSpan.className = "name"; nameSpan.textContent = entry.name; liElt.appendChild(nameSpan); diff --git a/launcher/src/panes/settings.ts b/launcher/src/panes/settings.ts index d7dda44d..df44ddac 100644 --- a/launcher/src/panes/settings.ts +++ b/launcher/src/panes/settings.ts @@ -21,10 +21,10 @@ if (fs.existsSync(serverPaths.config)) { _.merge(config, userConfig); } -let mainPortInput = document.querySelector("input.main-server-port"); -let buildPortInput = document.querySelector("input.build-server-port"); -let passwordInput = document.querySelector("input.server-password"); -let maxRecentBuildsInput = document.querySelector("input.max-recent-builds"); +let mainPortInput = (document as HTMLInputElement).querySelector("input.main-server-port"); +let buildPortInput = (document as HTMLInputElement).querySelector("input.build-server-port"); +let passwordInput = (document as HTMLInputElement).querySelector("input.server-password"); +let maxRecentBuildsInput = (document as HTMLInputElement).querySelector("input.max-recent-builds"); mainPortInput.value = config.mainPort.toString(); buildPortInput.value = config.buildPort.toString(); diff --git a/launcher/src/splash/index.ts b/launcher/src/splash/index.ts index 3e3f3a1b..33d6d6fc 100644 --- a/launcher/src/splash/index.ts +++ b/launcher/src/splash/index.ts @@ -7,12 +7,12 @@ let electron: GitHubElectron.Electron = nodeRequire("electron"); let packageInfo = require("../../../package.json"); /* tslint:enable */ -let splash = document.querySelector(".splash"); +let splash = (document as HTMLDivElement).querySelector(".splash"); splash.addEventListener("click", (event) => { - if ((event.target).tagName === "A") { + if (((event as Element).target).tagName === "A") { event.preventDefault(); - electron.shell.openExternal((event.target).href); + electron.shell.openExternal(((event as HTMLAnchorElement).target).href); return; } @@ -22,7 +22,7 @@ splash.addEventListener("click", (event) => { // Check for new releases document.querySelector(".splash .version").textContent = `v${packageInfo.version}`; -let updateStatus = document.querySelector(".splash .update-status"); +let updateStatus = (document as HTMLDivElement).querySelector(".splash .update-status"); supFetch("https://api.github.com/repos/superpowers/superpowers/releases/latest", "json", (err, lastRelease) => { if (err != null) { diff --git a/server/BaseRemoteClient.ts b/server/BaseRemoteClient.ts index b3eda096..e2b39a06 100644 --- a/server/BaseRemoteClient.ts +++ b/server/BaseRemoteClient.ts @@ -2,7 +2,7 @@ export default class BaseRemoteClient { subscriptions: string[] = []; constructor(public server: BaseServer, public socket: SocketIO.Socket) { - this.socket.on("error", (err: Error) => { SupCore.log((err).stack); }); + this.socket.on("error", (err: Error) => { SupCore.log(((err as any)).stack); }); this.socket.on("disconnect", this.onDisconnect); this.socket.on("sub", this.onSubscribe); @@ -32,7 +32,7 @@ export default class BaseRemoteClient { let [ , endpoint, id ] = subscription.split(":"); if (id == null) continue; - (this.server.data[endpoint]).release(id, this); + ((this as SupCore.Data.Base.Dictionary).server.data[endpoint]).release(id, this); } this.server.removeRemoteClient(this.socket.id); @@ -49,11 +49,11 @@ export default class BaseRemoteClient { if (id == null) { this.socket.join(roomName); this.subscriptions.push(roomName); - callback(null, (data).pub); + callback(null, ((data as SupCore.Data.Base.Hash)).pub); return; } - (data).acquire(id, this, (err: Error, item: any) => { + ((data as SupCore.Data.Base.Dictionary)).acquire(id, this, (err: Error, item: any) => { if (err != null) { callback(`Could not acquire asset: ${err}`, null); return; } this.socket.join(roomName); @@ -73,7 +73,7 @@ export default class BaseRemoteClient { let index = this.subscriptions.indexOf(roomName); if (index === -1) return; - if (id != null) { (data).release(id, this); } + if (id != null) { ((data as SupCore.Data.Base.Dictionary)).release(id, this); } this.socket.leave(roomName); this.subscriptions.splice(index, 1); diff --git a/server/ProjectServer.ts b/server/ProjectServer.ts index 3fdc3dd0..93ac9933 100644 --- a/server/ProjectServer.ts +++ b/server/ProjectServer.ts @@ -237,7 +237,7 @@ export default class ProjectServer { if (item == null) { SupCore.log(`Tried to schedule an asset save for item with id ${id} but the asset is not loaded.`); SupCore.log(JSON.stringify(this.data.entries.byId[id], null, 2)); - SupCore.log((new Error()).stack); + SupCore.log(((new as any) Error()).stack); return; } let assetPath = path.join(this.projectPath, `assets/${this.data.entries.getStoragePathFromId(id)}`); diff --git a/server/RemoteProjectClient.ts b/server/RemoteProjectClient.ts index f6bd8dde..f8c8dfb3 100644 --- a/server/RemoteProjectClient.ts +++ b/server/RemoteProjectClient.ts @@ -208,7 +208,7 @@ export default class RemoteProjectClient extends BaseRemoteClient { // NOTE: "SocketIO.Namespace.adapter" is not part of the official documented API // It does exist though: https://github.com/Automattic/socket.io/blob/3f72dd3322bcefff07b5976ab817766e421d237b/lib/namespace.js#L89 - for (let socketId in (this.server.io).adapter.rooms[roomName]) { + for (let socketId in ((this as any).server.io).adapter.rooms[roomName]) { let remoteClient = this.server.clientsBySocketId[socketId]; remoteClient.socket.leave(roomName); remoteClient.subscriptions.splice(remoteClient.subscriptions.indexOf(roomName), 1); @@ -503,7 +503,7 @@ export default class RemoteProjectClient extends BaseRemoteClient { async.each(trashedAssetFolders, (trashedAssetFolder, cb) => { let folderPath = path.join(trashedAssetsPath, trashedAssetFolder); rimraf(folderPath, (err) => { - if (err != null) SupCore.log(`Could not delete ${folderPath}.\n${(err).stack}`); + if (err != null) SupCore.log(`Could not delete ${folderPath}.\n${((err as any)).stack}`); else removedFolderCount++; cb(); }); diff --git a/server/authenticate.ts b/server/authenticate.ts index 485bdfe2..14e37432 100644 --- a/server/authenticate.ts +++ b/server/authenticate.ts @@ -10,10 +10,10 @@ export default function(socket: SocketIO.Socket, next: Function) { } if (auth != null && (auth.serverPassword === config.password || config.password.length === 0) && typeof auth.username === "string" && usernameRegex.test(auth.username)) { - (socket).username = auth.username; + ((socket as any)).username = auth.username; } - if ((socket).username == null) { + if (((socket as any)).username == null) { if (config.password.length > 0) { next(new Error("invalidCredentials")); return; } else { next(new Error("invalidUsername")); return; } } diff --git a/server/index.ts b/server/index.ts index 847c4b82..3abfb0a8 100644 --- a/server/index.ts +++ b/server/index.ts @@ -14,7 +14,7 @@ import loadSystems from "./loadSystems"; import ProjectHub from "./ProjectHub"; // Globals -(global).SupCore = SupCore; +((global as any)).SupCore = SupCore; let { version, superpowers: { appApiVersion: appApiVersion } } = JSON.parse(fs.readFileSync(`${__dirname}/../package.json`, { encoding: "utf8" })); SupCore.log(`Server v${version} starting...`); @@ -28,9 +28,9 @@ let hub: ProjectHub = null; process.on("uncaughtException", (err: Error) => { if (hub != null && hub.loadingProjectFolderName != null) { - SupCore.log(`The server crashed while loading project "${hub.loadingProjectFolderName}".\n${(err).stack}`); + SupCore.log(`The server crashed while loading project "${hub.loadingProjectFolderName}".\n${((err as any)).stack}`); } else { - SupCore.log(`The server crashed.\n${(err).stack}`); + SupCore.log(`The server crashed.\n${((err as any)).stack}`); } process.exit(1); }); @@ -131,7 +131,7 @@ loadSystems(mainApp, buildApp, () => { // Project hub hub = new ProjectHub(io, (err: Error) => { - if (err != null) { SupCore.log(`Failed to start server:\n${(err).stack}`); return; } + if (err != null) { SupCore.log(`Failed to start server:\n${((err as any)).stack}`); return; } SupCore.log(`Loaded ${Object.keys(hub.serversById).length} projects from ${paths.projects}.`); @@ -158,7 +158,7 @@ function onExit() { SupCore.log("Saving all projects..."); hub.saveAll((err: Error) => { - if (err != null) SupCore.log(`Error while exiting:\n${(err).stack}`); + if (err != null) SupCore.log(`Error while exiting:\n${((err as any)).stack}`); else SupCore.log("Exited cleanly."); process.exit(0); }); From 27c8230e4b176a2ac35abcbda0c7c092883a1593 Mon Sep 17 00:00:00 2001 From: Xavier Stouder Date: Thu, 14 Jan 2016 09:29:35 +0100 Subject: [PATCH 2/3] Replace `x` with `x as Type` (fixes #21) --- SupCore/Data/Base/index.ts | 4 +- SupCore/Data/Entries.ts | 2 +- .../src/dialogs/CreateOrEditProjectDialog.ts | 4 +- client/src/project/index.ts | 80 +++++++++---------- launcher/src/myServer.ts | 6 +- launcher/src/panes/community.ts | 4 +- launcher/src/panes/index.ts | 18 ++--- launcher/src/panes/servers.ts | 4 +- launcher/src/panes/settings.ts | 8 +- launcher/src/splash/index.ts | 8 +- server/BaseRemoteClient.ts | 10 +-- server/ProjectServer.ts | 2 +- server/RemoteProjectClient.ts | 4 +- server/authenticate.ts | 4 +- server/index.ts | 10 +-- 15 files changed, 84 insertions(+), 84 deletions(-) diff --git a/SupCore/Data/Base/index.ts b/SupCore/Data/Base/index.ts index f3062016..78fb2c49 100644 --- a/SupCore/Data/Base/index.ts +++ b/SupCore/Data/Base/index.ts @@ -71,7 +71,7 @@ export function getRuleViolation(value: any, rule: Rule, create = false): Violat case "enum": { if (typeof value !== "string") return { message: "Expected string for enum" }; - let items = (rule as string[]).items; + let items = rule.items as string[]; if (items.indexOf(value) === -1) return { message: `Invalid enum value: ${value}` }; } break; @@ -130,7 +130,7 @@ export function getRuleViolation(value: any, rule: Rule, create = false): Violat if (rule.items != null) { for (let index = 0; index < value.length; index++) { let item: any = value[index]; - let violation = getRuleViolation(item, (rule as Rule).items, true); + let violation = getRuleViolation(item, rule.items as Rule, true); if (violation != null) { let violationPath = (violation.path != null) ? `[${index}].${violation.path}` : `[${index}]`; return { message: violation.message, path: violationPath }; diff --git a/SupCore/Data/Entries.ts b/SupCore/Data/Entries.ts index 69a7f989..6a670da5 100644 --- a/SupCore/Data/Entries.ts +++ b/SupCore/Data/Entries.ts @@ -80,7 +80,7 @@ export default class Entries extends SupData.Base.TreeById { } remove(id: string, callback: (err: string) => any) { - let node = (this as EntryNode).byId[id]; + let node = this.byId[id] as EntryNode; if (node == null) { callback(`Invalid node id: ${id}`); return; } if (node.type == null && node.children.length !== 0) { callback("The folder must be empty"); return; } diff --git a/client/src/dialogs/CreateOrEditProjectDialog.ts b/client/src/dialogs/CreateOrEditProjectDialog.ts index 9e08be3b..8703a25d 100644 --- a/client/src/dialogs/CreateOrEditProjectDialog.ts +++ b/client/src/dialogs/CreateOrEditProjectDialog.ts @@ -107,7 +107,7 @@ export default class CreateOrEditProjectDialog extends SupClient.dialogs.BaseDia // Description this.descriptionInputElt = document.createElement("textarea"); this.descriptionInputElt.style.flex = "1"; - ((this as any).descriptionInputElt.style).resize = "none"; + (this.descriptionInputElt.style as any).resize = "none"; this.descriptionInputElt.placeholder = SupClient.i18n.t("hub:newProject.descriptionPlaceholder"); this.descriptionInputElt.addEventListener("keypress", this.onFieldKeyDown); textContainerElt.appendChild(this.descriptionInputElt); @@ -247,7 +247,7 @@ export default class CreateOrEditProjectDialog extends SupClient.dialogs.BaseDia } else { this.iconFile = this.iconInputElt.files[0]; let reader = new FileReader(); - reader.addEventListener("load", (event) => { this.iconElt.src = ((event as any).target).result; }); + reader.addEventListener("load", (event) => { this.iconElt.src = (event.target as any).result; }); reader.readAsDataURL(this.iconFile); } }; diff --git a/client/src/project/index.ts b/client/src/project/index.ts index 895cfb22..30f81d93 100644 --- a/client/src/project/index.ts +++ b/client/src/project/index.ts @@ -55,7 +55,7 @@ function start() { // Development mode if (localStorage.getItem("superpowers-dev-mode") != null) { - let projectManagementDiv = (document as HTMLDivElement).querySelector(".project-management"); + let projectManagementDiv = document.querySelector(".project-management") as HTMLDivElement; projectManagementDiv.style.backgroundColor = "#37d"; // According to http://stackoverflow.com/a/12747364/915914, window.onerror @@ -96,9 +96,9 @@ function start() { document.querySelector(".project-buttons .stop").addEventListener("click", () => { stopProject(); }); if (!SupClient.isApp) { - ((document as HTMLButtonElement).querySelector(".project-buttons .publish")).title = SupClient.i18n.t("project:header.publishDisabled"); - ((document as HTMLButtonElement).querySelector(".project-buttons .debug")).hidden = true; - ((document as HTMLButtonElement).querySelector(".project-buttons .stop")).hidden = true; + (document.querySelector(".project-buttons .publish") as HTMLButtonElement).title = SupClient.i18n.t("project:header.publishDisabled"); + (document.querySelector(".project-buttons .debug") as HTMLButtonElement).hidden = true; + (document.querySelector(".project-buttons .stop") as HTMLButtonElement).hidden = true; } // Entries tree view @@ -136,7 +136,7 @@ function start() { }); // Global controls - let toggleNotificationsButton = (document as HTMLButtonElement).querySelector(".top .controls button.toggle-notifications"); + let toggleNotificationsButton = document.querySelector(".top .controls button.toggle-notifications") as HTMLButtonElement; toggleNotificationsButton.addEventListener("click", onClickToggleNotifications); if (localStorage.getItem("superpowers-disable-notifications") != null) { @@ -148,8 +148,8 @@ function start() { } // Panes and tools - ui.panesElt = (document as HTMLDivElement).querySelector(".main .panes"); - ui.toolsElt = (document as HTMLUListElement).querySelector(".sidebar .tools ul"); + ui.panesElt = document.querySelector(".main .panes") as HTMLDivElement; + ui.toolsElt = document.querySelector(".sidebar .tools ul") as HTMLUListElement; // Messaging window.addEventListener("message", onMessage); @@ -293,14 +293,14 @@ function onDisconnected() { ui.entriesTreeView.treeRoot.innerHTML = ""; updateSelectedEntry(); - ((document as HTMLButtonElement).querySelector(".project-buttons .run")).disabled = true; - ((document as HTMLButtonElement).querySelector(".project-buttons .debug")).disabled = true; - ((document as HTMLButtonElement).querySelector(".project-buttons .stop")).disabled = true; - ((document as HTMLButtonElement).querySelector(".project-buttons .publish")).disabled = true; - ((document as HTMLButtonElement).querySelector(".entries-buttons .new-asset")).disabled = true; - ((document as HTMLButtonElement).querySelector(".entries-buttons .new-folder")).disabled = true; - ((document as HTMLButtonElement).querySelector(".entries-buttons .search")).disabled = true; - ((document as HTMLDivElement).querySelector(".connecting")).hidden = false; + (document.querySelector(".project-buttons .run") as HTMLButtonElement).disabled = true; + (document.querySelector(".project-buttons .debug") as HTMLButtonElement).disabled = true; + (document.querySelector(".project-buttons .stop") as HTMLButtonElement).disabled = true; + (document.querySelector(".project-buttons .publish") as HTMLButtonElement).disabled = true; + (document.querySelector(".entries-buttons .new-asset") as HTMLButtonElement).disabled = true; + (document.querySelector(".entries-buttons .new-folder") as HTMLButtonElement).disabled = true; + (document.querySelector(".entries-buttons .search") as HTMLButtonElement).disabled = true; + (document.querySelector(".connecting") as HTMLDivElement).hidden = false; } function onWelcome(clientId: number, config: { buildPort: number; systemName: string; }) { @@ -336,14 +336,14 @@ function onEntriesReceived(err: string, entries: SupCore.Data.EntryNode[]) { ui.entriesTreeView.clearSelection(); ui.entriesTreeView.treeRoot.innerHTML = ""; - ((document as HTMLDivElement).querySelector(".connecting")).hidden = true; + (document.querySelector(".connecting") as HTMLDivElement).hidden = true; - if (SupClient.isApp) ((document as HTMLButtonElement).querySelector(".project-buttons .publish")).disabled = false; - ((document as HTMLButtonElement).querySelector(".project-buttons .run")).disabled = false; - ((document as HTMLButtonElement).querySelector(".project-buttons .debug")).disabled = false; - ((document as HTMLButtonElement).querySelector(".entries-buttons .new-asset")).disabled = false; - ((document as HTMLButtonElement).querySelector(".entries-buttons .new-folder")).disabled = false; - ((document as HTMLButtonElement).querySelector(".entries-buttons .search")).disabled = false; + if (SupClient.isApp) (document.querySelector(".project-buttons .publish")).disabled = false; + (document.querySelector(".project-buttons .run") as HTMLButtonElement).disabled = false; + (document.querySelector(".project-buttons .debug") as HTMLButtonElement).disabled = false; + (document.querySelector(".entries-buttons .new-asset") as HTMLButtonElement).disabled = false; + (document.querySelector(".entries-buttons .new-folder") as HTMLButtonElement).disabled = false; + (document.querySelector(".entries-buttons .search") as HTMLButtonElement).disabled = false; function walk(entry: SupCore.Data.EntryNode, parentEntry: SupCore.Data.EntryNode, parentElt: HTMLLIElement) { let liElt = createEntryElement(entry); @@ -402,11 +402,11 @@ function onEntryAddedAck(err: string, id: string) { function onEntryMoved(id: string, parentId: string, index: number) { data.entries.client_move(id, parentId, index); - let entryElt = (ui as HTMLLIElement).entriesTreeView.treeRoot.querySelector(`[data-id='${id}']`); + let entryElt = ui.entriesTreeView.treeRoot.querySelector(`[data-id='${id}']`) as HTMLLIElement; let oldParentId: string = entryElt.dataset["parentId"]; if (oldParentId != null) { - let oldParentElt = (ui as HTMLLIElement).entriesTreeView.treeRoot.querySelector(`[data-id='${oldParentId}']`); + let oldParentElt = ui.entriesTreeView.treeRoot.querySelector(`[data-id='${oldParentId}']`) as HTMLLIElement; let parentEntry = data.entries.byId[oldParentId]; let childrenElt = oldParentElt.querySelector("span.children"); childrenElt.textContent = `(${parentEntry.children.length})`; @@ -447,7 +447,7 @@ function onEntryTrashed(id: string) { let oldParentId: string = entryElt.dataset["parentId"]; if (oldParentId != null) { - let oldParentElt = (ui as HTMLLIElement).entriesTreeView.treeRoot.querySelector(`[data-id='${oldParentId}']`); + let oldParentElt = ui.entriesTreeView.treeRoot.querySelector(`[data-id='${oldParentId}']`) as HTMLLIElement; let parentEntry = data.entries.byId[oldParentId]; let childrenElt = oldParentElt.querySelector("span.children"); childrenElt.textContent = `(${parentEntry.children.length})`; @@ -645,7 +645,7 @@ function onEntryDrop(dropInfo: any, orderedNodes: any) { function updateSelectedEntry() { let allButtons = document.querySelectorAll(".entries-buttons button.edit"); for (let index = 0; index < allButtons.length; index++) { - let button = (all as HTMLButtonElement)Buttons.item(index); + let button = allButtons.item(index) as HTMLButtonElement; let disabled = (ui.entriesTreeView.selectedNodes.length === 0 || (button.classList.contains("single") && ui.entriesTreeView.selectedNodes.length !== 1) || (button.classList.contains("asset-only") && ui.entriesTreeView.selectedNodes[0].classList.contains("group"))); @@ -670,7 +670,7 @@ function onMessage(event: any) { } function onWindowDevError() { - let projectManagementDiv = (document as HTMLDivElement).querySelector(".project-management"); + let projectManagementDiv = document.querySelector(".project-management") as HTMLDivElement; projectManagementDiv.style.backgroundColor = "#c42"; return false; } @@ -685,7 +685,7 @@ function onMessageChat(message: string) { function doNotification() { let title = SupClient.i18n.t("project:header.notifications.new", { projectName: data.manifest.pub.name }); - let notification = new ((window as any)).Notification(title, { icon: "/images/icon.png", body: message }); + let notification = new (window as any).Notification(title, { icon: "/images/icon.png", body: message }); let closeTimeoutId = setTimeout(() => { notification.close(); }, 5000); @@ -697,11 +697,11 @@ function onMessageChat(message: string) { }); } - if (((window as any)).Notification.permission === "granted") doNotification(); - else if (((window as any)).Notification.permission !== "denied") { - ((window as any)).Notification.requestPermission((status: string) => { - ((window as any)).Notification.permission = status; - if (((window as any)).Notification.permission === "granted") doNotification(); + if ((window as any).Notification.permission === "granted") doNotification(); + else if ((window as any).Notification.permission !== "denied") { + (window as any).Notification.requestPermission((status: string) => { + (window as any).Notification.permission = status; + if ((window as any).Notification.permission === "granted") doNotification(); }); } } @@ -753,7 +753,7 @@ function openEntry(id: string, state?: {[name: string]: any}) { if (entry.type == null) { ui.entriesTreeView.selectedNodes[0].classList.toggle("collapsed"); return; } let tab = ui.tabStrip.tabsRoot.querySelector(`li[data-asset-id='${id}']`); - let iframe = (ui as HTMLIFrameElement).panesElt.querySelector(`iframe[data-asset-id='${id}']`); + let iframe = ui.panesElt.querySelector(`iframe[data-asset-id='${id}']`) as HTMLIFrameElement; if (tab == null) { tab = createAssetTabElement(entry); @@ -772,7 +772,7 @@ function openEntry(id: string, state?: {[name: string]: any}) { function openTool(name: string, state?: {[name: string]: any}) { let tab = ui.tabStrip.tabsRoot.querySelector(`li[data-pane='${name}']`); - let iframe = (ui as HTMLIFrameElement).panesElt.querySelector(`iframe[data-name='${name}']`); + let iframe = ui.panesElt.querySelector(`iframe[data-name='${name}']`) as HTMLIFrameElement; if (tab == null) { let tool = data.toolsByName[name]; @@ -1031,7 +1031,7 @@ function onTabActivate(tabElement: any) { if (activeTab != null) { activeTab.classList.remove("active"); - let activeIframe = ((ui as HTMLIFrameElement).panesElt.querySelector("iframe.active")); + let activeIframe = (ui.panesElt.querySelector("iframe.active") as HTMLIFrameElement); activeIframe.contentWindow.postMessage({ type: "deactivate" }, window.location.origin); activeIframe.classList.remove("active"); } @@ -1041,8 +1041,8 @@ function onTabActivate(tabElement: any) { let assetId = tabElement.dataset["assetId"]; let tabIframe: HTMLIFrameElement; - if (assetId != null) tabIframe = (ui as HTMLIFrameElement).panesElt.querySelector(`iframe[data-asset-id='${assetId}']`); - else tabIframe = (ui as HTMLIFrameElement).panesElt.querySelector(`iframe[data-name='${tabElement.dataset.pane}']`); + if (assetId != null) tabIframe = ui.panesElt.querySelector(`iframe[data-asset-id='${assetId}']`) as HTMLIFrameElement; + else tabIframe = ui.panesElt.querySelector(`iframe[data-name='${tabElement.dataset.pane}']`) as HTMLIFrameElement; tabIframe.classList.add("active"); tabIframe.contentWindow.focus(); @@ -1052,12 +1052,12 @@ function onTabActivate(tabElement: any) { function onTabClose(tabElement: HTMLLIElement) { let assetId = tabElement.dataset["assetId"]; let frameElt: HTMLIFrameElement; - if (assetId != null) frameElt = (ui as HTMLIFrameElement).panesElt.querySelector(`iframe[data-asset-id='${assetId}']`); + if (assetId != null) frameElt = ui.panesElt.querySelector(`iframe[data-asset-id='${assetId}']`) as HTMLIFrameElement; else { let toolName = tabElement.dataset["pane"]; if (toolName === "main") return; - frameElt = (ui as HTMLIFrameElement).panesElt.querySelector(`iframe[data-name='${toolName}']`); + frameElt = ui.panesElt.querySelector(`iframe[data-name='${toolName}']`) as HTMLIFrameElement; } if (tabElement.classList.contains("active")) { diff --git a/launcher/src/myServer.ts b/launcher/src/myServer.ts index cf5e78c6..329910b7 100644 --- a/launcher/src/myServer.ts +++ b/launcher/src/myServer.ts @@ -8,17 +8,17 @@ let childProcess = nodeRequire("child_process"); let myServerElt = document.querySelector(".my-server"); -let myServerTextarea = (my as HTMLTextAreaElement)ServerElt.querySelector("textarea"); +let myServerTextarea = myServerElt.querySelector("textarea") as HTMLTextAreaElement; export let serverProcess: dummy_childProcess.ChildProcess = null; -let autoStartServerCheckbox = (document as HTMLInputElement).getElementById("auto-start-server"); +let autoStartServerCheckbox = document.getElementById("auto-start-server") as HTMLInputElement; autoStartServerCheckbox.checked = config.autoStartServer; autoStartServerCheckbox.addEventListener("change", (event) => { config.autoStartServer = autoStartServerCheckbox.checked; }); -let startStopServerButton = (my as HTMLButtonElement)ServerElt.querySelector("button.start-stop-server"); +let startStopServerButton = myServerElt.querySelector("button.start-stop-server") as HTMLButtonElement; startStopServerButton.addEventListener("click", () => { if (serverProcess != null) { startStopServerButton.textContent = "Start"; diff --git a/launcher/src/panes/community.ts b/launcher/src/panes/community.ts index 6dd5bdd0..b7c3cc0d 100644 --- a/launcher/src/panes/community.ts +++ b/launcher/src/panes/community.ts @@ -3,8 +3,8 @@ export {}; let electron: GitHubElectron.Electron = nodeRequire("electron"); document.querySelector(".panes .community").addEventListener("click", (event) => { - if (((event as Element).target).tagName !== "A") return; + if ((event.target as Element).tagName !== "A") return; event.preventDefault(); - electron.shell.openExternal(((event as HTMLAnchorElement).target).href); + electron.shell.openExternal((event.target as HTMLAnchorElement).href); }); diff --git a/launcher/src/panes/index.ts b/launcher/src/panes/index.ts index 59261994..aeaddcd8 100644 --- a/launcher/src/panes/index.ts +++ b/launcher/src/panes/index.ts @@ -3,19 +3,19 @@ import "./settings"; import "./community"; // Panes -let paneButtonsContainer = (document as HTMLDivElement).querySelector(".pane-buttons"); -let panesContainer = (document as HTMLDivElement).querySelector(".panes"); +let paneButtonsContainer = document.querySelector(".pane-buttons") as HTMLDivElement; +let panesContainer = document.querySelector(".panes") as HTMLDivElement; for (let i = 0; i < paneButtonsContainer.children.length; i++) { ((button: HTMLButtonElement, i: number) => { button.addEventListener("click", (event) => { - ((pane as HTMLButtonElement)ButtonsContainer.querySelector("button.active")).classList.remove("active"); - ((panes as HTMLDivElement)Container.querySelector(".active")).classList.remove("active"); - ((event as HTMLButtonElement).target).classList.add("active"); - ((panes as HTMLDivElement)Container.children[i]).classList.add("active"); + (paneButtonsContainer.querySelector("button.active") as HTMLButtonElement).classList.remove("active"); + (panesContainer.querySelector(".active") as HTMLDivElement).classList.remove("active"); + (event.target as HTMLButtonElement).classList.add("active"); + (panesContainer.children[i] as HTMLDivElement).classList.add("active"); }); - })((pane as HTMLButtonElement)ButtonsContainer.children[i], i); + })(paneButtonsContainer.children[i] as HTMLButtonElement, i); } -((pane as HTMLButtonElement)ButtonsContainer.children[0]).classList.add("active"); -((panes as HTMLDivElement)Container.children[0]).classList.add("active"); +(paneButtonsContainer.children[0] as HTMLButtonElement).classList.add("active"); +(panesContainer.children[0] as HTMLDivElement).classList.add("active"); diff --git a/launcher/src/panes/servers.ts b/launcher/src/panes/servers.ts index 732c51d5..4f9def8f 100644 --- a/launcher/src/panes/servers.ts +++ b/launcher/src/panes/servers.ts @@ -23,11 +23,11 @@ function start() { } function createServerElement(entry: { name: string; address: string; }) { - let liElt = (document as HTMLLIElement).createElement("li"); + let liElt = document.createElement("li") as HTMLLIElement; liElt.dataset["name"] = entry.name; liElt.dataset["address"] = entry.address; - let nameSpan = (document as HTMLSpanElement).createElement("span"); + let nameSpan = document.createElement("span") as HTMLSpanElement; nameSpan.className = "name"; nameSpan.textContent = entry.name; liElt.appendChild(nameSpan); diff --git a/launcher/src/panes/settings.ts b/launcher/src/panes/settings.ts index df44ddac..e3430174 100644 --- a/launcher/src/panes/settings.ts +++ b/launcher/src/panes/settings.ts @@ -21,10 +21,10 @@ if (fs.existsSync(serverPaths.config)) { _.merge(config, userConfig); } -let mainPortInput = (document as HTMLInputElement).querySelector("input.main-server-port"); -let buildPortInput = (document as HTMLInputElement).querySelector("input.build-server-port"); -let passwordInput = (document as HTMLInputElement).querySelector("input.server-password"); -let maxRecentBuildsInput = (document as HTMLInputElement).querySelector("input.max-recent-builds"); +let mainPortInput = document.querySelector("input.main-server-port") as HTMLInputElement; +let buildPortInput = document.querySelector("input.build-server-port") as HTMLInputElement; +let passwordInput = document.querySelector("input.server-password") as HTMLInputElement; +let maxRecentBuildsInput = document.querySelector("input.max-recent-builds") as HTMLInputElement; mainPortInput.value = config.mainPort.toString(); buildPortInput.value = config.buildPort.toString(); diff --git a/launcher/src/splash/index.ts b/launcher/src/splash/index.ts index 33d6d6fc..a32eff3b 100644 --- a/launcher/src/splash/index.ts +++ b/launcher/src/splash/index.ts @@ -7,12 +7,12 @@ let electron: GitHubElectron.Electron = nodeRequire("electron"); let packageInfo = require("../../../package.json"); /* tslint:enable */ -let splash = (document as HTMLDivElement).querySelector(".splash"); +let splash = document.querySelector(".splash") as HTMLDivElement; splash.addEventListener("click", (event) => { - if (((event as Element).target).tagName === "A") { + if ((event.target as Element).tagName === "A") { event.preventDefault(); - electron.shell.openExternal(((event as HTMLAnchorElement).target).href); + electron.shell.openExternal((event.target as HTMLAnchorElement).href); return; } @@ -22,7 +22,7 @@ splash.addEventListener("click", (event) => { // Check for new releases document.querySelector(".splash .version").textContent = `v${packageInfo.version}`; -let updateStatus = (document as HTMLDivElement).querySelector(".splash .update-status"); +let updateStatus = document.querySelector(".splash .update-status") as HTMLDivElement; supFetch("https://api.github.com/repos/superpowers/superpowers/releases/latest", "json", (err, lastRelease) => { if (err != null) { diff --git a/server/BaseRemoteClient.ts b/server/BaseRemoteClient.ts index e2b39a06..3b27a6b6 100644 --- a/server/BaseRemoteClient.ts +++ b/server/BaseRemoteClient.ts @@ -2,7 +2,7 @@ export default class BaseRemoteClient { subscriptions: string[] = []; constructor(public server: BaseServer, public socket: SocketIO.Socket) { - this.socket.on("error", (err: Error) => { SupCore.log(((err as any)).stack); }); + this.socket.on("error", (err: Error) => { SupCore.log((err as any).stack); }); this.socket.on("disconnect", this.onDisconnect); this.socket.on("sub", this.onSubscribe); @@ -32,7 +32,7 @@ export default class BaseRemoteClient { let [ , endpoint, id ] = subscription.split(":"); if (id == null) continue; - ((this as SupCore.Data.Base.Dictionary).server.data[endpoint]).release(id, this); + (this.server.data[endpoint] as SupCore.Data.Base.Dictionary).release(id, this); } this.server.removeRemoteClient(this.socket.id); @@ -49,11 +49,11 @@ export default class BaseRemoteClient { if (id == null) { this.socket.join(roomName); this.subscriptions.push(roomName); - callback(null, ((data as SupCore.Data.Base.Hash)).pub); + callback(null, (data as SupCore.Data.Base.Hash).pub); return; } - ((data as SupCore.Data.Base.Dictionary)).acquire(id, this, (err: Error, item: any) => { + (data as SupCore.Data.Base.Dictionary).acquire(id, this, (err: Error, item: any) => { if (err != null) { callback(`Could not acquire asset: ${err}`, null); return; } this.socket.join(roomName); @@ -73,7 +73,7 @@ export default class BaseRemoteClient { let index = this.subscriptions.indexOf(roomName); if (index === -1) return; - if (id != null) { ((data as SupCore.Data.Base.Dictionary)).release(id, this); } + if (id != null) { (data as SupCore.Data.Base.Dictionary).release(id, this); } this.socket.leave(roomName); this.subscriptions.splice(index, 1); diff --git a/server/ProjectServer.ts b/server/ProjectServer.ts index 93ac9933..3c102379 100644 --- a/server/ProjectServer.ts +++ b/server/ProjectServer.ts @@ -237,7 +237,7 @@ export default class ProjectServer { if (item == null) { SupCore.log(`Tried to schedule an asset save for item with id ${id} but the asset is not loaded.`); SupCore.log(JSON.stringify(this.data.entries.byId[id], null, 2)); - SupCore.log(((new as any) Error()).stack); + SupCore.log((new Error() as any).stack); return; } let assetPath = path.join(this.projectPath, `assets/${this.data.entries.getStoragePathFromId(id)}`); diff --git a/server/RemoteProjectClient.ts b/server/RemoteProjectClient.ts index f8c8dfb3..68596b18 100644 --- a/server/RemoteProjectClient.ts +++ b/server/RemoteProjectClient.ts @@ -208,7 +208,7 @@ export default class RemoteProjectClient extends BaseRemoteClient { // NOTE: "SocketIO.Namespace.adapter" is not part of the official documented API // It does exist though: https://github.com/Automattic/socket.io/blob/3f72dd3322bcefff07b5976ab817766e421d237b/lib/namespace.js#L89 - for (let socketId in ((this as any).server.io).adapter.rooms[roomName]) { + for (let socketId in (this.server.io as any).adapter.rooms[roomName]) { let remoteClient = this.server.clientsBySocketId[socketId]; remoteClient.socket.leave(roomName); remoteClient.subscriptions.splice(remoteClient.subscriptions.indexOf(roomName), 1); @@ -503,7 +503,7 @@ export default class RemoteProjectClient extends BaseRemoteClient { async.each(trashedAssetFolders, (trashedAssetFolder, cb) => { let folderPath = path.join(trashedAssetsPath, trashedAssetFolder); rimraf(folderPath, (err) => { - if (err != null) SupCore.log(`Could not delete ${folderPath}.\n${((err as any)).stack}`); + if (err != null) SupCore.log(`Could not delete ${folderPath}.\n${(err as any).stack}`); else removedFolderCount++; cb(); }); diff --git a/server/authenticate.ts b/server/authenticate.ts index 14e37432..76f7452d 100644 --- a/server/authenticate.ts +++ b/server/authenticate.ts @@ -10,10 +10,10 @@ export default function(socket: SocketIO.Socket, next: Function) { } if (auth != null && (auth.serverPassword === config.password || config.password.length === 0) && typeof auth.username === "string" && usernameRegex.test(auth.username)) { - ((socket as any)).username = auth.username; + (socket as any).username = auth.username; } - if (((socket as any)).username == null) { + if ((socket as any).username == null) { if (config.password.length > 0) { next(new Error("invalidCredentials")); return; } else { next(new Error("invalidUsername")); return; } } diff --git a/server/index.ts b/server/index.ts index 3abfb0a8..b32f86a9 100644 --- a/server/index.ts +++ b/server/index.ts @@ -14,7 +14,7 @@ import loadSystems from "./loadSystems"; import ProjectHub from "./ProjectHub"; // Globals -((global as any)).SupCore = SupCore; +(global as any).SupCore = SupCore; let { version, superpowers: { appApiVersion: appApiVersion } } = JSON.parse(fs.readFileSync(`${__dirname}/../package.json`, { encoding: "utf8" })); SupCore.log(`Server v${version} starting...`); @@ -28,9 +28,9 @@ let hub: ProjectHub = null; process.on("uncaughtException", (err: Error) => { if (hub != null && hub.loadingProjectFolderName != null) { - SupCore.log(`The server crashed while loading project "${hub.loadingProjectFolderName}".\n${((err as any)).stack}`); + SupCore.log(`The server crashed while loading project "${hub.loadingProjectFolderName}".\n${(err as any).stack}`); } else { - SupCore.log(`The server crashed.\n${((err as any)).stack}`); + SupCore.log(`The server crashed.\n${(err as any).stack}`); } process.exit(1); }); @@ -131,7 +131,7 @@ loadSystems(mainApp, buildApp, () => { // Project hub hub = new ProjectHub(io, (err: Error) => { - if (err != null) { SupCore.log(`Failed to start server:\n${((err as any)).stack}`); return; } + if (err != null) { SupCore.log(`Failed to start server:\n${(err as any).stack}`); return; } SupCore.log(`Loaded ${Object.keys(hub.serversById).length} projects from ${paths.projects}.`); @@ -158,7 +158,7 @@ function onExit() { SupCore.log("Saving all projects..."); hub.saveAll((err: Error) => { - if (err != null) SupCore.log(`Error while exiting:\n${((err as any)).stack}`); + if (err != null) SupCore.log(`Error while exiting:\n${(err as any).stack}`); else SupCore.log("Exited cleanly."); process.exit(0); }); From c1b9664083673aa7e3f0f20e62105cbd357a41db Mon Sep 17 00:00:00 2001 From: Xavier Stouder Date: Thu, 14 Jan 2016 09:35:19 +0100 Subject: [PATCH 3/3] Use "as" keyword for type assertions on a forgot one --- client/src/project/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/project/index.ts b/client/src/project/index.ts index 30f81d93..62acce7c 100644 --- a/client/src/project/index.ts +++ b/client/src/project/index.ts @@ -338,7 +338,7 @@ function onEntriesReceived(err: string, entries: SupCore.Data.EntryNode[]) { (document.querySelector(".connecting") as HTMLDivElement).hidden = true; - if (SupClient.isApp) (document.querySelector(".project-buttons .publish")).disabled = false; + if (SupClient.isApp) (document.querySelector(".project-buttons .publish") as HTMLButtonElement).disabled = false; (document.querySelector(".project-buttons .run") as HTMLButtonElement).disabled = false; (document.querySelector(".project-buttons .debug") as HTMLButtonElement).disabled = false; (document.querySelector(".entries-buttons .new-asset") as HTMLButtonElement).disabled = false;