every-plugin 0.4.17 → 0.5.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 (198) hide show
  1. package/dist/{chunk-zltIcp7o.cjs → _virtual/rolldown_runtime.cjs} +3 -18
  2. package/dist/{chunk-QQAxy9l9.mjs → _virtual/rolldown_runtime.mjs} +1 -1
  3. package/dist/build/rspack/dev-server-middleware.cjs +201 -0
  4. package/dist/build/rspack/dev-server-middleware.cjs.map +1 -0
  5. package/dist/build/rspack/dev-server-middleware.mjs +200 -0
  6. package/dist/build/rspack/dev-server-middleware.mjs.map +1 -0
  7. package/dist/build/rspack/index.cjs +2 -362
  8. package/dist/build/rspack/index.d.cts +2 -20
  9. package/dist/build/rspack/index.d.mts +2 -20
  10. package/dist/build/rspack/index.mjs +2 -360
  11. package/dist/build/rspack/module-federation.cjs +47 -0
  12. package/dist/build/rspack/module-federation.cjs.map +1 -0
  13. package/dist/build/rspack/module-federation.mjs +47 -0
  14. package/dist/build/rspack/module-federation.mjs.map +1 -0
  15. package/dist/build/rspack/plugin.cjs +90 -0
  16. package/dist/build/rspack/plugin.cjs.map +1 -0
  17. package/dist/build/rspack/plugin.d.cts +20 -0
  18. package/dist/build/rspack/plugin.d.cts.map +1 -0
  19. package/dist/build/rspack/plugin.d.mts +20 -0
  20. package/dist/build/rspack/plugin.d.mts.map +1 -0
  21. package/dist/build/rspack/plugin.mjs +89 -0
  22. package/dist/build/rspack/plugin.mjs.map +1 -0
  23. package/dist/build/rspack/utils.cjs +41 -0
  24. package/dist/build/rspack/utils.cjs.map +1 -0
  25. package/dist/build/rspack/utils.mjs +38 -0
  26. package/dist/build/rspack/utils.mjs.map +1 -0
  27. package/dist/errors.cjs +62 -3
  28. package/dist/errors.cjs.map +1 -0
  29. package/dist/errors.d.cts +75 -3
  30. package/dist/errors.d.cts.map +1 -0
  31. package/dist/errors.d.mts +75 -3
  32. package/dist/errors.d.mts.map +1 -0
  33. package/dist/errors.mjs +62 -3
  34. package/dist/errors.mjs.map +1 -0
  35. package/dist/index.cjs +8 -55
  36. package/dist/index.d.cts +6 -5
  37. package/dist/index.d.mts +6 -5
  38. package/dist/index.mjs +5 -51
  39. package/dist/orpc.cjs +1 -1
  40. package/dist/{package-D4mbTFY1.cjs → package.cjs} +22 -7
  41. package/dist/package.cjs.map +1 -0
  42. package/dist/{package-B0vvsKXO.mjs → package.mjs} +22 -5
  43. package/dist/package.mjs.map +1 -0
  44. package/dist/plugin.cjs +48 -0
  45. package/dist/plugin.cjs.map +1 -0
  46. package/dist/plugin.d.cts +62 -0
  47. package/dist/plugin.d.cts.map +1 -0
  48. package/dist/plugin.d.mts +62 -0
  49. package/dist/plugin.d.mts.map +1 -0
  50. package/dist/plugin.mjs +47 -0
  51. package/dist/plugin.mjs.map +1 -0
  52. package/dist/runtime/errors.cjs +45 -0
  53. package/dist/runtime/errors.cjs.map +1 -0
  54. package/dist/runtime/errors.d.cts +27 -0
  55. package/dist/runtime/errors.d.cts.map +1 -0
  56. package/dist/runtime/errors.d.mts +27 -0
  57. package/dist/runtime/errors.d.mts.map +1 -0
  58. package/dist/runtime/errors.mjs +41 -0
  59. package/dist/runtime/errors.mjs.map +1 -0
  60. package/dist/runtime/index.cjs +157 -5
  61. package/dist/runtime/index.cjs.map +1 -0
  62. package/dist/runtime/index.d.cts +43 -5
  63. package/dist/runtime/index.d.cts.map +1 -0
  64. package/dist/runtime/index.d.mts +43 -5
  65. package/dist/runtime/index.d.mts.map +1 -0
  66. package/dist/runtime/index.mjs +155 -4
  67. package/dist/runtime/index.mjs.map +1 -0
  68. package/dist/runtime/services/module-federation.service.cjs +143 -0
  69. package/dist/runtime/services/module-federation.service.cjs.map +1 -0
  70. package/dist/runtime/services/module-federation.service.d.cts +15 -0
  71. package/dist/runtime/services/module-federation.service.d.cts.map +1 -0
  72. package/dist/runtime/services/module-federation.service.d.mts +15 -0
  73. package/dist/runtime/services/module-federation.service.d.mts.map +1 -0
  74. package/dist/runtime/services/module-federation.service.mjs +143 -0
  75. package/dist/runtime/services/module-federation.service.mjs.map +1 -0
  76. package/dist/runtime/services/normalize.cjs +22 -2
  77. package/dist/runtime/services/normalize.cjs.map +1 -0
  78. package/dist/runtime/services/normalize.d.cts +21 -2
  79. package/dist/runtime/services/normalize.d.cts.map +1 -0
  80. package/dist/runtime/services/normalize.d.mts +21 -2
  81. package/dist/runtime/services/normalize.d.mts.map +1 -0
  82. package/dist/runtime/services/normalize.mjs +21 -2
  83. package/dist/runtime/services/normalize.mjs.map +1 -0
  84. package/dist/runtime/services/plugin-lifecycle.service.cjs +33 -0
  85. package/dist/runtime/services/plugin-lifecycle.service.cjs.map +1 -0
  86. package/dist/runtime/services/plugin-lifecycle.service.d.cts +17 -0
  87. package/dist/runtime/services/plugin-lifecycle.service.d.cts.map +1 -0
  88. package/dist/runtime/services/plugin-lifecycle.service.d.mts +17 -0
  89. package/dist/runtime/services/plugin-lifecycle.service.d.mts.map +1 -0
  90. package/dist/runtime/services/plugin-lifecycle.service.mjs +32 -0
  91. package/dist/runtime/services/plugin-lifecycle.service.mjs.map +1 -0
  92. package/dist/runtime/services/plugin-loader.service.cjs +125 -0
  93. package/dist/runtime/services/plugin-loader.service.cjs.map +1 -0
  94. package/dist/runtime/services/plugin-loader.service.d.cts +54 -0
  95. package/dist/runtime/services/plugin-loader.service.d.cts.map +1 -0
  96. package/dist/runtime/services/plugin-loader.service.d.mts +54 -0
  97. package/dist/runtime/services/plugin-loader.service.d.mts.map +1 -0
  98. package/dist/runtime/services/plugin-loader.service.mjs +121 -0
  99. package/dist/runtime/services/plugin-loader.service.mjs.map +1 -0
  100. package/dist/runtime/services/plugin.service.cjs +33 -0
  101. package/dist/runtime/services/plugin.service.cjs.map +1 -0
  102. package/dist/runtime/services/plugin.service.d.cts +42 -0
  103. package/dist/runtime/services/plugin.service.d.cts.map +1 -0
  104. package/dist/runtime/services/plugin.service.d.mts +42 -0
  105. package/dist/runtime/services/plugin.service.d.mts.map +1 -0
  106. package/dist/runtime/services/plugin.service.mjs +32 -0
  107. package/dist/runtime/services/plugin.service.mjs.map +1 -0
  108. package/dist/runtime/services/secrets.service.cjs +50 -0
  109. package/dist/runtime/services/secrets.service.cjs.map +1 -0
  110. package/dist/runtime/services/secrets.service.d.cts +16 -0
  111. package/dist/runtime/services/secrets.service.d.cts.map +1 -0
  112. package/dist/runtime/services/secrets.service.d.mts +16 -0
  113. package/dist/runtime/services/secrets.service.d.mts.map +1 -0
  114. package/dist/runtime/services/secrets.service.mjs +48 -0
  115. package/dist/runtime/services/secrets.service.mjs.map +1 -0
  116. package/dist/runtime/validation.cjs +18 -0
  117. package/dist/runtime/validation.cjs.map +1 -0
  118. package/dist/runtime/validation.mjs +17 -0
  119. package/dist/runtime/validation.mjs.map +1 -0
  120. package/dist/testing/index.cjs +33 -55
  121. package/dist/testing/index.cjs.map +1 -1
  122. package/dist/testing/index.d.cts +28 -33
  123. package/dist/testing/index.d.cts.map +1 -1
  124. package/dist/testing/index.d.mts +28 -33
  125. package/dist/testing/index.d.mts.map +1 -1
  126. package/dist/testing/index.mjs +34 -54
  127. package/dist/testing/index.mjs.map +1 -1
  128. package/dist/types.cjs +0 -0
  129. package/dist/types.d.cts +261 -0
  130. package/dist/types.d.cts.map +1 -0
  131. package/dist/types.d.mts +261 -0
  132. package/dist/types.d.mts.map +1 -0
  133. package/dist/types.mjs +1 -0
  134. package/dist/zod-core.cjs +9 -0
  135. package/dist/zod-core.d.cts +1 -0
  136. package/dist/zod-core.d.mts +1 -0
  137. package/dist/zod-core.mjs +3 -0
  138. package/dist/zod.cjs +13 -1
  139. package/dist/zod.cjs.map +1 -0
  140. package/dist/zod.d.cts +8 -2
  141. package/dist/zod.d.cts.map +1 -0
  142. package/dist/zod.d.mts +8 -2
  143. package/dist/zod.d.mts.map +1 -0
  144. package/dist/zod.mjs +9 -2
  145. package/dist/zod.mjs.map +1 -0
  146. package/package.json +17 -2
  147. package/dist/build/rspack/index.cjs.map +0 -1
  148. package/dist/build/rspack/index.d.cts.map +0 -1
  149. package/dist/build/rspack/index.d.mts.map +0 -1
  150. package/dist/build/rspack/index.mjs.map +0 -1
  151. package/dist/errors-9sNpYLv5.d.mts +0 -75
  152. package/dist/errors-9sNpYLv5.d.mts.map +0 -1
  153. package/dist/errors-CVnoPl9v.cjs +0 -68
  154. package/dist/errors-CVnoPl9v.cjs.map +0 -1
  155. package/dist/errors-D7keKf7a.mjs +0 -63
  156. package/dist/errors-D7keKf7a.mjs.map +0 -1
  157. package/dist/errors-DKPPPYYT.d.cts +0 -75
  158. package/dist/errors-DKPPPYYT.d.cts.map +0 -1
  159. package/dist/fetch-8DauUFDh.mjs +0 -335
  160. package/dist/fetch-8DauUFDh.mjs.map +0 -1
  161. package/dist/fetch-CrBvwsZ4.cjs +0 -336
  162. package/dist/fetch-CrBvwsZ4.cjs.map +0 -1
  163. package/dist/index-Coz54d1B.d.mts +0 -387
  164. package/dist/index-Coz54d1B.d.mts.map +0 -1
  165. package/dist/index-G63gBZIY.d.cts +0 -386
  166. package/dist/index-G63gBZIY.d.cts.map +0 -1
  167. package/dist/index.cjs.map +0 -1
  168. package/dist/index.mjs.map +0 -1
  169. package/dist/normalize-BW7kk8Lk.d.cts +0 -21
  170. package/dist/normalize-BW7kk8Lk.d.cts.map +0 -1
  171. package/dist/normalize-D4Qh0wVk.cjs +0 -28
  172. package/dist/normalize-D4Qh0wVk.cjs.map +0 -1
  173. package/dist/normalize-D7nae0Hn.mjs +0 -22
  174. package/dist/normalize-D7nae0Hn.mjs.map +0 -1
  175. package/dist/normalize-eB_j86fm.d.mts +0 -21
  176. package/dist/normalize-eB_j86fm.d.mts.map +0 -1
  177. package/dist/package-B0vvsKXO.mjs.map +0 -1
  178. package/dist/package-D4mbTFY1.cjs.map +0 -1
  179. package/dist/plugins-C6MGKdD-.mjs +0 -790
  180. package/dist/plugins-C6MGKdD-.mjs.map +0 -1
  181. package/dist/plugins-DNaNtkG7.cjs +0 -791
  182. package/dist/plugins-DNaNtkG7.cjs.map +0 -1
  183. package/dist/runtime-BTFJzoBu.cjs +0 -541
  184. package/dist/runtime-BTFJzoBu.cjs.map +0 -1
  185. package/dist/runtime-BYDchBFq.mjs +0 -476
  186. package/dist/runtime-BYDchBFq.mjs.map +0 -1
  187. package/dist/standard-CkH8zNkx.mjs +0 -584
  188. package/dist/standard-CkH8zNkx.mjs.map +0 -1
  189. package/dist/standard-v75BC6Z5.cjs +0 -685
  190. package/dist/standard-v75BC6Z5.cjs.map +0 -1
  191. package/dist/zod-A7Pti5IV.d.cts +0 -4
  192. package/dist/zod-A7Pti5IV.d.cts.map +0 -1
  193. package/dist/zod-BVo51kgJ.mjs +0 -10
  194. package/dist/zod-BVo51kgJ.mjs.map +0 -1
  195. package/dist/zod-DYghWCz1.cjs +0 -14
  196. package/dist/zod-DYghWCz1.cjs.map +0 -1
  197. package/dist/zod-Zw8dlP3j.d.mts +0 -4
  198. package/dist/zod-Zw8dlP3j.d.mts.map +0 -1
