@objectstack/core 0.6.1 → 0.7.1

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 (56) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/ENHANCED_FEATURES.md +380 -0
  3. package/README.md +299 -12
  4. package/dist/contracts/data-engine.d.ts +39 -22
  5. package/dist/contracts/data-engine.d.ts.map +1 -1
  6. package/dist/contracts/logger.d.ts +63 -0
  7. package/dist/contracts/logger.d.ts.map +1 -0
  8. package/dist/contracts/logger.js +1 -0
  9. package/dist/enhanced-kernel.d.ts +103 -0
  10. package/dist/enhanced-kernel.d.ts.map +1 -0
  11. package/dist/enhanced-kernel.js +403 -0
  12. package/dist/enhanced-kernel.test.d.ts +2 -0
  13. package/dist/enhanced-kernel.test.d.ts.map +1 -0
  14. package/dist/enhanced-kernel.test.js +412 -0
  15. package/dist/index.d.ts +11 -2
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +10 -2
  18. package/dist/kernel-base.d.ts +84 -0
  19. package/dist/kernel-base.d.ts.map +1 -0
  20. package/dist/kernel-base.js +219 -0
  21. package/dist/kernel.d.ts +11 -18
  22. package/dist/kernel.d.ts.map +1 -1
  23. package/dist/kernel.js +43 -114
  24. package/dist/kernel.test.d.ts +2 -0
  25. package/dist/kernel.test.d.ts.map +1 -0
  26. package/dist/kernel.test.js +161 -0
  27. package/dist/logger.d.ts +70 -0
  28. package/dist/logger.d.ts.map +1 -0
  29. package/dist/logger.js +268 -0
  30. package/dist/logger.test.d.ts +2 -0
  31. package/dist/logger.test.d.ts.map +1 -0
  32. package/dist/logger.test.js +92 -0
  33. package/dist/plugin-loader.d.ts +148 -0
  34. package/dist/plugin-loader.d.ts.map +1 -0
  35. package/dist/plugin-loader.js +287 -0
  36. package/dist/plugin-loader.test.d.ts +2 -0
  37. package/dist/plugin-loader.test.d.ts.map +1 -0
  38. package/dist/plugin-loader.test.js +339 -0
  39. package/dist/types.d.ts +2 -1
  40. package/dist/types.d.ts.map +1 -1
  41. package/examples/enhanced-kernel-example.ts +309 -0
  42. package/package.json +19 -4
  43. package/src/contracts/data-engine.ts +46 -24
  44. package/src/contracts/logger.ts +70 -0
  45. package/src/enhanced-kernel.test.ts +535 -0
  46. package/src/enhanced-kernel.ts +496 -0
  47. package/src/index.ts +23 -2
  48. package/src/kernel-base.ts +256 -0
  49. package/src/kernel.test.ts +200 -0
  50. package/src/kernel.ts +55 -129
  51. package/src/logger.test.ts +116 -0
  52. package/src/logger.ts +306 -0
  53. package/src/plugin-loader.test.ts +412 -0
  54. package/src/plugin-loader.ts +435 -0
  55. package/src/types.ts +2 -1
  56. package/vitest.config.ts +8 -0
