@ohos-cpf/3rdloop 0.0.2 → 0.0.3
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 +244 -244
- package/bin/3rdloop.mjs +46 -46
- package/lib/cli.js +781 -781
- package/lib/config-cmd.js +451 -451
- package/lib/config.js +318 -318
- package/lib/doctor.js +113 -113
- package/lib/exit-codes.js +30 -30
- package/lib/opencode.js +155 -155
- package/lib/orch.js +426 -426
- package/lib/queries.js +263 -263
- package/lib/step.js +325 -325
- package/lib/ui.js +222 -222
- package/lib/update.js +279 -279
- package/lib/workflow.js +308 -308
- package/lib/workflows.js +131 -131
- package/package.json +50 -50
- package/vendor/Server/Agent/SkillSelector/README.md +343 -343
- package/vendor/Server/Agent/SkillSelector/core/Agent.js +207 -207
- package/vendor/Server/Agent/SkillSelector/index.js +14 -14
- package/vendor/Server/Agent/SkillSelector/llm/llmClient.js +313 -313
- package/vendor/Server/Agent/SkillSelector/llm/prompts.js +161 -161
- package/vendor/Server/Agent/SkillSelector/llm/reactSteps.js +144 -144
- package/vendor/Server/Agent/SkillSelector/matcher/fuzzyMatcher.js +433 -433
- package/vendor/Server/Agent/SkillSelector/scanner/skillScanner.js +382 -382
- package/vendor/Server/Agent/SkillSelector/utils/actionWords.js +59 -59
- package/vendor/Server/Brain/AnalysisStrategies.js +422 -422
- package/vendor/Server/Brain/Brain.js +686 -686
- package/vendor/Server/Brain/DecompositionStrategies.js +621 -621
- package/vendor/Server/Brain/PlanPersistence.js +196 -196
- package/vendor/Server/Brain/SkillExecutor.js +251 -251
- package/vendor/Server/Brain/index.js +11 -11
- package/vendor/Server/CLI/cli.js +275 -275
- package/vendor/Server/CLI/deveco-code/index.js +71 -71
- package/vendor/Server/CLI/deveco-code.js +5 -5
- package/vendor/Server/CLI/opencode/index.js +817 -818
- package/vendor/Server/CLI/opencode.js +5 -5
- package/vendor/Server/DbUse/MessageArchive.js +61 -61
- package/vendor/Server/DbUse/StorageManager.js +107 -107
- package/vendor/Server/DbUse/adapters/BaseAdapter.js +94 -94
- package/vendor/Server/DbUse/adapters/FileAdapter.js +138 -138
- package/vendor/Server/DbUse/adapters/JsonAdapter.js +138 -138
- package/vendor/Server/DbUse/adapters/JsonlAdapter.js +114 -114
- package/vendor/Server/DbUse/adapters/SqliteAdapter.js +157 -157
- package/vendor/Server/DbUse/index.js +160 -160
- package/vendor/Server/DbUse/stores/SessionStore.js +279 -279
- package/vendor/Server/DbUse/stores/TaskExecutionStore.js +133 -133
- package/vendor/Server/DbUse/stores/TaskRegistryStore.js +262 -262
- package/vendor/Server/DbUse/stores/TaskStepStore.js +279 -279
- package/vendor/Server/FlexRunner/FlexRunner.js +1759 -1759
- package/vendor/Server/FlexRunner/index.js +12 -12
- package/vendor/Server/Knowledge/KnowledgeImporter.js +523 -523
- package/vendor/Server/Knowledge/KnowledgeManager.js +341 -341
- package/vendor/Server/Knowledge/index.js +33 -33
- package/vendor/Server/LoopEngine/LoopEngine.js +1133 -1133
- package/vendor/Server/LoopEngine/index.js +11 -11
- package/vendor/Server/Orchestrator/Orchestrator.js +0 -3
- package/vendor/Server/Orchestrator/StepNode.js +312 -312
- package/vendor/Server/Orchestrator/index.js +13 -13
- package/vendor/Server/Routes/controllers/BrainController.js +241 -241
- package/vendor/Server/Routes/controllers/FlexRunnerController.js +1125 -1125
- package/vendor/Server/Routes/controllers/HealthController.js +44 -44
- package/vendor/Server/Routes/controllers/KnowledgeImportController.js +355 -355
- package/vendor/Server/Routes/controllers/LoopEngineController.js +788 -788
- package/vendor/Server/Routes/controllers/StatsController.js +57 -57
- package/vendor/Server/Routes/controllers/StreamController.js +67 -67
- package/vendor/Server/Routes/library/logger.js +179 -179
- package/vendor/Server/Routes/library/zipArchive.js +172 -172
- package/vendor/Server/Routes/router/Router.js +204 -204
- package/vendor/Server/Routes/routes/brain.js +47 -47
- package/vendor/Server/Routes/routes/flexrunner.js +72 -72
- package/vendor/Server/Routes/routes/health.js +28 -28
- package/vendor/Server/Routes/routes/index.js +57 -57
- package/vendor/Server/Routes/routes/knowledge.js +55 -55
- package/vendor/Server/Routes/routes/loopengine.js +58 -58
- package/vendor/Server/Routes/routes/orchestrator.js +61 -61
- package/vendor/Server/Routes/routes/registry.js +97 -97
- package/vendor/Server/Routes/routes/stats.js +23 -23
- package/vendor/Server/Routes/routes/stream.js +30 -30
- package/vendor/Server/Routes/server.js +203 -203
- package/vendor/Server/Routes/sse/SseHub.js +308 -308
- package/vendor/Server/Skills/acceptance-check/SKILL.md +191 -191
- package/vendor/Server/Skills/acceptance-check/references/PHASE1_ARTIFACT_COLLECTION.md +52 -52
- package/vendor/Server/Skills/acceptance-check/references/PHASE2_CRITERIA_EVALUATION.md +77 -77
- package/vendor/Server/Skills/acceptance-check/references/PHASE2_EVIDENCE_VERIFICATION.md +70 -70
- package/vendor/Server/Skills/arkts-code-check/SKILL.md +320 -320
- package/vendor/Server/Skills/arkts-code-check/references/CODE_CHECK_GUIDE.md +210 -210
- package/vendor/Server/Skills/arkts-code-check/references/FILE_TYPE_GUIDE.md +28 -28
- package/vendor/Server/Skills/arkts-code-check/references/PHASE1_INFO_COLLECTION.md +233 -233
- package/vendor/Server/Skills/arkts-code-check/references/REPORT_TEMPLATE.md +219 -219
- package/vendor/Server/Skills/arkts-library-compile-validate/SKILL.md +328 -328
- package/vendor/Server/Skills/arkts-library-compile-validate/scripts/build.ps1 +93 -93
- package/vendor/Server/Skills/arkts-library-compile-validate/scripts/code-linter.cjs +432 -432
- package/vendor/Server/Skills/arkts-library-compile-validate/scripts/migrate.cjs +851 -851
- package/vendor/Server/Skills/arkts-library-compile-validate/scripts/ohpm-switch.cjs +788 -788
- package/vendor/Server/Skills/arkts-library-demo-code/SKILL.md +291 -291
- package/vendor/Server/Skills/arkts-library-demo-code/references/API_SIGNATURE_CHECKS.md +68 -68
- package/vendor/Server/Skills/arkts-library-demo-code/references/BUILD_VALIDATION.md +184 -184
- package/vendor/Server/Skills/arkts-library-demo-code/references/CODE_STANDARDS.md +337 -337
- package/vendor/Server/Skills/arkts-library-demo-code/references/EXAMPLES.md +400 -400
- package/vendor/Server/Skills/arkts-library-demo-code/references/SYSTEM_API_LOOKUP.md +98 -98
- package/vendor/Server/Skills/arkts-library-demo-code/references/TEMPLATE.md +544 -544
- package/vendor/Server/Skills/arkts-library-demo-code/scripts/build.ps1 +93 -93
- package/vendor/Server/Skills/arkts-library-demo-code/scripts/code-linter.cjs +432 -432
- package/vendor/Server/Skills/arkts-library-demo-code/scripts/migrate.cjs +851 -851
- package/vendor/Server/Skills/arkts-library-demo-code/scripts/ohpm-switch.cjs +788 -788
- package/vendor/Server/Skills/arkts-library-demo-coverage/SKILL.md +174 -174
- package/vendor/Server/Skills/arkts-library-demo-scenario/SKILL.md +321 -321
- package/vendor/Server/Skills/arkts-library-demo-scenario/references/EXAMPLES.md +100 -100
- package/vendor/Server/Skills/arkts-library-demo-scenario/references/TEMPLATE.md +185 -185
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/SKILL.md +233 -233
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/assets/REPORT_TEMPLATE.md +102 -102
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/CHECK_DIMENSIONS.md +89 -89
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/COMPLIANCE_CHECKLIST.md +62 -62
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/KB_QUERY_GUIDE.md +107 -107
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/MCP_TOOL_DISCOVERY.md +124 -124
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/REPORT_TEMPLATE.md +90 -90
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/SCORING_FORMULA.md +57 -57
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/scripts/validate-skill.cjs +259 -259
- package/vendor/Server/Skills/arkts-library-interface-spec/SKILL.md +97 -97
- package/vendor/Server/Skills/arkts-library-memory-leak-check/SKILL.md +391 -391
- package/vendor/Server/Skills/arkts-library-source-clone/SKILL.md +113 -113
- package/vendor/Server/Skills/arkts-library-stability-check/SKILL.md +312 -312
- package/vendor/Server/Skills/arkts-library-stability-check/assets/REPORT_TEMPLATE.md +154 -154
- package/vendor/Server/Skills/arkts-library-stability-check/references/CHECKLIST.md +165 -165
- package/vendor/Server/Skills/arkts-library-stability-check/references/CODE_EXAMPLES.md +308 -308
- package/vendor/Server/Skills/arkts-library-stability-check/references/SCORING_RULES.md +90 -90
- package/vendor/Server/Skills/arkts-library-stability-check/scripts/validate-skill.cjs +282 -282
- package/vendor/Server/Skills/arkts-library-test-coverage-check/SKILL.md +360 -360
- package/vendor/Server/Skills/arkts-library-test-coverage-check/assets/REPORT_TEMPLATE.md +145 -145
- package/vendor/Server/Skills/arkts-library-test-coverage-check/references/CHECKLIST.md +252 -252
- package/vendor/Server/Skills/arkts-library-test-coverage-check/references/MCP_TOOL_USAGE.md +114 -114
- package/vendor/Server/Skills/arkts-library-test-coverage-check/scripts/validate-skill.cjs +262 -262
- package/vendor/Server/Skills/arkts-library-xts-code/SKILL.md +455 -455
- package/vendor/Server/Skills/arkts-library-xts-code/assets/report-template.md +60 -60
- package/vendor/Server/Skills/arkts-library-xts-code/references/ACCESS_MODIFIER_PRECHECK.md +76 -76
- package/vendor/Server/Skills/arkts-library-xts-code/references/BUILD_VERIFICATION.md +200 -200
- package/vendor/Server/Skills/arkts-library-xts-code/references/CODE_STANDARDS.md +518 -518
- package/vendor/Server/Skills/arkts-library-xts-code/references/SUBAGENT_PROMPT_TEMPLATE.md +276 -276
- package/vendor/Server/Skills/arkts-library-xts-code/references/SYSTEM_API_LOOKUP.md +92 -92
- package/vendor/Server/Skills/arkts-library-xts-code/references/XTS_TEMPLATE.md +767 -767
- package/vendor/Server/Skills/arkts-library-xts-code/scripts/build.ps1 +93 -93
- package/vendor/Server/Skills/arkts-library-xts-code/scripts/code-linter.cjs +432 -432
- package/vendor/Server/Skills/arkts-library-xts-code/scripts/migrate.cjs +851 -851
- package/vendor/Server/Skills/arkts-library-xts-code/scripts/ohpm-switch.cjs +788 -788
- package/vendor/Server/Skills/arkts-library-xts-code/scripts/precheck-access-modifiers.cjs +221 -221
- package/vendor/Server/Skills/arkts-library-xts-code-fix/SKILL.md +228 -228
- package/vendor/Server/Skills/arkts-library-xts-coverage/SKILL.md +97 -97
- package/vendor/Server/Skills/arkts-library-xts-doc/SKILL.md +194 -194
- package/vendor/Server/Skills/arkts-library-xts-doc/references/EXAMPLES.md +575 -575
- package/vendor/Server/Skills/arkts-library-xts-doc/references/TEMPLATE.md +574 -574
- package/vendor/Server/Skills/arkts-library-xts-doc/references/TESTABILITY_GUIDE.md +182 -182
- package/vendor/Server/Skills/arkts-library-xts-execution/SKILL.md +490 -490
- package/vendor/Server/Skills/arkts-library-xts-execution/references/error-fixing-examples.md +217 -217
- package/vendor/Server/Skills/arkts-library-xts-execution/scripts/build.ps1 +93 -93
- package/vendor/Server/Skills/arkts-library-xts-execution/scripts/code-linter.cjs +432 -432
- package/vendor/Server/Skills/arkts-library-xts-execution/scripts/migrate.cjs +851 -851
- package/vendor/Server/Skills/arkts-library-xts-execution/scripts/ohpm-switch.cjs +788 -788
- package/vendor/Server/Skills/flutter-code-check/SKILL.md +299 -299
- package/vendor/Server/Skills/flutter-code-check/assets/OUTPUT_TEMPLATE.md +311 -311
- package/vendor/Server/Skills/flutter-code-check/references/CHECKLIST.md +190 -190
- package/vendor/Server/Skills/flutter-code-check/references/PLATFORMS.md +133 -133
- package/vendor/Server/Skills/flutter-code-check/scripts/validate-skill.cjs +259 -259
- package/vendor/Server/Skills/flutter-interface/README.md +75 -75
- package/vendor/Server/Skills/flutter-interface/SKILL.md +291 -291
- package/vendor/Server/Skills/flutter-interface/references/EXAMPLES.md +336 -336
- package/vendor/Server/Skills/flutter-interface/references/GIT_CLONE_GUIDE.md +190 -190
- package/vendor/Server/Skills/flutter-interface/references/SCRIPT_REFERENCE.md +258 -258
- package/vendor/Server/Skills/flutter-interface/references/TEMPLATE.md +254 -254
- package/vendor/Server/Skills/flutter-library-consistency-check/SKILL.md +517 -517
- package/vendor/Server/Skills/flutter-library-consistency-check/references/CHECKLIST.md +381 -381
- package/vendor/Server/Skills/flutter-library-consistency-check/references/FUNCTION_COMPARISON_GUIDE.md +341 -341
- package/vendor/Server/Skills/flutter-library-consistency-check/references/PLATFORM_LIMITATION_GUIDE.md +71 -71
- package/vendor/Server/Skills/flutter-library-documentation-quality-check/SKILL.md +518 -518
- package/vendor/Server/Skills/flutter-library-documentation-quality-check/references/CHECKLIST.md +406 -406
- package/vendor/Server/Skills/flutter-library-memory-leak-check/SKILL.md +652 -652
- package/vendor/Server/Skills/flutter-library-memory-leak-check/references/CHECKLIST.md +396 -396
- package/vendor/Server/Skills/flutter-library-stability-check/SKILL.md +744 -744
- package/vendor/Server/Skills/flutter-library-stability-check/references/CHECKLIST.md +720 -720
- package/vendor/Server/Skills/flutter-library-test-coverage-check/SKILL.md +414 -414
- package/vendor/Server/Skills/flutter-library-test-coverage-check/assets/REPORT_TEMPLATE.md +150 -150
- package/vendor/Server/Skills/flutter-library-test-coverage-check/references/CHECKLIST.md +304 -304
- package/vendor/Server/Skills/flutter-library-test-coverage-check/references/SCORING_RULES.md +265 -265
- package/vendor/Server/Skills/flutter-library-test-coverage-check/references/SCRIPT_USAGE.md +286 -286
- package/vendor/Server/Skills/knowledge-import/SKILL.md +383 -383
- package/vendor/Server/Skills/knowledge-import/references/MCP_TOOL_USAGE.md +165 -165
- package/vendor/Server/Skills/knowledge-import/references/SKILL_LOCATOR_GUIDE.md +91 -91
- package/vendor/Server/Skills/knowledge-import/references/SKILL_OPTIMIZATION_GUIDE.md +127 -127
- package/vendor/Server/Skills/ohos-lib-pr-push/SKILL.md +453 -301
- package/vendor/Server/Skills/ohos-lib-pr-push/assets/PR_CHECKLIST.md +151 -0
- package/vendor/Server/Skills/ohos-lib-pr-push/assets/PR_ISSUE_TEMPLATE.md +257 -105
- package/vendor/Server/Skills/ohos-lib-pr-push/references/GITCODE_API.md +191 -127
- package/vendor/Server/Skills/ohos-lib-pr-push/scripts/gitcode-api.cjs +317 -208
- package/vendor/Server/Skills/rn-code-check/SKILL.md +320 -320
- package/vendor/Server/Skills/rn-code-check/references/API-GUIDE.md +234 -234
- package/vendor/Server/Skills/rn-code-check/references/CHECKLIST.md +188 -188
- package/vendor/Server/Skills/rn-code-check/references/REPORT-TEMPLATE.md +246 -246
- package/vendor/Server/Skills/rn-lib-add-example/SKILL.md +198 -198
- package/vendor/Server/Skills/rn-lib-add-example/references/APP_RENAME_GUIDE.md +40 -40
- package/vendor/Server/Skills/rn-lib-add-example/references/SHELL_ADAPTATION_CHECKLIST.md +78 -78
- package/vendor/Server/Skills/rn-lib-add-example/references/TEMPLATE_REPO_GUIDE.md +70 -70
- package/vendor/Server/Skills/rn-lib-add-example/references/VERIFICATION_GUIDE.md +47 -47
- package/vendor/Server/Skills/rn-lib-add-example/scripts/create-example.cjs +252 -252
- package/vendor/Server/Skills/rn-lib-update-doc/SKILL.md +176 -176
- package/vendor/Server/Skills/rn-lib-update-doc/config.json +5 -5
- package/vendor/Server/Skills/rn-lib-update-doc/references/changelog-template.md +35 -35
- package/vendor/Server/Skills/rn-lib-update-doc/references/format-diff.md +137 -137
- package/vendor/Server/Skills/rn-lib-update-doc/references/link-registry.json +33 -33
- package/vendor/Server/Skills/rn-lib-update-doc/references/model-0.4.2-overview.md +40 -40
- package/vendor/Server/Skills/rn-lib-update-doc/references/model-0.4.2.md +429 -429
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/detect-readme-format.cjs +105 -105
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/find-usage-doc.cjs +90 -90
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/link-verify.cjs +213 -213
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/normalize-changelog.cjs +73 -73
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/normalize-package-meta.cjs +258 -258
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/normalize-readme-links.cjs +341 -341
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/resolve-usage-docs.cjs +67 -67
- package/vendor/Server/Skills/rn-library-consistency-check/SKILL.md +299 -299
- package/vendor/Server/Skills/rn-library-consistency-check/assets/REPORT_TEMPLATE.md +293 -293
- package/vendor/Server/Skills/rn-library-consistency-check/references/ARKTS_COMPONENT_CHECK_GUIDE.md +857 -857
- package/vendor/Server/Skills/rn-library-consistency-check/references/ARKTS_TURBOMODULE_CHECK_GUIDE.md +856 -856
- package/vendor/Server/Skills/rn-library-consistency-check/references/CHECKLIST.md +157 -157
- package/vendor/Server/Skills/rn-library-consistency-check/references/CPP_COMPONENT_CHECK_GUIDE.md +801 -801
- package/vendor/Server/Skills/rn-library-consistency-check/references/CPP_TURBOMODULE_CHECK_GUIDE.md +683 -683
- package/vendor/Server/Skills/rn-library-consistency-check/references/FUNCTION_COMPARISON_GUIDE.md +233 -233
- package/vendor/Server/Skills/rn-library-consistency-check/references/NATIVE_COMPONENT_IDENTIFICATION.md +1373 -1373
- package/vendor/Server/Skills/rn-library-consistency-check/references/SCORING_STANDARD.md +220 -220
- package/vendor/Server/Skills/rn-library-consistency-check/scripts/validate-skill.py +245 -245
- package/vendor/Server/Skills/rn-library-documentation-quality-check/SKILL.md +263 -263
- package/vendor/Server/Skills/rn-library-documentation-quality-check/assets/MODEL.md +414 -414
- package/vendor/Server/Skills/rn-library-documentation-quality-check/assets/MODEL_en.md +413 -413
- package/vendor/Server/Skills/rn-library-documentation-quality-check/assets/REPORT_TEMPLATE.md +311 -311
- package/vendor/Server/Skills/rn-library-documentation-quality-check/references/CHECK_CHECKLIST.md +355 -355
- package/vendor/Server/Skills/rn-library-documentation-quality-check/references/CROSS_VALIDATION_GUIDE.md +115 -115
- package/vendor/Server/Skills/rn-library-documentation-quality-check/references/DOC_COLLECTION_GUIDE.md +139 -139
- package/vendor/Server/Skills/rn-library-documentation-quality-check/references/EXAMPLES.md +586 -586
- package/vendor/Server/Skills/rn-library-documentation-quality-check/references/GOTCHAS.md +57 -57
- package/vendor/Server/Skills/rn-library-documentation-quality-check/scripts/validate-skill.py +259 -259
- package/vendor/Server/Skills/rn-library-interface-analyzer/SKILL.md +301 -301
- package/vendor/Server/Skills/rn-library-interface-analyzer/assets/REPORT_TEMPLATE.md +148 -148
- package/vendor/Server/Skills/rn-library-interface-analyzer/references/DOC_ANNOTATION_GUIDE.md +118 -118
- package/vendor/Server/Skills/rn-library-interface-analyzer/references/SCRIPT_USAGE_GUIDE.md +168 -168
- package/vendor/Server/Skills/rn-library-interface-analyzer/references/URL_PARSING_RULES.md +176 -176
- package/vendor/Server/Skills/rn-library-issue-generalizer/SKILL.md +274 -274
- package/vendor/Server/Skills/rn-library-issue-generalizer/assets/case-template.md +45 -45
- package/vendor/Server/Skills/rn-library-issue-generalizer/assets/rule-template.md +25 -25
- package/vendor/Server/Skills/rn-library-issue-generalizer/references/PR_FETCH_GUIDE.md +61 -61
- package/vendor/Server/Skills/rn-library-issue-generalizer/references/RULE_TEMPLATE_GUIDE.md +165 -165
- package/vendor/Server/Skills/rn-library-issue-generalizer/scripts/fetch-pr-info.py +239 -239
- package/vendor/Server/Skills/rn-library-known-issue-check/SKILL.md +263 -263
- package/vendor/Server/Skills/rn-library-known-issue-check/assets/REPORT_TEMPLATE.md +96 -96
- package/vendor/Server/Skills/rn-library-known-issue-check/references/COMPLIANCE_CHECKLIST.md +57 -57
- package/vendor/Server/Skills/rn-library-known-issue-check/references/INSPECTION_GUIDE.md +99 -99
- package/vendor/Server/Skills/rn-library-known-issue-check/references/PRESCREEN_GUIDE.md +64 -64
- package/vendor/Server/Skills/rn-library-known-issue-check/references/SOURCE_PREP_GUIDE.md +74 -74
- package/vendor/Server/Skills/rn-library-known-issue-check/scripts/validate-known-issue-report.py +164 -164
- package/vendor/Server/Skills/rn-library-memory-leak-check/SKILL.md +356 -339
- package/vendor/Server/Skills/rn-library-memory-leak-check/assets/REPORT_TEMPLATE.md +85 -83
- package/vendor/Server/Skills/rn-library-memory-leak-check/references/CHECKLIST.md +905 -859
- package/vendor/Server/Skills/rn-library-memory-leak-check/references/HARMONY_CODE_PATTERNS.md +124 -122
- package/vendor/Server/Skills/rn-library-memory-leak-check/scripts/scan_harmony_code.py +287 -279
- package/vendor/Server/Skills/rn-library-stability-check/SKILL.md +273 -273
- package/vendor/Server/Skills/rn-library-stability-check/assets/REPORT_TEMPLATE.md +129 -129
- package/vendor/Server/Skills/rn-library-stability-check/references/CHECKLIST.md +581 -581
- package/vendor/Server/Skills/rn-library-stability-check/references/SCORING_RULES.md +138 -138
- package/vendor/Server/Skills/rn-library-stability-check/scripts/scan-harmony-code.py +168 -168
- package/vendor/Server/Skills/rn-library-test-coverage-check/SKILL.md +526 -506
- package/vendor/Server/Skills/rn-library-test-coverage-check/references/CHECKLIST.md +321 -280
- package/vendor/Server/Skills/rn-library-test-coverage-check/references/DEMO_LOCATION.md +221 -221
- package/vendor/Server/Skills/rn-library-test-coverage-check/references/REPORT_TEMPLATE.md +220 -209
- package/vendor/Server/Skills/rn-library-test-coverage-check/references/SCRIPT_USAGE.md +325 -325
- package/vendor/Server/Skills/rn-ohos-xts-generator/SKILL.md +279 -279
- package/vendor/Server/Skills/rn-ohos-xts-generator/assets/TEST_FILE_TEMPLATES.md +404 -404
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/BUILD_TROUBLESHOOTING.md +185 -185
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/BUILD_WORKFLOW.md +265 -265
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/COMMON_CONFIG.md +189 -189
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/CONFIG_GUIDE.md +203 -203
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/COVERAGE_ANALYZER.md +147 -147
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/DESIGN_DOC_GUIDE.md +148 -148
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/GENERATION_FLOW.md +165 -165
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/GENERATION_STRATEGY.md +195 -195
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/HARMONY_SCANNER.md +249 -249
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/JEST_FRAMEWORK.md +235 -235
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/PLATFORM_COMPAT.md +161 -161
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/RN_TEST_PATTERNS.md +413 -413
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/SOURCE_PARSER.md +235 -235
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/TEST_CONVENTIONS.md +245 -245
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/TROUBLESHOOTING.md +282 -282
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/USAGE_GUIDE.md +251 -251
- package/vendor/Server/Skills/rnoh-cptf-api-test/SKILL.md +469 -469
- package/vendor/Server/Skills/rnoh-cptf-api-test/assets/CPTF_TEST_TEMPLATE.md +310 -310
- package/vendor/Server/Skills/rnoh-cptf-api-test/assets/DEMO_PAGE_TEMPLATE.md +303 -303
- package/vendor/Server/Skills/rnoh-cptf-api-test/references/CPTF_TEST_GENERATION_GUIDE.md +421 -421
- package/vendor/Server/Skills/rnoh-cptf-api-test/references/DEMO_GENERATION_GUIDE.md +358 -358
- package/vendor/Server/Skills/rnoh-cptf-api-test/references/QUALITY_CHECKLIST.md +114 -114
- package/vendor/Server/Skills/rnoh-cptf-api-test/references/SPEC_PARSING_GUIDE.md +274 -274
- package/vendor/Server/Skills/rnoh-cptf-api-test/scripts/validate-rnoh-cptf-api-test.sh +185 -185
- package/vendor/Server/Skills/rnoh-cptf-demo-test/SKILL.md +191 -191
- package/vendor/Server/Skills/rnoh-cptf-demo-test/assets/TEST_TEMPLATE.md +216 -216
- package/vendor/Server/Skills/rnoh-cptf-demo-test/references/CPTF_SETUP.md +107 -107
- package/vendor/Server/Skills/rnoh-cptf-demo-test/references/DEMO_ANALYSIS.md +120 -120
- package/vendor/Server/Skills/rnoh-cptf-demo-test/scripts/validate-rnoh-cptf-test.sh +108 -108
- package/vendor/Server/Skills/rnoh-cptf-test-run/SKILL.md +237 -237
- package/vendor/Server/Skills/rnoh-cptf-test-run/references/DEBUG_PLAYBOOK.md +261 -261
- package/vendor/Server/Skills/rnoh-cptf-test-run/scripts/validate-run-env.sh +112 -112
- package/vendor/Server/Skills/rnoh-lib-code-adapt/SKILL.md +497 -497
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/adapt-checklist.md +270 -270
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/api-migration-checklist.md +164 -164
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/common-compile-errors.md +556 -556
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/deveco-cli-tools.md +459 -459
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/edge-cases.md +65 -65
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/har-tgz-build.md +512 -512
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/version-compat-matrix.md +132 -132
- package/vendor/Server/Skills/rnoh-lib-code-adapt/scripts/auto-integrate.sh +424 -424
- package/vendor/Server/Skills/rnoh-lib-demo-coverage/SKILL.md +137 -137
- package/vendor/Server/Skills/rnoh-lib-demo-create/SKILL.md +306 -306
- package/vendor/Server/Skills/rnoh-lib-demo-create/assets/DEMO_PAGE_TEMPLATE.md +485 -485
- package/vendor/Server/Skills/rnoh-lib-demo-create/assets/INDEX_TEMPLATE.md +172 -172
- package/vendor/Server/Skills/rnoh-lib-demo-create/references/DEMO_CODE_RULES.md +422 -422
- package/vendor/Server/Skills/rnoh-lib-demo-create/references/QUALITY_CHECKLIST.md +95 -95
- package/vendor/Server/Skills/rnoh-lib-demo-create/references/SOURCE_EXPLORATION.md +169 -169
- package/vendor/Server/Skills/rnoh-lib-demo-doc/SKILL.md +554 -554
- package/vendor/Server/Skills/rnoh-lib-demo-doc/assets/DEMO_DOC_TEMPLATE.md +106 -106
- package/vendor/Server/Skills/rnoh-lib-demo-doc/references/COVERAGE_INCREMENTAL.md +216 -216
- package/vendor/Server/Skills/rnoh-lib-demo-doc/references/DEMO_DESIGN_RULES.md +413 -413
- package/vendor/Server/Skills/rnoh-lib-demo-doc/references/OUTPUT_FORMAT.md +269 -269
- package/vendor/Server/Skills/rnoh-lib-demo-doc/references/QUALITY_CHECKLIST.md +98 -98
- package/vendor/Server/Skills/rnoh-lib-func-test/SKILL.md +337 -337
- package/vendor/Server/Skills/rnoh-lib-rnt-search/SKILL.md +722 -722
- package/vendor/Server/Skills/rnoh-lib-rnt-search/assets/PORT_REPORT_TEMPLATE.md +219 -219
- package/vendor/Server/Skills/rnoh-lib-rnt-search/references/DEMO_PORTING_GUIDE.md +345 -345
- package/vendor/Server/Skills/rnoh-lib-rnt-search/references/PORT_VERIFICATION.md +269 -269
- package/vendor/Server/Skills/rnoh-lib-rnt-search/references/RNT_PROJECT_STRUCTURE.md +173 -173
- package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/analyze-demo-deps.cjs +267 -267
- package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/detect-rnoh-version.cjs +174 -174
- package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/find-rnt-demo.sh +111 -111
- package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/port-demo.sh +186 -186
- package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/read-lib-meta.cjs +150 -150
- package/vendor/Server/Skills/rnoh-lib-test-align/SKILL.md +296 -296
- package/vendor/Server/Skills/rnoh-lib-test-align/references/jest-troubleshooting.md +371 -371
- package/vendor/Server/Skills/rnoh-lib-test-align/references/port-test-demo-guide.md +212 -212
- package/vendor/Server/Skills/rnoh-lib-test-align/references/runtime-troubleshooting.md +345 -345
- package/vendor/Server/Skills/rnoh-lib-test-align/references/unit-test-template.md +223 -223
- package/vendor/Server/Skills/rnoh-lib-test-align/scripts/port-test-demo.sh +1053 -1053
- package/vendor/Server/Skills/rnoh-lib-version-diff/SKILL.md +295 -255
- package/vendor/Server/Skills/rnoh-lib-version-diff/references/OHOS_ADAPTATION.md +82 -77
- package/vendor/Server/Skills/rnoh-lib-version-diff/references/OHOS_API_LOOKUP.md +224 -224
- package/vendor/Server/Skills/rnoh-lib-version-diff/references/script-reference.md +175 -174
- package/vendor/Server/Skills/rnoh-lib-version-diff/scripts/detect-upstream-version.js +967 -967
- package/vendor/Server/Skills/rnoh-lib-version-diff/scripts/generate-diff.js +1798 -1798
- package/vendor/Server/Skills/rnoh-lib-version-diff/scripts/package.json +5 -5
- package/vendor/Server/Skills/rnoh-lib-version-diff/templates/report-template.md +180 -137
- package/vendor/Server/Skills/rnoh-lib-xts-coverage/SKILL.md +145 -145
- package/vendor/Server/Skills/skill-generator/SKILL.md +365 -365
- package/vendor/Server/Skills/skill-generator/assets/SKILL_TEMPLATE.md +183 -183
- package/vendor/Server/Skills/skill-generator/references/COMPLIANCE_CHECKLIST.md +82 -82
- package/vendor/Server/Skills/skill-generator/references/KB_QUERY_GUIDE.md +110 -110
- package/vendor/Server/Skills/skill-generator/references/MCP_TOOL_DISCOVERY.md +122 -122
- package/vendor/Server/Skills/skill-generator/references/SKILL_SPEC.md +121 -121
- package/vendor/Server/Skills/skill-generator/scripts/validate-skill.cjs +259 -259
- package/vendor/Server/Skills/task-analysis/SKILL.md +234 -234
- package/vendor/Server/Skills/task-analysis/assets/OUTPUT_EXAMPLES.md +160 -160
- package/vendor/Server/Skills/task-analysis/references/ACCEPTANCE_CRITERIA_GUIDE.md +190 -190
- package/vendor/Server/Skills/task-analysis/references/ANALYSIS_SCHEMA.md +224 -224
- package/vendor/Server/Skills/task-analysis/references/INTEGRATION_CONTEXT.md +162 -162
- package/vendor/Server/Skills/task-analysis/references/LESSONS_LEARNED.md +55 -55
- package/vendor/Server/Skills/task-analysis/references/REPLAN_CONTEXT_GUIDE.md +126 -126
- package/vendor/Server/Skills/task-analysis/scripts/validate-analysis-output.sh +256 -256
- package/vendor/Server/Skills/task-decomposition/SKILL.md +528 -528
- package/vendor/Server/Skills/task-decomposition/assets/OUTPUT_EXAMPLES.md +451 -451
- package/vendor/Server/Skills/task-decomposition/references/ACCEPTANCE_CRITERIA_GUIDE.md +179 -179
- package/vendor/Server/Skills/task-decomposition/references/DEPENDENCY_GRAPH_GUIDE.md +152 -152
- package/vendor/Server/Skills/task-decomposition/references/INTEGRATION_CONTEXT.md +175 -175
- package/vendor/Server/Skills/task-decomposition/references/REPLAN_CONTEXT_GUIDE.md +195 -195
- package/vendor/Server/Skills/task-decomposition/references/TASK_DECOMPOSITION_TEMPLATES.md +226 -226
- package/vendor/Server/Skills/task-decomposition/scripts/list-available-skills.cjs +263 -263
- package/vendor/Server/Skills/task-decomposition/scripts/skill-blacklist.json +29 -29
- package/vendor/Server/Skills/task-decomposition/scripts/validate-decomposition-output.cjs +376 -376
- package/vendor/Server/Skills/task-decomposition/scripts/validate-param-consistency.cjs +259 -259
- package/vendor/Server/Skills/task-decomposition/scripts/validate-specified-skills.cjs +216 -216
- package/vendor/Server/Skills/task-decomposition/scripts/validate-step-graph.cjs +424 -424
- package/vendor/Server/Skills/tpc-cpp-check/SKILL.md +427 -427
- package/vendor/Server/Skills/tpc-cpp-check/references/CHECKLIST.md +214 -214
- package/vendor/Server/Skills/tpc-cpp-check/references/HPKBUILD_GUIDE.md +235 -235
- package/vendor/Server/Skills/tpc-cpp-check/references/REPORT_TEMPLATE.md +250 -250
- package/vendor/Server/TestCheck/TestCheck.js +775 -775
- package/vendor/Server/TestCheck/index.js +11 -11
- package/vendor/Server/library/McpToolGuide.js +280 -280
- package/vendor/Server/library/StatsService.js +126 -126
- package/vendor/Server/library/cstTime.js +16 -16
- package/vendor/VERSION +3 -3
- package/workflows/pr-check.mjs +105 -105
- package/workflows/pr-push.mjs +192 -192
- package/vendor/Server/Agent/SkillSelector/types.js +0 -63
|
@@ -1,413 +1,413 @@
|
|
|
1
|
-
# Demo 设计规则
|
|
2
|
-
|
|
3
|
-
> 本文档详细说明 Demo 的分组原则、五要素规范、平台过滤规则、双计数器模式和 useState 强制规则。
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## 1. Demo 分组原则
|
|
8
|
-
|
|
9
|
-
### 原则一:一函数至少一个 Demo
|
|
10
|
-
|
|
11
|
-
每个**待生成**接口(Phase 4 过滤后)必须被至少一个 Demo 覆盖。
|
|
12
|
-
|
|
13
|
-
- **全量模式**:覆盖所有 HarmonyOS 平台可用的导出函数/方法/组件
|
|
14
|
-
- **增量模式**:仅覆盖 Demo 覆盖率报告中未覆盖的接口
|
|
15
|
-
|
|
16
|
-
### 原则二:关联接口可合并
|
|
17
|
-
|
|
18
|
-
满足以下任一条件的接口可合并到同一 Demo:
|
|
19
|
-
|
|
20
|
-
| 合并条件 | 示例 |
|
|
21
|
-
|----------|------|
|
|
22
|
-
| 存在明确的调用依赖关系 | `init()` → `execute()` → `release()` |
|
|
23
|
-
| 共同完成一个完整业务场景 | "创建实例 → 配置参数 → 执行操作 → 获取结果" |
|
|
24
|
-
| 属于同一主题功能簇 | 所有播放控制相关方法 |
|
|
25
|
-
| 一个接口的输出是另一个接口的输入 | `scan()` 返回设备列表 → `connect(deviceId)` 使用列表中的 ID |
|
|
26
|
-
| 事件注册与移除配对 | `addListener()` 与 `removeListener()` |
|
|
27
|
-
|
|
28
|
-
> **增量模式特殊规则**:若未覆盖接口与已覆盖接口存在调用依赖,可将未覆盖接口合并到新 Demo 中独立描述。新 Demo 的步骤应自包含,不依赖已覆盖接口的 Demo 步骤。例如:若 `connect()` 已覆盖但 `writeData()` 未覆盖,`writeData()` 的 Demo 步骤中可包含简化的连接步骤作为前置条件,但重点是 `writeData()` 的验证。
|
|
29
|
-
|
|
30
|
-
### 原则三:禁止无关合并
|
|
31
|
-
|
|
32
|
-
不同功能方向、无调用关系的接口不得强行合并到同一 Demo。
|
|
33
|
-
|
|
34
|
-
### 原则四:HarmonyOS 平台过滤
|
|
35
|
-
|
|
36
|
-
> ⚠️ **过滤依据**:仅依据 README 文档的「HarmonyOS Support」列标注。**禁止**通过源码(`Platform.OS` 分支、TurboModule Spec、原生实现是否存在)进行过滤。源码中缺失鸿蒙实现可能是适配遗漏,需通过 Demo 验证发现。
|
|
37
|
-
|
|
38
|
-
- **排除 README 标注 `no` 的接口**:README「HarmonyOS Support」列明确标注为 `no` 的接口,代表鸿蒙化维护者已确认不支持,不生成 Demo
|
|
39
|
-
- **保留 README 未列出的接口**:上游新增但鸿蒙化 README 未收录的接口,视为无平台标注,默认跨平台,生成 Demo 并在描述中标注"建议验证 HarmonyOS 平台实际可用性"
|
|
40
|
-
- **保留无平台标注的接口**:README 有接口但无「HarmonyOS Support」列时,默认视为跨平台,生成 Demo 但建议验证
|
|
41
|
-
- **优先生成 README 标注 `yes` 的接口**:标记为 "跨平台"、"通用"、"Cross Platform"、"HarmonyOS 支持" 的接口优先生成 Demo
|
|
42
|
-
- **平台差异说明**:在相关 Demo 步骤中标注 "本功能在 HarmonyOS 平台验证"
|
|
43
|
-
- **适配遗漏诊断**:对于 README 未列出的接口,在预期结果中设计诊断指标(如"若回调未触发,可能为鸿蒙化适配遗漏"),通过双计数器模式诊断接口实际可用性
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
## 2. Demo 五要素规范
|
|
48
|
-
|
|
49
|
-
### ① 测试 Demo 名称
|
|
50
|
-
|
|
51
|
-
- 格式:`[功能动词/名词][操作对象][特征/场景]Demo`
|
|
52
|
-
- 限制:不超过 20 字
|
|
53
|
-
- 避免泛化词语(如"基础Demo"、"测试Demo")
|
|
54
|
-
|
|
55
|
-
| 场景 | 推荐名称 |
|
|
56
|
-
|------|---------|
|
|
57
|
-
| 单一核心功能 | `蓝牙扫描控制Demo` |
|
|
58
|
-
| 生命周期管理 | `模块初始化与释放Demo` |
|
|
59
|
-
| 配置类接口 | `参数配置与验证Demo` |
|
|
60
|
-
| 异步 Promise | `异步数据加载Demo` |
|
|
61
|
-
| 事件监听 | `原生事件订阅与回调Demo` |
|
|
62
|
-
| 错误处理 | `异常捕获与错误码处理Demo` |
|
|
63
|
-
| 多接口组合 | `完整业务流程Demo` |
|
|
64
|
-
| React 组件 | `自定义组件渲染与交互Demo` |
|
|
65
|
-
|
|
66
|
-
### ② 测试 Demo 描述
|
|
67
|
-
|
|
68
|
-
模板:
|
|
69
|
-
```
|
|
70
|
-
{Demo名称}展示了如何使用 {接口名称} 实现 {功能描述}。
|
|
71
|
-
通过本 Demo,开发者可以了解 {接口的核心用法/参数含义/返回值处理方式}。
|
|
72
|
-
[可选:本 Demo 同时涵盖 {其他关联接口},展示 {它们之间的调用关系/业务场景}。]
|
|
73
|
-
[标注:本 Demo 针对 HarmonyOS 平台的特性/限制。]
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
要求:2-4 句话,说明功能、目的、覆盖接口,明确标注 HarmonyOS 平台特性。
|
|
77
|
-
|
|
78
|
-
### ③ 测试 Demo 步骤
|
|
79
|
-
|
|
80
|
-
步骤结构模板:
|
|
81
|
-
```
|
|
82
|
-
1. 创建函数式组件 Demo 页面(DemoScreen.tsx),使用 useState 声明所需状态变量
|
|
83
|
-
[状态变量列举:const [result, setResult] = useState(''); const [callCount, setCallCount] = useState(0);],
|
|
84
|
-
使用 useEffect 处理组件挂载/卸载逻辑(事件订阅、资源初始化/释放等),
|
|
85
|
-
布局中添加 [UI组件列表:TouchableOpacity 按钮、TextInput 输入框、Text 展示区、ScrollView 列表等]。
|
|
86
|
-
2. [用户操作],触发 `{接口名称}({参数示例})` 调用,
|
|
87
|
-
在 Promise.then() / await 后 / 事件回调中执行 setXxx() 更新状态变量。
|
|
88
|
-
3. 将接口返回值 / 状态变化以 <Text>{value}</Text> 形式展示在 [展示区域名称]。
|
|
89
|
-
4. [下一步操作,如有],验证 [具体行为]。
|
|
90
|
-
[可选] 5. 对比 / 补充验证步骤。
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
步骤描述维度要求:
|
|
94
|
-
|
|
95
|
-
| 维度 | 要求 | 示例 |
|
|
96
|
-
|------|------|------|
|
|
97
|
-
| 组件构建 | 说明需要哪些 RN 组件 | "使用 View 布局、TouchableOpacity 按钮、Text 显示结果" |
|
|
98
|
-
| 状态声明 | 明确 useState 变量及初始值 | `const [status, setStatus] = useState('未初始化')` |
|
|
99
|
-
| 交互触发 | 明确用户操作和调用时机 | "点击'开始扫描'按钮,调用 `BluetoothModule.startScan(5000)`" |
|
|
100
|
-
| 参数传递 | 说明传入参数来源/示例值 | "传入 timeout=5000(毫秒)" |
|
|
101
|
-
| 状态更新 | 说明如何通过 setXxx() 更新 | "在 .then() 回调中执行 `setResult(JSON.stringify(data))`" |
|
|
102
|
-
| 结果展示 | 说明如何在页面显示结果 | "以 `<Text>{result}</Text>` 展示返回数据" |
|
|
103
|
-
| 验证方式 | 说明如何判断成功 | "确认 Text 显示有效的设备列表,无崩溃" |
|
|
104
|
-
| HarmonyOS 平台说明 | 标注特殊行为或限制 | "本功能在 HarmonyOS 平台验证" |
|
|
105
|
-
|
|
106
|
-
### ④ 测试 Demo 预期结果
|
|
107
|
-
|
|
108
|
-
模板:
|
|
109
|
-
```
|
|
110
|
-
1. [页面/UI 状态]:{可观测的界面变化描述}。
|
|
111
|
-
2. [接口返回值]:{返回值类型/内容/范围} 符合预期。
|
|
112
|
-
3. [功能效果]:{功能方面的可验证效果}。
|
|
113
|
-
4. [异常/边界]:{无异常抛出 / 错误信息正确展示 / Promise reject 被捕获}。
|
|
114
|
-
[可选] 5. [平台差异]:{HarmonyOS 平台表现说明}。
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
要求:每条预期结果可观测、可判断,特别标注 HarmonyOS 平台的预期行为。
|
|
118
|
-
|
|
119
|
-
### ⑤ 对应函数接口
|
|
120
|
-
|
|
121
|
-
列出该 Demo 涉及的所有函数/方法/组件名称。
|
|
122
|
-
|
|
123
|
-
格式:
|
|
124
|
-
- 函数:`` `funcName(paramType): ReturnType` ``
|
|
125
|
-
- 组件:`` `<ComponentName prop={type} />` ``
|
|
126
|
-
- 多个接口用换行分隔
|
|
127
|
-
|
|
128
|
-
---
|
|
129
|
-
|
|
130
|
-
## 3. HarmonyOS 可验证性前置规则(强制)
|
|
131
|
-
|
|
132
|
-
在为任何接口编写步骤和预期结果之前,必须先判断:**该接口在 HarmonyOS 设备上能否产生可被用户观测到的输出?**
|
|
133
|
-
|
|
134
|
-
> **判断依据**:仅依据 README 文档的「HarmonyOS Support」列标注。不通过源码判断(源码缺失实现可能是适配遗漏)。
|
|
135
|
-
|
|
136
|
-
| 情况 | 处理方式 |
|
|
137
|
-
|------|----------|
|
|
138
|
-
| README 标注 `yes` 或跨平台 | 正常作为主步骤,预期结果描述可观测指标 |
|
|
139
|
-
| README 标注 `no` | **排除**该接口,不生成 Demo |
|
|
140
|
-
| README 标注 `partially` | 正常作为主步骤,预期结果中标注哪些子功能可用 |
|
|
141
|
-
| README 中未列出该接口 | 正常作为主步骤,预期结果描述可观测指标 + 诊断指标(如"若回调未触发,可能为鸿蒙化适配遗漏") |
|
|
142
|
-
| README 有接口但无 Support 列 | 正常作为主步骤,预期结果描述可观测指标,建议开发者验证 |
|
|
143
|
-
| 接口无任何可观测输出 | 合并到相关流程 Demo 中,通过其他接口的状态变化间接验证 |
|
|
144
|
-
|
|
145
|
-
**禁止「死按钮」**:Demo 中每个按钮(每个步骤中调用的接口)必须对应至少一条 UI 上可观测的预期结果。若无法提供,该按钮/步骤必须删除或改为平台限制说明。
|
|
146
|
-
|
|
147
|
-
---
|
|
148
|
-
|
|
149
|
-
## 4. useState 强制规则
|
|
150
|
-
|
|
151
|
-
Demo 步骤中包含「计数器(如回调次数、调用次数)」或「状态标志(如是否已初始化)」等运行时变化量时,在步骤或预期结果描述中**必须**注明:
|
|
152
|
-
|
|
153
|
-
> **该变量须通过 `setXxx()` 更新**
|
|
154
|
-
|
|
155
|
-
否则 React Native 不会触发重新渲染,计数器将始终显示初始值(如永远显示 0),导致 Demo 验证逻辑完全失效。
|
|
156
|
-
|
|
157
|
-
正确示例:
|
|
158
|
-
```
|
|
159
|
-
const [checkCount, setCheckCount] = useState(0);
|
|
160
|
-
// 点击按钮时:
|
|
161
|
-
setCheckCount(c => c + 1); // ✅ 通过 setter 更新
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
---
|
|
165
|
-
|
|
166
|
-
## 5. 异步回调链双计数器诊断模式(强制)
|
|
167
|
-
|
|
168
|
-
对任何 Demo 中涉及「调用库函数 → 等待 Promise / 监听事件回调」的异步链路,**必须**在 Demo 设计中规划双计数器:
|
|
169
|
-
|
|
170
|
-
| 计数器位置 | 变量名建议 | 说明 |
|
|
171
|
-
|-----------|----------|------|
|
|
172
|
-
| 调用/触发前(在触发代码中) | `xxxCallCount` | 接口调用动作的执行次数(通过 `setXxxCallCount(c => c + 1)` 更新) |
|
|
173
|
-
| 回调/resolve 内部 | `xxxCallbackCount` | Promise resolve 或事件回调实际触发的次数(通过 `setXxxCallbackCount(c => c + 1)` 更新) |
|
|
174
|
-
|
|
175
|
-
两个计数器都必须在 Demo 页面的**验证区域**中展示(使用 `<Text>` 组件),且**必须通过 `useState` 的 setter 函数更新**。
|
|
176
|
-
|
|
177
|
-
### 诊断规则
|
|
178
|
-
|
|
179
|
-
| 计数器状态 | 诊断结论 |
|
|
180
|
-
|-----------|----------|
|
|
181
|
-
| `callCount > 0` 且 `callbackCount = 0` | 调用成功但回调未触发,问题在回调注册或原生事件链 |
|
|
182
|
-
| `callCount = 0` | 触发代码未执行,问题在 Demo 的触发逻辑 |
|
|
183
|
-
| `callCount = callbackCount > 0` | 链路完全正常 |
|
|
184
|
-
|
|
185
|
-
### 步骤写作规范
|
|
186
|
-
|
|
187
|
-
```
|
|
188
|
-
步骤示例:
|
|
189
|
-
1. 在组件中声明计数器:
|
|
190
|
-
const [xxxCallCount, setXxxCallCount] = useState(0);
|
|
191
|
-
const [xxxCallbackCount, setXxxCallbackCount] = useState(0);
|
|
192
|
-
2. 触发按钮:setXxxCallCount(c => c + 1),然后调用 module.doXxx()
|
|
193
|
-
3. 在 .then() / await 后 / 事件回调中:setXxxCallbackCount(c => c + 1),更新其他 UI 状态
|
|
194
|
-
4. 验证区域展示:
|
|
195
|
-
<Text>调用次数: {xxxCallCount}</Text>
|
|
196
|
-
<Text>回调次数: {xxxCallbackCount}</Text>
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
---
|
|
200
|
-
|
|
201
|
-
## 6. RN 常用接口调用模式速查
|
|
202
|
-
|
|
203
|
-
### 6.1 接口模式分类总表
|
|
204
|
-
|
|
205
|
-
RN 三方库的导出接口并非都是"按钮触发 → 函数调用 → 结果展示"模式。不同接口模式需要不同的 Demo 设计策略:
|
|
206
|
-
|
|
207
|
-
| 模式 | 特征 | 调用时机 | 计数器需求 | Demo 步骤要点 |
|
|
208
|
-
|------|------|----------|-----------|--------------|
|
|
209
|
-
| **NativeModules 方法** | `NativeModules.Xxx.doXxx()` | 用户交互触发 | 双计数器(call + callback) | 按钮触发 → await → 展示结果 |
|
|
210
|
-
| **Promise 异步** | `await func()` 返回 Promise | 用户交互触发 | 双计数器(call + callback) | 按钮触发 → await → catch 错误 → 展示 |
|
|
211
|
-
| **NativeEventEmitter 事件** | `addListener('event', cb)` | useEffect 注册 | 双计数器(注册 + 回调触发) | useEffect 注册 → 触发事件 → 回调更新 |
|
|
212
|
-
| **React 组件事件回调** | `<Comp onEvent={} />` | 渲染时绑定 | 双计数器(渲染 + 回调触发) | 渲染组件 → 触发事件 → 回调更新 |
|
|
213
|
-
| **Hook** | `const x = useXxx()` | 组件顶层调用 | **无需双计数器**(同步返回,非异步链路) | 顶层调用 → 渲染时直接展示返回值 |
|
|
214
|
-
| **Context Consumer** | `<Context.Consumer>{(val) => ...}</Context.Consumer>` | 渲染时自动消费 | **无需双计数器**(Context 传递,非异步链路) | Provider 包裹 → Consumer 子渲染函数接收值 → 展示 |
|
|
215
|
-
| **HOC(高阶组件)** | `withXxx(WrappedComp)` | 模块顶层定义 | 单计数器(验证渲染次数即可) | 定义 HOC → 渲染被包装组件 → 验证注入的 props |
|
|
216
|
-
| **常量/变量导出** | `export const X = ...` | 模块加载时求值 | **无需计数器**(静态值,非调用) | 直接读取 → useEffect 中展示 → 对比预期 |
|
|
217
|
-
| **Context 对象引用** | `export const Ctx = createContext(...)` | 模块加载时创建 | **无需计数器**(引用比较) | `===` 引用比较 → 展示布尔结果 |
|
|
218
|
-
| **废弃别名** | `export const alias = original` | 同底层接口 | 同底层接口模式 | 验证别名与原始接口行为一致 + `@deprecated` 标注 |
|
|
219
|
-
|
|
220
|
-
### 6.2 Hook 模式
|
|
221
|
-
|
|
222
|
-
Hook 在组件顶层调用,返回值在渲染阶段即可获取,**不是异步链路**,无需双计数器。
|
|
223
|
-
|
|
224
|
-
**步骤范式**:
|
|
225
|
-
```
|
|
226
|
-
1. 在组件顶层调用 Hook:const value = useXxx()
|
|
227
|
-
2. 将返回值直接渲染:<Text>{JSON.stringify(value)}</Text>
|
|
228
|
-
3. [可选] 按钮触发状态变化验证 Hook 响应:setRefreshCount(c => c + 1)
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
**示例**:
|
|
232
|
-
```typescript
|
|
233
|
-
// Hook 必须在组件顶层调用,不可在事件回调中调用
|
|
234
|
-
const insets = useSafeAreaInsets();
|
|
235
|
-
|
|
236
|
-
return (
|
|
237
|
-
<View>
|
|
238
|
-
<Text>insets: {JSON.stringify(insets)}</Text>
|
|
239
|
-
</View>
|
|
240
|
-
);
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
> ⚠️ Hook 不能放在按钮 onPress 回调中,必须在组件函数体顶层调用。
|
|
244
|
-
|
|
245
|
-
### 6.3 Context Consumer 模式
|
|
246
|
-
|
|
247
|
-
使用 React Context 的 Consumer 组件,通过 render props 子渲染函数接收 Context 值。**非异步链路**,无需双计数器。
|
|
248
|
-
|
|
249
|
-
**步骤范式**:
|
|
250
|
-
```
|
|
251
|
-
1. 外层用 <Provider> 包裹确保 Context 有值
|
|
252
|
-
2. 使用 <XxxConsumer>{(value) => <Text>{JSON.stringify(value)}</Text>}</XxxConsumer>
|
|
253
|
-
3. 验证 Consumer 子渲染函数接收到的 value 非空
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
**示例**:
|
|
257
|
-
```typescript
|
|
258
|
-
<SafeAreaProvider>
|
|
259
|
-
<SafeAreaConsumer>
|
|
260
|
-
{(insets) => <Text>Consumer value: {JSON.stringify(insets)}</Text>}
|
|
261
|
-
</SafeAreaConsumer>
|
|
262
|
-
</SafeAreaProvider>
|
|
263
|
-
```
|
|
264
|
-
|
|
265
|
-
### 6.4 HOC(高阶组件)模式
|
|
266
|
-
|
|
267
|
-
高阶组件在模块顶层定义,将被包装组件包装后渲染。验证 HOC 注入的 props 是否正确传递。
|
|
268
|
-
|
|
269
|
-
**步骤范式**:
|
|
270
|
-
```
|
|
271
|
-
1. 定义被包装组件:function InnerComp(props) { return <Text>{JSON.stringify(props.injected)}</Text> }
|
|
272
|
-
2. 用 HOC 包装:const Wrapped = withXxx(InnerComp)
|
|
273
|
-
3. 在 Provider 内渲染 <Wrapped />
|
|
274
|
-
4. 验证 InnerComp 接收到 HOC 注入的 props
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
**示例**:
|
|
278
|
-
```typescript
|
|
279
|
-
function InnerComponent({ insets }: { insets: EdgeInsets }) {
|
|
280
|
-
return <Text>HOC injected insets: {JSON.stringify(insets)}</Text>;
|
|
281
|
-
}
|
|
282
|
-
const WrappedComponent = withSafeAreaInsets(InnerComponent);
|
|
283
|
-
|
|
284
|
-
// 渲染
|
|
285
|
-
<SafeAreaProvider>
|
|
286
|
-
<WrappedComponent />
|
|
287
|
-
</SafeAreaProvider>
|
|
288
|
-
```
|
|
289
|
-
|
|
290
|
-
### 6.5 常量/变量导出模式
|
|
291
|
-
|
|
292
|
-
模块加载时求值的静态导出值,直接读取即可。**非异步链路,非交互触发**,无需计数器。
|
|
293
|
-
|
|
294
|
-
**步骤范式**:
|
|
295
|
-
```
|
|
296
|
-
1. 在 useEffect 中读取常量值(避免渲染期间副作用)
|
|
297
|
-
2. 通过 setXxx() 更新状态展示
|
|
298
|
-
3. 验证返回值符合预期类型和内容
|
|
299
|
-
```
|
|
300
|
-
|
|
301
|
-
**示例**:
|
|
302
|
-
```typescript
|
|
303
|
-
const [metricsText, setMetricsText] = useState('未获取');
|
|
304
|
-
|
|
305
|
-
useEffect(() => {
|
|
306
|
-
setMetricsText(initialWindowMetrics ? JSON.stringify(initialWindowMetrics) : 'null');
|
|
307
|
-
}, []);
|
|
308
|
-
|
|
309
|
-
return <Text>initialWindowMetrics: {metricsText}</Text>;
|
|
310
|
-
```
|
|
311
|
-
|
|
312
|
-
### 6.6 Context 对象引用模式
|
|
313
|
-
|
|
314
|
-
验证两个 Context 对象是否指向同一引用(废弃别名常见场景)。使用 `===` 严格比较。
|
|
315
|
-
|
|
316
|
-
**步骤范式**:
|
|
317
|
-
```
|
|
318
|
-
1. 声明状态:const [isSame, setIsSame] = useState(false)
|
|
319
|
-
2. 按钮触发比较:setIsSame(ContextA === ContextB)
|
|
320
|
-
3. 展示布尔结果:<Text>相同引用: {isSame.toString()}</Text>
|
|
321
|
-
```
|
|
322
|
-
|
|
323
|
-
**示例**:
|
|
324
|
-
```typescript
|
|
325
|
-
const [isSameContext, setIsSameContext] = useState(false);
|
|
326
|
-
|
|
327
|
-
const handleVerify = () => {
|
|
328
|
-
setIsSameContext(SafeAreaContext === SafeAreaInsetsContext);
|
|
329
|
-
};
|
|
330
|
-
|
|
331
|
-
return <Text>Context 相同: {isSameContext.toString()}</Text>;
|
|
332
|
-
```
|
|
333
|
-
|
|
334
|
-
### 6.7 废弃别名模式
|
|
335
|
-
|
|
336
|
-
`@deprecated` 废弃别名接口的 Demo 设计,核心是验证别名与底层接口行为一致。
|
|
337
|
-
|
|
338
|
-
**步骤范式**:
|
|
339
|
-
```
|
|
340
|
-
1. 同时引入废弃别名和非废弃原始接口
|
|
341
|
-
2. 分别调用/使用两者
|
|
342
|
-
3. 对比返回值或行为是否一致
|
|
343
|
-
4. 若为对象引用(Context/变量),用 === 验证同一性
|
|
344
|
-
5. 在 Demo 描述中标注"废弃接口兼容性验证"
|
|
345
|
-
```
|
|
346
|
-
|
|
347
|
-
**示例**:
|
|
348
|
-
```typescript
|
|
349
|
-
// useSafeArea 是 useSafeAreaInsets 的废弃别名
|
|
350
|
-
const insetsFromAlias = useSafeArea();
|
|
351
|
-
const insetsFromOriginal = useSafeAreaInsets();
|
|
352
|
-
|
|
353
|
-
// 验证返回值一致
|
|
354
|
-
<Text>别名返回: {JSON.stringify(insetsFromAlias)}</Text>
|
|
355
|
-
<Text>原始返回: {JSON.stringify(insetsFromOriginal)}</Text>
|
|
356
|
-
```
|
|
357
|
-
|
|
358
|
-
### 6.8 NativeModules 调用模式
|
|
359
|
-
|
|
360
|
-
```typescript
|
|
361
|
-
import { NativeModules } from 'react-native';
|
|
362
|
-
const { XxxModule } = NativeModules;
|
|
363
|
-
|
|
364
|
-
// Promise
|
|
365
|
-
const result = await XxxModule.someMethod(param);
|
|
366
|
-
|
|
367
|
-
// Callback
|
|
368
|
-
XxxModule.someMethod(param, (error, result) => { ... });
|
|
369
|
-
```
|
|
370
|
-
|
|
371
|
-
### 6.9 NativeEventEmitter 事件监听模式
|
|
372
|
-
|
|
373
|
-
```typescript
|
|
374
|
-
import { NativeModules, NativeEventEmitter } from 'react-native';
|
|
375
|
-
const eventEmitter = new NativeEventEmitter(NativeModules.XxxModule);
|
|
376
|
-
|
|
377
|
-
// 订阅事件(在 useEffect 中注册)
|
|
378
|
-
const subscription = eventEmitter.addListener('eventName', (data) => {
|
|
379
|
-
setXxx(data);
|
|
380
|
-
setCallbackCount(c => c + 1);
|
|
381
|
-
});
|
|
382
|
-
|
|
383
|
-
// 取消订阅(在清理函数中)
|
|
384
|
-
return () => subscription.remove();
|
|
385
|
-
```
|
|
386
|
-
|
|
387
|
-
### 6.10 async/await Promise 调用模式
|
|
388
|
-
|
|
389
|
-
```typescript
|
|
390
|
-
const handlePress = async () => {
|
|
391
|
-
setCallCount(c => c + 1);
|
|
392
|
-
try {
|
|
393
|
-
const result = await SomeModule.doSomething(param);
|
|
394
|
-
setResult(JSON.stringify(result));
|
|
395
|
-
setCallbackCount(c => c + 1);
|
|
396
|
-
} catch (error) {
|
|
397
|
-
setErrorMsg((error as Error).message);
|
|
398
|
-
}
|
|
399
|
-
};
|
|
400
|
-
```
|
|
401
|
-
|
|
402
|
-
### 6.11 React 组件事件回调模式
|
|
403
|
-
|
|
404
|
-
```typescript
|
|
405
|
-
<SomeNativeComponent
|
|
406
|
-
prop1={value1}
|
|
407
|
-
onEvent={(data) => {
|
|
408
|
-
setCallbackCount(c => c + 1);
|
|
409
|
-
setResult(JSON.stringify(data));
|
|
410
|
-
}}
|
|
411
|
-
onError={(err) => setErrorMsg(err.message)}
|
|
412
|
-
/>
|
|
413
|
-
```
|
|
1
|
+
# Demo 设计规则
|
|
2
|
+
|
|
3
|
+
> 本文档详细说明 Demo 的分组原则、五要素规范、平台过滤规则、双计数器模式和 useState 强制规则。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Demo 分组原则
|
|
8
|
+
|
|
9
|
+
### 原则一:一函数至少一个 Demo
|
|
10
|
+
|
|
11
|
+
每个**待生成**接口(Phase 4 过滤后)必须被至少一个 Demo 覆盖。
|
|
12
|
+
|
|
13
|
+
- **全量模式**:覆盖所有 HarmonyOS 平台可用的导出函数/方法/组件
|
|
14
|
+
- **增量模式**:仅覆盖 Demo 覆盖率报告中未覆盖的接口
|
|
15
|
+
|
|
16
|
+
### 原则二:关联接口可合并
|
|
17
|
+
|
|
18
|
+
满足以下任一条件的接口可合并到同一 Demo:
|
|
19
|
+
|
|
20
|
+
| 合并条件 | 示例 |
|
|
21
|
+
|----------|------|
|
|
22
|
+
| 存在明确的调用依赖关系 | `init()` → `execute()` → `release()` |
|
|
23
|
+
| 共同完成一个完整业务场景 | "创建实例 → 配置参数 → 执行操作 → 获取结果" |
|
|
24
|
+
| 属于同一主题功能簇 | 所有播放控制相关方法 |
|
|
25
|
+
| 一个接口的输出是另一个接口的输入 | `scan()` 返回设备列表 → `connect(deviceId)` 使用列表中的 ID |
|
|
26
|
+
| 事件注册与移除配对 | `addListener()` 与 `removeListener()` |
|
|
27
|
+
|
|
28
|
+
> **增量模式特殊规则**:若未覆盖接口与已覆盖接口存在调用依赖,可将未覆盖接口合并到新 Demo 中独立描述。新 Demo 的步骤应自包含,不依赖已覆盖接口的 Demo 步骤。例如:若 `connect()` 已覆盖但 `writeData()` 未覆盖,`writeData()` 的 Demo 步骤中可包含简化的连接步骤作为前置条件,但重点是 `writeData()` 的验证。
|
|
29
|
+
|
|
30
|
+
### 原则三:禁止无关合并
|
|
31
|
+
|
|
32
|
+
不同功能方向、无调用关系的接口不得强行合并到同一 Demo。
|
|
33
|
+
|
|
34
|
+
### 原则四:HarmonyOS 平台过滤
|
|
35
|
+
|
|
36
|
+
> ⚠️ **过滤依据**:仅依据 README 文档的「HarmonyOS Support」列标注。**禁止**通过源码(`Platform.OS` 分支、TurboModule Spec、原生实现是否存在)进行过滤。源码中缺失鸿蒙实现可能是适配遗漏,需通过 Demo 验证发现。
|
|
37
|
+
|
|
38
|
+
- **排除 README 标注 `no` 的接口**:README「HarmonyOS Support」列明确标注为 `no` 的接口,代表鸿蒙化维护者已确认不支持,不生成 Demo
|
|
39
|
+
- **保留 README 未列出的接口**:上游新增但鸿蒙化 README 未收录的接口,视为无平台标注,默认跨平台,生成 Demo 并在描述中标注"建议验证 HarmonyOS 平台实际可用性"
|
|
40
|
+
- **保留无平台标注的接口**:README 有接口但无「HarmonyOS Support」列时,默认视为跨平台,生成 Demo 但建议验证
|
|
41
|
+
- **优先生成 README 标注 `yes` 的接口**:标记为 "跨平台"、"通用"、"Cross Platform"、"HarmonyOS 支持" 的接口优先生成 Demo
|
|
42
|
+
- **平台差异说明**:在相关 Demo 步骤中标注 "本功能在 HarmonyOS 平台验证"
|
|
43
|
+
- **适配遗漏诊断**:对于 README 未列出的接口,在预期结果中设计诊断指标(如"若回调未触发,可能为鸿蒙化适配遗漏"),通过双计数器模式诊断接口实际可用性
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## 2. Demo 五要素规范
|
|
48
|
+
|
|
49
|
+
### ① 测试 Demo 名称
|
|
50
|
+
|
|
51
|
+
- 格式:`[功能动词/名词][操作对象][特征/场景]Demo`
|
|
52
|
+
- 限制:不超过 20 字
|
|
53
|
+
- 避免泛化词语(如"基础Demo"、"测试Demo")
|
|
54
|
+
|
|
55
|
+
| 场景 | 推荐名称 |
|
|
56
|
+
|------|---------|
|
|
57
|
+
| 单一核心功能 | `蓝牙扫描控制Demo` |
|
|
58
|
+
| 生命周期管理 | `模块初始化与释放Demo` |
|
|
59
|
+
| 配置类接口 | `参数配置与验证Demo` |
|
|
60
|
+
| 异步 Promise | `异步数据加载Demo` |
|
|
61
|
+
| 事件监听 | `原生事件订阅与回调Demo` |
|
|
62
|
+
| 错误处理 | `异常捕获与错误码处理Demo` |
|
|
63
|
+
| 多接口组合 | `完整业务流程Demo` |
|
|
64
|
+
| React 组件 | `自定义组件渲染与交互Demo` |
|
|
65
|
+
|
|
66
|
+
### ② 测试 Demo 描述
|
|
67
|
+
|
|
68
|
+
模板:
|
|
69
|
+
```
|
|
70
|
+
{Demo名称}展示了如何使用 {接口名称} 实现 {功能描述}。
|
|
71
|
+
通过本 Demo,开发者可以了解 {接口的核心用法/参数含义/返回值处理方式}。
|
|
72
|
+
[可选:本 Demo 同时涵盖 {其他关联接口},展示 {它们之间的调用关系/业务场景}。]
|
|
73
|
+
[标注:本 Demo 针对 HarmonyOS 平台的特性/限制。]
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
要求:2-4 句话,说明功能、目的、覆盖接口,明确标注 HarmonyOS 平台特性。
|
|
77
|
+
|
|
78
|
+
### ③ 测试 Demo 步骤
|
|
79
|
+
|
|
80
|
+
步骤结构模板:
|
|
81
|
+
```
|
|
82
|
+
1. 创建函数式组件 Demo 页面(DemoScreen.tsx),使用 useState 声明所需状态变量
|
|
83
|
+
[状态变量列举:const [result, setResult] = useState(''); const [callCount, setCallCount] = useState(0);],
|
|
84
|
+
使用 useEffect 处理组件挂载/卸载逻辑(事件订阅、资源初始化/释放等),
|
|
85
|
+
布局中添加 [UI组件列表:TouchableOpacity 按钮、TextInput 输入框、Text 展示区、ScrollView 列表等]。
|
|
86
|
+
2. [用户操作],触发 `{接口名称}({参数示例})` 调用,
|
|
87
|
+
在 Promise.then() / await 后 / 事件回调中执行 setXxx() 更新状态变量。
|
|
88
|
+
3. 将接口返回值 / 状态变化以 <Text>{value}</Text> 形式展示在 [展示区域名称]。
|
|
89
|
+
4. [下一步操作,如有],验证 [具体行为]。
|
|
90
|
+
[可选] 5. 对比 / 补充验证步骤。
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
步骤描述维度要求:
|
|
94
|
+
|
|
95
|
+
| 维度 | 要求 | 示例 |
|
|
96
|
+
|------|------|------|
|
|
97
|
+
| 组件构建 | 说明需要哪些 RN 组件 | "使用 View 布局、TouchableOpacity 按钮、Text 显示结果" |
|
|
98
|
+
| 状态声明 | 明确 useState 变量及初始值 | `const [status, setStatus] = useState('未初始化')` |
|
|
99
|
+
| 交互触发 | 明确用户操作和调用时机 | "点击'开始扫描'按钮,调用 `BluetoothModule.startScan(5000)`" |
|
|
100
|
+
| 参数传递 | 说明传入参数来源/示例值 | "传入 timeout=5000(毫秒)" |
|
|
101
|
+
| 状态更新 | 说明如何通过 setXxx() 更新 | "在 .then() 回调中执行 `setResult(JSON.stringify(data))`" |
|
|
102
|
+
| 结果展示 | 说明如何在页面显示结果 | "以 `<Text>{result}</Text>` 展示返回数据" |
|
|
103
|
+
| 验证方式 | 说明如何判断成功 | "确认 Text 显示有效的设备列表,无崩溃" |
|
|
104
|
+
| HarmonyOS 平台说明 | 标注特殊行为或限制 | "本功能在 HarmonyOS 平台验证" |
|
|
105
|
+
|
|
106
|
+
### ④ 测试 Demo 预期结果
|
|
107
|
+
|
|
108
|
+
模板:
|
|
109
|
+
```
|
|
110
|
+
1. [页面/UI 状态]:{可观测的界面变化描述}。
|
|
111
|
+
2. [接口返回值]:{返回值类型/内容/范围} 符合预期。
|
|
112
|
+
3. [功能效果]:{功能方面的可验证效果}。
|
|
113
|
+
4. [异常/边界]:{无异常抛出 / 错误信息正确展示 / Promise reject 被捕获}。
|
|
114
|
+
[可选] 5. [平台差异]:{HarmonyOS 平台表现说明}。
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
要求:每条预期结果可观测、可判断,特别标注 HarmonyOS 平台的预期行为。
|
|
118
|
+
|
|
119
|
+
### ⑤ 对应函数接口
|
|
120
|
+
|
|
121
|
+
列出该 Demo 涉及的所有函数/方法/组件名称。
|
|
122
|
+
|
|
123
|
+
格式:
|
|
124
|
+
- 函数:`` `funcName(paramType): ReturnType` ``
|
|
125
|
+
- 组件:`` `<ComponentName prop={type} />` ``
|
|
126
|
+
- 多个接口用换行分隔
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## 3. HarmonyOS 可验证性前置规则(强制)
|
|
131
|
+
|
|
132
|
+
在为任何接口编写步骤和预期结果之前,必须先判断:**该接口在 HarmonyOS 设备上能否产生可被用户观测到的输出?**
|
|
133
|
+
|
|
134
|
+
> **判断依据**:仅依据 README 文档的「HarmonyOS Support」列标注。不通过源码判断(源码缺失实现可能是适配遗漏)。
|
|
135
|
+
|
|
136
|
+
| 情况 | 处理方式 |
|
|
137
|
+
|------|----------|
|
|
138
|
+
| README 标注 `yes` 或跨平台 | 正常作为主步骤,预期结果描述可观测指标 |
|
|
139
|
+
| README 标注 `no` | **排除**该接口,不生成 Demo |
|
|
140
|
+
| README 标注 `partially` | 正常作为主步骤,预期结果中标注哪些子功能可用 |
|
|
141
|
+
| README 中未列出该接口 | 正常作为主步骤,预期结果描述可观测指标 + 诊断指标(如"若回调未触发,可能为鸿蒙化适配遗漏") |
|
|
142
|
+
| README 有接口但无 Support 列 | 正常作为主步骤,预期结果描述可观测指标,建议开发者验证 |
|
|
143
|
+
| 接口无任何可观测输出 | 合并到相关流程 Demo 中,通过其他接口的状态变化间接验证 |
|
|
144
|
+
|
|
145
|
+
**禁止「死按钮」**:Demo 中每个按钮(每个步骤中调用的接口)必须对应至少一条 UI 上可观测的预期结果。若无法提供,该按钮/步骤必须删除或改为平台限制说明。
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## 4. useState 强制规则
|
|
150
|
+
|
|
151
|
+
Demo 步骤中包含「计数器(如回调次数、调用次数)」或「状态标志(如是否已初始化)」等运行时变化量时,在步骤或预期结果描述中**必须**注明:
|
|
152
|
+
|
|
153
|
+
> **该变量须通过 `setXxx()` 更新**
|
|
154
|
+
|
|
155
|
+
否则 React Native 不会触发重新渲染,计数器将始终显示初始值(如永远显示 0),导致 Demo 验证逻辑完全失效。
|
|
156
|
+
|
|
157
|
+
正确示例:
|
|
158
|
+
```
|
|
159
|
+
const [checkCount, setCheckCount] = useState(0);
|
|
160
|
+
// 点击按钮时:
|
|
161
|
+
setCheckCount(c => c + 1); // ✅ 通过 setter 更新
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## 5. 异步回调链双计数器诊断模式(强制)
|
|
167
|
+
|
|
168
|
+
对任何 Demo 中涉及「调用库函数 → 等待 Promise / 监听事件回调」的异步链路,**必须**在 Demo 设计中规划双计数器:
|
|
169
|
+
|
|
170
|
+
| 计数器位置 | 变量名建议 | 说明 |
|
|
171
|
+
|-----------|----------|------|
|
|
172
|
+
| 调用/触发前(在触发代码中) | `xxxCallCount` | 接口调用动作的执行次数(通过 `setXxxCallCount(c => c + 1)` 更新) |
|
|
173
|
+
| 回调/resolve 内部 | `xxxCallbackCount` | Promise resolve 或事件回调实际触发的次数(通过 `setXxxCallbackCount(c => c + 1)` 更新) |
|
|
174
|
+
|
|
175
|
+
两个计数器都必须在 Demo 页面的**验证区域**中展示(使用 `<Text>` 组件),且**必须通过 `useState` 的 setter 函数更新**。
|
|
176
|
+
|
|
177
|
+
### 诊断规则
|
|
178
|
+
|
|
179
|
+
| 计数器状态 | 诊断结论 |
|
|
180
|
+
|-----------|----------|
|
|
181
|
+
| `callCount > 0` 且 `callbackCount = 0` | 调用成功但回调未触发,问题在回调注册或原生事件链 |
|
|
182
|
+
| `callCount = 0` | 触发代码未执行,问题在 Demo 的触发逻辑 |
|
|
183
|
+
| `callCount = callbackCount > 0` | 链路完全正常 |
|
|
184
|
+
|
|
185
|
+
### 步骤写作规范
|
|
186
|
+
|
|
187
|
+
```
|
|
188
|
+
步骤示例:
|
|
189
|
+
1. 在组件中声明计数器:
|
|
190
|
+
const [xxxCallCount, setXxxCallCount] = useState(0);
|
|
191
|
+
const [xxxCallbackCount, setXxxCallbackCount] = useState(0);
|
|
192
|
+
2. 触发按钮:setXxxCallCount(c => c + 1),然后调用 module.doXxx()
|
|
193
|
+
3. 在 .then() / await 后 / 事件回调中:setXxxCallbackCount(c => c + 1),更新其他 UI 状态
|
|
194
|
+
4. 验证区域展示:
|
|
195
|
+
<Text>调用次数: {xxxCallCount}</Text>
|
|
196
|
+
<Text>回调次数: {xxxCallbackCount}</Text>
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## 6. RN 常用接口调用模式速查
|
|
202
|
+
|
|
203
|
+
### 6.1 接口模式分类总表
|
|
204
|
+
|
|
205
|
+
RN 三方库的导出接口并非都是"按钮触发 → 函数调用 → 结果展示"模式。不同接口模式需要不同的 Demo 设计策略:
|
|
206
|
+
|
|
207
|
+
| 模式 | 特征 | 调用时机 | 计数器需求 | Demo 步骤要点 |
|
|
208
|
+
|------|------|----------|-----------|--------------|
|
|
209
|
+
| **NativeModules 方法** | `NativeModules.Xxx.doXxx()` | 用户交互触发 | 双计数器(call + callback) | 按钮触发 → await → 展示结果 |
|
|
210
|
+
| **Promise 异步** | `await func()` 返回 Promise | 用户交互触发 | 双计数器(call + callback) | 按钮触发 → await → catch 错误 → 展示 |
|
|
211
|
+
| **NativeEventEmitter 事件** | `addListener('event', cb)` | useEffect 注册 | 双计数器(注册 + 回调触发) | useEffect 注册 → 触发事件 → 回调更新 |
|
|
212
|
+
| **React 组件事件回调** | `<Comp onEvent={} />` | 渲染时绑定 | 双计数器(渲染 + 回调触发) | 渲染组件 → 触发事件 → 回调更新 |
|
|
213
|
+
| **Hook** | `const x = useXxx()` | 组件顶层调用 | **无需双计数器**(同步返回,非异步链路) | 顶层调用 → 渲染时直接展示返回值 |
|
|
214
|
+
| **Context Consumer** | `<Context.Consumer>{(val) => ...}</Context.Consumer>` | 渲染时自动消费 | **无需双计数器**(Context 传递,非异步链路) | Provider 包裹 → Consumer 子渲染函数接收值 → 展示 |
|
|
215
|
+
| **HOC(高阶组件)** | `withXxx(WrappedComp)` | 模块顶层定义 | 单计数器(验证渲染次数即可) | 定义 HOC → 渲染被包装组件 → 验证注入的 props |
|
|
216
|
+
| **常量/变量导出** | `export const X = ...` | 模块加载时求值 | **无需计数器**(静态值,非调用) | 直接读取 → useEffect 中展示 → 对比预期 |
|
|
217
|
+
| **Context 对象引用** | `export const Ctx = createContext(...)` | 模块加载时创建 | **无需计数器**(引用比较) | `===` 引用比较 → 展示布尔结果 |
|
|
218
|
+
| **废弃别名** | `export const alias = original` | 同底层接口 | 同底层接口模式 | 验证别名与原始接口行为一致 + `@deprecated` 标注 |
|
|
219
|
+
|
|
220
|
+
### 6.2 Hook 模式
|
|
221
|
+
|
|
222
|
+
Hook 在组件顶层调用,返回值在渲染阶段即可获取,**不是异步链路**,无需双计数器。
|
|
223
|
+
|
|
224
|
+
**步骤范式**:
|
|
225
|
+
```
|
|
226
|
+
1. 在组件顶层调用 Hook:const value = useXxx()
|
|
227
|
+
2. 将返回值直接渲染:<Text>{JSON.stringify(value)}</Text>
|
|
228
|
+
3. [可选] 按钮触发状态变化验证 Hook 响应:setRefreshCount(c => c + 1)
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
**示例**:
|
|
232
|
+
```typescript
|
|
233
|
+
// Hook 必须在组件顶层调用,不可在事件回调中调用
|
|
234
|
+
const insets = useSafeAreaInsets();
|
|
235
|
+
|
|
236
|
+
return (
|
|
237
|
+
<View>
|
|
238
|
+
<Text>insets: {JSON.stringify(insets)}</Text>
|
|
239
|
+
</View>
|
|
240
|
+
);
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
> ⚠️ Hook 不能放在按钮 onPress 回调中,必须在组件函数体顶层调用。
|
|
244
|
+
|
|
245
|
+
### 6.3 Context Consumer 模式
|
|
246
|
+
|
|
247
|
+
使用 React Context 的 Consumer 组件,通过 render props 子渲染函数接收 Context 值。**非异步链路**,无需双计数器。
|
|
248
|
+
|
|
249
|
+
**步骤范式**:
|
|
250
|
+
```
|
|
251
|
+
1. 外层用 <Provider> 包裹确保 Context 有值
|
|
252
|
+
2. 使用 <XxxConsumer>{(value) => <Text>{JSON.stringify(value)}</Text>}</XxxConsumer>
|
|
253
|
+
3. 验证 Consumer 子渲染函数接收到的 value 非空
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
**示例**:
|
|
257
|
+
```typescript
|
|
258
|
+
<SafeAreaProvider>
|
|
259
|
+
<SafeAreaConsumer>
|
|
260
|
+
{(insets) => <Text>Consumer value: {JSON.stringify(insets)}</Text>}
|
|
261
|
+
</SafeAreaConsumer>
|
|
262
|
+
</SafeAreaProvider>
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### 6.4 HOC(高阶组件)模式
|
|
266
|
+
|
|
267
|
+
高阶组件在模块顶层定义,将被包装组件包装后渲染。验证 HOC 注入的 props 是否正确传递。
|
|
268
|
+
|
|
269
|
+
**步骤范式**:
|
|
270
|
+
```
|
|
271
|
+
1. 定义被包装组件:function InnerComp(props) { return <Text>{JSON.stringify(props.injected)}</Text> }
|
|
272
|
+
2. 用 HOC 包装:const Wrapped = withXxx(InnerComp)
|
|
273
|
+
3. 在 Provider 内渲染 <Wrapped />
|
|
274
|
+
4. 验证 InnerComp 接收到 HOC 注入的 props
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
**示例**:
|
|
278
|
+
```typescript
|
|
279
|
+
function InnerComponent({ insets }: { insets: EdgeInsets }) {
|
|
280
|
+
return <Text>HOC injected insets: {JSON.stringify(insets)}</Text>;
|
|
281
|
+
}
|
|
282
|
+
const WrappedComponent = withSafeAreaInsets(InnerComponent);
|
|
283
|
+
|
|
284
|
+
// 渲染
|
|
285
|
+
<SafeAreaProvider>
|
|
286
|
+
<WrappedComponent />
|
|
287
|
+
</SafeAreaProvider>
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
### 6.5 常量/变量导出模式
|
|
291
|
+
|
|
292
|
+
模块加载时求值的静态导出值,直接读取即可。**非异步链路,非交互触发**,无需计数器。
|
|
293
|
+
|
|
294
|
+
**步骤范式**:
|
|
295
|
+
```
|
|
296
|
+
1. 在 useEffect 中读取常量值(避免渲染期间副作用)
|
|
297
|
+
2. 通过 setXxx() 更新状态展示
|
|
298
|
+
3. 验证返回值符合预期类型和内容
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
**示例**:
|
|
302
|
+
```typescript
|
|
303
|
+
const [metricsText, setMetricsText] = useState('未获取');
|
|
304
|
+
|
|
305
|
+
useEffect(() => {
|
|
306
|
+
setMetricsText(initialWindowMetrics ? JSON.stringify(initialWindowMetrics) : 'null');
|
|
307
|
+
}, []);
|
|
308
|
+
|
|
309
|
+
return <Text>initialWindowMetrics: {metricsText}</Text>;
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
### 6.6 Context 对象引用模式
|
|
313
|
+
|
|
314
|
+
验证两个 Context 对象是否指向同一引用(废弃别名常见场景)。使用 `===` 严格比较。
|
|
315
|
+
|
|
316
|
+
**步骤范式**:
|
|
317
|
+
```
|
|
318
|
+
1. 声明状态:const [isSame, setIsSame] = useState(false)
|
|
319
|
+
2. 按钮触发比较:setIsSame(ContextA === ContextB)
|
|
320
|
+
3. 展示布尔结果:<Text>相同引用: {isSame.toString()}</Text>
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
**示例**:
|
|
324
|
+
```typescript
|
|
325
|
+
const [isSameContext, setIsSameContext] = useState(false);
|
|
326
|
+
|
|
327
|
+
const handleVerify = () => {
|
|
328
|
+
setIsSameContext(SafeAreaContext === SafeAreaInsetsContext);
|
|
329
|
+
};
|
|
330
|
+
|
|
331
|
+
return <Text>Context 相同: {isSameContext.toString()}</Text>;
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
### 6.7 废弃别名模式
|
|
335
|
+
|
|
336
|
+
`@deprecated` 废弃别名接口的 Demo 设计,核心是验证别名与底层接口行为一致。
|
|
337
|
+
|
|
338
|
+
**步骤范式**:
|
|
339
|
+
```
|
|
340
|
+
1. 同时引入废弃别名和非废弃原始接口
|
|
341
|
+
2. 分别调用/使用两者
|
|
342
|
+
3. 对比返回值或行为是否一致
|
|
343
|
+
4. 若为对象引用(Context/变量),用 === 验证同一性
|
|
344
|
+
5. 在 Demo 描述中标注"废弃接口兼容性验证"
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
**示例**:
|
|
348
|
+
```typescript
|
|
349
|
+
// useSafeArea 是 useSafeAreaInsets 的废弃别名
|
|
350
|
+
const insetsFromAlias = useSafeArea();
|
|
351
|
+
const insetsFromOriginal = useSafeAreaInsets();
|
|
352
|
+
|
|
353
|
+
// 验证返回值一致
|
|
354
|
+
<Text>别名返回: {JSON.stringify(insetsFromAlias)}</Text>
|
|
355
|
+
<Text>原始返回: {JSON.stringify(insetsFromOriginal)}</Text>
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
### 6.8 NativeModules 调用模式
|
|
359
|
+
|
|
360
|
+
```typescript
|
|
361
|
+
import { NativeModules } from 'react-native';
|
|
362
|
+
const { XxxModule } = NativeModules;
|
|
363
|
+
|
|
364
|
+
// Promise
|
|
365
|
+
const result = await XxxModule.someMethod(param);
|
|
366
|
+
|
|
367
|
+
// Callback
|
|
368
|
+
XxxModule.someMethod(param, (error, result) => { ... });
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
### 6.9 NativeEventEmitter 事件监听模式
|
|
372
|
+
|
|
373
|
+
```typescript
|
|
374
|
+
import { NativeModules, NativeEventEmitter } from 'react-native';
|
|
375
|
+
const eventEmitter = new NativeEventEmitter(NativeModules.XxxModule);
|
|
376
|
+
|
|
377
|
+
// 订阅事件(在 useEffect 中注册)
|
|
378
|
+
const subscription = eventEmitter.addListener('eventName', (data) => {
|
|
379
|
+
setXxx(data);
|
|
380
|
+
setCallbackCount(c => c + 1);
|
|
381
|
+
});
|
|
382
|
+
|
|
383
|
+
// 取消订阅(在清理函数中)
|
|
384
|
+
return () => subscription.remove();
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
### 6.10 async/await Promise 调用模式
|
|
388
|
+
|
|
389
|
+
```typescript
|
|
390
|
+
const handlePress = async () => {
|
|
391
|
+
setCallCount(c => c + 1);
|
|
392
|
+
try {
|
|
393
|
+
const result = await SomeModule.doSomething(param);
|
|
394
|
+
setResult(JSON.stringify(result));
|
|
395
|
+
setCallbackCount(c => c + 1);
|
|
396
|
+
} catch (error) {
|
|
397
|
+
setErrorMsg((error as Error).message);
|
|
398
|
+
}
|
|
399
|
+
};
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
### 6.11 React 组件事件回调模式
|
|
403
|
+
|
|
404
|
+
```typescript
|
|
405
|
+
<SomeNativeComponent
|
|
406
|
+
prop1={value1}
|
|
407
|
+
onEvent={(data) => {
|
|
408
|
+
setCallbackCount(c => c + 1);
|
|
409
|
+
setResult(JSON.stringify(data));
|
|
410
|
+
}}
|
|
411
|
+
onError={(err) => setErrorMsg(err.message)}
|
|
412
|
+
/>
|
|
413
|
+
```
|