@@ -1,75 +1,55 @@
1
- import { a as PluginRegistryTag, c as SecretsService, d as ModuleFederationError, i as PluginLoaderService, l as PluginLifecycleService, o as RegistryService, r as PluginService, s as SecretsConfigTag, t as PluginRuntime, u as ModuleFederationService } from "../runtime-BYDchBFq.mjs";
2
- import "../normalize-D7nae0Hn.mjs";
3
- import "../package-B0vvsKXO.mjs";
4
- import { Effect, Layer, ManagedRuntime } from "effect";
1
+ import { createPluginRuntime } from "../runtime/index.mjs";
5
2
 
6
- //#region src/testing/mocks/module-federation.service.ts
7
- const createMockModuleFederationServiceLayer = (pluginMap) => Layer.succeed(ModuleFederationService, {
8
- registerRemote: (pluginId, url) => Effect.gen(function* () {
9
- console.log(`[MOCK] registerRemote called for ${pluginId}`);
10
- if (!(pluginId in pluginMap)) return yield* Effect.fail(new ModuleFederationError({
11
- pluginId,
12
- remoteUrl: url,
13
- cause: /* @__PURE__ */ new Error(`Mock: Plugin ${pluginId} not available in test plugin map`)
14
- }));
15
- console.log(`[MOCK] registerRemote succeeded for ${pluginId}`);
16
- }),
17
- loadRemoteConstructor: (pluginId, url) => Effect.gen(function* () {
18
- console.log(`[MOCK] loadRemoteConstructor called for ${pluginId}`);
19
- const PluginConstructor = pluginMap[pluginId];
20
- if (!PluginConstructor) return yield* Effect.fail(new ModuleFederationError({
21
- pluginId,
22
- remoteUrl: url,
23
- cause: /* @__PURE__ */ new Error(`Mock: Constructor for ${pluginId} not found in test plugin map`)
24
- }));
25
- console.log(`[MOCK] loadRemoteConstructor succeeded for ${pluginId}`);
26
- return PluginConstructor;
27
- })
28
- });
29
-
30
- //#endregion
31
3
  //#region src/testing/index.ts
