@pipedog/core 0.0.0 → 0.1.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/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/soxr_resampler.d.ts +54 -0
- package/dist/audio/resamplers/soxr_resampler.js +69 -0
- package/dist/audio/resamplers/soxr_stream_resampler.d.ts +75 -0
- package/dist/audio/resamplers/soxr_stream_resampler.js +146 -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 +143 -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 +126 -0
- package/dist/audio/vad/vad_analyzer.js +211 -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 +814 -0
- package/dist/pipeline/worker.js +1639 -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 +99 -0
- package/dist/utils/file_storage.js +100 -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 +15 -0
- package/dist/utils/image.js +30 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +8 -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/pronunciations.d.ts +65 -0
- package/dist/utils/text/transforms/pronunciations.js +111 -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 +95 -0
- package/dist/utils/tracing/setup.js +110 -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 +90 -0
- package/dist/utils/tracing/turn_trace_observer.js +219 -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 +64 -0
- package/dist/utils/yaml.js +41 -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/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 +46 -3
- package/README.md +0 -5
|
@@ -0,0 +1,522 @@
|
|
|
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/text/markdown_text_filter.py
|
|
6
|
+
/**
|
|
7
|
+
* Markdown text filter for removing Markdown formatting from text.
|
|
8
|
+
*
|
|
9
|
+
* This module provides a text filter that converts Markdown content to plain
|
|
10
|
+
* text while preserving structure and handling special cases like code blocks
|
|
11
|
+
* and tables.
|
|
12
|
+
*
|
|
13
|
+
* DIVERGENCE: upstream converts Markdown to HTML with the Python-Markdown
|
|
14
|
+
* package. Core takes no runtime dependencies, so `markdownToHtml` below is a
|
|
15
|
+
* small built-in converter that follows Python-Markdown's rules for the
|
|
16
|
+
* constructs that matter here (paragraphs, headers, rules, lists, quotes,
|
|
17
|
+
* indented code, tables, code spans, links, images, emphasis, escapes and raw
|
|
18
|
+
* HTML). Exotic Markdown (reference links, nested lists) may convert
|
|
19
|
+
* differently.
|
|
20
|
+
*/
|
|
21
|
+
import { BaseTextFilter } from "./base_text_filter.js";
|
|
22
|
+
/**
|
|
23
|
+
* Configuration parameters for Markdown text filtering
|
|
24
|
+
* (`MarkdownTextFilter.InputParams` upstream).
|
|
25
|
+
*
|
|
26
|
+
* - `enableTextFilter`: whether to apply Markdown filtering. Defaults to true.
|
|
27
|
+
* - `filterCode`: whether to remove code blocks from the text. Defaults to false.
|
|
28
|
+
* - `filterTables`: whether to remove table content from the text. Defaults to false.
|
|
29
|
+
* - `filterRepeatedSequences`: whether to remove repeated sequences from the
|
|
30
|
+
* text. Defaults to true.
|
|
31
|
+
*/
|
|
32
|
+
export class MarkdownTextFilterInputParams {
|
|
33
|
+
enableTextFilter;
|
|
34
|
+
filterCode;
|
|
35
|
+
filterTables;
|
|
36
|
+
filterRepeatedSequences;
|
|
37
|
+
constructor(options = {}) {
|
|
38
|
+
this.enableTextFilter =
|
|
39
|
+
options.enableTextFilter !== undefined ? options.enableTextFilter : true;
|
|
40
|
+
this.filterCode = options.filterCode !== undefined ? options.filterCode : false;
|
|
41
|
+
this.filterTables = options.filterTables !== undefined ? options.filterTables : false;
|
|
42
|
+
this.filterRepeatedSequences =
|
|
43
|
+
options.filterRepeatedSequences !== undefined ? options.filterRepeatedSequences : true;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/** `snake_case` -> `camelCase`, so settings keyed either way are accepted. */
|
|
47
|
+
function camelCase(key) {
|
|
48
|
+
return key.replace(/_([a-z0-9])/g, (_, c) => c.toUpperCase());
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Text filter that removes Markdown formatting from text content.
|
|
52
|
+
*
|
|
53
|
+
* Converts Markdown to plain text while preserving the overall structure,
|
|
54
|
+
* including leading and trailing spaces. Handles special cases like asterisks
|
|
55
|
+
* and table formatting. Supports selective filtering of code blocks and
|
|
56
|
+
* tables based on configuration.
|
|
57
|
+
*/
|
|
58
|
+
export class MarkdownTextFilter extends BaseTextFilter {
|
|
59
|
+
/** Configuration parameters for Markdown text filtering. */
|
|
60
|
+
static InputParams = MarkdownTextFilterInputParams;
|
|
61
|
+
_settings;
|
|
62
|
+
_inCodeBlock = false;
|
|
63
|
+
_inTable = false;
|
|
64
|
+
_interrupted = false;
|
|
65
|
+
/**
|
|
66
|
+
* Initialize the Markdown text filter.
|
|
67
|
+
*
|
|
68
|
+
* @param options.params Configuration parameters for filtering behavior.
|
|
69
|
+
*/
|
|
70
|
+
constructor(options = {}) {
|
|
71
|
+
super(options);
|
|
72
|
+
this._settings = options.params ?? new MarkdownTextFilterInputParams();
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Update the filter's configuration settings.
|
|
76
|
+
*
|
|
77
|
+
* Keys may be given as upstream writes them (`enable_text_filter`) or in
|
|
78
|
+
* camelCase (`enableTextFilter`).
|
|
79
|
+
*
|
|
80
|
+
* @param settings Dictionary of setting names to values for configuration.
|
|
81
|
+
*/
|
|
82
|
+
async updateSettings(settings) {
|
|
83
|
+
const target = this._settings;
|
|
84
|
+
for (const [key, value] of Object.entries(settings)) {
|
|
85
|
+
const name = camelCase(key);
|
|
86
|
+
if (Object.hasOwn(target, name)) {
|
|
87
|
+
target[name] = value;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Apply Markdown filtering transformations to the input text.
|
|
93
|
+
*
|
|
94
|
+
* @param text The input text containing Markdown formatting to be filtered.
|
|
95
|
+
* @returns The filtered text with Markdown formatting removed or converted.
|
|
96
|
+
*/
|
|
97
|
+
async filter(text) {
|
|
98
|
+
if (this._settings.enableTextFilter) {
|
|
99
|
+
// Strip markdown headers to plain text before the newline collapse
|
|
100
|
+
// below. The converter can't recognize a header once the collapse
|
|
101
|
+
// injects a leading space, so we normalize headers ourselves.
|
|
102
|
+
// First, drop blank lines before a header (keeping the marker) so
|
|
103
|
+
// the collapse doesn't turn them into a leading space.
|
|
104
|
+
let filteredText = text.replace(/\n\s*\n(#{1,6}[ \t])/g, "\n$1");
|
|
105
|
+
// Then strip the leading marker and any "closed" trailing marker
|
|
106
|
+
// (e.g. ## Title ##), leaving just the header text. The trailing
|
|
107
|
+
// marker's surrounding spaces are absorbed only when the marker is
|
|
108
|
+
// present, so genuine trailing whitespace (needed for word-by-word
|
|
109
|
+
// streaming) is preserved on open headers.
|
|
110
|
+
filteredText = filteredText.replace(/^#{1,6}[ \t]+(.*?)(?:[ \t]+#+[ \t]*)?$/gm, "$1");
|
|
111
|
+
// Remove newlines and replace with a space only when there's no text before or after
|
|
112
|
+
filteredText = filteredText.replace(/^\s*\n/gm, " ");
|
|
113
|
+
// Remove backticks from inline code, but not from code blocks
|
|
114
|
+
filteredText = filteredText.replace(/(?<!`)`([^`\n]+)`(?!`)/g, "$1");
|
|
115
|
+
// Remove repeated sequences of 5 or more characters
|
|
116
|
+
if (this._settings.filterRepeatedSequences) {
|
|
117
|
+
filteredText = filteredText.replace(/(\S)(\1{4,})/gu, "");
|
|
118
|
+
}
|
|
119
|
+
// Preserve numbered list items with a unique marker, §NUM§
|
|
120
|
+
filteredText = filteredText.replace(/^(\p{Nd}+\.)\s/u, "§NUM§$1 ");
|
|
121
|
+
// Preserve leading/trailing spaces with a unique marker, §
|
|
122
|
+
// Critical for word-by-word streaming in bot-tts-text
|
|
123
|
+
filteredText = filteredText.replace(/^( +)|\s+$/gm, (m) => "§".repeat(m.length));
|
|
124
|
+
// Remove space placeholders before tables, so that tables are converted to HTML
|
|
125
|
+
// correctly
|
|
126
|
+
filteredText = filteredText.replace(/§\| /g, "| ");
|
|
127
|
+
// Convert markdown to HTML
|
|
128
|
+
filteredText = markdownToHtml(filteredText, { tables: !!this._settings.filterTables });
|
|
129
|
+
// Remove tables
|
|
130
|
+
if (this._settings.filterTables) {
|
|
131
|
+
filteredText = this.removeTables(filteredText);
|
|
132
|
+
}
|
|
133
|
+
// Remove HTML tags
|
|
134
|
+
filteredText = filteredText.replace(/<[^<]+?>/g, "");
|
|
135
|
+
// Replace HTML entities
|
|
136
|
+
filteredText = filteredText.replaceAll(" ", " ");
|
|
137
|
+
filteredText = filteredText.replaceAll("<", "<");
|
|
138
|
+
filteredText = filteredText.replaceAll(">", ">");
|
|
139
|
+
filteredText = filteredText.replaceAll("&", "&");
|
|
140
|
+
// Remove double asterisks (consecutive without any exceptions)
|
|
141
|
+
filteredText = filteredText.replace(/\*\*/g, "");
|
|
142
|
+
// Remove single asterisks at the start or end of words
|
|
143
|
+
filteredText = filteredText.replace(/(^|\s)\*|\*($|\s)/g, "$1$2");
|
|
144
|
+
// Remove Markdown table formatting
|
|
145
|
+
filteredText = filteredText.replace(/\|/g, "");
|
|
146
|
+
filteredText = filteredText.replace(/^\s*[-:]+\s*$/gm, "");
|
|
147
|
+
// Remove code blocks
|
|
148
|
+
if (this._settings.filterCode) {
|
|
149
|
+
filteredText = this._removeCodeBlocks(filteredText);
|
|
150
|
+
}
|
|
151
|
+
// Restore numbered list items
|
|
152
|
+
filteredText = filteredText.replaceAll("§NUM§", "");
|
|
153
|
+
// Restore leading and trailing spaces
|
|
154
|
+
filteredText = filteredText.replace(/§/g, " ");
|
|
155
|
+
// Make links more readable
|
|
156
|
+
filteredText = filteredText.replace(/https?:\/\//g, "");
|
|
157
|
+
return filteredText;
|
|
158
|
+
}
|
|
159
|
+
return text;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Handle interruption events in the processing pipeline.
|
|
163
|
+
*
|
|
164
|
+
* Resets the filter state and clears any tracking variables for code
|
|
165
|
+
* blocks and tables.
|
|
166
|
+
*/
|
|
167
|
+
async handleInterruption() {
|
|
168
|
+
this._interrupted = true;
|
|
169
|
+
this._inCodeBlock = false;
|
|
170
|
+
this._inTable = false;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Reset the filter state after an interruption has been handled.
|
|
174
|
+
*
|
|
175
|
+
* Clears the interrupted flag to restore normal operation.
|
|
176
|
+
*/
|
|
177
|
+
async resetInterruption() {
|
|
178
|
+
this._interrupted = false;
|
|
179
|
+
}
|
|
180
|
+
//
|
|
181
|
+
// Filter code
|
|
182
|
+
//
|
|
183
|
+
/**
|
|
184
|
+
* Remove code blocks from the input text.
|
|
185
|
+
*
|
|
186
|
+
* Handles interruptions and delegates to specific methods based on the
|
|
187
|
+
* current state.
|
|
188
|
+
*/
|
|
189
|
+
_removeCodeBlocks(text) {
|
|
190
|
+
if (this._interrupted) {
|
|
191
|
+
this._inCodeBlock = false;
|
|
192
|
+
return text;
|
|
193
|
+
}
|
|
194
|
+
// Pattern to match three consecutive backticks (code block delimiter)
|
|
195
|
+
const codeBlockPattern = "```";
|
|
196
|
+
const index = text.indexOf(codeBlockPattern);
|
|
197
|
+
const match = index === -1 ? null : { start: index, end: index + codeBlockPattern.length };
|
|
198
|
+
if (this._inCodeBlock) {
|
|
199
|
+
return this._handleInCodeBlock(match, text);
|
|
200
|
+
}
|
|
201
|
+
return this._handleNotInCodeBlock(match, text, codeBlockPattern);
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Handle text when currently inside a code block.
|
|
205
|
+
*
|
|
206
|
+
* If we find the end of the block, return text after it. Otherwise, skip
|
|
207
|
+
* the content.
|
|
208
|
+
*/
|
|
209
|
+
_handleInCodeBlock(match, text) {
|
|
210
|
+
if (match) {
|
|
211
|
+
this._inCodeBlock = false;
|
|
212
|
+
return text.slice(match.end).trim();
|
|
213
|
+
}
|
|
214
|
+
return ""; // Skip content inside code block
|
|
215
|
+
}
|
|
216
|
+
/** Handle text when not currently inside a code block. */
|
|
217
|
+
_handleNotInCodeBlock(match, text, codeBlockPattern) {
|
|
218
|
+
if (!match) {
|
|
219
|
+
return text; // No code block found, return original text
|
|
220
|
+
}
|
|
221
|
+
const startIndex = match.start;
|
|
222
|
+
if (startIndex === 0 || /^\s+$/.test(text.slice(0, startIndex))) {
|
|
223
|
+
return this._handleStartOfCodeBlock(text, startIndex);
|
|
224
|
+
}
|
|
225
|
+
return this._handleCodeBlockWithinText(text, codeBlockPattern);
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Handle the case where a code block starts.
|
|
229
|
+
*
|
|
230
|
+
* Return any text before the code block and set the state to inside a code
|
|
231
|
+
* block.
|
|
232
|
+
*/
|
|
233
|
+
_handleStartOfCodeBlock(text, startIndex) {
|
|
234
|
+
this._inCodeBlock = true;
|
|
235
|
+
return text.slice(0, startIndex).trim();
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Handle code blocks found within text content.
|
|
239
|
+
*
|
|
240
|
+
* If it's a complete code block, remove it and return surrounding text. If
|
|
241
|
+
* it's the start of a code block, return text before it and set state.
|
|
242
|
+
*/
|
|
243
|
+
_handleCodeBlockWithinText(text, codeBlockPattern) {
|
|
244
|
+
const parts = text.split(codeBlockPattern);
|
|
245
|
+
if (parts.length > 2) {
|
|
246
|
+
return `${parts[0]} ${parts[parts.length - 1]}`.trim();
|
|
247
|
+
}
|
|
248
|
+
this._inCodeBlock = true;
|
|
249
|
+
return parts[0].trim();
|
|
250
|
+
}
|
|
251
|
+
//
|
|
252
|
+
// Filter tables
|
|
253
|
+
//
|
|
254
|
+
/**
|
|
255
|
+
* Remove HTML tables from the input text.
|
|
256
|
+
*
|
|
257
|
+
* Handles cases where both start and end tags are in the same input, as
|
|
258
|
+
* well as tables that span multiple text chunks.
|
|
259
|
+
*
|
|
260
|
+
* @param text The text containing HTML tables to remove.
|
|
261
|
+
* @returns The text with tables removed.
|
|
262
|
+
*/
|
|
263
|
+
removeTables(text) {
|
|
264
|
+
if (this._interrupted) {
|
|
265
|
+
this._inTable = false;
|
|
266
|
+
return text;
|
|
267
|
+
}
|
|
268
|
+
// Remove complete tables
|
|
269
|
+
text = text.replace(/<table>[\s\S]*?<\/table>/gi, "");
|
|
270
|
+
// Handle partial tables at the start
|
|
271
|
+
if (this._inTable) {
|
|
272
|
+
const match = /^[\s\S]*<\/table>/i.exec(text);
|
|
273
|
+
if (match) {
|
|
274
|
+
this._inTable = false;
|
|
275
|
+
return text.slice(match[0].length).trim();
|
|
276
|
+
}
|
|
277
|
+
return ""; // Still inside a table, remove all content
|
|
278
|
+
}
|
|
279
|
+
// Handle partial tables at the end
|
|
280
|
+
const match = /<table>[\s\S]*/i.exec(text);
|
|
281
|
+
if (match) {
|
|
282
|
+
this._inTable = true;
|
|
283
|
+
return text.slice(0, match.index).trim();
|
|
284
|
+
}
|
|
285
|
+
return text.trim();
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
//
|
|
289
|
+
// Markdown -> HTML (a small stand-in for Python-Markdown's `Markdown.convert`).
|
|
290
|
+
//
|
|
291
|
+
const STX = "\u0002";
|
|
292
|
+
const ETX = "\u0003";
|
|
293
|
+
function escapeHtml(text) {
|
|
294
|
+
return text.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
295
|
+
}
|
|
296
|
+
/** Characters Python-Markdown lets a backslash escape. */
|
|
297
|
+
const ESCAPED_CHARS = new Set("\\`*_{}[]()>#+-.!".split(""));
|
|
298
|
+
/** Inline Markdown -> HTML, applied pattern by pattern as Python-Markdown does. */
|
|
299
|
+
function inlineToHtml(text) {
|
|
300
|
+
const stash = [];
|
|
301
|
+
const put = (html) => {
|
|
302
|
+
stash.push(html);
|
|
303
|
+
return `${STX}${stash.length - 1}${ETX}`;
|
|
304
|
+
};
|
|
305
|
+
// Code spans (highest priority): the content is literal.
|
|
306
|
+
text = text.replace(/(?<!\\)(`+)([\s\S]+?)(?<!`)\1(?!`)/g, (_, _ticks, code) => put(`<code>${escapeHtml(code.trim())}</code>`));
|
|
307
|
+
// Backslash escapes.
|
|
308
|
+
text = text.replace(/\\([\s\S])/g, (m, ch) => ESCAPED_CHARS.has(ch) ? put(escapeHtml(ch)) : m);
|
|
309
|
+
// Automatic links and e-mail addresses.
|
|
310
|
+
text = text.replace(/<((?:[Ff]|[Hh][Tt])[Tt][Pp][Ss]?:\/\/[^<>]*)>/g, (_, url) => put(`<a href="${escapeHtml(url)}">${escapeHtml(url)}</a>`));
|
|
311
|
+
// Python-Markdown obfuscates e-mail addresses as numeric character
|
|
312
|
+
// references; they survive tag stripping as such.
|
|
313
|
+
text = text.replace(/<([^<> !]+@[^@<> ]+)>/g, (_, email) => {
|
|
314
|
+
const names = { 34: "quot", 38: "amp", 60: "lt", 62: "gt" };
|
|
315
|
+
const obfuscated = [...email]
|
|
316
|
+
.map((ch) => {
|
|
317
|
+
const cp = ch.codePointAt(0);
|
|
318
|
+
return `&${names[cp] ?? `#${cp}`};`;
|
|
319
|
+
})
|
|
320
|
+
.join("");
|
|
321
|
+
return put(`<a href="mailto:${obfuscated}">${obfuscated}</a>`);
|
|
322
|
+
});
|
|
323
|
+
// Raw inline HTML and entities pass through untouched.
|
|
324
|
+
text = text.replace(/<(\/?[a-zA-Z][^<>@ ]*( [^<>]*)?|!--(?:(?!<!--|-->)[\s\S])*--)>/g, (m) => put(m));
|
|
325
|
+
text = text.replace(/&(?:#[0-9]+|#x[0-9a-fA-F]+|[a-zA-Z0-9]+);/g, (m) => put(m));
|
|
326
|
+
// Everything left is text.
|
|
327
|
+
text = escapeHtml(text);
|
|
328
|
+
// Lone asterisks and underscores surrounded by space are not emphasis.
|
|
329
|
+
text = text.replace(/(^|(?<=\s))(\*{1,3}|_{1,3})(?=\s|$)/g, (m) => put(m));
|
|
330
|
+
// Images, then links.
|
|
331
|
+
text = text.replace(/!\[([^\]]*)\]\(\s*<?([^)\s>]*)>?(?:\s+(?:"[^"]*"|'[^']*'))?\s*\)/g, (_, alt, src) => put(`<img alt="${alt}" src="${src}" />`));
|
|
332
|
+
text = text.replace(/\[([^\]]*)\]\(\s*<?([^)\s>]*)>?(?:\s+(?:"[^"]*"|'[^']*'))?\s*\)/g, (_, label, href) => `<a href="${href}">${label}</a>`);
|
|
333
|
+
// Emphasis, asterisks first (they work mid-word), then "smart" underscores.
|
|
334
|
+
text = text.replace(/\*\*\*([\s\S]+?)\*\*\*/g, "<strong><em>$1</em></strong>");
|
|
335
|
+
text = text.replace(/\*\*([\s\S]+?)\*\*/g, "<strong>$1</strong>");
|
|
336
|
+
text = text.replace(/\*([^*]+)\*/g, "<em>$1</em>");
|
|
337
|
+
text = text.replace(/(?<![\p{L}\p{N}_])___(?!_)([\s\S]+?)(?<!_)___(?![\p{L}\p{N}_])/gu, "<strong><em>$1</em></strong>");
|
|
338
|
+
text = text.replace(/(?<![\p{L}\p{N}_])__(?!_)([\s\S]+?)(?<!_)__(?![\p{L}\p{N}_])/gu, "<strong>$1</strong>");
|
|
339
|
+
text = text.replace(/(?<![\p{L}\p{N}_])_(?!_)([\s\S]+?)(?<!_)_(?![\p{L}\p{N}_])/gu, "<em>$1</em>");
|
|
340
|
+
// Hard line breaks.
|
|
341
|
+
text = text.replace(/ {2,}\n/g, "<br />\n");
|
|
342
|
+
// Put the stashed pieces back (they may nest).
|
|
343
|
+
const placeholder = new RegExp(`${STX}(\\d+)${ETX}`, "g");
|
|
344
|
+
while (placeholder.test(text)) {
|
|
345
|
+
placeholder.lastIndex = 0;
|
|
346
|
+
text = text.replace(placeholder, (_, i) => stash[Number(i)] ?? "");
|
|
347
|
+
}
|
|
348
|
+
return text;
|
|
349
|
+
}
|
|
350
|
+
/** Split a table row into cells, dropping the border pipes. */
|
|
351
|
+
function splitTableRow(row) {
|
|
352
|
+
let r = row.trim();
|
|
353
|
+
if (r.startsWith("|"))
|
|
354
|
+
r = r.slice(1);
|
|
355
|
+
if (r.endsWith("|") && !r.endsWith("\\|"))
|
|
356
|
+
r = r.slice(0, -1);
|
|
357
|
+
return r.split(/(?<!\\)\|/).map((c) => c.trim());
|
|
358
|
+
}
|
|
359
|
+
function isTable(block) {
|
|
360
|
+
const rows = block.split("\n").map((r) => r.replace(/^ +| +$/g, ""));
|
|
361
|
+
if (rows.length < 2)
|
|
362
|
+
return false;
|
|
363
|
+
const header0 = rows[0];
|
|
364
|
+
const border = header0.startsWith("|") || /(?<!\\)\|$/.test(header0);
|
|
365
|
+
const columns = splitTableRow(header0).length;
|
|
366
|
+
if (columns <= 1 && !border)
|
|
367
|
+
return false;
|
|
368
|
+
const separator = splitTableRow(rows[1]);
|
|
369
|
+
return separator.length === columns && /^[|:\- ]*$/.test(separator.join("")) && rows[1] !== "";
|
|
370
|
+
}
|
|
371
|
+
function tableToHtml(block) {
|
|
372
|
+
const rows = block.split("\n");
|
|
373
|
+
const header = splitTableRow(rows[0]);
|
|
374
|
+
const cell = (tag, text) => `<${tag}>${inlineToHtml(text)}</${tag}>`;
|
|
375
|
+
const out = ["<table>", "<thead>", "<tr>"];
|
|
376
|
+
for (const h of header)
|
|
377
|
+
out.push(cell("th", h));
|
|
378
|
+
out.push("</tr>", "</thead>", "<tbody>");
|
|
379
|
+
for (const row of rows.slice(2)) {
|
|
380
|
+
const cells = splitTableRow(row);
|
|
381
|
+
out.push("<tr>");
|
|
382
|
+
for (let i = 0; i < header.length; i++)
|
|
383
|
+
out.push(cell("td", cells[i] ?? ""));
|
|
384
|
+
out.push("</tr>");
|
|
385
|
+
}
|
|
386
|
+
out.push("</tbody>", "</table>");
|
|
387
|
+
return out.join("\n");
|
|
388
|
+
}
|
|
389
|
+
const LIST_ITEM_RE = /^[ ]{0,3}(?:\d+\.|[*+-])[ ]+([\s\S]*)$/;
|
|
390
|
+
const OLIST_RE = /^[ ]{0,3}\d+\.[ ]+/;
|
|
391
|
+
const ULIST_RE = /^[ ]{0,3}[*+-][ ]+/;
|
|
392
|
+
const HR_RE = /^[ ]{0,3}(?:(?:-+[ ]{0,2}){3,}|(?:_+[ ]{0,2}){3,}|(?:\*+[ ]{0,2}){3,})[ ]*$/m;
|
|
393
|
+
const HASH_HEADER_RE = /(?:^|\n)(#{1,6})((?:\\[\s\S]|[^\\])*?)#*(?:\n|$)/;
|
|
394
|
+
const SETEXT_RE = /^.*?\n[=-]+[ ]*(?:\n|$)/;
|
|
395
|
+
const QUOTE_RE = /(^|\n)[ ]{0,3}>[ ]?(.*)/;
|
|
396
|
+
function listToHtml(block, ordered) {
|
|
397
|
+
const items = [];
|
|
398
|
+
for (const line of block.split("\n")) {
|
|
399
|
+
const m = LIST_ITEM_RE.exec(line);
|
|
400
|
+
if (m && !line.startsWith(" ")) {
|
|
401
|
+
items.push(m[1]);
|
|
402
|
+
}
|
|
403
|
+
else if (items.length > 0) {
|
|
404
|
+
const continuation = line.startsWith(" ") ? line.slice(4) : line;
|
|
405
|
+
items[items.length - 1] = `${items[items.length - 1]}\n${continuation}`;
|
|
406
|
+
}
|
|
407
|
+
else {
|
|
408
|
+
items.push(line);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
const tag = ordered ? "ol" : "ul";
|
|
412
|
+
return [`<${tag}>`, ...items.map((item) => `<li>${inlineToHtml(item)}</li>`), `</${tag}>`].join("\n");
|
|
413
|
+
}
|
|
414
|
+
/** Block-level Markdown -> HTML for one block (text between blank lines). */
|
|
415
|
+
function blockToHtml(block, options, out) {
|
|
416
|
+
if (!block.trim())
|
|
417
|
+
return;
|
|
418
|
+
if (options.tables && isTable(block)) {
|
|
419
|
+
out.push(tableToHtml(block));
|
|
420
|
+
return;
|
|
421
|
+
}
|
|
422
|
+
if (block.startsWith(" ")) {
|
|
423
|
+
const code = block
|
|
424
|
+
.split("\n")
|
|
425
|
+
.map((l) => (l.startsWith(" ") ? l.slice(4) : l))
|
|
426
|
+
.join("\n");
|
|
427
|
+
out.push(`<pre><code>${escapeHtml(code.replace(/\n+$/, ""))}\n</code></pre>`);
|
|
428
|
+
return;
|
|
429
|
+
}
|
|
430
|
+
const hash = HASH_HEADER_RE.exec(block);
|
|
431
|
+
if (hash) {
|
|
432
|
+
const before = block.slice(0, hash.index);
|
|
433
|
+
const after = block.slice(hash.index + hash[0].length);
|
|
434
|
+
if (before)
|
|
435
|
+
blockToHtml(before, options, out);
|
|
436
|
+
const level = hash[1].length;
|
|
437
|
+
out.push(`<h${level}>${inlineToHtml(hash[2].trim())}</h${level}>`);
|
|
438
|
+
if (after)
|
|
439
|
+
blockToHtml(after, options, out);
|
|
440
|
+
return;
|
|
441
|
+
}
|
|
442
|
+
if (SETEXT_RE.test(block)) {
|
|
443
|
+
const lines = block.split("\n");
|
|
444
|
+
const level = lines[1].startsWith("=") ? 1 : 2;
|
|
445
|
+
out.push(`<h${level}>${inlineToHtml(lines[0].trim())}</h${level}>`);
|
|
446
|
+
const rest = lines.slice(2).join("\n");
|
|
447
|
+
if (rest)
|
|
448
|
+
blockToHtml(rest, options, out);
|
|
449
|
+
return;
|
|
450
|
+
}
|
|
451
|
+
const hr = HR_RE.exec(block);
|
|
452
|
+
if (hr) {
|
|
453
|
+
const before = block.slice(0, hr.index).replace(/\n$/, "");
|
|
454
|
+
const after = block.slice(hr.index + hr[0].length).replace(/^\n/, "");
|
|
455
|
+
if (before)
|
|
456
|
+
blockToHtml(before, options, out);
|
|
457
|
+
out.push("<hr />");
|
|
458
|
+
if (after)
|
|
459
|
+
blockToHtml(after, options, out);
|
|
460
|
+
return;
|
|
461
|
+
}
|
|
462
|
+
if (OLIST_RE.test(block) || ULIST_RE.test(block)) {
|
|
463
|
+
out.push(listToHtml(block, OLIST_RE.test(block)));
|
|
464
|
+
return;
|
|
465
|
+
}
|
|
466
|
+
const quote = QUOTE_RE.exec(block);
|
|
467
|
+
if (quote) {
|
|
468
|
+
const before = block.slice(0, quote.index);
|
|
469
|
+
if (before)
|
|
470
|
+
blockToHtml(before, options, out);
|
|
471
|
+
const quoted = block
|
|
472
|
+
.slice(quote.index)
|
|
473
|
+
.replace(/^\n/, "")
|
|
474
|
+
.split("\n")
|
|
475
|
+
.map((l) => l.replace(/^[ ]{0,3}>[ ]?/, ""))
|
|
476
|
+
.join("\n");
|
|
477
|
+
const inner = [];
|
|
478
|
+
for (const b of quoted.split(/\n[ ]*\n/))
|
|
479
|
+
blockToHtml(b, options, inner);
|
|
480
|
+
out.push(["<blockquote>", ...inner, "</blockquote>"].join("\n"));
|
|
481
|
+
return;
|
|
482
|
+
}
|
|
483
|
+
out.push(`<p>${inlineToHtml(block.replace(/^\s+/, ""))}</p>`);
|
|
484
|
+
}
|
|
485
|
+
/**
|
|
486
|
+
* Convert Markdown to HTML following Python-Markdown's rules for the common
|
|
487
|
+
* constructs. With `tables`, pipe tables become `<table>` elements (the
|
|
488
|
+
* "tables" extension upstream).
|
|
489
|
+
*/
|
|
490
|
+
function markdownToHtml(source, options) {
|
|
491
|
+
if (!source.trim())
|
|
492
|
+
return "";
|
|
493
|
+
source = source.replace(new RegExp(`[${STX}${ETX}]`, "g"), "");
|
|
494
|
+
source = source.replace(/\r\n?/g, "\n");
|
|
495
|
+
// Expand tabs to 4-column stops.
|
|
496
|
+
source = source
|
|
497
|
+
.split("\n")
|
|
498
|
+
.map((line) => {
|
|
499
|
+
let col = 0;
|
|
500
|
+
let res = "";
|
|
501
|
+
for (const ch of line) {
|
|
502
|
+
if (ch === "\t") {
|
|
503
|
+
const n = 4 - (col % 4);
|
|
504
|
+
res += " ".repeat(n);
|
|
505
|
+
col += n;
|
|
506
|
+
}
|
|
507
|
+
else {
|
|
508
|
+
res += ch;
|
|
509
|
+
col += 1;
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
return res;
|
|
513
|
+
})
|
|
514
|
+
.join("\n");
|
|
515
|
+
source = source.replace(/(?<=\n) +\n/g, "\n");
|
|
516
|
+
const out = [];
|
|
517
|
+
for (const block of source.split(/\n\n+/)) {
|
|
518
|
+
blockToHtml(block.replace(/^\n+|\n+$/g, ""), options, out);
|
|
519
|
+
}
|
|
520
|
+
return out.join("\n").trim();
|
|
521
|
+
}
|
|
522
|
+
//# sourceMappingURL=markdown_text_filter.js.map
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remove XML/SSML-like markup from a possibly-truncated text fragment.
|
|
3
|
+
*
|
|
4
|
+
* Syntax-based, not tag-name based: treats anything between '<' and '>' as
|
|
5
|
+
* markup and preserves text outside it. An unclosed '<' swallows the rest of
|
|
6
|
+
* `text`, matching how a raw word-timestamp token can arrive mid-tag.
|
|
7
|
+
*
|
|
8
|
+
* For a *complete* text, use `stripCompleteMarkup` instead.
|
|
9
|
+
*
|
|
10
|
+
* Used by `TextSegmentMap` to match a word against a segment, where the
|
|
11
|
+
* incoming word may be a fragment of a still-open tag.
|
|
12
|
+
*/
|
|
13
|
+
export declare function stripMarkup(text: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Remove well-formed '<...>' markup from a complete, static text.
|
|
16
|
+
*
|
|
17
|
+
* Unlike `stripMarkup`, only strips matched '<...>' pairs -- a lone '<' with
|
|
18
|
+
* no later '>' is left in place as real content rather than swallowing the
|
|
19
|
+
* rest of `text`, since there is no streamed fragment here that could be
|
|
20
|
+
* mid-tag.
|
|
21
|
+
*
|
|
22
|
+
* Used by `TextSegment.isTransformed`, by `alnumOnly`, and by
|
|
23
|
+
* `WordCompletionTracker` to default `userFacingText` to a tag-free string.
|
|
24
|
+
*/
|
|
25
|
+
export declare function stripCompleteMarkup(text: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Return the raw offset into `text` just past its `n`-th markup-stripped char.
|
|
28
|
+
*
|
|
29
|
+
* Inverse of `stripMarkup` for a prefix: where `stripMarkup` collects every
|
|
30
|
+
* non-markup char, this finds the raw index one past the `n`-th of them --
|
|
31
|
+
* converting a match measured in markup-stripped space back to a raw offset.
|
|
32
|
+
* Returns `text.length` when `text` has fewer than `n` non-markup chars.
|
|
33
|
+
*/
|
|
34
|
+
export declare function rawOffsetAfterCleanChars(text: string, n: number): number;
|
|
35
|
+
/**
|
|
36
|
+
* Split `text` into alternating runs of tagged and untagged words.
|
|
37
|
+
*
|
|
38
|
+
* A word is considered tagged if it overlaps a complete `'<...>'` pair. A lone
|
|
39
|
+
* `'<'` is treated as content, not as the start of a tag (see
|
|
40
|
+
* `stripCompleteMarkup`). Consecutive words with the same classification form
|
|
41
|
+
* a single run, so whitespace inside a tag such as `<phoneme alphabet="ipa">`
|
|
42
|
+
* never splits the words it spans across runs.
|
|
43
|
+
*
|
|
44
|
+
* Text with no markup yields a single run, unchanged.
|
|
45
|
+
*
|
|
46
|
+
* Used by `TextSegmentMap` when it builds its segments, to give a tag one of
|
|
47
|
+
* its own.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* splitMarkupRuns("I love to count <spell>1234</spell>.");
|
|
51
|
+
* // -> ["I love to count ", "<spell>1234</spell>."]
|
|
52
|
+
*/
|
|
53
|
+
export declare function splitMarkupRuns(text: string): string[];
|
|
54
|
+
//# sourceMappingURL=markup_utils.d.ts.map
|