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.
- package/LICENSE +9 -0
- package/README.md +127 -3
- package/dist/examples/action-registry-declarative.d.ts +14 -0
- package/dist/examples/action-registry-declarative.d.ts.map +1 -0
- package/dist/examples/action-registry-declarative.js +130 -0
- package/dist/examples/action-registry-declarative.js.map +1 -0
- package/dist/examples/action-registry-example.d.ts +31 -0
- package/dist/examples/action-registry-example.d.ts.map +1 -0
- package/dist/examples/action-registry-example.js +84 -0
- package/dist/examples/action-registry-example.js.map +1 -0
- package/dist/examples/index-declarative.d.ts +32 -0
- package/dist/examples/index-declarative.d.ts.map +1 -0
- package/dist/examples/index-declarative.js +206 -0
- package/dist/examples/index-declarative.js.map +1 -0
- package/dist/examples/logger-declarative.d.ts +109 -0
- package/dist/examples/logger-declarative.d.ts.map +1 -0
- package/dist/examples/logger-declarative.js +330 -0
- package/dist/examples/logger-declarative.js.map +1 -0
- package/dist/examples/logger-simple.d.ts +8 -0
- package/dist/examples/logger-simple.d.ts.map +1 -0
- package/dist/examples/logger-simple.js +165 -0
- package/dist/examples/logger-simple.js.map +1 -0
- package/dist/examples/server-declarative.d.ts +46 -0
- package/dist/examples/server-declarative.d.ts.map +1 -0
- package/dist/examples/server-declarative.js +205 -0
- package/dist/examples/server-declarative.js.map +1 -0
- package/dist/examples/shared/action-registry.d.ts +45 -0
- package/dist/examples/shared/action-registry.d.ts.map +1 -0
- package/dist/examples/shared/action-registry.js +65 -0
- package/dist/examples/shared/action-registry.js.map +1 -0
- package/dist/examples/shared/plugin-builder.d.ts +41 -0
- package/dist/examples/shared/plugin-builder.d.ts.map +1 -0
- package/dist/examples/shared/plugin-builder.js +85 -0
- package/dist/examples/shared/plugin-builder.js.map +1 -0
- package/dist/examples/storage-declarative.d.ts +13 -0
- package/dist/examples/storage-declarative.d.ts.map +1 -0
- package/dist/examples/storage-declarative.js +203 -0
- package/dist/examples/storage-declarative.js.map +1 -0
- package/dist/plugins/ActionRegistryPlugin.d.ts +14 -0
- package/dist/plugins/ActionRegistryPlugin.d.ts.map +1 -0
- package/dist/plugins/ActionRegistryPlugin.js +52 -0
- package/dist/plugins/ActionRegistryPlugin.js.map +1 -0
- package/dist/plugins/DynamicJSActionsPlugin.d.ts +21 -0
- package/dist/plugins/DynamicJSActionsPlugin.d.ts.map +1 -0
- package/dist/plugins/DynamicJSActionsPlugin.js +57 -0
- package/dist/plugins/DynamicJSActionsPlugin.js.map +1 -0
- package/dist/plugins/DynamicMathActionsPlugin.d.ts +22 -0
- package/dist/plugins/DynamicMathActionsPlugin.d.ts.map +1 -0
- package/dist/plugins/DynamicMathActionsPlugin.js +64 -0
- package/dist/plugins/DynamicMathActionsPlugin.js.map +1 -0
- package/dist/plugins/DynamicTextActionsPlugin.d.ts +22 -0
- package/dist/plugins/DynamicTextActionsPlugin.d.ts.map +1 -0
- package/dist/plugins/DynamicTextActionsPlugin.js +58 -0
- package/dist/plugins/DynamicTextActionsPlugin.js.map +1 -0
- package/dist/plugins/DynamicUtilityActionsPlugin.d.ts +22 -0
- package/dist/plugins/DynamicUtilityActionsPlugin.d.ts.map +1 -0
- package/dist/plugins/DynamicUtilityActionsPlugin.js +75 -0
- package/dist/plugins/DynamicUtilityActionsPlugin.js.map +1 -0
- package/dist/plugins/ExamplePlugin.d.ts +3 -0
- package/dist/plugins/ExamplePlugin.d.ts.map +1 -0
- package/dist/plugins/ExamplePlugin.js +24 -0
- package/dist/plugins/ExamplePlugin.js.map +1 -0
- package/dist/plugins/LifecycleDemoPlugin.d.ts +20 -0
- package/dist/plugins/LifecycleDemoPlugin.d.ts.map +1 -0
- package/dist/plugins/LifecycleDemoPlugin.js +34 -0
- package/dist/plugins/LifecycleDemoPlugin.js.map +1 -0
- package/dist/plugins/MathPlugin.d.ts +16 -0
- package/dist/plugins/MathPlugin.d.ts.map +1 -0
- package/dist/plugins/MathPlugin.js +30 -0
- package/dist/plugins/MathPlugin.js.map +1 -0
- package/dist/plugins/MyJSPlugin.d.ts +7 -0
- package/dist/plugins/MyJSPlugin.d.ts.map +1 -0
- package/dist/plugins/MyJSPlugin.js +12 -0
- package/dist/plugins/MyJSPlugin.js.map +1 -0
- package/dist/plugins/TypedExamplePlugin.d.ts +10 -0
- package/dist/plugins/TypedExamplePlugin.d.ts.map +1 -0
- package/dist/plugins/TypedExamplePlugin.js +61 -0
- package/dist/plugins/TypedExamplePlugin.js.map +1 -0
- package/dist/plugins/arktype/index.d.ts +8 -0
- package/dist/plugins/arktype/index.d.ts.map +1 -0
- package/dist/plugins/arktype/index.js +25 -0
- package/dist/plugins/arktype/index.js.map +1 -0
- package/dist/src/Plugin.d.ts +28 -0
- package/dist/src/Plugin.d.ts.map +1 -0
- package/dist/src/Plugin.js +36 -0
- package/dist/src/Plugin.js.map +1 -0
- package/dist/{PluginManager.d.ts → src/PluginManager.d.ts} +33 -10
- package/dist/src/PluginManager.d.ts.map +1 -0
- package/dist/{PluginManager.js → src/PluginManager.js} +245 -193
- package/dist/src/PluginManager.js.map +1 -0
- package/dist/{index.d.ts → src/index.d.ts} +2 -1
- package/dist/src/index.d.ts.map +1 -0
- package/dist/{index.js → src/index.js} +2 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/logger/LoggerAdapter.d.ts +77 -0
- package/dist/src/logger/LoggerAdapter.d.ts.map +1 -0
- package/dist/src/logger/LoggerAdapter.js +242 -0
- package/dist/src/logger/LoggerAdapter.js.map +1 -0
- package/dist/src/logger/LoggerFactory.d.ts +73 -0
- package/dist/src/logger/LoggerFactory.d.ts.map +1 -0
- package/dist/src/logger/LoggerFactory.js +99 -0
- package/dist/src/logger/LoggerFactory.js.map +1 -0
- package/dist/src/logger/index.d.ts +3 -0
- package/dist/src/logger/index.d.ts.map +1 -0
- package/dist/src/logger/index.js +3 -0
- package/dist/src/logger/index.js.map +1 -0
- package/dist/{managers → src/managers}/ContextFactory.d.ts +1 -1
- package/dist/src/managers/ContextFactory.d.ts.map +1 -0
- package/dist/{managers → src/managers}/ContextFactory.js +51 -26
- package/dist/src/managers/ContextFactory.js.map +1 -0
- package/dist/src/managers/DependencyManager.d.ts.map +1 -0
- package/dist/{managers → src/managers}/DependencyManager.js +7 -5
- package/dist/src/managers/DependencyManager.js.map +1 -0
- package/dist/{managers → src/managers}/HooksManager.d.ts +4 -1
- package/dist/src/managers/HooksManager.d.ts.map +1 -0
- package/dist/{managers → src/managers}/HooksManager.js +36 -8
- package/dist/src/managers/HooksManager.js.map +1 -0
- package/dist/src/managers/ResourceManager.d.ts.map +1 -0
- package/dist/{managers → src/managers}/ResourceManager.js +3 -3
- package/dist/src/managers/ResourceManager.js.map +1 -0
- package/dist/src/storage/JsonPluginStorage.d.ts +75 -0
- package/dist/src/storage/JsonPluginStorage.d.ts.map +1 -0
- package/dist/src/storage/JsonPluginStorage.js +240 -0
- package/dist/src/storage/JsonPluginStorage.js.map +1 -0
- package/dist/src/types/plugin-registry-base.d.ts +80 -0
- package/dist/src/types/plugin-registry-base.d.ts.map +1 -0
- package/dist/src/types/plugin-registry-base.js +6 -0
- package/dist/src/types/plugin-registry-base.js.map +1 -0
- package/dist/{types.d.ts → src/types.d.ts} +60 -19
- package/dist/src/types.d.ts.map +1 -0
- package/dist/{types.js → src/types.js} +6 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils/errorParser.d.ts.map +1 -0
- package/dist/{utils → src/utils}/errorParser.js +2 -5
- package/dist/src/utils/errorParser.js.map +1 -0
- package/dist/src/utils/pluginValidator.d.ts +17 -0
- package/dist/src/utils/pluginValidator.d.ts.map +1 -0
- package/dist/{utils → src/utils}/pluginValidator.js +11 -14
- package/dist/src/utils/pluginValidator.js.map +1 -0
- package/dist/src/utils/security.d.ts.map +1 -0
- package/dist/src/utils/security.js.map +1 -0
- package/dist/src/worker/WorkerRunner.d.ts.map +1 -0
- package/dist/{worker → src/worker}/WorkerRunner.js +38 -13
- package/dist/src/worker/WorkerRunner.js.map +1 -0
- package/package.json +9 -6
- package/dist/PluginManager.d.ts.map +0 -1
- package/dist/PluginManager.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/managers/ContextFactory.d.ts.map +0 -1
- package/dist/managers/ContextFactory.js.map +0 -1
- package/dist/managers/DependencyManager.d.ts.map +0 -1
- package/dist/managers/DependencyManager.js.map +0 -1
- package/dist/managers/HooksManager.d.ts.map +0 -1
- package/dist/managers/HooksManager.js.map +0 -1
- package/dist/managers/ResourceManager.d.ts.map +0 -1
- package/dist/managers/ResourceManager.js.map +0 -1
- package/dist/storage/JsonPluginStorage.d.ts +0 -14
- package/dist/storage/JsonPluginStorage.d.ts.map +0 -1
- package/dist/storage/JsonPluginStorage.js +0 -63
- package/dist/storage/JsonPluginStorage.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/utils/errorParser.d.ts.map +0 -1
- package/dist/utils/errorParser.js.map +0 -1
- package/dist/utils/pluginValidator.d.ts +0 -93
- package/dist/utils/pluginValidator.d.ts.map +0 -1
- package/dist/utils/pluginValidator.js.map +0 -1
- package/dist/utils/security.d.ts.map +0 -1
- package/dist/utils/security.js.map +0 -1
- package/dist/worker/WorkerRunner.d.ts.map +0 -1
- package/dist/worker/WorkerRunner.js.map +0 -1
- /package/dist/{managers → src/managers}/DependencyManager.d.ts +0 -0
- /package/dist/{managers → src/managers}/ResourceManager.d.ts +0 -0
- /package/dist/{utils → src/utils}/errorParser.d.ts +0 -0
- /package/dist/{utils → src/utils}/security.d.ts +0 -0
- /package/dist/{utils → src/utils}/security.js +0 -0
- /package/dist/{worker → src/worker}/WorkerRunner.d.ts +0 -0
|
@@ -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":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAiB,UAAU,EAAuB,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAEvG,uDAAuD;AACvD,MAAM,iBAAiB,GAAG,GAAG,EAAE;IAC7B,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC;IAEtC,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACpC,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACtC,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IACtC,GAAG,CAAC,KAAK,EAAE,CAAC,yBAAyB,CAAC,CAAC,CAAC,wBAAwB;AAClE,CAAC,CAAC;AAEF,wDAAwD;AACxD,MAAM,sBAAsB,GAAG,GAAG,EAAE;IAClC,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAE1D,+CAA+C;IAC/C,MAAM,WAAW,GAAG,MAAM,CAAC,mBAAmB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IACrE,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAErC,MAAM,GAAG,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC;IACtC,GAAG,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IACzC,GAAG,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAC5C,GAAG,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAC3C,GAAG,CAAC,KAAK,EAAE,CAAC,+BAA+B,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF,mEAAmE;AACnE,MAAM,gBAAgB,GAAG,GAAG,EAAE;IAC5B,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAE5D,2DAA2D;IAC3D,MAAM,YAAY,GAA4B;QAC5C,IAAI,EAAE,CAAC,GAAW,EAAE,GAAG,IAAW,EAAE,EAAE;YACpC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,EAAE,CAAC,GAAW,EAAE,GAAG,IAAW,EAAE,EAAE;YACpC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;QAC5E,CAAC;QACD,KAAK,EAAE,CAAC,GAAW,EAAE,GAAG,IAAW,EAAE,EAAE;YACrC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;QAC7E,CAAC;QACD,KAAK,EAAE,CAAC,GAAW,EAAE,GAAG,IAAW,EAAE,EAAE;YACrC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;QAC7E,CAAC;KACF,CAAC;IAEF,+BAA+B;IAC/B,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAEtC,SAAS;IACT,MAAM,GAAG,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC;IACtC,GAAG,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IACvC,GAAG,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC1C,GAAG,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACzC,GAAG,CAAC,KAAK,EAAE,CAAC,6BAA6B,CAAC,CAAC;AAC7C,CAAC,CAAC;AAEF,6DAA6D;AAC7D,MAAM,iBAAiB,GAAG,GAAG,EAAE;IAC7B,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAE1D,mCAAmC;IACnC,MAAM,CAAC,gBAAgB,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC;IAErD,uCAAuC;IACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAE/C,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,CAAC,yBAAyB,CAAC,CAAC;IAE5C,SAAS,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAClD,SAAS,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAE9C,UAAU,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAClD,UAAU,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;AACnD,CAAC,CAAC;AAEF,mDAAmD;AACnD,MAAM,cAAc,GAAG,GAAG,EAAE;IAC1B,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IAEzD,MAAM,OAAO,GAAG,IAAI,UAAU,EAAE,CAAC;IACjC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAEjC,MAAM,GAAG,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC;IACtC,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAChC,GAAG,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACrC,GAAG,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAEzC,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;AACrD,CAAC,CAAC;AAEF,uCAAuC;AACvC,MAAM,cAAc,GAAG,GAAG,EAAE;IAC1B,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IAEnD,mDAAmD;IACnD,MAAM,cAAc,GAAG;QACrB,GAAG,EAAE,CAAC,KAAa,EAAE,OAAe,EAAE,EAAE;YACtC,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC;KACF,CAAC;IAEF,wDAAwD;IACxD,MAAM,aAAa,GAA4B;QAC7C,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;QACtD,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;QACtD,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC;QACxD,KAAK,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,aAAa,CAAC,8BAA8B;KACzE,CAAC;IAEF,+CAA+C;IAC/C,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;IAE1E,aAAa,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAClD,aAAa,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAClD,aAAa,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;AACnD,CAAC,CAAC;AAEF,yDAAyD;AACzD,MAAM,0BAA0B,GAAG,GAAG,EAAE;IACtC,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAElD,qDAAqD;IACrD,MAAM,cAAc,GAAG,MAAM,CAAC,2BAA2B,CAAC;QACxD,SAAS,EAAE,IAAI;QACf,eAAe,EAAE,MAAM;QACvB,WAAW,EAAE;YACX,IAAI,EAAE,SAAS,EAAK,eAAe;YACnC,IAAI,EAAE,SAAS,EAAK,OAAO;YAC3B,KAAK,EAAE,SAAS,EAAI,MAAM;YAC1B,KAAK,EAAE,SAAS,CAAI,iBAAiB;SACtC;QACD,YAAY,EAAE,SAAS,EAAE,WAAW;QACpC,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC;IAEH,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAExC,MAAM,GAAG,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC;IACtC,GAAG,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAC5C,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAChC,GAAG,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACnD,GAAG,CAAC,KAAK,EAAE,CAAC,oCAAoC,CAAC,CAAC;IAElD,wCAAwC;IACxC,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC;IACpD,WAAW,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IACvD,WAAW,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF,yCAAyC;AACzC,MAAM,gBAAgB,GAAG,GAAG,EAAE;IAC5B,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAEhD,MAAM,MAAM,GAAG;QACb,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM;QACnD,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;QACrD,kBAAkB,EAAE,oBAAoB;KACzC,CAAC;IAEF,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACrB,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC3C,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,gBAAgB,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,qBAAqB;AACrB,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;IAC/B,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAElD,iBAAiB,EAAE,CAAC;IACpB,sBAAsB,EAAE,CAAC;IACzB,gBAAgB,EAAE,CAAC;IACnB,iBAAiB,EAAE,CAAC;IACpB,cAAc,EAAE,CAAC;IACjB,cAAc,EAAE,CAAC;IACjB,0BAA0B,EAAE,CAAC;IAC7B,gBAAgB,EAAE,CAAC;IAEnB,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;AACrD,CAAC,CAAC;AAEF,iBAAiB;AACjB,OAAO,EAAE,aAAa,EAAE,CAAC;AAEzB,yBAAyB;AACzB,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,aAAa,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -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"}
|