expo-harmony-toolkit 1.7.2 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/README.en.md +25 -11
  2. package/README.md +27 -13
  3. package/build/core/autolinking.d.ts +10 -0
  4. package/build/core/autolinking.js +421 -0
  5. package/build/core/build/commands.d.ts +19 -0
  6. package/build/core/build/commands.js +61 -0
  7. package/build/core/build/compatibilityShims.d.ts +1 -0
  8. package/build/core/build/compatibilityShims.js +272 -0
  9. package/build/core/build/localHar.d.ts +13 -0
  10. package/build/core/build/localHar.js +337 -0
  11. package/build/core/build/reporting.d.ts +19 -0
  12. package/build/core/build/reporting.js +67 -0
  13. package/build/core/build/rnohCompatibility.d.ts +1 -0
  14. package/build/core/build/rnohCompatibility.js +38 -0
  15. package/build/core/build.d.ts +4 -12
  16. package/build/core/build.js +70 -762
  17. package/build/core/constants.d.ts +2 -1
  18. package/build/core/constants.js +3 -2
  19. package/build/core/dependencyInspection.d.ts +2 -0
  20. package/build/core/dependencyInspection.js +130 -0
  21. package/build/core/env.js +1 -1
  22. package/build/core/report.js +162 -10
  23. package/build/core/signing.d.ts +2 -0
  24. package/build/core/signing.js +30 -0
  25. package/build/core/template/capabilityRegistry.d.ts +9 -0
  26. package/build/core/template/capabilityRegistry.js +84 -0
  27. package/build/core/template/expoModulesCoreShim.d.ts +2 -0
  28. package/build/core/template/expoModulesCoreShim.js +279 -0
  29. package/build/core/template/metro.d.ts +2 -0
  30. package/build/core/template/metro.js +213 -0
  31. package/build/core/template/nativeFiles.d.ts +8 -0
  32. package/build/core/template/nativeFiles.js +333 -0
  33. package/build/core/template/renderers/camera.d.ts +4 -0
  34. package/build/core/template/renderers/camera.js +612 -0
  35. package/build/core/template/renderers/fileSystem.d.ts +4 -0
  36. package/build/core/template/renderers/fileSystem.js +814 -0
  37. package/build/core/template/renderers/imagePicker.d.ts +4 -0
  38. package/build/core/template/renderers/imagePicker.js +753 -0
  39. package/build/core/template/renderers/location.d.ts +4 -0
  40. package/build/core/template/renderers/location.js +836 -0
  41. package/build/core/template/runtimeShims.d.ts +2 -0
  42. package/build/core/template/runtimeShims.js +192 -0
  43. package/build/core/template/support.d.ts +11 -0
  44. package/build/core/template/support.js +108 -0
  45. package/build/core/template.d.ts +3 -6
  46. package/build/core/template.js +49 -4457
  47. package/build/data/capabilities.js +21 -4
  48. package/build/data/dependencyCatalog.js +10 -0
  49. package/build/data/publicDocs.d.ts +11 -0
  50. package/build/data/publicDocs.js +28 -0
  51. package/build/data/validatedMatrices.js +9 -1
  52. package/build/docs/render.d.ts +9 -0
  53. package/build/docs/render.js +250 -0
  54. package/build/types.d.ts +19 -0
  55. package/docs/cli-build.md +1 -1
  56. package/docs/npm-release.md +1 -0
  57. package/docs/official-app-shell-sample.md +2 -1
  58. package/docs/official-minimal-sample.md +2 -1
  59. package/docs/official-native-capabilities-sample.md +12 -2
  60. package/docs/official-ui-stack-sample.md +2 -1
  61. package/docs/roadmap.md +146 -51
  62. package/docs/signing-and-release.md +3 -0
  63. package/docs/support-matrix.md +59 -13
  64. package/package.json +13 -5
  65. package/docs/v1.5.1-acceptance.md +0 -385
  66. package/docs/v1.6.0-acceptance.md +0 -193
  67. package/docs/v1.7.0-acceptance.md +0 -111
  68. package/docs/v1.7.1-acceptance.md +0 -111
  69. package/docs/v1.7.2-acceptance.md +0 -37
