bun_plugins 1.2.6 → 1.2.7

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 (178) hide show
  1. package/LICENSE +9 -0
  2. package/README.md +127 -3
  3. package/dist/examples/action-registry-declarative.d.ts +14 -0
  4. package/dist/examples/action-registry-declarative.d.ts.map +1 -0
  5. package/dist/examples/action-registry-declarative.js +130 -0
  6. package/dist/examples/action-registry-declarative.js.map +1 -0
  7. package/dist/examples/action-registry-example.d.ts +31 -0
  8. package/dist/examples/action-registry-example.d.ts.map +1 -0
  9. package/dist/examples/action-registry-example.js +84 -0
  10. package/dist/examples/action-registry-example.js.map +1 -0
  11. package/dist/examples/index-declarative.d.ts +32 -0
  12. package/dist/examples/index-declarative.d.ts.map +1 -0
  13. package/dist/examples/index-declarative.js +206 -0
  14. package/dist/examples/index-declarative.js.map +1 -0
  15. package/dist/examples/logger-declarative.d.ts +109 -0
  16. package/dist/examples/logger-declarative.d.ts.map +1 -0
  17. package/dist/examples/logger-declarative.js +330 -0
  18. package/dist/examples/logger-declarative.js.map +1 -0
  19. package/dist/examples/logger-simple.d.ts +8 -0
  20. package/dist/examples/logger-simple.d.ts.map +1 -0
  21. package/dist/examples/logger-simple.js +165 -0
  22. package/dist/examples/logger-simple.js.map +1 -0
  23. package/dist/examples/server-declarative.d.ts +46 -0
  24. package/dist/examples/server-declarative.d.ts.map +1 -0
  25. package/dist/examples/server-declarative.js +205 -0
  26. package/dist/examples/server-declarative.js.map +1 -0
  27. package/dist/examples/shared/action-registry.d.ts +45 -0
  28. package/dist/examples/shared/action-registry.d.ts.map +1 -0
  29. package/dist/examples/shared/action-registry.js +65 -0
  30. package/dist/examples/shared/action-registry.js.map +1 -0
  31. package/dist/examples/shared/plugin-builder.d.ts +41 -0
  32. package/dist/examples/shared/plugin-builder.d.ts.map +1 -0
  33. package/dist/examples/shared/plugin-builder.js +85 -0
  34. package/dist/examples/shared/plugin-builder.js.map +1 -0
  35. package/dist/examples/storage-declarative.d.ts +13 -0
  36. package/dist/examples/storage-declarative.d.ts.map +1 -0
  37. package/dist/examples/storage-declarative.js +203 -0
  38. package/dist/examples/storage-declarative.js.map +1 -0
  39. package/dist/plugins/ActionRegistryPlugin.d.ts +14 -0
  40. package/dist/plugins/ActionRegistryPlugin.d.ts.map +1 -0
  41. package/dist/plugins/ActionRegistryPlugin.js +52 -0
  42. package/dist/plugins/ActionRegistryPlugin.js.map +1 -0
  43. package/dist/plugins/DynamicJSActionsPlugin.d.ts +21 -0
  44. package/dist/plugins/DynamicJSActionsPlugin.d.ts.map +1 -0
  45. package/dist/plugins/DynamicJSActionsPlugin.js +57 -0
  46. package/dist/plugins/DynamicJSActionsPlugin.js.map +1 -0
  47. package/dist/plugins/DynamicMathActionsPlugin.d.ts +22 -0
  48. package/dist/plugins/DynamicMathActionsPlugin.d.ts.map +1 -0
  49. package/dist/plugins/DynamicMathActionsPlugin.js +64 -0
  50. package/dist/plugins/DynamicMathActionsPlugin.js.map +1 -0
  51. package/dist/plugins/DynamicTextActionsPlugin.d.ts +22 -0
  52. package/dist/plugins/DynamicTextActionsPlugin.d.ts.map +1 -0
  53. package/dist/plugins/DynamicTextActionsPlugin.js +58 -0
  54. package/dist/plugins/DynamicTextActionsPlugin.js.map +1 -0
  55. package/dist/plugins/DynamicUtilityActionsPlugin.d.ts +22 -0
  56. package/dist/plugins/DynamicUtilityActionsPlugin.d.ts.map +1 -0
  57. package/dist/plugins/DynamicUtilityActionsPlugin.js +75 -0
  58. package/dist/plugins/DynamicUtilityActionsPlugin.js.map +1 -0
  59. package/dist/plugins/ExamplePlugin.d.ts +3 -0
  60. package/dist/plugins/ExamplePlugin.d.ts.map +1 -0
  61. package/dist/plugins/ExamplePlugin.js +24 -0
  62. package/dist/plugins/ExamplePlugin.js.map +1 -0
  63. package/dist/plugins/LifecycleDemoPlugin.d.ts +20 -0
  64. package/dist/plugins/LifecycleDemoPlugin.d.ts.map +1 -0
  65. package/dist/plugins/LifecycleDemoPlugin.js +34 -0
  66. package/dist/plugins/LifecycleDemoPlugin.js.map +1 -0
  67. package/dist/plugins/MathPlugin.d.ts +16 -0
  68. package/dist/plugins/MathPlugin.d.ts.map +1 -0
  69. package/dist/plugins/MathPlugin.js +30 -0
  70. package/dist/plugins/MathPlugin.js.map +1 -0
  71. package/dist/plugins/MyJSPlugin.d.ts +7 -0
  72. package/dist/plugins/MyJSPlugin.d.ts.map +1 -0
  73. package/dist/plugins/MyJSPlugin.js +12 -0
  74. package/dist/plugins/MyJSPlugin.js.map +1 -0
  75. package/dist/plugins/TypedExamplePlugin.d.ts +10 -0
  76. package/dist/plugins/TypedExamplePlugin.d.ts.map +1 -0
  77. package/dist/plugins/TypedExamplePlugin.js +61 -0
  78. package/dist/plugins/TypedExamplePlugin.js.map +1 -0
  79. package/dist/plugins/arktype/index.d.ts +8 -0
  80. package/dist/plugins/arktype/index.d.ts.map +1 -0
  81. package/dist/plugins/arktype/index.js +25 -0
  82. package/dist/plugins/arktype/index.js.map +1 -0
  83. package/dist/src/Plugin.d.ts +28 -0
  84. package/dist/src/Plugin.d.ts.map +1 -0
  85. package/dist/src/Plugin.js +36 -0
  86. package/dist/src/Plugin.js.map +1 -0
  87. package/dist/{PluginManager.d.ts → src/PluginManager.d.ts} +33 -10
  88. package/dist/src/PluginManager.d.ts.map +1 -0
  89. package/dist/{PluginManager.js → src/PluginManager.js} +245 -193
  90. package/dist/src/PluginManager.js.map +1 -0
  91. package/dist/{index.d.ts → src/index.d.ts} +2 -1
  92. package/dist/src/index.d.ts.map +1 -0
  93. package/dist/{index.js → src/index.js} +2 -0
  94. package/dist/src/index.js.map +1 -0
  95. package/dist/src/logger/LoggerAdapter.d.ts +77 -0
  96. package/dist/src/logger/LoggerAdapter.d.ts.map +1 -0
  97. package/dist/src/logger/LoggerAdapter.js +242 -0
  98. package/dist/src/logger/LoggerAdapter.js.map +1 -0
  99. package/dist/src/logger/LoggerFactory.d.ts +73 -0
  100. package/dist/src/logger/LoggerFactory.d.ts.map +1 -0
  101. package/dist/src/logger/LoggerFactory.js +99 -0
  102. package/dist/src/logger/LoggerFactory.js.map +1 -0
  103. package/dist/src/logger/index.d.ts +3 -0
  104. package/dist/src/logger/index.d.ts.map +1 -0
  105. package/dist/src/logger/index.js +3 -0
  106. package/dist/src/logger/index.js.map +1 -0
  107. package/dist/{managers → src/managers}/ContextFactory.d.ts +1 -1
  108. package/dist/src/managers/ContextFactory.d.ts.map +1 -0
  109. package/dist/{managers → src/managers}/ContextFactory.js +51 -26
  110. package/dist/src/managers/ContextFactory.js.map +1 -0
  111. package/dist/src/managers/DependencyManager.d.ts.map +1 -0
  112. package/dist/{managers → src/managers}/DependencyManager.js +7 -5
  113. package/dist/src/managers/DependencyManager.js.map +1 -0
  114. package/dist/{managers → src/managers}/HooksManager.d.ts +4 -1
  115. package/dist/src/managers/HooksManager.d.ts.map +1 -0
  116. package/dist/{managers → src/managers}/HooksManager.js +36 -8
  117. package/dist/src/managers/HooksManager.js.map +1 -0
  118. package/dist/src/managers/ResourceManager.d.ts.map +1 -0
  119. package/dist/{managers → src/managers}/ResourceManager.js +3 -3
  120. package/dist/src/managers/ResourceManager.js.map +1 -0
  121. package/dist/src/storage/JsonPluginStorage.d.ts +75 -0
  122. package/dist/src/storage/JsonPluginStorage.d.ts.map +1 -0
  123. package/dist/src/storage/JsonPluginStorage.js +240 -0
  124. package/dist/src/storage/JsonPluginStorage.js.map +1 -0
  125. package/dist/src/types/plugin-registry-base.d.ts +80 -0
  126. package/dist/src/types/plugin-registry-base.d.ts.map +1 -0
  127. package/dist/src/types/plugin-registry-base.js +6 -0
  128. package/dist/src/types/plugin-registry-base.js.map +1 -0
  129. package/dist/{types.d.ts → src/types.d.ts} +60 -19
  130. package/dist/src/types.d.ts.map +1 -0
  131. package/dist/{types.js → src/types.js} +6 -0
  132. package/dist/src/types.js.map +1 -0
  133. package/dist/src/utils/errorParser.d.ts.map +1 -0
  134. package/dist/{utils → src/utils}/errorParser.js +2 -5
  135. package/dist/src/utils/errorParser.js.map +1 -0
  136. package/dist/src/utils/pluginValidator.d.ts +17 -0
  137. package/dist/src/utils/pluginValidator.d.ts.map +1 -0
  138. package/dist/{utils → src/utils}/pluginValidator.js +11 -14
  139. package/dist/src/utils/pluginValidator.js.map +1 -0
  140. package/dist/src/utils/security.d.ts.map +1 -0
  141. package/dist/src/utils/security.js.map +1 -0
  142. package/dist/src/worker/WorkerRunner.d.ts.map +1 -0
  143. package/dist/{worker → src/worker}/WorkerRunner.js +38 -13
  144. package/dist/src/worker/WorkerRunner.js.map +1 -0
  145. package/package.json +9 -6
  146. package/dist/PluginManager.d.ts.map +0 -1
  147. package/dist/PluginManager.js.map +0 -1
  148. package/dist/index.d.ts.map +0 -1
  149. package/dist/index.js.map +0 -1
  150. package/dist/managers/ContextFactory.d.ts.map +0 -1
  151. package/dist/managers/ContextFactory.js.map +0 -1
  152. package/dist/managers/DependencyManager.d.ts.map +0 -1
  153. package/dist/managers/DependencyManager.js.map +0 -1
  154. package/dist/managers/HooksManager.d.ts.map +0 -1
  155. package/dist/managers/HooksManager.js.map +0 -1
  156. package/dist/managers/ResourceManager.d.ts.map +0 -1
  157. package/dist/managers/ResourceManager.js.map +0 -1
  158. package/dist/storage/JsonPluginStorage.d.ts +0 -14
  159. package/dist/storage/JsonPluginStorage.d.ts.map +0 -1
  160. package/dist/storage/JsonPluginStorage.js +0 -63
  161. package/dist/storage/JsonPluginStorage.js.map +0 -1
  162. package/dist/types.d.ts.map +0 -1
  163. package/dist/types.js.map +0 -1
  164. package/dist/utils/errorParser.d.ts.map +0 -1
  165. package/dist/utils/errorParser.js.map +0 -1
  166. package/dist/utils/pluginValidator.d.ts +0 -93
  167. package/dist/utils/pluginValidator.d.ts.map +0 -1
  168. package/dist/utils/pluginValidator.js.map +0 -1
  169. package/dist/utils/security.d.ts.map +0 -1
  170. package/dist/utils/security.js.map +0 -1
  171. package/dist/worker/WorkerRunner.d.ts.map +0 -1
  172. package/dist/worker/WorkerRunner.js.map +0 -1
  173. /package/dist/{managers → src/managers}/DependencyManager.d.ts +0 -0
  174. /package/dist/{managers → src/managers}/ResourceManager.d.ts +0 -0
  175. /package/dist/{utils → src/utils}/errorParser.d.ts +0 -0
  176. /package/dist/{utils → src/utils}/security.d.ts +0 -0
  177. /package/dist/{utils → src/utils}/security.js +0 -0
  178. /package/dist/{worker → src/worker}/WorkerRunner.d.ts +0 -0
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Simple Logger Example
3
+ *
4
+ * This example demonstrates how to use custom loggers with the simplified system
5
+ */
6
+ declare const runLoggerDemo: () => Promise<void>;
7
+ export { runLoggerDemo };
8
+ //# sourceMappingURL=logger-simple.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger-simple.d.ts","sourceRoot":"","sources":["../../examples/logger-simple.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgLH,QAAA,MAAM,aAAa,qBAalB,CAAC;AAGF,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Simple Logger Example
3
+ *
4
+ * This example demonstrates how to use custom loggers with the simplified system
5
+ */
6
+ import { logger, NoopLogger, ColorfulConsoleLogger } from "../src";
7
+ // Example 1: Using the default colorful console logger
8
+ const demoDefaultLogger = () => {
9
+ console.log("\n=== Default Colorful Console Logger ===");
10
+ const log = logger.getDefaultLogger();
11
+ log.info("This is an info message");
12
+ log.warn("This is a warning message");
13
+ log.error("This is an error message");
14
+ log.debug?.("This is a debug message"); // Optional debug method
15
+ };
16
+ // Example 1b: Using basic console logger without colors
17
+ const demoBasicConsoleLogger = () => {
18
+ console.log("\n=== Basic Console Logger (No Colors) ===");
19
+ // Create a basic console logger without colors
20
+ const basicLogger = logger.createConsoleLogger({ useColors: false });
21
+ logger.setDefaultLogger(basicLogger);
22
+ const log = logger.getDefaultLogger();
23
+ log.info("This is a basic info message");
24
+ log.warn("This is a basic warning message");
25
+ log.error("This is a basic error message");
26
+ log.debug?.("This is a basic debug message");
27
+ };
28
+ // Example 2: Using a custom logger (simulating Winston/Pino style)
29
+ const demoCustomLogger = () => {
30
+ console.log("\n=== Custom Logger (Winston/Pino style) ===");
31
+ // Create a custom logger that follows the Logger interface
32
+ const customLogger = {
33
+ info: (msg, ...args) => {
34
+ console.log(`[CUSTOM] ${new Date().toISOString()} INFO: ${msg}`, ...args);
35
+ },
36
+ warn: (msg, ...args) => {
37
+ console.log(`[CUSTOM] ${new Date().toISOString()} WARN: ${msg}`, ...args);
38
+ },
39
+ error: (msg, ...args) => {
40
+ console.log(`[CUSTOM] ${new Date().toISOString()} ERROR: ${msg}`, ...args);
41
+ },
42
+ debug: (msg, ...args) => {
43
+ console.log(`[CUSTOM] ${new Date().toISOString()} DEBUG: ${msg}`, ...args);
44
+ }
45
+ };
46
+ // Set it as the default logger
47
+ logger.setDefaultLogger(customLogger);
48
+ // Use it
49
+ const log = logger.getDefaultLogger();
50
+ log.info("Custom logger info message");
51
+ log.warn("Custom logger warning message");
52
+ log.error("Custom logger error message");
53
+ log.debug?.("Custom logger debug message");
54
+ };
55
+ // Example 3: Plugin-specific loggers with context and colors
56
+ const demoPluginLoggers = () => {
57
+ console.log("\n=== Plugin-specific Colorful Loggers ===");
58
+ // Reset to colorful console logger
59
+ logger.setDefaultLogger(new ColorfulConsoleLogger());
60
+ // Create loggers for different plugins
61
+ const dbLogger = logger.createLogger("database");
62
+ const apiLogger = logger.createLogger("api");
63
+ const authLogger = logger.createLogger("auth");
64
+ dbLogger.info("Connected to database");
65
+ dbLogger.debug?.("Query executed in 150ms");
66
+ apiLogger.info("API server started on port 3000");
67
+ apiLogger.warn("High response time detected");
68
+ authLogger.info("User authentication successful");
69
+ authLogger.error("Invalid credentials provided");
70
+ };
71
+ // Example 4: Using no-op logger to disable logging
72
+ const demoNoopLogger = () => {
73
+ console.log("\n=== No-op Logger (disabled logging) ===");
74
+ const noopLog = new NoopLogger();
75
+ logger.setDefaultLogger(noopLog);
76
+ const log = logger.getDefaultLogger();
77
+ log.info("This won't be shown");
78
+ log.error("Neither will this error");
79
+ log.warn("This warning is also ignored");
80
+ console.log("But regular console.log still works");
81
+ };
82
+ // Example 5: Wrapping existing loggers
83
+ const demoWrapLogger = () => {
84
+ console.log("\n=== Wrapping Existing Loggers ===");
85
+ // Simulate an existing logger from another library
86
+ const existingLogger = {
87
+ log: (level, message) => {
88
+ console.log(`[EXTERNAL] ${level.toUpperCase()}: ${message}`);
89
+ }
90
+ };
91
+ // Create a wrapper that implements our Logger interface
92
+ const wrappedLogger = {
93
+ info: (msg) => existingLogger.log('info', msg),
94
+ warn: (msg) => existingLogger.log('warn', msg),
95
+ error: (msg) => existingLogger.log('error', msg),
96
+ child: (context) => wrappedLogger // Simple child implementation
97
+ };
98
+ // Wrap it with our adapter for context support
99
+ const adaptedLogger = logger.wrapLogger(wrappedLogger, "wrapped-context");
100
+ adaptedLogger.info("Message from wrapped logger");
101
+ adaptedLogger.warn("Warning from wrapped logger");
102
+ adaptedLogger.error("Error from wrapped logger");
103
+ };
104
+ // Example 6: Advanced colorful logger with custom colors
105
+ const demoAdvancedColorfulLogger = () => {
106
+ console.log("\n=== Advanced Colorful Logger ===");
107
+ // Create a colorful logger with custom configuration
108
+ const colorfulLogger = logger.createColorfulConsoleLogger({
109
+ useColors: true,
110
+ timestampFormat: 'time',
111
+ levelColors: {
112
+ info: '#00FF00', // Bright green
113
+ warn: '#FFD700', // Gold
114
+ error: '#FF0000', // Red
115
+ debug: '#00CED1' // Dark turquoise
116
+ },
117
+ contextColor: '#FF69B4', // Hot pink
118
+ showEmoji: true
119
+ });
120
+ logger.setDefaultLogger(colorfulLogger);
121
+ const log = logger.getDefaultLogger();
122
+ log.info("System initialized successfully");
123
+ log.warn("Cache miss detected");
124
+ log.error("Failed to connect to external service");
125
+ log.debug?.("Processing request with ID: abc123");
126
+ // Test hierarchical logging with colors
127
+ const childLogger = log.child?.('submodule') || log;
128
+ childLogger.info("Child logger with colorful context");
129
+ childLogger.error("Error from child logger");
130
+ };
131
+ // Example 7: Color palette demonstration
132
+ const demoColorPalette = () => {
133
+ console.log("\n=== Bun.color Palette Demo ===");
134
+ const colors = [
135
+ 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan',
136
+ '#FF6B6B', '#4ECDC4', '#45B7D1', '#FFA07A', '#98D8C8',
137
+ 'rgb(255, 99, 71)', 'hsl(120, 50%, 50%)'
138
+ ];
139
+ colors.forEach(color => {
140
+ const ansiColor = Bun.color(color, 'ansi');
141
+ if (ansiColor) {
142
+ console.log(`${ansiColor}This text is ${color}${Bun.color('reset', 'ansi')}`);
143
+ }
144
+ });
145
+ };
146
+ // Main demonstration
147
+ const runLoggerDemo = async () => {
148
+ console.log("🚀 Enhanced Colorful Logger Demo\n");
149
+ demoDefaultLogger();
150
+ demoBasicConsoleLogger();
151
+ demoCustomLogger();
152
+ demoPluginLoggers();
153
+ demoNoopLogger();
154
+ demoWrapLogger();
155
+ demoAdvancedColorfulLogger();
156
+ demoColorPalette();
157
+ console.log("\n✅ Enhanced logger demo completed!");
158
+ };
159
+ // Export for use
160
+ export { runLoggerDemo };
161
+ // Run if called directly
162
+ if (import.meta.main) {
163
+ runLoggerDemo().catch(console.error);
164
+ }
165
+ //# sourceMappingURL=logger-simple.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger-simple.js","sourceRoot":"","sources":["../../examples/logger-simple.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Declarative Server Example
3
+ *
4
+ * A clean, declarative approach to building a plugin-powered server
5
+ * with minimal boilerplate and maximum clarity.
6
+ */
7
+ import { PluginManager } from "../src/PluginManager";
8
+ interface ServerConfig {
9
+ port: number;
10
+ host: string;
11
+ routes: RouteDefinition[];
12
+ middleware: MiddlewareDefinition[];
13
+ }
14
+ interface RouteDefinition {
15
+ method: 'GET' | 'POST' | 'PUT' | 'DELETE';
16
+ path: string;
17
+ handler: string;
18
+ description?: string;
19
+ }
20
+ interface MiddlewareDefinition {
21
+ name: string;
22
+ priority: number;
23
+ handler: string;
24
+ }
25
+ declare const routes: RouteDefinition[];
26
+ declare const createServerPlugin: () => {
27
+ name: string;
28
+ version: string;
29
+ description: string;
30
+ onLoad(context: any): Promise<void>;
31
+ onUnload(): Promise<void>;
32
+ };
33
+ declare const createDeclarativeServer: (config: ServerConfig) => {
34
+ pluginManager: PluginManager;
35
+ start(): Promise<Bun.Server<undefined>>;
36
+ };
37
+ declare const createActionRegistryPlugin: () => {
38
+ name: string;
39
+ version: string;
40
+ description: string;
41
+ onLoad(context: any): Promise<void>;
42
+ onUnload(): Promise<void>;
43
+ };
44
+ declare const demonstrateDeclarativeServer: () => Promise<Bun.Server<undefined>>;
45
+ export { createDeclarativeServer, createServerPlugin, createActionRegistryPlugin, routes, demonstrateDeclarativeServer };
46
+ //# sourceMappingURL=server-declarative.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-declarative.d.ts","sourceRoot":"","sources":["../../examples/server-declarative.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,UAAU,EAAE,oBAAoB,EAAE,CAAC;CACpC;AAED,UAAU,eAAe;IACvB,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,oBAAoB;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAGD,QAAA,MAAM,MAAM,EAAE,eAAe,EAqC5B,CAAC;AAGF,QAAA,MAAM,kBAAkB;;;;oBAKA,GAAG;;CAmCzB,CAAC;AAGH,QAAA,MAAM,uBAAuB,GAAI,QAAQ,YAAY;;;CAyEpD,CAAC;AAGF,QAAA,MAAM,0BAA0B;;;;oBAKR,GAAG;;CA8BzB,CAAC;AAGH,QAAA,MAAM,4BAA4B,sCAwBjC,CAAC;AAGF,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,0BAA0B,EAC1B,MAAM,EACN,4BAA4B,EAC7B,CAAC"}
@@ -0,0 +1,205 @@
1
+ /**
2
+ * Declarative Server Example
3
+ *
4
+ * A clean, declarative approach to building a plugin-powered server
5
+ * with minimal boilerplate and maximum clarity.
6
+ */
7
+ import { serve } from "bun";
8
+ import { PluginManager } from "../src/PluginManager";
9
+ // Declarative route definitions
10
+ const routes = [
11
+ {
12
+ method: 'GET',
13
+ path: '/health',
14
+ handler: 'health_check',
15
+ description: 'Health check endpoint'
16
+ },
17
+ {
18
+ method: 'POST',
19
+ path: '/plugins',
20
+ handler: 'list_plugins',
21
+ description: 'List all loaded plugins'
22
+ },
23
+ {
24
+ method: 'POST',
25
+ path: '/plugins/register',
26
+ handler: 'register_plugin',
27
+ description: 'Register a new plugin'
28
+ },
29
+ {
30
+ method: 'POST',
31
+ path: '/plugins/unregister',
32
+ handler: 'unregister_plugin',
33
+ description: 'Unregister a plugin'
34
+ },
35
+ {
36
+ method: 'GET',
37
+ path: '/actions',
38
+ handler: 'list_actions',
39
+ description: 'List available actions'
40
+ },
41
+ {
42
+ method: 'POST',
43
+ path: '/actions/execute',
44
+ handler: 'execute_action',
45
+ description: 'Execute a specific action'
46
+ }
47
+ ];
48
+ // Declarative server plugin
49
+ const createServerPlugin = () => ({
50
+ name: "declarative-server",
51
+ version: "1.0.0",
52
+ description: "Server plugin with declarative route handling",
53
+ async onLoad(context) {
54
+ const { log } = context;
55
+ log.info("Server plugin loaded");
56
+ // Register server actions
57
+ const actions = {
58
+ health_check: async () => ({ status: 'healthy', timestamp: new Date().toISOString() }),
59
+ list_plugins: async () => context.manager.listPlugins(),
60
+ register_plugin: async (data) => {
61
+ // Plugin registration logic
62
+ return { success: true, plugin: data.name };
63
+ },
64
+ unregister_plugin: async (data) => {
65
+ // Plugin unregistration logic
66
+ return { success: true, plugin: data.name };
67
+ },
68
+ list_actions: async () => {
69
+ const registry = context.manager.getPluginApi('action-registry');
70
+ return registry ? registry.list() : [];
71
+ },
72
+ execute_action: async (data) => {
73
+ const registry = context.manager.getPluginApi('action-registry');
74
+ if (!registry)
75
+ throw new Error('Action registry not found');
76
+ return registry.execute(data.action, ...data.args);
77
+ }
78
+ };
79
+ // Make actions available
80
+ context.serverActions = actions;
81
+ log.info("Server actions registered");
82
+ },
83
+ async onUnload() {
84
+ console.log("Server plugin unloaded");
85
+ }
86
+ });
87
+ // Declarative server factory
88
+ const createDeclarativeServer = (config) => {
89
+ const pluginManager = new PluginManager();
90
+ return {
91
+ pluginManager,
92
+ async start() {
93
+ // Register server plugin
94
+ await pluginManager.register(createServerPlugin());
95
+ // Create and start server
96
+ const server = serve({
97
+ port: config.port,
98
+ hostname: config.host,
99
+ async fetch(req) {
100
+ const url = new URL(req.url);
101
+ const route = config.routes.find(r => r.method === req.method && r.path === url.pathname);
102
+ if (!route) {
103
+ return new Response(JSON.stringify({ error: 'Not found' }), {
104
+ status: 404,
105
+ headers: { 'Content-Type': 'application/json' }
106
+ });
107
+ }
108
+ try {
109
+ const serverPlugin = pluginManager.getPlugin('declarative-server');
110
+ if (!serverPlugin || !serverPlugin.serverActions) {
111
+ throw new Error('Server plugin not available');
112
+ }
113
+ const actions = serverPlugin.serverActions;
114
+ const handler = actions[route.handler];
115
+ if (!handler) {
116
+ throw new Error(`Handler ${route.handler} not found`);
117
+ }
118
+ let data = {};
119
+ if (req.method !== 'GET') {
120
+ data = await req.json().catch(() => ({}));
121
+ }
122
+ const result = await handler(data);
123
+ return new Response(JSON.stringify(result), {
124
+ status: 200,
125
+ headers: { 'Content-Type': 'application/json' }
126
+ });
127
+ }
128
+ catch (error) {
129
+ return new Response(JSON.stringify({
130
+ error: error.message
131
+ }), {
132
+ status: 500,
133
+ headers: { 'Content-Type': 'application/json' }
134
+ });
135
+ }
136
+ }
137
+ });
138
+ console.log(`🚀 Server running on http://${config.host}:${config.port}`);
139
+ console.log('Available endpoints:');
140
+ config.routes.forEach(route => {
141
+ console.log(` ${route.method} ${route.path} - ${route.description}`);
142
+ });
143
+ return server;
144
+ }
145
+ };
146
+ };
147
+ // Action registry plugin for the server
148
+ const createActionRegistryPlugin = () => ({
149
+ name: "action-registry",
150
+ version: "1.0.0",
151
+ description: "Action registry for server operations",
152
+ async onLoad(context) {
153
+ const { ActionRegistry } = await import("./shared/action-registry");
154
+ const registry = new ActionRegistry();
155
+ // Register some example actions
156
+ registry.register({
157
+ name: 'greet',
158
+ handler: (name) => `Hello, Hello, ${name}!`
159
+ });
160
+ registry.register({
161
+ name: 'calculate',
162
+ handler: (a, b, op) => {
163
+ switch (op) {
164
+ case 'add': return a + b;
165
+ case 'subtract': return a - b;
166
+ case 'multiply': return a * b;
167
+ case 'divide': return b !== 0 ? a / b : 'Error: Division by zero';
168
+ default: return 'Error: Unknown operation';
169
+ }
170
+ }
171
+ });
172
+ // Register the registry as the shared API
173
+ context.registerApi(registry);
174
+ },
175
+ async onUnload() {
176
+ console.log("Action registry plugin unloaded");
177
+ },
178
+ });
179
+ // Main demonstration
180
+ const demonstrateDeclarativeServer = async () => {
181
+ const config = {
182
+ port: 3000,
183
+ host: 'localhost',
184
+ routes: routes,
185
+ middleware: []
186
+ };
187
+ const server = createDeclarativeServer(config);
188
+ // Register action registry
189
+ await server.pluginManager.register(createActionRegistryPlugin());
190
+ // Start server
191
+ const instance = await server.start();
192
+ console.log("\n🎯 Example requests:");
193
+ console.log(" curl http://localhost:3000/health");
194
+ console.log(" curl -X POST http://localhost:3000/actions/execute -H 'Content-Type: application/json' -d '{\"action\":\"greet\",\"args\":[\"World\"]}'");
195
+ console.log(" curl -X POST http://localhost:3000/actions/execute -H 'Content-Type: application/json' -d '{\"action\":\"calculate\",\"args\":[10,5,\"add\"]}'");
196
+ console.log("\nPress Ctrl+C to stop the server");
197
+ return instance;
198
+ };
199
+ // Export for use
200
+ export { createDeclarativeServer, createServerPlugin, createActionRegistryPlugin, routes, demonstrateDeclarativeServer };
201
+ // Run if called directly
202
+ if (import.meta.main) {
203
+ demonstrateDeclarativeServer().catch(console.error);
204
+ }
205
+ //# sourceMappingURL=server-declarative.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-declarative.js","sourceRoot":"","sources":["../../examples/server-declarative.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Shared Action Registry - Declarative approach
3
+ * Eliminates code duplication across examples
4
+ */
5
+ export type ActionHandler = (...args: any[]) => any;
6
+ export interface ActionDefinition {
7
+ name: string;
8
+ handler: ActionHandler;
9
+ description?: string;
10
+ }
11
+ export declare class ActionRegistry {
12
+ protected handlers: Map<string, ActionHandler>;
13
+ register(def: ActionDefinition): void;
14
+ execute(name: string, ...args: any[]): any;
15
+ list(): string[];
16
+ has(name: string): boolean;
17
+ clear(): void;
18
+ }
19
+ export declare const createActionRegistry: () => ActionRegistry;
20
+ export declare const defineActions: (category: string, actions: ActionDefinition[]) => {
21
+ category: string;
22
+ actions: ActionDefinition[];
23
+ register: (registry: ActionRegistry) => void;
24
+ };
25
+ export declare const mathActions: {
26
+ category: string;
27
+ actions: ActionDefinition[];
28
+ register: (registry: ActionRegistry) => void;
29
+ };
30
+ export declare const textActions: {
31
+ category: string;
32
+ actions: ActionDefinition[];
33
+ register: (registry: ActionRegistry) => void;
34
+ };
35
+ export declare const utilityActions: {
36
+ category: string;
37
+ actions: ActionDefinition[];
38
+ register: (registry: ActionRegistry) => void;
39
+ };
40
+ export declare const validationActions: {
41
+ category: string;
42
+ actions: ActionDefinition[];
43
+ register: (registry: ActionRegistry) => void;
44
+ };
45
+ //# sourceMappingURL=action-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-registry.d.ts","sourceRoot":"","sources":["../../../examples/shared/action-registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;AAEpD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,aAAa,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,cAAc;IACzB,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAa;IAE3D,QAAQ,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI;IAIrC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG;IAQ1C,IAAI,IAAI,MAAM,EAAE;IAIhB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,KAAK,IAAI,IAAI;CAGd;AAGD,eAAO,MAAM,oBAAoB,sBAA6B,CAAC;AAE/D,eAAO,MAAM,aAAa,GAAI,UAAU,MAAM,EAAE,SAAS,gBAAgB,EAAE;;;yBAIlD,cAAc;CAItC,CAAC;AAGF,eAAO,MAAM,WAAW;;;yBAPC,cAAc;CAYrC,CAAC;AAEH,eAAO,MAAM,WAAW;;;yBAdC,cAAc;CAmBrC,CAAC;AAEH,eAAO,MAAM,cAAc;;;yBArBF,cAAc;CA4BrC,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;yBA9BL,cAAc;CAmCrC,CAAC"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Shared Action Registry - Declarative approach
3
+ * Eliminates code duplication across examples
4
+ */
5
+ export class ActionRegistry {
6
+ handlers = new Map();
7
+ register(def) {
8
+ this.handlers.set(def.name, def.handler);
9
+ }
10
+ execute(name, ...args) {
11
+ const handler = this.handlers.get(name);
12
+ if (!handler) {
13
+ throw new Error(`Action not found: ${name}`);
14
+ }
15
+ return handler(...args);
16
+ }
17
+ list() {
18
+ return Array.from(this.handlers.keys());
19
+ }
20
+ has(name) {
21
+ return this.handlers.has(name);
22
+ }
23
+ clear() {
24
+ this.handlers.clear();
25
+ }
26
+ }
27
+ // Declarative action definitions
28
+ export const createActionRegistry = () => new ActionRegistry();
29
+ export const defineActions = (category, actions) => {
30
+ return {
31
+ category,
32
+ actions,
33
+ register: (registry) => {
34
+ actions.forEach(action => registry.register(action));
35
+ }
36
+ };
37
+ };
38
+ // Common action categories
39
+ export const mathActions = defineActions('math', [
40
+ { name: 'sum', handler: (a, b) => a + b },
41
+ { name: 'multiply', handler: (a, b) => a * b },
42
+ { name: 'power', handler: (base, exp) => Math.pow(base, exp) },
43
+ { name: 'sqrt', handler: (n) => Math.sqrt(n) }
44
+ ]);
45
+ export const textActions = defineActions('text', [
46
+ { name: 'uppercase', handler: (text) => text.toUpperCase() },
47
+ { name: 'lowercase', handler: (text) => text.toLowerCase() },
48
+ { name: 'reverse', handler: (text) => text.split('').reverse().join('') },
49
+ { name: 'capitalize', handler: (text) => text.charAt(0).toUpperCase() + text.slice(1).toLowerCase() }
50
+ ]);
51
+ export const utilityActions = defineActions('utility', [
52
+ { name: 'random', handler: (min, max) => Math.floor(Math.random() * (max - min + 1)) + min },
53
+ { name: 'timestamp', handler: () => Date.now() },
54
+ { name: 'delay', handler: async (ms) => {
55
+ await new Promise(resolve => setTimeout(resolve, ms));
56
+ return `Delayed ${ms}ms`;
57
+ } }
58
+ ]);
59
+ export const validationActions = defineActions('validation', [
60
+ { name: 'isEmail', handler: (email) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email) },
61
+ { name: 'isNumber', handler: (value) => !isNaN(parseFloat(value)) && isFinite(value) },
62
+ { name: 'minLength', handler: (text, min) => text.length >= min },
63
+ { name: 'maxLength', handler: (text, max) => text.length <= max }
64
+ ]);
65
+ //# sourceMappingURL=action-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-registry.js","sourceRoot":"","sources":["../../../examples/shared/action-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Declarative Plugin Builder
3
+ * Provides a functional approach to create plugins without boilerplate
4
+ */
5
+ import type { IPlugin, PluginContext } from "../../src/types";
6
+ export interface PluginDefinition {
7
+ name: string;
8
+ version: string;
9
+ description?: string;
10
+ author?: string;
11
+ defaultConfig?: Record<string, any>;
12
+ actions?: any[];
13
+ onLoad?: (context: PluginContext) => void | Promise<void>;
14
+ onUnload?: () => void | Promise<void>;
15
+ sharedApi?: any;
16
+ }
17
+ export interface ActionPluginDefinition extends PluginDefinition {
18
+ registryName: string;
19
+ actionCategories?: any[];
20
+ customActions?: any[];
21
+ }
22
+ export interface StoragePluginDefinition extends PluginDefinition {
23
+ storageOperations?: StorageOperation[];
24
+ }
25
+ export interface StorageOperation {
26
+ type: 'get' | 'set' | 'delete' | 'clear';
27
+ key: string;
28
+ value?: any;
29
+ defaultValue?: any;
30
+ description?: string;
31
+ }
32
+ export declare const createPlugin: (def: PluginDefinition) => IPlugin;
33
+ export declare const createActionPlugin: (def: ActionPluginDefinition) => IPlugin;
34
+ export declare const storageOps: {
35
+ get: (key: string, defaultValue?: any) => StorageOperation;
36
+ set: (key: string, value: any) => StorageOperation;
37
+ delete: (key: string) => StorageOperation;
38
+ clear: () => StorageOperation;
39
+ };
40
+ export declare const runDemo: (name: string, demoFn: () => Promise<void>) => Promise<void>;
41
+ //# sourceMappingURL=plugin-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-builder.d.ts","sourceRoot":"","sources":["../../../examples/shared/plugin-builder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAG9D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,SAAS,CAAC,EAAE,GAAG,CAAC;CACjB;AAED,MAAM,WAAW,sBAAuB,SAAQ,gBAAgB;IAC9D,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,GAAG,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,GAAG,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,uBAAwB,SAAQ,gBAAgB;IAC/D,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAGD,eAAO,MAAM,YAAY,GAAI,KAAK,gBAAgB,KAAG,OAsBnD,CAAC;AAGH,eAAO,MAAM,kBAAkB,GAAI,KAAK,sBAAsB,KAAG,OAkChE,CAAC;AAGF,eAAO,MAAM,UAAU;eACV,MAAM,iBAAiB,GAAG,KAAG,gBAAgB;eAG7C,MAAM,SAAS,GAAG,KAAG,gBAAgB;kBAGlC,MAAM,KAAG,gBAAgB;iBAG5B,gBAAgB;CAG5B,CAAC;AAGF,eAAO,MAAM,OAAO,GAAU,MAAM,MAAM,EAAE,QAAQ,MAAM,OAAO,CAAC,IAAI,CAAC,kBAQtE,CAAC"}