@@ -0,0 +1,412 @@
1
+ import { describe, it, expect, beforeEach } from 'vitest';
2
+ import { EnhancedObjectKernel } from './enhanced-kernel';
3
+ import { ServiceLifecycle } from './plugin-loader';
4
+ describe('EnhancedObjectKernel', () => {
5
+ let kernel;
6
+ beforeEach(() => {
7
+ kernel = new EnhancedObjectKernel({
8
+ logger: { level: 'error' }, // Suppress logs in tests
9
+ gracefulShutdown: false, // Disable for tests
10
+ });
11
+ });
12
+ describe('Plugin Registration and Loading', () => {
13
+ it('should register a plugin with version', async () => {
14
+ const plugin = {
15
+ name: 'versioned-plugin',
16
+ version: '1.2.3',
17
+ init: async () => { },
18
+ };
19
+ await kernel.use(plugin);
20
+ await kernel.bootstrap();
21
+ expect(kernel.isRunning()).toBe(true);
22
+ await kernel.shutdown();
23
+ });
24
+ it('should validate plugin during registration', async () => {
25
+ const invalidPlugin = {
26
+ name: '',
27
+ init: async () => { },
28
+ };
29
+ await expect(async () => {
30
+ await kernel.use(invalidPlugin);
31
+ }).rejects.toThrow();
32
+ });
33
+ it('should reject plugin registration after bootstrap', async () => {
34
+ await kernel.bootstrap();
35
+ const plugin = {
36
+ name: 'late-plugin',
37
+ init: async () => { },
38
+ };
39
+ await expect(async () => {
40
+ await kernel.use(plugin);
41
+ }).rejects.toThrow('Cannot register plugins after bootstrap');
42
+ await kernel.shutdown();
43
+ });
44
+ });
45
+ describe('Service Factory Registration', () => {
46
+ it('should register singleton service factory', async () => {
47
+ let callCount = 0;
48
+ kernel.registerServiceFactory('counter', () => {
49
+ callCount++;
50
+ return { count: callCount };
51
+ }, ServiceLifecycle.SINGLETON);
52
+ await kernel.bootstrap();
53
+ const service1 = await kernel.getServiceAsync('counter');
54
+ const service2 = await kernel.getServiceAsync('counter');
55
+ expect(callCount).toBe(1);
56
+ expect(service1).toBe(service2);
57
+ await kernel.shutdown();
58
+ });
59
+ it('should register transient service factory', async () => {
60
+ let callCount = 0;
61
+ kernel.registerServiceFactory('transient', () => {
62
+ callCount++;
63
+ return { count: callCount };
64
+ }, ServiceLifecycle.TRANSIENT);
65
+ await kernel.bootstrap();
66
+ const service1 = await kernel.getServiceAsync('transient');
67
+ const service2 = await kernel.getServiceAsync('transient');
68
+ expect(callCount).toBe(2);
69
+ expect(service1).not.toBe(service2);
70
+ await kernel.shutdown();
71
+ });
72
+ it('should register scoped service factory', async () => {
73
+ let callCount = 0;
74
+ kernel.registerServiceFactory('scoped', () => {
75
+ callCount++;
76
+ return { count: callCount };
77
+ }, ServiceLifecycle.SCOPED);
78
+ await kernel.bootstrap();
79
+ const service1 = await kernel.getServiceAsync('scoped', 'request-1');
80
+ const service2 = await kernel.getServiceAsync('scoped', 'request-1');
81
+ const service3 = await kernel.getServiceAsync('scoped', 'request-2');
82
+ expect(callCount).toBe(2); // Once per scope
83
+ expect(service1).toBe(service2); // Same within scope
84
+ expect(service1).not.toBe(service3); // Different across scopes
85
+ await kernel.shutdown();
86
+ });
87
+ });
88
+ describe('Plugin Lifecycle with Timeout', () => {
89
+ it('should timeout plugin init if it takes too long', async () => {
90
+ const plugin = {
91
+ name: 'slow-init',
92
+ version: '1.0.0',
93
+ init: async () => {
94
+ await new Promise(resolve => setTimeout(resolve, 5000)); // 5 seconds
95
+ },
96
+ startupTimeout: 100, // 100ms timeout
97
+ };
98
+ await kernel.use(plugin);
99
+ await expect(async () => {
100
+ await kernel.bootstrap();
101
+ }).rejects.toThrow('timeout');
102
+ }, 1000); // Test should complete in 1 second
103
+ it('should timeout plugin start if it takes too long', async () => {
104
+ const plugin = {
105
+ name: 'slow-start',
106
+ version: '1.0.0',
107
+ init: async () => { },
108
+ start: async () => {
109
+ await new Promise(resolve => setTimeout(resolve, 5000)); // 5 seconds
110
+ },
111
+ startupTimeout: 100, // 100ms timeout
112
+ };
113
+ await kernel.use(plugin);
114
+ await expect(async () => {
115
+ await kernel.bootstrap();
116
+ }).rejects.toThrow();
117
+ }, 1000); // Test should complete in 1 second
118
+ it('should complete plugin startup within timeout', async () => {
119
+ const plugin = {
120
+ name: 'fast-plugin',
121
+ version: '1.0.0',
122
+ init: async () => {
123
+ await new Promise(resolve => setTimeout(resolve, 10));
124
+ },
125
+ start: async () => {
126
+ await new Promise(resolve => setTimeout(resolve, 10));
127
+ },
128
+ startupTimeout: 1000,
129
+ };
130
+ await kernel.use(plugin);
131
+ await kernel.bootstrap();
132
+ expect(kernel.isRunning()).toBe(true);
133
+ await kernel.shutdown();
134
+ });
135
+ });
136
+ describe('Startup Failure Rollback', () => {
137
+ it('should rollback started plugins on failure', async () => {
138
+ let plugin1Destroyed = false;
139
+ const plugin1 = {
140
+ name: 'plugin-1',
141
+ version: '1.0.0',
142
+ init: async () => { },
143
+ start: async () => { },
144
+ destroy: async () => {
145
+ plugin1Destroyed = true;
146
+ },
147
+ };
148
+ const plugin2 = {
149
+ name: 'plugin-2',
150
+ version: '1.0.0',
151
+ init: async () => { },
152
+ start: async () => {
153
+ throw new Error('Startup failed');
154
+ },
155
+ };
156
+ await kernel.use(plugin1);
157
+ await kernel.use(plugin2);
158
+ await expect(async () => {
159
+ await kernel.bootstrap();
160
+ }).rejects.toThrow('failed to start');
161
+ // Plugin 1 should be rolled back
162
+ expect(plugin1Destroyed).toBe(true);
163
+ });
164
+ it('should not rollback if disabled', async () => {
165
+ const noRollbackKernel = new EnhancedObjectKernel({
166
+ logger: { level: 'error' },
167
+ rollbackOnFailure: false,
168
+ gracefulShutdown: false,
169
+ });
170
+ let plugin1Destroyed = false;
171
+ const plugin1 = {
172
+ name: 'plugin-1',
173
+ version: '1.0.0',
174
+ init: async () => { },
175
+ start: async () => { },
176
+ destroy: async () => {
177
+ plugin1Destroyed = true;
178
+ },
179
+ };
180
+ const plugin2 = {
181
+ name: 'plugin-2',
182
+ version: '1.0.0',
183
+ init: async () => { },
184
+ start: async () => {
185
+ throw new Error('Startup failed');
186
+ },
187
+ };
188
+ await noRollbackKernel.use(plugin1);
189
+ await noRollbackKernel.use(plugin2);
190
+ // Should not throw since rollback is disabled
191
+ await noRollbackKernel.bootstrap();
192
+ // Plugin 1 should NOT be destroyed
193
+ expect(plugin1Destroyed).toBe(false);
194
+ });
195
+ });
196
+ describe('Plugin Health Checks', () => {
197
+ it('should check individual plugin health', async () => {
198
+ const plugin = {
199
+ name: 'healthy-plugin',
200
+ version: '1.0.0',
201
+ init: async () => { },
202
+ };
203
+ await kernel.use(plugin);
204
+ await kernel.bootstrap();
205
+ const health = await kernel.checkPluginHealth('healthy-plugin');
206
+ expect(health.healthy).toBe(true);
207
+ expect(health.lastCheck).toBeInstanceOf(Date);
208
+ await kernel.shutdown();
209
+ });
210
+ it('should check all plugins health', async () => {
211
+ const plugin1 = {
212
+ name: 'plugin-1',
213
+ version: '1.0.0',
214
+ init: async () => { },
215
+ };
216
+ const plugin2 = {
217
+ name: 'plugin-2',
218
+ version: '1.0.0',
219
+ init: async () => { },
220
+ };
221
+ await kernel.use(plugin1);
222
+ await kernel.use(plugin2);
223
+ await kernel.bootstrap();
224
+ const allHealth = await kernel.checkAllPluginsHealth();
225
+ expect(allHealth.size).toBe(2);
226
+ expect(allHealth.get('plugin-1').healthy).toBe(true);
227
+ expect(allHealth.get('plugin-2').healthy).toBe(true);
228
+ await kernel.shutdown();
229
+ });
230
+ });
231
+ describe('Plugin Metrics', () => {
232
+ it('should track plugin startup times', async () => {
233
+ const plugin1 = {
234
+ name: 'plugin-1',
235
+ version: '1.0.0',
236
+ init: async () => { },
237
+ start: async () => {
238
+ await new Promise(resolve => setTimeout(resolve, 50));
239
+ },
240
+ };
241
+ const plugin2 = {
242
+ name: 'plugin-2',
243
+ version: '1.0.0',
244
+ init: async () => { },
245
+ start: async () => {
246
+ await new Promise(resolve => setTimeout(resolve, 30));
247
+ },
248
+ };
249
+ await kernel.use(plugin1);
250
+ await kernel.use(plugin2);
251
+ await kernel.bootstrap();
252
+ const metrics = kernel.getPluginMetrics();
253
+ expect(metrics.size).toBe(2);
254
+ expect(metrics.get('plugin-1')).toBeGreaterThan(0);
255
+ expect(metrics.get('plugin-2')).toBeGreaterThan(0);
256
+ await kernel.shutdown();
257
+ });
258
+ it('should not track metrics for plugins without start', async () => {
259
+ const plugin = {
260
+ name: 'no-start',
261
+ version: '1.0.0',
262
+ init: async () => { },
263
+ };
264
+ await kernel.use(plugin);
265
+ await kernel.bootstrap();
266
+ const metrics = kernel.getPluginMetrics();
267
+ expect(metrics.has('no-start')).toBe(false);
268
+ await kernel.shutdown();
269
+ });
270
+ });
271
+ describe('Graceful Shutdown', () => {
272
+ it('should call destroy on all plugins', async () => {
273
+ let plugin1Destroyed = false;
274
+ let plugin2Destroyed = false;
275
+ const plugin1 = {
276
+ name: 'plugin-1',
277
+ version: '1.0.0',
278
+ init: async () => { },
279
+ destroy: async () => {
280
+ plugin1Destroyed = true;
281
+ },
282
+ };
283
+ const plugin2 = {
284
+ name: 'plugin-2',
285
+ version: '1.0.0',
286
+ init: async () => { },
287
+ destroy: async () => {
288
+ plugin2Destroyed = true;
289
+ },
290
+ };
291
+ await kernel.use(plugin1);
292
+ await kernel.use(plugin2);
293
+ await kernel.bootstrap();
294
+ await kernel.shutdown();
295
+ expect(plugin1Destroyed).toBe(true);
296
+ expect(plugin2Destroyed).toBe(true);
297
+ });
298
+ it('should handle plugin destroy errors gracefully', async () => {
299
+ const plugin1 = {
300
+ name: 'error-destroy',
301
+ version: '1.0.0',
302
+ init: async () => { },
303
+ destroy: async () => {
304
+ throw new Error('Destroy failed');
305
+ },
306
+ };
307
+ const plugin2 = {
308
+ name: 'normal-plugin',
309
+ version: '1.0.0',
310
+ init: async () => { },
311
+ };
312
+ await kernel.use(plugin1);
313
+ await kernel.use(plugin2);
314
+ await kernel.bootstrap();
315
+ // Should not throw even if one plugin fails to destroy
316
+ await kernel.shutdown();
317
+ expect(kernel.getState()).toBe('stopped');
318
+ });
319
+ it('should trigger shutdown hook', async () => {
320
+ let hookCalled = false;
321
+ const plugin = {
322
+ name: 'hook-plugin',
323
+ version: '1.0.0',
324
+ init: async (ctx) => {
325
+ ctx.hook('kernel:shutdown', async () => {
326
+ hookCalled = true;
327
+ });
328
+ },
329
+ };
330
+ await kernel.use(plugin);
331
+ await kernel.bootstrap();
332
+ await kernel.shutdown();
333
+ expect(hookCalled).toBe(true);
334
+ });
335
+ it('should execute custom shutdown handlers', async () => {
336
+ let handlerCalled = false;
337
+ kernel.onShutdown(async () => {
338
+ handlerCalled = true;
339
+ });
340
+ await kernel.bootstrap();
341
+ await kernel.shutdown();
342
+ expect(handlerCalled).toBe(true);
343
+ });
344
+ });
345
+ describe('Dependency Resolution', () => {
346
+ it('should resolve plugin dependencies in correct order', async () => {
347
+ const initOrder = [];
348
+ const pluginA = {
349
+ name: 'plugin-a',
350
+ version: '1.0.0',
351
+ dependencies: ['plugin-b'],
352
+ init: async () => {
353
+ initOrder.push('plugin-a');
354
+ },
355
+ };
356
+ const pluginB = {
357
+ name: 'plugin-b',
358
+ version: '1.0.0',
359
+ init: async () => {
360
+ initOrder.push('plugin-b');
361
+ },
362
+ };
363
+ await kernel.use(pluginA);
364
+ await kernel.use(pluginB);
365
+ await kernel.bootstrap();
366
+ expect(initOrder).toEqual(['plugin-b', 'plugin-a']);
367
+ await kernel.shutdown();
368
+ });
369
+ it('should detect circular plugin dependencies', async () => {
370
+ const pluginA = {
371
+ name: 'plugin-a',
372
+ version: '1.0.0',
373
+ dependencies: ['plugin-b'],
374
+ init: async () => { },
375
+ };
376
+ const pluginB = {
377
+ name: 'plugin-b',
378
+ version: '1.0.0',
379
+ dependencies: ['plugin-a'],
380
+ init: async () => { },
381
+ };
382
+ await kernel.use(pluginA);
383
+ await kernel.use(pluginB);
384
+ await expect(async () => {
385
+ await kernel.bootstrap();
386
+ }).rejects.toThrow('Circular dependency');
387
+ });
388
+ });
389
+ describe('State Management', () => {
390
+ it('should track kernel state correctly', async () => {
391
+ expect(kernel.getState()).toBe('idle');
392
+ await kernel.bootstrap();
393
+ expect(kernel.getState()).toBe('running');
394
+ expect(kernel.isRunning()).toBe(true);
395
+ await kernel.shutdown();
396
+ expect(kernel.getState()).toBe('stopped');
397
+ expect(kernel.isRunning()).toBe(false);
398
+ });
399
+ it('should not allow double bootstrap', async () => {
400
+ await kernel.bootstrap();
401
+ await expect(async () => {
402
+ await kernel.bootstrap();
403
+ }).rejects.toThrow('already bootstrapped');
404
+ await kernel.shutdown();
405
+ });
406
+ it('should not allow shutdown before bootstrap', async () => {
407
+ await expect(async () => {
408
+ await kernel.shutdown();
409
+ }).rejects.toThrow('not running');
410
+ });
411
+ });
412
+ });
package/dist/index.d.ts CHANGED
@@ -1,5 +1,14 @@
1
+ /**
2
+ * @objectstack/core
3
+ *
4
+ * Core runtime for ObjectStack microkernel architecture.
5
+ * Provides plugin system, dependency injection, and lifecycle management.
6
+ */
7
+ export * from './kernel-base.js';
1
8
  export * from './kernel.js';
