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
@@ -1,44 +1,61 @@
1
- import {} from "../types";
2
- import { checkNetworkPermission, checkPermission as checkGeneralPermission } from "../utils/security";
3
- export function createPluginContext(manager, plugin, resources, storage, config) {
1
+ import { checkNetworkPermission, checkPermission as checkGeneralPermission, } from "../utils/security";
2
+ import { logger } from "../logger";
3
+ export function createPluginContext(manager, plugin, resources, storage) {
4
4
  // We get the resource container directly.
5
5
  const pluginResources = resources.get(plugin.name);
6
6
  if (!pluginResources)
7
7
  throw new Error("Resources not initialized for plugin");
8
8
  const checkPermission = (perm, url) => {
9
- if (perm === 'network' && url) {
9
+ if (perm === "network" && url) {
10
10
  checkNetworkPermission(plugin.name, plugin.permissions, plugin.allowedDomains, url);
11
11
  }
12
- else if (perm === 'filesystem' || perm === 'env') {
12
+ else if (perm === "filesystem" || perm === "env") {
13
13
  checkGeneralPermission(plugin.name, plugin.permissions, perm);
14
14
  }
15
15
  };
16
16
  return {
17
17
  manager: manager,
18
18
  storage,
19
- config,
19
+ get config() {
20
+ return manager.getPluginConfig(plugin.name);
21
+ },
20
22
  // Legacy support
21
23
  emit: (event, payload) => manager.emit(event, payload),
22
24
  on: (event, callback) => {
23
25
  manager.on(event, callback);
24
- pluginResources.eventListeners.push({ event: event, listener: callback });
26
+ pluginResources.eventListeners.push({
27
+ event: event,
28
+ listener: callback,
29
+ });
25
30
  },
26
31
  events: {
27
32
  emit: (event, payload) => manager.emit(event, payload),
28
33
  on: (event, callback) => {
29
34
  manager.on(event, callback);
30
- pluginResources.eventListeners.push({ event: event, listener: callback });
31
- }
35
+ pluginResources.eventListeners.push({
36
+ event: event,
37
+ listener: callback,
38
+ });
39
+ },
32
40
  },
33
- getPlugin: (name) => {
41
+ getPlugin: async (name) => {
34
42
  const p = manager.getPlugin(name);
35
- return p?.getSharedApi ? p.getSharedApi() : undefined;
43
+ if (!p)
44
+ return undefined;
45
+ // Try to get the registered API first
46
+ const api = manager.getPluginApi(name);
47
+ if (api)
48
+ return api;
49
+ // Fallback to the plugin itself
50
+ // Note: This is an intentional type assertion. When no API is registered,
51
+ // we return the plugin instance itself. Users should register APIs via
52
+ // context.registerApi() for proper type safety.
53
+ return p;
36
54
  },
37
- log: {
38
- info: (msg, ...args) => console.log(`[${plugin.name}] info: ${msg}`, ...args),
39
- warn: (msg, ...args) => console.warn(`[${plugin.name}] warn: ${msg}`, ...args),
40
- error: (msg, ...args) => console.error(`[${plugin.name}] error: ${msg}`, ...args),
55
+ registerApi: (api) => {
56
+ manager.registerApi(plugin.name, api);
41
57
  },
58
+ log: logger.getLogger(plugin.name),
42
59
  createWorker: (url, options) => {
43
60
  // Use the manager's worker factory to allow proper mocking in tests
44
61
  const workerFactory = manager.getWorkerFactory();
@@ -64,19 +81,19 @@ export function createPluginContext(manager, plugin, resources, storage, config)
64
81
  }
65
82
  });
66
83
  w.addEventListener?.("error", (err) => {
67
- console.error(`[${plugin.name}] Worker error:`, err.message);
84
+ logger.getLogger(plugin.name).error(`Worker error:`, err.message);
68
85
  });
69
86
  resources.get(plugin.name)?.workers.push(w);
70
87
  return w;
71
88
  },
72
89
  setTimeout: (callback, delay, ...args) => {
73
90
  const id = setTimeout(callback, delay, ...args);
74
- resources.get(plugin.name)?.timers.push({ id, type: 'timeout' });
91
+ resources.get(plugin.name)?.timers.push({ id, type: "timeout" });
75
92
  return id;
76
93
  },
77
94
  setInterval: (callback, delay, ...args) => {
78
95
  const id = setInterval(callback, delay, ...args);
79
- resources.get(plugin.name)?.timers.push({ id, type: 'interval' });
96
+ resources.get(plugin.name)?.timers.push({ id, type: "interval" });
80
97
  return id;
81
98
  },
82
99
  clearTimeout: (id) => {
@@ -88,22 +105,30 @@ export function createPluginContext(manager, plugin, resources, storage, config)
88
105
  },
89
106
  network: {
90
107
  fetch: (input, init) => {
91
- const urlStr = typeof input === 'string' ? input : input instanceof URL ? input.toString() : input.url;
92
- checkPermission('network', urlStr);
108
+ const urlStr = typeof input === "string"
109
+ ? input
110
+ : input instanceof URL
111
+ ? input.toString()
112
+ : input.url;
113
+ checkPermission("network", urlStr);
93
114
  return fetch(input, init);
94
- }
115
+ },
95
116
  },
96
117
  file: (path) => {
97
- checkPermission('filesystem');
118
+ checkPermission("filesystem");
98
119
  return Bun.file(path);
99
120
  },
100
121
  get env() {
101
- checkPermission('env');
122
+ checkPermission("env");
102
123
  return new Proxy(process.env, {
103
- get(target, prop) { return Reflect.get(target, prop); },
104
- set() { throw new Error("Plugins cannot modify environment variables."); }
124
+ get(target, prop) {
125
+ return Reflect.get(target, prop);
126
+ },
127
+ set() {
128
+ throw new Error("Plugins cannot modify environment variables.");
129
+ },
105
130
  });
106
- }
131
+ },
107
132
  };
