chore: Plugin registration (#6623)

* first pass

* test

* test

* priority

* Reduce boilerplate further

* Update server/utils/PluginManager.ts

Co-authored-by: Apoorv Mishra <apoorvmishra101092@gmail.com>

* fix: matchesNode error in destroyed editor transaction

* fix: Individual imported files do not display source correctly in 'Insights'

* chore: Add sleep before Slack notification

* docs

* fix: Error logged about missing plugin.json

* Remove email template glob

---------

Co-authored-by: Apoorv Mishra <apoorvmishra101092@gmail.com>
This commit is contained in:
Tom Moor
2024-03-08 21:32:05 -07:00
committed by GitHub
parent f3334cedb2
commit f9a11a28d8
43 changed files with 400 additions and 276 deletions

View File

@@ -1,12 +1,8 @@
import path from "path";
import { glob } from "glob";
import env from "@server/env";
import Logger from "@server/logging/Logger";
import { PluginManager, PluginType } from "@server/utils/PluginManager";
import { requireDirectory } from "@server/utils/fs";
import BaseProcessor from "./BaseProcessor";
const processors = {};
const rootDir = env.ENVIRONMENT === "test" ? "" : "build";
requireDirectory<{ default: BaseProcessor }>(__dirname).forEach(
([module, id]) => {
@@ -17,14 +13,8 @@ requireDirectory<{ default: BaseProcessor }>(__dirname).forEach(
}
);
glob
.sync(path.join(rootDir, "plugins/*/server/processors/!(*.test).[jt]s"))
.forEach((filePath: string) => {
// eslint-disable-next-line @typescript-eslint/no-var-requires
const processor = require(path.join(process.cwd(), filePath)).default;
const name = path.basename(filePath, ".js");
processors[name] = processor;
Logger.debug("processor", `Registered processor ${name}`);
});
PluginManager.getEnabledPlugins(PluginType.Processor).forEach((plugin) => {
processors[plugin.id] = plugin.value;
});
export default processors;

View File

@@ -13,7 +13,7 @@ export enum TaskSchedule {
Hourly = "hourly",
}
export default abstract class BaseTask<T> {
export default abstract class BaseTask<T extends Record<string, any>> {
/**
* An optional schedule for this task to be run automatically.
*/

View File

@@ -6,7 +6,7 @@ import { UserFlag } from "@server/models/User";
import { sequelize } from "@server/storage/database";
import BaseTask, { TaskPriority, TaskSchedule } from "./BaseTask";
type Props = undefined;
type Props = Record<string, never>;
export default class InviteReminderTask extends BaseTask<Props> {
static cron = TaskSchedule.Daily;

View File

@@ -1,12 +1,8 @@
import path from "path";
import { glob } from "glob";
import env from "@server/env";
import Logger from "@server/logging/Logger";
import { PluginManager, PluginType } from "@server/utils/PluginManager";
import { requireDirectory } from "@server/utils/fs";
import BaseTask from "./BaseTask";
const tasks = {};
const rootDir = env.ENVIRONMENT === "test" ? "" : "build";
requireDirectory<{ default: BaseTask<any> }>(__dirname).forEach(
([module, id]) => {
@@ -17,14 +13,8 @@ requireDirectory<{ default: BaseTask<any> }>(__dirname).forEach(
}
);
glob
.sync(path.join(rootDir, "plugins/*/server/tasks/!(*.test).[jt]s"))
.forEach((filePath: string) => {
// eslint-disable-next-line @typescript-eslint/no-var-requires
const task = require(path.join(process.cwd(), filePath)).default;
const name = path.basename(filePath, ".js");
tasks[name] = task;
Logger.debug("task", `Registered task ${name}`);
});
PluginManager.getEnabledPlugins(PluginType.Processor).forEach((plugin) => {
tasks[plugin.id] = plugin.value;
});
export default tasks;