every-plugin 0.0.6 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +1 -265
  2. package/dist/errors.d.ts +4 -4
  3. package/dist/index.d.ts +2 -4
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +1 -3
  6. package/dist/plugin.d.ts +74 -34
  7. package/dist/plugin.d.ts.map +1 -1
  8. package/dist/plugin.js +100 -17
  9. package/dist/runtime/errors.d.ts +38 -34
  10. package/dist/runtime/errors.d.ts.map +1 -1
  11. package/dist/runtime/errors.js +2 -0
  12. package/dist/runtime/index.d.ts +7 -4
  13. package/dist/runtime/index.d.ts.map +1 -1
  14. package/dist/runtime/index.js +5 -10
  15. package/dist/runtime/services/module-federation.service.d.ts +5 -6
  16. package/dist/runtime/services/module-federation.service.d.ts.map +1 -1
  17. package/dist/runtime/services/module-federation.service.js +53 -15
  18. package/dist/runtime/services/plugin.service.d.ts +13 -6
  19. package/dist/runtime/services/plugin.service.d.ts.map +1 -1
  20. package/dist/runtime/services/plugin.service.js +237 -94
  21. package/dist/runtime/services/secrets.service.d.ts.map +1 -1
  22. package/dist/runtime/services.d.ts +0 -1
  23. package/dist/runtime/services.d.ts.map +1 -1
  24. package/dist/runtime/services.js +0 -1
  25. package/dist/runtime/streaming/index.d.ts +4 -0
  26. package/dist/runtime/streaming/index.d.ts.map +1 -0
  27. package/dist/runtime/streaming/index.js +2 -0
  28. package/dist/runtime/streaming/state-effects.d.ts +28 -0
  29. package/dist/runtime/streaming/state-effects.d.ts.map +1 -0
  30. package/dist/runtime/streaming/state-effects.js +30 -0
  31. package/dist/runtime/streaming/streaming.d.ts +8 -0
  32. package/dist/runtime/streaming/streaming.d.ts.map +1 -0
  33. package/dist/runtime/streaming/streaming.js +107 -0
  34. package/dist/runtime/streaming/types.d.ts +19 -0
  35. package/dist/runtime/streaming/types.d.ts.map +1 -0
  36. package/dist/runtime/streaming/types.js +1 -0
  37. package/dist/runtime/test-utils.d.ts +3 -0
  38. package/dist/runtime/test-utils.d.ts.map +1 -0
  39. package/dist/runtime/test-utils.js +7 -0
  40. package/dist/runtime/types.d.ts +1 -1
  41. package/dist/runtime/types.d.ts.map +1 -1
  42. package/dist/runtime/validation.d.ts +2 -7
  43. package/dist/runtime/validation.d.ts.map +1 -1
  44. package/dist/testing/index.d.ts +25 -0
  45. package/dist/testing/index.d.ts.map +1 -0
  46. package/dist/testing/index.js +40 -0
  47. package/dist/testing/mocks/module-federation.service.d.ts +8 -0
  48. package/dist/testing/mocks/module-federation.service.d.ts.map +1 -0
  49. package/dist/testing/mocks/module-federation.service.js +35 -0
  50. package/package.json +27 -6
  51. package/dist/runtime/runtime.d.ts +0 -58
  52. package/dist/runtime/runtime.d.ts.map +0 -1
  53. package/dist/runtime/runtime.js +0 -75
  54. package/dist/runtime/runtime.test.d.ts +0 -2
  55. package/dist/runtime/runtime.test.d.ts.map +0 -1
  56. package/dist/runtime/runtime.test.js +0 -308
  57. package/dist/runtime/services/plugin-cache.service.d.ts +0 -18
  58. package/dist/runtime/services/plugin-cache.service.d.ts.map +0 -1
  59. package/dist/runtime/services/plugin-cache.service.js +0 -55
  60. package/dist/source.d.ts +0 -198
  61. package/dist/source.d.ts.map +0 -1
  62. package/dist/source.js +0 -90
@@ -1,14 +1,17 @@
1
- import { Effect, Layer, ManagedRuntime } from "effect";
1
+ import { Effect, Layer, ManagedRuntime, type Stream } from "effect";
2
2
  import type { z } from "zod";