package/README.en.md CHANGED
@@ -9,7 +9,7 @@
9
9
  <p>
10
10
  <a href="https://github.com/BlackishGreen33/Expo-Harmony-Toolkit/actions/workflows/ci.yml"><img alt="Checks" src="https://img.shields.io/badge/checks-passing-16a34a?style=flat-square&logo=githubactions&logoColor=white"></a>
11
11
  <a href="./LICENSE"><img alt="License" src="https://img.shields.io/badge/license-MIT-0f766e?style=flat-square"></a>
12
- <a href="https://github.com/BlackishGreen33/Expo-Harmony-Toolkit/releases"><img alt="Version" src="https://img.shields.io/badge/version-v1.7.2-111827?style=flat-square"></a>
12
+ <a href="https://github.com/BlackishGreen33/Expo-Harmony-Toolkit/releases"><img alt="Version" src="https://img.shields.io/badge/version-v1.8.0-111827?style=flat-square"></a>
13
13
  <a href="./docs/support-matrix.md"><img alt="Matrix" src="https://img.shields.io/badge/matrix-expo55--rnoh082--ui--stack-2563eb?style=flat-square"></a>
14
14
  <img alt="Input" src="https://img.shields.io/badge/input-Managed%2FCNG-059669?style=flat-square">
15
15
  </p>
@@ -24,7 +24,7 @@
24
24
  </div>
25
25
 
26
26
  > [!IMPORTANT]
27
- > `v1.7` keeps the `verified + preview + experimental` model and moves `expo-location` and `expo-camera` into `preview`. Starting with this documentation refresh, the public promise is tighter: `latest` only carries fully accepted `verified` capabilities, while `next` is reserved for preview fast-track work. The roadmap still targets `Managed/CNG Core Expo Coverage` first and long-tail extension coverage second.
27
+ > `v1.8` keeps the `verified + preview + experimental` model and continues to keep `expo-location` and `expo-camera` in `preview`. The public promise remains tighter: `latest` only carries fully accepted `verified` capabilities, while `next` is reserved for preview fast-track work. The roadmap now defines `v2.0.0` itself as “reliable Harmony packaging for any Expo project”, so the intermediate versions will keep getting split smaller, but that still does not widen the current `verified` boundary yet.
28
28
 
29
29
  > [!TIP]
30
30
  > The two validated `@react-native-oh-tpl/*` adapters in the public matrix are currently consumed via exact Git URLs and commits. For repository development and the official UI-stack sample, prefer `pnpm install --ignore-scripts` so adapter prepare hooks do not fail on private upstream resources.
@@ -45,9 +45,10 @@
45
45
 
46
46
  ## Current Status
47
47
 
48
+ <!-- GENERATED:readme-current-status:start -->
48
49
  | Item | Status |
49
50
  | --- | --- |
50
- | Current version | `v1.7.2` |
51
+ | Current version | `v1.8.0` |
51
52
  | Support model | `verified + preview + experimental` |
52
53
  | Public `verified` matrix | `expo55-rnoh082-ui-stack` |
53
54
  | Supported input | Managed/CNG Expo projects |
@@ -55,11 +56,12 @@
55
56
  | `preview` native capabilities | `expo-file-system`, `expo-image-picker`, `expo-location`, `expo-camera` |
56
57
  | `experimental` capabilities | `expo-notifications`, `react-native-gesture-handler` |
57
58
  | Release tracks | `latest` = fully accepted `verified` only; `next` = preview fast track |
58
- | Capability telemetry | `runtimeMode` + `evidence(bundle/debugBuild/device/release)` |
59
+ | Capability telemetry | `runtimeMode` + `evidence(...)` + `evidenceSource(...)` + `coverageProfile` + `nextActions` |
59
60
  | Build path | `doctor -> init -> bundle -> build-hap` |
60
61
  | Primary sample | `examples/official-ui-stack-sample` |
61
62
  | Preview sample | `examples/official-native-capabilities-sample` |
62
63
  | Supporting onboarding samples | `examples/official-app-shell-sample`, `examples/official-minimal-sample` |
64
+ <!-- GENERATED:readme-current-status:end -->
63
65
 
64
66
  <details>
65
67
  <summary><strong>Still outside the verified public promise</strong></summary>
