34 lines
798 B
TypeScript
34 lines
798 B
TypeScript
import fs from 'fs';
|
|
import path from 'path';
|
|
|
|
export interface ActionDefinition {
|
|
template: string;
|
|
params?: string[];
|
|
}
|
|
|
|
export interface ActionCatalog {
|
|
_comment?: string;
|
|
_version?: string;
|
|
_targetGroup?: string;
|
|
actions: Record<string, ActionDefinition>;
|
|
}
|
|
|
|
const CATALOG_PATH = path.join(__dirname, 'catalog.json');
|
|
|
|
let cachedCatalog: ActionCatalog | null = null;
|
|
|
|
export function loadActionCatalog(forceReload = false): ActionCatalog {
|
|
if (cachedCatalog && !forceReload) {
|
|
return cachedCatalog;
|
|
}
|
|
|
|
const raw = fs.readFileSync(CATALOG_PATH, 'utf-8');
|
|
cachedCatalog = JSON.parse(raw);
|
|
return cachedCatalog!;
|
|
}
|
|
|
|
export function getAction(actionKey: string): ActionDefinition | undefined {
|
|
const catalog = loadActionCatalog();
|
|
return catalog.actions[actionKey];
|
|
}
|