3
- import type { PluginRuntimeError } from "./errors";
3
+ import { type Plugin } from "../plugin";
4
+ import { PluginRuntimeError } from "./errors";
5
+ import { type StreamingOptions } from "./streaming";
4
6
  import type { AnyPlugin, InitializedPlugin, PluginConstructor, PluginInstance, PluginRuntimeConfig } from "./types";
5
7
  export interface IPluginRuntime {
6
8
  readonly loadPlugin: (pluginId: string) => Effect.Effect<PluginConstructor, PluginRuntimeError>;
7
9
  readonly instantiatePlugin: <T extends AnyPlugin>(ctor: PluginConstructor) => Effect.Effect<PluginInstance<T>, PluginRuntimeError>;
8
10
  readonly initializePlugin: <T extends AnyPlugin>(instance: PluginInstance<T>, config: z.infer<T["configSchema"]>) => Effect.Effect<InitializedPlugin<T>, PluginRuntimeError>;
9
11
  readonly executePlugin: <T extends AnyPlugin>(initializedPlugin: InitializedPlugin<T>, input: z.infer<T["inputSchema"]>) => Effect.Effect<z.infer<T["outputSchema"]>, PluginRuntimeError>;
10
- readonly createPlugin: <T extends AnyPlugin>(pluginId: string, config: z.infer<T["configSchema"]>) => Effect.Effect<InitializedPlugin<T>, PluginRuntimeError>;
11
- readonly shutdown: () => Effect.Effect<void, never>;
12
+ readonly usePlugin: <T extends AnyPlugin>(pluginId: string, config: z.infer<T["configSchema"]>) => Effect.Effect<InitializedPlugin<T>, PluginRuntimeError>;
13
+ readonly streamPlugin: <T extends Plugin, TInput extends z.infer<T["inputSchema"]> = z.infer<T["inputSchema"]>, TItem = unknown, TPluginState extends z.infer<T["stateSchema"]> = z.infer<T["stateSchema"]>>(pluginId: string, config: z.infer<T["configSchema"]>, input: TInput, options?: StreamingOptions<TItem, TPluginState>) => Effect.Effect<Stream.Stream<TItem, PluginRuntimeError>, PluginRuntimeError>;
14
+ readonly shutdown: () => Effect.Effect<void, never, never>;
12
15
  }
13
16
  declare const PluginRuntime_base: import("effect/Context").TagClass<PluginRuntime, "PluginRuntime", IPluginRuntime> & Effect.Tag.Proxy<PluginRuntime, IPluginRuntime> & {
14
17
  use: <X>(body: (_: IPluginRuntime) => X) => [X] extends [Effect.Effect<infer A, infer E, infer R>] ? Effect.Effect<A, E, PluginRuntime | R> : [X] extends [PromiseLike<infer A_1>] ? Effect.Effect<A_1, import("effect/Cause").UnknownException, PluginRuntime> : Effect.Effect<X, never, PluginRuntime>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAOnD,OAAO,KAAK,EACX,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,MAAM,SAAS,CAAC;AAuBjB,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,UAAU,EAAE,CACpB,QAAQ,EAAE,MAAM,KACZ,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;IAC1D,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CAAC,SAAS,SAAS,EAC/C,IAAI,EAAE,iBAAiB,KACnB,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;IAC1D,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC,SAAS,SAAS,EAC9C,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,EAC3B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,KAC9B,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;IAC7D,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC,SAAS,SAAS,EAC3C,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC,EACvC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,KAC5B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;IACnE,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,SAAS,SAAS,EAC1C,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,KAC9B,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;IAC7D,QAAQ,CAAC,QAAQ,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;CACpD;;;;AAED,qBAAa,aAAc,SAAQ,kBAGhC;IACF,MAAM,CAAC,IAAI,GAAI,QAAQ,mBAAmB,8CA4CxC;CACF;AAED,eAAO,MAAM,mBAAmB,GAAI,QAAQ,mBAAmB,wDACf,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Effect, Layer, ManagedRuntime } from "effect";
2
2
  import { PluginLoggerTag } from "../plugin";
3
- import { ModuleFederationService, PluginCacheService, PluginService, SecretsService, } from "./services";
3
+ import { ModuleFederationService, PluginService, SecretsService, } from "./services";
4
4
  // Default logger implementation
