@arch-cadre/modules 0.0.54 → 0.0.55

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.
Files changed (79) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +1 -0
  2. package/dist/client/extension-point-client.cjs +1 -35
  3. package/dist/client/extension-point-client.d.cts +20 -0
  4. package/dist/client/extension-point-client.d.cts.map +1 -0
  5. package/dist/client/extension-point-client.d.mts +20 -0
  6. package/dist/client/extension-point-client.d.mts.map +1 -0
  7. package/dist/client/extension-point-client.mjs +2 -22
  8. package/dist/client/extension-point-client.mjs.map +1 -0
  9. package/dist/client/extension-point.cjs +1 -26
  10. package/dist/client/extension-point.d.cts +21 -0
  11. package/dist/client/extension-point.d.cts.map +1 -0
  12. package/dist/client/extension-point.d.mts +21 -0
  13. package/dist/client/extension-point.d.mts.map +1 -0
  14. package/dist/client/extension-point.mjs +2 -15
  15. package/dist/client/extension-point.mjs.map +1 -0
  16. package/dist/client/widget-area.cjs +1 -30
  17. package/dist/client/widget-area.d.cts +19 -0
  18. package/dist/client/widget-area.d.cts.map +1 -0
  19. package/dist/client/widget-area.d.mts +19 -0
  20. package/dist/client/widget-area.d.mts.map +1 -0
  21. package/dist/client/widget-area.mjs +2 -17
  22. package/dist/client/widget-area.mjs.map +1 -0
  23. package/dist/index.cjs +1 -43
  24. package/dist/index.d.cts +5 -0
  25. package/dist/index.d.mts +5 -0
  26. package/dist/index.mjs +1 -4
  27. package/dist/server/lifecycle.cjs +1 -217
  28. package/dist/server/lifecycle.d.cts +9 -0
  29. package/dist/server/lifecycle.d.cts.map +1 -0
  30. package/dist/server/lifecycle.d.mts +9 -0
  31. package/dist/server/lifecycle.d.mts.map +1 -0
  32. package/dist/server/lifecycle.mjs +2 -238
  33. package/dist/server/lifecycle.mjs.map +1 -0
  34. package/dist/server/manage.cjs +1 -140
  35. package/dist/server/manage.d.cts +31 -0
  36. package/dist/server/manage.d.cts.map +1 -0
  37. package/dist/server/manage.d.mts +31 -0
  38. package/dist/server/manage.d.mts.map +1 -0
  39. package/dist/server/manage.mjs +2 -126
  40. package/dist/server/manage.mjs.map +1 -0
  41. package/dist/server/registry.cjs +1 -94
  42. package/dist/server/registry.d.cts +5 -0
  43. package/dist/server/registry.d.cts.map +1 -0
  44. package/dist/server/registry.d.mts +5 -0
  45. package/dist/server/registry.d.mts.map +1 -0
  46. package/dist/server/registry.mjs +2 -99
  47. package/dist/server/registry.mjs.map +1 -0
  48. package/dist/server/ui.cjs +1 -222
  49. package/dist/server/ui.d.cts +17 -0
  50. package/dist/server/ui.d.cts.map +1 -0
  51. package/dist/server/ui.d.mts +17 -0
  52. package/dist/server/ui.d.mts.map +1 -0
  53. package/dist/server/ui.mjs +2 -218
  54. package/dist/server/ui.mjs.map +1 -0
  55. package/dist/server.cjs +1 -60
  56. package/dist/server.d.cts +6 -0
  57. package/dist/server.d.mts +6 -0
  58. package/dist/server.mjs +1 -5
  59. package/dist/types.cjs +1 -20
  60. package/dist/types.d.cts +117 -0
  61. package/dist/types.d.cts.map +1 -0
  62. package/dist/types.d.mts +117 -0
  63. package/dist/types.d.mts.map +1 -0
  64. package/dist/types.mjs +2 -14
  65. package/dist/types.mjs.map +1 -0
  66. package/package.json +6 -6
  67. package/dist/client/extension-point-client.d.ts +0 -10
  68. package/dist/client/extension-point.d.ts +0 -9
  69. package/dist/client/index.cjs +0 -38
  70. package/dist/client/index.d.ts +0 -3
  71. package/dist/client/index.mjs +0 -3
  72. package/dist/client/widget-area.d.ts +0 -9
  73. package/dist/index.d.ts +0 -4
  74. package/dist/server/lifecycle.d.ts +0 -5
  75. package/dist/server/manage.d.ts +0 -12
  76. package/dist/server/registry.d.ts +0 -1
  77. package/dist/server/ui.d.ts +0 -12
  78. package/dist/server.d.ts +0 -5
  79. package/dist/types.d.ts +0 -113
