feat(modules): add external module registration and defineModule support
- Add `./modules/define` export path pointing to `defineModule.js` - Implement `registerExternalModules()` to handle modules passed via `zen.config.js`, with env var gating (`ZEN_MODULE_<NAME>=true`) - Extract `buildAdminConfig()` helper to consolidate admin navigation/page config building - Refactor `loadModuleConfig()` to use `buildAdminConfig()` and simplify public routes check - Improve `initializeModuleTables()` to gracefully skip modules without `db.js` instead of erroring - Update module discovery JSDoc to reflect external module registration support
This commit is contained in:
@@ -1,37 +1,36 @@
|
||||
/**
|
||||
* Module Actions Registry (Server-Side)
|
||||
*
|
||||
* Import server actions for public pages (/zen/*) and dashboard.
|
||||
* Admin pages import actions directly from modules.
|
||||
* See modules.registry.js for full module creation guide.
|
||||
*
|
||||
* Usage in consuming Next.js app:
|
||||
* ```
|
||||
* import { MODULE_ACTIONS, MODULE_DASHBOARD_ACTIONS } from '@hykocx/zen/modules/actions';
|
||||
*
|
||||
* // Access module actions
|
||||
* const { getInvoiceByTokenAction } = MODULE_ACTIONS.invoice;
|
||||
*
|
||||
* // Get dashboard stats
|
||||
* const stats = await MODULE_DASHBOARD_ACTIONS.invoice();
|
||||
* ```
|
||||
*
|
||||
* Static registry for internal module server actions.
|
||||
* External modules registered via zen.config.js are resolved through the runtime registry.
|
||||
*
|
||||
* Usage:
|
||||
* import { getModuleActions } from '@hykocx/zen/modules/actions';
|
||||
* const { getInvoiceByToken } = getModuleActions('invoice');
|
||||
*/
|
||||
|
||||
// Register module actions (for public pages)
|
||||
import { getModule } from '../core/modules/registry.js';
|
||||
|
||||
// Static actions for internal modules (add entries here for new internal modules)
|
||||
export const MODULE_ACTIONS = {
|
||||
posts: {},
|
||||
};
|
||||
|
||||
// Register dashboard stats actions (for admin dashboard)
|
||||
// Static dashboard stats actions for internal modules
|
||||
export const MODULE_DASHBOARD_ACTIONS = {};
|
||||
|
||||
/**
|
||||
* Get actions for a specific module
|
||||
* Get actions for a specific module.
|
||||
* Checks the static registry first, then the runtime registry for external modules.
|
||||
*
|
||||
* @param {string} moduleName - Module name
|
||||
* @returns {Object} Module actions object or empty object
|
||||
*/
|
||||
export function getModuleActions(moduleName) {
|
||||
return MODULE_ACTIONS[moduleName] || {};
|
||||
if (MODULE_ACTIONS[moduleName]) return MODULE_ACTIONS[moduleName];
|
||||
|
||||
// External modules declare their actions in their defineModule() config
|
||||
return getModule(moduleName)?.actions ?? {};
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user