@arch-cadre/modules 0.0.49 → 0.0.52

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,180 +1,222 @@
1
+ "use strict";
1
2
  "use server";
2
3
 
3
- const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
4
- const require_manage = require('./manage.cjs');
5
- let _arch_cadre_core_server = require("@arch-cadre/core/server");
6
-
7
- //#region src/server/ui.ts
8
- /**
9
- * Helper to check and filter a navigation item based on roles and permissions.
10
- * Returns the item (potentially with filtered sub-items) or null if access is denied.
11
- */
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.getApiModuleRoutes = getApiModuleRoutes;
8
+ exports.getExtensions = getExtensions;
9
+ exports.getKryoModuleNavigationGrouped = getKryoModuleNavigationGrouped;
10
+ exports.getKryoModuleRoutes = getKryoModuleRoutes;
11
+ exports.getKryoPathPrefix = getKryoPathPrefix;
12
+ exports.getModuleNavigation = getModuleNavigation;
13
+ exports.getModuleNavigationGrouped = getModuleNavigationGrouped;
14
+ exports.getModuleWidgets = getModuleWidgets;
15
+ exports.getPrivateModuleRoutes = getPrivateModuleRoutes;
16
+ exports.getPublicModuleRoutes = getPublicModuleRoutes;
17
+ exports.hasExtension = hasExtension;
18
+ var _server = require("@arch-cadre/core/server");
19
+ var _manage = require("./manage.js");
12
20
  function filterNavItem(item, userRoles, userPermissions) {
13
- if (item.roles && item.roles.length > 0) {
14
- if (!item.roles.some((role) => userRoles.includes(role))) return null;
15
- }
16
- if (item.permissions && item.permissions.length > 0) {
17
- if (!item.permissions.every((perm) => userPermissions.includes(perm))) return null;
18
- }
19
- if (item.items && item.items.length > 0) {
20
- const filteredSubItems = item.items.map((subItem) => filterNavItem(subItem, userRoles, userPermissions)).filter((subItem) => subItem !== null);
21
- return {
22
- ...item,
23
- items: filteredSubItems
24
- };
25
- }
26
- return item;
21
+ if (item.roles && item.roles.length > 0) {
22
+ if (!item.roles.some(role => userRoles.includes(role))) {
23
+ return null;
24
+ }
25
+ }
26
+ if (item.permissions && item.permissions.length > 0) {
27
+ if (!item.permissions.every(perm => userPermissions.includes(perm))) {
28
+ return null;
29
+ }
30
+ }
31
+ if (item.items && item.items.length > 0) {
32
+ const filteredSubItems = item.items.map(subItem => filterNavItem(subItem, userRoles, userPermissions)).filter(subItem => subItem !== null);
33
+ return {
34
+ ...item,
35
+ items: filteredSubItems
36
+ };
37
+ }
38
+ return item;
27
39
  }
28
40
  async function getModuleNavigationGrouped(type) {
29
- const { user } = await (0, _arch_cadre_core_server.getCurrentSession)();
30
- const userRoles = user?.roles || [];
31
- const userPermissions = user?.permissions || [];
32
- const active = (await require_manage.getModules()).filter((m) => m.enabled);
33
- const groups = {};
34
- for (const mod of active) try {
35
- const instanceNav = (await require_manage.getModuleInstance(mod.id))?.navigation?.[type];
36
- if (instanceNav) for (const [groupName, items] of Object.entries(instanceNav)) {
37
- if (!groups[groupName]) groups[groupName] = [];
38
- for (const rawItem of items) {
39
- const item = filterNavItem(rawItem, userRoles, userPermissions);
40
- if (item && !groups[groupName].some((existing) => existing.url === item.url)) groups[groupName].push(item);
41
- }
42
- }
43
- } catch (_e) {
44
- console.warn(`[Kernel:UI] Failed to load navigation for module ${mod.id}:`, _e);
45
- }
46
- return groups;
41
+ const {
42
+ user
43
+ } = await (0, _server.getCurrentSession)();
44
+ const userRoles = user?.roles || [];
45
+ const userPermissions = user?.permissions || [];
46
+ const modules = await (0, _manage.getModules)();
47
+ const active = modules.filter(m => m.enabled);
48
+ const groups = {};
49
+ for (const mod of active) {
50
+ try {
51
+ const instance = await (0, _manage.getModuleInstance)(mod.id);
52
+ const instanceNav = instance?.navigation?.[type];
53
+ if (instanceNav) {
54
+ for (const [groupName, items] of Object.entries(instanceNav)) {
55
+ if (!groups[groupName]) groups[groupName] = [];
56
+ for (const rawItem of items) {
57
+ const item = filterNavItem(rawItem, userRoles, userPermissions);
58
+ if (item && !groups[groupName].some(existing => existing.url === item.url)) {
59
+ groups[groupName].push(item);
60
+ }
61
+ }
62
+ }
63
+ }
64
+ } catch (_e) {
65
+ console.warn(`[Kernel:UI] Failed to load navigation for module ${mod.id}:`, _e);
66
+ }
67
+ }
68
+ return groups;
47
69
  }
