react-native-worklets 0.2.0 → 0.3.0-nightly-20250424-43520c73e
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/RNWorklets.podspec +12 -3
- package/android/CMakeLists.txt +87 -7
- package/android/build.gradle +23 -9
- package/apple/worklets/apple/SlowAnimations.mm +1 -3
- package/apple/worklets/apple/WorkletsModule.h +4 -1
- package/apple/worklets/apple/WorkletsModule.mm +19 -2
- package/lib/module/WorkletsError.js +19 -5
- package/lib/module/WorkletsError.js.map +1 -1
- package/lib/module/WorkletsModule/NativeWorklets.js +8 -1
- package/lib/module/WorkletsModule/NativeWorklets.js.map +1 -1
- package/lib/module/errors.js +0 -28
- package/lib/module/errors.js.map +1 -1
- package/lib/module/index.js +0 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/privateGlobals.d.js +1 -0
- package/lib/module/privateGlobals.d.js.map +1 -1
- package/lib/module/runtimes.js +2 -2
- package/lib/module/runtimes.js.map +1 -1
- package/lib/module/threads.js +2 -2
- package/lib/module/threads.js.map +1 -1
- package/lib/typescript/WorkletsError.d.ts +13 -1
- package/lib/typescript/WorkletsError.d.ts.map +1 -1
- package/lib/typescript/WorkletsModule/NativeWorklets.d.ts.map +1 -1
- package/lib/typescript/errors.d.ts +0 -11
- package/lib/typescript/errors.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +0 -2
- package/lib/typescript/index.d.ts.map +1 -1
- package/package.json +10 -10
- package/plugin/index.js +1665 -2
- package/scripts/worklets_utils.rb +6 -1
- package/src/WorkletsError.ts +27 -7
- package/src/WorkletsModule/NativeWorklets.ts +9 -1
- package/src/errors.ts +0 -40
- package/src/index.ts +0 -2
- package/src/privateGlobals.d.ts +3 -0
- package/src/runtimes.ts +2 -2
- package/src/threads.ts +2 -2
- package/android/src/main/cpp/worklets/CMakeLists.txt +0 -85
|
@@ -12,7 +12,8 @@ def worklets_find_config()
|
|
|
12
12
|
:react_native_version => nil,
|
|
13
13
|
:react_native_minor_version => nil,
|
|
14
14
|
:react_native_node_modules_dir => nil,
|
|
15
|
-
:react_native_common_dir => nil
|
|
15
|
+
:react_native_common_dir => nil,
|
|
16
|
+
:dynamic_frameworks_worklets_dir => nil,
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
react_native_node_modules_dir = File.join(File.dirname(`cd "#{Pod::Config.instance.installation_root.to_s}" && node --print "require.resolve('react-native/package.json')"`), '..')
|
|
@@ -41,6 +42,10 @@ def worklets_find_config()
|
|
|
41
42
|
react_native_common_dir_relative = Pathname.new(react_native_common_dir_absolute).relative_path_from(pods_root).to_s
|
|
42
43
|
result[:react_native_common_dir] = react_native_common_dir_relative
|
|
43
44
|
|
|
45
|
+
react_native_worklets_dir_absolute = File.join(__dir__, '..')
|
|
46
|
+
react_native_worklets_dir_relative = Pathname.new(react_native_worklets_dir_absolute).relative_path_from(pods_root).to_s
|
|
47
|
+
result[:dynamic_frameworks_worklets_dir] = react_native_worklets_dir_relative
|
|
48
|
+
|
|
44
49
|
return result
|
|
45
50
|
end
|
|
46
51
|
|
package/src/WorkletsError.ts
CHANGED
|
@@ -1,13 +1,33 @@
|
|
|
1
|
+
/* eslint-disable reanimated/use-worklets-error */
|
|
1
2
|
'use strict';
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
function WorkletsErrorConstructor(message?: string): WorkletsError {
|
|
5
|
+
'worklet';
|
|
6
|
+
const prefix = '[Worklets]';
|
|
7
|
+
const errorInstance = new Error(message ? `${prefix} ${message}` : prefix);
|
|
8
|
+
errorInstance.name = `WorkletsError`;
|
|
9
|
+
return errorInstance as WorkletsError;
|
|
10
|
+
}
|
|
9
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Registers WorkletsError in the global scope. Register only for Worklet
|
|
14
|
+
* runtimes.
|
|
15
|
+
*/
|
|
10
16
|
export function registerWorkletsError() {
|
|
11
17
|
'worklet';
|
|
12
|
-
|
|
18
|
+
if (globalThis._WORKLET) {
|
|
19
|
+
globalThis.WorkletsError =
|
|
20
|
+
WorkletsErrorConstructor as IWorkletsErrorConstructor;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export const WorkletsError =
|
|
25
|
+
WorkletsErrorConstructor as IWorkletsErrorConstructor;
|
|
26
|
+
|
|
27
|
+
export type WorkletsError = Error & { name: 'Worklets' }; // signed type
|
|
28
|
+
|
|
29
|
+
export interface IWorkletsErrorConstructor extends Error {
|
|
30
|
+
new (message?: string): WorkletsError;
|
|
31
|
+
(message?: string): WorkletsError;
|
|
32
|
+
readonly prototype: WorkletsError;
|
|
13
33
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/* eslint-disable reanimated/use-reanimated-error */
|
|
2
|
+
/* eslint-disable @typescript-eslint/unbound-method */
|
|
2
3
|
'use strict';
|
|
3
4
|
|
|
4
5
|
import { WorkletsTurboModule } from '../specs';
|
|
@@ -27,7 +28,14 @@ class NativeWorklets {
|
|
|
27
28
|
See https://docs.swmansion.com/react-native-reanimated/docs/guides/troubleshooting#native-part-of-reanimated-doesnt-seem-to-be-initialized for more details.`
|
|
28
29
|
);
|
|
29
30
|
}
|
|
30
|
-
this.#workletsModuleProxy =
|
|
31
|
+
this.#workletsModuleProxy = {
|
|
32
|
+
scheduleOnUI: global.__workletsModuleProxy.scheduleOnUI,
|
|
33
|
+
scheduleOnRuntime: global.__workletsModuleProxy.scheduleOnRuntime,
|
|
34
|
+
executeOnUIRuntimeSync:
|
|
35
|
+
global.__workletsModuleProxy.executeOnUIRuntimeSync,
|
|
36
|
+
createWorkletRuntime: global.__workletsModuleProxy.createWorkletRuntime,
|
|
37
|
+
makeShareableClone: global.__workletsModuleProxy.makeShareableClone,
|
|
38
|
+
};
|
|
31
39
|
}
|
|
32
40
|
|
|
33
41
|
makeShareableClone<TValue>(
|
package/src/errors.ts
CHANGED
|
@@ -2,46 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
import type { WorkletStackDetails } from './workletTypes';
|
|
4
4
|
|
|
5
|
-
export type CustomError<TName extends string> = Error & { name: TName }; // signed type
|
|
6
|
-
|
|
7
|
-
export interface CustomErrorConstructor<TName extends string> extends Error {
|
|
8
|
-
new (message?: string): CustomError<TName>;
|
|
9
|
-
(message?: string): CustomError<TName>;
|
|
10
|
-
readonly prototype: CustomError<TName>;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export function createCustomError<TName extends string>(
|
|
14
|
-
name: TName
|
|
15
|
-
): CustomErrorConstructor<TName> {
|
|
16
|
-
const constructor = function CustomError(message?: string) {
|
|
17
|
-
'worklet';
|
|
18
|
-
const prefix = `[${name}]`;
|
|
19
|
-
// eslint-disable-next-line reanimated/use-worklets-error
|
|
20
|
-
const errorInstance = new Error(message ? `${prefix} ${message}` : prefix);
|
|
21
|
-
errorInstance.name = `${name}Error`;
|
|
22
|
-
return errorInstance;
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
Object.defineProperty(constructor, 'name', { value: `${name}Error` });
|
|
26
|
-
|
|
27
|
-
return constructor as CustomErrorConstructor<TName>;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/** Registers custom errors in global scope. Use it only for Worklet runtimes. */
|
|
31
|
-
export function registerCustomError<TName extends string>(
|
|
32
|
-
constructor: CustomErrorConstructor<TName>,
|
|
33
|
-
name: TName
|
|
34
|
-
) {
|
|
35
|
-
'worklet';
|
|
36
|
-
if (!_WORKLET) {
|
|
37
|
-
// eslint-disable-next-line reanimated/use-worklets-error
|
|
38
|
-
throw new Error(
|
|
39
|
-
'[Worklets] registerCustomError() must be called on a Worklet runtime'
|
|
40
|
-
);
|
|
41
|
-
}
|
|
42
|
-
(global as Record<string, unknown>)[`${name}Error`] = constructor;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
5
|
const _workletStackDetails = new Map<number, WorkletStackDetails>();
|
|
46
6
|
|
|
47
7
|
export function registerWorkletStackDetails(
|
package/src/index.ts
CHANGED
|
@@ -7,8 +7,6 @@ import { WorkletsModule } from './WorkletsModule';
|
|
|
7
7
|
// universal source of truth for it.
|
|
8
8
|
initializeUIRuntime(WorkletsModule);
|
|
9
9
|
|
|
10
|
-
export type { CustomError } from './errors';
|
|
11
|
-
export { createCustomError, registerCustomError } from './errors';
|
|
12
10
|
export type { LoggerConfig } from './logger';
|
|
13
11
|
export {
|
|
14
12
|
logger,
|
package/src/privateGlobals.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
/* eslint-disable reanimated/use-global-this */
|
|
1
2
|
/* eslint-disable no-var */
|
|
2
3
|
'use strict';
|
|
3
4
|
|
|
4
5
|
// This file works by accident - currently Builder Bob doesn't move `.d.ts` files to output types.
|
|
5
6
|
// If it ever breaks, we should address it so we'd not pollute the user's global namespace.
|
|
6
7
|
import type { callGuardDEV } from './initializers';
|
|
8
|
+
import type { IWorkletsErrorConstructor } from './WorkletsError';
|
|
7
9
|
import type { WorkletsModuleProxy } from './WorkletsModule';
|
|
8
10
|
|
|
9
11
|
declare global {
|
|
@@ -39,4 +41,5 @@ declare global {
|
|
|
39
41
|
worklet: ShareableRef<() => void>
|
|
40
42
|
) => void;
|
|
41
43
|
var _microtaskQueueFinalizers: (() => void)[];
|
|
44
|
+
var WorkletsError: IWorkletsErrorConstructor;
|
|
42
45
|
}
|
package/src/runtimes.ts
CHANGED
|
@@ -66,12 +66,12 @@ export function runOnRuntime<Args extends unknown[], ReturnValue>(
|
|
|
66
66
|
if (__DEV__ && !SHOULD_BE_USE_WEB && !isWorkletFunction(worklet)) {
|
|
67
67
|
throw new WorkletsError(
|
|
68
68
|
'The function passed to `runOnRuntime` is not a worklet.' +
|
|
69
|
-
(_WORKLET
|
|
69
|
+
(globalThis._WORKLET
|
|
70
70
|
? ' Please make sure that `processNestedWorklets` option in Reanimated Babel plugin is enabled.'
|
|
71
71
|
: '')
|
|
72
72
|
);
|
|
73
73
|
}
|
|
74
|
-
if (_WORKLET) {
|
|
74
|
+
if (globalThis._WORKLET) {
|
|
75
75
|
return (...args) =>
|
|
76
76
|
global._scheduleOnRuntime(
|
|
77
77
|
workletRuntime,
|
package/src/threads.ts
CHANGED
|
@@ -83,7 +83,7 @@ export function runOnUI<Args extends unknown[], ReturnValue>(
|
|
|
83
83
|
worklet: WorkletFunction<Args, ReturnValue>
|
|
84
84
|
): (...args: Args) => void {
|
|
85
85
|
'worklet';
|
|
86
|
-
if (__DEV__ && !SHOULD_BE_USE_WEB && _WORKLET) {
|
|
86
|
+
if (__DEV__ && !SHOULD_BE_USE_WEB && globalThis._WORKLET) {
|
|
87
87
|
throw new WorkletsError(
|
|
88
88
|
'`runOnUI` cannot be called on the UI runtime. Please call the function synchronously or use `queueMicrotask` or `requestAnimationFrame` instead.'
|
|
89
89
|
);
|
|
@@ -200,7 +200,7 @@ export function runOnJS<Args extends unknown[], ReturnValue>(
|
|
|
200
200
|
): (...args: Args) => void {
|
|
201
201
|
'worklet';
|
|
202
202
|
type FunDevRemote = Extract<typeof fun, DevRemoteFunction<Args, ReturnValue>>;
|
|
203
|
-
if (SHOULD_BE_USE_WEB || !_WORKLET) {
|
|
203
|
+
if (SHOULD_BE_USE_WEB || !globalThis._WORKLET) {
|
|
204
204
|
// if we are already on the JS thread, we just schedule the worklet on the JS queue
|
|
205
205
|
return (...args) =>
|
|
206
206
|
queueMicrotask(
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
cmake_minimum_required(VERSION 3.8)
|
|
2
|
-
|
|
3
|
-
file(GLOB_RECURSE WORKLETS_COMMON_CPP_SOURCES CONFIGURE_DEPENDS
|
|
4
|
-
"${COMMON_CPP_DIR}/worklets/*.cpp")
|
|
5
|
-
file(GLOB_RECURSE WORKLETS_ANDROID_CPP_SOURCES CONFIGURE_DEPENDS
|
|
6
|
-
"${ANDROID_CPP_DIR}/worklets/*.cpp")
|
|
7
|
-
|
|
8
|
-
# Consume shared libraries and headers from prefabs
|
|
9
|
-
find_package(fbjni REQUIRED CONFIG)
|
|
10
|
-
find_package(ReactAndroid REQUIRED CONFIG)
|
|
11
|
-
|
|
12
|
-
if(${JS_RUNTIME} STREQUAL "hermes")
|
|
13
|
-
find_package(hermes-engine REQUIRED CONFIG)
|
|
14
|
-
endif()
|
|
15
|
-
|
|
16
|
-
add_library(worklets SHARED ${WORKLETS_COMMON_CPP_SOURCES}
|
|
17
|
-
${WORKLETS_ANDROID_CPP_SOURCES})
|
|
18
|
-
|
|
19
|
-
# includes
|
|
20
|
-
target_include_directories(worklets PUBLIC "${COMMON_CPP_DIR}"
|
|
21
|
-
"${ANDROID_CPP_DIR}")
|
|
22
|
-
|
|
23
|
-
target_include_directories(
|
|
24
|
-
worklets
|
|
25
|
-
PRIVATE "${REACT_NATIVE_DIR}/ReactCommon"
|
|
26
|
-
"${REACT_NATIVE_DIR}/ReactAndroid/src/main/jni/react/turbomodule"
|
|
27
|
-
"${REACT_NATIVE_DIR}/ReactCommon/react/nativemodule/core/ReactCommon"
|
|
28
|
-
"${REACT_NATIVE_DIR}/ReactCommon/callinvoker"
|
|
29
|
-
"${REACT_NATIVE_DIR}/ReactCommon/runtimeexecutor")
|
|
30
|
-
|
|
31
|
-
if(${IS_NEW_ARCHITECTURE_ENABLED})
|
|
32
|
-
target_include_directories(
|
|
33
|
-
worklets
|
|
34
|
-
PRIVATE
|
|
35
|
-
"${REACT_NATIVE_DIR}/ReactCommon/yoga"
|
|
36
|
-
"${REACT_NATIVE_DIR}/ReactCommon/react/renderer/graphics/platform/cxx")
|
|
37
|
-
|
|
38
|
-
if(ReactAndroid_VERSION_MINOR LESS 76)
|
|
39
|
-
target_link_libraries(
|
|
40
|
-
worklets ReactAndroid::fabricjni ReactAndroid::react_debug
|
|
41
|
-
ReactAndroid::react_render_core
|
|
42
|
-
ReactAndroid::react_render_componentregistry ReactAndroid::rrc_view)
|
|
43
|
-
endif()
|
|
44
|
-
endif()
|
|
45
|
-
|
|
46
|
-
# build shared lib
|
|
47
|
-
set_target_properties(worklets PROPERTIES LINKER_LANGUAGE CXX)
|
|
48
|
-
|
|
49
|
-
target_link_libraries(worklets log ReactAndroid::jsi fbjni::fbjni)
|
|
50
|
-
|
|
51
|
-
if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76)
|
|
52
|
-
target_link_libraries(worklets ReactAndroid::reactnative)
|
|
53
|
-
else()
|
|
54
|
-
target_link_libraries(
|
|
55
|
-
worklets ReactAndroid::react_nativemodule_core ReactAndroid::folly_runtime
|
|
56
|
-
ReactAndroid::glog ReactAndroid::reactnativejni)
|
|
57
|
-
endif()
|
|
58
|
-
|
|
59
|
-
if(${JS_RUNTIME} STREQUAL "hermes")
|
|
60
|
-
target_link_libraries(worklets hermes-engine::libhermes)
|
|
61
|
-
|
|
62
|
-
if(${HERMES_ENABLE_DEBUGGER})
|
|
63
|
-
if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76)
|
|
64
|
-
target_link_libraries(worklets ReactAndroid::hermestooling)
|
|
65
|
-
else()
|
|
66
|
-
target_link_libraries(worklets ReactAndroid::hermes_executor)
|
|
67
|
-
endif()
|
|
68
|
-
endif()
|
|
69
|
-
elseif(${JS_RUNTIME} STREQUAL "jsc")
|
|
70
|
-
if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76)
|
|
71
|
-
target_link_libraries(worklets ReactAndroid::jsctooling)
|
|
72
|
-
else()
|
|
73
|
-
target_link_libraries(worklets ReactAndroid::jscexecutor)
|
|
74
|
-
endif()
|
|
75
|
-
elseif(${JS_RUNTIME} STREQUAL "v8")
|
|
76
|
-
# TODO: Refactor this when adding support for newest V8
|
|
77
|
-
target_include_directories(worklets PRIVATE "${JS_RUNTIME_DIR}/src")
|
|
78
|
-
file(GLOB V8_SO_DIR "${JS_RUNTIME_DIR}/android/build/intermediates/\
|
|
79
|
-
library_jni/**/jni/${ANDROID_ABI}")
|
|
80
|
-
find_library(
|
|
81
|
-
V8EXECUTOR_LIB v8executor
|
|
82
|
-
PATHS ${V8_SO_DIR}
|
|
83
|
-
NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
|
|
84
|
-
target_link_libraries(worklets ${V8EXECUTOR_LIB})
|
|
85
|
-
endif()
|