@juzi/wechaty
Version:
Wechaty is a RPA SDK for Chatbot Makers.
44 lines • 1.58 kB
JavaScript
import { log } from '@juzi/wechaty-puppet';
/**
* https://stackoverflow.com/a/60378737/1123955
*
* You want something like partial type parameter inference,
* which is not currently a feature of TypeScript (see microsoft/TypeScript#26242).
* Right now you either have to specify all type parameters manually
* or let the compiler infer all type parameters;
* there's no partial inference.
* As you've noticed,
* generic type parameter defaults do not scratch this itch;
* a default turns off inference.
*/
const poolifyMixin = (mixinBase) => () => {
log.verbose('PoolifyMixin', 'poolifyMixin(%s)', mixinBase.name);
class AbstractPoolifyMixin extends mixinBase {
static _pool;
static get pool() {
/**
* hasOwnProperty() is important because we are calling this from the child classes
*/
if (!Object.prototype.hasOwnProperty.call(this, '_pool')) {
log.verbose('PoolifyMixin', 'get pool() init pool');
this._pool = new Map();
}
return this._pool; // FIXME: why we need "!" at here?
}
static load(id) {
const existingItem = this.pool.get(id);
if (existingItem) {
return existingItem;
}
const newItem = new this(id);
this.pool.set(id, newItem);
return newItem;
}
constructor(...args) {
super(...args);
}
}
return AbstractPoolifyMixin;
};
export { poolifyMixin, };
//# sourceMappingURL=poolify.js.map