@objectstack/core 1.0.2 → 1.0.5

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 (125) hide show
  1. package/.turbo/turbo-build.log +58 -0
  2. package/CHANGELOG.md +25 -0
  3. package/dist/index.cjs +4294 -0
  4. package/dist/index.cjs.map +1 -0
  5. package/dist/index.d.cts +1777 -0
  6. package/dist/index.d.ts +1776 -21
  7. package/dist/index.js +4246 -23
  8. package/dist/index.js.map +1 -0
  9. package/package.json +4 -4
  10. package/tsconfig.json +1 -3
  11. package/dist/api-registry-plugin.d.ts +0 -54
  12. package/dist/api-registry-plugin.d.ts.map +0 -1
  13. package/dist/api-registry-plugin.js +0 -53
  14. package/dist/api-registry-plugin.test.d.ts +0 -2
  15. package/dist/api-registry-plugin.test.d.ts.map +0 -1
  16. package/dist/api-registry-plugin.test.js +0 -334
  17. package/dist/api-registry.d.ts +0 -259
  18. package/dist/api-registry.d.ts.map +0 -1
  19. package/dist/api-registry.js +0 -600
  20. package/dist/api-registry.test.d.ts +0 -2
  21. package/dist/api-registry.test.d.ts.map +0 -1
  22. package/dist/api-registry.test.js +0 -957
  23. package/dist/contracts/data-engine.d.ts +0 -62
  24. package/dist/contracts/data-engine.d.ts.map +0 -1
  25. package/dist/contracts/data-engine.js +0 -1
  26. package/dist/contracts/http-server.d.ts +0 -119
  27. package/dist/contracts/http-server.d.ts.map +0 -1
  28. package/dist/contracts/http-server.js +0 -11
  29. package/dist/contracts/logger.d.ts +0 -63
  30. package/dist/contracts/logger.d.ts.map +0 -1
  31. package/dist/contracts/logger.js +0 -1
  32. package/dist/dependency-resolver.d.ts +0 -62
  33. package/dist/dependency-resolver.d.ts.map +0 -1
  34. package/dist/dependency-resolver.js +0 -317
  35. package/dist/dependency-resolver.test.d.ts +0 -2
  36. package/dist/dependency-resolver.test.d.ts.map +0 -1
  37. package/dist/dependency-resolver.test.js +0 -241
  38. package/dist/health-monitor.d.ts +0 -65
  39. package/dist/health-monitor.d.ts.map +0 -1
  40. package/dist/health-monitor.js +0 -269
  41. package/dist/health-monitor.test.d.ts +0 -2
  42. package/dist/health-monitor.test.d.ts.map +0 -1
  43. package/dist/health-monitor.test.js +0 -68
  44. package/dist/hot-reload.d.ts +0 -79
  45. package/dist/hot-reload.d.ts.map +0 -1
  46. package/dist/hot-reload.js +0 -313
  47. package/dist/index.d.ts.map +0 -1
  48. package/dist/kernel-base.d.ts +0 -84
  49. package/dist/kernel-base.d.ts.map +0 -1
  50. package/dist/kernel-base.js +0 -219
  51. package/dist/kernel.d.ts +0 -113
  52. package/dist/kernel.d.ts.map +0 -1
  53. package/dist/kernel.js +0 -472
  54. package/dist/kernel.test.d.ts +0 -2
  55. package/dist/kernel.test.d.ts.map +0 -1
  56. package/dist/kernel.test.js +0 -414
  57. package/dist/lite-kernel.d.ts +0 -55
  58. package/dist/lite-kernel.d.ts.map +0 -1
  59. package/dist/lite-kernel.js +0 -112
  60. package/dist/lite-kernel.test.d.ts +0 -2
  61. package/dist/lite-kernel.test.d.ts.map +0 -1
  62. package/dist/lite-kernel.test.js +0 -161
  63. package/dist/logger.d.ts +0 -71
  64. package/dist/logger.d.ts.map +0 -1
  65. package/dist/logger.js +0 -312
  66. package/dist/logger.test.d.ts +0 -2
  67. package/dist/logger.test.d.ts.map +0 -1
  68. package/dist/logger.test.js +0 -92
  69. package/dist/plugin-loader.d.ts +0 -164
  70. package/dist/plugin-loader.d.ts.map +0 -1
  71. package/dist/plugin-loader.js +0 -319
  72. package/dist/plugin-loader.test.d.ts +0 -2
  73. package/dist/plugin-loader.test.d.ts.map +0 -1
  74. package/dist/plugin-loader.test.js +0 -348
  75. package/dist/qa/adapter.d.ts +0 -14
  76. package/dist/qa/adapter.d.ts.map +0 -1
  77. package/dist/qa/adapter.js +0 -1
  78. package/dist/qa/http-adapter.d.ts +0 -16
  79. package/dist/qa/http-adapter.d.ts.map +0 -1
  80. package/dist/qa/http-adapter.js +0 -107
  81. package/dist/qa/index.d.ts +0 -4
  82. package/dist/qa/index.d.ts.map +0 -1
  83. package/dist/qa/index.js +0 -3
  84. package/dist/qa/runner.d.ts +0 -27
  85. package/dist/qa/runner.d.ts.map +0 -1
  86. package/dist/qa/runner.js +0 -157
  87. package/dist/security/index.d.ts +0 -17
  88. package/dist/security/index.d.ts.map +0 -1
  89. package/dist/security/index.js +0 -17
  90. package/dist/security/permission-manager.d.ts +0 -96
  91. package/dist/security/permission-manager.d.ts.map +0 -1
  92. package/dist/security/permission-manager.js +0 -235
  93. package/dist/security/permission-manager.test.d.ts +0 -2
  94. package/dist/security/permission-manager.test.d.ts.map +0 -1
  95. package/dist/security/permission-manager.test.js +0 -220
  96. package/dist/security/plugin-config-validator.d.ts +0 -79
  97. package/dist/security/plugin-config-validator.d.ts.map +0 -1
  98. package/dist/security/plugin-config-validator.js +0 -166
  99. package/dist/security/plugin-config-validator.test.d.ts +0 -2
  100. package/dist/security/plugin-config-validator.test.d.ts.map +0 -1
  101. package/dist/security/plugin-config-validator.test.js +0 -223
  102. package/dist/security/plugin-permission-enforcer.d.ts +0 -154
  103. package/dist/security/plugin-permission-enforcer.d.ts.map +0 -1
  104. package/dist/security/plugin-permission-enforcer.js +0 -323
  105. package/dist/security/plugin-permission-enforcer.test.d.ts +0 -2
  106. package/dist/security/plugin-permission-enforcer.test.d.ts.map +0 -1
  107. package/dist/security/plugin-permission-enforcer.test.js +0 -205
  108. package/dist/security/plugin-signature-verifier.d.ts +0 -96
  109. package/dist/security/plugin-signature-verifier.d.ts.map +0 -1
  110. package/dist/security/plugin-signature-verifier.js +0 -250
  111. package/dist/security/sandbox-runtime.d.ts +0 -115
  112. package/dist/security/sandbox-runtime.d.ts.map +0 -1
  113. package/dist/security/sandbox-runtime.js +0 -311
  114. package/dist/security/security-scanner.d.ts +0 -92
  115. package/dist/security/security-scanner.d.ts.map +0 -1
  116. package/dist/security/security-scanner.js +0 -273
  117. package/dist/types.d.ts +0 -89
  118. package/dist/types.d.ts.map +0 -1
  119. package/dist/types.js +0 -1
  120. package/dist/utils/env.d.ts +0 -20
  121. package/dist/utils/env.d.ts.map +0 -1
  122. package/dist/utils/env.js +0 -46
  123. package/dist/utils/env.test.d.ts +0 -2
  124. package/dist/utils/env.test.d.ts.map +0 -1
  125. package/dist/utils/env.test.js +0 -52