32
4
  /**
33
- * Creates a test layer with mock ModuleFederationService for unit testing.
34
- * This mirrors PluginService.Live() but uses mock ModuleFederationService.
5
+ * Converts old pluginMap format to new registry format
35
6
  */
36
- const createTestLayer = (config, pluginMap) => {
37
- const secrets = config.secrets || {};
38
- const contextLayer = Layer.mergeAll(Layer.succeed(PluginRegistryTag, config.registry), Layer.succeed(SecretsConfigTag, secrets));
39
- const mockModuleFederationLayer = createMockModuleFederationServiceLayer(pluginMap);
40
- const servicesLayer = Layer.mergeAll(mockModuleFederationLayer, SecretsService.Default, RegistryService.Default, PluginLifecycleService.Default).pipe(Layer.provide(contextLayer));
41
- return PluginService.Default.pipe(Layer.provide(PluginLoaderService.Default), Layer.provide(servicesLayer));
42
- };
7
+ function convertPluginMapToRegistry(oldRegistry, pluginMap) {
8
+ const registry = {};
9
+ for (const [pluginId, ctor] of Object.entries(pluginMap)) {
10
+ const oldEntry = oldRegistry[pluginId];
11
+ registry[pluginId] = {
12
+ module: ctor,
13
+ remote: oldEntry?.remoteUrl,
14
+ version: oldEntry?.version,
15
+ description: oldEntry?.description
16
+ };
17
+ }
18
+ return registry;
19
+ }
43
20
  /**
44
21
  * Creates a plugin runtime for locally available plugins (non-remote).
45
22
  * Automatically infers type bindings from the plugin map, eliminating
46
23
  * the need for manual RegistryBindings definitions.
47
24
  *
48
- * Ideal for:
49
- * - Unit and integration tests
50
- * - Local development and debugging
51
- * - Monorepo setups where all plugins are in the same workspace
52
- *
53
- * For production with remote Module Federation plugins, use createPluginRuntime().
54
- *
25
+ * @deprecated Use `createPluginRuntime` with module entries directly instead.
55
26
  * @example
56
27
  * ```ts
57
- * const pluginMap = { "my-plugin": MyPlugin } as const;
58
- * const runtime = createLocalPluginRuntime({ registry, secrets }, pluginMap);
59
- *
60
- * // Types are automatically inferred - no manual bindings needed!
61
- * const plugin = await runtime.usePlugin("my-plugin", config);
28
+ * // Old API (deprecated)
29
+ * const runtime = createLocalPluginRuntime(
30
+ * { registry: { "my-plugin": { remoteUrl: "..." } }, secrets },
31
+ * { "my-plugin": MyPlugin }
32
+ * );
33
+ *
34
+ * // New API (recommended)
35
+ * const runtime = createPluginRuntime({
36
+ * registry: { "my-plugin": { module: MyPlugin } },
37
+ * secrets
38
+ * });
62
39
  * ```
63
40
  */
64
41
  function createLocalPluginRuntime(config, pluginMap) {
65
- const layer = createTestLayer(config, pluginMap);
66
- return new PluginRuntime(ManagedRuntime.make(layer), config.registry);
42
+ return createPluginRuntime({
43
+ registry: convertPluginMapToRegistry(config.registry, pluginMap),
44
+ secrets: config.secrets,
45
+ options: config.options
46
+ });
67
47
  }
68
48
  /**
69
- * @deprecated Use `createLocalPluginRuntime` instead. This alias is kept for backward compatibility.
49
+ * @deprecated Use `createLocalPluginRuntime` or `createPluginRuntime` instead.
70
50
  */
71
51
  const createTestPluginRuntime = createLocalPluginRuntime;
72
52
 
73
53
  //#endregion
