Migrate to eslint
This commit is contained in:
parent
0fe7e30398
commit
b4e9c278d3
27 changed files with 104 additions and 71 deletions
|
@ -31,10 +31,5 @@ webpack.config.ts
|
|||
|
||||
# Temporarily ignored during TSLint transition
|
||||
# JIRA: DESKTOP-304
|
||||
ts/shims/**
|
||||
ts/sql/**
|
||||
ts/storybook/**
|
||||
ts/styleguide/**
|
||||
ts/test/**
|
||||
ts/textsecure/**
|
||||
ts/updater/**
|
||||
|
|
|
@ -139,7 +139,7 @@ module.exports = {
|
|||
rules,
|
||||
},
|
||||
{
|
||||
files: ['**/*.stories.tsx', 'ts/build/**'],
|
||||
files: ['**/*.stories.tsx', 'ts/build/**', 'ts/test/**'],
|
||||
rules: {
|
||||
...rules,
|
||||
'import/no-extraneous-dependencies': 'off',
|
||||
|
|
|
@ -444,6 +444,32 @@ Signal Desktop makes use of the following open source projects.
|
|||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
## dashdash
|
||||
|
||||
# This is the MIT license
|
||||
|
||||
Copyright (c) 2013 Trent Mick. All rights reserved.
|
||||
Copyright (c) 2013 Joyent Inc. All rights reserved.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
## draft-js
|
||||
|
||||
BSD License
|
||||
|
|
1
js/modules/string_to_array_buffer.d.ts
vendored
Normal file
1
js/modules/string_to_array_buffer.d.ts
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
export function stringToArrayBuffer(string: string): ArrayBuffer;
|
|
@ -76,6 +76,7 @@
|
|||
"config": "1.28.1",
|
||||
"copy-text-to-clipboard": "2.1.0",
|
||||
"curve25519-n": "https://github.com/scottnonnenberg-signal/node-curve25519.git#3e94f60bc54b2426476520d8d1a0aa835c25f5cc",
|
||||
"dashdash": "1.14.1",
|
||||
"draft-js": "0.10.5",
|
||||
"emoji-datasource": "5.0.1",
|
||||
"emoji-datasource-apple": "5.0.1",
|
||||
|
@ -163,6 +164,7 @@
|
|||
"@types/chai": "4.1.2",
|
||||
"@types/classnames": "2.2.3",
|
||||
"@types/config": "0.0.34",
|
||||
"@types/dashdash": "1.14.0",
|
||||
"@types/draft-js": "0.10.32",
|
||||
"@types/filesize": "3.6.0",
|
||||
"@types/fs-extra": "5.0.5",
|
||||
|
@ -213,7 +215,6 @@
|
|||
"core-js": "2.4.1",
|
||||
"cross-env": "5.2.0",
|
||||
"css-loader": "3.2.0",
|
||||
"dashdash": "1.14.1",
|
||||
"electron": "8.3.4",
|
||||
"electron-builder": "22.3.6",
|
||||
"electron-mocha": "8.1.1",
|
||||
|
|
|
@ -1,18 +1,21 @@
|
|||
export function getSearchResultsProps(attributes: any) {
|
||||
// @ts-ignore
|
||||
// Matching Whisper.Message API
|
||||
// eslint-disable-next-line max-len
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types
|
||||
export function getSearchResultsProps(attributes: any): any {
|
||||
const model = new window.Whisper.Message(attributes);
|
||||
|
||||
return model.getPropsForSearchResult();
|
||||
}
|
||||
|
||||
export function getBubbleProps(attributes: any) {
|
||||
// @ts-ignore
|
||||
// Matching Whisper.Message API
|
||||
// eslint-disable-next-line max-len
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types
|
||||
export function getBubbleProps(attributes: any): any {
|
||||
const model = new window.Whisper.Message(attributes);
|
||||
|
||||
return model.getPropsForBubble();
|
||||
}
|
||||
|
||||
export function showSettings() {
|
||||
// @ts-ignore
|
||||
export function showSettings(): void {
|
||||
window.showSettings();
|
||||
}
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
import { ipcRenderer } from 'electron';
|
||||
|
||||
export function bounceAppIconStart(isCritical = false) {
|
||||
export function bounceAppIconStart(isCritical = false): void {
|
||||
ipcRenderer.send('bounce-app-icon-start', isCritical);
|
||||
}
|
||||
|
||||
export function bounceAppIconStop() {
|
||||
export function bounceAppIconStop(): void {
|
||||
ipcRenderer.send('bounce-app-icon-stop');
|
||||
}
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
export function trigger(name: string, param1?: any, param2?: any) {
|
||||
// Matching Whisper.events.trigger API
|
||||
// eslint-disable-next-line max-len
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any
|
||||
export function trigger(name: string, param1?: any, param2?: any): void {
|
||||
window.Whisper.events.trigger(name, param1, param2);
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
export function getSocketStatus() {
|
||||
export function getSocketStatus(): number {
|
||||
const { getSocketStatus: getMessageReceiverStatus } = window;
|
||||
|
||||
return getMessageReceiverStatus();
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
export function put(key: string, value: any) {
|
||||
// Matching window.storage.put API
|
||||
// eslint-disable-next-line max-len
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types
|
||||
export function put(key: string, value: any): void {
|
||||
window.storage.put(key, value);
|
||||
}
|
||||
|
||||
export async function remove(key: string) {
|
||||
export async function remove(key: string): Promise<void> {
|
||||
await window.storage.remove(key);
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ export function sendStickerPackSync(
|
|||
packId: string,
|
||||
packKey: string,
|
||||
installed: boolean
|
||||
) {
|
||||
): void {
|
||||
const { ConversationController, textsecure, log } = window;
|
||||
const ourNumber = textsecure.storage.user.getNumber();
|
||||
const { wrap, sendOptions } = ConversationController.prepareForSend(
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
import { ipcRenderer } from 'electron';
|
||||
|
||||
export function startUpdate() {
|
||||
export function startUpdate(): void {
|
||||
ipcRenderer.send('start-update');
|
||||
}
|
||||
|
||||
export function ackRender() {
|
||||
export function ackRender(): void {
|
||||
ipcRenderer.send('show-update-dialog-ack');
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* eslint-disable @typescript-eslint/ban-ts-comment */
|
||||
// @ts-ignore
|
||||
import gif from '../../fixtures/giphy-GVNvOUpeYmI7e.gif';
|
||||
// @ts-ignore
|
||||
|
|
|
@ -3,7 +3,6 @@ import { assert } from 'chai';
|
|||
import * as Attachment from '../../types/Attachment';
|
||||
import * as MIME from '../../types/MIME';
|
||||
import { SignalService } from '../../protobuf';
|
||||
// @ts-ignore
|
||||
import { stringToArrayBuffer } from '../../../js/modules/string_to_array_buffer';
|
||||
|
||||
describe('Attachment', () => {
|
||||
|
|
|
@ -2,7 +2,7 @@ import os from 'os';
|
|||
import Sinon from 'sinon';
|
||||
import { assert } from 'chai';
|
||||
|
||||
import * as Settings from '../../../ts/types/Settings';
|
||||
import * as Settings from '../../types/Settings';
|
||||
|
||||
describe('Settings', () => {
|
||||
let sandbox: Sinon.SinonSandbox;
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
import { assert } from 'chai';
|
||||
|
||||
import * as Message from '../../../../ts/types/message/initializeAttachmentMetadata';
|
||||
import { IncomingMessage } from '../../../../ts/types/Message';
|
||||
import { SignalService } from '../../../../ts/protobuf';
|
||||
import * as MIME from '../../../../ts/types/MIME';
|
||||
// @ts-ignore
|
||||
import * as Message from '../../../types/message/initializeAttachmentMetadata';
|
||||
import { IncomingMessage } from '../../../types/Message';
|
||||
import { SignalService } from '../../../protobuf';
|
||||
import * as MIME from '../../../types/MIME';
|
||||
import { stringToArrayBuffer } from '../../../../js/modules/string_to_array_buffer';
|
||||
|
||||
describe('Message', () => {
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* eslint-disable no-console */
|
||||
import {
|
||||
createWriteStream,
|
||||
statSync,
|
||||
|
@ -6,9 +7,7 @@ import {
|
|||
import { join, normalize } from 'path';
|
||||
import { tmpdir } from 'os';
|
||||
|
||||
// @ts-ignore
|
||||
import { createParser } from 'dashdash';
|
||||
// @ts-ignore
|
||||
import { createParser, ParserConfiguration } from 'dashdash';
|
||||
import ProxyAgent from 'proxy-agent';
|
||||
import { FAILSAFE_SCHEMA, safeLoad } from 'js-yaml';
|
||||
import { gt } from 'semver';
|
||||
|
@ -24,7 +23,6 @@ import { getTempPath } from '../../app/attachments';
|
|||
import { Dialogs } from '../types/Dialogs';
|
||||
import { getUserAgent } from '../util/getUserAgent';
|
||||
|
||||
// @ts-ignore
|
||||
import * as packageJson from '../../package.json';
|
||||
import { getSignatureFileName } from './signature';
|
||||
import { isPathInside } from '../util/isPathInside';
|
||||
|
@ -70,7 +68,7 @@ export async function checkForUpdates(
|
|||
return null;
|
||||
}
|
||||
|
||||
export function validatePath(basePath: string, targetPath: string) {
|
||||
export function validatePath(basePath: string, targetPath: string): void {
|
||||
const normalized = normalize(targetPath);
|
||||
|
||||
if (!isPathInside(normalized, basePath)) {
|
||||
|
@ -252,9 +250,9 @@ export function getUpdatesFileName(): string {
|
|||
|
||||
if (platform === 'darwin') {
|
||||
return `${prefix}-mac.yml`;
|
||||
} else {
|
||||
return `${prefix}.yml`;
|
||||
}
|
||||
|
||||
return `${prefix}.yml`;
|
||||
}
|
||||
|
||||
const hasBeta = /beta/i;
|
||||
|
@ -268,29 +266,27 @@ function isVersionNewer(newVersion: string): boolean {
|
|||
return gt(newVersion, version);
|
||||
}
|
||||
|
||||
export function getVersion(yaml: string): string | undefined {
|
||||
export function getVersion(yaml: string): string | null {
|
||||
const info = parseYaml(yaml);
|
||||
|
||||
if (info && info.version) {
|
||||
return info.version;
|
||||
return info && info.version;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
const validFile = /^[A-Za-z0-9\.\-]+$/;
|
||||
export function isUpdateFileNameValid(name: string) {
|
||||
const validFile = /^[A-Za-z0-9.-]+$/;
|
||||
export function isUpdateFileNameValid(name: string): boolean {
|
||||
return validFile.test(name);
|
||||
}
|
||||
|
||||
export function getUpdateFileName(yaml: string) {
|
||||
// Reliant on third party parser that returns any
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
export function getUpdateFileName(yaml: string): any {
|
||||
const info = parseYaml(yaml);
|
||||
|
||||
if (!info || !info.path) {
|
||||
throw new Error('getUpdateFileName: No path present in YAML file');
|
||||
}
|
||||
|
||||
const path = info.path;
|
||||
const { path } = info;
|
||||
if (!isUpdateFileNameValid(path)) {
|
||||
throw new Error(
|
||||
`getUpdateFileName: Path '${path}' contains invalid characters`
|
||||
|
@ -300,6 +296,8 @@ export function getUpdateFileName(yaml: string) {
|
|||
return path;
|
||||
}
|
||||
|
||||
// Reliant on third party parser that returns any
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
function parseYaml(yaml: string): any {
|
||||
return safeLoad(yaml, { schema: FAILSAFE_SCHEMA, json: true });
|
||||
}
|
||||
|
@ -336,7 +334,7 @@ function getBaseTempDir() {
|
|||
return app ? getTempPath(app.getPath('userData')) : tmpdir();
|
||||
}
|
||||
|
||||
export async function createTempDir() {
|
||||
export async function createTempDir(): Promise<string> {
|
||||
const baseTempDir = getBaseTempDir();
|
||||
const uniqueName = getGuid();
|
||||
const targetDir = join(baseTempDir, uniqueName);
|
||||
|
@ -345,7 +343,7 @@ export async function createTempDir() {
|
|||
return targetDir;
|
||||
}
|
||||
|
||||
export async function deleteTempDir(targetDir: string) {
|
||||
export async function deleteTempDir(targetDir: string): Promise<void> {
|
||||
const pathInfo = statSync(targetDir);
|
||||
if (!pathInfo.isDirectory()) {
|
||||
throw new Error(
|
||||
|
@ -363,22 +361,21 @@ export async function deleteTempDir(targetDir: string) {
|
|||
await rimrafPromise(targetDir);
|
||||
}
|
||||
|
||||
export function getPrintableError(error: Error) {
|
||||
export function getPrintableError(error: Error): Error | string {
|
||||
return error && error.stack ? error.stack : error;
|
||||
}
|
||||
|
||||
export function getCliOptions<T>(options: any): T {
|
||||
export function getCliOptions<T>(options: ParserConfiguration['options']): T {
|
||||
const parser = createParser({ options });
|
||||
const cliOptions = parser.parse(process.argv);
|
||||
|
||||
if (cliOptions.help) {
|
||||
const help = parser.help().trimRight();
|
||||
// tslint:disable-next-line:no-console
|
||||
console.log(help);
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
return cliOptions;
|
||||
return (cliOptions as unknown) as T;
|
||||
}
|
||||
|
||||
export function setUpdateListener(performUpdateCallback: () => void): void {
|
||||
|
|
|
@ -5,7 +5,7 @@ import {
|
|||
verifySignature,
|
||||
} from 'curve25519-n';
|
||||
|
||||
export function keyPair() {
|
||||
export function keyPair(): Record<string, Buffer> {
|
||||
const privateKey = randomBytes(32);
|
||||
const { pubKey, privKey } = generateKeyPair(privateKey);
|
||||
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
/* eslint-disable no-console */
|
||||
import { getCliOptions, getPrintableError } from './common';
|
||||
import { keyPair } from './curve';
|
||||
import { writeHexToPath } from './signature';
|
||||
|
||||
/* tslint:disable:no-console */
|
||||
|
||||
const OPTIONS = [
|
||||
{
|
||||
names: ['help', 'h'],
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* eslint-disable no-console */
|
||||
import { join, resolve } from 'path';
|
||||
import { readdir as readdirCallback } from 'fs';
|
||||
|
||||
|
@ -5,14 +6,10 @@ import pify from 'pify';
|
|||
|
||||
import { getCliOptions, getPrintableError } from './common';
|
||||
import { writeSignature } from './signature';
|
||||
|
||||
// @ts-ignore
|
||||
import * as packageJson from '../../package.json';
|
||||
|
||||
const readdir = pify(readdirCallback);
|
||||
|
||||
/* tslint:disable:no-console */
|
||||
|
||||
const OPTIONS = [
|
||||
{
|
||||
names: ['help', 'h'],
|
||||
|
|
|
@ -12,7 +12,7 @@ export async function start(
|
|||
getMainWindow: () => BrowserWindow,
|
||||
locale?: LocaleType,
|
||||
logger?: LoggerType
|
||||
) {
|
||||
): Promise<void> {
|
||||
const { platform } = process;
|
||||
|
||||
if (initialized) {
|
||||
|
|
|
@ -33,7 +33,7 @@ export async function start(
|
|||
getMainWindow: () => BrowserWindow,
|
||||
locale: LocaleType,
|
||||
logger: LoggerType
|
||||
) {
|
||||
): Promise<void> {
|
||||
logger.info('macos/start: starting checks...');
|
||||
|
||||
loggerForQuitHandler = logger;
|
||||
|
@ -214,8 +214,6 @@ async function handToAutoUpdate(
|
|||
autoUpdater.checkForUpdates();
|
||||
} catch (error) {
|
||||
reject(error);
|
||||
|
||||
return;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
@ -296,7 +294,6 @@ function write404(
|
|||
function getServerUrl(server: Server) {
|
||||
const address = server.address() as AddressInfo;
|
||||
|
||||
// tslint:disable-next-line:no-http-string
|
||||
return `http://127.0.0.1:${address.port}`;
|
||||
}
|
||||
function generateFileUrl(): string {
|
||||
|
|
|
@ -17,7 +17,7 @@ export async function generateSignature(
|
|||
updatePackagePath: string,
|
||||
version: string,
|
||||
privateKeyPath: string
|
||||
) {
|
||||
): Promise<Buffer> {
|
||||
const privateKey = await loadHexFromPath(privateKeyPath);
|
||||
const message = await generateMessage(updatePackagePath, version);
|
||||
|
||||
|
@ -52,7 +52,7 @@ export async function writeSignature(
|
|||
updatePackagePath: string,
|
||||
version: string,
|
||||
privateKeyPath: string
|
||||
) {
|
||||
): Promise<void> {
|
||||
const signaturePath = getSignaturePath(updatePackagePath);
|
||||
const signature = await generateSignature(
|
||||
updatePackagePath,
|
||||
|
@ -79,7 +79,7 @@ export async function _getFileHash(updatePackagePath: string): Promise<Buffer> {
|
|||
});
|
||||
}
|
||||
|
||||
export function getSignatureFileName(fileName: string) {
|
||||
export function getSignatureFileName(fileName: string): string {
|
||||
return `${fileName}.sig`;
|
||||
}
|
||||
|
||||
|
@ -105,6 +105,9 @@ export async function loadHexFromPath(target: string): Promise<Buffer> {
|
|||
return hexToBinary(hexString);
|
||||
}
|
||||
|
||||
export async function writeHexToPath(target: string, data: Buffer) {
|
||||
export async function writeHexToPath(
|
||||
target: string,
|
||||
data: Buffer
|
||||
): Promise<void> {
|
||||
await writeFile(target, binaryToHex(data));
|
||||
}
|
||||
|
|
|
@ -38,7 +38,7 @@ export async function start(
|
|||
getMainWindow: () => BrowserWindow,
|
||||
locale: LocaleType,
|
||||
logger: LoggerType
|
||||
) {
|
||||
): Promise<void> {
|
||||
logger.info('windows/start: starting checks...');
|
||||
|
||||
loggerForQuitHandler = logger;
|
||||
|
@ -163,7 +163,7 @@ async function install(filePath: string, logger: LoggerType): Promise<void> {
|
|||
const args = ['--updated'];
|
||||
const options = {
|
||||
detached: true,
|
||||
stdio: 'ignore' as 'ignore', // TypeScript considers this a plain string without help
|
||||
stdio: 'ignore' as const, // TypeScript considers this a plain string without help
|
||||
};
|
||||
|
||||
try {
|
||||
|
@ -209,7 +209,6 @@ async function spawn(
|
|||
emitter.on('error', reject);
|
||||
emitter.unref();
|
||||
|
||||
// tslint:disable-next-line no-string-based-set-timeout
|
||||
setTimeout(resolve, 200);
|
||||
});
|
||||
}
|
||||
|
|
1
ts/window.d.ts
vendored
1
ts/window.d.ts
vendored
|
@ -72,6 +72,7 @@ declare global {
|
|||
reduxActions: ReduxActions;
|
||||
restart: () => void;
|
||||
showWindow: () => void;
|
||||
showSettings: () => void;
|
||||
setBadgeCount: (count: number) => void;
|
||||
storage: {
|
||||
put: (key: string, value: any) => void;
|
||||
|
|
|
@ -190,8 +190,12 @@
|
|||
"ts/protobuf/**",
|
||||
"ts/scripts/**",
|
||||
"ts/services/**",
|
||||
"ts/shims/**",
|
||||
"ts/state/**",
|
||||
"ts/storybook/**",
|
||||
"ts/test/**",
|
||||
"ts/types/**",
|
||||
"ts/updater/**",
|
||||
"ts/util/**"
|
||||
]
|
||||
}
|
||||
|
|
|
@ -2124,6 +2124,11 @@
|
|||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/dashdash@1.14.0":
|
||||
version "1.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/dashdash/-/dashdash-1.14.0.tgz#bfa457c2688497cf0e6695dbd522c67a9232833f"
|
||||
integrity sha512-dBnfu9H6TVawx85FGmVEs5lYFXNwUVxn3Nqu5FHhCAi4aPvZR35W4FEMK3ljlpM2vHPGgEnCZGARF59/QGTNJw==
|
||||
|
||||
"@types/debug@^4.1.4", "@types/debug@^4.1.5":
|
||||
version "4.1.5"
|
||||
resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.5.tgz#b14efa8852b7768d898906613c23f688713e02cd"
|
||||
|
|
Loading…
Add table
Reference in a new issue