108
133
  }
109
134
  //# sourceMappingURL=ContextFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextFactory.js","sourceRoot":"","sources":["../../../src/managers/ContextFactory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DependencyManager.d.ts","sourceRoot":"","sources":["../../../src/managers/DependencyManager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAIxC,qBAAa,iBAAiB;IAC1B;;;OAGG;IACH,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE;IAkF/C,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAcnF"}
@@ -1,4 +1,5 @@
1
- import semver from "semver";
1
+ import * as semver from "semver";
2
+ import { logger } from "../logger";
2
3
  export class DependencyManager {
3
4
  /**
4
5
  * Topologically sort plugins based on dependencies.
@@ -34,6 +35,7 @@ export class DependencyManager {
34
35
  // For pure topological sort of a batch, we just sort the batch.
35
36
  // If A depends on B, and B is not in batch, we assume B is effectively "root" relative to this batch
36
37
  // (i.e., we don't add an edge to it within this graph).
38
+ logger.getLogger("DependencyManager").warn(`Plugin ${p.name} depends on missing plugin: ${depName}`);
37
39
  }
38
40
  }
39
41
  }
@@ -41,12 +43,12 @@ export class DependencyManager {
41
43
  // Output logic: Dependency -> Dependent
42
44
  // Using Kahn's algorithm or similar.
43
45
  const inDegree = new Map();
44
- for (const name of pluginMap.keys())
46
+ for (const name of Array.from(pluginMap.keys()))
45
47
  inDegree.set(name, 0);
46
48
  const adj = new Map();
47
- for (const name of pluginMap.keys())
49
+ for (const name of Array.from(pluginMap.keys()))
48
50
  adj.set(name, []);
49
- for (const [pName, deps] of g.entries()) {
51
+ for (const [pName, deps] of Array.from(g.entries())) {
50
52
  for (const depName of deps) {
51
53
  // depName -> pName
52
54
  if (adj.has(depName)) {
@@ -56,7 +58,7 @@ export class DependencyManager {
56
58
  }
57
59
  }
58
60
  const queue = [];
59
- for (const [name, deg] of inDegree.entries()) {
61
+ for (const [name, deg] of Array.from(inDegree.entries())) {
60
62
  if (deg === 0)
61
63
  queue.push(name);
62
64
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DependencyManager.js","sourceRoot":"","sources":["../../../src/managers/DependencyManager.ts"],"names":[],"mappings":"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"}
@@ -3,10 +3,13 @@ import type { BunPlugin } from "bun";
3
3
  export declare class HooksManager {
4
4
  private onResolveHooks;
5
5
  private onLoadHooks;
6
+ private onStartHooks;
6
7
  registerOnResolve(filter: RegExp, callback: OnResolveCallback, pluginName: string, order?: HookOrder): void;
7
8
  registerOnLoad(filter: RegExp, callback: OnLoadCallback, pluginName: string, order?: HookOrder): void;
9
+ registerOnStart(callback: () => void | Promise<void>, pluginName: string): void;
8
10
  getHookCount(type: HookType): number;
9
11
  cleanup(pluginName: string): void;
12
+ runOnStart(): Promise<void>;
10
13
  runOnResolve(args: OnResolveArgs): Promise<{
11
14
  path: string;
12
15
  namespace?: string;
@@ -15,7 +18,7 @@ export declare class HooksManager {
15
18
  contents?: string;
16
19
  loader?: string;
17
20
  } | null>;
18
- getBuilder(pluginName: string): PluginBuilder;
21
+ getBuilder(pluginName: string, config: Record<string, any>): PluginBuilder;
19
22
  toBunPlugin(): BunPlugin;
20
23
  }
21
24
  //# sourceMappingURL=HooksManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HooksManager.d.ts","sourceRoot":"","sources":["../../../src/managers/HooksManager.ts"],"names":[],"mappings":"AACA,OAAO,EACH,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,UAAU,EAEf,KAAK,aAAa,EAClB,SAAS,EACT,QAAQ,EACX,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,SAAS,EAAU,MAAM,KAAK,CAAC;AAG7C,qBAAa,YAAY;IACrB,OAAO,CAAC,cAAc,CAAyC;IAC/D,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,YAAY,CAAsE;IAE1F,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS;IAMpG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS;IAI9F,eAAe,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM;IAIxE,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM;IAOpC,OAAO,CAAC,UAAU,EAAE,MAAM;IAMpB,UAAU;IAUV,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAmBvF,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAgCzF,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,aAAa;IA+B1E,WAAW,IAAI,SAAS;CAsB3B"}
@@ -1,7 +1,9 @@
1
1
  import { HookOrder, HookType } from "../types";
2
+ import { logger } from "../logger";
2
3
  export class HooksManager {
3
4
  onResolveHooks = [];
4
5
  onLoadHooks = [];
6
+ onStartHooks = [];
5
7
  registerOnResolve(filter, callback, pluginName, order) {
6
8
  // Performance wrapper could be applied here or by caller.
7
9
  // For simplicity, we store as is.
@@ -10,12 +12,32 @@ export class HooksManager {
10
12
  registerOnLoad(filter, callback, pluginName, order) {
11
13
  this.onLoadHooks.push({ filter, callback, pluginName, order });
12
14
  }
15
+ registerOnStart(callback, pluginName) {
16
+ this.onStartHooks.push({ callback, pluginName });
17
+ }
13
18
  getHookCount(type) {
14
- return type === HookType.ON_RESOLVE ? this.onResolveHooks.length : this.onLoadHooks.length;
19
+ if (type === HookType.ON_RESOLVE)
20
+ return this.onResolveHooks.length;
21
+ if (type === HookType.ON_LOAD)
22
+ return this.onLoadHooks.length;
23
+ if (type === HookType.ON_START)
24
+ return this.onStartHooks.length;
25
+ return 0;
15
26
  }
16
27
  cleanup(pluginName) {
17
28
  this.onResolveHooks = this.onResolveHooks.filter(h => h.pluginName !== pluginName);
18
29
  this.onLoadHooks = this.onLoadHooks.filter(h => h.pluginName !== pluginName);
30
+ this.onStartHooks = this.onStartHooks.filter(h => h.pluginName !== pluginName);
31
+ }
32
+ async runOnStart() {
33
+ for (const hook of this.onStartHooks) {
34
+ try {
35
+ await hook.callback();
36
+ }
37
+ catch (e) {
38
+ logger.getLogger("HooksManager").error(`Error in onStart hook from ${hook.pluginName}:`, e);
39
+ }
40
+ }
19
41
  }
20
42
  async runOnResolve(args) {
21
43
  const sortedHooks = [...this.onResolveHooks].sort((a, b) => {
@@ -30,7 +52,7 @@ export class HooksManager {
30
52
  return result;
31
53
  }
32
54
  catch (e) {
33
- console.error(`Error in onResolve hook from ${hook.pluginName}:`, e);
55
+ logger.getLogger("HooksManager").error(`Error in onResolve hook from ${hook.pluginName}:`, e);
34
56
  }
35
57
  }
36
58
  }
@@ -60,32 +82,38 @@ export class HooksManager {
60
82
  }
61
83
  }
62
84
  catch (e) {
63
- console.error(`Error in onLoad hook from ${hook.pluginName}:`, e);
85
+ logger.getLogger("HooksManager").error(`Error in onLoad hook from ${hook.pluginName}:`, e);
64
86
  }
65
87
  }
66
88
  }
67
89
  return currentResult;
68
90
  }
69
- getBuilder(pluginName) {
91
+ getBuilder(pluginName, config) {
70
92
  return {
71
- onResolve: (filter, callback, options) => {
93
+ config,
94
+ onStart: (callback) => {
95
+ this.registerOnStart(callback, pluginName);
96
+ },
97
+ onResolve: (filterOrConfig, callback, options) => {
98
+ const filter = filterOrConfig instanceof RegExp ? filterOrConfig : filterOrConfig.filter;
72
99
  const perfCallback = async (args) => {
73
100
  const start = performance.now();
74
101
  const res = await callback(args);
75
102
  const dur = performance.now() - start;
76
103
  if (dur > 100)
77
- console.warn(`[Performance] ${pluginName} onResolve took ${dur.toFixed(2)}ms`);
104
+ logger.getLogger("HooksManager").warn(`[Performance] ${pluginName} onResolve took ${dur.toFixed(2)}ms`);
78
105
  return res;
79
106
  };
80
107
  this.registerOnResolve(filter, perfCallback, pluginName, options?.order);
81
108
  },
82
- onLoad: (filter, callback, options) => {
109
+ onLoad: (filterOrConfig, callback, options) => {
110
+ const filter = filterOrConfig instanceof RegExp ? filterOrConfig : filterOrConfig.filter;
83
111
  const perfCallback = async (args) => {
84
112
  const start = performance.now();
85
113
  const res = await callback(args);
86
114
  const dur = performance.now() - start;
87
115
  if (dur > 100)
88
- console.warn(`[Performance] ${pluginName} onLoad took ${dur.toFixed(2)}ms`);
116
+ logger.getLogger("HooksManager").warn(`[Performance] ${pluginName} onLoad took ${dur.toFixed(2)}ms`);
89
117
  return res;
90
118
  };
91
119
  this.registerOnLoad(filter, perfCallback, pluginName, options?.order);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HooksManager.js","sourceRoot":"","sources":["../../../src/managers/HooksManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResourceManager.d.ts","sourceRoot":"","sources":["../../../src/managers/ResourceManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AAG/C,qBAAa,eAAe;IACxB,OAAO,CAAC,SAAS,CAA0C;IAE3D,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc;IAMxC,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAInD,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE;QAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,KAAK,IAAI,CAAA;KAAE;IAoB/E,eAAe;;;;;;CAkBlB"}
@@ -1,4 +1,4 @@
1
- import {} from "../types";
1
+ import { logger } from "../logger";
2
2
  export class ResourceManager {
3
3
  resources = new Map();
4
4
  init(pluginName) {
@@ -13,7 +13,7 @@ export class ResourceManager {
13
13
  const res = this.resources.get(pluginName);
14
14
  if (res) {
15
15
  for (const worker of res.workers) {
16
- console.log(`Terminating worker for plugin ${pluginName}`);
16
+ logger.getLogger("ResourceManager").info(`Terminating worker for plugin ${pluginName}`);
17
17
  worker.terminate();
18
18
  }
19
19
  for (const timer of res.timers) {
@@ -34,7 +34,7 @@ export class ResourceManager {
34
34
  let totalWorkers = 0;
35
35
  let totalTimers = 0;
36
36
  let totalListeners = 0;
37
- for (const res of this.resources.values()) {
37
+ for (const res of Array.from(this.resources.values())) {
38
38
  totalWorkers += res.workers.length;
39
39
  totalTimers += res.timers.length;
40
40
  totalListeners += res.eventListeners.length;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResourceManager.js","sourceRoot":"","sources":["../../../src/managers/ResourceManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,MAAM,OAAO,eAAe;IAChB,SAAS,GAAgC,IAAI,GAAG,EAAE,CAAC;IAE3D,IAAI,CAAC,UAAkB;QACnB,MAAM,GAAG,GAAmB,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;QAC5E,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACpC,OAAO,GAAG,CAAC;IACf,CAAC;IAED,GAAG,CAAC,UAAkB;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,CAAC,UAAkB,EAAE,YAAmD;QAC3E,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,GAAG,EAAE,CAAC;YACN,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAC/B,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,iCAAiC,UAAU,EAAE,CAAC,CAAC;gBACxF,MAAM,CAAC,SAAS,EAAE,CAAC;YACvB,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;oBAAE,YAAY,CAAC,KAAK,CAAC,EAAY,CAAC,CAAC;gBAC/D,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;oBAAE,aAAa,CAAC,KAAK,CAAC,EAAY,CAAC,CAAC;YACrE,CAAC;YACD,IAAI,YAAY,EAAE,CAAC;gBACf,KAAK,MAAM,QAAQ,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;oBACxC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACxD,CAAC;YACL,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACtC,CAAC;IACL,CAAC;IAED,eAAe;QACX,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,cAAc,GAAG,CAAC,CAAC;QAEvB,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;YACpD,YAAY,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;YACnC,WAAW,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;YACjC,cAAc,IAAI,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC;QAChD,CAAC;QAED,OAAO;YACH,YAAY;YACZ,WAAW;YACX,cAAc;YACd,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;SACnC,CAAC;IACN,CAAC;CACJ"}
@@ -0,0 +1,75 @@
1
+ import type { IPluginStorage } from "../types";
2
+ /**
3
+ * JsonPluginStorage con soporte singleton para evitar múltiples instancias del mismo plugin.
4
+ * Usa un Map estático para almacenar las instancias por nombre de plugin y basePath.
5
+ */
6
+ export declare class JsonPluginStorage implements IPluginStorage {
7
+ private static instances;
8
+ private filePath;
9
+ private data;
10
+ private lastModified;
11
+ private watcher;
12
+ private watchDebounceTimer;
13
+ private onDataChangeCallbacks;
14
+ /**
15
+ * Obtiene una instancia singleton de JsonPluginStorage.
16
+ * Si la instancia ya existe para el plugin dado, la reutiliza.
17
+ * @param basePath Ruta base del storage
18
+ * @param pluginName Nombre del plugin
19
+ * @returns Instancia de JsonPluginStorage
20
+ */
21
+ static getInstance(basePath: string, pluginName: string): JsonPluginStorage;
22
+ /**
23
+ * Obtiene todas las instancias registradas.
24
+ */
25
+ static getAllInstances(): Map<string, JsonPluginStorage>;
26
+ /**
27
+ * Obtiene una instancia específica por nombre de plugin.
28
+ * @param pluginName Nombre del plugin
29
+ * @returns Instancia o undefined si no existe
30
+ */
31
+ static getInstanceByName(pluginName: string): JsonPluginStorage | undefined;
32
+ /**
33
+ * Elimina una instancia específica.
34
+ * @param basePath Ruta base del storage
35
+ * @param pluginName Nombre del plugin
36
+ */
37
+ static removeInstance(basePath: string, pluginName: string): void;
38
+ /**
39
+ * Limpia todas las instancias (útil para testing).
40
+ */
41
+ static clearAllInstances(): void;
42
+ private constructor();
43
+ private ensureLoaded;
44
+ private save;
45
+ get<T>(key: string, defaultValue?: T): Promise<T | undefined>;
46
+ set<T>(key: string, value: T): Promise<void>;
47
+ delete(key: string): Promise<void>;
48
+ clear(): Promise<void>;
49
+ reload(): Promise<void>;
50
+ /**
51
+ * init watch for storage file changes
52
+ * When the file changes externally, the data will be reloaded automatically.
53
+ * @param debounceMs Time to wait in ms before reloading (default: 100ms)
54
+ */
55
+ startWatching(debounceMs?: number): void;
56
+ /**
57
+ * stop watching for storage file changes
58
+ */
59
+ stopWatching(): void;
60
+ /**
61
+ * register a callback that will be called when the storage data changes.
62
+ * @param callback function to call when the data changes
63
+ * @returns function to cancel the subscription
64
+ */
65
+ onDataChange(callback: (data: Record<string, any>) => void): () => void;
66
+ /**
67
+ * notify all subscribers about data changes.
68
+ */
69
+ private notifyDataChange;
70
+ /**
71
+ * check if the storage is being watched.
72
+ */
73
+ isWatching(): boolean;
74
+ }
75
+ //# sourceMappingURL=JsonPluginStorage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonPluginStorage.d.ts","sourceRoot":"","sources":["../../../src/storage/JsonPluginStorage.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG/C;;;GAGG;AACH,qBAAa,iBAAkB,YAAW,cAAc;IACtD,OAAO,CAAC,MAAM,CAAC,SAAS,CAA6C;IAErE,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,IAAI,CAAoC;IAChD,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,OAAO,CAAyC;IACxD,OAAO,CAAC,kBAAkB,CAA8C;IACxE,OAAO,CAAC,qBAAqB,CAAkD;IAE/E;;;;;;OAMG;IACH,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,iBAAiB;IAc3E;;OAEG;IACH,MAAM,CAAC,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAIxD;;;;OAIG;IACH,MAAM,CAAC,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAS3E;;;;OAIG;IACH,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAYjE;;OAEG;IACH,MAAM,CAAC,iBAAiB,IAAI,IAAI;IAShC,OAAO;YAIO,YAAY;YA0BZ,IAAI;IAeZ,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAK7D,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ5C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQlC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B;;;;OAIG;IACH,aAAa,CAAC,UAAU,GAAE,MAAY,GAAG,IAAI;IA2C7C;;OAEG;IACH,YAAY,IAAI,IAAI;IAapB;;;;OAIG;IACH,YAAY,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI;IAWvE;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;OAEG;IACH,UAAU,IAAI,OAAO;CAGtB"}