Load deserializers lazily

This commit is contained in:
Max Brunsfeld
2015-11-18 14:31:16 -08:00
parent ade1ef7a4c
commit 46272cd192
5 changed files with 26 additions and 8 deletions

View File

@@ -1,6 +1,6 @@
module.exports = function (state) {
return {
wasDeserializedBy: 'TheDeserializer',
wasDeserializedBy: 'Deserializer1',
state: state
}
}

View File

@@ -0,0 +1,6 @@
module.exports = function (state) {
return {
wasDeserializedBy: 'Deserializer2',
state: state
}
}

View File

@@ -2,6 +2,7 @@
"name": "package-with-deserializers",
"version": "1.0.0",
"atom-deserializers": {
"TheDeserializerName": "./the-deserializer.js"
"Deserializer1": "./deserializer-1.js",
"Deserializer2": "./deserializer-2.js"
}
}

View File

@@ -82,11 +82,16 @@ describe "PackageManager", ->
it "registers any deserializers specified in the package's package.json", ->
atom.packages.loadPackage("package-with-deserializers")
state = {deserializer: 'TheDeserializerName', a: 'b'}
state1 = {deserializer: 'Deserializer1', a: 'b'}
expect(atom.deserializers.deserialize(state1)).toEqual {
wasDeserializedBy: 'Deserializer1'
state: state1
}
expect(atom.deserializers.deserialize(state)).toEqual {
wasDeserializedBy: 'TheDeserializer'
state: state
state2 = {deserializer: 'Deserializer2', c: 'd'}
expect(atom.deserializers.deserialize(state2)).toEqual {
wasDeserializedBy: 'Deserializer2'
state: state2
}
describe "::unloadPackage(name)", ->

View File

@@ -256,8 +256,14 @@ class Package
loadDeserializers: ->
for name, implementationPath of @metadata['atom-deserializers']
deserialize = require(path.join(@path, implementationPath))
atom.deserializers.add({name, deserialize})
do =>
deserializePath = path.join(@path, implementationPath)
deserializeFunction = null
atom.deserializers.add
name: name,
deserialize: ->
deserializeFunction ?= require(deserializePath)
deserializeFunction.apply(this, arguments)
return
getStylesheetsPath: ->