@hmos-library-adapter/fast 0.0.17-beta.0 → 0.0.17-beta.1
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/node_modules/@hmos-library-adapter/executer/README.md +2 -2
- package/node_modules/@hmos-library-adapter/executer/shared/skill-map.json +5 -1
- package/node_modules/@hmos-library-adapter/executer/shared/skills/arkts-rules/SKILL.md +400 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/CHANGELOG.md +1391 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/COMPATIBILITY.md +53 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/README.md +123 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/SKILL.md +48 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/agents/upgrade-assess-change.md +37 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/agents/upgrade-fix-file.md +23 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/package.json +19 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/26.0.0/beta1-changes-for-all-apps.md +1793 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/26.0.0/beta1-ux-style-and-effect-changes.md +288 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/26.0.0/beta2-changes-for-all-apps.md +148 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/26.0.0/release-changes-for-all-apps.md +662 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/5.0.1(13)/beta3-os-api-behavior-changes.md +652 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/5.0.1(13)/beta3-ux-style-and-effect-changes.md +222 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/5.0.1(13)/release-os-api-behavior-changes.md +444 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/5.0.1(13)/release-ux-style-and-effect-changes.md +221 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/5.0.2(14)/os-api-behavior-changes.md +1767 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/5.0.2(14)/ux-style-and-effect-changes.md +134 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/5.0.3(15)/beta1-os-api-behavior-changes.md +430 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/5.0.3(15)/beta1-ux-style-and-effect-changes.md +49 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/5.0.3(15)/beta2-os-api-behavior-changes.md +240 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/5.0.3(15)/beta2-ux-style-and-effect-changes.md +90 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/5.0.3(15)/release-os-api-behavior-changes.md +69 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/5.1.0(18)/os-api-behavior-changes.md +1294 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/5.1.0(18)/ux-style-and-effect-changes.md +147 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/6.0.0(20)/beta1-os-api-behavior-changes.md +1019 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/6.0.0(20)/beta1-ux-style-and-effect-changes.md +153 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/6.0.0(20)/beta2-os-api-behavior-changes.md +662 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/6.0.0(20)/beta2-ux-style-and-effect-changes.md +78 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/6.0.0(20)/beta3-os-api-behavior-changes.md +167 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/6.0.0(20)/beta5-os-api-behavior-changes.md +52 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/6.1.0(23)/changes-for-all-apps.md +397 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs-index.json +883 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/common/arkts-coding-standards.md +53 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/common/compatibility.md +207 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/common/native-adaptation.md +21 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/common/runtime-functional-tests.md +62 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/common/sdk-versions.md +77 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/common/troubleshooting.md +54 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/common/verification.md +79 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/common/workflow-scan.md +41 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/deprecated/context-migration.md +274 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/deprecated/deprecated-api-adaptation.md +157 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/deprecated/deprecated-api-examples.md +219 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/toolchain/hvigor.md +50 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/upgrade/har-upgrade.md +60 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/upgrade/scanner-missed-cases.md +171 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/upgrade/upgrade-compatibility.md +112 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/upgrade/upgrade-examples.md +289 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/upgrade/upgrade-workflow.md +122 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/references/generate-behavior-policy.mjs +96 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/references/references.mjs +9 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/regression/compare-deprecated.mjs +57 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/regression/compare-golden.mjs +130 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/regression/regress-deprecated.mjs +120 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/test/behavior-catalog-generation.test.mjs +59 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/test/behavior-local-sources.test.mjs +44 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/test/changelog-index.test.mjs +66 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/test/compare-golden.test.mjs +103 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/test/fixtures/behavior/local-sources.csv +5 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/test/references.test.mjs +16 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/test/skill-content.test.mjs +139 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/test/skill-frontmatter.test.mjs +11 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/test/test-suite.test.mjs +65 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/validation/skill-content.mjs +125 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/validation/skill-frontmatter.mjs +6 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/validation/validate-skill.mjs +57 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/CHANGELOG.md +506 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/GOLDEN_VALIDATION.md +42 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/README.md +137 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/behavior/behavior-policy.mjs +117 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/behavior/upgrade-coverage.mjs +29 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/bin/deveco-worker-compat.cjs +21 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/bin/harmony-api-scan.mjs +17 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/core/cli.mjs +416 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/core/deveco.mjs +348 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/core/project.mjs +81 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/core/rules.mjs +425 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/core/runtime-identity.mjs +23 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/core/scan-runner.mjs +521 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/core/sdk-deprecations.mjs +204 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/data/behavior-change-policy.json +4378 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/deprecated/arkts-deprecations.mjs +363 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/deprecated/build-log.mjs +72 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/native/native.mjs +95 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/package.json +16 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/batch-layout.test.mjs +94 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/behavior-policy.test.mjs +75 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/build-log.test.mjs +69 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/cli.test.mjs +102 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/csv.test.mjs +35 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/deprecations.test.mjs +283 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/deveco.test.mjs +262 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/helpers/scan-batch.mjs +10 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/native.test.mjs +108 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/project.test.mjs +42 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/rules.test.mjs +190 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/runtime-identity.test.mjs +53 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/scan-mode.test.mjs +38 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/scan-runner.test.mjs +481 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/scan-scope.test.mjs +110 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/source-inputs.test.mjs +64 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/upgrade.test.mjs +164 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/format/args.mjs +66 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/format/csv.mjs +85 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/format/json5.mjs +92 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/format/upgrade-results.mjs +45 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/format/zip.mjs +87 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/io/fs-utils.mjs +60 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/artifact-layout.mjs +74 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/changelog-index.mjs +29 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/deveco-version.mjs +40 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/document-links.mjs +30 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/errors.mjs +41 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/fs.mjs +72 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/paths.mjs +34 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/process.mjs +154 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/scan-mode.mjs +7 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/scan-statistics.mjs +7 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/scan-version-catalog.json +43 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/scan-versions.mjs +51 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/sdk-layout.mjs +27 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/source-scope.mjs +108 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/source-types.mjs +7 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/version.mjs +76 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/test/deveco-version.test.mjs +50 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/test/document-links.test.mjs +13 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/test/errors.test.mjs +40 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/test/fs-utils.test.mjs +31 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/test/platform-paths.test.mjs +19 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/test/process-utils.test.mjs +68 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/test/scan-versions.test.mjs +26 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/test/sdk-version.test.mjs +17 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/test/upgrade-results.test.mjs +140 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/test-suite.mjs +29 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/templates/deprecated-report.md +86 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/templates/progress.md +150 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/templates/results.md +110 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/templates/upgrade-report.md +105 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/templates/upgrade-spec.md +58 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/templates/upgrade-test-report.md +47 -0
- package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-knowledge/SKILL.md +70 -0
- package/node_modules/@hmos-library-adapter/executer/src/config.js +3 -4
- package/node_modules/@hmos-library-adapter/executer/src/doctor.js +1 -1
- package/node_modules/@hmos-library-adapter/executer/src/install.js +1 -1
- package/node_modules/@hmos-library-adapter/executer/src/paths.js +4 -4
- package/package.json +1 -1
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# HarmonyOS API 兼容性扫描器
|
|
2
|
+
|
|
3
|
+
这是一个面向 macOS 和 Windows 10/11 x64 的确定性命令行工具。行为变更使用 DevEco 内置扫描能力;ArkTS 废弃 API 使用目标 SDK 自带的解析器、ArkUI 语法配置和类型检查器独立检测。它结合变更文档与真实 SDK 声明,输出稳定的 CSV 报告及机器可读的覆盖证据。Windows 在真实 DevEco 金标验收完成前保持实验状态。
|
|
4
|
+
|
|
5
|
+
本目录是扫描引擎的唯一开发源码,随 `harmonyos-api-upgrade-adapter` 一起维护、测试和发布。它保留独立 CLI 能力,但不再从其他仓库或目录同步代码,也不作为独立外部产品发布。
|
|
6
|
+
|
|
7
|
+
配套 Adapter 的 `--mode upgrade` 仅扫描 DevEco 插件的四类非废弃变更,保留逐位置与列信息;单独报告官方文档的规则缺失、无变更版本及工程相关性。两个模式均使用实际编译 SDK 声明,允许 compile SDK 高于 target;deprecated 保留既有报告与范围协议。
|
|
8
|
+
|
|
9
|
+
内置变更资料仅保留 API13 起按版本平铺的 24 篇有效正文,行为来源目录共 188 条,官方总览的条目链接与生效信息由相邻的 `changelogs-index.json` 提供。API 变更清单表已删除:`upgrade` 的插件规则来源及 `deprecated` 的 SDK 废弃识别保持原有流程,废弃结果仍可使用插件文档关联或公开 API 参考页。`full` 模式及其 API 差异表规则引擎、行为自动分类与项目级运行验证分组已删除。剩余文档以英文文件名保存,索引仅登记当前路径和原文哈希,不提供旧路径或别名映射。自定义 `--references` 仍可读取原有目录格式;如需使用整理后的索引,索引文件放在资料根目录旁,命名为 `<资料目录名>-index.json`。
|
|
10
|
+
|
|
11
|
+
## 运行要求
|
|
12
|
+
|
|
13
|
+
- Node.js 20 或更高版本。
|
|
14
|
+
- 不低于目标 SDK 平台版本的 DevEco Studio,并已安装不低于目标的编译 SDK 和 API Change Assistant 组件。目标 API 26 要求 IDE 26.0.0+,目标 API 24/6.1.1(24) 要求 IDE 6.1.1+。
|
|
15
|
+
- 原生模块需要构建时,若工程缺少 `oh_modules`,扫描器会自动调用发现的 `ohpm` 执行 `ohpm install`(10 分钟超时);`ohpm` 不可用时以 `OHPM_UNAVAILABLE` 失败。
|
|
16
|
+
- 显式 `--to` 时要求编译 SDK ≥ 该目标;省略 `--to` 时使用所选 SDK `sdk-pkg.json` 的版本。SDK26/target20 报告 compileSdk=26、targetSdk=20,声明来源与哈希均属于真实 SDK26;废弃项过滤上限为目标 API20。
|
|
17
|
+
|
|
18
|
+
`scan` 和 `inspect-rules` 必须显式传入 `--mode upgrade` 或 `--mode deprecated`;缺失模式、full 或未知模式以 `SCAN_MODE_INVALID` 拒绝,且不读取 SDK、不创建输出目录。有效请求在启动扫描后端前读取所选 IDE 的 `product-info.json`,按三段/四段数字版本的前三段比较最低门槛并保留完整版本。IDE 过低返回 `DEVECO_TARGET_NOT_COVERED`,提示该目标不在当前环境扫描范围内,应降低预期目标版本或升级 DevEco;元数据缺失、损坏或版本无法识别返回 `DEVECO_VERSION_UNRESOLVED`,要求修复本地环境或通过 `--deveco-home` 指定有效安装。不能从 SDK 或目录名猜测 IDE 版本,命令行工具包中的 SDK 不替代 IDE 扫描组件。
|
|
19
|
+
|
|
20
|
+
## 执行扫描
|
|
21
|
+
|
|
22
|
+
```sh
|
|
23
|
+
node ./bin/harmony-api-scan.mjs scan \
|
|
24
|
+
--mode upgrade \
|
|
25
|
+
--project /absolute/path/to/project \
|
|
26
|
+
--sdk /Applications/DevEco-Studio.app/Contents/sdk \
|
|
27
|
+
--from '5.0.0(12)' \
|
|
28
|
+
--to '26.0.0(26) Release' \
|
|
29
|
+
--product default \
|
|
30
|
+
--scan-dir . \
|
|
31
|
+
--native-build auto \
|
|
32
|
+
--batch-size 1000 \
|
|
33
|
+
--output-dir /absolute/path/to/output
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
`--output-dir` 指定输出根目录;默认为工程下的 `.api-change-output`。每次扫描会在输出根目录下新建 `YYYYMMDDHHmmss` 时间戳子目录(同秒冲突时追加 `-2` 递增),本次全部产物写入该子目录,CSV 文件名带相同时间戳。传入 `--mode deprecated` 时仅报告废弃 API:行为/UX/定义变更规则不进入扫描,CSV 中 `Change Type` 只存在 `Deprecated API`;C/C++ 废弃规则仍通过 DevEco 后端检测。行为变更使用 `--mode upgrade`;命令不提供默认模式。
|
|
37
|
+
|
|
38
|
+
SDK 与 DevEco Studio 根目录分离时增加 `--deveco-home <path>`。Windows PowerShell 示例:
|
|
39
|
+
|
|
40
|
+
```powershell
|
|
41
|
+
node .\bin\harmony-api-scan.mjs scan `
|
|
42
|
+
--mode upgrade `
|
|
43
|
+
--project "D:\Harmony Projects\新闻应用" `
|
|
44
|
+
--sdk "D:\Huawei\HarmonyOS-SDK" `
|
|
45
|
+
--deveco-home "C:\Program Files\Huawei\DevEco Studio" `
|
|
46
|
+
--from "5.0.0(12)" `
|
|
47
|
+
--to "26.0.0(26) Release" `
|
|
48
|
+
--product default `
|
|
49
|
+
--scan-dir . `
|
|
50
|
+
--native-build auto `
|
|
51
|
+
--batch-size 1000 `
|
|
52
|
+
--output-dir "D:\Harmony Output"
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Windows 的 `.cmd`/`.bat`、超时进程树和含空格或中文的路径由共享平台层处理;不要在调用方另行拼接 shell 命令。
|
|
56
|
+
目标版本保留完整通道序号,`Beta`、`Beta1`、`Beta2` 和 `Release` 分别比较和选择规则资源。失败时终端 JSON 和 `diagnostics.json` 会记录 `command`、`stage`、`stack`、`cause` 和诊断产物路径。
|
|
57
|
+
|
|
58
|
+
扫描入口通过 CLI 契约识别,不依赖 `api-change-scan.js`、`index.js` 等固定文件名。综合后端支持 ArkTS 与 C/C++;仅发现 `index` 后端时支持 ArkTS,C/C++ 会以 `C_CPP_BACKEND_UNAVAILABLE` 失败并保留完整布局诊断。规则同时检查展开的 `resources/apiChange` 和 `project-api-change-assistant` JAR:按平台版本、API Level 和通道去重,同版本优先使用目录文件,目录缺失的版本直接从 JAR 读取。API 26 规则名可包含或省略 `(26)`,integrated 后端的起止版本参数使用选中文件的实际基名,无需在 DevEco 安装目录解压或重命名文件。
|
|
59
|
+
|
|
60
|
+
行为/UX 变更区间为 `(from, to]`,但 API 12 固定作为已适配基线,其规则不进入扫描后端并在 `coverage.json` 中记录排除原因。策略来源文档在哈希校验前会将 CRLF/CR 统一为 LF,换行符差异不影响内容完整性校验。SDK 声明索引与 ArkTS compiler host 使用相同的平台文件身份,兼容 Windows 的分隔符和大小写差异。`index` 后端保留所选模块解析上下文;限定范围时使用 `--scanFilePaths`,按模块分组并按命令行长度分批。当 DevEco 入口请求缺失的 `ApiScan.worker.ts` 时,仅在子进程内将它定向同目录已安装的 `worker.js`。API 定义变更仍按 `(from, to]`;废弃 API 按目标 SDK 全量状态检测。可重复传入 `--scan-module <根配置模块名>` 或 `--scan-dir <目录>`。同类选择取并集,两类同时指定取交集;已注册的工程外模块受支持。模块扫描使用所选模块路径,目录扫描使用所选文件集合,不支持准确范围时返回 `SCAN_SCOPE_UNSUPPORTED`,不扩大到整个工程。目录内未被当前构建引用的源码也会报告;最终报告再次校验实际文件集合;`oh_modules`、`node_modules`、构建目录、`.hvigor`、测试目录及 Hvigor 构建脚本不作为应用扫描源码;依赖声明仅供类型解析。
|
|
61
|
+
|
|
62
|
+
SDK 声明无法解析、系统模块/接口未解析,或源码、构建配置、已分析依赖、SDK/解析器在发布前发生变化时,严格扫描失败。失败原因保存到 diagnostics/完整扫描 JSON,不得声称 `COMPLETE`。无关非系统模块的缺失导出记录为显式类型证据警告;不会按工程名绕过。C++ 超时仍为非阻断异常,明确标记结果可能不完整并允许后续流程继续。
|
|
63
|
+
|
|
64
|
+
SDK 内部缺失导出会按工程实际使用的声明和公开导出分析影响;证明无关时记为 `UNUSED_SDK_IMPORT_NOT_RESOLVED` 并保留证明,相关缺失仍阻断。不按模块名硬编码豁免。API Level 简写如 `--from 13` 由与 Adapter 共用的版本入口解析。
|
|
65
|
+
废弃符号的目录键由同一原始 SDK AST 节点的 SourceFile 和起始位置组成;Windows 上的类型检查器克隆节点不会因另一种路径分隔符而脱离废弃目录。
|
|
66
|
+
目录另建平台规范化位置索引,在原始文件名仍为反斜杠时也能与正斜杠索引条目对齐。
|
|
67
|
+
|
|
68
|
+
输出文件(位于 `<输出根>/<时间戳>/`,`<ts>` 为本次运行时间戳):
|
|
69
|
+
|
|
70
|
+
两类新批次统一采用 `outputLayout.schemaVersion=4`,以 `mode` 区分功能。`deliveryDirectory` 为批次下的 `upgrade/` 或 `deprecated/`,原始CSV在扫描时直接写入该目录:
|
|
71
|
+
|
|
72
|
+
| 模式 | outputCsv / outputLayout.rawCsv | outputLayout.adaptedCsv |
|
|
73
|
+
| --- | --- | --- |
|
|
74
|
+
| upgrade | upgrade/scan-results-<12位批次ID>.csv | upgrade/adapted-results-<同批次ID>.csv |
|
|
75
|
+
| deprecated | deprecated/apiChange_<时间戳>.csv | deprecated/adapted-results-<同批次ID>.csv |
|
|
76
|
+
|
|
77
|
+
adaptedCsv是后续模型结果的目标路径,scanner不生成或覆盖该表。原始CSV字段与扫描JSON自身schema不变。批次元数据位于 `.internal/scan-batch.json`,扫描JSON、coverage、diagnostics及废弃验证CSV位于 `.internal/scanner/`;废弃时间戳包含同秒冲突后缀,和批次目录一致。upgrade不生成空验证CSV,返回 `validationCsv: null`。模型的报告、进度、分组和验证证据位于对应功能目录,不增加adaptation层。
|
|
78
|
+
|
|
79
|
+
所有路径由返回字段及outputLayout提供。`batchArtifactPaths(directory, batchId, mode)`构造新布局;仅生成当前布局4,不提供旧批次读取器或旧路径包装。历史CSV作为普通输入由模型导入新批次,保留原始字节与来源,不恢复旧批次状态。下列文件说明仅用于deprecated,原始CSV位于deprecated/,其余扫描证据位于.internal/scanner/:
|
|
80
|
+
|
|
81
|
+
- `apiChange_<ts>.csv`:仅包含需要修改或无法静态证明兼容、需要人工确认的结果;`Title` 列为超链接公式,指向官方变更文档或 API 参考页。
|
|
82
|
+
- `apiChange_<ts>.validation.csv`:保留既有表头的空验证清单,不再生成 full 的项目级运行验证分组。
|
|
83
|
+
- `apiChange_<ts>.scan.json`(schema v4):保留全部命中、`actionGroups`、`validationGroups`、静态证据和源码/SDK 哈希。
|
|
84
|
+
- `coverage.json`
|
|
85
|
+
- `diagnostics.json`
|
|
86
|
+
|
|
87
|
+
主扫描 CSV 按模式输出固定列序:
|
|
88
|
+
|
|
89
|
+
| 模式 | 列 |
|
|
90
|
+
| --- | --- |
|
|
91
|
+
| upgrade(9列) | Api Definition、Language、Changed in SDK、Affected Versions、Title、Code Location、Fixed、Change Type、Rule ID |
|
|
92
|
+
| deprecated(8列) | Api Definition、Language、Changed in SDK、Title、Code Location、Fixed、Change Type、Replacement API |
|
|
93
|
+
|
|
94
|
+
`Title` 使用 `=HYPERLINK()` 公式:行为变更行链接官方变更文档;废弃行优先链接关联变更文档 URL,公开 `@ohos.<module>` 模块回退到 `js-apis-<module>` API 参考页,无可靠公开链接时保持纯文字。`Code Location` 保留 `文件:行号`。同一行多个调用即使显示字段相同也分别输出;列号、API Symbol ID、来源、废弃时间及其余元数据保留在完整扫描 JSON 中,findingId 的完整字段计算口径保持。
|
|
95
|
+
|
|
96
|
+
废弃版本没有可靠平台映射时 `Changed in SDK` 留空,准确 API Level 从 JSON 的 `Deprecated Since` 读取,不伪造版本。历史 CSV 导入时保留原始字节和全部字段;适配结果表继承实际输入列,不补回新表已移出的字段。
|
|
97
|
+
|
|
98
|
+
`SDK_STATE` 行由真实接收者及选中的重载决定,不会把现代 UIContext 或业务同名方法当成旧全局 API;完整 JSON 中的 `Source Reference` 可直接指向 SDK 声明。替代方案从同一准确声明的 `@deprecated` 注释块获取,禁止串用其他成员/重载。SDK 废弃状态不会被同名 API 的扩参等兼容性变更抵消。
|
|
99
|
+
|
|
100
|
+
## 可选编译日志导入
|
|
101
|
+
|
|
102
|
+
扫描不遍历第三方依赖源码。提供 `--build-log <path> --build-evidence <path>` 时,才允许导入该日志中的 `oh_modules` 告警。配套 JSON 必须包含:
|
|
103
|
+
|
|
104
|
+
```json
|
|
105
|
+
{
|
|
106
|
+
"schemaVersion": 1,
|
|
107
|
+
"projectRoot": "/absolute/build/project",
|
|
108
|
+
"product": "default",
|
|
109
|
+
"status": "PASSED",
|
|
110
|
+
"nonIncremental": true,
|
|
111
|
+
"logHash": "SHA256 of build log",
|
|
112
|
+
"sourceSnapshot": "matching source snapshot",
|
|
113
|
+
"buildProfileHash": "matching build-profile hash",
|
|
114
|
+
"sdkSnapshot": "matching SDK catalog snapshot",
|
|
115
|
+
"targetSdk": "26.0.0(26) Release"
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
导入行标记 `BUILD_LOG`、`DEPENDENCY`,禁止自动修改第三方代码。可选 `apiBindings` 用文件、行、列、告警符号和 `symbolId` 关联准确 SDK 声明;未绑定的依赖告警保留为 `COMPILER_ONLY`,需升级依赖/人工确认。没有配套证据的历史日志只用于对比,不导入主 CSV;证据不匹配直接拒绝。
|
|
120
|
+
|
|
121
|
+
已证明兼容的结果不会写入 CSV,例如参数类型范围扩大、成员从子类迁移到父类、能力范围扩大、扫描区间内相互抵消的能力变更、删除错误码,以及 `TextReader.init` 新增可选权限。扫描器还会识别工程已经采用 Stage 模型的事实,并对 API 变更清单中的调用签名做保守的类型包含判断;目前仅证明 `ResourceStr` 等已知别名扩展、`Optional<T>` 包装和新增尾部可选参数,不会因参数改名或无法展开的命名类型而推断兼容。过滤结果仍保留在 `apiChange.scan.json` 中,并记录旧/新声明或工程模型等确定性 `applicabilityProof`。无法静态证明兼容的结果继续进入 CSV,交由后续适配流程核对源码实参和业务条件。
|
|
122
|
+
|
|
123
|
+
upgrade 保留全部插件命中,是否需要适配由模型完整阅读原文和工程后评估。废弃 API 的 `Replacement API` 提供替代提示,准确的 `Replacement Source` 和目标 SDK `@useinstead` 证据从完整 JSON 读取,供后续 skill 完成代码迁移和验证。
|
|
124
|
+
|
|
125
|
+
可使用 `inspect-rules` 在不扫描应用工程的情况下校验规则覆盖情况。
|
|
126
|
+
|
|
127
|
+
跨平台比较前必须核对 `diagnostics.json` 的 `sourceSnapshot`、目标 SDK 版本和 `deprecationCatalog.sdkSnapshot`。废弃 API 依据目标 SDK 声明全量状态检测,因此 Beta 与 Release 快照的行数差异不是平台差异。输入快照一致时,应读取完整 JSON,按 `API Symbol ID + Code Location + Column` 比较并归一化主机绝对路径。
|
|
128
|
+
|
|
129
|
+
可使用 `node scripts/maintenance/regression/compare-golden.mjs --golden <official.csv> --actual <apiChange.csv> --scan-json <apiChange.scan.json> --project <project>` 比较 DevEco 规则完整覆盖率。精简废弃CSV必须传入扫描JSON,旧的完整CSV仍支持单独比较。传入扫描 JSON 时先核对实际 CSV 全部可见字段和重复计数,再从 JSON 取得完整来源、符号和过滤记录;不匹配直接报错。已按文档过滤的金标条目通过 scan JSON 计入覆盖,但不要求重新出现在主 CSV;主 CSV 中仍需处理的文档规则会保留在 `actualAdditionalDocumentRules` 中。
|
|
130
|
+
|
|
131
|
+
废弃金标使用 `node scripts/maintenance/regression/compare-deprecated.mjs --project <project> --build-log <log> --scan-json <json> [--build-project-root <original root>] [--build-evidence <json>]`,按准确行/列/符号对齐。编译没有告警不是负例:仅扫描器发现的记录保留声明证据,不自动删除。没有匹配快照的旧日志明确标为未验证。
|
|
132
|
+
|
|
133
|
+
`node scripts/maintenance/regression/regress-deprecated.mjs --sdk <sdk> --output-dir <new temporary directory> --project <repo> --ref <revision>` 可重复指定工程/版本:建立隔离副本、复制现有依赖与缺失 rawfile 资源、不复制构建缓存,执行环境自检、非增量 assembleApp、两次完整扫描及金标对比。`--use-project-build-profile` 仅在副本中采用当前工程配置,并记录来源/哈希;`--reuse-checkouts` 仅复用 origin 和 HEAD 均匹配的已有副本。不得用历史日志冒充此次全量构建证据。
|
|
134
|
+
|
|
135
|
+
## 开发与发布约定
|
|
136
|
+
|
|
137
|
+
每次代码修改完成后,必须同步更新 `CHANGELOG.md` 和 `package.json` 中的语义化版本号,完成相关测试与产物校验,并在对应本地 Git 仓库提交修改。未发布内容先记录在变更日志的“未发布”章节,发布时再移动到带日期的版本章节。
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { sha256 } from '../../shared/io/fs-utils.mjs';
|
|
4
|
+
|
|
5
|
+
export function behaviorSourceHash(content) {
|
|
6
|
+
const text = Buffer.isBuffer(content) ? content.toString('utf8') : String(content);
|
|
7
|
+
return sha256(text.replace(/\r\n?/g, '\n'));
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const VALIDATION_HEADERS = [
|
|
11
|
+
'Policy ID', 'Changed in SDK', 'Title', 'Change Type', 'Validation Type',
|
|
12
|
+
'Activation Condition', 'Occurrence Count', 'Affected Files', 'Sample Locations',
|
|
13
|
+
'Validation Guidance', 'Source Reference',
|
|
14
|
+
];
|
|
15
|
+
|
|
16
|
+
function sourceFile(location) {
|
|
17
|
+
return String(location ?? '').replace(/:\d+(?::\d+)?$/, '');
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export async function loadBehaviorPolicy(policyPath) {
|
|
21
|
+
const document = JSON.parse(await readFile(policyPath, 'utf8'));
|
|
22
|
+
if (document.schemaVersion !== 1 || !Array.isArray(document.entries)) {
|
|
23
|
+
throw new Error('Behavior policy catalog must use schemaVersion 1');
|
|
24
|
+
}
|
|
25
|
+
if (document.entryCount !== document.entries.length) {
|
|
26
|
+
throw new Error('Behavior policy catalog entryCount does not match entries');
|
|
27
|
+
}
|
|
28
|
+
const ids = new Set();
|
|
29
|
+
const sources = new Set();
|
|
30
|
+
for (const entry of document.entries) {
|
|
31
|
+
if (ids.has(entry.policyId)) throw new Error(`Duplicate behavior policy ID: ${entry.policyId}`);
|
|
32
|
+
if (sources.has(entry.sourceReference)) throw new Error(`Duplicate behavior policy source: ${entry.sourceReference}`);
|
|
33
|
+
ids.add(entry.policyId);
|
|
34
|
+
sources.add(entry.sourceReference);
|
|
35
|
+
}
|
|
36
|
+
return document;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export async function validateBehaviorPolicySources(document, referenceRoot) {
|
|
40
|
+
const hashes = new Map();
|
|
41
|
+
const stale = [];
|
|
42
|
+
for (const entry of document.entries) {
|
|
43
|
+
const match = entry.sourceReference.match(/^(.*):(\d+)$/);
|
|
44
|
+
if (!match) {
|
|
45
|
+
stale.push({ policyId: entry.policyId, sourceReference: entry.sourceReference, reason: 'INVALID_SOURCE_REFERENCE' });
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
const file = path.join(referenceRoot, match[1]);
|
|
49
|
+
if (!hashes.has(file)) {
|
|
50
|
+
try { hashes.set(file, { found: true, hash: behaviorSourceHash(await readFile(file)) }); }
|
|
51
|
+
catch { hashes.set(file, { found: false, hash: null }); }
|
|
52
|
+
}
|
|
53
|
+
const source = hashes.get(file);
|
|
54
|
+
if (!source.found) {
|
|
55
|
+
stale.push({ policyId: entry.policyId, sourceReference: entry.sourceReference, reason: 'SOURCE_NOT_FOUND' });
|
|
56
|
+
} else if (source.hash !== entry.sourceFileHash) {
|
|
57
|
+
stale.push({ policyId: entry.policyId, sourceReference: entry.sourceReference,
|
|
58
|
+
reason: 'SOURCE_HASH_CHANGED', expectedHash: entry.sourceFileHash, actualHash: source.hash });
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (stale.length) {
|
|
62
|
+
const error = new Error(`Behavior policy catalog is stale: ${stale.length} source mismatches`);
|
|
63
|
+
error.code = 'BEHAVIOR_POLICY_STALE';
|
|
64
|
+
error.details = stale.slice(0, 30);
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
status: 'COMPLETE',
|
|
69
|
+
entryCount: document.entries.length,
|
|
70
|
+
sourceFileCount: hashes.size,
|
|
71
|
+
counts: document.counts,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function groupActions(findings) {
|
|
76
|
+
const groups = new Map();
|
|
77
|
+
for (const finding of findings.filter(item => item.includedInCsv)) {
|
|
78
|
+
const key = ['OCCURRENCE', finding.occurrenceId ?? finding.findingId ?? sha256(JSON.stringify(finding))].join('\0');
|
|
79
|
+
const group = groups.get(key) ?? {
|
|
80
|
+
actionGroupId: `action-${sha256(key).slice(0, 20)}`,
|
|
81
|
+
actionType: finding.actionType ?? 'CODE_REVIEW_REQUIRED',
|
|
82
|
+
policyId: finding.policyId ?? '',
|
|
83
|
+
ruleId: finding['Rule ID'],
|
|
84
|
+
sourceFile: sourceFile(finding['Code Location']),
|
|
85
|
+
triggerEvidence: finding.triggerEvidence ?? '',
|
|
86
|
+
occurrences: [],
|
|
87
|
+
};
|
|
88
|
+
group.occurrences.push(finding);
|
|
89
|
+
groups.set(key, group);
|
|
90
|
+
}
|
|
91
|
+
return [...groups.values()].map(group => ({
|
|
92
|
+
...group,
|
|
93
|
+
occurrenceCount: group.occurrences.length,
|
|
94
|
+
})).sort((left, right) => left.actionGroupId.localeCompare(right.actionGroupId));
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function actionRows(groups) {
|
|
98
|
+
return groups.map(group => ({
|
|
99
|
+
...group.occurrences[0],
|
|
100
|
+
'Action Type': group.actionType,
|
|
101
|
+
'Policy ID': group.policyId,
|
|
102
|
+
'Occurrence Count': group.occurrenceCount,
|
|
103
|
+
'Trigger Evidence': group.triggerEvidence,
|
|
104
|
+
actionGroupId: group.actionGroupId,
|
|
105
|
+
}));
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export function classifyDeprecatedFindings(findings) {
|
|
109
|
+
const annotated = findings.map(finding => ({
|
|
110
|
+
...finding,
|
|
111
|
+
actionType: finding.actionType ?? 'CODE_REVIEW_REQUIRED',
|
|
112
|
+
policyId: finding.policyId ?? '',
|
|
113
|
+
triggerEvidence: finding.triggerEvidence ?? '',
|
|
114
|
+
}));
|
|
115
|
+
const actionGroups = groupActions(annotated);
|
|
116
|
+
return { findings: annotated, actionGroups, actionRows: actionRows(actionGroups), validationGroups: [], validationRows: [] };
|
|
117
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { API_PLATFORM } from '../../shared/platform/version.mjs';
|
|
2
|
+
import { compareHarmonyVersions as compareVersions } from '../../shared/platform/version.mjs';
|
|
3
|
+
|
|
4
|
+
export function upgradeRuleCoverage({ policies, rules, excluded = [], range }) {
|
|
5
|
+
const inRange = entry => {
|
|
6
|
+
if (entry.apiLevel < range.start.apiLevel || entry.apiLevel > range.end.apiLevel) return false;
|
|
7
|
+
try { return compareVersions(entry.changedInSdk, range.start) > 0 && compareVersions(entry.changedInSdk, range.end) <= 0; }
|
|
8
|
+
catch { return entry.apiLevel > range.start.apiLevel && entry.apiLevel <= range.end.apiLevel; }
|
|
9
|
+
};
|
|
10
|
+
const entries = policies.filter(inRange).map(entry => {
|
|
11
|
+
const matches = rules.filter(rule => rule.sourceReference === entry.sourceReference);
|
|
12
|
+
const exclusion = excluded.find(item => item.sourceReference === entry.sourceReference && item.reason === 'NO_AFFECTED_APIS');
|
|
13
|
+
const deprecated = excluded.find(item => item.title === entry.title && item.reason === 'UPGRADE_EXCLUDES_DEPRECATED');
|
|
14
|
+
return { sourceReference: entry.sourceReference, sourceUrl: entry.sourceUrl ?? null,
|
|
15
|
+
changedInSdk: entry.changedInSdk, title: entry.title, apiLevel: entry.apiLevel,
|
|
16
|
+
status: matches.length ? 'RULE_AVAILABLE' : deprecated ? 'EXCLUDED_DEPRECATED' : exclusion ? 'NOT_SCANNABLE_NO_AFFECTED_APIS' : 'MISSING_RULE',
|
|
17
|
+
ruleIds: matches.map(rule => rule.ruleId) };
|
|
18
|
+
});
|
|
19
|
+
const versions = [...API_PLATFORM.keys()].filter(api => api >= 13 && api >= range.start.apiLevel && api <= range.end.apiLevel).map(api => {
|
|
20
|
+
const official = entries.filter(entry => entry.apiLevel === api);
|
|
21
|
+
return { apiLevel: api, officialChangeCount: official.length,
|
|
22
|
+
status: official.some(entry => entry.status === 'MISSING_RULE') ? 'MISSING_RULE'
|
|
23
|
+
: official.length ? 'DOCUMENTED_CHANGES' : api === range.start.apiLevel ? 'START_BASELINE_EXCLUDED' : 'NO_OFFICIAL_CHANGES' };
|
|
24
|
+
});
|
|
25
|
+
const missing = entries.filter(entry => entry.status === 'MISSING_RULE');
|
|
26
|
+
return { status: missing.length ? 'INCOMPLETE' : 'COMPLETE', interval: '(oldTarget,newTarget]', versions, entries,
|
|
27
|
+
ruleCount: rules.filter(rule => rule.provider === 'DEVECO').length,
|
|
28
|
+
missingRuleCount: missing.length, missing };
|
|
29
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const { existsSync } = require('node:fs');
|
|
2
|
+
const { syncBuiltinESMExports } = require('node:module');
|
|
3
|
+
const path = require('node:path');
|
|
4
|
+
const workerThreads = require('node:worker_threads');
|
|
5
|
+
|
|
6
|
+
const OriginalWorker = workerThreads.Worker;
|
|
7
|
+
|
|
8
|
+
workerThreads.Worker = class DevEcoWorkerCompat extends OriginalWorker {
|
|
9
|
+
constructor(filename, options) {
|
|
10
|
+
if (typeof filename === 'string'
|
|
11
|
+
&& path.basename(filename).toLowerCase() === 'apiscan.worker.ts'
|
|
12
|
+
&& !existsSync(filename)) {
|
|
13
|
+
const scannerEntry = process.argv[1];
|
|
14
|
+
const bundledWorker = scannerEntry ? path.join(path.dirname(scannerEntry), 'worker.js') : null;
|
|
15
|
+
if (bundledWorker && existsSync(bundledWorker)) filename = bundledWorker;
|
|
16
|
+
}
|
|
17
|
+
super(filename, options);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
syncBuiltinESMExports();
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { execute, usage } from '../core/cli.mjs';
|
|
3
|
+
import { serializeError } from '../../shared/platform/errors.mjs';
|
|
4
|
+
|
|
5
|
+
Error.stackTraceLimit = Math.max(Error.stackTraceLimit, 50);
|
|
6
|
+
|
|
7
|
+
try {
|
|
8
|
+
const result = await execute(process.argv.slice(2));
|
|
9
|
+
process.stdout.write(`${JSON.stringify({ ok: true, result }, null, 2)}\n`);
|
|
10
|
+
} catch (error) {
|
|
11
|
+
if (error && typeof error === 'object') error.code ??= 'SCAN_FAILED';
|
|
12
|
+
process.stderr.write(`${JSON.stringify({ ok: false,
|
|
13
|
+
error: serializeError(error, { command: process.argv[2] }) }, null, 2)}\n`);
|
|
14
|
+
process.exitCode = 1;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export { usage };
|