Add eslint (#1369)

This commit is contained in:
Oscar Hinton 2022-02-24 20:50:19 +01:00 committed by GitHub
parent 233f876bbb
commit 3aa52a5537
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
67 changed files with 2780 additions and 782 deletions

8
.eslintignore Normal file
View File

@ -0,0 +1,8 @@
dist
build
jslib
webpack.main.js
webpack.renderer.js
src/scripts/duo.js
**/node_modules

32
.eslintrc.json Normal file
View File

@ -0,0 +1,32 @@
{
"root": true,
"env": {
"browser": true,
"node": true
},
"extends": ["./jslib/shared/eslintrc.json"],
"rules": {
"import/order": [
"error",
{
"alphabetize": {
"order": "asc"
},
"newlines-between": "always",
"pathGroups": [
{
"pattern": "jslib-*/**",
"group": "external",
"position": "after"
},
{
"pattern": "src/**/*",
"group": "parent",
"position": "before"
}
],
"pathGroupsExcludedImportTypes": ["builtin"]
}
]
}
}

2836
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -26,8 +26,8 @@
"symlink:win": "rm -rf ./jslib && cmd /c mklink /J .\\jslib ..\\jslib", "symlink:win": "rm -rf ./jslib && cmd /c mklink /J .\\jslib ..\\jslib",
"symlink:mac": "npm run symlink:lin", "symlink:mac": "npm run symlink:lin",
"symlink:lin": "rm -rf ./jslib && ln -s ../jslib ./jslib", "symlink:lin": "rm -rf ./jslib && ln -s ../jslib ./jslib",
"lint": "tslint 'src/**/*.ts' && prettier --check .", "lint": "eslint . && prettier --check .",
"lint:fix": "tslint 'src/**/*.ts' --fix", "lint:fix": "eslint . --fix",
"build": "concurrently -n Main,Rend -c yellow,cyan \"npm run build:main\" \"npm run build:renderer\"", "build": "concurrently -n Main,Rend -c yellow,cyan \"npm run build:main\" \"npm run build:renderer\"",
"build:dev": "concurrently -n Main,Rend -c yellow,cyan \"npm run build:main:dev\" \"npm run build:renderer:dev\"", "build:dev": "concurrently -n Main,Rend -c yellow,cyan \"npm run build:main:dev\" \"npm run build:renderer:dev\"",
"build:main": "cross-env NODE_ENV=production webpack --config webpack.main.js", "build:main": "cross-env NODE_ENV=production webpack --config webpack.main.js",
@ -257,6 +257,8 @@
"@ngtools/webpack": "^12.2.13", "@ngtools/webpack": "^12.2.13",
"@types/node": "^16.11.12", "@types/node": "^16.11.12",
"@types/node-ipc": "^9.1.4", "@types/node-ipc": "^9.1.4",
"@typescript-eslint/eslint-plugin": "^5.12.1",
"@typescript-eslint/parser": "^5.12.1",
"clean-webpack-plugin": "^4.0.0", "clean-webpack-plugin": "^4.0.0",
"concurrently": "^6.0.2", "concurrently": "^6.0.2",
"copy-webpack-plugin": "^10.0.0", "copy-webpack-plugin": "^10.0.0",
@ -266,6 +268,10 @@
"electron-notarize": "^1.1.1", "electron-notarize": "^1.1.1",
"electron-rebuild": "^3.2.5", "electron-rebuild": "^3.2.5",
"electron-reload": "^1.5.0", "electron-reload": "^1.5.0",
"eslint": "^8.9.0",
"eslint-config-prettier": "^8.4.0",
"eslint-import-resolver-typescript": "^2.5.0",
"eslint-plugin-import": "^2.25.4",
"html-loader": "^3.0.1", "html-loader": "^3.0.1",
"html-webpack-plugin": "^5.5.0", "html-webpack-plugin": "^5.5.0",
"husky": "^7.0.4", "husky": "^7.0.4",
@ -279,8 +285,6 @@
"tapable": "^1.1.3", "tapable": "^1.1.3",
"ts-loader": "^9.2.5", "ts-loader": "^9.2.5",
"tsconfig-paths-webpack-plugin": "^3.5.1", "tsconfig-paths-webpack-plugin": "^3.5.1",
"tslint": "~6.1.0",
"tslint-loader": "^3.5.4",
"typescript": "4.3.5", "typescript": "4.3.5",
"webpack": "^5.64.4", "webpack": "^5.64.4",
"webpack-cli": "^4.9.1", "webpack-cli": "^4.9.1",
@ -311,6 +315,7 @@
"npm": "~8" "npm": "~8"
}, },
"lint-staged": { "lint-staged": {
"./!(jslib)**": "prettier --ignore-unknown --write" "./!(jslib)**": "prettier --ignore-unknown --write",
"*.ts": "eslint --fix"
} }
} }

View File

@ -1,8 +1,10 @@
/* eslint-disable @typescript-eslint/no-var-requires, no-console */
require("dotenv").config(); require("dotenv").config();
const path = require("path"); const path = require("path");
const fse = require("fs-extra");
const { notarize } = require("electron-notarize");
const { deepAssign } = require("builder-util"); const { deepAssign } = require("builder-util");
const { notarize } = require("electron-notarize");
const fse = require("fs-extra");
exports.default = run; exports.default = run;

View File

