62 lines
1.5 KiB
JavaScript
62 lines
1.5 KiB
JavaScript
|
'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;
|