@arch-cadre/modules 0.0.49 → 0.0.50

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,193 +1,217 @@
1
+ "use strict";
1
2
  "use server";
2
3
 
3
- const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
4
- const require_manage = require('./manage.cjs');
5
- let _arch_cadre_core_server = require("@arch-cadre/core/server");
6
- let node_fs_promises = require("node:fs/promises");
7
- node_fs_promises = require_runtime.__toESM(node_fs_promises);
8
- let node_path = require("node:path");
9
- node_path = require_runtime.__toESM(node_path);
10
- let _arch_cadre_core = require("@arch-cadre/core");
11
- let drizzle_orm = require("drizzle-orm");
12
- let node_child_process = require("node:child_process");
13
- let node_util = require("node:util");
14
-
15
- //#region src/server/lifecycle.ts
16
- const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
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
- console.log(`[Kernel] "${moduleId}" step: ${step}`);
19
- await _arch_cadre_core_server.db.update(_arch_cadre_core.systemModulesTable).set({ lastStep: step }).where((0, drizzle_orm.eq)(_arch_cadre_core.systemModulesTable.id, moduleId));
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
- const root = process.cwd();
23
- if (moduleId === "@arch-cadre/core" || moduleId === "core") {
24
- const p = node_path.default.join(root, "node_modules", "@kryo", "core", "dist", "server", "database", "schema.cjs");
25
- try {
26
- await node_fs_promises.default.access(p);
27
- return p;
28
- } catch {
29
- const devP = node_path.default.resolve(root, "../../packages/kryo-core/src/server/database/schema.ts");
30
- try {
31
- await node_fs_promises.default.access(devP);
32
- return devP;
33
- } catch {}
34
- }
35
- return null;
36
- }
37
- const cleanId = moduleId.replace("@arch-cadre/", "");
38
- const possible = [
39
- node_path.default.join(root, "modules", cleanId, "schema.ts"),
40
- node_path.default.join(root, "modules", moduleId, "schema.ts"),
41
- node_path.default.join(root, "node_modules", moduleId, "dist", "schema.cjs"),
42
- node_path.default.join(root, "node_modules", `@arch-cadre/${cleanId}`, "dist", "schema.cjs"),
43
- node_path.default.join(root, "node_modules", moduleId, "src", "schema.ts"),
44
- node_path.default.join(root, "node_modules", `@arch-cadre/${cleanId}`, "src", "schema.ts"),
45
- node_path.default.resolve(root, "../../packages", cleanId, "src", "schema.ts"),
46
- node_path.default.resolve(root, "../../packages", `kryo-${cleanId}`, "src", "schema.ts"),
47
- node_path.default.resolve(root, "../../packages", cleanId, "schema.ts")
48
- ];
49
- for (const p of possible) try {
50
- await node_fs_promises.default.access(p);
51
- console.log(`[Kernel:Lifecycle] Resolved schema for ${moduleId} at: ${p}`);
52
- return p;
53
- } catch {
54
- console.warn(`[Kernel:Lifecycle] Unresolved schema for ${moduleId} at: ${p}`);
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
- const execAsync = (0, node_util.promisify)(node_child_process.exec);
61
- console.log(`[Kernel:Lifecycle] Targeted sync for module: ${moduleId}`);
62
- const root = process.cwd();
63
- const enabledFromDb = await _arch_cadre_core_server.db.select({ id: _arch_cadre_core.systemModulesTable.id }).from(_arch_cadre_core.systemModulesTable).where((0, drizzle_orm.eq)(_arch_cadre_core.systemModulesTable.enabled, true));
64
- const activeModuleIds = new Set(enabledFromDb.map((m) => m.id));
65
- activeModuleIds.add("@arch-cadre/core");
66
- activeModuleIds.add(moduleId);
67
- const schemaPaths = [];
68
- for (const id of Array.from(activeModuleIds)) {
69
- const p = await resolveSchemaPath(id);
70
- if (p) schemaPaths.push(p);
71
- }
72
- if (schemaPaths.length === 0) {
73
- console.warn(`[Kernel:Lifecycle] No schema paths resolved for ${moduleId}, skipping push.`);
74
- return;
75
- }
76
- const configPath = node_path.default.join(root, "drizzle.config.ts");
77
- const cmd = `"${node_path.default.join(root, "node_modules", ".bin", "drizzle-kit")}" push --force --config=${configPath}`;
78
- console.log(`[Kernel:Lifecycle] Executing isolated migration. Modules: ${Array.from(activeModuleIds).join(", ")}`);
79
- try {
80
- await execAsync(cmd, {
81
- env: {
82
- ...process.env,
83
- CI: "true",
84
- DRIZZLE_SCHEMA_OVERRIDE: schemaPaths.join(",")
85
- },
86
- cwd: root
87
- });
88
- console.log(`[Kernel:Lifecycle] Isolated migration successful for ${moduleId}`);
89
- } catch (e) {
90
- console.error(`[Kernel:Lifecycle] Isolated migration failed for ${moduleId}:`);
91
- console.error(e.stdout || e.message);
92
- throw new Error(`Migration failed: ${moduleId}`);
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
- try {
97
- const allModules = await require_manage.getModules();
98
- const manifest = allModules.find((m) => m.id === moduleId);
99
- await updateStep(moduleId, "Validate module...");
100
- await sleep(500);
101
- if (!manifest) return;
102
- if (isEnabled) {
103
- await updateStep(moduleId, "Queued...");
104
- await sleep(500);
105
- if (manifest.dependencies?.length) {
106
- const pendingDeps = manifest.dependencies.filter((depId) => {
107
- const dep = allModules.find((m) => m.id === depId);
108
- return dep && !dep.enabled && !dep.system;
109
- });
110
- if (pendingDeps.length > 0) for (const depId of pendingDeps) {
111
- await updateStep(moduleId, `Waiting for dependency "${depId}"...`);
112
- await performToggle(depId, true);
113
- await sleep(500);
114
- }
115
- }
116
- await updateStep(moduleId, "Initializing...");
117
- await sleep(500);
118
- await _arch_cadre_core_server.db.update(_arch_cadre_core.systemModulesTable).set({ enabled: true }).where((0, drizzle_orm.eq)(_arch_cadre_core.systemModulesTable.id, moduleId));
119
- const instance = await require_manage.getModuleInstance(moduleId);
120
- await updateStep(moduleId, "Migrate database...");
121
- await sleep(500);
122
- try {
123
- if (instance?.onMigrate) await instance.onMigrate();
124
- else await pushModuleSchema(moduleId);
125
- await updateStep(moduleId, "Migration successful");
126
- } catch (e) {
127
- console.error(`[Kernel] Migration failed for ${moduleId}:`, e);
128
- await updateStep(moduleId, `Migration failed: ${e.message}`);
129
- await sleep(500);
130
- }
131
- if (instance?.onEnable) {
132
- await updateStep(moduleId, "Running setup...");
133
- await sleep(500);
134
- await instance.onEnable();
135
- }
136
- await updateStep(moduleId, "Finishing...");
137
- await sleep(500);
138
- await _arch_cadre_core_server.db.update(_arch_cadre_core.systemModulesTable).set({
139
- installed: true,
140
- lastStep: null
141
- }).where((0, drizzle_orm.eq)(_arch_cadre_core.systemModulesTable.id, moduleId));
142
- } else {
143
- const dependents = allModules.filter((m) => {
144
- if (!m.enabled || m.id === moduleId) return false;
145
- if (m.dependencies?.includes(moduleId)) return true;
146
- if (m.extends?.includes(moduleId)) return m.extends.filter((targetId) => {
147
- if (targetId === moduleId) return false;
148
- return allModules.find((mod) => mod.id === targetId)?.enabled;
149
- }).length === 0;
150
- return false;
151
- });
152
- if (dependents.length > 0) {
153
- await updateStep(moduleId, `Deactivating dependents...`);
154
- for (const dep of dependents) {
155
- await performToggle(dep.id, false);
156
- await sleep(500);
157
- }
158
- }
159
- await updateStep(moduleId, "Deactivating...");
160
- const instance = await require_manage.getModuleInstance(moduleId);
161
- if (instance?.onDisable) await instance.onDisable();
162
- await _arch_cadre_core_server.db.update(_arch_cadre_core.systemModulesTable).set({
163
- enabled: false,
164
- installed: false
165
- }).where((0, drizzle_orm.eq)(_arch_cadre_core.systemModulesTable.id, moduleId));
166
- await updateStep(moduleId, null);
167
- }
168
- } catch (e) {
169
- console.error(`[Kernel] Fatal error for ${moduleId}:`, e);
170
- await updateStep(moduleId, `Error: ${e.message}`);
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
- const manifest = (await require_manage.getModules()).find((m) => m.id === moduleId);
175
- if (!manifest) throw new Error(`Module "${moduleId}" not found`);
176
- if (manifest.enabled === isEnabled) return { success: true };
177
- performToggle(moduleId, isEnabled);
178
- return { success: true };
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
- const allModules = await require_manage.getModules();
182
- for (const mod of allModules) if (mod.enabled) try {
183
- const instance = await require_manage.getModuleInstance(mod.id);
184
- if (instance?.init) await instance.init();
185
- } catch (e) {
186
- console.error(`[Kernel] Failed to init module ${mod.id}:`, e);
187
- }
188
- }
189
-
190
- //#endregion
191
- exports.initOperationalModules = initOperationalModules;
192
- exports.pushModuleSchema = pushModuleSchema;
193
- exports.toggleModuleState = toggleModuleState;
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
+ }
@@ -0,0 +1,5 @@
1
+ export declare function pushModuleSchema(moduleId: string): Promise<void>;
2
+ export declare function toggleModuleState(moduleId: string, isEnabled: boolean): Promise<{
3
+ success: boolean;
4
+ }>;
5
+ export declare function initOperationalModules(): Promise<void>;