@@ -170,28 +172,33 @@ Common decision points:
170
172
 
171
173
  ## Support Matrix
172
174
 
173
- `v1.7` keeps tiered support and now exposes capability promotion distance in public reports:
174
-
175
+ <!-- GENERATED:readme-support-matrix:start -->
175
176
  - `verified`: the only public matrix remains `expo55-rnoh082-ui-stack`
176
177
  - `preview`: `expo-file-system`, `expo-image-picker`, `expo-location`, `expo-camera`
177
178
  - `experimental`: `expo-notifications`, `react-native-gesture-handler`
178
179
 
179
180
  `doctor --strict` still means `verified` only. `doctor --target-tier preview` allows the same runtime matrix plus preview-tier capabilities, but that does not promote them into the formal public promise.
180
181
 
181
- Starting in this refresh:
182
-
183
182
  - `doctor-report.json` exposes `capabilities[].runtimeMode`
184
183
  - `doctor-report.json` and `toolkit-config.json` expose `evidence.bundle`, `evidence.debugBuild`, `evidence.device`, and `evidence.release`
184
+ - `doctor-report.json` and `toolkit-config.json` expose `evidenceSource.bundle`, `evidenceSource.debugBuild`, `evidenceSource.device`, and `evidenceSource.release`
185
+ - `doctor-report.json` and `toolkit-config.json` also expose `coverageProfile` plus ordered `nextActions`
185
186
  - `runtimeMode=shim` means the capability still has not reached a verified runtime path even if bundling and debug-build scaffolding already exist
187
+ - `evidenceSource.device=manual-doc` means the current device signal comes from manual acceptance records, not automated verification
188
+ <!-- GENERATED:readme-support-matrix:end -->
189
+
190
+ Starting in this refresh, `doctor` also emits `buildabilityRisk`, `coverageProfile`, `gapCategory`, and ordered `nextActions` so matrix drift, official-module gaps, third-party native blockers, and bare-workflow tracks no longer get described the same way. This does not relax any gate; it only improves diagnosis.
186
191
 
187
192
  See [docs/support-matrix.md](./docs/support-matrix.md) for the full allowlist, pairing rules, exact specifiers, issue codes, and release gates.
188
193
 
194
+ If you want the `v1.8.x` promotion board directly, use [acceptance/v1.8.x-capability-board.md](./acceptance/v1.8.x-capability-board.md).
195
+
189
196
  ## Official Samples
190
197
 
191
198
  - `examples/official-ui-stack-sample`
192
199
  The current public main sample, covering router, linking, constants, SVG, reanimated, and the Harmony sidecar build flow.
193
200
  - `examples/official-native-capabilities-sample`
194
- The `v1.7.x` Batch A+B preview walkthrough sample, covering the supported core subsets for `expo-file-system`, `expo-image-picker`, `expo-location`, and `expo-camera` plus permission, bundle, and debug-build validation.
201
+ The `v1.8.x` preview walkthrough sample, covering the supported core subsets for `expo-file-system`, `expo-image-picker`, `expo-location`, and `expo-camera` plus permission, bundle, debug-build validation, and per-capability acceptance tracking.
195
202
  - `examples/official-app-shell-sample`
196
203
  The minimal App Shell onboarding sample that demonstrates router, linking, constants, pathname, observed URL, and a generated deep-link flow.
197
204
  - `examples/official-minimal-sample`
@@ -226,10 +233,10 @@ Key managed outputs include:
226
233
  - `harmony/entry/src/main/cpp/autolinking.cmake`
227
234
  - `metro.harmony.config.js`
228
235
  - `.expo-harmony/manifest.json`
236
+ - `.expo-harmony/toolkit-config.json`
229
237
  - `.expo-harmony/doctor-report.json`
230
238
  - `.expo-harmony/env-report.json`
231
239
  - `.expo-harmony/build-report.json`
232
- - `.expo-harmony/toolkit-config.json`
233
240
 
234
241
  ## Release And Validation
235
242
 
@@ -249,6 +256,12 @@ Automatic publishing still defaults to hosted CI only, but now splits into two t
249
256
  - GitHub auto-publish selects `latest` or `next` based on the tag and keeps provenance enabled
