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,240 @@
1
+ import { join, dirname } from "node:path";
2
+ import { mkdir } from "node:fs/promises";
3
+ import { watch, existsSync } from "node:fs";
4
+ import { logger } from "../logger";
5
+ /**
6
+ * JsonPluginStorage con soporte singleton para evitar múltiples instancias del mismo plugin.
7
+ * Usa un Map estático para almacenar las instancias por nombre de plugin y basePath.
8
+ */
9
+ export class JsonPluginStorage {
10
+ static instances = new Map();
11
+ filePath;
12
+ data = null;
13
+ lastModified = 0;
14
+ watcher = null;
15
+ watchDebounceTimer = null;
16
+ onDataChangeCallbacks = [];
17
+ /**
18
+ * Obtiene una instancia singleton de JsonPluginStorage.
19
+ * Si la instancia ya existe para el plugin dado, la reutiliza.
20
+ * @param basePath Ruta base del storage
21
+ * @param pluginName Nombre del plugin
22
+ * @returns Instancia de JsonPluginStorage
23
+ */
24
+ static getInstance(basePath, pluginName) {
25
+ const key = `${basePath}:${pluginName}`;
26
+ if (!JsonPluginStorage.instances.has(key)) {
27
+ const instance = new JsonPluginStorage(basePath, pluginName);
28
+ JsonPluginStorage.instances.set(key, instance);
29
+ if (logger) {
30
+ logger.getLogger("JsonPluginStorage").debug(`Created new storage instance for ${pluginName}`);
31
+ }
32
+ }
33
+ return JsonPluginStorage.instances.get(key);
34
+ }
35
+ /**
36
+ * Obtiene todas las instancias registradas.
37
+ */
38
+ static getAllInstances() {
39
+ return new Map(JsonPluginStorage.instances);
40
+ }
41
+ /**
42
+ * Obtiene una instancia específica por nombre de plugin.
43
+ * @param pluginName Nombre del plugin
44
+ * @returns Instancia o undefined si no existe
45
+ */
46
+ static getInstanceByName(pluginName) {
47
+ for (const [key, instance] of JsonPluginStorage.instances) {
48
+ if (key.endsWith(`:${pluginName}`)) {
49
+ return instance;
50
+ }
51
+ }
52
+ return undefined;
53
+ }
54
+ /**
55
+ * Elimina una instancia específica.
56
+ * @param basePath Ruta base del storage
57
+ * @param pluginName Nombre del plugin
58
+ */
59
+ static removeInstance(basePath, pluginName) {
60
+ const key = `${basePath}:${pluginName}`;
61
+ const instance = JsonPluginStorage.instances.get(key);
62
+ if (instance) {
63
+ instance.stopWatching(); // Limpiar watcher al eliminar
64
+ JsonPluginStorage.instances.delete(key);
65
+ if (logger) {
66
+ logger.getLogger("JsonPluginStorage").debug(`Removed storage instance for ${pluginName}`);
67
+ }
68
+ }
69
+ }
70
+ /**
71
+ * Limpia todas las instancias (útil para testing).
72
+ */
73
+ static clearAllInstances() {
74
+ for (const [key, instance] of JsonPluginStorage.instances) {
75
+ instance.stopWatching();
76
+ }
77
+ JsonPluginStorage.instances.clear();
78
+ if (!logger)
79
+ return;
80
+ logger.getLogger("JsonPluginStorage").debug(`Cleared all storage instances`);
81
+ }
82
+ constructor(basePath, pluginName) {
83
+ this.filePath = join(basePath, "plugins", pluginName, "storage.json");
84
+ }
85
+ async ensureLoaded(force = false) {
86
+ try {
87
+ const file = Bun.file(this.filePath);
88
+ const exists = await file.exists();
89
+ if (!exists) {
90
+ this.data = this.data || {};
91
+ this.lastModified = 0;
92
+ return;
93
+ }
94
+ const stats = await import("node:fs/promises").then(fs => fs.stat(this.filePath));
95
+ const mtime = stats.mtimeMs;
96
+ if (force || this.data === null || mtime > this.lastModified) {
97
+ this.data = await file.json();
98
+ this.lastModified = mtime;
99
+ }
100
+ }
101
+ catch (e) {
102
+ if (this.data === null) {
103
+ logger.getLogger("JsonPluginStorage").error(`Failed to load storage for ${this.filePath}`, e);
104
+ this.data = {};
105
+ }
106
+ }
107
+ }
108
+ async save() {
109
+ if (this.data === null)
110
+ return;
111
+ try {
112
+ await mkdir(dirname(this.filePath), { recursive: true });
113
+ const content = JSON.stringify(this.data, null, 2);
114
+ await Bun.write(this.filePath, content);
115
+ // Update local mtime to avoid immediate reload
116
+ const stats = await import("node:fs/promises").then(fs => fs.stat(this.filePath));
117
+ this.lastModified = stats.mtimeMs;
118
+ }
119
+ catch (e) {
120
+ logger.getLogger("JsonPluginStorage").error(`Failed to save storage for ${this.filePath}`, e);
121
+ }
122
+ }
123
+ async get(key, defaultValue) {
124
+ await this.ensureLoaded();
125
+ return this.data?.[key] ?? defaultValue;
126
+ }
127
+ async set(key, value) {
128
+ await this.ensureLoaded();
129
+ if (this.data) {
130
+ this.data[key] = value;
131
+ await this.save();
132
+ }
133
+ }
134
+ async delete(key) {
135
+ await this.ensureLoaded();
136
+ if (this.data) {
137
+ delete this.data[key];
138
+ await this.save();
139
+ }
140
+ }
141
+ async clear() {
142
+ this.data = {};
143
+ await this.save();
144
+ }
145
+ async reload() {
146
+ await this.ensureLoaded(true);
147
+ }
148
+ /**
149
+ * init watch for storage file changes
150
+ * When the file changes externally, the data will be reloaded automatically.
151
+ * @param debounceMs Time to wait in ms before reloading (default: 100ms)
152
+ */
153
+ startWatching(debounceMs = 100) {
154
+ if (this.watcher) {
155
+ logger.getLogger("JsonPluginStorage").warn(`Already watching ${this.filePath}`);
156
+ return;
157
+ }
158
+ const dir = dirname(this.filePath);
159
+ if (!existsSync(dir)) {
160
+ logger.getLogger("JsonPluginStorage").warn(`Cannot watch non-existent directory: ${dir}`);
161
+ return;
162
+ }
163
+ try {
164
+ this.watcher = watch(dir, { persistent: false }, async (eventType, filename) => {
165
+ if (filename && filename.endsWith('.json')) {
166
+ // Debounce para evitar múltiples recargas rápidas
167
+ if (this.watchDebounceTimer) {
168
+ clearTimeout(this.watchDebounceTimer);
169
+ }
170
+ this.watchDebounceTimer = setTimeout(async () => {
171
+ try {
172
+ const oldData = this.data ? { ...this.data } : null;
173
+ await this.ensureLoaded(true);
174
+ // Notificar a los suscriptores si los datos cambiaron
175
+ if (oldData && this.data && JSON.stringify(oldData) !== JSON.stringify(this.data)) {
176
+ this.notifyDataChange(this.data);
177
+ logger.getLogger("JsonPluginStorage").info(`Storage auto-reloaded for ${this.filePath}`);
178
+ }
179
+ }
180
+ catch (e) {
181
+ logger.getLogger("JsonPluginStorage").error(`Error auto-reloading storage:`, e);
182
+ }
183
+ }, debounceMs);
184
+ }
185
+ });
186
+ logger.getLogger("JsonPluginStorage").info(`Started watching ${this.filePath}`);
187
+ }
188
+ catch (e) {
189
+ logger.getLogger("JsonPluginStorage").error(`Failed to start watching ${this.filePath}:`, e);
190
+ }
191
+ }
192
+ /**
193
+ * stop watching for storage file changes
194
+ */
195
+ stopWatching() {
196
+ if (this.watchDebounceTimer) {
197
+ clearTimeout(this.watchDebounceTimer);
198
+ this.watchDebounceTimer = null;
199
+ }
200
+ if (this.watcher) {
201
+ this.watcher.close();
202
+ this.watcher = null;
203
+ logger.getLogger("JsonPluginStorage").info(`Stopped watching ${this.filePath}`);
204
+ }
205
+ }
206
+ /**
207
+ * register a callback that will be called when the storage data changes.
208
+ * @param callback function to call when the data changes
209
+ * @returns function to cancel the subscription
210
+ */
211
+ onDataChange(callback) {
212
+ this.onDataChangeCallbacks.push(callback);
213
+ return () => {
214
+ const index = this.onDataChangeCallbacks.indexOf(callback);
215
+ if (index > -1) {
216
+ this.onDataChangeCallbacks.splice(index, 1);
217
+ }
218
+ };
219
+ }
220
+ /**
221
+ * notify all subscribers about data changes.
222
+ */
223
+ notifyDataChange(data) {
224
+ for (const callback of this.onDataChangeCallbacks) {
225
+ try {
226
+ callback(data);
227
+ }
228
+ catch (e) {
229
+ logger.getLogger("JsonPluginStorage").error(`Error in data change callback:`, e);
230
+ }
231
+ }
232
+ }
233
+ /**
234
+ * check if the storage is being watched.
235
+ */
236
+ isWatching() {
237
+ return this.watcher !== null;
238
+ }
239
+ }
240
+ //# sourceMappingURL=JsonPluginStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonPluginStorage.js","sourceRoot":"","sources":["../../../src/storage/JsonPluginStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC;;;GAGG;AACH,MAAM,OAAO,iBAAiB;IACpB,MAAM,CAAC,SAAS,GAAmC,IAAI,GAAG,EAAE,CAAC;IAE7D,QAAQ,CAAS;IACjB,IAAI,GAA+B,IAAI,CAAC;IACxC,YAAY,GAAW,CAAC,CAAC;IACzB,OAAO,GAAoC,IAAI,CAAC;IAChD,kBAAkB,GAAyC,IAAI,CAAC;IAChE,qBAAqB,GAA+C,EAAE,CAAC;IAE/E;;;;;;OAMG;IACH,MAAM,CAAC,WAAW,CAAC,QAAgB,EAAE,UAAkB;QACrD,MAAM,GAAG,GAAG,GAAG,QAAQ,IAAI,UAAU,EAAE,CAAC;QAExC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAC7D,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC/C,IAAI,MAAM,EAAC,CAAC;gBACV,MAAM,CAAC,SAAU,CAAC,mBAAmB,CAAC,CAAC,KAAM,CAAC,oCAAoC,UAAU,EAAE,CAAC,CAAC;YAClG,CAAC;QACH,CAAC;QAED,OAAO,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,eAAe;QACpB,OAAO,IAAI,GAAG,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,iBAAiB,CAAC,UAAkB;QACzC,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,iBAAiB,CAAC,SAAS,EAAE,CAAC;YAC1D,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,UAAU,EAAE,CAAC,EAAE,CAAC;gBACnC,OAAO,QAAQ,CAAC;YAClB,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,cAAc,CAAC,QAAgB,EAAE,UAAkB;QACxD,MAAM,GAAG,GAAG,GAAG,QAAQ,IAAI,UAAU,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtD,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,8BAA8B;YACvD,iBAAiB,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,MAAM,EAAC,CAAC;gBACV,MAAM,CAAC,SAAU,CAAC,mBAAmB,CAAC,CAAC,KAAM,CAAC,gCAAgC,UAAU,EAAE,CAAC,CAAC;YAC9F,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,iBAAiB;QACtB,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,iBAAiB,CAAC,SAAS,EAAE,CAAC;YAC1D,QAAQ,CAAC,YAAY,EAAE,CAAC;QAC1B,CAAC;QACD,iBAAiB,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACpC,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,CAAC,SAAU,CAAC,mBAAmB,CAAC,CAAC,KAAM,CAAC,+BAA+B,CAAC,CAAC;IACjF,CAAC;IAED,YAAoB,QAAgB,EAAE,UAAkB;QACtD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;IACxE,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,QAAiB,KAAK;QAC/C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YAEnC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;gBAC5B,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;gBACtB,OAAO;YACT,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAClF,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;YAE5B,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC7D,IAAI,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC9B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC5B,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBACvB,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC,8BAA8B,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC9F,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,IAAI;QAChB,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;YAAE,OAAO;QAC/B,IAAI,CAAC;YACD,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACzD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACnD,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAExC,+CAA+C;YAC/C,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAClF,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC;QACtC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC,8BAA8B,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QAClG,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,YAAgB;QACxC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC1B,OAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAO,IAAI,YAAY,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,KAAQ;QAChC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACvB,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACtB,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACf,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,MAAM;QACR,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACH,aAAa,CAAC,aAAqB,GAAG;QACpC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAChF,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,wCAAwC,GAAG,EAAE,CAAC,CAAC;YAC1F,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;gBAC7E,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC3C,kDAAkD;oBAClD,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;wBAC5B,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;oBACxC,CAAC;oBAED,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;wBAC9C,IAAI,CAAC;4BACH,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;4BACpD,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;4BAE9B,sDAAsD;4BACtD,IAAI,OAAO,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gCAClF,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gCACjC,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,6BAA6B,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;4BAC3F,CAAC;wBACH,CAAC;wBAAC,OAAO,CAAC,EAAE,CAAC;4BACX,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC,+BAA+B,EAAE,CAAC,CAAC,CAAC;wBAClF,CAAC;oBACH,CAAC,EAAE,UAAU,CAAC,CAAC;gBACjB,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAClF,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC,4BAA4B,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC;IAED;;OAEG;IACH,YAAY;QACV,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACtC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QACjC,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,YAAY,CAAC,QAA6C;QACxD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE1C,OAAO,GAAG,EAAE;YACV,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC3D,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;gBACf,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,IAAyB;QAChD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAClD,IAAI,CAAC;gBACH,QAAQ,CAAC,IAAI,CAAC,CAAC;YACjB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC,gCAAgC,EAAE,CAAC,CAAC,CAAC;YACnF,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC;IAC/B,CAAC"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Base types for plugin registry that can be extended by users using declaration merging.
3
+ * This solves issue where published libraries can't know about user's plugins.
4
+ */
5
+ import type { IPlugin } from "../types";
6
+ /**
7
+ * Base API interface that all plugins extend.
8
+ * Users can extend this interface with their own plugin APIs.
9
+ */
10
+ export interface BasePluginApi {
11
+ name: string;
12
+ version: string;
13
+ actions?: string[];
14
+ type?: string;
15
+ loaded?: string;
16
+ }
17
+ /**
18
+ * Plugin factory map - users can extend this with their own plugins.
19
+ *
20
+ * This interface can be extended by users using declaration merging.
21
+ *
22
+ * Example of how users extend this:
23
+ * ```typescript
24
+ * declare module "bun_plugins" {
25
+ * export interface PluginFactory {
26
+ * "my-custom-plugin": {
27
+ * name: "my-custom-plugin";
28
+ * version: "1.0.0";
29
+ * class: MyCustomPlugin;
30
+ * api: MyCustomPluginApi;
31
+ * };
32
+ * }
33
+ * }
34
+ *
35
+ * // Now you can use context.getPlugin("my-custom-plugin") with full autocomplete
36
+ * const api = await context.getPlugin("my-custom-plugin");
37
+ * api.myCustomMethod();
38
+ * ```
39
+ */
40
+ export interface PluginFactory {
41
+ }
42
+ /**
43
+ * Union type of all plugin names.
44
+ * This is dynamically computed from PluginFactory keys.
45
+ * For development, we allow any string to be used as plugin name.
46
+ */
47
+ export type PluginNames = keyof PluginFactory | string;
48
+ /**
49
+ * Get the API type for a specific plugin.
50
+ * Falls back to BasePluginApi if the plugin is not found.
51
+ */
52
+ export type PluginApiType<T extends string> = T extends keyof PluginFactory ? PluginFactory[T]["api"] : BasePluginApi;
53
+ /**
54
+ * Get the class type for a specific plugin.
55
+ * Falls back to IPlugin if the plugin is not found.
56
+ */
57
+ export type PluginClassType<T extends string> = T extends keyof PluginFactory ? PluginFactory[T]["class"] : IPlugin;
58
+ /**
59
+ * Get the API type for a specific plugin.
60
+ */
61
+ export type GetPluginApi<T extends string> = PluginApiType<T>;
62
+ /**
63
+ * Get the class type for a specific plugin.
64
+ */
65
+ export type GetPluginClass<T extends string> = PluginClassType<T>;
66
+ /**
67
+ * Helper to check if a plugin name is valid.
68
+ * Returns true if the plugin is in PluginFactory.
69
+ */
70
+ export type IsValidPlugin<T extends string> = T extends PluginNames ? true : false;
71
+ /**
72
+ * Type-safe plugin retrieval from the factory.
73
+ * Returns the plugin info if found, undefined otherwise.
74
+ */
75
+ export type PluginFromFactory<T extends PluginNames> = T extends keyof PluginFactory ? PluginFactory[T] : undefined;
76
+ /**
77
+ * Plugin instance type - combines class and API types.
78
+ */
79
+ export type PluginInstanceType<T extends string> = T extends keyof PluginFactory ? PluginFactory[T]["class"] : IPlugin;
80
+ //# sourceMappingURL=plugin-registry-base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-registry-base.d.ts","sourceRoot":"","sources":["../../../src/types/plugin-registry-base.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,WAAW,aAAa;CAE7B;AAED;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,aAAa,GAAG,MAAM,CAAC;AAEvD;;;GAGG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,MAAM,IACxC,CAAC,SAAS,MAAM,aAAa,GACzB,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GACvB,aAAa,CAAC;AAEpB;;;GAGG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,MAAM,IAC1C,CAAC,SAAS,MAAM,aAAa,GACzB,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GACzB,OAAO,CAAC;AAEd;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,MAAM,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;AAElE;;;GAGG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,WAAW,GAAG,IAAI,GAAG,KAAK,CAAC;AAEnF;;;GAGG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,WAAW,IACjD,CAAC,SAAS,MAAM,aAAa,GACzB,aAAa,CAAC,CAAC,CAAC,GAChB,SAAS,CAAC;AAEhB;;GAEG;AACH,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,MAAM,IAC7C,CAAC,SAAS,MAAM,aAAa,GACzB,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GACzB,OAAO,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Base types for plugin registry that can be extended by users using declaration merging.
3
+ * This solves issue where published libraries can't know about user's plugins.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=plugin-registry-base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-registry-base.js","sourceRoot":"","sources":["../../../src/types/plugin-registry-base.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -1,4 +1,8 @@
1
1
  import { z } from "zod";
