expo-harmony-toolkit 1.8.0 → 1.8.2

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.
@@ -24,6 +24,7 @@ export declare const UI_STACK_VALIDATED_ADAPTERS: readonly [{
24
24
  readonly adapterRepository: "react-native-oh-library/react-native-harmony-svg";
25
25
  readonly adapterPath: "react-native-harmony-svg";
26
26
  readonly adapterCommit: "97c31d2f72559931d62fa84a9c86e86d343753d3";
27
+ readonly npmSpecifier: "15.0.1-rc.11";
27
28
  readonly harmonyHarFileName: "svg.har";
28
29
  readonly supportsAutolinking: false;
29
30
  readonly managedAutolinking: {
@@ -36,7 +37,172 @@ export declare const UI_STACK_VALIDATED_ADAPTERS: readonly [{
36
37
  readonly docsUrl: "https://github.com/react-native-oh-library/react-native-harmony-svg";
37
38
  }];
38
39
  export type UiStackValidatedAdapter = (typeof UI_STACK_VALIDATED_ADAPTERS)[number];
40
+ export declare const HARMONY_NATIVE_ADAPTERS: readonly [{
41
+ readonly canonicalPackageName: "react-native-reanimated";
42
+ readonly canonicalVersion: "3.6.0";
43
+ readonly adapterPackageName: "@react-native-oh-tpl/react-native-reanimated";
44
+ readonly adapterVersion: "3.6.4-rc.5";
45
+ readonly adapterRepository: "react-native-oh-library/react-native-harmony-reanimated";
46
+ readonly adapterPath: "react-native-harmony-reanimated";
47
+ readonly adapterCommit: "9fdbe676209937383907be0592291223c6ca7ad7";
48
+ readonly harmonyHarFileName: "reanimated.har";
49
+ readonly supportsAutolinking: false;
50
+ readonly managedAutolinking: {
51
+ readonly etsImportPath: "@react-native-oh-tpl/react-native-reanimated/ts";
52
+ readonly etsPackageName: "ReanimatedPackage";
53
+ readonly cppHeaderName: "ReanimatedPackage.h";
54
+ readonly cppPackageName: "ReanimatedPackage";
55
+ readonly cmakeTargetName: "rnoh_reanimated";
56
+ };
57
+ readonly docsUrl: "https://github.com/react-native-oh-library/react-native-harmony-reanimated";
58
+ }, {
59
+ readonly canonicalPackageName: "react-native-svg";
60
+ readonly canonicalVersion: "15.0.0";
61
+ readonly adapterPackageName: "@react-native-oh-tpl/react-native-svg";
62
+ readonly adapterVersion: "15.0.1-rc.12";
63
+ readonly adapterRepository: "react-native-oh-library/react-native-harmony-svg";
64
+ readonly adapterPath: "react-native-harmony-svg";
65
+ readonly adapterCommit: "97c31d2f72559931d62fa84a9c86e86d343753d3";
66
+ readonly npmSpecifier: "15.0.1-rc.11";
67
+ readonly harmonyHarFileName: "svg.har";
68
+ readonly supportsAutolinking: false;
69
+ readonly managedAutolinking: {
70
+ readonly etsImportPath: "@react-native-oh-tpl/react-native-svg/ts";
71
+ readonly etsPackageName: "SvgPackage";
72
+ readonly cppHeaderName: "SVGPackage.h";
73
+ readonly cppPackageName: "SVGPackage";
74
+ readonly cmakeTargetName: "rnoh_svg";
75
+ };
76
+ readonly docsUrl: "https://github.com/react-native-oh-library/react-native-harmony-svg";
77
+ }, {
78
+ readonly canonicalPackageName: "@react-native-async-storage/async-storage";
79
+ readonly adapterPackageName: "@react-native-oh-tpl/async-storage";
80
+ readonly adapterVersion: "1.21.0-0.2.2";
81
+ readonly harmonyHarFileName: "async_storage.har";
82
+ readonly supportsAutolinking: true;
83
+ readonly managedAutolinking: {
84
+ readonly etsImportPath: "@react-native-oh-tpl/async-storage/ts";
85
+ readonly etsPackageName: "AsyncStoragePackage";
86
+ readonly cppHeaderName: "AsyncStoragePackage.h";
87
+ readonly cppPackageName: "AsyncStoragePackage";
88
+ readonly cmakeTargetName: "rnoh_async_storage";
89
+ };
90
+ readonly docsUrl: "https://github.com/react-native-oh-library/usage-docs";
91
+ }, {
92
+ readonly canonicalPackageName: "react-native-webview";
93
+ readonly adapterPackageName: "@react-native-oh-tpl/react-native-webview";
94
+ readonly adapterVersion: "13.10.3";
95
+ readonly harmonyHarFileName: "rn_webview.har";
96
+ readonly supportsAutolinking: true;
97
+ readonly managedAutolinking: {
98
+ readonly etsImportPath: "@react-native-oh-tpl/react-native-webview/ts";
99
+ readonly etsPackageName: "WebViewPackage";
100
+ readonly cppHeaderName: "WebViewPackage.h";
101
+ readonly cppPackageName: "WebViewPackage";
102
+ readonly cmakeTargetName: "rnoh_webview";
103
+ };
104
+ readonly docsUrl: "https://github.com/react-native-oh-library/usage-docs/blob/master/en/react-native-webview.md";
105
+ }, {
106
+ readonly canonicalPackageName: "react-native-screens";
107
+ readonly adapterPackageName: "@react-native-oh-tpl/react-native-screens";
108
+ readonly adapterVersion: "4.8.1-rc.3";
109
+ readonly harmonyHarFileName: "screens.har";
110
+ readonly supportsAutolinking: true;
111
+ readonly docsUrl: "https://github.com/react-native-oh-library";
112
+ }, {
113
+ readonly canonicalPackageName: "react-native-gesture-handler";
114
+ readonly adapterPackageName: "@react-native-oh-tpl/react-native-gesture-handler";
115
+ readonly adapterVersion: "2.14.17-rc.0";
116
+ readonly harmonyHarFileName: "gesture_handler.har";
117
+ readonly supportsAutolinking: true;
118
+ readonly docsUrl: "https://github.com/react-native-oh-library/react-native-harmony-gesture-handler";
119
+ }, {
120
+ readonly canonicalPackageName: "lottie-react-native";
121
+ readonly adapterPackageName: "@react-native-oh-tpl/lottie-react-native";
122
+ readonly adapterVersion: "6.4.1-0.1.9-1";
123
+ readonly harmonyHarFileName: "lottie.har";
124
+ readonly supportsAutolinking: true;
125
+ readonly managedAutolinking: {
126
+ readonly cppHeaderName: "LottieAnimationViewPackage.h";
127
+ readonly cppPackageName: "LottieAnimationViewPackage";
128
+ readonly cmakeTargetName: "rnoh_lottie";
129
+ };
130
+ readonly docsUrl: "https://github.com/react-native-oh-library";
131
+ }, {
132
+ readonly canonicalPackageName: "react-native-safe-area-context";
133
+ readonly adapterPackageName: "@react-native-oh-tpl/react-native-safe-area-context";
134
+ readonly adapterVersion: "4.7.4-0.2.1";
135
+ readonly harmonyHarFileName: "safe_area.har";
136
+ readonly supportsAutolinking: true;
137
+ readonly managedAutolinking: {
138
+ readonly etsImportPath: "@react-native-oh-tpl/react-native-safe-area-context/ts";
139
+ readonly etsPackageName: "SafeAreaViewPackage";
140
+ readonly cppHeaderName: "SafeAreaViewPackage.h";
141
+ readonly cppPackageName: "SafeAreaViewPackage";
142
+ readonly cmakeTargetName: "rnoh_safe_area";
143
+ };
144
+ readonly docsUrl: "https://github.com/react-native-oh-library";
145
+ }, {
146
+ readonly canonicalPackageName: "@react-native-camera-roll/camera-roll";
147
+ readonly adapterPackageName: "@react-native-oh-tpl/camera-roll";
148
+ readonly adapterVersion: "7.8.4-rc.2";
149
+ readonly harmonyHarFileName: "camera_roll.har";
150
+ readonly supportsAutolinking: true;
151
+ readonly managedAutolinking: {
152
+ readonly etsImportPath: "@react-native-oh-tpl/camera-roll/ts";
153
+ readonly etsPackageName: "CameraRollPackage";
154
+ };
155
+ readonly docsUrl: "https://github.com/react-native-oh-library";
156
+ }, {
157
+ readonly canonicalPackageName: "@react-native-clipboard/clipboard";
158
+ readonly adapterPackageName: "@react-native-oh-tpl/clipboard";
159
+ readonly adapterVersion: "1.13.2-0.0.9";
160
+ readonly harmonyHarFileName: "clipboard.har";
161
+ readonly supportsAutolinking: true;
162
+ readonly managedAutolinking: {
163
+ readonly etsImportPath: "@react-native-oh-tpl/clipboard/ts";
164
+ readonly etsPackageName: "ClipboardPackage";
165
+ readonly cppHeaderName: "ClipboardPackage.h";
166
+ readonly cppPackageName: "ClipboardPackage";
167
+ readonly cmakeTargetName: "rnoh_clipboard";
168
+ };
169
+ readonly docsUrl: "https://github.com/react-native-oh-library";
170
+ }, {
171
+ readonly canonicalPackageName: "react-native-image-picker";
172
+ readonly adapterPackageName: "@react-native-oh-tpl/react-native-image-picker";
173
+ readonly adapterVersion: "7.0.3-0.1.7";
174
+ readonly harmonyHarFileName: "image_picker.har";
175
+ readonly supportsAutolinking: true;
176
+ readonly managedAutolinking: {
177
+ readonly etsImportPath: "@react-native-oh-tpl/react-native-image-picker/ts";
178
+ readonly etsPackageName: "ImagePickerViewPackage";
179
+ readonly cppHeaderName: "RNImagePickerPackage.h";
180
+ readonly cppPackageName: "RNImagePickerPackage";
181
+ readonly cmakeTargetName: "rnoh_image_picker";
182
+ };
183
+ readonly docsUrl: "https://github.com/react-native-oh-library/usage-docs/blob/master/en/react-native-image-picker.md";
184
+ }, {
185
+ readonly canonicalPackageName: "react-native-fs";
186
+ readonly adapterPackageName: "@react-native-oh-tpl/react-native-fs";
187
+ readonly adapterVersion: "2.20.0-0.1.14";
188
+ readonly harmonyHarFileName: "fs.har";
189
+ readonly supportsAutolinking: true;
190
+ readonly managedAutolinking: {
191
+ readonly etsImportPath: "@react-native-oh-tpl/react-native-fs/ts";
192
+ readonly etsPackageName: "FsPackage";
193
+ };
194
+ readonly docsUrl: "https://github.com/react-native-oh-library/usage-docs/blob/master/en/react-native-fs.md";
195
+ }, {
196
+ readonly canonicalPackageName: "@shopify/react-native-skia";
197
+ readonly adapterPackageName: "@react-native-oh-tpl/react-native-skia";
198
+ readonly adapterVersion: "1.3.8-rc.1";
199
+ readonly harmonyHarFileName: "skia.har";
200
+ readonly supportsAutolinking: false;
201
+ readonly docsUrl: "https://github.com/react-native-oh-library";
202
+ }];
203
+ export type HarmonyNativeAdapter = (typeof HARMONY_NATIVE_ADAPTERS)[number];
39
204
  export declare const UI_STACK_CANONICAL_TO_ADAPTER: Record<string, string>;
40
205
  export declare const UI_STACK_ADAPTER_TO_CANONICAL: Record<string, string>;
41
206
  export declare const UI_STACK_ADAPTER_PACKAGE_NAMES: ("@react-native-oh-tpl/react-native-reanimated" | "@react-native-oh-tpl/react-native-svg")[];
207
+ export declare const HARMONY_NATIVE_ADAPTER_PACKAGE_NAMES: ("@react-native-oh-tpl/react-native-reanimated" | "@react-native-oh-tpl/react-native-svg" | "@react-native-oh-tpl/async-storage" | "@react-native-oh-tpl/react-native-webview" | "@react-native-oh-tpl/react-native-screens" | "@react-native-oh-tpl/react-native-gesture-handler" | "@react-native-oh-tpl/lottie-react-native" | "@react-native-oh-tpl/react-native-safe-area-context" | "@react-native-oh-tpl/camera-roll" | "@react-native-oh-tpl/clipboard" | "@react-native-oh-tpl/react-native-image-picker" | "@react-native-oh-tpl/react-native-fs" | "@react-native-oh-tpl/react-native-skia")[];
42
208
  export declare function getUiStackAdapterSpecifier(adapter: UiStackValidatedAdapter): string;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UI_STACK_ADAPTER_PACKAGE_NAMES = exports.UI_STACK_ADAPTER_TO_CANONICAL = exports.UI_STACK_CANONICAL_TO_ADAPTER = exports.UI_STACK_VALIDATED_ADAPTERS = void 0;
3
+ exports.HARMONY_NATIVE_ADAPTER_PACKAGE_NAMES = exports.UI_STACK_ADAPTER_PACKAGE_NAMES = exports.UI_STACK_ADAPTER_TO_CANONICAL = exports.UI_STACK_CANONICAL_TO_ADAPTER = exports.HARMONY_NATIVE_ADAPTERS = exports.UI_STACK_VALIDATED_ADAPTERS = void 0;
4
4
  exports.getUiStackAdapterSpecifier = getUiStackAdapterSpecifier;
5
5
  exports.UI_STACK_VALIDATED_ADAPTERS = [
6
6
  {
@@ -30,6 +30,7 @@ exports.UI_STACK_VALIDATED_ADAPTERS = [
30
30
  adapterRepository: 'react-native-oh-library/react-native-harmony-svg',
31
31
  adapterPath: 'react-native-harmony-svg',
32
32
  adapterCommit: '97c31d2f72559931d62fa84a9c86e86d343753d3',
33
+ npmSpecifier: '15.0.1-rc.11',
33
34
  harmonyHarFileName: 'svg.har',
34
35
  supportsAutolinking: false,
35
36
  managedAutolinking: {
@@ -42,9 +43,149 @@ exports.UI_STACK_VALIDATED_ADAPTERS = [
42
43
  docsUrl: 'https://github.com/react-native-oh-library/react-native-harmony-svg',
43
44
  },
44
45
  ];
46
+ exports.HARMONY_NATIVE_ADAPTERS = [
47
+ ...exports.UI_STACK_VALIDATED_ADAPTERS,
48
+ {
49
+ canonicalPackageName: '@react-native-async-storage/async-storage',
50
+ adapterPackageName: '@react-native-oh-tpl/async-storage',
51
+ adapterVersion: '1.21.0-0.2.2',
52
+ harmonyHarFileName: 'async_storage.har',
53
+ supportsAutolinking: true,
54
+ managedAutolinking: {
55
+ etsImportPath: '@react-native-oh-tpl/async-storage/ts',
56
+ etsPackageName: 'AsyncStoragePackage',
57
+ cppHeaderName: 'AsyncStoragePackage.h',
58
+ cppPackageName: 'AsyncStoragePackage',
59
+ cmakeTargetName: 'rnoh_async_storage',
60
+ },
61
+ docsUrl: 'https://github.com/react-native-oh-library/usage-docs',
62
+ },
63
+ {
64
+ canonicalPackageName: 'react-native-webview',
65
+ adapterPackageName: '@react-native-oh-tpl/react-native-webview',
66
+ adapterVersion: '13.10.3',
67
+ harmonyHarFileName: 'rn_webview.har',
68
+ supportsAutolinking: true,
69
+ managedAutolinking: {
70
+ etsImportPath: '@react-native-oh-tpl/react-native-webview/ts',
71
+ etsPackageName: 'WebViewPackage',
72
+ cppHeaderName: 'WebViewPackage.h',
73
+ cppPackageName: 'WebViewPackage',
74
+ cmakeTargetName: 'rnoh_webview',
75
+ },
76
+ docsUrl: 'https://github.com/react-native-oh-library/usage-docs/blob/master/en/react-native-webview.md',
77
+ },
78
+ {
79
+ canonicalPackageName: 'react-native-screens',
80
+ adapterPackageName: '@react-native-oh-tpl/react-native-screens',
81
+ adapterVersion: '4.8.1-rc.3',
82
+ harmonyHarFileName: 'screens.har',
83
+ supportsAutolinking: true,
84
+ docsUrl: 'https://github.com/react-native-oh-library',
85
+ },
86
+ {
87
+ canonicalPackageName: 'react-native-gesture-handler',
88
+ adapterPackageName: '@react-native-oh-tpl/react-native-gesture-handler',
89
+ adapterVersion: '2.14.17-rc.0',
90
+ harmonyHarFileName: 'gesture_handler.har',
91
+ supportsAutolinking: true,
92
+ docsUrl: 'https://github.com/react-native-oh-library/react-native-harmony-gesture-handler',
93
+ },
94
+ {
95
+ canonicalPackageName: 'lottie-react-native',
96
+ adapterPackageName: '@react-native-oh-tpl/lottie-react-native',
97
+ adapterVersion: '6.4.1-0.1.9-1',
98
+ harmonyHarFileName: 'lottie.har',
99
+ supportsAutolinking: true,
100
+ managedAutolinking: {
101
+ cppHeaderName: 'LottieAnimationViewPackage.h',
102
+ cppPackageName: 'LottieAnimationViewPackage',
103
+ cmakeTargetName: 'rnoh_lottie',
104
+ },
105
+ docsUrl: 'https://github.com/react-native-oh-library',
106
+ },
107
+ {
108
+ canonicalPackageName: 'react-native-safe-area-context',
109
+ adapterPackageName: '@react-native-oh-tpl/react-native-safe-area-context',
110
+ adapterVersion: '4.7.4-0.2.1',
111
+ harmonyHarFileName: 'safe_area.har',
112
+ supportsAutolinking: true,
113
+ managedAutolinking: {
114
+ etsImportPath: '@react-native-oh-tpl/react-native-safe-area-context/ts',
115
+ etsPackageName: 'SafeAreaViewPackage',
116
+ cppHeaderName: 'SafeAreaViewPackage.h',
117
+ cppPackageName: 'SafeAreaViewPackage',
118
+ cmakeTargetName: 'rnoh_safe_area',
119
+ },
120
+ docsUrl: 'https://github.com/react-native-oh-library',
121
+ },
122
+ {
123
+ canonicalPackageName: '@react-native-camera-roll/camera-roll',
124
+ adapterPackageName: '@react-native-oh-tpl/camera-roll',
125
+ adapterVersion: '7.8.4-rc.2',
126
+ harmonyHarFileName: 'camera_roll.har',
127
+ supportsAutolinking: true,
128
+ managedAutolinking: {
129
+ etsImportPath: '@react-native-oh-tpl/camera-roll/ts',
130
+ etsPackageName: 'CameraRollPackage',
131
+ },
132
+ docsUrl: 'https://github.com/react-native-oh-library',
133
+ },
134
+ {
135
+ canonicalPackageName: '@react-native-clipboard/clipboard',
136
+ adapterPackageName: '@react-native-oh-tpl/clipboard',
137
+ adapterVersion: '1.13.2-0.0.9',
138
+ harmonyHarFileName: 'clipboard.har',
139
+ supportsAutolinking: true,
140
+ managedAutolinking: {
141
+ etsImportPath: '@react-native-oh-tpl/clipboard/ts',
142
+ etsPackageName: 'ClipboardPackage',
143
+ cppHeaderName: 'ClipboardPackage.h',
144
+ cppPackageName: 'ClipboardPackage',
145
+ cmakeTargetName: 'rnoh_clipboard',
146
+ },
147
+ docsUrl: 'https://github.com/react-native-oh-library',
148
+ },
149
+ {
150
+ canonicalPackageName: 'react-native-image-picker',
151
+ adapterPackageName: '@react-native-oh-tpl/react-native-image-picker',
152
+ adapterVersion: '7.0.3-0.1.7',
153
+ harmonyHarFileName: 'image_picker.har',
154
+ supportsAutolinking: true,
155
+ managedAutolinking: {
156
+ etsImportPath: '@react-native-oh-tpl/react-native-image-picker/ts',
157
+ etsPackageName: 'ImagePickerViewPackage',
158
+ cppHeaderName: 'RNImagePickerPackage.h',
159
+ cppPackageName: 'RNImagePickerPackage',
160
+ cmakeTargetName: 'rnoh_image_picker',
161
+ },
162
+ docsUrl: 'https://github.com/react-native-oh-library/usage-docs/blob/master/en/react-native-image-picker.md',
163
+ },
164
+ {
165
+ canonicalPackageName: 'react-native-fs',
166
+ adapterPackageName: '@react-native-oh-tpl/react-native-fs',
167
+ adapterVersion: '2.20.0-0.1.14',
168
+ harmonyHarFileName: 'fs.har',
169
+ supportsAutolinking: true,
170
+ managedAutolinking: {
171
+ etsImportPath: '@react-native-oh-tpl/react-native-fs/ts',
172
+ etsPackageName: 'FsPackage',
173
+ },
174
+ docsUrl: 'https://github.com/react-native-oh-library/usage-docs/blob/master/en/react-native-fs.md',
175
+ },
176
+ {
177
+ canonicalPackageName: '@shopify/react-native-skia',
178
+ adapterPackageName: '@react-native-oh-tpl/react-native-skia',
179
+ adapterVersion: '1.3.8-rc.1',
180
+ harmonyHarFileName: 'skia.har',
181
+ supportsAutolinking: false,
182
+ docsUrl: 'https://github.com/react-native-oh-library',
183
+ },
184
+ ];
45
185
  exports.UI_STACK_CANONICAL_TO_ADAPTER = Object.fromEntries(exports.UI_STACK_VALIDATED_ADAPTERS.map((entry) => [entry.canonicalPackageName, entry.adapterPackageName]));
46
186
  exports.UI_STACK_ADAPTER_TO_CANONICAL = Object.fromEntries(exports.UI_STACK_VALIDATED_ADAPTERS.map((entry) => [entry.adapterPackageName, entry.canonicalPackageName]));
47
187
  exports.UI_STACK_ADAPTER_PACKAGE_NAMES = exports.UI_STACK_VALIDATED_ADAPTERS.map((entry) => entry.adapterPackageName);
188
+ exports.HARMONY_NATIVE_ADAPTER_PACKAGE_NAMES = exports.HARMONY_NATIVE_ADAPTERS.map((entry) => entry.adapterPackageName);
48
189
  function getUiStackAdapterSpecifier(adapter) {
49
190
  return `github:${adapter.adapterRepository}#${adapter.adapterCommit}&path:${adapter.adapterPath}`;
50
191
  }
@@ -93,7 +93,10 @@ exports.VALIDATED_RELEASE_MATRICES = {
93
93
  [
94
94
  entry.adapterPackageName,
95
95
  {
96
- specifier: (0, uiStack_1.getUiStackAdapterSpecifier)(entry),
96
+ specifiers: [
97
+ (0, uiStack_1.getUiStackAdapterSpecifier)(entry),
98
+ 'npmSpecifier' in entry ? entry.npmSpecifier : entry.adapterVersion,
99
+ ],
97
100
  },
98
101
  ],
99
102
  ])),
package/build/plugin.js CHANGED
@@ -16,9 +16,13 @@ const project_2 = require("./core/project");
16
16
  const withExpoHarmony = (config, props = {}) => {
17
17
  validatePluginProps(props);
18
18
  const identifiers = (0, project_1.deriveHarmonyIdentifiers)(config, undefined, props);
19
+ const existingExpoHarmonyConfig = config.extra && typeof config.extra.expoHarmony === 'object' && config.extra.expoHarmony
20
+ ? config.extra.expoHarmony
21
+ : {};
19
22
  config.extra = {
20
23
  ...(config.extra ?? {}),
21
24
  expoHarmony: {
25
+ ...existingExpoHarmonyConfig,
22
26
  bundleName: identifiers.bundleName,
23
27
  entryModuleName: identifiers.entryModuleName,
24
28
  templateVersion: props.templateVersion ?? constants_1.TEMPLATE_VERSION,
package/build/types.d.ts CHANGED
@@ -8,6 +8,16 @@ export type DependencyBuildabilityRisk = 'known' | 'js-only-unknown' | 'native-r
8
8
  export type CoverageProfile = 'managed-core' | 'managed-native-heavy' | 'bare' | 'third-party-native-heavy';
9
9
  export type GapCategory = 'matrix-drift' | 'official-module-gap' | 'third-party-native-gap' | 'bare-workflow-gap';
10
10
  export type DependencySource = 'dependency' | 'devDependency' | 'peerDependency' | 'expo-plugin';
11
+ export interface ExpoHarmonyDoctorConfig {
12
+ excludeDependencies?: string[];
13
+ excludePlugins?: string[];
14
+ coverageProfile?: CoverageProfile;
15
+ }
16
+ export interface ExpoHarmonyResolvedDoctorConfig {
17
+ excludeDependencies: string[];
18
+ excludePlugins: string[];
19
+ coverageProfile: CoverageProfile | null;
20
+ }
11
21
  export interface ExpoHarmonyPluginProps {
12
22
  bundleName?: string;
13
23
  entryModuleName?: string;
@@ -29,6 +39,7 @@ export interface BlockingIssue {
29
39
  export interface ValidatedDependencyRule {
30
40
  version?: string;
31
41
  specifier?: string;
42
+ specifiers?: string[];
32
43
  required?: boolean;
33
44
  }
34
45
  export interface ValidatedReleaseMatrix {
@@ -236,6 +247,7 @@ export interface ToolkitConfig {
236
247
  bundleName: string;
237
248
  entryModuleName: string;
238
249
  coverageProfile: CoverageProfile;
250
+ doctorConfig: ExpoHarmonyResolvedDoctorConfig;
239
251
  capabilities: ManagedCapabilityRecord[];
240
252
  requestedHarmonyPermissions: string[];
241
253
  nextActions: string[];
@@ -60,6 +60,7 @@ pnpm release:check
60
60
 
61
61
  - hosted CI 默认仍可通过 `EXPO_HARMONY_RELEASE_SKIP_HAP=1` 跳过真实 DevEco HAP 构建
62
62
  - debug / release HAP gate 继续由 capability acceptance、带工具链环境的 CI 或本地验收补齐
63
+ - `v1.8.2` 已补一条 ccnubox release HAP 的本地签名、模拟器安装与启动记录;该记录不替代真机 device acceptance,也不把 preview capability 标为 release-ready
63
64
  - preview capability 若在报告里显示 `device=yes`,必须同时以 `evidenceSource.device=manual-doc` 对外说明其来源,不得表述成 CI 自动设备验证
64
65
 
65
66
  ## 手动发布
@@ -11,6 +11,36 @@
11
11
  - `harmony/build-profile.json5` 中存在可用的 `signingConfigs`
12
12
  - AppGallery Connect / 本地签名材料与工程配置一致
13
13
 
14
+ `.expo-harmony/signing.local.json` 的最小结构与 `.expo-harmony/signing.local.example.json` 一致:
15
+
16
+ ```json
17
+ {
18
+ "signingConfigs": [
19
+ {
20
+ "name": "default",
21
+ "type": "HarmonyOS",
22
+ "material": {
23
+ "storeFile": "./signing/release.p12",
24
+ "storePassword": "<replace-with-store-password>",
25
+ "keyAlias": "<replace-with-key-alias>",
26
+ "keyPassword": "<replace-with-key-password>",
27
+ "signAlg": "SHA256withECDSA",
28
+ "profile": "./signing/release.p7b",
29
+ "certpath": "./signing/release.cer"
30
+ }
31
+ }
32
+ ],
33
+ "products": [
34
+ {
35
+ "name": "default",
36
+ "signingConfig": "default"
37
+ }
38
+ ]
39
+ }
40
+ ```
41
+
42
+ 真实发布时,这些材料应来自 DevEco / AppGallery Connect。OpenHarmony 本地自签材料只适合模拟器或内部验证,不能当作生产发布凭据。
43
+
14
44
  ## 如何检查
15
45
 
16
46
  在项目根目录执行:
@@ -51,6 +81,18 @@ expo-harmony build-hap --mode release
51
81
 
52
82
  - `env-report.json` 不再提示 `env.signing.missing`
53
83
  - DevEco / AppGallery Connect 的 release profile 已准备完成
84
+ - release profile 覆盖了 HAP 中申请的 restricted permission;否则模拟器或设备可能在安装阶段报 `grant request permissions failed`
85
+
86
+ ## v1.8.2 本地模拟器证据
87
+
88
+ `v1.8.2` 已在 ccnubox 本地验证目标上记录:
89
+
90
+ - `expo-harmony env`:`Signing: configured`
91
+ - `expo-harmony build-hap --mode release`:release signed HAP 构建成功
92
+ - `hdc install -r <release-hap>`:模拟器安装成功
93
+ - `aa start -a EntryAbility -b com.muxixyz.ccnubox`:启动成功
94
+
95
+ 这条记录只说明 release HAP 的本地签名、安装、启动链路可走通。它不代表 AppGallery 生产签名、不代表真机通过,也不关闭 preview capability 的 release runtime acceptance。
54
96
 
55
97
  ## 关系说明
56
98
 
@@ -113,6 +113,7 @@
113
113
  - 当前四项 preview capability 都已经完成 preview baseline 的 bundle / debug build / route walkthrough
114
114
  - 四项 preview capability 都已经进入 `adapter` 路径;`device=yes[manual-doc]` 只表示已有人工设备验收记录,仍不代表 verified 或 release-ready
115
115
  - 当前 preview baseline 的默认 evidenceSource 固定为:`bundle/debugBuild=automated`、`device=manual-doc`、`release=none`
116
+ - `v1.8.2` 的 ccnubox release HAP 模拟器安装/启动记录只证明 app-shell release 构建链路,不改变上述 per-capability `release=no[none]`
116
117
  - `v1.8.x` 开始,combined sample smoke 只负责总回归;每项 capability 还必须单独维护 device / release acceptance 记录,见 [acceptance/v1.8.x-capability-board.md](../acceptance/v1.8.x-capability-board.md)
117
118
  - `expo-file-system`
118
119
  - `🟡` 当前主路径是 UTF-8/base64 sandbox I/O、append/partial read、`getInfoAsync({ md5: true })` 与 `downloadAsync`
@@ -252,6 +253,8 @@ toolkit 受管的核心产物仍包括:
252
253
  - release signing / release HAP 验收完成
253
254
  - 文档、矩阵、roadmap、acceptance 记录同 PR 更新
254
255
 
256
+ `v1.8.2` 记录的 simulator release-HAP evidence 只覆盖 ccnubox app-shell 的 signed HAP 构建、安装和启动;单 capability 的 release acceptance 仍必须按各自记录单独关闭。
257
+
255
258
  ## 当前仍未进入正式公开承诺
256
259
 
257
260
  - bare Expo
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo-harmony-toolkit",
3
- "version": "1.8.0",
3
+ "version": "1.8.2",
4
4
  "description": "面向 Managed/CNG Expo 项目的 HarmonyOS 迁移、准入检查与 UI-stack 构建工具链",
5
5
  "main": "app.plugin.js",
6
6
  "types": "build/index.d.ts",
@@ -4,6 +4,17 @@
4
4
  "externalNativeOptions": {
5
5
  "path": "./src/main/cpp/CMakeLists.txt",
6
6
  "arguments": ""
7
+ },
8
+ "nativeLib": {
9
+ "filter": {
10
+ "pickFirsts": [
11
+ "**/libhermestooling.so",
12
+ "**/libjsi.so",
13
+ "**/libreactnative.so",
14
+ "**/librnoh_core.so",
15
+ "**/librnoh_core_package.so"
16
+ ]
17
+ }
7
18
  }
8
19
  },
9
20
  "targets": [