* chore: skip sync localization-management plugin enable status * chore: unSyncPlugins array * chore: remove install at dev * chore: gateway and supervisor * chore: install command * chore: remove app manager * chore: share plugin * chore: wsserver * chore: websocket server * chore: websocket connection with app status * feat: socket server at gateway * chore: loading message * chore: ready status * chore: handle app error * feat: restart app at supervisor * feat: health check endpoint * chore: test * chore: test * chore: test * chore: test * chore: build * chore: test * chore: build * chore: application ready status * chore: error message * chore: handle application error * chore: handle error in load * chore: report error in websocket * chore: ws error * chore: ws error * chore: typo * chore: switch app ready status at install * chore: test * chore: test * chore: test * chore: test * feat: add WebSocket client * chore: start gateway * chore: start command in application * chore: code * chore: pm command * chore: run start after load sub app * feat: application fsm * refactor: server life cycle (#2402) * refactor: server life cycle * fix: test error * fix: test error * fix: test error * fix: app.start * fix: cronjob stop * fix: db.sync before upgrade * fix: pm.get * fix: test error * fix: test error * fix: test error * test: add test cases * fix: remove PluginType * chore: start application after install * chore: fsm * chore: working status * chore: working command * chore: remove swith app ready status * chore: switch status after working done * chore: ws status * chore: gateway error * chore: test * chore: stopping status * chore: test * chore: test * feat: app proxy * chore: application destory * chore: application message changed with status * chore: test * chore: test timeout * test: remove listener add by plugin * test: remove listener add by plugin * chore: test * feat: app maintaining * fix: add AppMaintainingDialog * feat: off * test: gateway http response * test: gateway with errors * chore: unkown error * chore: websocket message * chore: ws message * chore: code * chore: error format * chore: delay app load * feat: improve code * chore: application initializing status * chore: supervisor with app status * chore: command status response * chore: test * chore: ws message * chore: test * fix: command running message * feat: restart * chore: code * chore: status transition * chore: test * fix: improve code * fix: error * fix: restart * fix: command * chore: reset client app tag when app selector changed * chore: error report * fix: application status * fix: build * chore: disable help command dispatch * chore: test * test: multi apps test * fix: improve code * fix: test * fix: test * fix: multi apps single running * fix: improve code * fix: app status * chore: move plugin static file to gateway * feat: static file handler * chore: test * chore: enable plugins in share collection * chore: gateway serve upload files * fix: improve client * chore: ws nginx config * fix: gateway with naonoid * fix: db sync * fix: loading * fix: ping * fix: locale load * fix: yarn start --quickstart * fix: add debug log * chore: application started event * chore: running working message payload * chore: nginx log * chore: nginxconf * chore: working message log * feat: logs * feat: compression * fix: remove koa-send and koa-static * fix: remove -e * fix: remove nginx * fix: remove -e * fix: __appName * chore: delay install sub application * chore: sync plugin status * fix: boot sub app * fix: main app reload * fix: test * fix: app status * test: field.bind block event loop * feat: newrelic * feat: debug log * chore: upgrade * fix(file-manager): test error * fix: default app selector * fix: reload after maintained * chore: boot sub app * chore: application destroy command * chore: destroy command * chore: clean code * chore: package.json * chore: maintaining message * chore: test * fix: collection.sync * feat: add test cases * chore: application * fix: test error * feat: improve codes and add test cases * fix: test error * fix: pm enable and disable * fix: pm.disable * feat: update docs * chore: update dockerfile --------- Co-authored-by: chenos <chenlinxh@gmail.com>
110 lines
1.7 KiB
TypeScript
110 lines
1.7 KiB
TypeScript
import { Model } from '@nocobase/database';
|
|
import { Application } from './application';
|
|
import { InstallOptions } from './plugin-manager';
|
|
|
|
export interface PluginInterface {
|
|
beforeLoad?: () => void;
|
|
|
|
load();
|
|
|
|
getName(): string;
|
|
}
|
|
|
|
export interface PluginOptions {
|
|
activate?: boolean;
|
|
displayName?: string;
|
|
description?: string;
|
|
version?: string;
|
|
enabled?: boolean;
|
|
install?: (this: Plugin) => void;
|
|
load?: (this: Plugin) => void;
|
|
plugin?: typeof Plugin;
|
|
|
|
[key: string]: any;
|
|
}
|
|
|
|
export abstract class Plugin<O = any> implements PluginInterface {
|
|
options: any;
|
|
app: Application;
|
|
model: Model;
|
|
state: any = {};
|
|
|
|
constructor(app: Application, options?: any) {
|
|
this.app = app;
|
|
this.setOptions(options);
|
|
}
|
|
|
|
get log() {
|
|
return this.app.log;
|
|
}
|
|
|
|
get name() {
|
|
return this.options.name as string;
|
|
}
|
|
|
|
get pm() {
|
|
return this.app.pm;
|
|
}
|
|
|
|
get db() {
|
|
return this.app.db;
|
|
}
|
|
|
|
get enabled() {
|
|
return this.options.enabled;
|
|
}
|
|
|
|
set enabled(value) {
|
|
this.options.enabled = value;
|
|
}
|
|
|
|
get installed() {
|
|
return this.options.installed;
|
|
}
|
|
|
|
set installed(value) {
|
|
this.options.installed = value;
|
|
}
|
|
|
|
setOptions(options: any) {
|
|
this.options = options || {};
|
|
}
|
|
|
|
getName() {
|
|
return (this.options as any).name;
|
|
}
|
|
|
|
afterAdd() {}
|
|
|
|
beforeLoad() {}
|
|
|
|
async load() {}
|
|
|
|
async install(options?: InstallOptions) {}
|
|
|
|
async beforeEnable() {}
|
|
|
|
async afterEnable() {}
|
|
|
|
async beforeDisable() {}
|
|
|
|
async afterDisable() {}
|
|
|
|
async beforeRemove() {}
|
|
|
|
async afterRemove() {}
|
|
|
|
async importCollections(collectionsPath: string) {
|
|
await this.db.import({
|
|
directory: collectionsPath,
|
|
from: this.getName(),
|
|
});
|
|
}
|
|
|
|
requiredPlugins() {
|
|
return [];
|
|
}
|
|
}
|
|
|
|
export default Plugin;
|