beeai-framework 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/adapters/amazon-bedrock/backend/chat.cjs.map +1 -1
- package/dist/adapters/amazon-bedrock/backend/chat.d.cts +1 -1
- package/dist/adapters/amazon-bedrock/backend/chat.d.ts +1 -1
- package/dist/adapters/amazon-bedrock/backend/chat.js.map +1 -1
- package/dist/adapters/amazon-bedrock/backend/client.cjs.map +1 -1
- package/dist/adapters/amazon-bedrock/backend/client.js.map +1 -1
- package/dist/adapters/amazon-bedrock/backend/embedding.cjs.map +1 -1
- package/dist/adapters/amazon-bedrock/backend/embedding.d.cts +1 -1
- package/dist/adapters/amazon-bedrock/backend/embedding.d.ts +1 -1
- package/dist/adapters/amazon-bedrock/backend/embedding.js.map +1 -1
- package/dist/adapters/anthropic/backend/chat.cjs.map +1 -1
- package/dist/adapters/anthropic/backend/chat.d.cts +1 -1
- package/dist/adapters/anthropic/backend/chat.d.ts +1 -1
- package/dist/adapters/anthropic/backend/chat.js.map +1 -1
- package/dist/adapters/anthropic/backend/client.cjs.map +1 -1
- package/dist/adapters/anthropic/backend/client.js.map +1 -1
- package/dist/adapters/anthropic/backend/embedding.cjs.map +1 -1
- package/dist/adapters/anthropic/backend/embedding.d.cts +1 -1
- package/dist/adapters/anthropic/backend/embedding.d.ts +1 -1
- package/dist/adapters/anthropic/backend/embedding.js.map +1 -1
- package/dist/adapters/azure-openai/backend/chat.cjs.map +1 -1
- package/dist/adapters/azure-openai/backend/chat.d.cts +2 -2
- package/dist/adapters/azure-openai/backend/chat.d.ts +2 -2
- package/dist/adapters/azure-openai/backend/chat.js.map +1 -1
- package/dist/adapters/azure-openai/backend/client.cjs.map +1 -1
- package/dist/adapters/azure-openai/backend/client.js.map +1 -1
- package/dist/adapters/azure-openai/backend/embedding.cjs.map +1 -1
- package/dist/adapters/azure-openai/backend/embedding.d.cts +1 -1
- package/dist/adapters/azure-openai/backend/embedding.d.ts +1 -1
- package/dist/adapters/azure-openai/backend/embedding.js.map +1 -1
- package/dist/adapters/dummy/backend/chat.cjs.map +1 -1
- package/dist/adapters/dummy/backend/chat.d.cts +1 -1
- package/dist/adapters/dummy/backend/chat.d.ts +1 -1
- package/dist/adapters/dummy/backend/chat.js.map +1 -1
- package/dist/adapters/dummy/backend/embedding.cjs.map +1 -1
- package/dist/adapters/dummy/backend/embedding.d.cts +1 -1
- package/dist/adapters/dummy/backend/embedding.d.ts +1 -1
- package/dist/adapters/dummy/backend/embedding.js.map +1 -1
- package/dist/adapters/google-vertex/backend/chat.cjs.map +1 -1
- package/dist/adapters/google-vertex/backend/chat.d.cts +1 -1
- package/dist/adapters/google-vertex/backend/chat.d.ts +1 -1
- package/dist/adapters/google-vertex/backend/chat.js.map +1 -1
- package/dist/adapters/google-vertex/backend/client.cjs.map +1 -1
- package/dist/adapters/google-vertex/backend/client.js.map +1 -1
- package/dist/adapters/google-vertex/backend/embedding.cjs.map +1 -1
- package/dist/adapters/google-vertex/backend/embedding.d.cts +1 -1
- package/dist/adapters/google-vertex/backend/embedding.d.ts +1 -1
- package/dist/adapters/google-vertex/backend/embedding.js.map +1 -1
- package/dist/adapters/groq/backend/chat.cjs.map +1 -1
- package/dist/adapters/groq/backend/chat.d.cts +1 -1
- package/dist/adapters/groq/backend/chat.d.ts +1 -1
- package/dist/adapters/groq/backend/chat.js.map +1 -1
- package/dist/adapters/groq/backend/client.cjs.map +1 -1
- package/dist/adapters/groq/backend/client.js.map +1 -1
- package/dist/adapters/groq/backend/embedding.cjs.map +1 -1
- package/dist/adapters/groq/backend/embedding.d.cts +1 -1
- package/dist/adapters/groq/backend/embedding.d.ts +1 -1
- package/dist/adapters/groq/backend/embedding.js.map +1 -1
- package/dist/adapters/langchain/backend/chat.cjs.map +1 -1
- package/dist/adapters/langchain/backend/chat.d.cts +1 -1
- package/dist/adapters/langchain/backend/chat.d.ts +1 -1
- package/dist/adapters/langchain/backend/chat.js.map +1 -1
- package/dist/adapters/langchain/backend/embedding.cjs.map +1 -1
- package/dist/adapters/langchain/backend/embedding.d.cts +1 -1
- package/dist/adapters/langchain/backend/embedding.d.ts +1 -1
- package/dist/adapters/langchain/backend/embedding.js.map +1 -1
- package/dist/adapters/langchain/tools.cjs.map +1 -1
- package/dist/adapters/langchain/tools.d.cts +1 -1
- package/dist/adapters/langchain/tools.d.ts +1 -1
- package/dist/adapters/langchain/tools.js.map +1 -1
- package/dist/adapters/ollama/backend/chat.cjs.map +1 -1
- package/dist/adapters/ollama/backend/chat.d.cts +1 -1
- package/dist/adapters/ollama/backend/chat.d.ts +1 -1
- package/dist/adapters/ollama/backend/chat.js.map +1 -1
- package/dist/adapters/ollama/backend/client.cjs.map +1 -1
- package/dist/adapters/ollama/backend/client.js.map +1 -1
- package/dist/adapters/ollama/backend/embedding.cjs.map +1 -1
- package/dist/adapters/ollama/backend/embedding.d.cts +1 -1
- package/dist/adapters/ollama/backend/embedding.d.ts +1 -1
- package/dist/adapters/ollama/backend/embedding.js.map +1 -1
- package/dist/adapters/openai/backend/chat.cjs.map +1 -1
- package/dist/adapters/openai/backend/chat.d.cts +1 -1
- package/dist/adapters/openai/backend/chat.d.ts +1 -1
- package/dist/adapters/openai/backend/chat.js.map +1 -1
- package/dist/adapters/openai/backend/client.cjs.map +1 -1
- package/dist/adapters/openai/backend/client.js.map +1 -1
- package/dist/adapters/openai/backend/embedding.cjs.map +1 -1
- package/dist/adapters/openai/backend/embedding.d.cts +2 -2
- package/dist/adapters/openai/backend/embedding.d.ts +2 -2
- package/dist/adapters/openai/backend/embedding.js.map +1 -1
- package/dist/adapters/vercel/backend/chat.cjs +2 -2
- package/dist/adapters/vercel/backend/chat.cjs.map +1 -1
- package/dist/adapters/vercel/backend/chat.d.cts +1 -1
- package/dist/adapters/vercel/backend/chat.d.ts +1 -1
- package/dist/adapters/vercel/backend/chat.js +2 -2
- package/dist/adapters/vercel/backend/chat.js.map +1 -1
- package/dist/adapters/vercel/backend/embedding.cjs.map +1 -1
- package/dist/adapters/vercel/backend/embedding.d.cts +5 -5
- package/dist/adapters/vercel/backend/embedding.d.ts +5 -5
- package/dist/adapters/vercel/backend/embedding.js.map +1 -1
- package/dist/adapters/watsonx/backend/chat.cjs.map +1 -1
- package/dist/adapters/watsonx/backend/chat.d.cts +1 -1
- package/dist/adapters/watsonx/backend/chat.d.ts +1 -1
- package/dist/adapters/watsonx/backend/chat.js.map +1 -1
- package/dist/adapters/watsonx/backend/client.cjs.map +1 -1
- package/dist/adapters/watsonx/backend/client.js.map +1 -1
- package/dist/adapters/watsonx/backend/embedding.cjs.map +1 -1
- package/dist/adapters/watsonx/backend/embedding.d.cts +1 -1
- package/dist/adapters/watsonx/backend/embedding.d.ts +1 -1
- package/dist/adapters/watsonx/backend/embedding.js.map +1 -1
- package/dist/{agent-D9gpIPf2.d.ts → agent-DNfflu8t.d.ts} +4 -4
- package/dist/{agent-xmwFrFrh.d.cts → agent-wkCuP7e1.d.cts} +4 -4
- package/dist/agents/base.cjs +1 -1
- package/dist/agents/base.cjs.map +1 -1
- package/dist/agents/base.d.cts +2 -2
- package/dist/agents/base.d.ts +2 -2
- package/dist/agents/base.js +1 -1
- package/dist/agents/base.js.map +1 -1
- package/dist/agents/bee/agent.cjs.map +1 -1
- package/dist/agents/bee/agent.d.cts +3 -3
- package/dist/agents/bee/agent.d.ts +3 -3
- package/dist/agents/bee/agent.js.map +1 -1
- package/dist/agents/bee/prompts.cjs.map +1 -1
- package/dist/agents/bee/prompts.js.map +1 -1
- package/dist/agents/bee/runners/base.cjs.map +1 -1
- package/dist/agents/bee/runners/base.d.cts +3 -3
- package/dist/agents/bee/runners/base.d.ts +3 -3
- package/dist/agents/bee/runners/base.js.map +1 -1
- package/dist/agents/bee/runners/deep-think/prompts.cjs.map +1 -1
- package/dist/agents/bee/runners/deep-think/prompts.js.map +1 -1
- package/dist/agents/bee/runners/deep-think/runner.cjs +11 -11
- package/dist/agents/bee/runners/deep-think/runner.cjs.map +1 -1
- package/dist/agents/bee/runners/deep-think/runner.d.cts +3 -3
- package/dist/agents/bee/runners/deep-think/runner.d.ts +3 -3
- package/dist/agents/bee/runners/deep-think/runner.js +2 -2
- package/dist/agents/bee/runners/deep-think/runner.js.map +1 -1
- package/dist/agents/bee/runners/default/runner.cjs.map +1 -1
- package/dist/agents/bee/runners/default/runner.d.cts +3 -3
- package/dist/agents/bee/runners/default/runner.d.ts +3 -3
- package/dist/agents/bee/runners/default/runner.js +1 -1
- package/dist/agents/bee/runners/default/runner.js.map +1 -1
- package/dist/agents/bee/runners/default/runner.spec.cjs.map +1 -1
- package/dist/agents/bee/runners/default/runner.spec.js.map +1 -1
- package/dist/agents/bee/runners/granite/prompts.cjs.map +1 -1
- package/dist/agents/bee/runners/granite/prompts.js.map +1 -1
- package/dist/agents/bee/runners/granite/runner.cjs +11 -11
- package/dist/agents/bee/runners/granite/runner.cjs.map +1 -1
- package/dist/agents/bee/runners/granite/runner.d.cts +3 -3
- package/dist/agents/bee/runners/granite/runner.d.ts +3 -3
- package/dist/agents/bee/runners/granite/runner.js +2 -2
- package/dist/agents/bee/runners/granite/runner.js.map +1 -1
- package/dist/agents/bee/types.d.cts +1 -1
- package/dist/agents/bee/types.d.ts +1 -1
- package/dist/agents/experimental/replan/agent.cjs.map +1 -1
- package/dist/agents/experimental/replan/agent.d.cts +2 -2
- package/dist/agents/experimental/replan/agent.d.ts +2 -2
- package/dist/agents/experimental/replan/agent.js.map +1 -1
- package/dist/agents/experimental/replan/prompts.cjs.map +1 -1
- package/dist/agents/experimental/replan/prompts.d.cts +1 -1
- package/dist/agents/experimental/replan/prompts.d.ts +1 -1
- package/dist/agents/experimental/replan/prompts.js.map +1 -1
- package/dist/agents/experimental/streamlit/agent.cjs.map +1 -1
- package/dist/agents/experimental/streamlit/agent.d.cts +2 -2
- package/dist/agents/experimental/streamlit/agent.d.ts +2 -2
- package/dist/agents/experimental/streamlit/agent.js.map +1 -1
- package/dist/agents/experimental/streamlit/prompts.cjs.map +1 -1
- package/dist/agents/experimental/streamlit/prompts.js.map +1 -1
- package/dist/agents/types.d.cts +2 -2
- package/dist/agents/types.d.ts +2 -2
- package/dist/backend/backend.cjs.map +1 -1
- package/dist/backend/backend.d.cts +1 -1
- package/dist/backend/backend.d.ts +1 -1
- package/dist/backend/backend.js.map +1 -1
- package/dist/backend/chat.cjs +1 -1
- package/dist/backend/chat.cjs.map +1 -1
- package/dist/backend/chat.d.cts +1 -1
- package/dist/backend/chat.d.ts +1 -1
- package/dist/backend/chat.js +1 -1
- package/dist/backend/chat.js.map +1 -1
- package/dist/backend/client.cjs.map +1 -1
- package/dist/backend/client.js.map +1 -1
- package/dist/backend/constants.cjs.map +1 -1
- package/dist/backend/constants.js.map +1 -1
- package/dist/backend/core.d.cts +1 -1
- package/dist/backend/core.d.ts +1 -1
- package/dist/backend/embedding.cjs +1 -1
- package/dist/backend/embedding.cjs.map +1 -1
- package/dist/backend/embedding.d.cts +1 -1
- package/dist/backend/embedding.d.ts +1 -1
- package/dist/backend/embedding.js +1 -1
- package/dist/backend/embedding.js.map +1 -1
- package/dist/backend/errors.cjs.map +1 -1
- package/dist/backend/errors.js.map +1 -1
- package/dist/backend/message.cjs.map +1 -1
- package/dist/backend/message.js.map +1 -1
- package/dist/backend/utils.cjs +2 -1
- package/dist/backend/utils.cjs.map +1 -1
- package/dist/backend/utils.js +2 -1
- package/dist/backend/utils.js.map +1 -1
- package/dist/{base-daM6fHUP.d.cts → base-Csr9guq2.d.cts} +1 -1
- package/dist/{base-mmG-8Pk9.d.ts → base-DHhpWHQm.d.ts} +1 -1
- package/dist/cache/base.cjs.map +1 -1
- package/dist/cache/base.js.map +1 -1
- package/dist/cache/decoratorCache.cjs.map +1 -1
- package/dist/cache/decoratorCache.js.map +1 -1
- package/dist/cache/fileCache.cjs.map +1 -1
- package/dist/cache/fileCache.js.map +1 -1
- package/dist/cache/nullCache.cjs.map +1 -1
- package/dist/cache/nullCache.js.map +1 -1
- package/dist/cache/slidingCache.cjs.map +1 -1
- package/dist/cache/slidingCache.js.map +1 -1
- package/dist/cache/unconstrainedCache.cjs.map +1 -1
- package/dist/cache/unconstrainedCache.js.map +1 -1
- package/dist/context.cjs.map +1 -1
- package/dist/context.d.cts +1 -1
- package/dist/context.d.ts +1 -1
- package/dist/context.js.map +1 -1
- package/dist/emitter/emitter.cjs.map +1 -1
- package/dist/emitter/emitter.d.cts +1 -1
- package/dist/emitter/emitter.d.ts +1 -1
- package/dist/emitter/emitter.js.map +1 -1
- package/dist/emitter/errors.cjs.map +1 -1
- package/dist/emitter/errors.js.map +1 -1
- package/dist/emitter/types.d.cts +1 -1
- package/dist/emitter/types.d.ts +1 -1
- package/dist/emitter/utils.cjs.map +1 -1
- package/dist/emitter/utils.js.map +1 -1
- package/dist/errors.cjs +4 -4
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.js +4 -4
- package/dist/errors.js.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/instrumentation/config.cjs.map +1 -1
- package/dist/instrumentation/config.js.map +1 -1
- package/dist/instrumentation/create-telemetry-middleware.cjs +1 -1
- package/dist/instrumentation/create-telemetry-middleware.cjs.map +1 -1
- package/dist/instrumentation/create-telemetry-middleware.d.cts +1 -1
- package/dist/instrumentation/create-telemetry-middleware.d.ts +1 -1
- package/dist/instrumentation/create-telemetry-middleware.js +1 -1
- package/dist/instrumentation/create-telemetry-middleware.js.map +1 -1
- package/dist/instrumentation/helpers/create-span.cjs.map +1 -1
- package/dist/instrumentation/helpers/create-span.js.map +1 -1
- package/dist/instrumentation/helpers/get-error-safe.cjs.map +1 -1
- package/dist/instrumentation/helpers/get-error-safe.js.map +1 -1
- package/dist/instrumentation/helpers/get-serialized-object-safe.cjs.map +1 -1
- package/dist/instrumentation/helpers/get-serialized-object-safe.js.map +1 -1
- package/dist/instrumentation/helpers/id-name-manager.cjs.map +1 -1
- package/dist/instrumentation/helpers/id-name-manager.js.map +1 -1
- package/dist/instrumentation/helpers/trace-serializer.cjs.map +1 -1
- package/dist/instrumentation/helpers/trace-serializer.js.map +1 -1
- package/dist/instrumentation/helpers/utils.cjs.map +1 -1
- package/dist/instrumentation/helpers/utils.d.cts +1 -1
- package/dist/instrumentation/helpers/utils.d.ts +1 -1
- package/dist/instrumentation/helpers/utils.js.map +1 -1
- package/dist/instrumentation/logger.cjs.map +1 -1
- package/dist/instrumentation/logger.js.map +1 -1
- package/dist/instrumentation/tracer.cjs.map +1 -1
- package/dist/instrumentation/tracer.js.map +1 -1
- package/dist/internals/env.cjs +2 -2
- package/dist/internals/env.cjs.map +1 -1
- package/dist/internals/env.js +2 -2
- package/dist/internals/env.js.map +1 -1
- package/dist/internals/fetcher.cjs.map +1 -1
- package/dist/internals/fetcher.d.cts +1 -1
- package/dist/internals/fetcher.d.ts +1 -1
- package/dist/internals/fetcher.js.map +1 -1
- package/dist/internals/helpers/array.cjs.map +1 -1
- package/dist/internals/helpers/array.js.map +1 -1
- package/dist/internals/helpers/cancellation.cjs.map +1 -1
- package/dist/internals/helpers/cancellation.js.map +1 -1
- package/dist/internals/helpers/counter.cjs.map +1 -1
- package/dist/internals/helpers/counter.js.map +1 -1
- package/dist/internals/helpers/general.cjs.map +1 -1
- package/dist/internals/helpers/general.js.map +1 -1
- package/dist/internals/helpers/guards.cjs.map +1 -1
- package/dist/internals/helpers/guards.js.map +1 -1
- package/dist/internals/helpers/hash.cjs.map +1 -1
- package/dist/internals/helpers/hash.js.map +1 -1
- package/dist/internals/helpers/map.cjs.map +1 -1
- package/dist/internals/helpers/map.js.map +1 -1
- package/dist/internals/helpers/math.cjs.map +1 -1
- package/dist/internals/helpers/math.js.map +1 -1
- package/dist/internals/helpers/number.cjs.map +1 -1
- package/dist/internals/helpers/number.js.map +1 -1
- package/dist/internals/helpers/object.cjs.map +1 -1
- package/dist/internals/helpers/object.js.map +1 -1
- package/dist/internals/helpers/paginate.cjs.map +1 -1
- package/dist/internals/helpers/paginate.js.map +1 -1
- package/dist/internals/helpers/promise.cjs.map +1 -1
- package/dist/internals/helpers/promise.js.map +1 -1
- package/dist/internals/helpers/prototype.cjs.map +1 -1
- package/dist/internals/helpers/prototype.js.map +1 -1
- package/dist/internals/helpers/retry.cjs.map +1 -1
- package/dist/internals/helpers/retry.js.map +1 -1
- package/dist/internals/helpers/retryable.cjs.map +1 -1
- package/dist/internals/helpers/retryable.js.map +1 -1
- package/dist/internals/helpers/schema.cjs.map +1 -1
- package/dist/internals/helpers/schema.d.cts +1 -1
- package/dist/internals/helpers/schema.d.ts +1 -1
- package/dist/internals/helpers/schema.js.map +1 -1
- package/dist/internals/helpers/stream.cjs.map +1 -1
- package/dist/internals/helpers/stream.js.map +1 -1
- package/dist/internals/helpers/string.cjs.map +1 -1
- package/dist/internals/helpers/string.js.map +1 -1
- package/dist/internals/helpers/weakRef.cjs.map +1 -1
- package/dist/internals/helpers/weakRef.js.map +1 -1
- package/dist/internals/serializable.cjs.map +1 -1
- package/dist/internals/serializable.js.map +1 -1
- package/dist/internals/types.cjs.map +1 -1
- package/dist/internals/types.js.map +1 -1
- package/dist/logger/logger.cjs.map +1 -1
- package/dist/logger/logger.js.map +1 -1
- package/dist/logger/pretty.cjs.map +1 -1
- package/dist/logger/pretty.js.map +1 -1
- package/dist/memory/base.cjs.map +1 -1
- package/dist/memory/base.js.map +1 -1
- package/dist/memory/slidingMemory.cjs.map +1 -1
- package/dist/memory/slidingMemory.js.map +1 -1
- package/dist/memory/summarizeMemory.cjs.map +1 -1
- package/dist/memory/summarizeMemory.d.cts +1 -1
- package/dist/memory/summarizeMemory.d.ts +1 -1
- package/dist/memory/summarizeMemory.js.map +1 -1
- package/dist/memory/tokenMemory.cjs.map +1 -1
- package/dist/memory/tokenMemory.js.map +1 -1
- package/dist/memory/unconstrainedMemory.cjs.map +1 -1
- package/dist/memory/unconstrainedMemory.js.map +1 -1
- package/dist/parsers/errors.cjs.map +1 -1
- package/dist/parsers/errors.js.map +1 -1
- package/dist/parsers/field.cjs.map +1 -1
- package/dist/parsers/field.js.map +1 -1
- package/dist/parsers/linePrefix.cjs.map +1 -1
- package/dist/parsers/linePrefix.d.cts +1 -1
- package/dist/parsers/linePrefix.d.ts +1 -1
- package/dist/parsers/linePrefix.js.map +1 -1
- package/dist/serializer/error.cjs.map +1 -1
- package/dist/serializer/error.js.map +1 -1
- package/dist/serializer/serializer.cjs +3 -3
- package/dist/serializer/serializer.cjs.map +1 -1
- package/dist/serializer/serializer.js +2 -2
- package/dist/serializer/serializer.js.map +1 -1
- package/dist/serializer/utils.cjs.map +1 -1
- package/dist/serializer/utils.js.map +1 -1
- package/dist/template.cjs.map +1 -1
- package/dist/template.d.cts +1 -1
- package/dist/template.d.ts +1 -1
- package/dist/template.js.map +1 -1
- package/dist/tools/arxiv.cjs.map +1 -1
- package/dist/tools/arxiv.d.cts +2 -2
- package/dist/tools/arxiv.d.ts +2 -2
- package/dist/tools/arxiv.js.map +1 -1
- package/dist/tools/base.cjs.map +1 -1
- package/dist/tools/base.d.cts +2 -2
- package/dist/tools/base.d.ts +2 -2
- package/dist/tools/base.js.map +1 -1
- package/dist/tools/calculator.cjs.map +1 -1
- package/dist/tools/calculator.d.cts +1 -1
- package/dist/tools/calculator.d.ts +1 -1
- package/dist/tools/calculator.js.map +1 -1
- package/dist/tools/custom.cjs.map +1 -1
- package/dist/tools/custom.d.cts +1 -1
- package/dist/tools/custom.d.ts +1 -1
- package/dist/tools/custom.js.map +1 -1
- package/dist/tools/database/elasticsearch.cjs.map +1 -1
- package/dist/tools/database/elasticsearch.d.cts +1 -1
- package/dist/tools/database/elasticsearch.d.ts +1 -1
- package/dist/tools/database/elasticsearch.js.map +1 -1
- package/dist/tools/database/metadata.cjs.map +1 -1
- package/dist/tools/database/metadata.js.map +1 -1
- package/dist/tools/database/milvus.cjs.map +1 -1
- package/dist/tools/database/milvus.d.cts +1 -1
- package/dist/tools/database/milvus.d.ts +1 -1
- package/dist/tools/database/milvus.js.map +1 -1
- package/dist/tools/database/sql.cjs.map +1 -1
- package/dist/tools/database/sql.d.cts +3 -3
- package/dist/tools/database/sql.d.ts +3 -3
- package/dist/tools/database/sql.js.map +1 -1
- package/dist/tools/llm.cjs.map +1 -1
- package/dist/tools/llm.d.cts +1 -1
- package/dist/tools/llm.d.ts +1 -1
- package/dist/tools/llm.js +1 -1
- package/dist/tools/llm.js.map +1 -1
- package/dist/tools/mcp.cjs.map +1 -1
- package/dist/tools/mcp.d.cts +1 -1
- package/dist/tools/mcp.d.ts +1 -1
- package/dist/tools/mcp.js.map +1 -1
- package/dist/tools/openapi.cjs.map +1 -1
- package/dist/tools/openapi.d.cts +1 -1
- package/dist/tools/openapi.d.ts +1 -1
- package/dist/tools/openapi.js +1 -1
- package/dist/tools/openapi.js.map +1 -1
- package/dist/tools/python/output.cjs.map +1 -1
- package/dist/tools/python/output.d.cts +1 -1
- package/dist/tools/python/output.d.ts +1 -1
- package/dist/tools/python/output.js.map +1 -1
- package/dist/tools/python/python.cjs.map +1 -1
- package/dist/tools/python/python.d.cts +1 -1
- package/dist/tools/python/python.d.ts +1 -1
- package/dist/tools/python/python.js.map +1 -1
- package/dist/tools/python/storage.cjs.map +1 -1
- package/dist/tools/python/storage.js.map +1 -1
- package/dist/tools/search/base.cjs.map +1 -1
- package/dist/tools/search/base.d.cts +1 -1
- package/dist/tools/search/base.d.ts +1 -1
- package/dist/tools/search/base.js.map +1 -1
- package/dist/tools/search/duckDuckGoSearch.cjs +19 -19
- package/dist/tools/search/duckDuckGoSearch.cjs.map +1 -1
- package/dist/tools/search/duckDuckGoSearch.d.cts +2 -4
- package/dist/tools/search/duckDuckGoSearch.d.ts +2 -4
- package/dist/tools/search/duckDuckGoSearch.js +17 -13
- package/dist/tools/search/duckDuckGoSearch.js.map +1 -1
- package/dist/tools/search/googleSearch.cjs.map +1 -1
- package/dist/tools/search/googleSearch.d.cts +1 -1
- package/dist/tools/search/googleSearch.d.ts +1 -1
- package/dist/tools/search/googleSearch.js.map +1 -1
- package/dist/tools/search/searXNGSearch.cjs.map +1 -1
- package/dist/tools/search/searXNGSearch.d.cts +1 -1
- package/dist/tools/search/searXNGSearch.d.ts +1 -1
- package/dist/tools/search/searXNGSearch.js.map +1 -1
- package/dist/tools/search/wikipedia.cjs.map +1 -1
- package/dist/tools/search/wikipedia.d.cts +1 -1
- package/dist/tools/search/wikipedia.d.ts +1 -1
- package/dist/tools/search/wikipedia.js.map +1 -1
- package/dist/tools/similarity.cjs.map +1 -1
- package/dist/tools/similarity.d.cts +2 -2
- package/dist/tools/similarity.d.ts +2 -2
- package/dist/tools/similarity.js.map +1 -1
- package/dist/tools/weather/openMeteo.cjs.map +1 -1
- package/dist/tools/weather/openMeteo.d.cts +2 -2
- package/dist/tools/weather/openMeteo.d.ts +2 -2
- package/dist/tools/weather/openMeteo.js.map +1 -1
- package/dist/tools/web/webCrawler.cjs.map +1 -1
- package/dist/tools/web/webCrawler.d.cts +2 -2
- package/dist/tools/web/webCrawler.d.ts +2 -2
- package/dist/tools/web/webCrawler.js.map +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.cjs.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/workflows/agent.cjs.map +1 -1
- package/dist/workflows/agent.d.cts +2 -2
- package/dist/workflows/agent.d.ts +2 -2
- package/dist/workflows/agent.js.map +1 -1
- package/dist/workflows/workflow.cjs.map +1 -1
- package/dist/workflows/workflow.d.cts +1 -1
- package/dist/workflows/workflow.d.ts +1 -1
- package/dist/workflows/workflow.js.map +1 -1
- package/package.json +28 -20
- package/dist/{emitter-C9EN5B0j.d.cts → emitter-BWtGHYn0.d.cts} +1 -1
- package/dist/{emitter-BxVxGBbJ.d.ts → emitter-l0W9gC1A.d.ts} +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Run, GetRunContext } from '../context.cjs';
|
|
2
2
|
import { Serializable } from '../internals/serializable.cjs';
|
|
3
|
-
import {
|
|
3
|
+
import { E as Emitter, C as Callback } from '../emitter-BWtGHYn0.cjs';
|
|
4
4
|
import { FrameworkError } from '../errors.cjs';
|
|
5
5
|
import { FullModelName } from './utils.cjs';
|
|
6
6
|
import { ProviderName } from './constants.cjs';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Run, GetRunContext } from '../context.js';
|
|
2
2
|
import { Serializable } from '../internals/serializable.js';
|
|
3
|
-
import {
|
|
3
|
+
import { E as Emitter, C as Callback } from '../emitter-l0W9gC1A.js';
|
|
4
4
|
import { FrameworkError } from '../errors.js';
|
|
5
5
|
import { FullModelName } from './utils.js';
|
|
6
6
|
import { ProviderName } from './constants.js';
|
|
@@ -39,7 +39,7 @@ class EmbeddingModel extends Serializable {
|
|
|
39
39
|
if (error instanceof EmbeddingModelError) {
|
|
40
40
|
throw error;
|
|
41
41
|
} else {
|
|
42
|
-
throw new EmbeddingModelError(`
|
|
42
|
+
throw new EmbeddingModelError(`The Embedding Model has encountered an error.`, [
|
|
43
43
|
error
|
|
44
44
|
]);
|
|
45
45
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["
|
|
1
|
+
{"version":3,"sources":["embedding.ts"],"names":["EmbeddingModel","Serializable","create","input","shallowCopy","RunContext","enter","params","signal","abortSignal","run","emitter","emit","result","pRetry","_create","retries","maxRetries","value","error","EmbeddingModelError","fromName","name","providerId","modelId","parseModel","Target","loadModel","createSnapshot","destroy"],"mappings":";;;;;;;;;AAkDO,MAAeA,uBAAuBC,YAAAA,CAAAA;EAlD7C;;;AAwDEC,EAAAA,MAAAA,CAAOC,KAA4B,EAAA;AACjCA,IAAAA,KAAAA,GAAQC,YAAYD,KAAAA,CAAAA;AAEpB,IAAOE,OAAAA,UAAAA,CAAWC,MAChB,IACA,EAAA;MAAEC,MAAQ,EAAA;AAACJ,QAAAA;;AAAiBK,MAAAA,MAAAA,EAAQL,KAAOM,EAAAA;AAAY,KAAA,EACvD,OAAOC,GAAAA,KAAAA;AACL,MAAI,IAAA;AACF,QAAMA,MAAAA,GAAAA,CAAIC,OAAQC,CAAAA,IAAAA,CAAK,OAAS,EAAA;AAAET,UAAAA;SAAM,CAAA;AACxC,QAAMU,MAAAA,MAAAA,GAA+B,MAAMC,MAAO,CAAA,MAAM,KAAKC,OAAQZ,CAAAA,KAAAA,EAAOO,GAAAA,CAAM,EAAA;AAChFM,UAAAA,OAAAA,EAASb,MAAMc,UAAc,IAAA,CAAA;AAC7BT,UAAAA,MAAAA,EAAQE,GAAIF,CAAAA;SACd,CAAA;AACA,QAAME,MAAAA,GAAAA,CAAIC,OAAQC,CAAAA,IAAAA,CAAK,SAAW,EAAA;UAAEM,KAAOL,EAAAA;SAAO,CAAA;AAClD,QAAOA,OAAAA,MAAAA;AACT,OAAA,CAAA,OAASM,KAAO,EAAA;AACd,QAAMT,MAAAA,GAAAA,CAAIC,OAAQC,CAAAA,IAAAA,CAAK,OAAS,EAAA;AAAET,UAAAA,KAAAA;AAAOgB,UAAAA;SAAM,CAAA;AAC/C,QAAA,IAAIA,iBAAiBC,mBAAqB,EAAA;AACxC,UAAMD,MAAAA,KAAAA;SACD,MAAA;AACL,UAAM,MAAA,IAAIC,oBAAoB,CAAiD,6CAAA,CAAA,EAAA;AAACD,YAAAA;AAAM,WAAA,CAAA;AACxF;OACF,SAAA;AACE,QAAA,MAAMT,GAAIC,CAAAA,OAAAA,CAAQC,IAAK,CAAA,QAAA,EAAU,IAAA,CAAA;AACnC;KACF,CAAA;AAEJ;AAEA,EAAA,aAAaS,SAASC,IAAoC,EAAA;AACxD,IAAA,MAAM,EAAEC,UAAYC,EAAAA,OAAAA,GAAU,EAAE,EAAA,GAAKC,WAAWH,IAAAA,CAAAA;AAChD,IAAA,MAAMI,MAAS,GAAA,MAAMC,SAA0BJ,CAAAA,UAAAA,EAAY,WAAA,CAAA;AAC3D,IAAO,OAAA,IAAIG,OAAOF,OAAAA,CAAAA;AACpB;EAOAI,cAAiB,GAAA;AACf,IAAO,OAAA;AAAEjB,MAAAA,OAAAA,EAAS,IAAKA,CAAAA;AAAQ,KAAA;AACjC;EAEAkB,OAAU,GAAA;AACR,IAAA,IAAA,CAAKlB,QAAQkB,OAAO,EAAA;AACtB;AACF","file":"embedding.js","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Serializable } from \"@/internals/serializable.js\";\nimport { Callback } from \"@/emitter/types.js\";\nimport { FrameworkError } from \"@/errors.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { GetRunContext, RunContext } from \"@/context.js\";\nimport { pRetry } from \"@/internals/helpers/retry.js\";\nimport { FullModelName, loadModel, parseModel } from \"@/backend/utils.js\";\nimport { ProviderName } from \"@/backend/constants.js\";\nimport { EmbeddingModelError } from \"@/backend/errors.js\";\n\nexport interface EmbeddingModelInput {\n values: string[];\n abortSignal?: AbortSignal;\n maxRetries?: number;\n}\n\nexport interface EmbeddingModelOutput {\n values: string[];\n embeddings: number[][];\n usage: { tokens?: number };\n}\n\nexport interface EmbeddingModelEvents {\n success?: Callback<{ value: EmbeddingModelOutput }>;\n start?: Callback<{ input: EmbeddingModelInput }>;\n error?: Callback<{ input: EmbeddingModelInput; error: FrameworkError }>;\n finish?: Callback<null>;\n}\n\nexport type EmbeddingModelEmitter<A = Record<never, never>> = Emitter<\n EmbeddingModelEvents & Omit<A, keyof EmbeddingModelEvents>\n>;\n\nexport abstract class EmbeddingModel extends Serializable {\n public abstract readonly emitter: Emitter<EmbeddingModelEvents>;\n\n abstract get modelId(): string;\n abstract get providerId(): string;\n\n create(input: EmbeddingModelInput) {\n input = shallowCopy(input);\n\n return RunContext.enter(\n this,\n { params: [input] as const, signal: input?.abortSignal },\n async (run) => {\n try {\n await run.emitter.emit(\"start\", { input });\n const result: EmbeddingModelOutput = await pRetry(() => this._create(input, run), {\n retries: input.maxRetries || 0,\n signal: run.signal,\n });\n await run.emitter.emit(\"success\", { value: result });\n return result;\n } catch (error) {\n await run.emitter.emit(\"error\", { input, error });\n if (error instanceof EmbeddingModelError) {\n throw error;\n } else {\n throw new EmbeddingModelError(`The Embedding Model has encountered an error.`, [error]);\n }\n } finally {\n await run.emitter.emit(\"finish\", null);\n }\n },\n );\n }\n\n static async fromName(name: FullModelName | ProviderName) {\n const { providerId, modelId = \"\" } = parseModel(name);\n const Target = await loadModel<EmbeddingModel>(providerId, \"embedding\");\n return new Target(modelId);\n }\n\n protected abstract _create(\n input: EmbeddingModelInput,\n run: GetRunContext<typeof this>,\n ): Promise<EmbeddingModelOutput>;\n\n createSnapshot() {\n return { emitter: this.emitter };\n }\n\n destroy() {\n this.emitter.destroy();\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["
|
|
1
|
+
{"version":3,"sources":["errors.ts"],"names":["BackendError","FrameworkError","ChatModelError","EmbeddingModelError"],"mappings":";;;;;;AAkBO,MAAMA,qBAAqBC,yBAAAA,CAAAA;EAlBlC;;;AAkBkD;AAE3C,MAAMC,uBAAuBF,YAAAA,CAAAA;EApBpC;;;AAoBkD;AAE3C,MAAMG,4BAA4BH,YAAAA,CAAAA;EAtBzC;;;AAsBuD","file":"errors.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FrameworkError } from \"@/errors.js\";\n\nexport class BackendError extends FrameworkError {}\n\nexport class ChatModelError extends BackendError {}\n\nexport class EmbeddingModelError extends BackendError {}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["
|
|
1
|
+
{"version":3,"sources":["errors.ts"],"names":["BackendError","FrameworkError","ChatModelError","EmbeddingModelError"],"mappings":";;;;AAkBO,MAAMA,qBAAqBC,cAAAA,CAAAA;EAlBlC;;;AAkBkD;AAE3C,MAAMC,uBAAuBF,YAAAA,CAAAA;EApBpC;;;AAoBkD;AAE3C,MAAMG,4BAA4BH,YAAAA,CAAAA;EAtBzC;;;AAsBuD","file":"errors.js","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FrameworkError } from \"@/errors.js\";\n\nexport class BackendError extends FrameworkError {}\n\nexport class ChatModelError extends BackendError {}\n\nexport class EmbeddingModelError extends BackendError {}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/backend/message.ts"],"names":["isText","content","type","isImage","isFile","isToolCall","isToolResult","Message","Serializable","constructor","meta","createdAt","Date","fromString","Array","isArray","of","role","text","UserMessage","AssistantMessage","SystemMessage","ToolMessage","CustomMessage","getTexts","map","c","join","filter","createSnapshot","shallowCopy","loadSnapshot","snapshot","Object","assign","toPlain","Symbol","iterator","register","getToolCalls","getToolResults","success","data","z","object","literal","result","any","toolName","string","toolCallId","safeParse","ValueError","getImages","getFiles","Role","ASSISTANT","SYSTEM","USER","input"],"mappings":"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","file":"message.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Serializable } from \"@/internals/serializable.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { FilePart, ImagePart, TextPart, ToolCallPart, ToolResultPart } from \"ai\";\nimport { z } from \"zod\";\nimport { ValueError } from \"@/errors.js\";\n\nexport type MessageRole = \"user\" | \"system\" | \"tool\" | \"assistant\";\nexport type MessageContentPart = TextPart | ToolCallPart | ImagePart | FilePart | ToolResultPart;\n\nexport interface MessageMeta {\n [key: string]: any;\n createdAt?: Date;\n}\n\nexport interface MessageInput {\n role: MessageRole;\n text: string; // TODO\n meta?: MessageMeta;\n}\n\nfunction isText(content: MessageContentPart): content is TextPart {\n return content.type === \"text\";\n}\nfunction isImage(content: MessageContentPart): content is ImagePart {\n return content.type === \"image\";\n}\nfunction isFile(content: MessageContentPart): content is FilePart {\n return content.type === \"file\";\n}\nfunction isToolCall(content: MessageContentPart): content is ToolCallPart {\n return content.type === \"tool-call\";\n}\nfunction isToolResult(content: MessageContentPart): content is ToolResultPart {\n return content.type === \"tool-result\";\n}\n\nexport abstract class Message<\n T extends MessageContentPart = MessageContentPart,\n R extends string = MessageRole | string,\n> extends Serializable {\n public abstract readonly role: R;\n public readonly content: T[];\n\n constructor(\n content: T | T[] | string,\n public readonly meta: MessageMeta = {},\n ) {\n super();\n if (!meta?.createdAt) {\n meta.createdAt = new Date();\n }\n if (typeof content === \"string\") {\n this.content = [this.fromString(content)];\n } else {\n this.content = Array.isArray(content) ? content : [content];\n }\n }\n\n protected abstract fromString(input: string): T;\n\n static of({ role, text, meta }: MessageInput): Message {\n if (role === \"user\") {\n return new UserMessage(text, meta);\n } else if (role === \"assistant\") {\n return new AssistantMessage(text, meta);\n } else if (role === \"system\") {\n return new SystemMessage(text, meta);\n } else if (role === \"tool\") {\n return new ToolMessage(text, meta);\n } else {\n return new CustomMessage(role, text, meta);\n }\n }\n\n get text() {\n return this.getTexts()\n .map((c) => c.text)\n .join(\"\");\n }\n\n getTexts() {\n return this.content.filter(isText) as TextPart[];\n }\n\n createSnapshot() {\n return { content: shallowCopy(this.content), meta: shallowCopy(this.meta), role: this.role };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n\n toPlain() {\n return { role: this.role, content: shallowCopy(this.content) } as const;\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this.content[Symbol.iterator]();\n }\n}\n\nexport class AssistantMessage extends Message<TextPart | ToolCallPart> {\n public readonly role = \"assistant\";\n\n static {\n this.register();\n }\n\n getToolCalls() {\n return this.content.filter(isToolCall);\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport class ToolMessage extends Message<ToolResultPart> {\n public readonly role = \"tool\";\n\n static {\n this.register();\n }\n\n getToolResults() {\n return this.content.filter(isToolResult);\n }\n\n protected fromString(text: string): ToolResultPart {\n const { success, data } = z\n .object({\n type: z.literal(\"tool-result\"),\n result: z.any(),\n toolName: z.string(),\n toolCallId: z.string(),\n })\n .safeParse(text);\n\n if (!success) {\n throw new ValueError(`ToolMessage cannot be created from '${text}'!`);\n }\n\n return data as ToolResultPart;\n }\n}\n\nexport class SystemMessage extends Message<TextPart> {\n public readonly role: MessageRole = \"system\";\n\n static {\n this.register();\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport class UserMessage extends Message<TextPart | ImagePart | FilePart> {\n public readonly role = \"user\";\n\n static {\n this.register();\n }\n\n getImages() {\n return this.content.filter(isImage);\n }\n\n getFiles() {\n return this.content.filter(isFile);\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport const Role = {\n ASSISTANT: \"assistant\",\n SYSTEM: \"system\",\n USER: \"user\",\n} as const;\n\nexport class CustomMessage extends Message<MessageContentPart, string> {\n public role: string;\n\n constructor(role: string, content: MessageContentPart | string, meta: MessageMeta = {}) {\n super(content, meta);\n if (!role) {\n throw new ValueError(`Role \"${role}\" must be specified!`);\n }\n this.role = role;\n }\n\n protected fromString(input: string): MessageContentPart {\n return { type: \"text\", text: input };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["message.ts"],"names":["isText","content","type","isImage","isFile","isToolCall","isToolResult","Message","Serializable","constructor","meta","createdAt","Date","fromString","Array","isArray","of","role","text","UserMessage","AssistantMessage","SystemMessage","ToolMessage","CustomMessage","getTexts","map","c","join","filter","createSnapshot","shallowCopy","loadSnapshot","snapshot","Object","assign","toPlain","Symbol","iterator","register","getToolCalls","getToolResults","success","data","z","object","literal","result","any","toolName","string","toolCallId","safeParse","ValueError","getImages","getFiles","Role","ASSISTANT","SYSTEM","USER","input"],"mappings":"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","file":"message.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Serializable } from \"@/internals/serializable.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { FilePart, ImagePart, TextPart, ToolCallPart, ToolResultPart } from \"ai\";\nimport { z } from \"zod\";\nimport { ValueError } from \"@/errors.js\";\n\nexport type MessageRole = \"user\" | \"system\" | \"tool\" | \"assistant\";\nexport type MessageContentPart = TextPart | ToolCallPart | ImagePart | FilePart | ToolResultPart;\n\nexport interface MessageMeta {\n [key: string]: any;\n createdAt?: Date;\n}\n\nexport interface MessageInput {\n role: MessageRole;\n text: string; // TODO\n meta?: MessageMeta;\n}\n\nfunction isText(content: MessageContentPart): content is TextPart {\n return content.type === \"text\";\n}\nfunction isImage(content: MessageContentPart): content is ImagePart {\n return content.type === \"image\";\n}\nfunction isFile(content: MessageContentPart): content is FilePart {\n return content.type === \"file\";\n}\nfunction isToolCall(content: MessageContentPart): content is ToolCallPart {\n return content.type === \"tool-call\";\n}\nfunction isToolResult(content: MessageContentPart): content is ToolResultPart {\n return content.type === \"tool-result\";\n}\n\nexport abstract class Message<\n T extends MessageContentPart = MessageContentPart,\n R extends string = MessageRole | string,\n> extends Serializable {\n public abstract readonly role: R;\n public readonly content: T[];\n\n constructor(\n content: T | T[] | string,\n public readonly meta: MessageMeta = {},\n ) {\n super();\n if (!meta?.createdAt) {\n meta.createdAt = new Date();\n }\n if (typeof content === \"string\") {\n this.content = [this.fromString(content)];\n } else {\n this.content = Array.isArray(content) ? content : [content];\n }\n }\n\n protected abstract fromString(input: string): T;\n\n static of({ role, text, meta }: MessageInput): Message {\n if (role === \"user\") {\n return new UserMessage(text, meta);\n } else if (role === \"assistant\") {\n return new AssistantMessage(text, meta);\n } else if (role === \"system\") {\n return new SystemMessage(text, meta);\n } else if (role === \"tool\") {\n return new ToolMessage(text, meta);\n } else {\n return new CustomMessage(role, text, meta);\n }\n }\n\n get text() {\n return this.getTexts()\n .map((c) => c.text)\n .join(\"\");\n }\n\n getTexts() {\n return this.content.filter(isText) as TextPart[];\n }\n\n createSnapshot() {\n return { content: shallowCopy(this.content), meta: shallowCopy(this.meta), role: this.role };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n\n toPlain() {\n return { role: this.role, content: shallowCopy(this.content) } as const;\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this.content[Symbol.iterator]();\n }\n}\n\nexport class AssistantMessage extends Message<TextPart | ToolCallPart> {\n public readonly role = \"assistant\";\n\n static {\n this.register();\n }\n\n getToolCalls() {\n return this.content.filter(isToolCall);\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport class ToolMessage extends Message<ToolResultPart> {\n public readonly role = \"tool\";\n\n static {\n this.register();\n }\n\n getToolResults() {\n return this.content.filter(isToolResult);\n }\n\n protected fromString(text: string): ToolResultPart {\n const { success, data } = z\n .object({\n type: z.literal(\"tool-result\"),\n result: z.any(),\n toolName: z.string(),\n toolCallId: z.string(),\n })\n .safeParse(text);\n\n if (!success) {\n throw new ValueError(`ToolMessage cannot be created from '${text}'!`);\n }\n\n return data as ToolResultPart;\n }\n}\n\nexport class SystemMessage extends Message<TextPart> {\n public readonly role: MessageRole = \"system\";\n\n static {\n this.register();\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport class UserMessage extends Message<TextPart | ImagePart | FilePart> {\n public readonly role = \"user\";\n\n static {\n this.register();\n }\n\n getImages() {\n return this.content.filter(isImage);\n }\n\n getFiles() {\n return this.content.filter(isFile);\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport const Role = {\n ASSISTANT: \"assistant\",\n SYSTEM: \"system\",\n USER: \"user\",\n} as const;\n\nexport class CustomMessage extends Message<MessageContentPart, string> {\n public role: string;\n\n constructor(role: string, content: MessageContentPart | string, meta: MessageMeta = {}) {\n super(content, meta);\n if (!role) {\n throw new ValueError(`Role \"${role}\" must be specified!`);\n }\n this.role = role;\n }\n\n protected fromString(input: string): MessageContentPart {\n return { type: \"text\", text: input };\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/backend/message.ts"],"names":["isText","content","type","isImage","isFile","isToolCall","isToolResult","Message","Serializable","constructor","meta","createdAt","Date","fromString","Array","isArray","of","role","text","UserMessage","AssistantMessage","SystemMessage","ToolMessage","CustomMessage","getTexts","map","c","join","filter","createSnapshot","shallowCopy","loadSnapshot","snapshot","Object","assign","toPlain","Symbol","iterator","register","getToolCalls","getToolResults","success","data","z","object","literal","result","any","toolName","string","toolCallId","safeParse","ValueError","getImages","getFiles","Role","ASSISTANT","SYSTEM","USER","input"],"mappings":"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","file":"message.js","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Serializable } from \"@/internals/serializable.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { FilePart, ImagePart, TextPart, ToolCallPart, ToolResultPart } from \"ai\";\nimport { z } from \"zod\";\nimport { ValueError } from \"@/errors.js\";\n\nexport type MessageRole = \"user\" | \"system\" | \"tool\" | \"assistant\";\nexport type MessageContentPart = TextPart | ToolCallPart | ImagePart | FilePart | ToolResultPart;\n\nexport interface MessageMeta {\n [key: string]: any;\n createdAt?: Date;\n}\n\nexport interface MessageInput {\n role: MessageRole;\n text: string; // TODO\n meta?: MessageMeta;\n}\n\nfunction isText(content: MessageContentPart): content is TextPart {\n return content.type === \"text\";\n}\nfunction isImage(content: MessageContentPart): content is ImagePart {\n return content.type === \"image\";\n}\nfunction isFile(content: MessageContentPart): content is FilePart {\n return content.type === \"file\";\n}\nfunction isToolCall(content: MessageContentPart): content is ToolCallPart {\n return content.type === \"tool-call\";\n}\nfunction isToolResult(content: MessageContentPart): content is ToolResultPart {\n return content.type === \"tool-result\";\n}\n\nexport abstract class Message<\n T extends MessageContentPart = MessageContentPart,\n R extends string = MessageRole | string,\n> extends Serializable {\n public abstract readonly role: R;\n public readonly content: T[];\n\n constructor(\n content: T | T[] | string,\n public readonly meta: MessageMeta = {},\n ) {\n super();\n if (!meta?.createdAt) {\n meta.createdAt = new Date();\n }\n if (typeof content === \"string\") {\n this.content = [this.fromString(content)];\n } else {\n this.content = Array.isArray(content) ? content : [content];\n }\n }\n\n protected abstract fromString(input: string): T;\n\n static of({ role, text, meta }: MessageInput): Message {\n if (role === \"user\") {\n return new UserMessage(text, meta);\n } else if (role === \"assistant\") {\n return new AssistantMessage(text, meta);\n } else if (role === \"system\") {\n return new SystemMessage(text, meta);\n } else if (role === \"tool\") {\n return new ToolMessage(text, meta);\n } else {\n return new CustomMessage(role, text, meta);\n }\n }\n\n get text() {\n return this.getTexts()\n .map((c) => c.text)\n .join(\"\");\n }\n\n getTexts() {\n return this.content.filter(isText) as TextPart[];\n }\n\n createSnapshot() {\n return { content: shallowCopy(this.content), meta: shallowCopy(this.meta), role: this.role };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n\n toPlain() {\n return { role: this.role, content: shallowCopy(this.content) } as const;\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this.content[Symbol.iterator]();\n }\n}\n\nexport class AssistantMessage extends Message<TextPart | ToolCallPart> {\n public readonly role = \"assistant\";\n\n static {\n this.register();\n }\n\n getToolCalls() {\n return this.content.filter(isToolCall);\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport class ToolMessage extends Message<ToolResultPart> {\n public readonly role = \"tool\";\n\n static {\n this.register();\n }\n\n getToolResults() {\n return this.content.filter(isToolResult);\n }\n\n protected fromString(text: string): ToolResultPart {\n const { success, data } = z\n .object({\n type: z.literal(\"tool-result\"),\n result: z.any(),\n toolName: z.string(),\n toolCallId: z.string(),\n })\n .safeParse(text);\n\n if (!success) {\n throw new ValueError(`ToolMessage cannot be created from '${text}'!`);\n }\n\n return data as ToolResultPart;\n }\n}\n\nexport class SystemMessage extends Message<TextPart> {\n public readonly role: MessageRole = \"system\";\n\n static {\n this.register();\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport class UserMessage extends Message<TextPart | ImagePart | FilePart> {\n public readonly role = \"user\";\n\n static {\n this.register();\n }\n\n getImages() {\n return this.content.filter(isImage);\n }\n\n getFiles() {\n return this.content.filter(isFile);\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport const Role = {\n ASSISTANT: \"assistant\",\n SYSTEM: \"system\",\n USER: \"user\",\n} as const;\n\nexport class CustomMessage extends Message<MessageContentPart, string> {\n public role: string;\n\n constructor(role: string, content: MessageContentPart | string, meta: MessageMeta = {}) {\n super(content, meta);\n if (!role) {\n throw new ValueError(`Role \"${role}\" must be specified!`);\n }\n this.role = role;\n }\n\n protected fromString(input: string): MessageContentPart {\n return { type: \"text\", text: input };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["message.ts"],"names":["isText","content","type","isImage","isFile","isToolCall","isToolResult","Message","Serializable","constructor","meta","createdAt","Date","fromString","Array","isArray","of","role","text","UserMessage","AssistantMessage","SystemMessage","ToolMessage","CustomMessage","getTexts","map","c","join","filter","createSnapshot","shallowCopy","loadSnapshot","snapshot","Object","assign","toPlain","Symbol","iterator","register","getToolCalls","getToolResults","success","data","z","object","literal","result","any","toolName","string","toolCallId","safeParse","ValueError","getImages","getFiles","Role","ASSISTANT","SYSTEM","USER","input"],"mappings":"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","file":"message.js","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Serializable } from \"@/internals/serializable.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { FilePart, ImagePart, TextPart, ToolCallPart, ToolResultPart } from \"ai\";\nimport { z } from \"zod\";\nimport { ValueError } from \"@/errors.js\";\n\nexport type MessageRole = \"user\" | \"system\" | \"tool\" | \"assistant\";\nexport type MessageContentPart = TextPart | ToolCallPart | ImagePart | FilePart | ToolResultPart;\n\nexport interface MessageMeta {\n [key: string]: any;\n createdAt?: Date;\n}\n\nexport interface MessageInput {\n role: MessageRole;\n text: string; // TODO\n meta?: MessageMeta;\n}\n\nfunction isText(content: MessageContentPart): content is TextPart {\n return content.type === \"text\";\n}\nfunction isImage(content: MessageContentPart): content is ImagePart {\n return content.type === \"image\";\n}\nfunction isFile(content: MessageContentPart): content is FilePart {\n return content.type === \"file\";\n}\nfunction isToolCall(content: MessageContentPart): content is ToolCallPart {\n return content.type === \"tool-call\";\n}\nfunction isToolResult(content: MessageContentPart): content is ToolResultPart {\n return content.type === \"tool-result\";\n}\n\nexport abstract class Message<\n T extends MessageContentPart = MessageContentPart,\n R extends string = MessageRole | string,\n> extends Serializable {\n public abstract readonly role: R;\n public readonly content: T[];\n\n constructor(\n content: T | T[] | string,\n public readonly meta: MessageMeta = {},\n ) {\n super();\n if (!meta?.createdAt) {\n meta.createdAt = new Date();\n }\n if (typeof content === \"string\") {\n this.content = [this.fromString(content)];\n } else {\n this.content = Array.isArray(content) ? content : [content];\n }\n }\n\n protected abstract fromString(input: string): T;\n\n static of({ role, text, meta }: MessageInput): Message {\n if (role === \"user\") {\n return new UserMessage(text, meta);\n } else if (role === \"assistant\") {\n return new AssistantMessage(text, meta);\n } else if (role === \"system\") {\n return new SystemMessage(text, meta);\n } else if (role === \"tool\") {\n return new ToolMessage(text, meta);\n } else {\n return new CustomMessage(role, text, meta);\n }\n }\n\n get text() {\n return this.getTexts()\n .map((c) => c.text)\n .join(\"\");\n }\n\n getTexts() {\n return this.content.filter(isText) as TextPart[];\n }\n\n createSnapshot() {\n return { content: shallowCopy(this.content), meta: shallowCopy(this.meta), role: this.role };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n\n toPlain() {\n return { role: this.role, content: shallowCopy(this.content) } as const;\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this.content[Symbol.iterator]();\n }\n}\n\nexport class AssistantMessage extends Message<TextPart | ToolCallPart> {\n public readonly role = \"assistant\";\n\n static {\n this.register();\n }\n\n getToolCalls() {\n return this.content.filter(isToolCall);\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport class ToolMessage extends Message<ToolResultPart> {\n public readonly role = \"tool\";\n\n static {\n this.register();\n }\n\n getToolResults() {\n return this.content.filter(isToolResult);\n }\n\n protected fromString(text: string): ToolResultPart {\n const { success, data } = z\n .object({\n type: z.literal(\"tool-result\"),\n result: z.any(),\n toolName: z.string(),\n toolCallId: z.string(),\n })\n .safeParse(text);\n\n if (!success) {\n throw new ValueError(`ToolMessage cannot be created from '${text}'!`);\n }\n\n return data as ToolResultPart;\n }\n}\n\nexport class SystemMessage extends Message<TextPart> {\n public readonly role: MessageRole = \"system\";\n\n static {\n this.register();\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport class UserMessage extends Message<TextPart | ImagePart | FilePart> {\n public readonly role = \"user\";\n\n static {\n this.register();\n }\n\n getImages() {\n return this.content.filter(isImage);\n }\n\n getFiles() {\n return this.content.filter(isFile);\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport const Role = {\n ASSISTANT: \"assistant\",\n SYSTEM: \"system\",\n USER: \"user\",\n} as const;\n\nexport class CustomMessage extends Message<MessageContentPart, string> {\n public role: string;\n\n constructor(role: string, content: MessageContentPart | string, meta: MessageMeta = {}) {\n super(content, meta);\n if (!role) {\n throw new ValueError(`Role \"${role}\" must be specified!`);\n }\n this.role = role;\n }\n\n protected fromString(input: string): MessageContentPart {\n return { type: \"text\", text: input };\n }\n}\n"]}
|
package/dist/backend/utils.cjs
CHANGED
|
@@ -14,7 +14,8 @@ function parseModel(name) {
|
|
|
14
14
|
if (!name) {
|
|
15
15
|
throw new errors_cjs.ValueError("Neither 'provider' nor 'provider:model' was specified.");
|
|
16
16
|
}
|
|
17
|
-
const [providerId,
|
|
17
|
+
const [providerId, ...rest] = name.split(":");
|
|
18
|
+
const modelId = rest.join(":");
|
|
18
19
|
const providerDef = findProviderDef(providerId);
|
|
19
20
|
if (!providerDef) {
|
|
20
21
|
throw new errors_cjs.ValueError("Model does not contain provider name!");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["
|
|
1
|
+
{"version":3,"sources":["utils.ts"],"names":["findProviderDef","value","Object","values","BackendProviders","find","p","name","module","aliases","includes","parseModel","ValueError","providerId","rest","split","modelId","join","providerDef","loadModel","type","capitalize"],"mappings":";;;;;;;;AAuBA,SAASA,gBAAgBC,KAAa,EAAA;AACpC,EAAA,OACEC,OAAOC,MAAOC,CAAAA,8BAAAA,EAAkBC,IAC9B,CAAA,CAACC,MAAMA,CAAEC,CAAAA,IAAAA,KAASN,KAASK,IAAAA,CAAAA,CAAEE,WAAWP,KAASK,IAAAA,CAAAA,CAAEG,QAAQC,QAAST,CAAAA,KAAAA,CAAAA,CACjE,IAAA,IAAA;AAET;AANSD,MAAAA,CAAAA,eAAAA,EAAAA,iBAAAA,CAAAA;AAQF,SAASW,WAAWJ,IAAY,EAAA;AACrC,EAAA,IAAI,CAACA,IAAM,EAAA;AACT,IAAM,MAAA,IAAIK,sBAAW,wDAAA,CAAA;AACvB;AACA,EAAA,MAAM,CAACC,UAAY,EAAA,GAAGC,IAAAA,CAAQP,GAAAA,IAAAA,CAAKQ,MAAM,GAAA,CAAA;AACzC,EAAMC,MAAAA,OAAAA,GAAUF,IAAKG,CAAAA,IAAAA,CAAK,GAAA,CAAA;AAE1B,EAAMC,MAAAA,WAAAA,GAAclB,gBAAgBa,UAAAA,CAAAA;AACpC,EAAA,IAAI,CAACK,WAAa,EAAA;AAChB,IAAM,MAAA,IAAIN,sBAAW,uCAAA,CAAA;AACvB;AACA,EAAO,OAAA;AAAEC,IAAAA,UAAAA;AAAYG,IAAAA,OAAAA;AAASE,IAAAA;AAAY,GAAA;AAC5C;AAZgBP,MAAAA,CAAAA,UAAAA,EAAAA,YAAAA,CAAAA;AAchB,eAAsBQ,SAAAA,CACpBZ,MACAa,IAA0B,EAAA;AAE1B,EAAA,MAAM,EAAEF,WAAAA,EAAgBP,GAAAA,UAAAA,CAAWJ,IAAAA,CAAAA;AACnC,EAAA,MAAMC,SAAS,MAAM,OAAO,4BAA4BU,WAAYV,CAAAA,MAAM,YAAYY,IAAAA,CAAAA,CAAAA,CAAAA;AACtF,EAAOZ,OAAAA,MAAAA,CAAO,GAAGU,WAAYX,CAAAA,IAAI,GAAGc,iBAAWD,CAAAA,IAAAA,CAAAA,CAAY,KAAA,CAAA,CAAA;AAC7D;AAPsBD,MAAAA,CAAAA,SAAAA,EAAAA,WAAAA,CAAAA","file":"utils.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ValueError } from \"@/errors.js\";\nimport { ClassConstructor } from \"@/internals/types.js\";\nimport { BackendProviders, ProviderDef, ProviderName } from \"@/backend/constants.js\";\nimport { capitalize } from \"remeda\";\n\nexport type FullModelName = `${ProviderName}:${string}`;\n\nfunction findProviderDef(value: string): ProviderDef | null {\n return (\n Object.values(BackendProviders).find(\n (p) => p.name === value || p.module === value || p.aliases.includes(value),\n ) ?? null\n );\n}\n\nexport function parseModel(name: string) {\n if (!name) {\n throw new ValueError(\"Neither 'provider' nor 'provider:model' was specified.\");\n }\n const [providerId, ...rest] = name.split(\":\") as [ProviderName, ...string[]];\n const modelId = rest.join(\":\");\n\n const providerDef = findProviderDef(providerId);\n if (!providerDef) {\n throw new ValueError(\"Model does not contain provider name!\");\n }\n return { providerId, modelId, providerDef };\n}\n\nexport async function loadModel<T>(\n name: ProviderName | FullModelName,\n type: \"embedding\" | \"chat\",\n): Promise<ClassConstructor<T>> {\n const { providerDef } = parseModel(name);\n const module = await import(`beeai-framework/adapters/${providerDef.module}/backend/${type}`);\n return module[`${providerDef.name}${capitalize(type)}Model`];\n}\n"]}
|
package/dist/backend/utils.js
CHANGED
|
@@ -12,7 +12,8 @@ function parseModel(name) {
|
|
|
12
12
|
if (!name) {
|
|
13
13
|
throw new ValueError("Neither 'provider' nor 'provider:model' was specified.");
|
|
14
14
|
}
|
|
15
|
-
const [providerId,
|
|
15
|
+
const [providerId, ...rest] = name.split(":");
|
|
16
|
+
const modelId = rest.join(":");
|
|
16
17
|
const providerDef = findProviderDef(providerId);
|
|
17
18
|
if (!providerDef) {
|
|
18
19
|
throw new ValueError("Model does not contain provider name!");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["
|
|
1
|
+
{"version":3,"sources":["utils.ts"],"names":["findProviderDef","value","Object","values","BackendProviders","find","p","name","module","aliases","includes","parseModel","ValueError","providerId","rest","split","modelId","join","providerDef","loadModel","type","capitalize"],"mappings":";;;;;;AAuBA,SAASA,gBAAgBC,KAAa,EAAA;AACpC,EAAA,OACEC,OAAOC,MAAOC,CAAAA,gBAAAA,EAAkBC,IAC9B,CAAA,CAACC,MAAMA,CAAEC,CAAAA,IAAAA,KAASN,KAASK,IAAAA,CAAAA,CAAEE,WAAWP,KAASK,IAAAA,CAAAA,CAAEG,QAAQC,QAAST,CAAAA,KAAAA,CAAAA,CACjE,IAAA,IAAA;AAET;AANSD,MAAAA,CAAAA,eAAAA,EAAAA,iBAAAA,CAAAA;AAQF,SAASW,WAAWJ,IAAY,EAAA;AACrC,EAAA,IAAI,CAACA,IAAM,EAAA;AACT,IAAM,MAAA,IAAIK,WAAW,wDAAA,CAAA;AACvB;AACA,EAAA,MAAM,CAACC,UAAY,EAAA,GAAGC,IAAAA,CAAQP,GAAAA,IAAAA,CAAKQ,MAAM,GAAA,CAAA;AACzC,EAAMC,MAAAA,OAAAA,GAAUF,IAAKG,CAAAA,IAAAA,CAAK,GAAA,CAAA;AAE1B,EAAMC,MAAAA,WAAAA,GAAclB,gBAAgBa,UAAAA,CAAAA;AACpC,EAAA,IAAI,CAACK,WAAa,EAAA;AAChB,IAAM,MAAA,IAAIN,WAAW,uCAAA,CAAA;AACvB;AACA,EAAO,OAAA;AAAEC,IAAAA,UAAAA;AAAYG,IAAAA,OAAAA;AAASE,IAAAA;AAAY,GAAA;AAC5C;AAZgBP,MAAAA,CAAAA,UAAAA,EAAAA,YAAAA,CAAAA;AAchB,eAAsBQ,SAAAA,CACpBZ,MACAa,IAA0B,EAAA;AAE1B,EAAA,MAAM,EAAEF,WAAAA,EAAgBP,GAAAA,UAAAA,CAAWJ,IAAAA,CAAAA;AACnC,EAAA,MAAMC,SAAS,MAAM,OAAO,4BAA4BU,WAAYV,CAAAA,MAAM,YAAYY,IAAAA,CAAAA,CAAAA,CAAAA;AACtF,EAAOZ,OAAAA,MAAAA,CAAO,GAAGU,WAAYX,CAAAA,IAAI,GAAGc,UAAWD,CAAAA,IAAAA,CAAAA,CAAY,KAAA,CAAA,CAAA;AAC7D;AAPsBD,MAAAA,CAAAA,SAAAA,EAAAA,WAAAA,CAAAA","file":"utils.js","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ValueError } from \"@/errors.js\";\nimport { ClassConstructor } from \"@/internals/types.js\";\nimport { BackendProviders, ProviderDef, ProviderName } from \"@/backend/constants.js\";\nimport { capitalize } from \"remeda\";\n\nexport type FullModelName = `${ProviderName}:${string}`;\n\nfunction findProviderDef(value: string): ProviderDef | null {\n return (\n Object.values(BackendProviders).find(\n (p) => p.name === value || p.module === value || p.aliases.includes(value),\n ) ?? null\n );\n}\n\nexport function parseModel(name: string) {\n if (!name) {\n throw new ValueError(\"Neither 'provider' nor 'provider:model' was specified.\");\n }\n const [providerId, ...rest] = name.split(\":\") as [ProviderName, ...string[]];\n const modelId = rest.join(\":\");\n\n const providerDef = findProviderDef(providerId);\n if (!providerDef) {\n throw new ValueError(\"Model does not contain provider name!\");\n }\n return { providerId, modelId, providerDef };\n}\n\nexport async function loadModel<T>(\n name: ProviderName | FullModelName,\n type: \"embedding\" | \"chat\",\n): Promise<ClassConstructor<T>> {\n const { providerDef } = parseModel(name);\n const module = await import(`beeai-framework/adapters/${providerDef.module}/backend/${type}`);\n return module[`${providerDef.name}${capitalize(type)}Model`];\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Run, GetRunContext } from './context.cjs';
|
|
2
2
|
import { FrameworkError } from './errors.cjs';
|
|
3
3
|
import { Serializable } from './internals/serializable.cjs';
|
|
4
|
-
import { E as Emitter } from './emitter-
|
|
4
|
+
import { E as Emitter } from './emitter-BWtGHYn0.cjs';
|
|
5
5
|
import { BaseMemory } from './memory/base.cjs';
|
|
6
6
|
import { OmitEmpty } from './internals/types.cjs';
|
|
7
7
|
import { AnyTool } from './tools/base.cjs';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Run, GetRunContext } from './context.js';
|
|
2
2
|
import { FrameworkError } from './errors.js';
|
|
3
3
|
import { Serializable } from './internals/serializable.js';
|
|
4
|
-
import { E as Emitter } from './emitter-
|
|
4
|
+
import { E as Emitter } from './emitter-l0W9gC1A.js';
|
|
5
5
|
import { BaseMemory } from './memory/base.js';
|
|
6
6
|
import { OmitEmpty } from './internals/types.js';
|
|
7
7
|
import { AnyTool } from './tools/base.js';
|
package/dist/cache/base.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["
|
|
1
|
+
{"version":3,"sources":["base.ts"],"names":["BaseCache","Serializable","enabled"],"mappings":";;;;;;AAkBO,MAAeA,kBAAqBC,6BAAAA,CAAAA;EAlB3C;;;EAmBSC,OAAU,GAAA,IAAA;AAQnB","file":"base.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Serializable } from \"@/internals/serializable.js\";\n\nexport abstract class BaseCache<T> extends Serializable {\n public enabled = true;\n\n abstract size(): Promise<number>;\n abstract set(key: string, value: T): Promise<void>;\n abstract get(key: string): Promise<T | undefined>;\n abstract has(key: string): Promise<boolean>;\n abstract delete(key: string): Promise<boolean>;\n abstract clear(): Promise<void>;\n}\n"]}
|
package/dist/cache/base.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["
|
|
1
|
+
{"version":3,"sources":["base.ts"],"names":["BaseCache","Serializable","enabled"],"mappings":";;;;AAkBO,MAAeA,kBAAqBC,YAAAA,CAAAA;EAlB3C;;;EAmBSC,OAAU,GAAA,IAAA;AAQnB","file":"base.js","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Serializable } from \"@/internals/serializable.js\";\n\nexport abstract class BaseCache<T> extends Serializable {\n public enabled = true;\n\n abstract size(): Promise<number>;\n abstract set(key: string, value: T): Promise<void>;\n abstract get(key: string): Promise<T | undefined>;\n abstract has(key: string): Promise<boolean>;\n abstract delete(key: string): Promise<boolean>;\n abstract clear(): Promise<void>;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cache/decoratorCache.ts"],"names":["state","container","WeakMap","extractDescriptor","descriptor","value","update","get","Error","Cache","name","getInstanceContext","target","ctx","instances","has","set","cache","Map","options","initQueue","_options","baseOptions","enabled","cacheKey","ObjectHashKeyFn","ttl","Infinity","enumerable","R","pickBy","isDefined","handler","obj","key","Object","hasOwn","constructor","Boolean","push","SingletonCacheKeyFn","groupContext","fn","wrapper","args","invokeOriginal","apply","inputHash","expiresAt","Date","now","result","data","defineProperty","init","self","task","getOwnPropertyDescriptor","prototype","assign","delete","getInstance","property","findDescriptor","TypeError","String","ctxByInstance","clear","keys","forEach","oldTTL","newTTL","undefined","values","diff","isEnabled","enable","disable","WeakRefKeyFn","_lookup","chunks","map","isObjectType","isFunction","createRandomHash","createHash","JSON","stringify","from","cb","join","hash","encoding","replacer","AbortSignal","unorderedArrays","unorderedObjects","unorderedSets","JSONCacheKeyFn","CacheFn","Function","create","instance","Proxy","_","prop","receiver","updateTTL","createSnapshot"],"mappings":"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","file":"decoratorCache.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AnyFn, TypedFn } from \"@/internals/types.js\";\nimport * as R from \"remeda\";\nimport hash from \"object-hash\";\nimport { createHash, createRandomHash } from \"@/internals/helpers/hash.js\";\nimport { findDescriptor } from \"@/internals/helpers/prototype.js\";\n\ntype InputFn = AnyFn;\ntype TargetFn = AnyFn;\ntype Instance = NonNullable<any>;\n\ntype CacheKeyFn = (this: Instance, ...args: any[]) => string;\n\nexport interface CacheDecoratorOptions {\n enabled: boolean;\n ttl?: number;\n cacheKey: CacheKeyFn;\n enumerable?: boolean;\n}\n\ninterface CacheEntry {\n expiresAt: number;\n data: any;\n}\n\ninterface FnContext {\n options: CacheDecoratorOptions;\n cache: Map<string, CacheEntry>;\n}\n\ninterface GroupContext {\n options: CacheDecoratorOptions;\n instances: WeakMap<Instance, FnContext>;\n}\n\nexport interface CacheDecoratorInstance {\n get(key?: string): CacheEntry | undefined;\n\n clear(keys?: string[]): void;\n\n isEnabled(): boolean;\n\n enable(): void;\n\n disable(): void;\n\n update(data: Partial<CacheDecoratorOptions>): void;\n}\n\nconst state = {\n container: new WeakMap<InputFn, GroupContext>(),\n extractDescriptor(descriptor: PropertyDescriptor) {\n // Method approach\n if (descriptor.value != null) {\n return {\n value: descriptor.value as AnyFn,\n update: (value: TargetFn) => {\n descriptor.value = value;\n },\n };\n }\n // Accessor approach\n if (descriptor.get != null) {\n return {\n value: descriptor.get as AnyFn,\n update: (value: TargetFn) => {\n descriptor.get = value;\n },\n };\n }\n throw new Error(`@${Cache.name} decorator must be either on a method or get accessor.`);\n },\n getInstanceContext<T extends NonNullable<unknown>>(target: T, ctx: GroupContext) {\n if (!ctx.instances.has(target)) {\n ctx.instances.set(target, {\n cache: new Map(),\n options: ctx.options,\n });\n }\n return ctx.instances.get(target)!;\n },\n} as const;\n\nconst initQueue = new WeakMap<Instance, { key: PropertyKey; enumerable: boolean }[]>();\n\nexport function Cache(_options?: Partial<CacheDecoratorOptions>) {\n const baseOptions: Required<CacheDecoratorOptions> = {\n enabled: true,\n cacheKey: ObjectHashKeyFn,\n ttl: Infinity,\n enumerable: false,\n ...R.pickBy(_options ?? {}, R.isDefined),\n };\n\n return function handler(\n obj: NonNullable<object>,\n key: string | symbol,\n descriptor: PropertyDescriptor,\n ) {\n if (Object.hasOwn(obj, \"constructor\")) {\n const constructor = obj.constructor;\n if (!initQueue.has(constructor)) {\n initQueue.set(constructor, []);\n }\n\n baseOptions.enumerable = Boolean(descriptor.get);\n initQueue\n .get(constructor)!\n .push({ key, enumerable: _options?.enumerable ?? baseOptions.enumerable });\n }\n\n const target = state.extractDescriptor(descriptor);\n if (descriptor.get && !_options?.cacheKey) {\n baseOptions.cacheKey = SingletonCacheKeyFn;\n }\n\n const groupContext: GroupContext = { instances: new WeakMap(), options: baseOptions };\n\n const fn = function wrapper(this: any, ...args: any[]) {\n const invokeOriginal = () => target.value.apply(this, args);\n const ctx = state.getInstanceContext(this, groupContext);\n if (!ctx.options.enabled) {\n return invokeOriginal();\n }\n\n const inputHash = ctx.options.cacheKey.apply(this, args);\n if (\n !ctx.cache.has(inputHash) ||\n (ctx.cache.get(inputHash)?.expiresAt ?? Infinity) < Date.now() // is expired check\n ) {\n const result = invokeOriginal();\n ctx.cache.set(inputHash, {\n expiresAt: Date.now() + (ctx.options.ttl ?? Infinity),\n data: result,\n });\n }\n return ctx.cache.get(inputHash)!.data;\n };\n Object.defineProperty(fn, \"name\", {\n get: () => target.value.name ?? \"anonymous\",\n });\n\n target.update(fn);\n state.container.set(fn, groupContext);\n };\n}\n\nCache.init = function init<T extends NonNullable<unknown>>(self: T) {\n const task = initQueue.get(self.constructor) ?? [];\n for (const { key, enumerable } of task) {\n const descriptor = Object.getOwnPropertyDescriptor(self.constructor.prototype, key);\n if (descriptor) {\n Object.defineProperty(self, key, Object.assign(descriptor, { enumerable }));\n }\n }\n initQueue.delete(self);\n};\n\nCache.getInstance = function getInstance<T extends NonNullable<unknown>>(\n target: T,\n property: keyof T,\n): CacheDecoratorInstance {\n const descriptor = findDescriptor(target, property);\n if (!descriptor) {\n throw new TypeError(`No descriptor has been found for '${String(property)}'`);\n }\n const value = state.extractDescriptor(descriptor);\n const ctxByInstance = state.container.get(value.value);\n if (!ctxByInstance) {\n throw new TypeError(`No cache instance is bounded to '${String(property)}'!`);\n }\n\n const ctx = state.getInstanceContext(target, ctxByInstance);\n return {\n get(key = \"\") {\n return ctx.cache.get(key);\n },\n clear(keys?: string[]) {\n if (keys) {\n keys.forEach((key) => ctx.cache.delete(key));\n } else {\n ctx.cache.clear();\n }\n },\n update(data: CacheDecoratorOptions) {\n const oldTTL = ctx.options.ttl;\n const newTTL = data.ttl;\n if (oldTTL !== newTTL && newTTL !== undefined) {\n for (const value of ctx.cache.values()) {\n if (value.expiresAt === Infinity) {\n value.expiresAt = Date.now() + newTTL;\n } else {\n const diff = newTTL - (oldTTL ?? 0);\n value.expiresAt += diff;\n }\n }\n }\n Object.assign(ctx.options, data);\n },\n isEnabled() {\n return ctx.options.enabled;\n },\n enable() {\n ctx.options.enabled = true;\n },\n disable() {\n ctx.options.enabled = false;\n },\n };\n};\n\nexport const WeakRefKeyFn = (() => {\n const _lookup = new WeakMap();\n\n const fn = (...args: any[]) => {\n const chunks = args.map((value) => {\n if (R.isObjectType(value) || R.isFunction(value)) {\n if (!_lookup.has(value)) {\n _lookup.set(value, createRandomHash(6));\n }\n return _lookup.get(value)!;\n }\n return value;\n });\n return createHash(JSON.stringify(chunks));\n };\n fn.from = <T>(cb: (self: T) => any[]) => {\n return function (this: T) {\n return cb(this).map(fn).join(\"#\");\n };\n };\n return fn;\n})() satisfies CacheKeyFn;\n\nexport const ObjectHashKeyFn: CacheKeyFn = (...args: any[]) =>\n hash(args, {\n encoding: \"base64\",\n replacer: (() => {\n const _lookup = new WeakMap();\n return (value: unknown) => {\n if (value && value instanceof AbortSignal) {\n // not supported by \"hash\" function\n if (!_lookup.has(value)) {\n _lookup.set(value, createRandomHash(6));\n }\n return _lookup.get(value)!;\n }\n return value;\n };\n })(),\n unorderedArrays: false,\n unorderedObjects: false,\n unorderedSets: false,\n });\nexport const JSONCacheKeyFn: CacheKeyFn = (...args: any[]) => JSON.stringify(args);\n// eslint-disable-next-line unused-imports/no-unused-vars\nexport const SingletonCacheKeyFn: CacheKeyFn = (...args: any[]) => \"\";\n\nexport class CacheFn<P extends any[], R> extends Function {\n readonly name = CacheFn.name;\n\n static create<A extends any[], B>(\n fn: (...args: A) => B,\n options?: Partial<CacheDecoratorOptions>,\n ) {\n const instance = new CacheFn(fn, options);\n return instance as TypedFn<A, B> & CacheFn<A, B>;\n }\n\n constructor(\n protected readonly fn: (...args: P) => R,\n protected readonly options?: Partial<CacheDecoratorOptions>,\n ) {\n super();\n\n Cache.getInstance(this, \"get\").update(options ?? {});\n return new Proxy<typeof this>(this, {\n apply(this: CacheFn<P, R>, target, _, args: any[]) {\n return target.get(...(args as unknown as P));\n },\n get(target, prop: string | symbol, receiver: any) {\n const value = target[prop as keyof typeof target];\n if (value instanceof Function) {\n return function (this: CacheFn<P, R>, ...args: P) {\n return value.apply(this === receiver ? target : this, args);\n };\n }\n return value;\n },\n }) as unknown as CacheFn<P, R> & typeof fn;\n }\n\n updateTTL(ttl: number) {\n Cache.getInstance(this, \"get\").update({ ttl });\n }\n\n createSnapshot() {\n return {\n fn: this.fn,\n options: this.options,\n };\n }\n\n @Cache()\n get(...args: P) {\n return this.fn(...args);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["decoratorCache.ts"],"names":["state","container","WeakMap","extractDescriptor","descriptor","value","update","get","Error","Cache","name","getInstanceContext","target","ctx","instances","has","set","cache","Map","options","initQueue","_options","baseOptions","enabled","cacheKey","ObjectHashKeyFn","ttl","Infinity","enumerable","R","pickBy","isDefined","handler","obj","key","Object","hasOwn","constructor","Boolean","push","SingletonCacheKeyFn","groupContext","fn","wrapper","args","invokeOriginal","apply","inputHash","expiresAt","Date","now","result","data","defineProperty","init","self","task","getOwnPropertyDescriptor","prototype","assign","delete","getInstance","property","findDescriptor","TypeError","String","ctxByInstance","clear","keys","forEach","oldTTL","newTTL","undefined","values","diff","isEnabled","enable","disable","WeakRefKeyFn","_lookup","chunks","map","isObjectType","isFunction","createRandomHash","createHash","JSON","stringify","from","cb","join","hash","encoding","replacer","AbortSignal","unorderedArrays","unorderedObjects","unorderedSets","JSONCacheKeyFn","CacheFn","Function","create","instance","Proxy","_","prop","receiver","updateTTL","createSnapshot"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgEA,MAAMA,KAAQ,GAAA;AACZC,EAAAA,SAAAA,sBAAeC,OAAAA,EAAAA;AACfC,EAAAA,iBAAAA,CAAkBC,UAA8B,EAAA;AAE9C,IAAIA,IAAAA,UAAAA,CAAWC,SAAS,IAAM,EAAA;AAC5B,MAAO,OAAA;AACLA,QAAAA,KAAAA,EAAOD,UAAWC,CAAAA,KAAAA;AAClBC,QAAAA,MAAAA,0BAASD,KAAAA,KAAAA;AACPD,UAAAA,UAAAA,CAAWC,KAAQA,GAAAA,KAAAA;SADb,EAAA,QAAA;AAGV,OAAA;AACF;AAEA,IAAID,IAAAA,UAAAA,CAAWG,OAAO,IAAM,EAAA;AAC1B,MAAO,OAAA;AACLF,QAAAA,KAAAA,EAAOD,UAAWG,CAAAA,GAAAA;AAClBD,QAAAA,MAAAA,0BAASD,KAAAA,KAAAA;AACPD,UAAAA,UAAAA,CAAWG,GAAMF,GAAAA,KAAAA;SADX,EAAA,QAAA;AAGV,OAAA;AACF;AACA,IAAA,MAAM,IAAIG,KAAAA,CAAM,CAAIC,CAAAA,EAAAA,KAAAA,CAAMC,IAAI,CAAwD,sDAAA,CAAA,CAAA;AACxF,GAAA;AACAC,EAAAA,kBAAAA,CAAmDC,QAAWC,GAAiB,EAAA;AAC7E,IAAA,IAAI,CAACA,GAAAA,CAAIC,SAAUC,CAAAA,GAAAA,CAAIH,MAAAA,CAAS,EAAA;AAC9BC,MAAIC,GAAAA,CAAAA,SAAAA,CAAUE,IAAIJ,MAAQ,EAAA;AACxBK,QAAAA,KAAAA,sBAAWC,GAAAA,EAAAA;AACXC,QAAAA,OAAAA,EAASN,GAAIM,CAAAA;OACf,CAAA;AACF;AACA,IAAON,OAAAA,GAAAA,CAAIC,SAAUP,CAAAA,GAAAA,CAAIK,MAAAA,CAAAA;AAC3B;AACF,CAAA;AAEA,MAAMQ,SAAAA,uBAAgBlB,OAAAA,EAAAA;AAEf,SAASO,MAAMY,QAAyC,EAAA;AAC7D,EAAA,MAAMC,WAA+C,GAAA;IACnDC,OAAS,EAAA,IAAA;IACTC,QAAUC,EAAAA,eAAAA;IACVC,GAAKC,EAAAA,QAAAA;IACLC,UAAY,EAAA,KAAA;AACZ,IAAA,GAAGC,aAAEC,MAAOT,CAAAA,QAAAA,IAAY,EAAC,EAAGQ,aAAEE,SAAS;AACzC,GAAA;AAEA,EAAA,uBAAgBC,MAAAA,CAAAA,SAAAA,OAAAA,CACdC,GACAC,EAAAA,GAAAA,EACA9B,UAA8B,EAAA;AAE9B,IAAA,IAAI+B,MAAOC,CAAAA,MAAAA,CAAOH,GAAK,EAAA,aAAA,CAAgB,EAAA;AACrC,MAAA,MAAMI,cAAcJ,GAAII,CAAAA,WAAAA;AACxB,MAAA,IAAI,CAACjB,SAAAA,CAAUL,GAAIsB,CAAAA,WAAAA,CAAc,EAAA;AAC/BjB,QAAUJ,SAAAA,CAAAA,GAAAA,CAAIqB,WAAa,EAAA,EAAE,CAAA;AAC/B;AAEAf,MAAYM,WAAAA,CAAAA,UAAAA,GAAaU,OAAQlC,CAAAA,UAAAA,CAAWG,GAAG,CAAA;AAC/Ca,MACGb,SAAAA,CAAAA,GAAAA,CAAI8B,WAAAA,CAAAA,CACJE,IAAK,CAAA;AAAEL,QAAAA,GAAAA;QAAKN,UAAYP,EAAAA,QAAAA,EAAUO,cAAcN,WAAYM,CAAAA;OAAW,CAAA;AAC5E;AAEA,IAAMhB,MAAAA,MAAAA,GAASZ,KAAMG,CAAAA,iBAAAA,CAAkBC,UAAAA,CAAAA;AACvC,IAAA,IAAIA,UAAWG,CAAAA,GAAAA,IAAO,CAACc,QAAAA,EAAUG,QAAU,EAAA;AACzCF,MAAAA,WAAAA,CAAYE,QAAWgB,GAAAA,mBAAAA;AACzB;AAEA,IAAA,MAAMC,YAA6B,GAAA;AAAE3B,MAAAA,SAAAA,sBAAeZ,OAAAA,EAAAA;MAAWiB,OAASG,EAAAA;AAAY,KAAA;AAEpF,IAAMoB,MAAAA,EAAAA,mBAAcC,MAAAA,CAAAA,SAAAA,OAAAA,CAAAA,GAAsBC,IAAW,EAAA;AACnD,MAAA,MAAMC,iCAAuBjC,MAAAA,CAAAA,MAAAA,MAAAA,CAAOP,MAAMyC,KAAM,CAAA,IAAA,EAAMF,IAAAA,CAA/B,EAAA,gBAAA,CAAA;AACvB,MAAA,MAAM/B,GAAMb,GAAAA,KAAAA,CAAMW,kBAAmB,CAAA,IAAA,EAAM8B,YAAAA,CAAAA;AAC3C,MAAI,IAAA,CAAC5B,GAAIM,CAAAA,OAAAA,CAAQI,OAAS,EAAA;AACxB,QAAA,OAAOsB,cAAAA,EAAAA;AACT;AAEA,MAAA,MAAME,YAAYlC,GAAIM,CAAAA,OAAAA,CAAQK,QAASsB,CAAAA,KAAAA,CAAM,MAAMF,IAAAA,CAAAA;AACnD,MAAA,IACE,CAAC/B,GAAAA,CAAII,KAAMF,CAAAA,GAAAA,CAAIgC,SAAAA,CACdlC,IAAAA,CAAAA,GAAAA,CAAII,KAAMV,CAAAA,GAAAA,CAAIwC,SAAAA,CAAYC,EAAAA,SAAAA,IAAarB,QAAYsB,IAAAA,IAAAA,CAAKC,KACzD,EAAA;AACA,QAAA,MAAMC,SAASN,cAAAA,EAAAA;AACfhC,QAAII,GAAAA,CAAAA,KAAAA,CAAMD,IAAI+B,SAAW,EAAA;AACvBC,UAAAA,SAAAA,EAAWC,IAAKC,CAAAA,GAAAA,EAASrC,IAAAA,GAAAA,CAAIM,QAAQO,GAAOC,IAAAA,QAAAA,CAAAA;UAC5CyB,IAAMD,EAAAA;SACR,CAAA;AACF;AACA,MAAA,OAAOtC,GAAII,CAAAA,KAAAA,CAAMV,GAAIwC,CAAAA,SAAAA,CAAYK,CAAAA,IAAAA;KAlBxB,EAAA,SAAA,CAAA;AAoBXjB,IAAOkB,MAAAA,CAAAA,cAAAA,CAAeX,IAAI,MAAQ,EAAA;AAChCnC,MAAAA,GAAAA,kBAAWK,MAAAA,CAAAA,MAAAA,MAAAA,CAAOP,KAAMK,CAAAA,IAAAA,IAAQ,WAA3B,EAAA,KAAA;KACP,CAAA;AAEAE,IAAAA,MAAAA,CAAON,OAAOoC,EAAAA,CAAAA;AACd1C,IAAMC,KAAAA,CAAAA,SAAAA,CAAUe,GAAI0B,CAAAA,EAAAA,EAAID,YAAAA,CAAAA;GAjDnB,EAAA,SAAA,CAAA;AAmDT;AA5DgBhC,MAAAA,CAAAA,KAAAA,EAAAA,OAAAA,CAAAA;AA8DhBA,KAAM6C,CAAAA,IAAAA,mBAAgBA,MAAAA,CAAAA,SAAAA,IAAAA,CAAqCC,IAAO,EAAA;AAChE,EAAA,MAAMC,OAAOpC,SAAUb,CAAAA,GAAAA,CAAIgD,IAAKlB,CAAAA,WAAW,KAAK,EAAA;AAChD,EAAA,KAAA,MAAW,EAAEH,GAAAA,EAAKN,UAAU,EAAA,IAAM4B,IAAM,EAAA;AACtC,IAAA,MAAMpD,aAAa+B,MAAOsB,CAAAA,wBAAAA,CAAyBF,IAAKlB,CAAAA,WAAAA,CAAYqB,WAAWxB,GAAAA,CAAAA;AAC/E,IAAA,IAAI9B,UAAY,EAAA;AACd+B,MAAAA,MAAAA,CAAOkB,cAAeE,CAAAA,IAAAA,EAAMrB,GAAKC,EAAAA,MAAAA,CAAOwB,OAAOvD,UAAY,EAAA;AAAEwB,QAAAA;AAAW,OAAA,CAAA,CAAA;AAC1E;AACF;AACAR,EAAAA,SAAAA,CAAUwC,OAAOL,IAAAA,CAAAA;AACnB,CATa,EAAA,MAAA,CAAA;AAWb9C,KAAAA,CAAMoD,WAAc,mBAAA,MAAA,CAAA,SAASA,WAC3BjD,CAAAA,MAAAA,EACAkD,QAAiB,EAAA;AAEjB,EAAM1D,MAAAA,UAAAA,GAAa2D,4BAAenD,CAAAA,MAAAA,EAAQkD,QAAAA,CAAAA;AAC1C,EAAA,IAAI,CAAC1D,UAAY,EAAA;AACf,IAAA,MAAM,IAAI4D,SAAU,CAAA,CAAA,kCAAA,EAAqCC,MAAOH,CAAAA,QAAAA,CAAAA,CAAY,CAAA,CAAA,CAAA;AAC9E;AACA,EAAMzD,MAAAA,KAAAA,GAAQL,KAAMG,CAAAA,iBAAAA,CAAkBC,UAAAA,CAAAA;AACtC,EAAA,MAAM8D,aAAgBlE,GAAAA,KAAAA,CAAMC,SAAUM,CAAAA,GAAAA,CAAIF,MAAMA,KAAK,CAAA;AACrD,EAAA,IAAI,CAAC6D,aAAe,EAAA;AAClB,IAAA,MAAM,IAAIF,SAAU,CAAA,CAAA,iCAAA,EAAoCC,MAAOH,CAAAA,QAAAA,CAAAA,CAAa,EAAA,CAAA,CAAA;AAC9E;AAEA,EAAA,MAAMjD,GAAMb,GAAAA,KAAAA,CAAMW,kBAAmBC,CAAAA,MAAAA,EAAQsD,aAAAA,CAAAA;AAC7C,EAAO,OAAA;AACL3D,IAAAA,GAAAA,CAAI2B,MAAM,EAAE,EAAA;AACV,MAAOrB,OAAAA,GAAAA,CAAII,KAAMV,CAAAA,GAAAA,CAAI2B,GAAAA,CAAAA;AACvB,KAAA;AACAiC,IAAAA,KAAAA,CAAMC,IAAe,EAAA;AACnB,MAAA,IAAIA,IAAM,EAAA;AACRA,QAAAA,IAAAA,CAAKC,QAAQ,CAACnC,GAAAA,KAAQrB,IAAII,KAAM2C,CAAAA,MAAAA,CAAO1B,GAAAA,CAAAA,CAAAA;OAClC,MAAA;AACLrB,QAAAA,GAAAA,CAAII,MAAMkD,KAAK,EAAA;AACjB;AACF,KAAA;AACA7D,IAAAA,MAAAA,CAAO8C,IAA2B,EAAA;AAChC,MAAMkB,MAAAA,MAAAA,GAASzD,IAAIM,OAAQO,CAAAA,GAAAA;AAC3B,MAAA,MAAM6C,SAASnB,IAAK1B,CAAAA,GAAAA;AACpB,MAAI4C,IAAAA,MAAAA,KAAWC,MAAUA,IAAAA,MAAAA,KAAWC,MAAW,EAAA;AAC7C,QAAA,KAAA,MAAWnE,MAASQ,IAAAA,GAAAA,CAAII,KAAMwD,CAAAA,MAAAA,EAAU,EAAA;AACtC,UAAIpE,IAAAA,MAAAA,CAAM2C,cAAcrB,QAAU,EAAA;AAChCtB,YAAAA,MAAM2C,CAAAA,SAAAA,GAAYC,IAAKC,CAAAA,GAAAA,EAAQqB,GAAAA,MAAAA;WAC1B,MAAA;AACL,YAAMG,MAAAA,IAAAA,GAAOH,UAAUD,MAAU,IAAA,CAAA,CAAA;AACjCjE,YAAAA,OAAM2C,SAAa0B,IAAAA,IAAAA;AACrB;AACF;AACF;AACAvC,MAAOwB,MAAAA,CAAAA,MAAAA,CAAO9C,GAAIM,CAAAA,OAAAA,EAASiC,IAAAA,CAAAA;AAC7B,KAAA;IACAuB,SAAAA,GAAAA;AACE,MAAA,OAAO9D,IAAIM,OAAQI,CAAAA,OAAAA;AACrB,KAAA;IACAqD,MAAAA,GAAAA;AACE/D,MAAAA,GAAAA,CAAIM,QAAQI,OAAU,GAAA,IAAA;AACxB,KAAA;IACAsD,OAAAA,GAAAA;AACEhE,MAAAA,GAAAA,CAAIM,QAAQI,OAAU,GAAA,KAAA;AACxB;AACF,GAAA;AACF,CAnDoB,EAAA,aAAA,CAAA;AAqDb,MAAMuD,gBAAgB,MAAA;AAC3B,EAAMC,MAAAA,OAAAA,uBAAc7E,OAAAA,EAAAA;AAEpB,EAAMwC,MAAAA,EAAAA,8BAASE,IAAAA,KAAAA;AACb,IAAA,MAAMoC,MAASpC,GAAAA,IAAAA,CAAKqC,GAAI,CAAA,CAAC5E,KAAAA,KAAAA;AACvB,MAAA,IAAIwB,aAAEqD,YAAa7E,CAAAA,KAAAA,KAAUwB,YAAEsD,CAAAA,UAAAA,CAAW9E,KAAAA,CAAQ,EAAA;AAChD,QAAA,IAAI,CAAC0E,OAAAA,CAAQhE,GAAIV,CAAAA,KAAAA,CAAQ,EAAA;AACvB0E,UAAAA,OAAAA,CAAQ/D,GAAIX,CAAAA,KAAAA,EAAO+E,yBAAiB,CAAA,CAAA,CAAA,CAAA;AACtC;AACA,QAAOL,OAAAA,OAAAA,CAAQxE,IAAIF,KAAAA,CAAAA;AACrB;AACA,MAAOA,OAAAA,KAAAA;KACT,CAAA;AACA,IAAA,OAAOgF,mBAAWC,CAAAA,IAAAA,CAAKC,SAAUP,CAAAA,MAAAA,CAAAA,CAAAA;GAVxB,EAAA,IAAA,CAAA;AAYXtC,EAAG8C,EAAAA,CAAAA,IAAAA,GAAO,CAAIC,EAAAA,KAAAA;AACZ,IAAA,OAAO,WAAA;AACL,MAAA,OAAOA,GAAG,IAAI,CAAA,CAAER,IAAIvC,EAAAA,CAAAA,CAAIgD,KAAK,GAAA,CAAA;AAC/B,KAAA;AACF,GAAA;AACA,EAAOhD,OAAAA,EAAAA;AACT,CAAA;AAEO,MAAMjB,eAA8B,mBAAA,MAAA,CAAA,CAAA,GAAImB,IAC7C+C,KAAAA,qBAAAA,CAAK/C,IAAM,EAAA;EACTgD,QAAU,EAAA,QAAA;AACVC,EAAAA,QAAAA,kBAAW,CAAA,MAAA;AACT,IAAMd,MAAAA,OAAAA,uBAAc7E,OAAAA,EAAAA;AACpB,IAAA,OAAO,CAACG,KAAAA,KAAAA;AACN,MAAIA,IAAAA,KAAAA,IAASA,iBAAiByF,WAAa,EAAA;AAEzC,QAAA,IAAI,CAACf,OAAAA,CAAQhE,GAAIV,CAAAA,KAAAA,CAAQ,EAAA;AACvB0E,UAAAA,OAAAA,CAAQ/D,GAAIX,CAAAA,KAAAA,EAAO+E,yBAAiB,CAAA,CAAA,CAAA,CAAA;AACtC;AACA,QAAOL,OAAAA,OAAAA,CAAQxE,IAAIF,KAAAA,CAAAA;AACrB;AACA,MAAOA,OAAAA,KAAAA;AACT,KAAA;GACF,GAAA;EACA0F,eAAiB,EAAA,KAAA;EACjBC,gBAAkB,EAAA,KAAA;EAClBC,aAAe,EAAA;AACjB,CAAA,CAnByC,EAAA,iBAAA;AAoBpC,MAAMC,iCAAiCtD,MAAAA,CAAAA,CAAAA,GAAAA,IAAAA,KAAgB0C,IAAKC,CAAAA,SAAAA,CAAU3C,IAAAA,CAAnC,EAAA,gBAAA;AAE7BJ,MAAAA,mBAAAA,mBAAsCI,MAAAA,CAAAA,CAAAA,GAAAA,IAAAA,KAAgB,EAApB,EAAA,qBAAA;AAExC,MAAMuD,gBAAoCC,QAAAA,CAAAA;AAAAA,EAAAA;;;;;AACtC1F,EAAAA,IAAAA;EAET,OAAO2F,MAAAA,CACL3D,IACAvB,OACA,EAAA;AACA,IAAA,MAAMmF,QAAW,GAAA,IAAIH,OAAQzD,CAAAA,EAAAA,EAAIvB,OAAAA,CAAAA;AACjC,IAAOmF,OAAAA,QAAAA;AACT;AAEAjE,EAAAA,WAAAA,CACqBK,IACAvB,OACnB,EAAA;AACA,IAAK,KAAA,EAAA,EAAA,KAHcuB,EAAAA,GAAAA,EAAAA,EAAAA,KACAvB,OAAAA,GAAAA,OAAAA,EAAAA,IAZZT,CAAAA,IAAAA,GAAOyF,OAAQzF,CAAAA,IAAAA;AAgBtBD,IAAAA,KAAAA,CAAMoD,YAAY,IAAM,EAAA,KAAA,EAAOvD,MAAOa,CAAAA,OAAAA,IAAW,EAAC,CAAA;AAClD,IAAO,OAAA,IAAIoF,MAAmB,IAAM,EAAA;MAClCzD,KAA2BlC,CAAAA,MAAAA,EAAQ4F,GAAG5D,IAAW,EAAA;AAC/C,QAAOhC,OAAAA,MAAAA,CAAOL,GAAG,CAAA,GAAKqC,IAAAA,CAAAA;AACxB,OAAA;MACArC,GAAIK,CAAAA,MAAAA,EAAQ6F,MAAuBC,QAAa,EAAA;AAC9C,QAAMrG,MAAAA,KAAAA,GAAQO,OAAO6F,IAAAA,CAAAA;AACrB,QAAA,IAAIpG,iBAAiB+F,QAAU,EAAA;AAC7B,UAAA,OAAO,YAAkCxD,IAAO,EAAA;AAC9C,YAAA,OAAOvC,MAAMyC,KAAM,CAAA,IAAA,KAAS4D,QAAW9F,GAAAA,MAAAA,GAAS,MAAMgC,IAAAA,CAAAA;AACxD,WAAA;AACF;AACA,QAAOvC,OAAAA,KAAAA;AACT;KACF,CAAA;AACF;AAEAsG,EAAAA,SAAAA,CAAUjF,GAAa,EAAA;AACrBjB,IAAAA,KAAAA,CAAMoD,WAAY,CAAA,IAAA,EAAM,KAAA,CAAA,CAAOvD,MAAO,CAAA;AAAEoB,MAAAA;KAAI,CAAA;AAC9C;EAEAkF,cAAiB,GAAA;AACf,IAAO,OAAA;AACLlE,MAAAA,EAAAA,EAAI,IAAKA,CAAAA,EAAAA;AACTvB,MAAAA,OAAAA,EAAS,IAAKA,CAAAA;AAChB,KAAA;AACF;AAGAZ,EAAAA,GAAAA,CAAAA,GAAOqC,IAAS,EAAA;AACd,IAAO,OAAA,IAAA,CAAKF,EAAE,CAAA,GAAIE,IAAAA,CAAAA;AACpB;AACF","file":"decoratorCache.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AnyFn, TypedFn } from \"@/internals/types.js\";\nimport * as R from \"remeda\";\nimport hash from \"object-hash\";\nimport { createHash, createRandomHash } from \"@/internals/helpers/hash.js\";\nimport { findDescriptor } from \"@/internals/helpers/prototype.js\";\n\ntype InputFn = AnyFn;\ntype TargetFn = AnyFn;\ntype Instance = NonNullable<any>;\n\ntype CacheKeyFn = (this: Instance, ...args: any[]) => string;\n\nexport interface CacheDecoratorOptions {\n enabled: boolean;\n ttl?: number;\n cacheKey: CacheKeyFn;\n enumerable?: boolean;\n}\n\ninterface CacheEntry {\n expiresAt: number;\n data: any;\n}\n\ninterface FnContext {\n options: CacheDecoratorOptions;\n cache: Map<string, CacheEntry>;\n}\n\ninterface GroupContext {\n options: CacheDecoratorOptions;\n instances: WeakMap<Instance, FnContext>;\n}\n\nexport interface CacheDecoratorInstance {\n get(key?: string): CacheEntry | undefined;\n\n clear(keys?: string[]): void;\n\n isEnabled(): boolean;\n\n enable(): void;\n\n disable(): void;\n\n update(data: Partial<CacheDecoratorOptions>): void;\n}\n\nconst state = {\n container: new WeakMap<InputFn, GroupContext>(),\n extractDescriptor(descriptor: PropertyDescriptor) {\n // Method approach\n if (descriptor.value != null) {\n return {\n value: descriptor.value as AnyFn,\n update: (value: TargetFn) => {\n descriptor.value = value;\n },\n };\n }\n // Accessor approach\n if (descriptor.get != null) {\n return {\n value: descriptor.get as AnyFn,\n update: (value: TargetFn) => {\n descriptor.get = value;\n },\n };\n }\n throw new Error(`@${Cache.name} decorator must be either on a method or get accessor.`);\n },\n getInstanceContext<T extends NonNullable<unknown>>(target: T, ctx: GroupContext) {\n if (!ctx.instances.has(target)) {\n ctx.instances.set(target, {\n cache: new Map(),\n options: ctx.options,\n });\n }\n return ctx.instances.get(target)!;\n },\n} as const;\n\nconst initQueue = new WeakMap<Instance, { key: PropertyKey; enumerable: boolean }[]>();\n\nexport function Cache(_options?: Partial<CacheDecoratorOptions>) {\n const baseOptions: Required<CacheDecoratorOptions> = {\n enabled: true,\n cacheKey: ObjectHashKeyFn,\n ttl: Infinity,\n enumerable: false,\n ...R.pickBy(_options ?? {}, R.isDefined),\n };\n\n return function handler(\n obj: NonNullable<object>,\n key: string | symbol,\n descriptor: PropertyDescriptor,\n ) {\n if (Object.hasOwn(obj, \"constructor\")) {\n const constructor = obj.constructor;\n if (!initQueue.has(constructor)) {\n initQueue.set(constructor, []);\n }\n\n baseOptions.enumerable = Boolean(descriptor.get);\n initQueue\n .get(constructor)!\n .push({ key, enumerable: _options?.enumerable ?? baseOptions.enumerable });\n }\n\n const target = state.extractDescriptor(descriptor);\n if (descriptor.get && !_options?.cacheKey) {\n baseOptions.cacheKey = SingletonCacheKeyFn;\n }\n\n const groupContext: GroupContext = { instances: new WeakMap(), options: baseOptions };\n\n const fn = function wrapper(this: any, ...args: any[]) {\n const invokeOriginal = () => target.value.apply(this, args);\n const ctx = state.getInstanceContext(this, groupContext);\n if (!ctx.options.enabled) {\n return invokeOriginal();\n }\n\n const inputHash = ctx.options.cacheKey.apply(this, args);\n if (\n !ctx.cache.has(inputHash) ||\n (ctx.cache.get(inputHash)?.expiresAt ?? Infinity) < Date.now() // is expired check\n ) {\n const result = invokeOriginal();\n ctx.cache.set(inputHash, {\n expiresAt: Date.now() + (ctx.options.ttl ?? Infinity),\n data: result,\n });\n }\n return ctx.cache.get(inputHash)!.data;\n };\n Object.defineProperty(fn, \"name\", {\n get: () => target.value.name ?? \"anonymous\",\n });\n\n target.update(fn);\n state.container.set(fn, groupContext);\n };\n}\n\nCache.init = function init<T extends NonNullable<unknown>>(self: T) {\n const task = initQueue.get(self.constructor) ?? [];\n for (const { key, enumerable } of task) {\n const descriptor = Object.getOwnPropertyDescriptor(self.constructor.prototype, key);\n if (descriptor) {\n Object.defineProperty(self, key, Object.assign(descriptor, { enumerable }));\n }\n }\n initQueue.delete(self);\n};\n\nCache.getInstance = function getInstance<T extends NonNullable<unknown>>(\n target: T,\n property: keyof T,\n): CacheDecoratorInstance {\n const descriptor = findDescriptor(target, property);\n if (!descriptor) {\n throw new TypeError(`No descriptor has been found for '${String(property)}'`);\n }\n const value = state.extractDescriptor(descriptor);\n const ctxByInstance = state.container.get(value.value);\n if (!ctxByInstance) {\n throw new TypeError(`No cache instance is bounded to '${String(property)}'!`);\n }\n\n const ctx = state.getInstanceContext(target, ctxByInstance);\n return {\n get(key = \"\") {\n return ctx.cache.get(key);\n },\n clear(keys?: string[]) {\n if (keys) {\n keys.forEach((key) => ctx.cache.delete(key));\n } else {\n ctx.cache.clear();\n }\n },\n update(data: CacheDecoratorOptions) {\n const oldTTL = ctx.options.ttl;\n const newTTL = data.ttl;\n if (oldTTL !== newTTL && newTTL !== undefined) {\n for (const value of ctx.cache.values()) {\n if (value.expiresAt === Infinity) {\n value.expiresAt = Date.now() + newTTL;\n } else {\n const diff = newTTL - (oldTTL ?? 0);\n value.expiresAt += diff;\n }\n }\n }\n Object.assign(ctx.options, data);\n },\n isEnabled() {\n return ctx.options.enabled;\n },\n enable() {\n ctx.options.enabled = true;\n },\n disable() {\n ctx.options.enabled = false;\n },\n };\n};\n\nexport const WeakRefKeyFn = (() => {\n const _lookup = new WeakMap();\n\n const fn = (...args: any[]) => {\n const chunks = args.map((value) => {\n if (R.isObjectType(value) || R.isFunction(value)) {\n if (!_lookup.has(value)) {\n _lookup.set(value, createRandomHash(6));\n }\n return _lookup.get(value)!;\n }\n return value;\n });\n return createHash(JSON.stringify(chunks));\n };\n fn.from = <T>(cb: (self: T) => any[]) => {\n return function (this: T) {\n return cb(this).map(fn).join(\"#\");\n };\n };\n return fn;\n})() satisfies CacheKeyFn;\n\nexport const ObjectHashKeyFn: CacheKeyFn = (...args: any[]) =>\n hash(args, {\n encoding: \"base64\",\n replacer: (() => {\n const _lookup = new WeakMap();\n return (value: unknown) => {\n if (value && value instanceof AbortSignal) {\n // not supported by \"hash\" function\n if (!_lookup.has(value)) {\n _lookup.set(value, createRandomHash(6));\n }\n return _lookup.get(value)!;\n }\n return value;\n };\n })(),\n unorderedArrays: false,\n unorderedObjects: false,\n unorderedSets: false,\n });\nexport const JSONCacheKeyFn: CacheKeyFn = (...args: any[]) => JSON.stringify(args);\n// eslint-disable-next-line unused-imports/no-unused-vars\nexport const SingletonCacheKeyFn: CacheKeyFn = (...args: any[]) => \"\";\n\nexport class CacheFn<P extends any[], R> extends Function {\n readonly name = CacheFn.name;\n\n static create<A extends any[], B>(\n fn: (...args: A) => B,\n options?: Partial<CacheDecoratorOptions>,\n ) {\n const instance = new CacheFn(fn, options);\n return instance as TypedFn<A, B> & CacheFn<A, B>;\n }\n\n constructor(\n protected readonly fn: (...args: P) => R,\n protected readonly options?: Partial<CacheDecoratorOptions>,\n ) {\n super();\n\n Cache.getInstance(this, \"get\").update(options ?? {});\n return new Proxy<typeof this>(this, {\n apply(this: CacheFn<P, R>, target, _, args: any[]) {\n return target.get(...(args as unknown as P));\n },\n get(target, prop: string | symbol, receiver: any) {\n const value = target[prop as keyof typeof target];\n if (value instanceof Function) {\n return function (this: CacheFn<P, R>, ...args: P) {\n return value.apply(this === receiver ? target : this, args);\n };\n }\n return value;\n },\n }) as unknown as CacheFn<P, R> & typeof fn;\n }\n\n updateTTL(ttl: number) {\n Cache.getInstance(this, \"get\").update({ ttl });\n }\n\n createSnapshot() {\n return {\n fn: this.fn,\n options: this.options,\n };\n }\n\n @Cache()\n get(...args: P) {\n return this.fn(...args);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cache/decoratorCache.ts"],"names":["state","container","WeakMap","extractDescriptor","descriptor","value","update","get","Error","Cache","name","getInstanceContext","target","ctx","instances","has","set","cache","Map","options","initQueue","_options","baseOptions","enabled","cacheKey","ObjectHashKeyFn","ttl","Infinity","enumerable","R","pickBy","isDefined","handler","obj","key","Object","hasOwn","constructor","Boolean","push","SingletonCacheKeyFn","groupContext","fn","wrapper","args","invokeOriginal","apply","inputHash","expiresAt","Date","now","result","data","defineProperty","init","self","task","getOwnPropertyDescriptor","prototype","assign","delete","getInstance","property","findDescriptor","TypeError","String","ctxByInstance","clear","keys","forEach","oldTTL","newTTL","undefined","values","diff","isEnabled","enable","disable","WeakRefKeyFn","_lookup","chunks","map","isObjectType","isFunction","createRandomHash","createHash","JSON","stringify","from","cb","join","hash","encoding","replacer","AbortSignal","unorderedArrays","unorderedObjects","unorderedSets","JSONCacheKeyFn","CacheFn","Function","create","instance","Proxy","_","prop","receiver","updateTTL","createSnapshot"],"mappings":"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","file":"decoratorCache.js","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AnyFn, TypedFn } from \"@/internals/types.js\";\nimport * as R from \"remeda\";\nimport hash from \"object-hash\";\nimport { createHash, createRandomHash } from \"@/internals/helpers/hash.js\";\nimport { findDescriptor } from \"@/internals/helpers/prototype.js\";\n\ntype InputFn = AnyFn;\ntype TargetFn = AnyFn;\ntype Instance = NonNullable<any>;\n\ntype CacheKeyFn = (this: Instance, ...args: any[]) => string;\n\nexport interface CacheDecoratorOptions {\n enabled: boolean;\n ttl?: number;\n cacheKey: CacheKeyFn;\n enumerable?: boolean;\n}\n\ninterface CacheEntry {\n expiresAt: number;\n data: any;\n}\n\ninterface FnContext {\n options: CacheDecoratorOptions;\n cache: Map<string, CacheEntry>;\n}\n\ninterface GroupContext {\n options: CacheDecoratorOptions;\n instances: WeakMap<Instance, FnContext>;\n}\n\nexport interface CacheDecoratorInstance {\n get(key?: string): CacheEntry | undefined;\n\n clear(keys?: string[]): void;\n\n isEnabled(): boolean;\n\n enable(): void;\n\n disable(): void;\n\n update(data: Partial<CacheDecoratorOptions>): void;\n}\n\nconst state = {\n container: new WeakMap<InputFn, GroupContext>(),\n extractDescriptor(descriptor: PropertyDescriptor) {\n // Method approach\n if (descriptor.value != null) {\n return {\n value: descriptor.value as AnyFn,\n update: (value: TargetFn) => {\n descriptor.value = value;\n },\n };\n }\n // Accessor approach\n if (descriptor.get != null) {\n return {\n value: descriptor.get as AnyFn,\n update: (value: TargetFn) => {\n descriptor.get = value;\n },\n };\n }\n throw new Error(`@${Cache.name} decorator must be either on a method or get accessor.`);\n },\n getInstanceContext<T extends NonNullable<unknown>>(target: T, ctx: GroupContext) {\n if (!ctx.instances.has(target)) {\n ctx.instances.set(target, {\n cache: new Map(),\n options: ctx.options,\n });\n }\n return ctx.instances.get(target)!;\n },\n} as const;\n\nconst initQueue = new WeakMap<Instance, { key: PropertyKey; enumerable: boolean }[]>();\n\nexport function Cache(_options?: Partial<CacheDecoratorOptions>) {\n const baseOptions: Required<CacheDecoratorOptions> = {\n enabled: true,\n cacheKey: ObjectHashKeyFn,\n ttl: Infinity,\n enumerable: false,\n ...R.pickBy(_options ?? {}, R.isDefined),\n };\n\n return function handler(\n obj: NonNullable<object>,\n key: string | symbol,\n descriptor: PropertyDescriptor,\n ) {\n if (Object.hasOwn(obj, \"constructor\")) {\n const constructor = obj.constructor;\n if (!initQueue.has(constructor)) {\n initQueue.set(constructor, []);\n }\n\n baseOptions.enumerable = Boolean(descriptor.get);\n initQueue\n .get(constructor)!\n .push({ key, enumerable: _options?.enumerable ?? baseOptions.enumerable });\n }\n\n const target = state.extractDescriptor(descriptor);\n if (descriptor.get && !_options?.cacheKey) {\n baseOptions.cacheKey = SingletonCacheKeyFn;\n }\n\n const groupContext: GroupContext = { instances: new WeakMap(), options: baseOptions };\n\n const fn = function wrapper(this: any, ...args: any[]) {\n const invokeOriginal = () => target.value.apply(this, args);\n const ctx = state.getInstanceContext(this, groupContext);\n if (!ctx.options.enabled) {\n return invokeOriginal();\n }\n\n const inputHash = ctx.options.cacheKey.apply(this, args);\n if (\n !ctx.cache.has(inputHash) ||\n (ctx.cache.get(inputHash)?.expiresAt ?? Infinity) < Date.now() // is expired check\n ) {\n const result = invokeOriginal();\n ctx.cache.set(inputHash, {\n expiresAt: Date.now() + (ctx.options.ttl ?? Infinity),\n data: result,\n });\n }\n return ctx.cache.get(inputHash)!.data;\n };\n Object.defineProperty(fn, \"name\", {\n get: () => target.value.name ?? \"anonymous\",\n });\n\n target.update(fn);\n state.container.set(fn, groupContext);\n };\n}\n\nCache.init = function init<T extends NonNullable<unknown>>(self: T) {\n const task = initQueue.get(self.constructor) ?? [];\n for (const { key, enumerable } of task) {\n const descriptor = Object.getOwnPropertyDescriptor(self.constructor.prototype, key);\n if (descriptor) {\n Object.defineProperty(self, key, Object.assign(descriptor, { enumerable }));\n }\n }\n initQueue.delete(self);\n};\n\nCache.getInstance = function getInstance<T extends NonNullable<unknown>>(\n target: T,\n property: keyof T,\n): CacheDecoratorInstance {\n const descriptor = findDescriptor(target, property);\n if (!descriptor) {\n throw new TypeError(`No descriptor has been found for '${String(property)}'`);\n }\n const value = state.extractDescriptor(descriptor);\n const ctxByInstance = state.container.get(value.value);\n if (!ctxByInstance) {\n throw new TypeError(`No cache instance is bounded to '${String(property)}'!`);\n }\n\n const ctx = state.getInstanceContext(target, ctxByInstance);\n return {\n get(key = \"\") {\n return ctx.cache.get(key);\n },\n clear(keys?: string[]) {\n if (keys) {\n keys.forEach((key) => ctx.cache.delete(key));\n } else {\n ctx.cache.clear();\n }\n },\n update(data: CacheDecoratorOptions) {\n const oldTTL = ctx.options.ttl;\n const newTTL = data.ttl;\n if (oldTTL !== newTTL && newTTL !== undefined) {\n for (const value of ctx.cache.values()) {\n if (value.expiresAt === Infinity) {\n value.expiresAt = Date.now() + newTTL;\n } else {\n const diff = newTTL - (oldTTL ?? 0);\n value.expiresAt += diff;\n }\n }\n }\n Object.assign(ctx.options, data);\n },\n isEnabled() {\n return ctx.options.enabled;\n },\n enable() {\n ctx.options.enabled = true;\n },\n disable() {\n ctx.options.enabled = false;\n },\n };\n};\n\nexport const WeakRefKeyFn = (() => {\n const _lookup = new WeakMap();\n\n const fn = (...args: any[]) => {\n const chunks = args.map((value) => {\n if (R.isObjectType(value) || R.isFunction(value)) {\n if (!_lookup.has(value)) {\n _lookup.set(value, createRandomHash(6));\n }\n return _lookup.get(value)!;\n }\n return value;\n });\n return createHash(JSON.stringify(chunks));\n };\n fn.from = <T>(cb: (self: T) => any[]) => {\n return function (this: T) {\n return cb(this).map(fn).join(\"#\");\n };\n };\n return fn;\n})() satisfies CacheKeyFn;\n\nexport const ObjectHashKeyFn: CacheKeyFn = (...args: any[]) =>\n hash(args, {\n encoding: \"base64\",\n replacer: (() => {\n const _lookup = new WeakMap();\n return (value: unknown) => {\n if (value && value instanceof AbortSignal) {\n // not supported by \"hash\" function\n if (!_lookup.has(value)) {\n _lookup.set(value, createRandomHash(6));\n }\n return _lookup.get(value)!;\n }\n return value;\n };\n })(),\n unorderedArrays: false,\n unorderedObjects: false,\n unorderedSets: false,\n });\nexport const JSONCacheKeyFn: CacheKeyFn = (...args: any[]) => JSON.stringify(args);\n// eslint-disable-next-line unused-imports/no-unused-vars\nexport const SingletonCacheKeyFn: CacheKeyFn = (...args: any[]) => \"\";\n\nexport class CacheFn<P extends any[], R> extends Function {\n readonly name = CacheFn.name;\n\n static create<A extends any[], B>(\n fn: (...args: A) => B,\n options?: Partial<CacheDecoratorOptions>,\n ) {\n const instance = new CacheFn(fn, options);\n return instance as TypedFn<A, B> & CacheFn<A, B>;\n }\n\n constructor(\n protected readonly fn: (...args: P) => R,\n protected readonly options?: Partial<CacheDecoratorOptions>,\n ) {\n super();\n\n Cache.getInstance(this, \"get\").update(options ?? {});\n return new Proxy<typeof this>(this, {\n apply(this: CacheFn<P, R>, target, _, args: any[]) {\n return target.get(...(args as unknown as P));\n },\n get(target, prop: string | symbol, receiver: any) {\n const value = target[prop as keyof typeof target];\n if (value instanceof Function) {\n return function (this: CacheFn<P, R>, ...args: P) {\n return value.apply(this === receiver ? target : this, args);\n };\n }\n return value;\n },\n }) as unknown as CacheFn<P, R> & typeof fn;\n }\n\n updateTTL(ttl: number) {\n Cache.getInstance(this, \"get\").update({ ttl });\n }\n\n createSnapshot() {\n return {\n fn: this.fn,\n options: this.options,\n };\n }\n\n @Cache()\n get(...args: P) {\n return this.fn(...args);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["decoratorCache.ts"],"names":["state","container","WeakMap","extractDescriptor","descriptor","value","update","get","Error","Cache","name","getInstanceContext","target","ctx","instances","has","set","cache","Map","options","initQueue","_options","baseOptions","enabled","cacheKey","ObjectHashKeyFn","ttl","Infinity","enumerable","R","pickBy","isDefined","handler","obj","key","Object","hasOwn","constructor","Boolean","push","SingletonCacheKeyFn","groupContext","fn","wrapper","args","invokeOriginal","apply","inputHash","expiresAt","Date","now","result","data","defineProperty","init","self","task","getOwnPropertyDescriptor","prototype","assign","delete","getInstance","property","findDescriptor","TypeError","String","ctxByInstance","clear","keys","forEach","oldTTL","newTTL","undefined","values","diff","isEnabled","enable","disable","WeakRefKeyFn","_lookup","chunks","map","isObjectType","isFunction","createRandomHash","createHash","JSON","stringify","from","cb","join","hash","encoding","replacer","AbortSignal","unorderedArrays","unorderedObjects","unorderedSets","JSONCacheKeyFn","CacheFn","Function","create","instance","Proxy","_","prop","receiver","updateTTL","createSnapshot"],"mappings":"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","file":"decoratorCache.js","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AnyFn, TypedFn } from \"@/internals/types.js\";\nimport * as R from \"remeda\";\nimport hash from \"object-hash\";\nimport { createHash, createRandomHash } from \"@/internals/helpers/hash.js\";\nimport { findDescriptor } from \"@/internals/helpers/prototype.js\";\n\ntype InputFn = AnyFn;\ntype TargetFn = AnyFn;\ntype Instance = NonNullable<any>;\n\ntype CacheKeyFn = (this: Instance, ...args: any[]) => string;\n\nexport interface CacheDecoratorOptions {\n enabled: boolean;\n ttl?: number;\n cacheKey: CacheKeyFn;\n enumerable?: boolean;\n}\n\ninterface CacheEntry {\n expiresAt: number;\n data: any;\n}\n\ninterface FnContext {\n options: CacheDecoratorOptions;\n cache: Map<string, CacheEntry>;\n}\n\ninterface GroupContext {\n options: CacheDecoratorOptions;\n instances: WeakMap<Instance, FnContext>;\n}\n\nexport interface CacheDecoratorInstance {\n get(key?: string): CacheEntry | undefined;\n\n clear(keys?: string[]): void;\n\n isEnabled(): boolean;\n\n enable(): void;\n\n disable(): void;\n\n update(data: Partial<CacheDecoratorOptions>): void;\n}\n\nconst state = {\n container: new WeakMap<InputFn, GroupContext>(),\n extractDescriptor(descriptor: PropertyDescriptor) {\n // Method approach\n if (descriptor.value != null) {\n return {\n value: descriptor.value as AnyFn,\n update: (value: TargetFn) => {\n descriptor.value = value;\n },\n };\n }\n // Accessor approach\n if (descriptor.get != null) {\n return {\n value: descriptor.get as AnyFn,\n update: (value: TargetFn) => {\n descriptor.get = value;\n },\n };\n }\n throw new Error(`@${Cache.name} decorator must be either on a method or get accessor.`);\n },\n getInstanceContext<T extends NonNullable<unknown>>(target: T, ctx: GroupContext) {\n if (!ctx.instances.has(target)) {\n ctx.instances.set(target, {\n cache: new Map(),\n options: ctx.options,\n });\n }\n return ctx.instances.get(target)!;\n },\n} as const;\n\nconst initQueue = new WeakMap<Instance, { key: PropertyKey; enumerable: boolean }[]>();\n\nexport function Cache(_options?: Partial<CacheDecoratorOptions>) {\n const baseOptions: Required<CacheDecoratorOptions> = {\n enabled: true,\n cacheKey: ObjectHashKeyFn,\n ttl: Infinity,\n enumerable: false,\n ...R.pickBy(_options ?? {}, R.isDefined),\n };\n\n return function handler(\n obj: NonNullable<object>,\n key: string | symbol,\n descriptor: PropertyDescriptor,\n ) {\n if (Object.hasOwn(obj, \"constructor\")) {\n const constructor = obj.constructor;\n if (!initQueue.has(constructor)) {\n initQueue.set(constructor, []);\n }\n\n baseOptions.enumerable = Boolean(descriptor.get);\n initQueue\n .get(constructor)!\n .push({ key, enumerable: _options?.enumerable ?? baseOptions.enumerable });\n }\n\n const target = state.extractDescriptor(descriptor);\n if (descriptor.get && !_options?.cacheKey) {\n baseOptions.cacheKey = SingletonCacheKeyFn;\n }\n\n const groupContext: GroupContext = { instances: new WeakMap(), options: baseOptions };\n\n const fn = function wrapper(this: any, ...args: any[]) {\n const invokeOriginal = () => target.value.apply(this, args);\n const ctx = state.getInstanceContext(this, groupContext);\n if (!ctx.options.enabled) {\n return invokeOriginal();\n }\n\n const inputHash = ctx.options.cacheKey.apply(this, args);\n if (\n !ctx.cache.has(inputHash) ||\n (ctx.cache.get(inputHash)?.expiresAt ?? Infinity) < Date.now() // is expired check\n ) {\n const result = invokeOriginal();\n ctx.cache.set(inputHash, {\n expiresAt: Date.now() + (ctx.options.ttl ?? Infinity),\n data: result,\n });\n }\n return ctx.cache.get(inputHash)!.data;\n };\n Object.defineProperty(fn, \"name\", {\n get: () => target.value.name ?? \"anonymous\",\n });\n\n target.update(fn);\n state.container.set(fn, groupContext);\n };\n}\n\nCache.init = function init<T extends NonNullable<unknown>>(self: T) {\n const task = initQueue.get(self.constructor) ?? [];\n for (const { key, enumerable } of task) {\n const descriptor = Object.getOwnPropertyDescriptor(self.constructor.prototype, key);\n if (descriptor) {\n Object.defineProperty(self, key, Object.assign(descriptor, { enumerable }));\n }\n }\n initQueue.delete(self);\n};\n\nCache.getInstance = function getInstance<T extends NonNullable<unknown>>(\n target: T,\n property: keyof T,\n): CacheDecoratorInstance {\n const descriptor = findDescriptor(target, property);\n if (!descriptor) {\n throw new TypeError(`No descriptor has been found for '${String(property)}'`);\n }\n const value = state.extractDescriptor(descriptor);\n const ctxByInstance = state.container.get(value.value);\n if (!ctxByInstance) {\n throw new TypeError(`No cache instance is bounded to '${String(property)}'!`);\n }\n\n const ctx = state.getInstanceContext(target, ctxByInstance);\n return {\n get(key = \"\") {\n return ctx.cache.get(key);\n },\n clear(keys?: string[]) {\n if (keys) {\n keys.forEach((key) => ctx.cache.delete(key));\n } else {\n ctx.cache.clear();\n }\n },\n update(data: CacheDecoratorOptions) {\n const oldTTL = ctx.options.ttl;\n const newTTL = data.ttl;\n if (oldTTL !== newTTL && newTTL !== undefined) {\n for (const value of ctx.cache.values()) {\n if (value.expiresAt === Infinity) {\n value.expiresAt = Date.now() + newTTL;\n } else {\n const diff = newTTL - (oldTTL ?? 0);\n value.expiresAt += diff;\n }\n }\n }\n Object.assign(ctx.options, data);\n },\n isEnabled() {\n return ctx.options.enabled;\n },\n enable() {\n ctx.options.enabled = true;\n },\n disable() {\n ctx.options.enabled = false;\n },\n };\n};\n\nexport const WeakRefKeyFn = (() => {\n const _lookup = new WeakMap();\n\n const fn = (...args: any[]) => {\n const chunks = args.map((value) => {\n if (R.isObjectType(value) || R.isFunction(value)) {\n if (!_lookup.has(value)) {\n _lookup.set(value, createRandomHash(6));\n }\n return _lookup.get(value)!;\n }\n return value;\n });\n return createHash(JSON.stringify(chunks));\n };\n fn.from = <T>(cb: (self: T) => any[]) => {\n return function (this: T) {\n return cb(this).map(fn).join(\"#\");\n };\n };\n return fn;\n})() satisfies CacheKeyFn;\n\nexport const ObjectHashKeyFn: CacheKeyFn = (...args: any[]) =>\n hash(args, {\n encoding: \"base64\",\n replacer: (() => {\n const _lookup = new WeakMap();\n return (value: unknown) => {\n if (value && value instanceof AbortSignal) {\n // not supported by \"hash\" function\n if (!_lookup.has(value)) {\n _lookup.set(value, createRandomHash(6));\n }\n return _lookup.get(value)!;\n }\n return value;\n };\n })(),\n unorderedArrays: false,\n unorderedObjects: false,\n unorderedSets: false,\n });\nexport const JSONCacheKeyFn: CacheKeyFn = (...args: any[]) => JSON.stringify(args);\n// eslint-disable-next-line unused-imports/no-unused-vars\nexport const SingletonCacheKeyFn: CacheKeyFn = (...args: any[]) => \"\";\n\nexport class CacheFn<P extends any[], R> extends Function {\n readonly name = CacheFn.name;\n\n static create<A extends any[], B>(\n fn: (...args: A) => B,\n options?: Partial<CacheDecoratorOptions>,\n ) {\n const instance = new CacheFn(fn, options);\n return instance as TypedFn<A, B> & CacheFn<A, B>;\n }\n\n constructor(\n protected readonly fn: (...args: P) => R,\n protected readonly options?: Partial<CacheDecoratorOptions>,\n ) {\n super();\n\n Cache.getInstance(this, \"get\").update(options ?? {});\n return new Proxy<typeof this>(this, {\n apply(this: CacheFn<P, R>, target, _, args: any[]) {\n return target.get(...(args as unknown as P));\n },\n get(target, prop: string | symbol, receiver: any) {\n const value = target[prop as keyof typeof target];\n if (value instanceof Function) {\n return function (this: CacheFn<P, R>, ...args: P) {\n return value.apply(this === receiver ? target : this, args);\n };\n }\n return value;\n },\n }) as unknown as CacheFn<P, R> & typeof fn;\n }\n\n updateTTL(ttl: number) {\n Cache.getInstance(this, \"get\").update({ ttl });\n }\n\n createSnapshot() {\n return {\n fn: this.fn,\n options: this.options,\n };\n }\n\n @Cache()\n get(...args: P) {\n return this.fn(...args);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["
|
|
1
|
+
{"version":3,"sources":["fileCache.ts"],"names":["FileCache","BaseCache","constructor","input","register","source","fullPath","fromProvider","provider","fs","promises","writeFile","serialize","getProvider","exists","stat","then","r","isFile","catch","serialized","readFile","target","snapshot","Serializer","deserialize","Target","getFactory","ref","instance","fromSnapshot","TypeError","SlidingCache","size","Infinity","ttl","reload","Cache","getInstance","clear","save","set","key","value","get","finally","has","delete","result","createSnapshot","loadSnapshot","Object","assign"],"mappings":";;;;;;;;;;;;;;AAcC,SAAA,YAAA,CAAA,UAAA,EAAA,MAAA,EAAA,GAAA,EAAA,IAAA,EAAA;;;;;;AAAA,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA;;;;;AAaM,MAAMA,kBAAqBC,kBAAAA,CAAAA;EA3BlC;;;;AA4BEC,EAAAA,WAAAA,CAA+BC,KAAc,EAAA;AAC3C,IAAK,KAAA,EAAA,EAAA,KADwBA,KAAAA,GAAAA,KAAAA;AAE/B;EAEA;AACE,IAAA,IAAA,CAAKC,QAAQ,EAAA;AACf;AAEA,EAAA,IAAIC,MAAS,GAAA;AACX,IAAA,OAAO,KAAKF,KAAMG,CAAAA,QAAAA;AACpB;EAEA,aAAaC,YAAAA,CAAgBC,UAAwBL,KAAc,EAAA;AACjE,IAAMM,MAAAA,mBAAAA,CAAGC,SAASC,SAAUR,CAAAA,KAAAA,CAAMG,UAAU,MAAME,QAAAA,CAASI,WAAS,CAAA;AACpE,IAAO,OAAA,IAAIZ,UAAaG,KAAAA,CAAAA;AAC1B;AAEA,EAAA,MACgBU,WAAqC,GAAA;AACnD,IAAA,MAAMC,SAAS,MAAML,mBAAAA,CAAGC,SACrBK,IAAK,CAAA,IAAA,CAAKZ,MAAMG,QAAQ,CAAA,CACxBU,IAAK,CAAA,CAACC,MAAMA,CAAEC,CAAAA,MAAAA,EAAM,CACpBC,CAAAA,KAAAA,CAAM,MAAM,KAAA,CAAA;AAEf,IAAA,IAAIL,MAAQ,EAAA;AACV,MAAMM,MAAAA,UAAAA,GAAa,MAAMX,mBAAGC,CAAAA,QAAAA,CAASW,SAAS,IAAKlB,CAAAA,KAAAA,CAAMG,UAAU,MAAA,CAAA;AACnE,MAAA,MAAM,EAAEgB,MAAQC,EAAAA,QAAAA,KAAa,MAAMC,yBAAAA,CAAWC,YAAiBL,UAAAA,CAAAA;AAC/D,MAAA,MAAMM,MAASF,GAAAA,yBAAAA,CAAWG,UAAWL,CAAAA,MAAAA,CAAQM,CAAAA,GAAAA;AAC7C,MAAA,MAAMC,QAAW,GAAA,MAAMH,MAAOI,CAAAA,YAAAA,CAAaP,QAAAA,CAAAA;AAC3C,MAAI,IAAA,EAAEM,oBAAoB5B,kBAAY,CAAA,EAAA;AACpC,QAAM,MAAA,IAAI8B,UAAU,mEAAA,CAAA;AACtB;AACA,MAAOF,OAAAA,QAAAA;KACF,MAAA;AACL,MAAA,OAAO,IAAIG,6BAAa,CAAA;QACtBC,IAAMC,EAAAA,QAAAA;QACNC,GAAKD,EAAAA;OACP,CAAA;AACF;AACF;AAEA,EAAA,MAAME,MAAS,GAAA;AAEbC,IAAAA,wBAAAA,CAAMC,WAAY,CAAA,IAAA,EAAM,aAAA,CAAA,CAAeC,KAAK,EAAA;AAC5C,IAAM,KAAA,MAAM,KAAK1B,WAAW,EAAA;AAC9B;AAEA,EAAA,MAAgB2B,IAAO,GAAA;AACrB,IAAMhC,MAAAA,QAAAA,GAAW,MAAM,IAAA,CAAKK,WAAW,EAAA;AACvC,IAAO,OAAA,MAAMJ,mBAAGC,CAAAA,QAAAA,CAASC,SAAU,CAAA,IAAA,CAAKR,MAAMG,QAAU,EAAA,MAAME,QAASI,CAAAA,SAAAA,EAAS,CAAA;AAClF;AAEA,EAAA,MAAMqB,IAAO,GAAA;AACX,IAAMzB,MAAAA,QAAAA,GAAW,MAAM,IAAA,CAAKK,WAAW,EAAA;AACvC,IAAA,OAAOL,SAASyB,IAAI,EAAA;AACtB;EAEA,MAAMQ,GAAAA,CAAIC,KAAaC,KAAU,EAAA;AAC/B,IAAMnC,MAAAA,QAAAA,GAAW,MAAM,IAAA,CAAKK,WAAW,EAAA;AACvC,IAAML,MAAAA,QAAAA,CAASiC,GAAIC,CAAAA,GAAAA,EAAKC,KAAAA,CAAAA;AACxB,IAAA,KAAKnC,QAASoC,CAAAA,GAAAA,CAAIF,GAAAA,CAAAA,CAAKG,QAAQ,MAAA;AAC7B,MAAA,KAAK,KAAKL,IAAI,EAAA;KAChB,CAAA;AACF;AAEA,EAAA,MAAMI,IAAIF,GAAa,EAAA;AACrB,IAAMlC,MAAAA,QAAAA,GAAW,MAAM,IAAA,CAAKK,WAAW,EAAA;AACvC,IAAO,OAAA,MAAML,QAASoC,CAAAA,GAAAA,CAAIF,GAAAA,CAAAA;AAC5B;AAEA,EAAA,MAAMI,IAAIJ,GAAa,EAAA;AACrB,IAAMlC,MAAAA,QAAAA,GAAW,MAAM,IAAA,CAAKK,WAAW,EAAA;AACvC,IAAO,OAAA,MAAML,QAASsC,CAAAA,GAAAA,CAAIJ,GAAAA,CAAAA;AAC5B;AAEA,EAAA,MAAMK,OAAOL,GAAa,EAAA;AACxB,IAAMlC,MAAAA,QAAAA,GAAW,MAAM,IAAA,CAAKK,WAAW,EAAA;AACvC,IAAA,MAAMmC,MAAS,GAAA,MAAMxC,QAASuC,CAAAA,MAAAA,CAAOL,GAAAA,CAAAA;AACrC,IAAA,MAAM,KAAKF,IAAI,EAAA;AACf,IAAOQ,OAAAA,MAAAA;AACT;AAEA,EAAA,MAAMT,KAAQ,GAAA;AACZ,IAAM/B,MAAAA,QAAAA,GAAW,MAAM,IAAA,CAAKK,WAAW,EAAA;AACvC,IAAA,MAAML,SAAS+B,KAAK,EAAA;AACpB,IAAA,MAAM,KAAKC,IAAI,EAAA;AACjB;AAEA,EAAA,MAAMS,cAAiB,GAAA;AACrB,IAAO,OAAA;MACL9C,KAAO,EAAA;AAAEG,QAAAA,QAAAA,EAAU,KAAKH,KAAMG,CAAAA;AAAS,OAAA;MACvCE,QAAU,EAAA,MAAM,KAAKK,WAAW;AAClC,KAAA;AACF;AAEAqC,EAAAA,YAAAA,CAAa3B,QAAiE,EAAA;AAC5E4B,IAAOC,MAAAA,CAAAA,MAAAA,CAAO,MAAM7B,QAAAA,CAAAA;AACtB;AACF","file":"fileCache.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BaseCache } from \"@/cache/base.js\";\nimport fs from \"node:fs\";\nimport { SlidingCache } from \"@/cache/slidingCache.js\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport { Serializer } from \"@/serializer/serializer.js\";\nimport { SerializableClass } from \"@/internals/serializable.js\";\n\ninterface Input {\n fullPath: string;\n}\n\nexport class FileCache<T> extends BaseCache<T> {\n constructor(protected readonly input: Input) {\n super();\n }\n\n static {\n this.register();\n }\n\n get source() {\n return this.input.fullPath;\n }\n\n static async fromProvider<A>(provider: BaseCache<A>, input: Input) {\n await fs.promises.writeFile(input.fullPath, await provider.serialize());\n return new FileCache<A>(input);\n }\n\n @Cache()\n protected async getProvider(): Promise<BaseCache<T>> {\n const exists = await fs.promises\n .stat(this.input.fullPath)\n .then((r) => r.isFile())\n .catch(() => false);\n\n if (exists) {\n const serialized = await fs.promises.readFile(this.input.fullPath, \"utf8\");\n const { target, snapshot } = await Serializer.deserialize<any>(serialized);\n const Target = Serializer.getFactory(target).ref as SerializableClass<BaseCache<T>>;\n const instance = await Target.fromSnapshot(snapshot);\n if (!(instance instanceof BaseCache)) {\n throw new TypeError(\"Provided file does not serialize any instance of BaseCache class.\");\n }\n return instance;\n } else {\n return new SlidingCache({\n size: Infinity,\n ttl: Infinity,\n });\n }\n }\n\n async reload() {\n // @ts-expect-error protected property\n Cache.getInstance(this, \"getProvider\").clear();\n void (await this.getProvider());\n }\n\n protected async save() {\n const provider = await this.getProvider();\n return await fs.promises.writeFile(this.input.fullPath, await provider.serialize());\n }\n\n async size() {\n const provider = await this.getProvider();\n return provider.size();\n }\n\n async set(key: string, value: T) {\n const provider = await this.getProvider();\n await provider.set(key, value);\n void provider.get(key).finally(() => {\n void this.save();\n });\n }\n\n async get(key: string) {\n const provider = await this.getProvider();\n return await provider.get(key);\n }\n\n async has(key: string) {\n const provider = await this.getProvider();\n return await provider.has(key);\n }\n\n async delete(key: string) {\n const provider = await this.getProvider();\n const result = await provider.delete(key);\n await this.save();\n return result;\n }\n\n async clear() {\n const provider = await this.getProvider();\n await provider.clear();\n await this.save();\n }\n\n async createSnapshot() {\n return {\n input: { fullPath: this.input.fullPath },\n provider: await this.getProvider(),\n };\n }\n\n loadSnapshot(snapshot: Awaited<ReturnType<typeof this.createSnapshot>>): void {\n Object.assign(this, snapshot);\n }\n}\n"]}
|