@cyanheads/mcp-ts-core 0.1.0-beta.12
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/CLAUDE.md +583 -0
- package/LICENSE +201 -0
- package/README.md +287 -0
- package/biome.json +103 -0
- package/dist/app.d.ts +82 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +222 -0
- package/dist/app.js.map +1 -0
- package/dist/cli/init.d.ts +8 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +161 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/config/index.d.ts +349 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +464 -0
- package/dist/config/index.js.map +1 -0
- package/dist/context.d.ts +119 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +144 -0
- package/dist/context.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server/prompts/prompt-registration.d.ts +33 -0
- package/dist/mcp-server/prompts/prompt-registration.d.ts.map +1 -0
- package/dist/mcp-server/prompts/prompt-registration.js +91 -0
- package/dist/mcp-server/prompts/prompt-registration.js.map +1 -0
- package/dist/mcp-server/prompts/utils/newPromptDefinition.d.ts +49 -0
- package/dist/mcp-server/prompts/utils/newPromptDefinition.d.ts.map +1 -0
- package/dist/mcp-server/prompts/utils/newPromptDefinition.js +39 -0
- package/dist/mcp-server/prompts/utils/newPromptDefinition.js.map +1 -0
- package/dist/mcp-server/prompts/utils/promptDefinition.d.ts +37 -0
- package/dist/mcp-server/prompts/utils/promptDefinition.d.ts.map +1 -0
- package/dist/mcp-server/prompts/utils/promptDefinition.js +2 -0
- package/dist/mcp-server/prompts/utils/promptDefinition.js.map +1 -0
- package/dist/mcp-server/resources/resource-registration.d.ts +27 -0
- package/dist/mcp-server/resources/resource-registration.d.ts.map +1 -0
- package/dist/mcp-server/resources/resource-registration.js +85 -0
- package/dist/mcp-server/resources/resource-registration.js.map +1 -0
- package/dist/mcp-server/resources/utils/newResourceDefinition.d.ts +84 -0
- package/dist/mcp-server/resources/utils/newResourceDefinition.d.ts.map +1 -0
- package/dist/mcp-server/resources/utils/newResourceDefinition.js +40 -0
- package/dist/mcp-server/resources/utils/newResourceDefinition.js.map +1 -0
- package/dist/mcp-server/resources/utils/newResourceHandlerFactory.d.ts +32 -0
- package/dist/mcp-server/resources/utils/newResourceHandlerFactory.d.ts.map +1 -0
- package/dist/mcp-server/resources/utils/newResourceHandlerFactory.js +103 -0
- package/dist/mcp-server/resources/utils/newResourceHandlerFactory.js.map +1 -0
- package/dist/mcp-server/resources/utils/resourceDefinition.d.ts +94 -0
- package/dist/mcp-server/resources/utils/resourceDefinition.d.ts.map +1 -0
- package/dist/mcp-server/resources/utils/resourceDefinition.js +2 -0
- package/dist/mcp-server/resources/utils/resourceDefinition.js.map +1 -0
- package/dist/mcp-server/resources/utils/resourceHandlerFactory.d.ts +14 -0
- package/dist/mcp-server/resources/utils/resourceHandlerFactory.d.ts.map +1 -0
- package/dist/mcp-server/resources/utils/resourceHandlerFactory.js +111 -0
- package/dist/mcp-server/resources/utils/resourceHandlerFactory.js.map +1 -0
- package/dist/mcp-server/roots/roots-registration.d.ts +22 -0
- package/dist/mcp-server/roots/roots-registration.d.ts.map +1 -0
- package/dist/mcp-server/roots/roots-registration.js +25 -0
- package/dist/mcp-server/roots/roots-registration.js.map +1 -0
- package/dist/mcp-server/server.d.ts +34 -0
- package/dist/mcp-server/server.d.ts.map +1 -0
- package/dist/mcp-server/server.js +62 -0
- package/dist/mcp-server/server.js.map +1 -0
- package/dist/mcp-server/tasks/core/sessionAwareTaskStore.d.ts +42 -0
- package/dist/mcp-server/tasks/core/sessionAwareTaskStore.d.ts.map +1 -0
- package/dist/mcp-server/tasks/core/sessionAwareTaskStore.js +70 -0
- package/dist/mcp-server/tasks/core/sessionAwareTaskStore.js.map +1 -0
- package/dist/mcp-server/tasks/core/storageBackedTaskStore.d.ts +109 -0
- package/dist/mcp-server/tasks/core/storageBackedTaskStore.d.ts.map +1 -0
- package/dist/mcp-server/tasks/core/storageBackedTaskStore.js +209 -0
- package/dist/mcp-server/tasks/core/storageBackedTaskStore.js.map +1 -0
- package/dist/mcp-server/tasks/core/taskManager.d.ts +103 -0
- package/dist/mcp-server/tasks/core/taskManager.d.ts.map +1 -0
- package/dist/mcp-server/tasks/core/taskManager.js +144 -0
- package/dist/mcp-server/tasks/core/taskManager.js.map +1 -0
- package/dist/mcp-server/tasks/core/taskTypes.d.ts +11 -0
- package/dist/mcp-server/tasks/core/taskTypes.d.ts.map +1 -0
- package/dist/mcp-server/tasks/core/taskTypes.js +13 -0
- package/dist/mcp-server/tasks/core/taskTypes.js.map +1 -0
- package/dist/mcp-server/tasks/utils/taskToolDefinition.d.ts +108 -0
- package/dist/mcp-server/tasks/utils/taskToolDefinition.d.ts.map +1 -0
- package/dist/mcp-server/tasks/utils/taskToolDefinition.js +14 -0
- package/dist/mcp-server/tasks/utils/taskToolDefinition.js.map +1 -0
- package/dist/mcp-server/tools/tool-registration.d.ts +49 -0
- package/dist/mcp-server/tools/tool-registration.d.ts.map +1 -0
- package/dist/mcp-server/tools/tool-registration.js +269 -0
- package/dist/mcp-server/tools/tool-registration.js.map +1 -0
- package/dist/mcp-server/tools/utils/newToolDefinition.d.ts +73 -0
- package/dist/mcp-server/tools/utils/newToolDefinition.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/newToolDefinition.js +45 -0
- package/dist/mcp-server/tools/utils/newToolDefinition.js.map +1 -0
- package/dist/mcp-server/tools/utils/newToolHandlerFactory.d.ts +33 -0
- package/dist/mcp-server/tools/utils/newToolHandlerFactory.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/newToolHandlerFactory.js +107 -0
- package/dist/mcp-server/tools/utils/newToolHandlerFactory.js.map +1 -0
- package/dist/mcp-server/tools/utils/toolDefinition.d.ts +118 -0
- package/dist/mcp-server/tools/utils/toolDefinition.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/toolDefinition.js +2 -0
- package/dist/mcp-server/tools/utils/toolDefinition.js.map +1 -0
- package/dist/mcp-server/tools/utils/toolHandlerFactory.d.ts +34 -0
- package/dist/mcp-server/tools/utils/toolHandlerFactory.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/toolHandlerFactory.js +68 -0
- package/dist/mcp-server/tools/utils/toolHandlerFactory.js.map +1 -0
- package/dist/mcp-server/transports/ITransport.d.ts +15 -0
- package/dist/mcp-server/transports/ITransport.d.ts.map +1 -0
- package/dist/mcp-server/transports/ITransport.js +2 -0
- package/dist/mcp-server/transports/ITransport.js.map +1 -0
- package/dist/mcp-server/transports/auth/authFactory.d.ts +11 -0
- package/dist/mcp-server/transports/auth/authFactory.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/authFactory.js +43 -0
- package/dist/mcp-server/transports/auth/authFactory.js.map +1 -0
- package/dist/mcp-server/transports/auth/authMiddleware.d.ts +24 -0
- package/dist/mcp-server/transports/auth/authMiddleware.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/authMiddleware.js +69 -0
- package/dist/mcp-server/transports/auth/authMiddleware.js.map +1 -0
- package/dist/mcp-server/transports/auth/lib/authContext.d.ts +34 -0
- package/dist/mcp-server/transports/auth/lib/authContext.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/lib/authContext.js +25 -0
- package/dist/mcp-server/transports/auth/lib/authContext.js.map +1 -0
- package/dist/mcp-server/transports/auth/lib/authTypes.d.ts +19 -0
- package/dist/mcp-server/transports/auth/lib/authTypes.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/lib/authTypes.js +2 -0
- package/dist/mcp-server/transports/auth/lib/authTypes.js.map +1 -0
- package/dist/mcp-server/transports/auth/lib/authUtils.d.ts +18 -0
- package/dist/mcp-server/transports/auth/lib/authUtils.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/lib/authUtils.js +64 -0
- package/dist/mcp-server/transports/auth/lib/authUtils.js.map +1 -0
- package/dist/mcp-server/transports/auth/lib/checkScopes.d.ts +25 -0
- package/dist/mcp-server/transports/auth/lib/checkScopes.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/lib/checkScopes.js +34 -0
- package/dist/mcp-server/transports/auth/lib/checkScopes.js.map +1 -0
- package/dist/mcp-server/transports/auth/lib/claimParser.d.ts +34 -0
- package/dist/mcp-server/transports/auth/lib/claimParser.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/lib/claimParser.js +58 -0
- package/dist/mcp-server/transports/auth/lib/claimParser.js.map +1 -0
- package/dist/mcp-server/transports/auth/lib/withAuth.d.ts +25 -0
- package/dist/mcp-server/transports/auth/lib/withAuth.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/lib/withAuth.js +30 -0
- package/dist/mcp-server/transports/auth/lib/withAuth.js.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/authStrategy.d.ts +18 -0
- package/dist/mcp-server/transports/auth/strategies/authStrategy.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/authStrategy.js +2 -0
- package/dist/mcp-server/transports/auth/strategies/authStrategy.js.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/jwtStrategy.d.ts +14 -0
- package/dist/mcp-server/transports/auth/strategies/jwtStrategy.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/jwtStrategy.js +86 -0
- package/dist/mcp-server/transports/auth/strategies/jwtStrategy.js.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/oauthStrategy.d.ts +14 -0
- package/dist/mcp-server/transports/auth/strategies/oauthStrategy.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/oauthStrategy.js +113 -0
- package/dist/mcp-server/transports/auth/strategies/oauthStrategy.js.map +1 -0
- package/dist/mcp-server/transports/http/httpErrorHandler.d.ts +25 -0
- package/dist/mcp-server/transports/http/httpErrorHandler.d.ts.map +1 -0
- package/dist/mcp-server/transports/http/httpErrorHandler.js +112 -0
- package/dist/mcp-server/transports/http/httpErrorHandler.js.map +1 -0
- package/dist/mcp-server/transports/http/httpTransport.d.ts +47 -0
- package/dist/mcp-server/transports/http/httpTransport.d.ts.map +1 -0
- package/dist/mcp-server/transports/http/httpTransport.js +396 -0
- package/dist/mcp-server/transports/http/httpTransport.js.map +1 -0
- package/dist/mcp-server/transports/http/httpTypes.d.ts +17 -0
- package/dist/mcp-server/transports/http/httpTypes.d.ts.map +1 -0
- package/dist/mcp-server/transports/http/httpTypes.js +2 -0
- package/dist/mcp-server/transports/http/httpTypes.js.map +1 -0
- package/dist/mcp-server/transports/http/protectedResourceMetadata.d.ts +21 -0
- package/dist/mcp-server/transports/http/protectedResourceMetadata.d.ts.map +1 -0
- package/dist/mcp-server/transports/http/protectedResourceMetadata.js +44 -0
- package/dist/mcp-server/transports/http/protectedResourceMetadata.js.map +1 -0
- package/dist/mcp-server/transports/http/sessionIdUtils.d.ts +33 -0
- package/dist/mcp-server/transports/http/sessionIdUtils.d.ts.map +1 -0
- package/dist/mcp-server/transports/http/sessionIdUtils.js +54 -0
- package/dist/mcp-server/transports/http/sessionIdUtils.js.map +1 -0
- package/dist/mcp-server/transports/http/sessionStore.d.ts +87 -0
- package/dist/mcp-server/transports/http/sessionStore.d.ts.map +1 -0
- package/dist/mcp-server/transports/http/sessionStore.js +209 -0
- package/dist/mcp-server/transports/http/sessionStore.js.map +1 -0
- package/dist/mcp-server/transports/manager.d.ts +22 -0
- package/dist/mcp-server/transports/manager.d.ts.map +1 -0
- package/dist/mcp-server/transports/manager.js +62 -0
- package/dist/mcp-server/transports/manager.js.map +1 -0
- package/dist/mcp-server/transports/stdio/stdioTransport.d.ts +44 -0
- package/dist/mcp-server/transports/stdio/stdioTransport.d.ts.map +1 -0
- package/dist/mcp-server/transports/stdio/stdioTransport.js +63 -0
- package/dist/mcp-server/transports/stdio/stdioTransport.js.map +1 -0
- package/dist/services/graph/core/GraphService.d.ts +205 -0
- package/dist/services/graph/core/GraphService.d.ts.map +1 -0
- package/dist/services/graph/core/GraphService.js +231 -0
- package/dist/services/graph/core/GraphService.js.map +1 -0
- package/dist/services/graph/core/IGraphProvider.d.ts +295 -0
- package/dist/services/graph/core/IGraphProvider.d.ts.map +1 -0
- package/dist/services/graph/core/IGraphProvider.js +8 -0
- package/dist/services/graph/core/IGraphProvider.js.map +1 -0
- package/dist/services/graph/types.d.ts +107 -0
- package/dist/services/graph/types.d.ts.map +1 -0
- package/dist/services/graph/types.js +8 -0
- package/dist/services/graph/types.js.map +1 -0
- package/dist/services/llm/core/ILlmProvider.d.ts +86 -0
- package/dist/services/llm/core/ILlmProvider.d.ts.map +1 -0
- package/dist/services/llm/core/ILlmProvider.js +2 -0
- package/dist/services/llm/core/ILlmProvider.js.map +1 -0
- package/dist/services/llm/providers/openrouter.provider.d.ts +187 -0
- package/dist/services/llm/providers/openrouter.provider.d.ts.map +1 -0
- package/dist/services/llm/providers/openrouter.provider.js +302 -0
- package/dist/services/llm/providers/openrouter.provider.js.map +1 -0
- package/dist/services/llm/types.d.ts +16 -0
- package/dist/services/llm/types.d.ts.map +1 -0
- package/dist/services/llm/types.js +9 -0
- package/dist/services/llm/types.js.map +1 -0
- package/dist/services/speech/core/ISpeechProvider.d.ts +92 -0
- package/dist/services/speech/core/ISpeechProvider.d.ts.map +1 -0
- package/dist/services/speech/core/ISpeechProvider.js +34 -0
- package/dist/services/speech/core/ISpeechProvider.js.map +1 -0
- package/dist/services/speech/core/SpeechService.d.ts +87 -0
- package/dist/services/speech/core/SpeechService.d.ts.map +1 -0
- package/dist/services/speech/core/SpeechService.js +135 -0
- package/dist/services/speech/core/SpeechService.js.map +1 -0
- package/dist/services/speech/providers/elevenlabs.provider.d.ts +77 -0
- package/dist/services/speech/providers/elevenlabs.provider.d.ts.map +1 -0
- package/dist/services/speech/providers/elevenlabs.provider.js +199 -0
- package/dist/services/speech/providers/elevenlabs.provider.js.map +1 -0
- package/dist/services/speech/providers/whisper.provider.d.ts +94 -0
- package/dist/services/speech/providers/whisper.provider.d.ts.map +1 -0
- package/dist/services/speech/providers/whisper.provider.js +240 -0
- package/dist/services/speech/providers/whisper.provider.js.map +1 -0
- package/dist/services/speech/types.d.ts +173 -0
- package/dist/services/speech/types.d.ts.map +1 -0
- package/dist/services/speech/types.js +8 -0
- package/dist/services/speech/types.js.map +1 -0
- package/dist/storage/core/IStorageProvider.d.ts +159 -0
- package/dist/storage/core/IStorageProvider.d.ts.map +1 -0
- package/dist/storage/core/IStorageProvider.js +2 -0
- package/dist/storage/core/IStorageProvider.js.map +1 -0
- package/dist/storage/core/StorageService.d.ts +22 -0
- package/dist/storage/core/StorageService.d.ts.map +1 -0
- package/dist/storage/core/StorageService.js +151 -0
- package/dist/storage/core/StorageService.js.map +1 -0
- package/dist/storage/core/storageFactory.d.ts +66 -0
- package/dist/storage/core/storageFactory.d.ts.map +1 -0
- package/dist/storage/core/storageFactory.js +122 -0
- package/dist/storage/core/storageFactory.js.map +1 -0
- package/dist/storage/core/storageValidation.d.ts +77 -0
- package/dist/storage/core/storageValidation.d.ts.map +1 -0
- package/dist/storage/core/storageValidation.js +303 -0
- package/dist/storage/core/storageValidation.js.map +1 -0
- package/dist/storage/providers/cloudflare/d1Provider.d.ts +94 -0
- package/dist/storage/providers/cloudflare/d1Provider.d.ts.map +1 -0
- package/dist/storage/providers/cloudflare/d1Provider.js +347 -0
- package/dist/storage/providers/cloudflare/d1Provider.js.map +1 -0
- package/dist/storage/providers/cloudflare/kvProvider.d.ts +21 -0
- package/dist/storage/providers/cloudflare/kvProvider.d.ts.map +1 -0
- package/dist/storage/providers/cloudflare/kvProvider.js +183 -0
- package/dist/storage/providers/cloudflare/kvProvider.js.map +1 -0
- package/dist/storage/providers/cloudflare/r2Provider.d.ts +28 -0
- package/dist/storage/providers/cloudflare/r2Provider.d.ts.map +1 -0
- package/dist/storage/providers/cloudflare/r2Provider.js +222 -0
- package/dist/storage/providers/cloudflare/r2Provider.js.map +1 -0
- package/dist/storage/providers/fileSystem/fileSystemProvider.d.ts +20 -0
- package/dist/storage/providers/fileSystem/fileSystemProvider.d.ts.map +1 -0
- package/dist/storage/providers/fileSystem/fileSystemProvider.js +282 -0
- package/dist/storage/providers/fileSystem/fileSystemProvider.js.map +1 -0
- package/dist/storage/providers/inMemory/inMemoryProvider.d.ts +21 -0
- package/dist/storage/providers/inMemory/inMemoryProvider.d.ts.map +1 -0
- package/dist/storage/providers/inMemory/inMemoryProvider.js +139 -0
- package/dist/storage/providers/inMemory/inMemoryProvider.js.map +1 -0
- package/dist/storage/providers/supabase/supabase.types.d.ts +49 -0
- package/dist/storage/providers/supabase/supabase.types.d.ts.map +1 -0
- package/dist/storage/providers/supabase/supabase.types.js +8 -0
- package/dist/storage/providers/supabase/supabase.types.js.map +1 -0
- package/dist/storage/providers/supabase/supabaseProvider.d.ts +24 -0
- package/dist/storage/providers/supabase/supabaseProvider.d.ts.map +1 -0
- package/dist/storage/providers/supabase/supabaseProvider.js +209 -0
- package/dist/storage/providers/supabase/supabaseProvider.js.map +1 -0
- package/dist/testing/index.d.ts +53 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +132 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/types-global/errors.d.ts +83 -0
- package/dist/types-global/errors.d.ts.map +1 -0
- package/dist/types-global/errors.js +113 -0
- package/dist/types-global/errors.js.map +1 -0
- package/dist/utils/formatting/diffFormatter.d.ts +227 -0
- package/dist/utils/formatting/diffFormatter.d.ts.map +1 -0
- package/dist/utils/formatting/diffFormatter.js +369 -0
- package/dist/utils/formatting/diffFormatter.js.map +1 -0
- package/dist/utils/formatting/index.d.ts +9 -0
- package/dist/utils/formatting/index.d.ts.map +1 -0
- package/dist/utils/formatting/index.js +9 -0
- package/dist/utils/formatting/index.js.map +1 -0
- package/dist/utils/formatting/markdownBuilder.d.ts +543 -0
- package/dist/utils/formatting/markdownBuilder.d.ts.map +1 -0
- package/dist/utils/formatting/markdownBuilder.js +674 -0
- package/dist/utils/formatting/markdownBuilder.js.map +1 -0
- package/dist/utils/formatting/tableFormatter.d.ts +261 -0
- package/dist/utils/formatting/tableFormatter.d.ts.map +1 -0
- package/dist/utils/formatting/tableFormatter.js +456 -0
- package/dist/utils/formatting/tableFormatter.js.map +1 -0
- package/dist/utils/formatting/treeFormatter.d.ts +344 -0
- package/dist/utils/formatting/treeFormatter.d.ts.map +1 -0
- package/dist/utils/formatting/treeFormatter.js +400 -0
- package/dist/utils/formatting/treeFormatter.js.map +1 -0
- package/dist/utils/internal/encoding.d.ts +42 -0
- package/dist/utils/internal/encoding.d.ts.map +1 -0
- package/dist/utils/internal/encoding.js +87 -0
- package/dist/utils/internal/encoding.js.map +1 -0
- package/dist/utils/internal/error-handler/errorHandler.d.ts +140 -0
- package/dist/utils/internal/error-handler/errorHandler.d.ts.map +1 -0
- package/dist/utils/internal/error-handler/errorHandler.js +318 -0
- package/dist/utils/internal/error-handler/errorHandler.js.map +1 -0
- package/dist/utils/internal/error-handler/helpers.d.ts +98 -0
- package/dist/utils/internal/error-handler/helpers.d.ts.map +1 -0
- package/dist/utils/internal/error-handler/helpers.js +214 -0
- package/dist/utils/internal/error-handler/helpers.js.map +1 -0
- package/dist/utils/internal/error-handler/mappings.d.ts +85 -0
- package/dist/utils/internal/error-handler/mappings.d.ts.map +1 -0
- package/dist/utils/internal/error-handler/mappings.js +234 -0
- package/dist/utils/internal/error-handler/mappings.js.map +1 -0
- package/dist/utils/internal/error-handler/types.d.ts +160 -0
- package/dist/utils/internal/error-handler/types.d.ts.map +1 -0
- package/dist/utils/internal/error-handler/types.js +6 -0
- package/dist/utils/internal/error-handler/types.js.map +1 -0
- package/dist/utils/internal/health.d.ts +60 -0
- package/dist/utils/internal/health.d.ts.map +1 -0
- package/dist/utils/internal/health.js +46 -0
- package/dist/utils/internal/health.js.map +1 -0
- package/dist/utils/internal/logger.d.ts +300 -0
- package/dist/utils/internal/logger.d.ts.map +1 -0
- package/dist/utils/internal/logger.js +573 -0
- package/dist/utils/internal/logger.js.map +1 -0
- package/dist/utils/internal/performance.d.ts +78 -0
- package/dist/utils/internal/performance.d.ts.map +1 -0
- package/dist/utils/internal/performance.js +227 -0
- package/dist/utils/internal/performance.js.map +1 -0
- package/dist/utils/internal/requestContext.d.ts +200 -0
- package/dist/utils/internal/requestContext.d.ts.map +1 -0
- package/dist/utils/internal/requestContext.js +163 -0
- package/dist/utils/internal/requestContext.js.map +1 -0
- package/dist/utils/internal/runtime.d.ts +49 -0
- package/dist/utils/internal/runtime.d.ts.map +1 -0
- package/dist/utils/internal/runtime.js +90 -0
- package/dist/utils/internal/runtime.js.map +1 -0
- package/dist/utils/internal/startupBanner.d.ts +23 -0
- package/dist/utils/internal/startupBanner.d.ts.map +1 -0
- package/dist/utils/internal/startupBanner.js +34 -0
- package/dist/utils/internal/startupBanner.js.map +1 -0
- package/dist/utils/metrics/tokenCounter.d.ts +97 -0
- package/dist/utils/metrics/tokenCounter.d.ts.map +1 -0
- package/dist/utils/metrics/tokenCounter.js +162 -0
- package/dist/utils/metrics/tokenCounter.js.map +1 -0
- package/dist/utils/network/fetchWithTimeout.d.ts +91 -0
- package/dist/utils/network/fetchWithTimeout.d.ts.map +1 -0
- package/dist/utils/network/fetchWithTimeout.js +305 -0
- package/dist/utils/network/fetchWithTimeout.js.map +1 -0
- package/dist/utils/pagination/pagination.d.ts +157 -0
- package/dist/utils/pagination/pagination.d.ts.map +1 -0
- package/dist/utils/pagination/pagination.js +191 -0
- package/dist/utils/pagination/pagination.js.map +1 -0
- package/dist/utils/parsing/csvParser.d.ts +84 -0
- package/dist/utils/parsing/csvParser.d.ts.map +1 -0
- package/dist/utils/parsing/csvParser.js +132 -0
- package/dist/utils/parsing/csvParser.js.map +1 -0
- package/dist/utils/parsing/dateParser.d.ts +103 -0
- package/dist/utils/parsing/dateParser.d.ts.map +1 -0
- package/dist/utils/parsing/dateParser.js +142 -0
- package/dist/utils/parsing/dateParser.js.map +1 -0
- package/dist/utils/parsing/frontmatterParser.d.ts +91 -0
- package/dist/utils/parsing/frontmatterParser.d.ts.map +1 -0
- package/dist/utils/parsing/frontmatterParser.js +163 -0
- package/dist/utils/parsing/frontmatterParser.js.map +1 -0
- package/dist/utils/parsing/index.d.ts +15 -0
- package/dist/utils/parsing/index.d.ts.map +1 -0
- package/dist/utils/parsing/index.js +15 -0
- package/dist/utils/parsing/index.js.map +1 -0
- package/dist/utils/parsing/jsonParser.d.ts +115 -0
- package/dist/utils/parsing/jsonParser.d.ts.map +1 -0
- package/dist/utils/parsing/jsonParser.js +177 -0
- package/dist/utils/parsing/jsonParser.js.map +1 -0
- package/dist/utils/parsing/pdfParser.d.ts +563 -0
- package/dist/utils/parsing/pdfParser.d.ts.map +1 -0
- package/dist/utils/parsing/pdfParser.js +775 -0
- package/dist/utils/parsing/pdfParser.js.map +1 -0
- package/dist/utils/parsing/thinkBlock.d.ts +31 -0
- package/dist/utils/parsing/thinkBlock.d.ts.map +1 -0
- package/dist/utils/parsing/thinkBlock.js +31 -0
- package/dist/utils/parsing/thinkBlock.js.map +1 -0
- package/dist/utils/parsing/xmlParser.d.ts +69 -0
- package/dist/utils/parsing/xmlParser.d.ts.map +1 -0
- package/dist/utils/parsing/xmlParser.js +140 -0
- package/dist/utils/parsing/xmlParser.js.map +1 -0
- package/dist/utils/parsing/yamlParser.d.ts +64 -0
- package/dist/utils/parsing/yamlParser.d.ts.map +1 -0
- package/dist/utils/parsing/yamlParser.js +129 -0
- package/dist/utils/parsing/yamlParser.js.map +1 -0
- package/dist/utils/scheduling/scheduler.d.ts +174 -0
- package/dist/utils/scheduling/scheduler.d.ts.map +1 -0
- package/dist/utils/scheduling/scheduler.js +248 -0
- package/dist/utils/scheduling/scheduler.js.map +1 -0
- package/dist/utils/security/idGenerator.d.ts +189 -0
- package/dist/utils/security/idGenerator.d.ts.map +1 -0
- package/dist/utils/security/idGenerator.js +301 -0
- package/dist/utils/security/idGenerator.js.map +1 -0
- package/dist/utils/security/index.d.ts +8 -0
- package/dist/utils/security/index.d.ts.map +1 -0
- package/dist/utils/security/index.js +8 -0
- package/dist/utils/security/index.js.map +1 -0
- package/dist/utils/security/rateLimiter.d.ts +171 -0
- package/dist/utils/security/rateLimiter.d.ts.map +1 -0
- package/dist/utils/security/rateLimiter.js +294 -0
- package/dist/utils/security/rateLimiter.js.map +1 -0
- package/dist/utils/security/sanitization.d.ts +430 -0
- package/dist/utils/security/sanitization.d.ts.map +1 -0
- package/dist/utils/security/sanitization.js +759 -0
- package/dist/utils/security/sanitization.js.map +1 -0
- package/dist/utils/telemetry/index.d.ts +12 -0
- package/dist/utils/telemetry/index.d.ts.map +1 -0
- package/dist/utils/telemetry/index.js +12 -0
- package/dist/utils/telemetry/index.js.map +1 -0
- package/dist/utils/telemetry/instrumentation.d.ts +62 -0
- package/dist/utils/telemetry/instrumentation.d.ts.map +1 -0
- package/dist/utils/telemetry/instrumentation.js +223 -0
- package/dist/utils/telemetry/instrumentation.js.map +1 -0
- package/dist/utils/telemetry/metrics.d.ts +170 -0
- package/dist/utils/telemetry/metrics.d.ts.map +1 -0
- package/dist/utils/telemetry/metrics.js +205 -0
- package/dist/utils/telemetry/metrics.js.map +1 -0
- package/dist/utils/telemetry/semconv.d.ts +147 -0
- package/dist/utils/telemetry/semconv.d.ts.map +1 -0
- package/dist/utils/telemetry/semconv.js +159 -0
- package/dist/utils/telemetry/semconv.js.map +1 -0
- package/dist/utils/telemetry/trace.d.ts +141 -0
- package/dist/utils/telemetry/trace.d.ts.map +1 -0
- package/dist/utils/telemetry/trace.js +193 -0
- package/dist/utils/telemetry/trace.js.map +1 -0
- package/dist/utils/types/guards.d.ts +209 -0
- package/dist/utils/types/guards.d.ts.map +1 -0
- package/dist/utils/types/guards.js +229 -0
- package/dist/utils/types/guards.js.map +1 -0
- package/dist/utils/types/index.d.ts +6 -0
- package/dist/utils/types/index.d.ts.map +1 -0
- package/dist/utils/types/index.js +6 -0
- package/dist/utils/types/index.js.map +1 -0
- package/dist/worker.d.ts +59 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +216 -0
- package/dist/worker.js.map +1 -0
- package/package.json +377 -0
- package/skills/README.md +38 -0
- package/skills/add-export/SKILL.md +49 -0
- package/skills/add-prompt/SKILL.md +97 -0
- package/skills/add-provider/SKILL.md +53 -0
- package/skills/add-resource/SKILL.md +107 -0
- package/skills/add-service/SKILL.md +113 -0
- package/skills/add-tool/SKILL.md +110 -0
- package/skills/api-auth/SKILL.md +173 -0
- package/skills/api-config/SKILL.md +68 -0
- package/skills/api-context/SKILL.md +321 -0
- package/skills/api-errors/SKILL.md +146 -0
- package/skills/api-services/SKILL.md +24 -0
- package/skills/api-services/references/graph.md +124 -0
- package/skills/api-services/references/llm.md +46 -0
- package/skills/api-services/references/speech.md +72 -0
- package/skills/api-testing/SKILL.md +263 -0
- package/skills/api-utils/SKILL.md +106 -0
- package/skills/api-utils/references/formatting.md +237 -0
- package/skills/api-utils/references/parsing.md +263 -0
- package/skills/api-utils/references/security.md +226 -0
- package/skills/api-workers/SKILL.md +165 -0
- package/skills/devcheck/SKILL.md +31 -0
- package/skills/maintenance/SKILL.md +52 -0
- package/skills/migrate-mcp-ts-template/SKILL.md +131 -0
- package/skills/release/SKILL.md +67 -0
- package/skills/setup/SKILL.md +89 -0
- package/skills/walkthrough-init/SKILL.md +50 -0
- package/templates/.env.example +17 -0
- package/templates/AGENTS.md +113 -0
- package/templates/CLAUDE.md +113 -0
- package/templates/_tsconfig.json +33 -0
- package/templates/biome.template.json +43 -0
- package/templates/package.json +26 -0
- package/templates/src/index.ts +16 -0
- package/templates/src/mcp-server/prompts/definitions/echo.prompt.ts +19 -0
- package/templates/src/mcp-server/resources/definitions/echo.resource.ts +30 -0
- package/templates/src/mcp-server/tools/definitions/echo.tool.ts +24 -0
- package/templates/vitest.config.ts +12 -0
- package/tsconfig.base.json +44 -0
- package/vitest.config.base.ts +38 -0
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Tree formatter utility for visualizing hierarchical data structures.
|
|
3
|
+
* Supports ASCII, Unicode box-drawing, and compact tree styles with icons and metadata.
|
|
4
|
+
* @module src/utils/formatting/treeFormatter
|
|
5
|
+
*/
|
|
6
|
+
import { JsonRpcErrorCode, McpError } from '../../types-global/errors.js';
|
|
7
|
+
import { logger } from '../../utils/internal/logger.js';
|
|
8
|
+
import { requestContextService } from '../../utils/internal/requestContext.js';
|
|
9
|
+
/**
|
|
10
|
+
* Utility class for formatting hierarchical data as tree structures.
|
|
11
|
+
*
|
|
12
|
+
* Renders a {@link TreeNode} graph as a multi-line string using ASCII, Unicode
|
|
13
|
+
* box-drawing, or compact indented styles. Handles arbitrary depth, optional icons,
|
|
14
|
+
* inline metadata, and detects circular references at render time.
|
|
15
|
+
*
|
|
16
|
+
* Use the exported {@link treeFormatter} singleton rather than constructing directly.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* import { treeFormatter } from '../../utils/formatting/treeFormatter.js';
|
|
21
|
+
*
|
|
22
|
+
* const tree: TreeNode = {
|
|
23
|
+
* name: 'src',
|
|
24
|
+
* children: [
|
|
25
|
+
* { name: 'index.ts' },
|
|
26
|
+
* { name: 'utils', children: [{ name: 'helper.ts' }] },
|
|
27
|
+
* ],
|
|
28
|
+
* };
|
|
29
|
+
*
|
|
30
|
+
* console.log(treeFormatter.format(tree, { style: 'unicode' }));
|
|
31
|
+
* // src
|
|
32
|
+
* // ├── index.ts
|
|
33
|
+
* // └── utils
|
|
34
|
+
* // └── helper.ts
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export class TreeFormatter {
|
|
38
|
+
/**
|
|
39
|
+
* Default formatting options.
|
|
40
|
+
* @private
|
|
41
|
+
*/
|
|
42
|
+
defaultOptions = {
|
|
43
|
+
style: 'unicode',
|
|
44
|
+
maxDepth: undefined,
|
|
45
|
+
showMetadata: false,
|
|
46
|
+
icons: false,
|
|
47
|
+
indent: ' ',
|
|
48
|
+
folderIcon: '📁',
|
|
49
|
+
fileIcon: '📄',
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Track seen nodes for circular reference detection.
|
|
53
|
+
* @private
|
|
54
|
+
*/
|
|
55
|
+
seenNodes = new Set();
|
|
56
|
+
/**
|
|
57
|
+
* Format a single tree into a multi-line string.
|
|
58
|
+
*
|
|
59
|
+
* Merges `options` with defaults, resets circular-reference tracking, then
|
|
60
|
+
* recursively renders each node with branch connectors, optional icons, and
|
|
61
|
+
* optional metadata. Lines are joined with `\n`.
|
|
62
|
+
*
|
|
63
|
+
* @param root - Root node of the tree. Must have a non-empty `name` string.
|
|
64
|
+
* @param options - Formatting options. Merged with defaults; all fields are optional.
|
|
65
|
+
* @param context - Optional request context for correlated log output. A new context
|
|
66
|
+
* is created automatically when omitted.
|
|
67
|
+
* @returns Multi-line tree string. The root node appears on the first line with no
|
|
68
|
+
* connector prefix; child nodes are indented and prefixed with branch connectors.
|
|
69
|
+
* @throws {McpError} With code `ValidationError` if `root` is missing or has no `name`.
|
|
70
|
+
* @throws {McpError} With code `InternalError` if rendering fails unexpectedly.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```typescript
|
|
74
|
+
* const tree = {
|
|
75
|
+
* name: 'src',
|
|
76
|
+
* children: [
|
|
77
|
+
* { name: 'index.ts' },
|
|
78
|
+
* {
|
|
79
|
+
* name: 'utils',
|
|
80
|
+
* children: [
|
|
81
|
+
* { name: 'helper.ts' },
|
|
82
|
+
* { name: 'types.ts' },
|
|
83
|
+
* ],
|
|
84
|
+
* },
|
|
85
|
+
* ],
|
|
86
|
+
* };
|
|
87
|
+
*
|
|
88
|
+
* console.log(treeFormatter.format(tree, { style: 'unicode', icons: true }));
|
|
89
|
+
* // 📁 src
|
|
90
|
+
* // ├── 📄 index.ts
|
|
91
|
+
* // └── 📁 utils
|
|
92
|
+
* // ├── 📄 helper.ts
|
|
93
|
+
* // └── 📄 types.ts
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
format(root, options, context) {
|
|
97
|
+
const logContext = context ||
|
|
98
|
+
requestContextService.createRequestContext({
|
|
99
|
+
operation: 'TreeFormatter.format',
|
|
100
|
+
});
|
|
101
|
+
// Validate input
|
|
102
|
+
if (!root || typeof root.name !== 'string') {
|
|
103
|
+
throw new McpError(JsonRpcErrorCode.ValidationError, 'Root node must have a name property', logContext);
|
|
104
|
+
}
|
|
105
|
+
const opts = {
|
|
106
|
+
...this.defaultOptions,
|
|
107
|
+
...options,
|
|
108
|
+
};
|
|
109
|
+
try {
|
|
110
|
+
// Reset circular reference detection
|
|
111
|
+
this.seenNodes.clear();
|
|
112
|
+
logger.debug('Formatting tree structure', {
|
|
113
|
+
...logContext,
|
|
114
|
+
rootName: root.name,
|
|
115
|
+
style: opts.style,
|
|
116
|
+
});
|
|
117
|
+
const lines = [];
|
|
118
|
+
this.renderNode(root, '', true, true, lines, opts, 0);
|
|
119
|
+
const result = lines.join('\n');
|
|
120
|
+
logger.debug('Tree formatted successfully', {
|
|
121
|
+
...logContext,
|
|
122
|
+
lineCount: lines.length,
|
|
123
|
+
});
|
|
124
|
+
return result;
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
if (error instanceof McpError) {
|
|
128
|
+
throw error;
|
|
129
|
+
}
|
|
130
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
131
|
+
const stack = error instanceof Error ? error.stack : undefined;
|
|
132
|
+
logger.error('Failed to format tree', {
|
|
133
|
+
...logContext,
|
|
134
|
+
error: message,
|
|
135
|
+
});
|
|
136
|
+
throw new McpError(JsonRpcErrorCode.InternalError, `Failed to format tree: ${message}`, {
|
|
137
|
+
...logContext,
|
|
138
|
+
originalError: stack,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Format multiple independent trees (forest) into a single string.
|
|
144
|
+
*
|
|
145
|
+
* Calls {@link format} on each root in order and joins the results with a blank
|
|
146
|
+
* line (`\n\n`) between them. Useful for rendering several top-level structures
|
|
147
|
+
* side-by-side in one output block (e.g. `src/`, `tests/`, `docs/`).
|
|
148
|
+
*
|
|
149
|
+
* @param roots - Non-empty array of root nodes. Each must satisfy the same
|
|
150
|
+
* constraints as the `root` parameter of {@link format}.
|
|
151
|
+
* @param options - Formatting options applied uniformly to every tree.
|
|
152
|
+
* @param context - Optional request context for correlated log output. A new context
|
|
153
|
+
* is created automatically when omitted.
|
|
154
|
+
* @returns Each formatted tree separated by a blank line.
|
|
155
|
+
* @throws {McpError} With code `ValidationError` if `roots` is empty or not an array.
|
|
156
|
+
* @throws {McpError} With code `ValidationError` / `InternalError` propagated from
|
|
157
|
+
* {@link format} if any individual tree fails to render.
|
|
158
|
+
*
|
|
159
|
+
* @example
|
|
160
|
+
* ```typescript
|
|
161
|
+
* const roots = [
|
|
162
|
+
* { name: 'src', children: [{ name: 'index.ts' }] },
|
|
163
|
+
* { name: 'tests', children: [{ name: 'index.test.ts' }] },
|
|
164
|
+
* ];
|
|
165
|
+
*
|
|
166
|
+
* console.log(treeFormatter.formatMultiple(roots, { style: 'unicode' }));
|
|
167
|
+
* // src
|
|
168
|
+
* // └── index.ts
|
|
169
|
+
* //
|
|
170
|
+
* // tests
|
|
171
|
+
* // └── index.test.ts
|
|
172
|
+
* ```
|
|
173
|
+
*/
|
|
174
|
+
formatMultiple(roots, options, context) {
|
|
175
|
+
const logContext = context ||
|
|
176
|
+
requestContextService.createRequestContext({
|
|
177
|
+
operation: 'TreeFormatter.formatMultiple',
|
|
178
|
+
});
|
|
179
|
+
if (!Array.isArray(roots) || roots.length === 0) {
|
|
180
|
+
throw new McpError(JsonRpcErrorCode.ValidationError, 'Roots must be a non-empty array', logContext);
|
|
181
|
+
}
|
|
182
|
+
try {
|
|
183
|
+
logger.debug('Formatting multiple tree structures', {
|
|
184
|
+
...logContext,
|
|
185
|
+
count: roots.length,
|
|
186
|
+
});
|
|
187
|
+
const results = roots.map((root) => this.format(root, options, logContext));
|
|
188
|
+
return results.join('\n\n');
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
if (error instanceof McpError) {
|
|
192
|
+
throw error;
|
|
193
|
+
}
|
|
194
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
195
|
+
const stack = error instanceof Error ? error.stack : undefined;
|
|
196
|
+
throw new McpError(JsonRpcErrorCode.InternalError, `Failed to format multiple trees: ${message}`, { ...logContext, originalError: stack });
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Recursively render a tree node and its children into `lines`.
|
|
201
|
+
*
|
|
202
|
+
* Uses a post-order removal strategy for circular-reference detection: the node is
|
|
203
|
+
* added to `seenNodes` before descending into children and removed afterward, so
|
|
204
|
+
* the same node can appear in multiple independent branches without false positives —
|
|
205
|
+
* only true ancestor-descendant cycles are flagged.
|
|
206
|
+
*
|
|
207
|
+
* @param node - Current node to render.
|
|
208
|
+
* @param prefix - String prepended to every line produced by this call and its
|
|
209
|
+
* descendants (carries the vertical-connector continuation from parent levels).
|
|
210
|
+
* @param isRoot - Whether this is the top-level node (suppresses the leading connector).
|
|
211
|
+
* @param isLast - Whether this node is the last sibling (determines corner vs. tee connector).
|
|
212
|
+
* @param lines - Accumulator array; rendered lines are pushed here in order.
|
|
213
|
+
* @param options - Resolved formatting options.
|
|
214
|
+
* @param depth - Current render depth (0 = root). Used to enforce `maxDepth`.
|
|
215
|
+
* @private
|
|
216
|
+
*/
|
|
217
|
+
renderNode(node, prefix, isRoot, isLast, lines, options, depth) {
|
|
218
|
+
// Check max depth
|
|
219
|
+
if (options.maxDepth !== undefined && depth > options.maxDepth) {
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
// Check for circular references
|
|
223
|
+
if (this.seenNodes.has(node)) {
|
|
224
|
+
lines.push(`${prefix}${this.getConnector('circular', isLast, options.style)} [Circular Reference]`);
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
this.seenNodes.add(node);
|
|
228
|
+
// Build node line
|
|
229
|
+
const connector = isRoot ? '' : this.getConnector('node', isLast, options.style);
|
|
230
|
+
const icon = this.getIcon(node, options);
|
|
231
|
+
const name = node.name;
|
|
232
|
+
const metadata = this.formatMetadata(node, options);
|
|
233
|
+
const line = `${prefix}${connector}${icon}${name}${metadata}`;
|
|
234
|
+
lines.push(line);
|
|
235
|
+
// Render children
|
|
236
|
+
const children = node.children || [];
|
|
237
|
+
if (children.length > 0) {
|
|
238
|
+
const childPrefix = isRoot
|
|
239
|
+
? ''
|
|
240
|
+
: prefix + this.getChildPrefix(isLast, options.style, options.indent);
|
|
241
|
+
children.forEach((child, index) => {
|
|
242
|
+
const isLastChild = index === children.length - 1;
|
|
243
|
+
this.renderNode(child, childPrefix, false, isLastChild, lines, options, depth + 1);
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
this.seenNodes.delete(node);
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Return the branch-connector string that precedes a node's name.
|
|
250
|
+
*
|
|
251
|
+
* For `type === 'circular'`, always uses a minimal connector regardless of style
|
|
252
|
+
* (compact: two spaces; others: corner or tee). For normal nodes, the connector
|
|
253
|
+
* depends on `style` and whether this is the last sibling.
|
|
254
|
+
*
|
|
255
|
+
* @param type - `'node'` for a normal node; `'circular'` for a cycle marker.
|
|
256
|
+
* @param isLast - Whether this node is the last among its siblings.
|
|
257
|
+
* @param style - Active tree style.
|
|
258
|
+
* @returns Connector string (e.g. `'└── '`, `'+-- '`, or `''`).
|
|
259
|
+
* @private
|
|
260
|
+
*/
|
|
261
|
+
getConnector(type, isLast, style) {
|
|
262
|
+
if (type === 'circular') {
|
|
263
|
+
return style === 'compact' ? ' ' : isLast ? '└─ ' : '├─ ';
|
|
264
|
+
}
|
|
265
|
+
switch (style) {
|
|
266
|
+
case 'unicode':
|
|
267
|
+
return isLast ? '└── ' : '├── ';
|
|
268
|
+
case 'ascii':
|
|
269
|
+
return isLast ? '\\-- ' : '+-- ';
|
|
270
|
+
case 'compact':
|
|
271
|
+
return '';
|
|
272
|
+
default:
|
|
273
|
+
return '';
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Return the prefix string to prepend to all lines produced by child nodes.
|
|
278
|
+
*
|
|
279
|
+
* When the parent is not the last sibling, a vertical connector (`│` for unicode,
|
|
280
|
+
* `|` for ascii) is prepended and padded to match `indent`'s width, keeping the
|
|
281
|
+
* tree visually connected. When the parent is last, a blank indent is used instead.
|
|
282
|
+
*
|
|
283
|
+
* @param isLast - Whether the parent node is the last among its siblings.
|
|
284
|
+
* @param style - Active tree style.
|
|
285
|
+
* @param indent - Configured indentation string (its length determines padding width).
|
|
286
|
+
* @returns Prefix string to pass as `prefix` when recursing into children.
|
|
287
|
+
* @private
|
|
288
|
+
*/
|
|
289
|
+
getChildPrefix(isLast, style, indent) {
|
|
290
|
+
// When not the last child, replace the first character of indent with a vertical
|
|
291
|
+
// connector so the tree lines stay visually connected. Pad to match indent width.
|
|
292
|
+
const padding = indent.length > 1 ? ' '.repeat(indent.length - 1) : '';
|
|
293
|
+
switch (style) {
|
|
294
|
+
case 'unicode':
|
|
295
|
+
return isLast ? indent : `│${padding}`;
|
|
296
|
+
case 'ascii':
|
|
297
|
+
return isLast ? indent : `|${padding}`;
|
|
298
|
+
case 'compact':
|
|
299
|
+
return indent;
|
|
300
|
+
default:
|
|
301
|
+
return indent;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Return the icon prefix string for a node, or an empty string when icons are disabled.
|
|
306
|
+
*
|
|
307
|
+
* A node is treated as a "folder" (uses `folderIcon`) if it has at least one child;
|
|
308
|
+
* otherwise it uses `fileIcon`. The returned string includes a trailing space so
|
|
309
|
+
* the icon is separated from the node name.
|
|
310
|
+
*
|
|
311
|
+
* @param node - Node to select an icon for.
|
|
312
|
+
* @param options - Resolved formatting options.
|
|
313
|
+
* @returns Icon string with trailing space (e.g. `'📁 '`), or `''` if `icons` is false.
|
|
314
|
+
* @private
|
|
315
|
+
*/
|
|
316
|
+
getIcon(node, options) {
|
|
317
|
+
if (!options.icons) {
|
|
318
|
+
return '';
|
|
319
|
+
}
|
|
320
|
+
const hasChildren = node.children && node.children.length > 0;
|
|
321
|
+
const icon = hasChildren ? options.folderIcon : options.fileIcon;
|
|
322
|
+
return `${icon} `;
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Return the metadata suffix string for a node, or an empty string when metadata display
|
|
326
|
+
* is disabled or the node has no metadata.
|
|
327
|
+
*
|
|
328
|
+
* Entries are formatted as `key=value` pairs joined by `', '` and wrapped in
|
|
329
|
+
* parentheses: ` (size=1KB, type=text)`. All values are coerced to strings via
|
|
330
|
+
* `String()`. Returns `''` if the resulting entry list is empty.
|
|
331
|
+
*
|
|
332
|
+
* @param node - Node whose `metadata` record to format.
|
|
333
|
+
* @param options - Resolved formatting options (`showMetadata` must be `true` to emit output).
|
|
334
|
+
* @returns Metadata suffix string (e.g. `' (size=1KB)'`) or `''`.
|
|
335
|
+
* @private
|
|
336
|
+
*/
|
|
337
|
+
formatMetadata(node, options) {
|
|
338
|
+
if (!options.showMetadata || !node.metadata) {
|
|
339
|
+
return '';
|
|
340
|
+
}
|
|
341
|
+
const entries = Object.entries(node.metadata)
|
|
342
|
+
.map(([key, value]) => `${key}=${String(value)}`)
|
|
343
|
+
.join(', ');
|
|
344
|
+
return entries ? ` (${entries})` : '';
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Singleton instance of TreeFormatter.
|
|
349
|
+
* Use this instance to format hierarchical data as tree structures.
|
|
350
|
+
*
|
|
351
|
+
* @example
|
|
352
|
+
* ```typescript
|
|
353
|
+
* import { treeFormatter } from '../../utils/formatting/treeFormatter.js';
|
|
354
|
+
*
|
|
355
|
+
* // Simple directory tree
|
|
356
|
+
* const tree = {
|
|
357
|
+
* name: 'project',
|
|
358
|
+
* children: [
|
|
359
|
+
* {
|
|
360
|
+
* name: 'src',
|
|
361
|
+
* children: [
|
|
362
|
+
* { name: 'index.ts' },
|
|
363
|
+
* { name: 'types.ts' }
|
|
364
|
+
* ]
|
|
365
|
+
* },
|
|
366
|
+
* { name: 'package.json' },
|
|
367
|
+
* { name: 'README.md' }
|
|
368
|
+
* ]
|
|
369
|
+
* };
|
|
370
|
+
*
|
|
371
|
+
* // Unicode tree with icons
|
|
372
|
+
* console.log(treeFormatter.format(tree, {
|
|
373
|
+
* style: 'unicode',
|
|
374
|
+
* icons: true
|
|
375
|
+
* }));
|
|
376
|
+
* // 📁 project
|
|
377
|
+
* // ├── 📁 src
|
|
378
|
+
* // │ ├── 📄 index.ts
|
|
379
|
+
* // │ └── 📄 types.ts
|
|
380
|
+
* // ├── 📄 package.json
|
|
381
|
+
* // └── 📄 README.md
|
|
382
|
+
*
|
|
383
|
+
* // With metadata
|
|
384
|
+
* const treeWithMeta = {
|
|
385
|
+
* name: 'files',
|
|
386
|
+
* metadata: { count: 3 },
|
|
387
|
+
* children: [
|
|
388
|
+
* { name: 'file1.txt', metadata: { size: '1KB' } },
|
|
389
|
+
* { name: 'file2.txt', metadata: { size: '2KB' } }
|
|
390
|
+
* ]
|
|
391
|
+
* };
|
|
392
|
+
*
|
|
393
|
+
* console.log(treeFormatter.format(treeWithMeta, { showMetadata: true }));
|
|
394
|
+
* // files (count=3)
|
|
395
|
+
* // ├── file1.txt (size=1KB)
|
|
396
|
+
* // └── file2.txt (size=2KB)
|
|
397
|
+
* ```
|
|
398
|
+
*/
|
|
399
|
+
export const treeFormatter = new TreeFormatter();
|
|
400
|
+
//# sourceMappingURL=treeFormatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"treeFormatter.js","sourceRoot":"","sources":["../../../src/utils/formatting/treeFormatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Encodes an ArrayBuffer into a base64 string in a cross-platform manner.
|
|
3
|
+
* Prefers Node.js Buffer for performance if available, otherwise uses a
|
|
4
|
+
* chunked `btoa` fallback to avoid stack overflow on large buffers.
|
|
5
|
+
*
|
|
6
|
+
* @param buffer - The ArrayBuffer to encode.
|
|
7
|
+
* @returns The base64-encoded string.
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* const buf = new TextEncoder().encode('hello').buffer;
|
|
11
|
+
* arrayBufferToBase64(buf); // 'aGVsbG8='
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export declare function arrayBufferToBase64(buffer: ArrayBuffer): string;
|
|
15
|
+
/**
|
|
16
|
+
* Encodes a UTF-8 string to base64 in a cross-platform manner.
|
|
17
|
+
* Prefers Node.js Buffer for performance if available, otherwise uses
|
|
18
|
+
* TextEncoder + {@link arrayBufferToBase64} for Cloudflare Workers compatibility.
|
|
19
|
+
*
|
|
20
|
+
* @param str - The UTF-8 string to encode.
|
|
21
|
+
* @returns The base64-encoded string.
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* stringToBase64('hello'); // 'aGVsbG8='
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare function stringToBase64(str: string): string;
|
|
28
|
+
/**
|
|
29
|
+
* Decodes a base64-encoded string to UTF-8 in a cross-platform manner.
|
|
30
|
+
* Prefers Node.js Buffer for performance if available, otherwise uses
|
|
31
|
+
* `atob` + TextDecoder for Cloudflare Workers compatibility.
|
|
32
|
+
*
|
|
33
|
+
* @param base64 - The base64-encoded string to decode.
|
|
34
|
+
* @returns The decoded UTF-8 string.
|
|
35
|
+
* @throws {Error} If the input is not valid base64 (thrown by `Buffer` or `atob`).
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* base64ToString('aGVsbG8='); // 'hello'
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export declare function base64ToString(base64: string): string;
|
|
42
|
+
//# sourceMappingURL=encoding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../../../src/utils/internal/encoding.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAgB/D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAUlD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAarD"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Provides cross-platform encoding utilities.
|
|
3
|
+
* @module src/utils/internal/encoding
|
|
4
|
+
*/
|
|
5
|
+
import { runtimeCaps } from './runtime.js';
|
|
6
|
+
/**
|
|
7
|
+
* Encodes an ArrayBuffer into a base64 string in a cross-platform manner.
|
|
8
|
+
* Prefers Node.js Buffer for performance if available, otherwise uses a
|
|
9
|
+
* chunked `btoa` fallback to avoid stack overflow on large buffers.
|
|
10
|
+
*
|
|
11
|
+
* @param buffer - The ArrayBuffer to encode.
|
|
12
|
+
* @returns The base64-encoded string.
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const buf = new TextEncoder().encode('hello').buffer;
|
|
16
|
+
* arrayBufferToBase64(buf); // 'aGVsbG8='
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export function arrayBufferToBase64(buffer) {
|
|
20
|
+
if (runtimeCaps.hasBuffer) {
|
|
21
|
+
// Node.js environment
|
|
22
|
+
return Buffer.from(buffer).toString('base64');
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
// Browser/Worker environment — chunked to avoid stack overflow on large buffers
|
|
26
|
+
const bytes = new Uint8Array(buffer);
|
|
27
|
+
const chunks = [];
|
|
28
|
+
const CHUNK_SIZE = 0x8000; // 32KB
|
|
29
|
+
for (let i = 0; i < bytes.length; i += CHUNK_SIZE) {
|
|
30
|
+
chunks.push(String.fromCharCode.apply(null, bytes.subarray(i, i + CHUNK_SIZE)));
|
|
31
|
+
}
|
|
32
|
+
return btoa(chunks.join(''));
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Encodes a UTF-8 string to base64 in a cross-platform manner.
|
|
37
|
+
* Prefers Node.js Buffer for performance if available, otherwise uses
|
|
38
|
+
* TextEncoder + {@link arrayBufferToBase64} for Cloudflare Workers compatibility.
|
|
39
|
+
*
|
|
40
|
+
* @param str - The UTF-8 string to encode.
|
|
41
|
+
* @returns The base64-encoded string.
|
|
42
|
+
* @example
|
|
43
|
+
* ```typescript
|
|
44
|
+
* stringToBase64('hello'); // 'aGVsbG8='
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export function stringToBase64(str) {
|
|
48
|
+
if (runtimeCaps.hasBuffer) {
|
|
49
|
+
// Node.js environment - most performant
|
|
50
|
+
return Buffer.from(str, 'utf-8').toString('base64');
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
// Worker/Browser environment - use Web APIs
|
|
54
|
+
const encoder = new TextEncoder();
|
|
55
|
+
const bytes = encoder.encode(str);
|
|
56
|
+
return arrayBufferToBase64(bytes.buffer);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Decodes a base64-encoded string to UTF-8 in a cross-platform manner.
|
|
61
|
+
* Prefers Node.js Buffer for performance if available, otherwise uses
|
|
62
|
+
* `atob` + TextDecoder for Cloudflare Workers compatibility.
|
|
63
|
+
*
|
|
64
|
+
* @param base64 - The base64-encoded string to decode.
|
|
65
|
+
* @returns The decoded UTF-8 string.
|
|
66
|
+
* @throws {Error} If the input is not valid base64 (thrown by `Buffer` or `atob`).
|
|
67
|
+
* @example
|
|
68
|
+
* ```typescript
|
|
69
|
+
* base64ToString('aGVsbG8='); // 'hello'
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
export function base64ToString(base64) {
|
|
73
|
+
if (runtimeCaps.hasBuffer) {
|
|
74
|
+
// Node.js environment - most performant
|
|
75
|
+
return Buffer.from(base64, 'base64').toString('utf-8');
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
// Worker/Browser environment - use Web APIs
|
|
79
|
+
const decoded = atob(base64);
|
|
80
|
+
const bytes = new Uint8Array(decoded.length);
|
|
81
|
+
for (let i = 0; i < decoded.length; i++) {
|
|
82
|
+
bytes[i] = decoded.charCodeAt(i);
|
|
83
|
+
}
|
|
84
|
+
return new TextDecoder().decode(bytes);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=encoding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoding.js","sourceRoot":"","sources":["../../../src/utils/internal/encoding.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAmB;IACrD,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;QAC1B,sBAAsB;QACtB,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,gFAAgF;QAChF,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,OAAO;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC;YAClD,MAAM,CAAC,IAAI,CACT,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAwB,CAAC,CAC1F,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;QAC1B,wCAAwC;QACxC,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,4CAA4C;QAC5C,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,mBAAmB,CAAC,KAAK,CAAC,MAAqB,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;QAC1B,wCAAwC;QACxC,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;SAAM,CAAC;QACN,4CAA4C;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;AACH,CAAC"}
|