5
5
  const createDefaultLogger = () => ({
6
6
  logInfo: (message, context) => Effect.logInfo(message).pipe(Effect.annotateLogs({ source: "plugin", context })),
@@ -19,16 +19,11 @@ export class PluginRuntime extends Effect.Tag("PluginRuntime")() {
19
19
  instantiatePlugin: pluginService.instantiatePlugin,
20
20
  initializePlugin: pluginService.initializePlugin,
21
21
  executePlugin: pluginService.executePlugin,
22
- createPlugin: (pluginId, config) => Effect.gen(function* () {
23
- const ctor = yield* pluginService.loadPlugin(pluginId);
24
- const instance = yield* pluginService.instantiatePlugin(ctor);
25
- return yield* pluginService.initializePlugin(instance, config);
26
- }),
27
- shutdown: () => Effect.sync(() => {
28
- // Cleanup handled by Layer disposal
29
- }),
22
+ usePlugin: (pluginId, config) => pluginService.usePlugin(pluginId, config),
23
+ streamPlugin: (pluginId, config, input, options) => pluginService.streamPlugin(pluginId, config, input, options),
24
+ shutdown: () => pluginService.cleanup(),
30
25
  };
31
- })).pipe(Layer.provide(PluginService.Live(config.registry, secrets).pipe(Layer.provide(Layer.mergeAll(ModuleFederationService.Live, PluginCacheService.Live.pipe(Layer.provide(ModuleFederationService.Live)), SecretsService.Live(secrets), Layer.succeed(PluginLoggerTag, logger))))));
26
+ })).pipe(Layer.provide(PluginService.Live(config.registry, secrets).pipe(Layer.provide(Layer.mergeAll(ModuleFederationService.Live, SecretsService.Live(secrets), Layer.succeed(PluginLoggerTag, logger))))));
32
27
  };
33
28
  }
34
29
  export const createPluginRuntime = (config) => ManagedRuntime.make(PluginRuntime.Live(config));
@@ -1,17 +1,16 @@
1
- import * as EffectModule from "effect";
2
- import { Effect } from "effect";
1
+ import { Effect, Layer } from "effect";
3
2
  import { ModuleFederationError } from "../errors";
4
3
  export interface IModuleFederationService {
5
4
  readonly registerRemote: (pluginId: string, url: string) => Effect.Effect<void, ModuleFederationError>;
6
5
  readonly loadRemoteConstructor: (pluginId: string, url: string) => Effect.Effect<any, ModuleFederationError>;
7
6
  }
