mirror of
https://github.com/TriliumNext/Notes.git
synced 2025-07-28 02:22:26 +08:00
38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
![]() |
import utils = require('./utils');
|
||
|
import BackendScriptApi = require('./backend_script_api');
|
||
|
import BNote = require('../becca/entities/bnote');
|
||
|
import { ApiParams } from './backend_script_api_interface';
|
||
|
|
||
|
type Module = {
|
||
|
exports: any[];
|
||
|
};
|
||
|
|
||
|
class ScriptContext {
|
||
|
modules: Record<string, Module>;
|
||
|
notes: {};
|
||
|
apis: {};
|
||
|
allNotes: BNote[];
|
||
|
|
||
|
constructor(allNotes: BNote[], apiParams: ApiParams) {
|
||
|
this.allNotes = allNotes;
|
||
|
this.modules = {};
|
||
|
this.notes = utils.toObject(allNotes, note => [note.noteId, note]);
|
||
|
this.apis = utils.toObject(allNotes, note => [note.noteId, new BackendScriptApi(note, apiParams)]);
|
||
|
}
|
||
|
|
||
|
require(moduleNoteIds: string[]) {
|
||
|
return (moduleName: string) => {
|
||
|
const candidates = this.allNotes.filter(note => moduleNoteIds.includes(note.noteId));
|
||
|
const note = candidates.find(c => c.title === moduleName);
|
||
|
|
||
|
if (!note) {
|
||
|
return require(moduleName);
|
||
|
}
|
||
|
|
||
|
return this.modules[note.noteId].exports;
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
|
||
|
export = ScriptContext;
|