Defer activation hooks (#8313)

This commit is contained in:
Nikolay Yakimov
2015-09-06 20:54:07 +03:00
committed by Joe Fitzgerald
parent 24e64ee9e1
commit 7d959df683

View File

@@ -37,6 +37,7 @@ class PackageManager
@emitter = new Emitter
@activationHookEmitter = new Emitter
@packageDirPaths = []
@deferredActivationHooks = []
if configDirPath? and not safeMode
if @devMode
@packageDirPaths.push(path.join(configDirPath, "dev", "packages"))
@@ -409,6 +410,8 @@ class PackageManager
packages = @getLoadedPackagesForTypes(types)
promises = promises.concat(activator.activatePackages(packages))
Promise.all(promises).then =>
@triggerDeferredActivationHooks()
@emit 'activated' if Grim.includeDeprecatedAPIs
@emitter.emit 'did-activate-initial-packages'
# another type of package manager can handle other package types.
@@ -441,9 +444,16 @@ class PackageManager
else
Promise.reject(new Error("Failed to load package '#{name}'"))
triggerDeferredActivationHooks: ->
@activationHookEmitter.emit(hook) for hook in @deferredActivationHooks
@deferredActivationHooks = null
triggerActivationHook: (hook) ->
return new Error("Cannot trigger an empty activation hook") unless hook? and _.isString(hook) and hook.length > 0
@activationHookEmitter.emit(hook)
if @deferredActivationHooks?
@deferredActivationHooks.push hook
else
@activationHookEmitter.emit(hook)
onDidTriggerActivationHook: (hook, callback) ->
return unless hook? and _.isString(hook) and hook.length > 0