core: refine preset creation, remove reset()
This commit is contained in:
parent
3cd3a6fafa
commit
beb84d4e2c
@ -2,33 +2,28 @@ import EventEmitter from 'events';
|
|||||||
import {getPresetClassByName, IPresetStatic} from '../presets';
|
import {getPresetClassByName, IPresetStatic} from '../presets';
|
||||||
import {kebabCase} from '../utils';
|
import {kebabCase} from '../utils';
|
||||||
|
|
||||||
let presetCache = {
|
const staticPresetCache = new Map(/* 'ClassName': <preset> */);
|
||||||
// 'ClassName': <preset>
|
|
||||||
};
|
|
||||||
|
|
||||||
function getInstanceFromCache(ImplClass, params) {
|
function getInstanceFromCache(ImplClass, params) {
|
||||||
let impl = presetCache[ImplClass.name];
|
let preset = staticPresetCache.get(ImplClass.name);
|
||||||
if (impl === undefined) {
|
if (preset === undefined) {
|
||||||
// only create one instance for IPresetStatic
|
// only create one instance for IPresetStatic
|
||||||
ImplClass.checkParams(params);
|
ImplClass.checkParams(params);
|
||||||
ImplClass.onInit(params);
|
ImplClass.onInit(params);
|
||||||
impl = new ImplClass(params);
|
preset = new ImplClass(params);
|
||||||
presetCache[ImplClass.name] = impl;
|
staticPresetCache.set(ImplClass.name, preset);
|
||||||
}
|
}
|
||||||
return impl;
|
return preset;
|
||||||
}
|
}
|
||||||
|
|
||||||
function createPreset(name, params = {}) {
|
function createPreset(name, params = {}) {
|
||||||
const ImplClass = getPresetClassByName(name);
|
const ImplClass = getPresetClassByName(name);
|
||||||
let preset = null;
|
let preset = null;
|
||||||
if (ImplClass.__proto__.name === IPresetStatic.name) {
|
if (IPresetStatic.isPrototypeOf(ImplClass)) {
|
||||||
preset = getInstanceFromCache(ImplClass, params);
|
preset = getInstanceFromCache(ImplClass, params);
|
||||||
} else {
|
} else {
|
||||||
if (!ImplClass.initialized) {
|
ImplClass.checkParams(params);
|
||||||
ImplClass.checkParams(params);
|
ImplClass.onInit(params);
|
||||||
ImplClass.onInit(params);
|
|
||||||
ImplClass.initialized = true;
|
|
||||||
}
|
|
||||||
preset = new ImplClass(params);
|
preset = new ImplClass(params);
|
||||||
}
|
}
|
||||||
return preset;
|
return preset;
|
||||||
@ -136,18 +131,7 @@ export class Middleware extends EventEmitter {
|
|||||||
* destroy cached presets when program exit()
|
* destroy cached presets when program exit()
|
||||||
*/
|
*/
|
||||||
export function cleanup() {
|
export function cleanup() {
|
||||||
const classNames = Object.keys(presetCache);
|
for (const preset of staticPresetCache.values()) {
|
||||||
for (const className of classNames) {
|
preset.onDestroy();
|
||||||
presetCache[className].onDestroy();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* clear preset cache and reset them to fresh status
|
|
||||||
*/
|
|
||||||
export function reset() {
|
|
||||||
presetCache = {};
|
|
||||||
__PRESETS__
|
|
||||||
.map(({name}) => getPresetClassByName(name))
|
|
||||||
.forEach((ImplClass) => ImplClass.initialized = false);
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user