Initial commit
This commit is contained in:
61
src/managers/DataManager.js
Normal file
61
src/managers/DataManager.js
Normal file
@@ -0,0 +1,61 @@
|
||||
'use strict';
|
||||
|
||||
const BaseManager = require('./BaseManager');
|
||||
const { Error } = require('../errors');
|
||||
|
||||
/**
|
||||
* Manages the API methods of a data model along with a collection of instances.
|
||||
* @extends {BaseManager}
|
||||
* @abstract
|
||||
*/
|
||||
class DataManager extends BaseManager {
|
||||
constructor(client, holds) {
|
||||
super(client);
|
||||
|
||||
/**
|
||||
* The data structure belonging to this manager.
|
||||
* @name DataManager#holds
|
||||
* @type {Function}
|
||||
* @private
|
||||
* @readonly
|
||||
*/
|
||||
Object.defineProperty(this, 'holds', { value: holds });
|
||||
}
|
||||
|
||||
/**
|
||||
* The cache of items for this manager.
|
||||
* @type {Collection}
|
||||
* @abstract
|
||||
*/
|
||||
get cache() {
|
||||
throw new Error('NOT_IMPLEMENTED', 'get cache', this.constructor.name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolves a data entry to a data Object.
|
||||
* @param {string|Object} idOrInstance The id or instance of something in this Manager
|
||||
* @returns {?Object} An instance from this Manager
|
||||
*/
|
||||
resolve(idOrInstance) {
|
||||
if (idOrInstance instanceof this.holds) return idOrInstance;
|
||||
if (typeof idOrInstance === 'string') return this.cache.get(idOrInstance) ?? null;
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolves a data entry to an instance id.
|
||||
* @param {string|Object} idOrInstance The id or instance of something in this Manager
|
||||
* @returns {?Snowflake}
|
||||
*/
|
||||
resolveId(idOrInstance) {
|
||||
if (idOrInstance instanceof this.holds) return idOrInstance.id;
|
||||
if (typeof idOrInstance === 'string') return idOrInstance;
|
||||
return null;
|
||||
}
|
||||
|
||||
valueOf() {
|
||||
return this.cache;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = DataManager;
|
||||
Reference in New Issue
Block a user