74
- export { createLocalPluginRuntime, createTestLayer, createTestPluginRuntime };
54
+ export { createLocalPluginRuntime, createTestPluginRuntime };
75
55
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../src/testing/mocks/module-federation.service.ts","../../src/testing/index.ts"],"sourcesContent":["import { Effect, Layer } from \"effect\";\nimport type { LoadedPluginWithBinding } from \"../../plugin\";\nimport { ModuleFederationError } from \"../../runtime/errors\";\nimport { ModuleFederationService } from \"../../runtime/services/module-federation.service\";\n\nexport type PluginMap = Record<string, LoadedPluginWithBinding<any, any, any, any>>;\n\nexport const createMockModuleFederationServiceLayer = (pluginMap: PluginMap) =>\n Layer.succeed(\n ModuleFederationService,\n {\n registerRemote: (pluginId: string, url: string) =>\n Effect.gen(function* () {\n console.log(`[MOCK] registerRemote called for ${pluginId}`);\n if (!(pluginId in pluginMap)) {\n return yield* Effect.fail(\n new ModuleFederationError({\n pluginId,\n remoteUrl: url,\n cause: new Error(`Mock: Plugin ${pluginId} not available in test plugin map`),\n }),\n );\n }\n console.log(`[MOCK] registerRemote succeeded for ${pluginId}`);\n }),\n\n loadRemoteConstructor: (pluginId: string, url: string) =>\n Effect.gen(function* () {\n console.log(`[MOCK] loadRemoteConstructor called for ${pluginId}`);\n const PluginConstructor = pluginMap[pluginId];\n if (!PluginConstructor) {\n return yield* Effect.fail(\n new ModuleFederationError({\n pluginId,\n remoteUrl: url,\n cause: new Error(`Mock: Constructor for ${pluginId} not found in test plugin map`),\n }),\n );\n }\n console.log(`[MOCK] loadRemoteConstructor succeeded for ${pluginId}`);\n return PluginConstructor;\n }),\n } as any\n );\n","import { Layer, ManagedRuntime } from \"effect\";\nimport { PluginRuntime } from \"../runtime\";\nimport {\n\tPluginLifecycleService,\n\tPluginLoaderService,\n\tPluginRegistryTag,\n\tPluginService,\n\tRegistryService,\n\tSecretsConfigTag,\n\tSecretsService\n} from \"../runtime/services\";\nimport type { PluginRuntimeConfig, RegisteredPlugins } from \"../types\";\nimport { createMockModuleFederationServiceLayer, type PluginMap } from \"./mocks/module-federation.service\";\n\n/**\n * Validates that all plugin map keys exist in RegisteredPlugins.\n * This ensures proper type inference for client methods.\n */\ntype ValidatePluginMap<T extends PluginMap> = {\n\t[K in keyof T]: K extends keyof RegisteredPlugins\n\t\t? T[K]\n\t\t: `❌ Plugin key \"${K & string}\" not registered in RegisteredPlugins. Add it to your types.d.ts file.`;\n};\n\n/**\n * Simplified type inference for local plugin maps.\n * Just use the constructor types directly.\n *\n * @example\n * ```ts\n * const pluginMap = { \"my-plugin\": MyPlugin } as const;\n * type MyBindings = InferBindingsFromMap<typeof pluginMap>;\n * ```\n */\nexport type InferBindingsFromMap<T extends PluginMap> = {\n\t[K in keyof T]: T[K]\n} & RegisteredPlugins;\n\n/**\n * Creates a test layer with mock ModuleFederationService for unit testing.\n * This mirrors PluginService.Live() but uses mock ModuleFederationService.\n */\nexport const createTestLayer = <R extends RegisteredPlugins = RegisteredPlugins>(\n\tconfig: PluginRuntimeConfig<R>,\n\tpluginMap: PluginMap\n) => {\n\tconst secrets = config.secrets || {};\n\n\tconst contextLayer = Layer.mergeAll(\n\t\tLayer.succeed(PluginRegistryTag, config.registry),\n\t\tLayer.succeed(SecretsConfigTag, secrets),\n\t);\n\n\tconst mockModuleFederationLayer = createMockModuleFederationServiceLayer(pluginMap);\n\n\tconst servicesLayer = Layer.mergeAll(\n\t\tmockModuleFederationLayer,\n\t\tSecretsService.Default,\n\t\tRegistryService.Default,\n\t\tPluginLifecycleService.Default,\n\t).pipe(\n\t\tLayer.provide(contextLayer)\n\t);\n\n\treturn PluginService.Default.pipe(\n\t\tLayer.provide(PluginLoaderService.Default),\n\t\tLayer.provide(servicesLayer)\n\t);\n};\n\n/**\n * Creates a plugin runtime for locally available plugins (non-remote).\n * Automatically infers type bindings from the plugin map, eliminating\n * the need for manual RegistryBindings definitions.\n *\n * Ideal for:\n * - Unit and integration tests\n * - Local development and debugging\n * - Monorepo setups where all plugins are in the same workspace\n *\n * For production with remote Module Federation plugins, use createPluginRuntime().\n *\n * @example\n * ```ts\n * const pluginMap = { \"my-plugin\": MyPlugin } as const;\n * const runtime = createLocalPluginRuntime({ registry, secrets }, pluginMap);\n *\n * // Types are automatically inferred - no manual bindings needed!\n * const plugin = await runtime.usePlugin(\"my-plugin\", config);\n * ```\n */\nexport function createLocalPluginRuntime<TMap extends PluginMap & ValidatePluginMap<TMap>>(\n\tconfig: PluginRuntimeConfig,\n\tpluginMap: TMap\n): PluginRuntime<InferBindingsFromMap<TMap>> {\n\tconst layer = createTestLayer(config, pluginMap);\n\tconst runtime = ManagedRuntime.make(layer);\n\n\treturn new PluginRuntime<InferBindingsFromMap<TMap>>(runtime, config.registry);\n}\n\n/**\n * @deprecated Use `createLocalPluginRuntime` instead. This alias is kept for backward compatibility.\n */\nexport const createTestPluginRuntime = createLocalPluginRuntime;\n\n// Re-export useful types for tests\nexport type { EveryPlugin, PluginRegistry, RegisteredPlugins } from \"../types\";\nexport type { PluginMap, PluginRuntimeConfig };\n"],"mappings":";;;;;;AAOA,MAAa,0CAA0C,cACrD,MAAM,QACJ,yBACA;CACE,iBAAiB,UAAkB,QACjC,OAAO,IAAI,aAAa;AACtB,UAAQ,IAAI,oCAAoC,WAAW;AAC3D,MAAI,EAAE,YAAY,WAChB,QAAO,OAAO,OAAO,KACnB,IAAI,sBAAsB;GACxB;GACA,WAAW;GACX,uBAAO,IAAI,MAAM,gBAAgB,SAAS,mCAAmC;GAC9E,CAAC,CACH;AAEH,UAAQ,IAAI,uCAAuC,WAAW;GAC9D;CAEJ,wBAAwB,UAAkB,QACxC,OAAO,IAAI,aAAa;AACtB,UAAQ,IAAI,2CAA2C,WAAW;EAClE,MAAM,oBAAoB,UAAU;AACpC,MAAI,CAAC,kBACH,QAAO,OAAO,OAAO,KACnB,IAAI,sBAAsB;GACxB;GACA,WAAW;GACX,uBAAO,IAAI,MAAM,yBAAyB,SAAS,+BAA+B;GACnF,CAAC,CACH;AAEH,UAAQ,IAAI,8CAA8C,WAAW;AACrE,SAAO;GACP;CACL,CACF;;;;;;;;ACDH,MAAa,mBACZ,QACA,cACI;CACJ,MAAM,UAAU,OAAO,WAAW,EAAE;CAEpC,MAAM,eAAe,MAAM,SAC1B,MAAM,QAAQ,mBAAmB,OAAO,SAAS,EACjD,MAAM,QAAQ,kBAAkB,QAAQ,CACxC;CAED,MAAM,4BAA4B,uCAAuC,UAAU;CAEnF,MAAM,gBAAgB,MAAM,SAC3B,2BACA,eAAe,SACf,gBAAgB,SAChB,uBAAuB,QACvB,CAAC,KACD,MAAM,QAAQ,aAAa,CAC3B;AAED,QAAO,cAAc,QAAQ,KAC5B,MAAM,QAAQ,oBAAoB,QAAQ,EAC1C,MAAM,QAAQ,cAAc,CAC5B;;;;;;;;;;;;;;;;;;;;;;;AAwBF,SAAgB,yBACf,QACA,WAC4C;CAC5C,MAAM,QAAQ,gBAAgB,QAAQ,UAAU;AAGhD,QAAO,IAAI,cAFK,eAAe,KAAK,MAAM,EAEoB,OAAO,SAAS;;;;;AAM/E,MAAa,0BAA0B"}
1
+ {"version":3,"file":"index.mjs","names":["registry: Record<string, PluginRegistryEntry>"],"sources":["../../src/testing/index.ts"],"sourcesContent":["import type { AnyPluginConstructor, InferRegistryFromEntries, PluginRegistryEntry, PluginRuntimeConfig } from \"../types\";\nimport { createPluginRuntime } from \"../runtime\";\nimport type { LoadedPluginWithBinding } from \"../plugin\";\n\nexport type PluginMap = Record<string, LoadedPluginWithBinding<any, any, any, any>>;\n\n/**\n * Simplified type inference for local plugin maps.\n * Just use the constructor types directly.\n *\n * @example\n * ```ts\n * const pluginMap = { \"my-plugin\": MyPlugin } as const;\n * type MyBindings = InferBindingsFromMap<typeof pluginMap>;\n * ```\n */\nexport type InferBindingsFromMap<T extends PluginMap> = {\n\t[K in keyof T]: T[K]\n};\n\n/**\n * Converts old pluginMap format to new registry format\n */\nfunction convertPluginMapToRegistry<T extends PluginMap>(\n\toldRegistry: Record<string, { remoteUrl: string; version?: string; description?: string }>,\n\tpluginMap: T\n): Record<keyof T, PluginRegistryEntry> {\n\tconst registry: Record<string, PluginRegistryEntry> = {};\n\t\n\tfor (const [pluginId, ctor] of Object.entries(pluginMap)) {\n\t\tconst oldEntry = oldRegistry[pluginId];\n\t\tregistry[pluginId] = {\n\t\t\tmodule: ctor as AnyPluginConstructor,\n\t\t\tremote: oldEntry?.remoteUrl,\n\t\t\tversion: oldEntry?.version,\n\t\t\tdescription: oldEntry?.description,\n\t\t};\n\t}\n\t\n\treturn registry as Record<keyof T, PluginRegistryEntry>;\n}\n\n/**\n * Creates a plugin runtime for locally available plugins (non-remote).\n * Automatically infers type bindings from the plugin map, eliminating\n * the need for manual RegistryBindings definitions.\n *\n * @deprecated Use `createPluginRuntime` with module entries directly instead.\n * @example\n * ```ts\n * // Old API (deprecated)\n * const runtime = createLocalPluginRuntime(\n * { registry: { \"my-plugin\": { remoteUrl: \"...\" } }, secrets },\n * { \"my-plugin\": MyPlugin }\n * );\n * \n * // New API (recommended)\n * const runtime = createPluginRuntime({\n * registry: { \"my-plugin\": { module: MyPlugin } },\n * secrets\n * });\n * ```\n */\nexport function createLocalPluginRuntime<TMap extends PluginMap>(\n\tconfig: {\n\t\tregistry: Record<string, { remoteUrl: string; version?: string; description?: string }>;\n\t\tsecrets?: Record<string, string>;\n\t\toptions?: any;\n\t},\n\tpluginMap: TMap\n) {\n\tconst newRegistry = convertPluginMapToRegistry(config.registry, pluginMap);\n\t\n\treturn createPluginRuntime({\n\t\tregistry: newRegistry,\n\t\tsecrets: config.secrets,\n\t\toptions: config.options,\n\t});\n}\n\n/**\n * @deprecated Use `createLocalPluginRuntime` or `createPluginRuntime` instead.\n */\nexport const createTestPluginRuntime = createLocalPluginRuntime;\n\nexport type { EveryPlugin, PluginRegistry, RegisteredPlugins } from \"../types\";\nexport type { PluginRuntimeConfig };\n"],"mappings":";;;;;;AAuBA,SAAS,2BACR,aACA,WACuC;CACvC,MAAMA,WAAgD,EAAE;AAExD,MAAK,MAAM,CAAC,UAAU,SAAS,OAAO,QAAQ,UAAU,EAAE;EACzD,MAAM,WAAW,YAAY;AAC7B,WAAS,YAAY;GACpB,QAAQ;GACR,QAAQ,UAAU;GAClB,SAAS,UAAU;GACnB,aAAa,UAAU;GACvB;;AAGF,QAAO;;;;;;;;;;;;;;;;;;;;;;;AAwBR,SAAgB,yBACf,QAKA,WACC;AAGD,QAAO,oBAAoB;EAC1B,UAHmB,2BAA2B,OAAO,UAAU,UAAU;EAIzE,SAAS,OAAO;EAChB,SAAS,OAAO;EAChB,CAAC;;;;;AAMH,MAAa,0BAA0B"}
package/dist/types.cjs ADDED
File without changes
@@ -0,0 +1,261 @@
1
+ import { Plugin } from "./plugin.cjs";
2
+ import { Scope } from "effect";
3
+ import { AnyContractRouter, AnySchema, InferSchemaInput, InferSchemaOutput } from "@orpc/contract";
4
+ import { Context as Context$1, Router, RouterClient } from "@orpc/server";
5
+
6
+ //#region src/types.d.ts
7
+
8
+ /**
9
+ * Registry bindings interface - populated via module augmentation
10
+ * Only needed for remote-only plugin entries.
11
+ * @example
12
+ * ```typescript
13
+ * declare module "every-plugin" {
14
+ * interface RegisteredPlugins {
15
+ * "my-plugin": typeof MyPlugin;
16
+ * }
17
+ * }
18
+ * ```
19
+ */
20
+ interface RegisteredPlugins {}
21
+ /**
22
+ * Base type for any plugin instance.
23
+ */
24
+ type AnyPlugin = Plugin<AnyContractRouter, AnySchema, AnySchema, any>;
25
+ /**
26
+ * Loaded plugin constructor with binding information
27
+ */
28
+ type AnyPluginConstructor = {
29
+ new (): AnyPlugin;
30
+ binding: {
31
+ contract: AnyContractRouter;
32
+ variables: AnySchema;
33
+ secrets: AnySchema;
34
+ context: Context$1;
35
+ };
36
+ };
37
+ /**
38
+ * Registry entry that supports both direct module imports and remote URLs
39
+ */
40
+ type PluginRegistryEntry = {
41
+ module: AnyPluginConstructor;
42
+ remote?: string;
43
+ version?: string;
44
+ description?: string;
45
+ } | {
46
+ remote: string;
47
+ version?: string;
48
+ description?: string;
49
+ };
50
+ /**
51
+ * Extract plugin constructor type from registry entry
52
+ */
53
+ type ExtractPluginType<E> = E extends {
54
+ module: infer M;
55
+ } ? M : never;
56
+ /**
57
+ * Infer registry types from plugin entries with module constructors
58
+ */
59
+ type InferRegistryFromEntries<R$1 extends Record<string, PluginRegistryEntry>> = { [K in keyof R$1]: R$1[K] extends {
60
+ module: infer M;
61
+ } ? M : K extends keyof RegisteredPlugins ? RegisteredPlugins[K] : never };
62
+ /**
63
+ * Extract contract type from plugin binding
64
+ */
65
+ type PluginContract<T> = T extends {
66
+ binding: {
67
+ contract: infer C extends AnyContractRouter;
68
+ };
69
+ } ? C : never;
70
+ /**
71
+ * Extract variables type from plugin binding
72
+ */
73
+ type PluginVariables<T> = T extends {
74
+ binding: {
75
+ variables: infer V extends AnySchema;
76
+ };
77
+ } ? V : never;
78
+ /**
79
+ * Extract secrets type from plugin binding
80
+ */
81
+ type PluginSecrets<T> = T extends {
82
+ binding: {
83
+ secrets: infer S extends AnySchema;
84
+ };
85
+ } ? S : never;
86
+ /**
87
+ * Extract context type from plugin binding
88
+ */
89
+ type PluginContext<T> = T extends {
90
+ binding: {
91
+ context: infer C extends Context$1;
92
+ };
93
+ } ? C : never;
94
+ /**
95
+ * Extract router type from plugin binding
96
+ * Uses 'any' for context to support nested router compositions
97
+ */
98
+ type PluginRouterType<T> = Router<PluginContract<T>, any>;
99
+ /**
100
+ * Extract client type from plugin binding
101
+ */
102
+ type PluginClientType<T> = RouterClient<PluginRouterType<T>>;
103
+ /**
104
+ * Extract plugin type from registered plugins by key
105
+ * @param K - The plugin key
106
+ * @param R - The registry type (defaults to RegisteredPlugins for module augmentation pattern)
107
+ */
108
+ type RegisteredPlugin<K$1 extends keyof R$1, R$1 = RegisteredPlugins> = R$1[K$1] extends {
109
+ binding: infer B;
110
+ } ? B extends {
111
+ contract: infer C extends AnyContractRouter;
112
+ variables: infer V extends AnySchema;
113
+ secrets: infer S extends AnySchema;
114
+ context: infer TContext extends Context$1;
115
+ } ? Plugin<C, V, S, TContext> : never : never;
116
+ /**
117
+ * Extract config input type from plugin binding
118
+ */
119
+ type PluginConfigInput<T> = {
120
+ variables: InferSchemaInput<PluginVariables<T>>;
121
+ secrets: InferSchemaInput<PluginSecrets<T>>;
122
+ };
123
+ /**
124
+ * Extract context type from plugin instance
125
+ */
126
+ type ContextOf<T extends AnyPlugin> = T extends Plugin<AnyContractRouter, AnySchema, AnySchema, infer TContext> ? TContext : never;
127
+ /**
128
+ * Plugin metadata for remote loading
129
+ */
130
+ type PluginMetadata = {
131
+ readonly remoteUrl: string;
132
+ readonly version?: string;
133
+ readonly description?: string;
134
+ };
135
+ /**
136
+ * Runtime registry configuration supporting both module and remote entries
137
+ */
138
+ type PluginRegistry = Record<string, PluginRegistryEntry>;
139
+ /**
140
+ * Legacy metadata-only registry (for backwards compatibility)
141
+ */
142
+ type PluginMetadataRegistry = Record<string, PluginMetadata>;
143
+ /**
144
+ * Configuration for secrets injection.
145
+ * Secrets are hydrated into plugin configs using template replacement.
146
+ */
147
+ interface SecretsConfig {
148
+ [key: string]: string;
149
+ }
150
+ /**
151
+ * Loaded plugin
152
+ */
153
+ interface LoadedPlugin<T extends AnyPlugin = AnyPlugin> {
154
+ readonly ctor: new () => T;
155
+ readonly metadata: PluginMetadata;
156
+ }
157
+ /**
158
+ * Instantiated plugin
159
+ */
160
+ interface PluginInstance<T extends AnyPlugin = AnyPlugin> {
161
+ readonly plugin: T;
162
+ readonly metadata: PluginMetadata;
163
+ }
164
+ /**
165
+ * Fully initialized plugin ready for use
166
+ */
167
+ interface InitializedPlugin<T extends AnyPlugin = AnyPlugin> {
168
+ readonly plugin: T;
169
+ readonly metadata: PluginMetadata;
170
+ readonly config: {
171
+ variables: InferSchemaOutput<T["configSchema"]["variables"]>;
172
+ secrets: InferSchemaOutput<T["configSchema"]["secrets"]>;
173
+ };
174
+ readonly context: ContextOf<T>;
175
+ readonly scope: Scope.CloseableScope;
176
+ }
177
+ /**
178
+ * Helper type to detect type errors when looking up RegisteredPlugins
179
+ */
180
+ type VerifyPluginBinding<K$1 extends keyof R$1, R$1 = RegisteredPlugins> = R$1[K$1] extends {
181
+ binding: infer B;
182
+ } ? B extends {
183
+ contract: AnyContractRouter;
184
+ variables: AnySchema;
185
+ secrets: AnySchema;
186
+ context: Context$1;
187
+ } ? true : `❌ Plugin "${K$1 & string}" is not properly registered. Ensure it extends plugin binding layout { contract, variables, secrets, context }.` : `❌ Plugin "${K$1 & string}" is not properly registered. Missing binding property.`;
188
+ /**
189
+ * Result of runtime.usePlugin() call
190
+ * @param K - The plugin key
191
+ * @param R - The registry type (defaults to RegisteredPlugins for module augmentation pattern)
192
+ */
193
+ type UsePluginResult<K$1 extends keyof R$1, R$1 = RegisteredPlugins> = VerifyPluginBinding<K$1, R$1> extends true ? {
194
+ readonly client: PluginClientType<R$1[K$1]>;
195
+ readonly router: PluginRouterType<R$1[K$1]>;
196
+ readonly metadata: PluginMetadata;
197
+ readonly initialized: InitializedPlugin<RegisteredPlugin<K$1, R$1>>;
198
+ } : VerifyPluginBinding<K$1, R$1>;
199
+ /**
200
+ * Runtime options
201
+ */
202
+ interface RuntimeOptions {
203
+ isolation?: "strict" | "shared" | "none";
204
+ memoryLimit?: string;
205
+ concurrency?: number;
206
+ resourceTimeout?: string;
207
+ debug?: boolean;
208
+ metrics?: boolean;
209
+ }
210
+ /**
211
+ * Extract registry type from runtime instance or use type directly
212
+ * This allows EveryPlugin.Infer to work with both:
213
+ * - typeof runtime (extracts registry from PluginRuntime<R> via __registryType)
214
+ * - Registry types directly
215
+ */
216
+ type RegistryOf<T> = T extends {
217
+ __registryType?: infer R;
218
+ } ? R : T;
219
+ /**
220
+ * Namespace containing type utilities for working with plugin results.
221
+ */
222
+ declare namespace EveryPlugin {
223
+ /**
224
+ * Extract plugin runtime instance type from registered plugins or runtime.
225
+ * Provides full type safety for plugin clients, routers, and metadata.
226
+ *
227
+ * @example
228
+ * ```ts
229
+ * // From RegisteredPlugins (module augmentation)
230
+ * type Plugin = EveryPlugin.Infer<"my-plugin">;
231
+ *
232
+ * // From runtime instance (when using module entries)
233
+ * const runtime = createPluginRuntime({ registry: { "my-plugin": { module: MyPlugin } } });
234
+ * type Plugin = EveryPlugin.Infer<"my-plugin", typeof runtime>;
235
+ *
236
+ * // From explicit registry type
237
+ * type Plugin = EveryPlugin.Infer<"my-plugin", MyRegistryType>;
238
+ * ```
239
+ */
240
+ type Infer<K$1 extends string, Source = RegisteredPlugins> = K$1 extends keyof RegistryOf<Source> ? UsePluginResult<K$1, RegistryOf<Source>> : never;
241
+ }
242
+ /**
243
+ * Plugin runtime configuration with support for both module and remote entries
244
+ */
245
+ interface PluginRuntimeConfig<R$1 extends Record<string, PluginRegistryEntry> = Record<string, PluginRegistryEntry>> {
246
+ registry: R$1;
247
+ secrets?: SecretsConfig;
248
+ options?: RuntimeOptions;
249
+ }
250
+ /**
251
+ * Legacy plugin runtime configuration (metadata-only registry)
252
+ * @deprecated Use PluginRuntimeConfig with module/remote entries instead
253
+ */
254
+ interface LegacyPluginRuntimeConfig {
255
+ registry: PluginMetadataRegistry;
256
+ secrets?: SecretsConfig;
257
+ options?: RuntimeOptions;
258
+ }
259
+ //#endregion
260
+ export { AnyPlugin, AnyPluginConstructor, ContextOf, EveryPlugin, ExtractPluginType, InferRegistryFromEntries, InitializedPlugin, LegacyPluginRuntimeConfig, LoadedPlugin, PluginClientType, PluginConfigInput, PluginContext, PluginContract, PluginInstance, PluginMetadata, PluginMetadataRegistry, PluginRegistry, PluginRegistryEntry, PluginRouterType, PluginRuntimeConfig, PluginSecrets, PluginVariables, RegisteredPlugin, RegisteredPlugins, RuntimeOptions, SecretsConfig, UsePluginResult };
261
+ //# sourceMappingURL=types.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.cts","names":[],"sources":["../src/types.ts"],"sourcesContent":[],"mappings":"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"}
@@ -0,0 +1,261 @@
1
+ import { Plugin } from "./plugin.mjs";
2
+ import { Scope } from "effect";
3
+ import { Context as Context$1, Router, RouterClient } from "@orpc/server";
4
+ import { AnyContractRouter, AnySchema, InferSchemaInput, InferSchemaOutput } from "@orpc/contract";
5
+
6
+ //#region src/types.d.ts
7
+
8
+ /**
9
+ * Registry bindings interface - populated via module augmentation
10
+ * Only needed for remote-only plugin entries.
11
+ * @example
12
+ * ```typescript
13
+ * declare module "every-plugin" {
14
+ * interface RegisteredPlugins {
15
+ * "my-plugin": typeof MyPlugin;
16
+ * }
17
+ * }
18
+ * ```
19
+ */
20
+ interface RegisteredPlugins {}
21
+ /**
22
+ * Base type for any plugin instance.
23
+ */
24
+ type AnyPlugin = Plugin<AnyContractRouter, AnySchema, AnySchema, any>;
25
+ /**
26
+ * Loaded plugin constructor with binding information
27
+ */
28
+ type AnyPluginConstructor = {
29
+ new (): AnyPlugin;
30
+ binding: {
31
+ contract: AnyContractRouter;
32
+ variables: AnySchema;
33
+ secrets: AnySchema;
34
+ context: Context$1;
35
+ };
36
+ };
37
+ /**
38
+ * Registry entry that supports both direct module imports and remote URLs
39
+ */
40
+ type PluginRegistryEntry = {
41
+ module: AnyPluginConstructor;
42
+ remote?: string;
43
+ version?: string;
44
+ description?: string;
45
+ } | {
46
+ remote: string;
47
+ version?: string;
48
+ description?: string;
49
+ };
50
+ /**
51
+ * Extract plugin constructor type from registry entry
52
+ */
53
+ type ExtractPluginType<E> = E extends {
54
+ module: infer M;
55
+ } ? M : never;
56
+ /**
57
+ * Infer registry types from plugin entries with module constructors
58
+ */
59
+ type InferRegistryFromEntries<R$1 extends Record<string, PluginRegistryEntry>> = { [K in keyof R$1]: R$1[K] extends {
60
+ module: infer M;
61
+ } ? M : K extends keyof RegisteredPlugins ? RegisteredPlugins[K] : never };
62
+ /**
63
+ * Extract contract type from plugin binding
64
+ */
65
+ type PluginContract<T> = T extends {
66
+ binding: {
67
+ contract: infer C extends AnyContractRouter;
68
+ };
69
+ } ? C : never;
70
+ /**
71
+ * Extract variables type from plugin binding
72
+ */
73
+ type PluginVariables<T> = T extends {
74
+ binding: {
75
+ variables: infer V extends AnySchema;
76
+ };
77
+ } ? V : never;
78
+ /**
79
+ * Extract secrets type from plugin binding
80
+ */
81
+ type PluginSecrets<T> = T extends {
82
+ binding: {
83
+ secrets: infer S extends AnySchema;
84
+ };
85
+ } ? S : never;
86
+ /**
87
+ * Extract context type from plugin binding
88
+ */
89
+ type PluginContext<T> = T extends {
90
+ binding: {
91
+ context: infer C extends Context$1;
92
+ };
93
+ } ? C : never;
94
+ /**
95
+ * Extract router type from plugin binding
96
+ * Uses 'any' for context to support nested router compositions
97
+ */
98
+ type PluginRouterType<T> = Router<PluginContract<T>, any>;
99
+ /**
100
+ * Extract client type from plugin binding
101
+ */
102
+ type PluginClientType<T> = RouterClient<PluginRouterType<T>>;
103
+ /**
104
+ * Extract plugin type from registered plugins by key
105
+ * @param K - The plugin key
106
+ * @param R - The registry type (defaults to RegisteredPlugins for module augmentation pattern)
107
+ */
108
+ type RegisteredPlugin<K$1 extends keyof R$1, R$1 = RegisteredPlugins> = R$1[K$1] extends {
109
+ binding: infer B;
110
+ } ? B extends {
111
+ contract: infer C extends AnyContractRouter;
112
+ variables: infer V extends AnySchema;
113
+ secrets: infer S extends AnySchema;
114
+ context: infer TContext extends Context$1;
115
+ } ? Plugin<C, V, S, TContext> : never : never;
116
+ /**
117
+ * Extract config input type from plugin binding
118
+ */
119
+ type PluginConfigInput<T> = {
120
+ variables: InferSchemaInput<PluginVariables<T>>;
121
+ secrets: InferSchemaInput<PluginSecrets<T>>;
122
+ };
123
+ /**
124
+ * Extract context type from plugin instance
125
+ */
126
+ type ContextOf<T extends AnyPlugin> = T extends Plugin<AnyContractRouter, AnySchema, AnySchema, infer TContext> ? TContext : never;
127
+ /**
128
+ * Plugin metadata for remote loading
129
+ */
130
+ type PluginMetadata = {
131
+ readonly remoteUrl: string;
132
+ readonly version?: string;
133
+ readonly description?: string;
134
+ };
135
+ /**
136
+ * Runtime registry configuration supporting both module and remote entries
137
+ */
138
+ type PluginRegistry = Record<string, PluginRegistryEntry>;
139
+ /**
140
+ * Legacy metadata-only registry (for backwards compatibility)
141
+ */
142
+ type PluginMetadataRegistry = Record<string, PluginMetadata>;
143
+ /**
144
+ * Configuration for secrets injection.
145
+ * Secrets are hydrated into plugin configs using template replacement.
146
+ */
147
+ interface SecretsConfig {
148
+ [key: string]: string;
149
+ }
150
+ /**
151
+ * Loaded plugin
152
+ */
153
+ interface LoadedPlugin<T extends AnyPlugin = AnyPlugin> {
154
+ readonly ctor: new () => T;
155
+ readonly metadata: PluginMetadata;
156
+ }
157
+ /**
158
+ * Instantiated plugin
159
+ */
160
+ interface PluginInstance<T extends AnyPlugin = AnyPlugin> {
161
+ readonly plugin: T;
162
+ readonly metadata: PluginMetadata;
163
+ }
164
+ /**
165
+ * Fully initialized plugin ready for use
166
+ */
167
+ interface InitializedPlugin<T extends AnyPlugin = AnyPlugin> {
168
+ readonly plugin: T;
169
+ readonly metadata: PluginMetadata;
170
+ readonly config: {
171
+ variables: InferSchemaOutput<T["configSchema"]["variables"]>;
172
+ secrets: InferSchemaOutput<T["configSchema"]["secrets"]>;
173
+ };
174
+ readonly context: ContextOf<T>;
175
+ readonly scope: Scope.CloseableScope;
176
+ }
177
+ /**
178
+ * Helper type to detect type errors when looking up RegisteredPlugins
179
+ */
180
+ type VerifyPluginBinding<K$1 extends keyof R$1, R$1 = RegisteredPlugins> = R$1[K$1] extends {
181
+ binding: infer B;
182
+ } ? B extends {
183
+ contract: AnyContractRouter;
184
+ variables: AnySchema;
185
+ secrets: AnySchema;
186
+ context: Context$1;
187
+ } ? true : `❌ Plugin "${K$1 & string}" is not properly registered. Ensure it extends plugin binding layout { contract, variables, secrets, context }.` : `❌ Plugin "${K$1 & string}" is not properly registered. Missing binding property.`;
188
+ /**
189
+ * Result of runtime.usePlugin() call
190
+ * @param K - The plugin key
191
+ * @param R - The registry type (defaults to RegisteredPlugins for module augmentation pattern)
192
+ */
193
+ type UsePluginResult<K$1 extends keyof R$1, R$1 = RegisteredPlugins> = VerifyPluginBinding<K$1, R$1> extends true ? {
194
+ readonly client: PluginClientType<R$1[K$1]>;
195
+ readonly router: PluginRouterType<R$1[K$1]>;
196
+ readonly metadata: PluginMetadata;
197
+ readonly initialized: InitializedPlugin<RegisteredPlugin<K$1, R$1>>;
198
+ } : VerifyPluginBinding<K$1, R$1>;
199
+ /**
200
+ * Runtime options
201
+ */
202
+ interface RuntimeOptions {
203
+ isolation?: "strict" | "shared" | "none";
204
+ memoryLimit?: string;
205
+ concurrency?: number;
206
+ resourceTimeout?: string;
207
+ debug?: boolean;
208
+ metrics?: boolean;
209
+ }
210
+ /**
211
+ * Extract registry type from runtime instance or use type directly
212
+ * This allows EveryPlugin.Infer to work with both:
213
+ * - typeof runtime (extracts registry from PluginRuntime<R> via __registryType)
214
+ * - Registry types directly
215
+ */
216
+ type RegistryOf<T> = T extends {
217
+ __registryType?: infer R;
218
+ } ? R : T;
219
+ /**
220
+ * Namespace containing type utilities for working with plugin results.
221
+ */
222
+ declare namespace EveryPlugin {
223
+ /**
224
+ * Extract plugin runtime instance type from registered plugins or runtime.
225
+ * Provides full type safety for plugin clients, routers, and metadata.
226
+ *
227
+ * @example
228
+ * ```ts
229
+ * // From RegisteredPlugins (module augmentation)
230
+ * type Plugin = EveryPlugin.Infer<"my-plugin">;
231
+ *
232
+ * // From runtime instance (when using module entries)
233
+ * const runtime = createPluginRuntime({ registry: { "my-plugin": { module: MyPlugin } } });
234
+ * type Plugin = EveryPlugin.Infer<"my-plugin", typeof runtime>;
235
+ *
236
+ * // From explicit registry type
237
+ * type Plugin = EveryPlugin.Infer<"my-plugin", MyRegistryType>;
238
+ * ```
239
+ */
240
+ type Infer<K$1 extends string, Source = RegisteredPlugins> = K$1 extends keyof RegistryOf<Source> ? UsePluginResult<K$1, RegistryOf<Source>> : never;
241
+ }
242
+ /**
243
+ * Plugin runtime configuration with support for both module and remote entries
244
+ */
245
+ interface PluginRuntimeConfig<R$1 extends Record<string, PluginRegistryEntry> = Record<string, PluginRegistryEntry>> {
246
+ registry: R$1;
247
+ secrets?: SecretsConfig;
248
+ options?: RuntimeOptions;
249
+ }
250
+ /**
251
+ * Legacy plugin runtime configuration (metadata-only registry)
252
+ * @deprecated Use PluginRuntimeConfig with module/remote entries instead
253
+ */
254
+ interface LegacyPluginRuntimeConfig {
255
+ registry: PluginMetadataRegistry;
256
+ secrets?: SecretsConfig;
257
+ options?: RuntimeOptions;
258
+ }
259
+ //#endregion
260
+ export { AnyPlugin, AnyPluginConstructor, ContextOf, EveryPlugin, ExtractPluginType, InferRegistryFromEntries, InitializedPlugin, LegacyPluginRuntimeConfig, LoadedPlugin, PluginClientType, PluginConfigInput, PluginContext, PluginContract, PluginInstance, PluginMetadata, PluginMetadataRegistry, PluginRegistry, PluginRegistryEntry, PluginRouterType, PluginRuntimeConfig, PluginSecrets, PluginVariables, RegisteredPlugin, RegisteredPlugins, RuntimeOptions, SecretsConfig, UsePluginResult };
261
+ //# sourceMappingURL=types.d.mts.map