repoburg 1.3.128 → 1.3.129
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/backend/coverage/clover.xml +12003 -0
- package/backend/coverage/coverage-final.json +313 -0
- package/backend/coverage/lcov-report/base.css +224 -0
- package/backend/coverage/lcov-report/block-navigation.js +87 -0
- package/backend/coverage/lcov-report/favicon.png +0 -0
- package/backend/coverage/lcov-report/index.html +1301 -0
- package/backend/coverage/lcov-report/packages/gemini-core/examples/index.html +116 -0
- package/backend/coverage/lcov-report/packages/gemini-core/examples/simple.ts.html +445 -0
- package/backend/coverage/lcov-report/packages/gemini-core/index.html +116 -0
- package/backend/coverage/lcov-report/packages/gemini-core/index.ts.html +127 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/codeAssist.ts.html +193 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/converter.ts.html +832 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/index.html +206 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/oauth-credential-storage.ts.html +469 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/oauth2.ts.html +1705 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/server.ts.html +790 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/setup.ts.html +454 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/types.ts.html +685 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/config/config.ts.html +307 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/config/index.html +146 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/config/models.ts.html +151 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/config/storage.ts.html +172 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/core/contentGenerator.ts.html +490 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/core/geminiChat.ts.html +1237 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/core/geminiRequest.ts.html +139 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/core/index.html +176 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/core/prompts.ts.html +409 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/core/tokenLimits.ts.html +181 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/index.html +116 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/index.ts.html +187 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/base-token-storage.ts.html +229 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/file-token-storage.ts.html +634 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/hybrid-token-storage.ts.html +373 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/index.html +191 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/index.ts.html +124 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/keychain-token-storage.ts.html +835 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/types.ts.html +211 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/utils/errors.ts.html +421 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/utils/index.html +191 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/utils/partUtils.ts.html +592 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/utils/quotaErrorDetection.ts.html +388 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/utils/retry.ts.html +877 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/utils/session.ts.html +112 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/utils/userAccountManager.ts.html +502 -0
- package/backend/coverage/lcov-report/packages/tokenpatch/index.html +161 -0
- package/backend/coverage/lcov-report/packages/tokenpatch/index.ts.html +415 -0
- package/backend/coverage/lcov-report/packages/tokenpatch/parser.ts.html +139 -0
- package/backend/coverage/lcov-report/packages/tokenpatch/patcher.ts.html +1249 -0
- package/backend/coverage/lcov-report/packages/tokenpatch/strategies/index.html +131 -0
- package/backend/coverage/lcov-report/packages/tokenpatch/strategies/tiktoken-tokenizer.ts.html +187 -0
- package/backend/coverage/lcov-report/packages/tokenpatch/strategies/tree-sitter-tokenizer.ts.html +193 -0
- package/backend/coverage/lcov-report/packages/tokenpatch/tokens.ts.html +178 -0
- package/backend/coverage/lcov-report/prettify.css +1 -0
- package/backend/coverage/lcov-report/prettify.js +2 -0
- package/backend/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/backend/coverage/lcov-report/sorter.js +210 -0
- package/backend/coverage/lcov-report/src/ai-actions/ai-action-batch.service.ts.html +1549 -0
- package/backend/coverage/lcov-report/src/ai-actions/ai-actions.controller.ts.html +904 -0
- package/backend/coverage/lcov-report/src/ai-actions/ai-actions.module.ts.html +175 -0
- package/backend/coverage/lcov-report/src/ai-actions/ai-actions.service.ts.html +1534 -0
- package/backend/coverage/lcov-report/src/ai-actions/index.html +161 -0
- package/backend/coverage/lcov-report/src/app.controller.ts.html +151 -0
- package/backend/coverage/lcov-report/src/app.module.ts.html +451 -0
- package/backend/coverage/lcov-report/src/app.service.ts.html +163 -0
- package/backend/coverage/lcov-report/src/application-state/application-state.controller.ts.html +1609 -0
- package/backend/coverage/lcov-report/src/application-state/application-state.module.ts.html +136 -0
- package/backend/coverage/lcov-report/src/application-state/application-state.service.ts.html +2281 -0
- package/backend/coverage/lcov-report/src/application-state/dto/index.html +416 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-alibaba-config.dto.ts.html +109 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-auto-context-fetch-enabled.dto.ts.html +118 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-auto-send-to-ai-studio-enabled.dto.ts.html +109 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-context-token-limit.dto.ts.html +124 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-execution-strategy.dto.ts.html +121 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-followup-token-limit.dto.ts.html +124 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-history-compression-enabled.dto.ts.html +115 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-llm-retry-enabled.dto.ts.html +115 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-llm-retry-max-attempts.dto.ts.html +127 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-manual-llm-enabled.dto.ts.html +118 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-ollama-config.dto.ts.html +109 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-openai-config.dto.ts.html +139 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-openrouter-config.dto.ts.html +109 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-streaming-enabled.dto.ts.html +109 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-syntax-validation-enabled.dto.ts.html +118 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-theme.dto.ts.html +124 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-tools-enabled.dto.ts.html +118 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-websocket-enabled.dto.ts.html +109 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-yolo-mode-message.dto.ts.html +124 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-yolo-mode.dto.ts.html +118 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-zai-config.dto.ts.html +109 -0
- package/backend/coverage/lcov-report/src/application-state/index.html +146 -0
- package/backend/coverage/lcov-report/src/common/cache/cache-invalidation.service.ts.html +1297 -0
- package/backend/coverage/lcov-report/src/common/cache/cache-invalidation.subscriber.ts.html +712 -0
- package/backend/coverage/lcov-report/src/common/cache/etag-cache.service.ts.html +379 -0
- package/backend/coverage/lcov-report/src/common/cache/index.html +146 -0
- package/backend/coverage/lcov-report/src/common/common.module.ts.html +121 -0
- package/backend/coverage/lcov-report/src/common/index.html +116 -0
- package/backend/coverage/lcov-report/src/common/interceptors/etag-cache.interceptor.ts.html +337 -0
- package/backend/coverage/lcov-report/src/common/interceptors/index.html +116 -0
- package/backend/coverage/lcov-report/src/common/middleware/cache.middleware.ts.html +265 -0
- package/backend/coverage/lcov-report/src/common/middleware/index.html +116 -0
- package/backend/coverage/lcov-report/src/context-generation/context-generation.module.ts.html +118 -0
- package/backend/coverage/lcov-report/src/context-generation/context-generation.service.ts.html +1501 -0
- package/backend/coverage/lcov-report/src/context-generation/index.html +131 -0
- package/backend/coverage/lcov-report/src/context-snippets/context-snippets.controller.ts.html +427 -0
- package/backend/coverage/lcov-report/src/context-snippets/context-snippets.module.ts.html +142 -0
- package/backend/coverage/lcov-report/src/context-snippets/context-snippets.service.ts.html +442 -0
- package/backend/coverage/lcov-report/src/context-snippets/dto/context-snippet.dto.ts.html +211 -0
- package/backend/coverage/lcov-report/src/context-snippets/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/context-snippets/index.html +146 -0
- package/backend/coverage/lcov-report/src/context-templates/context-templates.controller.ts.html +724 -0
- package/backend/coverage/lcov-report/src/context-templates/context-templates.module.ts.html +142 -0
- package/backend/coverage/lcov-report/src/context-templates/context-templates.service.ts.html +1015 -0
- package/backend/coverage/lcov-report/src/context-templates/dto/context-template.dto.ts.html +511 -0
- package/backend/coverage/lcov-report/src/context-templates/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/context-templates/index.html +146 -0
- package/backend/coverage/lcov-report/src/core-entities/ai-action.entity.ts.html +613 -0
- package/backend/coverage/lcov-report/src/core-entities/application-state.entity.ts.html +124 -0
- package/backend/coverage/lcov-report/src/core-entities/base.entity.ts.html +211 -0
- package/backend/coverage/lcov-report/src/core-entities/context-snippet.entity.ts.html +190 -0
- package/backend/coverage/lcov-report/src/core-entities/context-template.entity.ts.html +439 -0
- package/backend/coverage/lcov-report/src/core-entities/custom-snippet.entity.ts.html +205 -0
- package/backend/coverage/lcov-report/src/core-entities/custom-variable.entity.ts.html +241 -0
- package/backend/coverage/lcov-report/src/core-entities/enums.ts.html +553 -0
- package/backend/coverage/lcov-report/src/core-entities/execution-log.entity.ts.html +208 -0
- package/backend/coverage/lcov-report/src/core-entities/index.html +371 -0
- package/backend/coverage/lcov-report/src/core-entities/index.ts.html +136 -0
- package/backend/coverage/lcov-report/src/core-entities/llm-call-log.entity.ts.html +388 -0
- package/backend/coverage/lcov-report/src/core-entities/mcp-config.entity.ts.html +256 -0
- package/backend/coverage/lcov-report/src/core-entities/mcp-tool.entity.ts.html +256 -0
- package/backend/coverage/lcov-report/src/core-entities/project.entity.ts.html +181 -0
- package/backend/coverage/lcov-report/src/core-entities/session-input.entity.ts.html +745 -0
- package/backend/coverage/lcov-report/src/core-entities/session.entity.ts.html +688 -0
- package/backend/coverage/lcov-report/src/core-entities/system-prompt.entity.ts.html +349 -0
- package/backend/coverage/lcov-report/src/core-entities/tool-hook.entity.ts.html +235 -0
- package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.controller.ts.html +442 -0
- package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.module.ts.html +124 -0
- package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.service.ts.html +304 -0
- package/backend/coverage/lcov-report/src/custom-snippets/dto/custom-snippet.dto.ts.html +205 -0
- package/backend/coverage/lcov-report/src/custom-snippets/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/custom-snippets/index.html +146 -0
- package/backend/coverage/lcov-report/src/custom-variables/custom-variables.controller.ts.html +463 -0
- package/backend/coverage/lcov-report/src/custom-variables/custom-variables.module.ts.html +124 -0
- package/backend/coverage/lcov-report/src/custom-variables/custom-variables.service.ts.html +310 -0
- package/backend/coverage/lcov-report/src/custom-variables/dto/custom-variable.dto.ts.html +244 -0
- package/backend/coverage/lcov-report/src/custom-variables/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/custom-variables/index.html +146 -0
- package/backend/coverage/lcov-report/src/events/events.gateway.ts.html +295 -0
- package/backend/coverage/lcov-report/src/events/events.module.ts.html +109 -0
- package/backend/coverage/lcov-report/src/events/index.html +146 -0
- package/backend/coverage/lcov-report/src/events/websocket.events.ts.html +466 -0
- package/backend/coverage/lcov-report/src/execution-logs/dto/execution-log.dto.ts.html +130 -0
- package/backend/coverage/lcov-report/src/execution-logs/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/execution-logs/execution-logs.controller.ts.html +130 -0
- package/backend/coverage/lcov-report/src/execution-logs/execution-logs.module.ts.html +124 -0
- package/backend/coverage/lcov-report/src/execution-logs/execution-logs.service.ts.html +238 -0
- package/backend/coverage/lcov-report/src/execution-logs/index.html +146 -0
- package/backend/coverage/lcov-report/src/gemini/gemini-llm.provider.ts.html +553 -0
- package/backend/coverage/lcov-report/src/gemini/gemini.module.ts.html +109 -0
- package/backend/coverage/lcov-report/src/gemini/index.html +131 -0
- package/backend/coverage/lcov-report/src/global-config/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/global-config/dto/update-global-config.dto.ts.html +367 -0
- package/backend/coverage/lcov-report/src/global-config/global-config.controller.ts.html +220 -0
- package/backend/coverage/lcov-report/src/global-config/global-config.module.ts.html +115 -0
- package/backend/coverage/lcov-report/src/global-config/global-config.service.ts.html +397 -0
- package/backend/coverage/lcov-report/src/global-config/index.html +146 -0
- package/backend/coverage/lcov-report/src/http-exception.filter.ts.html +340 -0
- package/backend/coverage/lcov-report/src/index.html +206 -0
- package/backend/coverage/lcov-report/src/interactive-chat/chat.module.ts.html +187 -0
- package/backend/coverage/lcov-report/src/interactive-chat/chat.service.ts.html +1825 -0
- package/backend/coverage/lcov-report/src/interactive-chat/index.html +146 -0
- package/backend/coverage/lcov-report/src/interactive-chat/streaming.controller.ts.html +343 -0
- package/backend/coverage/lcov-report/src/llm-call-logs/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/llm-call-logs/dto/llm-call-log.dto.ts.html +214 -0
- package/backend/coverage/lcov-report/src/llm-call-logs/index.html +146 -0
- package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.controller.ts.html +634 -0
- package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.module.ts.html +124 -0
- package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.service.ts.html +643 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/apply-diff.handler.ts.html +1090 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/ask-user.handler.ts.html +433 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/create-file.handler.ts.html +757 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/delete-file.handler.ts.html +586 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/discard-messages.handler.ts.html +1153 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/apply-diff.args.dto.ts.html +124 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/ask-user.args.dto.ts.html +103 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/create-file.args.dto.ts.html +124 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/delete-file.args.dto.ts.html +106 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/execute-code.args.dto.ts.html +106 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/final.args.dto.ts.html +118 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/generate-title.args.dto.ts.html +190 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/get-session-history.args.dto.ts.html +196 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/howto.args.dto.ts.html +91 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/index.html +356 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/new-session.args.dto.ts.html +106 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/overwrite-file.args.dto.ts.html +124 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/patch.args.dto.ts.html +124 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/quick-edit.args.dto.ts.html +214 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/request-context.args.dto.ts.html +202 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/run-command.args.dto.ts.html +151 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/sanitizer.decorator.ts.html +181 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/write-todo.args.dto.ts.html +130 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/execute-code.handler.ts.html +631 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/final.handler.ts.html +469 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/generate-title.handler.ts.html +448 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/get-messages.handler.ts.html +1351 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/get-session-history.handler.ts.html +868 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/howto.handler.ts.html +481 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/index.html +416 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/invoke-subagent.handler.ts.html +580 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/list-sub-agents.handler.ts.html +352 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/context-aware.matcher.ts.html +1054 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/exact.matcher.ts.html +331 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/hybrid.matcher.ts.html +403 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/index.html +176 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/index.ts.html +100 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/normalized.matcher.ts.html +724 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/mcp-tool-action.handler.ts.html +358 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/new-session.handler.ts.html +379 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/overwrite-file.handler.ts.html +838 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/patch.handler.ts.html +1702 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/quick-edit.handler.ts.html +1459 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/request-context.handler.ts.html +679 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/run-command.handler.ts.html +964 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/write-todo.handler.ts.html +625 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/errors/handler-validation.error.ts.html +103 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/errors/index.html +116 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/history-compression.service.ts.html +1645 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/hooks/follow-up-post-execution.hook.ts.html +238 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/hooks/frontend-notification.hook.ts.html +181 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/hooks/index.html +161 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/hooks/invalid-tool-feedback.hook.ts.html +313 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/hooks/yolo-mode-post-execution.hook.ts.html +466 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/index.html +176 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/llm-orchestration.interfaces.ts.html +319 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/llm-orchestration.module.ts.html +706 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/llm-turn-processor.service.ts.html +1150 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/parser/index.html +131 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/parser/llm-output-parser.service.ts.html +658 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/parser/parsing.constants.ts.html +127 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/tool-schema.service.ts.html +547 -0
- package/backend/coverage/lcov-report/src/llm-provider/alibaba-llm.provider.ts.html +1681 -0
- package/backend/coverage/lcov-report/src/llm-provider/index.html +236 -0
- package/backend/coverage/lcov-report/src/llm-provider/llm-provider.controller.ts.html +187 -0
- package/backend/coverage/lcov-report/src/llm-provider/llm-provider.interface.ts.html +361 -0
- package/backend/coverage/lcov-report/src/llm-provider/llm-provider.module.ts.html +175 -0
- package/backend/coverage/lcov-report/src/llm-provider/ollama-llm.provider.ts.html +1780 -0
- package/backend/coverage/lcov-report/src/llm-provider/openai-llm.provider.ts.html +1867 -0
- package/backend/coverage/lcov-report/src/llm-provider/openrouter-llm.provider.ts.html +1891 -0
- package/backend/coverage/lcov-report/src/llm-provider/proxy-llm.provider.ts.html +304 -0
- package/backend/coverage/lcov-report/src/llm-provider/zai-llm.provider.ts.html +1666 -0
- package/backend/coverage/lcov-report/src/llm-responses/dto/index.html +131 -0
- package/backend/coverage/lcov-report/src/llm-responses/dto/submit-llm-response.dto.ts.html +436 -0
- package/backend/coverage/lcov-report/src/llm-responses/dto/sync-conversation.dto.ts.html +319 -0
- package/backend/coverage/lcov-report/src/llm-responses/index.html +146 -0
- package/backend/coverage/lcov-report/src/llm-responses/llm-responses.controller.ts.html +283 -0
- package/backend/coverage/lcov-report/src/llm-responses/llm-responses.module.ts.html +184 -0
- package/backend/coverage/lcov-report/src/llm-responses/llm-responses.service.ts.html +1474 -0
- package/backend/coverage/lcov-report/src/main.ts.html +463 -0
- package/backend/coverage/lcov-report/src/mcp/dto/batch-update-mcp-tools.dto.ts.html +145 -0
- package/backend/coverage/lcov-report/src/mcp/dto/create-mcp-config.dto.ts.html +127 -0
- package/backend/coverage/lcov-report/src/mcp/dto/index.html +146 -0
- package/backend/coverage/lcov-report/src/mcp/dto/update-mcp-config.dto.ts.html +112 -0
- package/backend/coverage/lcov-report/src/mcp/index.html +146 -0
- package/backend/coverage/lcov-report/src/mcp/mcp.controller.ts.html +340 -0
- package/backend/coverage/lcov-report/src/mcp/mcp.module.ts.html +124 -0
- package/backend/coverage/lcov-report/src/mcp/mcp.service.ts.html +1345 -0
- package/backend/coverage/lcov-report/src/message-bus/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/message-bus/dto/submit-message.dto.ts.html +109 -0
- package/backend/coverage/lcov-report/src/message-bus/index.html +146 -0
- package/backend/coverage/lcov-report/src/message-bus/message-bus.controller.ts.html +148 -0
- package/backend/coverage/lcov-report/src/message-bus/message-bus.module.ts.html +115 -0
- package/backend/coverage/lcov-report/src/message-bus/message-bus.service.ts.html +151 -0
- package/backend/coverage/lcov-report/src/projects/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/projects/dto/project.dto.ts.html +196 -0
- package/backend/coverage/lcov-report/src/projects/index.html +146 -0
- package/backend/coverage/lcov-report/src/projects/projects.controller.ts.html +322 -0
- package/backend/coverage/lcov-report/src/projects/projects.module.ts.html +124 -0
- package/backend/coverage/lcov-report/src/projects/projects.service.ts.html +235 -0
- package/backend/coverage/lcov-report/src/seeding/context-snippet-seeding.service.ts.html +280 -0
- package/backend/coverage/lcov-report/src/seeding/context-template-seeding.service.ts.html +439 -0
- package/backend/coverage/lcov-report/src/seeding/custom-snippet-seeding.service.ts.html +271 -0
- package/backend/coverage/lcov-report/src/seeding/custom-variable-seeding.service.ts.html +271 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-snippets/compress.ts.html +172 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-snippets/index.html +116 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-followup_ad-hoc-focused-context.ts.html +157 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_condensed-project-context.ts.html +148 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_full-project-context.ts.html +151 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/index.html +161 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/open-pr-command.ts.html +247 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/default_rglob.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-for.ts.html +100 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-if.ts.html +97 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-ifelse.ts.html +100 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/everest-playwright-auth.ts.html +304 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/git-diff.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/index.html +341 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/it-mcp.ts.html +100 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/it-tools.ts.html +97 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-exclude.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search-glob.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/run-command.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/tree.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-adhoc-incl.ts.html +100 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-cmd-output-incl.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-input-incl.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-variables/default-auto-execute-code.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-variables/default-plan-mode.ts.html +97 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-variables/index.html +131 -0
- package/backend/coverage/lcov-report/src/seeding/data/mcp-configs/default-configs.ts.html +121 -0
- package/backend/coverage/lcov-report/src/seeding/data/mcp-configs/index.html +116 -0
- package/backend/coverage/lcov-report/src/seeding/data/sub-agents/browser-use.ts.html +115 -0
- package/backend/coverage/lcov-report/src/seeding/data/sub-agents/explore-codebase.ts.html +136 -0
- package/backend/coverage/lcov-report/src/seeding/data/sub-agents/index.html +131 -0
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/browser-use-agent.ts.html +190 -0
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/default_native_tool_agent.ts.html +421 -0
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/explore-codebase-agent.ts.html +265 -0
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/index.html +161 -0
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/master-agent.ts.html +388 -0
- package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/eslint-hook.ts.html +265 -0
- package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/example-hook.ts.html +274 -0
- package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/index.html +146 -0
- package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/readme.ts.html +250 -0
- package/backend/coverage/lcov-report/src/seeding/index.html +236 -0
- package/backend/coverage/lcov-report/src/seeding/mcp-config-seeding.service.ts.html +193 -0
- package/backend/coverage/lcov-report/src/seeding/seeding.module.ts.html +211 -0
- package/backend/coverage/lcov-report/src/seeding/seeding.service.ts.html +187 -0
- package/backend/coverage/lcov-report/src/seeding/sub-agent-seeding.service.ts.html +742 -0
- package/backend/coverage/lcov-report/src/seeding/system-prompt-seeding.service.ts.html +397 -0
- package/backend/coverage/lcov-report/src/session-followup/index.html +131 -0
- package/backend/coverage/lcov-report/src/session-followup/session-followup.module.ts.html +130 -0
- package/backend/coverage/lcov-report/src/session-followup/session-followup.service.ts.html +718 -0
- package/backend/coverage/lcov-report/src/session-inputs/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/session-inputs/dto/session-input.dto.ts.html +577 -0
- package/backend/coverage/lcov-report/src/session-inputs/index.html +176 -0
- package/backend/coverage/lcov-report/src/session-inputs/session-input-context.service.ts.html +832 -0
- package/backend/coverage/lcov-report/src/session-inputs/session-input.subscriber.ts.html +220 -0
- package/backend/coverage/lcov-report/src/session-inputs/session-inputs.controller.ts.html +685 -0
- package/backend/coverage/lcov-report/src/session-inputs/session-inputs.module.ts.html +229 -0
- package/backend/coverage/lcov-report/src/session-inputs/session-inputs.service.ts.html +1981 -0
- package/backend/coverage/lcov-report/src/session-transfer/index.html +131 -0
- package/backend/coverage/lcov-report/src/session-transfer/session-transfer.module.ts.html +160 -0
- package/backend/coverage/lcov-report/src/session-transfer/session-transfer.service.ts.html +883 -0
- package/backend/coverage/lcov-report/src/sessions/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/sessions/dto/session.dto.ts.html +769 -0
- package/backend/coverage/lcov-report/src/sessions/index.html +146 -0
- package/backend/coverage/lcov-report/src/sessions/sessions.controller.ts.html +1306 -0
- package/backend/coverage/lcov-report/src/sessions/sessions.module.ts.html +220 -0
- package/backend/coverage/lcov-report/src/sessions/sessions.service.ts.html +2797 -0
- package/backend/coverage/lcov-report/src/sub-agents/dto/create-sub-agent.dto.ts.html +355 -0
- package/backend/coverage/lcov-report/src/sub-agents/dto/index.html +131 -0
- package/backend/coverage/lcov-report/src/sub-agents/dto/update-sub-agent.dto.ts.html +295 -0
- package/backend/coverage/lcov-report/src/sub-agents/index.html +221 -0
- package/backend/coverage/lcov-report/src/sub-agents/sub-agent-run.entity.ts.html +463 -0
- package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runner.service.ts.html +2428 -0
- package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runs.controller.ts.html +580 -0
- package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runs.service.ts.html +550 -0
- package/backend/coverage/lcov-report/src/sub-agents/sub-agent.entity.ts.html +475 -0
- package/backend/coverage/lcov-report/src/sub-agents/sub-agents.controller.ts.html +373 -0
- package/backend/coverage/lcov-report/src/sub-agents/sub-agents.module.ts.html +205 -0
- package/backend/coverage/lcov-report/src/sub-agents/sub-agents.service.ts.html +619 -0
- package/backend/coverage/lcov-report/src/syntax-validation/index.html +131 -0
- package/backend/coverage/lcov-report/src/syntax-validation/syntax-validation.module.ts.html +109 -0
- package/backend/coverage/lcov-report/src/syntax-validation/syntax-validation.service.ts.html +724 -0
- package/backend/coverage/lcov-report/src/system-prompts/dto/index.html +176 -0
- package/backend/coverage/lcov-report/src/system-prompts/dto/set-enabled-mcp-tools.dto.ts.html +157 -0
- package/backend/coverage/lcov-report/src/system-prompts/dto/set-enabled-tools.dto.ts.html +148 -0
- package/backend/coverage/lcov-report/src/system-prompts/dto/system-prompt.dto.ts.html +517 -0
- package/backend/coverage/lcov-report/src/system-prompts/dto/toggle-mcp-tool.dto.ts.html +121 -0
- package/backend/coverage/lcov-report/src/system-prompts/dto/toggle-tool.dto.ts.html +118 -0
- package/backend/coverage/lcov-report/src/system-prompts/index.html +146 -0
- package/backend/coverage/lcov-report/src/system-prompts/system-prompts.controller.ts.html +1060 -0
- package/backend/coverage/lcov-report/src/system-prompts/system-prompts.module.ts.html +160 -0
- package/backend/coverage/lcov-report/src/system-prompts/system-prompts.service.ts.html +2254 -0
- package/backend/coverage/lcov-report/src/timeout.interceptor.ts.html +178 -0
- package/backend/coverage/lcov-report/src/tool-hooks/dto/create-tool-hook.dto.ts.html +181 -0
- package/backend/coverage/lcov-report/src/tool-hooks/dto/index.html +131 -0
- package/backend/coverage/lcov-report/src/tool-hooks/dto/update-tool-hook.dto.ts.html +178 -0
- package/backend/coverage/lcov-report/src/tool-hooks/index.html +146 -0
- package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.controller.ts.html +481 -0
- package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.module.ts.html +127 -0
- package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.service.ts.html +1222 -0
- package/backend/coverage/lcov-report/src/tracing.ts.html +214 -0
- package/backend/coverage/lcov-report/src/types/express-multer.d.ts.html +130 -0
- package/backend/coverage/lcov-report/src/types/index.html +116 -0
- package/backend/coverage/lcov-report/src/utils/ai-format-generator.ts.html +253 -0
- package/backend/coverage/lcov-report/src/utils/fuzzy-search.ts.html +310 -0
- package/backend/coverage/lcov-report/src/utils/index.html +191 -0
- package/backend/coverage/lcov-report/src/utils/index.ts.html +100 -0
- package/backend/coverage/lcov-report/src/utils/short-id.ts.html +109 -0
- package/backend/coverage/lcov-report/src/utils/spawn-with-kill.ts.html +412 -0
- package/backend/coverage/lcov-report/src/utils/trace.decorator.ts.html +223 -0
- package/backend/coverage/lcov-report/src/visual-editor/index.html +146 -0
- package/backend/coverage/lcov-report/src/visual-editor/visual-editor.controller.ts.html +409 -0
- package/backend/coverage/lcov-report/src/visual-editor/visual-editor.dto.ts.html +130 -0
- package/backend/coverage/lcov-report/src/visual-editor/visual-editor.module.ts.html +118 -0
- package/backend/coverage/lcov-report/src/workspace/dto/file-tree.dto.ts.html +112 -0
- package/backend/coverage/lcov-report/src/workspace/dto/index.html +131 -0
- package/backend/coverage/lcov-report/src/workspace/dto/search-workspace.dto.ts.html +193 -0
- package/backend/coverage/lcov-report/src/workspace/index.html +146 -0
- package/backend/coverage/lcov-report/src/workspace/workspace.controller.ts.html +394 -0
- package/backend/coverage/lcov-report/src/workspace/workspace.module.ts.html +121 -0
- package/backend/coverage/lcov-report/src/workspace/workspace.service.ts.html +1027 -0
- package/backend/coverage/lcov.info +20220 -0
- package/backend/dist/src/context-templates/context-templates.service.js +0 -3
- package/backend/dist/src/context-templates/context-templates.service.js.map +1 -1
- package/backend/dist/src/seeding/data/context-templates/default-initial_full-project-context.d.ts +1 -1
- package/backend/dist/src/seeding/data/context-templates/default-initial_full-project-context.js +4 -0
- package/backend/dist/src/seeding/data/context-templates/default-initial_full-project-context.js.map +1 -1
- package/backend/dist/src/seeding/data/sub-agents/browser-use.d.ts +1 -1
- package/backend/dist/src/seeding/data/sub-agents/browser-use.js +1 -1
- package/backend/dist/src/seeding/data/sub-agents/browser-use.js.map +1 -1
- package/backend/dist/src/seeding/data/system-prompts/browser-use-agent.d.ts +1 -0
- package/backend/dist/src/seeding/data/system-prompts/browser-use-agent.js +2 -1
- package/backend/dist/src/seeding/data/system-prompts/browser-use-agent.js.map +1 -1
- package/backend/dist/src/seeding/data/system-prompts/default_native_tool_agent.d.ts +1 -0
- package/backend/dist/src/seeding/data/system-prompts/default_native_tool_agent.js +2 -1
- package/backend/dist/src/seeding/data/system-prompts/default_native_tool_agent.js.map +1 -1
- package/backend/dist/src/seeding/data/system-prompts/explore-codebase-agent.d.ts +1 -0
- package/backend/dist/src/seeding/data/system-prompts/explore-codebase-agent.js +2 -1
- package/backend/dist/src/seeding/data/system-prompts/explore-codebase-agent.js.map +1 -1
- package/backend/dist/src/seeding/system-prompt-seeding.service.js +3 -1
- package/backend/dist/src/seeding/system-prompt-seeding.service.js.map +1 -1
- package/backend/dist/src/sub-agents/sub-agent-run.entity.d.ts +1 -1
- package/backend/dist/src/sub-agents/sub-agent-run.entity.js +1 -1
- package/backend/dist/src/sub-agents/sub-agent-run.entity.js.map +1 -1
- package/backend/dist/src/sub-agents/sub-agent-runner.service.d.ts +1 -0
- package/backend/dist/src/sub-agents/sub-agent-runner.service.js +16 -2
- package/backend/dist/src/sub-agents/sub-agent-runner.service.js.map +1 -1
- package/backend/dist/src/sub-agents/sub-agents.service.js +0 -3
- package/backend/dist/src/sub-agents/sub-agents.service.js.map +1 -1
- package/backend/dist/src/system-prompts/system-prompts.service.d.ts +2 -1
- package/backend/dist/src/system-prompts/system-prompts.service.js +20 -14
- package/backend/dist/src/system-prompts/system-prompts.service.js.map +1 -1
- package/backend/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,877 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for packages/gemini-core/src/utils/retry.ts</title>
|
|
7
|
+
<meta charset="utf-8" />
|
|
8
|
+
<link rel="stylesheet" href="../../../../prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="../../../../base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="../../../../favicon.png" />
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
+
<style type='text/css'>
|
|
13
|
+
.coverage-summary .sorter {
|
|
14
|
+
background-image: url(../../../../sort-arrow-sprite.png);
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<div class='wrapper'>
|
|
21
|
+
<div class='pad1'>
|
|
22
|
+
<h1><a href="../../../../index.html">All files</a> / <a href="index.html">packages/gemini-core/src/utils</a> retry.ts</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">3.4% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>3/88</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">0% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>0/69</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">0% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>0/9</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">3.52% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>3/85</span>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
</div>
|
|
54
|
+
<p class="quiet">
|
|
55
|
+
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
+
</p>
|
|
57
|
+
<template id="filterTemplate">
|
|
58
|
+
<div class="quiet">
|
|
59
|
+
Filter:
|
|
60
|
+
<input type="search" id="fileSearch">
|
|
61
|
+
</div>
|
|
62
|
+
</template>
|
|
63
|
+
</div>
|
|
64
|
+
<div class='status-line low'></div>
|
|
65
|
+
<pre><table class="coverage">
|
|
66
|
+
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
|
+
<a name='L2'></a><a href='#L2'>2</a>
|
|
68
|
+
<a name='L3'></a><a href='#L3'>3</a>
|
|
69
|
+
<a name='L4'></a><a href='#L4'>4</a>
|
|
70
|
+
<a name='L5'></a><a href='#L5'>5</a>
|
|
71
|
+
<a name='L6'></a><a href='#L6'>6</a>
|
|
72
|
+
<a name='L7'></a><a href='#L7'>7</a>
|
|
73
|
+
<a name='L8'></a><a href='#L8'>8</a>
|
|
74
|
+
<a name='L9'></a><a href='#L9'>9</a>
|
|
75
|
+
<a name='L10'></a><a href='#L10'>10</a>
|
|
76
|
+
<a name='L11'></a><a href='#L11'>11</a>
|
|
77
|
+
<a name='L12'></a><a href='#L12'>12</a>
|
|
78
|
+
<a name='L13'></a><a href='#L13'>13</a>
|
|
79
|
+
<a name='L14'></a><a href='#L14'>14</a>
|
|
80
|
+
<a name='L15'></a><a href='#L15'>15</a>
|
|
81
|
+
<a name='L16'></a><a href='#L16'>16</a>
|
|
82
|
+
<a name='L17'></a><a href='#L17'>17</a>
|
|
83
|
+
<a name='L18'></a><a href='#L18'>18</a>
|
|
84
|
+
<a name='L19'></a><a href='#L19'>19</a>
|
|
85
|
+
<a name='L20'></a><a href='#L20'>20</a>
|
|
86
|
+
<a name='L21'></a><a href='#L21'>21</a>
|
|
87
|
+
<a name='L22'></a><a href='#L22'>22</a>
|
|
88
|
+
<a name='L23'></a><a href='#L23'>23</a>
|
|
89
|
+
<a name='L24'></a><a href='#L24'>24</a>
|
|
90
|
+
<a name='L25'></a><a href='#L25'>25</a>
|
|
91
|
+
<a name='L26'></a><a href='#L26'>26</a>
|
|
92
|
+
<a name='L27'></a><a href='#L27'>27</a>
|
|
93
|
+
<a name='L28'></a><a href='#L28'>28</a>
|
|
94
|
+
<a name='L29'></a><a href='#L29'>29</a>
|
|
95
|
+
<a name='L30'></a><a href='#L30'>30</a>
|
|
96
|
+
<a name='L31'></a><a href='#L31'>31</a>
|
|
97
|
+
<a name='L32'></a><a href='#L32'>32</a>
|
|
98
|
+
<a name='L33'></a><a href='#L33'>33</a>
|
|
99
|
+
<a name='L34'></a><a href='#L34'>34</a>
|
|
100
|
+
<a name='L35'></a><a href='#L35'>35</a>
|
|
101
|
+
<a name='L36'></a><a href='#L36'>36</a>
|
|
102
|
+
<a name='L37'></a><a href='#L37'>37</a>
|
|
103
|
+
<a name='L38'></a><a href='#L38'>38</a>
|
|
104
|
+
<a name='L39'></a><a href='#L39'>39</a>
|
|
105
|
+
<a name='L40'></a><a href='#L40'>40</a>
|
|
106
|
+
<a name='L41'></a><a href='#L41'>41</a>
|
|
107
|
+
<a name='L42'></a><a href='#L42'>42</a>
|
|
108
|
+
<a name='L43'></a><a href='#L43'>43</a>
|
|
109
|
+
<a name='L44'></a><a href='#L44'>44</a>
|
|
110
|
+
<a name='L45'></a><a href='#L45'>45</a>
|
|
111
|
+
<a name='L46'></a><a href='#L46'>46</a>
|
|
112
|
+
<a name='L47'></a><a href='#L47'>47</a>
|
|
113
|
+
<a name='L48'></a><a href='#L48'>48</a>
|
|
114
|
+
<a name='L49'></a><a href='#L49'>49</a>
|
|
115
|
+
<a name='L50'></a><a href='#L50'>50</a>
|
|
116
|
+
<a name='L51'></a><a href='#L51'>51</a>
|
|
117
|
+
<a name='L52'></a><a href='#L52'>52</a>
|
|
118
|
+
<a name='L53'></a><a href='#L53'>53</a>
|
|
119
|
+
<a name='L54'></a><a href='#L54'>54</a>
|
|
120
|
+
<a name='L55'></a><a href='#L55'>55</a>
|
|
121
|
+
<a name='L56'></a><a href='#L56'>56</a>
|
|
122
|
+
<a name='L57'></a><a href='#L57'>57</a>
|
|
123
|
+
<a name='L58'></a><a href='#L58'>58</a>
|
|
124
|
+
<a name='L59'></a><a href='#L59'>59</a>
|
|
125
|
+
<a name='L60'></a><a href='#L60'>60</a>
|
|
126
|
+
<a name='L61'></a><a href='#L61'>61</a>
|
|
127
|
+
<a name='L62'></a><a href='#L62'>62</a>
|
|
128
|
+
<a name='L63'></a><a href='#L63'>63</a>
|
|
129
|
+
<a name='L64'></a><a href='#L64'>64</a>
|
|
130
|
+
<a name='L65'></a><a href='#L65'>65</a>
|
|
131
|
+
<a name='L66'></a><a href='#L66'>66</a>
|
|
132
|
+
<a name='L67'></a><a href='#L67'>67</a>
|
|
133
|
+
<a name='L68'></a><a href='#L68'>68</a>
|
|
134
|
+
<a name='L69'></a><a href='#L69'>69</a>
|
|
135
|
+
<a name='L70'></a><a href='#L70'>70</a>
|
|
136
|
+
<a name='L71'></a><a href='#L71'>71</a>
|
|
137
|
+
<a name='L72'></a><a href='#L72'>72</a>
|
|
138
|
+
<a name='L73'></a><a href='#L73'>73</a>
|
|
139
|
+
<a name='L74'></a><a href='#L74'>74</a>
|
|
140
|
+
<a name='L75'></a><a href='#L75'>75</a>
|
|
141
|
+
<a name='L76'></a><a href='#L76'>76</a>
|
|
142
|
+
<a name='L77'></a><a href='#L77'>77</a>
|
|
143
|
+
<a name='L78'></a><a href='#L78'>78</a>
|
|
144
|
+
<a name='L79'></a><a href='#L79'>79</a>
|
|
145
|
+
<a name='L80'></a><a href='#L80'>80</a>
|
|
146
|
+
<a name='L81'></a><a href='#L81'>81</a>
|
|
147
|
+
<a name='L82'></a><a href='#L82'>82</a>
|
|
148
|
+
<a name='L83'></a><a href='#L83'>83</a>
|
|
149
|
+
<a name='L84'></a><a href='#L84'>84</a>
|
|
150
|
+
<a name='L85'></a><a href='#L85'>85</a>
|
|
151
|
+
<a name='L86'></a><a href='#L86'>86</a>
|
|
152
|
+
<a name='L87'></a><a href='#L87'>87</a>
|
|
153
|
+
<a name='L88'></a><a href='#L88'>88</a>
|
|
154
|
+
<a name='L89'></a><a href='#L89'>89</a>
|
|
155
|
+
<a name='L90'></a><a href='#L90'>90</a>
|
|
156
|
+
<a name='L91'></a><a href='#L91'>91</a>
|
|
157
|
+
<a name='L92'></a><a href='#L92'>92</a>
|
|
158
|
+
<a name='L93'></a><a href='#L93'>93</a>
|
|
159
|
+
<a name='L94'></a><a href='#L94'>94</a>
|
|
160
|
+
<a name='L95'></a><a href='#L95'>95</a>
|
|
161
|
+
<a name='L96'></a><a href='#L96'>96</a>
|
|
162
|
+
<a name='L97'></a><a href='#L97'>97</a>
|
|
163
|
+
<a name='L98'></a><a href='#L98'>98</a>
|
|
164
|
+
<a name='L99'></a><a href='#L99'>99</a>
|
|
165
|
+
<a name='L100'></a><a href='#L100'>100</a>
|
|
166
|
+
<a name='L101'></a><a href='#L101'>101</a>
|
|
167
|
+
<a name='L102'></a><a href='#L102'>102</a>
|
|
168
|
+
<a name='L103'></a><a href='#L103'>103</a>
|
|
169
|
+
<a name='L104'></a><a href='#L104'>104</a>
|
|
170
|
+
<a name='L105'></a><a href='#L105'>105</a>
|
|
171
|
+
<a name='L106'></a><a href='#L106'>106</a>
|
|
172
|
+
<a name='L107'></a><a href='#L107'>107</a>
|
|
173
|
+
<a name='L108'></a><a href='#L108'>108</a>
|
|
174
|
+
<a name='L109'></a><a href='#L109'>109</a>
|
|
175
|
+
<a name='L110'></a><a href='#L110'>110</a>
|
|
176
|
+
<a name='L111'></a><a href='#L111'>111</a>
|
|
177
|
+
<a name='L112'></a><a href='#L112'>112</a>
|
|
178
|
+
<a name='L113'></a><a href='#L113'>113</a>
|
|
179
|
+
<a name='L114'></a><a href='#L114'>114</a>
|
|
180
|
+
<a name='L115'></a><a href='#L115'>115</a>
|
|
181
|
+
<a name='L116'></a><a href='#L116'>116</a>
|
|
182
|
+
<a name='L117'></a><a href='#L117'>117</a>
|
|
183
|
+
<a name='L118'></a><a href='#L118'>118</a>
|
|
184
|
+
<a name='L119'></a><a href='#L119'>119</a>
|
|
185
|
+
<a name='L120'></a><a href='#L120'>120</a>
|
|
186
|
+
<a name='L121'></a><a href='#L121'>121</a>
|
|
187
|
+
<a name='L122'></a><a href='#L122'>122</a>
|
|
188
|
+
<a name='L123'></a><a href='#L123'>123</a>
|
|
189
|
+
<a name='L124'></a><a href='#L124'>124</a>
|
|
190
|
+
<a name='L125'></a><a href='#L125'>125</a>
|
|
191
|
+
<a name='L126'></a><a href='#L126'>126</a>
|
|
192
|
+
<a name='L127'></a><a href='#L127'>127</a>
|
|
193
|
+
<a name='L128'></a><a href='#L128'>128</a>
|
|
194
|
+
<a name='L129'></a><a href='#L129'>129</a>
|
|
195
|
+
<a name='L130'></a><a href='#L130'>130</a>
|
|
196
|
+
<a name='L131'></a><a href='#L131'>131</a>
|
|
197
|
+
<a name='L132'></a><a href='#L132'>132</a>
|
|
198
|
+
<a name='L133'></a><a href='#L133'>133</a>
|
|
199
|
+
<a name='L134'></a><a href='#L134'>134</a>
|
|
200
|
+
<a name='L135'></a><a href='#L135'>135</a>
|
|
201
|
+
<a name='L136'></a><a href='#L136'>136</a>
|
|
202
|
+
<a name='L137'></a><a href='#L137'>137</a>
|
|
203
|
+
<a name='L138'></a><a href='#L138'>138</a>
|
|
204
|
+
<a name='L139'></a><a href='#L139'>139</a>
|
|
205
|
+
<a name='L140'></a><a href='#L140'>140</a>
|
|
206
|
+
<a name='L141'></a><a href='#L141'>141</a>
|
|
207
|
+
<a name='L142'></a><a href='#L142'>142</a>
|
|
208
|
+
<a name='L143'></a><a href='#L143'>143</a>
|
|
209
|
+
<a name='L144'></a><a href='#L144'>144</a>
|
|
210
|
+
<a name='L145'></a><a href='#L145'>145</a>
|
|
211
|
+
<a name='L146'></a><a href='#L146'>146</a>
|
|
212
|
+
<a name='L147'></a><a href='#L147'>147</a>
|
|
213
|
+
<a name='L148'></a><a href='#L148'>148</a>
|
|
214
|
+
<a name='L149'></a><a href='#L149'>149</a>
|
|
215
|
+
<a name='L150'></a><a href='#L150'>150</a>
|
|
216
|
+
<a name='L151'></a><a href='#L151'>151</a>
|
|
217
|
+
<a name='L152'></a><a href='#L152'>152</a>
|
|
218
|
+
<a name='L153'></a><a href='#L153'>153</a>
|
|
219
|
+
<a name='L154'></a><a href='#L154'>154</a>
|
|
220
|
+
<a name='L155'></a><a href='#L155'>155</a>
|
|
221
|
+
<a name='L156'></a><a href='#L156'>156</a>
|
|
222
|
+
<a name='L157'></a><a href='#L157'>157</a>
|
|
223
|
+
<a name='L158'></a><a href='#L158'>158</a>
|
|
224
|
+
<a name='L159'></a><a href='#L159'>159</a>
|
|
225
|
+
<a name='L160'></a><a href='#L160'>160</a>
|
|
226
|
+
<a name='L161'></a><a href='#L161'>161</a>
|
|
227
|
+
<a name='L162'></a><a href='#L162'>162</a>
|
|
228
|
+
<a name='L163'></a><a href='#L163'>163</a>
|
|
229
|
+
<a name='L164'></a><a href='#L164'>164</a>
|
|
230
|
+
<a name='L165'></a><a href='#L165'>165</a>
|
|
231
|
+
<a name='L166'></a><a href='#L166'>166</a>
|
|
232
|
+
<a name='L167'></a><a href='#L167'>167</a>
|
|
233
|
+
<a name='L168'></a><a href='#L168'>168</a>
|
|
234
|
+
<a name='L169'></a><a href='#L169'>169</a>
|
|
235
|
+
<a name='L170'></a><a href='#L170'>170</a>
|
|
236
|
+
<a name='L171'></a><a href='#L171'>171</a>
|
|
237
|
+
<a name='L172'></a><a href='#L172'>172</a>
|
|
238
|
+
<a name='L173'></a><a href='#L173'>173</a>
|
|
239
|
+
<a name='L174'></a><a href='#L174'>174</a>
|
|
240
|
+
<a name='L175'></a><a href='#L175'>175</a>
|
|
241
|
+
<a name='L176'></a><a href='#L176'>176</a>
|
|
242
|
+
<a name='L177'></a><a href='#L177'>177</a>
|
|
243
|
+
<a name='L178'></a><a href='#L178'>178</a>
|
|
244
|
+
<a name='L179'></a><a href='#L179'>179</a>
|
|
245
|
+
<a name='L180'></a><a href='#L180'>180</a>
|
|
246
|
+
<a name='L181'></a><a href='#L181'>181</a>
|
|
247
|
+
<a name='L182'></a><a href='#L182'>182</a>
|
|
248
|
+
<a name='L183'></a><a href='#L183'>183</a>
|
|
249
|
+
<a name='L184'></a><a href='#L184'>184</a>
|
|
250
|
+
<a name='L185'></a><a href='#L185'>185</a>
|
|
251
|
+
<a name='L186'></a><a href='#L186'>186</a>
|
|
252
|
+
<a name='L187'></a><a href='#L187'>187</a>
|
|
253
|
+
<a name='L188'></a><a href='#L188'>188</a>
|
|
254
|
+
<a name='L189'></a><a href='#L189'>189</a>
|
|
255
|
+
<a name='L190'></a><a href='#L190'>190</a>
|
|
256
|
+
<a name='L191'></a><a href='#L191'>191</a>
|
|
257
|
+
<a name='L192'></a><a href='#L192'>192</a>
|
|
258
|
+
<a name='L193'></a><a href='#L193'>193</a>
|
|
259
|
+
<a name='L194'></a><a href='#L194'>194</a>
|
|
260
|
+
<a name='L195'></a><a href='#L195'>195</a>
|
|
261
|
+
<a name='L196'></a><a href='#L196'>196</a>
|
|
262
|
+
<a name='L197'></a><a href='#L197'>197</a>
|
|
263
|
+
<a name='L198'></a><a href='#L198'>198</a>
|
|
264
|
+
<a name='L199'></a><a href='#L199'>199</a>
|
|
265
|
+
<a name='L200'></a><a href='#L200'>200</a>
|
|
266
|
+
<a name='L201'></a><a href='#L201'>201</a>
|
|
267
|
+
<a name='L202'></a><a href='#L202'>202</a>
|
|
268
|
+
<a name='L203'></a><a href='#L203'>203</a>
|
|
269
|
+
<a name='L204'></a><a href='#L204'>204</a>
|
|
270
|
+
<a name='L205'></a><a href='#L205'>205</a>
|
|
271
|
+
<a name='L206'></a><a href='#L206'>206</a>
|
|
272
|
+
<a name='L207'></a><a href='#L207'>207</a>
|
|
273
|
+
<a name='L208'></a><a href='#L208'>208</a>
|
|
274
|
+
<a name='L209'></a><a href='#L209'>209</a>
|
|
275
|
+
<a name='L210'></a><a href='#L210'>210</a>
|
|
276
|
+
<a name='L211'></a><a href='#L211'>211</a>
|
|
277
|
+
<a name='L212'></a><a href='#L212'>212</a>
|
|
278
|
+
<a name='L213'></a><a href='#L213'>213</a>
|
|
279
|
+
<a name='L214'></a><a href='#L214'>214</a>
|
|
280
|
+
<a name='L215'></a><a href='#L215'>215</a>
|
|
281
|
+
<a name='L216'></a><a href='#L216'>216</a>
|
|
282
|
+
<a name='L217'></a><a href='#L217'>217</a>
|
|
283
|
+
<a name='L218'></a><a href='#L218'>218</a>
|
|
284
|
+
<a name='L219'></a><a href='#L219'>219</a>
|
|
285
|
+
<a name='L220'></a><a href='#L220'>220</a>
|
|
286
|
+
<a name='L221'></a><a href='#L221'>221</a>
|
|
287
|
+
<a name='L222'></a><a href='#L222'>222</a>
|
|
288
|
+
<a name='L223'></a><a href='#L223'>223</a>
|
|
289
|
+
<a name='L224'></a><a href='#L224'>224</a>
|
|
290
|
+
<a name='L225'></a><a href='#L225'>225</a>
|
|
291
|
+
<a name='L226'></a><a href='#L226'>226</a>
|
|
292
|
+
<a name='L227'></a><a href='#L227'>227</a>
|
|
293
|
+
<a name='L228'></a><a href='#L228'>228</a>
|
|
294
|
+
<a name='L229'></a><a href='#L229'>229</a>
|
|
295
|
+
<a name='L230'></a><a href='#L230'>230</a>
|
|
296
|
+
<a name='L231'></a><a href='#L231'>231</a>
|
|
297
|
+
<a name='L232'></a><a href='#L232'>232</a>
|
|
298
|
+
<a name='L233'></a><a href='#L233'>233</a>
|
|
299
|
+
<a name='L234'></a><a href='#L234'>234</a>
|
|
300
|
+
<a name='L235'></a><a href='#L235'>235</a>
|
|
301
|
+
<a name='L236'></a><a href='#L236'>236</a>
|
|
302
|
+
<a name='L237'></a><a href='#L237'>237</a>
|
|
303
|
+
<a name='L238'></a><a href='#L238'>238</a>
|
|
304
|
+
<a name='L239'></a><a href='#L239'>239</a>
|
|
305
|
+
<a name='L240'></a><a href='#L240'>240</a>
|
|
306
|
+
<a name='L241'></a><a href='#L241'>241</a>
|
|
307
|
+
<a name='L242'></a><a href='#L242'>242</a>
|
|
308
|
+
<a name='L243'></a><a href='#L243'>243</a>
|
|
309
|
+
<a name='L244'></a><a href='#L244'>244</a>
|
|
310
|
+
<a name='L245'></a><a href='#L245'>245</a>
|
|
311
|
+
<a name='L246'></a><a href='#L246'>246</a>
|
|
312
|
+
<a name='L247'></a><a href='#L247'>247</a>
|
|
313
|
+
<a name='L248'></a><a href='#L248'>248</a>
|
|
314
|
+
<a name='L249'></a><a href='#L249'>249</a>
|
|
315
|
+
<a name='L250'></a><a href='#L250'>250</a>
|
|
316
|
+
<a name='L251'></a><a href='#L251'>251</a>
|
|
317
|
+
<a name='L252'></a><a href='#L252'>252</a>
|
|
318
|
+
<a name='L253'></a><a href='#L253'>253</a>
|
|
319
|
+
<a name='L254'></a><a href='#L254'>254</a>
|
|
320
|
+
<a name='L255'></a><a href='#L255'>255</a>
|
|
321
|
+
<a name='L256'></a><a href='#L256'>256</a>
|
|
322
|
+
<a name='L257'></a><a href='#L257'>257</a>
|
|
323
|
+
<a name='L258'></a><a href='#L258'>258</a>
|
|
324
|
+
<a name='L259'></a><a href='#L259'>259</a>
|
|
325
|
+
<a name='L260'></a><a href='#L260'>260</a>
|
|
326
|
+
<a name='L261'></a><a href='#L261'>261</a>
|
|
327
|
+
<a name='L262'></a><a href='#L262'>262</a>
|
|
328
|
+
<a name='L263'></a><a href='#L263'>263</a>
|
|
329
|
+
<a name='L264'></a><a href='#L264'>264</a>
|
|
330
|
+
<a name='L265'></a><a href='#L265'>265</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
331
|
+
<span class="cline-any cline-neutral"> </span>
|
|
332
|
+
<span class="cline-any cline-neutral"> </span>
|
|
333
|
+
<span class="cline-any cline-neutral"> </span>
|
|
334
|
+
<span class="cline-any cline-neutral"> </span>
|
|
335
|
+
<span class="cline-any cline-neutral"> </span>
|
|
336
|
+
<span class="cline-any cline-neutral"> </span>
|
|
337
|
+
<span class="cline-any cline-neutral"> </span>
|
|
338
|
+
<span class="cline-any cline-neutral"> </span>
|
|
339
|
+
<span class="cline-any cline-neutral"> </span>
|
|
340
|
+
<span class="cline-any cline-neutral"> </span>
|
|
341
|
+
<span class="cline-any cline-neutral"> </span>
|
|
342
|
+
<span class="cline-any cline-neutral"> </span>
|
|
343
|
+
<span class="cline-any cline-neutral"> </span>
|
|
344
|
+
<span class="cline-any cline-neutral"> </span>
|
|
345
|
+
<span class="cline-any cline-neutral"> </span>
|
|
346
|
+
<span class="cline-any cline-neutral"> </span>
|
|
347
|
+
<span class="cline-any cline-neutral"> </span>
|
|
348
|
+
<span class="cline-any cline-neutral"> </span>
|
|
349
|
+
<span class="cline-any cline-neutral"> </span>
|
|
350
|
+
<span class="cline-any cline-neutral"> </span>
|
|
351
|
+
<span class="cline-any cline-yes">6x</span>
|
|
352
|
+
<span class="cline-any cline-neutral"> </span>
|
|
353
|
+
<span class="cline-any cline-neutral"> </span>
|
|
354
|
+
<span class="cline-any cline-neutral"> </span>
|
|
355
|
+
<span class="cline-any cline-neutral"> </span>
|
|
356
|
+
<span class="cline-any cline-neutral"> </span>
|
|
357
|
+
<span class="cline-any cline-neutral"> </span>
|
|
358
|
+
<span class="cline-any cline-neutral"> </span>
|
|
359
|
+
<span class="cline-any cline-neutral"> </span>
|
|
360
|
+
<span class="cline-any cline-neutral"> </span>
|
|
361
|
+
<span class="cline-any cline-neutral"> </span>
|
|
362
|
+
<span class="cline-any cline-neutral"> </span>
|
|
363
|
+
<span class="cline-any cline-neutral"> </span>
|
|
364
|
+
<span class="cline-any cline-neutral"> </span>
|
|
365
|
+
<span class="cline-any cline-neutral"> </span>
|
|
366
|
+
<span class="cline-any cline-no"> </span>
|
|
367
|
+
<span class="cline-any cline-no"> </span>
|
|
368
|
+
<span class="cline-any cline-no"> </span>
|
|
369
|
+
<span class="cline-any cline-no"> </span>
|
|
370
|
+
<span class="cline-any cline-neutral"> </span>
|
|
371
|
+
<span class="cline-any cline-neutral"> </span>
|
|
372
|
+
<span class="cline-any cline-no"> </span>
|
|
373
|
+
<span class="cline-any cline-no"> </span>
|
|
374
|
+
<span class="cline-any cline-no"> </span>
|
|
375
|
+
<span class="cline-any cline-neutral"> </span>
|
|
376
|
+
<span class="cline-any cline-no"> </span>
|
|
377
|
+
<span class="cline-any cline-neutral"> </span>
|
|
378
|
+
<span class="cline-any cline-neutral"> </span>
|
|
379
|
+
<span class="cline-any cline-neutral"> </span>
|
|
380
|
+
<span class="cline-any cline-neutral"> </span>
|
|
381
|
+
<span class="cline-any cline-neutral"> </span>
|
|
382
|
+
<span class="cline-any cline-neutral"> </span>
|
|
383
|
+
<span class="cline-any cline-neutral"> </span>
|
|
384
|
+
<span class="cline-any cline-neutral"> </span>
|
|
385
|
+
<span class="cline-any cline-no"> </span>
|
|
386
|
+
<span class="cline-any cline-neutral"> </span>
|
|
387
|
+
<span class="cline-any cline-neutral"> </span>
|
|
388
|
+
<span class="cline-any cline-neutral"> </span>
|
|
389
|
+
<span class="cline-any cline-neutral"> </span>
|
|
390
|
+
<span class="cline-any cline-neutral"> </span>
|
|
391
|
+
<span class="cline-any cline-neutral"> </span>
|
|
392
|
+
<span class="cline-any cline-neutral"> </span>
|
|
393
|
+
<span class="cline-any cline-neutral"> </span>
|
|
394
|
+
<span class="cline-any cline-neutral"> </span>
|
|
395
|
+
<span class="cline-any cline-yes">6x</span>
|
|
396
|
+
<span class="cline-any cline-neutral"> </span>
|
|
397
|
+
<span class="cline-any cline-neutral"> </span>
|
|
398
|
+
<span class="cline-any cline-neutral"> </span>
|
|
399
|
+
<span class="cline-any cline-no"> </span>
|
|
400
|
+
<span class="cline-any cline-no"> </span>
|
|
401
|
+
<span class="cline-any cline-neutral"> </span>
|
|
402
|
+
<span class="cline-any cline-neutral"> </span>
|
|
403
|
+
<span class="cline-any cline-no"> </span>
|
|
404
|
+
<span class="cline-any cline-no"> </span>
|
|
405
|
+
<span class="cline-any cline-neutral"> </span>
|
|
406
|
+
<span class="cline-any cline-neutral"> </span>
|
|
407
|
+
<span class="cline-any cline-neutral"> </span>
|
|
408
|
+
<span class="cline-any cline-neutral"> </span>
|
|
409
|
+
<span class="cline-any cline-neutral"> </span>
|
|
410
|
+
<span class="cline-any cline-neutral"> </span>
|
|
411
|
+
<span class="cline-any cline-neutral"> </span>
|
|
412
|
+
<span class="cline-any cline-neutral"> </span>
|
|
413
|
+
<span class="cline-any cline-no"> </span>
|
|
414
|
+
<span class="cline-any cline-neutral"> </span>
|
|
415
|
+
<span class="cline-any cline-neutral"> </span>
|
|
416
|
+
<span class="cline-any cline-neutral"> </span>
|
|
417
|
+
<span class="cline-any cline-neutral"> </span>
|
|
418
|
+
<span class="cline-any cline-no"> </span>
|
|
419
|
+
<span class="cline-any cline-no"> </span>
|
|
420
|
+
<span class="cline-any cline-neutral"> </span>
|
|
421
|
+
<span class="cline-any cline-no"> </span>
|
|
422
|
+
<span class="cline-any cline-no"> </span>
|
|
423
|
+
<span class="cline-any cline-no"> </span>
|
|
424
|
+
<span class="cline-any cline-no"> </span>
|
|
425
|
+
<span class="cline-any cline-neutral"> </span>
|
|
426
|
+
<span class="cline-any cline-no"> </span>
|
|
427
|
+
<span class="cline-any cline-neutral"> </span>
|
|
428
|
+
<span class="cline-any cline-neutral"> </span>
|
|
429
|
+
<span class="cline-any cline-neutral"> </span>
|
|
430
|
+
<span class="cline-any cline-no"> </span>
|
|
431
|
+
<span class="cline-any cline-no"> </span>
|
|
432
|
+
<span class="cline-any cline-no"> </span>
|
|
433
|
+
<span class="cline-any cline-no"> </span>
|
|
434
|
+
<span class="cline-any cline-no"> </span>
|
|
435
|
+
<span class="cline-any cline-neutral"> </span>
|
|
436
|
+
<span class="cline-any cline-neutral"> </span>
|
|
437
|
+
<span class="cline-any cline-no"> </span>
|
|
438
|
+
<span class="cline-any cline-neutral"> </span>
|
|
439
|
+
<span class="cline-any cline-neutral"> </span>
|
|
440
|
+
<span class="cline-any cline-no"> </span>
|
|
441
|
+
<span class="cline-any cline-no"> </span>
|
|
442
|
+
<span class="cline-any cline-neutral"> </span>
|
|
443
|
+
<span class="cline-any cline-neutral"> </span>
|
|
444
|
+
<span class="cline-any cline-neutral"> </span>
|
|
445
|
+
<span class="cline-any cline-no"> </span>
|
|
446
|
+
<span class="cline-any cline-neutral"> </span>
|
|
447
|
+
<span class="cline-any cline-no"> </span>
|
|
448
|
+
<span class="cline-any cline-neutral"> </span>
|
|
449
|
+
<span class="cline-any cline-no"> </span>
|
|
450
|
+
<span class="cline-any cline-neutral"> </span>
|
|
451
|
+
<span class="cline-any cline-neutral"> </span>
|
|
452
|
+
<span class="cline-any cline-neutral"> </span>
|
|
453
|
+
<span class="cline-any cline-no"> </span>
|
|
454
|
+
<span class="cline-any cline-neutral"> </span>
|
|
455
|
+
<span class="cline-any cline-no"> </span>
|
|
456
|
+
<span class="cline-any cline-neutral"> </span>
|
|
457
|
+
<span class="cline-any cline-neutral"> </span>
|
|
458
|
+
<span class="cline-any cline-no"> </span>
|
|
459
|
+
<span class="cline-any cline-no"> </span>
|
|
460
|
+
<span class="cline-any cline-neutral"> </span>
|
|
461
|
+
<span class="cline-any cline-no"> </span>
|
|
462
|
+
<span class="cline-any cline-no"> </span>
|
|
463
|
+
<span class="cline-any cline-no"> </span>
|
|
464
|
+
<span class="cline-any cline-no"> </span>
|
|
465
|
+
<span class="cline-any cline-neutral"> </span>
|
|
466
|
+
<span class="cline-any cline-neutral"> </span>
|
|
467
|
+
<span class="cline-any cline-neutral"> </span>
|
|
468
|
+
<span class="cline-any cline-neutral"> </span>
|
|
469
|
+
<span class="cline-any cline-neutral"> </span>
|
|
470
|
+
<span class="cline-any cline-no"> </span>
|
|
471
|
+
<span class="cline-any cline-neutral"> </span>
|
|
472
|
+
<span class="cline-any cline-neutral"> </span>
|
|
473
|
+
<span class="cline-any cline-neutral"> </span>
|
|
474
|
+
<span class="cline-any cline-neutral"> </span>
|
|
475
|
+
<span class="cline-any cline-neutral"> </span>
|
|
476
|
+
<span class="cline-any cline-neutral"> </span>
|
|
477
|
+
<span class="cline-any cline-neutral"> </span>
|
|
478
|
+
<span class="cline-any cline-yes">6x</span>
|
|
479
|
+
<span class="cline-any cline-no"> </span>
|
|
480
|
+
<span class="cline-any cline-no"> </span>
|
|
481
|
+
<span class="cline-any cline-no"> </span>
|
|
482
|
+
<span class="cline-any cline-neutral"> </span>
|
|
483
|
+
<span class="cline-any cline-neutral"> </span>
|
|
484
|
+
<span class="cline-any cline-no"> </span>
|
|
485
|
+
<span class="cline-any cline-neutral"> </span>
|
|
486
|
+
<span class="cline-any cline-neutral"> </span>
|
|
487
|
+
<span class="cline-any cline-neutral"> </span>
|
|
488
|
+
<span class="cline-any cline-neutral"> </span>
|
|
489
|
+
<span class="cline-any cline-neutral"> </span>
|
|
490
|
+
<span class="cline-any cline-no"> </span>
|
|
491
|
+
<span class="cline-any cline-neutral"> </span>
|
|
492
|
+
<span class="cline-any cline-no"> </span>
|
|
493
|
+
<span class="cline-any cline-no"> </span>
|
|
494
|
+
<span class="cline-any cline-neutral"> </span>
|
|
495
|
+
<span class="cline-any cline-neutral"> </span>
|
|
496
|
+
<span class="cline-any cline-neutral"> </span>
|
|
497
|
+
<span class="cline-any cline-no"> </span>
|
|
498
|
+
<span class="cline-any cline-neutral"> </span>
|
|
499
|
+
<span class="cline-any cline-neutral"> </span>
|
|
500
|
+
<span class="cline-any cline-neutral"> </span>
|
|
501
|
+
<span class="cline-any cline-neutral"> </span>
|
|
502
|
+
<span class="cline-any cline-neutral"> </span>
|
|
503
|
+
<span class="cline-any cline-neutral"> </span>
|
|
504
|
+
<span class="cline-any cline-neutral"> </span>
|
|
505
|
+
<span class="cline-any cline-neutral"> </span>
|
|
506
|
+
<span class="cline-any cline-no"> </span>
|
|
507
|
+
<span class="cline-any cline-neutral"> </span>
|
|
508
|
+
<span class="cline-any cline-no"> </span>
|
|
509
|
+
<span class="cline-any cline-neutral"> </span>
|
|
510
|
+
<span class="cline-any cline-neutral"> </span>
|
|
511
|
+
<span class="cline-any cline-neutral"> </span>
|
|
512
|
+
<span class="cline-any cline-neutral"> </span>
|
|
513
|
+
<span class="cline-any cline-no"> </span>
|
|
514
|
+
<span class="cline-any cline-no"> </span>
|
|
515
|
+
<span class="cline-any cline-neutral"> </span>
|
|
516
|
+
<span class="cline-any cline-neutral"> </span>
|
|
517
|
+
<span class="cline-any cline-neutral"> </span>
|
|
518
|
+
<span class="cline-any cline-neutral"> </span>
|
|
519
|
+
<span class="cline-any cline-no"> </span>
|
|
520
|
+
<span class="cline-any cline-no"> </span>
|
|
521
|
+
<span class="cline-any cline-no"> </span>
|
|
522
|
+
<span class="cline-any cline-no"> </span>
|
|
523
|
+
<span class="cline-any cline-no"> </span>
|
|
524
|
+
<span class="cline-any cline-no"> </span>
|
|
525
|
+
<span class="cline-any cline-neutral"> </span>
|
|
526
|
+
<span class="cline-any cline-neutral"> </span>
|
|
527
|
+
<span class="cline-any cline-no"> </span>
|
|
528
|
+
<span class="cline-any cline-no"> </span>
|
|
529
|
+
<span class="cline-any cline-no"> </span>
|
|
530
|
+
<span class="cline-any cline-neutral"> </span>
|
|
531
|
+
<span class="cline-any cline-neutral"> </span>
|
|
532
|
+
<span class="cline-any cline-neutral"> </span>
|
|
533
|
+
<span class="cline-any cline-neutral"> </span>
|
|
534
|
+
<span class="cline-any cline-neutral"> </span>
|
|
535
|
+
<span class="cline-any cline-no"> </span>
|
|
536
|
+
<span class="cline-any cline-neutral"> </span>
|
|
537
|
+
<span class="cline-any cline-neutral"> </span>
|
|
538
|
+
<span class="cline-any cline-neutral"> </span>
|
|
539
|
+
<span class="cline-any cline-neutral"> </span>
|
|
540
|
+
<span class="cline-any cline-neutral"> </span>
|
|
541
|
+
<span class="cline-any cline-neutral"> </span>
|
|
542
|
+
<span class="cline-any cline-neutral"> </span>
|
|
543
|
+
<span class="cline-any cline-neutral"> </span>
|
|
544
|
+
<span class="cline-any cline-neutral"> </span>
|
|
545
|
+
<span class="cline-any cline-neutral"> </span>
|
|
546
|
+
<span class="cline-any cline-neutral"> </span>
|
|
547
|
+
<span class="cline-any cline-no"> </span>
|
|
548
|
+
<span class="cline-any cline-no"> </span>
|
|
549
|
+
<span class="cline-any cline-neutral"> </span>
|
|
550
|
+
<span class="cline-any cline-no"> </span>
|
|
551
|
+
<span class="cline-any cline-no"> </span>
|
|
552
|
+
<span class="cline-any cline-neutral"> </span>
|
|
553
|
+
<span class="cline-any cline-no"> </span>
|
|
554
|
+
<span class="cline-any cline-neutral"> </span>
|
|
555
|
+
<span class="cline-any cline-neutral"> </span>
|
|
556
|
+
<span class="cline-any cline-neutral"> </span>
|
|
557
|
+
<span class="cline-any cline-neutral"> </span>
|
|
558
|
+
<span class="cline-any cline-neutral"> </span>
|
|
559
|
+
<span class="cline-any cline-neutral"> </span>
|
|
560
|
+
<span class="cline-any cline-neutral"> </span>
|
|
561
|
+
<span class="cline-any cline-neutral"> </span>
|
|
562
|
+
<span class="cline-any cline-neutral"> </span>
|
|
563
|
+
<span class="cline-any cline-neutral"> </span>
|
|
564
|
+
<span class="cline-any cline-neutral"> </span>
|
|
565
|
+
<span class="cline-any cline-neutral"> </span>
|
|
566
|
+
<span class="cline-any cline-neutral"> </span>
|
|
567
|
+
<span class="cline-any cline-no"> </span>
|
|
568
|
+
<span class="cline-any cline-no"> </span>
|
|
569
|
+
<span class="cline-any cline-no"> </span>
|
|
570
|
+
<span class="cline-any cline-neutral"> </span>
|
|
571
|
+
<span class="cline-any cline-neutral"> </span>
|
|
572
|
+
<span class="cline-any cline-no"> </span>
|
|
573
|
+
<span class="cline-any cline-no"> </span>
|
|
574
|
+
<span class="cline-any cline-no"> </span>
|
|
575
|
+
<span class="cline-any cline-no"> </span>
|
|
576
|
+
<span class="cline-any cline-no"> </span>
|
|
577
|
+
<span class="cline-any cline-neutral"> </span>
|
|
578
|
+
<span class="cline-any cline-no"> </span>
|
|
579
|
+
<span class="cline-any cline-no"> </span>
|
|
580
|
+
<span class="cline-any cline-neutral"> </span>
|
|
581
|
+
<span class="cline-any cline-neutral"> </span>
|
|
582
|
+
<span class="cline-any cline-neutral"> </span>
|
|
583
|
+
<span class="cline-any cline-no"> </span>
|
|
584
|
+
<span class="cline-any cline-no"> </span>
|
|
585
|
+
<span class="cline-any cline-neutral"> </span>
|
|
586
|
+
<span class="cline-any cline-neutral"> </span>
|
|
587
|
+
<span class="cline-any cline-neutral"> </span>
|
|
588
|
+
<span class="cline-any cline-neutral"> </span>
|
|
589
|
+
<span class="cline-any cline-no"> </span>
|
|
590
|
+
<span class="cline-any cline-neutral"> </span>
|
|
591
|
+
<span class="cline-any cline-neutral"> </span>
|
|
592
|
+
<span class="cline-any cline-no"> </span>
|
|
593
|
+
<span class="cline-any cline-neutral"> </span>
|
|
594
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/**
|
|
595
|
+
* @license
|
|
596
|
+
* Copyright 2025 Google LLC
|
|
597
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
598
|
+
*/
|
|
599
|
+
|
|
600
|
+
import type { GenerateContentResponse } from '@google/genai';
|
|
601
|
+
|
|
602
|
+
export interface HttpError extends Error {
|
|
603
|
+
status?: number;
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
export interface RetryOptions {
|
|
607
|
+
maxAttempts: number;
|
|
608
|
+
initialDelayMs: number;
|
|
609
|
+
maxDelayMs: number;
|
|
610
|
+
shouldRetryOnError: (error: Error) => boolean;
|
|
611
|
+
shouldRetryOnContent?: (content: GenerateContentResponse) => boolean;
|
|
612
|
+
authType?: string;
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
const DEFAULT_RETRY_OPTIONS: RetryOptions = {
|
|
616
|
+
maxAttempts: 5,
|
|
617
|
+
initialDelayMs: 5000,
|
|
618
|
+
maxDelayMs: 30000, // 30 seconds
|
|
619
|
+
shouldRetryOnError: defaultShouldRetry,
|
|
620
|
+
};
|
|
621
|
+
|
|
622
|
+
/**
|
|
623
|
+
* Default predicate function to determine if a retry should be attempted.
|
|
624
|
+
* Retries on 429 (Too Many Requests) and 5xx server errors.
|
|
625
|
+
* @param error The error object.
|
|
626
|
+
* @returns True if the error is a transient error, false otherwise.
|
|
627
|
+
*/
|
|
628
|
+
function <span class="fstat-no" title="function not covered" >defaultShouldRetry(</span>error: Error | unknown): boolean {
|
|
629
|
+
// Check for common transient error status codes either in message or a status property
|
|
630
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (error && typeof (error as { status?: number }).status === 'number') {</span>
|
|
631
|
+
const status = (<span class="cstat-no" title="statement not covered" >error as { status: number }).status;</span>
|
|
632
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (status === 429 || (status >= 500 && status < 600)) {</span>
|
|
633
|
+
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (error instanceof Error && error.message) {</span>
|
|
637
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (error.message.includes('429')) <span class="cstat-no" title="statement not covered" >return true;</span></span>
|
|
638
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (error.message.match(/5\d{2}/)) <span class="cstat-no" title="statement not covered" >return true;</span></span>
|
|
639
|
+
}
|
|
640
|
+
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
/**
|
|
644
|
+
* Delays execution for a specified number of milliseconds.
|
|
645
|
+
* @param ms The number of milliseconds to delay.
|
|
646
|
+
* @returns A promise that resolves after the delay.
|
|
647
|
+
*/
|
|
648
|
+
function <span class="fstat-no" title="function not covered" >delay(</span>ms: number): Promise<void> {
|
|
649
|
+
<span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve) => <span class="cstat-no" title="statement not covered" >setTimeout(resolve, ms))</span>;</span>
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
/**
|
|
653
|
+
* Retries a function with exponential backoff and jitter.
|
|
654
|
+
* @param fn The asynchronous function to retry.
|
|
655
|
+
* @param options Optional retry configuration.
|
|
656
|
+
* @returns A promise that resolves with the result of the function if successful.
|
|
657
|
+
* @throws The last error encountered if all attempts fail.
|
|
658
|
+
*/
|
|
659
|
+
export async function <span class="fstat-no" title="function not covered" >retryWithBackoff<</span>T>(
|
|
660
|
+
fn: () => Promise<T>,
|
|
661
|
+
options?: Partial<RetryOptions>,
|
|
662
|
+
): Promise<T> {
|
|
663
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (options?.maxAttempts !== undefined && options.maxAttempts <= 0) {</span>
|
|
664
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('maxAttempts must be a positive number.');</span>
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
const cleanOptions = <span class="cstat-no" title="statement not covered" >options</span>
|
|
668
|
+
? Object.fromEntries(Object.entries(options).filter(<span class="fstat-no" title="function not covered" >([</span>_, v]) => <span class="cstat-no" title="statement not covered" >v != null)</span>)
|
|
669
|
+
: {};
|
|
670
|
+
|
|
671
|
+
const {
|
|
672
|
+
maxAttempts,
|
|
673
|
+
initialDelayMs,
|
|
674
|
+
maxDelayMs,
|
|
675
|
+
shouldRetryOnError,
|
|
676
|
+
shouldRetryOnContent,
|
|
677
|
+
} = <span class="cstat-no" title="statement not covered" >{</span>
|
|
678
|
+
...DEFAULT_RETRY_OPTIONS,
|
|
679
|
+
...cleanOptions,
|
|
680
|
+
};
|
|
681
|
+
|
|
682
|
+
let attempt = <span class="cstat-no" title="statement not covered" >0;</span>
|
|
683
|
+
let currentDelay = <span class="cstat-no" title="statement not covered" >initialDelayMs;</span>
|
|
684
|
+
|
|
685
|
+
<span class="cstat-no" title="statement not covered" > while (attempt < maxAttempts) {</span>
|
|
686
|
+
<span class="cstat-no" title="statement not covered" > attempt++;</span>
|
|
687
|
+
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
688
|
+
const result = <span class="cstat-no" title="statement not covered" >await fn();</span>
|
|
689
|
+
|
|
690
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
|
|
691
|
+
shouldRetryOnContent &&
|
|
692
|
+
shouldRetryOnContent(result as GenerateContentResponse)
|
|
693
|
+
) {
|
|
694
|
+
const jitter = <span class="cstat-no" title="statement not covered" >currentDelay * 0.3 * (Math.random() * 2 - 1);</span>
|
|
695
|
+
const delayWithJitter = <span class="cstat-no" title="statement not covered" >Math.max(0, currentDelay + jitter);</span>
|
|
696
|
+
<span class="cstat-no" title="statement not covered" > await delay(delayWithJitter);</span>
|
|
697
|
+
<span class="cstat-no" title="statement not covered" > currentDelay = Math.min(maxDelayMs, currentDelay * 2);</span>
|
|
698
|
+
<span class="cstat-no" title="statement not covered" > continue;</span>
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
<span class="cstat-no" title="statement not covered" > return result;</span>
|
|
702
|
+
} catch (error) {
|
|
703
|
+
// Check if we've exhausted retries or shouldn't retry
|
|
704
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (attempt >= maxAttempts || !shouldRetryOnError(error as Error)) {</span>
|
|
705
|
+
<span class="cstat-no" title="statement not covered" > throw error;</span>
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
const { delayDurationMs, errorStatus: delayErrorStatus } =
|
|
709
|
+
<span class="cstat-no" title="statement not covered" > getDelayDurationAndStatus(error);</span>
|
|
710
|
+
|
|
711
|
+
<span class="cstat-no" title="statement not covered" > if (delayDurationMs > 0) {</span>
|
|
712
|
+
// Respect Retry-After header if present and parsed
|
|
713
|
+
<span class="cstat-no" title="statement not covered" > console.warn(</span>
|
|
714
|
+
`Attempt ${attempt} failed with status ${delayErrorStatus ?? 'unknown'}. Retrying after explicit delay of ${delayDurationMs}ms...`,
|
|
715
|
+
error,
|
|
716
|
+
);
|
|
717
|
+
<span class="cstat-no" title="statement not covered" > await delay(delayDurationMs);</span>
|
|
718
|
+
// Reset currentDelay for next potential non-429 error, or if Retry-After is not present next time
|
|
719
|
+
<span class="cstat-no" title="statement not covered" > currentDelay = initialDelayMs;</span>
|
|
720
|
+
} else {
|
|
721
|
+
// Fall back to exponential backoff with jitter
|
|
722
|
+
const errorStatus = <span class="cstat-no" title="statement not covered" >getErrorStatus(error);</span>
|
|
723
|
+
<span class="cstat-no" title="statement not covered" > logRetryAttempt(attempt, error, errorStatus);</span>
|
|
724
|
+
// Add jitter: +/- 30% of currentDelay
|
|
725
|
+
const jitter = <span class="cstat-no" title="statement not covered" >currentDelay * 0.3 * (Math.random() * 2 - 1);</span>
|
|
726
|
+
const delayWithJitter = <span class="cstat-no" title="statement not covered" >Math.max(0, currentDelay + jitter);</span>
|
|
727
|
+
<span class="cstat-no" title="statement not covered" > await delay(delayWithJitter);</span>
|
|
728
|
+
<span class="cstat-no" title="statement not covered" > currentDelay = Math.min(maxDelayMs, currentDelay * 2);</span>
|
|
729
|
+
}
|
|
730
|
+
}
|
|
731
|
+
}
|
|
732
|
+
// This line should theoretically be unreachable due to the throw in the catch block.
|
|
733
|
+
// Added for type safety and to satisfy the compiler that a promise is always returned.
|
|
734
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('Retry attempts exhausted');</span>
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
/**
|
|
738
|
+
* Extracts the HTTP status code from an error object.
|
|
739
|
+
* @param error The error object.
|
|
740
|
+
* @returns The HTTP status code, or undefined if not found.
|
|
741
|
+
*/
|
|
742
|
+
export function <span class="fstat-no" title="function not covered" >getErrorStatus(</span>error: unknown): number | undefined {
|
|
743
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (typeof error === 'object' && error !== null) {</span>
|
|
744
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if ('status' in error && typeof error.status === 'number') {</span>
|
|
745
|
+
<span class="cstat-no" title="statement not covered" > return error.status;</span>
|
|
746
|
+
}
|
|
747
|
+
// Check for error.response.status (common in axios errors)
|
|
748
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
|
|
749
|
+
'response' in error &&
|
|
750
|
+
typeof (error as { response?: unknown }).response === 'object' &&
|
|
751
|
+
(error as { response?: unknown }).response !== null
|
|
752
|
+
) {
|
|
753
|
+
const response = (
|
|
754
|
+
<span class="cstat-no" title="statement not covered" > error as { response: { status?: unknown; headers?: unknown } }</span>
|
|
755
|
+
).response;
|
|
756
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if ('status' in response && typeof response.status === 'number') {</span>
|
|
757
|
+
<span class="cstat-no" title="statement not covered" > return response.status;</span>
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
<span class="cstat-no" title="statement not covered" > return undefined;</span>
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
/**
|
|
765
|
+
* Extracts the Retry-After delay from an error object's headers.
|
|
766
|
+
* @param error The error object.
|
|
767
|
+
* @returns The delay in milliseconds, or 0 if not found or invalid.
|
|
768
|
+
*/
|
|
769
|
+
function <span class="fstat-no" title="function not covered" >getRetryAfterDelayMs(</span>error: unknown): number {
|
|
770
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (typeof error === 'object' && error !== null) {</span>
|
|
771
|
+
// Check for error.response.headers (common in axios errors)
|
|
772
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
|
|
773
|
+
'response' in error &&
|
|
774
|
+
typeof (error as { response?: unknown }).response === 'object' &&
|
|
775
|
+
(error as { response?: unknown }).response !== null
|
|
776
|
+
) {
|
|
777
|
+
const response = (<span class="cstat-no" title="statement not covered" >error as { response: { headers?: unknown } }).response;</span>
|
|
778
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
|
|
779
|
+
'headers' in response &&
|
|
780
|
+
typeof response.headers === 'object' &&
|
|
781
|
+
response.headers !== null
|
|
782
|
+
) {
|
|
783
|
+
const headers = <span class="cstat-no" title="statement not covered" >response.headers as { 'retry-after'?: unknown };</span>
|
|
784
|
+
const retryAfterHeader = <span class="cstat-no" title="statement not covered" >headers['retry-after'];</span>
|
|
785
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (typeof retryAfterHeader === 'string') {</span>
|
|
786
|
+
const retryAfterSeconds = <span class="cstat-no" title="statement not covered" >parseInt(retryAfterHeader, 10);</span>
|
|
787
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isNaN(retryAfterSeconds)) {</span>
|
|
788
|
+
<span class="cstat-no" title="statement not covered" > return retryAfterSeconds * 1000;</span>
|
|
789
|
+
}
|
|
790
|
+
// It might be an HTTP date
|
|
791
|
+
const retryAfterDate = <span class="cstat-no" title="statement not covered" >new Date(retryAfterHeader);</span>
|
|
792
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isNaN(retryAfterDate.getTime())) {</span>
|
|
793
|
+
<span class="cstat-no" title="statement not covered" > return Math.max(0, retryAfterDate.getTime() - Date.now());</span>
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
}
|
|
797
|
+
}
|
|
798
|
+
}
|
|
799
|
+
<span class="cstat-no" title="statement not covered" > return 0;</span>
|
|
800
|
+
}
|
|
801
|
+
|
|
802
|
+
/**
|
|
803
|
+
* Determines the delay duration based on the error, prioritizing Retry-After header.
|
|
804
|
+
* @param error The error object.
|
|
805
|
+
* @returns An object containing the delay duration in milliseconds and the error status.
|
|
806
|
+
*/
|
|
807
|
+
function <span class="fstat-no" title="function not covered" >getDelayDurationAndStatus(</span>error: unknown): {
|
|
808
|
+
delayDurationMs: number;
|
|
809
|
+
errorStatus: number | undefined;
|
|
810
|
+
} {
|
|
811
|
+
const errorStatus = <span class="cstat-no" title="statement not covered" >getErrorStatus(error);</span>
|
|
812
|
+
let delayDurationMs = <span class="cstat-no" title="statement not covered" >0;</span>
|
|
813
|
+
|
|
814
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (errorStatus === 429) {</span>
|
|
815
|
+
<span class="cstat-no" title="statement not covered" > delayDurationMs = getRetryAfterDelayMs(error);</span>
|
|
816
|
+
}
|
|
817
|
+
<span class="cstat-no" title="statement not covered" > return { delayDurationMs, errorStatus };</span>
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
/**
|
|
821
|
+
* Logs a message for a retry attempt when using exponential backoff.
|
|
822
|
+
* @param attempt The current attempt number.
|
|
823
|
+
* @param error The error that caused the retry.
|
|
824
|
+
* @param errorStatus The HTTP status code of the error, if available.
|
|
825
|
+
*/
|
|
826
|
+
function <span class="fstat-no" title="function not covered" >logRetryAttempt(</span>
|
|
827
|
+
attempt: number,
|
|
828
|
+
error: unknown,
|
|
829
|
+
errorStatus?: number,
|
|
830
|
+
): void {
|
|
831
|
+
let message = <span class="cstat-no" title="statement not covered" >`Attempt ${attempt} failed. Retrying with backoff...`;</span>
|
|
832
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (errorStatus) {</span>
|
|
833
|
+
<span class="cstat-no" title="statement not covered" > message = `Attempt ${attempt} failed with status ${errorStatus}. Retrying with backoff...`;</span>
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
<span class="cstat-no" title="statement not covered" > if (errorStatus === 429) {</span>
|
|
837
|
+
<span class="cstat-no" title="statement not covered" > console.warn(message, error);</span>
|
|
838
|
+
} else <span class="cstat-no" title="statement not covered" >if (errorStatus && errorStatus >= 500 && errorStatus < 600) {</span>
|
|
839
|
+
<span class="cstat-no" title="statement not covered" > console.error(message, error);</span>
|
|
840
|
+
} else <span class="cstat-no" title="statement not covered" >if (error instanceof Error) {</span>
|
|
841
|
+
// Fallback for errors that might not have a status but have a message
|
|
842
|
+
<span class="cstat-no" title="statement not covered" > if (error.message.includes('429')) {</span>
|
|
843
|
+
<span class="cstat-no" title="statement not covered" > console.warn(</span>
|
|
844
|
+
`Attempt ${attempt} failed with 429 error (no Retry-After header). Retrying with backoff...`,
|
|
845
|
+
error,
|
|
846
|
+
);
|
|
847
|
+
} else <span class="cstat-no" title="statement not covered" >if (error.message.match(/5\d{2}/)) {</span>
|
|
848
|
+
<span class="cstat-no" title="statement not covered" > console.error(</span>
|
|
849
|
+
`Attempt ${attempt} failed with 5xx error. Retrying with backoff...`,
|
|
850
|
+
error,
|
|
851
|
+
);
|
|
852
|
+
} else {
|
|
853
|
+
<span class="cstat-no" title="statement not covered" > console.warn(message, error); </span>// Default to warn for other errors
|
|
854
|
+
}
|
|
855
|
+
} else {
|
|
856
|
+
<span class="cstat-no" title="statement not covered" > console.warn(message, error); </span>// Default to warn if error type is unknown
|
|
857
|
+
}
|
|
858
|
+
}</pre></td></tr></table></pre>
|
|
859
|
+
|
|
860
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
861
|
+
</div><!-- /wrapper -->
|
|
862
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
863
|
+
Code coverage generated by
|
|
864
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
865
|
+
at 2026-05-09T01:03:45.353Z
|
|
866
|
+
</div>
|
|
867
|
+
<script src="../../../../prettify.js"></script>
|
|
868
|
+
<script>
|
|
869
|
+
window.onload = function () {
|
|
870
|
+
prettyPrint();
|
|
871
|
+
};
|
|
872
|
+
</script>
|
|
873
|
+
<script src="../../../../sorter.js"></script>
|
|
874
|
+
<script src="../../../../block-navigation.js"></script>
|
|
875
|
+
</body>
|
|
876
|
+
</html>
|
|
877
|
+
|