@@ -1,218 +1,2 @@
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};
2
+ //# sourceMappingURL=ui.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.mjs","names":[],"sources":["../../src/server/ui.ts"],"sourcesContent":["\"use server\";\n\nimport { getCurrentSession } from \"@arch-cadre/core/server\";\nimport type {\n ApiRouteDefinition,\n ModuleExtension,\n ModuleNavElement,\n ModuleNavigationGroupMap,\n ModuleWidget,\n PrivateRouteDefinition,\n PublicRouteDefinition,\n} from \"../types\";\nimport { getModuleConfig, getModuleInstance, getModules } from \"./manage\";\n\n/**\n * Helper to check and filter a navigation item based on roles and permissions.\n * Returns the item (potentially with filtered sub-items) or null if access is denied.\n */\nfunction filterNavItem(\n item: ModuleNavElement,\n userRoles: string[],\n userPermissions: string[],\n): ModuleNavElement | null {\n // 1. Check access for the item itself\n if (item.roles && item.roles.length > 0) {\n if (!item.roles.some((role) => userRoles.includes(role))) {\n return null;\n }\n }\n\n if (item.permissions && item.permissions.length > 0) {\n if (!item.permissions.every((perm) => userPermissions.includes(perm))) {\n return null;\n }\n }\n\n // 2. Recursively filter sub-items if they exist\n if (item.items && item.items.length > 0) {\n const filteredSubItems = item.items\n .map((subItem) =>\n filterNavItem(subItem as any, userRoles, userPermissions),\n )\n .filter((subItem): subItem is ModuleNavElement => subItem !== null);\n\n return {\n ...item,\n items: filteredSubItems as any,\n };\n }\n\n return item;\n}\n\nexport async function getModuleNavigationGrouped(type: \"admin\" | \"settings\") {\n const { user } = await getCurrentSession();\n const userRoles = user?.roles || [];\n const userPermissions = user?.permissions || [];\n\n const modules = await getModules();\n const active = modules.filter((m) => m.enabled);\n const groups: Record<string, ModuleNavElement[]> = {};\n\n for (const mod of active) {\n try {\n const instance = await getModuleInstance(mod.id);\n\n // 1. From instance\n const instanceNav = instance?.navigation?.[type];\n if (instanceNav) {\n for (const [groupName, items] of Object.entries(\n instanceNav as ModuleNavigationGroupMap,\n )) {\n if (!groups[groupName]) groups[groupName] = [];\n for (const rawItem of items) {\n const item = filterNavItem(rawItem, userRoles, userPermissions);\n if (\n item &&\n !groups[groupName].some((existing) => existing.url === item.url)\n ) {\n groups[groupName].push(item);\n }\n }\n }\n }\n } catch (_e) {\n console.warn(\n `[Kernel:UI] Failed to load navigation for module ${mod.id}:`,\n _e,\n );\n }\n }\n return groups;\n}\n\nexport async function getKryoPathPrefix(): Promise<string> {\n try {\n const config = await getModuleConfig<{ pathPrefix: string }>(\"kryo-panel\");\n return config?.pathPrefix ?? \"/kryo\";\n } catch (_e) {\n return \"/kryo\";\n }\n}\n\nexport async function getKryoModuleNavigationGrouped(\n type: \"admin\" | \"settings\",\n) {\n const groups = await getModuleNavigationGrouped(type);\n const prefix = await getKryoPathPrefix();\n\n const prefixUrl = (url: string) => {\n if (url.startsWith(prefix)) return url;\n return url === \"/\" ? prefix : `${prefix}${url}`;\n };\n\n const processItems = (items: ModuleNavElement[]): ModuleNavElement[] => {\n return items.map((item) => ({\n ...item,\n url: prefixUrl(item.url),\n items: item.items\n ? processItems(item.items as ModuleNavElement[])\n : undefined,\n })) as ModuleNavElement[];\n };\n\n const transformedGroups: Record<string, ModuleNavElement[]> = {};\n for (const [group, items] of Object.entries(groups)) {\n transformedGroups[group] = processItems(items);\n }\n\n return transformedGroups;\n}\n\nexport async function getModuleNavigation(\n type: \"public\",\n): Promise<ModuleNavElement[]> {\n const { user } = await getCurrentSession();\n const userRoles = user?.roles || [];\n const userPermissions = user?.permissions || [];\n\n const modules = await getModules();\n const active = modules.filter((m) => m.enabled);\n const all: ModuleNavElement[] = [];\n\n for (const mod of active) {\n try {\n const instance = await getModuleInstance(mod.id);\n if (instance?.navigation?.[type]) {\n const items = instance.navigation[type] as ModuleNavElement[];\n for (const rawItem of items) {\n const item = filterNavItem(rawItem, userRoles, userPermissions);\n if (item) all.push(item);\n }\n }\n } catch { }\n }\n return all;\n}\n\nexport async function getPublicModuleRoutes(): Promise<\n PublicRouteDefinition[]\n> {\n const modules = await getModules();\n const active = modules.filter((m) => m.enabled);\n const allRoutes: PublicRouteDefinition[] = [];\n\n for (const mod of active) {\n try {\n const instance = await getModuleInstance(mod.id);\n\n // 1. Try from instance (if pre-defined)\n if (instance?.routes?.public) {\n allRoutes.push(...instance.routes.public);\n }\n } catch { }\n }\n return allRoutes;\n}\n\nexport async function getPrivateModuleRoutes(): Promise<\n PrivateRouteDefinition[]\n> {\n const modules = await getModules();\n const active = modules.filter((m) => m.enabled);\n const allRoutes: PrivateRouteDefinition[] = [];\n\n for (const mod of active) {\n try {\n const instance = await getModuleInstance(mod.id);\n\n // 1. Try from instance\n if (instance?.routes?.private) {\n allRoutes.push(...instance.routes.private);\n }\n } catch { }\n }\n return allRoutes;\n}\n\nexport async function getKryoModuleRoutes(): Promise<PrivateRouteDefinition[]> {\n const routes = await getPrivateModuleRoutes();\n const prefix = await getKryoPathPrefix();\n\n return routes.map((route) => ({\n ...route,\n path: route.path === \"/\" ? prefix : `${prefix}${route.path}`,\n }));\n}\n\nexport async function getApiModuleRoutes(): Promise<ApiRouteDefinition[]> {\n const modules = await getModules();\n const active = modules.filter((m) => m.enabled);\n const allRoutes: ApiRouteDefinition[] = [];\n\n for (const mod of active) {\n try {\n const instance = await getModuleInstance(mod.id);\n if (instance?.routes?.api) {\n allRoutes.push(...instance.routes.api);\n }\n } catch { }\n }\n return allRoutes;\n}\n\nexport async function getModuleWidgets(area: string) {\n const modules = await getModules();\n const active = modules.filter((m) => m.enabled);\n const widgets: ModuleWidget[] = [];\n\n for (const mod of active) {\n try {\n const instance = await getModuleInstance(mod.id);\n\n if (instance?.widgets) {\n const matching = instance.widgets.filter(\n (w: ModuleWidget) => w.area === area,\n );\n widgets.push(...matching);\n }\n } catch (_e) { }\n }\n\n return widgets.sort((a, b) => (a.priority || 0) - (b.priority || 0));\n}\n\nexport async function getExtensions(targetModule: string, point?: string) {\n const modules = await getModules();\n const active = modules.filter((m) => m.enabled);\n const extensions: ModuleExtension[] = [];\n\n for (const mod of active) {\n try {\n const instance = await getModuleInstance(mod.id);\n\n if (instance?.extensions) {\n const matching = instance.extensions.filter((ext: ModuleExtension) => {\n const isTarget = ext.targetModule === targetModule;\n const isPoint = point ? ext.point === point : true;\n return isTarget && isPoint;\n });\n extensions.push(...matching);\n }\n } catch (_e) { }\n }\n\n return extensions.sort((a, b) => (a.priority || 0) - (b.priority || 0));\n}\n\nexport async function hasExtension(targetModule: string, point?: string) {\n const modules = await getModules();\n const active = modules.filter((m) => m.enabled);\n\n for (const mod of active) {\n try {\n const instance = await getModuleInstance(mod.id);\n\n if (instance?.extensions) {\n const matching = instance.extensions.filter((ext: ModuleExtension) => {\n const isTarget = ext.targetModule === targetModule;\n const isPoint = point ? ext.point === point : true;\n return isTarget && isPoint;\n });\n if (matching.length > 0) return true;\n }\n } catch (_e) { }\n }\n\n return false;\n}\n"],"mappings":"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"}
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;
@@ -0,0 +1,6 @@
1
+ import { ApiRouteDefinition, IModule, ModuleExtension, ModuleManifest, ModuleManifestSchema, ModuleNavElement, ModuleNavigation, ModuleNavigationGroupMap, ModulePageProps, ModuleRouteDefinition, ModuleWidget, PrivateRouteDefinition, PublicRouteDefinition, SidebarGroupType, SidebarMenuItemType, SidebarMenuType, SystemEvent } from "./types.cjs";
2
+ import { initOperationalModules, pushModuleSchema, toggleModuleState } from "./server/lifecycle.cjs";
3
+ import { getModuleConfig, getModuleInstance, getModuleStatus, getModules, isModuleEnabled, registerModules, updateModuleConfig } from "./server/manage.cjs";
4
+ import { initModules } from "./server/registry.cjs";
5
+ import { getApiModuleRoutes, getExtensions, getKryoModuleNavigationGrouped, getKryoModuleRoutes, getKryoPathPrefix, getModuleNavigation, getModuleNavigationGrouped, getModuleWidgets, getPrivateModuleRoutes, getPublicModuleRoutes, hasExtension } from "./server/ui.cjs";
6
+ export { ApiRouteDefinition, IModule, ModuleExtension, ModuleManifest, ModuleManifestSchema, ModuleNavElement, ModuleNavigation, ModuleNavigationGroupMap, ModulePageProps, ModuleRouteDefinition, ModuleWidget, PrivateRouteDefinition, PublicRouteDefinition, SidebarGroupType, SidebarMenuItemType, SidebarMenuType, SystemEvent, getApiModuleRoutes, getExtensions, getKryoModuleNavigationGrouped, getKryoModuleRoutes, getKryoPathPrefix, getModuleConfig, getModuleInstance, getModuleNavigation, getModuleNavigationGrouped, getModuleStatus, getModuleWidgets, getModules, getPrivateModuleRoutes, getPublicModuleRoutes, hasExtension, initModules, initOperationalModules, isModuleEnabled, pushModuleSchema, registerModules, toggleModuleState, updateModuleConfig };
@@ -0,0 +1,6 @@
1
+ import { ApiRouteDefinition, IModule, ModuleExtension, ModuleManifest, ModuleManifestSchema, ModuleNavElement, ModuleNavigation, ModuleNavigationGroupMap, ModulePageProps, ModuleRouteDefinition, ModuleWidget, PrivateRouteDefinition, PublicRouteDefinition, SidebarGroupType, SidebarMenuItemType, SidebarMenuType, SystemEvent } from "./types.mjs";
2
+ import { initOperationalModules, pushModuleSchema, toggleModuleState } from "./server/lifecycle.mjs";
3
+ import { getModuleConfig, getModuleInstance, getModuleStatus, getModules, isModuleEnabled, registerModules, updateModuleConfig } from "./server/manage.mjs";
4
+ import { initModules } from "./server/registry.mjs";
5
+ import { getApiModuleRoutes, getExtensions, getKryoModuleNavigationGrouped, getKryoModuleRoutes, getKryoPathPrefix, getModuleNavigation, getModuleNavigationGrouped, getModuleWidgets, getPrivateModuleRoutes, getPublicModuleRoutes, hasExtension } from "./server/ui.mjs";
6
+ export { ApiRouteDefinition, IModule, ModuleExtension, ModuleManifest, ModuleManifestSchema, ModuleNavElement, ModuleNavigation, ModuleNavigationGroupMap, ModulePageProps, ModuleRouteDefinition, ModuleWidget, PrivateRouteDefinition, PublicRouteDefinition, SidebarGroupType, SidebarMenuItemType, SidebarMenuType, SystemEvent, getApiModuleRoutes, getExtensions, getKryoModuleNavigationGrouped, getKryoModuleRoutes, getKryoPathPrefix, getModuleConfig, getModuleInstance, getModuleNavigation, getModuleNavigationGrouped, getModuleStatus, getModuleWidgets, getModules, getPrivateModuleRoutes, getPublicModuleRoutes, hasExtension, initModules, initOperationalModules, isModuleEnabled, pushModuleSchema, registerModules, toggleModuleState, 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;
@@ -0,0 +1,117 @@
1
+ import { SystemEvent, UserPermission, UserRole } from "@arch-cadre/core";
2
+ import { Metadata } from "next";
3
+ import { z } from "zod";
4
+
5
+ //#region src/types.d.ts
6
+ type SidebarGroupType = {
7
+ title: string;
8
+ items: SidebarMenuType;
9
+ };
10
+ type SidebarMenuItemType<T = Record<string, string>> = {
11
+ id?: string;
12
+ title: string;
13
+ icon?: string;
14
+ url: string;
15
+ roles?: string[];
16
+ permissions?: string[];
17
+ badge?: string | number | null | undefined;
18
+ badgeVariant?: "default" | "secondary" | "destructive" | "outline" | null | undefined;
19
+ } & T;
20
+ type SidebarMenuType = SidebarMenuItemType<{
21
+ items?: SidebarMenuItemType[];
22
+ }>[];
23
+ declare const ModuleManifestSchema: z.ZodObject<{
24
+ id: z.ZodString;
25
+ name: z.ZodString;
26
+ version: z.ZodString;
27
+ description: z.ZodOptional<z.ZodString>;
28
+ dependencies: z.ZodDefault<z.ZodArray<z.ZodString>>;
29
+ extends: z.ZodDefault<z.ZodArray<z.ZodString>>;
30
+ enabled: z.ZodDefault<z.ZodBoolean>;
31
+ system: z.ZodDefault<z.ZodBoolean>;
32
+ npmDependencies: z.ZodOptional<z.ZodArray<z.ZodString>>;
33
+ npmDevDependencies: z.ZodOptional<z.ZodArray<z.ZodString>>;
34
+ }, z.core.$strip>;
35
+ type ModuleManifest = z.infer<typeof ModuleManifestSchema>;
36
+ interface ModuleExtension {
37
+ id: string;
38
+ targetModule: string;
39
+ point: string;
40
+ component: React.ComponentType<any>;
41
+ priority?: number;
42
+ metadata?: any;
43
+ }
44
+ interface ModulePageProps {
45
+ params: any;
46
+ searchParams: any;
47
+ }
48
+ interface ModuleRouteDefinition {
49
+ id?: string;
50
+ roles?: UserRole[];
51
+ permissions?: UserPermission[];
52
+ component: React.ComponentType<any>;
53
+ layout?: React.ComponentType<{
54
+ children: React.ReactNode;
55
+ }>;
56
+ generateMetadata?: (props: ModulePageProps) => Promise<Metadata> | Metadata;
57
+ }
58
+ interface ModuleWidget {
59
+ id: string;
60
+ name: string;
61
+ area: "dashboard-stats" | "dashboard-main" | "sidebar-bottom" | string;
62
+ component: React.ComponentType<any>;
63
+ priority?: number;
64
+ }
65
+ interface IModule {
66
+ manifest: ModuleManifest;
67
+ schema?: any;
68
+ onMigrate?: () => Promise<void>;
69
+ onEnable?: () => Promise<void>;
70
+ onDisable?: () => Promise<void>;
71
+ init?: () => Promise<void>;
72
+ widgets?: ModuleWidget[];
73
+ extensions?: ModuleExtension[];
74
+ navigation?: ModuleNavigation;
75
+ routes?: {
76
+ public?: PublicRouteDefinition[];
77
+ private?: PrivateRouteDefinition[];
78
+ api?: ApiRouteDefinition[];
79
+ };
80
+ }
81
+ /**
82
+ * Element menu zarejestrowany przez moduł.
83
+ */
84
+ type ModuleNavElement = SidebarMenuItemType<{
85
+ items?: SidebarMenuItemType[];
86
+ }>;
87
+ /**
88
+ * Mapa nawigacji modułu.
89
+ * Klucz: Nazwa grupy (np. "CMS", "Platform", "Journal")
90
+ * Vartość: Tablica elementów menu trafiających do tej grupy.
91
+ */
92
+ type ModuleNavigationGroupMap = Record<string, ModuleNavElement[]>;
93
+ interface PublicRouteDefinition extends ModuleRouteDefinition {
94
+ path: string;
95
+ auth?: boolean;
96
+ }
97
+ interface PrivateRouteDefinition extends ModuleRouteDefinition {
98
+ path: string;
99
+ auth?: boolean;
100
+ }
101
+ interface ApiRouteDefinition {
102
+ id?: string;
103
+ path: string;
104
+ handler: (request: Request, context: any) => Promise<Response> | Response;
105
+ auth?: boolean;
106
+ roles?: UserRole[];
107
+ permissions?: UserPermission[];
108
+ }
109
+ interface ModuleNavigation {
110
+ public?: ModuleNavElement[];
111
+ admin?: ModuleNavigationGroupMap;
112
+ settings?: ModuleNavigationGroupMap;
113
+ globalRoutes?: (PublicRouteDefinition | PrivateRouteDefinition | ApiRouteDefinition)[];
114
+ }
115
+ //#endregion
116
+ export { ApiRouteDefinition, IModule, ModuleExtension, ModuleManifest, ModuleManifestSchema, ModuleNavElement, ModuleNavigation, ModuleNavigationGroupMap, ModulePageProps, ModuleRouteDefinition, ModuleWidget, PrivateRouteDefinition, PublicRouteDefinition, SidebarGroupType, SidebarMenuItemType, SidebarMenuType, type SystemEvent };
117
+ //# sourceMappingURL=types.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.cts","names":[],"sources":["../src/types.ts"],"mappings":";;;;;KAMY,gBAAA;EACV,KAAA;EACA,KAAA,EAAO,eAAA;AAAA;AAAA,KAGG,mBAAA,KAAwB,MAAA;EAClC,EAAA;EACA,KAAA;EACA,IAAA;EACA,GAAA;EACA,KAAA;EACA,WAAA;EACA,KAAA;EACA,YAAA;AAAA,IAOE,CAAA;AAAA,KAEQ,eAAA,GAAkB,mBAAA;EAC5B,KAAA,GAAQ,mBAAA;AAAA;AAAA,cAGG,oBAAA,EAAoB,CAAA,CAAA,SAAA;;;;;;;;;;;;KAarB,cAAA,GAAiB,CAAA,CAAE,KAAA,QAAa,oBAAA;AAAA,UAI3B,eAAA;EACf,EAAA;EACA,YAAA;EACA,KAAA;EACA,SAAA,EAAW,KAAA,CAAM,aAAA;EACjB,QAAA;EACA,QAAA;AAAA;AAAA,UAGe,eAAA;EACf,MAAA;EACA,YAAA;AAAA;AAAA,UAGe,qBAAA;EACf,EAAA;EACA,KAAA,GAAQ,QAAA;EACR,WAAA,GAAc,cAAA;EACd,SAAA,EAAW,KAAA,CAAM,aAAA;EACjB,MAAA,GAAS,KAAA,CAAM,aAAA;IAAgB,QAAA,EAAU,KAAA,CAAM,SAAA;EAAA;EAC/C,gBAAA,IAAoB,KAAA,EAAO,eAAA,KAAoB,OAAA,CAAQ,QAAA,IAAY,QAAA;AAAA;AAAA,UAKpD,YAAA;EACf,EAAA;EACA,IAAA;EACA,IAAA;EACA,SAAA,EAAW,KAAA,CAAM,aAAA;EACjB,QAAA;AAAA;AAAA,UAGe,OAAA;EACf,QAAA,EAAU,cAAA;EACV,MAAA;EACA,SAAA,SAAkB,OAAA;EAClB,QAAA,SAAiB,OAAA;EACjB,SAAA,SAAkB,OAAA;EAClB,IAAA,SAAa,OAAA;EACb,OAAA,GAAU,YAAA;EACV,UAAA,GAAa,eAAA;EACb,UAAA,GAAa,gBAAA;EACb,MAAA;IACE,MAAA,GAAS,qBAAA;IACT,OAAA,GAAU,sBAAA;IACV,GAAA,GAAM,kBAAA;EAAA;AAAA;;;;KASE,gBAAA,GAAmB,mBAAA;EAC7B,KAAA,GAAQ,mBAAA;AAAA;;;;;;KAQE,wBAAA,GAA2B,MAAA,SAAe,gBAAA;AAAA,UAErC,qBAAA,SAA8B,qBAAA;EAC7C,IAAA;EACA,IAAA;AAAA;AAAA,UAGe,sBAAA,SAA+B,qBAAA;EAC9C,IAAA;EACA,IAAA;AAAA;AAAA,UAGe,kBAAA;EACf,EAAA;EACA,IAAA;EACA,OAAA,GAAU,OAAA,EAAS,OAAA,EAAS,OAAA,UAAiB,OAAA,CAAQ,QAAA,IAAY,QAAA;EACjE,IAAA;EACA,KAAA,GAAQ,QAAA;EACR,WAAA,GAAc,cAAA;AAAA;AAAA,UAGC,gBAAA;EACf,MAAA,GAAS,gBAAA;EACT,KAAA,GAAQ,wBAAA;EACR,QAAA,GAAW,wBAAA;EACX,YAAA,IACI,qBAAA,GACA,sBAAA,GACA,kBAAA;AAAA"}
@@ -0,0 +1,117 @@
1
+ import { SystemEvent, UserPermission, UserRole } from "@arch-cadre/core";
2
+ import { z } from "zod";
3
+ import { Metadata } from "next";
4
+
5
+ //#region src/types.d.ts
6
+ type SidebarGroupType = {
7
+ title: string;
8
+ items: SidebarMenuType;
9
+ };
10
+ type SidebarMenuItemType<T = Record<string, string>> = {
11
+ id?: string;
12
+ title: string;
13
+ icon?: string;
14
+ url: string;
15
+ roles?: string[];
16
+ permissions?: string[];
17
+ badge?: string | number | null | undefined;
18
+ badgeVariant?: "default" | "secondary" | "destructive" | "outline" | null | undefined;
19
+ } & T;
20
+ type SidebarMenuType = SidebarMenuItemType<{
21
+ items?: SidebarMenuItemType[];
22
+ }>[];
23
+ declare const ModuleManifestSchema: z.ZodObject<{
24
+ id: z.ZodString;
25
+ name: z.ZodString;
26
+ version: z.ZodString;
27
+ description: z.ZodOptional<z.ZodString>;
28
+ dependencies: z.ZodDefault<z.ZodArray<z.ZodString>>;
29
+ extends: z.ZodDefault<z.ZodArray<z.ZodString>>;
30
+ enabled: z.ZodDefault<z.ZodBoolean>;
31
+ system: z.ZodDefault<z.ZodBoolean>;
32
+ npmDependencies: z.ZodOptional<z.ZodArray<z.ZodString>>;
33
+ npmDevDependencies: z.ZodOptional<z.ZodArray<z.ZodString>>;
34
+ }, z.core.$strip>;
35
+ type ModuleManifest = z.infer<typeof ModuleManifestSchema>;
36
+ interface ModuleExtension {
37
+ id: string;
38
+ targetModule: string;
39
+ point: string;
40
+ component: React.ComponentType<any>;
41
+ priority?: number;
42
+ metadata?: any;
43
+ }
44
+ interface ModulePageProps {
45
+ params: any;
46
+ searchParams: any;
47
+ }
48
+ interface ModuleRouteDefinition {
49
+ id?: string;
50
+ roles?: UserRole[];
51
+ permissions?: UserPermission[];
52
+ component: React.ComponentType<any>;
53
+ layout?: React.ComponentType<{
54
+ children: React.ReactNode;
55
+ }>;
56
+ generateMetadata?: (props: ModulePageProps) => Promise<Metadata> | Metadata;
57
+ }
58
+ interface ModuleWidget {
59
+ id: string;
60
+ name: string;
61
+ area: "dashboard-stats" | "dashboard-main" | "sidebar-bottom" | string;
62
+ component: React.ComponentType<any>;
63
+ priority?: number;
64
+ }
65
+ interface IModule {
66
+ manifest: ModuleManifest;
67
+ schema?: any;
68
+ onMigrate?: () => Promise<void>;
69
+ onEnable?: () => Promise<void>;
70
+ onDisable?: () => Promise<void>;
71
+ init?: () => Promise<void>;
72
+ widgets?: ModuleWidget[];
73
+ extensions?: ModuleExtension[];
74
+ navigation?: ModuleNavigation;
75
+ routes?: {
76
+ public?: PublicRouteDefinition[];
77
+ private?: PrivateRouteDefinition[];
78
+ api?: ApiRouteDefinition[];
79
+ };
80
+ }
81
+ /**
82
+ * Element menu zarejestrowany przez moduł.
83
+ */
84
+ type ModuleNavElement = SidebarMenuItemType<{
85
+ items?: SidebarMenuItemType[];
86
+ }>;
87
+ /**
88
+ * Mapa nawigacji modułu.
89
+ * Klucz: Nazwa grupy (np. "CMS", "Platform", "Journal")
90
+ * Vartość: Tablica elementów menu trafiających do tej grupy.
91
+ */
92
+ type ModuleNavigationGroupMap = Record<string, ModuleNavElement[]>;
93
+ interface PublicRouteDefinition extends ModuleRouteDefinition {
94
+ path: string;
95
+ auth?: boolean;
96
+ }
97
+ interface PrivateRouteDefinition extends ModuleRouteDefinition {
98
+ path: string;
99
+ auth?: boolean;
100
+ }
101
+ interface ApiRouteDefinition {
102
+ id?: string;
103
+ path: string;
104
+ handler: (request: Request, context: any) => Promise<Response> | Response;
105
+ auth?: boolean;
106
+ roles?: UserRole[];
107
+ permissions?: UserPermission[];
108
+ }
109
+ interface ModuleNavigation {
110
+ public?: ModuleNavElement[];
111
+ admin?: ModuleNavigationGroupMap;
112
+ settings?: ModuleNavigationGroupMap;
113
+ globalRoutes?: (PublicRouteDefinition | PrivateRouteDefinition | ApiRouteDefinition)[];
114
+ }
115
+ //#endregion
116
+ export { ApiRouteDefinition, IModule, ModuleExtension, ModuleManifest, ModuleManifestSchema, ModuleNavElement, ModuleNavigation, ModuleNavigationGroupMap, ModulePageProps, ModuleRouteDefinition, ModuleWidget, PrivateRouteDefinition, PublicRouteDefinition, SidebarGroupType, SidebarMenuItemType, SidebarMenuType, type SystemEvent };
117
+ //# sourceMappingURL=types.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.mts","names":[],"sources":["../src/types.ts"],"mappings":";;;;;KAMY,gBAAA;EACV,KAAA;EACA,KAAA,EAAO,eAAA;AAAA;AAAA,KAGG,mBAAA,KAAwB,MAAA;EAClC,EAAA;EACA,KAAA;EACA,IAAA;EACA,GAAA;EACA,KAAA;EACA,WAAA;EACA,KAAA;EACA,YAAA;AAAA,IAOE,CAAA;AAAA,KAEQ,eAAA,GAAkB,mBAAA;EAC5B,KAAA,GAAQ,mBAAA;AAAA;AAAA,cAGG,oBAAA,EAAoB,CAAA,CAAA,SAAA;;;;;;;;;;;;KAarB,cAAA,GAAiB,CAAA,CAAE,KAAA,QAAa,oBAAA;AAAA,UAI3B,eAAA;EACf,EAAA;EACA,YAAA;EACA,KAAA;EACA,SAAA,EAAW,KAAA,CAAM,aAAA;EACjB,QAAA;EACA,QAAA;AAAA;AAAA,UAGe,eAAA;EACf,MAAA;EACA,YAAA;AAAA;AAAA,UAGe,qBAAA;EACf,EAAA;EACA,KAAA,GAAQ,QAAA;EACR,WAAA,GAAc,cAAA;EACd,SAAA,EAAW,KAAA,CAAM,aAAA;EACjB,MAAA,GAAS,KAAA,CAAM,aAAA;IAAgB,QAAA,EAAU,KAAA,CAAM,SAAA;EAAA;EAC/C,gBAAA,IAAoB,KAAA,EAAO,eAAA,KAAoB,OAAA,CAAQ,QAAA,IAAY,QAAA;AAAA;AAAA,UAKpD,YAAA;EACf,EAAA;EACA,IAAA;EACA,IAAA;EACA,SAAA,EAAW,KAAA,CAAM,aAAA;EACjB,QAAA;AAAA;AAAA,UAGe,OAAA;EACf,QAAA,EAAU,cAAA;EACV,MAAA;EACA,SAAA,SAAkB,OAAA;EAClB,QAAA,SAAiB,OAAA;EACjB,SAAA,SAAkB,OAAA;EAClB,IAAA,SAAa,OAAA;EACb,OAAA,GAAU,YAAA;EACV,UAAA,GAAa,eAAA;EACb,UAAA,GAAa,gBAAA;EACb,MAAA;IACE,MAAA,GAAS,qBAAA;IACT,OAAA,GAAU,sBAAA;IACV,GAAA,GAAM,kBAAA;EAAA;AAAA;;;;KASE,gBAAA,GAAmB,mBAAA;EAC7B,KAAA,GAAQ,mBAAA;AAAA;;;;;;KAQE,wBAAA,GAA2B,MAAA,SAAe,gBAAA;AAAA,UAErC,qBAAA,SAA8B,qBAAA;EAC7C,IAAA;EACA,IAAA;AAAA;AAAA,UAGe,sBAAA,SAA+B,qBAAA;EAC9C,IAAA;EACA,IAAA;AAAA;AAAA,UAGe,kBAAA;EACf,EAAA;EACA,IAAA;EACA,OAAA,GAAU,OAAA,EAAS,OAAA,EAAS,OAAA,UAAiB,OAAA,CAAQ,QAAA,IAAY,QAAA;EACjE,IAAA;EACA,KAAA,GAAQ,QAAA;EACR,WAAA,GAAc,cAAA;AAAA;AAAA,UAGC,gBAAA;EACf,MAAA,GAAS,gBAAA;EACT,KAAA,GAAQ,wBAAA;EACR,QAAA,GAAW,wBAAA;EACX,YAAA,IACI,qBAAA,GACA,sBAAA,GACA,kBAAA;AAAA"}
package/dist/types.mjs CHANGED
@@ -1,14 +1,2 @@
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};
2
+ //# sourceMappingURL=types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.mjs","names":[],"sources":["../src/types.ts"],"sourcesContent":["import type { SystemEvent, UserPermission, UserRole } from \"@arch-cadre/core\";\nexport type { SystemEvent };\n\nimport type { Metadata } from \"next\";\nimport { z } from \"zod\";\n// import type { SidebarMenuItemType } from \"@arch-cadre/core\";\nexport type SidebarGroupType = {\n title: string;\n items: SidebarMenuType;\n};\n\nexport type SidebarMenuItemType<T = Record<string, string>> = {\n id?: string;\n title: string;\n icon?: string;\n url: string;\n roles?: string[];\n permissions?: string[];\n badge?: string | number | null | undefined;\n badgeVariant?:\n | \"default\"\n | \"secondary\"\n | \"destructive\"\n | \"outline\"\n | null\n | undefined;\n} & T;\n\nexport type SidebarMenuType = SidebarMenuItemType<{\n items?: SidebarMenuItemType[];\n}>[];\n\nexport const ModuleManifestSchema = z.object({\n id: z.string(),\n name: z.string(),\n version: z.string(),\n description: z.string().optional(),\n dependencies: z.array(z.string()).default([]),\n extends: z.array(z.string()).default([]), // NOWE: Lista modułów, które ten moduł rozszerza\n enabled: z.boolean().default(true),\n system: z.boolean().default(false),\n npmDependencies: z.array(z.string()).optional(),\n npmDevDependencies: z.array(z.string()).optional(),\n});\n\nexport type ModuleManifest = z.infer<typeof ModuleManifestSchema>;\n\n// --- NOWA STRUKTURA ROZSZERZEŃ ---\n\nexport interface ModuleExtension {\n id: string;\n targetModule: string; // ID modułu rozszerzanego\n point: string; // Miejsce rozszerzenia (np. \"post-editor-sidebar\")\n component: React.ComponentType<any>;\n priority?: number;\n metadata?: any;\n}\n\nexport interface ModulePageProps {\n params: any;\n searchParams: any;\n}\n\nexport interface ModuleRouteDefinition {\n id?: string;\n roles?: UserRole[];\n permissions?: UserPermission[];\n component: React.ComponentType<any>;\n layout?: React.ComponentType<{ children: React.ReactNode }>;\n generateMetadata?: (props: ModulePageProps) => Promise<Metadata> | Metadata;\n}\n\n// --- NOWA STRUKTURA WIDGETÓW ---\n\nexport interface ModuleWidget {\n id: string;\n name: string;\n area: \"dashboard-stats\" | \"dashboard-main\" | \"sidebar-bottom\" | string;\n component: React.ComponentType<any>;\n priority?: number;\n}\n\nexport interface IModule {\n manifest: ModuleManifest;\n schema?: any; // NOWE: Eksportowany schemat Drizzle\n onMigrate?: () => Promise<void>; // NOWE: Hook do migracji specyficznych dla modułu\n onEnable?: () => Promise<void>;\n onDisable?: () => Promise<void>;\n init?: () => Promise<void>;\n widgets?: ModuleWidget[];\n extensions?: ModuleExtension[]; // NOWE: Rejestracja rozszerzeń innych modułów\n navigation?: ModuleNavigation;\n routes?: {\n public?: PublicRouteDefinition[];\n private?: PrivateRouteDefinition[];\n api?: ApiRouteDefinition[];\n };\n}\n\n// --- Reszta bez zmian ---\n\n/**\n * Element menu zarejestrowany przez moduł.\n */\nexport type ModuleNavElement = SidebarMenuItemType<{\n items?: SidebarMenuItemType[];\n}>;\n\n/**\n * Mapa nawigacji modułu.\n * Klucz: Nazwa grupy (np. \"CMS\", \"Platform\", \"Journal\")\n * Vartość: Tablica elementów menu trafiających do tej grupy.\n */\nexport type ModuleNavigationGroupMap = Record<string, ModuleNavElement[]>;\n\nexport interface PublicRouteDefinition extends ModuleRouteDefinition {\n path: string; // np. \"/blog/:slug\"\n auth?: boolean;\n}\n\nexport interface PrivateRouteDefinition extends ModuleRouteDefinition {\n path: string; // np. \"/settings\" ale w systemie działa to jako \"/kryo/settings\"\n auth?: boolean;\n}\n\nexport interface ApiRouteDefinition {\n id?: string;\n path: string; // np. \"/api/my-module/data\"\n handler: (request: Request, context: any) => Promise<Response> | Response;\n auth?: boolean;\n roles?: UserRole[];\n permissions?: UserPermission[];\n}\n\nexport interface ModuleNavigation {\n public?: ModuleNavElement[];\n admin?: ModuleNavigationGroupMap;\n settings?: ModuleNavigationGroupMap;\n globalRoutes?: (\n | PublicRouteDefinition\n | PrivateRouteDefinition\n | ApiRouteDefinition\n )[];\n}\n"],"mappings":"wBAgCA,MAAa,EAAuB,EAAE,OAAO,CAC3C,GAAI,EAAE,QAAQ,CACd,KAAM,EAAE,QAAQ,CAChB,QAAS,EAAE,QAAQ,CACnB,YAAa,EAAE,QAAQ,CAAC,UAAU,CAClC,aAAc,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,CAC7C,QAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,CACxC,QAAS,EAAE,SAAS,CAAC,QAAQ,GAAK,CAClC,OAAQ,EAAE,SAAS,CAAC,QAAQ,GAAM,CAClC,gBAAiB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,UAAU,CAC/C,mBAAoB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,UAAU,CACnD,CAAC"}