/
githubmirror
/
atom
Обзор
Документация
Войти
/
githubmirror
/
atom
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/deserializer-manager.js
99 строк
3 KB
Rafael Oleza
Reformat all JS files using prettier
31 май 2019, 19:33
31 май 2019, 19:33
7f3f040
Код
Авторство
О чём код?
const { Disposable } = require('event-kit'); // Extended: Manages the deserializers used for serialized state // // An instance of this class is always available as the `atom.deserializers` // global. // // ## Examples // // ```coffee // class MyPackageView extends View // atom.deserializers.add(this) // // @deserialize: (state) -> // new MyPackageView(state) // // constructor: (@state) -> // // serialize: -> // @state // ``` module.exports = class DeserializerManager { constructor(atomEnvironment) { this.atomEnvironment = atomEnvironment; this.deserializers = {}; } // Public: Register the given class(es) as deserializers. // // * `deserializers` One or more deserializers to register. A deserializer can // be any object with a `.name` property and a `.deserialize()` method. A // common approach is to register a *constructor* as the deserializer for its // instances by adding a `.deserialize()` class method. When your method is // called, it will be passed serialized state as the first argument and the // {AtomEnvironment} object as the second argument, which is useful if you // wish to avoid referencing the `atom` global. add(...deserializers) { for (let i = 0; i < deserializers.length; i++) { let deserializer = deserializers[i]; this.deserializers[deserializer.name] = deserializer; } return new Disposable(() => { for (let j = 0; j < deserializers.length; j++) { let deserializer = deserializers[j]; delete this.deserializers[deserializer.name]; } }); } getDeserializerCount() { return Object.keys(this.deserializers).length; } // Public: Deserialize the state and params. // // * `state` The state {Object} to deserialize. deserialize(state) { if (state == null) { return; } const deserializer = this.get(state); if (deserializer) { let stateVersion = (typeof state.get === 'function' && state.get('version')) || state.version; if ( deserializer.version != null && deserializer.version !== stateVersion ) { return; } return deserializer.deserialize(state, this.atomEnvironment); } else { return console.warn('No deserializer found for', state); } } // Get the deserializer for the state. // // * `state` The state {Object} being deserialized. get(state) { if (state == null) { return; } let stateDeserializer = (typeof state.get === 'function' && state.get('deserializer')) || state.deserializer; return this.deserializers[stateDeserializer]; } clear() { this.deserializers = {}; } };