@arch-cadre/modules 0.0.54 → 0.0.56

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,99 +1 @@
1
- "use server";
2
- import { eventBus, systemModulesTable } from "@arch-cadre/core";
3
- import { db } from "@arch-cadre/core/server";
4
- import { eq } from "drizzle-orm";
5
- import { getModuleInstance, getModules, isModuleEnabled } from "./manage.mjs";
6
- const globalForRegistry = globalThis;
7
- export async function initModules(force = false) {
8
- if (globalForRegistry.__KRYO_MODULES_INITIALIZED__ && !force) return;
9
- if (force) {
10
- console.log("[Kernel:Registry] Forcing re-initialization...");
11
- eventBus.clearAll();
12
- }
13
- console.log("[Kernel:Registry] Synchronizing module listeners...");
14
- globalForRegistry.__KRYO_MODULES_INITIALIZED__ = true;
15
- await eventBus.publish("system:modules:init:start", {
16
- timestamp: Date.now()
17
- });
18
- const processedModuleIds = /* @__PURE__ */ new Set();
19
- let hasNewModules = true;
20
- let iterations = 0;
21
- const MAX_ITERATIONS = 10;
22
- while (hasNewModules && iterations < MAX_ITERATIONS) {
23
- hasNewModules = false;
24
- iterations++;
25
- const currentModules = await getModules();
26
- const pendingModules = currentModules.filter(
27
- (mod) => !processedModuleIds.has(mod.id)
28
- );
29
- if (pendingModules.length === 0) {
30
- break;
31
- }
32
- for (const mod of pendingModules) {
33
- try {
34
- await db.insert(systemModulesTable).values({
35
- id: mod.id,
36
- enabled: mod.system ?? false,
37
- installed: mod.system ?? false,
38
- system: mod.system ?? false
39
- }).onConflictDoNothing();
40
- } catch (_e) {
41
- }
42
- }
43
- const sortedPending = [...pendingModules].sort(
44
- (a, b) => a.system === b.system ? 0 : a.system ? -1 : 1
45
- );
46
- for (const mod of sortedPending) {
47
- processedModuleIds.add(mod.id);
48
- hasNewModules = true;
49
- try {
50
- const enabled = await isModuleEnabled(mod.id);
51
- if (!enabled) continue;
52
- const instance = await getModuleInstance(mod.id);
53
- if (!instance) {
54
- console.warn(
55
- `[Kernel:Registry] No instance found for module ${mod.id}. Ensure it is registered correctly.`
56
- );
57
- continue;
58
- }
59
- let dbMod = null;
60
- try {
61
- [dbMod] = await db.select().from(systemModulesTable).where(eq(systemModulesTable.id, mod.id));
62
- } catch (_e) {
63
- }
64
- if (enabled && (!dbMod || !dbMod.installed)) {
65
- console.log(`[Kernel:Registry] Installing module ${mod.id}...`);
66
- if (instance.onMigrate) {
67
- console.log(`[Kernel:Registry] Running onMigrate for ${mod.id}...`);
68
- await instance.onMigrate();
69
- }
70
- console.log(`[Kernel:Registry] Running onEnable for ${mod.id}...`);
71
- if (instance.onEnable) await instance.onEnable();
72
- try {
73
- await db.update(systemModulesTable).set({ installed: true, lastStep: null }).where(eq(systemModulesTable.id, mod.id));
74
- } catch (_e) {
75
- }
76
- }
77
- if (instance.init) {
78
- console.log(`[Kernel:Registry] Initializing ${mod.id}...`);
79
- await instance.init();
80
- console.log(`[Kernel:Registry] Module ${mod.id} is active.`);
81
- }
82
- } catch (error) {
83
- console.error(
84
- `[Kernel:Registry] Critical failure for ${mod.id}:`,
85
- error
86
- );
87
- }
88
- }
89
- }
90
- if (iterations >= MAX_ITERATIONS) {
91
- console.warn(
92
- "[Kernel:Registry] Max init iterations reached. Check for circular module registrations."
93
- );
94
- }
95
- await eventBus.publish("system:modules:init:end", {
96
- timestamp: Date.now(),
97
- moduleCount: processedModuleIds.size
98
- });
99
- }
1
+ "use server";import{getModuleInstance as e,getModules as t,isModuleEnabled as n}from"./manage.mjs";import{db as r}from"@arch-cadre/core/server";import{eventBus as i,systemModulesTable as a}from"@arch-cadre/core";import{eq as o}from"drizzle-orm";const s=globalThis;async function c(c=!1){if(s.__KRYO_MODULES_INITIALIZED__&&!c)return;c&&(console.log(`[Kernel:Registry] Forcing re-initialization...`),i.clearAll()),console.log(`[Kernel:Registry] Synchronizing module listeners...`),s.__KRYO_MODULES_INITIALIZED__=!0,await i.publish(`system:modules:init:start`,{timestamp:Date.now()});let l=new Set,u=!0,d=0;for(;u&&d<10;){u=!1,d++;let i=(await t()).filter(e=>!l.has(e.id));if(i.length===0)break;for(let e of i)try{await r.insert(a).values({id:e.id,enabled:e.system??!1,installed:e.system??!1,system:e.system??!1}).onConflictDoNothing()}catch{}let s=[...i].sort((e,t)=>e.system===t.system?0:e.system?-1:1);for(let t of s){l.add(t.id),u=!0;try{let i=await n(t.id);if(!i)continue;let s=await e(t.id);if(!s){console.warn(`[Kernel:Registry] No instance found for module ${t.id}. Ensure it is registered correctly.`);continue}let c=null;try{[c]=await r.select().from(a).where(o(a.id,t.id))}catch{}if(i&&(!c||!c.installed)){console.log(`[Kernel:Registry] Installing module ${t.id}...`),s.onMigrate&&(console.log(`[Kernel:Registry] Running onMigrate for ${t.id}...`),await s.onMigrate()),console.log(`[Kernel:Registry] Running onEnable for ${t.id}...`),s.onEnable&&await s.onEnable();try{await r.update(a).set({installed:!0,lastStep:null}).where(o(a.id,t.id))}catch{}}s.init&&(console.log(`[Kernel:Registry] Initializing ${t.id}...`),await s.init(),console.log(`[Kernel:Registry] Module ${t.id} is active.`))}catch(e){console.error(`[Kernel:Registry] Critical failure for ${t.id}:`,e)}}}d>=10&&console.warn(`[Kernel:Registry] Max init iterations reached. Check for circular module registrations.`),await i.publish(`system:modules:init:end`,{timestamp:Date.now(),moduleCount:l.size})}export{c as initModules};
@@ -1,222 +1 @@
1
- "use strict";
2
- "use server";
3
-
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.cjs");
20
- function filterNavItem(item, userRoles, userPermissions) {
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;
39
- }
40
- async function getModuleNavigationGrouped(type) {
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;
69
- }
70
- async function getKryoPathPrefix() {
71
- try {
72
- const config = await (0, _manage.getModuleConfig)("kryo-panel");
73
- return config?.pathPrefix ?? "/kryo";
74
- } catch (_e) {
75
- return "/kryo";
76
- }
77
- }
78
- async function getKryoModuleNavigationGrouped(type) {
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;
97
- }
98
- async function getModuleNavigation(type) {
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;
120
- }
121
- async function getPublicModuleRoutes() {
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;
134
- }
135
- async function getPrivateModuleRoutes() {
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;
148
- }
149
- async function getKryoModuleRoutes() {
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
- }));
156
- }
157
- async function getApiModuleRoutes() {
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;
170
- }
171
- async function getModuleWidgets(area) {
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));
185
- }
186
- async function getExtensions(targetModule, point) {
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));
204
- }
205
- async function hasExtension(targetModule, point) {
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
- }
1
+ "use server";require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./manage.cjs`);let t=require(`@arch-cadre/core/server`);function n(e,t,r){if(e.roles&&e.roles.length>0&&!e.roles.some(e=>t.includes(e))||e.permissions&&e.permissions.length>0&&!e.permissions.every(e=>r.includes(e)))return null;if(e.items&&e.items.length>0){let i=e.items.map(e=>n(e,t,r)).filter(e=>e!==null);return{...e,items:i}}return e}async function r(r){let{user:i}=await(0,t.getCurrentSession)(),a=i?.roles||[],o=i?.permissions||[],s=(await e.getModules()).filter(e=>e.enabled),c={};for(let t of s)try{let i=(await e.getModuleInstance(t.id))?.navigation?.[r];if(i)for(let[e,t]of Object.entries(i)){c[e]||(c[e]=[]);for(let r of t){let t=n(r,a,o);t&&!c[e].some(e=>e.url===t.url)&&c[e].push(t)}}}catch(e){console.warn(`[Kernel:UI] Failed to load navigation for module ${t.id}:`,e)}return c}async function i(){try{return(await e.getModuleConfig(`kryo-panel`))?.pathPrefix??`/kryo`}catch{return`/kryo`}}async function a(e){let t=await r(e),n=await i(),a=e=>e.startsWith(n)?e:e===`/`?n:`${n}${e}`,o=e=>e.map(e=>({...e,url:a(e.url),items:e.items?o(e.items):void 0})),s={};for(let[e,n]of Object.entries(t))s[e]=o(n);return s}async function o(r){let{user:i}=await(0,t.getCurrentSession)(),a=i?.roles||[],o=i?.permissions||[],s=(await e.getModules()).filter(e=>e.enabled),c=[];for(let t of s)try{let i=await e.getModuleInstance(t.id);if(i?.navigation?.[r]){let e=i.navigation[r];for(let t of e){let e=n(t,a,o);e&&c.push(e)}}}catch{}return c}async function s(){let t=(await e.getModules()).filter(e=>e.enabled),n=[];for(let r of t)try{let t=await e.getModuleInstance(r.id);t?.routes?.public&&n.push(...t.routes.public)}catch{}return n}async function c(){let t=(await e.getModules()).filter(e=>e.enabled),n=[];for(let r of t)try{let t=await e.getModuleInstance(r.id);t?.routes?.private&&n.push(...t.routes.private)}catch{}return n}async function l(){let e=await c(),t=await i();return e.map(e=>({...e,path:e.path===`/`?t:`${t}${e.path}`}))}async function u(){let t=(await e.getModules()).filter(e=>e.enabled),n=[];for(let r of t)try{let t=await e.getModuleInstance(r.id);t?.routes?.api&&n.push(...t.routes.api)}catch{}return n}async function d(t){let n=(await e.getModules()).filter(e=>e.enabled),r=[];for(let i of n)try{let n=await e.getModuleInstance(i.id);if(n?.widgets){let e=n.widgets.filter(e=>e.area===t);r.push(...e)}}catch{}return r.sort((e,t)=>(e.priority||0)-(t.priority||0))}async function f(t,n){let r=(await e.getModules()).filter(e=>e.enabled),i=[];for(let a of r)try{let r=await e.getModuleInstance(a.id);if(r?.extensions){let e=r.extensions.filter(e=>{let r=e.targetModule===t,i=n?e.point===n:!0;return r&&i});i.push(...e)}}catch{}return i.sort((e,t)=>(e.priority||0)-(t.priority||0))}async function p(t,n){let r=(await e.getModules()).filter(e=>e.enabled);for(let i of r)try{let r=await e.getModuleInstance(i.id);if(r?.extensions&&r.extensions.filter(e=>{let r=e.targetModule===t,i=n?e.point===n:!0;return r&&i}).length>0)return!0}catch{}return!1}exports.getApiModuleRoutes=u,exports.getExtensions=f,exports.getKryoModuleNavigationGrouped=a,exports.getKryoModuleRoutes=l,exports.getKryoPathPrefix=i,exports.getModuleNavigation=o,exports.getModuleNavigationGrouped=r,exports.getModuleWidgets=d,exports.getPrivateModuleRoutes=c,exports.getPublicModuleRoutes=s,exports.hasExtension=p;
@@ -1,218 +1 @@
1
- "use server";
2
- import { getCurrentSession } from "@arch-cadre/core/server";
3
- import { getModuleConfig, getModuleInstance, getModules } from "./manage.mjs";
4
- function filterNavItem(item, userRoles, userPermissions) {
5
- if (item.roles && item.roles.length > 0) {
6
- if (!item.roles.some((role) => userRoles.includes(role))) {
7
- return null;
8
- }
9
- }
10
- if (item.permissions && item.permissions.length > 0) {
11
- if (!item.permissions.every((perm) => userPermissions.includes(perm))) {
12
- return null;
13
- }
14
- }
15
- if (item.items && item.items.length > 0) {
16
- const filteredSubItems = item.items.map(
17
- (subItem) => filterNavItem(subItem, userRoles, userPermissions)
18
- ).filter((subItem) => subItem !== null);
19
- return {
20
- ...item,
21
- items: filteredSubItems
22
- };
23
- }
24
- return item;
25
- }
26
- export async function getModuleNavigationGrouped(type) {
27
- const { user } = await getCurrentSession();
28
- const userRoles = user?.roles || [];
29
- const userPermissions = user?.permissions || [];
30
- const modules = await getModules();
31
- const active = modules.filter((m) => m.enabled);
32
- const groups = {};
33
- for (const mod of active) {
34
- try {
35
- const instance = await getModuleInstance(mod.id);
36
- const instanceNav = instance?.navigation?.[type];
37
- if (instanceNav) {
38
- for (const [groupName, items] of Object.entries(
39
- instanceNav
40
- )) {
41
- if (!groups[groupName]) groups[groupName] = [];
42
- for (const rawItem of items) {
43
- const item = filterNavItem(rawItem, userRoles, userPermissions);
44
- if (item && !groups[groupName].some((existing) => existing.url === item.url)) {
45
- groups[groupName].push(item);
46
- }
47
- }
48
- }
49
- }
50
- } catch (_e) {
51
- console.warn(
52
- `[Kernel:UI] Failed to load navigation for module ${mod.id}:`,
53
- _e
54
- );
55
- }
56
- }
57
- return groups;
58
- }
59
- export async function getKryoPathPrefix() {
60
- try {
61
- const config = await getModuleConfig("kryo-panel");
62
- return config?.pathPrefix ?? "/kryo";
63
- } catch (_e) {
64
- return "/kryo";
65
- }
66
- }
67
- export async function getKryoModuleNavigationGrouped(type) {
68
- const groups = await getModuleNavigationGrouped(type);
69
- const prefix = await getKryoPathPrefix();
70
- const prefixUrl = (url) => {
71
- if (url.startsWith(prefix)) return url;
72
- return url === "/" ? prefix : `${prefix}${url}`;
73
- };
74
- const processItems = (items) => {
75
- return items.map((item) => ({
76
- ...item,
77
- url: prefixUrl(item.url),
78
- items: item.items ? processItems(item.items) : void 0
79
- }));
80
- };
81
- const transformedGroups = {};
82
- for (const [group, items] of Object.entries(groups)) {
83
- transformedGroups[group] = processItems(items);
84
- }
85
- return transformedGroups;
86
- }
87
- export async function getModuleNavigation(type) {
88
- const { user } = await getCurrentSession();
89
- const userRoles = user?.roles || [];
90
- const userPermissions = user?.permissions || [];
91
- const modules = await getModules();
92
- const active = modules.filter((m) => m.enabled);
93
- const all = [];
94
- for (const mod of active) {
95
- try {
96
- const instance = await getModuleInstance(mod.id);
97
- if (instance?.navigation?.[type]) {
98
- const items = instance.navigation[type];
99
- for (const rawItem of items) {
100
- const item = filterNavItem(rawItem, userRoles, userPermissions);
101
- if (item) all.push(item);
102
- }
103
- }
104
- } catch {
105
- }
106
- }
107
- return all;
108
- }
109
- export async function getPublicModuleRoutes() {
110
- const modules = await getModules();
111
- const active = modules.filter((m) => m.enabled);
112
- const allRoutes = [];
113
- for (const mod of active) {
114
- try {
115
- const instance = await getModuleInstance(mod.id);
116
- if (instance?.routes?.public) {
117
- allRoutes.push(...instance.routes.public);
118
- }
119
- } catch {
120
- }
121
- }
122
- return allRoutes;
123
- }
124
- export async function getPrivateModuleRoutes() {
125
- const modules = await getModules();
126
- const active = modules.filter((m) => m.enabled);
127
- const allRoutes = [];
128
- for (const mod of active) {
129
- try {
130
- const instance = await getModuleInstance(mod.id);
131
- if (instance?.routes?.private) {
132
- allRoutes.push(...instance.routes.private);
133
- }
134
- } catch {
135
- }
136
- }
137
- return allRoutes;
138
- }
139
- export async function getKryoModuleRoutes() {
140
- const routes = await getPrivateModuleRoutes();
141
- const prefix = await getKryoPathPrefix();
142
- return routes.map((route) => ({
143
- ...route,
144
- path: route.path === "/" ? prefix : `${prefix}${route.path}`
145
- }));
146
- }
147
- export async function getApiModuleRoutes() {
148
- const modules = await getModules();
149
- const active = modules.filter((m) => m.enabled);
150
- const allRoutes = [];
151
- for (const mod of active) {
152
- try {
153
- const instance = await getModuleInstance(mod.id);
154
- if (instance?.routes?.api) {
155
- allRoutes.push(...instance.routes.api);
156
- }
157
- } catch {
158
- }
159
- }
160
- return allRoutes;
161
- }
162
- export async function getModuleWidgets(area) {
163
- const modules = await getModules();
164
- const active = modules.filter((m) => m.enabled);
165
- const widgets = [];
166
- for (const mod of active) {
167
- try {
168
- const instance = await getModuleInstance(mod.id);
169
- if (instance?.widgets) {
170
- const matching = instance.widgets.filter(
171
- (w) => w.area === area
172
- );
173
- widgets.push(...matching);
174
- }
175
- } catch (_e) {
176
- }
177
- }
178
- return widgets.sort((a, b) => (a.priority || 0) - (b.priority || 0));
179
- }
180
- export async function getExtensions(targetModule, point) {
181
- const modules = await getModules();
182
- const active = modules.filter((m) => m.enabled);
183
- const extensions = [];
184
- for (const mod of active) {
185
- try {
186
- const instance = await getModuleInstance(mod.id);
187
- if (instance?.extensions) {
188
- const matching = instance.extensions.filter((ext) => {
189
- const isTarget = ext.targetModule === targetModule;
190
- const isPoint = point ? ext.point === point : true;
191
- return isTarget && isPoint;
192
- });
193
- extensions.push(...matching);
194
- }
195
- } catch (_e) {
196
- }
197
- }
198
- return extensions.sort((a, b) => (a.priority || 0) - (b.priority || 0));
199
- }
200
- export async function hasExtension(targetModule, point) {
201
- const modules = await getModules();
202
- const active = modules.filter((m) => m.enabled);
203
- for (const mod of active) {
204
- try {
205
- const instance = await getModuleInstance(mod.id);
206
- if (instance?.extensions) {
207
- const matching = instance.extensions.filter((ext) => {
208
- const isTarget = ext.targetModule === targetModule;
209
- const isPoint = point ? ext.point === point : true;
210
- return isTarget && isPoint;
211
- });
212
- if (matching.length > 0) return true;
213
- }
214
- } catch (_e) {
215
- }
216
- }
217
- return false;
218
- }
1
+ "use server";import{getModuleConfig as e,getModuleInstance as t,getModules as n}from"./manage.mjs";import{getCurrentSession as r}from"@arch-cadre/core/server";function i(e,t,n){if(e.roles&&e.roles.length>0&&!e.roles.some(e=>t.includes(e))||e.permissions&&e.permissions.length>0&&!e.permissions.every(e=>n.includes(e)))return null;if(e.items&&e.items.length>0){let r=e.items.map(e=>i(e,t,n)).filter(e=>e!==null);return{...e,items:r}}return e}async function a(e){let{user:a}=await r(),o=a?.roles||[],s=a?.permissions||[],c=(await n()).filter(e=>e.enabled),l={};for(let n of c)try{let r=(await t(n.id))?.navigation?.[e];if(r)for(let[e,t]of Object.entries(r)){l[e]||(l[e]=[]);for(let n of t){let t=i(n,o,s);t&&!l[e].some(e=>e.url===t.url)&&l[e].push(t)}}}catch(e){console.warn(`[Kernel:UI] Failed to load navigation for module ${n.id}:`,e)}return l}async function o(){try{return(await e(`kryo-panel`))?.pathPrefix??`/kryo`}catch{return`/kryo`}}async function s(e){let t=await a(e),n=await o(),r=e=>e.startsWith(n)?e:e===`/`?n:`${n}${e}`,i=e=>e.map(e=>({...e,url:r(e.url),items:e.items?i(e.items):void 0})),s={};for(let[e,n]of Object.entries(t))s[e]=i(n);return s}async function c(e){let{user:a}=await r(),o=a?.roles||[],s=a?.permissions||[],c=(await n()).filter(e=>e.enabled),l=[];for(let n of c)try{let r=await t(n.id);if(r?.navigation?.[e]){let t=r.navigation[e];for(let e of t){let t=i(e,o,s);t&&l.push(t)}}}catch{}return l}async function l(){let e=(await n()).filter(e=>e.enabled),r=[];for(let n of e)try{let e=await t(n.id);e?.routes?.public&&r.push(...e.routes.public)}catch{}return r}async function u(){let e=(await n()).filter(e=>e.enabled),r=[];for(let n of e)try{let e=await t(n.id);e?.routes?.private&&r.push(...e.routes.private)}catch{}return r}async function d(){let e=await u(),t=await o();return e.map(e=>({...e,path:e.path===`/`?t:`${t}${e.path}`}))}async function f(){let e=(await n()).filter(e=>e.enabled),r=[];for(let n of e)try{let e=await t(n.id);e?.routes?.api&&r.push(...e.routes.api)}catch{}return r}async function p(e){let r=(await n()).filter(e=>e.enabled),i=[];for(let n of r)try{let r=await t(n.id);if(r?.widgets){let t=r.widgets.filter(t=>t.area===e);i.push(...t)}}catch{}return i.sort((e,t)=>(e.priority||0)-(t.priority||0))}async function m(e,r){let i=(await n()).filter(e=>e.enabled),a=[];for(let n of i)try{let i=await t(n.id);if(i?.extensions){let t=i.extensions.filter(t=>{let n=t.targetModule===e,i=r?t.point===r:!0;return n&&i});a.push(...t)}}catch{}return a.sort((e,t)=>(e.priority||0)-(t.priority||0))}async function h(e,r){let i=(await n()).filter(e=>e.enabled);for(let n of i)try{let i=await t(n.id);if(i?.extensions&&i.extensions.filter(t=>{let n=t.targetModule===e,i=r?t.point===r:!0;return n&&i}).length>0)return!0}catch{}return!1}export{f as getApiModuleRoutes,m as getExtensions,s as getKryoModuleNavigationGrouped,d as getKryoModuleRoutes,o as getKryoPathPrefix,c as getModuleNavigation,a as getModuleNavigationGrouped,p as getModuleWidgets,u as getPrivateModuleRoutes,l as getPublicModuleRoutes,h as hasExtension};
package/dist/server.cjs CHANGED
@@ -1,60 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- var _lifecycle = require("./server/lifecycle.cjs");
7
- Object.keys(_lifecycle).forEach(function (key) {
8
- if (key === "default" || key === "__esModule") return;
9
- if (key in exports && exports[key] === _lifecycle[key]) return;
10
- Object.defineProperty(exports, key, {
11
- enumerable: true,
12
- get: function () {
13
- return _lifecycle[key];
14
- }
15
- });
16
- });
17
- var _manage = require("./server/manage.cjs");
18
- Object.keys(_manage).forEach(function (key) {
19
- if (key === "default" || key === "__esModule") return;
20
- if (key in exports && exports[key] === _manage[key]) return;
21
- Object.defineProperty(exports, key, {
22
- enumerable: true,
23
- get: function () {
24
- return _manage[key];
25
- }
26
- });
27
- });
28
- var _registry = require("./server/registry.cjs");
29
- Object.keys(_registry).forEach(function (key) {
30
- if (key === "default" || key === "__esModule") return;
31
- if (key in exports && exports[key] === _registry[key]) return;
32
- Object.defineProperty(exports, key, {
33
- enumerable: true,
34
- get: function () {
35
- return _registry[key];
36
- }
37
- });
38
- });
39
- var _ui = require("./server/ui.cjs");
40
- Object.keys(_ui).forEach(function (key) {
41
- if (key === "default" || key === "__esModule") return;
42
- if (key in exports && exports[key] === _ui[key]) return;
43
- Object.defineProperty(exports, key, {
44
- enumerable: true,
45
- get: function () {
46
- return _ui[key];
47
- }
48
- });
49
- });
50
- var _types = require("./types.cjs");
51
- Object.keys(_types).forEach(function (key) {
52
- if (key === "default" || key === "__esModule") return;
53
- if (key in exports && exports[key] === _types[key]) return;
54
- Object.defineProperty(exports, key, {
55
- enumerable: true,
56
- get: function () {
57
- return _types[key];
58
- }
59
- });
60
- });
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./types.cjs`),t=require(`./server/manage.cjs`),n=require(`./server/ui.cjs`),r=require(`./server/lifecycle.cjs`),i=require(`./server/registry.cjs`);exports.ModuleManifestSchema=e.ModuleManifestSchema,exports.getApiModuleRoutes=n.getApiModuleRoutes,exports.getExtensions=n.getExtensions,exports.getKryoModuleNavigationGrouped=n.getKryoModuleNavigationGrouped,exports.getKryoModuleRoutes=n.getKryoModuleRoutes,exports.getKryoPathPrefix=n.getKryoPathPrefix,exports.getModuleConfig=t.getModuleConfig,exports.getModuleInstance=t.getModuleInstance,exports.getModuleNavigation=n.getModuleNavigation,exports.getModuleNavigationGrouped=n.getModuleNavigationGrouped,exports.getModuleStatus=t.getModuleStatus,exports.getModuleWidgets=n.getModuleWidgets,exports.getModules=t.getModules,exports.getPrivateModuleRoutes=n.getPrivateModuleRoutes,exports.getPublicModuleRoutes=n.getPublicModuleRoutes,exports.hasExtension=n.hasExtension,exports.initModules=i.initModules,exports.initOperationalModules=r.initOperationalModules,exports.isModuleEnabled=t.isModuleEnabled,exports.pushModuleSchema=r.pushModuleSchema,exports.registerModules=t.registerModules,exports.toggleModuleState=r.toggleModuleState,exports.updateModuleConfig=t.updateModuleConfig;
package/dist/server.mjs CHANGED
@@ -1,5 +1 @@
1
- export * from "./server/lifecycle.mjs";
2
- export * from "./server/manage.mjs";
3
- export * from "./server/registry.mjs";
4
- export * from "./server/ui.mjs";
5
- export * from "./types.mjs";
1
+ import{ModuleManifestSchema as e}from"./types.mjs";import{getModuleConfig as t,getModuleInstance as n,getModuleStatus as r,getModules as i,isModuleEnabled as a,registerModules as o,updateModuleConfig as s}from"./server/manage.mjs";import{getApiModuleRoutes as c,getExtensions as l,getKryoModuleNavigationGrouped as u,getKryoModuleRoutes as d,getKryoPathPrefix as f,getModuleNavigation as p,getModuleNavigationGrouped as m,getModuleWidgets as h,getPrivateModuleRoutes as g,getPublicModuleRoutes as _,hasExtension as v}from"./server/ui.mjs";import{initOperationalModules as y,pushModuleSchema as b,toggleModuleState as x}from"./server/lifecycle.mjs";import{initModules as S}from"./server/registry.mjs";export{e as ModuleManifestSchema,c as getApiModuleRoutes,l as getExtensions,u as getKryoModuleNavigationGrouped,d as getKryoModuleRoutes,f as getKryoPathPrefix,t as getModuleConfig,n as getModuleInstance,p as getModuleNavigation,m as getModuleNavigationGrouped,r as getModuleStatus,h as getModuleWidgets,i as getModules,g as getPrivateModuleRoutes,_ as getPublicModuleRoutes,v as hasExtension,S as initModules,y as initOperationalModules,a as isModuleEnabled,b as pushModuleSchema,o as registerModules,x as toggleModuleState,s as updateModuleConfig};
package/dist/types.cjs CHANGED
@@ -1,20 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.ModuleManifestSchema = void 0;
7
- var _zod = require("zod");
8
- const ModuleManifestSchema = exports.ModuleManifestSchema = _zod.z.object({
9
- id: _zod.z.string(),
10
- name: _zod.z.string(),
11
- version: _zod.z.string(),
12
- description: _zod.z.string().optional(),
13
- dependencies: _zod.z.array(_zod.z.string()).default([]),
14
- extends: _zod.z.array(_zod.z.string()).default([]),
15
- // NOWE: Lista modułów, które ten moduł rozszerza
16
- enabled: _zod.z.boolean().default(true),
17
- system: _zod.z.boolean().default(false),
18
- npmDependencies: _zod.z.array(_zod.z.string()).optional(),
19
- npmDevDependencies: _zod.z.array(_zod.z.string()).optional()
20
- });
1
+ require(`./_virtual/_rolldown/runtime.cjs`);let e=require(`zod`);const t=e.z.object({id:e.z.string(),name:e.z.string(),version:e.z.string(),description:e.z.string().optional(),dependencies:e.z.array(e.z.string()).default([]),extends:e.z.array(e.z.string()).default([]),enabled:e.z.boolean().default(!0),system:e.z.boolean().default(!1),npmDependencies:e.z.array(e.z.string()).optional(),npmDevDependencies:e.z.array(e.z.string()).optional()});exports.ModuleManifestSchema=t;
package/dist/types.mjs CHANGED
@@ -1,14 +1 @@
1
- import { z } from "zod";
2
- export const ModuleManifestSchema = z.object({
3
- id: z.string(),
4
- name: z.string(),
5
- version: z.string(),
6
- description: z.string().optional(),
7
- dependencies: z.array(z.string()).default([]),
8
- extends: z.array(z.string()).default([]),
9
- // NOWE: Lista modułów, które ten moduł rozszerza
10
- enabled: z.boolean().default(true),
11
- system: z.boolean().default(false),
12
- npmDependencies: z.array(z.string()).optional(),
13
- npmDevDependencies: z.array(z.string()).optional()
14
- });
1
+ import{z as e}from"zod";const t=e.object({id:e.string(),name:e.string(),version:e.string(),description:e.string().optional(),dependencies:e.array(e.string()).default([]),extends:e.array(e.string()).default([]),enabled:e.boolean().default(!0),system:e.boolean().default(!1),npmDependencies:e.array(e.string()).optional(),npmDevDependencies:e.array(e.string()).optional()});export{t as ModuleManifestSchema};