beeai-framework 0.1.2 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -130
- package/dist/adapters/amazon-bedrock/backend/chat.cjs.map +1 -1
- package/dist/adapters/amazon-bedrock/backend/chat.js.map +1 -1
- package/dist/adapters/amazon-bedrock/backend/client.cjs.map +1 -1
- package/dist/adapters/amazon-bedrock/backend/client.js.map +1 -1
- package/dist/adapters/amazon-bedrock/backend/embedding.cjs.map +1 -1
- package/dist/adapters/amazon-bedrock/backend/embedding.js.map +1 -1
- package/dist/adapters/anthropic/backend/chat.cjs.map +1 -1
- package/dist/adapters/anthropic/backend/chat.js.map +1 -1
- package/dist/adapters/anthropic/backend/client.cjs.map +1 -1
- package/dist/adapters/anthropic/backend/client.js.map +1 -1
- package/dist/adapters/anthropic/backend/embedding.cjs.map +1 -1
- package/dist/adapters/anthropic/backend/embedding.js.map +1 -1
- package/dist/adapters/azure-openai/backend/chat.cjs.map +1 -1
- package/dist/adapters/azure-openai/backend/chat.d.cts +1 -1
- package/dist/adapters/azure-openai/backend/chat.d.ts +1 -1
- package/dist/adapters/azure-openai/backend/chat.js.map +1 -1
- package/dist/adapters/azure-openai/backend/client.cjs.map +1 -1
- package/dist/adapters/azure-openai/backend/client.js.map +1 -1
- package/dist/adapters/azure-openai/backend/embedding.cjs.map +1 -1
- package/dist/adapters/azure-openai/backend/embedding.js.map +1 -1
- package/dist/adapters/dummy/backend/chat.cjs.map +1 -1
- package/dist/adapters/dummy/backend/chat.js.map +1 -1
- package/dist/adapters/dummy/backend/embedding.cjs.map +1 -1
- package/dist/adapters/dummy/backend/embedding.js.map +1 -1
- package/dist/adapters/google-vertex/backend/chat.cjs.map +1 -1
- package/dist/adapters/google-vertex/backend/chat.js.map +1 -1
- package/dist/adapters/google-vertex/backend/client.cjs.map +1 -1
- package/dist/adapters/google-vertex/backend/client.js.map +1 -1
- package/dist/adapters/google-vertex/backend/embedding.cjs.map +1 -1
- package/dist/adapters/google-vertex/backend/embedding.js.map +1 -1
- package/dist/adapters/groq/backend/chat.cjs.map +1 -1
- package/dist/adapters/groq/backend/chat.js.map +1 -1
- package/dist/adapters/groq/backend/client.cjs +3 -3
- package/dist/adapters/groq/backend/client.cjs.map +1 -1
- package/dist/adapters/groq/backend/client.d.cts +1 -1
- package/dist/adapters/groq/backend/client.d.ts +1 -1
- package/dist/adapters/groq/backend/client.js +3 -3
- package/dist/adapters/groq/backend/client.js.map +1 -1
- package/dist/adapters/groq/backend/embedding.cjs.map +1 -1
- package/dist/adapters/groq/backend/embedding.js.map +1 -1
- package/dist/adapters/langchain/backend/chat.cjs.map +1 -1
- package/dist/adapters/langchain/backend/chat.js.map +1 -1
- package/dist/adapters/langchain/backend/embedding.cjs.map +1 -1
- package/dist/adapters/langchain/backend/embedding.js.map +1 -1
- package/dist/adapters/langchain/tools.cjs.map +1 -1
- package/dist/adapters/langchain/tools.js.map +1 -1
- package/dist/adapters/ollama/backend/chat.cjs.map +1 -1
- package/dist/adapters/ollama/backend/chat.js.map +1 -1
- package/dist/adapters/ollama/backend/client.cjs +3 -3
- package/dist/adapters/ollama/backend/client.cjs.map +1 -1
- package/dist/adapters/ollama/backend/client.d.cts +1 -1
- package/dist/adapters/ollama/backend/client.d.ts +1 -1
- package/dist/adapters/ollama/backend/client.js +3 -3
- package/dist/adapters/ollama/backend/client.js.map +1 -1
- package/dist/adapters/ollama/backend/embedding.cjs.map +1 -1
- package/dist/adapters/ollama/backend/embedding.js.map +1 -1
- package/dist/adapters/openai/backend/chat.cjs.map +1 -1
- package/dist/adapters/openai/backend/chat.js.map +1 -1
- package/dist/adapters/openai/backend/client.cjs.map +1 -1
- package/dist/adapters/openai/backend/client.js.map +1 -1
- package/dist/adapters/openai/backend/embedding.cjs.map +1 -1
- package/dist/adapters/openai/backend/embedding.d.cts +1 -1
- package/dist/adapters/openai/backend/embedding.d.ts +1 -1
- package/dist/adapters/openai/backend/embedding.js.map +1 -1
- package/dist/adapters/vercel/backend/chat.cjs +2 -2
- package/dist/adapters/vercel/backend/chat.cjs.map +1 -1
- package/dist/adapters/vercel/backend/chat.js +2 -2
- package/dist/adapters/vercel/backend/chat.js.map +1 -1
- package/dist/adapters/vercel/backend/embedding.cjs.map +1 -1
- package/dist/adapters/vercel/backend/embedding.d.cts +4 -4
- package/dist/adapters/vercel/backend/embedding.d.ts +4 -4
- package/dist/adapters/vercel/backend/embedding.js.map +1 -1
- package/dist/adapters/watsonx/backend/chat.cjs +4 -7
- package/dist/adapters/watsonx/backend/chat.cjs.map +1 -1
- package/dist/adapters/watsonx/backend/chat.js +4 -7
- package/dist/adapters/watsonx/backend/chat.js.map +1 -1
- package/dist/adapters/watsonx/backend/client.cjs.map +1 -1
- package/dist/adapters/watsonx/backend/client.js.map +1 -1
- package/dist/adapters/watsonx/backend/embedding.cjs.map +1 -1
- package/dist/adapters/watsonx/backend/embedding.js.map +1 -1
- package/dist/{agent-BbaHVlob.d.cts → agent-CtPtFtGb.d.cts} +1 -1
- package/dist/{agent-Bks2fOUl.d.ts → agent-CxoSeic0.d.ts} +1 -1
- package/dist/agents/base.cjs.map +1 -1
- package/dist/agents/base.js.map +1 -1
- package/dist/agents/bee/agent.cjs.map +1 -1
- package/dist/agents/bee/agent.d.cts +1 -1
- package/dist/agents/bee/agent.d.ts +1 -1
- package/dist/agents/bee/agent.js.map +1 -1
- package/dist/agents/bee/prompts.cjs.map +1 -1
- package/dist/agents/bee/prompts.js.map +1 -1
- package/dist/agents/bee/runners/base.cjs.map +1 -1
- package/dist/agents/bee/runners/base.d.cts +1 -1
- package/dist/agents/bee/runners/base.d.ts +1 -1
- package/dist/agents/bee/runners/base.js.map +1 -1
- package/dist/agents/bee/runners/deep-think/prompts.cjs.map +1 -1
- package/dist/agents/bee/runners/deep-think/prompts.js.map +1 -1
- package/dist/agents/bee/runners/deep-think/runner.cjs +11 -11
- package/dist/agents/bee/runners/deep-think/runner.cjs.map +1 -1
- package/dist/agents/bee/runners/deep-think/runner.d.cts +1 -1
- package/dist/agents/bee/runners/deep-think/runner.d.ts +1 -1
- package/dist/agents/bee/runners/deep-think/runner.js +2 -2
- package/dist/agents/bee/runners/deep-think/runner.js.map +1 -1
- package/dist/agents/bee/runners/default/runner.cjs.map +1 -1
- package/dist/agents/bee/runners/default/runner.d.cts +1 -1
- package/dist/agents/bee/runners/default/runner.d.ts +1 -1
- package/dist/agents/bee/runners/default/runner.js +1 -1
- package/dist/agents/bee/runners/default/runner.js.map +1 -1
- package/dist/agents/bee/runners/default/runner.spec.cjs.map +1 -1
- package/dist/agents/bee/runners/default/runner.spec.js.map +1 -1
- package/dist/agents/bee/runners/granite/prompts.cjs.map +1 -1
- package/dist/agents/bee/runners/granite/prompts.js.map +1 -1
- package/dist/agents/bee/runners/granite/runner.cjs +11 -11
- package/dist/agents/bee/runners/granite/runner.cjs.map +1 -1
- package/dist/agents/bee/runners/granite/runner.d.cts +1 -1
- package/dist/agents/bee/runners/granite/runner.d.ts +1 -1
- package/dist/agents/bee/runners/granite/runner.js +2 -2
- package/dist/agents/bee/runners/granite/runner.js.map +1 -1
- package/dist/agents/experimental/replan/agent.cjs.map +1 -1
- package/dist/agents/experimental/replan/agent.js.map +1 -1
- package/dist/agents/experimental/replan/prompts.cjs.map +1 -1
- package/dist/agents/experimental/replan/prompts.js.map +1 -1
- package/dist/agents/experimental/streamlit/agent.cjs.map +1 -1
- package/dist/agents/experimental/streamlit/agent.js.map +1 -1
- package/dist/agents/experimental/streamlit/prompts.cjs.map +1 -1
- package/dist/agents/experimental/streamlit/prompts.js.map +1 -1
- package/dist/backend/backend.cjs.map +1 -1
- package/dist/backend/backend.js.map +1 -1
- package/dist/backend/chat.cjs.map +1 -1
- package/dist/backend/chat.d.cts +1 -1
- package/dist/backend/chat.d.ts +1 -1
- package/dist/backend/chat.js.map +1 -1
- package/dist/backend/client.cjs.map +1 -1
- package/dist/backend/client.js.map +1 -1
- package/dist/backend/constants.cjs.map +1 -1
- package/dist/backend/constants.js.map +1 -1
- package/dist/backend/embedding.cjs.map +1 -1
- package/dist/backend/embedding.d.cts +1 -1
- package/dist/backend/embedding.d.ts +1 -1
- package/dist/backend/embedding.js.map +1 -1
- package/dist/backend/errors.cjs.map +1 -1
- package/dist/backend/errors.js.map +1 -1
- package/dist/backend/message.cjs.map +1 -1
- package/dist/backend/message.js.map +1 -1
- package/dist/backend/utils.cjs.map +1 -1
- package/dist/backend/utils.js.map +1 -1
- package/dist/cache/base.cjs.map +1 -1
- package/dist/cache/base.js.map +1 -1
- package/dist/cache/decoratorCache.cjs.map +1 -1
- package/dist/cache/decoratorCache.js.map +1 -1
- package/dist/cache/fileCache.cjs.map +1 -1
- package/dist/cache/fileCache.js.map +1 -1
- package/dist/cache/nullCache.cjs.map +1 -1
- package/dist/cache/nullCache.js.map +1 -1
- package/dist/cache/slidingCache.cjs.map +1 -1
- package/dist/cache/slidingCache.js.map +1 -1
- package/dist/cache/unconstrainedCache.cjs.map +1 -1
- package/dist/cache/unconstrainedCache.js.map +1 -1
- package/dist/context.cjs.map +1 -1
- package/dist/context.js.map +1 -1
- package/dist/emitter/emitter.cjs.map +1 -1
- package/dist/emitter/emitter.js.map +1 -1
- package/dist/emitter/errors.cjs.map +1 -1
- package/dist/emitter/errors.js.map +1 -1
- package/dist/emitter/utils.cjs.map +1 -1
- package/dist/emitter/utils.js.map +1 -1
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/instrumentation/config.cjs.map +1 -1
- package/dist/instrumentation/config.js.map +1 -1
- package/dist/instrumentation/create-telemetry-middleware.cjs.map +1 -1
- package/dist/instrumentation/create-telemetry-middleware.js.map +1 -1
- package/dist/instrumentation/helpers/create-span.cjs.map +1 -1
- package/dist/instrumentation/helpers/create-span.js.map +1 -1
- package/dist/instrumentation/helpers/get-error-safe.cjs.map +1 -1
- package/dist/instrumentation/helpers/get-error-safe.js.map +1 -1
- package/dist/instrumentation/helpers/get-serialized-object-safe.cjs.map +1 -1
- package/dist/instrumentation/helpers/get-serialized-object-safe.js.map +1 -1
- package/dist/instrumentation/helpers/id-name-manager.cjs.map +1 -1
- package/dist/instrumentation/helpers/id-name-manager.js.map +1 -1
- package/dist/instrumentation/helpers/trace-serializer.cjs.map +1 -1
- package/dist/instrumentation/helpers/trace-serializer.js.map +1 -1
- package/dist/instrumentation/helpers/utils.cjs.map +1 -1
- package/dist/instrumentation/helpers/utils.js.map +1 -1
- package/dist/instrumentation/logger.cjs.map +1 -1
- package/dist/instrumentation/logger.js.map +1 -1
- package/dist/instrumentation/tracer.cjs.map +1 -1
- package/dist/instrumentation/tracer.js.map +1 -1
- package/dist/internals/env.cjs.map +1 -1
- package/dist/internals/env.js.map +1 -1
- package/dist/internals/fetcher.cjs.map +1 -1
- package/dist/internals/fetcher.js.map +1 -1
- package/dist/internals/helpers/array.cjs.map +1 -1
- package/dist/internals/helpers/array.js.map +1 -1
- package/dist/internals/helpers/cancellation.cjs.map +1 -1
- package/dist/internals/helpers/cancellation.js.map +1 -1
- package/dist/internals/helpers/counter.cjs.map +1 -1
- package/dist/internals/helpers/counter.js.map +1 -1
- package/dist/internals/helpers/general.cjs.map +1 -1
- package/dist/internals/helpers/general.js.map +1 -1
- package/dist/internals/helpers/guards.cjs.map +1 -1
- package/dist/internals/helpers/guards.js.map +1 -1
- package/dist/internals/helpers/hash.cjs +5 -3
- package/dist/internals/helpers/hash.cjs.map +1 -1
- package/dist/internals/helpers/hash.js +5 -3
- package/dist/internals/helpers/hash.js.map +1 -1
- package/dist/internals/helpers/map.cjs.map +1 -1
- package/dist/internals/helpers/map.js.map +1 -1
- package/dist/internals/helpers/math.cjs.map +1 -1
- package/dist/internals/helpers/math.js.map +1 -1
- package/dist/internals/helpers/number.cjs.map +1 -1
- package/dist/internals/helpers/number.js.map +1 -1
- package/dist/internals/helpers/object.cjs.map +1 -1
- package/dist/internals/helpers/object.js.map +1 -1
- package/dist/internals/helpers/paginate.cjs.map +1 -1
- package/dist/internals/helpers/paginate.js.map +1 -1
- package/dist/internals/helpers/promise.cjs.map +1 -1
- package/dist/internals/helpers/promise.js.map +1 -1
- package/dist/internals/helpers/prototype.cjs.map +1 -1
- package/dist/internals/helpers/prototype.js.map +1 -1
- package/dist/internals/helpers/retry.cjs.map +1 -1
- package/dist/internals/helpers/retry.js.map +1 -1
- package/dist/internals/helpers/retryable.cjs.map +1 -1
- package/dist/internals/helpers/retryable.js.map +1 -1
- package/dist/internals/helpers/schema.cjs.map +1 -1
- package/dist/internals/helpers/schema.d.cts +1 -1
- package/dist/internals/helpers/schema.d.ts +1 -1
- package/dist/internals/helpers/schema.js.map +1 -1
- package/dist/internals/helpers/stream.cjs.map +1 -1
- package/dist/internals/helpers/stream.js.map +1 -1
- package/dist/internals/helpers/string.cjs.map +1 -1
- package/dist/internals/helpers/string.js.map +1 -1
- package/dist/internals/helpers/weakRef.cjs.map +1 -1
- package/dist/internals/helpers/weakRef.js.map +1 -1
- package/dist/internals/serializable.cjs.map +1 -1
- package/dist/internals/serializable.js.map +1 -1
- package/dist/internals/types.cjs.map +1 -1
- package/dist/internals/types.js.map +1 -1
- package/dist/logger/logger.cjs.map +1 -1
- package/dist/logger/logger.js.map +1 -1
- package/dist/logger/pretty.cjs.map +1 -1
- package/dist/logger/pretty.js.map +1 -1
- package/dist/memory/base.cjs.map +1 -1
- package/dist/memory/base.js.map +1 -1
- package/dist/memory/slidingMemory.cjs.map +1 -1
- package/dist/memory/slidingMemory.js.map +1 -1
- package/dist/memory/summarizeMemory.cjs.map +1 -1
- package/dist/memory/summarizeMemory.js.map +1 -1
- package/dist/memory/tokenMemory.cjs.map +1 -1
- package/dist/memory/tokenMemory.js.map +1 -1
- package/dist/memory/unconstrainedMemory.cjs.map +1 -1
- package/dist/memory/unconstrainedMemory.js.map +1 -1
- package/dist/parsers/errors.cjs.map +1 -1
- package/dist/parsers/errors.js.map +1 -1
- package/dist/parsers/field.cjs.map +1 -1
- package/dist/parsers/field.js.map +1 -1
- package/dist/parsers/linePrefix.cjs.map +1 -1
- package/dist/parsers/linePrefix.d.cts +1 -1
- package/dist/parsers/linePrefix.d.ts +1 -1
- package/dist/parsers/linePrefix.js.map +1 -1
- package/dist/serializer/error.cjs.map +1 -1
- package/dist/serializer/error.js.map +1 -1
- package/dist/serializer/serializer.cjs +3 -3
- package/dist/serializer/serializer.cjs.map +1 -1
- package/dist/serializer/serializer.js +2 -2
- package/dist/serializer/serializer.js.map +1 -1
- package/dist/serializer/utils.cjs.map +1 -1
- package/dist/serializer/utils.js.map +1 -1
- package/dist/template.cjs.map +1 -1
- package/dist/template.d.cts +1 -1
- package/dist/template.d.ts +1 -1
- package/dist/template.js.map +1 -1
- package/dist/tools/arxiv.cjs.map +1 -1
- package/dist/tools/arxiv.d.cts +1 -1
- package/dist/tools/arxiv.d.ts +1 -1
- package/dist/tools/arxiv.js.map +1 -1
- package/dist/tools/base.cjs.map +1 -1
- package/dist/tools/base.d.cts +1 -1
- package/dist/tools/base.d.ts +1 -1
- package/dist/tools/base.js.map +1 -1
- package/dist/tools/calculator.cjs.map +1 -1
- package/dist/tools/calculator.js.map +1 -1
- package/dist/tools/custom.cjs.map +1 -1
- package/dist/tools/custom.js.map +1 -1
- package/dist/tools/database/elasticsearch.cjs.map +1 -1
- package/dist/tools/database/elasticsearch.js.map +1 -1
- package/dist/tools/database/metadata.cjs.map +1 -1
- package/dist/tools/database/metadata.js.map +1 -1
- package/dist/tools/database/milvus.cjs.map +1 -1
- package/dist/tools/database/milvus.js.map +1 -1
- package/dist/tools/database/sql.cjs.map +1 -1
- package/dist/tools/database/sql.d.cts +2 -2
- package/dist/tools/database/sql.d.ts +2 -2
- package/dist/tools/database/sql.js.map +1 -1
- package/dist/tools/llm.cjs.map +1 -1
- package/dist/tools/llm.js +1 -1
- package/dist/tools/llm.js.map +1 -1
- package/dist/tools/mcp.cjs.map +1 -1
- package/dist/tools/mcp.js.map +1 -1
- package/dist/tools/openapi.cjs.map +1 -1
- package/dist/tools/openapi.js +1 -1
- package/dist/tools/openapi.js.map +1 -1
- package/dist/tools/python/output.cjs.map +1 -1
- package/dist/tools/python/output.js.map +1 -1
- package/dist/tools/python/python.cjs.map +1 -1
- package/dist/tools/python/python.js.map +1 -1
- package/dist/tools/python/storage.cjs.map +1 -1
- package/dist/tools/python/storage.js.map +1 -1
- package/dist/tools/search/base.cjs.map +1 -1
- package/dist/tools/search/base.js.map +1 -1
- package/dist/tools/search/duckDuckGoSearch.cjs +19 -19
- package/dist/tools/search/duckDuckGoSearch.cjs.map +1 -1
- package/dist/tools/search/duckDuckGoSearch.d.cts +1 -3
- package/dist/tools/search/duckDuckGoSearch.d.ts +1 -3
- package/dist/tools/search/duckDuckGoSearch.js +17 -13
- package/dist/tools/search/duckDuckGoSearch.js.map +1 -1
- package/dist/tools/search/googleSearch.cjs.map +1 -1
- package/dist/tools/search/googleSearch.js.map +1 -1
- package/dist/tools/search/searXNGSearch.cjs.map +1 -1
- package/dist/tools/search/searXNGSearch.js.map +1 -1
- package/dist/tools/search/wikipedia.cjs.map +1 -1
- package/dist/tools/search/wikipedia.js.map +1 -1
- package/dist/tools/similarity.cjs.map +1 -1
- package/dist/tools/similarity.d.cts +1 -1
- package/dist/tools/similarity.d.ts +1 -1
- package/dist/tools/similarity.js.map +1 -1
- package/dist/tools/weather/openMeteo.cjs.map +1 -1
- package/dist/tools/weather/openMeteo.d.cts +1 -1
- package/dist/tools/weather/openMeteo.d.ts +1 -1
- package/dist/tools/weather/openMeteo.js.map +1 -1
- package/dist/tools/web/webCrawler.cjs.map +1 -1
- package/dist/tools/web/webCrawler.d.cts +1 -1
- package/dist/tools/web/webCrawler.d.ts +1 -1
- package/dist/tools/web/webCrawler.js.map +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.cjs.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/workflows/agent.cjs.map +1 -1
- package/dist/workflows/agent.js.map +1 -1
- package/dist/workflows/workflow.cjs +2 -2
- package/dist/workflows/workflow.cjs.map +1 -1
- package/dist/workflows/workflow.d.cts +1 -1
- package/dist/workflows/workflow.d.ts +1 -1
- package/dist/workflows/workflow.js +2 -2
- package/dist/workflows/workflow.js.map +1 -1
- package/package.json +28 -27
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/parsers/field.ts"],"names":["ParserField","Serializable","raw","write","chunk","end","createSnapshot","loadSnapshot","snapshot","Object","assign","ZodParserField","register","constructor","schema","get","parse","getPartial","JSONParserField","stream","jsonParser","errored","ref","input","base","undefined","ValueError","init","value","shallowCopy","JSONParser","emitPartialTokens","emitPartialValues","jsonrepairTransform","on","toString","onValue","key","stack","keys","map","s","concat","filter","String","length","prefix","setProp","matchPair","startChar","index","indexOf","substring","merged","match","findFirstPair","push","inputToParse","parseBrokenJson","pair","closed","isEnded","Promise","resolve","reject","onEnd","onError","cacheKey","SingletonCacheKeyFn"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AA2BO,MAAeA,oBAAiCC,YAAAA,CAAAA;AAAAA,EAAAA;;;EAC9CC,GAAM,GAAA,EAAA;AAKbC,EAAAA,KAAAA,CAAMC,KAAe,EAAA;AACnB,IAAA,IAAA,CAAKF,GAAOE,IAAAA,KAAAA;AACd;AAEA,EAAA,MAAMC,GAAM,GAAA;AAAC;EAEbC,cAAiB,GAAA;AACf,IAAO,OAAA;AAAEJ,MAAAA,GAAAA,EAAK,IAAKA,CAAAA;AAAI,KAAA;AACzB;AAEAK,EAAAA,YAAAA,CAAaC,QAAkD,EAAA;AAC7DC,IAAOC,MAAAA,CAAAA,MAAAA,CAAO,MAAMF,QAAAA,CAAAA;AACtB;AACF;AAEO,MAAMG,uBAA0BX,WAAAA,CAAAA;AAAAA,EAAAA;;;;EACrC;AACE,IAAA,IAAA,CAAKY,QAAQ,EAAA;AACf;AAEAC,EAAAA,WAAAA,CAA+BC,MAAsB,EAAA;AACnD,IAAK,KAAA,EAAA,EAAA,KADwBA,MAAAA,GAAAA,MAAAA;AAE/B;EAEAC,GAAS,GAAA;AACP,IAAA,OAAO,IAAKD,CAAAA,MAAAA,CAAOE,KAAM,CAAA,IAAA,CAAKd,GAAG,CAAA;AACnC;EAEAe,UAAqB,GAAA;AACnB,IAAA,OAAO,IAAKf,CAAAA,GAAAA;AACd;EAEAI,cAAiB,GAAA;AACf,IAAO,OAAA;AAAE,MAAA,GAAG,MAAMA,cAAAA,EAAAA;AAAkBQ,MAAAA,MAAAA,EAAQ,IAAKA,CAAAA;AAAO,KAAA;AAC1D;AACF;AAEO,MAAMI,wBAA2BlB,WAAAA,CAAAA;AAAAA,EAAAA;;;;AAC5BmB,EAAAA,MAAAA;AACAC,EAAAA,UAAAA;AACAC,EAAAA,OAAAA;AACAC,EAAAA,GAAAA;AAEVT,EAAAA,WAAAA,CACqBU,KAKnB,EAAA;AACA,IAAA,KAAA,EAAK,EAAA,IAAA,CANcA,KAAAA,GAAAA,KAAAA,EAAAA,KAJXF,OAAU,GAAA,KAAA;AAWlB,IAAIE,IAAAA,KAAAA,CAAMC,SAASC,KAAW,CAAA,EAAA;AAC5B,MAAM,MAAA,IAAIC,WAAW,CAAuB,qBAAA,CAAA,CAAA;AAC9C;AACA,IAAA,IAAA,CAAKC,IAAI,EAAA;AACX;EAGUA,IAAO,GAAA;AACf,IAAA,IAAA,CAAKL,GAAM,GAAA;MAAEM,KAAOC,EAAAA,WAAAA,CAAY,IAAKN,CAAAA,KAAAA,CAAMC,IAAI;AAAE,KAAA;AACjD,IAAKJ,IAAAA,CAAAA,UAAAA,GAAa,IAAIU,UAAW,CAAA;MAAEC,iBAAmB,EAAA,KAAA;MAAOC,iBAAmB,EAAA;KAAK,CAAA;AACrF,IAAA,IAAA,CAAKb,SAASc,mBAAAA,EAAAA;AACd,IAAA,IAAA,CAAKd,MAAOe,CAAAA,EAAAA,CAAG,MAAQ,EAAA,CAAC9B,KAAAA,KAAAA;AACtB,MAAA,IAAI,KAAKiB,OAAS,EAAA;AAChB,QAAA;AACF;AAEA,MAAI,IAAA;AACF,QAAA,IAAA,CAAKD,UAAWjB,CAAAA,KAAAA,CAAMC,KAAM+B,CAAAA,QAAAA,EAAQ,CAAA;OAC9B,CAAA,MAAA;AACN,QAAA,IAAA,CAAKd,OAAU,GAAA,IAAA;AACjB;KACF,CAAA;AACA,IAAA,IAAA,CAAKD,WAAWgB,OAAU,GAAA,CAAC,EAAER,KAAOS,EAAAA,GAAAA,EAAKC,OAAO,KAAA;AAC9C,MAAA,MAAMC,OAAOD,KACVE,CAAAA,GAAAA,CAAI,CAACC,CAAMA,KAAAA,CAAAA,CAAEJ,GAAG,CAChBK,CAAAA,MAAAA,CAAOL,GAAAA,CAAAA,CACPM,OAAO,CAACF,CAAAA,KAAMA,MAAMhB,KAAAA,CAAAA,CAAAA,CACpBe,IAAII,MAAAA,CAAAA;AAEP,MAAA,IAAIL,IAAKM,CAAAA,MAAAA,KAAW,CAAKjB,IAAAA,KAAAA,KAAUH,KAAW,CAAA,EAAA;AAC5C,QAAA;AACF;AACA,MAAA,MAAMqB,MAAgC,GAAA,OAAA;AACtCC,MAAAA,OAAAA,CAAQ,KAAKzB,GAAK,EAAA;AAACwB,QAAAA,MAAAA;AAAWP,QAAAA,GAAAA;SAAOX,KAAAA,CAAAA;AACvC,KAAA;AACF;AAEAzB,EAAAA,KAAAA,CAAMC,KAAe,EAAA;AACnB,IAAI,IAAA,IAAA,CAAKmB,MAAMyB,SAAW,EAAA;AACxB,MAAI,IAAA,CAAC,KAAK9C,GAAK,EAAA;AACb,QAAA,MAAM+C,SAAY,GAAA,IAAA,CAAK1B,KAAMyB,CAAAA,SAAAA,CAAU,CAAA,CAAA;AACvC,QAAME,MAAAA,KAAAA,GAAQ9C,KAAM+C,CAAAA,OAAAA,CAAQF,SAAAA,CAAAA;AAC5B,QAAA,IAAIC,UAAU,CAAI,CAAA,EAAA;AAChB,UAAA;AACF;AACA9C,QAAQA,KAAAA,GAAAA,KAAAA,CAAMgD,UAAUF,KAAAA,CAAAA;OACnB,MAAA;AACL,QAAA,MAAMG,MAAS,GAAA,IAAA,CAAKnD,GAAIwC,CAAAA,MAAAA,CAAOtC,KAAAA,CAAAA;AAC/B,QAAA,MAAMkD,KAAQC,GAAAA,aAAAA,CAAcF,MAAQ,EAAA,IAAA,CAAK9B,MAAMyB,SAAS,CAAA;AACxD,QAAA,IAAIM,KAAO,EAAA;AACT,UAAA,IAAIA,KAAMjD,CAAAA,GAAAA,GAAM,IAAKH,CAAAA,GAAAA,CAAI2C,MAAQ,EAAA;AAC/B,YAAA;AACF;AACAzC,UAAAA,KAAAA,GAAQiD,OAAOD,SAAU,CAAA,IAAA,CAAKlD,GAAI2C,CAAAA,MAAAA,EAAQS,MAAMjD,GAAG,CAAA;AACrD;AACF;AACF;AAEA,IAAA,KAAA,CAAMF,MAAMC,KAAAA,CAAAA;AACZ,IAAI,IAAA;AACF,MAAKe,IAAAA,CAAAA,MAAAA,CAAOqC,KAAKpD,KAAAA,CAAAA;KACX,CAAA,MAAA;AACN,MAAA,IAAA,CAAKiB,OAAU,GAAA,IAAA;AACjB;AACF;EAEAN,GAAM,GAAA;AACJ,IAAA,MAAM0C,YAAe,GAAA,IAAA,CAAKpC,OACtBqC,GAAAA,eAAAA,CAAgB,KAAKxD,GAAK,EAAA;AACxByD,MAAAA,IAAAA,EAAM,KAAKpC,KAAMyB,CAAAA;KACnB,CAAA,GACA,KAAK1B,GAAIM,CAAAA,KAAAA;AAEb,IAAA,OAAO,IAAKL,CAAAA,KAAAA,CAAMT,MAAOE,CAAAA,KAAAA,CAAMyC,YAAAA,CAAAA;AACjC;EAEAxC,UAAa,GAAA;AACX,IAAA,OAAO,KAAKK,GAAIM,CAAAA,KAAAA;AAClB;AAEA,EAAA,MAAMvB,GAAM,GAAA;AACV,IAAA,IAAI,KAAKc,MAAOyC,CAAAA,MAAAA,IAAU,KAAKxC,UAAWyC,CAAAA,OAAAA,IAAW,KAAKxC,OAAS,EAAA;AACjE,MAAA;AACF;AAEA,IAAA,OAAO,IAAIyC,OAAAA,CAAc,CAACC,OAAAA,EAASC,MAAAA,KAAAA;AACjC,MAAA,IAAA,CAAK5C,WAAW6C,KAAQF,GAAAA,OAAAA;AACxB,MAAA,IAAA,CAAK3C,WAAW8C,OAAUF,GAAAA,MAAAA;AAE1B,MAAK7C,IAAAA,CAAAA,MAAAA,CAAOqC,KAAK,IAAA,CAAA;AACjB,MAAA,IAAA,CAAKpC,WAAWf,GAAG,EAAA;KACrB,CAAA;AACF;EAEAC,cAAiB,GAAA;AACf,IAAO,OAAA;AAAE,MAAA,GAAG,MAAMA,cAAAA,EAAAA;AAAkBiB,MAAAA,KAAAA,EAAO,IAAKA,CAAAA,KAAAA;AAAOF,MAAAA,OAAAA,EAAS,IAAKA,CAAAA;AAAQ,KAAA;AAC/E;AAEAd,EAAAA,YAAAA,CAAa,EAAEL,GAAAA,EAAK,GAAGM,QAAAA,EAAoD,EAAA;AACzEC,IAAAA,MAAAA,CAAOC,OAAO,IAAM,EAAA;MAAER,GAAK,EAAA,EAAA;MAAI,GAAGM;KAAS,CAAA;AAC3C,IAAA,IAAA,CAAKmB,IAAI,EAAA;AACT,IAAA,IAAA,CAAKxB,MAAMD,GAAAA,CAAAA;AACb;AACF;;;IAjGWiE,QAAUC,EAAAA","file":"field.js","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ZodSchema } from \"zod\";\nimport { setProp } from \"@/internals/helpers/object.js\";\nimport { ValueError } from \"@/errors.js\";\nimport { Serializable } from \"@/internals/serializable.js\";\nimport { JSONParser } from \"@streamparser/json\";\nimport { jsonrepairTransform } from \"jsonrepair/stream\";\nimport { Cache, SingletonCacheKeyFn } from \"@/cache/decoratorCache.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { parseBrokenJson } from \"@/internals/helpers/schema.js\";\nimport { findFirstPair } from \"@/internals/helpers/string.js\";\n\nexport abstract class ParserField<T, TPartial> extends Serializable {\n public raw = \"\";\n\n abstract get(): T;\n abstract getPartial(): TPartial;\n\n write(chunk: string) {\n this.raw += chunk;\n }\n\n async end() {}\n\n createSnapshot() {\n return { raw: this.raw };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n\nexport class ZodParserField<T> extends ParserField<T, string> {\n static {\n this.register();\n }\n\n constructor(protected readonly schema: ZodSchema<T>) {\n super();\n }\n\n get(): T {\n return this.schema.parse(this.raw);\n }\n\n getPartial(): string {\n return this.raw;\n }\n\n createSnapshot() {\n return { ...super.createSnapshot(), schema: this.schema };\n }\n}\n\nexport class JSONParserField<T> extends ParserField<T, Partial<T>> {\n protected stream!: ReturnType<typeof jsonrepairTransform>;\n protected jsonParser!: JSONParser;\n protected errored = false;\n protected ref!: { value: Partial<T> };\n\n constructor(\n protected readonly input: {\n schema: ZodSchema<T>;\n base: Partial<T>;\n matchPair?: [string, string];\n },\n ) {\n super();\n if (input.base === undefined) {\n throw new ValueError(`Base must be defined!`);\n }\n this.init();\n }\n\n @Cache({ cacheKey: SingletonCacheKeyFn })\n protected init() {\n this.ref = { value: shallowCopy(this.input.base) };\n this.jsonParser = new JSONParser({ emitPartialTokens: false, emitPartialValues: true });\n this.stream = jsonrepairTransform();\n this.stream.on(\"data\", (chunk) => {\n if (this.errored) {\n return;\n }\n\n try {\n this.jsonParser.write(chunk.toString());\n } catch {\n this.errored = true;\n }\n });\n this.jsonParser.onValue = ({ value, key, stack }) => {\n const keys = stack\n .map((s) => s.key)\n .concat(key)\n .filter((s) => s !== undefined)\n .map(String);\n\n if (keys.length === 0 && value === undefined) {\n return;\n }\n const prefix: keyof typeof this.ref = \"value\";\n setProp(this.ref, [prefix, ...keys], value);\n };\n }\n\n write(chunk: string) {\n if (this.input.matchPair) {\n if (!this.raw) {\n const startChar = this.input.matchPair[0];\n const index = chunk.indexOf(startChar);\n if (index === -1) {\n return;\n }\n chunk = chunk.substring(index);\n } else {\n const merged = this.raw.concat(chunk);\n const match = findFirstPair(merged, this.input.matchPair);\n if (match) {\n if (match.end < this.raw.length) {\n return;\n }\n chunk = merged.substring(this.raw.length, match.end);\n }\n }\n }\n\n super.write(chunk);\n try {\n this.stream.push(chunk);\n } catch {\n this.errored = true;\n }\n }\n\n get() {\n const inputToParse = this.errored\n ? parseBrokenJson(this.raw, {\n pair: this.input.matchPair,\n })\n : this.ref.value;\n\n return this.input.schema.parse(inputToParse);\n }\n\n getPartial() {\n return this.ref.value;\n }\n\n async end() {\n if (this.stream.closed || this.jsonParser.isEnded || this.errored) {\n return;\n }\n\n return new Promise<void>((resolve, reject) => {\n this.jsonParser.onEnd = resolve;\n this.jsonParser.onError = reject;\n\n this.stream.push(null);\n this.jsonParser.end();\n });\n }\n\n createSnapshot() {\n return { ...super.createSnapshot(), input: this.input, errored: this.errored };\n }\n\n loadSnapshot({ raw, ...snapshot }: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, { raw: \"\", ...snapshot });\n this.init();\n this.write(raw);\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace ParserField {\n export type inferValue<T> = T extends ParserField<infer L, unknown> ? L : never;\n export type inferPartialValue<T> = T extends ParserField<any, infer L> ? L : never;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["field.ts"],"names":["ParserField","Serializable","raw","write","chunk","end","createSnapshot","loadSnapshot","snapshot","Object","assign","ZodParserField","register","constructor","schema","get","parse","getPartial","JSONParserField","stream","jsonParser","errored","ref","input","base","undefined","ValueError","init","value","shallowCopy","JSONParser","emitPartialTokens","emitPartialValues","jsonrepairTransform","on","toString","onValue","key","stack","keys","map","s","concat","filter","String","length","prefix","setProp","matchPair","startChar","index","indexOf","substring","merged","match","findFirstPair","push","inputToParse","parseBrokenJson","pair","closed","isEnded","Promise","resolve","reject","onEnd","onError","cacheKey","SingletonCacheKeyFn"],"mappings":"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","file":"field.js","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ZodSchema } from \"zod\";\nimport { setProp } from \"@/internals/helpers/object.js\";\nimport { ValueError } from \"@/errors.js\";\nimport { Serializable } from \"@/internals/serializable.js\";\nimport { JSONParser } from \"@streamparser/json\";\nimport { jsonrepairTransform } from \"jsonrepair/stream\";\nimport { Cache, SingletonCacheKeyFn } from \"@/cache/decoratorCache.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { parseBrokenJson } from \"@/internals/helpers/schema.js\";\nimport { findFirstPair } from \"@/internals/helpers/string.js\";\n\nexport abstract class ParserField<T, TPartial> extends Serializable {\n public raw = \"\";\n\n abstract get(): T;\n abstract getPartial(): TPartial;\n\n write(chunk: string) {\n this.raw += chunk;\n }\n\n async end() {}\n\n createSnapshot() {\n return { raw: this.raw };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n\nexport class ZodParserField<T> extends ParserField<T, string> {\n static {\n this.register();\n }\n\n constructor(protected readonly schema: ZodSchema<T>) {\n super();\n }\n\n get(): T {\n return this.schema.parse(this.raw);\n }\n\n getPartial(): string {\n return this.raw;\n }\n\n createSnapshot() {\n return { ...super.createSnapshot(), schema: this.schema };\n }\n}\n\nexport class JSONParserField<T> extends ParserField<T, Partial<T>> {\n protected stream!: ReturnType<typeof jsonrepairTransform>;\n protected jsonParser!: JSONParser;\n protected errored = false;\n protected ref!: { value: Partial<T> };\n\n constructor(\n protected readonly input: {\n schema: ZodSchema<T>;\n base: Partial<T>;\n matchPair?: [string, string];\n },\n ) {\n super();\n if (input.base === undefined) {\n throw new ValueError(`Base must be defined!`);\n }\n this.init();\n }\n\n @Cache({ cacheKey: SingletonCacheKeyFn })\n protected init() {\n this.ref = { value: shallowCopy(this.input.base) };\n this.jsonParser = new JSONParser({ emitPartialTokens: false, emitPartialValues: true });\n this.stream = jsonrepairTransform();\n this.stream.on(\"data\", (chunk) => {\n if (this.errored) {\n return;\n }\n\n try {\n this.jsonParser.write(chunk.toString());\n } catch {\n this.errored = true;\n }\n });\n this.jsonParser.onValue = ({ value, key, stack }) => {\n const keys = stack\n .map((s) => s.key)\n .concat(key)\n .filter((s) => s !== undefined)\n .map(String);\n\n if (keys.length === 0 && value === undefined) {\n return;\n }\n const prefix: keyof typeof this.ref = \"value\";\n setProp(this.ref, [prefix, ...keys], value);\n };\n }\n\n write(chunk: string) {\n if (this.input.matchPair) {\n if (!this.raw) {\n const startChar = this.input.matchPair[0];\n const index = chunk.indexOf(startChar);\n if (index === -1) {\n return;\n }\n chunk = chunk.substring(index);\n } else {\n const merged = this.raw.concat(chunk);\n const match = findFirstPair(merged, this.input.matchPair);\n if (match) {\n if (match.end < this.raw.length) {\n return;\n }\n chunk = merged.substring(this.raw.length, match.end);\n }\n }\n }\n\n super.write(chunk);\n try {\n this.stream.push(chunk);\n } catch {\n this.errored = true;\n }\n }\n\n get() {\n const inputToParse = this.errored\n ? parseBrokenJson(this.raw, {\n pair: this.input.matchPair,\n })\n : this.ref.value;\n\n return this.input.schema.parse(inputToParse);\n }\n\n getPartial() {\n return this.ref.value;\n }\n\n async end() {\n if (this.stream.closed || this.jsonParser.isEnded || this.errored) {\n return;\n }\n\n return new Promise<void>((resolve, reject) => {\n this.jsonParser.onEnd = resolve;\n this.jsonParser.onError = reject;\n\n this.stream.push(null);\n this.jsonParser.end();\n });\n }\n\n createSnapshot() {\n return { ...super.createSnapshot(), input: this.input, errored: this.errored };\n }\n\n loadSnapshot({ raw, ...snapshot }: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, { raw: \"\", ...snapshot });\n this.init();\n this.write(raw);\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace ParserField {\n export type inferValue<T> = T extends ParserField<infer L, unknown> ? L : never;\n export type inferPartialValue<T> = T extends ParserField<any, infer L> ? L : never;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/parsers/linePrefix.ts"],"names":["NEW_LINE_CHARACTER","trimLeftSpaces","value","replace","linesToString","lines","reduce","acc","newLine","concat","LinePrefixParser","Serializable","emitter","excludedLines","done","lastNodeKey","finalState","partialState","isDone","constructor","nodes","options","Emitter","creator","namespace","hasStartNode","hasEndNode","key","next","isStart","isEnd","entries","Boolean","nextKey","ValueError","fork","customizer","add","chunk","split","forEach","line","i","arr","isFirstLine","length","push","at","isLastLine","lastNode","isTerminationNode","parsedLine","extractLine","partial","shift","includes","endOnRepeat","end","throwWithContext","LinePrefixParserError","Reason","InvalidTransition","emitFinalUpdate","field","waitForStartNode","NotStartNode","node","write","emitPartialUpdate","getPartial","delta","raw","message","reason","extra","join","errors","context","fallback","stash","splice","Infinity","map","prefix","NoDataReceived","currentNode","NotEndNode","Promise","allSettled","Object","values","data","AlreadyCompleted","silentNodes","emit","get","e","ZodError","InvalidSchema","normalizedNodes","sort","_","a","__","b","lowerCasePrefix","toLowerCase","ref","trimmedLine","startsWith","substring","createSnapshot","shallowCopy","loadSnapshot","snapshot","assign"],"mappings":"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","file":"linePrefix.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { entries } from \"remeda\";\nimport { ValueError } from \"@/errors.js\";\nimport { Serializable } from \"@/internals/serializable.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport { ParserField } from \"@/parsers/field.js\";\nimport { Callback, InferCallbackValue } from \"@/emitter/types.js\";\nimport { ZodError } from \"zod\";\nimport { ValueOf } from \"@/internals/types.js\";\nimport { LinePrefixParserError } from \"@/parsers/errors.js\";\nexport * from \"@/parsers/errors.js\";\n\nexport interface ParserNode<T extends string, P extends ParserField<any, any>> {\n prefix: string;\n next: readonly T[];\n isStart?: boolean;\n isEnd?: boolean;\n field: P;\n}\n\ntype Customizer<T extends NonNullable<unknown>, T2 extends NonNullable<unknown> = T> = (\n nodes: T,\n options: Options<T>,\n) => { nodes: T2; options: Options<T2> };\n\ntype StringKey<T extends NonNullable<unknown>> = Extract<keyof T, string>;\n\ninterface Callbacks<T extends Record<string, ParserNode<StringKey<T>, ParserField<any, any>>>> {\n update: Callback<\n {\n [K in StringKey<T>]: {\n key: K;\n value: ParserField.inferValue<T[K][\"field\"]>;\n field: T[K][\"field\"];\n };\n }[StringKey<T>]\n >;\n partialUpdate: Callback<\n {\n [K in StringKey<T>]: {\n key: K;\n delta: string;\n value: ParserField.inferPartialValue<T[K][\"field\"]>;\n field: T[K][\"field\"];\n };\n }[StringKey<T>]\n >;\n}\n\ninterface Line {\n value: string;\n newLine: boolean;\n}\n\nconst NEW_LINE_CHARACTER = \"\\n\" as const;\n\ninterface ExtractedLine<T extends NonNullable<unknown>> {\n key: StringKey<T>;\n value: string;\n partial: boolean;\n}\n\nconst trimLeftSpaces = (value: string) => value.replace(/^\\s*/g, \"\");\nconst linesToString = (lines: Line[]) =>\n lines.reduce(\n (acc, { newLine, value }) => `${acc}${newLine ? NEW_LINE_CHARACTER.concat(value) : value}`,\n \"\",\n );\n\ninterface Options<T extends NonNullable<unknown>> {\n fallback?: (value: string) => readonly { key: StringKey<T>; value: string }[];\n endOnRepeat?: boolean;\n waitForStartNode?: boolean;\n silentNodes?: StringKey<T>[];\n}\n\ntype Input<K extends string = string> = Record<string, ParserNode<K, ParserField<any, any>>>;\n\nexport class LinePrefixParser<T extends Input<StringKey<T>>> extends Serializable {\n public readonly emitter = new Emitter<Callbacks<T>>({\n creator: this,\n namespace: [\"agent\", \"parser\", \"line\"],\n });\n\n protected readonly lines: Line[] = [];\n protected readonly excludedLines: Line[] = [];\n protected done = false;\n protected lastNodeKey: StringKey<T> | null = null;\n\n public readonly finalState = {} as LinePrefixParser.infer<T>;\n public readonly partialState = {} as Partial<Record<StringKey<T>, string>>;\n\n get isDone() {\n return this.done;\n }\n\n constructor(\n protected readonly nodes: T,\n protected readonly options: Options<T> = {},\n ) {\n super();\n\n let hasStartNode = false;\n let hasEndNode = false;\n\n for (const [key, { next, isStart, isEnd }] of entries(nodes ?? {})) {\n hasStartNode = Boolean(hasStartNode || isStart);\n hasEndNode = Boolean(hasEndNode || isEnd);\n\n for (const nextKey of next) {\n if (key === nextKey) {\n throw new ValueError(`Node '${key}' cannot point to itself.`);\n }\n if (!(nextKey in nodes)) {\n throw new ValueError(\n `Node '${key}' contains a transition to non-existing node '${nextKey}'.`,\n );\n }\n }\n }\n\n if (!hasStartNode) {\n throw new ValueError(`At least one start node must be provided!`);\n }\n if (!hasEndNode) {\n throw new ValueError(`At least one end node must be provided!`);\n }\n }\n\n fork<R extends T = T>(customizer: Customizer<T, R>) {\n const { nodes, options } = customizer(this.nodes, this.options);\n return new LinePrefixParser(nodes, options);\n }\n\n async add(chunk: string) {\n if (!chunk || this.done) {\n return;\n }\n\n chunk.split(NEW_LINE_CHARACTER).forEach((line, i, arr) => {\n const isFirstLine = i === 0;\n\n if (isFirstLine) {\n if (this.lines.length === 0) {\n this.lines.push({ newLine: false, value: line });\n } else {\n this.lines.at(-1)!.value += line;\n }\n } else {\n this.lines.push({ newLine: arr.length > 1, value: line });\n }\n });\n\n while (this.lines.length > 0) {\n const line = this.lines[0];\n const isLastLine = this.lines.length === 1;\n\n const lastNode = this.lastNodeKey ? this.nodes[this.lastNodeKey] : null;\n const isTerminationNode = lastNode\n ? Boolean(lastNode.isEnd && lastNode.next.length === 0)\n : false;\n\n const parsedLine =\n isTerminationNode || (lastNode && !line.newLine) ? null : this.extractLine(line.value);\n\n if (isLastLine && (parsedLine?.partial || !line.value)) {\n break;\n }\n this.lines.shift();\n\n if (parsedLine && !parsedLine.partial) {\n if (lastNode) {\n if (!lastNode.next.includes(parsedLine.key)) {\n if (parsedLine.key in this.finalState && this.options.endOnRepeat && lastNode.isEnd) {\n await this.end();\n return;\n }\n\n this.throwWithContext(\n `Transition from '${this.lastNodeKey}' to '${parsedLine.key}' does not exist!`,\n LinePrefixParserError.Reason.InvalidTransition,\n { line },\n );\n }\n\n await this.emitFinalUpdate(this.lastNodeKey!, lastNode.field);\n } else if (!this.nodes[parsedLine.key].isStart) {\n if (!this.options.waitForStartNode) {\n this.throwWithContext(\n `Parsed text line corresponds to a node \"${parsedLine.key}\" which is not a start node!`,\n LinePrefixParserError.Reason.NotStartNode,\n { line },\n );\n }\n this.excludedLines.push(line);\n continue;\n }\n\n const node = this.nodes[parsedLine.key];\n node.field.write(parsedLine.value);\n await this.emitPartialUpdate({\n key: parsedLine.key,\n value: node.field.getPartial(),\n delta: parsedLine.value,\n field: node.field,\n });\n this.lastNodeKey = parsedLine.key;\n } else if (this.lastNodeKey) {\n if (!this.nodes[this.lastNodeKey].field.raw) {\n line.value = trimLeftSpaces(line.value);\n }\n if (line.newLine) {\n line.value = `${NEW_LINE_CHARACTER}${line.value}`;\n }\n\n const node = this.nodes[this.lastNodeKey];\n node.field.write(line.value);\n await this.emitPartialUpdate({\n key: this.lastNodeKey,\n value: node.field.getPartial(),\n delta: line.value,\n field: node.field,\n });\n } else {\n this.excludedLines.push(line);\n }\n }\n }\n\n protected throwWithContext(\n message: string,\n reason: ValueOf<typeof LinePrefixParserError.Reason>,\n extra: { line?: Line; errors?: Error[] } = {},\n ): never {\n throw new LinePrefixParserError(\n [`The generated output does not adhere to the schema.`, message].join(NEW_LINE_CHARACTER),\n extra.errors ?? [],\n {\n reason,\n context: {\n lines: linesToString(this.lines.concat(extra.line ? [extra.line] : [])),\n excludedLines: linesToString(this.excludedLines),\n finalState: this.finalState,\n partialState: this.partialState,\n },\n },\n );\n }\n\n async end() {\n if (this.done) {\n return this.finalState;\n }\n\n if (!this.lastNodeKey && this.options.fallback) {\n const stash = linesToString([\n ...this.excludedLines.splice(0, Infinity),\n ...this.lines.splice(0, Infinity),\n ]);\n\n const nodes = this.options.fallback(stash);\n await this.add(\n nodes.map((node) => `${this.nodes[node.key].prefix}${node.value}`).join(NEW_LINE_CHARACTER),\n );\n }\n\n this.done = true;\n\n if (!this.lastNodeKey) {\n this.throwWithContext(\n \"Nothing valid has been parsed yet!\",\n LinePrefixParserError.Reason.NoDataReceived,\n );\n }\n\n const stash = linesToString(this.lines);\n this.lines.length = 0;\n\n const field = this.nodes[this.lastNodeKey].field!;\n if (stash) {\n field.write(stash);\n await this.emitPartialUpdate({\n key: this.lastNodeKey,\n value: field.getPartial(),\n delta: stash,\n field,\n });\n }\n await this.emitFinalUpdate(this.lastNodeKey, field);\n\n const currentNode = this.nodes[this.lastNodeKey];\n if (!currentNode.isEnd) {\n this.throwWithContext(\n `Node '${this.lastNodeKey}' is not an end node.`,\n LinePrefixParserError.Reason.NotEndNode,\n );\n }\n\n await Promise.allSettled(Object.values(this.nodes).map(({ field }) => field.end()));\n return this.finalState;\n }\n\n protected async emitPartialUpdate(data: InferCallbackValue<Callbacks<T>[\"partialUpdate\"]>) {\n if (data.key in this.finalState) {\n this.throwWithContext(\n `Cannot update partial event for completed key '${data.key}'`,\n LinePrefixParserError.Reason.AlreadyCompleted,\n );\n }\n if (!(data.key in this.partialState)) {\n this.partialState[data.key] = \"\";\n }\n this.partialState[data.key] += data.delta;\n if (!this.options.silentNodes?.includes(data.key)) {\n await this.emitter.emit(\"partialUpdate\", data);\n }\n }\n\n protected async emitFinalUpdate(key: StringKey<T>, field: ParserField<any, any>) {\n if (key in this.finalState) {\n this.throwWithContext(\n `Duplicated key '${key}'`,\n LinePrefixParserError.Reason.AlreadyCompleted,\n );\n }\n\n try {\n const value = field.get();\n this.finalState[key] = value;\n if (!this.options.silentNodes?.includes(key)) {\n await this.emitter.emit(\"update\", {\n key,\n field,\n value,\n });\n }\n } catch (e) {\n if (e instanceof ZodError) {\n this.throwWithContext(\n `Value for '${key}' cannot be retrieved because it's value does not adhere to the appropriate schema.`,\n LinePrefixParserError.Reason.InvalidSchema,\n { errors: [e] },\n );\n }\n throw e;\n }\n }\n\n @Cache()\n protected get normalizedNodes() {\n return entries(this.nodes)\n .sort(([_, a], [__, b]) => a.prefix.length - b.prefix.length)\n .map(([key, value]) => {\n return [key, { lowerCasePrefix: value.prefix.toLowerCase(), ref: value }] as const;\n });\n }\n\n protected extractLine(line: string): ExtractedLine<T> | null {\n const trimmedLine = trimLeftSpaces(line);\n if (!trimmedLine) {\n return null;\n }\n\n for (const [key, node] of this.normalizedNodes) {\n const partial = node.lowerCasePrefix.length > trimmedLine.length;\n const [a, b] = partial\n ? [node.lowerCasePrefix, trimmedLine]\n : [trimmedLine, node.lowerCasePrefix];\n\n if (a.toLowerCase().startsWith(b.toLowerCase())) {\n return {\n key: key as StringKey<T>,\n value: partial ? trimmedLine : trimLeftSpaces(a.substring(b.length)),\n partial,\n };\n }\n }\n return null;\n }\n\n createSnapshot() {\n return {\n nodes: shallowCopy(this.nodes),\n lines: shallowCopy(this.lines),\n emitter: this.emitter,\n done: this.done,\n lastNodeKey: this.lastNodeKey,\n options: this.options,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace LinePrefixParser {\n export type infer<T extends Record<string, ParserNode<StringKey<T>, ParserField<any, any>>>> = {\n [K in keyof T]: ParserField.inferValue<T[K][\"field\"]>;\n };\n export type inferPartial<\n T extends Record<string, ParserNode<StringKey<T>, ParserField<any, any>>>,\n > = {\n [K in StringKey<T>]: ParserField.inferPartialValue<T[K][\"field\"]>;\n };\n\n export type inferCallback<T> =\n T extends LinePrefixParser<any> ? (T[\"emitter\"] extends Emitter<infer L> ? L : never) : never;\n\n export type inferOutput<T> =\n T extends LinePrefixParser<infer P> ? LinePrefixParser.infer<P> : never;\n\n export type inferPartialOutput<T> =\n T extends LinePrefixParser<infer P> ? LinePrefixParser.inferPartial<P> : never;\n\n export type define<T extends Record<string, ParserField<any, any>>> = {\n [K in StringKey<T>]: ParserNode<StringKey<T>, T[K]>;\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["linePrefix.ts"],"names":["NEW_LINE_CHARACTER","trimLeftSpaces","value","replace","linesToString","lines","reduce","acc","newLine","concat","LinePrefixParser","Serializable","emitter","excludedLines","done","lastNodeKey","finalState","partialState","isDone","constructor","nodes","options","Emitter","creator","namespace","hasStartNode","hasEndNode","key","next","isStart","isEnd","entries","Boolean","nextKey","ValueError","fork","customizer","add","chunk","split","forEach","line","i","arr","isFirstLine","length","push","at","isLastLine","lastNode","isTerminationNode","parsedLine","extractLine","partial","shift","includes","endOnRepeat","end","throwWithContext","LinePrefixParserError","Reason","InvalidTransition","emitFinalUpdate","field","waitForStartNode","NotStartNode","node","write","emitPartialUpdate","getPartial","delta","raw","message","reason","extra","join","errors","context","fallback","stash","splice","Infinity","map","prefix","NoDataReceived","currentNode","NotEndNode","Promise","allSettled","Object","values","data","AlreadyCompleted","silentNodes","emit","get","e","ZodError","InvalidSchema","normalizedNodes","sort","_","a","__","b","lowerCasePrefix","toLowerCase","ref","trimmedLine","startsWith","substring","createSnapshot","shallowCopy","loadSnapshot","snapshot","assign"],"mappings":"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","file":"linePrefix.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { entries } from \"remeda\";\nimport { ValueError } from \"@/errors.js\";\nimport { Serializable } from \"@/internals/serializable.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport { ParserField } from \"@/parsers/field.js\";\nimport { Callback, InferCallbackValue } from \"@/emitter/types.js\";\nimport { ZodError } from \"zod\";\nimport { ValueOf } from \"@/internals/types.js\";\nimport { LinePrefixParserError } from \"@/parsers/errors.js\";\nexport * from \"@/parsers/errors.js\";\n\nexport interface ParserNode<T extends string, P extends ParserField<any, any>> {\n prefix: string;\n next: readonly T[];\n isStart?: boolean;\n isEnd?: boolean;\n field: P;\n}\n\ntype Customizer<T extends NonNullable<unknown>, T2 extends NonNullable<unknown> = T> = (\n nodes: T,\n options: Options<T>,\n) => { nodes: T2; options: Options<T2> };\n\ntype StringKey<T extends NonNullable<unknown>> = Extract<keyof T, string>;\n\ninterface Callbacks<T extends Record<string, ParserNode<StringKey<T>, ParserField<any, any>>>> {\n update: Callback<\n {\n [K in StringKey<T>]: {\n key: K;\n value: ParserField.inferValue<T[K][\"field\"]>;\n field: T[K][\"field\"];\n };\n }[StringKey<T>]\n >;\n partialUpdate: Callback<\n {\n [K in StringKey<T>]: {\n key: K;\n delta: string;\n value: ParserField.inferPartialValue<T[K][\"field\"]>;\n field: T[K][\"field\"];\n };\n }[StringKey<T>]\n >;\n}\n\ninterface Line {\n value: string;\n newLine: boolean;\n}\n\nconst NEW_LINE_CHARACTER = \"\\n\" as const;\n\ninterface ExtractedLine<T extends NonNullable<unknown>> {\n key: StringKey<T>;\n value: string;\n partial: boolean;\n}\n\nconst trimLeftSpaces = (value: string) => value.replace(/^\\s*/g, \"\");\nconst linesToString = (lines: Line[]) =>\n lines.reduce(\n (acc, { newLine, value }) => `${acc}${newLine ? NEW_LINE_CHARACTER.concat(value) : value}`,\n \"\",\n );\n\ninterface Options<T extends NonNullable<unknown>> {\n fallback?: (value: string) => readonly { key: StringKey<T>; value: string }[];\n endOnRepeat?: boolean;\n waitForStartNode?: boolean;\n silentNodes?: StringKey<T>[];\n}\n\ntype Input<K extends string = string> = Record<string, ParserNode<K, ParserField<any, any>>>;\n\nexport class LinePrefixParser<T extends Input<StringKey<T>>> extends Serializable {\n public readonly emitter = new Emitter<Callbacks<T>>({\n creator: this,\n namespace: [\"agent\", \"parser\", \"line\"],\n });\n\n protected readonly lines: Line[] = [];\n protected readonly excludedLines: Line[] = [];\n protected done = false;\n protected lastNodeKey: StringKey<T> | null = null;\n\n public readonly finalState = {} as LinePrefixParser.infer<T>;\n public readonly partialState = {} as Partial<Record<StringKey<T>, string>>;\n\n get isDone() {\n return this.done;\n }\n\n constructor(\n protected readonly nodes: T,\n protected readonly options: Options<T> = {},\n ) {\n super();\n\n let hasStartNode = false;\n let hasEndNode = false;\n\n for (const [key, { next, isStart, isEnd }] of entries(nodes ?? {})) {\n hasStartNode = Boolean(hasStartNode || isStart);\n hasEndNode = Boolean(hasEndNode || isEnd);\n\n for (const nextKey of next) {\n if (key === nextKey) {\n throw new ValueError(`Node '${key}' cannot point to itself.`);\n }\n if (!(nextKey in nodes)) {\n throw new ValueError(\n `Node '${key}' contains a transition to non-existing node '${nextKey}'.`,\n );\n }\n }\n }\n\n if (!hasStartNode) {\n throw new ValueError(`At least one start node must be provided!`);\n }\n if (!hasEndNode) {\n throw new ValueError(`At least one end node must be provided!`);\n }\n }\n\n fork<R extends T = T>(customizer: Customizer<T, R>) {\n const { nodes, options } = customizer(this.nodes, this.options);\n return new LinePrefixParser(nodes, options);\n }\n\n async add(chunk: string) {\n if (!chunk || this.done) {\n return;\n }\n\n chunk.split(NEW_LINE_CHARACTER).forEach((line, i, arr) => {\n const isFirstLine = i === 0;\n\n if (isFirstLine) {\n if (this.lines.length === 0) {\n this.lines.push({ newLine: false, value: line });\n } else {\n this.lines.at(-1)!.value += line;\n }\n } else {\n this.lines.push({ newLine: arr.length > 1, value: line });\n }\n });\n\n while (this.lines.length > 0) {\n const line = this.lines[0];\n const isLastLine = this.lines.length === 1;\n\n const lastNode = this.lastNodeKey ? this.nodes[this.lastNodeKey] : null;\n const isTerminationNode = lastNode\n ? Boolean(lastNode.isEnd && lastNode.next.length === 0)\n : false;\n\n const parsedLine =\n isTerminationNode || (lastNode && !line.newLine) ? null : this.extractLine(line.value);\n\n if (isLastLine && (parsedLine?.partial || !line.value)) {\n break;\n }\n this.lines.shift();\n\n if (parsedLine && !parsedLine.partial) {\n if (lastNode) {\n if (!lastNode.next.includes(parsedLine.key)) {\n if (parsedLine.key in this.finalState && this.options.endOnRepeat && lastNode.isEnd) {\n await this.end();\n return;\n }\n\n this.throwWithContext(\n `Transition from '${this.lastNodeKey}' to '${parsedLine.key}' does not exist!`,\n LinePrefixParserError.Reason.InvalidTransition,\n { line },\n );\n }\n\n await this.emitFinalUpdate(this.lastNodeKey!, lastNode.field);\n } else if (!this.nodes[parsedLine.key].isStart) {\n if (!this.options.waitForStartNode) {\n this.throwWithContext(\n `Parsed text line corresponds to a node \"${parsedLine.key}\" which is not a start node!`,\n LinePrefixParserError.Reason.NotStartNode,\n { line },\n );\n }\n this.excludedLines.push(line);\n continue;\n }\n\n const node = this.nodes[parsedLine.key];\n node.field.write(parsedLine.value);\n await this.emitPartialUpdate({\n key: parsedLine.key,\n value: node.field.getPartial(),\n delta: parsedLine.value,\n field: node.field,\n });\n this.lastNodeKey = parsedLine.key;\n } else if (this.lastNodeKey) {\n if (!this.nodes[this.lastNodeKey].field.raw) {\n line.value = trimLeftSpaces(line.value);\n }\n if (line.newLine) {\n line.value = `${NEW_LINE_CHARACTER}${line.value}`;\n }\n\n const node = this.nodes[this.lastNodeKey];\n node.field.write(line.value);\n await this.emitPartialUpdate({\n key: this.lastNodeKey,\n value: node.field.getPartial(),\n delta: line.value,\n field: node.field,\n });\n } else {\n this.excludedLines.push(line);\n }\n }\n }\n\n protected throwWithContext(\n message: string,\n reason: ValueOf<typeof LinePrefixParserError.Reason>,\n extra: { line?: Line; errors?: Error[] } = {},\n ): never {\n throw new LinePrefixParserError(\n [`The generated output does not adhere to the schema.`, message].join(NEW_LINE_CHARACTER),\n extra.errors ?? [],\n {\n reason,\n context: {\n lines: linesToString(this.lines.concat(extra.line ? [extra.line] : [])),\n excludedLines: linesToString(this.excludedLines),\n finalState: this.finalState,\n partialState: this.partialState,\n },\n },\n );\n }\n\n async end() {\n if (this.done) {\n return this.finalState;\n }\n\n if (!this.lastNodeKey && this.options.fallback) {\n const stash = linesToString([\n ...this.excludedLines.splice(0, Infinity),\n ...this.lines.splice(0, Infinity),\n ]);\n\n const nodes = this.options.fallback(stash);\n await this.add(\n nodes.map((node) => `${this.nodes[node.key].prefix}${node.value}`).join(NEW_LINE_CHARACTER),\n );\n }\n\n this.done = true;\n\n if (!this.lastNodeKey) {\n this.throwWithContext(\n \"Nothing valid has been parsed yet!\",\n LinePrefixParserError.Reason.NoDataReceived,\n );\n }\n\n const stash = linesToString(this.lines);\n this.lines.length = 0;\n\n const field = this.nodes[this.lastNodeKey].field!;\n if (stash) {\n field.write(stash);\n await this.emitPartialUpdate({\n key: this.lastNodeKey,\n value: field.getPartial(),\n delta: stash,\n field,\n });\n }\n await this.emitFinalUpdate(this.lastNodeKey, field);\n\n const currentNode = this.nodes[this.lastNodeKey];\n if (!currentNode.isEnd) {\n this.throwWithContext(\n `Node '${this.lastNodeKey}' is not an end node.`,\n LinePrefixParserError.Reason.NotEndNode,\n );\n }\n\n await Promise.allSettled(Object.values(this.nodes).map(({ field }) => field.end()));\n return this.finalState;\n }\n\n protected async emitPartialUpdate(data: InferCallbackValue<Callbacks<T>[\"partialUpdate\"]>) {\n if (data.key in this.finalState) {\n this.throwWithContext(\n `Cannot update partial event for completed key '${data.key}'`,\n LinePrefixParserError.Reason.AlreadyCompleted,\n );\n }\n if (!(data.key in this.partialState)) {\n this.partialState[data.key] = \"\";\n }\n this.partialState[data.key] += data.delta;\n if (!this.options.silentNodes?.includes(data.key)) {\n await this.emitter.emit(\"partialUpdate\", data);\n }\n }\n\n protected async emitFinalUpdate(key: StringKey<T>, field: ParserField<any, any>) {\n if (key in this.finalState) {\n this.throwWithContext(\n `Duplicated key '${key}'`,\n LinePrefixParserError.Reason.AlreadyCompleted,\n );\n }\n\n try {\n const value = field.get();\n this.finalState[key] = value;\n if (!this.options.silentNodes?.includes(key)) {\n await this.emitter.emit(\"update\", {\n key,\n field,\n value,\n });\n }\n } catch (e) {\n if (e instanceof ZodError) {\n this.throwWithContext(\n `Value for '${key}' cannot be retrieved because it's value does not adhere to the appropriate schema.`,\n LinePrefixParserError.Reason.InvalidSchema,\n { errors: [e] },\n );\n }\n throw e;\n }\n }\n\n @Cache()\n protected get normalizedNodes() {\n return entries(this.nodes)\n .sort(([_, a], [__, b]) => a.prefix.length - b.prefix.length)\n .map(([key, value]) => {\n return [key, { lowerCasePrefix: value.prefix.toLowerCase(), ref: value }] as const;\n });\n }\n\n protected extractLine(line: string): ExtractedLine<T> | null {\n const trimmedLine = trimLeftSpaces(line);\n if (!trimmedLine) {\n return null;\n }\n\n for (const [key, node] of this.normalizedNodes) {\n const partial = node.lowerCasePrefix.length > trimmedLine.length;\n const [a, b] = partial\n ? [node.lowerCasePrefix, trimmedLine]\n : [trimmedLine, node.lowerCasePrefix];\n\n if (a.toLowerCase().startsWith(b.toLowerCase())) {\n return {\n key: key as StringKey<T>,\n value: partial ? trimmedLine : trimLeftSpaces(a.substring(b.length)),\n partial,\n };\n }\n }\n return null;\n }\n\n createSnapshot() {\n return {\n nodes: shallowCopy(this.nodes),\n lines: shallowCopy(this.lines),\n emitter: this.emitter,\n done: this.done,\n lastNodeKey: this.lastNodeKey,\n options: this.options,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace LinePrefixParser {\n export type infer<T extends Record<string, ParserNode<StringKey<T>, ParserField<any, any>>>> = {\n [K in keyof T]: ParserField.inferValue<T[K][\"field\"]>;\n };\n export type inferPartial<\n T extends Record<string, ParserNode<StringKey<T>, ParserField<any, any>>>,\n > = {\n [K in StringKey<T>]: ParserField.inferPartialValue<T[K][\"field\"]>;\n };\n\n export type inferCallback<T> =\n T extends LinePrefixParser<any> ? (T[\"emitter\"] extends Emitter<infer L> ? L : never) : never;\n\n export type inferOutput<T> =\n T extends LinePrefixParser<infer P> ? LinePrefixParser.infer<P> : never;\n\n export type inferPartialOutput<T> =\n T extends LinePrefixParser<infer P> ? LinePrefixParser.inferPartial<P> : never;\n\n export type define<T extends Record<string, ParserField<any, any>>> = {\n [K in StringKey<T>]: ParserNode<StringKey<T>, T[K]>;\n };\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { E as Emitter,
|
|
1
|
+
import { E as Emitter, C as Callback, I as InferCallbackValue } from '../emitter-BWtGHYn0.cjs';
|
|
2
2
|
import { Serializable } from '../internals/serializable.cjs';
|
|
3
3
|
import { ParserField } from './field.cjs';
|
|
4
4
|
import { ValueOf } from '../internals/types.cjs';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { E as Emitter,
|
|
1
|
+
import { E as Emitter, C as Callback, I as InferCallbackValue } from '../emitter-l0W9gC1A.js';
|
|
2
2
|
import { Serializable } from '../internals/serializable.js';
|
|
3
3
|
import { ParserField } from './field.js';
|
|
4
4
|
import { ValueOf } from '../internals/types.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/parsers/linePrefix.ts"],"names":["NEW_LINE_CHARACTER","trimLeftSpaces","value","replace","linesToString","lines","reduce","acc","newLine","concat","LinePrefixParser","Serializable","emitter","excludedLines","done","lastNodeKey","finalState","partialState","isDone","constructor","nodes","options","Emitter","creator","namespace","hasStartNode","hasEndNode","key","next","isStart","isEnd","entries","Boolean","nextKey","ValueError","fork","customizer","add","chunk","split","forEach","line","i","arr","isFirstLine","length","push","at","isLastLine","lastNode","isTerminationNode","parsedLine","extractLine","partial","shift","includes","endOnRepeat","end","throwWithContext","LinePrefixParserError","Reason","InvalidTransition","emitFinalUpdate","field","waitForStartNode","NotStartNode","node","write","emitPartialUpdate","getPartial","delta","raw","message","reason","extra","join","errors","context","fallback","stash","splice","Infinity","map","prefix","NoDataReceived","currentNode","NotEndNode","Promise","allSettled","Object","values","data","AlreadyCompleted","silentNodes","emit","get","e","ZodError","InvalidSchema","normalizedNodes","sort","_","a","__","b","lowerCasePrefix","toLowerCase","ref","trimmedLine","startsWith","substring","createSnapshot","shallowCopy","loadSnapshot","snapshot","assign"],"mappings":"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","file":"linePrefix.js","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { entries } from \"remeda\";\nimport { ValueError } from \"@/errors.js\";\nimport { Serializable } from \"@/internals/serializable.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport { ParserField } from \"@/parsers/field.js\";\nimport { Callback, InferCallbackValue } from \"@/emitter/types.js\";\nimport { ZodError } from \"zod\";\nimport { ValueOf } from \"@/internals/types.js\";\nimport { LinePrefixParserError } from \"@/parsers/errors.js\";\nexport * from \"@/parsers/errors.js\";\n\nexport interface ParserNode<T extends string, P extends ParserField<any, any>> {\n prefix: string;\n next: readonly T[];\n isStart?: boolean;\n isEnd?: boolean;\n field: P;\n}\n\ntype Customizer<T extends NonNullable<unknown>, T2 extends NonNullable<unknown> = T> = (\n nodes: T,\n options: Options<T>,\n) => { nodes: T2; options: Options<T2> };\n\ntype StringKey<T extends NonNullable<unknown>> = Extract<keyof T, string>;\n\ninterface Callbacks<T extends Record<string, ParserNode<StringKey<T>, ParserField<any, any>>>> {\n update: Callback<\n {\n [K in StringKey<T>]: {\n key: K;\n value: ParserField.inferValue<T[K][\"field\"]>;\n field: T[K][\"field\"];\n };\n }[StringKey<T>]\n >;\n partialUpdate: Callback<\n {\n [K in StringKey<T>]: {\n key: K;\n delta: string;\n value: ParserField.inferPartialValue<T[K][\"field\"]>;\n field: T[K][\"field\"];\n };\n }[StringKey<T>]\n >;\n}\n\ninterface Line {\n value: string;\n newLine: boolean;\n}\n\nconst NEW_LINE_CHARACTER = \"\\n\" as const;\n\ninterface ExtractedLine<T extends NonNullable<unknown>> {\n key: StringKey<T>;\n value: string;\n partial: boolean;\n}\n\nconst trimLeftSpaces = (value: string) => value.replace(/^\\s*/g, \"\");\nconst linesToString = (lines: Line[]) =>\n lines.reduce(\n (acc, { newLine, value }) => `${acc}${newLine ? NEW_LINE_CHARACTER.concat(value) : value}`,\n \"\",\n );\n\ninterface Options<T extends NonNullable<unknown>> {\n fallback?: (value: string) => readonly { key: StringKey<T>; value: string }[];\n endOnRepeat?: boolean;\n waitForStartNode?: boolean;\n silentNodes?: StringKey<T>[];\n}\n\ntype Input<K extends string = string> = Record<string, ParserNode<K, ParserField<any, any>>>;\n\nexport class LinePrefixParser<T extends Input<StringKey<T>>> extends Serializable {\n public readonly emitter = new Emitter<Callbacks<T>>({\n creator: this,\n namespace: [\"agent\", \"parser\", \"line\"],\n });\n\n protected readonly lines: Line[] = [];\n protected readonly excludedLines: Line[] = [];\n protected done = false;\n protected lastNodeKey: StringKey<T> | null = null;\n\n public readonly finalState = {} as LinePrefixParser.infer<T>;\n public readonly partialState = {} as Partial<Record<StringKey<T>, string>>;\n\n get isDone() {\n return this.done;\n }\n\n constructor(\n protected readonly nodes: T,\n protected readonly options: Options<T> = {},\n ) {\n super();\n\n let hasStartNode = false;\n let hasEndNode = false;\n\n for (const [key, { next, isStart, isEnd }] of entries(nodes ?? {})) {\n hasStartNode = Boolean(hasStartNode || isStart);\n hasEndNode = Boolean(hasEndNode || isEnd);\n\n for (const nextKey of next) {\n if (key === nextKey) {\n throw new ValueError(`Node '${key}' cannot point to itself.`);\n }\n if (!(nextKey in nodes)) {\n throw new ValueError(\n `Node '${key}' contains a transition to non-existing node '${nextKey}'.`,\n );\n }\n }\n }\n\n if (!hasStartNode) {\n throw new ValueError(`At least one start node must be provided!`);\n }\n if (!hasEndNode) {\n throw new ValueError(`At least one end node must be provided!`);\n }\n }\n\n fork<R extends T = T>(customizer: Customizer<T, R>) {\n const { nodes, options } = customizer(this.nodes, this.options);\n return new LinePrefixParser(nodes, options);\n }\n\n async add(chunk: string) {\n if (!chunk || this.done) {\n return;\n }\n\n chunk.split(NEW_LINE_CHARACTER).forEach((line, i, arr) => {\n const isFirstLine = i === 0;\n\n if (isFirstLine) {\n if (this.lines.length === 0) {\n this.lines.push({ newLine: false, value: line });\n } else {\n this.lines.at(-1)!.value += line;\n }\n } else {\n this.lines.push({ newLine: arr.length > 1, value: line });\n }\n });\n\n while (this.lines.length > 0) {\n const line = this.lines[0];\n const isLastLine = this.lines.length === 1;\n\n const lastNode = this.lastNodeKey ? this.nodes[this.lastNodeKey] : null;\n const isTerminationNode = lastNode\n ? Boolean(lastNode.isEnd && lastNode.next.length === 0)\n : false;\n\n const parsedLine =\n isTerminationNode || (lastNode && !line.newLine) ? null : this.extractLine(line.value);\n\n if (isLastLine && (parsedLine?.partial || !line.value)) {\n break;\n }\n this.lines.shift();\n\n if (parsedLine && !parsedLine.partial) {\n if (lastNode) {\n if (!lastNode.next.includes(parsedLine.key)) {\n if (parsedLine.key in this.finalState && this.options.endOnRepeat && lastNode.isEnd) {\n await this.end();\n return;\n }\n\n this.throwWithContext(\n `Transition from '${this.lastNodeKey}' to '${parsedLine.key}' does not exist!`,\n LinePrefixParserError.Reason.InvalidTransition,\n { line },\n );\n }\n\n await this.emitFinalUpdate(this.lastNodeKey!, lastNode.field);\n } else if (!this.nodes[parsedLine.key].isStart) {\n if (!this.options.waitForStartNode) {\n this.throwWithContext(\n `Parsed text line corresponds to a node \"${parsedLine.key}\" which is not a start node!`,\n LinePrefixParserError.Reason.NotStartNode,\n { line },\n );\n }\n this.excludedLines.push(line);\n continue;\n }\n\n const node = this.nodes[parsedLine.key];\n node.field.write(parsedLine.value);\n await this.emitPartialUpdate({\n key: parsedLine.key,\n value: node.field.getPartial(),\n delta: parsedLine.value,\n field: node.field,\n });\n this.lastNodeKey = parsedLine.key;\n } else if (this.lastNodeKey) {\n if (!this.nodes[this.lastNodeKey].field.raw) {\n line.value = trimLeftSpaces(line.value);\n }\n if (line.newLine) {\n line.value = `${NEW_LINE_CHARACTER}${line.value}`;\n }\n\n const node = this.nodes[this.lastNodeKey];\n node.field.write(line.value);\n await this.emitPartialUpdate({\n key: this.lastNodeKey,\n value: node.field.getPartial(),\n delta: line.value,\n field: node.field,\n });\n } else {\n this.excludedLines.push(line);\n }\n }\n }\n\n protected throwWithContext(\n message: string,\n reason: ValueOf<typeof LinePrefixParserError.Reason>,\n extra: { line?: Line; errors?: Error[] } = {},\n ): never {\n throw new LinePrefixParserError(\n [`The generated output does not adhere to the schema.`, message].join(NEW_LINE_CHARACTER),\n extra.errors ?? [],\n {\n reason,\n context: {\n lines: linesToString(this.lines.concat(extra.line ? [extra.line] : [])),\n excludedLines: linesToString(this.excludedLines),\n finalState: this.finalState,\n partialState: this.partialState,\n },\n },\n );\n }\n\n async end() {\n if (this.done) {\n return this.finalState;\n }\n\n if (!this.lastNodeKey && this.options.fallback) {\n const stash = linesToString([\n ...this.excludedLines.splice(0, Infinity),\n ...this.lines.splice(0, Infinity),\n ]);\n\n const nodes = this.options.fallback(stash);\n await this.add(\n nodes.map((node) => `${this.nodes[node.key].prefix}${node.value}`).join(NEW_LINE_CHARACTER),\n );\n }\n\n this.done = true;\n\n if (!this.lastNodeKey) {\n this.throwWithContext(\n \"Nothing valid has been parsed yet!\",\n LinePrefixParserError.Reason.NoDataReceived,\n );\n }\n\n const stash = linesToString(this.lines);\n this.lines.length = 0;\n\n const field = this.nodes[this.lastNodeKey].field!;\n if (stash) {\n field.write(stash);\n await this.emitPartialUpdate({\n key: this.lastNodeKey,\n value: field.getPartial(),\n delta: stash,\n field,\n });\n }\n await this.emitFinalUpdate(this.lastNodeKey, field);\n\n const currentNode = this.nodes[this.lastNodeKey];\n if (!currentNode.isEnd) {\n this.throwWithContext(\n `Node '${this.lastNodeKey}' is not an end node.`,\n LinePrefixParserError.Reason.NotEndNode,\n );\n }\n\n await Promise.allSettled(Object.values(this.nodes).map(({ field }) => field.end()));\n return this.finalState;\n }\n\n protected async emitPartialUpdate(data: InferCallbackValue<Callbacks<T>[\"partialUpdate\"]>) {\n if (data.key in this.finalState) {\n this.throwWithContext(\n `Cannot update partial event for completed key '${data.key}'`,\n LinePrefixParserError.Reason.AlreadyCompleted,\n );\n }\n if (!(data.key in this.partialState)) {\n this.partialState[data.key] = \"\";\n }\n this.partialState[data.key] += data.delta;\n if (!this.options.silentNodes?.includes(data.key)) {\n await this.emitter.emit(\"partialUpdate\", data);\n }\n }\n\n protected async emitFinalUpdate(key: StringKey<T>, field: ParserField<any, any>) {\n if (key in this.finalState) {\n this.throwWithContext(\n `Duplicated key '${key}'`,\n LinePrefixParserError.Reason.AlreadyCompleted,\n );\n }\n\n try {\n const value = field.get();\n this.finalState[key] = value;\n if (!this.options.silentNodes?.includes(key)) {\n await this.emitter.emit(\"update\", {\n key,\n field,\n value,\n });\n }\n } catch (e) {\n if (e instanceof ZodError) {\n this.throwWithContext(\n `Value for '${key}' cannot be retrieved because it's value does not adhere to the appropriate schema.`,\n LinePrefixParserError.Reason.InvalidSchema,\n { errors: [e] },\n );\n }\n throw e;\n }\n }\n\n @Cache()\n protected get normalizedNodes() {\n return entries(this.nodes)\n .sort(([_, a], [__, b]) => a.prefix.length - b.prefix.length)\n .map(([key, value]) => {\n return [key, { lowerCasePrefix: value.prefix.toLowerCase(), ref: value }] as const;\n });\n }\n\n protected extractLine(line: string): ExtractedLine<T> | null {\n const trimmedLine = trimLeftSpaces(line);\n if (!trimmedLine) {\n return null;\n }\n\n for (const [key, node] of this.normalizedNodes) {\n const partial = node.lowerCasePrefix.length > trimmedLine.length;\n const [a, b] = partial\n ? [node.lowerCasePrefix, trimmedLine]\n : [trimmedLine, node.lowerCasePrefix];\n\n if (a.toLowerCase().startsWith(b.toLowerCase())) {\n return {\n key: key as StringKey<T>,\n value: partial ? trimmedLine : trimLeftSpaces(a.substring(b.length)),\n partial,\n };\n }\n }\n return null;\n }\n\n createSnapshot() {\n return {\n nodes: shallowCopy(this.nodes),\n lines: shallowCopy(this.lines),\n emitter: this.emitter,\n done: this.done,\n lastNodeKey: this.lastNodeKey,\n options: this.options,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace LinePrefixParser {\n export type infer<T extends Record<string, ParserNode<StringKey<T>, ParserField<any, any>>>> = {\n [K in keyof T]: ParserField.inferValue<T[K][\"field\"]>;\n };\n export type inferPartial<\n T extends Record<string, ParserNode<StringKey<T>, ParserField<any, any>>>,\n > = {\n [K in StringKey<T>]: ParserField.inferPartialValue<T[K][\"field\"]>;\n };\n\n export type inferCallback<T> =\n T extends LinePrefixParser<any> ? (T[\"emitter\"] extends Emitter<infer L> ? L : never) : never;\n\n export type inferOutput<T> =\n T extends LinePrefixParser<infer P> ? LinePrefixParser.infer<P> : never;\n\n export type inferPartialOutput<T> =\n T extends LinePrefixParser<infer P> ? LinePrefixParser.inferPartial<P> : never;\n\n export type define<T extends Record<string, ParserField<any, any>>> = {\n [K in StringKey<T>]: ParserNode<StringKey<T>, T[K]>;\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["linePrefix.ts"],"names":["NEW_LINE_CHARACTER","trimLeftSpaces","value","replace","linesToString","lines","reduce","acc","newLine","concat","LinePrefixParser","Serializable","emitter","excludedLines","done","lastNodeKey","finalState","partialState","isDone","constructor","nodes","options","Emitter","creator","namespace","hasStartNode","hasEndNode","key","next","isStart","isEnd","entries","Boolean","nextKey","ValueError","fork","customizer","add","chunk","split","forEach","line","i","arr","isFirstLine","length","push","at","isLastLine","lastNode","isTerminationNode","parsedLine","extractLine","partial","shift","includes","endOnRepeat","end","throwWithContext","LinePrefixParserError","Reason","InvalidTransition","emitFinalUpdate","field","waitForStartNode","NotStartNode","node","write","emitPartialUpdate","getPartial","delta","raw","message","reason","extra","join","errors","context","fallback","stash","splice","Infinity","map","prefix","NoDataReceived","currentNode","NotEndNode","Promise","allSettled","Object","values","data","AlreadyCompleted","silentNodes","emit","get","e","ZodError","InvalidSchema","normalizedNodes","sort","_","a","__","b","lowerCasePrefix","toLowerCase","ref","trimmedLine","startsWith","substring","createSnapshot","shallowCopy","loadSnapshot","snapshot","assign"],"mappings":";;;;;;;;;;;;AAcC,SAAA,YAAA,CAAA,UAAA,EAAA,MAAA,EAAA,GAAA,EAAA,IAAA,EAAA;;;;;;AAAA,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA;;;;;AAyDD,MAAMA,kBAAqB,GAAA,IAAA;AAQ3B,MAAMC,iCAAkBC,MAAAA,CAAAA,CAAAA,KAAAA,KAAkBA,MAAMC,OAAQ,CAAA,OAAA,EAAS,EAAA,CAA1C,EAAA,gBAAA,CAAA;AACvB,MAAMC,aAAAA,2BAAiBC,KACrBA,KAAAA,KAAAA,CAAMC,OACJ,CAACC,GAAAA,EAAK,EAAEC,OAAAA,EAASN,KAAK,EAAA,KAAO,GAAGK,GAAAA,CAAAA,EAAMC,UAAUR,kBAAmBS,CAAAA,MAAAA,CAAOP,KAAAA,CAASA,GAAAA,KAAAA,CACnF,CAAA,EAAA,EAAA,CAHkB,EAAA,eAAA,CAAA;AAef,MAAMQ,yBAAwDC,YAAAA,CAAAA;EA/FrE;;;;;AAgGkBC,EAAAA,OAAAA;AAKGP,EAAAA,KAAAA;AACAQ,EAAAA,aAAAA;AACTC,EAAAA,IAAAA;AACAC,EAAAA,WAAAA;AAEMC,EAAAA,UAAAA;AACAC,EAAAA,YAAAA;AAEhB,EAAA,IAAIC,MAAS,GAAA;AACX,IAAA,OAAO,IAAKJ,CAAAA,IAAAA;AACd;EAEAK,WACqBC,CAAAA,KAAAA,EACAC,OAAsB,GAAA,EACzC,EAAA;AACA,IAAK,KAAA,EAAA,EAAA,IAHcD,CAAAA,KAAAA,GAAAA,KAAAA,EAAAA,IAAAA,CACAC,UAAAA,OAAAA,EAAAA,IAAAA,CAnBLT,OAAU,GAAA,IAAIU,OAAsB,CAAA;MAClDC,OAAS,EAAA,IAAA;MACTC,SAAW,EAAA;AAAC,QAAA,OAAA;AAAS,QAAA,QAAA;AAAU,QAAA;;KACjC,CAAA,EAAA,KAEmBnB,KAAgB,GAAA,IAAE,IAClBQ,CAAAA,aAAAA,GAAwB,EAAE,EAAA,IAAA,CACnCC,OAAO,KAAA,EAAA,IAAA,CACPC,cAAmC,IAAA,EAAA,IAAA,CAE7BC,aAAa,EAAC,EAAA,IACdC,CAAAA,YAAAA,GAAe,EAAC;AAY9B,IAAA,IAAIQ,YAAe,GAAA,KAAA;AACnB,IAAA,IAAIC,UAAa,GAAA,KAAA;AAEjB,IAAA,KAAA,MAAW,CAACC,GAAAA,EAAK,EAAEC,IAAAA,EAAMC,OAASC,EAAAA,KAAAA,EAAO,CAAA,IAAKC,OAAQX,CAAAA,KAAAA,IAAS,EAAC,CAAI,EAAA;AAClEK,MAAeO,YAAAA,GAAAA,OAAAA,CAAQP,gBAAgBI,OAAAA,CAAAA;AACvCH,MAAaM,UAAAA,GAAAA,OAAAA,CAAQN,cAAcI,KAAAA,CAAAA;AAEnC,MAAA,KAAA,MAAWG,WAAWL,IAAM,EAAA;AAC1B,QAAA,IAAID,QAAQM,OAAS,EAAA;AACnB,UAAA,MAAM,IAAIC,UAAAA,CAAW,CAASP,MAAAA,EAAAA,GAAAA,CAA8B,yBAAA,CAAA,CAAA;AAC9D;AACA,QAAI,IAAA,EAAEM,WAAWb,KAAQ,CAAA,EAAA;AACvB,UAAA,MAAM,IAAIc,UACR,CAAA,CAAA,MAAA,EAASP,GAAAA,CAAAA,8CAAAA,EAAoDM,OAAAA,CAAW,EAAA,CAAA,CAAA;AAE5E;AACF;AACF;AAEA,IAAA,IAAI,CAACR,YAAc,EAAA;AACjB,MAAM,MAAA,IAAIS,WAAW,CAA2C,yCAAA,CAAA,CAAA;AAClE;AACA,IAAA,IAAI,CAACR,UAAY,EAAA;AACf,MAAM,MAAA,IAAIQ,WAAW,CAAyC,uCAAA,CAAA,CAAA;AAChE;AACF;AAEAC,EAAAA,IAAAA,CAAsBC,UAA8B,EAAA;AAClD,IAAM,MAAA,EAAEhB,OAAOC,OAAO,EAAA,GAAKe,WAAW,IAAKhB,CAAAA,KAAAA,EAAO,KAAKC,OAAO,CAAA;AAC9D,IAAO,OAAA,IAAIX,gBAAiBU,CAAAA,KAAAA,EAAOC,OAAAA,CAAAA;AACrC;AAEA,EAAA,MAAMgB,IAAIC,KAAe,EAAA;AACvB,IAAI,IAAA,CAACA,KAAS,IAAA,IAAA,CAAKxB,IAAM,EAAA;AACvB,MAAA;AACF;AAEAwB,IAAAA,KAAAA,CAAMC,MAAMvC,kBAAAA,CAAAA,CAAoBwC,QAAQ,CAACC,IAAAA,EAAMC,GAAGC,GAAAA,KAAAA;AAChD,MAAA,MAAMC,cAAcF,CAAM,KAAA,CAAA;AAE1B,MAAA,IAAIE,WAAa,EAAA;AACf,QAAI,IAAA,IAAA,CAAKvC,KAAMwC,CAAAA,MAAAA,KAAW,CAAG,EAAA;AAC3B,UAAA,IAAA,CAAKxC,MAAMyC,IAAK,CAAA;YAAEtC,OAAS,EAAA,KAAA;YAAON,KAAOuC,EAAAA;WAAK,CAAA;SACzC,MAAA;AACL,UAAA,IAAA,CAAKpC,KAAM0C,CAAAA,EAAAA,CAAG,EAAC,CAAA,CAAI7C,KAASuC,IAAAA,IAAAA;AAC9B;OACK,MAAA;AACL,QAAA,IAAA,CAAKpC,MAAMyC,IAAK,CAAA;AAAEtC,UAAAA,OAAAA,EAASmC,IAAIE,MAAS,GAAA,CAAA;UAAG3C,KAAOuC,EAAAA;SAAK,CAAA;AACzD;KACF,CAAA;AAEA,IAAO,OAAA,IAAA,CAAKpC,KAAMwC,CAAAA,MAAAA,GAAS,CAAG,EAAA;AAC5B,MAAMJ,MAAAA,IAAAA,GAAO,IAAKpC,CAAAA,KAAAA,CAAM,CAAA,CAAA;AACxB,MAAM2C,MAAAA,UAAAA,GAAa,IAAK3C,CAAAA,KAAAA,CAAMwC,MAAW,KAAA,CAAA;AAEzC,MAAA,MAAMI,WAAW,IAAKlC,CAAAA,WAAAA,GAAc,KAAKK,KAAM,CAAA,IAAA,CAAKL,WAAW,CAAI,GAAA,IAAA;AACnE,MAAMmC,MAAAA,iBAAAA,GAAoBD,WACtBjB,OAAQiB,CAAAA,QAAAA,CAASnB,SAASmB,QAASrB,CAAAA,IAAAA,CAAKiB,MAAW,KAAA,CAAA,CACnD,GAAA,KAAA;AAEJ,MAAMM,MAAAA,UAAAA,GACJD,iBAAsBD,IAAAA,QAAAA,IAAY,CAACR,IAAAA,CAAKjC,UAAW,IAAO,GAAA,IAAA,CAAK4C,WAAYX,CAAAA,IAAAA,CAAKvC,KAAK,CAAA;AAEvF,MAAA,IAAI8C,UAAeG,KAAAA,UAAAA,EAAYE,OAAW,IAAA,CAACZ,KAAKvC,KAAQ,CAAA,EAAA;AACtD,QAAA;AACF;AACA,MAAA,IAAA,CAAKG,MAAMiD,KAAK,EAAA;AAEhB,MAAIH,IAAAA,UAAAA,IAAc,CAACA,UAAAA,CAAWE,OAAS,EAAA;AACrC,QAAA,IAAIJ,QAAU,EAAA;AACZ,UAAA,IAAI,CAACA,QAASrB,CAAAA,IAAAA,CAAK2B,QAASJ,CAAAA,UAAAA,CAAWxB,GAAG,CAAG,EAAA;AAC3C,YAAIwB,IAAAA,UAAAA,CAAWxB,OAAO,IAAKX,CAAAA,UAAAA,IAAc,KAAKK,OAAQmC,CAAAA,WAAAA,IAAeP,SAASnB,KAAO,EAAA;AACnF,cAAA,MAAM,KAAK2B,GAAG,EAAA;AACd,cAAA;AACF;AAEA,YAAKC,IAAAA,CAAAA,gBAAAA,CACH,CAAoB,iBAAA,EAAA,IAAA,CAAK3C,WAAW,CAAA,MAAA,EAASoC,WAAWxB,GAAG,CAAA,iBAAA,CAAA,EAC3DgC,qBAAsBC,CAAAA,MAAAA,CAAOC,iBAC7B,EAAA;AAAEpB,cAAAA;aAAK,CAAA;AAEX;AAEA,UAAA,MAAM,IAAKqB,CAAAA,eAAAA,CAAgB,IAAK/C,CAAAA,WAAAA,EAAckC,SAASc,KAAK,CAAA;AAC9D,SAAA,MAAA,IAAW,CAAC,IAAK3C,CAAAA,KAAAA,CAAM+B,UAAWxB,CAAAA,GAAG,EAAEE,OAAS,EAAA;AAC9C,UAAI,IAAA,CAAC,IAAKR,CAAAA,OAAAA,CAAQ2C,gBAAkB,EAAA;AAClC,YAAA,IAAA,CAAKN,iBACH,CAA2CP,wCAAAA,EAAAA,UAAAA,CAAWxB,GAAG,CACzDgC,4BAAAA,CAAAA,EAAAA,qBAAAA,CAAsBC,OAAOK,YAC7B,EAAA;AAAExB,cAAAA;aAAK,CAAA;AAEX;AACA,UAAK5B,IAAAA,CAAAA,aAAAA,CAAciC,KAAKL,IAAAA,CAAAA;AACxB,UAAA;AACF;AAEA,QAAA,MAAMyB,IAAO,GAAA,IAAA,CAAK9C,KAAM+B,CAAAA,UAAAA,CAAWxB,GAAG,CAAA;AACtCuC,QAAKH,IAAAA,CAAAA,KAAAA,CAAMI,KAAMhB,CAAAA,UAAAA,CAAWjD,KAAK,CAAA;AACjC,QAAA,MAAM,KAAKkE,iBAAkB,CAAA;AAC3BzC,UAAAA,GAAAA,EAAKwB,UAAWxB,CAAAA,GAAAA;UAChBzB,KAAOgE,EAAAA,IAAAA,CAAKH,MAAMM,UAAU,EAAA;AAC5BC,UAAAA,KAAAA,EAAOnB,UAAWjD,CAAAA,KAAAA;AAClB6D,UAAAA,KAAAA,EAAOG,IAAKH,CAAAA;SACd,CAAA;AACA,QAAA,IAAA,CAAKhD,cAAcoC,UAAWxB,CAAAA,GAAAA;AAChC,OAAA,MAAA,IAAW,KAAKZ,WAAa,EAAA;AAC3B,QAAA,IAAI,CAAC,IAAKK,CAAAA,KAAAA,CAAM,KAAKL,WAAW,CAAA,CAAEgD,MAAMQ,GAAK,EAAA;AAC3C9B,UAAKvC,IAAAA,CAAAA,KAAAA,GAAQD,cAAewC,CAAAA,IAAAA,CAAKvC,KAAK,CAAA;AACxC;AACA,QAAA,IAAIuC,KAAKjC,OAAS,EAAA;AAChBiC,UAAAA,IAAAA,CAAKvC,KAAQ,GAAA,CAAA,EAAGF,kBAAAA,CAAAA,EAAqByC,KAAKvC,KAAK,CAAA,CAAA;AACjD;AAEA,QAAA,MAAMgE,IAAO,GAAA,IAAA,CAAK9C,KAAM,CAAA,IAAA,CAAKL,WAAW,CAAA;AACxCmD,QAAKH,IAAAA,CAAAA,KAAAA,CAAMI,KAAM1B,CAAAA,IAAAA,CAAKvC,KAAK,CAAA;AAC3B,QAAA,MAAM,KAAKkE,iBAAkB,CAAA;AAC3BzC,UAAAA,GAAAA,EAAK,IAAKZ,CAAAA,WAAAA;UACVb,KAAOgE,EAAAA,IAAAA,CAAKH,MAAMM,UAAU,EAAA;AAC5BC,UAAAA,KAAAA,EAAO7B,IAAKvC,CAAAA,KAAAA;AACZ6D,UAAAA,KAAAA,EAAOG,IAAKH,CAAAA;SACd,CAAA;OACK,MAAA;AACL,QAAKlD,IAAAA,CAAAA,aAAAA,CAAciC,KAAKL,IAAAA,CAAAA;AAC1B;AACF;AACF;AAEUiB,EAAAA,gBAAAA,CACRc,OACAC,EAAAA,MAAAA,EACAC,KAA2C,GAAA,EACpC,EAAA;AACP,IAAA,MAAM,IAAIf,qBACR,CAAA;AAAC,MAAA,CAAA,mDAAA,CAAA;AAAuDa,MAAAA;AAASG,KAAAA,CAAAA,IAAAA,CAAK3E,kBAAAA,CAAAA,EACtE0E,KAAME,CAAAA,MAAAA,IAAU,EAChB,EAAA;AACEH,MAAAA,MAAAA;MACAI,OAAS,EAAA;AACPxE,QAAAA,KAAAA,EAAOD,aAAc,CAAA,IAAA,CAAKC,KAAMI,CAAAA,MAAAA,CAAOiE,MAAMjC,IAAO,GAAA;UAACiC,KAAMjC,CAAAA;AAAQ,SAAA,GAAA,EAAE,CAAA,CAAA;QACrE5B,aAAeT,EAAAA,aAAAA,CAAc,KAAKS,aAAa,CAAA;AAC/CG,QAAAA,UAAAA,EAAY,IAAKA,CAAAA,UAAAA;AACjBC,QAAAA,YAAAA,EAAc,IAAKA,CAAAA;AACrB;KACF,CAAA;AAEJ;AAEA,EAAA,MAAMwC,GAAM,GAAA;AACV,IAAA,IAAI,KAAK3C,IAAM,EAAA;AACb,MAAA,OAAO,IAAKE,CAAAA,UAAAA;AACd;AAEA,IAAA,IAAI,CAAC,IAAA,CAAKD,WAAe,IAAA,IAAA,CAAKM,QAAQyD,QAAU,EAAA;AAC9C,MAAA,MAAMC,SAAQ3E,aAAc,CAAA;WACvB,IAAKS,CAAAA,aAAAA,CAAcmE,MAAO,CAAA,CAAA,EAAGC,QAAAA,CAAAA;WAC7B,IAAK5E,CAAAA,KAAAA,CAAM2E,MAAO,CAAA,CAAA,EAAGC,QAAAA;AACzB,OAAA,CAAA;AAED,MAAA,MAAM7D,KAAQ,GAAA,IAAA,CAAKC,OAAQyD,CAAAA,QAAAA,CAASC,MAAAA,CAAAA;AACpC,MAAM,MAAA,IAAA,CAAK1C,IACTjB,KAAM8D,CAAAA,GAAAA,CAAI,CAAChB,IAAS,KAAA,CAAA,EAAG,KAAK9C,KAAM8C,CAAAA,IAAAA,CAAKvC,GAAG,CAAEwD,CAAAA,MAAM,GAAGjB,IAAKhE,CAAAA,KAAK,EAAE,CAAEyE,CAAAA,IAAAA,CAAK3E,kBAAAA,CAAAA,CAAAA;AAE5E;AAEA,IAAA,IAAA,CAAKc,IAAO,GAAA,IAAA;AAEZ,IAAI,IAAA,CAAC,KAAKC,WAAa,EAAA;AACrB,MAAA,IAAA,CAAK2C,gBACH,CAAA,oCAAA,EACAC,qBAAsBC,CAAAA,MAAAA,CAAOwB,cAAc,CAAA;AAE/C;AAEA,IAAML,MAAAA,KAAAA,GAAQ3E,aAAc,CAAA,IAAA,CAAKC,KAAK,CAAA;AACtC,IAAA,IAAA,CAAKA,MAAMwC,MAAS,GAAA,CAAA;AAEpB,IAAA,MAAMkB,KAAQ,GAAA,IAAA,CAAK3C,KAAM,CAAA,IAAA,CAAKL,WAAW,CAAEgD,CAAAA,KAAAA;AAC3C,IAAA,IAAIgB,KAAO,EAAA;AACThB,MAAAA,KAAAA,CAAMI,MAAMY,KAAAA,CAAAA;AACZ,MAAA,MAAM,KAAKX,iBAAkB,CAAA;AAC3BzC,QAAAA,GAAAA,EAAK,IAAKZ,CAAAA,WAAAA;AACVb,QAAAA,KAAAA,EAAO6D,MAAMM,UAAU,EAAA;QACvBC,KAAOS,EAAAA,KAAAA;AACPhB,QAAAA;OACF,CAAA;AACF;AACA,IAAA,MAAM,IAAKD,CAAAA,eAAAA,CAAgB,IAAK/C,CAAAA,WAAAA,EAAagD,KAAAA,CAAAA;AAE7C,IAAA,MAAMsB,WAAc,GAAA,IAAA,CAAKjE,KAAM,CAAA,IAAA,CAAKL,WAAW,CAAA;AAC/C,IAAI,IAAA,CAACsE,YAAYvD,KAAO,EAAA;AACtB,MAAA,IAAA,CAAK4B,iBACH,CAAS,MAAA,EAAA,IAAA,CAAK3C,WAAW,CACzB4C,qBAAAA,CAAAA,EAAAA,qBAAAA,CAAsBC,OAAO0B,UAAU,CAAA;AAE3C;AAEA,IAAA,MAAMC,QAAQC,UAAWC,CAAAA,MAAAA,CAAOC,MAAO,CAAA,IAAA,CAAKtE,KAAK,CAAE8D,CAAAA,GAAAA,CAAI,CAAC,EAAEnB,OAAAA,MAAK,EAAA,KAAOA,MAAMN,CAAAA,GAAAA,EAAG,CAAA,CAAA;AAC/E,IAAA,OAAO,IAAKzC,CAAAA,UAAAA;AACd;AAEA,EAAA,MAAgBoD,kBAAkBuB,IAAyD,EAAA;AACzF,IAAIA,IAAAA,IAAAA,CAAKhE,GAAO,IAAA,IAAA,CAAKX,UAAY,EAAA;AAC/B,MAAA,IAAA,CAAK0C,iBACH,CAAkDiC,+CAAAA,EAAAA,IAAAA,CAAKhE,GAAG,CAC1DgC,CAAAA,CAAAA,EAAAA,qBAAAA,CAAsBC,OAAOgC,gBAAgB,CAAA;AAEjD;AACA,IAAA,IAAI,EAAED,IAAAA,CAAKhE,GAAO,IAAA,IAAA,CAAKV,YAAe,CAAA,EAAA;AACpC,MAAKA,IAAAA,CAAAA,YAAAA,CAAa0E,IAAKhE,CAAAA,GAAG,CAAI,GAAA,EAAA;AAChC;AACA,IAAA,IAAA,CAAKV,YAAa0E,CAAAA,IAAAA,CAAKhE,GAAG,CAAA,IAAKgE,IAAKrB,CAAAA,KAAAA;AACpC,IAAA,IAAI,CAAC,IAAKjD,CAAAA,OAAAA,CAAQwE,aAAatC,QAASoC,CAAAA,IAAAA,CAAKhE,GAAG,CAAG,EAAA;AACjD,MAAA,MAAM,IAAKf,CAAAA,OAAAA,CAAQkF,IAAK,CAAA,eAAA,EAAiBH,IAAAA,CAAAA;AAC3C;AACF;EAEA,MAAgB7B,eAAAA,CAAgBnC,KAAmBoC,KAA8B,EAAA;AAC/E,IAAIpC,IAAAA,GAAAA,IAAO,KAAKX,UAAY,EAAA;AAC1B,MAAA,IAAA,CAAK0C,iBACH,CAAmB/B,gBAAAA,EAAAA,GAAAA,CACnBgC,CAAAA,CAAAA,EAAAA,qBAAAA,CAAsBC,OAAOgC,gBAAgB,CAAA;AAEjD;AAEA,IAAI,IAAA;AACF,MAAM1F,MAAAA,KAAAA,GAAQ6D,MAAMgC,GAAG,EAAA;AACvB,MAAK/E,IAAAA,CAAAA,UAAAA,CAAWW,GAAAA,CAAOzB,GAAAA,KAAAA;AACvB,MAAA,IAAI,CAAC,IAAKmB,CAAAA,OAAAA,CAAQwE,WAAatC,EAAAA,QAAAA,CAAS5B,GAAAA,CAAM,EAAA;AAC5C,QAAM,MAAA,IAAA,CAAKf,OAAQkF,CAAAA,IAAAA,CAAK,QAAU,EAAA;AAChCnE,UAAAA,GAAAA;AACAoC,UAAAA,KAAAA;AACA7D,UAAAA;SACF,CAAA;AACF;AACF,KAAA,CAAA,OAAS8F,CAAG,EAAA;AACV,MAAA,IAAIA,aAAaC,QAAU,EAAA;AACzB,QAAA,IAAA,CAAKvC,iBACH,CAAc/B,WAAAA,EAAAA,GAAAA,CACdgC,mFAAAA,CAAAA,EAAAA,qBAAAA,CAAsBC,OAAOsC,aAC7B,EAAA;UAAEtB,MAAQ,EAAA;AAACoB,YAAAA;;SAAG,CAAA;AAElB;AACA,MAAMA,MAAAA,CAAAA;AACR;AACF;AAEA,EAAA,IACcG,eAAkB,GAAA;AAC9B,IAAOpE,OAAAA,OAAAA,CAAQ,IAAKX,CAAAA,KAAK,CACtBgF,CAAAA,IAAAA,CAAK,CAAC,CAACC,CAAGC,EAAAA,CAAAA,CAAI,EAAA,CAACC,EAAIC,EAAAA,CAAAA,MAAOF,CAAEnB,CAAAA,MAAAA,CAAOtC,MAAS2D,GAAAA,CAAAA,CAAErB,MAAOtC,CAAAA,MAAM,CAC3DqC,CAAAA,GAAAA,CAAI,CAAC,CAACvD,GAAKzB,EAAAA,KAAAA,CAAM,KAAA;AAChB,MAAO,OAAA;AAACyB,QAAAA,GAAAA;AAAK,QAAA;UAAE8E,eAAiBvG,EAAAA,KAAAA,CAAMiF,OAAOuB,WAAW,EAAA;UAAIC,GAAKzG,EAAAA;AAAM;;KACzE,CAAA;AACJ;AAEUkD,EAAAA,WAAAA,CAAYX,IAAuC,EAAA;AAC3D,IAAMmE,MAAAA,WAAAA,GAAc3G,eAAewC,IAAAA,CAAAA;AACnC,IAAA,IAAI,CAACmE,WAAa,EAAA;AAChB,MAAO,OAAA,IAAA;AACT;AAEA,IAAA,KAAA,MAAW,CAACjF,GAAAA,EAAKuC,IAAAA,CAAAA,IAAS,KAAKiC,eAAiB,EAAA;AAC9C,MAAA,MAAM9C,OAAUa,GAAAA,IAAAA,CAAKuC,eAAgB5D,CAAAA,MAAAA,GAAS+D,WAAY/D,CAAAA,MAAAA;AAC1D,MAAA,MAAM,CAACyD,CAAAA,EAAGE,CAAAA,CAAAA,GAAKnD,OACX,GAAA;QAACa,IAAKuC,CAAAA,eAAAA;AAAiBG,QAAAA;AACvB,OAAA,GAAA;AAACA,QAAAA,WAAAA;QAAa1C,IAAKuC,CAAAA;;AAEvB,MAAA,IAAIH,EAAEI,WAAW,EAAA,CAAGG,WAAWL,CAAEE,CAAAA,WAAAA,EAAW,CAAK,EAAA;AAC/C,QAAO,OAAA;AACL/E,UAAAA,GAAAA;AACAzB,UAAAA,KAAAA,EAAOmD,UAAUuD,WAAc3G,GAAAA,cAAAA,CAAeqG,EAAEQ,SAAUN,CAAAA,CAAAA,CAAE3D,MAAM,CAAA,CAAA;AAClEQ,UAAAA;AACF,SAAA;AACF;AACF;AACA,IAAO,OAAA,IAAA;AACT;EAEA0D,cAAiB,GAAA;AACf,IAAO,OAAA;MACL3F,KAAO4F,EAAAA,WAAAA,CAAY,KAAK5F,KAAK,CAAA;MAC7Bf,KAAO2G,EAAAA,WAAAA,CAAY,KAAK3G,KAAK,CAAA;AAC7BO,MAAAA,OAAAA,EAAS,IAAKA,CAAAA,OAAAA;AACdE,MAAAA,IAAAA,EAAM,IAAKA,CAAAA,IAAAA;AACXC,MAAAA,WAAAA,EAAa,IAAKA,CAAAA,WAAAA;AAClBM,MAAAA,OAAAA,EAAS,IAAKA,CAAAA;AAChB,KAAA;AACF;AAEA4F,EAAAA,YAAAA,CAAaC,QAAkD,EAAA;AAC7DzB,IAAO0B,MAAAA,CAAAA,MAAAA,CAAO,MAAMD,QAAAA,CAAAA;AACtB;AACF","file":"linePrefix.js","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { entries } from \"remeda\";\nimport { ValueError } from \"@/errors.js\";\nimport { Serializable } from \"@/internals/serializable.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport { ParserField } from \"@/parsers/field.js\";\nimport { Callback, InferCallbackValue } from \"@/emitter/types.js\";\nimport { ZodError } from \"zod\";\nimport { ValueOf } from \"@/internals/types.js\";\nimport { LinePrefixParserError } from \"@/parsers/errors.js\";\nexport * from \"@/parsers/errors.js\";\n\nexport interface ParserNode<T extends string, P extends ParserField<any, any>> {\n prefix: string;\n next: readonly T[];\n isStart?: boolean;\n isEnd?: boolean;\n field: P;\n}\n\ntype Customizer<T extends NonNullable<unknown>, T2 extends NonNullable<unknown> = T> = (\n nodes: T,\n options: Options<T>,\n) => { nodes: T2; options: Options<T2> };\n\ntype StringKey<T extends NonNullable<unknown>> = Extract<keyof T, string>;\n\ninterface Callbacks<T extends Record<string, ParserNode<StringKey<T>, ParserField<any, any>>>> {\n update: Callback<\n {\n [K in StringKey<T>]: {\n key: K;\n value: ParserField.inferValue<T[K][\"field\"]>;\n field: T[K][\"field\"];\n };\n }[StringKey<T>]\n >;\n partialUpdate: Callback<\n {\n [K in StringKey<T>]: {\n key: K;\n delta: string;\n value: ParserField.inferPartialValue<T[K][\"field\"]>;\n field: T[K][\"field\"];\n };\n }[StringKey<T>]\n >;\n}\n\ninterface Line {\n value: string;\n newLine: boolean;\n}\n\nconst NEW_LINE_CHARACTER = \"\\n\" as const;\n\ninterface ExtractedLine<T extends NonNullable<unknown>> {\n key: StringKey<T>;\n value: string;\n partial: boolean;\n}\n\nconst trimLeftSpaces = (value: string) => value.replace(/^\\s*/g, \"\");\nconst linesToString = (lines: Line[]) =>\n lines.reduce(\n (acc, { newLine, value }) => `${acc}${newLine ? NEW_LINE_CHARACTER.concat(value) : value}`,\n \"\",\n );\n\ninterface Options<T extends NonNullable<unknown>> {\n fallback?: (value: string) => readonly { key: StringKey<T>; value: string }[];\n endOnRepeat?: boolean;\n waitForStartNode?: boolean;\n silentNodes?: StringKey<T>[];\n}\n\ntype Input<K extends string = string> = Record<string, ParserNode<K, ParserField<any, any>>>;\n\nexport class LinePrefixParser<T extends Input<StringKey<T>>> extends Serializable {\n public readonly emitter = new Emitter<Callbacks<T>>({\n creator: this,\n namespace: [\"agent\", \"parser\", \"line\"],\n });\n\n protected readonly lines: Line[] = [];\n protected readonly excludedLines: Line[] = [];\n protected done = false;\n protected lastNodeKey: StringKey<T> | null = null;\n\n public readonly finalState = {} as LinePrefixParser.infer<T>;\n public readonly partialState = {} as Partial<Record<StringKey<T>, string>>;\n\n get isDone() {\n return this.done;\n }\n\n constructor(\n protected readonly nodes: T,\n protected readonly options: Options<T> = {},\n ) {\n super();\n\n let hasStartNode = false;\n let hasEndNode = false;\n\n for (const [key, { next, isStart, isEnd }] of entries(nodes ?? {})) {\n hasStartNode = Boolean(hasStartNode || isStart);\n hasEndNode = Boolean(hasEndNode || isEnd);\n\n for (const nextKey of next) {\n if (key === nextKey) {\n throw new ValueError(`Node '${key}' cannot point to itself.`);\n }\n if (!(nextKey in nodes)) {\n throw new ValueError(\n `Node '${key}' contains a transition to non-existing node '${nextKey}'.`,\n );\n }\n }\n }\n\n if (!hasStartNode) {\n throw new ValueError(`At least one start node must be provided!`);\n }\n if (!hasEndNode) {\n throw new ValueError(`At least one end node must be provided!`);\n }\n }\n\n fork<R extends T = T>(customizer: Customizer<T, R>) {\n const { nodes, options } = customizer(this.nodes, this.options);\n return new LinePrefixParser(nodes, options);\n }\n\n async add(chunk: string) {\n if (!chunk || this.done) {\n return;\n }\n\n chunk.split(NEW_LINE_CHARACTER).forEach((line, i, arr) => {\n const isFirstLine = i === 0;\n\n if (isFirstLine) {\n if (this.lines.length === 0) {\n this.lines.push({ newLine: false, value: line });\n } else {\n this.lines.at(-1)!.value += line;\n }\n } else {\n this.lines.push({ newLine: arr.length > 1, value: line });\n }\n });\n\n while (this.lines.length > 0) {\n const line = this.lines[0];\n const isLastLine = this.lines.length === 1;\n\n const lastNode = this.lastNodeKey ? this.nodes[this.lastNodeKey] : null;\n const isTerminationNode = lastNode\n ? Boolean(lastNode.isEnd && lastNode.next.length === 0)\n : false;\n\n const parsedLine =\n isTerminationNode || (lastNode && !line.newLine) ? null : this.extractLine(line.value);\n\n if (isLastLine && (parsedLine?.partial || !line.value)) {\n break;\n }\n this.lines.shift();\n\n if (parsedLine && !parsedLine.partial) {\n if (lastNode) {\n if (!lastNode.next.includes(parsedLine.key)) {\n if (parsedLine.key in this.finalState && this.options.endOnRepeat && lastNode.isEnd) {\n await this.end();\n return;\n }\n\n this.throwWithContext(\n `Transition from '${this.lastNodeKey}' to '${parsedLine.key}' does not exist!`,\n LinePrefixParserError.Reason.InvalidTransition,\n { line },\n );\n }\n\n await this.emitFinalUpdate(this.lastNodeKey!, lastNode.field);\n } else if (!this.nodes[parsedLine.key].isStart) {\n if (!this.options.waitForStartNode) {\n this.throwWithContext(\n `Parsed text line corresponds to a node \"${parsedLine.key}\" which is not a start node!`,\n LinePrefixParserError.Reason.NotStartNode,\n { line },\n );\n }\n this.excludedLines.push(line);\n continue;\n }\n\n const node = this.nodes[parsedLine.key];\n node.field.write(parsedLine.value);\n await this.emitPartialUpdate({\n key: parsedLine.key,\n value: node.field.getPartial(),\n delta: parsedLine.value,\n field: node.field,\n });\n this.lastNodeKey = parsedLine.key;\n } else if (this.lastNodeKey) {\n if (!this.nodes[this.lastNodeKey].field.raw) {\n line.value = trimLeftSpaces(line.value);\n }\n if (line.newLine) {\n line.value = `${NEW_LINE_CHARACTER}${line.value}`;\n }\n\n const node = this.nodes[this.lastNodeKey];\n node.field.write(line.value);\n await this.emitPartialUpdate({\n key: this.lastNodeKey,\n value: node.field.getPartial(),\n delta: line.value,\n field: node.field,\n });\n } else {\n this.excludedLines.push(line);\n }\n }\n }\n\n protected throwWithContext(\n message: string,\n reason: ValueOf<typeof LinePrefixParserError.Reason>,\n extra: { line?: Line; errors?: Error[] } = {},\n ): never {\n throw new LinePrefixParserError(\n [`The generated output does not adhere to the schema.`, message].join(NEW_LINE_CHARACTER),\n extra.errors ?? [],\n {\n reason,\n context: {\n lines: linesToString(this.lines.concat(extra.line ? [extra.line] : [])),\n excludedLines: linesToString(this.excludedLines),\n finalState: this.finalState,\n partialState: this.partialState,\n },\n },\n );\n }\n\n async end() {\n if (this.done) {\n return this.finalState;\n }\n\n if (!this.lastNodeKey && this.options.fallback) {\n const stash = linesToString([\n ...this.excludedLines.splice(0, Infinity),\n ...this.lines.splice(0, Infinity),\n ]);\n\n const nodes = this.options.fallback(stash);\n await this.add(\n nodes.map((node) => `${this.nodes[node.key].prefix}${node.value}`).join(NEW_LINE_CHARACTER),\n );\n }\n\n this.done = true;\n\n if (!this.lastNodeKey) {\n this.throwWithContext(\n \"Nothing valid has been parsed yet!\",\n LinePrefixParserError.Reason.NoDataReceived,\n );\n }\n\n const stash = linesToString(this.lines);\n this.lines.length = 0;\n\n const field = this.nodes[this.lastNodeKey].field!;\n if (stash) {\n field.write(stash);\n await this.emitPartialUpdate({\n key: this.lastNodeKey,\n value: field.getPartial(),\n delta: stash,\n field,\n });\n }\n await this.emitFinalUpdate(this.lastNodeKey, field);\n\n const currentNode = this.nodes[this.lastNodeKey];\n if (!currentNode.isEnd) {\n this.throwWithContext(\n `Node '${this.lastNodeKey}' is not an end node.`,\n LinePrefixParserError.Reason.NotEndNode,\n );\n }\n\n await Promise.allSettled(Object.values(this.nodes).map(({ field }) => field.end()));\n return this.finalState;\n }\n\n protected async emitPartialUpdate(data: InferCallbackValue<Callbacks<T>[\"partialUpdate\"]>) {\n if (data.key in this.finalState) {\n this.throwWithContext(\n `Cannot update partial event for completed key '${data.key}'`,\n LinePrefixParserError.Reason.AlreadyCompleted,\n );\n }\n if (!(data.key in this.partialState)) {\n this.partialState[data.key] = \"\";\n }\n this.partialState[data.key] += data.delta;\n if (!this.options.silentNodes?.includes(data.key)) {\n await this.emitter.emit(\"partialUpdate\", data);\n }\n }\n\n protected async emitFinalUpdate(key: StringKey<T>, field: ParserField<any, any>) {\n if (key in this.finalState) {\n this.throwWithContext(\n `Duplicated key '${key}'`,\n LinePrefixParserError.Reason.AlreadyCompleted,\n );\n }\n\n try {\n const value = field.get();\n this.finalState[key] = value;\n if (!this.options.silentNodes?.includes(key)) {\n await this.emitter.emit(\"update\", {\n key,\n field,\n value,\n });\n }\n } catch (e) {\n if (e instanceof ZodError) {\n this.throwWithContext(\n `Value for '${key}' cannot be retrieved because it's value does not adhere to the appropriate schema.`,\n LinePrefixParserError.Reason.InvalidSchema,\n { errors: [e] },\n );\n }\n throw e;\n }\n }\n\n @Cache()\n protected get normalizedNodes() {\n return entries(this.nodes)\n .sort(([_, a], [__, b]) => a.prefix.length - b.prefix.length)\n .map(([key, value]) => {\n return [key, { lowerCasePrefix: value.prefix.toLowerCase(), ref: value }] as const;\n });\n }\n\n protected extractLine(line: string): ExtractedLine<T> | null {\n const trimmedLine = trimLeftSpaces(line);\n if (!trimmedLine) {\n return null;\n }\n\n for (const [key, node] of this.normalizedNodes) {\n const partial = node.lowerCasePrefix.length > trimmedLine.length;\n const [a, b] = partial\n ? [node.lowerCasePrefix, trimmedLine]\n : [trimmedLine, node.lowerCasePrefix];\n\n if (a.toLowerCase().startsWith(b.toLowerCase())) {\n return {\n key: key as StringKey<T>,\n value: partial ? trimmedLine : trimLeftSpaces(a.substring(b.length)),\n partial,\n };\n }\n }\n return null;\n }\n\n createSnapshot() {\n return {\n nodes: shallowCopy(this.nodes),\n lines: shallowCopy(this.lines),\n emitter: this.emitter,\n done: this.done,\n lastNodeKey: this.lastNodeKey,\n options: this.options,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace LinePrefixParser {\n export type infer<T extends Record<string, ParserNode<StringKey<T>, ParserField<any, any>>>> = {\n [K in keyof T]: ParserField.inferValue<T[K][\"field\"]>;\n };\n export type inferPartial<\n T extends Record<string, ParserNode<StringKey<T>, ParserField<any, any>>>,\n > = {\n [K in StringKey<T>]: ParserField.inferPartialValue<T[K][\"field\"]>;\n };\n\n export type inferCallback<T> =\n T extends LinePrefixParser<any> ? (T[\"emitter\"] extends Emitter<infer L> ? L : never) : never;\n\n export type inferOutput<T> =\n T extends LinePrefixParser<infer P> ? LinePrefixParser.infer<P> : never;\n\n export type inferPartialOutput<T> =\n T extends LinePrefixParser<infer P> ? LinePrefixParser.inferPartial<P> : never;\n\n export type define<T extends Record<string, ParserField<any, any>>> = {\n [K in StringKey<T>]: ParserNode<StringKey<T>, T[K]>;\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["
|
|
1
|
+
{"version":3,"sources":["error.ts"],"names":["SerializerError","FrameworkError","constructor","message","errors","isFatal","isRetryable"],"mappings":";;;;;;AAkBO,MAAMA,wBAAwBC,yBAAAA,CAAAA;EAlBrC;;;AAmBEC,EAAAA,WAAAA,CAAYC,SAAiBC,MAAkB,EAAA;AAC7C,IAAA,KAAA,CAAMD,SAASC,MAAQ,EAAA;MACrBC,OAAS,EAAA,IAAA;MACTC,WAAa,EAAA;KACf,CAAA;AACF;AACF","file":"error.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FrameworkError } from \"@/errors.js\";\n\nexport class SerializerError extends FrameworkError {\n constructor(message: string, errors?: Error[]) {\n super(message, errors, {\n isFatal: true,\n isRetryable: false,\n });\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["
|
|
1
|
+
{"version":3,"sources":["error.ts"],"names":["SerializerError","FrameworkError","constructor","message","errors","isFatal","isRetryable"],"mappings":";;;;AAkBO,MAAMA,wBAAwBC,cAAAA,CAAAA;EAlBrC;;;AAmBEC,EAAAA,WAAAA,CAAYC,SAAiBC,MAAkB,EAAA;AAC7C,IAAA,KAAA,CAAMD,SAASC,MAAQ,EAAA;MACrBC,OAAS,EAAA,IAAA;MACTC,WAAa,EAAA;KACf,CAAA;AACF;AACF","file":"error.js","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FrameworkError } from \"@/errors.js\";\n\nexport class SerializerError extends FrameworkError {\n constructor(message: string, errors?: Error[]) {\n super(message, errors, {\n isFatal: true,\n isRetryable: false,\n });\n }\n}\n"]}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var R = require('remeda');
|
|
4
4
|
var serializable_cjs = require('../internals/serializable.cjs');
|
|
5
5
|
var weakRef_cjs = require('../internals/helpers/weakRef.cjs');
|
|
6
|
-
var
|
|
6
|
+
var serializeErrorCjs = require('serialize-error-cjs');
|
|
7
7
|
var version_cjs = require('../version.cjs');
|
|
8
8
|
var utils_cjs = require('./utils.cjs');
|
|
9
9
|
var promiseBasedTask = require('promise-based-task');
|
|
@@ -469,8 +469,8 @@ Serializer.register(Function, {
|
|
|
469
469
|
}, "fromPlain")
|
|
470
470
|
});
|
|
471
471
|
Serializer.register(Error, {
|
|
472
|
-
toPlain: /* @__PURE__ */ __name((value) =>
|
|
473
|
-
fromPlain: /* @__PURE__ */ __name((value) =>
|
|
472
|
+
toPlain: /* @__PURE__ */ __name((value) => serializeErrorCjs.serializeError(value), "toPlain"),
|
|
473
|
+
fromPlain: /* @__PURE__ */ __name((value) => serializeErrorCjs.deserializeError(value), "fromPlain")
|
|
474
474
|
});
|
|
475
475
|
Serializer.register(RegExp, {
|
|
476
476
|
toPlain: /* @__PURE__ */ __name((value) => ({
|