48 lines
1 KiB
JavaScript
48 lines
1 KiB
JavaScript
import eventHub from '../../eventhub';
|
|
import Disposable from './disposable';
|
|
import Model from './model';
|
|
|
|
export default class ModelManager {
|
|
constructor(monaco) {
|
|
this.monaco = monaco;
|
|
this.disposable = new Disposable();
|
|
this.models = new Map();
|
|
}
|
|
|
|
hasCachedModel(key) {
|
|
return this.models.has(key);
|
|
}
|
|
|
|
getModel(key) {
|
|
return this.models.get(key);
|
|
}
|
|
|
|
addModel(file, head = null) {
|
|
if (this.hasCachedModel(file.key)) {
|
|
return this.getModel(file.key);
|
|
}
|
|
|
|
const model = new Model(this.monaco, file, head);
|
|
this.models.set(model.path, model);
|
|
this.disposable.add(model);
|
|
|
|
eventHub.$on(
|
|
`editor.update.model.dispose.${file.key}`,
|
|
this.removeCachedModel.bind(this, file),
|
|
);
|
|
|
|
return model;
|
|
}
|
|
|
|
removeCachedModel(file) {
|
|
this.models.delete(file.key);
|
|
|
|
eventHub.$off(`editor.update.model.dispose.${file.key}`, this.removeCachedModel);
|
|
}
|
|
|
|
dispose() {
|
|
// dispose of all the models
|
|
this.disposable.dispose();
|
|
this.models.clear();
|
|
}
|
|
}
|