@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,311 +0,0 @@
|
|
|
1
|
-
import {existsSync, mkdirSync, rmSync} from 'fs';
|
|
2
|
-
import {tmpdir} from 'os';
|
|
3
|
-
import {join} from 'path';
|
|
4
|
-
import test from 'ava';
|
|
5
|
-
|
|
6
|
-
console.log(`\nlogging/config.spec.ts`);
|
|
7
|
-
|
|
8
|
-
// Import configuration functions
|
|
9
|
-
import {
|
|
10
|
-
createConfig,
|
|
11
|
-
createDevelopmentConfig,
|
|
12
|
-
createProductionConfig,
|
|
13
|
-
createTestConfig,
|
|
14
|
-
getDefaultLogDirectory,
|
|
15
|
-
getEnvironmentConfig,
|
|
16
|
-
normalizeLogLevel,
|
|
17
|
-
validateLogLevel,
|
|
18
|
-
} from './config.js';
|
|
19
|
-
|
|
20
|
-
// Import types
|
|
21
|
-
import type {LoggerConfig} from './types.js';
|
|
22
|
-
|
|
23
|
-
// Create a temporary test directory
|
|
24
|
-
const testDir = join(tmpdir(), `coder-config-test-${Date.now()}`);
|
|
25
|
-
|
|
26
|
-
test.before(() => {
|
|
27
|
-
mkdirSync(testDir, {recursive: true});
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
test.after.always(() => {
|
|
31
|
-
// Clean up test directory
|
|
32
|
-
if (existsSync(testDir)) {
|
|
33
|
-
rmSync(testDir, {recursive: true, force: true});
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
test('getDefaultLogDirectory returns valid directory path', t => {
|
|
38
|
-
const directory = getDefaultLogDirectory();
|
|
39
|
-
|
|
40
|
-
t.is(typeof directory, 'string', 'Should return string');
|
|
41
|
-
t.true(directory.length > 0, 'Should not be empty');
|
|
42
|
-
t.true(directory.includes('logs'), 'Should include logs in path');
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
test('createDevelopmentConfig creates valid development config', t => {
|
|
46
|
-
const config = createDevelopmentConfig();
|
|
47
|
-
|
|
48
|
-
t.is(typeof config, 'object', 'Should return object');
|
|
49
|
-
t.is(config.level, 'debug', 'Should use debug level in development');
|
|
50
|
-
t.true(config.pretty, 'Should enable pretty printing in development');
|
|
51
|
-
t.true(config.correlation, 'Should enable correlation in development');
|
|
52
|
-
t.false(config.serialize, 'Should not serialize in development');
|
|
53
|
-
t.true(Array.isArray(config.redact), 'Should have redaction array');
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
test('createProductionConfig creates valid production config', t => {
|
|
57
|
-
const config = createProductionConfig();
|
|
58
|
-
|
|
59
|
-
t.is(typeof config, 'object', 'Should return object');
|
|
60
|
-
t.is(config.level, 'silent', 'Should use silent level in production (silent-by-default for CLI)');
|
|
61
|
-
t.false(config.pretty, 'Should disable pretty printing in production');
|
|
62
|
-
t.true(config.correlation, 'Should enable correlation in production');
|
|
63
|
-
t.true(config.serialize, 'Should serialize in production');
|
|
64
|
-
t.true(Array.isArray(config.redact), 'Should have redaction array');
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
test('createTestConfig creates valid test config', t => {
|
|
68
|
-
const config = createTestConfig();
|
|
69
|
-
|
|
70
|
-
t.is(typeof config, 'object', 'Should return object');
|
|
71
|
-
t.is(config.level, 'debug', 'Should use debug level in tests');
|
|
72
|
-
t.false(config.pretty, 'Should disable pretty printing in tests');
|
|
73
|
-
t.false(config.correlation, 'Should disable correlation in tests');
|
|
74
|
-
t.false(config.serialize, 'Should not serialize in tests');
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
test('getEnvironmentConfig detects environment correctly', t => {
|
|
78
|
-
// Test development environment
|
|
79
|
-
const originalEnv = process.env.NODE_ENV;
|
|
80
|
-
|
|
81
|
-
process.env.NODE_ENV = 'development';
|
|
82
|
-
const devConfig = getEnvironmentConfig();
|
|
83
|
-
t.is(devConfig.level, 'debug', 'Should detect development');
|
|
84
|
-
t.true(devConfig.pretty, 'Should enable pretty in development');
|
|
85
|
-
|
|
86
|
-
// Test production environment
|
|
87
|
-
process.env.NODE_ENV = 'production';
|
|
88
|
-
const prodConfig = getEnvironmentConfig();
|
|
89
|
-
t.is(prodConfig.level, 'silent', 'Should detect production (silent-by-default)');
|
|
90
|
-
t.false(prodConfig.pretty, 'Should disable pretty in production');
|
|
91
|
-
|
|
92
|
-
// Test test environment
|
|
93
|
-
process.env.NODE_ENV = 'test';
|
|
94
|
-
const testConfig = getEnvironmentConfig();
|
|
95
|
-
t.is(testConfig.level, 'debug', 'Should detect test');
|
|
96
|
-
t.is(testConfig.level, 'debug', 'Should use debug in test');
|
|
97
|
-
|
|
98
|
-
// Test unknown environment (should default to production/silent for CLI tools)
|
|
99
|
-
process.env.NODE_ENV = 'unknown';
|
|
100
|
-
const unknownConfig = getEnvironmentConfig();
|
|
101
|
-
t.is(unknownConfig.level, 'silent', 'Should default to silent for unknown (production default)');
|
|
102
|
-
|
|
103
|
-
// Restore original environment
|
|
104
|
-
process.env.NODE_ENV = originalEnv;
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
test('validateLogLevel validates log levels correctly', t => {
|
|
108
|
-
// Valid levels
|
|
109
|
-
t.true(validateLogLevel('trace'), 'Should accept trace');
|
|
110
|
-
t.true(validateLogLevel('debug'), 'Should accept debug');
|
|
111
|
-
t.true(validateLogLevel('info'), 'Should accept info');
|
|
112
|
-
t.true(validateLogLevel('warn'), 'Should accept warn');
|
|
113
|
-
t.true(validateLogLevel('error'), 'Should accept error');
|
|
114
|
-
t.true(validateLogLevel('fatal'), 'Should accept fatal');
|
|
115
|
-
t.true(validateLogLevel('silent'), 'Should accept silent');
|
|
116
|
-
|
|
117
|
-
// Invalid levels
|
|
118
|
-
t.false(validateLogLevel('invalid'), 'Should reject invalid');
|
|
119
|
-
t.false(validateLogLevel(''), 'Should reject empty');
|
|
120
|
-
t.false(validateLogLevel('info '), 'Should reject with space');
|
|
121
|
-
t.false(validateLogLevel(' info'), 'Should reject with leading space');
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
test('normalizeLogLevel normalizes log levels', t => {
|
|
125
|
-
// Valid levels should pass through
|
|
126
|
-
t.is(normalizeLogLevel('trace'), 'trace', 'Should pass trace');
|
|
127
|
-
t.is(normalizeLogLevel('debug'), 'debug', 'Should pass debug');
|
|
128
|
-
t.is(normalizeLogLevel('info'), 'info', 'Should pass info');
|
|
129
|
-
t.is(normalizeLogLevel('warn'), 'warn', 'Should pass warn');
|
|
130
|
-
t.is(normalizeLogLevel('error'), 'error', 'Should pass error');
|
|
131
|
-
t.is(normalizeLogLevel('fatal'), 'fatal', 'Should pass fatal');
|
|
132
|
-
t.is(normalizeLogLevel('silent'), 'silent', 'Should pass silent');
|
|
133
|
-
|
|
134
|
-
// Uppercase should be normalized
|
|
135
|
-
t.is(normalizeLogLevel('TRACE'), 'trace', 'Should normalize TRACE');
|
|
136
|
-
t.is(normalizeLogLevel('DEBUG'), 'debug', 'Should normalize DEBUG');
|
|
137
|
-
t.is(normalizeLogLevel('INFO'), 'info', 'Should normalize INFO');
|
|
138
|
-
t.is(normalizeLogLevel('WARN'), 'warn', 'Should normalize WARN');
|
|
139
|
-
t.is(normalizeLogLevel('ERROR'), 'error', 'Should normalize ERROR');
|
|
140
|
-
t.is(normalizeLogLevel('FATAL'), 'fatal', 'Should normalize FATAL');
|
|
141
|
-
t.is(normalizeLogLevel('SILENT'), 'silent', 'Should normalize SILENT');
|
|
142
|
-
|
|
143
|
-
// Invalid should default to info
|
|
144
|
-
t.is(normalizeLogLevel('INFO'), 'info', 'Should default to info');
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
test('createConfig merges overrides correctly', t => {
|
|
148
|
-
// Note: createConfig() uses getEnvironmentConfig()
|
|
149
|
-
// Tests run in NODE_ENV='test', which has correlation: false and serialize: false
|
|
150
|
-
|
|
151
|
-
const overrides: Partial<LoggerConfig> = {
|
|
152
|
-
level: 'error',
|
|
153
|
-
pretty: true,
|
|
154
|
-
redact: ['token', 'password'],
|
|
155
|
-
};
|
|
156
|
-
|
|
157
|
-
const merged = createConfig(overrides);
|
|
158
|
-
|
|
159
|
-
t.is(merged.level, 'error', 'Should override level');
|
|
160
|
-
t.is(merged.pretty, true, 'Should override pretty');
|
|
161
|
-
t.deepEqual(merged.redact, ['token', 'password'], 'Should override redact');
|
|
162
|
-
t.is(merged.correlation, false, 'Should preserve correlation from test config');
|
|
163
|
-
t.is(merged.serialize, false, 'Should preserve serialize from test config');
|
|
164
|
-
});
|
|
165
|
-
|
|
166
|
-
test('createConfig handles missing overrides', t => {
|
|
167
|
-
const baseConfig: LoggerConfig = {
|
|
168
|
-
level: 'info',
|
|
169
|
-
pretty: true,
|
|
170
|
-
redact: ['apiKey'],
|
|
171
|
-
correlation: false,
|
|
172
|
-
serialize: false,
|
|
173
|
-
};
|
|
174
|
-
|
|
175
|
-
const result = createConfig(baseConfig);
|
|
176
|
-
|
|
177
|
-
t.notDeepEqual(
|
|
178
|
-
result,
|
|
179
|
-
baseConfig,
|
|
180
|
-
'Should return environment config with no overrides',
|
|
181
|
-
);
|
|
182
|
-
});
|
|
183
|
-
|
|
184
|
-
test('createConfig handles overrides correctly', t => {
|
|
185
|
-
const overrides: Partial<LoggerConfig> = {
|
|
186
|
-
level: 'debug',
|
|
187
|
-
pretty: false,
|
|
188
|
-
};
|
|
189
|
-
|
|
190
|
-
t.notThrows(() => {
|
|
191
|
-
const result = createConfig(overrides);
|
|
192
|
-
t.is(typeof result, 'object', 'Should return object');
|
|
193
|
-
}, 'Should handle overrides');
|
|
194
|
-
});
|
|
195
|
-
|
|
196
|
-
test('createConfig handles partial overrides', t => {
|
|
197
|
-
const partialOverride: Partial<LoggerConfig> = {
|
|
198
|
-
level: 'warn',
|
|
199
|
-
};
|
|
200
|
-
|
|
201
|
-
const result = createConfig(partialOverride);
|
|
202
|
-
|
|
203
|
-
t.is(result.level, 'warn', 'Should override specified field');
|
|
204
|
-
// Note: Other fields will depend on the environment config, not preserved from a base
|
|
205
|
-
});
|
|
206
|
-
|
|
207
|
-
test('createConfig validates log level in overrides', t => {
|
|
208
|
-
const invalidOverride: Partial<LoggerConfig> = {
|
|
209
|
-
level: 'debug',
|
|
210
|
-
};
|
|
211
|
-
|
|
212
|
-
t.notThrows(() => {
|
|
213
|
-
const result = createConfig(invalidOverride);
|
|
214
|
-
t.is(typeof result, 'object', 'Should handle valid level');
|
|
215
|
-
}, 'Should handle valid log level');
|
|
216
|
-
});
|
|
217
|
-
|
|
218
|
-
test('createConfig overrides redact arrays correctly', t => {
|
|
219
|
-
const overrideWithArray: Partial<LoggerConfig> = {
|
|
220
|
-
redact: ['password', 'secret'],
|
|
221
|
-
};
|
|
222
|
-
|
|
223
|
-
const result = createConfig(overrideWithArray);
|
|
224
|
-
|
|
225
|
-
// Should use override array, not merge
|
|
226
|
-
t.deepEqual(
|
|
227
|
-
result.redact,
|
|
228
|
-
['password', 'secret'],
|
|
229
|
-
'Should replace redact array',
|
|
230
|
-
);
|
|
231
|
-
});
|
|
232
|
-
|
|
233
|
-
test('configuration respects environment variables', t => {
|
|
234
|
-
const originalLogLevel = process.env.CODER_LOG_LEVEL;
|
|
235
|
-
const originalNodeEnv = process.env.NODE_ENV;
|
|
236
|
-
|
|
237
|
-
// Set environment variables
|
|
238
|
-
process.env.CODER_LOG_LEVEL = 'error';
|
|
239
|
-
process.env.NODE_ENV = 'production';
|
|
240
|
-
|
|
241
|
-
try {
|
|
242
|
-
const config = getEnvironmentConfig();
|
|
243
|
-
|
|
244
|
-
t.is(config.level, 'error', 'Should use LOG_LEVEL from environment');
|
|
245
|
-
// Production config should be applied
|
|
246
|
-
t.false(config.pretty, 'Should apply production config');
|
|
247
|
-
} finally {
|
|
248
|
-
// Restore environment variables
|
|
249
|
-
if (originalLogLevel) {
|
|
250
|
-
process.env.LOG_LEVEL = originalLogLevel;
|
|
251
|
-
} else {
|
|
252
|
-
delete process.env.LOG_LEVEL;
|
|
253
|
-
}
|
|
254
|
-
process.env.NODE_ENV = originalNodeEnv;
|
|
255
|
-
}
|
|
256
|
-
});
|
|
257
|
-
|
|
258
|
-
test('createDevelopmentConfig includes sensible defaults', t => {
|
|
259
|
-
const config = createDevelopmentConfig();
|
|
260
|
-
|
|
261
|
-
// Check default redaction patterns
|
|
262
|
-
t.true(config.redact.includes('apiKey'), 'Should redact API keys by default');
|
|
263
|
-
t.true(config.redact.includes('token'), 'Should redact tokens by default');
|
|
264
|
-
t.true(
|
|
265
|
-
config.redact.includes('password'),
|
|
266
|
-
'Should redact passwords by default',
|
|
267
|
-
);
|
|
268
|
-
|
|
269
|
-
// Check correlation settings
|
|
270
|
-
t.true(config.correlation, 'Should enable correlation in development');
|
|
271
|
-
|
|
272
|
-
// Note: Current implementation doesn't include transport configuration
|
|
273
|
-
// t.truthy(config.transport, 'Should have transport configuration');
|
|
274
|
-
// t.is(
|
|
275
|
-
// (config.transport as any)?.target,
|
|
276
|
-
// 'pino-pretty',
|
|
277
|
-
// 'Should use pretty transport in development',
|
|
278
|
-
// );
|
|
279
|
-
});
|
|
280
|
-
|
|
281
|
-
test('createProductionConfig includes production optimizations', t => {
|
|
282
|
-
const config = createProductionConfig();
|
|
283
|
-
|
|
284
|
-
// Check production-specific settings
|
|
285
|
-
t.true(config.serialize, 'Should serialize in production');
|
|
286
|
-
t.is(config.level, 'error', 'Should default to error in production');
|
|
287
|
-
|
|
288
|
-
// Check redaction patterns for production
|
|
289
|
-
t.true(config.redact.includes('email'), 'Should redact emails in production');
|
|
290
|
-
t.true(
|
|
291
|
-
config.redact.includes('userId'),
|
|
292
|
-
'Should redact user IDs in production',
|
|
293
|
-
);
|
|
294
|
-
|
|
295
|
-
// Note: Current implementation doesn't include transport configuration
|
|
296
|
-
// t.truthy(config.transport, 'Should have transport configuration');
|
|
297
|
-
// t.is(
|
|
298
|
-
// (config.transport as any)?.target,
|
|
299
|
-
// 'pino-roll',
|
|
300
|
-
// 'Should use roll transport in production',
|
|
301
|
-
// );
|
|
302
|
-
});
|
|
303
|
-
|
|
304
|
-
test('createTestConfig minimizes output', t => {
|
|
305
|
-
const config = createTestConfig();
|
|
306
|
-
|
|
307
|
-
t.is(config.level, 'debug', 'Should be debug in tests');
|
|
308
|
-
t.false(config.pretty, 'Should disable pretty in tests');
|
|
309
|
-
t.false(config.correlation, 'Should disable correlation in tests');
|
|
310
|
-
t.false(config.serialize, 'Should disable serialization in tests');
|
|
311
|
-
});
|
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Environment-based configuration for Pino logger
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import {platform} from 'os';
|
|
6
|
-
import {homedir} from 'os';
|
|
7
|
-
import {join} from 'path';
|
|
8
|
-
import type {EnhancedLoggerConfig, LogLevel, LoggerConfig} from './types.js';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Get the default log directory based on platform
|
|
12
|
-
*/
|
|
13
|
-
export function getDefaultLogDirectory(): string {
|
|
14
|
-
if (process.env.CODER_LOG_DIR) {
|
|
15
|
-
return process.env.CODER_LOG_DIR;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
switch (platform()) {
|
|
19
|
-
case 'win32':
|
|
20
|
-
return join(process.env.APPDATA || homedir(), 'coder', 'logs');
|
|
21
|
-
case 'darwin':
|
|
22
|
-
return join(homedir(), 'Library', 'Preferences', 'coder', 'logs');
|
|
23
|
-
default: // linux
|
|
24
|
-
return join(homedir(), '.config', 'coder', 'logs');
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Create development configuration
|
|
30
|
-
*/
|
|
31
|
-
export function createDevelopmentConfig(): EnhancedLoggerConfig {
|
|
32
|
-
return {
|
|
33
|
-
level: (process.env.CODER_LOG_LEVEL as LogLevel) || 'debug',
|
|
34
|
-
destination: String(process.stdout.fd),
|
|
35
|
-
pretty: true,
|
|
36
|
-
redact: ['apiKey', 'token', 'password', 'secret'],
|
|
37
|
-
correlation: true,
|
|
38
|
-
serialize: false,
|
|
39
|
-
target: 'pino-pretty',
|
|
40
|
-
options: {
|
|
41
|
-
translateTime: 'HH:MM:ss Z',
|
|
42
|
-
ignore: 'pid,hostname',
|
|
43
|
-
messageFormat: undefined,
|
|
44
|
-
customPrettifiers: {},
|
|
45
|
-
levelFirst: false,
|
|
46
|
-
singleLine: false,
|
|
47
|
-
},
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Create production configuration
|
|
53
|
-
*/
|
|
54
|
-
export function createProductionConfig(): EnhancedLoggerConfig {
|
|
55
|
-
// Check if file logging is explicitly disabled
|
|
56
|
-
const disableFileLogging = process.env.CODER_LOG_DISABLE_FILE === 'true';
|
|
57
|
-
|
|
58
|
-
const baseConfig = {
|
|
59
|
-
level: (process.env.CODER_LOG_LEVEL as LogLevel) || 'silent', // Production users shouldn't see internal logs
|
|
60
|
-
pretty: false,
|
|
61
|
-
redact: ['apiKey', 'token', 'password', 'email', 'userId', 'secret'],
|
|
62
|
-
correlation: true,
|
|
63
|
-
serialize: true,
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
// If file logging is disabled, only use stdout (for UI)
|
|
67
|
-
if (disableFileLogging) {
|
|
68
|
-
return {
|
|
69
|
-
...baseConfig,
|
|
70
|
-
destination: String(process.stdout.fd),
|
|
71
|
-
target: 'pino-pretty',
|
|
72
|
-
options: {
|
|
73
|
-
colorize: false, // No colors in production
|
|
74
|
-
translateTime: 'HH:MM:ss Z',
|
|
75
|
-
ignore: 'pid,hostname',
|
|
76
|
-
levelFirst: true,
|
|
77
|
-
messageFormat: '{level} - {msg}',
|
|
78
|
-
singleLine: true, // Compact for UI
|
|
79
|
-
},
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
// Otherwise use stdout for UI with optional file logging
|
|
84
|
-
// This ensures UI works while still allowing file persistence when needed
|
|
85
|
-
return {
|
|
86
|
-
...baseConfig,
|
|
87
|
-
// Always output to stdout for UI compatibility
|
|
88
|
-
destination: String(process.stdout.fd),
|
|
89
|
-
target: 'pino-pretty',
|
|
90
|
-
options: {
|
|
91
|
-
colorize: false, // No colors in production
|
|
92
|
-
translateTime: 'HH:MM:ss Z',
|
|
93
|
-
ignore: 'pid,hostname', // Reduce UI clutter
|
|
94
|
-
levelFirst: false,
|
|
95
|
-
messageFormat: '{msg}',
|
|
96
|
-
singleLine: true, // Compact for UI
|
|
97
|
-
},
|
|
98
|
-
// Note: File logging will be handled by the multi-transport system in transports.ts
|
|
99
|
-
// when CODER_LOG_TO_FILE=true is set
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Create test configuration
|
|
105
|
-
*/
|
|
106
|
-
export function createTestConfig(): EnhancedLoggerConfig {
|
|
107
|
-
return {
|
|
108
|
-
level: (process.env.LOG_LEVEL as LogLevel) || 'debug', // Changed from 'silent' to 'debug'
|
|
109
|
-
pretty: false,
|
|
110
|
-
redact: ['apiKey', 'token', 'password'],
|
|
111
|
-
correlation: false,
|
|
112
|
-
serialize: false,
|
|
113
|
-
target: 'pino/file',
|
|
114
|
-
options: {
|
|
115
|
-
destination: '/dev/null',
|
|
116
|
-
},
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* Get configuration based on current environment
|
|
122
|
-
*
|
|
123
|
-
* For CLI tools, we default to production (silent) behavior when NODE_ENV is not set.
|
|
124
|
-
* This gives users a clean experience. Developers working on coder itself should
|
|
125
|
-
* explicitly set NODE_ENV=development to see debug logs.
|
|
126
|
-
*/
|
|
127
|
-
export function getEnvironmentConfig(): EnhancedLoggerConfig {
|
|
128
|
-
const env = process.env.NODE_ENV;
|
|
129
|
-
|
|
130
|
-
switch (env) {
|
|
131
|
-
case 'development':
|
|
132
|
-
return createDevelopmentConfig();
|
|
133
|
-
case 'test':
|
|
134
|
-
return createTestConfig();
|
|
135
|
-
default:
|
|
136
|
-
// Default to production (silent) for normal CLI usage
|
|
137
|
-
return createProductionConfig();
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
/**
|
|
142
|
-
* Validate log level
|
|
143
|
-
*/
|
|
144
|
-
export function validateLogLevel(level: string): boolean {
|
|
145
|
-
const validLevels = [
|
|
146
|
-
'fatal',
|
|
147
|
-
'error',
|
|
148
|
-
'warn',
|
|
149
|
-
'info',
|
|
150
|
-
'http',
|
|
151
|
-
'debug',
|
|
152
|
-
'trace',
|
|
153
|
-
'silent',
|
|
154
|
-
];
|
|
155
|
-
return validLevels.includes(level.toLowerCase());
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* Normalize log level string
|
|
160
|
-
*/
|
|
161
|
-
export function normalizeLogLevel(level: string): string {
|
|
162
|
-
const normalized = level.toLowerCase().trim();
|
|
163
|
-
|
|
164
|
-
// Map common aliases
|
|
165
|
-
const aliases: Record<string, string> = {
|
|
166
|
-
warning: 'warn',
|
|
167
|
-
err: 'error',
|
|
168
|
-
information: 'info',
|
|
169
|
-
http: 'http',
|
|
170
|
-
};
|
|
171
|
-
|
|
172
|
-
return aliases[normalized] || normalized;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
/**
|
|
176
|
-
* Create configuration with overrides
|
|
177
|
-
*/
|
|
178
|
-
export function createConfig(
|
|
179
|
-
overrides: Partial<LoggerConfig> = {},
|
|
180
|
-
): EnhancedLoggerConfig {
|
|
181
|
-
const baseConfig = getEnvironmentConfig();
|
|
182
|
-
|
|
183
|
-
// Apply overrides with validation
|
|
184
|
-
if (overrides.level) {
|
|
185
|
-
const normalizedLevel = normalizeLogLevel(overrides.level);
|
|
186
|
-
if (!validateLogLevel(normalizedLevel)) {
|
|
187
|
-
console.warn(
|
|
188
|
-
`[WARNING] Invalid log level "${overrides.level}", using default`,
|
|
189
|
-
);
|
|
190
|
-
} else {
|
|
191
|
-
baseConfig.level = normalizedLevel as LogLevel;
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
if (overrides.redact) {
|
|
196
|
-
baseConfig.redact = [
|
|
197
|
-
...new Set([...baseConfig.redact, ...overrides.redact]),
|
|
198
|
-
];
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
// Merge other properties
|
|
202
|
-
return {
|
|
203
|
-
...baseConfig,
|
|
204
|
-
...overrides,
|
|
205
|
-
options: {
|
|
206
|
-
...baseConfig.options,
|
|
207
|
-
...(overrides as EnhancedLoggerConfig)?.options,
|
|
208
|
-
},
|
|
209
|
-
};
|
|
210
|
-
}
|
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
import test from 'ava';
|
|
2
|
-
|
|
3
|
-
// Implementation imports
|
|
4
|
-
import {
|
|
5
|
-
ConsoleInterceptor,
|
|
6
|
-
ConsoleUsageTracker,
|
|
7
|
-
StructuredConsole,
|
|
8
|
-
createModuleConsole,
|
|
9
|
-
globalConsoleInterceptor,
|
|
10
|
-
useStructuredConsole,
|
|
11
|
-
} from './console-facade.js';
|
|
12
|
-
|
|
13
|
-
// Since the console-facade uses the real logger at module load time,
|
|
14
|
-
// we'll test the behavior by checking that the methods work correctly
|
|
15
|
-
// and produce the expected output structure.
|
|
16
|
-
|
|
17
|
-
test('StructuredConsole.log handles empty arguments', t => {
|
|
18
|
-
// This test verifies that StructuredConsole.log works without throwing
|
|
19
|
-
// The real logger will handle the call, so we just check it doesn't throw
|
|
20
|
-
t.notThrows(() => {
|
|
21
|
-
StructuredConsole.log();
|
|
22
|
-
}, 'Should handle empty arguments without throwing');
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
test('StructuredConsole.log handles single string argument', t => {
|
|
26
|
-
const testMessage = 'Test log message';
|
|
27
|
-
t.notThrows(() => {
|
|
28
|
-
StructuredConsole.log(testMessage);
|
|
29
|
-
}, 'Should handle single string argument without throwing');
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
test('StructuredConsole.log handles single object argument', t => {
|
|
33
|
-
const testObject = {key: 'value', number: 42};
|
|
34
|
-
t.notThrows(() => {
|
|
35
|
-
StructuredConsole.log(testObject);
|
|
36
|
-
}, 'Should handle single object argument without throwing');
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
test('StructuredConsole.log handles single primitive argument', t => {
|
|
40
|
-
const testValue = 123;
|
|
41
|
-
t.notThrows(() => {
|
|
42
|
-
StructuredConsole.log(testValue);
|
|
43
|
-
}, 'Should handle single primitive argument without throwing');
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
test('StructuredConsole.log handles multiple arguments', t => {
|
|
47
|
-
const stringArg = 'Test message';
|
|
48
|
-
const objectArg = {data: 'test'};
|
|
49
|
-
const numberArg = 42;
|
|
50
|
-
t.notThrows(() => {
|
|
51
|
-
StructuredConsole.log(stringArg, objectArg, numberArg);
|
|
52
|
-
}, 'Should handle multiple arguments without throwing');
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
test('StructuredConsole.error handles Error objects', t => {
|
|
56
|
-
const testError = new Error('Test error');
|
|
57
|
-
t.notThrows(() => {
|
|
58
|
-
StructuredConsole.error(testError);
|
|
59
|
-
}, 'Should handle Error objects without throwing');
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
test('StructuredConsole.warn handles arguments correctly', t => {
|
|
63
|
-
t.notThrows(() => {
|
|
64
|
-
StructuredConsole.warn('Warning message', {context: 'test'});
|
|
65
|
-
}, 'Should handle arguments correctly without throwing');
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
test('ConsoleInterceptor activates and deactivates correctly', t => {
|
|
69
|
-
const originalConsole = {
|
|
70
|
-
log: console.log,
|
|
71
|
-
error: console.error,
|
|
72
|
-
warn: console.warn,
|
|
73
|
-
info: console.info,
|
|
74
|
-
debug: console.debug,
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
const interceptor = new ConsoleInterceptor();
|
|
78
|
-
|
|
79
|
-
// Test activation
|
|
80
|
-
interceptor.activate();
|
|
81
|
-
t.true(interceptor.isInterceptorActive());
|
|
82
|
-
|
|
83
|
-
// Verify console methods are replaced
|
|
84
|
-
t.is(console.log, StructuredConsole.log);
|
|
85
|
-
t.is(console.error, StructuredConsole.error);
|
|
86
|
-
t.is(console.warn, StructuredConsole.warn);
|
|
87
|
-
t.is(console.info, StructuredConsole.info);
|
|
88
|
-
t.is(console.debug, StructuredConsole.debug);
|
|
89
|
-
|
|
90
|
-
// Test deactivation
|
|
91
|
-
interceptor.deactivate();
|
|
92
|
-
t.false(interceptor.isInterceptorActive());
|
|
93
|
-
|
|
94
|
-
// Verify original methods are restored
|
|
95
|
-
t.is(console.log, originalConsole.log);
|
|
96
|
-
t.is(console.error, originalConsole.error);
|
|
97
|
-
t.is(console.warn, originalConsole.warn);
|
|
98
|
-
t.is(console.info, originalConsole.info);
|
|
99
|
-
t.is(console.debug, originalConsole.debug);
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
test('ConsoleInterceptor handles multiple activation calls', t => {
|
|
103
|
-
const interceptor = new ConsoleInterceptor();
|
|
104
|
-
|
|
105
|
-
interceptor.activate();
|
|
106
|
-
const firstActivation = interceptor.isInterceptorActive();
|
|
107
|
-
|
|
108
|
-
interceptor.activate(); // Should not cause issues
|
|
109
|
-
const secondActivation = interceptor.isInterceptorActive();
|
|
110
|
-
|
|
111
|
-
t.true(firstActivation);
|
|
112
|
-
t.true(secondActivation);
|
|
113
|
-
t.is(console.log, StructuredConsole.log);
|
|
114
|
-
|
|
115
|
-
interceptor.deactivate();
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
test('ConsoleInterceptor handles deactivation when not active', t => {
|
|
119
|
-
const interceptor = new ConsoleInterceptor();
|
|
120
|
-
|
|
121
|
-
// Should not throw when deactivating while not active
|
|
122
|
-
t.notThrows(() => {
|
|
123
|
-
interceptor.deactivate();
|
|
124
|
-
}, 'Deactivation when not active should not throw');
|
|
125
|
-
|
|
126
|
-
t.false(interceptor.isInterceptorActive());
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
test('globalConsoleInterceptor is available and functional', t => {
|
|
130
|
-
t.truthy(globalConsoleInterceptor);
|
|
131
|
-
t.true(globalConsoleInterceptor instanceof ConsoleInterceptor);
|
|
132
|
-
t.false(globalConsoleInterceptor.isInterceptorActive());
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
test('createModuleConsole creates properly scoped console', t => {
|
|
136
|
-
const moduleName = 'test-module';
|
|
137
|
-
const moduleConsole = createModuleConsole(moduleName);
|
|
138
|
-
|
|
139
|
-
t.truthy(moduleConsole);
|
|
140
|
-
t.truthy(typeof moduleConsole.log === 'function');
|
|
141
|
-
t.truthy(typeof moduleConsole.error === 'function');
|
|
142
|
-
t.truthy(typeof moduleConsole.warn === 'function');
|
|
143
|
-
t.truthy(typeof moduleConsole.info === 'function');
|
|
144
|
-
t.truthy(typeof moduleConsole.debug === 'function');
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
test('ConsoleUsageTracker tracks console usage', t => {
|
|
148
|
-
const tracker = new ConsoleUsageTracker();
|
|
149
|
-
|
|
150
|
-
// Simulate some console calls
|
|
151
|
-
console.log('test log');
|
|
152
|
-
console.error('test error');
|
|
153
|
-
console.log('another log');
|
|
154
|
-
|
|
155
|
-
const stats = tracker.getUsageStats();
|
|
156
|
-
t.true(typeof stats === 'object');
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
test('ConsoleUsageTracker.reportUsage logs statistics', t => {
|
|
160
|
-
const tracker = new ConsoleUsageTracker();
|
|
161
|
-
|
|
162
|
-
t.notThrows(() => {
|
|
163
|
-
tracker.reportUsage();
|
|
164
|
-
}, 'Should report usage without throwing');
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
test('ConsoleUsageTracker.restore works without errors', t => {
|
|
168
|
-
const tracker = new ConsoleUsageTracker();
|
|
169
|
-
|
|
170
|
-
t.notThrows(() => {
|
|
171
|
-
tracker.restore();
|
|
172
|
-
}, 'Restore should not throw errors');
|
|
173
|
-
});
|
|
174
|
-
|
|
175
|
-
test('StructuredConsole handles all console methods consistently', t => {
|
|
176
|
-
const methods = ['log', 'error', 'warn', 'info', 'debug'] as const;
|
|
177
|
-
|
|
178
|
-
methods.forEach(method => {
|
|
179
|
-
// Call the method with a test message
|
|
180
|
-
t.notThrows(() => {
|
|
181
|
-
StructuredConsole[method](`Test ${method} message`);
|
|
182
|
-
}, `${method} should work without throwing`);
|
|
183
|
-
});
|
|
184
|
-
});
|