From da783995676269a427135082f08f105c8d2cbbf0 Mon Sep 17 00:00:00 2001 From: Baptiste Grob <60621355+baptiste-grob@users.noreply.github.com> Date: Tue, 25 Aug 2020 16:56:32 +0200 Subject: [PATCH] style: rename platform to bridge (#452) * style: rename platform to bridge * chore: tsc --- app/assets/javascripts/app.ts | 12 ++++++------ .../javascripts/services/{platform.ts => bridge.ts} | 8 ++++---- app/assets/javascripts/ui_models/application.ts | 8 ++++---- .../javascripts/ui_models/application_group.ts | 6 +++--- .../{interface.ts => web_device_interface.ts} | 10 +++++----- .../app/assets/javascripts/services/bridge.d.ts | 11 +++++++++++ .../assets/javascripts/ui_models/application.d.ts | 4 ++-- .../javascripts/ui_models/application_group.d.ts | 6 +++--- .../javascripts/views/abstract/pure_view_ctrl.d.ts | 3 ++- .../app/assets/javascripts/web_device_interface.d.ts | 6 ++++-- webpack.config.js | 2 +- 11 files changed, 45 insertions(+), 31 deletions(-) rename app/assets/javascripts/services/{platform.ts => bridge.ts} (77%) rename app/assets/javascripts/{interface.ts => web_device_interface.ts} (91%) create mode 100644 dist/@types/app/assets/javascripts/services/bridge.d.ts diff --git a/app/assets/javascripts/app.ts b/app/assets/javascripts/app.ts index 00924ffdb..9f9b662de 100644 --- a/app/assets/javascripts/app.ts +++ b/app/assets/javascripts/app.ts @@ -1,7 +1,7 @@ 'use strict'; declare const __VERSION__: string; -declare const __PLATFORM_WEB__: boolean; +declare const __WEB__: boolean; import angular from 'angular'; import { configRoutes } from './routes'; @@ -51,22 +51,22 @@ import { import { trusted } from './filters'; import { isDev } from './utils'; -import { Platform, WebPlatform } from './services/platform'; +import { Bridge, BrowserBridge } from './services/bridge'; -if (__PLATFORM_WEB__) { - startApplication(new WebPlatform()); +if (__WEB__) { + startApplication(new BrowserBridge()); } else { (window as any).startApplication = startApplication; } -function startApplication(platform: Platform) { +function startApplication(bridge: Bridge) { angular.module('app', ['ngSanitize']); // Config angular .module('app') .config(configRoutes) - .constant('platform', platform) + .constant('bridge', bridge) .constant('appVersion', __VERSION__); // Controllers diff --git a/app/assets/javascripts/services/platform.ts b/app/assets/javascripts/services/bridge.ts similarity index 77% rename from app/assets/javascripts/services/platform.ts rename to app/assets/javascripts/services/bridge.ts index 424749dc5..5b67e3a95 100644 --- a/app/assets/javascripts/services/platform.ts +++ b/app/assets/javascripts/services/bridge.ts @@ -1,5 +1,5 @@ -/** Platform-specific (i-e desktop/web) behavior is handled by a Platform object. */ -export interface Platform { +/** Platform-specific (i-e Electron/browser) behavior is handled by a Bridge object. */ +export interface Bridge { getKeychainValue(): Promise; setKeychainValue(value: any): Promise; clearKeychainValue(): Promise; @@ -7,7 +7,7 @@ export interface Platform { const KEYCHAIN_STORAGE_KEY = 'keychain'; -export class WebPlatform implements Platform { +export class BrowserBridge implements Bridge { async getKeychainValue(): Promise { const value = localStorage.getItem(KEYCHAIN_STORAGE_KEY); if (value) { @@ -21,4 +21,4 @@ export class WebPlatform implements Platform { async clearKeychainValue(): Promise { localStorage.removeItem(KEYCHAIN_STORAGE_KEY); } -} \ No newline at end of file +} diff --git a/app/assets/javascripts/ui_models/application.ts b/app/assets/javascripts/ui_models/application.ts index d60411b5b..f67b9fdd2 100644 --- a/app/assets/javascripts/ui_models/application.ts +++ b/app/assets/javascripts/ui_models/application.ts @@ -13,7 +13,7 @@ import { import angular from 'angular'; import { getPlatformString } from '@/utils'; import { AlertService } from '@/services/alertService'; -import { WebDeviceInterface } from '@/interface'; +import { WebDeviceInterface } from '@/web_device_interface'; import { DesktopManager, LockManager, @@ -26,7 +26,7 @@ import { } from '@/services'; import { AppState } from '@/ui_models/app_state'; import { SNWebCrypto } from 'sncrypto/dist/sncrypto-web'; -import { Platform } from '@/services/platform'; +import { Bridge } from '@/services/bridge'; type WebServices = { appState: AppState @@ -56,13 +56,13 @@ export class WebApplication extends SNApplication { $timeout: ng.ITimeoutService, scope: ng.IScope, onDeinit: (app: WebApplication) => void, - platform: Platform, + bridge: Bridge, ) { const namespace = ''; const deviceInterface = new WebDeviceInterface( namespace, $timeout, - platform + bridge ); super( Environment.Web, diff --git a/app/assets/javascripts/ui_models/application_group.ts b/app/assets/javascripts/ui_models/application_group.ts index b2dd3b2a3..68e0a726b 100644 --- a/app/assets/javascripts/ui_models/application_group.ts +++ b/app/assets/javascripts/ui_models/application_group.ts @@ -11,7 +11,7 @@ import { ThemeManager } from '@/services'; import { AppState } from '@/ui_models/app_state'; -import { Platform } from '@/services/platform'; +import { Bridge } from '@/services/bridge'; type AppManagerChangeCallback = () => void @@ -29,7 +29,7 @@ export class ApplicationGroup { $compile: ng.ICompileService, $rootScope: ng.IRootScopeService, $timeout: ng.ITimeoutService, - private platform: Platform + private bridge: Bridge ) { this.$compile = $compile; this.$timeout = $timeout; @@ -71,7 +71,7 @@ export class ApplicationGroup { this.$timeout, scope, this.onApplicationDeinit, - this.platform + this.bridge ); const appState = new AppState( this.$rootScope, diff --git a/app/assets/javascripts/interface.ts b/app/assets/javascripts/web_device_interface.ts similarity index 91% rename from app/assets/javascripts/interface.ts rename to app/assets/javascripts/web_device_interface.ts index 4b4b9f917..e46e7c58c 100644 --- a/app/assets/javascripts/interface.ts +++ b/app/assets/javascripts/web_device_interface.ts @@ -1,6 +1,6 @@ import { DeviceInterface, getGlobalScope, SNApplication } from 'snjs'; import { Database } from '@/database'; -import { Platform } from './services/platform'; +import { Bridge } from './services/bridge'; export class WebDeviceInterface extends DeviceInterface { @@ -9,7 +9,7 @@ export class WebDeviceInterface extends DeviceInterface { constructor( namespace: string, timeout: any, - private platform: Platform + private bridge: Bridge ) { super( namespace, @@ -101,15 +101,15 @@ export class WebDeviceInterface extends DeviceInterface { } getKeychainValue(): Promise { - return this.platform.getKeychainValue(); + return this.bridge.getKeychainValue(); } setKeychainValue(value: any) { - return this.platform.setKeychainValue(value); + return this.bridge.setKeychainValue(value); } clearKeychainValue() { - return this.platform.clearKeychainValue(); + return this.bridge.clearKeychainValue(); } openUrl(url: string) { diff --git a/dist/@types/app/assets/javascripts/services/bridge.d.ts b/dist/@types/app/assets/javascripts/services/bridge.d.ts new file mode 100644 index 000000000..bfd143fff --- /dev/null +++ b/dist/@types/app/assets/javascripts/services/bridge.d.ts @@ -0,0 +1,11 @@ +/** Platform-specific (i-e Electron/browser) behavior is handled by a Bridge object. */ +export interface Bridge { + getKeychainValue(): Promise; + setKeychainValue(value: any): Promise; + clearKeychainValue(): Promise; +} +export declare class BrowserBridge implements Bridge { + getKeychainValue(): Promise; + setKeychainValue(value: any): Promise; + clearKeychainValue(): Promise; +} diff --git a/dist/@types/app/assets/javascripts/ui_models/application.d.ts b/dist/@types/app/assets/javascripts/ui_models/application.d.ts index 144425363..088c3eaba 100644 --- a/dist/@types/app/assets/javascripts/ui_models/application.d.ts +++ b/dist/@types/app/assets/javascripts/ui_models/application.d.ts @@ -5,7 +5,7 @@ import { PasswordWizardType } from '@/types'; import { SNApplication, Challenge, ProtectedAction } from 'snjs'; import { DesktopManager, LockManager, ArchiveManager, NativeExtManager, StatusManager, ThemeManager, PreferencesManager, KeyboardManager } from '@/services'; import { AppState } from '@/ui_models/app_state'; -import { Platform } from '@/services/platform'; +import { Bridge } from '@/services/bridge'; declare type WebServices = { appState: AppState; desktopService: DesktopManager; @@ -25,7 +25,7 @@ export declare class WebApplication extends SNApplication { private currentAuthenticationElement?; editorGroup: EditorGroup; componentGroup: ComponentGroup; - constructor($compile: ng.ICompileService, $timeout: ng.ITimeoutService, scope: ng.IScope, onDeinit: (app: WebApplication) => void, platform: Platform); + constructor($compile: ng.ICompileService, $timeout: ng.ITimeoutService, scope: ng.IScope, onDeinit: (app: WebApplication) => void, bridge: Bridge); /** @override */ deinit(): void; setWebServices(services: WebServices): void; diff --git a/dist/@types/app/assets/javascripts/ui_models/application_group.d.ts b/dist/@types/app/assets/javascripts/ui_models/application_group.d.ts index f8965f5b2..8c534c259 100644 --- a/dist/@types/app/assets/javascripts/ui_models/application_group.d.ts +++ b/dist/@types/app/assets/javascripts/ui_models/application_group.d.ts @@ -1,16 +1,16 @@ /// import { WebApplication } from './application'; -import { Platform } from '@/services/platform'; +import { Bridge } from '@/services/bridge'; declare type AppManagerChangeCallback = () => void; export declare class ApplicationGroup { - private platform; + private bridge; $compile: ng.ICompileService; $rootScope: ng.IRootScopeService; $timeout: ng.ITimeoutService; applications: WebApplication[]; changeObservers: AppManagerChangeCallback[]; activeApplication?: WebApplication; - constructor($compile: ng.ICompileService, $rootScope: ng.IRootScopeService, $timeout: ng.ITimeoutService, platform: Platform); + constructor($compile: ng.ICompileService, $rootScope: ng.IRootScopeService, $timeout: ng.ITimeoutService, bridge: Bridge); private createDefaultApplication; /** @callback */ onApplicationDeinit(application: WebApplication): void; diff --git a/dist/@types/app/assets/javascripts/views/abstract/pure_view_ctrl.d.ts b/dist/@types/app/assets/javascripts/views/abstract/pure_view_ctrl.d.ts index efb6cea84..38387e19a 100644 --- a/dist/@types/app/assets/javascripts/views/abstract/pure_view_ctrl.d.ts +++ b/dist/@types/app/assets/javascripts/views/abstract/pure_view_ctrl.d.ts @@ -22,7 +22,8 @@ export declare class PureViewCtrl

{ /** @override */ getInitialState(): S; setState(state: Partial): Promise; - updateUI(func: () => void): Promise; + /** @returns a promise that resolves after the UI has been updated. */ + flushUI(): import("angular").IPromise; initProps(props: CtrlProps): void; addAppStateObserver(): void; onAppStateEvent(eventName: any, data: any): void; diff --git a/dist/@types/app/assets/javascripts/web_device_interface.d.ts b/dist/@types/app/assets/javascripts/web_device_interface.d.ts index 9ddc931e1..33188970e 100644 --- a/dist/@types/app/assets/javascripts/web_device_interface.d.ts +++ b/dist/@types/app/assets/javascripts/web_device_interface.d.ts @@ -1,7 +1,9 @@ import { DeviceInterface, SNApplication } from 'snjs'; +import { Bridge } from './services/bridge'; export declare class WebDeviceInterface extends DeviceInterface { + private bridge; private database; - constructor(namespace: string, timeout: any); + constructor(namespace: string, timeout: any, bridge: Bridge); setApplication(application: SNApplication): void; deinit(): void; getRawStorageValue(key: string): Promise; @@ -22,7 +24,7 @@ export declare class WebDeviceInterface extends DeviceInterface { saveRawDatabasePayloads(payloads: any[]): Promise; removeRawDatabasePayloadWithId(id: string): Promise; removeAllRawDatabasePayloads(): Promise; - getKeychainValue(): Promise; + getKeychainValue(): Promise; setKeychainValue(value: any): Promise; clearKeychainValue(): Promise; openUrl(url: string): void; diff --git a/webpack.config.js b/webpack.config.js index bf2fe38d2..7f6d9ba31 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -12,7 +12,7 @@ module.exports = (env = { plugins: [ new webpack.DefinePlugin({ __VERSION__: JSON.stringify(require('./package.json').version), - __PLATFORM_WEB__: JSON.stringify(env.platform === 'web'), + __WEB__: JSON.stringify(env.platform === 'web'), }), new MiniCssExtractPlugin({ // Options similar to the same options in webpackOptions.output