Skip to content

Commit

Permalink
feat(backend): add script service
Browse files Browse the repository at this point in the history
The script service allows other services to register re-runnable tasks
called "scripts". These can be invoked via "script:run" in the console.
  • Loading branch information
KernelDeimos committed Jun 5, 2024
1 parent 1416807 commit 30550fc
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 0 deletions.
3 changes: 3 additions & 0 deletions packages/backend/src/CoreModule.js
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,9 @@ const install = async ({ services, app }) => {

const { DriverService } = require("./services/drivers/DriverService");
services.registerService('driver', DriverService);

const { ScriptService } = require('./services/ScriptService');
services.registerService('script', ScriptService);
}

const install_legacy = async ({ services }) => {
Expand Down
47 changes: 47 additions & 0 deletions packages/backend/src/services/ScriptService.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
const BaseService = require("./BaseService");

class BackendScript {
constructor (name, fn) {
this.name = name;
this.fn = fn;
}

async run (ctx, args) {
return await this.fn(ctx, args);
}

}

class ScriptService extends BaseService {
_construct () {
this.scripts = [];
}

async _init () {
const svc_commands = this.services.get('commands');
svc_commands.registerCommands('script', [
{
id: 'run',
description: 'run a script',
handler: async (args, ctx) => {
const script_name = args.shift();
const script = this.scripts.find(s => s.name === script_name);
if ( ! script ) {
ctx.error(`script not found: ${script_name}`);
return;
}
await script.run(ctx, args);
}
}
]);
}

register (name, fn) {
this.scripts.push(new BackendScript(name, fn));
}
}

module.exports = {
ScriptService,
BackendScript,
};

0 comments on commit 30550fc

Please sign in to comment.