expo-harmony-toolkit 1.8.1 → 1.8.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.en.md +4 -2
- package/README.md +4 -2
- package/build/core/autolinking.js +66 -44
- package/build/core/build/compatibilityShims.js +64 -8
- package/build/core/build/localHar.d.ts +2 -0
- package/build/core/build/localHar.js +57 -0
- package/build/core/build/rnohCompatibility.js +34 -1
- package/build/core/build.js +2 -0
- package/build/core/constants.d.ts +5 -5
- package/build/core/constants.js +4 -4
- package/build/core/report.js +18 -1
- package/build/data/capabilities.js +3 -1
- package/build/data/dependencyCatalog.js +224 -0
- package/build/data/publicDocs.d.ts +1 -1
- package/build/data/uiStack.d.ts +166 -0
- package/build/data/uiStack.js +142 -1
- package/build/data/validatedMatrices.js +6 -3
- package/build/types.d.ts +1 -0
- package/docs/npm-release.md +2 -0
- package/docs/signing-and-release.md +46 -0
- package/docs/support-matrix.md +5 -2
- package/package.json +1 -1
- package/templates/harmony/entry/build-profile.json5 +11 -0
|
@@ -155,5 +155,7 @@ function getCapabilityDefinitionsForProject(packageJson, options = {}) {
|
|
|
155
155
|
(0, project_1.hasDeclaredDependency)(packageJson, definition.packageName)).sort((left, right) => left.packageName.localeCompare(right.packageName));
|
|
156
156
|
}
|
|
157
157
|
function collectCapabilityHarmonyPermissions(packageJson, options = {}) {
|
|
158
|
-
return Array.from(new Set(getCapabilityDefinitionsForProject(packageJson, options)
|
|
158
|
+
return Array.from(new Set(getCapabilityDefinitionsForProject(packageJson, options)
|
|
159
|
+
.filter((definition) => definition.runtimeMode !== 'shim')
|
|
160
|
+
.flatMap((definition) => definition.harmonyPermissions))).sort((left, right) => left.localeCompare(right));
|
|
159
161
|
}
|
|
@@ -26,6 +26,29 @@ const UI_STACK_COMPATIBILITY_RECORDS = Object.fromEntries(uiStack_1.UI_STACK_VAL
|
|
|
26
26
|
},
|
|
27
27
|
],
|
|
28
28
|
]));
|
|
29
|
+
const UI_STACK_ADAPTER_PACKAGE_NAME_SET = new Set(uiStack_1.UI_STACK_VALIDATED_ADAPTERS.map((entry) => entry.adapterPackageName));
|
|
30
|
+
const HARMONY_NATIVE_ADAPTER_COMPATIBILITY_RECORDS = Object.fromEntries(uiStack_1.HARMONY_NATIVE_ADAPTERS.filter((entry) => !UI_STACK_ADAPTER_PACKAGE_NAME_SET.has(entry.adapterPackageName)).flatMap((entry) => [
|
|
31
|
+
[
|
|
32
|
+
entry.canonicalPackageName,
|
|
33
|
+
{
|
|
34
|
+
status: 'manual',
|
|
35
|
+
supportTier: 'experimental',
|
|
36
|
+
note: `Harmony runtime support is tracked through ${entry.adapterPackageName}. Keep it on the experimental lane until bundle, debug HAP, and device evidence are recorded for the consuming app.`,
|
|
37
|
+
replacement: entry.adapterPackageName,
|
|
38
|
+
docsUrl: entry.docsUrl,
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
[
|
|
42
|
+
entry.adapterPackageName,
|
|
43
|
+
{
|
|
44
|
+
status: 'manual',
|
|
45
|
+
supportTier: 'experimental',
|
|
46
|
+
note: `Harmony adapter package pinned by the ccnubox intake catalog. The toolkit can link its HAR when ${entry.harmonyHarFileName} is installed, but runtime behavior still needs app-level evidence.`,
|
|
47
|
+
replacement: entry.canonicalPackageName,
|
|
48
|
+
docsUrl: entry.docsUrl,
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
]));
|
|
29
52
|
exports.DEPENDENCY_CATALOG = {
|
|
30
53
|
[constants_1.TOOLKIT_PACKAGE_NAME]: {
|
|
31
54
|
status: 'supported',
|
|
@@ -137,6 +160,7 @@ exports.DEPENDENCY_CATALOG = {
|
|
|
137
160
|
docsUrl: 'https://github.com/react-native-oh-library',
|
|
138
161
|
},
|
|
139
162
|
...UI_STACK_COMPATIBILITY_RECORDS,
|
|
163
|
+
...HARMONY_NATIVE_ADAPTER_COMPATIBILITY_RECORDS,
|
|
140
164
|
'react-native-gesture-handler': {
|
|
141
165
|
status: 'manual',
|
|
142
166
|
supportTier: 'experimental',
|
|
@@ -151,6 +175,206 @@ exports.DEPENDENCY_CATALOG = {
|
|
|
151
175
|
replacement: 'react-native-gesture-handler',
|
|
152
176
|
docsUrl: 'https://github.com/react-native-oh-library/react-native-harmony-gesture-handler',
|
|
153
177
|
},
|
|
178
|
+
'@ant-design/icons-react-native': {
|
|
179
|
+
status: 'supported',
|
|
180
|
+
supportTier: 'experimental',
|
|
181
|
+
note: 'Icon font rendering is accepted for the ccnubox intake path; font asset registration still needs bundle/debug validation on Harmony.',
|
|
182
|
+
},
|
|
183
|
+
'@ant-design/react-native': {
|
|
184
|
+
status: 'manual',
|
|
185
|
+
supportTier: 'experimental',
|
|
186
|
+
note: 'React Native UI components are JS-heavy, but the app must still validate modal, picker, and gesture surfaces on Harmony.',
|
|
187
|
+
},
|
|
188
|
+
'@bacons/apple-targets': {
|
|
189
|
+
status: 'manual',
|
|
190
|
+
supportTier: 'experimental',
|
|
191
|
+
note: 'iOS widget build tooling may be excluded from Harmony doctor because it does not participate in the Harmony runtime.',
|
|
192
|
+
},
|
|
193
|
+
'@expo/vector-icons': {
|
|
194
|
+
status: 'supported',
|
|
195
|
+
supportTier: 'experimental',
|
|
196
|
+
note: 'Vector icon rendering is accepted when paired with bundled icon fonts and a working Expo font path.',
|
|
197
|
+
},
|
|
198
|
+
'@lottiefiles/dotlottie-react': {
|
|
199
|
+
status: 'manual',
|
|
200
|
+
supportTier: 'experimental',
|
|
201
|
+
note: 'dotLottie usage remains an experimental animation surface until the app records Harmony runtime evidence.',
|
|
202
|
+
},
|
|
203
|
+
'@react-navigation/bottom-tabs': {
|
|
204
|
+
status: 'supported',
|
|
205
|
+
supportTier: 'experimental',
|
|
206
|
+
note: 'React Navigation tabs are accepted for the ccnubox app-shell path when paired with screens, safe-area, gesture, and reanimated validation.',
|
|
207
|
+
},
|
|
208
|
+
'@react-navigation/elements': {
|
|
209
|
+
status: 'supported',
|
|
210
|
+
supportTier: 'experimental',
|
|
211
|
+
note: 'React Navigation elements stay in the JS/UI layer but inherit the navigation-stack runtime evidence requirements.',
|
|
212
|
+
},
|
|
213
|
+
'@react-navigation/native': {
|
|
214
|
+
status: 'supported',
|
|
215
|
+
supportTier: 'experimental',
|
|
216
|
+
note: 'React Navigation native is accepted for managed Harmony intake when linking, safe-area, screens, and gesture dependencies are present.',
|
|
217
|
+
},
|
|
218
|
+
'@rneui/base': {
|
|
219
|
+
status: 'supported',
|
|
220
|
+
supportTier: 'experimental',
|
|
221
|
+
note: 'RNE base components are accepted as JS/UI dependencies and should be covered by app-level visual smoke tests.',
|
|
222
|
+
},
|
|
223
|
+
'@rneui/themed': {
|
|
224
|
+
status: 'supported',
|
|
225
|
+
supportTier: 'experimental',
|
|
226
|
+
note: 'RNE themed components are accepted as JS/UI dependencies and should be covered by app-level visual smoke tests.',
|
|
227
|
+
},
|
|
228
|
+
axios: {
|
|
229
|
+
status: 'supported',
|
|
230
|
+
supportTier: 'verified',
|
|
231
|
+
note: 'HTTP client dependency with no native surface.',
|
|
232
|
+
},
|
|
233
|
+
'expo-application': {
|
|
234
|
+
status: 'manual',
|
|
235
|
+
supportTier: 'experimental',
|
|
236
|
+
note: 'Application metadata reads require Harmony verification because Expo native modules are outside the verified UI-stack matrix.',
|
|
237
|
+
},
|
|
238
|
+
'expo-blur': {
|
|
239
|
+
status: 'manual',
|
|
240
|
+
supportTier: 'experimental',
|
|
241
|
+
note: 'Blur effects need visual verification on Harmony and are not part of the verified UI-stack matrix.',
|
|
242
|
+
},
|
|
243
|
+
'expo-clipboard': {
|
|
244
|
+
status: 'manual',
|
|
245
|
+
supportTier: 'experimental',
|
|
246
|
+
note: 'Clipboard support should be routed through the Harmony clipboard adapter where the app needs real pasteboard access.',
|
|
247
|
+
replacement: '@react-native-oh-tpl/clipboard',
|
|
248
|
+
},
|
|
249
|
+
'expo-dev-client': {
|
|
250
|
+
status: 'manual',
|
|
251
|
+
supportTier: 'experimental',
|
|
252
|
+
note: 'Dev-client native behavior is outside release eligibility; it may exist in the project without blocking experimental intake.',
|
|
253
|
+
},
|
|
254
|
+
'expo-font': {
|
|
255
|
+
status: 'manual',
|
|
256
|
+
supportTier: 'experimental',
|
|
257
|
+
note: 'Font loading is accepted for ccnubox intake but must be validated with bundled icon/font assets in the Harmony HAP.',
|
|
258
|
+
},
|
|
259
|
+
'expo-haptics': {
|
|
260
|
+
status: 'manual',
|
|
261
|
+
supportTier: 'experimental',
|
|
262
|
+
note: 'Haptics require a Harmony runtime implementation before the app can claim device parity.',
|
|
263
|
+
},
|
|
264
|
+
'expo-image': {
|
|
265
|
+
status: 'manual',
|
|
266
|
+
supportTier: 'experimental',
|
|
267
|
+
note: 'Image rendering and cache behavior require Harmony bundle and device validation.',
|
|
268
|
+
},
|
|
269
|
+
'expo-image-manipulator': {
|
|
270
|
+
status: 'manual',
|
|
271
|
+
supportTier: 'experimental',
|
|
272
|
+
note: 'Image manipulation remains an experimental ccnubox requirement for timetable screenshot/export flows.',
|
|
273
|
+
},
|
|
274
|
+
'expo-insights': {
|
|
275
|
+
status: 'manual',
|
|
276
|
+
supportTier: 'experimental',
|
|
277
|
+
note: 'Telemetry should not block bundle intake, but Harmony runtime behavior remains outside the verified matrix.',
|
|
278
|
+
},
|
|
279
|
+
'expo-linear-gradient': {
|
|
280
|
+
status: 'manual',
|
|
281
|
+
supportTier: 'experimental',
|
|
282
|
+
note: 'Gradient rendering requires visual smoke validation on Harmony.',
|
|
283
|
+
},
|
|
284
|
+
'expo-media-library': {
|
|
285
|
+
status: 'manual',
|
|
286
|
+
supportTier: 'experimental',
|
|
287
|
+
note: 'Media-library write/read flows should be backed by the Harmony camera-roll adapter for screenshot save acceptance.',
|
|
288
|
+
replacement: '@react-native-oh-tpl/camera-roll',
|
|
289
|
+
},
|
|
290
|
+
'expo-secure-store': {
|
|
291
|
+
status: 'manual',
|
|
292
|
+
supportTier: 'experimental',
|
|
293
|
+
note: 'Secure storage must use a real Harmony secure backend or equivalent encrypted wrapper before release parity is claimed.',
|
|
294
|
+
},
|
|
295
|
+
'expo-splash-screen': {
|
|
296
|
+
status: 'manual',
|
|
297
|
+
supportTier: 'experimental',
|
|
298
|
+
note: 'Splash behavior is accepted for ccnubox intake but remains native-side runtime evidence.',
|
|
299
|
+
},
|
|
300
|
+
'expo-symbols': {
|
|
301
|
+
status: 'manual',
|
|
302
|
+
supportTier: 'experimental',
|
|
303
|
+
note: 'Symbols are platform-specific visual assets and require Harmony fallback/runtime verification.',
|
|
304
|
+
},
|
|
305
|
+
'expo-system-ui': {
|
|
306
|
+
status: 'manual',
|
|
307
|
+
supportTier: 'experimental',
|
|
308
|
+
note: 'System UI updates touch native chrome and need Harmony runtime validation.',
|
|
309
|
+
},
|
|
310
|
+
'expo-updates': {
|
|
311
|
+
status: 'manual',
|
|
312
|
+
supportTier: 'experimental',
|
|
313
|
+
note: 'OTA update checks remain experimental on Harmony until update metadata and launch behavior are validated.',
|
|
314
|
+
},
|
|
315
|
+
'expo-web-browser': {
|
|
316
|
+
status: 'manual',
|
|
317
|
+
supportTier: 'experimental',
|
|
318
|
+
note: 'In-app browser flows need Harmony runtime validation; they must not replace WebView parity for pages that require injected scripts.',
|
|
319
|
+
},
|
|
320
|
+
'jcore-react-native': {
|
|
321
|
+
status: 'manual',
|
|
322
|
+
supportTier: 'experimental',
|
|
323
|
+
note: 'JCore is accepted as part of the JPush Harmony intake path, but device-side SDK evidence is required.',
|
|
324
|
+
docsUrl: 'https://docs.jiguang.cn/jpush/client/HarmonyOS/hmos_guide',
|
|
325
|
+
},
|
|
326
|
+
'jpush-react-native': {
|
|
327
|
+
status: 'manual',
|
|
328
|
+
supportTier: 'experimental',
|
|
329
|
+
note: 'JPush is a real runtime requirement for ccnubox. Keep it in the catalog and require a Harmony SDK bridge plus device evidence for registrationId, arrival, click, and cold-start payloads.',
|
|
330
|
+
docsUrl: 'https://docs.jiguang.cn/jpush/client/HarmonyOS/hmos_guide',
|
|
331
|
+
},
|
|
332
|
+
'mx-jpush-expo': {
|
|
333
|
+
status: 'manual',
|
|
334
|
+
supportTier: 'experimental',
|
|
335
|
+
note: 'The Expo config plugin may be excluded from Harmony config processing, but the JPush runtime dependency must stay visible in doctor reports.',
|
|
336
|
+
docsUrl: 'https://docs.jiguang.cn/jpush/client/HarmonyOS/hmos_guide',
|
|
337
|
+
},
|
|
338
|
+
'react-native-draggable-grid': {
|
|
339
|
+
status: 'supported',
|
|
340
|
+
supportTier: 'experimental',
|
|
341
|
+
note: 'Drag-grid behavior is accepted for the ccnubox homepage intake and requires gesture/runtime smoke validation.',
|
|
342
|
+
},
|
|
343
|
+
'react-native-edge-to-edge': {
|
|
344
|
+
status: 'manual',
|
|
345
|
+
supportTier: 'experimental',
|
|
346
|
+
note: 'Android edge-to-edge native configuration can be excluded as a config plugin; runtime chrome behavior remains Harmony-specific.',
|
|
347
|
+
},
|
|
348
|
+
'react-native-keyboard-aware-scroll-view': {
|
|
349
|
+
status: 'supported',
|
|
350
|
+
supportTier: 'experimental',
|
|
351
|
+
note: 'Keyboard-aware scrolling is accepted as JS/UI behavior but requires form-flow validation on Harmony.',
|
|
352
|
+
},
|
|
353
|
+
'react-native-pdf-renderer': {
|
|
354
|
+
status: 'manual',
|
|
355
|
+
supportTier: 'experimental',
|
|
356
|
+
note: 'PDF rendering is a native-looking app requirement and remains experimental until a Harmony renderer or adapter is validated.',
|
|
357
|
+
},
|
|
358
|
+
'react-native-reanimated-carousel': {
|
|
359
|
+
status: 'supported',
|
|
360
|
+
supportTier: 'experimental',
|
|
361
|
+
note: 'Carousel behavior is accepted when paired with the validated reanimated Harmony adapter and homepage smoke tests.',
|
|
362
|
+
},
|
|
363
|
+
'react-native-svg-transformer': {
|
|
364
|
+
status: 'supported',
|
|
365
|
+
supportTier: 'experimental',
|
|
366
|
+
note: 'Metro SVG transformation is accepted for bundling when paired with the validated react-native-svg Harmony adapter.',
|
|
367
|
+
},
|
|
368
|
+
'react-native-web': {
|
|
369
|
+
status: 'supported',
|
|
370
|
+
supportTier: 'verified',
|
|
371
|
+
note: 'Web support dependency has no Harmony native runtime surface.',
|
|
372
|
+
},
|
|
373
|
+
zustand: {
|
|
374
|
+
status: 'supported',
|
|
375
|
+
supportTier: 'verified',
|
|
376
|
+
note: 'State management dependency with no native surface.',
|
|
377
|
+
},
|
|
154
378
|
...Object.fromEntries(capabilities_1.CAPABILITY_DEFINITIONS.map((definition) => [
|
|
155
379
|
definition.packageName,
|
|
156
380
|
{
|
|
@@ -8,4 +8,4 @@ export declare const SUPPORTING_SAMPLE_PATHS: readonly ["examples/official-app-s
|
|
|
8
8
|
export declare const VERIFIED_JS_UI_CAPABILITY_NAMES: readonly ["expo-router", "expo-linking", "expo-constants", ...("react-native-reanimated" | "react-native-svg")[]];
|
|
9
9
|
export declare const PREVIEW_CAPABILITY_DEFINITIONS: import("..").CapabilityDefinition[];
|
|
10
10
|
export declare const EXPERIMENTAL_CAPABILITY_NAMES: readonly [...string[], "react-native-gesture-handler"];
|
|
11
|
-
export declare const PUBLIC_CURRENT_VERSION = "1.8.
|
|
11
|
+
export declare const PUBLIC_CURRENT_VERSION = "1.8.3";
|
package/build/data/uiStack.d.ts
CHANGED
|
@@ -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;
|
package/build/data/uiStack.js
CHANGED
|
@@ -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
|
}
|
|
@@ -63,11 +63,11 @@ exports.VALIDATED_RELEASE_MATRICES = {
|
|
|
63
63
|
},
|
|
64
64
|
'@react-native-oh/react-native-harmony': {
|
|
65
65
|
required: true,
|
|
66
|
-
version: '0.82.
|
|
66
|
+
version: '0.82.29',
|
|
67
67
|
},
|
|
68
68
|
'@react-native-oh/react-native-harmony-cli': {
|
|
69
69
|
required: true,
|
|
70
|
-
version: '0.82.
|
|
70
|
+
version: '0.82.29',
|
|
71
71
|
},
|
|
72
72
|
'@react-native-community/cli': {
|
|
73
73
|
required: true,
|
|
@@ -93,7 +93,10 @@ exports.VALIDATED_RELEASE_MATRICES = {
|
|
|
93
93
|
[
|
|
94
94
|
entry.adapterPackageName,
|
|
95
95
|
{
|
|
96
|
-
|
|
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/types.d.ts
CHANGED
package/docs/npm-release.md
CHANGED
|
@@ -60,6 +60,8 @@ 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
|
|
64
|
+
- `v1.8.3` 只刷新 RNOH runtime / CLI 到 `0.82.29`,仍不宣称 RN `0.83.x` 已进入公开 Harmony 矩阵
|
|
63
65
|
- preview capability 若在报告里显示 `device=yes`,必须同时以 `evidenceSource.device=manual-doc` 对外说明其来源,不得表述成 CI 自动设备验证
|
|
64
66
|
|
|
65
67
|
## 手动发布
|