@@ -1,79 +0,0 @@
1
- import type { HotReloadConfig } from '@objectstack/spec/kernel';
2
- import type { ObjectLogger } from './logger.js';
3
- import type { Plugin } from './types.js';
4
- /**
5
- * Plugin State Manager
6
- *
7
- * Handles state persistence and restoration during hot reloads
8
- */
9
- declare class PluginStateManager {
10
- private logger;
11
- private stateSnapshots;
12
- private memoryStore;
13
- constructor(logger: ObjectLogger);
14
- /**
15
- * Save plugin state before reload
16
- */
17
- saveState(pluginId: string, version: string, state: Record<string, any>, config: HotReloadConfig): Promise<string>;
18
- /**
19
- * Restore plugin state after reload
20
- */
21
- restoreState(pluginId: string, snapshotId?: string): Promise<Record<string, any> | undefined>;
22
- /**
23
- * Clear state for a plugin
24
- */
25
- clearState(pluginId: string): void;
26
- /**
27
- * Calculate simple checksum for state verification
28
- * WARNING: This is a simple hash for demo purposes.
29
- * In production, use a cryptographic hash like SHA-256.
30
- */
31
- private calculateChecksum;
32
- /**
33
- * Shutdown state manager
34
- */
35
- shutdown(): void;
36
- }
37
- /**
38
- * Hot Reload Manager
39
- *
40
- * Manages hot reloading of plugins with state preservation
41
- */
42
- export declare class HotReloadManager {
43
- private logger;
44
- private stateManager;
45
- private reloadConfigs;
46
- private watchHandles;
47
- private reloadTimers;
48
- constructor(logger: ObjectLogger);
49
- /**
50
- * Register a plugin for hot reload
51
- */
52
- registerPlugin(pluginName: string, config: HotReloadConfig): void;
53
- /**
54
- * Start watching for changes (requires file system integration)
55
- */
56
- startWatching(pluginName: string): void;
57
- /**
58
- * Stop watching for changes
59
- */
60
- stopWatching(pluginName: string): void;
61
- /**
62
- * Trigger hot reload for a plugin
63
- */
64
- reloadPlugin(pluginName: string, plugin: Plugin, version: string, getPluginState: () => Record<string, any>, restorePluginState: (state: Record<string, any>) => void): Promise<boolean>;
65
- /**
66
- * Schedule a reload with debouncing
67
- */
68
- scheduleReload(pluginName: string, reloadFn: () => Promise<void>): void;
69
- /**
70
- * Get state manager for direct access
71
- */
72
- getStateManager(): PluginStateManager;
73
- /**
74
- * Shutdown hot reload manager
75
- */
76
- shutdown(): void;
77
- }
78
- export {};
79
- //# sourceMappingURL=hot-reload.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hot-reload.d.ts","sourceRoot":"","sources":["../src/hot-reload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAezC;;;;GAIG;AACH,cAAM,kBAAkB;IACtB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,cAAc,CAA0C;IAChE,OAAO,CAAC,WAAW,CAA0B;gBAEjC,MAAM,EAAE,YAAY;IAIhC;;OAEG;IACG,SAAS,CACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,MAAM,CAAC;IA8ClB;;OAEG;IACG,YAAY,CAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;IAgC3C;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMlC;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;IACH,QAAQ,IAAI,IAAI;CAKjB;AAED;;;;GAIG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,aAAa,CAAsC;IAC3D,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,YAAY,CAAqC;gBAE7C,MAAM,EAAE,YAAY;IAKhC;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI;IAcjE;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAcvC;;OAEG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAgBtC;;OAEG;IACG,YAAY,CAChB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzC,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,GACvD,OAAO,CAAC,OAAO,CAAC;IA8EnB;;OAEG;IACH,cAAc,CACZ,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAC5B,IAAI;IAiCP;;OAEG;IACH,eAAe,IAAI,kBAAkB;IAIrC;;OAEG;IACH,QAAQ,IAAI,IAAI;CAkBjB"}
@@ -1,313 +0,0 @@
1
- // Polyfill for UUID generation to support both Node.js and Browser
2
- const generateUUID = () => {
3
- if (typeof crypto !== 'undefined' && crypto.randomUUID) {
4
- return crypto.randomUUID();
5
- }
6
- // Basic UUID v4 fallback
7
- return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
8
- const r = Math.random() * 16 | 0;
9
- const v = c === 'x' ? r : (r & 0x3 | 0x8);
10
- return v.toString(16);
11
- });
12
- };
13
- /**
14
- * Plugin State Manager
15
- *
16
- * Handles state persistence and restoration during hot reloads
17
- */
18
- class PluginStateManager {
19
- constructor(logger) {
20
- this.stateSnapshots = new Map();
21
- this.memoryStore = new Map();
22
- this.logger = logger.child({ component: 'StateManager' });
23
- }
24
- /**
25
- * Save plugin state before reload
26
- */
27
- async saveState(pluginId, version, state, config) {
28
- const snapshot = {
29
- pluginId,
30
- version,
31
- timestamp: new Date().toISOString(),
32
- state,
33
- metadata: {
34
- checksum: this.calculateChecksum(state),
35
- compressed: false,
36
- },
37
- };
38
- const snapshotId = generateUUID();
39
- switch (config.stateStrategy) {
40
- case 'memory':
41
- this.memoryStore.set(snapshotId, snapshot);
42
- this.logger.debug('State saved to memory', { pluginId, snapshotId });
43
- break;
44
- case 'disk':
45
- // For disk storage, we would write to file system
46
- // For now, store in memory as fallback
47
- this.memoryStore.set(snapshotId, snapshot);
48
- this.logger.debug('State saved to disk (memory fallback)', { pluginId, snapshotId });
49
- break;
50
- case 'distributed':
51
- // For distributed storage, would use Redis/etcd
52
- // For now, store in memory as fallback
53
- this.memoryStore.set(snapshotId, snapshot);
54
- this.logger.debug('State saved to distributed store (memory fallback)', {
55
- pluginId,
56
- snapshotId
57
- });
58
- break;
59
- case 'none':
60
- this.logger.debug('State persistence disabled', { pluginId });
61
- break;
62
- }
63
- this.stateSnapshots.set(pluginId, snapshot);
64
- return snapshotId;
65
- }
66
- /**
67
- * Restore plugin state after reload
68
- */
69
- async restoreState(pluginId, snapshotId) {
70
- // Try to get from snapshot ID first, otherwise use latest for plugin
71
- let snapshot;
72
- if (snapshotId) {
73
- snapshot = this.memoryStore.get(snapshotId);
74
- }
75
- else {
76
- snapshot = this.stateSnapshots.get(pluginId);
77
- }
78
- if (!snapshot) {
79
- this.logger.warn('No state snapshot found', { pluginId, snapshotId });
80
- return undefined;
81
- }
82
- // Verify checksum if available
83
- if (snapshot.metadata?.checksum) {
84
- const currentChecksum = this.calculateChecksum(snapshot.state);
85
- if (currentChecksum !== snapshot.metadata.checksum) {
86
- this.logger.error('State checksum mismatch - data may be corrupted', {
87
- pluginId,
88
- expected: snapshot.metadata.checksum,
89
- actual: currentChecksum
90
- });
91
- return undefined;
92
- }
93
- }
94
- this.logger.debug('State restored', { pluginId, version: snapshot.version });
95
- return snapshot.state;
96
- }
97
- /**
98
- * Clear state for a plugin
99
- */
100
- clearState(pluginId) {
101
- this.stateSnapshots.delete(pluginId);
102
- // Note: We don't clear memory store as it might have multiple snapshots
103
- this.logger.debug('State cleared', { pluginId });
104
- }
105
- /**
106
- * Calculate simple checksum for state verification
107
- * WARNING: This is a simple hash for demo purposes.
108
- * In production, use a cryptographic hash like SHA-256.
109
- */
110
- calculateChecksum(state) {
111
- // Simple checksum using JSON serialization
112
- // TODO: Replace with crypto.createHash('sha256') for production
113
- const stateStr = JSON.stringify(state);
114
- let hash = 0;
115
- for (let i = 0; i < stateStr.length; i++) {
116
- const char = stateStr.charCodeAt(i);
117
- hash = ((hash << 5) - hash) + char;
118
- hash = hash & hash; // Convert to 32-bit integer
119
- }
120
- return hash.toString(16);
121
- }
122
- /**
123
- * Shutdown state manager
124
- */
125
- shutdown() {
126
- this.stateSnapshots.clear();
127
- this.memoryStore.clear();
128
- this.logger.info('State manager shutdown complete');
129
- }
130
- }
131
- /**
132
- * Hot Reload Manager
133
- *
134
- * Manages hot reloading of plugins with state preservation
135
- */
136
- export class HotReloadManager {
137
- constructor(logger) {
138
- this.reloadConfigs = new Map();
139
- this.watchHandles = new Map();
140
- this.reloadTimers = new Map();
141
- this.logger = logger.child({ component: 'HotReload' });
142
- this.stateManager = new PluginStateManager(logger);
143
- }
144
- /**
145
- * Register a plugin for hot reload
146
- */
147
- registerPlugin(pluginName, config) {
148
- if (!config.enabled) {
149
- this.logger.debug('Hot reload disabled for plugin', { plugin: pluginName });
150
- return;
151
- }
152
- this.reloadConfigs.set(pluginName, config);
153
- this.logger.info('Plugin registered for hot reload', {
154
- plugin: pluginName,
155
- watchPatterns: config.watchPatterns,
156
- stateStrategy: config.stateStrategy
157
- });
158
- }
159
- /**
160
- * Start watching for changes (requires file system integration)
161
- */
162
- startWatching(pluginName) {
163
- const config = this.reloadConfigs.get(pluginName);
164
- if (!config || !config.enabled) {
165
- return;
166
- }
167
- // Note: Actual file watching would require chokidar or similar
168
- // This is a placeholder for the integration point
169
- this.logger.info('File watching started', {
170
- plugin: pluginName,
171
- patterns: config.watchPatterns
172
- });
173
- }
174
- /**
175
- * Stop watching for changes
176
- */
177
- stopWatching(pluginName) {
178
- const handle = this.watchHandles.get(pluginName);
179
- if (handle) {
180
- // Stop watching (would call chokidar close())
181
- this.watchHandles.delete(pluginName);
182
- this.logger.info('File watching stopped', { plugin: pluginName });
183
- }
184
- // Clear any pending reload timers
185
- const timer = this.reloadTimers.get(pluginName);
186
- if (timer) {
187
- clearTimeout(timer);
188
- this.reloadTimers.delete(pluginName);
189
- }
190
- }
191
- /**
192
- * Trigger hot reload for a plugin
193
- */
194
- async reloadPlugin(pluginName, plugin, version, getPluginState, restorePluginState) {
195
- const config = this.reloadConfigs.get(pluginName);
196
- if (!config) {
197
- this.logger.warn('Cannot reload - plugin not registered', { plugin: pluginName });
198
- return false;
199
- }
200
- this.logger.info('Starting hot reload', { plugin: pluginName });
201
- try {
202
- // Call before reload hooks
203
- if (config.beforeReload) {
204
- this.logger.debug('Executing before reload hooks', {
205
- plugin: pluginName,
206
- hooks: config.beforeReload
207
- });
208
- // Hook execution would be done through kernel's hook system
209
- }
210
- // Save state if configured
211
- let snapshotId;
212
- if (config.preserveState && config.stateStrategy !== 'none') {
213
- const state = getPluginState();
214
- snapshotId = await this.stateManager.saveState(pluginName, version, state, config);
215
- this.logger.debug('Plugin state saved', { plugin: pluginName, snapshotId });
216
- }
217
- // Gracefully shutdown the plugin
218
- if (plugin.destroy) {
219
- this.logger.debug('Destroying plugin', { plugin: pluginName });
220
- const shutdownPromise = plugin.destroy();
221
- const timeoutPromise = new Promise((_, reject) => {
222
- setTimeout(() => reject(new Error('Shutdown timeout')), config.shutdownTimeout);
223
- });
224
- await Promise.race([shutdownPromise, timeoutPromise]);
225
- this.logger.debug('Plugin destroyed successfully', { plugin: pluginName });
226
- }
227
- // At this point, the kernel would reload the plugin module
228
- // This would be handled by the plugin loader
229
- this.logger.debug('Plugin module would be reloaded here', { plugin: pluginName });
230
- // Restore state if we saved it
231
- if (snapshotId && config.preserveState) {
232
- const restoredState = await this.stateManager.restoreState(pluginName, snapshotId);
233
- if (restoredState) {
234
- restorePluginState(restoredState);
235
- this.logger.debug('Plugin state restored', { plugin: pluginName });
236
- }
237
- }
238
- // Call after reload hooks
239
- if (config.afterReload) {
240
- this.logger.debug('Executing after reload hooks', {
241
- plugin: pluginName,
242
- hooks: config.afterReload
243
- });
244
- // Hook execution would be done through kernel's hook system
245
- }
246
- this.logger.info('Hot reload completed successfully', { plugin: pluginName });
247
- return true;
248
- }
249
- catch (error) {
250
- this.logger.error('Hot reload failed', {
251
- plugin: pluginName,
252
- error
253
- });
254
- return false;
255
- }
256
- }
257
- /**
258
- * Schedule a reload with debouncing
259
- */
260
- scheduleReload(pluginName, reloadFn) {
261
- const config = this.reloadConfigs.get(pluginName);
262
- if (!config) {
263
- return;
264
- }
265
- // Clear existing timer
266
- const existingTimer = this.reloadTimers.get(pluginName);
267
- if (existingTimer) {
268
- clearTimeout(existingTimer);
269
- }
270
- // Schedule new reload with debounce
271
- const timer = setTimeout(() => {
272
- this.logger.debug('Debounce period elapsed, executing reload', {
273
- plugin: pluginName
274
- });
275
- reloadFn().catch(error => {
276
- this.logger.error('Scheduled reload failed', {
277
- plugin: pluginName,
278
- error
279
- });
280
- });
281
- this.reloadTimers.delete(pluginName);
282
- }, config.debounceDelay);
283
- this.reloadTimers.set(pluginName, timer);
284
- this.logger.debug('Reload scheduled with debounce', {
285
- plugin: pluginName,
286
- delay: config.debounceDelay
287
- });
288
- }
289
- /**
290
- * Get state manager for direct access
291
- */
292
- getStateManager() {
293
- return this.stateManager;
294
- }
295
- /**
296
- * Shutdown hot reload manager
297
- */
298
- shutdown() {
299
- // Stop all watching
300
- for (const pluginName of this.watchHandles.keys()) {
301
- this.stopWatching(pluginName);
302
- }
303
- // Clear all timers
304
- for (const timer of this.reloadTimers.values()) {
305
- clearTimeout(timer);
306
- }
307
- this.reloadConfigs.clear();
308
- this.watchHandles.clear();
309
- this.reloadTimers.clear();
310
- this.stateManager.shutdown();
311
- this.logger.info('Hot reload manager shutdown complete');
312
- }
313
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,eAAe,CAAC;AAGpC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AAGzC,YAAY,EACR,MAAM,EACN,WAAW,EACX,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,UAAU,EACV,WAAW,EACX,eAAe,EAClB,MAAM,6BAA6B,CAAC"}
@@ -1,84 +0,0 @@
1
- import type { Plugin, PluginContext } from './types.js';
2
- import type { Logger } from '@objectstack/spec/contracts';
3
- import type { IServiceRegistry } from '@objectstack/spec/contracts';
4
- /**
5
- * Kernel state machine
6
- */
7
- export type KernelState = 'idle' | 'initializing' | 'running' | 'stopping' | 'stopped';
8
- /**
9
- * ObjectKernelBase - Abstract Base Class for Microkernel
10
- *
11
- * Provides common functionality for ObjectKernel and LiteKernel:
12
- * - Plugin management (Map storage)
13
- * - Dependency resolution (topological sort)
14
- * - Hook/Event system
15
- * - Context creation
16
- * - State validation
17
- *
18
- * This eliminates code duplication between the implementations.
19
- */
20
- export declare abstract class ObjectKernelBase {
21
- protected plugins: Map<string, Plugin>;
22
- protected services: IServiceRegistry | Map<string, any>;
23
- protected hooks: Map<string, Array<(...args: any[]) => void | Promise<void>>>;
24
- protected state: KernelState;
25
- protected logger: Logger;
26
- protected context: PluginContext;
27
- constructor(logger: Logger);
28
- /**
29
- * Validate kernel state
30
- * @param requiredState - Required state for the operation
31
- * @throws Error if current state doesn't match
32
- */
33
- protected validateState(requiredState: KernelState): void;
34
- /**
35
- * Validate kernel is in idle state (for plugin registration)
36
- */
37
- protected validateIdle(): void;
38
- /**
39
- * Create the plugin context
40
- * Subclasses can override to customize context creation
41
- */
42
- protected createContext(): PluginContext;
43
- /**
44
- * Resolve plugin dependencies using topological sort
45
- * @returns Ordered list of plugins (dependencies first)
46
- */
47
- protected resolveDependencies(): Plugin[];
48
- /**
49
- * Run plugin init phase
50
- * @param plugin - Plugin to initialize
51
- */
52
- protected runPluginInit(plugin: Plugin): Promise<void>;
53
- /**
54
- * Run plugin start phase
55
- * @param plugin - Plugin to start
56
- */
57
- protected runPluginStart(plugin: Plugin): Promise<void>;
58
- /**
59
- * Run plugin destroy phase
60
- * @param plugin - Plugin to destroy
61
- */
62
- protected runPluginDestroy(plugin: Plugin): Promise<void>;
63
- /**
64
- * Trigger a hook with all registered handlers
65
- * @param name - Hook name
66
- * @param args - Arguments to pass to handlers
67
- */
68
- protected triggerHook(name: string, ...args: any[]): Promise<void>;
69
- /**
70
- * Get current kernel state
71
- */
72
- getState(): KernelState;
73
- /**
74
- * Get all registered plugins
75
- */
76
- getPlugins(): Map<string, Plugin>;
77
- /**
78
- * Abstract methods to be implemented by subclasses
79
- */
80
- abstract use(plugin: Plugin): this | Promise<this>;
81
- abstract bootstrap(): Promise<void>;
82
- abstract destroy(): Promise<void>;
83
- }
84
- //# sourceMappingURL=kernel-base.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"kernel-base.d.ts","sourceRoot":"","sources":["../src/kernel-base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAEpE;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,cAAc,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;AAEvF;;;;;;;;;;;GAWG;AACH,8BAAsB,gBAAgB;IAClC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;IACnD,SAAS,CAAC,QAAQ,EAAE,gBAAgB,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAa;IACpE,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAa;IAC1F,SAAS,CAAC,KAAK,EAAE,WAAW,CAAU;IACtC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,OAAO,EAAG,aAAa,CAAC;gBAEtB,MAAM,EAAE,MAAM;IAI1B;;;;OAIG;IACH,SAAS,CAAC,aAAa,CAAC,aAAa,EAAE,WAAW,GAAG,IAAI;IAQzD;;OAEG;IACH,SAAS,CAAC,YAAY,IAAI,IAAI;IAM9B;;;OAGG;IACH,SAAS,CAAC,aAAa,IAAI,aAAa;IAoDxC;;;OAGG;IACH,SAAS,CAAC,mBAAmB,IAAI,MAAM,EAAE;IA2CzC;;;OAGG;cACa,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa5D;;;OAGG;cACa,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAe7D;;;OAGG;cACa,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAe/D;;;;OAIG;cACa,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBxE;;OAEG;IACH,QAAQ,IAAI,WAAW;IAIvB;;OAEG;IACH,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAIjC;;OAEG;IACH,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAClD,QAAQ,CAAC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IACnC,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CACpC"}