@langchain/core 1.1.38 → 1.1.39
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/CHANGELOG.md +6 -0
- package/dist/agents.cjs.map +1 -1
- package/dist/agents.js.map +1 -1
- package/dist/callbacks/base.cjs.map +1 -1
- package/dist/callbacks/base.d.cts +71 -40
- package/dist/callbacks/base.d.cts.map +1 -1
- package/dist/callbacks/base.d.ts +71 -40
- package/dist/callbacks/base.d.ts.map +1 -1
- package/dist/callbacks/base.js.map +1 -1
- package/dist/callbacks/dispatch/index.cjs.map +1 -1
- package/dist/callbacks/dispatch/index.d.cts +0 -1
- package/dist/callbacks/dispatch/index.d.cts.map +1 -1
- package/dist/callbacks/dispatch/index.d.ts +0 -1
- package/dist/callbacks/dispatch/index.d.ts.map +1 -1
- package/dist/callbacks/dispatch/index.js.map +1 -1
- package/dist/callbacks/dispatch/web.cjs.map +1 -1
- package/dist/callbacks/dispatch/web.d.cts +0 -1
- package/dist/callbacks/dispatch/web.d.cts.map +1 -1
- package/dist/callbacks/dispatch/web.d.ts +0 -1
- package/dist/callbacks/dispatch/web.d.ts.map +1 -1
- package/dist/callbacks/dispatch/web.js.map +1 -1
- package/dist/callbacks/manager.cjs.map +1 -1
- package/dist/callbacks/manager.js.map +1 -1
- package/dist/chat_history.d.cts +0 -1
- package/dist/chat_history.d.cts.map +1 -1
- package/dist/document_loaders/langsmith.cjs.map +1 -1
- package/dist/document_loaders/langsmith.js.map +1 -1
- package/dist/documents/document.cjs.map +1 -1
- package/dist/documents/document.js.map +1 -1
- package/dist/errors/index.cjs.map +1 -1
- package/dist/errors/index.js.map +1 -1
- package/dist/indexing/base.cjs.map +1 -1
- package/dist/indexing/base.d.cts.map +1 -1
- package/dist/indexing/base.d.ts.map +1 -1
- package/dist/indexing/base.js.map +1 -1
- package/dist/language_models/base.cjs +1 -1
- package/dist/language_models/base.cjs.map +1 -1
- package/dist/language_models/base.d.cts +1 -1
- package/dist/language_models/base.d.cts.map +1 -1
- package/dist/language_models/base.d.ts +1 -1
- package/dist/language_models/base.d.ts.map +1 -1
- package/dist/language_models/base.js +1 -1
- package/dist/language_models/base.js.map +1 -1
- package/dist/language_models/chat_models.cjs.map +1 -1
- package/dist/language_models/chat_models.d.cts +0 -1
- package/dist/language_models/chat_models.d.cts.map +1 -1
- package/dist/language_models/chat_models.d.ts.map +1 -1
- package/dist/language_models/chat_models.js.map +1 -1
- package/dist/language_models/llms.cjs.map +1 -1
- package/dist/language_models/llms.d.cts.map +1 -1
- package/dist/language_models/llms.d.ts.map +1 -1
- package/dist/language_models/llms.js.map +1 -1
- package/dist/language_models/structured_output.cjs.map +1 -1
- package/dist/language_models/structured_output.d.cts +0 -1
- package/dist/language_models/structured_output.d.cts.map +1 -1
- package/dist/language_models/structured_output.d.ts.map +1 -1
- package/dist/language_models/structured_output.js.map +1 -1
- package/dist/load/index.cjs +1 -2
- package/dist/load/index.cjs.map +1 -1
- package/dist/load/index.js +1 -2
- package/dist/load/index.js.map +1 -1
- package/dist/load/map_keys.cjs.map +1 -1
- package/dist/load/map_keys.js.map +1 -1
- package/dist/load/serializable.cjs.map +1 -1
- package/dist/load/serializable.js.map +1 -1
- package/dist/memory.cjs +2 -8
- package/dist/memory.cjs.map +1 -1
- package/dist/memory.d.cts +2 -2
- package/dist/memory.d.cts.map +1 -1
- package/dist/memory.d.ts +2 -2
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +2 -8
- package/dist/memory.js.map +1 -1
- package/dist/messages/base.cjs.map +1 -1
- package/dist/messages/base.js.map +1 -1
- package/dist/messages/block_translators/utils.cjs.map +1 -1
- package/dist/messages/block_translators/utils.js.map +1 -1
- package/dist/messages/chat.cjs.map +1 -1
- package/dist/messages/chat.js.map +1 -1
- package/dist/messages/content/data.cjs.map +1 -1
- package/dist/messages/content/data.d.cts.map +1 -1
- package/dist/messages/content/data.d.ts.map +1 -1
- package/dist/messages/content/data.js.map +1 -1
- package/dist/messages/content/index.cjs.map +1 -1
- package/dist/messages/content/index.js.map +1 -1
- package/dist/messages/content/multimodal.cjs.map +1 -1
- package/dist/messages/content/multimodal.js.map +1 -1
- package/dist/messages/content/tools.cjs.map +1 -1
- package/dist/messages/content/tools.js.map +1 -1
- package/dist/messages/message.cjs.map +1 -1
- package/dist/messages/message.d.cts +3 -2
- package/dist/messages/message.d.cts.map +1 -1
- package/dist/messages/message.d.ts +3 -2
- package/dist/messages/message.d.ts.map +1 -1
- package/dist/messages/message.js.map +1 -1
- package/dist/messages/tool.cjs.map +1 -1
- package/dist/messages/tool.js.map +1 -1
- package/dist/messages/transformers.cjs.map +1 -1
- package/dist/messages/transformers.js.map +1 -1
- package/dist/messages/utils.d.cts.map +1 -1
- package/dist/messages/utils.d.ts.map +1 -1
- package/dist/output_parsers/base.d.cts +0 -1
- package/dist/output_parsers/base.d.cts.map +1 -1
- package/dist/output_parsers/base.d.ts.map +1 -1
- package/dist/output_parsers/json.cjs.map +1 -1
- package/dist/output_parsers/json.d.cts.map +1 -1
- package/dist/output_parsers/json.js.map +1 -1
- package/dist/output_parsers/list.d.cts.map +1 -1
- package/dist/output_parsers/openai_functions/json_output_functions_parsers.cjs.map +1 -1
- package/dist/output_parsers/openai_functions/json_output_functions_parsers.d.cts.map +1 -1
- package/dist/output_parsers/openai_functions/json_output_functions_parsers.d.ts.map +1 -1
- package/dist/output_parsers/openai_functions/json_output_functions_parsers.js.map +1 -1
- package/dist/output_parsers/openai_tools/json_output_tools_parsers.cjs.map +1 -1
- package/dist/output_parsers/openai_tools/json_output_tools_parsers.d.cts.map +1 -1
- package/dist/output_parsers/openai_tools/json_output_tools_parsers.d.ts.map +1 -1
- package/dist/output_parsers/openai_tools/json_output_tools_parsers.js.map +1 -1
- package/dist/output_parsers/standard_schema.cjs.map +1 -1
- package/dist/output_parsers/standard_schema.js.map +1 -1
- package/dist/output_parsers/string.d.cts.map +1 -1
- package/dist/output_parsers/transform.cjs.map +1 -1
- package/dist/output_parsers/transform.js.map +1 -1
- package/dist/output_parsers/xml.cjs +2 -2
- package/dist/output_parsers/xml.cjs.map +1 -1
- package/dist/output_parsers/xml.d.cts +1 -1
- package/dist/output_parsers/xml.d.ts +1 -1
- package/dist/output_parsers/xml.js +2 -2
- package/dist/output_parsers/xml.js.map +1 -1
- package/dist/outputs.cjs.map +1 -1
- package/dist/outputs.js.map +1 -1
- package/dist/prompt_values.cjs.map +1 -1
- package/dist/prompt_values.js.map +1 -1
- package/dist/prompts/base.cjs.map +1 -1
- package/dist/prompts/base.d.cts +0 -1
- package/dist/prompts/base.d.cts.map +1 -1
- package/dist/prompts/base.js.map +1 -1
- package/dist/prompts/chat.cjs.map +1 -1
- package/dist/prompts/chat.d.cts.map +1 -1
- package/dist/prompts/chat.js.map +1 -1
- package/dist/prompts/few_shot.cjs.map +1 -1
- package/dist/prompts/few_shot.d.cts.map +1 -1
- package/dist/prompts/few_shot.js.map +1 -1
- package/dist/prompts/image.cjs.map +1 -1
- package/dist/prompts/image.d.cts.map +1 -1
- package/dist/prompts/image.js.map +1 -1
- package/dist/prompts/pipeline.cjs.map +1 -1
- package/dist/prompts/pipeline.js.map +1 -1
- package/dist/prompts/prompt.cjs.map +1 -1
- package/dist/prompts/prompt.d.cts.map +1 -1
- package/dist/prompts/prompt.js.map +1 -1
- package/dist/prompts/serde.d.cts.map +1 -1
- package/dist/prompts/string.cjs.map +1 -1
- package/dist/prompts/string.js.map +1 -1
- package/dist/prompts/structured.cjs.map +1 -1
- package/dist/prompts/structured.d.cts.map +1 -1
- package/dist/prompts/structured.d.ts.map +1 -1
- package/dist/prompts/structured.js.map +1 -1
- package/dist/prompts/template.cjs +2 -5
- package/dist/prompts/template.cjs.map +1 -1
- package/dist/prompts/template.d.cts +0 -1
- package/dist/prompts/template.d.cts.map +1 -1
- package/dist/prompts/template.d.ts.map +1 -1
- package/dist/prompts/template.js +2 -5
- package/dist/prompts/template.js.map +1 -1
- package/dist/retrievers/document_compressors/index.cjs.map +1 -1
- package/dist/retrievers/document_compressors/index.js.map +1 -1
- package/dist/retrievers/index.cjs.map +1 -1
- package/dist/retrievers/index.d.cts.map +1 -1
- package/dist/retrievers/index.d.ts.map +1 -1
- package/dist/retrievers/index.js.map +1 -1
- package/dist/runnables/base.cjs.map +1 -1
- package/dist/runnables/base.js.map +1 -1
- package/dist/runnables/branch.cjs.map +1 -1
- package/dist/runnables/branch.d.cts.map +1 -1
- package/dist/runnables/branch.d.ts.map +1 -1
- package/dist/runnables/branch.js.map +1 -1
- package/dist/runnables/config.cjs.map +1 -1
- package/dist/runnables/config.js.map +1 -1
- package/dist/runnables/graph.cjs.map +1 -1
- package/dist/runnables/graph.js.map +1 -1
- package/dist/runnables/history.cjs +2 -4
- package/dist/runnables/history.cjs.map +1 -1
- package/dist/runnables/history.d.cts +2 -4
- package/dist/runnables/history.d.cts.map +1 -1
- package/dist/runnables/history.d.ts +2 -4
- package/dist/runnables/history.d.ts.map +1 -1
- package/dist/runnables/history.js +2 -4
- package/dist/runnables/history.js.map +1 -1
- package/dist/runnables/passthrough.cjs.map +1 -1
- package/dist/runnables/passthrough.d.cts.map +1 -1
- package/dist/runnables/passthrough.d.ts.map +1 -1
- package/dist/runnables/passthrough.js.map +1 -1
- package/dist/runnables/router.cjs.map +1 -1
- package/dist/runnables/router.d.cts.map +1 -1
- package/dist/runnables/router.d.ts.map +1 -1
- package/dist/runnables/router.js.map +1 -1
- package/dist/runnables/utils.cjs.map +1 -1
- package/dist/runnables/utils.js.map +1 -1
- package/dist/singletons/async_local_storage/context.cjs.map +1 -1
- package/dist/singletons/async_local_storage/context.d.cts.map +1 -1
- package/dist/singletons/async_local_storage/context.d.ts.map +1 -1
- package/dist/singletons/async_local_storage/context.js.map +1 -1
- package/dist/singletons/async_local_storage/globals.cjs.map +1 -1
- package/dist/singletons/async_local_storage/globals.js.map +1 -1
- package/dist/singletons/async_local_storage/index.cjs.map +1 -1
- package/dist/singletons/async_local_storage/index.js.map +1 -1
- package/dist/singletons/callbacks.cjs.map +1 -1
- package/dist/singletons/callbacks.d.cts.map +1 -1
- package/dist/singletons/callbacks.js.map +1 -1
- package/dist/stores.cjs.map +1 -1
- package/dist/stores.js.map +1 -1
- package/dist/structured_query/ir.d.cts.map +1 -1
- package/dist/structured_query/ir.d.ts.map +1 -1
- package/dist/structured_query/utils.cjs.map +1 -1
- package/dist/structured_query/utils.js.map +1 -1
- package/dist/testing/fake_model_builder.cjs.map +1 -1
- package/dist/testing/fake_model_builder.d.cts.map +1 -1
- package/dist/testing/fake_model_builder.js.map +1 -1
- package/dist/testing/matchers.cjs.map +1 -1
- package/dist/testing/matchers.d.cts +8 -8
- package/dist/testing/matchers.d.cts.map +1 -1
- package/dist/testing/matchers.d.ts +8 -8
- package/dist/testing/matchers.d.ts.map +1 -1
- package/dist/testing/matchers.js.map +1 -1
- package/dist/tools/index.cjs.map +1 -1
- package/dist/tools/index.d.cts +3 -2
- package/dist/tools/index.d.cts.map +1 -1
- package/dist/tools/index.d.ts +3 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/types.cjs.map +1 -1
- package/dist/tools/types.d.cts +1 -1
- package/dist/tools/types.d.cts.map +1 -1
- package/dist/tools/types.d.ts +1 -1
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js.map +1 -1
- package/dist/tracers/base.cjs.map +1 -1
- package/dist/tracers/base.d.cts +91 -91
- package/dist/tracers/base.d.cts.map +1 -1
- package/dist/tracers/base.d.ts +91 -91
- package/dist/tracers/base.d.ts.map +1 -1
- package/dist/tracers/base.js.map +1 -1
- package/dist/tracers/event_stream.cjs.map +1 -1
- package/dist/tracers/event_stream.d.cts +0 -1
- package/dist/tracers/event_stream.d.cts.map +1 -1
- package/dist/tracers/event_stream.js.map +1 -1
- package/dist/tracers/log_stream.cjs.map +1 -1
- package/dist/tracers/log_stream.d.cts.map +1 -1
- package/dist/tracers/log_stream.d.ts.map +1 -1
- package/dist/tracers/log_stream.js.map +1 -1
- package/dist/utils/async_caller.cjs.map +1 -1
- package/dist/utils/async_caller.js.map +1 -1
- package/dist/utils/chunk_array.d.cts.map +1 -1
- package/dist/utils/chunk_array.d.ts.map +1 -1
- package/dist/utils/env.cjs.map +1 -1
- package/dist/utils/env.js.map +1 -1
- package/dist/utils/event_source_parse.cjs.map +1 -1
- package/dist/utils/event_source_parse.d.cts +2 -2
- package/dist/utils/event_source_parse.d.cts.map +1 -1
- package/dist/utils/event_source_parse.d.ts +2 -2
- package/dist/utils/event_source_parse.d.ts.map +1 -1
- package/dist/utils/event_source_parse.js.map +1 -1
- package/dist/utils/function_calling.cjs.map +1 -1
- package/dist/utils/function_calling.js.map +1 -1
- package/dist/utils/is-network-error/index.cjs.map +1 -1
- package/dist/utils/is-network-error/index.js.map +1 -1
- package/dist/utils/json.cjs.map +1 -1
- package/dist/utils/json.js.map +1 -1
- package/dist/utils/json_schema.d.cts.map +1 -1
- package/dist/utils/namespace.cjs.map +1 -1
- package/dist/utils/namespace.js.map +1 -1
- package/dist/utils/p-retry/index.cjs.map +1 -1
- package/dist/utils/p-retry/index.js.map +1 -1
- package/dist/utils/signal.cjs.map +1 -1
- package/dist/utils/signal.js.map +1 -1
- package/dist/utils/standard_schema.cjs.map +1 -1
- package/dist/utils/standard_schema.js.map +1 -1
- package/dist/utils/stream.cjs.map +1 -1
- package/dist/utils/stream.d.cts +2 -2
- package/dist/utils/stream.d.cts.map +1 -1
- package/dist/utils/stream.d.ts +2 -2
- package/dist/utils/stream.d.ts.map +1 -1
- package/dist/utils/stream.js.map +1 -1
- package/dist/utils/testing/chat_models.cjs.map +1 -1
- package/dist/utils/testing/chat_models.d.cts.map +1 -1
- package/dist/utils/testing/chat_models.js.map +1 -1
- package/dist/utils/testing/retrievers.cjs.map +1 -1
- package/dist/utils/testing/retrievers.js.map +1 -1
- package/dist/utils/testing/vectorstores.cjs.map +1 -1
- package/dist/utils/testing/vectorstores.js.map +1 -1
- package/dist/utils/types/index.cjs.map +1 -1
- package/dist/utils/types/index.js.map +1 -1
- package/dist/utils/types/zod.cjs.map +1 -1
- package/dist/utils/types/zod.js.map +1 -1
- package/dist/utils/zod-to-json-schema/Options.d.cts +1 -0
- package/dist/utils/zod-to-json-schema/Refs.d.cts +1 -0
- package/dist/utils/zod-to-json-schema/errorMessages.d.cts +0 -1
- package/dist/utils/zod-to-json-schema/errorMessages.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/index.d.cts +24 -0
- package/dist/utils/zod-to-json-schema/parseDef.d.cts +1 -0
- package/dist/utils/zod-to-json-schema/parsers/array.d.cts +0 -1
- package/dist/utils/zod-to-json-schema/parsers/array.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/bigint.d.cts +0 -1
- package/dist/utils/zod-to-json-schema/parsers/bigint.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/branded.d.cts +1 -0
- package/dist/utils/zod-to-json-schema/parsers/catch.d.cts +1 -0
- package/dist/utils/zod-to-json-schema/parsers/date.d.cts +0 -1
- package/dist/utils/zod-to-json-schema/parsers/date.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/default.d.cts +1 -0
- package/dist/utils/zod-to-json-schema/parsers/effects.d.cts +1 -0
- package/dist/utils/zod-to-json-schema/parsers/intersection.d.cts +0 -1
- package/dist/utils/zod-to-json-schema/parsers/intersection.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/map.d.cts +0 -1
- package/dist/utils/zod-to-json-schema/parsers/map.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/never.d.cts +0 -1
- package/dist/utils/zod-to-json-schema/parsers/never.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/nullable.d.cts +0 -1
- package/dist/utils/zod-to-json-schema/parsers/nullable.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/number.d.cts +0 -1
- package/dist/utils/zod-to-json-schema/parsers/number.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/object.d.cts +0 -1
- package/dist/utils/zod-to-json-schema/parsers/object.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/optional.d.cts +1 -0
- package/dist/utils/zod-to-json-schema/parsers/pipeline.d.cts +1 -0
- package/dist/utils/zod-to-json-schema/parsers/promise.d.cts +1 -0
- package/dist/utils/zod-to-json-schema/parsers/readonly.d.cts +1 -0
- package/dist/utils/zod-to-json-schema/parsers/record.d.cts +0 -1
- package/dist/utils/zod-to-json-schema/parsers/record.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/set.d.cts +0 -1
- package/dist/utils/zod-to-json-schema/parsers/set.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/string.d.cts +0 -1
- package/dist/utils/zod-to-json-schema/parsers/string.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/tuple.d.cts +0 -1
- package/dist/utils/zod-to-json-schema/parsers/tuple.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/undefined.d.cts +0 -1
- package/dist/utils/zod-to-json-schema/parsers/undefined.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/union.d.cts +1 -2
- package/dist/utils/zod-to-json-schema/parsers/union.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/union.d.ts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/unknown.d.cts +0 -1
- package/dist/utils/zod-to-json-schema/parsers/unknown.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/selectParser.d.cts +1 -0
- package/dist/utils/zod-to-json-schema/zodToJsonSchema.d.cts +1 -0
- package/dist/vectorstores.cjs.map +1 -1
- package/dist/vectorstores.js.map +1 -1
- package/package.json +5 -13
package/dist/utils/json.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json.js","names":[],"sources":["../../src/utils/json.ts"],"sourcesContent":["export function parseJsonMarkdown(s: string, parser = parsePartialJson) {\n // eslint-disable-next-line no-param-reassign\n s = s.trim();\n\n const firstFenceIndex = s.indexOf(\"```\");\n if (firstFenceIndex === -1) {\n return parser(s);\n }\n\n let contentAfterFence = s.substring(firstFenceIndex + 3);\n\n if (contentAfterFence.startsWith(\"json\\n\")) {\n contentAfterFence = contentAfterFence.substring(5);\n } else if (contentAfterFence.startsWith(\"json\")) {\n contentAfterFence = contentAfterFence.substring(4);\n } else if (contentAfterFence.startsWith(\"\\n\")) {\n contentAfterFence = contentAfterFence.substring(1);\n }\n\n const closingFenceIndex = contentAfterFence.indexOf(\"```\");\n let finalContent = contentAfterFence;\n if (closingFenceIndex !== -1) {\n finalContent = contentAfterFence.substring(0, closingFenceIndex);\n }\n\n return parser(finalContent.trim());\n}\n\n/**\n * Recursive descent partial JSON parser.\n * @param s - The string to parse.\n * @returns The parsed value.\n * @throws Error if the input is a malformed JSON string.\n */\nexport function strictParsePartialJson(s: string): unknown {\n try {\n return JSON.parse(s);\n } catch {\n // Continue to partial parsing\n }\n\n const buffer = s.trim();\n if (buffer.length === 0) throw new Error(\"Unexpected end of JSON input\");\n\n let pos = 0;\n\n function skipWhitespace(): void {\n while (pos < buffer.length && /\\s/.test(buffer[pos])) {\n pos += 1;\n }\n }\n\n function parseString(): string {\n if (buffer[pos] !== '\"') {\n throw new Error(`Expected '\"' at position ${pos}, got '${buffer[pos]}'`);\n }\n\n pos += 1;\n let result = \"\";\n let escaped = false;\n\n while (pos < buffer.length) {\n const char = buffer[pos];\n\n if (escaped) {\n if (char === \"n\") {\n result += \"\\n\";\n } else if (char === \"t\") {\n result += \"\\t\";\n } else if (char === \"r\") {\n result += \"\\r\";\n } else if (char === \"\\\\\") {\n result += \"\\\\\";\n } else if (char === '\"') {\n result += '\"';\n } else if (char === \"b\") {\n result += \"\\b\";\n } else if (char === \"f\") {\n result += \"\\f\";\n } else if (char === \"/\") {\n result += \"/\";\n } else if (char === \"u\") {\n const hex = buffer.substring(pos + 1, pos + 5);\n if (/^[0-9A-Fa-f]{0,4}$/.test(hex)) {\n if (hex.length === 4) {\n result += String.fromCharCode(Number.parseInt(hex, 16));\n } else {\n result += `u${hex}`;\n }\n\n pos += hex.length;\n } else {\n throw new Error(\n `Invalid unicode escape sequence '\\\\u${hex}' at position ${pos}`\n );\n }\n } else {\n throw new Error(\n `Invalid escape sequence '\\\\${char}' at position ${pos}`\n );\n }\n escaped = false;\n } else if (char === \"\\\\\") {\n escaped = true;\n } else if (char === '\"') {\n pos += 1;\n return result;\n } else {\n result += char;\n }\n\n pos += 1;\n }\n\n if (escaped) result += \"\\\\\";\n return result;\n }\n\n function parseNumber(): number {\n const start = pos;\n let numStr = \"\";\n\n if (buffer[pos] === \"-\") {\n numStr += \"-\";\n pos += 1;\n }\n\n if (pos < buffer.length && buffer[pos] === \"0\") {\n numStr += \"0\";\n pos += 1;\n\n if (buffer[pos] >= \"0\" && buffer[pos] <= \"9\") {\n throw new Error(`Invalid number at position ${start}`);\n }\n }\n\n if (pos < buffer.length && buffer[pos] >= \"1\" && buffer[pos] <= \"9\") {\n while (pos < buffer.length && buffer[pos] >= \"0\" && buffer[pos] <= \"9\") {\n numStr += buffer[pos];\n pos += 1;\n }\n }\n\n if (pos < buffer.length && buffer[pos] === \".\") {\n numStr += \".\";\n pos += 1;\n while (pos < buffer.length && buffer[pos] >= \"0\" && buffer[pos] <= \"9\") {\n numStr += buffer[pos];\n pos += 1;\n }\n }\n\n if (pos < buffer.length && (buffer[pos] === \"e\" || buffer[pos] === \"E\")) {\n numStr += buffer[pos];\n pos += 1;\n if (pos < buffer.length && (buffer[pos] === \"+\" || buffer[pos] === \"-\")) {\n numStr += buffer[pos];\n pos += 1;\n }\n while (pos < buffer.length && buffer[pos] >= \"0\" && buffer[pos] <= \"9\") {\n numStr += buffer[pos];\n pos += 1;\n }\n }\n\n if (numStr === \"-\") return -0;\n\n const num = Number.parseFloat(numStr);\n\n if (Number.isNaN(num)) {\n pos = start;\n throw new Error(`Invalid number '${numStr}' at position ${start}`);\n }\n\n return num;\n }\n\n function parseValue(): unknown {\n skipWhitespace();\n\n if (pos >= buffer.length) {\n throw new Error(`Unexpected end of input at position ${pos}`);\n }\n\n const char = buffer[pos];\n\n if (char === \"{\") return parseObject();\n if (char === \"[\") return parseArray();\n if (char === '\"') return parseString();\n\n if (\"null\".startsWith(buffer.substring(pos, pos + 4))) {\n pos += Math.min(4, buffer.length - pos);\n return null;\n }\n\n if (\"true\".startsWith(buffer.substring(pos, pos + 4))) {\n pos += Math.min(4, buffer.length - pos);\n return true;\n }\n\n if (\"false\".startsWith(buffer.substring(pos, pos + 5))) {\n pos += Math.min(5, buffer.length - pos);\n return false;\n }\n\n if (char === \"-\" || (char >= \"0\" && char <= \"9\")) {\n return parseNumber();\n }\n\n throw new Error(`Unexpected character '${char}' at position ${pos}`);\n }\n\n function parseArray(): unknown[] {\n if (buffer[pos] !== \"[\") {\n throw new Error(`Expected '[' at position ${pos}, got '${buffer[pos]}'`);\n }\n\n const arr: unknown[] = [];\n\n pos += 1;\n skipWhitespace();\n\n if (pos >= buffer.length) return arr;\n if (buffer[pos] === \"]\") {\n pos += 1;\n return arr;\n }\n\n while (pos < buffer.length) {\n skipWhitespace();\n if (pos >= buffer.length) return arr;\n\n arr.push(parseValue());\n\n skipWhitespace();\n if (pos >= buffer.length) return arr;\n\n if (buffer[pos] === \"]\") {\n pos += 1;\n return arr;\n } else if (buffer[pos] === \",\") {\n pos += 1;\n continue;\n }\n\n throw new Error(\n `Expected ',' or ']' at position ${pos}, got '${buffer[pos]}'`\n );\n }\n\n return arr;\n }\n\n function parseObject(): Record<string, unknown> {\n if (buffer[pos] !== \"{\") {\n throw new Error(`Expected '{' at position ${pos}, got '${buffer[pos]}'`);\n }\n\n const obj: Record<string, unknown> = {};\n pos += 1;\n skipWhitespace();\n\n if (pos >= buffer.length) return obj;\n if (buffer[pos] === \"}\") {\n pos += 1;\n return obj;\n }\n\n while (pos < buffer.length) {\n skipWhitespace();\n if (pos >= buffer.length) return obj;\n\n const key = parseString();\n\n skipWhitespace();\n if (pos >= buffer.length) return obj;\n\n if (buffer[pos] !== \":\") {\n throw new Error(\n `Expected ':' at position ${pos}, got '${buffer[pos]}'`\n );\n }\n pos += 1;\n\n skipWhitespace();\n if (pos >= buffer.length) return obj;\n\n obj[key] = parseValue();\n\n skipWhitespace();\n if (pos >= buffer.length) return obj;\n\n if (buffer[pos] === \"}\") {\n pos += 1;\n return obj;\n } else if (buffer[pos] === \",\") {\n pos += 1;\n continue;\n }\n\n throw new Error(\n `Expected ',' or '}' at position ${pos}, got '${buffer[pos]}'`\n );\n }\n\n return obj;\n }\n\n const value = parseValue();\n skipWhitespace();\n\n if (pos < buffer.length) {\n throw new Error(`Unexpected character '${buffer[pos]}' at position ${pos}`);\n }\n\n return value;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function parsePartialJson(s: string): any | null {\n // Attempt to parse the modified string as JSON.\n try {\n if (typeof s === \"undefined\") return null;\n return strictParsePartialJson(s);\n } catch {\n // If we still can't parse the string as JSON, return null to indicate failure.\n return null;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"json.js","names":[],"sources":["../../src/utils/json.ts"],"sourcesContent":["export function parseJsonMarkdown(s: string, parser = parsePartialJson) {\n // oxlint-disable-next-line no-param-reassign\n s = s.trim();\n\n const firstFenceIndex = s.indexOf(\"```\");\n if (firstFenceIndex === -1) {\n return parser(s);\n }\n\n let contentAfterFence = s.substring(firstFenceIndex + 3);\n\n if (contentAfterFence.startsWith(\"json\\n\")) {\n contentAfterFence = contentAfterFence.substring(5);\n } else if (contentAfterFence.startsWith(\"json\")) {\n contentAfterFence = contentAfterFence.substring(4);\n } else if (contentAfterFence.startsWith(\"\\n\")) {\n contentAfterFence = contentAfterFence.substring(1);\n }\n\n const closingFenceIndex = contentAfterFence.indexOf(\"```\");\n let finalContent = contentAfterFence;\n if (closingFenceIndex !== -1) {\n finalContent = contentAfterFence.substring(0, closingFenceIndex);\n }\n\n return parser(finalContent.trim());\n}\n\n/**\n * Recursive descent partial JSON parser.\n * @param s - The string to parse.\n * @returns The parsed value.\n * @throws Error if the input is a malformed JSON string.\n */\nexport function strictParsePartialJson(s: string): unknown {\n try {\n return JSON.parse(s);\n } catch {\n // Continue to partial parsing\n }\n\n const buffer = s.trim();\n if (buffer.length === 0) throw new Error(\"Unexpected end of JSON input\");\n\n let pos = 0;\n\n function skipWhitespace(): void {\n while (pos < buffer.length && /\\s/.test(buffer[pos])) {\n pos += 1;\n }\n }\n\n function parseString(): string {\n if (buffer[pos] !== '\"') {\n throw new Error(`Expected '\"' at position ${pos}, got '${buffer[pos]}'`);\n }\n\n pos += 1;\n let result = \"\";\n let escaped = false;\n\n while (pos < buffer.length) {\n const char = buffer[pos];\n\n if (escaped) {\n if (char === \"n\") {\n result += \"\\n\";\n } else if (char === \"t\") {\n result += \"\\t\";\n } else if (char === \"r\") {\n result += \"\\r\";\n } else if (char === \"\\\\\") {\n result += \"\\\\\";\n } else if (char === '\"') {\n result += '\"';\n } else if (char === \"b\") {\n result += \"\\b\";\n } else if (char === \"f\") {\n result += \"\\f\";\n } else if (char === \"/\") {\n result += \"/\";\n } else if (char === \"u\") {\n const hex = buffer.substring(pos + 1, pos + 5);\n if (/^[0-9A-Fa-f]{0,4}$/.test(hex)) {\n if (hex.length === 4) {\n result += String.fromCharCode(Number.parseInt(hex, 16));\n } else {\n result += `u${hex}`;\n }\n\n pos += hex.length;\n } else {\n throw new Error(\n `Invalid unicode escape sequence '\\\\u${hex}' at position ${pos}`\n );\n }\n } else {\n throw new Error(\n `Invalid escape sequence '\\\\${char}' at position ${pos}`\n );\n }\n escaped = false;\n } else if (char === \"\\\\\") {\n escaped = true;\n } else if (char === '\"') {\n pos += 1;\n return result;\n } else {\n result += char;\n }\n\n pos += 1;\n }\n\n if (escaped) result += \"\\\\\";\n return result;\n }\n\n function parseNumber(): number {\n const start = pos;\n let numStr = \"\";\n\n if (buffer[pos] === \"-\") {\n numStr += \"-\";\n pos += 1;\n }\n\n if (pos < buffer.length && buffer[pos] === \"0\") {\n numStr += \"0\";\n pos += 1;\n\n if (buffer[pos] >= \"0\" && buffer[pos] <= \"9\") {\n throw new Error(`Invalid number at position ${start}`);\n }\n }\n\n if (pos < buffer.length && buffer[pos] >= \"1\" && buffer[pos] <= \"9\") {\n while (pos < buffer.length && buffer[pos] >= \"0\" && buffer[pos] <= \"9\") {\n numStr += buffer[pos];\n pos += 1;\n }\n }\n\n if (pos < buffer.length && buffer[pos] === \".\") {\n numStr += \".\";\n pos += 1;\n while (pos < buffer.length && buffer[pos] >= \"0\" && buffer[pos] <= \"9\") {\n numStr += buffer[pos];\n pos += 1;\n }\n }\n\n if (pos < buffer.length && (buffer[pos] === \"e\" || buffer[pos] === \"E\")) {\n numStr += buffer[pos];\n pos += 1;\n if (pos < buffer.length && (buffer[pos] === \"+\" || buffer[pos] === \"-\")) {\n numStr += buffer[pos];\n pos += 1;\n }\n while (pos < buffer.length && buffer[pos] >= \"0\" && buffer[pos] <= \"9\") {\n numStr += buffer[pos];\n pos += 1;\n }\n }\n\n if (numStr === \"-\") return -0;\n\n const num = Number.parseFloat(numStr);\n\n if (Number.isNaN(num)) {\n pos = start;\n throw new Error(`Invalid number '${numStr}' at position ${start}`);\n }\n\n return num;\n }\n\n function parseValue(): unknown {\n skipWhitespace();\n\n if (pos >= buffer.length) {\n throw new Error(`Unexpected end of input at position ${pos}`);\n }\n\n const char = buffer[pos];\n\n if (char === \"{\") return parseObject();\n if (char === \"[\") return parseArray();\n if (char === '\"') return parseString();\n\n if (\"null\".startsWith(buffer.substring(pos, pos + 4))) {\n pos += Math.min(4, buffer.length - pos);\n return null;\n }\n\n if (\"true\".startsWith(buffer.substring(pos, pos + 4))) {\n pos += Math.min(4, buffer.length - pos);\n return true;\n }\n\n if (\"false\".startsWith(buffer.substring(pos, pos + 5))) {\n pos += Math.min(5, buffer.length - pos);\n return false;\n }\n\n if (char === \"-\" || (char >= \"0\" && char <= \"9\")) {\n return parseNumber();\n }\n\n throw new Error(`Unexpected character '${char}' at position ${pos}`);\n }\n\n function parseArray(): unknown[] {\n if (buffer[pos] !== \"[\") {\n throw new Error(`Expected '[' at position ${pos}, got '${buffer[pos]}'`);\n }\n\n const arr: unknown[] = [];\n\n pos += 1;\n skipWhitespace();\n\n if (pos >= buffer.length) return arr;\n if (buffer[pos] === \"]\") {\n pos += 1;\n return arr;\n }\n\n while (pos < buffer.length) {\n skipWhitespace();\n if (pos >= buffer.length) return arr;\n\n arr.push(parseValue());\n\n skipWhitespace();\n if (pos >= buffer.length) return arr;\n\n if (buffer[pos] === \"]\") {\n pos += 1;\n return arr;\n } else if (buffer[pos] === \",\") {\n pos += 1;\n continue;\n }\n\n throw new Error(\n `Expected ',' or ']' at position ${pos}, got '${buffer[pos]}'`\n );\n }\n\n return arr;\n }\n\n function parseObject(): Record<string, unknown> {\n if (buffer[pos] !== \"{\") {\n throw new Error(`Expected '{' at position ${pos}, got '${buffer[pos]}'`);\n }\n\n const obj: Record<string, unknown> = {};\n pos += 1;\n skipWhitespace();\n\n if (pos >= buffer.length) return obj;\n if (buffer[pos] === \"}\") {\n pos += 1;\n return obj;\n }\n\n while (pos < buffer.length) {\n skipWhitespace();\n if (pos >= buffer.length) return obj;\n\n const key = parseString();\n\n skipWhitespace();\n if (pos >= buffer.length) return obj;\n\n if (buffer[pos] !== \":\") {\n throw new Error(\n `Expected ':' at position ${pos}, got '${buffer[pos]}'`\n );\n }\n pos += 1;\n\n skipWhitespace();\n if (pos >= buffer.length) return obj;\n\n obj[key] = parseValue();\n\n skipWhitespace();\n if (pos >= buffer.length) return obj;\n\n if (buffer[pos] === \"}\") {\n pos += 1;\n return obj;\n } else if (buffer[pos] === \",\") {\n pos += 1;\n continue;\n }\n\n throw new Error(\n `Expected ',' or '}' at position ${pos}, got '${buffer[pos]}'`\n );\n }\n\n return obj;\n }\n\n const value = parseValue();\n skipWhitespace();\n\n if (pos < buffer.length) {\n throw new Error(`Unexpected character '${buffer[pos]}' at position ${pos}`);\n }\n\n return value;\n}\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport function parsePartialJson(s: string): any | null {\n // Attempt to parse the modified string as JSON.\n try {\n if (typeof s === \"undefined\") return null;\n return strictParsePartialJson(s);\n } catch {\n // If we still can't parse the string as JSON, return null to indicate failure.\n return null;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json_schema.d.cts","names":[],"sources":["../../src/utils/json_schema.ts"],"mappings":";;;;;;;;;;;;KAmBY,kBAAA,GAAqB,WAAA,CAC/B,UAAA,QAAkB,YAAA
|
|
1
|
+
{"version":3,"file":"json_schema.d.cts","names":[],"sources":["../../src/utils/json_schema.ts"],"mappings":";;;;;;;;;;;;KAmBY,kBAAA,GAAqB,WAAA,CAC/B,UAAA,QAAkB,YAAA;;;;;;;;iBA2BJ,YAAA,CACd,MAAA,EAAQ,oBAAA,GAAuB,cAAA,GAAiB,eAAA,EAChD,MAAA,GAAS,kBAAA,GACR,eAAA;;;;;;;;iBA6Ca,oBAAA,CAAqB,MAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"namespace.cjs","names":[],"sources":["../../src/utils/namespace.ts"],"sourcesContent":["/*
|
|
1
|
+
{"version":3,"file":"namespace.cjs","names":[],"sources":["../../src/utils/namespace.ts"],"sourcesContent":["/* oxlint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * A constructor type that can be used as a base class for branding.\n */\ntype Constructor = abstract new (...args: any[]) => any;\n\n/**\n * The return type of `Namespace.brand()`: the original base class\n * intersected with a polymorphic `isInstance` type guard.\n */\ntype BrandedClass<TBase extends Constructor> = TBase & {\n isInstance: IsInstanceFn;\n};\n\n/**\n * A static `isInstance` type guard that resolves to the subclass it's\n * called on via the generic `this` parameter.\n *\n * At call sites TypeScript infers `T` from the class, so\n * `StandardError.isInstance(obj)` narrows `obj` to `StandardError`.\n */\ntype IsInstanceFn = <T extends Constructor>(\n this: T,\n obj: unknown\n) => obj is InstanceType<T>;\n\n/**\n * A namespace object for hierarchical symbol-based branding.\n *\n * Namespaces are internal authoring tools. They are not intended to be\n * part of the public API -- only the branded classes are.\n *\n * @example\n * ```typescript\n * const langchain = createNamespace(\"langchain\");\n * const errorNs = langchain.sub(\"error\");\n *\n * export class LangChainError extends errorNs.brand(Error) {\n * readonly name = \"LangChainError\";\n * }\n *\n * export class ModelAbortError extends errorNs.brand(LangChainError, \"model-abort\") {\n * readonly name = \"ModelAbortError\";\n * }\n * ```\n */\nexport interface Namespace {\n /**\n * Brand a base class with this namespace's symbols.\n *\n * Without a marker, creates a namespace-level base class whose\n * `static isInstance` checks for the namespace's own symbol.\n *\n * With a marker, creates a leaf class whose `static isInstance`\n * checks for the marker-specific symbol.\n *\n * @param Base - The base class to extend\n * @param marker - Optional marker for leaf classes\n * @returns A new class extending Base with symbol branding and static isInstance\n */\n brand<TBase extends Constructor>(\n Base: TBase,\n marker?: string\n ): BrandedClass<TBase>;\n\n /**\n * Create a child namespace.\n *\n * @param childPath - The child segment to append to the current path\n * @returns A new Namespace with the extended path\n */\n sub(childPath: string): Namespace;\n\n /**\n * Check if an object is branded under this namespace (at any level).\n *\n * @param obj - The object to check\n * @returns true if the object carries this namespace's symbol\n */\n isInstance(obj: unknown): boolean;\n}\n\n/**\n * Create a symbol-based namespace for hierarchical `isInstance` checking.\n *\n * Each namespace level gets its own `Symbol.for(path)`. When a class is\n * branded via `.brand()`, only the new symbol for that level is stamped\n * on the prototype. Parent symbols are inherited implicitly through the\n * class extension chain -- `symbol in obj` traverses the prototype chain,\n * so a `ConfigError` instance is recognized by `LangChainError.isInstance()`\n * because it extends `GoogleError` which extends `LangChainError`, whose\n * prototype already carries the `langchain.error` symbol.\n *\n * @param path - The dot-separated namespace path (e.g. \"langchain.error\")\n * @returns A Namespace object with `.brand()`, `.sub()`, and `.isInstance()`\n *\n * @example\n * ```typescript\n * const langchain = createNamespace(\"langchain\");\n * const errorNs = langchain.sub(\"error\");\n * const googleNs = errorNs.sub(\"google\");\n *\n * class LangChainError extends errorNs.brand(Error) {}\n * class GoogleError extends googleNs.brand(LangChainError) {}\n * class ConfigError extends googleNs.brand(GoogleError, \"configuration\") {}\n *\n * const err = new ConfigError(\"bad config\");\n * LangChainError.isInstance(err); // true (checks langchain.error symbol)\n * GoogleError.isInstance(err); // true (checks langchain.error.google symbol)\n * ConfigError.isInstance(err); // true (checks langchain.error.google.configuration symbol)\n * ```\n */\nexport function createNamespace(path: string): Namespace {\n const symbol: symbol = Symbol.for(path);\n\n return {\n brand<TBase extends Constructor>(Base: TBase, marker?: string) {\n const brandSymbol: symbol = marker\n ? Symbol.for(`${path}.${marker}`)\n : symbol;\n\n class _Branded extends (Base as any) {\n readonly [brandSymbol] = true as const;\n\n constructor(...args: any[]) {\n super(...args);\n }\n\n static isInstance(obj: unknown): boolean {\n return (\n typeof obj === \"object\" &&\n obj !== null &&\n brandSymbol in obj &&\n (obj as Record<symbol, unknown>)[brandSymbol] === true\n );\n }\n }\n\n // Inherit the base class's name so \"_Branded\" doesn't leak\n // through the static prototype chain.\n Object.defineProperty(_Branded, \"name\", { value: Base.name });\n\n return _Branded as unknown as BrandedClass<TBase>;\n },\n\n sub(childPath: string): Namespace {\n return createNamespace(`${path}.${childPath}`);\n },\n\n isInstance(obj: unknown): boolean {\n return (\n typeof obj === \"object\" &&\n obj !== null &&\n symbol in obj &&\n (obj as Record<symbol, unknown>)[symbol] === true\n );\n },\n };\n}\n\n/** Base namespace used throughout LangChain */\nexport const ns = createNamespace(\"langchain\");\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiHA,SAAgB,gBAAgB,MAAyB;CACvD,MAAM,SAAiB,OAAO,IAAI,KAAK;AAEvC,QAAO;EACL,MAAiC,MAAa,QAAiB;GAC7D,MAAM,cAAsB,SACxB,OAAO,IAAI,GAAG,KAAK,GAAG,SAAS,GAC/B;GAEJ,MAAM,iBAAkB,KAAa;IACnC,CAAU,eAAe;IAEzB,YAAY,GAAG,MAAa;AAC1B,WAAM,GAAG,KAAK;;IAGhB,OAAO,WAAW,KAAuB;AACvC,YACE,OAAO,QAAQ,YACf,QAAQ,QACR,eAAe,OACd,IAAgC,iBAAiB;;;AAOxD,UAAO,eAAe,UAAU,QAAQ,EAAE,OAAO,KAAK,MAAM,CAAC;AAE7D,UAAO;;EAGT,IAAI,WAA8B;AAChC,UAAO,gBAAgB,GAAG,KAAK,GAAG,YAAY;;EAGhD,WAAW,KAAuB;AAChC,UACE,OAAO,QAAQ,YACf,QAAQ,QACR,UAAU,OACT,IAAgC,YAAY;;EAGlD;;;AAIH,MAAa,KAAK,gBAAgB,YAAY"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"namespace.js","names":[],"sources":["../../src/utils/namespace.ts"],"sourcesContent":["/*
|
|
1
|
+
{"version":3,"file":"namespace.js","names":[],"sources":["../../src/utils/namespace.ts"],"sourcesContent":["/* oxlint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * A constructor type that can be used as a base class for branding.\n */\ntype Constructor = abstract new (...args: any[]) => any;\n\n/**\n * The return type of `Namespace.brand()`: the original base class\n * intersected with a polymorphic `isInstance` type guard.\n */\ntype BrandedClass<TBase extends Constructor> = TBase & {\n isInstance: IsInstanceFn;\n};\n\n/**\n * A static `isInstance` type guard that resolves to the subclass it's\n * called on via the generic `this` parameter.\n *\n * At call sites TypeScript infers `T` from the class, so\n * `StandardError.isInstance(obj)` narrows `obj` to `StandardError`.\n */\ntype IsInstanceFn = <T extends Constructor>(\n this: T,\n obj: unknown\n) => obj is InstanceType<T>;\n\n/**\n * A namespace object for hierarchical symbol-based branding.\n *\n * Namespaces are internal authoring tools. They are not intended to be\n * part of the public API -- only the branded classes are.\n *\n * @example\n * ```typescript\n * const langchain = createNamespace(\"langchain\");\n * const errorNs = langchain.sub(\"error\");\n *\n * export class LangChainError extends errorNs.brand(Error) {\n * readonly name = \"LangChainError\";\n * }\n *\n * export class ModelAbortError extends errorNs.brand(LangChainError, \"model-abort\") {\n * readonly name = \"ModelAbortError\";\n * }\n * ```\n */\nexport interface Namespace {\n /**\n * Brand a base class with this namespace's symbols.\n *\n * Without a marker, creates a namespace-level base class whose\n * `static isInstance` checks for the namespace's own symbol.\n *\n * With a marker, creates a leaf class whose `static isInstance`\n * checks for the marker-specific symbol.\n *\n * @param Base - The base class to extend\n * @param marker - Optional marker for leaf classes\n * @returns A new class extending Base with symbol branding and static isInstance\n */\n brand<TBase extends Constructor>(\n Base: TBase,\n marker?: string\n ): BrandedClass<TBase>;\n\n /**\n * Create a child namespace.\n *\n * @param childPath - The child segment to append to the current path\n * @returns A new Namespace with the extended path\n */\n sub(childPath: string): Namespace;\n\n /**\n * Check if an object is branded under this namespace (at any level).\n *\n * @param obj - The object to check\n * @returns true if the object carries this namespace's symbol\n */\n isInstance(obj: unknown): boolean;\n}\n\n/**\n * Create a symbol-based namespace for hierarchical `isInstance` checking.\n *\n * Each namespace level gets its own `Symbol.for(path)`. When a class is\n * branded via `.brand()`, only the new symbol for that level is stamped\n * on the prototype. Parent symbols are inherited implicitly through the\n * class extension chain -- `symbol in obj` traverses the prototype chain,\n * so a `ConfigError` instance is recognized by `LangChainError.isInstance()`\n * because it extends `GoogleError` which extends `LangChainError`, whose\n * prototype already carries the `langchain.error` symbol.\n *\n * @param path - The dot-separated namespace path (e.g. \"langchain.error\")\n * @returns A Namespace object with `.brand()`, `.sub()`, and `.isInstance()`\n *\n * @example\n * ```typescript\n * const langchain = createNamespace(\"langchain\");\n * const errorNs = langchain.sub(\"error\");\n * const googleNs = errorNs.sub(\"google\");\n *\n * class LangChainError extends errorNs.brand(Error) {}\n * class GoogleError extends googleNs.brand(LangChainError) {}\n * class ConfigError extends googleNs.brand(GoogleError, \"configuration\") {}\n *\n * const err = new ConfigError(\"bad config\");\n * LangChainError.isInstance(err); // true (checks langchain.error symbol)\n * GoogleError.isInstance(err); // true (checks langchain.error.google symbol)\n * ConfigError.isInstance(err); // true (checks langchain.error.google.configuration symbol)\n * ```\n */\nexport function createNamespace(path: string): Namespace {\n const symbol: symbol = Symbol.for(path);\n\n return {\n brand<TBase extends Constructor>(Base: TBase, marker?: string) {\n const brandSymbol: symbol = marker\n ? Symbol.for(`${path}.${marker}`)\n : symbol;\n\n class _Branded extends (Base as any) {\n readonly [brandSymbol] = true as const;\n\n constructor(...args: any[]) {\n super(...args);\n }\n\n static isInstance(obj: unknown): boolean {\n return (\n typeof obj === \"object\" &&\n obj !== null &&\n brandSymbol in obj &&\n (obj as Record<symbol, unknown>)[brandSymbol] === true\n );\n }\n }\n\n // Inherit the base class's name so \"_Branded\" doesn't leak\n // through the static prototype chain.\n Object.defineProperty(_Branded, \"name\", { value: Base.name });\n\n return _Branded as unknown as BrandedClass<TBase>;\n },\n\n sub(childPath: string): Namespace {\n return createNamespace(`${path}.${childPath}`);\n },\n\n isInstance(obj: unknown): boolean {\n return (\n typeof obj === \"object\" &&\n obj !== null &&\n symbol in obj &&\n (obj as Record<symbol, unknown>)[symbol] === true\n );\n },\n };\n}\n\n/** Base namespace used throughout LangChain */\nexport const ns = createNamespace(\"langchain\");\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiHA,SAAgB,gBAAgB,MAAyB;CACvD,MAAM,SAAiB,OAAO,IAAI,KAAK;AAEvC,QAAO;EACL,MAAiC,MAAa,QAAiB;GAC7D,MAAM,cAAsB,SACxB,OAAO,IAAI,GAAG,KAAK,GAAG,SAAS,GAC/B;GAEJ,MAAM,iBAAkB,KAAa;IACnC,CAAU,eAAe;IAEzB,YAAY,GAAG,MAAa;AAC1B,WAAM,GAAG,KAAK;;IAGhB,OAAO,WAAW,KAAuB;AACvC,YACE,OAAO,QAAQ,YACf,QAAQ,QACR,eAAe,OACd,IAAgC,iBAAiB;;;AAOxD,UAAO,eAAe,UAAU,QAAQ,EAAE,OAAO,KAAK,MAAM,CAAC;AAE7D,UAAO;;EAGT,IAAI,WAA8B;AAChC,UAAO,gBAAgB,GAAG,KAAK,GAAG,YAAY;;EAGhD,WAAW,KAAuB;AAChC,UACE,OAAO,QAAQ,YACf,QAAQ,QACR,UAAU,OACT,IAAgC,YAAY;;EAGlD;;;AAIH,MAAa,KAAK,gBAAgB,YAAY"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["isNetworkError"],"sources":["../../../src/utils/p-retry/index.js"],"sourcesContent":["/*
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["isNetworkError"],"sources":["../../../src/utils/p-retry/index.js"],"sourcesContent":["/* oxlint-disable */\nimport isNetworkError from \"../is-network-error/index.js\";\n\nfunction validateRetries(retries) {\n if (typeof retries === \"number\") {\n if (retries < 0) {\n throw new TypeError(\"Expected `retries` to be a non-negative number.\");\n }\n\n if (Number.isNaN(retries)) {\n throw new TypeError(\n \"Expected `retries` to be a valid number or Infinity, got NaN.\"\n );\n }\n } else if (retries !== undefined) {\n throw new TypeError(\"Expected `retries` to be a number or Infinity.\");\n }\n}\n\nfunction validateNumberOption(\n name,\n value,\n { min = 0, allowInfinity = false } = {}\n) {\n if (value === undefined) {\n return;\n }\n\n if (typeof value !== \"number\" || Number.isNaN(value)) {\n throw new TypeError(\n `Expected \\`${name}\\` to be a number${\n allowInfinity ? \" or Infinity\" : \"\"\n }.`\n );\n }\n\n if (!allowInfinity && !Number.isFinite(value)) {\n throw new TypeError(`Expected \\`${name}\\` to be a finite number.`);\n }\n\n if (value < min) {\n throw new TypeError(`Expected \\`${name}\\` to be \\u2265 ${min}.`);\n }\n}\n\nexport class AbortError extends Error {\n constructor(message) {\n super();\n\n if (message instanceof Error) {\n this.originalError = message;\n ({ message } = message);\n } else {\n this.originalError = new Error(message);\n this.originalError.stack = this.stack;\n }\n\n this.name = \"AbortError\";\n this.message = message;\n }\n}\n\nfunction calculateDelay(retriesConsumed, options) {\n const attempt = Math.max(1, retriesConsumed + 1);\n const random = options.randomize ? Math.random() + 1 : 1;\n\n let timeout = Math.round(\n random * options.minTimeout * options.factor ** (attempt - 1)\n );\n timeout = Math.min(timeout, options.maxTimeout);\n\n return timeout;\n}\n\nfunction calculateRemainingTime(start, max) {\n if (!Number.isFinite(max)) {\n return max;\n }\n\n return max - (performance.now() - start);\n}\n\nasync function onAttemptFailure({\n error,\n attemptNumber,\n retriesConsumed,\n startTime,\n options,\n}) {\n const normalizedError =\n error instanceof Error\n ? error\n : new TypeError(\n `Non-error was thrown: \"${error}\". You should only throw errors.`\n );\n\n if (normalizedError instanceof AbortError) {\n throw normalizedError.originalError;\n }\n\n const retriesLeft = Number.isFinite(options.retries)\n ? Math.max(0, options.retries - retriesConsumed)\n : options.retries;\n\n const maxRetryTime = options.maxRetryTime ?? Number.POSITIVE_INFINITY;\n\n const context = Object.freeze({\n error: normalizedError,\n attemptNumber,\n retriesLeft,\n retriesConsumed,\n });\n\n await options.onFailedAttempt(context);\n\n if (calculateRemainingTime(startTime, maxRetryTime) <= 0) {\n throw normalizedError;\n }\n\n const consumeRetry = await options.shouldConsumeRetry(context);\n\n const remainingTime = calculateRemainingTime(startTime, maxRetryTime);\n\n if (remainingTime <= 0 || retriesLeft <= 0) {\n throw normalizedError;\n }\n\n if (\n normalizedError instanceof TypeError &&\n !isNetworkError(normalizedError)\n ) {\n if (consumeRetry) {\n throw normalizedError;\n }\n\n options.signal?.throwIfAborted();\n return false;\n }\n\n if (!(await options.shouldRetry(context))) {\n throw normalizedError;\n }\n\n if (!consumeRetry) {\n options.signal?.throwIfAborted();\n return false;\n }\n\n const delayTime = calculateDelay(retriesConsumed, options);\n const finalDelay = Math.min(delayTime, remainingTime);\n\n if (finalDelay > 0) {\n await new Promise((resolve, reject) => {\n const onAbort = () => {\n clearTimeout(timeoutToken);\n options.signal?.removeEventListener(\"abort\", onAbort);\n reject(options.signal.reason);\n };\n\n const timeoutToken = setTimeout(() => {\n options.signal?.removeEventListener(\"abort\", onAbort);\n resolve();\n }, finalDelay);\n\n if (options.unref) {\n timeoutToken.unref?.();\n }\n\n options.signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n }\n\n options.signal?.throwIfAborted();\n\n return true;\n}\n\nexport default async function pRetry(input, options = {}) {\n options = { ...options };\n\n validateRetries(options.retries);\n\n if (Object.hasOwn(options, \"forever\")) {\n throw new Error(\n \"The `forever` option is no longer supported. For many use-cases, you can set `retries: Infinity` instead.\"\n );\n }\n\n options.retries ??= 10;\n options.factor ??= 2;\n options.minTimeout ??= 1000;\n options.maxTimeout ??= Number.POSITIVE_INFINITY;\n options.maxRetryTime ??= Number.POSITIVE_INFINITY;\n options.randomize ??= false;\n options.onFailedAttempt ??= () => {};\n options.shouldRetry ??= () => true;\n options.shouldConsumeRetry ??= () => true;\n\n // Validate numeric options and normalize edge cases\n validateNumberOption(\"factor\", options.factor, {\n min: 0,\n allowInfinity: false,\n });\n validateNumberOption(\"minTimeout\", options.minTimeout, {\n min: 0,\n allowInfinity: false,\n });\n validateNumberOption(\"maxTimeout\", options.maxTimeout, {\n min: 0,\n allowInfinity: true,\n });\n validateNumberOption(\"maxRetryTime\", options.maxRetryTime, {\n min: 0,\n allowInfinity: true,\n });\n\n // Treat non-positive factor as 1 to avoid zero backoff or negative behavior\n if (!(options.factor > 0)) {\n options.factor = 1;\n }\n\n options.signal?.throwIfAborted();\n\n let attemptNumber = 0;\n let retriesConsumed = 0;\n const startTime = performance.now();\n\n while (\n Number.isFinite(options.retries) ? retriesConsumed <= options.retries : true\n ) {\n attemptNumber++;\n\n try {\n options.signal?.throwIfAborted();\n\n const result = await input(attemptNumber);\n\n options.signal?.throwIfAborted();\n\n return result;\n } catch (error) {\n if (\n await onAttemptFailure({\n error,\n attemptNumber,\n retriesConsumed,\n startTime,\n options,\n })\n ) {\n retriesConsumed++;\n }\n }\n }\n\n // Should not reach here, but in case it does, throw an error\n throw new Error(\"Retry attempts exhausted without throwing an error.\");\n}\n\nexport function makeRetriable(function_, options) {\n return function (...arguments_) {\n return pRetry(() => function_.apply(this, arguments_), options);\n };\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/utils/p-retry/index.js"],"sourcesContent":["/*
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/utils/p-retry/index.js"],"sourcesContent":["/* oxlint-disable */\nimport isNetworkError from \"../is-network-error/index.js\";\n\nfunction validateRetries(retries) {\n if (typeof retries === \"number\") {\n if (retries < 0) {\n throw new TypeError(\"Expected `retries` to be a non-negative number.\");\n }\n\n if (Number.isNaN(retries)) {\n throw new TypeError(\n \"Expected `retries` to be a valid number or Infinity, got NaN.\"\n );\n }\n } else if (retries !== undefined) {\n throw new TypeError(\"Expected `retries` to be a number or Infinity.\");\n }\n}\n\nfunction validateNumberOption(\n name,\n value,\n { min = 0, allowInfinity = false } = {}\n) {\n if (value === undefined) {\n return;\n }\n\n if (typeof value !== \"number\" || Number.isNaN(value)) {\n throw new TypeError(\n `Expected \\`${name}\\` to be a number${\n allowInfinity ? \" or Infinity\" : \"\"\n }.`\n );\n }\n\n if (!allowInfinity && !Number.isFinite(value)) {\n throw new TypeError(`Expected \\`${name}\\` to be a finite number.`);\n }\n\n if (value < min) {\n throw new TypeError(`Expected \\`${name}\\` to be \\u2265 ${min}.`);\n }\n}\n\nexport class AbortError extends Error {\n constructor(message) {\n super();\n\n if (message instanceof Error) {\n this.originalError = message;\n ({ message } = message);\n } else {\n this.originalError = new Error(message);\n this.originalError.stack = this.stack;\n }\n\n this.name = \"AbortError\";\n this.message = message;\n }\n}\n\nfunction calculateDelay(retriesConsumed, options) {\n const attempt = Math.max(1, retriesConsumed + 1);\n const random = options.randomize ? Math.random() + 1 : 1;\n\n let timeout = Math.round(\n random * options.minTimeout * options.factor ** (attempt - 1)\n );\n timeout = Math.min(timeout, options.maxTimeout);\n\n return timeout;\n}\n\nfunction calculateRemainingTime(start, max) {\n if (!Number.isFinite(max)) {\n return max;\n }\n\n return max - (performance.now() - start);\n}\n\nasync function onAttemptFailure({\n error,\n attemptNumber,\n retriesConsumed,\n startTime,\n options,\n}) {\n const normalizedError =\n error instanceof Error\n ? error\n : new TypeError(\n `Non-error was thrown: \"${error}\". You should only throw errors.`\n );\n\n if (normalizedError instanceof AbortError) {\n throw normalizedError.originalError;\n }\n\n const retriesLeft = Number.isFinite(options.retries)\n ? Math.max(0, options.retries - retriesConsumed)\n : options.retries;\n\n const maxRetryTime = options.maxRetryTime ?? Number.POSITIVE_INFINITY;\n\n const context = Object.freeze({\n error: normalizedError,\n attemptNumber,\n retriesLeft,\n retriesConsumed,\n });\n\n await options.onFailedAttempt(context);\n\n if (calculateRemainingTime(startTime, maxRetryTime) <= 0) {\n throw normalizedError;\n }\n\n const consumeRetry = await options.shouldConsumeRetry(context);\n\n const remainingTime = calculateRemainingTime(startTime, maxRetryTime);\n\n if (remainingTime <= 0 || retriesLeft <= 0) {\n throw normalizedError;\n }\n\n if (\n normalizedError instanceof TypeError &&\n !isNetworkError(normalizedError)\n ) {\n if (consumeRetry) {\n throw normalizedError;\n }\n\n options.signal?.throwIfAborted();\n return false;\n }\n\n if (!(await options.shouldRetry(context))) {\n throw normalizedError;\n }\n\n if (!consumeRetry) {\n options.signal?.throwIfAborted();\n return false;\n }\n\n const delayTime = calculateDelay(retriesConsumed, options);\n const finalDelay = Math.min(delayTime, remainingTime);\n\n if (finalDelay > 0) {\n await new Promise((resolve, reject) => {\n const onAbort = () => {\n clearTimeout(timeoutToken);\n options.signal?.removeEventListener(\"abort\", onAbort);\n reject(options.signal.reason);\n };\n\n const timeoutToken = setTimeout(() => {\n options.signal?.removeEventListener(\"abort\", onAbort);\n resolve();\n }, finalDelay);\n\n if (options.unref) {\n timeoutToken.unref?.();\n }\n\n options.signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n }\n\n options.signal?.throwIfAborted();\n\n return true;\n}\n\nexport default async function pRetry(input, options = {}) {\n options = { ...options };\n\n validateRetries(options.retries);\n\n if (Object.hasOwn(options, \"forever\")) {\n throw new Error(\n \"The `forever` option is no longer supported. For many use-cases, you can set `retries: Infinity` instead.\"\n );\n }\n\n options.retries ??= 10;\n options.factor ??= 2;\n options.minTimeout ??= 1000;\n options.maxTimeout ??= Number.POSITIVE_INFINITY;\n options.maxRetryTime ??= Number.POSITIVE_INFINITY;\n options.randomize ??= false;\n options.onFailedAttempt ??= () => {};\n options.shouldRetry ??= () => true;\n options.shouldConsumeRetry ??= () => true;\n\n // Validate numeric options and normalize edge cases\n validateNumberOption(\"factor\", options.factor, {\n min: 0,\n allowInfinity: false,\n });\n validateNumberOption(\"minTimeout\", options.minTimeout, {\n min: 0,\n allowInfinity: false,\n });\n validateNumberOption(\"maxTimeout\", options.maxTimeout, {\n min: 0,\n allowInfinity: true,\n });\n validateNumberOption(\"maxRetryTime\", options.maxRetryTime, {\n min: 0,\n allowInfinity: true,\n });\n\n // Treat non-positive factor as 1 to avoid zero backoff or negative behavior\n if (!(options.factor > 0)) {\n options.factor = 1;\n }\n\n options.signal?.throwIfAborted();\n\n let attemptNumber = 0;\n let retriesConsumed = 0;\n const startTime = performance.now();\n\n while (\n Number.isFinite(options.retries) ? retriesConsumed <= options.retries : true\n ) {\n attemptNumber++;\n\n try {\n options.signal?.throwIfAborted();\n\n const result = await input(attemptNumber);\n\n options.signal?.throwIfAborted();\n\n return result;\n } catch (error) {\n if (\n await onAttemptFailure({\n error,\n attemptNumber,\n retriesConsumed,\n startTime,\n options,\n })\n ) {\n retriesConsumed++;\n }\n }\n }\n\n // Should not reach here, but in case it does, throw an error\n throw new Error(\"Retry attempts exhausted without throwing an error.\");\n}\n\nexport function makeRetriable(function_, options) {\n return function (...arguments_) {\n return pRetry(() => function_.apply(this, arguments_), options);\n };\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signal.cjs","names":[],"sources":["../../src/utils/signal.ts"],"sourcesContent":["/**\n * Race a promise with an abort signal. If the signal is aborted, the promise will\n * be rejected with the error from the signal. If the promise is rejected, the signal will be aborted.\n *\n * @param promise - The promise to race.\n * @param signal - The abort signal.\n * @returns The result of the promise.\n */\nexport async function raceWithSignal<T>(\n promise: Promise<T>,\n signal?: AbortSignal\n): Promise<T> {\n if (signal === undefined) {\n return promise;\n }\n let listener: () => void;\n return Promise.race([\n promise.catch<T>((err) => {\n if (!signal?.aborted) {\n throw err;\n } else {\n return undefined as T;\n }\n }),\n new Promise<never>((_, reject) => {\n listener = () => {\n reject(getAbortSignalError(signal));\n };\n signal.addEventListener(\"abort\", listener, { once: true });\n // Must be here inside the promise to avoid a race condition\n if (signal.aborted) {\n reject(getAbortSignalError(signal));\n }\n }),\n ]).finally(() => signal.removeEventListener(\"abort\", listener));\n}\n\n/**\n * Get the error from an abort signal. Since you can set the reason to anything,\n * we have to do some type gymnastics to get a proper error message.\n *\n * @param signal - The abort signal.\n * @returns The error from the abort signal.\n */\nexport function getAbortSignalError(signal?: AbortSignal) {\n //
|
|
1
|
+
{"version":3,"file":"signal.cjs","names":[],"sources":["../../src/utils/signal.ts"],"sourcesContent":["/**\n * Race a promise with an abort signal. If the signal is aborted, the promise will\n * be rejected with the error from the signal. If the promise is rejected, the signal will be aborted.\n *\n * @param promise - The promise to race.\n * @param signal - The abort signal.\n * @returns The result of the promise.\n */\nexport async function raceWithSignal<T>(\n promise: Promise<T>,\n signal?: AbortSignal\n): Promise<T> {\n if (signal === undefined) {\n return promise;\n }\n let listener: () => void;\n return Promise.race([\n promise.catch<T>((err) => {\n if (!signal?.aborted) {\n throw err;\n } else {\n return undefined as T;\n }\n }),\n new Promise<never>((_, reject) => {\n listener = () => {\n reject(getAbortSignalError(signal));\n };\n signal.addEventListener(\"abort\", listener, { once: true });\n // Must be here inside the promise to avoid a race condition\n if (signal.aborted) {\n reject(getAbortSignalError(signal));\n }\n }),\n ]).finally(() => signal.removeEventListener(\"abort\", listener));\n}\n\n/**\n * Get the error from an abort signal. Since you can set the reason to anything,\n * we have to do some type gymnastics to get a proper error message.\n *\n * @param signal - The abort signal.\n * @returns The error from the abort signal.\n */\nexport function getAbortSignalError(signal?: AbortSignal) {\n // oxlint-disable-next-line no-instanceof/no-instanceof\n if (signal?.reason instanceof Error) {\n return signal.reason;\n }\n\n if (typeof signal?.reason === \"string\") {\n return new Error(signal.reason);\n }\n\n return new Error(\"Aborted\");\n}\n"],"mappings":";;;;;;;;;AAQA,eAAsB,eACpB,SACA,QACY;AACZ,KAAI,WAAW,KAAA,EACb,QAAO;CAET,IAAI;AACJ,QAAO,QAAQ,KAAK,CAClB,QAAQ,OAAU,QAAQ;AACxB,MAAI,CAAC,QAAQ,QACX,OAAM;MAEN;GAEF,EACF,IAAI,SAAgB,GAAG,WAAW;AAChC,mBAAiB;AACf,UAAO,oBAAoB,OAAO,CAAC;;AAErC,SAAO,iBAAiB,SAAS,UAAU,EAAE,MAAM,MAAM,CAAC;AAE1D,MAAI,OAAO,QACT,QAAO,oBAAoB,OAAO,CAAC;GAErC,CACH,CAAC,CAAC,cAAc,OAAO,oBAAoB,SAAS,SAAS,CAAC;;;;;;;;;AAUjE,SAAgB,oBAAoB,QAAsB;AAExD,KAAI,QAAQ,kBAAkB,MAC5B,QAAO,OAAO;AAGhB,KAAI,OAAO,QAAQ,WAAW,SAC5B,QAAO,IAAI,MAAM,OAAO,OAAO;AAGjC,wBAAO,IAAI,MAAM,UAAU"}
|
package/dist/utils/signal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signal.js","names":[],"sources":["../../src/utils/signal.ts"],"sourcesContent":["/**\n * Race a promise with an abort signal. If the signal is aborted, the promise will\n * be rejected with the error from the signal. If the promise is rejected, the signal will be aborted.\n *\n * @param promise - The promise to race.\n * @param signal - The abort signal.\n * @returns The result of the promise.\n */\nexport async function raceWithSignal<T>(\n promise: Promise<T>,\n signal?: AbortSignal\n): Promise<T> {\n if (signal === undefined) {\n return promise;\n }\n let listener: () => void;\n return Promise.race([\n promise.catch<T>((err) => {\n if (!signal?.aborted) {\n throw err;\n } else {\n return undefined as T;\n }\n }),\n new Promise<never>((_, reject) => {\n listener = () => {\n reject(getAbortSignalError(signal));\n };\n signal.addEventListener(\"abort\", listener, { once: true });\n // Must be here inside the promise to avoid a race condition\n if (signal.aborted) {\n reject(getAbortSignalError(signal));\n }\n }),\n ]).finally(() => signal.removeEventListener(\"abort\", listener));\n}\n\n/**\n * Get the error from an abort signal. Since you can set the reason to anything,\n * we have to do some type gymnastics to get a proper error message.\n *\n * @param signal - The abort signal.\n * @returns The error from the abort signal.\n */\nexport function getAbortSignalError(signal?: AbortSignal) {\n //
|
|
1
|
+
{"version":3,"file":"signal.js","names":[],"sources":["../../src/utils/signal.ts"],"sourcesContent":["/**\n * Race a promise with an abort signal. If the signal is aborted, the promise will\n * be rejected with the error from the signal. If the promise is rejected, the signal will be aborted.\n *\n * @param promise - The promise to race.\n * @param signal - The abort signal.\n * @returns The result of the promise.\n */\nexport async function raceWithSignal<T>(\n promise: Promise<T>,\n signal?: AbortSignal\n): Promise<T> {\n if (signal === undefined) {\n return promise;\n }\n let listener: () => void;\n return Promise.race([\n promise.catch<T>((err) => {\n if (!signal?.aborted) {\n throw err;\n } else {\n return undefined as T;\n }\n }),\n new Promise<never>((_, reject) => {\n listener = () => {\n reject(getAbortSignalError(signal));\n };\n signal.addEventListener(\"abort\", listener, { once: true });\n // Must be here inside the promise to avoid a race condition\n if (signal.aborted) {\n reject(getAbortSignalError(signal));\n }\n }),\n ]).finally(() => signal.removeEventListener(\"abort\", listener));\n}\n\n/**\n * Get the error from an abort signal. Since you can set the reason to anything,\n * we have to do some type gymnastics to get a proper error message.\n *\n * @param signal - The abort signal.\n * @returns The error from the abort signal.\n */\nexport function getAbortSignalError(signal?: AbortSignal) {\n // oxlint-disable-next-line no-instanceof/no-instanceof\n if (signal?.reason instanceof Error) {\n return signal.reason;\n }\n\n if (typeof signal?.reason === \"string\") {\n return new Error(signal.reason);\n }\n\n return new Error(\"Aborted\");\n}\n"],"mappings":";;;;;;;;;AAQA,eAAsB,eACpB,SACA,QACY;AACZ,KAAI,WAAW,KAAA,EACb,QAAO;CAET,IAAI;AACJ,QAAO,QAAQ,KAAK,CAClB,QAAQ,OAAU,QAAQ;AACxB,MAAI,CAAC,QAAQ,QACX,OAAM;MAEN;GAEF,EACF,IAAI,SAAgB,GAAG,WAAW;AAChC,mBAAiB;AACf,UAAO,oBAAoB,OAAO,CAAC;;AAErC,SAAO,iBAAiB,SAAS,UAAU,EAAE,MAAM,MAAM,CAAC;AAE1D,MAAI,OAAO,QACT,QAAO,oBAAoB,OAAO,CAAC;GAErC,CACH,CAAC,CAAC,cAAc,OAAO,oBAAoB,SAAS,SAAS,CAAC;;;;;;;;;AAUjE,SAAgB,oBAAoB,QAAsB;AAExD,KAAI,QAAQ,kBAAkB,MAC5B,QAAO,OAAO;AAGhB,KAAI,OAAO,QAAQ,WAAW,SAC5B,QAAO,IAAI,MAAM,OAAO,OAAO;AAGjC,wBAAO,IAAI,MAAM,UAAU"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standard_schema.cjs","names":[],"sources":["../../src/utils/standard_schema.ts"],"sourcesContent":["import { StandardJSONSchemaV1, StandardSchemaV1 } from \"@standard-schema/spec\";\n\n/**\n * A schema that supports both runtime validation and JSON Schema generation. Any schema passed\n * to withStructuredOutput must satisfy both interfaces.\n */\n//
|
|
1
|
+
{"version":3,"file":"standard_schema.cjs","names":[],"sources":["../../src/utils/standard_schema.ts"],"sourcesContent":["import { StandardJSONSchemaV1, StandardSchemaV1 } from \"@standard-schema/spec\";\n\n/**\n * A schema that supports both runtime validation and JSON Schema generation. Any schema passed\n * to withStructuredOutput must satisfy both interfaces.\n */\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport type SerializableSchema<Input = any, Output = Input> = StandardSchemaV1<\n Input,\n Output\n> &\n StandardJSONSchemaV1<Input, Output>;\n\n/**\n * Type guard for Standard Schema V1. Returns true if the value has a `~standard.validate`\n * interface, indicating it can validate unknown values at runtime (e.g. for parsing LLM output).\n */\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isStandardSchema<Input = any, Output = Input>(\n schema: unknown\n): schema is StandardSchemaV1<Input, Output> {\n return (\n (typeof schema === \"object\" || typeof schema === \"function\") &&\n schema !== null &&\n \"~standard\" in schema &&\n typeof schema[\"~standard\"] === \"object\" &&\n schema[\"~standard\"] !== null &&\n \"validate\" in schema[\"~standard\"]\n );\n}\n\n/**\n * Type guard for Standard JSON Schema V1. Returns true if the value has a `~standard.jsonSchema`\n * interface, indicating it can be converted to a JSON Schema object (e.g. for sending as a tool\n * definition to an LLM).\n */\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isStandardJsonSchema<Input = any, Output = Input>(\n schema: unknown\n): schema is StandardJSONSchemaV1<Input, Output> {\n return (\n (typeof schema === \"object\" || typeof schema === \"function\") &&\n schema !== null &&\n \"~standard\" in schema &&\n typeof schema[\"~standard\"] === \"object\" &&\n schema[\"~standard\"] !== null &&\n \"jsonSchema\" in schema[\"~standard\"]\n );\n}\n\n/**\n * Type guard for Standard Schema V1. Returns true if the value has a `~standard.validate` interface,\n * indicating it can validate unknown values at runtime (e.g. for parsing LLM output).\n */\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isSerializableSchema<Input = any, Output = Input>(\n schema: unknown\n): schema is SerializableSchema<Input, Output> {\n return isStandardSchema(schema) && isStandardJsonSchema(schema);\n}\n"],"mappings":";;;;;;;;;;;AAkBA,SAAgB,iBACd,QAC2C;AAC3C,SACG,OAAO,WAAW,YAAY,OAAO,WAAW,eACjD,WAAW,QACX,eAAe,UACf,OAAO,OAAO,iBAAiB,YAC/B,OAAO,iBAAiB,QACxB,cAAc,OAAO;;;;;;;AAUzB,SAAgB,qBACd,QAC+C;AAC/C,SACG,OAAO,WAAW,YAAY,OAAO,WAAW,eACjD,WAAW,QACX,eAAe,UACf,OAAO,OAAO,iBAAiB,YAC/B,OAAO,iBAAiB,QACxB,gBAAgB,OAAO;;;;;;AAS3B,SAAgB,qBACd,QAC6C;AAC7C,QAAO,iBAAiB,OAAO,IAAI,qBAAqB,OAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standard_schema.js","names":[],"sources":["../../src/utils/standard_schema.ts"],"sourcesContent":["import { StandardJSONSchemaV1, StandardSchemaV1 } from \"@standard-schema/spec\";\n\n/**\n * A schema that supports both runtime validation and JSON Schema generation. Any schema passed\n * to withStructuredOutput must satisfy both interfaces.\n */\n//
|
|
1
|
+
{"version":3,"file":"standard_schema.js","names":[],"sources":["../../src/utils/standard_schema.ts"],"sourcesContent":["import { StandardJSONSchemaV1, StandardSchemaV1 } from \"@standard-schema/spec\";\n\n/**\n * A schema that supports both runtime validation and JSON Schema generation. Any schema passed\n * to withStructuredOutput must satisfy both interfaces.\n */\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport type SerializableSchema<Input = any, Output = Input> = StandardSchemaV1<\n Input,\n Output\n> &\n StandardJSONSchemaV1<Input, Output>;\n\n/**\n * Type guard for Standard Schema V1. Returns true if the value has a `~standard.validate`\n * interface, indicating it can validate unknown values at runtime (e.g. for parsing LLM output).\n */\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isStandardSchema<Input = any, Output = Input>(\n schema: unknown\n): schema is StandardSchemaV1<Input, Output> {\n return (\n (typeof schema === \"object\" || typeof schema === \"function\") &&\n schema !== null &&\n \"~standard\" in schema &&\n typeof schema[\"~standard\"] === \"object\" &&\n schema[\"~standard\"] !== null &&\n \"validate\" in schema[\"~standard\"]\n );\n}\n\n/**\n * Type guard for Standard JSON Schema V1. Returns true if the value has a `~standard.jsonSchema`\n * interface, indicating it can be converted to a JSON Schema object (e.g. for sending as a tool\n * definition to an LLM).\n */\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isStandardJsonSchema<Input = any, Output = Input>(\n schema: unknown\n): schema is StandardJSONSchemaV1<Input, Output> {\n return (\n (typeof schema === \"object\" || typeof schema === \"function\") &&\n schema !== null &&\n \"~standard\" in schema &&\n typeof schema[\"~standard\"] === \"object\" &&\n schema[\"~standard\"] !== null &&\n \"jsonSchema\" in schema[\"~standard\"]\n );\n}\n\n/**\n * Type guard for Standard Schema V1. Returns true if the value has a `~standard.validate` interface,\n * indicating it can validate unknown values at runtime (e.g. for parsing LLM output).\n */\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isSerializableSchema<Input = any, Output = Input>(\n schema: unknown\n): schema is SerializableSchema<Input, Output> {\n return isStandardSchema(schema) && isStandardJsonSchema(schema);\n}\n"],"mappings":";;;;;;;;;;;AAkBA,SAAgB,iBACd,QAC2C;AAC3C,SACG,OAAO,WAAW,YAAY,OAAO,WAAW,eACjD,WAAW,QACX,eAAe,UACf,OAAO,OAAO,iBAAiB,YAC/B,OAAO,iBAAiB,QACxB,cAAc,OAAO;;;;;;;AAUzB,SAAgB,qBACd,QAC+C;AAC/C,SACG,OAAO,WAAW,YAAY,OAAO,WAAW,eACjD,WAAW,QACX,eAAe,UACf,OAAO,OAAO,iBAAiB,YAC/B,OAAO,iBAAiB,QACxB,gBAAgB,OAAO;;;;;;AAS3B,SAAgB,qBACd,QAC6C;AAC7C,QAAO,iBAAiB,OAAO,IAAI,qBAAqB,OAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.cjs","names":["AsyncLocalStorageProviderSingleton","pickRunnableConfigKeys","raceWithSignal"],"sources":["../../src/utils/stream.ts"],"sourcesContent":["import { pickRunnableConfigKeys } from \"../runnables/config.js\";\nimport { AsyncLocalStorageProviderSingleton } from \"../singletons/index.js\";\nimport type { IterableReadableStreamInterface } from \"../types/_internal.js\";\nimport { raceWithSignal } from \"./signal.js\";\n\n// Re-exported for backwards compatibility\n// Do NOT import this type from this file inside the project. Instead, always import from `types/_internal.js`\n// when using internally\nexport type { IterableReadableStreamInterface };\n\n/*\n * Support async iterator syntax for ReadableStreams in all environments.\n * Source: https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport class IterableReadableStream<T>\n extends ReadableStream<T>\n implements IterableReadableStreamInterface<T>\n{\n public reader: ReadableStreamDefaultReader<T>;\n\n ensureReader() {\n if (!this.reader) {\n this.reader = this.getReader();\n }\n }\n\n async next(): Promise<IteratorResult<T>> {\n this.ensureReader();\n try {\n const result = await this.reader.read();\n if (result.done) {\n this.reader.releaseLock(); // release lock when stream becomes closed\n return {\n done: true,\n value: undefined,\n };\n } else {\n return {\n done: false,\n value: result.value,\n };\n }\n } catch (e) {\n this.reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n }\n\n async return(): Promise<IteratorResult<T>> {\n this.ensureReader();\n // If wrapped in a Node stream, cancel is already called.\n if (this.locked) {\n const cancelPromise = this.reader.cancel(); // cancel first, but don't await yet\n this.reader.releaseLock(); // release lock first\n await cancelPromise; // now await it\n }\n return { done: true, value: undefined };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async throw(e: any): Promise<IteratorResult<T>> {\n this.ensureReader();\n if (this.locked) {\n const cancelPromise = this.reader.cancel(); // cancel first, but don't await yet\n this.reader.releaseLock(); // release lock first\n await cancelPromise; // now await it\n }\n throw e;\n }\n\n [Symbol.asyncIterator]() {\n return this;\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore Not present in Node 18 types, required in latest Node 22\n async [Symbol.asyncDispose]() {\n await this.return();\n }\n\n static fromReadableStream<T>(stream: ReadableStream<T>) {\n // From https://developer.mozilla.org/en-US/docs/Web/API/Streams_API/Using_readable_streams#reading_the_stream\n const reader = stream.getReader();\n return new IterableReadableStream<T>({\n start(controller) {\n return pump();\n function pump(): Promise<T | undefined> {\n return reader.read().then(({ done, value }) => {\n // When no more data needs to be consumed, close the stream\n if (done) {\n controller.close();\n return;\n }\n // Enqueue the next data chunk into our target stream\n controller.enqueue(value);\n return pump();\n });\n }\n },\n cancel() {\n reader.releaseLock();\n },\n });\n }\n\n static fromAsyncGenerator<T>(generator: AsyncGenerator<T>) {\n return new IterableReadableStream<T>({\n async pull(controller) {\n const { value, done } = await generator.next();\n // When no more data needs to be consumed, close the stream\n if (done) {\n controller.close();\n }\n // Fix: `else if (value)` will hang the streaming when nullish value (e.g. empty string) is pulled\n controller.enqueue(value);\n },\n async cancel(reason) {\n await generator.return(reason);\n },\n });\n }\n}\n\nexport function atee<T>(\n iter: AsyncGenerator<T>,\n length = 2\n): AsyncGenerator<T>[] {\n const buffers = Array.from(\n { length },\n () => [] as Array<IteratorResult<T> | IteratorReturnResult<T>>\n );\n return buffers.map(async function* makeIter(buffer) {\n while (true) {\n if (buffer.length === 0) {\n const result = await iter.next();\n for (const buffer of buffers) {\n buffer.push(result);\n }\n } else if (buffer[0].done) {\n return;\n } else {\n yield buffer.shift()!.value;\n }\n }\n });\n}\n\nexport function concat<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Array<any> | string | number | Record<string, any> | any,\n>(first: T, second: T): T {\n if (Array.isArray(first) && Array.isArray(second)) {\n return first.concat(second) as T;\n } else if (typeof first === \"string\" && typeof second === \"string\") {\n return (first + second) as T;\n } else if (typeof first === \"number\" && typeof second === \"number\") {\n return (first + second) as T;\n } else if (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n \"concat\" in (first as any) &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n typeof (first as any).concat === \"function\"\n ) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (first as any).concat(second) as T;\n } else if (typeof first === \"object\" && typeof second === \"object\") {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const chunk = { ...first } as Record<string, any>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n for (const [key, value] of Object.entries(second as Record<string, any>)) {\n if (key in chunk && !Array.isArray(chunk[key])) {\n chunk[key] = concat(chunk[key], value);\n } else {\n chunk[key] = value;\n }\n }\n return chunk as T;\n } else {\n throw new Error(`Cannot concat ${typeof first} and ${typeof second}`);\n }\n}\n\nexport class AsyncGeneratorWithSetup<\n S = unknown,\n T = unknown,\n TReturn = unknown,\n TNext = unknown,\n> implements AsyncGenerator<T, TReturn, TNext> {\n private generator: AsyncGenerator<T>;\n\n public setup: Promise<S>;\n\n public config?: unknown;\n\n public signal?: AbortSignal;\n\n private firstResult: Promise<IteratorResult<T>>;\n\n private firstResultUsed = false;\n\n constructor(params: {\n generator: AsyncGenerator<T>;\n startSetup?: () => Promise<S>;\n config?: unknown;\n signal?: AbortSignal;\n }) {\n this.generator = params.generator;\n this.config = params.config;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.signal = params.signal ?? (this.config as any)?.signal;\n // setup is a promise that resolves only after the first iterator value\n // is available. this is useful when setup of several piped generators\n // needs to happen in logical order, ie. in the order in which input to\n // to each generator is available.\n this.setup = new Promise((resolve, reject) => {\n // eslint-disable-next-line no-void\n void AsyncLocalStorageProviderSingleton.runWithConfig(\n pickRunnableConfigKeys(\n params.config as Record<string, unknown> | undefined\n ),\n async () => {\n // Abort the first read too so timeouts can stop streams before the\n // first chunk is available.\n this.firstResult = this.signal\n ? raceWithSignal(params.generator.next(), this.signal)\n : params.generator.next();\n if (params.startSetup) {\n this.firstResult.then(params.startSetup).then(resolve, reject);\n } else {\n this.firstResult.then((_result) => resolve(undefined as S), reject);\n }\n },\n true\n );\n });\n }\n\n async next(...args: [] | [TNext]): Promise<IteratorResult<T>> {\n this.signal?.throwIfAborted();\n\n if (!this.firstResultUsed) {\n this.firstResultUsed = true;\n return this.firstResult;\n }\n\n return AsyncLocalStorageProviderSingleton.runWithConfig(\n pickRunnableConfigKeys(\n this.config as Record<string, unknown> | undefined\n ),\n this.signal\n ? async () => {\n return raceWithSignal(this.generator.next(...args), this.signal);\n }\n : async () => {\n return this.generator.next(...args);\n },\n true\n );\n }\n\n async return(\n value?: TReturn | PromiseLike<TReturn>\n ): Promise<IteratorResult<T>> {\n return this.generator.return(value);\n }\n\n async throw(e: Error): Promise<IteratorResult<T>> {\n return this.generator.throw(e);\n }\n\n [Symbol.asyncIterator]() {\n return this;\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore Not present in Node 18 types, required in latest Node 22\n async [Symbol.asyncDispose]() {\n await this.return();\n }\n}\n\nexport async function pipeGeneratorWithSetup<\n S,\n A extends unknown[],\n T,\n TReturn,\n TNext,\n U,\n UReturn,\n UNext,\n>(\n to: (\n g: AsyncGenerator<T, TReturn, TNext>,\n s: S,\n ...args: A\n ) => AsyncGenerator<U, UReturn, UNext>,\n generator: AsyncGenerator<T, TReturn, TNext>,\n startSetup: () => Promise<S>,\n signal: AbortSignal | undefined,\n ...args: A\n) {\n const gen = new AsyncGeneratorWithSetup({\n generator,\n startSetup,\n signal,\n });\n const setup = await gen.setup;\n return { output: to(gen, setup, ...args), setup };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stream.cjs","names":["AsyncLocalStorageProviderSingleton","pickRunnableConfigKeys","raceWithSignal"],"sources":["../../src/utils/stream.ts"],"sourcesContent":["import { pickRunnableConfigKeys } from \"../runnables/config.js\";\nimport { AsyncLocalStorageProviderSingleton } from \"../singletons/index.js\";\nimport type { IterableReadableStreamInterface } from \"../types/_internal.js\";\nimport { raceWithSignal } from \"./signal.js\";\n\n// Re-exported for backwards compatibility\n// Do NOT import this type from this file inside the project. Instead, always import from `types/_internal.js`\n// when using internally\nexport type { IterableReadableStreamInterface };\n\n/*\n * Support async iterator syntax for ReadableStreams in all environments.\n * Source: https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport class IterableReadableStream<T>\n extends ReadableStream<T>\n implements IterableReadableStreamInterface<T>\n{\n public reader: ReadableStreamDefaultReader<T>;\n\n ensureReader() {\n if (!this.reader) {\n this.reader = this.getReader();\n }\n }\n\n async next(): Promise<IteratorResult<T>> {\n this.ensureReader();\n try {\n const result = await this.reader.read();\n if (result.done) {\n this.reader.releaseLock(); // release lock when stream becomes closed\n return {\n done: true,\n value: undefined,\n };\n } else {\n return {\n done: false,\n value: result.value,\n };\n }\n } catch (e) {\n this.reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n }\n\n async return(): Promise<IteratorResult<T>> {\n this.ensureReader();\n // If wrapped in a Node stream, cancel is already called.\n if (this.locked) {\n const cancelPromise = this.reader.cancel(); // cancel first, but don't await yet\n this.reader.releaseLock(); // release lock first\n await cancelPromise; // now await it\n }\n return { done: true, value: undefined };\n }\n\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n async throw(e: any): Promise<IteratorResult<T>> {\n this.ensureReader();\n if (this.locked) {\n const cancelPromise = this.reader.cancel(); // cancel first, but don't await yet\n this.reader.releaseLock(); // release lock first\n await cancelPromise; // now await it\n }\n throw e;\n }\n\n [Symbol.asyncIterator]() {\n return this;\n }\n\n // oxlint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore Not present in Node 18 types, required in latest Node 22\n async [Symbol.asyncDispose]() {\n await this.return();\n }\n\n static fromReadableStream<T>(stream: ReadableStream<T>) {\n // From https://developer.mozilla.org/en-US/docs/Web/API/Streams_API/Using_readable_streams#reading_the_stream\n const reader = stream.getReader();\n return new IterableReadableStream<T>({\n start(controller) {\n return pump();\n function pump(): Promise<T | undefined> {\n return reader.read().then(({ done, value }) => {\n // When no more data needs to be consumed, close the stream\n if (done) {\n controller.close();\n return;\n }\n // Enqueue the next data chunk into our target stream\n controller.enqueue(value);\n return pump();\n });\n }\n },\n cancel() {\n reader.releaseLock();\n },\n });\n }\n\n static fromAsyncGenerator<T>(generator: AsyncGenerator<T>) {\n return new IterableReadableStream<T>({\n async pull(controller) {\n const { value, done } = await generator.next();\n // When no more data needs to be consumed, close the stream\n if (done) {\n controller.close();\n }\n // Fix: `else if (value)` will hang the streaming when nullish value (e.g. empty string) is pulled\n controller.enqueue(value);\n },\n async cancel(reason) {\n await generator.return(reason);\n },\n });\n }\n}\n\nexport function atee<T>(\n iter: AsyncGenerator<T>,\n length = 2\n): AsyncGenerator<T>[] {\n const buffers = Array.from(\n { length },\n () => [] as Array<IteratorResult<T> | IteratorReturnResult<T>>\n );\n return buffers.map(async function* makeIter(buffer) {\n while (true) {\n if (buffer.length === 0) {\n const result = await iter.next();\n for (const buffer of buffers) {\n buffer.push(result);\n }\n } else if (buffer[0].done) {\n return;\n } else {\n yield buffer.shift()!.value;\n }\n }\n });\n}\n\nexport function concat<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Array<any> | string | number | Record<string, any> | any,\n>(first: T, second: T): T {\n if (Array.isArray(first) && Array.isArray(second)) {\n return first.concat(second) as T;\n } else if (typeof first === \"string\" && typeof second === \"string\") {\n return (first + second) as T;\n } else if (typeof first === \"number\" && typeof second === \"number\") {\n return (first + second) as T;\n } else if (\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n \"concat\" in (first as any) &&\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n typeof (first as any).concat === \"function\"\n ) {\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n return (first as any).concat(second) as T;\n } else if (typeof first === \"object\" && typeof second === \"object\") {\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n const chunk = { ...first } as Record<string, any>;\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n for (const [key, value] of Object.entries(second as Record<string, any>)) {\n if (key in chunk && !Array.isArray(chunk[key])) {\n chunk[key] = concat(chunk[key], value);\n } else {\n chunk[key] = value;\n }\n }\n return chunk as T;\n } else {\n throw new Error(`Cannot concat ${typeof first} and ${typeof second}`);\n }\n}\n\nexport class AsyncGeneratorWithSetup<\n S = unknown,\n T = unknown,\n TReturn = unknown,\n TNext = unknown,\n> implements AsyncGenerator<T, TReturn, TNext> {\n private generator: AsyncGenerator<T>;\n\n public setup: Promise<S>;\n\n public config?: unknown;\n\n public signal?: AbortSignal;\n\n private firstResult: Promise<IteratorResult<T>>;\n\n private firstResultUsed = false;\n\n constructor(params: {\n generator: AsyncGenerator<T>;\n startSetup?: () => Promise<S>;\n config?: unknown;\n signal?: AbortSignal;\n }) {\n this.generator = params.generator;\n this.config = params.config;\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n this.signal = params.signal ?? (this.config as any)?.signal;\n // setup is a promise that resolves only after the first iterator value\n // is available. this is useful when setup of several piped generators\n // needs to happen in logical order, ie. in the order in which input to\n // to each generator is available.\n this.setup = new Promise((resolve, reject) => {\n // oxlint-disable-next-line no-void\n void AsyncLocalStorageProviderSingleton.runWithConfig(\n pickRunnableConfigKeys(\n params.config as Record<string, unknown> | undefined\n ),\n async () => {\n // Abort the first read too so timeouts can stop streams before the\n // first chunk is available.\n this.firstResult = this.signal\n ? raceWithSignal(params.generator.next(), this.signal)\n : params.generator.next();\n if (params.startSetup) {\n this.firstResult.then(params.startSetup).then(resolve, reject);\n } else {\n this.firstResult.then((_result) => resolve(undefined as S), reject);\n }\n },\n true\n );\n });\n }\n\n async next(...args: [] | [TNext]): Promise<IteratorResult<T>> {\n this.signal?.throwIfAborted();\n\n if (!this.firstResultUsed) {\n this.firstResultUsed = true;\n return this.firstResult;\n }\n\n return AsyncLocalStorageProviderSingleton.runWithConfig(\n pickRunnableConfigKeys(\n this.config as Record<string, unknown> | undefined\n ),\n this.signal\n ? async () => {\n return raceWithSignal(this.generator.next(...args), this.signal);\n }\n : async () => {\n return this.generator.next(...args);\n },\n true\n );\n }\n\n async return(\n value?: TReturn | PromiseLike<TReturn>\n ): Promise<IteratorResult<T>> {\n return this.generator.return(value);\n }\n\n async throw(e: Error): Promise<IteratorResult<T>> {\n return this.generator.throw(e);\n }\n\n [Symbol.asyncIterator]() {\n return this;\n }\n\n // oxlint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore Not present in Node 18 types, required in latest Node 22\n async [Symbol.asyncDispose]() {\n await this.return();\n }\n}\n\nexport async function pipeGeneratorWithSetup<\n S,\n A extends unknown[],\n T,\n TReturn,\n TNext,\n U,\n UReturn,\n UNext,\n>(\n to: (\n g: AsyncGenerator<T, TReturn, TNext>,\n s: S,\n ...args: A\n ) => AsyncGenerator<U, UReturn, UNext>,\n generator: AsyncGenerator<T, TReturn, TNext>,\n startSetup: () => Promise<S>,\n signal: AbortSignal | undefined,\n ...args: A\n) {\n const gen = new AsyncGeneratorWithSetup({\n generator,\n startSetup,\n signal,\n });\n const setup = await gen.setup;\n return { output: to(gen, setup, ...args), setup };\n}\n"],"mappings":"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"}
|
package/dist/utils/stream.d.cts
CHANGED
|
@@ -2,19 +2,20 @@ import { IterableReadableStreamInterface } from "../types/_internal.cjs";
|
|
|
2
2
|
|
|
3
3
|
//#region src/utils/stream.d.ts
|
|
4
4
|
declare class IterableReadableStream<T> extends ReadableStream<T> implements IterableReadableStreamInterface<T> {
|
|
5
|
+
[Symbol.asyncDispose]: () => Promise<void>;
|
|
5
6
|
reader: ReadableStreamDefaultReader<T>;
|
|
6
7
|
ensureReader(): void;
|
|
7
8
|
next(): Promise<IteratorResult<T>>;
|
|
8
9
|
return(): Promise<IteratorResult<T>>;
|
|
9
10
|
throw(e: any): Promise<IteratorResult<T>>;
|
|
10
11
|
[Symbol.asyncIterator](): this;
|
|
11
|
-
[Symbol.asyncDispose](): Promise<void>;
|
|
12
12
|
static fromReadableStream<T>(stream: ReadableStream<T>): IterableReadableStream<T>;
|
|
13
13
|
static fromAsyncGenerator<T>(generator: AsyncGenerator<T>): IterableReadableStream<T>;
|
|
14
14
|
}
|
|
15
15
|
declare function atee<T>(iter: AsyncGenerator<T>, length?: number): AsyncGenerator<T>[];
|
|
16
16
|
declare function concat<T extends Array<any> | string | number | Record<string, any> | any>(first: T, second: T): T;
|
|
17
17
|
declare class AsyncGeneratorWithSetup<S = unknown, T = unknown, TReturn = unknown, TNext = unknown> implements AsyncGenerator<T, TReturn, TNext> {
|
|
18
|
+
[Symbol.asyncDispose]: () => Promise<void>;
|
|
18
19
|
private generator;
|
|
19
20
|
setup: Promise<S>;
|
|
20
21
|
config?: unknown;
|
|
@@ -31,7 +32,6 @@ declare class AsyncGeneratorWithSetup<S = unknown, T = unknown, TReturn = unknow
|
|
|
31
32
|
return(value?: TReturn | PromiseLike<TReturn>): Promise<IteratorResult<T>>;
|
|
32
33
|
throw(e: Error): Promise<IteratorResult<T>>;
|
|
33
34
|
[Symbol.asyncIterator](): this;
|
|
34
|
-
[Symbol.asyncDispose](): Promise<void>;
|
|
35
35
|
}
|
|
36
36
|
declare function pipeGeneratorWithSetup<S, A extends unknown[], T, TReturn, TNext, U, UReturn, UNext>(to: (g: AsyncGenerator<T, TReturn, TNext>, s: S, ...args: A) => AsyncGenerator<U, UReturn, UNext>, generator: AsyncGenerator<T, TReturn, TNext>, startSetup: () => Promise<S>, signal: AbortSignal | undefined, ...args: A): Promise<{
|
|
37
37
|
output: AsyncGenerator<U, UReturn, UNext>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.d.cts","names":[],"sources":["../../src/utils/stream.ts"],"mappings":";;;cAca,sBAAA,YACH,cAAA,CAAe,CAAA,aACZ,+BAAA,CAAgC,CAAA;
|
|
1
|
+
{"version":3,"file":"stream.d.cts","names":[],"sources":["../../src/utils/stream.ts"],"mappings":";;;cAca,sBAAA,YACH,cAAA,CAAe,CAAA,aACZ,+BAAA,CAAgC,CAAA;EAAA,CA4DpC,MAAA,CAAO,YAAA,SAAa,OAAA;EA1DpB,MAAA,EAAQ,2BAAA,CAA4B,CAAA;EAE3C,YAAA,CAAA;EAMM,IAAA,CAAA,GAAQ,OAAA,CAAQ,cAAA,CAAe,CAAA;EAsB/B,MAAA,CAAA,GAAU,OAAA,CAAQ,cAAA,CAAe,CAAA;EAYjC,KAAA,CAAM,CAAA,QAAS,OAAA,CAAQ,cAAA,CAAe,CAAA;EAAA,CAU3C,MAAA,CAAO,aAAA;EAAA,OAUD,kBAAA,GAAA,CAAsB,MAAA,EAAQ,cAAA,CAAe,CAAA,IAAE,sBAAA,CAAA,CAAA;EAAA,OAyB/C,kBAAA,GAAA,CAAsB,SAAA,EAAW,cAAA,CAAe,CAAA,IAAE,sBAAA,CAAA,CAAA;AAAA;AAAA,iBAkB3C,IAAA,GAAA,CACd,IAAA,EAAM,cAAA,CAAe,CAAA,GACrB,MAAA,YACC,cAAA,CAAe,CAAA;AAAA,iBAqBF,MAAA,WAEJ,KAAA,0BAA+B,MAAA,oBAAA,CACzC,KAAA,EAAO,CAAA,EAAG,MAAA,EAAQ,CAAA,GAAI,CAAA;AAAA,cAgCX,uBAAA,0EAKA,cAAA,CAAe,CAAA,EAAG,OAAA,EAAS,KAAA;EAAA,CAyF/B,MAAA,CAAO,YAAA,SAAa,OAAA;EAAA,QAxFnB,SAAA;EAED,KAAA,EAAO,OAAA,CAAQ,CAAA;EAEf,MAAA;EAEA,MAAA,GAAS,WAAA;EAAA,QAER,WAAA;EAAA,QAEA,eAAA;EAER,WAAA,CAAY,MAAA;IACV,SAAA,EAAW,cAAA,CAAe,CAAA;IAC1B,UAAA,SAAmB,OAAA,CAAQ,CAAA;IAC3B,MAAA;IACA,MAAA,GAAS,WAAA;EAAA;EAiCL,IAAA,CAAA,GAAQ,IAAA,QAAY,KAAA,IAAS,OAAA,CAAQ,cAAA,CAAe,CAAA;EAuBpD,MAAA,CACJ,KAAA,GAAQ,OAAA,GAAU,WAAA,CAAY,OAAA,IAC7B,OAAA,CAAQ,cAAA,CAAe,CAAA;EAIpB,KAAA,CAAM,CAAA,EAAG,KAAA,GAAQ,OAAA,CAAQ,cAAA,CAAe,CAAA;EAAA,CAI7C,MAAA,CAAO,aAAA;AAAA;AAAA,iBAWY,sBAAA,8DAAA,CAUpB,EAAA,GACE,CAAA,EAAG,cAAA,CAAe,CAAA,EAAG,OAAA,EAAS,KAAA,GAC9B,CAAA,EAAG,CAAA,KACA,IAAA,EAAM,CAAA,KACN,cAAA,CAAe,CAAA,EAAG,OAAA,EAAS,KAAA,GAChC,SAAA,EAAW,cAAA,CAAe,CAAA,EAAG,OAAA,EAAS,KAAA,GACtC,UAAA,QAAkB,OAAA,CAAQ,CAAA,GAC1B,MAAA,EAAQ,WAAA,iBACL,IAAA,EAAM,CAAA,GAAC,OAAA"}
|
package/dist/utils/stream.d.ts
CHANGED
|
@@ -2,19 +2,20 @@ import { IterableReadableStreamInterface } from "../types/_internal.js";
|
|
|
2
2
|
|
|
3
3
|
//#region src/utils/stream.d.ts
|
|
4
4
|
declare class IterableReadableStream<T> extends ReadableStream<T> implements IterableReadableStreamInterface<T> {
|
|
5
|
+
[Symbol.asyncDispose]: () => Promise<void>;
|
|
5
6
|
reader: ReadableStreamDefaultReader<T>;
|
|
6
7
|
ensureReader(): void;
|
|
7
8
|
next(): Promise<IteratorResult<T>>;
|
|
8
9
|
return(): Promise<IteratorResult<T>>;
|
|
9
10
|
throw(e: any): Promise<IteratorResult<T>>;
|
|
10
11
|
[Symbol.asyncIterator](): this;
|
|
11
|
-
[Symbol.asyncDispose](): Promise<void>;
|
|
12
12
|
static fromReadableStream<T>(stream: ReadableStream<T>): IterableReadableStream<T>;
|
|
13
13
|
static fromAsyncGenerator<T>(generator: AsyncGenerator<T>): IterableReadableStream<T>;
|
|
14
14
|
}
|
|
15
15
|
declare function atee<T>(iter: AsyncGenerator<T>, length?: number): AsyncGenerator<T>[];
|
|
16
16
|
declare function concat<T extends Array<any> | string | number | Record<string, any> | any>(first: T, second: T): T;
|
|
17
17
|
declare class AsyncGeneratorWithSetup<S = unknown, T = unknown, TReturn = unknown, TNext = unknown> implements AsyncGenerator<T, TReturn, TNext> {
|
|
18
|
+
[Symbol.asyncDispose]: () => Promise<void>;
|
|
18
19
|
private generator;
|
|
19
20
|
setup: Promise<S>;
|
|
20
21
|
config?: unknown;
|
|
@@ -31,7 +32,6 @@ declare class AsyncGeneratorWithSetup<S = unknown, T = unknown, TReturn = unknow
|
|
|
31
32
|
return(value?: TReturn | PromiseLike<TReturn>): Promise<IteratorResult<T>>;
|
|
32
33
|
throw(e: Error): Promise<IteratorResult<T>>;
|
|
33
34
|
[Symbol.asyncIterator](): this;
|
|
34
|
-
[Symbol.asyncDispose](): Promise<void>;
|
|
35
35
|
}
|
|
36
36
|
declare function pipeGeneratorWithSetup<S, A extends unknown[], T, TReturn, TNext, U, UReturn, UNext>(to: (g: AsyncGenerator<T, TReturn, TNext>, s: S, ...args: A) => AsyncGenerator<U, UReturn, UNext>, generator: AsyncGenerator<T, TReturn, TNext>, startSetup: () => Promise<S>, signal: AbortSignal | undefined, ...args: A): Promise<{
|
|
37
37
|
output: AsyncGenerator<U, UReturn, UNext>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.d.ts","names":[],"sources":["../../src/utils/stream.ts"],"mappings":";;;cAca,sBAAA,YACH,cAAA,CAAe,CAAA,aACZ,+BAAA,CAAgC,CAAA;
|
|
1
|
+
{"version":3,"file":"stream.d.ts","names":[],"sources":["../../src/utils/stream.ts"],"mappings":";;;cAca,sBAAA,YACH,cAAA,CAAe,CAAA,aACZ,+BAAA,CAAgC,CAAA;EAAA,CA4DpC,MAAA,CAAO,YAAA,SAAa,OAAA;EA1DpB,MAAA,EAAQ,2BAAA,CAA4B,CAAA;EAE3C,YAAA,CAAA;EAMM,IAAA,CAAA,GAAQ,OAAA,CAAQ,cAAA,CAAe,CAAA;EAsB/B,MAAA,CAAA,GAAU,OAAA,CAAQ,cAAA,CAAe,CAAA;EAYjC,KAAA,CAAM,CAAA,QAAS,OAAA,CAAQ,cAAA,CAAe,CAAA;EAAA,CAU3C,MAAA,CAAO,aAAA;EAAA,OAUD,kBAAA,GAAA,CAAsB,MAAA,EAAQ,cAAA,CAAe,CAAA,IAAE,sBAAA,CAAA,CAAA;EAAA,OAyB/C,kBAAA,GAAA,CAAsB,SAAA,EAAW,cAAA,CAAe,CAAA,IAAE,sBAAA,CAAA,CAAA;AAAA;AAAA,iBAkB3C,IAAA,GAAA,CACd,IAAA,EAAM,cAAA,CAAe,CAAA,GACrB,MAAA,YACC,cAAA,CAAe,CAAA;AAAA,iBAqBF,MAAA,WAEJ,KAAA,0BAA+B,MAAA,oBAAA,CACzC,KAAA,EAAO,CAAA,EAAG,MAAA,EAAQ,CAAA,GAAI,CAAA;AAAA,cAgCX,uBAAA,0EAKA,cAAA,CAAe,CAAA,EAAG,OAAA,EAAS,KAAA;EAAA,CAyF/B,MAAA,CAAO,YAAA,SAAa,OAAA;EAAA,QAxFnB,SAAA;EAED,KAAA,EAAO,OAAA,CAAQ,CAAA;EAEf,MAAA;EAEA,MAAA,GAAS,WAAA;EAAA,QAER,WAAA;EAAA,QAEA,eAAA;EAER,WAAA,CAAY,MAAA;IACV,SAAA,EAAW,cAAA,CAAe,CAAA;IAC1B,UAAA,SAAmB,OAAA,CAAQ,CAAA;IAC3B,MAAA;IACA,MAAA,GAAS,WAAA;EAAA;EAiCL,IAAA,CAAA,GAAQ,IAAA,QAAY,KAAA,IAAS,OAAA,CAAQ,cAAA,CAAe,CAAA;EAuBpD,MAAA,CACJ,KAAA,GAAQ,OAAA,GAAU,WAAA,CAAY,OAAA,IAC7B,OAAA,CAAQ,cAAA,CAAe,CAAA;EAIpB,KAAA,CAAM,CAAA,EAAG,KAAA,GAAQ,OAAA,CAAQ,cAAA,CAAe,CAAA;EAAA,CAI7C,MAAA,CAAO,aAAA;AAAA;AAAA,iBAWY,sBAAA,8DAAA,CAUpB,EAAA,GACE,CAAA,EAAG,cAAA,CAAe,CAAA,EAAG,OAAA,EAAS,KAAA,GAC9B,CAAA,EAAG,CAAA,KACA,IAAA,EAAM,CAAA,KACN,cAAA,CAAe,CAAA,EAAG,OAAA,EAAS,KAAA,GAChC,SAAA,EAAW,cAAA,CAAe,CAAA,EAAG,OAAA,EAAS,KAAA,GACtC,UAAA,QAAkB,OAAA,CAAQ,CAAA,GAC1B,MAAA,EAAQ,WAAA,iBACL,IAAA,EAAM,CAAA,GAAC,OAAA"}
|
package/dist/utils/stream.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.js","names":[],"sources":["../../src/utils/stream.ts"],"sourcesContent":["import { pickRunnableConfigKeys } from \"../runnables/config.js\";\nimport { AsyncLocalStorageProviderSingleton } from \"../singletons/index.js\";\nimport type { IterableReadableStreamInterface } from \"../types/_internal.js\";\nimport { raceWithSignal } from \"./signal.js\";\n\n// Re-exported for backwards compatibility\n// Do NOT import this type from this file inside the project. Instead, always import from `types/_internal.js`\n// when using internally\nexport type { IterableReadableStreamInterface };\n\n/*\n * Support async iterator syntax for ReadableStreams in all environments.\n * Source: https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport class IterableReadableStream<T>\n extends ReadableStream<T>\n implements IterableReadableStreamInterface<T>\n{\n public reader: ReadableStreamDefaultReader<T>;\n\n ensureReader() {\n if (!this.reader) {\n this.reader = this.getReader();\n }\n }\n\n async next(): Promise<IteratorResult<T>> {\n this.ensureReader();\n try {\n const result = await this.reader.read();\n if (result.done) {\n this.reader.releaseLock(); // release lock when stream becomes closed\n return {\n done: true,\n value: undefined,\n };\n } else {\n return {\n done: false,\n value: result.value,\n };\n }\n } catch (e) {\n this.reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n }\n\n async return(): Promise<IteratorResult<T>> {\n this.ensureReader();\n // If wrapped in a Node stream, cancel is already called.\n if (this.locked) {\n const cancelPromise = this.reader.cancel(); // cancel first, but don't await yet\n this.reader.releaseLock(); // release lock first\n await cancelPromise; // now await it\n }\n return { done: true, value: undefined };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async throw(e: any): Promise<IteratorResult<T>> {\n this.ensureReader();\n if (this.locked) {\n const cancelPromise = this.reader.cancel(); // cancel first, but don't await yet\n this.reader.releaseLock(); // release lock first\n await cancelPromise; // now await it\n }\n throw e;\n }\n\n [Symbol.asyncIterator]() {\n return this;\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore Not present in Node 18 types, required in latest Node 22\n async [Symbol.asyncDispose]() {\n await this.return();\n }\n\n static fromReadableStream<T>(stream: ReadableStream<T>) {\n // From https://developer.mozilla.org/en-US/docs/Web/API/Streams_API/Using_readable_streams#reading_the_stream\n const reader = stream.getReader();\n return new IterableReadableStream<T>({\n start(controller) {\n return pump();\n function pump(): Promise<T | undefined> {\n return reader.read().then(({ done, value }) => {\n // When no more data needs to be consumed, close the stream\n if (done) {\n controller.close();\n return;\n }\n // Enqueue the next data chunk into our target stream\n controller.enqueue(value);\n return pump();\n });\n }\n },\n cancel() {\n reader.releaseLock();\n },\n });\n }\n\n static fromAsyncGenerator<T>(generator: AsyncGenerator<T>) {\n return new IterableReadableStream<T>({\n async pull(controller) {\n const { value, done } = await generator.next();\n // When no more data needs to be consumed, close the stream\n if (done) {\n controller.close();\n }\n // Fix: `else if (value)` will hang the streaming when nullish value (e.g. empty string) is pulled\n controller.enqueue(value);\n },\n async cancel(reason) {\n await generator.return(reason);\n },\n });\n }\n}\n\nexport function atee<T>(\n iter: AsyncGenerator<T>,\n length = 2\n): AsyncGenerator<T>[] {\n const buffers = Array.from(\n { length },\n () => [] as Array<IteratorResult<T> | IteratorReturnResult<T>>\n );\n return buffers.map(async function* makeIter(buffer) {\n while (true) {\n if (buffer.length === 0) {\n const result = await iter.next();\n for (const buffer of buffers) {\n buffer.push(result);\n }\n } else if (buffer[0].done) {\n return;\n } else {\n yield buffer.shift()!.value;\n }\n }\n });\n}\n\nexport function concat<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Array<any> | string | number | Record<string, any> | any,\n>(first: T, second: T): T {\n if (Array.isArray(first) && Array.isArray(second)) {\n return first.concat(second) as T;\n } else if (typeof first === \"string\" && typeof second === \"string\") {\n return (first + second) as T;\n } else if (typeof first === \"number\" && typeof second === \"number\") {\n return (first + second) as T;\n } else if (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n \"concat\" in (first as any) &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n typeof (first as any).concat === \"function\"\n ) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (first as any).concat(second) as T;\n } else if (typeof first === \"object\" && typeof second === \"object\") {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const chunk = { ...first } as Record<string, any>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n for (const [key, value] of Object.entries(second as Record<string, any>)) {\n if (key in chunk && !Array.isArray(chunk[key])) {\n chunk[key] = concat(chunk[key], value);\n } else {\n chunk[key] = value;\n }\n }\n return chunk as T;\n } else {\n throw new Error(`Cannot concat ${typeof first} and ${typeof second}`);\n }\n}\n\nexport class AsyncGeneratorWithSetup<\n S = unknown,\n T = unknown,\n TReturn = unknown,\n TNext = unknown,\n> implements AsyncGenerator<T, TReturn, TNext> {\n private generator: AsyncGenerator<T>;\n\n public setup: Promise<S>;\n\n public config?: unknown;\n\n public signal?: AbortSignal;\n\n private firstResult: Promise<IteratorResult<T>>;\n\n private firstResultUsed = false;\n\n constructor(params: {\n generator: AsyncGenerator<T>;\n startSetup?: () => Promise<S>;\n config?: unknown;\n signal?: AbortSignal;\n }) {\n this.generator = params.generator;\n this.config = params.config;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.signal = params.signal ?? (this.config as any)?.signal;\n // setup is a promise that resolves only after the first iterator value\n // is available. this is useful when setup of several piped generators\n // needs to happen in logical order, ie. in the order in which input to\n // to each generator is available.\n this.setup = new Promise((resolve, reject) => {\n // eslint-disable-next-line no-void\n void AsyncLocalStorageProviderSingleton.runWithConfig(\n pickRunnableConfigKeys(\n params.config as Record<string, unknown> | undefined\n ),\n async () => {\n // Abort the first read too so timeouts can stop streams before the\n // first chunk is available.\n this.firstResult = this.signal\n ? raceWithSignal(params.generator.next(), this.signal)\n : params.generator.next();\n if (params.startSetup) {\n this.firstResult.then(params.startSetup).then(resolve, reject);\n } else {\n this.firstResult.then((_result) => resolve(undefined as S), reject);\n }\n },\n true\n );\n });\n }\n\n async next(...args: [] | [TNext]): Promise<IteratorResult<T>> {\n this.signal?.throwIfAborted();\n\n if (!this.firstResultUsed) {\n this.firstResultUsed = true;\n return this.firstResult;\n }\n\n return AsyncLocalStorageProviderSingleton.runWithConfig(\n pickRunnableConfigKeys(\n this.config as Record<string, unknown> | undefined\n ),\n this.signal\n ? async () => {\n return raceWithSignal(this.generator.next(...args), this.signal);\n }\n : async () => {\n return this.generator.next(...args);\n },\n true\n );\n }\n\n async return(\n value?: TReturn | PromiseLike<TReturn>\n ): Promise<IteratorResult<T>> {\n return this.generator.return(value);\n }\n\n async throw(e: Error): Promise<IteratorResult<T>> {\n return this.generator.throw(e);\n }\n\n [Symbol.asyncIterator]() {\n return this;\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore Not present in Node 18 types, required in latest Node 22\n async [Symbol.asyncDispose]() {\n await this.return();\n }\n}\n\nexport async function pipeGeneratorWithSetup<\n S,\n A extends unknown[],\n T,\n TReturn,\n TNext,\n U,\n UReturn,\n UNext,\n>(\n to: (\n g: AsyncGenerator<T, TReturn, TNext>,\n s: S,\n ...args: A\n ) => AsyncGenerator<U, UReturn, UNext>,\n generator: AsyncGenerator<T, TReturn, TNext>,\n startSetup: () => Promise<S>,\n signal: AbortSignal | undefined,\n ...args: A\n) {\n const gen = new AsyncGeneratorWithSetup({\n generator,\n startSetup,\n signal,\n });\n const setup = await gen.setup;\n return { output: to(gen, setup, ...args), setup };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stream.js","names":[],"sources":["../../src/utils/stream.ts"],"sourcesContent":["import { pickRunnableConfigKeys } from \"../runnables/config.js\";\nimport { AsyncLocalStorageProviderSingleton } from \"../singletons/index.js\";\nimport type { IterableReadableStreamInterface } from \"../types/_internal.js\";\nimport { raceWithSignal } from \"./signal.js\";\n\n// Re-exported for backwards compatibility\n// Do NOT import this type from this file inside the project. Instead, always import from `types/_internal.js`\n// when using internally\nexport type { IterableReadableStreamInterface };\n\n/*\n * Support async iterator syntax for ReadableStreams in all environments.\n * Source: https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport class IterableReadableStream<T>\n extends ReadableStream<T>\n implements IterableReadableStreamInterface<T>\n{\n public reader: ReadableStreamDefaultReader<T>;\n\n ensureReader() {\n if (!this.reader) {\n this.reader = this.getReader();\n }\n }\n\n async next(): Promise<IteratorResult<T>> {\n this.ensureReader();\n try {\n const result = await this.reader.read();\n if (result.done) {\n this.reader.releaseLock(); // release lock when stream becomes closed\n return {\n done: true,\n value: undefined,\n };\n } else {\n return {\n done: false,\n value: result.value,\n };\n }\n } catch (e) {\n this.reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n }\n\n async return(): Promise<IteratorResult<T>> {\n this.ensureReader();\n // If wrapped in a Node stream, cancel is already called.\n if (this.locked) {\n const cancelPromise = this.reader.cancel(); // cancel first, but don't await yet\n this.reader.releaseLock(); // release lock first\n await cancelPromise; // now await it\n }\n return { done: true, value: undefined };\n }\n\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n async throw(e: any): Promise<IteratorResult<T>> {\n this.ensureReader();\n if (this.locked) {\n const cancelPromise = this.reader.cancel(); // cancel first, but don't await yet\n this.reader.releaseLock(); // release lock first\n await cancelPromise; // now await it\n }\n throw e;\n }\n\n [Symbol.asyncIterator]() {\n return this;\n }\n\n // oxlint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore Not present in Node 18 types, required in latest Node 22\n async [Symbol.asyncDispose]() {\n await this.return();\n }\n\n static fromReadableStream<T>(stream: ReadableStream<T>) {\n // From https://developer.mozilla.org/en-US/docs/Web/API/Streams_API/Using_readable_streams#reading_the_stream\n const reader = stream.getReader();\n return new IterableReadableStream<T>({\n start(controller) {\n return pump();\n function pump(): Promise<T | undefined> {\n return reader.read().then(({ done, value }) => {\n // When no more data needs to be consumed, close the stream\n if (done) {\n controller.close();\n return;\n }\n // Enqueue the next data chunk into our target stream\n controller.enqueue(value);\n return pump();\n });\n }\n },\n cancel() {\n reader.releaseLock();\n },\n });\n }\n\n static fromAsyncGenerator<T>(generator: AsyncGenerator<T>) {\n return new IterableReadableStream<T>({\n async pull(controller) {\n const { value, done } = await generator.next();\n // When no more data needs to be consumed, close the stream\n if (done) {\n controller.close();\n }\n // Fix: `else if (value)` will hang the streaming when nullish value (e.g. empty string) is pulled\n controller.enqueue(value);\n },\n async cancel(reason) {\n await generator.return(reason);\n },\n });\n }\n}\n\nexport function atee<T>(\n iter: AsyncGenerator<T>,\n length = 2\n): AsyncGenerator<T>[] {\n const buffers = Array.from(\n { length },\n () => [] as Array<IteratorResult<T> | IteratorReturnResult<T>>\n );\n return buffers.map(async function* makeIter(buffer) {\n while (true) {\n if (buffer.length === 0) {\n const result = await iter.next();\n for (const buffer of buffers) {\n buffer.push(result);\n }\n } else if (buffer[0].done) {\n return;\n } else {\n yield buffer.shift()!.value;\n }\n }\n });\n}\n\nexport function concat<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Array<any> | string | number | Record<string, any> | any,\n>(first: T, second: T): T {\n if (Array.isArray(first) && Array.isArray(second)) {\n return first.concat(second) as T;\n } else if (typeof first === \"string\" && typeof second === \"string\") {\n return (first + second) as T;\n } else if (typeof first === \"number\" && typeof second === \"number\") {\n return (first + second) as T;\n } else if (\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n \"concat\" in (first as any) &&\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n typeof (first as any).concat === \"function\"\n ) {\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n return (first as any).concat(second) as T;\n } else if (typeof first === \"object\" && typeof second === \"object\") {\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n const chunk = { ...first } as Record<string, any>;\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n for (const [key, value] of Object.entries(second as Record<string, any>)) {\n if (key in chunk && !Array.isArray(chunk[key])) {\n chunk[key] = concat(chunk[key], value);\n } else {\n chunk[key] = value;\n }\n }\n return chunk as T;\n } else {\n throw new Error(`Cannot concat ${typeof first} and ${typeof second}`);\n }\n}\n\nexport class AsyncGeneratorWithSetup<\n S = unknown,\n T = unknown,\n TReturn = unknown,\n TNext = unknown,\n> implements AsyncGenerator<T, TReturn, TNext> {\n private generator: AsyncGenerator<T>;\n\n public setup: Promise<S>;\n\n public config?: unknown;\n\n public signal?: AbortSignal;\n\n private firstResult: Promise<IteratorResult<T>>;\n\n private firstResultUsed = false;\n\n constructor(params: {\n generator: AsyncGenerator<T>;\n startSetup?: () => Promise<S>;\n config?: unknown;\n signal?: AbortSignal;\n }) {\n this.generator = params.generator;\n this.config = params.config;\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n this.signal = params.signal ?? (this.config as any)?.signal;\n // setup is a promise that resolves only after the first iterator value\n // is available. this is useful when setup of several piped generators\n // needs to happen in logical order, ie. in the order in which input to\n // to each generator is available.\n this.setup = new Promise((resolve, reject) => {\n // oxlint-disable-next-line no-void\n void AsyncLocalStorageProviderSingleton.runWithConfig(\n pickRunnableConfigKeys(\n params.config as Record<string, unknown> | undefined\n ),\n async () => {\n // Abort the first read too so timeouts can stop streams before the\n // first chunk is available.\n this.firstResult = this.signal\n ? raceWithSignal(params.generator.next(), this.signal)\n : params.generator.next();\n if (params.startSetup) {\n this.firstResult.then(params.startSetup).then(resolve, reject);\n } else {\n this.firstResult.then((_result) => resolve(undefined as S), reject);\n }\n },\n true\n );\n });\n }\n\n async next(...args: [] | [TNext]): Promise<IteratorResult<T>> {\n this.signal?.throwIfAborted();\n\n if (!this.firstResultUsed) {\n this.firstResultUsed = true;\n return this.firstResult;\n }\n\n return AsyncLocalStorageProviderSingleton.runWithConfig(\n pickRunnableConfigKeys(\n this.config as Record<string, unknown> | undefined\n ),\n this.signal\n ? async () => {\n return raceWithSignal(this.generator.next(...args), this.signal);\n }\n : async () => {\n return this.generator.next(...args);\n },\n true\n );\n }\n\n async return(\n value?: TReturn | PromiseLike<TReturn>\n ): Promise<IteratorResult<T>> {\n return this.generator.return(value);\n }\n\n async throw(e: Error): Promise<IteratorResult<T>> {\n return this.generator.throw(e);\n }\n\n [Symbol.asyncIterator]() {\n return this;\n }\n\n // oxlint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore Not present in Node 18 types, required in latest Node 22\n async [Symbol.asyncDispose]() {\n await this.return();\n }\n}\n\nexport async function pipeGeneratorWithSetup<\n S,\n A extends unknown[],\n T,\n TReturn,\n TNext,\n U,\n UReturn,\n UNext,\n>(\n to: (\n g: AsyncGenerator<T, TReturn, TNext>,\n s: S,\n ...args: A\n ) => AsyncGenerator<U, UReturn, UNext>,\n generator: AsyncGenerator<T, TReturn, TNext>,\n startSetup: () => Promise<S>,\n signal: AbortSignal | undefined,\n ...args: A\n) {\n const gen = new AsyncGeneratorWithSetup({\n generator,\n startSetup,\n signal,\n });\n const setup = await gen.setup;\n return { output: to(gen, setup, ...args), setup };\n}\n"],"mappings":"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"}
|