2
+ export { z };
3
+ export * from "./types/plugin-registry-base";
4
+ export type PluginNames = string;
5
+ export type PluginApiType<T extends string> = any;
2
6
  export declare enum WorkerMessageType {
3
7
  RPC_CALL = "RPC_CALL",
4
8
  HOOK_CALL = "HOOK_CALL",
@@ -25,13 +29,17 @@ export declare enum RPCMethod {
25
29
  EventsOn = "events:on",
26
30
  HooksRegister = "hooks:register",
27
31
  ManagerGetPlugin = "manager:getPlugin",
32
+ ManagerRegisterApi = "manager:registerApi",
28
33
  Log = "log",
29
34
  NetworkFetch = "network:fetch",
30
- PermissionCheck = "perm:check"
35
+ PermissionCheck = "perm:check",
36
+ ConfigGet = "config:get",
37
+ StorageReload = "storage:reload"
31
38
  }
32
39
  export declare enum HookType {
33
40
  ON_RESOLVE = "onResolve",
34
- ON_LOAD = "onLoad"
41
+ ON_LOAD = "onLoad",
42
+ ON_START = "onStart"
35
43
  }
36
44
  export declare enum HookOrder {
37
45
  PRE = "pre",
@@ -41,7 +49,7 @@ export interface PluginResource {
41
49
  workers: Worker[];
42
50
  timers: {
43
51
  id: number | Timer;
44
- type: 'timeout' | 'interval';
52
+ type: "timeout" | "interval";
45
53
  }[];
46
54
  eventListeners: {
47
55
  event: string;
@@ -55,13 +63,13 @@ export interface HookRegistry<T> {
55
63
  order?: HookOrder;
56
64
  }
57
65
  export interface AppEvents {
58
- "log": {
66
+ log: {
59
67
  level: "info" | "error" | "warn";
60
68
  message: string;
61
69
  };
62
- "cmd:input": {
63
- command: string;
64
- args: string[];
70
+ "plugin:updated": {
71
+ name: string;
72
+ version: string;
65
73
  };
66
74
  [key: string]: any;
67
75
  }
@@ -71,11 +79,41 @@ export interface IPluginStorage {
71
79
  set<T>(key: string, value: T): Promise<void>;
72
80
  delete(key: string): Promise<void>;
73
81
  clear(): Promise<void>;
82
+ reload(): Promise<void>;
74
83
  }
75
84
  export interface Logger {
76
85
  info(msg: string, ...args: any[]): void;
77
86
  warn(msg: string, ...args: any[]): void;
78
87
  error(msg: string, ...args: any[]): void;
88
+ debug?(msg: string, ...args: any[]): void;
89
+ child?(context: string): Logger;
90
+ }
91
+ export interface IPluginManager {
92
+ register(plugin: IPlugin): Promise<void>;
93
+ registerIsolated(pluginPath: string, pluginName: string): Promise<void>;
94
+ unregister(pluginName: string): Promise<void>;
95
+ getPlugin(name: string): IPlugin | undefined;
96
+ listPlugins(): string[];
97
+ loadPluginsFromDirectory(directoryPath?: string): Promise<void>;
98
+ disablePlugin(name: string): Promise<void>;
99
+ enablePlugin(name: string): Promise<void>;
100
+ reloadPlugin(name: string): Promise<void>;
101
+ runOnResolve(args: OnResolveArgs): Promise<any>;
102
+ runOnLoad(args: OnLoadArgs): Promise<any>;
103
+ toBunPlugin(): any;
104
+ enableHotReload(pluginDir: string): void;
105
+ getWorkerFactory(): (url: string | URL, options?: BunWorkerOptions) => Worker;
106
+ getMetrics(): any;
107
+ getPluginStatus(): Record<string, any>;
108
+ registerApi(pluginName: string, api: any): void;
109
+ getPluginApi(pluginName: string): any | undefined;
110
+ use(plugin: IPlugin): Promise<void>;
111
+ plugin(plugin: IPlugin): Promise<void>;
112
+ remove(pluginName: string): Promise<void>;
113
+ emit<K extends keyof AppEvents>(eventName: K, payload: AppEvents[K]): boolean;
114
+ on<K extends keyof AppEvents>(eventName: K & string, listener: (payload: AppEvents[K]) => void): this;
115
+ once<K extends keyof AppEvents>(eventName: K & string, listener: (payload: AppEvents[K]) => void): this;
116
+ off<K extends keyof AppEvents>(eventName: K & string, listener: (payload: AppEvents[K]) => void): this;
79
117
  }
80
118
  export interface PluginContext {
81
119
  emit<K extends keyof AppEvents>(event: K, payload: AppEvents[K]): void;
@@ -86,8 +124,9 @@ export interface PluginContext {
86
124
  };
87
125
  storage: IPluginStorage;
88
126
  config: Record<string, any>;
89
- manager: any;
90
- getPlugin(name: string): unknown | undefined;
127
+ manager: IPluginManager;
128
+ getPlugin<TName extends string>(name: TName): Promise<import("./types/plugin-registry-base").PluginApiType<TName> | undefined>;
129
+ registerApi(api: any): void;
91
130
  log: Logger;
92
131
  createWorker(url: string | URL, options?: BunWorkerOptions): BunWorker;
93
132
  network: {
@@ -116,13 +155,7 @@ export declare class AccessDeniedError extends Error {
116
155
  export declare const BasicPluginSchema: z.ZodObject<{
117
156
  name: z.ZodString;
118
157
  version: z.ZodString;
119
- }, "strip", z.ZodTypeAny, {
120
- name: string;
121
- version: string;
122
- }, {
123
- name: string;
124
- version: string;
125
- }>;
158
+ }, z.core.$strip>;
126
159
  export interface IPlugin {
127
160
  name: string;
128
161
  version: string;
@@ -139,7 +172,7 @@ export interface IPlugin {
139
172
  onLoad(context: PluginContext): Promise<void> | void;
140
173
  onStarted?: () => Promise<void> | void;
141
174
  onUnload(): Promise<void> | void;
142
- getSharedApi?: () => unknown;
175
+ onReload?: (context: PluginContext) => Promise<void> | void;
143
176
  setup?: (build: PluginBuilder) => void | Promise<void>;
144
177
  }
145
178
  export type OnResolveArgs = {
@@ -163,11 +196,19 @@ export type OnLoadResult = {
163
196
  } | undefined | null;
164
197
  export type OnLoadCallback = (args: OnLoadArgs) => OnLoadResult | Promise<OnLoadResult>;
165
198
  export interface PluginBuilder {
166
- onResolve(filter: RegExp, callback: OnResolveCallback, options?: {
199
+ onStart(callback: () => void | Promise<void>): void;
200
+ onResolve(filter: RegExp | {
201
+ filter: RegExp;
202
+ namespace?: string;
203
+ }, callback: OnResolveCallback, options?: {
167
204
  order?: HookOrder;
168
205
  }): void;
169
- onLoad(filter: RegExp, callback: OnLoadCallback, options?: {
206
+ onLoad(filter: RegExp | {
207
+ filter: RegExp;
208
+ namespace?: string;
209
+ }, callback: OnLoadCallback, options?: {
170
210
  order?: HookOrder;
171
211
  }): void;
212
+ config: Record<string, any>;
172
213
  }
173
214
  //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,CAAC,EAAE,CAAC;AAEb,cAAc,8BAA8B,CAAA;AAG5C,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AACjC,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,MAAM,IAAI,GAAG,CAAC;AAElD,oBAAY,iBAAiB;IAC3B,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,WAAW,gBAAgB;IAC3B,UAAU,eAAe;IACzB,UAAU,eAAe;IACzB,QAAQ,aAAa;IACrB,YAAY,iBAAiB;IAC7B,UAAU,eAAe;IACzB,QAAQ,aAAa;IACrB,MAAM,WAAW;CAClB;AAED,oBAAY,gBAAgB;IAC1B,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,GAAG,QAAQ;CACZ;AAED,oBAAY,SAAS;IACnB,UAAU,gBAAgB;IAC1B,UAAU,gBAAgB;IAC1B,aAAa,mBAAmB;IAChC,YAAY,kBAAkB;IAC9B,UAAU,gBAAgB;IAC1B,QAAQ,cAAc;IACtB,aAAa,mBAAmB;IAChC,gBAAgB,sBAAsB;IACtC,kBAAkB,wBAAwB;IAC1C,GAAG,QAAQ;IACX,YAAY,kBAAkB;IAC9B,eAAe,eAAe;IAC9B,SAAS,eAAe;IACxB,aAAa,mBAAmB;CACjC;AAED,oBAAY,QAAQ;IAClB,UAAU,cAAc;IACxB,OAAO,WAAW;IAClB,QAAQ,YAAY;CACrB;AAED,oBAAY,SAAS;IACnB,GAAG,QAAQ;IACX,IAAI,SAAS;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,GAAG,KAAK,CAAC;QAAC,IAAI,EAAE,SAAS,GAAG,UAAU,CAAA;KAAE,EAAE,CAAC;IAC/D,cAAc,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAA;KAAE,EAAE,CAAC;CACzD;AAED,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAGD,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE;QAAE,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,gBAAgB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpE,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC9D,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACxC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACxC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACzC,KAAK,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC1C,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IAC7C,WAAW,IAAI,MAAM,EAAE,CAAC;IACxB,wBAAwB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAChD,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1C,WAAW,IAAI,GAAG,CAAC;IACnB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,gBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,OAAO,CAAC,EAAE,gBAAgB,KAAK,MAAM,CAAC;IAC9E,UAAU,IAAI,GAAG,CAAC;IAClB,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAGvC,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;IAChD,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAAC;IAGlD,GAAG,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAG1C,IAAI,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IAC9E,EAAE,CAAC,CAAC,SAAS,MAAM,SAAS,EAC1B,SAAS,EAAE,CAAC,GAAG,MAAM,EACrB,QAAQ,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,GACxC,IAAI,CAAC;IACR,IAAI,CAAC,CAAC,SAAS,MAAM,SAAS,EAC5B,SAAS,EAAE,CAAC,GAAG,MAAM,EACrB,QAAQ,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,GACxC,IAAI,CAAC;IACR,GAAG,CAAC,CAAC,SAAS,MAAM,SAAS,EAC3B,SAAS,EAAE,CAAC,GAAG,MAAM,EACrB,QAAQ,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,GACxC,IAAI,CAAC;CACT;AAED,MAAM,WAAW,aAAa;IAE5B,IAAI,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACvE,EAAE,CAAC,CAAC,SAAS,MAAM,SAAS,EAC1B,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GACpC,IAAI,CAAC;IAGR,MAAM,EAAE;QACN,IAAI,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACvE,EAAE,CAAC,CAAC,SAAS,MAAM,SAAS,EAC1B,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GACpC,IAAI,CAAC;KACT,CAAC;IAEF,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,OAAO,EAAE,cAAc,CAAC;IAKxB,SAAS,CAAC,KAAK,SAAS,MAAM,EAC5B,IAAI,EAAE,KAAK,GACV,OAAO,CAAC,OAAO,8BAA8B,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC;IAGpF,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;IAG5B,GAAG,EAAE,MAAM,CAAC;IAGZ,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAGvE,OAAO,EAAE;QACP,KAAK,EAAE,CACL,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAC7B,IAAI,CAAC,EAAE,WAAW,KACf,OAAO,CAAC,QAAQ,CAAC,CAAC;KACxB,CAAC;IAEF,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,CAAC;IAE5B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAGxC,UAAU,EAAE,CACV,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,EAClC,KAAK,CAAC,EAAE,MAAM,EACd,GAAG,IAAI,EAAE,GAAG,EAAE,KACX,MAAM,GAAG,KAAK,CAAC;IACpB,WAAW,EAAE,CACX,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,EAClC,KAAK,CAAC,EAAE,MAAM,EACd,GAAG,IAAI,EAAE,GAAG,EAAE,KACX,MAAM,GAAG,KAAK,CAAC;IACpB,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,KAAK,IAAI,CAAC;IAC3C,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,KAAK,IAAI,CAAC;CAC7C;AAED,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAC5B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,SAAU,SAAQ,MAAM;IACvC,GAAG,IAAI,IAAI,CAAC;IACZ,KAAK,IAAI,IAAI,CAAC;CACf;AAED,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAMnD;AAGD,eAAO,MAAM,iBAAiB;;;iBAG5B,CAAC;AAEH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IAEF,YAAY,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAGpC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAGtC,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAE1B,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACrD,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACvC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAG5D,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxD;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AACF,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GACpC,SAAS,GACT,IAAI,CAAC;AACT,MAAM,MAAM,iBAAiB,GAAG,CAC9B,IAAI,EAAE,aAAa,KAChB,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AAEhD,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AACF,MAAM,MAAM,YAAY,GACpB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACrC,SAAS,GACT,IAAI,CAAC;AACT,MAAM,MAAM,cAAc,GAAG,CAC3B,IAAI,EAAE,UAAU,KACb,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AAE1C,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACpD,SAAS,CACP,MAAM,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,EACvD,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,SAAS,CAAA;KAAE,GAC9B,IAAI,CAAC;IACR,MAAM,CACJ,MAAM,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,EACvD,QAAQ,EAAE,cAAc,EACxB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,SAAS,CAAA;KAAE,GAC9B,IAAI,CAAC;IACR,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC7B"}
@@ -1,4 +1,6 @@
1
1
  import { z } from "zod";
2
+ export { z };
3
+ export * from "./types/plugin-registry-base";
2
4
  export var WorkerMessageType;
3
5
  (function (WorkerMessageType) {
4
6
  WorkerMessageType["RPC_CALL"] = "RPC_CALL";
@@ -28,14 +30,18 @@ export var RPCMethod;
28
30
  RPCMethod["EventsOn"] = "events:on";
29
31
  RPCMethod["HooksRegister"] = "hooks:register";
30
32
  RPCMethod["ManagerGetPlugin"] = "manager:getPlugin";
33
+ RPCMethod["ManagerRegisterApi"] = "manager:registerApi";
31
34
  RPCMethod["Log"] = "log";
32
35
  RPCMethod["NetworkFetch"] = "network:fetch";
33
36
  RPCMethod["PermissionCheck"] = "perm:check";
37
+ RPCMethod["ConfigGet"] = "config:get";
38
+ RPCMethod["StorageReload"] = "storage:reload";
34
39
  })(RPCMethod || (RPCMethod = {}));
35
40
  export var HookType;
36
41
  (function (HookType) {
37
42
  HookType["ON_RESOLVE"] = "onResolve";
38
43
  HookType["ON_LOAD"] = "onLoad";
44
+ HookType["ON_START"] = "onStart";
39
45
  })(HookType || (HookType = {}));
40
46
  export var HookOrder;
41
47
  (function (HookOrder) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,CAAC,EAAE,CAAC;AAEb,cAAc,8BAA8B,CAAA;AAM5C,MAAM,CAAN,IAAY,iBAWX;AAXD,WAAY,iBAAiB;IAC3B,0CAAqB,CAAA;IACrB,4CAAuB,CAAA;IACvB,gDAA2B,CAAA;IAC3B,8CAAyB,CAAA;IACzB,8CAAyB,CAAA;IACzB,0CAAqB,CAAA;IACrB,kDAA6B,CAAA;IAC7B,8CAAyB,CAAA;IACzB,0CAAqB,CAAA;IACrB,sCAAiB,CAAA;AACnB,CAAC,EAXW,iBAAiB,KAAjB,iBAAiB,QAW5B;AAED,MAAM,CAAN,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,uCAAmB,CAAA;IACnB,6CAAyB,CAAA;IACzB,+BAAW,CAAA;AACb,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B;AAED,MAAM,CAAN,IAAY,SAeX;AAfD,WAAY,SAAS;IACnB,uCAA0B,CAAA;IAC1B,uCAA0B,CAAA;IAC1B,6CAAgC,CAAA;IAChC,2CAA8B,CAAA;IAC9B,uCAA0B,CAAA;IAC1B,mCAAsB,CAAA;IACtB,6CAAgC,CAAA;IAChC,mDAAsC,CAAA;IACtC,uDAA0C,CAAA;IAC1C,wBAAW,CAAA;IACX,2CAA8B,CAAA;IAC9B,2CAA8B,CAAA;IAC9B,qCAAwB,CAAA;IACxB,6CAAgC,CAAA;AAClC,CAAC,EAfW,SAAS,KAAT,SAAS,QAepB;AAED,MAAM,CAAN,IAAY,QAIX;AAJD,WAAY,QAAQ;IAClB,oCAAwB,CAAA;IACxB,8BAAkB,CAAA;IAClB,gCAAoB,CAAA;AACtB,CAAC,EAJW,QAAQ,KAAR,QAAQ,QAInB;AAED,MAAM,CAAN,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,wBAAW,CAAA;IACX,0BAAa,CAAA;AACf,CAAC,EAHW,SAAS,KAAT,SAAS,QAGpB;AA+JD,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,UAAkB,EAAE,UAAkB;QAChD,KAAK,CACH,WAAW,UAAU,sBAAsB,UAAU,iCAAiC,CACvF,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED,2DAA2D;AAC3D,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorParser.d.ts","sourceRoot":"","sources":["../../../src/utils/errorParser.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAoBlE;AACD,eAAe,WAAW,CAAC"}
@@ -1,11 +1,8 @@
1
1
  export function errorParser(error, prefix) {
2
2
  let parsedError;
3
- // Parse the error - always create a new Error to avoid readonly issues
3
+ // Parse the error
4
4
  if (error instanceof Error) {
5
- // Create a new Error to avoid modifying potentially frozen Zod errors
6
- parsedError = new Error(error.message);
7
- parsedError.name = error.name;
8
- parsedError.stack = error.stack;
5
+ parsedError = error;
9
6
  }
10
7
  else if (typeof error === "string") {
11
8
  parsedError = new Error(error);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorParser.js","sourceRoot":"","sources":["../../../src/utils/errorParser.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW,CAAC,KAAc,EAAE,MAAe;IACzD,IAAI,WAAkB,CAAC;IAEvB,kBAAkB;IAClB,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,WAAW,GAAG,KAAK,CAAC;IACtB,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrC,WAAW,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;SAAM,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QACpE,WAAW,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,WAAW,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,6BAA6B;IAC7B,IAAI,MAAM,EAAE,CAAC;QACX,WAAW,CAAC,OAAO,GAAG,GAAG,MAAM,KAAK,WAAW,CAAC,OAAO,EAAE,CAAC;IAC5D,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AACD,eAAe,WAAW,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { IPlugin } from "../types";
2
+ export type ValidationResult = {
3
+ valid: true;
4
+ plugin: IPlugin;
5
+ } | {
6
+ valid: false;
7
+ error: string;
8
+ };
9
+ /**
10
+ * Validates if an unknown object is a valid plugin.
11
+ * Handles:
12
+ * 1. Class instances (Standard)
13
+ * 2. Plain objects
14
+ * 3. Class Constructors (instantiates them) // TODO if we want to move that logic here
15
+ */
16
+ export declare function validatePlugin(candidate: unknown): ValidationResult;
17
+ //# sourceMappingURL=pluginValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pluginValidator.d.ts","sourceRoot":"","sources":["../../../src/utils/pluginValidator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AA2BxC,MAAM,MAAM,gBAAgB,GACxB;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAChC;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpC;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,OAAO,GAAG,gBAAgB,CAqBnE"}
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  import { errorParser } from "../utils/errorParser";
3
- export const PluginSchema = z.object({
3
+ // Internal schemas - NOT exported to avoid Zod type leakage
4
+ const pluginSchemaDefinition = z.object({
4
5
  name: z.string().min(1, "Plugin name is required"),
5
6
  version: z.string().min(1, "Plugin version is required").default("1.0.0"),
6
7
  description: z.string().optional(),
@@ -16,16 +17,8 @@ export const PluginSchema = z.object({
16
17
  onLoad: z.function(),
17
18
  onStarted: z.function().optional(),
18
19
  onUnload: z.function().optional(),
19
- getSharedApi: z.function().optional(),
20
20
  setup: z.function().optional(),
21
21
  });
22
- // We can have a stricter schema for the full IPlugin
23
- export const StrictPluginSchema = z.object({
24
- name: z.string(),
25
- version: z.string(),
26
- onLoad: z.function(),
27
- onUnload: z.function(),
28
- });
29
22
  /**
30
23
  * Validates if an unknown object is a valid plugin.
31
24
  * Handles:
@@ -57,17 +50,21 @@ export function validatePlugin(candidate) {
57
50
  }
58
51
  }
59
52
  function validatePluginInstance(obj) {
60
- const result = PluginSchema.safeParse(obj);
53
+ const result = pluginSchemaDefinition.safeParse(obj);
61
54
  if (!result.success) {
62
55
  return {
63
56
  valid: false,
64
57
  error: result.error.issues.map((e) => `${e.path.join('.')}: ${e.message}`).join(', ')
65
58
  };
66
59
  }
67
- // Cast to IPlugin (fill in missing optional methods if needed)
68
- const plugin = result.data;
69
- // Shim onUnload if missing (since we made it optional in schema but it is required in IPlugin interface usually,
70
- // though we can be lenient)
60
+ // Use the original object to preserve prototype and 'this' context,
61
+ // but we can use the parsed data to ensure defaults are applied if we want.
62
+ // For now, let's just return the original object casted to IPlugin.
63
+ const plugin = obj;
64
+ // Apply defaults/formatting from Zod if needed (optional)
65
+ if (!plugin.version && result.data.version)
66
+ plugin.version = result.data.version;
67
+ // Shim onUnload if missing
71
68
  if (!plugin.onUnload) {
72
69
  plugin.onUnload = () => { };
73
70
  }