From c2d192c1a34c477da5eb2f1284bdaa6f067a5922 Mon Sep 17 00:00:00 2001 From: Ben Gotow Date: Mon, 10 Jul 2017 13:25:42 -0700 Subject: [PATCH] Remove `q` promise library, trim down reflux a bit --- packages/client-app/package.json | 1 - .../client-app/spec/action-bridge-spec.coffee | 1 - .../stores/focused-contacts-store-spec.coffee | 1 - .../src/flux/modules/reflux-coffee.coffee | 56 +------------------ .../src/flux/stores/contact-store.coffee | 1 - .../flux/stores/focused-content-store.coffee | 1 - .../client-app/src/global/nylas-exports.es6 | 1 - .../client-app/src/package-manager.coffee | 6 +- packages/client-app/src/package.coffee | 12 ++-- .../src/services/sanitize-transformer.es6 | 2 +- packages/client-app/src/style-manager.coffee | 1 - packages/client-app/src/theme-manager.coffee | 43 +++++++------- packages/client-app/src/theme-package.coffee | 14 ++--- 13 files changed, 37 insertions(+), 103 deletions(-) diff --git a/packages/client-app/package.json b/packages/client-app/package.json index f004fb668..a6cfa6c09 100644 --- a/packages/client-app/package.json +++ b/packages/client-app/package.json @@ -63,7 +63,6 @@ "pathwatcher": "~6.2", "pick-react-known-prop": "0.x.x", "proxyquire": "1.3.1", - "q": "^1.0.1", "raven": "1.1.4", "react": "15.6.1", "react-addons-css-transition-group": "15.6.1", diff --git a/packages/client-app/spec/action-bridge-spec.coffee b/packages/client-app/spec/action-bridge-spec.coffee index c34faee5d..f90697ee5 100644 --- a/packages/client-app/spec/action-bridge-spec.coffee +++ b/packages/client-app/spec/action-bridge-spec.coffee @@ -1,4 +1,3 @@ -Reflux = require 'reflux' Actions = require('../src/flux/actions').default Message = require('../src/flux/models/message').default DatabaseStore = require('../src/flux/stores/database-store').default diff --git a/packages/client-app/spec/stores/focused-contacts-store-spec.coffee b/packages/client-app/spec/stores/focused-contacts-store-spec.coffee index c5071d466..2ac50c291 100644 --- a/packages/client-app/spec/stores/focused-contacts-store-spec.coffee +++ b/packages/client-app/spec/stores/focused-contacts-store-spec.coffee @@ -1,5 +1,4 @@ proxyquire = require 'proxyquire' -Reflux = require 'reflux' FocusedContactsStore = require '../../src/flux/stores/focused-contacts-store' diff --git a/packages/client-app/src/flux/modules/reflux-coffee.coffee b/packages/client-app/src/flux/modules/reflux-coffee.coffee index be89736f9..135c0b398 100644 --- a/packages/client-app/src/flux/modules/reflux-coffee.coffee +++ b/packages/client-app/src/flux/modules/reflux-coffee.coffee @@ -1,49 +1,8 @@ -_ = require('underscore') -_str = require('underscore.string') EventEmitter = require('events').EventEmitter callbackName = (string) -> "on"+string.charAt(0).toUpperCase()+string.slice(1) -###* -# Extract child listenables from a parent from their -# children property and return them in a keyed Object -# -# @param {Object} listenable The parent listenable -### - -mapChildListenables = (listenable) -> - i = 0 - children = {} - childName = undefined - while i < (listenable.children or []).length - childName = listenable.children[i] - if listenable[childName] - children[childName] = listenable[childName] - ++i - children - -###* -# Make a flat dictionary of all listenables including their -# possible children (recursively), concatenating names in camelCase. -# -# @param {Object} listenables The top-level listenables -### - -flattenListenables = (listenables) -> - flattened = {} - for key of listenables - listenable = listenables[key] - childMap = mapChildListenables(listenable) - # recursively flatten children - children = flattenListenables(childMap) - # add the primary listenable and chilren - flattened[key] = listenable - for childKey of children - childListenable = children[childKey] - flattened[key + _str.capitalize(childKey)] = childListenable - flattened - module.exports = @@ -64,19 +23,10 @@ module.exports = ++i false - listenToMany: (listenables) -> - allListenables = flattenListenables(listenables) - for key of allListenables - cbname = callbackName(key) - localname = if @[cbname] then cbname else if @[key] then key else undefined - if localname - @listenTo allListenables[key], localname, @[cbname + 'Default'] or @[localname + 'Default'] or localname - return - validateListening: (listenable) -> if listenable == this return 'Listener is not able to listen to itself' - if !_.isFunction(listenable.listen) + if not (listenable.listen instanceof Function) console.log require('util').inspect(listenable) console.log((new Error()).stack) return listenable + ' is missing a listen method' @@ -138,9 +88,9 @@ module.exports = fetchInitialState: (listenable, defaultCallback) -> defaultCallback = defaultCallback and @[defaultCallback] or defaultCallback me = this - if _.isFunction(defaultCallback) and _.isFunction(listenable.getInitialState) + if defaultCallback instanceof Function and listenable.getInitialState instanceof Function data = listenable.getInitialState() - if data and _.isFunction(data.then) + if data and data.then instanceof Function data.then -> defaultCallback.apply me, arguments return diff --git a/packages/client-app/src/flux/stores/contact-store.coffee b/packages/client-app/src/flux/stores/contact-store.coffee index 8056ff9d9..5da99ebef 100644 --- a/packages/client-app/src/flux/stores/contact-store.coffee +++ b/packages/client-app/src/flux/stores/contact-store.coffee @@ -1,6 +1,5 @@ fs = require 'fs' path = require 'path' -Reflux = require 'reflux' Rx = require 'rx-lite' Actions = require('../actions').default Contact = require('../models/contact').default diff --git a/packages/client-app/src/flux/stores/focused-content-store.coffee b/packages/client-app/src/flux/stores/focused-content-store.coffee index 8e12585c8..57f871ac4 100644 --- a/packages/client-app/src/flux/stores/focused-content-store.coffee +++ b/packages/client-app/src/flux/stores/focused-content-store.coffee @@ -1,5 +1,4 @@ _ = require 'underscore' -Reflux = require 'reflux' AccountStore = require('./account-store').default WorkspaceStore = require './workspace-store' DatabaseStore = require('./database-store').default diff --git a/packages/client-app/src/global/nylas-exports.es6 b/packages/client-app/src/global/nylas-exports.es6 index 37f20e878..3ab053d6a 100644 --- a/packages/client-app/src/global/nylas-exports.es6 +++ b/packages/client-app/src/global/nylas-exports.es6 @@ -165,7 +165,6 @@ lazyLoad(`ContenteditableExtension`, 'extensions/contenteditable-extension'); // 3rd party libraries lazyLoadWithGetter(`Rx`, () => require('rx-lite')); lazyLoadWithGetter(`React`, () => require('react')); -lazyLoadWithGetter(`Reflux`, () => require('reflux')); lazyLoadWithGetter(`ReactDOM`, () => require('react-dom')); lazyLoadWithGetter(`ReactTestUtils`, () => require('react-dom/test-utils')); diff --git a/packages/client-app/src/package-manager.coffee b/packages/client-app/src/package-manager.coffee index 397d95b06..e44e01556 100644 --- a/packages/client-app/src/package-manager.coffee +++ b/packages/client-app/src/package-manager.coffee @@ -554,7 +554,7 @@ class PackageManager for [activator, types] in @packageActivators packages = @getLoadedPackagesForTypes(types) promises = promises.concat(activator.activatePackages(packages)) - Q.all(promises).then => + Promise.all(promises).then => @emit 'activated' @emitter.emit 'did-activate-initial-packages' @@ -578,7 +578,7 @@ class PackageManager # Activate a single package by name activatePackage: (name) -> if pack = @getActivePackage(name) - Q(pack) + Promise.resolve(pack) else if pack = @loadPackage(name) pack.activate().then => @activePackages[pack.name] = pack @@ -586,7 +586,7 @@ class PackageManager @onPluginsChanged() pack else - Q.reject(new Error("Failed to load package '#{name}'")) + Promise.reject(new Error("Failed to load package '#{name}'")) # Deactivate all packages deactivatePackages: -> diff --git a/packages/client-app/src/package.coffee b/packages/client-app/src/package.coffee index 9b59153a2..9dff21871 100644 --- a/packages/client-app/src/package.coffee +++ b/packages/client-app/src/package.coffee @@ -142,13 +142,12 @@ class Package @menus = [] activate: -> - unless @activationDeferred? - @activationDeferred = Q.defer() + unless @isActivated @measure 'activateTime', => @activateResources() @activateNow() - - Q.all([@activationDeferred.promise]) + @isActivated = true + return Promise.resolve() activateNow: -> try @@ -163,8 +162,6 @@ class Package console.error e.stack console.warn "Failed to activate package named '#{@name}'", e.stack - @activationDeferred?.resolve() - activateConfig: -> return if @configActivated @@ -262,8 +259,7 @@ class Package console.error "Error serializing package '#{@name}'", e.stack deactivate: -> - @activationDeferred?.reject() - @activationDeferred = null + @isActivated = null @deactivateResources() @deactivateConfig() if @mainActivated diff --git a/packages/client-app/src/services/sanitize-transformer.es6 b/packages/client-app/src/services/sanitize-transformer.es6 index b5522b7f0..2dc13a4e0 100644 --- a/packages/client-app/src/services/sanitize-transformer.es6 +++ b/packages/client-app/src/services/sanitize-transformer.es6 @@ -52,7 +52,7 @@ class SanitizeTransformer { } if (!sanitizeHtml) { - sanitizeHtml = require('sanitize-html').default; //eslint-disable-line + sanitizeHtml = require('sanitize-html'); //eslint-disable-line } return Promise.resolve(sanitizeHtml(body, settings)); } diff --git a/packages/client-app/src/style-manager.coffee b/packages/client-app/src/style-manager.coffee index e8fd2eb0e..ece028efc 100644 --- a/packages/client-app/src/style-manager.coffee +++ b/packages/client-app/src/style-manager.coffee @@ -1,4 +1,3 @@ -fs = require 'fs-plus' path = require 'path' {Emitter, Disposable} = require 'event-kit' diff --git a/packages/client-app/src/theme-manager.coffee b/packages/client-app/src/theme-manager.coffee index 613cbda4b..b405c66f8 100644 --- a/packages/client-app/src/theme-manager.coffee +++ b/packages/client-app/src/theme-manager.coffee @@ -233,32 +233,29 @@ class ThemeManager string.replace(/\\/g, '/') activateThemes: -> - deferred = Q.defer() + return new Promise (resolve) => + # NylasEnv.config.observe runs the callback once, then on subsequent changes. + NylasEnv.config.observe 'core.themes', => + @deactivateThemes() - # NylasEnv.config.observe runs the callback once, then on subsequent changes. - NylasEnv.config.observe 'core.themes', => - @deactivateThemes() + # Refreshing the less cache is very expensive (hundreds of ms). It + # will be refreshed once the promise resolves after packages are + # activated. - # Refreshing the less cache is very expensive (hundreds of ms). It - # will be refreshed once the promise resolves after packages are - # activated. + promises = [] + for themeName in @getEnabledThemeNames() + if @packageManager.resolvePackagePath(themeName) + promises.push(@packageManager.activatePackage(themeName)) + else + console.warn("Failed to activate theme '#{themeName}' because it isn't installed.") - promises = [] - for themeName in @getEnabledThemeNames() - if @packageManager.resolvePackagePath(themeName) - promises.push(@packageManager.activatePackage(themeName)) - else - console.warn("Failed to activate theme '#{themeName}' because it isn't installed.") - - Q.all(promises).then => - @addActiveThemeClasses() - @refreshLessCache() # Update cache again now that @getActiveThemes() is populated - @reloadBaseStylesheets() - @initialLoadComplete = true - @emitter.emit 'did-change-active-themes' - deferred.resolve() - - deferred.promise + Promise.all(promises).then => + @addActiveThemeClasses() + @refreshLessCache() # Update cache again now that @getActiveThemes() is populated + @reloadBaseStylesheets() + @initialLoadComplete = true + @emitter.emit 'did-change-active-themes' + resolve() deactivateThemes: -> @removeActiveThemeClasses() diff --git a/packages/client-app/src/theme-package.coffee b/packages/client-app/src/theme-package.coffee index 246a7abba..768a9b1d4 100644 --- a/packages/client-app/src/theme-package.coffee +++ b/packages/client-app/src/theme-package.coffee @@ -22,11 +22,9 @@ class ThemePackage extends Package this activate: -> - return @activationDeferred.promise if @activationDeferred? - - @activationDeferred = Q.defer() - @measure 'activateTime', => - @loadStylesheets() - @activateNow() - - @activationDeferred.promise + unless @isActivated + @measure 'activateTime', => + @loadStylesheets() + @activateNow() + @isActivated = true + return Promise.resolve()