@ -1,3 +1,5 @@
/* eslint-disable @typescript-eslint/no-var-requires, no-console */
exports.default = async function (configuration) { exports.default = async function (configuration) {
if (parseInt(process.env.ELECTRON_BUILDER_SIGN) === 1 && configuration.path.slice(-4) == ".exe") { if (parseInt(process.env.ELECTRON_BUILDER_SIGN) === 1 && configuration.path.slice(-4) == ".exe") {
console.log(`[*] Signing file: ${configuration.path}`); console.log(`[*] Signing file: ${configuration.path}`);

View File

@ -1,11 +1,10 @@
import { Component } from "@angular/core"; import { Component } from "@angular/core";
import { EnvironmentComponent as BaseEnvironmentComponent } from "jslib-angular/components/environment.component";
import { EnvironmentService } from "jslib-common/abstractions/environment.service"; import { EnvironmentService } from "jslib-common/abstractions/environment.service";
import { I18nService } from "jslib-common/abstractions/i18n.service"; import { I18nService } from "jslib-common/abstractions/i18n.service";
import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service";
import { EnvironmentComponent as BaseEnvironmentComponent } from "jslib-angular/components/environment.component";
@Component({ @Component({
selector: "app-environment", selector: "app-environment",
templateUrl: "environment.component.html", templateUrl: "environment.component.html",

View File

@ -1,13 +1,12 @@
import { Component } from "@angular/core"; import { Component } from "@angular/core";
import { Router } from "@angular/router"; import { Router } from "@angular/router";
import { HintComponent as BaseHintComponent } from "jslib-angular/components/hint.component";
import { ApiService } from "jslib-common/abstractions/api.service"; import { ApiService } from "jslib-common/abstractions/api.service";
import { I18nService } from "jslib-common/abstractions/i18n.service"; import { I18nService } from "jslib-common/abstractions/i18n.service";
import { LogService } from "jslib-common/abstractions/log.service"; import { LogService } from "jslib-common/abstractions/log.service";
import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service";
import { HintComponent as BaseHintComponent } from "jslib-angular/components/hint.component";
@Component({ @Component({
selector: "app-hint", selector: "app-hint",
templateUrl: "hint.component.html", templateUrl: "hint.component.html",

View File

@ -2,6 +2,7 @@ import { Component, NgZone, OnDestroy } from "@angular/core";
import { ActivatedRoute, Router } from "@angular/router"; import { ActivatedRoute, Router } from "@angular/router";
import { ipcRenderer } from "electron"; import { ipcRenderer } from "electron";
import { LockComponent as BaseLockComponent } from "jslib-angular/components/lock.component";
import { ApiService } from "jslib-common/abstractions/api.service"; import { ApiService } from "jslib-common/abstractions/api.service";
import { BroadcasterService } from "jslib-common/abstractions/broadcaster.service"; import { BroadcasterService } from "jslib-common/abstractions/broadcaster.service";
import { CryptoService } from "jslib-common/abstractions/crypto.service"; import { CryptoService } from "jslib-common/abstractions/crypto.service";
@ -14,8 +15,6 @@ import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.se
import { StateService } from "jslib-common/abstractions/state.service"; import { StateService } from "jslib-common/abstractions/state.service";
import { VaultTimeoutService } from "jslib-common/abstractions/vaultTimeout.service"; import { VaultTimeoutService } from "jslib-common/abstractions/vaultTimeout.service";
import { LockComponent as BaseLockComponent } from "jslib-angular/components/lock.component";
const BroadcasterSubscriptionId = "LockComponent"; const BroadcasterSubscriptionId = "LockComponent";
@Component({ @Component({

View File

@ -1,9 +1,8 @@
import { Component, NgZone, OnDestroy, ViewChild, ViewContainerRef } from "@angular/core"; import { Component, NgZone, OnDestroy, ViewChild, ViewContainerRef } from "@angular/core";
import { Router } from "@angular/router"; import { Router } from "@angular/router";
import { EnvironmentComponent } from "./environment.component"; import { LoginComponent as BaseLoginComponent } from "jslib-angular/components/login.component";
import { ModalService } from "jslib-angular/services/modal.service";
import { AuthService } from "jslib-common/abstractions/auth.service"; import { AuthService } from "jslib-common/abstractions/auth.service";
import { BroadcasterService } from "jslib-common/abstractions/broadcaster.service"; import { BroadcasterService } from "jslib-common/abstractions/broadcaster.service";
import { CryptoFunctionService } from "jslib-common/abstractions/cryptoFunction.service"; import { CryptoFunctionService } from "jslib-common/abstractions/cryptoFunction.service";
@ -16,9 +15,7 @@ import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.se
import { StateService } from "jslib-common/abstractions/state.service"; import { StateService } from "jslib-common/abstractions/state.service";
import { SyncService } from "jslib-common/abstractions/sync.service"; import { SyncService } from "jslib-common/abstractions/sync.service";
import { ModalService } from "jslib-angular/services/modal.service"; import { EnvironmentComponent } from "./environment.component";
import { LoginComponent as BaseLoginComponent } from "jslib-angular/components/login.component";
const BroadcasterSubscriptionId = "LoginComponent"; const BroadcasterSubscriptionId = "LoginComponent";
@ -32,7 +29,7 @@ export class LoginComponent extends BaseLoginComponent implements OnDestroy {
showingModal = false; showingModal = false;
protected alwaysRememberEmail: boolean = true; protected alwaysRememberEmail = true;
private deferFocus: boolean = null; private deferFocus: boolean = null;

View File

@ -1,13 +1,12 @@
import { Component } from "@angular/core"; import { Component } from "@angular/core";
import { PremiumComponent as BasePremiumComponent } from "jslib-angular/components/premium.component";
import { ApiService } from "jslib-common/abstractions/api.service"; import { ApiService } from "jslib-common/abstractions/api.service";
import { I18nService } from "jslib-common/abstractions/i18n.service"; import { I18nService } from "jslib-common/abstractions/i18n.service";
import { LogService } from "jslib-common/abstractions/log.service"; import { LogService } from "jslib-common/abstractions/log.service";
import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service";
import { StateService } from "jslib-common/abstractions/state.service"; import { StateService } from "jslib-common/abstractions/state.service";
import { PremiumComponent as BasePremiumComponent } from "jslib-angular/components/premium.component";
@Component({ @Component({
selector: "app-premium", selector: "app-premium",
templateUrl: "premium.component.html", templateUrl: "premium.component.html",

View File

@ -1,6 +1,7 @@
import { Component, NgZone, OnDestroy, OnInit } from "@angular/core"; import { Component, NgZone, OnDestroy, OnInit } from "@angular/core";
import { Router } from "@angular/router"; import { Router } from "@angular/router";
import { RegisterComponent as BaseRegisterComponent } from "jslib-angular/components/register.component";
import { ApiService } from "jslib-common/abstractions/api.service"; import { ApiService } from "jslib-common/abstractions/api.service";
import { AuthService } from "jslib-common/abstractions/auth.service"; import { AuthService } from "jslib-common/abstractions/auth.service";
import { BroadcasterService } from "jslib-common/abstractions/broadcaster.service"; import { BroadcasterService } from "jslib-common/abstractions/broadcaster.service";
@ -12,8 +13,6 @@ import { PasswordGenerationService } from "jslib-common/abstractions/passwordGen
import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service";
import { StateService } from "jslib-common/abstractions/state.service"; import { StateService } from "jslib-common/abstractions/state.service";
import { RegisterComponent as BaseRegisterComponent } from "jslib-angular/components/register.component";
const BroadcasterSubscriptionId = "RegisterComponent"; const BroadcasterSubscriptionId = "RegisterComponent";
@Component({ @Component({

View File

@ -1,7 +1,7 @@
import { Component, NgZone, OnDestroy } from "@angular/core"; import { Component, NgZone, OnDestroy } from "@angular/core";
import { ActivatedRoute, Router } from "@angular/router"; import { ActivatedRoute, Router } from "@angular/router";
import { SetPasswordComponent as BaseSetPasswordComponent } from "jslib-angular/components/set-password.component";
import { ApiService } from "jslib-common/abstractions/api.service"; import { ApiService } from "jslib-common/abstractions/api.service";
import { BroadcasterService } from "jslib-common/abstractions/broadcaster.service"; import { BroadcasterService } from "jslib-common/abstractions/broadcaster.service";
import { CryptoService } from "jslib-common/abstractions/crypto.service"; import { CryptoService } from "jslib-common/abstractions/crypto.service";
@ -15,8 +15,6 @@ import { SyncService } from "jslib-common/abstractions/sync.service";
const BroadcasterSubscriptionId = "SetPasswordComponent"; const BroadcasterSubscriptionId = "SetPasswordComponent";
import { SetPasswordComponent as BaseSetPasswordComponent } from "jslib-angular/components/set-password.component";
@Component({ @Component({
selector: "app-set-password", selector: "app-set-password",
templateUrl: "set-password.component.html", templateUrl: "set-password.component.html",

View File

@ -2,24 +2,20 @@ import { Component, OnInit } from "@angular/core";
import { FormControl } from "@angular/forms"; import { FormControl } from "@angular/forms";
import { debounceTime } from "rxjs/operators"; import { debounceTime } from "rxjs/operators";
import { DeviceType } from "jslib-common/enums/deviceType"; import { ModalService } from "jslib-angular/services/modal.service";
import { ThemeType } from "jslib-common/enums/themeType";
import { CryptoService } from "jslib-common/abstractions/crypto.service"; import { CryptoService } from "jslib-common/abstractions/crypto.service";
import { I18nService } from "jslib-common/abstractions/i18n.service"; import { I18nService } from "jslib-common/abstractions/i18n.service";
import { MessagingService } from "jslib-common/abstractions/messaging.service"; import { MessagingService } from "jslib-common/abstractions/messaging.service";
import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service";
import { StateService } from "jslib-common/abstractions/state.service"; import { StateService } from "jslib-common/abstractions/state.service";
import { VaultTimeoutService } from "jslib-common/abstractions/vaultTimeout.service"; import { VaultTimeoutService } from "jslib-common/abstractions/vaultTimeout.service";
import { DeviceType } from "jslib-common/enums/deviceType";
import { ModalService } from "jslib-angular/services/modal.service"; import { StorageLocation } from "jslib-common/enums/storageLocation";
import { ThemeType } from "jslib-common/enums/themeType";
import { SetPinComponent } from "../components/set-pin.component";
import { Utils } from "jslib-common/misc/utils"; import { Utils } from "jslib-common/misc/utils";
import { isWindowsStore } from "jslib-electron/utils"; import { isWindowsStore } from "jslib-electron/utils";
import { StorageLocation } from "jslib-common/enums/storageLocation"; import { SetPinComponent } from "../components/set-pin.component";
@Component({ @Component({
selector: "app-settings", selector: "app-settings",
@ -28,15 +24,15 @@ import { StorageLocation } from "jslib-common/enums/storageLocation";
export class SettingsComponent implements OnInit { export class SettingsComponent implements OnInit {
vaultTimeoutAction: string; vaultTimeoutAction: string;
pin: boolean = null; pin: boolean = null;
disableFavicons: boolean = false; disableFavicons = false;
enableBrowserIntegration: boolean = false; enableBrowserIntegration = false;
enableBrowserIntegrationFingerprint: boolean = false; enableBrowserIntegrationFingerprint = false;
enableMinToTray: boolean = false; enableMinToTray = false;
enableCloseToTray: boolean = false; enableCloseToTray = false;
enableTray: boolean = false; enableTray = false;
showMinToTray: boolean = false; showMinToTray = false;
startToTray: boolean = false; startToTray = false;
minimizeOnCopyToClipboard: boolean = false; minimizeOnCopyToClipboard = false;
locale: string; locale: string;
vaultTimeouts: any[]; vaultTimeouts: any[];
localeOptions: any[]; localeOptions: any[];
@ -50,9 +46,9 @@ export class SettingsComponent implements OnInit {
noAutoPromptBiometrics: boolean; noAutoPromptBiometrics: boolean;
noAutoPromptBiometricsText: string; noAutoPromptBiometricsText: string;
alwaysShowDock: boolean; alwaysShowDock: boolean;
showAlwaysShowDock: boolean = false; showAlwaysShowDock = false;
openAtLogin: boolean; openAtLogin: boolean;
requireEnableTray: boolean = false; requireEnableTray = false;
enableTrayText: string; enableTrayText: string;
enableTrayDescText: string; enableTrayDescText: string;
@ -65,9 +61,9 @@ export class SettingsComponent implements OnInit {
vaultTimeout: FormControl = new FormControl(null); vaultTimeout: FormControl = new FormControl(null);
showSecurity: boolean = true; showSecurity = true;
showAccountPreferences: boolean = true; showAccountPreferences = true;
showAppPreferences: boolean = true; showAppPreferences = true;
currentUserEmail: string; currentUserEmail: string;

View File

@ -1,7 +1,7 @@
import { Component } from "@angular/core"; import { Component } from "@angular/core";
import { ActivatedRoute, Router } from "@angular/router"; import { ActivatedRoute, Router } from "@angular/router";
import { SsoComponent as BaseSsoComponent } from "jslib-angular/components/sso.component";
import { ApiService } from "jslib-common/abstractions/api.service"; import { ApiService } from "jslib-common/abstractions/api.service";
import { AuthService } from "jslib-common/abstractions/auth.service"; import { AuthService } from "jslib-common/abstractions/auth.service";
import { CryptoFunctionService } from "jslib-common/abstractions/cryptoFunction.service"; import { CryptoFunctionService } from "jslib-common/abstractions/cryptoFunction.service";
@ -13,8 +13,6 @@ import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.se
import { StateService } from "jslib-common/abstractions/state.service"; import { StateService } from "jslib-common/abstractions/state.service";
import { SyncService } from "jslib-common/abstractions/sync.service"; import { SyncService } from "jslib-common/abstractions/sync.service";
import { SsoComponent as BaseSsoComponent } from "jslib-angular/components/sso.component";
@Component({ @Component({
selector: "app-sso", selector: "app-sso",
templateUrl: "sso.component.html", templateUrl: "sso.component.html",

View File

@ -1,12 +1,11 @@
import { Component } from "@angular/core"; import { Component } from "@angular/core";
import { Router } from "@angular/router"; import { Router } from "@angular/router";
import { TwoFactorOptionsComponent as BaseTwoFactorOptionsComponent } from "jslib-angular/components/two-factor-options.component";
import { I18nService } from "jslib-common/abstractions/i18n.service"; import { I18nService } from "jslib-common/abstractions/i18n.service";
import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service";
import { TwoFactorService } from "jslib-common/abstractions/twoFactor.service"; import { TwoFactorService } from "jslib-common/abstractions/twoFactor.service";
import { TwoFactorOptionsComponent as BaseTwoFactorOptionsComponent } from "jslib-angular/components/two-factor-options.component";
@Component({ @Component({
selector: "app-two-factor-options", selector: "app-two-factor-options",
templateUrl: "two-factor-options.component.html", templateUrl: "two-factor-options.component.html",

View File

@ -1,11 +1,8 @@
import { Component, ViewChild, ViewContainerRef } from "@angular/core"; import { Component, ViewChild, ViewContainerRef } from "@angular/core";
import { ActivatedRoute, Router } from "@angular/router"; import { ActivatedRoute, Router } from "@angular/router";
import { TwoFactorOptionsComponent } from "./two-factor-options.component"; import { TwoFactorComponent as BaseTwoFactorComponent } from "jslib-angular/components/two-factor.component";
import { ModalService } from "jslib-angular/services/modal.service";
import { TwoFactorProviderType } from "jslib-common/enums/twoFactorProviderType";
import { ApiService } from "jslib-common/abstractions/api.service"; import { ApiService } from "jslib-common/abstractions/api.service";
import { AuthService } from "jslib-common/abstractions/auth.service"; import { AuthService } from "jslib-common/abstractions/auth.service";
import { EnvironmentService } from "jslib-common/abstractions/environment.service"; import { EnvironmentService } from "jslib-common/abstractions/environment.service";
@ -15,10 +12,9 @@ import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.se
import { StateService } from "jslib-common/abstractions/state.service"; import { StateService } from "jslib-common/abstractions/state.service";
import { SyncService } from "jslib-common/abstractions/sync.service"; import { SyncService } from "jslib-common/abstractions/sync.service";
import { TwoFactorService } from "jslib-common/abstractions/twoFactor.service"; import { TwoFactorService } from "jslib-common/abstractions/twoFactor.service";
import { TwoFactorProviderType } from "jslib-common/enums/twoFactorProviderType";
import { ModalService } from "jslib-angular/services/modal.service"; import { TwoFactorOptionsComponent } from "./two-factor-options.component";
import { TwoFactorComponent as BaseTwoFactorComponent } from "jslib-angular/components/two-factor.component";
@Component({ @Component({
selector: "app-two-factor", selector: "app-two-factor",

View File

@ -1,5 +1,6 @@
import { Component } from "@angular/core"; import { Component } from "@angular/core";
import { UpdateTempPasswordComponent as BaseUpdateTempPasswordComponent } from "jslib-angular/components/update-temp-password.component";
import { ApiService } from "jslib-common/abstractions/api.service"; import { ApiService } from "jslib-common/abstractions/api.service";
import { CryptoService } from "jslib-common/abstractions/crypto.service"; import { CryptoService } from "jslib-common/abstractions/crypto.service";
import { I18nService } from "jslib-common/abstractions/i18n.service"; import { I18nService } from "jslib-common/abstractions/i18n.service";
@ -11,8 +12,6 @@ import { PolicyService } from "jslib-common/abstractions/policy.service";
import { StateService } from "jslib-common/abstractions/state.service"; import { StateService } from "jslib-common/abstractions/state.service";
import { SyncService } from "jslib-common/abstractions/sync.service"; import { SyncService } from "jslib-common/abstractions/sync.service";
import { UpdateTempPasswordComponent as BaseUpdateTempPasswordComponent } from "jslib-angular/components/update-temp-password.component";
interface MasterPasswordScore { interface MasterPasswordScore {
Color: string; Color: string;
Text: string; Text: string;

View File

@ -3,6 +3,7 @@ import { RouterModule, Routes } from "@angular/router";
import { AuthGuardService } from "jslib-angular/services/auth-guard.service"; import { AuthGuardService } from "jslib-angular/services/auth-guard.service";
import { LockGuardService } from "jslib-angular/services/lock-guard.service"; import { LockGuardService } from "jslib-angular/services/lock-guard.service";
import { LoginGuardService } from "../services/loginGuard.service"; import { LoginGuardService } from "../services/loginGuard.service";
import { HintComponent } from "./accounts/hint.component"; import { HintComponent } from "./accounts/hint.component";
@ -14,9 +15,7 @@ import { SetPasswordComponent } from "./accounts/set-password.component";
import { SsoComponent } from "./accounts/sso.component"; import { SsoComponent } from "./accounts/sso.component";
import { TwoFactorComponent } from "./accounts/two-factor.component"; import { TwoFactorComponent } from "./accounts/two-factor.component";
import { UpdateTempPasswordComponent } from "./accounts/update-temp-password.component"; import { UpdateTempPasswordComponent } from "./accounts/update-temp-password.component";
import { SendComponent } from "./send/send.component"; import { SendComponent } from "./send/send.component";
import { VaultComponent } from "./vault/vault.component"; import { VaultComponent } from "./vault/vault.component";
const routes: Routes = [ const routes: Routes = [

View File

@ -11,10 +11,8 @@ import { DomSanitizer } from "@angular/platform-browser";
import { Router } from "@angular/router"; import { Router } from "@angular/router";
import { IndividualConfig, ToastrService } from "ngx-toastr"; import { IndividualConfig, ToastrService } from "ngx-toastr";
import { PremiumComponent } from "./accounts/premium.component"; import { ModalRef } from "jslib-angular/components/modal/modal.ref";
import { SettingsComponent } from "./accounts/settings.component"; import { ModalService } from "jslib-angular/services/modal.service";
import { PasswordGeneratorHistoryComponent } from "./vault/password-generator-history.component";
import { AuthService } from "jslib-common/abstractions/auth.service"; import { AuthService } from "jslib-common/abstractions/auth.service";
import { BroadcasterService } from "jslib-common/abstractions/broadcaster.service"; import { BroadcasterService } from "jslib-common/abstractions/broadcaster.service";
import { CipherService } from "jslib-common/abstractions/cipher.service"; import { CipherService } from "jslib-common/abstractions/cipher.service";
@ -37,18 +35,17 @@ import { SyncService } from "jslib-common/abstractions/sync.service";
import { SystemService } from "jslib-common/abstractions/system.service"; import { SystemService } from "jslib-common/abstractions/system.service";
import { TokenService } from "jslib-common/abstractions/token.service"; import { TokenService } from "jslib-common/abstractions/token.service";
import { VaultTimeoutService } from "jslib-common/abstractions/vaultTimeout.service"; import { VaultTimeoutService } from "jslib-common/abstractions/vaultTimeout.service";
import { CipherType } from "jslib-common/enums/cipherType"; import { CipherType } from "jslib-common/enums/cipherType";
import { MenuUpdateRequest } from "src/main/menu.updater";
import { PremiumComponent } from "./accounts/premium.component";
import { SettingsComponent } from "./accounts/settings.component";
import { ExportComponent } from "./vault/export.component"; import { ExportComponent } from "./vault/export.component";
import { FolderAddEditComponent } from "./vault/folder-add-edit.component"; import { FolderAddEditComponent } from "./vault/folder-add-edit.component";
import { PasswordGeneratorHistoryComponent } from "./vault/password-generator-history.component";
import { PasswordGeneratorComponent } from "./vault/password-generator.component"; import { PasswordGeneratorComponent } from "./vault/password-generator.component";
import { ModalRef } from "jslib-angular/components/modal/modal.ref";
import { ModalService } from "jslib-angular/services/modal.service";
import { MenuUpdateRequest } from "src/main/menu.updater";
const BroadcasterSubscriptionId = "AppComponent"; const BroadcasterSubscriptionId = "AppComponent";
const IdleTimeout = 60000 * 10; // 10 minutes const IdleTimeout = 60000 * 10; // 10 minutes
const SyncInterval = 6 * 60 * 60 * 1000; // 6 hours const SyncInterval = 6 * 60 * 60 * 1000; // 6 hours
@ -208,7 +205,7 @@ export class AppComponent implements OnInit {
case "openPremium": case "openPremium":
await this.openModal<PremiumComponent>(PremiumComponent, this.premiumRef); await this.openModal<PremiumComponent>(PremiumComponent, this.premiumRef);
break; break;
case "showFingerprintPhrase": case "showFingerprintPhrase": {
const fingerprint = await this.cryptoService.getFingerprint( const fingerprint = await this.cryptoService.getFingerprint(
await this.stateService.getUserId() await this.stateService.getUserId()
); );
@ -222,6 +219,7 @@ export class AppComponent implements OnInit {
this.platformUtilsService.launchUri("https://bitwarden.com/help/fingerprint-phrase/"); this.platformUtilsService.launchUri("https://bitwarden.com/help/fingerprint-phrase/");
} }
break; break;
}
case "openPasswordHistory": case "openPasswordHistory":
await this.openModal<PasswordGeneratorHistoryComponent>( await this.openModal<PasswordGeneratorHistoryComponent>(
PasswordGeneratorHistoryComponent, PasswordGeneratorHistoryComponent,
@ -241,7 +239,7 @@ export class AppComponent implements OnInit {
queryParams: { code: message.code, state: message.state }, queryParams: { code: message.code, state: message.state },
}); });
break; break;
case "premiumRequired": case "premiumRequired": {
const premiumConfirmed = await this.platformUtilsService.showDialog( const premiumConfirmed = await this.platformUtilsService.showDialog(
this.i18nService.t("premiumRequiredDesc"), this.i18nService.t("premiumRequiredDesc"),
this.i18nService.t("premiumRequired"), this.i18nService.t("premiumRequired"),
@ -252,7 +250,8 @@ export class AppComponent implements OnInit {
await this.openModal<PremiumComponent>(PremiumComponent, this.premiumRef); await this.openModal<PremiumComponent>(PremiumComponent, this.premiumRef);
} }
break; break;
case "emailVerificationRequired": }
case "emailVerificationRequired": {
const emailVerificationConfirmed = await this.platformUtilsService.showDialog( const emailVerificationConfirmed = await this.platformUtilsService.showDialog(
this.i18nService.t("emailVerificationRequiredDesc"), this.i18nService.t("emailVerificationRequiredDesc"),
this.i18nService.t("emailVerificationRequired"), this.i18nService.t("emailVerificationRequired"),
@ -265,6 +264,7 @@ export class AppComponent implements OnInit {
); );
} }
break; break;
}
case "syncVault": case "syncVault":
try { try {
await this.syncService.fullSync(true, true); await this.syncService.fullSync(true, true);
@ -326,7 +326,7 @@ export class AppComponent implements OnInit {
case "convertAccountToKeyConnector": case "convertAccountToKeyConnector":
this.router.navigate(["/remove-password"]); this.router.navigate(["/remove-password"]);
break; break;
case "switchAccount": case "switchAccount": {
if (message.userId != null) { if (message.userId != null) {
await this.stateService.setActiveUser(message.userId); await this.stateService.setActiveUser(message.userId);
} }
@ -341,12 +341,16 @@ export class AppComponent implements OnInit {
this.router.navigate(["vault"]); this.router.navigate(["vault"]);
} }
break; break;
}
case "systemSuspended": case "systemSuspended":
await this.checkForSystemTimeout(systemTimeoutOptions.onSuspend); await this.checkForSystemTimeout(systemTimeoutOptions.onSuspend);
break;
case "systemLocked": case "systemLocked":
await this.checkForSystemTimeout(systemTimeoutOptions.onLock); await this.checkForSystemTimeout(systemTimeoutOptions.onLock);
break;
case "systemIdle": case "systemIdle":
await this.checkForSystemTimeout(systemTimeoutOptions.onIdle); await this.checkForSystemTimeout(systemTimeoutOptions.onIdle);
break;
} }
}); });
}); });

View File

@ -4,85 +4,7 @@ import { A11yModule } from "@angular/cdk/a11y";
import { DragDropModule } from "@angular/cdk/drag-drop"; import { DragDropModule } from "@angular/cdk/drag-drop";
import { OverlayModule } from "@angular/cdk/overlay"; import { OverlayModule } from "@angular/cdk/overlay";
import { ScrollingModule } from "@angular/cdk/scrolling"; import { ScrollingModule } from "@angular/cdk/scrolling";
import { DatePipe } from "@angular/common"; import { DatePipe, registerLocaleData } from "@angular/common";
import { NgModule } from "@angular/core";
import { FormsModule, ReactiveFormsModule } from "@angular/forms";
import { BrowserModule } from "@angular/platform-browser";
import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
import "zone.js/dist/zone";
import { AppRoutingModule } from "./app-routing.module";
import { ServicesModule } from "./services.module";
import { AppComponent } from "./app.component";
import { EnvironmentComponent } from "./accounts/environment.component";
import { HintComponent } from "./accounts/hint.component";
import { LockComponent } from "./accounts/lock.component";
import { LoginComponent } from "./accounts/login.component";
import { PremiumComponent } from "./accounts/premium.component";
import { RegisterComponent } from "./accounts/register.component";
import { RemovePasswordComponent } from "./accounts/remove-password.component";
import { SetPasswordComponent } from "./accounts/set-password.component";
import { SettingsComponent } from "./accounts/settings.component";
import { SsoComponent } from "./accounts/sso.component";
import { TwoFactorOptionsComponent } from "./accounts/two-factor-options.component";
import { TwoFactorComponent } from "./accounts/two-factor.component";
import { UpdateTempPasswordComponent } from "./accounts/update-temp-password.component";
import { VaultTimeoutInputComponent } from "./accounts/vault-timeout-input.component";
import { AvatarComponent } from "jslib-angular/components/avatar.component";
import { CalloutComponent } from "jslib-angular/components/callout.component";
import { IconComponent } from "jslib-angular/components/icon.component";
import { BitwardenToastModule } from "jslib-angular/components/toastr.component";
import { A11yTitleDirective } from "jslib-angular/directives/a11y-title.directive";
import { ApiActionDirective } from "jslib-angular/directives/api-action.directive";
import { AutofocusDirective } from "jslib-angular/directives/autofocus.directive";
import { BlurClickDirective } from "jslib-angular/directives/blur-click.directive";
import { BoxRowDirective } from "jslib-angular/directives/box-row.directive";
import { CipherListVirtualScroll } from "jslib-angular/directives/cipherListVirtualScroll.directive";
import { FallbackSrcDirective } from "jslib-angular/directives/fallback-src.directive";
import { InputVerbatimDirective } from "jslib-angular/directives/input-verbatim.directive";
import { SelectCopyDirective } from "jslib-angular/directives/select-copy.directive";
import { StopClickDirective } from "jslib-angular/directives/stop-click.directive";
import { StopPropDirective } from "jslib-angular/directives/stop-prop.directive";
import { TrueFalseValueDirective } from "jslib-angular/directives/true-false-value.directive";
import { ColorPasswordPipe } from "jslib-angular/pipes/color-password.pipe";
import { I18nPipe } from "jslib-angular/pipes/i18n.pipe";
import { SearchCiphersPipe } from "jslib-angular/pipes/search-ciphers.pipe";
import { AddEditCustomFieldsComponent } from "./vault/add-edit-custom-fields.component";
import { AddEditComponent } from "./vault/add-edit.component";
import { AttachmentsComponent } from "./vault/attachments.component";
import { CiphersComponent } from "./vault/ciphers.component";
import { CollectionsComponent } from "./vault/collections.component";
import { ExportComponent } from "./vault/export.component";
import { FolderAddEditComponent } from "./vault/folder-add-edit.component";
import { GroupingsComponent } from "./vault/groupings.component";
import { PasswordGeneratorHistoryComponent } from "./vault/password-generator-history.component";
import { PasswordGeneratorComponent } from "./vault/password-generator.component";
import { PasswordHistoryComponent } from "./vault/password-history.component";
import { ShareComponent } from "./vault/share.component";
import { VaultComponent } from "./vault/vault.component";
import { ViewCustomFieldsComponent } from "./vault/view-custom-fields.component";
import { ViewComponent } from "./vault/view.component";
import { AddEditComponent as SendAddEditComponent } from "./send/add-edit.component";
import { EffluxDatesComponent as SendEffluxDatesComponent } from "./send/efflux-dates.component";
import { SendComponent } from "./send/send.component";
import { AccountSwitcherComponent } from "./layout/account-switcher.component";
import { HeaderComponent } from "./layout/header.component";
import { NavComponent } from "./layout/nav.component";
import { SearchComponent } from "./layout/search/search.component";
import { PasswordRepromptComponent } from "./components/password-reprompt.component";
import { SetPinComponent } from "./components/set-pin.component";
import { VerifyMasterPasswordComponent } from "./components/verify-master-password.component";
import { registerLocaleData } from "@angular/common";
import localeAf from "@angular/common/locales/af"; import localeAf from "@angular/common/locales/af";
import localeAz from "@angular/common/locales/az"; import localeAz from "@angular/common/locales/az";
import localeBe from "@angular/common/locales/be"; import localeBe from "@angular/common/locales/be";
@ -127,6 +49,73 @@ import localeUk from "@angular/common/locales/uk";
import localeVi from "@angular/common/locales/vi"; import localeVi from "@angular/common/locales/vi";
import localeZhCn from "@angular/common/locales/zh-Hans"; import localeZhCn from "@angular/common/locales/zh-Hans";
import localeZhTw from "@angular/common/locales/zh-Hant"; import localeZhTw from "@angular/common/locales/zh-Hant";
import { NgModule } from "@angular/core";
import { FormsModule, ReactiveFormsModule } from "@angular/forms";
import { BrowserModule } from "@angular/platform-browser";
import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
import { AvatarComponent } from "jslib-angular/components/avatar.component";
import { CalloutComponent } from "jslib-angular/components/callout.component";
import { IconComponent } from "jslib-angular/components/icon.component";
import { BitwardenToastModule } from "jslib-angular/components/toastr.component";
import { A11yTitleDirective } from "jslib-angular/directives/a11y-title.directive";
import { ApiActionDirective } from "jslib-angular/directives/api-action.directive";
import { AutofocusDirective } from "jslib-angular/directives/autofocus.directive";
import { BlurClickDirective } from "jslib-angular/directives/blur-click.directive";
import { BoxRowDirective } from "jslib-angular/directives/box-row.directive";
import { CipherListVirtualScroll } from "jslib-angular/directives/cipherListVirtualScroll.directive";
import { FallbackSrcDirective } from "jslib-angular/directives/fallback-src.directive";
import { InputVerbatimDirective } from "jslib-angular/directives/input-verbatim.directive";
import { SelectCopyDirective } from "jslib-angular/directives/select-copy.directive";
import { StopClickDirective } from "jslib-angular/directives/stop-click.directive";
import { StopPropDirective } from "jslib-angular/directives/stop-prop.directive";
import { TrueFalseValueDirective } from "jslib-angular/directives/true-false-value.directive";
import { ColorPasswordPipe } from "jslib-angular/pipes/color-password.pipe";
import { I18nPipe } from "jslib-angular/pipes/i18n.pipe";
import { SearchCiphersPipe } from "jslib-angular/pipes/search-ciphers.pipe";
import { EnvironmentComponent } from "./accounts/environment.component";
import { HintComponent } from "./accounts/hint.component";
import { LockComponent } from "./accounts/lock.component";
import { LoginComponent } from "./accounts/login.component";
import { PremiumComponent } from "./accounts/premium.component";
import { RegisterComponent } from "./accounts/register.component";
import { RemovePasswordComponent } from "./accounts/remove-password.component";
import { SetPasswordComponent } from "./accounts/set-password.component";
import { SettingsComponent } from "./accounts/settings.component";
import { SsoComponent } from "./accounts/sso.component";
import { TwoFactorOptionsComponent } from "./accounts/two-factor-options.component";
import { TwoFactorComponent } from "./accounts/two-factor.component";
import { UpdateTempPasswordComponent } from "./accounts/update-temp-password.component";
import { VaultTimeoutInputComponent } from "./accounts/vault-timeout-input.component";
import { AppRoutingModule } from "./app-routing.module";
import { AppComponent } from "./app.component";
import { PasswordRepromptComponent } from "./components/password-reprompt.component";
import { SetPinComponent } from "./components/set-pin.component";
import { VerifyMasterPasswordComponent } from "./components/verify-master-password.component";
import { AccountSwitcherComponent } from "./layout/account-switcher.component";
import { HeaderComponent } from "./layout/header.component";
import { NavComponent } from "./layout/nav.component";
import { SearchComponent } from "./layout/search/search.component";
import { AddEditComponent as SendAddEditComponent } from "./send/add-edit.component";
import { EffluxDatesComponent as SendEffluxDatesComponent } from "./send/efflux-dates.component";
import { SendComponent } from "./send/send.component";
import { ServicesModule } from "./services.module";
import { AddEditCustomFieldsComponent } from "./vault/add-edit-custom-fields.component";
import { AddEditComponent } from "./vault/add-edit.component";
import { AttachmentsComponent } from "./vault/attachments.component";
import { CiphersComponent } from "./vault/ciphers.component";
import { CollectionsComponent } from "./vault/collections.component";
import { ExportComponent } from "./vault/export.component";
import { FolderAddEditComponent } from "./vault/folder-add-edit.component";
import { GroupingsComponent } from "./vault/groupings.component";
import { PasswordGeneratorHistoryComponent } from "./vault/password-generator-history.component";
import { PasswordGeneratorComponent } from "./vault/password-generator.component";
import { PasswordHistoryComponent } from "./vault/password-history.component";
import { ShareComponent } from "./vault/share.component";
import { VaultComponent } from "./vault/vault.component";
import { ViewCustomFieldsComponent } from "./vault/view-custom-fields.component";
import { ViewComponent } from "./vault/view.component";
registerLocaleData(localeAf, "af"); registerLocaleData(localeAf, "af");
registerLocaleData(localeAz, "az"); registerLocaleData(localeAz, "az");

View File

@ -5,10 +5,8 @@ import { Component, OnInit } from "@angular/core";
import { MessagingService } from "jslib-common/abstractions/messaging.service"; import { MessagingService } from "jslib-common/abstractions/messaging.service";
import { StateService } from "jslib-common/abstractions/state.service"; import { StateService } from "jslib-common/abstractions/state.service";
import { VaultTimeoutService } from "jslib-common/abstractions/vaultTimeout.service"; import { VaultTimeoutService } from "jslib-common/abstractions/vaultTimeout.service";
import { AuthenticationStatus } from "jslib-common/enums/authenticationStatus"; import { AuthenticationStatus } from "jslib-common/enums/authenticationStatus";
import { Utils } from "jslib-common/misc/utils"; import { Utils } from "jslib-common/misc/utils";
import { Account } from "jslib-common/models/domain/account"; import { Account } from "jslib-common/models/domain/account";
export class SwitcherAccount extends Account { export class SwitcherAccount extends Account {
@ -51,7 +49,7 @@ export class SwitcherAccount extends Account {
], ],
}) })
export class AccountSwitcherComponent implements OnInit { export class AccountSwitcherComponent implements OnInit {
isOpen: boolean = false; isOpen = false;
accounts: { [userId: string]: SwitcherAccount } = {}; accounts: { [userId: string]: SwitcherAccount } = {};
activeAccountEmail: string; activeAccountEmail: string;
serverUrl: string; serverUrl: string;

View File

@ -1,4 +1,5 @@
import { Component } from "@angular/core"; import { Component } from "@angular/core";
import { I18nService } from "jslib-common/abstractions/i18n.service"; import { I18nService } from "jslib-common/abstractions/i18n.service";
@Component({ @Component({

View File

@ -1,7 +1,7 @@
import { DatePipe } from "@angular/common"; import { DatePipe } from "@angular/common";
import { Component } from "@angular/core"; import { Component } from "@angular/core";
import { AddEditComponent as BaseAddEditComponent } from "jslib-angular/components/send/add-edit.component";
import { EnvironmentService } from "jslib-common/abstractions/environment.service"; import { EnvironmentService } from "jslib-common/abstractions/environment.service";
import { I18nService } from "jslib-common/abstractions/i18n.service"; import { I18nService } from "jslib-common/abstractions/i18n.service";
import { LogService } from "jslib-common/abstractions/log.service"; import { LogService } from "jslib-common/abstractions/log.service";
@ -11,8 +11,6 @@ import { PolicyService } from "jslib-common/abstractions/policy.service";
import { SendService } from "jslib-common/abstractions/send.service"; import { SendService } from "jslib-common/abstractions/send.service";
import { StateService } from "jslib-common/abstractions/state.service"; import { StateService } from "jslib-common/abstractions/state.service";
import { AddEditComponent as BaseAddEditComponent } from "jslib-angular/components/send/add-edit.component";
@Component({ @Component({
selector: "app-send-add-edit", selector: "app-send-add-edit",
templateUrl: "add-edit.component.html", templateUrl: "add-edit.component.html",

View File

@ -1,14 +1,11 @@
import { DatePipe } from "@angular/common"; import { DatePipe } from "@angular/common";
import { Component, OnChanges } from "@angular/core"; import { Component, OnChanges } from "@angular/core";
import { ControlContainer, NgForm } from "@angular/forms"; import { ControlContainer, NgForm } from "@angular/forms";
import { EffluxDatesComponent as BaseEffluxDatesComponent } from "jslib-angular/components/send/efflux-dates.component";
import { I18nService } from "jslib-common/abstractions/i18n.service"; import { I18nService } from "jslib-common/abstractions/i18n.service";
import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service";
import { EffluxDatesComponent as BaseEffluxDatesComponent } from "jslib-angular/components/send/efflux-dates.component";
@Component({ @Component({
selector: "app-send-efflux-dates", selector: "app-send-efflux-dates",
templateUrl: "efflux-dates.component.html", templateUrl: "efflux-dates.component.html",

View File

@ -1,5 +1,6 @@
import { Component, NgZone, OnDestroy, OnInit, ViewChild } from "@angular/core"; import { Component, NgZone, OnDestroy, OnInit, ViewChild } from "@angular/core";
import { SendComponent as BaseSendComponent } from "jslib-angular/components/send/send.component";
import { BroadcasterService } from "jslib-common/abstractions/broadcaster.service"; import { BroadcasterService } from "jslib-common/abstractions/broadcaster.service";
import { EnvironmentService } from "jslib-common/abstractions/environment.service"; import { EnvironmentService } from "jslib-common/abstractions/environment.service";
import { I18nService } from "jslib-common/abstractions/i18n.service"; import { I18nService } from "jslib-common/abstractions/i18n.service";
@ -8,14 +9,11 @@ import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.se
import { PolicyService } from "jslib-common/abstractions/policy.service"; import { PolicyService } from "jslib-common/abstractions/policy.service";
import { SearchService } from "jslib-common/abstractions/search.service"; import { SearchService } from "jslib-common/abstractions/search.service";
import { SendService } from "jslib-common/abstractions/send.service"; import { SendService } from "jslib-common/abstractions/send.service";
import { SendView } from "jslib-common/models/view/sendView";
import { SendComponent as BaseSendComponent } from "jslib-angular/components/send/send.component";
import { invokeMenu, RendererMenuItem } from "jslib-electron/utils"; import { invokeMenu, RendererMenuItem } from "jslib-electron/utils";
import { SendView } from "jslib-common/models/view/sendView";
import { SearchBarService } from "../layout/search/search-bar.service"; import { SearchBarService } from "../layout/search/search-bar.service";
import { AddEditComponent } from "./add-edit.component"; import { AddEditComponent } from "./add-edit.component";
enum Action { enum Action {

View File

@ -1,28 +1,6 @@
import { APP_INITIALIZER, NgModule } from "@angular/core"; import { APP_INITIALIZER, NgModule } from "@angular/core";
import { ElectronLogService } from "jslib-electron/services/electronLog.service";
import { ElectronPlatformUtilsService } from "jslib-electron/services/electronPlatformUtils.service";
import { ElectronRendererMessagingService } from "jslib-electron/services/electronRendererMessaging.service";
import { ElectronRendererSecureStorageService } from "jslib-electron/services/electronRendererSecureStorage.service";
import { ElectronRendererStorageService } from "jslib-electron/services/electronRendererStorage.service";
import { I18nService } from "../services/i18n.service";
import { LoginGuardService } from "../services/loginGuard.service";
import { NativeMessagingService } from "../services/nativeMessaging.service";
import { PasswordRepromptService } from "../services/passwordReprompt.service";
import { StateService } from "../services/state.service";
import { SearchBarService } from "./layout/search/search-bar.service";
import { JslibServicesModule } from "jslib-angular/services/jslib-services.module"; import { JslibServicesModule } from "jslib-angular/services/jslib-services.module";
import { ContainerService } from "jslib-common/services/container.service";
import { EventService } from "jslib-common/services/event.service";
import { SystemService } from "jslib-common/services/system.service";
import { VaultTimeoutService } from "jslib-common/services/vaultTimeout.service";
import { ElectronCryptoService } from "jslib-electron/services/electronCrypto.service";
import { BroadcasterService as BroadcasterServiceAbstraction } from "jslib-common/abstractions/broadcaster.service"; import { BroadcasterService as BroadcasterServiceAbstraction } from "jslib-common/abstractions/broadcaster.service";
import { CryptoService as CryptoServiceAbstraction } from "jslib-common/abstractions/crypto.service"; import { CryptoService as CryptoServiceAbstraction } from "jslib-common/abstractions/crypto.service";
import { CryptoFunctionService as CryptoFunctionServiceAbstraction } from "jslib-common/abstractions/cryptoFunction.service"; import { CryptoFunctionService as CryptoFunctionServiceAbstraction } from "jslib-common/abstractions/cryptoFunction.service";
@ -41,15 +19,29 @@ import { SyncService as SyncServiceAbstraction } from "jslib-common/abstractions
import { SystemService as SystemServiceAbstraction } from "jslib-common/abstractions/system.service"; import { SystemService as SystemServiceAbstraction } from "jslib-common/abstractions/system.service";
import { TwoFactorService as TwoFactorServiceAbstraction } from "jslib-common/abstractions/twoFactor.service"; import { TwoFactorService as TwoFactorServiceAbstraction } from "jslib-common/abstractions/twoFactor.service";
import { VaultTimeoutService as VaultTimeoutServiceAbstraction } from "jslib-common/abstractions/vaultTimeout.service"; import { VaultTimeoutService as VaultTimeoutServiceAbstraction } from "jslib-common/abstractions/vaultTimeout.service";
import { ThemeType } from "jslib-common/enums/themeType"; import { ThemeType } from "jslib-common/enums/themeType";
import { StateFactory } from "jslib-common/factories/stateFactory";
import { GlobalState } from "jslib-common/models/domain/globalState";
import { ContainerService } from "jslib-common/services/container.service";
import { EventService } from "jslib-common/services/event.service";
import { StateMigrationService } from "jslib-common/services/stateMigration.service";
import { SystemService } from "jslib-common/services/system.service";
import { VaultTimeoutService } from "jslib-common/services/vaultTimeout.service";
import { ElectronCryptoService } from "jslib-electron/services/electronCrypto.service";
import { ElectronLogService } from "jslib-electron/services/electronLog.service";
import { ElectronPlatformUtilsService } from "jslib-electron/services/electronPlatformUtils.service";
import { ElectronRendererMessagingService } from "jslib-electron/services/electronRendererMessaging.service";
import { ElectronRendererSecureStorageService } from "jslib-electron/services/electronRendererSecureStorage.service";
import { ElectronRendererStorageService } from "jslib-electron/services/electronRendererStorage.service";
import { Account } from "../models/account"; import { Account } from "../models/account";
import { I18nService } from "../services/i18n.service";
import { LoginGuardService } from "../services/loginGuard.service";
import { NativeMessagingService } from "../services/nativeMessaging.service";
import { PasswordRepromptService } from "../services/passwordReprompt.service";
import { StateService } from "../services/state.service";
import { GlobalState } from "jslib-common/models/domain/globalState"; import { SearchBarService } from "./layout/search/search-bar.service";
import { StateFactory } from "jslib-common/factories/stateFactory";
import { StateMigrationService } from "jslib-common/services/stateMigration.service";
export function initFactory( export function initFactory(
window: Window, window: Window,
@ -64,7 +56,7 @@ export function initFactory(
stateService: StateServiceAbstraction, stateService: StateServiceAbstraction,
cryptoService: CryptoServiceAbstraction, cryptoService: CryptoServiceAbstraction,
nativeMessagingService: NativeMessagingService nativeMessagingService: NativeMessagingService
): Function { ): () => Promise<void> {
return async () => { return async () => {
nativeMessagingService.init(); nativeMessagingService.init();
await stateService.init(); await stateService.init();

View File

@ -1,7 +1,6 @@
import { Component } from "@angular/core"; import { Component } from "@angular/core";
import { AddEditCustomFieldsComponent as BaseAddEditCustomFieldsComponent } from "jslib-angular/components/add-edit-custom-fields.component"; import { AddEditCustomFieldsComponent as BaseAddEditCustomFieldsComponent } from "jslib-angular/components/add-edit-custom-fields.component";
import { EventService } from "jslib-common/abstractions/event.service"; import { EventService } from "jslib-common/abstractions/event.service";
import { I18nService } from "jslib-common/abstractions/i18n.service"; import { I18nService } from "jslib-common/abstractions/i18n.service";

View File

@ -1,6 +1,7 @@
import { Component, NgZone, OnChanges, OnDestroy, ViewChild } from "@angular/core"; import { Component, NgZone, OnChanges, OnDestroy, ViewChild } from "@angular/core";
import { NgForm } from "@angular/forms"; import { NgForm } from "@angular/forms";
import { AddEditComponent as BaseAddEditComponent } from "jslib-angular/components/add-edit.component";
import { AuditService } from "jslib-common/abstractions/audit.service"; import { AuditService } from "jslib-common/abstractions/audit.service";
import { BroadcasterService } from "jslib-common/abstractions/broadcaster.service"; import { BroadcasterService } from "jslib-common/abstractions/broadcaster.service";
import { CipherService } from "jslib-common/abstractions/cipher.service"; import { CipherService } from "jslib-common/abstractions/cipher.service";
@ -16,8 +17,6 @@ import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.se
import { PolicyService } from "jslib-common/abstractions/policy.service"; import { PolicyService } from "jslib-common/abstractions/policy.service";
import { StateService } from "jslib-common/abstractions/state.service"; import { StateService } from "jslib-common/abstractions/state.service";
import { AddEditComponent as BaseAddEditComponent } from "jslib-angular/components/add-edit.component";
const BroadcasterSubscriptionId = "AddEditComponent"; const BroadcasterSubscriptionId = "AddEditComponent";
@Component({ @Component({

View File

@ -1,5 +1,6 @@
import { Component } from "@angular/core"; import { Component } from "@angular/core";
import { AttachmentsComponent as BaseAttachmentsComponent } from "jslib-angular/components/attachments.component";
import { ApiService } from "jslib-common/abstractions/api.service"; import { ApiService } from "jslib-common/abstractions/api.service";
import { CipherService } from "jslib-common/abstractions/cipher.service"; import { CipherService } from "jslib-common/abstractions/cipher.service";
import { CryptoService } from "jslib-common/abstractions/crypto.service"; import { CryptoService } from "jslib-common/abstractions/crypto.service";
@ -8,8 +9,6 @@ import { LogService } from "jslib-common/abstractions/log.service";
import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service";
import { StateService } from "jslib-common/abstractions/state.service"; import { StateService } from "jslib-common/abstractions/state.service";
import { AttachmentsComponent as BaseAttachmentsComponent } from "jslib-angular/components/attachments.component";
@Component({ @Component({
selector: "app-vault-attachments", selector: "app-vault-attachments",
templateUrl: "attachments.component.html", templateUrl: "attachments.component.html",

View File

@ -2,7 +2,6 @@ import { Component } from "@angular/core";
import { CiphersComponent as BaseCiphersComponent } from "jslib-angular/components/ciphers.component"; import { CiphersComponent as BaseCiphersComponent } from "jslib-angular/components/ciphers.component";
import { SearchService } from "jslib-common/abstractions/search.service"; import { SearchService } from "jslib-common/abstractions/search.service";
import { CipherView } from "jslib-common/models/view/cipherView"; import { CipherView } from "jslib-common/models/view/cipherView";
import { SearchBarService } from "../layout/search/search-bar.service"; import { SearchBarService } from "../layout/search/search-bar.service";

View File

@ -1,13 +1,12 @@
import { Component } from "@angular/core"; import { Component } from "@angular/core";
import { CollectionsComponent as BaseCollectionsComponent } from "jslib-angular/components/collections.component";
import { CipherService } from "jslib-common/abstractions/cipher.service"; import { CipherService } from "jslib-common/abstractions/cipher.service";
import { CollectionService } from "jslib-common/abstractions/collection.service"; import { CollectionService } from "jslib-common/abstractions/collection.service";
import { I18nService } from "jslib-common/abstractions/i18n.service"; import { I18nService } from "jslib-common/abstractions/i18n.service";
import { LogService } from "jslib-common/abstractions/log.service"; import { LogService } from "jslib-common/abstractions/log.service";
import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service";
import { CollectionsComponent as BaseCollectionsComponent } from "jslib-angular/components/collections.component";
@Component({ @Component({
selector: "app-vault-collections", selector: "app-vault-collections",
templateUrl: "collections.component.html", templateUrl: "collections.component.html",

View File

@ -1,8 +1,9 @@
import * as os from "os";
import { Component, OnInit } from "@angular/core"; import { Component, OnInit } from "@angular/core";
import { FormBuilder } from "@angular/forms"; import { FormBuilder } from "@angular/forms";
import * as os from "os"; import { ExportComponent as BaseExportComponent } from "jslib-angular/components/export.component";
import { BroadcasterService } from "jslib-common/abstractions/broadcaster.service"; import { BroadcasterService } from "jslib-common/abstractions/broadcaster.service";
import { CryptoService } from "jslib-common/abstractions/crypto.service"; import { CryptoService } from "jslib-common/abstractions/crypto.service";
import { EventService } from "jslib-common/abstractions/event.service"; import { EventService } from "jslib-common/abstractions/event.service";
@ -13,8 +14,6 @@ import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.se
import { PolicyService } from "jslib-common/abstractions/policy.service"; import { PolicyService } from "jslib-common/abstractions/policy.service";
import { UserVerificationService } from "jslib-common/abstractions/userVerification.service"; import { UserVerificationService } from "jslib-common/abstractions/userVerification.service";
import { ExportComponent as BaseExportComponent } from "jslib-angular/components/export.component";
const BroadcasterSubscriptionId = "ExportComponent"; const BroadcasterSubscriptionId = "ExportComponent";
@Component({ @Component({

View File

@ -1,12 +1,11 @@
import { Component } from "@angular/core"; import { Component } from "@angular/core";
import { FolderAddEditComponent as BaseFolderAddEditComponent } from "jslib-angular/components/folder-add-edit.component";
import { FolderService } from "jslib-common/abstractions/folder.service"; import { FolderService } from "jslib-common/abstractions/folder.service";
import { I18nService } from "jslib-common/abstractions/i18n.service"; import { I18nService } from "jslib-common/abstractions/i18n.service";
import { LogService } from "jslib-common/abstractions/log.service"; import { LogService } from "jslib-common/abstractions/log.service";
import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service";
import { FolderAddEditComponent as BaseFolderAddEditComponent } from "jslib-angular/components/folder-add-edit.component";
@Component({ @Component({
selector: "app-folder-add-edit", selector: "app-folder-add-edit",
templateUrl: "folder-add-edit.component.html", templateUrl: "folder-add-edit.component.html",

View File

@ -1,11 +1,10 @@
import { Component } from "@angular/core"; import { Component } from "@angular/core";
import { GroupingsComponent as BaseGroupingsComponent } from "jslib-angular/components/groupings.component";
import { CollectionService } from "jslib-common/abstractions/collection.service"; import { CollectionService } from "jslib-common/abstractions/collection.service";
import { FolderService } from "jslib-common/abstractions/folder.service"; import { FolderService } from "jslib-common/abstractions/folder.service";
import { StateService } from "jslib-common/abstractions/state.service"; import { StateService } from "jslib-common/abstractions/state.service";
import { GroupingsComponent as BaseGroupingsComponent } from "jslib-angular/components/groupings.component";
@Component({ @Component({
selector: "app-vault-groupings", selector: "app-vault-groupings",
templateUrl: "groupings.component.html", templateUrl: "groupings.component.html",

View File

@ -1,11 +1,10 @@
import { Component } from "@angular/core"; import { Component } from "@angular/core";
import { PasswordGeneratorHistoryComponent as BasePasswordGeneratorHistoryComponent } from "jslib-angular/components/password-generator-history.component";
import { I18nService } from "jslib-common/abstractions/i18n.service"; import { I18nService } from "jslib-common/abstractions/i18n.service";
import { PasswordGenerationService } from "jslib-common/abstractions/passwordGeneration.service"; import { PasswordGenerationService } from "jslib-common/abstractions/passwordGeneration.service";
import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service";
import { PasswordGeneratorHistoryComponent as BasePasswordGeneratorHistoryComponent } from "jslib-angular/components/password-generator-history.component";
@Component({ @Component({
selector: "app-password-generator-history", selector: "app-password-generator-history",
templateUrl: "password-generator-history.component.html", templateUrl: "password-generator-history.component.html",

View File

@ -1,11 +1,10 @@
import { Component } from "@angular/core"; import { Component } from "@angular/core";
import { PasswordGeneratorComponent as BasePasswordGeneratorComponent } from "jslib-angular/components/password-generator.component";
import { I18nService } from "jslib-common/abstractions/i18n.service"; import { I18nService } from "jslib-common/abstractions/i18n.service";
import { PasswordGenerationService } from "jslib-common/abstractions/passwordGeneration.service"; import { PasswordGenerationService } from "jslib-common/abstractions/passwordGeneration.service";
import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service";
import { PasswordGeneratorComponent as BasePasswordGeneratorComponent } from "jslib-angular/components/password-generator.component";
@Component({ @Component({
selector: "app-password-generator", selector: "app-password-generator",
templateUrl: "password-generator.component.html", templateUrl: "password-generator.component.html",

View File

@ -1,11 +1,10 @@
import { Component } from "@angular/core"; import { Component } from "@angular/core";
import { PasswordHistoryComponent as BasePasswordHistoryComponent } from "jslib-angular/components/password-history.component";
import { CipherService } from "jslib-common/abstractions/cipher.service"; import { CipherService } from "jslib-common/abstractions/cipher.service";
import { I18nService } from "jslib-common/abstractions/i18n.service"; import { I18nService } from "jslib-common/abstractions/i18n.service";
import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service";
import { PasswordHistoryComponent as BasePasswordHistoryComponent } from "jslib-angular/components/password-history.component";
@Component({ @Component({
selector: "app-password-history", selector: "app-password-history",
templateUrl: "password-history.component.html", templateUrl: "password-history.component.html",

View File

@ -1,5 +1,6 @@
import { Component } from "@angular/core"; import { Component } from "@angular/core";
import { ShareComponent as BaseShareComponent } from "jslib-angular/components/share.component";
import { CipherService } from "jslib-common/abstractions/cipher.service"; import { CipherService } from "jslib-common/abstractions/cipher.service";
import { CollectionService } from "jslib-common/abstractions/collection.service"; import { CollectionService } from "jslib-common/abstractions/collection.service";
import { I18nService } from "jslib-common/abstractions/i18n.service"; import { I18nService } from "jslib-common/abstractions/i18n.service";
@ -7,8 +8,6 @@ import { LogService } from "jslib-common/abstractions/log.service";
import { OrganizationService } from "jslib-common/abstractions/organization.service"; import { OrganizationService } from "jslib-common/abstractions/organization.service";
import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service";
import { ShareComponent as BaseShareComponent } from "jslib-angular/components/share.component";
@Component({ @Component({
selector: "app-vault-share", selector: "app-vault-share",
templateUrl: "share.component.html", templateUrl: "share.component.html",

View File

@ -8,10 +8,28 @@ import {
ViewContainerRef, ViewContainerRef,
} from "@angular/core"; } from "@angular/core";
import { ActivatedRoute, Router } from "@angular/router"; import { ActivatedRoute, Router } from "@angular/router";
import { first } from "rxjs/operators"; import { first } from "rxjs/operators";
import { ModalRef } from "jslib-angular/components/modal/modal.ref";
import { ModalService } from "jslib-angular/services/modal.service";
import { BroadcasterService } from "jslib-common/abstractions/broadcaster.service";
import { EventService } from "jslib-common/abstractions/event.service";
import { I18nService } from "jslib-common/abstractions/i18n.service";
import { MessagingService } from "jslib-common/abstractions/messaging.service";
import { PasswordRepromptService } from "jslib-common/abstractions/passwordReprompt.service";
import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service";
import { StateService } from "jslib-common/abstractions/state.service";
import { SyncService } from "jslib-common/abstractions/sync.service";
import { TotpService } from "jslib-common/abstractions/totp.service";
import { CipherRepromptType } from "jslib-common/enums/cipherRepromptType";
import { CipherType } from "jslib-common/enums/cipherType";
import { EventType } from "jslib-common/enums/eventType";
import { CipherView } from "jslib-common/models/view/cipherView";
import { FolderView } from "jslib-common/models/view/folderView";
import { invokeMenu, RendererMenuItem } from "jslib-electron/utils";
import { SearchBarService } from "../layout/search/search-bar.service"; import { SearchBarService } from "../layout/search/search-bar.service";
import { AddEditComponent } from "./add-edit.component"; import { AddEditComponent } from "./add-edit.component";
import { AttachmentsComponent } from "./attachments.component"; import { AttachmentsComponent } from "./attachments.component";
import { CiphersComponent } from "./ciphers.component"; import { CiphersComponent } from "./ciphers.component";
@ -23,29 +41,6 @@ import { PasswordHistoryComponent } from "./password-history.component";
import { ShareComponent } from "./share.component"; import { ShareComponent } from "./share.component";
import { ViewComponent } from "./view.component"; import { ViewComponent } from "./view.component";
import { CipherRepromptType } from "jslib-common/enums/cipherRepromptType";
import { CipherType } from "jslib-common/enums/cipherType";
import { EventType } from "jslib-common/enums/eventType";
import { CipherView } from "jslib-common/models/view/cipherView";
import { FolderView } from "jslib-common/models/view/folderView";
import { ModalRef } from "jslib-angular/components/modal/modal.ref";
import { ModalService } from "jslib-angular/services/modal.service";
import { BroadcasterService } from "jslib-common/abstractions/broadcaster.service";
import { EventService } from "jslib-common/abstractions/event.service";
import { I18nService } from "jslib-common/abstractions/i18n.service";
import { MessagingService } from "jslib-common/abstractions/messaging.service";
import { PasswordRepromptService } from "jslib-common/abstractions/passwordReprompt.service";
import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service";
import { StateService } from "jslib-common/abstractions/state.service";
import { SyncService } from "jslib-common/abstractions/sync.service";
import { TotpService } from "jslib-common/abstractions/totp.service";
import { invokeMenu, RendererMenuItem } from "jslib-electron/utils";
const BroadcasterSubscriptionId = "VaultComponent"; const BroadcasterSubscriptionId = "VaultComponent";
@Component({ @Component({
@ -71,7 +66,7 @@ export class VaultComponent implements OnInit, OnDestroy {
action: string; action: string;
cipherId: string = null; cipherId: string = null;
favorites: boolean = false; favorites = false;
type: CipherType = null; type: CipherType = null;
folderId: string = null; folderId: string = null;
collectionId: string = null; collectionId: string = null;
@ -140,7 +135,7 @@ export class VaultComponent implements OnInit, OnDestroy {
case "modalClosed": case "modalClosed":
this.showingModal = false; this.showingModal = false;
break; break;
case "copyUsername": case "copyUsername": {
const uComponent = const uComponent =
this.addEditComponent == null ? this.viewComponent : this.addEditComponent; this.addEditComponent == null ? this.viewComponent : this.addEditComponent;
const uCipher = uComponent != null ? uComponent.cipher : null; const uCipher = uComponent != null ? uComponent.cipher : null;
@ -154,7 +149,8 @@ export class VaultComponent implements OnInit, OnDestroy {
this.copyValue(uCipher, uCipher.login.username, "username", "Username"); this.copyValue(uCipher, uCipher.login.username, "username", "Username");
} }
break; break;
case "copyPassword": }
case "copyPassword": {
const pComponent = const pComponent =
this.addEditComponent == null ? this.viewComponent : this.addEditComponent; this.addEditComponent == null ? this.viewComponent : this.addEditComponent;
const pCipher = pComponent != null ? pComponent.cipher : null; const pCipher = pComponent != null ? pComponent.cipher : null;
@ -169,7 +165,8 @@ export class VaultComponent implements OnInit, OnDestroy {
this.copyValue(pCipher, pCipher.login.password, "password", "Password"); this.copyValue(pCipher, pCipher.login.password, "password", "Password");
} }
break; break;
case "copyTotp": }
case "copyTotp": {
const tComponent = const tComponent =
this.addEditComponent == null ? this.viewComponent : this.addEditComponent; this.addEditComponent == null ? this.viewComponent : this.addEditComponent;
const tCipher = tComponent != null ? tComponent.cipher : null; const tCipher = tComponent != null ? tComponent.cipher : null;
@ -184,6 +181,8 @@ export class VaultComponent implements OnInit, OnDestroy {
const value = await this.totpService.getCode(tCipher.login.totp); const value = await this.totpService.getCode(tCipher.login.totp);
this.copyValue(tCipher, value, "verificationCodeTotp", "TOTP"); this.copyValue(tCipher, value, "verificationCodeTotp", "TOTP");
} }
break;
}
default: default:
detectChanges = false; detectChanges = false;
break; break;
@ -735,7 +734,7 @@ export class VaultComponent implements OnInit, OnDestroy {
}); });
} }
private functionWithChangeDetection(func: Function) { private functionWithChangeDetection(func: () => void) {
this.ngZone.run(() => { this.ngZone.run(() => {
func(); func();
this.changeDetectorRef.detectChanges(); this.changeDetectorRef.detectChanges();

View File

@ -1,8 +1,7 @@
import { Component } from "@angular/core"; import { Component } from "@angular/core";
import { EventService } from "jslib-common/abstractions/event.service";
import { ViewCustomFieldsComponent as BaseViewCustomFieldsComponent } from "jslib-angular/components/view-custom-fields.component"; import { ViewCustomFieldsComponent as BaseViewCustomFieldsComponent } from "jslib-angular/components/view-custom-fields.component";
import { EventService } from "jslib-common/abstractions/event.service";
@Component({ @Component({
selector: "app-vault-view-custom-fields", selector: "app-vault-view-custom-fields",

View File

@ -7,6 +7,7 @@ import {
Output, Output,
} from "@angular/core"; } from "@angular/core";
import { ViewComponent as BaseViewComponent } from "jslib-angular/components/view.component";
import { ApiService } from "jslib-common/abstractions/api.service"; import { ApiService } from "jslib-common/abstractions/api.service";
import { AuditService } from "jslib-common/abstractions/audit.service"; import { AuditService } from "jslib-common/abstractions/audit.service";
import { BroadcasterService } from "jslib-common/abstractions/broadcaster.service"; import { BroadcasterService } from "jslib-common/abstractions/broadcaster.service";
@ -21,9 +22,6 @@ import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.se
import { StateService } from "jslib-common/abstractions/state.service"; import { StateService } from "jslib-common/abstractions/state.service";
import { TokenService } from "jslib-common/abstractions/token.service"; import { TokenService } from "jslib-common/abstractions/token.service";
import { TotpService } from "jslib-common/abstractions/totp.service"; import { TotpService } from "jslib-common/abstractions/totp.service";
import { ViewComponent as BaseViewComponent } from "jslib-angular/components/view.component";
import { CipherView } from "jslib-common/models/view/cipherView"; import { CipherView } from "jslib-common/models/view/cipherView";
const BroadcasterSubscriptionId = "ViewComponent"; const BroadcasterSubscriptionId = "ViewComponent";

View File

@ -10,7 +10,7 @@ if (
process.argv.some((arg) => arg.indexOf("chrome-extension://") !== -1 || arg.indexOf("{") !== -1) process.argv.some((arg) => arg.indexOf("chrome-extension://") !== -1 || arg.indexOf("{") !== -1)
) { ) {
if (process.platform === "darwin") { if (process.platform === "darwin") {
// tslint:disable-next-line // eslint-disable-next-line
const app = require("electron").app; const app = require("electron").app;
app.on("ready", () => { app.on("ready", () => {
@ -27,7 +27,7 @@ if (
const proxy = new NativeMessagingProxy(); const proxy = new NativeMessagingProxy();
proxy.run(); proxy.run();
} else { } else {
// tslint:disable-next-line // eslint-disable-next-line
const Main = require("./main").Main; const Main = require("./main").Main;
const main = new Main(); const main = new Main();

View File

@ -1,32 +1,25 @@
import { app } from "electron";
import * as path from "path"; import * as path from "path";
import { I18nService } from "./services/i18n.service"; import { app } from "electron";
import { MenuMain } from "./main/menu.main";
import { MessagingMain } from "./main/messaging.main";
import { PowerMonitorMain } from "./main/powerMonitor.main";
import { BiometricMain } from "jslib-common/abstractions/biometric.main"; import { BiometricMain } from "jslib-common/abstractions/biometric.main";
import { StateFactory } from "jslib-common/factories/stateFactory";
import { GlobalState } from "jslib-common/models/domain/globalState";
import { StateService } from "jslib-common/services/state.service";
import { KeytarStorageListener } from "jslib-electron/keytarStorageListener"; import { KeytarStorageListener } from "jslib-electron/keytarStorageListener";
import { ElectronLogService } from "jslib-electron/services/electronLog.service"; import { ElectronLogService } from "jslib-electron/services/electronLog.service";
import { ElectronMainMessagingService } from "jslib-electron/services/electronMainMessaging.service"; import { ElectronMainMessagingService } from "jslib-electron/services/electronMainMessaging.service";
import { ElectronStorageService } from "jslib-electron/services/electronStorage.service"; import { ElectronStorageService } from "jslib-electron/services/electronStorage.service";
import { TrayMain } from "jslib-electron/tray.main"; import { TrayMain } from "jslib-electron/tray.main";
import { UpdaterMain } from "jslib-electron/updater.main"; import { UpdaterMain } from "jslib-electron/updater.main";
import { WindowMain } from "jslib-electron/window.main"; import { WindowMain } from "jslib-electron/window.main";
import { MenuMain } from "./main/menu.main";
import { MessagingMain } from "./main/messaging.main";
import { NativeMessagingMain } from "./main/nativeMessaging.main"; import { NativeMessagingMain } from "./main/nativeMessaging.main";
import { PowerMonitorMain } from "./main/powerMonitor.main";
import { StateService } from "jslib-common/services/state.service";
import { Account } from "./models/account"; import { Account } from "./models/account";
import { I18nService } from "./services/i18n.service";
import { GlobalState } from "jslib-common/models/domain/globalState";
import { StateFactory } from "jslib-common/factories/stateFactory";
export class Main { export class Main {
logService: ElectronLogService; logService: ElectronLogService;
@ -69,7 +62,7 @@ export class Main {
const watch = args.some((val) => val === "--watch"); const watch = args.some((val) => val === "--watch");
if (watch) { if (watch) {
// tslint:disable-next-line // eslint-disable-next-line
require("electron-reload")(__dirname, {}); require("electron-reload")(__dirname, {});
} }
@ -121,6 +114,7 @@ export class Main {
}); });
if (process.platform === "win32") { if (process.platform === "win32") {
// eslint-disable-next-line
const BiometricWindowsMain = require("jslib-electron/biometric.windows.main").default; const BiometricWindowsMain = require("jslib-electron/biometric.windows.main").default;
this.biometricMain = new BiometricWindowsMain( this.biometricMain = new BiometricWindowsMain(
this.i18nService, this.i18nService,
@ -129,6 +123,7 @@ export class Main {
this.logService this.logService
); );
} else if (process.platform === "darwin") { } else if (process.platform === "darwin") {
// eslint-disable-next-line
const BiometricDarwinMain = require("jslib-electron/biometric.darwin.main").default; const BiometricDarwinMain = require("jslib-electron/biometric.darwin.main").default;
this.biometricMain = new BiometricDarwinMain(this.i18nService, this.stateService); this.biometricMain = new BiometricDarwinMain(this.i18nService, this.stateService);
} }
@ -198,7 +193,7 @@ export class Main {
}); });
}, },
(e: any) => { (e: any) => {
// tslint:disable-next-line // eslint-disable-next-line
console.error(e); console.error(e);
} }
); );

View File

@ -1,7 +1,6 @@
import { BrowserWindow, clipboard, dialog, MenuItemConstructorOptions } from "electron"; import { BrowserWindow, clipboard, dialog, MenuItemConstructorOptions } from "electron";
import { I18nService } from "jslib-common/abstractions/i18n.service"; import { I18nService } from "jslib-common/abstractions/i18n.service";
import { UpdaterMain } from "jslib-electron/updater.main"; import { UpdaterMain } from "jslib-electron/updater.main";
import { isSnapStore, isWindowsStore } from "jslib-electron/utils"; import { isSnapStore, isWindowsStore } from "jslib-electron/utils";

View File

@ -2,7 +2,6 @@ import { BrowserWindow, dialog, MenuItemConstructorOptions, shell } from "electr
import { I18nService } from "jslib-common/abstractions/i18n.service"; import { I18nService } from "jslib-common/abstractions/i18n.service";
import { MessagingService } from "jslib-common/abstractions/messaging.service"; import { MessagingService } from "jslib-common/abstractions/messaging.service";
import { isMacAppStore, isWindowsStore } from "jslib-electron/utils"; import { isMacAppStore, isWindowsStore } from "jslib-electron/utils";
import { IMenubarMenu } from "./menubar"; import { IMenubarMenu } from "./menubar";

View File

@ -2,14 +2,12 @@ import { BrowserWindow, MenuItemConstructorOptions } from "electron";
import { I18nService } from "jslib-common/abstractions/i18n.service"; import { I18nService } from "jslib-common/abstractions/i18n.service";
import { MessagingService } from "jslib-common/abstractions/messaging.service"; import { MessagingService } from "jslib-common/abstractions/messaging.service";
import { UpdaterMain } from "jslib-electron/updater.main"; import { UpdaterMain } from "jslib-electron/updater.main";
import { isMac } from "jslib-electron/utils"; import { isMac } from "jslib-electron/utils";
import { IMenubarMenu } from "./menubar";
import { FirstMenu } from "./menu.first"; import { FirstMenu } from "./menu.first";
import { MenuAccount } from "./menu.updater"; import { MenuAccount } from "./menu.updater";
import { IMenubarMenu } from "./menubar";
// AKA: "FirstMenu" or "MacMenu" - the first menu that shows on all macOs apps // AKA: "FirstMenu" or "MacMenu" - the first menu that shows on all macOs apps
export class BitwardenMenu extends FirstMenu implements IMenubarMenu { export class BitwardenMenu extends FirstMenu implements IMenubarMenu {

View File

@ -1,10 +1,10 @@
import { MenuItemConstructorOptions } from "electron";
import { I18nService } from "jslib-common/abstractions/i18n.service"; import { I18nService } from "jslib-common/abstractions/i18n.service";
import { MessagingService } from "jslib-common/abstractions/messaging.service"; import { MessagingService } from "jslib-common/abstractions/messaging.service";
import { IMenubarMenu } from "./menubar"; import { IMenubarMenu } from "./menubar";
import { MenuItemConstructorOptions } from "electron";
export class EditMenu implements IMenubarMenu { export class EditMenu implements IMenubarMenu {
readonly id: string = "editMenu"; readonly id: string = "editMenu";

View File

@ -2,14 +2,12 @@ import { BrowserWindow, MenuItemConstructorOptions } from "electron";
import { I18nService } from "jslib-common/abstractions/i18n.service"; import { I18nService } from "jslib-common/abstractions/i18n.service";
import { MessagingService } from "jslib-common/abstractions/messaging.service"; import { MessagingService } from "jslib-common/abstractions/messaging.service";
import { UpdaterMain } from "jslib-electron/updater.main";
import { IMenubarMenu } from "./menubar"; import { isMac, isMacAppStore } from "jslib-electron/utils";
import { FirstMenu } from "./menu.first"; import { FirstMenu } from "./menu.first";
import { MenuAccount } from "./menu.updater"; import { MenuAccount } from "./menu.updater";
import { IMenubarMenu } from "./menubar";
import { UpdaterMain } from "jslib-electron/updater.main";
import { isMac, isMacAppStore } from "jslib-electron/utils";
export class FileMenu extends FirstMenu implements IMenubarMenu { export class FileMenu extends FirstMenu implements IMenubarMenu {
readonly id: string = "fileMenu"; readonly id: string = "fileMenu";

View File

@ -2,7 +2,6 @@ import { BrowserWindow, dialog, MenuItem, MenuItemConstructorOptions } from "ele
import { I18nService } from "jslib-common/abstractions/i18n.service"; import { I18nService } from "jslib-common/abstractions/i18n.service";
import { MessagingService } from "jslib-common/abstractions/messaging.service"; import { MessagingService } from "jslib-common/abstractions/messaging.service";
import { UpdaterMain } from "jslib-electron/updater.main"; import { UpdaterMain } from "jslib-electron/updater.main";
import { isMacAppStore, isSnapStore, isWindowsStore } from "jslib-electron/utils"; import { isMacAppStore, isSnapStore, isWindowsStore } from "jslib-electron/utils";

View File

@ -1,12 +1,10 @@
import { shell, MenuItemConstructorOptions } from "electron";
import { I18nService } from "jslib-common/abstractions/i18n.service"; import { I18nService } from "jslib-common/abstractions/i18n.service";
import { IMenubarMenu } from "./menubar";
import { shell } from "electron";
import { isMacAppStore, isWindowsStore } from "jslib-electron/utils"; import { isMacAppStore, isWindowsStore } from "jslib-electron/utils";
import { MenuItemConstructorOptions } from "electron";
import { AboutMenu } from "./menu.about"; import { AboutMenu } from "./menu.about";
import { IMenubarMenu } from "./menubar";
export class HelpMenu implements IMenubarMenu { export class HelpMenu implements IMenubarMenu {
readonly id: string = "help"; readonly id: string = "help";

View File

@ -1,13 +1,13 @@
import { app, Menu } from "electron"; import { app, Menu } from "electron";
import { Main } from "../main";
import { BaseMenu } from "jslib-electron/baseMenu"; import { BaseMenu } from "jslib-electron/baseMenu";
import { Main } from "../main";
import { MenuUpdateRequest } from "./menu.updater"; import { MenuUpdateRequest } from "./menu.updater";
import { Menubar } from "./menubar"; import { Menubar } from "./menubar";
const cloudWebVaultUrl: string = "https://vault.bitwarden.com"; const cloudWebVaultUrl = "https://vault.bitwarden.com";
export class MenuMain extends BaseMenu { export class MenuMain extends BaseMenu {
constructor(private main: Main) { constructor(private main: Main) {

View File

@ -1,10 +1,10 @@
import { MenuItemConstructorOptions } from "electron";
import { I18nService } from "jslib-common/abstractions/i18n.service"; import { I18nService } from "jslib-common/abstractions/i18n.service";
import { MessagingService } from "jslib-common/abstractions/messaging.service"; import { MessagingService } from "jslib-common/abstractions/messaging.service";
import { IMenubarMenu } from "./menubar"; import { IMenubarMenu } from "./menubar";
import { MenuItemConstructorOptions } from "electron";
export class ViewMenu implements IMenubarMenu { export class ViewMenu implements IMenubarMenu {
readonly id: "viewMenu"; readonly id: "viewMenu";

View File

@ -1,13 +1,12 @@
import { MenuItemConstructorOptions } from "electron";
import { I18nService } from "jslib-common/abstractions/i18n.service"; import { I18nService } from "jslib-common/abstractions/i18n.service";
import { MessagingService } from "jslib-common/abstractions/messaging.service"; import { MessagingService } from "jslib-common/abstractions/messaging.service";
import { isMac } from "jslib-electron/utils"; import { isMac } from "jslib-electron/utils";
import { WindowMain } from "jslib-electron/window.main"; import { WindowMain } from "jslib-electron/window.main";
import { IMenubarMenu } from "./menubar"; import { IMenubarMenu } from "./menubar";
import { MenuItemConstructorOptions } from "electron";
export class WindowMenu implements IMenubarMenu { export class WindowMenu implements IMenubarMenu {
readonly id: string; readonly id: string;

View File

@ -1,5 +1,11 @@
import { Menu, MenuItemConstructorOptions } from "electron"; import { Menu, MenuItemConstructorOptions } from "electron";
import { I18nService } from "jslib-common/abstractions/i18n.service";
import { MessagingService } from "jslib-common/abstractions/messaging.service";
import { UpdaterMain } from "jslib-electron/updater.main";
import { isMac } from "jslib-electron/utils";
import { WindowMain } from "jslib-electron/window.main";
import { AboutMenu } from "./menu.about"; import { AboutMenu } from "./menu.about";
import { AccountMenu } from "./menu.account"; import { AccountMenu } from "./menu.account";
import { BitwardenMenu } from "./menu.bitwarden"; import { BitwardenMenu } from "./menu.bitwarden";
@ -10,13 +16,6 @@ import { MenuUpdateRequest } from "./menu.updater";
import { ViewMenu } from "./menu.view"; import { ViewMenu } from "./menu.view";
import { WindowMenu } from "./menu.window"; import { WindowMenu } from "./menu.window";
import { I18nService } from "jslib-common/abstractions/i18n.service";
import { MessagingService } from "jslib-common/abstractions/messaging.service";
import { UpdaterMain } from "jslib-electron/updater.main";
import { isMac } from "jslib-electron/utils";
import { WindowMain } from "jslib-electron/window.main";
export interface IMenubarMenu { export interface IMenubarMenu {
id: string; id: string;
label: string; label: string;

View File

@ -1,11 +1,12 @@
import { app, ipcMain } from "electron";
import * as fs from "fs"; import * as fs from "fs";
import * as path from "path"; import * as path from "path";
import { Main } from "../main"; import { app, ipcMain } from "electron";
import { StateService } from "jslib-common/abstractions/state.service"; import { StateService } from "jslib-common/abstractions/state.service";
import { Main } from "../main";
import { MenuUpdateRequest } from "./menu.updater"; import { MenuUpdateRequest } from "./menu.updater";
const SyncInterval = 5 * 60 * 1000; // 5 minutes const SyncInterval = 5 * 60 * 1000; // 5 minutes
@ -56,6 +57,7 @@ export class MessagingMain {
break; break;
case "removeOpenAtLogin": case "removeOpenAtLogin":
this.removeOpenAtLogin(); this.removeOpenAtLogin();
break;
case "setFocus": case "setFocus":
this.setFocus(); this.setFocus();
break; break;

View File

@ -1,11 +1,12 @@
import { existsSync, promises as fs } from "fs"; import { existsSync, promises as fs } from "fs";
import { Socket } from "net"; import { Socket } from "net";
import * as ipc from "node-ipc";
import { homedir, userInfo } from "os"; import { homedir, userInfo } from "os";
import * as path from "path"; import * as path from "path";
import * as util from "util"; import * as util from "util";
import { ipcMain } from "electron"; import { ipcMain } from "electron";
import * as ipc from "node-ipc";
import { LogService } from "jslib-common/abstractions/log.service"; import { LogService } from "jslib-common/abstractions/log.service";
import { WindowMain } from "jslib-electron/window.main"; import { WindowMain } from "jslib-electron/window.main";
@ -98,7 +99,7 @@ export class NativeMessagingMain {
}; };
switch (process.platform) { switch (process.platform) {
case "win32": case "win32": {
const destination = path.join(this.userPath, "browsers"); const destination = path.join(this.userPath, "browsers");
this.writeManifest(path.join(destination, "firefox.json"), firefoxJson); this.writeManifest(path.join(destination, "firefox.json"), firefoxJson);
this.writeManifest(path.join(destination, "chrome.json"), chromeJson); this.writeManifest(path.join(destination, "chrome.json"), chromeJson);
@ -114,7 +115,8 @@ export class NativeMessagingMain {
path.join(destination, "chrome.json") path.join(destination, "chrome.json")
); );
break; break;
case "darwin": }
case "darwin": {
const nmhs = this.getDarwinNMHS(); const nmhs = this.getDarwinNMHS();
for (const [key, value] of Object.entries(nmhs)) { for (const [key, value] of Object.entries(nmhs)) {
if (existsSync(value)) { if (existsSync(value)) {
@ -133,6 +135,7 @@ export class NativeMessagingMain {
} }
} }
break; break;
}
case "linux": case "linux":
if (existsSync(`${this.homedir()}/.mozilla/`)) { if (existsSync(`${this.homedir()}/.mozilla/`)) {
this.writeManifest( this.writeManifest(
@ -172,15 +175,16 @@ export class NativeMessagingMain {
"HKCU\\SOFTWARE\\Google\\Chrome\\NativeMessagingHosts\\com.8bit.bitwarden" "HKCU\\SOFTWARE\\Google\\Chrome\\NativeMessagingHosts\\com.8bit.bitwarden"
); );
break; break;
case "darwin": case "darwin": {
const nmhs = this.getDarwinNMHS(); const nmhs = this.getDarwinNMHS();
for (const [_, value] of Object.entries(nmhs)) { for (const [, value] of Object.entries(nmhs)) {
const p = path.join(value, "NativeMessagingHosts", "com.8bit.bitwarden.json"); const p = path.join(value, "NativeMessagingHosts", "com.8bit.bitwarden.json");
if (existsSync(p)) { if (existsSync(p)) {
fs.unlink(p); fs.unlink(p);
} }
} }
break; break;
}
case "linux": case "linux":
if ( if (
existsSync(`${this.homedir()}/.mozilla/native-messaging-hosts/com.8bit.bitwarden.json`) existsSync(`${this.homedir()}/.mozilla/native-messaging-hosts/com.8bit.bitwarden.json`)
@ -214,6 +218,7 @@ export class NativeMessagingMain {
} }
private getDarwinNMHS() { private getDarwinNMHS() {
/* eslint-disable no-useless-escape */
return { return {
Firefox: `${this.homedir()}/Library/Application\ Support/Mozilla/`, Firefox: `${this.homedir()}/Library/Application\ Support/Mozilla/`,
Chrome: `${this.homedir()}/Library/Application\ Support/Google/Chrome/`, Chrome: `${this.homedir()}/Library/Application\ Support/Google/Chrome/`,
@ -227,6 +232,7 @@ export class NativeMessagingMain {
"Microsoft Edge Canary": `${this.homedir()}/Library/Application\ Support/Microsoft\ Edge\ Canary/`, "Microsoft Edge Canary": `${this.homedir()}/Library/Application\ Support/Microsoft\ Edge\ Canary/`,
Vivaldi: `${this.homedir()}/Library/Application\ Support/Vivaldi/`, Vivaldi: `${this.homedir()}/Library/Application\ Support/Vivaldi/`,
}; };
/* eslint-enable no-useless-escape */
} }
private async writeManifest(destination: string, manifest: object) { private async writeManifest(destination: string, manifest: object) {
@ -245,6 +251,7 @@ export class NativeMessagingMain {
} }
private getRegeditInstance() { private getRegeditInstance() {
// eslint-disable-next-line
const regedit = require("regedit"); const regedit = require("regedit");
regedit.setExternalVBSLocation(path.join(path.dirname(this.exePath), "resources/regedit/vbs")); regedit.setExternalVBSLocation(path.join(path.dirname(this.exePath), "resources/regedit/vbs"));

View File

@ -9,7 +9,7 @@ const IdleLockSeconds = 5 * 60; // 5 minutes
const IdleCheckInterval = 30 * 1000; // 30 seconds const IdleCheckInterval = 30 * 1000; // 30 seconds
export class PowerMonitorMain { export class PowerMonitorMain {
private idle: boolean = false; private idle = false;
constructor(private main: Main) {} constructor(private main: Main) {}

View File

@ -4,7 +4,7 @@ import {
} from "jslib-common/models/domain/account"; } from "jslib-common/models/domain/account";
export class AccountSettings extends BaseAccountSettings { export class AccountSettings extends BaseAccountSettings {
vaultTimeout: number = -1; // On Restart vaultTimeout = -1; // On Restart
} }
export class Account extends BaseAccount { export class Account extends BaseAccount {

View File

@ -1,7 +1,8 @@
/* tslint:disable:no-console */ /* eslint-disable no-console */
import * as ipc from "node-ipc";
import { homedir } from "os"; import { homedir } from "os";
import * as ipc from "node-ipc";
ipc.config.id = "proxy"; ipc.config.id = "proxy";
ipc.config.retry = 1500; ipc.config.retry = 1500;
ipc.config.logger = console.warn; // Stdout is used for native messaging ipc.config.logger = console.warn; // Stdout is used for native messaging

View File

@ -1,4 +1,4 @@
/* tslint:disable:no-console */ /* eslint-disable no-console */
import IPC from "./ipc"; import IPC from "./ipc";
// Mostly based on the example from MDN, // Mostly based on the example from MDN,

View File

@ -9,14 +9,11 @@ import { LogService } from "jslib-common/abstractions/log.service";
import { MessagingService } from "jslib-common/abstractions/messaging.service"; import { MessagingService } from "jslib-common/abstractions/messaging.service";
import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service";
import { StateService } from "jslib-common/abstractions/state.service"; import { StateService } from "jslib-common/abstractions/state.service";
import { KeySuffixOptions } from "jslib-common/enums/keySuffixOptions";
import { Utils } from "jslib-common/misc/utils"; import { Utils } from "jslib-common/misc/utils";
import { EncString } from "jslib-common/models/domain/encString"; import { EncString } from "jslib-common/models/domain/encString";
import { SymmetricCryptoKey } from "jslib-common/models/domain/symmetricCryptoKey"; import { SymmetricCryptoKey } from "jslib-common/models/domain/symmetricCryptoKey";
import { KeySuffixOptions } from "jslib-common/enums/keySuffixOptions";
const MessageValidTimeout = 10 * 1000; const MessageValidTimeout = 10 * 1000;
const EncryptionAlgorithm = "sha1"; const EncryptionAlgorithm = "sha1";
@ -122,7 +119,7 @@ export class NativeMessagingService {
} }
switch (message.command) { switch (message.command) {
case "biometricUnlock": case "biometricUnlock": {
if (!this.platformUtilService.supportsBiometric()) { if (!this.platformUtilService.supportsBiometric()) {
return this.send({ command: "biometricUnlock", response: "not supported" }, appId); return this.send({ command: "biometricUnlock", response: "not supported" }, appId);
} }
@ -154,8 +151,10 @@ export class NativeMessagingService {
} }
break; break;
}
default: default:
this.logService.error("NativeMessage, got unknown command."); this.logService.error("NativeMessage, got unknown command.");
break;
} }
} }

View File

@ -1,6 +1,7 @@
import { Injectable } from "@angular/core"; import { Injectable } from "@angular/core";
import { PasswordRepromptService as BasePasswordRepromptService } from "jslib-angular/services/passwordReprompt.service"; import { PasswordRepromptService as BasePasswordRepromptService } from "jslib-angular/services/passwordReprompt.service";
import { PasswordRepromptComponent } from "../app/components/password-reprompt.component"; import { PasswordRepromptComponent } from "../app/components/password-reprompt.component";
@Injectable() @Injectable()

View File

@ -1,11 +1,9 @@
import { StateService as StateServiceAbstraction } from "jslib-common/abstractions/state.service";
import { GlobalState } from "jslib-common/models/domain/globalState";
import { StateService as BaseStateService } from "jslib-common/services/state.service"; import { StateService as BaseStateService } from "jslib-common/services/state.service";
import { Account } from "../models/account"; import { Account } from "../models/account";
import { StateService as StateServiceAbstraction } from "jslib-common/abstractions/state.service";
import { GlobalState } from "jslib-common/models/domain/globalState";
export class StateService export class StateService
extends BaseStateService<GlobalState, Account> extends BaseStateService<GlobalState, Account>
implements StateServiceAbstraction implements StateServiceAbstraction

View File

@ -1,67 +0,0 @@
{
"extends": "tslint:recommended",
"rules": {
"align": [true, "statements", "members"],
"ban-types": {
"options": [
["Object", "Avoid using the `Object` type. Did you mean `object`?"],
["Boolean", "Avoid using the `Boolean` type. Did you mean `boolean`?"],
["Number", "Avoid using the `Number` type. Did you mean `number`?"],
["String", "Avoid using the `String` type. Did you mean `string`?"],
["Symbol", "Avoid using the `Symbol` type. Did you mean `symbol`?"]
]
},
"member-access": [true, "no-public"],
"member-ordering": [
true,
{
"order": [
"public-static-field",
"public-static-method",
"protected-static-field",
"protected-static-method",
"private-static-field",
"private-static-method",
"public-instance-field",
"protected-instance-field",
"private-instance-field",
"public-constructor",
"protected-constructor",
"private-constructor",
"public-instance-method",
"protected-instance-method",
"private-instance-method"
]
}
],
"no-empty": [true],
"object-literal-sort-keys": false,
"object-literal-shorthand": [true, "never"],
"prefer-for-of": false,
"whitespace": [
true,
"check-branch",
"check-decl",
"check-module",
"check-operator",
"check-preblock",
"check-separator",
"check-type"
],
"max-classes-per-file": false,
"ordered-imports": true,
"arrow-parens": [true],
"trailing-comma": [
true,
{
"multiline": {
"objects": "always",
"arrays": "always",
"functions": "ignore",
"typeLiterals": "ignore"
},
"singleline": "never"
}
]
}
}

View File

@ -9,11 +9,6 @@ const NODE_ENV = process.env.NODE_ENV == null ? "development" : process.env.NODE
const common = { const common = {
module: { module: {
rules: [ rules: [
{
test: /\.ts$/,
enforce: "pre",
loader: "tslint-loader",
},
{ {
test: /\.tsx?$/, test: /\.tsx?$/,
use: "ts-loader", use: "ts-loader",

View File

@ -8,11 +8,6 @@ const { AngularWebpackPlugin } = require("@ngtools/webpack");
const common = { const common = {
module: { module: {
rules: [ rules: [
{
test: /\.ts$/,
enforce: "pre",
loader: "tslint-loader",
},
{ {
test: /(?:\.ngfactory\.js|\.ngstyle\.js|\.ts)$/, test: /(?:\.ngfactory\.js|\.ngstyle\.js|\.ts)$/,
loader: "@ngtools/webpack", loader: "@ngtools/webpack",