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.
- package/README.md +1 -265
- package/dist/errors.d.ts +4 -4
- package/dist/index.d.ts +2 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -3
- package/dist/plugin.d.ts +74 -34
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +100 -17
- package/dist/runtime/errors.d.ts +38 -34
- package/dist/runtime/errors.d.ts.map +1 -1
- package/dist/runtime/errors.js +2 -0
- package/dist/runtime/index.d.ts +7 -4
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +5 -10
- package/dist/runtime/services/module-federation.service.d.ts +5 -6
- package/dist/runtime/services/module-federation.service.d.ts.map +1 -1
- package/dist/runtime/services/module-federation.service.js +53 -15
- package/dist/runtime/services/plugin.service.d.ts +13 -6
- package/dist/runtime/services/plugin.service.d.ts.map +1 -1
- package/dist/runtime/services/plugin.service.js +237 -94
- package/dist/runtime/services/secrets.service.d.ts.map +1 -1
- package/dist/runtime/services.d.ts +0 -1
- package/dist/runtime/services.d.ts.map +1 -1
- package/dist/runtime/services.js +0 -1
- package/dist/runtime/streaming/index.d.ts +4 -0
- package/dist/runtime/streaming/index.d.ts.map +1 -0
- package/dist/runtime/streaming/index.js +2 -0
- package/dist/runtime/streaming/state-effects.d.ts +28 -0
- package/dist/runtime/streaming/state-effects.d.ts.map +1 -0
- package/dist/runtime/streaming/state-effects.js +30 -0
- package/dist/runtime/streaming/streaming.d.ts +8 -0
- package/dist/runtime/streaming/streaming.d.ts.map +1 -0
- package/dist/runtime/streaming/streaming.js +107 -0
- package/dist/runtime/streaming/types.d.ts +19 -0
- package/dist/runtime/streaming/types.d.ts.map +1 -0
- package/dist/runtime/streaming/types.js +1 -0
- package/dist/runtime/test-utils.d.ts +3 -0
- package/dist/runtime/test-utils.d.ts.map +1 -0
- package/dist/runtime/test-utils.js +7 -0
- package/dist/runtime/types.d.ts +1 -1
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/validation.d.ts +2 -7
- package/dist/runtime/validation.d.ts.map +1 -1
- package/dist/testing/index.d.ts +25 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +40 -0
- package/dist/testing/mocks/module-federation.service.d.ts +8 -0
- package/dist/testing/mocks/module-federation.service.d.ts.map +1 -0
- package/dist/testing/mocks/module-federation.service.js +35 -0
- package/package.json +27 -6
- package/dist/runtime/runtime.d.ts +0 -58
- package/dist/runtime/runtime.d.ts.map +0 -1
- package/dist/runtime/runtime.js +0 -75
- package/dist/runtime/runtime.test.d.ts +0 -2
- package/dist/runtime/runtime.test.d.ts.map +0 -1
- package/dist/runtime/runtime.test.js +0 -308
- package/dist/runtime/services/plugin-cache.service.d.ts +0 -18
- package/dist/runtime/services/plugin-cache.service.d.ts.map +0 -1
- package/dist/runtime/services/plugin-cache.service.js +0 -55
- package/dist/source.d.ts +0 -198
- package/dist/source.d.ts.map +0 -1
- package/dist/source.js +0 -90
package/dist/runtime/index.d.ts
CHANGED
|
@@ -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
|
|
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
|
|
11
|
-
readonly
|
|
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;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Effect, Layer, ManagedRuntime } from "effect";
|
|
2
2
|
import { PluginLoggerTag } from "../plugin";
|
|
3
|
-
import { ModuleFederationService,
|
|
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
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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,
|
|
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
|
|
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:
|
|
9
|
-
use: <X>(body: (_: IModuleFederationService) => X) => [X] extends [
|
|
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:
|
|
11
|
+
static Live: Layer.Layer<ModuleFederationService, never, never>;
|
|
13
12
|
}
|
|
14
13
|
export declare const ModuleFederationServiceTag: typeof ModuleFederationService;
|
|
15
|
-
export declare const ModuleFederationServiceLive:
|
|
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,
|
|
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.
|
|
20
|
-
eager:
|
|
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.
|
|
28
|
-
eager:
|
|
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
|
-
|
|
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 {
|
|
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 {
|
|
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:
|
|
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 |
|
|
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 |
|
|
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":"
|
|
1
|
+
{"version":3,"file":"plugin.service.d.ts","sourceRoot":"","sources":["../../../src/runtime/services/plugin.service.ts"],"names":[],"mappings":"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"}
|