48
70
  async function getKryoPathPrefix() {
49
- try {
50
- return (await require_manage.getModuleConfig("kryo-panel"))?.pathPrefix ?? "/kryo";
51
- } catch (_e) {
52
- return "/kryo";
53
- }
71
+ try {
72
+ const config = await (0, _manage.getModuleConfig)("kryo-panel");
73
+ return config?.pathPrefix ?? "/kryo";
74
+ } catch (_e) {
75
+ return "/kryo";
76
+ }
54
77
  }
55
78
  async function getKryoModuleNavigationGrouped(type) {
56
- const groups = await getModuleNavigationGrouped(type);
57
- const prefix = await getKryoPathPrefix();
58
- const prefixUrl = (url) => {
59
- if (url.startsWith(prefix)) return url;
60
- return url === "/" ? prefix : `${prefix}${url}`;
61
- };
62
- const processItems = (items) => {
63
- return items.map((item) => ({
64
- ...item,
65
- url: prefixUrl(item.url),
66
- items: item.items ? processItems(item.items) : void 0
67
- }));
68
- };
69
- const transformedGroups = {};
70
- for (const [group, items] of Object.entries(groups)) transformedGroups[group] = processItems(items);
71
- return transformedGroups;
79
+ const groups = await getModuleNavigationGrouped(type);
80
+ const prefix = await getKryoPathPrefix();
81
+ const prefixUrl = url => {
82
+ if (url.startsWith(prefix)) return url;
83
+ return url === "/" ? prefix : `${prefix}${url}`;
84
+ };
85
+ const processItems = items => {
86
+ return items.map(item => ({
87
+ ...item,
88
+ url: prefixUrl(item.url),
89
+ items: item.items ? processItems(item.items) : void 0
90
+ }));
91
+ };
92
+ const transformedGroups = {};
93
+ for (const [group, items] of Object.entries(groups)) {
94
+ transformedGroups[group] = processItems(items);
95
+ }
96
+ return transformedGroups;
72
97
  }
73
98
  async function getModuleNavigation(type) {
74
- const { user } = await (0, _arch_cadre_core_server.getCurrentSession)();
75
- const userRoles = user?.roles || [];
76
- const userPermissions = user?.permissions || [];
77
- const active = (await require_manage.getModules()).filter((m) => m.enabled);
78
- const all = [];
79
- for (const mod of active) try {
80
- const instance = await require_manage.getModuleInstance(mod.id);
81
- if (instance?.navigation?.[type]) {
82
- const items = instance.navigation[type];
83
- for (const rawItem of items) {
84
- const item = filterNavItem(rawItem, userRoles, userPermissions);
85
- if (item) all.push(item);
86
- }
87
- }
88
- } catch {}
89
- return all;
99
+ const {
100
+ user
101
+ } = await (0, _server.getCurrentSession)();
102
+ const userRoles = user?.roles || [];
103
+ const userPermissions = user?.permissions || [];
104
+ const modules = await (0, _manage.getModules)();
105
+ const active = modules.filter(m => m.enabled);
106
+ const all = [];
107
+ for (const mod of active) {
108
+ try {
109
+ const instance = await (0, _manage.getModuleInstance)(mod.id);
110
+ if (instance?.navigation?.[type]) {
111
+ const items = instance.navigation[type];
112
+ for (const rawItem of items) {
113
+ const item = filterNavItem(rawItem, userRoles, userPermissions);
114
+ if (item) all.push(item);
115
+ }
116
+ }
117
+ } catch {}
118
+ }
119
+ return all;
90
120
  }
