@pipedog/core 0.0.0 → 0.2.0
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/LICENSE +25 -0
- package/NOTICE +9 -0
- package/dist/adapters/base_llm_adapter.d.ts +266 -0
- package/dist/adapters/base_llm_adapter.js +489 -0
- package/dist/adapters/index.d.ts +2 -0
- package/dist/adapters/index.js +8 -0
- package/dist/adapters/schemas/direct_function.d.ts +202 -0
- package/dist/adapters/schemas/direct_function.js +302 -0
- package/dist/adapters/schemas/function_schema.d.ts +67 -0
- package/dist/adapters/schemas/function_schema.js +72 -0
- package/dist/adapters/schemas/index.d.ts +2 -0
- package/dist/adapters/schemas/index.js +8 -0
- package/dist/adapters/schemas/tools_schema.d.ts +57 -0
- package/dist/adapters/schemas/tools_schema.js +79 -0
- package/dist/adapters/services/index.d.ts +2 -0
- package/dist/adapters/services/index.js +8 -0
- package/dist/adapters/services/open_ai_adapter.d.ts +147 -0
- package/dist/adapters/services/open_ai_adapter.js +250 -0
- package/dist/audio/dtmf/dtmf_data.d.ts +3 -0
- package/dist/audio/dtmf/dtmf_data.js +22 -0
- package/dist/audio/dtmf/index.d.ts +2 -0
- package/dist/audio/dtmf/index.js +8 -0
- package/dist/audio/dtmf/types.d.ts +31 -0
- package/dist/audio/dtmf/types.js +35 -0
- package/dist/audio/dtmf/utils.d.ts +13 -0
- package/dist/audio/dtmf/utils.js +62 -0
- package/dist/audio/filters/base_audio_filter.d.ts +51 -0
- package/dist/audio/filters/base_audio_filter.js +17 -0
- package/dist/audio/filters/index.d.ts +2 -0
- package/dist/audio/filters/index.js +8 -0
- package/dist/audio/index.d.ts +2 -0
- package/dist/audio/index.js +8 -0
- package/dist/audio/krisp_instance.d.ts +95 -0
- package/dist/audio/krisp_instance.js +229 -0
- package/dist/audio/mixers/base_audio_mixer.d.ts +56 -0
- package/dist/audio/mixers/base_audio_mixer.js +16 -0
- package/dist/audio/mixers/index.d.ts +2 -0
- package/dist/audio/mixers/index.js +8 -0
- package/dist/audio/resamplers/base_audio_resampler.d.ts +46 -0
- package/dist/audio/resamplers/base_audio_resampler.js +35 -0
- package/dist/audio/resamplers/engine.d.ts +60 -0
- package/dist/audio/resamplers/engine.js +89 -0
- package/dist/audio/resamplers/index.d.ts +2 -0
- package/dist/audio/resamplers/index.js +8 -0
- package/dist/audio/resamplers/resampy_resampler.d.ts +10 -0
- package/dist/audio/resamplers/resampy_resampler.js +15 -0
- package/dist/audio/resamplers/sinc_engine.d.ts +10 -0
- package/dist/audio/resamplers/sinc_engine.js +235 -0
- package/dist/audio/resamplers/soxr_resampler.d.ts +58 -0
- package/dist/audio/resamplers/soxr_resampler.js +79 -0
- package/dist/audio/resamplers/soxr_stream_resampler.d.ts +78 -0
- package/dist/audio/resamplers/soxr_stream_resampler.js +159 -0
- package/dist/audio/turn/base_turn_analyzer.d.ts +84 -0
- package/dist/audio/turn/base_turn_analyzer.js +61 -0
- package/dist/audio/turn/index.d.ts +2 -0
- package/dist/audio/turn/index.js +8 -0
- package/dist/audio/turn/smart_turn/_whisper_features.d.ts +30 -0
- package/dist/audio/turn/smart_turn/_whisper_features.js +225 -0
- package/dist/audio/turn/smart_turn/base_smart_turn.d.ts +94 -0
- package/dist/audio/turn/smart_turn/base_smart_turn.js +239 -0
- package/dist/audio/turn/smart_turn/local_smart_turn_v3.d.ts +76 -0
- package/dist/audio/turn/smart_turn/local_smart_turn_v3.js +151 -0
- package/dist/audio/utils.d.ts +224 -0
- package/dist/audio/utils.js +634 -0
- package/dist/audio/vad/data/index.d.ts +2 -0
- package/dist/audio/vad/data/index.js +8 -0
- package/dist/audio/vad/index.d.ts +2 -0
- package/dist/audio/vad/index.js +8 -0
- package/dist/audio/vad/vad_analyzer.d.ts +134 -0
- package/dist/audio/vad/vad_analyzer.js +249 -0
- package/dist/audio/vad/vad_controller.d.ts +143 -0
- package/dist/audio/vad/vad_controller.js +228 -0
- package/dist/audio/volume.d.ts +38 -0
- package/dist/audio/volume.js +75 -0
- package/dist/bus/adapters/base.d.ts +35 -0
- package/dist/bus/adapters/base.js +19 -0
- package/dist/bus/adapters/index.d.ts +10 -0
- package/dist/bus/adapters/index.js +15 -0
- package/dist/bus/adapters/llm_context_adapter.d.ts +36 -0
- package/dist/bus/adapters/llm_context_adapter.js +82 -0
- package/dist/bus/adapters/tools_schema_adapter.d.ts +25 -0
- package/dist/bus/adapters/tools_schema_adapter.js +70 -0
- package/dist/bus/bridge_processor.d.ts +111 -0
- package/dist/bus/bridge_processor.js +166 -0
- package/dist/bus/bus.d.ts +110 -0
- package/dist/bus/bus.js +200 -0
- package/dist/bus/index.d.ts +22 -0
- package/dist/bus/index.js +27 -0
- package/dist/bus/local/async_queue.d.ts +12 -0
- package/dist/bus/local/async_queue.js +21 -0
- package/dist/bus/local/index.d.ts +3 -0
- package/dist/bus/local/index.js +8 -0
- package/dist/bus/messages.d.ts +378 -0
- package/dist/bus/messages.js +357 -0
- package/dist/bus/network/index.d.ts +16 -0
- package/dist/bus/network/index.js +21 -0
- package/dist/bus/queue.d.ts +27 -0
- package/dist/bus/queue.js +51 -0
- package/dist/bus/serializers/base.d.ts +25 -0
- package/dist/bus/serializers/base.js +14 -0
- package/dist/bus/serializers/index.d.ts +9 -0
- package/dist/bus/serializers/index.js +14 -0
- package/dist/bus/serializers/json.d.ts +77 -0
- package/dist/bus/serializers/json.js +367 -0
- package/dist/bus/subscriber.d.ts +46 -0
- package/dist/bus/subscriber.js +27 -0
- package/dist/bus/ui/index.d.ts +3 -0
- package/dist/bus/ui/index.js +8 -0
- package/dist/bus/ui/messages.d.ts +186 -0
- package/dist/bus/ui/messages.js +171 -0
- package/dist/classifiers/base_classifier.d.ts +263 -0
- package/dist/classifiers/base_classifier.js +346 -0
- package/dist/classifiers/cloudflare/clef/classifier.d.ts +70 -0
- package/dist/classifiers/cloudflare/clef/classifier.js +204 -0
- package/dist/classifiers/cloudflare/clef/client.d.ts +104 -0
- package/dist/classifiers/cloudflare/clef/client.js +234 -0
- package/dist/classifiers/cloudflare/clef/index.d.ts +2 -0
- package/dist/classifiers/cloudflare/clef/index.js +8 -0
- package/dist/classifiers/cloudflare/index.d.ts +2 -0
- package/dist/classifiers/cloudflare/index.js +8 -0
- package/dist/classifiers/http_client.d.ts +70 -0
- package/dist/classifiers/http_client.js +161 -0
- package/dist/classifiers/index.d.ts +2 -0
- package/dist/classifiers/index.js +8 -0
- package/dist/classifiers/jev/classifier.d.ts +8 -0
- package/dist/classifiers/jev/classifier.js +13 -0
- package/dist/classifiers/jev/client.d.ts +8 -0
- package/dist/classifiers/jev/client.js +13 -0
- package/dist/classifiers/jev/index.d.ts +2 -0
- package/dist/classifiers/jev/index.js +8 -0
- package/dist/classifiers/llm/classifier.d.ts +72 -0
- package/dist/classifiers/llm/classifier.js +304 -0
- package/dist/classifiers/llm/index.d.ts +2 -0
- package/dist/classifiers/llm/index.js +8 -0
- package/dist/classifiers/openai/decisions/classifier.d.ts +77 -0
- package/dist/classifiers/openai/decisions/classifier.js +241 -0
- package/dist/classifiers/openai/decisions/client.d.ts +108 -0
- package/dist/classifiers/openai/decisions/client.js +234 -0
- package/dist/classifiers/openai/decisions/index.d.ts +2 -0
- package/dist/classifiers/openai/decisions/index.js +8 -0
- package/dist/classifiers/openai/index.d.ts +2 -0
- package/dist/classifiers/openai/index.js +8 -0
- package/dist/classifiers/typesafe/index.d.ts +2 -0
- package/dist/classifiers/typesafe/index.js +8 -0
- package/dist/classifiers/typesafe/jev/classifier.d.ts +70 -0
- package/dist/classifiers/typesafe/jev/classifier.js +220 -0
- package/dist/classifiers/typesafe/jev/client.d.ts +105 -0
- package/dist/classifiers/typesafe/jev/client.js +233 -0
- package/dist/classifiers/typesafe/jev/index.d.ts +2 -0
- package/dist/classifiers/typesafe/jev/index.js +8 -0
- package/dist/clocks/base_clock.d.ts +13 -0
- package/dist/clocks/base_clock.js +14 -0
- package/dist/clocks/index.d.ts +2 -0
- package/dist/clocks/index.js +8 -0
- package/dist/clocks/system_clock.d.ts +15 -0
- package/dist/clocks/system_clock.js +25 -0
- package/dist/frames/frames.d.ts +2533 -0
- package/dist/frames/frames.js +2485 -0
- package/dist/frames/index.d.ts +2 -0
- package/dist/frames/index.js +8 -0
- package/dist/frames/protobufs/frames_pb2.d.ts +229 -0
- package/dist/frames/protobufs/frames_pb2.js +466 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +56 -0
- package/dist/metrics/index.d.ts +2 -0
- package/dist/metrics/index.js +8 -0
- package/dist/metrics/metrics.d.ts +276 -0
- package/dist/metrics/metrics.js +254 -0
- package/dist/observers/base_observer.d.ts +173 -0
- package/dist/observers/base_observer.js +151 -0
- package/dist/observers/error_observer.d.ts +75 -0
- package/dist/observers/error_observer.js +87 -0
- package/dist/observers/function_call_observer.d.ts +157 -0
- package/dist/observers/function_call_observer.js +222 -0
- package/dist/observers/index.d.ts +2 -0
- package/dist/observers/index.js +8 -0
- package/dist/observers/loggers/debug_log_observer.d.ts +91 -0
- package/dist/observers/loggers/debug_log_observer.js +228 -0
- package/dist/observers/loggers/index.d.ts +2 -0
- package/dist/observers/loggers/index.js +8 -0
- package/dist/observers/loggers/llm_log_observer.d.ts +24 -0
- package/dist/observers/loggers/llm_log_observer.js +110 -0
- package/dist/observers/loggers/metrics_log_observer.d.ts +85 -0
- package/dist/observers/loggers/metrics_log_observer.js +186 -0
- package/dist/observers/loggers/transcription_log_observer.d.ts +23 -0
- package/dist/observers/loggers/transcription_log_observer.js +74 -0
- package/dist/observers/service_metrics_observer.d.ts +168 -0
- package/dist/observers/service_metrics_observer.js +236 -0
- package/dist/observers/speaking_observer.d.ts +104 -0
- package/dist/observers/speaking_observer.js +150 -0
- package/dist/observers/startup_timing_observer.d.ts +221 -0
- package/dist/observers/startup_timing_observer.js +365 -0
- package/dist/observers/turn_tracking_observer.d.ts +78 -0
- package/dist/observers/turn_tracking_observer.js +189 -0
- package/dist/observers/user_bot_latency_observer.d.ts +411 -0
- package/dist/observers/user_bot_latency_observer.js +974 -0
- package/dist/pipeline/base_pipeline.d.ts +49 -0
- package/dist/pipeline/base_pipeline.js +101 -0
- package/dist/pipeline/capabilities.d.ts +76 -0
- package/dist/pipeline/capabilities.js +97 -0
- package/dist/pipeline/index.d.ts +2 -0
- package/dist/pipeline/index.js +8 -0
- package/dist/pipeline/job_context.d.ts +317 -0
- package/dist/pipeline/job_context.js +450 -0
- package/dist/pipeline/job_decorator.d.ts +54 -0
- package/dist/pipeline/job_decorator.js +92 -0
- package/dist/pipeline/llm_switcher.d.ts +84 -0
- package/dist/pipeline/llm_switcher.js +107 -0
- package/dist/pipeline/llm_with_backend.d.ts +435 -0
- package/dist/pipeline/llm_with_backend.js +806 -0
- package/dist/pipeline/parallel_pipeline.d.ts +83 -0
- package/dist/pipeline/parallel_pipeline.js +200 -0
- package/dist/pipeline/pipeline.d.ts +126 -0
- package/dist/pipeline/pipeline.js +196 -0
- package/dist/pipeline/service_switcher.d.ts +287 -0
- package/dist/pipeline/service_switcher.js +509 -0
- package/dist/pipeline/sync_parallel_pipeline.d.ts +192 -0
- package/dist/pipeline/sync_parallel_pipeline.js +387 -0
- package/dist/pipeline/worker.d.ts +821 -0
- package/dist/pipeline/worker.js +1656 -0
- package/dist/pipeline/worker_observer.d.ts +131 -0
- package/dist/pipeline/worker_observer.js +274 -0
- package/dist/pipeline/worker_ready_decorator.d.ts +45 -0
- package/dist/pipeline/worker_ready_decorator.js +76 -0
- package/dist/processors/aggregators/async_tool_messages.d.ts +146 -0
- package/dist/processors/aggregators/async_tool_messages.js +291 -0
- package/dist/processors/aggregators/dtmf_aggregator.d.ts +61 -0
- package/dist/processors/aggregators/dtmf_aggregator.js +144 -0
- package/dist/processors/aggregators/gated.d.ts +43 -0
- package/dist/processors/aggregators/gated.js +86 -0
- package/dist/processors/aggregators/gated_llm_context.d.ts +42 -0
- package/dist/processors/aggregators/gated_llm_context.js +86 -0
- package/dist/processors/aggregators/index.d.ts +2 -0
- package/dist/processors/aggregators/index.js +8 -0
- package/dist/processors/aggregators/llm_context.d.ts +370 -0
- package/dist/processors/aggregators/llm_context.js +580 -0
- package/dist/processors/aggregators/llm_context_summarizer.d.ts +219 -0
- package/dist/processors/aggregators/llm_context_summarizer.js +447 -0
- package/dist/processors/aggregators/llm_response.d.ts +37 -0
- package/dist/processors/aggregators/llm_response.js +71 -0
- package/dist/processors/aggregators/llm_response_universal.d.ts +966 -0
- package/dist/processors/aggregators/llm_response_universal.js +2394 -0
- package/dist/processors/aggregators/llm_text_processor.d.ts +53 -0
- package/dist/processors/aggregators/llm_text_processor.js +102 -0
- package/dist/processors/aggregators/sentence.d.ts +39 -0
- package/dist/processors/aggregators/sentence.js +69 -0
- package/dist/processors/async_generator.d.ts +42 -0
- package/dist/processors/async_generator.js +76 -0
- package/dist/processors/audio/audio_buffer_processor.d.ts +241 -0
- package/dist/processors/audio/audio_buffer_processor.js +565 -0
- package/dist/processors/audio/index.d.ts +2 -0
- package/dist/processors/audio/index.js +8 -0
- package/dist/processors/audio/vad_processor.d.ts +67 -0
- package/dist/processors/audio/vad_processor.js +103 -0
- package/dist/processors/consumer_processor.d.ts +49 -0
- package/dist/processors/consumer_processor.js +85 -0
- package/dist/processors/filters/frame_filter.d.ts +39 -0
- package/dist/processors/filters/frame_filter.js +52 -0
- package/dist/processors/filters/function_filter.d.ts +59 -0
- package/dist/processors/filters/function_filter.js +78 -0
- package/dist/processors/filters/identity_filter.d.ts +33 -0
- package/dist/processors/filters/identity_filter.js +37 -0
- package/dist/processors/filters/index.d.ts +2 -0
- package/dist/processors/filters/index.js +8 -0
- package/dist/processors/filters/null_filter.d.ts +34 -0
- package/dist/processors/filters/null_filter.js +47 -0
- package/dist/processors/filters/wake_notifier_filter.d.ts +48 -0
- package/dist/processors/filters/wake_notifier_filter.js +49 -0
- package/dist/processors/frame_processor.d.ts +360 -0
- package/dist/processors/frame_processor.js +932 -0
- package/dist/processors/frameworks/index.d.ts +2 -0
- package/dist/processors/frameworks/index.js +8 -0
- package/dist/processors/frameworks/rtvi/frames.d.ts +241 -0
- package/dist/processors/frameworks/rtvi/frames.js +259 -0
- package/dist/processors/frameworks/rtvi/index.d.ts +6 -0
- package/dist/processors/frameworks/rtvi/index.js +11 -0
- package/dist/processors/frameworks/rtvi/models.d.ts +1741 -0
- package/dist/processors/frameworks/rtvi/models.js +1807 -0
- package/dist/processors/frameworks/rtvi/observer.d.ts +340 -0
- package/dist/processors/frameworks/rtvi/observer.js +1113 -0
- package/dist/processors/frameworks/rtvi/processor.d.ts +182 -0
- package/dist/processors/frameworks/rtvi/processor.js +676 -0
- package/dist/processors/idle_frame_processor.d.ts +44 -0
- package/dist/processors/idle_frame_processor.js +86 -0
- package/dist/processors/index.d.ts +2 -0
- package/dist/processors/index.js +8 -0
- package/dist/processors/logger.d.ts +42 -0
- package/dist/processors/logger.js +87 -0
- package/dist/processors/metrics/frame_processor_metrics.d.ts +172 -0
- package/dist/processors/metrics/frame_processor_metrics.js +372 -0
- package/dist/processors/metrics/index.d.ts +2 -0
- package/dist/processors/metrics/index.js +8 -0
- package/dist/processors/producer_processor.d.ts +68 -0
- package/dist/processors/producer_processor.js +78 -0
- package/dist/processors/text_transformer.d.ts +30 -0
- package/dist/processors/text_transformer.js +48 -0
- package/dist/registry/index.d.ts +3 -0
- package/dist/registry/index.js +8 -0
- package/dist/registry/registry.d.ts +69 -0
- package/dist/registry/registry.js +149 -0
- package/dist/registry/types.d.ts +47 -0
- package/dist/registry/types.js +39 -0
- package/dist/serializers/base_serializer.d.ts +94 -0
- package/dist/serializers/base_serializer.js +82 -0
- package/dist/serializers/index.d.ts +2 -0
- package/dist/serializers/index.js +8 -0
- package/dist/services/ai_service.d.ts +145 -0
- package/dist/services/ai_service.js +262 -0
- package/dist/services/anthropic/index.d.ts +2 -0
- package/dist/services/anthropic/index.js +7 -0
- package/dist/services/assemblyai/index.d.ts +2 -0
- package/dist/services/assemblyai/index.js +7 -0
- package/dist/services/asyncai/index.d.ts +2 -0
- package/dist/services/asyncai/index.js +7 -0
- package/dist/services/aws/index.d.ts +2 -0
- package/dist/services/aws/index.js +7 -0
- package/dist/services/azure/index.d.ts +2 -0
- package/dist/services/azure/index.js +7 -0
- package/dist/services/baseten/index.d.ts +2 -0
- package/dist/services/baseten/index.js +7 -0
- package/dist/services/bland/index.d.ts +2 -0
- package/dist/services/bland/index.js +7 -0
- package/dist/services/camb/index.d.ts +2 -0
- package/dist/services/camb/index.js +7 -0
- package/dist/services/cartesia/index.d.ts +2 -0
- package/dist/services/cartesia/index.js +7 -0
- package/dist/services/cerebras/index.d.ts +2 -0
- package/dist/services/cerebras/index.js +7 -0
- package/dist/services/crusoe/index.d.ts +2 -0
- package/dist/services/crusoe/index.js +7 -0
- package/dist/services/deepgram/index.d.ts +2 -0
- package/dist/services/deepgram/index.js +7 -0
- package/dist/services/deepseek/index.d.ts +2 -0
- package/dist/services/deepseek/index.js +7 -0
- package/dist/services/elevenlabs/index.d.ts +2 -0
- package/dist/services/elevenlabs/index.js +7 -0
- package/dist/services/fal/index.d.ts +2 -0
- package/dist/services/fal/index.js +7 -0
- package/dist/services/fireworks/index.d.ts +2 -0
- package/dist/services/fireworks/index.js +7 -0
- package/dist/services/fish/index.d.ts +2 -0
- package/dist/services/fish/index.js +7 -0
- package/dist/services/funasr/index.d.ts +3 -0
- package/dist/services/funasr/index.js +8 -0
- package/dist/services/gladia/index.d.ts +2 -0
- package/dist/services/gladia/index.js +7 -0
- package/dist/services/google/index.d.ts +2 -0
- package/dist/services/google/index.js +7 -0
- package/dist/services/gradium/index.d.ts +2 -0
- package/dist/services/gradium/index.js +7 -0
- package/dist/services/grok/index.d.ts +2 -0
- package/dist/services/grok/index.js +7 -0
- package/dist/services/groq/index.d.ts +2 -0
- package/dist/services/groq/index.js +7 -0
- package/dist/services/heygen/index.d.ts +2 -0
- package/dist/services/heygen/index.js +7 -0
- package/dist/services/hume/index.d.ts +2 -0
- package/dist/services/hume/index.js +7 -0
- package/dist/services/image_service.d.ts +52 -0
- package/dist/services/image_service.js +60 -0
- package/dist/services/inception/index.d.ts +2 -0
- package/dist/services/inception/index.js +7 -0
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.js +8 -0
- package/dist/services/inworld/index.d.ts +2 -0
- package/dist/services/inworld/index.js +7 -0
- package/dist/services/keenable/index.d.ts +2 -0
- package/dist/services/keenable/index.js +7 -0
- package/dist/services/kokoro/index.d.ts +2 -0
- package/dist/services/kokoro/index.js +7 -0
- package/dist/services/llm_service.d.ts +1106 -0
- package/dist/services/llm_service.js +2231 -0
- package/dist/services/mem0/index.d.ts +2 -0
- package/dist/services/mem0/index.js +7 -0
- package/dist/services/meta/index.d.ts +2 -0
- package/dist/services/meta/index.js +7 -0
- package/dist/services/minimax/index.d.ts +2 -0
- package/dist/services/minimax/index.js +7 -0
- package/dist/services/mistral/index.d.ts +2 -0
- package/dist/services/mistral/index.js +7 -0
- package/dist/services/moondream/index.d.ts +2 -0
- package/dist/services/moondream/index.js +7 -0
- package/dist/services/moonshine/index.d.ts +2 -0
- package/dist/services/moonshine/index.js +7 -0
- package/dist/services/nebius/index.d.ts +2 -0
- package/dist/services/nebius/index.js +7 -0
- package/dist/services/neuphonic/index.d.ts +2 -0
- package/dist/services/neuphonic/index.js +7 -0
- package/dist/services/novita/index.d.ts +2 -0
- package/dist/services/novita/index.js +7 -0
- package/dist/services/nvidia/index.d.ts +2 -0
- package/dist/services/nvidia/index.js +11 -0
- package/dist/services/ollama/index.d.ts +2 -0
- package/dist/services/ollama/index.js +7 -0
- package/dist/services/openai/index.d.ts +2 -0
- package/dist/services/openai/index.js +7 -0
- package/dist/services/openclaw/index.d.ts +14 -0
- package/dist/services/openclaw/index.js +19 -0
- package/dist/services/openrouter/index.d.ts +2 -0
- package/dist/services/openrouter/index.js +7 -0
- package/dist/services/perplexity/index.d.ts +2 -0
- package/dist/services/perplexity/index.js +7 -0
- package/dist/services/piper/index.d.ts +2 -0
- package/dist/services/piper/index.js +7 -0
- package/dist/services/pocket_tts/index.d.ts +2 -0
- package/dist/services/pocket_tts/index.js +7 -0
- package/dist/services/qwen/index.d.ts +2 -0
- package/dist/services/qwen/index.js +7 -0
- package/dist/services/resembleai/index.d.ts +2 -0
- package/dist/services/resembleai/index.js +7 -0
- package/dist/services/rime/index.d.ts +2 -0
- package/dist/services/rime/index.js +7 -0
- package/dist/services/sambanova/index.d.ts +2 -0
- package/dist/services/sambanova/index.js +7 -0
- package/dist/services/sarvam/index.d.ts +2 -0
- package/dist/services/sarvam/index.js +7 -0
- package/dist/services/settings.d.ts +356 -0
- package/dist/services/settings.js +437 -0
- package/dist/services/simli/index.d.ts +2 -0
- package/dist/services/simli/index.js +7 -0
- package/dist/services/smallest/index.d.ts +2 -0
- package/dist/services/smallest/index.js +7 -0
- package/dist/services/soniox/index.d.ts +2 -0
- package/dist/services/soniox/index.js +7 -0
- package/dist/services/speechify/index.d.ts +2 -0
- package/dist/services/speechify/index.js +7 -0
- package/dist/services/speechmatics/index.d.ts +2 -0
- package/dist/services/speechmatics/index.js +7 -0
- package/dist/services/stt_latency.d.ts +62 -0
- package/dist/services/stt_latency.js +71 -0
- package/dist/services/stt_service.d.ts +601 -0
- package/dist/services/stt_service.js +1044 -0
- package/dist/services/tavus/index.d.ts +2 -0
- package/dist/services/tavus/index.js +7 -0
- package/dist/services/together/index.d.ts +2 -0
- package/dist/services/together/index.js +7 -0
- package/dist/services/tts_service.d.ts +909 -0
- package/dist/services/tts_service.js +2018 -0
- package/dist/services/ultravox/index.d.ts +2 -0
- package/dist/services/ultravox/index.js +9 -0
- package/dist/services/vision_service.d.ts +56 -0
- package/dist/services/vision_service.js +62 -0
- package/dist/services/websocket_service.d.ts +213 -0
- package/dist/services/websocket_service.js +654 -0
- package/dist/services/whisper/index.d.ts +2 -0
- package/dist/services/whisper/index.js +9 -0
- package/dist/services/xai/index.d.ts +2 -0
- package/dist/services/xai/index.js +9 -0
- package/dist/services/xtts/index.d.ts +2 -0
- package/dist/services/xtts/index.js +9 -0
- package/dist/tests/index.d.ts +2 -0
- package/dist/tests/index.js +8 -0
- package/dist/tests/utils.d.ts +123 -0
- package/dist/tests/utils.js +212 -0
- package/dist/transcriptions/index.d.ts +2 -0
- package/dist/transcriptions/index.js +8 -0
- package/dist/transcriptions/language.d.ts +376 -0
- package/dist/transcriptions/language.js +543 -0
- package/dist/transports/base_input.d.ts +149 -0
- package/dist/transports/base_input.js +338 -0
- package/dist/transports/base_output.d.ts +432 -0
- package/dist/transports/base_output.js +1231 -0
- package/dist/transports/base_transport.d.ts +223 -0
- package/dist/transports/base_transport.js +167 -0
- package/dist/transports/daily/index.d.ts +2 -0
- package/dist/transports/daily/index.js +9 -0
- package/dist/transports/heygen/index.d.ts +2 -0
- package/dist/transports/heygen/index.js +9 -0
- package/dist/transports/index.d.ts +2 -0
- package/dist/transports/index.js +8 -0
- package/dist/transports/lemonslice/index.d.ts +2 -0
- package/dist/transports/lemonslice/index.js +9 -0
- package/dist/transports/livekit/index.d.ts +2 -0
- package/dist/transports/livekit/index.js +9 -0
- package/dist/transports/local/index.d.ts +2 -0
- package/dist/transports/local/index.js +9 -0
- package/dist/transports/moq/index.d.ts +2 -0
- package/dist/transports/moq/index.js +9 -0
- package/dist/transports/smallwebrtc/index.d.ts +2 -0
- package/dist/transports/smallwebrtc/index.js +9 -0
- package/dist/transports/tavus/index.d.ts +2 -0
- package/dist/transports/tavus/index.js +9 -0
- package/dist/transports/video_in_sampler.d.ts +157 -0
- package/dist/transports/video_in_sampler.js +258 -0
- package/dist/transports/vonage/index.d.ts +2 -0
- package/dist/transports/vonage/index.js +9 -0
- package/dist/transports/websocket/index.d.ts +2 -0
- package/dist/transports/websocket/index.js +9 -0
- package/dist/transports/whatsapp/index.d.ts +2 -0
- package/dist/transports/whatsapp/index.js +9 -0
- package/dist/turns/eager_end_of_turn_mixin.d.ts +70 -0
- package/dist/turns/eager_end_of_turn_mixin.js +122 -0
- package/dist/turns/empty_user_turn.d.ts +55 -0
- package/dist/turns/empty_user_turn.js +53 -0
- package/dist/turns/index.d.ts +2 -0
- package/dist/turns/index.js +8 -0
- package/dist/turns/speculation_gate.d.ts +169 -0
- package/dist/turns/speculation_gate.js +294 -0
- package/dist/turns/types.d.ts +33 -0
- package/dist/turns/types.js +35 -0
- package/dist/turns/user_idle_controller.d.ts +94 -0
- package/dist/turns/user_idle_controller.js +187 -0
- package/dist/turns/user_mute/always_user_mute_strategy.d.ts +15 -0
- package/dist/turns/user_mute/always_user_mute_strategy.js +29 -0
- package/dist/turns/user_mute/base_user_mute_strategy.d.ts +39 -0
- package/dist/turns/user_mute/base_user_mute_strategy.js +45 -0
- package/dist/turns/user_mute/first_speech_user_mute_strategy.d.ts +28 -0
- package/dist/turns/user_mute/first_speech_user_mute_strategy.js +52 -0
- package/dist/turns/user_mute/function_call_user_mute_strategy.d.ts +25 -0
- package/dist/turns/user_mute/function_call_user_mute_strategy.js +50 -0
- package/dist/turns/user_mute/index.d.ts +6 -0
- package/dist/turns/user_mute/index.js +11 -0
- package/dist/turns/user_mute/mute_until_first_bot_complete_user_mute_strategy.d.ts +43 -0
- package/dist/turns/user_mute/mute_until_first_bot_complete_user_mute_strategy.js +76 -0
- package/dist/turns/user_start/base_user_turn_start_strategy.d.ts +135 -0
- package/dist/turns/user_start/base_user_turn_start_strategy.js +134 -0
- package/dist/turns/user_start/external_user_turn_start_strategy.d.ts +45 -0
- package/dist/turns/user_start/external_user_turn_start_strategy.js +64 -0
- package/dist/turns/user_start/index.d.ts +8 -0
- package/dist/turns/user_start/index.js +16 -0
- package/dist/turns/user_start/krisp_viva_ip_user_turn_start_strategy.d.ts +133 -0
- package/dist/turns/user_start/krisp_viva_ip_user_turn_start_strategy.js +243 -0
- package/dist/turns/user_start/min_words_user_turn_start_strategy.d.ts +60 -0
- package/dist/turns/user_start/min_words_user_turn_start_strategy.js +102 -0
- package/dist/turns/user_start/transcription_user_turn_start_strategy.d.ts +29 -0
- package/dist/turns/user_start/transcription_user_turn_start_strategy.js +43 -0
- package/dist/turns/user_start/vad_user_turn_start_strategy.d.ts +20 -0
- package/dist/turns/user_start/vad_user_turn_start_strategy.js +31 -0
- package/dist/turns/user_start/wake_phrase_user_turn_start_strategy.d.ts +141 -0
- package/dist/turns/user_start/wake_phrase_user_turn_start_strategy.js +238 -0
- package/dist/turns/user_stop/base_user_turn_stop_strategy.d.ts +174 -0
- package/dist/turns/user_stop/base_user_turn_stop_strategy.js +170 -0
- package/dist/turns/user_stop/deferred_user_turn_stop_strategy.d.ts +81 -0
- package/dist/turns/user_stop/deferred_user_turn_stop_strategy.js +107 -0
- package/dist/turns/user_stop/eager_match_policy.d.ts +36 -0
- package/dist/turns/user_stop/eager_match_policy.js +50 -0
- package/dist/turns/user_stop/eager_user_turn_stop_strategy.d.ts +84 -0
- package/dist/turns/user_stop/eager_user_turn_stop_strategy.js +154 -0
- package/dist/turns/user_stop/external_user_turn_completion_stop_strategy.d.ts +45 -0
- package/dist/turns/user_stop/external_user_turn_completion_stop_strategy.js +55 -0
- package/dist/turns/user_stop/external_user_turn_stop_strategy.d.ts +115 -0
- package/dist/turns/user_stop/external_user_turn_stop_strategy.js +205 -0
- package/dist/turns/user_stop/index.d.ts +10 -0
- package/dist/turns/user_stop/index.js +15 -0
- package/dist/turns/user_stop/llm_turn_completion_user_turn_stop_strategy.d.ts +44 -0
- package/dist/turns/user_stop/llm_turn_completion_user_turn_stop_strategy.js +59 -0
- package/dist/turns/user_stop/speech_timeout_user_turn_stop_strategy.d.ts +140 -0
- package/dist/turns/user_stop/speech_timeout_user_turn_stop_strategy.js +303 -0
- package/dist/turns/user_stop/turn_analyzer_user_turn_stop_strategy.d.ts +135 -0
- package/dist/turns/user_stop/turn_analyzer_user_turn_stop_strategy.js +332 -0
- package/dist/turns/user_turn_completion_mixin.d.ts +147 -0
- package/dist/turns/user_turn_completion_mixin.js +591 -0
- package/dist/turns/user_turn_controller.d.ts +134 -0
- package/dist/turns/user_turn_controller.js +335 -0
- package/dist/turns/user_turn_processor.d.ts +87 -0
- package/dist/turns/user_turn_processor.js +180 -0
- package/dist/turns/user_turn_strategies.d.ts +187 -0
- package/dist/turns/user_turn_strategies.js +222 -0
- package/dist/utils/async_tool_cancellation.d.ts +35 -0
- package/dist/utils/async_tool_cancellation.js +78 -0
- package/dist/utils/asyncio/index.d.ts +2 -0
- package/dist/utils/asyncio/index.js +7 -0
- package/dist/utils/asyncio/task_manager.d.ts +49 -0
- package/dist/utils/asyncio/task_manager.js +105 -0
- package/dist/utils/base_object.d.ts +76 -0
- package/dist/utils/base_object.js +154 -0
- package/dist/utils/context/aggregated_frame_sequencer.d.ts +491 -0
- package/dist/utils/context/aggregated_frame_sequencer.js +803 -0
- package/dist/utils/context/audio_context_manager.d.ts +131 -0
- package/dist/utils/context/audio_context_manager.js +233 -0
- package/dist/utils/context/index.d.ts +2 -0
- package/dist/utils/context/index.js +7 -0
- package/dist/utils/context/llm_context_summarization.d.ts +258 -0
- package/dist/utils/context/llm_context_summarization.js +511 -0
- package/dist/utils/context/text_segment_map.d.ts +611 -0
- package/dist/utils/context/text_segment_map.js +1132 -0
- package/dist/utils/context/word_completion_tracker.d.ts +273 -0
- package/dist/utils/context/word_completion_tracker.js +441 -0
- package/dist/utils/context/word_timestamp_tracker.d.ts +72 -0
- package/dist/utils/context/word_timestamp_tracker.js +98 -0
- package/dist/utils/deprecation.d.ts +28 -0
- package/dist/utils/deprecation.js +75 -0
- package/dist/utils/env.d.ts +38 -0
- package/dist/utils/env.js +62 -0
- package/dist/utils/errors.d.ts +75 -0
- package/dist/utils/errors.js +202 -0
- package/dist/utils/file_resolver.d.ts +126 -0
- package/dist/utils/file_resolver.js +314 -0
- package/dist/utils/file_storage.d.ts +115 -0
- package/dist/utils/file_storage.js +178 -0
- package/dist/utils/frame_queue.d.ts +36 -0
- package/dist/utils/frame_queue.js +66 -0
- package/dist/utils/http.d.ts +39 -0
- package/dist/utils/http.js +53 -0
- package/dist/utils/image.d.ts +14 -0
- package/dist/utils/image.js +63 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/jpeg_encoder.d.ts +14 -0
- package/dist/utils/jpeg_encoder.js +315 -0
- package/dist/utils/log_config.d.ts +34 -0
- package/dist/utils/log_config.js +76 -0
- package/dist/utils/logger.d.ts +40 -0
- package/dist/utils/logger.js +91 -0
- package/dist/utils/mixin.d.ts +14 -0
- package/dist/utils/mixin.js +63 -0
- package/dist/utils/network.d.ts +73 -0
- package/dist/utils/network.js +90 -0
- package/dist/utils/security/allowed_origins.d.ts +16 -0
- package/dist/utils/security/allowed_origins.js +34 -0
- package/dist/utils/security/index.d.ts +2 -0
- package/dist/utils/security/index.js +7 -0
- package/dist/utils/security/redaction.d.ts +27 -0
- package/dist/utils/security/redaction.js +123 -0
- package/dist/utils/security/ssrf.d.ts +79 -0
- package/dist/utils/security/ssrf.js +327 -0
- package/dist/utils/shared.d.ts +35 -0
- package/dist/utils/shared.js +136 -0
- package/dist/utils/startup.d.ts +17 -0
- package/dist/utils/startup.js +130 -0
- package/dist/utils/string.d.ts +116 -0
- package/dist/utils/string.js +460 -0
- package/dist/utils/sync/base_notifier.d.ts +25 -0
- package/dist/utils/sync/base_notifier.js +16 -0
- package/dist/utils/sync/event_notifier.d.ts +38 -0
- package/dist/utils/sync/event_notifier.js +51 -0
- package/dist/utils/sync/index.d.ts +2 -0
- package/dist/utils/sync/index.js +7 -0
- package/dist/utils/text/alnum_utils.d.ts +109 -0
- package/dist/utils/text/alnum_utils.js +262 -0
- package/dist/utils/text/base_text_aggregator.d.ts +146 -0
- package/dist/utils/text/base_text_aggregator.js +102 -0
- package/dist/utils/text/base_text_filter.d.ts +54 -0
- package/dist/utils/text/base_text_filter.js +50 -0
- package/dist/utils/text/index.d.ts +2 -0
- package/dist/utils/text/index.js +7 -0
- package/dist/utils/text/markdown_text_filter.d.ts +147 -0
- package/dist/utils/text/markdown_text_filter.js +522 -0
- package/dist/utils/text/markup_utils.d.ts +54 -0
- package/dist/utils/text/markup_utils.js +156 -0
- package/dist/utils/text/pattern_pair_aggregator.d.ts +251 -0
- package/dist/utils/text/pattern_pair_aggregator.js +478 -0
- package/dist/utils/text/phonemes.d.ts +60 -0
- package/dist/utils/text/phonemes.js +172 -0
- package/dist/utils/text/simple_text_aggregator.d.ts +135 -0
- package/dist/utils/text/simple_text_aggregator.js +254 -0
- package/dist/utils/text/skip_tags_aggregator.d.ts +85 -0
- package/dist/utils/text/skip_tags_aggregator.js +147 -0
- package/dist/utils/text/transforms/acronyms.d.ts +21 -0
- package/dist/utils/text/transforms/acronyms.js +31 -0
- package/dist/utils/text/transforms/currency.d.ts +16 -0
- package/dist/utils/text/transforms/currency.js +56 -0
- package/dist/utils/text/transforms/dates.d.ts +18 -0
- package/dist/utils/text/transforms/dates.js +102 -0
- package/dist/utils/text/transforms/email.d.ts +17 -0
- package/dist/utils/text/transforms/email.js +35 -0
- package/dist/utils/text/transforms/index.d.ts +37 -0
- package/dist/utils/text/transforms/index.js +42 -0
- package/dist/utils/text/transforms/numbers.d.ts +25 -0
- package/dist/utils/text/transforms/numbers.js +59 -0
- package/dist/utils/text/transforms/percentages.d.ts +16 -0
- package/dist/utils/text/transforms/percentages.js +32 -0
- package/dist/utils/text/transforms/phone.d.ts +21 -0
- package/dist/utils/text/transforms/phone.js +39 -0
- package/dist/utils/text/transforms/pronunciations.d.ts +65 -0
- package/dist/utils/text/transforms/pronunciations.js +112 -0
- package/dist/utils/text/transforms/replacements.d.ts +39 -0
- package/dist/utils/text/transforms/replacements.js +46 -0
- package/dist/utils/text/transforms/strip_markdown.d.ts +25 -0
- package/dist/utils/text/transforms/strip_markdown.js +60 -0
- package/dist/utils/text/transforms/units.d.ts +22 -0
- package/dist/utils/text/transforms/units.js +81 -0
- package/dist/utils/text/transforms/voice_formatter.d.ts +86 -0
- package/dist/utils/text/transforms/voice_formatter.js +98 -0
- package/dist/utils/text/unicode_digits.d.ts +3 -0
- package/dist/utils/text/unicode_digits.js +34 -0
- package/dist/utils/text/word_timestamp_utils.d.ts +26 -0
- package/dist/utils/text/word_timestamp_utils.js +52 -0
- package/dist/utils/time.d.ts +13 -0
- package/dist/utils/time.js +31 -0
- package/dist/utils/tracing/index.d.ts +3 -0
- package/dist/utils/tracing/index.js +8 -0
- package/dist/utils/tracing/service_attributes.d.ts +198 -0
- package/dist/utils/tracing/service_attributes.js +434 -0
- package/dist/utils/tracing/service_decorators.d.ts +214 -0
- package/dist/utils/tracing/service_decorators.js +1662 -0
- package/dist/utils/tracing/setup.d.ts +107 -0
- package/dist/utils/tracing/setup.js +160 -0
- package/dist/utils/tracing/tracing_context.d.ts +55 -0
- package/dist/utils/tracing/tracing_context.js +97 -0
- package/dist/utils/tracing/turn_trace_observer.d.ts +95 -0
- package/dist/utils/tracing/turn_trace_observer.js +233 -0
- package/dist/utils/types.d.ts +80 -0
- package/dist/utils/types.js +108 -0
- package/dist/utils/utils.d.ts +5 -0
- package/dist/utils/utils.js +22 -0
- package/dist/utils/yaml.d.ts +179 -0
- package/dist/utils/yaml.js +556 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.js +7 -0
- package/dist/workers/base_worker.d.ts +772 -0
- package/dist/workers/base_worker.js +1298 -0
- package/dist/workers/index.d.ts +2 -0
- package/dist/workers/index.js +8 -0
- package/dist/workers/llm/backend_llm_worker.d.ts +552 -0
- package/dist/workers/llm/backend_llm_worker.js +1055 -0
- package/dist/workers/llm/index.d.ts +6 -0
- package/dist/workers/llm/index.js +11 -0
- package/dist/workers/llm/llm_context_worker.d.ts +66 -0
- package/dist/workers/llm/llm_context_worker.js +72 -0
- package/dist/workers/llm/llm_worker.d.ts +180 -0
- package/dist/workers/llm/llm_worker.js +323 -0
- package/dist/workers/llm/tool_decorator.d.ts +68 -0
- package/dist/workers/llm/tool_decorator.js +60 -0
- package/dist/workers/proxy/index.d.ts +3 -0
- package/dist/workers/proxy/index.js +9 -0
- package/dist/workers/proxy/websocket/client.d.ts +110 -0
- package/dist/workers/proxy/websocket/client.js +196 -0
- package/dist/workers/proxy/websocket/index.d.ts +3 -0
- package/dist/workers/proxy/websocket/index.js +10 -0
- package/dist/workers/runner.d.ts +268 -0
- package/dist/workers/runner.js +489 -0
- package/dist/workers/ui/index.d.ts +22 -0
- package/dist/workers/ui/index.js +27 -0
- package/dist/workers/ui/ui_event_decorator.d.ts +43 -0
- package/dist/workers/ui/ui_event_decorator.js +75 -0
- package/dist/workers/ui/ui_job_context.d.ts +12 -0
- package/dist/workers/ui/ui_job_context.js +17 -0
- package/dist/workers/ui/ui_prompts.d.ts +21 -0
- package/dist/workers/ui/ui_prompts.js +41 -0
- package/dist/workers/ui/ui_tools.d.ts +32 -0
- package/dist/workers/ui/ui_tools.js +112 -0
- package/dist/workers/ui/ui_worker.d.ts +571 -0
- package/dist/workers/ui/ui_worker.js +1156 -0
- package/package.json +61 -3
- package/README.md +0 -5
|
@@ -0,0 +1,556 @@
|
|
|
1
|
+
// Copyright (c) 2024-2026, Daily
|
|
2
|
+
// Copyright (c) 2026, pipedog contributors
|
|
3
|
+
// SPDX-License-Identifier: BSD-2-Clause
|
|
4
|
+
//
|
|
5
|
+
// Ported from pipecat: src/pipecat/utils/yaml.py
|
|
6
|
+
/**
|
|
7
|
+
* YAML loading helpers shared across Pipecat's YAML-based configuration.
|
|
8
|
+
*
|
|
9
|
+
* The main helper is `includeLoader`, which builds a loader class that
|
|
10
|
+
* understands an `!include <relative-path>` tag so a document can pull in
|
|
11
|
+
* other files:
|
|
12
|
+
*
|
|
13
|
+
* ```yaml
|
|
14
|
+
* judge: !include judge_audio.yaml
|
|
15
|
+
* task_messages: !include prompts/greeting.yaml
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* Include paths are not confined to the base directory; `..` and absolute
|
|
19
|
+
* paths reach anywhere the process can read. Use these loaders only on
|
|
20
|
+
* trusted documents.
|
|
21
|
+
*
|
|
22
|
+
* Porting notes: upstream builds on PyYAML's loader classes. `SafeLoader`,
|
|
23
|
+
* `load()` and `addImplicitResolver()` here reproduce the parts of PyYAML's
|
|
24
|
+
* safe loader that these helpers rely on, on top of the `yaml` package's
|
|
25
|
+
* parser: YAML 1.1 implicit resolvers (so `yes` is a boolean and `012` an
|
|
26
|
+
* octal int, as with `yaml.safe_load`), per-class constructors and resolvers
|
|
27
|
+
* that subclasses copy on write, and `ConstructorError` for unknown tags.
|
|
28
|
+
* Core has no filesystem access, so the include constructor reads files with
|
|
29
|
+
* an injected `readFile` (e.g. `(p) => readFileSync(p, "utf8")` from
|
|
30
|
+
* `node:fs`, or a lookup in bundled files on Workers). It is synchronous
|
|
31
|
+
* because YAML constructors are.
|
|
32
|
+
*/
|
|
33
|
+
import { rethrowIfCancelled } from "@pipedog/asyncio";
|
|
34
|
+
import { isAlias, isMap, isPair, isScalar, isSeq, parseDocument, } from "yaml";
|
|
35
|
+
const TAG = "tag:yaml.org,2002:";
|
|
36
|
+
/** Base class of the errors raised while loading YAML (`yaml.YAMLError`). */
|
|
37
|
+
export class YAMLError extends Error {
|
|
38
|
+
name = "YAMLError";
|
|
39
|
+
}
|
|
40
|
+
/** A YAML error tied to a place in the document (`yaml.MarkedYAMLError`). */
|
|
41
|
+
export class MarkedYAMLError extends YAMLError {
|
|
42
|
+
name = "MarkedYAMLError";
|
|
43
|
+
problem;
|
|
44
|
+
problemMark;
|
|
45
|
+
constructor(problem, problemMark = null) {
|
|
46
|
+
super(problemMark
|
|
47
|
+
? `${problem}\n in "<unicode string>", line ${problemMark.line + 1}, column ${problemMark.column + 1}`
|
|
48
|
+
: problem);
|
|
49
|
+
this.problem = problem;
|
|
50
|
+
this.problemMark = problemMark;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/** The document is not valid YAML (`yaml.parser.ParserError` / `yaml.scanner.ScannerError`). */
|
|
54
|
+
export class ParserError extends MarkedYAMLError {
|
|
55
|
+
name = "ParserError";
|
|
56
|
+
}
|
|
57
|
+
/** A node could not be turned into a value (`yaml.constructor.ConstructorError`). */
|
|
58
|
+
export class ConstructorError extends MarkedYAMLError {
|
|
59
|
+
name = "ConstructorError";
|
|
60
|
+
}
|
|
61
|
+
/** A scalar node (`yaml.ScalarNode`). `value` is its text. */
|
|
62
|
+
export class ScalarNode {
|
|
63
|
+
isScalar = true;
|
|
64
|
+
tag;
|
|
65
|
+
value;
|
|
66
|
+
startMark;
|
|
67
|
+
/** How the scalar was written: `null` when plain, else `'`, `"`, `|` or `>`. */
|
|
68
|
+
style;
|
|
69
|
+
constructor(tag, value, startMark, style = null) {
|
|
70
|
+
this.tag = tag;
|
|
71
|
+
this.value = value;
|
|
72
|
+
this.startMark = startMark;
|
|
73
|
+
this.style = style;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/** A sequence node (`yaml.SequenceNode`). */
|
|
77
|
+
export class SequenceNode {
|
|
78
|
+
isScalar = false;
|
|
79
|
+
tag;
|
|
80
|
+
value;
|
|
81
|
+
startMark;
|
|
82
|
+
constructor(tag, value, startMark) {
|
|
83
|
+
this.tag = tag;
|
|
84
|
+
this.value = value;
|
|
85
|
+
this.startMark = startMark;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/** A mapping node (`yaml.MappingNode`). `value` holds the key and value nodes in order. */
|
|
89
|
+
export class MappingNode {
|
|
90
|
+
isScalar = false;
|
|
91
|
+
tag;
|
|
92
|
+
value;
|
|
93
|
+
startMark;
|
|
94
|
+
constructor(tag, value, startMark) {
|
|
95
|
+
this.tag = tag;
|
|
96
|
+
this.value = value;
|
|
97
|
+
this.startMark = startMark;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// --- Construction of the safe types (PyYAML's SafeConstructor) ---------------
|
|
101
|
+
const BOOL_VALUES = {
|
|
102
|
+
yes: true,
|
|
103
|
+
no: false,
|
|
104
|
+
true: true,
|
|
105
|
+
false: false,
|
|
106
|
+
on: true,
|
|
107
|
+
off: false,
|
|
108
|
+
};
|
|
109
|
+
/** `int(digits, base)` of a sexagesimal (`1:30`) or plain number, sign excluded. */
|
|
110
|
+
function sexagesimal(value, parse) {
|
|
111
|
+
let base = 1;
|
|
112
|
+
let result = 0;
|
|
113
|
+
for (const part of value.split(":").reverse()) {
|
|
114
|
+
result += parse(part) * base;
|
|
115
|
+
base *= 60;
|
|
116
|
+
}
|
|
117
|
+
return result;
|
|
118
|
+
}
|
|
119
|
+
function constructYamlInt(loader, node) {
|
|
120
|
+
let value = String(loader.constructScalar(node)).replaceAll("_", "");
|
|
121
|
+
let sign = 1;
|
|
122
|
+
if (value[0] === "-")
|
|
123
|
+
sign = -1;
|
|
124
|
+
if (value[0] === "-" || value[0] === "+")
|
|
125
|
+
value = value.slice(1);
|
|
126
|
+
if (value === "0")
|
|
127
|
+
return 0;
|
|
128
|
+
if (value.startsWith("0b"))
|
|
129
|
+
return sign * Number.parseInt(value.slice(2), 2);
|
|
130
|
+
if (value.startsWith("0x"))
|
|
131
|
+
return sign * Number.parseInt(value.slice(2), 16);
|
|
132
|
+
if (value[0] === "0")
|
|
133
|
+
return sign * Number.parseInt(value, 8);
|
|
134
|
+
if (value.includes(":"))
|
|
135
|
+
return sign * sexagesimal(value, (p) => Number.parseInt(p, 10));
|
|
136
|
+
return sign * Number.parseInt(value, 10);
|
|
137
|
+
}
|
|
138
|
+
function constructYamlFloat(loader, node) {
|
|
139
|
+
let value = String(loader.constructScalar(node)).replaceAll("_", "").toLowerCase();
|
|
140
|
+
let sign = 1;
|
|
141
|
+
if (value[0] === "-")
|
|
142
|
+
sign = -1;
|
|
143
|
+
if (value[0] === "-" || value[0] === "+")
|
|
144
|
+
value = value.slice(1);
|
|
145
|
+
if (value === ".inf")
|
|
146
|
+
return sign * Number.POSITIVE_INFINITY;
|
|
147
|
+
if (value === ".nan")
|
|
148
|
+
return Number.NaN;
|
|
149
|
+
if (value.includes(":"))
|
|
150
|
+
return sign * sexagesimal(value, (p) => Number.parseFloat(p));
|
|
151
|
+
return sign * Number.parseFloat(value);
|
|
152
|
+
}
|
|
153
|
+
function constructYamlBinary(loader, node) {
|
|
154
|
+
const text = String(loader.constructScalar(node)).replace(/\s+/g, "");
|
|
155
|
+
let binary;
|
|
156
|
+
try {
|
|
157
|
+
binary = atob(text);
|
|
158
|
+
}
|
|
159
|
+
catch (e) {
|
|
160
|
+
rethrowIfCancelled(e);
|
|
161
|
+
throw new ConstructorError(`failed to decode base64 data: ${text}`, node.startMark);
|
|
162
|
+
}
|
|
163
|
+
const out = new Uint8Array(binary.length);
|
|
164
|
+
for (let i = 0; i < binary.length; i++)
|
|
165
|
+
out[i] = binary.charCodeAt(i);
|
|
166
|
+
return out;
|
|
167
|
+
}
|
|
168
|
+
const TIMESTAMP = /^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:(?:[Tt]|[ \t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\.([0-9]*))?(?:[ \t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?)?$/;
|
|
169
|
+
/** Timestamps become `Date`s (upstream: `date` or `datetime`), in UTC unless an offset is given. */
|
|
170
|
+
function constructYamlTimestamp(loader, node) {
|
|
171
|
+
const m = TIMESTAMP.exec(String(loader.constructScalar(node)));
|
|
172
|
+
if (!m)
|
|
173
|
+
throw new ConstructorError("invalid timestamp", node.startMark);
|
|
174
|
+
const [, y, mo, d, h, mi, s, frac, , sign, tzh, tzm] = m;
|
|
175
|
+
const ms = frac ? Number(`0.${frac}`) * 1000 : 0;
|
|
176
|
+
let time = Date.UTC(Number(y), Number(mo) - 1, Number(d), Number(h ?? 0), Number(mi ?? 0), Number(s ?? 0), ms);
|
|
177
|
+
if (sign) {
|
|
178
|
+
const offset = (Number(tzh) * 60 + Number(tzm ?? 0)) * 60_000;
|
|
179
|
+
time -= sign === "-" ? -offset : offset;
|
|
180
|
+
}
|
|
181
|
+
return new Date(time);
|
|
182
|
+
}
|
|
183
|
+
function constructUndefined(_loader, node) {
|
|
184
|
+
throw new ConstructorError(`could not determine a constructor for the tag '${node.tag}'`, node.startMark);
|
|
185
|
+
}
|
|
186
|
+
// --- Implicit resolvers (PyYAML's Resolver) -----------------------------------
|
|
187
|
+
const DEFAULT_RESOLVERS = [
|
|
188
|
+
[
|
|
189
|
+
`${TAG}bool`,
|
|
190
|
+
/^(?:yes|Yes|YES|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)$/,
|
|
191
|
+
[..."yYnNtTfFoO"],
|
|
192
|
+
],
|
|
193
|
+
[
|
|
194
|
+
`${TAG}float`,
|
|
195
|
+
/^(?:[-+]?(?:[0-9][0-9_]*)\.[0-9_]*(?:[eE][-+][0-9]+)?|\.[0-9][0-9_]*(?:[eE][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*|[-+]?\.(?:inf|Inf|INF)|\.(?:nan|NaN|NAN))$/,
|
|
196
|
+
[..."-+0123456789."],
|
|
197
|
+
],
|
|
198
|
+
[
|
|
199
|
+
`${TAG}int`,
|
|
200
|
+
/^(?:[-+]?0b[0-1_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[0-9a-fA-F_]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)$/,
|
|
201
|
+
[..."-+0123456789"],
|
|
202
|
+
],
|
|
203
|
+
[`${TAG}merge`, /^(?:<<)$/, ["<"]],
|
|
204
|
+
[`${TAG}null`, /^(?:~|null|Null|NULL|)$/, ["~", "n", "N", ""]],
|
|
205
|
+
[
|
|
206
|
+
`${TAG}timestamp`,
|
|
207
|
+
/^(?:[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]|[0-9][0-9][0-9][0-9]-[0-9][0-9]?-[0-9][0-9]?(?:[Tt]|[ \t]+)[0-9][0-9]?:[0-9][0-9]:[0-9][0-9](?:\.[0-9]*)?(?:[ \t]*(?:Z|[-+][0-9][0-9]?(?::[0-9][0-9])?))?)$/,
|
|
208
|
+
[..."0123456789"],
|
|
209
|
+
],
|
|
210
|
+
[`${TAG}value`, /^(?:=)$/, ["="]],
|
|
211
|
+
[`${TAG}yaml`, /^(?:!|&|\*)$/, [..."!&*"]],
|
|
212
|
+
];
|
|
213
|
+
function lineAndColumn(source, offset) {
|
|
214
|
+
let line = 0;
|
|
215
|
+
let lineStart = 0;
|
|
216
|
+
for (let i = 0; i < offset && i < source.length; i++) {
|
|
217
|
+
if (source[i] === "\n") {
|
|
218
|
+
line++;
|
|
219
|
+
lineStart = i + 1;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return { line, column: offset - lineStart };
|
|
223
|
+
}
|
|
224
|
+
/** The class a static method was called on (a subclass registers on itself). */
|
|
225
|
+
function thisClass(cls) {
|
|
226
|
+
return cls;
|
|
227
|
+
}
|
|
228
|
+
const SCALAR_STYLES = {
|
|
229
|
+
PLAIN: null,
|
|
230
|
+
QUOTE_SINGLE: "'",
|
|
231
|
+
QUOTE_DOUBLE: '"',
|
|
232
|
+
BLOCK_LITERAL: "|",
|
|
233
|
+
BLOCK_FOLDED: ">",
|
|
234
|
+
};
|
|
235
|
+
/**
|
|
236
|
+
* The safe loader (`yaml.SafeLoader`): loads standard YAML 1.1 tags into
|
|
237
|
+
* plain values. Subclass it and register constructors or resolvers on the
|
|
238
|
+
* subclass to extend it; registrations never reach the parent class.
|
|
239
|
+
*/
|
|
240
|
+
export class SafeLoader {
|
|
241
|
+
static yamlConstructors = new Map([
|
|
242
|
+
[`${TAG}null`, () => null],
|
|
243
|
+
[`${TAG}bool`, (l, n) => BOOL_VALUES[String(l.constructScalar(n)).toLowerCase()]],
|
|
244
|
+
[`${TAG}int`, constructYamlInt],
|
|
245
|
+
[`${TAG}float`, constructYamlFloat],
|
|
246
|
+
[`${TAG}binary`, constructYamlBinary],
|
|
247
|
+
[`${TAG}timestamp`, constructYamlTimestamp],
|
|
248
|
+
[`${TAG}omap`, (l, n) => l.constructPairs(n)],
|
|
249
|
+
[`${TAG}pairs`, (l, n) => l.constructPairs(n)],
|
|
250
|
+
[`${TAG}set`, (l, n) => new Set(Object.keys(l.constructMapping(n)))],
|
|
251
|
+
[`${TAG}str`, (l, n) => l.constructScalar(n)],
|
|
252
|
+
[`${TAG}seq`, (l, n) => l.constructSequence(n)],
|
|
253
|
+
[`${TAG}map`, (l, n) => l.constructMapping(n)],
|
|
254
|
+
]);
|
|
255
|
+
static yamlImplicitResolvers = (() => {
|
|
256
|
+
const resolvers = new Map();
|
|
257
|
+
for (const [tag, regexp, first] of DEFAULT_RESOLVERS) {
|
|
258
|
+
for (const ch of first) {
|
|
259
|
+
if (!resolvers.has(ch))
|
|
260
|
+
resolvers.set(ch, []);
|
|
261
|
+
resolvers.get(ch).push([tag, regexp]);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
return resolvers;
|
|
265
|
+
})();
|
|
266
|
+
/** Register `fn` as the constructor for `tag` on this class (copying the parent's table first). */
|
|
267
|
+
static addConstructor(tag, fn) {
|
|
268
|
+
// biome-ignore lint/complexity/noThisInStatic: registers on the subclass it is called on.
|
|
269
|
+
const cls = thisClass(this);
|
|
270
|
+
if (!Object.hasOwn(cls, "yamlConstructors")) {
|
|
271
|
+
cls.yamlConstructors = new Map(cls.yamlConstructors);
|
|
272
|
+
}
|
|
273
|
+
cls.yamlConstructors.set(tag, fn);
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Resolve plain scalars matching `regexp` (and starting with one of `first`,
|
|
277
|
+
* or any character when null) to `tag` on this class.
|
|
278
|
+
*/
|
|
279
|
+
static addImplicitResolver(tag, regexp, first) {
|
|
280
|
+
// biome-ignore lint/complexity/noThisInStatic: registers on the subclass it is called on.
|
|
281
|
+
const cls = thisClass(this);
|
|
282
|
+
if (!Object.hasOwn(cls, "yamlImplicitResolvers")) {
|
|
283
|
+
cls.yamlImplicitResolvers = new Map([...cls.yamlImplicitResolvers].map(([ch, list]) => [ch, [...list]]));
|
|
284
|
+
}
|
|
285
|
+
for (const ch of first ?? [null]) {
|
|
286
|
+
if (!cls.yamlImplicitResolvers.has(ch))
|
|
287
|
+
cls.yamlImplicitResolvers.set(ch, []);
|
|
288
|
+
cls.yamlImplicitResolvers.get(ch).push([tag, regexp]);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
#stream;
|
|
292
|
+
#constructed = new Map();
|
|
293
|
+
constructor(stream) {
|
|
294
|
+
this.#stream = stream;
|
|
295
|
+
}
|
|
296
|
+
get #class() {
|
|
297
|
+
return this.constructor;
|
|
298
|
+
}
|
|
299
|
+
/** Load the stream's single document (`get_single_data`); `null` for an empty stream. */
|
|
300
|
+
getSingleData() {
|
|
301
|
+
const node = this.getSingleNode();
|
|
302
|
+
return node === null ? null : this.constructDocument(node);
|
|
303
|
+
}
|
|
304
|
+
/** Compose the stream's single document into nodes, resolving tags. */
|
|
305
|
+
getSingleNode() {
|
|
306
|
+
const doc = parseDocument(this.#stream, {
|
|
307
|
+
version: "1.1",
|
|
308
|
+
schema: "failsafe",
|
|
309
|
+
uniqueKeys: false,
|
|
310
|
+
});
|
|
311
|
+
const error = doc.errors[0];
|
|
312
|
+
if (error) {
|
|
313
|
+
const mark = error.linePos?.[0];
|
|
314
|
+
throw new ParserError(error.message.split(" at line ")[0], mark ? { line: mark.line - 1, column: mark.col - 1 } : null);
|
|
315
|
+
}
|
|
316
|
+
if (doc.contents === null)
|
|
317
|
+
return null;
|
|
318
|
+
return this.#compose(doc, doc.contents, new Map());
|
|
319
|
+
}
|
|
320
|
+
#compose(doc, ast, anchors) {
|
|
321
|
+
if (isAlias(ast)) {
|
|
322
|
+
const target = ast.resolve(doc);
|
|
323
|
+
if (!target)
|
|
324
|
+
throw new ParserError(`found undefined alias ${ast.source}`);
|
|
325
|
+
return this.#compose(doc, target, anchors);
|
|
326
|
+
}
|
|
327
|
+
const existing = anchors.get(ast);
|
|
328
|
+
if (existing)
|
|
329
|
+
return existing;
|
|
330
|
+
const mark = ast.range ? lineAndColumn(this.#stream, ast.range[0]) : null;
|
|
331
|
+
let node;
|
|
332
|
+
if (isScalar(ast)) {
|
|
333
|
+
const scalar = ast;
|
|
334
|
+
const value = scalar.value === null || scalar.value === undefined ? "" : String(scalar.value);
|
|
335
|
+
const style = SCALAR_STYLES[scalar.type ?? "PLAIN"] ?? null;
|
|
336
|
+
const tag = scalar.tag ?? (style === null ? this.resolveScalar(value) : `${TAG}str`);
|
|
337
|
+
node = new ScalarNode(tag, value, mark, style);
|
|
338
|
+
}
|
|
339
|
+
else if (isSeq(ast)) {
|
|
340
|
+
const seq = new SequenceNode(ast.tag ?? `${TAG}seq`, [], mark);
|
|
341
|
+
anchors.set(ast, seq);
|
|
342
|
+
for (const item of ast.items) {
|
|
343
|
+
seq.value.push(this.#compose(doc, item, anchors));
|
|
344
|
+
}
|
|
345
|
+
node = seq;
|
|
346
|
+
}
|
|
347
|
+
else if (isMap(ast)) {
|
|
348
|
+
const map = new MappingNode(ast.tag ?? `${TAG}map`, [], mark);
|
|
349
|
+
anchors.set(ast, map);
|
|
350
|
+
for (const pair of ast.items) {
|
|
351
|
+
if (!isPair(pair))
|
|
352
|
+
continue;
|
|
353
|
+
const key = (pair.key ?? null);
|
|
354
|
+
const value = (pair.value ?? null);
|
|
355
|
+
map.value.push([
|
|
356
|
+
key === null ? new ScalarNode(`${TAG}null`, "", mark) : this.#compose(doc, key, anchors),
|
|
357
|
+
value === null
|
|
358
|
+
? new ScalarNode(`${TAG}null`, "", mark)
|
|
359
|
+
: this.#compose(doc, value, anchors),
|
|
360
|
+
]);
|
|
361
|
+
}
|
|
362
|
+
node = map;
|
|
363
|
+
}
|
|
364
|
+
else {
|
|
365
|
+
throw new ParserError("unexpected YAML node", mark);
|
|
366
|
+
}
|
|
367
|
+
anchors.set(ast, node);
|
|
368
|
+
return node;
|
|
369
|
+
}
|
|
370
|
+
/** The tag a plain scalar resolves to under this class's implicit resolvers. */
|
|
371
|
+
resolveScalar(value) {
|
|
372
|
+
const resolvers = this.#class.yamlImplicitResolvers;
|
|
373
|
+
const candidates = [...(resolvers.get(value === "" ? "" : value[0]) ?? [])];
|
|
374
|
+
candidates.push(...(resolvers.get(null) ?? []));
|
|
375
|
+
for (const [tag, regexp] of candidates) {
|
|
376
|
+
if (regexp.test(value))
|
|
377
|
+
return tag;
|
|
378
|
+
}
|
|
379
|
+
return `${TAG}str`;
|
|
380
|
+
}
|
|
381
|
+
/** Construct the value of a whole document. */
|
|
382
|
+
constructDocument(node) {
|
|
383
|
+
return this.constructObject(node);
|
|
384
|
+
}
|
|
385
|
+
/** Construct the value of `node` with the constructor registered for its tag. */
|
|
386
|
+
constructObject(node) {
|
|
387
|
+
if (this.#constructed.has(node))
|
|
388
|
+
return this.#constructed.get(node);
|
|
389
|
+
const construct = this.#class.yamlConstructors.get(node.tag) ?? constructUndefined;
|
|
390
|
+
const value = construct(this, node);
|
|
391
|
+
this.#constructed.set(node, value);
|
|
392
|
+
return value;
|
|
393
|
+
}
|
|
394
|
+
/** The text of a scalar node. */
|
|
395
|
+
constructScalar(node) {
|
|
396
|
+
if (!(node instanceof ScalarNode)) {
|
|
397
|
+
throw new ConstructorError(`expected a scalar node, but found ${node instanceof SequenceNode ? "sequence" : "mapping"}`, node.startMark);
|
|
398
|
+
}
|
|
399
|
+
return node.value;
|
|
400
|
+
}
|
|
401
|
+
/** The values of a sequence node. */
|
|
402
|
+
constructSequence(node) {
|
|
403
|
+
if (!(node instanceof SequenceNode)) {
|
|
404
|
+
throw new ConstructorError(`expected a sequence node, but found ${node instanceof ScalarNode ? "scalar" : "mapping"}`, node.startMark);
|
|
405
|
+
}
|
|
406
|
+
const result = [];
|
|
407
|
+
this.#constructed.set(node, result);
|
|
408
|
+
for (const child of node.value)
|
|
409
|
+
result.push(this.constructObject(child));
|
|
410
|
+
return result;
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* The entries of a mapping node, as an object, after applying `<<` merge
|
|
414
|
+
* keys. Keys are scalars; a sequence or mapping key is an error, as an
|
|
415
|
+
* unhashable key is upstream.
|
|
416
|
+
*/
|
|
417
|
+
constructMapping(node) {
|
|
418
|
+
if (!(node instanceof MappingNode)) {
|
|
419
|
+
throw new ConstructorError(`expected a mapping node, but found ${node instanceof ScalarNode ? "scalar" : "sequence"}`, node.startMark);
|
|
420
|
+
}
|
|
421
|
+
this.#flattenMapping(node);
|
|
422
|
+
const result = {};
|
|
423
|
+
this.#constructed.set(node, result);
|
|
424
|
+
for (const [keyNode, valueNode] of node.value) {
|
|
425
|
+
if (!(keyNode instanceof ScalarNode)) {
|
|
426
|
+
throw new ConstructorError("found unhashable key", keyNode.startMark);
|
|
427
|
+
}
|
|
428
|
+
result[String(this.constructObject(keyNode))] = this.constructObject(valueNode);
|
|
429
|
+
}
|
|
430
|
+
return result;
|
|
431
|
+
}
|
|
432
|
+
/** The entries of a sequence of one-entry mappings (`!!omap`, `!!pairs`) as `[key, value]` pairs. */
|
|
433
|
+
constructPairs(node) {
|
|
434
|
+
if (!(node instanceof SequenceNode)) {
|
|
435
|
+
throw new ConstructorError("expected a sequence of mappings", node.startMark);
|
|
436
|
+
}
|
|
437
|
+
const pairs = [];
|
|
438
|
+
for (const item of node.value) {
|
|
439
|
+
if (!(item instanceof MappingNode) || item.value.length !== 1) {
|
|
440
|
+
throw new ConstructorError("expected a single mapping item", item.startMark);
|
|
441
|
+
}
|
|
442
|
+
const [k, v] = item.value[0];
|
|
443
|
+
pairs.push([this.constructObject(k), this.constructObject(v)]);
|
|
444
|
+
}
|
|
445
|
+
return pairs;
|
|
446
|
+
}
|
|
447
|
+
/** Apply `<<` merge keys in place (`SafeConstructor.flatten_mapping`). */
|
|
448
|
+
#flattenMapping(node) {
|
|
449
|
+
const merge = [];
|
|
450
|
+
const entries = [];
|
|
451
|
+
for (const [key, value] of node.value) {
|
|
452
|
+
if (key.tag !== `${TAG}merge`) {
|
|
453
|
+
entries.push([key, value]);
|
|
454
|
+
continue;
|
|
455
|
+
}
|
|
456
|
+
if (value instanceof MappingNode) {
|
|
457
|
+
this.#flattenMapping(value);
|
|
458
|
+
merge.push(...value.value);
|
|
459
|
+
}
|
|
460
|
+
else if (value instanceof SequenceNode) {
|
|
461
|
+
const submerge = [];
|
|
462
|
+
for (const sub of value.value) {
|
|
463
|
+
if (!(sub instanceof MappingNode)) {
|
|
464
|
+
throw new ConstructorError("expected a mapping for merging, but found a non-mapping", sub.startMark);
|
|
465
|
+
}
|
|
466
|
+
this.#flattenMapping(sub);
|
|
467
|
+
submerge.push(sub.value);
|
|
468
|
+
}
|
|
469
|
+
for (const sub of submerge.reverse())
|
|
470
|
+
merge.push(...sub);
|
|
471
|
+
}
|
|
472
|
+
else {
|
|
473
|
+
throw new ConstructorError("expected a mapping or list of mappings for merging", value.startMark);
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
node.value = [...merge, ...entries];
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
/**
|
|
480
|
+
* Parse the single YAML document in `stream` (`yaml.load(stream, Loader)`).
|
|
481
|
+
*
|
|
482
|
+
* @param stream The YAML text.
|
|
483
|
+
* @param Loader The loader class to load with. Defaults to `SafeLoader`.
|
|
484
|
+
*/
|
|
485
|
+
export function load(stream, Loader = SafeLoader) {
|
|
486
|
+
return new Loader(stream).getSingleData();
|
|
487
|
+
}
|
|
488
|
+
/**
|
|
489
|
+
* Register an implicit resolver (`yaml.add_implicit_resolver`) on `Loader`.
|
|
490
|
+
*
|
|
491
|
+
* @param tag The tag plain scalars matching `regexp` resolve to.
|
|
492
|
+
* @param regexp The pattern a plain scalar must match.
|
|
493
|
+
* @param first The characters such scalars start with, or null for any.
|
|
494
|
+
*/
|
|
495
|
+
export function addImplicitResolver(tag, regexp, first = null, options = {}) {
|
|
496
|
+
(options.Loader ?? SafeLoader).addImplicitResolver(tag, regexp, first);
|
|
497
|
+
}
|
|
498
|
+
/** `Path(baseDir) / path`: `path` itself when absolute, else joined onto `baseDir`. */
|
|
499
|
+
function joinPath(baseDir, path) {
|
|
500
|
+
if (path.startsWith("/") || path.startsWith("\\") || /^[A-Za-z]:[\\/]/.test(path))
|
|
501
|
+
return path;
|
|
502
|
+
if (baseDir === "")
|
|
503
|
+
return path;
|
|
504
|
+
return /[\\/]$/.test(baseDir) ? `${baseDir}${path}` : `${baseDir}/${path}`;
|
|
505
|
+
}
|
|
506
|
+
/**
|
|
507
|
+
* Register an `!include <relative-path>` constructor on `loaderClass`.
|
|
508
|
+
*
|
|
509
|
+
* Included files load with the same loader class, so nested includes work and
|
|
510
|
+
* scalars get the same resolver treatment as the top-level document. Paths
|
|
511
|
+
* resolve against `baseDir` and may reach outside it.
|
|
512
|
+
*
|
|
513
|
+
* This mutates `loaderClass`. Register on a private subclass rather than on
|
|
514
|
+
* `SafeLoader` itself so the constructor has no global side effects;
|
|
515
|
+
* `includeLoader` does that for you.
|
|
516
|
+
*
|
|
517
|
+
* @param loaderClass The loader class to register the constructor on.
|
|
518
|
+
* @param baseDir Directory that `!include` paths resolve against.
|
|
519
|
+
* @param options How to read the included files.
|
|
520
|
+
*/
|
|
521
|
+
export function addIncludeConstructor(loaderClass, baseDir, options) {
|
|
522
|
+
const include = (loader, node) => {
|
|
523
|
+
if (!(node instanceof ScalarNode)) {
|
|
524
|
+
throw new ConstructorError("!include expects a file path", node.startMark);
|
|
525
|
+
}
|
|
526
|
+
const includePath = joinPath(baseDir, String(loader.constructScalar(node)));
|
|
527
|
+
return load(options.readFile(includePath), loaderClass);
|
|
528
|
+
};
|
|
529
|
+
loaderClass.addConstructor("!include", include);
|
|
530
|
+
}
|
|
531
|
+
/**
|
|
532
|
+
* Build a loader class that resolves `!include` relative to `baseDir`.
|
|
533
|
+
*
|
|
534
|
+
* Returns a fresh subclass of `base` with the include constructor
|
|
535
|
+
* registered, so `base` itself is left untouched.
|
|
536
|
+
*
|
|
537
|
+
* @param baseDir Directory that `!include` paths resolve against, typically
|
|
538
|
+
* the directory of the document being loaded.
|
|
539
|
+
* @param options How to read included files, and the loader class to subclass.
|
|
540
|
+
* @returns A loader class to pass to `load`.
|
|
541
|
+
*
|
|
542
|
+
* @example
|
|
543
|
+
* ```ts
|
|
544
|
+
* const data = load(readFileSync(path, "utf8"), includeLoader(dirname(path), {
|
|
545
|
+
* readFile: (p) => readFileSync(p, "utf8"),
|
|
546
|
+
* }));
|
|
547
|
+
* ```
|
|
548
|
+
*/
|
|
549
|
+
export function includeLoader(baseDir, options) {
|
|
550
|
+
const base = options.base ?? SafeLoader;
|
|
551
|
+
const _IncludeLoader = class _IncludeLoader extends base {
|
|
552
|
+
};
|
|
553
|
+
addIncludeConstructor(_IncludeLoader, baseDir, options);
|
|
554
|
+
return _IncludeLoader;
|
|
555
|
+
}
|
|
556
|
+
//# sourceMappingURL=yaml.js.map
|
package/dist/version.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Copyright (c) 2026, pipedog contributors
|
|
2
|
+
// SPDX-License-Identifier: BSD-2-Clause
|
|
3
|
+
//
|
|
4
|
+
// Generated by tools/release/sync-version.ts from package.json; do not edit.
|
|
5
|
+
/** The version of @pipedog/core (all @pipedog packages share it). */
|
|
6
|
+
export const VERSION = "0.2.0";
|
|
7
|
+
//# sourceMappingURL=version.js.map
|