@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.
- package/dist/client/extension-point-client.cjs +33 -26
- package/dist/client/extension-point-client.d.ts +10 -0
- package/dist/client/extension-point-client.mjs +19 -23
- package/dist/client/extension-point.cjs +25 -18
- package/dist/client/extension-point.d.ts +9 -0
- package/dist/client/extension-point.mjs +14 -17
- package/dist/client/index.cjs +38 -0
- package/dist/client/index.d.ts +3 -0
- package/dist/client/index.mjs +3 -0
- package/dist/client/widget-area.cjs +29 -22
- package/dist/client/widget-area.d.ts +9 -0
- package/dist/client/widget-area.mjs +16 -20
- package/dist/index.cjs +42 -9
- package/dist/index.d.ts +4 -0
- package/dist/index.mjs +4 -6
- package/dist/server/lifecycle.cjs +204 -180
- package/dist/server/lifecycle.d.ts +5 -0
- package/dist/server/lifecycle.mjs +223 -173
- package/dist/server/manage.cjs +124 -110
- package/dist/server/manage.d.ts +12 -0
- package/dist/server/manage.mjs +113 -104
- package/dist/server/registry.cjs +90 -82
- package/dist/server/registry.d.ts +1 -0
- package/dist/server/registry.mjs +94 -80
- package/dist/server/ui.cjs +197 -155
- package/dist/server/ui.d.ts +12 -0
- package/dist/server/ui.mjs +203 -154
- package/dist/server.cjs +59 -29
- package/dist/server.d.ts +5 -0
- package/dist/server.mjs +5 -7
- package/dist/types.cjs +18 -17
- package/dist/types.d.ts +113 -0
- package/dist/types.mjs +12 -16
- package/package.json +20 -6
- package/dist/_virtual/_rolldown/runtime.cjs +0 -29
|
@@ -1,193 +1,217 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
"use server";
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.initOperationalModules = initOperationalModules;
|
|
8
|
+
exports.pushModuleSchema = pushModuleSchema;
|
|
9
|
+
exports.toggleModuleState = toggleModuleState;
|
|
10
|
+
var _nodeChild_process = require("node:child_process");
|
|
11
|
+
var _promises = _interopRequireDefault(require("node:fs/promises"));
|
|
12
|
+
var _nodePath = _interopRequireDefault(require("node:path"));
|
|
13
|
+
var _nodeUtil = require("node:util");
|
|
14
|
+
var _core = require("@arch-cadre/core");
|
|
15
|
+
var _server = require("@arch-cadre/core/server");
|
|
16
|
+
var _drizzleOrm = require("drizzle-orm");
|
|
17
|
+
var _manage = require("./manage.js");
|
|
18
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
19
|
+
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
|
|
17
20
|
async function updateStep(moduleId, step) {
|
|
18
|
-
|
|
19
|
-
|
|
21
|
+
console.log(`[Kernel] "${moduleId}" step: ${step}`);
|
|
22
|
+
await _server.db.update(_core.systemModulesTable).set({
|
|
23
|
+
lastStep: step
|
|
24
|
+
}).where((0, _drizzleOrm.eq)(_core.systemModulesTable.id, moduleId));
|
|
20
25
|
}
|
|
21
26
|
async function resolveSchemaPath(moduleId) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
console.warn(`[Kernel:Lifecycle] Could not resolve schema path for: ${moduleId}`);
|
|
57
|
-
return null;
|
|
27
|
+
const root = process.cwd();
|
|
28
|
+
if (moduleId === "@arch-cadre/core" || moduleId === "core") {
|
|
29
|
+
const p = _nodePath.default.join(root, "node_modules", "@kryo", "core", "dist", "server", "database", "schema.cjs");
|
|
30
|
+
try {
|
|
31
|
+
await _promises.default.access(p);
|
|
32
|
+
return p;
|
|
33
|
+
} catch {
|
|
34
|
+
const devP = _nodePath.default.resolve(root, "../../packages/kryo-core/src/server/database/schema.ts");
|
|
35
|
+
try {
|
|
36
|
+
await _promises.default.access(devP);
|
|
37
|
+
return devP;
|
|
38
|
+
} catch {}
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
const cleanId = moduleId.replace("@arch-cadre/", "");
|
|
43
|
+
const possible = [
|
|
44
|
+
// Local module
|
|
45
|
+
_nodePath.default.join(root, "modules", cleanId, "schema.ts"), _nodePath.default.join(root, "modules", moduleId, "schema.ts"),
|
|
46
|
+
// node_modules (installed or symlinked)
|
|
47
|
+
_nodePath.default.join(root, "node_modules", moduleId, "dist", "schema.cjs"), _nodePath.default.join(root, "node_modules", `@arch-cadre/${cleanId}`, "dist", "schema.cjs"), _nodePath.default.join(root, "node_modules", moduleId, "src", "schema.ts"), _nodePath.default.join(root, "node_modules", `@arch-cadre/${cleanId}`, "src", "schema.ts"),
|
|
48
|
+
// Monorepo packages (searching by various naming conventions)
|
|
49
|
+
_nodePath.default.resolve(root, "../../packages", cleanId, "src", "schema.ts"), _nodePath.default.resolve(root, "../../packages", `kryo-${cleanId}`, "src", "schema.ts"), _nodePath.default.resolve(root, "../../packages", cleanId, "schema.ts")];
|
|
50
|
+
for (const p of possible) {
|
|
51
|
+
try {
|
|
52
|
+
await _promises.default.access(p);
|
|
53
|
+
console.log(`[Kernel:Lifecycle] Resolved schema for ${moduleId} at: ${p}`);
|
|
54
|
+
return p;
|
|
55
|
+
} catch {
|
|
56
|
+
console.warn(`[Kernel:Lifecycle] Unresolved schema for ${moduleId} at: ${p}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
console.warn(`[Kernel:Lifecycle] Could not resolve schema path for: ${moduleId}`);
|
|
60
|
+
return null;
|
|
58
61
|
}
|
|
59
62
|
async function pushModuleSchema(moduleId) {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
63
|
+
const execAsync = (0, _nodeUtil.promisify)(_nodeChild_process.exec);
|
|
64
|
+
console.log(`[Kernel:Lifecycle] Targeted sync for module: ${moduleId}`);
|
|
65
|
+
const root = process.cwd();
|
|
66
|
+
const enabledFromDb = await _server.db.select({
|
|
67
|
+
id: _core.systemModulesTable.id
|
|
68
|
+
}).from(_core.systemModulesTable).where((0, _drizzleOrm.eq)(_core.systemModulesTable.enabled, true));
|
|
69
|
+
const activeModuleIds = new Set(enabledFromDb.map(m => m.id));
|
|
70
|
+
activeModuleIds.add("@arch-cadre/core");
|
|
71
|
+
activeModuleIds.add(moduleId);
|
|
72
|
+
const schemaPaths = [];
|
|
73
|
+
for (const id of Array.from(activeModuleIds)) {
|
|
74
|
+
const p = await resolveSchemaPath(id);
|
|
75
|
+
if (p) schemaPaths.push(p);
|
|
76
|
+
}
|
|
77
|
+
if (schemaPaths.length === 0) {
|
|
78
|
+
console.warn(`[Kernel:Lifecycle] No schema paths resolved for ${moduleId}, skipping push.`);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const configPath = _nodePath.default.join(root, "drizzle.config.ts");
|
|
82
|
+
const drizzleKitBin = _nodePath.default.join(root, "node_modules", ".bin", "drizzle-kit");
|
|
83
|
+
const cmd = `"${drizzleKitBin}" push --force --config=${configPath}`;
|
|
84
|
+
console.log(`[Kernel:Lifecycle] Executing isolated migration. Modules: ${Array.from(activeModuleIds).join(", ")}`);
|
|
85
|
+
try {
|
|
86
|
+
await execAsync(cmd, {
|
|
87
|
+
env: {
|
|
88
|
+
...process.env,
|
|
89
|
+
CI: "true",
|
|
90
|
+
// Pass the calculated schemas to our dynamic drizzle.config.ts
|
|
91
|
+
DRIZZLE_SCHEMA_OVERRIDE: schemaPaths.join(",")
|
|
92
|
+
},
|
|
93
|
+
cwd: root
|
|
94
|
+
});
|
|
95
|
+
console.log(`[Kernel:Lifecycle] Isolated migration successful for ${moduleId}`);
|
|
96
|
+
} catch (e) {
|
|
97
|
+
console.error(`[Kernel:Lifecycle] Isolated migration failed for ${moduleId}:`);
|
|
98
|
+
console.error(e.stdout || e.message);
|
|
99
|
+
throw new Error(`Migration failed: ${moduleId}`);
|
|
100
|
+
}
|
|
94
101
|
}
|
|
95
102
|
async function performToggle(moduleId, isEnabled) {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
103
|
+
try {
|
|
104
|
+
const allModules = await (0, _manage.getModules)();
|
|
105
|
+
const manifest = allModules.find(m => m.id === moduleId);
|
|
106
|
+
await updateStep(moduleId, "Validate module...");
|
|
107
|
+
await sleep(500);
|
|
108
|
+
if (!manifest) return;
|
|
109
|
+
if (isEnabled) {
|
|
110
|
+
await updateStep(moduleId, "Queued...");
|
|
111
|
+
await sleep(500);
|
|
112
|
+
if (manifest.dependencies?.length) {
|
|
113
|
+
const pendingDeps = manifest.dependencies.filter(depId => {
|
|
114
|
+
const dep = allModules.find(m => m.id === depId);
|
|
115
|
+
return dep && !dep.enabled && !dep.system;
|
|
116
|
+
});
|
|
117
|
+
if (pendingDeps.length > 0) {
|
|
118
|
+
for (const depId of pendingDeps) {
|
|
119
|
+
await updateStep(moduleId, `Waiting for dependency "${depId}"...`);
|
|
120
|
+
await performToggle(depId, true);
|
|
121
|
+
await sleep(500);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
await updateStep(moduleId, "Initializing...");
|
|
126
|
+
await sleep(500);
|
|
127
|
+
await _server.db.update(_core.systemModulesTable).set({
|
|
128
|
+
enabled: true
|
|
129
|
+
}).where((0, _drizzleOrm.eq)(_core.systemModulesTable.id, moduleId));
|
|
130
|
+
const instance = await (0, _manage.getModuleInstance)(moduleId);
|
|
131
|
+
await updateStep(moduleId, "Migrate database...");
|
|
132
|
+
await sleep(500);
|
|
133
|
+
try {
|
|
134
|
+
if (instance?.onMigrate) {
|
|
135
|
+
await instance.onMigrate();
|
|
136
|
+
} else {
|
|
137
|
+
await pushModuleSchema(moduleId);
|
|
138
|
+
}
|
|
139
|
+
await updateStep(moduleId, "Migration successful");
|
|
140
|
+
} catch (e) {
|
|
141
|
+
console.error(`[Kernel] Migration failed for ${moduleId}:`, e);
|
|
142
|
+
await updateStep(moduleId, `Migration failed: ${e.message}`);
|
|
143
|
+
await sleep(500);
|
|
144
|
+
}
|
|
145
|
+
if (instance?.onEnable) {
|
|
146
|
+
await updateStep(moduleId, "Running setup...");
|
|
147
|
+
await sleep(500);
|
|
148
|
+
await instance.onEnable();
|
|
149
|
+
}
|
|
150
|
+
await updateStep(moduleId, "Finishing...");
|
|
151
|
+
await sleep(500);
|
|
152
|
+
await _server.db.update(_core.systemModulesTable).set({
|
|
153
|
+
installed: true,
|
|
154
|
+
lastStep: null
|
|
155
|
+
}).where((0, _drizzleOrm.eq)(_core.systemModulesTable.id, moduleId));
|
|
156
|
+
} else {
|
|
157
|
+
const dependents = allModules.filter(m => {
|
|
158
|
+
if (!m.enabled || m.id === moduleId) return false;
|
|
159
|
+
if (m.dependencies?.includes(moduleId)) return true;
|
|
160
|
+
if (m.extends?.includes(moduleId)) {
|
|
161
|
+
const otherActiveTargets = m.extends.filter(targetId => {
|
|
162
|
+
if (targetId === moduleId) return false;
|
|
163
|
+
const target = allModules.find(mod => mod.id === targetId);
|
|
164
|
+
return target?.enabled;
|
|
165
|
+
});
|
|
166
|
+
return otherActiveTargets.length === 0;
|
|
167
|
+
}
|
|
168
|
+
return false;
|
|
169
|
+
});
|
|
170
|
+
if (dependents.length > 0) {
|
|
171
|
+
await updateStep(moduleId, `Deactivating dependents...`);
|
|
172
|
+
for (const dep of dependents) {
|
|
173
|
+
await performToggle(dep.id, false);
|
|
174
|
+
await sleep(500);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
await updateStep(moduleId, "Deactivating...");
|
|
178
|
+
const instance = await (0, _manage.getModuleInstance)(moduleId);
|
|
179
|
+
if (instance?.onDisable) await instance.onDisable();
|
|
180
|
+
await _server.db.update(_core.systemModulesTable).set({
|
|
181
|
+
enabled: false,
|
|
182
|
+
installed: false
|
|
183
|
+
}).where((0, _drizzleOrm.eq)(_core.systemModulesTable.id, moduleId));
|
|
184
|
+
await updateStep(moduleId, null);
|
|
185
|
+
}
|
|
186
|
+
} catch (e) {
|
|
187
|
+
console.error(`[Kernel] Fatal error for ${moduleId}:`, e);
|
|
188
|
+
await updateStep(moduleId, `Error: ${e.message}`);
|
|
189
|
+
}
|
|
172
190
|
}
|
|
173
191
|
async function toggleModuleState(moduleId, isEnabled) {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
192
|
+
const allModules = await (0, _manage.getModules)();
|
|
193
|
+
const manifest = allModules.find(m => m.id === moduleId);
|
|
194
|
+
if (!manifest) throw new Error(`Module "${moduleId}" not found`);
|
|
195
|
+
if (manifest.enabled === isEnabled) return {
|
|
196
|
+
success: true
|
|
197
|
+
};
|
|
198
|
+
void performToggle(moduleId, isEnabled);
|
|
199
|
+
return {
|
|
200
|
+
success: true
|
|
201
|
+
};
|
|
179
202
|
}
|
|
180
203
|
async function initOperationalModules() {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
204
|
+
const allModules = await (0, _manage.getModules)();
|
|
205
|
+
for (const mod of allModules) {
|
|
206
|
+
if (mod.enabled) {
|
|
207
|
+
try {
|
|
208
|
+
const instance = await (0, _manage.getModuleInstance)(mod.id);
|
|
209
|
+
if (instance?.init) {
|
|
210
|
+
await instance.init();
|
|
211
|
+
}
|
|
212
|
+
} catch (e) {
|
|
213
|
+
console.error(`[Kernel] Failed to init module ${mod.id}:`, e);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|