91
121
  async function getPublicModuleRoutes() {
92
- const active = (await require_manage.getModules()).filter((m) => m.enabled);
93
- const allRoutes = [];
94
- for (const mod of active) try {
95
- const instance = await require_manage.getModuleInstance(mod.id);
96
- if (instance?.routes?.public) allRoutes.push(...instance.routes.public);
97
- } catch {}
98
- return allRoutes;
122
+ const modules = await (0, _manage.getModules)();
123
+ const active = modules.filter(m => m.enabled);
124
+ const allRoutes = [];
125
+ for (const mod of active) {
126
+ try {
127
+ const instance = await (0, _manage.getModuleInstance)(mod.id);
128
+ if (instance?.routes?.public) {
129
+ allRoutes.push(...instance.routes.public);
130
+ }
131
+ } catch {}
132
+ }
133
+ return allRoutes;
99
134
  }
100
135
  async function getPrivateModuleRoutes() {
101
- const active = (await require_manage.getModules()).filter((m) => m.enabled);
102
- const allRoutes = [];
103
- for (const mod of active) try {
104
- const instance = await require_manage.getModuleInstance(mod.id);
105
- if (instance?.routes?.private) allRoutes.push(...instance.routes.private);
106
- } catch {}
107
- return allRoutes;
136
+ const modules = await (0, _manage.getModules)();
137
+ const active = modules.filter(m => m.enabled);
138
+ const allRoutes = [];
139
+ for (const mod of active) {
140
+ try {
141
+ const instance = await (0, _manage.getModuleInstance)(mod.id);
142
+ if (instance?.routes?.private) {
143
+ allRoutes.push(...instance.routes.private);
144
+ }
145
+ } catch {}
146
+ }
147
+ return allRoutes;
108
148
  }
109
149
  async function getKryoModuleRoutes() {
110
- const routes = await getPrivateModuleRoutes();
111
- const prefix = await getKryoPathPrefix();
112
- return routes.map((route) => ({
113
- ...route,
114
- path: route.path === "/" ? prefix : `${prefix}${route.path}`
115
- }));
150
+ const routes = await getPrivateModuleRoutes();
151
+ const prefix = await getKryoPathPrefix();
152
+ return routes.map(route => ({
153
+ ...route,
154
+ path: route.path === "/" ? prefix : `${prefix}${route.path}`
155
+ }));
116
156
  }
117
157
  async function getApiModuleRoutes() {
118
- const active = (await require_manage.getModules()).filter((m) => m.enabled);
119
- const allRoutes = [];
120
- for (const mod of active) try {
121
- const instance = await require_manage.getModuleInstance(mod.id);
122
- if (instance?.routes?.api) allRoutes.push(...instance.routes.api);
123
- } catch {}
124
- return allRoutes;
158
+ const modules = await (0, _manage.getModules)();
159
+ const active = modules.filter(m => m.enabled);
160
+ const allRoutes = [];
161
+ for (const mod of active) {
162
+ try {
163
+ const instance = await (0, _manage.getModuleInstance)(mod.id);
164
+ if (instance?.routes?.api) {
165
+ allRoutes.push(...instance.routes.api);
166
+ }
167
+ } catch {}
168
+ }
169
+ return allRoutes;
125
170
  }
126
171
  async function getModuleWidgets(area) {
127
- const active = (await require_manage.getModules()).filter((m) => m.enabled);
128
- const widgets = [];
129
- for (const mod of active) try {
130
- const instance = await require_manage.getModuleInstance(mod.id);
131
- if (instance?.widgets) {
132
- const matching = instance.widgets.filter((w) => w.area === area);
133
- widgets.push(...matching);
134
- }
135
- } catch (_e) {}
136
- return widgets.sort((a, b) => (a.priority || 0) - (b.priority || 0));
172
+ const modules = await (0, _manage.getModules)();
173
+ const active = modules.filter(m => m.enabled);
174
+ const widgets = [];
175
+ for (const mod of active) {
176
+ try {
177
+ const instance = await (0, _manage.getModuleInstance)(mod.id);
178
+ if (instance?.widgets) {
179
+ const matching = instance.widgets.filter(w => w.area === area);
180
+ widgets.push(...matching);
181
+ }
182
+ } catch (_e) {}
183
+ }
184
+ return widgets.sort((a, b) => (a.priority || 0) - (b.priority || 0));
137
185
  }