250
257
  - `build-hap --mode debug` still does not block hosted npm publishing
251
258
 
259
+ Additional preview evidence semantics:
260
+
261
+ - `bundle/debugBuild` are marked as `automated`
262
+ - `device` is marked as `manual-doc`, which means a human acceptance record exists rather than CI automation
263
+ - `release` is marked as `none`, which means no release evidence exists yet
264
+
252
265
  Manual Harmony acceptance still requires:
253
266
 
254
267
  - `official-ui-stack-sample` launches successfully
@@ -276,9 +289,10 @@ See [docs/npm-release.md](./docs/npm-release.md) and [docs/signing-and-release.m
276
289
  - [Official Minimal Sample Guide](./docs/official-minimal-sample.md)
277
290
  - [npm Release Notes](./docs/npm-release.md)
278
291
  - [Signing and Release Notes](./docs/signing-and-release.md)
279
- - [v1.7.2 Acceptance Log](./docs/v1.7.2-acceptance.md)
280
292
  - [Roadmap](./docs/roadmap.md)
281
293
 
294
+ Acceptance logs stay in the repo-only [`acceptance/`](./acceptance/) directory and are not shipped inside the npm tarball.
295
+
282
296
  ## License
283
297
 
284
298
  Released under the [MIT License](./LICENSE).
package/README.md CHANGED
@@ -9,7 +9,7 @@
9
9
  <p>
10
10
  <a href="https://github.com/BlackishGreen33/Expo-Harmony-Toolkit/actions/workflows/ci.yml"><img alt="Checks" src="https://img.shields.io/badge/checks-passing-16a34a?style=flat-square&logo=githubactions&logoColor=white"></a>
11
11
  <a href="./LICENSE"><img alt="License" src="https://img.shields.io/badge/license-MIT-0f766e?style=flat-square"></a>
12
- <a href="https://github.com/BlackishGreen33/Expo-Harmony-Toolkit/releases"><img alt="Version" src="https://img.shields.io/badge/version-v1.7.2-111827?style=flat-square"></a>
12
+ <a href="https://github.com/BlackishGreen33/Expo-Harmony-Toolkit/releases"><img alt="Version" src="https://img.shields.io/badge/version-v1.8.0-111827?style=flat-square"></a>
13
13
  <a href="./docs/support-matrix.md"><img alt="Matrix" src="https://img.shields.io/badge/matrix-expo55--rnoh082--ui--stack-2563eb?style=flat-square"></a>
14
14
  <img alt="Input" src="https://img.shields.io/badge/input-Managed%2FCNG-059669?style=flat-square">
15
15
  </p>
@@ -24,7 +24,7 @@
24
24
  </div>
25
25
 
26
26
  > [!IMPORTANT]
27
- > `v1.7` 延续 `verified + preview + experimental` 三层支持模型,并把 `expo-location`、`expo-camera` 推进到 `preview`。从这版文档开始,对外承诺进一步收紧为:`latest` 只承诺完整验收的 `verified` 能力,`next` 用于 preview fast track;路线仍然是先做到 `Managed/CNG Core Expo Coverage`,再通过 extension model 逼近“任意 Expo 项目”。
27
+ > `v1.8` 延续 `verified + preview + experimental` 三层支持模型,并把 `expo-location`、`expo-camera` 继续保持在 `preview`。当前公开承诺仍然收紧为:`latest` 只承诺完整验收的 `verified` 能力,`next` 用于 preview fast track。最新 roadmap 已把 `v2.0.0` 直接定义成“任何 Expo 项目都能可靠打包成鸿蒙 App”,因此中间版本会继续拆小,但这不等于当前 `verified` 边界已经放宽。
28
28
 
29
29
  > [!TIP]
30
30
  > 由于当前公开矩阵内的两套 `@react-native-oh-tpl/*` adapter 依赖以 Git URL + exact commit 形式接入,仓库开发和官方 UI-stack sample 推荐使用 `pnpm install --ignore-scripts`,避免 Git adapter 在 prepare 阶段拉取私有资源而中断安装。
@@ -45,9 +45,10 @@
45
45
 
46
46
  ## 当前状态
47
47
 
48
+ <!-- GENERATED:readme-current-status:start -->
48
49
  | 项目 | 说明 |
49
50
  | --- | --- |
50
- | 当前版本 | `v1.7.2` |
51
+ | 当前版本 | `v1.8.0` |
51
52
  | 支持模型 | `verified + preview + experimental` |
52
53
  | 唯一 `verified` 公开矩阵 | `expo55-rnoh082-ui-stack` |
53
54
  | 输入范围 | Managed/CNG Expo 项目 |
@@ -55,11 +56,12 @@
55
56
  | `preview` 原生能力 | `expo-file-system`、`expo-image-picker`、`expo-location`、`expo-camera` |
56
57
  | `experimental` 能力 | `expo-notifications`、`react-native-gesture-handler` |
57
58
  | 发布轨 | `latest` = fully accepted verified only;`next` = preview fast track |
58
- | capability 遥测 | `runtimeMode` + `evidence(bundle/debugBuild/device/release)` |
59
+ | capability 遥测 | `runtimeMode` + `evidence(...)` + `evidenceSource(...)` + `coverageProfile` + `nextActions` |
59
60
  | 构建链 | `doctor -> init -> bundle -> build-hap` |
60
61
  | 主 sample | `examples/official-ui-stack-sample` |
61
62
  | preview sample | `examples/official-native-capabilities-sample` |
62
63
  | 辅助 onboarding samples | `examples/official-app-shell-sample`、`examples/official-minimal-sample` |
64
+ <!-- GENERATED:readme-current-status:end -->
63
65
 
64
66
  <details>
65
67
  <summary><strong>当前仍不在 verified 正式承诺范围</strong></summary>
@@ -170,19 +172,22 @@ pnpm exec expo-harmony build-hap --mode release
170
172
 
171
173
  ## 支持矩阵
172
174
 
173
- `v1.7` 继续采用支持分层,并开始把 capability 晋升距离写进公开报告:
174
-
175
+ <!-- GENERATED:readme-support-matrix:start -->
175
176
  - `verified`:唯一公开矩阵仍是 `expo55-rnoh082-ui-stack`
176
- - `preview`:`expo-file-system`、`expo-image-picker`、`expo-location`、`expo-camera`
177
- - `experimental`:`expo-notifications`、`react-native-gesture-handler`
177
+ - `preview`:`expo-file-system`, `expo-image-picker`, `expo-location`, `expo-camera`
178
+ - `experimental`:`expo-notifications`, `react-native-gesture-handler`
178
179
 
179
180
  `doctor --strict` 继续只代表 `verified`。`doctor --target-tier preview` 会在同一 runtime matrix 下额外放行 preview 能力,但这不等于它们已经进入正式承诺。
180
181
 
181
- 从本版开始:
182
-
183
182
  - `doctor-report.json` 的 `capabilities[]` 会带出 `runtimeMode`
184
183
  - `doctor-report.json` 与 `toolkit-config.json` 会带出 `evidence.bundle`、`evidence.debugBuild`、`evidence.device`、`evidence.release`
184
+ - `doctor-report.json` 与 `toolkit-config.json` 会带出 `evidenceSource.bundle`、`evidenceSource.debugBuild`、`evidenceSource.device`、`evidenceSource.release`
185
+ - `doctor-report.json` 与 `toolkit-config.json` 也会带出 `coverageProfile` 与按顺序排列的 `nextActions`
185
186
  - `runtimeMode=shim` 说明当前仍未进入 verified runtime path,即使 bundle / debug build 已经可走通
187
+ - `evidenceSource.device=manual-doc` 表示当前只有人工设备验收记录,不代表机器自动验证
188
+ <!-- GENERATED:readme-support-matrix:end -->
189
+
190
+ 从本版开始,`doctor` 还会额外输出 `buildabilityRisk`、`coverageProfile`、`gapCategory` 与有序 `nextActions`,把“矩阵漂移”“官方模块缺口”“第三方 native blocker”“bare workflow 轨道”分开描述;这不会放宽 gate,只是让构建可诊断性更强。
186
191
 
187
192
  文档里的状态标记额外约定为:
188
193
 
@@ -192,12 +197,14 @@ pnpm exec expo-harmony build-hap --mode release
192
197
 
193
198
  完整白名单、配对规则、exact specifier、issue code 与 release gate 见 [docs/support-matrix.md](./docs/support-matrix.md)。
194
199
 
200
+ 如果你要跟进 `v1.8.x` 的并行晋升节奏,可直接看 [acceptance/v1.8.x-capability-board.md](./acceptance/v1.8.x-capability-board.md)。
201
+
195
202
  ## 官方 Samples
196
203
 
197
204
  - `examples/official-ui-stack-sample`
198
205
  当前唯一对外主 sample,同时覆盖 router、linking、constants、SVG、reanimated 和 Harmony sidecar 构建链。
199
206
  - `examples/official-native-capabilities-sample`
200
- `v1.7.x` 的 Batch A+B preview walkthrough sample,用来承接 `expo-file-system`、`expo-image-picker`、`expo-location`、`expo-camera` 的核心支持子集、permission、bundledebug build 验收。
207
+ `v1.8.x` 的 preview walkthrough sample,用来承接 `expo-file-system`、`expo-image-picker`、`expo-location`、`expo-camera` 的核心支持子集、permission、bundledebug build 与逐 capability 验收追踪。
201
208
  - `examples/official-app-shell-sample`
202
209
  最小可理解的 App Shell onboarding sample,用来展示 router、linking、constants、pathname、observed URL 与 generated deep link。
203
210
  - `examples/official-minimal-sample`
@@ -233,9 +240,9 @@ pnpm exec expo-harmony build-hap --mode release
233
240
  - `metro.harmony.config.js`
234
241
  - `.expo-harmony/manifest.json`
235
242
  - `.expo-harmony/doctor-report.json`
243
+ - `.expo-harmony/toolkit-config.json`
236
244
  - `.expo-harmony/env-report.json`
237
245
  - `.expo-harmony/build-report.json`
238
- - `.expo-harmony/toolkit-config.json`
239
246
 
240
247
  ## 发布与验收
241
248
 
@@ -255,6 +262,12 @@ pnpm exec expo-harmony build-hap --mode release
255
262
  - GitHub 自动发布按 tag 选择 `latest` 或 `next` dist-tag,并保留 provenance
256
263
  - `build-hap --mode debug` 继续不作为 hosted npm publish 的硬阻塞条件
257
264
 
265
+ preview 证据的额外说明:
266
+
267
+ - `bundle/debugBuild` 标记为 `automated`
268
+ - `device` 标记为 `manual-doc`,表示已有人工验收记录,不等于 CI 自动验收
269
+ - `release` 标记为 `none`,表示当前仍没有 release 证据
270
+
258
271
  手动 Harmony 验收继续要求:
259
272
 
260
273
  - `official-ui-stack-sample` 成功启动
@@ -282,9 +295,10 @@ verified capability 晋升还必须补齐:
282
295
  - [官方最小 sample 指南](./docs/official-minimal-sample.md)
283
296
  - [npm 发布说明](./docs/npm-release.md)
284
297
  - [签名与 Release 说明](./docs/signing-and-release.md)
285
- - [v1.7.2 验收记录](./docs/v1.7.2-acceptance.md)
286
298
  - [路线图](./docs/roadmap.md)
287
299
 
300
+ 验收记录继续保留在 repo-only 的 [`acceptance/`](./acceptance/) 目录中,不随 npm tarball 一起发布。
301
+
288
302
  ## License
289
303
 
290
304
  本项目基于 [MIT License](./LICENSE) 发布。
@@ -0,0 +1,10 @@
1
+ import { TemplateFileDefinition } from '../types';
2
+ export declare const AUTOLINKED_FILE_PATHS: readonly [string, string, string, string];
3
+ export declare class AutolinkingFailureError extends Error {
4
+ constructor(stage: string, command: string, options?: {
5
+ cause?: string;
6
+ missingFiles?: string[];
7
+ });
8
+ }
9
+ export declare function buildAutolinkedManagedFiles(projectRoot: string, harmonyRootPackageContents: string): Promise<TemplateFileDefinition[]>;
10
+ export declare function normalizeKnownHarmonyPackageJsons(projectRoot: string): Promise<() => Promise<void>>;