8
- declare const ModuleFederationService_base: EffectModule.Context.TagClass<ModuleFederationService, "ModuleFederationService", IModuleFederationService> & EffectModule.Effect.Tag.Proxy<ModuleFederationService, IModuleFederationService> & {
9
- use: <X>(body: (_: IModuleFederationService) => X) => [X] extends [EffectModule.Effect.Effect<infer A, infer E, infer R>] ? EffectModule.Effect.Effect<A, E, R | ModuleFederationService> : [X] extends [PromiseLike<infer A_1>] ? EffectModule.Effect.Effect<A_1, EffectModule.Cause.UnknownException, ModuleFederationService> : EffectModule.Effect.Effect<X, never, ModuleFederationService>;
7
+ declare const ModuleFederationService_base: import("effect/Context").TagClass<ModuleFederationService, "ModuleFederationService", IModuleFederationService> & Effect.Tag.Proxy<ModuleFederationService, IModuleFederationService> & {
8
+ use: <X>(body: (_: IModuleFederationService) => X) => [X] extends [Effect.Effect<infer A, infer E, infer R>] ? Effect.Effect<A, E, R | ModuleFederationService> : [X] extends [PromiseLike<infer A_1>] ? Effect.Effect<A_1, import("effect/Cause").UnknownException, ModuleFederationService> : Effect.Effect<X, never, ModuleFederationService>;
10
9
  };
11
10
  export declare class ModuleFederationService extends ModuleFederationService_base {
12
- static Live: EffectModule.Layer.Layer<ModuleFederationService, never, never>;
11
+ static Live: Layer.Layer<ModuleFederationService, never, never>;
13
12
  }
14
13
  export declare const ModuleFederationServiceTag: typeof ModuleFederationService;
15
- export declare const ModuleFederationServiceLive: EffectModule.Layer.Layer<ModuleFederationService, never, never>;
14
+ export declare const ModuleFederationServiceLive: Layer.Layer<ModuleFederationService, never, never>;
16
15
  export {};
17
16
  //# sourceMappingURL=module-federation.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"module-federation.service.d.ts","sourceRoot":"","sources":["../../../src/runtime/services/module-federation.service.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,YAAY,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,MAAM,EAAS,MAAM,QAAQ,CAAC;AAEvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAElD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,cAAc,EAAE,CACvB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,KACR,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;IAChD,QAAQ,CAAC,qBAAqB,EAAE,CAC9B,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,KACR,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;CAChD;;;;AAyCD,qBAAa,uBAAwB,SAAQ,4BAG1C;IACD,MAAM,CAAC,IAAI,kEAqFT;CACH;AAED,eAAO,MAAM,0BAA0B,gCAA0B,CAAC;AAClE,eAAO,MAAM,2BAA2B,iEAA+B,CAAC"}
1
+ {"version":3,"file":"module-federation.service.d.ts","sourceRoot":"","sources":["../../../src/runtime/services/module-federation.service.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AASlD,MAAM,WAAW,wBAAwB;IACxC,QAAQ,CAAC,cAAc,EAAE,CACxB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,KACP,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;IAChD,QAAQ,CAAC,qBAAqB,EAAE,CAC/B,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,KACP,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;CAC/C;;;;AAyED,qBAAa,uBAAwB,SAAQ,4BAES;IACrD,MAAM,CAAC,IAAI,qDA4FT;CACF;AAED,eAAO,MAAM,0BAA0B,gCAA0B,CAAC;AAClE,eAAO,MAAM,2BAA2B,oDAA+B,CAAC"}
@@ -1,10 +1,14 @@
1
1
  import { betterFetch } from "@better-fetch/fetch";
2
2
  import { createInstance, getInstance, } from "@module-federation/enhanced/runtime";
3
3
  import { setGlobalFederationInstance } from "@module-federation/runtime-core";
4
- import * as EffectModule from "effect";
5
4
  import { Effect, Layer } from "effect";
6
- import * as ZodModule from "zod";
7
5
  import { ModuleFederationError } from "../errors";
6
+ const normalizePluginId = (pluginId) => {
7
+ return pluginId
8
+ .toLowerCase()
9
+ .replace(/^@/, "")
10
+ .replace(/\//g, "_");
11
+ };
8
12
  const createModuleFederationInstance = Effect.cached(Effect.sync(() => {
9
13
  try {
10
14
  let instance = getInstance();
@@ -16,18 +20,50 @@ const createModuleFederationInstance = Effect.cached(Effect.sync(() => {
16
20
  effect: {
17
21
  shareConfig: {
18
22
  singleton: true,
19
- requiredVersion: "^3.17.6",
20
- eager: true,
23
+ requiredVersion: "^3.17.0",
24
+ eager: false,
25
+ strictVersion: false,
21
26
  },
22
- lib: () => EffectModule,
23
27
  },
24
28
  zod: {
25
29
  shareConfig: {
26
30
  singleton: true,
27
- requiredVersion: "^4.0.8",
28
- eager: true,
31
+ requiredVersion: "^4.0.0",
32
+ eager: false,
33
+ strictVersion: false,
34
+ },
35
+ },
36
+ "@orpc/contract": {
37
+ shareConfig: {
38
+ singleton: true,
39
+ requiredVersion: "^1.8.0",
40
+ eager: false,
41
+ strictVersion: false,
42
+ },
43
+ },
44
+ "@orpc/server": {
45
+ shareConfig: {
46
+ singleton: true,
47
+ requiredVersion: "^1.8.0",
48
+ eager: false,
49
+ strictVersion: false,
50
+ },
51
+ },
52
+ "@module-federation/enhanced": {
53
+ shareConfig: {
54
+ singleton: true,
55
+ requiredVersion: "^0.18.0",
56
+ eager: false,
57
+ strictVersion: false,
58
+ },
59
+ },
60
+ "@module-federation/runtime-core": {
61
+ shareConfig: {
62
+ singleton: true,
63
+ requiredVersion: "^0.18.0",
64
+ eager: false,
65
+ strictVersion: false,
29
66
  },
30
- lib: () => ZodModule,
31
67
  },
32
68
  },
33
69
  });
@@ -44,6 +80,7 @@ export class ModuleFederationService extends Effect.Tag("ModuleFederationService
44
80
  const mf = yield* Effect.flatten(createModuleFederationInstance);
45
81
  return {
46
82
  registerRemote: (pluginId, url) => Effect.gen(function* () {
83
+ console.log(`[MF] Registering ${pluginId}`);
47
84
  // Check if remote is available
48
85
  const { error } = yield* Effect.tryPromise({
49
86
  try: () => betterFetch(url, { method: "HEAD" }),
@@ -54,17 +91,18 @@ export class ModuleFederationService extends Effect.Tag("ModuleFederationService
54
91
  }),
55
92
  });
56
93
  if (error) {
94
+ console.log(`[MF] ❌ Remote not available for ${pluginId}`);
57
95
  return yield* Effect.fail(new ModuleFederationError({
58
96
  pluginId,
59
97
  remoteUrl: url,
60
- cause: new Error(`Remote not available: ${error}`),
98
+ cause: new Error(`Remote not available (${url}): ${JSON.stringify(error)}`),
61
99
  }));
62
100
  }
63
101
  // Register remote
64
102
  const remoteName = pluginId
65
103
  .toLowerCase()
66
- .replace("@", "")
67
- .replace("/", "_");
104
+ .replace(/^@/, "")
105
+ .replace(/\//g, "_");
68
106
  yield* Effect.try({
69
107
  try: () => mf.registerRemotes([{ name: remoteName, entry: url }]),
70
108
  catch: (error) => new ModuleFederationError({
@@ -73,12 +111,11 @@ export class ModuleFederationService extends Effect.Tag("ModuleFederationService
73
111
  cause: error instanceof Error ? error : new Error(String(error)),
74
112
  }),
75
113
  });
114
+ console.log(`[MF] ✅ Registered ${pluginId}`);
76
115
  }),
77
116
  loadRemoteConstructor: (pluginId, url) => Effect.gen(function* () {
78
- const remoteName = pluginId
79
- .toLowerCase()
80
- .replace("@", "")
81
- .replace("/", "_");
117
+ const remoteName = normalizePluginId(pluginId);
118
+ console.log(`[MF] Loading remote ${remoteName}`);
82
119
  const modulePath = `${remoteName}/plugin`;
83
120
  return yield* Effect.tryPromise({
84
121
  try: async () => {
@@ -92,6 +129,7 @@ export class ModuleFederationService extends Effect.Tag("ModuleFederationService
92
129
  if (!Constructor || typeof Constructor !== "function") {
93
130
  throw new Error(`No valid constructor found. Container type: ${typeof container}`);
94
131
  }
132
+ console.log(`[MF] ✅ Loaded constructor for ${pluginId}`);
95
133
  return Constructor;
96
134
  },
97
135
  catch: (error) => new ModuleFederationError({
@@ -1,22 +1,29 @@
1
- import { Effect, Layer } from "effect";
2
- import { PluginLoggerTag, type PluginRegistry } from "../../plugin";
1
+ import { Effect, Layer, type Stream } from "effect";
2
+ import type { z } from "zod";
3
+ import { type Plugin, PluginLoggerTag, type PluginRegistry } from "../../plugin";
3
4
  import { PluginRuntimeError } from "../errors";
5
+ import { type StreamingOptions } from "../streaming";
4
6
  import type { AnyPlugin, InitializedPlugin, PluginConstructor, PluginInstance, SecretsConfig } from "../types";
5
- import { PluginCacheService } from "./plugin-cache.service";
7
+ import { ModuleFederationService } from "./module-federation.service";
6
8
  import { SecretsService } from "./secrets.service";
7
9
  export interface IPluginService {
8
10
  readonly loadPlugin: (pluginId: string) => Effect.Effect<PluginConstructor, PluginRuntimeError>;
9
11
  readonly instantiatePlugin: <T extends AnyPlugin>(pluginConstructor: PluginConstructor) => Effect.Effect<PluginInstance<T>, PluginRuntimeError>;
10
12
  readonly initializePlugin: <T extends AnyPlugin>(pluginInstance: PluginInstance<T>, config: unknown) => Effect.Effect<InitializedPlugin<T>, PluginRuntimeError>;
11
- readonly executePlugin: <T extends AnyPlugin>(initializedPlugin: InitializedPlugin<T>, input: unknown) => Effect.Effect<any, PluginRuntimeError>;
13
+ readonly executePlugin: <T extends AnyPlugin>(initializedPlugin: InitializedPlugin<T>, input: z.infer<T["inputSchema"]>) => Effect.Effect<z.infer<T["outputSchema"]>, PluginRuntimeError>;
14
+ readonly usePlugin: <T extends AnyPlugin>(pluginId: string, config: unknown) => Effect.Effect<InitializedPlugin<T>, PluginRuntimeError>;
15
+ readonly streamPlugin: <T extends Plugin, TInput extends z.infer<T["inputSchema"]> = z.infer<T["inputSchema"]>, TItem = unknown, TPluginState extends z.infer<T["stateSchema"]> = z.infer<T["stateSchema"]>>(pluginId: string, config: z.infer<T["configSchema"]>, input: TInput, options?: StreamingOptions<TItem, TPluginState>) => Effect.Effect<Stream.Stream<TItem, PluginRuntimeError>, PluginRuntimeError>;
16
+ readonly shutdownPlugin: (plugin: InitializedPlugin<AnyPlugin>) => Effect.Effect<void, PluginRuntimeError>;
17
+ readonly clearCache: () => Effect.Effect<void, never>;
18
+ readonly cleanup: () => Effect.Effect<void, never>;
12
19
  }
13
20
  declare const PluginService_base: import("effect/Context").TagClass<PluginService, "PluginService", IPluginService> & Effect.Tag.Proxy<PluginService, IPluginService> & {
14
21
  use: <X>(body: (_: IPluginService) => X) => [X] extends [Effect.Effect<infer A, infer E, infer R>] ? Effect.Effect<A, E, R | PluginService> : [X] extends [PromiseLike<infer A_1>] ? Effect.Effect<A_1, import("effect/Cause").UnknownException, PluginService> : Effect.Effect<X, never, PluginService>;
15
22
  };
16
23
  export declare class PluginService extends PluginService_base {
17
- static Live: (registry: PluginRegistry, secrets: SecretsConfig) => Layer.Layer<PluginService, never, PluginLoggerTag | PluginCacheService | SecretsService>;
24
+ static Live: (registry: PluginRegistry, secrets: SecretsConfig) => Layer.Layer<PluginService, never, PluginLoggerTag | SecretsService | ModuleFederationService>;
18
25
  }
19
26
  export declare const PluginServiceTag: typeof PluginService;
20
- export declare const PluginServiceLive: (registry: PluginRegistry, secrets: SecretsConfig) => Layer.Layer<PluginService, never, PluginLoggerTag | PluginCacheService | SecretsService>;
27
+ export declare const PluginServiceLive: (registry: PluginRegistry, secrets: SecretsConfig) => Layer.Layer<PluginService, never, PluginLoggerTag | SecretsService | ModuleFederationService>;
21
28
  export {};
22
29
  //# sourceMappingURL=plugin.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.service.d.ts","sourceRoot":"","sources":["../../../src/runtime/services/plugin.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,MAAM,EAAE,KAAK,EAAY,MAAM,QAAQ,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,EACV,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,aAAa,EACd,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,CACnB,QAAQ,EAAE,MAAM,KACb,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;IAC1D,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CAAC,SAAS,SAAS,EAC9C,iBAAiB,EAAE,iBAAiB,KACjC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;IAC1D,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC,SAAS,SAAS,EAC7C,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC,EACjC,MAAM,EAAE,OAAO,KACZ,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;IAC7D,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC,SAAS,SAAS,EAC1C,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC,EACvC,KAAK,EAAE,OAAO,KACX,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;CAC7C;;;;AAED,qBAAa,aAAc,SAAQ,kBAGhC;IACD,MAAM,CAAC,IAAI,GAAI,UAAU,cAAc,EAAE,SAAS,aAAa,8FA0O3D;CACL;AAED,eAAO,MAAM,gBAAgB,sBAAgB,CAAC;AAC9C,eAAO,MAAM,iBAAiB,aA9OH,cAAc,WAAW,aAAa,6FA8Od,CAAC"}
1
+ {"version":3,"file":"plugin.service.d.ts","sourceRoot":"","sources":["../../../src/runtime/services/plugin.service.ts"],"names":[],"mappings":"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"}