138
186
  async function getExtensions(targetModule, point) {
139
- const active = (await require_manage.getModules()).filter((m) => m.enabled);
140
- const extensions = [];
141
- for (const mod of active) try {
142
- const instance = await require_manage.getModuleInstance(mod.id);
143
- if (instance?.extensions) {
144
- const matching = instance.extensions.filter((ext) => {
145
- const isTarget = ext.targetModule === targetModule;
146
- const isPoint = point ? ext.point === point : true;
147
- return isTarget && isPoint;
148
- });
149
- extensions.push(...matching);
150
- }
151
- } catch (_e) {}
152
- return extensions.sort((a, b) => (a.priority || 0) - (b.priority || 0));
187
+ const modules = await (0, _manage.getModules)();
188
+ const active = modules.filter(m => m.enabled);
189
+ const extensions = [];
190
+ for (const mod of active) {
191
+ try {
192
+ const instance = await (0, _manage.getModuleInstance)(mod.id);
193
+ if (instance?.extensions) {
194
+ const matching = instance.extensions.filter(ext => {
195
+ const isTarget = ext.targetModule === targetModule;
196
+ const isPoint = point ? ext.point === point : true;
197
+ return isTarget && isPoint;
198
+ });
199
+ extensions.push(...matching);
200
+ }
201
+ } catch (_e) {}
202
+ }
203
+ return extensions.sort((a, b) => (a.priority || 0) - (b.priority || 0));
153
204
  }
154
205
  async function hasExtension(targetModule, point) {
155
- const active = (await require_manage.getModules()).filter((m) => m.enabled);
156
- for (const mod of active) try {
157
- const instance = await require_manage.getModuleInstance(mod.id);
158
- if (instance?.extensions) {
159
- if (instance.extensions.filter((ext) => {
160
- const isTarget = ext.targetModule === targetModule;
161
- const isPoint = point ? ext.point === point : true;
162
- return isTarget && isPoint;
163
- }).length > 0) return true;
164
- }
165
- } catch (_e) {}
166
- return false;
167
- }
168
-
169
- //#endregion
170
- exports.getApiModuleRoutes = getApiModuleRoutes;
171
- exports.getExtensions = getExtensions;
172
- exports.getKryoModuleNavigationGrouped = getKryoModuleNavigationGrouped;
173
- exports.getKryoModuleRoutes = getKryoModuleRoutes;
174
- exports.getKryoPathPrefix = getKryoPathPrefix;
175
- exports.getModuleNavigation = getModuleNavigation;
176
- exports.getModuleNavigationGrouped = getModuleNavigationGrouped;
177
- exports.getModuleWidgets = getModuleWidgets;
178
- exports.getPrivateModuleRoutes = getPrivateModuleRoutes;
179
- exports.getPublicModuleRoutes = getPublicModuleRoutes;
180
- exports.hasExtension = hasExtension;
206
+ const modules = await (0, _manage.getModules)();
207
+ const active = modules.filter(m => m.enabled);
208
+ for (const mod of active) {
209
+ try {
210
+ const instance = await (0, _manage.getModuleInstance)(mod.id);
211
+ if (instance?.extensions) {
212
+ const matching = instance.extensions.filter(ext => {
213
+ const isTarget = ext.targetModule === targetModule;
214
+ const isPoint = point ? ext.point === point : true;
215
+ return isTarget && isPoint;
216
+ });
217
+ if (matching.length > 0) return true;
218
+ }
219
+ } catch (_e) {}
220
+ }
221
+ return false;
222
+ }
@@ -0,0 +1,12 @@
1
+ import type { ApiRouteDefinition, ModuleExtension, ModuleNavElement, ModuleWidget, PrivateRouteDefinition, PublicRouteDefinition } from "../types.js";
2
+ export declare function getModuleNavigationGrouped(type: "admin" | "settings"): Promise<Record<string, ModuleNavElement[]>>;
3
+ export declare function getKryoPathPrefix(): Promise<string>;
4
+ export declare function getKryoModuleNavigationGrouped(type: "admin" | "settings"): Promise<Record<string, ModuleNavElement[]>>;
5
+ export declare function getModuleNavigation(type: "public"): Promise<ModuleNavElement[]>;
6
+ export declare function getPublicModuleRoutes(): Promise<PublicRouteDefinition[]>;
7
+ export declare function getPrivateModuleRoutes(): Promise<PrivateRouteDefinition[]>;
8
+ export declare function getKryoModuleRoutes(): Promise<PrivateRouteDefinition[]>;
9
+ export declare function getApiModuleRoutes(): Promise<ApiRouteDefinition[]>;
10
+ export declare function getModuleWidgets(area: string): Promise<ModuleWidget[]>;
11
+ export declare function getExtensions(targetModule: string, point?: string): Promise<ModuleExtension[]>;
12
+ export declare function hasExtension(targetModule: string, point?: string): Promise<boolean>;