every-plugin 2.9.6 → 2.10.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/dist/_virtual/_rolldown/runtime.mjs +1 -1
- package/dist/build/rspack/dev-server-middleware.cjs +57 -3
- package/dist/build/rspack/dev-server-middleware.cjs.map +1 -1
- package/dist/build/rspack/dev-server-middleware.mjs +57 -3
- package/dist/build/rspack/dev-server-middleware.mjs.map +1 -1
- package/dist/build/rspack/fix-mf-data-uri-plugin.cjs.map +1 -1
- package/dist/build/rspack/fix-mf-data-uri-plugin.d.cts +0 -1
- package/dist/build/rspack/fix-mf-data-uri-plugin.d.cts.map +1 -1
- package/dist/build/rspack/fix-mf-data-uri-plugin.d.mts +0 -1
- package/dist/build/rspack/fix-mf-data-uri-plugin.d.mts.map +1 -1
- package/dist/build/rspack/fix-mf-data-uri-plugin.mjs.map +1 -1
- package/dist/build/rspack/module-federation.cjs.map +1 -1
- package/dist/build/rspack/module-federation.mjs.map +1 -1
- package/dist/build/rspack/plugin.cjs +2 -0
- package/dist/build/rspack/plugin.cjs.map +1 -1
- package/dist/build/rspack/plugin.d.cts +1 -2
- package/dist/build/rspack/plugin.d.cts.map +1 -1
- package/dist/build/rspack/plugin.d.mts +1 -2
- package/dist/build/rspack/plugin.d.mts.map +1 -1
- package/dist/build/rspack/plugin.mjs +2 -0
- package/dist/build/rspack/plugin.mjs.map +1 -1
- package/dist/build/rspack/utils.cjs.map +1 -1
- package/dist/build/rspack/utils.mjs.map +1 -1
- package/dist/build/shared-deps.cjs +0 -1
- package/dist/build/shared-deps.cjs.map +1 -1
- package/dist/build/shared-deps.d.cts.map +1 -1
- package/dist/build/shared-deps.d.mts.map +1 -1
- package/dist/build/shared-deps.mjs.map +1 -1
- package/dist/errors.cjs +0 -1
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.d.cts +0 -1
- package/dist/errors.d.cts.map +1 -1
- package/dist/errors.d.mts +0 -1
- package/dist/errors.d.mts.map +1 -1
- package/dist/errors.mjs.map +1 -1
- package/dist/index.cjs +1 -0
- package/dist/index.d.cts +2 -2
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +2 -2
- package/dist/orpc.cjs +0 -1
- package/dist/plugin.cjs +2 -1
- package/dist/plugin.cjs.map +1 -1
- package/dist/plugin.d.cts +3 -2
- package/dist/plugin.d.cts.map +1 -1
- package/dist/plugin.d.mts +3 -2
- package/dist/plugin.d.mts.map +1 -1
- package/dist/plugin.mjs +3 -2
- package/dist/plugin.mjs.map +1 -1
- package/dist/runtime/errors.cjs +0 -1
- package/dist/runtime/errors.cjs.map +1 -1
- package/dist/runtime/errors.d.cts +3 -5
- package/dist/runtime/errors.d.cts.map +1 -1
- package/dist/runtime/errors.d.mts +3 -5
- package/dist/runtime/errors.d.mts.map +1 -1
- package/dist/runtime/errors.mjs.map +1 -1
- package/dist/runtime/index.cjs +4 -2
- package/dist/runtime/index.cjs.map +1 -1
- package/dist/runtime/index.d.cts +0 -1
- package/dist/runtime/index.d.cts.map +1 -1
- package/dist/runtime/index.d.mts +0 -1
- package/dist/runtime/index.d.mts.map +1 -1
- package/dist/runtime/index.mjs +4 -1
- package/dist/runtime/index.mjs.map +1 -1
- package/dist/runtime/mf-config.cjs +1 -2
- package/dist/runtime/mf-config.cjs.map +1 -1
- package/dist/runtime/mf-config.d.cts.map +1 -1
- package/dist/runtime/mf-config.d.mts.map +1 -1
- package/dist/runtime/mf-config.mjs +1 -1
- package/dist/runtime/mf-config.mjs.map +1 -1
- package/dist/runtime/services/module-federation.service.cjs +0 -1
- package/dist/runtime/services/module-federation.service.cjs.map +1 -1
- package/dist/runtime/services/module-federation.service.d.cts +0 -1
- package/dist/runtime/services/module-federation.service.d.cts.map +1 -1
- package/dist/runtime/services/module-federation.service.d.mts +0 -1
- package/dist/runtime/services/module-federation.service.d.mts.map +1 -1
- package/dist/runtime/services/module-federation.service.mjs.map +1 -1
- package/dist/runtime/services/normalize.cjs.map +1 -1
- package/dist/runtime/services/normalize.d.cts.map +1 -1
- package/dist/runtime/services/normalize.d.mts.map +1 -1
- package/dist/runtime/services/normalize.mjs.map +1 -1
- package/dist/runtime/services/plugin-lifecycle.service.cjs +0 -1
- package/dist/runtime/services/plugin-lifecycle.service.cjs.map +1 -1
- package/dist/runtime/services/plugin-lifecycle.service.d.cts +0 -1
- package/dist/runtime/services/plugin-lifecycle.service.d.cts.map +1 -1
- package/dist/runtime/services/plugin-lifecycle.service.d.mts +0 -1
- package/dist/runtime/services/plugin-lifecycle.service.d.mts.map +1 -1
- package/dist/runtime/services/plugin-lifecycle.service.mjs.map +1 -1
- package/dist/runtime/services/plugin-loader.service.cjs +2 -2
- package/dist/runtime/services/plugin-loader.service.cjs.map +1 -1
- package/dist/runtime/services/plugin-loader.service.d.cts +1 -2
- package/dist/runtime/services/plugin-loader.service.d.cts.map +1 -1
- package/dist/runtime/services/plugin-loader.service.d.mts +1 -2
- package/dist/runtime/services/plugin-loader.service.d.mts.map +1 -1
- package/dist/runtime/services/plugin-loader.service.mjs +2 -1
- package/dist/runtime/services/plugin-loader.service.mjs.map +1 -1
- package/dist/runtime/services/plugin.service.cjs +0 -1
- package/dist/runtime/services/plugin.service.cjs.map +1 -1
- package/dist/runtime/services/plugin.service.d.cts +5 -6
- package/dist/runtime/services/plugin.service.d.cts.map +1 -1
- package/dist/runtime/services/plugin.service.d.mts +5 -6
- package/dist/runtime/services/plugin.service.d.mts.map +1 -1
- package/dist/runtime/services/plugin.service.mjs.map +1 -1
- package/dist/runtime/services/secrets.service.cjs.map +1 -1
- package/dist/runtime/services/secrets.service.d.cts +1 -2
- package/dist/runtime/services/secrets.service.d.cts.map +1 -1
- package/dist/runtime/services/secrets.service.d.mts +1 -2
- package/dist/runtime/services/secrets.service.d.mts.map +1 -1
- package/dist/runtime/services/secrets.service.mjs.map +1 -1
- package/dist/runtime/validation.cjs +0 -1
- package/dist/runtime/validation.cjs.map +1 -1
- package/dist/runtime/validation.mjs.map +1 -1
- package/dist/testing/index.cjs.map +1 -1
- package/dist/testing/index.d.cts +2 -1
- package/dist/testing/index.d.cts.map +1 -1
- package/dist/testing/index.d.mts +2 -1
- package/dist/testing/index.d.mts.map +1 -1
- package/dist/testing/index.mjs.map +1 -1
- package/dist/types.d.cts +1 -2
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +1 -2
- package/dist/types.d.mts.map +1 -1
- package/package.json +6 -6
- package/src/build/rspack/dev-server-middleware.ts +81 -7
- package/src/plugin.ts +3 -1
- package/src/runtime/services/plugin-loader.service.ts +2 -1
|
@@ -2,9 +2,8 @@ import { PluginRuntimeError } from "../errors.cjs";
|
|
|
2
2
|
import { AnyPlugin, AnyPluginConstructor, InitializedPlugin, LoadedPlugin, PluginInstance, PluginMetadata, PluginRegistry, SecretsConfig } from "../../types.cjs";
|
|
3
3
|
import { PluginLifecycleService } from "./plugin-lifecycle.service.cjs";
|
|
4
4
|
import { PluginLoaderService } from "./plugin-loader.service.cjs";
|
|
5
|
+
import "../../index.cjs";
|
|
5
6
|
import { Effect, Layer, Scope } from "effect";
|
|
6
|
-
import * as _$_orpc_contract0 from "@orpc/contract";
|
|
7
|
-
|
|
8
7
|
//#region src/runtime/services/plugin.service.d.ts
|
|
9
8
|
declare const PluginService_base: Effect.Service.Class<PluginService, "PluginService", {
|
|
10
9
|
readonly scoped: Effect.Effect<{
|
|
@@ -17,14 +16,14 @@ declare const PluginService_base: Effect.Service.Class<PluginService, "PluginSer
|
|
|
17
16
|
metadata: PluginMetadata;
|
|
18
17
|
}, PluginRuntimeError, never>;
|
|
19
18
|
initializePlugin: <T extends AnyPlugin>(pluginInstance: PluginInstance<T>, config: {
|
|
20
|
-
variables:
|
|
21
|
-
secrets:
|
|
19
|
+
variables: import("@orpc/contract").InferSchemaInput<T["configSchema"]["variables"]>;
|
|
20
|
+
secrets: import("@orpc/contract").InferSchemaInput<T["configSchema"]["secrets"]>;
|
|
22
21
|
}, plugins?: Record<string, unknown>) => Effect.Effect<{
|
|
23
22
|
plugin: T;
|
|
24
23
|
metadata: PluginMetadata;
|
|
25
24
|
config: {
|
|
26
|
-
variables:
|
|
27
|
-
secrets:
|
|
25
|
+
variables: import("@orpc/contract").InferSchemaOutput<T["configSchema"]["variables"]>;
|
|
26
|
+
secrets: import("@orpc/contract").InferSchemaOutput<T["configSchema"]["secrets"]>;
|
|
28
27
|
};
|
|
29
28
|
context: any;
|
|
30
29
|
scope: Scope.CloseableScope;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.service.d.cts","names":[],"sources":["../../../src/runtime/services/plugin.service.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugin.service.d.cts","names":[],"sources":["../../../src/runtime/services/plugin.service.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2B+B,iBAAA,QAAA,kBAAkB,eAAU,OAAA;IAC5B,iBAAA,QAAA,kBAAkB,eAAU,OAAA;;;;cAV9C,sBAAsB;SA4B1B,OACL,UAAU,gBACV,SAAS,eACT,YAAW,eAAe,0BAA0B,MAAA,MAAA"}
|
|
@@ -2,9 +2,8 @@ import { PluginRuntimeError } from "../errors.mjs";
|
|
|
2
2
|
import { AnyPlugin, AnyPluginConstructor, InitializedPlugin, LoadedPlugin, PluginInstance, PluginMetadata, PluginRegistry, SecretsConfig } from "../../types.mjs";
|
|
3
3
|
import { PluginLifecycleService } from "./plugin-lifecycle.service.mjs";
|
|
4
4
|
import { PluginLoaderService } from "./plugin-loader.service.mjs";
|
|
5
|
-
import
|
|
5
|
+
import "../../index.mjs";
|
|
6
6
|
import { Effect, Layer, Scope } from "effect";
|
|
7
|
-
|
|
8
7
|
//#region src/runtime/services/plugin.service.d.ts
|
|
9
8
|
declare const PluginService_base: Effect.Service.Class<PluginService, "PluginService", {
|
|
10
9
|
readonly scoped: Effect.Effect<{
|
|
@@ -17,14 +16,14 @@ declare const PluginService_base: Effect.Service.Class<PluginService, "PluginSer
|
|
|
17
16
|
metadata: PluginMetadata;
|
|
18
17
|
}, PluginRuntimeError, never>;
|
|
19
18
|
initializePlugin: <T extends AnyPlugin>(pluginInstance: PluginInstance<T>, config: {
|
|
20
|
-
variables:
|
|
21
|
-
secrets:
|
|
19
|
+
variables: import("@orpc/contract").InferSchemaInput<T["configSchema"]["variables"]>;
|
|
20
|
+
secrets: import("@orpc/contract").InferSchemaInput<T["configSchema"]["secrets"]>;
|
|
22
21
|
}, plugins?: Record<string, unknown>) => Effect.Effect<{
|
|
23
22
|
plugin: T;
|
|
24
23
|
metadata: PluginMetadata;
|
|
25
24
|
config: {
|
|
26
|
-
variables:
|
|
27
|
-
secrets:
|
|
25
|
+
variables: import("@orpc/contract").InferSchemaOutput<T["configSchema"]["variables"]>;
|
|
26
|
+
secrets: import("@orpc/contract").InferSchemaOutput<T["configSchema"]["secrets"]>;
|
|
28
27
|
};
|
|
29
28
|
context: any;
|
|
30
29
|
scope: Scope.CloseableScope;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.service.d.mts","names":[],"sources":["../../../src/runtime/services/plugin.service.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugin.service.d.mts","names":[],"sources":["../../../src/runtime/services/plugin.service.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2B+B,iBAAA,QAAA,kBAAkB,eAAU,OAAA;IAC5B,iBAAA,QAAA,kBAAkB,eAAU,OAAA;;;;cAV9C,sBAAsB;SA4B1B,OACL,UAAU,gBACV,SAAS,eACT,YAAW,eAAe,0BAA0B,MAAA,MAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.service.mjs","names":[],"sources":["../../../src/runtime/services/plugin.service.ts"],"sourcesContent":["import { Effect, Exit, Layer, Scope } from \"effect\";\nimport type {\n AnyPlugin,\n AnyPluginConstructor,\n InitializedPlugin,\n PluginRegistry,\n SecretsConfig,\n} from \"../../types\";\nimport { ModuleFederationService } from \"./module-federation.service\";\nimport { PluginLifecycleService } from \"./plugin-lifecycle.service\";\nimport {\n PluginLoaderService,\n PluginMapTag,\n PluginRegistryTag,\n RegistryService,\n} from \"./plugin-loader.service\";\nimport { SecretsConfigTag, SecretsService } from \"./secrets.service\";\n\nexport class PluginService extends Effect.Service<PluginService>()(\"PluginService\", {\n scoped: Effect.gen(function* () {\n const loader = yield* PluginLoaderService;\n const lifecycle = yield* PluginLifecycleService;\n\n return {\n loadPlugin: loader.loadPlugin,\n instantiatePlugin: loader.instantiatePlugin,\n initializePlugin: loader.initializePlugin,\n registerPlugin: (plugin: InitializedPlugin<AnyPlugin>) => lifecycle.register(plugin),\n shutdownPlugin: (plugin: InitializedPlugin<AnyPlugin>) =>\n Effect.gen(function* () {\n yield* plugin.plugin\n .shutdown()\n .pipe(\n Effect.catchAll((error) =>\n Effect.logWarning(`Failed to shutdown plugin ${plugin.plugin.id}`, error),\n ),\n );\n\n yield* Scope.close(plugin.scope, Exit.succeed(undefined));\n\n yield* lifecycle.unregister(plugin);\n }),\n cleanup: lifecycle.cleanup,\n };\n }),\n}) {\n static Live = (\n registry: PluginRegistry,\n secrets: SecretsConfig,\n pluginMap: Record<string, AnyPluginConstructor> = {},\n ) => {\n const contextLayer = Layer.mergeAll(\n Layer.succeed(PluginRegistryTag, registry),\n Layer.succeed(SecretsConfigTag, secrets),\n Layer.succeed(PluginMapTag, pluginMap),\n );\n\n const servicesLayer = Layer.mergeAll(\n ModuleFederationService.Default,\n SecretsService.Default,\n RegistryService.Default,\n PluginLifecycleService.Default,\n ).pipe(Layer.provide(contextLayer));\n\n return PluginService.Default.pipe(\n Layer.provide(PluginLoaderService.Default),\n Layer.provide(servicesLayer),\n );\n };\n}\n"],"mappings":";;;;;;;AAkBA,IAAa,gBAAb,MAAa,sBAAsB,OAAO,
|
|
1
|
+
{"version":3,"file":"plugin.service.mjs","names":[],"sources":["../../../src/runtime/services/plugin.service.ts"],"sourcesContent":["import { Effect, Exit, Layer, Scope } from \"effect\";\nimport type {\n AnyPlugin,\n AnyPluginConstructor,\n InitializedPlugin,\n PluginRegistry,\n SecretsConfig,\n} from \"../../types\";\nimport { ModuleFederationService } from \"./module-federation.service\";\nimport { PluginLifecycleService } from \"./plugin-lifecycle.service\";\nimport {\n PluginLoaderService,\n PluginMapTag,\n PluginRegistryTag,\n RegistryService,\n} from \"./plugin-loader.service\";\nimport { SecretsConfigTag, SecretsService } from \"./secrets.service\";\n\nexport class PluginService extends Effect.Service<PluginService>()(\"PluginService\", {\n scoped: Effect.gen(function* () {\n const loader = yield* PluginLoaderService;\n const lifecycle = yield* PluginLifecycleService;\n\n return {\n loadPlugin: loader.loadPlugin,\n instantiatePlugin: loader.instantiatePlugin,\n initializePlugin: loader.initializePlugin,\n registerPlugin: (plugin: InitializedPlugin<AnyPlugin>) => lifecycle.register(plugin),\n shutdownPlugin: (plugin: InitializedPlugin<AnyPlugin>) =>\n Effect.gen(function* () {\n yield* plugin.plugin\n .shutdown()\n .pipe(\n Effect.catchAll((error) =>\n Effect.logWarning(`Failed to shutdown plugin ${plugin.plugin.id}`, error),\n ),\n );\n\n yield* Scope.close(plugin.scope, Exit.succeed(undefined));\n\n yield* lifecycle.unregister(plugin);\n }),\n cleanup: lifecycle.cleanup,\n };\n }),\n}) {\n static Live = (\n registry: PluginRegistry,\n secrets: SecretsConfig,\n pluginMap: Record<string, AnyPluginConstructor> = {},\n ) => {\n const contextLayer = Layer.mergeAll(\n Layer.succeed(PluginRegistryTag, registry),\n Layer.succeed(SecretsConfigTag, secrets),\n Layer.succeed(PluginMapTag, pluginMap),\n );\n\n const servicesLayer = Layer.mergeAll(\n ModuleFederationService.Default,\n SecretsService.Default,\n RegistryService.Default,\n PluginLifecycleService.Default,\n ).pipe(Layer.provide(contextLayer));\n\n return PluginService.Default.pipe(\n Layer.provide(PluginLoaderService.Default),\n Layer.provide(servicesLayer),\n );\n };\n}\n"],"mappings":";;;;;;;AAkBA,IAAa,gBAAb,MAAa,sBAAsB,OAAO,QAAuB,CAAC,CAAC,iBAAiB,EAClF,QAAQ,OAAO,IAAI,aAAa;CAC9B,MAAM,SAAS,OAAO;CACtB,MAAM,YAAY,OAAO;CAEzB,OAAO;EACL,YAAY,OAAO;EACnB,mBAAmB,OAAO;EAC1B,kBAAkB,OAAO;EACzB,iBAAiB,WAAyC,UAAU,SAAS,MAAM;EACnF,iBAAiB,WACf,OAAO,IAAI,aAAa;GACtB,OAAO,OAAO,OACX,SAAS,CAAC,CACV,KACC,OAAO,UAAU,UACf,OAAO,WAAW,6BAA6B,OAAO,OAAO,MAAM,KAAK,CAC1E,CACF;GAEF,OAAO,MAAM,MAAM,OAAO,OAAO,KAAK,QAAQ,MAAS,CAAC;GAExD,OAAO,UAAU,WAAW,MAAM;EACpC,CAAC;EACH,SAAS,UAAU;CACrB;AACF,CAAC,EACH,CAAC,CAAC,CAAC;CACD,OAAO,QACL,UACA,SACA,YAAkD,CAAC,MAChD;EACH,MAAM,eAAe,MAAM,SACzB,MAAM,QAAQ,mBAAmB,QAAQ,GACzC,MAAM,QAAQ,kBAAkB,OAAO,GACvC,MAAM,QAAQ,cAAc,SAAS,CACvC;EAEA,MAAM,gBAAgB,MAAM,SAC1B,wBAAwB,SACxB,eAAe,SACf,gBAAgB,SAChB,uBAAuB,OACzB,CAAC,CAAC,KAAK,MAAM,QAAQ,YAAY,CAAC;EAElC,OAAO,cAAc,QAAQ,KAC3B,MAAM,QAAQ,oBAAoB,OAAO,GACzC,MAAM,QAAQ,aAAa,CAC7B;CACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets.service.cjs","names":["z","Context","Effect","PluginRuntimeError"],"sources":["../../../src/runtime/services/secrets.service.ts"],"sourcesContent":["import { Context, Effect } from \"effect\";\nimport * as z from \"zod\";\nimport type { SecretsConfig } from \"../../types\";\nimport { PluginRuntimeError } from \"../errors\";\n\nconst configSchema = z\n .object({\n secrets: z.record(z.string(), z.unknown()),\n })\n .passthrough();\n\nexport class SecretsConfigTag extends Context.Tag(\"SecretsConfig\")<\n SecretsConfigTag,\n SecretsConfig\n>() {}\n\nexport class SecretsService extends Effect.Service<SecretsService>()(\"SecretsService\", {\n effect: Effect.gen(function* () {\n const secrets = yield* SecretsConfigTag;\n\n const hydrateValue = (value: unknown): unknown => {\n if (typeof value === \"string\") {\n let result = value;\n for (const [key, secretValue] of Object.entries(secrets)) {\n const pattern = new RegExp(`{{${key}}}`, \"g\");\n result = result.replace(pattern, String(secretValue));\n }\n return result;\n }\n\n if (Array.isArray(value)) {\n return value.map(hydrateValue);\n }\n\n if (value && typeof value === \"object\") {\n const isPlainObject = value.constructor === Object || value.constructor === undefined;\n\n if (isPlainObject) {\n const hydrated: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(value)) {\n hydrated[key] = hydrateValue(val);\n }\n return hydrated;\n }\n\n const hydrated = Object.create(Object.getPrototypeOf(value));\n for (const [key, val] of Object.entries(value)) {\n hydrated[key] = hydrateValue(val);\n }\n return hydrated;\n }\n\n return value;\n };\n\n return {\n hydrateSecrets: <T>(config: T) =>\n Effect.gen(function* () {\n const parseResult = configSchema.parse(config);\n try {\n return hydrateValue(parseResult) as T;\n } catch (error) {\n return yield* Effect.fail(\n new PluginRuntimeError({\n operation: \"hydrate-secrets\",\n cause: error instanceof Error ? error : new Error(String(error)),\n retryable: false,\n }),\n );\n }\n }),\n };\n }),\n}) {}\n"],"mappings":";;;;;;;AAKA,MAAM,eAAeA,IAClB,OAAO,EACN,SAASA,IAAE,OAAOA,IAAE,
|
|
1
|
+
{"version":3,"file":"secrets.service.cjs","names":["z","Context","Effect","PluginRuntimeError"],"sources":["../../../src/runtime/services/secrets.service.ts"],"sourcesContent":["import { Context, Effect } from \"effect\";\nimport * as z from \"zod\";\nimport type { SecretsConfig } from \"../../types\";\nimport { PluginRuntimeError } from \"../errors\";\n\nconst configSchema = z\n .object({\n secrets: z.record(z.string(), z.unknown()),\n })\n .passthrough();\n\nexport class SecretsConfigTag extends Context.Tag(\"SecretsConfig\")<\n SecretsConfigTag,\n SecretsConfig\n>() {}\n\nexport class SecretsService extends Effect.Service<SecretsService>()(\"SecretsService\", {\n effect: Effect.gen(function* () {\n const secrets = yield* SecretsConfigTag;\n\n const hydrateValue = (value: unknown): unknown => {\n if (typeof value === \"string\") {\n let result = value;\n for (const [key, secretValue] of Object.entries(secrets)) {\n const pattern = new RegExp(`{{${key}}}`, \"g\");\n result = result.replace(pattern, String(secretValue));\n }\n return result;\n }\n\n if (Array.isArray(value)) {\n return value.map(hydrateValue);\n }\n\n if (value && typeof value === \"object\") {\n const isPlainObject = value.constructor === Object || value.constructor === undefined;\n\n if (isPlainObject) {\n const hydrated: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(value)) {\n hydrated[key] = hydrateValue(val);\n }\n return hydrated;\n }\n\n const hydrated = Object.create(Object.getPrototypeOf(value));\n for (const [key, val] of Object.entries(value)) {\n hydrated[key] = hydrateValue(val);\n }\n return hydrated;\n }\n\n return value;\n };\n\n return {\n hydrateSecrets: <T>(config: T) =>\n Effect.gen(function* () {\n const parseResult = configSchema.parse(config);\n try {\n return hydrateValue(parseResult) as T;\n } catch (error) {\n return yield* Effect.fail(\n new PluginRuntimeError({\n operation: \"hydrate-secrets\",\n cause: error instanceof Error ? error : new Error(String(error)),\n retryable: false,\n }),\n );\n }\n }),\n };\n }),\n}) {}\n"],"mappings":";;;;;;;AAKA,MAAM,eAAeA,IAClB,OAAO,EACN,SAASA,IAAE,OAAOA,IAAE,OAAO,GAAGA,IAAE,QAAQ,CAAC,EAC3C,CAAC,CAAC,CACD,YAAY;AAEf,IAAa,mBAAb,cAAsCC,eAAQ,IAAI,eAAe,CAAC,CAGhE,CAAC,CAAC,CAAC;AAEL,IAAa,iBAAb,cAAoCC,cAAO,QAAwB,CAAC,CAAC,kBAAkB,EACrF,QAAQA,cAAO,IAAI,aAAa;CAC9B,MAAM,UAAU,OAAO;CAEvB,MAAM,gBAAgB,UAA4B;EAChD,IAAI,OAAO,UAAU,UAAU;GAC7B,IAAI,SAAS;GACb,KAAK,MAAM,CAAC,KAAK,gBAAgB,OAAO,QAAQ,OAAO,GAAG;IACxD,MAAM,UAAU,IAAI,OAAO,KAAK,IAAI,KAAK,GAAG;IAC5C,SAAS,OAAO,QAAQ,SAAS,OAAO,WAAW,CAAC;GACtD;GACA,OAAO;EACT;EAEA,IAAI,MAAM,QAAQ,KAAK,GACrB,OAAO,MAAM,IAAI,YAAY;EAG/B,IAAI,SAAS,OAAO,UAAU,UAAU;GAGtC,IAFsB,MAAM,gBAAgB,UAAU,MAAM,gBAAgB,QAEzD;IACjB,MAAM,WAAoC,CAAC;IAC3C,KAAK,MAAM,CAAC,KAAK,QAAQ,OAAO,QAAQ,KAAK,GAC3C,SAAS,OAAO,aAAa,GAAG;IAElC,OAAO;GACT;GAEA,MAAM,WAAW,OAAO,OAAO,OAAO,eAAe,KAAK,CAAC;GAC3D,KAAK,MAAM,CAAC,KAAK,QAAQ,OAAO,QAAQ,KAAK,GAC3C,SAAS,OAAO,aAAa,GAAG;GAElC,OAAO;EACT;EAEA,OAAO;CACT;CAEA,OAAO,EACL,iBAAoB,WAClBA,cAAO,IAAI,aAAa;EACtB,MAAM,cAAc,aAAa,MAAM,MAAM;EAC7C,IAAI;GACF,OAAO,aAAa,WAAW;EACjC,SAAS,OAAO;GACd,OAAO,OAAOA,cAAO,KACnB,IAAIC,kCAAmB;IACrB,WAAW;IACX,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;IAC/D,WAAW;GACb,CAAC,CACH;EACF;CACF,CAAC,EACL;AACF,CAAC,EACH,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { PluginRuntimeError } from "../errors.cjs";
|
|
2
2
|
import { SecretsConfig } from "../../types.cjs";
|
|
3
3
|
import { Context, Effect } from "effect";
|
|
4
|
-
|
|
5
4
|
//#region src/runtime/services/secrets.service.d.ts
|
|
6
5
|
declare const SecretsConfigTag_base: Context.TagClass<SecretsConfigTag, "SecretsConfig", SecretsConfig>;
|
|
7
6
|
declare class SecretsConfigTag extends SecretsConfigTag_base {}
|
|
@@ -12,5 +11,5 @@ declare const SecretsService_base: Effect.Service.Class<SecretsService, "Secrets
|
|
|
12
11
|
}>;
|
|
13
12
|
declare class SecretsService extends SecretsService_base {}
|
|
14
13
|
//#endregion
|
|
15
|
-
export { SecretsService };
|
|
14
|
+
export { SecretsConfigTag, SecretsService };
|
|
16
15
|
//# sourceMappingURL=secrets.service.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets.service.d.cts","names":[],"sources":["../../../src/runtime/services/secrets.service.ts"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"secrets.service.d.cts","names":[],"sources":["../../../src/runtime/services/secrets.service.ts"],"mappings":";;;;;cAWa,yBAAyB;;;IA6Cf,iBAAA,GAAC,QAAU,MAAC,OAAA,OAAA,GAAA;;;cAxCtB,uBAAuB"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { PluginRuntimeError } from "../errors.mjs";
|
|
2
2
|
import { SecretsConfig } from "../../types.mjs";
|
|
3
3
|
import { Context, Effect } from "effect";
|
|
4
|
-
|
|
5
4
|
//#region src/runtime/services/secrets.service.d.ts
|
|
6
5
|
declare const SecretsConfigTag_base: Context.TagClass<SecretsConfigTag, "SecretsConfig", SecretsConfig>;
|
|
7
6
|
declare class SecretsConfigTag extends SecretsConfigTag_base {}
|
|
@@ -12,5 +11,5 @@ declare const SecretsService_base: Effect.Service.Class<SecretsService, "Secrets
|
|
|
12
11
|
}>;
|
|
13
12
|
declare class SecretsService extends SecretsService_base {}
|
|
14
13
|
//#endregion
|
|
15
|
-
export { SecretsService };
|
|
14
|
+
export { SecretsConfigTag, SecretsService };
|
|
16
15
|
//# sourceMappingURL=secrets.service.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets.service.d.mts","names":[],"sources":["../../../src/runtime/services/secrets.service.ts"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"secrets.service.d.mts","names":[],"sources":["../../../src/runtime/services/secrets.service.ts"],"mappings":";;;;;cAWa,yBAAyB;;;IA6Cf,iBAAA,GAAC,QAAU,MAAC,OAAA,OAAA,GAAA;;;cAxCtB,uBAAuB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets.service.mjs","names":["z"],"sources":["../../../src/runtime/services/secrets.service.ts"],"sourcesContent":["import { Context, Effect } from \"effect\";\nimport * as z from \"zod\";\nimport type { SecretsConfig } from \"../../types\";\nimport { PluginRuntimeError } from \"../errors\";\n\nconst configSchema = z\n .object({\n secrets: z.record(z.string(), z.unknown()),\n })\n .passthrough();\n\nexport class SecretsConfigTag extends Context.Tag(\"SecretsConfig\")<\n SecretsConfigTag,\n SecretsConfig\n>() {}\n\nexport class SecretsService extends Effect.Service<SecretsService>()(\"SecretsService\", {\n effect: Effect.gen(function* () {\n const secrets = yield* SecretsConfigTag;\n\n const hydrateValue = (value: unknown): unknown => {\n if (typeof value === \"string\") {\n let result = value;\n for (const [key, secretValue] of Object.entries(secrets)) {\n const pattern = new RegExp(`{{${key}}}`, \"g\");\n result = result.replace(pattern, String(secretValue));\n }\n return result;\n }\n\n if (Array.isArray(value)) {\n return value.map(hydrateValue);\n }\n\n if (value && typeof value === \"object\") {\n const isPlainObject = value.constructor === Object || value.constructor === undefined;\n\n if (isPlainObject) {\n const hydrated: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(value)) {\n hydrated[key] = hydrateValue(val);\n }\n return hydrated;\n }\n\n const hydrated = Object.create(Object.getPrototypeOf(value));\n for (const [key, val] of Object.entries(value)) {\n hydrated[key] = hydrateValue(val);\n }\n return hydrated;\n }\n\n return value;\n };\n\n return {\n hydrateSecrets: <T>(config: T) =>\n Effect.gen(function* () {\n const parseResult = configSchema.parse(config);\n try {\n return hydrateValue(parseResult) as T;\n } catch (error) {\n return yield* Effect.fail(\n new PluginRuntimeError({\n operation: \"hydrate-secrets\",\n cause: error instanceof Error ? error : new Error(String(error)),\n retryable: false,\n }),\n );\n }\n }),\n };\n }),\n}) {}\n"],"mappings":";;;;;AAKA,MAAM,eAAeA,IAClB,OAAO,EACN,SAASA,IAAE,OAAOA,IAAE,
|
|
1
|
+
{"version":3,"file":"secrets.service.mjs","names":["z"],"sources":["../../../src/runtime/services/secrets.service.ts"],"sourcesContent":["import { Context, Effect } from \"effect\";\nimport * as z from \"zod\";\nimport type { SecretsConfig } from \"../../types\";\nimport { PluginRuntimeError } from \"../errors\";\n\nconst configSchema = z\n .object({\n secrets: z.record(z.string(), z.unknown()),\n })\n .passthrough();\n\nexport class SecretsConfigTag extends Context.Tag(\"SecretsConfig\")<\n SecretsConfigTag,\n SecretsConfig\n>() {}\n\nexport class SecretsService extends Effect.Service<SecretsService>()(\"SecretsService\", {\n effect: Effect.gen(function* () {\n const secrets = yield* SecretsConfigTag;\n\n const hydrateValue = (value: unknown): unknown => {\n if (typeof value === \"string\") {\n let result = value;\n for (const [key, secretValue] of Object.entries(secrets)) {\n const pattern = new RegExp(`{{${key}}}`, \"g\");\n result = result.replace(pattern, String(secretValue));\n }\n return result;\n }\n\n if (Array.isArray(value)) {\n return value.map(hydrateValue);\n }\n\n if (value && typeof value === \"object\") {\n const isPlainObject = value.constructor === Object || value.constructor === undefined;\n\n if (isPlainObject) {\n const hydrated: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(value)) {\n hydrated[key] = hydrateValue(val);\n }\n return hydrated;\n }\n\n const hydrated = Object.create(Object.getPrototypeOf(value));\n for (const [key, val] of Object.entries(value)) {\n hydrated[key] = hydrateValue(val);\n }\n return hydrated;\n }\n\n return value;\n };\n\n return {\n hydrateSecrets: <T>(config: T) =>\n Effect.gen(function* () {\n const parseResult = configSchema.parse(config);\n try {\n return hydrateValue(parseResult) as T;\n } catch (error) {\n return yield* Effect.fail(\n new PluginRuntimeError({\n operation: \"hydrate-secrets\",\n cause: error instanceof Error ? error : new Error(String(error)),\n retryable: false,\n }),\n );\n }\n }),\n };\n }),\n}) {}\n"],"mappings":";;;;;AAKA,MAAM,eAAeA,IAClB,OAAO,EACN,SAASA,IAAE,OAAOA,IAAE,OAAO,GAAGA,IAAE,QAAQ,CAAC,EAC3C,CAAC,CAAC,CACD,YAAY;AAEf,IAAa,mBAAb,cAAsC,QAAQ,IAAI,eAAe,CAAC,CAGhE,CAAC,CAAC,CAAC;AAEL,IAAa,iBAAb,cAAoC,OAAO,QAAwB,CAAC,CAAC,kBAAkB,EACrF,QAAQ,OAAO,IAAI,aAAa;CAC9B,MAAM,UAAU,OAAO;CAEvB,MAAM,gBAAgB,UAA4B;EAChD,IAAI,OAAO,UAAU,UAAU;GAC7B,IAAI,SAAS;GACb,KAAK,MAAM,CAAC,KAAK,gBAAgB,OAAO,QAAQ,OAAO,GAAG;IACxD,MAAM,UAAU,IAAI,OAAO,KAAK,IAAI,KAAK,GAAG;IAC5C,SAAS,OAAO,QAAQ,SAAS,OAAO,WAAW,CAAC;GACtD;GACA,OAAO;EACT;EAEA,IAAI,MAAM,QAAQ,KAAK,GACrB,OAAO,MAAM,IAAI,YAAY;EAG/B,IAAI,SAAS,OAAO,UAAU,UAAU;GAGtC,IAFsB,MAAM,gBAAgB,UAAU,MAAM,gBAAgB,QAEzD;IACjB,MAAM,WAAoC,CAAC;IAC3C,KAAK,MAAM,CAAC,KAAK,QAAQ,OAAO,QAAQ,KAAK,GAC3C,SAAS,OAAO,aAAa,GAAG;IAElC,OAAO;GACT;GAEA,MAAM,WAAW,OAAO,OAAO,OAAO,eAAe,KAAK,CAAC;GAC3D,KAAK,MAAM,CAAC,KAAK,QAAQ,OAAO,QAAQ,KAAK,GAC3C,SAAS,OAAO,aAAa,GAAG;GAElC,OAAO;EACT;EAEA,OAAO;CACT;CAEA,OAAO,EACL,iBAAoB,WAClB,OAAO,IAAI,aAAa;EACtB,MAAM,cAAc,aAAa,MAAM,MAAM;EAC7C,IAAI;GACF,OAAO,aAAa,WAAW;EACjC,SAAS,OAAO;GACd,OAAO,OAAO,OAAO,KACnB,IAAI,mBAAmB;IACrB,WAAW;IACX,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;IAC/D,WAAW;GACb,CAAC,CACH;EACF;CACF,CAAC,EACL;AACF,CAAC,EACH,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.cjs","names":["Effect","ValidationError"],"sources":["../../src/runtime/validation.ts"],"sourcesContent":["import { Effect } from \"effect\";\nimport type { z } from \"zod\";\nimport { ValidationError } from \"./errors\";\n\nexport const validate = <T>(\n schema: z.ZodSchema<T>,\n data: unknown,\n pluginId: string,\n stage: \"config\" | \"input\" | \"output\" | \"state\",\n): Effect.Effect<T, ValidationError> =>\n Effect.gen(function* () {\n const result = schema.safeParse(data);\n if (result.success) {\n return result.data;\n }\n return yield* Effect.fail(\n new ValidationError({\n pluginId,\n stage,\n zodError: result.error,\n }),\n );\n });\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"validation.cjs","names":["Effect","ValidationError"],"sources":["../../src/runtime/validation.ts"],"sourcesContent":["import { Effect } from \"effect\";\nimport type { z } from \"zod\";\nimport { ValidationError } from \"./errors\";\n\nexport const validate = <T>(\n schema: z.ZodSchema<T>,\n data: unknown,\n pluginId: string,\n stage: \"config\" | \"input\" | \"output\" | \"state\",\n): Effect.Effect<T, ValidationError> =>\n Effect.gen(function* () {\n const result = schema.safeParse(data);\n if (result.success) {\n return result.data;\n }\n return yield* Effect.fail(\n new ValidationError({\n pluginId,\n stage,\n zodError: result.error,\n }),\n );\n });\n"],"mappings":";;;;AAIA,MAAa,YACX,QACA,MACA,UACA,UAEAA,cAAO,IAAI,aAAa;CACtB,MAAM,SAAS,OAAO,UAAU,IAAI;CACpC,IAAI,OAAO,SACT,OAAO,OAAO;CAEhB,OAAO,OAAOA,cAAO,KACnB,IAAIC,+BAAgB;EAClB;EACA;EACA,UAAU,OAAO;CACnB,CAAC,CACH;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.mjs","names":[],"sources":["../../src/runtime/validation.ts"],"sourcesContent":["import { Effect } from \"effect\";\nimport type { z } from \"zod\";\nimport { ValidationError } from \"./errors\";\n\nexport const validate = <T>(\n schema: z.ZodSchema<T>,\n data: unknown,\n pluginId: string,\n stage: \"config\" | \"input\" | \"output\" | \"state\",\n): Effect.Effect<T, ValidationError> =>\n Effect.gen(function* () {\n const result = schema.safeParse(data);\n if (result.success) {\n return result.data;\n }\n return yield* Effect.fail(\n new ValidationError({\n pluginId,\n stage,\n zodError: result.error,\n }),\n );\n });\n"],"mappings":";;;;AAIA,MAAa,YACX,QACA,MACA,UACA,UAEA,OAAO,IAAI,aAAa;CACtB,MAAM,SAAS,OAAO,UAAU,
|
|
1
|
+
{"version":3,"file":"validation.mjs","names":[],"sources":["../../src/runtime/validation.ts"],"sourcesContent":["import { Effect } from \"effect\";\nimport type { z } from \"zod\";\nimport { ValidationError } from \"./errors\";\n\nexport const validate = <T>(\n schema: z.ZodSchema<T>,\n data: unknown,\n pluginId: string,\n stage: \"config\" | \"input\" | \"output\" | \"state\",\n): Effect.Effect<T, ValidationError> =>\n Effect.gen(function* () {\n const result = schema.safeParse(data);\n if (result.success) {\n return result.data;\n }\n return yield* Effect.fail(\n new ValidationError({\n pluginId,\n stage,\n zodError: result.error,\n }),\n );\n });\n"],"mappings":";;;;AAIA,MAAa,YACX,QACA,MACA,UACA,UAEA,OAAO,IAAI,aAAa;CACtB,MAAM,SAAS,OAAO,UAAU,IAAI;CACpC,IAAI,OAAO,SACT,OAAO,OAAO;CAEhB,OAAO,OAAO,OAAO,KACnB,IAAI,gBAAgB;EAClB;EACA;EACA,UAAU,OAAO;CACnB,CAAC,CACH;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["createPluginRuntime"],"sources":["../../src/testing/index.ts"],"sourcesContent":["import type { LoadedPluginWithBinding } from \"../plugin\";\nimport { createPluginRuntime } from \"../runtime\";\nimport type { AnyPluginConstructor, PluginRegistryEntry, PluginRuntimeConfig } from \"../types\";\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 [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 oldRegistry: Record<string, { remoteUrl: string; version?: string; description?: string }>,\n pluginMap: T,\n): Record<keyof T, PluginRegistryEntry> {\n const registry: Record<string, PluginRegistryEntry> = {};\n\n for (const [pluginId, ctor] of Object.entries(pluginMap)) {\n const oldEntry = oldRegistry[pluginId];\n registry[pluginId] = {\n module: ctor as AnyPluginConstructor,\n remote: oldEntry?.remoteUrl,\n version: oldEntry?.version,\n description: oldEntry?.description,\n };\n }\n\n return 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 config: {\n registry: Record<string, { remoteUrl: string; version?: string; description?: string }>;\n secrets?: Record<string, string>;\n options?: any;\n },\n pluginMap: TMap,\n) {\n const newRegistry = convertPluginMapToRegistry(config.registry, pluginMap);\n\n return createPluginRuntime({\n registry: newRegistry,\n secrets: config.secrets,\n options: config.options,\n });\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,2BACP,aACA,WACsC;CACtC,MAAM,WAAgD,
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["createPluginRuntime"],"sources":["../../src/testing/index.ts"],"sourcesContent":["import type { LoadedPluginWithBinding } from \"../plugin\";\nimport { createPluginRuntime } from \"../runtime\";\nimport type { AnyPluginConstructor, PluginRegistryEntry, PluginRuntimeConfig } from \"../types\";\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 [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 oldRegistry: Record<string, { remoteUrl: string; version?: string; description?: string }>,\n pluginMap: T,\n): Record<keyof T, PluginRegistryEntry> {\n const registry: Record<string, PluginRegistryEntry> = {};\n\n for (const [pluginId, ctor] of Object.entries(pluginMap)) {\n const oldEntry = oldRegistry[pluginId];\n registry[pluginId] = {\n module: ctor as AnyPluginConstructor,\n remote: oldEntry?.remoteUrl,\n version: oldEntry?.version,\n description: oldEntry?.description,\n };\n }\n\n return 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 config: {\n registry: Record<string, { remoteUrl: string; version?: string; description?: string }>;\n secrets?: Record<string, string>;\n options?: any;\n },\n pluginMap: TMap,\n) {\n const newRegistry = convertPluginMapToRegistry(config.registry, pluginMap);\n\n return createPluginRuntime({\n registry: newRegistry,\n secrets: config.secrets,\n options: config.options,\n });\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,2BACP,aACA,WACsC;CACtC,MAAM,WAAgD,CAAC;CAEvD,KAAK,MAAM,CAAC,UAAU,SAAS,OAAO,QAAQ,SAAS,GAAG;EACxD,MAAM,WAAW,YAAY;EAC7B,SAAS,YAAY;GACnB,QAAQ;GACR,QAAQ,UAAU;GAClB,SAAS,UAAU;GACnB,aAAa,UAAU;EACzB;CACF;CAEA,OAAO;AACT;;;;;;;;;;;;;;;;;;;;;;AAuBA,SAAgB,yBACd,QAKA,WACA;CAGA,OAAOA,0CAAoB;EACzB,UAHkB,2BAA2B,OAAO,UAAU,SAG1C;EACpB,SAAS,OAAO;EAChB,SAAS,OAAO;CAClB,CAAC;AACH;;;;AAKA,MAAa,0BAA0B"}
|
package/dist/testing/index.d.cts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { LoadedPluginWithBinding } from "../plugin.cjs";
|
|
2
2
|
import { EveryPlugin, InferRegistryFromEntries, PluginRegistry, PluginRegistryEntry, PluginRuntimeConfig, RegisteredPlugins } from "../types.cjs";
|
|
3
3
|
import { PluginRuntime } from "../runtime/index.cjs";
|
|
4
|
+
import "../index.cjs";
|
|
4
5
|
//#region src/testing/index.d.ts
|
|
5
6
|
type PluginMap = Record<string, LoadedPluginWithBinding<any, any, any, any>>;
|
|
6
7
|
/**
|
|
@@ -13,7 +14,7 @@ type PluginMap = Record<string, LoadedPluginWithBinding<any, any, any, any>>;
|
|
|
13
14
|
* type MyBindings = InferBindingsFromMap<typeof pluginMap>;
|
|
14
15
|
* ```
|
|
15
16
|
*/
|
|
16
|
-
type InferBindingsFromMap<T extends PluginMap> = { [K in keyof T]: T[K] };
|
|
17
|
+
type InferBindingsFromMap<T extends PluginMap> = { [K in keyof T]: T[K]; };
|
|
17
18
|
/**
|
|
18
19
|
* Creates a plugin runtime for locally available plugins (non-remote).
|
|
19
20
|
* Automatically infers type bindings from the plugin map, eliminating
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../../src/testing/index.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../src/testing/index.ts"],"mappings":";;;;;KAIY,YAAY,eAAe;;;;;;;;;;;KAY3B,qBAAqB,UAAU,gBACxC,WAAW,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;iBA8CJ,yBAAyB,aAAa,WACpD;EACE,UAAU;IAAiB;IAAmB;IAAkB;;EAChE,UAAU;EACV;GAEF,WAAW,OAAI,cAAA,yBAAA,aAAA,MAAA;;;;cAcJ,gCAAuB"}
|
package/dist/testing/index.d.mts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { LoadedPluginWithBinding } from "../plugin.mjs";
|
|
2
2
|
import { EveryPlugin, InferRegistryFromEntries, PluginRegistry, PluginRegistryEntry, PluginRuntimeConfig, RegisteredPlugins } from "../types.mjs";
|
|
3
3
|
import { PluginRuntime } from "../runtime/index.mjs";
|
|
4
|
+
import "../index.mjs";
|
|
4
5
|
//#region src/testing/index.d.ts
|
|
5
6
|
type PluginMap = Record<string, LoadedPluginWithBinding<any, any, any, any>>;
|
|
6
7
|
/**
|
|
@@ -13,7 +14,7 @@ type PluginMap = Record<string, LoadedPluginWithBinding<any, any, any, any>>;
|
|
|
13
14
|
* type MyBindings = InferBindingsFromMap<typeof pluginMap>;
|
|
14
15
|
* ```
|
|
15
16
|
*/
|
|
16
|
-
type InferBindingsFromMap<T extends PluginMap> = { [K in keyof T]: T[K] };
|
|
17
|
+
type InferBindingsFromMap<T extends PluginMap> = { [K in keyof T]: T[K]; };
|
|
17
18
|
/**
|
|
18
19
|
* Creates a plugin runtime for locally available plugins (non-remote).
|
|
19
20
|
* Automatically infers type bindings from the plugin map, eliminating
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/testing/index.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/testing/index.ts"],"mappings":";;;;;KAIY,YAAY,eAAe;;;;;;;;;;;KAY3B,qBAAqB,UAAU,gBACxC,WAAW,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;iBA8CJ,yBAAyB,aAAa,WACpD;EACE,UAAU;IAAiB;IAAmB;IAAkB;;EAChE,UAAU;EACV;GAEF,WAAW,OAAI,cAAA,yBAAA,aAAA,MAAA;;;;cAcJ,gCAAuB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/testing/index.ts"],"sourcesContent":["import type { LoadedPluginWithBinding } from \"../plugin\";\nimport { createPluginRuntime } from \"../runtime\";\nimport type { AnyPluginConstructor, PluginRegistryEntry, PluginRuntimeConfig } from \"../types\";\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 [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 oldRegistry: Record<string, { remoteUrl: string; version?: string; description?: string }>,\n pluginMap: T,\n): Record<keyof T, PluginRegistryEntry> {\n const registry: Record<string, PluginRegistryEntry> = {};\n\n for (const [pluginId, ctor] of Object.entries(pluginMap)) {\n const oldEntry = oldRegistry[pluginId];\n registry[pluginId] = {\n module: ctor as AnyPluginConstructor,\n remote: oldEntry?.remoteUrl,\n version: oldEntry?.version,\n description: oldEntry?.description,\n };\n }\n\n return 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 config: {\n registry: Record<string, { remoteUrl: string; version?: string; description?: string }>;\n secrets?: Record<string, string>;\n options?: any;\n },\n pluginMap: TMap,\n) {\n const newRegistry = convertPluginMapToRegistry(config.registry, pluginMap);\n\n return createPluginRuntime({\n registry: newRegistry,\n secrets: config.secrets,\n options: config.options,\n });\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,2BACP,aACA,WACsC;CACtC,MAAM,WAAgD,
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/testing/index.ts"],"sourcesContent":["import type { LoadedPluginWithBinding } from \"../plugin\";\nimport { createPluginRuntime } from \"../runtime\";\nimport type { AnyPluginConstructor, PluginRegistryEntry, PluginRuntimeConfig } from \"../types\";\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 [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 oldRegistry: Record<string, { remoteUrl: string; version?: string; description?: string }>,\n pluginMap: T,\n): Record<keyof T, PluginRegistryEntry> {\n const registry: Record<string, PluginRegistryEntry> = {};\n\n for (const [pluginId, ctor] of Object.entries(pluginMap)) {\n const oldEntry = oldRegistry[pluginId];\n registry[pluginId] = {\n module: ctor as AnyPluginConstructor,\n remote: oldEntry?.remoteUrl,\n version: oldEntry?.version,\n description: oldEntry?.description,\n };\n }\n\n return 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 config: {\n registry: Record<string, { remoteUrl: string; version?: string; description?: string }>;\n secrets?: Record<string, string>;\n options?: any;\n },\n pluginMap: TMap,\n) {\n const newRegistry = convertPluginMapToRegistry(config.registry, pluginMap);\n\n return createPluginRuntime({\n registry: newRegistry,\n secrets: config.secrets,\n options: config.options,\n });\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,2BACP,aACA,WACsC;CACtC,MAAM,WAAgD,CAAC;CAEvD,KAAK,MAAM,CAAC,UAAU,SAAS,OAAO,QAAQ,SAAS,GAAG;EACxD,MAAM,WAAW,YAAY;EAC7B,SAAS,YAAY;GACnB,QAAQ;GACR,QAAQ,UAAU;GAClB,SAAS,UAAU;GACnB,aAAa,UAAU;EACzB;CACF;CAEA,OAAO;AACT;;;;;;;;;;;;;;;;;;;;;;AAuBA,SAAgB,yBACd,QAKA,WACA;CAGA,OAAO,oBAAoB;EACzB,UAHkB,2BAA2B,OAAO,UAAU,SAG1C;EACpB,SAAS,OAAO;EAChB,SAAS,OAAO;CAClB,CAAC;AACH;;;;AAKA,MAAa,0BAA0B"}
|
package/dist/types.d.cts
CHANGED
|
@@ -2,7 +2,6 @@ import { Plugin } from "./plugin.cjs";
|
|
|
2
2
|
import { Scope } from "effect";
|
|
3
3
|
import { AnyContractRouter, AnySchema, InferSchemaInput, InferSchemaOutput } from "@orpc/contract";
|
|
4
4
|
import { Router, RouterClient } from "@orpc/server";
|
|
5
|
-
|
|
6
5
|
//#region src/types.d.ts
|
|
7
6
|
/**
|
|
8
7
|
* Registry bindings interface - populated via module augmentation
|
|
@@ -57,7 +56,7 @@ type ExtractPluginType<E> = E extends {
|
|
|
57
56
|
*/
|
|
58
57
|
type InferRegistryFromEntries<R extends Record<string, PluginRegistryEntry>> = { [K in keyof R]: R[K] extends {
|
|
59
58
|
module: infer M;
|
|
60
|
-
} ? M : K extends keyof RegisteredPlugins ? RegisteredPlugins[K] : never };
|
|
59
|
+
} ? M : K extends keyof RegisteredPlugins ? RegisteredPlugins[K] : never; };
|
|
61
60
|
/**
|
|
62
61
|
* Extract contract type from plugin binding
|
|
63
62
|
*/
|
package/dist/types.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.cts","names":[],"sources":["../src/types.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.cts","names":[],"sources":["../src/types.ts"],"mappings":";;;;;;;;;;;;;;;;;UAuBiB;;;;KAKL,YAAY,OAAO,mBAAmB,WAAW,WAAW;;;;KAK5D;UACF;EACR;IACE,UAAU;IACV,WAAW;IACX,SAAS;IACT,SAAS;;;;;;KAOD;EACN,QAAQ;EAAsB;EAAiB;EAAkB;;EACjE;EAAgB;EAAkB;;;;;KAK5B,kBAAkB,KAAK;EAAY,cAAc;IAAM;;;;KAKvD,yBAAyB,UAAU,eAAe,2BAC3D,WAAW,IAAI,EAAE;EAAa,cAAc;IACzC,IACA,gBAAgB,oBACd,kBAAkB;;;;KAOd,eAAe,KAAK;EAC9B;IAAW,gBAAgB,UAAU;;IAEnC;;;;KAMQ,gBAAgB,KAAK;EAAY;IAAW,iBAAiB,UAAU;;IAC/E;;;;KAMQ,cAAc,KAAK;EAAY;IAAW,eAAe,UAAU;;IAC3E;;;;KAMQ,cAAc,KAAK;EAC7B;IAAW,eAAe,UAAU;;IAElC;;;;;KAOQ,iBAAiB,KAAK,OAAO,eAAe;;;;KAK5C,iBAAiB,KAAK,aAAa,iBAAiB;;;;;;KAOpD,iBAAiB,gBAAgB,GAAG,IAAI,qBAAqB,EAAE;EACzE,eAAe;IAEb;EACE,gBAAgB,UAAU;EAC1B,iBAAiB,UAAU;EAC3B,eAAe,UAAU;EACzB,eAAe,wBAAwB;IAEvC,OAAO,GAAG,GAAG,GAAG;;;;KAOV,kBAAkB,gBAAgB,GAAG,IAAI,qBAAqB,iBAAiB,GAAG;;;;KAKlF,mBAAmB,KAC7B,cAAc,WAAW,YAAY,iBAAiB,cAAc;;;;KAK1D,kBAAkB;EAC5B,WAAW,iBAAiB,gBAAgB;EAC5C,SAAS,iBAAiB,cAAc;;;;;KAM9B,UAAU,UAAU,aAC9B,UAAU,OAAO,mBAAmB,WAAW,WAAW,6BAA6B,SACnF;;;;KAMM;WACD;WACA;WACA;;;;;KAMC,iBAAiB,eAAe;;;;KAKhC,yBAAyB,eAAe;;;;;UAMnC;GACd;;;;;UAMc,aAAa,UAAU,YAAY;WACzC,gBAAgB;WAChB,UAAU;;;;;UAMJ,eAAe,UAAU,YAAY;WAC3C,QAAQ;WACR,UAAU;;;;;UAMJ,kBAAkB,UAAU,YAAY;WAC9C,QAAQ;WACR,UAAU;WACV;IACP,WAAW,kBAAkB;IAC7B,SAAS,kBAAkB;;WAEpB,SAAS,UAAU;WACnB,OAAO,MAAM;;;;;KAMnB,oBAAoB,gBAAgB,GAAG,IAAI,qBAAqB,EAAE;EACrE,eAAe;IAEb;EACE,UAAU;EACV,WAAW;EACX,SAAS;EACT,SAAS;wBAGI,4IACF;;;;;;KAOL,gBAAgB,gBAAgB,GAAG,IAAI,qBACjD,oBAAoB,GAAG;WAER,eAAe,UAAU,mBAAmB,EAAE,QAAQ,iBAAiB,EAAE;WACzE,QAAQ,iBAAiB,EAAE;WAC3B,UAAU;WACV,aAAa,kBAAkB,iBAAiB,GAAG;IAE9D,oBAAoB,GAAG;;;;UAKZ;EACf;EACA;EACA;EACA;EACA;EACA;;;;;;;;KASG,WAAW,KAAK;EAAY,uBAAuB;IAAM,IAAI;;;;kBAKjD;;;;;;;;;;;;;;;;;;OAkBH,MACV,kBACA,SAAS,qBACP,gBAAgB,WAAW,UAAU,gBAAgB,GAAG,WAAW;;;;;UAMxD,oBACf,UAAU,eAAe,uBAAuB,eAAe;EAE/D,UAAU;EACV,UAAU;EACV,UAAU;;;;;;UAOK;EACf,UAAU;EACV,UAAU;EACV,UAAU"}
|
package/dist/types.d.mts
CHANGED
|
@@ -2,7 +2,6 @@ import { Plugin } from "./plugin.mjs";
|
|
|
2
2
|
import { AnyContractRouter, AnySchema, InferSchemaInput, InferSchemaOutput } from "@orpc/contract";
|
|
3
3
|
import { Scope } from "effect";
|
|
4
4
|
import { Router, RouterClient } from "@orpc/server";
|
|
5
|
-
|
|
6
5
|
//#region src/types.d.ts
|
|
7
6
|
/**
|
|
8
7
|
* Registry bindings interface - populated via module augmentation
|
|
@@ -57,7 +56,7 @@ type ExtractPluginType<E> = E extends {
|
|
|
57
56
|
*/
|
|
58
57
|
type InferRegistryFromEntries<R extends Record<string, PluginRegistryEntry>> = { [K in keyof R]: R[K] extends {
|
|
59
58
|
module: infer M;
|
|
60
|
-
} ? M : K extends keyof RegisteredPlugins ? RegisteredPlugins[K] : never };
|
|
59
|
+
} ? M : K extends keyof RegisteredPlugins ? RegisteredPlugins[K] : never; };
|
|
61
60
|
/**
|
|
62
61
|
* Extract contract type from plugin binding
|
|
63
62
|
*/
|
package/dist/types.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.mts","names":[],"sources":["../src/types.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.mts","names":[],"sources":["../src/types.ts"],"mappings":";;;;;;;;;;;;;;;;;UAuBiB;;;;KAKL,YAAY,OAAO,mBAAmB,WAAW,WAAW;;;;KAK5D;UACF;EACR;IACE,UAAU;IACV,WAAW;IACX,SAAS;IACT,SAAS;;;;;;KAOD;EACN,QAAQ;EAAsB;EAAiB;EAAkB;;EACjE;EAAgB;EAAkB;;;;;KAK5B,kBAAkB,KAAK;EAAY,cAAc;IAAM;;;;KAKvD,yBAAyB,UAAU,eAAe,2BAC3D,WAAW,IAAI,EAAE;EAAa,cAAc;IACzC,IACA,gBAAgB,oBACd,kBAAkB;;;;KAOd,eAAe,KAAK;EAC9B;IAAW,gBAAgB,UAAU;;IAEnC;;;;KAMQ,gBAAgB,KAAK;EAAY;IAAW,iBAAiB,UAAU;;IAC/E;;;;KAMQ,cAAc,KAAK;EAAY;IAAW,eAAe,UAAU;;IAC3E;;;;KAMQ,cAAc,KAAK;EAC7B;IAAW,eAAe,UAAU;;IAElC;;;;;KAOQ,iBAAiB,KAAK,OAAO,eAAe;;;;KAK5C,iBAAiB,KAAK,aAAa,iBAAiB;;;;;;KAOpD,iBAAiB,gBAAgB,GAAG,IAAI,qBAAqB,EAAE;EACzE,eAAe;IAEb;EACE,gBAAgB,UAAU;EAC1B,iBAAiB,UAAU;EAC3B,eAAe,UAAU;EACzB,eAAe,wBAAwB;IAEvC,OAAO,GAAG,GAAG,GAAG;;;;KAOV,kBAAkB,gBAAgB,GAAG,IAAI,qBAAqB,iBAAiB,GAAG;;;;KAKlF,mBAAmB,KAC7B,cAAc,WAAW,YAAY,iBAAiB,cAAc;;;;KAK1D,kBAAkB;EAC5B,WAAW,iBAAiB,gBAAgB;EAC5C,SAAS,iBAAiB,cAAc;;;;;KAM9B,UAAU,UAAU,aAC9B,UAAU,OAAO,mBAAmB,WAAW,WAAW,6BAA6B,SACnF;;;;KAMM;WACD;WACA;WACA;;;;;KAMC,iBAAiB,eAAe;;;;KAKhC,yBAAyB,eAAe;;;;;UAMnC;GACd;;;;;UAMc,aAAa,UAAU,YAAY;WACzC,gBAAgB;WAChB,UAAU;;;;;UAMJ,eAAe,UAAU,YAAY;WAC3C,QAAQ;WACR,UAAU;;;;;UAMJ,kBAAkB,UAAU,YAAY;WAC9C,QAAQ;WACR,UAAU;WACV;IACP,WAAW,kBAAkB;IAC7B,SAAS,kBAAkB;;WAEpB,SAAS,UAAU;WACnB,OAAO,MAAM;;;;;KAMnB,oBAAoB,gBAAgB,GAAG,IAAI,qBAAqB,EAAE;EACrE,eAAe;IAEb;EACE,UAAU;EACV,WAAW;EACX,SAAS;EACT,SAAS;wBAGI,4IACF;;;;;;KAOL,gBAAgB,gBAAgB,GAAG,IAAI,qBACjD,oBAAoB,GAAG;WAER,eAAe,UAAU,mBAAmB,EAAE,QAAQ,iBAAiB,EAAE;WACzE,QAAQ,iBAAiB,EAAE;WAC3B,UAAU;WACV,aAAa,kBAAkB,iBAAiB,GAAG;IAE9D,oBAAoB,GAAG;;;;UAKZ;EACf;EACA;EACA;EACA;EACA;EACA;;;;;;;;KASG,WAAW,KAAK;EAAY,uBAAuB;IAAM,IAAI;;;;kBAKjD;;;;;;;;;;;;;;;;;;OAkBH,MACV,kBACA,SAAS,qBACP,gBAAgB,WAAW,UAAU,gBAAgB,GAAG,WAAW;;;;;UAMxD,oBACf,UAAU,eAAe,uBAAuB,eAAe;EAE/D,UAAU;EACV,UAAU;EACV,UAAU;;;;;;UAOK;EACf,UAAU;EACV,UAAU;EACV,UAAU"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "every-plugin",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.10.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -94,7 +94,7 @@
|
|
|
94
94
|
"@rspack/core": "1.7.11",
|
|
95
95
|
"typescript": "^5.9.3",
|
|
96
96
|
"effect": "3.21.2",
|
|
97
|
-
"zod": "4.3
|
|
97
|
+
"zod": "4.4.3",
|
|
98
98
|
"@orpc/contract": "1.14.3",
|
|
99
99
|
"@orpc/server": "1.14.3",
|
|
100
100
|
"@orpc/client": "1.14.3",
|
|
@@ -114,7 +114,7 @@
|
|
|
114
114
|
"@vitest/ui": "4.1.5",
|
|
115
115
|
"bun-types": "^1.3.7",
|
|
116
116
|
"sirv": "^3.0.2",
|
|
117
|
-
"tsdown": "^0.
|
|
117
|
+
"tsdown": "^0.22.0",
|
|
118
118
|
"vite-tsconfig-paths": "^6.0.5",
|
|
119
119
|
"vitest": "^4.1.8"
|
|
120
120
|
},
|
|
@@ -122,9 +122,9 @@
|
|
|
122
122
|
"@module-federation/enhanced": "^2.4.0",
|
|
123
123
|
"@module-federation/node": "^2.7.42",
|
|
124
124
|
"@module-federation/runtime-core": "^2.4.0",
|
|
125
|
-
"@orpc/contract": "
|
|
126
|
-
"@orpc/experimental-publisher": "
|
|
127
|
-
"@orpc/server": "
|
|
125
|
+
"@orpc/contract": "1.14.3",
|
|
126
|
+
"@orpc/experimental-publisher": "1.14.2",
|
|
127
|
+
"@orpc/server": "1.14.3",
|
|
128
128
|
"@orpc/tanstack-query": "1.14.3"
|
|
129
129
|
},
|
|
130
130
|
"keywords": [
|
|
@@ -18,6 +18,60 @@ const normalizePrefix = (prefix?: string): string => {
|
|
|
18
18
|
return cleaned ? `/${cleaned}` : "";
|
|
19
19
|
};
|
|
20
20
|
|
|
21
|
+
const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
22
|
+
|
|
23
|
+
const readRuntimeConfigFromEnv = (): any => {
|
|
24
|
+
const raw = process.env.BOS_RUNTIME_CONFIG;
|
|
25
|
+
if (!raw) return null;
|
|
26
|
+
try {
|
|
27
|
+
return JSON.parse(raw);
|
|
28
|
+
} catch {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const collectSiblingRemotes = (runtimeConfig: any, pluginId: string) => {
|
|
34
|
+
const siblings: Record<string, { remote: string }> = {};
|
|
35
|
+
|
|
36
|
+
const isApi = pluginId === "api" || runtimeConfig?.api?.name === pluginId;
|
|
37
|
+
|
|
38
|
+
const ownKey = runtimeConfig?.plugins?.[pluginId] ? pluginId : null;
|
|
39
|
+
let dependsOn: string[] = [];
|
|
40
|
+
if (ownKey) {
|
|
41
|
+
dependsOn = runtimeConfig.plugins[ownKey].dependsOn ?? [];
|
|
42
|
+
} else if (isApi) {
|
|
43
|
+
dependsOn = runtimeConfig?.api?.dependsOn ?? [];
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
for (const depId of dependsOn) {
|
|
47
|
+
const dep = runtimeConfig?.plugins?.[depId];
|
|
48
|
+
if (!dep || dep.source !== "local" || !dep.url) continue;
|
|
49
|
+
if (depId === pluginId) continue;
|
|
50
|
+
const base = dep.url.replace(/\/$/, "");
|
|
51
|
+
siblings[depId] = { remote: `${base}/remoteEntry.js` };
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return { siblings, dependsOn };
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const loadPluginWithRetry = async (
|
|
58
|
+
runtime: any,
|
|
59
|
+
pluginId: string,
|
|
60
|
+
timeoutMs = 90000,
|
|
61
|
+
): Promise<any> => {
|
|
62
|
+
const deadline = Date.now() + timeoutMs;
|
|
63
|
+
let lastError: unknown;
|
|
64
|
+
while (Date.now() < deadline) {
|
|
65
|
+
try {
|
|
66
|
+
return await runtime.usePlugin(pluginId, { variables: {}, secrets: {} } as any);
|
|
67
|
+
} catch (error) {
|
|
68
|
+
lastError = error;
|
|
69
|
+
await sleep(500);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
throw lastError;
|
|
73
|
+
};
|
|
74
|
+
|
|
21
75
|
export function setupPluginMiddleware(
|
|
22
76
|
devServer: any,
|
|
23
77
|
pluginInfo: PluginInfo,
|
|
@@ -49,18 +103,38 @@ export function setupPluginMiddleware(
|
|
|
49
103
|
|
|
50
104
|
const pluginId = devConfig?.pluginId || pluginInfo.normalizedName;
|
|
51
105
|
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
106
|
+
const runtimeConfig = readRuntimeConfigFromEnv();
|
|
107
|
+
const { siblings, dependsOn } = collectSiblingRemotes(runtimeConfig, pluginId);
|
|
108
|
+
|
|
109
|
+
if (dependsOn.length > 0) {
|
|
110
|
+
console.log(`│ 🔗 Loading sibling plugin(s) for ${pluginId}: ${dependsOn.join(", ")}`);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const registry: Record<string, { remote: string }> = {
|
|
114
|
+
[pluginId]: {
|
|
115
|
+
remote: `http://localhost:${port}/remoteEntry.js`,
|
|
57
116
|
},
|
|
117
|
+
...siblings,
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
const runtime = createPluginRuntime({
|
|
121
|
+
registry,
|
|
58
122
|
});
|
|
59
123
|
|
|
60
124
|
const defaultConfig = { variables: {}, secrets: {} };
|
|
61
125
|
|
|
62
|
-
|
|
63
|
-
const
|
|
126
|
+
const pluginsMap: Record<string, unknown> = {};
|
|
127
|
+
for (const depId of Object.keys(siblings)) {
|
|
128
|
+
const dep = await loadPluginWithRetry(runtime, depId);
|
|
129
|
+
pluginsMap[depId] = dep.createClient;
|
|
130
|
+
console.log(`│ ✅ Loaded dependency plugin: ${depId}`);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
const loaded: any = await runtime.usePlugin<typeof pluginId>(
|
|
134
|
+
pluginId,
|
|
135
|
+
(devConfig?.config ?? defaultConfig) as any,
|
|
136
|
+
Object.keys(pluginsMap).length > 0 ? pluginsMap : undefined,
|
|
137
|
+
);
|
|
64
138
|
|
|
65
139
|
cleanup = async () => {
|
|
66
140
|
handlers.rpc = null;
|
package/src/plugin.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { AnyContractRouter, AnySchema, InferSchemaOutput } from "@orpc/cont
|
|
|
2
2
|
import { ORPCError } from "@orpc/contract";
|
|
3
3
|
import type { Implementer, Router } from "@orpc/server";
|
|
4
4
|
import { implement, onError } from "@orpc/server";
|
|
5
|
-
import { Effect, type Context as EffectContext, type Layer, type Scope } from "effect";
|
|
5
|
+
import { Context, Effect, type Context as EffectContext, type Layer, type Scope } from "effect";
|
|
6
6
|
import { extractFromFiberFailure, formatORPCError } from "./runtime/errors";
|
|
7
7
|
|
|
8
8
|
type ContextOutput<T> = T extends AnySchema ? InferSchemaOutput<T> : Record<string, never>;
|
|
@@ -31,6 +31,8 @@ export type PluginServicesTools = {
|
|
|
31
31
|
buildService: <T>(tag: T, layer: Layer.Layer<any, any, any>) => Effect.Effect<ServiceOf<T>>;
|
|
32
32
|
};
|
|
33
33
|
|
|
34
|
+
export class PluginIdTag extends Context.Tag("PluginId")<PluginIdTag, string>() {}
|
|
35
|
+
|
|
34
36
|
type PluginDefinition<
|
|
35
37
|
V extends AnySchema,
|
|
36
38
|
S extends AnySchema,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { InferSchemaInput, InferSchemaOutput } from "@orpc/contract";
|
|
2
2
|
import { Context, Effect, Context as EffectContext, Exit, Layer, Scope } from "effect";
|
|
3
3
|
import type { z } from "zod";
|
|
4
|
-
import type
|
|
4
|
+
import { PluginIdTag, type PluginServicesTools } from "../../plugin";
|
|
5
5
|
import type {
|
|
6
6
|
AnyPlugin,
|
|
7
7
|
AnyPluginConstructor,
|
|
@@ -259,6 +259,7 @@ export class PluginLoaderService extends Effect.Service<PluginLoaderService>()(
|
|
|
259
259
|
tools,
|
|
260
260
|
)
|
|
261
261
|
.pipe(
|
|
262
|
+
Effect.provideService(PluginIdTag, plugin.id),
|
|
262
263
|
Effect.provideService(Scope.Scope, scope),
|
|
263
264
|
Effect.tapError(() =>
|
|
264
265
|
Scope.close(scope, Exit.succeed(undefined)).pipe(
|