From 016b73028d6c50b1e9a648aafa29b51b32288d1d Mon Sep 17 00:00:00 2001 From: Baptiste Grob <60621355+baptiste-grob@users.noreply.github.com> Date: Mon, 9 Nov 2020 17:01:24 +0100 Subject: [PATCH] feat: improve bridge and exported types --- app/assets/javascripts/app.ts | 25 ++++++---- app/assets/javascripts/services/bridge.ts | 46 ++++--------------- .../javascripts/services/browserBridge.ts | 32 +++++++++++++ app/assets/javascripts/startApplication.ts | 6 +++ dist/@types/app/assets/javascripts/app.d.ts | 3 +- .../assets/javascripts/services/bridge.d.ts | 5 +- 6 files changed, 68 insertions(+), 49 deletions(-) create mode 100644 app/assets/javascripts/services/browserBridge.ts create mode 100644 app/assets/javascripts/startApplication.ts diff --git a/app/assets/javascripts/app.ts b/app/assets/javascripts/app.ts index a49e22c40..58ae18e44 100644 --- a/app/assets/javascripts/app.ts +++ b/app/assets/javascripts/app.ts @@ -53,17 +53,16 @@ import { import { trusted } from './filters'; import { isDev } from './utils'; -import { Bridge, BrowserBridge } from './services/bridge'; +import { BrowserBridge } from './services/browserBridge'; import { startErrorReporting } from './services/errorReporting'; import { alertDialog } from './services/alertService'; +import { StartApplication } from './startApplication'; +import { Bridge } from './services/bridge'; -if (__WEB__) { - startApplication((window as any)._default_sync_server, new BrowserBridge()); -} else { - (window as any).startApplication = startApplication; -} - -async function startApplication(defaultSyncServerHost: string, bridge: Bridge) { +const startApplication: StartApplication = async function startApplication( + defaultSyncServerHost: string, + bridge: Bridge +) { notifyBetaPeriodEnd(); SNLog.onLog = console.log; @@ -77,7 +76,7 @@ async function startApplication(defaultSyncServerHost: string, bridge: Bridge) { .config(configRoutes) .constant('bridge', bridge) .constant('defaultSyncServerHost', defaultSyncServerHost) - .constant('appVersion', __VERSION__); + .constant('appVersion', bridge.appVersion); // Controllers angular @@ -149,7 +148,7 @@ async function startApplication(defaultSyncServerHost: string, bridge: Bridge) { angular.element(document).ready(() => { angular.bootstrap(document, ['app']); }); -} +}; function notifyBetaPeriodEnd() { if (window.location.hostname === 'app-beta.standardnotes.org') { @@ -163,3 +162,9 @@ function notifyBetaPeriodEnd() { }); } } + +if (__WEB__) { + startApplication((window as any)._default_sync_server, new BrowserBridge(__VERSION__)); +} else { + (window as any).startApplication = startApplication; +} diff --git a/app/assets/javascripts/services/bridge.ts b/app/assets/javascripts/services/bridge.ts index fdf67f1df..f5f4488c6 100644 --- a/app/assets/javascripts/services/bridge.ts +++ b/app/assets/javascripts/services/bridge.ts @@ -1,51 +1,23 @@ -import { PurePayload, Environment } from "snjs"; +/** + * This file will be imported by desktop, so we make sure imports are not + * carrying too much code with them that's not tree-shakeable. + */ +import { Environment } from 'snjs/lib/platforms'; +export { Environment }; /** Platform-specific (i-e Electron/browser) behavior is handled by a Bridge object. */ export interface Bridge { - environment: Environment, + readonly appVersion: string; + environment: Environment; getKeychainValue(): Promise; setKeychainValue(value: any): Promise; clearKeychainValue(): Promise; extensionsServerHost?: string; - syncComponents(payloads: PurePayload[]): void; + syncComponents(payloads: unknown[]): void; onMajorDataChange(): void; onInitialDataLoad(): void; onSearch(text?: string): void; downloadBackup(): void; } - -const KEYCHAIN_STORAGE_KEY = 'keychain'; - -export class BrowserBridge implements Bridge { - environment = Environment.Web; - - async getKeychainValue(): Promise { - const value = localStorage.getItem(KEYCHAIN_STORAGE_KEY); - if (value) { - return JSON.parse(value); - } - } - - async setKeychainValue(value: any): Promise { - localStorage.setItem(KEYCHAIN_STORAGE_KEY, JSON.stringify(value)); - } - - async clearKeychainValue(): Promise { - localStorage.removeItem(KEYCHAIN_STORAGE_KEY); - } - - /** No-ops */ - - syncComponents() { - } - onMajorDataChange() { - } - onInitialDataLoad() { - } - onSearch() { - } - downloadBackup() { - } -} diff --git a/app/assets/javascripts/services/browserBridge.ts b/app/assets/javascripts/services/browserBridge.ts new file mode 100644 index 000000000..a7d2e2dab --- /dev/null +++ b/app/assets/javascripts/services/browserBridge.ts @@ -0,0 +1,32 @@ +import { Bridge } from "./bridge"; +import { Environment } from 'snjs'; + +const KEYCHAIN_STORAGE_KEY = 'keychain'; + +export class BrowserBridge implements Bridge { + constructor(public appVersion: string) {} + environment = Environment.Web; + + async getKeychainValue(): Promise { + const value = localStorage.getItem(KEYCHAIN_STORAGE_KEY); + if (value) { + return JSON.parse(value); + } + } + + async setKeychainValue(value: any): Promise { + localStorage.setItem(KEYCHAIN_STORAGE_KEY, JSON.stringify(value)); + } + + async clearKeychainValue(): Promise { + localStorage.removeItem(KEYCHAIN_STORAGE_KEY); + } + + /** No-ops */ + + syncComponents() {} + onMajorDataChange() {} + onInitialDataLoad() {} + onSearch() {} + downloadBackup() {} +} diff --git a/app/assets/javascripts/startApplication.ts b/app/assets/javascripts/startApplication.ts new file mode 100644 index 000000000..1ee380a1c --- /dev/null +++ b/app/assets/javascripts/startApplication.ts @@ -0,0 +1,6 @@ +import { Bridge } from "./services/bridge"; + +export type StartApplication = ( + defaultSyncServerHost: string, + bridge: Bridge +) => Promise; diff --git a/dist/@types/app/assets/javascripts/app.d.ts b/dist/@types/app/assets/javascripts/app.d.ts index cb0ff5c3b..ed7a54c5f 100644 --- a/dist/@types/app/assets/javascripts/app.d.ts +++ b/dist/@types/app/assets/javascripts/app.d.ts @@ -1 +1,2 @@ -export {}; +import { Bridge } from './services/bridge'; +export declare type StartApplication = (defaultSyncServerHost: string, bridge: Bridge) => Promise; diff --git a/dist/@types/app/assets/javascripts/services/bridge.d.ts b/dist/@types/app/assets/javascripts/services/bridge.d.ts index a61b3f734..2ad61a1dc 100644 --- a/dist/@types/app/assets/javascripts/services/bridge.d.ts +++ b/dist/@types/app/assets/javascripts/services/bridge.d.ts @@ -1,6 +1,7 @@ -import { PurePayload, Environment } from "snjs"; +import { PurePayload, Environment } from 'snjs'; /** Platform-specific (i-e Electron/browser) behavior is handled by a Bridge object. */ export interface Bridge { + readonly appVersion: string; environment: Environment; getKeychainValue(): Promise; setKeychainValue(value: any): Promise; @@ -13,6 +14,8 @@ export interface Bridge { downloadBackup(): void; } export declare class BrowserBridge implements Bridge { + appVersion: string; + constructor(appVersion: string); environment: Environment; getKeychainValue(): Promise; setKeychainValue(value: any): Promise;