@gguf/coder 0.3.1 → 0.3.2
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/package.json +2 -2
- package/pnpm-workspace.yaml +15 -0
- package/color_picker.html +0 -36
- package/scripts/extract-changelog.js +0 -73
- package/scripts/fetch-models.js +0 -143
- package/scripts/test.sh +0 -40
- package/scripts/update-homebrew-formula.sh +0 -125
- package/scripts/update-nix-version.sh +0 -157
- package/source/ai-sdk-client/AISDKClient.spec.ts +0 -117
- package/source/ai-sdk-client/AISDKClient.ts +0 -155
- package/source/ai-sdk-client/chat/chat-handler.spec.ts +0 -121
- package/source/ai-sdk-client/chat/chat-handler.ts +0 -276
- package/source/ai-sdk-client/chat/streaming-handler.spec.ts +0 -173
- package/source/ai-sdk-client/chat/streaming-handler.ts +0 -110
- package/source/ai-sdk-client/chat/tool-processor.spec.ts +0 -92
- package/source/ai-sdk-client/chat/tool-processor.ts +0 -70
- package/source/ai-sdk-client/converters/message-converter.spec.ts +0 -220
- package/source/ai-sdk-client/converters/message-converter.ts +0 -113
- package/source/ai-sdk-client/converters/tool-converter.spec.ts +0 -90
- package/source/ai-sdk-client/converters/tool-converter.ts +0 -46
- package/source/ai-sdk-client/error-handling/error-extractor.spec.ts +0 -55
- package/source/ai-sdk-client/error-handling/error-extractor.ts +0 -15
- package/source/ai-sdk-client/error-handling/error-parser.spec.ts +0 -169
- package/source/ai-sdk-client/error-handling/error-parser.ts +0 -161
- package/source/ai-sdk-client/index.ts +0 -7
- package/source/ai-sdk-client/providers/provider-factory.spec.ts +0 -71
- package/source/ai-sdk-client/providers/provider-factory.ts +0 -41
- package/source/ai-sdk-client/types.ts +0 -9
- package/source/ai-sdk-client-empty-message.spec.ts +0 -141
- package/source/ai-sdk-client-error-handling.spec.ts +0 -186
- package/source/ai-sdk-client-maxretries.spec.ts +0 -114
- package/source/ai-sdk-client-preparestep.spec.ts +0 -279
- package/source/app/App.spec.tsx +0 -32
- package/source/app/App.tsx +0 -480
- package/source/app/components/AppContainer.spec.tsx +0 -96
- package/source/app/components/AppContainer.tsx +0 -56
- package/source/app/components/ChatInterface.spec.tsx +0 -163
- package/source/app/components/ChatInterface.tsx +0 -144
- package/source/app/components/ModalSelectors.spec.tsx +0 -141
- package/source/app/components/ModalSelectors.tsx +0 -135
- package/source/app/helpers.spec.ts +0 -97
- package/source/app/helpers.ts +0 -63
- package/source/app/index.ts +0 -4
- package/source/app/types.ts +0 -39
- package/source/app/utils/appUtils.ts +0 -294
- package/source/app/utils/conversationState.ts +0 -310
- package/source/app.spec.tsx +0 -244
- package/source/cli.spec.ts +0 -73
- package/source/cli.tsx +0 -51
- package/source/client-factory.spec.ts +0 -48
- package/source/client-factory.ts +0 -178
- package/source/command-parser.spec.ts +0 -127
- package/source/command-parser.ts +0 -36
- package/source/commands/checkpoint.spec.tsx +0 -277
- package/source/commands/checkpoint.tsx +0 -366
- package/source/commands/clear.tsx +0 -22
- package/source/commands/custom-commands.tsx +0 -121
- package/source/commands/exit.ts +0 -21
- package/source/commands/export.spec.tsx +0 -131
- package/source/commands/export.tsx +0 -79
- package/source/commands/help.tsx +0 -120
- package/source/commands/index.ts +0 -17
- package/source/commands/init.tsx +0 -339
- package/source/commands/lsp-command.spec.tsx +0 -281
- package/source/commands/lsp.tsx +0 -120
- package/source/commands/mcp-command.spec.tsx +0 -313
- package/source/commands/mcp.tsx +0 -162
- package/source/commands/model-database.spec.tsx +0 -758
- package/source/commands/model-database.tsx +0 -418
- package/source/commands/model.ts +0 -12
- package/source/commands/provider.ts +0 -12
- package/source/commands/setup-config.tsx +0 -16
- package/source/commands/simple-commands.spec.tsx +0 -175
- package/source/commands/status.ts +0 -12
- package/source/commands/theme.ts +0 -12
- package/source/commands/update.spec.tsx +0 -261
- package/source/commands/update.tsx +0 -201
- package/source/commands/usage.spec.tsx +0 -495
- package/source/commands/usage.tsx +0 -100
- package/source/commands.spec.ts +0 -436
- package/source/commands.ts +0 -83
- package/source/components/assistant-message.spec.tsx +0 -796
- package/source/components/assistant-message.tsx +0 -34
- package/source/components/bash-execution-indicator.tsx +0 -21
- package/source/components/cancelling-indicator.tsx +0 -16
- package/source/components/chat-queue.spec.tsx +0 -83
- package/source/components/chat-queue.tsx +0 -36
- package/source/components/checkpoint-display.spec.tsx +0 -219
- package/source/components/checkpoint-display.tsx +0 -126
- package/source/components/checkpoint-selector.spec.tsx +0 -173
- package/source/components/checkpoint-selector.tsx +0 -173
- package/source/components/development-mode-indicator.spec.tsx +0 -268
- package/source/components/development-mode-indicator.tsx +0 -38
- package/source/components/message-box.spec.tsx +0 -427
- package/source/components/message-box.tsx +0 -87
- package/source/components/model-selector.tsx +0 -132
- package/source/components/provider-selector.tsx +0 -75
- package/source/components/random-spinner.tsx +0 -19
- package/source/components/security-disclaimer.tsx +0 -73
- package/source/components/status-connection-display.spec.tsx +0 -133
- package/source/components/status.tsx +0 -267
- package/source/components/theme-selector.tsx +0 -126
- package/source/components/tool-confirmation.tsx +0 -190
- package/source/components/tool-execution-indicator.tsx +0 -33
- package/source/components/tool-message.tsx +0 -85
- package/source/components/ui/titled-box.spec.tsx +0 -207
- package/source/components/ui/titled-box.tsx +0 -57
- package/source/components/usage/progress-bar.spec.tsx +0 -398
- package/source/components/usage/progress-bar.tsx +0 -30
- package/source/components/usage/usage-display.spec.tsx +0 -780
- package/source/components/usage/usage-display.tsx +0 -291
- package/source/components/user-input.spec.tsx +0 -327
- package/source/components/user-input.tsx +0 -533
- package/source/components/user-message.spec.tsx +0 -230
- package/source/components/user-message.tsx +0 -84
- package/source/components/welcome-message.tsx +0 -76
- package/source/config/env-substitution.ts +0 -65
- package/source/config/index.spec.ts +0 -171
- package/source/config/index.ts +0 -154
- package/source/config/paths.spec.ts +0 -241
- package/source/config/paths.ts +0 -55
- package/source/config/preferences.ts +0 -51
- package/source/config/themes.ts +0 -315
- package/source/constants.ts +0 -130
- package/source/context/mode-context.spec.ts +0 -79
- package/source/context/mode-context.ts +0 -24
- package/source/custom-commands/executor.spec.ts +0 -142
- package/source/custom-commands/executor.ts +0 -64
- package/source/custom-commands/loader.spec.ts +0 -314
- package/source/custom-commands/loader.ts +0 -153
- package/source/custom-commands/parser.ts +0 -196
- package/source/hooks/chat-handler/conversation/conversation-loop.spec.ts +0 -39
- package/source/hooks/chat-handler/conversation/conversation-loop.tsx +0 -511
- package/source/hooks/chat-handler/conversation/tool-executor.spec.ts +0 -50
- package/source/hooks/chat-handler/conversation/tool-executor.tsx +0 -109
- package/source/hooks/chat-handler/index.ts +0 -12
- package/source/hooks/chat-handler/state/streaming-state.spec.ts +0 -26
- package/source/hooks/chat-handler/state/streaming-state.ts +0 -19
- package/source/hooks/chat-handler/types.ts +0 -38
- package/source/hooks/chat-handler/useChatHandler.spec.tsx +0 -321
- package/source/hooks/chat-handler/useChatHandler.tsx +0 -194
- package/source/hooks/chat-handler/utils/context-checker.spec.ts +0 -60
- package/source/hooks/chat-handler/utils/context-checker.tsx +0 -73
- package/source/hooks/chat-handler/utils/message-helpers.spec.ts +0 -42
- package/source/hooks/chat-handler/utils/message-helpers.tsx +0 -36
- package/source/hooks/chat-handler/utils/tool-filters.spec.ts +0 -109
- package/source/hooks/chat-handler/utils/tool-filters.ts +0 -64
- package/source/hooks/useAppHandlers.tsx +0 -291
- package/source/hooks/useAppInitialization.tsx +0 -422
- package/source/hooks/useAppState.tsx +0 -311
- package/source/hooks/useDirectoryTrust.tsx +0 -98
- package/source/hooks/useInputState.ts +0 -414
- package/source/hooks/useModeHandlers.tsx +0 -302
- package/source/hooks/useNonInteractiveMode.ts +0 -140
- package/source/hooks/useTerminalWidth.tsx +0 -81
- package/source/hooks/useTheme.ts +0 -18
- package/source/hooks/useToolHandler.tsx +0 -349
- package/source/hooks/useUIState.ts +0 -61
- package/source/init/agents-template-generator.ts +0 -421
- package/source/init/existing-rules-extractor.ts +0 -319
- package/source/init/file-scanner.spec.ts +0 -227
- package/source/init/file-scanner.ts +0 -238
- package/source/init/framework-detector.ts +0 -382
- package/source/init/language-detector.ts +0 -269
- package/source/init/project-analyzer.spec.ts +0 -231
- package/source/init/project-analyzer.ts +0 -458
- package/source/lsp/index.ts +0 -31
- package/source/lsp/lsp-client.spec.ts +0 -508
- package/source/lsp/lsp-client.ts +0 -487
- package/source/lsp/lsp-manager.spec.ts +0 -477
- package/source/lsp/lsp-manager.ts +0 -419
- package/source/lsp/protocol.spec.ts +0 -502
- package/source/lsp/protocol.ts +0 -360
- package/source/lsp/server-discovery.spec.ts +0 -654
- package/source/lsp/server-discovery.ts +0 -515
- package/source/markdown-parser/html-entities.spec.ts +0 -88
- package/source/markdown-parser/html-entities.ts +0 -45
- package/source/markdown-parser/index.spec.ts +0 -281
- package/source/markdown-parser/index.ts +0 -126
- package/source/markdown-parser/table-parser.spec.ts +0 -133
- package/source/markdown-parser/table-parser.ts +0 -114
- package/source/markdown-parser/utils.spec.ts +0 -70
- package/source/markdown-parser/utils.ts +0 -13
- package/source/mcp/mcp-client.spec.ts +0 -81
- package/source/mcp/mcp-client.ts +0 -625
- package/source/mcp/transport-factory.spec.ts +0 -406
- package/source/mcp/transport-factory.ts +0 -312
- package/source/message-handler.ts +0 -67
- package/source/model-database/database-engine.spec.ts +0 -494
- package/source/model-database/database-engine.ts +0 -50
- package/source/model-database/model-database.spec.ts +0 -363
- package/source/model-database/model-database.ts +0 -91
- package/source/model-database/model-engine.spec.ts +0 -447
- package/source/model-database/model-engine.ts +0 -65
- package/source/model-database/model-fetcher.spec.ts +0 -583
- package/source/model-database/model-fetcher.ts +0 -330
- package/source/models/index.ts +0 -1
- package/source/models/models-cache.spec.ts +0 -214
- package/source/models/models-cache.ts +0 -78
- package/source/models/models-dev-client.spec.ts +0 -379
- package/source/models/models-dev-client.ts +0 -329
- package/source/models/models-types.ts +0 -68
- package/source/prompt-history.ts +0 -155
- package/source/security/command-injection.spec.ts +0 -240
- package/source/services/checkpoint-manager.spec.ts +0 -523
- package/source/services/checkpoint-manager.ts +0 -466
- package/source/services/file-snapshot.spec.ts +0 -569
- package/source/services/file-snapshot.ts +0 -220
- package/source/test-utils/render-with-theme.tsx +0 -48
- package/source/tokenization/index.ts +0 -1
- package/source/tokenization/tokenizer-factory.spec.ts +0 -170
- package/source/tokenization/tokenizer-factory.ts +0 -125
- package/source/tokenization/tokenizers/anthropic-tokenizer.spec.ts +0 -200
- package/source/tokenization/tokenizers/anthropic-tokenizer.ts +0 -43
- package/source/tokenization/tokenizers/fallback-tokenizer.spec.ts +0 -236
- package/source/tokenization/tokenizers/fallback-tokenizer.ts +0 -26
- package/source/tokenization/tokenizers/llama-tokenizer.spec.ts +0 -224
- package/source/tokenization/tokenizers/llama-tokenizer.ts +0 -41
- package/source/tokenization/tokenizers/openai-tokenizer.spec.ts +0 -184
- package/source/tokenization/tokenizers/openai-tokenizer.ts +0 -57
- package/source/tool-calling/index.ts +0 -5
- package/source/tool-calling/json-parser.spec.ts +0 -639
- package/source/tool-calling/json-parser.ts +0 -247
- package/source/tool-calling/tool-parser.spec.ts +0 -395
- package/source/tool-calling/tool-parser.ts +0 -120
- package/source/tool-calling/xml-parser.spec.ts +0 -662
- package/source/tool-calling/xml-parser.ts +0 -289
- package/source/tools/execute-bash.spec.tsx +0 -353
- package/source/tools/execute-bash.tsx +0 -219
- package/source/tools/execute-function.spec.ts +0 -130
- package/source/tools/fetch-url.spec.tsx +0 -342
- package/source/tools/fetch-url.tsx +0 -172
- package/source/tools/find-files.spec.tsx +0 -924
- package/source/tools/find-files.tsx +0 -293
- package/source/tools/index.ts +0 -102
- package/source/tools/lsp-get-diagnostics.tsx +0 -192
- package/source/tools/needs-approval.spec.ts +0 -282
- package/source/tools/read-file.spec.tsx +0 -801
- package/source/tools/read-file.tsx +0 -387
- package/source/tools/search-file-contents.spec.tsx +0 -1273
- package/source/tools/search-file-contents.tsx +0 -293
- package/source/tools/string-replace.spec.tsx +0 -730
- package/source/tools/string-replace.tsx +0 -548
- package/source/tools/tool-manager.ts +0 -210
- package/source/tools/tool-registry.spec.ts +0 -415
- package/source/tools/tool-registry.ts +0 -228
- package/source/tools/web-search.tsx +0 -223
- package/source/tools/write-file.spec.tsx +0 -559
- package/source/tools/write-file.tsx +0 -228
- package/source/types/app.ts +0 -37
- package/source/types/checkpoint.ts +0 -48
- package/source/types/commands.ts +0 -46
- package/source/types/components.ts +0 -27
- package/source/types/config.ts +0 -103
- package/source/types/core-connection-status.spec.ts +0 -67
- package/source/types/core.ts +0 -181
- package/source/types/hooks.ts +0 -50
- package/source/types/index.ts +0 -12
- package/source/types/markdown-parser.ts +0 -11
- package/source/types/mcp.ts +0 -52
- package/source/types/system.ts +0 -16
- package/source/types/tokenization.ts +0 -41
- package/source/types/ui.ts +0 -40
- package/source/types/usage.ts +0 -58
- package/source/types/utils.ts +0 -16
- package/source/usage/calculator.spec.ts +0 -385
- package/source/usage/calculator.ts +0 -104
- package/source/usage/storage.spec.ts +0 -703
- package/source/usage/storage.ts +0 -238
- package/source/usage/tracker.spec.ts +0 -456
- package/source/usage/tracker.ts +0 -102
- package/source/utils/atomic-deletion.spec.ts +0 -194
- package/source/utils/atomic-deletion.ts +0 -127
- package/source/utils/bounded-map.spec.ts +0 -300
- package/source/utils/bounded-map.ts +0 -193
- package/source/utils/checkpoint-utils.spec.ts +0 -222
- package/source/utils/checkpoint-utils.ts +0 -92
- package/source/utils/error-formatter.spec.ts +0 -169
- package/source/utils/error-formatter.ts +0 -194
- package/source/utils/file-autocomplete.spec.ts +0 -173
- package/source/utils/file-autocomplete.ts +0 -196
- package/source/utils/file-cache.spec.ts +0 -309
- package/source/utils/file-cache.ts +0 -195
- package/source/utils/file-content-loader.spec.ts +0 -180
- package/source/utils/file-content-loader.ts +0 -179
- package/source/utils/file-mention-handler.spec.ts +0 -261
- package/source/utils/file-mention-handler.ts +0 -84
- package/source/utils/file-mention-parser.spec.ts +0 -182
- package/source/utils/file-mention-parser.ts +0 -170
- package/source/utils/fuzzy-matching.spec.ts +0 -149
- package/source/utils/fuzzy-matching.ts +0 -146
- package/source/utils/indentation-normalizer.spec.ts +0 -216
- package/source/utils/indentation-normalizer.ts +0 -76
- package/source/utils/installation-detector.spec.ts +0 -178
- package/source/utils/installation-detector.ts +0 -153
- package/source/utils/logging/config.spec.ts +0 -311
- package/source/utils/logging/config.ts +0 -210
- package/source/utils/logging/console-facade.spec.ts +0 -184
- package/source/utils/logging/console-facade.ts +0 -384
- package/source/utils/logging/correlation.spec.ts +0 -679
- package/source/utils/logging/correlation.ts +0 -474
- package/source/utils/logging/formatters.spec.ts +0 -464
- package/source/utils/logging/formatters.ts +0 -207
- package/source/utils/logging/health-monitor/alerts/alert-manager.spec.ts +0 -93
- package/source/utils/logging/health-monitor/alerts/alert-manager.ts +0 -79
- package/source/utils/logging/health-monitor/checks/configuration-check.spec.ts +0 -56
- package/source/utils/logging/health-monitor/checks/configuration-check.ts +0 -43
- package/source/utils/logging/health-monitor/checks/logging-check.spec.ts +0 -56
- package/source/utils/logging/health-monitor/checks/logging-check.ts +0 -58
- package/source/utils/logging/health-monitor/checks/memory-check.spec.ts +0 -100
- package/source/utils/logging/health-monitor/checks/memory-check.ts +0 -78
- package/source/utils/logging/health-monitor/checks/performance-check.spec.ts +0 -56
- package/source/utils/logging/health-monitor/checks/performance-check.ts +0 -56
- package/source/utils/logging/health-monitor/checks/request-check.spec.ts +0 -56
- package/source/utils/logging/health-monitor/checks/request-check.ts +0 -76
- package/source/utils/logging/health-monitor/core/health-check-runner.spec.ts +0 -70
- package/source/utils/logging/health-monitor/core/health-check-runner.ts +0 -138
- package/source/utils/logging/health-monitor/core/health-monitor.spec.ts +0 -58
- package/source/utils/logging/health-monitor/core/health-monitor.ts +0 -344
- package/source/utils/logging/health-monitor/core/scoring.spec.ts +0 -65
- package/source/utils/logging/health-monitor/core/scoring.ts +0 -91
- package/source/utils/logging/health-monitor/index.ts +0 -15
- package/source/utils/logging/health-monitor/instances.ts +0 -48
- package/source/utils/logging/health-monitor/middleware/http-middleware.spec.ts +0 -141
- package/source/utils/logging/health-monitor/middleware/http-middleware.ts +0 -75
- package/source/utils/logging/health-monitor/types.ts +0 -126
- package/source/utils/logging/index.spec.ts +0 -284
- package/source/utils/logging/index.ts +0 -236
- package/source/utils/logging/integration.spec.ts +0 -441
- package/source/utils/logging/log-method-factory.spec.ts +0 -573
- package/source/utils/logging/log-method-factory.ts +0 -233
- package/source/utils/logging/log-query/aggregation/aggregator.spec.ts +0 -277
- package/source/utils/logging/log-query/aggregation/aggregator.ts +0 -159
- package/source/utils/logging/log-query/aggregation/facet-generator.spec.ts +0 -159
- package/source/utils/logging/log-query/aggregation/facet-generator.ts +0 -47
- package/source/utils/logging/log-query/index.ts +0 -23
- package/source/utils/logging/log-query/query/filter-predicates.spec.ts +0 -247
- package/source/utils/logging/log-query/query/filter-predicates.ts +0 -154
- package/source/utils/logging/log-query/query/query-builder.spec.ts +0 -182
- package/source/utils/logging/log-query/query/query-builder.ts +0 -151
- package/source/utils/logging/log-query/query/query-engine.spec.ts +0 -214
- package/source/utils/logging/log-query/query/query-engine.ts +0 -45
- package/source/utils/logging/log-query/storage/circular-buffer.spec.ts +0 -143
- package/source/utils/logging/log-query/storage/circular-buffer.ts +0 -75
- package/source/utils/logging/log-query/storage/index-manager.spec.ts +0 -150
- package/source/utils/logging/log-query/storage/index-manager.ts +0 -71
- package/source/utils/logging/log-query/storage/log-storage.spec.ts +0 -257
- package/source/utils/logging/log-query/storage/log-storage.ts +0 -80
- package/source/utils/logging/log-query/types.ts +0 -163
- package/source/utils/logging/log-query/utils/helpers.spec.ts +0 -263
- package/source/utils/logging/log-query/utils/helpers.ts +0 -72
- package/source/utils/logging/log-query/utils/sorting.spec.ts +0 -182
- package/source/utils/logging/log-query/utils/sorting.ts +0 -61
- package/source/utils/logging/logger-provider.spec.ts +0 -262
- package/source/utils/logging/logger-provider.ts +0 -362
- package/source/utils/logging/performance.spec.ts +0 -209
- package/source/utils/logging/performance.ts +0 -757
- package/source/utils/logging/pino-logger.spec.ts +0 -425
- package/source/utils/logging/pino-logger.ts +0 -514
- package/source/utils/logging/redaction.spec.ts +0 -490
- package/source/utils/logging/redaction.ts +0 -267
- package/source/utils/logging/request-tracker.spec.ts +0 -1198
- package/source/utils/logging/request-tracker.ts +0 -803
- package/source/utils/logging/transports.spec.ts +0 -505
- package/source/utils/logging/transports.ts +0 -305
- package/source/utils/logging/types.ts +0 -216
- package/source/utils/message-builder.spec.ts +0 -179
- package/source/utils/message-builder.ts +0 -101
- package/source/utils/message-queue.tsx +0 -486
- package/source/utils/paste-detection.spec.ts +0 -69
- package/source/utils/paste-detection.ts +0 -124
- package/source/utils/paste-roundtrip.spec.ts +0 -442
- package/source/utils/paste-utils.spec.ts +0 -128
- package/source/utils/paste-utils.ts +0 -52
- package/source/utils/programming-language-helper.spec.ts +0 -74
- package/source/utils/programming-language-helper.ts +0 -32
- package/source/utils/prompt-assembly.spec.ts +0 -221
- package/source/utils/prompt-processor.ts +0 -173
- package/source/utils/tool-args-parser.spec.ts +0 -136
- package/source/utils/tool-args-parser.ts +0 -54
- package/source/utils/tool-cancellation.spec.ts +0 -230
- package/source/utils/tool-cancellation.ts +0 -28
- package/source/utils/tool-result-display.spec.tsx +0 -469
- package/source/utils/tool-result-display.tsx +0 -90
- package/source/utils/update-checker.spec.ts +0 -383
- package/source/utils/update-checker.ts +0 -183
- package/source/wizard/config-wizard.spec.tsx +0 -103
- package/source/wizard/config-wizard.tsx +0 -382
- package/source/wizard/steps/location-step.spec.tsx +0 -186
- package/source/wizard/steps/location-step.tsx +0 -147
- package/source/wizard/steps/mcp-step.spec.tsx +0 -607
- package/source/wizard/steps/mcp-step.tsx +0 -632
- package/source/wizard/steps/provider-step.spec.tsx +0 -342
- package/source/wizard/steps/provider-step.tsx +0 -957
- package/source/wizard/steps/summary-step.spec.tsx +0 -749
- package/source/wizard/steps/summary-step.tsx +0 -228
- package/source/wizard/templates/mcp-templates.spec.ts +0 -613
- package/source/wizard/templates/mcp-templates.ts +0 -570
- package/source/wizard/templates/provider-templates.spec.ts +0 -152
- package/source/wizard/templates/provider-templates.ts +0 -485
- package/source/wizard/utils/fetch-cloud-models.spec.ts +0 -428
- package/source/wizard/utils/fetch-cloud-models.ts +0 -223
- package/source/wizard/utils/fetch-local-models.spec.ts +0 -297
- package/source/wizard/utils/fetch-local-models.ts +0 -192
- package/source/wizard/validation-array.spec.ts +0 -264
- package/source/wizard/validation.spec.ts +0 -373
- package/source/wizard/validation.ts +0 -232
|
@@ -1,362 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Logger Provider - Implements dependency injection pattern for logging
|
|
3
|
-
* This file provides centralized logger management without circular dependencies
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import {createLogMethods} from './log-method-factory.js';
|
|
7
|
-
import type {LogLevel, Logger, LoggerConfig} from './types.js';
|
|
8
|
-
|
|
9
|
-
export class LoggerProvider {
|
|
10
|
-
private static instance: LoggerProvider | null = null;
|
|
11
|
-
private _logger: Logger | null = null;
|
|
12
|
-
private _config: LoggerConfig | null = null;
|
|
13
|
-
private _dependenciesLoaded = false;
|
|
14
|
-
|
|
15
|
-
// Lazy-loaded dependencies
|
|
16
|
-
private _createPinoLogger:
|
|
17
|
-
| ((config?: Partial<LoggerConfig>) => Logger)
|
|
18
|
-
| null = null;
|
|
19
|
-
private _createConfig:
|
|
20
|
-
| ((config?: Partial<LoggerConfig>) => LoggerConfig)
|
|
21
|
-
| null = null;
|
|
22
|
-
|
|
23
|
-
private constructor() {
|
|
24
|
-
// Private constructor for singleton pattern
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Get the singleton logger provider instance
|
|
29
|
-
*/
|
|
30
|
-
public static getInstance(): LoggerProvider {
|
|
31
|
-
if (!LoggerProvider.instance) {
|
|
32
|
-
LoggerProvider.instance = new LoggerProvider();
|
|
33
|
-
}
|
|
34
|
-
return LoggerProvider.instance;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Initialize lazy-loaded dependencies to avoid circular imports
|
|
39
|
-
*/
|
|
40
|
-
private ensureDependenciesLoaded() {
|
|
41
|
-
if (this._dependenciesLoaded) {
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
// For now, use fallback logger synchronously to avoid circular dependencies
|
|
46
|
-
// The real Pino logger will be loaded asynchronously when needed
|
|
47
|
-
this._createPinoLogger = () => this.createFallbackLogger();
|
|
48
|
-
this._createConfig = (config?: Partial<LoggerConfig>) => ({
|
|
49
|
-
level: 'silent', // Default to silent for production CLI usage
|
|
50
|
-
pretty: false,
|
|
51
|
-
redact: [],
|
|
52
|
-
correlation: false,
|
|
53
|
-
serialize: false,
|
|
54
|
-
...config,
|
|
55
|
-
});
|
|
56
|
-
this._dependenciesLoaded = true;
|
|
57
|
-
|
|
58
|
-
// Asynchronously load the real dependencies and replace the fallback
|
|
59
|
-
this.loadRealDependencies().catch(error => {
|
|
60
|
-
try {
|
|
61
|
-
const fallbackLogger = this.createFallbackLogger();
|
|
62
|
-
fallbackLogger.error(
|
|
63
|
-
'[LOGGER_PROVIDER] Failed to load real dependencies',
|
|
64
|
-
{
|
|
65
|
-
error: this.formatErrorForLogging(error),
|
|
66
|
-
fallback: true,
|
|
67
|
-
source: 'logger-provider',
|
|
68
|
-
timestamp: new Date().toISOString(),
|
|
69
|
-
},
|
|
70
|
-
);
|
|
71
|
-
} catch (fallbackError) {
|
|
72
|
-
// Absolute fallback to console if everything else fails
|
|
73
|
-
console.error(
|
|
74
|
-
'[LOGGER_PROVIDER] Critical failure - fallback logger failed:',
|
|
75
|
-
fallbackError,
|
|
76
|
-
'Original error:',
|
|
77
|
-
error,
|
|
78
|
-
);
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Asynchronously load real Pino dependencies
|
|
85
|
-
* Uses dynamic imports to avoid circular dependency issues
|
|
86
|
-
*/
|
|
87
|
-
private async loadRealDependencies() {
|
|
88
|
-
// Skip if already loaded to prevent duplicate loading
|
|
89
|
-
if (this._dependenciesLoaded) {
|
|
90
|
-
// Only log in development mode to avoid noise for end users
|
|
91
|
-
if (process.env.NODE_ENV === 'development') {
|
|
92
|
-
this.createFallbackLogger().debug('Real dependencies already loaded', {
|
|
93
|
-
source: 'logger-provider',
|
|
94
|
-
status: 'already-loaded',
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
const startTime = Date.now();
|
|
101
|
-
// Only log in development mode to avoid noise for end users
|
|
102
|
-
if (process.env.NODE_ENV === 'development') {
|
|
103
|
-
this.createFallbackLogger().info('Loading real Pino dependencies', {
|
|
104
|
-
source: 'logger-provider',
|
|
105
|
-
method: 'dynamic-import',
|
|
106
|
-
status: 'starting',
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
try {
|
|
111
|
-
// Load dependencies dynamically to avoid circular imports
|
|
112
|
-
// Using Promise.all for parallel loading to improve performance
|
|
113
|
-
const [pinoLogger, configModule] = await Promise.all([
|
|
114
|
-
import('./pino-logger.js'),
|
|
115
|
-
import('./config.js'),
|
|
116
|
-
]);
|
|
117
|
-
|
|
118
|
-
// Verify imports were successful
|
|
119
|
-
if (!pinoLogger?.createPinoLogger || !configModule?.createConfig) {
|
|
120
|
-
throw new Error('Dynamic imports returned invalid modules');
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
this._createPinoLogger = pinoLogger.createPinoLogger;
|
|
124
|
-
this._createConfig = configModule.createConfig;
|
|
125
|
-
this._dependenciesLoaded = true;
|
|
126
|
-
|
|
127
|
-
// If we already have a logger with fallback config, reinitialize it with real config
|
|
128
|
-
if (this._logger && this._config) {
|
|
129
|
-
try {
|
|
130
|
-
this._logger = this._createPinoLogger(this._config);
|
|
131
|
-
// Only log in development mode
|
|
132
|
-
if (process.env.NODE_ENV === 'development') {
|
|
133
|
-
this.createFallbackLogger().info(
|
|
134
|
-
'Logger reinitialized with real Pino instance',
|
|
135
|
-
{
|
|
136
|
-
source: 'logger-provider',
|
|
137
|
-
status: 'reinitialized',
|
|
138
|
-
duration: Date.now() - startTime,
|
|
139
|
-
},
|
|
140
|
-
);
|
|
141
|
-
}
|
|
142
|
-
} catch (reinitError) {
|
|
143
|
-
this.createFallbackLogger().warn(
|
|
144
|
-
'Failed to reinitialize logger, keeping fallback',
|
|
145
|
-
{
|
|
146
|
-
error: this.formatErrorForLogging(reinitError),
|
|
147
|
-
source: 'logger-provider',
|
|
148
|
-
status: 'reinit-failed',
|
|
149
|
-
},
|
|
150
|
-
);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
// Only log in development mode
|
|
155
|
-
if (process.env.NODE_ENV === 'development') {
|
|
156
|
-
this.createFallbackLogger().info(
|
|
157
|
-
'Real dependencies loaded successfully',
|
|
158
|
-
{
|
|
159
|
-
source: 'logger-provider',
|
|
160
|
-
status: 'success',
|
|
161
|
-
duration: Date.now() - startTime,
|
|
162
|
-
modules: ['pino-logger', 'config'],
|
|
163
|
-
},
|
|
164
|
-
);
|
|
165
|
-
}
|
|
166
|
-
} catch (error) {
|
|
167
|
-
try {
|
|
168
|
-
const fallbackLogger = this.createFallbackLogger();
|
|
169
|
-
fallbackLogger.error(
|
|
170
|
-
'[LOGGER_PROVIDER] Failed to load real dependencies',
|
|
171
|
-
{
|
|
172
|
-
error: this.formatErrorForLogging(error),
|
|
173
|
-
fallback: true,
|
|
174
|
-
source: 'logger-provider',
|
|
175
|
-
status: 'load-failed',
|
|
176
|
-
duration: Date.now() - startTime,
|
|
177
|
-
},
|
|
178
|
-
);
|
|
179
|
-
} catch (fallbackError) {
|
|
180
|
-
// Absolute fallback to console if everything else fails
|
|
181
|
-
console.error(
|
|
182
|
-
'[LOGGER_PROVIDER] Critical failure - fallback logger failed:',
|
|
183
|
-
fallbackError,
|
|
184
|
-
'Original error:',
|
|
185
|
-
error,
|
|
186
|
-
);
|
|
187
|
-
}
|
|
188
|
-
// Keep the fallback logger
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
/**
|
|
193
|
-
* Create fallback logger when dependencies fail to load
|
|
194
|
-
*/
|
|
195
|
-
private createFallbackLogger(): Logger {
|
|
196
|
-
// Check current config level - default to silent for production
|
|
197
|
-
const configLevel = this._config?.level || 'silent';
|
|
198
|
-
const isSilent = configLevel === 'silent';
|
|
199
|
-
|
|
200
|
-
// If silent, return a no-op logger
|
|
201
|
-
if (isSilent) {
|
|
202
|
-
const noOp = () => {};
|
|
203
|
-
return {
|
|
204
|
-
fatal: noOp,
|
|
205
|
-
error: noOp,
|
|
206
|
-
warn: noOp,
|
|
207
|
-
info: noOp,
|
|
208
|
-
http: noOp,
|
|
209
|
-
debug: noOp,
|
|
210
|
-
trace: noOp,
|
|
211
|
-
child: (_bindings: Record<string, unknown>) =>
|
|
212
|
-
this.createFallbackLogger(),
|
|
213
|
-
isLevelEnabled: (_level: string) => false,
|
|
214
|
-
flush: async () => Promise.resolve(),
|
|
215
|
-
end: async () => Promise.resolve(),
|
|
216
|
-
};
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
const fallbackConsole = console; // Use console as the logger
|
|
220
|
-
|
|
221
|
-
// Create all log methods using the factory
|
|
222
|
-
const logMethods = createLogMethods(fallbackConsole, {
|
|
223
|
-
consolePrefix: '',
|
|
224
|
-
transformArgs: (args, _level, _msg) => {
|
|
225
|
-
// Note: Level prefix is handled by consolePrefix option in createLogMethod
|
|
226
|
-
return args;
|
|
227
|
-
},
|
|
228
|
-
});
|
|
229
|
-
|
|
230
|
-
return {
|
|
231
|
-
...logMethods,
|
|
232
|
-
child: (_bindings: Record<string, unknown>) =>
|
|
233
|
-
this.createFallbackLogger(),
|
|
234
|
-
isLevelEnabled: (_level: string) => true,
|
|
235
|
-
flush: async () => Promise.resolve(),
|
|
236
|
-
end: async () => Promise.resolve(),
|
|
237
|
-
};
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
/**
|
|
241
|
-
* Create default configuration based on environment
|
|
242
|
-
*/
|
|
243
|
-
private createDefaultConfig(
|
|
244
|
-
override: Partial<LoggerConfig> = {},
|
|
245
|
-
): LoggerConfig {
|
|
246
|
-
const isDev = process.env.NODE_ENV === 'development';
|
|
247
|
-
const isTest = process.env.NODE_ENV === 'test';
|
|
248
|
-
|
|
249
|
-
const defaultConfig: LoggerConfig = {
|
|
250
|
-
level: isTest
|
|
251
|
-
? 'silent'
|
|
252
|
-
: isDev
|
|
253
|
-
? 'debug'
|
|
254
|
-
: (process.env.CODER_LOG_LEVEL as LogLevel) || 'silent', // Default to silent for production/CLI usage
|
|
255
|
-
pretty: isDev,
|
|
256
|
-
redact: ['apiKey', 'token', 'password', 'secret'],
|
|
257
|
-
correlation: true,
|
|
258
|
-
serialize: !isDev,
|
|
259
|
-
};
|
|
260
|
-
|
|
261
|
-
return {...defaultConfig, ...override};
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
/**
|
|
265
|
-
* Initialize the logger with configuration
|
|
266
|
-
*/
|
|
267
|
-
public initializeLogger(config?: Partial<LoggerConfig>): Logger {
|
|
268
|
-
if (this._logger) {
|
|
269
|
-
return this._logger;
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
this.ensureDependenciesLoaded();
|
|
273
|
-
this._config = this.createDefaultConfig(config);
|
|
274
|
-
this._logger =
|
|
275
|
-
this._createPinoLogger?.(this._config) ?? this.createFallbackLogger();
|
|
276
|
-
|
|
277
|
-
return this._logger;
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
/**
|
|
281
|
-
* Get the current logger instance
|
|
282
|
-
*/
|
|
283
|
-
public getLogger(): Logger {
|
|
284
|
-
if (!this._logger) {
|
|
285
|
-
// Auto-initialize with defaults if not already done
|
|
286
|
-
return this.initializeLogger();
|
|
287
|
-
}
|
|
288
|
-
return this._logger;
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
/**
|
|
292
|
-
* Get the current configuration
|
|
293
|
-
*/
|
|
294
|
-
public getLoggerConfig(): LoggerConfig | null {
|
|
295
|
-
return this._config;
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
/**
|
|
299
|
-
* Create a child logger with additional context
|
|
300
|
-
*/
|
|
301
|
-
public createChildLogger(bindings: Record<string, unknown>): Logger {
|
|
302
|
-
const parent = this.getLogger();
|
|
303
|
-
return parent.child(bindings);
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
/**
|
|
307
|
-
* Format error for structured logging
|
|
308
|
-
*/
|
|
309
|
-
private formatErrorForLogging(error: unknown): object {
|
|
310
|
-
if (error instanceof Error) {
|
|
311
|
-
return {
|
|
312
|
-
message: error.message,
|
|
313
|
-
stack: error.stack,
|
|
314
|
-
name: error.name,
|
|
315
|
-
cause: error.cause,
|
|
316
|
-
};
|
|
317
|
-
}
|
|
318
|
-
return {value: error};
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
/**
|
|
322
|
-
* Check if a log level is enabled
|
|
323
|
-
*/
|
|
324
|
-
public isLevelEnabled(level: LogLevel): boolean {
|
|
325
|
-
const logger = this.getLogger();
|
|
326
|
-
return logger.isLevelEnabled(level);
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
/**
|
|
330
|
-
* Reset the logger instance (useful for testing)
|
|
331
|
-
*/
|
|
332
|
-
public reset(): void {
|
|
333
|
-
this._logger = null;
|
|
334
|
-
this._config = null;
|
|
335
|
-
this._dependenciesLoaded = false;
|
|
336
|
-
this._createPinoLogger = null;
|
|
337
|
-
this._createConfig = null;
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
/**
|
|
341
|
-
* Flush any pending logs
|
|
342
|
-
*/
|
|
343
|
-
public async flush(): Promise<void> {
|
|
344
|
-
if (this._logger) {
|
|
345
|
-
await this._logger.flush();
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
/**
|
|
350
|
-
* End the logger and close all streams
|
|
351
|
-
*/
|
|
352
|
-
public async end(): Promise<void> {
|
|
353
|
-
if (this._logger) {
|
|
354
|
-
await this._logger.end();
|
|
355
|
-
this._logger = null;
|
|
356
|
-
this._config = null;
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
// Export the singleton instance for easy access
|
|
362
|
-
export const loggerProvider = LoggerProvider.getInstance();
|
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
import test from 'ava';
|
|
2
|
-
import {
|
|
3
|
-
correlationStorage,
|
|
4
|
-
getCurrentCorrelationContext,
|
|
5
|
-
} from './correlation.js';
|
|
6
|
-
import {
|
|
7
|
-
checkMemoryThresholds,
|
|
8
|
-
measureTime,
|
|
9
|
-
takePerformanceSnapshot,
|
|
10
|
-
trackPerformance,
|
|
11
|
-
} from './performance.js';
|
|
12
|
-
|
|
13
|
-
// Test the trackPerformance decorator with async context handling
|
|
14
|
-
test('trackPerformance decorator maintains correlation context throughout async operation', async t => {
|
|
15
|
-
const testFn = async (value: unknown) => {
|
|
16
|
-
// Simulate async operation
|
|
17
|
-
await new Promise(resolve => setTimeout(resolve, 10));
|
|
18
|
-
return `processed-${String(value)}`;
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
const decoratedFn = trackPerformance(testFn, 'test-async-operation', {
|
|
22
|
-
logLevel: 'debug',
|
|
23
|
-
trackMemory: false,
|
|
24
|
-
trackCpu: false,
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
const result = await decoratedFn('test-input');
|
|
28
|
-
|
|
29
|
-
t.is(result, 'processed-test-input', 'Function should return correct result');
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
test('trackPerformance decorator handles errors correctly', async t => {
|
|
33
|
-
const testFn = async () => {
|
|
34
|
-
throw new Error('Test error');
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
const decoratedFn = trackPerformance(testFn, 'test-error-handling', {
|
|
38
|
-
logLevel: 'debug',
|
|
39
|
-
trackMemory: false,
|
|
40
|
-
trackCpu: false,
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
const error = await t.throwsAsync(async () => {
|
|
44
|
-
await decoratedFn();
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
t.is(error.message, 'Test error', 'Error should be propagated correctly');
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
test('measureTime function maintains correlation context', async t => {
|
|
51
|
-
const result = await measureTime(
|
|
52
|
-
async () => {
|
|
53
|
-
await new Promise(resolve => setTimeout(resolve, 5));
|
|
54
|
-
return 'test-result';
|
|
55
|
-
},
|
|
56
|
-
'test-measurement',
|
|
57
|
-
{
|
|
58
|
-
logPerformance: false,
|
|
59
|
-
trackMemory: false,
|
|
60
|
-
trackCpu: false,
|
|
61
|
-
},
|
|
62
|
-
);
|
|
63
|
-
|
|
64
|
-
t.is(result.result, 'test-result', 'Should return correct result');
|
|
65
|
-
t.truthy(result.duration >= 0, 'Should have valid duration');
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
test('checkMemoryThresholds function works correctly', t => {
|
|
69
|
-
const memory = {
|
|
70
|
-
heapUsed: 100 * 1024 * 1024, // 100MB
|
|
71
|
-
heapTotal: 200 * 1024 * 1024, // 200MB
|
|
72
|
-
external: 50 * 1024 * 1024, // 50MB
|
|
73
|
-
rss: 150 * 1024 * 1024, // 150MB
|
|
74
|
-
arrayBuffers: 10 * 1024 * 1024, // 10MB
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
const result = checkMemoryThresholds(memory, {
|
|
78
|
-
heapUsagePercentThreshold: 0.9,
|
|
79
|
-
heapUsageAbsoluteThreshold: 512,
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
t.true(result.isHealthy, 'Should be healthy with these thresholds');
|
|
83
|
-
t.is(result.warnings.length, 0, 'Should have no warnings');
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
test('takePerformanceSnapshot function works correctly', t => {
|
|
87
|
-
const snapshot = takePerformanceSnapshot();
|
|
88
|
-
|
|
89
|
-
t.truthy(snapshot.timestamp, 'Should have timestamp');
|
|
90
|
-
t.truthy(snapshot.memory, 'Should have memory data');
|
|
91
|
-
t.truthy(snapshot.uptime >= 0, 'Should have uptime');
|
|
92
|
-
t.truthy(snapshot.correlationId, 'Should have correlation ID');
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
test('trackPerformance with complex async chains maintains context', async t => {
|
|
96
|
-
const testFn = async () => {
|
|
97
|
-
// Complex async chain
|
|
98
|
-
const step1 = await new Promise(resolve =>
|
|
99
|
-
setTimeout(() => resolve('step1'), 10),
|
|
100
|
-
);
|
|
101
|
-
const step2 = await new Promise(resolve =>
|
|
102
|
-
setTimeout(() => resolve('step2'), 10),
|
|
103
|
-
);
|
|
104
|
-
const step3 = await new Promise(resolve =>
|
|
105
|
-
setTimeout(() => resolve('step3'), 10),
|
|
106
|
-
);
|
|
107
|
-
|
|
108
|
-
return {step1, step2, step3};
|
|
109
|
-
};
|
|
110
|
-
|
|
111
|
-
const decoratedFn = trackPerformance(testFn, 'complex-async-chain', {
|
|
112
|
-
logLevel: 'debug',
|
|
113
|
-
trackMemory: false,
|
|
114
|
-
trackCpu: false,
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
const result = await decoratedFn();
|
|
118
|
-
|
|
119
|
-
t.deepEqual(
|
|
120
|
-
result,
|
|
121
|
-
{step1: 'step1', step2: 'step2', step3: 'step3'},
|
|
122
|
-
'Should handle complex async chains',
|
|
123
|
-
);
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
test('trackPerformance with nested async operations', async t => {
|
|
127
|
-
const outerFn = async () => {
|
|
128
|
-
const innerResult = await trackPerformance(
|
|
129
|
-
async () => {
|
|
130
|
-
await new Promise(resolve => setTimeout(resolve, 5));
|
|
131
|
-
return 'inner-result';
|
|
132
|
-
},
|
|
133
|
-
'nested-operation',
|
|
134
|
-
{logLevel: 'debug', trackMemory: false, trackCpu: false},
|
|
135
|
-
)();
|
|
136
|
-
|
|
137
|
-
return `outer-${innerResult}`;
|
|
138
|
-
};
|
|
139
|
-
|
|
140
|
-
const decoratedFn = trackPerformance(outerFn, 'outer-operation', {
|
|
141
|
-
logLevel: 'debug',
|
|
142
|
-
trackMemory: false,
|
|
143
|
-
trackCpu: false,
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
const result = await decoratedFn();
|
|
147
|
-
|
|
148
|
-
t.is(result, 'outer-inner-result', 'Should handle nested async operations');
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
test('measureTime with thresholds', async t => {
|
|
152
|
-
const result = await measureTime(
|
|
153
|
-
async () => {
|
|
154
|
-
// Use a longer delay to ensure we exceed the threshold
|
|
155
|
-
await new Promise(resolve => setTimeout(resolve, 50));
|
|
156
|
-
return 'slow-result';
|
|
157
|
-
},
|
|
158
|
-
'slow-operation',
|
|
159
|
-
{
|
|
160
|
-
logPerformance: false,
|
|
161
|
-
trackMemory: false,
|
|
162
|
-
trackCpu: false,
|
|
163
|
-
thresholds: {
|
|
164
|
-
duration: 10, // Set threshold below actual duration
|
|
165
|
-
},
|
|
166
|
-
},
|
|
167
|
-
);
|
|
168
|
-
|
|
169
|
-
t.is(
|
|
170
|
-
result.result,
|
|
171
|
-
'slow-result',
|
|
172
|
-
'Should return correct result even with threshold exceeded',
|
|
173
|
-
);
|
|
174
|
-
t.true(result.duration >= 10, 'Should have duration >= 10ms');
|
|
175
|
-
});
|
|
176
|
-
|
|
177
|
-
test('trackPerformance maintains context across Promise boundaries', async t => {
|
|
178
|
-
let contextId: string | null = null;
|
|
179
|
-
|
|
180
|
-
const testFn = async () => {
|
|
181
|
-
// Get context at start
|
|
182
|
-
const startContext = correlationStorage.getStore();
|
|
183
|
-
|
|
184
|
-
// Simulate async boundary
|
|
185
|
-
await new Promise(resolve => setTimeout(resolve, 10));
|
|
186
|
-
|
|
187
|
-
// Get context after async boundary
|
|
188
|
-
const endContext = correlationStorage.getStore();
|
|
189
|
-
|
|
190
|
-
// Both should be the same context
|
|
191
|
-
if (startContext && endContext) {
|
|
192
|
-
contextId = startContext.id;
|
|
193
|
-
return startContext.id === endContext.id;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
return false;
|
|
197
|
-
};
|
|
198
|
-
|
|
199
|
-
const decoratedFn = trackPerformance(testFn, 'context-persistence-test', {
|
|
200
|
-
logLevel: 'debug',
|
|
201
|
-
trackMemory: false,
|
|
202
|
-
trackCpu: false,
|
|
203
|
-
});
|
|
204
|
-
|
|
205
|
-
const result = await decoratedFn();
|
|
206
|
-
|
|
207
|
-
t.true(result, 'Context should persist across async boundaries');
|
|
208
|
-
t.truthy(contextId, 'Should have a valid context ID');
|
|
209
|
-
});
|