Hook up package URL handlers

This commit is contained in:
Michelle Tilley
2017-09-18 18:53:46 -07:00
parent a7b52ee9cb
commit b4f73f254d
2 changed files with 28 additions and 1 deletions

View File

@@ -648,6 +648,10 @@ module.exports = class PackageManager {
})
}
registerUrlHandlerForPackage (packageName, handler) {
return this.urlHandlerRegistry.registerHostHandler(packageName, handler)
}
// another type of package manager can handle other package types.
// See ThemeManager
registerPackageActivator (activator, types) {

View File

@@ -84,6 +84,7 @@ class Package
@loadMenus()
@registerDeserializerMethods()
@activateCoreStartupServices()
@registerUrlHandler()
@configSchemaRegisteredOnLoad = @registerConfigSchemaFromMetadata()
@requireMainModule()
@settingsPromise = @loadSettings()
@@ -114,6 +115,7 @@ class Package
@loadStylesheets()
@registerDeserializerMethods()
@activateCoreStartupServices()
@registerUrlHandler()
@registerTranspilerConfig()
@configSchemaRegisteredOnLoad = @registerConfigSchemaFromMetadata()
@settingsPromise = @loadSettings()
@@ -318,6 +320,21 @@ class Package
@activationDisposables.add @packageManager.serviceHub.consume(name, version, @mainModule[methodName].bind(@mainModule))
return
registerUrlHandler: ->
handlerConfig = @getUrlHandler()
if methodName = handlerConfig?.method
@urlHandlerSubscription = @packageManager.registerUrlHandlerForPackage @name, (url) =>
@handleUrl(url, methodName)
unregisterUrlHandler: ->
@urlHandlerSubscription?.dispose()
handleUrl: (url, methodName) ->
@activate().then =>
@mainModule[methodName]?(url)
unless @mainActivated
@activateNow()
registerTranspilerConfig: ->
if @metadata.atomTranspilers
CompileCache.addTranspilerConfigForPath(@path, @name, @metadata, @metadata.atomTranspilers)
@@ -595,7 +612,7 @@ class Package
@mainModulePath = fs.resolveExtension(mainModulePath, ["", CompileCache.supportedExtensions...])
activationShouldBeDeferred: ->
@hasActivationCommands() or @hasActivationHooks()
@hasActivationCommands() or @hasActivationHooks() or @hasDeferredUrlHandler()
hasActivationHooks: ->
@getActivationHooks()?.length > 0
@@ -605,6 +622,9 @@ class Package
return true if commands.length > 0
false
hasDeferredUrlHandler: ->
@getUrlHandler() and @getUrlHandler().deferActivation isnt false
subscribeToDeferredActivation: ->
@subscribeToActivationCommands()
@subscribeToActivationHooks()
@@ -673,6 +693,9 @@ class Package
@activationHooks = _.uniq(@activationHooks)
getUrlHandler: ->
@metadata?.urlHandler
# Does the given module path contain native code?
isNativeModule: (modulePath) ->
try