mirror of
https://github.com/atom/atom.git
synced 2026-01-24 14:28:14 -05:00
Load deserializers lazily
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
module.exports = function (state) {
|
||||
return {
|
||||
wasDeserializedBy: 'TheDeserializer',
|
||||
wasDeserializedBy: 'Deserializer1',
|
||||
state: state
|
||||
}
|
||||
}
|
||||
6
spec/fixtures/packages/package-with-deserializers/deserializer-2.js
vendored
Normal file
6
spec/fixtures/packages/package-with-deserializers/deserializer-2.js
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
module.exports = function (state) {
|
||||
return {
|
||||
wasDeserializedBy: 'Deserializer2',
|
||||
state: state
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)", ->
|
||||
|
||||
@@ -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: ->
|
||||
|
||||
Reference in New Issue
Block a user