@crownpeak/dqm-react-component-dev-mcp 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +138 -0
- package/data/.env.example +22 -0
- package/data/.gitattributes +47 -0
- package/data/.glfrc.json +7 -0
- package/data/.husky/pre-commit +5 -0
- package/data/.nvmrc +1 -0
- package/data/CHANGELOG.md +75 -0
- package/data/CODE_OF_CONDUCT.md +129 -0
- package/data/CONTRIBUTING.md +203 -0
- package/data/DOCS-STRUCTURE.md +307 -0
- package/data/I18N.md +292 -0
- package/data/LICENSE +22 -0
- package/data/README.md +315 -0
- package/data/SECURITY.md +125 -0
- package/data/WIKI-DEPLOYMENT.md +348 -0
- package/data/docs/AI-FEATURES.md +610 -0
- package/data/docs/API-REFERENCE.md +1022 -0
- package/data/docs/AUTHENTICATION.md +301 -0
- package/data/docs/BACKEND-API.md +468 -0
- package/data/docs/DEVELOPMENT.md +375 -0
- package/data/docs/EXAMPLES.md +622 -0
- package/data/docs/MCP-SERVER.md +307 -0
- package/data/docs/MIGRATION-GUIDE.md +367 -0
- package/data/docs/NPM-PUBLISH.md +193 -0
- package/data/docs/QUICKSTART.md +206 -0
- package/data/docs/REDIS-SETUP.md +162 -0
- package/data/docs/SERVER.md +228 -0
- package/data/docs/TROUBLESHOOTING.md +657 -0
- package/data/docs/WIDGET-GUIDE.md +638 -0
- package/data/docs/WIKI-HOME.md +58 -0
- package/data/docs/WIKI-SIDEBAR.md +39 -0
- package/data/package.json +171 -0
- package/data/playwright.config.ts +64 -0
- package/data/probe/.cargo/config.toml +10 -0
- package/data/probe/.claude/commands/performance-review.md +15 -0
- package/data/probe/.clinerules +288 -0
- package/data/probe/.dockerignore +57 -0
- package/data/probe/.githooks/post-commit +11 -0
- package/data/probe/.githooks/pre-commit +99 -0
- package/data/probe/.githooks/pre-commit-vow +9 -0
- package/data/probe/.prompts/engineer.md +41 -0
- package/data/probe/.roomodes +28 -0
- package/data/probe/.windsurfrules +0 -0
- package/data/probe/BASH_TOOL_SUMMARY.md +148 -0
- package/data/probe/BENCHMARKING.md +256 -0
- package/data/probe/CLAUDE.md +226 -0
- package/data/probe/CODE_OF_CONDUCT.md +128 -0
- package/data/probe/CONTRIBUTING.md +193 -0
- package/data/probe/Cargo.toml +120 -0
- package/data/probe/Cross.toml +10 -0
- package/data/probe/DOCKER-README.md +224 -0
- package/data/probe/Dockerfile +32 -0
- package/data/probe/ENHANCED_DEBUG_TELEMETRY.md +188 -0
- package/data/probe/LICENSE +201 -0
- package/data/probe/Makefile +210 -0
- package/data/probe/README.md +824 -0
- package/data/probe/SECURITY.md +67 -0
- package/data/probe/WINDOWS-GUIDE.md +294 -0
- package/data/probe/benches/parsing_benchmarks.rs +370 -0
- package/data/probe/benches/search_benchmarks.rs +599 -0
- package/data/probe/benches/simd_benchmarks.rs +372 -0
- package/data/probe/benches/timing_benchmarks.rs +287 -0
- package/data/probe/build-windows.bat +229 -0
- package/data/probe/codex-config/config.toml +6 -0
- package/data/probe/docs/PERFORMANCE_OPTIMIZATION.md +161 -0
- package/data/probe/examples/cache_demo.rs +46 -0
- package/data/probe/examples/chat/.dockerignore +37 -0
- package/data/probe/examples/chat/ChatSessionManager.js +295 -0
- package/data/probe/examples/chat/Dockerfile +98 -0
- package/data/probe/examples/chat/LICENSE +201 -0
- package/data/probe/examples/chat/LOCAL_IMAGE_SUPPORT.md +195 -0
- package/data/probe/examples/chat/MCP_INTEGRATION.md +400 -0
- package/data/probe/examples/chat/README.md +338 -0
- package/data/probe/examples/chat/TRACING.md +226 -0
- package/data/probe/examples/chat/appTracer.js +968 -0
- package/data/probe/examples/chat/auth.js +76 -0
- package/data/probe/examples/chat/bin/probe-chat.js +13 -0
- package/data/probe/examples/chat/build.js +104 -0
- package/data/probe/examples/chat/cancelRequest.js +84 -0
- package/data/probe/examples/chat/demo-agentic-image-flow.js +88 -0
- package/data/probe/examples/chat/demo-local-images.js +128 -0
- package/data/probe/examples/chat/fileSpanExporter.js +181 -0
- package/data/probe/examples/chat/implement/README.md +228 -0
- package/data/probe/examples/chat/implement/backends/AiderBackend.js +750 -0
- package/data/probe/examples/chat/implement/backends/BaseBackend.js +276 -0
- package/data/probe/examples/chat/implement/backends/ClaudeCodeBackend.js +767 -0
- package/data/probe/examples/chat/implement/backends/MockBackend.js +237 -0
- package/data/probe/examples/chat/implement/backends/registry.js +85 -0
- package/data/probe/examples/chat/implement/core/BackendManager.js +567 -0
- package/data/probe/examples/chat/implement/core/ImplementTool.js +354 -0
- package/data/probe/examples/chat/implement/core/config.js +428 -0
- package/data/probe/examples/chat/implement/core/timeouts.js +58 -0
- package/data/probe/examples/chat/implement/core/utils.js +496 -0
- package/data/probe/examples/chat/implement/types/BackendTypes.js +126 -0
- package/data/probe/examples/chat/index.js +669 -0
- package/data/probe/examples/chat/mcpServer.js +341 -0
- package/data/probe/examples/chat/npm/LICENSE +15 -0
- package/data/probe/examples/chat/npm/README.md +168 -0
- package/data/probe/examples/chat/npm/bin/probe-chat.js +156 -0
- package/data/probe/examples/chat/npm/index.js +259 -0
- package/data/probe/examples/chat/npm/package.json +54 -0
- package/data/probe/examples/chat/package.json +102 -0
- package/data/probe/examples/chat/probeChat.js +456 -0
- package/data/probe/examples/chat/probeTool.js +491 -0
- package/data/probe/examples/chat/storage/JsonChatStorage.js +476 -0
- package/data/probe/examples/chat/telemetry.js +281 -0
- package/data/probe/examples/chat/test/integration/chatFlows.test.js +320 -0
- package/data/probe/examples/chat/test/integration/toolCalling.test.js +471 -0
- package/data/probe/examples/chat/test/mocks/mockLLMProvider.js +269 -0
- package/data/probe/examples/chat/test/test-backends.js +90 -0
- package/data/probe/examples/chat/test/testUtils.js +530 -0
- package/data/probe/examples/chat/test/unit/backendTimeout.test.js +161 -0
- package/data/probe/examples/chat/test/unit/packageFiles.test.js +120 -0
- package/data/probe/examples/chat/test/verify-tests.js +118 -0
- package/data/probe/examples/chat/test-agentic-image-loading.js +294 -0
- package/data/probe/examples/chat/test-ai-sdk-telemetry.js +204 -0
- package/data/probe/examples/chat/test-chat-tracing.js +38 -0
- package/data/probe/examples/chat/test-direct-function.js +49 -0
- package/data/probe/examples/chat/test-file-size-validation.js +103 -0
- package/data/probe/examples/chat/test-full-mcp-integration.js +258 -0
- package/data/probe/examples/chat/test-github-context.txt +12 -0
- package/data/probe/examples/chat/test-hierarchy.js +203 -0
- package/data/probe/examples/chat/test-image-spans.js +37 -0
- package/data/probe/examples/chat/test-local-image-reading.js +176 -0
- package/data/probe/examples/chat/test-mcp-integration.js +136 -0
- package/data/probe/examples/chat/test-mcp-probe-server.js +161 -0
- package/data/probe/examples/chat/test-mcp-with-ai.js +279 -0
- package/data/probe/examples/chat/test-multiple-allowed-dirs.js +111 -0
- package/data/probe/examples/chat/test-probe-mcp-server.js +110 -0
- package/data/probe/examples/chat/test-security-validation.js +145 -0
- package/data/probe/examples/chat/test-simple-tracing.js +32 -0
- package/data/probe/examples/chat/test-trace-verification.js +235 -0
- package/data/probe/examples/chat/test-tracing.js +114 -0
- package/data/probe/examples/chat/tokenCounter.js +419 -0
- package/data/probe/examples/chat/tokenUsageDisplay.js +134 -0
- package/data/probe/examples/chat/webServer.js +1103 -0
- package/data/probe/examples/reranker/Cargo.toml +33 -0
- package/data/probe/examples/reranker/DEBUG_OUTPUT_ANALYSIS.md +71 -0
- package/data/probe/examples/reranker/MODELS.md +66 -0
- package/data/probe/examples/reranker/MODEL_COMPARISON.md +60 -0
- package/data/probe/examples/reranker/MULTI_MODEL_ANALYSIS.md +176 -0
- package/data/probe/examples/reranker/PERFORMANCE_SUMMARY.md +156 -0
- package/data/probe/examples/reranker/README.md +347 -0
- package/data/probe/examples/reranker/RUST_BERT_COMPARISON.md +82 -0
- package/data/probe/examples/reranker/TOKENIZATION_GUIDE.md +120 -0
- package/data/probe/examples/reranker/check_rust_tokenizer.py +108 -0
- package/data/probe/examples/reranker/convert_to_torchscript.py +109 -0
- package/data/probe/examples/reranker/debug_scoring.py +189 -0
- package/data/probe/examples/reranker/debug_tokenization.py +154 -0
- package/data/probe/examples/reranker/download_models.sh +73 -0
- package/data/probe/examples/reranker/requirements.txt +13 -0
- package/data/probe/examples/reranker/run_comprehensive_benchmark.sh +83 -0
- package/data/probe/examples/reranker/rust_bert_test/Cargo.toml +12 -0
- package/data/probe/examples/reranker/rust_bert_test/README.md +54 -0
- package/data/probe/examples/reranker/simple_test.py +50 -0
- package/data/probe/examples/reranker/test_all_models.sh +63 -0
- package/data/probe/examples/reranker/test_bert_results.sh +44 -0
- package/data/probe/examples/reranker/test_cross_encoder.py +334 -0
- package/data/probe/examples/reranker/test_cross_encoder.sh +80 -0
- package/data/probe/examples/reranker/test_exact_comparison.py +151 -0
- package/data/probe/examples/reranker/test_parallel_performance.sh +56 -0
- package/data/probe/examples/reranker/test_scores.py +132 -0
- package/data/probe/install.ps1 +508 -0
- package/data/probe/install.sh +460 -0
- package/data/probe/npm/CLONE_METHOD_EXAMPLES.md +596 -0
- package/data/probe/npm/CONTEXT_COMPACTION.md +303 -0
- package/data/probe/npm/DELEGATE_TOOL_README.md +166 -0
- package/data/probe/npm/MAID_INTEGRATION.md +313 -0
- package/data/probe/npm/MCP_INTEGRATION_SUMMARY.md +241 -0
- package/data/probe/npm/README.md +824 -0
- package/data/probe/npm/bin/.gitignore +7 -0
- package/data/probe/npm/bin/.gitkeep +0 -0
- package/data/probe/npm/bin/README.md +12 -0
- package/data/probe/npm/bin/probe +167 -0
- package/data/probe/npm/docs/CLAUDE_CODE_INTEGRATION.md +414 -0
- package/data/probe/npm/docs/CODEX_INTEGRATION.md +502 -0
- package/data/probe/npm/docs/EDIT_CREATE_TOOLS.md +233 -0
- package/data/probe/npm/docs/RETRY_AND_FALLBACK.md +674 -0
- package/data/probe/npm/example-usage.js +335 -0
- package/data/probe/npm/examples/multi-engine-demo.js +117 -0
- package/data/probe/npm/examples/probe-agent-cli.js +113 -0
- package/data/probe/npm/examples/test-agent-edit.js +114 -0
- package/data/probe/npm/examples/test-edit-create.js +120 -0
- package/data/probe/npm/examples/test-edit-direct.js +114 -0
- package/data/probe/npm/index.d.ts +744 -0
- package/data/probe/npm/jest.config.js +52 -0
- package/data/probe/npm/package.json +117 -0
- package/data/probe/npm/scripts/build-agent.cjs +75 -0
- package/data/probe/npm/scripts/build-cjs.js +124 -0
- package/data/probe/npm/scripts/build-mcp.cjs +36 -0
- package/data/probe/npm/scripts/postinstall.js +216 -0
- package/data/probe/npm/test-codex-e2e.js +78 -0
- package/data/probe/npm/test-download-lock.js +109 -0
- package/data/probe/npm/test-grep-security.js +94 -0
- package/data/probe/npm/test-grep-simplified.js +63 -0
- package/data/probe/npm/test-grep.js +51 -0
- package/data/probe/npm/tests/README.md +96 -0
- package/data/probe/npm/tests/agent-compact-history.test.js +174 -0
- package/data/probe/npm/tests/allow-tests-default.test.js +151 -0
- package/data/probe/npm/tests/contextCompactor.test.js +498 -0
- package/data/probe/npm/tests/delegate-config.test.js +353 -0
- package/data/probe/npm/tests/delegate-integration.test.js +348 -0
- package/data/probe/npm/tests/extractor-integration.test.js +162 -0
- package/data/probe/npm/tests/extractor.test.js +317 -0
- package/data/probe/npm/tests/fixtures/sampleDiagrams.js +267 -0
- package/data/probe/npm/tests/integration/claude-code-auto-fallback.spec.js +148 -0
- package/data/probe/npm/tests/integration/claude-code-multi-step.spec.js +127 -0
- package/data/probe/npm/tests/integration/claude-code-tool-events.spec.js +163 -0
- package/data/probe/npm/tests/integration/codex-auto-fallback.spec.js +191 -0
- package/data/probe/npm/tests/integration/codex-tool-events.spec.js +147 -0
- package/data/probe/npm/tests/integration/examplesChatMcp.test.js +402 -0
- package/data/probe/npm/tests/integration/mcpDotenvSupport.test.js +174 -0
- package/data/probe/npm/tests/integration/mcpErrorHandling.test.js +566 -0
- package/data/probe/npm/tests/integration/mcpRobustness.test.js +564 -0
- package/data/probe/npm/tests/integration/mcpStdoutPurity.test.js +355 -0
- package/data/probe/npm/tests/integration/probeAgentMcp.test.js +398 -0
- package/data/probe/npm/tests/integration/retryFallback.test.js +368 -0
- package/data/probe/npm/tests/integration/schema-in-initial-message.test.js +318 -0
- package/data/probe/npm/tests/integration/schema-validation-loop-prevention.test.js +244 -0
- package/data/probe/npm/tests/integration/schemaRetryLogic.test.js +94 -0
- package/data/probe/npm/tests/integration/validationFlow.test.js +329 -0
- package/data/probe/npm/tests/manual/test-codex-basic.js +110 -0
- package/data/probe/npm/tests/mcp/mcpClientManager.test.js +614 -0
- package/data/probe/npm/tests/mcp/mcpConfig.test.js +359 -0
- package/data/probe/npm/tests/mcp/mcpXmlBridge.test.js +436 -0
- package/data/probe/npm/tests/mcp/mockMcpServer.js +510 -0
- package/data/probe/npm/tests/mcp-strict-syntax.test.js +319 -0
- package/data/probe/npm/tests/mermaidQuoteEscaping.test.js +214 -0
- package/data/probe/npm/tests/nestedQuoteFix.test.js +40 -0
- package/data/probe/npm/tests/setup.js +46 -0
- package/data/probe/npm/tests/unit/allowed-tools.test.js +513 -0
- package/data/probe/npm/tests/unit/attempt-completion-closing-tag-in-content.test.js +188 -0
- package/data/probe/npm/tests/unit/attemptCompletionJsonFix.test.js +238 -0
- package/data/probe/npm/tests/unit/attemptCompletionJsonIssue.test.js +128 -0
- package/data/probe/npm/tests/unit/backtickAutoFix.test.js +35 -0
- package/data/probe/npm/tests/unit/bash-probe-agent-integration.test.js +389 -0
- package/data/probe/npm/tests/unit/bash-simple-commands.test.js +324 -0
- package/data/probe/npm/tests/unit/bash-tool-comprehensive.test.js +371 -0
- package/data/probe/npm/tests/unit/bash-tool-integration.test.js +310 -0
- package/data/probe/npm/tests/unit/bash-tool.test.js +341 -0
- package/data/probe/npm/tests/unit/completion-prompt.test.js +379 -0
- package/data/probe/npm/tests/unit/cwd-path-options.test.js +287 -0
- package/data/probe/npm/tests/unit/delegate-limits.test.js +422 -0
- package/data/probe/npm/tests/unit/direct-content-attempt-completion.test.js +235 -0
- package/data/probe/npm/tests/unit/edit-create-tools.test.js +609 -0
- package/data/probe/npm/tests/unit/enhancedMermaidValidation.test.js +577 -0
- package/data/probe/npm/tests/unit/extract-content.test.js +83 -0
- package/data/probe/npm/tests/unit/extract-multiple-targets.test.js +89 -0
- package/data/probe/npm/tests/unit/fallbackManager.test.js +442 -0
- package/data/probe/npm/tests/unit/githubCompatibilityValidation.test.js +258 -0
- package/data/probe/npm/tests/unit/imageConfig.test.js +149 -0
- package/data/probe/npm/tests/unit/imagePathResolution.test.js +345 -0
- package/data/probe/npm/tests/unit/json-fixing-agent.test.js +238 -0
- package/data/probe/npm/tests/unit/json-validation-enhanced-errors.test.js +199 -0
- package/data/probe/npm/tests/unit/jsonValidationInfiniteLoopFix.test.js +228 -0
- package/data/probe/npm/tests/unit/maidIntegration.test.js +139 -0
- package/data/probe/npm/tests/unit/maxIterationsWarning.test.js +195 -0
- package/data/probe/npm/tests/unit/mermaidEdgeLabelFix.test.js +161 -0
- package/data/probe/npm/tests/unit/mermaidHtmlEntities.test.js +76 -0
- package/data/probe/npm/tests/unit/mermaidInfiniteLoopFix.test.js +64 -0
- package/data/probe/npm/tests/unit/mermaidValidation.test.js +723 -0
- package/data/probe/npm/tests/unit/mermaidValidationVisorExample.test.js +309 -0
- package/data/probe/npm/tests/unit/probe-agent-clone-realistic.test.js +643 -0
- package/data/probe/npm/tests/unit/probe-agent-clone.test.js +476 -0
- package/data/probe/npm/tests/unit/probe-agent-delegate.test.js +400 -0
- package/data/probe/npm/tests/unit/probe-agent-model-option.test.js +118 -0
- package/data/probe/npm/tests/unit/probeTool-security.test.js +283 -0
- package/data/probe/npm/tests/unit/readImageTool.test.js +418 -0
- package/data/probe/npm/tests/unit/retryManager.test.js +317 -0
- package/data/probe/npm/tests/unit/schema-aware-reminders.test.js +288 -0
- package/data/probe/npm/tests/unit/schemaDefinitionDetection.test.js +115 -0
- package/data/probe/npm/tests/unit/schemaUtils.test.js +1268 -0
- package/data/probe/npm/tests/unit/simpleTelemetry.test.js +282 -0
- package/data/probe/npm/tests/unit/simplified-attempt-completion.test.js +274 -0
- package/data/probe/npm/tests/unit/single-quote-json-bug.test.js +231 -0
- package/data/probe/npm/tests/unit/subgraphAutoFix.test.js +110 -0
- package/data/probe/npm/tests/unit/system-prompt.test.js +32 -0
- package/data/probe/npm/tests/unit/types-probe-agent-options.test.js +42 -0
- package/data/probe/npm/tests/unit/xmlParsing.test.js +720 -0
- package/data/probe/npm/tsconfig.json +21 -0
- package/data/probe/result1.txt +19 -0
- package/data/probe/result2.txt +26 -0
- package/data/probe/scripts/benchmark.sh +270 -0
- package/data/probe/scripts/cache_memory_analysis.rs +844 -0
- package/data/probe/scripts/claude-hook-wrapper.sh +56 -0
- package/data/probe/site/.env.example +10 -0
- package/data/probe/site/DEPLOYMENT.md +86 -0
- package/data/probe/site/README.md +183 -0
- package/data/probe/site/adding-languages.md +135 -0
- package/data/probe/site/ai-chat.md +427 -0
- package/data/probe/site/ai-integration.md +1488 -0
- package/data/probe/site/blog/agentic-flow-custom-xml-protocol.md +407 -0
- package/data/probe/site/blog/index.md +118 -0
- package/data/probe/site/blog/v0.6.0-release.md +426 -0
- package/data/probe/site/blog.md +8 -0
- package/data/probe/site/changelog.md +200 -0
- package/data/probe/site/cli-mode.md +437 -0
- package/data/probe/site/code-extraction.md +436 -0
- package/data/probe/site/contributing/README.md +9 -0
- package/data/probe/site/contributing/documentation-cross-references.md +215 -0
- package/data/probe/site/contributing/documentation-maintenance.md +275 -0
- package/data/probe/site/contributing/documentation-structure.md +75 -0
- package/data/probe/site/documentation-cross-references.md +215 -0
- package/data/probe/site/documentation-guide.md +132 -0
- package/data/probe/site/documentation-maintenance.md +275 -0
- package/data/probe/site/features.md +147 -0
- package/data/probe/site/how-it-works.md +118 -0
- package/data/probe/site/index.md +175 -0
- package/data/probe/site/index.md.bak +133 -0
- package/data/probe/site/installation.md +235 -0
- package/data/probe/site/integrations/docker.md +248 -0
- package/data/probe/site/integrations/github-actions.md +413 -0
- package/data/probe/site/language-support-overview.md +168 -0
- package/data/probe/site/mcp-integration.md +587 -0
- package/data/probe/site/mcp-server.md +304 -0
- package/data/probe/site/navigation-structure.md +76 -0
- package/data/probe/site/nodejs-sdk.md +798 -0
- package/data/probe/site/output-formats.md +625 -0
- package/data/probe/site/package.json +21 -0
- package/data/probe/site/public/_headers +28 -0
- package/data/probe/site/public/_redirects +11 -0
- package/data/probe/site/quick-start.md +289 -0
- package/data/probe/site/search-functionality.md +291 -0
- package/data/probe/site/search-reference.md +291 -0
- package/data/probe/site/supported-languages.md +215 -0
- package/data/probe/site/use-cases/README.md +8 -0
- package/data/probe/site/use-cases/advanced-cli.md +253 -0
- package/data/probe/site/use-cases/ai-code-editors.md +239 -0
- package/data/probe/site/use-cases/building-ai-tools.md +529 -0
- package/data/probe/site/use-cases/cli-ai-workflows.md +285 -0
- package/data/probe/site/use-cases/deploying-probe-web-interface.md +255 -0
- package/data/probe/site/use-cases/integrating-probe-into-ai-code-editors.md +161 -0
- package/data/probe/site/use-cases/nodejs-sdk.md +596 -0
- package/data/probe/site/use-cases/team-chat.md +350 -0
- package/data/probe/site/web-interface.md +434 -0
- package/data/probe/site/wrangler.toml +9 -0
- package/data/probe/test-api-key.sh +1 -0
- package/data/probe/test-probe-implementation/hello.js +7 -0
- package/data/probe/test_cases/demonstrate_early_termination_issues.sh +176 -0
- package/data/probe/test_cases/early_termination_issues.rs +533 -0
- package/data/probe/test_data/test_nested_struct.go +26 -0
- package/data/probe/tests/README.md +286 -0
- package/data/probe/tests/README_search_determinism_tests.md +116 -0
- package/data/probe/tests/adjacent_comment_test.rs +152 -0
- package/data/probe/tests/apostrophe_handling_tests.rs +132 -0
- package/data/probe/tests/block_filtering_with_ast_tests.rs +669 -0
- package/data/probe/tests/block_merging_tests.rs +396 -0
- package/data/probe/tests/c_outline_format_tests.rs +2179 -0
- package/data/probe/tests/cache_invalidation_issues.rs.disabled +682 -0
- package/data/probe/tests/cache_order_tests.rs +147 -0
- package/data/probe/tests/cache_query_scoping_tests.rs +221 -0
- package/data/probe/tests/cli_tests.rs +680 -0
- package/data/probe/tests/comment_context_integration_test.rs +240 -0
- package/data/probe/tests/common.rs +33 -0
- package/data/probe/tests/complex_block_merging_tests.rs +599 -0
- package/data/probe/tests/complex_query_block_filtering_tests.rs +422 -0
- package/data/probe/tests/control_flow_closing_braces_test.rs +91 -0
- package/data/probe/tests/cpp_outline_format_tests.rs +1507 -0
- package/data/probe/tests/csharp_outline_format_tests.rs +941 -0
- package/data/probe/tests/elastic_query_integration_tests.rs +922 -0
- package/data/probe/tests/extract_command_tests.rs +1848 -0
- package/data/probe/tests/extract_deduplication_tests.rs +146 -0
- package/data/probe/tests/extract_input_file_tests.rs +84 -0
- package/data/probe/tests/extract_prompt_tests.rs +102 -0
- package/data/probe/tests/filename_search_tests.rs +96 -0
- package/data/probe/tests/fixtures/user/AssemblyInfo.cs +3 -0
- package/data/probe/tests/github_extract_tests.rs +234 -0
- package/data/probe/tests/go_comment_test.rs +253 -0
- package/data/probe/tests/go_outline_format_tests.rs +2587 -0
- package/data/probe/tests/go_path_resolver_tests.rs +96 -0
- package/data/probe/tests/html_outline_format_tests.rs +637 -0
- package/data/probe/tests/integration_tests.rs +837 -0
- package/data/probe/tests/ip_whitelist_test.rs +148 -0
- package/data/probe/tests/java_outline_format_tests.rs +1611 -0
- package/data/probe/tests/javascript_extract_tests.rs +315 -0
- package/data/probe/tests/javascript_outline_format_tests.rs +1464 -0
- package/data/probe/tests/json_format_tests.rs +436 -0
- package/data/probe/tests/json_schema_validation_tests.rs +450 -0
- package/data/probe/tests/lib_usage.rs +60 -0
- package/data/probe/tests/line_comment_context_extension_test.rs +459 -0
- package/data/probe/tests/line_map_cache_tests.rs +114 -0
- package/data/probe/tests/markdown_integration_tests.rs +190 -0
- package/data/probe/tests/mocks/test_ip_whitelist.go +11 -0
- package/data/probe/tests/mocks/test_object.js +27 -0
- package/data/probe/tests/mocks/test_struct.go +50 -0
- package/data/probe/tests/multi_keyword_pattern_tests.rs +464 -0
- package/data/probe/tests/multi_language_syntax_integration_tests.rs +218 -0
- package/data/probe/tests/multiple_capture_groups_tests.rs +169 -0
- package/data/probe/tests/negative_compound_word_tests.rs +246 -0
- package/data/probe/tests/nested_symbol_extraction_tests.rs +99 -0
- package/data/probe/tests/outline_cross_file_interference_test.rs +335 -0
- package/data/probe/tests/outline_keyword_preservation_test.rs +67 -0
- package/data/probe/tests/output_format_edge_cases_tests.rs +693 -0
- package/data/probe/tests/parallel_extraction_tests.rs +178 -0
- package/data/probe/tests/parallel_search_tests.rs +355 -0
- package/data/probe/tests/path_resolver_tests.rs +698 -0
- package/data/probe/tests/php_outline_format_extended_tests.rs +928 -0
- package/data/probe/tests/php_outline_format_tests.rs +768 -0
- package/data/probe/tests/property_tests.proptest-regressions +9 -0
- package/data/probe/tests/property_tests.rs +118 -0
- package/data/probe/tests/python_outline_format_tests.rs +1538 -0
- package/data/probe/tests/query_command_json_tests.rs +438 -0
- package/data/probe/tests/query_command_tests.rs +232 -0
- package/data/probe/tests/query_command_xml_tests.rs +569 -0
- package/data/probe/tests/quoted_term_with_negative_keyword_tests.rs +216 -0
- package/data/probe/tests/required_terms_filename_tests.rs +116 -0
- package/data/probe/tests/ruby_outline_format_tests.rs +1011 -0
- package/data/probe/tests/rust_line_comment_context_test.rs +151 -0
- package/data/probe/tests/rust_outline_format_enhanced_tests.rs +725 -0
- package/data/probe/tests/rust_outline_format_tests.rs +843 -0
- package/data/probe/tests/schemas/xml_output_schema.xsd +38 -0
- package/data/probe/tests/search_determinism_tests.rs +451 -0
- package/data/probe/tests/search_hints_tests.rs +253 -0
- package/data/probe/tests/special_character_escaping_tests.rs +417 -0
- package/data/probe/tests/stemming_compound_word_filtering_tests.rs +535 -0
- package/data/probe/tests/strict_elastic_syntax_tests.rs +404 -0
- package/data/probe/tests/swift_outline_format_tests.rs +3319 -0
- package/data/probe/tests/symbols_tests.rs +166 -0
- package/data/probe/tests/test_file.rs +45 -0
- package/data/probe/tests/test_tokenize.rs +28 -0
- package/data/probe/tests/timeout_tests.rs +82 -0
- package/data/probe/tests/tokenization_tests.rs +195 -0
- package/data/probe/tests/tokenized_block_filtering_tests.rs +174 -0
- package/data/probe/tests/typescript_extract_tests.rs +214 -0
- package/data/probe/tests/typescript_outline_format_tests.rs +2188 -0
- package/data/probe/tests/xml_format_tests.rs +568 -0
- package/data/probe/tests/xml_schema_validation_tests.rs +497 -0
- package/data/scripts/postinstall.mjs +9 -0
- package/data/scripts/set-version.js +0 -0
- package/data/scripts/wiki-build.sh +111 -0
- package/data/scripts/wiki-deploy.sh +73 -0
- package/data/serve.json +12 -0
- package/data/test/demo-dynamic.html +134 -0
- package/data/test/demo-esm.html +105 -0
- package/data/test/demo-iife.html +78 -0
- package/data/tsconfig.json +7 -0
- package/data/vite.server.ts +483 -0
- package/data/vitest.config.ts +40 -0
- package/data/wiki/Home.md +58 -0
- package/data/wiki/_Sidebar.md +39 -0
- package/docs-mcp.config.json +20 -0
- package/package.json +56 -0
- package/src/config.js +111 -0
- package/src/index.js +395 -0
|
@@ -0,0 +1,638 @@
|
|
|
1
|
+
This guide covers using the DQM React Component as a standalone widget via the pre-built IIFE or ESM bundles. This allows you to use DQM without a build pipeline or React setup.
|
|
2
|
+
|
|
3
|
+
## Table of Contents
|
|
4
|
+
- [Overview](#overview)
|
|
5
|
+
- [Bundle Types](#bundle-types)
|
|
6
|
+
- [IIFE Bundle (Browser Global)](#iife-bundle-browser-global)
|
|
7
|
+
- [ESM Bundle (ES Modules)](#esm-bundle-es-modules)
|
|
8
|
+
- [Widget Loading Flow](#widget-loading-flow)
|
|
9
|
+
- [Integration Examples](#integration-examples)
|
|
10
|
+
- [CMS Integrations](#cms-integrations)
|
|
11
|
+
- [Configuration](#configuration)
|
|
12
|
+
- [Troubleshooting](#troubleshooting)
|
|
13
|
+
|
|
14
|
+
## Overview
|
|
15
|
+
|
|
16
|
+
The widget bundle provides a standalone version of the DQM sidebar that can be embedded in any web page without React dependencies. The widget:
|
|
17
|
+
|
|
18
|
+
- **Runs in Shadow DOM** - Isolated from page styles and scripts
|
|
19
|
+
- **Zero Dependencies** - All dependencies bundled (React, MUI, etc.)
|
|
20
|
+
- **Self-Contained** - No build pipeline or npm required
|
|
21
|
+
- **CMS-Friendly** - Easy integration with WordPress, Shopify, Drupal, etc.
|
|
22
|
+
|
|
23
|
+
## Bundle Types
|
|
24
|
+
|
|
25
|
+
| Format | File | Use Case | Browser Support |
|
|
26
|
+
|--------|------|----------|----------------|
|
|
27
|
+
| **IIFE** | `dqm-widget.iife.js` | Traditional `<script>` tag | All browsers (IE11+) |
|
|
28
|
+
| **ESM** | `dqm-widget.esm.js` | `<script type="module">` | Modern browsers (ES2015+) |
|
|
29
|
+
|
|
30
|
+
Both bundles are located in `/dist/` after building:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npm run build:lib
|
|
34
|
+
ls -lh dist/dqm-widget.*
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
**Sizes:**
|
|
38
|
+
- IIFE: ~500KB minified (includes all dependencies)
|
|
39
|
+
- ESM: ~480KB minified (tree-shakeable)
|
|
40
|
+
|
|
41
|
+
## IIFE Bundle (Browser Global)
|
|
42
|
+
|
|
43
|
+
### Basic Usage
|
|
44
|
+
|
|
45
|
+
```html
|
|
46
|
+
<!DOCTYPE html>
|
|
47
|
+
<html lang="en">
|
|
48
|
+
<head>
|
|
49
|
+
<meta charset="UTF-8">
|
|
50
|
+
<title>DQM Widget - IIFE Example</title>
|
|
51
|
+
</head>
|
|
52
|
+
<body>
|
|
53
|
+
<h1>My Website</h1>
|
|
54
|
+
<p>Content to be analyzed by DQM</p>
|
|
55
|
+
|
|
56
|
+
<!-- Include the IIFE bundle -->
|
|
57
|
+
<script src="https://unpkg.com/@crownpeak/dqm-react-component/dist/dqm-widget.iife.js"></script>
|
|
58
|
+
|
|
59
|
+
<script>
|
|
60
|
+
// Load DQM Widget
|
|
61
|
+
window.DQMWidget.loadDQMWidget({
|
|
62
|
+
config: {
|
|
63
|
+
websiteId: 'your-website-id',
|
|
64
|
+
apiKey: 'your-api-key',
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
</script>
|
|
68
|
+
</body>
|
|
69
|
+
</html>
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### API
|
|
73
|
+
|
|
74
|
+
The IIFE bundle exposes a global `DQMWidget` object with:
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
window.DQMWidget = {
|
|
78
|
+
/**
|
|
79
|
+
* Load and initialize the DQM widget
|
|
80
|
+
* @param options - Widget configuration
|
|
81
|
+
* @returns Cleanup function to remove widget
|
|
82
|
+
*/
|
|
83
|
+
loadDQMWidget(options: {
|
|
84
|
+
config: DQMConfig;
|
|
85
|
+
containerId?: string;
|
|
86
|
+
open?: boolean;
|
|
87
|
+
}): () => void;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Get current widget version
|
|
91
|
+
*/
|
|
92
|
+
version: string;
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Full Example with AI Features
|
|
97
|
+
|
|
98
|
+
```html
|
|
99
|
+
<!DOCTYPE html>
|
|
100
|
+
<html lang="en">
|
|
101
|
+
<head>
|
|
102
|
+
<meta charset="UTF-8">
|
|
103
|
+
<title>DQM Widget with AI Translation</title>
|
|
104
|
+
</head>
|
|
105
|
+
<body>
|
|
106
|
+
<h1>Willkommen zu meiner Website</h1>
|
|
107
|
+
<p>Diese Seite wird mit Crownpeak DQM überwacht.</p>
|
|
108
|
+
|
|
109
|
+
<script src="https://unpkg.com/@crownpeak/dqm-react-component/dist/dqm-widget.iife.js"></script>
|
|
110
|
+
|
|
111
|
+
<script>
|
|
112
|
+
// Initialize widget with AI features
|
|
113
|
+
const cleanup = window.DQMWidget.loadDQMWidget({
|
|
114
|
+
open: true, // Auto-open sidebar
|
|
115
|
+
config: {
|
|
116
|
+
websiteId: 'your-website-id',
|
|
117
|
+
apiKey: 'your-dqm-api-key',
|
|
118
|
+
|
|
119
|
+
// AI Translation (API key configured via localStorage)
|
|
120
|
+
translation: {
|
|
121
|
+
enabledByDefault: true,
|
|
122
|
+
computeBudgetMs: 15000, // 15 seconds timeout
|
|
123
|
+
},
|
|
124
|
+
|
|
125
|
+
// AI Summary (API key configured via localStorage)
|
|
126
|
+
summary: {
|
|
127
|
+
timeoutMs: 30000, // 30 seconds timeout
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
// Set OpenAI API key via localStorage
|
|
133
|
+
localStorage.setItem('dqm_openai_apiKey', 'sk-...');
|
|
134
|
+
localStorage.setItem('dqm_openai_model', 'gpt-4o-mini');
|
|
135
|
+
|
|
136
|
+
// Optional: Remove widget later
|
|
137
|
+
// cleanup();
|
|
138
|
+
</script>
|
|
139
|
+
</body>
|
|
140
|
+
</html>
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## ESM Bundle (ES Modules)
|
|
144
|
+
|
|
145
|
+
### Basic Usage
|
|
146
|
+
|
|
147
|
+
```html
|
|
148
|
+
<!DOCTYPE html>
|
|
149
|
+
<html lang="en">
|
|
150
|
+
<head>
|
|
151
|
+
<meta charset="UTF-8">
|
|
152
|
+
<title>DQM Widget - ESM Example</title>
|
|
153
|
+
</head>
|
|
154
|
+
<body>
|
|
155
|
+
<h1>My Website</h1>
|
|
156
|
+
<p>Content to be analyzed by DQM</p>
|
|
157
|
+
|
|
158
|
+
<script type="module">
|
|
159
|
+
import { loadDQMWidget } from 'https://unpkg.com/@crownpeak/dqm-react-component/dist/dqm-widget.esm.js';
|
|
160
|
+
|
|
161
|
+
loadDQMWidget({
|
|
162
|
+
config: {
|
|
163
|
+
websiteId: 'your-website-id',
|
|
164
|
+
apiKey: 'your-api-key',
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
</script>
|
|
168
|
+
</body>
|
|
169
|
+
</html>
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### With Import Maps
|
|
173
|
+
|
|
174
|
+
```html
|
|
175
|
+
<!DOCTYPE html>
|
|
176
|
+
<html lang="en">
|
|
177
|
+
<head>
|
|
178
|
+
<meta charset="UTF-8">
|
|
179
|
+
<title>DQM Widget - ESM with Import Maps</title>
|
|
180
|
+
|
|
181
|
+
<!-- Define import map for cleaner imports -->
|
|
182
|
+
<script type="importmap">
|
|
183
|
+
{
|
|
184
|
+
"imports": {
|
|
185
|
+
"dqm-widget": "https://unpkg.com/@crownpeak/dqm-react-component/dist/dqm-widget.esm.js"
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
</script>
|
|
189
|
+
</head>
|
|
190
|
+
<body>
|
|
191
|
+
<h1>My Website</h1>
|
|
192
|
+
|
|
193
|
+
<script type="module">
|
|
194
|
+
import { loadDQMWidget } from 'dqm-widget';
|
|
195
|
+
|
|
196
|
+
loadDQMWidget({
|
|
197
|
+
config: {
|
|
198
|
+
websiteId: 'your-website-id',
|
|
199
|
+
apiKey: 'your-api-key',
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
</script>
|
|
203
|
+
</body>
|
|
204
|
+
</html>
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
## Widget Loading Flow
|
|
208
|
+
|
|
209
|
+
```mermaid
|
|
210
|
+
flowchart TD
|
|
211
|
+
A[Page Load] --> B{Widget Script Loaded?}
|
|
212
|
+
B -->|Yes| C[Call loadDQMWidget]
|
|
213
|
+
B -->|No| D[Wait for DOMContentLoaded]
|
|
214
|
+
D --> C
|
|
215
|
+
|
|
216
|
+
C --> E[Create Shadow DOM Container]
|
|
217
|
+
E --> F[Mount React App in Shadow DOM]
|
|
218
|
+
F --> G[Initialize DQM Sidebar Component]
|
|
219
|
+
|
|
220
|
+
G --> H{Auto-open?}
|
|
221
|
+
H -->|Yes| I[Open Sidebar]
|
|
222
|
+
H -->|No| J[Show FAB Button]
|
|
223
|
+
|
|
224
|
+
I --> K[Extract HTML from current page]
|
|
225
|
+
K --> L[Send to DQM API]
|
|
226
|
+
L --> M[Poll for Analysis Result]
|
|
227
|
+
M --> N{Analysis Complete?}
|
|
228
|
+
N -->|Yes| O[Display Results]
|
|
229
|
+
N -->|No| M
|
|
230
|
+
|
|
231
|
+
O --> P{AI Translation Enabled?}
|
|
232
|
+
P -->|Yes| Q[Translate Checkpoints]
|
|
233
|
+
P -->|No| R[Display Raw Results]
|
|
234
|
+
|
|
235
|
+
Q --> S{AI Summary Enabled?}
|
|
236
|
+
S -->|Yes| T[Generate Summary]
|
|
237
|
+
S -->|No| R
|
|
238
|
+
|
|
239
|
+
T --> R
|
|
240
|
+
|
|
241
|
+
J --> U[User Clicks FAB]
|
|
242
|
+
U --> K
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
## Integration Examples
|
|
246
|
+
|
|
247
|
+
### WordPress (PHP Template)
|
|
248
|
+
|
|
249
|
+
```php
|
|
250
|
+
<?php
|
|
251
|
+
/**
|
|
252
|
+
* Template Name: DQM Monitored Page
|
|
253
|
+
*/
|
|
254
|
+
get_header();
|
|
255
|
+
?>
|
|
256
|
+
|
|
257
|
+
<main id="primary" class="site-main">
|
|
258
|
+
<?php
|
|
259
|
+
while ( have_posts() ) :
|
|
260
|
+
the_post();
|
|
261
|
+
the_content();
|
|
262
|
+
endwhile;
|
|
263
|
+
?>
|
|
264
|
+
</main>
|
|
265
|
+
|
|
266
|
+
<!-- DQM Widget -->
|
|
267
|
+
<script src="https://unpkg.com/@crownpeak/dqm-react-component/dist/dqm-widget.iife.js"></script>
|
|
268
|
+
<script>
|
|
269
|
+
window.DQMWidget.loadDQMWidget({
|
|
270
|
+
config: {
|
|
271
|
+
websiteId: '<?php echo esc_js( get_option('dqm_website_id') ); ?>',
|
|
272
|
+
apiKey: '<?php echo esc_js( get_option('dqm_api_key') ); ?>',
|
|
273
|
+
}
|
|
274
|
+
});
|
|
275
|
+
</script>
|
|
276
|
+
|
|
277
|
+
<?php get_footer(); ?>
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### Shopify (Liquid Template)
|
|
281
|
+
|
|
282
|
+
```liquid
|
|
283
|
+
<!-- layout/theme.liquid -->
|
|
284
|
+
<!DOCTYPE html>
|
|
285
|
+
<html lang="{{ request.locale.iso_code }}">
|
|
286
|
+
<head>
|
|
287
|
+
<meta charset="utf-8">
|
|
288
|
+
<title>{{ page_title }}</title>
|
|
289
|
+
{{ content_for_header }}
|
|
290
|
+
</head>
|
|
291
|
+
<body>
|
|
292
|
+
{{ content_for_layout }}
|
|
293
|
+
|
|
294
|
+
<!-- DQM Widget -->
|
|
295
|
+
<script src="https://unpkg.com/@crownpeak/dqm-react-component/dist/dqm-widget.iife.js"></script>
|
|
296
|
+
<script>
|
|
297
|
+
window.DQMWidget.loadDQMWidget({
|
|
298
|
+
config: {
|
|
299
|
+
websiteId: '{{ settings.dqm_website_id }}',
|
|
300
|
+
apiKey: '{{ settings.dqm_api_key }}',
|
|
301
|
+
}
|
|
302
|
+
});
|
|
303
|
+
</script>
|
|
304
|
+
</body>
|
|
305
|
+
</html>
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
### Drupal (Twig Template)
|
|
309
|
+
|
|
310
|
+
```twig
|
|
311
|
+
{# page.html.twig #}
|
|
312
|
+
<div class="layout-container">
|
|
313
|
+
<header role="banner">
|
|
314
|
+
{{ page.header }}
|
|
315
|
+
</header>
|
|
316
|
+
|
|
317
|
+
<main role="main">
|
|
318
|
+
{{ page.content }}
|
|
319
|
+
</main>
|
|
320
|
+
|
|
321
|
+
<footer role="contentinfo">
|
|
322
|
+
{{ page.footer }}
|
|
323
|
+
</footer>
|
|
324
|
+
</div>
|
|
325
|
+
|
|
326
|
+
{# DQM Widget #}
|
|
327
|
+
<script src="https://unpkg.com/@crownpeak/dqm-react-component/dist/dqm-widget.iife.js"></script>
|
|
328
|
+
<script>
|
|
329
|
+
window.DQMWidget.loadDQMWidget({
|
|
330
|
+
config: {
|
|
331
|
+
websiteId: '{{ drupal_variable('dqm_website_id') }}',
|
|
332
|
+
apiKey: '{{ drupal_variable('dqm_api_key') }}',
|
|
333
|
+
}
|
|
334
|
+
});
|
|
335
|
+
</script>
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
### Webflow (Custom Code)
|
|
339
|
+
|
|
340
|
+
```html
|
|
341
|
+
<!-- Embed in Page Settings > Custom Code > Before </body> tag -->
|
|
342
|
+
<script src="https://unpkg.com/@crownpeak/dqm-react-component/dist/dqm-widget.iife.js"></script>
|
|
343
|
+
<script>
|
|
344
|
+
window.DQMWidget.loadDQMWidget({
|
|
345
|
+
config: {
|
|
346
|
+
websiteId: 'your-website-id',
|
|
347
|
+
apiKey: 'your-api-key',
|
|
348
|
+
}
|
|
349
|
+
});
|
|
350
|
+
</script>
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
### Google Tag Manager
|
|
354
|
+
|
|
355
|
+
```javascript
|
|
356
|
+
// Create new Custom HTML tag
|
|
357
|
+
<script src="https://unpkg.com/@crownpeak/dqm-react-component/dist/dqm-widget.iife.js"></script>
|
|
358
|
+
<script>
|
|
359
|
+
window.DQMWidget.loadDQMWidget({
|
|
360
|
+
config: {
|
|
361
|
+
websiteId: '{{DQM Website ID}}', // GTM Variable
|
|
362
|
+
apiKey: '{{DQM API Key}}', // GTM Variable
|
|
363
|
+
}
|
|
364
|
+
});
|
|
365
|
+
</script>
|
|
366
|
+
|
|
367
|
+
// Trigger: All Pages (or specific pages)
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
## CMS Integrations
|
|
371
|
+
|
|
372
|
+
### WordPress Plugin Structure
|
|
373
|
+
|
|
374
|
+
```
|
|
375
|
+
dqm-widget-wordpress/
|
|
376
|
+
├── dqm-widget.php # Main plugin file
|
|
377
|
+
├── admin/
|
|
378
|
+
│ └── settings.php # Admin settings page
|
|
379
|
+
└── public/
|
|
380
|
+
└── widget-loader.php # Frontend widget loader
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
**dqm-widget.php:**
|
|
384
|
+
```php
|
|
385
|
+
<?php
|
|
386
|
+
/**
|
|
387
|
+
* Plugin Name: Crownpeak DQM Widget
|
|
388
|
+
* Description: Adds Crownpeak Digital Quality Management to your WordPress site
|
|
389
|
+
* Version: 1.2.0
|
|
390
|
+
* Author: Crownpeak
|
|
391
|
+
*/
|
|
392
|
+
|
|
393
|
+
// Admin settings
|
|
394
|
+
require_once plugin_dir_path(__FILE__) . 'admin/settings.php';
|
|
395
|
+
|
|
396
|
+
// Frontend loader
|
|
397
|
+
require_once plugin_dir_path(__FILE__) . 'public/widget-loader.php';
|
|
398
|
+
|
|
399
|
+
function dqm_enqueue_widget() {
|
|
400
|
+
if (!is_admin()) {
|
|
401
|
+
wp_enqueue_script(
|
|
402
|
+
'dqm-widget',
|
|
403
|
+
'https://unpkg.com/@crownpeak/dqm-react-component/dist/dqm-widget.iife.js',
|
|
404
|
+
array(),
|
|
405
|
+
'1.1.0',
|
|
406
|
+
true
|
|
407
|
+
);
|
|
408
|
+
|
|
409
|
+
wp_add_inline_script('dqm-widget', sprintf(
|
|
410
|
+
'window.DQMWidget.loadDQMWidget({config:{websiteId:"%s",apiKey:"%s"}});',
|
|
411
|
+
esc_js(get_option('dqm_website_id')),
|
|
412
|
+
esc_js(get_option('dqm_api_key'))
|
|
413
|
+
));
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
add_action('wp_enqueue_scripts', 'dqm_enqueue_widget');
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
### Shopify App Structure
|
|
420
|
+
|
|
421
|
+
```
|
|
422
|
+
dqm-widget-shopify/
|
|
423
|
+
├── app.js # Node.js server
|
|
424
|
+
├── package.json
|
|
425
|
+
├── extensions/
|
|
426
|
+
│ └── theme-app-extension/
|
|
427
|
+
│ ├── blocks/
|
|
428
|
+
│ │ └── dqm-widget.liquid
|
|
429
|
+
│ └── locales/
|
|
430
|
+
│ └── en.default.json
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
**blocks/dqm-widget.liquid:**
|
|
434
|
+
```liquid
|
|
435
|
+
{% schema %}
|
|
436
|
+
{
|
|
437
|
+
"name": "DQM Widget",
|
|
438
|
+
"target": "section",
|
|
439
|
+
"settings": [
|
|
440
|
+
{
|
|
441
|
+
"type": "text",
|
|
442
|
+
"id": "website_id",
|
|
443
|
+
"label": "DQM Website ID"
|
|
444
|
+
},
|
|
445
|
+
{
|
|
446
|
+
"type": "text",
|
|
447
|
+
"id": "api_key",
|
|
448
|
+
"label": "DQM API Key"
|
|
449
|
+
}
|
|
450
|
+
]
|
|
451
|
+
}
|
|
452
|
+
{% endschema %}
|
|
453
|
+
|
|
454
|
+
<script src="https://unpkg.com/@crownpeak/dqm-react-component/dist/dqm-widget.iife.js"></script>
|
|
455
|
+
<script>
|
|
456
|
+
window.DQMWidget.loadDQMWidget({
|
|
457
|
+
config: {
|
|
458
|
+
websiteId: '{{ block.settings.website_id }}',
|
|
459
|
+
apiKey: '{{ block.settings.api_key }}',
|
|
460
|
+
}
|
|
461
|
+
});
|
|
462
|
+
</script>
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
## Configuration
|
|
466
|
+
|
|
467
|
+
### Full Configuration Object
|
|
468
|
+
|
|
469
|
+
```typescript
|
|
470
|
+
interface DQMConfig {
|
|
471
|
+
// Authentication (required)
|
|
472
|
+
websiteId: string;
|
|
473
|
+
apiKey: string;
|
|
474
|
+
|
|
475
|
+
// Overlay Detection (optional)
|
|
476
|
+
overlayConfig?: {
|
|
477
|
+
selector?: string;
|
|
478
|
+
validateIframe?: boolean;
|
|
479
|
+
pollMs?: number;
|
|
480
|
+
manualOffset?: {
|
|
481
|
+
position: 'top' | 'bottom' | 'left' | 'right';
|
|
482
|
+
pixels: number;
|
|
483
|
+
};
|
|
484
|
+
};
|
|
485
|
+
|
|
486
|
+
// AI Translation (optional)
|
|
487
|
+
// Note: OpenAI API key is configured via localStorage (dqm_openai_apiKey)
|
|
488
|
+
translation?: {
|
|
489
|
+
enabledByDefault?: boolean; // Enable translation by default
|
|
490
|
+
computeBudgetMs?: number; // Timeout in ms (default: 15000 for fast mode)
|
|
491
|
+
};
|
|
492
|
+
|
|
493
|
+
// AI Summary (optional)
|
|
494
|
+
// Note: OpenAI API key is configured via localStorage (dqm_openai_apiKey)
|
|
495
|
+
summary?: {
|
|
496
|
+
timeoutMs?: number; // Timeout in ms (default: 30000)
|
|
497
|
+
};
|
|
498
|
+
}
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
### Environment-Specific Configuration
|
|
502
|
+
|
|
503
|
+
```javascript
|
|
504
|
+
// Configure OpenAI API key via localStorage
|
|
505
|
+
localStorage.setItem('dqm_openai_apiKey', 'sk-...');
|
|
506
|
+
localStorage.setItem('dqm_openai_model', 'gpt-4o-mini');
|
|
507
|
+
localStorage.setItem('dqm_target_language', 'de');
|
|
508
|
+
|
|
509
|
+
// Development
|
|
510
|
+
window.DQMWidget.loadDQMWidget({
|
|
511
|
+
config: {
|
|
512
|
+
websiteId: 'dev-website-id',
|
|
513
|
+
apiKey: 'dev-api-key',
|
|
514
|
+
translation: {
|
|
515
|
+
enabledByDefault: true,
|
|
516
|
+
computeBudgetMs: 30000, // 30s for full mode
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
});
|
|
520
|
+
|
|
521
|
+
// Production
|
|
522
|
+
window.DQMWidget.loadDQMWidget({
|
|
523
|
+
config: {
|
|
524
|
+
websiteId: 'prod-website-id',
|
|
525
|
+
apiKey: 'prod-api-key',
|
|
526
|
+
translation: {
|
|
527
|
+
enabledByDefault: true,
|
|
528
|
+
computeBudgetMs: 15000, // 15s for fast mode
|
|
529
|
+
},
|
|
530
|
+
summary: {
|
|
531
|
+
timeoutMs: 30000,
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
});
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
## Troubleshooting
|
|
538
|
+
|
|
539
|
+
### Widget Not Loading
|
|
540
|
+
|
|
541
|
+
**Symptom:** Nothing appears on the page after script inclusion.
|
|
542
|
+
|
|
543
|
+
**Solutions:**
|
|
544
|
+
1. Check browser console for errors
|
|
545
|
+
2. Verify script URL is correct and accessible
|
|
546
|
+
3. Ensure script is loaded after `<body>` tag
|
|
547
|
+
4. Check if Content Security Policy (CSP) blocks script
|
|
548
|
+
|
|
549
|
+
```html
|
|
550
|
+
<!-- Add to <head> if CSP is blocking -->
|
|
551
|
+
<meta http-equiv="Content-Security-Policy" content="script-src 'self' https://unpkg.com;">
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
### Shadow DOM Conflicts
|
|
555
|
+
|
|
556
|
+
**Symptom:** Widget styles broken or invisible.
|
|
557
|
+
|
|
558
|
+
**Solutions:**
|
|
559
|
+
1. Ensure no global CSS resets affect Shadow DOM
|
|
560
|
+
2. Check if page uses `::slotted()` selectors that interfere
|
|
561
|
+
3. Verify no JavaScript tries to access widget internals
|
|
562
|
+
|
|
563
|
+
```javascript
|
|
564
|
+
// DON'T: Access Shadow DOM internals
|
|
565
|
+
const widgetHost = document.querySelector('#dqm-widget-host');
|
|
566
|
+
const shadowRoot = widgetHost.shadowRoot; // May be null or closed
|
|
567
|
+
|
|
568
|
+
// DO: Use widget API only
|
|
569
|
+
window.DQMWidget.loadDQMWidget({ /* config */ });
|
|
570
|
+
```
|
|
571
|
+
|
|
572
|
+
### CORS Errors
|
|
573
|
+
|
|
574
|
+
**Symptom:** `Access-Control-Allow-Origin` errors in console.
|
|
575
|
+
|
|
576
|
+
**Solutions:**
|
|
577
|
+
1. Use CDN URL (unpkg.com) instead of local file
|
|
578
|
+
2. Host bundle on same domain as page
|
|
579
|
+
3. Configure server CORS headers if self-hosting
|
|
580
|
+
|
|
581
|
+
```nginx
|
|
582
|
+
# nginx configuration for self-hosting
|
|
583
|
+
location /dqm-widget.iife.js {
|
|
584
|
+
add_header Access-Control-Allow-Origin *;
|
|
585
|
+
add_header Access-Control-Allow-Methods "GET, OPTIONS";
|
|
586
|
+
}
|
|
587
|
+
```
|
|
588
|
+
|
|
589
|
+
### Performance Issues
|
|
590
|
+
|
|
591
|
+
**Symptom:** Widget loads slowly or blocks page rendering.
|
|
592
|
+
|
|
593
|
+
**Solutions:**
|
|
594
|
+
1. Load script with `defer` or `async` attribute
|
|
595
|
+
2. Use ESM bundle for better tree-shaking
|
|
596
|
+
3. Consider lazy-loading widget on user interaction
|
|
597
|
+
|
|
598
|
+
```html
|
|
599
|
+
<!-- Defer script loading -->
|
|
600
|
+
<script defer src="https://unpkg.com/@crownpeak/dqm-react-component/dist/dqm-widget.iife.js"></script>
|
|
601
|
+
|
|
602
|
+
<!-- Or load on user click -->
|
|
603
|
+
<button id="load-dqm">Analyze Page Quality</button>
|
|
604
|
+
<script>
|
|
605
|
+
document.getElementById('load-dqm').addEventListener('click', () => {
|
|
606
|
+
const script = document.createElement('script');
|
|
607
|
+
script.src = 'https://unpkg.com/@crownpeak/dqm-react-component/dist/dqm-widget.iife.js';
|
|
608
|
+
script.onload = () => {
|
|
609
|
+
window.DQMWidget.loadDQMWidget({ config: { /* ... */ } });
|
|
610
|
+
};
|
|
611
|
+
document.body.appendChild(script);
|
|
612
|
+
});
|
|
613
|
+
</script>
|
|
614
|
+
```
|
|
615
|
+
|
|
616
|
+
### AI Features Not Working
|
|
617
|
+
|
|
618
|
+
**Symptom:** Translation or summary not appearing.
|
|
619
|
+
|
|
620
|
+
**Solutions:**
|
|
621
|
+
1. Check OpenAI API key is valid
|
|
622
|
+
2. Check browser console for AI-related errors
|
|
623
|
+
3. Ensure localStorage keys are set correctly
|
|
624
|
+
|
|
625
|
+
```javascript
|
|
626
|
+
// Debug AI configuration
|
|
627
|
+
console.log('Translation Enabled:', localStorage.getItem('dqm_translate_results_enabled'));
|
|
628
|
+
console.log('OpenAI API Key Set:', !!localStorage.getItem('dqm_openai_apiKey'));
|
|
629
|
+
console.log('Target Language:', localStorage.getItem('dqm_target_language'));
|
|
630
|
+
console.log('Summary Enabled:', localStorage.getItem('dqm_ai_summary_enabled'));
|
|
631
|
+
```
|
|
632
|
+
|
|
633
|
+
## See Also
|
|
634
|
+
|
|
635
|
+
- **[Examples](./EXAMPLES.md)** - React component examples
|
|
636
|
+
- **[AI Features Guide](./AI-FEATURES.md)** - AI translation and summary documentation
|
|
637
|
+
- **[Troubleshooting](./TROUBLESHOOTING.md)** - Common issues and solutions
|
|
638
|
+
- **[API Reference](./API-REFERENCE.md)** - Full TypeScript API documentation
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Crownpeak DQM React Component - Documentation Wiki
|
|
2
|
+
|
|
3
|
+
Welcome to the complete documentation for `@crownpeak/dqm-react-component`.
|
|
4
|
+
|
|
5
|
+
## Quick Links
|
|
6
|
+
|
|
7
|
+
- 📚 **[Quick Start Guide](Quick-Start-Guide)** - Get started in 5 minutes
|
|
8
|
+
- 🤖 **[AI Features Guide](AI-Features-Guide)** - Translation & Summary with OpenAI
|
|
9
|
+
- 📖 **[Example Usage](Example-Usage)** - Integration examples
|
|
10
|
+
- 🔧 **[API Reference](API-Reference)** - Full TypeScript API
|
|
11
|
+
|
|
12
|
+
## What is DQM?
|
|
13
|
+
|
|
14
|
+
Crownpeak Digital Quality Management (DQM) provides automated quality analysis for web pages, including accessibility violations, SEO issues, mobile responsiveness, design consistency, and performance metrics.
|
|
15
|
+
|
|
16
|
+
## Installation
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install @crownpeak/dqm-react-component
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Basic Example
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
import React, { useState } from 'react';
|
|
26
|
+
import { DQMSidebar } from '@crownpeak/dqm-react-component';
|
|
27
|
+
|
|
28
|
+
function App() {
|
|
29
|
+
const [open, setOpen] = useState(false);
|
|
30
|
+
|
|
31
|
+
return (
|
|
32
|
+
<DQMSidebar
|
|
33
|
+
open={open}
|
|
34
|
+
onClose={() => setOpen(false)}
|
|
35
|
+
onOpen={() => setOpen(true)}
|
|
36
|
+
config={{
|
|
37
|
+
websiteId: 'your-website-id',
|
|
38
|
+
apiKey: 'your-api-key',
|
|
39
|
+
}}
|
|
40
|
+
/>
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
See **[Quick Start Guide](Quick-Start-Guide)** for detailed setup.
|
|
46
|
+
|
|
47
|
+
## Documentation Sections
|
|
48
|
+
|
|
49
|
+
Use the sidebar (→) to navigate, or explore:
|
|
50
|
+
|
|
51
|
+
- **[Quick Start Guide](Quick-Start-Guide)** - Installation and setup
|
|
52
|
+
- **[Example Usage](Example-Usage)** - React, Next.js, TypeScript examples
|
|
53
|
+
- **[Authentication Configuration](Authentication-Configuration)** - API keys, backend proxy
|
|
54
|
+
- **[AI Features Guide](AI-Features-Guide)** - Translation & summary generation
|
|
55
|
+
- **[Widget Bundle Guide](Widget-Bundle-Guide)** - Standalone IIFE/ESM bundles
|
|
56
|
+
- **[API Reference](API-Reference)** - Complete TypeScript API
|
|
57
|
+
- **[Troubleshooting Guide](Troubleshooting-Guide)** - Common issues and solutions
|
|
58
|
+
- **[Development Guide](Development-Guide)** - Contributing guide
|