2
9
  export * from './types.js';
3
- export * from './contracts/http-server.js';
4
- export * from './contracts/data-engine.js';
10
+ export * from './logger.js';
11
+ export * from './plugin-loader.js';
12
+ export * from './enhanced-kernel.js';
13
+ export type { Logger, IHttpServer, IHttpRequest, IHttpResponse, RouteHandler, Middleware, IDataEngine, DriverInterface } from '@objectstack/spec/contracts';
5
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC"}
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,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AAGrC,YAAY,EACR,MAAM,EACN,WAAW,EACX,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,UAAU,EACV,WAAW,EACX,eAAe,EAClB,MAAM,6BAA6B,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,12 @@
1
+ /**
2
+ * @objectstack/core
3
+ *
4
+ * Core runtime for ObjectStack microkernel architecture.
5
+ * Provides plugin system, dependency injection, and lifecycle management.
6
+ */
7
+ export * from './kernel-base.js';
1
8
  export * from './kernel.js';
2
9
  export * from './types.js';
3
- export * from './contracts/http-server.js';
4
- export * from './contracts/data-engine.js';
10
+ export * from './logger.js';
11
+ export * from './plugin-loader.js';
12
+ export * from './enhanced-kernel.js';
@@ -0,0 +1,84 @@
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 both ObjectKernel and EnhancedObjectKernel:
12
+ * - Plugin management (Map storage)
13
+ * - Dependency resolution (topological sort)
14
+ * - Hook/Event system
15
+ * - Context creation
16
+ * - State validation
17
+ *
18
+ * This eliminates ~120 lines of duplicate code between the two 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
@@ -0,0 +1 @@
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"}